Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-10 08:28:54

0001 // ********************************************************************
0002 // * License and Disclaimer                                           *
0003 // *                                                                  *
0004 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0005 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0006 // * conditions of the Geant4 Software License,  included in the file *
0007 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0008 // * include a list of copyright holders.                             *
0009 // *                                                                  *
0010 // * Neither the authors of this software system, nor their employing *
0011 // * institutes,nor the agencies providing financial support for this *
0012 // * work  make  any representation or  warranty, express or implied, *
0013 // * regarding  this  software system or assume any liability for its *
0014 // * use.  Please see the license in the file  LICENSE  and URL above *
0015 // * for the full disclaimer and the limitation of liability.         *
0016 // *                                                                  *
0017 // * This  code  implementation is the result of  the  scientific and *
0018 // * technical work of the GEANT4 collaboration.                      *
0019 // * By using,  copying,  modifying or  distributing the software (or *
0020 // * any work based  on the software)  you  agree  to acknowledge its *
0021 // * use  in  resulting  scientific  publications,  and indicate your *
0022 // * acceptance of all terms of the Geant4 Software license.          *
0023 // ********************************************************************
0024 //
0025 /// \file HadronicInelasticModelCRMC.hh
0026 /// \brief Definition of the HadronicInelasticModelCRMC class
0027 
0028 // ------------------------------------------------------------
0029 //
0030 //              CRMC interface to GEANT4
0031 //              for more details on CRMC, see:
0032 //              https://web.ikp.kit.edu/rulrich/crmc.html
0033 //
0034 //
0035 // Author:      Andrii Tykhonov  (University of Geneva)
0036 // Email:       andrii.tykhonov@cern.ch
0037 // Created:     14.02.2018
0038 //
0039 //
0040 // (
0041 //   A few, trivial modifications made by A. Ribon in May 2021
0042 //   in order to use it inside the Geant4 example Hadr02 :
0043 //   -  Copied here, instead of using the original class
0044 //      G4HadronicInelasticModelCRMC as it is distributed
0045 //      with crmc-svn-geant4, to avoid some problems with CMake
0046 //      which is unable to find the library libGeantCrmc.
0047 //   -  Renamed the class as HadronicInelasticModelCRMC,
0048 //      to follow the Geant4 convention that classes whose
0049 //      names start with "G4" are only those distributed in
0050 //      source/ .
0051 //   -  Fixed a few compilation warnings .
0052 //   -  Set the seed by hand, because the method
0053 //        CLHEP::HepRandom::getTheSeed()
0054 //      returns 0 which is not accepted.
0055 // )
0056 // ------------------------------------------------------------
0057 
0058 #ifndef HadronicInelasticModelCRMC_h
0059 #define HadronicInelasticModelCRMC_h
0060 
0061 #include "CRMCinterface.h"
0062 
0063 #include "G4HadFinalState.hh"
0064 #include "G4HadronicInteraction.hh"
0065 #include "G4SystemOfUnits.hh"
0066 
0067 #include <string>
0068 
0069 extern CRMCdata gCRMC_data;
0070 
0071 class G4HadFinalState;
0072 class G4ParticleTable;
0073 class G4IonTable;
0074 
0075 class G4ParticleDefinition;  // class G4DynamicParticle;
0076 
0077 class HadronicInelasticModelCRMC : public G4HadronicInteraction
0078 {
0079   public:
0080     //! model:
0081     //!         0  :  EPOS LHC
0082     //!         1  :  EPOS 1.99
0083     //!         12 :  DPMJET3
0084     HadronicInelasticModelCRMC(int model, const G4String& modelName);
0085     ~HadronicInelasticModelCRMC();
0086 
0087     G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& targetNucleus);
0088     G4bool IsApplicable(const G4HadProjectile&, G4Nucleus&);
0089 
0090     void SetPrintDebug(bool printdebug) { fPrintDebug = printdebug; }
0091     G4ParticleDefinition* GetParticleDefinition(long particle_id, int& error_code);
0092     void SplitMultiNeutrons(CRMCdata& CRMC_data);
0093     bool IsMultiNeutron(int Z, int A);
0094 
0095     virtual const std::pair<G4double, G4double> GetFatalEnergyCheckLevels() const
0096     {
0097       // possible energy non-coservations of up to 1 TeV are ignored
0098       return std::pair<G4double, G4double>(10.0 * perCent, 1000.0 * GeV);
0099     }
0100 
0101   private:
0102     CRMCinterface* fInterface;
0103     // CRMCdata fCRMCdata;
0104     int fTypeOutput;
0105     G4HadFinalState* finalState;
0106     G4ParticleTable* fParticleTable;
0107     G4IonTable* fIonTable;
0108 
0109     // std::vector<G4ParticleDefinition*> fParticleDefinitions;
0110     // std::vector<G4DynamicParticle*>    fDynamicParticles;
0111     bool fPrintDebug;
0112 
0113     //
0114     std::string GetCrmcParamPath();
0115 };
0116 
0117 #endif