]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/AliTaskCDBconnect.cxx
The task now initializes CDB also in Terminate if AliAnalysisManager::SetRunFromPath...
[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 #include "TGeoManager.h"
22  
23 #include "AliAnalysisManager.h"
24 #include "AliGeomManager.h"
25 #include "AliCDBManager.h"
26 #include "AliGRPManager.h"
27 #include "AliESDEvent.h"
28 #include "AliESDInputHandler.h"
29 #include "AliLog.h"
30
31 ClassImp(AliTaskCDBconnect)
32
33 //______________________________________________________________________________
34 AliTaskCDBconnect::AliTaskCDBconnect():
35            AliAnalysisTask(),
36            fRun(0),
37            fRunChanged(kFALSE),
38            fESDhandler(NULL),
39            fESD(NULL),
40            fGRPManager(NULL)
41 {
42 // Dummy constructor
43 }
44
45 //______________________________________________________________________________
46 AliTaskCDBconnect::AliTaskCDBconnect(const char* name):
47            AliAnalysisTask(name, "ESD analysis tender car"),
48            fRun(0),
49            fRunChanged(kFALSE),
50            fESDhandler(NULL),
51            fESD(NULL),
52            fGRPManager(NULL)
53 {
54 // Default constructor
55   AliCDBManager *cdb = AliCDBManager::Instance();
56   cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
57   cdb->SetRun(0);
58   DefineInput (0, TChain::Class());
59 //  DefineOutput(0,  AliESDEvent::Class());
60 }
61
62 //______________________________________________________________________________
63 AliTaskCDBconnect::~AliTaskCDBconnect()
64 {
65 // Destructor
66   if (fGRPManager) delete fGRPManager;
67 //  if (gGeoManager) delete gGeoManager;
68 }  
69
70 //______________________________________________________________________________
71 void AliTaskCDBconnect::LocalInit()
72 {
73 // Init CDB locally if run number is defined.
74 }
75   
76 //______________________________________________________________________________
77 void AliTaskCDBconnect::ConnectInputData(Option_t* /*option*/)
78 {
79 // Connect the input data, create CDB manager.
80 }
81
82 //______________________________________________________________________________
83 void AliTaskCDBconnect::InitGRP()
84 {
85 // Initialize geometry and mag. field
86   if (!fGRPManager) {
87   // magnetic field
88     if (!TGeoGlobalMagField::Instance()->GetField()) {
89       printf("AliCDBconnect: #### Loading field map...\n");
90       fGRPManager = new AliGRPManager();
91       if(!fGRPManager->ReadGRPEntry()) { 
92         AliError("Cannot get GRP entry"); 
93       }
94       if( !fGRPManager->SetMagField() ) { 
95         AliError("Problem with magnetic field setup"); 
96       }
97     }
98
99     // geometry
100     if (!gGeoManager) {
101       printf("AliCDBconnect: #### Loading geometry...\n");
102       AliGeomManager::LoadGeometry();
103       if( !AliGeomManager::ApplyAlignObjsFromCDB("GRP ITS TPC") ) {
104         AliError("Problem with align objects"); 
105       }
106     }  
107   }  
108 }
109
110 //______________________________________________________________________________
111 void AliTaskCDBconnect::CreateOutputObjects()
112 {
113 // Init CDB locally if run number is defined.
114   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
115   if (!mgr) AliFatal("No analysis manager");
116   fESDhandler = dynamic_cast<AliESDInputHandler *>(mgr->GetInputEventHandler());
117     
118   if (!fESDhandler) {
119      AliFatal("No ESD input event handler connected");
120      return;
121   }   
122   // Try to get event number before the first event is read (this has precedence
123   // over existing fRun)
124   Int_t run = mgr->GetRunFromPath();
125   if (!run) {
126      AliWarning("AliTaskCDBconnect: Could not set run from path");
127      if (!fRun) {
128         AliError("AliTaskCDBconnect: Run not set - no CDB connection");
129         return;
130      }   
131   }
132   // Create CDB manager
133   AliCDBManager *cdb = AliCDBManager::Instance();
134   // If CDB is already locked, return
135   if (cdb->GetLock()) return;
136   // SetDefault storage. Specific storages must be set by TaskCDBconnectSupply::Init()
137   //  cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
138   if (cdb->IsDefaultStorageSet()) {
139      AliError("AliTaskCDBconnect: CDB default storage already set!");
140   } else {
141      cdb->SetDefaultStorage("raw://");
142   }   
143   if (run && (run != fRun)) {
144      fRunChanged = kTRUE;
145      fRun = run;
146   } else {
147      fRunChanged = kFALSE;
148   }
149   // Set run
150   printf("AliCDBconnect: #### Setting run to: %d\n", fRun);
151   cdb->SetRun(fRun);
152   // Initialize GRP manager only once
153   if (fRun) InitGRP();
154 }
155
156 //______________________________________________________________________________
157 Bool_t AliTaskCDBconnect::Notify()
158 {
159 // Init CDB locally if run number is defined.
160   CreateOutputObjects();
161   return kTRUE;
162 }
163
164 //______________________________________________________________________________
165 void AliTaskCDBconnect::Exec(Option_t* /*option*/)
166 {
167 //
168 // Execute all supplied analysis of one event. Notify run change via RunChanged().
169   fESD = fESDhandler->GetEvent();
170   // Intercept when the run number changed
171   if (fRun != fESD->GetRunNumber()) {
172     fRunChanged = kTRUE;
173     fRun = fESD->GetRunNumber();
174     Warning("Exec", "Run number changed in ESDEvent to %d", fRun);
175     AliCDBManager::Instance()->SetRun(fRun);
176   }
177 //  PostData(0, fESD);
178 }
179
180 //______________________________________________________________________________
181 void AliTaskCDBconnect::Terminate(Option_t *)
182 {
183 // Initialize CDB also in Terminate
184    CreateOutputObjects();
185 }