2525#include < Framework/InitContext.h>
2626#include < Framework/runDataProcessing.h>
2727
28+ #include < TH1.h>
29+
2830#include < string>
2931
3032using namespace o2 ;
3133using namespace o2 ::soa;
3234using namespace o2 ::framework;
3335using namespace o2 ::framework::expressions;
34- using namespace o2 ::constants::physics;
3536
3637struct testPV {
3738
@@ -99,12 +100,14 @@ struct testPV {
99100 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 );
100101 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 );
101102
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-
106103 fRegistry .add (" Vertex/hCollisionTime" , " vertex time;N_{contrib};collision time (ns)" , kTH2F , {{101 , -0.5 , 100.5 }, {500 , -25 , 25 }}, false );
107104 fRegistry .add (" Vertex/hCollisionTimeRes" , " vertex time resolution;N_{contrib};collision time resolution (ns)" , kTH2F , {{101 , -0.5 , 100.5 }, {250 , 0 , 25 }}, false );
105+
106+ if (doprocessMC) {
107+ 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 );
108+ 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 );
109+ 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 );
110+ }
108111 }
109112
110113 template <typename TCollision>
@@ -137,8 +140,8 @@ struct testPV {
137140 return true ;
138141 }
139142
140- template <typename TCollision, typename TMCCollision >
141- void fillVertexHistograms (TCollision const & collision, TMCCollision const & mcCollision )
143+ template <typename TCollision>
144+ void fillVertexHistograms (TCollision const & collision)
142145 {
143146 fRegistry .fill (HIST (" Vertex/hZvtx" ), collision.posZ ());
144147 fRegistry .fill (HIST (" Vertex/hNContrib" ), collision.numContrib ());
@@ -149,37 +152,41 @@ struct testPV {
149152 fRegistry .fill (HIST (" Vertex/hSigmaY" ), collision.numContrib (), std::sqrt (collision.covYY ()) * 1e+4 ); // convert cm to um
150153 fRegistry .fill (HIST (" Vertex/hSigmaZ" ), collision.numContrib (), std::sqrt (collision.covZZ ()) * 1e+4 ); // convert cm to um
151154
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-
156155 fRegistry .fill (HIST (" Vertex/hCollisionTime" ), collision.numContrib (), collision.collisionTime ());
157156 fRegistry .fill (HIST (" Vertex/hCollisionTimeRes" ), collision.numContrib (), collision.collisionTimeRes ());
158157 }
159158
160- template <typename TBCs, typename TCollisions, typename TMCCollisions, typename TMCParticles>
159+ template <bool isMC, typename TBCs, typename TCollisions, typename TMCCollisions, typename TMCParticles>
161160 void run (TBCs const &, TCollisions const & collisions, TMCCollisions const &, TMCParticles const &)
162161 {
163162 for (const auto & collision : collisions) {
164- if (!collision.has_mcCollision ()) {
165- continue ;
166- }
167163 auto bc = collision.template bc_as <TBCs>();
168164 initCCDB (bc);
169165
170- auto mcCollision = collision.template mcCollision_as <aod::McCollisions>();
171- if (eventCut.cfgEventGeneratorId > -1 && mcCollision.getSubGeneratorId () != eventCut.cfgEventGeneratorId ) {
172- continue ;
166+ if constexpr (isMC) {
167+ if (!collision.has_mcCollision ()) {
168+ continue ;
169+ }
170+ auto mcCollision = collision.template mcCollision_as <TMCCollisions>();
171+ if (eventCut.cfgEventGeneratorId > -1 && mcCollision.getSubGeneratorId () != eventCut.cfgEventGeneratorId ) {
172+ continue ;
173+ }
173174 }
174175
175176 fRegistry .fill (HIST (" hCollisionCounter" ), 1 );
176177
177178 if (!isSelectedCollision (collision)) {
178179 continue ;
179180 }
180- fRegistry .fill (HIST (" hCollisionCounter" ), 2 );
181181
182- fillVertexHistograms (collision, mcCollision);
182+ fRegistry .fill (HIST (" hCollisionCounter" ), 2 );
183+ fillVertexHistograms (collision);
184+ if constexpr (isMC) {
185+ auto mcCollision = collision.template mcCollision_as <TMCCollisions>();
186+ fRegistry .fill (HIST (" Vertex/hDeltaX" ), collision.numContrib (), (collision.posX () - mcCollision.posX ()) / std::sqrt (collision.covXX ()));
187+ fRegistry .fill (HIST (" Vertex/hDeltaY" ), collision.numContrib (), (collision.posY () - mcCollision.posY ()) / std::sqrt (collision.covYY ()));
188+ fRegistry .fill (HIST (" Vertex/hDeltaZ" ), collision.numContrib (), (collision.posZ () - mcCollision.posZ ()) / std::sqrt (collision.covZZ ()));
189+ }
183190
184191 } // end of collision loop
185192 }
@@ -190,11 +197,17 @@ struct testPV {
190197 Filter collisionFilter_evsel = eventCut.cfgZvtxMin < o2::aod::collision::posZ && o2::aod::collision::posZ < eventCut.cfgZvtxMax;
191198 using FilteredMyCollisions = soa::Filtered<MyCollisions>;
192199
200+ void processData (FilteredMyCollisions const & collisions, MyBCs const & bcs)
201+ {
202+ run<false >(bcs, collisions, nullptr , nullptr );
203+ }
204+ PROCESS_SWITCH (testPV, processData, " processData" , true );
205+
193206 void processMC (FilteredMyCollisions const & collisions, MyBCs const & bcs, aod::McCollisions const & mcCollisions, aod::McParticles const & mcParticles)
194207 {
195- run (bcs, collisions, mcCollisions, mcParticles);
208+ run< true > (bcs, collisions, mcCollisions, mcParticles);
196209 }
197- PROCESS_SWITCH (testPV, processMC, " processMC" , true );
210+ PROCESS_SWITCH (testPV, processMC, " processMC" , false );
198211
199212 void processDummy (MyCollisions const &) {}
200213 PROCESS_SWITCH (testPV, processDummy, " processDummy" , false );
0 commit comments