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

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

update

File size: 5.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: HadrontherapyProtonSteppingAction.cc; May 2005
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 INFN, Catania, Italy
36// (b) INFN Section of Genova, Genova, Italy
37//
38// * cirrone@lns.infn.it
39// ----------------------------------------------------------------------------
40
41#include "G4SteppingManager.hh"
42#include "G4TrackVector.hh"
43#include "HadrontherapySteppingAction.hh"
44#include "G4ios.hh"
45#include "G4SteppingManager.hh"
46#include "G4Track.hh"
47#include "G4Step.hh"
48#include "G4StepPoint.hh"
49#include "G4TrackStatus.hh"
50#include "G4TrackVector.hh"
51#include "G4ParticleDefinition.hh"
52#include "G4ParticleTypes.hh"
53
54#ifdef G4ANALYSIS_USE   
55#include "HadrontherapyAnalysisManager.hh"
56#endif
57
58#include "HadrontherapyRunAction.hh"
59
60HadrontherapySteppingAction::HadrontherapySteppingAction( HadrontherapyRunAction* run)
61{
62  runAction = run;
63}
64
65HadrontherapySteppingAction::~HadrontherapySteppingAction()
66{
67}
68
69void HadrontherapySteppingAction::UserSteppingAction(const G4Step* aStep)
70{ 
71  // Electromagnetic and hadronic processes of primary particles in the phantom
72 
73 if ((aStep -> GetTrack() -> GetTrackID() == 1) &&
74    (aStep -> GetTrack() -> GetVolume() -> GetName() == "PhantomPhys") &&
75    (aStep -> GetPostStepPoint() -> GetProcessDefinedStep() != NULL))
76            {
77              G4String process = aStep -> GetPostStepPoint() -> 
78                GetProcessDefinedStep() -> GetProcessName();
79 
80              if ((process == "Transportation") || (process == "StepLimiter")) {;}
81              else {
82                if ((process == "msc") || (process == "hLowEIoni") || (process == "hIoni")) 
83                  { 
84                    runAction -> AddEMProcess();
85                  } 
86                else 
87                 {
88                   runAction -> AddHadronicProcess();
89
90                   if ( (process != "LElastic") && (process != "ProtonInelastic") && (process != "hElastic") )
91                     G4cout << "Warning! Unknown proton process: "<< process << G4endl;
92                 }
93              }         
94            }
95
96 // Retrieve information about the secondaries originated in the phantom
97
98#ifdef G4ANALYSIS_USE   
99  G4SteppingManager*  steppingManager = fpSteppingManager;
100  G4Track* theTrack = aStep -> GetTrack();
101
102  // check if it is alive
103  if(theTrack-> GetTrackStatus() == fAlive) { return; }
104
105  // Retrieve the secondary particles
106  G4TrackVector* fSecondary = steppingManager -> GetfSecondary();
107     
108  for(size_t lp1=0;lp1<(*fSecondary).size(); lp1++)
109    { 
110      G4String volumeName = (*fSecondary)[lp1] -> GetVolume() -> GetName(); 
111 
112      if (volumeName == "PhantomPhys")
113        {
114          G4String secondaryParticleName =  (*fSecondary)[lp1]->GetDefinition() -> GetParticleName(); 
115          G4double secondaryParticleKineticEnergy =  (*fSecondary)[lp1] -> GetKineticEnergy();     
116   
117          HadrontherapyAnalysisManager* analysis =  HadrontherapyAnalysisManager::getInstance();   
118       
119          if (secondaryParticleName == "e-")
120            analysis -> electronEnergyDistribution(secondaryParticleKineticEnergy/MeV);
121                   
122          if (secondaryParticleName == "gamma")
123            analysis -> gammaEnergyDistribution(secondaryParticleKineticEnergy/MeV);
124
125          if (secondaryParticleName == "deuteron")
126            analysis -> deuteronEnergyDistribution(secondaryParticleKineticEnergy/MeV);
127       
128          if (secondaryParticleName == "triton")
129            analysis -> tritonEnergyDistribution(secondaryParticleKineticEnergy/MeV);
130           
131          if (secondaryParticleName == "alpha")
132            analysis -> alphaEnergyDistribution(secondaryParticleKineticEnergy/MeV);
133       
134          G4double z = (*fSecondary)[lp1]-> GetDynamicParticle() -> GetDefinition() -> GetPDGCharge();
135          if (z > 0.)
136            {     
137              G4int a = (*fSecondary)[lp1]-> GetDynamicParticle() -> GetDefinition() -> GetBaryonNumber();
138              G4int electronOccupancy = (*fSecondary)[lp1] ->  GetDynamicParticle() -> GetTotalOccupancy(); 
139              // If a generic ion is originated in the phantom, its baryonic number, PDG charge,
140              // total number of electrons in the orbitals are stored in a ntuple
141              analysis -> genericIonInformation(a, z, electronOccupancy, secondaryParticleKineticEnergy/MeV);                   
142            }
143        }
144    }
145#endif
146}
147
148
149
150
151
Note: See TracBrowser for help on using the repository browser.