]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - T0/AliT0Calibrator.cxx
Added QA for digits during reconstruction (Yves)
[u/mrichter/AliRoot.git] / T0 / AliT0Calibrator.cxx
index 8c78f167e4a9cd158cbcc4e80f70158e6236435e..6cae77ac84c4ecef523a6346a108396c26049f19 100644 (file)
@@ -1,3 +1,4 @@
+
 /**************************************************************************
  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  *                                                                        *
  **************************************************************************/
 
 /* $Id$ */
-
-#include <Riostream.h>
+/***********************************************************************
+ *      this class doing calibration during reconstruction 
+ *      2 steps:
+ *      - equalizing channels
+ *      - applying walk corrections
+ *
+ * Alla.Maevskaya@cern.ch
+ *
+ **********************************************************************/      
+//#include <Riostream.h>
 
 #include "AliLog.h"
 #include "AliT0Parameters.h"
 #include "AliT0Calibrator.h"
-#include <TArrayI.h>
 #include <TGraph.h>
 #include <TH1F.h>
+#include <TMath.h>
+#include <Riostream.h>
 
 ClassImp(AliT0Calibrator)
 
 //____________________________________________________________________
   AliT0Calibrator::AliT0Calibrator():TNamed(),
-  fChannelWidth(0),  
-  fWalk(0)
+                                    fChannelWidth(0),  
+                                    fWalk(0)
+                                    
 {
-  AliT0Parameters* param = AliT0Parameters::Instance();
-  param->Init();
+  //constructor
+
+   AliT0Parameters* param = AliT0Parameters::Instance();
+   param->Init();
   
   fChannelWidth = param->GetChannelWidth() ;  
+  Double_t *grY ; //= new grY[2500] ;
+  // Double_t *grX ;
+  Int_t index[25000];
+  Bool_t down=true;
   for (Int_t i=0; i<24; i++){
+    fMaxValue[i]=0;
     fTimeDelayCFD[i] = Int_t (param->GetTimeDelayCFD(i));
+     
     TGraph* fu = param ->GetWalk(i);
-    fWalk.AddAtAndExpand(fu,i);
-
+     //    TGraph* fu  = param ->GetAmpLEDRec(i);
+       fWalk.AddAtAndExpand(fu,i);
+       
+  if(fu) {
+      Int_t np=fu->GetN();
+      if(np>0) {
+       grY = fu->GetY();
+       //      grX[i] = fu->GetX();
+       TMath::Sort(np, grY, index,down);
+       fMaxValue[i]=Int_t(grY[index[0]]);
+
+      }
+    }
+       
   }
+
+  //  delete [] grY;
+  //  delete [] grX;
   
   //
 }
@@ -75,20 +109,34 @@ AliT0Calibrator &AliT0Calibrator::operator=(const AliT0Calibrator &r)
 
 
 //____________________________________________________________________
-Int_t  AliT0Calibrator::WalkCorrection(Int_t ipmt, Int_t qt, Int_t time) 
+Int_t  AliT0Calibrator::WalkCorrection(Int_t ipmt, Int_t qt, Int_t time, TString option
 {
   //slewing correcion and equalizing channels
 
+  Int_t walk=0;
+
   Int_t timeEq=0, timeWalk=0;  
-  TGraph *fu1=(TGraph*) fWalk.At(ipmt);
-  Float_t walk=fu1->Eval(Float_t(qt));
-  TH1F*hr=fu1->GetHistogram();
-  Float_t maxValue=hr->GetMaximum(50);
-  timeWalk = time + Int_t((maxValue-walk)/fChannelWidth) ;
-  
-  timeEq= timeWalk - (fTimeDelayCFD[ipmt]-fTimeDelayCFD[0]);
-  AliDebug(10,Form(" time before %i timeWalk %i ,  qt %i timeEq %i \n ",
-                 time,timeWalk, qt, timeEq ));
+  //  TGraph* fu1 = param ->GetWalk(ipmt);
+  //   TGraph* fu1  = param ->GetAmpLEDRec(ipmt);
+   TGraph *fu1=(TGraph*) fWalk.At(ipmt);
+  if(fu1 && fu1->GetN()>0) {
+    walk=Int_t(fu1->Eval(Double_t(qt)));
+  }
+  if (option == "pdc") {
+    timeWalk = time + Int_t(fMaxValue[ipmt]-walk) ;
+    //    timeEq= timeWalk - fTimeDelayCFD[ipmt];
+    timeEq= timeWalk - fTimeDelayCFD[ipmt]; //for the same as cosmic
+     AliDebug(10,Form(" ipmt %i time before %i timeWalk %i ,  qt %i timeEq %i \n ",
+                ipmt, time,timeWalk, qt, timeEq ));
+  }
+  if (option == "cosmic") {
+    timeWalk = time + Int_t((fMaxValue[ipmt]-walk)) ;
+    if(walk <1  )  timeWalk = time  ;
+     timeEq= timeWalk - fTimeDelayCFD[ipmt];
+     AliDebug(10,Form(" ipmt %i time before %i timeWalk %i ,  qt %i timeEq %i \n ",
+                ipmt, time,timeWalk, qt, timeEq ));
+  }
   return timeEq;
 }