Fork me on GitHub

source: git/classes/DelphesClasses.cc@ 1fd8862

ImprovedOutputFile Timing dual_readout llp
Last change on this file since 1fd8862 was fe0273c, checked in by Pavel Demin <pavel.demin@…>, 9 years ago

merge BTagging and BTaggingCMS

  • Property mode set to 100644
File size: 9.9 KB
Line 
1/*
2 * Delphes: a framework for fast simulation of a generic collider experiment
3 * Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19
20/**
21 *
22 * Definition of classes to be stored in the root tree.
23 * Function CompareXYZ sorts objects by the variable XYZ that MUST be
24 * present in the data members of the root tree class of the branch.
25 *
26 * \author P. Demin - UCL, Louvain-la-Neuve
27 *
28 */
29
30#include "classes/DelphesClasses.h"
31
32#include "classes/DelphesFactory.h"
33#include "classes/SortableObject.h"
34
35CompBase *GenParticle::fgCompare = 0;
36CompBase *Photon::fgCompare = CompPT<Photon>::Instance();
37CompBase *Electron::fgCompare = CompPT<Electron>::Instance();
38CompBase *Muon::fgCompare = CompPT<Muon>::Instance();
39CompBase *Jet::fgCompare = CompPT<Jet>::Instance();
40CompBase *Track::fgCompare = CompPT<Track>::Instance();
41CompBase *Tower::fgCompare = CompE<Tower>::Instance();
42CompBase *HectorHit::fgCompare = CompE<HectorHit>::Instance();
43CompBase *Candidate::fgCompare = CompMomentumPt<Candidate>::Instance();
44
45//------------------------------------------------------------------------------
46
47TLorentzVector GenParticle::P4() const
48{
49 TLorentzVector vec;
50 vec.SetPxPyPzE(Px, Py, Pz, E);
51 return vec;
52}
53
54//------------------------------------------------------------------------------
55
56TLorentzVector MissingET::P4() const
57{
58 TLorentzVector vec;
59 vec.SetPtEtaPhiM(MET, Eta, Phi, 0.0);
60 return vec;
61}
62
63//------------------------------------------------------------------------------
64
65TLorentzVector Photon::P4() const
66{
67 TLorentzVector vec;
68 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
69 return vec;
70}
71
72//------------------------------------------------------------------------------
73
74TLorentzVector Electron::P4() const
75{
76 TLorentzVector vec;
77 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
78 return vec;
79}
80
81//------------------------------------------------------------------------------
82
83TLorentzVector Muon::P4() const
84{
85 TLorentzVector vec;
86 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
87 return vec;
88}
89
90//------------------------------------------------------------------------------
91
92TLorentzVector Jet::P4() const
93{
94 TLorentzVector vec;
95 vec.SetPtEtaPhiM(PT, Eta, Phi, Mass);
96 return vec;
97}
98
99//------------------------------------------------------------------------------
100
101TLorentzVector Track::P4() const
102{
103 TLorentzVector vec;
104 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
105 return vec;
106}
107
108//------------------------------------------------------------------------------
109
110TLorentzVector Tower::P4() const
111{
112 TLorentzVector vec;
113 vec.SetPtEtaPhiM(ET, Eta, Phi, 0.0);
114 return vec;
115}
116
117//------------------------------------------------------------------------------
118
119Candidate::Candidate() :
120 PID(0), Status(0), M1(-1), M2(-1), D1(-1), D2(-1),
121 Charge(0), Mass(0.0),
122 IsPU(0), IsRecoPU(0), IsConstituent(0),
123 Flavor(0), FlavorAlgo(0), FlavorPhys(0),
124 BTag(0), BTagAlgo(0), BTagPhys(0),
125 TauTag(0), Eem(0.0), Ehad(0.0),
126 DeltaEta(0.0), DeltaPhi(0.0),
127 Momentum(0.0, 0.0, 0.0, 0.0),
128 Position(0.0, 0.0, 0.0, 0.0),
129 Area(0.0, 0.0, 0.0, 0.0),
130 Dxy(0), SDxy(0), Xd(0), Yd(0), Zd(0),
131 NCharged(0),
132 NNeutrals(0),
133 NSubJetsTrimmed(0),
134 NSubJetsPruned(0),
135 NSubJetsSoftDropped(0),
136 Beta(0),
137 BetaStar(0),
138 MeanSqDeltaR(0),
139 PTD(0),
140 Ntimes(-1),
141 IsolationVar(-999),
142 IsolationVarRhoCorr(-999),
143 SumPtCharged(-999),
144 SumPtNeutral(-999),
145 SumPtChargedPU(-999),
146 SumPt(-999),
147 fFactory(0),
148 fArray(0)
149{
150 int i;
151 Edges[0] = 0.0;
152 Edges[1] = 0.0;
153 Edges[2] = 0.0;
154 Edges[3] = 0.0;
155 FracPt[0] = 0.0;
156 FracPt[1] = 0.0;
157 FracPt[2] = 0.0;
158 FracPt[3] = 0.0;
159 FracPt[4] = 0.0;
160 Tau[0] = 0.0;
161 Tau[1] = 0.0;
162 Tau[2] = 0.0;
163 Tau[3] = 0.0;
164 Tau[4] = 0.0;
165 for(i = 0; i < 5; ++i)
166 {
167 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
168 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
169 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
170 }
171}
172
173//------------------------------------------------------------------------------
174
175void Candidate::AddCandidate(Candidate *object)
176{
177 if(!fArray) fArray = fFactory->NewArray();
178 fArray->Add(object);
179}
180
181//------------------------------------------------------------------------------
182
183TObjArray *Candidate::GetCandidates()
184{
185 if(!fArray) fArray = fFactory->NewArray();
186 return fArray;
187}
188
189//------------------------------------------------------------------------------
190
191Bool_t Candidate::Overlaps(const Candidate *object) const
192{
193 const Candidate *candidate;
194
195 if(object->GetUniqueID() == GetUniqueID()) return kTRUE;
196
197 if(fArray)
198 {
199 TIter it(fArray);
200 while((candidate = static_cast<Candidate *>(it.Next())))
201 {
202 if(candidate->Overlaps(object)) return kTRUE;
203 }
204 }
205
206 if(object->fArray)
207 {
208 TIter it(object->fArray);
209 while((candidate = static_cast<Candidate *>(it.Next())))
210 {
211 if(candidate->Overlaps(this)) return kTRUE;
212 }
213 }
214
215 return kFALSE;
216}
217
218
219//------------------------------------------------------------------------------
220
221TObject *Candidate::Clone(const char *newname) const
222{
223 Candidate *object = fFactory->NewCandidate();
224 Copy(*object);
225 return object;
226}
227
228//------------------------------------------------------------------------------
229
230void Candidate::Copy(TObject &obj) const
231{
232 Candidate &object = static_cast<Candidate &>(obj);
233 Candidate *candidate;
234
235 object.PID = PID;
236 object.Status = Status;
237 object.M1 = M1;
238 object.M2 = M2;
239 object.D1 = D1;
240 object.D2 = D2;
241 object.Charge = Charge;
242 object.Mass = Mass;
243 object.IsPU = IsPU;
244 object.IsConstituent = IsConstituent;
245 object.Flavor = Flavor;
246 object.FlavorAlgo = FlavorAlgo;
247 object.FlavorPhys = FlavorPhys;
248 object.BTag = BTag;
249 object.BTagAlgo = BTagAlgo;
250 object.BTagPhys = BTagPhys;
251 object.TauTag = TauTag;
252 object.Eem = Eem;
253 object.Ehad = Ehad;
254 object.Edges[0] = Edges[0];
255 object.Edges[1] = Edges[1];
256 object.Edges[2] = Edges[2];
257 object.Edges[3] = Edges[3];
258 object.DeltaEta = DeltaEta;
259 object.DeltaPhi = DeltaPhi;
260 object.Momentum = Momentum;
261 object.Position = Position;
262 object.Area = Area;
263 object.Dxy = Dxy;
264 object.SDxy = SDxy;
265 object.Xd = Xd;
266 object.Yd = Yd;
267 object.Zd = Zd;
268
269 object.NCharged = NCharged;
270 object.NNeutrals = NNeutrals;
271 object.Beta = Beta;
272 object.BetaStar = BetaStar;
273 object.MeanSqDeltaR = MeanSqDeltaR;
274 object.PTD = PTD;
275 object.Ntimes = Ntimes;
276 object.IsolationVar = IsolationVar;
277 object.IsolationVarRhoCorr = IsolationVarRhoCorr;
278 object.SumPtCharged = SumPtCharged;
279 object.SumPtNeutral = SumPtNeutral;
280 object.SumPtChargedPU = SumPtChargedPU;
281 object.SumPt = SumPt;
282
283 object.FracPt[0] = FracPt[0];
284 object.FracPt[1] = FracPt[1];
285 object.FracPt[2] = FracPt[2];
286 object.FracPt[3] = FracPt[3];
287 object.FracPt[4] = FracPt[4];
288 object.Tau[0] = Tau[0];
289 object.Tau[1] = Tau[1];
290 object.Tau[2] = Tau[2];
291 object.Tau[3] = Tau[3];
292 object.Tau[4] = Tau[4];
293
294 object.TrimmedP4[0] = TrimmedP4[0];
295 object.TrimmedP4[1] = TrimmedP4[1];
296 object.TrimmedP4[2] = TrimmedP4[2];
297 object.TrimmedP4[3] = TrimmedP4[3];
298 object.TrimmedP4[4] = TrimmedP4[4];
299 object.PrunedP4[0] = PrunedP4[0];
300 object.PrunedP4[1] = PrunedP4[1];
301 object.PrunedP4[2] = PrunedP4[2];
302 object.PrunedP4[3] = PrunedP4[3];
303 object.PrunedP4[4] = PrunedP4[4];
304 object.SoftDroppedP4[0] = SoftDroppedP4[0];
305 object.SoftDroppedP4[1] = SoftDroppedP4[1];
306 object.SoftDroppedP4[2] = SoftDroppedP4[2];
307 object.SoftDroppedP4[3] = SoftDroppedP4[3];
308 object.SoftDroppedP4[4] = SoftDroppedP4[4];
309
310 object.NSubJetsTrimmed = NSubJetsTrimmed;
311 object.NSubJetsPruned = NSubJetsPruned;
312 object.NSubJetsSoftDropped = NSubJetsSoftDropped;
313
314 object.fFactory = fFactory;
315 object.fArray = 0;
316
317 // Copy cluster timing info
318 copy(Ecal_E_t.begin(),Ecal_E_t.end(),back_inserter(object.Ecal_E_t));
319
320 if(fArray && fArray->GetEntriesFast() > 0)
321 {
322 TIter itArray(fArray);
323 TObjArray *array = object.GetCandidates();
324 while((candidate = static_cast<Candidate *>(itArray.Next())))
325 {
326 array->Add(candidate);
327 }
328 }
329}
330
331//------------------------------------------------------------------------------
332
333void Candidate::Clear(Option_t* option)
334{
335 int i;
336 SetUniqueID(0);
337 ResetBit(kIsReferenced);
338 PID = 0;
339 Status = 0;
340 M1 = -1; M2 = -1; D1 = -1; D2 = -1;
341 Charge = 0;
342 Mass = 0.0;
343 IsPU = 0;
344 IsConstituent = 0;
345 Flavor = 0;
346 FlavorAlgo = 0;
347 FlavorPhys = 0;
348 BTag = 0;
349 BTagAlgo = 0;
350 BTagPhys = 0;
351 TauTag = 0;
352 Eem = 0.0;
353 Ehad = 0.0;
354 Edges[0] = 0.0;
355 Edges[1] = 0.0;
356 Edges[2] = 0.0;
357 Edges[3] = 0.0;
358 DeltaEta = 0.0;
359 DeltaPhi = 0.0;
360 Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0);
361 Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
362 Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
363 Dxy = 0.0;
364 SDxy = 0.0;
365 Xd = 0.0;
366 Yd = 0.0;
367 Zd = 0.0;
368 NCharged = 0;
369 NNeutrals = 0;
370 Beta = 0.0;
371 BetaStar = 0.0;
372 MeanSqDeltaR = 0.0;
373 PTD = 0.0;
374
375 Ntimes = 0;
376 Ecal_E_t.clear();
377
378 IsolationVar = -999;
379 IsolationVarRhoCorr = -999;
380 SumPtCharged = -999;
381 SumPtNeutral = -999;
382 SumPtChargedPU = -999;
383 SumPt = -999;
384
385 FracPt[0] = 0.0;
386 FracPt[1] = 0.0;
387 FracPt[2] = 0.0;
388 FracPt[3] = 0.0;
389 FracPt[4] = 0.0;
390 Tau[0] = 0.0;
391 Tau[1] = 0.0;
392 Tau[2] = 0.0;
393 Tau[3] = 0.0;
394 Tau[4] = 0.0;
395
396 for(i = 0; i < 5; ++i)
397 {
398 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
399 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
400 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
401 }
402
403 NSubJetsTrimmed = 0;
404 NSubJetsPruned = 0;
405 NSubJetsSoftDropped = 0;
406
407 fArray = 0;
408}
Note: See TracBrowser for help on using the repository browser.