Fork me on GitHub

source: git/classes/DelphesClasses.cc@ 9c52415

Timing
Last change on this file since 9c52415 was 84a097e, checked in by Michele Selvaggi <michele.selvaggi@…>, 5 years ago

first iteration of adding timing in Delphes

  • Property mode set to 100644
File size: 12.8 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 * Definition of classes to be stored in the root tree.
22 * Function CompareXYZ sorts objects by the variable XYZ that MUST be
23 * present in the data members of the root tree class of the branch.
24 *
25 * \author P. Demin - UCL, Louvain-la-Neuve
26 *
27 */
28
29#include "classes/DelphesClasses.h"
30
31#include "classes/DelphesFactory.h"
32#include "classes/SortableObject.h"
33
34CompBase *GenParticle::fgCompare = 0;
35CompBase *Photon::fgCompare = CompPT<Photon>::Instance();
36CompBase *Electron::fgCompare = CompPT<Electron>::Instance();
37CompBase *Muon::fgCompare = CompPT<Muon>::Instance();
38CompBase *Jet::fgCompare = CompPT<Jet>::Instance();
39CompBase *Track::fgCompare = CompPT<Track>::Instance();
40CompBase *Tower::fgCompare = CompE<Tower>::Instance();
41CompBase *ParticleFlowCandidate::fgCompare = CompE<ParticleFlowCandidate>::Instance();
42CompBase *HectorHit::fgCompare = CompE<HectorHit>::Instance();
43CompBase *Vertex::fgCompare = CompSumPT2<Vertex>::Instance();
44CompBase *Candidate::fgCompare = CompMomentumPt<Candidate>::Instance();
45
46//------------------------------------------------------------------------------
47
48TLorentzVector GenParticle::P4() const
49{
50 TLorentzVector vec;
51 vec.SetPxPyPzE(Px, Py, Pz, E);
52 return vec;
53}
54
55//------------------------------------------------------------------------------
56
57TLorentzVector MissingET::P4() const
58{
59 TLorentzVector vec;
60 vec.SetPtEtaPhiM(MET, Eta, Phi, 0.0);
61 return vec;
62}
63
64//------------------------------------------------------------------------------
65
66TLorentzVector Photon::P4() const
67{
68 TLorentzVector vec;
69 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
70 return vec;
71}
72
73//------------------------------------------------------------------------------
74
75TLorentzVector Electron::P4() const
76{
77 TLorentzVector vec;
78 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
79 return vec;
80}
81
82//------------------------------------------------------------------------------
83
84TLorentzVector Muon::P4() const
85{
86 TLorentzVector vec;
87 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
88 return vec;
89}
90
91//------------------------------------------------------------------------------
92
93TLorentzVector Jet::P4() const
94{
95 TLorentzVector vec;
96 vec.SetPtEtaPhiM(PT, Eta, Phi, Mass);
97 return vec;
98}
99
100//------------------------------------------------------------------------------
101
102TLorentzVector Track::P4() const
103{
104 TLorentzVector vec;
105 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
106 return vec;
107}
108
109//------------------------------------------------------------------------------
110
111TLorentzVector Tower::P4() const
112{
113 TLorentzVector vec;
114 vec.SetPtEtaPhiM(ET, Eta, Phi, 0.0);
115 return vec;
116}
117
118//------------------------------------------------------------------------------
119
120TLorentzVector ParticleFlowCandidate::P4() const
121{
122 TLorentzVector vec;
123 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
124 return vec;
125}
126
127//------------------------------------------------------------------------------
128
129Candidate::Candidate() :
130 PID(0), Status(0), M1(-1), M2(-1), D1(-1), D2(-1),
131 Charge(0), Mass(0.0),
132 IsPU(0), IsRecoPU(0), IsConstituent(0), IsFromConversion(0),
133 Flavor(0), FlavorAlgo(0), FlavorPhys(0),
134 BTag(0), BTagAlgo(0), BTagPhys(0),
135 TauTag(0), TauWeight(0.0), Eem(0.0), Ehad(0.0),
136 DeltaEta(0.0), DeltaPhi(0.0),
137 Momentum(0.0, 0.0, 0.0, 0.0),
138 Position(0.0, 0.0, 0.0, 0.0),
139 InitialPosition(0.0, 0.0, 0.0, 0.0),
140 PositionError(0.0, 0.0, 0.0, 0.0),
141 Area(0.0, 0.0, 0.0, 0.0),
142 L(0),
143 D0(0), ErrorD0(0),
144 DZ(0), ErrorDZ(0),
145 P(0), ErrorP(0),
146 PT(0), ErrorPT(0),
147 CtgTheta(0), ErrorCtgTheta(0),
148 Phi(0), ErrorPhi(0),
149 Xd(0), Yd(0), Zd(0), Td(0),
150 VertexingWeight(0),
151 TrackResolution(0),
152 NCharged(0),
153 NNeutrals(0),
154 NeutralEnergyFraction(0), // charged energy fraction
155 ChargedEnergyFraction(0), // neutral energy fraction
156 Beta(0),
157 BetaStar(0),
158 MeanSqDeltaR(0),
159 PTD(0),
160 NTimeHits(-1),
161 IsolationVar(-999),
162 IsolationVarRhoCorr(-999),
163 SumPtCharged(-999),
164 SumPtNeutral(-999),
165 SumPtChargedPU(-999),
166 SumPt(-999),
167 ClusterIndex(-1), ClusterNDF(0), ClusterSigma(0), SumPT2(0), BTVSumPT2(0), GenDeltaZ(0), GenSumPT2(0),
168 NSubJetsTrimmed(0),
169 NSubJetsPruned(0),
170 NSubJetsSoftDropped(0),
171 ExclYmerge23(0),
172 ExclYmerge34(0),
173 ExclYmerge45(0),
174 ExclYmerge56(0),
175 fFactory(0),
176 fArray(0)
177{
178 int i;
179 Edges[0] = 0.0;
180 Edges[1] = 0.0;
181 Edges[2] = 0.0;
182 Edges[3] = 0.0;
183 FracPt[0] = 0.0;
184 FracPt[1] = 0.0;
185 FracPt[2] = 0.0;
186 FracPt[3] = 0.0;
187 FracPt[4] = 0.0;
188 Tau[0] = 0.0;
189 Tau[1] = 0.0;
190 Tau[2] = 0.0;
191 Tau[3] = 0.0;
192 Tau[4] = 0.0;
193
194 SoftDroppedJet.SetXYZT(0.0, 0.0, 0.0, 0.0);
195 SoftDroppedSubJet1.SetXYZT(0.0, 0.0, 0.0, 0.0);
196 SoftDroppedSubJet2.SetXYZT(0.0, 0.0, 0.0, 0.0);
197
198 for(i = 0; i < 5; ++i)
199 {
200 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
201 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
202 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
203 }
204}
205
206//------------------------------------------------------------------------------
207
208void Candidate::AddCandidate(Candidate *object)
209{
210 if(!fArray) fArray = fFactory->NewArray();
211 fArray->Add(object);
212}
213
214//------------------------------------------------------------------------------
215
216TObjArray *Candidate::GetCandidates()
217{
218 if(!fArray) fArray = fFactory->NewArray();
219 return fArray;
220}
221
222//------------------------------------------------------------------------------
223
224Bool_t Candidate::Overlaps(const Candidate *object) const
225{
226 const Candidate *candidate;
227
228 if(object->GetUniqueID() == GetUniqueID()) return kTRUE;
229
230 if(fArray)
231 {
232 TIter it(fArray);
233 while((candidate = static_cast<Candidate *>(it.Next())))
234 {
235 if(candidate->Overlaps(object)) return kTRUE;
236 }
237 }
238
239 if(object->fArray)
240 {
241 TIter it(object->fArray);
242 while((candidate = static_cast<Candidate *>(it.Next())))
243 {
244 if(candidate->Overlaps(this)) return kTRUE;
245 }
246 }
247
248 return kFALSE;
249}
250
251//------------------------------------------------------------------------------
252
253TObject *Candidate::Clone(const char *newname) const
254{
255 Candidate *object = fFactory->NewCandidate();
256 Copy(*object);
257 return object;
258}
259
260//------------------------------------------------------------------------------
261
262void Candidate::Copy(TObject &obj) const
263{
264 Candidate &object = static_cast<Candidate &>(obj);
265 Candidate *candidate;
266
267 object.PID = PID;
268 object.Status = Status;
269 object.M1 = M1;
270 object.M2 = M2;
271 object.D1 = D1;
272 object.D2 = D2;
273 object.Charge = Charge;
274 object.Mass = Mass;
275 object.IsPU = IsPU;
276 object.IsRecoPU = IsRecoPU;
277 object.IsConstituent = IsConstituent;
278 object.IsFromConversion = IsFromConversion;
279 object.ClusterIndex = ClusterIndex;
280 object.ClusterNDF = ClusterNDF;
281 object.ClusterSigma = ClusterSigma;
282 object.SumPT2 = SumPT2;
283 object.BTVSumPT2 = BTVSumPT2;
284 object.GenDeltaZ = GenDeltaZ;
285 object.GenSumPT2 = GenSumPT2;
286 object.Flavor = Flavor;
287 object.FlavorAlgo = FlavorAlgo;
288 object.FlavorPhys = FlavorPhys;
289 object.BTag = BTag;
290 object.BTagAlgo = BTagAlgo;
291 object.BTagPhys = BTagPhys;
292 object.TauTag = TauTag;
293 object.TauWeight = TauWeight;
294 object.Eem = Eem;
295 object.Ehad = Ehad;
296 object.Edges[0] = Edges[0];
297 object.Edges[1] = Edges[1];
298 object.Edges[2] = Edges[2];
299 object.Edges[3] = Edges[3];
300 object.DeltaEta = DeltaEta;
301 object.DeltaPhi = DeltaPhi;
302 object.Momentum = Momentum;
303 object.Position = Position;
304 object.InitialPosition = InitialPosition;
305 object.PositionError = PositionError;
306 object.Area = Area;
307 object.L = L;
308 object.ErrorT = ErrorT;
309 object.D0 = D0;
310 object.ErrorD0 = ErrorD0;
311 object.DZ = DZ;
312 object.ErrorDZ = ErrorDZ;
313 object.P = P;
314 object.ErrorP = ErrorP;
315 object.PT = PT;
316 object.ErrorPT = ErrorPT;
317 object.CtgTheta = CtgTheta;
318 object.ErrorCtgTheta = ErrorCtgTheta;
319 object.Phi = Phi;
320 object.ErrorPhi = ErrorPhi;
321 object.Td = Td;
322 object.Xd = Xd;
323 object.Yd = Yd;
324 object.Zd = Zd;
325 object.VertexingWeight = Zd;
326 object.TrackResolution = TrackResolution;
327 object.NCharged = NCharged;
328 object.NNeutrals = NNeutrals;
329 object.NeutralEnergyFraction = NeutralEnergyFraction;
330 object.ChargedEnergyFraction = ChargedEnergyFraction;
331 object.Beta = Beta;
332 object.BetaStar = BetaStar;
333 object.MeanSqDeltaR = MeanSqDeltaR;
334 object.PTD = PTD;
335 object.NTimeHits = NTimeHits;
336 object.IsolationVar = IsolationVar;
337 object.IsolationVarRhoCorr = IsolationVarRhoCorr;
338 object.SumPtCharged = SumPtCharged;
339 object.SumPtNeutral = SumPtNeutral;
340 object.SumPtChargedPU = SumPtChargedPU;
341 object.SumPt = SumPt;
342 object.ClusterIndex = ClusterIndex;
343 object.ClusterNDF = ClusterNDF;
344 object.ClusterSigma = ClusterSigma;
345 object.SumPT2 = SumPT2;
346
347 object.FracPt[0] = FracPt[0];
348 object.FracPt[1] = FracPt[1];
349 object.FracPt[2] = FracPt[2];
350 object.FracPt[3] = FracPt[3];
351 object.FracPt[4] = FracPt[4];
352 object.Tau[0] = Tau[0];
353 object.Tau[1] = Tau[1];
354 object.Tau[2] = Tau[2];
355 object.Tau[3] = Tau[3];
356 object.Tau[4] = Tau[4];
357
358 object.TrimmedP4[0] = TrimmedP4[0];
359 object.TrimmedP4[1] = TrimmedP4[1];
360 object.TrimmedP4[2] = TrimmedP4[2];
361 object.TrimmedP4[3] = TrimmedP4[3];
362 object.TrimmedP4[4] = TrimmedP4[4];
363 object.PrunedP4[0] = PrunedP4[0];
364 object.PrunedP4[1] = PrunedP4[1];
365 object.PrunedP4[2] = PrunedP4[2];
366 object.PrunedP4[3] = PrunedP4[3];
367 object.PrunedP4[4] = PrunedP4[4];
368 object.SoftDroppedP4[0] = SoftDroppedP4[0];
369 object.SoftDroppedP4[1] = SoftDroppedP4[1];
370 object.SoftDroppedP4[2] = SoftDroppedP4[2];
371 object.SoftDroppedP4[3] = SoftDroppedP4[3];
372 object.SoftDroppedP4[4] = SoftDroppedP4[4];
373
374 object.NSubJetsTrimmed = NSubJetsTrimmed;
375 object.NSubJetsPruned = NSubJetsPruned;
376 object.NSubJetsSoftDropped = NSubJetsSoftDropped;
377
378 object.SoftDroppedJet = SoftDroppedJet;
379 object.SoftDroppedSubJet1 = SoftDroppedSubJet1;
380 object.SoftDroppedSubJet2 = SoftDroppedSubJet2;
381
382 object.fFactory = fFactory;
383 object.fArray = 0;
384
385 // copy cluster timing info
386 copy(ECalEnergyTimePairs.begin(), ECalEnergyTimePairs.end(), back_inserter(object.ECalEnergyTimePairs));
387
388 if(fArray && fArray->GetEntriesFast() > 0)
389 {
390 TIter itArray(fArray);
391 TObjArray *array = object.GetCandidates();
392 while((candidate = static_cast<Candidate *>(itArray.Next())))
393 {
394 array->Add(candidate);
395 }
396 }
397}
398
399//------------------------------------------------------------------------------
400
401void Candidate::Clear(Option_t *option)
402{
403 int i;
404 SetUniqueID(0);
405 ResetBit(kIsReferenced);
406 PID = 0;
407 Status = 0;
408 M1 = -1;
409 M2 = -1;
410 D1 = -1;
411 D2 = -1;
412 Charge = 0;
413 Mass = 0.0;
414 IsPU = 0;
415 IsRecoPU = 0;
416 IsConstituent = 0;
417 IsFromConversion = 0;
418 Flavor = 0;
419 FlavorAlgo = 0;
420 FlavorPhys = 0;
421 BTag = 0;
422 BTagAlgo = 0;
423 BTagPhys = 0;
424 TauTag = 0;
425 TauWeight = 0.0;
426 Eem = 0.0;
427 Ehad = 0.0;
428 Edges[0] = 0.0;
429 Edges[1] = 0.0;
430 Edges[2] = 0.0;
431 Edges[3] = 0.0;
432 DeltaEta = 0.0;
433 DeltaPhi = 0.0;
434 Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0);
435 Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
436 InitialPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);
437 Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
438 L = 0.0;
439 ErrorT = 0.0;
440 D0 = 0.0;
441 ErrorD0 = 0.0;
442 DZ = 0.0;
443 ErrorDZ = 0.0;
444 P = 0.0;
445 ErrorP = 0.0;
446 PT = 0.0;
447 ErrorPT = 0.0;
448 CtgTheta = 0.0;
449 ErrorCtgTheta = 0.0;
450 Phi = 0.0;
451 ErrorPhi = 0.0;
452 Td = 0.0;
453 Xd = 0.0;
454 Yd = 0.0;
455 Zd = 0.0;
456 VertexingWeight = 0.0;
457 TrackResolution = 0.0;
458 NCharged = 0;
459 NNeutrals = 0;
460 Beta = 0.0;
461 BetaStar = 0.0;
462 MeanSqDeltaR = 0.0;
463 PTD = 0.0;
464
465 NTimeHits = 0;
466 ECalEnergyTimePairs.clear();
467
468 IsolationVar = -999;
469 IsolationVarRhoCorr = -999;
470 SumPtCharged = -999;
471 SumPtNeutral = -999;
472 SumPtChargedPU = -999;
473 SumPt = -999;
474
475 ClusterIndex = -1;
476 ClusterNDF = -99;
477 ClusterSigma = 0.0;
478 SumPT2 = 0.0;
479 BTVSumPT2 = 0.0;
480 GenDeltaZ = 0.0;
481 GenSumPT2 = 0.0;
482
483 FracPt[0] = 0.0;
484 FracPt[1] = 0.0;
485 FracPt[2] = 0.0;
486 FracPt[3] = 0.0;
487 FracPt[4] = 0.0;
488 Tau[0] = 0.0;
489 Tau[1] = 0.0;
490 Tau[2] = 0.0;
491 Tau[3] = 0.0;
492 Tau[4] = 0.0;
493
494 SoftDroppedJet.SetXYZT(0.0, 0.0, 0.0, 0.0);
495 SoftDroppedSubJet1.SetXYZT(0.0, 0.0, 0.0, 0.0);
496 SoftDroppedSubJet2.SetXYZT(0.0, 0.0, 0.0, 0.0);
497
498 for(i = 0; i < 5; ++i)
499 {
500 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
501 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
502 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
503 }
504
505 NSubJetsTrimmed = 0;
506 NSubJetsPruned = 0;
507 NSubJetsSoftDropped = 0;
508
509 fArray = 0;
510}
Note: See TracBrowser for help on using the repository browser.