Skip to content
2 changes: 1 addition & 1 deletion Common/TableProducer/qVectorsTable.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ struct qVectorsTable {
// to ensure a proper channel number in FT0 as a whole.
float ampl = ft0.amplitudeC()[iChC];

histosQA.fill(HIST("FITAmp"), ampl, iChC);
histosQA.fill(HIST("FITAmp"), ampl, iChC + 96);

helperEP.SumQvectors(0, iChC + 96, ampl, cfgnMod, QvecDet, sumAmplFT0C);
helperEP.SumQvectors(0, iChC + 96, ampl, cfgnMod, QvecFT0M, sumAmplFT0M);
Expand Down
37 changes: 37 additions & 0 deletions PWGDQ/Core/CutsLibrary.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1360,6 +1360,43 @@ AnalysisCompositeCut* o2::aod::dqcuts::GetCompositeCut(const char* cutName)
return cut;
}

// 4 cuts for QC
if (!nameStr.compare(Form("lmee_posTOFreqRun3_posEta%s_strongNSigEPbPb_rejBadTOF", vecPIDcase.at(icase).Data()))) {
cut->AddCut(GetAnalysisCut("posTrack"));
cut->AddCut(GetAnalysisCut("posEtaSel"));
cut->AddCut(GetAnalysisCut("TightGlobalTrackRun3"));
cut->AddCut(GetAnalysisCut("standardPrimaryTrackDCAz"));
cut->AddCut(GetAnalysisCut(Form("electronPID_TOFreq%s_strongNSigEPbPb_rejBadTOF", vecPIDcase.at(icase).Data())));
return cut;
}

if (!nameStr.compare(Form("lmee_posTOFreqRun3_negEta%s_strongNSigEPbPb_rejBadTOF", vecPIDcase.at(icase).Data()))) {
cut->AddCut(GetAnalysisCut("posTrack"));
cut->AddCut(GetAnalysisCut("negEtaSel"));
cut->AddCut(GetAnalysisCut("TightGlobalTrackRun3"));
cut->AddCut(GetAnalysisCut("standardPrimaryTrackDCAz"));
cut->AddCut(GetAnalysisCut(Form("electronPID_TOFreq%s_strongNSigEPbPb_rejBadTOF", vecPIDcase.at(icase).Data())));
return cut;
}

if (!nameStr.compare(Form("lmee_negTOFreqRun3_posEta%s_strongNSigEPbPb_rejBadTOF", vecPIDcase.at(icase).Data()))) {
cut->AddCut(GetAnalysisCut("negTrack"));
cut->AddCut(GetAnalysisCut("posEtaSel"));
cut->AddCut(GetAnalysisCut("TightGlobalTrackRun3"));
cut->AddCut(GetAnalysisCut("standardPrimaryTrackDCAz"));
cut->AddCut(GetAnalysisCut(Form("electronPID_TOFreq%s_strongNSigEPbPb_rejBadTOF", vecPIDcase.at(icase).Data())));
return cut;
}

if (!nameStr.compare(Form("lmee_negTOFreqRun3_negEta%s_strongNSigEPbPb_rejBadTOF", vecPIDcase.at(icase).Data()))) {
cut->AddCut(GetAnalysisCut("negTrack"));
cut->AddCut(GetAnalysisCut("negEtaSel"));
cut->AddCut(GetAnalysisCut("TightGlobalTrackRun3"));
cut->AddCut(GetAnalysisCut("standardPrimaryTrackDCAz"));
cut->AddCut(GetAnalysisCut(Form("electronPID_TOFreq%s_strongNSigEPbPb_rejBadTOF", vecPIDcase.at(icase).Data())));
return cut;
}

if (!nameStr.compare(Form("lmee_eNSigmaRun3%s_TPC_PID", vecPIDcase.at(icase).Data()))) {
cut->AddCut(GetAnalysisCut("lmeeStandardKine"));
cut->AddCut(GetAnalysisCut("TightGlobalTrackRun3"));
Expand Down
23 changes: 20 additions & 3 deletions PWGDQ/Core/HistogramsLibrary.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
}
}
if (subGroupStr.Contains("vtx")) {
hm->AddHistogram(histClass, "VtxX", "Vtx X", false, 100, -0.5, 0.5, VarManager::kVtxX);
hm->AddHistogram(histClass, "VtxY", "Vtx Y", false, 100, -0.5, 0.5, VarManager::kVtxY);
hm->AddHistogram(histClass, "VtxYVtxX", "Vtx Y vs Vtx X", false, 50, -0.5, 0.5, VarManager::kVtxX, 50, -0.5, 0.5, VarManager::kVtxY);
hm->AddHistogram(histClass, "VtxX", "Vtx X", false, 200, -0.1, 0.1, VarManager::kVtxX);
hm->AddHistogram(histClass, "VtxY", "Vtx Y", false, 200, -0.1, 0.1, VarManager::kVtxY);
hm->AddHistogram(histClass, "VtxYVtxX", "Vtx Y vs Vtx X", false, 100, -0.1, 0.1, VarManager::kVtxX, 100, -0.1, 0.1, VarManager::kVtxY);
}
if (subGroupStr.Contains("vtxpp")) {
hm->AddHistogram(histClass, "VtxNContrib", "Vtx n contributors", false, 100, 0.0, 100.0, VarManager::kVtxNcontrib);
Expand Down Expand Up @@ -173,6 +173,17 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
hm->AddHistogram(histClass, "IsSingleGapA", "Is single gap on side A", false, 2, -0.5, 1.5, VarManager::kIsSingleGapA);
hm->AddHistogram(histClass, "IsSingleGapC", "Is single gap on side C", false, 2, -0.5, 1.5, VarManager::kIsSingleGapC);
}
} // end "event"

if (groupStr.CompareTo("two-collisions") == 0) {
hm->AddHistogram(histClass, "DeltaZ", "z_{1} - z_{2}", false, 400, -20., 20., VarManager::kTwoEvDeltaZ);
hm->AddHistogram(histClass, "DeltaZ_Z1", "z_{1} - z_{2} vs z_{1}", false, 24, -12., 12., VarManager::kTwoEvPosZ1, 300, -15., 15., VarManager::kTwoEvDeltaZ);
hm->AddHistogram(histClass, "DeltaR", "r_{1} - r_{2}", false, 200, -0.1, 0.1, VarManager::kTwoEvDeltaR);
hm->AddHistogram(histClass, "DeltaX", "x_{1} - x_{2}", false, 200, -0.1, 0.1, VarManager::kTwoEvDeltaX);
hm->AddHistogram(histClass, "DeltaY", "y_{1} - y_{2}", false, 200, -0.1, 0.1, VarManager::kTwoEvDeltaY);
hm->AddHistogram(histClass, "Z1vsZ2", "z_{1} vs z_{2}", false, 120, -12.0, 12.0, VarManager::kTwoEvPosZ1, 120, -12.0, 12.0, VarManager::kTwoEvPosZ2);
hm->AddHistogram(histClass, "R1vsR2", "r_{1} vs r_{2}", false, 100, -0.1, 0.1, VarManager::kTwoEvPosR1, 100, -0.1, 0.1, VarManager::kTwoEvPosR2);
hm->AddHistogram(histClass, "NContrib1vs2", "n.contrib 1 vs 2", false, 100, 0.0, 100.0, VarManager::kTwoEvPVcontrib1, 100, 0.0, 100.0, VarManager::kTwoEvPVcontrib2);
}

if (groupStr.Contains("track")) {
Expand Down Expand Up @@ -503,6 +514,12 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
hm->AddHistogram(histClass, "Mass", "", false, 500, 0.0, 5.0, VarManager::kMass);
hm->AddHistogram(histClass, "Rapidity", "", false, 400, -4.0, 4.0, VarManager::kRap);
}
if (subGroupStr.Contains("ambiguity")) {
hm->AddHistogram(histClass, "AmbiguityInBunch", "in bunch collision ambiguity", false, 10, 0., 10., VarManager::kBarrelNAssocsInBunch);
hm->AddHistogram(histClass, "AmbiguityInBunch_pt", "in bunch collision ambiguity vs p_{T}", false, 50, 0.0, 10.0, VarManager::kPt, 10, 0., 10., VarManager::kBarrelNAssocsInBunch);
hm->AddHistogram(histClass, "AmbiguityOutOfBunch", "out of bunch collision ambiguity", false, 10, 0., 10., VarManager::kBarrelNAssocsOutOfBunch);
hm->AddHistogram(histClass, "AmbiguityOutOfBunch_pt", "out of bunch collision ambiguity vs p_{T}", false, 50, 0.0, 10.0, VarManager::kPt, 10, 0., 10., VarManager::kBarrelNAssocsOutOfBunch);
}
}
if (groupStr.Contains("mctruth_pair")) {
hm->AddHistogram(histClass, "Mass_Pt", "", false, 500, 0.0, 5.0, VarManager::kMass, 200, 0.0, 20.0, VarManager::kPt);
Expand Down
20 changes: 20 additions & 0 deletions PWGDQ/Core/VarManager.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,26 @@ void VarManager::SetDefaultVarNames()
fgVariableUnits[kMCEventTime] = ""; // TODO: add proper unit
fgVariableUnits[kMCEventWeight] = "";
fgVariableUnits[kMCEventImpParam] = "b";
fgVariableNames[kTwoEvPosZ1] = "vtx-z_{1}";
fgVariableUnits[kTwoEvPosZ1] = "cm";
fgVariableNames[kTwoEvPosZ2] = "vtx-z_{2}";
fgVariableUnits[kTwoEvPosZ2] = "cm";
fgVariableNames[kTwoEvPosR1] = "vtx-R_{1}";
fgVariableUnits[kTwoEvPosR1] = "cm";
fgVariableNames[kTwoEvPosR2] = "vtx-R_{2}";
fgVariableUnits[kTwoEvPosR2] = "cm";
fgVariableNames[kTwoEvDeltaZ] = "#Delta_{z}";
fgVariableUnits[kTwoEvDeltaZ] = "cm";
fgVariableNames[kTwoEvDeltaR] = "#Delta_{R}";
fgVariableUnits[kTwoEvDeltaR] = "cm";
fgVariableNames[kTwoEvDeltaX] = "#Delta_{x}";
fgVariableUnits[kTwoEvDeltaX] = "cm";
fgVariableNames[kTwoEvDeltaY] = "#Delta_{y}";
fgVariableUnits[kTwoEvDeltaY] = "cm";
fgVariableNames[kTwoEvPVcontrib1] = "n.contrib 1";
fgVariableUnits[kTwoEvPVcontrib1] = "";
fgVariableNames[kTwoEvPVcontrib2] = "n.contrib 2";
fgVariableUnits[kTwoEvPVcontrib2] = "";
fgVariableNames[kPt] = "p_{T}";
fgVariableUnits[kPt] = "GeV/c";
fgVariableNames[kInvPt] = "1/p_{T}";
Expand Down
54 changes: 49 additions & 5 deletions PWGDQ/Core/VarManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@
#include "KFParticleBase.h"
#include "KFVertex.h"

using std::cout;
using std::endl;

using SMatrix55 = ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepSym<double, 5>>;
using SMatrix5 = ROOT::Math::SVector<double, 5>;
using Vec3D = ROOT::Math::SVector<double, 3>;
Expand Down Expand Up @@ -215,6 +218,16 @@ class VarManager : public TObject
kIsSingleGapA, // Rapidity gap on side A
kIsSingleGapC, // Rapidity gap on side C
kIsSingleGap, // Rapidity gap on either side
kTwoEvPosZ1, // vtx-z for collision 1 in two events correlations
kTwoEvPosZ2, // vtx-z for collision 2 in two events correlations
kTwoEvPosR1, // vtx-R for collision 1 in two events correlations
kTwoEvPosR2,
kTwoEvPVcontrib1, // n-contributors for collision 1 in two events correlations
kTwoEvPVcontrib2,
kTwoEvDeltaZ, // distance in z between collisions
kTwoEvDeltaX, // distance in x between collisions
kTwoEvDeltaY, // distance in y between collisions
kTwoEvDeltaR, // distance in (x,y) plane between collisions
kNEventWiseVariables,

// Basic track/muon/pair wise variables
Expand Down Expand Up @@ -326,7 +339,9 @@ class VarManager : public TObject
kIsLegFromAntiLambda,
kIsLegFromOmega,
kIsProtonFromLambdaAndAntiLambda,
kIsDalitzLeg, // Up to 8 dalitz selections
kIsDalitzLeg, // Up to 8 dalitz selections
kBarrelNAssocsInBunch, // number of in bunch collision associations
kBarrelNAssocsOutOfBunch, // number of out of bunch collision associations
kNBarrelTrackVariables = kIsDalitzLeg + 8,

// Muon track variables
Expand Down Expand Up @@ -642,6 +657,8 @@ class VarManager : public TObject
static void FillPropagateMuon(const T& muon, const C& collision, float* values = nullptr);
template <uint32_t fillMap, typename T>
static void FillEvent(T const& event, float* values = nullptr);
template <typename T>
static void FillTwoEvents(T const& event1, T const& event2, float* values = nullptr);
template <uint32_t fillMap, typename T>
static void FillTrack(T const& track, float* values = nullptr);
template <uint32_t fillMap, typename T, typename C>
Expand Down Expand Up @@ -852,14 +869,14 @@ o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T& muon, const C
propmuon.setParameters(proptrack.getParameters());
propmuon.setZ(proptrack.getZ());
propmuon.setCovariances(proptrack.getCovariances());

} else if (static_cast<int>(muon.trackType()) < 2) {
double centerMFT[3] = {0, 0, -61.4};
/*double centerMFT[3] = {0, 0, -61.4};
o2::field::MagneticField* field = static_cast<o2::field::MagneticField*>(TGeoGlobalMagField::Instance()->GetField());
auto Bz = field->getBz(centerMFT); // Get field at centre of MFT
//auto Bz = fgMagField;
auto geoMan = o2::base::GeometryManager::meanMaterialBudget(muon.x(), muon.y(), muon.z(), collision.posX(), collision.posY(), collision.posZ());
auto x2x0 = static_cast<float>(geoMan.meanX2X0);
fwdtrack.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, Bz, x2x0);
fwdtrack.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, Bz, x2x0);*/
propmuon.setParameters(fwdtrack.getParameters());
propmuon.setZ(fwdtrack.getZ());
propmuon.setCovariances(fwdtrack.getCovariances());
Expand All @@ -873,7 +890,6 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val
if (!values) {
values = fgValues;
}

if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) {
o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muon, collision);

Expand Down Expand Up @@ -1133,6 +1149,34 @@ void VarManager::FillEvent(T const& event, float* values)
FillEventDerived(values);
}

template <typename T>
void VarManager::FillTwoEvents(T const& ev1, T const& ev2, float* values)
{
if (!values) {
values = fgValues;
}

values[kTwoEvPosZ1] = ev1.posZ();
values[kTwoEvPosZ2] = ev2.posZ();
values[kTwoEvPosR1] = std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY());
values[kTwoEvPosR2] = std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY());
values[kTwoEvPVcontrib1] = ev1.numContrib();
values[kTwoEvPVcontrib2] = ev2.numContrib();
if (ev1.numContrib() < ev2.numContrib()) {
values[kTwoEvPosZ1] = ev2.posZ();
values[kTwoEvPosZ2] = ev1.posZ();
values[kTwoEvPVcontrib1] = ev2.numContrib();
values[kTwoEvPVcontrib2] = ev1.numContrib();
values[kTwoEvPosR1] = std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY());
;
values[kTwoEvPosR2] = std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY());
}
values[kTwoEvDeltaZ] = ev1.posZ() - ev2.posZ();
values[kTwoEvDeltaX] = ev1.posX() - ev2.posX();
values[kTwoEvDeltaY] = ev1.posY() - ev2.posY();
values[kTwoEvDeltaR] = std::sqrt(values[kTwoEvDeltaX] * values[kTwoEvDeltaX] + values[kTwoEvDeltaY] * values[kTwoEvDeltaY]);
}

template <uint32_t fillMap, typename T>
void VarManager::FillTrack(T const& track, float* values)
{
Expand Down
Loading