Reading TTree in MakeClass macro

Hi,

I am using TTree::MakeClass to create this macro:

#define Analysis_cxx
#include "Analysis.h"
#include <TH2.h>
#include <TStyle.h>
#include <TCanvas.h>
#include <cmath>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
#include <fstream>
#include <vector>
using std::vector;
#include <string>
using std::string;

void Analysis::Loop()
{
  fChain->SetBranchStatus("*",0);  // disable all branches
    fChain->SetBranchStatus("dstar_kpipi_dm",1);  // activate branchname

   if (fChain == 0) return;

  TH1D *hdm = new TH1D("hdm","delta mass", 500, 130, 180);


   Long64_t nentries = fChain->GetEntriesFast();

   Long64_t nbytes = 0, nb = 0;
   for (Long64_t jentry=0; jentry<nentries;jentry++) {
      Long64_t ientry = LoadTree(jentry);
      if (ientry < 0) break;
      nb = fChain->GetEntry(jentry);   nbytes += nb;
        Double_t dm;
        dm = b_dstar_kpipi_dm->GetEntry(ientry);
        hdm->Fill(dm);
cout << "b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; " << dm << " / " << dstar_kpipi_dm[ientry] << endl;
   }

hdm->Draw();
}

and the output from the cout is :

b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 580 / -999
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 332 / 1497.06
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 324 / -999
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 980 / 414.299
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 312 / 350.336
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 576 / 443.982
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 624 / 300.958
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 544 / 746.902
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 596 / -999
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 632 / 777.441
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 296 / 690.012
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 680 / 330.229
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 420 / 195.626
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 552 / 804.128
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 336 / -999
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 540 / -999
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 244 / -999
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 500 / 413.373
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 648 / 471.233
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 464 / -999
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 656 / 568.021
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 420 / -999
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 524 / 1160.47
b_dstar_kpipi_dm->GetEntry(ientry) / dstar_kpipi_dm[ientry]; 604 / 1395.15
.
.
.

From the header file, the variable leaf type is Float_t dstar_kpipi_dm[320]; //[Ntracks] and branch TBranch *b_dstar_kpipi_dm; //!.

I am confused about why b_dstar_kpipi_dm->GetEntry(ientry) and dstar_kpipi_dm[ientry] result in different numbers. I know the variable is a vector but I do not understand why the branch entries do not match the variable entries.

If I fill my histogram with b_dstar_kpipi_dm->GetEntry(ientry) I do not get the right values in my histogram and if I fill my histogram with dstar_kpipi_dm[ientry] all the entries go into the 0 bin.

If someone could explain this to me I would be grateful.

Thanks,
Sarah

Try:

void Analysis::Loop() {
  if (fChain == 0) return; // just a precaution
  fChain->SetBranchStatus("*", 0);  // disable all branches
  fChain->SetBranchStatus("Ntracks", 1); // needed by "dstar_kpipi_dm"
  fChain->SetBranchStatus("dstar_kpipi_dm", 1);
  
  TH1D *hdm = new TH1D("hdm","delta mass", 500, 130, 180);
  
  Long64_t nentries = fChain->GetEntriesFast();
  
  for (Long64_t jentry = 0; jentry < nentries; jentry++) {
    Long64_t ientry = LoadTree(jentry);
    if (ientry < 0) break;
#if 1 /* 0 or 1 */
    fChain->GetEntry(jentry);
#else /* 0 or 1 */
    b_Ntracks->GetEntry(ientry); // needed by "dstar_kpipi_dm"
    b_dstar_kpipi_dm->GetEntry(ientry);
#endif /* 0 or 1 */
    for (Int_t i = 0; i < Ntracks; i++) hdm->Fill(dstar_kpipi_dm[i]);
  }
  
  hdm->Draw();
}

Thank you!

That worked except instead of

it is hdm->Fill(dstar_kpipi_dm[i])

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.