Skip to content
Open
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
123 changes: 46 additions & 77 deletions PWGCF/Flow/Tasks/flowZdcTask.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,15 @@
#include "Common/DataModel/TrackSelectionTables.h"

#include "CommonConstants/MathConstants.h"
#include "Framework/ASoAHelpers.h"
#include "Framework/AnalysisTask.h"
#include "Framework/HistogramRegistry.h"
#include "Framework/RunningWorkflowInfo.h"
#include "Framework/runDataProcessing.h"
#include <CCDB/BasicCCDBManager.h>

#include "TList.h"
#include <TComplex.h>
#include <TF1.h>
#include <TMath.h>
#include <TProfile.h>
#include <TProfile2D.h>
#include <TRandom3.h>

#include <cmath>
#include <string>
Expand All @@ -54,12 +49,12 @@ struct FlowZdcTask {

O2_DEFINE_CONFIGURABLE(cfgCutVertex, float, 10.0f, "Accepted z-vertex range")
Configurable<int> eventSelection{"eventSelection", 1, "event selection"};
Configurable<float> maxZp{"maxZp", 125.5, "Max ZP signal"};
Configurable<float> maxZem{"maxZem", 3099.5, "Max ZEM signal"};
// for ZDC info and analysis
Configurable<int> nBinsAmp{"nBinsAmp", 1025, "nbinsAmp"};
Configurable<int> nBinsADC{"nBinsADC", 1000, "nbinsADC"};
Configurable<float> maxZn{"maxZn", 125.5, "Max ZN signal"};
Configurable<float> maxZp{"maxZp", 125.5, "Max ZP signal"};
// configs for process QA
Configurable<int> nBinsNch{"nBinsNch", 2501, "N bins Nch (|eta|<0.8)"};
Configurable<int> nBinsAmpFT0{"nBinsAmpFT0", 100, "N bins FT0 amp"};
Expand All @@ -71,14 +66,20 @@ struct FlowZdcTask {
Configurable<float> minNch{"minNch", 0, "Min Nch (|eta|<0.8)"};
Configurable<float> maxNch{"maxNch", 2500, "Max Nch (|eta|<0.8)"};
Configurable<int> nBinsTDC{"nBinsTDC", 150, "nbinsTDC"};
Configurable<float> minTdcZn{"minTdcZn", -4.0, "minimum TDC for ZN"};
Configurable<float> maxTdcZn{"maxTdcZn", -4.0, "maximum TDC for ZN"};
Configurable<float> minTdcZn{"minTdcZn", 4.0, "minimum TDC for ZN"};
Configurable<float> maxTdcZn{"maxTdcZn", 4.0, "maximum TDC for ZN"};
Configurable<float> minTdcZp{"minTdcZp", -4.0, "minimum TDC for ZP"};
Configurable<float> maxTdcZp{"maxTdcZp", -4.0, "maximum TDC for ZP"};
Configurable<float> cfgCollisionEnergy{"cfgCollisionEnergy", 2.68, "cfgCollisionEnergy"};
Configurable<bool> applyZdcCorrection{"applyZdcCorrection", false, "Apply ZP correction?"};
Configurable<float> zpaCoeff{"zpaCoeff", 0.021f, "Coefficient a in zpa correction"};
Configurable<float> zpcCoeff{"zpcCoeff", 0.021f, "Coefficient b in zpc correction"};
Configurable<float> posZcut{"posZcut", +10.0, "z-vertex position cut"};
Configurable<float> posYcut{"posYcut", +10.0, "y-vertex position cut"};
Configurable<float> posXcut{"posXcut", +10.0, "x-vertex position cut"};
Configurable<float> minEta{"minEta", -0.8, "minimum eta"};
Configurable<float> maxEta{"maxEta", +0.8, "maximum eta"};
Configurable<float> minT0CcentCut{"minT0CcentCut", 0.0, "Min T0C Cent. cut"};
Configurable<float> maxT0CcentCut{"maxT0CcentCut", 90.0, "Max T0C Cent. cut"};
// event selection
Configurable<bool> isNoCollInTimeRangeStrict{"isNoCollInTimeRangeStrict", true, "isNoCollInTimeRangeStrict?"};
Configurable<bool> isNoCollInTimeRangeStandard{"isNoCollInTimeRangeStandard", false, "isNoCollInTimeRangeStandard?"};
Expand All @@ -102,17 +103,8 @@ struct FlowZdcTask {
Configurable<float> maxPtSpectra{"maxPtSpectra", 50., "maximum pt of the tracks"};
Configurable<float> zemCut{"zemCut", 100., "ZEM cut"};
// axis configs
ConfigurableAxis axisZN{"axisZN", {5000, 0, 500}, "axisZN"};
ConfigurableAxis axisZP{"axisZP", {5000, 0, 500}, "axisZP"};
ConfigurableAxis axisCent{"axisCent", {10, 0, 100}, "axisCent"};
ConfigurableAxis binsPt{"binsPt", {VARIABLE_WIDTH, 0.0, 0.1, 0.12}, "pT binning"};
Configurable<float> posZcut{"posZcut", +10.0, "z-vertex position cut"};
Configurable<float> posYcut{"posYcut", +10.0, "y-vertex position cut"};
Configurable<float> posXcut{"posXcut", +10.0, "x-vertex position cut"};
Configurable<float> minEta{"minEta", -0.8, "minimum eta"};
Configurable<float> maxEta{"maxEta", +0.8, "maximum eta"};
Configurable<float> minT0CcentCut{"minT0CcentCut", 0.0, "Min T0C Cent. cut"};
Configurable<float> maxT0CcentCut{"maxT0CcentCut", 90.0, "Max T0C Cent. cut"};

using ColEvents = soa::Join<aod::Collisions, aod::EvSels>;
Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
Expand Down Expand Up @@ -237,10 +229,10 @@ struct FlowZdcTask {
histos.add("ZPAVsZPC", ";ZPC;ZPA;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZp}}});
histos.add("ZNAVsZPA", ";ZPA;ZNA;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZn}}});
histos.add("ZNCVsZPC", ";ZPC;ZNC;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZn}}});
histos.add("SectorZNAVsZNC", ";Sector ZNC;Sector ZNA", kTH2F, {{{nBinsZDC, -0.5, maxZn}, {nBinsZDC, -0.5, maxZn}}});
histos.add("SectorZPAVsZPC", ";Sector ZPC;Sector ZPA;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZp}}});
histos.add("SectorZNAVsZPA", ";Sector ZPA;Sector ZNA;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZn}}});
histos.add("SectorZNCVsZPC", ";Sector ZPC;Sector ZNC;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZn}}});
histos.add("CommonZNAVsZNC", ";Common ZNC;Common ZNA", kTH2F, {{{nBinsZDC, -0.5, maxZn}, {nBinsZDC, -0.5, maxZn}}});
histos.add("CommonZPAVsZPC", ";Common ZPC;Common ZPA;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZp}}});
histos.add("CommonZNAVsZPA", ";Common ZPA;Common ZNA;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZn}}});
histos.add("CommonZNCVsZPC", ";Common ZPC;Common ZNC;", kTH2F, {{{nBinsZDC, -0.5, maxZp}, {nBinsZDC, -0.5, maxZn}}});
histos.add("ZNASector", ";ZNA;Entries;", kTH1F, {{nBinsZDC, -0.5, maxZn}});
histos.add("ZPASector", ";ZPA;Entries;", kTH1F, {{nBinsZDC, -0.5, maxZp}});
histos.add("ZNCSector", ";ZNC;Entries;", kTH1F, {{nBinsZDC, -0.5, maxZn}});
Expand Down Expand Up @@ -276,14 +268,6 @@ struct FlowZdcTask {
histos.add("ZNAVsNch", ";#it{N}_{ch} (|#eta|<0.8);ZNA;", kTH2F, {{{nBinsNch, minNch, maxNch}, {nBinsZDC, minNch, maxZn}}});
histos.add("ZNVsNch", ";#it{N}_{ch} (|#eta|<0.8);ZNA+ZNC;", kTH2F, {{{nBinsNch, minNch, maxNch}, {nBinsZDC, minNch, maxZn}}});
histos.add("ZNDifVsNch", ";#it{N}_{ch} (|#eta|<0.8);ZNA-ZNC;", kTH2F, {{{nBinsNch, minNch, maxNch}, {100, -50., 50.}}});
histos.add("ZPAvsCent", ";centFT0C;ZPA", kTH2F, {{{axisCent}, {nBinsZDC, -0.5, maxZp}}});
histos.add("ZPCvsCent", ";centFT0C;ZPC", kTH2F, {{{axisCent}, {nBinsZDC, -0.5, maxZp}}});
histos.add("hZPASectorvsGlbTrack", ";Global Tracks (ITS + TPC);ZPA Sector Energy", kTH2F, {{{nBinsNch, minNch, maxNch}, {nBinsZDC, minNch, maxZp}}});
histos.add("hZPCSectorvsGlbTrack", ";Global Tracks (ITS + TPC);ZPC Sector Energy", kTH2F, {{{nBinsNch, minNch, maxNch}, {nBinsZDC, minNch, maxZp}}});
histos.add("hZNASectorvsGlbTrack", ";Global Tracks (ITS + TPC);ZNA Sector Energy", kTH2F, {{{nBinsNch, minNch, maxNch}, {nBinsZDC, minNch, maxZn}}});
histos.add("hZNCSectorvsGlbTrack", ";Global Tracks (ITS + TPC);ZNC Sector Energy", kTH2F, {{{nBinsNch, minNch, maxNch}, {nBinsZDC, minNch, maxZn}}});
histos.add("hZPSectorvsGlbTrack", ";Global Tracks (ITS + TPC);(ZPA + ZPC) Sector Energy", kTH2F, {{{nBinsNch, minNch, maxNch}, {nBinsZDC, minNch, maxZp}}});
histos.add("hZNSectorvsGlbTrack", ";Global Tracks (ITS + TPC);(ZNA + ZNC) Sector Energy", kTH2F, {{{nBinsNch, minNch, maxNch}, {nBinsZDC, minNch, maxZn}}});
}
if (doprocessZdc) {
histos.add("ampZna", ";ZNA Amplitude;Entries;", kTH1F, {{nBinsZDC, -0.5, maxZn}});
Expand Down Expand Up @@ -417,7 +401,6 @@ struct FlowZdcTask {
void processQA(ColEvSels::iterator const& collision, BCsRun3 const& /*bcs*/, aod::Zdcs const& /*zdcsData*/, aod::FV0As const& /*fv0as*/, aod::FT0s const& /*ft0s*/, TheFilteredTracks const& tracks)
{
const auto& foundBC = collision.foundBC_as<BCsRun3>();
const auto cent = collision.centFT0C();
if (!isEventSelected(collision)) {
return;
}
Expand Down Expand Up @@ -447,18 +430,18 @@ struct FlowZdcTask {
float tZPA{zdc.timeZPA()};
float tZPC{zdc.timeZPC()};
const double normT0M{(aT0A + aT0C) / 100.};
float znA = zdc.amplitudeZNA() / cfgCollisionEnergy;
float znC = zdc.amplitudeZNC() / cfgCollisionEnergy;
float zpA = zdc.amplitudeZPA() / cfgCollisionEnergy;
float zpC = zdc.amplitudeZPC() / cfgCollisionEnergy;
float commonSumZnc = zdc.energyCommonZNC() / cfgCollisionEnergy;
float commonSumZna = zdc.energyCommonZNA() / cfgCollisionEnergy;
float commonSumZpc = zdc.energyCommonZPC() / cfgCollisionEnergy;
float commonSumZpa = zdc.energyCommonZPA() / cfgCollisionEnergy;
float sumZNC = ((zdc.energySectorZNC())[0] + (zdc.energySectorZNC())[1] + (zdc.energySectorZNC())[2] + (zdc.energySectorZNC())[3]) / cfgCollisionEnergy;
float sumZNA = ((zdc.energySectorZNA())[0] + (zdc.energySectorZNA())[1] + (zdc.energySectorZNA())[2] + (zdc.energySectorZNA())[3]) / cfgCollisionEnergy;
float sumZPC = ((zdc.energySectorZPC())[0] + (zdc.energySectorZPC())[1] + (zdc.energySectorZPC())[2] + (zdc.energySectorZPC())[3]) / cfgCollisionEnergy;
float sumZPA = ((zdc.energySectorZPA())[0] + (zdc.energySectorZPA())[1] + (zdc.energySectorZPA())[2] + (zdc.energySectorZPA())[3]) / cfgCollisionEnergy;
float znA = zdc.amplitudeZNA();
float znC = zdc.amplitudeZNC();
float zpA = zdc.amplitudeZPA();
float zpC = zdc.amplitudeZPC();
float commonSumZnc = zdc.energyCommonZNC();
float commonSumZna = zdc.energyCommonZNA();
float commonSumZpc = zdc.energyCommonZPC();
float commonSumZpa = zdc.energyCommonZPA();
float sumZNC = ((zdc.energySectorZNC())[0] + (zdc.energySectorZNC())[1] + (zdc.energySectorZNC())[2] + (zdc.energySectorZNC())[3]);
float sumZNA = ((zdc.energySectorZNA())[0] + (zdc.energySectorZNA())[1] + (zdc.energySectorZNA())[2] + (zdc.energySectorZNA())[3]);
float sumZPC = ((zdc.energySectorZPC())[0] + (zdc.energySectorZPC())[1] + (zdc.energySectorZPC())[2] + (zdc.energySectorZPC())[3]);
float sumZPA = ((zdc.energySectorZPA())[0] + (zdc.energySectorZPA())[1] + (zdc.energySectorZPA())[2] + (zdc.energySectorZPA())[3]);
if (applyZdcCorrection) {
const float a = zpaCoeff;
const float b = zpcCoeff;
Expand All @@ -475,8 +458,6 @@ struct FlowZdcTask {
float tZEM1{zdc.timeZEM1()};
float tZEM2{zdc.timeZEM2()};
float sumZNs{znA + znC};
float sumSectZN = (sumZNC + sumZNA);
float sumSectZP = (sumZPC + sumZPA);

if (sumZEMs > zemCut) {
if (isTDCcut) {
Expand Down Expand Up @@ -516,7 +497,7 @@ struct FlowZdcTask {
histos.fill(HIST("ZNVsZEM"), sumZEMs, sumZNs);
if (((tZNA >= minTdcZn) && (tZNA <= maxTdcZn)) && ((tZNC >= minTdcZn) && (tZNC <= maxTdcZn))) {
histos.fill(HIST("ZNAVsZNC"), znC, znA);
histos.fill(HIST("SectorZNAVsZNC"), sumZNC, sumZNA);
histos.fill(HIST("CommonZNAVsZNC"), commonSumZnc, commonSumZna);
histos.fill(HIST("ZN"), znA + znC);
histos.fill(HIST("ZNVsFT0C"), aT0C / 100., znA + znC);
histos.fill(HIST("ZNVsFT0M"), (aT0A + aT0C) / 100., znA + znC);
Expand All @@ -525,7 +506,7 @@ struct FlowZdcTask {
}
if (((tZPA >= minTdcZp) && (tZPA <= maxTdcZp)) && ((tZPC >= minTdcZp) && (tZPC <= maxTdcZp))) {
histos.fill(HIST("ZPAVsZPC"), zpC, zpA);
histos.fill(HIST("SectorZPAVsZPC"), sumZPC, sumZPA);
histos.fill(HIST("CommonZPAVsZPC"), commonSumZpc, commonSumZpa);
histos.fill(HIST("ZPVsFT0A"), aT0A / 100., zpA + zpC);
histos.fill(HIST("ZPVsFT0C"), aT0C / 100., zpA + zpC);
histos.fill(HIST("ZPVsFT0M"), (aT0A + aT0C) / 100., zpA + zpC);
Expand All @@ -534,11 +515,11 @@ struct FlowZdcTask {
}
if (((tZNA >= minTdcZn) && (tZNA <= maxTdcZn)) && ((tZPA >= minTdcZp) && (tZPA <= maxTdcZp))) {
histos.fill(HIST("ZNAVsZPA"), zpA, znA);
histos.fill(HIST("SectorZNAVsZPA"), sumZPA, sumZNA);
histos.fill(HIST("CommonZNAVsZPA"), commonSumZpa, commonSumZna);
}
if (((tZNC >= minTdcZn) && (tZNC <= maxTdcZn)) && ((tZPC >= minTdcZp) && (tZPC <= maxTdcZp))) {
histos.fill(HIST("ZNCVsZPC"), zpC, znC);
histos.fill(HIST("SectorZNCVsZPC"), sumZPC, sumZNC);
histos.fill(HIST("CommonZNCVsZPC"), commonSumZpc, commonSumZnc);
}
} else {
histos.fill(HIST("ZNA"), znA);
Expand All @@ -550,10 +531,10 @@ struct FlowZdcTask {
histos.fill(HIST("ZNAVsZPA"), zpA, znA);
histos.fill(HIST("ZNCVsZPC"), zpC, znC);
histos.fill(HIST("ZPAVsZPC"), zpC, zpA);
histos.fill(HIST("SectorZPAVsZPC"), sumZPC, sumZPA);
histos.fill(HIST("SectorZNAVsZNC"), sumZNC, sumZNA);
histos.fill(HIST("SectorZNAVsZPA"), sumZPA, sumZNA);
histos.fill(HIST("SectorZNCVsZPC"), sumZPC, sumZNC);
histos.fill(HIST("CommonZPAVsZPC"), commonSumZpc, commonSumZpa);
histos.fill(HIST("CommonZNAVsZNC"), commonSumZnc, commonSumZna);
histos.fill(HIST("CommonZNAVsZPA"), commonSumZpa, commonSumZna);
histos.fill(HIST("CommonZNCVsZPC"), commonSumZpc, commonSumZnc);
histos.fill(HIST("ZNACommon"), commonSumZna);
histos.fill(HIST("ZNASector"), sumZNA);
histos.fill(HIST("ZNCCommon"), commonSumZnc);
Expand Down Expand Up @@ -666,18 +647,6 @@ struct FlowZdcTask {
histos.fill(HIST("GlbTracks"), glbTracks);

if (sumZEMs > zemCut) {
histos.fill(HIST("ZPAvsCent"), cent, zpA);
histos.fill(HIST("ZPCvsCent"), cent, zpC);
if (std::isfinite(zpA) && !std::isnan(zpA) && cent >= minT0CcentCut && cent < maxT0CcentCut && glbTracks >= minNch && glbTracks < maxNch) {
histos.fill(HIST("hZPASectorvsGlbTrack"), glbTracks, sumZPA);
}
if (std::isfinite(zpC) && !std::isnan(zpC) && cent >= minT0CcentCut && cent < maxT0CcentCut && glbTracks >= minNch && glbTracks < maxNch) {
histos.fill(HIST("hZPCSectorvsGlbTrack"), glbTracks, sumZPC);
}
histos.fill(HIST("hZNASectorvsGlbTrack"), glbTracks, sumZNA);
histos.fill(HIST("hZNCSectorvsGlbTrack"), glbTracks, sumZNC);
histos.fill(HIST("hZPSectorvsGlbTrack"), glbTracks, sumSectZP);
histos.fill(HIST("hZNSectorvsGlbTrack"), glbTracks, sumSectZN);
// ZDC Correlations
histos.fill(HIST("ZNAVsNch"), glbTracks, znA);
histos.fill(HIST("ZNCVsNch"), glbTracks, znC);
Expand Down Expand Up @@ -715,18 +684,18 @@ struct FlowZdcTask {
const auto& foundBC = collision.foundBC_as<BCsRun3>();
if (foundBC.has_zdc()) {
const auto& zdc = foundBC.zdc();
auto znA = zdc.amplitudeZNA() / cfgCollisionEnergy;
auto znC = zdc.amplitudeZNC() / cfgCollisionEnergy;
auto zpA = zdc.amplitudeZPA() / cfgCollisionEnergy;
auto zpC = zdc.amplitudeZPC() / cfgCollisionEnergy;
float sectorSumZNC = ((zdc.energySectorZNC())[0] + (zdc.energySectorZNC())[1] + (zdc.energySectorZNC())[2] + (zdc.energySectorZNC())[3]) / cfgCollisionEnergy;
float sectorSumZNA = ((zdc.energySectorZNA())[0] + (zdc.energySectorZNA())[1] + (zdc.energySectorZNA())[2] + (zdc.energySectorZNA())[3]) / cfgCollisionEnergy;
float sectorSumZPC = ((zdc.energySectorZPC())[0] + (zdc.energySectorZPC())[1] + (zdc.energySectorZPC())[2] + (zdc.energySectorZPC())[3]) / cfgCollisionEnergy;
float sectorSumZPA = ((zdc.energySectorZPA())[0] + (zdc.energySectorZPA())[1] + (zdc.energySectorZPA())[2] + (zdc.energySectorZPA())[3]) / cfgCollisionEnergy;
float commonSumZnc = zdc.energyCommonZNC() / cfgCollisionEnergy;
float commonSumZna = zdc.energyCommonZNA() / cfgCollisionEnergy;
float commonSumZpc = zdc.energyCommonZPC() / cfgCollisionEnergy;
float commonSumZpa = zdc.energyCommonZPA() / cfgCollisionEnergy;
auto znA = zdc.amplitudeZNA();
auto znC = zdc.amplitudeZNC();
auto zpA = zdc.amplitudeZPA();
auto zpC = zdc.amplitudeZPC();
float sectorSumZNC = ((zdc.energySectorZNC())[0] + (zdc.energySectorZNC())[1] + (zdc.energySectorZNC())[2] + (zdc.energySectorZNC())[3]);
float sectorSumZNA = ((zdc.energySectorZNA())[0] + (zdc.energySectorZNA())[1] + (zdc.energySectorZNA())[2] + (zdc.energySectorZNA())[3]);
float sectorSumZPC = ((zdc.energySectorZPC())[0] + (zdc.energySectorZPC())[1] + (zdc.energySectorZPC())[2] + (zdc.energySectorZPC())[3]);
float sectorSumZPA = ((zdc.energySectorZPA())[0] + (zdc.energySectorZPA())[1] + (zdc.energySectorZPA())[2] + (zdc.energySectorZPA())[3]);
float commonSumZnc = zdc.energyCommonZNC();
float commonSumZna = zdc.energyCommonZNA();
float commonSumZpc = zdc.energyCommonZPC();
float commonSumZpa = zdc.energyCommonZPA();
float aZEM1 = zdc.amplitudeZEM1();
float aZEM2 = zdc.amplitudeZEM2();
float sumZEMs = aZEM1 + aZEM2;
Expand Down
Loading