110 {
111
112 using namespace asg::msgSTT;
114 setMsgLevel(MSG::INFO);
115
117
118
120
121
122 if ( argc < 2 ) {
124 ANA_MSG_ERROR(
" Usage: " <<
APP_NAME <<
" [xAOD file name] [maxEvents] [isData=0/1 isAtlfast=0/1] [NoSyst=0/1] [Debug=0/1/2] [ConfigFile=<cfile.conf>] [PRWFile=<prwfile.root>] [autoconfigPRW=0/1] [commonPRWFile=0/1]" );
125 return 1;
126 }
127
128
130
131 int autoconfigPRW = 1;
132 int commonPRWFile = 1;
133 int isData = -1;
134 int isAtlfast = -1;
135 int NoSyst = 1;
137 bool isPHYSLite = false;
138 bool hasLRT = false;
140
141
144 std::unique_ptr< TFile >
ifile( TFile::Open( fileName,
"READ" ) );
146
147 bool isRun3 = false;
151 if (isRun3) {
155 }
156 std::string prw_file = "DUMMY";
157 std::string ilumicalc_file = "DUMMY";
158
159 for (
int i = 1 ;
i <
argc ;
i++) {
160 const char*
key = strtok(argv[i],
"=") ;
161 const char*
val = strtok(0,
" ") ;
162
163 ANA_MSG_INFO(
"===== Processing key " << TString(key) <<
" with value " << TString(val) );
164 if (strcmp(key,
"autoconfigPRW") == 0) autoconfigPRW =
atoi(val);
165 if (strcmp(key,
"commonPRWFile") == 0) commonPRWFile =
atoi(val);
166 if (strcmp(key,
"isData") == 0) isData =
atoi(val);
167 if (strcmp(key,
"isAtlfast") == 0) isAtlfast =
atoi(val);
168 if (strcmp(key,
"NoSyst") == 0) NoSyst =
atoi(val);
169 if (strcmp(key,
"Debug") == 0)
debug =
atoi(val);
171 if (strcmp(key, "PRWFile") == 0) prw_file = std::string(val);
172 if (strcmp(key, "ilumicalcFile") == 0) ilumicalc_file = std::string(val);
173 if (strcmp(key,
"maxEvents") == 0)
entries =
atoi(val);
174
175 }
176
177 if (
debug>0) setMsgLevel((MSG::Level)(3-
debug));
178
179 if (isData < 0 || isAtlfast < 0) {
180 ANA_MSG_ERROR(
"One of the flags isData or isAtlfast was not set! Must provide isData or isAtlfast." );
181 ANA_MSG_ERROR(
" Usage: " <<
APP_NAME <<
" [xAOD file name] [maxEvents] [isData=0/1 isAtlfast=0/1] [NoSyst=0/1] [Debug=0/1/2] [ConfigFile=<cfile.conf>] [PRWFile=<prwfile.root>] [autoconfigPRW=0/1] [commonPRWFile=0/1]");
182 return 10;
183 }
185
186
187
189 bool hasTrkJets(false), hasFatJets(false);
190 for (
auto&
x : containers) {
191 if (
x.first.find(
"AntiKtVR30Rmax4Rmin02TrackJets")!=std::string::npos) hasTrkJets =
true;
192 if (
x.first.find(
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets")!=std::string::npos) hasFatJets =
true;
193 if (
x.first.find(
"AnalysisElectrons")!=std::string::npos) isPHYSLite =
true;
194 if (isPHYSLite &&
x.first.find(
"AnalysisLargeRJets")!=std::string::npos) hasFatJets =
false;
195 if (
x.first.find(
"InDetLargeD0TrackParticles") != std::string::npos) hasLRT =
true;
196 }
199 for (
auto&
x : containers)
ANA_MSG_INFO(
" - found " <<
x.first.c_str() <<
" (" <<
x.second.c_str() <<
")");
200 ANA_MSG_INFO(
"hasTrkJets: " << (hasTrkJets?
"true":
"false"));
201 ANA_MSG_INFO(
"hasFatJets: " << (hasFatJets?
"true":
"false"));
202 ANA_MSG_INFO(
"isPHYSLite: " << (isPHYSLite?
"true":
"false"));
204 }
205
206
207
210 ANA_MSG_INFO(
"Number of events in the file: " <<
static_cast< int >(
event.getEntries() ) );
211
213
214
215
216
217
218
219
222 }
223
224
226 if (isData) {
228 std::vector<std::string> myGRLs;
229
234 myGRLs.push_back(
PathResolverFindCalibFile(
"GoodRunsLists/data22_13p6TeV/20250321/data22_13p6TeV.periodAllYear_DetStatus-v134-pro28-09_MERGED_PHYS_StandardGRL_All_Good_25ns.xml"));
235 myGRLs.push_back(
PathResolverFindCalibFile(
"GoodRunsLists/data23_13p6TeV/20250321/data23_13p6TeV.periodAllYear_DetStatus-v133-pro31-11_MERGED_PHYS_StandardGRL_All_Good_25ns.xml"));
236
240
242 }
243
244
246 if (!isData){
252 }
253
254
256
258
260
261
262 ANA_CHECK( objTool.setProperty(
"DataSource", datasource) ) ;
264 ANA_CHECK( objTool.setProperty(
"ConfigFile", config_file) );
265
272
273 std::vector<std::string> prw_conf;
274 if (!isData) {
275 if ( autoconfigPRW == 1 ) {
276 ANA_CHECK( objTool.setBoolProperty(
"AutoconfigurePRWTool",
true) );
277 if ( commonPRWFile == 1 )
278 ANA_CHECK( objTool.setBoolProperty(
"PRWUseCommonMCFiles",
true) );
279 } else {
280 if (prw_file == "DUMMY") {
281 prw_conf.push_back("dev/SUSYTools/merged_prw_mc16a_latest.root");
282 } else {
284 }
285 ANA_CHECK( objTool.setProperty(
"PRWConfigFiles", prw_conf) );
286 }
287 }
288
289
291 std::string ilumi = "GoodRunsLists/data18_13TeV/20190318/ilumicalc_histograms_None_348885-364292_OflLumi-13TeV-010.root";
294 ilumi = "GoodRunsLists/data22_13p6TeV/20250321/ilumicalc_histograms_None_431810-440613_OflLumi-Run3-004.root";
297 ilumi = "GoodRunsLists/data23_13p6TeV/20250321/ilumicalc_histograms_None_451587-456749_OflLumi-Run3-004.root";
300 ilumi = "GoodRunsLists/data24_13p6TeV/20241118/ilumicalc_histograms_None_473235-486706_OflLumi-Run3-005.root";
303
304 ilumi = "GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_297730-311481_OflLumi-13TeV-009.root";
307 ilumi = "GoodRunsLists/data17_13TeV/20180619/physics_25ns_Triggerno17e33prim.lumicalc.OflLumi-13TeV-010.root";
310 ilumi = "GoodRunsLists/data18_13TeV/20190318/ilumicalc_histograms_None_348885-364292_OflLumi-13TeV-010.root";
311 }
312
329
330 ANA_CHECK( objTool.setProperty(
"mcCampaign", mcCampaign ) );
331 std::vector<std::string> prw_lumicalc;
332 if (ilumicalc_file == "DUMMY") {
334 } else {
335 prw_lumicalc =
getTokens(ilumicalc_file,
",");
336 }
337 ANA_CHECK( objTool.setProperty(
"PRWLumiCalcFiles", prw_lumicalc) );
338
339
340
341 if(!isData){
342 int ishower = objTool.getMCShowerType("PhPy8EG","GN2v01");
343 ANA_CHECK( objTool.setProperty(
"ShowerType", (
int)ishower) );
344 }
345
347
348
350
353
354 if ( objTool.initialize() != StatusCode::SUCCESS) {
355 ANA_MSG_ERROR(
"Cannot initialize SUSYObjDef_xAOD, exiting." );
356 return 1;
357 } else {
359 }
360
362
363
364
365 TEnv rEnv;
366 if ( rEnv.ReadFile(
config_file.c_str(), kEnvAll) != 0 ) {
368 return 1;
369 }
371
372 std::map<std::string,std::string> configDict = {};
373 configDict["Jet.LargeRcollection"] = rEnv.GetValue("Jet.LargeRcollection", "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets" );
374 configDict["TrackJet.Collection"] = rEnv.GetValue("TrackJet.Collection", "AntiKtVR30Rmax4Rmin02TrackJets" );
375 configDict["Jet.WtaggerConfig"] = rEnv.GetValue("Jet.WtaggerConfig", "None");
376 configDict["Jet.ZtaggerConfig"] = rEnv.GetValue("Jet.ZtaggerConfig", "None");
377 configDict["Jet.ToptaggerConfig"] = rEnv.GetValue("Jet.ToptaggerConfig", "None");
378
380 std::regex trimspaces("^ +| +$|( ) +");
381 for (auto& keyval : configDict) {
382 configDict[keyval.first] = regex_replace(configDict[keyval.first], comment, "");
383 configDict[keyval.first] = regex_replace(configDict[keyval.first], trimspaces, "$1");
384 ANA_MSG_DEBUG(
"config " << keyval.first <<
" : " << configDict[keyval.first]);
385 }
386 std::string FatJetCollection = configDict["Jet.LargeRcollection"];
387 std::string TrkJetCollection = configDict["TrackJet.Collection"];
388 if (configDict[
"TrackJet.Collection"].
find(
"None")!=std::string::npos) TrkJetCollection =
"";
389
390 std::map<std::string,bool>
slices = {};
391 slices[
"ele"] =
bool(rEnv.GetValue(
"Slices.Ele",
true));
392 slices[
"pho"] =
bool(rEnv.GetValue(
"Slices.Pho",
true));
393 slices[
"mu"] =
bool(rEnv.GetValue(
"Slices.Mu",
true));
394 slices[
"tau"] =
bool(rEnv.GetValue(
"Slices.Tau",
true));
395 slices[
"jet"] =
bool(rEnv.GetValue(
"Slices.Jet",
true));
396 slices[
"bjet"] =
bool(rEnv.GetValue(
"Slices.BJet",
true));
397 slices[
"fjet"] =
bool(rEnv.GetValue(
"Slices.FJet",
true));
398 slices[
"tjet"] =
bool(rEnv.GetValue(
"Slices.TJet",
true));
399 slices[
"met"] =
bool(rEnv.GetValue(
"Slices.MET",
true));
400 for (
auto&
x : slices) {
ANA_MSG_DEBUG(
"Slice " <<
x.first <<
": " << ((
x.second)?
"true":
"false")); }
401
402
403 ToolHandle<TauAnalysisTools::ITauTruthMatchingTool> T2MT = 0;
404 if (slices["tau"] && !isData) {
405
408 }
409
410
411
412 std::vector<std::string> el_triggers,mu_triggers,ph_triggers,tau_triggers,emu_triggers;
413 if (isRun3){
414 el_triggers = {"HLT_e26_lhtight_ivarloose_L1EM22VHI","HLT_e26_lhtight_ivarloose_L1eEM26M","HLT_e60_lhmedium_L1EM22VHI", "HLT_e140_lhloose_L1EM22VHI"};
415 mu_triggers = {"HLT_mu24_ivarmedium_L1MU14FCH","HLT_mu50_L1MU14FCH","HLT_mu60_0eta105_msonly_L1MU14FCH","HLT_mu60_L1MU14FCH","HLT_mu80_msonly_3layersEC_L1MU14FCH"};
416 ph_triggers = {"HLT_g140_loose_L1EM22VHI","HLT_g300_etcut_L1EM22VHI"};
417 tau_triggers = {"HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100", "HLT_tau40_mediumRNN_tracktwoMVA_tau35_mediumRNN_tracktwoMVA_03dRAB_L1TAU25IM_2TAU20IM_2J25_3J20"};
418 emu_triggers = {"HLT_2e12_lhloose_mu10_L12EM8VH_MU8F", "HLT_e12_lhloose_2mu10_L12MU8F", "HLT_e17_lhloose_mu14_L1EM15VH_MU8F", "HLT_e7_lhmedium_mu24_L1MU14FCH"};
419 }
420 else
421 {
422 el_triggers = {"HLT_e24_lhmedium_L1EM20VH","HLT_e26_lhtight_nod0_ivarloose", "HLT_e60_lhmedium_nod0", "HLT_e160_lhloose_nod0"};
423 mu_triggers = {"HLT_mu26_ivarmedium","HLT_mu50","HLT_mu20_mu8noL1"};
424 ph_triggers = {"HLT_g120_loose"};
425 tau_triggers = {"HLT_tau125_medium1_tracktwo", "HLT_tau40_mediumRNN_tracktwoMVA_tau35_mediumRNN_tracktwoMVA"};
426 emu_triggers = {"HLT_2e12_lhloose_nod0_mu10", "HLT_e12_lhloose_nod0_2mu10", "HLT_e17_lhloose_nod0_mu14", "HLT_e7_lhmedium_nod0_mu24"};
427 }
428
429
430 std::vector<ST::SystInfo> systInfoList;
431 if (NoSyst) {
436 systInfoList.push_back(infodef);
437 } else {
438 systInfoList = objTool.getSystInfoList();
439 }
440
441 size_t isys = 0;
442 const size_t Nsyst = systInfoList.size();
443 std::vector<std::vector<int> > elcuts;
444 std::vector<std::vector<int> > mucuts;
445 for (isys = 0; isys < Nsyst; ++isys) {
446 std::vector<int> elcutsCurrentSyst;
447 std::vector<int> mucutsCurrentSyst;
448 for (
size_t icut = 0; icut <
Ncuts; ++icut) {
449 elcutsCurrentSyst.push_back(0);
450 mucutsCurrentSyst.push_back(0);
451 }
452 elcuts.push_back(elcutsCurrentSyst);
453 mucuts.push_back(elcutsCurrentSyst);
454 }
455
456 if (objTool.resetSystematics() != StatusCode::SUCCESS) {
459 }
460
461
462
463 TStopwatch m_clock0;
464 m_clock0.Start();
465 TStopwatch m_clock1;
466 m_clock1.Start();
467 TStopwatch m_clock2;
468
471
472
474
475 if (entry == 1) {
476 m_clock1.Stop();
477 m_clock2.Start();
478
479
480 }
481
482
483
484 event.getEntry( entry );
485
486 if(entry == 0){
487
489 if (!
event.retrieveMetaInput(completeCBC,
"CutBookkeepers").isSuccess()) {
490 ANA_MSG_ERROR(
"Failed to retrieve CutBookkeepers from MetaData, exiting.");
491 return 1;
492 }
493
494
496 int maxcycle=-1;
497 for ( const auto *cbk : *completeCBC ) {
498 cbkname = cbk->name();
499 stream = cbk->inputStream();
500 ostream = (cbk->outputStreams().
size() ? cbk->outputStreams()[0] :
"");
501 ANA_MSG_INFO(
"== cbkname: " << cbkname <<
", description: " << cbk->description() <<
", stream: " << stream);
503 ANA_MSG_INFO(
" cycle: " << cbk->cycle() <<
", allEvents = " << cbk->nAcceptedEvents());
504 if (cbkname.find("PHYSVAL")!=std::string::npos) kernel="PHYSVAL";
505 else if (cbkname.find("PHYSLITE")!=std::string::npos) kernel="PHYSLITE";
506 else if (cbkname.find("PHYS")!=std::string::npos) kernel="PHYS";
507 else if (
stream.find(
"StreamAOD")!=std::string::npos) kernel=
stream.replace(
stream.find(
"Stream"),6,
"");
508 else kernel="other";
509 if (cbkname.find(
"AllExecutedEvents")!=std::string::npos &&
ostream.find(
"StreamAOD")!=std::string::npos && cbk->cycle() > maxcycle) {
510 maxcycle = cbk->cycle();
511 allEventsCBK = cbk;
512 }
513 }
514
515 if (allEventsCBK) {
519 ANA_MSG_INFO(
"CutBookkeepers Accepted " << nEventsProcessed <<
" SumWei " << sumOfWeights <<
" sumWei2 " << sumOfWeightsSquared);
520 }
else {
ANA_MSG_INFO(
"No relevent CutBookKeepers found" ); }
521
524
525
526 if (isPHYSLite) {
527 hasTrkJets = false;
528 }
529 }
530
531
532 if (!isPHYSLite) {
534 }
535
536
537 if (hasLRT) {
539 ANA_CHECK( objTool.ApplyLRTUncertainty());
540 }
541
542
543
546
547 if (entry==0 || entry % period == 999) {
549 "run #" <<
static_cast< int >( ei->
runNumber() ) <<
" " <<
static_cast< int >( entry ) <<
" events processed so far <<<===");
550 }
551
552 if (!isData && entry % period == 0) {
554 ANA_MSG_INFO(
"===>>> process cross section " << xsectTimesEff );
555 }
556
557 bool eventPassesGRL(true);
558 bool eventPassesCleaning(true);
559 bool eventPassesTileTrip(true);
560 bool eventPassesTrigger(true);
561
562 if (!isData){
564 float PRW_weight = isPHYSLite? pileupWeightAcc(*ei): objTool.GetPileupWeight();
566 }
567
568 if (isData) {
570
575 }
576 else {
577
578 if(entry<5){
579 int pdgid1 = 0;
580 int pdgid2 = 0;
581
582 if( objTool.FindSusyHP(pdgid1, pdgid2) != StatusCode::SUCCESS ){
583 ANA_MSG_WARNING(
"SUSY Proc finding failed. Normal for non-SUSY samples." );
584 }
585
586 if( pdgid1!=0 && pdgid2!=0){
587
591 }
595 }
596 }
597
598
599
600 if (objTool.GetPrimVtx() == nullptr) {
601 Warning(
APP_NAME ,
"No PV found for this event! Skipping...");
603 continue;
604 }
605
606
607
608
627
628
629
630
631 if (slices["ele"]) {
633 ANA_CHECK( objTool.GetElectrons(electrons_nominal, electrons_nominal_aux,
true, isPHYSLite?
"AnalysisElectrons":
"Electrons") );
635
636 for (const auto& electron : *electrons_nominal){
637 if (
debug>0 && entry<10) {
638 bool accepted=false;
639 bool idok =
electron->passSelection(accepted,
"passBaseID");
640 if(idok)
ANA_MSG_DEBUG(
"Electron Baseline ID Decision : " << accepted );
641 else ANA_MSG_DEBUG(
"Electron Baseline ID Decision not available " );
642 }
643 }
644 }
645
646
647 if( slices[
"pho"] &&
stream.find(
"SUSY12")==std::string::npos) {
649 ANA_CHECK( objTool.GetPhotons(photons_nominal,photons_nominal_aux,
true, isPHYSLite?
"AnalysisPhotons":
"Photons") );
651 }
652
653
654 if (slices["mu"]) {
656 ANA_CHECK( objTool.GetMuons(muons_nominal, muons_nominal_aux,
true, isPHYSLite?
"AnalysisMuons":
"Muons") );
658
659
660 for (const auto& muon : *muons_nominal){
661 if (
debug>0 && entry<10){
667 << "IsHighPt(only) = " << (int)objTool.IsHighPtMuon(*muon) );
668 }
669 }
670 }
671
672
673 if (slices["jet"]) {
675 ANA_CHECK( objTool.GetJets(jets_nominal, jets_nominal_aux,
true, isPHYSLite?
"AnalysisJets":
"") );
677 }
678
679
681 if (slices["tjet"] && hasTrkJets) {
683 if(
event.retrieve(TJC, TrkJetCollection).isSuccess() ){
684 ANA_CHECK(objTool.GetTrackJets(trkjets_nominal, trkjets_nominal_aux));
686 } else {
687 ANA_MSG_ERROR(
"TrackJet collection " << TrkJetCollection.c_str() <<
" not available in input file. Please check!");
688 return 1;
689 }
690 }
691
692
694 if(slices["fjet"] && hasFatJets) {
695 ANA_MSG_DEBUG(
"Nominal fat jet step, collection: " << FatJetCollection );
696 if(
event.retrieve(FJC, FatJetCollection).isSuccess() ){
697 ANA_CHECK( objTool.GetFatJets(fatjets_nominal, fatjets_nominal_aux,
true,
"",
true) );
699 if (
debug>0 && entry < 10) {
700 for (const auto& fatjet : *fatjets_nominal) {
702 }
703 }
704 } else {
705 ANA_MSG_ERROR(
"LargeR jet collection " << FatJetCollection.c_str() <<
" not available in input file. Please check!");
706 return 1;
707 }
708 }
709
710
711 if(slices["tau"]) {
713 ANA_CHECK( objTool.GetTaus(taus_nominal,taus_nominal_aux,
true, isPHYSLite?
"AnalysisTauJets":
"TauJets") );
715 }
716
717
718 bool passMETtrig = objTool.IsMETTrigPassed();
720
721
722 metcst_nominal->setStore(metcst_nominal_aux);
724 double metsig_cst (0.);
725 mettst_nominal->setStore(mettst_nominal_aux);
727 double metsig_tst (0.);
728
729
730
731
732
733 double base_event_weight(1.);
734 if (!isData){
736
737 if(
debug>0 && entry < 5){
738 float RW_sh22 = objTool.getSherpaVjetsNjetsWeight("AntiKt4TruthWZDressedJets");
739 Info(
APP_NAME ,
"--- SHERPA2.2 REWEIGHTING : %f", RW_sh22);
740 }
741 }
742
743
744
745
746 double elecSF_nominal(1.);
747 double muonSF_nominal(1.);
748
749 double btagSF_nominal(1.);
750 double btagSF_trkJet_nominal(1.);
751
752
753 bool isNominal(true);
754 isys = 0;
755
756 for (const auto& sysInfo : systInfoList) {
758 ANA_MSG_DEBUG(
">>>> Working on variation: \"" <<(
sys.name()).c_str() <<
"\" <<<<<<" );
759
760 size_t icut = 0;
761
762 elcuts[isys][icut] += 1;
763 mucuts[isys][icut] += 1;
764 ++icut;
765
766
767 if (!(eventPassesGRL && eventPassesCleaning)) {++isys; continue;}
768 elcuts[isys][icut] += 1;
769 mucuts[isys][icut] += 1;
770 ++icut;
771
772
773 if (!eventPassesTileTrip) {++isys; continue;}
774 elcuts[isys][icut] += 1;
775 mucuts[isys][icut] += 1;
776 ++icut;
777
778 if (
debug>0 && entry==0) {
779
780 std::vector<std::string> trigItem = {"HLT_e26_lhtight_nod0_ivarloose","HLT_mu26_ivarmedium","HLT_mu50","HLT_xe100","HLT_noalg_.*"};
781 if (isRun3) trigItem = {"HLT_e26_lhtight_ivarloose_L1EM22VHI","HLT_e26_lhtight_ivarloose_L1eEM26M","HLT_mu24_ivarmedium_L1MU14FCH","HLT_mu50_L1MU14FCH","HLT_xe100","HLT_noalg_.*"};
782 for (
int it = 0;
it < (int) trigItem.size();
it++) {
783 bool passed = objTool.IsTrigPassed(trigItem[it]);
784 float prescale = objTool.GetTrigPrescale(trigItem[it]);
785 ANA_MSG_DEBUG(
"Pass " << trigItem[it].c_str() <<
" trigger? " << (
int)
passed <<
", prescale " << prescale );
786
787
791 ANA_MSG_DEBUG(
"ChainGroup " << trigItem[it].c_str() <<
": passing trigger? " << (
int)cg_passed <<
", prescale " << cg_prescale );
794 }
795 }
796 }
797
798
799 if (!eventPassesTrigger) {++isys; continue;}
800 elcuts[isys][icut] += 1;
801 mucuts[isys][icut] += 1;
802 ++icut;
803
804
805
806
807
818
820
821
822
823 if (objTool.applySystematicVariation(sys) != StatusCode::SUCCESS) {
824 ANA_MSG_INFO(
"Cannot configure SUSYTools for systematic var. " << (
sys.name()).c_str() );
825 } else {
827 }
828 if (sysInfo.affectsKinematics || sysInfo.affectsWeights) isNominal = false;
829
830
831 double event_weight = base_event_weight;
832
833
840
841
842
843 if (sysInfo.affectsKinematics) {
844 if (slices["ele"] && syst_affectsElectrons) {
847 ANA_CHECK( objTool.GetElectrons(electrons_syst, electrons_syst_aux,
true, isPHYSLite?
"AnalysisElectrons":
"Electrons") );
849 }
850
851 if (slices["mu"] && syst_affectsMuons) {
854 ANA_CHECK( objTool.GetMuons(muons_syst, muons_syst_aux,
true, isPHYSLite?
"AnalysisMuons":
"Muons") );
855 muons = muons_syst;
856 }
857
858 if(slices["tau"] && syst_affectsTaus) {
861 ANA_CHECK( objTool.GetTaus(taus_syst,taus_syst_aux,
true, isPHYSLite?
"AnalysisTauJets":
"TauJets") );
863 }
864
865 if(slices["pho"] && syst_affectsPhotons) {
868 ANA_CHECK( objTool.GetPhotons(photons_syst,photons_syst_aux,
true, isPHYSLite?
"AnalysisPhotons":
"Photons") );
869 photons = photons_syst;
870 }
871
872 if (slices["jet"] && syst_affectsJets) {
875 ANA_CHECK( objTool.GetJetsSyst(*jets_nominal, jets_syst, jets_syst_aux,
true, isPHYSLite?
"AnalysisJets":
"") );
877 }
878
879 if (slices["btag"] && syst_affectsBTag) {
882 ANA_CHECK( objTool.GetTrackJets(trkjets_syst, trkjets_syst_aux) );
883 trkjets = trkjets_syst;
884 }
885
890 if (slices["met"]) {
891 metcst_syst->setStore(metcst_syst_aux);
892 mettst_syst->setStore(mettst_syst_aux);
895
896 metcst = metcst_syst;
897 mettst = mettst_syst;
898 metcst_aux = metcst_syst_aux;
899 mettst_aux = mettst_syst_aux;
900 }
901 }
902
903
904
905
906
907
908
909 if (slices["ele"] && (isNominal || (sysInfo.affectsKinematics && syst_affectsElectrons))) {
910 for (const auto& el : *electrons) {
911
912
913 if (!isData) {
915 if (truthEle) {
916 ANA_MSG_DEBUG(
" Truth Electron pt " << truthEle->
pt() <<
" eta " << truthEle->
eta() );
919 }
920 }
921 }
922
923
924 if (slices["mu"] && (isNominal || (sysInfo.affectsKinematics && syst_affectsMuons))) {
925 for (const auto& mu : *muons) {
926
927
928
929
930 if (!isData) {
931
932 int muonTruthType = 0;
933 int muonTruthOrigin = 0;
935 if (trackParticle) {
939 if (truthMu) {
941 ANA_MSG_DEBUG(
" type " << muonTruthType <<
" origin " << muonTruthOrigin );
943 }
944 }
945 }
946 }
947
948
949 if (slices["jet"] && (isNominal || (sysInfo.affectsKinematics && syst_affectsJets))) {
950 for (
const auto&
jet : *jets) {
951 objTool.IsBJet( *
jet) ;
952 }
953 }
954
955
956 if (slices["tau"] && (isNominal || (sysInfo.affectsKinematics && syst_affectsTaus))) {
957 for(
const auto& tau : *
taus){
958 if (!isData){
960 if (truthTau){
961 ANA_MSG_DEBUG(
"Tau was matched to a truth particle, which has a charge of "
962 <<
static_cast<int>(truthTau->
charge()));
964 }
965 }
966 }
967
968
970 if (isNominal || (sysInfo.affectsKinematics && (syst_affectsElectrons || syst_affectsMuons || syst_affectsJets))) {
971 if(
stream.find(
"SUSY3")!=std::string::npos) {
ANA_CHECK( objTool.OverlapRemoval(electrons, muons, jets, 0,
taus) ); }
972 else if(
stream.find(
"SUSY10")!=std::string::npos) {
ANA_CHECK( objTool.OverlapRemoval(electrons, muons, jets, 0, 0, fatjets_nominal) ); }
973 else{
ANA_CHECK( objTool.OverlapRemoval(electrons, muons, jets, photons) ); }
974 }
975
976
977 if (slices["jet"]) {
979 for (
const auto&
jet : *jets) {
983 jet->pt() > 20000. && ( std::abs(
jet->eta()) < 2.5) ) {
985 }
986 }
987 }
988
989 if (slices["met"] && (isNominal || sysInfo.affectsKinematics)) {
991 if(
stream.find(
"SUSY3")!=std::string::npos){
993 ANA_CHECK( objTool.GetMET(*metcst, jets, electrons, muons, photons,
taus,
false,
false) );
995 ANA_CHECK( objTool.GetMETSig(*metcst, metsig_cst,
false,
false) );
996
998 ANA_CHECK( objTool.GetMET(*mettst, jets, electrons, muons, photons,
taus,
true,
true) );
1000 ANA_CHECK( objTool.GetMETSig(*mettst, metsig_tst,
true,
true) );
1001 }
1002 else{
1004 ANA_CHECK( objTool.GetMET(*metcst, jets, electrons, muons, photons, 0,
false,
false) );
1006 ANA_CHECK( objTool.GetMETSig(*metcst, metsig_cst,
false,
false) );
1007
1009 ANA_CHECK( objTool.GetMET(*mettst, jets, electrons, muons, photons, 0,
true,
true) );
1011 ANA_CHECK( objTool.GetMETSig(*mettst, metsig_tst,
true,
true) );
1012 }
1014 }
1015
1016
1017
1018 float elecSF = 1.0;
1019 int el_idx[
nSel] = {0};
1020 if (slices["ele"]) {
1022 for (const auto& el : *electrons) {
1025 continue;
1026 }
1029 }
1032 if (
el->pt() > 20000. ) {
1034
1035 bool passTM=false;
1036 for(const auto& t : el_triggers){
1037 passTM |= (objTool.IsTrigPassed(t) && objTool.IsTrigMatched(el, t));
1038 }
1039 if(passTM)
1041
1042
1043
1044
1045
1046 }
1047 }
1048 }
1049 if (isNominal || syst_affectsElectrons) {
1050 if(!isData) elecSF = objTool.GetTotalElectronSF(*electrons);
1051 }
1052
1053 if (isNominal) {elecSF_nominal = elecSF;}
1054 else if (!syst_affectsElectrons) {elecSF = elecSF_nominal;}
1055 event_weight *= elecSF;
1056 }
1057
1058
1059
1060 float muonSF = 1.0;
1061 int mu_idx[
nSel] = {0};
1062 bool passTMtest = false;
1063
1064 TString muTrig2015 = "HLT_mu20_iloose_L1MU15_OR_HLT_mu50";
1065 TString muTrig2016 = "HLT_mu26_ivarmedium_OR_HLT_mu50";
1066 TString muTrig2017 = "HLT_mu26_ivarmedium_OR_HLT_mu50";
1067 TString muTrig2022 = "HLT_mu24_ivarmedium_L1MU14FCH_OR_HLT_mu50_L1MU14FCH";
1068
1069 std::vector<std::string> muTrigs2015 = {"HLT_mu20_iloose_L1MU15","HLT_mu50"};
1070 std::vector<std::string> muTrigs2016 = {"HLT_mu26_ivarmedium","HLT_mu50"};
1071 std::vector<std::string> muTrigs2017 = {"HLT_mu26_ivarmedium","HLT_mu50"};
1072 std::vector<std::string> muTrigs2022 = {"HLT_mu24_ivarmedium_L1MU14FCH","HLT_mu50_L1MU14FCH"};
1073
1074 if (slices["mu"]) {
1076 for (const auto& mu : *muons) {
1079 continue;
1080 }
1085 }
1086 }
1089 if (
mu->pt() > 20000. ) {
1091
1092 bool passTM=false;
1093 for(const auto& t : mu_triggers){
1094 if (objTool.IsTrigPassed(t))
ANA_MSG_DEBUG(
"Pass " << t <<
" : " << (
int)objTool.IsTrigMatched(mu, t));
1096 passTM |= (objTool.IsTrigPassed(t) && objTool.IsTrigMatched(mu, t));
1097 }
1098 if(passTM)
1100
1101 }
1102
1103 std::vector<std::string> my_mu_trigs;
1104 if(!isData){
1105 if(objTool.treatAsYear()==2015)
1106 my_mu_trigs=muTrigs2015;
1107 else if(objTool.treatAsYear()==2016)
1108 my_mu_trigs=muTrigs2016;
1109 else if(objTool.treatAsYear()==2017 || objTool.treatAsYear()==2018)
1110 my_mu_trigs=muTrigs2017;
1111 else
1112 my_mu_trigs=muTrigs2022;
1113 }
1114 else{
1115 my_mu_trigs=muTrigs2016;
1116 }
1117 for (auto& t : my_mu_trigs) passTMtest |= (objTool.IsTrigPassed(t) && objTool.IsTrigMatched(mu,t));
1118 }
1119 }
1120 }
1121
1122
1123
1124
1125 if (slices["pho"]) {
1127 int n_SignalPhotons = 0;
1128 for (
const auto&
y : *photons) {
1130 n_SignalPhotons++;
1132 <<
", idSF = " << objTool.GetSignalPhotonSF(*
y,
true,
false,
false)
1133 <<
", isoSF = " << objTool.GetSignalPhotonSF(*
y,
false,
true,
false)
1134 <<
", trigSF = " << objTool.GetSignalPhotonSF(*
y,
false,
false,
true)
1135 );
1136 }
1137 }
1138 if(n_SignalPhotons>0)
ANA_MSG_DEBUG(
"Total Event photon SF = " << objTool.GetTotalPhotonSF(*photons,
true,
true,
true));
1139 }
1140
1141
1142
1143 bool comb_trig_check = false;
1144
1145 if (slices["ele"] && slices["mu"] && comb_trig_check) {
1147 if (objTool.IsTrigPassed("HLT_2e12_lhloose_L12EM10VH"))
1148 ANA_MSG_DEBUG(
" 2e12_lhloose_L12EM10VH SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton"));
1149 if (objTool.IsTrigPassed("HLT_e17_lhloose_mu14"))
1150 ANA_MSG_DEBUG(
"e17_lhloose_mu14 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1151 if (objTool.IsTrigPassed("HLT_2e17_lhvloose_nod0"))
1152 ANA_MSG_DEBUG(
" 2e17_lhvloose_nod0 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1153 if (objTool.IsTrigPassed("HLT_2e17_lhvloose_nod0_L12EM15VHI"))
1154 ANA_MSG_DEBUG(
" 2e17_lhvloose_nod0_L12EM15VHI SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1155 if (objTool.IsTrigPassed("HLT_e17_lhloose_nod0_mu14"))
1156 ANA_MSG_DEBUG(
" e17_lhloose_nod0_mu14 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1157 if (objTool.IsTrigPassed("HLT_e7_lhmedium_mu24"))
1158 ANA_MSG_DEBUG(
" e7_lhmedium_mu24 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1159 if (objTool.IsTrigPassed("HLT_e7_lhmedium_nod0_mu24"))
1160 ANA_MSG_DEBUG(
" e7_lhmedium_nod0_mu24 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1161 if (objTool.IsTrigPassed("HLT_mu18_mu8noL1"))
1162 ANA_MSG_DEBUG(
" mu18_mu8noL1 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1163 if (objTool.IsTrigPassed("HLT_mu20_mu8noL1"))
1164 ANA_MSG_DEBUG(
" mu20_mu8noL1 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1165 if (objTool.IsTrigPassed("HLT_2mu10"))
1166 ANA_MSG_DEBUG(
" 2mu10 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1167 if (objTool.IsTrigPassed("HLT_2mu14"))
1168 ANA_MSG_DEBUG(
" 2mu14 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"diLepton") );
1169 if (objTool.IsTrigPassed("HLT_2e12_lhloose_mu10"))
1170 ANA_MSG_DEBUG(
" 2e12_lhloose_mu10 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"multiLepton") );
1171 if (objTool.IsTrigPassed("HLT_2e12_lhloose_nod0_mu10"))
1172 ANA_MSG_DEBUG(
" 2e12_lhloose_nod0_mu10 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"multiLepton") );
1173 if (objTool.IsTrigPassed("HLT_e12_lhloose_2mu10"))
1174 ANA_MSG_DEBUG(
" e12_lhloose_2mu10 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"multiLepton") );
1175 if (objTool.IsTrigPassed("HLT_e12_lhloose_nod0_2mu10"))
1176 ANA_MSG_DEBUG(
" e12_lhloose_nod0_2mu10 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"multiLepton") );
1177 if (objTool.IsTrigPassed("HLT_3mu6"))
1178 ANA_MSG_DEBUG(
" 3mu6 SF: " << objTool.GetTriggerGlobalEfficiencySF(*electrons_nominal, *muons_nominal,
"multiLepton") );
1179 }
1180
1181 if (slices["mu"] && ((!isData && isNominal) || syst_affectsMuons)) {
1183 if(passTMtest || 1){
1184 ANA_MSG_DEBUG(
"MUON BEFORE SF = " << muonSF <<
" " << objTool.treatAsYear() <<
" " << objTool.GetRandomRunNumber() <<
" " << objTool.GetPileupWeight() );
1185 if(objTool.treatAsYear()==2015) muonSF = objTool.GetTotalMuonSF(*muons, true, true, muTrig2015.Data());
1186 else if(objTool.treatAsYear()==2016) muonSF = objTool.GetTotalMuonSF(*muons, true, true, muTrig2016.Data());
1187 else if(objTool.treatAsYear()==2017) muonSF = objTool.GetTotalMuonSF(*muons, true, true, muTrig2017.Data());
1188 else if(objTool.treatAsYear()==2018) muonSF = objTool.GetTotalMuonSF(*muons, true, true, muTrig2017.Data());
1189 else if(objTool.treatAsYear()==2022) muonSF = objTool.GetTotalMuonSF(*muons, true, true, muTrig2022.Data());
1190 ANA_MSG_DEBUG(
"MUON AFTER SF = " << muonSF <<
" " << objTool.treatAsYear() <<
" " << objTool.GetRandomRunNumber() <<
" " << objTool.GetPileupWeight() );
1191 }
1192 }
1193
1194 if (slices["mu"]) {
1195 if (isNominal) { muonSF_nominal = muonSF; }
1196 else if (!syst_affectsMuons) { muonSF = muonSF_nominal; }
1197 event_weight *= muonSF;
1198 }
1199
1200
1201
1202 if (slices[
"tau"] && isNominal && !isData &&
stream.find(
"SUSY3")!=std::string::npos) {
1204 if (entry<10){
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214 for (
const auto& tau : *
taus) {
1216 << ", idSF = " << objTool.GetSignalTauSF(*tau,true,false,"tau125_medium1_tracktwo")
1217 << ", trigSF = " << objTool.GetSignalTauSF(*tau,false,true,"tau125_medium1_tracktwo")
1218 << ", totSF = " << objTool.GetSignalTauSF(*tau,true,true,"tau125_medium1_tracktwo")
1219 );
1220 }
1221 ANA_MSG_INFO(
"Total Event Tau SF = " << objTool.GetTotalTauSF(*
taus,
true,
true,
"tau125_medium1_tracktwo") );
1222 }
1223 }
1224
1226
1227
1228
1229 int jet_idx[
nSel] = {0};
1230 if (slices["jet"]) {
1232 for (
const auto&
jet : *goodJets) {
1237 continue;
1238 }
1241 if (
jet->pt() > 50000. )
1243 }
1246 }
1247 }
1248
1249
1250 float btagSF(1.);
1251 if (slices["jet"] && slices["btag"]) {
1253 if (!isData) {
1254 if (isNominal) {btagSF = btagSF_nominal = objTool.BtagSF(jets);}
1255 else if (syst_affectsBTag || (sysInfo.affectsKinematics && syst_affectsJets)) {btagSF = objTool.BtagSF(jets);}
1256 else {btagSF = btagSF_nominal;}
1257 }
1258 event_weight *= btagSF;
1259
1260
1261 if (
stream.find(
"SUSY1")!=std::string::npos ) {
1262 float btagSF_trkJet(1.);
1263 if (!isData) {
1264 if (isNominal) {btagSF_trkJet = btagSF_trkJet_nominal = objTool.BtagSF_trkJet(trkjets);}
1265 else if (syst_affectsBTag || (sysInfo.affectsKinematics && syst_affectsJets)) {btagSF_trkJet = objTool.BtagSF_trkJet(trkjets);}
1266 else {btagSF_trkJet = btagSF_trkJet_nominal;}
1267 }
1268 event_weight *= btagSF_trkJet;
1269 }
1270 }
1271
1273
1274
1275
1276 if (slices[
"ele"] && slices[
"mu"] && mu_idx[
cosmic] == 0 ) {
1277 elcuts[isys][icut] += 1;
1278 mucuts[isys][icut] += 1;
1279 ++icut;
1280
1282 if (passlep) {
1283 bool passel = el_idx[
baseline] == 1;
1284 bool passmu = mu_idx[
baseline] == 1;
1285 if (passel) elcuts[isys][icut] += 1;
1286 if (passmu) mucuts[isys][icut] += 1;
1287 ++icut;
1288
1291 if (passel) elcuts[isys][icut] += 1;
1292 if (passmu) mucuts[isys][icut] += 1;
1293 ++icut;
1294
1295 passel = el_idx[
goodpt] == 1;
1296 passmu = mu_idx[
goodpt] == 1;
1297 if (passel) elcuts[isys][icut] += 1;
1298 if (passmu) mucuts[isys][icut] += 1;
1299 ++icut;
1300
1303 if (passel) elcuts[isys][icut] += 1;
1304 if (passmu) mucuts[isys][icut] += 1;
1305 ++icut;
1306
1307 if (jet_idx[
goodpt] >= 2) {
1308 if (passel) elcuts[isys][icut] += 1;
1309 if (passmu) mucuts[isys][icut] += 1;
1310 ++icut;
1311 }
1312 }
1313 }
1314
1317
1318
1319 if (sysInfo.affectsKinematics) {
1320 delete metcst;
1321 delete metcst_aux;
1322 delete mettst;
1323 delete mettst_aux;
1324 }
1325
1326 isNominal = false;
1327 ANA_MSG_DEBUG(
">>>> Finished with variation: \"" <<(
sys.name()).c_str() <<
"\" <<<<<<" );
1328
1329
1330 ++isys;
1331 }
1332
1333
1334
1336
1337
1338
1339
1340
1341
1343
1344
1345 if (entry==0 || entry % period == 99) {
1347 "===>>> done processing event #%i, "
1348 "run #%i %i events processed so far <<<===",
1351 static_cast< int >( entry + 1 ) );
1352 }
1353
1354
1355 }
1356
1357 m_clock0.Stop();
1358 m_clock2.Stop();
1359
1360
1361
1362
1363
1365 "Time per event: (CPU / WALL)\n"
1366 " Entire loop - %f / %f ms\n"
1367 " First event - %f / %f ms\n"
1368 " Excluding first event - %f / %f ms",
1369 m_clock0.CpuTime() * 1e3 /
entries, m_clock0.RealTime() * 1e3 /
entries,
1370 m_clock1.CpuTime() * 1e3, m_clock1.RealTime() * 1e3,
1371 m_clock2.CpuTime() * 1e3 / (
entries - 1), m_clock2.RealTime() * 1e3 / (
entries - 1));
1372
1373
1374
1375 isys = 0;
1376 for (const auto& sysInfo : systInfoList) {
1378 ANA_MSG_INFO(
"-- Dummy Cutflow -- >>>> Variation " <<
sys.name().c_str() <<
" <<<<" );
1379 for (
size_t icut = 0; icut <
Ncuts; ++icut) {
1381 << "-> el: " << elcuts[isys][icut] << ", mu: " << mucuts[isys][icut] );
1382 }
1383 ++isys;
1384 }
1385
1386
1387 return 0;
1388}
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
size_t size() const
Number of registered mappings.
static void enableFailure() noexcept
Class to wrap a set of SystematicVariations.
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Helper class to provide constant type-safe access to aux data.
float kfactor(int id, int proc=0) const
float efficiency(int id, int proc=0) const
float xsectTimesEff(int id, int proc=0) const
float getPrescale(unsigned int condition=TrigDefs::Physics) const
returns prescale factor for chain group with single chain in returns real prescale factor for real ch...
bool isPassed(unsigned int condition=TrigDefs::Physics) const
tells if chain group passed
std::vector< std::string > getListOfTriggers() const
double sumOfEventWeightsSquared() const
Get the sum-of-(event-weights-squared) that this CutBookkeeper has seen.
double sumOfEventWeights() const
Get the sum-of-event-weights that this CutBookkeeper has seen.
uint64_t nAcceptedEvents() const
Get the number of accepted events that this CutBookkeeper has seen.
uint32_t lumiBlock() const
The current event's luminosity block number.
@ Tile
The Tile calorimeter.
@ Core
Core flags describing the event.
@ LAr
The LAr calorimeter.
bool isEventFlagBitSet(EventFlagSubDet subDet, size_t bit) const
Check one particular bit of one particular sub-detector.
@ Error
The sub-detector issued an error.
uint32_t runNumber() const
The current event's run number.
uint32_t mcChannelNumber() const
The MC generator's channel number.
EventFlagErrorState errorState(EventFlagSubDet subDet) const
Get the error state for a particular sub-detector.
uint64_t eventNumber() const
The current event's event number.
float mcEventWeight(size_t i=0) const
The weight of one specific MC event used in the simulation.
Class creating a shallow copy of an existing auxiliary container.
Tool for accessing xAOD files outside of Athena.
@ kClassAccess
Access auxiliary data using the aux containers.
A relatively simple transient store for objects created in analysis.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
double charge() const
Physical charge.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
std::string find(const std::string &s)
return a remapped string
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Error
The different types of error that can be flagged in the L1TopoRDO.
XAOD_AUXDATA_DEPRECATED bool isAvailable(const std::string &name, const std::string &clsname="") const
Check if an aux variable is available for reading.
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
static const SG::ConstAccessor< char > acc_bad("bad")
static const SG::ConstAccessor< int > acc_ztagged("ztagged")
static const SG::ConstAccessor< int > acc_truthType("truthType")
static const SG::ConstAccessor< int > acc_truthOrigin("truthOrigin")
static const SG::ConstAccessor< char > acc_passedHighPtCuts("passedHighPtCuts")
static const SG::ConstAccessor< char > acc_signal("signal")
static const SG::ConstAccessor< char > acc_baseline("baseline")
static bool testAffectsObject(xAOD::Type::ObjectType type, unsigned int test)
static const SG::ConstAccessor< char > acc_bjet("bjet")
static const SG::ConstAccessor< int > acc_wtagged("wtagged")
static const SG::ConstAccessor< char > acc_cosmic("cosmic")
static const SG::ConstAccessor< char > acc_passOR("passOR")
@ Jet
The object is a jet.
@ Photon
The object is a photon.
@ Muon
The object is a muon.
@ BTag
The object is a b-tagging object.
@ Electron
The object is an electron.
@ Tau
The object is a tau (jet).
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle &p)
Return the truthParticle associated to the given IParticle (if any).
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
EventInfo_v1 EventInfo
Definition of the latest event info version.
@ Unknown
Track fitter not defined.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
MissingETContainer_v1 MissingETContainer
TruthParticle_v1 TruthParticle
Typedef to implementation.
CutBookkeeper_v1 CutBookkeeper
Define the latest version of the CutBookkeeper class.
setBGCode setTAP setLVL2ErrorBits bool
MissingETAuxContainer_v1 MissingETAuxContainer
JetContainer_v1 JetContainer
Definition of the current "jet container version".
TauJetContainer_v3 TauJetContainer
Definition of the current "taujet container version".
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
CutBookkeeperContainer_v1 CutBookkeeperContainer
Define the latest version of the CutBookkeeperContainer class.