correlation code cleaning and refactoring, avoid code duplication whenever possible...
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / AliAnaParticleHadronCorrelation.h
CommitLineData
045396c8 1#ifndef ALIANAPARTICLEHADRONCORRELATION_H
2#define ALIANAPARTICLEHADRONCORRELATION_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
045396c8 5
6//_________________________________________________________________________
7// Class that contains the algorithm for the analysis of particle - hadron correlations
8// Particle (for example direct gamma) must be found in a previous analysis
9//-- Author: Gustavo Conesa (INFN-LNF)
10
11// Modified by Yaxian Mao:
12// 1. add the UE subtraction for corrlation study
13// 2. change the correlation variable
14// 3. Only use leading particle(cluster/track) as trigger for correlation (2010/07/02)
15// 4. Make decay photon-hadron correlations where decay contribute pi0 mass (2010/09/09)
16// 5. fill the pout to extract kt at the end, also to study charge asymmetry(2010/10/06)
17// 6. Add the possibility for event selection analysis based on vertex and multiplicity bins (10/10/2010)
18// 7. change the way of delta phi cut for UE study due to memory issue (reduce histograms)
19// 8. Add the possibility to request the absolute leading particle at the near side or not, set trigger bins, general clean-up (08/2011)
20
045396c8 21// --- Analysis system ---
745913ae 22#include "AliAnaCaloTrackCorrBaseClass.h"
045396c8 23class AliAODPWG4ParticleCorrelation ;
24
745913ae 25class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
045396c8 26
27 public:
c5693f62 28
045396c8 29 AliAnaParticleHadronCorrelation() ; // default ctor
30 virtual ~AliAnaParticleHadronCorrelation() {;} //virtual dtor
045396c8 31
32 // General methods
907b38cd 33
045396c8 34 TObjString * GetAnalysisCuts();
35
36 TList * GetCreateOutputObjects();
37
38 void InitParameters();
39
40 void MakeAnalysisFillAOD() ;
41
42 void MakeAnalysisFillHistograms() ;
43
44 void Print(const Option_t * opt) const;
45
46 // Main analysis methods
47
907b38cd 48 Bool_t GetDecayPhotonMomentum(const AliAODPWG4Particle* trigger, TLorentzVector & mom1,TLorentzVector & mom2);
49
c5693f62 50 Bool_t MakeChargedCorrelation (AliAODPWG4ParticleCorrelation * aodParticle, const TObjArray* pl, const Bool_t bFillHisto) ;
045396c8 51
c5693f62 52 Bool_t MakeNeutralCorrelation (AliAODPWG4ParticleCorrelation * aodParticle, const TObjArray* pl, const Bool_t bFillHisto) ;
045396c8 53
66e64043 54 void MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation * aodParticle);
045396c8 55
907b38cd 56 // Filling histogram methods
57
58 void FillChargedAngularCorrelationHistograms (const Float_t ptAssoc, const Float_t ptTrig, const Int_t assocBin,
59 const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi,
60 const Float_t etaAssoc, const Float_t etaTrig,
61 const Bool_t decay, const Float_t hmpidSignal,const Int_t nTracks);
62
63 Bool_t FillChargedMCCorrelationHistograms (const Float_t mcAssocPt, Float_t mcAssocPhi, const Float_t mcAssocEta,
64 const Float_t mcTrigPt, const Float_t mcTrigPhi, const Float_t mcTrigEta );
65
66
67 void FillChargedMomentumImbalanceHistograms (const Float_t ptTrig, const Float_t ptAssoc,
68 const Float_t xE, const Float_t hbpXE,
69 const Float_t zT, const Float_t hbpZT,
70 const Float_t pout, const Float_t deltaPhi,
71 const Int_t nTracks, const Int_t charge,
72 const Int_t assocBin, const Bool_t decay );
73
74 void FillChargedUnderlyingEventHistograms (const Float_t ptTrig, const Float_t ptAssoc,
75 const Float_t deltaPhi, const Int_t nTracks);
76
77 void FillChargedUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc,
78 const Float_t xE, const Float_t hbpXE,
79 const Float_t zT, const Float_t hbpZT,
80 const Float_t deltaPhi);
81
82 void FillDecayPhotonCorrelationHistograms (const Float_t ptAssoc, const Float_t phiAssoc,
83 const TLorentzVector mom1, const TLorentzVector mom2,
84 const Bool_t bChargedOrNeutral);
85
86
87 void FillNeutralAngularCorrelationHistograms (const Float_t ptAssoc, const Float_t ptTrig,
88 const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi,
89 const Float_t etaAssoc, const Float_t etaTrig);
90
91 void FillNeutralUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc,
92 const Float_t xE, const Float_t hbpXE,
93 const Float_t zT, const Float_t hbpZT,
94 const Float_t deltaPhi);
045396c8 95
96 // Parameter setter and getter
97
907b38cd 98 Float_t GetMinimumTriggerPt() const { return fMinTriggerPt ; }
66e64043 99
907b38cd 100 Float_t GetMaximumAssociatedPt() const { return fMaxAssocPt ; }
101 Float_t GetMinimumAssociatedPt() const { return fMinAssocPt ; }
66e64043 102
907b38cd 103 Double_t GetDeltaPhiMaxCut() const { return fDeltaPhiMaxCut ; }
104 Double_t GetDeltaPhiMinCut() const { return fDeltaPhiMinCut ; }
66e64043 105
907b38cd 106 Double_t GetUeDeltaPhiMaxCut() const { return fUeDeltaPhiMaxCut ; }
107 Double_t GetUeDeltaPhiMinCut() const { return fUeDeltaPhiMinCut ; }
045396c8 108
907b38cd 109 void SetMinimumTriggerPt(Float_t min) { fMinTriggerPt = min ; }
66e64043 110
111 void SetAssociatedPtRange(Float_t min, Float_t max)
907b38cd 112 { fMaxAssocPt = max ; fMinAssocPt = min ; }
66e64043 113
045396c8 114 void SetDeltaPhiCutRange(Double_t phimin, Double_t phimax)
907b38cd 115 { fDeltaPhiMaxCut = phimax ; fDeltaPhiMinCut = phimin ; }
66e64043 116
045396c8 117 void SetUeDeltaPhiCutRange(Double_t uephimin, Double_t uephimax)
907b38cd 118 { fUeDeltaPhiMaxCut = uephimax ; fUeDeltaPhiMinCut = uephimin ; }
045396c8 119
907b38cd 120 Bool_t IsSeveralUEOn() const { return fMakeSeveralUE ; }
121 void SwitchOnSeveralUECalculation() { fMakeSeveralUE = kTRUE ; }
122 void SwitchOffSeveralUECalculation() { fMakeSeveralUE = kFALSE ; }
045396c8 123
124 // Do trigger-neutral correlation
907b38cd 125 Bool_t DoNeutralCorr() const { return fNeutralCorr ; }
126 void SwitchOnNeutralCorr() { fNeutralCorr = kTRUE ; }
127 void SwitchOffNeutralCorr() { fNeutralCorr = kFALSE ; }
045396c8 128
129 // Taking the absolute leading as the trigger or not
907b38cd 130 Bool_t DoAbsoluteLeading() const { return fMakeAbsoluteLeading ; }
131 void SwitchOnAbsoluteLeading() { fMakeAbsoluteLeading = kTRUE ; }
132 void SwitchOffAbsoluteLeading() { fMakeAbsoluteLeading = kFALSE ; }
045396c8 133
3f150b4b 134 // Taking the near side leading as the trigger or not
907b38cd 135 Bool_t DoNearSideLeading() const { return fMakeNearSideLeading ; }
136 void SwitchOnNearSideLeading() { fMakeNearSideLeading = kTRUE ; }
137 void SwitchOffNearSideLeading() { fMakeNearSideLeading = kFALSE ; }
3f150b4b 138
045396c8 139 // Do decay-hadron correlation if it is pi0 trigger
907b38cd 140 Bool_t IsPi0Trigger() const { return fPi0Trigger ; }
141 void SwitchOnPi0TriggerDecayCorr() { fPi0Trigger = kTRUE ; }
142 void SwitchOffPi0TriggerDecayCorr() { fPi0Trigger = kFALSE ; }
143
144 Bool_t IsDecayTrigger() const { return fDecayTrigger ; }
145 void SwitchOnDecayTriggerDecayCorr() { fDecayTrigger = kTRUE ; }
146 void SwitchOffDecayTriggerDecayCorr() { fDecayTrigger = kFALSE ; }
147
148 Bool_t IsHMPIDCorrelation() const { return fHMPIDCorrelation ; }
149 void SwitchOnHMPIDCorrelation() { fHMPIDCorrelation = kTRUE ; }
150 void SwitchOffHMPIDCorrelation() { fHMPIDCorrelation = kFALSE ; }
045396c8 151
907b38cd 152 void SwitchOnFillBradHistograms() { fFillBradHisto = kTRUE ; }
153 void SwitchOffFillBradHistograms() { fFillBradHisto = kFALSE ; }
154
155 Bool_t OnlyIsolated() const { return fSelectIsolated ; }
156 void SelectIsolated(Bool_t s) { fSelectIsolated = s ; }
045396c8 157
907b38cd 158 void SetPi0AODBranchName(TString n) { fPi0AODBranchName = n ; }
045396c8 159
05d0d05d 160 void SetNAssocPtBins(Int_t n) ;
161 void SetAssocPtBinLimit(Int_t ibin, Float_t pt) ;
045396c8 162
163 private:
66e64043 164 Float_t fMinTriggerPt ; // Minimum trigger hadron pt
165 Float_t fMaxAssocPt ; // Maximum associated hadron pt
166 Float_t fMinAssocPt ; // Minimum associated hadron pt
045396c8 167 Double_t fDeltaPhiMaxCut ; // Minimum Delta Phi Gamma-Hadron
168 Double_t fDeltaPhiMinCut ; // Maximum Delta Phi Gamma-Hadron
169 Bool_t fSelectIsolated ; // Select only trigger particles isolated
170 Bool_t fMakeSeveralUE ; // Do analysis for several underlying events contribution
171 Double_t fUeDeltaPhiMaxCut ; // Minimum Delta Phi Gamma-Underlying Hadron
172 Double_t fUeDeltaPhiMinCut ; // Maximum Delta Phi Gamma-Underlying Hadron
173 TString fPi0AODBranchName; // Name of AOD branch with pi0, not trigger
174 Bool_t fNeutralCorr ; // switch the analysis with neutral particles
175 Bool_t fPi0Trigger ; // switch the analysis with decay photon from pi0 trigger
907b38cd 176 Bool_t fDecayTrigger ; // switch the analysis with decay photon from photon trigger
3f150b4b 177 Bool_t fMakeAbsoluteLeading ; // requesting absolute leading triggers
178 Bool_t fMakeNearSideLeading ; // requesting near side leading (+-90ยบ from trigger particle) triggers
045396c8 179 Int_t fLeadingTriggerIndex ; // Store here per event the trigger index, to avoid too many loops
907b38cd 180 Bool_t fHMPIDCorrelation ; // Correlate with particles on HMPID or its acceptance
181 Bool_t fFillBradHisto ; // DPhi histograms calculated differently
05d0d05d 182 Int_t fNAssocPtBins ; // Number of associated pT bins under study
183 Float_t fAssocPtBinLimit[10] ; // Associated pT under study
045396c8 184
185 //Histograms
186
187 //leading particles
188 TH1F * fhPtLeading; //! pT distribution of leading particles
189 TH2F * fhPhiLeading; //! phi distribution vs pT of leading particles
190 TH2F * fhEtaLeading; //! eta distribution vs pT of leading particles
191
192 //trigger-charged histograms
193 TH2F * fhDeltaPhiDeltaEtaCharged ; //! differences of eta and phi between trigger and charged hadrons
194 TH2F * fhPhiCharged ; //! Phi distribution of charged particles
195 TH2F * fhEtaCharged ; //! Eta distribution of charged particles
196 TH2F * fhDeltaPhiCharged ; //! Difference of charged particle phi and trigger particle phi as function of trigger particle pT
197 TH2F * fhDeltaEtaCharged ; //! Difference of charged particle eta and trigger particle eta as function of trigger particle pT
198 TH2F * fhDeltaPhiChargedPt ; //! Difference of charged particle phi and trigger particle phi as function of charged particle pT
199 TH2F * fhDeltaPhiUeChargedPt ; //! Difference of charged particle from underlying events phi and trigger particle phi as function of charged particle pT
3f150b4b 200 TH2F * fhXECharged ; //! Trigger particle -charged hadron momentum imbalance histogram
201 TH2F * fhXEUeCharged ; //! Trigger particle -underlying charged hadron momentum imbalance histogram
202 TH2F * fhXEPosCharged ; //! Trigger particle -positive charged hadron momentum imbalance histogram
203 TH2F * fhXENegCharged ; //! Trigger particle -negative charged hadron momentum imbalance histogram
204 TH2F * fhPtHbpXECharged ; //! Trigger particle -charged hadron momentum HBP histogram
205 TH2F * fhPtHbpXEUeCharged ; //! Trigger particle -underlying charged hadron momentum HBP histogram
206 TH2F * fhZTCharged ; //! Trigger particle -charged hadron momentum imbalance histogram
207 TH2F * fhZTUeCharged ; //! Trigger particle -underlying charged hadron momentum imbalance histogram
208 TH2F * fhZTPosCharged ; //! Trigger particle -positive charged hadron momentum imbalance histogram
209 TH2F * fhZTNegCharged ; //! Trigger particle -negative charged hadron momentum imbalance histogram
210 TH2F * fhPtHbpZTCharged ; //! Trigger particle -charged hadron momentum HBP histogram
211 TH2F * fhPtHbpZTUeCharged ; //! Trigger particle -underlying charged hadron momentum HBP histogram
212
045396c8 213 //if several UE calculation is on, most useful for jet-jet events contribution
214 TH2F * fhDeltaPhiUeLeftCharged ; //! Difference of charged particle from underlying events phi and trigger particle phi as function of charged particle pT
215 TH2F * fhDeltaPhiUeRightCharged ; //! Difference of charged particle from underlying events phi and trigger particle phi
3f150b4b 216 TH2F * fhXEUeLeftCharged ; //! Trigger particle -underlying charged hadron momentum imbalance histogram
217 TH2F * fhXEUeRightCharged ; //! Trigger particle -underlying charged hadron momentum imbalance histogram
218 TH2F * fhPtHbpXEUeLeftCharged ; //! Trigger particle -underlying charged hadron momentum HBP histogram
219 TH2F * fhPtHbpXEUeRightCharged ; //! Trigger particle -underlying charged hadron momentum HBP histogram
220 TH2F * fhZTUeLeftCharged ; //! Trigger particle -underlying charged hadron momentum imbalance histogram
221 TH2F * fhZTUeRightCharged ; //! Trigger particle -underlying charged hadron momentum imbalance histogram
222 TH2F * fhPtHbpZTUeLeftCharged ; //! Trigger particle -underlying charged hadron momentum HBP histogram
223 TH2F * fhPtHbpZTUeRightCharged ; //! Trigger particle -underlying charged hadron momentum HBP histogram
224
045396c8 225 //for pout and kt extraction
05d0d05d 226 TH2F * fhPtTrigPout ; //! Pout =associated pt*sin(delta phi) distribution vs trigger pt
045396c8 227 TH2F * fhPtTrigCharged ; //! trigger and correlated particl pt, to be used for mean value for kt
228
229 //if different multiplicity analysis asked
05d0d05d 230 TH2F ** fhTrigDeltaPhiCharged ; //![GetMultiBin()] differences of phi between trigger and charged hadrons
231 TH2F ** fhTrigDeltaEtaCharged ; //![GetMultiBin()] differences of eta between trigger and charged hadrons
907b38cd 232 TH2F ** fhTrigXECorr ; //![GetMultiBin()] Trigger particle -charged hadron momentum imbalance histogram
233 TH2F ** fhTrigXEUeCorr ; //![GetMultiBin()] Trigger particle -UE charged hadron momentum imbalance histogram
234 TH2F ** fhTrigZTCorr ; //![GetMultiBin()] Trigger particle -charged hadron momentum imbalance histogram
235 TH2F ** fhTrigZTUeCorr ; //![GetMultiBin()] Trigger particle -UE charged hadron momentum imbalance histogram
3f150b4b 236
05d0d05d 237 TH2F * fhAssocPtBkg; //! Trigger pT vs associated pT for background
238 TH2F ** fhDeltaPhiAssocPtBin; //![fNAssocPtBins] Trigger pT vs dPhi for different associated pt bins
06d3bad7 239 TH2F ** fhDeltaPhiAssocPtBinHMPID; //![fNAssocPtBins] Trigger pT vs dPhi for different associated pt bins, track with HMPID
240 TH2F ** fhDeltaPhiAssocPtBinHMPIDAcc; //![fNAssocPtBins] Trigger pT vs dPhi for different associated pt bins, track with HMPIDAcc
05d0d05d 241 TH2F ** fhDeltaPhiBradAssocPtBin; //![fNAssocPtBins] Trigger pT vs dPhi Brad (?) for different associated pt bins
66e64043 242 TH2F * fhDeltaPhiBrad; //! Trigger pT vs dPhi Brad (?) for different associated pt bins
05d0d05d 243 TH2F ** fhXEAssocPtBin ; //![fNAssocPtBins] Trigger pT vs xE for different associated pt bins
3f150b4b 244 TH2F ** fhZTAssocPtBin ; //![fNAssocPtBins] Trigger pT vs zT for different associated pt bins
3f150b4b 245
045396c8 246 //trigger-neutral histograms
247 TH2F * fhDeltaPhiDeltaEtaNeutral ; //! differences of eta and phi between trigger and neutral hadrons (pi0)
248 TH2F * fhPhiNeutral ; //! Phi distribution of neutral particles
249 TH2F * fhEtaNeutral ; //! Eta distribution of neutral particles
250 TH2F * fhDeltaPhiNeutral ; //! Difference of neutral particle phi and trigger particle phi as function of trigger particle pT
251 TH2F * fhDeltaEtaNeutral ; //! Difference of neutral particle eta and trigger particle eta as function of trigger particle pT
252 TH2F * fhDeltaPhiNeutralPt ; //! Difference of neutral particle phi and trigger particle phi as function of neutral particle particle pT
253 TH2F * fhDeltaPhiUeNeutralPt ; //! Difference of neutral particle phi and trigger particle phi as function of neutral particle particle pT
3f150b4b 254 TH2F * fhXENeutral ; //! Trigger particle - neutral hadron momentum imbalance histogram
255 TH2F * fhXEUeNeutral ; //! Trigger particle - neutral hadron momentum imbalance histogram
907b38cd 256 TH2F * fhPtHbpXENeutral ; //! Trigger particle - neutral particle momentum HBP histogram
257 TH2F * fhPtHbpXEUeNeutral ; //! Trigger particle - underlying neutral hadron momentum HBP histogram
3f150b4b 258 TH2F * fhZTNeutral ; //! Trigger particle - neutral hadron momentum imbalance histogram
259 TH2F * fhZTUeNeutral ; //! Trigger particle - neutral hadron momentum imbalance histogram
907b38cd 260 TH2F * fhPtHbpZTNeutral ; //! Trigger particle - neutral particle momentum HBP histogram
261 TH2F * fhPtHbpZTUeNeutral ; //! Trigger particle - underlying neutral hadron momentum HBP histogram
045396c8 262
045396c8 263 //if several UE calculation is on, most useful for jet-jet events contribution
264 TH2F * fhDeltaPhiUeLeftNeutral ; //! Difference of charged particle from underlying events phi and trigger particle phi as function of neutral particle pT
265 TH2F * fhDeltaPhiUeRightNeutral ; //! Difference of charged particle from underlying events phi and trigger particle phi
3f150b4b 266 TH2F * fhXEUeLeftNeutral ; //! Trigger particle -underlying neutral hadron momentum imbalance histogram
267 TH2F * fhXEUeRightNeutral ; //! Trigger particle -underlying neutral hadron momentum imbalance histogram
268 TH2F * fhPtHbpXEUeLeftNeutral ; //! Trigger particle -underlying neutral hadron momentum HBP histogram
269 TH2F * fhPtHbpXEUeRightNeutral ; //! Trigger particle -underlying neutral hadron momentum HBP histogram
270 TH2F * fhZTUeLeftNeutral ; //! Trigger particle -underlying neutral hadron momentum imbalance histogram
271 TH2F * fhZTUeRightNeutral ; //! Trigger particle -underlying neutral hadron momentum imbalance histogram
272 TH2F * fhPtHbpZTUeLeftNeutral ; //! Trigger particle -underlying neutral hadron momentum HBP histogram
273 TH2F * fhPtHbpZTUeRightNeutral ; //! Trigger particle -underlying neutral hadron momentum HBP histogram
045396c8 274
275 //for decay photon trigger correlation
276 TH2F * fhPtPi0DecayRatio ; //! for pi0 pt and ratio of decay photon pt
277 TH2F * fhDeltaPhiDecayCharged ; //! Difference of charged particle phi and decay trigger
3f150b4b 278 TH2F * fhXEDecayCharged ; //! Trigger particle (decay from pi0)-charged hadron momentum imbalance histogram
907b38cd 279 TH2F * fhZTDecayCharged ; //! Trigger particle (decay from pi0)-charged hadron momentum imbalance histogram
280
045396c8 281 TH2F * fhDeltaPhiDecayNeutral ; //! Difference of neutral particle phi and decay trigger
3f150b4b 282 TH2F * fhXEDecayNeutral ; //! Trigger particle (decay from pi0)-neutral hadron momentum imbalance histogram
283 TH2F * fhZTDecayNeutral ; //! Trigger particle (decay from pi0)-neutral hadron momentum imbalance histogram
284
907b38cd 285 TH2F ** fhDeltaPhiDecayChargedAssocPtBin;//![fNAssocPtBins] Tagged as decay Trigger pT vs dPhi for different associated pt bins
286 TH2F ** fhXEDecayChargedAssocPtBin ; //![fNAssocPtBins] Tagged as decay Trigger pT vs xE for different associated pt bins
287 TH2F ** fhZTDecayChargedAssocPtBin ; //![fNAssocPtBins] Tagged as decay Trigger pT vs xE for different associated pt bins
288
045396c8 289 //if the data is MC, fill MC information
290 TH2F * fh2phiLeadingParticle; //! #phi resolution for triggers
907b38cd 291 TH2F * fhMCEtaCharged; //! MC pure particles charged primary pt vs eta (both associated)
292 TH2F * fhMCPhiCharged; //! MC pure particles charged primary pt vs phi (both associated)
293 TH2F * fhMCDeltaEtaCharged; //! MC pure particles charged trigger primary pt vs delta eta (associated-trigger)
294 TH2F * fhMCDeltaPhiCharged; //! MC pure particles charged trigger primary pt vs delta phi (associated-trigger)
295 TH2F * fhMCDeltaPhiDeltaEtaCharged; //! MC pure particles charged associated primary pt vs delta phi (associated-trigger), in away side
296 TH2F * fhMCDeltaPhiChargedPt; //! MC pure particles charged delta phi vs delta eta (associated-trigger)
297 TH2F * fhMCPtXECharged; //! MC pure particles charged trigger primary pt vs xE
298 TH2F * fhMCPtHbpXECharged; //! MC pure particles charged trigger primary pt vs ln(1/xE)
299 TH2F * fhMCPtZTCharged; //! MC pure particles charged trigger primary pt vs zT
300 TH2F * fhMCPtHbpZTCharged; //! MC pure particles charged trigger primary pt vs ln(1/zT)
301 TH2F * fhMCPtTrigPout ; //! MC pure particles charged trigger primary pt vs pOut
302 TH2F * fhMCPtAssocDeltaPhi ; //! MC pure particles charged associated primary pt vs delta phi (associated-trigger)
045396c8 303
3f150b4b 304 AliAnaParticleHadronCorrelation( const AliAnaParticleHadronCorrelation & ph) ; // cpy ctor
305 AliAnaParticleHadronCorrelation & operator = (const AliAnaParticleHadronCorrelation & ph) ; // cpy assignment
045396c8 306
907b38cd 307 ClassDef(AliAnaParticleHadronCorrelation,12)
045396c8 308} ;
309
310
311#endif //ALIANAPARTICLEHADRONCORRELATION_H
312
313
314