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 // INCL++ intra-nuclear cascade model 26 // INCL++ intra-nuclear cascade model 27 // Alain Boudard, CEA-Saclay, France << 27 // Pekka Kaitaniemi, CEA and Helsinki Institute of Physics 28 // Joseph Cugnon, University of Liege, Belgium << 28 // Davide Mancusi, CEA 29 // Jean-Christophe David, CEA-Saclay, France << 29 // Alain Boudard, CEA 30 // Pekka Kaitaniemi, CEA-Saclay, France, and H << 30 // Sylvie Leray, CEA 31 // Sylvie Leray, CEA-Saclay, France << 31 // Joseph Cugnon, University of Liege 32 // Davide Mancusi, CEA-Saclay, France << 33 // 32 // 34 #define INCLXX_IN_GEANT4_MODE 1 33 #define INCLXX_IN_GEANT4_MODE 1 35 34 36 #include "globals.hh" 35 #include "globals.hh" 37 36 38 /** \file G4INCLEventInfo.cc 37 /** \file G4INCLEventInfo.cc 39 * \brief Simple container for output of event 38 * \brief Simple container for output of event results. 40 * 39 * 41 * Contains the results of an INCL cascade. 40 * Contains the results of an INCL cascade. 42 * 41 * 43 * \date 21 January 2011 42 * \date 21 January 2011 44 * \author Davide Mancusi 43 * \author Davide Mancusi 45 */ 44 */ 46 45 47 #include "G4INCLEventInfo.hh" 46 #include "G4INCLEventInfo.hh" 48 #include "G4INCLGlobals.hh" 47 #include "G4INCLGlobals.hh" 49 #include "G4INCLParticleTable.hh" 48 #include "G4INCLParticleTable.hh" 50 #include "G4INCLParticle.hh" << 51 #include <cmath> 49 #include <cmath> 52 50 53 namespace G4INCL { 51 namespace G4INCL { 54 52 55 G4ThreadLocal Int_t EventInfo::eventNumber = 53 G4ThreadLocal Int_t EventInfo::eventNumber = 0; 56 54 >> 55 #ifdef INCL_INVERSE_KINEMATICS 57 void EventInfo::fillInverseKinematics(const 56 void EventInfo::fillInverseKinematics(const Double_t gamma) { 58 const Double_t beta = std::sqrt(1.-1./(gam 57 const Double_t beta = std::sqrt(1.-1./(gamma*gamma)); 59 for(Int_t i=0; i<nParticles; ++i) { 58 for(Int_t i=0; i<nParticles; ++i) { 60 // determine the particle mass from the 59 // determine the particle mass from the kinetic energy and the momentum; 61 // this ensures consistency with the mas 60 // this ensures consistency with the masses uses by the models 62 Double_t mass; << 61 const Double_t mass = std::max( 63 if(EKin[i]>0.) { << 62 0.5 * (px[i]*px[i]+py[i]*py[i]+pz[i]*pz[i]-EKin[i]*EKin[i]) / EKin[i], 64 mass = std::max( << 63 0.0); 65 0.5 * (px[i]*px[i]+py[ << 66 0.0); << 67 } else { << 68 INCL_WARN("Particle with null kinetic << 69 << " A=" << A[i] << ", Z=" << 70 << " EKin=" << EKin[i] << " << 71 << " Falling back to the ma << 72 mass = ParticleTable::getRealMass(A[i] << 73 } << 74 64 75 const Double_t ETot = EKin[i] + mass; 65 const Double_t ETot = EKin[i] + mass; 76 const Double_t ETotPrime = gamma*(ETot - 66 const Double_t ETotPrime = gamma*(ETot - beta*pz[i]); 77 EKinPrime[i] = ETotPrime - mass; 67 EKinPrime[i] = ETotPrime - mass; 78 pzPrime[i] = -gamma*(pz[i] - beta*ETot); 68 pzPrime[i] = -gamma*(pz[i] - beta*ETot); 79 const Double_t pPrime = std::sqrt(px[i]* 69 const Double_t pPrime = std::sqrt(px[i]*px[i] + py[i]*py[i] + pzPrime[i]*pzPrime[i]); 80 const Double_t cosThetaPrime = (pPrime>0 << 70 const Double_t cosThetaPrime = pzPrime[i]/pPrime; 81 if(cosThetaPrime>=1.) 71 if(cosThetaPrime>=1.) 82 thetaPrime[i] = 0.; 72 thetaPrime[i] = 0.; 83 else if(cosThetaPrime<=-1.) 73 else if(cosThetaPrime<=-1.) 84 thetaPrime[i] = 180.; 74 thetaPrime[i] = 180.; 85 else 75 else 86 thetaPrime[i] = Math::toDegrees(Math:: << 76 thetaPrime[i] = 180.*std::acos(cosThetaPrime)/Math::pi; 87 } 77 } 88 } 78 } >> 79 #endif // INCL_INVERSE_KINEMATICS 89 80 90 void EventInfo::remnantToParticle(const G4in 81 void EventInfo::remnantToParticle(const G4int remnantIndex) { 91 << 92 INCL_DEBUG("remnantToParticle function use << 93 << 94 A[nParticles] = ARem[remnantIndex]; 82 A[nParticles] = ARem[remnantIndex]; 95 Z[nParticles] = ZRem[remnantIndex]; 83 Z[nParticles] = ZRem[remnantIndex]; 96 S[nParticles] = SRem[remnantIndex]; << 97 J[nParticles] = JRem[remnantIndex]; << 98 << 99 << 100 ParticleSpecies pt(A[nParticles],Z[nParticle << 101 PDGCode[nParticles] = pt.getPDGCode(); << 102 << 103 ParticleBias[nParticles] = Particle::getTo << 104 emissionTime[nParticles] = stoppingTime; 84 emissionTime[nParticles] = stoppingTime; 105 85 106 px[nParticles] = pxRem[remnantIndex]; 86 px[nParticles] = pxRem[remnantIndex]; 107 py[nParticles] = pyRem[remnantIndex]; 87 py[nParticles] = pyRem[remnantIndex]; 108 pz[nParticles] = pzRem[remnantIndex]; 88 pz[nParticles] = pzRem[remnantIndex]; 109 89 110 const G4double plab = std::sqrt(pxRem[remn 90 const G4double plab = std::sqrt(pxRem[remnantIndex]*pxRem[remnantIndex] 111 +pyRem[remna 91 +pyRem[remnantIndex]*pyRem[remnantIndex] 112 +pzRem[remna 92 +pzRem[remnantIndex]*pzRem[remnantIndex]); 113 if(plab != 0.0){ << 93 G4double pznorm = pzRem[remnantIndex]/plab; 114 G4double pznorm = pzRem[remnantIndex]/pl << 94 if(pznorm>1.) 115 if(pznorm>1.) pznorm = 1.; << 95 pznorm = 1.; 116 else if(pznorm<-1.) pznorm = -1.; << 96 else if(pznorm<-1.) 117 theta[nParticles] = Math::toDegrees(Math:: << 97 pznorm = -1.; 118 phi[nParticles] = Math::toDegrees(std::ata << 98 theta[nParticles] = 180.*std::acos(pznorm)/G4INCL::Math::pi; >> 99 phi[nParticles] = 180.*std::atan2(pyRem[remnantIndex],pxRem[remnantIndex])/G4INCL::Math::pi; >> 100 119 EKin[nParticles] = EKinRem[remnantIndex]; 101 EKin[nParticles] = EKinRem[remnantIndex]; 120 } << 121 else{ << 122 theta[nParticles] = 0.0; << 123 phi[nParticles] = 0.0; << 124 EKin[nParticles] = 0.0; << 125 } << 126 origin[nParticles] = -1; // Origin: cascad 102 origin[nParticles] = -1; // Origin: cascade 127 #ifdef INCLXX_IN_GEANT4_MODE << 128 parentResonancePDGCode[nParticles] = 0; / << 129 parentResonanceID[nParticles] = 0; / << 130 #endif << 131 history.push_back(""); // history 103 history.push_back(""); // history 132 nParticles++; 104 nParticles++; 133 // assert(history.size()==(unsigned int)nParti 105 // assert(history.size()==(unsigned int)nParticles); 134 } 106 } 135 } 107 } 136 108 137 109