1 /**************************************************************************
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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"
20 ///////////////////////////////////////////////////////////////////
22 // Class used for SDD baseline, noise and gain analysis //
23 // Origin: F.Prino, Torino, prino@to.infn.it //
25 ///////////////////////////////////////////////////////////////////
28 ClassImp(AliITSOnlineSDDBTP)
29 //______________________________________________________________________
30 AliITSOnlineSDDBTP::AliITSOnlineSDDBTP():AliITSOnlineSDD(),fNBaseEvents(0),fNTPEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.),fNSigmaGain(0.)
32 // default constructor
41 //______________________________________________________________________
42 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 // default constructor
53 //______________________________________________________________________
54 AliITSOnlineSDDBTP::~AliITSOnlineSDDBTP(){
57 //______________________________________________________________________
58 void AliITSOnlineSDDBTP::Reset(){
62 for(Int_t i=0;i<fgkNAnodes;i++){
71 //______________________________________________________________________
72 void AliITSOnlineSDDBTP::ValidateAnodes(){
74 for(Int_t ian=0;ian<fgkNAnodes;ian++){
76 if(GetAnodeBaseline(ian)>fMaxBaseline || GetAnodeBaseline(ian)<fMinBaseline) fGoodAnode[ian]=0;
77 if(GetAnodeRawNoise(ian)>fMaxRawNoise || GetAnodeRawNoise(ian)<fMinRawNoise) fGoodAnode[ian]=0;
78 if(GetAnodeRawNoise(ian)>fNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0;
83 Float_t lowlim=meang-fNSigmaGain*rmsg;
84 Float_t hilim=meang+fNSigmaGain*rmsg;
85 for(Int_t ian=0;ian<fgkNAnodes;ian++){
86 if(!fGoodAnode[ian]) continue;
87 if(GetChannelGain(ian)<lowlim||GetChannelGain(ian)>hilim) fGoodAnode[ian]=0;
92 //______________________________________________________________________
93 void AliITSOnlineSDDBTP::AddTPEvent(TH2F* hrawd, Float_t xDAC){
95 if(fNBaseEvents==0) return;
97 Float_t tbmax=(Float_t)hrawd->GetNbinsX();
98 for(Int_t ian=0;ian<fgkNAnodes;ian++){
101 if(!fGoodAnode[ian]) continue;
102 for(Int_t itb=0;itb<tbmax;itb++){
103 Float_t cnt=hrawd->GetBinContent(itb+1,ian+1);
109 fSumTPPeak[ian]+=(auxmax-GetAnodeBaseline(ian))/xDAC;
113 //______________________________________________________________________
114 void AliITSOnlineSDDBTP::AddBaseEvent(TH2F* hrawd){
117 Float_t tbmax=(Float_t)hrawd->GetNbinsX();
118 Float_t sum[fgkNAnodes];
119 for(Int_t ian=0;ian<fgkNAnodes;ian++){
122 for(Int_t itb=0;itb<tbmax;itb++){
123 sum[ian]+=hrawd->GetBinContent(itb+1,ian+1);
124 sumQ+=TMath::Power(hrawd->GetBinContent(itb+1,ian+1),2);
128 fSumBaseline[ian]+=sum[ian];
129 fSumRawNoise[ian]+=sumQ;
130 if(fNBaseEvents==1) ValidateAnodes();
134 const Int_t kTbmax=int(tbmax);
135 Float_t *cmnEven = new Float_t[kTbmax];
136 Float_t *cmnOdd = new Float_t[kTbmax];
137 for(Int_t itb=0;itb<tbmax;itb++){
138 Float_t sumEven=0., sumOdd=0.;
139 Int_t countEven=0,countOdd=0;
140 for(Int_t ian=0;ian<fgkNAnodes;ian+=2){
141 if(!fGoodAnode[ian]) continue;
142 sumEven+=hrawd->GetBinContent(itb+1,ian+1)-sum[ian];
145 for(Int_t ian=1;ian<fgkNAnodes;ian+=2){
146 if(!fGoodAnode[ian]) continue;
147 sumOdd+=hrawd->GetBinContent(itb+1,ian+1)-sum[ian];
150 cmnEven[itb]=sumEven/countEven;
151 cmnOdd[itb]=sumOdd/countOdd;
153 for(Int_t ian=0;ian<fgkNAnodes;ian++){
154 Float_t num=0.,den=0.;
155 if(!fGoodAnode[ian]) continue;
156 for(Int_t itb=0;itb<tbmax;itb++){
157 Float_t cmnCoef=cmnOdd[itb];
158 if(ian%2==0) cmnCoef=cmnEven[itb];
159 num+=(hrawd->GetBinContent(itb+1,ian+1)-sum[ian])*cmnCoef;
160 den+=TMath::Power(cmnCoef,2);
162 if(den!=0) fSumCMN[ian]+=num/den;
167 //______________________________________________________________________
168 Float_t AliITSOnlineSDDBTP::CalcMeanRawNoise() const{
172 for(Int_t ian=0;ian<fgkNAnodes;ian++){
173 if(!fGoodAnode[ian]) continue;
174 meanns+=GetAnodeRawNoise(ian);
177 if(cnt>0) meanns/=(Float_t)cnt;
180 //______________________________________________________________________
181 void AliITSOnlineSDDBTP::StatGain(Float_t &mean, Float_t &rms){
183 Float_t sum=0.,sumq=0.;
185 for(Int_t ian=0;ian<fgkNAnodes;ian++){
186 if(!fGoodAnode[ian]) continue;
187 sum+=GetChannelGain(ian);
188 sumq+=TMath::Power(GetChannelGain(ian),2);
192 mean=sum/(Float_t)cnt;
193 rms=TMath::Sqrt(sumq/(Float_t)cnt-mean*mean);
200 //______________________________________________________________________
201 void AliITSOnlineSDDBTP::WriteToASCII(){
203 Char_t outfilnam[100];
204 sprintf(outfilnam,"SDDbase_mod%03d_sid%d.data",fModuleId,fSide);
205 FILE* outf=fopen(outfilnam,"w");
206 Float_t corrnoise=2.;
207 for(Int_t ian=0;ian<fgkNAnodes;ian++){
208 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));