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) ) ;
263 if(!config_file.empty())
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)
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...
bool isAvailable(const T_Aux &cont, SG::auxid_t auxid)
Error
The different types of error that can be flagged in the L1TopoRDO.
@ 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.