ANIMA  4.0
animaMCMConstants.h
Go to the documentation of this file.
1 #pragma once
2 #include <cmath>
3 
4 namespace anima
5 {
6 
7 // The following units are in place to keep things right: distances are in millimeters, time in seconds, magnetic field in Tesla
8 
10 const double DiffusionGyromagneticRatio = 267.513e6;
11 
13 inline double GetBValueFromAcquisitionParameters(double smallDelta, double bigDelta, double gradientStrength)
14 {
15  double alpha = DiffusionGyromagneticRatio * smallDelta * gradientStrength;
16  return alpha * alpha * (bigDelta - smallDelta / 3.0);
17 }
18 
20 inline double GetGradientStrengthFromBValue(double bValue, double smallDelta, double bigDelta)
21 {
22  double alpha = std::sqrt(bValue / (bigDelta - smallDelta / 3.0));
23  return alpha / (DiffusionGyromagneticRatio * smallDelta);
24 }
25 
27 const double DiffusionSmallDelta = 10.0e-3;
28 
30 const double DiffusionBigDelta = 40.0e-3;
31 
33 const double MCMZeroLowerBound = 0.0;
34 
36 const double MCMEpsilon = 1.0e-2;
37 
39 const double MCMCompartmentsFractionUpperBound = 1.0e7;
40 
42 const double MCMAxialDiffusivityAddonLowerBound = 5.0e-4;
43 
45 const double MCMDiffusivityLowerBound = 1.0e-6;
46 
48 const double MCMDiffusivityUpperBound = 3.0e-3;
49 
51 const double MCMRadialDiffusivityUpperBound = 1.0e-3;
52 
54 const double MCMFreeWaterDiffusivityLowerBound = 2.0e-3;
55 
57 const double MCMFreeWaterDiffusivityUpperBound = 4.0e-3;
58 
61 
64 
66 const double MCMPolarAngleUpperBound = M_PI;
67 
69 const double MCMAzimuthAngleUpperBound = 2.0 * M_PI;
70 
72 const double MCMConcentrationUpperBound = 128.0;
73 
75 const double MCMFractionUpperBound = 1.0;
76 
78 const double MCMTissueRadiusLowerBound = 1.0e-4;
79 
81 const double MCMTissueRadiusUpperBound = 4.01e-2;
82 
83 }
double GetGradientStrengthFromBValue(double bValue, double smallDelta, double bigDelta)
Given b-value in s/mm^2 and deltas in s, computes gradient strength in T/mm.
const double MCMZeroLowerBound
Default zero lower bound (in case we want something else than zero one day)
const double MCMAzimuthAngleUpperBound
Azimuth angle upper bound.
const double MCMFreeWaterDiffusivityLowerBound
Free water diffusivity lower bound.
const double MCMFractionUpperBound
Fraction upper bound (intra/extra axonal)
const double MCMRadialDiffusivityUpperBound
Radial diffusivity upper bound.
const double DiffusionBigDelta
Default big delta value (classical values)
double GetBValueFromAcquisitionParameters(double smallDelta, double bigDelta, double gradientStrength)
Given gyromagnetic ratio in rad/s/T, gradient strength in T/mm and deltas in s, computes b-value in s...
const double DiffusionSmallDelta
Default small delta value (classical values)
const double MCMTissueRadiusUpperBound
Tissue radius upper bound (in Stanisz for now)
const double MCMPolarAngleUpperBound
Polar angle upper bound (used in tensor for now)
const double MCMCompartmentsFractionUpperBound
Compartment fractions upper bound (B0 times weight)
const double DiffusionGyromagneticRatio
Gyromagnetic ratio (in rad/s/T), from Nelson, J., Nuclear Magnetic Resonance Spectroscopy, Prentice Hall, Londres, 2003.
const double MCMIsotropicRestrictedWaterDiffusivityUpperBound
Isotropic restricted water diffusivity upper bound.
const double MCMConcentrationUpperBound
Concentration upper bound (used in NODDI and DDI)
const double MCMDiffusivityUpperBound
Diffusivity upper bound.
const double MCMIsotropicRestrictedWaterDiffusivityLowerBound
Isotropic restricted water diffusivity lower bound.
const double MCMEpsilon
Epsilon value in case we do not want to have parameters reaching their true bounds (used for now in D...
const double MCMTissueRadiusLowerBound
Tissue radius lower bound (in Stanisz for now)
const double MCMDiffusivityLowerBound
Diffusivity lower bound for estimation.
const double MCMAxialDiffusivityAddonLowerBound
Axial diffusivity add on to lower bound (used to ensure a minimal anisotropy to the anisotropic compa...
const double MCMFreeWaterDiffusivityUpperBound
Free water diffusivity upper bound.