From dc53ba43f0229251a8d1b2e0c9dcf1562e7c50d6 Mon Sep 17 00:00:00 2001 From: Frank Gaede <frank.gaede@desy.de> Date: Fri, 15 Sep 2017 16:15:24 +0200 Subject: [PATCH] add G4PARTICLE_GEN_BEAM and G4PARTICLE_GEN_OTHER --- DDG4/include/DDG4/Geant4Particle.h | 8 ++++++-- DDG4/lcio/Geant4Output2LCIO.cpp | 6 ++++-- DDG4/lcio/LCIOEventReader.cpp | 8 ++++---- DDG4/src/Geant4Particle.cpp | 4 ++++ DDG4/src/Geant4ParticleHandler.cpp | 2 +- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/DDG4/include/DDG4/Geant4Particle.h b/DDG4/include/DDG4/Geant4Particle.h index fe5aaef96..7b3fc5764 100644 --- a/DDG4/include/DDG4/Geant4Particle.h +++ b/DDG4/include/DDG4/Geant4Particle.h @@ -65,15 +65,19 @@ namespace dd4hep { G4PARTICLE_KEEP_ALWAYS = 1<<10, G4PARTICLE_FORCE_KILL = 1<<11, - // Generator status for a given particles: bit 0...3 come from LCIO, rest is internal + // Generator status for a given particles: bit 0...4, agreed by many formats (HepMC, LCIO, ....): G4PARTICLE_GEN_EMPTY = 1<<0, // Empty line G4PARTICLE_GEN_STABLE = 1<<1, // undecayed particle, stable in the generator G4PARTICLE_GEN_DECAYED = 1<<2, // particle decayed in the generator G4PARTICLE_GEN_DOCUMENTATION = 1<<3, // documentation line + G4PARTICLE_GEN_BEAM = 1<<4, // beam particle + + G4PARTICLE_GEN_OTHER = 1<<9, // any other generator status G4PARTICLE_GEN_GENERATOR = // Particle comes from generator ( G4PARTICLE_GEN_EMPTY+G4PARTICLE_GEN_STABLE+ - G4PARTICLE_GEN_DECAYED+G4PARTICLE_GEN_DOCUMENTATION ), + G4PARTICLE_GEN_DECAYED+G4PARTICLE_GEN_DOCUMENTATION+ + G4PARTICLE_GEN_BEAM+G4PARTICLE_GEN_OTHER), G4PARTICLE_GEN_STATUS = 0x3FF, // Mask for generator status (bit 0...9) // Simulation status of a given particle diff --git a/DDG4/lcio/Geant4Output2LCIO.cpp b/DDG4/lcio/Geant4Output2LCIO.cpp index 1f5dfba96..f12de2cfc 100644 --- a/DDG4/lcio/Geant4Output2LCIO.cpp +++ b/DDG4/lcio/Geant4Output2LCIO.cpp @@ -240,9 +240,11 @@ lcio::LCCollectionVec* Geant4Output2LCIO::saveParticles(Geant4ParticleMap* parti // Set generator status q->setGeneratorStatus(0); - if ( mask.isSet(G4PARTICLE_GEN_STABLE) ) q->setGeneratorStatus(1); - else if ( mask.isSet(G4PARTICLE_GEN_DECAYED) ) q->setGeneratorStatus(2); + if ( mask.isSet(G4PARTICLE_GEN_STABLE) ) q->setGeneratorStatus(1); + else if ( mask.isSet(G4PARTICLE_GEN_DECAYED) ) q->setGeneratorStatus(2); else if ( mask.isSet(G4PARTICLE_GEN_DOCUMENTATION) ) q->setGeneratorStatus(3); + else if ( mask.isSet(G4PARTICLE_GEN_BEAM) ) q->setGeneratorStatus(4); + else if ( mask.isSet(G4PARTICLE_GEN_OTHER) ) q->setGeneratorStatus(9); // std::cout << " ********** mcp genstatus : " << q->getGeneratorStatus() << std::endl ; // Set simulation status diff --git a/DDG4/lcio/LCIOEventReader.cpp b/DDG4/lcio/LCIOEventReader.cpp index 582f2cc8a..412ecc354 100644 --- a/DDG4/lcio/LCIOEventReader.cpp +++ b/DDG4/lcio/LCIOEventReader.cpp @@ -133,10 +133,10 @@ LCIOEventReader::readParticles(int event_number, else if ( genStatus == 1 ) status.set(G4PARTICLE_GEN_STABLE); else if ( genStatus == 2 ) status.set(G4PARTICLE_GEN_DECAYED); else if ( genStatus == 3 ) status.set(G4PARTICLE_GEN_DOCUMENTATION); - else { - cout << " #### WARNING - LCIOInputAction : unknown generator status : " - << genStatus << " -> ignored ! " << endl; - } + else if ( genStatus == 4 ) status.set(G4PARTICLE_GEN_BEAM); + else + status.set(G4PARTICLE_GEN_OTHER); + //fixme: need to define the correct logic for selecting the particle to use // for the _one_ event vertex diff --git a/DDG4/src/Geant4Particle.cpp b/DDG4/src/Geant4Particle.cpp index d3887835b..0a7071e10 100644 --- a/DDG4/src/Geant4Particle.cpp +++ b/DDG4/src/Geant4Particle.cpp @@ -204,6 +204,8 @@ std::string Geant4ParticleHandle::processName() const { else if ( particle->status&G4PARTICLE_GEN_STABLE ) return "Gen.Stable"; else if ( particle->status&G4PARTICLE_GEN_DECAYED ) return "Gen.Decay"; else if ( particle->status&G4PARTICLE_GEN_DOCUMENTATION ) return "Gen.DOC"; + else if ( particle->status&G4PARTICLE_GEN_BEAM ) return "Gen.Beam"; + else if ( particle->status&G4PARTICLE_GEN_OTHER ) return "Gen.Other"; return "???"; } @@ -380,6 +382,8 @@ void Geant4ParticleHandle::dump4(int level, const std::string& src, const char* status.isSet(G4PARTICLE_GEN_STABLE) ? 'S' : '.', status.isSet(G4PARTICLE_GEN_DECAYED) ? 'D' : '.', status.isSet(G4PARTICLE_GEN_DOCUMENTATION) ? 'd' : '.', + status.isSet(G4PARTICLE_GEN_BEAM) ? 'B' : '.', + status.isSet(G4PARTICLE_GEN_OTHER) ? 'o' : '.', status.isSet(G4PARTICLE_SIM_CREATED) ? 's' : '.', status.isSet(G4PARTICLE_SIM_BACKSCATTER) ? 'b' : '.', diff --git a/DDG4/src/Geant4ParticleHandler.cpp b/DDG4/src/Geant4ParticleHandler.cpp index 91474ebcf..c13fbbd09 100644 --- a/DDG4/src/Geant4ParticleHandler.cpp +++ b/DDG4/src/Geant4ParticleHandler.cpp @@ -631,7 +631,7 @@ void Geant4ParticleHandler::checkConsistency() const { } // We assume that particles from the generator have consistent parents // For all other particles except the primaries, the parent must be contained in the record. - if ( !mask.isSet(G4PARTICLE_PRIMARY) && !status.anySet(G4PARTICLE_GEN_GENERATOR) ) { + if ( !mask.isSet(G4PARTICLE_PRIMARY) && !status.anySet(G4PARTICLE_GEN_STATUS) ) { TrackEquivalents::const_iterator eq_it = m_equivalentTracks.find(p->g4Parent); bool in_map = false, in_parent_list = false; int parent_id = -1; -- GitLab