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 "AliGeomManager.h"
18 #include "AliOADBContainer.h"
20 ClassImp(AliEmcalSetupTask)
22 //________________________________________________________________________
23 AliEmcalSetupTask::AliEmcalSetupTask() :
26 fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
33 //________________________________________________________________________
34 AliEmcalSetupTask::AliEmcalSetupTask(const char *name) :
35 AliAnalysisTaskSE(name),
37 fOadbPath("$ALICE_ROOT/OADB/EMCAL"),
38 fGeoPath("$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 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
61 AliError("Manager zero, returning");
64 am->LoadBranch("AliESDRun.");
65 am->LoadBranch("AliESDHeader.");
67 Int_t runno = InputEvent()->GetRunNumber();
68 TString geoname("EMCAL_COMPLETE12SMV1");
72 geoname = "EMCAL_FIRSTYEARV1";
73 } else if ((runno>139517) && (runno<=170593)) {
75 geoname = "EMCAL_COMPLETEV1";
76 } else if ((runno>170593) && (runno<=193766)) {
80 AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance(geoname);
82 AliFatal(Form("Can not create geometry: %s",geoname.Data()));
86 AliCDBManager *man = 0;
87 if (fOcdbPath.Length()>0) {
88 AliInfo(Form("Setting up OCDB"));
89 man = AliCDBManager::Instance();
90 man->SetDefaultStorage(fOcdbPath);
94 TGeoManager *geo = AliGeomManager::GetGeometry();
96 TString fname(gSystem->ExpandPathName(Form("%s/geometry_%d.root", fGeoPath.Data(), year)));
97 if (gSystem->AccessPathName(fname)==0) {
98 AliInfo(Form("Loading geometry from %s", fname.Data()));
99 AliGeomManager::LoadGeometry(fname);
101 AliInfo(Form("Loading geometry from OCDB"));
102 AliGeomManager::LoadGeometry();
106 AliGeomManager::ApplyAlignObjsFromCDB("EMCAL");
107 AliInfo(Form("Locking geometry"));
111 if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
112 AliESDEvent *esdEv = dynamic_cast<AliESDEvent*>(InputEvent());
114 AliInfo("Constructing field map from ESD run info");
115 esdEv->InitMagneticField();
117 AliAODEvent *aodEv = dynamic_cast<AliAODEvent*>(InputEvent());
119 Double_t curSol = 30000*aodEv->GetMagneticField()/5.00668;
120 Double_t curDip = 6000 *aodEv->GetMuonMagFieldScale();
121 AliMagF *field = AliMagF::CreateFieldMap(curSol,curDip);
122 TGeoGlobalMagField::Instance()->SetField(field);
127 if (fOadbPath.Length()>0) {
128 AliOADBContainer emcalgeoCont(Form("emcal"));
129 emcalgeoCont.InitFromFile(Form("%s/EMCALlocal2master.root",fOadbPath.Data()),
130 Form("AliEMCALgeo"));
131 TObjArray *mobj=dynamic_cast<TObjArray*>(emcalgeoCont.GetObject(runno,"EmcalMatrices"));
133 for(Int_t mod=0; mod < (geom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){
134 //AliInfo(Form("Misalignment matrix %d", mod));
135 geom->SetMisalMatrix((TGeoHMatrix*) mobj->At(mod),mod);