3 // Task to setup emcal related global objects
7 #include <TClonesArray.h>
8 #include <TGeoManager.h>
9 #include <TGeoGlobalMagField.h>
10 #include "AliAnalysisManager.h"
11 #include "AliCDBManager.h"
12 #include "AliEMCALGeometry.h"
13 #include "AliESDEvent.h"
14 #include "AliEmcalSetupTask.h"
15 #include "AliGeomManager.h"
16 #include "AliOADBContainer.h"
18 ClassImp(AliEmcalSetupTask)
20 //________________________________________________________________________
21 AliEmcalSetupTask::AliEmcalSetupTask() :
24 fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
32 //________________________________________________________________________
33 AliEmcalSetupTask::AliEmcalSetupTask(const char *name) :
34 AliAnalysisTaskSE(name),
36 fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
42 fBranchNames = "ESD:AliESDHeader.,AliESDRun.";
45 //________________________________________________________________________
46 AliEmcalSetupTask::~AliEmcalSetupTask()
51 //________________________________________________________________________
52 void AliEmcalSetupTask::UserExec(Option_t *)
54 // Main loop, called for each event.
59 fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent());
61 AliError("Task works only on ESD events, returning");
65 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
67 AliError("Manager zero, returning");
70 am->LoadBranch("AliESDRun.");
71 am->LoadBranch("AliESDHeader.");
73 Int_t runno = fEsdEv->GetRunNumber();
74 TString geoname("EMCAL_FIRSTYEARV1");
78 geoname = "EMCAL_COMPLETEV1";
81 geoname = "EMCAL_COMPLETE12SM";
84 AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance(geoname);
86 AliFatal(Form("Can not create geometry: %s",geoname.Data()));
90 AliCDBManager *man = 0;
91 if (fOcdbPath.Length()>0) {
92 AliInfo(Form("Setting up OCDB"));
93 man = AliCDBManager::Instance();
94 man->SetDefaultStorage(fOcdbPath);
98 TGeoManager *geo = AliGeomManager::GetGeometry();
100 TString fname(gSystem->ExpandPathName(Form("%s/geometry_%d.root", fGeoPath.Data(), year)));
101 if (gSystem->AccessPathName(fname)==0) {
102 AliInfo(Form("Loading geometry from %s", fname.Data()));
103 AliGeomManager::LoadGeometry(fname);
105 AliInfo(Form("Loading geometry from OCDB"));
106 AliGeomManager::LoadGeometry();
110 AliGeomManager::ApplyAlignObjsFromCDB("EMCAL");
111 AliInfo(Form("Locking geometry"));
115 if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
116 AliInfo("Constructing field map from ESD run info");
117 fEsdEv->InitMagneticField();
120 if (fOadbPath.Length()>0) {
121 AliOADBContainer emcalgeoCont(Form("emcal"));
122 emcalgeoCont.InitFromFile(Form("%s/EMCALlocal2master.root",fOadbPath.Data()),
123 Form("AliEMCALgeo"));
124 TObjArray *mobj=dynamic_cast<TObjArray*>(emcalgeoCont.GetObject(runno,"EmcalMatrices"));
126 for(Int_t mod=0; mod < (geom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){
127 //AliInfo(Form("Misalignment matrix %d", mod));
128 geom->SetMisalMatrix((TGeoHMatrix*) mobj->At(mod),mod);