Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/medical/DICOM/src/DicomRun.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/DICOM/src/DicomRun.cc (Version 11.3.0) and /examples/extended/medical/DICOM/src/DicomRun.cc (Version 4.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/DICOM/src/DicomRun.cc           
 28 /// \brief Implementation of the DicomRun clas    
 29                                                   
 30 //============================================    
 31 ///                                               
 32 ///  (Description)                                
 33 ///    DicomRun Class is for accumulating scor    
 34 ///  scored using G4MutiFunctionalDetector and    
 35 ///  Accumulation is done using G4THitsMap obj    
 36 ///                                               
 37 ///    The constructor DicomRun(const std::vec    
 38 ///  needs a vector filled with MultiFunctiona    
 39 ///  was assigned at instantiation of MultiFun    
 40 ///  Then DicomRun constructor automatically s    
 41 ///  in the MFD, and obtains collectionIDs of     
 42 ///  to those primitive scorers. Futhermore, t    
 43 ///  for accumulating during a RUN are automat    
 44 ///  (*) Collection Name is same as primitive     
 45 ///                                               
 46 ///    The resultant information is kept insid    
 47 ///  data members.                                
 48 ///  std::vector<G4String> fCollName;             
 49 ///  std::vector<G4int> fCollID;                  
 50 ///  std::vector<G4THitsMap<G4double>*> fRunMa    
 51 ///                                               
 52 ///  The resualtant HitsMap objects are obtain    
 53 ///  GetHitsMap(..).                              
 54 ///                                               
 55 //============================================    
 56                                                   
 57 #include "DicomRun.hh"                            
 58                                                   
 59 #include "G4MultiFunctionalDetector.hh"           
 60 #include "G4SDManager.hh"                         
 61 #include "G4VPrimitiveScorer.hh"                  
 62                                                   
 63 //....oooOO0OOooo........oooOO0OOooo........oo    
 64 //                                                
 65 //  Constructor.                                  
 66 DicomRun::DicomRun() : G4Run() {}                 
 67                                                   
 68 //....oooOO0OOooo........oooOO0OOooo........oo    
 69 //                                                
 70 //  Constructor.                                  
 71 //   (The vector of MultiFunctionalDetector na    
 72 DicomRun::DicomRun(const std::vector<G4String>    
 73 {                                                 
 74   ConstructMFD(mfdName);                          
 75 }                                                 
 76                                                   
 77 //....oooOO0OOooo........oooOO0OOooo........oo    
 78 //                                                
 79 // Destructor                                     
 80 //    clear all data members.                     
 81 DicomRun::~DicomRun()                             
 82 {                                                 
 83   //--- Clear HitsMap for RUN                     
 84   size_t Nmap = fRunMap.size();                   
 85   for (size_t i = 0; i < Nmap; ++i) {             
 86     if (fRunMap[i]) fRunMap[i]->clear();          
 87   }                                               
 88   fCollName.clear();                              
 89   fCollID.clear();                                
 90   fRunMap.clear();                                
 91 }                                                 
 92                                                   
 93 //....oooOO0OOooo........oooOO0OOooo........oo    
 94 //                                                
 95 // Destructor                                     
 96 //    clear all data members.                     
 97 void DicomRun::ConstructMFD(const std::vector<    
 98 {                                                 
 99   G4SDManager* SDman = G4SDManager::GetSDMpoin    
100   //==========================================    
101   //  Initalize RunMaps for accumulation.         
102   //  Get CollectionIDs for HitCollections.       
103   //==========================================    
104   size_t Nmfd = mfdName.size();                   
105   for (size_t idet = 0; idet < Nmfd; ++idet)      
106   {                                               
107     G4String detName = mfdName[idet];             
108     //--- Seek and Obtain MFD objects from SDm    
109     G4MultiFunctionalDetector* mfd =              
110       (G4MultiFunctionalDetector*)(SDman->Find    
111     //                                            
112     if (mfd) {                                    
113       //--- Loop over the registered primitive    
114       for (G4int icol = 0; icol < mfd->GetNumb    
115         // Get Primitive Scorer object.           
116         G4VPrimitiveScorer* scorer = mfd->GetP    
117         // collection name and collectionID fo    
118         // where type of HitsCollection is G4T    
119         // of primitive scorer.                   
120         // The collection name is given by <MF    
121         // Scorer name>.                          
122         G4String collectionName = scorer->GetN    
123         G4String fullCollectionName = detName     
124         G4int collectionID = SDman->GetCollect    
125         //                                        
126         if (collectionID >= 0) {                  
127           G4cout << "++ " << fullCollectionNam    
128           // Store obtained HitsCollection inf    
129           // And, creates new G4THitsMap for a    
130           fCollName.push_back(fullCollectionNa    
131           fCollID.push_back(collectionID);        
132           fRunMap.push_back(new G4THitsMap<G4d    
133         }                                         
134         else {                                    
135           G4cout << "** collection " << fullCo    
136         }                                         
137       }                                           
138     }                                             
139   }                                               
140 }                                                 
141                                                   
142 //....oooOO0OOooo........oooOO0OOooo........oo    
143 //                                                
144 //  RecordEvent is called at end of event.        
145 //  For scoring purpose, the resultant quantit    
146 //  is accumulated during a Run.                  
147 void DicomRun::RecordEvent(const G4Event* aEve    
148 {                                                 
149   // disable below because this is done in G4R    
150   // numberOfEvent++;  // This is an original     
151                                                   
152   // G4cout << "Dicom Run :: Recording event "    
153   //<< "..." << G4endl;                           
154   //=============================                 
155   //  HitsCollection of This Event                
156   //============================                  
157   G4HCofThisEvent* HCE = aEvent->GetHCofThisEv    
158   if (!HCE) return;                               
159                                                   
160   //==========================================    
161   // Sum up HitsMap of this Event  into HitsMa    
162   //==========================================    
163   size_t Ncol = fCollID.size();                   
164   for (size_t i = 0; i < Ncol; ++i)  // Loop o    
165   {                                               
166     G4THitsMap<G4double>* EvtMap = nullptr;       
167     if (fCollID[i] >= 0)  // Collection is att    
168     {                                             
169       EvtMap = static_cast<G4THitsMap<G4double    
170     }                                             
171     else {                                        
172       G4cout << " Error EvtMap Not Found " <<     
173     }                                             
174     if (EvtMap) {                                 
175       //=== Sum up HitsMap of this event to Hi    
176       *fRunMap[i] += *EvtMap;                     
177       // G4cout << "Summing EvtMap into RunMap    
178       //======================================    
179     }  // else {                                  
180     // G4cout << "Null pointer to EvtMap at "     
181     // }                                          
182   }                                               
183                                                   
184   G4Run::RecordEvent(aEvent);                     
185 }                                                 
186                                                   
187 //....oooOO0OOooo........oooOO0OOooo........oo    
188 // Merge hits map from threads                    
189 void DicomRun::Merge(const G4Run* aRun)           
190 {                                                 
191   const DicomRun* localRun = static_cast<const    
192   Copy(fCollName, localRun->fCollName);           
193   Copy(fCollID, localRun->fCollID);               
194   size_t ncopies = Copy(fRunMap, localRun->fRu    
195   // copy function returns the fRunMap size if    
196   // so this loop isn't executed the first tim    
197   for (size_t i = ncopies; i < fRunMap.size();    
198     *fRunMap[i] += *localRun->fRunMap[i];         
199   }                                               
200   G4Run::Merge(aRun);                             
201 }                                                 
202                                                   
203 //....oooOO0OOooo........oooOO0OOooo........oo    
204 //============================================    
205 //  Access method for HitsMap of the RUN          
206 //                                                
207 //-----                                           
208 // Access HitsMap.                                
209 //  By  MultiFunctionalDetector name and Colle    
210 G4THitsMap<G4double>* DicomRun::GetHitsMap(con    
211 {                                                 
212   G4String fullName = detName + "/" + colName;    
213   return GetHitsMap(fullName);                    
214 }                                                 
215                                                   
216 //....oooOO0OOooo........oooOO0OOooo........oo    
217 // Access HitsMap.                                
218 //  By full description of collection name, th    
219 //    <MultiFunctional Detector Name>/<Primiti    
220 G4THitsMap<G4double>* DicomRun::GetHitsMap(con    
221 {                                                 
222   // G4THitsMap<G4double>* hitsmap = 0;           
223                                                   
224   size_t Ncol = fCollName.size();                 
225   for (size_t i = 0; i < Ncol; ++i) {             
226     if (fCollName[i] == fullName) {               
227       return fRunMap[i];                          
228       // if(hitsmap) { *hitsmap += *fRunMap[i]    
229       // if(!hitsmap) { hitsmap = fRunMap[i];     
230     }                                             
231   }                                               
232                                                   
233   G4Exception("DicomRun", fullName.c_str(), Ju    
234               "GetHitsMap failed to locate the    
235   return nullptr;                                 
236 }                                                 
237