Fork me on GitHub

source: git/classes/DelphesClasses.cc@ 5eda2de5

ImprovedOutputFile Timing dual_readout llp
Last change on this file since 5eda2de5 was d759c46, checked in by Michele Selvaggi <michele.selvaggi@…>, 8 years ago

fix candidate clear IsRecoPU

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