ROOT logo
#ifndef ALIDIELECTRONCFDRAW_H
#define ALIDIELECTRONCFDRAW_H
/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//#############################################################
//#                                                           #
//#             Class AliDielectronCF                         #
//#       Dielectron Correction Framework Draw helper         #
//#                                                           #
//#  Authors:                                                 #
//#   Anton     Andronic, GSI / A.Andronic@gsi.de             #
//#   Ionut C.  Arsene,   GSI / I.C.Arsene@gsi.de             #
//#   Julian    Book,     Uni Ffm / Julian.Book@cern.ch       #
//#   Frederick Kramer,   Uni Ffm, / Frederick.Kramer@cern.ch #
//#   Magnus    Mager,    CERN / Magnus.Mager@cern.ch         #
//#   WooJin J. Park,     GSI / W.J.Park@gsi.de               #
//#   Jens      Wiechula, Uni HD / Jens.Wiechula@cern.ch      #
//#                                                           #
//#############################################################



#include <TNamed.h>
#include <TVectorD.h>
#include <AliCFContainer.h>
#include "AliDielectronVarManager.h"

class TObjArray;
class TSeqCollection;
class AliCFEffGrid;
class TH1;

class AliCFContainer;

class AliDielectronCFdraw : public TNamed {
public:
  enum ECollectType { kSE=0, kME, kMEOS, kROT, kAll };
  
  AliDielectronCFdraw();
  AliDielectronCFdraw(const char* name, const char* title);
  AliDielectronCFdraw(AliCFContainer *cont);
  AliDielectronCFdraw(const char* filename);
  
  virtual ~AliDielectronCFdraw();
  
  void SetCFContainer(AliCFContainer * const container) {fCfContainer=container;}
  void SetCFContainers(const TSeqCollection *arr);

  void SetCFContainers(const char* filename);

  AliCFContainer* GetCFContainer() const {return fCfContainer;}

  void SetRangeUser(Int_t ivar, Double_t min, Double_t max, const char* slices="");
  void SetRangeUser(const char* varname, Double_t min, Double_t max, const char* slices="");
  void SetRangeUser(AliDielectronVarManager::ValueTypes type, Double_t min, Double_t max, const char* slices="", Bool_t leg=kFALSE);

  void UnsetRangeUser(Int_t ivar, const char* slices="");
  void UnsetRangeUser(const char* varname, const char* slices="");
  void UnsetRangeUser(AliDielectronVarManager::ValueTypes type, const char* slices="", Bool_t leg=kFALSE);

  TString FindSteps(const char* search="");
  Int_t   FindStep(const char* search="");
  Int_t   FindVar(AliDielectronVarManager::ValueTypes type, Bool_t leg=kFALSE);

  virtual void Draw(const Option_t* varnames = "") { Draw(varnames,"");}
  virtual void Print(const Option_t*) const { if (fCfContainer) fCfContainer->Print(""); }
  //Draw Projections
  void Draw(const Option_t* varnames, const char* opt, const char* slices="");
  void Draw(Int_t var, const char* opt="", const char* slices="");
  void Draw(Int_t var0, Int_t var1, const char* opt="", const char* slices="");
  void Draw(Int_t var0, Int_t var1, Int_t var2, const char* opt="", const char* slices="");

  TObjArray* CollectHistosProj(const Option_t* varnames, const char* slices);
  TObjArray* CollectHistosProj(const Int_t vars[3], const char* slices);
  TObjArray* CollectMinvProj(Int_t slice, ECollectType collect=kAll, TString var="M");
  TH1* Project(const Int_t vars[3], Int_t slice);
  TH1* Project(const Option_t* var, Int_t slice);
  
  //Draw efficiencies
  void DrawEfficiency(const char* varnames, const char* numerators, Int_t denominator=0, const char* opt="sameleg2");
  void DrawEfficiency(Int_t var, const char* numerators, Int_t denominator=0, const char* opt="sameleg", Int_t type=0);
  void DrawEfficiency(Int_t var0, Int_t var1, const char* numerators, Int_t denominator=0, const char* opt="sameleg", Int_t type=0);
  void DrawEfficiency(Int_t var0, Int_t var1, Int_t var2, const char* numerators, Int_t denominator=0, const char* opt="sameleg", Int_t type=0);
  
  TObjArray* CollectHistosEff(const Int_t vars[3], const char* numerators, Int_t denominator, Int_t type=0);
  TH1* ProjectEff(const Int_t vars[3]);

  Double_t GetAverageEfficiency(Int_t numerator, Int_t denominator, Double_t &effErr);
  
  const TVectorD& GetData() const {return fVdata;}
  void Draw(const TObjArray *arr, const char* opt="");
private:
  AliCFContainer *fCfContainer;                     // CF container
  AliCFEffGrid   *fEffGrid;                         // Efficiency calculation

  TVectorD fVdata;                                  // vector with data, like mean efficiencies
  
  AliDielectronCFdraw(const AliDielectronCFdraw &c);
  AliDielectronCFdraw &operator=(const AliDielectronCFdraw &c);
  
  ClassDef(AliDielectronCFdraw,0)                   // CF draw helper class
};

//
// Inline functions
//

inline Int_t AliDielectronCFdraw::FindVar(AliDielectronVarManager::ValueTypes type, Bool_t leg)
{
  //
  // find variable number in CF container
  //
  return ( fCfContainer->GetVar(Form("%s%s", leg?"Leg1_":"", AliDielectronVarManager::GetValueName(type))) );
}
#endif

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