]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSOnlineSDDBase.cxx
Fix to return the TOF cluster index (Francesco)
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDBase.cxx
index ec9c0164b04c3964f9f4042eb3c4e67b2715c250..15d619da88980d472529b5608be21fbe89584523 100644 (file)
@@ -62,7 +62,7 @@ AliITSOnlineSDDBase::~AliITSOnlineSDDBase(){
 }
 //______________________________________________________________________
 void AliITSOnlineSDDBase::Reset(){
-  //
+  // reset all counters
   fNEvents=0;
   for(Int_t i=0;i<fgkNAnodes;i++){
     fGoodAnode[i]=1;
@@ -73,34 +73,44 @@ void AliITSOnlineSDDBase::Reset(){
 }
 //______________________________________________________________________
 void  AliITSOnlineSDDBase::ValidateAnodes(){
-  //
+  // tag good/bad channels
   for(Int_t ian=0;ian<fgkNAnodes;ian++){
     fGoodAnode[ian]=1;
-    if(GetAnodeBaseline(ian)>fMaxBaseline || GetAnodeBaseline(ian)<fMinBaseline) fGoodAnode[ian]=0;
-    else if(GetAnodeRawNoise(ian)>fMaxRawNoise || GetAnodeRawNoise(ian)<fMinRawNoise) fGoodAnode[ian]=0;
-    else if(GetAnodeRawNoise(ian)>fNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0;
+    Float_t basel=GetAnodeBaseline(ian);
+    Float_t rawn=GetAnodeRawNoise(ian);
+    Float_t ratio=0.;
+    if(rawn>0) ratio=basel/rawn;
+    if(basel>fMaxBaseline || basel<fMinBaseline) fGoodAnode[ian]=0;
+    else if(rawn>fMaxRawNoise || rawn<fMinRawNoise) fGoodAnode[ian]=0;
+    else if(rawn>fNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0;
+    else if(ratio<3.) fGoodAnode[ian]=0;
   }
 }
 
 //______________________________________________________________________
 void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){
-  // 
+  // analyzes one event and adds its ontribution to the various counters
+
   fNEvents++;
   const Int_t kTimeBins=fLastGoodTB+1;
   Float_t sum[fgkNAnodes];
   for(Int_t ian=0;ian<fgkNAnodes;ian++){
     Float_t sumQ=0.;
     sum[ian]=0.;
+    Int_t cnt=0;
     for(Int_t itb=fFirstGoodTB;itb<=fLastGoodTB;itb++){
-      sum[ian]+=hrawd->GetBinContent(itb+1,ian+1);
-      sumQ+=TMath::Power(hrawd->GetBinContent(itb+1,ian+1),2);      
+      Float_t cbin=hrawd->GetBinContent(itb+1,ian+1);
+      sum[ian]+=cbin;
+      sumQ+=cbin*cbin;
+      cnt++;
+    }
+    if(cnt != 0){
+      sum[ian]/=(Float_t)cnt;
+      sumQ/=(Float_t)cnt;
     }
-    sum[ian]/=(Float_t)kTimeBins;
-    sumQ/=(Float_t)kTimeBins;
     fSumBaseline[ian]+=sum[ian];
     fSumRawNoise[ian]+=sumQ;
   }
-
   if(fNEvents==1) ValidateAnodes();
 
   Float_t *cmnEven = new Float_t[kTimeBins];
@@ -128,7 +138,7 @@ void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){
       Float_t cmnCoef=cmnOdd[itb];
       if(ian%2==0) cmnCoef=cmnEven[itb];
       num+=(hrawd->GetBinContent(itb+1,ian+1)-sum[ian])*cmnCoef;
-      den+=TMath::Power(cmnCoef,2);
+      den+=cmnCoef*cmnCoef;
     }
     if(den!=0) fSumCMN[ian]+=num/den;
   }
@@ -161,7 +171,7 @@ Float_t AliITSOnlineSDDBase::GetMinimumBaseline() const {
 }
 //______________________________________________________________________
 Float_t AliITSOnlineSDDBase::CalcMeanRawNoise() const{
-  //
+  // compute mean value of raw noise
   Float_t meanns=0.;
   Int_t cnt=0;
   for(Int_t ian=0;ian<fgkNAnodes;ian++){
@@ -174,20 +184,24 @@ Float_t AliITSOnlineSDDBase::CalcMeanRawNoise() const{
 }
 //______________________________________________________________________
 void AliITSOnlineSDDBase::WriteToASCII(){
-  //
-  Char_t outfilnam[100];
+  // writes parameters of each channel into an ASCII file 
+  // to be then read in the successive step for common mode noise
+  // correction (AliITSOnlineSDDCMN)
+
+  TString outfilnam;
   Float_t basMin,basMax;
   GetMinAndMaxBaseline(basMin,basMax);
   Float_t finalVal=basMin;
   if(basMin>fGoldenBaseline && basMax<fGoldenBaseline+fgkMaxCorr) finalVal=fGoldenBaseline;
   if(basMax<basMin+fgkMaxCorr && basMax>fGoldenBaseline+fgkMaxCorr) finalVal=basMax-fgkMaxCorr;
-  
+
   Float_t avNoise=CalcMeanRawNoise();
   Int_t thrL=(Int_t)(finalVal+fLowThrFact*avNoise+0.5);
   Int_t thrH=(Int_t)(finalVal+fHighThrFact*avNoise+0.5);
+  if(CountGoodAnodes()==0) thrH=255;
 
-  sprintf(outfilnam,"SDDbase_step1_ddl%02dc%02d_sid%d.data",fDDL,fCarlos,fSide);
-  FILE* outf=fopen(outfilnam,"w");
+  outfilnam.Form("SDDbase_step1_ddl%02dc%02d_sid%d.data",fDDL,fCarlos,fSide);
+  FILE* outf=fopen(outfilnam.Data(),"w");
   fprintf(outf,"%d\n",thrH);
   fprintf(outf,"%d\n",thrL);
   Float_t corrnoise=2.;