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 "AliITSOnlineSDDCMN.h"
21 ///////////////////////////////////////////////////////////////////
23 // Implementation of the class used for analysis of SDD noise //
24 // corrected for common mode //
25 // Origin: F.Prino, Torino, prino@to.infn.it //
27 ///////////////////////////////////////////////////////////////////
30 ClassImp(AliITSOnlineSDDCMN)
31 //______________________________________________________________________
32 AliITSOnlineSDDCMN::AliITSOnlineSDDCMN():AliITSOnlineSDD(),fNEvents(0),fMinCorrNoise(0.),fMaxCorrNoise(0.),fNSigmaNoise(0.)
34 // default constructor
40 //______________________________________________________________________
41 AliITSOnlineSDDCMN::AliITSOnlineSDDCMN(Int_t mod, Int_t sid):AliITSOnlineSDD(mod,sid),fNEvents(0),fMinCorrNoise(0.),fMaxCorrNoise(0.),fNSigmaNoise(0.)
43 // default constructor
49 //______________________________________________________________________
50 AliITSOnlineSDDCMN::~AliITSOnlineSDDCMN(){
53 //______________________________________________________________________
54 void AliITSOnlineSDDCMN::Reset(){
56 for(Int_t i=0;i<fgkNAnodes;i++){
64 //______________________________________________________________________
65 void AliITSOnlineSDDCMN::ReadBaselines(){
66 // assume baselines and good anodes are taken from previous run
67 Char_t basfilnam[100];
68 sprintf(basfilnam,"SDDbase_step1_mod%03d_sid%d.data",fModuleId,fSide);
69 FILE* basf=fopen(basfilnam,"r");
71 AliWarning("Baselinefile not present, Set all baselines to 50\n");
72 for(Int_t ian=0;ian<fgkNAnodes;ian++){
79 Float_t base,rms,cmn,corrnoi;
80 for(Int_t ian=0;ian<fgkNAnodes;ian++){
81 fscanf(basf,"%d %d %f %f %f %f\n",&n,&ok,&base,&rms,&cmn,&corrnoi);
89 //______________________________________________________________________
90 void AliITSOnlineSDDCMN::ValidateAnodes(){
91 for(Int_t ian=0;ian<fgkNAnodes;ian++){
92 if(!fGoodAnode[ian]) continue;
93 if(GetAnodeCorrNoise(ian)>fMaxCorrNoise || GetAnodeCorrNoise(ian)<fMinCorrNoise) fGoodAnode[ian]=0;
94 if(GetAnodeCorrNoise(ian)>fNSigmaNoise*CalcMeanNoise()) fGoodAnode[ian]=0;
98 //______________________________________________________________________
99 void AliITSOnlineSDDCMN::AddEvent(TH2F* hrawd){
102 Float_t tbmax=(Float_t)hrawd->GetNbinsX();
103 TH2F* hcorrd=new TH2F("hcorrd","",hrawd->GetNbinsX(),hrawd->GetXaxis()->GetXmin(),hrawd->GetXaxis()->GetXmax(),hrawd->GetNbinsY(),hrawd->GetYaxis()->GetXmin(),hrawd->GetYaxis()->GetXmax());
104 for(Int_t itb=0;itb<tbmax;itb++){
105 Float_t sumEven=0., sumOdd=0.;
106 Int_t countEven=0, countOdd=0;
107 for(Int_t ian=0;ian<fgkNAnodes;ian+=2){
108 if(!fGoodAnode[ian]) continue;
109 sumEven+=hrawd->GetBinContent(itb+1,ian+1)-fBaseline[ian];
112 for(Int_t ian=1;ian<fgkNAnodes;ian+=2){
113 if(!fGoodAnode[ian]) continue;
114 sumOdd+=hrawd->GetBinContent(itb+1,ian+1)-fBaseline[ian];
117 for(Int_t ian=0;ian<fgkNAnodes;ian++){
118 if(!fGoodAnode[ian]) continue;
120 if(ian%2==0) meanN=sumEven/(Float_t)countEven;
121 else meanN=sumOdd/(Float_t)countOdd;
122 Float_t cntCorr=hrawd->GetBinContent(itb+1,ian+1)-fCMN[ian]*meanN;
123 hcorrd->SetBinContent(itb+1,ian+1,cntCorr);
127 for(Int_t ian=0;ian<fgkNAnodes;ian++){
128 if(!fGoodAnode[ian]) continue;
130 for(Int_t itb=0;itb<tbmax;itb++){
131 sumQ+=TMath::Power(hcorrd->GetBinContent(itb+1,ian+1)-fBaseline[ian],2);
133 fSumCorrNoise[ian]+=TMath::Sqrt(sumQ/tbmax);
137 //______________________________________________________________________
138 Float_t AliITSOnlineSDDCMN::CalcMeanNoise(){
142 for(Int_t ian=0;ian<fgkNAnodes;ian++){
143 if(!fGoodAnode[ian]) continue;
144 meanns+=GetAnodeCorrNoise(ian);
147 if(cnt>0) meanns/=(Float_t)cnt;
150 //______________________________________________________________________
151 void AliITSOnlineSDDCMN::WriteToFXS(){
153 Char_t outfilnam[100];
154 sprintf(outfilnam,"SDDbase_step2_mod%03d_sid%d.data",fModuleId,fSide);
155 FILE* outf=fopen(outfilnam,"w");
156 for(Int_t ian=0;ian<fgkNAnodes;ian++){
157 fprintf(outf,"%d %d %8.3f %8.3f %8.3f %8.3f\n",ian,IsAnodeGood(ian),GetAnodeBaseline(ian),GetAnodeRawNoise(ian),GetAnodeCommonMode(ian),GetAnodeCorrNoise(ian));