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 // 29 // GEANT4 Class header file 30 // 31 // File name: G4HadronStoppingProcess 32 // 33 // Author V.Ivanchenko 21 April 2012 on base of G4MuonMinusCaptureAtRest 34 // 35 // 36 // Class Description: 37 // 38 // Base process class for nuclear capture of negatively charged particles 39 // 40 // Modifications: 41 // 20120928 M. Kelsey -- Add GetMeanLifeTime() here, instead of in base. 42 // 20121004 K. Genser -- defined two argument constructor with defaults 43 // 20121016 K. Genser -- Reverting to use one argument c'tor 44 // 20140818 K. Genser -- Labeled tracks using G4PhysicsModelCatalog 45 // 46 //------------------------------------------------------------------------ 47 48 #ifndef G4HadronStoppingProcess_h 49 #define G4HadronStoppingProcess_h 1 50 51 #include "globals.hh" 52 #include "G4HadronicProcess.hh" 53 #include "G4ParticleDefinition.hh" 54 #include "G4ElementSelector.hh" 55 #include "G4HadronicInteraction.hh" 56 #include "G4Track.hh" 57 #include "G4Step.hh" 58 #include "G4ForceCondition.hh" 59 #include "G4HadronicProcessType.hh" 60 #include "G4HadFinalState.hh" 61 62 class G4HadronStoppingProcess : public G4HadronicProcess 63 { 64 public: 65 66 explicit G4HadronStoppingProcess(const G4String& name = "hadronCaptureAtRest"); 67 68 virtual ~G4HadronStoppingProcess(); 69 70 virtual G4bool IsApplicable(const G4ParticleDefinition&); 71 72 virtual void PreparePhysicsTable(const G4ParticleDefinition&); 73 74 virtual void BuildPhysicsTable(const G4ParticleDefinition&); 75 76 virtual G4double 77 AtRestGetPhysicalInteractionLength(const G4Track& track, 78 G4ForceCondition* condition); 79 80 virtual G4double 81 PostStepGetPhysicalInteractionLength(const G4Track& track, 82 G4double previousStepSize, 83 G4ForceCondition* condition); 84 85 virtual G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&); 86 87 virtual void ProcessDescription(std::ostream& outFile) const; 88 89 inline void SetElementSelector(G4ElementSelector* ptr); 90 91 inline void SetEmCascade(G4HadronicInteraction* ptr); 92 93 inline void SetBoundDecay(G4HadronicInteraction* ptr); 94 95 protected: 96 // set effective lifetime for at-rest process (default is forced action) 97 // FIXME: This should be computed by subprocesses via cross-section analogue 98 G4double GetMeanLifeTime(const G4Track& /*aTrack*/, 99 G4ForceCondition* /*condition*/) { return -1.0; } 100 101 private: 102 103 // hide assignment operator as private 104 G4HadronStoppingProcess& operator=(const G4HadronStoppingProcess &right); 105 G4HadronStoppingProcess(const G4HadronStoppingProcess& ); 106 107 G4ElementSelector* fElementSelector; 108 109 G4HadronicInteraction* fEmCascade; 110 G4HadronicInteraction* fBoundDecay; 111 112 G4int emcID; 113 G4int ncID; 114 G4int dioID; 115 116 // This is shadowing "result" in the cc file and 117 // looks to be unnecessary. Removed by DHW, 12 June 2012 118 // G4HadFinalState result; 119 }; 120 121 inline void 122 G4HadronStoppingProcess::SetElementSelector(G4ElementSelector* ptr) 123 { 124 if(fElementSelector != ptr) { 125 delete fElementSelector; 126 fElementSelector = ptr; 127 } 128 } 129 130 inline void 131 G4HadronStoppingProcess::SetEmCascade(G4HadronicInteraction* ptr) 132 { 133 fEmCascade = ptr; 134 } 135 136 inline void 137 G4HadronStoppingProcess::SetBoundDecay(G4HadronicInteraction* ptr) 138 { 139 fBoundDecay = ptr; 140 } 141 142 #endif 143