#include "AliEmcalSetupTask.h"
#include <TClonesArray.h>
#include <TGeoGlobalMagField.h>
#include <TGeoManager.h>
#include <TRandom.h>
#include "AliAODEvent.h"
#include "AliAnalysisManager.h"
#include "AliCDBManager.h"
#include "AliEMCALGeometry.h"
#include "AliESDEvent.h"
#include "AliGRPManager.h"
#include "AliGeomManager.h"
#include "AliMagF.h"
#include "AliOADBContainer.h"
#include "AliTender.h"
ClassImp(AliEmcalSetupTask)
AliEmcalSetupTask::AliEmcalSetupTask() :
AliAnalysisTaskSE(),
fOcdbPath("uselocal"),
fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
fGeoPath("$ALICE_ROOT/OADB/EMCAL"),
fObjs("GRP ITS TPC TRD EMCAL"),
fNoOCDB(kFALSE),
fIsInit(kFALSE),
fLocalOcdb(),
fLocalOcdbStor()
{
}
AliEmcalSetupTask::AliEmcalSetupTask(const char *name) :
AliAnalysisTaskSE(name),
fOcdbPath("uselocal"),
fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
fGeoPath("$ALICE_ROOT/OADB/EMCAL"),
fObjs("GRP ITS TPC TRD EMCAL"),
fNoOCDB(kFALSE),
fIsInit(kFALSE),
fLocalOcdb(),
fLocalOcdbStor()
{
fBranchNames = "ESD:AliESDHeader.,AliESDRun.";
}
AliEmcalSetupTask::~AliEmcalSetupTask()
{
}
void AliEmcalSetupTask::ConnectInputData(Option_t *option)
{
AliAnalysisTaskSE::ConnectInputData(option);
if (fOcdbPath.Length()==0)
return;
AliCDBManager *man = AliCDBManager::Instance();
if (man->IsDefaultStorageSet())
return;
if (fIsInit)
return;
AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
if (!am)
return;
TObjArray *tasks = am->GetTasks();
if (!tasks)
return;
AliTender *tender = 0;
for (Int_t i=0; i<tasks->GetEntries(); ++i) {
tender = dynamic_cast<AliTender*>(tasks->At(i));
if (tender)
break;
}
if (!tender)
return;
if (fOcdbPath != "uselocal") {
tender->SetDefaultCDBStorage(fOcdbPath);
return;
}
Int_t runno = AliAnalysisManager::GetAnalysisManager()->GetRunFromPath();
if (runno<=0) {
AliWarning(Form("Disabling tender, ignore possible message from tender below"));
tender->SetDefaultCDBStorage("donotuse");
return;
}
AliWarning(Form("Intercepting tender for run %d, ignore possible message from tender below", runno));
Setup(runno);
tender->SetDefaultCDBStorage(fLocalOcdbStor);
}
void AliEmcalSetupTask::UserExec(Option_t *)
{
if (fIsInit)
return;
AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
if (!am) {
AliError("Manager zero, returning");
return;
}
am->LoadBranch("AliESDRun.");
am->LoadBranch("AliESDHeader.");
Int_t runno = InputEvent()->GetRunNumber();
Setup(runno);
}
void AliEmcalSetupTask::Setup(Int_t runno)
{
TString geoname("EMCAL_COMPLETE12SMV1");
Int_t year = 2013;
if (runno>0 && runno<=139517) {
year = 2010;
geoname = "EMCAL_FIRSTYEARV1";
} else if ((runno>139517) && (runno<=170593)) {
year = 2011;
geoname = "EMCAL_COMPLETEV1";
} else if ((runno>170593) && (runno<=193766)) {
year = 2012;
geoname = "EMCAL_COMPLETE12SMV1";
} else if ((runno>193766) && (runno <= 199161)) {
geoname = "EMCAL_COMPLETE12SMV1";
year = 2013;
} else if (runno>199161) {
geoname = "EMCAL_COMPLETE12SMV1_DCAL_8SM";
year = 2015;
}
AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance(geoname);
if (!geom) {
AliFatal(Form("Can not create geometry: %s",geoname.Data()));
return;
}
if (runno<0)
return;
AliCDBManager *man = 0;
if (!fNoOCDB) {
man = AliCDBManager::Instance();
if (!man)
AliFatal(Form("Did not get pointer to CDB manager"));
if (man->IsDefaultStorageSet()) {
AliInfo(Form("Default OCDB storage already set"));
} else {
if (fOcdbPath.Length()==0) {
man = 0;
} else if (fOcdbPath != "uselocal") {
AliInfo(Form("Setting up OCDB to point to %s",fOcdbPath.Data()));
man->SetDefaultStorage(fOcdbPath);
} else {
TString tmpdir=gSystem->WorkingDirectory();
if (gSystem->AccessPathName(tmpdir))
tmpdir = "/tmp";
tmpdir+="/";
tmpdir+=gSystem->GetUid();
tmpdir+="-";
TDatime t;
tmpdir+=t.Get();
tmpdir+="-";
Int_t counter = 0;
fLocalOcdb = tmpdir;
fLocalOcdb += Form("%d%d%d",gRandom->Integer(999999999),gRandom->Integer(999999999),gRandom->Integer(999999999));
while (!gSystem->AccessPathName(fLocalOcdb)) {
fLocalOcdb = tmpdir;
fLocalOcdb += Form("%d%d%d",gRandom->Integer(999999999),gRandom->Integer(999999999),gRandom->Integer(999999999));
counter++;
if (counter>100) {
AliFatal(Form("Could not create local directory for OCDB at %s",tmpdir.Data()));
}
}
gSystem->MakeDirectory(fLocalOcdb);
TString filename(Form("$ALICE_ROOT/PWG/EMCAL/data/%d.dat",year));
TString cmd(Form("cd %s && tar -xf %s",fLocalOcdb.Data(),filename.Data()));
Int_t ret = gSystem->Exec(cmd);
if (ret==0) {
TString locdb("local://");
locdb+=fLocalOcdb;
locdb+="/";
locdb+=year;
AliInfo(Form("Setting up local OCDB at %s",locdb.Data()));
man->SetDefaultStorage(locdb);
fLocalOcdbStor = locdb;
} else {
AliFatal(Form("Could not set up local OCDB at %s",fLocalOcdb.Data()));
}
}
}
}
if (man) {
if (man->GetRun()!=runno)
man->SetRun(runno);
AliInfo(Form("Loading grp data from OCDB for run %d", runno));
AliGRPManager GRPManager;
GRPManager.ReadGRPEntry();
GRPManager.SetMagField();
AliInfo(Form("Loading geometry from OCDB"));
AliGeomManager::LoadGeometry();
if (!fObjs.IsNull())
AliGeomManager::ApplyAlignObjsFromCDB(fObjs);
}
TGeoManager *geo = AliGeomManager::GetGeometry();
if (!geo && fGeoPath.Length()>0) {
TString fname(gSystem->ExpandPathName(Form("%s/geometry_%d.root", fGeoPath.Data(), year)));
if (gSystem->AccessPathName(fname)==0) {
AliInfo(Form("Loading geometry from file %s (should be avoided!)", fname.Data()));
AliGeomManager::LoadGeometry(fname);
geo = AliGeomManager::GetGeometry();
}
}
if (geo) {
AliInfo(Form("Locking geometry"));
geo->LockGeometry();
}
if (!TGeoGlobalMagField::Instance()->GetField()) {
InputEvent()->InitMagneticField();
}
if (fOadbPath.Length()>0) {
AliOADBContainer emcalgeoCont(Form("emcal"));
emcalgeoCont.InitFromFile(Form("%s/EMCALlocal2master.root",fOadbPath.Data()),
Form("AliEMCALgeo"));
TObjArray *mobj=dynamic_cast<TObjArray*>(emcalgeoCont.GetObject(runno,"EmcalMatrices"));
if (mobj) {
for(Int_t mod=0; mod < (geom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){
geom->SetMisalMatrix((TGeoHMatrix*) mobj->At(mod),mod);
}
}
}
fIsInit = kTRUE;
}
void AliEmcalSetupTask::Terminate(Option_t *)
{
if (fLocalOcdb.Length()>0) {
TString cmd(Form("rm -rf %s", fLocalOcdb.Data()));
gSystem->Exec(cmd);
}
}
AliEmcalSetupTask.cxx:100 AliEmcalSetupTask.cxx:101 AliEmcalSetupTask.cxx:102 AliEmcalSetupTask.cxx:103 AliEmcalSetupTask.cxx:104 AliEmcalSetupTask.cxx:105 AliEmcalSetupTask.cxx:106 AliEmcalSetupTask.cxx:107 AliEmcalSetupTask.cxx:108 AliEmcalSetupTask.cxx:109 AliEmcalSetupTask.cxx:110 AliEmcalSetupTask.cxx:111 AliEmcalSetupTask.cxx:112 AliEmcalSetupTask.cxx:113 AliEmcalSetupTask.cxx:114 AliEmcalSetupTask.cxx:115 AliEmcalSetupTask.cxx:116 AliEmcalSetupTask.cxx:117 AliEmcalSetupTask.cxx:118 AliEmcalSetupTask.cxx:119 AliEmcalSetupTask.cxx:120 AliEmcalSetupTask.cxx:121 AliEmcalSetupTask.cxx:122 AliEmcalSetupTask.cxx:123 AliEmcalSetupTask.cxx:124 AliEmcalSetupTask.cxx:125 AliEmcalSetupTask.cxx:126 AliEmcalSetupTask.cxx:127 AliEmcalSetupTask.cxx:128 AliEmcalSetupTask.cxx:129 AliEmcalSetupTask.cxx:130 AliEmcalSetupTask.cxx:131 AliEmcalSetupTask.cxx:132 AliEmcalSetupTask.cxx:133 AliEmcalSetupTask.cxx:134 AliEmcalSetupTask.cxx:135 AliEmcalSetupTask.cxx:136 AliEmcalSetupTask.cxx:137 AliEmcalSetupTask.cxx:138 AliEmcalSetupTask.cxx:139 AliEmcalSetupTask.cxx:140 AliEmcalSetupTask.cxx:141 AliEmcalSetupTask.cxx:142 AliEmcalSetupTask.cxx:143 AliEmcalSetupTask.cxx:144 AliEmcalSetupTask.cxx:145 AliEmcalSetupTask.cxx:146 AliEmcalSetupTask.cxx:147 AliEmcalSetupTask.cxx:148 AliEmcalSetupTask.cxx:149 AliEmcalSetupTask.cxx:150 AliEmcalSetupTask.cxx:151 AliEmcalSetupTask.cxx:152 AliEmcalSetupTask.cxx:153 AliEmcalSetupTask.cxx:154 AliEmcalSetupTask.cxx:155 AliEmcalSetupTask.cxx:156 AliEmcalSetupTask.cxx:157 AliEmcalSetupTask.cxx:158 AliEmcalSetupTask.cxx:159 AliEmcalSetupTask.cxx:160 AliEmcalSetupTask.cxx:161 AliEmcalSetupTask.cxx:162 AliEmcalSetupTask.cxx:163 AliEmcalSetupTask.cxx:164 AliEmcalSetupTask.cxx:165 AliEmcalSetupTask.cxx:166 AliEmcalSetupTask.cxx:167 AliEmcalSetupTask.cxx:168 AliEmcalSetupTask.cxx:169 AliEmcalSetupTask.cxx:170 AliEmcalSetupTask.cxx:171 AliEmcalSetupTask.cxx:172 AliEmcalSetupTask.cxx:173 AliEmcalSetupTask.cxx:174 AliEmcalSetupTask.cxx:175 AliEmcalSetupTask.cxx:176 AliEmcalSetupTask.cxx:177 AliEmcalSetupTask.cxx:178 AliEmcalSetupTask.cxx:179 AliEmcalSetupTask.cxx:180 AliEmcalSetupTask.cxx:181 AliEmcalSetupTask.cxx:182 AliEmcalSetupTask.cxx:183 AliEmcalSetupTask.cxx:184 AliEmcalSetupTask.cxx:185 AliEmcalSetupTask.cxx:186 AliEmcalSetupTask.cxx:187 AliEmcalSetupTask.cxx:188 AliEmcalSetupTask.cxx:189 AliEmcalSetupTask.cxx:190 AliEmcalSetupTask.cxx:191 AliEmcalSetupTask.cxx:192 AliEmcalSetupTask.cxx:193 AliEmcalSetupTask.cxx:194 AliEmcalSetupTask.cxx:195 AliEmcalSetupTask.cxx:196 AliEmcalSetupTask.cxx:197 AliEmcalSetupTask.cxx:198 AliEmcalSetupTask.cxx:199 AliEmcalSetupTask.cxx:200 AliEmcalSetupTask.cxx:201 AliEmcalSetupTask.cxx:202 AliEmcalSetupTask.cxx:203 AliEmcalSetupTask.cxx:204 AliEmcalSetupTask.cxx:205 AliEmcalSetupTask.cxx:206 AliEmcalSetupTask.cxx:207 AliEmcalSetupTask.cxx:208 AliEmcalSetupTask.cxx:209 AliEmcalSetupTask.cxx:210 AliEmcalSetupTask.cxx:211 AliEmcalSetupTask.cxx:212 AliEmcalSetupTask.cxx:213 AliEmcalSetupTask.cxx:214 AliEmcalSetupTask.cxx:215 AliEmcalSetupTask.cxx:216 AliEmcalSetupTask.cxx:217 AliEmcalSetupTask.cxx:218 AliEmcalSetupTask.cxx:219 AliEmcalSetupTask.cxx:220 AliEmcalSetupTask.cxx:221 AliEmcalSetupTask.cxx:222 AliEmcalSetupTask.cxx:223 AliEmcalSetupTask.cxx:224 AliEmcalSetupTask.cxx:225 AliEmcalSetupTask.cxx:226 AliEmcalSetupTask.cxx:227 AliEmcalSetupTask.cxx:228 AliEmcalSetupTask.cxx:229 AliEmcalSetupTask.cxx:230 AliEmcalSetupTask.cxx:231 AliEmcalSetupTask.cxx:232 AliEmcalSetupTask.cxx:233 AliEmcalSetupTask.cxx:234 AliEmcalSetupTask.cxx:235 AliEmcalSetupTask.cxx:236 AliEmcalSetupTask.cxx:237 AliEmcalSetupTask.cxx:238 AliEmcalSetupTask.cxx:239 AliEmcalSetupTask.cxx:240 AliEmcalSetupTask.cxx:241 AliEmcalSetupTask.cxx:242 AliEmcalSetupTask.cxx:243 AliEmcalSetupTask.cxx:244 AliEmcalSetupTask.cxx:245 AliEmcalSetupTask.cxx:246 AliEmcalSetupTask.cxx:247 AliEmcalSetupTask.cxx:248 AliEmcalSetupTask.cxx:249 AliEmcalSetupTask.cxx:250 AliEmcalSetupTask.cxx:251 AliEmcalSetupTask.cxx:252 AliEmcalSetupTask.cxx:253 AliEmcalSetupTask.cxx:254 AliEmcalSetupTask.cxx:255 AliEmcalSetupTask.cxx:256 AliEmcalSetupTask.cxx:257 AliEmcalSetupTask.cxx:258 AliEmcalSetupTask.cxx:259 AliEmcalSetupTask.cxx:260 AliEmcalSetupTask.cxx:261 AliEmcalSetupTask.cxx:262 AliEmcalSetupTask.cxx:263 AliEmcalSetupTask.cxx:264 AliEmcalSetupTask.cxx:265 AliEmcalSetupTask.cxx:266 AliEmcalSetupTask.cxx:267 AliEmcalSetupTask.cxx:268 AliEmcalSetupTask.cxx:269 AliEmcalSetupTask.cxx:270 AliEmcalSetupTask.cxx:271 AliEmcalSetupTask.cxx:272 AliEmcalSetupTask.cxx:273 AliEmcalSetupTask.cxx:274 AliEmcalSetupTask.cxx:275 AliEmcalSetupTask.cxx:276 AliEmcalSetupTask.cxx:277 AliEmcalSetupTask.cxx:278 AliEmcalSetupTask.cxx:279 AliEmcalSetupTask.cxx:280 AliEmcalSetupTask.cxx:281 AliEmcalSetupTask.cxx:282 AliEmcalSetupTask.cxx:283 AliEmcalSetupTask.cxx:284 AliEmcalSetupTask.cxx:285