1717#include " Common/DataModel/EventSelection.h"
1818
1919#include < Framework/AnalysisDataModel.h>
20- #include < Framework/AnalysisHelpers.h>
2120#include < Framework/AnalysisTask.h>
2221#include < Framework/Configurable.h>
2322#include < Framework/HistogramRegistry.h>
2423#include < Framework/HistogramSpec.h>
2524#include < Framework/InitContext.h>
2625#include < Framework/runDataProcessing.h>
2726
27+ #include < TH1.h>
28+
2829#include < string>
2930
3031using namespace o2 ;
3132using namespace o2 ::soa;
3233using namespace o2 ::framework;
3334using namespace o2 ::framework::expressions;
34- using namespace o2 ::constants::physics;
3535
3636struct testPV {
3737
@@ -99,12 +99,14 @@ struct testPV {
9999 fRegistry .add (" Vertex/hSigmaY" , " vertex #sigma_{Y} vs. N_{contrib};N_{contrib};#sigma_{Y} (#mum)" , kTH2F , {{101 , -0.5 , 100.5 }, {1000 , 0 , 100 }}, false );
100100 fRegistry .add (" Vertex/hSigmaZ" , " vertex #sigma_{Z} vs. N_{contrib};N_{contrib};#sigma_{Z} (#mum)" , kTH2F , {{101 , -0.5 , 100.5 }, {1000 , 0 , 100 }}, false );
101101
102- fRegistry .add (" Vertex/hDeltaX" , " vertex #DeltaX vs. N_{contrib};N_{contrib};#DeltaX = (X_{rec} #minus X_{gen})/#sigma_{X}" , kTH2F , {{101 , -0.5 , 100.5 }, {200 , -10 , 10 }}, false );
103- fRegistry .add (" Vertex/hDeltaY" , " vertex #DeltaY vs. N_{contrib};N_{contrib};#DeltaY = (Y_{rec} #minus Y_{gen})/#sigma_{Y}" , kTH2F , {{101 , -0.5 , 100.5 }, {200 , -10 , 10 }}, false );
104- fRegistry .add (" Vertex/hDeltaZ" , " vertex #DeltaZ vs. N_{contrib};N_{contrib};#DeltaZ = (Z_{rec} #minus Z_{gen})/#sigma_{Z}" , kTH2F , {{101 , -0.5 , 100.5 }, {200 , -10 , 10 }}, false );
105-
106102 fRegistry .add (" Vertex/hCollisionTime" , " vertex time;N_{contrib};collision time (ns)" , kTH2F , {{101 , -0.5 , 100.5 }, {500 , -25 , 25 }}, false );
107103 fRegistry .add (" Vertex/hCollisionTimeRes" , " vertex time resolution;N_{contrib};collision time resolution (ns)" , kTH2F , {{101 , -0.5 , 100.5 }, {250 , 0 , 25 }}, false );
104+
105+ if (doprocessMC) {
106+ fRegistry .add (" Vertex/hDeltaX" , " vertex #DeltaX vs. N_{contrib};N_{contrib};#DeltaX = (X_{rec} #minus X_{gen})/#sigma_{X}" , kTH2F , {{101 , -0.5 , 100.5 }, {200 , -10 , 10 }}, false );
107+ fRegistry .add (" Vertex/hDeltaY" , " vertex #DeltaY vs. N_{contrib};N_{contrib};#DeltaY = (Y_{rec} #minus Y_{gen})/#sigma_{Y}" , kTH2F , {{101 , -0.5 , 100.5 }, {200 , -10 , 10 }}, false );
108+ fRegistry .add (" Vertex/hDeltaZ" , " vertex #DeltaZ vs. N_{contrib};N_{contrib};#DeltaZ = (Z_{rec} #minus Z_{gen})/#sigma_{Z}" , kTH2F , {{101 , -0.5 , 100.5 }, {200 , -10 , 10 }}, false );
109+ }
108110 }
109111
110112 template <typename TCollision>
@@ -137,8 +139,8 @@ struct testPV {
137139 return true ;
138140 }
139141
140- template <typename TCollision, typename TMCCollision >
141- void fillVertexHistograms (TCollision const & collision, TMCCollision const & mcCollision )
142+ template <typename TCollision>
143+ void fillVertexHistograms (TCollision const & collision)
142144 {
143145 fRegistry .fill (HIST (" Vertex/hZvtx" ), collision.posZ ());
144146 fRegistry .fill (HIST (" Vertex/hNContrib" ), collision.numContrib ());
@@ -149,37 +151,41 @@ struct testPV {
149151 fRegistry .fill (HIST (" Vertex/hSigmaY" ), collision.numContrib (), std::sqrt (collision.covYY ()) * 1e+4 ); // convert cm to um
150152 fRegistry .fill (HIST (" Vertex/hSigmaZ" ), collision.numContrib (), std::sqrt (collision.covZZ ()) * 1e+4 ); // convert cm to um
151153
152- fRegistry .fill (HIST (" Vertex/hDeltaX" ), collision.numContrib (), (collision.posX () - mcCollision.posX ()) / std::sqrt (collision.covXX ()));
153- fRegistry .fill (HIST (" Vertex/hDeltaY" ), collision.numContrib (), (collision.posY () - mcCollision.posY ()) / std::sqrt (collision.covYY ()));
154- fRegistry .fill (HIST (" Vertex/hDeltaZ" ), collision.numContrib (), (collision.posZ () - mcCollision.posZ ()) / std::sqrt (collision.covZZ ()));
155-
156154 fRegistry .fill (HIST (" Vertex/hCollisionTime" ), collision.numContrib (), collision.collisionTime ());
157155 fRegistry .fill (HIST (" Vertex/hCollisionTimeRes" ), collision.numContrib (), collision.collisionTimeRes ());
158156 }
159157
160- template <typename TBCs, typename TCollisions, typename TMCCollisions, typename TMCParticles>
158+ template <bool isMC, typename TBCs, typename TCollisions, typename TMCCollisions, typename TMCParticles>
161159 void run (TBCs const &, TCollisions const & collisions, TMCCollisions const &, TMCParticles const &)
162160 {
163161 for (const auto & collision : collisions) {
164- if (!collision.has_mcCollision ()) {
165- continue ;
166- }
167162 auto bc = collision.template bc_as <TBCs>();
168163 initCCDB (bc);
169164
170- auto mcCollision = collision.template mcCollision_as <aod::McCollisions>();
171- if (eventCut.cfgEventGeneratorId > -1 && mcCollision.getSubGeneratorId () != eventCut.cfgEventGeneratorId ) {
172- continue ;
165+ if constexpr (isMC) {
166+ if (!collision.has_mcCollision ()) {
167+ continue ;
168+ }
169+ auto mcCollision = collision.template mcCollision_as <TMCCollisions>();
170+ if (eventCut.cfgEventGeneratorId > -1 && mcCollision.getSubGeneratorId () != eventCut.cfgEventGeneratorId ) {
171+ continue ;
172+ }
173173 }
174174
175175 fRegistry .fill (HIST (" hCollisionCounter" ), 1 );
176176
177177 if (!isSelectedCollision (collision)) {
178178 continue ;
179179 }
180- fRegistry .fill (HIST (" hCollisionCounter" ), 2 );
181180
182- fillVertexHistograms (collision, mcCollision);
181+ fRegistry .fill (HIST (" hCollisionCounter" ), 2 );
182+ fillVertexHistograms (collision);
183+ if constexpr (isMC) {
184+ auto mcCollision = collision.template mcCollision_as <TMCCollisions>();
185+ fRegistry .fill (HIST (" Vertex/hDeltaX" ), collision.numContrib (), (collision.posX () - mcCollision.posX ()) / std::sqrt (collision.covXX ()));
186+ fRegistry .fill (HIST (" Vertex/hDeltaY" ), collision.numContrib (), (collision.posY () - mcCollision.posY ()) / std::sqrt (collision.covYY ()));
187+ fRegistry .fill (HIST (" Vertex/hDeltaZ" ), collision.numContrib (), (collision.posZ () - mcCollision.posZ ()) / std::sqrt (collision.covZZ ()));
188+ }
183189
184190 } // end of collision loop
185191 }
@@ -190,11 +196,17 @@ struct testPV {
190196 Filter collisionFilter_evsel = eventCut.cfgZvtxMin < o2::aod::collision::posZ && o2::aod::collision::posZ < eventCut.cfgZvtxMax;
191197 using FilteredMyCollisions = soa::Filtered<MyCollisions>;
192198
199+ void processData (FilteredMyCollisions const & collisions, MyBCs const & bcs)
200+ {
201+ run<false >(bcs, collisions, nullptr , nullptr );
202+ }
203+ PROCESS_SWITCH (testPV, processData, " processData" , true );
204+
193205 void processMC (FilteredMyCollisions const & collisions, MyBCs const & bcs, aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
194206 {
195- run (bcs, collisions, mcCollisions, mcParticles);
207+ run< true > (bcs, collisions, mcCollisions, mcParticles);
196208 }
197- PROCESS_SWITCH (testPV, processMC, " processMC" , true );
209+ PROCESS_SWITCH (testPV, processMC, " processMC" , false );
198210
199211 void processDummy (MyCollisions const &) {}
200212 PROCESS_SWITCH (testPV, processDummy, " processDummy" , false );
0 commit comments