Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/hadrontherapy/src/HadrontherapyDetectorSD.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/hadrontherapy/src/HadrontherapyDetectorSD.cc (Version 11.3.0) and /examples/advanced/hadrontherapy/src/HadrontherapyDetectorSD.cc (Version 2.0)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 // Hadrontherapy advanced example for Geant4      
 27 // See more at: https://twiki.cern.ch/twiki/bi    
 28                                                   
 29 #include "HadrontherapyDetectorSD.hh"             
 30 #include "HadrontherapyDetectorHit.hh"            
 31 #include "G4Step.hh"                              
 32 #include "G4VTouchable.hh"                        
 33 #include "G4TouchableHistory.hh"                  
 34 #include "G4SDManager.hh"                         
 35 #include "HadrontherapyMatrix.hh"                 
 36 #include "HadrontherapyLet.hh"                    
 37 #include "G4Track.hh"                             
 38 #include "G4SystemOfUnits.hh"                     
 39 #include "HadrontherapyMatrix.hh"                 
 40                                                   
 41                                                   
 42 #include "G4SteppingManager.hh"                   
 43 #include "G4TrackVector.hh"                       
 44 #include "HadrontherapySteppingAction.hh"         
 45 #include "G4ios.hh"                               
 46 #include "G4SteppingManager.hh"                   
 47 #include "G4Track.hh"                             
 48 #include "G4Step.hh"                              
 49 #include "G4StepPoint.hh"                         
 50 #include "G4TrackStatus.hh"                       
 51 #include "G4TrackVector.hh"                       
 52 #include "G4ParticleDefinition.hh"                
 53 #include "G4ParticleTypes.hh"                     
 54 #include "G4UserEventAction.hh"                   
 55 #include "G4TransportationManager.hh"             
 56 #include "G4VSensitiveDetector.hh"                
 57 #include "HadrontherapyRunAction.hh"              
 58 #include "G4SystemOfUnits.hh"                     
 59 #include "HadrontherapyRBE.hh"                    
 60 #include <G4AccumulableManager.hh>                
 61                                                   
 62                                                   
 63 //////////////////////////////////////////////    
 64 HadrontherapyDetectorSD::HadrontherapyDetector    
 65 G4VSensitiveDetector(name)                        
 66 {                                                 
 67     G4String HCname;                              
 68     collectionName.insert(HCname="Hadrontherap    
 69     HitsCollection = NULL;                        
 70     sensitiveDetectorName = name;                 
 71                                                   
 72 }                                                 
 73                                                   
 74 //////////////////////////////////////////////    
 75 HadrontherapyDetectorSD::~HadrontherapyDetecto    
 76 {}                                                
 77                                                   
 78 //////////////////////////////////////////////    
 79 void HadrontherapyDetectorSD::Initialize(G4HCo    
 80 {                                                 
 81                                                   
 82     HitsCollection = new HadrontherapyDetector    
 83                                                   
 84 }                                                 
 85                                                   
 86 //////////////////////////////////////////////    
 87 G4bool HadrontherapyDetectorSD::ProcessHits(G4    
 88 {                                                 
 89                                                   
 90                                                   
 91     if (aStep -> GetPreStepPoint() -> GetPhysi    
 92                                                   
 93                                                   
 94     // Get kinetic energy                         
 95     G4Track * theTrack = aStep  ->  GetTrack()    
 96     G4double kineticEnergy = theTrack->GetKine    
 97     G4ParticleDefinition *particleDef = theTra    
 98     //Get particle name                           
 99     G4String particleName =  particleDef -> Ge    
100                                                   
101     // Get particle PDG code                      
102     G4int pdg = particleDef ->GetPDGEncoding()    
103                                                   
104     // Get unique track_id (in an event)          
105     G4int trackID = theTrack -> GetTrackID();     
106                                                   
107     G4double energyDeposit = aStep -> GetTotal    
108                                                   
109     G4double DX = aStep -> GetStepLength();       
110     G4int Z = particleDef-> GetAtomicNumber();    
111     G4int A = particleDef-> GetAtomicMass();      
112     G4StepPoint* PreStep = aStep->GetPreStepPo    
113                                                   
114     // Read voxel indexes: i is the x index, k    
115     const G4VTouchable* touchable = aStep->Get    
116     G4int k  = touchable->GetReplicaNumber(0);    
117     G4int i  = touchable->GetReplicaNumber(2);    
118     G4int j  = touchable->GetReplicaNumber(1);    
119                                                   
120     G4TouchableHandle touchPreStep = PreStep->    
121     G4VPhysicalVolume* volumePre = touchPreSte    
122     G4String namePre = volumePre->GetName();      
123                                                   
124                                                   
125                                                   
126     HadrontherapyMatrix* matrix = Hadrontherap    
127     HadrontherapyLet* let = HadrontherapyLet::    
128                                                   
129     G4int* hitTrack = matrix -> GetHitTrack(i,    
130                                                   
131                                                   
132     //  ******************** let *************    
133     if (let)                                      
134     {                                             
135         if ( !(Z==0 && A==1) ) // All but not     
136         {                                         
137             if( energyDeposit>0. && DX >0. )//    
138             {                                     
139                 if (pdg !=22 && pdg !=11) // n    
140                 {                                 
141                                                   
142                     // Get the pre-step kineti    
143                     G4double eKinPre = aStep -    
144                     // Get the post-step kinet    
145                     G4double eKinPost = aStep     
146                     // Get the step average ki    
147                     G4double eKinMean = (eKinP    
148                                                   
149                     // get the material           
150                     const G4Material * materia    
151                                                   
152                     // get the secondary patic    
153                     G4Step fstep = *theTrack -    
154                     // store all the secondary    
155                     const std::vector<const G4    
156                                                   
157                     size_t SecondarySize = (*s    
158                     G4double EnergySecondary =    
159                                                   
160                     // get secondary electrons    
161                     if (SecondarySize) // calc    
162                     {                             
163                         for (size_t numsec = 0    
164                         {                         
165                             //Get the PDG code    
166                             G4int PDGSecondary    
167                                                   
168                             if(PDGSecondary ==    
169                             {                     
170                                 // calculate t    
171                                 EnergySecondar    
172                             }                     
173                         }                         
174                                                   
175                     }                             
176                                                   
177                     // call the let filldatas     
178                     let -> FillEnergySpectrum(    
179                                                   
180                 }                                 
181             }                                     
182         }                                         
183     }                                             
184                                                   
185                                                   
186     if (matrix)                                   
187     {                                             
188                                                   
189         // Increment Fluences & accumulate ene    
190         // Hit voxels are marked with track_id    
191         //G4int* hitTrack = matrix -> GetHitTr    
192         if ( *hitTrack != trackID )               
193         {                                         
194             *hitTrack = trackID;                  
195             /*                                    
196              * Fill FLUENCE data for every sin    
197              * Exclude e-, neutrons, gamma, ..    
198              */                                   
199             if ( Z >= 1) matrix -> Fill(trackI    
200                                                   
201         }                                         
202                                                   
203         if(energyDeposit != 0)                    
204         {                                         
205             /*                                    
206              *  This method will fill a dose m    
207              *  A method of the HadrontherapyM    
208              *  is called automatically at the    
209              *  It permits to store all dose/f    
210              */                                   
211             // if (A==1 && Z==1) // primary an    
212             if ( Z>=1 )    //  exclude e-, neu    
213                 matrix -> Fill(trackID, partic    
214             /*                                    
215              * Create a hit with the informati    
216              */                                   
217             HadrontherapyDetectorHit* detector    
218             detectorHit -> SetEdepAndPosition(    
219             HitsCollection -> insert(detectorH    
220         }                                         
221     }                                             
222                                                   
223     auto rbe = HadrontherapyRBE::GetInstance()    
224     if (rbe->IsCalculationEnabled())              
225     {                                             
226         if (!fRBEAccumulable)                     
227         {                                         
228             fRBEAccumulable = dynamic_cast<Had    
229             if (!fRBEAccumulable)                 
230             {                                     
231                 G4Exception("HadrontherapyDete    
232             }                                     
233         }                                         
234   if (A>0) //protect against gammas, e- , etc     
235     {                                             
236       fRBEAccumulable->Accumulate(kineticEnerg    
237     }                                             
238     }                                             
239                                                   
240                                                   
241     return true;                                  
242 }                                                 
243                                                   
244 //////////////////////////////////////////////    
245 void HadrontherapyDetectorSD::EndOfEvent(G4HCo    
246 {                                                 
247                                                   
248     static G4int HCID = -1;                       
249     if(HCID < 0)                                  
250     {                                             
251         HCID = GetCollectionID(0);                
252     }                                             
253                                                   
254     HCE -> AddHitsCollection(HCID,HitsCollecti    
255 }                                                 
256                                                   
257