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 // INCL++ intra-nuclear cascade model 27 // Alain Boudard, CEA-Saclay, France 28 // Joseph Cugnon, University of Liege, Belgium 29 // Jean-Christophe David, CEA-Saclay, France 30 // Pekka Kaitaniemi, CEA-Saclay, France, and H 31 // Sylvie Leray, CEA-Saclay, France 32 // Davide Mancusi, CEA-Saclay, France 33 // 34 #define INCLXX_IN_GEANT4_MODE 1 35 36 #include "globals.hh" 37 38 /** \file G4INCLEventInfo.cc 39 * \brief Simple container for output of event 40 * 41 * Contains the results of an INCL cascade. 42 * 43 * \date 21 January 2011 44 * \author Davide Mancusi 45 */ 46 47 #include "G4INCLEventInfo.hh" 48 #include "G4INCLGlobals.hh" 49 #include "G4INCLParticleTable.hh" 50 #include "G4INCLParticle.hh" 51 #include <cmath> 52 53 namespace G4INCL { 54 55 G4ThreadLocal Int_t EventInfo::eventNumber = 56 57 void EventInfo::fillInverseKinematics(const 58 const Double_t beta = std::sqrt(1.-1./(gam 59 for(Int_t i=0; i<nParticles; ++i) { 60 // determine the particle mass from the 61 // this ensures consistency with the mas 62 Double_t mass; 63 if(EKin[i]>0.) { 64 mass = std::max( 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 75 const Double_t ETot = EKin[i] + mass; 76 const Double_t ETotPrime = gamma*(ETot - 77 EKinPrime[i] = ETotPrime - mass; 78 pzPrime[i] = -gamma*(pz[i] - beta*ETot); 79 const Double_t pPrime = std::sqrt(px[i]* 80 const Double_t cosThetaPrime = (pPrime>0 81 if(cosThetaPrime>=1.) 82 thetaPrime[i] = 0.; 83 else if(cosThetaPrime<=-1.) 84 thetaPrime[i] = 180.; 85 else 86 thetaPrime[i] = Math::toDegrees(Math:: 87 } 88 } 89 90 void EventInfo::remnantToParticle(const G4in 91 92 INCL_DEBUG("remnantToParticle function use 93 94 A[nParticles] = ARem[remnantIndex]; 95 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; 105 106 px[nParticles] = pxRem[remnantIndex]; 107 py[nParticles] = pyRem[remnantIndex]; 108 pz[nParticles] = pzRem[remnantIndex]; 109 110 const G4double plab = std::sqrt(pxRem[remn 111 +pyRem[remna 112 +pzRem[remna 113 if(plab != 0.0){ 114 G4double pznorm = pzRem[remnantIndex]/pl 115 if(pznorm>1.) pznorm = 1.; 116 else if(pznorm<-1.) pznorm = -1.; 117 theta[nParticles] = Math::toDegrees(Math:: 118 phi[nParticles] = Math::toDegrees(std::ata 119 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 127 #ifdef INCLXX_IN_GEANT4_MODE 128 parentResonancePDGCode[nParticles] = 0; / 129 parentResonanceID[nParticles] = 0; / 130 #endif 131 history.push_back(""); // history 132 nParticles++; 133 // assert(history.size()==(unsigned int)nParti 134 } 135 } 136 137