@@ -167,12 +167,16 @@ struct SpCalibTableProducer {
167167 Configurable<float > cMaxZVtx{" cMaxZVtx" , 10.0 , " Max VtxZ cut" };
168168 Configurable<float > cMinCent{" cMinCent" , 0 ., " Minumum Centrality" };
169169 Configurable<float > cMaxCent{" cMaxCent" , 100.0 , " Maximum Centrality" };
170+ Configurable<int > cCentBins{" cCentBins" , 100 , " Number of bins in centrality axis" };
170171 Configurable<bool > cSel8Trig{" cSel8Trig" , true , " Sel8 (T0A + T0C) Selection Run3" };
171172 Configurable<bool > cPileupReject{" cPileupReject" , true , " Pileup rejection" };
172173 Configurable<bool > cZVtxTimeDiff{" cZVtxTimeDiff" , true , " z-vtx time diff selection" };
173174 Configurable<bool > cIsGoodITSLayers{" cIsGoodITSLayers" , true , " Good ITS Layers All" };
174175 Configurable<float > cMinOccupancy{" cMinOccupancy" , 0 , " Minimum FT0C Occupancy" };
175176 Configurable<float > cMaxOccupancy{" cMaxOccupancy" , 1e6 , " Maximum FT0C Occupancy" };
177+ Configurable<bool > capplyTdcCut{" capplyTdcCut" , false , " Flag for TDC cut" };
178+ Configurable<float > ctdcZnMin{" ctdcZnMin" , -2.5 , " Min ZN TDC cut" };
179+ Configurable<float > ctdcZnMax{" ctdcZnMax" , 2.5 , " Max ZN TDC cut" };
176180
177181 // Histogram Registry.
178182 HistogramRegistry histos{" histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
@@ -184,7 +188,7 @@ struct SpCalibTableProducer {
184188 void init (InitContext const &)
185189 {
186190 // Histogram collision
187- histos.add (" hCent" , " Centrality" , kTH1F , {{100 , 0 ., 100 ., " FT0C%" }});
191+ histos.add (" hCent" , " Centrality" , kTH1F , {{cCentBins , 0 ., 100 ., " FT0C%" }});
188192 histos.add (" hVz" , " V_{z}" , kTH1F , {{100 , -10 ., 10 ., " V_{z}(cm)" }});
189193 }
190194
@@ -226,6 +230,20 @@ struct SpCalibTableProducer {
226230 return true ;
227231 }
228232
233+ template <typename C>
234+ bool selZdcHit (C const & zdc)
235+ {
236+ if (capplyTdcCut) { // a narrow TDC window is set
237+ if ((zdc.timeZNC () <= ctdcZnMin) || (zdc.timeZNC () >= ctdcZnMax)) {
238+ return false ;
239+ }
240+ if ((zdc.timeZNA () <= ctdcZnMin) || (zdc.timeZNA () >= ctdcZnMax)) {
241+ return false ;
242+ }
243+ }
244+ return true ;
245+ }
246+
229247 template <typename B, typename C>
230248 void analyzeCollision (B const & bc, C const & collision)
231249 {
@@ -243,6 +261,10 @@ struct SpCalibTableProducer {
243261 posZ = collision.posZ ();
244262
245263 auto zdc = bc.zdc ();
264+ if (!selZdcHit (zdc)) {
265+ return ;
266+ }
267+
246268 std::vector<float > znaEnergy, zncEnergy;
247269 for (int i = 0 ; i < kXYAC ; ++i) {
248270 znaEnergy.push_back (zdc.energySectorZNA ()[i]);
@@ -292,12 +314,18 @@ struct SpectatorPlaneTableProducer {
292314 Configurable<float > cMaxZVtx{" cMaxZVtx" , 10.0 , " Max VtxZ cut" };
293315 Configurable<float > cMinCent{" cMinCent" , 0 ., " Minumum Centrality" };
294316 Configurable<float > cMaxCent{" cMaxCent" , 100.0 , " Maximum Centrality" };
317+ Configurable<int > cCentBins{" cCentBins" , 100 , " Number of bins in centrality axis" };
295318 Configurable<bool > cSel8Trig{" cSel8Trig" , true , " Sel8 (T0A + T0C) Selection Run3" };
296319 Configurable<bool > cPileupReject{" cPileupReject" , true , " Pileup rejection" };
297320 Configurable<bool > cZVtxTimeDiff{" cZVtxTimeDiff" , true , " z-vtx time diff selection" };
298321 Configurable<bool > cIsGoodITSLayers{" cIsGoodITSLayers" , true , " Good ITS Layers All" };
299322 Configurable<float > cMinOccupancy{" cMinOccupancy" , 0 , " Minimum FT0C Occupancy" };
300323 Configurable<float > cMaxOccupancy{" cMaxOccupancy" , 1e6 , " Maximum FT0C Occupancy" };
324+ Configurable<bool > capplyTdcCut{" capplyTdcCut" , false , " Flag for TDC cut" };
325+ Configurable<float > ctdcZnMin{" ctdcZnMin" , -2.5 , " Min ZN TDC cut" };
326+ Configurable<float > ctdcZnMax{" ctdcZnMax" , 2.5 , " Max ZN TDC cut" };
327+
328+ ConfigurableAxis axisVarCent{" axisVarCent" , {VARIABLE_WIDTH , 0 , 5 , 10 , 15 , 20 , 25 , 30 , 35 , 40 , 50 , 60 , 70 , 80 , 100 }, " Variable width centrality bins" };
301329
302330 // Coarse binning factor
303331 Configurable<int > cAxisCBF{" cAxisCBF" , 10 , " Coarse Bin Factor" };
@@ -313,6 +341,7 @@ struct SpectatorPlaneTableProducer {
313341 Configurable<bool > cRecentVxVy{" cRecentVxVy" , true , " Vx / Vy recentering" };
314342
315343 // Corrections
344+
316345 Configurable<bool > cLoadCorrection{" cLoadCorrection" , true , " Load corrections" };
317346 Configurable<bool > cDoGainCalib{" cDoGainCalib" , true , " Gain Calib Flag" };
318347 Configurable<bool > cUseAlphaZDC{" cUseAlphaZDC" , true , " Use Alpha ZDC" };
@@ -327,7 +356,6 @@ struct SpectatorPlaneTableProducer {
327356 // Tracks
328357 Configurable<float > cTrackMinPt{" cTrackMinPt" , 0.1 , " p_{T} minimum" };
329358 Configurable<float > cTrackMaxPt{" cTrackMaxPt" , 10.0 , " p_{T} maximum" };
330- Configurable<int > cNEtaBins{" cNEtaBins" , 7 , " # of eta bins" };
331359 Configurable<float > cTrackEtaCut{" cTrackEtaCut" , 0.8 , " Pseudorapidity cut" };
332360 Configurable<bool > cTrackGlobal{" cTrackGlobal" , true , " Global Track" };
333361 Configurable<float > cTrackDcaXYCut{" cTrackDcaXYCut" , 0.1 , " DcaXY Cut" };
@@ -389,7 +417,7 @@ struct SpectatorPlaneTableProducer {
389417 // Define axes
390418 const AxisSpec axisZDCEnergy{500 , 0 , 500 , " ZD[AC] Signal" };
391419
392- const AxisSpec axisCent{100 , 0 ., 100 , " FT0C%" };
420+ const AxisSpec axisCent{cCentBins , 0 ., 100 , " FT0C%" };
393421 const AxisSpec axisVx{cAxisVxyBins, cAxisVxMin, cAxisVxMax, " V_{X}(cm)" };
394422 const AxisSpec axisVy{cAxisVxyBins, cAxisVyMin, cAxisVyMax, " V_{Y}(cm)" };
395423 const AxisSpec axisVz{cAxisVzBins, cMinZVtx, cMaxZVtx, " V_{Z}(cm)" };
@@ -468,6 +496,7 @@ struct SpectatorPlaneTableProducer {
468496
469497 // Directed flow QXY vector
470498 histos.add (" DF/hQaQc" , " X^{A}_{1}X^{C}_{1} + Y^{A}_{1}Y^{C}_{1}" , kTProfile , {axisCent});
499+ histos.add (" DF/hQaQcVarCent" , " X^{A}_{1}X^{C}_{1} + Y^{A}_{1}Y^{C}_{1}" , kTProfile , {axisVarCent});
471500 }
472501
473502 // Select collsion
@@ -509,6 +538,20 @@ struct SpectatorPlaneTableProducer {
509538 return true ;
510539 }
511540
541+ template <typename C>
542+ bool selZdcHit (C const & zdc)
543+ {
544+ if (capplyTdcCut) { // a narrow TDC window is set
545+ if ((zdc.timeZNC () <= ctdcZnMin) || (zdc.timeZNC () >= ctdcZnMax)) {
546+ return false ;
547+ }
548+ if ((zdc.timeZNA () <= ctdcZnMin) || (zdc.timeZNA () >= ctdcZnMax)) {
549+ return false ;
550+ }
551+ }
552+ return true ;
553+ }
554+
512555 // Load Gain Calibrations and ZDC Q-Vector Recentering Corrections
513556 void loadCorrections ()
514557 {
@@ -699,11 +742,18 @@ struct SpectatorPlaneTableProducer {
699742
700743 // Zdc information
701744 auto zdc = bc.zdc ();
745+
746+ if (!selZdcHit (zdc)) {
747+ return false ;
748+ }
702749 auto znaEnergy = zdc.energySectorZNA ();
703750 auto zncEnergy = zdc.energySectorZNC ();
704751 auto znaEnergyCommon = zdc.energyCommonZNA ();
705752 auto zncEnergyCommon = zdc.energyCommonZNC ();
706753
754+ // Change in 3rd tower energy due to spurious peaks
755+ zncEnergy[2 ] = zncEnergyCommon - zncEnergy[0 ] - zncEnergy[1 ] - zncEnergy[3 ];
756+
707757 // Check energy deposits
708758 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 ) {
709759 return false ;
@@ -901,6 +951,7 @@ struct SpectatorPlaneTableProducer {
901951 // Directed flow QXY vector
902952 float qac = (vSP[kXa ] * vSP[kXc ]) + (vSP[kYa ] * vSP[kYc ]);
903953 histos.fill (HIST (" DF/hQaQc" ), cent, qac);
954+ histos.fill (HIST (" DF/hQaQcVarCent" ), cent, qac);
904955 }
905956
906957 // Fill table
@@ -925,7 +976,9 @@ struct SpectatorPlaneTableProducer {
925976
926977struct FlowEventPlane {
927978 // Tracks
928- Configurable<int > cEtaBins{" cEtaBins" , 5 , " # of eta bins" };
979+ Configurable<int > cEtaBinsCharged{" cEtaBinsCharged" , 5 , " # of eta bins" };
980+ Configurable<int > cEtaBinsHadrons{" cEtaBinsHadrons" , 5 , " # of eta bins" };
981+ Configurable<int > cEtaBinsStrange{" cEtaBinsStrange" , 5 , " # of eta bins" };
929982 Configurable<float > cEtaCut{" cEtaCut" , 0.8 , " Rapidity cut" };
930983
931984 // Pi,Ka,Pr
@@ -960,6 +1013,8 @@ struct FlowEventPlane {
9601013 Configurable<float > cLambdaMinPt{" cLambdaMinPt" , 0.6 , " Lambda Min pT" };
9611014 Configurable<float > cLambdaMaxPt{" cLambdaMaxPt" , 6.0 , " Lambda Max pT" };
9621015
1016+ ConfigurableAxis axisVarCent{" axisVarCent" , {VARIABLE_WIDTH , 0 , 5 , 10 , 15 , 20 , 25 , 30 , 35 , 40 , 50 , 60 , 70 , 80 , 100 }, " Variable width centrality bins" };
1017+
9631018 // Histogram registry: an object to hold your histograms
9641019 HistogramRegistry histos{" histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
9651020
@@ -970,13 +1025,15 @@ struct FlowEventPlane {
9701025 void init (InitContext const &)
9711026 {
9721027 // Define axes
973- const AxisSpec axisCent{100 , 0 ., 100 , " FT0C%" };
1028+ // const AxisSpec axisCent{100, 0., 100, "FT0C%"};
9741029
9751030 const AxisSpec axisXYac{600 , -6 , 6 , " Q^{t}Q^{p}" };
9761031 const AxisSpec axisV1{400 , -4 , 4 , " v_{1}" };
9771032
9781033 const AxisSpec axisTrackPt{100 , 0 ., 10 ., " p_{T} (GeV/#it{c})" };
979- const AxisSpec axisTrackEta{cEtaBins, -0.8 , 0.8 , " #eta" };
1034+ const AxisSpec axisTrackEtaCharged{cEtaBinsCharged, -0.8 , 0.8 , " #etaCharged" };
1035+ const AxisSpec axisTrackEtaHadrons{cEtaBinsHadrons, -0.8 , 0.8 , " #etaHadrons" };
1036+ const AxisSpec axisTrackEtaStrange{cEtaBinsStrange, -0.8 , 0.8 , " #etaStrange" };
9801037 const AxisSpec axisTrackDcaXY{60 , -0.15 , 0.15 , " DCA_{XY}" };
9811038 const AxisSpec axisTrackDcaZ{230 , -1.15 , 1.15 , " DCA_{XY}" };
9821039 const AxisSpec axisTrackdEdx{360 , 20 , 200 , " #frac{dE}{dx}" };
@@ -1004,12 +1061,12 @@ struct FlowEventPlane {
10041061 histos.add (" TrackQA/hPtDcaXY" , " DCA_{XY} vs p_{T}" , kTH2F , {axisTrackPt, axisTrackDcaXY});
10051062 histos.add (" TrackQA/hPtDcaZ" , " DCA_{Z} vs p_{T}" , kTH2F , {axisTrackPt, axisTrackDcaZ});
10061063 histos.add (" TrackQA/hTrackTPCdEdX" , " hTrackTPCdEdX" , kTH2F , {axisMomPID, axisdEdx});
1007- histos.add (" DF/hAQu" , " u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}" , kTProfile2D , {axisCent, axisTrackEta });
1008- histos.add (" DF/hCQu" , " u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}" , kTProfile2D , {axisCent, axisTrackEta });
1009- histos.add (" DF/hAQuPos" , " u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}" , kTProfile2D , {axisCent, axisTrackEta });
1010- histos.add (" DF/hCQuPos" , " u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}" , kTProfile2D , {axisCent, axisTrackEta });
1011- histos.add (" DF/hAQuNeg" , " u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}" , kTProfile2D , {axisCent, axisTrackEta });
1012- histos.add (" DF/hCQuNeg" , " u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}" , kTProfile2D , {axisCent, axisTrackEta });
1064+ histos.add (" DF/hAQu" , " u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}" , kTProfile2D , {axisVarCent, axisTrackEtaCharged });
1065+ histos.add (" DF/hCQu" , " u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}" , kTProfile2D , {axisVarCent, axisTrackEtaCharged });
1066+ histos.add (" DF/hAQuPos" , " u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}" , kTProfile2D , {axisVarCent, axisTrackEtaCharged });
1067+ histos.add (" DF/hCQuPos" , " u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}" , kTProfile2D , {axisVarCent, axisTrackEtaCharged });
1068+ histos.add (" DF/hAQuNeg" , " u_{x}X^{A}_{1} + u_{y}Y^{A}_{1}" , kTProfile2D , {axisVarCent, axisTrackEtaCharged });
1069+ histos.add (" DF/hCQuNeg" , " u_{x}X^{C}_{1} + u_{y}Y^{C}_{1}" , kTProfile2D , {axisVarCent, axisTrackEtaCharged });
10131070 }
10141071
10151072 // Identified hadrons
@@ -1018,22 +1075,22 @@ struct FlowEventPlane {
10181075 histos.add (" PartId/Pion/hTOFSignal" , " #beta_{TOF} vs p_{T}" , kTH2F , {axisMomPID, axisTrackTofSignal});
10191076 histos.add (" PartId/Pion/hTPCNSigma" , " n#sigma_{TPC} vs p_{T}" , kTH2F , {axisMomPID, axisTrackNSigma});
10201077 histos.add (" PartId/Pion/hTOFNSigma" , " n#sigma_{TOF} vs p_{T}" , kTH2F , {axisMomPID, axisTrackNSigma});
1021- histos.add (" PartId/Pion/hAQuPos" , " PartId/Pion/hAQuPos" , kTProfile2D , {axisCent, axisTrackEta });
1022- histos.add (" PartId/Pion/hAQuNeg" , " PartId/Pion/hAQuNeg" , kTProfile2D , {axisCent, axisTrackEta });
1023- histos.add (" PartId/Pion/hCQuPos" , " PartId/Pion/hCQuPos" , kTProfile2D , {axisCent, axisTrackEta });
1024- histos.add (" PartId/Pion/hCQuNeg" , " PartId/Pion/hCQuNeg" , kTProfile2D , {axisCent, axisTrackEta });
1078+ histos.add (" PartId/Pion/hAQuPos" , " PartId/Pion/hAQuPos" , kTProfile2D , {axisVarCent, axisTrackEtaHadrons });
1079+ histos.add (" PartId/Pion/hAQuNeg" , " PartId/Pion/hAQuNeg" , kTProfile2D , {axisVarCent, axisTrackEtaHadrons });
1080+ histos.add (" PartId/Pion/hCQuPos" , " PartId/Pion/hCQuPos" , kTProfile2D , {axisVarCent, axisTrackEtaHadrons });
1081+ histos.add (" PartId/Pion/hCQuNeg" , " PartId/Pion/hCQuNeg" , kTProfile2D , {axisVarCent, axisTrackEtaHadrons });
10251082 histos.addClone (" PartId/Pion/" , " PartId/Kaon/" );
10261083 histos.addClone (" PartId/Pion/" , " PartId/Proton/" );
10271084 }
10281085
10291086 // Resonance
10301087 if (doprocessResoFlow) {
1031- histos.add (" Reso/Phi/hSigCentEtaInvMass " , " hUSCentEtaInvMass " , kTH3F , {axisCent, axisTrackEta , axisPhiInvMass});
1032- histos.add (" Reso/Phi/hBkgCentEtaInvMass " , " hLSCentEtaInvMass " , kTH3F , {axisCent, axisTrackEta , axisPhiInvMass});
1033- histos.add (" Reso/Phi/Sig/hQuA" , " hPhiQuA" , kTProfile3D , {axisCent, axisTrackEta , axisPhiInvMass});
1034- histos.add (" Reso/Phi/Sig/hQuC" , " hPhiQuC" , kTProfile3D , {axisCent, axisTrackEta , axisPhiInvMass});
1035- histos.add (" Reso/Phi/Bkg/hQuA" , " hPhiQuA" , kTProfile3D , {axisCent, axisTrackEta , axisPhiInvMass});
1036- histos.add (" Reso/Phi/Bkg/hQuC" , " hPhiQuC" , kTProfile3D , {axisCent, axisTrackEta , axisPhiInvMass});
1088+ histos.add (" Reso/Phi/hBkgCentEtaInvMass " , " hLSCentEtaInvMass " , kTH3F , {axisVarCent, axisTrackEtaStrange , axisPhiInvMass});
1089+ histos.add (" Reso/Phi/hSigCentEtaInvMass " , " hUSCentEtaInvMass " , kTH3F , {axisVarCent, axisTrackEtaStrange , axisPhiInvMass});
1090+ histos.add (" Reso/Phi/Sig/hQuA" , " hPhiQuA" , kTProfile3D , {axisVarCent, axisTrackEtaStrange , axisPhiInvMass});
1091+ histos.add (" Reso/Phi/Sig/hQuC" , " hPhiQuC" , kTProfile3D , {axisVarCent, axisTrackEtaStrange , axisPhiInvMass});
1092+ histos.add (" Reso/Phi/Bkg/hQuA" , " hPhiQuA" , kTProfile3D , {axisVarCent, axisTrackEtaStrange , axisPhiInvMass});
1093+ histos.add (" Reso/Phi/Bkg/hQuC" , " hPhiQuC" , kTProfile3D , {axisVarCent, axisTrackEtaStrange , axisPhiInvMass});
10371094 }
10381095
10391096 // Lambda
@@ -1053,14 +1110,14 @@ struct FlowEventPlane {
10531110 histos.add (" V0/Lambda/QA/hPosNsigPiVsP" , " TPC n#sigma Pos Prong" , kTH2F , {axisMomPID, axisNsigma});
10541111 histos.add (" V0/Lambda/QA/hNegNsigPiVsP" , " TPC n#sigma Neg Prong" , kTH2F , {axisMomPID, axisNsigma});
10551112 histos.addClone (" V0/Lambda/" , " V0/K0Short/" );
1056- histos.add (" V0/Lambda/hMassVsRap" , " hMassVsRap" , kTH3F , {axisCent, axisTrackEta , axisLambdaInvMass});
1057- histos.add (" V0/Lambda/Flow/hQuA" , " hQuA" , kTProfile3D , {axisCent, axisTrackEta , axisLambdaInvMass});
1058- histos.add (" V0/Lambda/Flow/hQuC" , " hQuC" , kTProfile3D , {axisCent, axisTrackEta , axisLambdaInvMass});
1113+ histos.add (" V0/Lambda/hMassVsRap" , " hMassVsRap" , kTH3F , {axisVarCent, axisTrackEtaStrange , axisLambdaInvMass});
1114+ histos.add (" V0/Lambda/Flow/hQuA" , " hQuA" , kTProfile3D , {axisVarCent, axisTrackEtaStrange , axisLambdaInvMass});
1115+ histos.add (" V0/Lambda/Flow/hQuC" , " hQuC" , kTProfile3D , {axisVarCent, axisTrackEtaStrange , axisLambdaInvMass});
10591116 histos.addClone (" V0/Lambda/" , " V0/AntiLambda/" );
10601117 histos.addClone (" V0/Lambda/" , " V0/LambdaAntiLambda/" );
1061- histos.add (" V0/K0Short/hMassVsRap" , " hMassVsRap" , kTH3F , {axisCent, axisTrackEta , axisK0ShortInvMass});
1062- histos.add (" V0/K0Short/Flow/hQuA" , " hQuA" , kTProfile3D , {axisCent, axisTrackEta , axisK0ShortInvMass});
1063- histos.add (" V0/K0Short/Flow/hQuC" , " hQuC" , kTProfile3D , {axisCent, axisTrackEta , axisK0ShortInvMass});
1118+ histos.add (" V0/K0Short/hMassVsRap" , " hMassVsRap" , kTH3F , {axisVarCent, axisTrackEtaStrange , axisK0ShortInvMass});
1119+ histos.add (" V0/K0Short/Flow/hQuA" , " hQuA" , kTProfile3D , {axisVarCent, axisTrackEtaStrange , axisK0ShortInvMass});
1120+ histos.add (" V0/K0Short/Flow/hQuC" , " hQuC" , kTProfile3D , {axisVarCent, axisTrackEtaStrange , axisK0ShortInvMass});
10641121 }
10651122 }
10661123
0 commit comments