Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/geometry/navigation/src/G4LocatorChangeRecord.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 /geometry/navigation/src/G4LocatorChangeRecord.cc (Version 11.3.0) and /geometry/navigation/src/G4LocatorChangeRecord.cc (Version 5.2)


  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 // G4LocatorChangeRecord class implementation     
 27 //                                                
 28 // Author: John Apostolakis, 28.08.19 - First     
 29 // -------------------------------------------    
 30                                                   
 31 #include <iostream>                               
 32 #include <iomanip>                                
 33 #include <locale>                                 
 34 // #include <cassert>                             
 35                                                   
 36 #include "G4LocatorChangeRecord.hh"               
 37                                                   
 38 // Must correspond exactly with the count of t    
 39 //                                                
 40 const char * G4LocatorChangeRecord::fNameChang    
 41   { "Invalid", "Unknown", "Initialising", "Int    
 42     "NoIntersections-AForFB",  "RecalculatedB"    
 43     "InsertingMidPoint", "RecalculatedB-2ndHal    
 44     "Level Pop" };                                
 45                                                   
 46 // -------------------------------------------    
 47 //                                                
 48 std::ostream& G4LocatorChangeRecord::ReportVec    
 49                                                   
 50                        const std::vector<G4Loc    
 51 {                                                 
 52   using std::setw;                                
 53   G4int prec= 16;                                 
 54   if( vecRec.empty() )                            
 55   {                                               
 56      os << "Locator Change Record for " << nam    
 57      return os;                                   
 58   }                                               
 59                                                   
 60   G4long oldprc = os.precision(prec);             
 61                                                   
 62   // std::vector<G4LocatorChangeRecord>::const    
 63   auto itRec                                      
 64      = std::vector<G4LocatorChangeRecord>::con    
 65                                                   
 66   os << setw( 7 ) << "Change#"  << "  "           
 67      << setw( 4 ) << "Iter"  << "  "              
 68      << std::left                                 
 69      << setw( prec+9 ) << "Length" << "  "        
 70      << setw( 15 ) << "Code-Location"  << "  "    
 71      << G4endl;                                   
 72   os << "=====================================    
 73      << G4endl;                                   
 74                                                   
 75   do                                              
 76   {                                               
 77      auto locationCode= (*itRec).GetLocation()    
 78      os << std::internal                          
 79         << setw( 7 ) << (*itRec).GetCount() <<    
 80         << setw( 4 ) << (*itRec).GetIteration(    
 81         << std::left                              
 82         << setw( prec+9 ) << (*itRec).GetLengt    
 83         << setw( 2  ) << locationCode  << "  "    
 84         << setw( 15 ) << fNameChangeLocation[     
 85         << std::internal                          
 86         ;                                         
 87      os << G4endl;                                
 88      ++itRec;                                     
 89                                                   
 90   } while ( itRec != vecRec.cend() );             
 91                                                   
 92   os.precision(oldprc);                           
 93   return os;                                      
 94 }                                                 
 95                                                   
 96 // -------------------------------------------    
 97 //                                                
 98 std::ostream&                                     
 99 G4LocatorChangeRecord::ReportEndChanges (         
100    std::ostream& os,                              
101    const std::vector<G4LocatorChangeRecord> &     
102    const std::vector<G4LocatorChangeRecord> &     
103 {                                                 
104   using std::setw;                                
105   G4int prec= 16;                                 
106   const G4bool confirm = true;                    
107   G4long oldprc = os.precision(prec);             
108                                                   
109   std::vector<G4LocatorChangeRecord>::const_it    
110   itrecA= startA.begin();                         
111   itrecB= endB.begin();                           
112   os << G4endl;                                   
113   os << "=====================================    
114   os << G4endl << " ** Change records: " << G4    
115   os << " *     endPoints  A (start) and B (en    
116   os << " *     Sizes of change records:  star    
117      << "  end(B) : " <<   endB.size() << G4en    
118   os << "=====================================    
119      << G4endl;                                   
120                                                   
121   os << setw( 7 ) << "Change#"  << "  "           
122      << setw( 4 ) << "Iter"  << "  "              
123      << setw( 20 ) << "CodeLocation"  << "  "     
124      << setw( prec+9 ) << "Length-A (start)" <    
125      << setw( prec+9 ) << "Length-B (end)" <<     
126      << G4endl;                                   
127   os << "=====================================    
128                                                   
129                                                   
130   auto eventA = (*itrecA).GetCount();             
131   auto eventB = (*itrecB).GetCount();             
132                                                   
133   G4bool isLastA= false;                          
134   G4bool isLastB= false;                          
135                                                   
136   G4int maxEvent = std::max( startA[ startA.si    
137                              endB[   endB.size    
138   G4int prevA = -1;                               
139   G4int prevB = -1;                               
140                                                   
141   G4bool advanceA= false, advanceB= false;        
142   do                                              
143   {                                               
144      advanceA= false;                             
145      advanceB= false;                             
146                                                   
147      if( ((G4int)eventA>prevA) && ((G4int)even    
148      {                                            
149         auto codeLocA= (*itrecA).GetLocation()    
150                                                   
151         os << G4endl;                             
152         os << setw( 7 ) << eventA  << "  "        
153            << setw( 4 ) << (*itrecA).GetIterat    
154            << setw( 3 ) << codeLocA << " "        
155            << setw( 15 ) << fNameChangeLocatio    
156            << setw( prec+9 ) << (*itrecA).GetL    
157            << setw( prec+9 ) << (*itrecB).GetL    
158         if( confirm )                             
159         {                                         
160           os << setw( 4 ) << (*itrecB).GetIter    
161              << setw( 15 ) << (*itrecB).GetLoc    
162         }                                         
163      }                                            
164      else                                         
165      {                                            
166         if ( (G4int)eventA > prevA )              
167         {                                         
168            auto codeLocA = (*itrecA).GetLocati    
169            os << G4endl;                          
170            os << setw( 7 ) << (*itrecA).GetCou    
171               << setw( 4 ) << (*itrecA).GetIte    
172               << setw( 3 ) << codeLocA << " "     
173               << setw( 15 ) << fNameChangeLoca    
174               << setw( prec+9 ) << (*itrecA).G    
175               << setw( prec+9 ) << "       " <    
176         }                                         
177         else                                      
178         {                                         
179            // assert( (G4int)eventB > prevB );    
180            auto codeLocB = (*itrecB).GetLocati    
181                                                   
182            os << G4endl;                          
183            os << setw( 7 ) << eventB  << "  "     
184               << setw( 4 ) << (*itrecB).GetIte    
185               << setw( 3 ) << codeLocB << " "     
186               << setw( 15 ) << fNameChangeLoca    
187               << setw( prec+9 ) << "       " <    
188               << setw( prec+9 ) << (*itrecB).G    
189         }                                         
190      }                                            
191                                                   
192      prevA= eventA;                               
193      prevB= eventB;                               
194                                                   
195      auto nextA= itrecA;                          
196      auto nextB= itrecB;                          
197                                                   
198      G4int nextAct = maxEvent, nextBct = maxEv    
199      ++nextA;                                     
200      ++nextB;                                     
201      if ( nextA != startA.end() ) { nextAct =     
202      if ( nextB !=   endB.end() ) { nextBct =     
203                                                   
204      isLastA=  ( nextA >= startA.end() );         
205      isLastB=  ( nextB >=   endB.end() );         
206                                                   
207      advanceA= ( nextAct <= nextBct ) && !isLa    
208      advanceB= ( nextBct <= nextAct ) && !isLa    
209                                                   
210      if( advanceA )                               
211      {                                            
212         ++itrecA;                                 
213         if( !isLastA ) { eventA = (*itrecA).Ge    
214         else { eventA = maxEvent; }               
215      }                                            
216                                                   
217      if( advanceB )                               
218      {                                            
219         ++itrecB;                                 
220         if( !isLastB ) { eventB = (*itrecB).Ge    
221         else { eventB = maxEvent; }               
222      }                                            
223                                                   
224      // Checks                                    
225      if( isLastA !=  ( nextA == startA.end() )    
226      {                                            
227         os << G4endl;                             
228         os << "  Checking isLastA= " << isLast    
229            << ( itrecA == startA.end() );         
230         os << " BAD --- ERROR " << G4endl;        
231      }                                            
232      if( isLastB !=  ( nextB == endB.end() ) )    
233      {                                            
234         os << G4endl;                             
235         os << "  Checking isLastB= " << isLast    
236            << ( itrecB ==  endB.end() );          
237         os << " BAD --- ERROR " << G4endl;        
238      }                                            
239                                                   
240   } while ( ! ( isLastA && isLastB ) );           
241                                                   
242   os << G4endl;                                   
243   os.precision(oldprc);                           
244   return os;                                      
245 }                                                 
246                                                   
247 // -------------------------------------------    
248 // Streaming operator dumping record              
249 //                                                
250 std::ostream& operator<< ( std::ostream& os, c    
251 {                                                 
252   return e.StreamInfo(os);                        
253 }                                                 
254                                                   
255 // -------------------------------------------    
256 // Stream object contents to an output stream     
257 //                                                
258 std::ostream& G4LocatorChangeRecord::StreamInf    
259 {                                                 
260   G4long oldprc = os.precision(16);               
261   os << "  count = " << fEventCount               
262      << "  iter= "   << fIteration                
263      << "  Location code = " << fCodeLocation     
264      << "  Length = " << GetLength() << G4endl    
265   os.precision(oldprc);                           
266   return os;                                      
267 }                                                 
268                                                   
269 // -------------------------------------------    
270 // Streaming operator                             
271 //                                                
272 std::ostream& operator << ( std::ostream& os,     
273                             const std::vector<    
274 {                                                 
275   G4LocatorChangeRecord::ReportVector( os, "",    
276   return os;                                      
277 }                                                 
278                                                   
279 // -------------------------------------------    
280 //                                                
281 const char *G4LocatorChangeRecord::GetNameChan    
282 {                                                 
283   return fNameChangeLocation[loc];                
284 }                                                 
285