Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/Geant4/G4INCLEventInfo.hh was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 // INCL++ intra-nuclear cascade model
0027 // Alain Boudard, CEA-Saclay, France
0028 // Joseph Cugnon, University of Liege, Belgium
0029 // Jean-Christophe David, CEA-Saclay, France
0030 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
0031 // Sylvie Leray, CEA-Saclay, France
0032 // Davide Mancusi, CEA-Saclay, France
0033 //
0034 #define INCLXX_IN_GEANT4_MODE 1
0035 
0036 #include "globals.hh"
0037 
0038 /** \file G4INCLEventInfo.hh
0039  * \brief Simple container for output of event results.
0040  *
0041  * Contains the results of an INCL cascade.
0042  *
0043  * \date 21 January 2011
0044  * \author Davide Mancusi
0045  */
0046 
0047 #ifndef G4INCLEVENTINFO_HH_HH
0048 #define G4INCLEVENTINFO_HH_HH 1
0049 
0050 #include "G4INCLParticleType.hh"
0051 #ifdef INCL_ROOT_USE
0052 #include <Rtypes.h>
0053 #endif
0054 #include <string>
0055 #include <vector>
0056 #include <algorithm>
0057 
0058 namespace G4INCL {
0059 #ifndef INCL_ROOT_USE
0060     typedef G4int Int_t;
0061     typedef short Short_t;
0062     typedef G4float Float_t;
0063     typedef G4double Double_t;
0064     typedef G4bool Bool_t;
0065 #endif
0066 
0067     struct EventInfo {
0068       EventInfo() :
0069         nParticles(0),
0070         event(0),
0071         eventBias((Float_t)0.0),
0072         nRemnants(0),
0073         projectileType(0),
0074         At(0),
0075         Zt(0),
0076         St(0),
0077         Ap(0),
0078         Zp(0),
0079         Sp(0),
0080         Ep((Float_t)0.0),
0081         impactParameter((Float_t)0.0),
0082         nCollisions(0),
0083         stoppingTime((Float_t)0.0),
0084         EBalance((Float_t)0.0),
0085         firstEBalance((Float_t)0.0),
0086         pLongBalance((Float_t)0.0),
0087         pTransBalance((Float_t)0.0),
0088         nCascadeParticles(0),
0089         transparent(false),
0090         annihilationP(false),
0091         annihilationN(false),
0092         forcedCompoundNucleus(false),
0093         nucleonAbsorption(false),
0094         pionAbsorption(false),
0095         nDecays(0),
0096         fission(false),
0097         fissmode(0),
0098         EStarFis((Float_t)0.0),
0099         ASad(0),
0100         ZSad(0),
0101         nSrcCollisions(0),
0102         nSrcPairs(0),
0103         nBlockedCollisions(0),
0104         nBlockedDecays(0),
0105         effectiveImpactParameter((Float_t)0.0),
0106         deltasInside(false),
0107         sigmasInside(false),
0108         kaonsInside(false),
0109         antinucleonsInside(false),
0110         antikaonsInside(false),
0111         lambdasInside(false),
0112         forcedDeltasInside(false),
0113         forcedDeltasOutside(false),
0114         forcedPionResonancesOutside(false),
0115         absorbedStrangeParticle(false),
0116         forcedSigmaOutside(false),
0117         forcedStrangeInside(false),
0118         emitLambda(0),
0119         emitAntilambda(0),
0120         emitKaon(false),
0121         emitAntinucleon(false),
0122         clusterDecay(false),
0123         firstCollisionTime((Float_t)0.0),
0124         firstCollisionXSec((Float_t)0.0),
0125         firstCollisionSpectatorPosition((Float_t)0.0),
0126         firstCollisionSpectatorMomentum((Float_t)0.0),
0127         firstCollisionIsElastic(false),
0128         nReflectionAvatars(0),
0129         nCollisionAvatars(0),
0130         nDecayAvatars(0),
0131         nUnmergedSpectators(0),
0132         nEnergyViolationInteraction(0)
0133 
0134       {
0135         std::fill_n(A, maxSizeParticles, 0);
0136         std::fill_n(Z, maxSizeParticles, 0);
0137         std::fill_n(S, maxSizeParticles, 0);
0138         std::fill_n(J, maxSizeParticles, 0);
0139         std::fill_n(PDGCode, maxSizeParticles, 0);
0140         std::fill_n(ParticleBias, maxSizeParticles, (Float_t)0.0);
0141         std::fill_n(EKin, maxSizeParticles, (Float_t)0.0);
0142         std::fill_n(px, maxSizeParticles, (Float_t)0.0);
0143         std::fill_n(py, maxSizeParticles, (Float_t)0.0);
0144         std::fill_n(pz, maxSizeParticles, (Float_t)0.0);
0145         std::fill_n(theta, maxSizeParticles, (Float_t)0.0);
0146         std::fill_n(phi, maxSizeParticles, (Float_t)0.0);
0147         std::fill_n(origin, maxSizeParticles, 0);
0148         std::fill_n(parentResonancePDGCode, maxSizeParticles, 0);
0149         std::fill_n(parentResonanceID, maxSizeParticles, 0);
0150         std::fill_n(emissionTime, maxSizeParticles, (Float_t)0.0);
0151         std::fill_n(ARem, maxSizeRemnants, 0);
0152         std::fill_n(ZRem, maxSizeRemnants, 0);
0153         std::fill_n(SRem, maxSizeRemnants, 0);
0154         std::fill_n(EStarRem, maxSizeRemnants, (Float_t)0.0);
0155         std::fill_n(JRem, maxSizeRemnants, (Float_t)0.0);
0156         std::fill_n(EKinRem, maxSizeRemnants, (Float_t)0.0);
0157         std::fill_n(pxRem, maxSizeRemnants, (Float_t)0.0);
0158         std::fill_n(pyRem, maxSizeRemnants, (Float_t)0.0);
0159         std::fill_n(pzRem, maxSizeRemnants, (Float_t)0.0);
0160         std::fill_n(thetaRem, maxSizeRemnants, (Float_t)0.0);
0161         std::fill_n(phiRem, maxSizeRemnants, (Float_t)0.0);
0162         std::fill_n(jxRem, maxSizeRemnants, (Float_t)0.0);
0163         std::fill_n(jyRem, maxSizeRemnants, (Float_t)0.0);
0164         std::fill_n(jzRem, maxSizeRemnants, (Float_t)0.0);
0165         std::fill_n(EKinPrime, maxSizeParticles, (Float_t)0.0);
0166         std::fill_n(pzPrime, maxSizeParticles, (Float_t)0.0);
0167         std::fill_n(thetaPrime, maxSizeParticles, (Float_t)0.0);
0168       }
0169 
0170       /** \brief Number of the event */
0171       static G4ThreadLocal Int_t eventNumber;
0172 
0173       /** \brief Maximum array size for remnants */
0174       static const Short_t maxSizeRemnants = 10;
0175 
0176       /** \brief Maximum array size for emitted particles */
0177       static const Short_t maxSizeParticles = 1000;
0178 
0179       /** \brief Number of particles in the final state */
0180       Short_t nParticles;
0181       /** \brief Sequential number of the event in the event loop */
0182       Int_t event;
0183       /** \brief Particle mass number */
0184       Short_t A[maxSizeParticles];
0185       /** \brief Particle charge number */
0186       Short_t Z[maxSizeParticles];
0187       /** \brief Particle strangeness number */
0188       Short_t S[maxSizeParticles];
0189       /** \brief Particle angular momemtum */
0190       Short_t J[maxSizeParticles];
0191       /** \brief PDG numbering of the particles */
0192       Int_t PDGCode[maxSizeParticles];
0193       /** \brief Event bias */
0194       Float_t eventBias;
0195       /** \brief Particle weight due to the bias */
0196       Float_t ParticleBias[maxSizeParticles];
0197       /** \brief Particle kinetic energy [MeV] */
0198       Float_t EKin[maxSizeParticles];
0199       /** \brief Particle momentum, x component [MeV/c] */
0200       Float_t px[maxSizeParticles];
0201       /** \brief Particle momentum, y component [MeV/c] */
0202       Float_t py[maxSizeParticles];
0203       /** \brief Particle momentum, z component [MeV/c] */
0204       Float_t pz[maxSizeParticles];
0205       /** \brief Particle momentum polar angle [radians] */
0206       Float_t theta[maxSizeParticles];
0207       /** \brief Particle momentum azimuthal angle [radians] */
0208       Float_t phi[maxSizeParticles];
0209       /** \brief Origin of the particle
0210        *
0211        * Should be -1 for cascade particles, or the number of the remnant for
0212        * de-excitation particles. */
0213       Short_t origin[maxSizeParticles];
0214       /** \brief Particle's parent resonance PDG code */
0215       Int_t parentResonancePDGCode[maxSizeParticles];
0216       /** \brief Particle's parent resonance unique ID identifier */
0217       Int_t parentResonanceID[maxSizeParticles];
0218       /** \brief History of the particle
0219        *
0220        * Condensed information about the de-excitation chain of a particle. For
0221        * cascade particles, it is just an empty string. For particles arising
0222        * from the de-excitation of a cascade remnant, it is a string of
0223        * characters. Each character represents one or more identical steps in
0224        * the de-excitation process. The currently defined possible character
0225        * values and their meanings are the following:
0226        *
0227        * e: evaporation product
0228        * E: evaporation residue
0229        * m: multifragmentation
0230        * a: light partner in asymmetric fission or IMF emission
0231        * A: heavy partner in asymmetric fission or IMF emission
0232        * f: light partner in fission
0233        * F: heavy partner in fission
0234        * s: saddle-to-scission emission
0235        * n: non-statistical emission (decay) */
0236       std::vector<std::string> history;
0237       /** \brief Number of remnants */
0238       Short_t nRemnants;
0239       /** \brief Projectile particle type */
0240       Int_t projectileType;
0241       /** \brief Mass number of the target nucleus */
0242       Short_t At;
0243       /** \brief Charge number of the target nucleus */
0244       Short_t Zt;
0245       /** \brief Strangeness number of the target nucleus */
0246       Short_t St;
0247       /** \brief Mass number of the projectile nucleus */
0248       Short_t Ap;
0249       /** \brief Charge number of the projectile nucleus */
0250       Short_t Zp;
0251       /** \brief Strangeness number of the projectile nucleus */
0252       Short_t Sp;
0253       /** \brief Projectile kinetic energy given as input */
0254       Float_t Ep;
0255       /** \brief Impact parameter [fm] */
0256       Float_t impactParameter;
0257       /** \brief Number of accepted two-body collisions */
0258       Int_t nCollisions;
0259       /** \brief Cascade stopping time [fm/c] */
0260       Float_t stoppingTime;
0261       /** \brief Energy-conservation balance [MeV] */
0262       Float_t EBalance;
0263       /** \brief First value for the energy-conservation balance [MeV] */
0264       Float_t firstEBalance;
0265       /** \brief Longitudinal momentum-conservation balance [MeV/c] */
0266       Float_t pLongBalance;
0267       /** \brief Transverse momentum-conservation balance [MeV/c] */
0268       Float_t pTransBalance;
0269       /** \brief Number of cascade particles */
0270       Short_t nCascadeParticles;
0271       /** \brief True if the event is transparent */
0272       Bool_t transparent;
0273       /** \brief True if annihilation at rest on a proton */
0274       Bool_t annihilationP;
0275       /** \brief True if annihilation at rest on a neutron */
0276       Bool_t annihilationN;
0277       /** \brief True if the event is a forced CN */
0278       Bool_t forcedCompoundNucleus;
0279       /** \brief True if the event is a nucleon absorption */
0280       Bool_t nucleonAbsorption;
0281       /** \brief True if the event is a pion absorption */
0282       Bool_t pionAbsorption;
0283       /** \brief Number of accepted Delta decays */
0284       Int_t nDecays;
0285       /** \brief True if the event is fission */
0286       Bool_t fission;
0287       /** \brief Fission mode */
0288       Short_t fissmode;
0289       /** \brief Excitation energy above fission barrier [MeV] */
0290       Float_t EStarFis;
0291       /** \brief Mass number at saddle */
0292       Short_t ASad;
0293       /** \brief Charge number at saddle */
0294       Short_t ZSad;
0295       /** \brief Mass number at scission */
0296       std::vector<Int_t> ASci;
0297       /** \brief Charge number at scission */
0298       std::vector<Int_t> ZSci;
0299       /** \brief Number of accepted SRC collisions */
0300       Int_t nSrcCollisions;
0301       /** \brief Number of src pairs */
0302       Int_t nSrcPairs;
0303       /** \brief Number of two-body collisions blocked by Pauli or CDPP */
0304       Int_t nBlockedCollisions;
0305       /** \brief Number of decays blocked by Pauli or CDPP */
0306       Int_t nBlockedDecays;
0307       /** \brief Effective (Coulomb-distorted) impact parameter [fm] */
0308       Float_t effectiveImpactParameter;
0309       /** \brief Event involved deltas in the nucleus at the end of the cascade */
0310       Bool_t deltasInside;
0311       /** \brief Event involved sigmas in the nucleus at the end of the cascade */
0312       Bool_t sigmasInside;
0313       /** \brief Event involved kaons in the nucleus at the end of the cascade */
0314       Bool_t kaonsInside;
0315       /** \brief Event involved antinucleons in the nucleus at the end of the cascade */
0316       Bool_t antinucleonsInside;
0317       /** \brief Event involved antikaons in the nucleus at the end of the cascade */
0318       Bool_t antikaonsInside;
0319       /** \brief Event involved lambdas in the nucleus at the end of the cascade */
0320       Bool_t lambdasInside;
0321       /** \brief Event involved forced delta decays inside the nucleus */
0322       Bool_t forcedDeltasInside;
0323       /** \brief Event involved forced delta decays outside the nucleus */
0324       Bool_t forcedDeltasOutside;
0325       /** \brief Event involved forced eta/omega decays outside the nucleus */
0326       Bool_t forcedPionResonancesOutside;
0327       /** \brief Event involved forced strange absorption inside the nucleus */
0328       Bool_t absorbedStrangeParticle;
0329       /** \brief Event involved forced Sigma Zero decays outside the nucleus */
0330       Bool_t forcedSigmaOutside;
0331       /** \brief Event involved forced antiKaon/Sigma absorption inside the nucleus */
0332       Bool_t forcedStrangeInside;
0333       /** \brief Number of forced Lambda emit out of the nucleus */
0334       Int_t emitLambda;
0335       /** \brief Number of forced Antilambda emit out of the nucleus */
0336       Int_t emitAntilambda;
0337       /** \brief Event involved forced Kaon emission */
0338       Bool_t emitKaon;
0339       /** \brief Event involved forced Antinucleon emission */
0340       Bool_t emitAntinucleon;
0341       /** \brief Event involved cluster decay */
0342       Bool_t clusterDecay;
0343       /** \brief Time of the first collision [fm/c] */
0344       Float_t firstCollisionTime;
0345       /** \brief Cross section of the first collision (mb) */
0346       Float_t firstCollisionXSec;
0347       /** \brief Position of the spectator on the first collision (fm) */
0348       Float_t firstCollisionSpectatorPosition;
0349       /** \brief Momentum of the spectator on the first collision (fm) */
0350       Float_t firstCollisionSpectatorMomentum;
0351       /** \brief True if the first collision was elastic */
0352       Bool_t firstCollisionIsElastic;
0353       /** \brief Number of reflection avatars */
0354       Int_t nReflectionAvatars;
0355       /** \brief Number of collision avatars */
0356       Int_t nCollisionAvatars;
0357       /** \brief Number of decay avatars */
0358       Int_t nDecayAvatars;
0359       /** \brief Number of dynamical spectators that were merged back into the projectile remnant */
0360       Int_t nUnmergedSpectators;
0361       /** \brief Number of attempted collisions/decays for which the energy-conservation algorithm failed to find a solution. */
0362       Int_t nEnergyViolationInteraction;
0363       /** \brief Emission time [fm/c] */
0364       Float_t emissionTime[maxSizeParticles];
0365       /** \brief Remnant mass number */
0366       Short_t ARem[maxSizeRemnants];
0367       /** \brief Remnant charge number */
0368       Short_t ZRem[maxSizeRemnants];
0369       /** \brief Remnant strangeness number */
0370       Short_t SRem[maxSizeRemnants];
0371       /** \brief Remnant excitation energy [MeV] */
0372       Float_t EStarRem[maxSizeRemnants];
0373       /** \brief Remnant spin [\f$\hbar\f$] */
0374       Float_t JRem[maxSizeRemnants];
0375       /** \brief Remnant kinetic energy [MeV] */
0376       Float_t EKinRem[maxSizeRemnants];
0377       /** \brief Remnant momentum, x component [MeV/c] */
0378       Float_t pxRem[maxSizeRemnants];
0379       /** \brief Remnant momentum, y component [MeV/c] */
0380       Float_t pyRem[maxSizeRemnants];
0381       /** \brief Remnant momentum, z component [MeV/c] */
0382       Float_t pzRem[maxSizeRemnants];
0383       /** \brief Remnant momentum polar angle [radians] */
0384       Float_t thetaRem[maxSizeRemnants];
0385       /** \brief Remnant momentum azimuthal angle [radians] */
0386       Float_t phiRem[maxSizeRemnants];
0387       /** \brief Remnant angular momentum, x component [\f$\hbar\f$] */
0388       Float_t jxRem[maxSizeRemnants];
0389       /** \brief Remnant angular momentum, y component [\f$\hbar\f$] */
0390       Float_t jyRem[maxSizeRemnants];
0391       /** \brief Remnant angular momentum, z component [\f$\hbar\f$] */
0392       Float_t jzRem[maxSizeRemnants];
0393       /** \brief Particle kinetic energy, in inverse kinematics [MeV] */
0394       Float_t EKinPrime[maxSizeParticles];
0395       /** \brief Particle momentum, z component, in inverse kinematics [MeV/c] */
0396       Float_t pzPrime[maxSizeParticles];
0397       /** \brief Particle momentum polar angle, in inverse kinematics [radians] */
0398       Float_t thetaPrime[maxSizeParticles];
0399 
0400       /** \brief Reset the EventInfo members */
0401       void reset() {
0402         nParticles = 0;
0403         event = 0;
0404         eventBias = (Float_t)0.0;
0405         history.clear();
0406         nRemnants = 0;
0407         projectileType = 0;
0408         At = 0;
0409         Zt = 0;
0410         St = 0;
0411         Ap = 0;
0412         Zp = 0;
0413         Sp = 0;
0414         Ep = (Float_t)0.0;
0415         impactParameter = (Float_t)0.0;
0416         nCollisions = 0;
0417         stoppingTime = (Float_t)0.0;
0418         EBalance = (Float_t)0.0;
0419         firstEBalance = (Float_t)0.0;
0420         pLongBalance = (Float_t)0.0;
0421         pTransBalance = (Float_t)0.0;
0422         nCascadeParticles = 0;
0423         transparent = false;
0424         annihilationP = false;
0425         annihilationN = false;
0426         forcedCompoundNucleus = false;
0427         nucleonAbsorption = false;
0428         pionAbsorption = false;
0429         nDecays = 0;
0430         fission = false;
0431         fissmode = 0;
0432         EStarFis = (Float_t)0.0;
0433         ASad = 0;
0434         ZSad = 0;
0435         ASci.clear();
0436         ZSci.clear();
0437         nSrcCollisions = 0;
0438         nSrcPairs = 0;
0439         nBlockedCollisions = 0;
0440         nBlockedDecays = 0;
0441         effectiveImpactParameter = (Float_t)0.0;
0442         deltasInside = false;
0443         sigmasInside = false;
0444         kaonsInside = false;
0445         antinucleonsInside = false;
0446         antikaonsInside = false;
0447         lambdasInside = false;
0448         forcedDeltasInside = false;
0449         forcedDeltasOutside = false;
0450         forcedPionResonancesOutside = false;
0451         absorbedStrangeParticle = false;
0452         forcedSigmaOutside = false;
0453         forcedStrangeInside = false;
0454         emitLambda = 0;
0455         emitAntilambda = 0;
0456         emitKaon = false;
0457         emitAntinucleon = false;
0458         clusterDecay = false;
0459         firstCollisionTime = (Float_t)0.0;
0460         firstCollisionXSec = (Float_t)0.0;
0461         firstCollisionSpectatorPosition = (Float_t)0.0;
0462         firstCollisionSpectatorMomentum = (Float_t)0.0;
0463         firstCollisionIsElastic = false;
0464         nReflectionAvatars = 0;
0465         nCollisionAvatars = 0;
0466         nDecayAvatars = 0;
0467         nUnmergedSpectators = 0;
0468         nEnergyViolationInteraction = 0;
0469 
0470       }
0471 
0472       /// \brief Move a remnant to the particle array
0473       void remnantToParticle(const G4int remnantIndex);
0474 
0475       /// \brief Fill the variables describing the reaction in inverse kinematics
0476       void fillInverseKinematics(const Double_t gamma);
0477     };
0478 }
0479 
0480 #endif /* G4INCLEVENTINFO_HH_HH */