#include "AliFemtoManager.h"
#include <cstdio>
#ifdef __ROOT__
ClassImp(AliFemtoManager)
#endif
AliFemtoManager::AliFemtoManager():
fAnalysisCollection(0),
fEventReader(0),
fEventWriterCollection(0)
{
fAnalysisCollection = new AliFemtoAnalysisCollection;
fEventWriterCollection = new AliFemtoEventWriterCollection;
fEventReader = 0;
}
AliFemtoManager::AliFemtoManager(const AliFemtoManager& aManager) :
fAnalysisCollection(0),
fEventReader(0),
fEventWriterCollection(0)
{
fEventReader = aManager.fEventReader;
AliFemtoSimpleAnalysisIterator tAnalysisIter;
fAnalysisCollection = new AliFemtoAnalysisCollection;
for (tAnalysisIter=aManager.fAnalysisCollection->begin();tAnalysisIter!=aManager.fAnalysisCollection->end();tAnalysisIter++){
fAnalysisCollection->push_back(*tAnalysisIter);
}
AliFemtoEventWriterIterator tEventWriterIter;
fEventWriterCollection = new AliFemtoEventWriterCollection;
for (tEventWriterIter=aManager.fEventWriterCollection->begin();tEventWriterIter!=aManager.fEventWriterCollection->end();tEventWriterIter++){
fEventWriterCollection->push_back(*tEventWriterIter);
}
}
AliFemtoManager::~AliFemtoManager(){
delete fEventReader;
AliFemtoSimpleAnalysisIterator tAnalysisIter;
for (tAnalysisIter=fAnalysisCollection->begin();tAnalysisIter!=fAnalysisCollection->end();tAnalysisIter++){
delete *tAnalysisIter;
*tAnalysisIter = 0;
}
delete fAnalysisCollection;
AliFemtoEventWriterIterator tEventWriterIter;
for (tEventWriterIter=fEventWriterCollection->begin();tEventWriterIter!=fEventWriterCollection->end();tEventWriterIter++){
delete *tEventWriterIter;
*tEventWriterIter = 0;
}
delete fEventWriterCollection;
}
AliFemtoManager& AliFemtoManager::operator=(const AliFemtoManager& aManager)
{
if (this == &aManager)
return *this;
fEventReader = aManager.fEventReader;
AliFemtoSimpleAnalysisIterator tAnalysisIter;
if (fAnalysisCollection) {
for (tAnalysisIter=fAnalysisCollection->begin();tAnalysisIter!=fAnalysisCollection->end();tAnalysisIter++){
delete *tAnalysisIter;
*tAnalysisIter = 0;
}
delete fAnalysisCollection;
}
AliFemtoEventWriterIterator tEventWriterIter;
if (fEventWriterCollection) {
for (tEventWriterIter=fEventWriterCollection->begin();tEventWriterIter!=fEventWriterCollection->end();tEventWriterIter++){
delete *tEventWriterIter;
*tEventWriterIter = 0;
}
delete fEventWriterCollection;
}
fAnalysisCollection = new AliFemtoAnalysisCollection;
for (tAnalysisIter=aManager.fAnalysisCollection->begin();tAnalysisIter!=aManager.fAnalysisCollection->end();tAnalysisIter++){
fAnalysisCollection->push_back(*tAnalysisIter);
}
fEventWriterCollection = new AliFemtoEventWriterCollection;
for (tEventWriterIter=aManager.fEventWriterCollection->begin();tEventWriterIter!=aManager.fEventWriterCollection->end();tEventWriterIter++){
fEventWriterCollection->push_back(*tEventWriterIter);
}
return *this;
}
int AliFemtoManager::Init(){
AliFemtoString readerMessage;
readerMessage += "*** *** *** *** *** *** *** *** *** *** *** *** \n";
if (fEventReader) {
if (fEventReader->Init("r",readerMessage)){
cout << " AliFemtoManager::Init() - Reader initialization failed " << endl;
return (1);
}
readerMessage += fEventReader->Report();
}
AliFemtoEventWriterIterator tEventWriterIter;
for (tEventWriterIter=fEventWriterCollection->begin();tEventWriterIter!=fEventWriterCollection->end();tEventWriterIter++){
AliFemtoString writerMessage = readerMessage;
writerMessage += "*** *** *** *** *** *** *** *** *** *** *** *** \n";
writerMessage += (*tEventWriterIter)->Report();
if (*tEventWriterIter) {
if ( (*tEventWriterIter)->Init("w",writerMessage)){
cout << " AliFemtoManager::Init() - Writer initialization failed " << endl;
return (1);
}
}
}
return (0);
}
void AliFemtoManager::Finish(){
if (fEventReader) fEventReader->Finish();
AliFemtoEventWriterIterator tEventWriterIter;
AliFemtoEventWriter* currentEventWriter;
for (tEventWriterIter=fEventWriterCollection->begin();tEventWriterIter!=fEventWriterCollection->end();tEventWriterIter++){
currentEventWriter = *tEventWriterIter;
currentEventWriter->Finish();
}
AliFemtoSimpleAnalysisIterator tAnalysisIter;
AliFemtoAnalysis* currentAnalysis;
for (tAnalysisIter=fAnalysisCollection->begin();tAnalysisIter!=fAnalysisCollection->end();tAnalysisIter++){
currentAnalysis = *tAnalysisIter;
currentAnalysis->Finish();
}
}
AliFemtoString AliFemtoManager::Report(){
string stemp;
char ctemp[100];
stemp = fEventReader->Report();
snprintf(ctemp , 100, "\nAliFemtoManager Reporting %u EventWriters\n",(unsigned int) fEventWriterCollection->size());
stemp += ctemp;
AliFemtoEventWriterIterator tEventWriterIter;
AliFemtoEventWriter* currentEventWriter;
for (tEventWriterIter=fEventWriterCollection->begin();tEventWriterIter!=fEventWriterCollection->end();tEventWriterIter++){
currentEventWriter = *tEventWriterIter;
stemp+=currentEventWriter->Report();
}
snprintf(ctemp , 100, "\nAliFemtoManager Reporting %u Analyses\n",(unsigned int) fAnalysisCollection->size());
stemp += ctemp;
AliFemtoSimpleAnalysisIterator tAnalysisIter;
AliFemtoAnalysis* currentAnalysis;
for (tAnalysisIter=fAnalysisCollection->begin();tAnalysisIter!=fAnalysisCollection->end();tAnalysisIter++){
currentAnalysis = *tAnalysisIter;
stemp+=currentAnalysis->Report();
}
AliFemtoString returnThis = stemp;
return returnThis;
}
AliFemtoAnalysis* AliFemtoManager::Analysis( int n ){
if ( n<0 || n > (int) fAnalysisCollection->size() )
return NULL;
AliFemtoSimpleAnalysisIterator iter = fAnalysisCollection->begin();
for (int i=0; i<n ;i++){
iter++;
}
return *iter;
}
AliFemtoEventWriter* AliFemtoManager::EventWriter( int n ){
if ( n<0 || n > (int) fEventWriterCollection->size() )
return NULL;
AliFemtoEventWriterIterator iter = fEventWriterCollection->begin();
for (int i=0; i<n ;i++){
iter++;
}
return *iter;
}
int AliFemtoManager::ProcessEvent(){
AliFemtoEvent* currentHbtEvent = fEventReader->ReturnHbtEvent();
if (!currentHbtEvent){
#ifdef STHBRDEBUG
cout << "AliFemtoManager::ProcessEvent() - Reader::ReturnHbtEvent() has returned null pointer\n";
#endif
return fEventReader->Status();
}
AliFemtoEventWriterIterator tEventWriterIter;
for (tEventWriterIter=fEventWriterCollection->begin();tEventWriterIter!=fEventWriterCollection->end();tEventWriterIter++){
#ifdef STHBRDEBUG
cout << " *tEventWriterIter " << *tEventWriterIter << endl;
#endif
(*tEventWriterIter)->WriteHbtEvent(currentHbtEvent);
}
AliFemtoSimpleAnalysisIterator tAnalysisIter;
for (tAnalysisIter=fAnalysisCollection->begin();tAnalysisIter!=fAnalysisCollection->end();tAnalysisIter++){
(*tAnalysisIter)->ProcessEvent(currentHbtEvent);
}
if (currentHbtEvent) delete currentHbtEvent;
#ifdef STHBRDEBUG
cout << "AliFemtoManager::ProcessEvent() - return to caller ... " << endl;
#endif
return 0;
}