4141#include < TString.h>
4242
4343#include < algorithm>
44+ #include < array>
45+ #include < chrono>
4446#include < cmath>
47+ #include < cstddef>
4548#include < cstdint>
49+ #include < cstdlib>
50+ #include < cstring>
51+ #include < iterator>
4652#include < map>
4753#include < memory>
4854#include < string>
@@ -133,6 +139,13 @@ constexpr static uint32_t gkEventFillMapWithCov = VarManager::ObjTypes::ReducedE
133139constexpr static uint32_t gkTrackFillMapWithCov = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelCov | VarManager::ObjTypes::ReducedTrackBarrelPID;
134140constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelPID;
135141
142+ namespace dqefficiency_helpers
143+ {
144+ inline float * varValues () { return static_cast <float *>(VarManager::fgValues); }
145+ inline TString* varNames () { return static_cast <TString*>(VarManager::fgVariableNames); }
146+ inline TString* varUnits () { return static_cast <TString*>(VarManager::fgVariableUnits); }
147+ } // namespace dqefficiency_helpers
148+
136149// Global function used to define needed histogram classes
137150void DefineHistograms (HistogramManager* histMan, TString histClasses, const char * histGroups); // defines histograms for all tasks
138151
@@ -155,7 +168,7 @@ struct AnalysisEventSelection {
155168 HistogramManager* fHistMan = nullptr ;
156169 MixingHandler* fMixHandler = nullptr ;
157170
158- AnalysisCompositeCut* fEventCut ;
171+ AnalysisCompositeCut* fEventCut = nullptr ;
159172
160173 std::map<int64_t , bool > fSelMap ; // key: reduced event global index, value: event selection decision
161174
@@ -188,7 +201,7 @@ struct AnalysisEventSelection {
188201 if (fConfigQA ) {
189202 fHistMan = new HistogramManager (" analysisHistos" , " " , VarManager::kNVars );
190203 fHistMan ->SetUseDefaultVariableNames (true );
191- fHistMan ->SetDefaultVarNames (VarManager::fgVariableNames, VarManager::fgVariableUnits );
204+ fHistMan ->SetDefaultVarNames (dqefficiency_helpers::varNames (), dqefficiency_helpers::varUnits () );
192205 DefineHistograms (fHistMan , " Event_BeforeCuts;Event_AfterCuts;" , fConfigAddEventHistogram .value .data ());
193206 DefineHistograms (fHistMan , " EventsMC" , fConfigAddEventMCHistogram .value .data ());
194207 dqhistograms::AddHistogramsFromJSON (fHistMan , fConfigAddJSONHistograms .value .c_str ()); // aditional histograms via JSON
@@ -222,17 +235,17 @@ struct AnalysisEventSelection {
222235 bool decision = false ;
223236 // if QA is requested fill histograms before event selections
224237 if (fConfigQA ) {
225- fHistMan ->FillHistClass (" Event_BeforeCuts" , VarManager::fgValues ); // automatically fill all the histograms in the class Event
238+ fHistMan ->FillHistClass (" Event_BeforeCuts" , dqefficiency_helpers::varValues () ); // automatically fill all the histograms in the class Event
226239 }
227- if (fEventCut ->IsSelected (VarManager::fgValues )) {
240+ if (fEventCut ->IsSelected (dqefficiency_helpers::varValues () )) {
228241 if (fConfigQA ) {
229- fHistMan ->FillHistClass (" Event_AfterCuts" , VarManager::fgValues );
242+ fHistMan ->FillHistClass (" Event_AfterCuts" , dqefficiency_helpers::varValues () );
230243 }
231244 decision = true ;
232245 }
233246 fSelMap [event.globalIndex ()] = decision;
234247 if (fMixHandler != nullptr ) {
235- int hh = fMixHandler ->FindEventCategory (VarManager::fgValues );
248+ int hh = fMixHandler ->FindEventCategory (dqefficiency_helpers::varValues () );
236249 hash (hh);
237250 }
238251 }
@@ -242,15 +255,15 @@ struct AnalysisEventSelection {
242255 VarManager::ResetValues (0 , VarManager::kNEventWiseVariables );
243256 VarManager::FillEventAlice3<VarManager::ObjTypes::ReducedEventMC>(event);
244257 if (fConfigQA ) {
245- fHistMan ->FillHistClass (" EventsMC" , VarManager::fgValues );
258+ fHistMan ->FillHistClass (" EventsMC" , dqefficiency_helpers::varValues () );
246259 }
247260 }
248261 }
249262
250263 void publishSelections (MyEventsVtxCov const & events)
251264 {
252265 // publish the table
253- uint32_t evSel = static_cast <uint32_t >(0 );
266+ auto evSel = static_cast <uint32_t >(0 );
254267 for (const auto & event : events) {
255268 evSel = 0 ;
256269 if (fSelMap [event.globalIndex ()]) { // event passed the user cuts
@@ -292,7 +305,7 @@ struct AnalysisTrackSelection {
292305 Configurable<std::string> fConfigMCSignals {" cfgTrackMCSignals" , " " , " Comma separated list of MC signals" };
293306 Configurable<std::string> fConfigMCSignalsJSON {" cfgTrackMCsignalsJSON" , " " , " Additional list of MC signals via JSON" };
294307
295- HistogramManager* fHistMan ;
308+ HistogramManager* fHistMan = nullptr ;
296309 std::vector<AnalysisCompositeCut*> fTrackCuts ;
297310 std::vector<MCSignal*> fMCSignals ; // list of signals to be checked
298311 std::vector<TString> fHistNamesReco ;
@@ -320,7 +333,7 @@ struct AnalysisTrackSelection {
320333 if (addTrackCutsStr != " " ) {
321334 std::vector<AnalysisCut*> addTrackCuts = dqcuts::GetCutsFromJSON (addTrackCutsStr.Data ());
322335 for (const auto & t : addTrackCuts) {
323- fTrackCuts .push_back (reinterpret_cast <AnalysisCompositeCut*>(t));
336+ fTrackCuts .push_back (static_cast <AnalysisCompositeCut*>(t));
324337 }
325338 }
326339 VarManager::SetUseVars (AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill
@@ -352,7 +365,7 @@ struct AnalysisTrackSelection {
352365 if (fConfigQA ) {
353366 fHistMan = new HistogramManager (" analysisHistos" , " aa" , VarManager::kNVars );
354367 fHistMan ->SetUseDefaultVariableNames (true );
355- fHistMan ->SetDefaultVarNames (VarManager::fgVariableNames, VarManager::fgVariableUnits );
368+ fHistMan ->SetDefaultVarNames (dqefficiency_helpers::varNames (), dqefficiency_helpers::varUnits () );
356369
357370 // Configure histogram classes for each track cut;
358371 // Add histogram classes for each track cut and for each requested MC signal (reconstructed tracks with MC truth)
@@ -421,16 +434,16 @@ struct AnalysisTrackSelection {
421434 }
422435
423436 if (fConfigQA ) {
424- fHistMan ->FillHistClass (" AssocsBarrel_BeforeCuts" , VarManager::fgValues );
437+ fHistMan ->FillHistClass (" AssocsBarrel_BeforeCuts" , dqefficiency_helpers::varValues () );
425438 }
426439
427440 int iCut = 0 ;
428- uint32_t filterMap = static_cast <uint32_t >(0 );
441+ auto filterMap = static_cast <uint32_t >(0 );
429442 for (auto cut = fTrackCuts .begin (); cut != fTrackCuts .end (); cut++, iCut++) {
430- if ((*cut)->IsSelected (VarManager::fgValues )) {
443+ if ((*cut)->IsSelected (dqefficiency_helpers::varValues () )) {
431444 filterMap |= (static_cast <uint32_t >(1 ) << iCut);
432445 if (fConfigQA ) {
433- fHistMan ->FillHistClass (fHistNamesReco [iCut], VarManager::fgValues );
446+ fHistMan ->FillHistClass (fHistNamesReco [iCut], dqefficiency_helpers::varValues () );
434447 }
435448 }
436449 } // end loop over cuts
@@ -448,9 +461,9 @@ struct AnalysisTrackSelection {
448461 for (unsigned int icut = 0 ; icut < fTrackCuts .size (); icut++) {
449462 if (filterMap & (static_cast <uint32_t >(1 ) << icut)) {
450463 if (isCorrectAssoc) {
451- fHistMan ->FillHistClass (fHistNamesMCMatched [icut * 2 * fMCSignals .size () + 2 * isig].Data (), VarManager::fgValues );
464+ fHistMan ->FillHistClass (fHistNamesMCMatched [icut * 2 * fMCSignals .size () + 2 * isig].Data (), dqefficiency_helpers::varValues () );
452465 } else {
453- fHistMan ->FillHistClass (fHistNamesMCMatched [icut * 2 * fMCSignals .size () + 2 * isig + 1 ].Data (), VarManager::fgValues );
466+ fHistMan ->FillHistClass (fHistNamesMCMatched [icut * 2 * fMCSignals .size () + 2 * isig + 1 ].Data (), dqefficiency_helpers::varValues () );
454467 }
455468 }
456469 } // end loop over cuts
@@ -494,7 +507,7 @@ struct AnalysisTrackSelection {
494507 VarManager::ResetValues (0 , VarManager::kNBarrelTrackVariables );
495508 VarManager::FillTrackAlice3<gkTrackFillMapWithCov>(track);
496509 VarManager::fgValues[VarManager::kBarrelNAssocsInBunch ] = static_cast <float >(evIndices.size ());
497- fHistMan ->FillHistClass (" TrackBarrel_AmbiguityInBunch" , VarManager::fgValues );
510+ fHistMan ->FillHistClass (" TrackBarrel_AmbiguityInBunch" , dqefficiency_helpers::varValues () );
498511 } // end loop over in-bunch ambiguous tracks
499512
500513 for (const auto & [trackIdx, evIndices] : fNAssocsOutOfBunch ) {
@@ -505,7 +518,7 @@ struct AnalysisTrackSelection {
505518 VarManager::ResetValues (0 , VarManager::kNBarrelTrackVariables );
506519 VarManager::FillTrackAlice3<gkTrackFillMapWithCov>(track);
507520 VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch ] = static_cast <float >(evIndices.size ());
508- fHistMan ->FillHistClass (" TrackBarrel_AmbiguityOutOfBunch" , VarManager::fgValues );
521+ fHistMan ->FillHistClass (" TrackBarrel_AmbiguityOutOfBunch" , dqefficiency_helpers::varValues () );
509522 } // end loop over out-of-bunch ambiguous tracks
510523 }
511524
@@ -549,9 +562,9 @@ struct AnalysisPrefilterSelection {
549562 Configurable<bool > fPropTrack {" cfgPropTrack" , false , " Propgate tracks to associated collision to recalculate DCA and momentum vector" };
550563
551564 std::map<uint32_t , uint32_t > fPrefilterMap ;
552- AnalysisCompositeCut* fPairCut ;
553- uint32_t fPrefilterMask ;
554- int fPrefilterCutBit ;
565+ AnalysisCompositeCut* fPairCut = nullptr ;
566+ uint32_t fPrefilterMask = 0 ;
567+ int fPrefilterCutBit = - 1 ;
555568
556569 PresliceUnsorted<aod::ReducedA3TracksAssoc> trackAssocsPerCollision = aod::reducedA3track_association::reducedA3eventId;
557570
@@ -655,7 +668,7 @@ struct AnalysisPrefilterSelection {
655668 bool track1Loose = assoc1.isBarrelSelected_bit (fPrefilterCutBit );
656669 bool track2Loose = assoc2.isBarrelSelected_bit (fPrefilterCutBit );
657670
658- if (!(( track1Candidate > 0 && track2Loose) || (track2Candidate > 0 && track1Loose) )) {
671+ if (( track1Candidate == 0 || ! track2Loose) && (track2Candidate == 0 || ! track1Loose)) {
659672 continue ;
660673 }
661674
@@ -665,7 +678,7 @@ struct AnalysisPrefilterSelection {
665678 VarManager::FillPairCollision<VarManager::kDecayToEE , gkTrackFillMap>(event, track1, track2);
666679 }
667680 // if the pair fullfils the criteria, add an entry into the prefilter map for the two tracks
668- if (fPairCut ->IsSelected (VarManager::fgValues )) {
681+ if (fPairCut ->IsSelected (dqefficiency_helpers::varValues () )) {
669682 if (fPrefilterMap .find (track1.globalIndex ()) == fPrefilterMap .end () && track1Candidate > 0 ) {
670683 fPrefilterMap [track1.globalIndex ()] = track1Candidate;
671684 }
@@ -765,7 +778,7 @@ struct AnalysisSameEventPairing {
765778 // Filter filterEventSelected = aod::dqanalysisflags::isEventSelected & uint32_t(1);
766779 Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast <uint32_t >(0 );
767780
768- HistogramManager* fHistMan ;
781+ HistogramManager* fHistMan = nullptr ;
769782
770783 // keep histogram class names in maps, so we don't have to buld their names in the pair loops
771784 std::map<int , std::vector<TString>> fTrackHistNames ;
@@ -777,12 +790,12 @@ struct AnalysisSameEventPairing {
777790 AnalysisCompositeCut fMCGenAccCut ;
778791 bool fUseMCGenAccCut = false ;
779792
780- uint32_t fTrackFilterMask ; // mask for the track cuts required in this task to be applied on the barrel cuts produced upstream
781- int fNCutsBarrel ;
782- int fNPairCuts ;
793+ uint32_t fTrackFilterMask = 0 ; // mask for the track cuts required in this task to be applied on the barrel cuts produced upstream
794+ int fNCutsBarrel = 0 ;
795+ int fNPairCuts = 0 ;
783796 bool fHasTwoProngGenMCsignals = false ;
784797
785- bool fEnableBarrelHistos ;
798+ bool fEnableBarrelHistos = false ;
786799
787800 PresliceUnsorted<MyBarrelAssocsPrefilter> trackAssocsPerCollision = aod::reducedA3track_association::reducedA3eventId;
788801
@@ -980,7 +993,7 @@ struct AnalysisSameEventPairing {
980993
981994 fHistMan = new HistogramManager (" analysisHistos" , " aa" , VarManager::kNVars );
982995 fHistMan ->SetUseDefaultVariableNames (true );
983- fHistMan ->SetDefaultVarNames (VarManager::fgVariableNames, VarManager::fgVariableUnits );
996+ fHistMan ->SetDefaultVarNames (dqefficiency_helpers::varNames (), dqefficiency_helpers::varUnits () );
984997
985998 VarManager::SetCollisionSystem ((TString)fConfigOptions .collisionSystem , fConfigOptions .centerMassEnergy ); // set collision system and center of mass energy
986999
@@ -1003,10 +1016,10 @@ struct AnalysisSameEventPairing {
10031016 std::map<int , std::vector<TString>> histNamesMC = fBarrelHistNamesMCmatched ;
10041017 int ncuts = fNCutsBarrel ;
10051018
1006- uint32_t twoTrackFilter = static_cast <uint32_t >(0 );
1019+ auto twoTrackFilter = static_cast <uint32_t >(0 );
10071020 int sign1 = 0 ;
10081021 int sign2 = 0 ;
1009- uint32_t mcDecision = static_cast <uint32_t >(0 );
1022+ auto mcDecision = static_cast <uint32_t >(0 );
10101023 bool isCorrectAssoc_leg1 = false ;
10111024 bool isCorrectAssoc_leg2 = false ;
10121025
@@ -1201,8 +1214,6 @@ struct AnalysisSameEventPairing {
12011214
12021215 void runMCGenWithGrouping (MyEventsVtxCovSelected const & events, ReducedA3MCEvents const & /* mcEvents*/ , ReducedA3MCTracks const & mcTracks)
12031216 {
1204- int isig = 0 ;
1205-
12061217 for (const auto & mctrack : mcTracks) {
12071218 VarManager::FillTrackMC (mcTracks, mctrack);
12081219 // if we have a mc generated acceptance cut, apply it here
@@ -1241,13 +1252,11 @@ struct AnalysisSameEventPairing {
12411252 }
12421253 }
12431254 auto track_raw = mcTracks.rawIteratorAt (track.globalIndex ());
1244- isig = 0 ;
12451255 for (const auto & sig : fGenMCSignals ) {
12461256 if (sig->CheckSignal (true , track_raw)) {
12471257 fHistMan ->FillHistClass (Form (" MCTruthGenSel_%s" , sig->GetName ()), VarManager::fgValues);
12481258 MCTruthTableEffi (VarManager::fgValues[VarManager::kMCPt ], VarManager::fgValues[VarManager::kMCEta ], VarManager::fgValues[VarManager::kMCY ], VarManager::fgValues[VarManager::kMCPhi ], VarManager::fgValues[VarManager::kMCVz ], VarManager::fgValues[VarManager::kMCVtxZ ], VarManager::fgValues[VarManager::kMultFT0A ], VarManager::fgValues[VarManager::kMultFT0C ], VarManager::fgValues[VarManager::kCentFT0M ], VarManager::fgValues[VarManager::kVtxNcontribReal ]);
12491259 }
1250- isig++;
12511260 }
12521261 }
12531262 } // end loop over reconstructed events
@@ -1289,7 +1298,6 @@ struct AnalysisSameEventPairing {
12891298 auto t1_raw = mcTracks.rawIteratorAt (t1.globalIndex ());
12901299 auto t2_raw = mcTracks.rawIteratorAt (t2.globalIndex ());
12911300 if (t1_raw.reducedA3MCEventId () == t2_raw.reducedA3MCEventId ()) {
1292- isig = 0 ;
12931301 for (const auto & sig : fGenMCSignals ) {
12941302 if (sig->GetNProngs () != TWO_PRONG ) { // NOTE: 2-prong signals required here
12951303 continue ;
@@ -1303,7 +1311,6 @@ struct AnalysisSameEventPairing {
13031311 }
13041312 fHistMan ->FillHistClass (Form (" MCTruthGenPairSel_%s" , sig->GetName ()), VarManager::fgValues);
13051313 }
1306- isig++;
13071314 }
13081315 }
13091316 }
@@ -1531,7 +1538,7 @@ struct AnalysisAsymmetricPairing {
15311538 Configurable<std::string> fConfigMCRecSignalsJSON {" cfgMCRecSignalsJSON" , " " , " Additional list of MC signals (reconstructed) via JSON" };
15321539 Configurable<std::string> fConfigMCGenSignalsJSON {" cfgMCGenSignalsJSON" , " " , " Comma separated list of MC signals (generated) via JSON" };
15331540
1534- HistogramManager* fHistMan ;
1541+ HistogramManager* fHistMan = nullptr ;
15351542
15361543 std::vector<AnalysisCompositeCut*> fPairCuts ;
15371544 int fNPairHistPrefixes ;
@@ -1540,9 +1547,9 @@ struct AnalysisAsymmetricPairing {
15401547 std::vector<MCSignal*> fGenMCSignals ;
15411548
15421549 // Filter masks to find legs in BarrelTrackCuts table
1543- uint32_t fLegAFilterMask ;
1544- uint32_t fLegBFilterMask ;
1545- uint32_t fLegCFilterMask ;
1550+ uint32_t fLegAFilterMask = 0 ;
1551+ uint32_t fLegBFilterMask = 0 ;
1552+ uint32_t fLegCFilterMask = 0 ;
15461553 // Maps tracking which combination of leg cuts the track cuts participate in
15471554 std::map<int , uint32_t > fConstructedLegAFilterMasksMap ;
15481555 std::map<int , uint32_t > fConstructedLegBFilterMasksMap ;
@@ -1552,9 +1559,9 @@ struct AnalysisAsymmetricPairing {
15521559 // Map tracking which common track cut the track cuts correspond to
15531560 std::map<int , uint32_t > fCommonTrackCutFilterMasks ;
15541561
1555- int fNLegCuts ;
1562+ int fNLegCuts = 0 ;
15561563 int fNPairCuts = 0 ;
1557- int fNCommonTrackCuts ;
1564+ int fNCommonTrackCuts = 0 ;
15581565 // vectors for cut names and signal names, for easy access when calling FillHistogramList()
15591566 std::vector<TString> fLegCutNames ;
15601567 std::vector<TString> fPairCutNames ;
@@ -1999,13 +2006,13 @@ struct AnalysisAsymmetricPairing {
19992006 }
20002007
20012008 // run MC matching for this pair
2002- int isig = 0 ;
2009+ int iSigMc = 0 ;
20032010 mcDecision = 0 ;
2004- for (auto sig = fRecMCSignals .begin (); sig != fRecMCSignals .end (); sig++, isig ++) {
2011+ for (auto sig = fRecMCSignals .begin (); sig != fRecMCSignals .end (); sig++, iSigMc ++) {
20052012 if (t1.has_reducedA3MCTrack () && t2.has_reducedA3MCTrack ()) {
20062013 VarManager::FillPairMC<VarManager::kDecayToKPi >(t1.reducedA3MCTrack (), t2.reducedA3MCTrack ());
20072014 if ((*sig)->CheckSignal (true , t1.reducedA3MCTrack (), t2.reducedA3MCTrack ())) {
2008- mcDecision |= static_cast <uint32_t >(1 ) << isig ;
2015+ mcDecision |= static_cast <uint32_t >(1 ) << iSigMc ;
20092016 }
20102017 }
20112018 } // end loop over MC signals
@@ -2268,12 +2275,12 @@ struct AnalysisAsymmetricPairing {
22682275 }
22692276
22702277 // run MC matching for this triplet
2271- int isig = 0 ;
2278+ int iSigMc = 0 ;
22722279 mcDecision = 0 ;
2273- for (auto sig = fRecMCSignals .begin (); sig != fRecMCSignals .end (); sig++, isig ++) {
2280+ for (auto sig = fRecMCSignals .begin (); sig != fRecMCSignals .end (); sig++, iSigMc ++) {
22742281 if (t1.has_reducedA3MCTrack () && t2.has_reducedA3MCTrack () && t3.has_reducedA3MCTrack ()) {
22752282 if ((*sig)->CheckSignal (true , t1.reducedA3MCTrack (), t2.reducedA3MCTrack (), t3.reducedA3MCTrack ())) {
2276- mcDecision |= (static_cast <uint32_t >(1 ) << isig );
2283+ mcDecision |= (static_cast <uint32_t >(1 ) << iSigMc );
22772284 }
22782285 }
22792286 } // end loop over MC signals
0 commit comments