Back to home page

EIC code displayed by LXR

 
 

    


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

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 // Authors: S. Meylan and C. Villagrasa (IRSN, France)
0027 // Models come from
0028 // M. Bug et al, Rad. Phys and Chem. 130, 459-479 (2017)
0029 //
0030 
0031 #ifndef G4DNAPTBExcitationModel_h
0032 #define G4DNAPTBExcitationModel_h 1
0033 
0034 #include "G4DNACrossSectionDataSet.hh"
0035 #include "G4DNAPTBExcitationStructure.hh"
0036 #include "G4DNAPTBIonisationStructure.hh"
0037 #include "G4DNAWaterExcitationStructure.hh"
0038 #include "G4Electron.hh"
0039 #include "G4LogLogInterpolation.hh"
0040 #include "G4NistManager.hh"
0041 #include "G4ParticleChangeForGamma.hh"
0042 #include "G4ProductionCutsTable.hh"
0043 #include "G4Proton.hh"
0044 #include "G4VDNAModel.hh"
0045 /*!
0046  * \brief The G4DNAPTBExcitationModel class
0047  * This class implements the PTB excitation model.
0048  */
0049 class G4Material;
0050 class G4DNAPTBExcitationModel : public G4VDNAModel
0051 {
0052  public:
0053   using MapMeanEnergy = std::map<std::size_t, G4double>;
0054   /*!
0055    * \brief G4DNAPTBExcitationModel
0056    * Constructor
0057    * \param applyToMaterial
0058    * \param p
0059    * \param nam
0060    */
0061   G4DNAPTBExcitationModel(const G4String& applyToMaterial = "all",
0062     const G4ParticleDefinition* p = nullptr, const G4String& nam = "DNAPTBExcitationModel");
0063 
0064   /*!
0065    * \brief ~G4DNAPTBExcitationModel
0066    * Destructor
0067    */
0068   ~G4DNAPTBExcitationModel() override = default;
0069 
0070   // copy constructor and hide assignment operator
0071   G4DNAPTBExcitationModel(const G4DNAPTBExcitationModel&) = delete;  // prevent copy-construction
0072   G4DNAPTBExcitationModel& operator=(
0073     const G4DNAPTBExcitationModel& right) = delete;  // prevent assignement
0074 
0075   /*!
0076    * \brief Initialise
0077    * Set the materials for which the model can be used and defined the energy limits
0078    */
0079   void Initialise(const G4ParticleDefinition* particle, const G4DataVector&) override;
0080 
0081   /*!
0082    * \brief CrossSectionPerVolume
0083    * Retrieve the cross section corresponding to the current material, particle and energy
0084    * \param material
0085    * \param materialName
0086    * \param p
0087    * \param ekin
0088    * \param emin
0089    * \param emax
0090    * \return the cross section value
0091    */
0092   G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p,
0093     G4double ekin, G4double emin, G4double emax) override;
0094 
0095   /*!
0096    * \brief SampleSecondaries
0097    * If the model is selected for the ModelInterface then the SampleSecondaries method will be
0098    * called. The method sets the incident particle characteristics after the ModelInterface. \param
0099    * materialName \param particleChangeForGamma \param tmin \param tmax
0100    */
0101   void SampleSecondaries(std::vector<G4DynamicParticle*>*, const G4MaterialCutsCouple*,
0102     const G4DynamicParticle*, G4double tmin, G4double tmax) override;
0103 
0104   G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr;
0105 
0106  private:
0107   G4int verboseLevel = 0;  ///< verbose level
0108   // Verbosity scale:
0109   // 0 = nothing
0110   // 1 = warning for energy non-conservation
0111   // 2 = details of energy budget
0112   // 3 = calculation of cross sections, file openings, sampling of atoms
0113   // 4 = entering in methods
0114   G4DNAWaterExcitationStructure waterStructure;
0115 
0116   G4DNAPTBExcitationStructure ptbExcitationStructure;
0117   G4DNAPTBIonisationStructure ptbIonisationStructure;
0118 
0119   MapMeanEnergy fTableMeanEnergyPTB;  ///< map: [materialName]=energyValue
0120 
0121   G4Material* fpGuanine_PU = nullptr;
0122   G4Material* fpTHF = nullptr;
0123   G4Material* fpPY = nullptr;
0124   G4Material* fpPU = nullptr;
0125   G4Material* fpTMP = nullptr;
0126   G4Material* fpG4_WATER = nullptr;
0127   G4Material* fpBackbone_THF = nullptr;
0128   G4Material* fpCytosine_PY = nullptr;
0129   G4Material* fpThymine_PY = nullptr;
0130   G4Material* fpAdenine_PU = nullptr;
0131   G4Material* fpBackbone_TMP = nullptr;
0132   G4Material* fpN2 = nullptr;
0133   G4DNAPTBExcitationModel* fpModelData = nullptr;
0134 
0135 };
0136 
0137 #endif