@@ -61,6 +61,7 @@ DECLARE_SOA_COLUMN(OccupancyFt0c, occupancyFt0c, float); //! Occupancy from F
6161DECLARE_SOA_COLUMN (OccupancyIts, occupancyIts, float ); // ! Occupancy from ITS
6262DECLARE_SOA_COLUMN (CentralityFT0C, centralityFT0C, float ); // ! Centrality from FT0C
6363DECLARE_SOA_COLUMN (CentralityFT0M, centralityFT0M, float ); // ! Centrality from FT0M
64+ DECLARE_SOA_COLUMN (CandFlag, candFlag, int ); // ! Flag for MC matching
6465} // namespace pid_studies
6566
6667DECLARE_SOA_TABLE (pidV0s, " AOD" , " PIDV0S" , // ! Table with PID information
@@ -87,7 +88,8 @@ DECLARE_SOA_TABLE(pidV0s, "AOD", "PIDV0S", //! Table with PID information
8788 pid_studies::OccupancyFt0c,
8889 pid_studies::OccupancyIts,
8990 pid_studies::CentralityFT0C,
90- pid_studies::CentralityFT0M
91+ pid_studies::CentralityFT0M,
92+ pid_studies::CandFlag
9193 );
9294} // namespace o2::aod
9395
@@ -101,10 +103,6 @@ struct pidStudies {
101103 aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr>;
102104 using CollSels = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::CentFT0Ms>;
103105 using V0sMCRec = soa::Join<aod::V0Datas, aod::V0CoreMCLabels>;
104- using dauTracks = soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs, aod::DauTrackTOFPIDs>;
105- // using dauTracks = soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs>;
106-
107- // using V0sMCRec = soa::Join<aod::V0Cores, aod::V0CoreMCLabels>;
108106
109107 Configurable<float > massK0Min{" massK0Min" , 0.4 , " Minimum mass for K0" };
110108 Configurable<float > massK0Max{" massK0Max" , 0.6 , " Maximum mass for K0" };
@@ -116,113 +114,70 @@ struct pidStudies {
116114 }
117115
118116 template <bool isMc, typename Cand>
119- void fillTree (Cand const & candidate)
117+ void fillTree (Cand const & candidate, const int & flag )
120118 {
121- if constexpr (!isMc) {
122- const auto & posTrack = candidate.template posTrack_as <PIDTracks>();
123- const auto & negTrack = candidate.template negTrack_as <PIDTracks>();
124- pidV0 (
125- candidate.mK0Short (),
126- candidate.mLambda (),
127- posTrack.pt (),
128- negTrack.pt (),
129- candidate.v0radius (),
130- candidate.v0cosPA (),
131- posTrack.tofNSigmaPi (),
132- negTrack.tofNSigmaPi (),
133- posTrack.tofNSigmaKa (),
134- negTrack.tofNSigmaKa (),
135- posTrack.tofNSigmaPr (),
136- negTrack.tofNSigmaPr (),
137- posTrack.tpcNSigmaPi (),
138- negTrack.tpcNSigmaPi (),
139- posTrack.tpcNSigmaKa (),
140- negTrack.tpcNSigmaKa (),
141- posTrack.tpcNSigmaPr (),
142- negTrack.tpcNSigmaPr (),
143- candidate.alpha (),
144- candidate.qtarm (),
145- candidate.template collision_as <CollSels>().ft0cOccupancyInTimeRange (),
146- candidate.template collision_as <CollSels>().trackOccupancyInTimeRange (),
147- candidate.template collision_as <CollSels>().centFT0C (),
148- candidate.template collision_as <CollSels>().centFT0M ()
149- );
150- } else {
151- LOG (info) << " Filling MC" ;
152- const auto & posTrack = candidate.template posTrack_as <PIDTracks>();
153- const auto & negTrack = candidate.template negTrack_as <PIDTracks>();
154-
155- // auto negTrack = candidate.template negTrack_as<soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs, aod::DauTrackTOFPIDs>>();
156- // auto posTrack = candidate.template posTrack_as<soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs, aod::DauTrackTOFPIDs>>();
157-
158- pidV0 (
159- candidate.mK0Short (),
160- candidate.mLambda (),
161- posTrack.pt (),
162- negTrack.pt (),
163- candidate.v0radius (),
164- candidate.v0cosPA (),
165- posTrack.tofNSigmaPi (),
166- negTrack.tofNSigmaPi (),
167- posTrack.tofNSigmaKa (),
168- negTrack.tofNSigmaKa (),
169- posTrack.tofNSigmaPr (),
170- negTrack.tofNSigmaPr (),
171- posTrack.tpcNSigmaPi (),
172- negTrack.tpcNSigmaPi (),
173- posTrack.tpcNSigmaKa (),
174- negTrack.tpcNSigmaKa (),
175- posTrack.tpcNSigmaPr (),
176- negTrack.tpcNSigmaPr (),
177- candidate.alpha (),
178- candidate.qtarm (),
179- 0 , // candidate.template collision_as<CollSels>().ft0cOccupancyInTimeRange(),
180- 0 , // candidate.template collision_as<CollSels>().trackOccupancyInTimeRange(),
181- 0 , // candidate.template collision_as<CollSels>().centFT0C(),
182- 0 // candidate.template collision_as<CollSels>().centFT0M()
183- );
184- }
185-
186- }
119+ const auto & posTrack = candidate.template posTrack_as <PIDTracks>();
120+ const auto & negTrack = candidate.template negTrack_as <PIDTracks>();
121+ pidV0 (
122+ candidate.mK0Short (),
123+ candidate.mLambda (),
124+ posTrack.pt (),
125+ negTrack.pt (),
126+ candidate.v0radius (),
127+ candidate.v0cosPA (),
128+ posTrack.tofNSigmaPi (),
129+ negTrack.tofNSigmaPi (),
130+ posTrack.tofNSigmaKa (),
131+ negTrack.tofNSigmaKa (),
132+ posTrack.tofNSigmaPr (),
133+ negTrack.tofNSigmaPr (),
134+ posTrack.tpcNSigmaPi (),
135+ negTrack.tpcNSigmaPi (),
136+ posTrack.tpcNSigmaKa (),
137+ negTrack.tpcNSigmaKa (),
138+ posTrack.tpcNSigmaPr (),
139+ negTrack.tpcNSigmaPr (),
140+ candidate.alpha (),
141+ candidate.qtarm (),
142+ candidate.template collision_as <CollSels>().ft0cOccupancyInTimeRange (),
143+ candidate.template collision_as <CollSels>().trackOccupancyInTimeRange (),
144+ candidate.template collision_as <CollSels>().centFT0C (),
145+ candidate.template collision_as <CollSels>().centFT0M (),
146+ flag
147+ );
148+ }
187149
188150 template <typename T1>
189- bool isMatched (const T1& cand) {
190- // LOG(info) << "Checking";
191- bool matched = false ;
151+ int isMatched (const T1& cand) {
152+ int matched{0 };
192153 if constexpr (std::is_same<T1, V0sMCRec::iterator>::value) {
193154 if (!cand.has_v0MCCore ())
194- return false ;
155+ return matched ;
195156 auto v0MC = cand.template v0MCCore_as <aod::V0MCCores>();
196- if (std::abs (v0MC.pdgCode ()) == 3122 && (abs (v0MC.pdgCodeNegative ()) == 211 )
197- && (abs (v0MC.pdgCodePositive ()) == 2212 )) {
198- LOG (info) << " Lambda matched" ;
199- matched = true ;
157+ int sign = 1 ;
158+ if (v0MC.pdgCode () < 0 ) sign=-1 ;
159+ if (v0MC.pdgCode () == sign*3122 && v0MC.pdgCodeNegative () == -sign*211
160+ && v0MC.pdgCodePositive () == sign*2212 ) {
161+ matched = sign*1 ;
200162 }
201- if (std::abs (v0MC.pdgCode ()) == 310 && (abs (v0MC.pdgCodeNegative ()) == 211 )
202- && (abs (v0MC.pdgCodePositive ()) == 211 )) {
203- LOG (info) << " K0S matched" ;
204- matched = true ;
163+ if (v0MC.pdgCode () == sign*310 && v0MC.pdgCodeNegative () == -sign*211
164+ && v0MC.pdgCodePositive () == sign*211 ) {
165+ matched = sign*2 ;
205166 }
206167 }
207168 return matched;
208169 }
209170
210- void processMC (V0sMCRec const & V0s, aod::V0MCCores const & V0sMC, PIDTracks const &)
171+ void processMC (V0sMCRec const & V0s, aod::V0MCCores const & V0sMC, CollSels const &, PIDTracks const &)
211172 {
212- // LOG(info) << "Processing MC";
213- // LOG(info) << "Size: " << V0s.size();
214173 for (const auto & v0 : V0s) {
215174 if (v0.mK0Short () > massK0Min && v0.mK0Short () < massK0Max ||
216175 v0.mLambda () > massLambdaMin && v0.mLambda () < massLambdaMax ||
217176 v0.mAntiLambda () > massLambdaMin && v0.mAntiLambda () < massLambdaMax) {
218- // LOG(info) << "mass sel ok";
219- // bool matched = isMatched(v0);
220- // LOG(info) << "---------";
221- if (isMatched (v0)) {
222- fillTree<true >(v0);
223- } else {
224- LOG (info) << " v0 not matched" ;
225- }
177+ int matched = isMatched (v0);
178+ if (matched != 0 ) {
179+ fillTree<true >(v0, matched);
180+ }
226181 }
227182 }
228183 }
@@ -234,7 +189,7 @@ struct pidStudies {
234189 if (v0.mK0Short () > massK0Min && v0.mK0Short () < massK0Max ||
235190 v0.mLambda () > massLambdaMin && v0.mLambda () < massLambdaMax ||
236191 v0.mAntiLambda () > massLambdaMin && v0.mAntiLambda () < massLambdaMax) {
237- fillTree<false >(v0);
192+ fillTree<false >(v0, 0 );
238193 }
239194 }
240195 }
0 commit comments