Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4LocatorChangeRecord Class Reference

#include <G4LocatorChangeRecord.hh>

Public Types

enum  EChangeLocation {
  kInvalidCL = 0 , kUnknownCL = 1 , kInitialisingCL , kIntersectsAF ,
  kIntersectsFB , kNoIntersectAForFB , kRecalculatedB , kInsertingMidPoint ,
  kRecalculatedBagn , kLevelPop
}
 

Public Member Functions

 G4LocatorChangeRecord (EChangeLocation codeLocation, G4int iter, unsigned int count, const G4FieldTrack &fieldTrack)
 
 G4LocatorChangeRecord (const G4LocatorChangeRecord &)=default
 
 G4LocatorChangeRecord (G4LocatorChangeRecord &&)=default
 
EChangeLocation GetLocation () const
 
unsigned int GetCount () const
 
G4int GetIteration () const
 
G4double GetLength () const
 
std::ostream & StreamInfo (std::ostream &os) const
 

Static Public Member Functions

static const char * GetNameChangeLocation (EChangeLocation)
 
static std::ostream & ReportVector (std::ostream &os, const std::string &nameOfRecord, const std::vector< G4LocatorChangeRecord > &lcr)
 
static std::ostream & ReportEndChanges (std::ostream &os, const std::vector< G4LocatorChangeRecord > &startA, const std::vector< G4LocatorChangeRecord > &endB)
 

Static Public Attributes

static const char * fNameChangeLocation []
 

Friends

std::ostream & operator<< (std::ostream &os, const G4LocatorChangeRecord &r)
 
std::ostream & operator<< (std::ostream &os, const std::vector< G4LocatorChangeRecord > &vecR)
 

Detailed Description

Definition at line 41 of file G4LocatorChangeRecord.hh.

Member Enumeration Documentation

◆ EChangeLocation

Enumerator
kInvalidCL 
kUnknownCL 
kInitialisingCL 
kIntersectsAF 
kIntersectsFB 
kNoIntersectAForFB 
kRecalculatedB 
kInsertingMidPoint 
kRecalculatedBagn 
kLevelPop 

Definition at line 45 of file G4LocatorChangeRecord.hh.

Constructor & Destructor Documentation

◆ G4LocatorChangeRecord() [1/3]

G4LocatorChangeRecord::G4LocatorChangeRecord ( EChangeLocation  codeLocation,
G4int  iter,
unsigned int  count,
const G4FieldTrack fieldTrack 
)
inline

Definition at line 54 of file G4LocatorChangeRecord.hh.

58 : fCodeLocation( codeLocation), fIteration(iter), fEventCount(count),
59 fFieldTrack( fieldTrack ) {}

◆ G4LocatorChangeRecord() [2/3]

G4LocatorChangeRecord::G4LocatorChangeRecord ( const G4LocatorChangeRecord )
default

◆ G4LocatorChangeRecord() [3/3]

G4LocatorChangeRecord::G4LocatorChangeRecord ( G4LocatorChangeRecord &&  )
default

Member Function Documentation

◆ GetCount()

unsigned int G4LocatorChangeRecord::GetCount ( ) const
inline

Definition at line 70 of file G4LocatorChangeRecord.hh.

70{ return fEventCount; }

◆ GetIteration()

G4int G4LocatorChangeRecord::GetIteration ( ) const
inline

Definition at line 71 of file G4LocatorChangeRecord.hh.

71{ return fIteration; }

◆ GetLength()

G4double G4LocatorChangeRecord::GetLength ( ) const
inline

Definition at line 72 of file G4LocatorChangeRecord.hh.

72{ return fFieldTrack.GetCurveLength(); }
G4double GetCurveLength() const

Referenced by StreamInfo().

◆ GetLocation()

EChangeLocation G4LocatorChangeRecord::GetLocation ( ) const
inline

Definition at line 69 of file G4LocatorChangeRecord.hh.

69{ return fCodeLocation; }

◆ GetNameChangeLocation()

const char * G4LocatorChangeRecord::GetNameChangeLocation ( EChangeLocation  loc)
static

Definition at line 281 of file G4LocatorChangeRecord.cc.

282{
283 return fNameChangeLocation[loc];
284}
static const char * fNameChangeLocation[]

Referenced by G4LocatorChangeLogger::ReportEndChanges().

◆ ReportEndChanges()

std::ostream & G4LocatorChangeRecord::ReportEndChanges ( std::ostream &  os,
const std::vector< G4LocatorChangeRecord > &  startA,
const std::vector< G4LocatorChangeRecord > &  endB 
)
static

Definition at line 99 of file G4LocatorChangeRecord.cc.

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_iterator itrecA, itrecB;
110 itrecA= startA.begin();
111 itrecB= endB.begin();
112 os << G4endl;
113 os << "=========================================================================================";
114 os << G4endl << " ** Change records: " << G4endl;
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 << "========================================================================================="
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.size() - 1 ].GetCount() ,
137 endB[ endB.size() - 1 ].GetCount() );
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)eventB>prevB) )
148 {
149 auto codeLocA= (*itrecA).GetLocation();
150
151 os << G4endl;
152 os << setw( 7 ) << eventA << " "
153 << setw( 4 ) << (*itrecA).GetIteration() << " "
154 << setw( 3 ) << codeLocA << " "
155 << setw( 15 ) << fNameChangeLocation[ 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();
169 os << G4endl;
170 os << setw( 7 ) << (*itrecA).GetCount() << " "
171 << setw( 4 ) << (*itrecA).GetIteration() << " "
172 << setw( 3 ) << codeLocA << " "
173 << setw( 15 ) << fNameChangeLocation[ codeLocA ] << " "
174 << setw( prec+9 ) << (*itrecA).GetLength() << " "
175 << setw( prec+9 ) << " " << " ";
176 }
177 else
178 {
179 // assert( (G4int)eventB > prevB );
180 auto codeLocB = (*itrecB).GetLocation();
181
182 os << G4endl;
183 os << setw( 7 ) << eventB << " "
184 << setw( 4 ) << (*itrecB).GetIteration() << " "
185 << setw( 3 ) << codeLocB << " "
186 << setw( 15 ) << fNameChangeLocation[ 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 // Checks
225 if( isLastA != ( nextA == startA.end() ) )
226 {
227 os << G4endl;
228 os << " Checking isLastA= " << isLastA << " vs expected : "
229 << ( itrecA == startA.end() );
230 os << " BAD --- ERROR " << G4endl;
231 }
232 if( isLastB != ( nextB == endB.end() ) )
233 {
234 os << G4endl;
235 os << " Checking isLastB= " << isLastB << " vs expected : "
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}
long G4long
Definition: G4Types.hh:87
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57

Referenced by G4MultiLevelLocator::EstimateIntersectionPoint().

◆ ReportVector()

std::ostream & G4LocatorChangeRecord::ReportVector ( std::ostream &  os,
const std::string &  nameOfRecord,
const std::vector< G4LocatorChangeRecord > &  lcr 
)
static

Definition at line 48 of file G4LocatorChangeRecord.cc.

51{
52 using std::setw;
53 G4int prec= 16;
54 if( vecRec.size() == 0 )
55 {
56 os << "Locator Change Record for " << name << " is empty" << G4endl;
57 return os;
58 }
59
60 G4long oldprc = os.precision(prec);
61
62 // std::vector<G4LocatorChangeRecord>::const_iterator
63 auto itRec
64 = std::vector<G4LocatorChangeRecord>::const_iterator(vecRec.cbegin());
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() << " " // Event Count
80 << setw( 4 ) << (*itRec).GetIteration() << " "
81 << std::left
82 << setw( prec+9 ) << (*itRec).GetLength() << " "
83 << setw( 2 ) << locationCode << " " // location enum
84 << setw( 15 ) << fNameChangeLocation[ locationCode ]
85 << std::internal
86 ;
87 os << G4endl;
88 ++itRec;
89
90 } while ( itRec != vecRec.cend() );
91
92 os.precision(oldprc);
93 return os;
94}
const char * name(G4int ptype)

Referenced by G4LocatorChangeLogger::StreamInfo().

◆ StreamInfo()

std::ostream & G4LocatorChangeRecord::StreamInfo ( std::ostream &  os) const

Definition at line 258 of file G4LocatorChangeRecord.cc.

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}

Friends And Related Function Documentation

◆ operator<< [1/2]

std::ostream & operator<< ( std::ostream &  os,
const G4LocatorChangeRecord r 
)
friend

Definition at line 250 of file G4LocatorChangeRecord.cc.

251{
252 return e.StreamInfo(os);
253}

◆ operator<< [2/2]

std::ostream & operator<< ( std::ostream &  os,
const std::vector< G4LocatorChangeRecord > &  vecR 
)
friend

Definition at line 272 of file G4LocatorChangeRecord.cc.

274{
276 return os;
277}
static std::ostream & ReportVector(std::ostream &os, const std::string &nameOfRecord, const std::vector< G4LocatorChangeRecord > &lcr)

Member Data Documentation

◆ fNameChangeLocation

const char * G4LocatorChangeRecord::fNameChangeLocation
static
Initial value:
=
{ "Invalid", "Unknown", "Initialising", "IntersectsAF", "IntersectsFB",
"NoIntersections-AForFB", "RecalculatedB",
"InsertingMidPoint", "RecalculatedB-2ndHalf",
"Level Pop" }

Definition at line 51 of file G4LocatorChangeRecord.hh.

Referenced by GetNameChangeLocation(), ReportEndChanges(), and ReportVector().


The documentation for this class was generated from the following files: