Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-31 09:21:48

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 // ********************************************************************
0027 //
0028 //  CaTS (Calorimetry and Tracking Simulation)
0029 //
0030 //  Authors : Hans Wenzel
0031 //            Soon Yung Jun
0032 //            (Fermi National Accelerator Laboratory)
0033 //
0034 // History
0035 //   October 18th, 2021 : first implementation
0036 //
0037 // ********************************************************************
0038 //
0039 /// \file StackingAction.cc
0040 /// \brief Implementation of the CaTS::StackingAction class
0041 
0042 // Geant4 headers
0043 #include "G4ParticleDefinition.hh"
0044 #include "G4Track.hh"
0045 #include "G4ios.hh"
0046 #include "G4VProcess.hh"
0047 #include "G4ClassificationOfNewTrack.hh"
0048 #include "G4GenericMessenger.hh"
0049 // project headers
0050 #include "StackingAction.hh"
0051 
0052 StackingAction::StackingAction()
0053   : G4UserStackingAction()
0054 {
0055   DefineCommands();
0056 }
0057 
0058 StackingAction::~StackingAction() { delete fMessenger; }
0059 G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack(
0060   const G4Track* aTrack)
0061 {
0062   G4ClassificationOfNewTrack classification = fWaiting;
0063   if(aTrack->GetParentID() == 0)
0064     return classification;
0065   if(aTrack->GetDefinition()->GetParticleName() == "pi0")
0066   {
0067     if(fkillPi0)
0068     {
0069       classification = fKill;
0070     }
0071   }
0072   if(aTrack->GetDefinition()->GetParticleName() == "eta")
0073   {
0074     if(fkilleta)
0075     {
0076       classification = fKill;
0077     }
0078   }
0079   if(aTrack->GetDefinition()->GetParticleName() == "gamma")
0080   {
0081     if(aTrack->GetCreatorProcess()->GetProcessName() == "nCapture")
0082     {
0083       if(fkillGammafromnCapture)
0084       {
0085         classification = fKill;
0086       }
0087     }
0088   }
0089   return classification;
0090 }
0091 
0092 void StackingAction::Print()
0093 {
0094   G4cout << "===================================================" << G4endl;
0095   G4cout << " StackingAction configuration:      " << G4endl;
0096   G4cout << " Kill Pi0s :                        " << fkillPi0 << G4endl;
0097   G4cout << " Kill etas :                        " << fkilleta << G4endl;
0098   G4cout << " Kill Gammas from neutron Capture:  " << fkillGammafromnCapture
0099          << G4endl;
0100   G4cout << "===================================================" << G4endl;
0101 }
0102 
0103 void StackingAction::DefineCommands()
0104 {
0105   fMessenger       = new G4GenericMessenger(this, "/CaTS/StackingAction/",
0106                                       "select particles to kill");
0107   auto& killPi0Cmd = fMessenger->DeclareProperty("killPi0", fkillPi0);
0108   killPi0Cmd.SetGuidance("kill Pi0 (true/false)");
0109   killPi0Cmd.SetStates(G4State_PreInit, G4State_Init, G4State_Idle);
0110   killPi0Cmd.SetDefaultValue("false");
0111   auto& killetaCmd = fMessenger->DeclareProperty("killeta", fkilleta);
0112   killetaCmd.SetGuidance("kill eta (true/false)");
0113   killetaCmd.SetStates(G4State_PreInit, G4State_Init, G4State_Idle);
0114   killetaCmd.SetDefaultValue("false");
0115   auto& killGammafromnCaptureCmd = fMessenger->DeclareProperty(
0116     "killGammafromnCapture", fkillGammafromnCapture);
0117   killGammafromnCaptureCmd.SetGuidance("kill GammafromnCapture (true/false)");
0118   killGammafromnCaptureCmd.SetStates(G4State_PreInit, G4State_Init,
0119                                      G4State_Idle);
0120   killGammafromnCaptureCmd.SetDefaultValue("false");
0121   fMessenger->DeclareMethod("Print", &StackingAction::Print)
0122     .SetGuidance("Print StackingAction configuration")
0123     .SetStates(G4State_PreInit, G4State_Idle);
0124 }