@@ -218,11 +218,10 @@ struct GenericFramework {
218218 if (cfgUsePID){
219219 std::vector<GFWWeights*> weights;
220220 std::vector<std::string> species = {" ref" ," ch" ," pi" ," ka" ," pr" };
221- int nspecies = (cfgUsePID)?5 :2 ;
222- for (int i = 0 ; i < nspecies; ++i) {
223- weights.push_back (new GFWWeights (Form (" w%i_%s" ,lastRun,species[i].c_str ())));
221+ for (size_t i = 0 ; i < species.size (); ++i) {
222+ weights.push_back (new GFWWeights (Form (" w_%s" ,species[i].c_str ())));
224223 if (i==0 ) {
225- auto it = std::find (ptbinning.begin (),ptbinning.end (),5 . );
224+ auto it = std::find (ptbinning.begin (),ptbinning.end (),ptrefup );
226225 std::vector<double > refpt (ptbinning.begin (),it+1 );
227226 weights[i]->SetPtBins (refpt.size ()-1 , &refpt[0 ]);
228227 }
@@ -252,6 +251,7 @@ struct GenericFramework {
252251 registry.addClone (" trackQA/before/" , " trackQA/after/" );
253252 registry.add (" trackQA/after/pt_ref" , " " , {HistType::kTH1D , {{100 ,ptreflow,ptrefup}}});
254253 registry.add (" trackQA/after/pt_poi" , " " , {HistType::kTH1D , {{100 ,ptpoilow,ptpoiup}}});
254+ registry.add (" trackQA/after/runNo" , " " , {HistType::kTH1D , {{10 ,544090 ,544100 }}});
255255
256256 registry.add (" eventQA/before/globalTracks_centT0C" , " " , {HistType::kTH2D , {centAxis, nchAxis}});
257257 registry.add (" eventQA/before/PVTracks_centT0C" , " " , {HistType::kTH2D , {centAxis, multpvAxis}});
@@ -260,7 +260,15 @@ struct GenericFramework {
260260 registry.add (" eventQA/before/globalTracks_multV0A" , " " , {HistType::kTH2D , {t0aAxis, nchAxis}});
261261 registry.add (" eventQA/before/multV0A_multT0A" , " " , {HistType::kTH2D , {t0aAxis, t0aAxis}});
262262 registry.add (" eventQA/before/multT0C_centT0C" , " " , {HistType::kTH2D , {centAxis, t0cAxis}});
263+ registry.add (" eventQA/before/runNo" , " " , {HistType::kTH1I , {{10 ,544090 ,544100 }}});
263264 registry.addClone (" eventQA/before/" , " eventQA/after/" );
265+ registry.add (" eventQA/after/runNo2" , " " , {HistType::kTH1I , {{10 ,544090 ,544100 }}});
266+ registry.add (" eventQA/after/runNo3" , " " , {HistType::kTH1I , {{10 ,544090 ,544100 }}});
267+ registry.add (" eventQA/after/runNo4" , " " , {HistType::kTH1I , {{10 ,544090 ,544100 }}});
268+ registry.add (" eventQA/after/runNo5" , " " , {HistType::kTH1I , {{10 ,544090 ,544100 }}});
269+ registry.add (" eventQA/after/runNo6" , " " , {HistType::kTH1I , {{10 ,544090 ,544100 }}});
270+ registry.add (" eventQA/after/runNo7" , " " , {HistType::kTH1I , {{10 ,544090 ,544100 }}});
271+ registry.add (" eventQA/after/runNo8" , " " , {HistType::kTH1I , {{10 ,544090 ,544100 }}});
264272 registry.add (" eventQA/eventSel" , " Number of Events;; Counts" , {HistType::kTH1D , {{10 , 0 , 10 }}});
265273 registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (1 , " Filtered event" );
266274 registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (2 , " sel8" );
@@ -397,6 +405,7 @@ struct GenericFramework {
397405 }
398406 else { // run-averaged weights, stored in TList to hold PID weights
399407 TList* weightlist = ccdb->getForTimeStamp <TList>(cfgAcceptance, timestamp);
408+ weightlist->ls ();
400409 cfg.mAcceptance .push_back (dynamic_cast <GFWWeights*>(weightlist->FindObject (" weights_ref" )));
401410 cfg.mAcceptance .push_back (dynamic_cast <GFWWeights*>(weightlist->FindObject (" weights_ch" )));
402411 cfg.mAcceptance .push_back (dynamic_cast <GFWWeights*>(weightlist->FindObject (" weights_pi" )));
@@ -607,31 +616,38 @@ struct GenericFramework {
607616 kGen
608617 };
609618
610- template <typename TrackObject >
611- void FillWeights (const TrackObject track, const double vtxz, const double multcent, int pid_index){
619+ template <typename TTrack >
620+ void FillWeights (const TTrack track, const double vtxz, const double multcent, int pid_index){
612621 if (cfgUsePID){
622+ std::vector<std::string> species = {" ref" ," ch" ," pi" ," ka" ," pr" };
613623 double ptpidmins[] = {ptpoilow,ptpoilow,0.3 ,0.5 }; // min pt for ch, pi, ka, pr
614624 double ptpidmaxs[] = {ptpoiup,ptpoiup,6.0 ,6.0 }; // max pt for ch, pi, ka, pr
615625 bool withinPtPOI = (ptpidmins[pid_index] < track.pt ()) && (track.pt () < ptpidmaxs[pid_index]); // within POI pT range
616626 bool withinPtRef = (ptreflow < track.pt ()) && (track.pt () < ptrefup); // within RF pT range
617- if (withinPtRef && !pid_index) dynamic_cast <GFWWeights*>(fWeightList ->At (0 ))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 ); // pt-subset of charged particles for ref flow
618- if (withinPtPOI) dynamic_cast <GFWWeights*>(fWeightList ->At (pid_index+1 ))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 ); // charged and id'ed particle weights
627+ if (cfgRunByRunWeights){
628+ if (withinPtRef && !pid_index) dynamic_cast <GFWWeights*>(fWeightList ->FindObject (Form (" w%i_%s" ,lastRun,species[pid_index].c_str ())))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 ); // pt-subset of charged particles for ref flow
629+ if (withinPtPOI) dynamic_cast <GFWWeights*>(fWeightList ->FindObject (Form (" w%i_%s" ,lastRun,species[pid_index+1 ].c_str ())))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 ); // charged and id'ed particle weights
630+ }
631+ else {
632+ if (withinPtRef && !pid_index) dynamic_cast <GFWWeights*>(fWeightList ->FindObject (Form (" w_%s" ,species[pid_index].c_str ())))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 ); // pt-subset of charged particles for ref flow
633+ if (withinPtPOI) dynamic_cast <GFWWeights*>(fWeightList ->FindObject (Form (" w_%s" ,species[pid_index+1 ].c_str ())))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 ); // charged and id'ed particle weights
634+ }
635+
619636 }
620637 else {
621- dynamic_cast <GFWWeights*>(fWeightList ->At (0 ))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 );
638+ if (cfgRunByRunWeights)
639+ dynamic_cast <GFWWeights*>(fWeightList ->FindObject (Form (" w%i_ch" ,lastRun)))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 );
640+ else
641+ dynamic_cast <GFWWeights*>(fWeightList ->FindObject (" w_ch" ))->Fill (track.phi (), track.eta (), vtxz, track.pt (), multcent, 0 );
622642 }
623643 return ;
624644 }
625645
626- void CreateRunByRunWeights (aod::BCsWithTimestamps::iterator const & bc){
627- int run = bc.runNumber ();
628- if (run == lastRun) return ;
629- lastRun = run;
646+ void CreateRunByRunWeights (){
630647 if (cfgUsePID){
631648 std::vector<GFWWeights*> weights;
632649 std::vector<std::string> species = {" ref" ," ch" ," pi" ," ka" ," pr" };
633- int nspecies = (cfgUsePID)?5 :2 ;
634- for (int i = 0 ; i < nspecies; ++i) {
650+ for (size_t i = 0 ; i < species.size (); ++i) {
635651 weights.push_back (new GFWWeights (Form (" w%i_%s" ,lastRun,species[i].c_str ())));
636652 if (i==0 ) {
637653 auto it = std::find (ptbinning.begin (),ptbinning.end (),5 .);
@@ -686,8 +702,8 @@ struct GenericFramework {
686702 return ;
687703 }
688704
689- template <datatype dt, typename TCollision, typename TracksObject >
690- void processCollision (TCollision collision, TracksObject tracks, const float & centrality, const int & field)
705+ template <datatype dt, typename TCollision, typename TTracks >
706+ void processCollision (TCollision collision, TTracks tracks, const float & centrality, const int & field)
691707 {
692708 if (tracks.size () < 1 )
693709 return ;
@@ -702,13 +718,12 @@ struct GenericFramework {
702718 for (auto & track : tracks) {
703719 ProcessTrack (track, centrality, vtxz, field);
704720 }
705- FillOutputContainers<dt>((cfgUseNch) ? tracks.size () : centrality, l_Random);
721+ if (!cfgFillWeights) FillOutputContainers<dt>((cfgUseNch) ? tracks.size () : centrality, l_Random);
706722 }
707723
708724 template <typename TTrack>
709725 inline void ProcessTrack (TTrack const & track, const float & centrality, const float & vtxz, const int & field)
710726 {
711- float weff = 1 , wacc = 1 ;
712727 if constexpr (framework::has_type_v<aod::mctracklabel::McParticleId, typename TTrack::all_columns>) {
713728 if (track.mcParticleId () < 0 || !(track.has_mcParticle ()))
714729 return ;
@@ -724,18 +739,20 @@ struct GenericFramework {
724739 if (cfgUseAdditionalTrackCut && !trackSelected (track, field))
725740 return ;
726741
727- if (cfgFillWeights)
728- FillWeights (mcParticle,vtxz,centrality,0 );
729-
730742 int pid_index = 0 ;
731743 if (cfgUsePID){
732744 if (mcParticle.pdgCode () == 211 ) pid_index = 1 ;
733745 if (mcParticle.pdgCode () == 321 ) pid_index = 2 ;
734746 if (mcParticle.pdgCode () == 2212 ) pid_index = 3 ;
735747 }
736748
737- FillPtSums<kReco >(track, vtxz);
738- FillGFW<kReco >(mcParticle, vtxz, pid_index);
749+ if (cfgFillWeights){
750+ FillWeights (mcParticle,vtxz,centrality,0 );
751+ }
752+ else {
753+ FillPtSums<kReco >(track, vtxz);
754+ FillGFW<kReco >(mcParticle, vtxz, pid_index);
755+ }
739756
740757 if (cfgFillQA)
741758 FillTrackQA<kReco ,kAfter >(track, vtxz);
@@ -756,7 +773,7 @@ struct GenericFramework {
756773 }
757774
758775 FillPtSums<kGen >(track, vtxz);
759- FillGFW<kGen >(track, vtxz, 0 );
776+ FillGFW<kGen >(track, vtxz, pid_index );
760777
761778 if (cfgFillQA)
762779 FillTrackQA<kGen ,kAfter >(track, vtxz);
@@ -774,12 +791,13 @@ struct GenericFramework {
774791 // pid_index = getBayesPIDIndex(track);
775792 pid_index = GetNsigmaPID (track);
776793 }
777- if (cfgFillWeights)
794+ if (cfgFillWeights) {
778795 FillWeights (track,vtxz,centrality,pid_index);
779-
780- FillPtSums<kReco >(track, vtxz);
781- FillGFW<kReco >(track, vtxz, pid_index);
782-
796+ }
797+ else {
798+ FillPtSums<kReco >(track, vtxz);
799+ FillGFW<kReco >(track, vtxz, pid_index);
800+ }
783801 if (cfgFillQA)
784802 FillTrackQA<kReco ,kAfter >(track, vtxz);
785803 }
@@ -830,8 +848,7 @@ struct GenericFramework {
830848 double weff = (dt == kGen )?1 .:getEfficiency (track);
831849 if (weff<0 ) return ;
832850 double wacc = (dt == kGen )?1 .:getAcceptance (track,vtxz,-1 );
833- bool WithinPtRef = (ptreflow < track.pt ()) && (track.pt () < ptrefup); // within RF pT range
834- if (WithinPtRef) fGFW ->Fill (track.eta (), fPtAxis ->FindBin (track.pt ()) - 1 , track.phi (), weff * wacc, 1 );
851+ fGFW ->Fill (track.eta (), fPtAxis ->FindBin (track.pt ()) - 1 , track.phi (), weff * wacc, 1 );
835852 }
836853 return ;
837854 }
@@ -872,6 +889,13 @@ struct GenericFramework {
872889
873890 void processData (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs>>::iterator const & collision, aod::BCsWithTimestamps const &, myTracks const & tracks)
874891 {
892+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
893+ int run = bc.runNumber ();
894+ if (run != lastRun) {
895+ lastRun = run;
896+ if (cfgFillWeights && cfgRunByRunWeights)
897+ CreateRunByRunWeights ();
898+ }
875899 registry.fill (HIST (" eventQA/eventSel" ), 0.5 );
876900 if (!collision.sel8 ())
877901 return ;
@@ -883,18 +907,15 @@ struct GenericFramework {
883907 return ;
884908 }
885909 registry.fill (HIST (" eventQA/eventSel" ), 2.5 );
886-
887910 const auto centrality = collision.centFT0C ();
888- auto bc = collision.bc_as <aod::BCsWithTimestamps>();
889- if (cfgRunByRunWeights && cfgFillWeights )
890- CreateRunByRunWeights (bc);
911+
891912 if (cfgFillQA)
892913 FillEventQA<kBefore >(collision, tracks);
893914 if (cfgUseAdditionalEventCut && !eventSelected (collision, tracks.size (), centrality))
894915 return ;
895916 if (cfgFillQA)
896917 FillEventQA<kAfter >(collision, tracks);
897- loadCorrections (bc);
918+ if (!cfgFillWeights) loadCorrections (bc);
898919 auto field = (cfgMagField == 99999 ) ? getMagneticField (bc.timestamp ()) : cfgMagField;
899920 processCollision<kReco >(collision, tracks, centrality, field);
900921
@@ -903,19 +924,28 @@ struct GenericFramework {
903924
904925 void processMCReco (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs>>::iterator const & collision, aod::BCsWithTimestamps const &, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA, aod::McTrackLabels>> const & tracks, aod::McParticles const &)
905926 {
927+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
928+ int run = bc.runNumber ();
929+ registry.fill (HIST (" eventQA/before/runNo" ),run);
930+ if (run != lastRun) {
931+ lastRun = run;
932+ if (cfgFillWeights && cfgRunByRunWeights)
933+ CreateRunByRunWeights ();
934+ }
906935 if (!collision.sel8 ())
907936 return ;
908937 const auto centrality = collision.centFT0C ();
909- auto bc = collision.bc_as <aod::BCsWithTimestamps>();
910938 if (cfgFillQA)
911939 FillEventQA<kBefore >(collision, tracks);
912940 if (cfgUseAdditionalEventCut && !eventSelected (collision, tracks.size (), centrality))
913941 return ;
914- loadCorrections (bc);
942+ if (cfgFillQA)
943+ FillEventQA<kAfter >(collision, tracks);
944+
945+ if (!cfgFillWeights) loadCorrections (bc);
915946 auto field = (cfgMagField == 99999 ) ? getMagneticField (bc.timestamp ()) : cfgMagField;
916947 processCollision<kReco >(collision, tracks, centrality, field);
917- if (cfgFillQA)
918- FillEventQA<kBefore >(collision, tracks);
948+
919949 }
920950 PROCESS_SWITCH (GenericFramework, processMCReco, " Process analysis for MC reconstructed events" , false );
921951
0 commit comments