@@ -188,8 +188,17 @@ class VarManager : public TObject
188188 kRunNo = 0 ,
189189 kNRunWiseVariables ,
190190
191+ // Timeframe wise variables
192+ kTFNBCs = kNRunWiseVariables ,
193+ kTFNCollisions ,
194+ kTFNMCCollisions ,
195+ kTFNTracks ,
196+ kTFNMuons ,
197+ kTFNMFTs ,
198+ kNTFWiseVariables ,
199+
191200 // Event wise variables
192- kTimestamp ,
201+ kTimestamp = kNTFWiseVariables ,
193202 kTimeFromSOR , // Time since Start of Run (SOR) in minutes
194203 kCollisionTime ,
195204 kCollisionTimeRes ,
@@ -442,7 +451,6 @@ class VarManager : public TObject
442451 kTwoR2SP2 , // Scalar product resolution of event2 for ME technique
443452 kTwoR2EP1 , // Event plane resolution of event2 for ME technique
444453 kTwoR2EP2 , // Event plane resolution of event2 for ME technique
445- kNEventWiseVariables ,
446454
447455 // Variables for event mixing with cumulant
448456 kV22m ,
@@ -453,9 +461,10 @@ class VarManager : public TObject
453461 kV24ME ,
454462 kWV22ME ,
455463 kWV24ME ,
464+ kNEventWiseVariables ,
456465
457466 // Basic track/muon/pair wise variables
458- kX ,
467+ kX = kNEventWiseVariables ,
459468 kY ,
460469 kZ ,
461470 kPt ,
@@ -571,7 +580,7 @@ class VarManager : public TObject
571580 kNBarrelTrackVariables ,
572581
573582 // Muon track variables
574- kMuonNClusters ,
583+ kMuonNClusters = kNBarrelTrackVariables ,
575584 kMuonPDca ,
576585 kMuonRAtAbsorberEnd ,
577586 kMCHBitMap ,
@@ -1163,8 +1172,8 @@ class VarManager : public TObject
11631172 static void FillBC (T const & bc, float * values = nullptr );
11641173 template <uint32_t fillMap, typename T>
11651174 static void FillEvent (T const & event, float * values = nullptr );
1166- template <uint32_t fillMap, typename TEvent, typename TAssoc, typename TTracks >
1167- static void FillEventTrackEstimators (TEvent const & collision, TAssoc const & groupedTrackIndices, TTracks const & tracks , float * values = nullptr );
1175+ template <typename T >
1176+ static void FillTimeFrame (T const & tfTable , float * values = nullptr );
11681177 template <typename T>
11691178 static void FillEventFlowResoFactor (T const & hs_sp, T const & hs_ep, float * values = nullptr );
11701179 template <typename T>
@@ -1364,7 +1373,7 @@ class VarManager : public TObject
13641373 VarManager& operator =(const VarManager& c);
13651374 VarManager (const VarManager& c);
13661375
1367- ClassDef (VarManager, 4 );
1376+ ClassDef (VarManager, 5 );
13681377};
13691378
13701379template <typename T, typename C>
@@ -1633,6 +1642,32 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack,
16331642 }
16341643}
16351644
1645+ template <typename T>
1646+ void VarManager::FillTimeFrame (T const & tf, float * values)
1647+ {
1648+ if (!values) {
1649+ values = fgValues;
1650+ }
1651+ if constexpr (T::template contains<o2::aod::BCs>()) {
1652+ values[kTFNBCs ] = tf.size ();
1653+ }
1654+ if constexpr (T::template contains<o2::aod::Collisions>()) {
1655+ values[kTFNCollisions ] = tf.size ();
1656+ }
1657+ if constexpr (T::template contains<o2::aod::McCollisions>()) {
1658+ values[kTFNMCCollisions ] = tf.size ();
1659+ }
1660+ if constexpr (T::template contains<o2::aod::Tracks>()) {
1661+ values[kTFNTracks ] = tf.size ();
1662+ }
1663+ if constexpr (T::template contains<o2::aod::FwdTracks>()) {
1664+ values[kTFNMuons ] = tf.size ();
1665+ }
1666+ if constexpr (T::template contains<o2::aod::MFTTracks>()) {
1667+ values[kTFNMFTs ] = tf.size ();
1668+ }
1669+ }
1670+
16361671template <typename T>
16371672void VarManager::FillBC (T const & bc, float * values)
16381673{
@@ -2138,56 +2173,6 @@ void VarManager::FillEvent(T const& event, float* values)
21382173 // FillEventDerived(values);
21392174}
21402175
2141- template <uint32_t fillMap, typename TEvent, typename TAssoc, typename TTracks>
2142- void VarManager::FillEventTrackEstimators (TEvent const & collision, TAssoc const & assocs, TTracks const & /* tracks*/ , float * values)
2143- {
2144- // Compute median Z for the large dcaZ tracks in the TPC
2145- // This is for studies of the pileup impact on the TPC
2146-
2147- if (!values) {
2148- values = fgValues;
2149- }
2150-
2151- if constexpr ((fillMap & Track) > 0 && (fillMap & TrackDCA) > 0 ) {
2152-
2153- std::vector<float > tracksP;
2154- std::vector<float > tracksM;
2155-
2156- for (const auto & assoc : assocs) {
2157- auto track = assoc.template track_as <TTracks>();
2158- // compute the dca of this track wrt the collision
2159- auto trackPar = getTrackPar (track);
2160- std::array<float , 2 > dca{1e10f, 1e10f};
2161- trackPar.propagateParamToDCA ({collision.posX (), collision.posY (), collision.posZ ()}, fgMagField, &dca);
2162-
2163- // if it is a displaced track longitudinally, add it to the track vector
2164- if (abs (dca[0 ]) < 3.0 && abs (dca[1 ]) > 4.0 ) {
2165- if (track.tgl () > 0.1 ) {
2166- tracksP.push_back (track.z ());
2167- }
2168- if (track.tgl () < -0.1 ) {
2169- tracksM.push_back (track.z ());
2170- }
2171- }
2172- } // end loop over associations
2173-
2174- // compute the number of pileup contributors and the median z for pileup
2175- if (tracksP.size () > 0 ) {
2176- std::sort (tracksP.begin (), tracksP.end ());
2177- auto midP = tracksP.size () / 2 ;
2178- values[kNTPCpileupContribA ] = tracksP.size ();
2179- values[kNTPCpileupZA ] = (tracksP.size () % 2 ? (tracksP[midP] + tracksP[midP - 1 ]) / 2 : tracksP[midP]);
2180- }
2181-
2182- if (tracksM.size () > 0 ) {
2183- std::sort (tracksM.begin (), tracksM.end ());
2184- values[kNTPCpileupContribC ] = tracksM.size ();
2185- auto midM = tracksM.size () / 2 ;
2186- values[kNTPCpileupZC ] = (tracksM.size () % 2 ? (tracksM[midM] + tracksM[midM - 1 ]) / 2 : tracksM[midM]);
2187- }
2188- }
2189- }
2190-
21912176template <typename T>
21922177void VarManager::FillEventFlowResoFactor (T const & hs_sp, T const & hs_ep, float * values)
21932178{
@@ -2280,25 +2265,17 @@ void VarManager::FillTwoEvents(T const& ev1, T const& ev2, float* values)
22802265 if (!values) {
22812266 values = fgValues;
22822267 }
2283-
2268+ // if constexpr (T::template contains<o2::aod::Collision>()) {
22842269 values[kTwoEvPosZ1 ] = ev1.posZ ();
22852270 values[kTwoEvPosZ2 ] = ev2.posZ ();
22862271 values[kTwoEvPosR1 ] = std::sqrt (ev1.posX () * ev1.posX () + ev1.posY () * ev1.posY ());
2287- values[kTwoEvPosR2 ] = std::sqrt (ev2.posX () * ev2.posX () + ev2.posY () * ev2.posY ());
2288- values[kTwoEvPVcontrib1 ] = ev1.numContrib ();
2289- values[kTwoEvPVcontrib2 ] = ev2.numContrib ();
2290- if (ev1.numContrib () < ev2.numContrib ()) {
2291- values[kTwoEvPosZ1 ] = ev2.posZ ();
2292- values[kTwoEvPosZ2 ] = ev1.posZ ();
2293- values[kTwoEvPVcontrib1 ] = ev2.numContrib ();
2294- values[kTwoEvPVcontrib2 ] = ev1.numContrib ();
2295- values[kTwoEvPosR1 ] = std::sqrt (ev2.posX () * ev2.posX () + ev2.posY () * ev2.posY ());
2296- ;
2297- values[kTwoEvPosR2 ] = std::sqrt (ev1.posX () * ev1.posX () + ev1.posY () * ev1.posY ());
2298- }
2272+ values[kTwoEvPosR2 ] = std::sqrt (ev2.posX () * ev2.posX () + ev2.posY () * ev2.posY ());
22992273 values[kTwoEvDeltaZ ] = ev1.posZ () - ev2.posZ ();
23002274 values[kTwoEvDeltaX ] = ev1.posX () - ev2.posX ();
23012275 values[kTwoEvDeltaY ] = ev1.posY () - ev2.posY ();
2276+ // }
2277+ values[kTwoEvPVcontrib1 ] = ev1.numContrib ();
2278+ values[kTwoEvPVcontrib2 ] = ev2.numContrib ();
23022279 values[kTwoEvDeltaR ] = std::sqrt (values[kTwoEvDeltaX ] * values[kTwoEvDeltaX ] + values[kTwoEvDeltaY ] * values[kTwoEvDeltaY ]);
23032280}
23042281
0 commit comments