Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:58:27

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 /*
0039  * IPropagationModel.hh
0040  *
0041  *  \date 4 juin 2009
0042  * \author Pekka Kaitaniemi
0043  */
0044 
0045 #ifndef G4INCLIPropagationModel_hh
0046 #define G4INCLIPropagationModel_hh
0047 
0048 #include "G4INCLIAvatar.hh"
0049 #include "G4INCLNucleus.hh"
0050 #include "G4INCLFinalState.hh"
0051 
0052 namespace G4INCL {
0053 
0054     /**
0055      * Propagation model takes care of transporting the particles until something
0056      * interesting (i.e. an avatar) happens. This avatar is then returned back to the INCL
0057      * kernel for further processing.
0058      *
0059      * The propagation model idea abstracts the details of propagation. This allows us to
0060      * conveniently support multiple propagation models and to compare their results. Some
0061      * possible future propagation models are: straight line trajectories by using constant
0062      * time step and curved trajectories.
0063      */
0064     class IPropagationModel {
0065     public:
0066       IPropagationModel() {}
0067       virtual ~IPropagationModel() {}
0068 
0069       /**
0070        * Set the nucleus for the propagation model.
0071        *
0072        * @param nucleus Pointer to the nucleus
0073        */
0074       virtual void setNucleus(G4INCL::Nucleus *nucleus) = 0;
0075 
0076       /**
0077        * Get a pointer to the nucleus.
0078        *
0079        * @return G4INCL::Nuleus*
0080        */
0081       virtual G4INCL::Nucleus* getNucleus() = 0;
0082 
0083       virtual G4double shoot(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy, const G4double impactParameter, const G4double phi) = 0;
0084     protected:
0085       virtual G4double shootAtrest(ParticleType const t, const G4double kineticEnergy) = 0; 
0086       virtual G4double shootParticle(ParticleType const t, const G4double kineticEnergy, const G4double impactParameter, const G4double phi) = 0;
0087       virtual G4double shootComposite(ParticleSpecies const &s, const G4double kineticEnergy, const G4double impactParameter, const G4double phi) = 0;
0088 
0089     public:
0090 
0091       /**
0092        * Returns the current global time of the system.
0093        */
0094       virtual G4double getCurrentTime() = 0;
0095 
0096       /**
0097        * Set new stopping time to the propagation.
0098        */
0099       virtual void setStoppingTime(G4double) = 0;
0100 
0101       /**
0102        * Get the current stopping time.
0103        */
0104       virtual G4double getStoppingTime() = 0;
0105 
0106       /**
0107        * Propagate the particles and get the next avatar.
0108        *
0109        * @return G4INCL::IAvatar the next avatar
0110        */
0111       virtual G4INCL::IAvatar* propagate(FinalState const * const fs) = 0;
0112     };
0113 
0114 }
0115 
0116 #endif