#include "AliTaskConfigOCDB.h"
#include <TChain.h>
#include <TFile.h>
#include <TGeoGlobalMagField.h>
#include "TGeoManager.h"
#include <TRegexp.h>
#include "AliAnalysisManager.h"
#include "AliGeomManager.h"
#include "AliCDBManager.h"
#include "AliGRPManager.h"
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"
#include "AliLog.h"
ClassImp(AliTaskConfigOCDB)
AliTaskConfigOCDB::AliTaskConfigOCDB():
AliAnalysisTask(),
fRun(0),
fOCDBstorage(),
fRunChanged(kFALSE),
fESDhandler(NULL),
fESD(NULL),
fGRPManager(NULL)
{
}
AliTaskConfigOCDB::AliTaskConfigOCDB(const char* name, const char *storage, Int_t run)
:AliAnalysisTask(name, "configure OCDB field geom"),
fRun(run),
fOCDBstorage(storage),
fRunChanged(kFALSE),
fESDhandler(NULL),
fESD(NULL),
fGRPManager(NULL)
{
AliCDBManager *cdb = AliCDBManager::Instance();
cdb->SetDefaultStorage(storage);
cdb->SetRun(run);
DefineInput (0, TChain::Class());
}
AliTaskConfigOCDB::~AliTaskConfigOCDB()
{
delete fGRPManager;
}
void AliTaskConfigOCDB::LocalInit()
{
}
void AliTaskConfigOCDB::ConnectInputData(Option_t* )
{
}
void AliTaskConfigOCDB::InitGRP()
{
if (!fGRPManager) {
if (!TGeoGlobalMagField::Instance()->GetField()) {
printf("AliCDBconnect: #### Loading field map...\n");
fGRPManager = new AliGRPManager();
if(!fGRPManager->ReadGRPEntry()) {
AliError("Cannot get GRP entry");
}
if( !fGRPManager->SetMagField() ) {
AliError("Problem with magnetic field setup");
}
}
if (!gGeoManager) {
printf("AliCDBconnect: #### Loading geometry...\n");
AliGeomManager::LoadGeometry();
if( !AliGeomManager::ApplyAlignObjsFromCDB("GRP ITS TPC TRD") ) {
AliError("Problem with align objects");
}
}
}
}
void AliTaskConfigOCDB::CreateOutputObjects()
{
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (!mgr) AliFatal("No analysis manager");
fESDhandler = dynamic_cast<AliESDInputHandler *>(mgr->GetInputEventHandler());
if (!fESDhandler) {
AliFatal("No ESD input event handler connected");
return;
}
TTree* inputTree = mgr->GetTree();
if (!inputTree) { AliError("no input tree"); return; }
TFile* inputFile = inputTree->GetCurrentFile();
if (!inputFile) { AliError("no input file"); return; }
TString inputFileName(inputFile->GetName());
Int_t run = guessRunNumber(inputFileName);
mgr->SetRunFromPath(run);
if (!run && !fRun) {
AliError("AliTaskConfigOCDB: Run not set - no CDB connection");
return;
}
AliCDBManager *cdb = AliCDBManager::Instance();
if (!cdb->GetLock())
{
cdb->SetDefaultStorage(fOCDBstorage);
}
if (run && (run != fRun)) {
fRunChanged = kTRUE;
fRun = run;
} else {
fRunChanged = kFALSE;
}
if (fRunChanged || !fGRPManager) {
printf("AliCDBconnect: #### Setting run to: %d\n", fRun);
cdb->SetRun(fRun);
if (fRun) InitGRP();
}
}
Bool_t AliTaskConfigOCDB::Notify()
{
CreateOutputObjects();
return kTRUE;
}
void AliTaskConfigOCDB::Exec(Option_t* )
{
fESD = fESDhandler->GetEvent();
if (fRun != fESD->GetRunNumber()) {
fRunChanged = kTRUE;
fRun = fESD->GetRunNumber();
CreateOutputObjects();
}
}
void AliTaskConfigOCDB::Terminate(Option_t *)
{
}
Int_t AliTaskConfigOCDB::guessRunNumber(TString path)
{
TObjArray* a = path.Tokenize("/_");
TRegexp r("^000[0-9][0-9][0-9][0-9][0-9][0-9]$");
TString sub;
for (Int_t i=0; i<a->GetEntries();i++)
{
TObjString* subobj = (TObjString*)a->At(i);
TString subtmp = subobj->GetString();
if (subtmp.Contains(r))
{
sub=subtmp;
break;
}
}
Int_t runNumber=sub.Atoi();
AliInfo(Form("guessed run: %i\n",runNumber));
a->Delete();
delete a;
return runNumber;
}
AliTaskConfigOCDB.cxx:100 AliTaskConfigOCDB.cxx:101 AliTaskConfigOCDB.cxx:102 AliTaskConfigOCDB.cxx:103 AliTaskConfigOCDB.cxx:104 AliTaskConfigOCDB.cxx:105 AliTaskConfigOCDB.cxx:106 AliTaskConfigOCDB.cxx:107 AliTaskConfigOCDB.cxx:108 AliTaskConfigOCDB.cxx:109 AliTaskConfigOCDB.cxx:110 AliTaskConfigOCDB.cxx:111 AliTaskConfigOCDB.cxx:112 AliTaskConfigOCDB.cxx:113 AliTaskConfigOCDB.cxx:114 AliTaskConfigOCDB.cxx:115 AliTaskConfigOCDB.cxx:116 AliTaskConfigOCDB.cxx:117 AliTaskConfigOCDB.cxx:118 AliTaskConfigOCDB.cxx:119 AliTaskConfigOCDB.cxx:120 AliTaskConfigOCDB.cxx:121 AliTaskConfigOCDB.cxx:122 AliTaskConfigOCDB.cxx:123 AliTaskConfigOCDB.cxx:124 AliTaskConfigOCDB.cxx:125 AliTaskConfigOCDB.cxx:126 AliTaskConfigOCDB.cxx:127 AliTaskConfigOCDB.cxx:128 AliTaskConfigOCDB.cxx:129 AliTaskConfigOCDB.cxx:130 AliTaskConfigOCDB.cxx:131 AliTaskConfigOCDB.cxx:132 AliTaskConfigOCDB.cxx:133 AliTaskConfigOCDB.cxx:134 AliTaskConfigOCDB.cxx:135 AliTaskConfigOCDB.cxx:136 AliTaskConfigOCDB.cxx:137 AliTaskConfigOCDB.cxx:138 AliTaskConfigOCDB.cxx:139 AliTaskConfigOCDB.cxx:140 AliTaskConfigOCDB.cxx:141 AliTaskConfigOCDB.cxx:142 AliTaskConfigOCDB.cxx:143 AliTaskConfigOCDB.cxx:144 AliTaskConfigOCDB.cxx:145 AliTaskConfigOCDB.cxx:146 AliTaskConfigOCDB.cxx:147 AliTaskConfigOCDB.cxx:148 AliTaskConfigOCDB.cxx:149 AliTaskConfigOCDB.cxx:150 AliTaskConfigOCDB.cxx:151 AliTaskConfigOCDB.cxx:152 AliTaskConfigOCDB.cxx:153 AliTaskConfigOCDB.cxx:154 AliTaskConfigOCDB.cxx:155 AliTaskConfigOCDB.cxx:156 AliTaskConfigOCDB.cxx:157 AliTaskConfigOCDB.cxx:158 AliTaskConfigOCDB.cxx:159 AliTaskConfigOCDB.cxx:160 AliTaskConfigOCDB.cxx:161 AliTaskConfigOCDB.cxx:162 AliTaskConfigOCDB.cxx:163 AliTaskConfigOCDB.cxx:164 AliTaskConfigOCDB.cxx:165 AliTaskConfigOCDB.cxx:166 AliTaskConfigOCDB.cxx:167 AliTaskConfigOCDB.cxx:168 AliTaskConfigOCDB.cxx:169 AliTaskConfigOCDB.cxx:170 AliTaskConfigOCDB.cxx:171 AliTaskConfigOCDB.cxx:172 AliTaskConfigOCDB.cxx:173 AliTaskConfigOCDB.cxx:174 AliTaskConfigOCDB.cxx:175 AliTaskConfigOCDB.cxx:176 AliTaskConfigOCDB.cxx:177 AliTaskConfigOCDB.cxx:178 AliTaskConfigOCDB.cxx:179 AliTaskConfigOCDB.cxx:180 AliTaskConfigOCDB.cxx:181 AliTaskConfigOCDB.cxx:182 AliTaskConfigOCDB.cxx:183 AliTaskConfigOCDB.cxx:184 AliTaskConfigOCDB.cxx:185 AliTaskConfigOCDB.cxx:186 AliTaskConfigOCDB.cxx:187 AliTaskConfigOCDB.cxx:188 AliTaskConfigOCDB.cxx:189 AliTaskConfigOCDB.cxx:190 AliTaskConfigOCDB.cxx:191 AliTaskConfigOCDB.cxx:192 AliTaskConfigOCDB.cxx:193 AliTaskConfigOCDB.cxx:194 AliTaskConfigOCDB.cxx:195 AliTaskConfigOCDB.cxx:196 AliTaskConfigOCDB.cxx:197 AliTaskConfigOCDB.cxx:198 AliTaskConfigOCDB.cxx:199 AliTaskConfigOCDB.cxx:200 AliTaskConfigOCDB.cxx:201 AliTaskConfigOCDB.cxx:202 AliTaskConfigOCDB.cxx:203 AliTaskConfigOCDB.cxx:204 AliTaskConfigOCDB.cxx:205 AliTaskConfigOCDB.cxx:206 AliTaskConfigOCDB.cxx:207 AliTaskConfigOCDB.cxx:208 AliTaskConfigOCDB.cxx:209 AliTaskConfigOCDB.cxx:210 AliTaskConfigOCDB.cxx:211 AliTaskConfigOCDB.cxx:212