ROOT logo
#ifndef ALITRIGGERRUNSCALERS_H
#define ALITRIGGERRUNSCALERS_H

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

/* $Id: AliTriggerRunScalers.h 22322 2007-11-22 11:43:14Z cvetan $ */

///////////////////////////////////////////////////////////////////////////////
//
//  Class to define a collection scalers per Run  
//
// 
//
//////////////////////////////////////////////////////////////////////////////
class TObject;
class TGraphErrors;
class AliTimeStamp;
class AliTriggerScalersESD;
class AliTriggerScalersRecord;
class AliTriggerScalersRecordESD;
class AliTriggerConfiguration;

#include "TArrayC.h"

class AliTriggerRunScalers : public TObject {

public:
                         AliTriggerRunScalers();
              virtual   ~AliTriggerRunScalers();
  //  Getters
                  Short_t    GetVersion()          const { return fVersion;       }            
                  ULong_t    GetRunNumber()        const { return fRunNumber;     }
                  UChar_t    GetNumClasses()       const { return fnClasses;      }
                   Char_t    GetClass( Int_t i )   const { return fClassIndex[i]; }
          const TObjArray*   GetScalersRecords()   const { return &fScalersRecord; } 
          const TObjArray*   GetScalersRecordsESD()   const { return &fScalersRecordESD; } 
  AliTriggerScalersRecord*   GetScalersRecord( Int_t index ) const { return (AliTriggerScalersRecord*)fScalersRecord.At(index); }
                    Int_t    FindNearestScalersRecord( const AliTimeStamp *stamp ) const;
     AliTriggerScalersESD*   GetScalersForEventClass(const AliTimeStamp* stamp,const Int_t classIndex) const;
     const AliTriggerScalersRecordESD*   GetScalersDeltaForEvent(const AliTimeStamp* stamp) const;
     const AliTriggerScalersRecordESD*   GetScalersDeltaForRun() const;

 // Analysis		    
                    Int_t    ConsistencyCheck(Int_t position,Bool_t correctOverflow, UInt_t** overflow);
		    Int_t    CorrectScalersOverflow();
		    Int_t    CheckRunScalers(){return (fScalersRecord.GetEntriesFast()==fScalersRecordESD.GetEntriesFast());}
  //  Setters
                     void    SetVersion( Short_t ver )       { fVersion = ver;   }            
                     void    SetRunNumber( ULong_t run )     { fRunNumber = run; }
                     void    SetNumClasses( UChar_t nclass ) { fnClasses = nclass; fClassIndex.Set(nclass); }
                     void    SetClass( UChar_t i, UChar_t index ) { fClassIndex[i]=index; }
                     void    AddTriggerScalers( AliTriggerScalersRecord* scal );
             virtual void    Print( const Option_t* opt ="" ) const;
     AliTriggerRunScalers( const AliTriggerRunScalers &run );
     AliTriggerRunScalers&    operator=(const AliTriggerRunScalers& run);
                                        
static AliTriggerRunScalers* ReadScalers( TString & filename );
	  static Bool_t    CalculateMu(Double_t &mu, Double_t &errmu, ULong64_t countsB, ULong64_t countsAC, UShort_t nB, UShort_t nAC, UInt_t orbits, Bool_t bkgCorr=kTRUE, Double_t triggerEff=1., Double_t errorEff=0.);
	  static Bool_t    CalculateMu(Double_t &mu, Double_t &errmu, ULong64_t countsB, ULong64_t countsAC, ULong64_t beamB, UShort_t nB, UShort_t nAC, Bool_t bkgCorr=kTRUE, Double_t triggerEff=1., Double_t errorEff=0.);
	  static ULong64_t    GetDeltaScaler(const AliTriggerScalersRecordESD* scalRec1, const AliTriggerScalersRecordESD* scalRec2, Int_t classIndex, TString level);
	  static Double_t    GetDeltaTime(const AliTriggerScalersRecordESD* scalRec1, const AliTriggerScalersRecordESD* scalRec2);
	  static UInt_t    GetDeltaOrbits(const AliTriggerScalersRecordESD* scalRec1, const AliTriggerScalersRecordESD* scalRec2);
	  static Bool_t    GetScalerRate(Double_t &rate, Double_t &error, const AliTriggerScalersRecordESD* scalRec1, const AliTriggerScalersRecordESD* scalRec2, Int_t classIndex, TString level);
	  static Bool_t    GetScalerRatePerBC(Double_t &rate, Double_t &error, const AliTriggerScalersRecordESD* scalRec1, const AliTriggerScalersRecordESD* scalRec2, AliTriggerConfiguration* cfg, Int_t classIndex, TString level);
	  static Bool_t    GetClassL2L0(Double_t &l2l0, Double_t &error, const AliTriggerScalersRecordESD* scalRec1, const AliTriggerScalersRecordESD* scalRec2, Int_t classIndex);
          static Bool_t    GetMuFromClassScaler(Double_t &mu, Double_t &errmu, const char* className, const AliTriggerScalersRecordESD* scalRec1, const AliTriggerScalersRecordESD* scalRec2, AliTriggerConfiguration* cfg, Bool_t colBCsFromFillScheme=kTRUE, Bool_t bkgCorr=kTRUE, Double_t triggerEff=1., Double_t errorEff=0.);
	        ULong64_t    GetDeltaScalerForRun(Int_t classIndex, TString level);
	         Bool_t    GetScalerRateForRun(Double_t &rate, Double_t &error, Int_t classIndex, TString level);
	         Bool_t    GetClassL2L0ForRun(Double_t &l2l0, Double_t &error, Int_t classIndex);
             TGraphErrors*   GetGraphScalerRate(const char* className, TString level, AliTriggerConfiguration* cfg);
             TGraphErrors*   GetGraphScalerL2L0Ratio(const char* className, AliTriggerConfiguration* cfg);
             TGraphErrors*   GetGraphMu(AliTriggerConfiguration* cfg, const char* className, Bool_t colBCsFromFillScheme=kTRUE, Bool_t bkgCorr=kTRUE, Double_t triggerEff=1., Double_t errorEff=0.);

private:
                  Short_t    fVersion;            // Version
                  ULong_t    fRunNumber;          // Run number
                  UChar_t    fnClasses;           // Number of trigger classes
                  TArrayC    fClassIndex;         // list of classes used in this partition
                TObjArray    fScalersRecord;      // Array of records (AliTriggerScalersRecord)
                TObjArray    fScalersRecordESD;   // Array of records with 64bit scalers (AliTriggerScalersRecordESD)

    

   ClassDef( AliTriggerRunScalers, 4 )  // Define a Run Trigger Scalers (Scalers)
};

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