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

#include <G4LocatorChangeLogger.hh>

+ Inheritance diagram for G4LocatorChangeLogger:

Public Member Functions

 G4LocatorChangeLogger (const std::string name)
 
void AddRecord (G4LocatorChangeRecord &&chngRecord)
 
void AddRecord (const G4LocatorChangeRecord &chngRecord)
 
void AddRecord (G4LocatorChangeRecord::EChangeLocation codeLocation, G4int iter, unsigned int count, const G4FieldTrack &fieldTrack)
 
std::ostream & StreamInfo (std::ostream &os) const
 

Static Public Member Functions

static std::ostream & ReportEndChanges (std::ostream &os, const G4LocatorChangeLogger &startA, const G4LocatorChangeLogger &endB)
 

Friends

std::ostream & operator<< (std::ostream &os, const G4LocatorChangeLogger &logR)
 

Detailed Description

Definition at line 42 of file G4LocatorChangeLogger.hh.

Constructor & Destructor Documentation

◆ G4LocatorChangeLogger()

G4LocatorChangeLogger::G4LocatorChangeLogger ( const std::string  name)
inline

Definition at line 46 of file G4LocatorChangeLogger.hh.

46: fName(name) {}

Member Function Documentation

◆ AddRecord() [1/3]

void G4LocatorChangeLogger::AddRecord ( const G4LocatorChangeRecord chngRecord)
inline

Definition at line 86 of file G4LocatorChangeLogger.hh.

88{
89 this->push_back( chngRecord );
90}

◆ AddRecord() [2/3]

void G4LocatorChangeLogger::AddRecord ( G4LocatorChangeRecord &&  chngRecord)
inline

Definition at line 93 of file G4LocatorChangeLogger.hh.

95{
96 this->push_back( chngRecord );
97}

◆ AddRecord() [3/3]

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

Definition at line 77 of file G4LocatorChangeLogger.hh.

81{
82 this->push_back(G4LocatorChangeRecord(codeLocation, iter, count, fieldTrack));
83}

◆ ReportEndChanges()

std::ostream & G4LocatorChangeLogger::ReportEndChanges ( std::ostream &  os,
const G4LocatorChangeLogger startA,
const G4LocatorChangeLogger endB 
)
static

Definition at line 61 of file G4LocatorChangeLogger.cc.

64{
65 using std::setw;
66 G4int prec= 16;
67 const G4bool confirm = true;
68 G4int oldprc = os.precision(prec);
69
70 auto itrecA= startA.cbegin();
71 auto itrecB= endB.cbegin();
72
73 os << "====================================================================="
74 << G4endl;
75 os << " Size of individual change record: startA : " << startA.size()
76 << " endB : " << endB.size() << G4endl;
77 os << "====================================================================="
78 << G4endl;
79
80 os << setw( 7 ) << "Change#" << " "
81 << setw( 4 ) << "Iter" << " "
82 << setw( 20 ) << "CodeLocation" << " "
83 << setw( prec+9 ) << "Length-A (start)" << " "
84 << setw( prec+9 ) << "Length-B (end)" << " "
85 << G4endl;
86 os << "=====================================================================";
87
88 auto eventA = (*itrecA).GetCount();
89 auto eventB = (*itrecB).GetCount();
90
91 G4bool isLastA= false;
92 G4bool isLastB= false;
93
94 G4int jA=0, jB=0;
95
96 G4int maxEvent = std::max( startA[ startA.size() - 1 ].GetCount() ,
97 endB[ endB.size() - 1 ].GetCount() );
98 G4int prevA = -1;
99 G4int prevB = -1;
100
101 G4bool advanceA= false, advanceB= false;
102 do
103 {
104 advanceA= false;
105 advanceB= false;
106
107 if( ((G4int)eventA>prevA) && ((G4int)eventB>prevB) )
108 {
109 auto codeLocA= (*itrecA).GetLocation();
110
111 os << G4endl;
112 os << setw( 7 ) << eventA << " "
113 << setw( 4 ) << (*itrecA).GetIteration() << " "
114 << setw( 3 ) << codeLocA << " "
115 << setw( 15 )
117 << setw( prec+9 ) << (*itrecA).GetLength() << " "
118 << setw( prec+9 ) << (*itrecB).GetLength() << " ";
119 if( confirm )
120 {
121 os << setw( 4 ) << (*itrecB).GetIteration() << " "
122 << setw( 15 ) << (*itrecB).GetLocation();
123 }
124 }
125 else
126 {
127 if ( (G4int)eventA > prevA )
128 {
129 auto codeLocA= (*itrecA).GetLocation();
130 os << G4endl;
131 os << setw( 7 ) << (*itrecA).GetCount() << " "
132 << setw( 4 ) << (*itrecA).GetIteration() << " "
133 << setw( 3 ) << codeLocA << " "
134 << setw( 15 )
136 << setw( prec+9 ) << (*itrecA).GetLength() << " "
137 << setw( prec+9 ) << " " << " ";
138 }
139 else
140 {
141 // assert( (G4int)eventB > prevB );
142 auto codeLocB= (*itrecB).GetLocation();
143
144 os << G4endl;
145 os << setw( 7 ) << eventB << " "
146 << setw( 4 ) << (*itrecB).GetIteration() << " "
147 << setw( 3 ) << codeLocB << " "
148 << setw( 15 )
150 << setw( prec+9 ) << " " << " "
151 << setw( prec+9 ) << (*itrecB).GetLength() << " " ;
152 }
153 }
154
155 prevA= eventA;
156 prevB= eventB;
157
158 auto nextA= itrecA;
159 auto nextB= itrecB;
160
161 G4int nextAct = maxEvent, nextBct = maxEvent;
162 ++nextA;
163 ++nextB;
164 if ( nextA != startA.end() ) { nextAct = (*nextA).GetCount(); }
165 if ( nextB != endB.end() ) { nextBct = (*nextB).GetCount(); }
166
167 isLastA= ( nextA >= startA.end() );
168 isLastB= ( nextB >= endB.end() );
169
170 advanceA= ( nextAct <= nextBct ) && !isLastA;
171 advanceB= ( nextBct <= nextAct ) && !isLastB;
172
173 if( advanceA )
174 {
175 ++itrecA;
176 if( !isLastA ) { ++jA; }
177 eventA = isLastA ? maxEvent : (*itrecA).GetCount();
178 }
179
180 if( advanceB )
181 {
182 ++itrecB;
183 if( !isLastB ) { ++jB; }
184 eventB = isLastB ? maxEvent : (*itrecB).GetCount();
185 }
186
187 // Checks
188 if( isLastA != ( nextA == startA.end() ) )
189 {
190 os << G4endl;
191 os << " Checking isLastA= " << isLastA
192 << " vs expected : " << ( itrecA == startA.end() );
193 os << " BAD --- ERROR " << G4endl;
194 }
195 if( isLastB != ( nextB == endB.end() ) )
196 {
197 os << G4endl;
198 os << " Checking isLastB= " << isLastB
199 << " vs expected : " << ( itrecB == endB.end() );
200 os << " BAD --- ERROR " << G4endl;
201 }
202 } while ( ! ( isLastA && isLastB ) );
203
204 os << G4endl;
205 os.precision(oldprc);
206 return os;
207}
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
static const char * GetNameChangeLocation(EChangeLocation)

Referenced by G4MultiLevelLocator::EstimateIntersectionPoint().

◆ StreamInfo()

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

Definition at line 50 of file G4LocatorChangeLogger.cc.

51{
52 G4int oldprc = os.precision(16);
53 G4LocatorChangeRecord::ReportVector( os, this->fName, *this );
54 os.precision(oldprc);
55 return os;
56}
static std::ostream & ReportVector(std::ostream &os, const std::string &nameOfRecord, const std::vector< G4LocatorChangeRecord > &lcr)

Friends And Related Function Documentation

◆ operator<<

std::ostream & operator<< ( std::ostream &  os,
const G4LocatorChangeLogger logR 
)
friend

Definition at line 41 of file G4LocatorChangeLogger.cc.

43{
44 return logger.StreamInfo(os);
45}

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