]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - VZERO/AliVZEROReconstructor.cxx
Set flag to kFALSE after compression
[u/mrichter/AliRoot.git] / VZERO / AliVZEROReconstructor.cxx
index 0d5f98c52335d074cb61a71557cea29de06e4c9d..b57f314237de8b9e55dcb58c659208786f97fde0 100644 (file)
@@ -53,6 +53,7 @@ AliVZEROReconstructor:: AliVZEROReconstructor(): AliReconstructor(),
                         fESDVZEROfriend(0x0),
                         fCalibData(NULL),
                         fTimeSlewing(NULL),
+                        fSaturationCorr(NULL),
                         fCollisionMode(0),
                         fBeamEnergy(0.),
                         fDigitsArray(0)
@@ -94,6 +95,10 @@ AliVZEROReconstructor:: AliVZEROReconstructor(): AliReconstructor(),
                       delays->GetBinContent(i+1)+
                       kV0Offset);
   }
+
+  AliCDBEntry *entry5 =  AliCDBManager::Instance()->Get("VZERO/Calib/Saturation");
+  if (!entry5) AliFatal("Saturation entry is not found in OCDB !");
+  fSaturationCorr = (TObjArray*)entry5->GetObject();
 }
 
 
@@ -194,7 +199,10 @@ void AliVZEROReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digits
        fESDVZEROfriend->SetBBMBFlag(offlineCh,iBunch,rawStream.GetBBMBFlag(iChannel,iBunch));
        fESDVZEROfriend->SetBGMBFlag(offlineCh,iBunch,rawStream.GetBGMBFlag(iChannel,iBunch));
       }
-
+      for (Int_t iEv = 0; iEv < AliESDVZEROfriend::kNEvOfInt; iEv++) {
+         fESDVZEROfriend->SetBBFlag(offlineCh,iEv,rawStream.GetBBFlag(iChannel,iEv));
+         fESDVZEROfriend->SetBGFlag(offlineCh,iEv,rawStream.GetBGFlag(iChannel,iEv));
+      }
     }  
 
     // Filling the global part of esd friend object that is available only for raw data
@@ -347,14 +355,15 @@ void AliVZEROReconstructor::FillESD(TTree* digitsTree, TTree* /*clustersTree*/,
                          aBBflag[pmNumber],aBGflag[pmNumber]));
            };
 
-       mult[pmNumber] = adc[pmNumber]*fCalibData->GetMIPperADC(pmNumber);
+       TF1 *saturationFunc = (TF1*)fSaturationCorr->UncheckedAt(pmNumber);
+       if (!saturationFunc) AliFatal(Form("Saturation correction for channel %d is not found!",pmNumber));
+       AliDebug(1,Form("Saturation PM=%d   %f %f",pmNumber,adc[pmNumber],saturationFunc->Eval(adc[pmNumber])));
+       mult[pmNumber] = saturationFunc->Eval(adc[pmNumber])*fCalibData->GetMIPperADC(pmNumber);
 
        // Fill ESD friend object
        for (Int_t iEv = 0; iEv < AliESDVZEROfriend::kNEvOfInt; iEv++) {
          fESDVZEROfriend->SetPedestal(pmNumber,iEv,(Float_t)digit->ChargeADC(iEv));
          fESDVZEROfriend->SetIntegratorFlag(pmNumber,iEv,(iEv%2 == 0) ? integrator : !integrator);
-         fESDVZEROfriend->SetBBFlag(pmNumber,iEv,aBBflag[pmNumber]);
-         fESDVZEROfriend->SetBGFlag(pmNumber,iEv,aBGflag[pmNumber]);
        }
        fESDVZEROfriend->SetTime(pmNumber,digit->Time());
        fESDVZEROfriend->SetWidth(pmNumber,digit->Width());
@@ -370,6 +379,7 @@ void AliVZEROReconstructor::FillESD(TTree* digitsTree, TTree* /*clustersTree*/,
   fESDVZERO->SetBit(AliESDVZERO::kOnlineBitsFilled,kTRUE);
   fESDVZERO->SetBBFlag(aBBflag);
   fESDVZERO->SetBGFlag(aBGflag);
+  fESDVZERO->SetBit(AliESDVZERO::kCorrectedForSaturation,kTRUE);
 
   // now fill the V0 decision and channel flags
   {
@@ -481,7 +491,7 @@ Float_t AliVZEROReconstructor::CorrectLeadingTime(Int_t i, Float_t time, Float_t
   if (adc < 1e-6) return time;
 
   // Slewing correction
-  Float_t thr = fCalibData->GetDiscriThr(i);
+  Float_t thr = fCalibData->GetCalibDiscriThr(i,kTRUE);
   time -= fTimeSlewing->Eval(adc/thr);
 
   return time;