diff --git a/sim/transport/steer/CbmTransport.cxx b/sim/transport/steer/CbmTransport.cxx index a40e34f6975c1036427a079e8aaa310bde53b3f9..87676b0b8c6e21875682cb35989991bd48dee8d7 100644 --- a/sim/transport/steer/CbmTransport.cxx +++ b/sim/transport/steer/CbmTransport.cxx @@ -711,19 +711,24 @@ void CbmTransport::SetRandomEventPlane(Double_t phiMin, Double_t phiMax) { fEven // ----- Set output file name ------------------------------------------- -void CbmTransport::SetOutFileName(TString fileName) +void CbmTransport::SetOutFileName(TString fileName, Bool_t overwrite) { - // Check for the directory - std::string name = fileName.Data(); - Int_t found = name.find_last_of("/"); - if (found >= 0) { - TString outDir = name.substr(0, found); - if (gSystem->AccessPathName(outDir.Data())) { - LOG(fatal) << GetName() << ": Output directory " << outDir << " does not exist!"; - return; - } //? Directory of output file does not exist - } //? File name contains directory path + // --- Protect against overwriting an existing file + if ((!gSystem->AccessPathName(fileName.Data())) && (!overwrite)) { + LOG(fatal) << fName << ": output file " << fileName << " already exists!"; + return; + } + + // --- If the directory does not yet exist, create it + const char* directory = gSystem->DirName(fileName.Data()); + if (gSystem->AccessPathName(directory)) { + Int_t success = gSystem->mkdir(directory, kTRUE); + if (success == -1) + LOG(fatal) << fName << ": output directory " << directory << " does not exist and cannot be created!"; + else + LOG(info) << fName << ": created directory " << directory; + } fOutFileName = fileName; } diff --git a/sim/transport/steer/CbmTransport.h b/sim/transport/steer/CbmTransport.h index 5baba55bdd758eb44f93af087e41268699c69528..8a2d65a129b95adc79034cd3342cef052bf7d76c 100644 --- a/sim/transport/steer/CbmTransport.h +++ b/sim/transport/steer/CbmTransport.h @@ -286,10 +286,13 @@ public: Double_t z = 0., Double_t rot = 0.); - /** @brief Define output file name - ** @param name Name for output file + /** @brief Set the output file name + ** @param path Name of output file + ** @param overwrite Overwrite output file if already existing + ** + ** If the directory of the file does not exist, it will be created. **/ - void SetOutFileName(TString name); + void SetOutFileName(TString name, Bool_t overwrite = kFALSE); /** @brief Activate random event plane