]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSOnlineSDDBTP.cxx
Missing whitespaces preventing to compile with gcc4
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDBTP.cxx
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
29 ClassImp(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 //______________________________________________________________________
55 AliITSOnlineSDDBTP::~AliITSOnlineSDDBTP(){
56   // Destructor
57 }
58 //______________________________________________________________________
59 void 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 //______________________________________________________________________
72 void  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 //______________________________________________________________________
92 void 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 //______________________________________________________________________
113 void 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 //______________________________________________________________________
167 Float_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 //______________________________________________________________________
180 void 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 //______________________________________________________________________
199 void 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 }