]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/EMCAL/AliEmcalSetupTask.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliEmcalSetupTask.cxx
1 // $Id$
2 //
3 // Task to setup emcal related global objects.
4 //
5 // Author: C.Loizides
6
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"
18 #include "AliMagF.h"
19 #include "AliOADBContainer.h"
20
21 ClassImp(AliEmcalSetupTask)
22
23 //________________________________________________________________________
24 AliEmcalSetupTask::AliEmcalSetupTask() : 
25   AliAnalysisTaskSE(),
26   fOcdbPath(),
27   fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
28   fGeoPath("$ALICE_ROOT/OADB/EMCAL"),
29   fObjs("GRP ITS TPC TRD EMCAL"),
30   fIsInit(kFALSE)
31 {
32   // Constructor.
33 }
34
35 //________________________________________________________________________
36 AliEmcalSetupTask::AliEmcalSetupTask(const char *name) : 
37   AliAnalysisTaskSE(name),
38   fOcdbPath(),
39   fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
40   fGeoPath("$ALICE_ROOT/OADB/EMCAL"),
41   fObjs("GRP ITS TPC TRD EMCAL"),
42   fIsInit(kFALSE)
43 {
44   // Constructor.
45   fBranchNames = "ESD:AliESDHeader.,AliESDRun.";
46 }
47
48 //________________________________________________________________________
49 AliEmcalSetupTask::~AliEmcalSetupTask()
50 {
51   // Destructor.
52 }
53
54 //________________________________________________________________________
55 void AliEmcalSetupTask::UserExec(Option_t *) 
56 {
57   // Main loop, called for each event.
58
59   if (fIsInit)
60     return;
61
62   AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
63   if (!am) {
64     AliError("Manager zero, returning");
65     return;
66   }
67   am->LoadBranch("AliESDRun.");
68   am->LoadBranch("AliESDHeader.");
69
70   Int_t runno = InputEvent()->GetRunNumber();
71   TString geoname("EMCAL_COMPLETE12SMV1");
72   Int_t year = 2013;
73   if (runno<=139517) {
74     year = 2010;
75     geoname = "EMCAL_FIRSTYEARV1";
76   } else if ((runno>139517) && (runno<=170593)) {
77     year = 2011;
78     geoname = "EMCAL_COMPLETEV1";
79   } else if ((runno>170593) && (runno<=193766)) {
80     year = 2012;
81   }
82
83   AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance(geoname);
84   if (!geom) {
85     AliFatal(Form("Can not create geometry: %s",geoname.Data()));
86     return;
87   }
88
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);
95       man->SetRun(runno);
96     } else {
97       man = 0;
98     }
99   } else {
100     if (man->GetRun()!=runno)
101       man->SetRun(runno);
102   }
103   
104   if (man) {
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();
111     if (!fObjs.IsNull())
112       AliGeomManager::ApplyAlignObjsFromCDB(fObjs);
113   }
114
115   TGeoManager *geo = AliGeomManager::GetGeometry();
116   if (!geo) {
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();
122     }
123   }
124   if (geo) {
125     AliInfo(Form("Locking geometry"));
126     geo->LockGeometry();
127   }
128
129   if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
130     InputEvent()->InitMagneticField();
131   }
132
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"));
138     if (mobj) {
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);
142       } 
143     }
144   }
145
146   fIsInit = kTRUE;
147 }