Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TGeant4SystemOfUnits.h
Go to the documentation of this file.
1 /*************************************************************************
2  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
3  * All rights reserved. *
4  * *
5  * For the licensing terms see $ROOTSYS/LICENSE. *
6  * For the list of contributors see $ROOTSYS/README/CREDITS. *
7  *************************************************************************/
8 
9 // ----------------------------------------------------------------------
10 // HEP coherent system of Units
11 //
12 // This file has been provided to CLHEP by Geant4 (simulation toolkit for HEP).
13 // Adapted to TGeo units base by Marko Petric
14 //
15 // The basic units are :
16 // millimeter (millimeter)
17 // nanosecond (nanosecond)
18 // Mega electron Volt (MeV)
19 // positron charge (eplus)
20 // degree Kelvin (kelvin)
21 // the amount of substance (mole)
22 // luminous intensity (candela)
23 // radian (radian)
24 // steradian (steradian)
25 //
26 // Below is a non exhaustive list of derived and pratical units
27 // (i.e. mostly the SI units).
28 // You can add your own units.
29 //
30 // The SI numerical value of the positron charge is defined here,
31 // as it is needed for conversion factor : positron charge = e_SI (coulomb)
32 //
33 // The others physical constants are defined in the header file :
34 // PhysicalConstants.h
35 //
36 // Authors: M.Maire, S.Giani
37 //
38 // History:
39 //
40 // 06.02.96 Created.
41 // 28.03.96 Added miscellaneous constants.
42 // 05.12.97 E.Tcherniaev: Redefined pascal (to avoid warnings on WinNT)
43 // 20.05.98 names: meter, second, gram, radian, degree
44 // (from Brian.Lasiuk@yale.edu (STAR)). Added luminous units.
45 // 05.08.98 angstrom, picobarn, microsecond, picosecond, petaelectronvolt
46 // 01.03.01 parsec
47 // 31.01.06 kilogray, milligray, microgray
48 // 29.04.08 use PDG 2006 value of e_SI
49 // 03.11.08 use PDG 2008 value of e_SI
50 // 19.08.15 added liter and its sub units (mma)
51 // 12.01.16 added symbols for microsecond (us) and picosecond (ps) (mma)
52 // 02.10.17 addopted units from CLHEP 2.3.4.3 and converted to TGeo unit base
53 
54 #ifndef TGEANT4_SYSTEM_OF_UNITS_H
55 #define TGEANT4_SYSTEM_OF_UNITS_H
56 
57 namespace TGeant4Unit {
58 
59  //
60  // TGeo follows Geant3 convention as specified in manual
61  // "Unless otherwise specified, the following units are used throughout the program:
62  // centimeter, second, degree, GeV"
63 
64  //
65  //
66  //
67  static constexpr double pi = 3.14159265358979323846;
68  static constexpr double twopi = 2 * pi;
69  static constexpr double halfpi = pi / 2;
70  static constexpr double pi2 = pi * pi;
71 
72  //
73  // Length [L]
74  //
75  static constexpr double millimeter = 1.0;
76  static constexpr double millimeter2 = millimeter * millimeter;
77  static constexpr double millimeter3 = millimeter * millimeter * millimeter;
78 
79  static constexpr double centimeter = 10. * millimeter; // Base unit
80  static constexpr double centimeter2 = centimeter * centimeter;
81  static constexpr double centimeter3 = centimeter * centimeter * centimeter;
82 
83  static constexpr double meter = 1000. * millimeter;
84  static constexpr double meter2 = meter * meter;
85  static constexpr double meter3 = meter * meter * meter;
86 
87  static constexpr double kilometer = 1000. * meter;
88  static constexpr double kilometer2 = kilometer * kilometer;
89  static constexpr double kilometer3 = kilometer * kilometer * kilometer;
90 
91  static constexpr double parsec = 3.0856775807e+16 * meter;
92 
93  static constexpr double micrometer = 1.e-6 * meter;
94  static constexpr double nanometer = 1.e-9 * meter;
95  static constexpr double angstrom = 1.e-10 * meter;
96  static constexpr double fermi = 1.e-15 * meter;
97 
98  static constexpr double barn = 1.e-28 * meter2;
99  static constexpr double millibarn = 1.e-3 * barn;
100  static constexpr double microbarn = 1.e-6 * barn;
101  static constexpr double nanobarn = 1.e-9 * barn;
102  static constexpr double picobarn = 1.e-12 * barn;
103 
104  // symbols
105  static constexpr double nm = nanometer;
106  static constexpr double um = micrometer;
107 
108  static constexpr double mm = millimeter;
109  static constexpr double mm2 = millimeter2;
110  static constexpr double mm3 = millimeter3;
111 
112  static constexpr double cm = centimeter;
113  static constexpr double cm2 = centimeter2;
114  static constexpr double cm3 = centimeter3;
115 
116  static constexpr double liter = 1.e+3 * cm3;
117  static constexpr double L = liter;
118  static constexpr double dL = 1.e-1 * liter;
119  static constexpr double cL = 1.e-2 * liter;
120  static constexpr double mL = 1.e-3 * liter;
121 
122  static constexpr double m = meter;
123  static constexpr double m2 = meter2;
124  static constexpr double m3 = meter3;
125 
126  static constexpr double km = kilometer;
127  static constexpr double km2 = kilometer2;
128  static constexpr double km3 = kilometer3;
129 
130  static constexpr double pc = parsec;
131 
132  //
133  // Angle
134  //
135  static constexpr double degree = 1.0; // Base unit
136  static constexpr double radian = (180.0 / pi) * degree;
137  static constexpr double milliradian = 1.e-3 * radian;
138 
139  static constexpr double steradian = 1.;
140 
141  // symbols
142  static constexpr double rad = radian;
143  static constexpr double mrad = milliradian;
144  static constexpr double sr = steradian;
145  static constexpr double deg = degree;
146 
147  //
148  // Time [T]
149  //
150  static constexpr double nanosecond = 1.0;
151  static constexpr double second = 1.e+9 * nanosecond; // Base unit
152  static constexpr double millisecond = 1.e-3 * second;
153  static constexpr double microsecond = 1.e-6 * second;
154  static constexpr double picosecond = 1.e-12 * second;
155 
156  static constexpr double hertz = 1. / second;
157  static constexpr double kilohertz = 1.e+3 * hertz;
158  static constexpr double megahertz = 1.e+6 * hertz;
159 
160  // symbols
161  static constexpr double ns = nanosecond;
162  static constexpr double s = second;
163  static constexpr double ms = millisecond;
164  static constexpr double us = microsecond;
165  static constexpr double ps = picosecond;
166 
167  //
168  // Electric charge [Q]
169  //
170  static constexpr double eplus = 1.; // positron charge
171  static constexpr double e_SI = 1.602176487e-19; // positron charge in coulomb
172  static constexpr double coulomb = eplus / e_SI; // coulomb = 6.24150 e+18 * eplus
173 
174  //
175  // Energy [E]
176  //
177  static constexpr double megaelectronvolt = 1.0;
178  static constexpr double electronvolt = 1.e-6 * megaelectronvolt;
179  static constexpr double kiloelectronvolt = 1.e-3 * megaelectronvolt;
180  static constexpr double gigaelectronvolt = 1.e+3 * megaelectronvolt; // Base unit
181  static constexpr double teraelectronvolt = 1.e+6 * megaelectronvolt;
182  static constexpr double petaelectronvolt = 1.e+9 * megaelectronvolt;
183 
184  static constexpr double joule = electronvolt / e_SI; // joule = 6.24150 e+12 * MeV
185 
186  // symbols
187  static constexpr double MeV = megaelectronvolt;
188  static constexpr double eV = electronvolt;
189  static constexpr double keV = kiloelectronvolt;
190  static constexpr double GeV = gigaelectronvolt;
191  static constexpr double TeV = teraelectronvolt;
192  static constexpr double PeV = petaelectronvolt;
193 
194  //
195  // Mass [E][T^2][L^-2]
196  //
197  static constexpr double kilogram = joule * second * second / (meter * meter);
198  static constexpr double gram = 1.e-3 * kilogram;
199  static constexpr double milligram = 1.e-3 * gram;
200 
201  // symbols
202  static constexpr double kg = kilogram;
203  static constexpr double g = gram;
204  static constexpr double mg = milligram;
205 
206  //
207  // Power [E][T^-1]
208  //
209  static constexpr double watt = joule / second; // watt = 6.24150 e+3 * MeV/ns
210 
211  //
212  // Force [E][L^-1]
213  //
214  static constexpr double newton = joule / meter; // newton = 6.24150 e+9 * MeV/mm
215 
216  //
217  // Pressure [E][L^-3]
218  //
219 #define pascal hep_pascal // a trick to avoid warnings
220  static constexpr double hep_pascal = newton / m2; // pascal = 6.24150 e+3 * MeV/mm3
221  static constexpr double bar = 100000 * pascal; // bar = 6.24150 e+8 * MeV/mm3
222  static constexpr double atmosphere = 101325 * pascal; // atm = 6.32420 e+8 * MeV/mm3
223 
224  //
225  // Electric current [Q][T^-1]
226  //
227  static constexpr double ampere = coulomb / second; // ampere = 6.24150 e+9 * eplus/ns
228  static constexpr double milliampere = 1.e-3 * ampere;
229  static constexpr double microampere = 1.e-6 * ampere;
230  static constexpr double nanoampere = 1.e-9 * ampere;
231 
232  //
233  // Electric potential [E][Q^-1]
234  //
235  static constexpr double megavolt = megaelectronvolt / eplus;
236  static constexpr double kilovolt = 1.e-3 * megavolt;
237  static constexpr double volt = 1.e-6 * megavolt;
238 
239  //
240  // Electric resistance [E][T][Q^-2]
241  //
242  static constexpr double ohm = volt / ampere; // ohm = 1.60217e-16*(MeV/eplus)/(eplus/ns)
243 
244  //
245  // Electric capacitance [Q^2][E^-1]
246  //
247  static constexpr double farad = coulomb / volt; // farad = 6.24150e+24 * eplus/Megavolt
248  static constexpr double millifarad = 1.e-3 * farad;
249  static constexpr double microfarad = 1.e-6 * farad;
250  static constexpr double nanofarad = 1.e-9 * farad;
251  static constexpr double picofarad = 1.e-12 * farad;
252 
253  //
254  // Magnetic Flux [T][E][Q^-1]
255  //
256  static constexpr double weber = volt * second; // weber = 1000*megavolt*ns
257 
258  //
259  // Magnetic Field [T][E][Q^-1][L^-2]
260  //
261  static constexpr double tesla = volt * second / meter2; // tesla =0.001*megavolt*ns/mm2
262 
263  static constexpr double gauss = 1.e-4 * tesla;
264  static constexpr double kilogauss = 1.e-1 * tesla;
265 
266  //
267  // Inductance [T^2][E][Q^-2]
268  //
269  static constexpr double henry = weber / ampere; // henry = 1.60217e-7*MeV*(ns/eplus)**2
270 
271  //
272  // Temperature
273  //
274  static constexpr double kelvin = 1.;
275 
276  //
277  // Amount of substance
278  //
279  static constexpr double mole = 1.;
280 
281  //
282  // Activity [T^-1]
283  //
284  static constexpr double becquerel = 1. / second;
285  static constexpr double curie = 3.7e+10 * becquerel;
286  static constexpr double kilobecquerel = 1.e+3 * becquerel;
287  static constexpr double megabecquerel = 1.e+6 * becquerel;
288  static constexpr double gigabecquerel = 1.e+9 * becquerel;
289  static constexpr double millicurie = 1.e-3 * curie;
290  static constexpr double microcurie = 1.e-6 * curie;
291  static constexpr double Bq = becquerel;
292  static constexpr double kBq = kilobecquerel;
293  static constexpr double MBq = megabecquerel;
294  static constexpr double GBq = gigabecquerel;
295  static constexpr double Ci = curie;
296  static constexpr double mCi = millicurie;
297  static constexpr double uCi = microcurie;
298 
299  //
300  // Absorbed dose [L^2][T^-2]
301  //
302  static constexpr double gray = joule / kilogram;
303  static constexpr double kilogray = 1.e+3 * gray;
304  static constexpr double milligray = 1.e-3 * gray;
305  static constexpr double microgray = 1.e-6 * gray;
306 
307  //
308  // Luminous intensity [I]
309  //
310  static constexpr double candela = 1.;
311 
312  //
313  // Luminous flux [I]
314  //
315  static constexpr double lumen = candela * steradian;
316 
317  //
318  // Illuminance [I][L^-2]
319  //
320  static constexpr double lux = lumen / meter2;
321 
322  //
323  // Miscellaneous
324  //
325  static constexpr double perCent = 0.01;
326  static constexpr double perThousand = 0.001;
327  static constexpr double perMillion = 0.000001;
328 
329  /// System of units flavor. Must be kept in sync with TGeoUnits::UnitType
330  enum UnitType {
331  kTGeoUnits = 1<<0,
332  kTGeant4Units = 1<<1
333  };
334 
335  /// Access the currently set units type
336  UnitType unitType();
337  /// Set the currently used unit type (Only ONCE possible)
338  UnitType setUnitType(UnitType new_type);
339 
340 } // namespace TGeoUnit
341 
342 #endif /* TGEANT4_SYSTEM_OF_UNITS_H */