Fork me on GitHub

source: git/modules/AngularSmearing.cc@ 1fa50c2

ImprovedOutputFile Timing dual_readout llp
Last change on this file since 1fa50c2 was 1fa50c2, checked in by Pavel Demin <pavel.demin@…>, 10 years ago

fix GPLv3 header

  • Property mode set to 100644
File size: 3.7 KB
RevLine 
[caba091]1/*
2 * Delphes: a framework for fast simulation of a generic collider experiment
3 * Copyright (C) 2012-2014 Universite catholique de Louvain (UCL), Belgium
[1fa50c2]4 *
[caba091]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.
[1fa50c2]9 *
[caba091]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.
[1fa50c2]14 *
[caba091]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
[edcf81a]19
20/** \class AngularSmearing
21 *
22 * Performs transverse angular resolution smearing.
23 *
24 * $Date: 2014-06-17 16:58:53 +0100 $
[1fa50c2]25 *
[edcf81a]26 *
27 *
28 * \author M. Selvaggi - UCL, Louvain-la-Neuve
29 *
30 */
31
32#include "modules/AngularSmearing.h"
33
34#include "classes/DelphesClasses.h"
35#include "classes/DelphesFactory.h"
36#include "classes/DelphesFormula.h"
37
38#include "ExRootAnalysis/ExRootResult.h"
39#include "ExRootAnalysis/ExRootFilter.h"
40#include "ExRootAnalysis/ExRootClassifier.h"
41
42#include "TMath.h"
43#include "TString.h"
44#include "TFormula.h"
45#include "TRandom3.h"
46#include "TObjArray.h"
47#include "TDatabasePDG.h"
48#include "TLorentzVector.h"
49
50#include <algorithm>
51#include <stdexcept>
52#include <iostream>
53#include <sstream>
54
55using namespace std;
56
57//------------------------------------------------------------------------------
58
59AngularSmearing::AngularSmearing() :
60 fFormulaEta(0), fFormulaPhi(0), fItInputArray(0)
61{
62 fFormulaEta = new DelphesFormula;
63 fFormulaPhi = new DelphesFormula;
64}
65
66//------------------------------------------------------------------------------
67
68AngularSmearing::~AngularSmearing()
69{
70 if(fFormulaEta) delete fFormulaEta;
71 if(fFormulaPhi) delete fFormulaPhi;
72}
73
74//------------------------------------------------------------------------------
75
76void AngularSmearing::Init()
77{
78 // read resolution formula
79
80 fFormulaEta->Compile(GetString("EtaResolutionFormula", "0.0"));
81 fFormulaPhi->Compile(GetString("PhiResolutionFormula", "0.0"));
82
83
84 // import input array
85
86 fInputArray = ImportArray(GetString("InputArray", "ParticlePropagator/stableParticles"));
87 fItInputArray = fInputArray->MakeIterator();
88
89 // create output array
90
91 fOutputArray = ExportArray(GetString("OutputArray", "stableParticles"));
92}
93
94//------------------------------------------------------------------------------
95
96void AngularSmearing::Finish()
97{
98 if(fItInputArray) delete fItInputArray;
99}
100
101//------------------------------------------------------------------------------
102
103void AngularSmearing::Process()
104{
105 Candidate *candidate, *mother;
106 Double_t pt, eta, phi;
107
108 fItInputArray->Reset();
109 while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
110 {
111 const TLorentzVector &candidatePosition = candidate->Position;
112 const TLorentzVector &candidateMomentum = candidate->Momentum;
113 eta = candidatePosition.Eta();
114 phi = candidatePosition.Phi();
115 pt = candidateMomentum.Pt();
116
117 // apply smearing formula for eta,phi
118
119 eta = gRandom->Gaus(eta, fFormulaEta->Eval(pt, eta));
120 phi = gRandom->Gaus(phi, fFormulaPhi->Eval(pt, eta));
121
122 if(pt <= 0.0) continue;
123
124 mother = candidate;
125 candidate = static_cast<Candidate*>(candidate->Clone());
126 eta = candidateMomentum.Eta();
127 phi = candidateMomentum.Phi();
128 candidate->Momentum.SetPtEtaPhiE(pt, eta, phi, pt*TMath::CosH(eta));
129 candidate->AddCandidate(mother);
130
131 fOutputArray->Add(candidate);
132 }
133}
134
135//------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.