diff --git a/PWGEM/PhotonMeson/TableProducer/createPCM.cxx b/PWGEM/PhotonMeson/TableProducer/createPCM.cxx index 70457782ae6..539ea496a5e 100644 --- a/PWGEM/PhotonMeson/TableProducer/createPCM.cxx +++ b/PWGEM/PhotonMeson/TableProducer/createPCM.cxx @@ -12,6 +12,7 @@ /// \file createPCM.cxx /// \brief This code produces photon data tables. /// \author Daiki Sekihata , Tokyo +/// \note legacy code, please use the photonconversionbuilder tasks. #include "PWGEM/PhotonMeson/DataModel/gammaTables.h" #include "PWGEM/PhotonMeson/Utils/PCMUtilities.h" @@ -35,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -113,9 +115,9 @@ struct createPCM { Configurable max_r_req_its{"max_r_req_its", 16.0, "min Rxy for V0 with ITS hits"}; Configurable min_r_tpconly{"min_r_tpconly", 32.0, "min Rxy for V0 with TPConly tracks"}; - int mRunNumber; - float d_bz; - Service ccdb; + int mRunNumber = 0; + float d_bz = 0; + Service ccdb{}; o2::base::MatLayerCylSet* lut = nullptr; o2::vertexing::DCAFitterN<2> fitter; // Material correction in the DCA fitter @@ -213,7 +215,7 @@ struct createPCM { } } - template + template bool reconstructV0(TTrack const& ele, TTrack const& pos) { bool isITSonly_pos = pos.hasITS() && !pos.hasTPC(); @@ -257,7 +259,7 @@ struct createPCM { return false; } - float xyz[3] = {0.f, 0.f, 0.f}; + std::array xyz = {0.f, 0.f, 0.f}; Vtx_recalculation(o2::base::Propagator::Instance(), pos, ele, xyz, matCorr); float recalculatedVtxR = std::sqrt(std::pow(xyz[0], 2) + std::pow(xyz[1], 2)); // LOGF(info, "recalculated vtx : x = %f , y = %f , z = %f", xyz[0], xyz[1], xyz[2]); @@ -275,7 +277,7 @@ struct createPCM { return true; } - template + template void fillV0Table(TCollision const& collision, TTrack const& ele, TTrack const& pos, const bool filltable) { std::array pVtx = {collision.posX(), collision.posY(), collision.posZ()}; @@ -323,7 +325,7 @@ struct createPCM { } registry.fill(HIST("hV0xy"), svpos[0], svpos[1]); // this should have worst resolution - float xyz_tmp[3] = {0.f, 0.f, 0.f}; + std::array xyz_tmp = {0.f, 0.f, 0.f}; Vtx_recalculation(o2::base::Propagator::Instance(), pos, ele, xyz_tmp, matCorr); registry.fill(HIST("hV0xy_recalculated"), xyz_tmp[0], xyz_tmp[1]); // this should have good resolution @@ -343,7 +345,7 @@ struct createPCM { } std::pair> its_ib_Requirement = {0, {0, 1, 2}}; // no hit on 3 ITS ib layers. - template + template bool isSelected(TTrack const& track) { if (track.pt() < minpt || std::abs(track.eta()) > maxeta) { @@ -420,7 +422,7 @@ struct createPCM { // registry.fill(HIST("hEventCounter"), 1); int32_t min_sw = std::max(static_cast(0), collision.globalIndex()); - int32_t max_sw = std::min(static_cast(min_sw + nsw), static_cast(collisions.size())); + int32_t max_sw = std::min(static_cast(min_sw + nsw), collisions.size()); // LOGF(info, "orphan_posTracks.size() = %d, orphan_negTracks.size() = %d", orphan_posTracks.size(), orphan_negTracks.size()); negTracks_sw.reserve(max_sw - min_sw); @@ -477,7 +479,7 @@ struct createPCM { vec_cospa.reserve(max_sw - min_sw); for (int32_t isw = min_sw; isw < max_sw; isw++) { auto collision_in_sw = collisions.rawIteratorAt(isw); - if (cospa_map.find(std::make_tuple(pos.globalIndex(), ele.globalIndex(), collision_in_sw.globalIndex())) != cospa_map.end()) { + if (cospa_map.contains(std::make_tuple(pos.globalIndex(), ele.globalIndex(), collision_in_sw.globalIndex()))) { vec_cospa.emplace_back(cospa_map[std::make_tuple(pos.globalIndex(), ele.globalIndex(), collision_in_sw.globalIndex())]); } else { vec_cospa.emplace_back(-999.f); @@ -516,7 +518,7 @@ struct createPCM { } } // end of pca_map loop - if (is_closest_v0 && used_pair_map.find(std::make_pair(pos.globalIndex(), ele.globalIndex())) == used_pair_map.end()) { + if (is_closest_v0 && !used_pair_map.contains(std::make_pair(pos.globalIndex(), ele.globalIndex()))) { // LOGF(info, "store : pos.globalIndex() = %d , ele.globalIndex() = %d , collision.globalIndex() = %d , cospa = %f , pca = %f", std::get<0>(key), std::get<1>(key), std::get<2>(key), value, pca_map[key]); fillV0Table(collision_most_prob, ele, pos, true); used_pair_map[std::make_pair(pos.globalIndex(), ele.globalIndex())] = true; @@ -563,7 +565,7 @@ struct createPCM { if (ele.sign() < 0) { fillV0Table(collision, ele, pos, true); } else { - fillV0Table(collision, pos, ele, true); + fillV0Table(collision, pos, ele, true); // NOLINT(readability-suspicious-call-argument) in case the ele is actually positivley charged } } } // end of collision loop @@ -571,8 +573,8 @@ struct createPCM { PROCESS_SWITCH(createPCM, processTrkCollAsso, "create V0s with track-to-collision associator", false); }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +WorkflowSpec defineDataProcessing(ConfigContext const& context) { return WorkflowSpec{ - adaptAnalysisTask(cfgc, TaskName{"v0-finder"})}; + adaptAnalysisTask(context, TaskName{"v0-finder"})}; } diff --git a/PWGEM/PhotonMeson/TableProducer/photonconversionbuilder.cxx b/PWGEM/PhotonMeson/TableProducer/photonconversionbuilder.cxx index 9a0ae99daa4..6fa95721995 100644 --- a/PWGEM/PhotonMeson/TableProducer/photonconversionbuilder.cxx +++ b/PWGEM/PhotonMeson/TableProducer/photonconversionbuilder.cxx @@ -576,7 +576,7 @@ struct PhotonConversionBuilder { } std::array xyz = {0.f, 0.f, 0.f}; - Vtx_recalculationParCov(o2::base::Propagator::Instance(), pTrack, nTrack, xyz.data(), matCorr); + Vtx_recalculationParCov(o2::base::Propagator::Instance(), pTrack, nTrack, xyz, matCorr); float rxy_tmp = RecoDecay::sqrtSumOfSquares(xyz[0], xyz[1]); if (rxy_tmp > maxX + margin_r_tpc) { return; diff --git a/PWGEM/PhotonMeson/TableProducer/skimmerGammaConversion.cxx b/PWGEM/PhotonMeson/TableProducer/skimmerGammaConversion.cxx index c0b14051d74..6b2f9d20e13 100644 --- a/PWGEM/PhotonMeson/TableProducer/skimmerGammaConversion.cxx +++ b/PWGEM/PhotonMeson/TableProducer/skimmerGammaConversion.cxx @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -58,6 +59,7 @@ #include #include +#include #include #include #include @@ -104,7 +106,7 @@ struct skimmerGammaConversion { }; // declare this here in order to be able to access it from a lambda - std::shared_ptr fMotherSizesHisto{}; + std::shared_ptr fMotherSizesHisto; enum eV0Confirmation { kV0In, @@ -131,7 +133,7 @@ struct skimmerGammaConversion { Produces fFuncTableMCTrackInformation; Produces fIndexTableMCTrackIndex; - Service ccdb; + Service ccdb{}; int runNumber = -1; o2::base::MatLayerCylSet* lut = nullptr; @@ -166,7 +168,7 @@ struct skimmerGammaConversion { } auto run3grp_timestamp = bc.timestamp(); - o2::parameters::GRPObject* grpo = ccdb->getForTimeStamp(ccdbPath, run3grp_timestamp); + auto* grpo = ccdb->getForTimeStamp(ccdbPath, run3grp_timestamp); o2::parameters::GRPMagField* grpmag = nullptr; if (grpo) { @@ -189,7 +191,7 @@ struct skimmerGammaConversion { KFParticle::SetField(magneticField); } - template + template void fillTrackTable(TTRACK const& theTrack, TKFP const& kfp) { v0legs(theTrack.collisionId(), @@ -201,8 +203,8 @@ struct skimmerGammaConversion { theTrack.itsClusterSizes(), theTrack.itsChi2NCl(), theTrack.detectorMap()); } - template - void fillfFuncTableMCTrackInformation(TTRACK theTrack, bool sameMother) + template + void fillfFuncTableMCTrackInformation(TTRACK const& theTrack, bool sameMother) { fFuncTableMCTrackInformation( theTrack.mcParticle().pdgCode(), @@ -212,7 +214,7 @@ struct skimmerGammaConversion { sameMother); } - template + template bool checkV0leg(TTrack const& track) { if (track.pt() < minpt || abs(track.eta()) > maxeta) { @@ -236,24 +238,24 @@ struct skimmerGammaConversion { return true; } - template + template void fillV0KF(TCollision const& collision, TV0 const& v0) { auto pos = v0.template posTrack_as(); // positive daughter auto ele = v0.template negTrack_as(); // negative daughter - float xyz[3] = {0.f, 0.f, 0.f}; + std::array xyz = {0.f, 0.f, 0.f}; Vtx_recalculation(o2::base::Propagator::Instance(), pos, ele, xyz); KFPTrack kfp_track_pos = createKFPTrackFromTrack(pos); KFPTrack kfp_track_ele = createKFPTrackFromTrack(ele); KFParticle kfp_pos(kfp_track_pos, -11); KFParticle kfp_ele(kfp_track_ele, 11); - const KFParticle* GammaDaughters[2] = {&kfp_pos, &kfp_ele}; + std::array GammaDaughters = {&kfp_pos, &kfp_ele}; KFParticle gammaKF; gammaKF.SetConstructMethod(2); - gammaKF.Construct(GammaDaughters, 2); + gammaKF.Construct(GammaDaughters.data(), 2); if (kfMassConstrain > -0.1) { gammaKF.SetNonlinearMassConstraint(kfMassConstrain); } @@ -265,7 +267,7 @@ struct skimmerGammaConversion { // Transport the gamma to the recalculated decay vertex KFParticle gammaKF_DecayVtx = gammaKF; // with respect to (0,0,0) - gammaKF_DecayVtx.TransportToPoint(xyz); + gammaKF_DecayVtx.TransportToPoint(xyz.data()); //// Apply a topological constraint of the gamma to the PV. Parameters will be given at the primary vertex. // KFParticle gammaKF_PV = gammaKF_DecayVtx; @@ -278,8 +280,8 @@ struct skimmerGammaConversion { KFParticle kfp_pos_DecayVtx = kfp_pos; KFParticle kfp_ele_DecayVtx = kfp_ele; - kfp_pos_DecayVtx.TransportToPoint(xyz); - kfp_ele_DecayVtx.TransportToPoint(xyz); + kfp_pos_DecayVtx.TransportToPoint(xyz.data()); + kfp_ele_DecayVtx.TransportToPoint(xyz.data()); // KFParticle kfp_pos_PV = kfp_pos_DecayVtx; // KFParticle kfp_ele_PV = kfp_ele_DecayVtx; @@ -407,7 +409,7 @@ struct skimmerGammaConversion { } PROCESS_SWITCH(skimmerGammaConversion, processMc, "process reconstructed and mc info ", false); - template + template eV0Confirmation isTrueV0(TV0 const& /*theV0*/, TTRACK const& theTrackPos, TTRACK const& theTrackNeg) @@ -516,7 +518,7 @@ struct skimmerGammaConversion { } }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +WorkflowSpec defineDataProcessing(ConfigContext const& context) { - return WorkflowSpec{adaptAnalysisTask(cfgc, TaskName{"skimmer-gamma-conversion"})}; + return WorkflowSpec{adaptAnalysisTask(context, TaskName{"skimmer-gamma-conversion"})}; } diff --git a/PWGEM/PhotonMeson/TableProducer/skimmerGammaConversionTruthOnlyMc.cxx b/PWGEM/PhotonMeson/TableProducer/skimmerGammaConversionTruthOnlyMc.cxx index e44600aafaa..a9eb488775b 100644 --- a/PWGEM/PhotonMeson/TableProducer/skimmerGammaConversionTruthOnlyMc.cxx +++ b/PWGEM/PhotonMeson/TableProducer/skimmerGammaConversionTruthOnlyMc.cxx @@ -111,7 +111,7 @@ struct skimmerGammaConversionTruthOnlyMc { } }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +WorkflowSpec defineDataProcessing(ConfigContext const& context) { - return WorkflowSpec{adaptAnalysisTask(cfgc, TaskName{"skimmer-gamma-conversion-truthonlymc"})}; + return WorkflowSpec{adaptAnalysisTask(context, TaskName{"skimmer-gamma-conversion-truthonlymc"})}; } diff --git a/PWGEM/PhotonMeson/Tasks/CheckMCV0.cxx b/PWGEM/PhotonMeson/Tasks/CheckMCV0.cxx index 3caa5e5b5aa..b0ad9fea148 100644 --- a/PWGEM/PhotonMeson/Tasks/CheckMCV0.cxx +++ b/PWGEM/PhotonMeson/Tasks/CheckMCV0.cxx @@ -169,7 +169,7 @@ struct CheckMCV0 { Configurable mLUTPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; Configurable mVtxPath{"mVtxPath", "GLO/Calib/MeanVertex", "Path of the mean vertex file"}; Configurable mCCDBUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Service mCCDB; + Service mCCDB{}; int mRunNumber{-1}; o2::base::MatLayerCylSet* mLUT{nullptr}; o2::parameters::GRPMagField* mGRPMagField{nullptr}; @@ -177,7 +177,6 @@ struct CheckMCV0 { // params std::array mcPosXYZEtaTglPtProp{}; std::array mcEleXYZEtaTglPtProp{}; - std::array mcMotherXYZEtaTglPtProp{}; // Track Types static constexpr std::array v0Types{"ITSTPC_ITSTPC/", "TPConly_TPConly/", "ITSonly_ITSonly/", "ITSTPC_TPConly/", "ITSTPC_ITSonly/", "TPConly_ITSonly/"}; @@ -515,7 +514,7 @@ struct CheckMCV0 { } }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +WorkflowSpec defineDataProcessing(ConfigContext const& context) { - return WorkflowSpec{adaptAnalysisTask(cfgc, TaskName{"check-mc-v0"})}; + return WorkflowSpec{adaptAnalysisTask(context, TaskName{"check-mc-v0"})}; } diff --git a/PWGEM/PhotonMeson/Tasks/compconvbuilder.cxx b/PWGEM/PhotonMeson/Tasks/compconvbuilder.cxx index d7046d8832f..f1e3d11878a 100644 --- a/PWGEM/PhotonMeson/Tasks/compconvbuilder.cxx +++ b/PWGEM/PhotonMeson/Tasks/compconvbuilder.cxx @@ -38,6 +38,7 @@ #include #include +#include #include #include #include @@ -83,11 +84,11 @@ struct Compconvbuilder { EMOnly = 2, LFOnly = 3, Common = 4, - NConversionBuilder + NConversionBuilder = 5 }; - static constexpr std::string_view kConversionBuilder[NConversionBuilder] = {"EMBuilder/", "LFBuilder/", "EMOnly/", "LFOnly/", "Common/"}; - static constexpr std::string_view kEventTypes[2] = {"before/", "after/"}; + static constexpr std::array kConversionBuilder = {"EMBuilder/", "LFBuilder/", "EMOnly/", "LFOnly/", "Common/"}; + static constexpr std::array kEventTypes = {"before/", "after/"}; EMPhotonEventCut fEMEventCut; struct : ConfigurableGroup { @@ -765,9 +766,7 @@ struct Compconvbuilder { registry.fill(HIST("truePhotons/Sparse_Converted"), d1.vx(), mc.y(), d1.vz(), r, mc.phi(), mc.eta(), mc.pt()); - int id1 = mc2trk.count(d1.globalIndex()) ? mc2trk[d1.globalIndex()] : -1; - int id2 = mc2trk.count(d2.globalIndex()) ? mc2trk[d2.globalIndex()] : -1; - if (id1 < 0 || id2 < 0) { + if (!mc2trk.contains(d1.globalIndex()) || !mc2trk.contains(d2.globalIndex())) { continue; } } @@ -795,8 +794,9 @@ struct Compconvbuilder { } for (const auto& collision : collisions) { - if (!fEMEventCut.IsSelected(collision)) + if (!fEMEventCut.IsSelected(collision)) { continue; + } fillEventInfo<1, EMBuilder>(collision); @@ -818,22 +818,25 @@ struct Compconvbuilder { .emmcparticle_as(); int pid = FindCommonMotherFrom2Prongs(posmc, negmc, kPositron, kElectron, kGamma, mcparticles); - if (pid >= 0) + if (pid >= 0) { table[pid].emIt = it; + } } for (LFIt it = lfSlice.begin(); it != lfSlice.end(); ++it) { int posTrackIndex = it.posTrackId(); auto negTrackIndex = it.negTrackId(); - if (!trackToMcLabel.count(posTrackIndex) || !trackToMcLabel.count(negTrackIndex)) + if (!trackToMcLabel.contains(posTrackIndex) || !trackToMcLabel.contains(negTrackIndex)) { continue; + } auto posmc = mcparticles.iteratorAt(trackToMcLabel[posTrackIndex]); auto negmc = mcparticles.iteratorAt(trackToMcLabel[negTrackIndex]); int pid = FindCommonMotherFrom2Prongs(posmc, negmc, kPositron, kElectron, kGamma, mcparticles); - if (pid >= 0) + if (pid >= 0) { table[pid].lfIt = it; + } } for (auto const& [pid, entry] : table) { @@ -872,7 +875,7 @@ struct Compconvbuilder { PROCESS_SWITCH(Compconvbuilder, processConvV0s, "Process generated converted V0s", false); }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfg) +WorkflowSpec defineDataProcessing(ConfigContext const& context) { - return WorkflowSpec{adaptAnalysisTask(cfg)}; + return WorkflowSpec{adaptAnalysisTask(context)}; } diff --git a/PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx b/PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx index c3f41633d9b..f33e70e1b86 100644 --- a/PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx +++ b/PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx @@ -8,11 +8,10 @@ // In applying this license CERN does not waive the privileges and immunities // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. -// -// ======================== -// -// This code runs loop over dalitz ee table for dalitz QC. -// Please write to: daiki.sekihata@cern.ch + +/// \file dalitzEEQC.cxx +/// \brief This code runs loop over dalitz ee table for dalitz QC +/// \author Daiki Sekihata, daiki.sekihata@cern.ch #include "PWGEM/Dilepton/Utils/PairUtilities.h" #include "PWGEM/PhotonMeson/Core/DalitzEECut.h" @@ -27,6 +26,7 @@ #include #include +#include #include #include #include @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -53,8 +54,6 @@ #include #include -#include - using namespace o2; using namespace o2::aod; using namespace o2::framework; @@ -131,12 +130,12 @@ struct DalitzEEQC { } dileptoncuts; o2::ccdb::CcdbApi ccdbApi; - Service ccdb; - int mRunNumber; - float d_bz; + Service ccdb{}; + int mRunNumber = 0; + float d_bz = 0; HistogramRegistry fRegistry{"output", {}, OutputObjHandlingPolicy::AnalysisObject, false, false}; - static constexpr std::string_view event_cut_types[2] = {"before/", "after/"}; + static constexpr std::array event_cut_types = {"before/", "after/"}; void init(InitContext& /*context*/) { @@ -153,7 +152,7 @@ struct DalitzEEQC { ccdb->setFatalWhenNull(false); } - template + template void initCCDB(TCollision const& collision) { if (mRunNumber == collision.runNumber()) { @@ -172,10 +171,11 @@ struct DalitzEEQC { } auto run3grp_timestamp = collision.timestamp(); - o2::parameters::GRPObject* grpo = 0x0; - o2::parameters::GRPMagField* grpmag = 0x0; - if (!skipGRPOquery) + o2::parameters::GRPObject* grpo = nullptr; + o2::parameters::GRPMagField* grpmag = nullptr; + if (!skipGRPOquery) { grpo = ccdb->getForTimeStamp(grpPath, run3grp_timestamp); + } if (grpo) { // Fetch magnetic field from ccdb for current collision d_bz = grpo->getNominalL3Field(); @@ -192,7 +192,7 @@ struct DalitzEEQC { mRunNumber = collision.runNumber(); } - ~DalitzEEQC() {} + ~DalitzEEQC() = default; void addhistograms() { @@ -204,11 +204,11 @@ struct DalitzEEQC { const AxisSpec axis_pt{200, 0, 2, "p_{T,ee} (GeV/c)"}; fRegistry.add("Pair/same/hMvsPt", "m_{ee} vs. p_{T,ee};m_{ee} (GeV/c^{2});p_{T,ee} (GeV/c)", kTH2F, {axis_mass, axis_pt}, true); - fRegistry.add("Pair/same/hMvsPhiV", "m_{ee} vs. #varphi_{V};#varphi (rad.);m_{ee} (GeV/c^{2})", kTH2F, {{90, 0, M_PI}, {100, 0.0f, 0.1f}}, true); + fRegistry.add("Pair/same/hMvsPhiV", "m_{ee} vs. #varphi_{V};#varphi (rad.);m_{ee} (GeV/c^{2})", kTH2F, {{90, 0, o2::constants::math::PI}, {100, 0.0f, 0.1f}}, true); fRegistry.add("Track/hPt", "pT;p_{T} (GeV/c)", kTH1F, {{1000, 0.0f, 10}}, false); fRegistry.add("Track/hQoverPt", "q/pT;q/p_{T} (GeV/c)^{-1}", kTH1F, {{400, -20, 20}}, false); - fRegistry.add("Track/hEtaPhi", "#eta vs. #varphi;#varphi (rad.);#eta", kTH2F, {{180, 0, 2 * M_PI}, {40, -2.0f, 2.0f}}, false); + fRegistry.add("Track/hEtaPhi", "#eta vs. #varphi;#varphi (rad.);#eta", kTH2F, {{180, 0, o2::constants::math::TwoPI}, {40, -2.0f, 2.0f}}, false); fRegistry.add("Track/hDCAxyz", "DCA xy vs. z;DCA_{xy} (cm);DCA_{z} (cm)", kTH2F, {{200, -0.1f, 0.1f}, {200, -0.1f, 0.1f}}, false); fRegistry.add("Track/hDCAxyzSigma", "DCA xy vs. z;DCA_{xy} (#sigma);DCA_{z} (#sigma)", kTH2F, {{200, -10.0f, 10.0f}, {200, -10.0f, 10.0f}}, false); fRegistry.add("Track/hDCAxyRes_Pt", "DCA_{xy} resolution vs. pT;p_{T} (GeV/c);DCA_{xy} resolution (#mum)", kTH2F, {{200, 0, 10}, {500, 0., 500}}, false); @@ -280,7 +280,7 @@ struct DalitzEEQC { fDileptonCut.SetTOFNsigmaElRange(dileptoncuts.cfg_min_TOFNsigmaEl, dileptoncuts.cfg_max_TOFNsigmaEl); } - template + template bool fillPairInfo(TCollision const&, TTrack1 const& t1, TTrack2 const& t2) { if (t1.trackId() == t2.trackId()) { // this is protection against pairing identical 2 tracks. This happens, when TTCA is used. TTCA can assign a track to several possible collisions. @@ -319,7 +319,7 @@ struct DalitzEEQC { return true; } - template + template void fillTrackInfo(TTrack const& track) { fRegistry.fill(HIST("Track/hPt"), track.pt()); @@ -363,7 +363,7 @@ struct DalitzEEQC { { for (auto& collision : collisions) { initCCDB(collision); - const float centralities[3] = {collision.centFT0M(), collision.centFT0A(), collision.centFT0C()}; + const std::array centralities = {collision.centFT0M(), collision.centFT0A(), collision.centFT0C()}; if (centralities[cfgCentEstimator] < cfgCentMin || cfgCentMax < centralities[cfgCentEstimator]) { continue; } @@ -372,7 +372,7 @@ struct DalitzEEQC { if (!fEMEventCut.IsSelected(collision)) { continue; } - if (!(eventcuts.cfgOccupancyMin <= collision.trackOccupancyInTimeRange() && collision.trackOccupancyInTimeRange() < eventcuts.cfgOccupancyMax)) { + if (!(eventcuts.cfgOccupancyMin <= collision.trackOccupancyInTimeRange()) || !(collision.trackOccupancyInTimeRange() < eventcuts.cfgOccupancyMax)) { continue; } o2::aod::pwgem::photonmeson::utils::eventhistogram::fillEventInfo<1>(&fRegistry, collision); @@ -398,8 +398,8 @@ struct DalitzEEQC { PROCESS_SWITCH(DalitzEEQC, processDummy, "Dummy function", false); }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +WorkflowSpec defineDataProcessing(ConfigContext const& context) { return WorkflowSpec{ - adaptAnalysisTask(cfgc, TaskName{"dalitz-ee-qc"})}; + adaptAnalysisTask(context, TaskName{"dalitz-ee-qc"})}; } diff --git a/PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx b/PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx index 084b866da50..c0dd75f3545 100644 --- a/PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx +++ b/PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx @@ -9,10 +9,10 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. // -// ======================== -// -// This code runs loop over dalitz ee table for dalitz QC. -// Please write to: daiki.sekihata@cern.ch + +/// \file dalitzEEQC.cxx +/// \brief This code runs loop over dalitz ee table for dalitz QC in MC +/// \author Daiki Sekihata, daiki.sekihata@cern.ch #include "PWGEM/Dilepton/Utils/MCUtilities.h" #include "PWGEM/Dilepton/Utils/PairUtilities.h" @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -36,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -48,14 +50,15 @@ #include // IWYU pragma: keep (do not replace with Math/Vector4Dfwd.h) #include +#include +#include #include #include +#include #include #include #include -#include - using namespace o2; using namespace o2::aod; using namespace o2::framework; @@ -134,9 +137,9 @@ struct DalitzEEQCMC { } dileptoncuts; o2::ccdb::CcdbApi ccdbApi; - Service ccdb; - int mRunNumber; - float d_bz; + Service ccdb{}; + int mRunNumber = 0; + float d_bz = 0; struct : ConfigurableGroup { std::string prefix = "mctrackcut_group"; @@ -146,10 +149,10 @@ struct DalitzEEQCMC { } mctrackcuts; HistogramRegistry fRegistry{"output", {}, OutputObjHandlingPolicy::AnalysisObject, false, false}; - static constexpr std::string_view event_cut_types[2] = {"before/", "after/"}; - static constexpr std::string_view track_types[2] = {"primary/", "secondary/"}; + static constexpr std::array event_cut_types = {"before/", "after/"}; + static constexpr std::array track_types = {"primary/", "secondary/"}; - ~DalitzEEQCMC() {} + ~DalitzEEQCMC() = default; void addhistograms() { @@ -169,7 +172,7 @@ struct DalitzEEQCMC { // reconstructed pair info fRegistry.add("Pair/sm/Photon/hMvsPt", "m_{ee} vs. p_{T,ee} ULS", kTH2F, {axis_mass, axis_pt}, true); - fRegistry.add("Pair/sm/Photon/hMvsPhiV", "m_{ee} vs. #varphi_{V};#varphi (rad.);m_{ee} (GeV/c^{2})", kTH2F, {{90, 0, M_PI}, {100, 0.0f, 0.1f}}, false); + fRegistry.add("Pair/sm/Photon/hMvsPhiV", "m_{ee} vs. #varphi_{V};#varphi (rad.);m_{ee} (GeV/c^{2})", kTH2F, {{90, 0, o2::constants::math::PI}, {100, 0.0f, 0.1f}}, false); fRegistry.addClone("Pair/sm/Photon/", "Pair/sm/Pi0/"); fRegistry.addClone("Pair/sm/Photon/", "Pair/sm/Eta/"); fRegistry.addClone("Pair/sm/Photon/", "Pair/sm/EtaPrime/"); @@ -180,7 +183,7 @@ struct DalitzEEQCMC { // track info fRegistry.add("Track/primary/hPt", "pT;p_{T} (GeV/c)", kTH1F, {{1000, 0.0f, 10}}, false); fRegistry.add("Track/primary/hQoverPt", "q/pT;q/p_{T} (GeV/c)^{-1}", kTH1F, {{400, -20, 20}}, false); - fRegistry.add("Track/primary/hEtaPhi", "#eta vs. #varphi;#varphi (rad.);#eta", kTH2F, {{180, 0, 2 * M_PI}, {40, -2.0f, 2.0f}}, false); + fRegistry.add("Track/primary/hEtaPhi", "#eta vs. #varphi;#varphi (rad.);#eta", kTH2F, {{180, 0, o2::constants::math::TwoPI}, {40, -2.0f, 2.0f}}, false); fRegistry.add("Track/primary/hDCAxyz", "DCA xy vs. z;DCA_{xy} (cm);DCA_{z} (cm)", kTH2F, {{200, -0.1f, 0.1f}, {200, -0.1f, 0.1f}}, false); fRegistry.add("Track/primary/hDCAxyzSigma", "DCA xy vs. z;DCA_{xy} (#sigma);DCA_{z} (#sigma)", kTH2F, {{200, -10.0f, 10.0f}, {200, -10.0f, 10.0f}}, false); fRegistry.add("Track/primary/hDCAxyRes_Pt", "DCA_{xy} resolution vs. pT;p_{T} (GeV/c);DCA_{xy} resolution (#mum)", kTH2F, {{200, 0, 10}, {500, 0., 500}}, false); @@ -225,7 +228,7 @@ struct DalitzEEQCMC { ccdb->setFatalWhenNull(false); } - template + template void initCCDB(TCollision const& collision) { if (mRunNumber == collision.runNumber()) { @@ -244,10 +247,11 @@ struct DalitzEEQCMC { } auto run3grp_timestamp = collision.timestamp(); - o2::parameters::GRPObject* grpo = 0x0; - o2::parameters::GRPMagField* grpmag = 0x0; - if (!skipGRPOquery) + o2::parameters::GRPObject* grpo = nullptr; + o2::parameters::GRPMagField* grpmag = nullptr; + if (!skipGRPOquery) { grpo = ccdb->getForTimeStamp(grpPath, run3grp_timestamp); + } if (grpo) { // Fetch magnetic field from ccdb for current collision d_bz = grpo->getNominalL3Field(); @@ -310,10 +314,10 @@ struct DalitzEEQCMC { fDileptonCut.SetTOFNsigmaElRange(dileptoncuts.cfg_min_TOFNsigmaEl, dileptoncuts.cfg_max_TOFNsigmaEl); } - template + template int FindLF(TTrack const& posmc, TTrack const& elemc, TMCParticles const& mcparticles) { - int arr[] = { + std::array arr = { FindCommonMotherFrom2Prongs(posmc, elemc, -11, 11, 22, mcparticles), FindCommonMotherFrom2Prongs(posmc, elemc, -11, 11, 111, mcparticles), FindCommonMotherFrom2Prongs(posmc, elemc, -11, 11, 221, mcparticles), @@ -323,22 +327,16 @@ struct DalitzEEQCMC { FindCommonMotherFrom2Prongs(posmc, elemc, -11, 11, 333, mcparticles), FindCommonMotherFrom2Prongs(posmc, elemc, -11, 11, 443, mcparticles), FindCommonMotherFrom2Prongs(posmc, elemc, -11, 11, 100443, mcparticles)}; - int size = sizeof(arr) / sizeof(*arr); - int max = *std::max_element(arr, arr + size); - return max; + return *std::ranges::max_element(arr); } - template + template bool isInAcceptance(T const& t1) { - if ((mctrackcuts.min_mcPt < t1.pt() && t1.pt() < mctrackcuts.max_mcPt) && std::fabs(t1.eta()) < mctrackcuts.max_mcEta) { - return true; - } else { - return false; - } + return ((mctrackcuts.min_mcPt < t1.pt() && t1.pt() < mctrackcuts.max_mcPt) && std::fabs(t1.eta()) < mctrackcuts.max_mcEta); } - template + template bool fillTruePairInfo(TCollision const& collision, TTrack1 const& t1, TTrack2 const& t2, TMCParticles const& mcparticles) { if (!fDileptonCut.IsSelectedTrack(t1) || !fDileptonCut.IsSelectedTrack(t2)) { @@ -471,7 +469,7 @@ struct DalitzEEQCMC { return true; } - template + template void fillTrackInfo(TTrack const& track) { auto mctrack = track.template emmcparticle_as(); @@ -521,7 +519,7 @@ struct DalitzEEQCMC { for (auto& collision : collisions) { initCCDB(collision); - float centralities[3] = {collision.centFT0M(), collision.centFT0A(), collision.centFT0C()}; + std::array centralities = {collision.centFT0M(), collision.centFT0A(), collision.centFT0C()}; if (centralities[cfgCentEstimator] < cfgCentMin || cfgCentMax < centralities[cfgCentEstimator]) { continue; } @@ -530,7 +528,7 @@ struct DalitzEEQCMC { if (!fEMEventCut.IsSelected(collision)) { continue; } - if (!(eventcuts.cfgOccupancyMin <= collision.trackOccupancyInTimeRange() && collision.trackOccupancyInTimeRange() < eventcuts.cfgOccupancyMax)) { + if (!(eventcuts.cfgOccupancyMin <= collision.trackOccupancyInTimeRange()) || !(collision.trackOccupancyInTimeRange() < eventcuts.cfgOccupancyMax)) { continue; } o2::aod::pwgem::photonmeson::utils::eventhistogram::fillEventInfo<1>(&fRegistry, collision); @@ -561,7 +559,7 @@ struct DalitzEEQCMC { // all MC tracks which belong to the MC event corresponding to the current reconstructed event for (auto& collision : collisions) { - float centralities[3] = {collision.centFT0M(), collision.centFT0A(), collision.centFT0C()}; + std::array centralities = {collision.centFT0M(), collision.centFT0A(), collision.centFT0C()}; if (centralities[cfgCentEstimator] < cfgCentMin || cfgCentMax < centralities[cfgCentEstimator]) { continue; } @@ -569,7 +567,7 @@ struct DalitzEEQCMC { if (!fEMEventCut.IsSelected(collision)) { continue; } - if (!(eventcuts.cfgOccupancyMin <= collision.trackOccupancyInTimeRange() && collision.trackOccupancyInTimeRange() < eventcuts.cfgOccupancyMax)) { + if (!(eventcuts.cfgOccupancyMin <= collision.trackOccupancyInTimeRange()) || !(collision.trackOccupancyInTimeRange() < eventcuts.cfgOccupancyMax)) { continue; } auto mccollision = collision.emmcevent_as(); @@ -640,8 +638,8 @@ struct DalitzEEQCMC { PROCESS_SWITCH(DalitzEEQCMC, processDummy, "Dummy function", false); }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +WorkflowSpec defineDataProcessing(ConfigContext const& context) { return WorkflowSpec{ - adaptAnalysisTask(cfgc, TaskName{"dalitz-ee-qc-mc"})}; + adaptAnalysisTask(context, TaskName{"dalitz-ee-qc-mc"})}; } diff --git a/PWGEM/PhotonMeson/Tasks/emcalBcWiseGammaGamma.cxx b/PWGEM/PhotonMeson/Tasks/emcalBcWiseGammaGamma.cxx index 1bc980ed4bc..0db7a6cc899 100644 --- a/PWGEM/PhotonMeson/Tasks/emcalBcWiseGammaGamma.cxx +++ b/PWGEM/PhotonMeson/Tasks/emcalBcWiseGammaGamma.cxx @@ -8,12 +8,10 @@ // In applying this license CERN does not waive the privileges and immunities // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. -// -/// + /// \file emcalBcWiseGammaGamma.cxx /// \brief Task that extracts pi0s and eta mesons from BC wise derived data of EMCal clusters /// \author Nicolas Strangmann (nicolas.strangmann@cern.ch) Goethe University Frankfurt -/// #include "PWGEM/PhotonMeson/DataModel/bcWiseTables.h" @@ -35,11 +33,11 @@ #include // IWYU pragma: keep (do not replace with Math/Vector4Dfwd.h) #include #include -#include #include #include #include +#include using namespace o2; using namespace o2::framework; @@ -78,7 +76,7 @@ struct EmcalBcWiseGammaGamma { Filter m02Filter = (aod::bcwisecluster::storedNCells == 1 || (aod::bcwisecluster::storedM02 > cfgMinM02 && aod::bcwisecluster::storedM02 < cfgMaxM02)); Filter timeFilter = (aod::bcwisecluster::storedTime > cfgMinTime && aod::bcwisecluster::storedTime < cfgMaxTime); - emcal::Geometry* emcalGeom; + emcal::Geometry* emcalGeom = nullptr; void init(InitContext const&) { @@ -86,10 +84,10 @@ struct EmcalBcWiseGammaGamma { const int nEventBins = 6; mHistManager.add("Event/nBCs", "Number of BCs;;#bf{FT0M centrality (%)};#bf{#it{N}_{BC}}", HistType::kTH2F, {{nEventBins, -0.5, 5.5}, cfgCentralityBinning}); mHistManager.add("Event/nCollisions", "Number of Collisions (BCs x P(mu));;#bf{FT0M centrality (%)};#bf{#it{N}_{coll}}", HistType::kTH2F, {{nEventBins, -0.5, 5.5}, cfgCentralityBinning}); - const TString binLabels[nEventBins] = {"All", "FT0", "TVX", "kTVXinEMC", "Cell", "Cluster"}; + const std::array binLabels = {"All", "FT0", "TVX", "kTVXinEMC", "Cell", "Cluster"}; for (int iBin = 0; iBin < nEventBins; iBin++) { - mHistManager.get(HIST("Event/nBCs"))->GetXaxis()->SetBinLabel(iBin + 1, binLabels[iBin]); - mHistManager.get(HIST("Event/nCollisions"))->GetXaxis()->SetBinLabel(iBin + 1, binLabels[iBin]); + mHistManager.get(HIST("Event/nBCs"))->GetXaxis()->SetBinLabel(iBin + 1, binLabels[iBin].data()); + mHistManager.get(HIST("Event/nCollisions"))->GetXaxis()->SetBinLabel(iBin + 1, binLabels[iBin].data()); } mHistManager.add("Event/nCollPerBC", "Number of collisions per BC;#bf{#it{N}_{coll}};#bf{FT0M centrality (%)};#bf{#it{N}_{BC}}", HistType::kTH2F, {{5, -0.5, 4.5}, cfgCentralityBinning}); @@ -137,21 +135,24 @@ struct EmcalBcWiseGammaGamma { float getCentrality(const auto& bc) { - if (cfgCentralityEstimator == 0) + if (cfgCentralityEstimator == 0) { return bc.ft0cCentrality(); - else if (cfgCentralityEstimator == 1) + } + if (cfgCentralityEstimator == 1) { return bc.ft0mCentrality(); - else - throw std::runtime_error("Unknown centrality estimator selected"); + } + throw std::runtime_error("Unknown centrality estimator selected"); } /// \brief returns if cluster is too close to edge of EMCal bool isTooCloseToEdge(const int cellID, const int DistanceToBorder = 1) { - if (DistanceToBorder <= 0) + if (DistanceToBorder <= 0) { return false; - if (cellID < 0) + } + if (cellID < 0) { return true; + } // check distance to border in case the cell is okay auto [iSupMod, iMod, iPhi, iEta] = emcalGeom->GetCellIndex(cellID); @@ -218,20 +219,24 @@ struct EmcalBcWiseGammaGamma { ROOT::Math::PtEtaPhiMVector v1(g1.pt(), g1.eta(), g1.phi(), 0.); ROOT::Math::PtEtaPhiMVector v2(g2.pt(), g2.eta(), g2.phi(), 0.); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; - if (std::fabs(v12.Rapidity()) > cfgRapidityCut) + if (std::fabs(v12.Rapidity()) > cfgRapidityCut) { continue; + } float openingAngle12 = std::acos(v1.Vect().Dot(v2.Vect()) / (v1.P() * v2.P())); - if (openingAngle12 < cfgMinOpenAngle) + if (openingAngle12 < cfgMinOpenAngle) { continue; + } mHistManager.fill(HIST("GG/invMassVsPt"), v12.M(), v12.Pt(), getCentrality(bc)); - if (clusters.size() < 3) + if (clusters.size() < 3) { continue; + } - if (bc.globalIndex() % cfgBGEventDownsampling != 0) + if (bc.globalIndex() % cfgBGEventDownsampling != 0) { continue; + } // "else: Calculate background" @@ -243,21 +248,24 @@ struct EmcalBcWiseGammaGamma { try { int iCellID = emcalGeom->GetAbsCellIdFromEtaPhi(vi.Eta(), vi.Phi()); - if (isTooCloseToEdge(iCellID, cfgDistanceToEdge)) + if (isTooCloseToEdge(iCellID, cfgDistanceToEdge)) { continue; - } catch (o2::emcal::InvalidPositionException& e) { + } + } catch (o2::emcal::InvalidPositionException const& e) { continue; } for (const auto& g3 : clusters) { - if (g3.globalIndex() == g1.globalIndex() || g3.globalIndex() == g2.globalIndex()) + if (g3.globalIndex() == g1.globalIndex() || g3.globalIndex() == g2.globalIndex()) { continue; + } ROOT::Math::PtEtaPhiMVector v3(g3.pt(), g3.eta(), g3.phi(), 0.); float openingAnglei3 = std::acos(vi.Vect().Dot(v3.Vect()) / (vi.P() * v3.P())); - if (openingAnglei3 < cfgMinOpenAngle) + if (openingAnglei3 < cfgMinOpenAngle) { continue; + } ROOT::Math::PtEtaPhiMVector vBG = v3 + vi; @@ -269,57 +277,67 @@ struct EmcalBcWiseGammaGamma { void reconstructTrueMesons(const auto& clusters, const auto& mcPi0s, const auto& mcEtas, const auto& bc) { for (const auto& [g1, g2] : soa::combinations(soa::CombinationsStrictlyUpperIndexPolicy(clusters, clusters))) { - if (g1.mesonID() != g2.mesonID() || g1.mesonID() == -1) + if (g1.mesonID() != g2.mesonID() || g1.mesonID() == -1) { continue; + } ROOT::Math::PtEtaPhiMVector v1(g1.pt(), g1.eta(), g1.phi(), 0.); ROOT::Math::PtEtaPhiMVector v2(g2.pt(), g2.eta(), g2.phi(), 0.); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; - if (std::fabs(v12.Rapidity()) > cfgRapidityCut) + if (std::fabs(v12.Rapidity()) > cfgRapidityCut) { continue; + } float openingAngle12 = std::acos(v1.Vect().Dot(v2.Vect()) / (v1.P() * v2.P())); - if (openingAngle12 < cfgMinOpenAngle) + if (openingAngle12 < cfgMinOpenAngle) { continue; + } if (!g1.isEta()) { const auto& mcPi0 = mcPi0s.iteratorAt(g1.mesonID() - mcPi0s.offset()); mHistManager.fill(HIST("True/pi0_PtRecVsPtTrue"), v12.Pt(), mcPi0.pt(), getCentrality(bc)); - if (mcPi0.isPrimary()) + if (mcPi0.isPrimary()) { mHistManager.fill(HIST("True/pi0_invMassVsPt_Primary"), v12.M(), v12.Pt(), getCentrality(bc)); - else if (mcPi0.isFromWD()) + } else if (mcPi0.isFromWD()) { mHistManager.fill(HIST("True/pi0_invMassVsPt_Secondary"), v12.M(), v12.Pt(), getCentrality(bc)); - else + } else { mHistManager.fill(HIST("True/pi0_invMassVsPt_HadronicShower"), v12.M(), v12.Pt(), getCentrality(bc)); + } } else { const auto& mcEta = mcEtas.iteratorAt(g1.mesonID() - mcEtas.offset()); mHistManager.fill(HIST("True/eta_PtRecVsPtTrue"), v12.Pt(), mcEta.pt(), getCentrality(bc)); - if (mcEta.isPrimary()) + if (mcEta.isPrimary()) { mHistManager.fill(HIST("True/eta_invMassVsPt_Primary"), v12.M(), v12.Pt(), getCentrality(bc)); - else if (mcEta.isFromWD()) + } else if (mcEta.isFromWD()) { mHistManager.fill(HIST("True/eta_invMassVsPt_Secondary"), v12.M(), v12.Pt(), getCentrality(bc)); - else + } else { mHistManager.fill(HIST("True/eta_invMassVsPt_HadronicShower"), v12.M(), v12.Pt(), getCentrality(bc)); + } } } } bool isBCSelected(const auto& bc, const auto& collisions) { - if (cfgRequirekTVXinEMC && !bc.haskTVXinEMC()) + if (cfgRequirekTVXinEMC && !bc.haskTVXinEMC()) { return false; - if (cfgRequireEMCCell && !bc.hasEMCCell()) + } + if (cfgRequireEMCCell && !bc.hasEMCCell()) { return false; - if (cfgSelectOnlyUniqueAmbiguous == 1 && collisions.size() != 1) + } + if (cfgSelectOnlyUniqueAmbiguous == 1 && collisions.size() != 1) { return false; - if (cfgSelectOnlyUniqueAmbiguous == 2 && collisions.size() == 1) + } + if (cfgSelectOnlyUniqueAmbiguous == 2 && collisions.size() == 1) { return false; - if (cfgMinTimeSinceSOF > bc.timeSinceSOF() / 60 || cfgMaxTimeSinceSOF < bc.timeSinceSOF() / 60) + } + if (cfgMinTimeSinceSOF > bc.timeSinceSOF() / 60 || cfgMaxTimeSinceSOF < bc.timeSinceSOF() / 60) { return false; + } return true; } @@ -328,35 +346,44 @@ struct EmcalBcWiseGammaGamma { for (const auto& mcPi0 : mcPi0s) { if (mcPi0.isPrimary()) { mHistManager.fill(HIST("Generated/pi0_AllBCs"), mcPi0.pt(), getCentrality(bc)); - if (bc.hasFT0()) + if (bc.hasFT0()) { mHistManager.fill(HIST("Generated/pi0_FT0"), mcPi0.pt(), getCentrality(bc)); - if (bc.hasTVX()) + } + if (bc.hasTVX()) { mHistManager.fill(HIST("Generated/pi0_TVX"), mcPi0.pt(), getCentrality(bc)); - if (bc.haskTVXinEMC()) + } + if (bc.haskTVXinEMC()) { mHistManager.fill(HIST("Generated/pi0_kTVXinEMC"), mcPi0.pt(), getCentrality(bc)); - if (mcPi0.isAccepted() && bc.haskTVXinEMC()) + } + if (mcPi0.isAccepted() && bc.haskTVXinEMC()) { mHistManager.fill(HIST("Accepted/pi0_kTVXinEMC"), mcPi0.pt(), getCentrality(bc)); + } } } for (const auto& mcEta : mcEtas) { if (mcEta.isPrimary()) { mHistManager.fill(HIST("Generated/eta_AllBCs"), mcEta.pt(), getCentrality(bc)); - if (bc.hasFT0()) + if (bc.hasFT0()) { mHistManager.fill(HIST("Generated/eta_FT0"), mcEta.pt(), getCentrality(bc)); - if (bc.hasTVX()) + } + if (bc.hasTVX()) { mHistManager.fill(HIST("Generated/eta_TVX"), mcEta.pt(), getCentrality(bc)); - if (bc.haskTVXinEMC()) + } + if (bc.haskTVXinEMC()) { mHistManager.fill(HIST("Generated/eta_kTVXinEMC"), mcEta.pt(), getCentrality(bc)); - if (mcEta.isAccepted() && bc.haskTVXinEMC()) + } + if (mcEta.isAccepted() && bc.haskTVXinEMC()) { mHistManager.fill(HIST("Accepted/eta_kTVXinEMC"), mcEta.pt(), getCentrality(bc)); + } } } } void process(aod::BCWiseBCs::iterator const& bc, aod::BCWiseCollisions const& collisions, SelectedClusters const& clusters) { - if (!isBCSelected(bc, collisions)) + if (!isBCSelected(bc, collisions)) { return; + } fillEventHists(bc, collisions, clusters); @@ -367,20 +394,23 @@ struct EmcalBcWiseGammaGamma { void processMCInfo(aod::BCWiseBCs::iterator const& bc, aod::BCWiseCollisions const& collisions, SelectedMCClusters const& clusters, aod::BCWiseMCPi0s const& mcPi0s, aod::BCWiseMCEtas const& mcEtas) { - if (!cfgIsMC) + if (!cfgIsMC) { LOG(fatal) << "MC processing is not enabled, but the task is running on MC data. Please set cfgIsMC to true."; + } fillGeneratedMesonHists(mcPi0s, mcEtas, bc); // Fill before BC selection to also store pi0s and eta mesons in BCs that were not triggered - if (!isBCSelected(bc, collisions)) + if (!isBCSelected(bc, collisions)) { return; + } - for (const auto& cluster : clusters) + for (const auto& cluster : clusters) { mHistManager.fill(HIST("True/clusterERecVsETrue"), cluster.e(), cluster.trueE(), getCentrality(bc)); + } reconstructTrueMesons(clusters, mcPi0s, mcEtas, bc); } PROCESS_SWITCH(EmcalBcWiseGammaGamma, processMCInfo, "Run true and gen", false); }; -WorkflowSpec defineDataProcessing(o2::framework::ConfigContext const& cfgc) { return WorkflowSpec{adaptAnalysisTask(cfgc)}; } +WorkflowSpec defineDataProcessing(o2::framework::ConfigContext const& context) { return WorkflowSpec{adaptAnalysisTask(context)}; } diff --git a/PWGEM/PhotonMeson/Tasks/gammaConversions.cxx b/PWGEM/PhotonMeson/Tasks/gammaConversions.cxx index 7c436bf018c..5f51e8914bd 100644 --- a/PWGEM/PhotonMeson/Tasks/gammaConversions.cxx +++ b/PWGEM/PhotonMeson/Tasks/gammaConversions.cxx @@ -12,6 +12,7 @@ /// \file gammaConversions.cxx /// \brief perform photon conversion analysis on V0 candidates from aod::StoredV0Datas /// \author stephan.friedrich.stiefelmaier@cern.ch +/// \note legacy code, please use the Pi0EtaToGammaGamma tasks for the standard neutral meson analysis. /// dependencies: o2-analysis-lf-lambdakzerobuilder #include "PWGEM/PhotonMeson/Tasks/gammaConversions.h" @@ -36,10 +37,12 @@ #include #include +#include #include #include #include #include +#include #include #include @@ -133,6 +136,7 @@ struct GammaConversions { void init(InitContext const&) { + o2::framework::AxisSpec gAxis_pT_log{800, 0.01f, 25.f}; // make axis logarithmic gAxis_pT_log.makeLogarithmic(); @@ -337,9 +341,9 @@ struct GammaConversions { TMCGAMMA const& theMcPhoton, TV0 const& theV0, float const& theV0CosinePA, - int PDGCode[], + std::span PDGCode, bool const& sameMother, - float McTrackmomentum[]) + std::span McTrackmomentum) { fillV0Histograms( fMyRegistry.mV0.mRejectedByMc[theRejReason].mBeforeAfterRecCuts[theBefAftRec].mV0Kind[kRec].mContainer, @@ -365,7 +369,7 @@ struct GammaConversions { } template - bool v0IsGoodValidatedMcPhoton(TMCGAMMA const& theMcPhoton, TV0 const& theV0, float const& theV0CosinePA, bool theV0PassesRecCuts, int PDGCode[], bool const& sameMother, float McTrackmomentum[]) + bool v0IsGoodValidatedMcPhoton(TMCGAMMA const& theMcPhoton, TV0 const& theV0, float const& theV0CosinePA, bool theV0PassesRecCuts, std::span PDGCode, bool const& sameMother, std::span McTrackmomentum) { auto fillRejectedV0HistosI = [&](eMcRejectedSaved theRejReason) { fillAllV0HistogramsForRejectedByMc(static_cast(theRejReason), @@ -417,9 +421,9 @@ struct GammaConversions { TV0 const& theV0, float const& theV0CosinePA, bool theV0PassesRecCuts, - int PDGCode[], + std::span PDGCode, bool const& sameMother, - float McTrackmomentum[]) + std::span McTrackmomentum) { fillV0McValidationHisto(eV0McValidation::kV0in); @@ -456,10 +460,10 @@ struct GammaConversions { } } - void processPDGHistos(int const PDGCode[], - bool const& sameMother, - float const McTrackmomentum[], - int const& theV0PassesRecCuts) + void processPDGHistos(std::span PDGCode, + bool const sameMother, + std::span McTrackmomentum, + bool const theV0PassesRecCuts) { lfillPDGHist(fMyRegistry.mV0.mBeforeAfterRecCuts[kBeforeRecCuts].mV0Kind[kRec].mContainer, PDGCode); @@ -478,17 +482,17 @@ struct GammaConversions { } } - void lfillPDGHist(mapStringHistPtr& theContainer, - int const PDGCode[]) + void lfillPDGHist(mapStringHistPtr const& theContainer, + std::span const PDGCode) { fillTH1(theContainer, "hPDGCode", PDGCode[0]); fillTH1(theContainer, "hPDGCode", PDGCode[1]); } - void lfillDecaysHist(mapStringHistPtr& theContainer, - int const PDGCode[], - int const& sameMother, - float const McTrackmomentum[]) + void lfillDecaysHist(mapStringHistPtr const& theContainer, + std::span PDGCode, + const bool sameMother, + std::span McTrackmomentum) { float MCV0p = RecoDecay::sqrtSumOfSquares(McTrackmomentum[0] + McTrackmomentum[3], McTrackmomentum[1] + McTrackmomentum[4]); @@ -539,7 +543,7 @@ struct GammaConversions { } template - void fillTruePhotonHistograms(int theBefAftRec, TMCGAMMA const& theMcPhoton, TV0 const& theV0, float const& theV0CosinePA, float McTrackmomentum[]) + void fillTruePhotonHistograms(int theBefAftRec, TMCGAMMA const& theMcPhoton, TV0 const& theV0, float const& theV0CosinePA, std::span McTrackmomentum) { fillV0HistogramsMcGamma( fMyRegistry.mV0.mBeforeAfterRecCuts[theBefAftRec].mV0Kind[kMCTrue].mContainer, @@ -567,7 +571,7 @@ struct GammaConversions { TMCGAMMA const& theMcPhoton, TV0 const& theV0, float const& theV0CosinePA, - float McTrackmomentum[]) + std::span McTrackmomentum) { fillV0HistogramsMcGamma( fMyRegistry.mV0.mRejectedByMc[theRejReason].mBeforeAfterRecCuts[theBefAftRec].mV0Kind[kMCTrue].mContainer, @@ -590,9 +594,9 @@ struct GammaConversions { } template - void fillV0MCDaughterParticlesArrays(TTRACKS ele, TTRACKS pos, - int PDGCode[], - float McParticleMomentum[], + void fillV0MCDaughterParticlesArrays(TTRACKS const& ele, TTRACKS const& pos, + std::span PDGCode, + std::span McParticleMomentum, bool& sameMother) { if ((ele.has_v0DaughterMcParticle()) && (pos.has_v0DaughterMcParticle())) { @@ -666,9 +670,9 @@ struct GammaConversions { // check if V0 passes rec cuts and fill beforeRecCuts,afterRecCuts [kRec] bool lV0PassesRecCuts = processV0(lV0, lV0CosinePA, ele, pos); - int PDGCode[2]; // Pos, then Neg - float McParticleMomentum[6]; // Mc momentum of the two daughter tracks, 0-2 = one 3-5 = two, no need to check the charges - bool sameMother; + std::array PDGCode{}; + std::array McParticleMomentum{}; + bool sameMother{}; fillV0MCDaughterParticlesArrays(ele, pos, PDGCode, McParticleMomentum, sameMother); // pointers are passed so they can be later on used here // this process function has to exist seperatly because it is only for MC Rec @@ -772,7 +776,7 @@ struct GammaConversions { // SFS todo: combine fillV0Histograms and fillV0HistogramsMcGamma template - void fillV0HistogramsMcGamma(mapStringHistPtr& theContainer, TMCGAMMA const& theMcGamma, float McTrackmomentum[]) + void fillV0HistogramsMcGamma(mapStringHistPtr& theContainer, TMCGAMMA const& theMcGamma, std::span McTrackmomentum) { fillTH1(theContainer, "hEta", theMcGamma.eta()); fillTH1(theContainer, "hPhi", theMcGamma.phi()); @@ -821,10 +825,7 @@ struct GammaConversions { bool pass_ele = trackPassesCuts(ele); bool pass_pos = trackPassesCuts(pos); - if (pass_ele && pass_pos) - return true; - else - return false; + return (pass_ele && pass_pos); } template @@ -923,7 +924,7 @@ struct GammaConversions { } }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +WorkflowSpec defineDataProcessing(ConfigContext const& context) { - return WorkflowSpec{adaptAnalysisTask(cfgc)}; + return WorkflowSpec{adaptAnalysisTask(context)}; } diff --git a/PWGEM/PhotonMeson/Utils/ClusterHistograms.h b/PWGEM/PhotonMeson/Utils/ClusterHistograms.h index 9fb34e4daee..4d770d120e3 100644 --- a/PWGEM/PhotonMeson/Utils/ClusterHistograms.h +++ b/PWGEM/PhotonMeson/Utils/ClusterHistograms.h @@ -26,6 +26,7 @@ #include +#include #include #include @@ -113,7 +114,7 @@ inline void fillClusterHistograms(o2::framework::HistogramRegistry* fRegistry, T const auto eta = cluster.eta(); const auto phi = cluster.phi(); - static constexpr std::string_view ClusterTypes[2] = {"Cluster/before/", "Cluster/after/"}; + static constexpr std::array ClusterTypes = {"Cluster/before/", "Cluster/after/"}; if constexpr (HasTrackMatching) { for (size_t iTrack = 0; iTrack < cluster.deltaEta().size(); ++iTrack) { diff --git a/PWGEM/PhotonMeson/Utils/EventHistograms.h b/PWGEM/PhotonMeson/Utils/EventHistograms.h index ab77f0fcb6d..78d09e75533 100644 --- a/PWGEM/PhotonMeson/Utils/EventHistograms.h +++ b/PWGEM/PhotonMeson/Utils/EventHistograms.h @@ -85,7 +85,7 @@ template void fillEventInfo(o2::framework::HistogramRegistry* fRegistry, TCollision const& collision, float weight = 1.) { const float maxZ = 10.f; - static constexpr std::string_view EventTypes[2] = {"before/", "after/"}; + static constexpr std::array EventTypes = {"before/", "after/"}; fRegistry->fill(HIST("Event/") + HIST(EventTypes[ev_id]) + HIST("hCollisionCounter"), 1.0, weight); if (collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) { fRegistry->fill(HIST("Event/") + HIST(EventTypes[ev_id]) + HIST("hCollisionCounter"), 2.0, weight); diff --git a/PWGEM/PhotonMeson/Utils/HNMUtilities.h b/PWGEM/PhotonMeson/Utils/HNMUtilities.h index 3dfcc4f2f87..9b25201ba54 100644 --- a/PWGEM/PhotonMeson/Utils/HNMUtilities.h +++ b/PWGEM/PhotonMeson/Utils/HNMUtilities.h @@ -10,9 +10,7 @@ // or submit itself to any jurisdiction. /// /// \file HNMUtilities.h -/// /// \brief This code provides helper functions for the reconstruction of heavy neutral mesons (omega and eta meson) via their three pion decay -/// /// \author Nicolas Strangmann (nicolas.strangmann@cern.ch) - Goethe University Frankfurt /// @@ -69,9 +67,8 @@ struct Photon { // -------> Struct to store gamma gamma pairs (pi0 or eta meson candidates) struct GammaGammaPair { - GammaGammaPair(Photon p1, Photon p2) : p1(p1), p2(p2) + GammaGammaPair(Photon const& p1, Photon const& p2) : p1(p1), p2(p2), vGG(p1.photon + p2.photon) { - vGG = p1.photon + p2.photon; } Photon p1, p2; ROOT::Math::PxPyPzEVector vGG; @@ -81,8 +78,8 @@ struct GammaGammaPair { ushort reconstructionType = photonpair::kNpair; void setReconstructionType(ushort type) { reconstructionType = type; } - float m() const { return vGG.M(); } - float pT() const { return vGG.Pt(); } + [[nodiscard]] float m() const { return vGG.M(); } + [[nodiscard]] float pT() const { return vGG.Pt(); } }; // -------> Enum to specify how the heavy neutral meson mass should be corrected based on the PDG mass of its light neutral meson decay daughter @@ -101,7 +98,7 @@ struct HeavyNeutralMeson { GammaGammaPair* gg = nullptr; ROOT::Math::PxPyPzEVector vHeavyNeutralMeson; - float m(int massCorrectionType) const + [[nodiscard]] float m(int massCorrectionType) const { float massHNM = vHeavyNeutralMeson.M(); switch (massCorrectionType) { @@ -119,30 +116,32 @@ struct HeavyNeutralMeson { } return massHNM; } - float pT() const { return vHeavyNeutralMeson.Pt(); } - float eta() const { return vHeavyNeutralMeson.Eta(); } - float phi() const { return vHeavyNeutralMeson.Phi(); } + [[nodiscard]] float pT() const { return vHeavyNeutralMeson.Pt(); } + [[nodiscard]] float eta() const { return vHeavyNeutralMeson.Eta(); } + [[nodiscard]] float phi() const { return vHeavyNeutralMeson.Phi(); } }; const int nSMEdges = 9; -inline float smPhiEdges[nSMEdges] = {1.75, 2.1, 2.45, 2.8, 3.14, 4., 4.89, 5.24, 5.58}; +inline const std::array smPhiEdges = {1.75, 2.1, 2.45, 2.8, 3.14, 4., 4.89, 5.24, 5.58}; inline int getSMNumber(float eta, float phi) { int smNumber = 0; for (int iPhiInterval = 0; iPhiInterval < nSMEdges; iPhiInterval++) { - if (phi > smPhiEdges[iPhiInterval]) + if (phi > smPhiEdges[iPhiInterval]) { smNumber = 2 * (iPhiInterval + 1); + } } - if (eta < 0) + if (eta < 0) { smNumber += 1; + } return smNumber; } /// \brief Store photons from EMC clusters and V0s in a vector and possibly add a eta and phi offset for alignment of EMCal clusters template -void storeGammasInVector(C clusters, V v0s, std::vector& vPhotons, std::array EMCEtaShift, std::array EMCPhiShift) +void storeGammasInVector(C clusters, V v0s, std::vector& vPhotons, std::array const& EMCEtaShift, std::array const& EMCPhiShift) { vPhotons.clear(); for (const auto& cluster : clusters) { @@ -155,13 +154,14 @@ void storeGammasInVector(C clusters, V v0s, std::vector& vPhotons, std:: vPhotons.push_back(Photon::fromEtaPhiEnergy(eta, phi, cluster.e())); } - for (const auto& v0 : v0s) + for (const auto& v0 : v0s) { vPhotons.push_back(Photon::fromPxPyPz(v0.px(), v0.py(), v0.pz())); + } } /// \brief Store photons from EMC clusters in a vector and possibly add a eta and phi offset for alignment of EMCal clusters -template -void storeGammasInVector(C clusters, std::vector& vPhotons, std::array EMCEtaShift, std::array EMCPhiShift) +template +void storeGammasInVector(Clusters clusters, std::vector& vPhotons, std::array const& EMCEtaShift, std::array const& EMCPhiShift) { vPhotons.clear(); for (const auto& cluster : clusters) { @@ -176,20 +176,20 @@ void storeGammasInVector(C clusters, std::vector& vPhotons, std::array vPhotons, std::vector& vGGs) +inline void reconstructGGs(std::vector const& vPhotons, std::vector& vGGs) { vGGs.clear(); // loop over all photon combinations and build meson candidates for (unsigned int ig1 = 0; ig1 < vPhotons.size(); ++ig1) { for (unsigned int ig2 = ig1 + 1; ig2 < vPhotons.size(); ++ig2) { GammaGammaPair lightMeson(vPhotons[ig1], vPhotons[ig2]); // build lightMeson from photons - if (vPhotons[ig1].isFromConversion && vPhotons[ig2].isFromConversion) + if (vPhotons[ig1].isFromConversion && vPhotons[ig2].isFromConversion) { lightMeson.setReconstructionType(photonpair::kPCMPCM); - else if (!vPhotons[ig1].isFromConversion && !vPhotons[ig2].isFromConversion) + } else if (!vPhotons[ig1].isFromConversion && !vPhotons[ig2].isFromConversion) { lightMeson.setReconstructionType(photonpair::kEMCEMC); - else + } else { lightMeson.setReconstructionType(photonpair::kPCMEMC); - + } vGGs.push_back(lightMeson); } } diff --git a/PWGEM/PhotonMeson/Utils/MCUtilities.h b/PWGEM/PhotonMeson/Utils/MCUtilities.h index 60557218784..5dd76b4ec8b 100644 --- a/PWGEM/PhotonMeson/Utils/MCUtilities.h +++ b/PWGEM/PhotonMeson/Utils/MCUtilities.h @@ -25,6 +25,7 @@ #include #include #include +#include #include //_______________________________________________________________________ @@ -91,7 +92,7 @@ int IsXFromY(T const& mctrack, TMCs const& mcTracks, const int pdgX, const int p //_______________________________________________________________________ // Go up the decay chain of a mcparticle looking for a mother with the given pdg codes, if found return this mothers daughter // E.g. Find the gamma that was created in a pi0 or eta decay -template +template int FindMotherInChain(T const& mcparticle, TMCs const& mcparticles, TTargetPDGs const& motherpdgs, const int Depth = 50) // o2-linter: disable=pdg/explicit-code (false positive) { if (!mcparticle.has_mothers() || Depth < 1) { @@ -129,7 +130,7 @@ int IsEleFromPC(T const& mctrack, TMCs const& mcTracks) return -1; } //_______________________________________________________________________ -template +template bool IsInAcceptanceNonDerived(TMCParticle const& mcparticle, TMCParticles const& mcparticles, TTargetPDGs target_pdgs, const float ymin, const float ymax, const float phimin, const float phimax) { // contents in vector of daughter ID is different. @@ -177,7 +178,7 @@ bool IsInAcceptanceNonDerived(TMCParticle const& mcparticle, TMCParticles const& return is_equal; } //_______________________________________________________________________ -template +template bool IsInAcceptance(TMCParticle const& mcparticle, TMCParticles const& mcparticles, TTargetPDGs target_pdgs, const float ymin, const float ymax, const float phimin, const float phimax) { if (mcparticle.y() < ymin || ymax < mcparticle.y()) { diff --git a/PWGEM/PhotonMeson/Utils/NMHistograms.h b/PWGEM/PhotonMeson/Utils/NMHistograms.h index af9d74c61b0..0f9ce03767a 100644 --- a/PWGEM/PhotonMeson/Utils/NMHistograms.h +++ b/PWGEM/PhotonMeson/Utils/NMHistograms.h @@ -18,6 +18,7 @@ #include "PWGEM/PhotonMeson/Utils/MCUtilities.h" +#include #include #include #include @@ -86,12 +87,12 @@ void fillTruePairInfo(o2::framework::HistogramRegistry* fRegistry, TDiphoton con float weight = eventWeight; int motherid_strhad = o2::aod::pwgem::photonmeson::utils::mcutil::IsFromWD(mcparticle.template emmcevent_as(), mcparticle, mcparticles); switch (pdg) { - case kPi0: { + case PDG_t::kPi0: { if (mcparticle.isPhysicalPrimary() || mcparticle.producedByGenerator()) { fRegistry->fill(HIST("Pair/Pi0/hs_Primary"), v12.M(), v12.Pt(), weight); } else if (motherid_strhad > 0) { auto str_had = mcparticles.iteratorAt(motherid_strhad); - if (std::abs(str_had.pdgCode()) == kK0Short && f1fd_k0s_to_pi0 != nullptr) { + if (std::abs(str_had.pdgCode()) == PDG_t::kK0Short && f1fd_k0s_to_pi0 != nullptr) { weight *= f1fd_k0s_to_pi0->Eval(str_had.pt()); } fRegistry->fill(HIST("Pair/Pi0/hs_FromWD"), v12.M(), v12.Pt(), weight); @@ -100,7 +101,7 @@ void fillTruePairInfo(o2::framework::HistogramRegistry* fRegistry, TDiphoton con } break; } - case 221: { + case constants::physics::kEta: { if (mcparticle.isPhysicalPrimary() || mcparticle.producedByGenerator()) { fRegistry->fill(HIST("Pair/Eta/hs_Primary"), v12.M(), v12.Pt(), weight); } else if (motherid_strhad > 0) { diff --git a/PWGEM/PhotonMeson/Utils/PCMUtilities.h b/PWGEM/PhotonMeson/Utils/PCMUtilities.h index 269db4f46fb..7453d506329 100644 --- a/PWGEM/PhotonMeson/Utils/PCMUtilities.h +++ b/PWGEM/PhotonMeson/Utils/PCMUtilities.h @@ -21,25 +21,22 @@ #include #include +#include #include #include -#include +#include // IWYU pragma: keep (for rotate) +#include // IWYU pragma: keep (do not replace with Math/Vector2Dfwd.h) +#include #include #include -#include - //_______________________________________________________________________ inline bool checkAP(const float alpha, const float qt, const float alpha_max = 0.95, const float qt_max = 0.05) { float ellipse = std::pow(alpha / alpha_max, 2) + std::pow(qt / qt_max, 2); - if (ellipse < 1.0) { - return true; - } else { - return false; - } + return (ellipse < 1.0); } //_______________________________________________________________________ inline float v0_alpha(float pxpos, float pypos, float pzpos, float pxneg, float pyneg, float pzneg) @@ -58,7 +55,7 @@ inline float v0_qt(float pxpos, float pypos, float pzpos, float pxneg, float pyn } //_______________________________________________________________________ template -inline void Vtx_recalculationParCov(o2::base::Propagator* prop, const o2::track::TrackParametrizationWithError& trackPosInformation, const o2::track::TrackParametrizationWithError& trackNegInformation, float xyz[3], o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrNONE) +inline void Vtx_recalculationParCov(o2::base::Propagator* prop, const o2::track::TrackParametrizationWithError& trackPosInformation, const o2::track::TrackParametrizationWithError& trackNegInformation, std::array& xyz, o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrNONE) { float bz = prop->getNominalBz(); @@ -82,21 +79,21 @@ inline void Vtx_recalculationParCov(o2::base::Propagator* prop, const o2::track: float vertexXNeg = helixNeg.xC + helixNeg.rC * std::cos(alphaNeg); float vertexYNeg = helixNeg.yC + helixNeg.rC * std::sin(alphaNeg); - TVector2 vertexPos(vertexXPos, vertexYPos); - TVector2 vertexNeg(vertexXNeg, vertexYNeg); + ROOT::Math::XYVector vertexPos(vertexXPos, vertexYPos); + ROOT::Math::XYVector vertexNeg(vertexXNeg, vertexYNeg); // Convert to local coordinate system - TVector2 vertexPosRot = vertexPos.Rotate(-trackPosInformationCopy.getAlpha()); - TVector2 vertexNegRot = vertexNeg.Rotate(-trackNegInformationCopy.getAlpha()); + vertexPos.Rotate(-trackPosInformationCopy.getAlpha()); + vertexNeg.Rotate(-trackNegInformationCopy.getAlpha()); prop->propagateToX(trackPosInformationCopy, - vertexPosRot.X(), + vertexPos.X(), bz, o2::base::PropagatorImpl::MAX_SIN_PHI, o2::base::PropagatorImpl::MAX_STEP, matCorr); prop->propagateToX(trackNegInformationCopy, - vertexNegRot.X(), + vertexNeg.X(), bz, o2::base::PropagatorImpl::MAX_SIN_PHI, o2::base::PropagatorImpl::MAX_STEP, @@ -105,8 +102,8 @@ inline void Vtx_recalculationParCov(o2::base::Propagator* prop, const o2::track: xyz[2] = (trackPosInformationCopy.getZ() * helixNeg.rC + trackNegInformationCopy.getZ() * helixPos.rC) / (helixPos.rC + helixNeg.rC); } //_______________________________________________________________________ -template -inline void Vtx_recalculation(o2::base::Propagator* prop, T1 lTrackPos, T2 lTrackNeg, float xyz[3], o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrNONE) +template +inline void Vtx_recalculation(o2::base::Propagator* prop, T1 lTrackPos, T2 lTrackNeg, std::array& xyz, o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrNONE) { // o2::track::TrackParametrizationWithError = TrackParCov, I use the full version to have control over the data type o2::track::TrackParametrizationWithError trackPosInformation = getTrackParCov(lTrackPos); // first get an object that stores Track information (positive) @@ -114,80 +111,4 @@ inline void Vtx_recalculation(o2::base::Propagator* prop, T1 lTrackPos, T2 lTrac Vtx_recalculationParCov(prop, trackPosInformation, trackNegInformation, xyz, matCorr); } -//_______________________________________________________________________ -// template -// float getPtResolution(TV0 const& v0) -// { -// float px = v0.px(); -// float py = v0.py(); -// float pt = v0.pt(); -// float px_err = std::sqrt(std::fabs(v0.sigmaPx2())); -// float py_err = std::sqrt(std::fabs(v0.sigmaPy2())); -// float pxy_err = v0.sigmaPxPy(); -// return std::sqrt(std::pow(px / pt * px_err, 2) + std::pow(py / pt * py_err, 2) + 2.f * px / pt * py / pt * pxy_err); -// } -// //_______________________________________________________________________ -// template -// float getPhiResolution(TV0 const& v0) -// { -// float px = v0.px(); -// float py = v0.py(); -// float pt = v0.pt(); -// float px_err = std::sqrt(std::fabs(v0.sigmaPx2())); -// float py_err = std::sqrt(std::fabs(v0.sigmaPy2())); -// float pxy_err = v0.sigmaPxPy(); -// return std::sqrt(std::pow(px / pt / pt * py_err, 2) + std::pow(py / pt / pt * px_err, 2) - 2.f * px / pt / pt * py / pt / pt * pxy_err); -// } -// //_______________________________________________________________________ -// template -// float getThetaResolution(TV0 const& v0) -// { -// float px = v0.px(); -// float py = v0.py(); -// float pz = v0.pz(); -// float pt = v0.pt(); -// float p = v0.p(); -// float px_err = std::sqrt(std::fabs(v0.sigmaPx2())); -// float py_err = std::sqrt(std::fabs(v0.sigmaPy2())); -// float pz_err = std::sqrt(std::fabs(v0.sigmaPz2())); -// float pxy_err = v0.sigmaPxPy(); -// float pyz_err = v0.sigmaPyPz(); -// float pzx_err = v0.sigmaPzPx(); -// return std::sqrt(std::pow(pz * pz / p / p, 2) * (std::pow(px / pz / pt * px_err, 2) + std::pow(py / pz / pt * py_err, 2) + std::pow(pt / pz / pz * pz_err, 2) + 2.f * (px * py / pz / pz / pt / pt * pxy_err - py / pz / pz / pz * pyz_err - px / pz / pz / pz * pzx_err))); -// } -// //_______________________________________________________________________ -// template -// float getEtaResolution(TV0 const& v0) -// { -// float px = v0.px(); -// float py = v0.py(); -// float pz = v0.pz(); -// float pt = v0.pt(); -// float p = v0.p(); -// float px_err = std::sqrt(std::fabs(v0.sigmaPx2())); -// float py_err = std::sqrt(std::fabs(v0.sigmaPy2())); -// float pz_err = std::sqrt(std::fabs(v0.sigmaPz2())); -// float pxy_err = v0.sigmaPxPy(); -// float pyz_err = v0.sigmaPyPz(); -// float pzx_err = v0.sigmaPzPx(); -// return std::sqrt(std::pow(1.f / p / pt / pt, 2) * (std::pow(pz * px * px_err, 2) + std::pow(pz * py * py_err, 2) + std::pow(pt * pt * pz_err, 2) + 2.f * (pz * pz * px * py * pxy_err - pt * pt * py * pz * pyz_err - pt * pt * pz * px * pzx_err))); -// } -// //_______________________________________________________________________ -// template -// float getPResolution(TV0 const& v0) -// { -// float px = v0.px(); -// float py = v0.py(); -// float pz = v0.pz(); -// float p = v0.p(); -// float px_err = std::sqrt(std::fabs(v0.sigmaPx2())); -// float py_err = std::sqrt(std::fabs(v0.sigmaPy2())); -// float pz_err = std::sqrt(std::fabs(v0.sigmaPz2())); -// float pxy_err = v0.sigmaPxPy(); -// float pyz_err = v0.sigmaPyPz(); -// float pzx_err = v0.sigmaPzPx(); -// return std::sqrt(std::pow(1.f / p, 2) * (std::pow(px * px_err, 2) + std::pow(py * py_err, 2) + std::pow(pz * pz_err, 2) + 2.f * (px * py * pxy_err + py * pz * pyz_err + pz * px * pzx_err))); -// } -//_______________________________________________________________________ -//_______________________________________________________________________ #endif // PWGEM_PHOTONMESON_UTILS_PCMUTILITIES_H_ diff --git a/PWGEM/PhotonMeson/Utils/gammaConvDefinitions.h b/PWGEM/PhotonMeson/Utils/gammaConvDefinitions.h index 0ef33364c80..b5a7be0d04a 100644 --- a/PWGEM/PhotonMeson/Utils/gammaConvDefinitions.h +++ b/PWGEM/PhotonMeson/Utils/gammaConvDefinitions.h @@ -35,7 +35,7 @@ o2::framework::AxisSpec const gAxis_TPCdEdxSig{401, -10.025f, 10.025f}; o2::framework::AxisSpec const gAxis_radRes{800, -o2::constants::math::PI, o2::constants::math::PI}; o2::framework::AxisSpec const gAxis_xyz{2400, -300.f, 300.f}; o2::framework::AxisSpec const gAxis_chi2{501, -1.f, 500.f}; -o2::framework::AxisSpec gAxis_pT_log{800, 0.01f, 25.f}; +o2::framework::AxisSpec const gAxis_pT_log{800, 0.01f, 25.f}; o2::framework::HistogramSpec const gHistoSpec_hCollisionZ_all_MCTrue{"hCollisionZ_all_MCTrue", "hCollisionZ_all_MCTrue;z (cm);counts", {o2::framework::HistType::kTH1F, {gAxis_zColl}}}; o2::framework::HistogramSpec const gHistoSpec_hCollisionZ_MCTrue{"hCollisionZ_MCTrue", "hCollisionZ_MCTrue;z (cm);counts", {o2::framework::HistType::kTH1F, {gAxis_zColl}}}; diff --git a/PWGHF/D2H/Core/DataCreationCharmReso.h b/PWGHF/D2H/Core/DataCreationCharmReso.h index 87621940c91..09904380a89 100644 --- a/PWGHF/D2H/Core/DataCreationCharmReso.h +++ b/PWGHF/D2H/Core/DataCreationCharmReso.h @@ -65,9 +65,7 @@ #include #include -namespace o2::analysis -{ -namespace hf_charm_reso +namespace o2::analysis::hf_charm_reso { // event types @@ -226,7 +224,7 @@ template void addHistograms(o2::framework::HistogramRegistry& registry) { constexpr uint8_t NumBinsEvents = EventType::NEventType; - std::string labels[NumBinsEvents]; + std::array labels; labels[EventType::Processed] = "processed"; labels[EventType::NoDV0Selected] = "without DV0 pairs"; labels[EventType::DV0Selected] = "with DV0 pairs"; @@ -542,7 +540,7 @@ bool buildAndSelectGamma(const Coll& collision, const std::array& dDaugh return false; } - std::array dcaInfo; + std::array dcaInfo{}; auto trackParPos = getTrackParCov(trackPos); if (o2::pwgem::photonmeson::isTPConlyTrack(trackPos) && !vDriftMgr->moveTPCTrack(collision, trackPos, trackParPos)) { LOGP(error, "failed correction for positive tpc track"); @@ -568,7 +566,7 @@ bool buildAndSelectGamma(const Coll& collision, const std::array& dDaugh return false; } - float gammaVtx[3] = {0.f, 0.f, 0.f}; + std::array gammaVtx = {0.f, 0.f, 0.f}; Vtx_recalculationParCov(o2::base::Propagator::Instance(), trackParPropPos, trackParPropNeg, gammaVtx, matCorr); float radiusXy = std::hypot(gammaVtx[0], gammaVtx[1]); const float maxX{83.1f}; // max X for track IU @@ -585,17 +583,17 @@ bool buildAndSelectGamma(const Coll& collision, const std::array& dDaugh KFPTrack kfpTrackNeg = createKFPTrackFromTrackParCov(trackParPropNeg, trackNeg.sign(), trackNeg.tpcNClsFound(), trackNeg.tpcChi2NCl()); KFParticle kfPartPos(kfpTrackPos, kPositron); KFParticle kfPartNeg(kfpTrackNeg, kElectron); - const KFParticle* gammaDaughters[2] = {&kfPartPos, &kfPartNeg}; + std::array gammaDaughters = {&kfPartPos, &kfPartNeg}; KFParticle gamma; gamma.SetConstructMethod(2); - gamma.Construct(gammaDaughters, 2); + gamma.Construct(gammaDaughters.data(), 2); KFPVertex kfpVertex = createKFPVertexFromCollision(collision); KFParticle KFPV(kfpVertex); // Transport the gamma to the recalculated decay vertex KFParticle gammaDecayVtx = gamma; // with respect to (0,0,0) - gammaDecayVtx.TransportToPoint(gammaVtx); + gammaDecayVtx.TransportToPoint(gammaVtx.data()); v0.cosPA = cpaFromKF(gammaDecayVtx, KFPV); if (v0.cosPA < cfgGammaCuts.cosPa.value) { return false; @@ -634,10 +632,10 @@ bool buildAndSelectGamma(const Coll& collision, const std::array& dDaugh return false; } - KFParticle kfPartDecayVtxPos = kfPartPos; // Don't set Primary Vertex - KFParticle kfPartDecayVtxNeg = kfPartNeg; // Don't set Primary Vertex - kfPartDecayVtxPos.TransportToPoint(gammaVtx); // Don't set Primary Vertex - kfPartDecayVtxNeg.TransportToPoint(gammaVtx); // Don't set Primary Vertex + KFParticle kfPartDecayVtxPos = kfPartPos; // Don't set Primary Vertex + KFParticle kfPartDecayVtxNeg = kfPartNeg; // Don't set Primary Vertex + kfPartDecayVtxPos.TransportToPoint(gammaVtx.data()); // Don't set Primary Vertex + kfPartDecayVtxNeg.TransportToPoint(gammaVtx.data()); // Don't set Primary Vertex v0.dcaDau = kfPartDecayVtxPos.GetDistanceFromParticle(kfPartDecayVtxNeg); v0.momPos = RecoDecay::pVec(std::array{kfPartDecayVtxPos.GetPx(), kfPartDecayVtxPos.GetPy(), kfPartDecayVtxPos.GetPz()}); v0.momNeg = RecoDecay::pVec(std::array{kfPartDecayVtxNeg.GetPx(), kfPartDecayVtxNeg.GetPy(), kfPartDecayVtxNeg.GetPz()}); @@ -2013,7 +2011,6 @@ void runMcGen(McParticles const& mcParticles, } } } -} // namespace hf_charm_reso -} // namespace o2::analysis +} // namespace o2::analysis::hf_charm_reso #endif // PWGHF_D2H_CORE_DATACREATIONCHARMRESO_H_