23 static double _energy;
25 static double _frequency;
29 static bool _approximate;
31 static double solveInitialTemperatureFunc(
double temperature,
34 static double solveApproximateInitialTemperatureFunc(
double temperature,
37 static double integralOverHeatCapacity(
double temperature,
void *transitions);
39 static double heatCapacity(
double temperature,
void *transitions);
41 static double featureStrength(
double temperature,
void *transitions);
43 static double approximateFeatureStrength(
double temperature,
void *charge);
45 static void convertFromFrequencyToWavelength(std::vector<double> &grid);
47 static void convertFromFrequencyToWavelength(std::array<double, 2> &grid);
49 static void convertFromWavelengthToFrequency(std::vector<double> &grid);
51 static void convertFromFrequencyToWavelength(
52 std::vector<std::vector<std::pair<double, double>>> &transitions);
54 static void convertFromWavelengthToFrequency(
55 std::vector<std::vector<std::pair<double, double>>> &transitions);
57 void useApproximate(std::vector<int> &charges, std::vector<int> &carbons);
62 const std::vector<std::vector<std::pair<double, double>>> &transitions);
65 const std::vector<std::vector<std::pair<double, double>>> &transitions);
68 std::vector<std::vector<std::pair<double, double>>> &transitions);
70 void shiftTransitions(
double shift);
72 void setGrid(
const std::vector<double> &grid);
74 void makeGrid(
const std::vector<double> &frange,
double step);
76 void makeGrid(
double fmin,
double fmax,
double step);
78 std::vector<double>
const &getGrid()
const;
80 void printTransitions();
82 void applyCascadeWithEnergy(
double energy, std::vector<double> &temperatures);
84 void applyTemperatureWithEnergy(
double energy,
85 std::vector<double> &temperatures);
87 void applyBlackbodyWithTemperature(
double temperature);
90 applyBlackbodyWithTemperatureForEach(
const std::vector<double> &temperatures);
92 void getSpectraAndConvolveWithLorentianOfFHWM(
93 std::vector<std::vector<double>> &vector,
double fwhm = 15);
95 void getSpectraAndConvolveWithGaussianOfFHWM(
96 std::vector<std::vector<double>> &vector,
double fwhm = 15);
99 getSpectraAndConvolveWithDrudeOfFHWM(std::vector<std::vector<double>> &vector,
103 static constexpr double TemperatureMin = 2.73;
105 static constexpr double TemperatureMax = 6000.0;
107 static constexpr double RootAccuracy = 1e-4;
109 static constexpr double IntegrationAccuracy = 1e-4;
111 static constexpr int MaxIterations = 150;
113 static constexpr int MaxSteps = 100;
115 static constexpr double PlanckConstant = 6.6260693000000018e-27;
117 static constexpr double SpeedOfLight = 29979245800.0;
119 static constexpr double BoltzmannConstant = 1.3806504e-16;
121 static constexpr double AvogadrosNumber = 6.0221415e+23;
123 std::vector<int> _charges;
125 std::vector<int> _carbons;
127 std::vector<std::vector<std::pair<double, double>>> _transitions;
129 std::vector<double> _grid;
136 solveInitialTemperature(
double energy,
137 std::vector<std::pair<double, double>> &transitions);
139 double Lorentzian(
double frequency,
double centroid,
double hwhm);
141 double Gaussian(
double frequency,
double centroid,
double sigma);
143 double Drude(
double frequency,
double centroid,
double fwhm);
145 double Blackbody(
double frequency,
double temperature);