@@ -50,6 +50,8 @@ namespace branch
5050{
5151// Run Number
5252DECLARE_SOA_COLUMN (RunNumber, runNumber, int );
53+ // Check UPC mode
54+ DECLARE_SOA_COLUMN (IfCheckUPCmode, ifCheckUPCmode, uint16_t );
5355// vertex Position
5456DECLARE_SOA_COLUMN (PosX, posX, double );
5557DECLARE_SOA_COLUMN (PosY, posY, double );
@@ -159,6 +161,8 @@ DECLARE_SOA_COLUMN(FourPionCosThetaPair2, fourPionCosThetaPair2, double);
159161DECLARE_SOA_TABLE (SignalData, " AOD" , " signalData" ,
160162 branch::RunNumber,
161163
164+ branch::IfCheckUPCmode,
165+
162166 branch::PosX,
163167 branch::PosY,
164168 branch::PosZ,
@@ -263,6 +267,9 @@ DECLARE_SOA_TABLE(SignalData, "AOD", "signalData",
263267
264268DECLARE_SOA_TABLE (BkgroundData, " AOD" , " bkgroundData" ,
265269 branch::RunNumber,
270+
271+ branch::IfCheckUPCmode,
272+
266273 branch::PosX,
267274 branch::PosY,
268275 branch::PosZ,
@@ -375,18 +382,21 @@ struct ExclusiveRhoTo4Pi {
375382 // Histogram Registry
376383 HistogramRegistry histosData{" histosData" , {}, OutputObjHandlingPolicy::AnalysisObject, true , true };
377384 // Configurable parameters
385+ Configurable<bool > ifCheckUPCmode{" ifCheckUPCmode" , false , " Enable UPC reconstruction only" };
378386 Configurable<float > vZCut{" vZCut" , 10 ., " Vertex Cut" };
379387 Configurable<float > fv0Cut{" fv0Cut" , 50 ., " FV0A threshold" };
380388 Configurable<float > ft0aCut{" ft0aCut" , 150 ., " FT0A threshold" };
381389 Configurable<float > ft0cCut{" ft0cCut" , 50 ., " FT0C threshold" };
382390 Configurable<float > zdcCut{" zdcCut" , 0 ., " ZDC threshold" };
383- Configurable<float > occupancyCut{" occupancyCut" , 20000 , " Occupancy Cut" };
384391 Configurable<uint16_t > numPVContrib{" numPVContrib" , 4 , " Number of PV Contributors" };
392+ Configurable<int > gapSideCut{" gapSideCut" , 2 , " Gap Side" };
385393 Configurable<int > sbpCut{" sbpCut" , 1 , " Sbp" };
386394 Configurable<int > itsROFbCut{" itsROFbCut" , 1 , " itsROFbCut" };
387395 Configurable<int > vtxITSTPCcut{" vtxITSTPCcut" , 1 , " vtxITSTPCcut" };
388396 Configurable<int > tfbCut{" tfbCut" , 1 , " tfbCut" };
389397 Configurable<float > pvCut{" pvCut" , 1.0 , " Use Only PV tracks" };
398+ Configurable<int > hasITSCut{" hasITSCut" , 1 , " has hit is ITS" };
399+ Configurable<int > hasTPCCut{" hasTPCCut" , 1 , " has hit is TPC" };
390400 Configurable<float > dcaZcut{" dcaZcut" , 2 , " dcaZ cut" };
391401 Configurable<float > dcaXYcut{" dcaXYcut" , 0 , " dcaXY cut" };
392402 Configurable<float > tpcChi2Cut{" tpcChi2Cut" , 4 , " Max tpcChi2NCl" };
@@ -408,9 +418,9 @@ struct ExclusiveRhoTo4Pi {
408418
409419 void init (InitContext const &)
410420 {
411-
412421 // QA plots: Event Counter
413- histosData.add (" EventsCounts_vs_runNo" , " Number of Selected 4-Pion Events per Run; Run Number; Number of Events" , kTH2F , {{1355 , 544013 , 545367 }, {10 , 0 , 10 }});
422+ histosData.add (" EventsCounts_vs_runNo" , " Number of Selected 4-Pion Events per Run; Run Number; Number of Events" , kTH2F , {{1355 , 544013 , 545367 }, {20 , 0 , 20 }});
423+ histosData.add (" TracksCounts_vs_runNo" , " Number of Selected Tracks per Run; Run Number; Number of Tracks" , kTH2F , {{1355 , 544013 , 545367 }, {20 , 0 , 20 }});
414424 // QA plots: event selection
415425 histosData.add (" FT0A" , " T0A amplitude" , kTH1F , {{2000 , 0.0 , 500.0 }});
416426 histosData.add (" FT0C" , " T0C amplitude" , kTH1F , {{2000 , 0.0 , 500.0 }});
@@ -448,17 +458,6 @@ struct ExclusiveRhoTo4Pi {
448458 histosData.add (" tofNSigmaPr_pions" , " TOF nSigma Proton with track selection and PID Selection of Pion; Entries" , kTH2F , {{1000 , -15 , 15 }, {1000 , 0 , 10 }});
449459 histosData.add (" tofNSigmaEl_pions" , " TOF nSigma Electron with track selection and PID Selection of Pion; Entries" , kTH2F , {{1000 , -15 , 15 }, {1000 , 0 , 10 }});
450460 histosData.add (" tofNSigmaMu_pions" , " TOF nSigma Muon with track selection and PID Selection of Pion; Entries" , kTH2F , {{1000 , -15 , 15 }, {1000 , 0 , 10 }});
451- // QA averages
452- histosData.add (" avg_pT_pi_vs_runNo" , " Average pion p_{T} vs run number; Run Number; p_{T} [GeV/c]" , kTH2F , {{1355 , 544013 , 545367 }, {1000 , -0.1 , 2 }});
453- histosData.add (" avg_eta_pi_vs_runNo" , " Average pion #eta vs run number; Run Number; #eta" , kTH2F , {{1355 , 544013 , 545367 }, {etaAxis}});
454- histosData.add (" avg_phi_pi_vs_runNo" , " Average pion #phi vs run number; Run Number; #phi [rad]" , kTH2F , {{1355 , 544013 , 545367 }, {1000 , -1 * o2::constants::math::PI, o2::constants::math::PI}});
455- histosData.add (" avg_dcaxy_vs_runNo" , " Average pion DCA XY vs run number; Run Number; DCA XY [cm]" , kTH2F , {{1355 , 544013 , 545367 }, {1000 , -0.2 , 0.2 }});
456- histosData.add (" avg_dcaz_vs_runNo" , " Average pion DCA Z vs run number; Run Number; DCA Z [cm]" , kTH2F , {{1355 , 544013 , 545367 }, {1000 , -0.2 , 0.2 }});
457- histosData.add (" avg_pT_pi_vs_runNo_selected4piEvents" , " Average pion p_{T} vs run number; Run Number; p_{T} [GeV/c]" , kTH2F , {{1355 , 544013 , 545367 }, {1000 , -0.1 , 2 }});
458- histosData.add (" avg_eta_pi_vs_runNo_selected4piEvents" , " Average pion #eta vs run number; Run Number; #eta" , kTH2F , {{1355 , 544013 , 545367 }, {etaAxis}});
459- histosData.add (" avg_phi_pi_vs_runNo_selected4piEvents" , " Average pion #phi vs run number; Run Number; #phi [rad]" , kTH2F , {{1355 , 544013 , 545367 }, {1000 , -1 * o2::constants::math::PI, o2::constants::math::PI}});
460- histosData.add (" avg_dcaxy_vs_runNo_selected4piEvents" , " Average pion DCA XY vs run number; Run Number; DCA XY [cm]" , kTH2F , {{1355 , 544013 , 545367 }, {1000 , -0.2 , 0.2 }});
461- histosData.add (" avg_dcaz_vs_runNo_selected4piEvents" , " Average pion DCA Z vs run number; Run Number; DCA Z [cm]" , kTH2F , {{1355 , 544013 , 545367 }, {1000 , -0.2 , 0.2 }});
462461 // Track Transverse Momentum
463462 histosData.add (" pT_track_all" , " pT with track selection; pT [GeV/c]; Counts" , kTH1F , {pTAxis});
464463 histosData.add (" pT_track_pions" , " pT with track selection and PID selection of Pi; pT [GeV/c]; Events" , kTH1F , {pTAxis});
@@ -528,30 +527,91 @@ struct ExclusiveRhoTo4Pi {
528527 histosData.add (" phi_vs_costheta_large_mass" , " Phi vs cosTheta for large mass; #phi; cos(#theta)" , kTH2F , {phiAxis, cosThetaAxis});
529528 } // End of init function
530529
531- // ---------------------------------------------------------------------------------------------------------------------------------------------
532- Filter vertexCut = (nabs(o2::aod::collision::posZ) <= vZCut) && (o2::aod::collision::numContrib == numPVContrib);
533- Filter fitcuts = o2::aod::udcollision::totalFV0AmplitudeA < fv0Cut && o2::aod::udcollision::totalFT0AmplitudeA < ft0aCut && o2::aod::udcollision::totalFT0AmplitudeC < ft0cCut;
534- Filter zdcCuts = (o2::aod::udzdc::energyCommonZNA < zdcCut) && (o2::aod::udzdc::energyCommonZNC < zdcCut);
535- Filter bcSelectionCuts = (o2::aod::udcollision::sbp == sbpCut) && (o2::aod::udcollision::itsROFb == itsROFbCut) && (o2::aod::udcollision::vtxITSTPC == vtxITSTPCcut) && (o2::aod::udcollision::tfb == tfbCut);
536- Filter occupCut = nabs(o2::aod::udcollision::occupancyInTime) < occupancyCut;
537- Filter onlyPVtracks = o2::aod::udtrack::isPVContributor == true ;
538- // ---------------------------------------------------------------------------------------------------------------------------------------------
539-
540- using UDtracks = soa::Filtered<soa::Join<aod::UDTracks, aod::UDTracksPID, aod::UDTracksExtra, aod::UDTracksFlags, aod::UDTracksDCA>>;
541- using UDCollisions = soa::Filtered<soa::Join<aod::UDCollisions, aod::SGCollisions, aod::UDCollisionSelExtras, aod::UDCollisionsSels, aod::UDZdcsReduced>>;
530+ using UDtracks = soa::Join<aod::UDTracks, aod::UDTracksPID, aod::UDTracksExtra, aod::UDTracksFlags, aod::UDTracksDCA>;
531+ using UDCollisions = soa::Join<aod::UDCollisions, aod::SGCollisions, aod::UDCollisionSelExtras, aod::UDCollisionsSels, aod::UDZdcsReduced>;
542532
543533 void processData (UDCollisions::iterator const & collision, UDtracks const & tracks)
544534 {
535+ // Check if the event is in UPC mode
536+ if (ifCheckUPCmode && (collision.flags () != 1 )) {
537+ return ;
538+ }
545539
540+ // no Cuts
546541 histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 0 );
547542
548543 int gapSide = collision.gapSide ();
549544 std::vector<float > parameters = {pvCut, dcaZcut, dcaXYcut, tpcChi2Cut, tpcNClsFindableCut, itsChi2Cut, etaCut, pTcut};
550545 int truegapSide = sgSelector.trueGap (collision, fv0Cut, ft0aCut, ft0cCut, zdcCut);
551546
547+ // FTOA
548+ if (!(collision.totalFT0AmplitudeA () <= ft0aCut)) {
549+ return ;
550+ }
551+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 1 );
552+
553+ // FT0C
554+ if (!(collision.totalFT0AmplitudeC () <= ft0cCut)) {
555+ return ;
556+ }
557+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 2 );
558+
559+ // FV0
560+ if (!(collision.totalFV0AmplitudeA () <= fv0Cut)) {
561+ return ;
562+ }
563+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 3 );
564+
565+ // noSamebunchPileup
566+ if (collision.sbp () != sbpCut) {
567+ return ;
568+ }
569+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 4 );
570+
571+ // kIsVertexITSTPC
572+ if (collision.vtxITSTPC () != vtxITSTPCcut) {
573+ return ;
574+ }
575+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 5 );
576+
577+ // kNoITSROFrameBorder
578+ if (collision.itsROFb () != itsROFbCut) {
579+ return ;
580+ }
581+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 6 );
582+
583+ // kNoTimeFrameBorder
584+ if (collision.tfb () != tfbCut) {
585+ return ;
586+ }
587+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 7 );
588+
589+ // ZDC
590+ if (!(collision.energyCommonZNA () <= zdcCut || collision.energyCommonZNC () <= zdcCut)) {
591+ return ;
592+ }
593+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 8 );
594+
595+ // Vertex Z cut
596+ if (!(std::abs (collision.posZ ()) <= vZCut)) {
597+ return ;
598+ }
599+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 9 );
600+
601+ // true Gap Side
602+ if (truegapSide != gapSideCut) {
603+ return ;
604+ }
605+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 10 );
606+
607+ // number of PV contributors
608+ if (!(collision.numContrib () == numPVContrib)) {
609+ return ;
610+ }
611+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 11 );
612+
552613 histosData.fill (HIST (" GapSide" ), gapSide);
553614 histosData.fill (HIST (" TrueGapSide" ), truegapSide);
554- histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 1 );
555615 histosData.fill (HIST (" vertexX" ), collision.posX ());
556616 histosData.fill (HIST (" vertexY" ), collision.posY ());
557617 histosData.fill (HIST (" vertexZ" ), collision.posZ ());
@@ -567,41 +627,87 @@ struct ExclusiveRhoTo4Pi {
567627 std::vector<decltype (tracks.begin ())> selectedPionPlusTracks;
568628 std::vector<decltype (tracks.begin ())> selectedPionMinusTracks;
569629
570- double avgpT = 0.0 ;
571- double avgEta = 0.0 ;
572- double avgPhi = 0.0 ;
573- double avgdcaxy = 0.0 ;
574- double avgdcaz = 0.0 ;
575-
576630 for (const auto & t0 : tracks) {
577631
578632 ROOT::Math::PxPyPzMVector trackVector (t0.px (), t0.py (), t0.pz (), o2::constants::physics::MassPionCharged);
579- avgpT += trackVector.Pt ();
580- avgEta += trackVector.Eta ();
581- avgPhi += trackVector.Phi ();
582- avgdcaxy += t0.dcaXY ();
583- avgdcaz += t0.dcaZ ();
584-
585- if (trackselector (t0, parameters)) {
586- selectedTracks.push_back (t0);
587- if (selectionPIDPion (t0, true , nSigmaTPCcut, nSigmaTOFcut)) {
588- selectedPionTracks.push_back (t0);
589- if (t0.sign () == 1 ) {
590- selectedPionPlusTracks.push_back (t0);
591- }
592- if (t0.sign () == -1 ) {
593- selectedPionMinusTracks.push_back (t0);
594- }
595- } // End of Selection PID Pion
596- } // End of track selections
597633
598- } // End of loop over tracks
634+ // no Cuts
635+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 0 );
636+
637+ // is PV Contributor
638+ if (!(t0.isPVContributor () == pvCut)) {
639+ continue ;
640+ }
641+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 1 );
642+
643+ // track pT cut
644+ if (!(trackVector.Pt () >= pTcut)) {
645+ continue ;
646+ }
647+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 2 );
648+
649+ // track Eta cut
650+ if (!(std::abs (trackVector.Eta ()) <= etaCut)) {
651+ continue ;
652+ }
653+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 3 );
599654
600- histosData.fill (HIST (" avg_pT_pi_vs_runNo" ), collision.runNumber (), avgpT / tracks.size ());
601- histosData.fill (HIST (" avg_eta_pi_vs_runNo" ), collision.runNumber (), avgEta / tracks.size ());
602- histosData.fill (HIST (" avg_phi_pi_vs_runNo" ), collision.runNumber (), avgPhi / tracks.size ());
603- histosData.fill (HIST (" avg_dcaxy_vs_runNo" ), collision.runNumber (), avgdcaxy / tracks.size ());
604- histosData.fill (HIST (" avg_dcaz_vs_runNo" ), collision.runNumber (), avgdcaz / tracks.size ());
655+ // dcaZ
656+ if (!(std::abs (t0.dcaZ ()) <= dcaZcut)) {
657+ continue ;
658+ }
659+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 4 );
660+
661+ // dcaXY
662+ if (!(std::abs (t0.dcaXY ()) <= getMaxDCAxy (trackVector.Pt ()))) {
663+ continue ;
664+ }
665+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 5 );
666+
667+ // has ITS hit
668+ if (!(t0.hasITS () == hasITSCut)) {
669+ continue ;
670+ }
671+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 6 );
672+
673+ // has TPC hit
674+ if (!(t0.hasTPC () == hasTPCCut)) {
675+ continue ;
676+ }
677+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 7 );
678+
679+ // ITS chi2
680+ if (!(t0.itsChi2NCl () <= itsChi2Cut)) {
681+ continue ;
682+ }
683+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 8 );
684+
685+ // TPC chi2
686+ if (!(t0.tpcChi2NCl () <= tpcChi2Cut)) {
687+ continue ;
688+ }
689+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 9 );
690+
691+ // TPC N Cls Findable
692+ if (!(t0.tpcNClsFindable () >= tpcNClsFindableCut)) {
693+ continue ;
694+ }
695+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 10 );
696+
697+ selectedTracks.push_back (t0);
698+ if (selectionPIDPion (t0, true , nSigmaTPCcut, nSigmaTOFcut)) {
699+ selectedPionTracks.push_back (t0);
700+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 11 );
701+ if (t0.sign () == 1 ) {
702+ selectedPionPlusTracks.push_back (t0);
703+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 12 );
704+ }
705+ if (t0.sign () == -1 ) {
706+ selectedPionMinusTracks.push_back (t0);
707+ histosData.fill (HIST (" TracksCounts_vs_runNo" ), collision.runNumber (), 13 );
708+ }
709+ } // End of Selection PID Pion
710+ } // End of loop over tracks
605711
606712 int numSelectedTracks = static_cast <int >(selectedTracks.size ());
607713 int numSelectedPionTracks = static_cast <int >(selectedPionTracks.size ());
@@ -647,11 +753,11 @@ struct ExclusiveRhoTo4Pi {
647753 histosData.fill (HIST (" dcaZ_pions" ), selectedPionTracks[i].dcaZ ());
648754 } // End of loop over tracks with selection and PID of pions
649755
756+ // event should have at least 4 pions
650757 if (numSelectedPionTracks != numFourPionTracks) {
651758 return ;
652759 }
653-
654- histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 2 );
760+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 12 );
655761
656762 // Check if there is at least one track with TOF in the selected events, otherwise return
657763 bool hasAtleastOneTOF = false ;
@@ -662,12 +768,10 @@ struct ExclusiveRhoTo4Pi {
662768 }
663769 }
664770
665- histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 3 );
666-
667771 // Selecting Events with net charge = 0
668772 if (numPionMinusTracks == numPiMinus && numPiPlusTracks == numPiPlus) {
669773
670- histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 4 );
774+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 13 );
671775
672776 ROOT::Math::PtEtaPhiMVector k1, k2, k3, k4, k1234, k13, k14, k23, k24;
673777
@@ -696,12 +800,6 @@ struct ExclusiveRhoTo4Pi {
696800 histosData.fill (HIST (" rapidity_track_pions_contributed" ), p3.Rapidity ());
697801 histosData.fill (HIST (" rapidity_track_pions_contributed" ), p4.Rapidity ());
698802
699- histosData.fill (HIST (" avg_pT_pi_vs_runNo_selected4piEvents" ), collision.runNumber (), (p1.Pt () + p2.Pt () + p3.Pt () + p4.Pt ()) / 4.0 );
700- histosData.fill (HIST (" avg_eta_pi_vs_runNo_selected4piEvents" ), collision.runNumber (), (p1.Eta () + p2.Eta () + p3.Eta () + p4.Eta ()) / 4.0 );
701- histosData.fill (HIST (" avg_phi_pi_vs_runNo_selected4piEvents" ), collision.runNumber (), (p1.Phi () + p2.Phi () + p3.Phi () + p4.Phi ()) / 4.0 );
702- histosData.fill (HIST (" avg_dcaxy_vs_runNo_selected4piEvents" ), collision.runNumber (), (selectedPionPlusTracks[0 ].dcaXY () + selectedPionPlusTracks[1 ].dcaXY () + selectedPionMinusTracks[0 ].dcaXY () + selectedPionMinusTracks[1 ].dcaXY ()) / 4.0 );
703- histosData.fill (HIST (" avg_dcaz_vs_runNo_selected4piEvents" ), collision.runNumber (), (selectedPionPlusTracks[0 ].dcaZ () + selectedPionPlusTracks[1 ].dcaZ () + selectedPionMinusTracks[0 ].dcaZ () + selectedPionMinusTracks[1 ].dcaZ ()) / 4.0 );
704-
705803 k1.SetCoordinates (p1.Pt (), p1.Eta (), p1.Phi (), o2::constants::physics::MassPionCharged);
706804 k2.SetCoordinates (p2.Pt (), p2.Eta (), p2.Phi (), o2::constants::physics::MassPionCharged);
707805 k3.SetCoordinates (p3.Pt (), p3.Eta (), p3.Phi (), o2::constants::physics::MassPionCharged);
@@ -729,6 +827,8 @@ struct ExclusiveRhoTo4Pi {
729827 sigFromData (
730828 // run number
731829 collision.runNumber (),
830+ // UPC mode
831+ collision.flags (),
732832 // vertex
733833 collision.posX (), collision.posY (), collision.posZ (),
734834 // FIT Signals
@@ -786,7 +886,6 @@ struct ExclusiveRhoTo4Pi {
786886 histosData.fill (HIST (" fourpion_rap_0_charge_within_rap" ), p1234.Rapidity ());
787887 histosData.fill (HIST (" fourpion_mass_0_charge_within_rap" ), p1234.M ());
788888 if (p1234.Pt () < rhoPtCut) {
789- histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 5 );
790889 // Fill the Invariant Mass Histogram
791890 histosData.fill (HIST (" fourpion_mass_0_charge_domA" ), p1234.M ());
792891 // Two Pion Masses
@@ -831,7 +930,7 @@ struct ExclusiveRhoTo4Pi {
831930 // Selecting Events with net charge != 0 for estimation of background
832931 if (numPionMinusTracks != numPiMinus && numPiPlusTracks != numPiPlus) {
833932
834- histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 6 );
933+ histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 14 );
835934
836935 ROOT::Math::PxPyPzMVector p1 (selectedPionTracks[0 ].px (), selectedPionTracks[0 ].py (), selectedPionTracks[0 ].pz (), o2::constants::physics::MassPionCharged);
837936 ROOT::Math::PxPyPzMVector p2 (selectedPionTracks[1 ].px (), selectedPionTracks[1 ].py (), selectedPionTracks[1 ].pz (), o2::constants::physics::MassPionCharged);
@@ -848,6 +947,8 @@ struct ExclusiveRhoTo4Pi {
848947 bkgFromData (
849948 // Run Number
850949 collision.runNumber (),
950+ // UPC mode
951+ collision.flags (),
851952 // vertex
852953 collision.posX (), collision.posY (), collision.posZ (),
853954 // FIT Signals
@@ -903,7 +1004,6 @@ struct ExclusiveRhoTo4Pi {
9031004 histosData.fill (HIST (" fourpion_rap_non_0_charge_within_rap" ), p1234.Rapidity ());
9041005 histosData.fill (HIST (" fourpion_mass_non_0_charge_within_rap" ), p1234.M ());
9051006 if (p1234.Pt () < rhoPtCut) {
906- histosData.fill (HIST (" EventsCounts_vs_runNo" ), collision.runNumber (), 7 );
9071007 histosData.fill (HIST (" fourpion_mass_non_0_charge_domA" ), p1234.M ());
9081008 }
9091009 if (p1234.Pt () > rhoPtCut && p1234.Pt () < zeroPointEight) {
@@ -966,6 +1066,11 @@ struct ExclusiveRhoTo4Pi {
9661066 return phi;
9671067 }
9681068
1069+ double getMaxDCAxy (double pT)
1070+ {
1071+ return 0.0105 + 0.035 / std::pow (pT, 1.1 );
1072+ }
1073+
9691074}; // End of Struct exclusiveRhoTo4Pi
9701075
9711076WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments