Fork me on GitHub

Changeset d38348d in git


Ignore:
Timestamp:
Jun 26, 2015, 11:46:42 AM (9 years ago)
Author:
Pavel Demin <pavel-demin@…>
Branches:
ImprovedOutputFile, Timing, dual_readout, llp, master
Children:
fe0273c
Parents:
1d9974e (diff), f53a4d2 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge pull request #14 from delphes/master

synchronize mergeCMS with master

Files:
14 edited

Legend:

Unmodified
Added
Removed
  • cards/delphes_card_ATLAS.tcl

    r1d9974e rd38348d  
    295295
    296296module Efficiency PhotonEfficiency {
    297   set InputArray Calorimeter/photons
     297  set InputArray Calorimeter/eflowPhotons
    298298  set OutputArray photons
    299299
  • classes/DelphesFormula.cc

    r1d9974e rd38348d  
    2323
    2424#include <stdexcept>
    25 #include <string>
    2625
    2726using namespace std;
     
    5150Int_t DelphesFormula::Compile(const char *expression)
    5251{
    53   string buffer;
     52  TString buffer;
    5453  const char *it;
    5554  for(it = expression; *it; ++it)
    5655  {
    5756    if(*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n' || *it == '\\' ) continue;
    58     buffer.push_back(*it);
     57    buffer.Append(*it);
    5958  }
    60   if(TFormula::Compile(buffer.c_str()) != 0)
     59  buffer.ReplaceAll("pt", "x");
     60  buffer.ReplaceAll("eta", "y");
     61  buffer.ReplaceAll("phi", "z");
     62  buffer.ReplaceAll("energy", "t");
     63  if(TFormula::Compile(buffer) != 0)
    6164  {
    6265    throw runtime_error("Invalid formula.");
     
    7477
    7578//------------------------------------------------------------------------------
    76 
    77 Int_t DelphesFormula::DefinedVariable(TString &chaine, Int_t &action)
    78 {
    79   action = kVariable;
    80   if(chaine == "pt")
    81   {
    82     if(fNdim < 1) fNdim = 1;
    83     return 0;
    84   }
    85   else if(chaine == "eta")
    86   {
    87     if(fNdim < 2) fNdim = 2;
    88     return 1;
    89   }
    90   else if(chaine == "phi")
    91   {
    92     if(fNdim < 3) fNdim = 3;
    93     return 2;
    94   }
    95   else if(chaine == "energy")
    96   {
    97     if(fNdim < 4) fNdim = 4;
    98     return 3;
    99   }
    100   return -1;
    101 }
    102 
    103 //------------------------------------------------------------------------------
  • classes/DelphesFormula.h

    r1d9974e rd38348d  
    3535
    3636  Double_t Eval(Double_t pt, Double_t eta = 0, Double_t phi = 0, Double_t energy = 0);
    37 
    38   Int_t DefinedVariable(TString &variable, Int_t &action);
    3937};
    4038
  • classes/DelphesTF2.cc

    r1d9974e rd38348d  
    1818
    1919#include "classes/DelphesTF2.h"
     20
     21#include "RVersion.h"
    2022#include "TString.h"
     23
    2124#include <stdexcept>
    22 #include <string>
    2325
    2426using namespace std;
     
    3436
    3537DelphesTF2::DelphesTF2(const char *name, const char *expression) :
    36   TF2(name,expression)
     38  TF2(name, expression)
    3739{
    3840}
     
    4648//------------------------------------------------------------------------------
    4749
    48 Int_t DelphesTF2::DefinedVariable(TString &chaine, Int_t &action)
     50Int_t DelphesTF2::Compile(const char *expression)
    4951{
    50   action = kVariable;
    51   if(chaine == "z")
     52  TString buffer;
     53  const char *it;
     54  for(it = expression; *it; ++it)
    5255  {
    53     if(fNdim < 1) fNdim = 1;
    54     return 0;
     56    if(*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n' || *it == '\\' ) continue;
     57    buffer.Append(*it);
    5558  }
    56   else if(chaine == "t")
     59  buffer.ReplaceAll("z", "x");
     60  buffer.ReplaceAll("t", "y");
     61#if  ROOT_VERSION_CODE < ROOT_VERSION(6,04,00)
     62  if(TF2::Compile(buffer) != 0)
     63#else
     64  if(TF2::GetFormula()->Compile(buffer) != 0)
     65#endif
    5766  {
    58     if(fNdim < 2) fNdim = 2;
    59     return 1;
     67    throw runtime_error("Invalid formula.");
    6068  }
    61   return -1;
     69  return 0;
    6270}
    6371
  • classes/DelphesTF2.h

    r1d9974e rd38348d  
    2121
    2222#include "TF2.h"
    23 #include "TFormula.h"
    24 
    25 #include <string>
    2623
    2724class DelphesTF2: public TF2
     
    3532  ~DelphesTF2();
    3633
    37   Int_t DefinedVariable(TString &variable, Int_t &action);
    38 
     34  Int_t Compile(const char *expression);
    3935};
    4036
    4137#endif /* DelphesTF2_h */
    42 
  • display/Delphes3DGeometry.cc

    r1d9974e rd38348d  
    1717 */
    1818
    19 #include "display/Delphes3DGeometry.h"
    2019#include <set>
    2120#include <map>
    22 #include <string>
    2321#include <utility>
    2422#include <vector>
     
    2624#include <sstream>
    2725#include <cassert>
     26
     27#include "TAxis.h"
    2828#include "TGeoManager.h"
    2929#include "TGeoVolume.h"
     
    3535#include "TGeoCone.h"
    3636#include "TGeoArb8.h"
    37 #include "external/ExRootAnalysis/ExRootConfReader.h"
    38 #include "classes/DelphesClasses.h"
    3937#include "TF2.h"
    4038#include "TFormula.h"
    4139#include "TH1F.h"
    4240#include "TMath.h"
     41#include "TString.h"
     42
     43#include "display/Delphes3DGeometry.h"
     44
     45#include "classes/DelphesClasses.h"
     46#include "external/ExRootAnalysis/ExRootConfReader.h"
    4347
    4448using namespace std;
     
    9397   tk_Bz_     = confReader->GetDouble("ParticlePropagator::Bz", 0.0);                           // tk_Bz
    9498   
    95    string buffer;
     99   TString buffer;
    96100   const char *it;
    97101 
     
    103107   tkEffFormula.ReplaceAll("phi","0.");
    104108 
     109   buffer.Clear();
    105110   for(it = tkEffFormula.Data(); *it; ++it)
    106111   {
    107112     if(*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n' || *it == '\\' ) continue;
    108      buffer.push_back(*it);
    109    }
    110 
    111    TF2* tkEffFunction = new TF2("tkEff",buffer.c_str(),0,1000,-10,10);
     113     buffer.Append(*it);
     114   }
     115
     116   TF2* tkEffFunction = new TF2("tkEff",buffer,0,1000,-10,10);
    112117   TH1F etaHisto("eta","eta",100,5.,-5.);
    113118   Double_t pt,eta;
     
    132137   muonEffFormula.ReplaceAll("phi","0.");
    133138   
    134    buffer.clear();
     139   buffer.Clear();
    135140   for(it = muonEffFormula.Data(); *it; ++it)
    136141   {
    137142     if(*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n' || *it == '\\' ) continue;
    138      buffer.push_back(*it);
    139    }
    140 
    141    TF2* muEffFunction = new TF2("muEff",buffer.c_str(),0,1000,-10,10);
     143     buffer.Append(*it);
     144   }
     145
     146   TF2* muEffFunction = new TF2("muEff",buffer,0,1000,-10,10);
    142147   TH1F etaHisto("eta2","eta2",100,5.,-5.);
    143148   Double_t pt,eta;
  • display/Delphes3DGeometry.h

    r1d9974e rd38348d  
    11/*
    2  * Delphes: a framework for fast simulation of a generic collider experiment
    3  * Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
     2  * Delphes: a framework for fast simulation of a generic collider experiment
     3  * Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
    44 *
    5  * This program is free software: you can redistribute it and/or modify
    6  * it under the terms of the GNU General Public License as published by
    7  * the Free Software Foundation, either version 3 of the License, or
    8  * (at your option) any later version.
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, either version 3 of the License, or
     8  * (at your option) any later version.
    99 *
    10  * This program is distributed in the hope that it will be useful,
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  * GNU General Public License for more details.
     10  * This program is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  * GNU General Public License for more details.
    1414 *
    15  * You should have received a copy of the GNU General Public License
    16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  * You should have received a copy of the GNU General Public License
     16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1717 */
    1818
     
    2222#include <set>
    2323#include <map>
    24 #include <utility>
    2524#include <vector>
    26 #include <algorithm>
    27 #include <sstream>
    28 #include "TAxis.h"
    29 #include "TGeoManager.h"
    30 #include "TGeoVolume.h"
    31 #include "TGeoMedium.h"
     25
     26#include "Rtypes.h"
     27
     28class TAxis;
     29class TGeoManager;
     30class TGeoVolume;
     31class TGeoMedium;
    3232
    3333// TODO: asymmetric detector
     
    3838     ~Delphes3DGeometry() {}
    3939
    40      void readFile(const char* filename, const char* ParticlePropagator="ParticlePropagator",
    41                                          const char* TrackingEfficiency="ChargedHadronTrackingEfficiency",
    42                                          const char* MuonEfficiency="MuonEfficiency",
    43                                          const char* Calorimeters="Calorimeter");
     40     void readFile(const char *filename, const char *ParticlePropagator="ParticlePropagator",
     41                                         const char *TrackingEfficiency="ChargedHadronTrackingEfficiency",
     42                                         const char *MuonEfficiency="MuonEfficiency",
     43                                         const char *Calorimeters="Calorimeter");
    4444
    4545     void setContingency(Double_t contingency) { contingency_ = contingency; }
     
    4848     void setMuonSystemThickness(Double_t thickness) { muonSystem_thickn_ = thickness; }
    4949
    50      TGeoVolume* getDetector(bool withTowers = true);
     50     TGeoVolume *getDetector(bool withTowers = true);
    5151
    5252     Double_t getTrackerRadius() const { return tk_radius_; }
     
    5959   private:
    6060     std::pair<Double_t, Double_t> addTracker(TGeoVolume *top);
    61      std::pair<Double_t, Double_t> addCalorimeter(TGeoVolume *top, const char* name, Double_t innerBarrelRadius, Double_t innerBarrelLength, std::set< std::pair<Double_t, Int_t> >& caloBinning);
    62      std::pair<Double_t, Double_t> addMuonDets(TGeoVolume *top, const char* name, Double_t innerBarrelRadius, Double_t innerBarrelLength);
    63      void addCaloTowers(TGeoVolume *top, const char* name, Double_t innerBarrelRadius, Double_t innerBarrelLength, std::set< std::pair<Double_t, Int_t> >& caloBinning);
     61     std::pair<Double_t, Double_t> addCalorimeter(TGeoVolume *top, const char *name, Double_t innerBarrelRadius, Double_t innerBarrelLength, std::set< std::pair<Double_t, Int_t> >& caloBinning);
     62     std::pair<Double_t, Double_t> addMuonDets(TGeoVolume *top, const char *name, Double_t innerBarrelRadius, Double_t innerBarrelLength);
     63     void addCaloTowers(TGeoVolume *top, const char *name, Double_t innerBarrelRadius, Double_t innerBarrelLength, std::set< std::pair<Double_t, Int_t> >& caloBinning);
    6464
    6565   private:
     
    7272     TGeoMedium *mudetmed_;
    7373
    74      TAxis* etaAxis_;
    75      TAxis* phiAxis_;
     74     TAxis *etaAxis_;
     75     TAxis *phiAxis_;
    7676
    7777     Double_t contingency_;
     
    9191     std::map<std::string, Double_t> muonSystem_etamax_;
    9292     std::map<std::string, std::set< std::pair<Double_t, Int_t> > > caloBinning_;
    93      
     93
    9494};
    9595
  • display/DelphesEventDisplay.cc

    r1d9974e rd38348d  
    11/*
    2  * Delphes: a framework for fast simulation of a generic collider experiment
    3  * Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
     2  * Delphes: a framework for fast simulation of a generic collider experiment
     3  * Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
    44 *
    5  * This program is free software: you can redistribute it and/or modify
    6  * it under the terms of the GNU General Public License as published by
    7  * the Free Software Foundation, either version 3 of the License, or
    8  * (at your option) any later version.
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, either version 3 of the License, or
     8  * (at your option) any later version.
    99 *
    10  * This program is distributed in the hope that it will be useful,
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  * GNU General Public License for more details.
     10  * This program is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  * GNU General Public License for more details.
    1414 *
    15  * You should have received a copy of the GNU General Public License
    16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  * You should have received a copy of the GNU General Public License
     16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1717 */
    1818
     
    2121#include <utility>
    2222#include <algorithm>
     23
    2324#include "TGeoManager.h"
    2425#include "TGeoVolume.h"
    25 #include "external/ExRootAnalysis/ExRootConfReader.h"
    26 #include "external/ExRootAnalysis/ExRootTreeReader.h"
    27 #include "display/DelphesCaloData.h"
    28 #include "display/DelphesBranchElement.h"
    29 #include "display/Delphes3DGeometry.h"
    30 #include "display/DelphesEventDisplay.h"
    31 #include "classes/DelphesClasses.h"
    3226#include "TEveElement.h"
    3327#include "TEveJetCone.h"
     
    5347#include "TCanvas.h"
    5448#include "TH1F.h"
     49#include "TAxis.h"
     50#include "TChain.h"
     51#include "TGHtml.h"
     52#include "TGStatusBar.h"
     53
     54#include "display/DelphesCaloData.h"
     55#include "display/DelphesBranchElement.h"
     56#include "display/Delphes3DGeometry.h"
     57#include "display/DelphesEventDisplay.h"
     58#include "display/DelphesDisplay.h"
     59#include "display/Delphes3DGeometry.h"
     60#include "display/DelphesHtmlSummary.h"
     61#include "display/DelphesPlotSummary.h"
     62
     63#include "classes/DelphesClasses.h"
     64#include "external/ExRootAnalysis/ExRootConfReader.h"
     65#include "external/ExRootAnalysis/ExRootTreeReader.h"
    5566
    5667DelphesEventDisplay::DelphesEventDisplay()
     
    98109   TEveManager::Create(kTRUE, "IV");
    99110   fStatusBar_ = gEve->GetBrowser()->GetStatusBar();
    100    TGeoManager* geom = gGeoManager;
     111   TGeoManager *geom = gGeoManager;
    101112
    102113   // build the detector
     
    108119   etaAxis_ = det3D.getCaloAxes().first;
    109120   phiAxis_ = det3D.getCaloAxes().second;
    110    TGeoVolume* top = det3D.getDetector(false);
     121   TGeoVolume *top = det3D.getDetector(false);
    111122   geom->SetTopVolume(top);
    112123   TEveElementList *geometry = new TEveElementList("Geometry");
    113    TObjArray* nodes = top->GetNodes();
     124   TObjArray *nodes = top->GetNodes();
    114125   TIter itNodes(nodes);
    115    TGeoNode* nodeobj;
    116    TEveGeoTopNode* node;
     126   TGeoNode *nodeobj;
     127   TEveGeoTopNode *node;
    117128   while((nodeobj = (TGeoNode*)itNodes.Next())) {
    118129     node = new TEveGeoTopNode(gGeoManager,nodeobj);
     
    131142   // prepare data collections
    132143   readConfig(configFile, elements_);
    133    for(std::vector<DelphesBranchBase*>::iterator element = elements_.begin(); element<elements_.end(); ++element) {
    134      DelphesBranchElement<TEveTrackList>*   item_v1 = dynamic_cast<DelphesBranchElement<TEveTrackList>*>(*element);
    135      DelphesBranchElement<TEveElementList>* item_v2 = dynamic_cast<DelphesBranchElement<TEveElementList>*>(*element);
     144   for(std::vector<DelphesBranchBase *>::iterator element = elements_.begin(); element<elements_.end(); ++element) {
     145     DelphesBranchElement<TEveTrackList> *item_v1 = dynamic_cast<DelphesBranchElement<TEveTrackList>*>(*element);
     146     DelphesBranchElement<TEveElementList> *item_v2 = dynamic_cast<DelphesBranchElement<TEveElementList>*>(*element);
    136147     if(item_v1) gEve->AddElement(item_v1->GetContainer());
    137148     if(item_v2) gEve->AddElement(item_v2->GetContainer());
     
    144155   delphesDisplay_->ImportGeomRhoZ(geometry);
    145156   // find the first calo data and use that to initialize the calo display
    146    for(std::vector<DelphesBranchBase*>::iterator data=elements_.begin();data<elements_.end();++data) {
     157   for(std::vector<DelphesBranchBase *>::iterator data=elements_.begin();data<elements_.end();++data) {
    147158     if(TString((*data)->GetType())=="Tower") { // we could also use GetClassName()=="DelphesCaloData"
    148        DelphesCaloData* container = dynamic_cast<DelphesBranchElement<DelphesCaloData>*>((*data))->GetContainer();
     159       DelphesCaloData *container = dynamic_cast<DelphesBranchElement<DelphesCaloData>*>((*data))->GetContainer();
    149160       assert(container);
    150161       TEveCalo3D *calo3d = new TEveCalo3D(container);
     
    182193   ExRootConfParam branches = confReader->GetParam("TreeWriter::Branch");
    183194   Int_t nBranches = branches.GetSize()/3;
    184    DelphesBranchElement<TEveTrackList>* tlist;
    185    DelphesBranchElement<DelphesCaloData>* clist;
    186    DelphesBranchElement<TEveElementList>* elist;
     195   DelphesBranchElement<TEveTrackList> *tlist;
     196   DelphesBranchElement<DelphesCaloData> *clist;
     197   DelphesBranchElement<TEveElementList> *elist;
    187198   // first loop with all but tracks
    188199   for(Int_t b = 0; b<nBranches; ++b) {
     
    273284
    274285   // update display
    275    TEveElement* top = (TEveElement*)gEve->GetCurrentEvent();
     286   TEveElement *top = (TEveElement*)gEve->GetCurrentEvent();
    276287   delphesDisplay_->DestroyEventRPhi();
    277288   delphesDisplay_->ImportEventRPhi(top);
     
    356367
    357368   // add a tab on the left
    358    TEveBrowser* browser = gEve->GetBrowser();
     369   TEveBrowser *browser = gEve->GetBrowser();
    359370   browser->SetWindowName("Delphes Event Display");
    360371   browser->StartEmbedding(TRootBrowser::kLeft);
    361372
    362373   // set the main title
    363    TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
     374   TGMainFrame *frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
    364375   frmMain->SetWindowName("Delphes Event Display");
    365376   frmMain->SetCleanup(kDeepCleanup);
     
    371382   if(!gSystem->OpenDirectory(icondir))
    372383     icondir = Form("%s/icons/", (const char*)gSystem->GetFromPipe("root-config --etcdir") );
    373    TGGroupFrame* vf = new TGGroupFrame(frmMain,"Event navigation",kVerticalFrame | kFitWidth );
     384   TGGroupFrame *vf = new TGGroupFrame(frmMain,"Event navigation",kVerticalFrame | kFitWidth );
    374385   {
    375      TGHorizontalFrame* hf = new TGHorizontalFrame(frmMain);
     386     TGHorizontalFrame *hf = new TGHorizontalFrame(frmMain);
    376387     {
    377         TGPictureButton* b = 0;
     388        TGPictureButton *b = 0;
    378389
    379390        b = new TGPictureButton(hf, gClient->GetPicture(icondir+"GoBack.gif"));
     
    381392        b->Connect("Clicked()", "DelphesEventDisplay", this, "Bck()");
    382393
    383         TGNumberEntry* numberEntry = new TGNumberEntry(hf,0,9,-1,TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative, TGNumberFormat::kNELLimitMinMax, 0, treeReader_->GetEntries());
     394        TGNumberEntry *numberEntry = new TGNumberEntry(hf,0,9,-1,TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative, TGNumberFormat::kNELLimitMinMax, 0, treeReader_->GetEntries());
    384395        hf->AddFrame(numberEntry, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY , 2, 0, 10, 10));
    385396        this->Connect("EventChanged(Int_t)","TGNumberEntry",numberEntry,"SetIntNumber(Long_t)");
     
    394405     vf->AddFrame(hf, new TGLayoutHints(kLHintsExpandX , 2, 2, 2, 2));
    395406
    396      TGHProgressBar* progress = new TGHProgressBar(frmMain, TGProgressBar::kFancy, 100);
     407     TGHProgressBar *progress = new TGHProgressBar(frmMain, TGProgressBar::kFancy, 100);
    397408     progress->SetMax( treeReader_->GetEntries());
    398409     progress->ShowPosition(kTRUE, kFALSE, "Event %.0f");
     
    418429   // the summary tab
    419430   htmlSummary_ = new DelphesHtmlSummary("Delphes Event Display Summary Table");
    420    TEveWindowSlot* slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
     431   TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
    421432   gHtml_ = new TGHtml(0, 100, 100);
    422433   TEveWindowFrame *wf = slot->MakeFrame(gHtml_);
     
    426437   // plot tab
    427438   slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
    428    TEveWindowTab* tab = slot->MakeTab();
     439   TEveWindowTab *tab = slot->MakeTab();
    429440   tab->SetElementName("Summary plots");
    430441   tab->SetShowTitleBar(kFALSE);
     
    435446}
    436447
    437 
     448void DelphesEventDisplay::Fwd() { 
     449  if (event_id_ < treeReader_->GetEntries() - 2) {
     450     EventChanged(event_id_+1);
     451  } else {
     452     printf("Already at last event.\n");
     453  }
     454}
     455
     456void DelphesEventDisplay::Bck() {
     457  if (event_id_ > 0) {
     458     EventChanged(event_id_-1);
     459  } else {
     460     printf("Already at first event.\n");
     461  }
     462}
     463
     464void DelphesEventDisplay::PreSetEv(char *ev) {
     465  event_id_tmp_ = Int_t(atoi(ev));
     466}
     467
     468void DelphesEventDisplay::GoTo() {
     469  if (event_id_tmp_>=0 && event_id_tmp_ < treeReader_->GetEntries()-1) {
     470    EventChanged(event_id_tmp_);
     471  } else {
     472    printf("Error: no such event.\n");
     473  }
     474}
     475
     476void DelphesEventDisplay::InitSummaryPlots() {
     477  plotSummary_->FillSample(treeReader_, event_id_);
     478  plotSummary_->FillEvent();
     479  plotSummary_->Draw();
     480}
     481
     482void DelphesEventDisplay::DisplayProgress(Int_t p) {
     483  fStatusBar_->SetText(Form("Processing... %d %%",p), 1);
     484  gSystem->ProcessEvents();
     485}
  • display/DelphesEventDisplay.h

    r1d9974e rd38348d  
    11/*
    2  * Delphes: a framework for fast simulation of a generic collider experiment
    3  * Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
     2  * Delphes: a framework for fast simulation of a generic collider experiment
     3  * Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
    44 *
    5  * This program is free software: you can redistribute it and/or modify
    6  * it under the terms of the GNU General Public License as published by
    7  * the Free Software Foundation, either version 3 of the License, or
    8  * (at your option) any later version.
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, either version 3 of the License, or
     8  * (at your option) any later version.
    99 *
    10  * This program is distributed in the hope that it will be useful,
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  * GNU General Public License for more details.
     10  * This program is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  * GNU General Public License for more details.
    1414 *
    15  * You should have received a copy of the GNU General Public License
    16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  * You should have received a copy of the GNU General Public License
     16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1717 */
    1818
     
    2121
    2222#include <vector>
    23 #include <iostream>
    24 #include "external/ExRootAnalysis/ExRootTreeReader.h"
    25 #include "display/DelphesDisplay.h"
    26 #include "display/Delphes3DGeometry.h"
    27 #include "display/DelphesHtmlSummary.h"
    28 #include "display/DelphesPlotSummary.h"
    29 #include "TSystem.h"
    30 #include "TChain.h"
    31 #include "TAxis.h"
    32 #include "TGHtml.h"
    33 #include "TClonesArray.h"
    34 #include "TGStatusBar.h"
    35 #include "TGNumberEntry.h"
    36 #include "TGProgressBar.h"
    37 #include <RQ_OBJECT.h>
    3823
     24#include "Rtypes.h"
     25#include "RQ_OBJECT.h"
    3926
     27class TAxis;
     28class TChain;
     29class TGHtml;
     30class TGStatusBar;
     31class DelphesDisplay;
     32class Delphes3DGeometry;
     33class DelphesBranchBase;
     34class DelphesHtmlSummary;
     35class DelphesPlotSummary;
     36class ExRootTreeReader;
    4037
    4138/*
    42  * assembly.C: sauvegarde as shape-extract -> implement in the geometry class (read/write)
    43  * histobrowser.C: intégration d'histogrammes dans le display (on pourrait avoir Pt, eta, phi pour les principales collections)
    44  * also from alice_esd: summary html table
    45  *
     39  *assembly.C: sauvegarde as shape-extract -> implement in the geometry class (read/write)
     40  *histobrowser.C: intégration d'histogrammes dans le display (on pourrait avoir Pt, eta, phi pour les principales collections)
     41  *also from alice_esd: summary html table
     42  *
    4643 */
    4744
     
    5956    void make_gui();
    6057    void load_event();
    61     void readConfig(const char *configFile, std::vector<DelphesBranchBase*>& elements);
     58    void readConfig(const char *configFile, std::vector<DelphesBranchBase *>& elements);
    6259
    6360    // Configuration and global variables.
     
    6764    Double_t tkRadius_, totRadius_, tkHalfLength_, muHalfLength_, bz_;
    6865    TAxis *etaAxis_, *phiAxis_;
    69     TChain* chain_;
    70     std::vector<DelphesBranchBase*> elements_;
     66    TChain *chain_;
     67    std::vector<DelphesBranchBase *> elements_;
    7168    DelphesDisplay *delphesDisplay_;
    7269    DelphesHtmlSummary *htmlSummary_;
    7370    TGHtml *gHtml_;
    7471    DelphesPlotSummary *plotSummary_;
    75     TGStatusBar* fStatusBar_;
     72    TGStatusBar *fStatusBar_;
    7673   
    7774    // gui controls
    7875  public:
    79      void Fwd() { 
    80         if (event_id_ < treeReader_->GetEntries() - 2) {
    81            EventChanged(event_id_+1);
    82         } else {
    83            printf("Already at last event.\n");
    84         }
    85      }
     76     void Fwd();
    8677
    87      void Bck() {
    88         if (event_id_ > 0) {
    89            EventChanged(event_id_-1);
    90         } else {
    91            printf("Already at first event.\n");
    92         }
    93      }
     78     void Bck();
    9479
    95     void PreSetEv(char* ev) {
    96       event_id_tmp_ = Int_t(atoi(ev));
    97     }
     80    void PreSetEv(char *ev);
    9881
    99     void GoTo() {
    100       if (event_id_tmp_>=0 && event_id_tmp_ < treeReader_->GetEntries()-1) {
    101         EventChanged(event_id_tmp_);
    102       } else {
    103         printf("Error: no such event.\n");
    104       }
    105     }
     82    void GoTo();
    10683
    107     void InitSummaryPlots() {
    108       plotSummary_->FillSample(treeReader_, event_id_);
    109       plotSummary_->FillEvent();
    110       plotSummary_->Draw();
    111     }
     84    void InitSummaryPlots();
    11285
    113     void DisplayProgress(Int_t p) {
    114          fStatusBar_->SetText(Form("Processing... %d %%",p), 1);
    115          gSystem->ProcessEvents();
    116     }
     86    void DisplayProgress(Int_t p);
    11787};
    11888
  • examples/EventDisplay.C

    r1d9974e rd38348d  
    33 * root -l examples/EventDisplay.C'("cards/delphes_card_FCC_basic.tcl","delphes_output.root","ParticlePropagator","ChargedHadronTrackingEfficiency","MuonTrackingEfficiency","Ecal,Hcal")'
    44 */
     5
     6#ifdef __CLING__
     7R__LOAD_LIBRARY(libEve)
     8R__LOAD_LIBRARY(libDelphesDisplay)
     9#include "display/DelphesEventDisplay.h"
     10#include "display/Delphes3DGeometry.h"
     11#endif
    512
    613void EventDisplay(const char *configfile = "delphes_card_CMS.tcl",
     
    3340
    3441    // create the application
    35     DelphesEventDisplay* display = new DelphesEventDisplay(configfile, datafile, det3D);
     42    DelphesEventDisplay *display = new DelphesEventDisplay(configfile, datafile, det3D);
    3643  }
    3744}
  • examples/Example1.C

    r1d9974e rd38348d  
    66root -l examples/Example1.C'("delphes_output.root")'
    77*/
     8
     9#ifdef __CLING__
     10R__LOAD_LIBRARY(libDelphes)
     11#include "classes/DelphesClasses.h"
     12#include "external/ExRootAnalysis/ExRootTreeReader.h"
     13#endif
    814
    915//------------------------------------------------------------------------------
  • examples/Example2.C

    r1d9974e rd38348d  
    88#include "TH1.h"
    99#include "TSystem.h"
     10
     11#ifdef __CLING__
     12R__LOAD_LIBRARY(libDelphes)
     13#include "classes/DelphesClasses.h"
     14#include "external/ExRootAnalysis/ExRootTreeReader.h"
     15#include "external/ExRootAnalysis/ExRootResult.h"
     16#endif
    1017
    1118//------------------------------------------------------------------------------
  • examples/Example3.C

    r1d9974e rd38348d  
    66*/
    77
     8#ifdef __CLING__
     9R__LOAD_LIBRARY(libDelphes)
     10#include "classes/DelphesClasses.h"
     11#include "external/ExRootAnalysis/ExRootTreeReader.h"
     12#include "external/ExRootAnalysis/ExRootResult.h"
     13#else
     14class ExRootTreeReader;
     15class ExRootResult;
     16#endif
     17
    818//------------------------------------------------------------------------------
    919
     
    2535  TH1 *fJetDeltaPT;
    2636};
    27 
    28 //------------------------------------------------------------------------------
    29 
    30 class ExRootResult;
    31 class ExRootTreeReader;
    3237
    3338//------------------------------------------------------------------------------
  • examples/Example4.C

    r1d9974e rd38348d  
    11/*
    2 
    32This macro shows how to compute jet energy scale.
    43root -l examples/Example4.C'("delphes_output.root", "plots.root")'
    54
    6 The output ROOT file contains the pT(MC)/pT(Reco) distributions for various pT(Reco) and |eta| bins.
    7 The peak value of such distribution is interpreted as the jet energy correction to be applied for that given pT(Reco), |eta| bin.
    8 
    9 This can be done by modifying the "ScaleFormula" input parameter to the JetEnergyScale module in the delphes_card_XXX.tcl
    10 
    11 
     5The output ROOT file contains the pT(MC)/pT(Reco) distributions for
     6various pT(Reco) and |eta| bins. The peak value of such distribution is
     7interpreted as the jet energy correction to be applied for that
     8given pT(Reco), |eta| bin.
     9
     10This can be done by modifying the "ScaleFormula" input parameter to
     11the JetEnergyScale module in the delphes_card_XXX.tcl
    1212
    1313e.g  a smooth function:
    1414
    15 
    16   set ScaleFormula { sqrt(3.0 - 0.1*(abs(eta)))^2 / pt + 1.0 ) }
    17 
     15  set ScaleFormula { sqrt(3.0 - 0.1*(abs(eta)))^2 / pt + 1.0) }
    1816
    1917or a binned function:
    20 
    2118
    2219  set ScaleFormula {(abs(eta) > 0.0 && abs(eta) <= 2.5) * (pt > 20.0 && pt <= 50.0)  * (1.10) +
     
    2724                    (abs(eta) > 2.5 && abs(eta) <= 5.0) * (pt > 100.0)               * (1.00)}
    2825
    29 
    30 Be aware that a binned jet energy scale can produce "steps" in the corrected jet pt distribution ...
    31 
    32 
    33 
     26Be aware that a binned jet energy scale can produce "steps" in the corrected
     27jet pt distribution ...
    3428*/
     29
     30#ifdef __CLING__
     31R__LOAD_LIBRARY(libDelphes)
     32#include "classes/DelphesClasses.h"
     33#include "external/ExRootAnalysis/ExRootTreeReader.h"
     34#include "external/ExRootAnalysis/ExRootResult.h"
     35#else
     36class ExRootTreeReader;
     37class ExRootResult;
     38#endif
    3539
    3640//------------------------------------------------------------------------------
     
    161165
    162166  Jet *jet, *genjet;
    163   GenParticle *part;
     167  GenParticle *particle;
    164168  TObject *object;
    165169
    166   TLorentzVector JetMom, GenJetMom, BestGenJetMom;
    167 
    168   Float_t Dr;
     170  TLorentzVector jetMomentum, genJetMomentum, bestGenJetMomentum;
     171
     172  Float_t deltaR;
    169173  Float_t pt, eta;
    170174  Long64_t entry;
     
    177181    // Load selected branches with data from specified event
    178182    treeReader->ReadEntry(entry);
    179     //  cout<<"--  New event -- "<<endl;
    180183
    181184    if(entry%500 == 0) cout << "Event number: "<< entry <<endl;
     
    186189
    187190      jet = (Jet*) branchJet->At(i);
    188       JetMom = jet-> P4();
    189 
    190       plots->fJetPT->Fill(JetMom.Pt());
    191 
    192       Dr = 999;
     191      jetMomentum = jet->P4();
     192
     193      plots->fJetPT->Fill(jetMomentum.Pt());
     194
     195      deltaR = 999;
    193196
    194197     // Loop over all hard partons in event
    195198     for(j = 0; j < branchParticle->GetEntriesFast(); ++j)
    196199     {
    197 
    198         part = (GenParticle*) branchParticle->At(j);
    199 
    200         GenJetMom = part -> P4();
    201 
    202         //this is simply to avoid warnings from initial state particle having infite rapidity ...
    203         if(GenJetMom.Px() == 0 && GenJetMom.Py() == 0) continue;
    204 
    205         //take the closest parton candidate
    206         if( GenJetMom.DeltaR(JetMom) < Dr )
     200        particle = (GenParticle*) branchParticle->At(j);
     201
     202        genJetMomentum = particle->P4();
     203
     204        // this is simply to avoid warnings from initial state particle
     205        // having infite rapidity ...
     206        if(genJetMomentum.Px() == 0 && genJetMomentum.Py() == 0) continue;
     207
     208        // take the closest parton candidate
     209        if(genJetMomentum.DeltaR(jetMomentum) < deltaR)
    207210        {
    208            Dr = GenJetMom.DeltaR(JetMom);
    209            BestGenJetMom = GenJetMom;
     211           deltaR = genJetMomentum.DeltaR(jetMomentum);
     212           bestGenJetMomentum = genJetMomentum;
    210213        }
    211 
    212214      }
    213215
    214      if(Dr < 0.3)
    215      {
    216        pt  = JetMom.Pt();
    217        eta = TMath::Abs(JetMom.Eta());
    218 
    219 
    220        if( pt > 20.0 && pt < 50.0 && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_20_50_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    221        if( pt > 20.0 && pt < 50.0 && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_20_50_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    222 
    223        if( pt > 50.0 && pt < 100.0 && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_50_100_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    224        if( pt > 50.0 && pt < 100.0 && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_50_100_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    225 
    226        if( pt > 100.0 && pt < 200.0 && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_100_200_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    227        if( pt > 100.0 && pt < 200.0 && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_100_200_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    228 
    229        if( pt > 200.0 && pt < 500.0 && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_200_500_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    230        if( pt > 200.0 && pt < 500.0 && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_200_500_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    231 
    232        if( pt > 500.0               && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_500_inf_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    233        if( pt > 500.0               && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_500_inf_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    234 
    235 
    236      }
    237 
    238 
     216      if(deltaR < 0.3)
     217      {
     218        pt  = jetMomentum.Pt();
     219        eta = TMath::Abs(jetMomentum.Eta());
     220
     221
     222        if(pt > 20.0 && pt < 50.0 && eta > 0.0 && eta < 2.5) plots -> fJetRes_Pt_20_50_Eta_0_25->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     223        if(pt > 20.0 && pt < 50.0 && eta > 2.5 && eta < 5.0) plots -> fJetRes_Pt_20_50_Eta_25_5->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     224
     225        if(pt > 50.0 && pt < 100.0 && eta > 0.0 && eta < 2.5) plots -> fJetRes_Pt_50_100_Eta_0_25->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     226        if(pt > 50.0 && pt < 100.0 && eta > 2.5 && eta < 5.0) plots -> fJetRes_Pt_50_100_Eta_25_5->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     227
     228        if(pt > 100.0 && pt < 200.0 && eta > 0.0 && eta < 2.5) plots -> fJetRes_Pt_100_200_Eta_0_25->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     229        if(pt > 100.0 && pt < 200.0 && eta > 2.5 && eta < 5.0) plots -> fJetRes_Pt_100_200_Eta_25_5->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     230
     231        if(pt > 200.0 && pt < 500.0 && eta > 0.0 && eta < 2.5) plots -> fJetRes_Pt_200_500_Eta_0_25->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     232        if(pt > 200.0 && pt < 500.0 && eta > 2.5 && eta < 5.0) plots -> fJetRes_Pt_200_500_Eta_25_5->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     233
     234        if(pt > 500.0               && eta > 0.0 && eta < 2.5) plots -> fJetRes_Pt_500_inf_Eta_0_25->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     235        if(pt > 500.0               && eta > 2.5 && eta < 5.0) plots -> fJetRes_Pt_500_inf_Eta_25_5->Fill(bestGenJetMomentum.Pt()/jetMomentum.Pt());
     236
     237      }
    239238    }
    240239  }
    241240}
    242 
    243241
    244242//------------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.