Fork me on GitHub

source: git/classes/DelphesClasses.cc@ 3a105e5

Last change on this file since 3a105e5 was 3a105e5, checked in by michele <michele.selvaggi@…>, 3 years ago

added first hit to track

  • Property mode set to 100644
File size: 15.0 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#include "classes/DelphesFactory.h"
31#include "classes/SortableObject.h"
32
33CompBase *GenParticle::fgCompare = 0;
34CompBase *Photon::fgCompare = CompPT<Photon>::Instance();
35CompBase *Electron::fgCompare = CompPT<Electron>::Instance();
36CompBase *Muon::fgCompare = CompPT<Muon>::Instance();
37CompBase *Jet::fgCompare = CompPT<Jet>::Instance();
38CompBase *Track::fgCompare = CompPT<Track>::Instance();
39CompBase *Tower::fgCompare = CompE<Tower>::Instance();
40CompBase *ParticleFlowCandidate::fgCompare = CompE<ParticleFlowCandidate>::Instance();
41CompBase *HectorHit::fgCompare = CompE<HectorHit>::Instance();
42CompBase *Vertex::fgCompare = CompSumPT2<Vertex>::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, Mass);
105 return vec;
106}
107
108//------------------------------------------------------------------------------
109
110TMatrixDSym Track::CovarianceMatrix() const
111{
112 TMatrixDSym Cv;
113 Cv.ResizeTo(5, 5);
114
115 // convert diagonal term to original units
116 Cv(0, 0)=TMath::Power(ErrorD0, 2.);
117 Cv(1, 1)=TMath::Power(ErrorPhi, 2.);
118 Cv(2, 2)=TMath::Power(ErrorC, 2.);
119 Cv(3, 3)=TMath::Power(ErrorDZ, 2.);
120 Cv(4, 4)=TMath::Power(ErrorCtgTheta, 2.);
121
122 // off diagonal terms
123 Cv(0, 1)=ErrorD0Phi;
124 Cv(0, 2)=ErrorD0C;
125 Cv(0, 3)=ErrorD0DZ;
126 Cv(0, 4)=ErrorD0CtgTheta;
127 Cv(1, 2)=ErrorPhiC;
128 Cv(1, 3)=ErrorPhiDZ;
129 Cv(1, 4)=ErrorPhiCtgTheta;
130 Cv(2, 3)=ErrorCDZ;
131 Cv(2, 4)=ErrorCCtgTheta;
132 Cv(3, 4)=ErrorDZCtgTheta;
133
134 Cv(1, 0)=Cv(0, 1);
135 Cv(2, 0)=Cv(0, 2);
136 Cv(3, 0)=Cv(0, 3);
137 Cv(4, 0)=Cv(0, 4);
138 Cv(2, 1)=Cv(1, 2);
139 Cv(3, 1)=Cv(1, 3);
140 Cv(4, 1)=Cv(1, 4);
141 Cv(3, 2)=Cv(2, 3);
142 Cv(4, 2)=Cv(2, 4);
143 Cv(4, 3)=Cv(3, 4);
144
145 return Cv;
146}
147
148
149//------------------------------------------------------------------------------
150
151TLorentzVector Tower::P4() const
152{
153 TLorentzVector vec;
154 vec.SetPtEtaPhiM(ET, Eta, Phi, 0.0);
155 return vec;
156}
157
158//------------------------------------------------------------------------------
159
160TLorentzVector ParticleFlowCandidate::P4() const
161{
162 TLorentzVector vec;
163 vec.SetPtEtaPhiM(PT, Eta, Phi, Mass);
164 return vec;
165}
166
167//------------------------------------------------------------------------------
168
169TMatrixDSym ParticleFlowCandidate::CovarianceMatrix() const
170{
171 TMatrixDSym Cv;
172 Cv.ResizeTo(5, 5);
173
174 // convert diagonal term to original units
175 Cv(0, 0)=TMath::Power(ErrorD0, 2.);
176 Cv(1, 1)=TMath::Power(ErrorPhi, 2.);
177 Cv(2, 2)=TMath::Power(ErrorC, 2.);
178 Cv(3, 3)=TMath::Power(ErrorDZ, 2.);
179 Cv(4, 4)=TMath::Power(ErrorCtgTheta, 2.);
180
181 // off diagonal terms
182 Cv(0, 1)=ErrorD0Phi;
183 Cv(0, 2)=ErrorD0C;
184 Cv(0, 3)=ErrorD0DZ;
185 Cv(0, 4)=ErrorD0CtgTheta;
186 Cv(1, 2)=ErrorPhiC;
187 Cv(1, 3)=ErrorPhiDZ;
188 Cv(1, 4)=ErrorPhiCtgTheta;
189 Cv(2, 3)=ErrorCDZ;
190 Cv(2, 4)=ErrorCCtgTheta;
191 Cv(3, 4)=ErrorDZCtgTheta;
192
193 Cv(1, 0)=Cv(0, 1);
194 Cv(2, 0)=Cv(0, 2);
195 Cv(3, 0)=Cv(0, 3);
196 Cv(4, 0)=Cv(0, 4);
197 Cv(2, 1)=Cv(1, 2);
198 Cv(3, 1)=Cv(1, 3);
199 Cv(4, 1)=Cv(1, 4);
200 Cv(3, 2)=Cv(2, 3);
201 Cv(4, 2)=Cv(2, 4);
202 Cv(4, 3)=Cv(3, 4);
203
204 return Cv;
205}
206
207//------------------------------------------------------------------------------
208
209Candidate::Candidate() :
210 PID(0), Status(0), M1(-1), M2(-1), D1(-1), D2(-1),
211 Charge(0), Mass(0.0),
212 IsPU(0), IsRecoPU(0), IsConstituent(0), IsFromConversion(0),
213 Flavor(0), FlavorAlgo(0), FlavorPhys(0),
214 BTag(0), BTagAlgo(0), BTagPhys(0),
215 TauTag(0), TauWeight(0.0), Eem(0.0), Ehad(0.0), Etrk(0.0),
216 DeltaEta(0.0), DeltaPhi(0.0),
217 Momentum(0.0, 0.0, 0.0, 0.0),
218 Position(0.0, 0.0, 0.0, 0.0),
219 InitialPosition(0.0, 0.0, 0.0, 0.0),
220 PositionError(0.0, 0.0, 0.0, 0.0),
221 Area(0.0, 0.0, 0.0, 0.0),
222 TrackCovariance(5),
223 L(0),
224 D0(0), ErrorD0(0),
225 DZ(0), ErrorDZ(0),
226 P(0), ErrorP(0),
227 C(0), ErrorC(0),
228 PT(0), ErrorPT(0),
229 CtgTheta(0), ErrorCtgTheta(0),
230 Phi(0), ErrorPhi(0),
231 Xd(0), Yd(0), Zd(0),
232 XFirstHit(0), YFirstHit(0), ZFirstHit(0),
233 Nclusters(0.0),
234 dNdx(0.0),
235 TrackResolution(0),
236 NCharged(0),
237 NNeutrals(0),
238 NeutralEnergyFraction(0), // charged energy fraction
239 ChargedEnergyFraction(0), // neutral energy fraction
240 Beta(0),
241 BetaStar(0),
242 MeanSqDeltaR(0),
243 PTD(0),
244 NTimeHits(-1),
245 IsolationVar(-999),
246 IsolationVarRhoCorr(-999),
247 SumPtCharged(-999),
248 SumPtNeutral(-999),
249 SumPtChargedPU(-999),
250 SumPt(-999),
251 ClusterIndex(-1), ClusterNDF(0), ClusterSigma(0), SumPT2(0), BTVSumPT2(0), GenDeltaZ(0), GenSumPT2(0),
252 NSubJetsTrimmed(0),
253 NSubJetsPruned(0),
254 NSubJetsSoftDropped(0),
255 ExclYmerge23(0),
256 ExclYmerge34(0),
257 ExclYmerge45(0),
258 ExclYmerge56(0),
259 ParticleDensity(0),
260 fFactory(0),
261 fArray(0)
262{
263 int i;
264 Edges[0] = 0.0;
265 Edges[1] = 0.0;
266 Edges[2] = 0.0;
267 Edges[3] = 0.0;
268 FracPt[0] = 0.0;
269 FracPt[1] = 0.0;
270 FracPt[2] = 0.0;
271 FracPt[3] = 0.0;
272 FracPt[4] = 0.0;
273 Tau[0] = 0.0;
274 Tau[1] = 0.0;
275 Tau[2] = 0.0;
276 Tau[3] = 0.0;
277 Tau[4] = 0.0;
278
279 SoftDroppedJet.SetXYZT(0.0, 0.0, 0.0, 0.0);
280 SoftDroppedSubJet1.SetXYZT(0.0, 0.0, 0.0, 0.0);
281 SoftDroppedSubJet2.SetXYZT(0.0, 0.0, 0.0, 0.0);
282
283 for(i = 0; i < 5; ++i)
284 {
285 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
286 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
287 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
288 }
289}
290
291//------------------------------------------------------------------------------
292
293void Candidate::AddCandidate(Candidate *object)
294{
295 if(!fArray) fArray = fFactory->NewArray();
296 fArray->Add(object);
297}
298
299//------------------------------------------------------------------------------
300
301TObjArray *Candidate::GetCandidates()
302{
303 if(!fArray) fArray = fFactory->NewArray();
304 return fArray;
305}
306
307//------------------------------------------------------------------------------
308
309Bool_t Candidate::Overlaps(const Candidate *object) const
310{
311 const Candidate *candidate;
312
313 if(object->GetUniqueID() == GetUniqueID()) return kTRUE;
314
315 if(fArray)
316 {
317 TIter it(fArray);
318 while((candidate = static_cast<Candidate *>(it.Next())))
319 {
320 if(candidate->Overlaps(object)) return kTRUE;
321 }
322 }
323
324 if(object->fArray)
325 {
326 TIter it(object->fArray);
327 while((candidate = static_cast<Candidate *>(it.Next())))
328 {
329 if(candidate->Overlaps(this)) return kTRUE;
330 }
331 }
332
333 return kFALSE;
334}
335
336//------------------------------------------------------------------------------
337
338TObject *Candidate::Clone(const char *newname) const
339{
340 Candidate *object = fFactory->NewCandidate();
341 Copy(*object);
342 return object;
343}
344
345//------------------------------------------------------------------------------
346
347void Candidate::Copy(TObject &obj) const
348{
349 Candidate &object = static_cast<Candidate &>(obj);
350 Candidate *candidate;
351
352 object.PID = PID;
353 object.Status = Status;
354 object.M1 = M1;
355 object.M2 = M2;
356 object.D1 = D1;
357 object.D2 = D2;
358 object.Charge = Charge;
359 object.Mass = Mass;
360 object.IsPU = IsPU;
361 object.IsRecoPU = IsRecoPU;
362 object.IsConstituent = IsConstituent;
363 object.IsFromConversion = IsFromConversion;
364 object.ClusterIndex = ClusterIndex;
365 object.ClusterNDF = ClusterNDF;
366 object.ClusterSigma = ClusterSigma;
367 object.SumPT2 = SumPT2;
368 object.BTVSumPT2 = BTVSumPT2;
369 object.GenDeltaZ = GenDeltaZ;
370 object.GenSumPT2 = GenSumPT2;
371 object.Flavor = Flavor;
372 object.FlavorAlgo = FlavorAlgo;
373 object.FlavorPhys = FlavorPhys;
374 object.BTag = BTag;
375 object.BTagAlgo = BTagAlgo;
376 object.BTagPhys = BTagPhys;
377 object.TauTag = TauTag;
378 object.TauWeight = TauWeight;
379 object.Eem = Eem;
380 object.Ehad = Ehad;
381 object.Etrk = Etrk;
382 object.Edges[0] = Edges[0];
383 object.Edges[1] = Edges[1];
384 object.Edges[2] = Edges[2];
385 object.Edges[3] = Edges[3];
386 object.DeltaEta = DeltaEta;
387 object.DeltaPhi = DeltaPhi;
388 object.Momentum = Momentum;
389 object.Position = Position;
390 object.InitialPosition = InitialPosition;
391 object.PositionError = PositionError;
392 object.Area = Area;
393 object.L = L;
394 object.ErrorT = ErrorT;
395 object.D0 = D0;
396 object.ErrorD0 = ErrorD0;
397 object.DZ = DZ;
398 object.ErrorDZ = ErrorDZ;
399 object.P = P;
400 object.ErrorP = ErrorP;
401 object.C = C;
402 object.ErrorC = ErrorC;
403 object.PT = PT;
404 object.ErrorPT = ErrorPT;
405 object.CtgTheta = CtgTheta;
406 object.ErrorCtgTheta = ErrorCtgTheta;
407 object.Phi = Phi;
408 object.ErrorPhi = ErrorPhi;
409 object.Xd = Xd;
410 object.Yd = Yd;
411 object.Zd = Zd;
412 object.XFirstHit = XFirstHit;
413 object.YFirstHit = YFirstHit;
414 object.ZFirstHit = ZFirstHit;
415 object.Nclusters = Nclusters;
416 object.dNdx = dNdx;
417 object.TrackResolution = TrackResolution;
418 object.NCharged = NCharged;
419 object.NNeutrals = NNeutrals;
420 object.NeutralEnergyFraction = NeutralEnergyFraction;
421 object.ChargedEnergyFraction = ChargedEnergyFraction;
422 object.Beta = Beta;
423 object.BetaStar = BetaStar;
424 object.MeanSqDeltaR = MeanSqDeltaR;
425 object.PTD = PTD;
426 object.NTimeHits = NTimeHits;
427 object.IsolationVar = IsolationVar;
428 object.IsolationVarRhoCorr = IsolationVarRhoCorr;
429 object.SumPtCharged = SumPtCharged;
430 object.SumPtNeutral = SumPtNeutral;
431 object.SumPtChargedPU = SumPtChargedPU;
432 object.SumPt = SumPt;
433 object.ClusterIndex = ClusterIndex;
434 object.ClusterNDF = ClusterNDF;
435 object.ClusterSigma = ClusterSigma;
436 object.SumPT2 = SumPT2;
437
438 object.FracPt[0] = FracPt[0];
439 object.FracPt[1] = FracPt[1];
440 object.FracPt[2] = FracPt[2];
441 object.FracPt[3] = FracPt[3];
442 object.FracPt[4] = FracPt[4];
443 object.Tau[0] = Tau[0];
444 object.Tau[1] = Tau[1];
445 object.Tau[2] = Tau[2];
446 object.Tau[3] = Tau[3];
447 object.Tau[4] = Tau[4];
448
449 object.TrimmedP4[0] = TrimmedP4[0];
450 object.TrimmedP4[1] = TrimmedP4[1];
451 object.TrimmedP4[2] = TrimmedP4[2];
452 object.TrimmedP4[3] = TrimmedP4[3];
453 object.TrimmedP4[4] = TrimmedP4[4];
454 object.PrunedP4[0] = PrunedP4[0];
455 object.PrunedP4[1] = PrunedP4[1];
456 object.PrunedP4[2] = PrunedP4[2];
457 object.PrunedP4[3] = PrunedP4[3];
458 object.PrunedP4[4] = PrunedP4[4];
459 object.SoftDroppedP4[0] = SoftDroppedP4[0];
460 object.SoftDroppedP4[1] = SoftDroppedP4[1];
461 object.SoftDroppedP4[2] = SoftDroppedP4[2];
462 object.SoftDroppedP4[3] = SoftDroppedP4[3];
463 object.SoftDroppedP4[4] = SoftDroppedP4[4];
464
465 object.NSubJetsTrimmed = NSubJetsTrimmed;
466 object.NSubJetsPruned = NSubJetsPruned;
467 object.NSubJetsSoftDropped = NSubJetsSoftDropped;
468
469 object.SoftDroppedJet = SoftDroppedJet;
470 object.SoftDroppedSubJet1 = SoftDroppedSubJet1;
471 object.SoftDroppedSubJet2 = SoftDroppedSubJet2;
472 object.TrackCovariance = TrackCovariance;
473 object.fFactory = fFactory;
474 object.fArray = 0;
475
476 // copy cluster timing info
477 copy(ECalEnergyTimePairs.begin(), ECalEnergyTimePairs.end(), back_inserter(object.ECalEnergyTimePairs));
478
479 if(fArray && fArray->GetEntriesFast() > 0)
480 {
481 TIter itArray(fArray);
482 TObjArray *array = object.GetCandidates();
483 while((candidate = static_cast<Candidate *>(itArray.Next())))
484 {
485 array->Add(candidate);
486 }
487 }
488}
489
490//------------------------------------------------------------------------------
491
492void Candidate::Clear(Option_t *option)
493{
494 int i;
495 SetUniqueID(0);
496 ResetBit(kIsReferenced);
497 PID = 0;
498 Status = 0;
499 M1 = -1;
500 M2 = -1;
501 D1 = -1;
502 D2 = -1;
503 Charge = 0;
504 Mass = 0.0;
505 IsPU = 0;
506 IsRecoPU = 0;
507 IsConstituent = 0;
508 IsFromConversion = 0;
509 Flavor = 0;
510 FlavorAlgo = 0;
511 FlavorPhys = 0;
512 BTag = 0;
513 BTagAlgo = 0;
514 BTagPhys = 0;
515 TauTag = 0;
516 TauWeight = 0.0;
517 Eem = 0.0;
518 Ehad = 0.0;
519 Etrk = 0.0;
520 Edges[0] = 0.0;
521 Edges[1] = 0.0;
522 Edges[2] = 0.0;
523 Edges[3] = 0.0;
524 DeltaEta = 0.0;
525 DeltaPhi = 0.0;
526 Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0);
527 Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
528 InitialPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);
529 Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
530 TrackCovariance.Zero();
531 L = 0.0;
532 ErrorT = 0.0;
533 D0 = 0.0;
534 ErrorD0 = 0.0;
535 DZ = 0.0;
536 ErrorDZ = 0.0;
537 P = 0.0;
538 ErrorP = 0.0;
539 C = 0.0;
540 ErrorC = 0.0;
541 PT = 0.0;
542 ErrorPT = 0.0;
543 CtgTheta = 0.0;
544 ErrorCtgTheta = 0.0;
545 Phi = 0.0;
546 ErrorPhi = 0.0;
547 Xd = 0.0;
548 Yd = 0.0;
549 Zd = 0.0;
550 XFirstHit = 0.0;
551 YFirstHit = 0.0;
552 ZFirstHit = 0.0;
553 Nclusters = 0.0;
554 dNdx = 0.0;
555 TrackResolution = 0.0;
556 NCharged = 0;
557 NNeutrals = 0;
558 Beta = 0.0;
559 BetaStar = 0.0;
560 MeanSqDeltaR = 0.0;
561 PTD = 0.0;
562
563 NTimeHits = 0;
564 ECalEnergyTimePairs.clear();
565
566 IsolationVar = -999;
567 IsolationVarRhoCorr = -999;
568 SumPtCharged = -999;
569 SumPtNeutral = -999;
570 SumPtChargedPU = -999;
571 SumPt = -999;
572
573 ClusterIndex = -1;
574 ClusterNDF = -99;
575 ClusterSigma = 0.0;
576 SumPT2 = 0.0;
577 BTVSumPT2 = 0.0;
578 GenDeltaZ = 0.0;
579 GenSumPT2 = 0.0;
580
581 FracPt[0] = 0.0;
582 FracPt[1] = 0.0;
583 FracPt[2] = 0.0;
584 FracPt[3] = 0.0;
585 FracPt[4] = 0.0;
586 Tau[0] = 0.0;
587 Tau[1] = 0.0;
588 Tau[2] = 0.0;
589 Tau[3] = 0.0;
590 Tau[4] = 0.0;
591
592 SoftDroppedJet.SetXYZT(0.0, 0.0, 0.0, 0.0);
593 SoftDroppedSubJet1.SetXYZT(0.0, 0.0, 0.0, 0.0);
594 SoftDroppedSubJet2.SetXYZT(0.0, 0.0, 0.0, 0.0);
595
596 for(i = 0; i < 5; ++i)
597 {
598 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
599 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
600 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
601 }
602
603 NSubJetsTrimmed = 0;
604 NSubJetsPruned = 0;
605 NSubJetsSoftDropped = 0;
606
607 fArray = 0;
608}
Note: See TracBrowser for help on using the repository browser.