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"
32 #include "AliAnalysisManager.h"
34 ClassImp(AliTPCAnalysisTaskcalib)
37 AliTPCAnalysisTaskcalib::AliTPCAnalysisTaskcalib()
45 // default constructor
51 AliTPCAnalysisTaskcalib::AliTPCAnalysisTaskcalib(const char *name)
52 :AliAnalysisTask(name,""),
61 DefineInput(0, TChain::Class());
62 DefineOutput(0, TObjArray::Class());
63 fCalibJobs = new TObjArray(0);
64 fCalibJobs->SetOwner(kTRUE);
67 AliTPCAnalysisTaskcalib::~AliTPCAnalysisTaskcalib() {
71 printf("AliTPCAnalysisTaskcalib::~AliTPCAnalysisTaskcalib");
75 void AliTPCAnalysisTaskcalib::Exec(Option_t *) {
78 // Loop over tracks and call Process function
80 //Printf("ERROR: fESD not available");
83 fESDfriend=static_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));
85 //Printf("ERROR: fESDfriend not available");
88 Int_t n=fESD->GetNumberOfTracks();
90 Int_t run = fESD->GetRunNumber();
91 for (Int_t i=0;i<n;++i) {
92 AliESDfriendTrack *friendTrack=fESDfriend->GetTrack(i);
93 AliESDtrack *track=fESD->GetTrack(i);
94 TObject *calibObject=0;
96 for (Int_t j=0;(calibObject=friendTrack->GetCalibObject(j));++j)
97 if ((seed=dynamic_cast<AliTPCseed*>(calibObject)))
99 if (track) Process(track, run);
103 PostData(0,fCalibJobs);
106 void AliTPCAnalysisTaskcalib::ConnectInputData(Option_t *) {
110 TTree* tree=dynamic_cast<TTree*>(GetInputData(0));
112 //Printf("ERROR: Could not read chain from input slot 0");
115 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
117 //Printf("ERROR: Could not get ESDInputHandler");
120 fESD = esdH->GetEvent();
121 //Printf("*** CONNECTED NEW EVENT ****");
126 void AliTPCAnalysisTaskcalib::CreateOutputObjects() {
130 OpenFile(0, "RECREATE");
132 void AliTPCAnalysisTaskcalib::Terminate(Option_t */*option*/) {
136 AliTPCcalibBase *job=0;
137 Int_t njobs = fCalibJobs->GetEntriesFast();
138 for (Int_t i=0;i<njobs;i++){
139 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
140 if (job) job->Terminate();
145 void AliTPCAnalysisTaskcalib::FinishTaskOutput()
148 // According description in AliAnalisysTask this method is call
149 // on the slaves before sending data
152 RegisterDebugOutput();
156 void AliTPCAnalysisTaskcalib::Process(AliESDEvent *event) {
160 AliTPCcalibBase *job=0;
161 Int_t njobs = fCalibJobs->GetEntriesFast();
162 for (Int_t i=0;i<njobs;i++){
163 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
165 job->UpdateEventInfo(event);
171 void AliTPCAnalysisTaskcalib::Process(AliTPCseed *track) {
175 AliTPCcalibBase *job=0;
176 Int_t njobs = fCalibJobs->GetEntriesFast();
177 for (Int_t i=0;i<njobs;i++){
178 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
179 if (job) job->Process(track);
183 void AliTPCAnalysisTaskcalib::Process(AliESDtrack *track, Int_t run) {
187 AliTPCcalibBase *job=0;
188 Int_t njobs = fCalibJobs->GetEntriesFast();
189 for (Int_t i=0;i<njobs;i++){
190 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
191 if (job) job->Process(track,run);
195 Long64_t AliTPCAnalysisTaskcalib::Merge(TCollection *li) {
196 TIterator *i=fCalibJobs->MakeIterator();
197 AliTPCcalibBase *job;
199 while ((job=dynamic_cast<AliTPCcalibBase*>(i->Next())))
204 void AliTPCAnalysisTaskcalib::Analyze() {
206 // Analyze the content of the task
208 AliTPCcalibBase *job=0;
209 Int_t njobs = fCalibJobs->GetEntriesFast();
210 for (Int_t i=0;i<njobs;i++){
211 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
212 if (job) job->Analyze();
217 void AliTPCAnalysisTaskcalib::RegisterDebugOutput(){
221 AliTPCcalibBase *job=0;
222 Int_t njobs = fCalibJobs->GetEntriesFast();
223 for (Int_t i=0;i<njobs;i++){
224 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
225 if (job) job->RegisterDebugOutput(fDebugOutputPath.Data());