several fixes for automatic train generation mode
[u/mrichter/AliRoot.git] / PWG1 / AliTaskCDBconnect.cxx
CommitLineData
f902e6f2 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>
125ba988 21#include "TGeoManager.h"
f902e6f2 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
31ClassImp(AliTaskCDBconnect)
32
33//______________________________________________________________________________
34AliTaskCDBconnect::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//______________________________________________________________________________
46AliTaskCDBconnect::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//______________________________________________________________________________
63AliTaskCDBconnect::~AliTaskCDBconnect()
64{
65// Destructor
66 if (fGRPManager) delete fGRPManager;
67// if (gGeoManager) delete gGeoManager;
68}
69
70//______________________________________________________________________________
71void AliTaskCDBconnect::LocalInit()
72{
73// Init CDB locally if run number is defined.
f902e6f2 74}
75
76//______________________________________________________________________________
77void AliTaskCDBconnect::ConnectInputData(Option_t* /*option*/)
78{
79// Connect the input data, create CDB manager.
f902e6f2 80}
81
82//______________________________________________________________________________
83void AliTaskCDBconnect::InitGRP()
84{
85// Initialize geometry and mag. field
86 if (!fGRPManager) {
87 // magnetic field
88 if (!TGeoGlobalMagField::Instance()->GetField()) {
2251e21b 89 printf("AliCDBconnect: #### Loading field map...\n");
f902e6f2 90 fGRPManager = new AliGRPManager();
91 if(!fGRPManager->ReadGRPEntry()) {
2251e21b 92 AliError("Cannot get GRP entry");
f902e6f2 93 }
94 if( !fGRPManager->SetMagField() ) {
2251e21b 95 AliError("Problem with magnetic field setup");
f902e6f2 96 }
97 }
98
99 // geometry
125ba988 100 if (!gGeoManager) {
101 printf("AliCDBconnect: #### Loading geometry...\n");
102 AliGeomManager::LoadGeometry();
36f9cda1 103 if( !AliGeomManager::ApplyAlignObjsFromCDB("GRP ITS TPC TRD") ) {
125ba988 104 AliError("Problem with align objects");
105 }
106 }
f902e6f2 107 }
108}
109
110//______________________________________________________________________________
111void AliTaskCDBconnect::CreateOutputObjects()
112{
2251e21b 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 }
b121056d 122 // Try to get event number before the first event is read (this has precedence
123 // over existing fRun)
2251e21b 124 Int_t run = mgr->GetRunFromPath();
2251e21b 125 if (!run) {
126 AliWarning("AliTaskCDBconnect: Could not set run from path");
b121056d 127 if (!fRun) {
128 AliError("AliTaskCDBconnect: Run not set - no CDB connection");
129 return;
130 }
2251e21b 131 }
2251e21b 132 // Create CDB manager
133 AliCDBManager *cdb = AliCDBManager::Instance();
b121056d 134 // If CDB is already locked, return
135 if (cdb->GetLock()) return;
2251e21b 136 // SetDefault storage. Specific storages must be set by TaskCDBconnectSupply::Init()
b121056d 137 // cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
138 if (cdb->IsDefaultStorageSet()) {
139 AliError("AliTaskCDBconnect: CDB default storage already set!");
140 } else {
b23713ce 141 cdb->SetDefaultStorage("raw://");
b121056d 142 }
2251e21b 143 if (run && (run != fRun)) {
144 fRunChanged = kTRUE;
145 fRun = run;
146 } else {
147 fRunChanged = kFALSE;
b121056d 148 }
2251e21b 149 // Set run
125ba988 150 printf("AliCDBconnect: #### Setting run to: %d\n", fRun);
151 cdb->SetRun(fRun);
2251e21b 152 // Initialize GRP manager only once
153 if (fRun) InitGRP();
154}
155
156//______________________________________________________________________________
157Bool_t AliTaskCDBconnect::Notify()
158{
159// Init CDB locally if run number is defined.
160 CreateOutputObjects();
161 return kTRUE;
f902e6f2 162}
163
164//______________________________________________________________________________
165void AliTaskCDBconnect::Exec(Option_t* /*option*/)
166{
167//
168// Execute all supplied analysis of one event. Notify run change via RunChanged().
169 fESD = fESDhandler->GetEvent();
f902e6f2 170 // Intercept when the run number changed
171 if (fRun != fESD->GetRunNumber()) {
172 fRunChanged = kTRUE;
173 fRun = fESD->GetRunNumber();
2251e21b 174 Warning("Exec", "Run number changed in ESDEvent to %d", fRun);
f902e6f2 175 AliCDBManager::Instance()->SetRun(fRun);
176 }
177// PostData(0, fESD);
178}
b121056d 179
180//______________________________________________________________________________
181void AliTaskCDBconnect::Terminate(Option_t *)
182{
183// Initialize CDB also in Terminate
219eb55e 184// CreateOutputObjects();
b121056d 185}