57 physicsManager( physicsManager )
75 G4int nmbOfFalseHitsTriggeredEDT,
76 G4int nmbOfFalseHitsTriggeredRec )
87 const size_t nmbOfAuxColumns( 6 );
88 const std::streamsize
prec( 8 );
89 std::vector< std::vector< std::string > > auxStrings;
90 size_t maxSize[ nmbOfAuxColumns ];
92 for (
size_t i( 0 ); i < nmbOfAuxColumns; ++i )
98 maxSize[ 0 ] = prec + 2;
99 maxSize[ 3 ] = prec + 2;
101 for ( CexmcAngularRangeList::const_iterator k( angularRanges.begin() );
102 k != angularRanges.end(); ++k )
105 G4int totalFull( 0 );
106 G4int triggered( 0 );
107 G4double acc( std::numeric_limits< G4double >::quiet_NaN() );
109 CexmcNmbOfHitsInRanges::const_iterator found(
110 nmbOfHitsSampled.find( k->index ) );
111 if ( found != nmbOfHitsSampled.end() )
113 total = found->second;
117 found = nmbOfHitsSampledFull.find( k->index );
118 if ( found != nmbOfHitsSampledFull.end() )
120 totalFull = found->second;
124 found = nmbOfHitsTriggeredRealRange.find( k->index );
125 if ( found != nmbOfHitsTriggeredRealRange.end() )
127 triggered = found->second;
132 std::ostringstream auxStringStream[ nmbOfAuxColumns ];
134 for (
size_t i( 0 ); i < nmbOfAuxColumns; ++i )
136 auxStringStream[ i ].precision( prec );
137 auxStringStream[ i ].flags( std::ios::fixed );
142 auxStringStream[ i ] << acc;
143 auxStringStream[ ++i ] << triggered;
144 size_t size( auxStringStream[ i ].str().size() );
145 maxSize[ i ] = maxSize[ i ] > size ? maxSize[ i ] : size;
146 auxStringStream[ ++i ] <<
total;
147 size = auxStringStream[ i ].str().size();
148 maxSize[ i ] = maxSize[ i ] > size ? maxSize[ i ] : size;
152 found = nmbOfHitsTriggeredRecRange.find( k->index );
153 if ( found != nmbOfHitsTriggeredRecRange.end() )
155 triggered = found->second;
160 auxStringStream[ ++i ] << acc;
161 auxStringStream[ ++i ] << triggered;
162 size = auxStringStream[ i ].str().size();
163 maxSize[ i ] = maxSize[ i ] > size ? maxSize[ i ] : size;
164 auxStringStream[ ++i ] << totalFull;
165 size = auxStringStream[ i ].str().size();
166 maxSize[ i ] = maxSize[ i ] > size ? maxSize[ i ] : size;
168 std::vector< std::string > auxString( nmbOfAuxColumns );
170 for (
size_t i( 0 ); i < nmbOfAuxColumns; ++i )
171 auxString[ i ] = auxStringStream[ i ].str();
173 auxStrings.push_back( auxString );
176 G4cout <<
" --- Setup acceptances (range | real (trg / mon) | "
177 "rec (trg / mon / all)):" <<
G4endl;
180 for ( CexmcAngularRangeList::const_iterator k( angularRanges.begin() );
181 k != angularRanges.end(); ++k )
185 G4cout <<
" | " << std::setw( maxSize[ j ] );
186 G4cout << auxStrings[ i ][ j++ ];
187 G4cout <<
" ( " << std::setw( maxSize[ j ] );
188 G4cout << auxStrings[ i ][ j++ ];
189 G4cout <<
" / " << std::setw( maxSize[ j ] );
190 G4cout << auxStrings[ i ][ j++ ];
191 G4cout <<
" ) | " << std::setw( maxSize[ j ] );
192 G4cout << auxStrings[ i ][ j++ ];
193 G4cout <<
" ( " << std::setw( maxSize[ j ] );
194 G4cout << auxStrings[ i ][ j++ ];
195 G4cout <<
" / " << std::setw( maxSize[ 2 ] );
196 G4cout << auxStrings[ i ][ 2 ];
197 G4cout <<
" / " << std::setw( maxSize[ j ] );
204 if ( ! angularGaps.empty() )
207 for ( CexmcAngularRangeList::const_iterator k( angularGaps.begin() );
208 k != angularGaps.end(); ++k )
213 CexmcNmbOfHitsInRanges::const_iterator found(
214 nmbOfOrphanHits.find( k->index ) );
215 if ( found != nmbOfHitsSampled.end() )
217 total = found->second;
224 G4cout <<
" False hits (edt | rec): " <<
225 nmbOfFalseHitsTriggeredEDT <<
" | " << nmbOfFalseHitsTriggeredRec <<
232 const CexmcRun * theRun( static_cast< const CexmcRun * >( run ) );
247 if ( ! productionModel )
251 productionModel->GetAngularRanges() );
255 nmbOfHitsTriggeredRealRange, nmbOfHitsTriggeredRecRange,
256 nmbOfOrphanHits, angularRanges,
const CexmcNmbOfHitsInRanges & GetNmbOfHitsSampled(void) const
const CexmcNmbOfHitsInRanges & GetNmbOfHitsSampledFull(void) const
G4int GetNmbOfFalseHitsTriggeredEDT(void) const
const CexmcNmbOfHitsInRanges & GetNmbOfHitsTriggeredRealRange(void) const
CexmcRunAction(CexmcPhysicsManager *physicsManager)
G4GLOB_DLL std::ostream G4cout
G4Run * GenerateRun(void)
const CexmcNmbOfHitsInRanges & GetNmbOfHitsTriggeredRecRange(void) const
const CexmcNmbOfHitsInRanges & GetNmbOfOrphanHits(void) const
static void PrintResults(const CexmcNmbOfHitsInRanges &nmbOfHitsSampled, const CexmcNmbOfHitsInRanges &nmbOfHitsSampledFull, const CexmcNmbOfHitsInRanges &nmbOfHitsTriggeredRealRange, const CexmcNmbOfHitsInRanges &nmbOfHitsTriggeredRecRange, const CexmcNmbOfHitsInRanges &nmbOfOrphanHits, const CexmcAngularRangeList &angularRanges, G4int nmbOfFalseHitsTriggeredEDT, G4int nmbOfFalseHitsTriggeredRec)
G4double total(Particle const *const p1, Particle const *const p2)
CexmcPhysicsManager * physicsManager
std::vector< CexmcAngularRange > CexmcAngularRangeList
virtual CexmcProductionModel * GetProductionModel(void)=0
void EndOfRunAction(const G4Run *run)
G4int GetNmbOfFalseHitsTriggeredRec(void) const
std::map< G4int, G4int > CexmcNmbOfHitsInRanges
void GetAngularGaps(const CexmcAngularRangeList &src, CexmcAngularRangeList &dst)