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 // 20110906 M. Kelsey -- Use reference to G4H 27 28 #include "G4HadLeadBias.hh" 29 #include "G4Gamma.hh" 30 #include "G4PionZero.hh" 31 #include "Randomize.hh" 32 #include "G4HadFinalState.hh" 33 34 G4HadFinalState * G4HadLeadBias::Bias(G4HadF 35 { 36 // G4cerr << "bias enter"<<G4endl; 37 G4int nMeson(0), nBaryon(0), npi0(0), ngam 38 G4int i(0); 39 G4int maxE = -1; 40 G4double emax = 0; 41 if(result->GetStatusChange()==isAlive) 42 { 43 emax = result->GetEnergyChange(); 44 } 45 //G4cout << "max energy "<<G4endl; 46 for(i=0;i<static_cast<G4int>(result->GetNu 47 { 48 if(result->GetSecondary(i)->GetParticle( 49 { 50 maxE = i; 51 emax = result->GetSecondary(i)->GetParticle( 52 } 53 } 54 //G4cout <<"loop1"<<G4endl; 55 for(i=0; i<static_cast<G4int>(result->GetN 56 { 57 const G4DynamicParticle* aSecTrack = res 58 if(i==maxE) 59 { 60 } 61 else if(aSecTrack->GetDefinition()->GetB 62 { 63 nBaryon++; 64 } 65 else if(aSecTrack->GetDefinition()->GetL 66 { 67 nLepton++; 68 } 69 else if(aSecTrack->GetDefinition()==G4Ga 70 { 71 ngamma++; 72 } 73 else if(aSecTrack->GetDefinition()==G4Pi 74 { 75 npi0++; 76 } 77 else 78 { 79 nMeson++; 80 } 81 } 82 //G4cout << "BiasDebug 1 = "<<result->Get 83 // <<nMeson<<" "<< nBaryon<<" "<< n 84 G4double mesonWeight = nMeson; 85 G4double baryonWeight = nBaryon; 86 G4double gammaWeight = ngamma; 87 G4double npi0Weight = npi0; 88 G4double leptonWeight = nLepton; 89 G4int randomMeson = static_cast<G4int>((nM 90 G4int randomBaryon = static_cast<G4int>((n 91 G4int randomGamma = static_cast<G4int>((ng 92 G4int randomPi0 = static_cast<G4int>((npi0 93 G4int randomLepton = static_cast<G4int>((n 94 95 std::vector<G4HadSecondary> buffer; 96 G4int cMeson(0), cBaryon(0), cpi0(0), cgam 97 for(i=0; i<static_cast<G4int>(result->GetN 98 { 99 G4bool aCatch = false; 100 G4double weight = 1; 101 const G4HadSecondary* aSecTrack = result 102 G4ParticleDefinition* aSecDef = aSecTrac 103 if(i==maxE) 104 { 105 aCatch = true; 106 weight = 1; 107 } 108 else if(aSecDef->GetBaryonNumber()!=0) 109 { 110 if(++cBaryon==randomBaryon) 111 { 112 aCatch = true; 113 weight = baryonWeight; 114 } 115 } 116 else if(aSecDef->GetLeptonNumber()!=0) 117 { 118 if(++cLepton==randomLepton) 119 { 120 aCatch = true; 121 weight = leptonWeight; 122 } 123 } 124 else if(aSecDef==G4Gamma::Gamma()) 125 { 126 if(++cgamma==randomGamma) 127 { 128 aCatch = true; 129 weight = gammaWeight; 130 } 131 } 132 else if(aSecDef==G4PionZero::PionZero()) 133 { 134 if(++cpi0==randomPi0) 135 { 136 aCatch = true; 137 weight = npi0Weight; 138 } 139 } 140 else 141 { 142 if(++cMeson==randomMeson) 143 { 144 aCatch = true; 145 weight = mesonWeight; 146 } 147 } 148 if(aCatch) 149 { 150 buffer.push_back(*aSecTrack); 151 buffer.back().SetWeight(aSecTrack->GetWeight 152 } 153 else 154 { 155 delete aSecTrack; 156 } 157 } 158 result->ClearSecondaries(); 159 // G4cerr << "pre"<<G4endl; 160 result->AddSecondaries(buffer); 161 // G4cerr << "bias exit"<<G4endl; 162 163 return result; 164 } 165