commit 8e8d90d630d74ec8aab18acaf0c50ca7b0395b5e
parent bbff16dc0dafbf4f2b76e0b278d7b9948d835692
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Thu, 3 Mar 2016 16:29:38 +0100
Push further the phase function tests
Retrieve the inverse cumulative phase function on the rhodo test. Note
that no specific check is performed on the computed data; the results
are simply printed.
Diffstat:
3 files changed, 704 insertions(+), 21 deletions(-)
diff --git a/src/test_sschiff_estimator_cylinder.c b/src/test_sschiff_estimator_cylinder.c
@@ -436,6 +436,7 @@ main(int argc, char** argv)
struct sschiff_cross_section cross_section;
double interval[2];
struct sschiff_state* val;
+ struct sschiff_state result;
sampler_ctx.aspect_ratio = 0.837;
sampler_ctx.mean_radius = (x[i] * 0.450) / (2*PI);
@@ -462,32 +463,36 @@ main(int argc, char** argv)
(unsigned)i, x[i], wavelength, buf);
val = &cross_section.extinction;
- compute_intersection(interval, results[i].extinction_E,
- results[i].extinction_SE, val->E, val->SE);
+ result.E = results[i].extinction_E;
+ result.SE = results[i].extinction_SE;
+ compute_estimation_intersection(interval, 4, &result, val);
printf(" Extinction ~ %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
results[i].extinction_E, results[i].extinction_SE,
val->E, val->SE, interval[1] - interval[0]);
CHECK(interval[0] <= interval[1], 1);
val = &cross_section.absorption;
- compute_intersection(interval, results[i].absorption_E,
- results[i].absorption_SE, val->E, val->SE);
+ result.E = results[i].absorption_E;
+ result.SE = results[i].absorption_SE;
+ compute_estimation_intersection(interval, 4, &result, val);
printf(" Absorption ~ %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
results[i].absorption_E, results[i].absorption_SE,
val->E, val->SE, interval[1] - interval[0]);
CHECK(interval[0] <= interval[1], 1);
val = &cross_section.scattering;
- compute_intersection(interval, results[i].scattering_E,
- results[i].scattering_SE, val->E, val->SE);
+ result.E = results[i].scattering_E;
+ result.SE = results[i].scattering_SE;
+ compute_estimation_intersection(interval, 4, &result, val);
printf(" Scattering ~ %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
results[i].scattering_E, results[i].scattering_SE,
val->E, val->SE, interval[1] - interval[0]);
CHECK(interval[0] <= interval[1], 1);
val = &cross_section.average_projected_area;
- compute_intersection(interval, results[i].avg_proj_area_E,
- results[i].avg_proj_area_SE, val->E, val->SE);
+ result.E = results[i].avg_proj_area_E;
+ result.SE = results[i].avg_proj_area_SE;
+ compute_estimation_intersection(interval, 4, &result, val);
printf(" Proj Area ~ %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
results[i].avg_proj_area_E, results[i].avg_proj_area_SE,
val->E, val->SE, interval[1] - interval[0]);
diff --git a/src/test_sschiff_estimator_rhodo.c b/src/test_sschiff_estimator_rhodo.c
@@ -48,15 +48,9 @@ get_material_property
struct sschiff_material_properties* props)
{
(void)mtl, (void)wavelength;
-#if 1
props->medium_refractive_index = 1.341779;
props->relative_imaginary_refractive_index = 2.20382600910679e-03/1.341779;
props->relative_real_refractive_index = 1.38912721283454/1.341779;
-#else
- props->medium_refractive_index = 1.33;
- props->relative_imaginary_refractive_index = 8.5e-4/1.33;
- props->relative_real_refractive_index = 1.39/1.33;
-#endif
}
static res_T
@@ -76,9 +70,520 @@ sample_cylinder
return cylinder_setup_s3d_shape(&cylinder, shape);
}
+struct cross_section_result {
+ double absorption_E;
+ double absorption_SE;
+ double extinction_E;
+ double extinction_SE;
+ double scattering_E;
+ double scattering_SE;
+};
+
int
main(int argc, char** argv)
{
+ const double thetas_result[] = {
+ 0.00000000000000e+00, 1.14148156838614e-03, 2.28296313677229e-03, 3.23855373729113e-03,
+ 3.62141691139672e-03, 4.00428008550231e-03, 4.38714325960790e-03, 4.77000643371349e-03,
+ 5.15286960781908e-03, 5.53573278192467e-03, 5.91859595603026e-03, 6.29675493414120e-03,
+ 6.52933347165815e-03, 6.76191200917511e-03, 6.99449054669206e-03, 7.22706908420901e-03,
+ 7.45964762172596e-03, 7.69222615924292e-03, 7.92480469675987e-03, 8.15738323427682e-03,
+ 8.38996177179377e-03, 8.62254030931073e-03, 8.85511884682768e-03, 9.08769738434464e-03,
+ 9.32027592186159e-03, 9.52053599040668e-03, 9.68975952631293e-03, 9.85898306221919e-03,
+ 1.00282065981254e-02, 1.01974301340317e-02, 1.03666536699380e-02, 1.05358772058442e-02,
+ 1.07051007417505e-02, 1.08743242776567e-02, 1.10435478135630e-02, 1.12127713494692e-02,
+ 1.13819948853755e-02, 1.15512184212817e-02, 1.17204419571880e-02, 1.18896654930943e-02,
+ 1.20588890290005e-02, 1.22281125649068e-02, 1.23973361008130e-02, 1.25665596367193e-02,
+ 1.27039483751999e-02, 1.28388221500454e-02, 1.29736959248909e-02, 1.31085696997364e-02,
+ 1.32434434745819e-02, 1.33783172494274e-02, 1.35131910242729e-02, 1.36480647991184e-02,
+ 1.37829385739639e-02, 1.39178123488094e-02, 1.40526861236549e-02, 1.41875598985003e-02,
+ 1.43224336733458e-02, 1.44573074481913e-02, 1.45921812230368e-02, 1.47270549978823e-02,
+ 1.48619287727278e-02, 1.49968025475733e-02, 1.51316763224188e-02, 1.52665500972643e-02,
+ 1.54014238721098e-02, 1.55362976469553e-02, 1.56711714218008e-02, 1.57931396768861e-02,
+ 1.59068787585962e-02, 1.60206178403063e-02, 1.61343569220165e-02, 1.62480960037266e-02,
+ 1.63618350854367e-02, 1.64755741671468e-02, 1.65893132488569e-02, 1.67030523305670e-02,
+ 1.68167914122771e-02, 1.69305304939872e-02, 1.70442695756973e-02, 1.71580086574075e-02,
+ 1.72717477391176e-02, 1.73854868208277e-02, 1.74992259025378e-02, 1.76129649842479e-02,
+ 1.77267040659580e-02, 1.78404431476681e-02, 1.79541822293782e-02, 1.80679213110883e-02,
+ 1.81816603927985e-02, 1.82953994745086e-02, 1.84091385562187e-02, 1.85228776379288e-02,
+ 1.86366167196389e-02, 1.87503558013490e-02, 1.88640948830591e-02, 1.89643794502653e-02,
+ 1.90641316070585e-02, 1.91638837638517e-02, 1.92636359206448e-02, 1.93633880774380e-02,
+ 1.94631402342312e-02, 1.95628923910244e-02, 1.96626445478175e-02, 1.97623967046107e-02,
+ 1.98621488614039e-02, 1.99619010181970e-02, 2.00616531749902e-02, 2.01614053317834e-02,
+ 2.02611574885766e-02, 2.03609096453697e-02, 2.04606618021629e-02, 2.05604139589561e-02,
+ 2.06601661157493e-02, 2.07599182725424e-02, 2.08596704293356e-02, 2.09594225861288e-02,
+ 2.10591747429219e-02, 2.11589268997151e-02, 2.12586790565083e-02, 2.13584312133015e-02,
+ 2.14581833700946e-02, 2.15579355268878e-02, 2.16576876836810e-02, 2.17574398404741e-02,
+ 2.18571919972673e-02, 2.19569441540605e-02, 2.20524777861400e-02, 2.21425639028155e-02,
+ 2.22326500194909e-02, 2.23227361361664e-02, 2.24128222528419e-02, 2.25029083695174e-02,
+ 2.25929944861929e-02, 2.26830806028684e-02, 2.27731667195439e-02, 2.28632528362194e-02,
+ 2.29533389528949e-02, 2.30434250695703e-02, 2.31335111862458e-02, 2.32235973029213e-02,
+ 2.33136834195968e-02, 2.34037695362723e-02, 2.34938556529478e-02, 2.35839417696233e-02,
+ 2.36740278862988e-02, 2.37641140029743e-02, 2.38542001196497e-02, 2.39442862363252e-02,
+ 2.40343723530007e-02, 2.41244584696762e-02, 2.42145445863517e-02, 2.43046307030272e-02,
+ 2.43947168197027e-02, 2.44848029363782e-02, 2.45748890530537e-02, 2.46649751697291e-02,
+ 2.47550612864046e-02, 2.48451474030801e-02, 2.49352335197556e-02, 2.50253196364311e-02,
+ 2.51154057531066e-02, 2.52018791003358e-02, 2.52851267715546e-02, 2.53683744427735e-02,
+ 2.54516221139923e-02, 2.55348697852111e-02, 2.56181174564300e-02, 2.57013651276488e-02,
+ 2.57846127988676e-02, 2.58678604700865e-02, 2.59511081413053e-02, 2.60343558125241e-02,
+ 2.61176034837430e-02, 2.62008511549618e-02, 2.62840988261807e-02, 2.63673464973995e-02,
+ 2.64505941686183e-02, 2.65338418398372e-02, 2.66170895110560e-02, 2.67003371822748e-02,
+ 2.67835848534937e-02, 2.68668325247125e-02, 2.69500801959313e-02, 2.70333278671502e-02,
+ 2.71165755383690e-02, 2.71998232095879e-02, 2.72830708808067e-02, 2.73663185520255e-02,
+ 2.74495662232444e-02, 2.75328138944632e-02, 2.76160615656820e-02, 2.76993092369009e-02,
+ 2.77825569081197e-02, 2.78658045793385e-02, 2.79490522505574e-02, 2.80322999217762e-02,
+ 2.81155475929951e-02, 2.81987952642139e-02, 2.82820429354327e-02, 2.83616228455214e-02,
+ 2.84399972102526e-02, 2.85183715749838e-02, 2.85967459397150e-02, 2.86751203044462e-02,
+ 2.87534946691774e-02, 2.88318690339086e-02, 2.89102433986399e-02, 2.89886177633711e-02,
+ 2.90669921281023e-02, 2.91453664928335e-02, 2.92237408575647e-02, 2.93021152222959e-02,
+ 2.93804895870271e-02, 2.94588639517583e-02, 2.95372383164895e-02, 2.96156126812207e-02,
+ 2.96939870459519e-02, 2.97723614106831e-02, 2.98507357754143e-02, 2.99291101401455e-02,
+ 3.00074845048768e-02, 3.00858588696080e-02, 3.01642332343392e-02, 3.02426075990704e-02,
+ 3.03209819638016e-02, 3.03993563285328e-02, 3.04777306932640e-02, 3.05561050579952e-02,
+ 3.06344794227264e-02, 3.07128537874576e-02, 3.07912281521888e-02, 3.08696025169200e-02,
+ 3.09479768816512e-02, 3.10263512463824e-02, 3.11047256111136e-02, 3.11830999758448e-02,
+ 3.12614743405761e-02, 3.13398487053073e-02, 3.14182230700385e-02, 3.14944361461854e-02,
+ 3.15693692778899e-02, 3.16443024095944e-02, 3.17192355412988e-02, 3.17941686730033e-02,
+ 3.18691018047078e-02, 3.19440349364122e-02, 3.20189680681167e-02, 3.20939011998212e-02,
+ 3.21688343315256e-02, 3.22437674632301e-02, 3.23187005949346e-02, 3.23936337266390e-02,
+ 3.24685668583435e-02, 3.25434999900480e-02, 3.26184331217524e-02, 3.26933662534569e-02,
+ 3.27682993851614e-02, 3.28432325168658e-02, 3.29181656485703e-02, 3.29930987802748e-02,
+ 3.30680319119792e-02, 3.31429650436837e-02, 3.32178981753882e-02, 3.32928313070926e-02,
+ 3.33677644387971e-02, 3.34426975705016e-02, 3.35176307022060e-02, 3.35925638339105e-02,
+ 3.36674969656150e-02, 3.37424300973194e-02, 3.38173632290239e-02, 3.38922963607284e-02,
+ 3.39672294924329e-02, 3.40421626241373e-02, 3.41170957558418e-02, 3.41920288875463e-02,
+ 3.42669620192507e-02, 3.43418951509552e-02, 3.44168282826597e-02, 3.44917614143641e-02,
+ 3.45666945460686e-02, 3.46400699791764e-02, 3.47126458456444e-02, 3.47852217121124e-02,
+ 3.48577975785803e-02, 3.49303734450483e-02, 3.50029493115163e-02, 3.50755251779843e-02,
+ 3.51481010444523e-02, 3.52206769109203e-02, 3.52932527773883e-02, 3.53658286438563e-02,
+ 3.54384045103243e-02, 3.55109803767923e-02, 3.55835562432603e-02, 3.56561321097283e-02,
+ 3.57287079761963e-02, 3.58012838426643e-02, 3.58738597091322e-02, 3.59464355756002e-02,
+ 3.60190114420682e-02, 3.60915873085362e-02, 3.61641631750042e-02, 3.62367390414722e-02,
+ 3.63093149079402e-02, 3.63818907744082e-02, 3.64544666408762e-02, 3.65270425073442e-02,
+ 3.65996183738122e-02, 3.66721942402802e-02, 3.67447701067482e-02, 3.68173459732162e-02,
+ 3.68899218396842e-02, 3.69624977061521e-02, 3.70350735726201e-02, 3.71076494390881e-02,
+ 3.71802253055561e-02, 3.72528011720241e-02, 3.73253770384921e-02, 3.73979529049601e-02,
+ 3.74705287714281e-02, 3.75431046378961e-02, 3.76156805043641e-02, 3.76882563708321e-02,
+ 3.77603326510914e-02, 3.78313967351617e-02, 3.79024608192319e-02, 3.79735249033022e-02,
+ 3.80445889873724e-02, 3.81156530714427e-02, 3.81867171555129e-02, 3.82577812395832e-02,
+ 3.83288453236534e-02, 3.83999094077237e-02, 3.84709734917939e-02, 3.85420375758642e-02,
+ 3.86131016599344e-02, 3.86841657440047e-02, 3.87552298280749e-02, 3.88262939121452e-02,
+ 3.88973579962155e-02, 3.89684220802857e-02, 3.90394861643560e-02, 3.91105502484262e-02,
+ 3.91816143324965e-02, 3.92526784165667e-02, 3.93237425006370e-02, 3.93948065847072e-02,
+ 3.94658706687775e-02, 3.95369347528477e-02, 3.96079988369180e-02, 3.96790629209882e-02,
+ 3.97501270050585e-02, 3.98211910891287e-02, 3.98922551731990e-02, 3.99633192572692e-02,
+ 4.00343833413395e-02, 4.01054474254097e-02, 4.01765115094800e-02, 4.02475755935502e-02,
+ 4.03186396776205e-02, 4.03897037616908e-02, 4.04607678457610e-02, 4.05318319298313e-02,
+ 4.06028960139015e-02, 4.06739600979718e-02, 4.07450241820420e-02, 4.08160882661123e-02,
+ 4.08870867748523e-02, 4.09573136640100e-02, 4.10275405531676e-02, 4.10977674423252e-02,
+ 4.11679943314829e-02, 4.12382212206405e-02, 4.13084481097981e-02, 4.13786749989557e-02,
+ 4.14489018881134e-02, 4.15191287772710e-02, 4.15893556664286e-02, 4.16595825555863e-02,
+ 4.17298094447439e-02, 4.18000363339015e-02, 4.18702632230591e-02, 4.19404901122168e-02,
+ 4.20107170013744e-02, 4.20809438905320e-02, 4.21511707796896e-02, 4.22213976688473e-02,
+ 4.22916245580049e-02, 4.23618514471625e-02, 4.24320783363202e-02, 4.25023052254778e-02,
+ 4.25725321146354e-02, 4.26427590037931e-02, 4.27129858929507e-02, 4.27832127821083e-02,
+ 4.28534396712659e-02, 4.29236665604236e-02, 4.29938934495812e-02, 4.30641203387388e-02,
+ 4.31343472278964e-02, 4.32045741170541e-02, 4.32748010062117e-02, 4.33450278953693e-02,
+ 4.34152547845270e-02, 4.34854816736846e-02, 4.35557085628422e-02, 4.36259354519998e-02,
+ 4.36961623411575e-02, 4.37663892303151e-02, 4.38366161194727e-02, 4.39068430086304e-02,
+ 4.39770698977880e-02, 4.40472099900112e-02, 4.41171462489463e-02, 4.41870825078813e-02,
+ 4.42570187668163e-02, 4.43269550257513e-02, 4.43968912846863e-02, 4.44668275436213e-02,
+ 4.45367638025563e-02, 4.46067000614913e-02, 4.46766363204263e-02, 4.47465725793613e-02,
+ 4.48165088382963e-02, 4.48864450972313e-02, 4.49563813561664e-02, 4.50263176151014e-02,
+ 4.50962538740364e-02, 4.51661901329714e-02, 4.52361263919064e-02, 4.53060626508414e-02,
+ 4.53759989097764e-02, 4.54459351687114e-02, 4.55158714276464e-02, 4.55858076865814e-02,
+ 4.56557439455164e-02, 4.57256802044514e-02, 4.57956164633864e-02, 4.58655527223214e-02,
+ 4.59354889812564e-02, 4.60054252401915e-02, 4.60753614991265e-02, 4.61452977580615e-02,
+ 4.62152340169965e-02, 4.62851702759315e-02, 4.63551065348665e-02, 4.64250427938015e-02,
+ 4.64949790527365e-02, 4.65649153116715e-02, 4.66348515706065e-02, 4.67047878295415e-02,
+ 4.67747240884765e-02, 4.68446603474115e-02, 4.69145966063466e-02, 4.69845328652816e-02,
+ 4.70544691242166e-02, 4.71244053831516e-02, 4.71943934702495e-02, 4.72644854227751e-02,
+ 4.73345773753006e-02, 4.74046693278262e-02, 4.74747612803518e-02, 4.75448532328774e-02,
+ 4.76149451854029e-02, 4.76850371379285e-02, 4.77551290904541e-02, 4.78252210429797e-02,
+ 4.78953129955053e-02, 4.79654049480308e-02, 4.80354969005564e-02, 4.81055888530820e-02,
+ 4.81756808056076e-02, 4.82457727581331e-02, 4.83158647106587e-02, 4.83859566631843e-02,
+ 4.84560486157099e-02, 4.85261405682354e-02, 4.85962325207610e-02, 4.86663244732866e-02,
+ 4.87364164258122e-02, 4.88065083783377e-02, 4.88766003308633e-02, 4.89466922833889e-02,
+ 4.90167842359145e-02, 4.90868761884400e-02, 4.91569681409656e-02, 4.92270600934912e-02,
+ 4.92971520460168e-02, 4.93672439985424e-02, 4.94373359510679e-02, 4.95074279035935e-02,
+ 4.95775198561191e-02, 4.96476118086447e-02, 4.97177037611702e-02, 4.97877957136958e-02,
+ 4.98578876662214e-02, 4.99279796187470e-02, 4.99980715712725e-02, 5.00681635237981e-02,
+ 5.01382554763237e-02, 5.02083474288493e-02, 5.02784393813748e-02, 5.03487742592002e-02,
+ 5.04193863922133e-02, 5.04899985252264e-02, 5.05606106582394e-02, 5.06312227912525e-02,
+ 5.07018349242656e-02, 5.07724470572787e-02, 5.08430591902917e-02, 5.09136713233048e-02,
+ 5.09842834563179e-02, 5.10548955893310e-02, 5.11255077223440e-02, 5.11961198553571e-02,
+ 5.12667319883702e-02, 5.13373441213833e-02, 5.14079562543963e-02, 5.14785683874094e-02,
+ 5.15491805204225e-02, 5.16197926534356e-02, 5.16904047864486e-02, 5.17610169194617e-02,
+ 5.18316290524748e-02, 5.19022411854879e-02, 5.19728533185009e-02, 5.20434654515140e-02,
+ 5.21140775845271e-02, 5.21846897175402e-02, 5.22553018505532e-02, 5.23259139835663e-02,
+ 5.23965261165794e-02, 5.24671382495925e-02, 5.25377503826055e-02, 5.26083625156186e-02,
+ 5.26789746486317e-02, 5.27495867816448e-02, 5.28201989146578e-02, 5.28908110476709e-02,
+ 5.29614231806840e-02, 5.30320353136971e-02, 5.31026474467102e-02, 5.31732595797232e-02,
+ 5.32438717127363e-02, 5.33144838457494e-02, 5.33850959787624e-02, 5.34557081117755e-02,
+ 5.35270799674345e-02, 5.35985075745565e-02, 5.36699351816785e-02, 5.37413627888005e-02,
+ 5.38127903959225e-02, 5.38842180030445e-02, 5.39556456101665e-02, 5.40270732172885e-02,
+ 5.40985008244105e-02, 5.41699284315325e-02, 5.42413560386545e-02, 5.43127836457765e-02,
+ 5.43842112528985e-02, 5.44556388600205e-02, 5.45270664671424e-02, 5.45984940742644e-02,
+ 5.46699216813864e-02, 5.47413492885084e-02, 5.48127768956304e-02, 5.48842045027524e-02,
+ 5.49556321098744e-02, 5.50270597169964e-02, 5.50984873241184e-02, 5.51699149312404e-02,
+ 5.52413425383624e-02, 5.53127701454844e-02, 5.53841977526064e-02, 5.54556253597284e-02,
+ 5.55270529668504e-02, 5.55984805739723e-02, 5.56699081810943e-02, 5.57413357882163e-02,
+ 5.58127633953383e-02, 5.58841910024603e-02, 5.59556186095823e-02, 5.60270462167043e-02,
+ 5.60984738238263e-02, 5.61699014309483e-02, 5.62413290380703e-02, 5.63127566451923e-02,
+ 5.63841842523143e-02, 5.64556118594363e-02, 5.65270394665583e-02, 5.65984670736803e-02,
+ 5.66708454332434e-02, 5.67433239262377e-02, 5.68158024192321e-02, 5.68882809122264e-02,
+ 5.69607594052208e-02, 5.70332378982152e-02, 5.71057163912095e-02, 5.71781948842039e-02,
+ 5.72506733771983e-02, 5.73231518701926e-02, 5.73956303631870e-02, 5.74681088561813e-02,
+ 5.75405873491757e-02, 5.76130658421701e-02, 5.76855443351644e-02, 5.77580228281588e-02,
+ 5.78305013211532e-02, 5.79029798141475e-02, 5.79754583071419e-02, 5.80479368001362e-02,
+ 5.81204152931306e-02, 5.81928937861250e-02, 5.82653722791193e-02, 5.83378507721137e-02,
+ 5.84103292651081e-02, 5.84828077581024e-02, 5.85552862510968e-02, 5.86277647440911e-02,
+ 5.87002432370855e-02, 5.87727217300799e-02, 5.88452002230742e-02, 5.89176787160686e-02,
+ 5.89901572090629e-02, 5.90626357020573e-02, 5.91351141950517e-02, 5.92075926880460e-02,
+ 5.92800711810404e-02, 5.93525496740348e-02, 5.94250281670291e-02, 5.94975066600235e-02,
+ 5.95699851530178e-02, 5.96424636460122e-02, 5.97149421390066e-02, 5.97880576107171e-02,
+ 5.98617701856800e-02, 5.99354827606430e-02, 6.00091953356059e-02, 6.00829079105689e-02,
+ 6.01566204855318e-02, 6.02303330604948e-02, 6.03040456354577e-02, 6.03777582104207e-02,
+ 6.04514707853836e-02, 6.05251833603466e-02, 6.05988959353095e-02, 6.06726085102725e-02,
+ 6.07463210852354e-02, 6.08200336601984e-02, 6.08937462351614e-02, 6.09674588101243e-02,
+ 6.10411713850873e-02, 6.11148839600502e-02, 6.11885965350132e-02, 6.12623091099761e-02,
+ 6.13360216849391e-02, 6.14097342599020e-02, 6.14834468348650e-02, 6.15571594098279e-02,
+ 6.16308719847909e-02, 6.17045845597538e-02, 6.17782971347168e-02, 6.18520097096797e-02,
+ 6.19257222846427e-02, 6.19994348596056e-02, 6.20731474345686e-02, 6.21468600095315e-02,
+ 6.22205725844945e-02, 6.22942851594574e-02, 6.23679977344204e-02, 6.24417103093833e-02,
+ 6.25154228843463e-02, 6.25891354593092e-02, 6.26628480342722e-02, 6.27365606092351e-02,
+ 6.28102731841981e-02, 6.28839857591610e-02, 6.29588702262887e-02, 6.30339550408547e-02,
+ 6.31090398554208e-02, 6.31841246699868e-02, 6.32592094845528e-02, 6.33342942991188e-02,
+ 6.34093791136848e-02, 6.34844639282508e-02, 6.35595487428168e-02, 6.36346335573828e-02,
+ 6.37097183719489e-02, 6.37848031865149e-02, 6.38598880010809e-02, 6.39349728156469e-02,
+ 6.40100576302129e-02, 6.40851424447789e-02, 6.41602272593449e-02, 6.42353120739109e-02,
+ 6.43103968884770e-02, 6.43854817030430e-02, 6.44605665176090e-02, 6.45356513321750e-02,
+ 6.46107361467410e-02, 6.46858209613070e-02, 6.47609057758731e-02, 6.48359905904391e-02,
+ 6.49110754050051e-02, 6.49861602195711e-02, 6.50612450341371e-02, 6.51363298487031e-02,
+ 6.52114146632691e-02, 6.52864994778351e-02, 6.53615842924012e-02, 6.54366691069672e-02,
+ 6.55117539215332e-02, 6.55868387360992e-02, 6.56619235506652e-02, 6.57370083652312e-02,
+ 6.58120931797972e-02, 6.58871779943632e-02, 6.59622628089293e-02, 6.60373476234953e-02,
+ 6.61138632739589e-02, 6.61904208524911e-02, 6.62669784310233e-02, 6.63435360095555e-02,
+ 6.64200935880877e-02, 6.64966511666199e-02, 6.65732087451521e-02, 6.66497663236843e-02,
+ 6.67263239022165e-02, 6.68028814807487e-02, 6.68794390592809e-02, 6.69559966378131e-02,
+ 6.70325542163454e-02, 6.71091117948776e-02, 6.71856693734098e-02, 6.72622269519420e-02,
+ 6.73387845304742e-02, 6.74153421090064e-02, 6.74918996875386e-02, 6.75684572660708e-02,
+ 6.76450148446030e-02, 6.77215724231352e-02, 6.77981300016674e-02, 6.78746875801996e-02,
+ 6.79512451587319e-02, 6.80278027372641e-02, 6.81043603157963e-02, 6.81809178943285e-02,
+ 6.82574754728607e-02, 6.83340330513929e-02, 6.84105906299251e-02, 6.84871482084573e-02,
+ 6.85637057869895e-02, 6.86402633655217e-02, 6.87168209440539e-02, 6.87933785225861e-02,
+ 6.88699361011183e-02, 6.89464936796506e-02, 6.90230512581828e-02, 6.90996088367150e-02,
+ 6.91761664152472e-02, 6.92541051712954e-02, 6.93322063623404e-02, 6.94103075533855e-02,
+ 6.94884087444305e-02, 6.95665099354755e-02, 6.96446111265205e-02, 6.97227123175656e-02,
+ 6.98008135086106e-02, 6.98789146996556e-02, 6.99570158907006e-02, 7.00351170817457e-02,
+ 7.01132182727907e-02, 7.01913194638357e-02, 7.02694206548808e-02, 7.03475218459258e-02,
+ 7.04256230369708e-02, 7.05037242280158e-02, 7.05818254190609e-02, 7.06599266101059e-02,
+ 7.07380278011509e-02, 7.08161289921960e-02, 7.08942301832410e-02, 7.09723313742860e-02,
+ 7.10504325653310e-02, 7.11285337563761e-02, 7.12066349474211e-02, 7.12847361384661e-02,
+ 7.13628373295112e-02, 7.14409385205562e-02, 7.15190397116012e-02, 7.15971409026462e-02,
+ 7.16752420936913e-02, 7.17533432847363e-02, 7.18314444757813e-02, 7.19095456668263e-02,
+ 7.19876468578714e-02, 7.20657480489164e-02, 7.21438492399614e-02, 7.22219504310065e-02,
+ 7.23000516220515e-02, 7.23791563537155e-02, 7.24588508202985e-02, 7.25385452868815e-02,
+ 7.26182397534645e-02, 7.26979342200475e-02, 7.27776286866305e-02, 7.28573231532135e-02,
+ 7.29370176197965e-02, 7.30167120863795e-02, 7.30964065529625e-02, 7.31761010195455e-02,
+ 7.32557954861285e-02, 7.33354899527114e-02, 7.34151844192944e-02, 7.34948788858774e-02,
+ 7.35745733524604e-02, 7.36542678190434e-02, 7.37339622856264e-02, 7.38136567522094e-02,
+ 7.38933512187924e-02, 7.39730456853754e-02, 7.40527401519584e-02, 7.41324346185414e-02,
+ 7.42121290851244e-02, 7.42918235517073e-02, 7.43715180182903e-02, 7.44512124848733e-02,
+ 7.45309069514563e-02, 7.46106014180393e-02, 7.46902958846223e-02, 7.47699903512053e-02,
+ 7.48496848177883e-02, 7.49293792843713e-02, 7.50090737509543e-02, 7.50887682175373e-02,
+ 7.51684626841203e-02, 7.52481571507033e-02, 7.53278516172863e-02, 7.54075460838692e-02,
+ 7.54875176334651e-02, 7.55688425889174e-02, 7.56501675443697e-02, 7.57314924998220e-02,
+ 7.58128174552744e-02, 7.58941424107267e-02, 7.59754673661790e-02, 7.60567923216313e-02,
+ 7.61381172770836e-02, 7.62194422325359e-02, 7.63007671879883e-02, 7.63820921434406e-02,
+ 7.64634170988929e-02, 7.65447420543452e-02, 7.66260670097975e-02, 7.67073919652499e-02,
+ 7.67887169207022e-02, 7.68700418761545e-02, 7.69513668316068e-02, 7.70326917870591e-02,
+ 7.71140167425114e-02, 7.71953416979638e-02, 7.72766666534161e-02, 7.73579916088684e-02,
+ 7.74393165643207e-02, 7.75206415197730e-02, 7.76019664752254e-02, 7.76832914306777e-02,
+ 7.77646163861300e-02, 7.78459413415823e-02, 7.79272662970346e-02, 7.80085912524869e-02,
+ 7.80899162079392e-02, 7.81712411633916e-02, 7.82525661188439e-02, 7.83338910742962e-02,
+ 7.84152160297485e-02, 7.84965409852008e-02, 7.85778659406532e-02, 7.86600247036829e-02,
+ 7.87430134426713e-02, 7.88260021816596e-02, 7.89089909206480e-02, 7.89919796596364e-02,
+ 7.90749683986248e-02, 7.91579571376131e-02, 7.92409458766015e-02, 7.93239346155899e-02,
+ 7.94069233545783e-02, 7.94899120935666e-02, 7.95729008325550e-02, 7.96558895715434e-02,
+ 7.97388783105318e-02, 7.98218670495201e-02, 7.99048557885085e-02, 7.99878445274969e-02,
+ 8.00708332664853e-02, 8.01538220054736e-02, 8.02368107444620e-02, 8.03197994834504e-02,
+ 8.04027882224388e-02, 8.04857769614271e-02, 8.05687657004155e-02, 8.06517544394039e-02,
+ 8.07347431783923e-02, 8.08177319173806e-02, 8.09007206563690e-02, 8.09837093953574e-02,
+ 8.10666981343458e-02, 8.11496868733341e-02, 8.12326756123225e-02, 8.13156643513109e-02,
+ 8.13986530902993e-02, 8.14816418292876e-02, 8.15646305682760e-02, 8.16476193072644e-02,
+ 8.17306080462528e-02, 8.18146303207184e-02, 8.18993200503418e-02, 8.19840097799652e-02,
+ 8.20686995095887e-02, 8.21533892392121e-02, 8.22380789688355e-02, 8.23227686984589e-02,
+ 8.24074584280824e-02, 8.24921481577058e-02, 8.25768378873292e-02, 8.26615276169527e-02,
+ 8.27462173465761e-02, 8.28309070761995e-02, 8.29155968058230e-02, 8.30002865354464e-02,
+ 8.30849762650698e-02, 8.31696659946932e-02, 8.32543557243167e-02, 8.33390454539401e-02,
+ 8.34237351835635e-02, 8.35084249131870e-02, 8.35931146428104e-02, 8.36778043724338e-02,
+ 8.37624941020572e-02, 8.38471838316807e-02, 8.39318735613041e-02, 8.40165632909275e-02,
+ 8.41012530205510e-02, 8.41859427501744e-02, 8.42706324797978e-02, 8.43553222094212e-02,
+ 8.44400119390447e-02, 8.45247016686681e-02, 8.46093913982915e-02, 8.46940811279150e-02,
+ 8.47787708575384e-02, 8.48634605871618e-02, 8.49489812722663e-02, 8.50354198106719e-02,
+ 8.51218583490775e-02, 8.52082968874831e-02, 8.52947354258887e-02, 8.53811739642943e-02,
+ 8.54676125026999e-02, 8.55540510411055e-02, 8.56404895795111e-02, 8.57269281179168e-02,
+ 8.58133666563223e-02, 8.58998051947280e-02, 8.59862437331336e-02, 8.60726822715391e-02,
+ 8.61591208099447e-02, 8.62455593483503e-02, 8.63319978867559e-02, 8.64184364251615e-02,
+ 8.65048749635672e-02, 8.65913135019727e-02, 8.66777520403783e-02, 8.67641905787840e-02,
+ 8.68506291171895e-02, 8.69370676555951e-02, 8.70235061940008e-02, 8.71099447324064e-02,
+ 8.71963832708119e-02, 8.72828218092176e-02, 8.73692603476232e-02, 8.74556988860287e-02,
+ 8.75421374244344e-02, 8.76285759628399e-02, 8.77150145012456e-02, 8.78014530396512e-02,
+ 8.78878915780568e-02, 8.79743301164623e-02, 8.80609389570279e-02, 8.81491900046831e-02,
+ 8.82374410523383e-02, 8.83256920999936e-02, 8.84139431476487e-02, 8.85021941953039e-02,
+ 8.85904452429592e-02, 8.86786962906143e-02, 8.87669473382696e-02, 8.88551983859248e-02,
+ 8.89434494335800e-02, 8.90317004812352e-02, 8.91199515288904e-02, 8.92082025765456e-02,
+ 8.92964536242008e-02, 8.93847046718560e-02, 8.94729557195112e-02, 8.95612067671664e-02,
+ 8.96494578148216e-02, 8.97377088624768e-02, 8.98259599101320e-02, 8.99142109577872e-02,
+ 9.00024620054424e-02, 9.00907130530976e-02, 9.01789641007528e-02, 9.02672151484080e-02,
+ 9.03554661960632e-02, 9.04437172437184e-02, 9.05319682913736e-02, 9.06202193390288e-02,
+ 9.07084703866840e-02, 9.07967214343392e-02, 9.08849724819944e-02, 9.09732235296496e-02,
+ 9.10614745773048e-02, 9.11497256249600e-02, 9.12388486781543e-02, 9.13289955370249e-02,
+ 9.14191423958955e-02, 9.15092892547661e-02, 9.15994361136367e-02, 9.16895829725073e-02,
+ 9.17797298313779e-02, 9.18698766902485e-02, 9.19600235491191e-02, 9.20501704079897e-02,
+ 9.21403172668603e-02, 9.22304641257309e-02, 9.23206109846015e-02, 9.24107578434721e-02,
+ 9.25009047023427e-02, 9.25910515612133e-02, 9.26811984200838e-02, 9.27713452789544e-02,
+ 9.28614921378250e-02, 9.29516389966956e-02, 9.30417858555662e-02, 9.31319327144368e-02,
+ 9.32220795733074e-02, 9.33122264321780e-02, 9.34023732910486e-02, 9.34925201499192e-02,
+ 9.35826670087898e-02, 9.36728138676604e-02, 9.37629607265310e-02, 9.38531075854016e-02,
+ 9.39432544442722e-02, 9.40334013031428e-02, 9.41235481620134e-02, 9.42136950208840e-02,
+ 9.43038418797546e-02, 9.43951399902592e-02, 9.44872877687928e-02, 9.45794355473264e-02,
+ 9.46715833258600e-02, 9.47637311043936e-02, 9.48558788829272e-02, 9.49480266614608e-02,
+ 9.50401744399944e-02, 9.51323222185280e-02, 9.52244699970616e-02, 9.53166177755951e-02,
+ 9.54087655541287e-02, 9.55009133326623e-02, 9.55930611111959e-02, 9.56852088897295e-02,
+ 9.57773566682631e-02, 9.58695044467967e-02, 9.59616522253303e-02, 9.60538000038639e-02,
+ 9.61459477823975e-02, 9.62380955609311e-02, 9.63302433394647e-02, 9.64223911179983e-02,
+ 9.65145388965319e-02, 9.66066866750655e-02, 9.66988344535991e-02, 9.67909822321326e-02,
+ 9.68831300106663e-02, 9.69752777891998e-02, 9.70674255677334e-02, 9.71595733462670e-02,
+ 9.72517211248006e-02, 9.73438689033342e-02, 9.74360166818678e-02, 9.75291186484236e-02,
+ 9.76233951179826e-02, 9.77176715875416e-02, 9.78119480571006e-02, 9.79062245266596e-02,
+ 9.80005009962186e-02, 9.80947774657776e-02, 9.81890539353366e-02, 9.82833304048956e-02,
+ 9.83776068744546e-02, 9.84718833440136e-02, 9.85661598135726e-02, 9.86604362831316e-02,
+ 9.87547127526906e-02, 9.88489892222496e-02, 9.89432656918086e-02, 9.90375421613676e-02,
+ 9.91318186309266e-02, 9.92260951004856e-02, 9.93203715700446e-02, 9.94146480396036e-02,
+ 9.95089245091626e-02, 9.96032009787216e-02, 9.96974774482805e-02, 9.97917539178396e-02,
+ 9.98860303873985e-02, 9.99803068569575e-02, 1.00074583326517e-01, 1.00168859796076e-01,
+ 1.00263136265635e-01, 1.00357412735194e-01, 1.00451689204753e-01, 1.00545965674312e-01,
+ 1.00640451128772e-01, 1.00737006478306e-01, 1.00833561827840e-01, 1.00930117177373e-01,
+ 1.01026672526907e-01, 1.01123227876440e-01, 1.01219783225974e-01, 1.01316338575508e-01,
+ 1.01412893925041e-01, 1.01509449274575e-01, 1.01606004624109e-01, 1.01702559973642e-01,
+ 1.01799115323176e-01, 1.01895670672709e-01, 1.01992226022243e-01, 1.02088781371777e-01,
+ 1.02185336721310e-01, 1.02281892070844e-01, 1.02378447420378e-01, 1.02475002769911e-01,
+ 1.02571558119445e-01, 1.02668113468978e-01, 1.02764668818512e-01, 1.02861224168046e-01,
+ 1.02957779517579e-01, 1.03054334867113e-01, 1.03150890216647e-01, 1.03247445566180e-01,
+ 1.03344000915714e-01, 1.03440556265247e-01, 1.03537111614781e-01, 1.03633666964315e-01,
+ 1.03730222313848e-01, 1.03828057846511e-01, 1.03927063618595e-01, 1.04026069390678e-01,
+ 1.04125075162762e-01, 1.04224080934845e-01, 1.04323086706929e-01, 1.04422092479012e-01,
+ 1.04521098251096e-01, 1.04620104023179e-01, 1.04719109795263e-01, 1.04818115567346e-01,
+ 1.04917121339430e-01, 1.05016127111513e-01, 1.05115132883597e-01, 1.05214138655681e-01,
+ 1.05313144427764e-01, 1.05412150199848e-01, 1.05511155971931e-01, 1.05610161744015e-01,
+ 1.05709167516098e-01, 1.05808173288182e-01, 1.05907179060265e-01, 1.06006184832349e-01,
+ 1.06105190604432e-01, 1.06204196376516e-01, 1.06303202148599e-01, 1.06402207920683e-01,
+ 1.06501213692767e-01, 1.06600219464850e-01, 1.06699225236934e-01, 1.06798231009017e-01,
+ 1.06897236781101e-01, 1.06998248309796e-01, 1.07099895802696e-01, 1.07201543295596e-01,
+ 1.07303190788496e-01, 1.07404838281396e-01, 1.07506485774296e-01, 1.07608133267196e-01,
+ 1.07709780760097e-01, 1.07811428252997e-01, 1.07913075745897e-01, 1.08014723238797e-01,
+ 1.08116370731697e-01, 1.08218018224597e-01, 1.08319665717497e-01, 1.08421313210398e-01,
+ 1.08522960703298e-01, 1.08624608196198e-01, 1.08726255689098e-01, 1.08827903181998e-01,
+ 1.08929550674898e-01, 1.09031198167798e-01, 1.09132845660699e-01, 1.09234493153599e-01,
+ 1.09336140646499e-01, 1.09437788139399e-01, 1.09539435632299e-01, 1.09641083125199e-01,
+ 1.09742730618099e-01, 1.09844378111000e-01, 1.09946025603900e-01, 1.10047673096800e-01,
+ 1.10151662847834e-01, 1.10256161247631e-01, 1.10360659647428e-01, 1.10465158047226e-01,
+ 1.10569656447023e-01, 1.10674154846820e-01, 1.10778653246618e-01, 1.10883151646415e-01,
+ 1.10987650046212e-01, 1.11092148446010e-01, 1.11196646845807e-01, 1.11301145245604e-01,
+ 1.11405643645402e-01, 1.11510142045199e-01, 1.11614640444996e-01, 1.11719138844794e-01,
+ 1.11823637244591e-01, 1.11928135644388e-01, 1.12032634044186e-01, 1.12137132443983e-01,
+ 1.12241630843780e-01, 1.12346129243577e-01, 1.12450627643375e-01, 1.12555126043172e-01,
+ 1.12659624442969e-01, 1.12764122842767e-01, 1.12868621242564e-01, 1.12973119642361e-01,
+ 1.13077618042159e-01, 1.13182116441956e-01, 1.13288854046061e-01, 1.13396428521334e-01,
+ 1.13504002996607e-01, 1.13611577471880e-01, 1.13719151947153e-01, 1.13826726422426e-01,
+ 1.13934300897699e-01, 1.14041875372972e-01, 1.14149449848245e-01, 1.14257024323519e-01,
+ 1.14364598798792e-01, 1.14472173274065e-01, 1.14579747749338e-01, 1.14687322224611e-01,
+ 1.14794896699884e-01, 1.14902471175157e-01, 1.15010045650430e-01, 1.15117620125703e-01,
+ 1.15225194600976e-01, 1.15332769076250e-01, 1.15440343551523e-01, 1.15547918026796e-01,
+ 1.15655492502069e-01, 1.15763066977342e-01, 1.15870641452615e-01, 1.15978215927888e-01,
+ 1.16085790403161e-01, 1.16193364878434e-01, 1.16300939353707e-01, 1.16410154406744e-01,
+ 1.16521044363692e-01, 1.16631934320640e-01, 1.16742824277588e-01, 1.16853714234535e-01,
+ 1.16964604191483e-01, 1.17075494148431e-01, 1.17186384105379e-01, 1.17297274062327e-01,
+ 1.17408164019275e-01, 1.17519053976223e-01, 1.17629943933170e-01, 1.17740833890118e-01,
+ 1.17851723847066e-01, 1.17962613804014e-01, 1.18073503760962e-01, 1.18184393717910e-01,
+ 1.18295283674858e-01, 1.18406173631805e-01, 1.18517063588753e-01, 1.18627953545701e-01,
+ 1.18738843502649e-01, 1.18849733459597e-01, 1.18960623416545e-01, 1.19071513373493e-01,
+ 1.19182403330440e-01, 1.19293293287388e-01, 1.19404183244336e-01, 1.19515557486135e-01,
+ 1.19630015148298e-01, 1.19744472810461e-01, 1.19858930472624e-01, 1.19973388134787e-01,
+ 1.20087845796950e-01, 1.20202303459113e-01, 1.20316761121276e-01, 1.20431218783439e-01,
+ 1.20545676445602e-01, 1.20660134107765e-01, 1.20774591769928e-01, 1.20889049432091e-01,
+ 1.21003507094254e-01, 1.21117964756417e-01, 1.21232422418580e-01, 1.21346880080743e-01,
+ 1.21461337742906e-01, 1.21575795405069e-01, 1.21690253067232e-01, 1.21804710729395e-01,
+ 1.21919168391558e-01, 1.22033626053721e-01, 1.22148083715884e-01, 1.22262541378047e-01,
+ 1.22376999040210e-01, 1.22491456702373e-01, 1.22605914364536e-01, 1.22722903404403e-01,
+ 1.22841192849344e-01, 1.22959482294285e-01, 1.23077771739226e-01, 1.23196061184166e-01,
+ 1.23314350629107e-01, 1.23432640074048e-01, 1.23550929518989e-01, 1.23669218963930e-01,
+ 1.23787508408871e-01, 1.23905797853811e-01, 1.24024087298752e-01, 1.24142376743693e-01,
+ 1.24260666188634e-01, 1.24378955633575e-01, 1.24497245078516e-01, 1.24615534523456e-01,
+ 1.24733823968397e-01, 1.24852113413338e-01, 1.24970402858279e-01, 1.25088692303220e-01,
+ 1.25206981748161e-01, 1.25325271193101e-01, 1.25443560638042e-01, 1.25561850082983e-01,
+ 1.25680139527924e-01, 1.25798739160878e-01, 1.25921135915526e-01, 1.26043532670173e-01,
+ 1.26165929424821e-01, 1.26288326179469e-01, 1.26410722934116e-01, 1.26533119688764e-01,
+ 1.26655516443411e-01, 1.26777913198059e-01, 1.26900309952707e-01, 1.27022706707354e-01,
+ 1.27145103462002e-01, 1.27267500216649e-01, 1.27389896971297e-01, 1.27512293725944e-01,
+ 1.27634690480592e-01, 1.27757087235240e-01, 1.27879483989887e-01, 1.28001880744535e-01,
+ 1.28124277499182e-01, 1.28246674253830e-01, 1.28369071008478e-01, 1.28491467763125e-01,
+ 1.28613864517773e-01, 1.28736261272420e-01, 1.28858658027068e-01, 1.28982735861420e-01,
+ 1.29109527127026e-01, 1.29236318392632e-01, 1.29363109658238e-01, 1.29489900923844e-01,
+ 1.29616692189450e-01, 1.29743483455056e-01, 1.29870274720662e-01, 1.29997065986268e-01,
+ 1.30123857251874e-01, 1.30250648517481e-01, 1.30377439783087e-01, 1.30504231048693e-01,
+ 1.30631022314299e-01, 1.30757813579905e-01, 1.30884604845511e-01, 1.31011396111117e-01,
+ 1.31138187376723e-01, 1.31264978642329e-01, 1.31391769907936e-01, 1.31518561173542e-01,
+ 1.31645352439148e-01, 1.31772143704754e-01, 1.31898934970360e-01, 1.32025726235966e-01,
+ 1.32155240485840e-01, 1.32286726031897e-01, 1.32418211577953e-01, 1.32549697124009e-01,
+ 1.32681182670065e-01, 1.32812668216122e-01, 1.32944153762178e-01, 1.33075639308234e-01,
+ 1.33207124854290e-01, 1.33338610400347e-01, 1.33470095946403e-01, 1.33601581492459e-01,
+ 1.33733067038515e-01, 1.33864552584572e-01, 1.33996038130628e-01, 1.34127523676684e-01,
+ 1.34259009222740e-01, 1.34390494768797e-01, 1.34521980314853e-01, 1.34653465860909e-01,
+ 1.34784951406965e-01, 1.34916436953022e-01, 1.35047922499078e-01, 1.35179408045134e-01,
+ 1.35314214433777e-01, 1.35450708168161e-01, 1.35587201902545e-01, 1.35723695636929e-01,
+ 1.35860189371313e-01, 1.35996683105696e-01, 1.36133176840080e-01, 1.36269670574464e-01,
+ 1.36406164308848e-01, 1.36542658043232e-01, 1.36679151777616e-01, 1.36815645512000e-01,
+ 1.36952139246384e-01, 1.37088632980768e-01, 1.37225126715152e-01, 1.37361620449536e-01,
+ 1.37498114183920e-01, 1.37634607918304e-01, 1.37771101652688e-01, 1.37907595387072e-01,
+ 1.38044089121456e-01, 1.38180582855840e-01, 1.38317076590224e-01, 1.38456899684898e-01,
+ 1.38598731876501e-01, 1.38740564068103e-01, 1.38882396259706e-01, 1.39024228451308e-01,
+ 1.39166060642911e-01, 1.39307892834513e-01, 1.39449725026116e-01, 1.39591557217718e-01,
+ 1.39733389409321e-01, 1.39875221600923e-01, 1.40017053792526e-01, 1.40158885984128e-01,
+ 1.40300718175731e-01, 1.40442550367333e-01, 1.40584382558936e-01, 1.40726214750539e-01,
+ 1.40868046942141e-01, 1.41009879133744e-01, 1.41151711325346e-01, 1.41293543516949e-01,
+ 1.41435375708551e-01, 1.41579775513585e-01, 1.41727295616154e-01, 1.41874815718722e-01,
+ 1.42022335821290e-01, 1.42169855923859e-01, 1.42317376026427e-01, 1.42464896128995e-01,
+ 1.42612416231563e-01, 1.42759936334132e-01, 1.42907456436700e-01, 1.43054976539268e-01,
+ 1.43202496641837e-01, 1.43350016744405e-01, 1.43497536846973e-01, 1.43645056949541e-01,
+ 1.43792577052110e-01, 1.43940097154678e-01, 1.44087617257246e-01, 1.44235137359815e-01,
+ 1.44382657462383e-01, 1.44530177564951e-01, 1.44678510104713e-01, 1.44832090109334e-01,
+ 1.44985670113955e-01, 1.45139250118576e-01, 1.45292830123197e-01, 1.45446410127818e-01,
+ 1.45599990132439e-01, 1.45753570137060e-01, 1.45907150141681e-01, 1.46060730146302e-01,
+ 1.46214310150923e-01, 1.46367890155544e-01, 1.46521470160165e-01, 1.46675050164786e-01,
+ 1.46828630169407e-01, 1.46982210174028e-01, 1.47135790178649e-01, 1.47289370183270e-01,
+ 1.47442950187891e-01, 1.47596530192512e-01, 1.47750110197133e-01, 1.47907938755102e-01,
+ 1.48067976985934e-01, 1.48228015216766e-01, 1.48388053447598e-01, 1.48548091678430e-01,
+ 1.48708129909262e-01, 1.48868168140094e-01, 1.49028206370926e-01, 1.49188244601758e-01,
+ 1.49348282832590e-01, 1.49508321063422e-01, 1.49668359294254e-01, 1.49828397525087e-01,
+ 1.49988435755919e-01, 1.50148473986751e-01, 1.50308512217583e-01, 1.50468550448415e-01,
+ 1.50628588679247e-01, 1.50788626910079e-01, 1.50948719809772e-01, 1.51115645074619e-01,
+ 1.51282570339466e-01, 1.51449495604313e-01, 1.51616420869160e-01, 1.51783346134007e-01,
+ 1.51950271398855e-01, 1.52117196663702e-01, 1.52284121928549e-01, 1.52451047193396e-01,
+ 1.52617972458243e-01, 1.52784897723090e-01, 1.52951822987937e-01, 1.53118748252784e-01,
+ 1.53285673517631e-01, 1.53452598782478e-01, 1.53619524047325e-01, 1.53786449312173e-01,
+ 1.53953374577020e-01, 1.54121540238759e-01, 1.54295816252825e-01, 1.54470092266891e-01,
+ 1.54644368280957e-01, 1.54818644295022e-01, 1.54992920309088e-01, 1.55167196323154e-01,
+ 1.55341472337220e-01, 1.55515748351286e-01, 1.55690024365352e-01, 1.55864300379418e-01,
+ 1.56038576393483e-01, 1.56212852407549e-01, 1.56387128421615e-01, 1.56561404435681e-01,
+ 1.56735680449747e-01, 1.56909956463813e-01, 1.57084232477879e-01, 1.57259483682400e-01,
+ 1.57441613698679e-01, 1.57623743714958e-01, 1.57805873731237e-01, 1.57988003747517e-01,
+ 1.58170133763796e-01, 1.58352263780075e-01, 1.58534393796354e-01, 1.58716523812634e-01,
+ 1.58898653828913e-01, 1.59080783845192e-01, 1.59262913861471e-01, 1.59445043877751e-01,
+ 1.59627173894030e-01, 1.59809303910309e-01, 1.59991433926588e-01, 1.60173563942868e-01,
+ 1.60355693959147e-01, 1.60545030204578e-01, 1.60735561805417e-01, 1.60926093406257e-01,
+ 1.61116625007096e-01, 1.61307156607936e-01, 1.61497688208775e-01, 1.61688219809615e-01,
+ 1.61878751410454e-01, 1.62069283011293e-01, 1.62259814612133e-01, 1.62450346212972e-01,
+ 1.62640877813812e-01, 1.62831409414651e-01, 1.63021941015491e-01, 1.63212472616330e-01,
+ 1.63403004217170e-01, 1.63596709137928e-01, 1.63796239166261e-01, 1.63995769194595e-01,
+ 1.64195299222928e-01, 1.64394829251261e-01, 1.64594359279595e-01, 1.64793889307928e-01,
+ 1.64993419336262e-01, 1.65192949364595e-01, 1.65392479392929e-01, 1.65592009421262e-01,
+ 1.65791539449596e-01, 1.65991069477929e-01, 1.66190599506263e-01, 1.66390129534596e-01,
+ 1.66589659562930e-01, 1.66794901484356e-01, 1.67004081116882e-01, 1.67213260749408e-01,
+ 1.67422440381934e-01, 1.67631620014460e-01, 1.67840799646986e-01, 1.68049979279512e-01,
+ 1.68259158912038e-01, 1.68468338544564e-01, 1.68677518177090e-01, 1.68886697809616e-01,
+ 1.69095877442142e-01, 1.69305057074668e-01, 1.69514236707194e-01, 1.69723416339720e-01,
+ 1.69938379754606e-01, 1.70157919739998e-01, 1.70377459725389e-01, 1.70596999710781e-01,
+ 1.70816539696172e-01, 1.71036079681563e-01, 1.71255619666955e-01, 1.71475159652346e-01,
+ 1.71694699637737e-01, 1.71914239623129e-01, 1.72133779608520e-01, 1.72353319593912e-01,
+ 1.72572859579303e-01, 1.72792399564694e-01, 1.73014545943377e-01, 1.73245222044433e-01,
+ 1.73475898145490e-01, 1.73706574246546e-01, 1.73937250347603e-01, 1.74167926448659e-01,
+ 1.74398602549716e-01, 1.74629278650772e-01, 1.74859954751829e-01, 1.75090630852885e-01,
+ 1.75321306953942e-01, 1.75551983054998e-01, 1.75782659156055e-01, 1.76013335257111e-01,
+ 1.76251217107308e-01, 1.76493875795689e-01, 1.76736534484071e-01, 1.76979193172452e-01,
+ 1.77221851860834e-01, 1.77464510549215e-01, 1.77707169237597e-01, 1.77949827925979e-01,
+ 1.78192486614360e-01, 1.78435145302742e-01, 1.78677803991123e-01, 1.78920462679505e-01,
+ 1.79163121367886e-01, 1.79414063531978e-01, 1.79669627987425e-01, 1.79925192442871e-01,
+ 1.80180756898318e-01, 1.80436321353765e-01, 1.80691885809211e-01, 1.80947450264658e-01,
+ 1.81203014720105e-01, 1.81458579175552e-01, 1.81714143630998e-01, 1.81969708086445e-01,
+ 1.82225272541892e-01, 1.82485522246531e-01, 1.82754998709930e-01, 1.83024475173330e-01,
+ 1.83293951636729e-01, 1.83563428100128e-01, 1.83832904563527e-01, 1.84102381026926e-01,
+ 1.84371857490325e-01, 1.84641333953724e-01, 1.84910810417123e-01, 1.85180286880522e-01,
+ 1.85449763343921e-01, 1.85729249789295e-01, 1.86013734311555e-01, 1.86298218833815e-01,
+ 1.86582703356075e-01, 1.86867187878335e-01, 1.87151672400595e-01, 1.87436156922856e-01,
+ 1.87720641445116e-01, 1.88005125967376e-01, 1.88289610489636e-01, 1.88574095011896e-01,
+ 1.88868507791128e-01, 1.89169193409097e-01, 1.89469879027065e-01, 1.89770564645034e-01,
+ 1.90071250263003e-01, 1.90371935880971e-01, 1.90672621498940e-01, 1.90973307116908e-01,
+ 1.91273992734877e-01, 1.91574678352845e-01, 1.91878063289028e-01, 1.92196247646798e-01,
+ 1.92514432004567e-01, 1.92832616362337e-01, 1.93150800720106e-01, 1.93468985077876e-01,
+ 1.93787169435645e-01, 1.94105353793415e-01, 1.94423538151185e-01, 1.94741722508954e-01,
+ 1.95065028884959e-01, 1.95402122304863e-01, 1.95739215724767e-01, 1.96076309144671e-01,
+ 1.96413402564575e-01, 1.96750495984479e-01, 1.97087589404383e-01, 1.97424682824287e-01,
+ 1.97761776244191e-01, 1.98098869664095e-01, 1.98455216008150e-01, 1.98812750000395e-01,
+ 1.99170283992639e-01, 1.99527817984883e-01, 1.99885351977128e-01, 2.00242885969372e-01,
+ 2.00600419961616e-01, 2.00957953953860e-01, 2.01318720736103e-01, 2.01698356918016e-01,
+ 2.02077993099929e-01, 2.02457629281842e-01, 2.02837265463755e-01, 2.03216901645668e-01,
+ 2.03596537827581e-01, 2.03976174009494e-01, 2.04355810191407e-01, 2.04756067896669e-01,
+ 2.05159607269131e-01, 2.05563146641594e-01, 2.05966686014056e-01, 2.06370225386518e-01,
+ 2.06773764758980e-01, 2.07177304131443e-01, 2.07582648606096e-01, 2.08012041101167e-01,
+ 2.08441433596238e-01, 2.08870826091309e-01, 2.09300218586380e-01, 2.09729611081452e-01,
+ 2.10159003576523e-01, 2.10588396071594e-01, 2.11038651655497e-01, 2.11496005819557e-01,
+ 2.11953359983617e-01, 2.12410714147678e-01, 2.12868068311738e-01, 2.13325422475799e-01,
+ 2.13782776639859e-01, 2.14266444203247e-01, 2.14754036807121e-01, 2.15241629410995e-01,
+ 2.15729222014868e-01, 2.16216814618742e-01, 2.16704407222616e-01, 2.17205752934267e-01,
+ 2.17726038198899e-01, 2.18246323463531e-01, 2.18766608728163e-01, 2.19286893992795e-01,
+ 2.19807179257428e-01, 2.20340764559086e-01, 2.20896382547034e-01, 2.21452000534982e-01,
+ 2.22007618522930e-01, 2.22563236510879e-01, 2.23118854498827e-01, 2.23701819308187e-01,
+ 2.24295602855852e-01, 2.24889386403517e-01, 2.25483169951182e-01, 2.26076953498847e-01,
+ 2.26688057033626e-01, 2.27323036390069e-01, 2.27958015746513e-01, 2.28592995102956e-01,
+ 2.29227974459400e-01, 2.29883741376383e-01, 2.30563145483535e-01, 2.31242549590688e-01,
+ 2.31921953697840e-01, 2.32601357804993e-01, 2.33320919550489e-01, 2.34048172666141e-01,
+ 2.34775425781794e-01, 2.35502678897447e-01, 2.36256439954327e-01, 2.37035152114212e-01,
+ 2.37813864274098e-01, 2.38592576433984e-01, 2.39397622785965e-01, 2.40231572462306e-01,
+ 2.41065522138646e-01, 2.41899471814987e-01, 2.42775177819830e-01, 2.43668285106087e-01,
+ 2.44561392392344e-01, 2.45466171158374e-01, 2.46422459936795e-01, 2.47378748715215e-01,
+ 2.48335037493635e-01, 2.49351607129654e-01, 2.50375154996936e-01, 2.51398702864218e-01,
+ 2.52481014463110e-01, 2.53575889715985e-01, 2.54670764968861e-01, 2.55837307593351e-01,
+ 2.57007493299830e-01, 2.58198585975621e-01, 2.59447892032588e-01, 2.60697198089555e-01,
+ 2.62008254963215e-01, 2.63340219984995e-01, 2.64705318633186e-01, 2.66123104427433e-01,
+ 2.67555759108389e-01, 2.69062041273035e-01, 2.70575593932680e-01, 2.72172452683268e-01,
+ 2.73779513305127e-01, 2.75468329003322e-01, 2.77180173457561e-01, 2.78961531516799e-01,
+ 2.80787492094054e-01, 2.82661102075868e-01, 2.84607990704238e-01, 2.86590777336652e-01,
+ 2.88644232055563e-01, 2.90755313692459e-01, 2.92910930649760e-01, 2.95131512667144e-01,
+ 2.97412239104456e-01, 2.99738776632423e-01, 3.02112190108917e-01, 3.04544037446628e-01,
+ 3.07021458655111e-01, 3.09537199969449e-01, 3.12088900485652e-01, 3.14673499757250e-01,
+ 3.17291022051173e-01, 3.19933784794038e-01, 3.22595630345698e-01, 3.25273088912786e-01,
+ 3.27962787407004e-01, 3.30661552256007e-01, 3.33366483208850e-01, 3.36075103190757e-01,
+ 3.38784306163979e-01, 3.41492406444462e-01, 3.44198026343816e-01, 3.46900046450106e-01,
+ 3.49597585494681e-01, 3.52289978770169e-01, 3.54975746595658e-01, 3.57655376987606e-01,
+ 3.60329116066223e-01, 3.62997174150817e-01, 3.65659927204786e-01, 3.68317917667059e-01,
+ 3.70971723471983e-01, 3.73622351170105e-01, 3.76271880581320e-01, 3.78921913664762e-01,
+ 3.81574297562700e-01, 3.84231148753636e-01, 3.86894888652845e-01, 3.89570754260451e-01,
+ 3.92261642961486e-01, 3.94970889094212e-01, 3.97702713730152e-01, 4.00461855887295e-01,
+ 4.03253635960788e-01, 4.06084007831848e-01, 4.08959585634668e-01, 4.11889190529842e-01,
+ 4.14881292235322e-01, 4.17940724901119e-01, 4.21075352663039e-01, 4.24293071157087e-01,
+ 4.27601549749348e-01, 4.31013044154295e-01, 4.34534170017544e-01, 4.38167951304453e-01,
+ 4.41918713320325e-01, 4.45789963584842e-01, 4.49787025174792e-01, 4.53933354991007e-01,
+ 4.58212646846723e-01, 4.62638677282161e-01, 4.67235457821617e-01, 4.71994360080444e-01,
+ 4.76954731024906e-01, 4.82115767079196e-01, 4.87495811161346e-01, 4.93141450726056e-01,
+ 4.99075876279351e-01, 5.05271243300199e-01, 5.11629497711389e-01, 5.18148719520116e-01,
+ 5.24835265957011e-01, 5.31698392204740e-01, 5.38747892582555e-01, 5.45986348159312e-01,
+ 5.53420491380224e-01, 5.61072089704552e-01, 5.68935901588571e-01, 5.77035707536841e-01,
+ 5.85371528601824e-01, 5.93962979633147e-01, 6.02823199184070e-01, 6.11963046561620e-01,
+ 6.21398711356693e-01, 6.31146738252482e-01, 6.41224039969263e-01, 6.51655079623584e-01,
+ 6.62457133869884e-01, 6.73652061656966e-01, 6.85266549839217e-01, 6.97331825021950e-01,
+ 7.09873756377331e-01, 7.22926082208405e-01, 7.36529921920877e-01, 7.50723724790753e-01,
+ 7.65554072319599e-01, 7.81071318922943e-01, 7.97334357458327e-01, 8.14404358312052e-01,
+ 8.32364049811323e-01, 8.51288239554377e-01, 8.71273099497059e-01, 8.92433907133971e-01,
+ 9.14890547589010e-01, 9.38796601397143e-01, 9.64317359511668e-01, 9.91657662753328e-01,
+ 1.02105642009513e+00, 1.05279827147114e+00, 1.08722643327370e+00, 1.12475266690578e+00,
+ 1.16587670379133e+00, 1.21120721857038e+00, 1.26148396371554e+00, 1.31759590854386e+00,
+ 1.38059896550716e+00, 1.45169630271167e+00, 1.53216715145259e+00, 1.62322972074617e+00,
+ 1.72581132735448e+00, 1.84037437150960e+00, 1.96702944817193e+00, 2.10618750048550e+00,
+ 2.25992837352706e+00, 2.43478331777305e+00, 2.65118921206929e+00, 3.14159265358979e+00
+ };
struct mem_allocator allocator;
struct sampler_context sampler_ctx;
struct sschiff_device* dev;
@@ -86,10 +591,21 @@ main(int argc, char** argv)
struct sschiff_estimator* estimator;
struct sschiff_cross_section cross_section;
struct ssp_rng* rng;
+ struct sschiff_state result;
+ const struct sschiff_state* val;
+ const struct sschiff_state* func = NULL;
+ const struct sschiff_state* cumul = NULL;
+ struct cross_section_result cross_section_result;
+ double* thetas = NULL;
+ double interval[2];
+ double n;
+ const double* angles = NULL;
const double wavelength = 0.4; /* In micron */
const size_t nscatt_angles = 1000;
- const size_t ngeoms = 10000;
+ const size_t ngeoms = 10000000;
const size_t ndirs = 10;
+ size_t count;
+ size_t i;
(void)argc, (void)argv;
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
@@ -99,6 +615,13 @@ main(int argc, char** argv)
geometry_init_cylinder(&sampler_ctx.geometry, 64);
+ cross_section_result.absorption_E = 2.81148276917168e-1;
+ cross_section_result.absorption_SE = 1.66164880454417e-04;
+ cross_section_result.extinction_E = 2.76750904574817;
+ cross_section_result.extinction_SE = 2.34364058801497e-03;
+ cross_section_result.scattering_E = 2.48636076883100;
+ cross_section_result.scattering_SE = 2.18576316720418e-03;
+
sampler_ctx.aspect_ratio = 0.263;
sampler_ctx.mean_radius = 0.983;
sampler_ctx.sigma = 1.1374;
@@ -117,16 +640,154 @@ main(int argc, char** argv)
(estimator, 0, &cross_section), RES_OK);
printf("Wavelength = %g micron\n", wavelength);
- printf(" Extinction ~ %9.3g +/- %9.3g\n",
- cross_section.extinction.E, cross_section.extinction.SE);
- printf(" Absorption ~ %9.3g +/- %9.3g\n",
- cross_section.absorption.E, cross_section.absorption.SE);
- printf(" Scattering ~ %9.3g +/- %9.3g\n",
- cross_section.scattering.E, cross_section.scattering.SE);
+
+ result.E = cross_section_result.extinction_E;
+ result.SE = cross_section_result.extinction_SE;
+ val = &cross_section.extinction;
+ compute_estimation_intersection(interval, 4, &result, val);
+ printf(" Extinction = %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
+ result.E, result.SE, val->E, val->SE, interval[1]-interval[0]);
+
+ result.E = cross_section_result.absorption_E;
+ result.SE = cross_section_result.absorption_SE;
+ val = &cross_section.absorption;
+ compute_estimation_intersection(interval, 4, &result, val);
+ printf(" Absorption = %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
+ result.E, result.SE, val->E, val->SE, interval[1]-interval[0]);
+
+ result.E = cross_section_result.scattering_E;
+ result.SE = cross_section_result.scattering_SE;
+ val = &cross_section.scattering;
+ compute_estimation_intersection(interval, 4, &result, val);
+ printf(" Scattering = %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
+ result.E, result.SE, val->E, val->SE, interval[1]-interval[0]);
+
printf(" Proj area ~ %9.3g +/- %9.3g\n",
cross_section.average_projected_area.E,
cross_section.average_projected_area.SE);
+ CHECK(sschiff_estimator_get_scattering_angles(estimator, &angles, &count), RES_OK);
+ CHECK(count, nscatt_angles);
+
+ #define LIMIT_ANGLE sschiff_estimator_get_limit_scattering_angle_index
+ CHECK(LIMIT_ANGLE(NULL, 1, NULL), RES_BAD_ARG);
+ CHECK(LIMIT_ANGLE(estimator, 1, NULL), RES_BAD_ARG);
+ CHECK(LIMIT_ANGLE(NULL, 0, NULL), RES_BAD_ARG);
+ CHECK(LIMIT_ANGLE(estimator, 0, NULL), RES_BAD_ARG);
+ CHECK(LIMIT_ANGLE(NULL, 1, &i), RES_BAD_ARG);
+ CHECK(LIMIT_ANGLE(estimator, 1, &i), RES_BAD_ARG);
+ CHECK(LIMIT_ANGLE(NULL, 0, &i), RES_BAD_ARG);
+ CHECK(LIMIT_ANGLE(estimator, 0, &i), RES_OK);
+ #undef LIMIT_ANGLE
+ CHECK(i < count, 1);
+ printf(" Limit angle = %g radians; ", angles[i]);
+
+ #define GET_N sschiff_estimator_get_wide_scattering_angle_model_parameter
+ CHECK(GET_N(NULL, 1, NULL), RES_BAD_ARG);
+ CHECK(GET_N(estimator, 1, NULL), RES_BAD_ARG);
+ CHECK(GET_N(NULL, 0, NULL), RES_BAD_ARG);
+ CHECK(GET_N(estimator, 0, NULL), RES_BAD_ARG);
+ CHECK(GET_N(NULL, 1, &n), RES_BAD_ARG);
+ CHECK(GET_N(estimator, 1, &n), RES_BAD_ARG);
+ CHECK(GET_N(NULL, 0, &n), RES_BAD_ARG);
+ CHECK(GET_N(estimator, 0, &n), RES_OK);
+ #undef GET_N
+ printf("n = %g; ", n);
+
+ #define DIFF_XSECTION sschiff_estimator_get_differential_cross_section
+ CHECK(DIFF_XSECTION(NULL, 1, nscatt_angles, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(estimator, 1, nscatt_angles, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(NULL, 0, nscatt_angles, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(estimator, 0, nscatt_angles, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(NULL, 1, i, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(estimator, 1, i, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(NULL, 0, i, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(estimator, 0, i, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(NULL, 1, nscatt_angles, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(estimator, 1, nscatt_angles, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(NULL, 0, nscatt_angles, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(estimator, 0, nscatt_angles, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(NULL, 1, i, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(estimator, 1, i, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(NULL, 0, i, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION(estimator, 0, i, &result), RES_OK);
+ #undef DIFF_XSECTION
+ printf("Ws = %g +/- %g; ", result.E, result.SE);
+
+ #define DIFF_XSECTION_CUMUL \
+ sschiff_estimator_get_differential_cross_section_cumulative
+ CHECK(DIFF_XSECTION_CUMUL(NULL, 1, nscatt_angles, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(estimator, 1, nscatt_angles, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(NULL, 0, nscatt_angles, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(estimator, 0, nscatt_angles, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(NULL, 1, i, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(estimator, 1, i, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(NULL, 0, i, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(estimator, 0, i, NULL), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(NULL, 1, nscatt_angles, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(estimator, 1, nscatt_angles, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(NULL, 0, nscatt_angles, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(estimator, 0, nscatt_angles, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(NULL, 1, i, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(estimator, 1, i, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(NULL, 0, i, &result), RES_BAD_ARG);
+ CHECK(DIFF_XSECTION_CUMUL(estimator, 0, i, &result), RES_OK);
+ #undef DIFF_XSECTION_CUMUL
+ printf("Wc = %g +/- %g\n", result.E, result.SE);
+
+ #define PHASE_FUNCTION sschiff_estimator_get_phase_function
+ CHECK(PHASE_FUNCTION(NULL, 1, NULL), RES_BAD_ARG);
+ CHECK(PHASE_FUNCTION(estimator, 1, NULL), RES_BAD_ARG);
+ CHECK(PHASE_FUNCTION(NULL, 0, NULL), RES_BAD_ARG);
+ CHECK(PHASE_FUNCTION(estimator, 0, NULL), RES_BAD_ARG);
+ CHECK(PHASE_FUNCTION(NULL, 1, &func), RES_BAD_ARG);
+ CHECK(PHASE_FUNCTION(estimator, 1, &func), RES_BAD_ARG);
+ CHECK(PHASE_FUNCTION(NULL, 0, &func), RES_BAD_ARG);
+ CHECK(PHASE_FUNCTION(estimator, 0, &func), RES_OK);
+ #undef PHASE_FUNCTION
+
+ #define CUMULATIVE sschiff_estimator_get_phase_function_cumulative
+ CHECK(CUMULATIVE(NULL, 1, NULL), RES_BAD_ARG);
+ CHECK(CUMULATIVE(estimator, 1, NULL), RES_BAD_ARG);
+ CHECK(CUMULATIVE(NULL, 0, NULL), RES_BAD_ARG);
+ CHECK(CUMULATIVE(estimator, 0, NULL), RES_BAD_ARG);
+ CHECK(CUMULATIVE(NULL, 1, &cumul), RES_BAD_ARG);
+ CHECK(CUMULATIVE(estimator, 1, &cumul), RES_BAD_ARG);
+ CHECK(CUMULATIVE(NULL, 0, &cumul), RES_BAD_ARG);
+ CHECK(CUMULATIVE(estimator, 0, &cumul), RES_OK);
+ #undef CUMULATIVE
+
+ NCHECK(sa_add(thetas, 2000), NULL);
+ #define INV_CUMULATIVE sschiff_estimator_inverse_cumulative_phase_function
+ CHECK(INV_CUMULATIVE(NULL, 1, NULL, 0), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(estimator, 1, NULL, 0), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(NULL, 0, NULL, 0), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(estimator, 0, NULL, 0), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(NULL, 1, thetas, 0), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(estimator, 1, thetas, 0), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(NULL, 0, thetas, 0), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(estimator, 0, thetas, 0), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(NULL, 1, NULL, 2), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(estimator, 1, NULL, 2), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(NULL, 0, NULL, 2), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(estimator, 0, NULL, 2), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(NULL, 1, thetas, 2), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(estimator, 1, thetas, 2), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(NULL, 0, thetas, 2), RES_BAD_ARG);
+ CHECK(INV_CUMULATIVE(estimator, 0, thetas, 2), RES_OK);
+ CHECK(eq_eps(thetas[0], 0, 1.e-6), 1);
+ CHECK(eq_eps(thetas[1], PI, 1.e-6), 1);
+ CHECK(INV_CUMULATIVE(estimator, 0, thetas, sa_size(thetas)), RES_OK);
+ #undef INV_CUMULATIVE
+
+ FOR_EACH(i, 0, 2000) {
+ double error;
+ error = fabs(thetas[i] - thetas_result[i]) / thetas_result[i];
+ printf("%d - reference = %.6f; thetas = %.6f; err = %.3f%%\n",
+ (int)i, thetas[i], thetas_result[i], error*100);
+ }
+ sa_release(thetas);
+
CHECK(sschiff_estimator_ref_put(estimator), RES_OK);
CHECK(sschiff_device_ref_put(dev), RES_OK);
CHECK(ssp_rng_ref_put(rng), RES_OK);
diff --git a/src/test_sschiff_utils.h b/src/test_sschiff_utils.h
@@ -328,6 +328,23 @@ sphere_setup_s3d_shape(struct sphere* sphere, struct s3d_shape* shape)
/*******************************************************************************
* Miscellaneous functions
******************************************************************************/
+static INLINE void
+compute_estimation_intersection
+ (double intersection[2],
+ const double scale,
+ const struct sschiff_state* state0,
+ const struct sschiff_state* state1)
+{
+ double interval0[2], interval1[2];
+ CHECK(scale > 0, 1);
+ interval0[0] = state0->E - scale*state0->SE;
+ interval0[1] = state0->E + scale*state0->SE;
+ interval1[0] = state1->E - scale*state1->SE;
+ interval1[1] = state1->E + scale*state1->SE;
+ intersection[0] = MMAX(interval0[0], interval1[0]);
+ intersection[1] = MMIN(interval0[1], interval1[1]);
+}
+
static void
check_memory_allocator(struct mem_allocator* allocator)
{