I'm trying to store histograms in an array full of nested arrays that are created in multiple for a loop.
The error that I am getting is that: 'TH1F
' object has no attribute 'append'
Here's an example of how the code works (a simplified version):
hist = []
for c in range 2:
hist.append([])
for e in range 4:
hist[c].append([])
hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
hist[c][e].append(hist_m)
for z in range 8:
hist[c][e].append([])
hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
hist[c][e][z].append(hist_m) #crashes here
for pT in range 32:
hist[c][e][z].append([])
hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
hist[c][e][z][pT].append(hist_m)
I'm trying to store all of these different histograms inside of this large array so that I can use them later in the code by simply using the index. But I am getting the error
'TH1F' object has no attribute 'append'
which I don't know how to fix. Any solutions?
The code crashes on this line:
hist[c][e][z].append( hist )
Thanks in advance!
Here, and in other places, you're overwriting your hist
variable that otherwise points to the large "array" you're building:
hist = ROOT.TH1F("some name","some name",0,0.0,50.0)
Use a different name ...
EDIT: since you now changed the naming, consider that you first add a TH1F:
hist[c][e].append(hist_m)
and afterwards a fresh list:
hist[c][e].append([])
so now the first element of list hist[c][e]
is a TH1F, the second is a new list. Ie., you have:
[[[<ROOT.TH1F object ("some name") at 0x556fd65038d0>, []]]]
and zero indexing (c == e == z == 0
) selects that TH1F.
The data structure as you seem to envision (an indexing being both a histogram if no further indexing happens, but a list if it does), isn't going to work. (Granted, you can add a __getitem__
method to the TH1F class to return a list, but that'd be a rather odd thing to do.)
If you want to have a large, indexable, "array" of histograms, those histograms will all have to be on the final leaf nodes.