diff --git a/include/OpNoviceDetectorConstruction.hh b/include/OpNoviceDetectorConstruction.hh index 032db47cea5e8407e9ba06047102282abcb5df73..c25d4cad5c60bb2c7e585b2361459891736d0761 100644 --- a/include/OpNoviceDetectorConstruction.hh +++ b/include/OpNoviceDetectorConstruction.hh @@ -28,9 +28,7 @@ // // // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - +// #ifndef OpNoviceDetectorConstruction_h #define OpNoviceDetectorConstruction_h 1 @@ -41,7 +39,6 @@ #include "G4VUserDetectorConstruction.hh" #include "Materials.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... class OpNoviceDetectorConstruction : public G4VUserDetectorConstruction { @@ -60,6 +57,4 @@ class OpNoviceDetectorConstruction : public G4VUserDetectorConstruction Materials* materials; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif /*OpNoviceDetectorConstruction_h*/ diff --git a/include/lgAnalysis.hh b/include/lgAnalysis.hh new file mode 100644 index 0000000000000000000000000000000000000000..7644179b797b6b350616241557ac124498dbed5f --- /dev/null +++ b/include/lgAnalysis.hh @@ -0,0 +1,36 @@ +// ******************************************************************** +// * 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 lgAnalysis.hh +/// \brief Selection of the analysis technology + +#ifndef lgAnalysis_h +#define lgAnalysis_h 1 + +#include "g4root.hh" +//#include "g4cvs.hh" +//#include "g4xml.hh" + +#endif diff --git a/src/OpNoviceRunAction.cc b/src/OpNoviceRunAction.cc index 1b9ccc2ec84ce031e9b798a675a85daa3a5dd91d..c49498623bc64e90cc1881cf8371a5d9c1864670 100644 --- a/src/OpNoviceRunAction.cc +++ b/src/OpNoviceRunAction.cc @@ -26,10 +26,8 @@ /// \file OpNovice/src/OpNoviceRunAction.cc /// \brief Implementation of the OpNoviceRunAction class // -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +// @Author Chad Lantz + // Make this appear first! #include "G4Timer.hh" @@ -38,8 +36,10 @@ #include "G4Run.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +/* + * + */ OpNoviceRunAction::OpNoviceRunAction() : G4UserRunAction(), fTimer(0) @@ -47,23 +47,26 @@ OpNoviceRunAction::OpNoviceRunAction() fTimer = new G4Timer; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - +/* + * + */ OpNoviceRunAction::~OpNoviceRunAction() { delete fTimer; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - +/* + * + */ void OpNoviceRunAction::BeginOfRunAction(const G4Run* aRun) { G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; fTimer->Start(); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - +/* + * + */ void OpNoviceRunAction::EndOfRunAction(const G4Run* aRun) { fTimer->Stop(); @@ -71,4 +74,125 @@ void OpNoviceRunAction::EndOfRunAction(const G4Run* aRun) << " " << *fTimer << G4endl; } + +/// \file B4RunAction.cc +/// \brief Implementation of the B4RunAction class + +#include "B4RunAction.hh" +#include "B4Analysis.hh" + +#include "G4Run.hh" +#include "G4RunManager.hh" +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +/////////////// How to implement root file output ////////////// + +/* +B4RunAction::B4RunAction() + : G4UserRunAction() +{ + // set printing event number per each event + G4RunManager::GetRunManager()->SetPrintProgress(1); + + // Create analysis manager + // The choice of analysis technology is done via selectin of a namespace + // in B4Analysis.hh + auto analysisManager = G4AnalysisManager::Instance(); + G4cout << "Using " << analysisManager->GetType() << G4endl; + + // Create directories + //analysisManager->SetHistoDirectoryName("histograms"); + //analysisManager->SetNtupleDirectoryName("ntuple"); + analysisManager->SetVerboseLevel(1); + analysisManager->SetNtupleMerging(true); + // Note: merging ntuples is available only with Root output + + // Book histograms, ntuple + // + + // Creating histograms + analysisManager->CreateH1("Eabs","Edep in absorber", 100, 0., 800*MeV); + analysisManager->CreateH1("Egap","Edep in gap", 100, 0., 100*MeV); + analysisManager->CreateH1("Labs","trackL in absorber", 100, 0., 1*m); + analysisManager->CreateH1("Lgap","trackL in gap", 100, 0., 50*cm); + + // Creating ntuple + // + analysisManager->CreateNtuple("B4", "Edep and TrackL"); + analysisManager->CreateNtupleDColumn("Eabs"); + analysisManager->CreateNtupleDColumn("Egap"); + analysisManager->CreateNtupleDColumn("Labs"); + analysisManager->CreateNtupleDColumn("Lgap"); + analysisManager->FinishNtuple(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +B4RunAction::~B4RunAction() +{ + delete G4AnalysisManager::Instance(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void B4RunAction::BeginOfRunAction(const G4Run* /*run*/) +{ + //inform the runManager to save random number seed + //G4RunManager::GetRunManager()->SetRandomNumberStore(true); + + // Get analysis manager + auto analysisManager = G4AnalysisManager::Instance(); + + // Open an output file + // + G4String fileName = "B4"; + analysisManager->OpenFile(fileName); +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void B4RunAction::EndOfRunAction(const G4Run* /*run*/) +{ + // print histogram statistics + // + auto analysisManager = G4AnalysisManager::Instance(); + if ( analysisManager->GetH1(1) ) { + G4cout << G4endl << " ----> print histograms statistic "; + if(isMaster) { + G4cout << "for the entire run " << G4endl << G4endl; + } + else { + G4cout << "for the local thread " << G4endl << G4endl; + } + + G4cout << " EAbs : mean = " + << G4BestUnit(analysisManager->GetH1(0)->mean(), "Energy") + << " rms = " + << G4BestUnit(analysisManager->GetH1(0)->rms(), "Energy") << G4endl; + + G4cout << " EGap : mean = " + << G4BestUnit(analysisManager->GetH1(1)->mean(), "Energy") + << " rms = " + << G4BestUnit(analysisManager->GetH1(1)->rms(), "Energy") << G4endl; + + G4cout << " LAbs : mean = " + << G4BestUnit(analysisManager->GetH1(2)->mean(), "Length") + << " rms = " + << G4BestUnit(analysisManager->GetH1(2)->rms(), "Length") << G4endl; + + G4cout << " LGap : mean = " + << G4BestUnit(analysisManager->GetH1(3)->mean(), "Length") + << " rms = " + << G4BestUnit(analysisManager->GetH1(3)->rms(), "Length") << G4endl; + } + + // save histograms & ntuple + // + analysisManager->Write(); + analysisManager->CloseFile(); +} +*/