#include <TChain.h>
#include <TFile.h>
#include "AliTender.h"
#include "AliTenderSupply.h"
#include "AliAnalysisManager.h"
#include "AliCDBManager.h"
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"
#include "AliLog.h"
ClassImp(AliTender)
AliTender::AliTender():
AliAnalysisTaskSE(),
fRun(0),
fRunChanged(kFALSE),
fCDBkey(0),
fDefaultStorage(),
fCDB(NULL),
fESDhandler(NULL),
fESD(NULL),
fSupplies(NULL),
fCDBSettings(NULL)
{
}
AliTender::AliTender(const char* name):
AliAnalysisTaskSE(name),
fRun(0),
fRunChanged(kFALSE),
fCDBkey(0),
fDefaultStorage(),
fCDB(NULL),
fESDhandler(NULL),
fESD(NULL),
fSupplies(NULL),
fCDBSettings(NULL)
{
DefineOutput(1, AliESDEvent::Class());
}
AliTender::~AliTender()
{
if (fSupplies) {
fSupplies->Delete();
delete fSupplies;
}
}
void AliTender::AddSupply(AliTenderSupply *supply)
{
if (!fSupplies) fSupplies = new TObjArray();
if (fSupplies->FindObject(supply)) {
Error("AddSupply", "Tender supply %s already connected.", supply->GetName());
return;
}
fSupplies->Add(supply);
supply->SetTender(this);
}
void AliTender::ConnectInputData(Option_t* option)
{
if (fDebug > 1) Printf("AliTender::ConnectInputData()\n");
if (!fESDhandler) {
AliAnalysisTaskSE::ConnectInputData(option);
fESDhandler = dynamic_cast<AliESDInputHandler *>(fInputHandler);
}
if (fESDhandler) {
fESD = fESDhandler->GetEvent();
} else {
AliFatal("No ESD input event handler connected") ;
}
if (!fDefaultStorage.Length()) AliFatal("Default CDB storage not set.");
fCDB = AliCDBManager::Instance();
fCDB->SetDefaultStorage(fDefaultStorage);
Int_t run = AliAnalysisManager::GetAnalysisManager()->GetRunFromPath();
fCDBkey = fCDB->SetLock(kFALSE, fCDBkey);
if (!run) {
AliWarning("AliTaskCDBconnect: Could not set run from path");
} else {
fRun = run;
fRunChanged = kTRUE;
printf("AliTender: #### Setting run to: %d\n", fRun);
fCDB->SetRun(fRun);
}
TIter next(fSupplies);
AliTenderSupply *supply;
while ((supply=(AliTenderSupply*)next())) supply->Init();
fCDBkey = fCDB->SetLock(kTRUE, fCDBkey);
}
void AliTender::UserCreateOutputObjects()
{
if (fDebug > 1) Printf("AliTender::CreateOutputObjects()\n");
fESDhandler = dynamic_cast<AliESDInputHandler *>(fInputHandler);
if (fESDhandler && TObject::TestBit(kCheckEventSelection)) {
fESDhandler->SetUserCallSelectionMask(kTRUE);
Info("UserCreateOutputObjects","The TENDER will check the event selection. Make sure you add the tender as FIRST wagon!");
}
}
void AliTender::UserExec(Option_t* option)
{
if (fDebug > 1) {
Long64_t entry = fESDhandler->GetReadEntry();
Printf("AliTender::Exec() %s ==> processing event %lld\n", fESDhandler->GetTree()->GetCurrentFile()->GetName(),entry);
}
fESD = fESDhandler->GetEvent();
fCDBkey = fCDB->SetLock(kFALSE, fCDBkey);
if (fRun != fESD->GetRunNumber()) {
fRunChanged = kTRUE;
fRun = fESD->GetRunNumber();
fCDB->SetRun(fRun);
}
TIter next(fSupplies);
AliTenderSupply *supply;
while ((supply=(AliTenderSupply*)next())) supply->ProcessEvent();
fRunChanged = kFALSE;
if (TObject::TestBit(kCheckEventSelection)) fESDhandler->CheckSelectionMask();
fCDBkey = fCDB->SetLock(kTRUE, fCDBkey);
TString opt = option;
if (!opt.Contains("NoPost")) PostData(1, fESD);
}
void AliTender::SetDefaultCDBStorage(const char *dbString)
{
fDefaultStorage = dbString;
}