+
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
#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)
+
{
//constructor
- AliT0Parameters* param = AliT0Parameters::Instance();
- param->Init();
+ 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;
//
}
//____________________________________________________________________
-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;
}