Fork me on GitHub

source: git/classes/DelphesLongFormula.cc@ 77e9ae1

ImprovedOutputFile Timing llp
Last change on this file since 77e9ae1 was 341014c, checked in by Pavel Demin <pavel-demin@…>, 6 years ago

apply .clang-format to all .h, .cc and .cpp files

  • Property mode set to 100644
File size: 3.3 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#include "classes/DelphesLongFormula.h"
20
21#include "TString.h"
22
23#include <stdexcept>
24
25using namespace std;
26
27//------------------------------------------------------------------------------
28
29DelphesLongFormula::DelphesLongFormula() :
30 TFormula()
31{
32}
33
34//------------------------------------------------------------------------------
35
36DelphesLongFormula::DelphesLongFormula(const char *name, const char *expression) :
37 TFormula()
38{
39}
40
41//------------------------------------------------------------------------------
42
43DelphesLongFormula::~DelphesLongFormula()
44{
45}
46
47//------------------------------------------------------------------------------
48
49Int_t DelphesLongFormula::Compile(const char *expression)
50{
51 TString buffer;
52 const char *it;
53 for(it = expression; *it; ++it)
54 {
55 if(*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n' || *it == '\\') continue;
56 buffer.Append(*it);
57 }
58
59 buffer.ReplaceAll("pt", "[pt]");
60 buffer.ReplaceAll("eta", "[eta]");
61 buffer.ReplaceAll("phi", "[phi]");
62 buffer.ReplaceAll("energy", "[energy]");
63 buffer.ReplaceAll("d0", "[d0]");
64 buffer.ReplaceAll("dz", "[dz]");
65 buffer.ReplaceAll("ctgTheta", "[ctgTheta]");
66
67#if ROOT_VERSION_CODE < ROOT_VERSION(6, 0, 0)
68 TFormula::SetMaxima(100000, 1000, 1000000);
69#endif
70
71 if(TFormula::Compile(buffer) != 0)
72 {
73 throw runtime_error("Invalid Long Formula.");
74 }
75
76 return 0;
77}
78
79//------------------------------------------------------------------------------
80
81Double_t DelphesLongFormula::Eval(Double_t pt, Double_t eta, Double_t phi,
82 Double_t energy, Double_t d0, Double_t dz, Double_t ctgTheta)
83{
84
85 TVarNameMap fVarNameMap;
86 TVarValMap fVarValMap;
87
88 fVarNameMap[this->GetParNumber("pt")] = "pt";
89 fVarNameMap[this->GetParNumber("eta")] = "eta";
90 fVarNameMap[this->GetParNumber("phi")] = "phi";
91 fVarNameMap[this->GetParNumber("energy")] = "energy";
92 fVarNameMap[this->GetParNumber("d0")] = "d0";
93 fVarNameMap[this->GetParNumber("dz")] = "dz";
94 fVarNameMap[this->GetParNumber("ctgTheta")] = "ctgTheta";
95
96 fVarValMap["pt"] = pt;
97 fVarValMap["eta"] = eta;
98 fVarValMap["phi"] = phi;
99 fVarValMap["energy"] = energy;
100 fVarValMap["d0"] = d0;
101 fVarValMap["dz"] = dz;
102 fVarValMap["ctgTheta"] = ctgTheta;
103
104 Double_t vals[7];
105
106 Int_t j = 0;
107 for(Int_t i = 0; i != 7; i++)
108 {
109 if(fVarNameMap.find(i) != fVarNameMap.end())
110 {
111 TString var_name = fVarNameMap[i];
112 vals[i] = fVarValMap[var_name];
113 }
114 else
115 vals[i] = 0.;
116 }
117 return EvalPar(nullptr, vals);
118}
119
120//------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.