]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/AliDielectron.h
changes submitted by user saiola
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectron.h
CommitLineData
b2a297fa 1#ifndef ALIDIELECTRON_H
2#define ALIDIELECTRON_H
3/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6//#####################################################
7//# #
8//# Class AliDielectron #
9//# Main Class for e+e- analysis #
10//# #
11//# by WooJin J. Park, GSI / W.J.Park@gsi.de #
12//# Ionut C. Arsene, GSI / I.C.Arsene@gsi.de #
13//# Magnus Mager, CERN / Magnus.Mager@cern.ch #
14//# Jens Wiechula, Uni HD / Jens.Wiechula@cern.ch #
15//# #
16//#####################################################
17
18
19#include <TNamed.h>
20#include <TObjArray.h>
21
22#include <AliAnalysisFilter.h>
23#include <AliKFParticle.h>
24
25#include "AliDielectronHistos.h"
b2a297fa 26
5720c765 27class AliEventplane;
b2a297fa 28class AliVEvent;
ba15fdfb 29class AliMCEvent;
b2a297fa 30class THashList;
31class AliDielectronCF;
572b0139 32class AliDielectronDebugTree;
2a14a7b1 33class AliDielectronTrackRotator;
ffbede40 34class AliDielectronPair;
ba15fdfb 35class AliDielectronSignalMC;
5720c765 36class AliDielectronMixingHandler;
b2a297fa 37
38//________________________________________________________________
39class AliDielectron : public TNamed {
5720c765 40
41 friend class AliDielectronMixingHandler; //mixing as friend class
42
b2a297fa 43public:
2a14a7b1 44 enum EPairType { kEv1PP=0, kEv1PM, kEv1MM,
45 kEv1PEv2P, kEv1MEv2P, kEv2PP,
46 kEv1PEv2M, kEv1MEv2M, kEv2PM,
47 kEv2MM, kEv1PMRot };
48 enum ELegType { kEv1P, kEv1M, kEv2P, kEv2M };
b2a297fa 49
50 AliDielectron();
51 AliDielectron(const char* name, const char* title);
52 virtual ~AliDielectron();
53
54 void Init();
55
56 void Process(AliVEvent *ev1, AliVEvent *ev2=0);
57
b2a297fa 58 const AliAnalysisFilter& GetEventFilter() const { return fEventFilter; }
59 const AliAnalysisFilter& GetTrackFilter() const { return fTrackFilter; }
60 const AliAnalysisFilter& GetPairFilter() const { return fPairFilter; }
61
61d106d3 62 AliAnalysisFilter& GetEventFilter() { return fEventFilter; }
63 AliAnalysisFilter& GetTrackFilter() { return fTrackFilter; }
64 AliAnalysisFilter& GetPairFilter() { return fPairFilter; }
65 AliAnalysisFilter& GetPairPreFilter() { return fPairPreFilter; }
66 AliAnalysisFilter& GetPairPreFilterLegs() { return fPairPreFilterLegs; }
5720c765 67 AliAnalysisFilter& GetEventPlanePreFilter(){ return fEventPlanePreFilter; }
68 AliAnalysisFilter& GetEventPlanePOIPreFilter(){ return fEventPlanePOIPreFilter; }
69
8df8e382 70 void SetMotherPdg( Int_t pdgMother ) { fPdgMother=pdgMother; }
71 void SetLegPdg(Int_t pdgLeg1, Int_t pdgLeg2) { fPdgLeg1=pdgLeg1; fPdgLeg2=pdgLeg2; }
72 Int_t GetMotherPdg() const { return fPdgMother; }
73 Int_t GetLeg1Pdg() const { return fPdgLeg1; }
74 Int_t GetLeg2Pdg() const { return fPdgLeg2; }
554e40f8 75
76 void SetNoPairing(Bool_t noPairing=kTRUE) { fNoPairing=noPairing; }
b2a297fa 77 const TObjArray* GetTrackArray(Int_t i) const {return (i>=0&&i<4)?&fTracks[i]:0;}
5720c765 78 const TObjArray* GetPairArray(Int_t i) const {return (i>=0&&i<11)?
b2a297fa 79 static_cast<TObjArray*>(fPairCandidates->UncheckedAt(i)):0;}
80
81 TObjArray** GetPairArraysPointer() { return &fPairCandidates; }
82
83 void SetHistogramManager(AliDielectronHistos * const histos) { fHistos=histos; }
c8f0f810 84 AliDielectronHistos* GetHistoManager() const { return fHistos; }
b2a297fa 85 const THashList * GetHistogramList() const { return fHistos?fHistos->GetHistogramList():0x0; }
86
87 Bool_t HasCandidates() const { return GetPairArray(1)?GetPairArray(1)->GetEntriesFast()>0:0; }
fb7d2d99 88 Bool_t HasCandidatesLikeSign() const {
89 return (GetPairArray(0)&&GetPairArray(2)) ? (GetPairArray(0)->GetEntriesFast()>0 || GetPairArray(2)->GetEntriesFast()>0) : 0;
90 }
91
5720c765 92 Bool_t HasCandidatesTR() const {return GetPairArray(10)?GetPairArray(10)->GetEntriesFast()>0:0;}
b2a297fa 93 void SetCFManagerPair(AliDielectronCF * const cf) { fCfManagerPair=cf; }
94 AliDielectronCF* GetCFManagerPair() const { return fCfManagerPair; }
572b0139 95
5720c765 96 void SetPreFilterEventPlane(Bool_t setValue=kTRUE){fPreFilterEventPlane=setValue;};
97 void SetLikeSignSubEvents(Bool_t setValue=kTRUE){fLikeSignSubEvents=setValue;};
554e40f8 98 void SetPreFilterUnlikeOnly(Bool_t setValue=kTRUE){fPreFilterUnlikeOnly=setValue;};
ba15fdfb 99 void SetPreFilterAllSigns(Bool_t setValue=kTRUE){fPreFilterAllSigns=setValue;};
554e40f8 100
2a14a7b1 101 void SetTrackRotator(AliDielectronTrackRotator * const rot) { fTrackRotator=rot; }
102 AliDielectronTrackRotator* GetTrackRotator() const { return fTrackRotator; }
fb7d2d99 103
5720c765 104 void SetMixingHandler(AliDielectronMixingHandler *mix) { fMixing=mix; }
105 AliDielectronMixingHandler* GetMixingHandler() const { return fMixing; }
106
fb7d2d99 107 void SetHasMC(Bool_t hasMC) { fHasMC = hasMC; }
108 Bool_t GetHasMC() const { return fHasMC; }
ba15fdfb 109
5720c765 110 void SetStoreRotatedPairs(Bool_t storeTR) {fStoreRotatedPairs = storeTR;}
111
ba15fdfb 112 void AddSignalMC(AliDielectronSignalMC* signal);
113
572b0139 114 void SetDebugTree(AliDielectronDebugTree * const tree) { fDebugTree=tree; }
c8f0f810 115
116 const TObjArray* GetMCSignals() const { return fSignalsMC; }
b2a297fa 117 static const char* TrackClassName(Int_t i) { return (i>=0&&i<4)?fgkTrackClassNames[i]:""; }
2a14a7b1 118 static const char* PairClassName(Int_t i) { return (i>=0&&i<11)?fgkPairClassNames[i]:""; }
572b0139 119
5720c765 120 void SetEstimatorFilename(const Char_t* filename) {fEstimatorFilename = filename;}
121 void SetTRDcorrectionFilename(const Char_t* filename) {fTRDpidCorrectionFilename = filename;}
a823f01b 122 void SetVZEROCalibrationFilename(const Char_t* filename) {fVZEROCalibrationFilename = filename;}
123 void SetVZERORecenteringFilename(const Char_t* filename) {fVZERORecenteringFilename = filename;}
5720c765 124
572b0139 125 void SaveDebugTree();
b2a297fa 126
5720c765 127private:
b2a297fa 128
61d106d3 129 AliAnalysisFilter fEventFilter; // Event cuts
130 AliAnalysisFilter fTrackFilter; // leg cuts
131 AliAnalysisFilter fPairPreFilter; // pair prefilter cuts
132 AliAnalysisFilter fPairPreFilterLegs; // Leg filter after the pair prefilter cuts
133 AliAnalysisFilter fPairFilter; // pair cuts
5720c765 134 AliAnalysisFilter fEventPlanePreFilter; // event plane prefilter cuts
135 AliAnalysisFilter fEventPlanePOIPreFilter; // PoI cuts in the event plane prefilter
136
b2a297fa 137 Int_t fPdgMother; // pdg code of mother tracks
8df8e382 138 Int_t fPdgLeg1; // pdg code leg1
139 Int_t fPdgLeg2; // pdg code leg2
554e40f8 140
ba15fdfb 141 TObjArray* fSignalsMC; // array of AliDielectronSignalMC
142
554e40f8 143 Bool_t fNoPairing; // if to skip pairing, can be used for track QA only
144
b2a297fa 145 AliDielectronHistos *fHistos; // Histogram manager
146 // Streaming and merging should be handled
147 // by the analysis framework
554e40f8 148
b2a297fa 149 TObjArray fTracks[4]; //! Selected track candidates
150 // 0: Event1, positive particles
151 // 1: Event1, negative particles
152 // 2: Event2, positive particles
153 // 3: Event2, negative particles
154
155 TObjArray *fPairCandidates; //! Pair candidate arrays
156 //TODO: better way to store it? TClonesArray?
157
158 AliDielectronCF *fCfManagerPair;//Correction Framework Manager for the Pair
2a14a7b1 159 AliDielectronTrackRotator *fTrackRotator; //Track rotator
572b0139 160 AliDielectronDebugTree *fDebugTree; // Debug tree output
5720c765 161 AliDielectronMixingHandler *fMixing; // handler for event mixing
554e40f8 162
5720c765 163 Bool_t fPreFilterEventPlane; //Filter for the Eventplane determination in TPC
164 Bool_t fLikeSignSubEvents; //Option for dividing into subevents, sub1 ++ sub2 --
554e40f8 165 Bool_t fPreFilterUnlikeOnly; //Apply PreFilter either in +- or to ++/--/+- individually
5720c765 166 Bool_t fPreFilterAllSigns; //Apply PreFilter find in ++/--/+- and remove from all
fb7d2d99 167 Bool_t fHasMC; //If we run with MC, at the moment only needed in AOD
5720c765 168 Bool_t fStoreRotatedPairs; //It the rotated pairs should be stored in the pair array
169
b2a297fa 170 void FillTrackArrays(AliVEvent * const ev, Int_t eventNr=0);
5720c765 171 void EventPlanePreFilter(Int_t arr1, Int_t arr2, TObjArray arrTracks1, TObjArray arrTracks2, const AliVEvent *ev, AliEventplane *cevplane);
61d106d3 172 void PairPreFilter(Int_t arr1, Int_t arr2, TObjArray &arrTracks1, TObjArray &arrTracks2);
b2a297fa 173 void FillPairArrays(Int_t arr1, Int_t arr2);
2a14a7b1 174 void FillPairArrayTR();
b2a297fa 175
176 Int_t GetPairIndex(Int_t arr1, Int_t arr2) const {return arr1>=arr2?arr1*(arr1+1)/2+arr2:arr2*(arr2+1)/2+arr1;}
177
178 void InitPairCandidateArrays();
179 void ClearArrays();
180
181 TObjArray* PairArray(Int_t i);
182
183 static const char* fgkTrackClassNames[4]; //Names for track arrays
2a14a7b1 184 static const char* fgkPairClassNames[11]; //Names for pair arrays
b2a297fa 185
5720c765 186 TString fEstimatorFilename; // name for the pp multiplicity estimators filename
187 TString fTRDpidCorrectionFilename; // name for the file containing the single particle TRD pid corrections
a823f01b 188 TString fVZEROCalibrationFilename; // file containing VZERO channel-by-channel calibration
189 TString fVZERORecenteringFilename; // file containing VZERO Q-vector recentering averages
5720c765 190
191 void ProcessMC(AliVEvent *ev1);
b2a297fa 192
5720c765 193 void FillHistograms(const AliVEvent *ev, Bool_t pairInfoOnly=kFALSE);
194 void FillHistogramsMC(const AliMCEvent *ev, AliVEvent *ev1);
ffbede40 195 void FillHistogramsPair(AliDielectronPair *pair,Bool_t fromPreFilter=kFALSE);
554e40f8 196 void FillHistogramsTracks(TObjArray **tracks);
197
572b0139 198 void FillDebugTree();
5720c765 199
b2a297fa 200 AliDielectron(const AliDielectron &c);
201 AliDielectron &operator=(const AliDielectron &c);
202
61d106d3 203 ClassDef(AliDielectron,4);
b2a297fa 204};
205
206inline void AliDielectron::InitPairCandidateArrays()
207{
208 //
209 // initialise all pair candidate arrays
210 //
211 fPairCandidates->SetOwner();
5720c765 212 for (Int_t i=0;i<11;++i){
b2a297fa 213 TObjArray *arr=new TObjArray;
214 fPairCandidates->AddAt(arr,i);
215 arr->SetOwner();
216 }
217}
218
219inline TObjArray* AliDielectron::PairArray(Int_t i)
220{
221 //
222 // for internal use only: unchecked return of track array for fast access
223 //
224 return static_cast<TObjArray*>(fPairCandidates->UncheckedAt(i));
225}
226
227inline void AliDielectron::ClearArrays()
228{
229 //
230 // Reset the Arrays
231 //
232 for (Int_t i=0;i<4;++i){
233 fTracks[i].Clear();
234 }
5720c765 235 for (Int_t i=0;i<11;++i){
236 if (PairArray(i)) PairArray(i)->Delete();
b2a297fa 237 }
238}
239
240#endif