source: trunk/examples/advanced/hadrontherapy/src/HadrontherapyPhysicsList.cc @ 1029

Last change on this file since 1029 was 807, checked in by garnier, 16 years ago

update

File size: 22.9 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26// $Id: HadrontherapyPhysicsList.cc,v 1.0
27// ----------------------------------------------------------------------------
28//                 GEANT 4 - Hadrontherapy example
29// ----------------------------------------------------------------------------
30// Code developed by:
31//
32// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
33//
34// (a) Laboratori Nazionali del Sud
35//     of the National Institute for Nuclear Physics, Catania, Italy
36// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
37//
38// * cirrone@lns.infn.it
39// ----------------------------------------------------------------------------
40
41#include "globals.hh"
42#include "G4ProcessManager.hh"
43#include "G4Region.hh"
44#include "G4RegionStore.hh"
45#include "G4ParticleDefinition.hh"
46#include "G4ParticleTypes.hh"
47#include "G4ParticleTable.hh"
48#include "HadrontherapyPhysicsList.hh"
49#include "HadrontherapyPhysicsListMessenger.hh"
50#include "HadrontherapyParticles.hh"
51#include "Decay.hh"
52#include "EMPhotonStandard.hh"
53#include "EMPhotonEPDL.hh"
54#include "EMPhotonPenelope.hh"
55#include "EMElectronStandard.hh"
56#include "EMElectronEEDL.hh"
57#include "EMElectronPenelope.hh"
58#include "EMPositronStandard.hh"
59#include "EMPositronPenelope.hh"
60#include "EMMuonStandard.hh"
61#include "EMHadronIonLowEICRU49.hh"
62#include "EMHadronIonLowEZiegler1977.hh"
63#include "EMHadronIonLowEZiegler1985.hh"
64#include "EMHadronIonStandard.hh"
65#include "HIProtonNeutronPrecompound.hh"
66#include "HIProtonNeutronBertini.hh"
67#include "HIProtonNeutronBinary.hh"
68#include "HIProtonNeutronLEP.hh"
69#include "HIProtonNeutronPrecompoundGEM.hh"
70#include "HIProtonNeutronPrecompoundFermi.hh"
71#include "HIProtonNeutronPrecompoundGEMFermi.hh"
72#include "HIPionBertini.hh"
73#include "HIPionLEP.hh"
74#include "HIIonLEP.hh"
75#include "HEHadronIonLElastic.hh"
76#include "HEHadronIonBertiniElastic.hh"
77#include "HEHadronIonQElastic.hh"
78#include "HEHadronIonUElastic.hh"
79#include "HRMuonMinusCapture.hh"
80
81
82HadrontherapyPhysicsList::HadrontherapyPhysicsList(): G4VModularPhysicsList(),
83                                                      decayIsRegistered(false),
84                                                      emElectronIsRegistered(false), 
85                                                      emPositronIsRegistered(false), 
86                                                      emPhotonIsRegistered(false), 
87                                                      emIonIsRegistered(false),
88                                                      emMuonIsRegistered(false),
89                                                      hadrElasticHadronIonIsRegistered(false),
90                                                      hadrInelasticPionIsRegistered(false),
91                                                      hadrInelasticIonIsRegistered(false),
92                                                      hadrInelasticProtonNeutronIsRegistered(false),
93                                                      hadrAtRestMuonIsRegistered(false)
94{
95  // The secondary production threshold is set to 10. mm
96  // for all the particles in all the experimental set-up
97  // The phantom is defined as a Geant4 Region. Here the cut is fixed to 0.001 mm
98  defaultCutValue = 0.01 * mm;
99
100  // Messenger: it is possible to activate physics processes and models interactively
101  messenger = new HadrontherapyPhysicsListMessenger(this);
102
103  SetVerboseLevel(1);
104
105  // Register all the particles involved in the experimental set-up
106  RegisterPhysics( new HadrontherapyParticles("particles") );
107}
108
109HadrontherapyPhysicsList::~HadrontherapyPhysicsList()
110{ 
111  delete messenger;
112}
113
114void HadrontherapyPhysicsList::AddPhysicsList(const G4String& name)
115{
116  G4cout << "Adding PhysicsList component " << name << G4endl;
117 
118
119  // ****************
120  // *** A. DECAY ***
121  // ****************
122
123
124  if (name == "Decay") 
125    {
126      if (decayIsRegistered) 
127        {
128          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
129                 << " cannot be registered ---- decay List already existing" 
130                 << G4endl;
131        } 
132      else 
133        {
134          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
135                 << " is registered" << G4endl;
136          RegisterPhysics( new Decay(name) );
137          decayIsRegistered = true;
138        }
139    }
140
141
142  // ***************************************
143  // *** B. ELECTROMAGNETIC INTERACTIONS ***
144  // ***************************************
145
146
147  // ***************
148  // *** Photons ***
149  // ***************
150 
151  // *** Option I: Standard
152
153  if (name == "EM-Photon-Standard") 
154    {
155      if (emPhotonIsRegistered) 
156        {
157          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
158                 << " cannot be registered ---- photon List already existing" 
159                 << G4endl;
160        } 
161      else 
162        {
163          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
164                 << " is registered" << G4endl;
165          RegisterPhysics( new EMPhotonStandard(name) );
166          emPhotonIsRegistered = true;
167        }
168    }
169
170
171  // *** Option II: Low Energy based on the Livermore libraries
172
173  if (name == "EM-Photon-EPDL") 
174    {
175      if (emPhotonIsRegistered) 
176        {
177          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
178                 << " cannot be registered ---- photon List already existing"
179                 << G4endl;
180        } 
181      else 
182        {
183          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
184                 << " is registered" << G4endl;
185          RegisterPhysics( new EMPhotonEPDL(name) );
186          emPhotonIsRegistered = true;
187        }
188    } 
189
190
191  // *** Option III: Low Energy Penelope
192
193  if (name == "EM-Photon-Penelope")
194    {
195      if (emPhotonIsRegistered) 
196        {
197          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
198                 << " cannot be registered ---- photon List already existing" 
199                 << G4endl;
200        } 
201      else 
202        {
203          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
204                 << " is registered" << G4endl;
205          RegisterPhysics( new EMPhotonPenelope(name) );
206          emPhotonIsRegistered = true;
207        }
208    }
209
210
211  // *****************
212  // *** Electrons ***
213  // *****************
214 
215  // *** Option I: Standard
216
217  if (name == "EM-Electron-Standard") 
218    {
219      if (emElectronIsRegistered) 
220        {
221          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
222                 << " cannot be registered ---- electron List already existing" 
223                 << G4endl;
224        } 
225      else 
226        {
227          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
228                 << " is registered" << G4endl;
229          RegisterPhysics( new EMElectronStandard(name) );       
230          emElectronIsRegistered = true;
231        }
232    }
233
234
235  // *** Option II: Low Energy based on the Livermore libraries
236
237  if (name == "EM-Electron-EEDL") 
238    {
239      if (emElectronIsRegistered) 
240        {
241          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
242                 << " cannot be registered ---- electron List already existing"                 
243                 << G4endl;
244        } 
245      else 
246        {
247          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
248                 << " is registered" << G4endl;
249          RegisterPhysics( new EMElectronEEDL(name) );
250          emElectronIsRegistered = true;
251        }
252    } 
253
254
255  // *** Option III: Low Energy Penelope
256
257  if (name == "EM-Electron-Penelope")
258    {
259      if (emElectronIsRegistered) 
260        {
261          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
262                 << " cannot be registered ---- electron List already existing"                 
263                 << G4endl;
264        } 
265      else 
266        {
267          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
268                 << " is registered" << G4endl;
269          RegisterPhysics( new EMElectronPenelope(name) );
270          emElectronIsRegistered = true;
271        }
272    }
273
274
275  // *****************
276  // *** Positrons ***
277  // *****************
278
279  // *** Option I: Standard
280  if (name == "EM-Positron-Standard") 
281    {
282      if (emPositronIsRegistered) 
283        {
284          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
285                 << " cannot be registered ---- positron List already existing"                 
286                 << G4endl;
287        } 
288      else 
289        {
290          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
291                 << " is registered" << G4endl;
292          RegisterPhysics( new EMPositronStandard(name) );
293          emPositronIsRegistered = true;
294        }
295    }
296
297
298  // *** Option II: Low Energy Penelope
299
300  if (name == "EM-Positron-Penelope") 
301    {
302      if (emPositronIsRegistered) 
303        {
304          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
305                 << " cannot be registered ---- positron List already existing"   
306                 << G4endl;
307        } 
308      else 
309        {
310          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
311                 << " is registered" << G4endl;
312          RegisterPhysics( new EMPositronPenelope(name) );
313          emPositronIsRegistered = true;
314        }
315    }
316 
317
318  // ************************
319  // *** Hadrons and Ions ***
320  // ************************
321
322  // *** Option I: Low Energy with ICRU49 stopping power parametrisation
323 
324  if (name == "EM-HadronIon-LowE") 
325    {
326      if (emIonIsRegistered) 
327        {
328          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
329                 << " cannot be registered ---- proton List already existing" 
330                 << G4endl;
331        } 
332      else 
333        {
334          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
335                 << " is registered" << G4endl;
336          RegisterPhysics( new EMHadronIonLowEICRU49(name) );
337          emIonIsRegistered = true;
338        }
339    }
340
341
342  // *** Option II: Low Energy with Ziegler 1977 stopping power parametrisation
343
344  if (name == "EM-HadronIon-LowEZiegler1977") 
345    {
346      if (emIonIsRegistered) 
347        {
348          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
349                 << " cannot be registered ---- proton List already existing" 
350                 << G4endl;
351        } 
352      else 
353        {
354          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
355                 << " is registered" << G4endl;
356          RegisterPhysics( new EMHadronIonLowEZiegler1977(name) );
357          emIonIsRegistered = true;
358        }
359    }
360
361
362  // *** Option III: Low Energy with Ziegler 1985 stopping power parametrisation
363
364  if (name == "EM-HadronIon-LowEZiegler1985") 
365    {
366      if (emIonIsRegistered) 
367        {
368          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
369                 << " cannot be registered ---- proton List already existing" 
370                 << G4endl;
371        } 
372      else 
373        {
374          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
375                 << " is registered" << G4endl;
376          RegisterPhysics( new EMHadronIonLowEZiegler1985(name) );
377          emIonIsRegistered = true;
378        }
379    }
380
381
382  // *** Option IV: Standard
383
384  if (name == "EM-HadronIon-Standard") 
385    {
386      if (emIonIsRegistered) 
387        {
388          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
389                 << " cannot be registered ---- ion List already existing" 
390                 << G4endl;
391        } 
392      else 
393        {
394          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
395                 << " is registered" << G4endl;
396          RegisterPhysics( new EMHadronIonStandard(name) );
397          emIonIsRegistered = true;
398        }
399    }
400
401
402  // *************
403  // *** Muons ***
404  // *************
405
406  // *** Option I: Standard
407
408  if (name == "EM-Muon-Standard") 
409    {
410      if (emMuonIsRegistered) 
411        {
412          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
413                 << " cannot be registered ---- decay List already existing" 
414                 << G4endl;
415        } 
416      else 
417        {
418          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
419                 << " is registered" << G4endl;
420          RegisterPhysics( new EMMuonStandard(name) );
421          emMuonIsRegistered = true;
422        }
423    }
424
425
426  // ********************************
427  // *** C. HADRONIC INTERACTIONS ***
428  // ********************************
429
430
431  // ******************************
432  // *** C.1. ELASTIC PROCESSES ***
433  // ******************************
434
435
436  // ************************
437  // *** Hadrons and Ions ***
438  // ************************
439
440  // *** Option I: GHEISHA like LEP model
441
442  if (name == "HadronicEl-HadronIon-LElastic") 
443    {
444      if (hadrElasticHadronIonIsRegistered) 
445        {
446          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
447                 << " cannot be registered ---- hadronic Elastic Scattering List already existing" 
448                 << G4endl;
449        } 
450      else 
451        {
452          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
453                 << " is registered" << G4endl;
454          RegisterPhysics( new HEHadronIonLElastic(name) );
455          hadrElasticHadronIonIsRegistered = true;
456        }
457    }
458 
459
460  // *** Option II: Bertini model
461
462  if (name == "HadronicEl-HadronIon-Bert") 
463    {
464      if (hadrElasticHadronIonIsRegistered) 
465        {
466          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
467                 << " cannot be registered ---- hadronic Elastic Scattering List already existing" 
468                 << G4endl;
469        } 
470      else 
471        {
472          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
473                 << " is registered" << G4endl;
474          RegisterPhysics( new HEHadronIonBertiniElastic(name) );
475          hadrElasticHadronIonIsRegistered = true;
476        }
477    }
478
479
480  // *** Option III: Process G4QElastic
481
482  if (name == "HadronicEl-HadronIon-QElastic") 
483    {
484      if (hadrElasticHadronIonIsRegistered) 
485        {
486          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
487                 << " cannot be registered ---- hadronic Elastic Scattering List already existing" 
488                 << G4endl;
489        } 
490      else 
491        {
492          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
493                 << " is registered" << G4endl;
494          RegisterPhysics( new HEHadronIonQElastic(name) );
495          hadrElasticHadronIonIsRegistered = true;
496        }
497    }
498
499
500  // *** Option III: Process G4UHadronElasticProcess
501
502  if (name == "HadronicEl-HadronIon-UElastic") 
503    {
504     if (hadrElasticHadronIonIsRegistered) 
505        {
506          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
507                 << " cannot be registered ---- hadronic Elastic Scattering List already existing" 
508                 << G4endl;
509        } 
510     else 
511        {
512          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
513                 << " is registered" << G4endl;
514          RegisterPhysics( new HEHadronIonUElastic(name) );
515          hadrElasticHadronIonIsRegistered = true;
516        }
517    }
518   
519   
520  // ********************************
521  // *** C.2. INELASTIC PROCESSES ***
522  // ********************************
523
524
525  // *************
526  // *** Pions ***
527  // *************
528
529  // *** Option I: Bertini model
530
531  if (name == "HadronicInel-Pion-Bertini") 
532    {
533      if (hadrInelasticPionIsRegistered) 
534        {
535          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
536                 << " cannot be registered ---- decay List already existing" 
537                 << G4endl;
538        } 
539      else 
540        {
541          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
542                 << " is registered" << G4endl;
543          RegisterPhysics( new HIPionBertini(name) );
544          hadrInelasticPionIsRegistered = true;
545        }
546    }
547
548
549  // *** Option II: GHEISHA like LEP model
550
551  if (name == "HadronicInel-Pion-LEP") 
552    {
553      if (hadrInelasticPionIsRegistered) 
554        {
555          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
556                 << " cannot be registered ---- decay List already existing" 
557                 << G4endl;
558        } 
559      else 
560        {
561          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
562                 << " is registered" << G4endl;
563          RegisterPhysics( new HIPionLEP(name) );
564          hadrInelasticPionIsRegistered = true;
565        }
566    }
567
568
569  // ************
570  // *** Ions ***
571  // ************
572
573  // *** Option I: GHEISHA like LEP model
574
575  if (name == "HadronicInel-Ion-LEP") 
576    {
577      if (hadrInelasticIonIsRegistered) 
578        {
579          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
580                 << " cannot be registered ---- decay List already existing" 
581                 << G4endl;
582        } 
583      else 
584        {
585          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
586                 << " is registered" << G4endl;
587          RegisterPhysics( new HIIonLEP(name) );
588          hadrInelasticIonIsRegistered = true;
589        }
590    }
591
592
593  // *************************
594  // *** Protons, Neutrons ***
595  // *************************
596
597  // *** Option I: GHEISHA like LEP model
598
599  if (name == "HadronicInel-ProtonNeutron-LEP") 
600    {
601      if (hadrInelasticProtonNeutronIsRegistered) 
602        {
603          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
604                 << " cannot be registered ---- decay List already existing" 
605                 << G4endl;
606        } 
607      else 
608        {
609          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
610                 << " is registered" << G4endl;
611          RegisterPhysics( new HIProtonNeutronLEP(name) );
612          hadrInelasticProtonNeutronIsRegistered = true;
613        }
614    }
615
616
617  // *** Option II: Bertini Cascade Model
618
619  if (name == "HadronicInel-ProtonNeutron-Bert") 
620    {
621      if (hadrInelasticProtonNeutronIsRegistered) 
622        {
623          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
624                 << " cannot be registered ---- decay List already existing" 
625                 << G4endl;
626        } 
627      else 
628        {
629          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
630                 << " is registered" << G4endl;
631          RegisterPhysics( new HIProtonNeutronBertini(name) );
632          hadrInelasticProtonNeutronIsRegistered = true;
633        }
634    }
635
636
637  // *** Option III: Binary Cascade Model
638
639  if (name == "HadronicInel-ProtonNeutron-Bin") 
640    {
641      if (hadrInelasticProtonNeutronIsRegistered) 
642        {
643          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
644                 << " cannot be registered ---- decay List already existing" 
645                 << G4endl;
646        } 
647      else 
648        {
649          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
650                 << " is registered" << G4endl;
651          RegisterPhysics( new HIProtonNeutronBinary(name) );
652          hadrInelasticProtonNeutronIsRegistered = true;
653        }
654    }
655
656
657  // *** Option IV: Precompound Model combined with Default Evaporation
658
659  if (name == "HadronicInel-ProtonNeutron-Prec") 
660    {
661      if (hadrInelasticProtonNeutronIsRegistered) 
662        {
663          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
664                 << " cannot be registered ---- decay List already existing" 
665                 << G4endl;
666        } 
667      else 
668        {
669          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
670                 << " is registered" << G4endl;
671          RegisterPhysics( new HIProtonNeutronPrecompound(name) );
672          hadrInelasticProtonNeutronIsRegistered = true;
673        }
674    }
675
676
677  // *** Option V: Precompound Model combined with GEM Evaporation
678
679  if (name == "HadronicInel-ProtonNeutron-PrecGEM") 
680    {
681      if (hadrInelasticProtonNeutronIsRegistered) 
682        {
683          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
684                 << " cannot be registered ---- decay List already existing" 
685                 << G4endl;
686        } 
687      else 
688        {
689          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
690                 << " is registered" << G4endl;
691          RegisterPhysics( new HIProtonNeutronPrecompoundGEM(name) );
692          hadrInelasticProtonNeutronIsRegistered = true;
693        }
694    }
695
696
697  // *** Option VI: Precompound Model combined with default Evaporation
698  //                and Fermi Break-up model
699
700  if (name == "HadronicInel-ProtonNeutron-PrecFermi") 
701    {
702      if (hadrInelasticProtonNeutronIsRegistered) 
703        {
704          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
705                 << " cannot be registered ---- decay List already existing" 
706                 << G4endl;
707        } 
708      else 
709        {
710          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
711                 << " is registered" << G4endl;
712          RegisterPhysics( new HIProtonNeutronPrecompoundFermi(name) );
713          hadrInelasticProtonNeutronIsRegistered = true;
714        }
715    }
716
717
718  // *** Option VII: Precompound Model combined with GEM Evaporation
719  //                 and Fermi Break-up model
720
721  if (name == "HadronicInel-ProtonNeutron-PrecGEMFermi") 
722    {
723      if (hadrInelasticProtonNeutronIsRegistered) 
724        {
725          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
726                 << " cannot be registered ---- decay List already existing" 
727                 << G4endl;
728        } 
729      else 
730        {
731          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
732                 << " is registered" << G4endl;
733          RegisterPhysics( new HIProtonNeutronPrecompoundGEMFermi(name) );
734          hadrInelasticProtonNeutronIsRegistered = true;
735        }
736    }   
737
738
739  // ******************************
740  // *** C.3. AT-REST PROCESSES ***
741  // ******************************
742
743
744  // **************
745  // *** Muons- ***
746  // **************
747
748  // *** Option I: Muon Minus Capture at Rest
749
750  if (name == "HadronicAtRest-MuonMinus-Capture") 
751    {
752      if (hadrAtRestMuonIsRegistered) 
753        {
754          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name 
755                 << " cannot be registered ---- decay List already existing" 
756                 << G4endl;
757        } 
758      else 
759        {
760          G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
761                 << " is registered" << G4endl;
762          RegisterPhysics( new HRMuonMinusCapture(name) );
763          hadrAtRestMuonIsRegistered = true;
764        }
765    }
766
767}
768
769void HadrontherapyPhysicsList::SetCuts()
770{ 
771  // Set the threshold of production equal to the defaultCutValue
772  // in the experimental set-up
773  G4VUserPhysicsList::SetCutsWithDefault();
774     
775  G4double lowlimit=250*eV;
776  G4ProductionCutsTable::GetProductionCutsTable() ->SetEnergyRange(lowlimit, 100.*GeV);
777  // Definition of a smaller threshold of production in the phantom region
778  // where high accuracy is required in the energy deposit calculation
779
780  G4String regionName = "PhantomLog";
781  G4Region* region = G4RegionStore::GetInstance()->GetRegion(regionName);
782  G4ProductionCuts* cuts = new G4ProductionCuts ;
783  G4double regionCut = 0.01*mm;
784  cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("gamma"));
785  cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("e-"));
786  cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("e+"));
787  cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("proton"));
788  cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("genericIons"));
789  region -> SetProductionCuts(cuts);
790
791  if (verboseLevel>0) DumpCutValuesTable();
792}
793
794
Note: See TracBrowser for help on using the repository browser.