]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/dielectron/AliDielectronPair.h
Updates and additions: Classes for signal and spectrum extraction; saving of
[u/mrichter/AliRoot.git] / PWG3 / dielectron / AliDielectronPair.h
CommitLineData
b2a297fa 1#ifndef ALIDIELECTRONPAIR_H
2#define ALIDIELECTRONPAIR_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//# AliDielectronPair #
9//# Class to store pair information #
10//# #
11//# #
12//# Authors: #
13//# Anton Andronic, GSI / A.Andronic@gsi.de #
14//# Ionut C. Arsene, GSI / I.C.Arsene@gsi.de #
15//# Julian Book, Uni Ffm / Julian.Book@cern.ch #
16//# Frederick Kramer, Uni Ffm, / Frederick.Kramer@cern.ch #
17//# Magnus Mager, CERN / Magnus.Mager@cern.ch #
18//# WooJin J. Park, GSI / W.J.Park@gsi.de #
19//# Jens Wiechula, Uni HD / Jens.Wiechula@cern.ch #
20//# #
21//#############################################################
22
23#include <TMath.h>
24#include <TRef.h>
25#include <TLorentzVector.h>
26
27#include <AliKFParticle.h>
28#include <AliVParticle.h>
29
30class AliVTrack;
31
32//TODO
33//TODO: Should we inherit from AliVTrack in order to built another AliDielectronPair of KF with it?
34//TODO
35class AliDielectronPair : public AliVParticle {
36public:
37 AliDielectronPair();
38 virtual ~AliDielectronPair();
39
40 AliDielectronPair(AliVTrack * const particle1, Int_t pid1,
41 AliVTrack * const particle2, Int_t pid2, Char_t type);
42
43 //TODO: copy constructor + assignment operator
44
45 void SetTracks(AliVTrack * const particle1, Int_t pid1,
46 AliVTrack * const particle2, Int_t pid2);
47
48 //AliVParticle interface
49 // kinematics
50 virtual Double_t Px() const { return fPair.GetPx(); }
51 virtual Double_t Py() const { return fPair.GetPy(); }
52 virtual Double_t Pz() const { return fPair.GetPz(); }
53 virtual Double_t Pt() const { return fPair.GetPt(); }
54 virtual Double_t P() const { return fPair.GetP(); }
55 virtual Bool_t PxPyPz(Double_t p[3]) const { p[0]=Px(); p[1]=Py(); p[2]=Pz(); return kTRUE; }
56
57 virtual Double_t Xv() const { return fPair.GetX(); }
58 virtual Double_t Yv() const { return fPair.GetY(); }
59 virtual Double_t Zv() const { return fPair.GetZ(); }
60 virtual Bool_t XvYvZv(Double_t x[3]) const { x[0]=Xv(); x[1]=Xv(); x[2]=Zv(); return kTRUE; }
61
62 virtual Double_t OneOverPt() const { return Pt()>0.?1./Pt():0.; } //TODO: check
63 virtual Double_t Phi() const { return fPair.GetPhi();}
64 virtual Double_t Theta() const { return Pz()!=0?TMath::ATan(Pt()/Pz()):0.; } //TODO: check
65
66
67 virtual Double_t E() const { return fPair.GetE(); }
68 virtual Double_t M() const { return fPair.GetMass(); }
69
70 virtual Double_t Eta() const { return fPair.GetEta();}
6551594b 71 virtual Double_t Y() const { return TLorentzVector(Px(),Py(),Pz(),E()).Rapidity();}
b2a297fa 72
73 virtual Short_t Charge() const { return fPair.GetQ();}
a655b716 74 virtual Int_t GetLabel() const { return fLabel; }
b2a297fa 75 // PID
76 virtual const Double_t *PID() const { return 0;} //TODO: check
a655b716 77 // Dummy
78 Int_t PdgCode() const {return 0;}
572b0139 79
b2a297fa 80
81 UChar_t GetType() const { return fType; }
82 void SetType(Char_t type) { fType=type; }
a655b716 83
84 void SetLabel(Int_t label) {fLabel=label;}
572b0139 85
86 //inter leg information
87 Double_t OpeningAngle() const { return fD1.GetAngle(fD2); }
88 Double_t DistanceDaughters() const { return fD1.GetDistanceFromParticle(fD2); }
89 Double_t DistanceDaughtersXY() const { return fD1.GetDistanceFromParticleXY(fD2); }
90 Double_t DeviationDaughters() const { return fD1.GetDeviationFromParticle(fD2); }
91 Double_t DeviationDaughtersXY() const { return fD1.GetDeviationFromParticleXY(fD2); }
92
b2a297fa 93 // internal KF particle
572b0139 94 const AliKFParticle& GetKFParticle() const { return fPair; }
95 const AliKFParticle& GetKFFirstDaughter() const { return fD1; }
96 const AliKFParticle& GetKFSecondDaughter() const { return fD2; }
97
b2a297fa 98 // daughter references
99 AliVParticle* GetFirstDaughter() const { return dynamic_cast<AliVParticle*>(fRefD1.GetObject()); }
100 AliVParticle* GetSecondDaughter() const { return dynamic_cast<AliVParticle*>(fRefD2.GetObject()); }
a655b716 101
b2a297fa 102
103private:
a655b716 104 Char_t fType; // type of the pair e.g. like sign SE, unlike sign SE, ... see AliDielectron
105 Int_t fLabel; // MC label
106
b2a297fa 107 AliKFParticle fPair; // KF particle internally used for pair calculation
572b0139 108 AliKFParticle fD1; // KF particle first daughter
109 AliKFParticle fD2; // KF particle1 second daughter
110
b2a297fa 111 TRef fRefD1; // Reference to first daughter
112 TRef fRefD2; // Reference to second daughter
113
572b0139 114 ClassDef(AliDielectronPair,3)
b2a297fa 115};
116
117#endif