Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4CsvNtupleManager.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26
27// Author: Ivana Hrivnacova, 18/06/2013 (ivana@ipno.in2p3.fr)
28
29#include "G4CsvNtupleManager.hh"
30#include "G4CsvFileManager.hh"
33
34using namespace G4Analysis;
35
36//
37// utility methods
38//
39
40//_____________________________________________________________________________
42 : G4TNtupleManager<tools::wcsv::ntuple, std::ofstream>(state)
43{}
44
45//
46// private methods
47//
48
49//_____________________________________________________________________________
50void G4CsvNtupleManager::CreateTNtupleFromBooking(
51 CsvNtupleDescription* ntupleDescription)
52{
53 // create a file for this ntuple
54 if ( ! fFileManager->CreateNtupleFile(ntupleDescription) ) return;
55
56 // create ntuple
57 ntupleDescription->SetNtuple(
58 new tools::wcsv::ntuple(
59 *(ntupleDescription->GetFile()), G4cerr, ntupleDescription->GetNtupleBooking()));
60 }
61
62//_____________________________________________________________________________
63void G4CsvNtupleManager::FinishTNtuple(
64 CsvNtupleDescription* ntupleDescription,
65 G4bool /*fromBooking*/)
66{
67
68 // Do nothing if the base file name was not yet defined
69 if (fFileManager->GetFileName().size() == 0u) return;
70
71 // Create ntuple from booking
72 if (ntupleDescription->GetNtuple() == nullptr) {
73 CreateTNtupleFromBooking(ntupleDescription);
74 }
75
76 // Return if creating ntuple failed
77 if (ntupleDescription->GetNtuple() == nullptr) {
78 Warn("Creating ntuple has failed.", fkClass, "FinishTNtuple");
79 return;
80 }
81
82 // Write header if ntuple already exists
83 if ( ! WriteHeader(ntupleDescription->GetNtuple()) ) {
84 Warn("Writing ntuple header has failed.", fkClass, "FinishTNtuple");
85 }
86}
87
88//_____________________________________________________________________________
89G4bool G4CsvNtupleManager::WriteHeader(tools::wcsv::ntuple* ntuple) const
90{
91// Write header if ntuple already exists and if this option is activated.
92// When both Hippo and Commented headers are selected, only Commented
93// header, which reading is supported.
94// Return false only if an error occurred.
95
96 if ( fIsCommentedHeader ) {
97 return ntuple->write_commented_header(G4cout);
98 }
99
100 // write hippo header (if activated and if not commented header)
101 if ( fIsHippoHeader ) {
102 ntuple->write_hippo_header();
103 return true;
104 }
105
106 return true;
107}
bool G4bool
Definition G4Types.hh:86
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
G4CsvNtupleManager()=delete
const tools::ntuple_booking & GetNtupleBooking() const
std::shared_ptr< FT > GetFile() const
void Warn(const G4String &message, const std::string_view inClass, const std::string_view inFunction)