Skip to content

Commit 224965c

Browse files
authored
PWGEM/PhotonMeson: add N TPC shared clusters in data table (#7673)
1 parent e5b1083 commit 224965c

9 files changed

Lines changed: 253 additions & 55 deletions

File tree

PWGEM/Dilepton/Core/PhotonHBT.h

Lines changed: 120 additions & 36 deletions
Large diffs are not rendered by default.

PWGEM/Dilepton/Tasks/vpPairQC.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,8 @@ struct vpPairQC {
215215
fRegistry.add("Track/positive/hQoverPt", "q/pT;q/p_{T} (GeV/c)^{-1}", kTH1F, {{400, -20, 20}}, false);
216216
fRegistry.add("Track/positive/hPResolution", "p resolution;p (GeV/c);#Deltap/p", kTH2F, {{1000, 0.0f, 10.0f}, {100, 0.0f, 0.1f}}, false);
217217
fRegistry.add("Track/positive/hPtResolution", "p_{T} resolution;p (GeV/c);#Deltap_{T}/p_{T}", kTH2F, {{1000, 0.0f, 10.0f}, {100, 0.0f, 0.1f}}, false);
218-
fRegistry.add("Track/positive/hThetaResolution", "#theta resolution;p (GeV/c);#Delta#theta (rad.)", kTH2F, {{1000, 0.0f, 10.0f}, {200, 0.0f, 0.02f}}, false);
219-
fRegistry.add("Track/positive/hPhiResolution", "#varphi resolution;p (GeV/c);#Delta#varphi (rad.)", kTH2F, {{1000, 0.0f, 10.0f}, {200, 0.0f, 0.02f}}, false);
218+
fRegistry.add("Track/positive/hThetaResolution", "#theta resolution;p (GeV/c);#Delta#theta (rad.)", kTH2F, {{1000, 0.0f, 10.0f}, {100, 0.0f, 0.01f}}, false);
219+
fRegistry.add("Track/positive/hPhiResolution", "#varphi resolution;p (GeV/c);#Delta#varphi (rad.)", kTH2F, {{1000, 0.0f, 10.0f}, {100, 0.0f, 0.01f}}, false);
220220
fRegistry.add("Track/positive/hDCAxyz", "DCA xy vs. z;DCA_{xy} (cm);DCA_{z} (cm)", kTH2F, {{200, -1.0f, 1.0f}, {200, -1.0f, 1.0f}}, false);
221221
fRegistry.add("Track/positive/hDCAxyzSigma", "DCA xy vs. z;DCA_{xy} (#sigma);DCA_{z} (#sigma)", kTH2F, {{200, -10.0f, 10.0f}, {200, -10.0f, 10.0f}}, false);
222222
fRegistry.add("Track/positive/hDCAxyRes_Pt", "DCA_{xy} resolution vs. pT;p_{T} (GeV/c);DCA_{xy} resolution (#mum)", kTH2F, {{200, 0, 10}, {200, 0., 400}}, false);

PWGEM/Dilepton/Utils/EMTrackUtilities.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ float sigmaLambda(T const& track)
7777
template <typename T>
7878
float sigmaP(T const& track)
7979
{
80-
// p = pT x cosh(eta);
81-
return std::sqrt(std::pow(std::cosh(track.eta()) * sigmaPt(track), 2) + std::pow(track.pt() * std::sinh(track.eta()) * std::cosh(track.eta()) * sigmaLambda(track), 2));
80+
// p = 1/1/pT x 1/cos(lambda);
81+
return std::sqrt(std::pow(1.f / track.signed1Pt(), 4) * ((1.f + std::pow(track.tgl(), 2)) * track.c1Pt21Pt2() + 1.f / (1.f + std::pow(track.tgl(), 2)) * std::pow(track.signed1Pt() * track.tgl(), 2) * track.cTglTgl() - 2.f * track.signed1Pt() * track.tgl() * track.c1PtTgl()));
8282
}
8383
//_______________________________________________________________________
8484
} // namespace o2::aod::pwgem::dilepton::utils::emtrackutil

PWGEM/PhotonMeson/DataModel/gammaTables.h

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ DECLARE_SOA_TABLE(V0Legs, "AOD", "V0LEG", //!
170170
o2::soa::Index<>, v0leg::CollisionId, v0leg::TrackId, v0leg::Sign,
171171
v0leg::Px, v0leg::Py, v0leg::Pz,
172172
track::DcaXY, track::DcaZ,
173-
track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows,
173+
track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsShared,
174174
track::TPCChi2NCl, track::TPCInnerParam,
175175
track::TPCSignal, pidtpc::TPCNSigmaEl, pidtpc::TPCNSigmaPi,
176176
track::ITSClusterSizes, track::ITSChi2NCl, track::DetectorMap,
@@ -185,6 +185,7 @@ DECLARE_SOA_TABLE(V0Legs, "AOD", "V0LEG", //!
185185
track::TPCNClsCrossedRows<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
186186
track::TPCCrossedRowsOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
187187
track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
188+
track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
188189
track::v001::ITSClusterMap<track::ITSClusterSizes>, track::v001::ITSNCls<track::ITSClusterSizes>, track::v001::ITSNClsInnerBarrel<track::ITSClusterSizes>,
189190
track::HasITS<track::DetectorMap>, track::HasTPC<track::DetectorMap>,
190191
track::HasTRD<track::DetectorMap>, track::HasTOF<track::DetectorMap>,
@@ -207,6 +208,7 @@ namespace v0photonkf
207208
{
208209
DECLARE_SOA_INDEX_COLUMN(EMEvent, emevent); //!
209210
DECLARE_SOA_COLUMN(CollisionId, collisionId, int); //!
211+
DECLARE_SOA_COLUMN(V0Id, v0Id, int); //!
210212
DECLARE_SOA_INDEX_COLUMN_FULL(PosTrack, posTrack, int, V0Legs, "_Pos"); //!
211213
DECLARE_SOA_INDEX_COLUMN_FULL(NegTrack, negTrack, int, V0Legs, "_Neg"); //!
212214
DECLARE_SOA_COLUMN(Vx, vx, float); //! secondary vertex x
@@ -223,6 +225,12 @@ DECLARE_SOA_COLUMN(PCA, pca, float); //!
223225
DECLARE_SOA_COLUMN(Alpha, alpha, float); //!
224226
DECLARE_SOA_COLUMN(QtArm, qtarm, float); //!
225227
DECLARE_SOA_COLUMN(ChiSquareNDF, chiSquareNDF, float); // Chi2 / NDF of the reconstructed V0
228+
DECLARE_SOA_COLUMN(SigmaPx2, sigmaPx2, float); //! error^2 of px in covariant matrix
229+
DECLARE_SOA_COLUMN(SigmaPy2, sigmaPy2, float); //! error^2 of py in covariant matrix
230+
DECLARE_SOA_COLUMN(SigmaPz2, sigmaPz2, float); //! error^2 of pz in covariant matrix
231+
DECLARE_SOA_COLUMN(SigmaPxPy, sigmaPxPy, float); //! error of px x py in covariant matrix
232+
DECLARE_SOA_COLUMN(SigmaPyPz, sigmaPyPz, float); //! error of py x pz in covariant matrix
233+
DECLARE_SOA_COLUMN(SigmaPzPx, sigmaPzPx, float); //! error of pz x px in covariant matrix
226234

227235
DECLARE_SOA_DYNAMIC_COLUMN(E, e, [](float px, float py, float pz, float m = 0) -> float { return RecoDecay::sqrtSumOfSquares(px, py, pz, m); }); //! energy of v0 photn, mass to be given as argument when getter is called!
228236
DECLARE_SOA_DYNAMIC_COLUMN(Pt, pt, [](float px, float py) -> float { return RecoDecay::sqrtSumOfSquares(px, py); });
@@ -232,7 +240,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(P, p, [](float px, float py, float pz) -> float { ret
232240
DECLARE_SOA_DYNAMIC_COLUMN(V0Radius, v0radius, [](float vx, float vy) -> float { return RecoDecay::sqrtSumOfSquares(vx, vy); });
233241
} // namespace v0photonkf
234242
DECLARE_SOA_TABLE(V0PhotonsKF, "AOD", "V0PHOTONKF", //!
235-
o2::soa::Index<>, v0photonkf::CollisionId, v0photonkf::PosTrackId, v0photonkf::NegTrackId,
243+
o2::soa::Index<>, v0photonkf::CollisionId, v0photonkf::V0Id, v0photonkf::PosTrackId, v0photonkf::NegTrackId,
236244
v0photonkf::Vx, v0photonkf::Vy, v0photonkf::Vz,
237245
v0photonkf::Px, v0photonkf::Py, v0photonkf::Pz,
238246
v0photonkf::MGamma,
@@ -255,6 +263,11 @@ DECLARE_SOA_TABLE(V0KFEMEventIds, "AOD", "V0KFEMEVENTID", v0photonkf::EMEventId)
255263
// iterators
256264
using V0KFEMEventId = V0KFEMEventIds::iterator;
257265

266+
DECLARE_SOA_TABLE(V0PhotonsKFCov, "AOD", "V0PHOTONKFCOV", //! To be joined with V0PhotonsKF table at analysis level.
267+
v0photonkf::SigmaPx2, v0photonkf::SigmaPy2, v0photonkf::SigmaPz2, v0photonkf::SigmaPxPy, v0photonkf::SigmaPyPz, v0photonkf::SigmaPzPx);
268+
// iterators
269+
using V0PhotonKFCov = V0PhotonsKFCov::iterator;
270+
258271
DECLARE_SOA_TABLE(EMPrimaryElectronsFromDalitz, "AOD", "EMPRIMARYELDA", //!
259272
o2::soa::Index<>, emprimaryelectron::CollisionId,
260273
emprimaryelectron::TrackId, emprimaryelectron::Sign,

PWGEM/PhotonMeson/TableProducer/photonconversionbuilder.cxx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ using MyTracksIUMC = soa::Join<MyTracksIU, aod::McTrackLabels>;
6565

6666
struct PhotonConversionBuilder {
6767
Produces<aod::V0PhotonsKF> v0photonskf;
68+
Produces<aod::V0PhotonsKFCov> v0photonskfcov;
6869
Produces<aod::V0Legs> v0legs;
6970
Produces<aod::EMEventsNgPCM> events_ngpcm;
7071

@@ -370,7 +371,7 @@ struct PhotonConversionBuilder {
370371
{
371372
v0legs(track.collisionId(), track.globalIndex(), track.sign(),
372373
kfp.GetPx(), kfp.GetPy(), kfp.GetPz(), dcaXY, dcaZ,
373-
track.tpcNClsFindable(), track.tpcNClsFindableMinusFound(), track.tpcNClsFindableMinusCrossedRows(),
374+
track.tpcNClsFindable(), track.tpcNClsFindableMinusFound(), track.tpcNClsFindableMinusCrossedRows(), track.tpcNClsShared(),
374375
track.tpcChi2NCl(), track.tpcInnerParam(), track.tpcSignal(),
375376
track.tpcNSigmaEl(), track.tpcNSigmaPi(),
376377
track.itsClusterSizes(), track.itsChi2NCl(), track.detectorMap(),
@@ -660,12 +661,14 @@ struct PhotonConversionBuilder {
660661
ROOT::Math::PxPyPzMVector v0_sv = vpos_sv + vele_sv;
661662
registry.fill(HIST("V0/hMeeSV_Rxy"), rxy, v0_sv.M());
662663

663-
v0photonskf(collision.globalIndex(), v0legs.lastIndex() + 1, v0legs.lastIndex() + 2,
664+
v0photonskf(collision.globalIndex(), v0.globalIndex(), v0legs.lastIndex() + 1, v0legs.lastIndex() + 2,
664665
gammaKF_DecayVtx.GetX(), gammaKF_DecayVtx.GetY(), gammaKF_DecayVtx.GetZ(),
665666
gammaKF_PV.GetPx(), gammaKF_PV.GetPy(), gammaKF_PV.GetPz(),
666667
v0_sv.M(), dca_xy_v0_to_pv, dca_z_v0_to_pv,
667668
cospa_kf, pca_kf, alpha, qt, chi2kf);
668669

670+
v0photonskfcov(gammaKF_PV.GetCovariance(9), gammaKF_PV.GetCovariance(14), gammaKF_PV.GetCovariance(20), gammaKF_PV.GetCovariance(13), gammaKF_PV.GetCovariance(19), gammaKF_PV.GetCovariance(18));
671+
669672
fillTrackTable(pos, pTrack, kfp_pos_DecayVtx, posdcaXY, posdcaZ); // positive leg first
670673
fillTrackTable(ele, nTrack, kfp_ele_DecayVtx, eledcaXY, eledcaZ); // negative leg second
671674
} // end of fill table

PWGEM/PhotonMeson/TableProducer/skimmerGammaConversion.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ struct skimmerGammaConversion {
181181
v0legs(theTrack.collisionId(),
182182
theTrack.globalIndex(), theTrack.sign(),
183183
kfp.GetPx(), kfp.GetPy(), kfp.GetPz(), theTrack.dcaXY(), theTrack.dcaZ(),
184-
theTrack.tpcNClsFindable(), theTrack.tpcNClsFindableMinusFound(), theTrack.tpcNClsFindableMinusCrossedRows(),
184+
theTrack.tpcNClsFindable(), theTrack.tpcNClsFindableMinusFound(), theTrack.tpcNClsFindableMinusCrossedRows(), theTrack.tpcNClsShared(),
185185
theTrack.tpcChi2NCl(), theTrack.tpcInnerParam(), theTrack.tpcSignal(),
186186
theTrack.tpcNSigmaEl(), theTrack.tpcNSigmaPi(),
187187
theTrack.itsClusterSizes(), theTrack.itsChi2NCl(), theTrack.detectorMap(),
@@ -304,7 +304,7 @@ struct skimmerGammaConversion {
304304
float sign_tmp = dca_y_v0_to_pv > 0 ? +1 : -1;
305305
float dca_xy_v0_to_pv = RecoDecay::sqrtSumOfSquares(dca_x_v0_to_pv, dca_y_v0_to_pv) * sign_tmp;
306306

307-
v0photonskf(collision.globalIndex(), v0legs.lastIndex() + 1, v0legs.lastIndex() + 2,
307+
v0photonskf(collision.globalIndex(), v0.globalIndex(), v0legs.lastIndex() + 1, v0legs.lastIndex() + 2,
308308
gammaKF_DecayVtx.GetX(), gammaKF_DecayVtx.GetY(), gammaKF_DecayVtx.GetZ(),
309309
gammaKF_DecayVtx.GetPx(), gammaKF_DecayVtx.GetPy(), gammaKF_DecayVtx.GetPz(),
310310
v0_sv.M(), dca_xy_v0_to_pv, dca_z_v0_to_pv,
@@ -342,7 +342,7 @@ struct skimmerGammaConversion {
342342
fillV0KF<tracksAndTPCInfo>(collision, v0);
343343

344344
} // end of v0 loop
345-
} // end of collision loop
345+
} // end of collision loop
346346
}
347347
PROCESS_SWITCH(skimmerGammaConversion, processRec, "process reconstructed info only", true);
348348

PWGEM/PhotonMeson/Tasks/pcmQC.cxx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ using namespace o2::aod::pwgem::photon;
3434
using MyCollisions = soa::Join<aod::EMEvents, aod::EMEventsMult, aod::EMEventsCent>;
3535
using MyCollision = MyCollisions::iterator;
3636

37-
using MyV0Photons = soa::Join<aod::V0PhotonsKF, aod::V0KFEMEventIds>;
37+
using MyV0Photons = soa::Join<aod::V0PhotonsKF, aod::V0PhotonsKFCov, aod::V0KFEMEventIds>;
3838
using MyV0Photon = MyV0Photons::iterator;
3939

4040
struct PCMQC {
@@ -66,7 +66,8 @@ struct PCMQC {
6666
Configurable<bool> cfg_require_v0_with_tpconly{"cfg_require_v0_with_tpconly", false, "flag to select V0s with TPConly tracks"};
6767
Configurable<bool> cfg_require_v0_on_wwire_ib{"cfg_require_v0_on_wwire_ib", false, "flag to select V0s on W wires ITSib"};
6868
Configurable<float> cfg_min_pt_v0{"cfg_min_pt_v0", 0.1, "min pT for v0 photons at PV"};
69-
Configurable<float> cfg_max_eta_v0{"cfg_max_eta_v0", 0.8, "max eta for v0 photons at PV"};
69+
Configurable<float> cfg_min_eta_v0{"cfg_min_eta_v0", -0.8, "min eta for v0 photons at PV"};
70+
Configurable<float> cfg_max_eta_v0{"cfg_max_eta_v0", +0.8, "max eta for v0 photons at PV"};
7071
Configurable<float> cfg_min_v0radius{"cfg_min_v0radius", 4.0, "min v0 radius"};
7172
Configurable<float> cfg_max_v0radius{"cfg_max_v0radius", 90.0, "max v0 radius"};
7273
Configurable<float> cfg_max_alpha_ap{"cfg_max_alpha_ap", 0.95, "max alpha for AP cut"};
@@ -138,6 +139,11 @@ struct PCMQC {
138139
fRegistry.add("V0/hKFChi2vsX", "KF chi2 vs. conversion point in X;X (cm);KF chi2/NDF", kTH2F, {{200, -100.0f, 100.0f}, {100, 0.f, 100.0f}}, false);
139140
fRegistry.add("V0/hKFChi2vsY", "KF chi2 vs. conversion point in Y;Y (cm);KF chi2/NDF", kTH2F, {{200, -100.0f, 100.0f}, {100, 0.f, 100.0f}}, false);
140141
fRegistry.add("V0/hKFChi2vsZ", "KF chi2 vs. conversion point in Z;Z (cm);KF chi2/NDF", kTH2F, {{200, -100.0f, 100.0f}, {100, 0.f, 100.0f}}, false);
142+
fRegistry.add("V0/hPResolution", "p resolution;p_{#gamma} (GeV/c);#Deltap/p", kTH2F, {{1000, 0.0f, 10}, {100, 0, 0.1}}, false);
143+
fRegistry.add("V0/hPtResolution", "p_{T} resolution;p_{#gamma} (GeV/c);#Deltap_{T}/p_{T}", kTH2F, {{1000, 0.0f, 10}, {100, 0, 0.1}}, false);
144+
fRegistry.add("V0/hEtaResolution", "#eta resolution;p_{#gamma} (GeV/c);#Delta#eta", kTH2F, {{1000, 0.0f, 10}, {100, 0, 0.01}}, false);
145+
fRegistry.add("V0/hThetaResolution", "#theta resolution;p_{#gamma} (GeV/c);#Delta#theta (rad.)", kTH2F, {{1000, 0.0f, 10}, {100, 0, 0.01}}, false);
146+
fRegistry.add("V0/hPhiResolution", "#varphi resolution;p_{#gamma} (GeV/c);#Delta#varphi (rad.)", kTH2F, {{1000, 0.0f, 10}, {100, 0, 0.01}}, false);
141147
fRegistry.add("V0/hNgamma", "Number of #gamma candidates per collision", kTH1F, {{101, -0.5f, 100.5f}});
142148

143149
// v0leg info
@@ -183,7 +189,7 @@ struct PCMQC {
183189

184190
// for v0
185191
fV0PhotonCut.SetV0PtRange(pcmcuts.cfg_min_pt_v0, 1e10f);
186-
fV0PhotonCut.SetV0EtaRange(-pcmcuts.cfg_max_eta_v0, +pcmcuts.cfg_max_eta_v0);
192+
fV0PhotonCut.SetV0EtaRange(pcmcuts.cfg_min_eta_v0, pcmcuts.cfg_max_eta_v0);
187193
fV0PhotonCut.SetMinCosPA(pcmcuts.cfg_min_cospa);
188194
fV0PhotonCut.SetMaxPCA(pcmcuts.cfg_max_pca);
189195
fV0PhotonCut.SetRxyRange(pcmcuts.cfg_min_v0radius, pcmcuts.cfg_max_v0radius);
@@ -192,7 +198,7 @@ struct PCMQC {
192198

193199
// for track
194200
fV0PhotonCut.SetTrackPtRange(pcmcuts.cfg_min_pt_v0 * 0.4, 1e+10f);
195-
fV0PhotonCut.SetTrackEtaRange(-pcmcuts.cfg_max_eta_v0, +pcmcuts.cfg_max_eta_v0);
201+
fV0PhotonCut.SetTrackEtaRange(pcmcuts.cfg_min_eta_v0, pcmcuts.cfg_max_eta_v0);
196202
fV0PhotonCut.SetMinNClustersTPC(pcmcuts.cfg_min_ncluster_tpc);
197203
fV0PhotonCut.SetMinNCrossedRowsTPC(pcmcuts.cfg_min_ncrossedrows);
198204
fV0PhotonCut.SetMinNCrossedRowsOverFindableClustersTPC(0.8);
@@ -292,6 +298,11 @@ struct PCMQC {
292298
fRegistry.fill(HIST("V0/hKFChi2vsX"), v0.vx(), v0.chiSquareNDF());
293299
fRegistry.fill(HIST("V0/hKFChi2vsY"), v0.vy(), v0.chiSquareNDF());
294300
fRegistry.fill(HIST("V0/hKFChi2vsZ"), v0.vz(), v0.chiSquareNDF());
301+
fRegistry.fill(HIST("V0/hPResolution"), v0.p(), getPResolution(v0) / v0.p());
302+
fRegistry.fill(HIST("V0/hPtResolution"), v0.p(), getPtResolution(v0) / v0.pt());
303+
fRegistry.fill(HIST("V0/hEtaResolution"), v0.p(), getEtaResolution(v0));
304+
fRegistry.fill(HIST("V0/hThetaResolution"), v0.p(), getThetaResolution(v0));
305+
fRegistry.fill(HIST("V0/hPhiResolution"), v0.p(), getPhiResolution(v0));
295306
}
296307

297308
template <typename TLeg>

0 commit comments

Comments
 (0)