Fork me on GitHub

source: git/classes/DelphesClasses.cc@ 9c980d2

ImprovedOutputFile Timing dual_readout llp
Last change on this file since 9c980d2 was ba75867, checked in by Michele Selvaggi <michele.selvaggi@…>, 7 years ago

add SoftDropped jets for python analysis

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