Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 /// \file GB07/src/GB07BOptrLeadingParticle.cc 27 /// \brief Implementation of the GB07BOptrLead 28 // 29 #include "GB07BOptrLeadingParticle.hh" 30 31 #include "G4BOptnLeadingParticle.hh" 32 #include "G4BiasingProcessInterface.hh" 33 #include "G4Electron.hh" 34 #include "G4Gamma.hh" 35 #include "G4ParticleDefinition.hh" 36 #include "G4PionZero.hh" 37 #include "G4Positron.hh" 38 #include "G4ProcessManager.hh" 39 40 //....oooOO0OOooo........oooOO0OOooo........oo 41 42 GB07BOptrLeadingParticle::GB07BOptrLeadingPart 43 : G4VBiasingOperator(operatorName), 44 fAnnihilation(nullptr), 45 fConversion(nullptr), 46 fDecay(nullptr), 47 fTwoParticleProcess(nullptr) 48 { 49 fLeadingParticleBiasingOperation = new G4BOp 50 } 51 52 //....oooOO0OOooo........oooOO0OOooo........oo 53 54 GB07BOptrLeadingParticle::~GB07BOptrLeadingPar 55 { 56 delete fLeadingParticleBiasingOperation; 57 } 58 59 //....oooOO0OOooo........oooOO0OOooo........oo 60 61 G4VBiasingOperation* GB07BOptrLeadingParticle: 62 const G4Track*, const G4BiasingProcessInterf 63 { 64 // -- When the present method is called, w 65 // -- generation level. The process is given 66 // -- which, in our case, wrappes a physics 67 // -- To bias the final state generation, 68 // -- which is fLeadingParticleBiasingOperat 69 // -- configure it depending on if the proce 70 // -- or if it is a many-particle final stat 71 // -- final state, one track is the leading 72 // -- so always surviving by default. We pla 73 // -- trim also these two-particles final st 74 75 if (callingProcess == fTwoParticleProcess) { 76 // -- secondary particle accompagnying the 77 // -- killed with 2./3. probability (Russi 78 fLeadingParticleBiasingOperation->SetFurth 79 } 80 else { 81 // -- -1.0 means no effect : no further ki 82 // -- particles accompanying the leading o 83 fLeadingParticleBiasingOperation->SetFurth 84 } 85 86 return fLeadingParticleBiasingOperation; 87 } 88 89 //....oooOO0OOooo........oooOO0OOooo........oo 90 91 void GB07BOptrLeadingParticle::StartRun() 92 { 93 // -- collect the two-particle final state p 94 fAnnihilation = nullptr; 95 fConversion = nullptr; 96 fDecay = nullptr; 97 98 // ---- collect e+ annihilation process: 99 auto positronProcesses = G4Positron::Definit 100 for (size_t i = 0; i < positronProcesses->si 101 if ((*positronProcesses)[i]->GetProcessNam 102 fAnnihilation = (*positronProcesses)[i]; 103 break; 104 } 105 } 106 107 // ---- collect gamma conversion process: 108 auto gammaProcesses = G4Gamma::Definition()- 109 for (size_t i = 0; i < gammaProcesses->size( 110 if ((*gammaProcesses)[i]->GetProcessName() 111 fConversion = (*gammaProcesses)[i]; 112 break; 113 } 114 } 115 116 // ---- collect pi0 decay process: 117 auto pi0Processes = G4PionZero::Definition() 118 for (size_t i = 0; i < pi0Processes->size(); 119 if ((*pi0Processes)[i]->GetProcessName() = 120 fDecay = (*pi0Processes)[i]; 121 break; 122 } 123 } 124 } 125 126 //....oooOO0OOooo........oooOO0OOooo........oo 127 128 void GB07BOptrLeadingParticle::StartTracking(c 129 { 130 // -- remember what is the two-particle fina 131 // -- track: 132 fTwoParticleProcess = nullptr; 133 if (track->GetDefinition() == G4Gamma ::Defi 134 if (track->GetDefinition() == G4Positron::De 135 if (track->GetDefinition() == G4PionZero::De 136 } 137