Problem using GetEntry on a chain

Hello
I have a series of root files created by the ATLAS athena software. I seem to be able to plot histograms without any problems but when trying to access the actual numbers in the chain the output I am getting is always 0 (or ~10^-33).
Some example code:

TChain chain(“CollectionTree”);
chain.Add(“bd10001.aan.root”);
chain.Add(“bd10002.aan.root”);
chain.Add(“bd10003.aan.root”);

Float_t JpsiMass = 0;
chain.SetBranchAddress(“JpsiMass”, &JpsiMass);
for(int i = 0; i < chain.GetEntries(); ++i){
chain.GetEntry(i);
std::cout << "Entry: " << i << std::endl;
std::cout << JpsiMass << std::endl;
}
This gives an output along the lines of:
Entry: 0
5.81628e-33
Entry: 1
5.81628e-33
Entry: 2
5.81628e-33
Entry: 3
5.81628e-33
etc… The number changes each time I run but it is always effectively 0 and not around 3000 which is what I get when I plot it.

I think the problem is that data in the root file is saved in a slightly unusual way. If I do a:
chain.Scan(“JpsiMass”);
I get something like:


  • Row * Instance * JpsiMass *

  •    0 *        0 * 1169.8223 *
    
  •    0 *        1 * 18868.732 *
    
  •    0 *        2 * 3120.3016 *
    
  •    1 *        0 * 60993.448 *
    
  •    1 *        1 * 28015.276 *
    
  •    1 *        2 * 23108.280 *
    
  •    1 *        3 * 12970.957 *
    
  •    1 *        4 * 306.49083 *
    
  •    1 *        5 * 17989.376 *
    
  •    1 *        6 * 27748.248 *
    
  •    1 *        7 * 28063.830 *
    
  •    1 *        8 * 3520.0950 *
    
  •    1 *        9 * 10407.286 *
    
  •    2 *        0 * 613.46000 *
    
  •    2 *        1 * 18748.954 *
    
  •    2 *        2 * 1537.7683 *
    
  •    2 *        3 * 57904.155 *
    
  •    2 *        4 * 29852.022 *
    
  •    2 *        5 * 53332.928 *
    
  •    2 *        6 * 19310.274 *
    
  •    2 *        7 * 995.52865 *
    
  •    2 *        8 * 3065.5888 *
    
  •    2 *        9 * 13860.224 *
    
  •    2 *       10 * 18580.413 *
    
  •    3 *        0 * 32961.969 *
    

Type to continue or q to quit ==> q

So I assume there are several different JpsiMass values for each entry and this is why I am not getting out the correct values? Does anybody know a way I can fix this problem?

You do not provide enough info to solve your problem.
However, my guess is that your branch JpsiMass is a member of another class
or collection. Could you add the following statement before setting the branh address?

Float_t JpsiMass = 0; chain.SetMakeClass(1); //<===this line chain.SetBranchAddress("JpsiMass", &JpsiMass);
Ler me know

Rene

Thanks Rene
I added the line you suggested but unfortunately it didn’t appear to make any difference.

I thought this might be the case but I was not sure what information was required. I have also emailed the problem to the people responsible for writing the program that I use to create the root files and am waiting for their response. It looks more like its a problem caused by them rather than with anything to do with ROOT.

It appears you were correct about JpsiMass being a from a different class or collection. From using the TBrowser and the inspect method it appears that the root file contains several TBranches but the ones I want to access are TBranchElements.