]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSOnlineSDDBTP.cxx
Typo corrected in date of mods in history files and slight mods
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDBTP.cxx
CommitLineData
348f80b7 1/**************************************************************************
2 * Copyright(c) 2007-2009, 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#include "AliITSOnlineSDDBTP.h"
16#include <TH2F.h>
17#include <Riostream.h>
18#include <TMath.h>
19
20
21///////////////////////////////////////////////////////////////////
22// //
23// Class used for SDD baseline, noise and gain analysis //
24// Origin: F.Prino, Torino, prino@to.infn.it //
25// //
26///////////////////////////////////////////////////////////////////
27
28
29ClassImp(AliITSOnlineSDDBTP)
30//______________________________________________________________________
31 AliITSOnlineSDDBTP::AliITSOnlineSDDBTP():AliITSOnlineSDD(),fNBaseEvents(0),fNTPEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.),fNSigmaGain(0.)
32{
33 // default constructor
34 Reset();
35 SetMinBaseline();
36 SetMaxBaseline();
37 SetMinRawNoise();
38 SetMaxRawNoise();
39 SetNSigmaNoise();
40 SetNSigmaGain();
41}
42//______________________________________________________________________
43 AliITSOnlineSDDBTP::AliITSOnlineSDDBTP(Int_t mod, Int_t sid):AliITSOnlineSDD(mod,sid),fNBaseEvents(0),fNTPEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.),fNSigmaGain(0.)
44{
45 // default constructor
46 Reset();
47 SetMinBaseline();
48 SetMaxBaseline();
49 SetMinRawNoise();
50 SetMaxRawNoise();
51 SetNSigmaNoise();
52 SetNSigmaGain();
53}
54//______________________________________________________________________
55AliITSOnlineSDDBTP::~AliITSOnlineSDDBTP(){
56 // Destructor
57}
58//______________________________________________________________________
59void AliITSOnlineSDDBTP::Reset(){
60 fNBaseEvents=0;
61 fNTPEvents=0;
62 for(Int_t i=0;i<fgkNAnodes;i++){
63 fGoodAnode[i]=1;
64 fSumBaseline[i]=0.;
65 fSumRawNoise[i]=0.;
66 fSumCMN[i]=0.;
67 fSumTPPeak[i]=0.;
68 fTPPos[i]=0.;
69 }
70}
71//______________________________________________________________________
72void AliITSOnlineSDDBTP::ValidateAnodes(){
73 for(Int_t ian=0;ian<fgkNAnodes;ian++){
74 fGoodAnode[ian]=1;
75 if(GetAnodeBaseline(ian)>fMaxBaseline || GetAnodeBaseline(ian)<fMinBaseline) fGoodAnode[ian]=0;
76 if(GetAnodeRawNoise(ian)>fMaxRawNoise || GetAnodeRawNoise(ian)<fMinRawNoise) fGoodAnode[ian]=0;
77 if(GetAnodeRawNoise(ian)>fNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0;
78 }
79 if(fNTPEvents>0){
80 Float_t meang,rmsg;
81 StatGain(meang,rmsg);
82 Float_t lowlim=meang-fNSigmaGain*rmsg;
83 Float_t hilim=meang+fNSigmaGain*rmsg;
84 for(Int_t ian=0;ian<fgkNAnodes;ian++){
85 if(!fGoodAnode[ian]) continue;
86 if(GetChannelGain(ian)<lowlim||GetChannelGain(ian)>hilim) fGoodAnode[ian]=0;
87 }
88 }
89}
90
91//______________________________________________________________________
92void AliITSOnlineSDDBTP::AddTPEvent(TH2F* hrawd, Float_t xDAC){
93 //
94 if(fNBaseEvents==0) return;
95 fNTPEvents++;
96 Float_t tbmax=(Float_t)hrawd->GetNbinsX();
97 for(Int_t ian=0;ian<fgkNAnodes;ian++){
98 Float_t auxmax=0.;
99 Int_t auxtb=0;
100 if(!fGoodAnode[ian]) continue;
101 for(Int_t itb=0;itb<tbmax;itb++){
102 Float_t cnt=hrawd->GetBinContent(itb+1,ian+1);
103 if(cnt>auxmax){
104 auxmax=cnt;
105 auxtb=itb;
106 }
107 }
108 fSumTPPeak[ian]+=(auxmax-GetAnodeBaseline(ian))/xDAC;
109 fTPPos[ian]+=auxtb;
110 }
111}
112//______________________________________________________________________
113void AliITSOnlineSDDBTP::AddBaseEvent(TH2F* hrawd){
114 //
115 fNBaseEvents++;
116 Float_t tbmax=(Float_t)hrawd->GetNbinsX();
117 Float_t sum[fgkNAnodes];
118 for(Int_t ian=0;ian<fgkNAnodes;ian++){
119 Float_t sumQ=0.;
120 sum[ian]=0.;
121 for(Int_t itb=0;itb<tbmax;itb++){
122 sum[ian]+=hrawd->GetBinContent(itb+1,ian+1);
123 sumQ+=TMath::Power(hrawd->GetBinContent(itb+1,ian+1),2);
124 }
125 sum[ian]/=tbmax;
126 sumQ/=tbmax;
127 fSumBaseline[ian]+=sum[ian];
128 fSumRawNoise[ian]+=sumQ;
129 if(fNBaseEvents==1) ValidateAnodes();
130 }
131
132
133 const Int_t itbmax=int(tbmax);
134 Float_t *cmnEven = new Float_t[itbmax];
135 Float_t *cmnOdd = new Float_t[itbmax];
136 for(Int_t itb=0;itb<tbmax;itb++){
137 Float_t sumEven=0., sumOdd=0.;
138 Int_t countEven=0,countOdd=0;
139 for(Int_t ian=0;ian<fgkNAnodes;ian+=2){
140 if(!fGoodAnode[ian]) continue;
141 sumEven+=hrawd->GetBinContent(itb+1,ian+1)-sum[ian];
142 countEven++;
143 }
144 for(Int_t ian=1;ian<fgkNAnodes;ian+=2){
145 if(!fGoodAnode[ian]) continue;
146 sumOdd+=hrawd->GetBinContent(itb+1,ian+1)-sum[ian];
147 countOdd++;
148 }
149 cmnEven[itb]=sumEven/countEven;
150 cmnOdd[itb]=sumOdd/countOdd;
151 }
152 for(Int_t ian=0;ian<fgkNAnodes;ian++){
153 Float_t num=0.,den=0.;
154 if(!fGoodAnode[ian]) continue;
155 for(Int_t itb=0;itb<tbmax;itb++){
156 Float_t cmnCoef=cmnOdd[itb];
157 if(ian%2==0) cmnCoef=cmnEven[itb];
158 num+=(hrawd->GetBinContent(itb+1,ian+1)-sum[ian])*cmnCoef;
159 den+=TMath::Power(cmnCoef,2);
160 }
161 if(den!=0) fSumCMN[ian]+=num/den;
162 }
163 delete [] cmnEven;
164 delete [] cmnOdd;
165}
166//______________________________________________________________________
167Float_t AliITSOnlineSDDBTP::CalcMeanRawNoise(){
168 //
169 Float_t meanns=0.;
170 Int_t cnt=0;
171 for(Int_t ian=0;ian<fgkNAnodes;ian++){
172 if(!fGoodAnode[ian]) continue;
173 meanns+=GetAnodeRawNoise(ian);
174 cnt++;
175 }
176 if(cnt>0) meanns/=(Float_t)cnt;
177 return meanns;
178}
179//______________________________________________________________________
180void AliITSOnlineSDDBTP::StatGain(Float_t &mean, Float_t &rms){
181 Float_t sum=0.,sumq=0.;
182 Int_t cnt=0;
183 for(Int_t ian=0;ian<fgkNAnodes;ian++){
184 if(!fGoodAnode[ian]) continue;
185 sum+=GetChannelGain(ian);
186 sumq+=TMath::Power(GetChannelGain(ian),2);
187 cnt++;
188 }
189 if(cnt>0){
190 mean=sum/(Float_t)cnt;
191 rms=TMath::Sqrt(sumq/(Float_t)cnt-mean*mean);
192 }else{
193 mean=0.;
194 rms=0.;
195 }
196 return;
197}
198//______________________________________________________________________
199void AliITSOnlineSDDBTP::WriteToFXS(){
200 //
201 Char_t outfilnam[100];
202 sprintf(outfilnam,"SDDbase_mod%03d_sid%d.data",fModuleId,fSide);
203 FILE* outf=fopen(outfilnam,"w");
204 Float_t corrnoise=2.;
205 for(Int_t ian=0;ian<fgkNAnodes;ian++){
206 fprintf(outf,"%d %d %8.3f %8.3f %8.3f %8.3f %8.3f\n",ian,IsAnodeGood(ian),GetAnodeBaseline(ian),GetAnodeRawNoise(ian),GetAnodeCommonMode(ian),corrnoise,GetChannelGain(ian));
207 }
208 fclose(outf);
209}