DLG4::VolumeBuilders
A fluent interface for Geant4 geometry definition.
Loading...
Searching...
No Matches
Classes | Namespaces | Typedefs | Functions | Variables
DLG4Units.hh File Reference
#include "G4Types.hh"
#include "G4ExceptionSeverity.hh"
#include "globals.hh"
#include <CLHEP/Units/SystemOfUnits.h>
#include <G4ThreeVector.hh>
#include <optional>
Include dependency graph for DLG4Units.hh:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  UnitProperties_< U, V >
 
struct  UnitTag
 
class  UnitBase< T, NativeType >
 
struct  UnitBase< T, NativeType >::Evaluator
 
struct  UnitBase< T, NativeType >::ScalableProxy< X >
 
struct  UnitBase< T, NativeType >::ScalableProxy< X >::ExpressionToken
 
struct  UnitBase< T, NativeType >::DefaultUnitsProxy
 
struct  UnitBase< T, NativeType >::NativeProxy
 
class  Length
 
class  Mass
 
class  Volume
 
class  Density
 
class  Angle
 
class  Length3Vec
 
struct  UnitOrValue< T, NativeType >
 
struct  is_valid_expr< T, typename >
 
struct  is_valid_expr< T, std::void_t< decltype(std::declval< T >()())> >
 
class  MoreTest
 

Namespaces

namespace  DLG4
 
namespace  DLG4::Units
 

Typedefs

template<typename Dimension >
using Unit = UnitBase< Dimension, G4double >
 
using Length3Vec = Length3Vec
 
template<typename T , typename U >
using ResultType = std::conditional_t< std::is_base_of_v< UnitTag, T >, T, U >
 
template<typename T >
using NativeType = std::conditional_t< std::is_base_of_v< Length3Vec, T >, G4ThreeVector, std::conditional_t< std::is_base_of_v< UnitTag, T >, G4double, T > >
 
using UnitlessG4Transform3D = G4Transform3D
 

Functions

template<typename T >
void SetGlobalDefaultUnit (T unit)
 
Density operator/ (const Mass &m, const Volume &v)
 
template<typename T , typename U , typename = std::enable_if_t<std::is_base_of_v<UnitTag, T> != std::is_base_of_v<UnitTag, U>>>
auto operator* (const T &a, const U &b)
 
template<typename T , typename U , typename = std::enable_if_t<std::is_base_of_v<UnitTag, T> && !std::is_base_of_v<UnitTag, U>>>
auto operator/ (const T &a, const U &b)
 
template<typename T , typename = std::enable_if_t<std::is_base_of_v<UnitTag, T> >>
operator+ (const T &a, const T &b)
 
template<typename T , typename = std::enable_if_t<std::is_base_of_v<UnitTag, T> >>
operator- (const T &a, const T &b)
 

Variables

template<typename T >
G4double global_default_unit = 1.0
 
template<typename F >
constexpr bool is_invalid_expression = !is_valid_expr<F>::value
 

Detailed Description

Typesafe units, for VolumeBuilders, Geant, ETC !! No accidental mixing values and units.

These are type-safe, non-implicitly convertible units/measures.

Main reop and documentation moved to https://dsleonard-coding.github.io:DLG4Units

Definition in file DLG4Units.hh.