ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id: AliT0CalibSeasonTimeShift.cxx 42881 2010-08-16 10:59:14Z alla $ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// class for T0 calibration                       TM-AC-AM_6-02-2006  
// equalize time shift for each time CFD channel
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "AliT0CalibSeasonTimeShift.h"
#include "AliLog.h"
#include <TFile.h>
#include <TMath.h>
#include <TF1.h>
#include <TProfile.h>
#include <iostream>

ClassImp(AliT0CalibSeasonTimeShift)

//________________________________________________________________
  AliT0CalibSeasonTimeShift::AliT0CalibSeasonTimeShift():TNamed()
{
  //
  for (Int_t i=0; i<4; i++)
    fMeanPar[i] = fSigmaPar[i] = 0; 
}

//________________________________________________________________
AliT0CalibSeasonTimeShift::AliT0CalibSeasonTimeShift(const char* name):TNamed()
{
    //constructor
    
  TString namst = "Calib_";
  namst += name;
  SetName(namst.Data());
  SetTitle(namst.Data()); 
  
  for (Int_t i=0; i<4; i++)
    fMeanPar[i] = fSigmaPar[i] = 0; 
 
}

//________________________________________________________________
AliT0CalibSeasonTimeShift::AliT0CalibSeasonTimeShift(const AliT0CalibSeasonTimeShift& calibda):TNamed(calibda)		

{
// copy constructor
  SetName(calibda.GetName());
  SetTitle(calibda.GetName());
  ((AliT0CalibSeasonTimeShift &) calibda).Copy(*this);


}

//________________________________________________________________
AliT0CalibSeasonTimeShift &AliT0CalibSeasonTimeShift::operator =(const AliT0CalibSeasonTimeShift& calibda)
{
// assignment operator
  SetName(calibda.GetName());
  SetTitle(calibda.GetName());
  if (this != &calibda) ((AliT0CalibSeasonTimeShift &) calibda).Copy(*this);
 
  return *this;
}

//________________________________________________________________
AliT0CalibSeasonTimeShift::~AliT0CalibSeasonTimeShift()
{
  //
  // destrictor
}


//________________________________________________________________
void  AliT0CalibSeasonTimeShift::Print(Option_t*) const
{
  // print time values

  printf("\n	----	T0 results	----\n\n");
  printf(" (T0A+T0C)/2 = %f; T0A = %f; T0C = %f; resolution = %f  \n", fMeanPar[0], fMeanPar[1],fMeanPar[2],fMeanPar[3]);
  printf(" sigma(T0A+T0C)/2 = %f; sigma(T0 = %f; sigma(T0C) = %f; sigma(resolution) = %f  \n" , fSigmaPar[0], fSigmaPar[1], fSigmaPar[2],fSigmaPar[3]);
 
} 

//________________________________________________________________
Bool_t  AliT0CalibSeasonTimeShift::SetT0Par(Float_t par[4],Float_t spar[4])
{
  Bool_t ok=false;
 for (Int_t i=0; i<4; i++)
    {
      fMeanPar[i] = par[i];
      fSigmaPar[i] = spar[i];
      if ( fSigmaPar[i] == 0 ||  fSigmaPar[i] > 500) ok = false;
    }
 return ok;
}

//________________________________________________________________
Int_t AliT0CalibSeasonTimeShift::SetT0Par(const char* filePhys, Float_t *cdbtime)
{
  // compute shifts fo T0A, T0C, T0AC and resolution
  //Status : writeok:
  // 0 OK
  // 2000 - no data file
  // 300 no one histogram or it is empty
  //-100 peak is very narrow

  Float_t mean, sigma;
  Int_t ok = 0;
  TH1F *cfd = NULL;
  TObjArray * tzeroObj = NULL;

  gFile = TFile::Open(filePhys);
  if(!gFile) {
    AliError("No input PHYS data found ");
    return 2000;
  }
  else {
    //    gFile->ls();
    //    TDirectory *dr = (TDirectory*) gFile->Get("T0Calib");
    tzeroObj = dynamic_cast<TObjArray*>(gFile->Get("T0Calib"));
    TString histname[4]={"fTzeroORAplusORC", "fTzeroORA", "fTzeroORC",  "fResolution"};
    for (Int_t i=0; i<4; i++)
      {
	if(cfd) cfd->Reset();
	if(tzeroObj) 
	  cfd = (TH1F*)tzeroObj->FindObject( histname[i].Data());
	else
	  cfd =  (TH1F*)gFile ->Get(histname[i].Data());

	if(!cfd) {
	  AliError(Form("no histograms collected for %s", histname[i].Data()));
	  return 300;
	}
	if(cfd) {
	  if( cfd->GetEntries() == 0) {
	  AliError(Form("%s histogram is empty", histname[i].Data()));
	  return 300;
	  }
	  GetMeanAndSigma(cfd, mean, sigma);
	  if (sigma == 0 || sigma > 600 || cfd->GetEntries()<50 ){ //!!!
	    AliError(Form("%s low statsitics or bad histogram, OCDB value is = %f", histname[i].Data(), cdbtime[i]) );
	    return 400;
	  }
	  if ( sigma > 0 && sigma < 600 && cfd->GetEntries()>=50) //!!!
	    { 
	      fMeanPar[i] =   mean;
	      fSigmaPar[i] = sigma;
	    }
	}
      } 
  }
  gFile->Close();
  delete gFile;
  return ok;
}
//________________________________________________________________________
void AliT0CalibSeasonTimeShift::GetMeanAndSigma(TH1F* hist,  Float_t &mean, Float_t &sigma) {

  const double window =3.;  //fit window 
 
  double meanEstimate, sigmaEstimate; 
  int maxBin;
  maxBin        =  hist->GetMaximumBin(); //position of maximum
  meanEstimate  =  hist->GetBinCenter( maxBin); // mean of gaussian sitting in maximum
  sigmaEstimate = hist->GetRMS();
  TF1* fit= new TF1("fit","gaus", meanEstimate - window*sigmaEstimate, meanEstimate + window*sigmaEstimate);
  fit->SetParameters(hist->GetBinContent(maxBin), meanEstimate, sigmaEstimate);
  hist->Fit("fit","R","");

  mean  = (Float_t) fit->GetParameter(1);
  sigma = (Float_t) fit->GetParameter(2);

  delete fit;
}
 AliT0CalibSeasonTimeShift.cxx:1
 AliT0CalibSeasonTimeShift.cxx:2
 AliT0CalibSeasonTimeShift.cxx:3
 AliT0CalibSeasonTimeShift.cxx:4
 AliT0CalibSeasonTimeShift.cxx:5
 AliT0CalibSeasonTimeShift.cxx:6
 AliT0CalibSeasonTimeShift.cxx:7
 AliT0CalibSeasonTimeShift.cxx:8
 AliT0CalibSeasonTimeShift.cxx:9
 AliT0CalibSeasonTimeShift.cxx:10
 AliT0CalibSeasonTimeShift.cxx:11
 AliT0CalibSeasonTimeShift.cxx:12
 AliT0CalibSeasonTimeShift.cxx:13
 AliT0CalibSeasonTimeShift.cxx:14
 AliT0CalibSeasonTimeShift.cxx:15
 AliT0CalibSeasonTimeShift.cxx:16
 AliT0CalibSeasonTimeShift.cxx:17
 AliT0CalibSeasonTimeShift.cxx:18
 AliT0CalibSeasonTimeShift.cxx:19
 AliT0CalibSeasonTimeShift.cxx:20
 AliT0CalibSeasonTimeShift.cxx:21
 AliT0CalibSeasonTimeShift.cxx:22
 AliT0CalibSeasonTimeShift.cxx:23
 AliT0CalibSeasonTimeShift.cxx:24
 AliT0CalibSeasonTimeShift.cxx:25
 AliT0CalibSeasonTimeShift.cxx:26
 AliT0CalibSeasonTimeShift.cxx:27
 AliT0CalibSeasonTimeShift.cxx:28
 AliT0CalibSeasonTimeShift.cxx:29
 AliT0CalibSeasonTimeShift.cxx:30
 AliT0CalibSeasonTimeShift.cxx:31
 AliT0CalibSeasonTimeShift.cxx:32
 AliT0CalibSeasonTimeShift.cxx:33
 AliT0CalibSeasonTimeShift.cxx:34
 AliT0CalibSeasonTimeShift.cxx:35
 AliT0CalibSeasonTimeShift.cxx:36
 AliT0CalibSeasonTimeShift.cxx:37
 AliT0CalibSeasonTimeShift.cxx:38
 AliT0CalibSeasonTimeShift.cxx:39
 AliT0CalibSeasonTimeShift.cxx:40
 AliT0CalibSeasonTimeShift.cxx:41
 AliT0CalibSeasonTimeShift.cxx:42
 AliT0CalibSeasonTimeShift.cxx:43
 AliT0CalibSeasonTimeShift.cxx:44
 AliT0CalibSeasonTimeShift.cxx:45
 AliT0CalibSeasonTimeShift.cxx:46
 AliT0CalibSeasonTimeShift.cxx:47
 AliT0CalibSeasonTimeShift.cxx:48
 AliT0CalibSeasonTimeShift.cxx:49
 AliT0CalibSeasonTimeShift.cxx:50
 AliT0CalibSeasonTimeShift.cxx:51
 AliT0CalibSeasonTimeShift.cxx:52
 AliT0CalibSeasonTimeShift.cxx:53
 AliT0CalibSeasonTimeShift.cxx:54
 AliT0CalibSeasonTimeShift.cxx:55
 AliT0CalibSeasonTimeShift.cxx:56
 AliT0CalibSeasonTimeShift.cxx:57
 AliT0CalibSeasonTimeShift.cxx:58
 AliT0CalibSeasonTimeShift.cxx:59
 AliT0CalibSeasonTimeShift.cxx:60
 AliT0CalibSeasonTimeShift.cxx:61
 AliT0CalibSeasonTimeShift.cxx:62
 AliT0CalibSeasonTimeShift.cxx:63
 AliT0CalibSeasonTimeShift.cxx:64
 AliT0CalibSeasonTimeShift.cxx:65
 AliT0CalibSeasonTimeShift.cxx:66
 AliT0CalibSeasonTimeShift.cxx:67
 AliT0CalibSeasonTimeShift.cxx:68
 AliT0CalibSeasonTimeShift.cxx:69
 AliT0CalibSeasonTimeShift.cxx:70
 AliT0CalibSeasonTimeShift.cxx:71
 AliT0CalibSeasonTimeShift.cxx:72
 AliT0CalibSeasonTimeShift.cxx:73
 AliT0CalibSeasonTimeShift.cxx:74
 AliT0CalibSeasonTimeShift.cxx:75
 AliT0CalibSeasonTimeShift.cxx:76
 AliT0CalibSeasonTimeShift.cxx:77
 AliT0CalibSeasonTimeShift.cxx:78
 AliT0CalibSeasonTimeShift.cxx:79
 AliT0CalibSeasonTimeShift.cxx:80
 AliT0CalibSeasonTimeShift.cxx:81
 AliT0CalibSeasonTimeShift.cxx:82
 AliT0CalibSeasonTimeShift.cxx:83
 AliT0CalibSeasonTimeShift.cxx:84
 AliT0CalibSeasonTimeShift.cxx:85
 AliT0CalibSeasonTimeShift.cxx:86
 AliT0CalibSeasonTimeShift.cxx:87
 AliT0CalibSeasonTimeShift.cxx:88
 AliT0CalibSeasonTimeShift.cxx:89
 AliT0CalibSeasonTimeShift.cxx:90
 AliT0CalibSeasonTimeShift.cxx:91
 AliT0CalibSeasonTimeShift.cxx:92
 AliT0CalibSeasonTimeShift.cxx:93
 AliT0CalibSeasonTimeShift.cxx:94
 AliT0CalibSeasonTimeShift.cxx:95
 AliT0CalibSeasonTimeShift.cxx:96
 AliT0CalibSeasonTimeShift.cxx:97
 AliT0CalibSeasonTimeShift.cxx:98
 AliT0CalibSeasonTimeShift.cxx:99
 AliT0CalibSeasonTimeShift.cxx:100
 AliT0CalibSeasonTimeShift.cxx:101
 AliT0CalibSeasonTimeShift.cxx:102
 AliT0CalibSeasonTimeShift.cxx:103
 AliT0CalibSeasonTimeShift.cxx:104
 AliT0CalibSeasonTimeShift.cxx:105
 AliT0CalibSeasonTimeShift.cxx:106
 AliT0CalibSeasonTimeShift.cxx:107
 AliT0CalibSeasonTimeShift.cxx:108
 AliT0CalibSeasonTimeShift.cxx:109
 AliT0CalibSeasonTimeShift.cxx:110
 AliT0CalibSeasonTimeShift.cxx:111
 AliT0CalibSeasonTimeShift.cxx:112
 AliT0CalibSeasonTimeShift.cxx:113
 AliT0CalibSeasonTimeShift.cxx:114
 AliT0CalibSeasonTimeShift.cxx:115
 AliT0CalibSeasonTimeShift.cxx:116
 AliT0CalibSeasonTimeShift.cxx:117
 AliT0CalibSeasonTimeShift.cxx:118
 AliT0CalibSeasonTimeShift.cxx:119
 AliT0CalibSeasonTimeShift.cxx:120
 AliT0CalibSeasonTimeShift.cxx:121
 AliT0CalibSeasonTimeShift.cxx:122
 AliT0CalibSeasonTimeShift.cxx:123
 AliT0CalibSeasonTimeShift.cxx:124
 AliT0CalibSeasonTimeShift.cxx:125
 AliT0CalibSeasonTimeShift.cxx:126
 AliT0CalibSeasonTimeShift.cxx:127
 AliT0CalibSeasonTimeShift.cxx:128
 AliT0CalibSeasonTimeShift.cxx:129
 AliT0CalibSeasonTimeShift.cxx:130
 AliT0CalibSeasonTimeShift.cxx:131
 AliT0CalibSeasonTimeShift.cxx:132
 AliT0CalibSeasonTimeShift.cxx:133
 AliT0CalibSeasonTimeShift.cxx:134
 AliT0CalibSeasonTimeShift.cxx:135
 AliT0CalibSeasonTimeShift.cxx:136
 AliT0CalibSeasonTimeShift.cxx:137
 AliT0CalibSeasonTimeShift.cxx:138
 AliT0CalibSeasonTimeShift.cxx:139
 AliT0CalibSeasonTimeShift.cxx:140
 AliT0CalibSeasonTimeShift.cxx:141
 AliT0CalibSeasonTimeShift.cxx:142
 AliT0CalibSeasonTimeShift.cxx:143
 AliT0CalibSeasonTimeShift.cxx:144
 AliT0CalibSeasonTimeShift.cxx:145
 AliT0CalibSeasonTimeShift.cxx:146
 AliT0CalibSeasonTimeShift.cxx:147
 AliT0CalibSeasonTimeShift.cxx:148
 AliT0CalibSeasonTimeShift.cxx:149
 AliT0CalibSeasonTimeShift.cxx:150
 AliT0CalibSeasonTimeShift.cxx:151
 AliT0CalibSeasonTimeShift.cxx:152
 AliT0CalibSeasonTimeShift.cxx:153
 AliT0CalibSeasonTimeShift.cxx:154
 AliT0CalibSeasonTimeShift.cxx:155
 AliT0CalibSeasonTimeShift.cxx:156
 AliT0CalibSeasonTimeShift.cxx:157
 AliT0CalibSeasonTimeShift.cxx:158
 AliT0CalibSeasonTimeShift.cxx:159
 AliT0CalibSeasonTimeShift.cxx:160
 AliT0CalibSeasonTimeShift.cxx:161
 AliT0CalibSeasonTimeShift.cxx:162
 AliT0CalibSeasonTimeShift.cxx:163
 AliT0CalibSeasonTimeShift.cxx:164
 AliT0CalibSeasonTimeShift.cxx:165
 AliT0CalibSeasonTimeShift.cxx:166
 AliT0CalibSeasonTimeShift.cxx:167
 AliT0CalibSeasonTimeShift.cxx:168
 AliT0CalibSeasonTimeShift.cxx:169
 AliT0CalibSeasonTimeShift.cxx:170
 AliT0CalibSeasonTimeShift.cxx:171
 AliT0CalibSeasonTimeShift.cxx:172
 AliT0CalibSeasonTimeShift.cxx:173
 AliT0CalibSeasonTimeShift.cxx:174
 AliT0CalibSeasonTimeShift.cxx:175
 AliT0CalibSeasonTimeShift.cxx:176
 AliT0CalibSeasonTimeShift.cxx:177
 AliT0CalibSeasonTimeShift.cxx:178
 AliT0CalibSeasonTimeShift.cxx:179
 AliT0CalibSeasonTimeShift.cxx:180
 AliT0CalibSeasonTimeShift.cxx:181
 AliT0CalibSeasonTimeShift.cxx:182
 AliT0CalibSeasonTimeShift.cxx:183
 AliT0CalibSeasonTimeShift.cxx:184
 AliT0CalibSeasonTimeShift.cxx:185
 AliT0CalibSeasonTimeShift.cxx:186
 AliT0CalibSeasonTimeShift.cxx:187
 AliT0CalibSeasonTimeShift.cxx:188
 AliT0CalibSeasonTimeShift.cxx:189
 AliT0CalibSeasonTimeShift.cxx:190