Fork me on GitHub

source: git/classes/DelphesClasses.cc@ de6d698

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

added Trimming, Pruning and SoftDrop in FastJetFinder

  • Property mode set to 100644
File size: 9.8 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 *Candidate::fgCompare = CompMomentumPt<Candidate>::Instance();
44
45//------------------------------------------------------------------------------
46
47TLorentzVector GenParticle::P4()
48{
49 TLorentzVector vec;
50 vec.SetPxPyPzE(Px, Py, Pz, E);
51 return vec;
52}
53
54//------------------------------------------------------------------------------
55
56TLorentzVector MissingET::P4()
57{
58 TLorentzVector vec;
59 vec.SetPtEtaPhiM(MET, Eta, Phi, 0.0);
60 return vec;
61}
62
63//------------------------------------------------------------------------------
64
65TLorentzVector Photon::P4()
66{
67 TLorentzVector vec;
68 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
69 return vec;
70}
71
72//------------------------------------------------------------------------------
73
74TLorentzVector Electron::P4()
75{
76 TLorentzVector vec;
77 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
78 return vec;
79}
80
81//------------------------------------------------------------------------------
82
83TLorentzVector Muon::P4()
84{
85 TLorentzVector vec;
86 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
87 return vec;
88}
89
90//------------------------------------------------------------------------------
91
92TLorentzVector Jet::P4()
93{
94 TLorentzVector vec;
95 vec.SetPtEtaPhiM(PT, Eta, Phi, Mass);
96 return vec;
97}
98
99//------------------------------------------------------------------------------
100
101TLorentzVector Track::P4()
102{
103 TLorentzVector vec;
104 vec.SetPtEtaPhiM(PT, Eta, Phi, 0.0);
105 return vec;
106}
107
108//------------------------------------------------------------------------------
109
110TLorentzVector Tower::P4()
111{
112 TLorentzVector vec;
113 vec.SetPtEtaPhiM(ET, Eta, Phi, 0.0);
114 return vec;
115}
116
117//------------------------------------------------------------------------------
118
119Candidate::Candidate() :
120 PID(0), Status(0), M1(-1), M2(-1), D1(-1), D2(-1),
121 Charge(0), Mass(0.0),
122 IsPU(0), IsRecoPU(0), IsConstituent(0),
123 BTag(0), TauTag(0), Eem(0.0), Ehad(0.0),
124 DeltaEta(0.0), DeltaPhi(0.0),
125 Momentum(0.0, 0.0, 0.0, 0.0),
126 Position(0.0, 0.0, 0.0, 0.0),
127 Area(0.0, 0.0, 0.0, 0.0),
128 Dxy(0), SDxy(0), Xd(0), Yd(0), Zd(0),
129 NCharged(0),
130 NNeutrals(0),
131 NSubJetsTrimmed(0),
132 NSubJetsPruned(0),
133 NSubJetsSoftDropped(0),
134 Beta(0),
135 BetaStar(0),
136 MeanSqDeltaR(0),
137 PTD(0),
138 Ntimes(-1),
139 IsolationVar(-999),
140 IsolationVarRhoCorr(-999),
141 SumPtCharged(-999),
142 SumPtNeutral(-999),
143 SumPtChargedPU(-999),
144 SumPt(-999),
145 fFactory(0),
146 fArray(0)
147{
148 Edges[0] = 0.0;
149 Edges[1] = 0.0;
150 Edges[2] = 0.0;
151 Edges[3] = 0.0;
152 FracPt[0] = 0.0;
153 FracPt[1] = 0.0;
154 FracPt[2] = 0.0;
155 FracPt[3] = 0.0;
156 FracPt[4] = 0.0;
157 Tau[0] = 0.0;
158 Tau[1] = 0.0;
159 Tau[2] = 0.0;
160 Tau[3] = 0.0;
161 Tau[4] = 0.0;
162 TrimmedP4[0] = 0.0;
163 TrimmedP4[1] = 0.0;
164 TrimmedP4[2] = 0.0;
165 TrimmedP4[3] = 0.0;
166 TrimmedP4[4] = 0.0;
167 PrunedP4[0] = 0.0;
168 PrunedP4[1] = 0.0;
169 PrunedP4[2] = 0.0;
170 PrunedP4[3] = 0.0;
171 PrunedP4[4] = 0.0;
172 SoftDroppedP4[0] = 0.0;
173 SoftDroppedP4[1] = 0.0;
174 SoftDroppedP4[2] = 0.0;
175 SoftDroppedP4[3] = 0.0;
176 SoftDroppedP4[4] = 0.0;
177}
178
179//------------------------------------------------------------------------------
180
181void Candidate::AddCandidate(Candidate *object)
182{
183 if(!fArray) fArray = fFactory->NewArray();
184 fArray->Add(object);
185}
186
187//------------------------------------------------------------------------------
188
189TObjArray *Candidate::GetCandidates()
190{
191 if(!fArray) fArray = fFactory->NewArray();
192 return fArray;
193}
194
195//------------------------------------------------------------------------------
196
197Bool_t Candidate::Overlaps(const Candidate *object) const
198{
199 const Candidate *candidate;
200
201 if(object->GetUniqueID() == GetUniqueID()) return kTRUE;
202
203 if(fArray)
204 {
205 TIter it(fArray);
206 while((candidate = static_cast<Candidate *>(it.Next())))
207 {
208 if(candidate->Overlaps(object)) return kTRUE;
209 }
210 }
211
212 if(object->fArray)
213 {
214 TIter it(object->fArray);
215 while((candidate = static_cast<Candidate *>(it.Next())))
216 {
217 if(candidate->Overlaps(this)) return kTRUE;
218 }
219 }
220
221 return kFALSE;
222}
223
224
225//------------------------------------------------------------------------------
226
227TObject *Candidate::Clone(const char *newname) const
228{
229 Candidate *object = fFactory->NewCandidate();
230 Copy(*object);
231 return object;
232}
233
234//------------------------------------------------------------------------------
235
236void Candidate::Copy(TObject &obj) const
237{
238 Candidate &object = static_cast<Candidate &>(obj);
239 Candidate *candidate;
240
241 object.PID = PID;
242 object.Status = Status;
243 object.M1 = M1;
244 object.M2 = M2;
245 object.D1 = D1;
246 object.D2 = D2;
247 object.Charge = Charge;
248 object.Mass = Mass;
249 object.IsPU = IsPU;
250 object.IsConstituent = IsConstituent;
251 object.BTag = BTag;
252 object.TauTag = TauTag;
253 object.Eem = Eem;
254 object.Ehad = Ehad;
255 object.Edges[0] = Edges[0];
256 object.Edges[1] = Edges[1];
257 object.Edges[2] = Edges[2];
258 object.Edges[3] = Edges[3];
259 object.DeltaEta = DeltaEta;
260 object.DeltaPhi = DeltaPhi;
261 object.Momentum = Momentum;
262 object.Position = Position;
263 object.Area = Area;
264 object.Dxy = Dxy;
265 object.SDxy = SDxy;
266 object.Xd = Xd;
267 object.Yd = Yd;
268 object.Zd = Zd;
269
270 object.NCharged = NCharged;
271 object.NNeutrals = NNeutrals;
272 object.Beta = Beta;
273 object.BetaStar = BetaStar;
274 object.MeanSqDeltaR = MeanSqDeltaR;
275 object.PTD = PTD;
276 object.Ntimes = Ntimes;
277 object.IsolationVar = IsolationVar;
278 object.IsolationVarRhoCorr = IsolationVarRhoCorr;
279 object.SumPtCharged = SumPtCharged;
280 object.SumPtNeutral = SumPtNeutral;
281 object.SumPtChargedPU = SumPtChargedPU;
282 object.SumPt = SumPt;
283
284 object.FracPt[0] = FracPt[0];
285 object.FracPt[1] = FracPt[1];
286 object.FracPt[2] = FracPt[2];
287 object.FracPt[3] = FracPt[3];
288 object.FracPt[4] = FracPt[4];
289 object.Tau[0] = Tau[0];
290 object.Tau[1] = Tau[1];
291 object.Tau[2] = Tau[2];
292 object.Tau[3] = Tau[3];
293 object.Tau[4] = Tau[4];
294
295 object.TrimmedP4[0] = TrimmedP4[0];
296 object.TrimmedP4[1] = TrimmedP4[1];
297 object.TrimmedP4[2] = TrimmedP4[2];
298 object.TrimmedP4[3] = TrimmedP4[3];
299 object.TrimmedP4[4] = TrimmedP4[4];
300 object.PrunedP4[0] = PrunedP4[0];
301 object.PrunedP4[1] = PrunedP4[1];
302 object.PrunedP4[2] = PrunedP4[2];
303 object.PrunedP4[3] = PrunedP4[3];
304 object.PrunedP4[4] = PrunedP4[4];
305 object.SoftDroppedP4[0] = SoftDroppedP4[0];
306 object.SoftDroppedP4[1] = SoftDroppedP4[1];
307 object.SoftDroppedP4[2] = SoftDroppedP4[2];
308 object.SoftDroppedP4[3] = SoftDroppedP4[3];
309 object.SoftDroppedP4[4] = SoftDroppedP4[4];
310
311 object.NSubJetsTrimmed = NSubJetsTrimmed;
312 object.NSubJetsPruned = NSubJetsPruned;
313 object.NSubJetsSoftDropped = NSubJetsSoftDropped;
314
315 object.fFactory = fFactory;
316 object.fArray = 0;
317
318 // Copy cluster timing info
319 copy(Ecal_E_t.begin(),Ecal_E_t.end(),back_inserter(object.Ecal_E_t));
320
321 if(fArray && fArray->GetEntriesFast() > 0)
322 {
323 TIter itArray(fArray);
324 TObjArray *array = object.GetCandidates();
325 while((candidate = static_cast<Candidate *>(itArray.Next())))
326 {
327 array->Add(candidate);
328 }
329 }
330}
331
332//------------------------------------------------------------------------------
333
334void Candidate::Clear(Option_t* option)
335{
336 SetUniqueID(0);
337 ResetBit(kIsReferenced);
338 PID = 0;
339 Status = 0;
340 M1 = -1; M2 = -1; D1 = -1; D2 = -1;
341 Charge = 0;
342 Mass = 0.0;
343 IsPU = 0;
344 IsConstituent = 0;
345 BTag = 0;
346 TauTag = 0;
347 Eem = 0.0;
348 Ehad = 0.0;
349 Edges[0] = 0.0;
350 Edges[1] = 0.0;
351 Edges[2] = 0.0;
352 Edges[3] = 0.0;
353 DeltaEta = 0.0;
354 DeltaPhi = 0.0;
355 Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0);
356 Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
357 Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
358 Dxy = 0.0;
359 SDxy = 0.0;
360 Xd = 0.0;
361 Yd = 0.0;
362 Zd = 0.0;
363 NCharged = 0;
364 NNeutrals = 0;
365 Beta = 0.0;
366 BetaStar = 0.0;
367 MeanSqDeltaR = 0.0;
368 PTD = 0.0;
369
370 Ntimes = 0;
371 Ecal_E_t.clear();
372
373 IsolationVar = -999;
374 IsolationVarRhoCorr = -999;
375 SumPtCharged = -999;
376 SumPtNeutral = -999;
377 SumPtChargedPU = -999;
378 SumPt = -999;
379
380 FracPt[0] = 0.0;
381 FracPt[1] = 0.0;
382 FracPt[2] = 0.0;
383 FracPt[3] = 0.0;
384 FracPt[4] = 0.0;
385 Tau[0] = 0.0;
386 Tau[1] = 0.0;
387 Tau[2] = 0.0;
388 Tau[3] = 0.0;
389 Tau[4] = 0.0;
390
391 TrimmedP4[0]= 0.0;
392 TrimmedP4[1]= 0.0;
393 TrimmedP4[2]= 0.0;
394 TrimmedP4[3]= 0.0;
395 TrimmedP4[4]= 0.0;
396 PrunedP4[0]= 0.0;
397 PrunedP4[1]= 0.0;
398 PrunedP4[2]= 0.0;
399 PrunedP4[3]= 0.0;
400 PrunedP4[4]= 0.0;
401 SoftDroppedP4[0]= 0.0;
402 SoftDroppedP4[1]= 0.0;
403 SoftDroppedP4[2]= 0.0;
404 SoftDroppedP4[3]= 0.0;
405 SoftDroppedP4[4]= 0.0;
406 NSubJetsTrimmed = 0;
407 NSubJetsPruned = 0;
408 NSubJetsSoftDropped = 0;
409
410 fArray = 0;
411}
Note: See TracBrowser for help on using the repository browser.