HighLAND
Public Member Functions | List of all members
UnitsParser Class Reference

#include <UnitsParser.hxx>

Public Member Functions

 UnitsParser ()
 
std::string Convert2DoubleWithUnit (std::string line)
 
void PrintListOfUnits ()
 Prints all the defined units.
 

Detailed Description

This class provides a method for converting a string like "1.5 cm" into a double with the appropriate unit. To do so it defines a set of units, using the same base units as in oaEvent/src/HEPUnits.hxx: ie mm, ns, MeV... Only a fairly limited set of units is defined.

Definition at line 15 of file UnitsParser.hxx.

Constructor & Destructor Documentation

§ UnitsParser()

UnitsParser::UnitsParser ( )

Constructor that creates the list of units. Try not to call this too often.

Definition at line 8 of file UnitsParser.cxx.

8  {
9 
10  // Define units. Add to this list as needed.
11 
12  // Length
13  units["km"] = units::km;
14  units["m"] = units::m;
15  units["cm"] = units::cm;
16  units["mm"] = units::mm;
17  units["um"] = units::micrometer;
18  units["nm"] = units::nanometer;
19  units["Ang"] = units::angstrom;
20 
21  // Area
22  units["km2"] = units::km2;
23  units["m2"] = units::m2;
24  units["cm2"] = units::cm2;
25  units["mm2"] = units::mm2;
26  units["barn"] = units::barn;
27  units["mbarn"] = units::millibarn;
28  units["mubarn"] = units::microbarn;
29  units["nbarn"] = units::nanobarn;
30  units["pbarn"] = units::picobarn;
31 
32  // Volume
33  units["km3"] = units::km3;
34  units["m3"] = units::m3;
35  units["cm3"] = units::cm3;
36  units["mm3"] = units::mm3;
37 
38  // Degree
39  units["rad"] = units::radian;
40  units["mrad"] = units::milliradian;
41  units["sr"] = units::steradian;
42  units["deg"] = units::degree;
43 
44  // Time
45  units["s"] = units::second;
46  units["ms"] = units::millisecond;
47  units["mus"] = units::microsecond;
48  units["ns"] = units::nanosecond;
49  units["ps"] = units::picosecond;
50 
51  // Frequency
52  units["Hz"] = units::hertz;
53  units["kHz"] = units::kilohertz;
54  units["MHz"] = units::megahertz;
55 
56  // Electric Charge
57  units["e+"] = units::eplus;
58  units["C"] = units::coulomb;
59 
60  // Energy
61  units["eV"] = units::eV;
62  units["keV"] = units::keV;
63  units["MeV"] = units::MeV;
64  units["GeV"] = units::GeV;
65  units["TeV"] = units::TeV;
66  units["PeV"] = units::PeV;
67  units["J"] = units::joule;
68 
69  // Energy/Length
70  units["GeV/cm"] = units::GeV / units::cm;
71  units["MeV/cm"] = units::MeV / units::cm;
72  units["keV/cm"] = units::keV / units::cm;
73  units["eV/cm"] = units::eV / units::cm;
74 
75  // Inverse energy
76  units["1/eV"] = 1.0 / units["eV"];
77  units["1/keV"] = 1.0 / units["keV"];
78  units["1/MeV"] = 1.0 / units["MeV"];
79  units["1/GeV"] = 1.0 / units["GeV"];
80 
81  // Mass
82  units["mg"] = units::milligram;
83  units["g"] = units::gram;
84  units["kg"] = units::kilogram;
85 
86  // Volumic Mass
87  units["g/cm3"] = units::gram / units::cm3;
88  units["mg/cm3"] = units::milligram / units::cm3;
89  units["kg/m3"] = units::kilogram / units::cm3;
90 
91  // Mass/Surface
92  units["g/cm2"] = units::gram / units::cm2;
93  units["mg/cm2"] = units::milligram / units::cm2;
94  units["kg/cm2"] = units::kilogram / units::cm2;
95 
96  // Surface/Mass
97  units["cm2/g"] = units::cm2 / units::gram;
98 
99  // Energy*Surface/Mass
100  units["eV*cm2/g"] = units::eV * units::cm2 / units::gram;
101  units["keV*cm2/g"] = units::keV * units::cm2 / units::gram;
102  units["MeV*cm2/g"] = units::MeV * units::cm2 / units::gram;
103  units["GeV*cm2/g"] = units::GeV * units::cm2 / units::gram;
104 
105  // Power
106  units["W"] = units::watt;
107 
108  // Force
109  units["N"] = units::newton;
110 
111  // Pressure
112  units["Pa"] = units::pascal;
113  units["bar"] = units::bar;
114  units["atm"] = units::atmosphere;
115 
116  // Electric current
117  units["A"] = units::ampere;
118  units["mA"] = units::milliampere;
119  units["muA"] = units::microampere;
120  units["nA"] = units::nanoampere;
121 
122  // Electric potential
123  units["V"] = units::volt;
124  units["kV"] = units::kilovolt;
125  units["MV"] = units::megavolt;
126 
127  // Magnetic flux
128  units["Wb"] = units::weber;
129 
130  // Magnetic flux density
131  units["T"] = units::tesla;
132  units["kG"] = units::kilogauss;
133  units["G"] = units::gauss;
134 
135  // Speed
136  units["cm/us"] = units["cm"] / units["mus"];
137  units["cm/ns"] = units["cm"] / units["ns"];
138  units["mm/ns"] = units["mm"] / units["ns"];
139 
140  // Length/Energy
141  units["mm/MeV"] = units["mm"] / units["MeV"];
142  units["mm/keV"] = units["mm"] / units["keV"];
143  units["cm/MeV"] = units["cm"] / units["MeV"];
144  units["cm/keV"] = units["cm"] / units["keV"];
145 
146  // Dummy units for diffusion coefficient
147  units["cm/sqrt(cm)"] = units["cm"] / sqrt(units["cm"]);
148  units["mm/sqrt(cm)"] = units["mm"] / sqrt(units["cm"]);
149  units["um/sqrt(cm)"] = units["um"] / sqrt(units["cm"]);
150 
151  // Dummy units for electron mobility
152  units["cm2/(Vs)"] = units["cm2"] / (units["V"] * units["s"]);
153 }

Member Function Documentation

§ Convert2DoubleWithUnit()

std::string UnitsParser::Convert2DoubleWithUnit ( std::string  line)

Converts a string like "1.5 cm" into a double with the appropriate units.

Definition at line 159 of file UnitsParser.cxx.

159  {
160 
161  double value;
162  std::string unit;
163 
164  std::istringstream line(input);
165  if (!(line >> value >> unit)) {
166  std::cerr << "ND::UnitsParser: badly formatted input string. Returning 0." << std::endl;
167  return "0.0";
168  }
169 
170  // Check if requested unit is in map.
171  if (units.find(unit) == units.end()) {
172  std::cerr << "ND::UnitsParser: requested unit '" << unit << "' not found. Returning 0." << std::endl;
173  return "0.0";
174  }
175 
176  value = value * units[unit];
177 
178  char s[256];
179  sprintf(s, "%f", value);
180 
181  return s;
182 
183 }

The documentation for this class was generated from the following files: