@@ -132,31 +132,33 @@ struct F0980pbpbanalysis {
132132 Configurable<std::string> cfgQvecRefBName{"cfgQvecRefBName", "TPCneg", "The name of detector for reference B"};
133133
134134 // Rotational Background Configurables
135- Configurable<bool> cfgBkgRotSel{"cfgBkgRotSel", true , "flag to construct rotational backgrounds"};
136- Configurable<int> cfgBkgRotNum{"cfgBkgRotNum", 10 , "the number of rotational backgrounds"};
135+ Configurable<bool> cfgBkgRotSel{"cfgBkgRotSel", false , "flag to construct rotational backgrounds"};
136+ Configurable<int> cfgBkgRotNum{"cfgBkgRotNum", 5 , "the number of rotational backgrounds"};
137137
138138 // Mixed Event Background Configurables
139139 SliceCache cache;
140- Configurable<int> cfgBkgMixedNum{"cfgBkgMixedNum", 10 , "Number of mixed events per event"};
140+ Configurable<int> cfgBkgMixedNum{"cfgBkgMixedNum", 5 , "Number of mixed events per event"};
141141 ConfigurableAxis mixAxisVertex{"mixAxisVertex", {10, -10, 10}, "Vertex axis for mixing bin"};
142142 ConfigurableAxis mixAxisCent{"mixAxisCent", {VARIABLE_WIDTH, 0, 10, 20, 50, 100}, "multiplicity percentile for mixing bin"};
143143 // ConfigurableAxis mixingAxisMultiplicity{"mixingAxisMultiplicity", {2000, 0, 10000}, "TPC multiplicity for bin"};
144144
145145 // List Configurables
146146 Configurable<int> cfgListPID{"cfgListPID", 0, "PID selection type"};
147147 Configurable<int> cfgListPtl{"cfgListPtl", 0, "Particle selection type"};
148- Configurable<int> cfgListPair{"cfgListPair", 2, "Pair selection type"};
149148
150149 // Histogram QA Configurables
151150 Configurable<bool> cfgQAEventCut{"cfgQAEventCut", true, "Enable Event QA Hists"};
152151 Configurable<bool> cfgQATrackCut{"cfgQATrackCut", true, "Enable Track QA Hists"};
153152 Configurable<bool> cfgQAPIDCut{"cfgQAPIDCut", true, "Enable PID QA Hists"};
154153 Configurable<bool> cfgQAEPCut{"cfgQAEPCut", true, "Enable Event Plane QA Hists"};
154+ Configurable<bool> cfgQAEventFlowCut{"cfgQAEventFlowCut", true, "Enable Event Flow QA Hists"};
155155
156156 ConfigurableAxis histAxisDCAz{"histAxisDCAz", {40, -0.2, 0.2}, "DCAz axis"};
157157 ConfigurableAxis histAxisDCAr{"histAxisDCAr", {40, -0.2, 0.2}, "DCAxy axis"};
158158 ConfigurableAxis histAxisOccupancy{"histAxisOccupancy", {100, 0.0, 20000}, "Occupancy axis"};
159159
160+ Configurable<bool> cfgAnalysisMethod{"cfgAnalysisMethod", true, "true: Two for-loop, false: Combination"};
161+
160162 // Configurable for axis
161163 ConfigurableAxis axisMass{"axisMass", {400, 0.2, 2.2}, "Invariant mass axis"};
162164 ConfigurableAxis axisPT{"axisPT", {VARIABLE_WIDTH, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.8, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 10.0, 13.0, 20.0}, "Transverse momentum Binning"};
@@ -217,18 +219,11 @@ struct F0980pbpbanalysis {
217219 PtlKaon = 1,
218220 };
219221
220- enum IndexSelList {
221- None = 0,
222- woSame = 1,
223- leq = 2
224- };
225-
226222 enum QAList {
227223 QAEvent = 1,
228224 QAEP = 2,
229225 QATrack = 3,
230226 QAPID = 4,
231- QAPIDS = 5
232227 };
233228
234229 TRandom* rn = new TRandom();
@@ -329,13 +324,6 @@ struct F0980pbpbanalysis {
329324 histos.fill(HIST("PIDQA/TPC_TOF_AC"), getTpcNSigma(obj), getTofNSigma(obj));
330325 }
331326 }
332- if (objecttype == QAPIDS) {
333- if (pass) {
334- histos.fill(HIST("PIDQA/Nsigma_TPC_selected"), obj.pt(), getTpcNSigma(obj));
335- histos.fill(HIST("PIDQA/Nsigma_TOF_selected"), obj.pt(), getTofNSigma(obj));
336- histos.fill(HIST("PIDQA/TPC_TOF_selected"), getTpcNSigma(obj), getTofNSigma(obj));
337- }
338- }
339327 }
340328 }
341329
@@ -346,36 +334,50 @@ struct F0980pbpbanalysis {
346334 fillQA(false, collision, 1);
347335 if (cfgQAEPCut && QA)
348336 fillQA(false, collision, 2);
337+ // if (cfgQAEventFlowCut) histos.fill(HIST("EventQA/hnEvents"), 0);
349338 //
350- // histos.fill(HIST("EventQA/hnEvents"), 0);
351339 if (std::abs(collision.posZ()) > cfgEventCutVertex) {
352340 return 0;
353341 }
354- histos.fill(HIST("EventQA/hnEvents"), 1);
342+ if (cfgQAEventFlowCut && QA)
343+ histos.fill(HIST("EventQA/hnEvents"), 1);
344+
355345 if (!collision.sel8()) {
356346 return 0;
357347 }
358- histos.fill(HIST("EventQA/hnEvents"), 2);
348+ if (cfgQAEventFlowCut && QA)
349+ histos.fill(HIST("EventQA/hnEvents"), 2);
350+
359351 if (cfgEventGoodZvtxSel && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) {
360352 return 0;
361353 }
362- histos.fill(HIST("EventQA/hnEvents"), 3);
354+ if (cfgQAEventFlowCut && QA)
355+ histos.fill(HIST("EventQA/hnEvents"), 3);
356+
363357 if (cfgEventNSamePileupSel && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) {
364358 return 0;
365359 }
366- histos.fill(HIST("EventQA/hnEvents"), 4);
360+ if (cfgQAEventFlowCut && QA)
361+ histos.fill(HIST("EventQA/hnEvents"), 4);
362+
367363 if (cfgEventNCollinTRSel && !collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
368364 return 0;
369365 }
370- histos.fill(HIST("EventQA/hnEvents"), 5);
366+ if (cfgQAEventFlowCut && QA)
367+ histos.fill(HIST("EventQA/hnEvents"), 5);
368+
371369 if (cfgEventQvecSel && (collision.qvecAmp()[detId] < QvecAmpMin || collision.qvecAmp()[refAId] < QvecAmpMin || collision.qvecAmp()[refBId] < QvecAmpMin)) {
372370 return 0;
373371 }
374- histos.fill(HIST("EventQA/hnEvents"), 6);
372+ if (cfgQAEventFlowCut && QA)
373+ histos.fill(HIST("EventQA/hnEvents"), 6);
374+
375375 if (cfgEventOccupancySel && (collision.trackOccupancyInTimeRange() > cfgEventOccupancyMax || collision.trackOccupancyInTimeRange() < cfgEventOccupancyMin)) {
376376 return 0;
377377 }
378- histos.fill(HIST("EventQA/hnEvents"), 7);
378+ if (cfgQAEventFlowCut && QA)
379+ histos.fill(HIST("EventQA/hnEvents"), 7);
380+
379381 if (cfgEventCentMax < centrality) {
380382 return 0;
381383 }
@@ -388,12 +390,18 @@ struct F0980pbpbanalysis {
388390 return 0;
389391 }
390392 */
391- histos.fill(HIST("EventQA/hnEvents"), 8);
393+ if (cfgQAEventFlowCut && QA)
394+ histos.fill(HIST("EventQA/hnEvents"), 8);
395+
392396 if (cfgEventPVSel && std::abs(collision.posZ()) > cfgEventPV) {
393397 return 0;
394398 }
395- histos.fill(HIST("EventQA/hnEvents"), 9);
396- histos.fill(HIST("EventQA/hnEvents"), 10);
399+ if (cfgQAEventFlowCut && QA)
400+ histos.fill(HIST("EventQA/hnEvents"), 9);
401+
402+ // All passed
403+ if (cfgQAEventFlowCut && QA)
404+ histos.fill(HIST("EventQA/hnEvents"), 10);
397405 return 1;
398406 } // event selection
399407
@@ -445,7 +453,7 @@ struct F0980pbpbanalysis {
445453 template <typename TrackType>
446454 bool selectionPID(const TrackType track, const bool QA)
447455 {
448- if (cfgQAPIDCut && QA)
456+ if (QA)
449457 fillQA(false, track, 4);
450458 //
451459 if (cfgListPID == PIDList::PIDRun3) {
@@ -499,21 +507,6 @@ struct F0980pbpbanalysis {
499507 return 1;
500508 }
501509
502- template <typename TrackType1, typename TrackType2>
503- bool pairIndexSelection(const TrackType1 track1, const TrackType2 track2)
504- {
505- if (cfgListPair == IndexSelList::woSame) {
506- if (track2.globalIndex() == track1.globalIndex()) {
507- return 0;
508- }
509- } else if (cfgListPair == IndexSelList::leq) {
510- if (track2.globalIndex() <= track1.globalIndex()) {
511- return 0;
512- }
513- }
514- return 1;
515- }
516-
517510 template <typename TrackType1, typename TrackType2>
518511 bool pairAngleSelection(const TrackType1 track1, const TrackType2 track2)
519512 {
@@ -569,28 +562,25 @@ struct F0980pbpbanalysis {
569562 if (!trackSelected(trk1, true)) {
570563 continue;
571564 }
572- fillQA(true, trk1, 3);
565+ if (cfgQATrackCut)
566+ fillQA(true, trk1, 3);
573567
574568 if (!selectionPID(trk1, true)) {
575569 continue;
576570 }
577571 fillQA(true, trk1, 4);
578572
579573 for (const auto& trk2 : dTracks) {
580- if (!trackSelected(trk2, false )) {
574+ if (trk1.globalIndex() >= trk2.globalIndex( )) {
581575 continue;
582576 }
583577
584- // PID
585- if (!selectionPID(trk2, false)) {
578+ if (!trackSelected(trk2, false)) {
586579 continue;
587580 }
588581
589- if (trk1.index() == trk2.index()) {
590- fillQA(true, trk1, 5);
591- }
592-
593- if (!pairIndexSelection(trk1, trk2)) {
582+ // PID
583+ if (!selectionPID(trk2, false)) {
594584 continue;
595585 }
596586
@@ -690,19 +680,19 @@ struct F0980pbpbanalysis {
690680 }
691681 }
692682 }
693- PROCESS_SWITCH(F0980pbpbanalysis, processEventMixing, "Process Event mixing", true );
683+ PROCESS_SWITCH(F0980pbpbanalysis, processEventMixing, "Process Event mixing", false );
694684
695- void processOnce (EventCandidatesOrigin const& events)
685+ void processTotalEvent (EventCandidatesOrigin const& events)
696686 {
697- if (cfgQAEventCut ) {
687+ if (cfgQAEventFlowCut ) {
698688 nTotalEvents += events.size();
699689 auto hTotalEvents = histos.get<TH1>(HIST("EventQA/hnEvents"));
700- if (hTotalEvents)
690+ if (hTotalEvents) {
701691 hTotalEvents->SetBinContent(1, static_cast<double>(nTotalEvents));
702- // std::cout << "Total number of events processed: " << nTotalEvents << std::endl;
692+ }
703693 }
704694 }
705- PROCESS_SWITCH(F0980pbpbanalysis, processOnce , "fill Total nEvents once", true );
695+ PROCESS_SWITCH(F0980pbpbanalysis, processTotalEvent , "fill Total nEvents once", false );
706696
707697 void init(o2::framework::InitContext&)
708698 {
@@ -749,18 +739,17 @@ struct F0980pbpbanalysis {
749739 }
750740
751741 // PID QA
752- if (cfgQAPIDCut) {
753- histos.add("PIDQA/Nsigma_TPC_BC", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
754- histos.add("PIDQA/Nsigma_TOF_BC", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
755- histos.add("PIDQA/TPC_TOF_BC", "", {HistType::kTH2F, {qaPIDAxis, qaPIDAxis}});
756- }
742+ histos.add("PIDQA/Nsigma_TPC_BC", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
743+ histos.add("PIDQA/Nsigma_TOF_BC", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
744+ histos.add("PIDQA/TPC_TOF_BC", "", {HistType::kTH2F, {qaPIDAxis, qaPIDAxis}});
745+ //
757746 histos.add("PIDQA/Nsigma_TPC_AC", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
758747 histos.add("PIDQA/Nsigma_TOF_AC", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
759748 histos.add("PIDQA/TPC_TOF_AC", "", {HistType::kTH2F, {qaPIDAxis, qaPIDAxis}});
760749 //
761- histos.add("PIDQA/Nsigma_TPC_selected", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
762- histos.add("PIDQA/Nsigma_TOF_selected", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
763- histos.add("PIDQA/TPC_TOF_selected", "", {HistType::kTH2F, {qaPIDAxis, qaPIDAxis}});
750+ // histos.add("PIDQA/Nsigma_TPC_selected", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
751+ // histos.add("PIDQA/Nsigma_TOF_selected", "", {HistType::kTH2F, {qaPtAxis, qaPIDAxis}});
752+ // histos.add("PIDQA/TPC_TOF_selected", "", {HistType::kTH2F, {qaPIDAxis, qaPIDAxis}});
764753
765754 // Event Plane QA
766755 if (cfgQAEPCut) {
@@ -775,6 +764,7 @@ struct F0980pbpbanalysis {
775764 histos.add("EventQA/EPhistAC_AC", "", {HistType::kTH2F, {qaCentAxis, epresAxis}});
776765 histos.add("EventQA/EPhistBC_AC", "", {HistType::kTH2F, {qaCentAxis, epresAxis}});
777766
767+ // Invariant Mass Histograms
778768 histos.add("hInvMass_f0980_US_EPA", "unlike invariant mass",
779769 {HistType::kTHnSparseF, {axisMass, axisPT, axisCent, axisEp}});
780770 histos.add("hInvMass_f0980_LSpp_EPA", "++ invariant mass",
@@ -791,22 +781,24 @@ struct F0980pbpbanalysis {
791781 // }
792782
793783 // Event Histograms
794- histos.add("EventQA/hnEvents", "Event selection steps", {HistType::kTH1F, {{11, -0.5, 10.5}}});
795- std::shared_ptr<TH1> hEventsCutFlow = histos.get<TH1>(HIST("EventQA/hnEvents"));
796- std::vector<std::string> eventCutLabels = {
797- "All Events",
798- "Zvtx",
799- "sel8",
800- "GoodZvtxFT0vsPV",
801- "NoSameBunchPileup",
802- "NoCollInTimeRangeStandard",
803- "Qvec Amplitude",
804- "Occupancy",
805- "Centrality",
806- "Additional PV cut",
807- "Passed Events"};
808- for (size_t i = 0; i < eventCutLabels.size(); ++i) {
809- hEventsCutFlow->GetXaxis()->SetBinLabel(i + 1, eventCutLabels[i].c_str());
784+ if (cfgQAEventFlowCut) {
785+ histos.add("EventQA/hnEvents", "Event selection steps", {HistType::kTH1F, {{11, -0.5, 10.5}}});
786+ std::shared_ptr<TH1> hEventsCutFlow = histos.get<TH1>(HIST("EventQA/hnEvents"));
787+ std::vector<std::string> eventCutLabels = {
788+ "All Events",
789+ "Zvtx",
790+ "sel8",
791+ "GoodZvtxFT0vsPV",
792+ "NoSameBunchPileup",
793+ "NoCollInTimeRangeStandard",
794+ "Qvec Amplitude",
795+ "Occupancy",
796+ "Centrality",
797+ "Additional PV cut",
798+ "Passed Events"};
799+ for (size_t i = 0; i < eventCutLabels.size(); ++i) {
800+ hEventsCutFlow->GetXaxis()->SetBinLabel(i + 1, eventCutLabels[i].c_str());
801+ }
810802 }
811803
812804 detId = getDetId(cfgQvecDetName);
@@ -853,7 +845,7 @@ struct F0980pbpbanalysis {
853845
854846 fillHistograms<false>(collision, tracks);
855847 };
856- PROCESS_SWITCH(F0980pbpbanalysis, processData, "Process Event for data", true );
848+ PROCESS_SWITCH(F0980pbpbanalysis, processData, "Process Event for data", false );
857849};
858850
859851WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
0 commit comments