]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/UserTasks/EmcalTasks/AliEmcalSetupTask.cxx
added geo path
[u/mrichter/AliRoot.git] / PWG4 / UserTasks / EmcalTasks / AliEmcalSetupTask.cxx
1 // $Id$
2 //
3 // Task to setup emcal related global objects
4 //
5 //
6
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"
17
18 ClassImp(AliEmcalSetupTask)
19
20 //________________________________________________________________________
21 AliEmcalSetupTask::AliEmcalSetupTask() : 
22   AliAnalysisTaskSE(),
23   fOcdbPath(),
24   fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
25   fGeoPath("."),
26   fEsdEv(0),
27   fIsInit(kFALSE)
28 {
29   // Constructor.
30 }
31
32 //________________________________________________________________________
33 AliEmcalSetupTask::AliEmcalSetupTask(const char *name) : 
34   AliAnalysisTaskSE(name),
35   fOcdbPath(),
36   fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
37   fGeoPath("."),
38   fEsdEv(0),
39   fIsInit(kFALSE)
40 {
41   // Constructor.
42   fBranchNames = "ESD:AliESDHeader.,AliESDRun.";
43 }
44
45 //________________________________________________________________________
46 AliEmcalSetupTask::~AliEmcalSetupTask()
47 {
48   // Destructor.
49 }
50
51 //________________________________________________________________________
52 void AliEmcalSetupTask::UserExec(Option_t *) 
53 {
54   // Main loop, called for each event.
55
56   if (fIsInit)
57     return;
58
59   fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent());
60   if (!fEsdEv) {
61     AliError("Task works only on ESD events, returning");
62     return;
63   }
64
65   AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
66   if (!am) {
67     AliError("Manager zero, returning");
68     return;
69   }
70   am->LoadBranch("AliESDRun.");
71   am->LoadBranch("AliESDHeader.");
72
73   Int_t runno = fEsdEv->GetRunNumber();
74   Bool_t is2010 = kTRUE;
75   if (runno>139517) {
76     is2010 = kFALSE;
77   }
78
79   TString geoname("EMCAL_FIRSTYEARV1");
80   if (!is2010)
81     geoname = "EMCAL_COMPLETEV1";
82   AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance(geoname);
83   if (!geom) {
84     AliFatal(Form("Can not create geometry: %s",geoname.Data()));
85     return;
86   }
87
88   AliCDBManager *man = 0;
89   if (fOcdbPath.Length()>0) {
90     AliInfo(Form("Setting up OCDB"));
91     man = AliCDBManager::Instance();
92     man->SetDefaultStorage(fOcdbPath);
93     man->SetRun(runno);
94   }
95
96   TGeoManager *geo = AliGeomManager::GetGeometry();
97   if (!geo) {
98     TString fname(Form("%s/geometry_2010.root", fGeoPath.Data()));
99     if (!is2010)
100       fname = Form("%s/geometry_2011.root", fGeoPath.Data());
101     if (gSystem->AccessPathName(fname)!=0)
102       fname = Form("%s/geometry.root", fGeoPath.Data());
103     if (gSystem->AccessPathName(fname)==0) {
104       AliInfo(Form("Loading geometry from %s", fname.Data()));
105       AliGeomManager::LoadGeometry(fname);
106     } else if (man) {
107       AliInfo(Form("Loading geometry from OCDB"));
108       AliGeomManager::LoadGeometry();
109     }
110   }
111   if (geo) {
112     AliGeomManager::ApplyAlignObjsFromCDB("EMCAL");
113     AliInfo(Form("Locking geometry"));
114     geo->LockGeometry();
115   }
116
117   if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
118     AliInfo("Constructing field map from ESD run info");
119     fEsdEv->InitMagneticField();
120   }
121
122   if (fOadbPath.Length()>0) {
123     AliOADBContainer emcalgeoCont(Form("emcal"));
124     emcalgeoCont.InitFromFile(Form("%s/EMCALlocal2master.root",fOadbPath.Data()),
125                               Form("AliEMCALgeo"));
126     TObjArray *mobj=dynamic_cast<TObjArray*>(emcalgeoCont.GetObject(runno,"EmcalMatrices"));
127     if (mobj) {
128       for(Int_t mod=0; mod < (geom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){
129         //AliInfo(Form("Misalignment matrix %d", mod));
130         geom->SetMisalMatrix((TGeoHMatrix*) mobj->At(mod),mod);
131       } 
132     }
133   }
134
135   fIsInit = kTRUE;
136 }