70 G4UnitDefinition::BuildUnitsTable();
72 G4ParticleDefinition* gamma = G4Gamma::Gamma();
73 G4ParticleDefinition* posit = G4Positron::Positron();
74 G4ParticleDefinition* elec = G4Electron::Electron();
75 G4ParticleDefinition* prot = G4Proton::Proton();
76 G4ParticleDefinition* muon = G4MuonPlus::MuonPlus();
77 G4ParticleTable* partTable = G4ParticleTable::GetParticleTable();
78 partTable->SetReadiness();
81 cuts.push_back(1*keV);
85 G4Material* material =
86 G4NistManager::Instance()->FindOrBuildMaterial(
"G4_Fe");
88 G4cout << *(G4Material::GetMaterialTable()) << G4endl;
90 G4MaterialCutsCouple* couple =
new G4MaterialCutsCouple(material);
94 G4double
Z = material->GetZ();
95 G4double A = material->GetA();
99 G4VEmModel*
phot =
new G4PEEffectFluoModel();
100 G4VEmModel* comp =
new G4KleinNishinaCompton();
101 G4VEmModel* conv =
new G4BetheHeitlerModel();
102 phot->Initialise(gamma, cuts);
103 comp->Initialise(gamma, cuts);
104 conv->Initialise(gamma, cuts);
107 phot->SetCurrentCouple(couple);
111 G4double Emin = 1.01*MeV, Emax = 2.01*MeV, dE = 100*keV;
113 G4cout <<
"\n #### Gamma : CrossSectionPerAtom and MeanFreePath for " 114 << material->GetName() << G4endl;
115 G4cout <<
"\n Energy \t PhotoElec \t Compton \t Conversion \t";
116 G4cout <<
"\t PhotoElec \t Compton \t Conversion" << G4endl;
118 for (G4double Energy = Emin; Energy <= Emax; Energy += dE) {
119 G4cout <<
"\n " << G4BestUnit (Energy,
"Energy")
121 << G4BestUnit (phot->ComputeCrossSectionPerAtom(gamma,Energy,Z),
"Surface")
123 << G4BestUnit (comp->ComputeCrossSectionPerAtom(gamma,Energy,Z),
"Surface")
125 << G4BestUnit (conv->ComputeCrossSectionPerAtom(gamma,Energy,Z),
"Surface")
127 << G4BestUnit (phot->ComputeMeanFreePath(gamma,Energy,material),
"Length")
129 << G4BestUnit (comp->ComputeMeanFreePath(gamma,Energy,material),
"Length")
131 << G4BestUnit (conv->ComputeMeanFreePath(gamma,Energy,material),
"Length");
138 G4VEmModel* anni =
new G4eeToTwoGammaModel();
139 anni->Initialise(posit, cuts);
143 Emin = 1.01*MeV; Emax = 2.01*MeV; dE = 100*keV;
145 G4cout <<
"\n #### e+ annihilation : CrossSectionPerAtom and MeanFreePath" 146 <<
" for " << material->GetName() << G4endl;
147 G4cout <<
"\n Energy \t e+ annihil \t";
148 G4cout <<
"\t e+ annihil" << G4endl;
150 for (G4double Energy = Emin; Energy <= Emax; Energy += dE) {
151 G4cout <<
"\n " << G4BestUnit (Energy,
"Energy")
153 << G4BestUnit (anni->ComputeCrossSectionPerAtom(posit,Energy,Z),
"Surface")
155 << G4BestUnit (anni->ComputeMeanFreePath(posit,Energy,material),
"Length");
162 G4VEmModel* ioni =
new G4MollerBhabhaModel();
163 G4VEmModel* brem =
new G4SeltzerBergerModel();
164 ioni->Initialise(elec, cuts);
165 brem->Initialise(elec, cuts);
169 Emin = 1.01*MeV; Emax = 101.01*MeV; dE = 10*MeV;
170 G4double Ecut = 100*keV;
172 G4cout <<
"\n ####electron: CrossSection, MeanFreePath and StoppingPower" 173 <<
" for " << material->GetName()
174 <<
";\tEnergy cut = " << G4BestUnit (Ecut,
"Energy") << G4endl;
176 G4cout <<
"\n Energy \t ionization \t bremsstra \t";
177 G4cout <<
"\t ionization \t bremsstra \t";
178 G4cout <<
"\t ionization \t bremsstra" << G4endl;
180 for (G4double Energy = Emin; Energy <= Emax; Energy += dE) {
181 G4cout <<
"\n " << G4BestUnit (Energy,
"Energy")
183 << G4BestUnit (ioni->ComputeCrossSectionPerAtom(elec,Energy,Z,A,Ecut),
186 << G4BestUnit (brem->ComputeCrossSectionPerAtom(elec,Energy,Z,A,Ecut),
189 << G4BestUnit (ioni->ComputeMeanFreePath(elec,Energy,material,Ecut),
192 << G4BestUnit (brem->ComputeMeanFreePath(elec,Energy,material,Ecut),
195 << G4BestUnit (ioni->ComputeDEDXPerVolume(material,elec,Energy,Ecut),
198 << G4BestUnit (brem->ComputeDEDXPerVolume(material,elec,Energy,Ecut),
206 ioni =
new G4BetheBlochModel();
207 ioni->Initialise(prot, cuts);
211 Emin = 1.01*MeV; Emax = 102.01*MeV; dE = 10*MeV;
214 G4cout <<
"\n #### proton : CrossSection, MeanFreePath and StoppingPower" 215 <<
" for " << material->GetName()
216 <<
";\tEnergy cut = " << G4BestUnit (Ecut,
"Energy") << G4endl;
218 G4cout <<
"\n Energy \t ionization \t";
219 G4cout <<
"\t ionization \t";
220 G4cout <<
"\t ionization" << G4endl;
222 for (G4double Energy = Emin; Energy <= Emax; Energy += dE) {
223 G4cout <<
"\n " << G4BestUnit (Energy,
"Energy")
225 << G4BestUnit (ioni->ComputeCrossSectionPerAtom(prot,Energy,Z,A,Ecut),
228 << G4BestUnit (ioni->ComputeMeanFreePath(prot,Energy,material,Ecut),
231 << G4BestUnit (ioni->ComputeDEDXPerVolume(material,prot,Energy,Ecut),
238 ioni =
new G4BraggModel(prot);
239 ioni->Initialise(prot, cuts);
243 Emin = 1.1*keV; Emax = 2.01*MeV; dE = 300*keV;
246 G4cout <<
"\n #### proton : low energy model (Bragg) " 247 <<
";\tEnergy cut = " << G4BestUnit (Ecut,
"Energy") << G4endl;
249 G4cout <<
"\n Energy \t ionization \t";
250 G4cout <<
"\t ionization \t";
251 G4cout <<
"\t ionization" << G4endl;
253 for (G4double Energy = Emin; Energy <= Emax; Energy += dE) {
254 G4cout <<
"\n " << G4BestUnit (Energy,
"Energy")
256 << G4BestUnit (ioni->ComputeCrossSectionPerAtom(prot,Energy,Z,A,Ecut),
259 << G4BestUnit (ioni->ComputeMeanFreePath(prot,Energy,material,Ecut),
262 << G4BestUnit (ioni->ComputeDEDXPerVolume(material,prot,Energy,Ecut),
270 ioni =
new G4MuBetheBlochModel();
271 brem =
new G4MuBremsstrahlungModel();
272 G4VEmModel* pair =
new G4MuPairProductionModel();
273 ioni->Initialise(muon, cuts);
274 brem->Initialise(muon, cuts);
275 pair->Initialise(muon, cuts);
279 Emin = 1.01*GeV; Emax = 101.01*GeV; dE = 10*GeV;
282 G4cout <<
"\n ####muon: CrossSection and MeanFreePath for " 283 << material->GetName()
284 <<
";\tEnergy cut = " << G4BestUnit (Ecut,
"Energy") << G4endl;
286 G4cout <<
"\n Energy \t ionization \t bremsstra \t pair_prod \t";
287 G4cout <<
"\t ionization \t bremsstra \t pair_prod" << G4endl;
289 for (G4double Energy = Emin; Energy <= Emax; Energy += dE) {
290 G4cout <<
"\n " << G4BestUnit (Energy,
"Energy")
292 << G4BestUnit (ioni->ComputeCrossSectionPerAtom(muon,Energy,Z,A,Ecut),
295 << G4BestUnit (brem->ComputeCrossSectionPerAtom(muon,Energy,Z,A,Ecut),
298 << G4BestUnit (pair->ComputeCrossSectionPerAtom(muon,Energy,Z,A,Ecut),
301 << G4BestUnit (ioni->ComputeMeanFreePath(muon,Energy,material,Ecut),
304 << G4BestUnit (brem->ComputeMeanFreePath(muon,Energy,material,Ecut),
307 << G4BestUnit (pair->ComputeMeanFreePath(muon,Energy,material,Ecut),
313 G4cout <<
"\n ####muon: StoppingPower for " 314 << material->GetName()
315 <<
";\tEnergy cut = " << G4BestUnit (Ecut,
"Energy") << G4endl;
317 G4cout <<
"\n Energy \t ionization \t bremsstra \t pair_prod \t" << G4endl;
319 for (G4double Energy = Emin; Energy <= Emax; Energy += dE) {
320 G4cout <<
"\n " << G4BestUnit (Energy,
"Energy")
322 << G4BestUnit (ioni->ComputeDEDXPerVolume(material,muon,Energy,Ecut),
325 << G4BestUnit (brem->ComputeDEDXPerVolume(material,muon,Energy,Ecut),
328 << G4BestUnit (pair->ComputeDEDXPerVolume(material,muon,Energy,Ecut),
General LArSoft Utilities.