0
c_energy3 = pd.DataFrame(data=np.arange(start=100, stop=500, step=10))
c_energy2=c_energy3.T
c_energy=c_energy2.to_numpy()

Ei=c_energy
dE=0.01
di = [] 
count=0 
while Ei>1: 
    Ei=Ei-dE
    KE= Ei*mass_C
    gamma=(float(KE)/float(Eo))+1
    beta=math.sqrt(1-(1/float(gamma))**2)
    v=beta*c
    eta=beta*gamma
    Wmax=2*mass_e*(math.pow(c,2))*(math.pow(eta,2))
    for_log=2*mass_e*(math.pow(gamma,2))*(math.pow(v,2))*Wmax*(math.pow(I,-2))
    SP=C*rho*(Zeff/Aeff)*(math.pow((z/beta),2))*((np.log(for_log))-(2*(math.pow(beta,2))))
    di.append(dE*12/SP) 
    count+=1 
    #print(SP)
print(sum(di))

I want to ask how to solve this problem? the input (Ei) is a dataframe. how do I fix this?

thank you

Hana T. A
  • 11
  • 1
  • `c_energy` is an array, therefore `Ei` is an array. What did you expect `while Ei > 1:` to do? And why create a DataFrame from a numpy source and then convert it back to numpy? – Tim Roberts Sep 26 '22 at 04:47
  • Don't use an array (or Series) in a Python test that expects a simple True/False, such as a `while` or `it`. – hpaulj Sep 26 '22 at 04:49

1 Answers1

0

The code below works and delivers a value. Probably is it what you wanted to achieve, so try it out:

import pandas as pd
import numpy as np
import math
#c_energy3 = pd.DataFrame(data=np.arange(start=100, stop=500, step=10))
#c_energy2=c_energy3.T
#c_energy=c_energy2.to_numpy()
c_energy= np.arange(start=100, stop=500, step=10).T
#Ei=c_energy
dE=0.01
di = [] 
count=0 
mass_C,mass_e,Eo,c, I, C, rho,Zeff, Aeff, z, beta, for_log = [1.0]*12
for Ei in c_energy: 
    Ei=Ei-dE
    KE= Ei*mass_C
    gamma=(float(KE)/float(Eo))+1
    beta=math.sqrt(1-(1/float(gamma))**2)
    v=beta*c
    eta=beta*gamma
    Wmax=2*mass_e*(math.pow(c,2))*(math.pow(eta,2))
    for_log=2*mass_e*(math.pow(gamma,2))*(math.pow(v,2))*Wmax*(math.pow(I,-2))
    SP=C*rho*(Zeff/Aeff)*(math.pow((z/beta),2))*((np.log(for_log))-(2*(math.pow(beta,2))))
    di.append(dE*12/SP) 
    count+=1 
    #print(SP)
print(sum(di))
Claudio
  • 7,474
  • 3
  • 18
  • 48