]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSOnlineSDDInjectors.h
Read data format and sampling frequency from CDH in SDD DAs (F. Prino)
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDInjectors.h
CommitLineData
348f80b7 1#ifndef ALIITSONLINESDDINJECTORS_H
2#define ALIITSONLINESDDINJECTORS_H
3
4
84df0230 5/* $Id$ */
9f026db8 6
348f80b7 7///////////////////////////////////////////////////////////////////
8// //
9// Class used for SDD injector analysis //
10// Origin: F.Prino, Torino, prino@to.infn.it //
11// //
12///////////////////////////////////////////////////////////////////
9f026db8 13
0e5e647a 14#include "AliITSOnlineSDD.h"
348f80b7 15
9f026db8 16
348f80b7 17class TH2F;
18class TGraphErrors;
19class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
20
21 public:
22 AliITSOnlineSDDInjectors();
979b5a5f 23 AliITSOnlineSDDInjectors(Int_t nddl, Int_t ncarlos, Int_t sid);
348f80b7 24 virtual ~AliITSOnlineSDDInjectors();
25
b255f56d 26
9f026db8 27 void SetThresholds(Float_t tl, Float_t th){
28 fLowThreshold=tl;
29 fHighThreshold=th;
30 }
31 void SetInjLineRange(Int_t jlin, Int_t tbmin, Int_t tbmax){
32 fTbMin[jlin]=tbmin;
33 fTbMax[jlin]=tbmax;
34 }
b255f56d 35 void Set20MHzConfig(){
36 SetInjLineRange(0,10,20);
37 SetInjLineRange(1,50,70);
38 SetInjLineRange(2,100,120);
39 SetTimeStep(50.);
40 }
41 void Set40MHzConfig(){
42 SetInjLineRange(0,20,50);
43 SetInjLineRange(1,90,160);
44 SetInjLineRange(2,170,240);
45 SetTimeStep(25.);
46 }
9f026db8 47 void SetPolOrder(Int_t n){fPolOrder=n;}
48 void SetMinDriftSpeed(Float_t vmin){fMinDriftSpeed=vmin;}
49 void SetMaxDriftSpeed(Float_t vmax){fMaxDriftSpeed=vmax;}
50 void SetMaxDriftSpeedErr(Float_t maxval){
51 fMaxDriftSpeedErr=maxval;
348f80b7 52 }
9f026db8 53 void SetFitLimits(Int_t firstpad,Int_t lastpad){
54 fFirstPadForFit=firstpad;
55 fLastPadForFit=lastpad;
348f80b7 56 }
9f026db8 57 void SetPadStatusCutForFit(Int_t cutval=1){
58 fPadStatusCutForFit=cutval;
348f80b7 59 }
9f026db8 60 void SetDefaults();
2ca27861 61 void SetTimeStep(Double_t tstep) {
f4e26d31 62 fTimeStep=tstep;
63 }
784a52ed 64 void SetUseTimeZeroSignal(Bool_t useTZ=kTRUE){
65 fUseTimeZeroSignal=useTZ;
66 }
9f026db8 67 TGraphErrors* GetTimeVsDistGraph(Int_t jpad) const;
68 TGraphErrors* GetDriftSpeedGraph() const;
84df0230 69 TGraphErrors* GetSelectedDriftSpeedGraph(Int_t minAcceptStatus) const;
2ca27861 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;}
9f026db8 74
2ca27861 75 Double_t GetTimeStep() const{return fTimeStep;}
9f026db8 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 }
2ca27861 83 Double_t GetCentroid(Int_t jpad, Int_t jlin) const {
9f026db8 84 if(jpad<kInjPads && jlin<kInjLines) return fCentroid[jpad][jlin];
c668f182 85 else return -9999.;
86 }
9f026db8 87 Bool_t IsInjectorGood(Int_t jpad, Int_t jlin) const {
88 if(jpad<kInjPads && jlin<kInjLines) return fGoodInj[jpad][jlin];
c668f182 89 else return 0;
90 }
9f026db8 91 void PrintInjectorStatus();
348f80b7 92 void PrintCentroids();
4c82df4c 93 void WriteToASCII(Int_t evNumb, UInt_t timeStamp, Int_t optAppend=0);
456ec396 94 Bool_t WriteToROOT(TFile *fil) const;
348f80b7 95
2ca27861 96 void Reset();
97 void AnalyzeEvent(TH2F* his);
98 void AddEvent(TH2F* his);
348f80b7 99 void FindGoodInjectors();
100 void FindCentroids();
9f026db8 101 void CalcDriftSpeed(Int_t jpad);
348f80b7 102 void CalcTimeBinZero();
9f026db8 103 void FitDriftSpeedVsAnode();
2ca27861 104 Double_t GetMeanDriftSpeed(Int_t ipad) const{
105 if(fNEvents==0) return 0.;
106 return fSumDriftSpeed[ipad]/(Double_t)fNEvents;
107 }
108 Double_t GetRMSDriftSpeed(Int_t ipad) const;
109 void FitMeanDriftSpeedVsAnode();
348f80b7 110
111 protected:
112 void SetPositions();
113 private:
114
9f026db8 115 enum {kInjPads = 33};
116 enum {kInjLines = 3};
348f80b7 117
118 AliITSOnlineSDDInjectors(const AliITSOnlineSDDInjectors& source);
119 AliITSOnlineSDDInjectors& operator = (const AliITSOnlineSDDInjectors& source);
9f026db8 120 static const Float_t fgkSaturation; // ADC saturation value (1008)
121 static const Float_t fgkDefaultLThreshold; // Default for fLowThreshold
122 static const Float_t fgkDefaultHThreshold; // Default for fHighThreshold
123 static const Float_t fgkDefaultMinSpeed; // Default for fMinDriftSpeed
124 static const Float_t fgkDefaultMaxSpeed; // Default for fMaxDriftSpeed
125 static const Float_t fgkDefaultMaxErr; // Default for fMaxDriftSpeedErr
126 static const Int_t fgkDefaultPolOrder; // Default for fPolOrder
f4e26d31 127 static const Float_t fgkDefaultTimeStep; // Default for fTimeStep
9f026db8 128 static const UShort_t fgkDefaultTbMin[kInjLines]; // Defaults for fTbMin
129 static const UShort_t fgkDefaultTbMax[kInjLines]; // Defaults for fTbMax
130
131
132 TH2F* fHisto; // histogram of channel counts
2ca27861 133 Double_t fTbZero; // Time zero for injector event
134 Double_t fRMSTbZero; // Error on time zero
135 Double_t fPosition[kInjLines]; // Coordinates of injector lines
9f026db8 136 UShort_t fTbMin[kInjLines]; // Minimum time bin for each line
137 UShort_t fTbMax[kInjLines]; // Maximum time bin for each line
138 Bool_t fGoodInj[kInjPads][kInjLines]; // array of good injectors
2ca27861 139 Double_t fCentroid[kInjPads][kInjLines]; // array of time bin centroids
140 Double_t fRMSCentroid[kInjPads][kInjLines]; // array of time rms of injectors
141 Double_t fDriftSpeed[kInjPads]; // drift speed
142 Double_t fDriftSpeedErr[kInjPads]; // error on drift speed
143 Int_t fNEvents; // number of events
144 Double_t fSumDriftSpeed[kInjPads]; // drift speed summed over events
145 Double_t fSumSqDriftSpeed[kInjPads]; // drift speed^2 sum
146
147 Double_t *fParam; // parameters of polinomial fit to
9f026db8 148 // drift speed vs. anode number
149 Int_t fPolOrder; // order of polinomial fit
150 Float_t fMinDriftSpeed; // Minimum value for drift speed
151 Float_t fMaxDriftSpeed; // Maximum value for drift speed
152 Float_t fMaxDriftSpeedErr; // Maximum value for error on drift speed
153 Float_t fLowThreshold; // Low threshold for injector signal
154 Float_t fHighThreshold; // High threshold for injector signal
155
156 Int_t fFirstPadForFit; // first injector pad used in fit
157 Int_t fLastPadForFit; // last injector pad used in fit
158 Int_t fPadStatusCutForFit; // minimum value of pad status for fit
159
2ca27861 160 Double_t fTimeStep; // time bin value (25 or 50 ns)
784a52ed 161 Bool_t fUseTimeZeroSignal; // flag for usage of time zero signal
162 // in drift speed calculation
9f026db8 163
2ca27861 164 ClassDef(AliITSOnlineSDDInjectors,6)
348f80b7 165};
166#endif