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