Home | News | Documentation | Download

Error in Macro-based analysis

im trying to execute the following macro

Simple macro showing how to access branches from the delphes output root file,
loop over events, and plot simple quantities such as the jet pt and the di-electron invariant

root -l examples/testExample1.C'("trainoutputsignal.root")'

#ifdef __CLING__
#include "classes/DelphesClasses.h"
#include "external/ExRootAnalysis/ExRootTreeReader.h"


void testExample1(const char *inputfile)

  // Create chain of root trees
  TChain chain("Delphes");

  // Create object of class ExRootTreeReader
  ExRootTreeReader *treeReader = new ExRootTreeReader(&chain);
  Long64_t numberOfEntries = treeReader->GetEntries();

  // Get pointers to branches used in this analysis
  TClonesArray *branchFatJet = treeReader->UseBranch("FatJet");
  TClonesArray *branchElectron = treeReader->UseBranch("Electron");
  TClonesArray *branchEvent = treeReader->UseBranch("Event");

  // Book histograms
  TH1 *histFatJetPT = new TH1F("fatjet_pt", "fatjet P_{T}", 100, 0.0, 800.0);
  TH1 *histMass = new TH1F("mass", "M_{inv}(e_{1}, e_{2})", 100, 40.0, 140.0);

  // Loop over all events
  for(Int_t entry = 0; entry < numberOfEntries; ++entry)
    // Load selected branches with data from specified event

    //HepMCEvent *event = (HepMCEvent*) branchEvent -> At(0);
    //LHEFEvent *event = (LHEFEvent*) branchEvent -> At(0);
    //Float_t weight = event->Weight;

    // If event contains at least 1 fatjet
    if(branchFatJet->GetEntries() > 0)
      // Take first fatjet
      fatJet *fatjet = (fatJet*) branchFatJet->At(0);

      // Plot Fatjet transverse momentum

      // Print fatjet transverse momentum
      cout << "FatJet pt: "<<Fatjet->PT << endl;

    Electron *elec1, *elec2;

    // If event contains at least 2 electrons
    if(branchElectron->GetEntries() > 1)
      // Take first two electrons
      elec1 = (Electron *) branchElectron->At(0);
      elec2 = (Electron *) branchElectron->At(1);

      // Plot their invariant mass
      histMass->Fill(((elec1->P4()) + (elec2->P4())).M());

  // Show resulting histograms

but when i run it. i get the error

how to fix this problem.?

this error is not related to ROOT (nor Delphes), it’s a classic C++ coding mistake: as the interpreter says, fatJet is used without ever having been declared. Maybe you meant to use branchFatJet there? (I can’t really say: ExRootTreeReader is not a ROOT class, it’s from Delphes.


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