Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/medical/electronScattering2/src/ElectronRun.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/extended/medical/electronScattering2/src/ElectronRun.cc (Version 11.3.0) and /examples/extended/medical/electronScattering2/src/ElectronRun.cc (Version 8.1.p1)


  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 //                                                
 27 /// \file medical/electronScattering2/src/Elec    
 28 /// \brief Implementation of the ElectronRun c    
 29                                                   
 30 #include "ElectronRun.hh"                         
 31                                                   
 32 #include "G4MultiFunctionalDetector.hh"           
 33 #include "G4SDManager.hh"                         
 34 #include "G4SystemOfUnits.hh"                     
 35 #include "G4VPrimitiveScorer.hh"                  
 36                                                   
 37 #include <assert.h>                               
 38                                                   
 39 //....oooOO0OOooo........oooOO0OOooo........oo    
 40                                                   
 41 ElectronRun::ElectronRun() : G4Run(), fMap()      
 42 {                                                 
 43   fMap[0] = new G4THitsMap<G4double>("MyDetect    
 44   fMap[1] = new G4THitsMap<G4double>("MyDetect    
 45   fMap[2] = new G4THitsMap<G4double>("MyDetect    
 46   fMap[3] = new G4THitsMap<G4double>("MyDetect    
 47 }                                                 
 48                                                   
 49 //....oooOO0OOooo........oooOO0OOooo........oo    
 50                                                   
 51 ElectronRun::~ElectronRun()                       
 52 {                                                 
 53   // Important to clean up the map                
 54   std::map<G4int, G4THitsMap<G4double>*>::iter    
 55                                                   
 56   while (iter != fMap.end()) {                    
 57     delete iter->second;                          
 58     iter++;                                       
 59   }                                               
 60 }                                                 
 61                                                   
 62 //....oooOO0OOooo........oooOO0OOooo........oo    
 63                                                   
 64 void ElectronRun::RecordEvent(const G4Event* a    
 65 {                                                 
 66   // Get the hits collection                      
 67   G4HCofThisEvent* eventHitCollection = anEven    
 68                                                   
 69   if (!eventHitCollection) return;                
 70                                                   
 71   // Update our private fMap                      
 72   std::map<G4int, G4THitsMap<G4double>*>::iter    
 73                                                   
 74   while (iter != fMap.end()) {                    
 75     G4int id = iter->first;                       
 76                                                   
 77     // Get the hit collection corresponding to    
 78     G4THitsMap<G4double>* eventHitsMap =          
 79       dynamic_cast<G4THitsMap<G4double>*>(even    
 80                                                   
 81     // Expect this to exist                       
 82     assert(0 != eventHitsMap);                    
 83                                                   
 84     // Accumulate event data into our G4THitsM    
 85     *(iter->second) += *eventHitsMap;             
 86                                                   
 87     iter++;                                       
 88   }                                               
 89                                                   
 90   G4Run::RecordEvent(anEvent);                    
 91 }                                                 
 92                                                   
 93 //....oooOO0OOooo........oooOO0OOooo........oo    
 94                                                   
 95 void ElectronRun::DumpData(G4String& outputFil    
 96 {                                                 
 97   // Titles                                       
 98   std::vector<G4String> title;                    
 99   title.push_back("Radius");                      
100                                                   
101   // Output map - energy binning on x axis, th    
102   std::map<G4int, std::vector<G4double>> outpu    
103                                                   
104   G4int nThetaBins = 233;                         
105                                                   
106   // Energy bins depends on the number of scor    
107   G4int nEnergyBins = fMap.size();                
108                                                   
109   G4int i(0), j(0);                               
110                                                   
111   // Initialise current to 0 in all bins          
112   for (i = 0; i < nThetaBins; i++) {              
113     for (j = 0; j < nEnergyBins; j++) {           
114       output[i].push_back(0);                     
115     }                                             
116   }                                               
117                                                   
118   i = 0;                                          
119                                                   
120   // Fill the output map                          
121   std::map<G4int, G4THitsMap<G4double>*>::cons    
122                                                   
123   while (iter != fMap.end()) {                    
124     G4THitsMap<G4double>* hitMap = iter->secon    
125                                                   
126     title.push_back(hitMap->GetName());           
127                                                   
128     std::map<G4int, G4double*>* myMap = hitMap    
129                                                   
130     for (j = 0; j < nThetaBins; j++) {            
131       G4double* current = (*myMap)[j];            
132       if (0 != current) output[j][i] = (*curre    
133     }                                             
134                                                   
135     i++;                                          
136     iter++;                                       
137   }                                               
138                                                   
139   Print(title, output, outputFileSpec);           
140 }                                                 
141                                                   
142 //....oooOO0OOooo........oooOO0OOooo........oo    
143                                                   
144 void ElectronRun::Print(const std::vector<G4St    
145                         const std::map<G4int,     
146                         G4String& outputFileSp    
147 {                                                 
148   // Print to G4cout and an output file           
149   std::ofstream outFile(outputFileSpec);          
150                                                   
151   // Print title vector                           
152   std::vector<G4String>::const_iterator titleI    
153                                                   
154   while (titleIter != title.end()) {              
155     G4cout << std::setw(8) << *titleIter << "     
156     titleIter++;                                  
157   }                                               
158                                                   
159   G4cout << G4endl;                               
160                                                   
161   // Print current data                           
162   std::map<G4int, std::vector<G4double>>::cons    
163                                                   
164   while (iter != myMap.end()) {                   
165     G4cout << std::setw(8) << std::setprecisio    
166                                                   
167     std::vector<G4double>::const_iterator ener    
168                                                   
169     // The built-in scorers do not automatical    
170     // cylinder replica rings. We must account    
171     // by the ratio of the area of the full cy    
172     // scoring ring.                              
173     // In this ratio, PI divides out, as does     
174     // Left with just the number of rings squa    
175     // 1 squared minus ring index squared.        
176     G4int ringNum = iter->first;                  
177     G4double areaCorrection = 233. * 233. / ((    
178     G4int counter = 0;                            
179                                                   
180     while (energyBinIter != iter->second.end()    
181       G4double value = *energyBinIter;            
182       if (counter < 2) value = value * areaCor    
183       G4cout << std::setw(10) << std::setpreci    
184       outFile << value * mm * mm;                 
185       if (counter < 3) outFile << ",";            
186       counter++;                                  
187       energyBinIter++;                            
188     }                                             
189     outFile << G4endl;                            
190     G4cout << G4endl;                             
191     iter++;                                       
192   }                                               
193 }                                                 
194                                                   
195 //....oooOO0OOooo........oooOO0OOooo........oo    
196                                                   
197 void ElectronRun::Merge(const G4Run* aRun)        
198 {                                                 
199   // This method is called at the end of the r    
200   // It accumulates the worker's results into     
201   const ElectronRun* localRun = static_cast<co    
202   const std::map<G4int, G4THitsMap<G4double>*>    
203   std::map<G4int, G4THitsMap<G4double>*>::cons    
204   for (; iter != localMap.end(); ++iter)          
205     (*(fMap[iter->first])) += (*(iter->second)    
206                                                   
207   // This call lets Geant4 maintain overall su    
208   G4Run::Merge(aRun);                             
209 }                                                 
210                                                   
211 //....oooOO0OOooo........oooOO0OOooo........oo    
212