3434#include < Framework/OutputObjHeader.h>
3535#include < Framework/runDataProcessing.h>
3636
37+ #include < TRandom.h>
38+
3739#include < cstdint>
3840#include < cstdio>
3941#include < string>
@@ -57,6 +59,7 @@ struct LongrangecorrDerived {
5759
5860 struct : ConfigurableGroup {
5961 Configurable<int > cfgNmixedevent{" cfgNmixedevent" , 5 , " how many events are mixed" };
62+ Configurable<double > cfgSampleSize{" cfgSampleSize" , 10 , " Sample size for bootstrapping" };
6063 Configurable<int > cfgPidMask{" cfgPidMask" , 0 , " Selection bitmask for the TPC particle" };
6164 Configurable<int > cfgV0Mask{" cfgV0Mask" , 0 , " Selection bitmask for the V0 particle" };
6265 Configurable<float > cfgVtxCut{" cfgVtxCut" , 10 .0f , " Vertex Z range to consider" };
@@ -80,7 +83,6 @@ struct LongrangecorrDerived {
8083 ConfigurableAxis axisPhi{" axisPhi" , {96 , 0 , TwoPI}, " #phi axis" };
8184 ConfigurableAxis axisEtaTrig{" axisEtaTrig" , {40 , -1 ., 1 .}, " #eta trig axis" };
8285 ConfigurableAxis axisPtTrigger{" axisPtTrigger" , {VARIABLE_WIDTH, 0.5 , 1.0 , 1.5 , 2.0 , 3.0 , 4.0 , 6.0 , 10.0 }, " pt trigger axis for histograms" };
83- ConfigurableAxis axisPtAssoc{" axisPtAssoc" , {VARIABLE_WIDTH, 0.5 , 1.0 , 1.5 , 2.0 , 3.0 , 4.0 , 6.0 , 10.0 }, " pt assoc axis for histograms" };
8486 ConfigurableAxis axisVtxZ{" axisVtxZ" , {40 , -20 , 20 }, " vertex axis" };
8587 ConfigurableAxis axisEtaAssoc{" axisEtaAssoc" , {96 , 3.5 , 4.9 }, " #eta assoc axis" };
8688 ConfigurableAxis axisDeltaPhi{" axisDeltaPhi" , {72 , -PIHalf, PIHalf * 3 }, " delta phi axis for histograms" };
@@ -91,6 +93,7 @@ struct LongrangecorrDerived {
9193 ConfigurableAxis axisChannel{" axisChannel" , {208 , 0 , 208 }, " FT0 channel" };
9294 ConfigurableAxis axisMultME{" axisMultME" , {VARIABLE_WIDTH, 0 , 5 , 10 , 20 , 30 , 40 , 50 , 1000 }, " Mixing bins - multiplicity" };
9395 ConfigurableAxis axisVtxZME{" axisVtxZME" , {VARIABLE_WIDTH, -10 , -8 , -6 , -4 , -2 , 0 , 2 , 4 , 6 , 8 , 10 }, " Mixing bins - z-vertex" };
96+ ConfigurableAxis axisSample{" axisSample" , {10 , 0 , 10 }, " sample axis for histograms" };
9497
9598 ConfigurableAxis axisTPCNClsFound{" axisTPCNClsFound" , {200 , -0.5 , 199.5 }, " TPC Cluster axis" };
9699 ConfigurableAxis axisTPCNClsCrossedRows{" axisTPCNClsCrossedRows" , {200 , -0.5 , 199.5 }, " TPC NCrossedRow axis" };
@@ -155,10 +158,10 @@ struct LongrangecorrDerived {
155158
156159 void init (InitContext const &)
157160 {
158- std::vector<AxisSpec> corrAxis = {{cfgAxis.axisVtxZ , " z-vtx (cm)" },
161+ std::vector<AxisSpec> corrAxis = {{cfgAxis.axisSample , " Sample" },
162+ {cfgAxis.axisVtxZ , " z-vtx (cm)" },
159163 {cfgAxis.axisMultiplicity , " multiplicity" },
160164 {cfgAxis.axisPtTrigger , " p_{T} (GeV/c)" },
161- {cfgAxis.axisPtAssoc , " p_{T} (GeV/c)" },
162165 {cfgAxis.axisDeltaPhi , " #Delta#varphi (rad)" },
163166 {cfgAxis.axisDeltaEta , " #Delta#eta" }};
164167 std::vector<AxisSpec> effAxis = {{cfgAxis.axisVertexEfficiency , " z-vtx (cm)" },
@@ -182,14 +185,13 @@ struct LongrangecorrDerived {
182185 histos.add (" Trig_etavsphi" , " Trig_etavsphi" , kTH2D , {cfgAxis.axisPhi , cfgAxis.axisEtaTrig });
183186 histos.add (" Trig_pt" , " Trig_pt" , kTH1D , {cfgAxis.axisPtTrigger });
184187 histos.add (" Trig_invMass" , " Trig_invMass" , kTH1D , {cfgAxis.axisInvMassQA });
185- histos.add (" Trig_hist" , " Trig_hist" , kTHnSparseF , {cfgAxis.axisVtxZ , cfgAxis.axisMultiplicity , cfgAxis.axisPtTrigger , cfgAxis.axisInvMass });
188+ histos.add (" Trig_hist" , " Trig_hist" , kTHnSparseF , {cfgAxis.axisSample , cfgAxis. axisVtxZ , cfgAxis.axisMultiplicity , cfgAxis.axisPtTrigger , cfgAxis.axisInvMass });
186189 histos.add (" Trig_amp" , " Trig_amp" , kTH1D , {cfgAxis.axisAmplitude });
187190 histos.add (" Channel_vs_Trig_amp" , " Channel_vs_Trig_amp" , kTH2D , {cfgAxis.axisChannel , cfgAxis.axisAmplitude });
188191
189192 histos.add (" Assoc_eta" , " Assoc_eta" , kTH1D , {cfgAxis.axisEtaAssoc });
190193 histos.add (" Assoc_phi" , " Assoc_phi" , kTH1D , {cfgAxis.axisPhi });
191194 histos.add (" Assoc_etavsphi" , " Assoc_etavsphi" , kTH2D , {cfgAxis.axisPhi , cfgAxis.axisEtaAssoc });
192- histos.add (" Assoc_pt" , " Assoc_pt" , kTH1D , {cfgAxis.axisPtAssoc });
193195 histos.add (" Assoc_amp" , " Assoc_amp" , kTH1D , {cfgAxis.axisAmplitude });
194196 histos.add (" Channel_vs_Assoc_amp" , " Channel_vs_Assoc_amp" , kTH2D , {cfgAxis.axisChannel , cfgAxis.axisAmplitude });
195197
@@ -285,8 +287,6 @@ struct LongrangecorrDerived {
285287 if constexpr (requires { track.channelID (); }) {
286288 histos.fill (HIST (" Assoc_amp" ), track.amplitude ());
287289 histos.fill (HIST (" Channel_vs_Assoc_amp" ), track.channelID (), track.amplitude ());
288- } else {
289- histos.fill (HIST (" Assoc_pt" ), track.pt ());
290290 }
291291 if constexpr (requires { track.nClusters (); }) {
292292 histos.fill (HIST (" MFTNClusters" ), track.nClusters ());
@@ -317,6 +317,7 @@ struct LongrangecorrDerived {
317317 template <CorrelationContainer::CFStep step, typename TTarget, typename TTriggers, typename TAssocs>
318318 void fillCorrHist (TTarget target, TTriggers const & triggers, TAssocs const & assocs, bool mixing, float vz, float multiplicity, float eventWeight)
319319 {
320+ int fSampleIndex = gRandom ->Uniform (0 , cfgSel.cfgSampleSize );
320321 for (auto const & triggerTrack : triggers) {
321322 auto trigAmpl = 1 .0f ;
322323 if constexpr (requires { triggerTrack.channelID (); }) {
@@ -338,11 +339,11 @@ struct LongrangecorrDerived {
338339 if (!mixing) {
339340 fillTrigTrackQA (triggerTrack);
340341 if constexpr (requires { triggerTrack.channelID (); }) {
341- histos.fill (HIST (" Trig_hist" ), vz, multiplicity, 1.0 , 1.0 , eventWeight * trigAmpl);
342+ histos.fill (HIST (" Trig_hist" ), fSampleIndex , vz, multiplicity, 1.0 , 1.0 , eventWeight * trigAmpl);
342343 } else if constexpr (requires { triggerTrack.invMass (); }) {
343- histos.fill (HIST (" Trig_hist" ), vz, multiplicity, triggerTrack.pt (), triggerTrack.invMass (), eventWeight * trigAmpl);
344+ histos.fill (HIST (" Trig_hist" ), fSampleIndex , vz, multiplicity, triggerTrack.pt (), triggerTrack.invMass (), eventWeight * trigAmpl);
344345 } else {
345- histos.fill (HIST (" Trig_hist" ), vz, multiplicity, triggerTrack.pt (), 1.0 , eventWeight * trigAmpl);
346+ histos.fill (HIST (" Trig_hist" ), fSampleIndex , vz, multiplicity, triggerTrack.pt (), 1.0 , eventWeight * trigAmpl);
346347 }
347348 }
348349 for (auto const & assoTrack : assocs) {
@@ -365,11 +366,11 @@ struct LongrangecorrDerived {
365366 histos.fill (HIST (" deltaEta_deltaPhi_mixed" ), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl);
366367 }
367368 if constexpr (requires { triggerTrack.channelID (); }) {
368- target->getPairHist ()->Fill (step, vz, multiplicity, 1.0 , 1.0 , deltaPhi, deltaEta, 1.0 , eventWeight * trigAmpl * assoAmpl);
369+ target->getPairHist ()->Fill (step, fSampleIndex , vz, multiplicity , 1.0 , deltaPhi, deltaEta, 1.0 , eventWeight * trigAmpl * assoAmpl);
369370 } else if constexpr (requires { triggerTrack.invMass (); }) {
370- target->getPairHist ()->Fill (step, vz, multiplicity, triggerTrack. pt () , triggerTrack.pt (), deltaPhi, deltaEta, triggerTrack.invMass (), eventWeight * trigAmpl * assoAmpl);
371+ target->getPairHist ()->Fill (step, fSampleIndex , vz, multiplicity , triggerTrack.pt (), deltaPhi, deltaEta, triggerTrack.invMass (), eventWeight * trigAmpl * assoAmpl);
371372 } else {
372- target->getPairHist ()->Fill (step, vz, multiplicity, triggerTrack. pt () , triggerTrack.pt (), deltaPhi, deltaEta, 1.0 , eventWeight * trigAmpl * assoAmpl);
373+ target->getPairHist ()->Fill (step, fSampleIndex , vz, multiplicity , triggerTrack.pt (), deltaPhi, deltaEta, 1.0 , eventWeight * trigAmpl * assoAmpl);
373374 }
374375 } // associated tracks
375376 } // trigger tracks
0 commit comments