ROOT logo
#ifndef ALIANALYSISMUMU_H
#define ALIANALYSISMUMU_H

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

// $Id$

///
/// AliAnalysisMuMu : helper class to digest/plot/massage results from
/// AliAnalysisTaskMuMu
///
/// author : Laurent Aphecetche (Subatech)

#include "AliAnalysisMuMuBinning.h"
#include "TNamed.h"
#include <map>
#include <set>
#include <string>
#include <TString.h>
#include <vector>
#include "RQ_OBJECT.h"
#include "TH1.h"
#include "TH2.h"

class AliAnalysisMuMuConfig;
class AliAnalysisMuMuResult;
class AliAnalysisMuMuJpsiResult;
class AliAnalysisMuMuSpectra;
class AliCounterCollection;
class AliMergeableCollection;
class TF1;
class TFile;
class TGraph;
class TGraphErrors;
class TH1;
class TMap;

class AliAnalysisMuMu : public TObject, public TQObject
{

public:
  
  AliAnalysisMuMu(const char* filename="LHC12c_muons_AOD000_000179687.saf.root",
                  const char* associatedSimFileName="",
                  const char* associatedSimFileName2="",
                  const char* beamYear="pPb2013");
  
  virtual ~AliAnalysisMuMu();
  
  /* Basic checks */
  void BasicCounts(Bool_t detailTrigger=kFALSE,
                   ULong64_t* totalNmb=0x0,
                   ULong64_t* totalNmsl=0x0,
                   ULong64_t* totalNmul=0x0);
  
  void TriggerCountCoverage(const char* triggerList, Bool_t compact=kTRUE,
                            Bool_t orderByTriggerCount=kTRUE);
  
  void SelectRunByTrigger(const char* triggerList);
  
  AliAnalysisMuMuSpectra* FitParticle(const char* particle,
                                      const char* trigger,
                                      const char* eventType,
                                      const char* pairCut,
                                      const char* centrality,
                                      const AliAnalysisMuMuBinning& binning,
                                      const char* spectraType="minv",
                                      Bool_t corrected=kFALSE);

  AliAnalysisMuMuSpectra* CorrectSpectra(const char* type, const char* flavour="");
  
  TH2* ComputeSPDCorrection(const char* type="oneOverAccEff", const char* eventSel="PSALL", const char* triggerSel="ANY", Bool_t bkgReject=kTRUE);
  
  void ComputeFnorm();
  
  TH1* ComputeDiffFnormFromHistos(const char* what="psi",const char* quantity="ntrcorr",const char* flavour="JAVI",Bool_t printout=kFALSE);
  
  void ComputeDiffFnormFromInt(const char* triggerCluster="MUON", const char* eventSelection="PSALLHASSPDSPDZQA_RES0.25_ZDIF0.50SPDABSZLT10.00", AliMergeableCollection* mc=0x0, const char* what="psi",const char* quantity="ntrcorr",const char* flavour="JAVI",Bool_t printout=kTRUE);
  
  void ComputeDiffFnormFromCounters(const char* triggerCluster="MUON",const char* eventSelection="PSALLHASSPDSPDZQA_RES0.25_ZDIF0.50SPDABSZLT10.00", const char* filePileUpCorr="", const char* what="psi",const char* quantity="ntrcorr",const char* flavour="JAVI",Bool_t printout=kTRUE);
  
  void ComputeDiffFnormFromGlobal(const char* triggerCluster="MUON",const char* eventSelection="PSALLHASSPDSPDZQA_RES0.25_ZDIF0.50SPDABSZLT10.00", const char* what="psi",const char* quantity="ntrcorr",const char* flavour="JAVI",Bool_t printout=kTRUE);
  
  void ComputeMeanFnorm(const char* triggerCluster="MUON", const char* eventSelection="PSALL", const char* what="psi",const char* quantity="ntrcorr",const char* flavour="JAVI", Bool_t printout=kTRUE);
  
  void ComputeIntFnormFromCounters(const char* triggerCluster="MUON", const char* eventSelection="PSALLHASSPDSPDZQA_RES0.25_ZDIF0.50SPDABSZLT10.00", const char* filePileUpCorr="", Bool_t printout=kTRUE);
  
  void PlotYiedWSyst(const char* triggerCluster="MUON");
  
  void ComputeJpsiYield(AliMergeableCollection* oc=0x0, Bool_t relative=kFALSE, const char* fNormType="mean",const char* triggerCluster="MUON",const char* whatever="PSI-DNCHDETA-AccEffCorr",const char* sResName="",AliMergeableCollection* ocMBTrigger=0x0, Double_t mNTrCorrection=0.);
  
  void ComputeJpsiMPt(Bool_t relative=kFALSE, const char* whatever="PSI-DNCHDETA-AccEffCorr-MeanPtVsMinvUS",const char* sResName="",AliMergeableCollection* ocMBTrigger=0x0, Double_t mNTrCorrection=0.);
  
  Double_t ErrorPropagationAxBoverCxD(Double_t a,Double_t b,Double_t c,Double_t d);
  
  TH1* ComputeEquNofMB(const char* what="psi",const char* quantity="dnchdeta",const char* flavour="JAVI",Bool_t printout=kFALSE);

  void TwikiOutputFnorm(const char* series="FnormOffline2PUPS,FnormScalersPUPS,FnormBest2,RelDifFnormScalersPUPSvsFnormOffline2PUPS,FnormScalersPUVDM,RelDifFnormScalersPUPSvsFnormScalersPUVDM") const;

  AliAnalysisMuMuSpectra* ComputeYield(const char* type, const char* flavour="");

  void CleanAllSpectra();
  
  ///------
  
//  static AliAnalysisMuMuSpectra* ComputeYield(const char* realFile="ds.list.saf.root",
//                                              const char* simFile="ds.sim.list.saf.root",
//                                              const  char* type="PSI-Y VS PT");

   AliAnalysisMuMuSpectra* RABy(const char* type="", const char* direction="pPb");

  ///-------
  
  TGraph* PlotEventSelectionEvolution(const char* trigger1="CINT7-B-NOPF-MUON", const char* event1="PSALL",
                                   const char* trigger2="CINT7-B-NOPF-MUON", const char* event2="PSALL",
                                      Bool_t drawFills=kFALSE,
                                      Bool_t asRejection=kTRUE) const;

  Bool_t Upgrade();
  
   Bool_t Upgrade(const char* filename);
  
   TObjArray* CompareJpsiPerCMUUWithBackground(const char* jpsiresults="results.root",
                                                     const char* backgroundresults="background.lhc11d.root");
  
   TGraph* CompareJpsiPerCMUUWithSimu(const char* realjpsiresults="results.root",
                                      const char* simjpsiresults="results.sim.root");
  
  
  static TFile* FileOpen(const char* file);
  
  static TString ExpandPathName(const char* file);
  
  
  Bool_t GetCollections(const char* rootfile,
                        AliMergeableCollection*& oc,
                        AliCounterCollection*& cc,
                        AliAnalysisMuMuBinning*& bin,
                        std::set<int>& runnumbers);
  
  AliAnalysisMuMuSpectra* GetSpectra(const char* what, const char* flavour="") const;
  
  TH1* PlotAccEfficiency(const char* whatever="PSI-INTEGRATED");
  
  TH1* PlotJpsiYield(const char* whatever="PSI-DNCHDETA-AccEffCorr");
  
  TH1* PlotSystematicsTestsRelative(const char* quantity,const char* flavour,const char* value2Test);
  
  UInt_t GetSum(AliCounterCollection& cc, const char* triggerList, const char* eventSelection, Int_t runNumber=-1);
  
  ULong64_t GetTriggerScalerCount(const char* triggerList, Int_t runNumber);
  
  Int_t Jpsi(const char* what="integrated", const char* binningFlavour="", Bool_t fitmPt=kFALSE);
  
  Bool_t IsSimulation() const;
  
  AliMergeableCollection* OC() const { return fMergeableCollection; }
  AliCounterCollection* CC() const { return fCounterCollection; }
  AliAnalysisMuMuBinning* BIN() const { return fBinning; }

  void Print(Option_t* opt="") const;
  
  const std::set<int>& RunNumbers() const { return fRunNumbers; }
  
  void DrawMinv(const char* type,
                const char* particle,
                const char* trigger,
                const char* eventType,
                const char* pairCut,
                const char* centrality,
                const char* subresultname="",
                const char* flavour="") const;

  void DrawMinv(const char* type="PT", const char* particle="PSI", const char* flavour="", const char* subresultname="") const;
  
  Bool_t SetCorrectionPerRun(const TGraph& corr, const char* formula="");
  
  void UnsetCorrectionPerRun();
  
  void ExecuteCanvasEvent(Int_t event, Int_t px, Int_t py, TObject *sel);

  std::vector<Double_t> GetMCCB2Tails(const AliAnalysisMuMuBinning::Range& bin) const;
  
  AliAnalysisMuMu* SIM() const { return fAssociatedSimulation; }
  
  AliAnalysisMuMu* SIM2() const { return fAssociatedSimulation2; }
  
  AliAnalysisMuMuSpectra* SPECTRA(const char* fullpath) const;
  
  void SetParticleName(const char* particleName) { fParticleName = particleName; }
  
  const char* GetParticleName() { return fParticleName; }
  
  void Update();

  AliAnalysisMuMuConfig* Config();

  AliAnalysisMuMuConfig* Config() const { return fConfig; }
  
  void SetConfig(const AliAnalysisMuMuConfig& config);

  void SetCentralitySelectionList(const char* centralitySelectionList);
  
private:
  AliAnalysisMuMu(const AliAnalysisMuMu& rhs); // not implemented on purpose
  AliAnalysisMuMu& operator=(const AliAnalysisMuMu& rhs); // not implemented on purpose
  
  void ShowList(const char* title, const TString& list, const char separator=',') const;

  TFile* ReOpen(const char* filename, const char* mode) const;

  TString First(const TString& list) const;
  
  void GetParametersFromMC(TString& fitType, const char* pathCentrPairCut, const char* spectraName, AliAnalysisMuMuBinning::Range* bin) const;
  void GetParametersFromResult(TString& fitType, AliAnalysisMuMuJpsiResult* minvResult) const;

private:

  void SetNofInputParticles(AliAnalysisMuMuJpsiResult& r);

  
  TString fFilename; // file containing the result collections (of objects and counters) from AliAnalysisTaskMuMu
  AliCounterCollection* fCounterCollection; // collection of counters in file

  AliAnalysisMuMuBinning* fBinning; // binning
  
  AliMergeableCollection* fMergeableCollection; // collection of objects in file

  std::set<int> fRunNumbers; // run numbers
  
  TGraph* fCorrectionPerRun; // correction factor per run
  
  AliAnalysisMuMu* fAssociatedSimulation; // associated simulations (if any)
  AliAnalysisMuMu* fAssociatedSimulation2; // second associated simulations (if any)
  
  TString fParticleName; // Name of the simulated particle in the associated simulations

  AliAnalysisMuMuConfig* fConfig; // configuration
  
  ClassDef(AliAnalysisMuMu,12) // class to analysis results from AliAnalysisTaskMuMuXXX tasks
};

#endif
 AliAnalysisMuMu.h:1
 AliAnalysisMuMu.h:2
 AliAnalysisMuMu.h:3
 AliAnalysisMuMu.h:4
 AliAnalysisMuMu.h:5
 AliAnalysisMuMu.h:6
 AliAnalysisMuMu.h:7
 AliAnalysisMuMu.h:8
 AliAnalysisMuMu.h:9
 AliAnalysisMuMu.h:10
 AliAnalysisMuMu.h:11
 AliAnalysisMuMu.h:12
 AliAnalysisMuMu.h:13
 AliAnalysisMuMu.h:14
 AliAnalysisMuMu.h:15
 AliAnalysisMuMu.h:16
 AliAnalysisMuMu.h:17
 AliAnalysisMuMu.h:18
 AliAnalysisMuMu.h:19
 AliAnalysisMuMu.h:20
 AliAnalysisMuMu.h:21
 AliAnalysisMuMu.h:22
 AliAnalysisMuMu.h:23
 AliAnalysisMuMu.h:24
 AliAnalysisMuMu.h:25
 AliAnalysisMuMu.h:26
 AliAnalysisMuMu.h:27
 AliAnalysisMuMu.h:28
 AliAnalysisMuMu.h:29
 AliAnalysisMuMu.h:30
 AliAnalysisMuMu.h:31
 AliAnalysisMuMu.h:32
 AliAnalysisMuMu.h:33
 AliAnalysisMuMu.h:34
 AliAnalysisMuMu.h:35
 AliAnalysisMuMu.h:36
 AliAnalysisMuMu.h:37
 AliAnalysisMuMu.h:38
 AliAnalysisMuMu.h:39
 AliAnalysisMuMu.h:40
 AliAnalysisMuMu.h:41
 AliAnalysisMuMu.h:42
 AliAnalysisMuMu.h:43
 AliAnalysisMuMu.h:44
 AliAnalysisMuMu.h:45
 AliAnalysisMuMu.h:46
 AliAnalysisMuMu.h:47
 AliAnalysisMuMu.h:48
 AliAnalysisMuMu.h:49
 AliAnalysisMuMu.h:50
 AliAnalysisMuMu.h:51
 AliAnalysisMuMu.h:52
 AliAnalysisMuMu.h:53
 AliAnalysisMuMu.h:54
 AliAnalysisMuMu.h:55
 AliAnalysisMuMu.h:56
 AliAnalysisMuMu.h:57
 AliAnalysisMuMu.h:58
 AliAnalysisMuMu.h:59
 AliAnalysisMuMu.h:60
 AliAnalysisMuMu.h:61
 AliAnalysisMuMu.h:62
 AliAnalysisMuMu.h:63
 AliAnalysisMuMu.h:64
 AliAnalysisMuMu.h:65
 AliAnalysisMuMu.h:66
 AliAnalysisMuMu.h:67
 AliAnalysisMuMu.h:68
 AliAnalysisMuMu.h:69
 AliAnalysisMuMu.h:70
 AliAnalysisMuMu.h:71
 AliAnalysisMuMu.h:72
 AliAnalysisMuMu.h:73
 AliAnalysisMuMu.h:74
 AliAnalysisMuMu.h:75
 AliAnalysisMuMu.h:76
 AliAnalysisMuMu.h:77
 AliAnalysisMuMu.h:78
 AliAnalysisMuMu.h:79
 AliAnalysisMuMu.h:80
 AliAnalysisMuMu.h:81
 AliAnalysisMuMu.h:82
 AliAnalysisMuMu.h:83
 AliAnalysisMuMu.h:84
 AliAnalysisMuMu.h:85
 AliAnalysisMuMu.h:86
 AliAnalysisMuMu.h:87
 AliAnalysisMuMu.h:88
 AliAnalysisMuMu.h:89
 AliAnalysisMuMu.h:90
 AliAnalysisMuMu.h:91
 AliAnalysisMuMu.h:92
 AliAnalysisMuMu.h:93
 AliAnalysisMuMu.h:94
 AliAnalysisMuMu.h:95
 AliAnalysisMuMu.h:96
 AliAnalysisMuMu.h:97
 AliAnalysisMuMu.h:98
 AliAnalysisMuMu.h:99
 AliAnalysisMuMu.h:100
 AliAnalysisMuMu.h:101
 AliAnalysisMuMu.h:102
 AliAnalysisMuMu.h:103
 AliAnalysisMuMu.h:104
 AliAnalysisMuMu.h:105
 AliAnalysisMuMu.h:106
 AliAnalysisMuMu.h:107
 AliAnalysisMuMu.h:108
 AliAnalysisMuMu.h:109
 AliAnalysisMuMu.h:110
 AliAnalysisMuMu.h:111
 AliAnalysisMuMu.h:112
 AliAnalysisMuMu.h:113
 AliAnalysisMuMu.h:114
 AliAnalysisMuMu.h:115
 AliAnalysisMuMu.h:116
 AliAnalysisMuMu.h:117
 AliAnalysisMuMu.h:118
 AliAnalysisMuMu.h:119
 AliAnalysisMuMu.h:120
 AliAnalysisMuMu.h:121
 AliAnalysisMuMu.h:122
 AliAnalysisMuMu.h:123
 AliAnalysisMuMu.h:124
 AliAnalysisMuMu.h:125
 AliAnalysisMuMu.h:126
 AliAnalysisMuMu.h:127
 AliAnalysisMuMu.h:128
 AliAnalysisMuMu.h:129
 AliAnalysisMuMu.h:130
 AliAnalysisMuMu.h:131
 AliAnalysisMuMu.h:132
 AliAnalysisMuMu.h:133
 AliAnalysisMuMu.h:134
 AliAnalysisMuMu.h:135
 AliAnalysisMuMu.h:136
 AliAnalysisMuMu.h:137
 AliAnalysisMuMu.h:138
 AliAnalysisMuMu.h:139
 AliAnalysisMuMu.h:140
 AliAnalysisMuMu.h:141
 AliAnalysisMuMu.h:142
 AliAnalysisMuMu.h:143
 AliAnalysisMuMu.h:144
 AliAnalysisMuMu.h:145
 AliAnalysisMuMu.h:146
 AliAnalysisMuMu.h:147
 AliAnalysisMuMu.h:148
 AliAnalysisMuMu.h:149
 AliAnalysisMuMu.h:150
 AliAnalysisMuMu.h:151
 AliAnalysisMuMu.h:152
 AliAnalysisMuMu.h:153
 AliAnalysisMuMu.h:154
 AliAnalysisMuMu.h:155
 AliAnalysisMuMu.h:156
 AliAnalysisMuMu.h:157
 AliAnalysisMuMu.h:158
 AliAnalysisMuMu.h:159
 AliAnalysisMuMu.h:160
 AliAnalysisMuMu.h:161
 AliAnalysisMuMu.h:162
 AliAnalysisMuMu.h:163
 AliAnalysisMuMu.h:164
 AliAnalysisMuMu.h:165
 AliAnalysisMuMu.h:166
 AliAnalysisMuMu.h:167
 AliAnalysisMuMu.h:168
 AliAnalysisMuMu.h:169
 AliAnalysisMuMu.h:170
 AliAnalysisMuMu.h:171
 AliAnalysisMuMu.h:172
 AliAnalysisMuMu.h:173
 AliAnalysisMuMu.h:174
 AliAnalysisMuMu.h:175
 AliAnalysisMuMu.h:176
 AliAnalysisMuMu.h:177
 AliAnalysisMuMu.h:178
 AliAnalysisMuMu.h:179
 AliAnalysisMuMu.h:180
 AliAnalysisMuMu.h:181
 AliAnalysisMuMu.h:182
 AliAnalysisMuMu.h:183
 AliAnalysisMuMu.h:184
 AliAnalysisMuMu.h:185
 AliAnalysisMuMu.h:186
 AliAnalysisMuMu.h:187
 AliAnalysisMuMu.h:188
 AliAnalysisMuMu.h:189
 AliAnalysisMuMu.h:190
 AliAnalysisMuMu.h:191
 AliAnalysisMuMu.h:192
 AliAnalysisMuMu.h:193
 AliAnalysisMuMu.h:194
 AliAnalysisMuMu.h:195
 AliAnalysisMuMu.h:196
 AliAnalysisMuMu.h:197
 AliAnalysisMuMu.h:198
 AliAnalysisMuMu.h:199
 AliAnalysisMuMu.h:200
 AliAnalysisMuMu.h:201
 AliAnalysisMuMu.h:202
 AliAnalysisMuMu.h:203
 AliAnalysisMuMu.h:204
 AliAnalysisMuMu.h:205
 AliAnalysisMuMu.h:206
 AliAnalysisMuMu.h:207
 AliAnalysisMuMu.h:208
 AliAnalysisMuMu.h:209
 AliAnalysisMuMu.h:210
 AliAnalysisMuMu.h:211
 AliAnalysisMuMu.h:212
 AliAnalysisMuMu.h:213
 AliAnalysisMuMu.h:214
 AliAnalysisMuMu.h:215
 AliAnalysisMuMu.h:216
 AliAnalysisMuMu.h:217
 AliAnalysisMuMu.h:218
 AliAnalysisMuMu.h:219
 AliAnalysisMuMu.h:220
 AliAnalysisMuMu.h:221
 AliAnalysisMuMu.h:222
 AliAnalysisMuMu.h:223
 AliAnalysisMuMu.h:224
 AliAnalysisMuMu.h:225
 AliAnalysisMuMu.h:226
 AliAnalysisMuMu.h:227
 AliAnalysisMuMu.h:228
 AliAnalysisMuMu.h:229
 AliAnalysisMuMu.h:230
 AliAnalysisMuMu.h:231
 AliAnalysisMuMu.h:232
 AliAnalysisMuMu.h:233
 AliAnalysisMuMu.h:234
 AliAnalysisMuMu.h:235
 AliAnalysisMuMu.h:236
 AliAnalysisMuMu.h:237
 AliAnalysisMuMu.h:238
 AliAnalysisMuMu.h:239
 AliAnalysisMuMu.h:240
 AliAnalysisMuMu.h:241
 AliAnalysisMuMu.h:242
 AliAnalysisMuMu.h:243
 AliAnalysisMuMu.h:244