Fork me on GitHub

source: git/classes/DelphesClasses.cc@ a47edcc

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

added v0 of Ionisation cluster counting

  • Property mode set to 100644
File size: 14.7 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),
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 Nclusters(0.0),
233 TrackResolution(0),
234 NCharged(0),
235 NNeutrals(0),
236 NeutralEnergyFraction(0), // charged energy fraction
237 ChargedEnergyFraction(0), // neutral energy fraction
238 Beta(0),
239 BetaStar(0),
240 MeanSqDeltaR(0),
241 PTD(0),
242 NTimeHits(-1),
243 IsolationVar(-999),
244 IsolationVarRhoCorr(-999),
245 SumPtCharged(-999),
246 SumPtNeutral(-999),
247 SumPtChargedPU(-999),
248 SumPt(-999),
249 ClusterIndex(-1), ClusterNDF(0), ClusterSigma(0), SumPT2(0), BTVSumPT2(0), GenDeltaZ(0), GenSumPT2(0),
250 NSubJetsTrimmed(0),
251 NSubJetsPruned(0),
252 NSubJetsSoftDropped(0),
253 ExclYmerge23(0),
254 ExclYmerge34(0),
255 ExclYmerge45(0),
256 ExclYmerge56(0),
257 ParticleDensity(0),
258 fFactory(0),
259 fArray(0)
260{
261 int i;
262 Edges[0] = 0.0;
263 Edges[1] = 0.0;
264 Edges[2] = 0.0;
265 Edges[3] = 0.0;
266 FracPt[0] = 0.0;
267 FracPt[1] = 0.0;
268 FracPt[2] = 0.0;
269 FracPt[3] = 0.0;
270 FracPt[4] = 0.0;
271 Tau[0] = 0.0;
272 Tau[1] = 0.0;
273 Tau[2] = 0.0;
274 Tau[3] = 0.0;
275 Tau[4] = 0.0;
276
277 SoftDroppedJet.SetXYZT(0.0, 0.0, 0.0, 0.0);
278 SoftDroppedSubJet1.SetXYZT(0.0, 0.0, 0.0, 0.0);
279 SoftDroppedSubJet2.SetXYZT(0.0, 0.0, 0.0, 0.0);
280
281 for(i = 0; i < 5; ++i)
282 {
283 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
284 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
285 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
286 }
287}
288
289//------------------------------------------------------------------------------
290
291void Candidate::AddCandidate(Candidate *object)
292{
293 if(!fArray) fArray = fFactory->NewArray();
294 fArray->Add(object);
295}
296
297//------------------------------------------------------------------------------
298
299TObjArray *Candidate::GetCandidates()
300{
301 if(!fArray) fArray = fFactory->NewArray();
302 return fArray;
303}
304
305//------------------------------------------------------------------------------
306
307Bool_t Candidate::Overlaps(const Candidate *object) const
308{
309 const Candidate *candidate;
310
311 if(object->GetUniqueID() == GetUniqueID()) return kTRUE;
312
313 if(fArray)
314 {
315 TIter it(fArray);
316 while((candidate = static_cast<Candidate *>(it.Next())))
317 {
318 if(candidate->Overlaps(object)) return kTRUE;
319 }
320 }
321
322 if(object->fArray)
323 {
324 TIter it(object->fArray);
325 while((candidate = static_cast<Candidate *>(it.Next())))
326 {
327 if(candidate->Overlaps(this)) return kTRUE;
328 }
329 }
330
331 return kFALSE;
332}
333
334//------------------------------------------------------------------------------
335
336TObject *Candidate::Clone(const char *newname) const
337{
338 Candidate *object = fFactory->NewCandidate();
339 Copy(*object);
340 return object;
341}
342
343//------------------------------------------------------------------------------
344
345void Candidate::Copy(TObject &obj) const
346{
347 Candidate &object = static_cast<Candidate &>(obj);
348 Candidate *candidate;
349
350 object.PID = PID;
351 object.Status = Status;
352 object.M1 = M1;
353 object.M2 = M2;
354 object.D1 = D1;
355 object.D2 = D2;
356 object.Charge = Charge;
357 object.Mass = Mass;
358 object.IsPU = IsPU;
359 object.IsRecoPU = IsRecoPU;
360 object.IsConstituent = IsConstituent;
361 object.IsFromConversion = IsFromConversion;
362 object.ClusterIndex = ClusterIndex;
363 object.ClusterNDF = ClusterNDF;
364 object.ClusterSigma = ClusterSigma;
365 object.SumPT2 = SumPT2;
366 object.BTVSumPT2 = BTVSumPT2;
367 object.GenDeltaZ = GenDeltaZ;
368 object.GenSumPT2 = GenSumPT2;
369 object.Flavor = Flavor;
370 object.FlavorAlgo = FlavorAlgo;
371 object.FlavorPhys = FlavorPhys;
372 object.BTag = BTag;
373 object.BTagAlgo = BTagAlgo;
374 object.BTagPhys = BTagPhys;
375 object.TauTag = TauTag;
376 object.TauWeight = TauWeight;
377 object.Eem = Eem;
378 object.Ehad = Ehad;
379 object.Edges[0] = Edges[0];
380 object.Edges[1] = Edges[1];
381 object.Edges[2] = Edges[2];
382 object.Edges[3] = Edges[3];
383 object.DeltaEta = DeltaEta;
384 object.DeltaPhi = DeltaPhi;
385 object.Momentum = Momentum;
386 object.Position = Position;
387 object.InitialPosition = InitialPosition;
388 object.PositionError = PositionError;
389 object.Area = Area;
390 object.L = L;
391 object.ErrorT = ErrorT;
392 object.D0 = D0;
393 object.ErrorD0 = ErrorD0;
394 object.DZ = DZ;
395 object.ErrorDZ = ErrorDZ;
396 object.P = P;
397 object.ErrorP = ErrorP;
398 object.C = C;
399 object.ErrorC = ErrorC;
400 object.PT = PT;
401 object.ErrorPT = ErrorPT;
402 object.CtgTheta = CtgTheta;
403 object.ErrorCtgTheta = ErrorCtgTheta;
404 object.Phi = Phi;
405 object.ErrorPhi = ErrorPhi;
406 object.Xd = Xd;
407 object.Yd = Yd;
408 object.Zd = Zd;
409 object.Nclusters = Nclusters;
410 object.TrackResolution = TrackResolution;
411 object.NCharged = NCharged;
412 object.NNeutrals = NNeutrals;
413 object.NeutralEnergyFraction = NeutralEnergyFraction;
414 object.ChargedEnergyFraction = ChargedEnergyFraction;
415 object.Beta = Beta;
416 object.BetaStar = BetaStar;
417 object.MeanSqDeltaR = MeanSqDeltaR;
418 object.PTD = PTD;
419 object.NTimeHits = NTimeHits;
420 object.IsolationVar = IsolationVar;
421 object.IsolationVarRhoCorr = IsolationVarRhoCorr;
422 object.SumPtCharged = SumPtCharged;
423 object.SumPtNeutral = SumPtNeutral;
424 object.SumPtChargedPU = SumPtChargedPU;
425 object.SumPt = SumPt;
426 object.ClusterIndex = ClusterIndex;
427 object.ClusterNDF = ClusterNDF;
428 object.ClusterSigma = ClusterSigma;
429 object.SumPT2 = SumPT2;
430
431 object.FracPt[0] = FracPt[0];
432 object.FracPt[1] = FracPt[1];
433 object.FracPt[2] = FracPt[2];
434 object.FracPt[3] = FracPt[3];
435 object.FracPt[4] = FracPt[4];
436 object.Tau[0] = Tau[0];
437 object.Tau[1] = Tau[1];
438 object.Tau[2] = Tau[2];
439 object.Tau[3] = Tau[3];
440 object.Tau[4] = Tau[4];
441
442 object.TrimmedP4[0] = TrimmedP4[0];
443 object.TrimmedP4[1] = TrimmedP4[1];
444 object.TrimmedP4[2] = TrimmedP4[2];
445 object.TrimmedP4[3] = TrimmedP4[3];
446 object.TrimmedP4[4] = TrimmedP4[4];
447 object.PrunedP4[0] = PrunedP4[0];
448 object.PrunedP4[1] = PrunedP4[1];
449 object.PrunedP4[2] = PrunedP4[2];
450 object.PrunedP4[3] = PrunedP4[3];
451 object.PrunedP4[4] = PrunedP4[4];
452 object.SoftDroppedP4[0] = SoftDroppedP4[0];
453 object.SoftDroppedP4[1] = SoftDroppedP4[1];
454 object.SoftDroppedP4[2] = SoftDroppedP4[2];
455 object.SoftDroppedP4[3] = SoftDroppedP4[3];
456 object.SoftDroppedP4[4] = SoftDroppedP4[4];
457
458 object.NSubJetsTrimmed = NSubJetsTrimmed;
459 object.NSubJetsPruned = NSubJetsPruned;
460 object.NSubJetsSoftDropped = NSubJetsSoftDropped;
461
462 object.SoftDroppedJet = SoftDroppedJet;
463 object.SoftDroppedSubJet1 = SoftDroppedSubJet1;
464 object.SoftDroppedSubJet2 = SoftDroppedSubJet2;
465 object.TrackCovariance = TrackCovariance;
466 object.fFactory = fFactory;
467 object.fArray = 0;
468
469 // copy cluster timing info
470 copy(ECalEnergyTimePairs.begin(), ECalEnergyTimePairs.end(), back_inserter(object.ECalEnergyTimePairs));
471
472 if(fArray && fArray->GetEntriesFast() > 0)
473 {
474 TIter itArray(fArray);
475 TObjArray *array = object.GetCandidates();
476 while((candidate = static_cast<Candidate *>(itArray.Next())))
477 {
478 array->Add(candidate);
479 }
480 }
481}
482
483//------------------------------------------------------------------------------
484
485void Candidate::Clear(Option_t *option)
486{
487 int i;
488 SetUniqueID(0);
489 ResetBit(kIsReferenced);
490 PID = 0;
491 Status = 0;
492 M1 = -1;
493 M2 = -1;
494 D1 = -1;
495 D2 = -1;
496 Charge = 0;
497 Mass = 0.0;
498 IsPU = 0;
499 IsRecoPU = 0;
500 IsConstituent = 0;
501 IsFromConversion = 0;
502 Flavor = 0;
503 FlavorAlgo = 0;
504 FlavorPhys = 0;
505 BTag = 0;
506 BTagAlgo = 0;
507 BTagPhys = 0;
508 TauTag = 0;
509 TauWeight = 0.0;
510 Eem = 0.0;
511 Ehad = 0.0;
512 Edges[0] = 0.0;
513 Edges[1] = 0.0;
514 Edges[2] = 0.0;
515 Edges[3] = 0.0;
516 DeltaEta = 0.0;
517 DeltaPhi = 0.0;
518 Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0);
519 Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
520 InitialPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);
521 Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
522 TrackCovariance.Zero();
523 L = 0.0;
524 ErrorT = 0.0;
525 D0 = 0.0;
526 ErrorD0 = 0.0;
527 DZ = 0.0;
528 ErrorDZ = 0.0;
529 P = 0.0;
530 ErrorP = 0.0;
531 C = 0.0;
532 ErrorC = 0.0;
533 PT = 0.0;
534 ErrorPT = 0.0;
535 CtgTheta = 0.0;
536 ErrorCtgTheta = 0.0;
537 Phi = 0.0;
538 ErrorPhi = 0.0;
539 Xd = 0.0;
540 Yd = 0.0;
541 Zd = 0.0;
542 Nclusters = 0.0;
543 TrackResolution = 0.0;
544 NCharged = 0;
545 NNeutrals = 0;
546 Beta = 0.0;
547 BetaStar = 0.0;
548 MeanSqDeltaR = 0.0;
549 PTD = 0.0;
550
551 NTimeHits = 0;
552 ECalEnergyTimePairs.clear();
553
554 IsolationVar = -999;
555 IsolationVarRhoCorr = -999;
556 SumPtCharged = -999;
557 SumPtNeutral = -999;
558 SumPtChargedPU = -999;
559 SumPt = -999;
560
561 ClusterIndex = -1;
562 ClusterNDF = -99;
563 ClusterSigma = 0.0;
564 SumPT2 = 0.0;
565 BTVSumPT2 = 0.0;
566 GenDeltaZ = 0.0;
567 GenSumPT2 = 0.0;
568
569 FracPt[0] = 0.0;
570 FracPt[1] = 0.0;
571 FracPt[2] = 0.0;
572 FracPt[3] = 0.0;
573 FracPt[4] = 0.0;
574 Tau[0] = 0.0;
575 Tau[1] = 0.0;
576 Tau[2] = 0.0;
577 Tau[3] = 0.0;
578 Tau[4] = 0.0;
579
580 SoftDroppedJet.SetXYZT(0.0, 0.0, 0.0, 0.0);
581 SoftDroppedSubJet1.SetXYZT(0.0, 0.0, 0.0, 0.0);
582 SoftDroppedSubJet2.SetXYZT(0.0, 0.0, 0.0, 0.0);
583
584 for(i = 0; i < 5; ++i)
585 {
586 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
587 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
588 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
589 }
590
591 NSubJetsTrimmed = 0;
592 NSubJetsPruned = 0;
593 NSubJetsSoftDropped = 0;
594
595 fArray = 0;
596}
Note: See TracBrowser for help on using the repository browser.