-
Notifications
You must be signed in to change notification settings - Fork 100
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
put common stuff into helper functions
- Loading branch information
1 parent
c2e8e98
commit 9f142b8
Showing
4 changed files
with
115 additions
and
92 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
|
||
//========================================================================== | ||
// AIDA Detector description implementation | ||
//-------------------------------------------------------------------------- | ||
// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) | ||
// All rights reserved. | ||
// | ||
// For the licensing terms see $DD4hepINSTALL/LICENSE. | ||
// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. | ||
// | ||
// Author : M.Frank | ||
// | ||
//========================================================================== | ||
|
||
#include "Geant4UserParticleHandlerHelper.h" | ||
#include <DDG4/Geant4Particle.h> | ||
#include <DDG4/Geant4UserParticleHandler.h> | ||
|
||
// using namespace dd4hep::sim; | ||
|
||
namespace dd4hep::sim { | ||
|
||
void setReason(Geant4Particle& p, bool starts_in_trk_vol, bool ends_in_trk_vol) { | ||
|
||
dd4hep::detail::ReferenceBitMask<int> reason(p.reason); | ||
|
||
if( reason.isSet(G4PARTICLE_PRIMARY) ) { | ||
//do nothing | ||
} else if( starts_in_trk_vol && ! reason.isSet(G4PARTICLE_ABOVE_ENERGY_THRESHOLD) ) { | ||
// created in tracking volume but below energy cut | ||
p.reason = 0; | ||
return; | ||
} | ||
|
||
// created and ended in calo but not primary particle | ||
// | ||
// we can have particles from the generator only in the calo, if we have a | ||
// long particle with preassigned decay, we need to keep the reason or the | ||
// MChistory will not be updated later on | ||
if( not reason.isSet(G4PARTICLE_PRIMARY) ) { | ||
if( !starts_in_trk_vol ) { | ||
if( !ends_in_trk_vol ){ | ||
p.reason = 0; | ||
} | ||
//fg: dont keep backscatter that did not create a tracker hit | ||
else if( ! reason.isSet(G4PARTICLE_CREATED_TRACKER_HIT) ) { | ||
p.reason = 0; | ||
} | ||
} | ||
} | ||
} | ||
|
||
void setSimulatorStatus(Geant4Particle& p, bool starts_in_trk_vol, bool ends_in_trk_vol) { | ||
// Set the simulator status bits | ||
dd4hep::detail::ReferenceBitMask<int> simStatus(p.status); | ||
|
||
if( ends_in_trk_vol ) { | ||
simStatus.set(G4PARTICLE_SIM_DECAY_TRACKER); | ||
} | ||
|
||
// if the particle doesn't end in the tracker volume it must have ended in the calorimeter | ||
if( not ends_in_trk_vol && not simStatus.isSet(G4PARTICLE_SIM_LEFT_DETECTOR) ) { | ||
simStatus.set(G4PARTICLE_SIM_DECAY_CALO); | ||
} | ||
|
||
if( not starts_in_trk_vol && ends_in_trk_vol ) { | ||
simStatus.set(G4PARTICLE_SIM_BACKSCATTER); | ||
} | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
|
||
//========================================================================== | ||
// AIDA Detector description implementation | ||
//-------------------------------------------------------------------------- | ||
// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) | ||
// All rights reserved. | ||
// | ||
// For the licensing terms see $DD4hepINSTALL/LICENSE. | ||
// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. | ||
// | ||
// Author : M.Frank | ||
// | ||
//========================================================================== | ||
|
||
#ifndef DDG4_GEANT4USERPARTICLEHANDLERHELPER_H | ||
#define DDG4_GEANT4USERPARTICLEHANDLERHELPER_H | ||
|
||
/// Namespace for the AIDA detector description toolkit | ||
namespace dd4hep { | ||
|
||
/// Namespace for the Geant4 based simulation part of the AIDA detector description toolkit | ||
namespace sim { | ||
|
||
// Forward declarations | ||
class Geant4Particle; | ||
|
||
/// determines if particle should be kept and sets p.reason = 0 otherwise | ||
void setReason(Geant4Particle& p, bool starts_in_trk_volume, bool ends_in_trk_volume); | ||
|
||
/// determines if particle has ended in the tracker, calorimeter or if it is backscatter and sets simulator status accordingly | ||
void setSimulatorStatus(Geant4Particle& p, bool starts_in_trk_volume, bool ends_in_trk_volume); | ||
|
||
} | ||
} | ||
|
||
#endif // DDG4_GEANT4USERPARTICLEHANDLERHELPER_H |