]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/AliTaskCDBconnect.cxx
macro to add ITS-TPC matching components
[u/mrichter/AliRoot.git] / PWG1 / AliTaskCDBconnect.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 #include "AliTaskCDBconnect.h"
17
18 #include <TChain.h>
19 #include <TFile.h>
20 #include <TGeoGlobalMagField.h>
21  
22 #include "AliAnalysisManager.h"
23 #include "AliGeomManager.h"
24 #include "AliCDBManager.h"
25 #include "AliGRPManager.h"
26 #include "AliESDEvent.h"
27 #include "AliESDInputHandler.h"
28 #include "AliLog.h"
29
30 ClassImp(AliTaskCDBconnect)
31
32 //______________________________________________________________________________
33 AliTaskCDBconnect::AliTaskCDBconnect():
34            AliAnalysisTask(),
35            fRun(0),
36            fRunChanged(kFALSE),
37            fESDhandler(NULL),
38            fESD(NULL),
39            fGRPManager(NULL)
40 {
41 // Dummy constructor
42 }
43
44 //______________________________________________________________________________
45 AliTaskCDBconnect::AliTaskCDBconnect(const char* name):
46            AliAnalysisTask(name, "ESD analysis tender car"),
47            fRun(0),
48            fRunChanged(kFALSE),
49            fESDhandler(NULL),
50            fESD(NULL),
51            fGRPManager(NULL)
52 {
53 // Default constructor
54   AliCDBManager *cdb = AliCDBManager::Instance();
55   cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
56   cdb->SetRun(0);
57   DefineInput (0, TChain::Class());
58 //  DefineOutput(0,  AliESDEvent::Class());
59 }
60
61 //______________________________________________________________________________
62 AliTaskCDBconnect::~AliTaskCDBconnect()
63 {
64 // Destructor
65   if (fGRPManager) delete fGRPManager;
66 //  if (gGeoManager) delete gGeoManager;
67 }  
68
69 //______________________________________________________________________________
70 void AliTaskCDBconnect::LocalInit()
71 {
72 // Init CDB locally if run number is defined.
73   if (!fRun) {
74     Info("LocalInit","AliTaskCDBconnect::LocalInit Run number not defined yet");
75     return;
76   }      
77   // Create CDB manager
78   AliCDBManager *cdb = AliCDBManager::Instance();
79   // SetDefault storage. Specific storages must be set by TaskCDBconnectSupply::Init()
80 //  cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
81   cdb->SetDefaultStorage("raw://");
82   // Set run
83   cdb->SetRun(fRun);
84   // Initialize GRP manager only once
85   InitGRP();
86 }
87   
88 //______________________________________________________________________________
89 void AliTaskCDBconnect::ConnectInputData(Option_t* /*option*/)
90 {
91 // Connect the input data, create CDB manager.
92 }
93
94 //______________________________________________________________________________
95 void AliTaskCDBconnect::InitGRP()
96 {
97 // Initialize geometry and mag. field
98   if (!fGRPManager) {
99   // magnetic field
100     if (!TGeoGlobalMagField::Instance()->GetField()) {
101       printf("AliCDBconnect: #### Loading field map...\n");
102       fGRPManager = new AliGRPManager();
103       if(!fGRPManager->ReadGRPEntry()) { 
104         AliError("Cannot get GRP entry"); 
105       }
106       if( !fGRPManager->SetMagField() ) { 
107         AliError("Problem with magnetic field setup"); 
108       }
109     }
110
111     // geometry
112     printf("AliCDBconnect: #### Loading geometry...\n");
113     AliGeomManager::LoadGeometry();
114     if( !AliGeomManager::ApplyAlignObjsFromCDB("GRP ITS TPC") ) {
115       AliError("Problem with align objects"); 
116     }
117   }  
118 }
119
120 //______________________________________________________________________________
121 void AliTaskCDBconnect::CreateOutputObjects()
122 {
123 // Init CDB locally if run number is defined.
124   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
125   if (!mgr) AliFatal("No analysis manager");
126   fESDhandler = dynamic_cast<AliESDInputHandler *>(mgr->GetInputEventHandler());
127     
128   if (!fESDhandler) {
129      AliFatal("No ESD input event handler connected");
130      return;
131   }   
132   // Try to get event number before the first event is read
133   Int_t run = mgr->GetRunFromPath();
134   if (!run && fESD) run = fESD->GetRunNumber();
135   if (!run) {
136      AliWarning("AliTaskCDBconnect: Could not set run from path");
137      if (!fRun) return;
138   }
139   printf("AliCDBconnect: #### Setting run to #%d\n", run);
140   // Create CDB manager
141   AliCDBManager *cdb = AliCDBManager::Instance();
142   // SetDefault storage. Specific storages must be set by TaskCDBconnectSupply::Init()
143 //  cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
144   cdb->SetDefaultStorage("raw://");
145   if (run && (run != fRun)) {
146      fRunChanged = kTRUE;
147      fRun = run;
148   } else {
149      fRunChanged = kFALSE;
150   }   
151   // Set run
152   if (fRunChanged) cdb->SetRun(fRun);
153   // Initialize GRP manager only once
154   if (fRun) InitGRP();
155 }
156
157 //______________________________________________________________________________
158 Bool_t AliTaskCDBconnect::Notify()
159 {
160 // Init CDB locally if run number is defined.
161   CreateOutputObjects();
162   return kTRUE;
163 }
164
165 //______________________________________________________________________________
166 void AliTaskCDBconnect::Exec(Option_t* /*option*/)
167 {
168 //
169 // Execute all supplied analysis of one event. Notify run change via RunChanged().
170   fESD = fESDhandler->GetEvent();
171   // Intercept when the run number changed
172   if (fRun != fESD->GetRunNumber()) {
173     fRunChanged = kTRUE;
174     fRun = fESD->GetRunNumber();
175     Warning("Exec", "Run number changed in ESDEvent to %d", fRun);
176     AliCDBManager::Instance()->SetRun(fRun);
177   }
178 //  PostData(0, fESD);
179 }