Import Geant4 11.1.0 source tree
This commit is contained in:
@@ -55,112 +55,19 @@ G4bool G4CsvAnalysisManager::IsInstance()
|
||||
G4CsvAnalysisManager::G4CsvAnalysisManager()
|
||||
: G4ToolsAnalysisManager("Csv")
|
||||
{
|
||||
if ( ! G4Threading::IsWorkerThread() ) fgMasterInstance = this;
|
||||
|
||||
// File Manager
|
||||
fFileManager = std::make_shared<G4CsvFileManager>(fState);
|
||||
SetFileManager(fFileManager);
|
||||
auto fileManager = std::make_shared<G4CsvFileManager>(fState);
|
||||
SetFileManager(fileManager);
|
||||
|
||||
// Ntuple file manager
|
||||
fNtupleFileManager = std::make_shared<G4CsvNtupleFileManager>(fState);
|
||||
fNtupleFileManager->SetFileManager(fFileManager);
|
||||
SetNtupleFileManager(fNtupleFileManager);
|
||||
fNtupleFileManager->SetFileManager(fileManager);
|
||||
fNtupleFileManager->SetBookingManager(fNtupleBookingManager);
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4CsvAnalysisManager::~G4CsvAnalysisManager()
|
||||
{
|
||||
if ( fState.GetIsMaster() ) fgMasterInstance = nullptr;
|
||||
fgIsInstance = false;
|
||||
}
|
||||
|
||||
//
|
||||
// protected methods
|
||||
//
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvAnalysisManager::OpenFileImpl(const G4String& fileName)
|
||||
{
|
||||
// Create ntuple manager(s)
|
||||
// and set it to base class which takes then their ownership
|
||||
SetNtupleManager(fNtupleFileManager->CreateNtupleManager());
|
||||
|
||||
auto result = true;
|
||||
|
||||
// Save file name in file manager
|
||||
result &= fFileManager->OpenFile(fileName);
|
||||
|
||||
// Open ntuple files and create ntuples from bookings
|
||||
result &= fNtupleFileManager->ActionAtOpenFile(fFileManager->GetFullFileName());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvAnalysisManager::WriteImpl()
|
||||
{
|
||||
// nothing to be done for Csv file
|
||||
auto result = true;
|
||||
|
||||
Message(kVL4, "write", "files");
|
||||
|
||||
if ( G4Threading::IsWorkerThread() ) {
|
||||
result &= G4ToolsAnalysisManager::Merge();
|
||||
}
|
||||
else {
|
||||
// Write all histograms/profile on master
|
||||
result &= G4ToolsAnalysisManager::WriteImpl();
|
||||
}
|
||||
|
||||
// Ntuples
|
||||
// Nothing to be done
|
||||
|
||||
// Write ASCII if activated
|
||||
// Not available
|
||||
//if ( IsAscii() ) {
|
||||
// result &= WriteAscii();
|
||||
//}
|
||||
|
||||
Message(kVL3, "write", "files", "", result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvAnalysisManager::CloseFileImpl(G4bool reset)
|
||||
{
|
||||
auto result = true;
|
||||
|
||||
// close open files
|
||||
result &= fFileManager->CloseFiles();
|
||||
|
||||
// Histogram and profile files are created/closed indivudually for each
|
||||
// object in WriteT function
|
||||
|
||||
result &= fNtupleFileManager->ActionAtCloseFile(reset);
|
||||
|
||||
// Reset data
|
||||
if ( reset ) {
|
||||
result = Reset();
|
||||
if ( ! result ) {
|
||||
Warn("Resetting data failed", fkClass, "CloseFileImpl");
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvAnalysisManager::ResetImpl()
|
||||
{
|
||||
// Reset histograms and ntuple
|
||||
|
||||
auto result = true;
|
||||
|
||||
result &= G4ToolsAnalysisManager::ResetImpl();
|
||||
if ( fNtupleFileManager != nullptr ) {
|
||||
result &= fNtupleFileManager->Reset();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -55,13 +55,15 @@ G4CsvFileManager::G4CsvFileManager(const G4AnalysisManagerState& state)
|
||||
G4String G4CsvFileManager::GetNtupleFileName(CsvNtupleDescription* ntupleDescription)
|
||||
{
|
||||
// get ntuple file name
|
||||
auto ntupleFileName = ntupleDescription->fFileName;
|
||||
if ( ntupleFileName.size() ) {
|
||||
auto ntupleFileName = ntupleDescription->GetFileName();
|
||||
auto cycle = GetCycle();
|
||||
if (ntupleFileName.size() != 0u) {
|
||||
// update filename per object per thread
|
||||
ntupleFileName = GetTnFileName(ntupleFileName, GetFileType());
|
||||
} else {
|
||||
ntupleFileName = GetTnFileName(ntupleFileName, GetFileType(), cycle);
|
||||
}
|
||||
else {
|
||||
// compose ntuple file name from the default file name
|
||||
ntupleFileName = GetNtupleFileName(ntupleDescription->fNtupleBooking.name());
|
||||
ntupleFileName = GetNtupleFileName(ntupleDescription->GetNtupleBooking().name(), cycle);
|
||||
}
|
||||
|
||||
if ( IsNtupleDirectory() ) {
|
||||
@@ -150,21 +152,28 @@ G4bool G4CsvFileManager::SetNtupleDirectoryName(const G4String& dirName)
|
||||
return false;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvFileManager::NotifyNtupleFile(CsvNtupleDescription* ntupleDescription)
|
||||
{
|
||||
// Notify not empty file
|
||||
auto ntupleFileName = GetNtupleFileName(ntupleDescription);
|
||||
|
||||
return SetIsEmpty(ntupleFileName, ! ntupleDescription->GetHasFill());
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvFileManager::CreateNtupleFile(
|
||||
CsvNtupleDescription* ntupleDescription)
|
||||
{
|
||||
// get ntuple file name per object (if defined)
|
||||
// Get ntuple file name per object (if defined)
|
||||
auto ntupleFileName = GetNtupleFileName(ntupleDescription);
|
||||
|
||||
Message(kVL4, "create", "ntuple file", ntupleFileName);
|
||||
|
||||
// update file name if it is already in use
|
||||
while ( GetTFile(ntupleFileName, false) ) {
|
||||
// Update file name if it is already in use
|
||||
while ( GetTFile(ntupleFileName, false) != nullptr ) {
|
||||
// the file is already in use
|
||||
auto oldName = ntupleDescription->fFileName;
|
||||
auto oldName = ntupleFileName;
|
||||
auto newName = GetBaseName(oldName) + "_bis." + GetExtension(oldName);
|
||||
ntupleDescription->fFileName = newName;
|
||||
ntupleDescription->SetFileName(newName);
|
||||
|
||||
Warn("Ntuple filename " + oldName + " is already in use.\n" +
|
||||
"It will be replaced with : " + newName,
|
||||
@@ -173,35 +182,24 @@ G4bool G4CsvFileManager::CreateNtupleFile(
|
||||
ntupleFileName = GetNtupleFileName(ntupleDescription);
|
||||
}
|
||||
|
||||
ntupleDescription->fFile = CreateTFile(ntupleFileName);
|
||||
// Create new ntuple file
|
||||
ntupleDescription->SetFile(CreateTFile(ntupleFileName));
|
||||
|
||||
Message(kVL2, "create", "ntuple file", ntupleFileName);
|
||||
|
||||
return (ntupleDescription->fFile != nullptr);
|
||||
return (ntupleDescription->GetFile() != nullptr);
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvFileManager::CloseNtupleFile(
|
||||
CsvNtupleDescription* ntupleDescription)
|
||||
{
|
||||
// Do nothing if there is no file
|
||||
if ( ! ntupleDescription->fFile ) return true;
|
||||
// Notifying not empty file is done in G4CsvNtupleFileManager::ActionAtWrite,
|
||||
// as here we increment the cycle number and GetNtupleFileName returns a file name
|
||||
// for the next cycle version.
|
||||
|
||||
auto result = true;
|
||||
// Ntuple files are registered in file manager map.
|
||||
// they will be closed with CloseFiles() calls
|
||||
|
||||
auto ntupleFileName = GetNtupleFileName(ntupleDescription);
|
||||
ntupleDescription->GetFile().reset();
|
||||
|
||||
Message(kVL4, "close", "ntuple file", ntupleFileName);
|
||||
|
||||
// close file
|
||||
result &= CloseTFile(ntupleFileName);
|
||||
// Notify not empty file
|
||||
result &= SetIsEmpty(ntupleFileName, ! ntupleDescription->fHasFill);
|
||||
|
||||
// Reset file info in ntuple description
|
||||
ntupleDescription->fFile.reset();
|
||||
|
||||
Message(kVL2, "close", "ntuple file", ntupleFileName);
|
||||
|
||||
return result;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -39,24 +39,6 @@ G4CsvNtupleFileManager::G4CsvNtupleFileManager(const G4AnalysisManagerState& sta
|
||||
: G4VNtupleFileManager(state, "csv")
|
||||
{}
|
||||
|
||||
//
|
||||
// private methods
|
||||
//
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvNtupleFileManager::CloseNtupleFiles()
|
||||
{
|
||||
// Close ntuple files
|
||||
|
||||
auto result = true;
|
||||
auto ntupleVector = fNtupleManager->GetNtupleDescriptionVector();
|
||||
for ( auto ntupleDescription : ntupleVector) {
|
||||
result &= fFileManager->CloseNtupleFile(ntupleDescription);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// public methods
|
||||
//
|
||||
@@ -88,23 +70,29 @@ G4bool G4CsvNtupleFileManager::ActionAtOpenFile(const G4String& /*fileName*/)
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvNtupleFileManager::ActionAtWrite()
|
||||
{
|
||||
return true;
|
||||
auto result = true;
|
||||
|
||||
auto ntupleVector = fNtupleManager->GetNtupleDescriptionVector();
|
||||
|
||||
for ( auto ntupleDescription : ntupleVector ) {
|
||||
if (ntupleDescription->GetNtuple() != nullptr) {
|
||||
// Notify not empty file
|
||||
result &= fFileManager->NotifyNtupleFile(ntupleDescription);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4CsvNtupleFileManager::ActionAtCloseFile(G4bool reset)
|
||||
G4bool G4CsvNtupleFileManager::ActionAtCloseFile()
|
||||
{
|
||||
auto result = true;
|
||||
|
||||
// close ntuple files
|
||||
result &= CloseNtupleFiles();
|
||||
|
||||
if ( ! reset ) {
|
||||
// The ntuples must be always reset when closing file)
|
||||
result = Reset();
|
||||
if ( ! result ) {
|
||||
Warn("Resetting data failed", fkClass, "ActionAtCloseFile");
|
||||
}
|
||||
// Close ntuple files
|
||||
auto ntupleVector = fNtupleManager->GetNtupleDescriptionVector();
|
||||
for ( auto ntupleDescription : ntupleVector) {
|
||||
result &= fFileManager->CloseNtupleFile(ntupleDescription);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -54,10 +54,10 @@ void G4CsvNtupleManager::CreateTNtupleFromBooking(
|
||||
if ( ! fFileManager->CreateNtupleFile(ntupleDescription) ) return;
|
||||
|
||||
// create ntuple
|
||||
ntupleDescription->fNtuple
|
||||
= new tools::wcsv::ntuple(
|
||||
*(ntupleDescription->fFile), G4cerr, ntupleDescription->fNtupleBooking);
|
||||
fNtupleVector.push_back(ntupleDescription->fNtuple);
|
||||
ntupleDescription->SetNtuple(
|
||||
new tools::wcsv::ntuple(
|
||||
*(ntupleDescription->GetFile()), G4cerr, ntupleDescription->GetNtupleBooking()));
|
||||
fNtupleVector.push_back(ntupleDescription->GetNtuple());
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
@@ -67,22 +67,21 @@ void G4CsvNtupleManager::FinishTNtuple(
|
||||
{
|
||||
|
||||
// Do nothing if the base file name was not yet defined
|
||||
if ( ! fFileManager->GetFileName().size() ) return;
|
||||
if (fFileManager->GetFileName().size() == 0u) return;
|
||||
|
||||
// Create ntuple from booking
|
||||
if ( ! ntupleDescription->fNtuple ) {
|
||||
if (ntupleDescription->GetNtuple() == nullptr) {
|
||||
CreateTNtupleFromBooking(ntupleDescription);
|
||||
}
|
||||
|
||||
// Return if creating ntuple failed
|
||||
if ( ! ntupleDescription->fNtuple ) {
|
||||
if (ntupleDescription->GetNtuple() == nullptr) {
|
||||
Warn("Creating ntuple has failed.", fkClass, "FinishTNtuple");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Write header if ntuple already exists
|
||||
if ( ! WriteHeader(ntupleDescription->fNtuple) ) {
|
||||
if ( ! WriteHeader(ntupleDescription->GetNtuple()) ) {
|
||||
Warn("Writing ntuple header has failed.", fkClass, "FinishTNtuple");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,9 +89,8 @@ G4bool G4CsvRFileManager::OpenRFile(const G4String& fileName)
|
||||
std::ifstream* G4CsvRFileManager::GetRFile(const G4String& fileName) const
|
||||
{
|
||||
auto it = fRFiles.find(fileName);
|
||||
if ( it != fRFiles.end() )
|
||||
if (it != fRFiles.end()) {
|
||||
return it->second;
|
||||
else {
|
||||
return nullptr;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user