Skip to content

Commit 3060ac7

Browse files
Merge branch 'master' into ForMarian
2 parents 96a44dc + 31b13b3 commit 3060ac7

File tree

126 files changed

+11973
-2669
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+11973
-2669
lines changed

ALICE3/DataModel/OTFMcTrackExtra.h

Lines changed: 0 additions & 42 deletions
This file was deleted.

ALICE3/DataModel/OTFMulticharm.h

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#define ALICE3_DATAMODEL_OTFMULTICHARM_H_
2222

2323
// O2 includes
24+
#include "ALICE3/DataModel/OTFStrangeness.h"
25+
2426
#include "Framework/AnalysisDataModel.h"
2527

2628
namespace o2::aod
@@ -36,8 +38,8 @@ DECLARE_SOA_COLUMN(XicMass, xicMass, float);
3638
DECLARE_SOA_COLUMN(XiccMass, xiccMass, float);
3739

3840
// kine vars
39-
DECLARE_SOA_COLUMN(Pt, pt, float);
40-
DECLARE_SOA_COLUMN(Eta, eta, float);
41+
DECLARE_SOA_COLUMN(XiccPt, xiccPt, float);
42+
DECLARE_SOA_COLUMN(XiccEta, xiccEta, float);
4143

4244
// topo vars
4345
DECLARE_SOA_COLUMN(XiDCAz, xiDCAz, float);
@@ -49,18 +51,18 @@ DECLARE_SOA_COLUMN(XiccDauDCA, xiccDauDCA, float);
4951
DECLARE_SOA_COLUMN(XiccDCAxy, xiccDCAxy, float);
5052
DECLARE_SOA_COLUMN(XiccDCAz, xiccDCAz, float);
5153

52-
DECLARE_SOA_COLUMN(PiFromXiDCAxy, piFromXiDCAxy, float);
53-
DECLARE_SOA_COLUMN(PiFromLaDCAxy, piFromLaDCAxy, float);
54-
DECLARE_SOA_COLUMN(PrFromLaDCAxy, prFromLaDCAxy, float);
55-
DECLARE_SOA_COLUMN(PiFromXiDCAz, piFromXiDCAz, float);
56-
DECLARE_SOA_COLUMN(PiFromLaDCAz, piFromLaDCAz, float);
57-
DECLARE_SOA_COLUMN(PrFromLaDCAz, prFromLaDCAz, float);
54+
DECLARE_SOA_COLUMN(BachDCAxy, bachDCAxy, float);
55+
DECLARE_SOA_COLUMN(BachDCAz, bachDCAz, float);
56+
DECLARE_SOA_COLUMN(PosDCAxy, posDCAxy, float);
57+
DECLARE_SOA_COLUMN(PosDCAz, posDCAz, float);
58+
DECLARE_SOA_COLUMN(NegDCAxy, negDCAxy, float);
59+
DECLARE_SOA_COLUMN(NegDCAz, negDCAz, float);
5860

5961
DECLARE_SOA_COLUMN(Pi1cDCAxy, pi1cDCAxy, float);
60-
DECLARE_SOA_COLUMN(Pi2cDCAxy, pi2cDCAxy, float);
61-
DECLARE_SOA_COLUMN(PiccDCAxy, piccDCAxy, float);
6262
DECLARE_SOA_COLUMN(Pi1cDCAz, pi1cDCAz, float);
63+
DECLARE_SOA_COLUMN(Pi2cDCAxy, pi2cDCAxy, float);
6364
DECLARE_SOA_COLUMN(Pi2cDCAz, pi2cDCAz, float);
65+
DECLARE_SOA_COLUMN(PiccDCAxy, piccDCAxy, float);
6466
DECLARE_SOA_COLUMN(PiccDCAz, piccDCAz, float);
6567

6668
// Lengths
@@ -75,14 +77,25 @@ DECLARE_SOA_COLUMN(Pi1cTofDeltaInner, pi1cTofDeltaInner, float);
7577
DECLARE_SOA_COLUMN(Pi1cTofNSigmaInner, pi1cTofNSigmaInner, float);
7678
DECLARE_SOA_COLUMN(Pi1cTofDeltaOuter, pi1cTofDeltaOuter, float);
7779
DECLARE_SOA_COLUMN(Pi1cTofNSigmaOuter, pi1cTofNSigmaOuter, float);
80+
DECLARE_SOA_COLUMN(Pi1cHasRichSignal, pi1cHasRichSignal, bool);
81+
DECLARE_SOA_COLUMN(Pi1cRichNSigma, pi1cRichNSigma, float);
82+
DECLARE_SOA_COLUMN(Pi1cPdgCode, pi1cPdgCode, int);
83+
7884
DECLARE_SOA_COLUMN(Pi2cTofDeltaInner, pi2cTofDeltaInner, float);
7985
DECLARE_SOA_COLUMN(Pi2cTofNSigmaInner, pi2cTofNSigmaInner, float);
8086
DECLARE_SOA_COLUMN(Pi2cTofDeltaOuter, pi2cTofDeltaOuter, float);
8187
DECLARE_SOA_COLUMN(Pi2cTofNSigmaOuter, pi2cTofNSigmaOuter, float);
88+
DECLARE_SOA_COLUMN(Pi2cHasRichSignal, pi2cHasRichSignal, bool);
89+
DECLARE_SOA_COLUMN(Pi2cRichNSigma, pi2cRichNSigma, float);
90+
DECLARE_SOA_COLUMN(Pi2cPdgCode, pi2cPdgCode, int);
91+
8292
DECLARE_SOA_COLUMN(PiccTofDeltaInner, piccTofDeltaInner, float);
8393
DECLARE_SOA_COLUMN(PiccTofNSigmaInner, piccTofNSigmaInner, float);
8494
DECLARE_SOA_COLUMN(PiccTofDeltaOuter, piccTofDeltaOuter, float);
8595
DECLARE_SOA_COLUMN(PiccTofNSigmaOuter, piccTofNSigmaOuter, float);
96+
DECLARE_SOA_COLUMN(PiccHasRichSignal, piccHasRichSignal, bool);
97+
DECLARE_SOA_COLUMN(PiccRichNSigma, piccRichNSigma, float);
98+
DECLARE_SOA_COLUMN(PiccPdgCode, piccPdgCode, int);
8699

87100
// Daughter info
88101
DECLARE_SOA_COLUMN(PosPt, posPt, float);
@@ -100,6 +113,7 @@ DECLARE_SOA_COLUMN(PiccPt, piccPt, float);
100113
DECLARE_SOA_COLUMN(PiccEta, piccEta, float);
101114

102115
} // namespace otfmulticharm
116+
103117
DECLARE_SOA_TABLE(MCharmIndices, "AOD", "MCharmIndices",
104118
o2::soa::Index<>,
105119
otfmulticharm::CascadeId,
@@ -112,8 +126,8 @@ DECLARE_SOA_TABLE(MCharmCores, "AOD", "MCharmCores",
112126
otfmulticharm::XiccDauDCA,
113127
otfmulticharm::XicMass,
114128
otfmulticharm::XiccMass,
115-
otfmulticharm::Pt,
116-
otfmulticharm::Eta,
129+
otfmulticharm::XiccPt,
130+
otfmulticharm::XiccEta,
117131

118132
otfmulticharm::XiDCAxy,
119133
otfmulticharm::XiDCAz,
@@ -122,13 +136,6 @@ DECLARE_SOA_TABLE(MCharmCores, "AOD", "MCharmCores",
122136
otfmulticharm::XiccDCAxy,
123137
otfmulticharm::XiccDCAz,
124138

125-
otfmulticharm::PiFromXiDCAxy,
126-
otfmulticharm::PiFromXiDCAz,
127-
otfmulticharm::PiFromLaDCAxy,
128-
otfmulticharm::PiFromLaDCAz,
129-
otfmulticharm::PrFromLaDCAxy,
130-
otfmulticharm::PrFromLaDCAz,
131-
132139
otfmulticharm::Pi1cDCAxy,
133140
otfmulticharm::Pi1cDCAz,
134141
otfmulticharm::Pi2cDCAxy,
@@ -141,38 +148,53 @@ DECLARE_SOA_TABLE(MCharmCores, "AOD", "MCharmCores",
141148
otfmulticharm::XicProperLength,
142149
otfmulticharm::XicDistanceFromPV,
143150
otfmulticharm::XiccProperLength,
151+
otfmulticharm::Pi1cPt,
152+
otfmulticharm::Pi2cPt,
153+
otfmulticharm::PiccPt);
144154

155+
DECLARE_SOA_TABLE(MCharmPID, "AOD", "MCharmPID",
145156
otfmulticharm::Pi1cTofDeltaInner,
146157
otfmulticharm::Pi1cTofNSigmaInner,
147158
otfmulticharm::Pi1cTofDeltaOuter,
148159
otfmulticharm::Pi1cTofNSigmaOuter,
160+
otfmulticharm::Pi1cHasRichSignal,
161+
otfmulticharm::Pi1cRichNSigma,
162+
otfmulticharm::Pi1cPdgCode,
149163

150164
otfmulticharm::Pi2cTofDeltaInner,
151165
otfmulticharm::Pi2cTofNSigmaInner,
152166
otfmulticharm::Pi2cTofDeltaOuter,
153167
otfmulticharm::Pi2cTofNSigmaOuter,
168+
otfmulticharm::Pi2cHasRichSignal,
169+
otfmulticharm::Pi2cRichNSigma,
170+
otfmulticharm::Pi2cPdgCode,
154171

155172
otfmulticharm::PiccTofDeltaInner,
156173
otfmulticharm::PiccTofNSigmaInner,
157174
otfmulticharm::PiccTofDeltaOuter,
158175
otfmulticharm::PiccTofNSigmaOuter,
176+
otfmulticharm::PiccHasRichSignal,
177+
otfmulticharm::PiccRichNSigma,
178+
otfmulticharm::PiccPdgCode);
159179

180+
DECLARE_SOA_TABLE(MCharmExtra, "AOD", "MCharmExtra",
160181
otfmulticharm::BachPt,
161182
otfmulticharm::BachEta,
183+
otfmulticharm::BachDCAxy,
184+
otfmulticharm::BachDCAz,
162185

163186
otfmulticharm::PosPt,
164187
otfmulticharm::PosEta,
188+
otfmulticharm::PosDCAxy,
189+
otfmulticharm::PosDCAz,
165190

166191
otfmulticharm::NegPt,
167192
otfmulticharm::NegEta,
193+
otfmulticharm::NegDCAxy,
194+
otfmulticharm::NegDCAz,
168195

169-
otfmulticharm::Pi1cPt,
170196
otfmulticharm::Pi1cEta,
171-
172-
otfmulticharm::Pi2cPt,
173197
otfmulticharm::Pi2cEta,
174-
175-
otfmulticharm::PiccPt,
176198
otfmulticharm::PiccEta);
177199

178200
} // namespace o2::aod

ALICE3/DataModel/OTFRICH.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,13 @@ DECLARE_SOA_DYNAMIC_COLUMN(NSigmaRich, nSigmaRich, //! General f
5555
}
5656
});
5757

58-
DECLARE_SOA_COLUMN(HasSig, hasSig, bool); //! Has signal in the barrel rich (is particle over threshold)
59-
DECLARE_SOA_COLUMN(HasSigEl, hasSigEl, bool); //! Has nSigma electron BarrelRich (is electron over threshold)
60-
DECLARE_SOA_COLUMN(HasSigMu, hasSigMu, bool); //! Has nSigma muon BarrelRich (is muon over threshold)
61-
DECLARE_SOA_COLUMN(HasSigPi, hasSigPi, bool); //! Has nSigma pion BarrelRich (is pion over threshold)
62-
DECLARE_SOA_COLUMN(HasSigKa, hasSigKa, bool); //! Has nSigma kaon BarrelRich (is kaon over threshold)
63-
DECLARE_SOA_COLUMN(HasSigPr, hasSigPr, bool); //! Has nSigma proton BarrelRich (is proton over threshold)
58+
DECLARE_SOA_COLUMN(HasSig, hasSig, bool); //! Has signal in the barrel rich (is particle over threshold)
59+
DECLARE_SOA_COLUMN(HasSigInGas, hasSigInGas, bool); //! Has signal in the gas radiator in the barrel rich (is particle over threshold)
60+
DECLARE_SOA_COLUMN(HasSigEl, hasSigEl, bool); //! Has nSigma electron BarrelRich (is electron over threshold)
61+
DECLARE_SOA_COLUMN(HasSigMu, hasSigMu, bool); //! Has nSigma muon BarrelRich (is muon over threshold)
62+
DECLARE_SOA_COLUMN(HasSigPi, hasSigPi, bool); //! Has nSigma pion BarrelRich (is pion over threshold)
63+
DECLARE_SOA_COLUMN(HasSigKa, hasSigKa, bool); //! Has nSigma kaon BarrelRich (is kaon over threshold)
64+
DECLARE_SOA_COLUMN(HasSigPr, hasSigPr, bool); //! Has nSigma proton BarrelRich (is proton over threshold)
6465

6566
} // namespace upgrade_rich
6667
DECLARE_SOA_TABLE(UpgradeRichs, "AOD", "UPGRADERICH",
@@ -83,7 +84,8 @@ DECLARE_SOA_TABLE(UpgradeRichSignals, "AOD", "UPGRADERICHSIG",
8384
upgrade_rich::HasSigMu,
8485
upgrade_rich::HasSigPi,
8586
upgrade_rich::HasSigKa,
86-
upgrade_rich::HasSigPr);
87+
upgrade_rich::HasSigPr,
88+
upgrade_rich::HasSigInGas);
8789

8890
using UpgradeRichSignal = UpgradeRichSignals::iterator;
8991

ALICE3/TableProducer/OTF/onTheFlyRichPid.cxx

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ struct OnTheFlyRichPid {
105105
Configurable<bool> flagIncludeTrackAngularRes{"flagIncludeTrackAngularRes", true, "flag to include or exclude track time resolution"};
106106
Configurable<float> multiplicityEtaRange{"multiplicityEtaRange", 0.800000012, "eta range to compute the multiplicity"};
107107
Configurable<bool> flagRICHLoadDelphesLUTs{"flagRICHLoadDelphesLUTs", false, "flag to load Delphes LUTs for tracking correction (use recoTrack parameters if false)"};
108+
Configurable<float> gasRadiatorRindex{"gasRadiatorRindex", 1.0006f, "gas radiator refractive index"};
109+
Configurable<float> gasRichRadiatorThickness{"gasRichRadiatorThickness", 25.f, "gas radiator thickness (cm)"};
108110
Configurable<float> bRichRefractiveIndexSector0{"bRichRefractiveIndexSector0", 1.03, "barrel RICH refractive index central(s)"}; // central(s)
109111
Configurable<float> bRichRefractiveIndexSector1{"bRichRefractiveIndexSector1", 1.03, "barrel RICH refractive index central(s)-1 and central(s)+1"}; // central(s)-1 and central(s)+1
110112
Configurable<float> bRichRefractiveIndexSector2{"bRichRefractiveIndexSector2", 1.03, "barrel RICH refractive index central(s)-2 and central(s)+2"}; // central(s)-2 and central(s)+2
@@ -505,6 +507,22 @@ struct OnTheFlyRichPid {
505507
return false; // Particle is below the threshold
506508
}
507509

510+
bool isOverTrhesholdInGasRadiator(const float momentum, const float mass)
511+
{
512+
if (momentum < mass / std::sqrt(gasRadiatorRindex * gasRadiatorRindex - 1.0)) { // Check if particle is above the threshold
513+
return false;
514+
}
515+
const float angle = std::acos(std::sqrt(momentum * momentum + mass * mass) / (momentum * gasRadiatorRindex));
516+
const float meanNumberofDetectedPhotons = 230. * std::sin(angle) * std::sin(angle) * gasRichRadiatorThickness;
517+
518+
// Require at least 3 photons on average for real angle reconstruction
519+
static constexpr float kMinPhotons = 3.f;
520+
if (meanNumberofDetectedPhotons <= kMinPhotons) {
521+
return false;
522+
}
523+
return true;
524+
}
525+
508526
/// returns linear interpolation
509527
/// \param x the eta we want the resolution for
510528
/// \param x0 the closest smaller available eta
@@ -742,9 +760,9 @@ struct OnTheFlyRichPid {
742760

743761
for (const auto& track : tracks) {
744762

745-
auto fillDummyValues = [&]() {
763+
auto fillDummyValues = [&](bool gasRich = false) {
746764
upgradeRich(kErrorValue, kErrorValue, kErrorValue, kErrorValue, kErrorValue);
747-
upgradeRichSignal(false, false, false, false, false, false);
765+
upgradeRichSignal(false, false, false, false, false, false, gasRich);
748766
};
749767

750768
// first step: find precise arrival time (if any)
@@ -770,16 +788,17 @@ struct OnTheFlyRichPid {
770788
}
771789

772790
// find track bRICH sector
773-
int iSecor = findSector(o2track.getEta());
791+
const int iSecor = findSector(o2track.getEta());
774792
if (iSecor < 0) {
775793
fillDummyValues();
776794
continue;
777795
}
778796

797+
const bool expectedAngleBarrelGasRichOk = isOverTrhesholdInGasRadiator(o2track.getP(), pdgInfo->Mass());
779798
float expectedAngleBarrelRich = kErrorValue;
780799
const bool expectedAngleBarrelRichOk = cherenkovAngle(o2track.getP(), pdgInfo->Mass(), aerogelRindex[iSecor], expectedAngleBarrelRich);
781800
if (!expectedAngleBarrelRichOk) {
782-
fillDummyValues();
801+
fillDummyValues(expectedAngleBarrelGasRichOk);
783802
continue; // Particle is below the threshold or not enough photons
784803
}
785804
// float barrelRICHAngularResolution = angularResolution(o2track.getEta());
@@ -959,7 +978,7 @@ struct OnTheFlyRichPid {
959978

960979
// Sigmas have been fully calculated. Please populate the NSigma helper table (once per track)
961980
upgradeRich(nSigmaBarrelRich[0], nSigmaBarrelRich[1], nSigmaBarrelRich[2], nSigmaBarrelRich[3], nSigmaBarrelRich[4]);
962-
upgradeRichSignal(expectedAngleBarrelRichOk, signalBarrelRich[0], signalBarrelRich[1], signalBarrelRich[2], signalBarrelRich[3], signalBarrelRich[4]);
981+
upgradeRichSignal(expectedAngleBarrelRichOk, signalBarrelRich[0], signalBarrelRich[1], signalBarrelRich[2], signalBarrelRich[3], signalBarrelRich[4], expectedAngleBarrelGasRichOk);
963982
}
964983
}
965984
};

0 commit comments

Comments
 (0)