Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 #include "G4LENDFission.hh" 26 #include "G4LENDFission.hh" 27 #include "G4SystemOfUnits.hh" 27 #include "G4SystemOfUnits.hh" 28 #include "G4Nucleus.hh" 28 #include "G4Nucleus.hh" 29 #include "G4IonTable.hh" << 29 #include "G4ParticleTable.hh" 30 30 31 G4HadFinalState * G4LENDFission::ApplyYourself 31 G4HadFinalState * G4LENDFission::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTarg ) 32 { 32 { 33 33 34 G4double temp = aTrack.GetMaterial()->GetTe 34 G4double temp = aTrack.GetMaterial()->GetTemperature(); 35 35 36 //migrate to integer A and Z (GetN_asInt re 36 //migrate to integer A and Z (GetN_asInt returns number of neutrons in the nucleus since this) 37 G4int iZ = aTarg.GetZ_asInt(); 37 G4int iZ = aTarg.GetZ_asInt(); 38 G4int iA = aTarg.GetA_asInt(); 38 G4int iA = aTarg.GetA_asInt(); 39 //G4int iM = aTarg.GetM_asInt(); << 40 G4int iM = 0; << 41 if ( aTarg.GetIsotope() != NULL ) { << 42 iM = aTarg.GetIsotope()->Getm(); << 43 } << 44 39 45 G4double ke = aTrack.GetKineticEnergy(); 40 G4double ke = aTrack.GetKineticEnergy(); 46 41 47 G4HadFinalState* theResult = &theParticleCh 42 G4HadFinalState* theResult = &theParticleChange; 48 theResult->Clear(); 43 theResult->Clear(); 49 44 50 G4GIDI_target* aTarget = get_target_from_ma << 45 G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget(); 51 if ( aTarget == NULL ) return returnUnchang << 46 std::vector<G4GIDI_Product>* products = aTarget->getFissionFinalState( ke*MeV, temp, NULL, NULL ); 52 std::vector<G4GIDI_Product>* products = aTa << 53 if ( products != NULL ) 47 if ( products != NULL ) 54 { 48 { 55 for ( G4int j = 0; j < int( products->si 49 for ( G4int j = 0; j < int( products->size() ); j++ ) 56 { 50 { 57 G4int jZ = (*products)[j].Z; 51 G4int jZ = (*products)[j].Z; 58 G4int jA = (*products)[j].A; 52 G4int jA = (*products)[j].A; 59 G4int jM = (*products)[j].m; << 60 53 61 //G4cout << "Z = " << (*products)[ 54 //G4cout << "Z = " << (*products)[j].Z 62 // << ", A = " << (*products)[ 55 // << ", A = " << (*products)[j].A 63 // << ", EK = " << (*products)[ 56 // << ", EK = " << (*products)[j].kineticEnergy << " [MeV]" 64 // << ", px = " << (*products)[ 57 // << ", px = " << (*products)[j].px 65 // << ", py = " << (*products)[ 58 // << ", py = " << (*products)[j].py 66 // << ", pz = " << (*products)[ 59 // << ", pz = " << (*products)[j].pz 67 // << ", birthTimeSec = " << (* << 68 // << G4endl; 60 // << G4endl; 69 61 70 G4DynamicParticle* theSec = new G4Dyn 62 G4DynamicParticle* theSec = new G4DynamicParticle; 71 63 72 if ( jZ > 0 ) 64 if ( jZ > 0 ) 73 { 65 { 74 theSec->SetDefinition( G4IonTable: << 66 //Ex j? >> 67 theSec->SetDefinition( G4ParticleTable::GetParticleTable()->FindIon( jZ, jA , 0, 0 ) ); 75 } 68 } 76 else if ( jA == 1 && jZ == 0 ) 69 else if ( jA == 1 && jZ == 0 ) 77 { 70 { 78 theSec->SetDefinition( G4Neutron:: 71 theSec->SetDefinition( G4Neutron::Neutron() ); 79 } 72 } 80 else 73 else 81 { 74 { 82 theSec->SetDefinition( G4Gamma::Ga 75 theSec->SetDefinition( G4Gamma::Gamma() ); 83 } 76 } 84 77 85 theSec->SetMomentum( G4ThreeVector( ( 78 theSec->SetMomentum( G4ThreeVector( (*products)[j].px*MeV , (*products)[j].py*MeV , (*products)[j].pz*MeV ) ); 86 //G4cout << theSec->GetDefinition()-> 79 //G4cout << theSec->GetDefinition()->GetParticleName() << G4endl; 87 theResult->AddSecondary( theSec, secI << 80 theResult->AddSecondary( theSec ); 88 //Set time for delayed neutrons << 89 //Current implementation is a little << 90 if ( (*products)[j].birthTimeSec != 0 << 91 G4double time = (*products)[j].bir << 92 theResult->GetSecondary(theResult- << 93 } << 94 } 81 } 95 } 82 } 96 delete products; 83 delete products; 97 84 98 theResult->SetStatusChange( stopAndKill ); 85 theResult->SetStatusChange( stopAndKill ); 99 86 100 return theResult; 87 return theResult; 101 88 102 } << 103 const std::pair<G4double, G4double> G4LENDFiss << 104 { << 105 // max energy non-conservation is mass << 106 //return std::pair<G4double, G4double> << 107 return std::pair<G4double, G4double>(5 << 108 } 89 } 109 90