chianti-atomic / ChiantiPy

ChiantiPy is a python package to calculate the radiative properties of astrophysical plasmas based on the CHIANTI atomic database
63 stars 32 forks source link

AttributeError: module 'ChiantiPy.tools.data' has no attribute 'Abundance' #314

Open awalker4314 opened 3 years ago

awalker4314 commented 3 years ago

Hi, I just installed Chianti on Windows (I'm using Anaconda). When I try to run ch.ion, I get the error message

"AttributeError: module 'ChiantiPy.tools.data' has no attribute 'Abundance'"

What's tripping it up seems to be line 134 in [HOME]\anaconda3\lib\site-packages\ChiantiPy\core\Ion.py, which is

self.Abundance = chdata.Abundance[self.AbundanceName]['abundance'][self.Z-1]

I'm not sure how to fix this, and I haven't been able to find a solution for this problem anywhere else

kdere commented 3 years ago

Hi,

could you show me how you initiate your ion?

I am not able to duplicate your error.

Ken

awalker4314 commented 3 years ago

Thanks for the quick reply! Here's the block of code I'm using for this. Admittedly I'm not particularly experienced with Python, but I'm using essentially the same block of code that worked fine on a different laptop, which makes me think it could be an installation issue. Please let me know if you need anything else!

`import ChiantiPy.core as ch

T = [53420., 53420., 53420., 16320.] logne = list(np.linspace(2.5, 6.6, 500)) ne = 10.**np.array(logne) statename = ['o_5','ca_8','ca_7','o_4'] state = [[2,1],[1,0],[1,0],[1,0]]

ions, popion_numer, popion_denom = [], [], [] for i in range(len(statename)): ions.append(ch.ion(statename[i],temperature=T[i],eDensity=ne)) ions[i].populate() popion_numer.append(ions[i].Population['population'][:,state[i][0]]) popion_denom.append(ions[i].Population['population'][:,state[i][1]])`

kdere commented 3 years ago

I have coded this up and it all works.

One thing you might try is import ChiantiPy.tools.data as chdata chdata.Abundance

this should give you a dictionary of all of the abundance data files

or c4=ch.ion(T, ne) c4.Abundance

should give you the abundance of Carbon.

let me know how it goes

Ken

kdere commented 3 years ago

sorry, the code needs to have a single line turned into 2 lines

awalker4314 commented 3 years ago

So, I tried these, but they both give the same error as before

kdere commented 3 years ago

what happens when you do

import ChiantiPy.tools.data as chdata

chdata.Abundance

are you working in straight interactive Python, an ipython shell, or a jupyter notebook?

Ken

awalker4314 commented 3 years ago

Inputting just the first line goes smoothly, but the second line returns the error I had before. I'm using Spyder for this

kdere commented 3 years ago

after importing chdata, try:

hasattr(chdata,'Abundance')

hopefully this returns True

Ken

awalker4314 commented 3 years ago

Putting that in returns false

kdere commented 3 years ago

or: dir(chdata)

kdere commented 3 years ago

sounds like you are not reading anything. try os.environ('XUVTOP')

to see if it is pointing to the top of the CHIANTI directory

awalker4314 commented 3 years ago

dir(chdata) returns ['Defaults', 'Xuvtop', 'builtins', 'cached', 'doc', 'file', 'loader', 'name', 'package', 'spec', warningregistry', 'chio', 'glob', 'klnames', 'os', 'traceback', 'warnings']

os.environ['XUVTOP'] returns 'C:\Users\15405\ChiantiPy\dbase', as I set that manually in the line above the import line

kdere commented 3 years ago

what I get is: dir(chdata) ['Abundance', 'AbundanceDefault', 'AbundanceList', 'ChiantiVersion', 'Defaults', 'GrndLevels', 'IoneqAll', 'Ip', 'Klgbfn', 'MasterList', 'Xuvtop', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'aname', 'chio', 'filename', 'fname', 'glob', 'keywordArgs', 'kl', 'klnames', 'os', 'traceback', 'warnings']

and this is quite different

try: import ChiantiPy.tools.io as chio elvlc = chio.elvlcRead('c_4')

this should give you a dictionary of the energy levels of c_4 with the following keys:

dict_keys(['lvl', 'conf', 'term', 'label', 'spin', 'spd', 'l', 'j', 'mult', 'ecm', 'eryd', 'erydth', 'ecmth', 'ref', 'pretty', 'status', 'filename'])

somehow I don't think you are reading the database correctly

Ken

awalker4314 commented 3 years ago

Yes, that is definitely very different. Trying this new thing does give me a dictionary with those keys though

kdere commented 3 years ago

what version of ChiantiPy are you using? what version of the CHIANTI database are you using?

awalker4314 commented 3 years ago

I believe I'm using version 0.11.0 for ChiantiPy and 10.0.1 for the database.

As a side note, I was trying to compare the dbase directory to the one on my old computer, and I noticed that the dbase on my new computer is missing the folder PaxHeader. Is that important?

kdere commented 3 years ago

sounds like your versions are OK

I think the paxheader is something you get when the tar file is made under MacOs. It is not necessary.

since you were able to read the elvlc file, things should be OK but they are not. I am kind of baffled

Ken

kdere commented 3 years ago

are you using Python 3.X?

Ken

awalker4314 commented 3 years ago

Yes, Python 3.8.5

kdere commented 3 years ago

when you do

import ChiantiPy.tools.io as chio elvlc = chio.elvlcRead('c_4')

what does elvlc['filename'] give you and does it match were you think it should be based on your XUVTOP

awalker4314 commented 3 years ago

When I do this, elvlc['filename'] gives me 'C:\Users\15405\ChiantiPy\dbase\c\c_4\c_4.elvlc'. 'C:\Users\15405\ChiantiPy\dbase' is indeed my XVUTOP directory

awalker4314 commented 3 years ago

Since I had some trouble installing this at first on Windows, I thought this might be the reason for this problem, so I tried installing it on a work computer that uses Linux. After an easy 4-line installation, I get the exact same error on the Linux machine

awalker4314 commented 3 years ago

Scratch that, it works fine on Linux, so I reinstalled it on Windows and it works fine there too. Must've been a problem with the installation. Thanks so much for trying to help figure this out, and sorry for the trouble!

kdere commented 3 years ago

glad you got it working.

belay221 commented 10 months ago

Dear Sir I've read every comment that was made in 2021. With chianti-atomics, which stands for abundances of elements, I encountered the same issues. How can I fix the issue and move on to solving it on Windows 10 rather than in Lunix? I no longer use Linux; I use Windows.

belay221 commented 10 months ago

I've read every comment that was made in 2021. With chianti-atomics, which stands for abundances of elements, I encountered the same issues. How can I fix the issue and move on to solving it on Windows 10 rather than in Lunix? I no longer use Linux; I use Windows.

kdere commented 10 months ago

the problem that awalker has was that the environ variable XUVTOP was not set before the code was run. Make sure that XUVTOP points to the CHIANTI data.