ROOT logo
#ifndef AliChaoticity_cxx
#define AliChaoticity_cxx
//
// Class AliChaoticity
//
// AliChaoticity
// author:
//        Dhevan Gangadharan (dhevan.raja.gangadharan@cern.ch)
//



class TH1F;
class TH3F;
class TH1D;
class TH2D;
class TH3D;

class TProfile;
class TProfile2D;
class TRandom3;

class AliESDEvent;
class AliAODEvent;
class AliESDtrackCuts;
class AliESDpid;

#include "AliAnalysisTask.h"
#include "AliAnalysisTaskSE.h"
#include "AliESDpid.h"
#include "AliAODPid.h"
#include "AliChaoticityEventCollection.h"
#include "AliCentrality.h"

class AliChaoticity : public AliAnalysisTaskSE {
 public:

  AliChaoticity();
  AliChaoticity(const Char_t *name);
  virtual ~AliChaoticity();
  AliChaoticity(const AliChaoticity &obj); 
  AliChaoticity &operator=(const AliChaoticity &obj);
  

  virtual void   UserCreateOutputObjects();
  virtual void   Exec(Option_t *option);
  virtual void   Terminate(Option_t *);

  enum {
    kPairLimit = 15000,//15000
    kNormPairLimit = 45000,
    kMultLimitPbPb = 2000,//2000
    kMultLimitpp = 300,
    kMultBinspp = 11,//20 or 11
    kMCarrayLimit = 110000,
    kQbins = 20,
    kQbinsWeights = 40,
    kNDampValues = 16,
    kRmin = 5,// EW min radii 5 fm
    kDENtypes = 1,// was (kRVALUES)*kNDampValues
    kSCLimit2 = 1,// 1, 6
    kSCLimit3 = 1// 1, 10
  };

  static const Int_t fKbinsT   = 4;// Set fKstep as well !!!!
  static const Int_t fKbinsY   = 1;// Set fKstep as well !!!!
  static const Int_t fEDbins   = 2;
  static const Int_t fCentBins = 10;// 0-50%
  static const Int_t fRVALUES  = 7;// 7 EW radii (5-11) , was 8 Gaussian radii (3-10fm)


  Int_t GetNumKtBins() const {return AliChaoticity::fKbinsT;}
  Int_t GetNumRValues() const {return AliChaoticity::fRVALUES;}
  Int_t GetNumCentBins() const {return AliChaoticity::fCentBins;}
  Int_t GetNumEDBins() const {return AliChaoticity::fEDbins;}
  void SetWeightArrays(Bool_t legoCase=kTRUE, TH3F *histos[AliChaoticity::fKbinsT][AliChaoticity::fCentBins]=0x0);
  void SetMomResCorrections(Bool_t legoCase=kTRUE, TH2D *temp2D=0x0);
  void SetFSICorrelations(Bool_t legoCase=kTRUE, TH2D *temp2DTherm[6]=0x0, TH3D *temp3Dos[6]=0x0, TH3D *temp3Dss[6]=0x0);
  //
  void SetMCdecision(Bool_t mc) {fMCcase = mc;}
  void SetTabulatePairs(Bool_t tabulate) {fTabulatePairs = tabulate;}
  void SetPbPbCase(Bool_t pbpb) {fPbPbcase = pbpb;}
  void SetGenerateSignal(Bool_t gen) {fGenerateSignal = gen;}
  void SetGeneratorOnly(Bool_t genOnly) {fGeneratorOnly = genOnly;}
  void SetCentBinRange(Int_t low, Int_t high) {fCentBinLowLimit = low; fCentBinHighLimit = high;}
  void SetLEGOCase(Bool_t lego) {fLEGO = lego;}
  void SetFilterBit(UInt_t filterbit) {fFilterBit = filterbit;}
  void SetMaxChi2NDF(Float_t MaxChi2NDF) {fMaxChi2NDF = MaxChi2NDF;}
  void SetMinTPCncls(Int_t MinTPCncls) {fMinTPCncls = MinTPCncls;}
  void SetPairSeparationCutEta(Float_t pairsep) {fMinSepPairEta = pairsep;}
  void SetPairSeparationCutPhi(Float_t pairsep) {fMinSepPairPhi = pairsep;}
  void SetNsigmaTPC(Float_t nsig) {fSigmaCutTPC = nsig;}
  void SetNsigmaTOF(Float_t nsig) {fSigmaCutTOF = nsig;}
  void SetRMax(Int_t rbin) {fRMax = rbin;}
  void SetFixedLambdaBinMomRes(Int_t lbin) {fFixedLambdaBinMomRes = lbin;}
  void SetFixedLambdaBinr3(Int_t lbin) {fFixedLambdaBinr3 = lbin;}
  //


 private:

  void ParInit();
  Bool_t AcceptPair(AliChaoticityTrackStruct, AliChaoticityTrackStruct);
  Float_t GamovFactor(Int_t, Int_t, Float_t);
  void Shuffle(Int_t*, Int_t, Int_t);
  Short_t FillIndex2part(Short_t);
  Short_t FillIndex3part(Short_t);
  Short_t SetQcutBin(Short_t);
  Short_t SetNormBin(Short_t);
  void SetFillBins2(Short_t, Short_t, Short_t, Int_t, Int_t, Int_t&, Int_t&);
  void SetFillBins3(Short_t, Short_t, Short_t, Short_t, Int_t, Int_t, Int_t, Short_t, Int_t&, Int_t&, Int_t&, Bool_t&, Bool_t&, Bool_t&);
  void ArrangeQs(Short_t, Short_t, Short_t, Short_t, Int_t, Int_t, Int_t, Float_t, Float_t, Float_t, Short_t, Short_t, Float_t&, Float_t&, Float_t&);
  Float_t GetQinv(Short_t, Float_t[], Float_t[]);
  void GetQosl(Float_t[], Float_t[], Float_t&, Float_t&, Float_t&);
  void GetWeight(Float_t[], Float_t[], Float_t&, Float_t&);
  void FourVectProdTerms(Float_t [], Float_t [], Float_t [], Float_t&, Float_t&, Float_t&, Float_t&, Float_t&);
  Float_t FSICorrelationTherm2(Int_t, Int_t, Float_t);
  Float_t MCWeight(Int_t, Int_t, Int_t, Int_t, Float_t, Float_t);
  Float_t MCWeightOSL(Int_t, Int_t, Int_t, Int_t, Float_t, Float_t, Float_t, Float_t);
  Float_t MCWeight3D(Bool_t, Int_t, Int_t, Float_t, Float_t, Float_t, Float_t, Float_t, Float_t);
  Double_t FSICorrelationOmega0(Bool_t, Double_t, Double_t, Double_t);
  //
  
  
  const char* fname;// name of class
  AliAODEvent            *fAOD; //!    // AOD object
  TList                  *fOutputList; //! Compact Output list
  AliPIDResponse         *fPIDResponse; //! PID response object; equivalent to AliAODpidUtil
  
  
  AliChaoticityEventCollection ***fEC; //!
  AliChaoticityEventStruct *fEvt; //!
  AliChaoticityTrackStruct *fTempStruct; //!
  TRandom3* fRandomNumber; //!

  
 
  //////////////////////////////
  // histogram structures

  struct St_DT {
    TH3D *fTwoPartNorm; //!
    //TH3D *fTwoPartNormErr; //!
    TH3D *f4VectProd1TwoPartNorm; //!
    TH3D *f4VectProd2TwoPartNorm; //!
    TH3D *f4VectProd1TwoPartNormIdeal; //!
    TH3D *f4VectProd2TwoPartNormIdeal; //!
    TH3D *f4VectProd1TwoPartNormSmeared; //!
    TH3D *f4VectProd2TwoPartNormSmeared; //!
  };  
  struct St6 {
    TH1D *fExplicit3; //!
    TH1D *fNormEx3; //!
    //
    TH1D *fNorm3; //!
    TH3D *fTerms3; //!
    TH3D *f4VectProd1Terms; //!
    TH3D *f4VectProd2Terms; //!
    TH3D *f4VectProd1TermsIdeal; //!
    TH3D *f4VectProd2TermsIdeal; //!
    TH3D *f4VectProd1TermsSmeared; //!
    TH3D *f4VectProd2TermsSmeared; //!
    TH3D *f4VectProd1TermsSumK3; //!
    TH3D *f4VectProd2TermsSumK3; //!
    TH3D *f4VectProd1TermsEnK3; //!
    TH3D *f4VectProd2TermsEnK3; //!
    TH3D *f4VectProd1TermsSumK2; //!
    TH3D *f4VectProd2TermsSumK2; //!
    TH3D *f4VectProd1TermsEnK2; //!
    TH3D *f4VectProd2TermsEnK2; //!
    TH3D *fIdeal; //!
    TH3D *fSmeared; //!
    TH3D *fQW12; //!
    TH3D *fQW13; //!
    TH3D *fSumK3; //!
    TH3D *fEnK3; //!
    TH3D *f4VectProd1Q3W; //!
    TH3D *f4VectProd2Q3W; //!
    //
    struct St_DT DT[kDENtypes];
  };
  struct St7 {
    TH3D *fExplicit2OSL; //!
    TH3D *fExplicit2OSLQW; //!
  };
  struct St5 {
    TH2D *fExplicit2; //!
    TH2D *fExplicit2QW; //!
    TH3D *fExplicit2ThreeD; //!
    TProfile2D *fAvgP; //!
    TH2D *fIdeal; //!
    TH2D *fSmeared; //!
    //
    TH1D *fMCqinv; //!
    TH1D *fMCqinvQW; //!
    TH2D *fPIDpurityDen; //!
    TH2D *fPIDpurityNum; //!
    struct St7 OSL_ktbin[2];
  };
  struct St_EDB {// SC structure
    struct St5 TwoPT[2];
    struct St6 ThreePT[5];
  };
  struct St_M {
    struct St_EDB EDB[fEDbins];
  };
  struct St4 {
    struct St_M MB[fCentBins];
  };
  struct St3 {
    struct St4 SC[kSCLimit3];
  };
  struct St2 {
    struct St3 Charge3[2];
    struct St4 SC[kSCLimit2];
  };
  struct St1 {
    struct St2 Charge2[2];
  };
  struct St1 Charge1[2];//!


  /////////////////////
  // 4D r3 denominator
  struct St_Ky {
    struct St_M MB[fCentBins];
  };
  struct St_Kt {
    struct St_Ky KY[fKbinsY];
  };
  struct St_Kt KT[fKbinsT];//!
  
 
  Bool_t fLEGO;
  Bool_t fMCcase;
  Bool_t fAODcase;
  Bool_t fPbPbcase;
  Bool_t fGenerateSignal;
  Bool_t fGeneratorOnly;
  Bool_t fPdensityExplicitLoop;
  Bool_t fPdensityPairCut;
  Bool_t fTabulatePairs;
  Int_t fRMax;
  Int_t fFixedLambdaBinMomRes;
  Int_t fFixedLambdaBinr3;
  UInt_t fFilterBit;
  Float_t fMaxChi2NDF;
  Int_t fMinTPCncls;
  Double_t fBfield;
  Int_t fMbin;
  Int_t fFSIbin;
  Int_t fEDbin;
  Int_t fMbins;
  Int_t fMultLimit;      
  Int_t fCentBinLowLimit;
  Int_t fCentBinHighLimit;
  Int_t fEventCounter;
  Int_t fEventsToMix;
  Int_t fZvertexBins;
  Int_t fMultLimits[kMultBinspp+1];
  Float_t fQcut[3];
  Float_t fQLowerCut;
  Float_t fNormQcutLow[3];
  Float_t fNormQcutHigh[3];
  Float_t fKupperBound;
  Float_t fQupperBound;
  Float_t fQupperBoundWeights;
  Float_t fKstepT[fKbinsT];
  Float_t fKstepY[fKbinsY];
  Float_t fKmeanT[fKbinsT];
  Float_t fKmeanY[fKbinsY];
  Float_t fKmiddleT[fKbinsT];
  Float_t fKmiddleY[fKbinsY];
  Float_t fQstep;
  Float_t fQstepWeights;
  Float_t fQmean[kQbinsWeights];
  Float_t fDampStart;
  Float_t fDampStep;
  
  Float_t fTPCTOFboundry;
  Float_t fTOFboundry;
  Float_t fSigmaCutTPC;
  Float_t fSigmaCutTOF;
  
  Float_t fMinSepPairEta;
  Float_t fMinSepPairPhi;
  Float_t fShareQuality;
  Float_t fShareFraction;
  
  Float_t fTrueMassP, fTrueMassPi, fTrueMassK, fTrueMassKs, fTrueMassLam;
 
  Int_t fKtIndexL,fKtIndexH;
  //
  Int_t fQoIndexL,fQoIndexH;
  Int_t fQsIndexL,fQsIndexH;
  Int_t fQlIndexL,fQlIndexH;

  Bool_t fDummyB;

  
  Char_t fDefaultsCharMult[kMultLimitPbPb];//!
  Char_t fDefaultsCharSE[kPairLimit];//!
  Char_t fDefaultsCharME[2*kPairLimit];//!
  Int_t fDefaultsInt[kMultLimitPbPb];//!
  TArrayI *fPairLocationSE[kMultLimitPbPb];//!
  TArrayI *fPairLocationME[kMultLimitPbPb];//!
  TArrayC *fTripletSkip1[kPairLimit];//!
  TArrayC *fTripletSkip2[2*kPairLimit];//!
  TArrayI *fOtherPairLocation1[2][kMultLimitPbPb];//!
  TArrayI *fOtherPairLocation2[2][kMultLimitPbPb];//!
  TArrayC *fNormPairSwitch[3][kMultLimitPbPb];//!
  TArrayC *fPairSplitCut[4][kMultLimitPbPb];//!
  
  AliChaoticityNormPairStruct *fNormPairs[3];//!
  
 public:
  TH2D *fMomResC2;
  TH2D *fFSI2SS;
  TH2D *fFSI2OS;
  TH3D *fFSIOmega0SS[6];
  TH3D *fFSIOmega0OS[6];
  TH3F *fNormWeight[fKbinsT][fCentBins];
  

  ClassDef(AliChaoticity, 1); 
};

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