Geant4 Cross Reference

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


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // G4LocatorChangeLogger class implementation      26 // G4LocatorChangeLogger class implementation
 27 //                                                 27 //
 28 // Author: John Apostolakis, 04.09.19 - First      28 // Author: John Apostolakis, 04.09.19 - First version
 29 // -------------------------------------------     29 // --------------------------------------------------------------------
 30                                                    30 
 31 #include <iostream>                                31 #include <iostream>
 32 #include <iomanip>                                 32 #include <iomanip>
 33 #include <locale>                                  33 #include <locale>
 34 // #include <cassert>                              34 // #include <cassert>
 35                                                    35 
 36 #include "G4LocatorChangeLogger.hh"                36 #include "G4LocatorChangeLogger.hh"
 37                                                    37 
 38 // -------------------------------------------     38 // --------------------------------------------------------------------
 39 // Streaming operator dumping record               39 // Streaming operator dumping record 
 40 //                                                 40 //
 41 std::ostream& operator<< ( std::ostream& os,       41 std::ostream& operator<< ( std::ostream& os,
 42                            const G4LocatorChan     42                            const G4LocatorChangeLogger& logger )
 43 {                                                  43 {
 44   return logger.StreamInfo(os);                    44   return logger.StreamInfo(os);
 45 }                                                  45 }
 46                                                    46       
 47 // -------------------------------------------     47 // --------------------------------------------------------------------
 48 // Stream object contents to an output stream      48 // Stream object contents to an output stream
 49 //                                                 49 //
 50 std::ostream& G4LocatorChangeLogger::StreamInf     50 std::ostream& G4LocatorChangeLogger::StreamInfo(std::ostream& os) const
 51 {                                                  51 {
 52   G4long oldprc = os.precision(16);            <<  52   G4int oldprc = os.precision(16);
 53   G4LocatorChangeRecord::ReportVector( os, thi     53   G4LocatorChangeRecord::ReportVector( os, this->fName, *this );
 54   os.precision(oldprc);                            54   os.precision(oldprc);
 55   return os;                                       55   return os;
 56 }                                                  56 }
 57                                                    57 
 58 // -------------------------------------------     58 // --------------------------------------------------------------------
 59 //  Print the changes in start, end points in      59 //  Print the changes in start, end points in columns -- one event per row
 60 //                                                 60 //
 61 std::ostream& G4LocatorChangeLogger::ReportEnd     61 std::ostream& G4LocatorChangeLogger::ReportEndChanges( std::ostream& os,
 62                                        const G     62                                        const G4LocatorChangeLogger & startA,
 63                                        const G     63                                        const G4LocatorChangeLogger & endB )
 64 {                                                  64 {
 65   using std::setw;                                 65   using std::setw;
 66   G4int prec= 16;                                  66   G4int prec= 16;
 67   const G4bool confirm = true;                     67   const G4bool confirm = true;
 68   G4long oldprc = os.precision(prec);          <<  68   G4int oldprc = os.precision(prec);
 69                                                    69 
 70   auto itrecA= startA.cbegin();                    70   auto itrecA= startA.cbegin();
 71   auto itrecB= endB.cbegin();                      71   auto itrecB= endB.cbegin();
 72                                                    72 
 73   os << "=====================================     73   os << "====================================================================="
 74      << G4endl;                                    74      << G4endl;
 75   os << "  Size of individual change record:       75   os << "  Size of individual change record:  startA : " << startA.size() 
 76      << "  endB : " <<   endB.size() << G4endl     76      << "  endB : " <<   endB.size() << G4endl;
 77   os << "=====================================     77   os << "====================================================================="
 78      << G4endl;                                    78      << G4endl;
 79                                                    79 
 80   os << setw( 7 ) << "Change#"  << "  "            80   os << setw( 7 ) << "Change#"  << "  "
 81      << setw( 4 ) << "Iter"  << "  "               81      << setw( 4 ) << "Iter"  << "  "
 82      << setw( 20 ) << "CodeLocation"  << "  "      82      << setw( 20 ) << "CodeLocation"  << "  "
 83      << setw( prec+9 ) << "Length-A (start)" <     83      << setw( prec+9 ) << "Length-A (start)" << "  " 
 84      << setw( prec+9 ) << "Length-B (end)" <<      84      << setw( prec+9 ) << "Length-B (end)" << "  "
 85      << G4endl;                                    85      << G4endl;
 86   os << "=====================================     86   os << "=====================================================================";
 87                                                    87 
 88   auto eventA = (*itrecA).GetCount();              88   auto eventA = (*itrecA).GetCount();
 89   auto eventB = (*itrecB).GetCount();              89   auto eventB = (*itrecB).GetCount();
 90                                                    90 
 91   G4bool isLastA= false;                           91   G4bool isLastA= false;
 92   G4bool isLastB= false;                           92   G4bool isLastB= false;
 93                                                    93 
                                                   >>  94   G4int  jA=0, jB=0;
                                                   >>  95 
 94   G4int maxEvent = std::max( startA[ startA.si     96   G4int maxEvent = std::max( startA[ startA.size() - 1 ].GetCount() ,
 95                              endB[   endB.size     97                              endB[   endB.size() - 1 ].GetCount() );
 96   G4int prevA = -1;                                98   G4int prevA = -1;
 97   G4int prevB = -1;                                99   G4int prevB = -1;  
 98                                                   100 
 99   G4bool advanceA= false, advanceB= false;        101   G4bool advanceA= false, advanceB= false;
100   do                                              102   do
101   {                                               103   {
102      advanceA= false;                             104      advanceA= false;
103      advanceB= false;                             105      advanceB= false;
104                                                   106 
105      if( ((G4int)eventA>prevA) && ((G4int)even    107      if( ((G4int)eventA>prevA) && ((G4int)eventB>prevB) )
106      {                                            108      {
107         auto codeLocA= (*itrecA).GetLocation()    109         auto codeLocA= (*itrecA).GetLocation();
108                                                   110         
109         os << G4endl;                             111         os << G4endl;                   
110         os << setw( 7 ) << eventA  << "  "        112         os << setw( 7 ) << eventA  << "  " 
111            << setw( 4 ) << (*itrecA).GetIterat    113            << setw( 4 ) << (*itrecA).GetIteration()  << "  "
112            << setw( 3 ) << codeLocA << " "        114            << setw( 3 ) << codeLocA << " " 
113            << setw( 15 )                          115            << setw( 15 )
114            << G4LocatorChangeRecord::GetNameCh    116            << G4LocatorChangeRecord::GetNameChangeLocation( codeLocA ) << " "
115            << setw( prec+9 ) << (*itrecA).GetL    117            << setw( prec+9 ) << (*itrecA).GetLength() << "  " 
116            << setw( prec+9 ) << (*itrecB).GetL    118            << setw( prec+9 ) << (*itrecB).GetLength() << "  ";
117         if( confirm )                             119         if( confirm )
118         {                                         120         { 
119           os << setw( 4 ) << (*itrecB).GetIter    121           os << setw( 4 ) << (*itrecB).GetIteration()  << "  "
120              << setw( 15 ) << (*itrecB).GetLoc    122              << setw( 15 ) << (*itrecB).GetLocation();
121         }                                         123         }
122      }                                            124      }
123      else                                         125      else
124      {                                            126      {
125         if ( (G4int)eventA > prevA )              127         if ( (G4int)eventA > prevA )
126         {                                         128         {
127           auto codeLocA= (*itrecA).GetLocation    129           auto codeLocA= (*itrecA).GetLocation();           
128           os << G4endl;                           130           os << G4endl;           
129           os << setw( 7 ) << (*itrecA).GetCoun    131           os << setw( 7 ) << (*itrecA).GetCount() << "  " 
130              << setw( 4 ) << (*itrecA).GetIter    132              << setw( 4 ) << (*itrecA).GetIteration()  << "  "
131              << setw( 3 ) << codeLocA << " "      133              << setw( 3 ) << codeLocA << " " 
132              << setw( 15 )                        134              << setw( 15 )
133              << G4LocatorChangeRecord::GetName    135              << G4LocatorChangeRecord::GetNameChangeLocation( codeLocA ) << " "
134              << setw( prec+9 ) << (*itrecA).Ge    136              << setw( prec+9 ) << (*itrecA).GetLength() << "  " 
135              << setw( prec+9 ) << "       " <<    137              << setw( prec+9 ) << "       " << "  ";
136         }                                         138         }
137         else                                      139         else
138         {                                         140         {
139           // assert( (G4int)eventB > prevB );     141           // assert( (G4int)eventB > prevB );
140           auto codeLocB= (*itrecB).GetLocation    142           auto codeLocB= (*itrecB).GetLocation();
141                                                   143            
142           os << G4endl;                           144           os << G4endl;           
143           os << setw( 7 ) << eventB  << "  "      145           os << setw( 7 ) << eventB  << "  " 
144              << setw( 4 ) << (*itrecB).GetIter    146              << setw( 4 ) << (*itrecB).GetIteration()  << "  "
145              << setw( 3 ) << codeLocB << " "      147              << setw( 3 ) << codeLocB << " " 
146              << setw( 15 )                        148              << setw( 15 )
147              << G4LocatorChangeRecord::GetName    149              << G4LocatorChangeRecord::GetNameChangeLocation( codeLocB ) << " "
148              << setw( prec+9 ) << "       " <<    150              << setw( prec+9 ) << "       " << "  "
149              << setw( prec+9 ) << (*itrecB).Ge    151              << setw( prec+9 ) << (*itrecB).GetLength() << "  " ;           
150         }                                         152         }
151      }                                            153      }
152                                                   154 
153      prevA= eventA;                               155      prevA= eventA;
154      prevB= eventB;                               156      prevB= eventB;
155                                                   157      
156      auto nextA= itrecA;                          158      auto nextA= itrecA;
157      auto nextB= itrecB;                          159      auto nextB= itrecB;
158                                                   160      
159      G4int nextAct = maxEvent, nextBct = maxEv    161      G4int nextAct = maxEvent, nextBct = maxEvent;
160      ++nextA;                                     162      ++nextA;
161      ++nextB;                                     163      ++nextB;
162      if ( nextA != startA.end() ) { nextAct =     164      if ( nextA != startA.end() ) { nextAct = (*nextA).GetCount(); }
163      if ( nextB !=   endB.end() ) { nextBct =     165      if ( nextB !=   endB.end() ) { nextBct = (*nextB).GetCount(); }
164                                                   166 
165      isLastA=  ( nextA >= startA.end() );         167      isLastA=  ( nextA >= startA.end() );
166      isLastB=  ( nextB >=   endB.end() );         168      isLastB=  ( nextB >=   endB.end() );
167                                                   169      
168      advanceA= ( nextAct <= nextBct ) && !isLa    170      advanceA= ( nextAct <= nextBct ) && !isLastA;
169      advanceB= ( nextBct <= nextAct ) && !isLa    171      advanceB= ( nextBct <= nextAct ) && !isLastB;
170                                                   172 
171      if( advanceA )                               173      if( advanceA )
172      {                                            174      {
173         ++itrecA;                                 175         ++itrecA;
                                                   >> 176         if( !isLastA ) { ++jA; }
174         eventA = isLastA ? maxEvent : (*itrecA    177         eventA = isLastA ? maxEvent : (*itrecA).GetCount();
175      }                                            178      }
176                                                   179      
177      if( advanceB )                               180      if( advanceB )
178      {                                            181      {
179         ++itrecB;                                 182         ++itrecB;
                                                   >> 183         if( !isLastB ) { ++jB; } 
180         eventB = isLastB ? maxEvent : (*itrecB    184         eventB = isLastB ? maxEvent : (*itrecB).GetCount();
181      }                                            185      }
182                                                   186 
183      // Checks                                    187      // Checks
184      if( isLastA !=  ( nextA == startA.end() )    188      if( isLastA !=  ( nextA == startA.end() ) )
185      {                                            189      {
186         os << G4endl;                             190         os << G4endl;
187         os << "  Checking isLastA= " << isLast    191         os << "  Checking isLastA= " << isLastA
188            << " vs expected :  " << ( itrecA =    192            << " vs expected :  " << ( itrecA == startA.end() );
189         os << " BAD --- ERROR " << G4endl;        193         os << " BAD --- ERROR " << G4endl;
190      }                                            194      }
191      if( isLastB !=  ( nextB == endB.end() ) )    195      if( isLastB !=  ( nextB == endB.end() ) )
192      {                                            196      {
193         os << G4endl;                             197         os << G4endl;        
194         os << "  Checking isLastB= " << isLast    198         os << "  Checking isLastB= " << isLastB
195            << " vs expected :  " << ( itrecB =    199            << " vs expected :  " << ( itrecB ==  endB.end() );        
196         os << " BAD --- ERROR " << G4endl;        200         os << " BAD --- ERROR " << G4endl;        
197      }                                            201      }       
198   } while ( ! ( isLastA && isLastB ) );           202   } while ( ! ( isLastA && isLastB ) );
199                                                   203   
200   os << G4endl;                                   204   os << G4endl;           
201   os.precision(oldprc);                           205   os.precision(oldprc);
202   return os;                                      206   return os;
203 }                                                 207 }
204                                                   208