Fork me on GitHub

source: git/classes/DelphesClasses.cc@ 58cfe91

ImprovedOutputFile Timing dual_readout llp
Last change on this file since 58cfe91 was 5a69ba1d, checked in by Ulrike Schnoor <schnooru@…>, 7 years ago

Merge branch 'master' of github.com:delphes/delphes

  • Property mode set to 100644
File size: 12.1 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 *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
120Candidate::Candidate() :
121 PID(0), Status(0), M1(-1), M2(-1), D1(-1), D2(-1),
122 Charge(0), Mass(0.0),
123 IsPU(0), IsRecoPU(0), IsConstituent(0), IsFromConversion(0),
124 ClusterIndex(-1), ClusterNDF(0), ClusterSigma(0), SumPT2(0), BTVSumPT2(0), GenDeltaZ(0), GenSumPT2(0),
125 Flavor(0), FlavorAlgo(0), FlavorPhys(0),
126 BTag(0), BTagAlgo(0), BTagPhys(0),
127 TauTag(0), Eem(0.0), Ehad(0.0),
128 DeltaEta(0.0), DeltaPhi(0.0),
129 Momentum(0.0, 0.0, 0.0, 0.0),
130 Position(0.0, 0.0, 0.0, 0.0),
131 PositionError(0.0, 0.0, 0.0, 0.0),
132 InitialPosition(0.0, 0.0, 0.0, 0.0),
133 Area(0.0, 0.0, 0.0, 0.0),
134 L(0),
135 D0(0), ErrorD0(0),
136 DZ(0), ErrorDZ(0),
137 P(0), ErrorP(0),
138 PT(0), ErrorPT(0),
139 CtgTheta(0), ErrorCtgTheta(0),
140 Phi(0), ErrorPhi(0),
141 Xd(0), Yd(0), Zd(0),
142 TrackResolution(0),
143 NCharged(0),
144 NNeutrals(0),
145 Beta(0),
146 BetaStar(0),
147 MeanSqDeltaR(0),
148 PTD(0),
149 NTimeHits(-1),
150 IsolationVar(-999),
151 IsolationVarRhoCorr(-999),
152 SumPtCharged(-999),
153 SumPtNeutral(-999),
154 SumPtChargedPU(-999),
155 SumPt(-999),
156 NSubJetsTrimmed(0),
157 NSubJetsPruned(0),
158 NSubJetsSoftDropped(0),
159 ExclYmerge23(0),
160 ExclYmerge34(0),
161 ExclYmerge45(0),
162 ExclYmerge56(0),
163 fFactory(0),
164 fArray(0)
165{
166 int i;
167 Edges[0] = 0.0;
168 Edges[1] = 0.0;
169 Edges[2] = 0.0;
170 Edges[3] = 0.0;
171 FracPt[0] = 0.0;
172 FracPt[1] = 0.0;
173 FracPt[2] = 0.0;
174 FracPt[3] = 0.0;
175 FracPt[4] = 0.0;
176 Tau[0] = 0.0;
177 Tau[1] = 0.0;
178 Tau[2] = 0.0;
179 Tau[3] = 0.0;
180 Tau[4] = 0.0;
181
182 SoftDroppedJet.SetXYZT(0.0, 0.0, 0.0, 0.0);
183 SoftDroppedSubJet1.SetXYZT(0.0, 0.0, 0.0, 0.0);
184 SoftDroppedSubJet2.SetXYZT(0.0, 0.0, 0.0, 0.0);
185
186 for(i = 0; i < 5; ++i)
187 {
188 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
189 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
190 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
191 }
192}
193
194//------------------------------------------------------------------------------
195
196void Candidate::AddCandidate(Candidate *object)
197{
198 if(!fArray) fArray = fFactory->NewArray();
199 fArray->Add(object);
200}
201
202//------------------------------------------------------------------------------
203
204TObjArray *Candidate::GetCandidates()
205{
206 if(!fArray) fArray = fFactory->NewArray();
207 return fArray;
208}
209
210//------------------------------------------------------------------------------
211
212Bool_t Candidate::Overlaps(const Candidate *object) const
213{
214 const Candidate *candidate;
215
216 if(object->GetUniqueID() == GetUniqueID()) return kTRUE;
217
218 if(fArray)
219 {
220 TIter it(fArray);
221 while((candidate = static_cast<Candidate *>(it.Next())))
222 {
223 if(candidate->Overlaps(object)) return kTRUE;
224 }
225 }
226
227 if(object->fArray)
228 {
229 TIter it(object->fArray);
230 while((candidate = static_cast<Candidate *>(it.Next())))
231 {
232 if(candidate->Overlaps(this)) return kTRUE;
233 }
234 }
235
236 return kFALSE;
237}
238
239
240//------------------------------------------------------------------------------
241
242TObject *Candidate::Clone(const char *newname) const
243{
244 Candidate *object = fFactory->NewCandidate();
245 Copy(*object);
246 return object;
247}
248
249//------------------------------------------------------------------------------
250
251void Candidate::Copy(TObject &obj) const
252{
253 Candidate &object = static_cast<Candidate &>(obj);
254 Candidate *candidate;
255
256 object.PID = PID;
257 object.Status = Status;
258 object.M1 = M1;
259 object.M2 = M2;
260 object.D1 = D1;
261 object.D2 = D2;
262 object.Charge = Charge;
263 object.Mass = Mass;
264 object.IsPU = IsPU;
265 object.IsRecoPU = IsRecoPU;
266 object.IsConstituent = IsConstituent;
267 object.IsFromConversion = IsFromConversion;
268 object.ClusterIndex = ClusterIndex;
269 object.ClusterNDF = ClusterNDF;
270 object.ClusterSigma = ClusterSigma;
271 object.SumPT2 = SumPT2;
272 object.BTVSumPT2 = BTVSumPT2;
273 object.GenDeltaZ = GenDeltaZ;
274 object.GenSumPT2 = GenSumPT2;
275 object.Flavor = Flavor;
276 object.FlavorAlgo = FlavorAlgo;
277 object.FlavorPhys = FlavorPhys;
278 object.BTag = BTag;
279 object.BTagAlgo = BTagAlgo;
280 object.BTagPhys = BTagPhys;
281 object.TauTag = TauTag;
282 object.Eem = Eem;
283 object.Ehad = Ehad;
284 object.Edges[0] = Edges[0];
285 object.Edges[1] = Edges[1];
286 object.Edges[2] = Edges[2];
287 object.Edges[3] = Edges[3];
288 object.DeltaEta = DeltaEta;
289 object.DeltaPhi = DeltaPhi;
290 object.Momentum = Momentum;
291 object.Position = Position;
292 object.InitialPosition = InitialPosition;
293 object.PositionError = PositionError;
294 object.Area = Area;
295 object.L = L;
296 object.ErrorT = ErrorT;
297 object.D0 = D0;
298 object.ErrorD0 = ErrorD0;
299 object.DZ = DZ;
300 object.ErrorDZ = ErrorDZ;
301 object.P = P;
302 object.ErrorP = ErrorP;
303 object.PT = PT;
304 object.ErrorPT = ErrorPT;
305 object.CtgTheta = CtgTheta ;
306 object.ErrorCtgTheta = ErrorCtgTheta;
307 object.Phi = Phi;
308 object.ErrorPhi = ErrorPhi;
309 object.Xd = Xd;
310 object.Yd = Yd;
311 object.Zd = Zd;
312 object.TrackResolution = TrackResolution;
313 object.NCharged = NCharged;
314 object.NNeutrals = NNeutrals;
315 object.Beta = Beta;
316 object.BetaStar = BetaStar;
317 object.MeanSqDeltaR = MeanSqDeltaR;
318 object.PTD = PTD;
319 object.NTimeHits = NTimeHits;
320 object.IsolationVar = IsolationVar;
321 object.IsolationVarRhoCorr = IsolationVarRhoCorr;
322 object.SumPtCharged = SumPtCharged;
323 object.SumPtNeutral = SumPtNeutral;
324 object.SumPtChargedPU = SumPtChargedPU;
325 object.SumPt = SumPt;
326 object.ClusterIndex = ClusterIndex;
327 object.ClusterNDF = ClusterNDF;
328 object.ClusterSigma = ClusterSigma;
329 object.SumPT2 = SumPT2;
330
331 object.FracPt[0] = FracPt[0];
332 object.FracPt[1] = FracPt[1];
333 object.FracPt[2] = FracPt[2];
334 object.FracPt[3] = FracPt[3];
335 object.FracPt[4] = FracPt[4];
336 object.Tau[0] = Tau[0];
337 object.Tau[1] = Tau[1];
338 object.Tau[2] = Tau[2];
339 object.Tau[3] = Tau[3];
340 object.Tau[4] = Tau[4];
341
342 object.TrimmedP4[0] = TrimmedP4[0];
343 object.TrimmedP4[1] = TrimmedP4[1];
344 object.TrimmedP4[2] = TrimmedP4[2];
345 object.TrimmedP4[3] = TrimmedP4[3];
346 object.TrimmedP4[4] = TrimmedP4[4];
347 object.PrunedP4[0] = PrunedP4[0];
348 object.PrunedP4[1] = PrunedP4[1];
349 object.PrunedP4[2] = PrunedP4[2];
350 object.PrunedP4[3] = PrunedP4[3];
351 object.PrunedP4[4] = PrunedP4[4];
352 object.SoftDroppedP4[0] = SoftDroppedP4[0];
353 object.SoftDroppedP4[1] = SoftDroppedP4[1];
354 object.SoftDroppedP4[2] = SoftDroppedP4[2];
355 object.SoftDroppedP4[3] = SoftDroppedP4[3];
356 object.SoftDroppedP4[4] = SoftDroppedP4[4];
357
358 object.NSubJetsTrimmed = NSubJetsTrimmed;
359 object.NSubJetsPruned = NSubJetsPruned;
360 object.NSubJetsSoftDropped = NSubJetsSoftDropped;
361
362 object.SoftDroppedJet =SoftDroppedJet;
363 object.SoftDroppedSubJet1 = SoftDroppedSubJet1;
364 object.SoftDroppedSubJet2 = SoftDroppedSubJet2;
365
366 object.fFactory = fFactory;
367 object.fArray = 0;
368
369 // copy cluster timing info
370 copy(ECalEnergyTimePairs.begin(), ECalEnergyTimePairs.end(), back_inserter(object.ECalEnergyTimePairs));
371
372 if(fArray && fArray->GetEntriesFast() > 0)
373 {
374 TIter itArray(fArray);
375 TObjArray *array = object.GetCandidates();
376 while((candidate = static_cast<Candidate *>(itArray.Next())))
377 {
378 array->Add(candidate);
379 }
380 }
381}
382
383//------------------------------------------------------------------------------
384
385void Candidate::Clear(Option_t* option)
386{
387 int i;
388 SetUniqueID(0);
389 ResetBit(kIsReferenced);
390 PID = 0;
391 Status = 0;
392 M1 = -1; M2 = -1; D1 = -1; D2 = -1;
393 Charge = 0;
394 Mass = 0.0;
395 IsPU = 0;
396 IsRecoPU = 0;
397 IsConstituent = 0;
398 IsFromConversion = 0;
399 Flavor = 0;
400 FlavorAlgo = 0;
401 FlavorPhys = 0;
402 BTag = 0;
403 BTagAlgo = 0;
404 BTagPhys = 0;
405 TauTag = 0;
406 Eem = 0.0;
407 Ehad = 0.0;
408 Edges[0] = 0.0;
409 Edges[1] = 0.0;
410 Edges[2] = 0.0;
411 Edges[3] = 0.0;
412 DeltaEta = 0.0;
413 DeltaPhi = 0.0;
414 Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0);
415 Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
416 InitialPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);
417 Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
418 L = 0.0;
419 ErrorT = 0.0;
420 D0 = 0.0;
421 ErrorD0 = 0.0;
422 DZ = 0.0;
423 ErrorDZ = 0.0;
424 P =0.0;
425 ErrorP =0.0;
426 PT = 0.0;
427 ErrorPT = 0.0;
428 CtgTheta = 0.0;
429 ErrorCtgTheta = 0.0;
430 Phi = 0.0;
431 ErrorPhi = 0.0;
432 Xd = 0.0;
433 Yd = 0.0;
434 Zd = 0.0;
435 TrackResolution = 0.0;
436 NCharged = 0;
437 NNeutrals = 0;
438 Beta = 0.0;
439 BetaStar = 0.0;
440 MeanSqDeltaR = 0.0;
441 PTD = 0.0;
442
443 NTimeHits = 0;
444 ECalEnergyTimePairs.clear();
445
446 IsolationVar = -999;
447 IsolationVarRhoCorr = -999;
448 SumPtCharged = -999;
449 SumPtNeutral = -999;
450 SumPtChargedPU = -999;
451 SumPt = -999;
452
453 ClusterIndex = -1;
454 ClusterNDF = -99;
455 ClusterSigma = 0.0;
456 SumPT2 = 0.0;
457 BTVSumPT2 = 0.0;
458 GenDeltaZ = 0.0;
459 GenSumPT2 = 0.0;
460
461 FracPt[0] = 0.0;
462 FracPt[1] = 0.0;
463 FracPt[2] = 0.0;
464 FracPt[3] = 0.0;
465 FracPt[4] = 0.0;
466 Tau[0] = 0.0;
467 Tau[1] = 0.0;
468 Tau[2] = 0.0;
469 Tau[3] = 0.0;
470 Tau[4] = 0.0;
471
472 SoftDroppedJet.SetXYZT(0.0, 0.0, 0.0, 0.0);
473 SoftDroppedSubJet1.SetXYZT(0.0, 0.0, 0.0, 0.0);
474 SoftDroppedSubJet2.SetXYZT(0.0, 0.0, 0.0, 0.0);
475
476
477 for(i = 0; i < 5; ++i)
478 {
479 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
480 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
481 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
482 }
483
484 NSubJetsTrimmed = 0;
485 NSubJetsPruned = 0;
486 NSubJetsSoftDropped = 0;
487
488 fArray = 0;
489}
Note: See TracBrowser for help on using the repository browser.