ROOT logo
#ifndef ALIBALANCEPSI_H
#define ALIBALANCEPSI_H
/*  See cxx source for full Copyright notice */


/* $Id: AliBalancePsi.h 54125 2012-01-24 21:07:41Z miweber $ */

//-------------------------------------------------------------------------
//                          Class AliBalancePsi
//   This is the class for the Balance Function writ Psi analysis
//
//    Origin: Panos Christakoglou, Nikhef, Panos.Christakoglou@cern.ch
//-------------------------------------------------------------------------

#include <vector>
#include <TObject.h>
#include "TString.h"
#include "TH2D.h"

#include "AliTHn.h"

using std::vector;

#define ANALYSIS_TYPES	7
#define MAXIMUM_NUMBER_OF_STEPS	1024
#define MAXIMUM_STEPS_IN_PSI 360

class TH1D;
class TH2D;
class TH3D;

const Int_t kTrackVariablesSingle = 3;       // track variables in histogram (event class, pTtrig, vertexZ)
const Int_t kTrackVariablesPair   = 6;       // track variables in histogram (event class, dEta, dPhi, pTtrig, ptAssociated, vertexZ)
const TString gBFPsiAnalysisType[ANALYSIS_TYPES] = {"y","eta","qlong","qout","qside","qinv","phi"};

class AliBalancePsi : public TObject {
 public:
  enum EAnalysisType {
    kRapidity = 0, 
    kEta      = 1, 
    kQlong    = 2, 
    kQout     = 3, 
    kQside    = 4, 
    kQinv     = 5, 
    kPhi      = 6 
  };

  AliBalancePsi();
  AliBalancePsi(const AliBalancePsi& balance);
  ~AliBalancePsi();

  void SetCentralityIdentifier(const char* centralityId) {
    fCentralityId = centralityId;}
  
  void SetAnalysisLevel(const char* analysisLevel) {
    fAnalysisLevel = analysisLevel;}
  void SetShuffle(Bool_t shuffle) {fShuffle = shuffle;}
  void SetCentralityInterval(Double_t cStart, Double_t cStop)  { fCentStart = cStart; fCentStop = cStop;};
  void SetEventClass(TString receivedEventClass){ fEventClass = receivedEventClass; } 
  void SetDeltaEtaMax(Double_t receivedDeltaEtaMax){ fDeltaEtaMax = receivedDeltaEtaMax; }
  void SetVertexZBinning(Bool_t receivedVertexBinning=kTRUE){ fVertexBinning = receivedVertexBinning; }
  void SetCustomBinning(TString receivedCustomBinning) { fCustomBinning = receivedCustomBinning; }

  void InitHistograms(void);

  const char* GetAnalysisLevel() {return fAnalysisLevel.Data();}
  Int_t GetNumberOfAnalyzedEvent() {return fAnalyzedEvents;}

  void CalculateBalance(Double_t gReactionPlane, 
			TObjArray* particles,
			TObjArray* particlesMixed,
			Float_t bSign,
			Double_t kMultorCent = -100,
			Double_t vertexZ = 0);
  
  TH2D   *GetCorrelationFunction(TString type,
				 Double_t psiMin, Double_t psiMax,
				 Double_t vertexZMin=-1,
				 Double_t vertexZMax=-1,
				 Double_t ptTriggerMin=-1.,
				 Double_t ptTriggerMax=-1.,
				 Double_t ptAssociatedMin=-1.,
				 Double_t ptAssociatedMax=-1,
				 AliBalancePsi *bMixed=NULL,
				 Bool_t normToTrig = kFALSE,
				 Double_t normalizationRangePhi = TMath::Pi()/6.);
  TH2D   *GetCorrelationFunctionPN(Double_t psiMin, Double_t psiMax,
				   Double_t vertexZMin=-1,
				   Double_t vertexZMax=-1,
				   Double_t ptTriggerMin=-1.,
				   Double_t ptTriggerMax=-1.,
				   Double_t ptAssociatedMin=-1.,
				   Double_t ptAssociatedMax=-1);
  TH2D   *GetCorrelationFunctionNP(Double_t psiMin, Double_t psiMax,
				   Double_t vertexZMin=-1,
				   Double_t vertexZMax=-1,
				   Double_t ptTriggerMin=-1.,
				   Double_t ptTriggerMax=-1.,
				   Double_t ptAssociatedMin=-1.,
				   Double_t ptAssociatedMax=-1);
  TH2D   *GetCorrelationFunctionPP(Double_t psiMin, Double_t psiMax,
				   Double_t vertexZMin=-1,
				   Double_t vertexZMax=-1,
				   Double_t ptTriggerMin=-1.,
				   Double_t ptTriggerMax=-1.,
				   Double_t ptAssociatedMin=-1.,
				   Double_t ptAssociatedMax=-1);
  TH2D   *GetCorrelationFunctionNN(Double_t psiMin, Double_t psiMax,
				   Double_t vertexZMin=-1,
				   Double_t vertexZMax=-1,
				   Double_t ptTriggerMin=-1.,
				   Double_t ptTriggerMax=-1.,
				   Double_t ptAssociatedMin=-1.,
				   Double_t ptAssociatedMax=-1);  
  TH2D   *GetCorrelationFunctionChargeIndependent(Double_t psiMin, Double_t psiMax,
						  Double_t vertexZMin=-1,
						  Double_t vertexZMax=-1,
						  Double_t ptTriggerMin=-1.,
						  Double_t ptTriggerMax=-1.,
						  Double_t ptAssociatedMin=-1.,
						  Double_t ptAssociatedMax=-1);

  AliTHn *GetHistNp() {return fHistP;}
  AliTHn *GetHistNn() {return fHistN;}
  AliTHn *GetHistNpn() {return fHistPN;}
  AliTHn *GetHistNnp() {return fHistNP;}
  AliTHn *GetHistNpp() {return fHistPP;}
  AliTHn *GetHistNnn() {return fHistNN;}

  void SetHistNp(AliTHn *gHist) {
    fHistP = gHist; }//fHistP->FillParent(); fHistP->DeleteContainers();}
  void SetHistNn(AliTHn *gHist) {
    fHistN = gHist; }//fHistN->FillParent(); fHistN->DeleteContainers();}
  void SetHistNpn(AliTHn *gHist) {
    fHistPN = gHist; }//fHistPN->FillParent(); fHistPN->DeleteContainers();}
  void SetHistNnp(AliTHn *gHist) {
    fHistNP = gHist; }//fHistNP->FillParent(); fHistNP->DeleteContainers();}
  void SetHistNpp(AliTHn *gHist) {
    fHistPP = gHist; }//fHistPP->FillParent(); fHistPP->DeleteContainers();}
  void SetHistNnn(AliTHn *gHist) {
    fHistNN = gHist; }//fHistNN->FillParent(); fHistNN->DeleteContainers();}

  TH1D *GetBalanceFunctionHistogram(Int_t iVariableSingle,
				    Int_t iVariablePair,
				    Double_t psiMin, Double_t psiMax,
				    Double_t vertexZMin=-1,
				    Double_t vertexZMax=-1,
				    Double_t ptTriggerMin=-1.,
				    Double_t ptTriggerMax=-1.,
				    Double_t ptAssociatedMin=-1.,
				    Double_t ptAssociatedMax=-1);   //

  TH1D *GetBalanceFunctionHistogram2pMethod(Int_t iVariableSingle,
					    Int_t iVariablePair,
					    Double_t psiMin, Double_t psiMax,
					    Double_t vertexZMin=-1,
					    Double_t vertexZMax=-1,
					    Double_t ptTriggerMin=-1.,
					    Double_t ptTriggerMax=-1.,
					    Double_t ptAssociatedMin=-1.,
					    Double_t ptAssociatedMax=-1,
					    AliBalancePsi *bfMix=NULL);

  TH2D *GetBalanceFunctionDeltaEtaDeltaPhi(Double_t psiMin, Double_t psiMax,
					   Double_t vertexZMin=-1,
					   Double_t vertexZMax=-1,
					   Double_t ptTriggerMin=-1.,
					   Double_t ptTriggerMax=-1.,
					   Double_t ptAssociatedMin=-1.,
					   Double_t ptAssociatedMax=-1);   
  
  TH2D *GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(Double_t psiMin, Double_t psiMax,
						   Double_t vertexZMin=-1,
						   Double_t vertexZMax=-1,
						   Double_t ptTriggerMin=-1.,
						   Double_t ptTriggerMax=-1.,
						   Double_t ptAssociatedMin=-1.,
						   Double_t ptAssociatedMax=-1.,
						   AliBalancePsi *bfMix=NULL);

  TH1D *GetBalanceFunction1DFrom2D2pMethod(Bool_t bPhi,
					   Double_t psiMin, Double_t psiMax,
					   Double_t vertexZMin=-1,
					   Double_t vertexZMax=-1,
					   Double_t ptTriggerMin=-1.,
					   Double_t ptTriggerMax=-1.,
					   Double_t ptAssociatedMin=-1.,
					   Double_t ptAssociatedMax=-1.,
					   AliBalancePsi *bfMix=NULL);

  Bool_t GetMomentsAnalytical(Int_t fVariable, TH1D* gHist, Bool_t kUseZYAM,
			      Double_t &mean, Double_t &meanError,
			      Double_t &sigma, Double_t &sigmaError,
			      Double_t &skewness, Double_t &skewnessError,
			      Double_t &kurtosis, Double_t &kurtosisError);

  //++++++++++++++++++//
  Double_t GetFWHM(Int_t gDeltaEtaPhi, TH1D* gHist,
		   Double_t &fwhm_spline, Double_t &fwhmError);
  //++++++++++++++++++//
  
  TH2D *GetQAHistHBTbefore() {return fHistHBTbefore;}
  TH2D *GetQAHistHBTafter() {return fHistHBTafter;}
  TH3D *GetQAHistConversionbefore() {return fHistConversionbefore;}
  TH3D *GetQAHistConversionafter() {return fHistConversionafter;}
  TH2D *GetQAHistPsiMinusPhi() {return fHistPsiMinusPhi;}
  TH3D *GetQAHistResonancesBefore() {return fHistResonancesBefore;}
  TH3D *GetQAHistResonancesRho() {return fHistResonancesRho;}
  TH3D *GetQAHistResonancesK0() {return fHistResonancesK0;}
  TH3D *GetQAHistResonancesLambda() {return fHistResonancesLambda;}
  TH3D *GetQAHistQbefore() {return fHistQbefore;}
  TH3D *GetQAHistQafter() {return fHistQafter;}

  void UseResonancesCut() {fResonancesCut = kTRUE;}
  void UseHBTCut(Double_t setHBTCutValue = 0.02) {
    fHBTCut = kTRUE; fHBTCutValue = setHBTCutValue;}
  void UseConversionCut(Double_t setInvMassCutConversion = 0.04) {
    fConversionCut = kTRUE; fInvMassCutConversion = setInvMassCutConversion; }
  void UseMomentumDifferenceCut(Double_t gDeltaPtCutMin) {
    fQCut = kTRUE; fDeltaPtMin = gDeltaPtCutMin;}

  // related to customized binning of output AliTHn
  Bool_t    IsUseVertexBinning() { return fVertexBinning; }
  TString   GetBinningString()   { return fBinningString; }
  Double_t* GetBinning(const char* configuration, const char* tag, Int_t& nBins);

 private:
  Float_t   GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign); 

  Bool_t fShuffle; //shuffled balance function object
  TString fAnalysisLevel; //ESD, AOD or MC
  Int_t fAnalyzedEvents; //number of events that have been analyzed

  TString fCentralityId;//Centrality identifier to be used for the histo naming

  Double_t fCentStart;
  Double_t fCentStop;

  AliTHn *fHistP; //N+
  AliTHn *fHistN; //N-
  AliTHn *fHistPN; //N+-
  AliTHn *fHistNP; //N-+
  AliTHn *fHistPP; //N++
  AliTHn *fHistNN; //N--

  //QA histograms
  TH2D *fHistHBTbefore; // Delta Eta vs. Delta Phi before HBT inspired cuts
  TH2D *fHistHBTafter; // Delta Eta vs. Delta Phi after HBT inspired cuts
  TH3D *fHistConversionbefore; // 3D histogram (Deta,Dphi,Invmass) before Conversion cuts
  TH3D *fHistConversionafter; // 3D histogram (Deta,Dphi,Invmass) before Conversion cuts
  TH2D *fHistPsiMinusPhi;// psi - phi QA histogram
  TH3D *fHistResonancesBefore; // 3D histogram (Deta,Dphi,Invmass) before resonance cuts
  TH3D *fHistResonancesRho;    // 3D histogram (Deta,Dphi,Invmass) after removing rho 
  TH3D *fHistResonancesK0;     // 3D histogram (Deta,Dphi,Invmass) after removing rho, K0 
  TH3D *fHistResonancesLambda; // 3D histogram (Deta,Dphi,Invmass) after removing rho, K0, and Lambda
  TH3D *fHistQbefore; // Delta Eta vs. Delta Phi before cut on momentum difference
  TH3D *fHistQafter; // Delta Eta vs. Delta Phi after cut on momentum difference

  Double_t fPsiInterval;// interval in Psi-phi1
  Double_t fDeltaEtaMax;// maximum delta eta for output THnSparse

  Bool_t fResonancesCut;//resonances cut
  Bool_t fHBTCut;//cut for two-track efficiency (like HBT group)
  Double_t fHBTCutValue;// value for two-track efficiency cut (default = 0.02 from dphicorrelations)
  Bool_t fConversionCut;//conversion cut
  Double_t fInvMassCutConversion;//invariant mass for conversion cut
  Bool_t fQCut;//cut on momentum difference to suppress femtoscopic effect correlations
  Double_t fDeltaPtMin;//delta pt cut: minimum value
  Bool_t fVertexBinning;//use vertex z binning in AliTHn
  TString fCustomBinning;//for setting customized binning
  TString fBinningString;//final binning string

  TString fEventClass;

  AliBalancePsi & operator=(const AliBalancePsi & ) {return *this;}

  ClassDef(AliBalancePsi, 2)
};

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