103{
104 using std::setw;
106 const G4bool confirm =
true;
107 G4long oldprc = os.precision(prec);
108
109 std::vector<G4LocatorChangeRecord>::const_iterator itrecA, itrecB;
110 itrecA= startA.begin();
111 itrecB= endB.begin();
113 os << "=========================================================================================";
115 os <<
" * endPoints A (start) and B (end): combined changes of AB intervals" <<
G4endl;
116 os << " * Sizes of change records: start(A) : " << startA.size()
117 <<
" end(B) : " << endB.size() <<
G4endl;
118 os << "========================================================================================="
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)" << " "
127 os << "=====================================================================";
128
129
130 auto eventA = (*itrecA).GetCount();
131 auto eventB = (*itrecB).GetCount();
132
135
136 G4int maxEvent = std::max( startA[ startA.size() - 1 ].GetCount() ,
137 endB[ endB.size() - 1 ].GetCount() );
140
141 G4bool advanceA=
false, advanceB=
false;
142 do
143 {
144 advanceA= false;
145 advanceB= false;
146
147 if( ((
G4int)eventA>prevA) && ((
G4int)eventB>prevB) )
148 {
149 auto codeLocA= (*itrecA).GetLocation();
150
152 os << setw( 7 ) << eventA << " "
153 << setw( 4 ) << (*itrecA).GetIteration() << " "
154 << setw( 3 ) << codeLocA << " "
156 << setw( prec+9 ) << (*itrecA).GetLength() << " "
157 << setw( prec+9 ) << (*itrecB).GetLength() << " ";
158 if( confirm )
159 {
160 os << setw( 4 ) << (*itrecB).GetIteration() << " "
161 << setw( 15 ) << (*itrecB).GetLocation();
162 }
163 }
164 else
165 {
166 if ( (
G4int)eventA > prevA )
167 {
168 auto codeLocA = (*itrecA).GetLocation();
170 os << setw( 7 ) << (*itrecA).GetCount() << " "
171 << setw( 4 ) << (*itrecA).GetIteration() << " "
172 << setw( 3 ) << codeLocA << " "
174 << setw( prec+9 ) << (*itrecA).GetLength() << " "
175 << setw( prec+9 ) << " " << " ";
176 }
177 else
178 {
179
180 auto codeLocB = (*itrecB).GetLocation();
181
183 os << setw( 7 ) << eventB << " "
184 << setw( 4 ) << (*itrecB).GetIteration() << " "
185 << setw( 3 ) << codeLocB << " "
187 << setw( prec+9 ) << " " << " "
188 << setw( prec+9 ) << (*itrecB).GetLength() << " " ;
189 }
190 }
191
192 prevA= eventA;
193 prevB= eventB;
194
195 auto nextA= itrecA;
196 auto nextB= itrecB;
197
198 G4int nextAct = maxEvent, nextBct = maxEvent;
199 ++nextA;
200 ++nextB;
201 if ( nextA != startA.end() ) { nextAct = (*nextA).GetCount(); }
202 if ( nextB != endB.end() ) { nextBct = (*nextB).GetCount(); }
203
204 isLastA= ( nextA >= startA.end() );
205 isLastB= ( nextB >= endB.end() );
206
207 advanceA= ( nextAct <= nextBct ) && !isLastA;
208 advanceB= ( nextBct <= nextAct ) && !isLastB;
209
210 if( advanceA )
211 {
212 ++itrecA;
213 if( !isLastA ) { eventA = (*itrecA).GetCount(); }
214 else { eventA = maxEvent; }
215 }
216
217 if( advanceB )
218 {
219 ++itrecB;
220 if( !isLastB ) { eventB = (*itrecB).GetCount(); }
221 else { eventB = maxEvent; }
222 }
223
224
225 if( isLastA != ( nextA == startA.end() ) )
226 {
228 os << " Checking isLastA= " << isLastA << " vs expected : "
229 << ( itrecA == startA.end() );
230 os <<
" BAD --- ERROR " <<
G4endl;
231 }
232 if( isLastB != ( nextB == endB.end() ) )
233 {
235 os << " Checking isLastB= " << isLastB << " vs expected : "
236 << ( itrecB == endB.end() );
237 os <<
" BAD --- ERROR " <<
G4endl;
238 }
239
240 } while ( ! ( isLastA && isLastB ) );
241
243 os.precision(oldprc);
244 return os;
245}