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
RevLine 
[b443089]1/*
2 * Delphes: a framework for fast simulation of a generic collider experiment
3 * Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium
[1fa50c2]4 *
[b443089]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.
[1fa50c2]9 *
[b443089]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.
[1fa50c2]14 *
[b443089]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
[d7d2da3]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();
[4d7014e]41CompBase *ParticleFlowCandidate::fgCompare = CompE<ParticleFlowCandidate>::Instance();
[8f7db23]42CompBase *HectorHit::fgCompare = CompE<HectorHit>::Instance();
[3c46e17]43CompBase *Vertex::fgCompare = CompSumPT2<Vertex>::Instance();
[d7d2da3]44CompBase *Candidate::fgCompare = CompMomentumPt<Candidate>::Instance();
45
46//------------------------------------------------------------------------------
47
[2b3ef28]48TLorentzVector GenParticle::P4() const
[d7d2da3]49{
50 TLorentzVector vec;
51 vec.SetPxPyPzE(Px, Py, Pz, E);
52 return vec;
53}
54
55//------------------------------------------------------------------------------
56
[2b3ef28]57TLorentzVector MissingET::P4() const
[4ad7b96]58{
59 TLorentzVector vec;
60 vec.SetPtEtaPhiM(MET, Eta, Phi, 0.0);
61 return vec;
62}
63
64//------------------------------------------------------------------------------
65
[2b3ef28]66TLorentzVector Photon::P4() const
[d7d2da3]67{
68 TLorentzVector vec;
69 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
70 return vec;
71}
72
73//------------------------------------------------------------------------------
74
[2b3ef28]75TLorentzVector Electron::P4() const
[d7d2da3]76{
77 TLorentzVector vec;
78 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
79 return vec;
80}
81
82//------------------------------------------------------------------------------
83
[2b3ef28]84TLorentzVector Muon::P4() const
[d7d2da3]85{
86 TLorentzVector vec;
87 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
88 return vec;
89}
90
91//------------------------------------------------------------------------------
92
[2b3ef28]93TLorentzVector Jet::P4() const
[d7d2da3]94{
95 TLorentzVector vec;
96 vec.SetPtEtaPhiM(PT, Eta, Phi, Mass);
97 return vec;
98}
99
100//------------------------------------------------------------------------------
101
[2b3ef28]102TLorentzVector Track::P4() const
[d7d2da3]103{
104 TLorentzVector vec;
105 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
106 return vec;
107}
108
109//------------------------------------------------------------------------------
110
[2b3ef28]111TLorentzVector Tower::P4() const
[d7d2da3]112{
113 TLorentzVector vec;
114 vec.SetPtEtaPhiM(ET, Eta, Phi, 0.0);
115 return vec;
116}
117
118//------------------------------------------------------------------------------
119
[4d7014e]120TLorentzVector ParticleFlowCandidate::P4() const
121{
122 TLorentzVector vec;
123 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
124 return vec;
125}
126
127//------------------------------------------------------------------------------
128
[d7d2da3]129Candidate::Candidate() :
130 PID(0), Status(0), M1(-1), M2(-1), D1(-1), D2(-1),
131 Charge(0), Mass(0.0),
[5d2481f]132 IsPU(0), IsRecoPU(0), IsConstituent(0), IsFromConversion(0),
[fe0273c]133 Flavor(0), FlavorAlgo(0), FlavorPhys(0),
134 BTag(0), BTagAlgo(0), BTagPhys(0),
[7429c6a]135 TauTag(0), TauWeight(0.0), Eem(0.0), Ehad(0.0),
[d7d2da3]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),
[2118a6a]139 InitialPosition(0.0, 0.0, 0.0, 0.0),
[1a4956e]140 PositionError(0.0, 0.0, 0.0, 0.0),
[d7d2da3]141 Area(0.0, 0.0, 0.0, 0.0),
[80306e6]142 L(0),
[341014c]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),
[84a097e]149 Xd(0), Yd(0), Zd(0), Td(0),
150 VertexingWeight(0),
[a98c7ef]151 TrackResolution(0),
[24d005f]152 NCharged(0),
153 NNeutrals(0),
[c614dd7]154 NeutralEnergyFraction(0), // charged energy fraction
155 ChargedEnergyFraction(0), // neutral energy fraction
[24d005f]156 Beta(0),
157 BetaStar(0),
158 MeanSqDeltaR(0),
[da00c35]159 PTD(0),
[839deb7]160 NTimeHits(-1),
[b62c2da]161 IsolationVar(-999),
162 IsolationVarRhoCorr(-999),
163 SumPtCharged(-999),
164 SumPtNeutral(-999),
165 SumPtChargedPU(-999),
166 SumPt(-999),
[1a4956e]167 ClusterIndex(-1), ClusterNDF(0), ClusterSigma(0), SumPT2(0), BTVSumPT2(0), GenDeltaZ(0), GenSumPT2(0),
[839deb7]168 NSubJetsTrimmed(0),
169 NSubJetsPruned(0),
170 NSubJetsSoftDropped(0),
[e9c0d73]171 ExclYmerge23(0),
172 ExclYmerge34(0),
173 ExclYmerge45(0),
174 ExclYmerge56(0),
[da00c35]175 fFactory(0),
176 fArray(0)
[d7d2da3]177{
[8d200a6]178 int i;
[d7d2da3]179 Edges[0] = 0.0;
180 Edges[1] = 0.0;
181 Edges[2] = 0.0;
182 Edges[3] = 0.0;
[24d005f]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;
[63178fb]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;
[ba75867]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
[8d200a6]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 }
[d7d2da3]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;
[84733ae]276 object.IsRecoPU = IsRecoPU;
[d7d2da3]277 object.IsConstituent = IsConstituent;
[5d2481f]278 object.IsFromConversion = IsFromConversion;
[2118a6a]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;
[fe0273c]286 object.Flavor = Flavor;
287 object.FlavorAlgo = FlavorAlgo;
288 object.FlavorPhys = FlavorPhys;
[d7d2da3]289 object.BTag = BTag;
[edf10ba]290 object.BTagAlgo = BTagAlgo;
[fe0273c]291 object.BTagPhys = BTagPhys;
[d7d2da3]292 object.TauTag = TauTag;
[7429c6a]293 object.TauWeight = TauWeight;
[d7d2da3]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;
[2118a6a]304 object.InitialPosition = InitialPosition;
305 object.PositionError = PositionError;
[43c646a]306 object.Area = Area;
[80306e6]307 object.L = L;
[28c722a]308 object.ErrorT = ErrorT;
[80306e6]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;
[341014c]317 object.CtgTheta = CtgTheta;
[80306e6]318 object.ErrorCtgTheta = ErrorCtgTheta;
319 object.Phi = Phi;
[341014c]320 object.ErrorPhi = ErrorPhi;
[84a097e]321 object.Td = Td;
[a0431dc]322 object.Xd = Xd;
323 object.Yd = Yd;
324 object.Zd = Zd;
[84a097e]325 object.VertexingWeight = Zd;
[a98c7ef]326 object.TrackResolution = TrackResolution;
[24d005f]327 object.NCharged = NCharged;
328 object.NNeutrals = NNeutrals;
[c614dd7]329 object.NeutralEnergyFraction = NeutralEnergyFraction;
330 object.ChargedEnergyFraction = ChargedEnergyFraction;
[24d005f]331 object.Beta = Beta;
332 object.BetaStar = BetaStar;
333 object.MeanSqDeltaR = MeanSqDeltaR;
334 object.PTD = PTD;
[839deb7]335 object.NTimeHits = NTimeHits;
[b62c2da]336 object.IsolationVar = IsolationVar;
337 object.IsolationVarRhoCorr = IsolationVarRhoCorr;
338 object.SumPtCharged = SumPtCharged;
339 object.SumPtNeutral = SumPtNeutral;
340 object.SumPtChargedPU = SumPtChargedPU;
341 object.SumPt = SumPt;
[ab3bdd9]342 object.ClusterIndex = ClusterIndex;
343 object.ClusterNDF = ClusterNDF;
[341014c]344 object.ClusterSigma = ClusterSigma;
[ab3bdd9]345 object.SumPT2 = SumPT2;
[341014c]346
[24d005f]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];
[63178fb]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];
[839deb7]357
[de6d698]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
[edf10ba]374 object.NSubJetsTrimmed = NSubJetsTrimmed;
375 object.NSubJetsPruned = NSubJetsPruned;
[de6d698]376 object.NSubJetsSoftDropped = NSubJetsSoftDropped;
[e4c3fef]377
[341014c]378 object.SoftDroppedJet = SoftDroppedJet;
[ba75867]379 object.SoftDroppedSubJet1 = SoftDroppedSubJet1;
380 object.SoftDroppedSubJet2 = SoftDroppedSubJet2;
381
[d7d2da3]382 object.fFactory = fFactory;
383 object.fArray = 0;
384
[839deb7]385 // copy cluster timing info
386 copy(ECalEnergyTimePairs.begin(), ECalEnergyTimePairs.end(), back_inserter(object.ECalEnergyTimePairs));
[3db5282]387
[d7d2da3]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
[341014c]401void Candidate::Clear(Option_t *option)
[d7d2da3]402{
[8d200a6]403 int i;
[d7d2da3]404 SetUniqueID(0);
405 ResetBit(kIsReferenced);
406 PID = 0;
407 Status = 0;
[341014c]408 M1 = -1;
409 M2 = -1;
410 D1 = -1;
411 D2 = -1;
[d7d2da3]412 Charge = 0;
413 Mass = 0.0;
414 IsPU = 0;
[d759c46]415 IsRecoPU = 0;
[d7d2da3]416 IsConstituent = 0;
[5d2481f]417 IsFromConversion = 0;
[fe0273c]418 Flavor = 0;
419 FlavorAlgo = 0;
420 FlavorPhys = 0;
[d7d2da3]421 BTag = 0;
[edf10ba]422 BTagAlgo = 0;
[fe0273c]423 BTagPhys = 0;
[d7d2da3]424 TauTag = 0;
[7429c6a]425 TauWeight = 0.0;
[d7d2da3]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);
[80306e6]436 InitialPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);
[d7d2da3]437 Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
[80306e6]438 L = 0.0;
[28c722a]439 ErrorT = 0.0;
[341014c]440 D0 = 0.0;
[80306e6]441 ErrorD0 = 0.0;
442 DZ = 0.0;
443 ErrorDZ = 0.0;
[341014c]444 P = 0.0;
445 ErrorP = 0.0;
[80306e6]446 PT = 0.0;
447 ErrorPT = 0.0;
448 CtgTheta = 0.0;
449 ErrorCtgTheta = 0.0;
450 Phi = 0.0;
451 ErrorPhi = 0.0;
[84a097e]452 Td = 0.0;
[a0431dc]453 Xd = 0.0;
454 Yd = 0.0;
455 Zd = 0.0;
[84a097e]456 VertexingWeight = 0.0;
[a98c7ef]457 TrackResolution = 0.0;
[24d005f]458 NCharged = 0;
459 NNeutrals = 0;
460 Beta = 0.0;
461 BetaStar = 0.0;
462 MeanSqDeltaR = 0.0;
463 PTD = 0.0;
[839deb7]464
465 NTimeHits = 0;
466 ECalEnergyTimePairs.clear();
467
[b62c2da]468 IsolationVar = -999;
469 IsolationVarRhoCorr = -999;
470 SumPtCharged = -999;
471 SumPtNeutral = -999;
472 SumPtChargedPU = -999;
473 SumPt = -999;
[839deb7]474
[ab3bdd9]475 ClusterIndex = -1;
476 ClusterNDF = -99;
[341014c]477 ClusterSigma = 0.0;
[ab3bdd9]478 SumPT2 = 0.0;
479 BTVSumPT2 = 0.0;
480 GenDeltaZ = 0.0;
[341014c]481 GenSumPT2 = 0.0;
482
[24d005f]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;
[63178fb]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;
[839deb7]493
[ba75867]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
[8d200a6]498 for(i = 0; i < 5; ++i)
499 {
500 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
[839deb7]501 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
[8d200a6]502 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
503 }
504
[edf10ba]505 NSubJetsTrimmed = 0;
506 NSubJetsPruned = 0;
[de6d698]507 NSubJetsSoftDropped = 0;
[839deb7]508
[d7d2da3]509 fArray = 0;
510}
Note: See TracBrowser for help on using the repository browser.