Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/incl_physics/include/G4INCLStandardPropagationModel.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 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 Helsinki Institute of Physics, Finland
 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 /*
 39  * StandardPropagationModel.hh
 40  *
 41  *  \date 4 June 2009
 42  * \author Pekka Kaitaniemi
 43  */
 44 
 45 #ifndef G4INCLStandardPropagationModel_hh
 46 #define G4INCLStandardPropagationModel_hh 1
 47 
 48 #include "G4INCLNucleus.hh"
 49 #include "G4INCLIPropagationModel.hh"
 50 #include "G4INCLIAvatar.hh"
 51 #include "G4INCLConfigEnums.hh"
 52 
 53 #include <iterator>
 54 
 55 namespace G4INCL {
 56 
 57     /**
 58      * Standard INCL4 particle propagation and avatar prediction
 59      *
 60      * This class implements the standard INCL4 avatar prediction and particle
 61      * propagation logic. The main idea is to predict all collisions between particles
 62      * and their reflections from the potential wall. After this we select the avatar
 63      * with the smallest time, propagate all particles to their positions at that time
 64      * and return the avatar to the INCL kernel @see G4INCL::Kernel.
 65      *
 66      * The particle trajectories in this propagation model are straight lines and all
 67      * particles are assumed to move with constant velocity.
 68      */
 69     class StandardPropagationModel: public G4INCL::IPropagationModel {
 70     public:
 71       StandardPropagationModel(LocalEnergyType localEnergyType, LocalEnergyType localEnergyDeltaType, const G4double hTime = 0.0);
 72       virtual ~StandardPropagationModel();
 73 
 74       G4double getCurrentTime();
 75       /**
 76        * Set the nucleus for this propagation model.
 77        */
 78       void setNucleus(G4INCL::Nucleus *nucleus);
 79 
 80       /**
 81        * Get the nucleus.
 82        */
 83       G4INCL::Nucleus* getNucleus();
 84 
 85       G4double shoot(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy, const G4double impactParameter, const G4double phi);
 86       G4double shootParticle(ParticleType const t, const G4double kineticEnergy, const G4double impactParameter, const G4double phi);
 87       G4double shootComposite(ParticleSpecies const &s, const G4double kineticEnergy, const G4double impactParameter, const G4double phi);
 88       G4double shootAtrest(ParticleType const t, const G4double kineticEnergy); 
 89       
 90       /**
 91        * Set the stopping time of the simulation.
 92        */
 93       void setStoppingTime(G4double);
 94 
 95       /**
 96        * Get the current stopping time.
 97        */
 98       G4double getStoppingTime();
 99 
100       /**
101        * Add an avatar to the storage.
102        */
103       void registerAvatar(G4INCL::IAvatar *anAvatar);
104 
105       /** \brief Generate a two-particle avatar.
106        *
107        * Generate a two-particle avatar, if all the appropriate conditions are
108        * met.
109        */
110       IAvatar *generateBinaryCollisionAvatar(Particle * const p1, Particle * const p2);
111 
112       /** \brief Get the reflection time.
113        *
114        * Returns the reflection time of a particle on the potential wall.
115        *
116        * \param aParticle pointer to the particle
117        */
118       G4double getReflectionTime(G4INCL::Particle const * const aParticle);
119 
120       /**
121        * Get the predicted time of the collision between two particles.
122        */
123       G4double getTime(G4INCL::Particle const * const particleA,
124          G4INCL::Particle const * const particleB, G4double *minDistOfApproach) const;
125 
126       /** \brief Generate and register collisions between a list of updated particles and all the other particles.
127        *
128        * This method does not generate collisions among the particles in
129        * updatedParticles; in other words, it generates a collision between one
130        * of the updatedParticles and one of the particles ONLY IF the latter
131        * does not belong to updatedParticles.
132        *
133        * If you intend to generate all possible collisions among particles in a
134        * list, use generateCollisions().
135        *
136        * \param updatedParticles list of updated particles
137        * \param particles list of particles
138        */
139       void generateUpdatedCollisions(const ParticleList &updatedParticles, const ParticleList &particles);
140 
141       /** \brief Generate and register collisions among particles in a list, except between those in another list.
142        *
143        * This method generates all possible collisions among the particles.
144        * Each collision is generated only once.
145        *
146        * \param particles list of particles
147        */
148       void generateCollisions(const ParticleList &particles);
149 
150       /** \brief Generate and register collisions among particles in a list, except between those in another list.
151        *
152        * This method generates all possible collisions among the particles.
153        * Each collision is generated only once. The collision is NOT generated
154        * if BOTH collision partners belong to the except list.
155        *
156        * You should pass an empty list as the except parameter if you want to
157        * generate all possible collisions among particles.
158        *
159        * \param particles list of particles
160        * \param except list of excluded particles
161        */
162       void generateCollisions(const ParticleList &particles, const ParticleList &except);
163 
164       /** \brief Generate decays for particles that can decay.
165        *
166        * The list of particles given as an argument is allowed to contain also
167        * stable particles.
168        *
169        * \param particles list of particles to (possibly) generate decays for
170        */
171       void generateDecays(const ParticleList &particles);
172 
173       /**
174        * Update all avatars related to a particle.
175        */
176       void updateAvatars(const ParticleList &particles);
177 
178       /// \brief (Re)Generate all possible avatars.
179       void generateAllAvatars();
180 
181 #ifdef INCL_REGENERATE_AVATARS
182       /** \brief (Re)Generate all possible avatars.
183        *
184        * This method excludes collision avatars between updated particles.
185        */
186       void generateAllAvatarsExceptUpdated(FinalState const * const fs);
187 #endif
188 
189       /**
190        * Propagate all particles and return the first avatar.
191        */
192       G4INCL::IAvatar* propagate(FinalState const * const fs);
193 
194     private:
195       G4INCL::Nucleus *theNucleus;
196       G4double maximumTime;
197       G4double currentTime;
198       G4double hadronizationTime;
199       G4bool firstAvatar;
200       LocalEnergyType theLocalEnergyType, theLocalEnergyDeltaType;
201       Particle backupParticle1, backupParticle2;
202     };
203 
204 }
205 
206 
207 #endif
208