Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 85 additions & 28 deletions PWGCF/Flow/Tasks/flowEventPlane.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -167,12 +167,16 @@ struct SpCalibTableProducer {
Configurable<float> cMaxZVtx{"cMaxZVtx", 10.0, "Max VtxZ cut"};
Configurable<float> cMinCent{"cMinCent", 0., "Minumum Centrality"};
Configurable<float> cMaxCent{"cMaxCent", 100.0, "Maximum Centrality"};
Configurable<int> cCentBins{"cCentBins", 100, "Number of bins in centrality axis"};
Configurable<bool> cSel8Trig{"cSel8Trig", true, "Sel8 (T0A + T0C) Selection Run3"};
Configurable<bool> cPileupReject{"cPileupReject", true, "Pileup rejection"};
Configurable<bool> cZVtxTimeDiff{"cZVtxTimeDiff", true, "z-vtx time diff selection"};
Configurable<bool> cIsGoodITSLayers{"cIsGoodITSLayers", true, "Good ITS Layers All"};
Configurable<float> cMinOccupancy{"cMinOccupancy", 0, "Minimum FT0C Occupancy"};
Configurable<float> cMaxOccupancy{"cMaxOccupancy", 1e6, "Maximum FT0C Occupancy"};
Configurable<bool> capplyTdcCut{"capplyTdcCut", false, "Flag for TDC cut"};
Configurable<float> ctdcZnMin{"ctdcZnMin", -2.5, "Min ZN TDC cut"};
Configurable<float> ctdcZnMax{"ctdcZnMax", 2.5, "Max ZN TDC cut"};

// Histogram Registry.
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};
Expand All @@ -184,7 +188,7 @@ struct SpCalibTableProducer {
void init(InitContext const&)
{
// Histogram collision
histos.add("hCent", "Centrality", kTH1F, {{100, 0., 100., "FT0C%"}});
histos.add("hCent", "Centrality", kTH1F, {{cCentBins, 0., 100., "FT0C%"}});
histos.add("hVz", "V_{z}", kTH1F, {{100, -10., 10., "V_{z}(cm)"}});
}

Expand Down Expand Up @@ -226,6 +230,20 @@ struct SpCalibTableProducer {
return true;
}

template <typename C>
bool selZdcHit(C const& zdc)
{
if (capplyTdcCut) { // a narrow TDC window is set
if ((zdc.timeZNC() <= ctdcZnMin) || (zdc.timeZNC() >= ctdcZnMax)) {
return false;
}
if ((zdc.timeZNA() <= ctdcZnMin) || (zdc.timeZNA() >= ctdcZnMax)) {
return false;
}
}
return true;
}

template <typename B, typename C>
void analyzeCollision(B const& bc, C const& collision)
{
Expand All @@ -243,6 +261,10 @@ struct SpCalibTableProducer {
posZ = collision.posZ();

auto zdc = bc.zdc();
if (!selZdcHit(zdc)) {
return;
}

std::vector<float> znaEnergy, zncEnergy;
for (int i = 0; i < kXYAC; ++i) {
znaEnergy.push_back(zdc.energySectorZNA()[i]);
Expand Down Expand Up @@ -292,12 +314,18 @@ struct SpectatorPlaneTableProducer {
Configurable<float> cMaxZVtx{"cMaxZVtx", 10.0, "Max VtxZ cut"};
Configurable<float> cMinCent{"cMinCent", 0., "Minumum Centrality"};
Configurable<float> cMaxCent{"cMaxCent", 100.0, "Maximum Centrality"};
Configurable<int> cCentBins{"cCentBins", 100, "Number of bins in centrality axis"};
Configurable<bool> cSel8Trig{"cSel8Trig", true, "Sel8 (T0A + T0C) Selection Run3"};
Configurable<bool> cPileupReject{"cPileupReject", true, "Pileup rejection"};
Configurable<bool> cZVtxTimeDiff{"cZVtxTimeDiff", true, "z-vtx time diff selection"};
Configurable<bool> cIsGoodITSLayers{"cIsGoodITSLayers", true, "Good ITS Layers All"};
Configurable<float> cMinOccupancy{"cMinOccupancy", 0, "Minimum FT0C Occupancy"};
Configurable<float> cMaxOccupancy{"cMaxOccupancy", 1e6, "Maximum FT0C Occupancy"};
Configurable<bool> capplyTdcCut{"capplyTdcCut", false, "Flag for TDC cut"};
Configurable<float> ctdcZnMin{"ctdcZnMin", -2.5, "Min ZN TDC cut"};
Configurable<float> ctdcZnMax{"ctdcZnMax", 2.5, "Max ZN TDC cut"};

ConfigurableAxis axisVarCent{"axisVarCent", {VARIABLE_WIDTH, 0, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 100}, "Variable width centrality bins"};

// Coarse binning factor
Configurable<int> cAxisCBF{"cAxisCBF", 10, "Coarse Bin Factor"};
Expand All @@ -313,6 +341,7 @@ struct SpectatorPlaneTableProducer {
Configurable<bool> cRecentVxVy{"cRecentVxVy", true, "Vx / Vy recentering"};

// Corrections

Configurable<bool> cLoadCorrection{"cLoadCorrection", true, "Load corrections"};
Configurable<bool> cDoGainCalib{"cDoGainCalib", true, "Gain Calib Flag"};
Configurable<bool> cUseAlphaZDC{"cUseAlphaZDC", true, "Use Alpha ZDC"};
Expand All @@ -327,7 +356,6 @@ struct SpectatorPlaneTableProducer {
// Tracks
Configurable<float> cTrackMinPt{"cTrackMinPt", 0.1, "p_{T} minimum"};
Configurable<float> cTrackMaxPt{"cTrackMaxPt", 10.0, "p_{T} maximum"};
Configurable<int> cNEtaBins{"cNEtaBins", 7, "# of eta bins"};
Configurable<float> cTrackEtaCut{"cTrackEtaCut", 0.8, "Pseudorapidity cut"};
Configurable<bool> cTrackGlobal{"cTrackGlobal", true, "Global Track"};
Configurable<float> cTrackDcaXYCut{"cTrackDcaXYCut", 0.1, "DcaXY Cut"};
Expand Down Expand Up @@ -389,7 +417,7 @@ struct SpectatorPlaneTableProducer {
// Define axes
const AxisSpec axisZDCEnergy{500, 0, 500, "ZD[AC] Signal"};

const AxisSpec axisCent{100, 0., 100, "FT0C%"};
const AxisSpec axisCent{cCentBins, 0., 100, "FT0C%"};
const AxisSpec axisVx{cAxisVxyBins, cAxisVxMin, cAxisVxMax, "V_{X}(cm)"};
const AxisSpec axisVy{cAxisVxyBins, cAxisVyMin, cAxisVyMax, "V_{Y}(cm)"};
const AxisSpec axisVz{cAxisVzBins, cMinZVtx, cMaxZVtx, "V_{Z}(cm)"};
Expand Down Expand Up @@ -468,6 +496,7 @@ struct SpectatorPlaneTableProducer {

// Directed flow QXY vector
histos.add("DF/hQaQc", "X^{A}_{1}X^{C}_{1} + Y^{A}_{1}Y^{C}_{1}", kTProfile, {axisCent});
histos.add("DF/hQaQcVarCent", "X^{A}_{1}X^{C}_{1} + Y^{A}_{1}Y^{C}_{1}", kTProfile, {axisVarCent});
}

// Select collsion
Expand Down Expand Up @@ -509,6 +538,20 @@ struct SpectatorPlaneTableProducer {
return true;
}

template <typename C>
bool selZdcHit(C const& zdc)
{
if (capplyTdcCut) { // a narrow TDC window is set
if ((zdc.timeZNC() <= ctdcZnMin) || (zdc.timeZNC() >= ctdcZnMax)) {
return false;
}
if ((zdc.timeZNA() <= ctdcZnMin) || (zdc.timeZNA() >= ctdcZnMax)) {
return false;
}
}
return true;
}

// Load Gain Calibrations and ZDC Q-Vector Recentering Corrections
void loadCorrections()
{
Expand Down Expand Up @@ -699,11 +742,18 @@ struct SpectatorPlaneTableProducer {

// Zdc information
auto zdc = bc.zdc();

if (!selZdcHit(zdc)) {
return false;
}
auto znaEnergy = zdc.energySectorZNA();
auto zncEnergy = zdc.energySectorZNC();
auto znaEnergyCommon = zdc.energyCommonZNA();
auto zncEnergyCommon = zdc.energyCommonZNC();

// Change in 3rd tower energy due to spurious peaks
zncEnergy[2] = zncEnergyCommon - zncEnergy[0] - zncEnergy[1] - zncEnergy[3];

// Check energy deposits
if (znaEnergyCommon <= 0 || zncEnergyCommon <= 0 || znaEnergy[0] <= 0 || znaEnergy[1] <= 0 || znaEnergy[2] <= 0 || znaEnergy[3] <= 0 || zncEnergy[0] <= 0 || zncEnergy[1] <= 0 || zncEnergy[2] <= 0 || zncEnergy[3] <= 0) {
return false;
Expand Down Expand Up @@ -901,6 +951,7 @@ struct SpectatorPlaneTableProducer {
// Directed flow QXY vector
float qac = (vSP[kXa] * vSP[kXc]) + (vSP[kYa] * vSP[kYc]);
histos.fill(HIST("DF/hQaQc"), cent, qac);
histos.fill(HIST("DF/hQaQcVarCent"), cent, qac);
}

// Fill table
Expand All @@ -925,7 +976,9 @@ struct SpectatorPlaneTableProducer {

struct FlowEventPlane {
// Tracks
Configurable<int> cEtaBins{"cEtaBins", 5, "# of eta bins"};
Configurable<int> cEtaBinsCharged{"cEtaBinsCharged", 5, "# of eta bins"};
Configurable<int> cEtaBinsHadrons{"cEtaBinsHadrons", 5, "# of eta bins"};
Configurable<int> cEtaBinsStrange{"cEtaBinsStrange", 5, "# of eta bins"};
Configurable<float> cEtaCut{"cEtaCut", 0.8, "Rapidity cut"};

// Pi,Ka,Pr
Expand Down Expand Up @@ -960,6 +1013,8 @@ struct FlowEventPlane {
Configurable<float> cLambdaMinPt{"cLambdaMinPt", 0.6, "Lambda Min pT"};
Configurable<float> cLambdaMaxPt{"cLambdaMaxPt", 6.0, "Lambda Max pT"};

ConfigurableAxis axisVarCent{"axisVarCent", {VARIABLE_WIDTH, 0, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 100}, "Variable width centrality bins"};

// Histogram registry: an object to hold your histograms
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};

Expand All @@ -970,13 +1025,15 @@ struct FlowEventPlane {
void init(InitContext const&)
{
// Define axes
const AxisSpec axisCent{100, 0., 100, "FT0C%"};
// const AxisSpec axisCent{100, 0., 100, "FT0C%"};

const AxisSpec axisXYac{600, -6, 6, "Q^{t}Q^{p}"};
const AxisSpec axisV1{400, -4, 4, "v_{1}"};

const AxisSpec axisTrackPt{100, 0., 10., "p_{T} (GeV/#it{c})"};
const AxisSpec axisTrackEta{cEtaBins, -0.8, 0.8, "#eta"};
const AxisSpec axisTrackEtaCharged{cEtaBinsCharged, -0.8, 0.8, "#etaCharged"};
const AxisSpec axisTrackEtaHadrons{cEtaBinsHadrons, -0.8, 0.8, "#etaHadrons"};
const AxisSpec axisTrackEtaStrange{cEtaBinsStrange, -0.8, 0.8, "#etaStrange"};
const AxisSpec axisTrackDcaXY{60, -0.15, 0.15, "DCA_{XY}"};
const AxisSpec axisTrackDcaZ{230, -1.15, 1.15, "DCA_{XY}"};
const AxisSpec axisTrackdEdx{360, 20, 200, "#frac{dE}{dx}"};
Expand Down Expand Up @@ -1004,12 +1061,12 @@ struct FlowEventPlane {
histos.add("TrackQA/hPtDcaXY", "DCA_{XY} vs p_{T}", kTH2F, {axisTrackPt, axisTrackDcaXY});
histos.add("TrackQA/hPtDcaZ", "DCA_{Z} vs p_{T}", kTH2F, {axisTrackPt, axisTrackDcaZ});
histos.add("TrackQA/hTrackTPCdEdX", "hTrackTPCdEdX", kTH2F, {axisMomPID, axisdEdx});
histos.add("DF/hAQu", "u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}", kTProfile2D, {axisCent, axisTrackEta});
histos.add("DF/hCQu", "u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}", kTProfile2D, {axisCent, axisTrackEta});
histos.add("DF/hAQuPos", "u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}", kTProfile2D, {axisCent, axisTrackEta});
histos.add("DF/hCQuPos", "u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}", kTProfile2D, {axisCent, axisTrackEta});
histos.add("DF/hAQuNeg", "u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}", kTProfile2D, {axisCent, axisTrackEta});
histos.add("DF/hCQuNeg", "u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}", kTProfile2D, {axisCent, axisTrackEta});
histos.add("DF/hAQu", "u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}", kTProfile2D, {axisVarCent, axisTrackEtaCharged});
histos.add("DF/hCQu", "u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}", kTProfile2D, {axisVarCent, axisTrackEtaCharged});
histos.add("DF/hAQuPos", "u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}", kTProfile2D, {axisVarCent, axisTrackEtaCharged});
histos.add("DF/hCQuPos", "u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}", kTProfile2D, {axisVarCent, axisTrackEtaCharged});
histos.add("DF/hAQuNeg", "u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}", kTProfile2D, {axisVarCent, axisTrackEtaCharged});
histos.add("DF/hCQuNeg", "u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}", kTProfile2D, {axisVarCent, axisTrackEtaCharged});
}

// Identified hadrons
Expand All @@ -1018,22 +1075,22 @@ struct FlowEventPlane {
histos.add("PartId/Pion/hTOFSignal", "#beta_{TOF} vs p_{T}", kTH2F, {axisMomPID, axisTrackTofSignal});
histos.add("PartId/Pion/hTPCNSigma", "n#sigma_{TPC} vs p_{T}", kTH2F, {axisMomPID, axisTrackNSigma});
histos.add("PartId/Pion/hTOFNSigma", "n#sigma_{TOF} vs p_{T}", kTH2F, {axisMomPID, axisTrackNSigma});
histos.add("PartId/Pion/hAQuPos", "PartId/Pion/hAQuPos", kTProfile2D, {axisCent, axisTrackEta});
histos.add("PartId/Pion/hAQuNeg", "PartId/Pion/hAQuNeg", kTProfile2D, {axisCent, axisTrackEta});
histos.add("PartId/Pion/hCQuPos", "PartId/Pion/hCQuPos", kTProfile2D, {axisCent, axisTrackEta});
histos.add("PartId/Pion/hCQuNeg", "PartId/Pion/hCQuNeg", kTProfile2D, {axisCent, axisTrackEta});
histos.add("PartId/Pion/hAQuPos", "PartId/Pion/hAQuPos", kTProfile2D, {axisVarCent, axisTrackEtaHadrons});
histos.add("PartId/Pion/hAQuNeg", "PartId/Pion/hAQuNeg", kTProfile2D, {axisVarCent, axisTrackEtaHadrons});
histos.add("PartId/Pion/hCQuPos", "PartId/Pion/hCQuPos", kTProfile2D, {axisVarCent, axisTrackEtaHadrons});
histos.add("PartId/Pion/hCQuNeg", "PartId/Pion/hCQuNeg", kTProfile2D, {axisVarCent, axisTrackEtaHadrons});
histos.addClone("PartId/Pion/", "PartId/Kaon/");
histos.addClone("PartId/Pion/", "PartId/Proton/");
}

// Resonance
if (doprocessResoFlow) {
histos.add("Reso/Phi/hSigCentEtaInvMass", "hUSCentEtaInvMass", kTH3F, {axisCent, axisTrackEta, axisPhiInvMass});
histos.add("Reso/Phi/hBkgCentEtaInvMass", "hLSCentEtaInvMass", kTH3F, {axisCent, axisTrackEta, axisPhiInvMass});
histos.add("Reso/Phi/Sig/hQuA", "hPhiQuA", kTProfile3D, {axisCent, axisTrackEta, axisPhiInvMass});
histos.add("Reso/Phi/Sig/hQuC", "hPhiQuC", kTProfile3D, {axisCent, axisTrackEta, axisPhiInvMass});
histos.add("Reso/Phi/Bkg/hQuA", "hPhiQuA", kTProfile3D, {axisCent, axisTrackEta, axisPhiInvMass});
histos.add("Reso/Phi/Bkg/hQuC", "hPhiQuC", kTProfile3D, {axisCent, axisTrackEta, axisPhiInvMass});
histos.add("Reso/Phi/hBkgCentEtaInvMass", "hLSCentEtaInvMass", kTH3F, {axisVarCent, axisTrackEtaStrange, axisPhiInvMass});
histos.add("Reso/Phi/hSigCentEtaInvMass", "hUSCentEtaInvMass", kTH3F, {axisVarCent, axisTrackEtaStrange, axisPhiInvMass});
histos.add("Reso/Phi/Sig/hQuA", "hPhiQuA", kTProfile3D, {axisVarCent, axisTrackEtaStrange, axisPhiInvMass});
histos.add("Reso/Phi/Sig/hQuC", "hPhiQuC", kTProfile3D, {axisVarCent, axisTrackEtaStrange, axisPhiInvMass});
histos.add("Reso/Phi/Bkg/hQuA", "hPhiQuA", kTProfile3D, {axisVarCent, axisTrackEtaStrange, axisPhiInvMass});
histos.add("Reso/Phi/Bkg/hQuC", "hPhiQuC", kTProfile3D, {axisVarCent, axisTrackEtaStrange, axisPhiInvMass});
}

// Lambda
Expand All @@ -1053,14 +1110,14 @@ struct FlowEventPlane {
histos.add("V0/Lambda/QA/hPosNsigPiVsP", "TPC n#sigma Pos Prong", kTH2F, {axisMomPID, axisNsigma});
histos.add("V0/Lambda/QA/hNegNsigPiVsP", "TPC n#sigma Neg Prong", kTH2F, {axisMomPID, axisNsigma});
histos.addClone("V0/Lambda/", "V0/K0Short/");
histos.add("V0/Lambda/hMassVsRap", "hMassVsRap", kTH3F, {axisCent, axisTrackEta, axisLambdaInvMass});
histos.add("V0/Lambda/Flow/hQuA", "hQuA", kTProfile3D, {axisCent, axisTrackEta, axisLambdaInvMass});
histos.add("V0/Lambda/Flow/hQuC", "hQuC", kTProfile3D, {axisCent, axisTrackEta, axisLambdaInvMass});
histos.add("V0/Lambda/hMassVsRap", "hMassVsRap", kTH3F, {axisVarCent, axisTrackEtaStrange, axisLambdaInvMass});
histos.add("V0/Lambda/Flow/hQuA", "hQuA", kTProfile3D, {axisVarCent, axisTrackEtaStrange, axisLambdaInvMass});
histos.add("V0/Lambda/Flow/hQuC", "hQuC", kTProfile3D, {axisVarCent, axisTrackEtaStrange, axisLambdaInvMass});
histos.addClone("V0/Lambda/", "V0/AntiLambda/");
histos.addClone("V0/Lambda/", "V0/LambdaAntiLambda/");
histos.add("V0/K0Short/hMassVsRap", "hMassVsRap", kTH3F, {axisCent, axisTrackEta, axisK0ShortInvMass});
histos.add("V0/K0Short/Flow/hQuA", "hQuA", kTProfile3D, {axisCent, axisTrackEta, axisK0ShortInvMass});
histos.add("V0/K0Short/Flow/hQuC", "hQuC", kTProfile3D, {axisCent, axisTrackEta, axisK0ShortInvMass});
histos.add("V0/K0Short/hMassVsRap", "hMassVsRap", kTH3F, {axisVarCent, axisTrackEtaStrange, axisK0ShortInvMass});
histos.add("V0/K0Short/Flow/hQuA", "hQuA", kTProfile3D, {axisVarCent, axisTrackEtaStrange, axisK0ShortInvMass});
histos.add("V0/K0Short/Flow/hQuC", "hQuC", kTProfile3D, {axisVarCent, axisTrackEtaStrange, axisK0ShortInvMass});
}
}

Expand Down
Loading