== Installing Delphes from Source == To successfully build Delphes the following prerequisite packages should be installed: - [http://root.cern.ch/drupal/content/downloading-root ROOT Data Analysis Framework] - [http://www.tcl.tk Tcl scripting language] 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 [wiki: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"); }}}