Skip to content

Commit f4af283

Browse files
Merge branch 'AliceO2Group:master' into master
2 parents 37d9411 + d4c032a commit f4af283

Some content is hidden

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

48 files changed

+4642
-461
lines changed

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
};

ALICE3/Tasks/alice3-multicharm.cxx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,10 @@ struct alice3multicharm {
8383

8484
Configurable<float> picMinDCAxy{"picMinDCAxy", -1, "[0] in |DCAz| > [0]+[1]/pT"};
8585
Configurable<float> picMinDCAz{"picMinDCAz", -1, "[0] in |DCAxy| > [0]+[1]/pT"};
86-
Configurable<float> picMaxTofDiffInner{"picTofDiffInner", 1e+4, "|signal - expected| (ps)"};
8786
Configurable<float> picMinPt{"picMinPt", -1, "Minimum pT for Xic pions"};
8887

8988
Configurable<float> piccMinDCAxy{"piccMinDCAxy", -1, "[0] in |DCAxy| > [0]+[1]/pT"};
9089
Configurable<float> piccMinDCAz{"piccMinDCAz", -1, "[0] in |DCAz| > [0]+[1]/pT"};
91-
Configurable<float> piccMaxTofDiffInner{"piccMaxTofDiffInner", 1e+4, "|signal - expected| (ps)"};
9290
Configurable<float> piccMinPt{"piccMinPt", -1, "Minimum pT for Xicc pions"};
9391

9492
Configurable<float> xicMaxDauDCA{"xicMaxDauDCA", 1e+4, "DCA between Xic daughters (cm)"};
@@ -150,7 +148,7 @@ struct alice3multicharm {
150148
hMCharmBuilding->GetXaxis()->SetBinLabel(22, "xicMinDecayDistanceFromPV");
151149

152150
if (doprocessXiccPID || doprocessXiccExtra) {
153-
auto hPdgCodes = histos.add<TH2>("PIDQA/hPdgCodes", "hPdgCodes", kTH2D, {{3, 0.5, 3.5}, {5, 0.5, 5.5}});
151+
auto hPdgCodes = histos.add<TH2>("PIDQA/hPdgCodes", "hPdgCodes", kTH2D, {{3, 0.5, 3.5}, {7, 0.5, 7.5}});
154152
hPdgCodes->GetXaxis()->SetBinLabel(1, "pi1c");
155153
hPdgCodes->GetXaxis()->SetBinLabel(2, "pi2c");
156154
hPdgCodes->GetXaxis()->SetBinLabel(3, "picc");
@@ -159,11 +157,14 @@ struct alice3multicharm {
159157
hPdgCodes->GetYaxis()->SetBinLabel(3, "pi");
160158
hPdgCodes->GetYaxis()->SetBinLabel(4, "ka");
161159
hPdgCodes->GetYaxis()->SetBinLabel(5, "pr");
160+
hPdgCodes->GetYaxis()->SetBinLabel(6, "xi");
161+
hPdgCodes->GetYaxis()->SetBinLabel(7, "other");
162162
pdgToBin.insert({kElectron, 1});
163163
pdgToBin.insert({kMuonMinus, 2});
164164
pdgToBin.insert({kPiPlus, 3});
165165
pdgToBin.insert({kKPlus, 4});
166166
pdgToBin.insert({kProton, 5});
167+
pdgToBin.insert({kXiMinus, 6});
167168

168169
histos.add("PIDQA/hInnerTofTimeDeltaPi1c", "hInnerTofTimeDeltaPi1c; Reco - expected pion (ps)", kTH1D, {axisTofTrackDelta});
169170
histos.add("PIDQA/hInnerTofTimeDeltaPi2c", "hInnerTofTimeDeltaPi2c; Reco - expected pion (ps)", kTH1D, {axisTofTrackDelta});
@@ -194,6 +195,12 @@ struct alice3multicharm {
194195
histos.add("h3dXicc", "h3dXicc; Xicc pT (GeV/#it(c)); Xicc #eta; Xicc mass (GeV/#it(c)^{2})", kTH3D, {axisPt, axisEta, axisXiccMass});
195196
}
196197

198+
int getBin(const std::map<int, int>& pdgToBin, int pdg)
199+
{
200+
auto it = pdgToBin.find(pdg);
201+
return (it != pdgToBin.end()) ? it->second : 7;
202+
}
203+
197204
template <typename TMCharmCands>
198205
void genericProcessXicc(TMCharmCands xiccCands)
199206
{
@@ -324,9 +331,9 @@ struct alice3multicharm {
324331
histos.fill(HIST("PIDQA/hRichNSigmaPicc"), xiccCand.piccPt(), xiccCand.piccRichNSigma());
325332
}
326333

327-
histos.fill(HIST("PIDQA/hPdgCodes"), 1, pdgToBin.at(std::abs(xiccCand.pi1cPdgCode())));
328-
histos.fill(HIST("PIDQA/hPdgCodes"), 2, pdgToBin.at(std::abs(xiccCand.pi2cPdgCode())));
329-
histos.fill(HIST("PIDQA/hPdgCodes"), 3, pdgToBin.at(std::abs(xiccCand.piccPdgCode())));
334+
histos.fill(HIST("PIDQA/hPdgCodes"), 1, getBin(pdgToBin, std::abs(xiccCand.pi1cPdgCode())));
335+
histos.fill(HIST("PIDQA/hPdgCodes"), 2, getBin(pdgToBin, std::abs(xiccCand.pi2cPdgCode())));
336+
histos.fill(HIST("PIDQA/hPdgCodes"), 3, getBin(pdgToBin, std::abs(xiccCand.piccPdgCode())));
330337
}
331338

332339
if constexpr (requires { xiccCand.negPt(); }) { // if extra table

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1970,6 +1970,13 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
19701970
hm->AddHistogram(histClass, "Mass_Pt", "", false, 500, 0.0, 5.0, VarManager::kMassDau, 200, 0.0, 20.0, VarManager::kPt);
19711971
hm->AddHistogram(histClass, "Rapidity", "", false, 400, -4.0, 4.0, VarManager::kRap);
19721972
}
1973+
1974+
if (subGroupStr.Contains("DY-dimuon")) {
1975+
hm->AddHistogram(histClass, "DY_mass", "", false, 5000, 0.0, 50.0, VarManager::kMass); // 10 MeV mass res
1976+
hm->AddHistogram(histClass, "DY_pT", "", false, 2000, 0.0, 100.0, VarManager::kPt); // 50 MeV pT res
1977+
hm->AddHistogram(histClass, "DY_y", "", false, 20, 2.0, 4.0, VarManager::kRap);
1978+
hm->AddHistogram(histClass, "DY_phi", "", false, 180, constants::math::PI, 2 * constants::math::PI, VarManager::kPhi);
1979+
}
19731980
}
19741981

19751982
//__________________________________________________________________

PWGEM/PhotonMeson/Tasks/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ o2physics_add_dpl_workflow(heavy-neutral-meson
6464
PUBLIC_LINK_LIBRARIES O2::Framework O2::EMCALBase O2::EMCALCalib O2Physics::AnalysisCore O2Physics::PWGEMPhotonMesonCore
6565
COMPONENT_NAME Analysis)
6666

67+
o2physics_add_dpl_workflow(omega-meson-emc
68+
SOURCES OmegaMesonEMC.cxx
69+
PUBLIC_LINK_LIBRARIES O2::Framework O2::EMCALBase O2::EMCALCalib O2Physics::AnalysisCore O2Physics::PWGEMPhotonMesonCore
70+
COMPONENT_NAME Analysis)
71+
6772
o2physics_add_dpl_workflow(phos-qc
6873
SOURCES phosQC.cxx
6974
PUBLIC_LINK_LIBRARIES O2::Framework O2::DetectorsBase O2Physics::AnalysisCore O2Physics::PWGEMPhotonMesonCore

0 commit comments

Comments
 (0)