Warning, file /include/Geant4/G4AdjointPrimaryGeneratorAction.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
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061 #ifndef G4AdjointPrimaryGeneratorAction_hh
0062 #define G4AdjointPrimaryGeneratorAction_hh 1
0063
0064 #include "G4ThreeVector.hh"
0065 #include "G4VUserPrimaryGeneratorAction.hh"
0066 #include "globals.hh"
0067
0068 #include <iterator>
0069 #include <map>
0070 #include <vector>
0071
0072 class G4AdjointPosOnPhysVolGenerator;
0073 class G4ParticleGun;
0074 class G4Event;
0075 class G4AdjointPrimaryGenerator;
0076 class G4ParticleDefinition;
0077
0078
0079
0080 class G4AdjointPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
0081 {
0082 public:
0083 G4AdjointPrimaryGeneratorAction();
0084 ~G4AdjointPrimaryGeneratorAction() override;
0085
0086 G4AdjointPrimaryGeneratorAction(const G4AdjointPrimaryGeneratorAction&) = delete;
0087 G4AdjointPrimaryGeneratorAction& operator=(const G4AdjointPrimaryGeneratorAction&) = delete;
0088
0089 void GeneratePrimaries(G4Event*) override;
0090 void SetEmin(G4double val);
0091 void SetEmax(G4double val);
0092 void SetEminIon(G4double val);
0093 void SetEmaxIon(G4double val);
0094 void SetSphericalAdjointPrimarySource(G4double radius, G4ThreeVector pos);
0095 void SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume(const G4String& volume_name);
0096 void ConsiderParticleAsPrimary(const G4String& particle_name);
0097 void NeglectParticleAsPrimary(const G4String& particle_name);
0098 void SetPrimaryIon(G4ParticleDefinition* adjointIon, G4ParticleDefinition* fwdIon);
0099 void UpdateListOfPrimaryParticles();
0100
0101 inline void SetRndmFlag(const G4String& val) { rndmFlag = val; }
0102 inline size_t GetNbOfAdjointPrimaryTypes() { return ListOfPrimaryAdjParticles.size(); }
0103 inline std::vector<G4ParticleDefinition*>* GetListOfPrimaryFwdParticles()
0104 {
0105 return &ListOfPrimaryFwdParticles;
0106 }
0107 inline const G4String& GetPrimaryIonName() { return ion_name; }
0108 inline void SetNbPrimaryFwdGammasPerEvent(G4int nb) { nb_fwd_gammas_per_event = nb; }
0109 inline void SetNbAdjointPrimaryGammasPerEvent(G4int nb)
0110 {
0111 nb_adj_primary_gammas_per_event = nb;
0112 }
0113 inline void SetNbAdjointPrimaryElectronsPerEvent(G4int nb)
0114 {
0115 nb_adj_primary_electrons_per_event = nb;
0116 }
0117 inline G4ParticleDefinition* GetLastGeneratedFwdPrimaryParticle()
0118 {
0119 return ListOfPrimaryFwdParticles[index_particle];
0120 }
0121
0122 private:
0123 G4double ComputeEnergyDistWeight(G4double energy, G4double E1, G4double E2);
0124
0125 private:
0126 G4String rndmFlag;
0127
0128
0129 G4AdjointPrimaryGenerator* theAdjointPrimaryGenerator = nullptr;
0130
0131
0132
0133 G4double Emin = 0.0;
0134 G4double Emax = 0.0;
0135 G4double EminIon = 0.0;
0136 G4double EmaxIon = 0.0;
0137
0138
0139
0140
0141 std::vector<G4ParticleDefinition*> ListOfPrimaryFwdParticles;
0142 std::vector<G4ParticleDefinition*> ListOfPrimaryAdjParticles;
0143 std::map<G4String, G4bool> PrimariesConsideredInAdjointSim;
0144
0145
0146 std::size_t index_particle = 100000;
0147
0148 G4ThreeVector pos, direction, p;
0149
0150 G4String type_of_adjoint_source;
0151 G4double radius_spherical_source = 0.0;
0152 G4ThreeVector center_spherical_source;
0153 G4int nb_fwd_gammas_per_event = 1;
0154 G4int nb_adj_primary_gammas_per_event = 1;
0155 G4int nb_adj_primary_electrons_per_event = 1;
0156
0157
0158
0159 G4ParticleDefinition* fwd_ion = nullptr;
0160 G4ParticleDefinition* adj_ion = nullptr;
0161 G4String ion_name = "not_defined";
0162 };
0163
0164 #endif