1 |
mlethuil |
1.1 |
#ifndef TRootMCPhoton_h
|
2 |
|
|
#define TRootMCPhoton_h
|
3 |
|
|
|
4 |
|
|
#include <string>
|
5 |
|
|
#include <iostream>
|
6 |
lethuill |
1.3 |
#include <vector>
|
7 |
mlethuil |
1.1 |
|
8 |
|
|
#include "../interface/TRootParticle.h"
|
9 |
|
|
|
10 |
|
|
|
11 |
|
|
using namespace std;
|
12 |
|
|
|
13 |
|
|
class TRootMCPhoton : public TRootParticle
|
14 |
|
|
{
|
15 |
|
|
|
16 |
|
|
public:
|
17 |
|
|
|
18 |
|
|
TRootMCPhoton() :
|
19 |
|
|
TRootParticle()
|
20 |
|
|
,convVertex_()
|
21 |
|
|
,tracks_(0)
|
22 |
|
|
, recoPhotonIndex_(-1)
|
23 |
|
|
{;}
|
24 |
|
|
|
25 |
|
|
TRootMCPhoton(const TRootMCPhoton& photon) :
|
26 |
|
|
TRootParticle(photon)
|
27 |
|
|
,convVertex_(photon.convVertex_)
|
28 |
|
|
,tracks_(photon.tracks_)
|
29 |
|
|
, recoPhotonIndex_(photon.recoPhotonIndex_)
|
30 |
|
|
{;}
|
31 |
|
|
|
32 |
|
|
TRootMCPhoton(Double_t px, Double_t py, Double_t pz, Double_t e) :
|
33 |
|
|
TRootParticle(px,py,pz,e)
|
34 |
|
|
,convVertex_()
|
35 |
|
|
,tracks_(0)
|
36 |
|
|
, recoPhotonIndex_(-1)
|
37 |
|
|
{;}
|
38 |
|
|
|
39 |
|
|
TRootMCPhoton(Double_t px, Double_t py, Double_t pz, Double_t e, Double_t vtx_x, Double_t vtx_y, Double_t vtx_z) :
|
40 |
|
|
TRootParticle(px,py,pz,e,vtx_x,vtx_y,vtx_z)
|
41 |
|
|
,convVertex_()
|
42 |
|
|
,tracks_(0)
|
43 |
|
|
, recoPhotonIndex_(-1)
|
44 |
|
|
{;}
|
45 |
|
|
|
46 |
|
|
TRootMCPhoton(Double_t px, Double_t py, Double_t pz, Double_t e, Double_t vtx_x, Double_t vtx_y, Double_t vtx_z, Int_t type, Float_t charge) :
|
47 |
|
|
TRootParticle(px,py,pz,e,vtx_x,vtx_y,vtx_z,type,charge)
|
48 |
|
|
,convVertex_()
|
49 |
|
|
,tracks_(0)
|
50 |
|
|
, recoPhotonIndex_(-1)
|
51 |
|
|
{;}
|
52 |
|
|
|
53 |
|
|
TRootMCPhoton(const TLorentzVector &momentum) :
|
54 |
|
|
TRootParticle(momentum)
|
55 |
|
|
,convVertex_()
|
56 |
|
|
,tracks_(0)
|
57 |
|
|
, recoPhotonIndex_(-1)
|
58 |
|
|
{;}
|
59 |
|
|
|
60 |
|
|
TRootMCPhoton(const TLorentzVector &momentum, const TVector3 &vertex, Int_t type, Float_t charge) :
|
61 |
|
|
TRootParticle(momentum, vertex, type, charge)
|
62 |
|
|
,convVertex_()
|
63 |
|
|
,tracks_(0)
|
64 |
|
|
, recoPhotonIndex_(-1)
|
65 |
|
|
{;}
|
66 |
|
|
|
67 |
|
|
TRootMCPhoton(const TLorentzVector &momentum, const TVector3 &vertex, const TVector3 &convVertex, Int_t type, Float_t charge) :
|
68 |
|
|
TRootParticle(momentum, vertex, type, charge)
|
69 |
|
|
,convVertex_()
|
70 |
|
|
,tracks_(0)
|
71 |
|
|
, recoPhotonIndex_(-1)
|
72 |
|
|
{;}
|
73 |
|
|
|
74 |
|
|
TRootMCPhoton(const TLorentzVector &momentum, const TVector3 &vertex, const TVector3 &convVertex, const std::vector<TLorentzVector> &tracks, Int_t type, Float_t charge) :
|
75 |
|
|
TRootParticle(momentum, vertex, type, charge)
|
76 |
|
|
,convVertex_(convVertex)
|
77 |
|
|
,tracks_(tracks)
|
78 |
|
|
, recoPhotonIndex_(-1)
|
79 |
|
|
{;}
|
80 |
|
|
|
81 |
|
|
|
82 |
|
|
~TRootMCPhoton() {;}
|
83 |
|
|
|
84 |
|
|
|
85 |
|
|
unsigned int nTracks() const { return tracks_.size(); }
|
86 |
|
|
|
87 |
|
|
Float_t convEoverP() const
|
88 |
|
|
{
|
89 |
|
|
Float_t ptot = -1.;
|
90 |
|
|
if (tracks_.size()==2)
|
91 |
|
|
{
|
92 |
|
|
TLorentzVector pair = tracks_.at(0) + tracks_.at(1);
|
93 |
|
|
ptot = ( pair.P()>0 ? this->E() / pair.P() : -1. );
|
94 |
|
|
}
|
95 |
|
|
return ptot;
|
96 |
|
|
}
|
97 |
|
|
|
98 |
|
|
Float_t convMass() const
|
99 |
|
|
{
|
100 |
|
|
Float_t mass = -1.;
|
101 |
|
|
if (tracks_.size()==2)
|
102 |
|
|
{
|
103 |
|
|
TLorentzVector pair = tracks_.at(0) + tracks_.at(1);
|
104 |
|
|
mass = pair.M();
|
105 |
|
|
}
|
106 |
|
|
return mass;
|
107 |
|
|
}
|
108 |
|
|
|
109 |
|
|
Float_t convDeltaCotanTheta() const
|
110 |
|
|
{
|
111 |
|
|
Float_t cotan = -999.;
|
112 |
|
|
if (tracks_.size()==2)
|
113 |
|
|
{
|
114 |
|
|
if ( tan(tracks_.at(0).Theta()) != 0 && tan(tracks_.at(1).Theta()) != 0 ) cotan = 1./ tan(tracks_.at(0).Theta()) - 1./ tan(tracks_.at(1).Theta());
|
115 |
|
|
}
|
116 |
|
|
return cotan;
|
117 |
|
|
}
|
118 |
|
|
|
119 |
|
|
Float_t convPtOverEt() const
|
120 |
|
|
{
|
121 |
|
|
Float_t pe = -1.;
|
122 |
|
|
if (tracks_.size()==2)
|
123 |
|
|
{
|
124 |
|
|
TLorentzVector pair = tracks_.at(0) + tracks_.at(1);
|
125 |
|
|
pe = pair.Pt() / this->Et();
|
126 |
|
|
}
|
127 |
|
|
return pe;
|
128 |
|
|
}
|
129 |
|
|
|
130 |
|
|
|
131 |
|
|
TVector3 convVertex() const { return convVertex_;}
|
132 |
|
|
Double_t conv_vx() const { return convVertex_.x(); }
|
133 |
|
|
Double_t conv_vy() const { return convVertex_.y(); }
|
134 |
|
|
Double_t conv_vz() const { return convVertex_.z(); }
|
135 |
|
|
|
136 |
|
|
std::vector<TLorentzVector> tracks() const { return tracks_;}
|
137 |
|
|
Int_t recoPhotonIndex() const { return recoPhotonIndex_;}
|
138 |
|
|
|
139 |
|
|
void setConvVertex(TVector3 convVertex) { convVertex_=convVertex; }
|
140 |
|
|
void setConvVertex(Double_t x, Double_t y, Double_t z) { convVertex_.SetXYZ(x, y ,z); }
|
141 |
mlethuil |
1.2 |
void setTracks(std::vector<TLorentzVector> tracks) { tracks_=tracks; }
|
142 |
mlethuil |
1.1 |
void setRecoPhotonIndex(Int_t recoPhotonIndex) { recoPhotonIndex_=recoPhotonIndex; }
|
143 |
|
|
|
144 |
|
|
|
145 |
|
|
friend std::ostream& operator<< (std::ostream& stream, const TRootMCPhoton& photon) {
|
146 |
|
|
stream << "Converted TRootMCPhoton (Et,eta,phi)=("<< photon.Et() <<","<< photon.Eta() <<","<< photon.Phi() << ")"
|
147 |
|
|
<< " photon vertex=("<< photon.vx() <<","<< photon.vy() <<","<< photon.vz() << ")"
|
148 |
|
|
<< " conversion vertex=("<< photon.conv_vx() <<","<< photon.conv_vy() <<","<< photon.conv_vz() << ")";
|
149 |
|
|
return stream;
|
150 |
|
|
};
|
151 |
|
|
|
152 |
|
|
|
153 |
|
|
private:
|
154 |
|
|
|
155 |
|
|
TVector3 convVertex_; // Position of the conversion vertex
|
156 |
mlethuil |
1.2 |
std::vector<TLorentzVector> tracks_; // Tracks from the conversion
|
157 |
mlethuil |
1.1 |
Int_t recoPhotonIndex_; // Index of first conversion track (in tracks TCloneArray)
|
158 |
|
|
|
159 |
|
|
ClassDef (TRootMCPhoton,1);
|
160 |
|
|
};
|
161 |
|
|
|
162 |
|
|
#endif
|