49void NtupleMergingWarning(std::string_view className,
50 std::string_view functionName,
54 "Ntuple merging is not available with " + outputType +
" output.\n" +
55 "Setting is ignored.", className, functionName);
68 fMessenger = std::make_unique<G4AnalysisMessenger>(
this);
74 fgMasterInstance =
this;
77 if (fgMasterInstance !=
nullptr) {
79 fgMasterInstance->fWorkerManagers.push_back(
this);
93G4bool G4VAnalysisManager::WriteFromUI()
102 for (
auto workerManger : fWorkerManagers) {
107 result &= workerManger->Write();
124 if (!
fState.GetIsMaster() )
return true;
129 for (
auto workerManger : fWorkerManagers) {
134 result &= workerManger->CloseFile(reset);
147G4bool G4VAnalysisManager::ResetFromUI()
151 if (!
fState.GetIsMaster() )
return true;
156 for (
auto workerManger : fWorkerManagers) {
161 result &= workerManger->Reset();
183 Warn(
"Cannot set default file type " + value +
184 " different than the analysis manager type " +
GetType(),
185 fkClass,
"SetDefault");
189 fH1HnManager->SetDefaultFileType(value);
190 fH2HnManager->SetDefaultFileType(value);
191 fH3HnManager->SetDefaultFileType(value);
192 fP1HnManager->SetDefaultFileType(value);
193 fP2HnManager->SetDefaultFileType(value);
205 fVH1Manager.reset(h1Manager);
214 fVH2Manager.reset(h2Manager);
223 fVH3Manager.reset(h3Manager);
232 fVP1Manager.reset(p1Manager);
241 fVP2Manager.reset(p2Manager);
259 std::shared_ptr<G4VNtupleFileManager> ntupleFileManager)
269 if ( fH1HnManager !=
nullptr ) fH1HnManager->SetFileManager(fileManager);
270 if ( fH2HnManager !=
nullptr ) fH2HnManager->SetFileManager(fileManager);
271 if ( fH3HnManager !=
nullptr ) fH3HnManager->SetFileManager(fileManager);
272 if ( fP1HnManager !=
nullptr ) fP1HnManager->SetFileManager(fileManager);
273 if ( fP2HnManager !=
nullptr ) fP2HnManager->SetFileManager(std::move(fileManager));
280 if ( !
fState.GetIsMaster() )
return true;
286 if (name.find(
'.') != std::string::npos) {
287 name.erase(name.find(
'.'), name.length());
289 name.append(
".ascii");
293 std::ofstream output(name, std::ios::out);
295 Warn(
"Cannot open file. File name is not defined.",
296 fkClass,
"WriteAscii");
299 output.setf( std::ios::scientific, std::ios::floatfield );
301 result &= fVH1Manager->WriteOnAscii(output);
302 result &= fVH2Manager->WriteOnAscii(output);
303 result &= fVH3Manager->WriteOnAscii(output);
304 result &= fVP1Manager->WriteOnAscii(output);
305 result &= fVP2Manager->WriteOnAscii(output);
307 Message(
kVL1,
"write ASCII",
"file", name, result);
313std::shared_ptr<G4VFileManager>
318 if ((extension.size() != 0u) && extension !=
GetFileType()) {
320 "The file extension differs from " +
GetFileType() +
" output type.\n" +
322 fkClass,
"GetFileManager");
342 if ( fileName !=
"" ) {
346 Warn(
"Cannot open file. File name is not defined.", fkClass,
"OpenFile");
494 std::array<G4HnDimension, kDim1> bins = {
496 std::array<G4HnDimensionInformation, kDim1> info = {
499 return fVH1Manager->Create(name, title, bins, info);
504 const std::vector<G4double>& edges,
507 std::array<G4HnDimension, kDim1> bins = {
509 std::array<G4HnDimensionInformation, kDim1> info = {
512 return fVH1Manager->Create(name, title, bins, info);
525 std::array<G4HnDimension, kDim2> bins = {
528 std::array<G4HnDimensionInformation, kDim2> info = {
532 return fVH2Manager->Create(name, title, bins, info);
537 const std::vector<G4double>& xedges,
538 const std::vector<G4double>& yedges,
543 std::array<G4HnDimension, kDim2> bins = {
545 std::array<G4HnDimensionInformation, kDim2> info = {
549 return fVH2Manager->Create(name, title, bins, info);
566 std::array<G4HnDimension, kDim3> bins = {
570 std::array<G4HnDimensionInformation, kDim3> info = {
575 return fVH3Manager->Create(name, title, bins, info);
580 const std::vector<G4double>& xedges,
581 const std::vector<G4double>& yedges,
582 const std::vector<G4double>& zedges,
589 std::array<G4HnDimension, kDim3> bins = {
591 std::array<G4HnDimensionInformation, kDim3> info = {
596 return fVH3Manager->Create(name, title, bins, info);
605 std::array<G4HnDimension, kDim1> bins = {
607 std::array<G4HnDimensionInformation, kDim1> info = {
610 return fVH1Manager->Set(
id, bins, info);
615 const std::vector<G4double>& edges,
618 std::array<G4HnDimension, kDim1> bins = {
620 std::array<G4HnDimensionInformation, kDim1> info = {
623 return fVH1Manager->Set(
id, bins, info);
635 std::array<G4HnDimension, kDim2> bins = {
638 std::array<G4HnDimensionInformation, kDim2> info = {
642 return fVH2Manager->Set(
id, bins, info);
647 const std::vector<G4double>& xedges,
648 const std::vector<G4double>& yedges,
652 std::array<G4HnDimension, kDim2> bins = {
654 std::array<G4HnDimensionInformation, kDim2> info = {
658 return fVH2Manager->Set(
id, bins, info);
674 std::array<G4HnDimension, kDim3> bins = {
678 std::array<G4HnDimensionInformation, kDim3> info = {
683 return fVH3Manager->Set(
id, bins, info);
688 const std::vector<G4double>& xedges,
689 const std::vector<G4double>& yedges,
690 const std::vector<G4double>& zedges,
696 std::array<G4HnDimension, kDim3> bins = {
698 std::array<G4HnDimensionInformation, kDim3> info = {
703 return fVH3Manager->Set(
id, bins, info);
709 return fVH1Manager->Scale(
id, factor);
715 return fVH2Manager->Scale(
id, factor);
721 return fVH3Manager->Scale(
id, factor);
732 std::array<G4HnDimension, kDim2> bins = {
735 std::array<G4HnDimensionInformation, kDim2> info = {
739 return fVP1Manager->Create(name, title, bins, info);
744 const std::vector<G4double>& edges,
749 std::array<G4HnDimension, kDim2> bins = {
751 std::array<G4HnDimensionInformation, kDim2> info = {
755 return fVP1Manager->Create(name, title, bins, info);
770 std::array<G4HnDimension, kDim3> bins = {
774 std::array<G4HnDimensionInformation, kDim3> info = {
779 return fVP2Manager->Create(name, title, bins, info);
784 const std::vector<G4double>& xedges,
785 const std::vector<G4double>& yedges,
792 std::array<G4HnDimension, kDim3> bins = {
794 std::array<G4HnDimensionInformation, kDim3> info = {
799 return fVP2Manager->Create(name, title, bins, info);
810 std::array<G4HnDimension, kDim2> bins = {
813 std::array<G4HnDimensionInformation, kDim2> info = {
817 return fVP1Manager->Set(
id, bins, info);
822 const std::vector<G4double>& edges,
827 std::array<G4HnDimension, kDim2> bins = {
829 std::array<G4HnDimensionInformation, kDim2> info = {
833 return fVP1Manager->Set(
id, bins, info);
848 std::array<G4HnDimension, kDim3> bins = {
852 std::array<G4HnDimensionInformation, kDim3> info = {
857 return fVP2Manager->Set(
id, bins, info);
862 const std::vector<G4double>& xedges,
863 const std::vector<G4double>& yedges,
872 std::array<G4HnDimension, kDim3> bins = {
874 std::array<G4HnDimensionInformation, kDim3> info = {
879 return fVP2Manager->Set(
id, bins, info);
885 return fVP1Manager->Scale(
id, factor);
891 return fVP2Manager->Scale(
id, factor);
927 std::vector<int>& vector)
934 std::vector<float>& vector)
941 std::vector<double>& vector)
948 std::vector<std::string>& vector)
970 NtupleMergingWarning(fkClass,
"SetNtupleMerging",
GetType());
980 NtupleMergingWarning(fkClass,
"SetNtupleRowWise",
GetType());
989 NtupleMergingWarning(fkClass,
"SetBasketSize",
GetType());
998 NtupleMergingWarning(fkClass,
"SetBasketEntries",
GetType());
1033 std::vector<int>& vector)
1041 std::vector<float>& vector)
1049 std::vector<double>& vector)
1057 std::vector<std::string>& vector)
1087 return fH1HnManager->SetFirstId(firstId);
1093 return fH2HnManager->SetFirstId(firstId);
1099 return fH3HnManager->SetFirstId(firstId);
1116 return fP1HnManager->SetFirstId(firstId);
1122 return fP2HnManager->SetFirstId(firstId);
1156 fState.SetIsActivation(activation);
1167 return fState.GetIsActivation() &&
1168 ( fH1HnManager->IsActive() ||
1169 fH2HnManager->IsActive() ||
1170 fH3HnManager->IsActive() ||
1171 fP1HnManager->IsActive() ||
1172 fP2HnManager->IsActive() );
1180 return ( fH1HnManager->IsAscii() ||
1181 fH2HnManager->IsAscii() ||
1182 fH3HnManager->IsAscii() ||
1183 fP1HnManager->IsAscii() ||
1184 fP2HnManager->IsAscii() );
1192 return ( fH1HnManager->IsPlotting() ||
1193 fH2HnManager->IsPlotting() ||
1194 fH3HnManager->IsPlotting() ||
1195 fP1HnManager->IsPlotting() ||
1196 fP2HnManager->IsPlotting() );
1204 return fH1HnManager->GetFirstId();
1212 return fH2HnManager->GetFirstId();
1220 return fH3HnManager->GetFirstId();
1228 return fP1HnManager->GetFirstId();
1236 return fP2HnManager->GetFirstId();
1258 return fVH1Manager->GetNofHns(onlyIfExist);
1264 return fVH2Manager->GetNofHns(onlyIfExist);
1270 return fVH3Manager->GetNofHns(onlyIfExist);
1276 return fVP1Manager->GetNofHns(onlyIfExist);
1282 return fVP2Manager->GetNofHns(onlyIfExist);
1296 return fVH1Manager->List(
G4cout, onlyIfActive);
1302 return fVH2Manager->List(
G4cout, onlyIfActive);
1308 return fVH3Manager->List(
G4cout, onlyIfActive);
1314 return fVP1Manager->List(
G4cout, onlyIfActive);
1320 return fVP2Manager->List(
G4cout, onlyIfActive);
1333 result &=
ListH1(onlyIfActive);
1334 result &=
ListH2(onlyIfActive);
1335 result &=
ListH3(onlyIfActive);
1336 result &=
ListP1(onlyIfActive);
1337 result &=
ListP2(onlyIfActive);
1348 fH1HnManager->SetActivation(
id, activation);
1356 fH1HnManager->SetActivation(activation);
1362 fH1HnManager->SetAscii(
id, ascii);
1368 fH1HnManager->SetPlotting(
id, plotting);
1374 fH1HnManager->SetFileName(
id, fileName);
1382 fH2HnManager->SetActivation(
id, activation);
1390 fH2HnManager->SetActivation(activation);
1396 fH2HnManager->SetAscii(
id, ascii);
1402 fH2HnManager->SetPlotting(
id, plotting);
1408 fH2HnManager->SetFileName(
id, fileName);
1416 fH3HnManager->SetActivation(
id, activation);
1424 fH3HnManager->SetActivation(activation);
1430 fH3HnManager->SetAscii(
id, ascii);
1436 fH3HnManager->SetPlotting(
id, plotting);
1442 fH3HnManager->SetFileName(
id, fileName);
1450 fP1HnManager->SetActivation(
id, activation);
1458 fP1HnManager->SetActivation(activation);
1464 fP1HnManager->SetAscii(
id, ascii);
1470 fP1HnManager->SetPlotting(
id, plotting);
1476 fP1HnManager->SetFileName(
id, fileName);
1484 fP2HnManager->SetActivation(
id, activation);
1492 fP2HnManager->SetActivation(activation);
1498 fP2HnManager->SetAscii(
id, ascii);
1504 fP2HnManager->SetPlotting(
id, plotting);
1510 fP2HnManager->SetFileName(
id, fileName);
1548 return fVH1Manager->Delete(
id, keepSetting);
1554 return fVH2Manager->Delete(
id, keepSetting);
1560 return fVH3Manager->Delete(
id, keepSetting);
1566 return fVP1Manager->Delete(
id, keepSetting);
1572 return fVP2Manager->Delete(
id, keepSetting);
1592 fState.SetVerboseLevel(verboseLevel);
G4TemplateAutoLock< G4Mutex > G4AutoLock
#define G4MUTEX_INITIALIZER
G4GLOB_DLL std::ostream G4cout
G4bool GetIsMaster() const
G4bool ListNtuple(G4bool onlyIfActive=true) const
G4int CreateP1(const G4String &name, const G4String &title, G4int nbins, G4double xmin, G4double xmax, G4double ymin=0, G4double ymax=0, const G4String &xunitName="none", const G4String &yunitName="none", const G4String &xfcnName="none", const G4String &yfcnName="none", const G4String &xbinSchemeName="linear")
virtual G4bool MergeImpl(tools::histo::hmpi *hmpi)=0
G4int GetFirstP2Id() const
void SetH1Ascii(G4int id, G4bool ascii)
G4int GetFirstNtupleId() const
G4bool DeleteH1(G4int id, G4bool keepSetting=false)
void SetP1Manager(G4VTBaseHnManager< kDim2 > *p1Manager)
virtual G4bool IsOpenFileImpl() const =0
G4int CreateP2(const G4String &name, const G4String &title, G4int nxbins, G4double xmin, G4double xmax, G4int nybins, G4double ymin, G4double ymax, G4double zmin=0, G4double zmax=0, const G4String &xunitName="none", const G4String &yunitName="none", const G4String &zunitName="none", const G4String &xfcnName="none", const G4String &yfcnName="none", const G4String &zfcnName="none", const G4String &xbinSchemeName="linear", const G4String &ybinSchemeName="linear")
void SetP2Manager(G4VTBaseHnManager< kDim3 > *p2Manager)
G4int GetFirstH2Id() const
G4int GetNofH3s(G4bool onlyIfExist=false) const
void SetH2FileName(G4int id, const G4String &fileName)
G4VAnalysisManager()=delete
void SetH1Activation(G4bool activation)
G4bool DeleteNtuple(G4int id, G4bool clear=false)
G4bool ListH1(G4bool onlyIfActive=true) const
virtual std::shared_ptr< G4VFileManager > GetFileManager(const G4String &fileName)
virtual ~G4VAnalysisManager()
virtual void SetDefaultFileTypeImpl(const G4String &value)
void SetH1Plotting(G4int id, G4bool plotting)
void SetH3Ascii(G4int id, G4bool ascii)
G4int GetNofH2s(G4bool onlyIfExist=false) const
void SetH3Activation(G4bool activation)
G4int GetFirstP1Id() const
G4bool DeleteP1(G4int id, G4bool keepSetting=false)
G4int CreateH1(const G4String &name, const G4String &title, G4int nbins, G4double xmin, G4double xmax, const G4String &unitName="none", const G4String &fcnName="none", const G4String &binSchemeName="linear")
G4int CreateNtupleIColumn(const G4String &name)
virtual G4bool WriteImpl()=0
G4String GetHistoDirectoryName() const
G4int GetNofH1s(G4bool onlyIfExist=false) const
G4int CreateNtupleDColumn(const G4String &name)
void SetH3Plotting(G4int id, G4bool plotting)
G4int GetNofP1s(G4bool onlyIfExist=false) const
void SetP2FileName(G4int id, const G4String &fileName)
void SetNtupleFileName(const G4String &fileName)
G4int CreateNtupleFColumn(const G4String &name)
G4bool SetH3(G4int id, G4int nxbins, G4double xmin, G4double xmax, G4int nzbins, G4double zmin, G4double zmax, G4int nybins, G4double ymin, G4double ymax, const G4String &xunitName="none", const G4String &yunitName="none", const G4String &zunitName="none", const G4String &xfcnName="none", const G4String &yfcnName="none", const G4String &zfcnName="none", const G4String &xbinSchemeName="linear", const G4String &ybinSchemeName="linear", const G4String &zbinSchemeName="linear")
G4int GetFirstH1Id() const
G4bool DeleteP2(G4int id, G4bool keepSetting=false)
void SetP2Plotting(G4int id, G4bool plotting)
G4bool SetP1(G4int id, G4int nbins, G4double xmin, G4double xmax, G4double ymin=0, G4double ymax=0, const G4String &xunitName="none", const G4String &yunitName="none", const G4String &xfcnName="none", const G4String &yfcnName="none", const G4String &xbinSchemeName="linear")
G4bool SetFirstP1Id(G4int firstId)
G4bool SetP2(G4int id, G4int nxbins, G4double xmin, G4double xmax, G4int nybins, G4double ymin, G4double ymax, G4double zmin=0, G4double zmax=0, const G4String &xunitName="none", const G4String &yunitName="none", const G4String &zunitName="none", const G4String &xfcnName="none", const G4String &yfcnName="none", const G4String &zfcnName="none", const G4String &xbinSchemeName="linear", const G4String &ybinSchemeName="linear")
G4int GetNofP2s(G4bool onlyIfExist=false) const
std::shared_ptr< G4VNtupleFileManager > fVNtupleFileManager
void SetH1Manager(G4VTBaseHnManager< kDim1 > *h1Manager)
virtual G4bool OpenFileImpl(const G4String &fileName)=0
void SetH3Manager(G4VTBaseHnManager< kDim3 > *h3Manager)
void SetActivation(G4bool activation)
G4bool SetFirstNtupleColumnId(G4int firstId)
G4String GetFileName() const
G4bool ListH2(G4bool onlyIfActive=true) const
G4String GetDefaultFileType() const
G4bool CloseFile(G4bool reset=true)
G4bool OpenFile(const G4String &fileName="")
void SetH3FileName(G4int id, const G4String &fileName)
virtual void ClearImpl()=0
std::shared_ptr< G4NtupleBookingManager > fNtupleBookingManager
G4bool ScaleP1(G4int id, G4double factor)
G4bool ScaleH3(G4int id, G4double factor)
void SetH2Ascii(G4int id, G4bool ascii)
G4bool DeleteH2(G4int id, G4bool keepSetting=false)
G4bool ListP2(G4bool onlyIfActive=true) const
void Message(G4int level, const G4String &action, const G4String &objectType, const G4String &objectName="", G4bool success=true) const
G4int CreateNtupleSColumn(const G4String &name)
virtual G4bool PlotImpl()=0
G4bool IsPlotting() const
void SetP1Ascii(G4int id, G4bool ascii)
G4int CreateH3(const G4String &name, const G4String &title, G4int nxbins, G4double xmin, G4double xmax, G4int nybins, G4double ymin, G4double ymax, G4int nzbins, G4double zmin, G4double zmax, const G4String &xunitName="none", const G4String &yunitName="none", const G4String &zunitName="none", const G4String &xfcnName="none", const G4String &yfcnName="none", const G4String &zfcnName="none", const G4String &xbinSchemeName="linear", const G4String &ybinSchemeName="linear", const G4String &zbinSchemeName="linear")
G4bool SetFirstH3Id(G4int firstId)
G4bool SetHistoDirectoryName(const G4String &dirName)
G4AnalysisManagerState fState
void SetP2Activation(G4bool activation)
void SetH1FileName(G4int id, const G4String &fileName)
virtual void SetNtupleRowWise(G4bool rowWise, G4bool rowMode=true)
void SetP1Plotting(G4int id, G4bool plotting)
virtual void SetBasketSize(unsigned int basketSize)
void SetFileManager(std::shared_ptr< G4VFileManager > fileManager)
void SetP1FileName(G4int id, const G4String &fileName)
G4bool WriteAscii(const G4String &fileName)
virtual void SetNtupleMerging(G4bool mergeNtuples, G4int nofReducedNtupleFiles=0)
G4bool ListP1(G4bool onlyIfActive=true) const
void SetP1Activation(G4bool activation)
virtual void SetBasketEntries(unsigned int basketEntries)
G4int GetFirstNtupleColumnId() const
void SetVerboseLevel(G4int verboseLevel)
G4bool SetH1(G4int id, G4int nbins, G4double xmin, G4double xmax, const G4String &unitName="none", const G4String &fcnName="none", const G4String &binSchemeName="linear")
void SetH2Activation(G4bool activation)
G4int CreateNtuple(const G4String &name, const G4String &title)
std::shared_ptr< G4VNtupleManager > fVNtupleManager
void SetNtupleManager(std::shared_ptr< G4VNtupleManager > ntupleManager)
G4bool SetFirstH2Id(G4int firstId)
G4bool DeleteH3(G4int id, G4bool keepSetting=false)
G4bool SetFirstP2Id(G4int firstId)
G4bool List(G4bool onlyIfActive=true) const
G4bool SetH2(G4int id, G4int nxbins, G4double xmin, G4double xmax, G4int nybins, G4double ymin, G4double ymax, const G4String &xunitName="none", const G4String &yunitName="none", const G4String &xfcnName="none", const G4String &yfcnName="none", const G4String &xbinSchemeName="linear", const G4String &ybinSchemeName="linear")
G4String GetFileType() const
virtual G4bool ResetImpl()=0
std::shared_ptr< G4VFileManager > fVFileManager
virtual G4String GetDefaultFileTypeImpl() const
G4bool SetFileName(const G4String &fileName)
void SetCompressionLevel(G4int level)
G4int CreateH2(const G4String &name, const G4String &title, G4int nxbins, G4double xmin, G4double xmax, G4int nybins, G4double ymin, G4double ymax, const G4String &xunitName="none", const G4String &yunitName="none", const G4String &xfcnName="none", const G4String &yfcnName="none", const G4String &xbinSchemeName="linear", const G4String &ybinSchemeName="linear")
void SetNtupleActivation(G4bool activation)
G4int GetCompressionLevel() const
G4bool SetFirstH1Id(G4int firstId)
G4bool ScaleH1(G4int id, G4double factor)
G4String GetNtupleDirectoryName() const
void SetH2Manager(G4VTBaseHnManager< kDim2 > *h2Manager)
G4bool SetFirstNtupleId(G4int firstId)
G4bool IsOpenFile() const
G4bool SetFirstHistoId(G4int firstId)
G4bool SetFirstProfileId(G4int firstId)
G4bool SetNtupleDirectoryName(const G4String &dirName)
G4int GetFirstH3Id() const
G4bool ScaleP2(G4int id, G4double factor)
virtual G4bool CloseFileImpl(G4bool reset)=0
G4bool ScaleH2(G4int id, G4double factor)
void SetDefaultFileType(const G4String &value)
G4bool Merge(tools::histo::hmpi *hmpi)
void SetP2Ascii(G4int id, G4bool ascii)
void SetH2Plotting(G4int id, G4bool plotting)
G4bool ListH3(G4bool onlyIfActive=true) const
G4int GetNofNtuples(G4bool onlyIfExist=false) const
void SetNtupleFileManager(std::shared_ptr< G4VNtupleFileManager > ntupleFileManager)
virtual std::shared_ptr< G4HnManager > GetHnManager()=0
G4String GetExtension(const G4String &fileName, const G4String &defaultExtension="")
void Warn(const G4String &message, const std::string_view inClass, const std::string_view inFunction)
void G4SetThreadId(G4int aNewValue)