-
Eoin Clerkin authored
Decision to not use doxygen for licence headers. Removes doxygen formatting and file tag.
Eoin Clerkin authoredDecision to not use doxygen for licence headers. Removes doxygen formatting and file tag.
CbmMCDataManager.cxx 4.23 KiB
/* Copyright (C) 2015-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Volker Friese [committer], Florian Uhlig */
#include "CbmMCDataManager.h"
#include "CbmMCDataArray.h" // for CbmMCDataArray
#include "CbmMCDataObject.h" // for CbmMCDataObject
#include <FairRootManager.h> // for FairRootManager
#include <FairTask.h> // for FairTask, InitStatus, kFATAL, kSUCCESS
#include <Logger.h>
#include <utility> // for pair
using namespace std;
// --- Default constructor
CbmMCDataManager::CbmMCDataManager() : CbmMCDataManager("MCDataManager", 0)
// : FairTask("MCDataManager", 0), fLegacy(0), fFileList(), fActive(), fActiveObj(), fFriends()
{
fFileList.clear();
fActive.clear();
fActiveObj.clear();
fFriends.clear();
}
// --- Standard constructor
CbmMCDataManager::CbmMCDataManager(const char* name, Int_t legacy)
: FairTask(name, 0)
, fLegacy(legacy)
, fFileList()
, fActive()
, fActiveObj()
, fFriends()
{
fFileList.clear();
fActive.clear();
fActiveObj.clear();
fFriends.clear();
}
// --- Destructor
CbmMCDataManager::~CbmMCDataManager()
{
map<TString, CbmMCDataArray*>::const_iterator p;
for (p = fActive.begin(); p != fActive.end(); ++p)
delete p->second;
fActive.clear();
map<TString, CbmMCDataObject*>::const_iterator o;
for (o = fActiveObj.begin(); o != fActiveObj.end(); ++o)
delete o->second;
fActiveObj.clear();
}
// --- Add an additional input file
Int_t CbmMCDataManager::AddFile(const char* name)
{
Int_t n = fFileList.size();
fFileList.resize(n + 1);
fFileList[n].clear();
fFileList[n].push_back(name);
return n;
}
// --- Add a file to a given input chain
Int_t CbmMCDataManager::AddFileToChain(const char* name, Int_t number)
{
Int_t i;
Int_t n = fFileList.size();
if (number < 0) return -1111;
if (number >= n) {
fFileList.resize(number + 1);
for (i = n; i <= number; i++)
fFileList[i].clear();
}
fFileList[number].push_back(name);
return fFileList[number].size();
}
// --- End of event action
void CbmMCDataManager::FinishEvent()
{
map<TString, CbmMCDataArray*>::const_iterator p;
map<TString, CbmMCDataObject*>::const_iterator o;
for (p = fActive.begin(); p != fActive.end(); ++p)
p->second->FinishEvent();
for (o = fActiveObj.begin(); o != fActiveObj.end(); ++o)
o->second->FinishEvent();
}
// --- Initialisation
InitStatus CbmMCDataManager::Init()
{
FairRootManager* fManager = FairRootManager::Instance();
if (!fManager) return kFATAL;
fManager->Register("MCDataManager", "Stack", (TNamed*) this, kFALSE);
return kSUCCESS;
}
// --- Instantiate a data branch
CbmMCDataArray* CbmMCDataManager::InitBranch(const char* brname)
{
CbmMCDataArray* arr = nullptr;
TString nm = brname;
map<Int_t, Int_t>::const_iterator p;
if (fActive.find(nm) != fActive.end()) {
LOG(info) << "InitBranch: " << nm << " " << fActive[nm];
return fActive[nm];
}
if (fLegacy == 0) {
arr = new CbmMCDataArray(brname, fFileList);
fActive[nm] = arr;
for (p = fFriends.begin(); p != fFriends.end(); ++p) {
arr->AddFriend(p->first, p->second);
}
} //? Standard mode
else {
if (FairRootManager::Instance()->GetObject(brname) != nullptr) {
arr = new CbmMCDataArray(brname);
fActive[nm] = arr;
LOG(info) << "InitBranch: " << nm << " " << arr;
} //? Branch found
else {
LOG(info) << "InitBranch: " << nm << " could not be initialised.";
} //? Branch not found in FairRootManager
} //? Legacy mode
return arr;
}
// --- Instantiate a data branch containing TObject
CbmMCDataObject* CbmMCDataManager::GetObject(const char* brname)
{
CbmMCDataObject* arr;
TString nm = brname;
map<Int_t, Int_t>::const_iterator p;
if (fActiveObj.find(nm) != fActiveObj.end()) {
LOG(info) << "InitBranch: " << nm << " " << fActiveObj[nm];
return fActiveObj[nm];
}
if (fLegacy == 0) {
arr = new CbmMCDataObject(brname, fFileList);
for (p = fFriends.begin(); p != fFriends.end(); ++p) {
arr->AddFriend(p->first, p->second);
}
}
else
arr = new CbmMCDataObject(brname);
fActiveObj[nm] = arr;
LOG(info) << "InitBranch: " << nm << " " << arr;
return arr;
}
ClassImp(CbmMCDataManager)