Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4EmDNAPhysicsActivator Class Reference

#include <G4EmDNAPhysicsActivator.hh>

Inheritance diagram for G4EmDNAPhysicsActivator:
Collaboration diagram for G4EmDNAPhysicsActivator:

Public Member Functions

 G4EmDNAPhysicsActivator (G4int ver=1)
 
virtual ~G4EmDNAPhysicsActivator ()
 
virtual void ConstructParticle ()
 
virtual void ConstructProcess ()
 
- Public Member Functions inherited from G4VPhysicsConstructor
 G4VPhysicsConstructor (const G4String &="")
 
 G4VPhysicsConstructor (const G4String &name, G4int physics_type)
 
virtual ~G4VPhysicsConstructor ()
 
void SetPhysicsName (const G4String &="")
 
const G4StringGetPhysicsName () const
 
void SetPhysicsType (G4int)
 
G4int GetPhysicsType () const
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
G4int GetInstanceID () const
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VPhysicsConstructor
static const G4VPCManagerGetSubInstanceManager ()
 
- Protected Member Functions inherited from G4VPhysicsConstructor
G4bool RegisterProcess (G4VProcess *process, G4ParticleDefinition *particle)
 
G4ParticleTable::G4PTblDicIteratorGetParticleIterator () const
 
- Protected Attributes inherited from G4VPhysicsConstructor
G4int verboseLevel
 
G4String namePhysics
 
G4int typePhysics
 
G4ParticleTabletheParticleTable
 
G4int g4vpcInstanceID
 
- Static Protected Attributes inherited from G4VPhysicsConstructor
static G4RUN_DLL G4VPCManager subInstanceManager
 

Detailed Description

Definition at line 41 of file G4EmDNAPhysicsActivator.hh.

Constructor & Destructor Documentation

G4EmDNAPhysicsActivator::G4EmDNAPhysicsActivator ( G4int  ver = 1)

Definition at line 95 of file G4EmDNAPhysicsActivator.cc.

96  : G4VPhysicsConstructor("G4EmDNAPhysicsActivator"), verbose(ver)
97 {
98  theParameters = G4EmParameters::Instance();
99 }
static G4EmParameters * Instance()
G4VPhysicsConstructor(const G4String &="")

Here is the call graph for this function:

G4EmDNAPhysicsActivator::~G4EmDNAPhysicsActivator ( )
virtual

Definition at line 103 of file G4EmDNAPhysicsActivator.cc.

104 {}

Member Function Documentation

void G4EmDNAPhysicsActivator::ConstructParticle ( )
virtual

Implements G4VPhysicsConstructor.

Definition at line 113 of file G4EmDNAPhysicsActivator.cc.

114 {
115 // bosons
116  G4Gamma::Gamma();
117 
118 // leptons
121 
122 // baryons
124 
126 
127  G4DNAGenericIonsManager * genericIonsManager;
128  genericIonsManager=G4DNAGenericIonsManager::Instance();
129  genericIonsManager->GetIon("alpha++");
130  genericIonsManager->GetIon("alpha+");
131  genericIonsManager->GetIon("helium");
132  genericIonsManager->GetIon("hydrogen");
133  //genericIonsManager->GetIon("carbon");
134  //genericIonsManager->GetIon("nitrogen");
135  //genericIonsManager->GetIon("oxygen");
136  //genericIonsManager->GetIon("iron");
137 
138 }
static G4GenericIon * GenericIonDefinition()
Definition: G4GenericIon.cc:88
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4DNAGenericIonsManager * Instance(void)
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
static G4Positron * Positron()
Definition: G4Positron.cc:94
static G4Electron * Electron()
Definition: G4Electron.cc:94
G4ParticleDefinition * GetIon(const G4String &name)

Here is the call graph for this function:

void G4EmDNAPhysicsActivator::ConstructProcess ( )
virtual

Implements G4VPhysicsConstructor.

Definition at line 142 of file G4EmDNAPhysicsActivator.cc.

143 {
144  const std::vector<G4String>& regnamesDNA = theParameters->RegionsDNA();
145  G4int nreg = regnamesDNA.size();
146  if(0 == nreg)
147  {
148  return;
149  }
150  const std::vector<G4String>& typesDNA = theParameters->TypesDNA();
151 
152  if(IsVerbose())
153  {
154  G4cout << "### G4EmDNAPhysicsActivator::ConstructProcess for " << nreg
155  << " regions; DNA physics type " << typesDNA[0] << G4endl;
156  }
157 
158  // list of particles
160  const G4ParticleDefinition* prot = G4Proton::Proton();
162 
163  G4DNAGenericIonsManager * genericIonsManager =
165  const G4ParticleDefinition* alpha2 = G4Alpha::Alpha();
166  const G4ParticleDefinition* alpha1 = genericIonsManager->GetIon("alpha+");
167  const G4ParticleDefinition* alpha0 = genericIonsManager->GetIon("helium");
168  const G4ParticleDefinition* h0 = genericIonsManager->GetIon("hydrogen");
169 
170  G4ProcessManager* eman = elec->GetProcessManager();
171  G4ProcessManager* pman = prot->GetProcessManager();
172  G4ProcessManager* iman = gion->GetProcessManager();
173  G4ProcessManager* a2man = alpha2->GetProcessManager();
174  G4ProcessManager* a1man = alpha1->GetProcessManager();
175  G4ProcessManager* a0man = alpha0->GetProcessManager();
176  G4ProcessManager* h0man = h0->GetProcessManager();
177 
178  G4bool emsc = HasMsc(eman);
179  G4bool pmsc = HasMsc(pman);
180  G4bool a2msc = HasMsc(a2man);
181  G4bool a1msc = HasMsc(a1man);
182  G4bool imsc = HasMsc(iman);
183 
184  // alpha+ standard processes
186  G4ParticleDefinition* alpha11 = const_cast<G4ParticleDefinition*>(alpha1);
187  ph->RegisterProcess(new G4hMultipleScattering(), alpha11);
188  ph->RegisterProcess(new G4ionIonisation(), alpha11);
189 
190  // processes are defined with dummy models for the world
191  // elastic scatetring
192  G4DNAElastic* theDNAeElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
193  theDNAeElasticProcess->AddEmModel(0, new G4DummyModel());
194  eman->AddDiscreteProcess(theDNAeElasticProcess);
195 
196  G4DNAElastic* theDNApElasticProcess = new G4DNAElastic("proton_G4DNAElastic");
197  theDNApElasticProcess->AddEmModel(0, new G4DummyModel());
198  pman->AddDiscreteProcess(theDNApElasticProcess);
199 
200  G4DNAElastic* theDNAa2ElasticProcess = new G4DNAElastic("alpha_G4DNAElastic");
201  theDNAa2ElasticProcess->AddEmModel(0, new G4DummyModel());
202  a2man->AddDiscreteProcess(theDNAa2ElasticProcess);
203 
204  G4DNAElastic* theDNAa1ElasticProcess =
205  new G4DNAElastic("alpha+_G4DNAElastic");
206  theDNAa1ElasticProcess->AddEmModel(0, new G4DummyModel());
207  a1man->AddDiscreteProcess(theDNAa1ElasticProcess);
208 
209  G4DNAElastic* theDNAa0ElasticProcess =
210  new G4DNAElastic("helium_G4DNAElastic");
211  theDNAa0ElasticProcess->AddEmModel(0, new G4DummyModel());
212  a0man->AddDiscreteProcess(theDNAa0ElasticProcess);
213 
214  G4DNAElastic* theDNAh0ElasticProcess =
215  new G4DNAElastic("hydrogen_G4DNAElastic");
216  theDNAh0ElasticProcess->AddEmModel(0, new G4DummyModel());
217  h0man->AddDiscreteProcess(theDNAh0ElasticProcess);
218 
219  // excitation
220  G4DNAExcitation* theDNAeExcProcess =
221  new G4DNAExcitation("e-_G4DNAExcitation");
222  theDNAeExcProcess->AddEmModel(0, new G4DummyModel());
223  eman->AddDiscreteProcess(theDNAeExcProcess);
224 
225  G4DNAExcitation* theDNApExcProcess =
226  new G4DNAExcitation("proton_G4DNAExcitation");
227  theDNApExcProcess->AddEmModel(0, new G4DummyModel());
228  pman->AddDiscreteProcess(theDNApExcProcess);
229 
230  G4DNAExcitation* theDNAa2ExcProcess =
231  new G4DNAExcitation("alpha_G4DNAExcitation");
232  theDNAa2ExcProcess->AddEmModel(0, new G4DummyModel());
233  a2man->AddDiscreteProcess(theDNAa2ExcProcess);
234 
235  G4DNAExcitation* theDNAa1ExcProcess =
236  new G4DNAExcitation("alpha+_G4DNAExcitation");
237  theDNAa1ExcProcess->AddEmModel(0, new G4DummyModel());
238  a1man->AddDiscreteProcess(theDNAa1ExcProcess);
239 
240  G4DNAExcitation* theDNAa0ExcProcess =
241  new G4DNAExcitation("helium_G4DNAExcitation");
242  theDNAa0ExcProcess->AddEmModel(0, new G4DummyModel());
243  a0man->AddDiscreteProcess(theDNAa0ExcProcess);
244 
245  G4DNAExcitation* theDNAh0ExcProcess =
246  new G4DNAExcitation("hydrogen_G4DNAExcitation");
247  theDNAh0ExcProcess->AddEmModel(0, new G4DummyModel());
248  h0man->AddDiscreteProcess(theDNAh0ExcProcess);
249 
250  // vibration excitation
251  G4DNAVibExcitation* theDNAeVibExcProcess =
252  new G4DNAVibExcitation("e-_G4DNAVibExcitation");
253  theDNAeVibExcProcess->AddEmModel(0, new G4DummyModel());
254  eman->AddDiscreteProcess(theDNAeVibExcProcess);
255 
256  // ionisation
257  G4DNAIonisation* theDNAeIoniProcess =
258  new G4DNAIonisation("e-_G4DNAIonisation");
259  theDNAeIoniProcess->AddEmModel(0, new G4DummyModel());
260  eman->AddDiscreteProcess(theDNAeIoniProcess);
261 
262  G4DNAIonisation* theDNApIoniProcess =
263  new G4DNAIonisation("proton_G4DNAIonisation");
264  theDNApIoniProcess->AddEmModel(0, new G4DummyModel());
265  pman->AddDiscreteProcess(theDNApIoniProcess);
266 
267  G4DNAIonisation* theDNAa2IoniProcess =
268  new G4DNAIonisation("alpha_G4DNAIonisation");
269  theDNAa2IoniProcess->AddEmModel(0, new G4DummyModel());
270  a2man->AddDiscreteProcess(theDNAa2IoniProcess);
271 
272  G4DNAIonisation* theDNAa1IoniProcess =
273  new G4DNAIonisation("alpha+_G4DNAIonisation");
274  theDNAa1IoniProcess->AddEmModel(0, new G4DummyModel());
275  a1man->AddDiscreteProcess(theDNAa1IoniProcess);
276 
277  G4DNAIonisation* theDNAa0IoniProcess =
278  new G4DNAIonisation("helium_G4DNAIonisation");
279  theDNAa0IoniProcess->AddEmModel(0, new G4DummyModel());
280  a0man->AddDiscreteProcess(theDNAa0IoniProcess);
281 
282  G4DNAIonisation* theDNAh0IoniProcess =
283  new G4DNAIonisation("hydrogen_G4DNAIonisation");
284  theDNAh0IoniProcess->AddEmModel(0, new G4DummyModel());
285  h0man->AddDiscreteProcess(theDNAh0IoniProcess);
286 
287  G4DNAIonisation* theDNAiIoniProcess =
288  new G4DNAIonisation("GenericIon_G4DNAIonisation");
289  theDNAiIoniProcess->AddEmModel(0, new G4DummyModel());
290  iman->AddDiscreteProcess(theDNAiIoniProcess);
291 
292  // attachment
293  G4DNAAttachment* theDNAAttachProcess =
294  new G4DNAAttachment("e-_G4DNAAttachment");
295  theDNAAttachProcess->AddEmModel(0, new G4DummyModel());
296  eman->AddDiscreteProcess(theDNAAttachProcess);
297 
298  // charge exchange
299  G4DNAChargeDecrease* theDNApChargeDecreaseProcess =
300  new G4DNAChargeDecrease("proton_G4DNAChargeDecrease");
301  theDNApChargeDecreaseProcess->AddEmModel(0, new G4DummyModel());
302  pman->AddDiscreteProcess(theDNApChargeDecreaseProcess);
303 
304  G4DNAChargeDecrease* theDNAa2ChargeDecreaseProcess =
305  new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease");
306  theDNAa2ChargeDecreaseProcess->AddEmModel(0, new G4DummyModel());
307  a2man->AddDiscreteProcess(theDNAa2ChargeDecreaseProcess);
308 
309  G4DNAChargeDecrease* theDNAa1ChargeDecreaseProcess =
310  new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease");
311  theDNAa1ChargeDecreaseProcess->AddEmModel(0, new G4DummyModel());
312  a1man->AddDiscreteProcess(theDNAa1ChargeDecreaseProcess);
313 
314  G4DNAChargeIncrease* theDNAa1ChargeIncreaseProcess =
315  new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease");
316  theDNAa1ChargeIncreaseProcess->AddEmModel(0, new G4DummyModel());
317  a1man->AddDiscreteProcess(theDNAa1ChargeIncreaseProcess);
318 
319  G4DNAChargeIncrease* theDNAa0ChargeIncreaseProcess =
320  new G4DNAChargeIncrease("helium_G4DNAChargeIncrease");
321  theDNAa0ChargeIncreaseProcess->AddEmModel(0, new G4DummyModel());
322  a0man->AddDiscreteProcess(theDNAa0ChargeIncreaseProcess);
323 
324  G4DNAChargeIncrease* theDNAh0ChargeIncreaseProcess =
325  new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease");
326  theDNAh0ChargeIncreaseProcess->AddEmModel(0, new G4DummyModel());
327  h0man->AddDiscreteProcess(theDNAh0ChargeIncreaseProcess);
328 
329  // limits for DNA model applicability
330  static const G4double elowest= 4. * eV;
331  static const G4double elimel = 1 * MeV;
332  static const G4double pminbb = 2 * MeV;
333  static const G4double pmin = 10 * keV;
334  static const G4double pmax = 100 * MeV;
335  static const G4double ionmin = 10 * keV;
336 
337  // low-energy capture
338  G4LowECapture* ecap = nullptr;
340  {
341  // Note: G4DNAElectronSolvation could also be used instead of G4LowECapture
342  ecap = new G4LowECapture(elowest);
343  // ecap->SetVerboseLevel(1);
344  eman->AddDiscreteProcess(ecap);
345  }
346  else
347  {
348  // When chemistry is activated: G4DNAElectronSolvation turns the electron
349  // to a solvated electron, otherwise it kills the electron at the
350  // corresponding high energy limit of the model
351  G4DNAElectronSolvation* solvatation =
352  new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
353  solvatation->AddEmModel(0, new G4DummyModel());
354  eman->AddDiscreteProcess(solvatation);
355  }
356 
357  G4LowECapture* pcap = new G4LowECapture(pmin);
358  pman->AddDiscreteProcess(pcap);
359  G4LowECapture* icap = new G4LowECapture(ionmin);
360  iman->AddDiscreteProcess(icap);
361  G4LowECapture* a2cap = new G4LowECapture(ionmin);
362  a2man->AddDiscreteProcess(a2cap);
363  G4LowECapture* a1cap = new G4LowECapture(ionmin);
364  a1man->AddDiscreteProcess(a1cap);
365  G4LowECapture* a0cap = new G4LowECapture(ionmin);
366  a0man->AddDiscreteProcess(a0cap);
367  G4LowECapture* h0cap = new G4LowECapture(ionmin);
368  h0man->AddDiscreteProcess(h0cap);
369 
370  // loop over regions
371  for(G4int i = 0; i < nreg; ++i)
372  {
373  G4String reg = regnamesDNA[i];
374  if(IsVerbose()) {
375  G4cout << "### DNA models type " << typesDNA[i]
376  << " are activated for G4Region " << reg << G4endl;
377  }
378 
379  // type of DNA physics
380  G4int itype = 0;
381 
382  if(0 == itype) {
383  AddElectronModels0(reg, ecap, emsc, elowest, elimel);
384  AddProtonModels0(reg, pmsc, elimel, pminbb, pmin, pmax);
385  AddHeliumModels0(reg, a1msc, a2msc, elimel, pminbb, pmin, pmax);
386  AddGenericIonModels0(reg, imsc, elimel, pminbb, pmin);
387  }
388  }
389 }
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
const std::vector< G4String > & TypesDNA() const
int G4int
Definition: G4Types.hh:78
static const G4double reg
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4Proton * Proton()
Definition: G4Proton.cc:93
static constexpr double eV
Definition: G4SIunits.hh:215
static G4DNAGenericIonsManager * Instance(void)
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=nullptr)
static G4GenericIon * GenericIon()
Definition: G4GenericIon.cc:93
G4ProcessManager * GetProcessManager() const
static G4PhysicsListHelper * GetPhysicsListHelper()
const std::vector< G4String > & RegionsDNA() const
static G4Electron * Electron()
Definition: G4Electron.cc:94
#define G4endl
Definition: G4ios.hh:61
static constexpr double MeV
Definition: G4SIunits.hh:214
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
double G4double
Definition: G4Types.hh:76
static constexpr double keV
Definition: G4SIunits.hh:216
G4ParticleDefinition * GetIon(const G4String &name)

Here is the call graph for this function:


The documentation for this class was generated from the following files: