+//_________________________________________________________________________
+void AliTOFClusterFinder::CalibrateRecPoint()
+{
+ //
+ // Copy the global array of AliTOFcluster, i.e. fTofClusters (sorted
+ // in Z) in the global TClonesArray of AliTOFcluster,
+ // i.e. fRecPoints.
+ //
+
+ Int_t ii, jj;
+
+ Int_t detectorIndex[5];
+ Int_t digitIndex = -1;
+ Double_t tToT;
+ Double_t timeCorr;
+ Int_t tdcCorr;
+ AliInfo(" Calibrating TOF Clusters: ")
+
+ AliTOFChannelOnlineArray *calDelay = fTOFcalib->GetTOFOnlineDelay();
+ AliTOFChannelOnlineStatusArray *calStatus = fTOFcalib->GetTOFOnlineStatus();
+ TObjArray *calTOFArrayOffline = fTOFcalib->GetTOFCalArrayOffline();
+ TString validity = (TString)fTOFcalib->GetOfflineValidity();
+ AliInfo(Form(" validity = %s",validity.Data()));
+ Int_t calibration = -1;
+ if (validity.CompareTo("valid")==0) {
+ AliInfo(" Using offline calibration parameters");
+ calibration = 1;
+ }
+ else {
+ AliInfo(" Using online calibration parameters");
+ calibration = 0 ;
+ }
+ for (ii=0; ii<fNumberOfTofClusters; ii++) {
+ digitIndex = fTofClusters[ii]->GetIndex();
+ for(jj=0; jj<5; jj++) detectorIndex[jj] = fTofClusters[ii]->GetDetInd(jj);
+
+ Int_t index = AliTOFGeometry::GetIndex(detectorIndex);
+
+ UChar_t statusPulser=calStatus->GetPulserStatus(index);
+ UChar_t statusNoise=calStatus->GetNoiseStatus(index);
+ UChar_t statusHW=calStatus->GetHWStatus(index);
+ UChar_t status=calStatus->GetStatus(index);
+
+ //check the status, also unknown is fine!!!!!!!
+
+ AliDebug(2, Form(" Status for channel %d = %d",index, (Int_t)status));
+ if((statusPulser & AliTOFChannelOnlineStatusArray::kTOFPulserBad)==(AliTOFChannelOnlineStatusArray::kTOFPulserBad)||(statusNoise & AliTOFChannelOnlineStatusArray::kTOFNoiseBad)==(AliTOFChannelOnlineStatusArray::kTOFNoiseBad)||(statusHW & AliTOFChannelOnlineStatusArray::kTOFHWBad)==(AliTOFChannelOnlineStatusArray::kTOFHWBad)){
+ AliDebug(2, Form(" Bad Status for channel %d",index));
+ fTofClusters[ii]->SetStatus(kFALSE); //odd convention, to avoid conflict with calibration objects currently in the db (temporary solution).
+ }
+ else {
+ AliDebug(2, Form(" Good Status for channel %d",index));
+ }
+ // Get Rough channel online equalization
+ Double_t roughDelay=(Double_t)calDelay->GetDelay(index); // in ns
+ AliDebug(2,Form(" channel delay (ns) = %f", roughDelay));
+ // Get Refined channel offline calibration parameters
+ if (calibration ==1){
+ AliTOFChannelOffline * calChannelOffline = (AliTOFChannelOffline*)calTOFArrayOffline->At(index);
+ Double_t par[6];
+ for (Int_t j = 0; j<6; j++){
+ par[j]=(Double_t)calChannelOffline->GetSlewPar(j);
+ }
+ AliDebug(2,Form(" Calib Pars = %f, %f, %f, %f, %f, %f ",par[0],par[1],par[2],par[3],par[4],par[5]));
+ AliDebug(2,Form(" The ToT and Time, uncorr (counts) = %d , %d", fTofClusters[ii]->GetToT(),fTofClusters[ii]->GetTDC()));
+ tToT = (Double_t)(fTofClusters[ii]->GetToT()*AliTOFGeometry::ToTBinWidth());
+ tToT*=1.E-3; //ToT in ns
+ AliDebug(2,Form(" The ToT and Time, uncorr (ns)= %e, %e",fTofClusters[ii]->GetTDC()*AliTOFGeometry::TdcBinWidth()*1.E-3,tToT));
+ timeCorr=par[0]+par[1]*tToT+par[2]*tToT*tToT+par[3]*tToT*tToT*tToT+par[4]*tToT*tToT*tToT*tToT+par[5]*tToT*tToT*tToT*tToT*tToT; // the time correction (ns)
+ }
+ else {
+ timeCorr = roughDelay; // correction in ns
+ }
+ AliDebug(2,Form(" The ToT and Time, uncorr (ns)= %e, %e",fTofClusters[ii]->GetTDC()*AliTOFGeometry::TdcBinWidth()*1.E-3,fTofClusters[ii]->GetToT()*AliTOFGeometry::ToTBinWidth()));
+ AliDebug(2,Form(" The time correction (ns) = %f", timeCorr));
+ timeCorr=(Double_t)(fTofClusters[ii]->GetTDC())*AliTOFGeometry::TdcBinWidth()*1.E-3-timeCorr;//redefine the time
+ timeCorr*=1.E3;
+ AliDebug(2,Form(" The channel time, corr (ps)= %e",timeCorr ));
+ tdcCorr=(Int_t)(timeCorr/AliTOFGeometry::TdcBinWidth()); //the corrected time (tdc counts)
+ fTofClusters[ii]->SetTDC(tdcCorr);