Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // ******************************************************************** 27 // 28 // CaTS (Calorimetry and Tracking Simulation) 29 // 30 // Authors : Hans Wenzel 31 // Soon Yung Jun 32 // (Fermi National Accelerator Laboratory) 33 // 34 // History 35 // October 18th, 2021 : first implementation 36 // 37 // ******************************************************************** 38 // 39 /// \file StackingAction.cc 40 /// \brief Implementation of the CaTS::StackingAction class 41 42 // Geant4 headers 43 #include "G4ParticleDefinition.hh" 44 #include "G4Track.hh" 45 #include "G4ios.hh" 46 #include "G4VProcess.hh" 47 #include "G4ClassificationOfNewTrack.hh" 48 #include "G4GenericMessenger.hh" 49 // project headers 50 #include "StackingAction.hh" 51 52 StackingAction::StackingAction() 53 : G4UserStackingAction() 54 { 55 DefineCommands(); 56 } 57 58 StackingAction::~StackingAction() { delete fMessenger; } 59 G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack( 60 const G4Track* aTrack) 61 { 62 G4ClassificationOfNewTrack classification = fWaiting; 63 if(aTrack->GetParentID() == 0) 64 return classification; 65 if(aTrack->GetDefinition()->GetParticleName() == "pi0") 66 { 67 if(fkillPi0) 68 { 69 classification = fKill; 70 } 71 } 72 if(aTrack->GetDefinition()->GetParticleName() == "eta") 73 { 74 if(fkilleta) 75 { 76 classification = fKill; 77 } 78 } 79 if(aTrack->GetDefinition()->GetParticleName() == "gamma") 80 { 81 if(aTrack->GetCreatorProcess()->GetProcessName() == "nCapture") 82 { 83 if(fkillGammafromnCapture) 84 { 85 classification = fKill; 86 } 87 } 88 } 89 return classification; 90 } 91 92 void StackingAction::Print() 93 { 94 G4cout << "===================================================" << G4endl; 95 G4cout << " StackingAction configuration: " << G4endl; 96 G4cout << " Kill Pi0s : " << fkillPi0 << G4endl; 97 G4cout << " Kill etas : " << fkilleta << G4endl; 98 G4cout << " Kill Gammas from neutron Capture: " << fkillGammafromnCapture 99 << G4endl; 100 G4cout << "===================================================" << G4endl; 101 } 102 103 void StackingAction::DefineCommands() 104 { 105 fMessenger = new G4GenericMessenger(this, "/CaTS/StackingAction/", 106 "select particles to kill"); 107 auto& killPi0Cmd = fMessenger->DeclareProperty("killPi0", fkillPi0); 108 killPi0Cmd.SetGuidance("kill Pi0 (true/false)"); 109 killPi0Cmd.SetStates(G4State_PreInit, G4State_Init, G4State_Idle); 110 killPi0Cmd.SetDefaultValue("false"); 111 auto& killetaCmd = fMessenger->DeclareProperty("killeta", fkilleta); 112 killetaCmd.SetGuidance("kill eta (true/false)"); 113 killetaCmd.SetStates(G4State_PreInit, G4State_Init, G4State_Idle); 114 killetaCmd.SetDefaultValue("false"); 115 auto& killGammafromnCaptureCmd = fMessenger->DeclareProperty( 116 "killGammafromnCapture", fkillGammafromnCapture); 117 killGammafromnCaptureCmd.SetGuidance("kill GammafromnCapture (true/false)"); 118 killGammafromnCaptureCmd.SetStates(G4State_PreInit, G4State_Init, 119 G4State_Idle); 120 killGammafromnCaptureCmd.SetDefaultValue("false"); 121 fMessenger->DeclareMethod("Print", &StackingAction::Print) 122 .SetGuidance("Print StackingAction configuration") 123 .SetStates(G4State_PreInit, G4State_Idle); 124 } 125