Warning, file /include/Geant4/G4ChannelingFastSimModel.hh was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #ifndef G4ChannelingFastSimModel_h
0032 #define G4ChannelingFastSimModel_h 1
0033
0034 #include "G4VFastSimulationModel.hh"
0035 #include "globals.hh"
0036 #include "G4ios.hh"
0037
0038 #include "G4ChannelingFastSimCrystalData.hh"
0039 #include <unordered_map>
0040 #include "G4BaierKatkov.hh"
0041 #include "G4LogicalVolume.hh"
0042 #include "G4ParticleTable.hh"
0043
0044
0045
0046
0047
0048
0049
0050
0051 class G4ChannelingFastSimModel : public G4VFastSimulationModel
0052 {
0053 public:
0054
0055 G4ChannelingFastSimModel (const G4String&, G4Region*);
0056 G4ChannelingFastSimModel (const G4String&);
0057 ~G4ChannelingFastSimModel () = default;
0058
0059
0060 G4bool IsApplicable(const G4ParticleDefinition&) override;
0061
0062 G4bool ModelTrigger(const G4FastTrack &) override;
0063
0064 void DoIt(const G4FastTrack&, G4FastStep&) override;
0065
0066
0067 void Input(const G4Material* crystal,
0068 const G4String &lattice)
0069 {Input(crystal,lattice,"");}
0070
0071 void Input(const G4Material* crystal,
0072 const G4String &lattice,
0073 const G4String &filePath);
0074
0075 void RadiationModelActivate();
0076
0077 G4ChannelingFastSimCrystalData* GetCrystalData() {return fCrystalData;}
0078
0079 G4BaierKatkov* GetRadiationModel() {return fBaierKatkov;}
0080
0081 G4bool GetIfRadiationModelActive(){return fRad;}
0082
0083
0084 void SetLowKineticEnergyLimit(G4double ekinetic, const G4String& particleName)
0085 {fLowEnergyLimit[particleTable->FindParticle(particleName)->
0086 GetParticleDefinitionID()] = ekinetic;}
0087 void SetLindhardAngleNumberHighLimit(G4double angleNumber, const G4String& particleName)
0088 {fLindhardAngleNumberHighLimit[particleTable->FindParticle(particleName)->
0089 GetParticleDefinitionID()]=angleNumber;}
0090 void SetHighAngleLimit(G4double anglemax, const G4String& particleName)
0091 {fHighAngleLimit[particleTable->FindParticle(particleName)->
0092 GetParticleDefinitionID()] = anglemax;}
0093
0094 void SetDefaultLowKineticEnergyLimit(G4double ekinetic)
0095 {fDefaultLowEnergyLimit=ekinetic;}
0096 void SetDefaultLindhardAngleNumberHighLimit(G4double angleNumber)
0097 {fDefaultLindhardAngleNumberHighLimit=angleNumber;}
0098 void SetDefaultHighAngleLimit(G4double anglemax)
0099 {fDefaultHighAngleLimit=anglemax;}
0100
0101
0102
0103
0104 void SetMaxPhotonsProducedPerStep(G4double nPhotons)
0105 {fMaxPhotonsProducedPerStep=nPhotons;}
0106
0107
0108 G4double GetLowKineticEnergyLimit(G4int particleDefinitionID)
0109 {return (fLowEnergyLimit.count(particleDefinitionID) == 1)
0110 ? fLowEnergyLimit[particleDefinitionID]
0111 : fDefaultLowEnergyLimit;}
0112 G4double GetLindhardAngleNumberHighLimit(G4int particleDefinitionID)
0113 {return (fLindhardAngleNumberHighLimit.count(particleDefinitionID) == 1)
0114 ? fLindhardAngleNumberHighLimit[particleDefinitionID]
0115 : fDefaultLindhardAngleNumberHighLimit;}
0116 G4double GetHighAngleLimit(G4int particleDefinitionID)
0117 {return (fHighAngleLimit.count(particleDefinitionID) == 1)
0118 ? fHighAngleLimit[particleDefinitionID]
0119 : fDefaultHighAngleLimit;}
0120
0121
0122 G4int GetMaxPhotonsProducedPerStep(){return fMaxPhotonsProducedPerStep;}
0123
0124 private:
0125
0126 G4ChannelingFastSimCrystalData* fCrystalData{nullptr};
0127 G4BaierKatkov* fBaierKatkov{nullptr};
0128
0129 G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
0130
0131
0132 G4bool fRad = false;
0133
0134
0135
0136 std::unordered_map<G4int, G4double> fLowEnergyLimit;
0137 std::unordered_map<G4int, G4double> fLindhardAngleNumberHighLimit;
0138 std::unordered_map<G4int, G4double> fHighAngleLimit;
0139
0140 G4double fDefaultLowEnergyLimit = 200*CLHEP::MeV;
0141 G4double fDefaultLindhardAngleNumberHighLimit = 100.;
0142 G4double fDefaultHighAngleLimit = 0.;
0143
0144
0145 G4int fMaxPhotonsProducedPerStep=1000.;
0146
0147 };
0148 #endif
0149
0150
0151
0152