diff --git a/DDG4/lcio/LCIOInputAction.cpp b/DDG4/lcio/LCIOInputAction.cpp index b952b17b155f54ab058c7a5f4b9c998283635dae..cd95c7e655e061c696d2f91ba71f587f8001fd8f 100644 --- a/DDG4/lcio/LCIOInputAction.cpp +++ b/DDG4/lcio/LCIOInputAction.cpp @@ -163,9 +163,11 @@ void LCIOInputAction::operator()(G4Event* event) { int genStatus = mcp->getGeneratorStatus(); if ( genStatus == 0 ) status.set(G4PARTICLE_GEN_EMPTY); - if ( genStatus == 1 ) status.set(G4PARTICLE_GEN_STABLE); - if ( genStatus == 2 ) status.set(G4PARTICLE_GEN_DECAYED); - if ( genStatus == 3 ) status.set(G4PARTICLE_GEN_DOCUMENTATION); + 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 { std::cout << " #### WARNING - LCIOInputAction : unknown generator status : " << genStatus << " -> ignored ! " << std::endl ; } + if ( mcp->isCreatedInSimulation() ) status.set(G4PARTICLE_SIM_CREATED); if ( mcp->isBackscatter() ) status.set(G4PARTICLE_SIM_BACKSCATTER); if ( mcp->vertexIsNotEndpointOfParent() ) status.set(G4PARTICLE_SIM_PARENT_RADIATED); diff --git a/DDG4/lcio/LCIOMCParticles.cpp b/DDG4/lcio/LCIOMCParticles.cpp index 709283155b2582417653159f076a8f305a2e67d8..ead4aad2aeeebad3e630e4ec7d8486531626afd6 100644 --- a/DDG4/lcio/LCIOMCParticles.cpp +++ b/DDG4/lcio/LCIOMCParticles.cpp @@ -76,20 +76,36 @@ namespace DD4hep { const G4ParticleDefinition* def = p->definition; MYParticleImpl* q = (MYParticleImpl*)new lcio::MCParticleImpl(); q->setPDG(p->pdgID); - q->setMomentum(&p->psx); - q->setVertex(&p->vsx); - q->setEndpoint(&p->vex); - q->setTime(p->time); - q->setMass(p->mass); + + float ps_fa[3] = { p->psx/GeV, p->psy/GeV, p->psz/GeV } ; + q->setMomentum( ps_fa ); + + double vs_fa[3] = { p->vsx/mm, p->vsy/mm, p->vsz/mm } ; + q->setVertex( vs_fa ); + + double ve_fa[3] = { p->vex/mm, p->vey/mm, p->vez/mm } ; + q->setEndpoint( ve_fa ); + + //q->setMomentum(&p->psx); + //q->setVertex(&p->vsx); + //q->setEndpoint(&p->vex); + + + q->setTime(p->time/ns); + q->setMass(p->mass/GeV); + + q->setCharge(def ? def->GetPDGCharge()/3.0 : 0); // Charge(e+) = 1 ! // Set generator status - if ( mask.isSet(G4PARTICLE_GEN_EMPTY) ) q->setGeneratorStatus(0); - else if ( mask.isSet(G4PARTICLE_GEN_STABLE) ) q->setGeneratorStatus(1); + //if ( mask.isSet(G4PARTICLE_GEN_EMPTY) ) + q->setGeneratorStatus(0); + 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); // Set simulation status + q->setSimulatorStatus( 0 ) ; q->setCreatedInSimulation( mask.isSet(G4PARTICLE_SIM_CREATED) ); q->setBackscatter( mask.isSet(G4PARTICLE_SIM_BACKSCATTER) ); q->setVertexIsNotEndpointOfParent( mask.isSet(G4PARTICLE_SIM_PARENT_RADIATED) ); @@ -99,6 +115,10 @@ namespace DD4hep { q->setStopped( mask.isSet(G4PARTICLE_SIM_STOPPED) ); q->setOverlay( false ); + //fg: if simstatus !=0 we have to set the generator status to 0: + if( q->getSimulatorStatus() != 0 ) + q->setGeneratorStatus( 0 ) ; + q->setSpin(p->spin); q->setColorFlow(p->colorFlow);