]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/AliTPCcalibBase.cxx
Moved old AliMagFCheb to AliMagF, small fixes/optimizations in field classes
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibBase.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15
16
17 ///////////////////////////////////////////////////////////////////////////////
18 //                                                                           //
19 //  Base class for the calibration components using 
20 //  as input TPCseeds and ESDs
21 //  Event loop outside of the component
22 //
23 //
24 // Base functionality to be implemeneted by component 
25 /* 
26    //In some cases only one of this function to be implemented
27    virtual void     Process(AliESDEvent *event)
28    virtual void     Process(AliTPCseed *track)
29    //
30    virtual Long64_t Merge(TCollection *li);
31    virtual void     Analyze()
32    void             Terminate();
33 */
34 // Functionality provided by base class for Algorith debuging:
35 //  TTreeSRedirector * cstream =  GetDebugStreamer() - get debug streamer which can be use for numerical debugging
36 //                      
37
38
39
40 //  marian.ivanov@cern.ch
41 // 
42 #include "AliTPCcalibBase.h"
43 #include "TSystem.h"
44 #include "TFile.h"
45 #include "TTreeStream.h"
46 #include "AliLog.h"
47 #include "TTimeStamp.h"
48 #include "AliESDEvent.h"
49
50
51 ClassImp(AliTPCcalibBase)
52
53 AliTPCcalibBase::AliTPCcalibBase():
54     TNamed(),
55     fDebugStreamer(0),
56     fStreamLevel(0),   
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
66     fDebugLevel(0)
67 {
68   //
69   // Constructor
70   //
71 }
72
73 AliTPCcalibBase::AliTPCcalibBase(const char * name, const char * title):
74   TNamed(name,title),
75   fDebugStreamer(0),
76   fStreamLevel(0),   
77   fRun(0),                  //!  current Run number
78   fEvent(0),                //!  current Event number
79   fTime(0),                 //!  current Time
80   fTrigger(0),              //! current trigger type
81   fMagF(0),                 //! current magnetic field
82   fTriggerMaskReject(-1),   //trigger mask - reject trigger
83   fTriggerMaskAccept(-1),   //trigger mask - accept trigger
84   fHasLaser(kFALSE),                    //flag the laser is overlayed with given event 
85   fRejectLaser(kTRUE),                 //flag- reject laser
86   fDebugLevel(0)
87 {
88   //
89   // Constructor
90   //
91 }
92
93 AliTPCcalibBase::AliTPCcalibBase(const AliTPCcalibBase&calib):
94   TNamed(calib),
95   fDebugStreamer(0),
96   fStreamLevel(calib.fStreamLevel),
97   fRun(0),                  //!  current Run number
98   fEvent(0),                //!  current Event number
99   fTime(0),                 //!  current Time
100   fTrigger(0),              //! current trigger type
101   fMagF(0),                 //! current magnetic field
102   fTriggerMaskReject(calib.fTriggerMaskReject),   //trigger mask - reject trigger
103   fTriggerMaskAccept(calib.fTriggerMaskAccept),   //trigger mask - accept trigger
104   fHasLaser(calib.fHasLaser),                    //flag the laser is overlayed with given event
105   fRejectLaser(calib.fRejectLaser),                 //flag- reject laser
106   fDebugLevel(calib.fDebugLevel)
107 {
108   //
109   // copy constructor
110   //
111 }
112
113 AliTPCcalibBase &AliTPCcalibBase::operator=(const AliTPCcalibBase&calib){
114   //
115   //
116   //
117   ((TNamed *)this)->operator=(calib);
118   fDebugStreamer=0;
119   fStreamLevel=calib.fStreamLevel;
120   fDebugLevel=calib.fDebugLevel;
121   return *this;
122 }
123
124
125 AliTPCcalibBase::~AliTPCcalibBase() {
126   //
127   // destructor
128   //
129   if (fDebugLevel>0) printf("AliTPCcalibBase::~AliTPCcalibBase\n");
130   if (fDebugStreamer) delete fDebugStreamer;
131   fDebugStreamer=0;
132 }
133
134 void  AliTPCcalibBase::Terminate(){
135   //
136   //
137   //
138   if (fDebugLevel>0) printf("AliTPCcalibBase::Terminate\n");
139   if (fDebugStreamer) delete fDebugStreamer;
140   fDebugStreamer = 0;
141   return;
142 }
143
144 TTreeSRedirector *AliTPCcalibBase::GetDebugStreamer(){
145   //
146   // Get Debug streamer
147   // In case debug streamer not yet initialized and StreamLevel>0 create new one
148   //
149   if (fStreamLevel==0) return 0;
150   if (fDebugStreamer) return fDebugStreamer;
151   TString dsName;
152   dsName=GetName();
153   dsName+="Debug.root";
154   dsName.ReplaceAll(" ",""); 
155   fDebugStreamer = new TTreeSRedirector(dsName.Data());
156   return fDebugStreamer;
157 }
158
159
160 void    AliTPCcalibBase::UpdateEventInfo(AliESDEvent * event){
161   //
162   //
163   //
164   fRun     = event->GetRunNumber();
165   fEvent   = event->GetEventNumberInFile();
166   fTime    = event->GetTimeStamp();
167   fTrigger = event->GetTriggerMask();
168   fMagF    = event->GetMagneticField();
169   fHasLaser = HasLaser(event); 
170 }
171
172
173 Bool_t AliTPCcalibBase::HasLaser(AliESDEvent *event){
174   //
175   //
176   //
177   // Thresholds more than 8 tracks with small dip angle
178   
179   const Int_t kMinLaserTracks = 8;
180   const Float_t kThrLaser       = 0.3;
181   const Float_t kLaserTgl       = 0.01;
182
183   Int_t ntracks = event->GetNumberOfTracks();
184   if (ntracks<kMinLaserTracks) return kFALSE;
185   Float_t nlaser=0;
186   Float_t nall=0;
187   for (Int_t i=0;i<ntracks;++i) {
188     AliESDtrack *track=event->GetTrack(i);
189     if (!track) continue;
190     if (track->GetTPCNcls()<=0) continue; 
191     nall++;
192     if (TMath::Abs(track->GetTgl())<kLaserTgl) nlaser++;
193   }
194   if (nlaser>kMinLaserTracks) return kTRUE;
195   if (nall>0 && nlaser/nall>kThrLaser) return kTRUE;
196   return kFALSE;
197 }
198
199
200
201 Bool_t AliTPCcalibBase::AcceptTrigger(){
202   //
203   // Apply trigger mask - Don't do calibration for non proper triggers
204   // 
205   if (fTriggerMaskReject==(Int_t)fTrigger) return kFALSE;
206   if (fTriggerMaskAccept>0 && fTriggerMaskAccept!=(Int_t)fTrigger) return kFALSE;
207   if (fHasLaser && fRejectLaser) return kFALSE;
208   return kTRUE;
209 }
210
211
212 void AliTPCcalibBase::RegisterDebugOutput(const char *path){
213   //
214   // store  - copy debug output to the destination position
215   // currently ONLY for local copy
216   if (fDebugLevel>0) printf("AliTPCcalibBase::RegisterDebugOutput(%s)\n",path);
217   if (fStreamLevel==0) return;
218   TString dsName;
219   dsName=GetName();
220   dsName+="Debug.root";
221   dsName.ReplaceAll(" ",""); 
222   TString dsName2=path;
223   gSystem->MakeDirectory(dsName2.Data());
224   dsName2+=gSystem->HostName();
225   gSystem->MakeDirectory(dsName2.Data());
226   dsName2+="/";
227   TTimeStamp s;
228   dsName2+=Int_t(s.GetNanoSec());
229   dsName2+="/";
230   gSystem->MakeDirectory(dsName2.Data());
231   dsName2+=dsName;
232   AliInfo(Form("copy %s\t%s\n",dsName.Data(),dsName2.Data()));
233   printf("copy %s\t%s\n",dsName.Data(),dsName2.Data());
234   TFile::Cp(dsName.Data(),dsName2.Data());
235 }