1111
1212// / \file netchargeFluctuations.cxx
1313// / \brief Calculate net-charge fluctuations using nu_dyn observable
14+ // / \brief Calculate nu_dyn fluctuations
1415// / For charged particles
1516// / For RUN-3
1617// /
1718// / \author Nida Malik <nida.malik@cern.ch>
1819#include " PWGCF/Core/CorrelationContainer.h"
1920#include " PWGCF/Core/PairCuts.h"
21+ #include < vector> // Include for std::vector
2022
2123#include " Common/CCDB/EventSelectionParams.h"
2224#include " Common/CCDB/TriggerAliases.h"
2729#include " Common/DataModel/FT0Corrected.h"
2830#include " Common/DataModel/Multiplicity.h"
2931#include " Common/DataModel/PIDResponse.h"
32+ #include " Common/Core/trackUtilities.h"
33+ #include " Common/CCDB/EventSelectionParams.h"
34+ #include " Common/Core/TrackSelection.h"
3035#include " Common/DataModel/TrackSelectionTables.h"
36+ #include " Common/DataModel/Centrality.h"
37+ #include " CommonConstants/MathConstants.h"
38+ #include " Common/DataModel/FT0Corrected.h"
39+ #include " Framework/AnalysisDataModel.h"
40+ #include " Framework/ASoAHelpers.h"
41+ #include " Framework/RunningWorkflowInfo.h"
42+ #include " PWGCF/Core/CorrelationContainer.h"
43+ #include " PWGCF/Core/PairCuts.h"
44+ #include " Common/CCDB/TriggerAliases.h"
45+ #include " Framework/HistogramRegistry.h"
46+ #include " Framework/O2DatabasePDGPlugin.h"
47+ #include " CommonConstants/PhysicsConstants.h"
48+ #include " TProfile.h"
49+ #include " TProfile2D.h"
50+ #include " TRandom3.h"
3151
3252#include " CCDB/BasicCCDBManager.h"
3353#include " CommonConstants/MathConstants.h"
@@ -57,6 +77,56 @@ namespace o2
5777{
5878namespace aod
5979{
80+
81+ namespace o2
82+ {
83+ namespace aod
84+ {
85+ namespace net_charge
86+ {
87+ DECLARE_SOA_COLUMN (PosCharge, posCharge, float );
88+ DECLARE_SOA_COLUMN (NegCharge, negCharge, float );
89+ DECLARE_SOA_COLUMN (PosSqCharge, posSqCharge, float );
90+ DECLARE_SOA_COLUMN (NegSqCharge, negSqCharge, float );
91+ DECLARE_SOA_COLUMN (TermPCharge, termPCharge, float );
92+ DECLARE_SOA_COLUMN (TermNCharge, termNCharge, float );
93+ DECLARE_SOA_COLUMN (PosNegCharge, posNegCharge, float );
94+ DECLARE_SOA_COLUMN (Centrality, centrality, float );
95+ } // namespace net_charge
96+
97+ namespace net_charge_gen
98+ {
99+ DECLARE_SOA_COLUMN (PosCharge, posCharge, float );
100+ DECLARE_SOA_COLUMN (NegCharge, negCharge, float );
101+ DECLARE_SOA_COLUMN (PosSqCharge, posSqCharge, float );
102+ DECLARE_SOA_COLUMN (NegSqCharge, negSqCharge, float );
103+ DECLARE_SOA_COLUMN (TermPCharge, termPCharge, float );
104+ DECLARE_SOA_COLUMN (TermNCharge, termNCharge, float );
105+ DECLARE_SOA_COLUMN (PosNegCharge, posNegCharge, float );
106+ DECLARE_SOA_COLUMN (Centrality, centrality, float );
107+ } // namespace net_charge_gen
108+
109+ DECLARE_SOA_TABLE (NetCharge, " AOD" , " NETChargefluct" ,
110+ net_charge::PosCharge,
111+ net_charge::NegCharge,
112+ net_charge::PosSqCharge,
113+ net_charge::NegSqCharge,
114+ net_charge::TermPCharge,
115+ net_charge::TermNCharge,
116+ net_charge::PosNegCharge,
117+ net_charge::Centrality);
118+
119+ DECLARE_SOA_TABLE (NetChargeGen, " AOD" , " NETfluctGen" ,
120+ net_charge_gen::PosCharge,
121+ net_charge_gen::NegCharge,
122+ net_charge_gen::PosSqCharge,
123+ net_charge_gen::NegSqCharge,
124+ net_charge_gen::TermPCharge,
125+ net_charge_gen::TermNCharge,
126+ net_charge_gen::PosNegCharge,
127+ net_charge_gen::Centrality);
128+
129+ >>>>>>> c0cbe833a9419db4408ba58cca2d558f964ffe8c
60130using MyCollisionsRun2 = soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms, aod::Mults>;
61131using MyCollisionRun2 = MyCollisionsRun2::iterator;
62132using MyCollisionsRun3 = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs, aod::Mults>;
@@ -81,6 +151,7 @@ enum RunType {
81151};
82152
83153struct NetchargeFluctuations {
154+ <<<<<<< HEAD
84155 Service<o2::framework::O2DatabasePDG> pdgService;
85156 Service<o2::ccdb::BasicCCDBManager> ccdb;
86157 TRandom3* fRndm = new TRandom3(0 );
@@ -94,13 +165,25 @@ struct NetchargeFluctuations {
94165
95166 Configurable<float > vertexZcut{" vertexZcut" , 10 .f , " Vertex Z" };
96167 Configurable<float > etaCut{" etaCut" , 0 .8f , " Eta cut" };
168+ =======
169+ Produces<aod::NetCharge> netCharge;
170+ Produces<aod::NetChargeGen> netChargeGen;
171+ Service<o2::framework::O2DatabasePDG> pdgService;
172+
173+ HistogramRegistry histogramRegistry{" Histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
174+
175+ // Configurables
176+ Configurable<float > vertexZcut{" vertexZcut" , 10 .f , " Vertex Z" };
177+ Configurable<float > etaCut{" etaCut" , 0.8 , " Eta cut" };
178+ >>>>>>> c0cbe833a9419db4408ba58cca2d558f964ffe8c
97179 Configurable<float > ptMinCut{" ptMinCut" , 0.2 , " Pt min cut" };
98180 Configurable<float > ptMaxCut{" ptMaxCut" , 5.0 , " Pt max cut" };
99181 Configurable<float > dcaXYCut{" dcaXYCut" , 0.12 , " DCA XY cut" };
100182 Configurable<float > dcaZCut{" dcaZCut" , 0.3 , " DCA Z cut" };
101183 Configurable<int > tpcCrossCut{" tpcCrossCut" , 70 , " TPC crossrows cut" };
102184 Configurable<int > itsChiCut{" itsChiCut" , 70 , " ITS chi2 cluster cut" };
103185 Configurable<int > tpcChiCut{" tpcChiCut" , 70 , " TPC chi2 cluster cut" };
186+ <<<<<<< HEAD
104187 Configurable<float > centMin{" centMin" , 0 .0f , " cenrality min for delta eta" };
105188 Configurable<float > centMax{" centMax" , 10 .0f , " cenrality max for delta eta" };
106189 Configurable<int > cfgNSubsample{" cfgNSubsample" , 30 , " Number of subsamples for Error" };
@@ -843,7 +926,6 @@ struct NetchargeFluctuations {
843926
844927 calculationDeltaEta<kRun2 >(coll, tracks, etaMin, etaMax);
845928 }
846- }
847929
848930 PROCESS_SWITCH (NetchargeFluctuations, processDataRun2, " Process for Run2 DATA" , false );
849931
@@ -862,6 +944,13 @@ struct NetchargeFluctuations {
862944 PROCESS_SWITCH (NetchargeFluctuations, processMcRun3, " Process reconstructed" , true );
863945
864946 // process function for MC Run2
947+ void processMcRun3 (aod::MyMCCollisionRun3 const & coll, aod::MyMCTracks const & inputTracks,
948+ aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
949+ {
950+ histosMcRecoGen<kRun3 >(coll, inputTracks, mcCollisions, mcParticles);
951+ }
952+
953+ PROCESS_SWITCH (NetchargeFluctuations, processMcRun3, " Process reconstructed" , true );
865954
866955 void processMcRun2 (aod::MyMCCollisionRun2 const & coll, aod::MyMCTracks const & inputTracks,
867956 aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
@@ -882,4 +971,117 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
882971{
883972 return WorkflowSpec{
884973 {adaptAnalysisTask<NetchargeFluctuations>(cfgc)}};
974+ histosMcRecoGen<kRun2 >(coll, inputTracks, mcCollisions, mcParticles);
975+ }
976+
977+ PROCESS_SWITCH (NetchargeFluctuations, processMcRun2, " Process reconstructed" , false );
978+
979+ }; // struct
980+
981+ struct NetchargeAnalysis {
982+ Configurable<int > cfSubSample{" cfSubSample" , 30 , " Number of subsamples" };
983+ HistogramRegistry registry{" registry" , {}, OutputObjHandlingPolicy::AnalysisObject};
984+ std::vector<std::vector<std::shared_ptr<TProfile>>> net;
985+ std::vector<std::vector<std::shared_ptr<TProfile>>> subSample;
986+ std::vector<std::vector<std::shared_ptr<TProfile>>> genSubSample;
987+ TRandom3* fRndm = new TRandom3(0 );
988+
989+ void init (o2::framework::InitContext&)
990+ {
991+ std::vector<double > centBinning = {0 , 5 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100 };
992+ AxisSpec centAxis = {centBinning, " centrality" };
993+
994+ registry.add (" data/pos_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
995+ registry.add (" data/neg_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
996+ registry.add (" data/termp_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
997+ registry.add (" data/termn_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
998+ registry.add (" data/pos_sq_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
999+ registry.add (" data/neg_sq_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1000+ registry.add (" data/posneg_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1001+
1002+ registry.add (" gen/pos_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1003+ registry.add (" gen/neg_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1004+ registry.add (" gen/termp_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1005+ registry.add (" gen/termn_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1006+ registry.add (" gen/pos_sq_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1007+ registry.add (" gen/neg_sq_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1008+ registry.add (" gen/posneg_vs_cent" , " " , {HistType::kTProfile , {centAxis}});
1009+
1010+ subSample.resize (cfSubSample);
1011+ genSubSample.resize (cfSubSample);
1012+
1013+ for (int i = 0 ; i < cfSubSample; ++i) {
1014+ subSample[i].resize (7 );
1015+ genSubSample[i].resize (7 );
1016+
1017+ subSample[i][0 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" data/subSample_%d/pos_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1018+ subSample[i][1 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" data/subSample_%d/neg_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1019+ subSample[i][2 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" data/subSample_%d/termp_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1020+ subSample[i][3 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" data/subSample_%d/termn_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1021+ subSample[i][4 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" data/subSample_%d/pos_sq_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1022+ subSample[i][5 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" data/subSample_%d/neg_sq_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1023+ subSample[i][6 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" data/subSample_%d/posneg_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1024+
1025+ genSubSample[i][0 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" gen/genSubSample_%d/pos_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1026+ genSubSample[i][1 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" gen/genSubSample_%d/neg_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1027+ genSubSample[i][2 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" gen/genSubSample_%d/termp_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1028+ genSubSample[i][3 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" gen/genSubSample_%d/termn_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1029+ genSubSample[i][4 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" gen/genSubSample_%d/pos_sq_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1030+ genSubSample[i][5 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" gen/genSubSample_%d/neg_sq_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1031+ genSubSample[i][6 ] = std::get<std::shared_ptr<TProfile>>(registry.add (Form (" gen/genSubSample_%d/posneg_vs_cent" , i), " " , {HistType::kTProfile , {centAxis}}));
1032+ }
1033+
1034+ } // void
1035+
1036+ void processData (aod::NetCharge::iterator const & event_netcharge)
1037+ {
1038+ registry.get <TProfile>(HIST (" data/pos_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.posCharge ());
1039+ registry.get <TProfile>(HIST (" data/neg_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.negCharge ());
1040+ registry.get <TProfile>(HIST (" data/termp_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.termPCharge ());
1041+ registry.get <TProfile>(HIST (" data/termn_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.termNCharge ());
1042+ registry.get <TProfile>(HIST (" data/pos_sq_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.posSqCharge ());
1043+ registry.get <TProfile>(HIST (" data/neg_sq_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.negSqCharge ());
1044+ registry.get <TProfile>(HIST (" data/posneg_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.posNegCharge ());
1045+
1046+ int sampleIndex = static_cast <int >(cfSubSample * fRndm ->Rndm ());
1047+ subSample[sampleIndex][0 ]->Fill (event_netcharge.centrality (), event_netcharge.posCharge ());
1048+ subSample[sampleIndex][1 ]->Fill (event_netcharge.centrality (), event_netcharge.negCharge ());
1049+ subSample[sampleIndex][2 ]->Fill (event_netcharge.centrality (), event_netcharge.termPCharge ());
1050+ subSample[sampleIndex][3 ]->Fill (event_netcharge.centrality (), event_netcharge.termNCharge ());
1051+ subSample[sampleIndex][4 ]->Fill (event_netcharge.centrality (), event_netcharge.posSqCharge ());
1052+ subSample[sampleIndex][5 ]->Fill (event_netcharge.centrality (), event_netcharge.negSqCharge ());
1053+ subSample[sampleIndex][6 ]->Fill (event_netcharge.centrality (), event_netcharge.posNegCharge ());
1054+ } // void
1055+ PROCESS_SWITCH (NetchargeAnalysis, processData, " Process reconstructed and Data" , true );
1056+
1057+ void processGen (aod::NetChargeGen::iterator const & event_netcharge)
1058+ {
1059+ registry.get <TProfile>(HIST (" gen/pos_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.posCharge ());
1060+ registry.get <TProfile>(HIST (" gen/neg_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.negCharge ());
1061+ registry.get <TProfile>(HIST (" gen/termp_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.termPCharge ());
1062+ registry.get <TProfile>(HIST (" gen/termn_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.termNCharge ());
1063+ registry.get <TProfile>(HIST (" gen/pos_sq_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.posSqCharge ());
1064+ registry.get <TProfile>(HIST (" gen/neg_sq_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.negSqCharge ());
1065+ registry.get <TProfile>(HIST (" gen/posneg_vs_cent" ))->Fill (event_netcharge.centrality (), event_netcharge.posNegCharge ());
1066+
1067+ int sampleIndex = static_cast <int >(cfSubSample * fRndm ->Rndm ());
1068+ genSubSample[sampleIndex][0 ]->Fill (event_netcharge.centrality (), event_netcharge.posCharge ());
1069+ genSubSample[sampleIndex][1 ]->Fill (event_netcharge.centrality (), event_netcharge.negCharge ());
1070+ genSubSample[sampleIndex][2 ]->Fill (event_netcharge.centrality (), event_netcharge.termPCharge ());
1071+ genSubSample[sampleIndex][3 ]->Fill (event_netcharge.centrality (), event_netcharge.termNCharge ());
1072+ genSubSample[sampleIndex][4 ]->Fill (event_netcharge.centrality (), event_netcharge.posSqCharge ());
1073+ genSubSample[sampleIndex][5 ]->Fill (event_netcharge.centrality (), event_netcharge.negSqCharge ());
1074+ genSubSample[sampleIndex][6 ]->Fill (event_netcharge.centrality (), event_netcharge.posNegCharge ());
1075+ } // void
1076+ PROCESS_SWITCH (NetchargeAnalysis, processGen, " Process generated" , true );
1077+
1078+ }; // struct Netcharge_analysis
1079+
1080+ WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
1081+ {
1082+ return WorkflowSpec{
1083+ {adaptAnalysisTask<NetchargeFluctuations>(cfgc)},
1084+ {adaptAnalysisTask<NetchargeAnalysis>(cfgc)}
1085+
1086+ };
8851087}
0 commit comments