ROOT logo
#ifndef ALIANALYSISMUMUFNORM_H
#define ALIANALYSISMUMUFNORM_H

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

#ifndef ROOT_TObject
#  include "TObject.h"
#endif

#ifndef ROOT_TString
#  include "TString.h"
#endif

#include <set>
#include <vector>

class TObjArray;
class TGraphErrors;
class TGraph;
class AliAnalysisMuMuResult;
class AliCounterCollection;
class AliMergeableCollection;

class AliAnalysisMuMuFnorm : public TObject
{

public:
  
  enum ETriggerType
  {
    kMB=1,
    kMUL=2,
    kMSL=3,
    kMSH=4
  };
  
  AliAnalysisMuMuFnorm(AliCounterCollection& cc,
                       AliAnalysisMuMuFnorm::ETriggerType triggerType=AliAnalysisMuMuFnorm::kMUL,
                       const char* ocdbpath="raw://",
                       Bool_t compactGraphs=kFALSE);
  
  virtual ~AliAnalysisMuMuFnorm();
  
  void ComputeFnorm();
  
  void ComputeCorrectionFactors(Int_t eventSelectionCorrected);

  void ComputeFnormOffline(Int_t nstep, Bool_t pileUpCorrected, Int_t eventSelectionCorrected);


  void ComputeFnormScalers(Bool_t pileUpCorrected, Int_t eventSelectionCorrected);

  void ComputeGraphRelDif(const char* a, const char* b) const;

  void ComputeNofEvents(ETriggerType triggerType, Bool_t pileUpCorrected, Int_t eventSelectionCorrected);

  void ComputePileUpGraph(ETriggerType tt, Int_t eventSelectionCorrected=0);
  
  void ComputeEventSelectionGraph(ETriggerType tt, Int_t eventSelectionCorrected);

  void ComputeResultsFromGraphs();

  void ComputeTriggerFractions(ETriggerType triggerType, Bool_t physicsSelectionCorrected);
  
  void ComputeTriggerL0B(ETriggerType tt);

  void ComputeTSGraph(ETriggerType tt);

  AliMergeableCollection* DetachMC();

  void DrawWith2Scales(const char* graphName1, const char* graphName2);
  
  TString GetEventSelectionName(Int_t eventSelectionCorrected) const;

  void GetFnorm(Int_t runNumber, const char* eventSelection, Double_t& value, Double_t& error) const;
  
  TGraphErrors* GetGraph(const char* name) const;
  
  void GetPurity(const char* triggerClassName, Int_t runNumber, Double_t& value, Double_t& error, Int_t eventSelectionCorrected) const;

  void GetValueAndErrorFromGraph(TGraphErrors* graph,
                                 Int_t runNumber,
                                 Double_t& value,
                                 Double_t& error) const;
  
  AliAnalysisMuMuResult* GetResult(const char* name) const;

  AliAnalysisMuMuResult* GetRunIntegratedResult(const TGraphErrors& g, const char* basename="Fnorm");

  AliMergeableCollection* MC() const;
  
  void MultiplyGraphs(const char* g1, const char* g2, const char* name="");
  
  TString OCDBPath() const { return fOCDBPath; }
  
  void Print(Option_t* opt="") const;

  void ScalerFnorm(Double_t& value, Double_t& error,
                   Double_t L0bCMUL7, Double_t purityCMUL7, Double_t purityCMUL7error,
                   Double_t L0bCINT7, Double_t purityCINT7, Double_t purityCINT7error,
                   Double_t pileUpFactor, Double_t pileUpFactorError);
  
  void ShowFnorm(const TObjArray& a) const;

  Bool_t TriggerClassnameTest(const char* triggerClassName, Int_t runNumber) const;

  void WeightedMeanGraphs(const char* pattern, const char* name="");
  
private:
  
  AliAnalysisMuMuFnorm(const AliAnalysisMuMuFnorm& rhs); // not implemented on purpose
  AliAnalysisMuMuFnorm& operator=(const AliAnalysisMuMuFnorm& rhs); // not implemented on purpose

  TGraphErrors* CreateAndAddGraph(const TString& name,
                                  const TString& title,
                                  const std::vector<double>& vx,
                                  const std::vector<double>& vxerr,
                                  const std::vector<double>& vy,
                                  const std::vector<double>& vyerr) const;

  Double_t GetSum(const char* triggerClassName, Int_t runNumber, Int_t eventSelectionCorrected) const;

  TString GetTriggerClassName(ETriggerType tt, Int_t runNumber) const;

  TString GetTriggerTypeName(ETriggerType tt) const;

  std::set<int> RunNumbers() const;

  TString MBTriggerClassName(Int_t runNumber) const;
  TString MSLTriggerClassName(Int_t runNumber) const;
  TString MULTriggerClassName(Int_t runNumber) const;
  TString MSHTriggerClassName(Int_t runNumber) const;

private:
  
  /*const*/ AliCounterCollection& fCounterCollection; // collection of trigger counters (not owner)
  mutable AliMergeableCollection* fMergeableCollection; // collection of results, histograms, graphs (ownership is in fIsOwner)
  Bool_t fIsOwner; // whether we are the owner of the mergeable collection
  TString fOCDBPath; // OCDB to be used (raw:// by default)
  mutable AliAnalysisMuMuResult* fResult; // combined result of the various computations
  Bool_t fIsCompactGraphs; // whether the graph produced should be compact
  ETriggerType fReferenceTriggerType; // reference trigger to get the weighting factors
  
  ClassDef(AliAnalysisMuMuFnorm,0) // class to compute MB to MUON trigger normalization factor
};

#endif
 AliAnalysisMuMuFnorm.h:1
 AliAnalysisMuMuFnorm.h:2
 AliAnalysisMuMuFnorm.h:3
 AliAnalysisMuMuFnorm.h:4
 AliAnalysisMuMuFnorm.h:5
 AliAnalysisMuMuFnorm.h:6
 AliAnalysisMuMuFnorm.h:7
 AliAnalysisMuMuFnorm.h:8
 AliAnalysisMuMuFnorm.h:9
 AliAnalysisMuMuFnorm.h:10
 AliAnalysisMuMuFnorm.h:11
 AliAnalysisMuMuFnorm.h:12
 AliAnalysisMuMuFnorm.h:13
 AliAnalysisMuMuFnorm.h:14
 AliAnalysisMuMuFnorm.h:15
 AliAnalysisMuMuFnorm.h:16
 AliAnalysisMuMuFnorm.h:17
 AliAnalysisMuMuFnorm.h:18
 AliAnalysisMuMuFnorm.h:19
 AliAnalysisMuMuFnorm.h:20
 AliAnalysisMuMuFnorm.h:21
 AliAnalysisMuMuFnorm.h:22
 AliAnalysisMuMuFnorm.h:23
 AliAnalysisMuMuFnorm.h:24
 AliAnalysisMuMuFnorm.h:25
 AliAnalysisMuMuFnorm.h:26
 AliAnalysisMuMuFnorm.h:27
 AliAnalysisMuMuFnorm.h:28
 AliAnalysisMuMuFnorm.h:29
 AliAnalysisMuMuFnorm.h:30
 AliAnalysisMuMuFnorm.h:31
 AliAnalysisMuMuFnorm.h:32
 AliAnalysisMuMuFnorm.h:33
 AliAnalysisMuMuFnorm.h:34
 AliAnalysisMuMuFnorm.h:35
 AliAnalysisMuMuFnorm.h:36
 AliAnalysisMuMuFnorm.h:37
 AliAnalysisMuMuFnorm.h:38
 AliAnalysisMuMuFnorm.h:39
 AliAnalysisMuMuFnorm.h:40
 AliAnalysisMuMuFnorm.h:41
 AliAnalysisMuMuFnorm.h:42
 AliAnalysisMuMuFnorm.h:43
 AliAnalysisMuMuFnorm.h:44
 AliAnalysisMuMuFnorm.h:45
 AliAnalysisMuMuFnorm.h:46
 AliAnalysisMuMuFnorm.h:47
 AliAnalysisMuMuFnorm.h:48
 AliAnalysisMuMuFnorm.h:49
 AliAnalysisMuMuFnorm.h:50
 AliAnalysisMuMuFnorm.h:51
 AliAnalysisMuMuFnorm.h:52
 AliAnalysisMuMuFnorm.h:53
 AliAnalysisMuMuFnorm.h:54
 AliAnalysisMuMuFnorm.h:55
 AliAnalysisMuMuFnorm.h:56
 AliAnalysisMuMuFnorm.h:57
 AliAnalysisMuMuFnorm.h:58
 AliAnalysisMuMuFnorm.h:59
 AliAnalysisMuMuFnorm.h:60
 AliAnalysisMuMuFnorm.h:61
 AliAnalysisMuMuFnorm.h:62
 AliAnalysisMuMuFnorm.h:63
 AliAnalysisMuMuFnorm.h:64
 AliAnalysisMuMuFnorm.h:65
 AliAnalysisMuMuFnorm.h:66
 AliAnalysisMuMuFnorm.h:67
 AliAnalysisMuMuFnorm.h:68
 AliAnalysisMuMuFnorm.h:69
 AliAnalysisMuMuFnorm.h:70
 AliAnalysisMuMuFnorm.h:71
 AliAnalysisMuMuFnorm.h:72
 AliAnalysisMuMuFnorm.h:73
 AliAnalysisMuMuFnorm.h:74
 AliAnalysisMuMuFnorm.h:75
 AliAnalysisMuMuFnorm.h:76
 AliAnalysisMuMuFnorm.h:77
 AliAnalysisMuMuFnorm.h:78
 AliAnalysisMuMuFnorm.h:79
 AliAnalysisMuMuFnorm.h:80
 AliAnalysisMuMuFnorm.h:81
 AliAnalysisMuMuFnorm.h:82
 AliAnalysisMuMuFnorm.h:83
 AliAnalysisMuMuFnorm.h:84
 AliAnalysisMuMuFnorm.h:85
 AliAnalysisMuMuFnorm.h:86
 AliAnalysisMuMuFnorm.h:87
 AliAnalysisMuMuFnorm.h:88
 AliAnalysisMuMuFnorm.h:89
 AliAnalysisMuMuFnorm.h:90
 AliAnalysisMuMuFnorm.h:91
 AliAnalysisMuMuFnorm.h:92
 AliAnalysisMuMuFnorm.h:93
 AliAnalysisMuMuFnorm.h:94
 AliAnalysisMuMuFnorm.h:95
 AliAnalysisMuMuFnorm.h:96
 AliAnalysisMuMuFnorm.h:97
 AliAnalysisMuMuFnorm.h:98
 AliAnalysisMuMuFnorm.h:99
 AliAnalysisMuMuFnorm.h:100
 AliAnalysisMuMuFnorm.h:101
 AliAnalysisMuMuFnorm.h:102
 AliAnalysisMuMuFnorm.h:103
 AliAnalysisMuMuFnorm.h:104
 AliAnalysisMuMuFnorm.h:105
 AliAnalysisMuMuFnorm.h:106
 AliAnalysisMuMuFnorm.h:107
 AliAnalysisMuMuFnorm.h:108
 AliAnalysisMuMuFnorm.h:109
 AliAnalysisMuMuFnorm.h:110
 AliAnalysisMuMuFnorm.h:111
 AliAnalysisMuMuFnorm.h:112
 AliAnalysisMuMuFnorm.h:113
 AliAnalysisMuMuFnorm.h:114
 AliAnalysisMuMuFnorm.h:115
 AliAnalysisMuMuFnorm.h:116
 AliAnalysisMuMuFnorm.h:117
 AliAnalysisMuMuFnorm.h:118
 AliAnalysisMuMuFnorm.h:119
 AliAnalysisMuMuFnorm.h:120
 AliAnalysisMuMuFnorm.h:121
 AliAnalysisMuMuFnorm.h:122
 AliAnalysisMuMuFnorm.h:123
 AliAnalysisMuMuFnorm.h:124
 AliAnalysisMuMuFnorm.h:125
 AliAnalysisMuMuFnorm.h:126
 AliAnalysisMuMuFnorm.h:127
 AliAnalysisMuMuFnorm.h:128
 AliAnalysisMuMuFnorm.h:129
 AliAnalysisMuMuFnorm.h:130
 AliAnalysisMuMuFnorm.h:131
 AliAnalysisMuMuFnorm.h:132
 AliAnalysisMuMuFnorm.h:133
 AliAnalysisMuMuFnorm.h:134
 AliAnalysisMuMuFnorm.h:135
 AliAnalysisMuMuFnorm.h:136
 AliAnalysisMuMuFnorm.h:137
 AliAnalysisMuMuFnorm.h:138
 AliAnalysisMuMuFnorm.h:139
 AliAnalysisMuMuFnorm.h:140
 AliAnalysisMuMuFnorm.h:141
 AliAnalysisMuMuFnorm.h:142
 AliAnalysisMuMuFnorm.h:143
 AliAnalysisMuMuFnorm.h:144
 AliAnalysisMuMuFnorm.h:145
 AliAnalysisMuMuFnorm.h:146
 AliAnalysisMuMuFnorm.h:147
 AliAnalysisMuMuFnorm.h:148