#include <G4Analyser.hh>
Public Member Functions | |
G4Analyser () | |
void | setInelCsec (G4double csec, G4bool withn) |
void | setWatchers (const std::vector< G4NuclWatcher > &watchers) |
void | try_watchers (G4int a, G4int z, G4bool if_nucl) |
void | analyse (const G4CollisionOutput &output) |
void | printResults () |
void | printResultsSimple () |
void | handleWatcherStatistics () |
void | printResultsNtuple () |
Definition at line 44 of file G4Analyser.hh.
G4Analyser::G4Analyser | ( | ) |
Definition at line 36 of file G4Analyser.cc.
References G4cout, and G4endl.
00037 : verboseLevel(0), eventNumber(0.0), averageMultiplicity(0.0), 00038 averageProtonNumber(0.0), averageNeutronNumber(0.0), 00039 averagePionNumber(0.0), averageNucleonKinEnergy(0.0), 00040 averageProtonKinEnergy(0.0), averageNeutronKinEnergy(0.0), 00041 averagePionKinEnergy(0.0), averageExitationEnergy(0.0), 00042 averageOutgoingNuclei(0.0), fissy_prob(0.0), averagePionPl(0.0), 00043 averagePionMin(0.0), averagePion0(0.0), averageA(0.0), averageZ(0.0), 00044 inel_csec(0.0), withNuclei(false) { 00045 if (verboseLevel > 3) { 00046 G4cout << " >>> G4Analyser::G4Analyser" << G4endl; 00047 } 00048 }
void G4Analyser::analyse | ( | const G4CollisionOutput & | output | ) |
Definition at line 96 of file G4Analyser.cc.
References G4InuclParticleNames::ap, G4cout, G4endl, G4CollisionOutput::getOutgoingNuclei(), G4CollisionOutput::getOutgoingParticles(), and try_watchers().
00096 { 00097 00098 if (verboseLevel > 3) { 00099 G4cout << " >>> G4Analyser::analyse" << G4endl; 00100 } 00101 00102 if (withNuclei) { 00103 const std::vector<G4InuclNuclei>& nucleus = output.getOutgoingNuclei(); 00104 00105 // if (nucleus.size() >= 0) { 00106 if (nucleus.size() > 0) { 00107 G4int nbig = 0; 00108 averageOutgoingNuclei += nucleus.size(); 00109 00110 for (G4int in = 0; in < G4int(nucleus.size()); in++) { 00111 averageExitationEnergy += nucleus[in].getExitationEnergy(); 00112 00113 G4int a = nucleus[in].getA(); 00114 G4int z = nucleus[in].getZ(); 00115 00116 if (in == 0) { 00117 averageA += a; 00118 averageZ += z; 00119 }; 00120 00121 if (a > 10) nbig++; 00122 try_watchers(a, z, true); 00123 }; 00124 00125 if (nbig > 1) fissy_prob += 1.0; 00126 eventNumber += 1.0; 00127 const std::vector<G4InuclElementaryParticle>& particles = 00128 output.getOutgoingParticles(); 00129 averageMultiplicity += particles.size(); 00130 00131 for (G4int i = 0; i < G4int(particles.size()); i++) { 00132 G4int ap = 0; 00133 G4int zp = 0; 00134 00135 if (particles[i].nucleon()) { 00136 averageNucleonKinEnergy += particles[i].getKineticEnergy(); 00137 00138 if (particles[i].type() == 1) { 00139 zp = 1; 00140 ap = 1; 00141 averageProtonNumber += 1.0; 00142 averageProtonKinEnergy += particles[i].getKineticEnergy(); 00143 00144 } else { 00145 ap = 1; 00146 zp = 0; 00147 averageNeutronNumber += 1.0; 00148 averageNeutronKinEnergy += particles[i].getKineticEnergy(); 00149 }; 00150 00151 } else if (particles[i].pion()) { 00152 averagePionKinEnergy += particles[i].getKineticEnergy(); 00153 averagePionNumber += 1.0; 00154 ap = 0; 00155 00156 if (particles[i].type() == 3) { 00157 zp = 1; 00158 averagePionPl += 1.0; 00159 00160 } else if (particles[i].type() == 5) { 00161 zp = -1; 00162 averagePionMin += 1.0; 00163 00164 } else if (particles[i].type() == 7) { 00165 zp = 0; 00166 averagePion0 += 1.0; 00167 }; 00168 }; 00169 try_watchers(ap, zp, false); 00170 }; 00171 }; 00172 00173 } else { 00174 eventNumber += 1.0; 00175 const std::vector<G4InuclElementaryParticle>& particles = 00176 output.getOutgoingParticles(); 00177 averageMultiplicity += particles.size(); 00178 00179 for (G4int i = 0; i < G4int(particles.size()); i++) { 00180 00181 if (particles[i].nucleon()) { 00182 averageNucleonKinEnergy += particles[i].getKineticEnergy(); 00183 00184 if (particles[i].type() == 1) { 00185 averageProtonNumber += 1.0; 00186 averageProtonKinEnergy += particles[i].getKineticEnergy(); 00187 00188 } else { 00189 averageNeutronNumber += 1.0; 00190 averageNeutronKinEnergy += particles[i].getKineticEnergy(); 00191 } 00192 00193 } else if (particles[i].pion()) { 00194 averagePionKinEnergy += particles[i].getKineticEnergy(); 00195 averagePionNumber += 1.0; 00196 } 00197 } 00198 } 00199 }
void G4Analyser::handleWatcherStatistics | ( | ) |
Definition at line 266 of file G4Analyser.cc.
References G4cout, and G4endl.
Referenced by printResults().
00266 { 00267 00268 if (verboseLevel > 3) { 00269 G4cout << " >>> G4Analyser::handleWatcherStatistics" << G4endl; 00270 } 00271 00272 // const G4double small = 1.0e-10; 00273 00274 if (verboseLevel > 3) { 00275 G4cout << " >>>Izotop analysis:" << G4endl; 00276 }; 00277 00278 G4double fgr = 0.0; 00279 G4double averat = 0.0; 00280 G4double ave_err = 0.0; 00281 G4double gl_chsq = 0.0; 00282 G4double tot_exper = 0.0; 00283 G4double tot_exper_err = 0.0; 00284 G4double tot_inucl = 0.0; 00285 G4double tot_inucl_err = 0.0; 00286 G4double checked = 0.0; 00287 00288 for (G4int iw = 0; iw < G4int(ana_watchers.size()); iw++) { 00289 ana_watchers[iw].setInuclCs(inel_csec, G4int(eventNumber)); 00290 ana_watchers[iw].print(); 00291 00292 if (ana_watchers[iw].to_check()) { 00293 std::pair<G4double, G4double> rat_err = ana_watchers[iw].getAverageRatio(); 00294 averat += rat_err.first; 00295 ave_err += rat_err.second; 00296 gl_chsq += ana_watchers[iw].getChsq(); 00297 std::pair<G4double, G4double> cs_err = ana_watchers[iw].getExpCs(); 00298 tot_exper += cs_err.first; 00299 tot_exper_err += cs_err.second; 00300 std::pair<G4double, G4double> inucl_cs_err = ana_watchers[iw].getInuclCs(); 00301 tot_inucl += inucl_cs_err.first; 00302 tot_inucl_err += inucl_cs_err.second; 00303 G4double iz_checked = ana_watchers[iw].getNmatched(); 00304 00305 if (iz_checked > 0.0) { 00306 fgr += ana_watchers[iw].getLhood(); 00307 checked += iz_checked; 00308 }; 00309 }; 00310 }; 00311 00312 if (checked > 0.0) { 00313 gl_chsq = std::sqrt(gl_chsq) / checked; 00314 averat /= checked; 00315 ave_err /= checked; 00316 fgr = std::pow(10.0, std::sqrt(fgr / checked)); 00317 }; 00318 00319 if (verboseLevel > 3) { 00320 G4cout << " total exper c.s. " << tot_exper << " err " << tot_exper_err << 00321 " tot inucl c.s. " << tot_inucl << " err " << tot_inucl_err << G4endl; 00322 G4cout << " checked total " << checked << " lhood " << fgr << G4endl 00323 << " average ratio " << averat << " err " << ave_err << G4endl 00324 << " global chsq " << gl_chsq << G4endl; 00325 } 00326 }
void G4Analyser::printResults | ( | ) |
Definition at line 230 of file G4Analyser.cc.
References G4cout, G4endl, and handleWatcherStatistics().
00230 { 00231 00232 if (verboseLevel > 3) { 00233 G4cout << " >>> G4Analyser::printResults" << G4endl; 00234 } 00235 00236 G4cout << " Number of events " << G4int(eventNumber + 0.1) << G4endl 00237 << " average multiplicity " << averageMultiplicity / eventNumber << G4endl 00238 << " average proton number " << averageProtonNumber / eventNumber << G4endl 00239 << " average neutron number " << averageNeutronNumber / eventNumber << G4endl 00240 << " average nucleon Ekin " << averageNucleonKinEnergy / 00241 (averageProtonNumber + averageNeutronNumber) << G4endl 00242 << " average proton Ekin " << averageProtonKinEnergy / (averageProtonNumber + 00243 1.0e-10) << G4endl 00244 << " average neutron Ekin " << averageNeutronKinEnergy / (averageNeutronNumber + 00245 1.0e-10) << G4endl 00246 << " average pion number " << averagePionNumber / eventNumber << G4endl 00247 << " average pion Ekin " << averagePionKinEnergy / (averagePionNumber + 00248 1.0e-10) << G4endl 00249 << " average pi+ " << averagePionPl / eventNumber << G4endl 00250 << " average pi- " << averagePionMin / eventNumber << G4endl 00251 << " average pi0 " << averagePion0 / eventNumber << G4endl; 00252 00253 if (withNuclei) { 00254 G4cout 00255 << " average A " << averageA / eventNumber << G4endl 00256 << " average Z " << averageZ / eventNumber << G4endl 00257 << " average Exitation Energy " << 00258 averageExitationEnergy / averageOutgoingNuclei << G4endl 00259 << " average num of fragments " << averageOutgoingNuclei / eventNumber << G4endl; 00260 G4cout << " fission prob. " << fissy_prob / eventNumber << " c.sec " << 00261 inel_csec * fissy_prob / eventNumber << G4endl; 00262 handleWatcherStatistics(); 00263 } 00264 }
void G4Analyser::printResultsNtuple | ( | ) |
Definition at line 328 of file G4Analyser.cc.
References G4cout, and G4endl.
00328 { 00329 00330 if (verboseLevel > 3) { 00331 G4cout << " >>> G4Analyser::printResultsNtuple" << G4endl; 00332 } 00333 00334 // Create one line of ACII data. 00335 // Several runs should create ntuple for data-analysis 00336 G4cout << 00337 std::setw(15) << int(eventNumber + 0.1) << 00338 std::setw(15) << averageMultiplicity / eventNumber << 00339 std::setw(15) << averageProtonNumber / eventNumber << 00340 std::setw(15) << averageNeutronNumber / eventNumber << " " << 00341 std::setw(15) << averageNucleonKinEnergy / (averageProtonNumber + averageNeutronNumber) << " " << 00342 std::setw(15) << averageProtonKinEnergy / (averageProtonNumber + 1.0e-10) << " " << 00343 std::setw(15) << averageNeutronKinEnergy / (averageNeutronNumber + 1.0e-10) << " " << 00344 std::setw(15) << averagePionNumber / eventNumber << " " << 00345 std::setw(15) << averagePionKinEnergy / (averagePionNumber + 1.0e-10) << G4endl; 00346 }
void G4Analyser::printResultsSimple | ( | ) |
Definition at line 201 of file G4Analyser.cc.
References G4cout, and G4endl.
00201 { 00202 00203 if (verboseLevel > 3) { 00204 G4cout << " >>> G4Analyser::printResultsSimple" << G4endl; 00205 } 00206 00207 G4cout << " Number of events " << G4int(eventNumber + 0.1) << G4endl 00208 << " average multiplicity " << averageMultiplicity / eventNumber << G4endl 00209 << " average proton number " << averageProtonNumber / eventNumber << G4endl 00210 << " average neutron number " << averageNeutronNumber / eventNumber << G4endl 00211 << " average nucleon Ekin " << averageNucleonKinEnergy / 00212 (averageProtonNumber + averageNeutronNumber) << G4endl 00213 << " average proton Ekin " << averageProtonKinEnergy / (averageProtonNumber + 00214 1.0e-10) << G4endl 00215 << " average neutron Ekin " << averageNeutronKinEnergy / (averageNeutronNumber + 00216 1.0e-10) << G4endl 00217 << " average pion number " << averagePionNumber / eventNumber << G4endl 00218 << " average pion Ekin " << averagePionKinEnergy / (averagePionNumber + 00219 1.0e-10) << G4endl; 00220 if (withNuclei) { 00221 G4cout 00222 << " average Exitation Energy " << 00223 averageExitationEnergy / averageOutgoingNuclei << G4endl 00224 << " average num of fragments " << averageOutgoingNuclei / eventNumber << G4endl; 00225 G4cout << " fission prob. " << fissy_prob / eventNumber << " c.sec " << 00226 inel_csec * fissy_prob / eventNumber << G4endl; 00227 } 00228 }
Definition at line 50 of file G4Analyser.cc.
References G4cout, and G4endl.
00050 { 00051 00052 if (verboseLevel > 3) { 00053 G4cout << " >>> G4Analyser::setInelCsec" << G4endl; 00054 } 00055 00056 inel_csec = csec; // mb 00057 withNuclei = withn; 00058 00059 if (verboseLevel > 3) { 00060 G4cout << " total inelastic " << inel_csec << G4endl; 00061 } 00062 }
void G4Analyser::setWatchers | ( | const std::vector< G4NuclWatcher > & | watchers | ) |
Definition at line 64 of file G4Analyser.cc.
References G4cout, and G4endl.
00064 { 00065 00066 if (verboseLevel > 3) { 00067 G4cout << " >>> G4Analyser::setWatchers" << G4endl; 00068 } 00069 00070 ana_watchers = watchers; 00071 if (verboseLevel > 3) { 00072 G4cout << " watchers set " << watchers.size() << G4endl; 00073 } 00074 }
Definition at line 76 of file G4Analyser.cc.
References G4cout, and G4endl.
Referenced by analyse().
00076 { 00077 00078 if (verboseLevel > 3) { 00079 G4cout << " >>> G4Analyser::try_watchers" << G4endl; 00080 } 00081 00082 for (G4int iw = 0; iw < G4int(ana_watchers.size()); iw++) { 00083 00084 if (if_nucl) { 00085 00086 if (ana_watchers[iw].look_forNuclei()) ana_watchers[iw].watch(a, z); 00087 00088 } else { 00089 00090 if (!ana_watchers[iw].look_forNuclei()) ana_watchers[iw].watch(a, z); 00091 } 00092 } 00093 }