3 // Task to setup emcal related global objects.
7 #include "AliEmcalSetupTask.h"
8 #include <TClonesArray.h>
9 #include <TGeoGlobalMagField.h>
10 #include <TGeoManager.h>
11 #include "AliAODEvent.h"
12 #include "AliAnalysisManager.h"
13 #include "AliCDBManager.h"
14 #include "AliEMCALGeometry.h"
15 #include "AliESDEvent.h"
16 #include "AliGRPManager.h"
17 #include "AliGeomManager.h"
19 #include "AliOADBContainer.h"
21 ClassImp(AliEmcalSetupTask)
23 //________________________________________________________________________
24 AliEmcalSetupTask::AliEmcalSetupTask() :
27 fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
28 fGeoPath("$ALICE_ROOT/OADB/EMCAL"),
29 fObjs("GRP ITS TPC TRD EMCAL"),
35 //________________________________________________________________________
36 AliEmcalSetupTask::AliEmcalSetupTask(const char *name) :
37 AliAnalysisTaskSE(name),
39 fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
40 fGeoPath("$ALICE_ROOT/OADB/EMCAL"),
41 fObjs("GRP ITS TPC TRD EMCAL"),
45 fBranchNames = "ESD:AliESDHeader.,AliESDRun.";
48 //________________________________________________________________________
49 AliEmcalSetupTask::~AliEmcalSetupTask()
54 //________________________________________________________________________
55 void AliEmcalSetupTask::UserExec(Option_t *)
57 // Main loop, called for each event.
62 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
64 AliError("Manager zero, returning");
67 am->LoadBranch("AliESDRun.");
68 am->LoadBranch("AliESDHeader.");
70 Int_t runno = InputEvent()->GetRunNumber();
71 TString geoname("EMCAL_COMPLETE12SMV1");
75 geoname = "EMCAL_FIRSTYEARV1";
76 } else if ((runno>139517) && (runno<=170593)) {
78 geoname = "EMCAL_COMPLETEV1";
79 } else if ((runno>170593) && (runno<=193766)) {
83 AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance(geoname);
85 AliFatal(Form("Can not create geometry: %s",geoname.Data()));
89 AliCDBManager *man = 0;
90 man = AliCDBManager::Instance();
91 if (!man->IsDefaultStorageSet()) {
92 if (fOcdbPath.Length()>0) {
93 AliInfo(Form("Setting up OCDB"));
94 man->SetDefaultStorage(fOcdbPath);
100 if (man->GetRun()!=runno)
105 AliInfo(Form("Loading grp data from OCDB"));
106 AliGRPManager GRPManager;
107 GRPManager.ReadGRPEntry();
108 GRPManager.SetMagField();
109 AliInfo(Form("Loading geometry from OCDB"));
110 AliGeomManager::LoadGeometry();
112 AliGeomManager::ApplyAlignObjsFromCDB(fObjs);
115 TGeoManager *geo = AliGeomManager::GetGeometry();
117 TString fname(gSystem->ExpandPathName(Form("%s/geometry_%d.root", fGeoPath.Data(), year)));
118 if (gSystem->AccessPathName(fname)==0) {
119 AliInfo(Form("Loading geometry from %s", fname.Data()));
120 AliGeomManager::LoadGeometry(fname);
121 geo = AliGeomManager::GetGeometry();
125 AliInfo(Form("Locking geometry"));
129 if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
130 InputEvent()->InitMagneticField();
133 if (fOadbPath.Length()>0) {
134 AliOADBContainer emcalgeoCont(Form("emcal"));
135 emcalgeoCont.InitFromFile(Form("%s/EMCALlocal2master.root",fOadbPath.Data()),
136 Form("AliEMCALgeo"));
137 TObjArray *mobj=dynamic_cast<TObjArray*>(emcalgeoCont.GetObject(runno,"EmcalMatrices"));
139 for(Int_t mod=0; mod < (geom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){
140 //AliInfo(Form("Misalignment matrix %d", mod));
141 geom->SetMisalMatrix((TGeoHMatrix*) mobj->At(mod),mod);