Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // Author: Alexei Sytov 27 // Co-author: Gianfranco PaternĂ² (modificat 28 // On the base of the CRYSTALRAD realization o 29 // A. I. Sytov, V. V. Tikhomirov, and L. Bandi 30 31 #ifndef G4ChannelingFastSimModel_h 32 #define G4ChannelingFastSimModel_h 1 33 34 #include "G4VFastSimulationModel.hh" 35 #include "G4Step.hh" 36 #include "G4TouchableHandle.hh" 37 #include <vector> 38 #include <CLHEP/Units/SystemOfUnits.h> 39 #include <CLHEP/Units/PhysicalConstants.h> 40 41 #include "G4ChannelingFastSimCrystalData.hh" 42 #include <unordered_map> 43 #include "G4BaierKatkov.hh" 44 #include "G4LogicalVolume.hh" 45 #include "G4ParticleTable.hh" 46 47 /** \file G4ChannelingFastSimModel.hh 48 * \brief Definition of the G4ChannelingFastSim 49 * FastSimulation Channeling model: calculates 50 * in oriented crystals in the field of crystal 51 * It is also possible to simulate radiation us 52 */ 53 54 class G4ChannelingFastSimModel : public G4VFas 55 { 56 public: 57 // Constructor, destructor 58 G4ChannelingFastSimModel (const G4String&, G 59 G4ChannelingFastSimModel (const G4String&); 60 ~G4ChannelingFastSimModel (); 61 62 /// -- IsApplicable 63 G4bool IsApplicable(const G4ParticleDefiniti 64 /// -- ModelTrigger 65 G4bool ModelTrigger(const G4FastTrack &) ove 66 /// -- User method DoIt 67 void DoIt(const G4FastTrack&, G4FastStep&) o 68 69 ///special functions 70 void Input(const G4Material* crystal, 71 const G4String &lattice) 72 {Input(crystal,lattice,"");} 73 74 void Input(const G4Material* crystal, 75 const G4String &lattice, 76 const G4String &filePath); 77 78 void RadiationModelActivate(); 79 80 G4ChannelingFastSimCrystalData* GetCrystalDa 81 82 G4BaierKatkov* GetRadiationModel() {return f 83 84 G4bool GetIfRadiationModelActive(){return fR 85 86 ///set cuts 87 void SetLowKineticEnergyLimit(G4double ekine 88 {fLowEnergyLimit[particleTable->FindParticl 89 GetParticleDefinitionID()] = eki 90 void SetLindhardAngleNumberHighLimit(G4doubl 91 {fLindhardAngleNumberHighLimit[particleTabl 92 GetParticleDefinitionID()]=angle 93 void SetHighAngleLimit(G4double anglemax, co 94 {fHighAngleLimit[particleTable->FindParticl 95 GetParticleDefinitionID 96 97 void SetDefaultLowKineticEnergyLimit(G4doubl 98 {fDefaultLowEnergyLimit=ekinetic;} 99 void SetDefaultLindhardAngleNumberHighLimit( 100 {fDefaultLindhardAngleNumberHighLim 101 void SetDefaultHighAngleLimit(G4double angle 102 {fDefaultHighAngleLimit=anglemax;} 103 104 105 /// get the maximal number of photons that c 106 /// Caution: is redundant, if the radiation 107 void SetMaxPhotonsProducedPerStep(G4double n 108 {fMaxPhotonsProducedPerStep=nPhoton 109 110 ///get cuts 111 G4double GetLowKineticEnergyLimit(G4int part 112 {return (fLowEnergyLimit.count( 113 ? fLowEnergyLimit[part 114 : fDefaultLowEnergyLim 115 G4double GetLindhardAngleNumberHighLimit(G4i 116 {return (fLindhardAngleNumberHi 117 ? fLindhardAngleNumber 118 : fDefaultLindhardAngl 119 G4double GetHighAngleLimit(G4int particleDef 120 {return (fHighAngleLimit.count( 121 ? fHighAngleLimi 122 : fDefaultHighAn 123 124 /// get the maximal number of photons that c 125 G4int GetMaxPhotonsProducedPerStep(){return 126 127 private: 128 129 G4ChannelingFastSimCrystalData* fCrystalData 130 G4BaierKatkov* fBaierKatkov{nullptr}; 131 132 G4ParticleTable* particleTable = G4ParticleT 133 134 ///flag of radiation model 135 G4bool fRad = false; 136 137 /// maps of cuts (angular cuts are chosen as 138 /// fHighAngleLimit and calculated Lindhard 139 std::unordered_map<G4int, G4double> fLowEner 140 std::unordered_map<G4int, G4double> fLindhar 141 std::unordered_map<G4int, G4double> fHighAng 142 143 G4double fDefaultLowEnergyLimit = 200*CLHEP: 144 G4double fDefaultLindhardAngleNumberHighLimi 145 G4double fDefaultHighAngleLimit = 0.; 146 147 /// the maximal number of photons that can b 148 G4int fMaxPhotonsProducedPerStep=1000.; 149 150 }; 151 #endif 152 153 154 155 156