ROOT logo
#ifndef ALITOFPIDRESPONSE_H
#define ALITOFPIDRESPONSE_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//-------------------------------------------------------
//                    TOF PID class
//   Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch 
//-------------------------------------------------------

#include <TObject.h>
#include <TF1.h>
#include "AliPID.h"
#include "AliVParticle.h"
#include "AliVTrack.h"

class AliTOFPIDParams;
class TH1F;
class TH1D;

class AliTOFPIDResponse : public TObject {
public:

  AliTOFPIDResponse();
  AliTOFPIDResponse(Double_t *param);
  ~AliTOFPIDResponse(){}

  void     SetTimeResolution(Float_t res) { fSigma = res; }
  void     SetTimeZero(Double_t t0) { fTime0=t0; }
  Double_t GetTimeZero() const { return fTime0; }

  void     SetMaxMismatchProbability(Double_t p) {fPmax=p;}
  Double_t GetMaxMismatchProbability() const {return fPmax;}

  Double_t GetExpectedSigma(Float_t mom, Float_t tof, Float_t massZ) const;
  Double_t GetExpectedSigma(Float_t mom, Float_t tof, AliPID::EParticleType type) const;
  Double_t GetExpectedSignal(const AliVTrack *track, AliPID::EParticleType type) const;

  Double_t GetMismatchProbability(Double_t time,Double_t eta) const;

  static Double_t GetTailRandomValue(Float_t pt=1.0,Float_t eta=0.0,Float_t time=0.0,Float_t addmism=0.0); // generate a random value to add a tail to TOF time (for MC analyses), addmism = additional mismatch in percentile
  static Double_t GetMismatchRandomValue(Float_t eta); // generate a random value for mismatched tracks (for MC analyses)

  void     SetT0event(Float_t *t0event){for(Int_t i=0;i < fNmomBins;i++) fT0event[i] = t0event[i];};
  void     SetT0resolution(Float_t *t0resolution){for(Int_t i=0;i < fNmomBins;i++) fT0resolution[i] = t0resolution[i];};
  void     ResetT0info(){ for(Int_t i=0;i < fNmomBins;i++){ fT0event[i] = 0.0; fT0resolution[i] = 0.0; fMaskT0[i] = 0;} };
  void     SetMomBoundary();
  Int_t    GetMomBin(Float_t p) const;
  Int_t    GetNmomBins(){return fNmomBins;};
  Float_t  GetMinMom(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fPCutMin[ibin]; else return 0.0;}; // overrun static array - coverity
  Float_t  GetMaxMom(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fPCutMin[ibin+1]; else return 0.0;}; // overrun static array - coverity
  void     SetT0bin(Int_t ibin,Float_t t0bin){if(ibin >=0 && ibin < fNmomBins) fT0event[ibin] = t0bin;}; // overrun static array - coverity
  void     SetT0binRes(Int_t ibin,Float_t t0binRes){if(ibin >=0 && ibin < fNmomBins) fT0resolution[ibin] = t0binRes;}; // overrun static array - coverity
  void     SetT0binMask(Int_t ibin,Int_t t0binMask){if(ibin >=0 && ibin < fNmomBins) fMaskT0[ibin] = t0binMask;}; // overrun static array - coverity
  Float_t  GetT0bin(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fT0event[ibin]; else return 0.0;}; // overrun static array - coverity
  Float_t  GetT0binRes(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fT0resolution[ibin]; else return 0.0;}; // overrun static array - coverity
  Int_t    GetT0binMask(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fMaskT0[ibin]; else return 0;}; // overrun static array - coverity

  // Get Start Time for a track
  Float_t  GetStartTime(Float_t mom) const;
  Float_t  GetStartTimeRes(Float_t mom) const;
  Int_t    GetStartTimeMask(Float_t mom) const;

  // Tracking resolution for expected times
  void SetTrackParameter(Int_t ip,Float_t value){if(ip>=0 && ip < 4) fPar[ip] = value;};
  Float_t GetTrackParameter(Int_t ip){if(ip>=0 && ip < 4) return fPar[ip]; else return -1.0;};
  Int_t GetTOFchannel(AliVParticle *trk) const;

  Float_t GetTOFtail() {if(fTOFtailResponse) return fTOFtailResponse->GetParameter(3);else return -1;};
  void    SetTOFtail(Float_t tail);
  void    SetTOFtailAllPara(Float_t mean,Float_t tail);

 private:
  Double_t fSigma;        // intrinsic TOF resolution

  // obsolete
  Double_t fPmax;         // "maximal" probability of mismathing (at ~0.5 GeV/c)
  Double_t fTime0;        // time zero
  //--------------

  // About event time (t0) info
  static const Int_t fNmomBins = 10; // number of momentum bin 
  Float_t fT0event[fNmomBins];    // t0 (best, T0, T0-TOF, ...) of the event as a function of p 
  Float_t fT0resolution[fNmomBins]; // t0 (best, T0, T0-TOF, ...) resolution as a function of p 
  Float_t fPCutMin[fNmomBins+1]; // min values for p bins
  Int_t fMaskT0[fNmomBins]; // mask withthe T0 used (0x1=T0-TOF,0x2=T0A,0x3=TOC) for p bins
  Float_t fPar[4]; // parameter for expected times resolution

  static TF1 *fTOFtailResponse; // function to generate a TOF tail
  static TH1F *fHmismTOF; // TOF mismatch distribution
  static TH1D *fHchannelTOFdistr;// TOF channel distance distribution

  ClassDef(AliTOFPIDResponse,5)   // TOF PID class
};

#endif
 AliTOFPIDResponse.h:1
 AliTOFPIDResponse.h:2
 AliTOFPIDResponse.h:3
 AliTOFPIDResponse.h:4
 AliTOFPIDResponse.h:5
 AliTOFPIDResponse.h:6
 AliTOFPIDResponse.h:7
 AliTOFPIDResponse.h:8
 AliTOFPIDResponse.h:9
 AliTOFPIDResponse.h:10
 AliTOFPIDResponse.h:11
 AliTOFPIDResponse.h:12
 AliTOFPIDResponse.h:13
 AliTOFPIDResponse.h:14
 AliTOFPIDResponse.h:15
 AliTOFPIDResponse.h:16
 AliTOFPIDResponse.h:17
 AliTOFPIDResponse.h:18
 AliTOFPIDResponse.h:19
 AliTOFPIDResponse.h:20
 AliTOFPIDResponse.h:21
 AliTOFPIDResponse.h:22
 AliTOFPIDResponse.h:23
 AliTOFPIDResponse.h:24
 AliTOFPIDResponse.h:25
 AliTOFPIDResponse.h:26
 AliTOFPIDResponse.h:27
 AliTOFPIDResponse.h:28
 AliTOFPIDResponse.h:29
 AliTOFPIDResponse.h:30
 AliTOFPIDResponse.h:31
 AliTOFPIDResponse.h:32
 AliTOFPIDResponse.h:33
 AliTOFPIDResponse.h:34
 AliTOFPIDResponse.h:35
 AliTOFPIDResponse.h:36
 AliTOFPIDResponse.h:37
 AliTOFPIDResponse.h:38
 AliTOFPIDResponse.h:39
 AliTOFPIDResponse.h:40
 AliTOFPIDResponse.h:41
 AliTOFPIDResponse.h:42
 AliTOFPIDResponse.h:43
 AliTOFPIDResponse.h:44
 AliTOFPIDResponse.h:45
 AliTOFPIDResponse.h:46
 AliTOFPIDResponse.h:47
 AliTOFPIDResponse.h:48
 AliTOFPIDResponse.h:49
 AliTOFPIDResponse.h:50
 AliTOFPIDResponse.h:51
 AliTOFPIDResponse.h:52
 AliTOFPIDResponse.h:53
 AliTOFPIDResponse.h:54
 AliTOFPIDResponse.h:55
 AliTOFPIDResponse.h:56
 AliTOFPIDResponse.h:57
 AliTOFPIDResponse.h:58
 AliTOFPIDResponse.h:59
 AliTOFPIDResponse.h:60
 AliTOFPIDResponse.h:61
 AliTOFPIDResponse.h:62
 AliTOFPIDResponse.h:63
 AliTOFPIDResponse.h:64
 AliTOFPIDResponse.h:65
 AliTOFPIDResponse.h:66
 AliTOFPIDResponse.h:67
 AliTOFPIDResponse.h:68
 AliTOFPIDResponse.h:69
 AliTOFPIDResponse.h:70
 AliTOFPIDResponse.h:71
 AliTOFPIDResponse.h:72
 AliTOFPIDResponse.h:73
 AliTOFPIDResponse.h:74
 AliTOFPIDResponse.h:75
 AliTOFPIDResponse.h:76
 AliTOFPIDResponse.h:77
 AliTOFPIDResponse.h:78
 AliTOFPIDResponse.h:79
 AliTOFPIDResponse.h:80
 AliTOFPIDResponse.h:81
 AliTOFPIDResponse.h:82
 AliTOFPIDResponse.h:83
 AliTOFPIDResponse.h:84
 AliTOFPIDResponse.h:85
 AliTOFPIDResponse.h:86
 AliTOFPIDResponse.h:87
 AliTOFPIDResponse.h:88
 AliTOFPIDResponse.h:89
 AliTOFPIDResponse.h:90
 AliTOFPIDResponse.h:91
 AliTOFPIDResponse.h:92
 AliTOFPIDResponse.h:93
 AliTOFPIDResponse.h:94
 AliTOFPIDResponse.h:95
 AliTOFPIDResponse.h:96
 AliTOFPIDResponse.h:97