ROOT logo
#ifndef ALITOFRUNPARAMS_H
#define ALITOFRUNPARAMS_H

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

// *
// *
// *
// * this class defines the TOF object to be stored
// * in OCDB on a run-by-run basis in order to have the measurement
// * of the time evolution of T0 and of TOF resolution including
// * average T0 uncertainty
// *
// *
// *

#include "TObject.h"

class TGraph;

class AliTOFRunParams :
public TObject
{

 public:

  AliTOFRunParams(); // default constructor
  AliTOFRunParams(Int_t nPoints, Int_t nRuns = 1); // standard constructor
  virtual ~AliTOFRunParams(); // default destructor
  AliTOFRunParams(const AliTOFRunParams &source); // copy constructor
  AliTOFRunParams &operator=(const AliTOFRunParams &source); // operator=

  Int_t GetNPoints() const {return fNPoints;}; // getter
  UInt_t GetTimestamp(Int_t i) const {return fTimestamp && i < fNPoints ? fTimestamp[i] : 0;}; // getter
  Float_t GetT0(Int_t i) const {return fT0 && i < fNPoints ? fT0[i] : 0.;}; // getter
  Float_t GetTOFResolution(Int_t i) const {return fTOFResolution && i < fNPoints ? fTOFResolution[i] : 0.;}; // getter
  Float_t GetT0Spread(Int_t i) const {return fT0Spread && i < fNPoints ? fT0Spread[i] : 0.;}; // getter
  
  Int_t GetNRuns() const {return fNRuns;}; // getter
  UInt_t GetRunNb(Int_t i) const {return fRunNb && i < fNRuns ? fRunNb[i] : 0;}; // getter
  UInt_t GetRunFirstPoint(Int_t i) const {return fRunFirstPoint && i < fNRuns ? fRunFirstPoint[i] : 0;}; // getter
  UInt_t GetRunLastPoint(Int_t i) const {return fRunLastPoint && i < fNRuns ? fRunLastPoint[i] : 0;}; // getter

  void SetTimestamp(UInt_t *value) {if (fTimestamp) for (Int_t i = 0; i < fNPoints; i++) fTimestamp[i] = value[i];}; // setter
  void SetT0(Float_t *value) {if (fT0) for (Int_t i = 0; i < fNPoints; i++) fT0[i] = value[i];}; // setter
  void SetTOFResolution(Float_t *value) {if (fTOFResolution) for (Int_t i = 0; i < fNPoints; i++) fTOFResolution[i] = value[i];}; // setter
  void SetT0Spread(Float_t *value) {if (fT0Spread) for (Int_t i = 0; i < fNPoints; i++) fT0Spread[i] = value[i];}; // setter

  void SetRunNb(UInt_t *value) {if (fRunNb) for (Int_t i = 0; i < fNRuns; i++) fRunNb[i] = value[i];}; // setter
  void SetRunFirstPoint(UInt_t *value) {if (fRunFirstPoint) for (Int_t i = 0; i < fNRuns; i++) fRunFirstPoint[i] = value[i];}; // setter
  void SetRunLastPoint(UInt_t *value) {if (fRunLastPoint) for (Int_t i = 0; i < fNRuns; i++) fRunLastPoint[i] = value[i];}; // setter

  void SetUseLHCClockPhase(Bool_t value) {fUseLHCClockPhase = value;}; // setter

  Float_t EvalT0(UInt_t timestamp); // eval T0
  Float_t EvalTOFResolution(UInt_t timestamp); // eval TOF resolution
  Float_t EvalT0Spread(UInt_t timestamp); // eval T0 spread
  
  Float_t AverageT0(UInt_t runNb) {return Average(fT0, runNb);}; // average T0
  Float_t AverageTOFResolution(UInt_t runNb) {return Average(fTOFResolution, runNb);}; // average TOF resolution
  Float_t AverageT0Spread(UInt_t runNb) {return Average(fT0Spread, runNb);}; // average T0 spread

  Bool_t GetUseLHCClockPhase() const {return fUseLHCClockPhase;}; // getter

  TGraph *DrawGraphT0(Option_t *option = "") {return DrawGraph(fT0, option);}; // draw graph t0
  TGraph *DrawGraphTOFResolution(Option_t *option = "") {return DrawGraph(fTOFResolution, option);}; // draw graph t0
  TGraph *DrawGraphT0Spread(Option_t *option = "") {return DrawGraph(fT0Spread, option);}; // draw graph t0
  TGraph *DrawCorrelationGraphTOFResolutionT0Spread(Option_t *option = "") {return DrawCorrelationGraph(fT0Spread, fTOFResolution, option);}; // draw correlation graph


 private:
  
  /* private methods */
  
  Float_t Average(Float_t *data, UInt_t runNb); // average
  Float_t Average(Float_t *data, Int_t first, Int_t last); // average
  TGraph *DrawGraph(Float_t *data, Option_t *option = ""); // draw graph
  TGraph *DrawCorrelationGraph(Float_t *datax, Float_t *datay, Option_t *option = ""); // draw graph
  
  /* data members */

  Int_t fNPoints;
  UInt_t *fTimestamp; //[fNPoints] time stamp
  Float_t *fT0; //[fNPoints] average T0 (ps)
  Float_t *fTOFResolution; //[fNPoints] average TOF resolution (T0 uncertainty included) (ps)
  Float_t *fT0Spread; //[fNPoints] estimated T0 spread (from vertex spread z) (ps)

  Int_t fNRuns;
  UInt_t *fRunNb; //[fNRuns] run number
  UInt_t *fRunFirstPoint; //[fNRuns] run start point
  UInt_t *fRunLastPoint; //[fNRuns] run last point

  Bool_t fUseLHCClockPhase; // use LHC clockphase


  ClassDef(AliTOFRunParams, 3);
};

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