37 : verboseLevel(0), eventNumber(0.0), averageMultiplicity(0.0),
38 averageProtonNumber(0.0), averageNeutronNumber(0.0),
39 averagePionNumber(0.0), averageNucleonKinEnergy(0.0),
40 averageProtonKinEnergy(0.0), averageNeutronKinEnergy(0.0),
41 averagePionKinEnergy(0.0), averageExitationEnergy(0.0),
42 averageOutgoingNuclei(0.0), fissy_prob(0.0), averagePionPl(0.0),
43 averagePionMin(0.0), averagePion0(0.0), averageA(0.0), averageZ(0.0),
44 inel_csec(0.0), withNuclei(false) {
45 if (verboseLevel > 3) {
52 if (verboseLevel > 3) {
59 if (verboseLevel > 3) {
66 if (verboseLevel > 3) {
70 ana_watchers = watchers;
71 if (verboseLevel > 3) {
78 if (verboseLevel > 3) {
82 for (
G4int iw = 0; iw <
G4int(ana_watchers.size()); iw++) {
86 if (ana_watchers[iw].look_forNuclei()) ana_watchers[iw].watch(a, z);
90 if (!ana_watchers[iw].look_forNuclei()) ana_watchers[iw].watch(a, z);
98 if (verboseLevel > 3) {
106 if (nucleus.size() > 0) {
108 averageOutgoingNuclei += nucleus.size();
110 for (
G4int in = 0; in <
G4int(nucleus.size()); in++) {
111 averageExitationEnergy += nucleus[in].getExitationEnergy();
113 G4int a = nucleus[in].getA();
114 G4int z = nucleus[in].getZ();
125 if (nbig > 1) fissy_prob += 1.0;
127 const std::vector<G4InuclElementaryParticle>& particles =
129 averageMultiplicity += particles.size();
131 for (
G4int i = 0; i <
G4int(particles.size()); i++) {
136 averageNucleonKinEnergy += particles[i].getKineticEnergy();
138 if (particles[i].type() == 1) {
141 averageProtonNumber += 1.0;
142 averageProtonKinEnergy += particles[i].getKineticEnergy();
147 averageNeutronNumber += 1.0;
148 averageNeutronKinEnergy += particles[i].getKineticEnergy();
151 }
else if (particles[i].
pion()) {
152 averagePionKinEnergy += particles[i].getKineticEnergy();
153 averagePionNumber += 1.0;
156 if (particles[i].type() == 3) {
158 averagePionPl += 1.0;
160 }
else if (particles[i].type() == 5) {
162 averagePionMin += 1.0;
164 }
else if (particles[i].type() == 7) {
175 const std::vector<G4InuclElementaryParticle>& particles =
177 averageMultiplicity += particles.size();
179 for (
G4int i = 0; i <
G4int(particles.size()); i++) {
182 averageNucleonKinEnergy += particles[i].getKineticEnergy();
184 if (particles[i].type() == 1) {
185 averageProtonNumber += 1.0;
186 averageProtonKinEnergy += particles[i].getKineticEnergy();
189 averageNeutronNumber += 1.0;
190 averageNeutronKinEnergy += particles[i].getKineticEnergy();
193 }
else if (particles[i].
pion()) {
194 averagePionKinEnergy += particles[i].getKineticEnergy();
195 averagePionNumber += 1.0;
203 if (verboseLevel > 3) {
204 G4cout <<
" >>> G4Analyser::printResultsSimple" <<
G4endl;
208 <<
" average multiplicity " << averageMultiplicity / eventNumber <<
G4endl
209 <<
" average proton number " << averageProtonNumber / eventNumber <<
G4endl
210 <<
" average neutron number " << averageNeutronNumber / eventNumber <<
G4endl
211 <<
" average nucleon Ekin " << averageNucleonKinEnergy /
212 (averageProtonNumber + averageNeutronNumber) <<
G4endl
213 <<
" average proton Ekin " << averageProtonKinEnergy / (averageProtonNumber +
215 <<
" average neutron Ekin " << averageNeutronKinEnergy / (averageNeutronNumber +
217 <<
" average pion number " << averagePionNumber / eventNumber <<
G4endl
218 <<
" average pion Ekin " << averagePionKinEnergy / (averagePionNumber +
222 <<
" average Exitation Energy " <<
223 averageExitationEnergy / averageOutgoingNuclei <<
G4endl
224 <<
" average num of fragments " << averageOutgoingNuclei / eventNumber <<
G4endl;
225 G4cout <<
" fission prob. " << fissy_prob / eventNumber <<
" c.sec " <<
226 inel_csec * fissy_prob / eventNumber <<
G4endl;
232 if (verboseLevel > 3) {
237 <<
" average multiplicity " << averageMultiplicity / eventNumber <<
G4endl
238 <<
" average proton number " << averageProtonNumber / eventNumber <<
G4endl
239 <<
" average neutron number " << averageNeutronNumber / eventNumber <<
G4endl
240 <<
" average nucleon Ekin " << averageNucleonKinEnergy /
241 (averageProtonNumber + averageNeutronNumber) <<
G4endl
242 <<
" average proton Ekin " << averageProtonKinEnergy / (averageProtonNumber +
244 <<
" average neutron Ekin " << averageNeutronKinEnergy / (averageNeutronNumber +
246 <<
" average pion number " << averagePionNumber / eventNumber <<
G4endl
247 <<
" average pion Ekin " << averagePionKinEnergy / (averagePionNumber +
249 <<
" average pi+ " << averagePionPl / eventNumber <<
G4endl
250 <<
" average pi- " << averagePionMin / eventNumber <<
G4endl
251 <<
" average pi0 " << averagePion0 / eventNumber <<
G4endl;
255 <<
" average A " << averageA / eventNumber << G4endl
256 <<
" average Z " << averageZ / eventNumber << G4endl
257 <<
" average Exitation Energy " <<
258 averageExitationEnergy / averageOutgoingNuclei << G4endl
259 <<
" average num of fragments " << averageOutgoingNuclei / eventNumber <<
G4endl;
260 G4cout <<
" fission prob. " << fissy_prob / eventNumber <<
" c.sec " <<
261 inel_csec * fissy_prob / eventNumber <<
G4endl;
268 if (verboseLevel > 3) {
269 G4cout <<
" >>> G4Analyser::handleWatcherStatistics" <<
G4endl;
274 if (verboseLevel > 3) {
288 for (
G4int iw = 0; iw <
G4int(ana_watchers.size()); iw++) {
289 ana_watchers[iw].setInuclCs(inel_csec,
G4int(eventNumber));
290 ana_watchers[iw].print();
292 if (ana_watchers[iw].to_check()) {
293 std::pair<G4double, G4double> rat_err = ana_watchers[iw].getAverageRatio();
294 averat += rat_err.first;
295 ave_err += rat_err.second;
296 gl_chsq += ana_watchers[iw].getChsq();
297 std::pair<G4double, G4double> cs_err = ana_watchers[iw].getExpCs();
298 tot_exper += cs_err.first;
299 tot_exper_err += cs_err.second;
300 std::pair<G4double, G4double> inucl_cs_err = ana_watchers[iw].getInuclCs();
301 tot_inucl += inucl_cs_err.first;
302 tot_inucl_err += inucl_cs_err.second;
303 G4double iz_checked = ana_watchers[iw].getNmatched();
305 if (iz_checked > 0.0) {
306 fgr += ana_watchers[iw].getLhood();
307 checked += iz_checked;
313 gl_chsq = std::sqrt(gl_chsq) / checked;
316 fgr = std::pow(10.0, std::sqrt(fgr / checked));
319 if (verboseLevel > 3) {
320 G4cout <<
" total exper c.s. " << tot_exper <<
" err " << tot_exper_err <<
321 " tot inucl c.s. " << tot_inucl <<
" err " << tot_inucl_err <<
G4endl;
322 G4cout <<
" checked total " << checked <<
" lhood " << fgr << G4endl
323 <<
" average ratio " << averat <<
" err " << ave_err << G4endl
324 <<
" global chsq " << gl_chsq <<
G4endl;
330 if (verboseLevel > 3) {
331 G4cout <<
" >>> G4Analyser::printResultsNtuple" <<
G4endl;
337 std::setw(15) <<
int(eventNumber + 0.1) <<
338 std::setw(15) << averageMultiplicity / eventNumber <<
339 std::setw(15) << averageProtonNumber / eventNumber <<
340 std::setw(15) << averageNeutronNumber / eventNumber <<
" " <<
341 std::setw(15) << averageNucleonKinEnergy / (averageProtonNumber + averageNeutronNumber) <<
" " <<
342 std::setw(15) << averageProtonKinEnergy / (averageProtonNumber + 1.0e-10) <<
" " <<
343 std::setw(15) << averageNeutronKinEnergy / (averageNeutronNumber + 1.0e-10) <<
" " <<
344 std::setw(15) << averagePionNumber / eventNumber <<
" " <<
345 std::setw(15) << averagePionKinEnergy / (averagePionNumber + 1.0e-10) <<
G4endl;
std::vector< ExP01TrackerHit * > a
void analyse(const G4CollisionOutput &output)
void handleWatcherStatistics()
void printResultsNtuple()
G4GLOB_DLL std::ostream G4cout
void try_watchers(G4int a, G4int z, G4bool if_nucl)
G4bool nucleon(G4int ityp)
void printResultsSimple()
typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData)
const std::vector< G4InuclNuclei > & getOutgoingNuclei() const
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const
void setInelCsec(G4double csec, G4bool withn)
void setWatchers(const std::vector< G4NuclWatcher > &watchers)