00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00029
00030
00031
00032
00033
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #ifndef G4AdjointIonIonisationModel_h
00047 #define G4AdjointIonIonisationModel_h 1
00048
00049 #include "globals.hh"
00050 #include "G4DynamicParticle.hh"
00051 #include "G4ParticleDefinition.hh"
00052 #include "G4MaterialCutsCouple.hh"
00053 #include "G4Material.hh"
00054 #include "G4Element.hh"
00055 #include "G4ElementVector.hh"
00056 #include "Randomize.hh"
00057 #include "G4ParticleDefinition.hh"
00058 #include "G4VEmModel.hh"
00059 #include "G4Electron.hh"
00060 #include "G4Gamma.hh"
00061 #include "G4ProductionCutsTable.hh"
00062 #include "G4VEmAdjointModel.hh"
00063 class G4PhysicsTable;
00064 class G4Region;
00065 class G4VParticleChange;
00066 class G4ParticleChange;
00067 class G4Track;
00068 class G4AdjointCSMatrix;
00069
00070
00071 class G4AdjointIonIonisationModel: public G4VEmAdjointModel
00072 {
00073
00074 public:
00075
00076 G4AdjointIonIonisationModel();
00077
00078 virtual ~G4AdjointIonIonisationModel();
00079
00080
00081 virtual void SampleSecondaries(const G4Track& aTrack,
00082 G4bool IsScatProjToProjCase,
00083 G4ParticleChange* fParticleChange);
00084
00085
00086 virtual G4double DiffCrossSectionPerAtomPrimToSecond(
00087 G4double kinEnergyProj,
00088 G4double kinEnergyProd,
00089 G4double Z,
00090 G4double A = 0.);
00091
00092 virtual void CorrectPostStepWeight(G4ParticleChange* fParticleChange,
00093 G4double old_weight,
00094 G4double adjointPrimKinEnergy,
00095 G4double projectileKinEnergy,
00096 G4bool IsScatProjToProjCase);
00097
00098
00099
00100
00101 virtual G4double GetSecondAdjEnergyMaxForScatProjToProjCase(G4double PrimAdjEnergy);
00102 virtual G4double GetSecondAdjEnergyMinForScatProjToProjCase(G4double PrimAdjEnergy,G4double Tcut=0);
00103 virtual G4double GetSecondAdjEnergyMaxForProdToProjCase(G4double PrimAdjEnergy);
00104 virtual G4double GetSecondAdjEnergyMinForProdToProjCase(G4double PrimAdjEnergy);
00105
00106 inline void SetUseOnlyBragg(G4bool aBool){use_only_bragg =aBool;}
00107
00108
00109 void SetIon(G4ParticleDefinition* adj_ion, G4ParticleDefinition* fwd_ion);
00110
00111
00112 private:
00113
00114
00115 void DefineProjectileProperty();
00116
00117
00118 G4double mass;
00119 G4double tlimit;
00120 G4double spin;
00121 G4double magMoment2;
00122 G4double chargeSquare;
00123 G4double massRatio;
00124
00125 G4double ratio, ratio2;
00126 G4double one_plus_ratio_2;
00127 G4double formfact;
00128 G4bool isIon;
00129 G4double one_minus_ratio_2;
00130
00131 G4bool use_only_bragg;
00132
00133
00134 G4VEmModel* theBraggIonDirectEMModel;
00135 G4VEmModel* theBetheBlochDirectEMModel;
00136
00137
00138
00139
00140
00141
00142
00143 };
00144
00145
00146 #endif
00147