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 **************************************************************************/
17 ///////////////////////////////////////////////////////////////////////////////
19 // ANALYSIS task to perrorm TPC calibration //
22 ///////////////////////////////////////////////////////////////////////////////
23 #include "AliTPCAnalysisTaskcalib.h"
25 #include "AliTPCcalibBase.h"
26 #include "AliESDEvent.h"
27 #include "AliESDfriend.h"
28 #include "AliESDtrack.h"
29 #include "AliESDfriendTrack.h"
30 #include "AliTPCseed.h"
31 #include "AliESDInputHandler.h"
33 #include "AliVEvent.h"
34 #include "AliVfriendEvent.h"
35 #include "AliVTrack.h"
36 #include "AliVfriendTrack.h"
37 #include "AliVEventHandler.h"
39 #include "AliAnalysisManager.h"
42 #include "TTimeStamp.h"
44 ClassImp(AliTPCAnalysisTaskcalib)
47 AliTPCAnalysisTaskcalib::AliTPCAnalysisTaskcalib()
55 // default constructor
61 AliTPCAnalysisTaskcalib::AliTPCAnalysisTaskcalib(const char *name)
62 :AliAnalysisTask(name,""),
71 DefineInput(0, TChain::Class());
72 DefineOutput(0, AliTPCcalibBase::Class());
73 DefineOutput(1, AliTPCcalibBase::Class());
74 DefineOutput(2, AliTPCcalibBase::Class());
75 DefineOutput(3, AliTPCcalibBase::Class());
76 DefineOutput(4, AliTPCcalibBase::Class());
77 DefineOutput(5, AliTPCcalibBase::Class());
78 fCalibJobs = new TObjArray(0);
79 fCalibJobs->SetOwner(kTRUE);
82 AliTPCAnalysisTaskcalib::~AliTPCAnalysisTaskcalib() {
86 printf("AliTPCAnalysisTaskcalib::~AliTPCAnalysisTaskcalib");
90 void AliTPCAnalysisTaskcalib::Exec(Option_t *) {
93 // Loop over tracks and call Process function
94 //Printf("AliTPCAnalysisTaskcalib::Exec()...");
97 Printf("ERROR AliTPCAnalysisTaskcalib::Exec(): fEvent not available");
100 fEventFriend=fEvent->FindFriend();
101 //fESDfriend=fESD->FindFriend();
102 Int_t n=fEvent->GetNumberOfTracks();
105 //Printf("ERROR AliTPCAnalysisTaskcalib::Exec(): fEventFriend not available");
108 if (fEventFriend->TestSkipBit()) return;
110 Int_t run = fEvent->GetRunNumber();
111 for (Int_t i=0;i<n;++i) {
112 const AliVfriendTrack *friendTrack=fEventFriend->GetTrack(i);
113 AliVTrack *track=fEvent->GetVTrack(i);
114 TObject *calibObject=0;
116 if (!friendTrack) continue;
117 for (Int_t j=0;(calibObject=friendTrack->GetCalibObject(j));++j)
118 if ((seed=dynamic_cast<AliTPCseed*>(calibObject)))
120 if (track) Process(track, run);
126 void AliTPCAnalysisTaskcalib::ConnectInputData(Option_t *) {
130 TTree* tree=dynamic_cast<TTree*>(GetInputData(0));
132 //Printf("ERROR: Could not read chain from input slot 0");
135 //AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
136 AliVEventHandler *esdH = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
138 Printf("ERROR: Could not get ESDInputHandler");
141 fEvent = esdH->GetEvent();
142 //Printf("*** CONNECTED NEW EVENT ****");
147 void AliTPCAnalysisTaskcalib::CreateOutputObjects() {
151 //OpenFile(0, "RECREATE");
153 for (Int_t i=0; i<fCalibJobs->GetEntries(); i++)
155 if (fCalibJobs->At(i))
156 PostData(i,(AliTPCcalibBase*)fCalibJobs->At(i));
160 void AliTPCAnalysisTaskcalib::Terminate(Option_t */*option*/) {
164 AliTPCcalibBase *job=0;
165 Int_t njobs = fCalibJobs->GetEntriesFast();
166 for (Int_t i=0;i<njobs;i++){
167 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
168 if (job) job->Terminate();
173 void AliTPCAnalysisTaskcalib::FinishTaskOutput()
176 // According description in AliAnalisysTask this method is call
177 // on the slaves before sending data
180 if(!fDebugOutputPath.IsNull()) {
181 RegisterDebugOutput();
187 void AliTPCAnalysisTaskcalib::Process(AliVEvent *event) {
191 //Printf("AliTPCAnalysisTaskcalib::Process(event)...");
192 AliTPCcalibBase *job=0;
193 Int_t njobs = fCalibJobs->GetEntriesFast();
194 for (Int_t i=0;i<njobs;i++){
195 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
197 job->UpdateEventInfo(event);
198 if (job->AcceptTrigger())
204 void AliTPCAnalysisTaskcalib::Process(AliTPCseed *track) {
208 //Printf("AliTPCAnalysisTaskcalib::Process(TPC track)...");
209 AliTPCcalibBase *job=0;
210 Int_t njobs = fCalibJobs->GetEntriesFast();
211 for (Int_t i=0;i<njobs;i++){
212 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
214 if (job->AcceptTrigger())
219 void AliTPCAnalysisTaskcalib::Process(AliVTrack *track, Int_t run) {
223 //Printf("AliTPCAnalysisTaskcalib::Process(ESD track)...");
224 AliTPCcalibBase *job=0;
225 Int_t njobs = fCalibJobs->GetEntriesFast();
226 for (Int_t i=0;i<njobs;i++){
227 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
229 if (job->AcceptTrigger())
230 job->Process(track,run);
234 Long64_t AliTPCAnalysisTaskcalib::Merge(TCollection *li) {
235 TIterator *i=fCalibJobs->MakeIterator();
236 AliTPCcalibBase *job;
238 while ((job=dynamic_cast<AliTPCcalibBase*>(i->Next())))
243 void AliTPCAnalysisTaskcalib::Analyze() {
245 // Analyze the content of the task
247 AliTPCcalibBase *job=0;
248 Int_t njobs = fCalibJobs->GetEntriesFast();
249 for (Int_t i=0;i<njobs;i++){
250 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
251 if (job) job->Analyze();
256 void AliTPCAnalysisTaskcalib::RegisterDebugOutput(){
260 AliTPCcalibBase *job=0;
261 Int_t njobs = fCalibJobs->GetEntriesFast();
262 for (Int_t i=0;i<njobs;i++){
263 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
264 if (job) job->RegisterDebugOutput(fDebugOutputPath.Data());
266 TString dsName=GetName();
268 TFile fff(dsName.Data(),"recreate");
269 fCalibJobs->Write("TPCCalib",TObject::kSingleKey);
272 // store - copy debug output to the destination position
273 // currently ONLY for local copy
274 TString dsName2=fDebugOutputPath.Data();
275 gSystem->MakeDirectory(dsName2.Data());
276 dsName2+=gSystem->HostName();
277 gSystem->MakeDirectory(dsName2.Data());
280 dsName2+=Int_t(s.GetNanoSec());
282 gSystem->MakeDirectory(dsName2.Data());
284 AliInfo(Form("copy %s\t%s\n",dsName.Data(),dsName2.Data()));
285 printf("copy %s\t%s\n",dsName.Data(),dsName2.Data());
286 TFile::Cp(dsName.Data(),dsName2.Data());