Fork me on GitHub

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

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

added PhotonConversions modules, and DelphesCylindrical formulae

  • Property mode set to 100644
File size: 10.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 *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, 0.0);
105 return vec;
106}
107
108//------------------------------------------------------------------------------
109
110TLorentzVector Tower::P4() const
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), IsFromConversion(0),
123 Flavor(0), FlavorAlgo(0), FlavorPhys(0),
124 BTag(0), BTagAlgo(0), BTagPhys(0),
125 TauTag(0), Eem(0.0), Ehad(0.0),
126 DeltaEta(0.0), DeltaPhi(0.0),
127 Momentum(0.0, 0.0, 0.0, 0.0),
128 Position(0.0, 0.0, 0.0, 0.0),
129 Area(0.0, 0.0, 0.0, 0.0),
130 Dxy(0), SDxy(0), Xd(0), Yd(0), Zd(0),
131 NCharged(0),
132 NNeutrals(0),
133 NSubJetsTrimmed(0),
134 NSubJetsPruned(0),
135 NSubJetsSoftDropped(0),
136 Beta(0),
137 BetaStar(0),
138 MeanSqDeltaR(0),
139 PTD(0),
140 Ntimes(-1),
141 IsolationVar(-999),
142 IsolationVarRhoCorr(-999),
143 SumPtCharged(-999),
144 SumPtNeutral(-999),
145 SumPtChargedPU(-999),
146 SumPt(-999),
147 fFactory(0),
148 fArray(0)
149{
150 int i;
151 Edges[0] = 0.0;
152 Edges[1] = 0.0;
153 Edges[2] = 0.0;
154 Edges[3] = 0.0;
155 FracPt[0] = 0.0;
156 FracPt[1] = 0.0;
157 FracPt[2] = 0.0;
158 FracPt[3] = 0.0;
159 FracPt[4] = 0.0;
160 Tau[0] = 0.0;
161 Tau[1] = 0.0;
162 Tau[2] = 0.0;
163 Tau[3] = 0.0;
164 Tau[4] = 0.0;
165 for(i = 0; i < 5; ++i)
166 {
167 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
168 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
169 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
170 }
171}
172
173//------------------------------------------------------------------------------
174
175void Candidate::AddCandidate(Candidate *object)
176{
177 if(!fArray) fArray = fFactory->NewArray();
178 fArray->Add(object);
179}
180
181//------------------------------------------------------------------------------
182
183TObjArray *Candidate::GetCandidates()
184{
185 if(!fArray) fArray = fFactory->NewArray();
186 return fArray;
187}
188
189//------------------------------------------------------------------------------
190
191Bool_t Candidate::Overlaps(const Candidate *object) const
192{
193 const Candidate *candidate;
194
195 if(object->GetUniqueID() == GetUniqueID()) return kTRUE;
196
197 if(fArray)
198 {
199 TIter it(fArray);
200 while((candidate = static_cast<Candidate *>(it.Next())))
201 {
202 if(candidate->Overlaps(object)) return kTRUE;
203 }
204 }
205
206 if(object->fArray)
207 {
208 TIter it(object->fArray);
209 while((candidate = static_cast<Candidate *>(it.Next())))
210 {
211 if(candidate->Overlaps(this)) return kTRUE;
212 }
213 }
214
215 return kFALSE;
216}
217
218
219//------------------------------------------------------------------------------
220
221TObject *Candidate::Clone(const char *newname) const
222{
223 Candidate *object = fFactory->NewCandidate();
224 Copy(*object);
225 return object;
226}
227
228//------------------------------------------------------------------------------
229
230void Candidate::Copy(TObject &obj) const
231{
232 Candidate &object = static_cast<Candidate &>(obj);
233 Candidate *candidate;
234
235 object.PID = PID;
236 object.Status = Status;
237 object.M1 = M1;
238 object.M2 = M2;
239 object.D1 = D1;
240 object.D2 = D2;
241 object.Charge = Charge;
242 object.Mass = Mass;
243 object.IsPU = IsPU;
244 object.IsConstituent = IsConstituent;
245 object.IsFromConversion = IsFromConversion;
246 object.Flavor = Flavor;
247 object.FlavorAlgo = FlavorAlgo;
248 object.FlavorPhys = FlavorPhys;
249 object.BTag = BTag;
250 object.BTagAlgo = BTagAlgo;
251 object.BTagPhys = BTagPhys;
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 int i;
337 SetUniqueID(0);
338 ResetBit(kIsReferenced);
339 PID = 0;
340 Status = 0;
341 M1 = -1; M2 = -1; D1 = -1; D2 = -1;
342 Charge = 0;
343 Mass = 0.0;
344 IsPU = 0;
345 IsConstituent = 0;
346 IsFromConversion = 0;
347 Flavor = 0;
348 FlavorAlgo = 0;
349 FlavorPhys = 0;
350 BTag = 0;
351 BTagAlgo = 0;
352 BTagPhys = 0;
353 TauTag = 0;
354 Eem = 0.0;
355 Ehad = 0.0;
356 Edges[0] = 0.0;
357 Edges[1] = 0.0;
358 Edges[2] = 0.0;
359 Edges[3] = 0.0;
360 DeltaEta = 0.0;
361 DeltaPhi = 0.0;
362 Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0);
363 Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
364 Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
365 Dxy = 0.0;
366 SDxy = 0.0;
367 Xd = 0.0;
368 Yd = 0.0;
369 Zd = 0.0;
370 NCharged = 0;
371 NNeutrals = 0;
372 Beta = 0.0;
373 BetaStar = 0.0;
374 MeanSqDeltaR = 0.0;
375 PTD = 0.0;
376
377 Ntimes = 0;
378 Ecal_E_t.clear();
379
380 IsolationVar = -999;
381 IsolationVarRhoCorr = -999;
382 SumPtCharged = -999;
383 SumPtNeutral = -999;
384 SumPtChargedPU = -999;
385 SumPt = -999;
386
387 FracPt[0] = 0.0;
388 FracPt[1] = 0.0;
389 FracPt[2] = 0.0;
390 FracPt[3] = 0.0;
391 FracPt[4] = 0.0;
392 Tau[0] = 0.0;
393 Tau[1] = 0.0;
394 Tau[2] = 0.0;
395 Tau[3] = 0.0;
396 Tau[4] = 0.0;
397
398 for(i = 0; i < 5; ++i)
399 {
400 TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
401 PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
402 SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
403 }
404
405 NSubJetsTrimmed = 0;
406 NSubJetsPruned = 0;
407 NSubJetsSoftDropped = 0;
408
409 fArray = 0;
410}
Note: See TracBrowser for help on using the repository browser.