Compute apodized instrument line shape.
124 {
125
126
127 const double a = 2 * M_PI * dnu * opl;
128 const double a2 = a * a;
129 const double a4 = a2 * a2;
130 const double a6 = a4 * a2;
131 const double a8 = a4 * a4;
132
133
134 if (apo == 0) {
135 if (fabs(a) < 0.7)
136 return 1 - a2 / 6 + a4 / 120 - a6 / 5040 + a8 / 362880;
137 else
138 return sin(a) / a;
139 }
140
141
142 else if (apo == 1) {
143 double q0, q2, q4;
144 if (fabs(a) < 0.7) {
145 q0 = 1 - a2 / 6 + a4 / 120 - a6 / 5040 + a8 / 362880;
146 q2 = 1 - a2 / 14 + a4 / 504 - a6 / 33264 + a8 / 3459456;
147 q4 = 1 - a2 / 22 + a4 / 1144 - a6 / 102960 + a8 / 14002560;
148 } else {
149 const double sinca = sin(a) / a;
150 const double cosa = cos(a);
151 q0 = sinca;
152 q2 = -15 / a2 * ((1 - 3 / a2) * sinca + (3 / a2) * cosa);
153 q4 =
154 945 / a4 * ((1 - 45 / a2 + 105 / a4) * sinca +
155 5 / a2 * (2 - 21 / a2) * cosa);
156 }
157 return 0.045335 * q0 + 0.554883 * q2 * 8. / 15. +
158 0.399782 * q4 * 384. / 945.;
159 }
160
161
162 else
163 ERRMSG(
"Unknown apodization!");
164}
#define ERRMSG(...)
Print an error message with contextual information and terminate the program.