]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ITS/AliITSOnlineSDDInjectors.h
improved feeddown paramaterisation
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDInjectors.h
... / ...
CommitLineData
1#ifndef ALIITSONLINESDDINJECTORS_H
2#define ALIITSONLINESDDINJECTORS_H
3
4
5/* $Id$ */
6
7///////////////////////////////////////////////////////////////////
8// //
9// Class used for SDD injector analysis //
10// Origin: F.Prino, Torino, prino@to.infn.it //
11// //
12///////////////////////////////////////////////////////////////////
13
14#include "AliITSOnlineSDD.h"
15
16
17class TH1F;
18class TH2F;
19class TGraphErrors;
20class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
21
22 public:
23 AliITSOnlineSDDInjectors();
24 AliITSOnlineSDDInjectors(Int_t nddl, Int_t ncarlos, Int_t sid);
25 virtual ~AliITSOnlineSDDInjectors();
26
27
28 void SetThresholds(Int_t ilin, Float_t tl, Float_t th){
29 fLowThreshold[ilin]=tl;
30 fHighThreshold[ilin]=th;
31 }
32 void SetMaxNumberOfCellsPerAnode(Int_t maxc=40){
33 fMaxCellsAboveThreshold=maxc;
34 }
35
36 void SetInjLineRange(Int_t jlin, Int_t tbmin, Int_t tbmax){
37 fTbMin[jlin]=tbmin;
38 fTbMax[jlin]=tbmax;
39 }
40 void Set20MHzConfig();
41 void Set40MHzConfig();
42
43 void SetPolDegree(Int_t n){fPolDegree=n;}
44 void SetMinDriftSpeed(Float_t vmin){fMinDriftSpeed=vmin;}
45 void SetMaxDriftSpeed(Float_t vmax){fMaxDriftSpeed=vmax;}
46 void SetMaxDriftSpeedErr(Float_t maxval){
47 fMaxDriftSpeedErr=maxval;
48 }
49 void SetFitLimits(Int_t firstpad,Int_t lastpad){
50 fFirstPadForFit=firstpad;
51 fLastPadForFit=lastpad;
52 }
53 void SetPadStatusCutForFit(Int_t cutval=4){
54 fPadStatusCutForFit=cutval;
55 }
56 void SetDefaults();
57 void SetTimeStep(Double_t tstep) {
58 fTimeStep=tstep;
59 }
60 void SetUseTimeZeroSignal(Bool_t useTZ=kTRUE){
61 fUseTimeZeroSignal=useTZ;
62 }
63 void SetUseLine(Int_t iLine, Bool_t use=kTRUE){
64 if(iLine>=0 && iLine<kInjLines) fUseLine[iLine]=use;
65 }
66 TH1F* GetMeanDriftSpeedVsPadHisto() const;
67 TGraphErrors* GetTimeVsDistGraph(Int_t jpad) const;
68 TGraphErrors* GetDriftSpeedGraph() const;
69 TGraphErrors* GetSelectedDriftSpeedGraph(Int_t minAcceptStatus) const;
70 Double_t* GetDriftSpeedFitParam()const{ return fParam;}
71 Double_t GetDriftSpeed(Int_t jpad) const{return fDriftSpeed[jpad];}
72 Double_t GetDriftSpeedErr(Int_t jpad) const{return fDriftSpeedErr[jpad];}
73 Double_t GetTimeBinZero() const{return fTbZero;}
74
75 Double_t GetTimeStep() const{return fTimeStep;}
76 Int_t GetAnodeNumber(Int_t iInjPad) const;
77 Int_t GetInjPadNumberFromAnode(Int_t nAnode) const;
78 Int_t GetInjPadStatus(Int_t jpad) const;
79 Int_t GetAnodeStatus(Int_t nAnode) const{
80 Int_t jpad=GetInjPadNumberFromAnode(nAnode);
81 return GetInjPadStatus(jpad);
82 }
83 Double_t GetCentroid(Int_t jpad, Int_t jlin) const {
84 if(jpad<kInjPads && jlin<kInjLines) return fCentroid[jpad][jlin];
85 else return -9999.;
86 }
87 Bool_t IsInjectorGood(Int_t jpad, Int_t jlin) const {
88 if(jpad<kInjPads && jlin<kInjLines) return fGoodInj[jpad][jlin];
89 else return 0;
90 }
91 void PrintInjectorStatus();
92 void PrintCentroids();
93 void WriteToASCII(Int_t evNumb, UInt_t timeStamp, Int_t optAppend=0);
94 void WriteInjectorStatusToASCII();
95 Bool_t WriteToROOT(TFile *fil) const;
96
97 void Reset();
98 void AnalyzeEvent(TH2F* his);
99 void AddEvent(TH2F* his);
100 void FindGoodInjectors();
101 void FindCentroids();
102 void CalcDriftSpeed(Int_t jpad);
103 void CalcTimeBinZero();
104 void FitDriftSpeedVsAnode();
105 void PolyFit(Int_t degree=3);
106 Double_t GetMeanDriftSpeed(Int_t ipad) const{
107 if(fNEventsInPad[ipad]==0) return 0.;
108 return fSumDriftSpeed[ipad]/(Double_t)fNEventsInPad[ipad];
109 }
110 Double_t GetRMSDriftSpeed(Int_t ipad) const;
111 Double_t GetMeanPadStatusCut(Int_t ipad) const{
112 if(fNEventsInPad[ipad]==0) return 0.;
113 return (Double_t)fSumPadStatusCut[ipad]/(Double_t)fNEventsInPad[ipad];
114 }
115 Double_t GetMeanPadStatus(Int_t ipad) const{
116 if(fNEvents==0) return 0.;
117 return (Double_t)fSumPadStatus[ipad]/(Double_t)fNEvents;
118 }
119
120 void FitMeanDriftSpeedVsAnode();
121
122 protected:
123 void SetPositions();
124 private:
125
126 enum {kInjPads = 33};
127 enum {kInjLines = 3};
128
129 AliITSOnlineSDDInjectors(const AliITSOnlineSDDInjectors& source);
130 AliITSOnlineSDDInjectors& operator = (const AliITSOnlineSDDInjectors& source);
131 static const Float_t fgkSaturation; // ADC saturation value (1008)
132 static const Float_t fgkDefaultLThreshold; // Default for fLowThreshold
133 static const Float_t fgkDefaultLThreshold1; // Default for fLowThreshold
134 static const Float_t fgkDefaultHThreshold; // Default for fHighThreshold
135 static const Float_t fgkDefaultHThreshold1; // Default for fHighThreshold
136 static const Float_t fgkDefaultMinSpeed; // Default for fMinDriftSpeed
137 static const Float_t fgkDefaultMaxSpeed; // Default for fMaxDriftSpeed
138 static const Float_t fgkDefaultMaxErr; // Default for fMaxDriftSpeedErr
139 static const Int_t fgkDefaultPolDegree; // Default for fPolDegree
140 static const Float_t fgkDefaultTimeStep; // Default for fTimeStep
141 static const UShort_t fgkDefaultTbMin[kInjLines]; // Defaults for fTbMin
142 static const UShort_t fgkDefaultTbMax[kInjLines]; // Defaults for fTbMax
143
144
145 TH2F* fHisto; // histogram of channel counts
146 Double_t fTbZero; // Time zero for injector event
147 Double_t fRMSTbZero; // Error on time zero
148 Double_t fPosition[kInjLines]; // Coordinates of injector lines
149 UShort_t fTbMin[kInjLines]; // Minimum time bin for each line
150 UShort_t fTbMax[kInjLines]; // Maximum time bin for each line
151 Bool_t fGoodInj[kInjPads][kInjLines]; // array of good injectors
152 Double_t fCentroid[kInjPads][kInjLines]; // array of time bin centroids
153 Double_t fRMSCentroid[kInjPads][kInjLines]; // array of time rms of injectors
154 Double_t fDriftSpeed[kInjPads]; // drift speed
155 Double_t fDriftSpeedErr[kInjPads]; // error on drift speed
156 Int_t fNEvents; // number of events
157 Int_t fNEventsInPad[kInjPads]; // number of events per pad
158 Double_t fSumDriftSpeed[kInjPads]; // drift speed summed over events
159 Double_t fSumSqDriftSpeed[kInjPads]; // drift speed^2 sum
160 Int_t fSumPadStatus[kInjPads]; // pad status sum
161 Int_t fSumPadStatusCut[kInjPads]; // pad status (> cut) sum
162
163 Double_t *fParam; // parameters of polinomial fit to
164 // drift speed vs. anode number
165 Int_t fPolDegree; // Degree of polynomial fit
166 Int_t fActualPolDegree; // Degree actually used (<=fPolDegree)
167 Float_t fMinDriftSpeed; // Minimum value for drift speed
168 Float_t fMaxDriftSpeed; // Maximum value for drift speed
169 Float_t fMaxDriftSpeedErr; // Maximum value for error on drift speed
170 Float_t fLowThreshold[kInjLines]; // Low threshold for injector signal
171 Float_t fHighThreshold[kInjLines]; // High threshold for injector signal
172
173 Bool_t fUseLine[kInjLines]; // Flag to use/not use a line
174 Int_t fFirstPadForFit; // first injector pad used in fit
175 Int_t fLastPadForFit; // last injector pad used in fit
176 Int_t fPadStatusCutForFit; // minimum value of pad status for fit
177
178 Double_t fTimeStep; // time bin value (25 or 50 ns)
179 Bool_t fUseTimeZeroSignal; // flag for usage of time zero signal
180 // in drift speed calculation
181
182 Int_t fMaxCellsAboveThreshold; // cut to remove noisy anodes
183
184 ClassDef(AliITSOnlineSDDInjectors,9)
185};
186#endif