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

Last change on this file since 1036 was 807, checked in by garnier, 17 years ago

update

File size: 22.9 KB
RevLine 
[807]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.