]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSOnlineSDDBase.cxx
Update of warning/debug messages in SDD simulation
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDBase.cxx
index d53d0325bfbbd1c5e583deeaed4bf18591726829..f1fdd586bf32e2965152f0f1ba769b0fecd3a30f 100644 (file)
 //                                                               //
 ///////////////////////////////////////////////////////////////////
 
+/*  $Id$   */
+
+const Int_t AliITSOnlineSDDBase::fgkMaxCorr=63; // 6 but correction
 
 ClassImp(AliITSOnlineSDDBase)
 //______________________________________________________________________
-  AliITSOnlineSDDBase::AliITSOnlineSDDBase():AliITSOnlineSDD(),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.)
+  AliITSOnlineSDDBase::AliITSOnlineSDDBase():AliITSOnlineSDD(),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.),fGoldenBaseline(0.),fLowThrFact(0.),fHighThrFact(0.)
 {
   // default constructor
   Reset();
@@ -37,9 +40,11 @@ ClassImp(AliITSOnlineSDDBase)
   SetMinRawNoise();
   SetMaxRawNoise();
   SetNSigmaNoise();
+  SetGoldenBaselineValue();
+  SetZeroSuppThresholds();
 }
 //______________________________________________________________________
-  AliITSOnlineSDDBase::AliITSOnlineSDDBase(Int_t mod, Int_t sid):AliITSOnlineSDD(mod,sid),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.)
+AliITSOnlineSDDBase::AliITSOnlineSDDBase(Int_t nddl, Int_t ncarlos, Int_t sid):AliITSOnlineSDD(nddl,ncarlos,sid),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.),fGoldenBaseline(0.),fLowThrFact(0.),fHighThrFact(0.)
 {
   // default constructor
   Reset();
@@ -48,6 +53,8 @@ ClassImp(AliITSOnlineSDDBase)
   SetMinRawNoise();
   SetMaxRawNoise();
   SetNSigmaNoise();
+  SetGoldenBaselineValue();
+  SetZeroSuppThresholds();
 }
 //______________________________________________________________________
 AliITSOnlineSDDBase::~AliITSOnlineSDDBase(){
@@ -70,8 +77,8 @@ void  AliITSOnlineSDDBase::ValidateAnodes(){
   for(Int_t ian=0;ian<fgkNAnodes;ian++){
     fGoodAnode[ian]=1;
     if(GetAnodeBaseline(ian)>fMaxBaseline || GetAnodeBaseline(ian)<fMinBaseline) fGoodAnode[ian]=0;
-    if(GetAnodeRawNoise(ian)>fMaxRawNoise || GetAnodeRawNoise(ian)<fMinRawNoise) fGoodAnode[ian]=0;
-    if(GetAnodeRawNoise(ian)>fNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0;
+    else if(GetAnodeRawNoise(ian)>fMaxRawNoise || GetAnodeRawNoise(ian)<fMinRawNoise) fGoodAnode[ian]=0;
+    else if(GetAnodeRawNoise(ian)>fNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0;
   }
 }
 
@@ -79,27 +86,28 @@ void  AliITSOnlineSDDBase::ValidateAnodes(){
 void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){
   // 
   fNEvents++;
-  Float_t tbmax=(Float_t)hrawd->GetNbinsX();
+  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.;
-    for(Int_t itb=0;itb<tbmax;itb++){
+    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);      
+      sumQ+=TMath::Power(hrawd->GetBinContent(itb+1,ian+1),2);
+      cnt++;
     }
-    sum[ian]/=tbmax;
-    sumQ/=tbmax;
+    sum[ian]/=(Float_t)cnt;
+    sumQ/=(Float_t)cnt;
     fSumBaseline[ian]+=sum[ian];
     fSumRawNoise[ian]+=sumQ;
-    if(fNEvents==1) ValidateAnodes();
   }
 
+  if(fNEvents==1) ValidateAnodes();
 
-  const Int_t kTbmax=int(tbmax);
-  Float_t *cmnEven = new Float_t[kTbmax];
-  Float_t *cmnOdd  = new Float_t[kTbmax];
-  for(Int_t itb=0;itb<tbmax;itb++){
+  Float_t *cmnEven = new Float_t[kTimeBins];
+  Float_t *cmnOdd  = new Float_t[kTimeBins];
+  for(Int_t itb=fFirstGoodTB;itb<=fLastGoodTB;itb++){
     Float_t sumEven=0., sumOdd=0.;
     Int_t countEven=0,countOdd=0;
     for(Int_t ian=0;ian<fgkNAnodes;ian+=2){
@@ -112,13 +120,13 @@ void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){
       sumOdd+=hrawd->GetBinContent(itb+1,ian+1)-sum[ian];
       countOdd++;
     }
-    cmnEven[itb]=sumEven/countEven;
-    cmnOdd[itb]=sumOdd/countOdd;
+    if(countEven>0) cmnEven[itb]=sumEven/countEven;
+    if(countOdd>0) cmnOdd[itb]=sumOdd/countOdd;
   }
   for(Int_t ian=0;ian<fgkNAnodes;ian++){
     Float_t num=0.,den=0.;
     if(!fGoodAnode[ian]) continue;
-    for(Int_t itb=0;itb<tbmax;itb++){
+    for(Int_t itb=fFirstGoodTB;itb<=fLastGoodTB;itb++){
       Float_t cmnCoef=cmnOdd[itb];
       if(ian%2==0) cmnCoef=cmnEven[itb];
       num+=(hrawd->GetBinContent(itb+1,ian+1)-sum[ian])*cmnCoef;
@@ -131,6 +139,29 @@ void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){
   delete [] cmnOdd;
 }
 //______________________________________________________________________
+void AliITSOnlineSDDBase::GetMinAndMaxBaseline(Float_t &basMin, Float_t &basMax) const {
+  // fills mininum and maximum baseline values
+  basMin=1008.;
+  basMax=0.;
+  for(Int_t ian=0;ian<fgkNAnodes;ian++){
+    if(!fGoodAnode[ian]) continue;
+    Float_t bas=GetAnodeBaseline(ian);
+    if(bas>0 && bas < basMin) basMin=bas;
+    if(bas>0 && bas > basMax) basMax=bas;
+  }
+}
+//______________________________________________________________________
+Float_t AliITSOnlineSDDBase::GetMinimumBaseline() const {
+  // returns anode with minum baseline value in hybrid
+  Float_t basMin=1008.;
+  for(Int_t ian=0;ian<fgkNAnodes;ian++){
+    if(!fGoodAnode[ian]) continue;
+    Float_t bas=GetAnodeBaseline(ian);
+    if(bas>0 && bas < basMin) basMin=bas;
+  }
+  return basMin;
+}
+//______________________________________________________________________
 Float_t AliITSOnlineSDDBase::CalcMeanRawNoise() const{
   //
   Float_t meanns=0.;
@@ -144,14 +175,31 @@ Float_t AliITSOnlineSDDBase::CalcMeanRawNoise() const{
   return meanns;
 }
 //______________________________________________________________________
-void AliITSOnlineSDDBase::WriteToFXS(){
+void AliITSOnlineSDDBase::WriteToASCII(){
   //
   Char_t outfilnam[100];
-  sprintf(outfilnam,"SDDbase_step1_mod%03d_sid%d.data",fModuleId,fSide);
+  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");
+  fprintf(outf,"%d\n",thrH);
+  fprintf(outf,"%d\n",thrL);
   Float_t corrnoise=2.;
   for(Int_t ian=0;ian<fgkNAnodes;ian++){
-    fprintf(outf,"%d %d %11.6f %11.6f %11.6f %11.6f\n",ian,IsAnodeGood(ian),GetAnodeBaseline(ian),GetAnodeRawNoise(ian),GetAnodeCommonMode(ian),corrnoise);
+    Float_t bas=GetAnodeBaseline(ian);
+    Int_t corr=(Int_t)(bas-finalVal+0.5);
+    if(corr>fgkMaxCorr) corr=fgkMaxCorr; // only 6 bits in jtag for correction
+    if(corr<0) corr=0; // avoid negative numbers
+    fprintf(outf,"%d %d %11.6f %d %d %11.6f %11.6f %11.6f\n",ian,IsAnodeGood(ian),GetAnodeBaseline(ian),(Int_t)finalVal,corr,GetAnodeRawNoise(ian),GetAnodeCommonMode(ian),corrnoise);
   }
   fclose(outf);  
 }