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 */
6 //#####################################################
8 //# Class AliDielectron #
9 //# Main Class for e+e- analysis #
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 #
16 //#####################################################
20 #include <TObjArray.h>
22 #include <AliAnalysisFilter.h>
23 #include <AliKFParticle.h>
25 #include "AliDielectronHistos.h"
26 #include "AliDielectronPair.h"
30 class AliDielectronCF;
32 //________________________________________________________________
33 class AliDielectron : public TNamed {
36 enum ParticleValues { kPx=0, kPy, kPz, kPt, kP, kXv, kYv, kZv, kOneOverPt,
37 kPhi, kTheta, kE, kM, kEta, kY, kCharge, kNParticleValues };
38 enum PairValues { kChi2NDF=kNParticleValues, kDecayLength, kR, kOpeningAngle, kMerr, kNPairValues };
41 AliDielectron(const char* name, const char* title);
42 virtual ~AliDielectron();
46 void Process(AliVEvent *ev1, AliVEvent *ev2=0);
48 const AliAnalysisFilter& GetEventFilter() const { return fEventFilter; }
49 const AliAnalysisFilter& GetTrackFilter() const { return fTrackFilter; }
50 const AliAnalysisFilter& GetPairFilter() const { return fPairFilter; }
52 AliAnalysisFilter& GetEventFilter() { return fEventFilter; }
53 AliAnalysisFilter& GetTrackFilter() { return fTrackFilter; }
54 AliAnalysisFilter& GetPairFilter() { return fPairFilter; }
56 void SetMotherPdg( Int_t pdgMother ) { fPdgMother=pdgMother; }
58 const TObjArray* GetTrackArray(Int_t i) const {return (i>=0&&i<4)?&fTracks[i]:0;}
59 const TObjArray* GetPairArray(Int_t i) const {return (i>=0&&i<10)?
60 static_cast<TObjArray*>(fPairCandidates->UncheckedAt(i)):0;}
62 TObjArray** GetPairArraysPointer() { return &fPairCandidates; }
64 void SetHistogramManager(AliDielectronHistos * const histos) { fHistos=histos; }
65 const THashList * GetHistogramList() const { return fHistos?fHistos->GetHistogramList():0x0; }
67 Bool_t HasCandidates() const { return GetPairArray(1)?GetPairArray(1)->GetEntriesFast()>0:0; }
69 void SetCFManagerPair(AliDielectronCF * const cf) { fCfManagerPair=cf; }
70 AliDielectronCF* GetCFManagerPair() const { return fCfManagerPair; }
72 static const char* TrackClassName(Int_t i) { return (i>=0&&i<4)?fgkTrackClassNames[i]:""; }
73 static const char* PairClassName(Int_t i) { return (i>=0&&i<10)?fgkPairClassNames[i]:""; }
78 AliAnalysisFilter fEventFilter; // Event cuts
79 AliAnalysisFilter fTrackFilter; // leg cuts
80 AliAnalysisFilter fPairFilter; // pair cuts
82 Int_t fPdgMother; // pdg code of mother tracks
84 AliDielectronHistos *fHistos; // Histogram manager
85 // Streaming and merging should be handled
86 // by the analysis framework
88 TObjArray fTracks[4]; //! Selected track candidates
89 // 0: Event1, positive particles
90 // 1: Event1, negative particles
91 // 2: Event2, positive particles
92 // 3: Event2, negative particles
94 TObjArray *fPairCandidates; //! Pair candidate arrays
95 //TODO: better way to store it? TClonesArray?
97 AliDielectronCF *fCfManagerPair;//Correction Framework Manager for the Pair
99 void FillTrackArrays(AliVEvent * const ev, Int_t eventNr=0);
100 void FillPairArrays(Int_t arr1, Int_t arr2);
102 Int_t GetPairIndex(Int_t arr1, Int_t arr2) const {return arr1>=arr2?arr1*(arr1+1)/2+arr2:arr2*(arr2+1)/2+arr1;}
104 void InitPairCandidateArrays();
107 TObjArray* PairArray(Int_t i);
109 static const char* fgkTrackClassNames[4]; //Names for track arrays
110 static const char* fgkPairClassNames[10]; //Names for pair arrays
114 void FillHistograms(const AliVEvent *ev);
116 AliDielectron(const AliDielectron &c);
117 AliDielectron &operator=(const AliDielectron &c);
119 ClassDef(AliDielectron,1);
122 inline void AliDielectron::InitPairCandidateArrays()
125 // initialise all pair candidate arrays
127 fPairCandidates->SetOwner();
128 for (Int_t i=0;i<10;++i){
129 TObjArray *arr=new TObjArray;
130 fPairCandidates->AddAt(arr,i);
135 inline TObjArray* AliDielectron::PairArray(Int_t i)
138 // for internal use only: unchecked return of track array for fast access
140 return static_cast<TObjArray*>(fPairCandidates->UncheckedAt(i));
143 inline void AliDielectron::ClearArrays()
148 for (Int_t i=0;i<4;++i){
151 for (Int_t i=0;i<10;++i){
152 PairArray(i)->Delete();