Skip to content

Commit e68e680

Browse files
author
Emil Gorm Nielsen
committed
fill weights now runs alone exclusive to analysis
1 parent bf62ead commit e68e680

File tree

1 file changed

+71
-41
lines changed

1 file changed

+71
-41
lines changed

PWGCF/GenericFramework/Tasks/flowGenericFramework.cxx

Lines changed: 71 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)