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 27 #include "G4LENDCapture.hh" 28 #include "G4Fragment.hh" 29 #include "G4PhotonEvaporation.hh" 30 #include "G4SystemOfUnits.hh" 31 #include "G4Nucleus.hh" 32 #include "G4ParticleTable.hh" 33 #include "G4IonTable.hh" 34 35 G4HadFinalState * G4LENDCapture::ApplyYourself 36 { 37 38 G4double temp = aTrack.GetMaterial()->GetTe 39 40 //G4int iZ = int ( aTarg.GetZ() ); 41 //G4int iA = int ( aTarg.GetN() ); 42 //migrate to integer A and Z (GetN_asInt re 43 G4int iZ = aTarg.GetZ_asInt(); 44 G4int iA = aTarg.GetA_asInt(); 45 G4int iM = 0; 46 if ( aTarg.GetIsotope() != NULL ) { 47 iM = aTarg.GetIsotope()->Getm(); 48 } 49 50 G4double ke = aTrack.GetKineticEnergy(); 51 52 G4HadFinalState* theResult = &theParticleCh 53 theResult->Clear(); 54 55 G4GIDI_target* aTarget = get_target_from_ma 56 if ( aTarget == NULL ) return returnUnchang 57 std::vector<G4GIDI_Product>* products = aTa 58 59 G4int ipZ = aTrack.GetDefinition()->GetAtom 60 G4int ipA = aTrack.GetDefinition()->GetAtom 61 62 G4bool needResidual=true; 63 64 G4ThreeVector p(0,0,0); 65 if ( products != NULL ) 66 { 67 68 G4int totN = 0; 69 70 for ( G4int j = 0; j < int( products->si 71 { 72 G4int jZ = (*products)[j].Z; 73 G4int jA = (*products)[j].A; 74 75 //G4cout << "ZA = " << 1000 * (*produ 76 // << (*products)[j].kineticEnerg 77 // << " px " << (*products)[j]. 78 // << " py " << (*products)[j]. 79 // << " pz " << (*products)[j]. 80 // << G4endl; 81 82 if ( jZ == iZ + ipZ && jA == iA + ipA 83 84 G4ThreeVector dp((*products)[j].px,(* 85 p += dp; 86 87 G4DynamicParticle* theSec = new G4Dyn 88 89 if ( jA == 1 && jZ == 1 ) { 90 theSec->SetDefinition( G4Proton::P 91 totN += 1; 92 } 93 else if ( jA == 1 && jZ == 0 ) 94 { 95 theSec->SetDefinition( G4Neutron:: 96 totN += 1; 97 } 98 else if ( jZ > 0 ) { 99 if ( jA != 0 ) 100 { 101 theSec->SetDefinition( G4IonTab 102 totN += jA; 103 } 104 else 105 { 106 theSec->SetDefinition( G4IonTab 107 } 108 } 109 else { 110 theSec->SetDefinition( G4Gamma::Ga 111 } 112 113 theSec->SetMomentum( G4ThreeVector( ( 114 115 /* 116 if ( dp.mag() == 0 ) 117 { 118 //theSec->SetMomentum( -p*MeV ); 119 } 120 */ 121 122 theResult->AddSecondary( theSec, secI 123 } 124 } 125 else 126 { 127 128 //For the case data does not provide fin 129 130 //G4cout << "products != NULL; iZ = " << 131 132 // TK comment 133 // aTarg->ReturnTargetParticle()->Get4Mo 134 G4Fragment nucleus( iA + ipA , iZ + ipZ 135 G4PhotonEvaporation photonEvaporation; 136 photonEvaporation.SetICM( TRUE ); 137 G4FragmentVector* products_from_PE = pho 138 G4FragmentVector::iterator it; 139 140 for (it = products_from_PE->begin(); it 141 { 142 if ( (*it)->GetZ_asInt() == iZ + ipZ 143 G4DynamicParticle* theSec = new G4Dyn 144 if ( (*it)->GetParticleDefinition() ! 145 //G4cout << (*it)->GetParticleDefi 146 theSec->SetDefinition( (*it)->GetP 147 theSec->Set4Momentum( (*it)->GetMo 148 } else { 149 //G4cout << (*it)->GetZ_asInt() << 150 theSec->SetDefinition( G4IonTable: 151 theSec->Set4Momentum( (*it)->GetMo 152 } 153 theResult->AddSecondary( theSec, secI 154 } 155 delete products_from_PE; 156 } 157 158 //if necessary, generate residual nucleus 159 if ( needResidual ) { 160 G4DynamicParticle* residual = new G4Dyna 161 residual->SetDefinition( G4IonTable::Get 162 residual->SetMomentum( -p*MeV ); 163 theResult->AddSecondary( residual, secID 164 } 165 166 delete products; 167 168 theResult->SetStatusChange( stopAndKill ); 169 170 return theResult; 171 172 } 173