33 |
|
if( (subjets[1].v4()+subjets[2].v4()).isTimelike() ) |
34 |
|
m12 = (subjets[1].v4()+subjets[2].v4()).M(); |
35 |
|
|
36 |
< |
//minimum pairwise mass > 50 GeV/c^2 |
36 |
> |
//minimum pairwise mass |
37 |
|
mmin = std::min(m01,std::min(m02,m12)); |
38 |
|
} |
39 |
|
|
61 |
|
return nextjet; |
62 |
|
} |
63 |
|
|
64 |
+ |
bool WTag(TopJet prunedjet, double& mjet, int &nsubjets, double& massdrop){ |
65 |
+ |
|
66 |
+ |
nsubjets=prunedjet.numberOfDaughters(); |
67 |
+ |
|
68 |
+ |
mjet = 0; |
69 |
+ |
if(prunedjet.v4().isTimelike()) |
70 |
+ |
mjet = prunedjet.v4().M(); |
71 |
+ |
|
72 |
+ |
//calculate mass drop for first sub-jet ordered in pt |
73 |
+ |
massdrop = 0; |
74 |
+ |
if(nsubjets>=1 && mjet>0){ |
75 |
+ |
|
76 |
+ |
std::vector< Particle > subjets = prunedjet.subjets(); |
77 |
+ |
sort(subjets.begin(), subjets.end(), HigherPt()); |
78 |
+ |
|
79 |
+ |
double m1 = 0; |
80 |
+ |
if(subjets[0].v4().isTimelike()) |
81 |
+ |
m1 = subjets[0].v4().M(); |
82 |
+ |
|
83 |
+ |
massdrop = m1/mjet; |
84 |
+ |
} |
85 |
+ |
|
86 |
+ |
//at least 2 sub-jets |
87 |
+ |
if(nsubjets<2) return false; |
88 |
+ |
//60 GeV < pruned jet mass < 100 GeV |
89 |
+ |
if(mjet <= 60 || mjet >= 100) return false; |
90 |
+ |
//mass drop < 0.4 |
91 |
+ |
if(massdrop>=0.4) return false; |
92 |
+ |
|
93 |
+ |
return true; |
94 |
+ |
|
95 |
+ |
} |
96 |
+ |
|
97 |
|
double pTrel(const Particle *p, std::vector<Jet> *jets){ |
98 |
|
|
99 |
|
double ptrel=0; |
118 |
|
return nextJet(p,jets)->deltaR(*p); |
119 |
|
} |
120 |
|
|
121 |
+ |
TVector3 toVector(LorentzVector v4){ |
122 |
+ |
|
123 |
+ |
TVector3 v3(0,0,0); |
124 |
+ |
v3.SetX(v4.X()); |
125 |
+ |
v3.SetY(v4.Y()); |
126 |
+ |
v3.SetZ(v4.Z()); |
127 |
+ |
return v3; |
128 |
+ |
} |
129 |
+ |
|
130 |
+ |
TVector3 toVector(LorentzVectorXYZE v4){ |
131 |
+ |
|
132 |
+ |
TVector3 v3(0,0,0); |
133 |
+ |
v3.SetX(v4.X()); |
134 |
+ |
v3.SetY(v4.Y()); |
135 |
+ |
v3.SetZ(v4.Z()); |
136 |
+ |
return v3; |
137 |
+ |
} |
138 |
+ |
|
139 |
+ |
LorentzVectorXYZE toXYZ(LorentzVector v4){ |
140 |
+ |
|
141 |
+ |
LorentzVectorXYZE v4_new(0,0,0,0); |
142 |
+ |
v4_new.SetPx(v4.Px()); |
143 |
+ |
v4_new.SetPy(v4.Py()); |
144 |
+ |
v4_new.SetPz(v4.Pz()); |
145 |
+ |
v4_new.SetE(v4.E()); |
146 |
+ |
return v4_new; |
147 |
+ |
} |
148 |
+ |
|
149 |
+ |
LorentzVector toPtEtaPhi(LorentzVectorXYZE v4){ |
150 |
+ |
|
151 |
+ |
LorentzVector v4_new(0,0,0,0); |
152 |
+ |
v4_new.SetPt(v4.Pt()); |
153 |
+ |
v4_new.SetEta(v4.Eta()); |
154 |
+ |
v4_new.SetPhi(v4.Phi()); |
155 |
+ |
v4_new.SetE(v4.E()); |
156 |
+ |
return v4_new; |
157 |
+ |
} |
158 |
+ |
|
159 |
+ |
double deltaR(LorentzVector v1, LorentzVector v2){ |
160 |
+ |
|
161 |
+ |
Particle p1; |
162 |
+ |
p1.set_v4(v1); |
163 |
+ |
Particle p2; |
164 |
+ |
p2.set_v4(v2); |
165 |
+ |
return p1.deltaR(p2); |
166 |
+ |
} |
167 |
|
|
168 |
|
double double_infinity(){ |
169 |
|
return std::numeric_limits<double>::infinity() ; |
172 |
|
int int_infinity(){ |
173 |
|
return std::numeric_limits<int>::max() ; |
174 |
|
} |
175 |
+ |
|
176 |
+ |
int myPow(int x, unsigned int p) { |
177 |
+ |
int i = 1; |
178 |
+ |
for (unsigned int j = 1; j <= p; j++) i *= x; |
179 |
+ |
return i; |
180 |
+ |
} |