ROOT logo
#ifndef ALIANALYSISMUMURESULT_H
#define ALIANALYSISMUMURESULT_H

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

// $Id$

///
/// AliAnalysisMuMuResult : helper class to store results from
/// AliAnalysisTaskMuMu
///
/// author : Laurent Aphecetche (Subatech)

#include "TNamed.h"
#include <TString.h>

class TH1;
class THashList;
class TMap;

class AliAnalysisMuMuResult : public TNamed
{
  
public:
  
  enum EResultMergingMethod { kMean, kSum };
  
  AliAnalysisMuMuResult(const char* name="", const char* title="", AliAnalysisMuMuResult::EResultMergingMethod mergindMethod=AliAnalysisMuMuResult::kMean);
  AliAnalysisMuMuResult(const AliAnalysisMuMuResult& rhs);
  AliAnalysisMuMuResult& operator=(const AliAnalysisMuMuResult& rhs);
  
  virtual ~AliAnalysisMuMuResult();

  Bool_t AdoptSubResult(AliAnalysisMuMuResult* r);

  virtual TObject* Clone(const char* newname = "") const;
  
  void Set(const char* name, Double_t value, Double_t errorStat, Double_t rms=0.0);
  
  Int_t HasValue(const char* name, const char* subResultName="") const;
  
  Double_t GetValue(const char* name, const char* subResultName="") const;
  
  Double_t GetErrorStat(const char* name, const char* subResultName="") const;

  Double_t GetRMS(const char* name, const char* subResultName="") const;
  
  void Print(Option_t* opt="") const;
  
  AliAnalysisMuMuResult* SubResult(const char* subResultName) const;
  
  TObjArray* SubResults() const { return fSubResults; }
  
  Long64_t Merge(TCollection* list);

  AliAnalysisMuMuResult* Mother() const { return fMother; }
  
  THashList* Keys() const;
  
  Double_t Weight() const { return fWeight; }
  
  void SetWeight(Double_t w) { fWeight=w; }

  static Double_t ErrorAB(Double_t a, Double_t aerr, Double_t b, Double_t berr);
  
  static Double_t ErrorABC(Double_t a, Double_t aerr, Double_t b, Double_t berr, Double_t c, Double_t cerror);

  static Double_t ErrorABCD(Double_t a, Double_t aerr, Double_t b, Double_t berr, Double_t c, Double_t cerror,
                            Double_t d, Double_t derror);

  static Double_t ErrorABCDE(Double_t a, Double_t aerr, Double_t b, Double_t berr, Double_t c, Double_t cerror,
                             Double_t d, Double_t derror, Double_t e, Double_t eerror);

  void PrintValue(const char* key, const char* opt, Double_t value, Double_t errorStat, Double_t rms=0.0) const; 

  void SetAlias(const char* alias) { fAlias = alias; }
  
  TString Alias() const { if ( fAlias.Length()>0) return fAlias; else return GetName(); }
  
  void Include(const char* subResultsList);

  void Exclude(const char* subResultsList);

  Bool_t IsIncluded(const TString& alias) const;
  
  void Scale(Double_t value);
  
  void SetMergingMethod(AliAnalysisMuMuResult::EResultMergingMethod mergindMethod) { fResultMergingMethod=mergindMethod; }
  
  Bool_t IsValid() const { return fIsValid; }
  
  void Invalidate() { fIsValid = kFALSE; }
  
  void Show(const char* keyPattern);
  
  void Hide(const char* keyPattern);

  Bool_t IsValidValue(Double_t val) const;
  
private:
  
  enum EIndex
  {
    kValue=0,
    kErrorStat=1,
    kRMS=2
  };
  
  void PrintParticle(const char* particle, const char* opt) const;

  TList* SubResultsToBeIncluded() const;
  
  TString GetSubResultNameList() const;

  Int_t NofIncludedSubResults(const char* name) const;
  
private:
  TObjArray* fSubResults; // TObjArray of AliAnalysisMuMuResult*
  TMap* fMap; // internal parameter map
  AliAnalysisMuMuResult* fMother; // mother result
  mutable THashList* fKeys; //! keys we have in our internal map (or the one of our subresults)
  Double_t fWeight; // weight of this result (default 1.0)
  TString fAlias; // alias name
  mutable TList* fSubResultsToBeIncluded; // inclusion list
  EResultMergingMethod fResultMergingMethod; // how to merge result (e.g. mean or sum)
  Bool_t fIsValid; // is this result valid ?
  mutable THashList* fVisibleKeys; // list of keys to show with the Print method
  
  ClassDef(AliAnalysisMuMuResult,14) // a class to some results (counts, yields, AccxEff, R_AB, etc...)
};

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