Fork me on GitHub

Version 8 (modified by Pavel Demin, 12 years ago) ( diff )

--

Installing Delphes from Source

To successfully build Delphes the following prerequisite packages should be installed:

Commands to download Delphes' source and build Delphes:

  setup ROOT environment variables

  wget --no-check-certificate https://cp3.irmp.ucl.ac.be/projects/delphes/raw-attachment/wiki/WikiStart/Delphes_V_3.0.0.tar.gz
  tar -zxf Delphes_V_3.0.0.tar.gz

  cd Delphes_V_3.0.0
  make -j 4

Running Delphes

When running Delphes without parameters or when supplying an invalid command line, the following message will be shown:

./DelphesHepMC
 Usage: DelphesHepMC config_file output_file [input_file(s)]
 config_file - configuration file in Tcl format,
 output_file - output file in ROOT format,
 input_file(s) - input file(s) in HepMC format,
 with no input_file, or when input_file is -, read standard input.

Running Delphes with HepMC input files:

./DelphesHepMC examples/delphes_card_CMS.tcl output.root input.hepmc

Running Delphes with STDHEP (XDR) input files:

./DelphesSTDHEP examples/delphes_card_CMS.tcl delphes_output.root input.hep

Running Delphes with LHEF input files:

./DelphesLHEF examples/delphes_card_CMS.tcl delphes_output.root input.lhef

Running Delphes with files stored in CASTOR:

rfcat /castor/cern.ch/user/d/demine/test.hepmc.gz | gunzip | ./DelphesHepMC examples/delphes_card_CMS.tcl delphes_output.root

Running Delphes with files accessible via HTTP:

curl http://cp3.irmp.ucl.ac.be/~demin/test.hepmc.gz | gunzip | ./DelphesHepMC examples/delphes_card_CMS.tcl delphes_output.root

Analyzing Delphes' Output

Delphes' output can be analyzed with the ROOT data analysis framework.

Simple analysis using TTree::Draw

Start ROOT and load Delphes' shared library:

root
gSystem->Load("libDelphes");

Open ROOT tree file and do some basic analysis using Draw or TBrowser:

TFile::Open("delphes_output.root");
Delphes->Draw("Electron.PT");
TBrowser browser;

Note 1: Delphes - tree name, it can be learnt e.g. from TBrowser

Note 2: Electron - branch name; PT - variable (leaf) of this branch

Complete description of all branches can be found at WorkBook/RootTreeDescription

Macro-based analysis

Delphes/examples directory contains a basic ROOT analysis macro called Example1.C. This ROOT analysis macro consists of histogram booking, event loop (histogram filling), histogram display.

Here are commands to run this macro:

root
gSystem->Load("libDelphes");
.X examples/Example1.C("delphes_output.root");

And here is the full source code of this macro:

void Example1(const char *inputFile)
{
  // Create chain of root trees
  TChain chain("Delphes");
  chain.Add(inputFile);
  
  // Create object of class ExRootTreeReader
  ExRootTreeReader *treeReader = new ExRootTreeReader(&chain);
  Long64_t numberOfEntries = treeReader->GetEntries();
  
  // Get pointers to branches used in this analysis
  TClonesArray *branchJet = treeReader->UseBranch("Jet");
  TClonesArray *branchElectron = treeReader->UseBranch("Electron");
  
  // Book histograms
  TH1 *histJetPT = new TH1F("jet_pt", "jet P_{T}", 100, 0.0, 100.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
    treeReader->ReadEntry(entry);
  
    // If event contains at least 1 jet
    if(branchJet->GetEntries() > 0)
    {

      // Take first jet
      TRootJet *jet = (TRootJet*) branchJet->At(0);
      
      // Plot jet transverse momentum
      histJetPT->Fill(jet->PT);
      
      // Print jet transverse momentum
      cout << jet->PT << endl;
    }

    TRootElectron *elec1, *elec2;
    TLorentzVector vec1, vec2;

    // If event contains at least 2 electrons
    if(branchElectron->GetEntries() > 1)
    {

      // Take first two electrons
      elec1 = (TRootElectron *) branchElectron->At(0);
      elec2 = (TRootElectron *) branchElectron->At(1);

      // Create two 4-vectors for the electrons
      vec1.SetPtEtaPhiM(elec1->PT, elec1->Eta, elec1->Phi, 0.0);
      vec2.SetPtEtaPhiM(elec2->PT, elec2->Eta, elec2->Phi, 0.0);

      // Plot their invariant mass
      histMass->Fill((vec1 + vec2).M());
    }
  }

  // Show resulting histograms
  histJetPT->Draw();
  histMass->Draw();
}

More advanced macro-based analysis

Delphes/examples directory contains a ROOT macro called Example2.C demonstrating how to use class ExRootTreeReader to access data and class ExRootResult} to manage histograms booking and output.

Here are commands to run this macro:

root
gSystem->Load("libDelphes");
.X examples/Example2.C("delphes_output.root");
Note: See TracWiki for help on using the wiki.