]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSOnlineSDDBase.cxx
Added SDD DA (ITSSDDBASda.cxx). Possibility of writing the output of AliITSOnlineSDDC...
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDBase.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 "AliITSOnlineSDDBase.h"
16#include <TH2F.h>
17#include <TMath.h>
18
19
20///////////////////////////////////////////////////////////////////
21// //
22// Implementation of the class used for SDD baselines //
23// and noise analysis //
24// Origin: F.Prino, Torino, prino@to.infn.it //
25// //
26///////////////////////////////////////////////////////////////////
27
28
29ClassImp(AliITSOnlineSDDBase)
30//______________________________________________________________________
31 AliITSOnlineSDDBase::AliITSOnlineSDDBase():AliITSOnlineSDD(),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.)
32{
33 // default constructor
34 Reset();
35 SetMinBaseline();
36 SetMaxBaseline();
37 SetMinRawNoise();
38 SetMaxRawNoise();
39 SetNSigmaNoise();
40}
41//______________________________________________________________________
42 AliITSOnlineSDDBase::AliITSOnlineSDDBase(Int_t mod, Int_t sid):AliITSOnlineSDD(mod,sid),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.)
43{
44 // default constructor
45 Reset();
46 SetMinBaseline();
47 SetMaxBaseline();
48 SetMinRawNoise();
49 SetMaxRawNoise();
50 SetNSigmaNoise();
51}
52//______________________________________________________________________
53AliITSOnlineSDDBase::~AliITSOnlineSDDBase(){
54 // Destructor
55}
56//______________________________________________________________________
57void AliITSOnlineSDDBase::Reset(){
beb262b4 58 //
348f80b7 59 fNEvents=0;
60 for(Int_t i=0;i<fgkNAnodes;i++){
61 fGoodAnode[i]=1;
62 fSumBaseline[i]=0.;
63 fSumRawNoise[i]=0.;
64 fSumCMN[i]=0.;
65 }
66}
67//______________________________________________________________________
68void AliITSOnlineSDDBase::ValidateAnodes(){
beb262b4 69 //
348f80b7 70 for(Int_t ian=0;ian<fgkNAnodes;ian++){
71 fGoodAnode[ian]=1;
72 if(GetAnodeBaseline(ian)>fMaxBaseline || GetAnodeBaseline(ian)<fMinBaseline) fGoodAnode[ian]=0;
73 if(GetAnodeRawNoise(ian)>fMaxRawNoise || GetAnodeRawNoise(ian)<fMinRawNoise) fGoodAnode[ian]=0;
74 if(GetAnodeRawNoise(ian)>fNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0;
75 }
76}
77
78//______________________________________________________________________
79void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){
80 //
81 fNEvents++;
82 Float_t tbmax=(Float_t)hrawd->GetNbinsX();
83 Float_t sum[fgkNAnodes];
84 for(Int_t ian=0;ian<fgkNAnodes;ian++){
85 Float_t sumQ=0.;
86 sum[ian]=0.;
87 for(Int_t itb=0;itb<tbmax;itb++){
88 sum[ian]+=hrawd->GetBinContent(itb+1,ian+1);
89 sumQ+=TMath::Power(hrawd->GetBinContent(itb+1,ian+1),2);
90 }
91 sum[ian]/=tbmax;
92 sumQ/=tbmax;
93 fSumBaseline[ian]+=sum[ian];
94 fSumRawNoise[ian]+=sumQ;
95 if(fNEvents==1) ValidateAnodes();
96 }
97
98
beb262b4 99 const Int_t kTbmax=int(tbmax);
100 Float_t *cmnEven = new Float_t[kTbmax];
101 Float_t *cmnOdd = new Float_t[kTbmax];
348f80b7 102 for(Int_t itb=0;itb<tbmax;itb++){
103 Float_t sumEven=0., sumOdd=0.;
104 Int_t countEven=0,countOdd=0;
105 for(Int_t ian=0;ian<fgkNAnodes;ian+=2){
106 if(!fGoodAnode[ian]) continue;
107 sumEven+=hrawd->GetBinContent(itb+1,ian+1)-sum[ian];
108 countEven++;
109 }
110 for(Int_t ian=1;ian<fgkNAnodes;ian+=2){
111 if(!fGoodAnode[ian]) continue;
112 sumOdd+=hrawd->GetBinContent(itb+1,ian+1)-sum[ian];
113 countOdd++;
114 }
115 cmnEven[itb]=sumEven/countEven;
116 cmnOdd[itb]=sumOdd/countOdd;
117 }
118 for(Int_t ian=0;ian<fgkNAnodes;ian++){
119 Float_t num=0.,den=0.;
120 if(!fGoodAnode[ian]) continue;
121 for(Int_t itb=0;itb<tbmax;itb++){
122 Float_t cmnCoef=cmnOdd[itb];
123 if(ian%2==0) cmnCoef=cmnEven[itb];
124 num+=(hrawd->GetBinContent(itb+1,ian+1)-sum[ian])*cmnCoef;
125 den+=TMath::Power(cmnCoef,2);
126 }
127 if(den!=0) fSumCMN[ian]+=num/den;
128 }
129
130 delete [] cmnEven;
131 delete [] cmnOdd;
132}
133//______________________________________________________________________
beb262b4 134Float_t AliITSOnlineSDDBase::CalcMeanRawNoise() const{
348f80b7 135 //
136 Float_t meanns=0.;
137 Int_t cnt=0;
138 for(Int_t ian=0;ian<fgkNAnodes;ian++){
139 if(!fGoodAnode[ian]) continue;
140 meanns+=GetAnodeRawNoise(ian);
141 cnt++;
142 }
143 if(cnt>0) meanns/=(Float_t)cnt;
144 return meanns;
145}
146//______________________________________________________________________
e44f571c 147void AliITSOnlineSDDBase::WriteToASCII(){
348f80b7 148 //
149 Char_t outfilnam[100];
150 sprintf(outfilnam,"SDDbase_step1_mod%03d_sid%d.data",fModuleId,fSide);
151 FILE* outf=fopen(outfilnam,"w");
152 Float_t corrnoise=2.;
153 for(Int_t ian=0;ian<fgkNAnodes;ian++){
7f347565 154 fprintf(outf,"%d %d %11.6f %11.6f %11.6f %11.6f\n",ian,IsAnodeGood(ian),GetAnodeBaseline(ian),GetAnodeRawNoise(ian),GetAnodeCommonMode(ian),corrnoise);
348f80b7 155 }
156 fclose(outf);
157}