diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 4521c911eb0..a22e0594d23 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include @@ -1512,7 +1511,7 @@ class VarManager : public TObject template static void FillQuadMC(T1 const& dilepton, T2 const& track1, T2 const& track2, float* values = nullptr); template - static void FillPairVertexing(C const& collision, T const& t1, T const& t2, bool propToSV = false, float* values = nullptr); + static void FillPairVertexing(C const& collision, T const& t1, T const& t2, float* values = nullptr); template static void FillPairVertexingRecomputePV(C const& /*collision*/, T const& t1, T const& t2, const o2::dataformats::VertexBase& pvRefitted, float* values = nullptr); template @@ -1871,7 +1870,7 @@ template void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedMuonCov) > 0) { @@ -1913,7 +1912,7 @@ template void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, const C& collision, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) { float xShift = 0.f; @@ -1948,7 +1947,7 @@ template (fgValues); } if constexpr ((MuonfillMap & MuonCov) > 0) { if constexpr ((MFTfillMap & MFTCov) > 0) { @@ -1982,7 +1981,7 @@ template void VarManager::FillTimeFrame(T const& tf, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr (T::template contains()) { values[kTFNBCs] = tf.size(); @@ -2008,7 +2007,7 @@ template void VarManager::FillBC(T const& bc, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } values[kRunNo] = bc.runNumber(); values[kBC] = bc.globalBC(); @@ -2021,7 +2020,7 @@ template void VarManager::FillEvent(T const& event, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((fillMap & CollisionTimestamp) > 0) { @@ -2688,7 +2687,7 @@ template void VarManager::FillEventTracks(T const& tracks, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } // compute event properties based on DCAz of the tracks @@ -2824,7 +2823,7 @@ template void VarManager::FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if (values[kCentFT0C] >= 0.) { @@ -2840,7 +2839,7 @@ template void VarManager::FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if (values[kTwoEvCentFT0C1] >= 0.) { @@ -2864,7 +2863,7 @@ template void VarManager::FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, T const& h_v22ev2, T const& h_v24ev2, T1 const& t1, T2 const& t2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } int idx_v22ev1 = 0; @@ -2910,7 +2909,7 @@ template void VarManager::FillTwoEvents(T const& ev1, T const& ev2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } // if constexpr (T::template contains()) { values[kTwoEvPosZ1] = ev1.posZ(); @@ -2930,7 +2929,7 @@ template void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& /*tracks1*/, T2 const& /*tracks2*/, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } values[kTwoEvPosZ1] = ev1.posZ(); values[kTwoEvPosZ2] = ev2.posZ(); @@ -2988,7 +2987,7 @@ template void VarManager::FillTrack(T const& track, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((fillMap & TrackMFT) > 0) { @@ -3423,7 +3422,7 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float* v { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedTrackBarrel) > 0 || (fillMap & TrackDCA) > 0) { auto trackPar = getTrackPar(track); @@ -3474,7 +3473,7 @@ template void VarManager::FillTrackCollisionMatCorr(T const& track, C const& collision, M const& materialCorr, P const& propagator, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedTrackBarrel) > 0 || (fillMap & TrackDCA) > 0) { auto trackPar = getTrackPar(track); @@ -3502,7 +3501,7 @@ template void VarManager::FillPhoton(T const& track, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } // Quantities based on the basic table (contains just kine information and filter bits) @@ -3538,7 +3537,7 @@ void VarManager::FillTrackEMCal(T const& cluster, float trackP, float deltaEta, // trackP: momentum of the matched track, used to compute E/p when called in a track-cluster matching context; // the default (negative) value leaves E/p at the -999 sentinel, as for tracks without a matched cluster. if (!values) { - values = fgValues; + values = static_cast(fgValues); } values[kEMCalEnergy] = cluster.energy(); @@ -3563,7 +3562,7 @@ template void VarManager::FillTrackMC(const U& mcStack, T const& track, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } // Quantities based on the mc particle table @@ -3597,7 +3596,7 @@ void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C { if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m = o2::constants::physics::MassBPlus; @@ -3651,7 +3650,7 @@ void VarManager::FillTrackCollisionMC(T1 const& track, const std::array(fgValues); } float m = o2::constants::physics::MassJPsi; @@ -3747,7 +3746,7 @@ template void VarManager::FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, const C& collision, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } o2::dataformats::GlobalFwdTrack propmuon1 = PropagateMuon(muon1, collision); o2::dataformats::GlobalFwdTrack propmuon2 = PropagateMuon(muon2, collision); @@ -3772,7 +3771,7 @@ template void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4047,7 +4046,7 @@ template void VarManager::FillPairRotation(T1 const& t1, T2 const& t2, int rotation, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4114,7 +4113,7 @@ template void VarManager::FillPairCollision(const C& collision, T1 const& t1, T2 const& t2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((pairType == kDecayToEE) && ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0)) { @@ -4166,7 +4165,7 @@ template (fgValues); } if constexpr ((pairType == kDecayToEE) && ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0)) { @@ -4225,7 +4224,7 @@ void VarManager::FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, float* val { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if (pairType == kTripleCandidateToEEPhoton) { float m1 = o2::constants::physics::MassElectron; @@ -4299,7 +4298,7 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) // Lightweight fill function called from the innermost event mixing loop // if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4551,7 +4550,7 @@ template void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4621,7 +4620,7 @@ template void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4796,7 +4795,7 @@ template void VarManager::FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr (candidateType == kTripleCandidateToEEPhoton) { @@ -4878,7 +4877,7 @@ void VarManager::FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, float* v } template -void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, bool propToSV, float* values) +void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, float* values) { // check at compile time that the event and cov matrix have the cov matrix constexpr bool eventHasVtxCov = ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); @@ -4886,7 +4885,7 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, constexpr bool muonHasCov = ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -4894,7 +4893,7 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, m1 = o2::constants::physics::MassKaonCharged; m2 = o2::constants::physics::MassPionCharged; } - if constexpr (pairType == kDecayToMuMu && muonHasCov) { + if constexpr (pairType == kDecayToMuMu) { m1 = o2::constants::physics::MassMuon; m2 = o2::constants::physics::MassMuon; } @@ -4959,22 +4958,16 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, std::array covMatrixPCA{}; // get track impact parameters // This modifies track momenta! - o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); - std::array vtxCov{collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()}; - o2::dataformats::VertexBase primaryVertex = {vtxXYZ, vtxCov}; // auto primaryVertex = getPrimaryVertex(collision); - auto covMatrixPV = primaryVertex.getCov(); + std::array covMatrixPV{collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()}; if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) { secondaryVertex = fgFitterTwoProngBarrel.getPCACandidate(); // printf("secVtx (first) %f %f %f \n",secondaryVertex[0],secondaryVertex[1],secondaryVertex[2]); covMatrixPCA = fgFitterTwoProngBarrel.calcPCACovMatrixFlat(); - auto chi2PCA = fgFitterTwoProngBarrel.getChi2AtPCACandidate(); - auto trackParVar0 = fgFitterTwoProngBarrel.getTrack(0); - auto trackParVar1 = fgFitterTwoProngBarrel.getTrack(1); - values[kVertexingChi2PCA] = chi2PCA; - v1 = {trackParVar0.getPt(), trackParVar0.getEta(), trackParVar0.getPhi(), m1}; - v2 = {trackParVar1.getPt(), trackParVar1.getEta(), trackParVar1.getPhi(), m2}; + values[kVertexingChi2PCA] = fgFitterTwoProngBarrel.getChi2AtPCACandidate(); + v1 = {fgFitterTwoProngBarrel.getTrack(0).getPt(), fgFitterTwoProngBarrel.getTrack(0).getEta(), fgFitterTwoProngBarrel.getTrack(0).getPhi(), m1}; + v2 = {fgFitterTwoProngBarrel.getTrack(1).getPt(), fgFitterTwoProngBarrel.getTrack(1).getEta(), fgFitterTwoProngBarrel.getTrack(1).getPhi(), m2}; v12 = v1 + v2; if (fgPVrecalKF) { primaryVertexNew = RecalculatePrimaryVertex(t1, t2, collision); @@ -4984,40 +4977,29 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, // Get pca candidate from forward DCA fitter secondaryVertex = fgFitterTwoProngFwd.getPCACandidate(); covMatrixPCA = fgFitterTwoProngFwd.calcPCACovMatrixFlat(); - auto chi2PCA = fgFitterTwoProngFwd.getChi2AtPCACandidate(); - auto trackParVar0 = fgFitterTwoProngFwd.getTrack(0); - auto trackParVar1 = fgFitterTwoProngFwd.getTrack(1); - values[kVertexingChi2PCA] = chi2PCA; - v1 = {trackParVar0.getPt(), trackParVar0.getEta(), trackParVar0.getPhi(), m1}; - v2 = {trackParVar1.getPt(), trackParVar1.getEta(), trackParVar1.getPhi(), m2}; + values[kVertexingChi2PCA] = fgFitterTwoProngFwd.getChi2AtPCACandidate(); + v1 = {fgFitterTwoProngFwd.getTrack(0).getPt(), fgFitterTwoProngFwd.getTrack(0).getEta(), fgFitterTwoProngFwd.getTrack(0).getPhi(), m1}; + v2 = {fgFitterTwoProngFwd.getTrack(1).getPt(), fgFitterTwoProngFwd.getTrack(1).getEta(), fgFitterTwoProngFwd.getTrack(1).getPhi(), m2}; v12 = v1 + v2; - - values[kPt1] = trackParVar0.getPt(); - values[kEta1] = trackParVar0.getEta(); - values[kPhi1] = trackParVar0.getPhi(); - - values[kPt2] = trackParVar1.getPt(); - values[kEta2] = trackParVar1.getEta(); - values[kPhi2] = trackParVar1.getPhi(); } - double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); - double theta = std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * (secondaryVertex[1] - collision.posY()))); + const double dx = secondaryVertex[0] - collision.posX(); + const double dy = secondaryVertex[1] - collision.posY(); + const double dz = secondaryVertex[2] - collision.posZ(); + double phi = std::atan2(dy, dx); + double theta = std::atan2(dz, std::sqrt(dx * dx + dy * dy)); values[kVertexingLxyzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); - values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * (collision.posX() - secondaryVertex[0]) + - (collision.posY() - secondaryVertex[1]) * (collision.posY() - secondaryVertex[1]); - values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); + values[kVertexingLxy] = dx * dx + dy * dy; + values[kVertexingLz] = dz * dz; values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; values[kVertexingLxy] = std::sqrt(values[kVertexingLxy]); values[kVertexingLz] = std::sqrt(values[kVertexingLz]); values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); - values[kVertexingTauz] = (collision.posZ() - secondaryVertex[2]) * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauz] = -dz * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = values[kVertexingLxy] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v12.Pz()); @@ -5026,63 +5008,43 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, values[kVertexingTauzErr] = values[kVertexingLzErr] * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); - values[kCosPointingAngle] = ((secondaryVertex[0] - collision.posX()) * v12.Px() + - (secondaryVertex[1] - collision.posY()) * v12.Py() + - (secondaryVertex[2] - collision.posZ()) * v12.Pz()) / + values[kCosPointingAngle] = (dx * v12.Px() + dy * v12.Py() + dz * v12.Pz()) / (v12.P() * values[VarManager::kVertexingLxyz]); // Decay length defined as in Run 2 - values[kVertexingLzProjected] = ((secondaryVertex[2] - collision.posZ()) * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); - values[kVertexingLxyProjected] = ((secondaryVertex[0] - collision.posX()) * v12.Px()) + ((secondaryVertex[1] - collision.posY()) * v12.Py()); + values[kVertexingLzProjected] = (dz * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); + values[kVertexingLxyProjected] = (dx * v12.Px()) + (dy * v12.Py()); values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); - values[kVertexingLxyzProjected] = ((secondaryVertex[0] - collision.posX()) * v12.Px()) + ((secondaryVertex[1] - collision.posY()) * v12.Py()) + ((secondaryVertex[2] - collision.posZ()) * v12.Pz()); + values[kVertexingLxyzProjected] = (dx * v12.Px()) + (dy * v12.Py()) + (dz * v12.Pz()); values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + (v12.Pz() * v12.Pz())); - if (fgPVrecalKF) { - values[kVertexingLxyProjectedRecalculatePV] = (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); - values[kVertexingLxyProjectedRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); - } values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); values[kVertexingTauxyProjectedPoleJPsiMass] = values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / (v12.Pt()); values[kVertexingTauxyProjectedNs] = values[kVertexingTauxyProjected] / o2::constants::physics::LightSpeedCm2NS; if (fgPVrecalKF) { + values[kVertexingLxyProjectedRecalculatePV] = (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); + values[kVertexingLxyProjectedRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] * o2::constants::physics::MassJPsi / (v12.Pt()); } values[kVertexingTauzProjected] = values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); values[kVertexingTauxyzProjected] = values[kVertexingLxyzProjected] * v12.M() / (v12.P()); } - } else { + } else if constexpr (((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) || ((pairType == kDecayToMuMu) && muonHasCov)) { KFParticle trk0KF; KFParticle trk1KF; KFParticle KFGeoTwoProng; - if constexpr ((pairType == kDecayToEE) && trackHasCov) { - KFPTrack kfpTrack0 = createKFPTrackFromTrack(t1); - trk0KF = KFParticle(kfpTrack0, -11 * t1.sign()); - KFPTrack kfpTrack1 = createKFPTrackFromTrack(t2); - trk1KF = KFParticle(kfpTrack1, -11 * t2.sign()); - - KFGeoTwoProng.SetConstructMethod(2); - KFGeoTwoProng.AddDaughter(trk0KF); - KFGeoTwoProng.AddDaughter(trk1KF); + if constexpr (pairType == kDecayToEE) { + trk0KF = KFParticle(createKFPTrackFromTrack(t1), -11 * t1.sign()); + trk1KF = KFParticle(createKFPTrackFromTrack(t2), -11 * t2.sign()); + } else if constexpr (pairType == kDecayToMuMu) { + trk0KF = KFParticle(createKFPFwdTrackFromFwdTrack(t1), -13 * t1.sign()); + trk1KF = KFParticle(createKFPFwdTrackFromFwdTrack(t2), -13 * t2.sign()); + } else if constexpr (pairType == kDecayToKPi) { + trk0KF = KFParticle(createKFPTrackFromTrack(t1), 321 * t1.sign()); + trk1KF = KFParticle(createKFPTrackFromTrack(t2), 211 * t2.sign()); + } + KFGeoTwoProng.SetConstructMethod(2); + KFGeoTwoProng.AddDaughter(trk0KF); + KFGeoTwoProng.AddDaughter(trk1KF); - } else if constexpr ((pairType == kDecayToMuMu) && muonHasCov) { - KFPTrack kfpTrack0 = createKFPFwdTrackFromFwdTrack(t1); - trk0KF = KFParticle(kfpTrack0, -13 * t1.sign()); - KFPTrack kfpTrack1 = createKFPFwdTrackFromFwdTrack(t2); - trk1KF = KFParticle(kfpTrack1, -13 * t2.sign()); - - KFGeoTwoProng.SetConstructMethod(2); - KFGeoTwoProng.AddDaughter(trk0KF); - KFGeoTwoProng.AddDaughter(trk1KF); - - } else if constexpr ((pairType == kDecayToKPi) && trackHasCov) { - KFPTrack kfpTrack0 = createKFPTrackFromTrack(t1); - trk0KF = KFParticle(kfpTrack0, 321 * t1.sign()); - KFPTrack kfpTrack1 = createKFPTrackFromTrack(t2); - trk1KF = KFParticle(kfpTrack1, 211 * t2.sign()); - - KFGeoTwoProng.SetConstructMethod(2); - KFGeoTwoProng.AddDaughter(trk0KF); - KFGeoTwoProng.AddDaughter(trk1KF); - } if (fgUsedVars[kKFMass]) { float mass = 0., massErr = 0.; if (!KFGeoTwoProng.GetMass(mass, massErr)) { @@ -5206,70 +5168,28 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, values[kKFMassGeoTop] = -999.; } } - if (propToSV) { - if constexpr ((pairType == kDecayToMuMu) && muonHasCov) { - o2::track::TrackParCovFwd pars1 = FwdToTrackPar(t1, t1); - o2::track::TrackParCovFwd pars2 = FwdToTrackPar(t2, t2); - - auto geoMan1 = o2::base::GeometryManager::meanMaterialBudget(t1.x(), t1.y(), t1.z(), KFGeoTwoProng.GetX(), KFGeoTwoProng.GetY(), KFGeoTwoProng.GetZ()); - auto geoMan2 = o2::base::GeometryManager::meanMaterialBudget(t2.x(), t2.y(), t2.z(), KFGeoTwoProng.GetX(), KFGeoTwoProng.GetY(), KFGeoTwoProng.GetZ()); - auto x2x01 = static_cast(geoMan1.meanX2X0); - auto x2x02 = static_cast(geoMan2.meanX2X0); - std::array B{}; - std::array xyz = {0.f, 0.f, 0.f}; - KFGeoTwoProng.GetFieldValue(xyz.data(), B.data()); - // TODO: find better soluton to handle cases where KF outputs negative variances - /*float covXX = 0.1; - float covYY = 0.1; - if (KFGeoTwoProng.GetCovariance(0, 0) > 0) { - covXX = KFGeoTwoProng.GetCovariance(0, 0); - } - if (KFGeoTwoProng.GetCovariance(1, 1) > 0) { - covYY = KFGeoTwoProng.GetCovariance(0, 0); - }*/ - pars1.propagateToVtxhelixWithMCS(KFGeoTwoProng.GetZ(), {KFGeoTwoProng.GetX(), KFGeoTwoProng.GetY()}, {KFGeoTwoProng.GetCovariance(0, 0), KFGeoTwoProng.GetCovariance(1, 1)}, B[2], x2x01); - pars2.propagateToVtxhelixWithMCS(KFGeoTwoProng.GetZ(), {KFGeoTwoProng.GetX(), KFGeoTwoProng.GetY()}, {KFGeoTwoProng.GetCovariance(0, 0), KFGeoTwoProng.GetCovariance(1, 1)}, B[2], x2x02); - v1 = {pars1.getPt(), pars1.getEta(), pars1.getPhi(), m1}; - v2 = {pars2.getPt(), pars2.getEta(), pars2.getPhi(), m2}; - v12 = v1 + v2; - values[kMass] = v12.M(); - values[kPt] = v12.Pt(); - values[kEta] = v12.Eta(); - values[kPhi] = v12.Phi(); - values[kRap] = -v12.Rapidity(); - values[kVertexingTauxy] = KFGeoTwoProng.GetPseudoProperDecayTime(KFPV, v12.M()) / (o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauz] = -1 * dzPair2PV * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauzErr] = values[kVertexingLzErr] * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingPz] = TMath::Abs(v12.Pz()); - values[kVertexingSV] = KFGeoTwoProng.GetZ(); - - values[kPt1] = pars1.getPt(); - values[kEta1] = pars1.getEta(); - values[kPhi1] = pars1.getPhi(); - - values[kPt2] = pars2.getPt(); - values[kEta2] = pars2.getEta(); - values[kPhi2] = pars2.getPhi(); - } - } - } - } - if (propToSV) { - values[kMass] = v12.M(); - values[kPt] = v12.Pt(); - values[kEta] = v12.Eta(); - // values[kPhi] = v12.Phi(); - values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); - } else { - values[kPt1] = t1.pt(); - values[kEta1] = t1.eta(); - values[kPhi1] = t1.phi(); - values[kPt2] = t2.pt(); - values[kEta2] = t2.eta(); - values[kPhi2] = t2.phi(); + float sv[3] = {KFGeoTwoProng.GetX(), KFGeoTwoProng.GetY(), KFGeoTwoProng.GetZ()}; + KFParticle trk0AtSV = trk0KF; + KFParticle trk1AtSV = trk1KF; + trk0AtSV.TransportToPoint(sv); + trk1AtSV.TransportToPoint(sv); + + v1 = {trk0AtSV.GetPt(), trk0AtSV.GetEta(), trk0AtSV.GetPhi(), m1}; + v2 = {trk1AtSV.GetPt(), trk1AtSV.GetEta(), trk1AtSV.GetPhi(), m2}; + v12 = v1 + v2; + } } + values[kMass] = v12.M(); + values[kPt] = v12.Pt(); + values[kEta] = v12.Eta(); + values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); + values[kPt1] = v1.Pt(); + values[kEta1] = v1.Eta(); + values[kPhi1] = v1.Phi(); + values[kPt2] = v2.Pt(); + values[kEta2] = v2.Eta(); + values[kPhi2] = v2.Phi(); } template @@ -5283,7 +5203,7 @@ void VarManager::FillPairVertexingRecomputePV(C const& /*collision*/, T const& t constexpr bool muonHasCov = ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -5344,7 +5264,7 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, T const& bool trackHasCov = ((fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassKaonCharged; @@ -5567,7 +5487,7 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton constexpr bool trackHasCov = ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); constexpr bool muonHasCov = ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = fgValues; + values = static_cast(fgValues); } float mtrack = o2::constants::physics::MassMuon; @@ -5831,7 +5751,7 @@ template void VarManager::FillQVectorFromGFW(C const& /*collision*/, A const& compA11, A const& compB11, A const& compC11, A const& compA21, A const& compB21, A const& compC21, A const& compA31, A const& compB31, A const& compC31, A const& compA41, A const& compB41, A const& compC41, A const& compA23, A const& compA42, float S10A, float S10B, float S10C, float S11A, float S11B, float S11C, float S12A, float S13A, float S14A, float S21A, float S22A, float S31A, float S41A, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } // Fill Qn vectors from generic flow framework for different eta gap A, B, C (n=1,2,3,4) with proper normalisation @@ -5936,7 +5856,7 @@ template void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } float xQVecFT0a = collision.qvecFT0ARe(); // already normalised @@ -6032,7 +5952,7 @@ template void VarManager::FillSpectatorPlane(C const& collision, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } auto zncEnergy = collision.energySectorZNC(); @@ -6140,7 +6060,7 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -6389,7 +6309,7 @@ template void VarManager::FillZDC(T const& zdc, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } values[kEnergyCommonZNA] = (zdc.energyCommonZNA() > 0) ? zdc.energyCommonZNA() : -1.; @@ -6406,7 +6326,7 @@ template void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* values, float hadronMass) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || fgUsedVars[kPairPhi] || fgUsedVars[kPairMassDau] || fgUsedVars[kPairPtDau] || fgUsedVars[kDileptonHadronKstar]) { @@ -6447,10 +6367,10 @@ template (fgValues); } if (fgUsedVars[kVertexingTauxyProjectedPoleJPsiMass] || fgUsedVars[kVertexingLxyProjected]) { - FillPairVertexing(collision, lepton1, lepton2, false, values); + FillPairVertexing(collision, lepton1, lepton2, values); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -6578,7 +6498,7 @@ template void VarManager::FillDileptonPhoton(T1 const& dilepton, T2 const& photon, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || fgUsedVars[kPairPhi]) { ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.mass()); @@ -6605,7 +6525,7 @@ template void VarManager::FillHadron(T const& hadron, float* values, float hadronMass) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } ROOT::Math::PtEtaPhiMVector vhadron(hadron.pt(), hadron.eta(), hadron.phi(), hadronMass); @@ -6620,7 +6540,7 @@ template void VarManager::FillSingleDileptonCharmHadron(Cand const& candidate, H hfHelper, T& bdtScoreCharmHad, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr (partType == kJPsi) { @@ -6663,7 +6583,7 @@ template void VarManager::FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, T3 const& hadron2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } double defaultDileptonMass = o2::constants::physics::MassJPsi; @@ -6725,7 +6645,7 @@ void VarManager::FillDileptonTrackTrackVertexing(C const& collision, T1 const& l } if (!values) { - values = fgValues; + values = static_cast(fgValues); } float mlepton1 = o2::constants::physics::MassElectron; @@ -6975,7 +6895,7 @@ template void VarManager::FillQuadMC(T1 const& dilepton, T2 const& track1, T2 const& track2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } double defaultDileptonMass = o2::constants::physics::MassJPsi; @@ -7126,7 +7046,7 @@ template void VarManager::FillBdtScore(T1 const& bdtScore, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if (bdtScore.size() == 1) { @@ -7167,7 +7087,7 @@ template void VarManager::FillFIT(T1 const& bc, T2 const& bcs, T3 const& ft0s, T4 const& fv0as, T5 const& fdds, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } // Initialize FIT info structure @@ -7227,7 +7147,7 @@ template void VarManager::FillEventAlice3(T const& event, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((fillMap & CollisionTimestamp) > 0) { values[kTimestamp] = event.timestamp(); @@ -7315,7 +7235,7 @@ template void VarManager::FillTrackAlice3(T const& track, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } if constexpr ((fillMap & Track) > 0 || (fillMap & ReducedTrack) > 0) { @@ -7468,7 +7388,7 @@ template void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -7679,7 +7599,7 @@ template void VarManager::FillResolutions(M const& mcTrack, T const& track, float* values) { if (!values) { - values = fgValues; + values = static_cast(fgValues); } values[kDeltaPt] = track.pt() - mcTrack.pt(); @@ -7696,7 +7616,7 @@ void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, T cons constexpr bool trackHasCov = ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -7853,7 +7773,7 @@ void VarManager::FillTripletVertexingALICE3(C const& collision, T const& t1, T c bool trackHasCov = ((fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = fgValues; + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassKaonCharged; diff --git a/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx b/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx index ad9fdc91f8d..d4c7f32de57 100644 --- a/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx +++ b/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx @@ -1427,6 +1427,8 @@ struct TableMakerMC { if constexpr (static_cast(TMFTFillMap & VarManager::ObjTypes::MFTCov)) { if (fConfigVariousOptions.fUseML.value) { skimBestMuonMatchesML(muons, mftTracks, mftCovs, collision); + } else { + skimBestMuonMatches(muons); } } else { skimBestMuonMatches(muons); diff --git a/PWGDQ/Tasks/dqEfficiency.cxx b/PWGDQ/Tasks/dqEfficiency.cxx index 32548b335d5..afcb0388c08 100644 --- a/PWGDQ/Tasks/dqEfficiency.cxx +++ b/PWGDQ/Tasks/dqEfficiency.cxx @@ -103,8 +103,8 @@ struct AnalysisEventSelection { Configurable fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - HistogramManager* fHistMan; - AnalysisCompositeCut* fEventCut; + HistogramManager* fHistMan = nullptr; + AnalysisCompositeCut* fEventCut = nullptr; void init(o2::framework::InitContext& context) { @@ -174,7 +174,7 @@ struct AnalysisTrackSelection { Configurable fConfigMCSignals{"cfgTrackMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; std::vector fTrackCuts; std::vector fMCSignals; // list of signals to be checked std::vector fHistNamesReco; @@ -305,13 +305,13 @@ struct AnalysisTrackSelection { } // fill histograms - for (unsigned int i = 0; i < fMCSignals.size(); i++) { - if (!(mcDecision & (static_cast(1) << i))) { + for (unsigned int iMC = 0; iMC < fMCSignals.size(); iMC++) { + if (!(mcDecision & (static_cast(1) << iMC))) { continue; } for (unsigned int j = 0; j < fTrackCuts.size(); j++) { if (filterMap & (uint8_t(1) << j)) { - fHistMan->FillHistClass(fHistNamesMCMatched[j][i].Data(), VarManager::fgValues); + fHistMan->FillHistClass(fHistNamesMCMatched[j][iMC].Data(), VarManager::fgValues); } } // end loop over cuts } // end loop over MC signals @@ -343,7 +343,7 @@ struct AnalysisMuonSelection { Configurable fConfigMCSignals{"cfgMuonMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; std::vector fTrackCuts; std::vector fMCSignals; // list of signals to be checked std::vector fHistNamesReco; @@ -478,13 +478,13 @@ struct AnalysisMuonSelection { } // fill histograms - for (unsigned int i = 0; i < fMCSignals.size(); i++) { - if (!(mcDecision & (static_cast(1) << i))) { + for (unsigned int iMC = 0; iMC < fMCSignals.size(); iMC++) { + if (!(mcDecision & (static_cast(1) << iMC))) { continue; } for (unsigned int j = 0; j < fTrackCuts.size(); j++) { if (filterMap & (uint8_t(1) << j)) { - fHistMan->FillHistClass(fHistNamesMCMatched[j][i].Data(), VarManager::fgValues); + fHistMan->FillHistClass(fHistNamesMCMatched[j][iMC].Data(), VarManager::fgValues); } } // end loop over cuts } // end loop over MC signals @@ -516,7 +516,7 @@ struct AnalysisSameEventPairing { float mMagField = 0.0; o2::parameters::GRPMagField* grpmag = nullptr; o2::base::MatLayerCylSet* lut = nullptr; - int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc. + int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. OutputObj fOutputList{"output"}; Filter filterEventSelected = aod::dqanalysisflags::isEventSelected == 1; @@ -546,7 +546,7 @@ struct AnalysisSameEventPairing { // TODO: special AnalysisCuts to be prepared in this direction // TODO: cuts on the MC truth information to be added if needed - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; std::vector> fBarrelHistNames; std::vector> fBarrelHistNamesMCmatched; std::vector> fMuonHistNames; @@ -795,7 +795,7 @@ struct AnalysisSameEventPairing { VarManager::FillPair(t1, t2); // secondary vertexing is not implemented for e-mu pairs so we need to hide this function from the e-mu analysis for now if constexpr ((TPairType == VarManager::kDecayToEE) || (TPairType == VarManager::kDecayToMuMu)) { - VarManager::FillPairVertexing(event, t1, t2, fPropToPCA, VarManager::fgValues); + VarManager::FillPairVertexing(event, t1, t2, VarManager::fgValues); } // run MC matching for this pair @@ -816,7 +816,7 @@ struct AnalysisSameEventPairing { dileptonFilterMap = twoTrackFilter; dileptonMcDecision = mcDecision; - if (!fConfigSkimSignalOnly || (fConfigSkimSignalOnly && mcDecision > 0)) { + if (!fConfigSkimSignalOnly || mcDecision > 0) { if constexpr (TPairType == VarManager::kDecayToEE) { dielectronList(event, VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), dileptonFilterMap, dileptonMcDecision); if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { @@ -882,11 +882,11 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousHist && !(t1.isAmbiguous() || t2.isAmbiguous())) { fHistMan->FillHistClass(Form("%s_unambiguous", histNames[icut][0].Data()), VarManager::fgValues); } - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { - if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(histNamesMCmatched[icut][isig].Data(), VarManager::fgValues); + for (unsigned int iSig = 0; iSig < fRecMCSignals.size(); iSig++) { + if (mcDecision & (static_cast(1) << iSig)) { + fHistMan->FillHistClass(histNamesMCmatched[icut][iSig].Data(), VarManager::fgValues); if (fConfigAmbiguousHist && !(t1.isAmbiguous() || t2.isAmbiguous())) { - fHistMan->FillHistClass(Form("%s_unambiguous", histNamesMCmatched[icut][isig].Data()), VarManager::fgValues); + fHistMan->FillHistClass(Form("%s_unambiguous", histNamesMCmatched[icut][iSig].Data()), VarManager::fgValues); } } } @@ -1071,12 +1071,10 @@ struct AnalysisDileptonTrack { constexpr static uint32_t fgDileptonFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::Pair; // fill map // use two values array to avoid mixing up the quantities - float* fValuesDilepton; - float* fValuesTrack; - HistogramManager* fHistMan; + float* fValuesDilepton = nullptr; + float* fValuesTrack = nullptr; + HistogramManager* fHistMan = nullptr; - std::vector> fMuonHistNames; - std::vector> fMuonHistNamesMCmatched; std::vector fRecMCSignalsNames; std::vector fRecMCSignals; @@ -1085,7 +1083,7 @@ struct AnalysisDileptonTrack { // NOTE: the barrel track filter is shared between the filters for dilepton electron candidates (first n-bits) // and the associated hadrons (n+1 bit) --> see the barrel track selection task // The current condition should be replaced when bitwise operators will become available in Filter expressions - int fNHadronCutBit; + int fNHadronCutBit = 0; void init(o2::framework::InitContext& context) { @@ -1242,9 +1240,9 @@ struct AnalysisDileptonTrack { } } // end loop over MC signals - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { - if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("DileptonsSelected_matchedMC_%s", fRecMCSignalsNames[isig].Data()), fValuesDilepton); + for (unsigned int iSig = 0; iSig < fRecMCSignals.size(); iSig++) { + if (mcDecision & (static_cast(1) << iSig)) { + fHistMan->FillHistClass(Form("DileptonsSelected_matchedMC_%s", fRecMCSignalsNames[iSig].Data()), fValuesDilepton); } } @@ -1267,7 +1265,7 @@ struct AnalysisDileptonTrack { mcDecision = 0; isig = 0; for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, isig++) { - if constexpr (TTrackFillMap & VarManager::ObjTypes::ReducedTrack || TTrackFillMap & VarManager::ObjTypes::ReducedMuon || TTrackFillMap & VarManager::ObjTypes::ReducedMuon) { // for skimmed DQ model + if constexpr (TTrackFillMap & VarManager::ObjTypes::ReducedTrack || TTrackFillMap & VarManager::ObjTypes::ReducedMuon) { // for skimmed DQ model if ((*sig).CheckSignal(false, lepton1MC, lepton2MC, trackMC)) { mcDecision |= (static_cast(1) << isig); } @@ -1278,9 +1276,9 @@ struct AnalysisDileptonTrack { dileptontrackcandidatesList(mcDecision, fValuesTrack[VarManager::kPairMass], fValuesTrack[VarManager::kPairPt], fValuesTrack[VarManager::kPairEta], fValuesTrack[VarManager::kVertexingTauz], fValuesTrack[VarManager::kVertexingTauxy], fValuesTrack[VarManager::kVertexingLz], fValuesTrack[VarManager::kVertexingLxy]); } - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { - if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("DileptonTrackInvMass_matchedMC_%s", fRecMCSignalsNames[isig].Data()), fValuesTrack); + for (unsigned int iSig = 0; iSig < fRecMCSignals.size(); iSig++) { + if (mcDecision & (static_cast(1) << iSig)) { + fHistMan->FillHistClass(Form("DileptonTrackInvMass_matchedMC_%s", fRecMCSignalsNames[iSig].Data()), fValuesTrack); } } } @@ -1357,7 +1355,7 @@ struct AnalysisDileptonTrackTrack { Configurable fConfigUseDCAVertexing{"cfgUseDCAVertexing", false, "Use DCA for secondary vertex reconstruction (DCAFitter is used by default)"}; Produces DileptonTrackTrackTable; - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; std::vector fRecMCSignalsNames; std::vector fRecMCSignals; @@ -1368,7 +1366,7 @@ struct AnalysisDileptonTrackTrack { Filter dileptonFilter = aod::reducedpair::sign == 0; Filter filterBarrelTrackSelected = aod::dqanalysisflags::isBarrelSelected > 0; - float* fValuesQuadruplet; + float* fValuesQuadruplet = nullptr; std::vector fQuadrupletCutNames; AnalysisCompositeCut fDileptonCut; @@ -1585,9 +1583,9 @@ struct AnalysisDileptonTrackTrack { mcDecision |= (static_cast(1) << isig); } } - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { - if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("MCTruthRecQuad_%s_%s", fQuadrupletCutNames[iCut].Data(), fRecMCSignalsNames[isig].Data()), fValuesQuadruplet); + for (unsigned int iSig = 0; iSig < fRecMCSignals.size(); iSig++) { + if (mcDecision & (static_cast(1) << iSig)) { + fHistMan->FillHistClass(Form("MCTruthRecQuad_%s_%s", fQuadrupletCutNames[iCut].Data(), fRecMCSignalsNames[iSig].Data()), fValuesQuadruplet); } } } diff --git a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx index 57b142eda98..8f5c01923aa 100644 --- a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx +++ b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx @@ -460,7 +460,9 @@ struct AnalysisEventSelection { collisionSplittingMap[*ev1It] = true; collisionSplittingMap[*ev2It] = true; } - fHistMan->FillHistClass("SameBunchCorrelations", dqefficiency_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass("SameBunchCorrelations", dqefficiency_helpers::varValues()); + } } // end second event loop } // end first event loop } // end if BC1 events > 1 @@ -485,7 +487,9 @@ struct AnalysisEventSelection { collisionSplittingMap[ev1It] = true; collisionSplittingMap[ev2It] = true; } - fHistMan->FillHistClass("OutOfBunchCorrelations", dqefficiency_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass("OutOfBunchCorrelations", dqefficiency_helpers::varValues()); + } } } } @@ -592,7 +596,7 @@ struct AnalysisTrackSelection { if (addTrackCutsStr != "") { std::vector addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); for (auto const& t : addTrackCuts) { - fTrackCuts.push_back(static_cast(t)); + fTrackCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill @@ -873,15 +877,13 @@ struct AnalysisMuonSelection { Configurable fConfigAddMuonHistogram{"cfgAddMuonHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigPublishAmbiguity{"cfgPublishAmbiguity", true, "If true, publish ambiguity table and fill QA histograms"}; - Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; - Configurable fConfigMagField{"cfgMagField", 5.0f, "Manually set magnetic field"}; - Configurable fConfigGeoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; Configurable fConfigMCSignals{"cfgMuonMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigMCSignalsJSON{"cfgMuonMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; + Service fCCDB{}; HistogramManager* fHistMan = nullptr; @@ -890,7 +892,7 @@ struct AnalysisMuonSelection { std::vector fHistNamesMCMatched; std::vector fMCSignals; // list of signals to be checked - int fCurrentRun = 0; // current run kept to detect run changes and trigger loading params from CCDB + int fCurrentRun = 0; // current run (needed to detect run changes for loading CCDB parameters) std::map> fNAssocsInBunch; // key: track global index, value: vector of global index for events associated in-bunch (events that have in-bunch pileup or splitting) std::map> fNAssocsOutOfBunch; // key: track global index, value: vector of global index for events associated out-of-bunch (events that have no in-bunch pileup) @@ -915,7 +917,7 @@ struct AnalysisMuonSelection { if (addCutsStr != "") { std::vector addCuts = dqcuts::GetCutsFromJSON(addCutsStr.Data()); for (auto const& t : addCuts) { - fMuonCuts.push_back(static_cast(t)); + fMuonCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill @@ -979,29 +981,18 @@ struct AnalysisMuonSelection { fCCDB->setCaching(true); fCCDB->setLocalObjectValidityChecking(); fCCDB->setCreatedNotAfter(fConfigNoLaterThan.value); - if (!o2::base::GeometryManager::isGeometryLoaded()) { - fCCDB->get(fConfigGeoPath); - } } template void runMuonSelection(ReducedMuonsAssoc const& assocs, TEvents const& events, TMuons const& muons, ReducedMCEvents const& /*eventsMC*/, ReducedMCTracks const& muonsMC) { + fNAssocsInBunch.clear(); + fNAssocsOutOfBunch.clear(); + if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { - auto grpmag = fCCDB->getForTimeStamp(grpmagPath, events.begin().timestamp()); - if (grpmag != nullptr) { - o2::base::Propagator::initFieldFromGRP(grpmag); - VarManager::SetMagneticField(grpmag->getNominalL3Field()); - } else { - // LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", events.begin().timestamp()); - // If the magnetic field is not found it is configured by had by the user - VarManager::SetMagneticField(fConfigMagField.value); - } fCurrentRun = events.begin().runNumber(); } - fNAssocsInBunch.clear(); - fNAssocsOutOfBunch.clear(); muonSel.reserve(assocs.size()); for (auto const& assoc : assocs) { @@ -1116,7 +1107,9 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("Muon_AmbiguityInBunch", dqefficiency_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass("Muon_AmbiguityInBunch", dqefficiency_helpers::varValues()); + } } // end loop over in-bunch ambiguous tracks for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { @@ -1127,7 +1120,9 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("Muon_AmbiguityOutOfBunch", dqefficiency_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass("Muon_AmbiguityOutOfBunch", dqefficiency_helpers::varValues()); + } } // end loop over out-of-bunch ambiguous tracks // publish the ambiguity table @@ -1610,18 +1605,13 @@ struct AnalysisSameEventPairing { Configurable url{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable grpMagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Configurable lutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; - Configurable geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; } fConfigCCDB; struct : ConfigurableGroup { - Configurable useRemoteField{"cfgUseRemoteField", false, "Chose whether to fetch the magnetic field from ccdb or set it manually"}; - Configurable magField{"cfgMagField", 5.0f, "Manually set magnetic field"}; Configurable flatTables{"cfgFlatTables", false, "Produce a single flat tables with all relevant information of the pairs and single tracks"}; Configurable polarTables{"cfgPolarTables", false, "Produce tables with dilepton polarization information"}; Configurable useKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; Configurable useAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"}; - Configurable propToPCA{"cfgPropToPCA", false, "Propagate tracks to secondary vertex"}; - Configurable corrFullGeo{"cfgCorrFullGeo", false, "Use full geometry to correct for MCS effects in track propagation"}; Configurable noCorr{"cfgNoCorrFwdProp", false, "Do not correct for MCS effects in track propagation"}; Configurable collisionSystem{"syst", "pp", "Collision system, pp or PbPb"}; Configurable centerMassEnergy{"energy", 13600, "Center of mass energy in GeV"}; @@ -1700,7 +1690,7 @@ struct AnalysisSameEventPairing { VarManager::SetDefaultVarNames(); fEnableBarrelHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processBarrelOnlySkimmed") || context.mOptions.get("processBarrelOnlyWithCollSkimmed"); - fEnableMuonHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processMuonOnlySkimmed"); + fEnableMuonHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processMuonOnlySkimmed") || context.mOptions.get("processMuonOnlyVertexingSkimmed"); fEnableBarrelMuonHistos = context.mOptions.get("processElectronMuonSkimmed"); fEnableBarrelMuonMixingHistos = context.mOptions.get("processMixingElectronMuonSkimmed"); @@ -2142,10 +2132,6 @@ struct AnalysisSameEventPairing { if (fConfigOptions.noCorr) { VarManager::SetupFwdDCAFitterNoCorr(); - } else if (fConfigOptions.corrFullGeo || (fConfigOptions.useKFVertexing && fConfigOptions.propToPCA)) { - if (!o2::base::GeometryManager::isGeometryLoaded()) { - fCCDB->get(fConfigCCDB.geoPath); - } } else { fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile(fCCDB->get(fConfigCCDB.lutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); @@ -2165,35 +2151,22 @@ struct AnalysisSameEventPairing { void initParamsFromCCDB(uint64_t timestamp, bool withTwoProngFitter = true) { - if (fConfigOptions.useRemoteField.value) { - auto grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, timestamp); - float magField = 0.0; - if (grpmag != nullptr) { - magField = grpmag->getNominalL3Field(); - } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); - } - if (withTwoProngFitter) { - if (fConfigOptions.useKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(magField); - } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); - } - } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // needed because take in varmanager Bz from fgFitterTwoProngBarrel for PhiV calculations - } + auto grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, timestamp); + float magField = 0.0; + if (grpmag != nullptr) { + magField = grpmag->getNominalL3Field(); } else { - if (withTwoProngFitter) { - if (fConfigOptions.useKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(fConfigOptions.magField.value); - } else { - VarManager::SetupTwoProngDCAFitter(fConfigOptions.magField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(fConfigOptions.magField.value, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); - } + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + } + if (withTwoProngFitter) { + if (fConfigOptions.useKFVertexing.value) { + VarManager::SetupTwoProngKFParticle(magField); } else { - VarManager::SetupTwoProngDCAFitter(fConfigOptions.magField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // needed because take in varmanager Bz from fgFitterTwoProngBarrel for PhiV calculations + VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); } + } else { + VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // needed because take in varmanager Bz from fgFitterTwoProngBarrel for PhiV calculations } } @@ -2333,7 +2306,7 @@ struct AnalysisSameEventPairing { VarManager::FillPairCollision(event, t1, t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigOptions.propToPCA); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -2425,7 +2398,7 @@ struct AnalysisSameEventPairing { VarManager::FillPairCollision(event, t1, t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigOptions.propToPCA); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -2438,36 +2411,34 @@ struct AnalysisSameEventPairing { dileptonInfoList(event.collisionId(), event.posX(), event.posY(), event.posZ()); } - if constexpr (TTwoProngFitter) { - dimuonsExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingLz], VarManager::fgValues[VarManager::kVertexingLxy]); - if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - dimuonAllList(event.posX(), event.posY(), event.posZ(), event.numContrib(), - event.selection_raw(), evSel, - event.reducedMCevent().mcPosX(), event.reducedMCevent().mcPosY(), event.reducedMCevent().mcPosZ(), - VarManager::fgValues[VarManager::kMass], - mcDecision, - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - VarManager::fgValues[VarManager::kPt1], VarManager::fgValues[VarManager::kEta1], VarManager::fgValues[VarManager::kPhi1], t1.sign(), - VarManager::fgValues[VarManager::kPt2], VarManager::fgValues[VarManager::kEta2], VarManager::fgValues[VarManager::kPhi2], t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), - t1.mcMask(), t2.mcMask(), - t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), - t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), - t1.chi2(), t2.chi2(), - t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), t1.reducedMCTrack().phi(), t1.reducedMCTrack().e(), - t2.reducedMCTrack().pt(), t2.reducedMCTrack().eta(), t2.reducedMCTrack().phi(), t2.reducedMCTrack().e(), - t1.reducedMCTrack().vx(), t1.reducedMCTrack().vy(), t1.reducedMCTrack().vz(), t1.reducedMCTrack().vt(), - t2.reducedMCTrack().vx(), t2.reducedMCTrack().vy(), t2.reducedMCTrack().vz(), t2.reducedMCTrack().vt(), - (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)), (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)), - isCorrectAssoc_leg1, isCorrectAssoc_leg2, - -999.0, -999.0, -999.0, -999.0, -999.0, - -999.0, -999.0, -999.0, -999.0, -999.0, - -999.0, VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], VarManager::fgValues[VarManager::kVertexingSV]); - } + dimuonsExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingLz], VarManager::fgValues[VarManager::kVertexingLxy]); + if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { + dimuonAllList(event.posX(), event.posY(), event.posZ(), event.numContrib(), + event.selection_raw(), evSel, + event.reducedMCevent().mcPosX(), event.reducedMCevent().mcPosY(), event.reducedMCevent().mcPosZ(), + VarManager::fgValues[VarManager::kMass], + mcDecision, + VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], + VarManager::fgValues[VarManager::kPt1], VarManager::fgValues[VarManager::kEta1], VarManager::fgValues[VarManager::kPhi1], t1.sign(), + VarManager::fgValues[VarManager::kPt2], VarManager::fgValues[VarManager::kEta2], VarManager::fgValues[VarManager::kPhi2], t2.sign(), + t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), + t1.mcMask(), t2.mcMask(), + t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), + t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), + t1.chi2(), t2.chi2(), + t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), t1.reducedMCTrack().phi(), t1.reducedMCTrack().e(), + t2.reducedMCTrack().pt(), t2.reducedMCTrack().eta(), t2.reducedMCTrack().phi(), t2.reducedMCTrack().e(), + t1.reducedMCTrack().vx(), t1.reducedMCTrack().vy(), t1.reducedMCTrack().vz(), t1.reducedMCTrack().vt(), + t2.reducedMCTrack().vx(), t2.reducedMCTrack().vy(), t2.reducedMCTrack().vz(), t2.reducedMCTrack().vt(), + (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)), (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)), + isCorrectAssoc_leg1, isCorrectAssoc_leg2, + -999.0, -999.0, -999.0, -999.0, -999.0, + -999.0, -999.0, -999.0, -999.0, -999.0, + -999.0, VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], VarManager::fgValues[VarManager::kVertexingSV]); } } // Fill histograms @@ -3083,13 +3054,19 @@ struct AnalysisSameEventPairing { void processMuonOnlySkimmed(MyEventsVtxCovSelected const& events, soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); // Feature replaced by processMCGen /* if (fConfigMC.runMCGenPair) { runMCGen(mcEvents, mcTracks); }*/ } + void processMuonOnlyVertexingSkimmed(MyEventsVtxCovSelected const& events, + soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { + runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + } + PresliceUnsorted perReducedMcGenEvent = aod::reducedtrackMC::reducedMCeventId; void processMCGen(soa::Filtered const& events, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) @@ -3334,6 +3311,7 @@ struct AnalysisSameEventPairing { PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmed, "Run barrel only pairing, with skimmed tracks", false); PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlyWithCollSkimmed, "Run barrel only pairing, with skimmed tracks and with collision information", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, "Run muon only pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, "Run muon only pairing with two-prong vertexing, with skimmed tracks", false); PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, "Run electron-muon pairing, with skimmed tracks/muons", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingElectronMuonSkimmed, "Run electron-muon mixing pairing, with skimmed tracks/muons", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMCGen, "Loop over MC particle stack and fill generator level histograms", false); @@ -3372,12 +3350,9 @@ struct AnalysisAsymmetricPairing { Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigGRPMagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - Configurable fConfigUseRemoteField{"cfgUseRemoteField", false, "Choose whether to fetch the magnetic field from ccdb or set it manually"}; - Configurable fConfigMagField{"cfgMagField", 5.0f, "Manually set magnetic field"}; Configurable fConfigUseKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; Configurable fConfigUseAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"}; - Configurable fConfigPropToPCA{"cfgPropToPCA", false, "Propagate tracks to secondary vertex"}; Configurable fConfigLutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; Configurable fConfigMCGenSignals{"cfgBarrelMCGenSignals", "", "Comma separated list of MC signals (generated)"}; @@ -3459,7 +3434,7 @@ struct AnalysisAsymmetricPairing { if (addPairCutsStr != "") { std::vector addPairCuts = dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); for (auto const& t : addPairCuts) { - fPairCuts.push_back(static_cast(t)); + fPairCuts.push_back(dynamic_cast(t)); cutNamesStr += Form(",%s", t->GetName()); } } @@ -3780,40 +3755,24 @@ struct AnalysisAsymmetricPairing { void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) { - if (fConfigUseRemoteField.value) { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPMagPath, timestamp); - float magField = 0.0; - if (grpmag != nullptr) { - magField = grpmag->getNominalL3Field(); - } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); - } - if (isTriplets) { - if (fConfigUseKFVertexing.value) { - VarManager::SetupThreeProngKFParticle(magField); - } else { - VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); - } + auto grpmag = fCCDB->getForTimeStamp(fConfigGRPMagPath, timestamp); + float magField = 0.0; + if (grpmag != nullptr) { + magField = grpmag->getNominalL3Field(); + } else { + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + } + if (isTriplets) { + if (fConfigUseKFVertexing.value) { + VarManager::SetupThreeProngKFParticle(magField); } else { - if (fConfigUseKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(magField); - } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); // TODO: get these parameters from Configurables - } + VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); } } else { - if (isTriplets) { - if (fConfigUseKFVertexing.value) { - VarManager::SetupThreeProngKFParticle(fConfigMagField.value); - } else { - VarManager::SetupThreeProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); - } + if (fConfigUseKFVertexing.value) { + VarManager::SetupTwoProngKFParticle(magField); } else { - if (fConfigUseKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(fConfigMagField.value); - } else { - VarManager::SetupTwoProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); // TODO: get these parameters from Configurables - } + VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); // TODO: get these parameters from Configurables } } } @@ -3926,7 +3885,7 @@ struct AnalysisAsymmetricPairing { VarManager::FillPair(t1, t2); if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigPropToPCA); + VarManager::FillPairVertexing(event, t1, t2); } // Fill histograms @@ -4368,9 +4327,7 @@ struct AnalysisDileptonTrack { Configurable fConfigHistogramSubgroups{"cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", "Comma separated list of dilepton-track histogram subgroups"}; Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - Configurable fConfigUseRemoteField{"cfgUseRemoteField", false, "Chose whether to fetch the magnetic field from ccdb or set it manually"}; Configurable fConfigGRPmagPath{"cfgGrpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - Configurable fConfigMagField{"cfgMagField", 5.0f, "Manually set magnetic field"}; Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; @@ -4744,25 +4701,17 @@ struct AnalysisDileptonTrack { // init parameters from CCDB void initParamsFromCCDB(uint64_t timestamp) { - if (fConfigUseRemoteField.value) { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); - float magField = 0.0; - if (grpmag != nullptr) { - magField = grpmag->getNominalL3Field(); - } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); - } - if (fConfigUseKFVertexing.value) { - VarManager::SetupThreeProngKFParticle(magField); - } else { - VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - } + auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); + float magField = 0.0; + if (grpmag != nullptr) { + magField = grpmag->getNominalL3Field(); } else { - if (fConfigUseKFVertexing.value) { - VarManager::SetupThreeProngKFParticle(fConfigMagField.value); - } else { - VarManager::SetupThreeProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - } + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + } + if (fConfigUseKFVertexing.value) { + VarManager::SetupThreeProngKFParticle(magField); + } else { + VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables } } diff --git a/PWGDQ/Tasks/dqEfficiency_withAssoc_direct.cxx b/PWGDQ/Tasks/dqEfficiency_withAssoc_direct.cxx index d3a968e28a8..ba62d644f59 100644 --- a/PWGDQ/Tasks/dqEfficiency_withAssoc_direct.cxx +++ b/PWGDQ/Tasks/dqEfficiency_withAssoc_direct.cxx @@ -308,7 +308,7 @@ void DefineHistograms(HistogramManager* histMan, const TString& histClasses, con template void PrintBitMap(TMap map, int nbits) { - std::string msg = ""; + std::string msg; for (int i = 0; i < nbits; i++) { msg += ((map & (TMap(1) << i)) > 0 ? "1" : "0"); } @@ -631,7 +631,7 @@ struct AnalysisTrackSelection { if (addTrackCutsStr != "") { std::vector addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); for (const auto& t : addTrackCuts) { - fTrackCuts.push_back(reinterpret_cast(t)); + fTrackCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill @@ -826,11 +826,11 @@ struct AnalysisTrackSelection { // cout << " Cut matched, filling histograms" << endl; if (isCorrectAssoc) { // cout << " Correct association" << endl; - fHistMan->FillHistClass(fHistNamesMCMatched[icut * 2 * fMCSignals.size() + 2 * isig].Data(), VarManager::fgValues); + fHistMan->FillHistClass(fHistNamesMCMatched[icut * 2 * fMCSignals.size() + 2 * isig].Data(), static_cast(VarManager::fgValues)); // cout << " Filled histogram dir: " << fHistNamesMCMatched[icut * 2 * fMCSignals.size() + 2 * isig].Data() << endl; } else { // cout << " Incorrect association" << endl; - fHistMan->FillHistClass(fHistNamesMCMatched[icut * 2 * fMCSignals.size() + 2 * isig + 1].Data(), VarManager::fgValues); + fHistMan->FillHistClass(fHistNamesMCMatched[icut * 2 * fMCSignals.size() + 2 * isig + 1].Data(), static_cast(VarManager::fgValues)); // cout << " Filled histogram dir: " << fHistNamesMCMatched[icut * 2 * fMCSignals.size() + 2 * isig + 1].Data() << endl; } } @@ -1062,7 +1062,7 @@ struct AnalysisPrefilterSelection { bool track1Loose = assoc1.isBarrelSelected_bit(fPrefilterCutBit); bool track2Loose = assoc2.isBarrelSelected_bit(fPrefilterCutBit); - if (!((track1Candidate > 0 && track2Loose) || (track2Candidate > 0 && track1Loose))) { + if ((track1Candidate == 0 || !track2Loose) && (track2Candidate == 0 || !track1Loose)) { continue; } @@ -1110,7 +1110,7 @@ struct AnalysisPrefilterSelection { // auto track = assoc.template track_as(); mymap = -1; // if (fPrefilterMap.find(track.globalIndex()) != fPrefilterMap.end()) { - if (fPrefilterMap.find(assoc.trackId()) != fPrefilterMap.end()) { + if (fPrefilterMap.contains(assoc.trackId())) { // NOTE: publish the bitwise negated bits (~), so there will be zeroes for cuts that failed the prefiltering and 1 everywhere else // mymap = ~fPrefilterMap[track.globalIndex()]; mymap = ~fPrefilterMap[assoc.trackId()]; @@ -1828,7 +1828,7 @@ struct AnalysisSameEventPairing { VarManager::FillPairCollision(event, t1, t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigOptions.propToPCA); + VarManager::FillPairVertexing(event, t1, t2); if (fConfigOptions.recomputePV) { VarManager::SetPVrecalculationKF(false); VarManager::ResetValues(VarManager::kVertexingLxyProjectedRecalculatePV, VarManager::kVertexingLxyProjectedRecalculatePV + 1); @@ -1921,7 +1921,7 @@ struct AnalysisSameEventPairing { VarManager::FillPairCollision(event, t1, t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigOptions.propToPCA); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -1984,7 +1984,7 @@ struct AnalysisSameEventPairing { VarManager::fgValues[VarManager::kVertexingTauxyProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass], VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMassRecalculatePV], VarManager::fgValues[VarManager::kVtxX], VarManager::fgValues[VarManager::kVtxY], VarManager::fgValues[VarManager::kVtxZ], VarManager::fgValues[VarManager::kDCAxy1], VarManager::fgValues[VarManager::kDCAz1], VarManager::fgValues[VarManager::kITSclusterMap1], VarManager::fgValues[VarManager::kTPCnSigmaEl1], VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kITSclusterMap2], VarManager::fgValues[VarManager::kTPCnSigmaEl2], isAmbiInBunch, isAmbiOutOfBunch, isCorrect_pair, VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]); - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), VarManager::fgValues); // matched signal + fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), static_cast(VarManager::fgValues)); // matched signal /*if (fConfigOptions.fConfigMiniTree) { if constexpr (TPairType == VarManager::kDecayToMuMu) { twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & fMuonFilterMask; @@ -2372,7 +2372,7 @@ struct AnalysisDileptonTrack { std::vector fPairCutNames; std::vector fCommonPairCutNames; - Service fCCDB; + Service fCCDB{}; // TODO: The filter expressions seem to always use the default value of configurables, not the values from the actual configuration file Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast(0); @@ -2648,7 +2648,7 @@ struct AnalysisDileptonTrack { for (int iCutTrack = 0; iCutTrack < fNCuts; iCutTrack++) { // here we check that this track cut is one of those required to associate with the dileptons - if (!(fTrackCutBitMap & (static_cast(1) << iCutTrack))) { + if ((fTrackCutBitMap & (static_cast(1) << iCutTrack)) == 0) { continue; } diff --git a/PWGDQ/Tasks/tableReader.cxx b/PWGDQ/Tasks/tableReader.cxx index ef3e6713b2f..e9deca68d91 100644 --- a/PWGDQ/Tasks/tableReader.cxx +++ b/PWGDQ/Tasks/tableReader.cxx @@ -177,8 +177,8 @@ struct AnalysisEventSelection { HistogramManager* fHistMan = nullptr; MixingHandler* fMixHandler = nullptr; - AnalysisCompositeCut* fEventCut; - int fLastRun; + AnalysisCompositeCut* fEventCut = nullptr; + int fLastRun = -1; Service fCCDB; @@ -349,10 +349,10 @@ struct AnalysisTrackSelection { Service fCCDB; - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; std::vector fTrackCuts; - int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc. + int fCurrentRun = 0; // needed to detect if the run changed and trigger update of calibrations etc. int64_t reserveSize = 0; @@ -479,7 +479,7 @@ struct AnalysisMuonSelection { Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddMuonHistogram{"cfgAddMuonHistogram", "", "Comma separated list of histograms"}; - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; std::vector fMuonCuts; Filter filterEventSelected = aod::dqanalysisflags::isEventSelected == 1; @@ -602,14 +602,14 @@ struct AnalysisPrefilterSelection { Service ccdb; o2::parameters::GRPMagField* grpmag = nullptr; - int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc. + int fCurrentRun = 0; // needed to detect if the run changed and trigger update of calibrations etc. Filter barrelTracksSelectedPrefilter = aod::dqanalysisflags::isBarrelSelectedPrefilter > 0; Partition> barrelTracksSelected = aod::dqanalysisflags::isBarrelSelected > 0; std::map fPrefiltermap; - AnalysisCompositeCut* fPairCut; + AnalysisCompositeCut* fPairCut = nullptr; void init(o2::framework::InitContext& context) { @@ -719,13 +719,13 @@ struct AnalysisEventMixing { TH2D* SingleMuv24m = nullptr; // Single muon v24, loaded from CCDB TH2D* SingleMuv22p = nullptr; // Single antimuon v22, loaded from CCDB TH2D* SingleMuv24p = nullptr; // Single antimuon v24, loaded from CCDB - int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc. + int fCurrentRun = 0; // needed to detect if the run changed and trigger update of calibrations etc. Filter filterEventSelected = aod::dqanalysisflags::isEventSelected == 1; Filter filterTrackSelected = aod::dqanalysisflags::isBarrelSelected > 0; Filter filterMuonTrackSelected = aod::dqanalysisflags::isMuonSelected > 0; - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; // NOTE: The bit mask is required to run pairing just based on the desired electron/muon candidate cuts uint32_t fTwoTrackFilterMask = 0; uint32_t fTwoMuonFilterMask = 0; @@ -1046,7 +1046,7 @@ struct AnalysisSameEventPairing { o2::base::MatLayerCylSet* lut = nullptr; TH1D* ResoFlowSP = nullptr; // Resolution factors for flow analysis, this will be loaded from CCDB TH1D* ResoFlowEP = nullptr; // Resolution factors for flow analysis, this will be loaded from CCDB - int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc. + int fCurrentRun = 0; // needed to detect if the run changed and trigger update of calibrations etc. OutputObj fOutputList{"output"}; Configurable fConfigTrackCuts{"cfgTrackCuts", "jpsiO2MCdebugCuts2", "Comma separated list of barrel track cuts"}; @@ -1097,7 +1097,7 @@ struct AnalysisSameEventPairing { Filter filterMuonTrackSelected = aod::dqanalysisflags::isMuonSelected > 0; Filter prefilter = aod::dqanalysisflags::isPrefilterVetoed == 0; - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; o2::analysis::DQMlResponse fDQMlResponse; std::vector fOutputMlPsi2ee = {}; // TODO: check this is needed or not @@ -1217,7 +1217,6 @@ struct AnalysisSameEventPairing { histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); fTrackHistNames.push_back(names); - TString cutNamesStr = fConfigPairCuts.value; if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); for (int iPairCut = 0; iPairCut < objArrayPair->GetEntries(); ++iPairCut) { // loop over pair cuts @@ -1255,7 +1254,6 @@ struct AnalysisSameEventPairing { } fMuonHistNames.push_back(names); - TString cutNamesStr = fConfigPairCuts.value; if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); for (int iPairCut = 0; iPairCut < objArrayPair->GetEntries(); ++iPairCut) { // loop over pair cuts @@ -1288,11 +1286,10 @@ struct AnalysisSameEventPairing { histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); fTrackMuonHistNames.push_back(names); - TString cutNamesStr = fConfigPairCuts.value; if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); for (int iPairCut = 0; iPairCut < objArrayPair->GetEntries(); ++iPairCut) { // loop over pair cuts - std::vector names = { + names = { Form("PairsEleMuSEPM_%s_%s_%s", objArrayBarrel->At(icut)->GetName(), objArrayMuon->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), Form("PairsEleMuSEPP_%s_%s_%s", objArrayBarrel->At(icut)->GetName(), objArrayMuon->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), Form("PairsEleMuSEMM_%s_%s_%s", objArrayBarrel->At(icut)->GetName(), objArrayMuon->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName())}; @@ -1466,7 +1463,7 @@ struct AnalysisSameEventPairing { VarManager::FillPair(t1, t2); if constexpr ((TPairType == pairTypeEE) || (TPairType == pairTypeMuMu)) { // call this just for ee or mumu pairs if constexpr (TTwoProngFitter == true) { - VarManager::FillPairVertexing(event, t1, t2, fPropToPCA); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -1876,7 +1873,7 @@ struct AnalysisDileptonHadron { // To be modified/adapted if new requirements appear float mMagField = 0.0; o2::parameters::GRPMagField* grpmag = nullptr; - int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc. + int fCurrentRun = 0; // needed to detect if the run changed and trigger update of calibrations etc. OutputObj fOutputList{"output"}; // TODO: For now this is only used to determine the position in the filter bit map for the hadron cut @@ -1902,14 +1899,14 @@ struct AnalysisDileptonHadron { constexpr static uint32_t fgDileptonFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::Pair; // fill map // use two values array to avoid mixing up the quantities - float* fValuesDilepton; - float* fValuesHadron; - HistogramManager* fHistMan; + float* fValuesDilepton = nullptr; + float* fValuesHadron = nullptr; + HistogramManager* fHistMan = nullptr; // NOTE: the barrel track filter is shared between the filters for dilepton electron candidates (first n-bits) // and the associated hadrons (n+1 bit) --> see the barrel track selection task // The current condition should be replaced when bitwise operators will become available in Filter expressions - int fNHadronCutBit; + int fNHadronCutBit = 0; NoBinningPolicy hashBin; @@ -2113,8 +2110,8 @@ struct AnalysisDileptonTrackTrack { constexpr static uint32_t fgDileptonFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::Pair; // fill map // use some values array to avoid mixing up the quantities - float* fValuesQuadruplet; - HistogramManager* fHistMan; + float* fValuesQuadruplet = nullptr; + HistogramManager* fHistMan = nullptr; // cut name setting TString fTrackCutName1; diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index c1fccbfb333..fcc4bc0920b 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -716,7 +716,7 @@ struct AnalysisTrackSelection { if (addTrackCutsStr != "") { std::vector addTrackCuts = o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); for (auto const& t : addTrackCuts) { - fTrackCuts.push_back(static_cast(t)); + fTrackCuts.push_back(dynamic_cast(t)); } } @@ -951,9 +951,7 @@ struct AnalysisMuonSelection { o2::framework::Configurable fConfigPublishAmbiguity{"cfgPublishAmbiguity", true, "If true, publish ambiguity table and fill QA histograms"}; o2::framework::Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - o2::framework::Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; o2::framework::Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; - o2::framework::Configurable fConfigGeoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; o2::framework::Service fCCDB{}; @@ -985,7 +983,7 @@ struct AnalysisMuonSelection { if (addCutsStr != "") { std::vector addCuts = o2::aod::dqcuts::GetCutsFromJSON(addCutsStr.Data()); for (auto const& t : addCuts) { - fMuonCuts.push_back(static_cast(t)); + fMuonCuts.push_back(dynamic_cast(t)); } } @@ -1015,9 +1013,6 @@ struct AnalysisMuonSelection { fCCDB->setCaching(true); fCCDB->setLocalObjectValidityChecking(); fCCDB->setCreatedNotAfter(fConfigNoLaterThan.value); - if (!o2::base::GeometryManager::isGeometryLoaded()) { - fCCDB->get(fConfigGeoPath); - } } template @@ -1027,13 +1022,6 @@ struct AnalysisMuonSelection { fNAssocsOutOfBunch.clear(); if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { - auto grpmag = fCCDB->getForTimeStamp(grpmagPath, events.begin().timestamp()); - if (grpmag != nullptr) { - o2::base::Propagator::initFieldFromGRP(grpmag); - VarManager::SetMagneticField(grpmag->getNominalL3Field()); - } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", events.begin().timestamp()); - } fCurrentRun = events.begin().runNumber(); } @@ -1384,7 +1372,6 @@ struct AnalysisSameEventPairing { o2::framework::Configurable url{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable grpMagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; o2::framework::Configurable lutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; - o2::framework::Configurable geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; o2::framework::Configurable GrpLhcIfPath{"grplhcif", "GLO/Config/GRPLHCIF", "Path on the CCDB for the GRPLHCIF object"}; o2::framework::Configurable efficiencyPath{"effHistPath", "Users/z/zhxiong/efficiency", "Path on the CCDB for the efficiency histograms"}; o2::framework::Configurable flowPath{"flowPath", "Users/y/yiping/FlowResolution", "Path to the flow resolution object"}; @@ -1392,14 +1379,10 @@ struct AnalysisSameEventPairing { } fConfigCCDB; struct : o2::framework::ConfigurableGroup { - o2::framework::Configurable useRemoteField{"cfgUseRemoteField", false, "Chose whether to fetch the magnetic field from ccdb or set it manually"}; - o2::framework::Configurable magField{"cfgMagField", 5.0f, "Manually set magnetic field"}; o2::framework::Configurable flatTables{"cfgFlatTables", false, "Produce a single flat tables with all relevant information of the pairs and single tracks"}; o2::framework::Configurable polarTables{"cfgPolarTables", false, "Produce tables with dilepton polarization information"}; o2::framework::Configurable useKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; o2::framework::Configurable useAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"}; - o2::framework::Configurable propToPCA{"cfgPropToPCA", false, "Propagate tracks to secondary vertex"}; - o2::framework::Configurable corrFullGeo{"cfgCorrFullGeo", false, "Use full geometry to correct for MCS effects in track propagation"}; o2::framework::Configurable noCorr{"cfgNoCorrFwdProp", false, "Do not correct for MCS effects in track propagation"}; o2::framework::Configurable collisionSystem{"syst", "pp", "Collision system, pp or PbPb"}; o2::framework::Configurable centerMassEnergy{"energy", 13600, "Center of mass energy in GeV"}; @@ -1469,7 +1452,7 @@ struct AnalysisSameEventPairing { fEnableBarrelHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processBarrelOnlySkimmed") || context.mOptions.get("processBarrelOnlyWithCollSkimmed") || context.mOptions.get("processBarrelOnlySkimmedNoCov") || context.mOptions.get("processBarrelOnlySkimmedNoCovWithMultExtra") || context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmedNoCov") || context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmed"); fEnableBarrelMixingHistos = context.mOptions.get("processMixingAllSkimmed") || context.mOptions.get("processMixingBarrelSkimmed") || context.mOptions.get("processMixingBarrelSkimmedFlow") || context.mOptions.get("processMixingBarrelWithQvectorCentrSkimmedNoCov"); fEnableBarrelMixingHistos |= fConfigRunMixingAcrossTFs; - fEnableMuonHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processMuonOnlySkimmed") || context.mOptions.get("processMuonOnlySkimmedMultExtra") || context.mOptions.get("processMuonOnlySkimmedFlow"); + fEnableMuonHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processMuonOnlySkimmed") || context.mOptions.get("processMuonOnlySkimmedMultExtra") || context.mOptions.get("processMuonOnlySkimmedFlow") || context.mOptions.get("processMuonOnlyVertexingSkimmed"); fEnableMuonMixingHistos = context.mOptions.get("processMixingAllSkimmed") || context.mOptions.get("processMixingMuonSkimmed") || context.mOptions.get("processMixingMuonSkimmedFlow"); fEnableBarrelMuonHistos = context.mOptions.get("processElectronMuonSkimmed"); fEnableBarrelMuonMixingHistos = context.mOptions.get("processMixingElectronMuonSkimmed"); @@ -1748,10 +1731,6 @@ struct AnalysisSameEventPairing { if (fConfigOptions.noCorr) { VarManager::SetupFwdDCAFitterNoCorr(); - } else if (fConfigOptions.corrFullGeo || (fConfigOptions.useKFVertexing && fConfigOptions.propToPCA)) { - if (!o2::base::GeometryManager::isGeometryLoaded()) { - fCCDB->get(fConfigCCDB.geoPath); - } } else { fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile(fCCDB->get(fConfigCCDB.lutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); @@ -1829,35 +1808,22 @@ struct AnalysisSameEventPairing { void initParamsFromCCDB(uint64_t timestamp, int runNumber, bool withTwoProngFitter = true) { - if (fConfigOptions.useRemoteField.value) { - auto grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, timestamp); - float magField = 0.0; - if (grpmag != nullptr) { - magField = grpmag->getNominalL3Field(); - } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); - } - if (withTwoProngFitter) { - if (fConfigOptions.useKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(magField); - } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); - } - } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // needed because take in varmanager Bz from fgFitterTwoProngBarrel for PhiV calculations - } + auto grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, timestamp); + float magField = 0.0; + if (grpmag != nullptr) { + magField = grpmag->getNominalL3Field(); } else { - if (withTwoProngFitter) { - if (fConfigOptions.useKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(fConfigOptions.magField.value); - } else { - VarManager::SetupTwoProngDCAFitter(fConfigOptions.magField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(fConfigOptions.magField.value, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); - } + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + } + if (withTwoProngFitter) { + if (fConfigOptions.useKFVertexing.value) { + VarManager::SetupTwoProngKFParticle(magField); } else { - VarManager::SetupTwoProngDCAFitter(fConfigOptions.magField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // needed because take in varmanager Bz from fgFitterTwoProngBarrel for PhiV calculations + VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); } + } else { + VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // needed because take in varmanager Bz from fgFitterTwoProngBarrel for PhiV calculations } std::map metadataRCT, header; @@ -1938,7 +1904,7 @@ struct AnalysisSameEventPairing { }*/ auto twoTrackFilter = static_cast(0); - uint32_t dileptonMcDecision = static_cast(0); // placeholder, copy of the dqEfficiency.cxx one + auto dileptonMcDecision = static_cast(0); // placeholder, copy of the dqEfficiency.cxx one int sign1 = 0; int sign2 = 0; // Reserve capacity for the output tables to avoid repeated reallocations @@ -2071,7 +2037,7 @@ struct AnalysisSameEventPairing { VarManager::FillPairCollision(event, t1, t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigOptions.propToPCA); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -2199,7 +2165,7 @@ struct AnalysisSameEventPairing { VarManager::FillPairCollision(event, t1, t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigOptions.propToPCA); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -2215,49 +2181,47 @@ struct AnalysisSameEventPairing { dileptonInfoList(event.collisionId(), event.posX(), event.posY(), event.posZ()); } - if constexpr (TTwoProngFitter) { - dimuonsExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingLz], VarManager::fgValues[VarManager::kVertexingLxy]); - if (fConfigOptions.flatTables.value) { - dimuonAllList(event.posX(), event.posY(), event.posZ(), event.numContrib(), - event.selection_raw(), evSel, - -999., -999., -999., - VarManager::fgValues[VarManager::kMass], - false, - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - VarManager::fgValues[VarManager::kPt1], VarManager::fgValues[VarManager::kEta1], VarManager::fgValues[VarManager::kPhi1], t1.sign(), - VarManager::fgValues[VarManager::kPt2], VarManager::fgValues[VarManager::kEta2], VarManager::fgValues[VarManager::kPhi2], t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), - 0., 0., - t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), - t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), - t1.chi2(), t2.chi2(), - -999., -999., -999., -999., - -999., -999., -999., -999., - -999., -999., -999., -999., - -999., -999., -999., -999., - (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)), (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)), - true, true, - VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR2EP_AB], VarManager::fgValues[VarManager::kR2SP_AB], VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kCos3DeltaPhi], - VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], VarManager::fgValues[VarManager::kVertexingSV]); - } - if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { - if constexpr (eventHasQvector || eventHasQvectorCentr) { - dileptonFlowList(event.collisionId(), VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), isFirst, - VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kR2SP_AB], VarManager::fgValues[VarManager::kR2SP_AC], VarManager::fgValues[VarManager::kR2SP_BC], - VarManager::fgValues[VarManager::kU3Q3], VarManager::fgValues[VarManager::kR3SP], - VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kR2EP_AB], VarManager::fgValues[VarManager::kR2EP_AC], VarManager::fgValues[VarManager::kR2EP_BC], - VarManager::fgValues[VarManager::kCos3DeltaPhi], VarManager::fgValues[VarManager::kR3EP], - VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], - VarManager::fgValues[VarManager::kCORR2REF], VarManager::fgValues[VarManager::kCORR4REF], VarManager::fgValues[VarManager::kM11REF], VarManager::fgValues[VarManager::kM1111REF], - VarManager::fgValues[VarManager::kMultDimuons], VarManager::fgValues[VarManager::kMultA]); - } + dimuonsExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingLz], VarManager::fgValues[VarManager::kVertexingLxy]); + if (fConfigOptions.flatTables.value) { + dimuonAllList(event.posX(), event.posY(), event.posZ(), event.numContrib(), + event.selection_raw(), evSel, + -999., -999., -999., + VarManager::fgValues[VarManager::kMass], + false, + VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], + VarManager::fgValues[VarManager::kPt1], VarManager::fgValues[VarManager::kEta1], VarManager::fgValues[VarManager::kPhi1], t1.sign(), + VarManager::fgValues[VarManager::kPt2], VarManager::fgValues[VarManager::kEta2], VarManager::fgValues[VarManager::kPhi2], t2.sign(), + t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), + 0., 0., + t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), + t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), + t1.chi2(), t2.chi2(), + -999., -999., -999., -999., + -999., -999., -999., -999., + -999., -999., -999., -999., + -999., -999., -999., -999., + (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)), (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)), + true, true, + VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR2EP_AB], VarManager::fgValues[VarManager::kR2SP_AB], VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], VarManager::fgValues[VarManager::kVertexingSV]); + } + if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { + if constexpr (eventHasQvector || eventHasQvectorCentr) { + dileptonFlowList(event.collisionId(), VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), isFirst, + VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kR2SP_AB], VarManager::fgValues[VarManager::kR2SP_AC], VarManager::fgValues[VarManager::kR2SP_BC], + VarManager::fgValues[VarManager::kU3Q3], VarManager::fgValues[VarManager::kR3SP], + VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kR2EP_AB], VarManager::fgValues[VarManager::kR2EP_AC], VarManager::fgValues[VarManager::kR2EP_BC], + VarManager::fgValues[VarManager::kCos3DeltaPhi], VarManager::fgValues[VarManager::kR3EP], + VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kCORR2REF], VarManager::fgValues[VarManager::kCORR4REF], VarManager::fgValues[VarManager::kM11REF], VarManager::fgValues[VarManager::kM1111REF], + VarManager::fgValues[VarManager::kMultDimuons], VarManager::fgValues[VarManager::kMultA]); } } if (t1.sign() != t2.sign()) { @@ -2308,7 +2272,9 @@ struct AnalysisSameEventPairing { VarManager::fgValues[VarManager::kVtxX], VarManager::fgValues[VarManager::kVtxY], VarManager::fgValues[VarManager::kVtxZ], VarManager::fgValues[VarManager::kDCAxy1], VarManager::fgValues[VarManager::kDCAz1], VarManager::fgValues[VarManager::kITSclusterMap1], VarManager::fgValues[VarManager::kTPCnSigmaEl1], VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kITSclusterMap2], VarManager::fgValues[VarManager::kTPCnSigmaEl2], isAmbiInBunch, isAmbiOutOfBunch, VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]); if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][0].Data(), dqtablereader_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass(histNames[icut][0].Data(), dqtablereader_helpers::varValues()); + } if (useMiniTree.fConfigMiniTree) { auto t1 = a1.template reducedmuon_as(); auto t2 = a2.template reducedmuon_as(); @@ -2328,7 +2294,7 @@ struct AnalysisSameEventPairing { } } } - if (fConfigAmbiguousMuonHistograms) { + if (fConfigQA && fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass(histNames[icut][3 + histIdxOffset].Data(), dqtablereader_helpers::varValues()); } @@ -2341,12 +2307,14 @@ struct AnalysisSameEventPairing { } } if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(histNames[icut][0].Data(), dqtablereader_helpers::varValues()); - if (isAmbiExtra) { - fHistMan->FillHistClass(histNames[icut][3].Data(), dqtablereader_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass(histNames[icut][0].Data(), dqtablereader_helpers::varValues()); + if (isAmbiExtra) { + fHistMan->FillHistClass(histNames[icut][3].Data(), dqtablereader_helpers::varValues()); + } } } - } else { + } else if (fConfigQA) { if (sign1 > 0) { if constexpr (TPairType == VarManager::kDecayToMuMu) { fHistMan->FillHistClass(histNames[icut][1].Data(), dqtablereader_helpers::varValues()); @@ -2391,21 +2359,23 @@ struct AnalysisSameEventPairing { } } } - for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); iPairCut++) { - AnalysisCompositeCut cut = fPairCuts.at(iPairCut); - if (!(cut.IsSelected(dqtablereader_helpers::varValues()))) { // apply pair cuts - continue; - } - if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][0].Data(), dqtablereader_helpers::varValues()); - } else { - if (sign1 > 0) { - fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][1].Data(), dqtablereader_helpers::varValues()); + if (fConfigQA) { + for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); iPairCut++) { + AnalysisCompositeCut cut = fPairCuts.at(iPairCut); + if (!(cut.IsSelected(dqtablereader_helpers::varValues()))) { // apply pair cuts + continue; + } + if (sign1 * sign2 < 0) { + fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][0].Data(), dqtablereader_helpers::varValues()); } else { - fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][2].Data(), dqtablereader_helpers::varValues()); + if (sign1 > 0) { + fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][1].Data(), dqtablereader_helpers::varValues()); + } else { + fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][2].Data(), dqtablereader_helpers::varValues()); + } } - } - } // end loop (pair cuts) + } // end loop (pair cuts) + } } } // end loop (cuts) @@ -2461,18 +2431,22 @@ struct AnalysisSameEventPairing { if (fConfigNRotations.value == 1) { VarManager::FillPairRotation(t1, t2, fConfigNRotations.value); if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); - if (isAmbiExtra) { - fHistMan->FillHistClass(Form("PairsBarrelTRPM_ambiguousextra_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass(Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (isAmbiExtra) { + fHistMan->FillHistClass(Form("PairsBarrelTRPM_ambiguousextra_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + } } } } else if (fConfigNRotations.value == 3) { for (int irot = 1; irot <= fConfigNRotations.value; irot++) { VarManager::FillPairRotation(t1, t2, irot); if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); - if (isAmbiExtra) { - fHistMan->FillHistClass(Form("PairsBarrelTRPM_ambiguousextra_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass(Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (isAmbiExtra) { + fHistMan->FillHistClass(Form("PairsBarrelTRPM_ambiguousextra_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + } } } } @@ -2531,7 +2505,9 @@ struct AnalysisSameEventPairing { VarManager::FillPairMEAcrossTFs(t1, t2); for (int icut = 0; icut < ncuts; icut++) { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { - fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + } } } } @@ -2545,7 +2521,9 @@ struct AnalysisSameEventPairing { VarManager::FillPairMEAcrossTFs(t1, t2); for (int icut = 0; icut < ncuts; icut++) { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { - fHistMan->FillHistClass(Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass(Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + } } } } @@ -2561,7 +2539,9 @@ struct AnalysisSameEventPairing { VarManager::FillPairMEAcrossTFs(t1, t2); for (int icut = 0; icut < ncuts; icut++) { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { - fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + } } } } @@ -2575,7 +2555,9 @@ struct AnalysisSameEventPairing { VarManager::FillPairMEAcrossTFs(t1, t2); for (int icut = 0; icut < ncuts; icut++) { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { - fHistMan->FillHistClass(Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (fConfigQA) { + fHistMan->FillHistClass(Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + } } } } @@ -2696,60 +2678,62 @@ struct AnalysisSameEventPairing { isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); isUnambiguous = !((twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)) || (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31))); - if (pairSign == 0) { - if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][3].Data(), dqtablereader_helpers::varValues()); - if (fConfigAmbiguousMuonHistograms) { - if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][15].Data(), dqtablereader_helpers::varValues()); - } - if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][18].Data(), dqtablereader_helpers::varValues()); - } - if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][21].Data(), dqtablereader_helpers::varValues()); - } - } - } - if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); - } - } else { - if (pairSign > 0) { + if (fConfigQA) { + if (pairSign == 0) { if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][4].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][3].Data(), dqtablereader_helpers::varValues()); if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][16].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][15].Data(), dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][19].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][18].Data(), dqtablereader_helpers::varValues()); } if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][22].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][21].Data(), dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); } } else { - if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][5].Data(), dqtablereader_helpers::varValues()); - if (fConfigAmbiguousMuonHistograms) { - if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][17].Data(), dqtablereader_helpers::varValues()); - } - if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][20].Data(), dqtablereader_helpers::varValues()); + if (pairSign > 0) { + if constexpr (TPairType == VarManager::kDecayToMuMu) { + fHistMan->FillHistClass(histNames[icut][4].Data(), dqtablereader_helpers::varValues()); + if (fConfigAmbiguousMuonHistograms) { + if (isAmbiInBunch) { + fHistMan->FillHistClass(histNames[icut][16].Data(), dqtablereader_helpers::varValues()); + } + if (isAmbiOutOfBunch) { + fHistMan->FillHistClass(histNames[icut][19].Data(), dqtablereader_helpers::varValues()); + } + if (isUnambiguous) { + fHistMan->FillHistClass(histNames[icut][22].Data(), dqtablereader_helpers::varValues()); + } } - if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][23].Data(), dqtablereader_helpers::varValues()); + } + if constexpr (TPairType == VarManager::kDecayToEE) { + fHistMan->FillHistClass(Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + } + } else { + if constexpr (TPairType == VarManager::kDecayToMuMu) { + fHistMan->FillHistClass(histNames[icut][5].Data(), dqtablereader_helpers::varValues()); + if (fConfigAmbiguousMuonHistograms) { + if (isAmbiInBunch) { + fHistMan->FillHistClass(histNames[icut][17].Data(), dqtablereader_helpers::varValues()); + } + if (isAmbiOutOfBunch) { + fHistMan->FillHistClass(histNames[icut][20].Data(), dqtablereader_helpers::varValues()); + } + if (isUnambiguous) { + fHistMan->FillHistClass(histNames[icut][23].Data(), dqtablereader_helpers::varValues()); + } } } - } - if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if constexpr (TPairType == VarManager::kDecayToEE) { + fHistMan->FillHistClass(Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + } } } } @@ -2907,13 +2891,15 @@ struct AnalysisSameEventPairing { if (itHist == histNames.end()) { continue; } - if (sign1 * sign2 < 0) { // Opposite Sign - fHistMan->FillHistClass(itHist->second[0].Data(), dqtablereader_helpers::varValues()); - } else { // Like Sign - if (sign1 > 0) { - fHistMan->FillHistClass(itHist->second[1].Data(), dqtablereader_helpers::varValues()); - } else { - fHistMan->FillHistClass(itHist->second[2].Data(), dqtablereader_helpers::varValues()); + if (fConfigQA) { + if (sign1 * sign2 < 0) { // Opposite Sign + fHistMan->FillHistClass(itHist->second[0].Data(), dqtablereader_helpers::varValues()); + } else { // Like Sign + if (sign1 > 0) { + fHistMan->FillHistClass(itHist->second[1].Data(), dqtablereader_helpers::varValues()); + } else { + fHistMan->FillHistClass(itHist->second[2].Data(), dqtablereader_helpers::varValues()); + } } } } // end pair cut loop @@ -2976,13 +2962,15 @@ struct AnalysisSameEventPairing { if (itHist == histNames.end() || itHist->second.size() < 6) { continue; } - if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(itHist->second[3].Data(), dqtablereader_helpers::varValues()); - } else { - if (sign1 > 0) { - fHistMan->FillHistClass(itHist->second[4].Data(), dqtablereader_helpers::varValues()); + if (fConfigQA) { + if (sign1 * sign2 < 0) { + fHistMan->FillHistClass(itHist->second[3].Data(), dqtablereader_helpers::varValues()); } else { - fHistMan->FillHistClass(itHist->second[5].Data(), dqtablereader_helpers::varValues()); + if (sign1 > 0) { + fHistMan->FillHistClass(itHist->second[4].Data(), dqtablereader_helpers::varValues()); + } else { + fHistMan->FillHistClass(itHist->second[5].Data(), dqtablereader_helpers::varValues()); + } } } } // end pair cut loop @@ -3080,19 +3068,25 @@ struct AnalysisSameEventPairing { void processMuonOnlySkimmed(MyEventsVtxCovSelected const& events, o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); + runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); } void processMuonOnlySkimmedMultExtra(MyEventsVtxCovSelectedMultExtra const& events, o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); + runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); } void processMuonOnlySkimmedFlow(MyEventsQvectorCentrSelected const& events, o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); + runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); + } + + void processMuonOnlyVertexingSkimmed(MyEventsVtxCovSelected const& events, + o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) + { + runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); } void processElectronMuonSkimmed(MyEventsVtxCovSelected const& events, @@ -3163,6 +3157,7 @@ struct AnalysisSameEventPairing { PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, "Run muon only pairing, with skimmed tracks", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmedMultExtra, "Run muon only pairing, with skimmed tracks", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmedFlow, "Run muon only pairing, with skimmed tracks and flow", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, "Run muon only pairing with two-prong vertexing, with skimmed tracks", false); PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, "Run electron-muon pairing, with skimmed tracks/muons", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingAllSkimmed, "Run all types of mixed pairing, with skimmed tracks/muons", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelSkimmed, "Run barrel type mixing pairing, with skimmed tracks", false); @@ -3205,12 +3200,9 @@ struct AnalysisAsymmetricPairing { o2::framework::Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigGRPMagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - o2::framework::Configurable fConfigUseRemoteField{"cfgUseRemoteField", false, "Choose whether to fetch the magnetic field from ccdb or set it manually"}; - o2::framework::Configurable fConfigMagField{"cfgMagField", 5.0f, "Manually set magnetic field"}; o2::framework::Configurable fConfigUseKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; o2::framework::Configurable fConfigUseAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"}; - o2::framework::Configurable fConfigPropToPCA{"cfgPropToPCA", false, "Propagate tracks to secondary vertex"}; o2::framework::Configurable fConfigLutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; o2::framework::Configurable fConfigFetchInteractionRate{"cfgFetchInteractionRate", false, "Fetch event-wise interaction rate from the CCDB"}; o2::framework::Configurable fConfigIRSource{"cfgIRSource", "ZNC hadronic", "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> ZNC hadronic)"}; @@ -3282,7 +3274,7 @@ struct AnalysisAsymmetricPairing { if (addPairCutsStr != "") { std::vector addPairCuts = o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); for (auto const& t : addPairCuts) { - fPairCuts.push_back(static_cast(t)); + fPairCuts.push_back(dynamic_cast(t)); cutNamesStr += Form(",%s", t->GetName()); } } @@ -3488,40 +3480,24 @@ struct AnalysisAsymmetricPairing { void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) { - if (fConfigUseRemoteField.value) { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPMagPath, timestamp); - float magField = 0.0; - if (grpmag != nullptr) { - magField = grpmag->getNominalL3Field(); - } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); - } - if (isTriplets) { - if (fConfigUseKFVertexing.value) { - VarManager::SetupThreeProngKFParticle(magField); - } else { - VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); - } + auto grpmag = fCCDB->getForTimeStamp(fConfigGRPMagPath, timestamp); + float magField = 0.0; + if (grpmag != nullptr) { + magField = grpmag->getNominalL3Field(); + } else { + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + } + if (isTriplets) { + if (fConfigUseKFVertexing.value) { + VarManager::SetupThreeProngKFParticle(magField); } else { - if (fConfigUseKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(magField); - } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); // TODO: get these parameters from Configurables - } + VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); } } else { - if (isTriplets) { - if (fConfigUseKFVertexing.value) { - VarManager::SetupThreeProngKFParticle(fConfigMagField.value); - } else { - VarManager::SetupThreeProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); - } + if (fConfigUseKFVertexing.value) { + VarManager::SetupTwoProngKFParticle(magField); } else { - if (fConfigUseKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(fConfigMagField.value); - } else { - VarManager::SetupTwoProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); // TODO: get these parameters from Configurables - } + VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); // TODO: get these parameters from Configurables } } } @@ -3588,8 +3564,8 @@ struct AnalysisAsymmetricPairing { for (auto const& [a1, a2] : combinations(o2::soa::CombinationsFullIndexPolicy(groupedLegAAssocs, groupedLegBAssocs))) { auto twoTrackFilter = static_cast(0); - uint32_t twoTrackCommonFilter = static_cast(0); - uint32_t pairFilter = static_cast(0); + auto twoTrackCommonFilter = static_cast(0); + auto pairFilter = static_cast(0); for (int icut = 0; icut < fNLegCuts; ++icut) { // Find leg pair definitions both candidates participate in if ((a1.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) && (a2.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut])) { @@ -3641,7 +3617,7 @@ struct AnalysisAsymmetricPairing { VarManager::FillPair(t1, t2); if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigPropToPCA); + VarManager::FillPairVertexing(event, t1, t2); } // Fill histograms @@ -3788,8 +3764,8 @@ struct AnalysisAsymmetricPairing { template void readTriplet(TTrackAssoc const& a1, TTrackAssoc const& a2, TTrackAssoc const& a3, TTracks const& /*tracks*/, TEvent const& event, VarManager::PairCandidateType tripletType) { - uint32_t threeTrackFilter = static_cast(0); - uint32_t threeTrackCommonFilter = static_cast(0); + auto threeTrackFilter = static_cast(0); + auto threeTrackCommonFilter = static_cast(0); for (int icut = 0; icut < fNLegCuts; ++icut) { // Find out which leg cut combinations the triplet passes if ((a1.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) && (a2.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut]) && (a3.isBarrelSelected_raw() & fConstructedLegCFilterMasksMap[icut])) { @@ -3955,9 +3931,7 @@ struct AnalysisDileptonTrack { o2::framework::Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigMixingDepth{"cfgMixingDepth", 5, "Event mixing pool depth"}; - o2::framework::Configurable fConfigUseRemoteField{"cfgUseRemoteField", false, "Chose whether to fetch the magnetic field from ccdb or set it manually"}; o2::framework::Configurable fConfigGRPmagPath{"cfgGrpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - o2::framework::Configurable fConfigMagField{"cfgMagField", 5.0f, "Manually set magnetic field"}; o2::framework::Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; @@ -4246,31 +4220,23 @@ struct AnalysisDileptonTrack { // init parameters from CCDB void initParamsFromCCDB(uint64_t timestamp) { - if (fConfigUseRemoteField.value) { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); - float magField = 0.0; - if (grpmag != nullptr) { - magField = grpmag->getNominalL3Field(); - } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); - } - if (fConfigUseKFVertexing.value) { - VarManager::SetupThreeProngKFParticle(magField); - } else { - VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - } + auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); + float magField = 0.0; + if (grpmag != nullptr) { + magField = grpmag->getNominalL3Field(); } else { - if (fConfigUseKFVertexing.value) { - VarManager::SetupThreeProngKFParticle(fConfigMagField.value); - } else { - VarManager::SetupThreeProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - } + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + } + if (fConfigUseKFVertexing.value) { + VarManager::SetupThreeProngKFParticle(magField); + } else { + VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables } } void initAccFromCCDB(uint64_t timestamp) { - TList* listAccs = fCCDB->getForTimeStamp(fConfigAccCCDBPath, timestamp); + auto listAccs = fCCDB->getForTimeStamp(fConfigAccCCDBPath, timestamp); if (!listAccs) { LOG(fatal) << "Problem getting TList object with efficiencies!"; } @@ -4639,7 +4605,7 @@ struct AnalysisDileptonTrack { continue; } for (uint32_t iTrackCut = 0; iTrackCut < fTrackCutNames.size(); iTrackCut++) { - if (trackSelection & (static_cast(1) << iTrackCut)) { + if ((trackSelection & (static_cast(1) << iTrackCut)) != 0) { fHistMan->FillHistClass(Form("DileptonTrackME_%s_%s", fTrackCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data()), dqtablereader_helpers::varValues()); if (fConfigEnergycorrelator) { fHistMan->FillHistClass(Form("DileptonTrackECME_%s_%s", fTrackCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data()), dqtablereader_helpers::varValues()); @@ -4687,7 +4653,7 @@ struct AnalysisDileptonTrack { continue; } for (uint32_t iTrackCut = 0; iTrackCut < fTrackCutNames.size(); iTrackCut++) { - if (muonSelection & (static_cast(1) << iTrackCut)) { + if ((muonSelection & (static_cast(1) << iTrackCut)) != 0) { fHistMan->FillHistClass(Form("DileptonTrackME_%s_%s", fTrackCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data()), dqtablereader_helpers::varValues()); } } @@ -4722,9 +4688,7 @@ struct AnalysisDileptonTrackTrack { o2::framework::Configurable fConfigSetupFourProngFitter{"cfgSetupFourProngFitter", false, "Use DCA for secondary vertex reconstruction (DCAFitter is used by default)"}; o2::framework::Configurable fConfigUseKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; - o2::framework::Configurable fConfigUseRemoteField{"cfgUseRemoteField", false, "Chose whether to fetch the magnetic field from ccdb or set it manually"}; o2::framework::Configurable fConfigGRPmagPath{"cfgGrpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - o2::framework::Configurable fConfigMagField{"cfgMagField", 5.0f, "Manually set magnetic field"}; o2::framework::Produces DileptonTrackTrackTable; @@ -4805,30 +4769,19 @@ struct AnalysisDileptonTrackTrack { // init parameters from CCDB void initParamsFromCCDB(uint64_t timestamp) { - if (fConfigUseRemoteField.value) { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); - float magField = 0.0; - if (grpmag != nullptr) { - magField = grpmag->getNominalL3Field(); - } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); - } - if (fConfigUseKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(magField); - VarManager::SetupFourProngKFParticle(magField); - } else if (fConfigSetupFourProngFitter.value) { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - VarManager::SetupFourProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - } + auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); + float magField = 0.0; + if (grpmag != nullptr) { + magField = grpmag->getNominalL3Field(); } else { - if (fConfigUseKFVertexing.value) { - VarManager::SetupTwoProngKFParticle(fConfigMagField.value); - VarManager::SetupFourProngKFParticle(fConfigMagField.value); - } else if (fConfigSetupFourProngFitter.value) { - LOGP(info, "Setting up DCA fitter for two and four prong candidates"); - VarManager::SetupTwoProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - VarManager::SetupFourProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - } + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + } + if (fConfigUseKFVertexing.value) { + VarManager::SetupTwoProngKFParticle(magField); + VarManager::SetupFourProngKFParticle(magField); + } else if (fConfigSetupFourProngFitter.value) { + VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables + VarManager::SetupFourProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables } } diff --git a/PWGDQ/Tasks/tableReader_withAssoc_direct.cxx b/PWGDQ/Tasks/tableReader_withAssoc_direct.cxx index 95fceb1e889..7bbff3763c9 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc_direct.cxx +++ b/PWGDQ/Tasks/tableReader_withAssoc_direct.cxx @@ -82,8 +82,6 @@ using namespace o2::framework::expressions; using namespace o2::aod; using namespace o2::common::core; -Zorro zorro; - // Some definitions namespace o2::aod { @@ -325,20 +323,22 @@ struct AnalysisEventSelection { // RCT flag checker o2::aod::rctsel::RCTFlagsChecker rctChecker{"CBT"}; + Zorro zorro; + HistogramManager* fHistMan = nullptr; MixingHandler* fMixHandler = nullptr; - AnalysisCompositeCut* fEventCut; + AnalysisCompositeCut* fEventCut = nullptr; o2::parameters::GRPObject* fGrpMagRun2 = nullptr; // for run 2, we access the GRPObject from GLO/GRP/GRP o2::parameters::GRPMagField* fGrpMag = nullptr; // for run 3, we access GRPMagField from GLO/Config/GRPMagField - Service fCCDB; + Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; std::map fSelMap; // key: reduced event global index, value: event selection decision std::map> fBCCollMap; // key: global BC, value: vector of reduced event global indices - int fCurrentRun; + int fCurrentRun = -1; void init(o2::framework::InitContext& context) { @@ -370,7 +370,7 @@ struct AnalysisEventSelection { if (fConfigQA) { fHistMan = new HistogramManager("analysisHistos", "", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(true); - fHistMan->SetDefaultVarNames(VarManager::fgVariableNames, VarManager::fgVariableUnits); + fHistMan->SetDefaultVarNames(static_cast(VarManager::fgVariableNames), static_cast(VarManager::fgVariableUnits)); DefineHistograms(fHistMan, "TimeFrameStats;Event_BeforeCuts;Event_AfterCuts;", fConfigAddEventHistogram.value.data()); if (fConfigCheckSplitCollisions) { DefineHistograms(fHistMan, "OutOfBunchCorrelations;SameBunchCorrelations;", ""); @@ -449,7 +449,7 @@ struct AnalysisEventSelection { } VarManager::SetCalibrationType(fConfigPostCalibTPC.fConfigTPCpostCalibType, fConfigPostCalibTPC.fConfigTPCuseInterpolatedCalib); } - if (fIsRun2 == true) { + if (fIsRun2) { fGrpMagRun2 = fCCDB->getForTimeStamp(fConfigCCDB.fConfigGrpMagPathRun2, bcs.begin().timestamp()); if (fGrpMagRun2 != nullptr) { o2::base::Propagator::initFieldFromGRP(fGrpMagRun2); @@ -481,7 +481,7 @@ struct AnalysisEventSelection { VarManager::FillTimeFrame(bcs); VarManager::FillTimeFrame(events); if (fConfigQA) { - fHistMan->FillHistClass("TimeFrameStats", VarManager::fgValues); + fHistMan->FillHistClass("TimeFrameStats", static_cast(VarManager::fgValues)); } fSelMap.clear(); @@ -496,7 +496,7 @@ struct AnalysisEventSelection { // the hash table is joined to the events by row order, so publish one row per event before any event selection if (fMixHandler != nullptr) { - int hh = fMixHandler->FindEventCategory(VarManager::fgValues); + int hh = fMixHandler->FindEventCategory(static_cast(VarManager::fgValues)); // events outside the mixing limits (-1) get a distinct negative hash so that they are not mixed with each other if (hh < 0) { hh = -1 - static_cast(event.globalIndex()); @@ -506,33 +506,33 @@ struct AnalysisEventSelection { bool decision = false; if (fConfigQA) { - fHistMan->FillHistClass("Event_BeforeCuts", VarManager::fgValues); + fHistMan->FillHistClass("Event_BeforeCuts", static_cast(VarManager::fgValues)); } if (fConfigZorro.fConfigRunZorro) { zorro.setBaseCCDBPath(fConfigZorro.fConfigCcdbPathZorro.value); zorro.setBCtolerance(fConfigZorro.fBcTolerance); zorro.initCCDB(fCCDB.service, fCurrentRun, bc.timestamp(), fConfigZorro.fConfigZorroTrigMask.value); - zorro.populateExternalHists(fCurrentRun, reinterpret_cast(fStatsList->At(kStatsZorroInfo)), reinterpret_cast(fStatsList->At(kStatsZorroSel))); + zorro.populateExternalHists(fCurrentRun, dynamic_cast(fStatsList->At(kStatsZorroInfo)), dynamic_cast(fStatsList->At(kStatsZorroSel))); - if (!fEventCut->IsSelected(VarManager::fgValues) || (fConfigRCT.fConfigUseRCT.value && !rctChecker(event))) { + if (!fEventCut->IsSelected(static_cast(VarManager::fgValues)) || (fConfigRCT.fConfigUseRCT.value && !rctChecker(event))) { continue; } - bool zorroSel = zorro.isSelected(bc.globalBC(), fConfigZorro.fBcTolerance, reinterpret_cast(fStatsList->At(kStatsZorroSel))); + bool zorroSel = zorro.isSelected(bc.globalBC(), fConfigZorro.fBcTolerance, dynamic_cast(fStatsList->At(kStatsZorroSel))); if (fConfigZorro.fConfigRunZorroSel && (!zorroSel)) { continue; } } else { - if (!fEventCut->IsSelected(VarManager::fgValues) || (fConfigRCT.fConfigUseRCT.value && !rctChecker(event))) { + if (!fEventCut->IsSelected(static_cast(VarManager::fgValues)) || (fConfigRCT.fConfigUseRCT.value && !rctChecker(event))) { continue; } } decision = true; if (fConfigQA) { - fHistMan->FillHistClass("Event_AfterCuts", VarManager::fgValues); + fHistMan->FillHistClass("Event_AfterCuts", static_cast(VarManager::fgValues)); } fSelMap[event.globalIndex()] = decision; @@ -572,7 +572,7 @@ struct AnalysisEventSelection { collisionSplittingMap[*ev2It] = true; } if (fConfigQA) { - fHistMan->FillHistClass("SameBunchCorrelations", VarManager::fgValues); + fHistMan->FillHistClass("SameBunchCorrelations", static_cast(VarManager::fgValues)); } } // end second event loop } // end first event loop @@ -599,7 +599,7 @@ struct AnalysisEventSelection { collisionSplittingMap[ev2It] = true; } if (fConfigQA) { - fHistMan->FillHistClass("OutOfBunchCorrelations", VarManager::fgValues); + fHistMan->FillHistClass("OutOfBunchCorrelations", static_cast(VarManager::fgValues)); } } } @@ -607,7 +607,7 @@ struct AnalysisEventSelection { } // publish the table - uint32_t evSel = static_cast(0); + auto evSel = static_cast(0); for (auto& event : events) { evSel = 0; if (fSelMap[event.globalIndex()]) { // event passed the user cuts @@ -662,22 +662,23 @@ struct AnalysisTrackSelection { Configurable fConfigComputeTPCpostCalib{"cfgTPCpostCalib", false, "If true, compute TPC post-calibrated n-sigmas"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - Service fCCDB; - Service fTofResponse; + Service fCCDB{}; + Service fTofResponse{}; - HistogramManager* fHistMan; + HistogramManager* fHistMan = nullptr; std::vector fTrackCuts; std::vector fHistNamesReco; - int fCurrentRun; // current run (needed to detect run changes for loading CCDB parameters) + int fCurrentRun = 0; // current run (needed to detect run changes for loading CCDB parameters) std::map> fNAssocsInBunch; // key: track global index, value: vector of global index for events associated in-bunch (events that have in-bunch pileup or splitting) std::map> fNAssocsOutOfBunch; // key: track global index, value: vector of global index for events associated out-of-bunch (events that have no in-bunch pileup) void init(o2::framework::InitContext& context) { - if (context.mOptions.get("processDummy")) + if (context.mOptions.get("processDummy")) { return; + } VarManager::SetDefaultVarNames(); fCurrentRun = 0; @@ -696,7 +697,7 @@ struct AnalysisTrackSelection { if (addTrackCutsStr != "") { std::vector addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); for (auto& t : addTrackCuts) { - fTrackCuts.push_back(reinterpret_cast(t)); + fTrackCuts.push_back(dynamic_cast(t)); } } @@ -706,7 +707,7 @@ struct AnalysisTrackSelection { if (fConfigQA) { fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(VarManager::fgVariableNames, VarManager::fgVariableUnits); + fHistMan->SetDefaultVarNames(static_cast(VarManager::fgVariableNames), static_cast(VarManager::fgVariableUnits)); // Configure histogram classes for each track cut; TString histClasses = "TimeFrameStats;AssocsBarrel_BeforeCuts;"; @@ -745,8 +746,9 @@ struct AnalysisTrackSelection { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTimeFrame(events); VarManager::FillTimeFrame(tracks); - if (fConfigQA) - fHistMan->FillHistClass("TimeFrameStats", VarManager::fgValues); + if (fConfigQA) { + fHistMan->FillHistClass("TimeFrameStats", static_cast(VarManager::fgValues)); + } if (bcs.size() > 0 && fCurrentRun != bcs.begin().runNumber()) { if (fConfigComputeTPCpostCalib) { @@ -759,7 +761,7 @@ struct AnalysisTrackSelection { VarManager::SetCalibrationObject(VarManager::kTPCProtonSigma, calibList->FindObject("sigma_map_proton")); } - o2::parameters::GRPMagField* grpmag = fCCDB->getForTimeStamp(grpmagPath, bcs.begin().timestamp()); + auto grpmag = fCCDB->getForTimeStamp(grpmagPath, bcs.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { @@ -792,19 +794,21 @@ struct AnalysisTrackSelection { VarManager::FillTrack(track); // compute quantities which depend on the associated collision, such as DCA - if (track.collisionId() != event.globalIndex()) + if (track.collisionId() != event.globalIndex()) { VarManager::FillTrackCollision(track, event); + } - if (fConfigQA) - fHistMan->FillHistClass("AssocsBarrel_BeforeCuts", VarManager::fgValues); + if (fConfigQA) { + fHistMan->FillHistClass("AssocsBarrel_BeforeCuts", static_cast(VarManager::fgValues)); + } int iCut = 0; - uint32_t filterMap = static_cast(0); + auto filterMap = static_cast(0); for (auto cut = fTrackCuts.begin(); cut != fTrackCuts.end(); cut++, iCut++) { - if ((*cut)->IsSelected(VarManager::fgValues)) { + if ((*cut)->IsSelected(static_cast(VarManager::fgValues))) { filterMap |= (static_cast(1) << iCut); if (fConfigQA) { - fHistMan->FillHistClass(fHistNamesReco[iCut], VarManager::fgValues); + fHistMan->FillHistClass(fHistNamesReco[iCut], static_cast(VarManager::fgValues)); } } } // end loop over cuts @@ -846,7 +850,7 @@ struct AnalysisTrackSelection { VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", VarManager::fgValues); + fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", static_cast(VarManager::fgValues)); } // end loop over in-bunch ambiguous tracks for (auto& [trackIdx, evIndices] : fNAssocsOutOfBunch) { @@ -857,7 +861,7 @@ struct AnalysisTrackSelection { VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", VarManager::fgValues); + fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", static_cast(VarManager::fgValues)); } // end loop over out-of-bunch ambiguous tracks } @@ -907,9 +911,9 @@ struct AnalysisPrefilterSelection { Configurable fPropTrack{"cfgPropTrack", false, "Propagate tracks to associated collision to recalculate DCA and momentum vector"}; std::map fPrefilterMap; - AnalysisCompositeCut* fPairCut; - uint32_t fPrefilterMask; - int fPrefilterCutBit; + AnalysisCompositeCut* fPairCut = nullptr; + uint32_t fPrefilterMask = 0; + int fPrefilterCutBit = -1; Preslice trackAssocsPerCollision = aod::track_association::collisionId; @@ -1015,7 +1019,7 @@ struct AnalysisPrefilterSelection { bool track1Loose = assoc1.isBarrelSelected_bit(fPrefilterCutBit); bool track2Loose = assoc2.isBarrelSelected_bit(fPrefilterCutBit); - if (!((track1Candidate > 0 && track2Loose) || (track2Candidate > 0 && track1Loose))) { + if ((track1Candidate == 0 || !track2Loose) && (track2Candidate == 0 || !track1Loose)) { continue; } @@ -1025,7 +1029,7 @@ struct AnalysisPrefilterSelection { VarManager::FillPairCollision(event, track1, track2); } // if the pair fullfils the criteria, add an entry into the prefilter map for the two tracks - if (fPairCut->IsSelected(VarManager::fgValues)) { + if (fPairCut->IsSelected(static_cast(VarManager::fgValues))) { if (fPrefilterMap.find(track1.globalIndex()) == fPrefilterMap.end() && track1Candidate > 0) { fPrefilterMap[track1.globalIndex()] = track1Candidate; } @@ -1062,7 +1066,7 @@ struct AnalysisPrefilterSelection { // auto track = assoc.template track_as(); mymap = -1; // if (fPrefilterMap.find(track.globalIndex()) != fPrefilterMap.end()) { - if (fPrefilterMap.find(assoc.trackId()) != fPrefilterMap.end()) { + if (fPrefilterMap.contains(assoc.trackId())) { // NOTE: publish the bitwise negated bits (~), so there will be zeroes for cuts that failed the prefiltering and 1 everywhere else // mymap = ~fPrefilterMap[track.globalIndex()]; mymap = ~fPrefilterMap[assoc.trackId()]; @@ -1103,7 +1107,7 @@ struct AnalysisMuonSelection { Configurable geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; } fConfigCCDB; - Service fCCDB; + Service fCCDB{}; HistogramManager* fHistMan = nullptr; std::vector fMuonCuts; @@ -1133,7 +1137,7 @@ struct AnalysisMuonSelection { if (addCutsStr != "") { std::vector addCuts = dqcuts::GetCutsFromJSON(addCutsStr.Data()); for (auto& t : addCuts) { - fMuonCuts.push_back(reinterpret_cast(t)); + fMuonCuts.push_back(dynamic_cast(t)); } } @@ -1143,7 +1147,7 @@ struct AnalysisMuonSelection { if (fHistMan == nullptr) { fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(VarManager::fgVariableNames, VarManager::fgVariableUnits); + fHistMan->SetDefaultVarNames(static_cast(VarManager::fgVariableNames), static_cast(VarManager::fgVariableUnits)); TString histDirNames = "TrackMuon_BeforeCuts;"; for (auto& cut : fMuonCuts) { @@ -1177,7 +1181,7 @@ struct AnalysisMuonSelection { fNAssocsOutOfBunch.clear(); if (bcs.size() > 0 && fCurrentRun != bcs.begin().runNumber()) { - o2::parameters::GRPMagField* grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, bcs.begin().timestamp()); + auto grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, bcs.begin().timestamp()); if (grpmag != nullptr) { o2::base::Propagator::initFieldFromGRP(grpmag); VarManager::SetMagneticField(grpmag->getNominalL3Field()); @@ -1191,7 +1195,7 @@ struct AnalysisMuonSelection { if (fConfigPublishAmbiguity) { muonAmbiguities.reserve(muons.size()); } - uint32_t filterMap = static_cast(0); + auto filterMap = static_cast(0); int iCut = 0; for (auto& assoc : assocs) { @@ -1207,14 +1211,14 @@ struct AnalysisMuonSelection { filterMap = static_cast(0); VarManager::FillTrack(track); if (fConfigQA) { - fHistMan->FillHistClass("TrackMuon_BeforeCuts", VarManager::fgValues); + fHistMan->FillHistClass("TrackMuon_BeforeCuts", static_cast(VarManager::fgValues)); } iCut = 0; for (auto cut = fMuonCuts.begin(); cut != fMuonCuts.end(); cut++, iCut++) { - if ((*cut)->IsSelected(VarManager::fgValues)) { + if ((*cut)->IsSelected(static_cast(VarManager::fgValues))) { filterMap |= (static_cast(1) << iCut); if (fConfigQA) { - fHistMan->FillHistClass(Form("TrackMuon_%s", (*cut)->GetName()), VarManager::fgValues); + fHistMan->FillHistClass(Form("TrackMuon_%s", (*cut)->GetName()), static_cast(VarManager::fgValues)); } } } @@ -1240,22 +1244,24 @@ struct AnalysisMuonSelection { if (fConfigPublishAmbiguity) { if (fConfigQA) { for (auto& [trackIdx, evIndices] : fNAssocsInBunch) { - if (evIndices.size() <= 1) + if (evIndices.size() <= 1) { continue; + } auto track = muons.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackMuon_AmbiguityInBunch", VarManager::fgValues); + fHistMan->FillHistClass("TrackMuon_AmbiguityInBunch", static_cast(VarManager::fgValues)); } for (auto& [trackIdx, evIndices] : fNAssocsOutOfBunch) { - if (evIndices.size() <= 1) + if (evIndices.size() <= 1) { continue; + } auto track = muons.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackMuon_AmbiguityOutOfBunch", VarManager::fgValues); + fHistMan->FillHistClass("TrackMuon_AmbiguityOutOfBunch", static_cast(VarManager::fgValues)); } } // publish ambiguity table (one row per FwdTrack) @@ -1298,7 +1304,7 @@ struct AnalysisSameEventPairing { o2::base::MatLayerCylSet* fLUT = nullptr; TH1D* ResoFlowSP = nullptr; TH1D* ResoFlowEP = nullptr; - int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc. + int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. OutputObj fOutputList{"output"}; @@ -1343,7 +1349,7 @@ struct AnalysisSameEventPairing { Configurable flowPath{"flowPath", "Users/y/yiping/FlowResolution", "Path to the flow resolution object"}; } fConfigCCDB; - Service fCCDB; + Service fCCDB{}; // vectors needed for PV recomputation std::vector pvContribGlobIDs; @@ -1352,22 +1358,22 @@ struct AnalysisSameEventPairing { // keep histogram class names in maps, so we don't have to buld their names in the pair loops std::map> fTrackHistNames; - std::map> fMuonHistNames; + // std::map> fMuonHistNames; std::map> fTrackMuonHistNames; // for electron-muon pairs: key = iTrack * fNCutsMuon + iMuon std::vector fPairCuts; AnalysisCompositeCut fMCGenAccCut; // bool fUseMCGenAccCut = false; - uint32_t fTrackFilterMask; // mask for the track cuts required in this task to be applied on the barrel cuts produced upstream - uint32_t fMuonFilterMask; // mask for the muon cuts required in this task to be applied on the muon cuts produced upstream - int fNCutsBarrel; - int fNCutsMuon; - int fNPairCuts; + uint32_t fTrackFilterMask = 0; // mask for the track cuts required in this task to be applied on the barrel cuts produced upstream + uint32_t fMuonFilterMask = 0; // mask for the muon cuts required in this task to be applied on the muon cuts produced upstream + int fNCutsBarrel = 0; + int fNCutsMuon = 0; + int fNPairCuts = 0; bool fHasTwoProngGenMCsignals = false; - bool fEnableBarrelHistos; - bool fEnableBarrelMuonHistos; + bool fEnableBarrelHistos = false; + bool fEnableBarrelMuonHistos = false; std::vector fTrackCuts; // barrel cut names, used in EMu histogram filling std::vector fMuonCuts; // muon cut names, used in EMu histogram filling @@ -1459,7 +1465,6 @@ struct AnalysisSameEventPairing { // if there are pair cuts specified, assign hist directories for each barrel cut - pair cut combination // NOTE: This could possibly lead to large histogram outputs. It is strongly advised to use pair cuts only // if you know what you are doing. - TString cutNamesStr = fConfigOptions.pair.value; if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); @@ -1506,8 +1511,9 @@ struct AnalysisSameEventPairing { int seqTrackIdx = 0; // sequential index into fTrackCuts (which contains only required cuts) for (int iTrack = 0; iTrack < fNCutsBarrel; ++iTrack) { // skip barrel cuts not required in this task - if (!(fTrackFilterMask & (static_cast(1) << iTrack))) + if ((fTrackFilterMask & (static_cast(1) << iTrack)) == 0) { continue; + } TString trackCutName = fTrackCuts[seqTrackIdx]; seqTrackIdx++; std::vector names = { @@ -1543,7 +1549,7 @@ struct AnalysisSameEventPairing { fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(VarManager::fgVariableNames, VarManager::fgVariableUnits); + fHistMan->SetDefaultVarNames(static_cast(VarManager::fgVariableNames), static_cast(VarManager::fgVariableUnits)); VarManager::SetCollisionSystem((TString)fConfigOptions.collisionSystem, fConfigOptions.centerMassEnergy); // set collision system and center of mass energy @@ -1556,7 +1562,7 @@ struct AnalysisSameEventPairing { void initParamsFromCCDB(uint64_t timestamp, bool withTwoProngFitter = true) { if (fConfigOptions.useRemoteField.value) { - o2::parameters::GRPMagField* grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, timestamp); + auto grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, timestamp); o2::base::MatLayerCylSet* lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(fCCDB->get(fConfigCCDB.lutPath)); float magField = 0.0; if (grpmag != nullptr) { @@ -1610,15 +1616,18 @@ struct AnalysisSameEventPairing { // int nMyPVContrib = 0; int nMyPVContribOrig = 0; for (auto const& trk : tracks) { // check if it is PV contributor - if (!trk.isPVContributor()) + if (!trk.isPVContributor()) { continue; + } // check if it contributes to the vtx of this collision - if (trk.collisionId() != collision.globalIndex()) + if (trk.collisionId() != collision.globalIndex()) { continue; + } // nMyPVContribOrig++; // --- remove t1 and t2 if they are PV contributors --- - if (trk.globalIndex() == t1.globalIndex() || trk.globalIndex() == t2.globalIndex()) + if (trk.globalIndex() == t1.globalIndex() || trk.globalIndex() == t2.globalIndex()) { continue; + } // add tracks and parameters to the list pvContribGlobIDs.push_back(trk.globalIndex()); pvContribTrackPars.push_back(getTrackParCov(trk)); @@ -1643,8 +1652,9 @@ struct AnalysisSameEventPairing { vertexer.init(); bool PVrefit_doable = vertexer.prepareVertexRefit(pvContribTrackPars, Pvtx); - if (!PVrefit_doable) + if (!PVrefit_doable) { return false; + } // --- do the refit --- pvRefitted = vertexer.refitVertex(vec_useTrk_PVrefit, Pvtx); @@ -1703,19 +1713,21 @@ struct AnalysisSameEventPairing { // constexpr bool fillFlowReso = eventHasQvector; for (auto& event : events) { - if (!event.isEventSelected_bit(0)) + if (!event.isEventSelected_bit(0)) { continue; + } if (fConfigOptions.collSplitting && event.isEventSelected_bit(2)) { continue; } VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, VarManager::fgValues); + VarManager::FillEvent(event, static_cast(VarManager::fgValues)); auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); - if (groupedAssocs.size() == 0) + if (groupedAssocs.size() == 0) { continue; + } if (fConfigOptions.useFlowReso) { if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { @@ -1729,8 +1741,9 @@ struct AnalysisSameEventPairing { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; - if (!twoTrackFilter) + if (!twoTrackFilter) { continue; + } auto t1 = a1.template track_as(); auto t2 = a2.template track_as(); @@ -1765,17 +1778,17 @@ struct AnalysisSameEventPairing { } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2, fConfigOptions.propToPCA); + VarManager::FillPairVertexing(event, t1, t2); o2::dataformats::VertexBase pvRefit; if (fConfigOptions.recomputePV) { VarManager::SetPVrecalculationKF(false); VarManager::ResetValues(VarManager::kVertexingLxyProjectedRecalculatePV, VarManager::kVertexingLxyProjectedRecalculatePV + 1); VarManager::ResetValues(VarManager::kVertexingTauxyProjectedPoleJPsiMassRecalculatePV, VarManager::kVertexingTauxyProjectedPoleJPsiMassRecalculatePV + 1); // cout << "primary vertex (before): x -> " << event.posX() << " y -> " << event.posY() << " z -> " << event.posZ() << endl; - o2::dataformats::VertexBase pvRefit; bool ok = refitPVWithPVertexer(event, tracks, t1, t2, pvRefit); - if (ok) + if (ok) { VarManager::FillPairVertexingRecomputePV(event, t1, t2, pvRefit); + } // cout << "primary vertex (after): ok -> " << ok << " x -> " << pvRefit.getX() << " y -> " << pvRefit.getY() << " z -> " << pvRefit.getZ() << endl; } } @@ -1803,43 +1816,43 @@ struct AnalysisSameEventPairing { } } // Fill normal histograms - bool isAmbiInBunch = (twoTrackFilter & (1 << 28)) || (twoTrackFilter & (1 << 29)); - bool isAmbiOutOfBunch = (twoTrackFilter & (1 << 30)) || (twoTrackFilter & (1 << 31)); + bool isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); + bool isAmbiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); for (int icut = 0; icut < ncuts; icut++) { // loop over cut definitions if (twoTrackFilter & (static_cast(1) << icut)) { if (sign1 * sign2 < 0) { // opposite sign pairs - fHistMan->FillHistClass(histNames[icut][0].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][0].Data(), static_cast(VarManager::fgValues)); PromptNonPromptSepTable(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kRap], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kVertexingTauxyProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass], VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMassRecalculatePV], VarManager::fgValues[VarManager::kVtxX], VarManager::fgValues[VarManager::kVtxY], VarManager::fgValues[VarManager::kVtxZ], VarManager::fgValues[VarManager::kDCAxy1], VarManager::fgValues[VarManager::kDCAz1], VarManager::fgValues[VarManager::kITSclusterMap1], VarManager::fgValues[VarManager::kTPCnSigmaEl1], VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kITSclusterMap2], VarManager::fgValues[VarManager::kTPCnSigmaEl2], isAmbiInBunch, isAmbiOutOfBunch, VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]); if (fConfigOptions.fConfigQA) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][3].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][3].Data(), static_cast(VarManager::fgValues)); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][3 + 3].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][3 + 3].Data(), static_cast(VarManager::fgValues)); } } } else if (sign1 > 0) { // ++ pairs - fHistMan->FillHistClass(histNames[icut][1].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][1].Data(), static_cast(VarManager::fgValues)); if (fConfigOptions.fConfigQA) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][4].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][4].Data(), static_cast(VarManager::fgValues)); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][4 + 3].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][4 + 3].Data(), static_cast(VarManager::fgValues)); } } } else { // -- pairs - fHistMan->FillHistClass(histNames[icut][2].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][2].Data(), static_cast(VarManager::fgValues)); if (fConfigOptions.fConfigQA) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][5].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][5].Data(), static_cast(VarManager::fgValues)); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][5 + 3].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[icut][5 + 3].Data(), static_cast(VarManager::fgValues)); } } } @@ -1847,14 +1860,15 @@ struct AnalysisSameEventPairing { // Pair cuts for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); iPairCut++) { AnalysisCompositeCut cut = fPairCuts.at(iPairCut); - if (!cut.IsSelected(VarManager::fgValues)) + if (!cut.IsSelected(static_cast(VarManager::fgValues))) { continue; // apply pair cuts + } if (sign1 * sign2 < 0) { // opposite sign pairs - fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][0].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][0].Data(), static_cast(VarManager::fgValues)); } else if (sign1 > 0) { // ++ pairs - fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][1].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][1].Data(), static_cast(VarManager::fgValues)); } else { // -- pairs - fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][2].Data(), VarManager::fgValues); + fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][2].Data(), static_cast(VarManager::fgValues)); } } // end loop (pair cuts) } @@ -1890,26 +1904,32 @@ struct AnalysisSameEventPairing { constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); for (auto& event : events) { - if (!event.isEventSelected_bit(0)) + if (!event.isEventSelected_bit(0)) { continue; - if (fConfigOptions.collSplitting && event.isEventSelected_bit(2)) + } + if (fConfigOptions.collSplitting && event.isEventSelected_bit(2)) { continue; + } VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, VarManager::fgValues); + VarManager::FillEvent(event, static_cast(VarManager::fgValues)); auto groupedAssocs1 = assocs1.sliceBy(preslice1, event.globalIndex()); - if (groupedAssocs1.size() == 0) + if (groupedAssocs1.size() == 0) { continue; + } auto groupedAssocs2 = assocs2.sliceBy(preslice2, event.globalIndex()); - if (groupedAssocs2.size() == 0) + if (groupedAssocs2.size() == 0) { continue; + } for (auto& [a1, a2] : o2::soa::combinations(soa::CombinationsFullIndexPolicy(groupedAssocs1, groupedAssocs2))) { - if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) + if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; - if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) + } + if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { continue; + } auto t1 = a1.template track_as(); auto t2 = a2.template fwdtrack_as(); @@ -1924,14 +1944,18 @@ struct AnalysisSameEventPairing { } } // store ambiguity flags in bits 28-31 - if (t1.barrelAmbiguityInBunch() > 1) + if (t1.barrelAmbiguityInBunch() > 1) { twoTrackFilter |= (1u << 28); - if (t2.muonAmbiguityInBunch() > 1) + } + if (t2.muonAmbiguityInBunch() > 1) { twoTrackFilter |= (1u << 29); - if (t1.barrelAmbiguityOutOfBunch() > 1) + } + if (t1.barrelAmbiguityOutOfBunch() > 1) { twoTrackFilter |= (1u << 30); - if (t2.muonAmbiguityOutOfBunch() > 1) + } + if (t2.muonAmbiguityOutOfBunch() > 1) { twoTrackFilter |= (1u << 31); + } VarManager::FillPair(t1, t2); if (fConfigOptions.fPropTrack) { @@ -1947,21 +1971,24 @@ struct AnalysisSameEventPairing { t1.sign() + t2.sign(), twoTrackFilter, 0); for (int iTrack = 0; iTrack < fNCutsBarrel; ++iTrack) { - if (!(a1.isBarrelSelected_raw() & (1u << iTrack))) + if (!(a1.isBarrelSelected_raw() & (1u << iTrack))) { continue; + } for (int iMuon = 0; iMuon < fNCutsMuon; ++iMuon) { - if (!(a2.isMuonSelected_raw() & (1u << iMuon))) + if (!(a2.isMuonSelected_raw() & (1u << iMuon))) { continue; + } int index = iTrack * fNCutsMuon + iMuon; auto itHist = histNames.find(index); - if (itHist == histNames.end()) + if (itHist == histNames.end()) { continue; + } if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(itHist->second[0].Data(), VarManager::fgValues); + fHistMan->FillHistClass(itHist->second[0].Data(), static_cast(VarManager::fgValues)); } else if (sign1 > 0) { - fHistMan->FillHistClass(itHist->second[1].Data(), VarManager::fgValues); + fHistMan->FillHistClass(itHist->second[1].Data(), static_cast(VarManager::fgValues)); } else { - fHistMan->FillHistClass(itHist->second[2].Data(), VarManager::fgValues); + fHistMan->FillHistClass(itHist->second[2].Data(), static_cast(VarManager::fgValues)); } } // end muon cut loop } // end barrel cut loop