706 lines
33 KiB
C++
706 lines
33 KiB
C++
//
|
|
// ********************************************************************
|
|
// * License and Disclaimer *
|
|
// * *
|
|
// * The Geant4 software is copyright of the Copyright Holders of *
|
|
// * the Geant4 Collaboration. It is provided under the terms and *
|
|
// * conditions of the Geant4 Software License, included in the file *
|
|
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
|
// * include a list of copyright holders. *
|
|
// * *
|
|
// * Neither the authors of this software system, nor their employing *
|
|
// * institutes,nor the agencies providing financial support for this *
|
|
// * work make any representation or warranty, express or implied, *
|
|
// * regarding this software system or assume any liability for its *
|
|
// * use. Please see the license in the file LICENSE and URL above *
|
|
// * for the full disclaimer and the limitation of liability. *
|
|
// * *
|
|
// * This code implementation is the result of the scientific and *
|
|
// * technical work of the GEANT4 collaboration. *
|
|
// * By using, copying, modifying or distributing the software (or *
|
|
// * any work based on the software) you agree to acknowledge its *
|
|
// * use in resulting scientific publications, and indicate your *
|
|
// * acceptance of all terms of the Geant4 Software license. *
|
|
// ********************************************************************
|
|
//
|
|
/// \file Run.cc
|
|
/// \brief Implementation of the Run class
|
|
//
|
|
//
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
#include "Run.hh"
|
|
#include "G4SystemOfUnits.hh"
|
|
#include "G4Run.hh"
|
|
#include "G4RunManager.hh"
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
Run::Run() : G4Run(),
|
|
fNumEvents( 0 ),
|
|
fPrimaryParticleId( 0 ),
|
|
fPrimaryParticleInitialKineticEnergy( 0.0 ),
|
|
fPrimaryParticleInitialTotalEnergy( 0.0 ),
|
|
fPrimaryParticleInitialMomentum( 0.0 ),
|
|
fPrimaryParticleInitialBeta( 0.0 ),
|
|
fPrimaryParticleInitialGamma( 0.0 ),
|
|
fPrimaryParticleInitial3Momentum( G4ThreeVector() ),
|
|
fPrimaryParticleInitialPosition( G4ThreeVector() ),
|
|
fToleranceEPviolations( 0.0 ),
|
|
fToleranceDeltaDecayRadius( 0.0 ),
|
|
fIsPreassignedDecayEnabled( true ),
|
|
fIsBoostToLabEnabled( true ),
|
|
fNumDecays( 0 ),
|
|
fNumBadDecays( 0 ),
|
|
fNumUnexpectedDecays( 0 ),
|
|
fNumEviolations( 0 ),
|
|
fNumPviolations( 0 ),
|
|
fNum_mc_truth_rPos_deltaMax_above( 0 ),
|
|
fNum_underestimated_mc_truth_rPos_delta_above( 0 ),
|
|
fNum_overestimated_mc_truth_rPos_delta_above( 0 ),
|
|
fNumLargeUnderestimates( 0 ),
|
|
fNumLargeOverestimates( 0 ),
|
|
fDecayT( 0.0 ),
|
|
fSumDecayT( 0.0 ),
|
|
fMinDecayT( 999999.9 ),
|
|
fMaxDecayT( -999999.9 ),
|
|
fDecayR_mc_truth( 0.0 ),
|
|
fDecayR( 0.0 ),
|
|
fSumDecayR( 0.0 ),
|
|
fMinDecayR( 999999.9 ),
|
|
fMaxDecayR( -999999.9 ),
|
|
fDecayX( 0.0 ),
|
|
fSumDecayX( 0.0 ),
|
|
fMinDecayX( 999999.9 ),
|
|
fMaxDecayX( -999999.9 ),
|
|
fDecayY( 0.0 ),
|
|
fSumDecayY( 0.0 ),
|
|
fMinDecayY( 999999.9 ),
|
|
fMaxDecayY( -999999.9 ),
|
|
fDecayZ( 0.0 ),
|
|
fSumDecayZ( 0.0 ),
|
|
fMinDecayZ( 999999.9 ),
|
|
fMaxDecayZ( -999999.9 ),
|
|
fDeltaDecayR( 0.0 ),
|
|
fSumDeltaDecayR( 0.0 ),
|
|
fMinDeltaDecayR( 999999.9 ),
|
|
fMaxDeltaDecayR( -999999.9 ),
|
|
fDeflectionAngle( 0.0 ),
|
|
fSumDeflectionAngle( 0.0 ),
|
|
fMinDeflectionAngle( 999999.9 ),
|
|
fMaxDeflectionAngle( -999999.9 ),
|
|
fDeltaEkin( 0.0 ),
|
|
fSumDeltaEkin( 0.0 ),
|
|
fMinDeltaEkin( 999999.9 ),
|
|
fMaxDeltaEkin( -999999.9 ),
|
|
fDecayEkin( 0.0 ),
|
|
fSumDecayEkin( 0.0 ),
|
|
fMinDecayEkin( 999999.9 ),
|
|
fMaxDecayEkin( -999999.9 ),
|
|
fDecayPx( 0.0 ),
|
|
fSumDecayPx( 0.0 ),
|
|
fMinDecayPx( 999999.9 ),
|
|
fMaxDecayPx( -999999.9 ),
|
|
fDecayPy( 0.0 ),
|
|
fSumDecayPy( 0.0 ),
|
|
fMinDecayPy( 999999.9 ),
|
|
fMaxDecayPy( -999999.9 ),
|
|
fDecayPz( 0.0 ),
|
|
fSumDecayPz( 0.0 ),
|
|
fMinDecayPz( 999999.9 ),
|
|
fMaxDecayPz( -999999.9 ),
|
|
fDecayEtotViolation( 0.0 ),
|
|
fSumDecayEtotViolation( 0.0 ),
|
|
fMinDecayEtotViolation( 999999.9 ),
|
|
fMaxDecayEtotViolation( -999999.9 ),
|
|
fDecayPxViolation( 0.0 ),
|
|
fSumDecayPxViolation( 0.0 ),
|
|
fMinDecayPxViolation( 999999.9 ),
|
|
fMaxDecayPxViolation( -999999.9 ),
|
|
fDecayPyViolation( 0.0 ),
|
|
fSumDecayPyViolation( 0.0 ),
|
|
fMinDecayPyViolation( 999999.9 ),
|
|
fMaxDecayPyViolation( -999999.9 ),
|
|
fDecayPzViolation( 0.0 ),
|
|
fSumDecayPzViolation( 0.0 ),
|
|
fMinDecayPzViolation( 999999.9 ),
|
|
fMaxDecayPzViolation( -999999.9 ),
|
|
fMaxEkin_deltaMax( 0.0 ),
|
|
fMaxEtot_deltaMax( 0.0 ),
|
|
fMaxP_deltaMax( 0.0 ),
|
|
fMaxPdir_deltaMax( 0.0 ),
|
|
fMaxMass_deltaMax1( 0.0 ),
|
|
fMaxMass_deltaMax2( 0.0 ),
|
|
fSumMass_deltaMax3( 0.0 ),
|
|
fMaxMass_deltaMax3( 0.0 ),
|
|
fMaxBeta_deltaMax1( 0.0 ),
|
|
fMaxBeta_deltaMax2( 0.0 ),
|
|
fMaxGamma_deltaMax1( 0.0 ),
|
|
fMaxGamma_deltaMax2( 0.0 ),
|
|
fMaxGamma_deltaMax3( 0.0 ),
|
|
fMaxT_proper_deltaMax( 0.0 ),
|
|
fMaxT_lab_deltaMax( 0.0 ),
|
|
fSumMc_truth_rPos_deltaMax( 0.0 ),
|
|
fMaxMc_truth_rPos_deltaMax( 0.0 ),
|
|
fSumUnderestimated_mc_truth_rPos_delta( 0.0 ),
|
|
fMinUnderestimated_mc_truth_rPos_delta( 999999.9 ),
|
|
fSumOverestimated_mc_truth_rPos_delta( 0.0 ),
|
|
fMaxOverestimated_mc_truth_rPos_delta( -999999.9 ),
|
|
fSumUnderestimated_rDeltaPos( 0.0 ),
|
|
fMinUnderestimated_rDeltaPos( 999999.9 ),
|
|
fSumOverestimated_rDeltaPos( 0.0 ),
|
|
fMaxOverestimated_rDeltaPos( -999999.9 ),
|
|
fMaxFloat_rDeltaPos_deltaMax(-999999.9 ) {}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
Run::~Run() {}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::RecordEvent( const G4Event* anEvent ) {
|
|
// This method is called automatically by the Geant4 kernel (not by the user!)
|
|
// at the end of each event : in MT-mode, it is called only for the Working thread
|
|
// that handled that event.
|
|
G4int nEvt = anEvent->GetEventID();
|
|
if ( nEvt % 1000 == 0 ) {
|
|
G4cout << std::setprecision(6) << " Event#=" << nEvt
|
|
<< " ; t[ns]=" << fDecayT << " ; r[mm]=" << fDecayR
|
|
<< " ; deltaR[mum]=" << ( fDecayR_mc_truth - fDecayR ) / CLHEP::micrometer
|
|
<< " ; deltaEkin[MeV]=" << fDeltaEkin
|
|
<< " ; deltaAngle(deg)=" << fDeflectionAngle << G4endl;
|
|
}
|
|
G4Run::RecordEvent( anEvent );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::Merge( const G4Run* aRun ) {
|
|
// This method is called automatically by the Geant4 kernel (not by the user!)
|
|
// only in the case of multithreaded mode and only for Working threads.
|
|
const Run* localRun = static_cast< const Run* >( aRun );
|
|
fNumEvents += localRun->GetNumberOfEvent();
|
|
|
|
fPrimaryParticleId = localRun->GetPrimaryParticleId();
|
|
fPrimaryParticleInitialKineticEnergy = localRun->GetPrimaryParticleInitialKineticEnergy();
|
|
fPrimaryParticleInitialTotalEnergy = localRun->GetPrimaryParticleInitialTotalEnergy();
|
|
fPrimaryParticleInitialMomentum = localRun->GetPrimaryParticleInitialMomentum();
|
|
fPrimaryParticleInitialBeta = localRun->GetPrimaryParticleInitialBeta();
|
|
fPrimaryParticleInitialGamma = localRun->GetPrimaryParticleInitialGamma();
|
|
fPrimaryParticleInitial3Momentum = localRun->GetPrimaryParticleInitial3Momentum();
|
|
fPrimaryParticleInitialPosition = localRun->GetPrimaryParticleInitialPosition();
|
|
fToleranceEPviolations = localRun->GetToleranceEPviolations();
|
|
fToleranceDeltaDecayRadius = localRun->GetToleranceDeltaDecayRadius();
|
|
fIsPreassignedDecayEnabled = localRun->GetIsPreassignedDecayEnabled();
|
|
fIsBoostToLabEnabled = localRun->GetIsBoostToLabEnabled();
|
|
|
|
fNumDecays += localRun->GetNumberDecays();
|
|
fNumBadDecays += localRun->GetNumberBadDecays();
|
|
fNumUnexpectedDecays += localRun->GetNumberUnexpectedDecays();
|
|
fNumEviolations += localRun->GetNumberEviolations();
|
|
fNumPviolations += localRun->GetNumberPviolations();
|
|
fNum_mc_truth_rPos_deltaMax_above += localRun->GetNumber_mc_truth_rPos_deltaMax_above();
|
|
fNum_underestimated_mc_truth_rPos_delta_above +=
|
|
localRun->GetNumberUnderestimated_mc_truth_rPos_delta_above();
|
|
fNum_overestimated_mc_truth_rPos_delta_above +=
|
|
localRun->GetNumberOverestimated_mc_truth_rPos_delta_above();
|
|
fNumLargeUnderestimates += localRun->GetNumberLargeUnderestimates();
|
|
fNumLargeOverestimates += localRun->GetNumberLargeOverestimates();
|
|
|
|
fSumDecayT += localRun->GetSumDecayT();
|
|
fMinDecayT = std::min( fMinDecayT, localRun->GetMinDecayT() );
|
|
fMaxDecayT = std::max( fMaxDecayT, localRun->GetMaxDecayT() );
|
|
fSumDecayR += localRun->GetSumDecayR();
|
|
fMinDecayR = std::min( fMinDecayR, localRun->GetMinDecayR() );
|
|
fMaxDecayR = std::max( fMaxDecayR, localRun->GetMaxDecayR() );
|
|
fSumDecayX += localRun->GetSumDecayX();
|
|
fMinDecayX = std::min( fMinDecayX, localRun->GetMinDecayX() );
|
|
fMaxDecayX = std::max( fMaxDecayX, localRun->GetMaxDecayX() );
|
|
fSumDecayY += localRun->GetSumDecayY();
|
|
fMinDecayY = std::min( fMinDecayY, localRun->GetMinDecayY() );
|
|
fMaxDecayY = std::max( fMaxDecayY, localRun->GetMaxDecayY() );
|
|
fSumDecayZ += localRun->GetSumDecayZ();
|
|
fMinDecayZ = std::min( fMinDecayZ, localRun->GetMinDecayZ() );
|
|
fMaxDecayZ = std::max( fMaxDecayZ, localRun->GetMaxDecayZ() );
|
|
fSumDeltaDecayR += localRun->GetSumDeltaDecayR();
|
|
fMinDeltaDecayR = std::min( fMinDeltaDecayR, localRun->GetMinDeltaDecayR() );
|
|
fMaxDeltaDecayR = std::max( fMaxDeltaDecayR, localRun->GetMaxDeltaDecayR() );
|
|
fSumDeflectionAngle += localRun->GetSumDeflectionAngle();
|
|
fMinDeflectionAngle = std::min( fMinDeflectionAngle, localRun->GetMinDeflectionAngle() );
|
|
fMaxDeflectionAngle = std::max( fMaxDeflectionAngle, localRun->GetMaxDeflectionAngle() );
|
|
fSumDeltaEkin += localRun->GetSumDeltaEkin();
|
|
fMinDeltaEkin = std::min( fMinDeltaEkin, localRun->GetMinDeltaEkin() );
|
|
fMaxDeltaEkin = std::max( fMaxDeltaEkin, localRun->GetMaxDeltaEkin() );
|
|
fSumDecayEkin += localRun->GetSumDecayEkin();
|
|
fMinDecayEkin = std::min( fMinDecayEkin, localRun->GetMinDecayEkin() );
|
|
fMaxDecayEkin = std::max( fMaxDecayEkin, localRun->GetMaxDecayEkin() );
|
|
fSumDecayPx += localRun->GetSumDecayPx();
|
|
fMinDecayPx = std::min( fMinDecayPx, localRun->GetMinDecayPx() );
|
|
fMaxDecayPx = std::max( fMaxDecayPx, localRun->GetMaxDecayPx() );
|
|
fSumDecayPy += localRun->GetSumDecayPy();
|
|
fMinDecayPy = std::min( fMinDecayPy, localRun->GetMinDecayPy() );
|
|
fMaxDecayPy = std::max( fMaxDecayPy, localRun->GetMaxDecayPy() );
|
|
fSumDecayPz += localRun->GetSumDecayPz();
|
|
fMinDecayPz = std::min( fMinDecayPz, localRun->GetMinDecayPz() );
|
|
fMaxDecayPz = std::max( fMaxDecayPz, localRun->GetMaxDecayPz() );
|
|
fSumDecayEtotViolation += localRun->GetSumDecayEtotViolation();
|
|
fMinDecayEtotViolation = std::min( fMinDecayEtotViolation,
|
|
localRun->GetMinDecayEtotViolation() );
|
|
fMaxDecayEtotViolation = std::max( fMaxDecayEtotViolation,
|
|
localRun->GetMaxDecayEtotViolation() );
|
|
fSumDecayPxViolation += localRun->GetSumDecayPxViolation();
|
|
fMinDecayPxViolation = std::min( fMinDecayPxViolation, localRun->GetMinDecayPxViolation() );
|
|
fMaxDecayPxViolation = std::max( fMaxDecayPxViolation, localRun->GetMaxDecayPxViolation() );
|
|
fSumDecayPyViolation += localRun->GetSumDecayPyViolation();
|
|
fMinDecayPyViolation = std::min( fMinDecayPyViolation, localRun->GetMinDecayPyViolation() );
|
|
fMaxDecayPyViolation = std::max( fMaxDecayPyViolation, localRun->GetMaxDecayPyViolation() );
|
|
fSumDecayPzViolation += localRun->GetSumDecayPzViolation();
|
|
fMinDecayPzViolation = std::min( fMinDecayPzViolation, localRun->GetMinDecayPzViolation() );
|
|
fMaxDecayPzViolation = std::max( fMaxDecayPzViolation, localRun->GetMaxDecayPzViolation() );
|
|
|
|
fMaxEkin_deltaMax = std::max( fMaxEkin_deltaMax, localRun->GetMaxEkin_deltaMax() );
|
|
fMaxEtot_deltaMax = std::max( fMaxEtot_deltaMax, localRun->GetMaxEtot_deltaMax() );
|
|
fMaxP_deltaMax = std::max( fMaxP_deltaMax, localRun->GetMaxP_deltaMax() );
|
|
fMaxPdir_deltaMax = std::max( fMaxPdir_deltaMax, localRun->GetMaxPdir_deltaMax() );
|
|
fMaxMass_deltaMax1 = std::max( fMaxMass_deltaMax1, localRun->GetMaxMass_deltaMax1() );
|
|
fMaxMass_deltaMax2 = std::max( fMaxMass_deltaMax2, localRun->GetMaxMass_deltaMax2() );
|
|
fMaxMass_deltaMax3 = std::max( fMaxMass_deltaMax3, localRun->GetMaxMass_deltaMax3() );
|
|
fSumMass_deltaMax3 += localRun->GetSumMass_deltaMax3();
|
|
fMaxBeta_deltaMax1 = std::max( fMaxBeta_deltaMax1, localRun->GetMaxBeta_deltaMax1() );
|
|
fMaxBeta_deltaMax2 = std::max( fMaxBeta_deltaMax2, localRun->GetMaxBeta_deltaMax2() );
|
|
fMaxGamma_deltaMax1 = std::max( fMaxGamma_deltaMax1, localRun->GetMaxGamma_deltaMax1() );
|
|
fMaxGamma_deltaMax2 = std::max( fMaxGamma_deltaMax2, localRun->GetMaxGamma_deltaMax2() );
|
|
fMaxGamma_deltaMax3 = std::max( fMaxGamma_deltaMax3, localRun->GetMaxGamma_deltaMax3() );
|
|
fMaxT_proper_deltaMax = std::max( fMaxT_proper_deltaMax, localRun->GetMaxT_proper_deltaMax() );
|
|
fMaxT_lab_deltaMax = std::max( fMaxT_lab_deltaMax, localRun->GetMaxT_lab_deltaMax() );
|
|
fMaxMc_truth_rPos_deltaMax = std::max( fMaxMc_truth_rPos_deltaMax,
|
|
localRun->GetMaxMc_truth_rPos_deltaMax() );
|
|
fSumMc_truth_rPos_deltaMax += localRun->GetSumMc_truth_rPos_deltaMax();
|
|
|
|
fMinUnderestimated_mc_truth_rPos_delta =
|
|
std::min( fMinUnderestimated_mc_truth_rPos_delta,
|
|
localRun->GetMinUnderestimated_mc_truth_rPos_delta() );
|
|
fSumUnderestimated_mc_truth_rPos_delta += localRun->GetSumUnderestimated_mc_truth_rPos_delta();
|
|
fMaxOverestimated_mc_truth_rPos_delta =
|
|
std::max( fMaxOverestimated_mc_truth_rPos_delta,
|
|
localRun->GetMaxOverestimated_mc_truth_rPos_delta() );
|
|
fSumOverestimated_mc_truth_rPos_delta += localRun->GetSumOverestimated_mc_truth_rPos_delta();
|
|
fMinUnderestimated_rDeltaPos = std::min( fMinUnderestimated_rDeltaPos,
|
|
localRun->GetMinUnderestimated_rDeltaPos() );
|
|
fSumUnderestimated_rDeltaPos += localRun->GetSumUnderestimated_rDeltaPos();
|
|
fMaxOverestimated_rDeltaPos = std::max( fMaxOverestimated_rDeltaPos,
|
|
localRun->GetMaxOverestimated_rDeltaPos() );
|
|
fSumOverestimated_rDeltaPos += localRun->GetSumOverestimated_rDeltaPos();
|
|
|
|
fMaxFloat_rDeltaPos_deltaMax = std::max( fMaxFloat_rDeltaPos_deltaMax,
|
|
localRun->GetMaxFloat_rDeltaPos_deltaMax() );
|
|
|
|
G4Run::Merge( aRun );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::PrintInfo() const {
|
|
// This method is called by RunAction::EndOfRunAction.
|
|
// In MT-mode, only the master thread calls it.
|
|
const G4double femtosecond = 0.001 * CLHEP::picosecond;
|
|
const G4double NN = ( fNumDecays > 0 ? G4double( fNumDecays ) : 1.0 );
|
|
G4cout << std::setprecision(6)
|
|
<< G4endl << G4endl
|
|
<< " ============ Run::printInfo() =============== \t RunID = " << GetRunID() << G4endl
|
|
<< " primary PDG code = " << fPrimaryParticleId << G4endl
|
|
<< " primary initial kinetic energy [GeV] = "
|
|
<< fPrimaryParticleInitialKineticEnergy / CLHEP::GeV << G4endl
|
|
<< " primary initial total energy [GeV] = "
|
|
<< fPrimaryParticleInitialTotalEnergy / CLHEP::GeV << G4endl
|
|
<< " primary initial momentum [GeV] = "
|
|
<< fPrimaryParticleInitialMomentum / CLHEP::GeV << G4endl
|
|
<< " primary initial Lorentz beta = " << fPrimaryParticleInitialBeta << G4endl
|
|
<< " primary initial Lorentz gamma = " << fPrimaryParticleInitialGamma << G4endl
|
|
<< " primary initial 3 momentum [GeV] = "
|
|
<< fPrimaryParticleInitial3Momentum / CLHEP::GeV << G4endl
|
|
<< " primary initial position [mm] = "
|
|
<< fPrimaryParticleInitialPosition << G4endl
|
|
<< " toleranceEPviolations [eV] = "
|
|
<< fToleranceEPviolations / CLHEP::eV << G4endl
|
|
<< " toleranceDeltaDecayRadius [mum] = "
|
|
<< fToleranceDeltaDecayRadius / CLHEP::micrometer << G4endl
|
|
<< " isPreassignedDecayEnabled = " << fIsPreassignedDecayEnabled << G4endl
|
|
<< " isBoostToLabEnabled = " << fIsBoostToLabEnabled << G4endl
|
|
<< " # Events = "
|
|
<< ( fNumEvents > 0 ? fNumEvents : GetNumberOfEvent() ) << G4endl
|
|
<< " # Decays = " << fNumDecays << G4endl
|
|
<< " (# Bad decays = " << fNumBadDecays << " )" << G4endl
|
|
<< " (# Unexpected decays = " << fNumUnexpectedDecays << " )" << G4endl
|
|
<< " # E violations = " << fNumEviolations << G4endl
|
|
<< " # P violations = " << fNumPviolations << G4endl
|
|
<< " decay T [ns] : min=" << fMinDecayT << "\t mean=" << fSumDecayT / NN
|
|
<< "\t max=" << fMaxDecayT << G4endl
|
|
<< " decay R [mm] : min=" << fMinDecayR << "\t mean=" << fSumDecayR / NN
|
|
<< "\t max=" << fMaxDecayR << G4endl
|
|
<< " decay X [mm] : min=" << fMinDecayX << "\t mean=" << fSumDecayX / NN
|
|
<< "\t max=" << fMaxDecayX << G4endl
|
|
<< " decay Y [mm] : min=" << fMinDecayY << "\t mean=" << fSumDecayY / NN
|
|
<< "\t max=" << fMaxDecayY << G4endl
|
|
<< " decay Z [mm] : min=" << fMinDecayZ << "\t mean=" << fSumDecayZ / NN
|
|
<< "\t max=" << fMaxDecayZ << G4endl
|
|
<< " Delta decay R [mm] : min=" << fMinDeltaDecayR
|
|
<< "\t mean=" << fSumDeltaDecayR / NN
|
|
<< "\t max=" << fMaxDeltaDecayR << G4endl
|
|
<< " deflection angle [deg] : min=" << fMinDeflectionAngle
|
|
<< "\t mean=" << fSumDeflectionAngle / NN
|
|
<< "\t max=" << fMaxDeflectionAngle << G4endl
|
|
<< " Delta Ekin [MeV] : min=" << fMinDeltaEkin
|
|
<< "\t mean=" << fSumDeltaEkin / NN
|
|
<< "\t max=" << fMaxDeltaEkin << G4endl
|
|
<< " decay Ekin [GeV] : min=" << fMinDecayEkin / CLHEP::GeV
|
|
<< "\t mean=" << fSumDecayEkin / NN / CLHEP::GeV
|
|
<< "\t max=" << fMaxDecayEkin / CLHEP::GeV << G4endl
|
|
<< " decay Px [GeV] : min=" << fMinDecayPx / CLHEP::GeV
|
|
<< "\t mean=" << fSumDecayPx / NN / CLHEP::GeV
|
|
<< "\t max=" << fMaxDecayPx / CLHEP::GeV << G4endl
|
|
<< " decay Py [GeV] : min=" << fMinDecayPy / CLHEP::GeV
|
|
<< "\t mean=" << fSumDecayPy / NN / CLHEP::GeV
|
|
<< "\t max=" << fMaxDecayPy / CLHEP::GeV << G4endl
|
|
<< " decay Pz [GeV] : min=" << fMinDecayPz / CLHEP::GeV
|
|
<< "\t mean=" << fSumDecayPz / NN / CLHEP::GeV
|
|
<< "\t max=" << fMaxDecayPz / CLHEP::GeV << G4endl
|
|
<< " decay Etot violation [MeV] : min=" << fMinDecayEtotViolation
|
|
<< "\t mean=" << fSumDecayEtotViolation / NN
|
|
<< "\t max=" << fMaxDecayEtotViolation << G4endl
|
|
<< " decay Px violation [MeV] : min=" << fMinDecayPxViolation
|
|
<< "\t mean=" << fSumDecayPxViolation / NN
|
|
<< "\t max=" << fMaxDecayPxViolation << G4endl
|
|
<< " decay Py violation [MeV] : min=" << fMinDecayPyViolation
|
|
<< "\t mean=" << fSumDecayPyViolation / NN
|
|
<< "\t max=" << fMaxDecayPyViolation << G4endl
|
|
<< " decay Pz violation [MeV] : min=" << fMinDecayPzViolation
|
|
<< "\t mean=" << fSumDecayPzViolation / NN
|
|
<< "\t max=" << fMaxDecayPzViolation << G4endl
|
|
<< " --- Consistency checks --- " << G4endl
|
|
<< " maxEkin_deltaMax [eV] = " << fMaxEkin_deltaMax / CLHEP::eV << G4endl
|
|
<< " maxEtot_deltaMax [eV] = " << fMaxEtot_deltaMax / CLHEP::eV << G4endl
|
|
<< " maxP_deltaMax [eV] = " << fMaxP_deltaMax / CLHEP::eV << G4endl
|
|
<< " maxPdir_deltaMax = " << fMaxPdir_deltaMax << G4endl
|
|
<< " maxMass_deltaMax{1,2,3} [eV] = " << fMaxMass_deltaMax1 / CLHEP::eV
|
|
<< " , " << fMaxMass_deltaMax2 / CLHEP::eV << " , " << fMaxMass_deltaMax3 / CLHEP::eV
|
|
<< " (mean=" << fSumMass_deltaMax3 / NN / CLHEP::eV << ")" << G4endl
|
|
<< " maxBeta_deltaMax{1,2} = " << fMaxBeta_deltaMax1
|
|
<< " , " << fMaxBeta_deltaMax2 << G4endl
|
|
<< " maxGamma_deltaMax{1,2,3} = " << fMaxGamma_deltaMax1
|
|
<< " , " << fMaxGamma_deltaMax2
|
|
<< " , " << fMaxGamma_deltaMax3 << G4endl
|
|
<< " maxT_proper_deltaMax [fs] = " << fMaxT_proper_deltaMax / femtosecond << G4endl
|
|
<< " maxT_lab_deltaMax [fs] = " << fMaxT_lab_deltaMax / femtosecond << G4endl
|
|
<< " maxMc_truth_rPos_deltaMax [mum] = "
|
|
<< fMaxMc_truth_rPos_deltaMax / CLHEP::micrometer
|
|
<< " (mean=" << fSumMc_truth_rPos_deltaMax / NN / CLHEP::micrometer
|
|
<< ")\t (# above threshold = " << fNum_mc_truth_rPos_deltaMax_above << ")" << G4endl
|
|
<< " --- Extra checks --- " << G4endl
|
|
<< " minUnderestimated_mc_truth_rPos_delta [mum] = "
|
|
<< fMinUnderestimated_mc_truth_rPos_delta / CLHEP::micrometer
|
|
<< " (mean=" << fSumUnderestimated_mc_truth_rPos_delta / NN / CLHEP::micrometer
|
|
<< ")\t (#above threshold = " << fNum_underestimated_mc_truth_rPos_delta_above
|
|
<< ")" << G4endl
|
|
<< " maxOverestimated_mc_truth_rPos_delta [mum] = "
|
|
<< fMaxOverestimated_mc_truth_rPos_delta / CLHEP::micrometer
|
|
<< " (mean=" << fSumOverestimated_mc_truth_rPos_delta / NN / CLHEP::micrometer
|
|
<< ")\t (#above threshold = " << fNum_overestimated_mc_truth_rPos_delta_above
|
|
<< ")" << G4endl
|
|
<< " minUnderestimated_rDeltaPos [mum] = "
|
|
<< fMinUnderestimated_rDeltaPos / CLHEP::micrometer
|
|
<< " (mean=" << fSumUnderestimated_rDeltaPos / NN / CLHEP::micrometer
|
|
<< ")\t (#above threshold = " << fNumLargeUnderestimates << ")" << G4endl
|
|
<< " maxOverestimated_rDeltaPos [mum] = "
|
|
<< fMaxOverestimated_rDeltaPos / CLHEP::micrometer
|
|
<< " (mean=" << fSumOverestimated_rDeltaPos / NN / CLHEP::micrometer
|
|
<< ")\t (#above threshold = " << fNumLargeOverestimates << ")" << G4endl
|
|
<< " --- float instead of double --- " << G4endl
|
|
<< " fMaxFloat_rDeltaPos_deltaMax [mum] = "
|
|
<< fMaxFloat_rDeltaPos_deltaMax / CLHEP::micrometer << G4endl
|
|
<< " ============================================= " << G4endl
|
|
<< G4endl;
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayT( const G4double inputValue ) {
|
|
fDecayT = inputValue;
|
|
fSumDecayT += inputValue;
|
|
fMinDecayT = std::min( fMinDecayT, inputValue );
|
|
fMaxDecayT = std::max( fMaxDecayT, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayR_mc_truth( const G4double inputValue ) {
|
|
fDecayR_mc_truth = inputValue;
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayR( const G4double inputValue ) {
|
|
fDecayR = inputValue;
|
|
fSumDecayR += inputValue;
|
|
fMinDecayR = std::min( fMinDecayR, inputValue );
|
|
fMaxDecayR = std::max( fMaxDecayR, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayX( const G4double inputValue ) {
|
|
fDecayX = inputValue;
|
|
fSumDecayX += inputValue;
|
|
fMinDecayX = std::min( fMinDecayX, inputValue );
|
|
fMaxDecayX = std::max( fMaxDecayX, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayY( const G4double inputValue ) {
|
|
fDecayY = inputValue;
|
|
fSumDecayY += inputValue;
|
|
fMinDecayY = std::min( fMinDecayY, inputValue );
|
|
fMaxDecayY = std::max( fMaxDecayY, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayZ( const G4double inputValue ) {
|
|
fDecayZ = inputValue;
|
|
fSumDecayZ += inputValue;
|
|
fMinDecayZ = std::min( fMinDecayZ, inputValue );
|
|
fMaxDecayZ = std::max( fMaxDecayZ, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDeltaDecayR( const G4double inputValue ) {
|
|
fDeltaDecayR = inputValue;
|
|
fSumDeltaDecayR += inputValue;
|
|
fMinDeltaDecayR = std::min( fMinDeltaDecayR, inputValue );
|
|
fMaxDeltaDecayR = std::max( fMaxDeltaDecayR, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDeflectionAngle( const G4double inputValue ) {
|
|
fDeflectionAngle = inputValue;
|
|
fSumDeflectionAngle += inputValue;
|
|
fMinDeflectionAngle = std::min( fMinDeflectionAngle, inputValue );
|
|
fMaxDeflectionAngle = std::max( fMaxDeflectionAngle, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDeltaEkin( const G4double inputValue ) {
|
|
fDeltaEkin = inputValue;
|
|
fSumDeltaEkin += inputValue;
|
|
fMinDeltaEkin = std::min( fMinDeltaEkin, inputValue );
|
|
fMaxDeltaEkin = std::max( fMaxDeltaEkin, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayEkin( const G4double inputValue ) {
|
|
fDecayEkin = inputValue;
|
|
fSumDecayEkin += inputValue;
|
|
fMinDecayEkin = std::min( fMinDecayEkin, inputValue );
|
|
fMaxDecayEkin = std::max( fMaxDecayEkin, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayPx( const G4double inputValue ) {
|
|
fDecayPx = inputValue;
|
|
fSumDecayPx += inputValue;
|
|
fMinDecayPx = std::min( fMinDecayPx, inputValue );
|
|
fMaxDecayPx = std::max( fMaxDecayPx, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayPy( const G4double inputValue ) {
|
|
fDecayPy = inputValue;
|
|
fSumDecayPy += inputValue;
|
|
fMinDecayPy = std::min( fMinDecayPy, inputValue );
|
|
fMaxDecayPy = std::max( fMaxDecayPy, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayPz( const G4double inputValue ) {
|
|
fDecayPz = inputValue;
|
|
fSumDecayPz += inputValue;
|
|
fMinDecayPz = std::min( fMinDecayPz, inputValue );
|
|
fMaxDecayPz = std::max( fMaxDecayPz, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayEtotViolation( const G4double inputValue ) {
|
|
fDecayEtotViolation = inputValue;
|
|
fSumDecayEtotViolation += inputValue;
|
|
fMinDecayEtotViolation = std::min( fMinDecayEtotViolation, inputValue );
|
|
fMaxDecayEtotViolation = std::max( fMaxDecayEtotViolation, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayPxViolation( const G4double inputValue ) {
|
|
fDecayPxViolation = inputValue;
|
|
fSumDecayPxViolation += inputValue;
|
|
fMinDecayPxViolation = std::min( fMinDecayPxViolation, inputValue );
|
|
fMaxDecayPxViolation = std::max( fMaxDecayPxViolation, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayPyViolation( const G4double inputValue ) {
|
|
fDecayPyViolation = inputValue;
|
|
fSumDecayPyViolation += inputValue;
|
|
fMinDecayPyViolation = std::min( fMinDecayPyViolation, inputValue );
|
|
fMaxDecayPyViolation = std::max( fMaxDecayPyViolation, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetDecayPzViolation( const G4double inputValue ) {
|
|
fDecayPzViolation = inputValue;
|
|
fSumDecayPzViolation += inputValue;
|
|
fMinDecayPzViolation = std::min( fMinDecayPzViolation, inputValue );
|
|
fMaxDecayPzViolation = std::max( fMaxDecayPzViolation, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxEkin_deltaMax( const G4double inputValue ) {
|
|
fMaxEkin_deltaMax = std::max( fMaxEkin_deltaMax, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxEtot_deltaMax( const G4double inputValue ) {
|
|
fMaxEtot_deltaMax = std::max( fMaxEtot_deltaMax, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxP_deltaMax( const G4double inputValue ) {
|
|
fMaxP_deltaMax = std::max( fMaxP_deltaMax, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxPdir_deltaMax( const G4double inputValue ) {
|
|
fMaxPdir_deltaMax = std::max( fMaxPdir_deltaMax, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxMass_deltaMax1( const G4double inputValue ) {
|
|
fMaxMass_deltaMax1 = std::max( fMaxMass_deltaMax1, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxMass_deltaMax2( const G4double inputValue ) {
|
|
fMaxMass_deltaMax2 = std::max( fMaxMass_deltaMax2, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxMass_deltaMax3( const G4double inputValue ) {
|
|
fSumMass_deltaMax3 += inputValue;
|
|
fMaxMass_deltaMax3 = std::max( fMaxMass_deltaMax3, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxBeta_deltaMax1( const G4double inputValue ) {
|
|
fMaxBeta_deltaMax1 = std::max( fMaxBeta_deltaMax1, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxBeta_deltaMax2( const G4double inputValue ) {
|
|
fMaxBeta_deltaMax2 = std::max( fMaxBeta_deltaMax2, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxGamma_deltaMax1( const G4double inputValue ) {
|
|
fMaxGamma_deltaMax1 = std::max( fMaxGamma_deltaMax1, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxGamma_deltaMax2( const G4double inputValue ) {
|
|
fMaxGamma_deltaMax2 = std::max( fMaxGamma_deltaMax2, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxGamma_deltaMax3( const G4double inputValue ) {
|
|
fMaxGamma_deltaMax3 = std::max( fMaxGamma_deltaMax3, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxT_proper_deltaMax( const G4double inputValue ) {
|
|
fMaxT_proper_deltaMax = std::max( fMaxT_proper_deltaMax, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxT_lab_deltaMax( const G4double inputValue ) {
|
|
fMaxT_lab_deltaMax = std::max( fMaxT_lab_deltaMax, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxMc_truth_rPos_deltaMax( const G4double inputValue ) {
|
|
fSumMc_truth_rPos_deltaMax += inputValue;
|
|
fMaxMc_truth_rPos_deltaMax = std::max( fMaxMc_truth_rPos_deltaMax, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMinUnderestimated_mc_truth_rPos_delta( const G4double inputValue ) {
|
|
fSumUnderestimated_mc_truth_rPos_delta += inputValue;
|
|
fMinUnderestimated_mc_truth_rPos_delta = std::min( fMinUnderestimated_mc_truth_rPos_delta,
|
|
inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxOverestimated_mc_truth_rPos_delta( const G4double inputValue ) {
|
|
fSumOverestimated_mc_truth_rPos_delta += inputValue;
|
|
fMaxOverestimated_mc_truth_rPos_delta = std::max( fMaxOverestimated_mc_truth_rPos_delta,
|
|
inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMinUnderestimated_rDeltaPos( const G4double inputValue ) {
|
|
fSumUnderestimated_rDeltaPos += inputValue;
|
|
fMinUnderestimated_rDeltaPos = std::min( fMinUnderestimated_rDeltaPos, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxOverestimated_rDeltaPos( const G4double inputValue ) {
|
|
fSumOverestimated_rDeltaPos += inputValue;
|
|
fMaxOverestimated_rDeltaPos = std::max( fMaxOverestimated_rDeltaPos, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
|
|
|
void Run::SetMaxFloat_rDeltaPos_deltaMax( const G4double inputValue ) {
|
|
fMaxFloat_rDeltaPos_deltaMax = std::max( fMaxFloat_rDeltaPos_deltaMax, inputValue );
|
|
}
|
|
|
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|