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 // Base class for the calibration components using
20 // as input TPCseeds and ESDs
21 // Event loop outside of the component
24 // Base functionality to be implemeneted by component
26 //In some cases only one of this function to be implemented
27 virtual void Process(AliESDEvent *event)
28 virtual void Process(AliTPCseed *track)
30 virtual Long64_t Merge(TCollection *li);
31 virtual void Analyze()
34 // Functionality provided by base class for Algorith debuging:
35 // TTreeSRedirector * cstream = GetDebugStreamer() - get debug streamer which can be use for numerical debugging
40 // marian.ivanov@cern.ch
42 #include "AliTPCcalibBase.h"
45 #include "TTreeStream.h"
47 #include "TTimeStamp.h"
48 #include "AliESDEvent.h"
51 ClassImp(AliTPCcalibBase)
53 AliTPCcalibBase::AliTPCcalibBase():
57 fRun(0), //! current Run number
58 fEvent(0), //! current Event number
59 fTime(0), //! current Time
60 fTrigger(0), //! current trigger type
61 fMagF(0), //! current magnetic field
62 fTriggerMaskReject(-1), //trigger mask - reject trigger
63 fTriggerMaskAccept(-1), //trigger mask - accept trigger
64 fHasLaser(kFALSE), //flag the laser is overlayed with given event
65 fRejectLaser(kTRUE), //flag- reject laser
74 AliTPCcalibBase::AliTPCcalibBase(const char * name, const char * title):
78 fRun(0), //! current Run number
79 fEvent(0), //! current Event number
80 fTime(0), //! current Time
81 fTrigger(0), //! current trigger type
82 fMagF(0), //! current magnetic field
83 fTriggerMaskReject(-1), //trigger mask - reject trigger
84 fTriggerMaskAccept(-1), //trigger mask - accept trigger
85 fHasLaser(kFALSE), //flag the laser is overlayed with given event
86 fRejectLaser(kTRUE), //flag- reject laser
95 AliTPCcalibBase::AliTPCcalibBase(const AliTPCcalibBase&calib):
98 fStreamLevel(calib.fStreamLevel),
99 fRun(0), //! current Run number
100 fEvent(0), //! current Event number
101 fTime(0), //! current Time
102 fTrigger(0), //! current trigger type
103 fMagF(0), //! current magnetic field
104 fTriggerMaskReject(calib.fTriggerMaskReject), //trigger mask - reject trigger
105 fTriggerMaskAccept(calib.fTriggerMaskAccept), //trigger mask - accept trigger
106 fHasLaser(calib.fHasLaser), //flag the laser is overlayed with given event
107 fRejectLaser(calib.fRejectLaser), //flag- reject laser
108 fTriggerClass(calib.fTriggerClass),
109 fDebugLevel(calib.fDebugLevel)
116 AliTPCcalibBase &AliTPCcalibBase::operator=(const AliTPCcalibBase&calib){
120 ((TNamed *)this)->operator=(calib);
122 fStreamLevel=calib.fStreamLevel;
123 fDebugLevel=calib.fDebugLevel;
128 AliTPCcalibBase::~AliTPCcalibBase() {
132 if (fDebugLevel>0) printf("AliTPCcalibBase::~AliTPCcalibBase\n");
133 if (fDebugStreamer) delete fDebugStreamer;
137 void AliTPCcalibBase::Terminate(){
141 if (fDebugLevel>0) printf("AliTPCcalibBase::Terminate\n");
142 if (fDebugStreamer) delete fDebugStreamer;
147 TTreeSRedirector *AliTPCcalibBase::GetDebugStreamer(){
149 // Get Debug streamer
150 // In case debug streamer not yet initialized and StreamLevel>0 create new one
152 if (fStreamLevel==0) return 0;
153 if (fDebugStreamer) return fDebugStreamer;
156 dsName+="Debug.root";
157 dsName.ReplaceAll(" ","");
158 fDebugStreamer = new TTreeSRedirector(dsName.Data());
159 return fDebugStreamer;
163 void AliTPCcalibBase::UpdateEventInfo(AliESDEvent * event){
167 fRun = event->GetRunNumber();
168 fEvent = event->GetEventNumberInFile();
169 fTime = event->GetTimeStamp();
170 fTrigger = event->GetTriggerMask();
171 fMagF = event->GetMagneticField();
172 fTriggerClass = event->GetFiredTriggerClasses().Data();
173 fHasLaser = HasLaser(event);
178 Bool_t AliTPCcalibBase::HasLaser(AliESDEvent *event){
182 // Thresholds more than 8 tracks with small dip angle
184 const Int_t kMinLaserTracks = 8;
185 const Float_t kThrLaser = 0.3;
186 const Float_t kLaserTgl = 0.01;
188 Int_t ntracks = event->GetNumberOfTracks();
189 if (ntracks<kMinLaserTracks) return kFALSE;
192 for (Int_t i=0;i<ntracks;++i) {
193 AliESDtrack *track=event->GetTrack(i);
194 if (!track) continue;
195 if (track->GetTPCNcls()<=0) continue;
197 if (TMath::Abs(track->GetTgl())<kLaserTgl) nlaser++;
199 if (nlaser>kMinLaserTracks) return kTRUE;
200 if (nall>0 && nlaser/nall>kThrLaser) return kTRUE;
206 Bool_t AliTPCcalibBase::AcceptTrigger(){
208 // Apply trigger mask - Don't do calibration for non proper triggers
210 if (fTriggerMaskReject==(Int_t)fTrigger) return kFALSE;
211 if (fTriggerMaskAccept>0 && fTriggerMaskAccept!=(Int_t)fTrigger) return kFALSE;
212 if (fHasLaser && fRejectLaser) return kFALSE;
217 void AliTPCcalibBase::RegisterDebugOutput(const char *path){
219 // store - copy debug output to the destination position
220 // currently ONLY for local copy
221 if (fDebugLevel>0) printf("AliTPCcalibBase::RegisterDebugOutput(%s)\n",path);
222 if (fStreamLevel==0) return;
225 dsName+="Debug.root";
226 dsName.ReplaceAll(" ","");
227 TString dsName2=path;
228 gSystem->MakeDirectory(dsName2.Data());
229 dsName2+=gSystem->HostName();
230 gSystem->MakeDirectory(dsName2.Data());
233 dsName2+=Int_t(s.GetNanoSec());
235 gSystem->MakeDirectory(dsName2.Data());
237 AliInfo(Form("copy %s\t%s\n",dsName.Data(),dsName2.Data()));
238 printf("copy %s\t%s\n",dsName.Data(),dsName2.Data());
239 TFile::Cp(dsName.Data(),dsName2.Data());