@@ -84,7 +84,7 @@ struct Alice3TrackingTranslator {
8484 FileStruct (std::string filename, std::string treename) : mFile (filename.c_str(), " READ" )
8585 {
8686 if (mFile .IsZombie ()) {
87- LOG (fatal) << " Could not open file " << filename;
87+ LOG (fatal) << " Could not open file ' " << filename << " ' " ;
8888 }
8989 mFile .GetObject (treename.c_str (), mTree );
9090 if (mTree ) {
@@ -164,6 +164,7 @@ struct Alice3TrackingTranslator {
164164 SETADDRESS (" t_phi" , m_t_phi);
165165 SETADDRESS (" t_pT" , m_t_pT);
166166 SETADDRESS (" t_eta" , m_t_eta);
167+ SETADDRESS (" majorityParticlePDG" , m_majorityParticlePDG);
167168 }
168169 // Define track-related members here
169170 UInt_t* m_event_nr = nullptr ;
@@ -195,6 +196,8 @@ struct Alice3TrackingTranslator {
195196 std::vector<float >* m_t_phi = nullptr ; // / Initial momenta phi of majority particle
196197 std::vector<float >* m_t_pT = nullptr ; // / Initial momenta pT of majority particle
197198 std::vector<float >* m_t_eta = nullptr ; // / Initial momenta eta of majority particle
199+
200+ std::vector<int >* m_majorityParticlePDG = nullptr ; // IA
198201 };
199202
200203 struct HitsStruct : public FileStruct {
@@ -211,19 +214,24 @@ struct Alice3TrackingTranslator {
211214 LOG (info) << " Alice3TrackingTranslator process called" ;
212215 // Find all ROOT files in the folder
213216 std::vector<std::string> rootFiles;
217+ LOG (info) << " Reading input files from path: " << inputPath.Data ();
214218 TSystemDirectory dir (inputPath.Data (), inputPath.Data ());
215219 TList* filesList = dir.GetListOfFiles ();
216220 if (filesList) {
217221 TIter next (filesList);
218222 TSystemFile* file;
219223 while ((file = static_cast <TSystemFile*>(next ()))) {
220224 TString fname = file->GetName ();
225+ LOG (debug) << " Found file: " << fname.Data ();
221226 if (!file->IsDirectory () && fname.EndsWith (" .root" )) {
222227 TString fullPath = TString::Format (" %s/%s" , inputPath.Data (), fname.Data ());
228+ LOG (info) << " Adding file: " << fullPath.Data ();
223229 rootFiles.push_back (fullPath.Data ());
224230 }
225231 }
226232 delete filesList;
233+ } else {
234+ LOG (fatal) << " Could not open directory: " << inputPath.Data ();
227235 }
228236 // Open all found ROOT files
229237 std::map<std::string, std::string> files;
@@ -239,7 +247,7 @@ struct Alice3TrackingTranslator {
239247 // Now open the files to translate and read the trees
240248 ParticleStruct fileParticles (files[" particles_simulation.root" ], " particles" );
241249 // FileStruct fileVertices(files["performance_vertexing.root"], "vertexing");
242- TrackStruct fileTracksummary (files[" tracksummary_ckf .root" ], " tracksummary" );
250+ TrackStruct fileTracksummary (files[" tracksummary_ambi .root" ], " tracksummary" );
243251 // HitsStruct fileHits(files["hits.root"], "hits");
244252
245253 const Long64_t kEvents = fileParticles.getEntries ();
@@ -281,41 +289,18 @@ struct Alice3TrackingTranslator {
281289 // Fill MC particles
282290 int mothers[2 ] = {-1 , -1 };
283291 int daughters[2 ] = {-1 , -1 };
284- const size_t nParticlesGen = fileParticles.m_vx ->size ();
285- for (size_t iParticle = 0 ; iParticle < nParticlesGen; ++iParticle) {
286- continue ;
287- if (iParticle == 0 ) {
288- tableMcCollisions (0 , // mccollision::BCId,
289- 0 , // mccollision::GeneratorsID,
290- fileParticles.m_vx ->at (iParticle), // mccollision::PosX,
291- fileParticles.m_vy ->at (iParticle), // mccollision::PosY,
292- fileParticles.m_vz ->at (iParticle), // mccollision::PosZ
293- fileParticles.m_vt ->at (iParticle), // mccollision::T
294- 1 .0f , // mccollision::Weight
295- 0 .0f , // mccollision::ImpactParameter,
296- 0 .f ); // mccollision::EventPlaneAngle,
297- }
298-
299- uint8_t flags = 0 ;
300- flags |= o2::aod::mcparticle::enums::PhysicalPrimary;
301- tableStoredMcParticles (tableMcCollisions.lastIndex (), // mcCollisionId
302- fileParticles.m_particle_type ->at (iParticle), // pdgCode
303- 0 , // statusCode
304- flags, // flags
305- mothers, // mothersIds
306- daughters, // daughtersIdSlice
307- 1 .0f , // weight
308- fileParticles.m_px ->at (iParticle), // m_px
309- fileParticles.m_py ->at (iParticle), // m_py
310- fileParticles.m_pz ->at (iParticle), // m_pz
311- std::hypot (fileParticles.m_p ->at (iParticle), fileParticles.m_m ->at (iParticle)), // e
312- fileParticles.m_vx ->at (iParticle), // m_vx
313- fileParticles.m_vy ->at (iParticle), // m_vy
314- fileParticles.m_vz ->at (iParticle), // m_vz
315- fileParticles.m_vt ->at (iParticle)); // m_vt
316- }
317292
293+ struct addedParticle {
294+ float px;
295+ float py;
296+ float pz;
297+ float vx;
298+ float vy;
299+ float vz;
300+ };
301+ std::map<int , std::vector<addedParticle>> addedParticles;
318302 // Convert tracks from ACTS to ALICE format
303+ const size_t nParticlesGen = fileParticles.m_vx ->size ();
319304 const size_t nParticles = fileTracksummary.m_t_vx ->size ();
320305 const size_t nTracks = fileTracksummary.m_eLOC0_fit ->size ();
321306 for (size_t iTrack = 0 ; iTrack < nTracks; ++iTrack) {
@@ -335,23 +320,27 @@ struct Alice3TrackingTranslator {
335320 uint8_t flags = 0 ;
336321 flags |= o2::aod::mcparticle::enums::PhysicalPrimary;
337322
338- // fileTracksummary.m_majorityParticleId->at(iParticle).at(2), // pdgCode
339- const size_t iParticleGen = fileTracksummary.m_majorityParticleId ->at (iParticle).empty () ? 0 : fileTracksummary.m_majorityParticleId ->at (iParticle).at (0 );
340- tableStoredMcParticles (tableMcCollisions.lastIndex (), // mcCollisionId
341- fileParticles.m_particle_type ->at (iParticleGen), // pdgCode
342- 0 , // statusCode
343- flags, // flags
344- mothers, // mothersIds
345- daughters, // daughtersIdSlice
346- 1 .0f , // weight
347- fileTracksummary.m_t_px ->at (iParticle), // m_px
348- fileTracksummary.m_t_py ->at (iParticle), // m_py
349- fileTracksummary.m_t_pz ->at (iParticle), // m_pz
350- 0 , // e
351- fileTracksummary.m_t_vx ->at (iParticle), // m_vx
352- fileTracksummary.m_t_vy ->at (iParticle), // m_vy
353- fileTracksummary.m_t_vz ->at (iParticle), // m_vz
354- fileTracksummary.m_t_time ->at (iParticle)); // m_vt
323+ addedParticles[fileTracksummary.m_majorityParticlePDG ->at (iParticle)].push_back ({fileTracksummary.m_t_px ->at (iParticle),
324+ fileTracksummary.m_t_py ->at (iParticle),
325+ fileTracksummary.m_t_pz ->at (iParticle),
326+ fileTracksummary.m_t_vx ->at (iParticle),
327+ fileTracksummary.m_t_vy ->at (iParticle),
328+ fileTracksummary.m_t_vz ->at (iParticle)});
329+ tableStoredMcParticles (tableMcCollisions.lastIndex (), // mcCollisionId
330+ fileTracksummary.m_majorityParticlePDG ->at (iParticle), // pdgCode
331+ 0 , // statusCode
332+ flags, // flags
333+ mothers, // mothersIds
334+ daughters, // daughtersIdSlice
335+ 1 .0f , // weight
336+ fileTracksummary.m_t_px ->at (iParticle), // m_px
337+ fileTracksummary.m_t_py ->at (iParticle), // m_py
338+ fileTracksummary.m_t_pz ->at (iParticle), // m_pz
339+ 0 , // e
340+ fileTracksummary.m_t_vx ->at (iParticle), // m_vx
341+ fileTracksummary.m_t_vy ->at (iParticle), // m_vy
342+ fileTracksummary.m_t_vz ->at (iParticle), // m_vz
343+ fileTracksummary.m_t_time ->at (iParticle)); // m_vt
355344
356345 // Extract ACTS track parameters
357346 const float phi = fileTracksummary.m_ePHI_fit ->at (iTrack);
@@ -545,6 +534,43 @@ struct Alice3TrackingTranslator {
545534 false ); // PassedITSHitsFB2
546535 }
547536
537+ for (size_t iParticle = 0 ; iParticle < nParticlesGen; ++iParticle) {
538+
539+ uint8_t flags = 0 ;
540+ flags |= o2::aod::mcparticle::enums::PhysicalPrimary;
541+ bool alreadyAdded = false ;
542+ for (const auto & ap : addedParticles[fileParticles.m_particle_type ->at (iParticle)]) {
543+ if (std::abs (ap.px - fileParticles.m_px ->at (iParticle)) <= 1 .e -5 &&
544+ std::abs (ap.py - fileParticles.m_py ->at (iParticle)) <= 1 .e -5 &&
545+ std::abs (ap.pz - fileParticles.m_pz ->at (iParticle)) <= 1 .e -5 &&
546+ std::abs (ap.vx - fileParticles.m_vx ->at (iParticle)) <= 1 .e -5 &&
547+ std::abs (ap.vy - fileParticles.m_vy ->at (iParticle)) <= 1 .e -5 &&
548+ std::abs (ap.vz - fileParticles.m_vz ->at (iParticle)) <= 1 .e -5 ) {
549+ alreadyAdded = true ;
550+ break ;
551+ }
552+ }
553+ if (alreadyAdded) {
554+ continue ;
555+ }
556+
557+ tableStoredMcParticles (tableMcCollisions.lastIndex (), // mcCollisionId
558+ fileParticles.m_particle_type ->at (iParticle), // pdgCode
559+ 0 , // statusCode
560+ flags, // flags
561+ mothers, // mothersIds
562+ daughters, // daughtersIdSlice
563+ 1 .0f , // weight
564+ fileParticles.m_px ->at (iParticle), // m_px
565+ fileParticles.m_py ->at (iParticle), // m_py
566+ fileParticles.m_pz ->at (iParticle), // m_pz
567+ std::hypot (fileParticles.m_p ->at (iParticle), fileParticles.m_m ->at (iParticle)), // e
568+ fileParticles.m_vx ->at (iParticle), // m_vx
569+ fileParticles.m_vy ->at (iParticle), // m_vy
570+ fileParticles.m_vz ->at (iParticle), // m_vz
571+ fileParticles.m_vt ->at (iParticle)); // m_vt
572+ }
573+
548574 LOG (info) << " Event " << iEvent << " : has " << nTracks << " tracks and " << nParticles << " particles." ;
549575 }
550576 }
0 commit comments