|
15 | 15 | #define ALICEO2_V0EXT_H |
16 | 16 |
|
17 | 17 | #include "ReconstructionDataFormats/V0.h" |
| 18 | +#include "ReconstructionDataFormats/PrimaryVertex.h" |
18 | 19 | #include "SimulationDataFormat/MCCompLabel.h" |
| 20 | +#include "SimulationDataFormat/MCTrack.h" |
19 | 21 |
|
20 | 22 | namespace o2::dataformats |
21 | 23 | { |
@@ -44,6 +46,69 @@ struct V0Ext { |
44 | 46 | ClassDefNV(V0Ext, 2); |
45 | 47 | }; |
46 | 48 |
|
| 49 | +// Ordered enum: higher value = got further in the selection. |
| 50 | +// Use max-assign semantics so the deepest-reached stage is always recorded. |
| 51 | +enum PoolInfo : uint8_t { |
| 52 | + Unset = 0, // not yet processed |
| 53 | + Unassigned, // seen only in unassigned-track bucket (no collision match) |
| 54 | + Considered, // seen in vertex-associated loop |
| 55 | + RejTPCMaxX, // processTPCTrack: X position cut |
| 56 | + RejTPCCorr, // processTPCTrack: drift correction failed |
| 57 | + RejTPCPhotonCls, // processTPCTrack: photon-tune min TPC clusters |
| 58 | + RejTPCPhotonDPV, // processTPCTrack: photon-tune z-to-beam cut |
| 59 | + RejTPCPhotonRD2, // processTPCTrack: photon-tune transverse radius cut |
| 60 | + RejPVContrib, // acceptTrack: PV contributor cut |
| 61 | + RejDCAToPV, // acceptTrack: DCA to PV too small |
| 62 | + RejShortITS, // buildT2V: short ITS-only track |
| 63 | + Accepted, // entered the track pool |
| 64 | +}; |
| 65 | +struct ProngMCInfoExt { |
| 66 | + detectors::DetID::mask_t recoMask; // detector mask |
| 67 | + o2::track::TrackPar trk; // most global reco'd track |
| 68 | + MCTrack mcTrk; |
| 69 | + PoolInfo poolStatus = PoolInfo::Unset; |
| 70 | + ClassDefNV(ProngMCInfoExt, 1); |
| 71 | +}; |
| 72 | + |
| 73 | +struct V0MCExt { |
| 74 | + V0 v0; // reconstructed v0 |
| 75 | + MCTrack mcTrk; |
| 76 | + std::array<ProngMCInfoExt, 2> prInfo{}; |
| 77 | + const ProngMCInfoExt& getPrInfo(int i) const { return prInfo[i]; } |
| 78 | + bool hasBothProngs() const noexcept { return prInfo[0].recoMask.any() && prInfo[1].recoMask.any(); } |
| 79 | + enum PairStatus : uint8_t { |
| 80 | + Unpaired = 0, // never reached pair loop |
| 81 | + NoOverlap, // bracket overlap check failed |
| 82 | + MaxPV, // PV contributor cut |
| 83 | + // checkV0 rejections, ordered by depth in the function: |
| 84 | + RejTgl, // |tgl_pos - tgl_neg| too large (TPC photon tune) |
| 85 | + RejD2R, // circle center distance vs radii sum (TPC photon tune) |
| 86 | + RejDR, // estimated conversion radius too large (TPC photon tune) |
| 87 | + RejDCAFitter, // DCAFitter found no candidate |
| 88 | + RejMinR, // V0 radius too close to beam line |
| 89 | + RejCausality, // causality check (V0 radius vs track inner radius) |
| 90 | + RejPropagation, // propagation to PCA failed |
| 91 | + RejPt, // V0 pT too low |
| 92 | + RejTgLambda, // V0 tgLambda too large |
| 93 | + RejHypothesis, // no mass hypothesis matched |
| 94 | + RejDCAToMV, // DCA or cosPAXY to mean vertex failed |
| 95 | + RejCosPA, // no PV passed cosPA cut |
| 96 | + Found, // reconstructed V0 added to output |
| 97 | + }; |
| 98 | + PairStatus pairStatus = Unpaired; |
| 99 | + |
| 100 | + ClassDefNV(V0MCExt, 1); |
| 101 | +}; |
| 102 | + |
| 103 | +struct V0MCFull { |
| 104 | + V0 v0; |
| 105 | + std::array<bool, 8> hypStatus{}; |
| 106 | + int pdg = -1; |
| 107 | + o2::MCCompLabel label; |
| 108 | + |
| 109 | + ClassDefNV(V0MCFull, 1); |
| 110 | +}; |
| 111 | + |
47 | 112 | } // namespace o2::dataformats |
48 | 113 |
|
49 | 114 | #endif |
0 commit comments