Import Geant4 11.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2022-12-09 14:43:28 +01:00
parent c07cea1fe0
commit 9f34590941
3810 changed files with 200490 additions and 182326 deletions
@@ -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;
}
+31 -33
View File
@@ -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");
}
}
+2 -3
View File
@@ -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;
}