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"
35 #include "TTimeStamp.h"
37 ClassImp(AliTPCAnalysisTaskcalib)
40 AliTPCAnalysisTaskcalib::AliTPCAnalysisTaskcalib()
48 // default constructor
54 AliTPCAnalysisTaskcalib::AliTPCAnalysisTaskcalib(const char *name)
55 :AliAnalysisTask(name,""),
64 DefineInput(0, TChain::Class());
65 DefineOutput(0, AliTPCcalibBase::Class());
66 DefineOutput(1, AliTPCcalibBase::Class());
67 DefineOutput(2, AliTPCcalibBase::Class());
68 DefineOutput(3, AliTPCcalibBase::Class());
69 DefineOutput(4, AliTPCcalibBase::Class());
70 DefineOutput(5, AliTPCcalibBase::Class());
71 fCalibJobs = new TObjArray(0);
72 fCalibJobs->SetOwner(kTRUE);
75 AliTPCAnalysisTaskcalib::~AliTPCAnalysisTaskcalib() {
79 printf("AliTPCAnalysisTaskcalib::~AliTPCAnalysisTaskcalib");
83 void AliTPCAnalysisTaskcalib::Exec(Option_t *) {
86 // Loop over tracks and call Process function
88 //Printf("ERROR: fESD not available");
91 fESDfriend=static_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));
92 //fESDfriend=fESD->FindFriend();
93 Int_t n=fESD->GetNumberOfTracks();
96 //Printf("ERROR: fESDfriend not available");
99 if (fESDfriend->TestSkipBit()) return;
101 Int_t run = fESD->GetRunNumber();
102 for (Int_t i=0;i<n;++i) {
103 AliESDfriendTrack *friendTrack=fESDfriend->GetTrack(i);
104 AliESDtrack *track=fESD->GetTrack(i);
105 TObject *calibObject=0;
107 if (!friendTrack) continue;
108 for (Int_t j=0;(calibObject=friendTrack->GetCalibObject(j));++j)
109 if ((seed=dynamic_cast<AliTPCseed*>(calibObject)))
111 if (track) Process(track, run);
117 void AliTPCAnalysisTaskcalib::ConnectInputData(Option_t *) {
121 TTree* tree=dynamic_cast<TTree*>(GetInputData(0));
123 //Printf("ERROR: Could not read chain from input slot 0");
126 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
128 //Printf("ERROR: Could not get ESDInputHandler");
131 fESD = esdH->GetEvent();
132 //Printf("*** CONNECTED NEW EVENT ****");
137 void AliTPCAnalysisTaskcalib::CreateOutputObjects() {
141 //OpenFile(0, "RECREATE");
143 for (Int_t i=0; i<fCalibJobs->GetEntries(); i++)
145 if (fCalibJobs->At(i))
146 PostData(i,(AliTPCcalibBase*)fCalibJobs->At(i));
150 void AliTPCAnalysisTaskcalib::Terminate(Option_t */*option*/) {
154 AliTPCcalibBase *job=0;
155 Int_t njobs = fCalibJobs->GetEntriesFast();
156 for (Int_t i=0;i<njobs;i++){
157 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
158 if (job) job->Terminate();
163 void AliTPCAnalysisTaskcalib::FinishTaskOutput()
166 // According description in AliAnalisysTask this method is call
167 // on the slaves before sending data
170 if(!fDebugOutputPath.IsNull()) {
171 RegisterDebugOutput();
177 void AliTPCAnalysisTaskcalib::Process(AliESDEvent *event) {
181 AliTPCcalibBase *job=0;
182 Int_t njobs = fCalibJobs->GetEntriesFast();
183 for (Int_t i=0;i<njobs;i++){
184 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
186 job->UpdateEventInfo(event);
187 if (job->AcceptTrigger())
193 void AliTPCAnalysisTaskcalib::Process(AliTPCseed *track) {
197 AliTPCcalibBase *job=0;
198 Int_t njobs = fCalibJobs->GetEntriesFast();
199 for (Int_t i=0;i<njobs;i++){
200 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
202 if (job->AcceptTrigger())
207 void AliTPCAnalysisTaskcalib::Process(AliESDtrack *track, Int_t run) {
211 AliTPCcalibBase *job=0;
212 Int_t njobs = fCalibJobs->GetEntriesFast();
213 for (Int_t i=0;i<njobs;i++){
214 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
216 if (job->AcceptTrigger())
217 job->Process(track,run);
221 Long64_t AliTPCAnalysisTaskcalib::Merge(TCollection *li) {
222 TIterator *i=fCalibJobs->MakeIterator();
223 AliTPCcalibBase *job;
225 while ((job=dynamic_cast<AliTPCcalibBase*>(i->Next())))
230 void AliTPCAnalysisTaskcalib::Analyze() {
232 // Analyze the content of the task
234 AliTPCcalibBase *job=0;
235 Int_t njobs = fCalibJobs->GetEntriesFast();
236 for (Int_t i=0;i<njobs;i++){
237 job = (AliTPCcalibBase*)fCalibJobs->UncheckedAt(i);
238 if (job) job->Analyze();
243 void AliTPCAnalysisTaskcalib::RegisterDebugOutput(){
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->RegisterDebugOutput(fDebugOutputPath.Data());
253 TString dsName=GetName();
255 TFile fff(dsName.Data(),"recreate");
256 fCalibJobs->Write("TPCCalib",TObject::kSingleKey);
259 // store - copy debug output to the destination position
260 // currently ONLY for local copy
261 TString dsName2=fDebugOutputPath.Data();
262 gSystem->MakeDirectory(dsName2.Data());
263 dsName2+=gSystem->HostName();
264 gSystem->MakeDirectory(dsName2.Data());
267 dsName2+=Int_t(s.GetNanoSec());
269 gSystem->MakeDirectory(dsName2.Data());
271 AliInfo(Form("copy %s\t%s\n",dsName.Data(),dsName2.Data()));
272 printf("copy %s\t%s\n",dsName.Data(),dsName2.Data());
273 TFile::Cp(dsName.Data(),dsName2.Data());