1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
21 #include "AliTender.h"
22 #include "AliTenderSupply.h"
23 #include "AliAnalysisManager.h"
24 #include "AliCDBManager.h"
25 #include "AliESDEvent.h"
26 #include "AliESDInputHandler.h"
32 //______________________________________________________________________________
33 AliTender::AliTender():
48 //______________________________________________________________________________
49 AliTender::AliTender(const char* name):
50 AliAnalysisTaskSE(name),
61 // Default constructor
62 DefineOutput(1, AliESDEvent::Class());
65 //______________________________________________________________________________
66 AliTender::~AliTender()
75 //______________________________________________________________________________
76 void AliTender::AddSupply(AliTenderSupply *supply)
78 // Addition of supplies.
79 if (!fSupplies) fSupplies = new TObjArray();
80 if (fSupplies->FindObject(supply)) {
81 Error("AddSupply", "Tender supply %s already connected.", supply->GetName());
84 fSupplies->Add(supply);
85 supply->SetTender(this);
88 //______________________________________________________________________________
89 void AliTender::ConnectInputData(Option_t* option)
91 // Connect the input data, create CDB manager.
92 if (fDebug > 1) Printf("AliTender::ConnectInputData()\n");
93 AliAnalysisTaskSE::ConnectInputData(option);
94 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
95 if (!mgr) AliFatal("No tender without an analysis manager");
96 fESDhandler = dynamic_cast<AliESDInputHandler *>(mgr->GetInputEventHandler());
99 fESD = fESDhandler->GetEvent();
101 AliFatal("No ESD input event handler connected") ;
103 // Create CDB manager
104 if (!fDefaultStorage.Length()) AliFatal("Default CDB storage not set.");
105 fCDB = AliCDBManager::Instance();
106 // SetDefault storage. Specific storages must be set by AliTenderSupply::Init()
107 fCDB->SetDefaultStorage(fDefaultStorage);
108 fRun = fESD->GetRunNumber();
110 fCDBkey = fCDB->SetLock(kFALSE, fCDBkey);
112 TIter next(fSupplies);
113 AliTenderSupply *supply;
114 while ((supply=(AliTenderSupply*)next())) supply->Init();
116 fCDBkey = fCDB->SetLock(kTRUE, fCDBkey);
119 //______________________________________________________________________________
120 void AliTender::UserCreateOutputObjects()
122 // Nothing for the moment, but we may need ESD event replication here.
123 if (fDebug > 1) Printf("AliTender::CreateOutputObjects()\n");
126 //______________________________________________________________________________
127 void AliTender::UserExec(Option_t* /*option*/)
130 // Execute all supplied analysis of one event. Notify run change via RunChanged().
132 Long64_t entry = fESDhandler->GetReadEntry();
133 Printf("AliTender::Exec() %s ==> processing event %lld\n", fESDhandler->GetTree()->GetCurrentFile()->GetName(),entry);
135 fESD = fESDhandler->GetEvent();
137 // Call the user analysis
139 fCDBkey = fCDB->SetLock(kFALSE, fCDBkey);
140 // Intercept when the run number changed
141 if (fRun != fESD->GetRunNumber()) {
143 fRun = fESD->GetRunNumber();
146 TIter next(fSupplies);
147 AliTenderSupply *supply;
148 while ((supply=(AliTenderSupply*)next())) supply->ProcessEvent();
149 fRunChanged = kFALSE;
151 fCDBkey = fCDB->SetLock(kTRUE, fCDBkey);
155 //______________________________________________________________________________
156 void AliTender::SetDefaultCDBStorage(const char *dbString)
158 // Set default CDB storage
159 fDefaultStorage = dbString;