Changeset d38348d in git
- Timestamp:
- Jun 26, 2015, 11:46:42 AM (10 years ago)
- 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. - Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
cards/delphes_card_ATLAS.tcl
r1d9974e rd38348d 295 295 296 296 module Efficiency PhotonEfficiency { 297 set InputArray Calorimeter/ photons297 set InputArray Calorimeter/eflowPhotons 298 298 set OutputArray photons 299 299 -
classes/DelphesFormula.cc
r1d9974e rd38348d 23 23 24 24 #include <stdexcept> 25 #include <string>26 25 27 26 using namespace std; … … 51 50 Int_t DelphesFormula::Compile(const char *expression) 52 51 { 53 string buffer;52 TString buffer; 54 53 const char *it; 55 54 for(it = expression; *it; ++it) 56 55 { 57 56 if(*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n' || *it == '\\' ) continue; 58 buffer. push_back(*it);57 buffer.Append(*it); 59 58 } 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) 61 64 { 62 65 throw runtime_error("Invalid formula."); … … 74 77 75 78 //------------------------------------------------------------------------------ 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 35 35 36 36 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);39 37 }; 40 38 -
classes/DelphesTF2.cc
r1d9974e rd38348d 18 18 19 19 #include "classes/DelphesTF2.h" 20 21 #include "RVersion.h" 20 22 #include "TString.h" 23 21 24 #include <stdexcept> 22 #include <string>23 25 24 26 using namespace std; … … 34 36 35 37 DelphesTF2::DelphesTF2(const char *name, const char *expression) : 36 TF2(name, expression)38 TF2(name, expression) 37 39 { 38 40 } … … 46 48 //------------------------------------------------------------------------------ 47 49 48 Int_t DelphesTF2:: DefinedVariable(TString &chaine, Int_t &action)50 Int_t DelphesTF2::Compile(const char *expression) 49 51 { 50 action = kVariable; 51 if(chaine == "z") 52 TString buffer; 53 const char *it; 54 for(it = expression; *it; ++it) 52 55 { 53 if( fNdim < 1) fNdim = 1;54 return 0;56 if(*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n' || *it == '\\' ) continue; 57 buffer.Append(*it); 55 58 } 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 57 66 { 58 if(fNdim < 2) fNdim = 2; 59 return 1; 67 throw runtime_error("Invalid formula."); 60 68 } 61 return -1;69 return 0; 62 70 } 63 71 -
classes/DelphesTF2.h
r1d9974e rd38348d 21 21 22 22 #include "TF2.h" 23 #include "TFormula.h"24 25 #include <string>26 23 27 24 class DelphesTF2: public TF2 … … 35 32 ~DelphesTF2(); 36 33 37 Int_t DefinedVariable(TString &variable, Int_t &action); 38 34 Int_t Compile(const char *expression); 39 35 }; 40 36 41 37 #endif /* DelphesTF2_h */ 42 -
display/Delphes3DGeometry.cc
r1d9974e rd38348d 17 17 */ 18 18 19 #include "display/Delphes3DGeometry.h"20 19 #include <set> 21 20 #include <map> 22 #include <string>23 21 #include <utility> 24 22 #include <vector> … … 26 24 #include <sstream> 27 25 #include <cassert> 26 27 #include "TAxis.h" 28 28 #include "TGeoManager.h" 29 29 #include "TGeoVolume.h" … … 35 35 #include "TGeoCone.h" 36 36 #include "TGeoArb8.h" 37 #include "external/ExRootAnalysis/ExRootConfReader.h"38 #include "classes/DelphesClasses.h"39 37 #include "TF2.h" 40 38 #include "TFormula.h" 41 39 #include "TH1F.h" 42 40 #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" 43 47 44 48 using namespace std; … … 93 97 tk_Bz_ = confReader->GetDouble("ParticlePropagator::Bz", 0.0); // tk_Bz 94 98 95 string buffer;99 TString buffer; 96 100 const char *it; 97 101 … … 103 107 tkEffFormula.ReplaceAll("phi","0."); 104 108 109 buffer.Clear(); 105 110 for(it = tkEffFormula.Data(); *it; ++it) 106 111 { 107 112 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); 112 117 TH1F etaHisto("eta","eta",100,5.,-5.); 113 118 Double_t pt,eta; … … 132 137 muonEffFormula.ReplaceAll("phi","0."); 133 138 134 buffer. clear();139 buffer.Clear(); 135 140 for(it = muonEffFormula.Data(); *it; ++it) 136 141 { 137 142 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); 142 147 TH1F etaHisto("eta2","eta2",100,5.,-5.); 143 148 Double_t pt,eta; -
display/Delphes3DGeometry.h
r1d9974e rd38348d 1 1 /* 2 *Delphes: a framework for fast simulation of a generic collider experiment3 *Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium2 * Delphes: a framework for fast simulation of a generic collider experiment 3 * Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium 4 4 * 5 *This program is free software: you can redistribute it and/or modify6 *it under the terms of the GNU General Public License as published by7 *the Free Software Foundation, either version 3 of the License, or8 *(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. 9 9 * 10 *This program is distributed in the hope that it will be useful,11 *but WITHOUT ANY WARRANTY; without even the implied warranty of12 *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13 *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. 14 14 * 15 *You should have received a copy of the GNU General Public License16 *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/>. 17 17 */ 18 18 … … 22 22 #include <set> 23 23 #include <map> 24 #include <utility>25 24 #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 28 class TAxis; 29 class TGeoManager; 30 class TGeoVolume; 31 class TGeoMedium; 32 32 33 33 // TODO: asymmetric detector … … 38 38 ~Delphes3DGeometry() {} 39 39 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"); 44 44 45 45 void setContingency(Double_t contingency) { contingency_ = contingency; } … … 48 48 void setMuonSystemThickness(Double_t thickness) { muonSystem_thickn_ = thickness; } 49 49 50 TGeoVolume *getDetector(bool withTowers = true);50 TGeoVolume *getDetector(bool withTowers = true); 51 51 52 52 Double_t getTrackerRadius() const { return tk_radius_; } … … 59 59 private: 60 60 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); 64 64 65 65 private: … … 72 72 TGeoMedium *mudetmed_; 73 73 74 TAxis *etaAxis_;75 TAxis *phiAxis_;74 TAxis *etaAxis_; 75 TAxis *phiAxis_; 76 76 77 77 Double_t contingency_; … … 91 91 std::map<std::string, Double_t> muonSystem_etamax_; 92 92 std::map<std::string, std::set< std::pair<Double_t, Int_t> > > caloBinning_; 93 93 94 94 }; 95 95 -
display/DelphesEventDisplay.cc
r1d9974e rd38348d 1 1 /* 2 *Delphes: a framework for fast simulation of a generic collider experiment3 *Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium2 * Delphes: a framework for fast simulation of a generic collider experiment 3 * Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium 4 4 * 5 *This program is free software: you can redistribute it and/or modify6 *it under the terms of the GNU General Public License as published by7 *the Free Software Foundation, either version 3 of the License, or8 *(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. 9 9 * 10 *This program is distributed in the hope that it will be useful,11 *but WITHOUT ANY WARRANTY; without even the implied warranty of12 *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13 *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. 14 14 * 15 *You should have received a copy of the GNU General Public License16 *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/>. 17 17 */ 18 18 … … 21 21 #include <utility> 22 22 #include <algorithm> 23 23 24 #include "TGeoManager.h" 24 25 #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"32 26 #include "TEveElement.h" 33 27 #include "TEveJetCone.h" … … 53 47 #include "TCanvas.h" 54 48 #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" 55 66 56 67 DelphesEventDisplay::DelphesEventDisplay() … … 98 109 TEveManager::Create(kTRUE, "IV"); 99 110 fStatusBar_ = gEve->GetBrowser()->GetStatusBar(); 100 TGeoManager *geom = gGeoManager;111 TGeoManager *geom = gGeoManager; 101 112 102 113 // build the detector … … 108 119 etaAxis_ = det3D.getCaloAxes().first; 109 120 phiAxis_ = det3D.getCaloAxes().second; 110 TGeoVolume *top = det3D.getDetector(false);121 TGeoVolume *top = det3D.getDetector(false); 111 122 geom->SetTopVolume(top); 112 123 TEveElementList *geometry = new TEveElementList("Geometry"); 113 TObjArray *nodes = top->GetNodes();124 TObjArray *nodes = top->GetNodes(); 114 125 TIter itNodes(nodes); 115 TGeoNode *nodeobj;116 TEveGeoTopNode *node;126 TGeoNode *nodeobj; 127 TEveGeoTopNode *node; 117 128 while((nodeobj = (TGeoNode*)itNodes.Next())) { 118 129 node = new TEveGeoTopNode(gGeoManager,nodeobj); … … 131 142 // prepare data collections 132 143 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); 136 147 if(item_v1) gEve->AddElement(item_v1->GetContainer()); 137 148 if(item_v2) gEve->AddElement(item_v2->GetContainer()); … … 144 155 delphesDisplay_->ImportGeomRhoZ(geometry); 145 156 // 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) { 147 158 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(); 149 160 assert(container); 150 161 TEveCalo3D *calo3d = new TEveCalo3D(container); … … 182 193 ExRootConfParam branches = confReader->GetParam("TreeWriter::Branch"); 183 194 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; 187 198 // first loop with all but tracks 188 199 for(Int_t b = 0; b<nBranches; ++b) { … … 273 284 274 285 // update display 275 TEveElement *top = (TEveElement*)gEve->GetCurrentEvent();286 TEveElement *top = (TEveElement*)gEve->GetCurrentEvent(); 276 287 delphesDisplay_->DestroyEventRPhi(); 277 288 delphesDisplay_->ImportEventRPhi(top); … … 356 367 357 368 // add a tab on the left 358 TEveBrowser *browser = gEve->GetBrowser();369 TEveBrowser *browser = gEve->GetBrowser(); 359 370 browser->SetWindowName("Delphes Event Display"); 360 371 browser->StartEmbedding(TRootBrowser::kLeft); 361 372 362 373 // set the main title 363 TGMainFrame *frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);374 TGMainFrame *frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600); 364 375 frmMain->SetWindowName("Delphes Event Display"); 365 376 frmMain->SetCleanup(kDeepCleanup); … … 371 382 if(!gSystem->OpenDirectory(icondir)) 372 383 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 ); 374 385 { 375 TGHorizontalFrame *hf = new TGHorizontalFrame(frmMain);386 TGHorizontalFrame *hf = new TGHorizontalFrame(frmMain); 376 387 { 377 TGPictureButton *b = 0;388 TGPictureButton *b = 0; 378 389 379 390 b = new TGPictureButton(hf, gClient->GetPicture(icondir+"GoBack.gif")); … … 381 392 b->Connect("Clicked()", "DelphesEventDisplay", this, "Bck()"); 382 393 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()); 384 395 hf->AddFrame(numberEntry, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY , 2, 0, 10, 10)); 385 396 this->Connect("EventChanged(Int_t)","TGNumberEntry",numberEntry,"SetIntNumber(Long_t)"); … … 394 405 vf->AddFrame(hf, new TGLayoutHints(kLHintsExpandX , 2, 2, 2, 2)); 395 406 396 TGHProgressBar *progress = new TGHProgressBar(frmMain, TGProgressBar::kFancy, 100);407 TGHProgressBar *progress = new TGHProgressBar(frmMain, TGProgressBar::kFancy, 100); 397 408 progress->SetMax( treeReader_->GetEntries()); 398 409 progress->ShowPosition(kTRUE, kFALSE, "Event %.0f"); … … 418 429 // the summary tab 419 430 htmlSummary_ = new DelphesHtmlSummary("Delphes Event Display Summary Table"); 420 TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());431 TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight()); 421 432 gHtml_ = new TGHtml(0, 100, 100); 422 433 TEveWindowFrame *wf = slot->MakeFrame(gHtml_); … … 426 437 // plot tab 427 438 slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight()); 428 TEveWindowTab *tab = slot->MakeTab();439 TEveWindowTab *tab = slot->MakeTab(); 429 440 tab->SetElementName("Summary plots"); 430 441 tab->SetShowTitleBar(kFALSE); … … 435 446 } 436 447 437 448 void 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 456 void DelphesEventDisplay::Bck() { 457 if (event_id_ > 0) { 458 EventChanged(event_id_-1); 459 } else { 460 printf("Already at first event.\n"); 461 } 462 } 463 464 void DelphesEventDisplay::PreSetEv(char *ev) { 465 event_id_tmp_ = Int_t(atoi(ev)); 466 } 467 468 void 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 476 void DelphesEventDisplay::InitSummaryPlots() { 477 plotSummary_->FillSample(treeReader_, event_id_); 478 plotSummary_->FillEvent(); 479 plotSummary_->Draw(); 480 } 481 482 void DelphesEventDisplay::DisplayProgress(Int_t p) { 483 fStatusBar_->SetText(Form("Processing... %d %%",p), 1); 484 gSystem->ProcessEvents(); 485 } -
display/DelphesEventDisplay.h
r1d9974e rd38348d 1 1 /* 2 *Delphes: a framework for fast simulation of a generic collider experiment3 *Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium2 * Delphes: a framework for fast simulation of a generic collider experiment 3 * Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium 4 4 * 5 *This program is free software: you can redistribute it and/or modify6 *it under the terms of the GNU General Public License as published by7 *the Free Software Foundation, either version 3 of the License, or8 *(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. 9 9 * 10 *This program is distributed in the hope that it will be useful,11 *but WITHOUT ANY WARRANTY; without even the implied warranty of12 *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13 *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. 14 14 * 15 *You should have received a copy of the GNU General Public License16 *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/>. 17 17 */ 18 18 … … 21 21 22 22 #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>38 23 24 #include "Rtypes.h" 25 #include "RQ_OBJECT.h" 39 26 27 class TAxis; 28 class TChain; 29 class TGHtml; 30 class TGStatusBar; 31 class DelphesDisplay; 32 class Delphes3DGeometry; 33 class DelphesBranchBase; 34 class DelphesHtmlSummary; 35 class DelphesPlotSummary; 36 class ExRootTreeReader; 40 37 41 38 /* 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 table45 *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 * 46 43 */ 47 44 … … 59 56 void make_gui(); 60 57 void load_event(); 61 void readConfig(const char *configFile, std::vector<DelphesBranchBase *>& elements);58 void readConfig(const char *configFile, std::vector<DelphesBranchBase *>& elements); 62 59 63 60 // Configuration and global variables. … … 67 64 Double_t tkRadius_, totRadius_, tkHalfLength_, muHalfLength_, bz_; 68 65 TAxis *etaAxis_, *phiAxis_; 69 TChain *chain_;70 std::vector<DelphesBranchBase *> elements_;66 TChain *chain_; 67 std::vector<DelphesBranchBase *> elements_; 71 68 DelphesDisplay *delphesDisplay_; 72 69 DelphesHtmlSummary *htmlSummary_; 73 70 TGHtml *gHtml_; 74 71 DelphesPlotSummary *plotSummary_; 75 TGStatusBar *fStatusBar_;72 TGStatusBar *fStatusBar_; 76 73 77 74 // gui controls 78 75 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(); 86 77 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(); 94 79 95 void PreSetEv(char* ev) { 96 event_id_tmp_ = Int_t(atoi(ev)); 97 } 80 void PreSetEv(char *ev); 98 81 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(); 106 83 107 void InitSummaryPlots() { 108 plotSummary_->FillSample(treeReader_, event_id_); 109 plotSummary_->FillEvent(); 110 plotSummary_->Draw(); 111 } 84 void InitSummaryPlots(); 112 85 113 void DisplayProgress(Int_t p) { 114 fStatusBar_->SetText(Form("Processing... %d %%",p), 1); 115 gSystem->ProcessEvents(); 116 } 86 void DisplayProgress(Int_t p); 117 87 }; 118 88 -
examples/EventDisplay.C
r1d9974e rd38348d 3 3 * root -l examples/EventDisplay.C'("cards/delphes_card_FCC_basic.tcl","delphes_output.root","ParticlePropagator","ChargedHadronTrackingEfficiency","MuonTrackingEfficiency","Ecal,Hcal")' 4 4 */ 5 6 #ifdef __CLING__ 7 R__LOAD_LIBRARY(libEve) 8 R__LOAD_LIBRARY(libDelphesDisplay) 9 #include "display/DelphesEventDisplay.h" 10 #include "display/Delphes3DGeometry.h" 11 #endif 5 12 6 13 void EventDisplay(const char *configfile = "delphes_card_CMS.tcl", … … 33 40 34 41 // create the application 35 DelphesEventDisplay *display = new DelphesEventDisplay(configfile, datafile, det3D);42 DelphesEventDisplay *display = new DelphesEventDisplay(configfile, datafile, det3D); 36 43 } 37 44 } -
examples/Example1.C
r1d9974e rd38348d 6 6 root -l examples/Example1.C'("delphes_output.root")' 7 7 */ 8 9 #ifdef __CLING__ 10 R__LOAD_LIBRARY(libDelphes) 11 #include "classes/DelphesClasses.h" 12 #include "external/ExRootAnalysis/ExRootTreeReader.h" 13 #endif 8 14 9 15 //------------------------------------------------------------------------------ -
examples/Example2.C
r1d9974e rd38348d 8 8 #include "TH1.h" 9 9 #include "TSystem.h" 10 11 #ifdef __CLING__ 12 R__LOAD_LIBRARY(libDelphes) 13 #include "classes/DelphesClasses.h" 14 #include "external/ExRootAnalysis/ExRootTreeReader.h" 15 #include "external/ExRootAnalysis/ExRootResult.h" 16 #endif 10 17 11 18 //------------------------------------------------------------------------------ -
examples/Example3.C
r1d9974e rd38348d 6 6 */ 7 7 8 #ifdef __CLING__ 9 R__LOAD_LIBRARY(libDelphes) 10 #include "classes/DelphesClasses.h" 11 #include "external/ExRootAnalysis/ExRootTreeReader.h" 12 #include "external/ExRootAnalysis/ExRootResult.h" 13 #else 14 class ExRootTreeReader; 15 class ExRootResult; 16 #endif 17 8 18 //------------------------------------------------------------------------------ 9 19 … … 25 35 TH1 *fJetDeltaPT; 26 36 }; 27 28 //------------------------------------------------------------------------------29 30 class ExRootResult;31 class ExRootTreeReader;32 37 33 38 //------------------------------------------------------------------------------ -
examples/Example4.C
r1d9974e rd38348d 1 1 /* 2 3 2 This macro shows how to compute jet energy scale. 4 3 root -l examples/Example4.C'("delphes_output.root", "plots.root")' 5 4 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 5 The output ROOT file contains the pT(MC)/pT(Reco) distributions for 6 various pT(Reco) and |eta| bins. The peak value of such distribution is 7 interpreted as the jet energy correction to be applied for that 8 given pT(Reco), |eta| bin. 9 10 This can be done by modifying the "ScaleFormula" input parameter to 11 the JetEnergyScale module in the delphes_card_XXX.tcl 12 12 13 13 e.g a smooth function: 14 14 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) } 18 16 19 17 or a binned function: 20 21 18 22 19 set ScaleFormula {(abs(eta) > 0.0 && abs(eta) <= 2.5) * (pt > 20.0 && pt <= 50.0) * (1.10) + … … 27 24 (abs(eta) > 2.5 && abs(eta) <= 5.0) * (pt > 100.0) * (1.00)} 28 25 29 30 Be aware that a binned jet energy scale can produce "steps" in the corrected jet pt distribution ... 31 32 33 26 Be aware that a binned jet energy scale can produce "steps" in the corrected 27 jet pt distribution ... 34 28 */ 29 30 #ifdef __CLING__ 31 R__LOAD_LIBRARY(libDelphes) 32 #include "classes/DelphesClasses.h" 33 #include "external/ExRootAnalysis/ExRootTreeReader.h" 34 #include "external/ExRootAnalysis/ExRootResult.h" 35 #else 36 class ExRootTreeReader; 37 class ExRootResult; 38 #endif 35 39 36 40 //------------------------------------------------------------------------------ … … 161 165 162 166 Jet *jet, *genjet; 163 GenParticle *part ;167 GenParticle *particle; 164 168 TObject *object; 165 169 166 TLorentzVector JetMom, GenJetMom, BestGenJetMom;167 168 Float_t Dr;170 TLorentzVector jetMomentum, genJetMomentum, bestGenJetMomentum; 171 172 Float_t deltaR; 169 173 Float_t pt, eta; 170 174 Long64_t entry; … … 177 181 // Load selected branches with data from specified event 178 182 treeReader->ReadEntry(entry); 179 // cout<<"-- New event -- "<<endl;180 183 181 184 if(entry%500 == 0) cout << "Event number: "<< entry <<endl; … … 186 189 187 190 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; 193 196 194 197 // Loop over all hard partons in event 195 198 for(j = 0; j < branchParticle->GetEntriesFast(); ++j) 196 199 { 197 198 part = (GenParticle*) branchParticle->At(j); 199 200 GenJetMom = part -> P4(); 201 202 //this is simply to avoid warnings from initial state particlehaving infite rapidity ...203 if( GenJetMom.Px() == 0 && GenJetMom.Py() == 0) continue;204 205 // take the closest parton candidate206 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) 207 210 { 208 Dr = GenJetMom.DeltaR(JetMom);209 BestGenJetMom = GenJetMom;211 deltaR = genJetMomentum.DeltaR(jetMomentum); 212 bestGenJetMomentum = genJetMomentum; 210 213 } 211 212 214 } 213 215 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 } 239 238 } 240 239 } 241 240 } 242 243 241 244 242 //------------------------------------------------------------------------------
Note:
See TracChangeset
for help on using the changeset viewer.