From 2edcfc0233ef20269baa9822edcb7664220c0779 Mon Sep 17 00:00:00 2001 From: Brett Naul Date: Wed, 30 Sep 2015 16:58:26 -0700 Subject: [PATCH] Revert "Remove mltsp.TCP module" This reverts commit 0120754283cb34b024fc2dea32e3ec0d3e77a8db. For now, restore TCP module to simplify the refactor pull request. Will remove TCP later after the replacement code has been merged. --- .../Algorithms/Debil/Phot/dotastro220107.dat | 441 + mltsp/TCP/Algorithms/Debil/README | 68 + mltsp/TCP/Algorithms/Debil/debil.c | 2691 + .../Algorithms/Debil/dotastro220107.dat.data | 433 + .../Algorithms/Debil/dotastro220107.dat.fit | 500 + mltsp/TCP/Algorithms/Debil/test.in | 1 + mltsp/TCP/Algorithms/Debil/test.out | 1 + .../Algorithms/EclFeatures/013113-7829.1.xml | 773 + mltsp/TCP/Algorithms/EclFeatures/LC_246.dat | 468 + mltsp/TCP/Algorithms/EclFeatures/README | 34 + .../EclFeatures/eclipse_features.py | 423 + mltsp/TCP/Algorithms/EclFeatures/lc0.dat | 468 + mltsp/TCP/Algorithms/EclFeatures/numc_eigs.py | 143 + mltsp/TCP/Algorithms/EclFeatures/polyfit.c | 963 + mltsp/TCP/Algorithms/EclFeatures/polyfit.h | 36 + mltsp/TCP/Algorithms/EclFeatures/selectp.py | 207 + mltsp/TCP/Algorithms/PTF_SN_classifier.py | 349 + .../Algorithms/SpatialClustering/cluster.py | 529 + .../SpatialClustering/obj_dict.pickle | 3507 + .../SpatialClustering/obj_dict_309.pickle | 73822 ++++++++++++++++ mltsp/TCP/Algorithms/__init__.py | 1 + mltsp/TCP/Algorithms/asas_catalog.R | 543 + mltsp/TCP/Algorithms/class_cv.R | 704 + mltsp/TCP/Algorithms/classify_Deb.R | 365 + .../compare_randforest_classifiers.py | 331 + mltsp/TCP/Algorithms/count_class_names.py | 114 + mltsp/TCP/Algorithms/cp_noise_files.py | 142 + .../Algorithms/debosscher_vosourcexml_copy.sh | 1393 + mltsp/TCP/Algorithms/do_qsoy.py | 28 + ...evaluate_eclipsing_classifs_using_fiteb.py | 1480 + ...e_1_ajax_retrieves_json_from_phpmysql.html | 30 + ...e_1_givenpost_mysqlqueries_returnsjson.php | 55 + .../Algorithms/example_parse_vosourcexml.py | 165 + .../av_lombtest_tcp_source(32data).png | Bin 0 -> 32018 bytes mltsp/TCP/Algorithms/fitcurve/bad_fit.png | Bin 0 -> 36861 bytes mltsp/TCP/Algorithms/fitcurve/compare_fit.png | Bin 0 -> 38011 bytes mltsp/TCP/Algorithms/fitcurve/cv_dotastro.txt | 62 + mltsp/TCP/Algorithms/fitcurve/fitted_cv.png | Bin 0 -> 38011 bytes .../harmonics_phase_(189.312|n_0p05820).png | Bin 0 -> 34591 bytes .../fitcurve/harmonics_phase_plot.png | Bin 0 -> 33309 bytes mltsp/TCP/Algorithms/fitcurve/lightcurve.py | 1071 + mltsp/TCP/Algorithms/fitcurve/linfit.py | 31 + .../lomb_period_fit(srcid_2570332).png | Bin 0 -> 34319 bytes .../lomb_period_fit(srcid_2758348).png | Bin 0 -> 37372 bytes mltsp/TCP/Algorithms/fitcurve/lomb_scargle.py | 888 + .../fitcurve/lomb_scargle_refine.py | 183 + mltsp/TCP/Algorithms/fitcurve/lombcheck_1.png | Bin 0 -> 24757 bytes mltsp/TCP/Algorithms/fitcurve/lombcheck_2.png | Bin 0 -> 22674 bytes mltsp/TCP/Algorithms/fitcurve/lombcheck_3.png | Bin 0 -> 24737 bytes mltsp/TCP/Algorithms/fitcurve/lombcheck_4.png | Bin 0 -> 23237 bytes .../lombtest_(45data)_realbogus_p018.png | Bin 0 -> 32616 bytes .../fitcurve/lombtest_less_samp.png | Bin 0 -> 38128 bytes .../fitcurve/lombtest_tcp_source(32data).png | Bin 0 -> 32462 bytes .../fitcurve/lombtest_tcp_source(45data).png | Bin 0 -> 37251 bytes .../fitcurve/lombtest_well_samp.png | Bin 0 -> 38565 bytes mltsp/TCP/Algorithms/fitcurve/ls_support.py | 202 + .../Algorithms/fitcurve/multi_harmonic_fit.py | 224 + mltsp/TCP/Algorithms/fitcurve/numc_eigs.py | 143 + .../observatory_source_interface_LGC.py | 444 + .../fitcurve/period_folded_model.txt | 13 + .../fitcurve/period_folded_progenitor.txt | 32 + mltsp/TCP/Algorithms/fitcurve/phase_data.xml | 256 + .../fitcurve/phase_fold_(50 datapoints).png | Bin 0 -> 34124 bytes mltsp/TCP/Algorithms/fitcurve/pre_whiten.py | 289 + mltsp/TCP/Algorithms/fitcurve/progenitor.txt | 32 + .../Algorithms/fitcurve/scipy_interpolate.png | Bin 0 -> 34689 bytes .../fitcurve/scipy_interpolate_splrep.png | Bin 0 -> 38128 bytes mltsp/TCP/Algorithms/fitcurve/spline_fit.py | 119 + mltsp/TCP/Algorithms/fitcurve/test.txt | 231 + .../fitcurve/test_lomb_scargle_refine.py | 201 + .../fitcurve/weird_first_generation_phase.png | Bin 0 -> 34343 bytes mltsp/TCP/Algorithms/fiteb.py | 734 + .../TCP/Algorithms/generate_arff_using_xml.py | 49 + mltsp/TCP/Algorithms/generate_summary.py | 30 + mltsp/TCP/Algorithms/ipengine_kill.py | 25 + mltsp/TCP/Algorithms/macc_wrapper.py | 114 + .../migrate_local_test_mysql_to_raid0.sh | 23 + mltsp/TCP/Algorithms/missForest.R | 284 + mltsp/TCP/Algorithms/mlens_plots.py | 44 + mltsp/TCP/Algorithms/python_example.py | 385 + mltsp/TCP/Algorithms/qso_fit.py | 298 + .../TCP/Algorithms/randomforest_breiman_v51.f | 3434 + .../Algorithms/randomforest_parf_fortran.py | 65 + .../Algorithms/retrieve_xmls_from_tutor.py | 98 + mltsp/TCP/Algorithms/rpy2_classifiers.py | 1543 + mltsp/TCP/Algorithms/simbad_id_lookup.py | 97 + mltsp/TCP/Algorithms/simple_tcp_rdb_query.py | 54 + mltsp/TCP/Algorithms/stetson_stats.py | 51 + mltsp/TCP/Algorithms/summarize_AL_sources.py | 70 + mltsp/TCP/Algorithms/timeout | 56 + mltsp/TCP/Algorithms/tutor_vizier_utils.py | 91 + mltsp/TCP/Algorithms/utils_classify.R | 325 + mltsp/TCP/Algorithms/xmlrpc_example.py | 57 + mltsp/TCP/Software/__init__.py | 1 + mltsp/TCP/Software/citris33/__init__.py | 1 + .../citris33/arff_generation_master.py | 2696 + ...generation_master_using_generic_ts_data.py | 2506 + .../Software/citris33/start_ipengines.qsub | 34 + .../feature_extract/Code/FeatureExtractor.py | 320 + .../Software/feature_extract/Code/__init__.py | 14 + .../feature_extract/Code/data_cleaning.py | 82 + .../feature_extract/Code/db_importer.py | 1216 + .../Code/extractors/.__init__.py.swp | Bin 0 -> 28672 bytes .../Code/extractors/__init__.py | 169 + .../Code/extractors/amplitude_extractor.py | 198 + .../Code/extractors/ar_is_extractor.py | 76 + .../Code/extractors/beyond1std_extractor.py | 22 + .../extractors/chi2_data_error_extractor.py | 9 + .../Code/extractors/chi2_per_deg_extractor.py | 11 + .../Code/extractors/chi2extractor.py | 11 + .../Code/extractors/closest_in_light.py | 25 + .../closest_in_light_absolute_bmag.py | 26 + .../closest_in_light_angle_from_major_axis.py | 26 + ...osest_in_light_angular_offset_in_arcmin.py | 26 + .../Code/extractors/closest_in_light_dm.py | 26 + ...closest_in_light_physical_offset_in_kpc.py | 26 + .../Code/extractors/closest_in_light_ttype.py | 26 + .../Code/extractors/color_diff_extractor.py | 103 + .../extractors/common_functions/ChiSquare.py | 26 + .../common_functions/Example_Methods.py | 28 + .../extractors/common_functions/__init__.py | 2 + .../Code/extractors/common_functions/_eigs.h | 138 + .../common_functions/_lomb_scargle.h | 226 + .../common_functions/_lomb_scargle.pxd | 12 + .../common_functions/_lomb_scargle.pyx | 29 + .../temp.linux-x86_64-3.3/_lomb_scargle.o | Bin 0 -> 1995952 bytes .../extractors/common_functions/lightcurve.py | 973 + .../extractors/common_functions/linfit.py | 32 + .../common_functions/lomb_scargle_refine.py | 211 + .../extractors/common_functions/ls_support.py | 203 + .../common_functions/multi_harmonic_fit.py | 225 + .../common_functions/plot_methods.py | 44 + .../extractors/common_functions/pre_whiten.py | 291 + .../Code/extractors/common_functions/setup.py | 21 + .../Code/extractors/dc_extractor.py | 25 + .../delta_phase_2minima_extractor.py | 147 + .../Code/extractors/dist_from_u_extractor.py | 12 + .../distance_in_arcmin_to_nearest_galaxy.py | 30 + .../distance_in_kpc_to_nearest_galaxy.py | 32 + .../Code/extractors/eclipse_poly_extractor.py | 171 + .../Code/extractors/ecpb_extractor.py | 15 + .../Code/extractors/ecpl_extractor.py | 15 + .../Code/extractors/example_extractor.py | 17 + .../Code/extractors/first_freq_extractor.py | 18 + .../Code/extractors/first_lomb_extractor.py | 16 + .../Code/extractors/fourier_extractor.py | 25 + .../Code/extractors/fourierextractor.py | 27 + .../extractors/frequency_ratio_extractor.py | 25 + .../Code/extractors/galb_extractor.py | 15 + .../Code/extractors/gall_extractor.py | 15 + .../Code/extractors/geohash2.py | 215 + .../Code/extractors/gskew_extractor.py | 20 + .../Code/extractors/interng_extractor.py | 46 + .../Code/extractors/intersdss_extractor.py | 57 + .../Code/extractors/jansky_flux_extractor.py | 84 + .../Code/extractors/kurtosis_extractor.py | 12 + .../Code/extractors/lcmodel_extractor.py | 372 + .../Code/extractors/linear_extractor.py | 23 + .../Code/extractors/lomb_extractor.py | 51 + .../lomb_scargle_alternative_extractor.py | 103 + .../Code/extractors/lomb_scargle_extractor.py | 903 + .../Code/extractors/max_slope_extractor.py | 18 + .../median_absolute_deviation_extractor.py | 13 + ...edian_buffer_range_percentage_extractor.py | 27 + .../Code/extractors/median_extractor.py | 13 + .../Code/extractors/medianextractor.py | 15 + .../Code/extractors/min_max_extractor.py | 27 + .../feature_extract/Code/extractors/mlens3.py | 760 + .../Code/extractors/montecarlo_extractor.py | 29 + .../Code/extractors/n_points_extractor.py | 8 + .../feature_extract/Code/extractors/ned.py | 460 + .../Code/extractors/ned_cache_server.py | 1093 + .../feature_extract/Code/extractors/ng.py | 461 + .../Code/extractors/noisify.py | 87 + .../Code/extractors/old_dc_extractor.py | 18 + .../Code/extractors/old_dcextractor.py | 18 + .../extractors/pair_slope_trend_extractor.py | 35 + .../extractors/pct_montecarlo_extractor.py | 40 + .../extractors/phase_dispersion_extractor.py | 144 + .../position_intermediate_extractor.py | 59 + .../Code/extractors/power_extractor.py | 34 + .../extractors/power_spectrum_extractor.py | 13 + .../Code/extractors/psd_example_extractor.py | 14 + .../Code/extractors/qso_extractor.py | 107 + .../Code/extractors/ratioRUfirst_extractor.py | 17 + .../Code/extractors/s_extractor.py | 20 + .../feature_extract/Code/extractors/sc.py | 153 + .../extractors/scatter_res_raw_extractor.py | 18 + .../feature_extract/Code/extractors/sdss.py | 609 + .../Code/extractors/sdss_best_dm.py | 45 + .../extractors/sdss_best_offset_in_kpc.py | 45 + .../extractors/sdss_best_offset_in_petro_g.py | 45 + .../Code/extractors/sdss_best_z.py | 45 + .../Code/extractors/sdss_best_zerr.py | 45 + .../Code/extractors/sdss_chicago_class.py | 45 + .../Code/extractors/sdss_dered_g.py | 45 + .../Code/extractors/sdss_dered_i.py | 45 + .../Code/extractors/sdss_dered_r.py | 45 + .../Code/extractors/sdss_dered_u.py | 45 + .../Code/extractors/sdss_dered_z.py | 45 + .../Code/extractors/sdss_dist_arcmin.py | 40 + .../Code/extractors/sdss_first_flux_in_mjy.py | 45 + .../extractors/sdss_first_offset_in_arcsec.py | 45 + .../Code/extractors/sdss_in_footprint.py | 29 + .../Code/extractors/sdss_nearest_obj_type.py | 45 + .../Code/extractors/sdss_petro_radius_g.py | 45 + .../extractors/sdss_petro_radius_g_err.py | 45 + .../Code/extractors/sdss_photo_rest_abs_g.py | 45 + .../Code/extractors/sdss_photo_rest_abs_i.py | 45 + .../Code/extractors/sdss_photo_rest_abs_r.py | 45 + .../Code/extractors/sdss_photo_rest_abs_u.py | 45 + .../Code/extractors/sdss_photo_rest_abs_z.py | 45 + .../Code/extractors/sdss_photo_rest_gr.py | 45 + .../Code/extractors/sdss_photo_rest_iz.py | 45 + .../Code/extractors/sdss_photo_rest_ri.py | 45 + .../Code/extractors/sdss_photo_rest_ug.py | 45 + .../Code/extractors/sdss_photo_z_pztype.py | 45 + .../Code/extractors/sdss_rosat_flux_in_mJy.py | 45 + .../sdss_rosat_log_xray_luminosity.py | 45 + .../extractors/sdss_rosat_offset_in_arcsec.py | 45 + .../extractors/sdss_rosat_offset_in_sigma.py | 45 + .../Code/extractors/sdss_spec_confidence.py | 45 + .../Code/extractors/second_extractor.py | 74 + .../Code/extractors/second_lomb_extractor.py | 27 + .../extractors/significant_power_extractor.py | 41 + .../Code/extractors/sine_fit_extractor.py | 43 + .../Code/extractors/sine_leastsq_extractor.py | 51 + .../Code/extractors/sine_lomb_extractor.py | 12 + .../Code/extractors/skew_extractor.py | 12 + .../extractors/small_kurtosis_extractor.py | 29 + .../Code/extractors/small_skew_extractor.py | 29 + .../Code/extractors/std_extractor.py | 8 + .../Code/extractors/stdextractor.py | 8 + .../Code/extractors/stdvs_from_u_extractor.py | 28 + .../Code/extractors/stetson_extractor.py | 35 + .../Code/extractors/tmpned_extractor.py | 45 + .../Code/extractors/vosource_parse.py | 121 + .../extractors/watt_per_m2_flux_extractor.py | 66 + .../wei_av_uncertainty_extractor.py | 9 + .../extractors/weighted_average_extractor.py | 23 + .../extractors/ws_variability_extractor.py | 125 + .../Code/extractors/xmldict.py | 137 + .../Code/feature_interfaces.py | 168 + .../Code/generators_importers/__init__.py | 11 + .../Code/generators_importers/copy_gen.py | 50 + .../generators_importers/double_ind_gen.py | 24 + .../generators_importers/double_sig_gen.py | 27 + .../generators_importers/double_uneven_gen.py | 9 + .../Code/generators_importers/from_xml.py | 171 + .../Code/generators_importers/gen_or_imp.py | 12 + .../Code/generators_importers/generator.py | 58 + .../Code/generators_importers/lin_inc_gen.py | 18 + .../generators_importers/montecarlo_gen.py | 33 + .../Code/generators_importers/sgwindn_gen.py | 33 + .../Code/generators_importers/storage.py | 14 + .../generators_importers/uneven_sine_gen.py | 25 + .../generators_importers/vizier_importer.py | 43 + .../generators_importers/vo_timeseries.py | 20 + .../feature_extract/Code/import_vizier.py | 17 + .../internal_generated_extractors_holder.py | 12 + .../feature_extract/Code/jsb_fake_data.py | 62 + .../TCP/Software/feature_extract/Code/main.py | 42 + .../Software/feature_extract/Code/plotters.py | 32 + .../feature_extract/Code/signal_objects.py | 131 + .../feature_extract/Code/source_5.xml | 238 + .../feature_extract/Code/source_plot_5.png | Bin 0 -> 48677 bytes .../Software/feature_extract/Code/table.dat | 35088 ++++++++ .../Software/feature_extract/Code/table2.dat | 549 + .../TCP/Software/feature_extract/Code/tmp.pkl | Bin 0 -> 1037 bytes .../feature_extract/Code/vo_timeseries.py | 20 + .../feature_extract/MLData/__init__.py | 1 + .../feature_extract/MLData/arffify.py | 1070 + .../MLData/heatmap_confustion_matrix.py | 165 + .../feature_extract/MLData/maker.arff | 399 + .../MLData/normalize_class_size_in_arff.py | 92 + .../feature_extract/MLData/rr-cep.arff | 246 + .../TCP/Software/feature_extract/__init__.py | 1 + .../feature_extract/format_csv_getfeats.py | 105 + .../gp_orig_randomstart100.png | Bin 0 -> 46154 bytes .../gp_orig_randomstart1000_thetaU1.png | Bin 0 -> 47914 bytes .../gp_orig_randomstart100_nothetaLU.png | Bin 0 -> 32755 bytes .../gp_orig_randomstart100_thetaU10.png | Bin 0 -> 55089 bytes .../gp_orig_randomstart100_thetaU100.png | Bin 0 -> 118364 bytes ...orig_randomstart10_thetaU1_absoluteexp.png | Bin 0 -> 104825 bytes .../gp_orig_randomstart20_thetaU10.png | Bin 0 -> 51290 bytes ...rig_randomstart20_thetaU10_absoluteexp.png | Bin 0 -> 116785 bytes ...orig_randomstart20_thetaU1_absoluteexp.png | Bin 0 -> 114545 bytes ...domstart5_theta0.0001_noLU_absoluteexp.png | Bin 0 -> 82441 bytes ...ndomstart5_theta0.001_noLU_absoluteexp.png | Bin 0 -> 75993 bytes ...andomstart5_theta0.01_noLU_absoluteexp.png | Bin 0 -> 102618 bytes .../feature_extract/noisifier_pilot.py | 55 + .../summarize_available_features.py | 114 + .../textmate_random_number.tmproj | 682 + mltsp/TCP/Software/ingest_tools/__init__.py | 1 + .../feature_extraction_interface.py | 1158 + .../ingest_tools/generate_science_features.py | 282 + mltsp/TCP/__init__.py | 1 + mltsp/TCP/setup.py | 13 + .../tests/data/asas_training_subset.tar.gz | Bin 0 -> 49604 bytes .../data/asas_training_subset_classes.dat | 11 + mltsp/TCP/tests/data/expected_features.csv | 4 + mltsp/TCP/tests/test_feature_generation.py | 753 + mltsp/setup.py | 1 + 303 files changed, 164916 insertions(+) create mode 100755 mltsp/TCP/Algorithms/Debil/Phot/dotastro220107.dat create mode 100755 mltsp/TCP/Algorithms/Debil/README create mode 100755 mltsp/TCP/Algorithms/Debil/debil.c create mode 100755 mltsp/TCP/Algorithms/Debil/dotastro220107.dat.data create mode 100755 mltsp/TCP/Algorithms/Debil/dotastro220107.dat.fit create mode 100755 mltsp/TCP/Algorithms/Debil/test.in create mode 100755 mltsp/TCP/Algorithms/Debil/test.out create mode 100755 mltsp/TCP/Algorithms/EclFeatures/013113-7829.1.xml create mode 100755 mltsp/TCP/Algorithms/EclFeatures/LC_246.dat create mode 100755 mltsp/TCP/Algorithms/EclFeatures/README create mode 100644 mltsp/TCP/Algorithms/EclFeatures/eclipse_features.py create mode 100755 mltsp/TCP/Algorithms/EclFeatures/lc0.dat create mode 100644 mltsp/TCP/Algorithms/EclFeatures/numc_eigs.py create mode 100755 mltsp/TCP/Algorithms/EclFeatures/polyfit.c create mode 100755 mltsp/TCP/Algorithms/EclFeatures/polyfit.h create mode 100644 mltsp/TCP/Algorithms/EclFeatures/selectp.py create mode 100644 mltsp/TCP/Algorithms/PTF_SN_classifier.py create mode 100644 mltsp/TCP/Algorithms/SpatialClustering/cluster.py create mode 100755 mltsp/TCP/Algorithms/SpatialClustering/obj_dict.pickle create mode 100755 mltsp/TCP/Algorithms/SpatialClustering/obj_dict_309.pickle create mode 100644 mltsp/TCP/Algorithms/__init__.py create mode 100755 mltsp/TCP/Algorithms/asas_catalog.R create mode 100755 mltsp/TCP/Algorithms/class_cv.R create mode 100755 mltsp/TCP/Algorithms/classify_Deb.R create mode 100644 mltsp/TCP/Algorithms/compare_randforest_classifiers.py create mode 100644 mltsp/TCP/Algorithms/count_class_names.py create mode 100644 mltsp/TCP/Algorithms/cp_noise_files.py create mode 100755 mltsp/TCP/Algorithms/debosscher_vosourcexml_copy.sh create mode 100644 mltsp/TCP/Algorithms/do_qsoy.py create mode 100644 mltsp/TCP/Algorithms/evaluate_eclipsing_classifs_using_fiteb.py create mode 100755 mltsp/TCP/Algorithms/example_1_ajax_retrieves_json_from_phpmysql.html create mode 100755 mltsp/TCP/Algorithms/example_1_givenpost_mysqlqueries_returnsjson.php create mode 100644 mltsp/TCP/Algorithms/example_parse_vosourcexml.py create mode 100755 mltsp/TCP/Algorithms/fitcurve/av_lombtest_tcp_source(32data).png create mode 100755 mltsp/TCP/Algorithms/fitcurve/bad_fit.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/compare_fit.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/cv_dotastro.txt create mode 100755 mltsp/TCP/Algorithms/fitcurve/fitted_cv.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/harmonics_phase_(189.312|n_0p05820).png create mode 100755 mltsp/TCP/Algorithms/fitcurve/harmonics_phase_plot.png create mode 100644 mltsp/TCP/Algorithms/fitcurve/lightcurve.py create mode 100644 mltsp/TCP/Algorithms/fitcurve/linfit.py create mode 100755 mltsp/TCP/Algorithms/fitcurve/lomb_period_fit(srcid_2570332).png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lomb_period_fit(srcid_2758348).png create mode 100644 mltsp/TCP/Algorithms/fitcurve/lomb_scargle.py create mode 100644 mltsp/TCP/Algorithms/fitcurve/lomb_scargle_refine.py create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombcheck_1.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombcheck_2.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombcheck_3.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombcheck_4.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombtest_(45data)_realbogus_p018.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombtest_less_samp.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombtest_tcp_source(32data).png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombtest_tcp_source(45data).png create mode 100755 mltsp/TCP/Algorithms/fitcurve/lombtest_well_samp.png create mode 100644 mltsp/TCP/Algorithms/fitcurve/ls_support.py create mode 100644 mltsp/TCP/Algorithms/fitcurve/multi_harmonic_fit.py create mode 100644 mltsp/TCP/Algorithms/fitcurve/numc_eigs.py create mode 100644 mltsp/TCP/Algorithms/fitcurve/observatory_source_interface_LGC.py create mode 100755 mltsp/TCP/Algorithms/fitcurve/period_folded_model.txt create mode 100755 mltsp/TCP/Algorithms/fitcurve/period_folded_progenitor.txt create mode 100755 mltsp/TCP/Algorithms/fitcurve/phase_data.xml create mode 100755 mltsp/TCP/Algorithms/fitcurve/phase_fold_(50 datapoints).png create mode 100644 mltsp/TCP/Algorithms/fitcurve/pre_whiten.py create mode 100755 mltsp/TCP/Algorithms/fitcurve/progenitor.txt create mode 100755 mltsp/TCP/Algorithms/fitcurve/scipy_interpolate.png create mode 100755 mltsp/TCP/Algorithms/fitcurve/scipy_interpolate_splrep.png create mode 100644 mltsp/TCP/Algorithms/fitcurve/spline_fit.py create mode 100755 mltsp/TCP/Algorithms/fitcurve/test.txt create mode 100644 mltsp/TCP/Algorithms/fitcurve/test_lomb_scargle_refine.py create mode 100755 mltsp/TCP/Algorithms/fitcurve/weird_first_generation_phase.png create mode 100644 mltsp/TCP/Algorithms/fiteb.py create mode 100644 mltsp/TCP/Algorithms/generate_arff_using_xml.py create mode 100644 mltsp/TCP/Algorithms/generate_summary.py create mode 100644 mltsp/TCP/Algorithms/ipengine_kill.py create mode 100644 mltsp/TCP/Algorithms/macc_wrapper.py create mode 100755 mltsp/TCP/Algorithms/migrate_local_test_mysql_to_raid0.sh create mode 100755 mltsp/TCP/Algorithms/missForest.R create mode 100644 mltsp/TCP/Algorithms/mlens_plots.py create mode 100644 mltsp/TCP/Algorithms/python_example.py create mode 100644 mltsp/TCP/Algorithms/qso_fit.py create mode 100755 mltsp/TCP/Algorithms/randomforest_breiman_v51.f create mode 100644 mltsp/TCP/Algorithms/randomforest_parf_fortran.py create mode 100644 mltsp/TCP/Algorithms/retrieve_xmls_from_tutor.py create mode 100644 mltsp/TCP/Algorithms/rpy2_classifiers.py create mode 100644 mltsp/TCP/Algorithms/simbad_id_lookup.py create mode 100644 mltsp/TCP/Algorithms/simple_tcp_rdb_query.py create mode 100644 mltsp/TCP/Algorithms/stetson_stats.py create mode 100644 mltsp/TCP/Algorithms/summarize_AL_sources.py create mode 100755 mltsp/TCP/Algorithms/timeout create mode 100644 mltsp/TCP/Algorithms/tutor_vizier_utils.py create mode 100755 mltsp/TCP/Algorithms/utils_classify.R create mode 100644 mltsp/TCP/Algorithms/xmlrpc_example.py create mode 100644 mltsp/TCP/Software/__init__.py create mode 100644 mltsp/TCP/Software/citris33/__init__.py create mode 100644 mltsp/TCP/Software/citris33/arff_generation_master.py create mode 100644 mltsp/TCP/Software/citris33/arff_generation_master_using_generic_ts_data.py create mode 100755 mltsp/TCP/Software/citris33/start_ipengines.qsub create mode 100644 mltsp/TCP/Software/feature_extract/Code/FeatureExtractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/__init__.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/data_cleaning.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/db_importer.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/.__init__.py.swp create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/__init__.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/amplitude_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/ar_is_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/beyond1std_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/chi2_data_error_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/chi2_per_deg_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/chi2extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_absolute_bmag.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_angle_from_major_axis.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_angular_offset_in_arcmin.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_dm.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_physical_offset_in_kpc.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_ttype.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/color_diff_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/ChiSquare.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/Example_Methods.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/__init__.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_eigs.h create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.h create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.pxd create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.pyx create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/build/temp.linux-x86_64-3.3/_lomb_scargle.o create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/lightcurve.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/linfit.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/lomb_scargle_refine.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/ls_support.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/multi_harmonic_fit.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/plot_methods.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/pre_whiten.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/setup.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/dc_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/delta_phase_2minima_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/dist_from_u_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/distance_in_arcmin_to_nearest_galaxy.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/distance_in_kpc_to_nearest_galaxy.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/eclipse_poly_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/ecpb_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/ecpl_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/example_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/first_freq_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/first_lomb_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/fourier_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/fourierextractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/frequency_ratio_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/galb_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/gall_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/geohash2.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/gskew_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/interng_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/intersdss_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/jansky_flux_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/kurtosis_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/lcmodel_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/linear_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/lomb_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/lomb_scargle_alternative_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/lomb_scargle_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/max_slope_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/median_absolute_deviation_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/median_buffer_range_percentage_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/median_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/medianextractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/min_max_extractor.py create mode 100755 mltsp/TCP/Software/feature_extract/Code/extractors/mlens3.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/montecarlo_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/n_points_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/ned.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/ned_cache_server.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/ng.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/noisify.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/old_dc_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/old_dcextractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/pair_slope_trend_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/pct_montecarlo_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/phase_dispersion_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/position_intermediate_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/power_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/power_spectrum_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/psd_example_extractor.py create mode 100755 mltsp/TCP/Software/feature_extract/Code/extractors/qso_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/ratioRUfirst_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/s_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sc.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/scatter_res_raw_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_dm.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_offset_in_kpc.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_offset_in_petro_g.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_z.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_zerr.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_chicago_class.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_g.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_i.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_r.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_u.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_z.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dist_arcmin.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_first_flux_in_mjy.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_first_offset_in_arcsec.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_in_footprint.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_nearest_obj_type.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_petro_radius_g.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_petro_radius_g_err.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_g.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_i.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_r.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_u.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_z.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_gr.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_iz.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_ri.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_ug.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_z_pztype.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_flux_in_mJy.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_log_xray_luminosity.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_offset_in_arcsec.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_offset_in_sigma.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sdss_spec_confidence.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/second_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/second_lomb_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/significant_power_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sine_fit_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sine_leastsq_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/sine_lomb_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/skew_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/small_kurtosis_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/small_skew_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/std_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/stdextractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/stdvs_from_u_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/stetson_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/tmpned_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/vosource_parse.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/watt_per_m2_flux_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/wei_av_uncertainty_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/weighted_average_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/ws_variability_extractor.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/extractors/xmldict.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/feature_interfaces.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/__init__.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/copy_gen.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/double_ind_gen.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/double_sig_gen.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/double_uneven_gen.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/from_xml.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/gen_or_imp.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/generator.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/lin_inc_gen.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/montecarlo_gen.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/sgwindn_gen.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/storage.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/uneven_sine_gen.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/vizier_importer.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/generators_importers/vo_timeseries.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/import_vizier.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/internal_generated_extractors_holder.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/jsb_fake_data.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/main.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/plotters.py create mode 100644 mltsp/TCP/Software/feature_extract/Code/signal_objects.py create mode 100755 mltsp/TCP/Software/feature_extract/Code/source_5.xml create mode 100755 mltsp/TCP/Software/feature_extract/Code/source_plot_5.png create mode 100755 mltsp/TCP/Software/feature_extract/Code/table.dat create mode 100755 mltsp/TCP/Software/feature_extract/Code/table2.dat create mode 100755 mltsp/TCP/Software/feature_extract/Code/tmp.pkl create mode 100644 mltsp/TCP/Software/feature_extract/Code/vo_timeseries.py create mode 100644 mltsp/TCP/Software/feature_extract/MLData/__init__.py create mode 100644 mltsp/TCP/Software/feature_extract/MLData/arffify.py create mode 100644 mltsp/TCP/Software/feature_extract/MLData/heatmap_confustion_matrix.py create mode 100755 mltsp/TCP/Software/feature_extract/MLData/maker.arff create mode 100644 mltsp/TCP/Software/feature_extract/MLData/normalize_class_size_in_arff.py create mode 100755 mltsp/TCP/Software/feature_extract/MLData/rr-cep.arff create mode 100644 mltsp/TCP/Software/feature_extract/__init__.py create mode 100644 mltsp/TCP/Software/feature_extract/format_csv_getfeats.py create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart100.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart1000_thetaU1.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_nothetaLU.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_thetaU10.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_thetaU100.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart10_thetaU1_absoluteexp.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart20_thetaU10.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart20_thetaU10_absoluteexp.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart20_thetaU1_absoluteexp.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.0001_noLU_absoluteexp.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.001_noLU_absoluteexp.png create mode 100755 mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.01_noLU_absoluteexp.png create mode 100644 mltsp/TCP/Software/feature_extract/noisifier_pilot.py create mode 100644 mltsp/TCP/Software/feature_extract/summarize_available_features.py create mode 100755 mltsp/TCP/Software/feature_extract/textmate_random_number.tmproj create mode 100644 mltsp/TCP/Software/ingest_tools/__init__.py create mode 100644 mltsp/TCP/Software/ingest_tools/feature_extraction_interface.py create mode 100644 mltsp/TCP/Software/ingest_tools/generate_science_features.py create mode 100644 mltsp/TCP/__init__.py create mode 100644 mltsp/TCP/setup.py create mode 100644 mltsp/TCP/tests/data/asas_training_subset.tar.gz create mode 100644 mltsp/TCP/tests/data/asas_training_subset_classes.dat create mode 100644 mltsp/TCP/tests/data/expected_features.csv create mode 100644 mltsp/TCP/tests/test_feature_generation.py diff --git a/mltsp/TCP/Algorithms/Debil/Phot/dotastro220107.dat b/mltsp/TCP/Algorithms/Debil/Phot/dotastro220107.dat new file mode 100755 index 00000000..8b0b8591 --- /dev/null +++ b/mltsp/TCP/Algorithms/Debil/Phot/dotastro220107.dat @@ -0,0 +1,441 @@ +1880.704080 9.562000 0.040000 +1964.558280 9.826000 0.028000 +1966.560410 9.588000 0.029000 +1968.558980 9.645000 0.030000 +1982.524980 9.737000 0.029000 +1985.551200 9.545000 0.037000 +1995.497270 9.576000 0.043000 +2116.937890 9.694000 0.043000 +2129.912020 9.736000 0.040000 +2151.909240 9.635000 0.055000 +2172.833340 9.635000 0.036000 +2183.837780 9.866000 0.035000 +2184.849840 9.573000 0.037000 +2186.813560 9.617000 0.056000 +2192.763240 9.598000 0.040000 +2194.784680 9.596000 0.045000 +2196.805170 9.558000 0.045000 +2201.789440 9.569000 0.035000 +2212.739170 9.646000 0.036000 +2213.766610 9.589000 0.036000 +2214.773930 9.597000 0.039000 +2216.768580 9.590000 0.037000 +2222.708380 9.886000 0.035000 +2224.752110 9.631000 0.037000 +2228.753110 9.609000 0.038000 +2232.744140 9.638000 0.032000 +2235.734340 9.601000 0.032000 +2236.733980 9.667000 0.037000 +2239.721310 9.755000 0.040000 +2247.686910 9.578000 0.044000 +2496.911880 9.610000 0.033000 +2498.919420 9.591000 0.039000 +2502.915070 9.847000 0.030000 +2520.860260 9.604000 0.027000 +2539.829370 9.675000 0.048000 +2549.841100 9.603000 0.028000 +2552.804850 9.762000 0.026000 +2554.830260 9.766000 0.045000 +2559.805420 9.588000 0.026000 +2561.804300 9.614000 0.029000 +2563.791890 9.783000 0.028000 +2566.804210 9.618000 0.049000 +2621.723550 9.577000 0.027000 +2623.680330 9.598000 0.028000 +2625.674980 9.594000 0.029000 +2628.683260 9.566000 0.043000 +2631.827640 9.788000 0.034000 +2635.653790 9.583000 0.026000 +2637.666900 9.595000 0.026000 +2639.669100 9.617000 0.026000 +2641.671780 9.619000 0.029000 +2643.681340 9.579000 0.028000 +2645.658530 9.606000 0.027000 +2647.641280 9.547000 0.039000 +2650.617560 9.586000 0.026000 +2652.618900 9.581000 0.030000 +2655.756270 9.586000 0.035000 +2658.706940 9.612000 0.032000 +2660.610570 9.635000 0.051000 +2662.699060 9.605000 0.029000 +2664.690300 9.566000 0.029000 +2666.687750 9.595000 0.028000 +2668.693330 9.884000 0.028000 +2670.686450 9.623000 0.030000 +2674.674690 9.674000 0.030000 +2676.660870 9.810000 0.028000 +2678.646160 9.689000 0.029000 +2680.644280 9.641000 0.029000 +2683.549840 9.628000 0.037000 +2685.559460 9.652000 0.035000 +2689.574300 9.622000 0.036000 +2691.568300 9.817000 0.032000 +2693.573030 9.637000 0.028000 +2695.568460 9.741000 0.027000 +2697.568960 9.629000 0.029000 +2699.569770 9.599000 0.031000 +2701.567640 9.613000 0.031000 +2705.552560 9.639000 0.035000 +2707.550530 9.786000 0.030000 +2710.520860 9.616000 0.031000 +2712.539360 9.923000 0.031000 +2714.544860 9.614000 0.032000 +2717.542270 9.672000 0.033000 +2720.533080 9.581000 0.029000 +2722.532310 9.651000 0.028000 +2724.530390 9.623000 0.028000 +2726.528640 9.614000 0.030000 +2728.526720 9.572000 0.029000 +2730.522610 9.581000 0.029000 +2734.507410 9.852000 0.030000 +2740.528770 9.638000 0.033000 +2743.490430 9.589000 0.031000 +2745.505500 9.555000 0.054000 +2751.477230 10.027000 0.029000 +2754.482350 9.594000 0.032000 +2757.466250 9.607000 0.029000 +2760.459640 9.599000 0.036000 +2859.920410 9.632000 0.030000 +2877.900120 9.621000 0.028000 +2884.903140 9.610000 0.033000 +2893.867730 9.567000 0.036000 +2896.855550 9.598000 0.032000 +2899.876560 9.625000 0.028000 +2903.897250 9.576000 0.038000 +2911.838360 9.637000 0.029000 +2915.869880 9.842000 0.029000 +2922.788050 9.621000 0.033000 +2924.846410 9.642000 0.033000 +2929.765070 9.637000 0.029000 +2932.810670 9.628000 0.026000 +2934.838050 9.610000 0.030000 +2939.837250 9.594000 0.026000 +2943.781850 9.672000 0.028000 +2946.746330 9.637000 0.028000 +2948.787760 9.801000 0.031000 +2950.772470 9.596000 0.033000 +2956.803130 9.621000 0.029000 +2964.784560 9.640000 0.030000 +2970.691440 9.756000 0.026000 +2973.755150 9.618000 0.059000 +2975.708790 10.110000 0.029000 +2977.710920 9.747000 0.048000 +2979.726100 9.619000 0.032000 +2981.731240 9.638000 0.037000 +2983.783480 9.594000 0.035000 +2986.680830 9.640000 0.028000 +2988.741500 9.603000 0.033000 +2991.660770 9.614000 0.029000 +2993.696720 9.568000 0.029000 +2995.752850 9.580000 0.027000 +2997.803720 9.615000 0.030000 +3000.793380 9.567000 0.029000 +3007.616000 9.764000 0.029000 +3010.656020 9.579000 0.039000 +3015.675740 9.565000 0.043000 +3017.667240 9.606000 0.031000 +3019.663050 9.659000 0.028000 +3023.666500 9.615000 0.030000 +3028.648110 9.625000 0.026000 +3030.688480 9.569000 0.029000 +3032.702380 9.572000 0.033000 +3034.723290 9.621000 0.033000 +3042.592360 9.597000 0.032000 +3044.630010 9.592000 0.030000 +3046.677100 9.647000 0.034000 +3049.651820 9.575000 0.030000 +3052.618690 9.720000 0.030000 +3054.646240 9.806000 0.029000 +3057.566640 9.579000 0.028000 +3059.632790 9.594000 0.032000 +3062.534730 9.587000 0.059000 +3066.537670 9.582000 0.031000 +3068.584040 9.619000 0.034000 +3070.606690 9.808000 0.038000 +3073.572000 9.625000 0.036000 +3075.606310 9.887000 0.035000 +3085.539710 9.621000 0.034000 +3087.553340 9.605000 0.059000 +3089.572100 9.617000 0.040000 +3092.512770 9.750000 0.031000 +3096.515980 9.574000 0.037000 +3098.536410 9.586000 0.035000 +3101.518150 9.621000 0.034000 +3103.526930 9.664000 0.033000 +3108.502770 9.609000 0.030000 +3113.495980 9.591000 0.032000 +3116.476220 9.635000 0.040000 +3123.465680 9.602000 0.033000 +3131.459090 9.756000 0.054000 +3131.461560 9.734000 0.034000 +3265.852400 9.634000 0.034000 +3269.848730 9.592000 0.025000 +3272.881190 9.903000 0.034000 +3276.850790 9.807000 0.042000 +3280.849880 9.633000 0.038000 +3294.865810 9.913000 0.030000 +3298.824240 9.591000 0.029000 +3355.672930 9.822000 0.035000 +3358.667310 9.611000 0.033000 +3365.687150 9.648000 0.057000 +3366.683330 9.617000 0.053000 +3382.637170 9.830000 0.051000 +3386.751140 9.618000 0.049000 +3387.620310 9.638000 0.035000 +3389.605830 9.630000 0.036000 +3395.650130 9.574000 0.041000 +3397.689500 9.581000 0.045000 +3399.729440 9.741000 0.046000 +3403.589980 9.573000 0.040000 +3405.617380 9.643000 0.046000 +3409.647350 9.677000 0.038000 +3411.687540 9.746000 0.035000 +3414.544760 9.650000 0.035000 +3416.564580 9.675000 0.039000 +3420.534420 9.552000 0.050000 +3424.601400 9.618000 0.040000 +3426.599940 9.652000 0.040000 +3428.604750 9.668000 0.041000 +3430.607220 9.843000 0.036000 +3432.609030 9.634000 0.041000 +3437.598890 9.572000 0.031000 +3440.587950 9.573000 0.036000 +3443.600200 9.796000 0.043000 +3447.513320 9.642000 0.044000 +3448.492260 9.653000 0.042000 +3450.552090 9.605000 0.042000 +3453.533250 9.638000 0.055000 +3456.569680 9.587000 0.037000 +3458.555670 9.618000 0.044000 +3460.562740 10.135000 0.030000 +3463.519770 9.568000 0.058000 +3466.517400 9.567000 0.045000 +3469.525800 9.593000 0.031000 +3471.535720 9.607000 0.031000 +3474.495620 9.594000 0.036000 +3477.500650 9.919000 0.045000 +3481.495970 9.550000 0.034000 +3491.466380 9.634000 0.037000 +3603.921120 9.630000 0.041000 +3626.877290 9.614000 0.031000 +3630.857960 9.640000 0.037000 +3639.866140 9.756000 0.033000 +3647.888310 9.618000 0.033000 +3651.827340 9.591000 0.044000 +3655.795630 9.640000 0.037000 +3658.799350 9.601000 0.034000 +3661.826840 9.574000 0.040000 +3668.815260 9.630000 0.030000 +3671.799500 9.589000 0.036000 +3674.785850 9.605000 0.037000 +3677.777620 9.621000 0.040000 +3699.722840 9.896000 0.038000 +3702.720940 9.546000 0.039000 +3705.710030 9.545000 0.043000 +3708.699520 9.648000 0.039000 +3712.731620 9.636000 0.034000 +3714.722170 9.774000 0.043000 +3717.683540 9.624000 0.051000 +3720.714350 9.652000 0.043000 +3722.774230 9.616000 0.042000 +3725.719180 9.635000 0.045000 +3727.788600 9.604000 0.052000 +3731.646700 9.656000 0.045000 +3734.668410 9.582000 0.054000 +3737.657710 9.653000 0.035000 +3739.694850 9.603000 0.036000 +3741.722780 9.558000 0.037000 +3744.661940 9.723000 0.040000 +3747.636720 9.800000 0.043000 +3749.733010 9.550000 0.050000 +3752.693620 9.615000 0.042000 +3754.754910 9.655000 0.047000 +3757.615480 9.615000 0.044000 +3759.678700 9.628000 0.046000 +3762.630300 9.858000 0.047000 +3767.606660 9.853000 0.058000 +3769.682670 9.633000 0.050000 +3771.721990 9.573000 0.047000 +3774.646060 9.622000 0.043000 +3776.682910 9.748000 0.052000 +3778.675590 9.676000 0.052000 +3787.655140 9.631000 0.044000 +3790.570700 9.595000 0.053000 +3793.565600 9.609000 0.043000 +3795.618300 9.621000 0.036000 +3798.560800 9.570000 0.053000 +3800.585240 9.550000 0.043000 +3803.569130 9.592000 0.052000 +3805.591040 9.561000 0.047000 +3809.536200 9.580000 0.044000 +3811.565480 9.639000 0.050000 +3813.588700 9.638000 0.047000 +3816.541160 9.674000 0.040000 +3818.566230 9.648000 0.041000 +3821.537290 9.755000 0.040000 +3824.529120 9.548000 0.039000 +3826.540890 9.723000 0.040000 +3829.522090 9.580000 0.041000 +3831.542700 9.581000 0.046000 +3836.505450 9.692000 0.047000 +3849.472820 9.614000 0.044000 +3852.471520 9.670000 0.042000 +3858.458020 9.613000 0.062000 +3862.459140 9.688000 0.050000 +4090.678550 9.683000 0.034000 +4103.714440 9.804000 0.045000 +4105.794430 9.612000 0.043000 +4109.611640 9.565000 0.037000 +4126.706410 9.580000 0.048000 +4128.715940 9.600000 0.034000 +4131.578160 9.614000 0.045000 +4133.602000 9.595000 0.044000 +4135.611150 9.729000 0.049000 +4137.628010 9.853000 0.039000 +4139.638200 9.713000 0.031000 +4141.658660 9.598000 0.042000 +4143.675020 9.605000 0.040000 +4146.589140 9.574000 0.048000 +4150.589100 9.624000 0.030000 +4152.608000 9.987000 0.031000 +4157.565620 9.585000 0.055000 +4159.596380 9.592000 0.038000 +4161.599970 9.667000 0.057000 +4163.608310 9.789000 0.051000 +4165.633280 9.615000 0.046000 +4172.553140 9.568000 0.050000 +4174.572360 9.723000 0.038000 +4180.549060 9.632000 0.034000 +4182.583390 9.608000 0.036000 +4185.529490 9.577000 0.037000 +4189.530120 9.626000 0.029000 +4191.549560 9.908000 0.047000 +4193.556050 9.649000 0.050000 +4197.532480 9.892000 0.035000 +4201.491260 9.653000 0.028000 +4204.512800 9.581000 0.034000 +4230.454240 9.890000 0.036000 +4332.903900 9.802000 0.052000 +4339.913560 9.613000 0.043000 +4343.885150 9.627000 0.048000 +4347.895230 9.627000 0.040000 +4354.887550 9.708000 0.031000 +4358.876120 9.577000 0.032000 +4362.867350 9.623000 0.031000 +4365.877230 9.600000 0.029000 +4369.839270 9.614000 0.037000 +4373.849640 9.615000 0.032000 +4377.843630 9.634000 0.036000 +4381.826120 9.593000 0.039000 +4385.825970 9.607000 0.031000 +4392.848440 9.606000 0.041000 +4398.848580 9.620000 0.039000 +4402.814590 9.612000 0.035000 +4406.826630 9.673000 0.047000 +4409.786160 9.563000 0.047000 +4412.808150 9.636000 0.032000 +4423.758630 9.807000 0.037000 +4426.821820 9.601000 0.050000 +4429.728070 9.621000 0.036000 +4432.715900 9.933000 0.030000 +4437.699190 9.796000 0.029000 +4440.710400 9.627000 0.031000 +4443.749520 9.588000 0.034000 +4456.723160 9.583000 0.053000 +4459.645400 9.772000 0.040000 +4461.735030 9.635000 0.036000 +4464.632100 9.648000 0.033000 +4466.733300 9.731000 0.040000 +4469.658190 9.629000 0.037000 +4472.735300 9.593000 0.051000 +4475.618890 9.595000 0.031000 +4478.625880 9.623000 0.033000 +4480.691560 9.594000 0.045000 +4487.674270 9.648000 0.042000 +4489.741330 9.616000 0.038000 +4492.590070 9.590000 0.037000 +4494.615250 9.620000 0.037000 +4498.616380 9.985000 0.038000 +4500.682870 9.888000 0.049000 +4503.599530 9.606000 0.039000 +4505.682440 9.657000 0.039000 +4508.598100 9.602000 0.043000 +4510.611040 9.756000 0.043000 +4516.675920 9.601000 0.050000 +4519.571520 9.632000 0.043000 +4521.606620 9.620000 0.033000 +4523.629830 9.600000 0.041000 +4525.646460 9.602000 0.044000 +4528.572320 9.660000 0.045000 +4530.636830 9.839000 0.037000 +4536.610060 9.609000 0.038000 +4540.523780 9.594000 0.044000 +4542.556770 9.632000 0.038000 +4547.529310 9.664000 0.044000 +4552.537530 9.617000 0.040000 +4554.566940 9.955000 0.042000 +4557.515540 9.613000 0.033000 +4560.507470 9.828000 0.036000 +4563.497750 9.595000 0.036000 +4567.483670 9.617000 0.037000 +4570.494230 9.598000 0.033000 +4573.495900 9.646000 0.037000 +4576.481460 9.948000 0.044000 +4580.483350 9.593000 0.034000 +4585.481780 9.597000 0.036000 +4590.463300 9.725000 0.039000 +4595.456330 9.763000 0.041000 +4686.931320 9.621000 0.033000 +4700.906100 9.703000 0.032000 +4705.904820 9.688000 0.030000 +4709.892020 9.673000 0.037000 +4719.891670 9.610000 0.054000 +4726.870200 9.629000 0.031000 +4730.873280 9.606000 0.031000 +4734.889420 9.919000 0.030000 +4741.850580 9.653000 0.030000 +4749.854560 9.595000 0.038000 +4752.838360 9.674000 0.031000 +4758.867900 9.629000 0.033000 +4761.836170 9.683000 0.032000 +4764.820820 9.612000 0.033000 +4767.798670 9.660000 0.030000 +4770.788630 9.605000 0.029000 +4773.777430 9.806000 0.031000 +4776.775870 9.627000 0.030000 +4779.765570 9.578000 0.039000 +4783.766250 9.678000 0.046000 +4786.791180 9.661000 0.034000 +4792.745570 9.600000 0.032000 +4795.732110 9.895000 0.036000 +4798.737600 9.628000 0.032000 +4801.723090 9.616000 0.032000 +4804.711080 9.583000 0.032000 +4807.689940 9.623000 0.036000 +4809.757840 9.637000 0.037000 +4813.719550 9.587000 0.042000 +4816.673380 9.614000 0.041000 +4819.705390 9.580000 0.036000 +4822.688070 9.800000 0.038000 +4825.676180 9.623000 0.038000 +4827.816330 9.627000 0.044000 +4830.658980 9.641000 0.032000 +4837.672560 9.597000 0.044000 +4843.729730 9.567000 0.046000 +4846.695330 9.876000 0.041000 +4849.617380 9.616000 0.043000 +4851.707230 9.695000 0.046000 +4857.680320 9.598000 0.034000 +4861.576280 10.265000 0.050000 +4863.635470 9.605000 0.060000 +4869.620060 9.571000 0.061000 +4871.674090 9.611000 0.045000 +4877.594980 9.599000 0.056000 +4880.600930 9.663000 0.043000 +4882.666860 9.606000 0.041000 +5148.774020 9.595000 0.057000 +5154.781480 9.631000 0.049000 +5157.735080 9.575000 0.049000 +5160.745250 9.796000 0.057000 +5163.722960 9.888000 0.053000 +5166.741850 9.637000 0.061000 diff --git a/mltsp/TCP/Algorithms/Debil/README b/mltsp/TCP/Algorithms/Debil/README new file mode 100755 index 00000000..7b33219c --- /dev/null +++ b/mltsp/TCP/Algorithms/Debil/README @@ -0,0 +1,68 @@ +## compile debil +gcc debil.c -o debil -Wall -lm -O4 + +# on a mac, you might need to comment out the line: #include // For MAXFLOAT + + +## preparing the photometry file for Debil + +import fiteb +e = fiteb.EB() +e._make_intable(int(dotastroid)) + +## this will make a file called Phot/dotastro.dat +## see Phot/dotastro220107.dat +## the format is time (UJD) mag mag_err + + +## then prepare a script with: +## filename period +## e.g. cat test.in: +## Phot/dotastro220107.dat 2.43648439 + + +## then run debil +./debil test.in test.out test.err 8000 + + +bloom@betsy:~/TCP/Algorithms/Debil$ more test.out +Phot/dotastro220107.dat 2.436484390000 0.544444 0.530424 0.219584 0.024751 0.113447 0.053615 9.677479 0.460442 12.926126 1.845579 0.997124 0.007358 0.757538 1.419207 263.872047 510.914472 433 8 3.095258 9.934767 2.702335 7.100380 0.963495 -0.149294 0.5126 +8 0.301985 0.123077 0.264675 2.183931 + + +Here's the explanation of the output in test.out: +cols = [("fname", "File name (with full path if not in local directory)"), +("p","Period (in days)"), +("e", "Orbital eccentricity"), +("e_err", "Absolute uncertainty in (3)"), +("r1", "Radius of large star (in units of semimajor axis)"), +("r1_err","Absolute uncertainty in (5)"), +("r2","Radius of small star (in units of semimajor axis)"), +("r2_err","Absolute uncertainty in (7)"), +("b1", "Brightness of large star (magnitudes)"), +("b1_err","Absolute uncertainty in (9)"), +("b2", "Brightness of small star (magnitudes)"), +("br_err","Absolute uncertainty in (11)"), +("sini", "Sine of inclination, sin(i)"), +("sini_err","Absolute uncertainty in (13)"), +("periep", "Phased epoch of periastron"), +("periep_err","Absolute uncertainty in (15)"), +("perarg","Argument of periastron (in degrees)"), +("perarg_err","Absolute uncertainty in (17)"), +("Npoints", "Number of used data points (not including outliers)"), +("Nbad", "Number of outliers"), +("chibest", "Reduced chi squared of the best-fit model"), +("chiavg", "Reduced chi squared of the average value"), +("chispline", "Reduced chi squared of a second order spline (parabolic fit within a sliding window)"), +("chisine", "Reduced chi squared of the sinusoidal best-fit"), +("sig_2d", "Significance of the secondary dip depth (in sigma)"), +("sig_h", "Significance of the hump height (at midpoint between dips, in sigma)"), +("sig_hdiff", "Significance of the hump difference between the two humps (in sigma)"), +("wave", "Waviness (see paper appendix for definition)"), +("score", "Scatter score (see paper appendix for definition)"), +("rho_avg","Mean density (in grams per cm^3 ; see paper appendix for definition)"), +("rho_max", "Max density (in grams per cm^3 ; see paper appendix for definition)")] + + +There's a .data and .fit file written to the top directory with the phased data and the resultant fit: +d = csv2rec("dotastro220107.dat.data",names=("ph","mag","merr","tmp"),delimiter=" ") \ No newline at end of file diff --git a/mltsp/TCP/Algorithms/Debil/debil.c b/mltsp/TCP/Algorithms/Debil/debil.c new file mode 100755 index 00000000..528a4efd --- /dev/null +++ b/mltsp/TCP/Algorithms/Debil/debil.c @@ -0,0 +1,2691 @@ +/****************************************************************************************** + * + * Welcome to the DEBiL fitter (Detached Eclipsing Binary Light-curve fitter) + * Written by Jonathan Devor (CfA), 7 Oct. 2004 + * + * This program fits a given light curve to a model of a binary star system + * It uses the downhill simplex method (Nelder and Mead) with simulated annealing + * for multidimensional continuous optimization (minimization) + * + * The fitter makes the following assumptions- + * + * 1. Both stars are spherical: + * - Detached binary system --> negligible tidal bulge (in Roche lobe) + * - Slow rotation --> negligible centripetal deformation + * + * 2. Both stars have a Sun-like photosphere: + * - Solar limb darkening --> proportional scaling in size and flux per area + * (from Astrophysical Quantities by C.W. Allen) + * - Detached binary system --> negligible gravity darkening + * - Homogeneous --> small star spots and flares + * + * Compile: gcc debil.c -o debil -Wall -lm -O4 + * Run: debil p.txt p.out p.err + * + *******************************************************************************************/ + +#define VERSION "1.1" + +// #define PLOT + +#define GRAPHIC // compile in graphic debugging mode (DOS) + +#define WRITE_CURVE_FIT 500 // The number of fitted points to write + +// Allow the period to be doubled (may cause erroneous fits with equal surface brightness) +#define DO_DOUBLE_PERIOD + +// If the period was doubled, assume that the dips are very similar and only fit r1r2) +//#define DOUBLE_PERIOD_SHORTCUT + +// Allocation of computational resources: +// The default number of iterations (used in amoeba(), greedyFit() and estimateError()) +#define DEFAULT_NUM_ITERATIONS 10000 +// In amoeba(), the last part of the convergence should have the best integration +#define MIN_STEP_ITERATION_FRACTION 0.2 // Fraction of simplex iterations +#define MIN_INTEGRATION_STEP 0.01 // This should be about 0.1 * sqrt(amp error) +// Should be much smaller than (KERNEL_HALF_WIDTH / size), especially when the fit is crude +#define SEARCH_STEP_SIZE 0.0001 + +// Smoothing kernel parameter: +#define NUM_POINTS_HALF_KERNEL 8 // Must be smaller than a half a dip width, but at least 2 + +// Outlier identification parameter: +#define OUTLIER_VARIANCE_LIMIT 7.0 // "sigma clipping" + +//Eccentric anomaly calculation parameter: +#define ECC_ANOMALY_MAX_ERROR 1.0e-4 // Convergence threshold (average error is less than a third of this) + +// Eccentricity calculation parameter: +#define ECCENTRICITY_MAX_ERROR 1.0e-6 + +// General bisection implementation parameter: +// only needed for pathological cases (e.g. overflows or huge roundoff errors) +#define BISECTION_SAFETY_MAX_ITERATIONS 1000 + +// Quadratic limb darkening parameters: +#define DEFAULT_LIMB_QUAD_A 0.3542 // 0.282 [Claret 2003 // Claret 1998] +#define DEFAULT_LIMB_QUAD_B 0.1939 // 0.311 + +// Thermal fluctuation parameters: +#define INIT_TEMPERATURE 0.25 // Temperature (times Boltzmann's constant) at time=0 +#define NUM_E_FOLD_COOL 15.0 // Final_temperature = INIT_TEMPERATURE * exp(-NUM_E_FOLD_COOL) + +// "Greedy" fit parameters: +#define MAX_GREEDY_ITERATION_FRACTION 1.0 // Fraction of simplex iterations +#define GREEDY_CONVERGE_EPSILON 0.001 +#define HALF_MAX_GREEDY_EPSILON 0.1 + +// Error estimation parameters: +#define MAX_ERROR_ESTIMATE_ITERATION_FRACTION 0.1 // Fraction of simplex iterations +#define ERROR_ESTIMATE_EPSILON 0.005 // Should be larger than GREEDY_CONVERGE_EPSILON + +// Error thresholds: +#define MIN_STDDIV_BELOW_MEDIAN 0.0 // threshold for doubling the period (CAUTION) +#define MAX_STDDIV_ABOVE_MEDIAN 1.5 // warning only +// Minimum number of data points in the dips and in the plateau +#define MIN_NUM_DATA 5 // Must be at least a third of DIM + +#define RANDOM_SEED 37435209 + +#define EPSILON 1.0e-9 // To avoid division by zero + +// A useful constant for magnitude error conversion (2.5 / ln(10)) +#define MAGNITUDE_ERROR_FACTOR 1.085736205 + +#ifdef GRAPHIC +#define PLOT_REFRESH_ITERATIONS 10 +#endif + +// ======================= Downhill simplex ================================ + +#define DIM 8 // The number of dimensions (don't change!) + +// list of dimensions: +// physical- +#define D_ECC 0 // Eccentricity of orbit (e) +#define D_R1 1 // Star's radius (in units of the distance between them) +#define D_R2 2 +#define D_B1 3 // Central surface brightness (flux per unit disk area) +#define D_B2 4 +// orientation- +#define D_SIN_I 5 // sin(inclination) +#define D_TMO 6 // (time / 2) - (omega / 4pi) +#define D_TPO 7 // (time / 2) + (omega / 4pi) + +// Time is the time (scan parameter) at perihelion and omega is the argument of perihelion +// (i.e. azimuth of eccentricity alignment +// Note that time and omega become degenerate for small eccentricities. For this +// reason I combined them into orthogonal parameters ,D_TMO and D_TPO, where at +// least the former can be accurately determined and therefor will probably converge +// much faster in the fitting algorithm. + +// NOTE: [valid range of physical parameters] +// 0 <= time0 < 1 (not vital) +// 0 <= omega < 2*pi (not vital) +// 0 < sin_i <= 1 +// 0 <= e < 1 (closed orbit) +// 0 < r1 < 1-e (prevent collisions) +// 0 < r2 < 1-e-r1 (prevent collisions) +// 0 < B1 +// 0 < B2 + +// ==================== Includes =================================== + +#include +#include // For getc() +#include // For malloc() + qsort() +#include // For MAXFLOAT +#include +#include // For memmove() + strlen() + strcmp() + +#ifdef GRAPHIC +#ifdef PLOT +#include +#include // For gotoxy() +#endif +#endif + +// ================ General utility functions ====================== + + +// Returns the square of a given x +double sqr (double x) +{ + return (x * x) ; +} + +// Returns the cube of a given x +double cube (double x) +{ + return (x * x * x) ; +} + + +// Returns the modulo 1 value of x +double mod1 (double x) +{ + return (x - floor(x)) ; +} + + +// Swaps two given values +void swap (double *x1, double *x2) +{ + double tmp = *x1 ; + *x1 = *x2 ; + *x2 = tmp ; +} + +// ----------------------- + +// Prints a given error message (errStr) reported by a given function (functionName) about a +// given light curve file (dataFilename). It is added to a given error repository file (errFilename) +// isFatal: 0 (a warning - try anyways) 1 (an error - go to next) +void printError (char *errFilename, int isFatal, char *dataFilename, char *functionName, char *errStr) +{ + FILE *ferr = fopen (errFilename, "at") ; + + if (!ferr) + { + printf ("%s: [ERROR] Couldn't open the output error file ('%s')\n", dataFilename, errFilename) ; + + if (isFatal) + printf ("%s: [ERROR] %s - %s\n", dataFilename, functionName, errStr) ; + else + printf ("%s: [Warning] %s - %s\n", dataFilename, functionName, errStr) ; + + return ; + } + + if (isFatal) + fprintf (ferr, "%s: [ERROR] %s - %s\n", dataFilename, functionName, errStr) ; + else + fprintf (ferr, "%s: [Warning] %s - %s\n", dataFilename, functionName, errStr) ; + + fclose (ferr) ; +} + + +// =================== Removing outliers ========================== + +// Performs one iteration of statistical summations +void updateVars (float x, float y, + double *A1, double *A2, double *A3, double *A4, + double *B0, double *B1, double *B2, double *C0) +{ + const double x2 = x * x ; + + (*A1) += x ; + (*A2) += x2 ; + (*A3) += x * x2 ; + (*A4) += x2 * x2 ; + (*B0) += y ; + (*B1) += y * x ; + (*B2) += y * x2 ; + (*C0) += y * y ; +} + + +// Calculates a second order regression (parabola: a*x^2 + b*x + c) fit to given data (time, amp) +// around a given instant (sampTime) going up and down by a certain number of data points +// to minimize round off errors, time[] is centered around sampTime and the results are corrected +// for the shift at the end. +// Assumes that the data are sorted in time +// Output: pointers to: a b c and the variance around the fit (pVariance, if not null) +void regressionOrder2 (float sampTime, float *time, float *amp, int size, double *pa, double *pb, double *pc, double *pVariance) +{ + int i, indexDown = 0, indexUp = size - 1 ; + int A0 = NUM_POINTS_HALF_KERNEL + NUM_POINTS_HALF_KERNEL ; + double A1 = 0.0, A2 = 0.0, A3 = 0.0, A4 = 0.0 ; + double B0 = 0.0, B1 = 0.0, B2 = 0.0, C0 = 0.0 ; + double denom, a, b, c ; + + // Step 1: find the closes index above it + // Step 1.1: run the bisection algorithm + while ((indexDown + 1) < indexUp) + { + i = (indexDown + indexUp) / 2 ; + + if (time[i] > sampTime) + indexUp = i ; + else + indexDown = i ; + } + + // Step 1.2: take care of the ends + if (time[indexDown] > sampTime) + indexUp = 0 ; + else + if (time[indexUp] <= sampTime) + indexDown = size - 1 ; + + + // Step 2: do statistics + if (indexUp < NUM_POINTS_HALF_KERNEL) + { + for (i = indexUp + size - NUM_POINTS_HALF_KERNEL ; i < size ; i++) + updateVars (time[i] - 1.0 - sampTime, amp[i], &A1, &A2, &A3, &A4, &B0, &B1, &B2, &C0) ; + + for (i = 0 ; i < indexUp + NUM_POINTS_HALF_KERNEL ; i++) + updateVars (time[i] - sampTime, amp[i], &A1, &A2, &A3, &A4, &B0, &B1, &B2, &C0) ; + } + else if (indexDown >= (size - NUM_POINTS_HALF_KERNEL)) + { + for (i = indexDown + 1 - NUM_POINTS_HALF_KERNEL ; i < size ; i++) + updateVars (time[i] - sampTime, amp[i], &A1, &A2, &A3, &A4, &B0, &B1, &B2, &C0) ; + + for (i = 0 ; i <= (indexDown + NUM_POINTS_HALF_KERNEL - size) ; i++) + updateVars (time[i] + 1.0 - sampTime, amp[i], &A1, &A2, &A3, &A4, &B0, &B1, &B2, &C0) ; + } + else // Normal case + { + for (i = indexUp - NUM_POINTS_HALF_KERNEL ; i < (indexUp + NUM_POINTS_HALF_KERNEL) ; i++) + updateVars (time[i] - sampTime, amp[i], &A1, &A2, &A3, &A4, &B0, &B1, &B2, &C0) ; + } + + denom = (A2 * ((A0*A4) + (2.0*A1*A3) - (A2*A2))) - (A0*A3*A3) - (A1*A1*A4) ; // Denominator + + if (denom == 0.0) + denom = EPSILON ; // Prevents division by zero + + *pa = ((A0 * ((A2*B2) - (A3*B1))) + (A1 * ((A3*B0) - (A1*B2))) + (A2 * ((A1*B1) - (A2*B0)))) / denom ; + *pb = ((A0 * ((A4*B1) - (A3*B2))) + (A1 * ((A2*B2) - (A4*B0))) + (A2 * ((A3*B0) - (A2*B1)))) / denom ; + *pc = ((A1 * ((A3*B2) - (A4*B1))) + (A2 * ((A4*B0) - (A2*B2))) + (A3 * ((A2*B1) - (A3*B0)))) / denom ; + + if (pVariance) + { + a = *pa ; + b = *pb ; + c = *pc ; + *pVariance = ((A4*a*a) + (2.0*a*b*A3) + (A2 * ((b*b) + (2.0*a*c))) + (2.0*b*c*A1) + (A0*c*c) - (2.0 * ((B2*a) + (B1*b) + (B0*c))) + C0) / (A0-3) ; + } + + // Moves back the "zero point": a(x-x0)^2 + b(x-x0) + c --> ax^2 + bx + c + *pc += (((*pa) * sampTime * sampTime) - ((*pb) * sampTime)) ; + *pb -= (2.0 * (*pa) * sampTime) ; +} + + +// Interpolates a 2nd order regression spline (parabola) and returns the amplitude at +// an arbitrary given value (sampTime) +// sampTime - moment to interpolate around (+/- kernelHalfWidth) +// time - input: array of time stamps (may be rearranged) +// amp - input: matching array of amplitudes (may be rearranged) +// size - size of input arrays +// Returns the 2nd order regression at the given point (sampTime) +double interpolateSmooth (double sampTime, float *time, float *amp, int size) +{ + double a, b, c ; + + regressionOrder2 (sampTime, time, amp, size, &a, &b, &c, 0) ; + + return ((a * sampTime * sampTime) + (b * sampTime) + c) ; +} + + + +// Interpolates a 2nd order regression spline (fit to a parabola) and returns the +// time of a given amplitude (goal). It will return the closer (to sampTime) of the +// two solutions, as long as it's within SEARCH_STEP_SIZE +// sampTime - time to fit around +// time - input: array of time stamps (may be rearranged) +// amp - input: matching array of amplitudes (may be rearranged) +// size - size of input arrays +// Returns the nearest x-axis value of the fitted parabola for a given y-axis value +// if it's out of range (sampTime +/- SEARCH_STEP_SIZE), returns sampTime +double findGoalSmooth (double sampTime, double goal, float *time, float *amp, int size) +{ + double a, b, c, D, x1, x2, x ; + + regressionOrder2 (sampTime, time, amp, size, &a, &b, &c, 0) ; + + D = (b*b) - (4.0 * a * (c - goal)) ; // The determinant + + if ((D < 0.0) || (a == 0.0)) + return (sampTime) ; + + x1 = (-b + sqrt(D)) / (2.0 * a) ; + x2 = (-b - sqrt(D)) / (2.0 * a) ; + + if (fabs(x1 - sampTime) < fabs(x2 - sampTime)) + x = x1 ; + else + x = x2 ; + + if (fabs(sampTime - x) > SEARCH_STEP_SIZE) // Should be less than half SEARCH_STEP_SIZE + return (sampTime) ; + + return (mod1(x)) ; +} + + +// Removes the outliers from the input data array +// by comparing the data against a 2nd order regression spline. +// the data is assumed to be sorted by time (modulo period = phase) +// even when points are removes, the sorted order is maintained +// note that it will keep "lonely points" with no other data points near it +// time - input: array of time stamps +// amp - input: matching array of amplitudes +// size - size of input arrays +// *psize = outputs the new size of the array (will be reduced if outliers are found) +// Returns the chi2 around the spline (MAXFLOAT in case of error) +double ridOutliers (float *time, float *amp, float *err, int *psize) +{ + int index, doRid, numVariance ; + double x, sumVariance, variance, varianceFit, sumChi2 ; + double a, b, c ; + + do + { + doRid = 0 ; + index = 0 ; + numVariance = 0 ; + sumVariance = 0.0 ; + sumChi2 = 0.0 ; + + while (index < (*psize)) + { + x = time[index] ; + + regressionOrder2 (x, time, amp, *psize, &a, &b, &c, &varianceFit) ; + + variance = sqr((a * x * x) + (b * x) + c - amp[index]) ; + + if (variance > (varianceFit * OUTLIER_VARIANCE_LIMIT)) + { + doRid = 1 ; + (*psize)-- ; + + if (index < (*psize)) + { + memmove (&time[index], &time[index+1], ((*psize) - index) * sizeof(float)) ; + memmove (&[index], &[index+1], ((*psize) - index) * sizeof(float)) ; + memmove (&err[index], &err[index+1], ((*psize) - index) * sizeof(float)) ; + } + } + else + { + sumVariance += variance ; + sumChi2 += variance / sqr(err[index]) ; + numVariance++ ; + index++ ; + } + } + } + while (doRid) ; + + if (numVariance == 0) + return (MAXFLOAT) ; + + return (sumChi2 / numVariance) ; +} + + +// ============================ Chi2 of alternative models ============================== + +// Returns the reduced chi2 of a flat amplitude model (at the average) +// Assumes: size > 1 +double getAvrChi2 (float *amp, float *err, int size) +{ + double avrAmp = 0.0, sumChi2 = 0.0 ; + int i ; + + for (i = 0 ; i < size ; i++) + avrAmp += amp[i] ; + + avrAmp /= size ; + + for (i = 0 ; i < size ; i++) + sumChi2 += sqr((amp[i] - avrAmp) / err[i]) ; + + return (sumChi2 / (size - 1)) ; +} + + +// Fits the given data to: y = a * sin(2pi * m * x) + b * cos(2pi * m * x) + c +// In other words a sinusoidal perturbation with given amplitude, phase, +// mode (m) and DC component (c) +// The fit weights all the given data points equally. +// Assumes: size > 3 +// Returns the reduced chi2 of the best fit (incorporating error information) +double getSinModeChi2 (float *time, float *amp, float *err, int size, double mode) +{ + const double w = 2.0 * M_PI * mode ; + double A1=0.0, A2=0.0, A3=0.0, B1=0.0, B2=0.0, B3=0.0, C=0.0, D=0.0 ; + double sinx, cosx, denom, a, b, c, chi2 = 0.0; + int i ; + + for (i = 0 ; i < size ; i++) + { + sinx = sin (w * time[i]) ; + cosx = cos (w * time[i]) ; + + A1 += sinx ; + A2 += sinx * sinx ; + A3 += amp[i] * sinx ; + B1 += cosx ; + B2 += cosx * cosx ; + B3 += amp[i] * cosx ; + C += amp[i] ; + D += sinx * cosx ; + } + + denom = (A1*((A1*B2) - (2.0*B1*D))) + (A2*((B1*B1) - (B2*size))) - (D*D*size) ; // Denominator + + if (denom == 0.0) + denom = EPSILON ; // Prevents division by zero + + a = ((A1*((B2*C) - (B1*B3))) + (A3*((B1*B1) - (B2*size))) + (D*((B3*size) - (B1*C)))) / denom ; + b = ((A1*((A1*B3) - (C*D))) + (A2*((B1*C) - (B3*size))) + (A3*((D*size) - (A1*B1)))) / denom ; + c = ((A1*((A3*B2) - (B3*D))) + (A2*((B1*B3) - (B2*C))) + (D*((C*D) - (A3*B1)))) / denom ; + + for (i = 0 ; i < size ; i++) + { + sinx = sin (w * time[i]) ; + cosx = cos (w * time[i]) ; + chi2 += sqr(((a * sinx) + (b * cosx) + c - amp[i]) / err[i]) ; + } + + return (chi2 / (size - 3)) ; +} + + +// fits the given light curve to a sinusoidal with mode 1 and 2 +// returns the best chi square result of the two +double getSinChi2 (float *time, float *amp, float *err, int size) +{ + double m1, m2 ; + + m1 = getSinModeChi2 (time, amp, err, size, 1.0) ; + m2 = getSinModeChi2 (time, amp, err, size, 2.0) ; + + if (m1 <= m2) + return (m1) ; + + return (m2) ; +} + + +//========================= Eccentricity ====================================== + +// Uses a combined Newton-Raphson + bisection method for finding the root (E) of: +// M = E - (e * sin(E)) [Kepler's equation] +// Given: M = mean anomaly ; e = eccentricity of orbit (0 <= e < 1) +// Returns: E = Eccentric Anomaly +double eccentricAnomaly (double M, double e) +{ + int counter = BISECTION_SAFETY_MAX_ITERATIONS ; + double Emin = M - 1.0, Emax = M + 1.0, E = M ; + double f, dfm, dE ; + + do + { + f = M + (e * sin(E)) - E ; // May be optimized by setting cos=sqrt(1-sin^2) + dfm = 1.0 - (e * cos(E)) ; // Minus differential of f (always non-negative) + dE = dfm * ECC_ANOMALY_MAX_ERROR ; + + if (f > dE) + { + Emin = E ; + dE = Emax - Emin ; + + if ((dfm * dE) > f) + E += (f / dfm) ; + else + E = 0.5 * (Emax + Emin) ; + } + else if (f < (-dE)) + { + Emax = E ; + dE = Emax - Emin ; + + if ((dfm * dE) > -f) + E += (f / dfm) ; + else + E = 0.5 * (Emax + Emin) ; + } + else return (E) ; + } + while ((dE > ECC_ANOMALY_MAX_ERROR) && ((--counter) > 0)) ; + + return (E) ; // should almost never exits here +} + + + +// Finds the eccentricity using simple bisection. +// Uses the fact that that tDiff is a monotonically decreasing function of e +// Y = e * sin(omega) ; from the dip widths +// tdiff = the difference between the dip times +double getEccentricity (double tDiff, double Y) +{ + const double Y2 = Y * Y ; + int counter = BISECTION_SAFETY_MAX_ITERATIONS ; + double e2, res, eMid, eMax = 1.0, eMin = fabs(Y) ; + + tDiff *= M_PI ; + + while (((eMax - eMin) > ECCENTRICITY_MAX_ERROR) && ((counter--) > 0)) + { + eMid = 0.5 * (eMax + eMin) ; + e2 = eMid * eMid ; + + res = acos(sqrt((e2 - Y2) / (1.0 - Y2))) - (sqrt((1.0 - e2) * (e2 - Y2)) / (1.0 - Y2)) ; + + if (res > tDiff) + eMin = eMid ; + else + eMax = eMid ; + } + + return (0.5 * (eMax + eMin)) ; +} + + +//========================== Limb Darkening ==================================== + +// Quadratic limb darkening coefficients for a solar-like star in I filter (Claret 1998) +// Note that a "square root" law give a better fit (especially for I filter), +// but the error in assuming a solar star, is much larger and the total CPU requirements +// would almost double (doing a linear fit, on the other hand, won't save much CPU). + +static double limbConstA = 0.0 ; +static double limbConstB = 0.0 ; +static double limbConstC = 0.0 ; +static double limbConstD = 0.0 ; +static double limbConstE = 0.0 ; +static double limbConstF = 0.0 ; +static double limbConstG = 0.0 ; +static double limbConstH = 0.0 ; + + +// Sets the quadratic limb darkening parameters to arbitrary given values. +void setLimbDarkening (double quadA, double quadB) +{ + limbConstA = 1.0 - quadA - quadB ; + limbConstB = quadA + quadB + quadB ; + limbConstC = -quadB ; + limbConstD = M_PI * (1.0 - quadA - quadB - quadB) ; + limbConstE = 0.5 * M_PI * quadB ; + limbConstF = 2.0 * M_PI * (quadA + quadB + quadB) / 3.0 ; + limbConstG = M_PI * (1.0 - quadA - quadB) ; + limbConstH = M_PI * (6.0 - quadA - quadA - quadB) / 6.0 ; +} + +// cosAngle2 = the square of the cosine of the angle between the zenith of +// the star to the given point on the surface (relative to the star's center) +// Returns the solar limb darkening coefficient +// Note that it is normalized so that at the star's zenith (cosAngle2 = 1), it returns 1 +double limbDarkening (double cosAngle2) +{ + return (limbConstA + (limbConstB * sqrt(cosAngle2)) + (limbConstC * cosAngle2)) ; +} + + +// Analytically integrates the limb darkened disk, from r=0 to r=rBack +// rBack = the full radius of the star's disk +double integrateWholeDisk (double rBack) +{ + return (limbConstH * rBack * rBack) ; +} + + +// Analytically integrates the limb darkened disk, from 0 to the given finish +// finish = where to end the integration +// rBack = the radius of the back star's disk (the one seen as a crescent) +double integrateDiskFromStart (double finish, double rBack) +{ + const double x = sqr(finish / rBack) ; + + return (rBack * rBack * (((limbConstD + (limbConstE * x)) * x) + (limbConstF * (1.0 - cube(sqrt(1.0 - x)))))) ; +} + + +// Analytically integrates the limb darkened disk, from the given start to rBack +// start = from where to begin the integration +// rBack = the radius of the back star's disk (the one seen as a crescent) +double integrateDiskToFinish (double start, double rBack) +{ + const double x = 1.0 - sqr(start / rBack) ; + + return (rBack * rBack * (((limbConstG - (limbConstE * x)) * x) + (limbConstF * cube(sqrt(x))))) ; +} + + +// Uses the Secant method (not the most efficient method, but is simple and robust) +// Uses the fact that the function grows monotonically +// Returns finish or -1.0 if error +double invIntegrateDiskFromStart (double S, double rBack) +{ + double r1 = 0.0, S1 = 0.0 ; + double r2 = rBack, S2 = integrateWholeDisk(rBack) ; + double rTry, STry ; + + if ((S < S1) || (S > S2) || ((S2 - S1) < EPSILON)) + return (-1.0) ; // Error (out of bound) + + do + { + rTry = r1 + ((r2 - r1) * (S - S1) / (S2 - S1)) ; + STry = integrateDiskFromStart (rTry, rBack) ; + + if (STry < S) + { + r1 = rTry ; + S1 = STry ; + } + else + { + r2 = rTry ; + S2 = STry ; + } + } + while (fabs(S - STry) > EPSILON) ; + + return (rTry) ; +} + + +// Makes a simple trapezoid numerical integration with varying step size +// (smaller, the closer an asymptote) for finding the brightness of +// a partially hidden star. This method seems to works better than Simpson's. +// start = where to begin the integration +// finish = where to end the integration +// rFront = the radius of the front star's disk (the one seen as a disk) +// rBack = the radius of the back star's disk (the one seen as a crescent) +// D = the distance between the centers of the two stars +// dr0 = the infinitesimal integration step scale (unitless) +// Assumes: D + rFront >= finish >= start >= |D - rFront| >= 0 +// [num iterations] ~= 4 / dr0 ; [abs. error] ~= 0.1 * rFront^2 * dr0^2 +double integrateCrescent (double start, double finish, double rFront, double rBack, + double D, double dr0) +{ + const double rBack_m2 = 1.0 / (rBack * rBack) ; + const double rFront2mD2 = (rFront * rFront) - (D * D) ; + const double middle = 0.5 * (start + finish) ; + const double D2 = 2.0 * D ; + const double limitUp = (((D + rFront) < rBack) ? D + rFront : rBack) ; + const double limitDown = fabs(D - rFront) ; + double dr, r, r2, rStep, sum = 0.0 ; + + if (D < EPSILON) // To avoid division by zero + return (0.0) ; + + // Since dr0 is unitless and we want dr to have units of "distance" (1 = sum semi-major axes) + dr0 *= sqrt(rFront) ; + + // Step 1: integrate from middle up + dr = dr0 * sqrt(limitUp - middle) ; + for (rStep = middle + dr ; rStep < finish ; rStep += dr) + { + r = rStep - (0.5 * dr) ; + r2 = r * r ; + sum += (r * acos((rFront2mD2 - r2) / (D2 * r)) * limbDarkening(1.0 - (rBack_m2 * r2)) * dr) ; + + dr = dr0 * sqrt(limitUp - r) ; + } + + // Step 2: add sliver at upper edge + r = 0.5 * (finish + rStep - dr) ; + r2 = r * r ; + dr += (finish - rStep) ; + sum += (r * acos((rFront2mD2 - r2) / (D2 * r)) * limbDarkening(1.0 - (rBack_m2 * r2)) * dr) ; + + // Step 3: integrate from middle down + dr = dr0 * sqrt(middle - limitDown) ; + for (rStep = middle - dr ; rStep > start ; rStep -= dr) + { + r = rStep + (0.5 * dr) ; + r2 = r * r ; + sum += (r * acos((rFront2mD2 - r2) / (D2 * r)) * limbDarkening(1.0 - (rBack_m2 * r2)) * dr) ; + + dr = dr0 * sqrt(r - limitDown) ; + } + + // Step 4: add sliver at bottom edge + r = 0.5 * (start + rStep + dr) ; + r2 = r * r ; + dr += (rStep - start) ; + sum += (r * acos((rFront2mD2 - r2) / (D2 * r)) * limbDarkening(1.0 - (rBack_m2 * r2)) * dr) ; + + return (2.0 * sum) ; +} + +// =============== Calculate the observed radiation flux from the binary system =============== + +// Calculates the crescent of the back star, when it is partially eclipsed by the front star +// rFront = the radius of the star in front +// rBack = the radius of the star in back +// D = the distance between the centers of the two stars +// dr = the infinitesimal integration step +// Returns the relative brightness of the crescent of the back star +double integrateBackOverlap (double rFront, double rBack, double D, double dr) +{ + if (rFront < D) + { + if (rBack > (D + rFront)) + return (integrateDiskFromStart (D - rFront, rBack) + + integrateCrescent (D - rFront, D + rFront, rFront, rBack, D, dr) + + integrateDiskToFinish (D + rFront, rBack)) ; // E + + return (integrateDiskFromStart (D - rFront, rBack) + + integrateCrescent (D - rFront, rBack, rFront, rBack, D, dr)) ; // B + } + + if (rFront > (D + rBack)) + return (0.0) ; // D + + if (rBack > (D + rFront)) + return (integrateCrescent (rFront - D, rFront + D, rFront, rBack, D, dr) + + integrateDiskToFinish (rFront + D, rBack)) ; // F + + return (integrateCrescent (rFront - D, rBack, rFront, rBack, D, dr)) ; // C +} + + +/****************************************************************** + * Returns the total flux from both stars of the binary. + * Ignores limb darkening, gravity darkening, etc. + * time = scan parameter 0 <= time < 1 + * p[DIM] = parameter vector + * dr = the infinitesimal integration step + * doB12max = 1:recalculate the light curve "plateau" brightness ; 0:don't + * + * NOTE: [definition of 1 unit distance] + * The physical distance between the stars at perihelion (minimal) is (1-e) units + * and the physical distance between the stars at aphelion (maximal) is (1+e) units + * so, 1 unit is the sum of the distances of the two semi-major axes + * + ******************************************************************/ +double flux (double time, double p[DIM], double dr, int doB12max) +{ + static double B12max ; + const double omega = 2.0 * M_PI * (p[D_TPO] - p[D_TMO]) ; + const double meanAnomaly = 2.0 * M_PI * (time - p[D_TPO] - p[D_TMO]) ; // 2pi * (t - t0) + double D2, D, E ; + + if (doB12max) + B12max = (p[D_B1] * integrateWholeDisk(p[D_R1])) + (p[D_B2] * integrateWholeDisk(p[D_R2])) ; + + E = eccentricAnomaly(meanAnomaly, p[D_ECC]) ; + + D2 = sqr(1.0 - (p[D_ECC] * cos(E))) - sqr((((cos(E) - p[D_ECC]) * sin(omega)) + (sqrt(1.0 - sqr(p[D_ECC])) * sin(E) * cos(omega))) * p[D_SIN_I]) ; + + if (D2 > (EPSILON * EPSILON)) // Prevents sqrt of negative or division by zero, later on + D = sqrt (D2) ; + else + D = EPSILON ; + + if (D >= (p[D_R1] + p[D_R2])) // Side by side (A) + return (B12max) ; + + if (sin(E + omega) > 0.0) // Is star 2 in front ? + return ((p[D_B2] * integrateWholeDisk(p[D_R2])) + (p[D_B1] * integrateBackOverlap(p[D_R2], p[D_R1], D, dr))) ; + + // star 1 is in front + return ((p[D_B1] * integrateWholeDisk(p[D_R1])) + (p[D_B2] * integrateBackOverlap(p[D_R1], p[D_R2], D, dr))) ; +} + + + +// Returns the reduced chi squared of the model (a score for how good the fit is) +// If the parameter vector is out of range, returns MAXFLOAT +double scoreFit (double p[DIM], float *time, float *amp, float *err, int size, double dr) +{ + int i ; + double score ; + + // Note that I use MAXFLOAT in a double since is may need to be increased by annealingFluctuation() + if ((p[D_SIN_I] <= 0.0) || (p[D_SIN_I] > 1.0)) return (MAXFLOAT) ; // sin_i + if ((p[D_ECC] < 0.0) || (p[D_ECC] >= 1.0)) return (MAXFLOAT) ; // e + if ((p[D_R1] <= 0.0) || (p[D_R1] >= (1.0 - p[D_ECC]))) return (MAXFLOAT) ; // r1 + if ((p[D_R2] <= 0.0) || (p[D_R2] >= (1.0 - p[D_ECC] - p[D_R1]))) return (MAXFLOAT) ; // r2 + if (p[D_B1] <= 0.0) return (MAXFLOAT) ; // b1 + if (p[D_B2] <= 0.0) return (MAXFLOAT) ; // b2 + + score = sqr((amp[0] - flux(time[0], p, dr, 1)) / err[0]) ; + + for (i = 1 ; i < size ; i++) + score += sqr((amp[i] - flux(time[i], p, dr, 0)) / err[i]) ; + + return (score / (size - DIM)) ; +} + + +// A statistical test +// Returns the correlation of a given residual with the previous residual +// this is to be used to distinguish between models that the mediocre throughout +// and models that are good in some places but very bad in others. My assumption is +// that the latter is far better situation than the former. In the extreme case of +// the latter, chi^2 should be 1, unless there is a problem with the error bars. +// Returns score in the range [-1, 1] (Cauchy-Schwartz inequality) +// A score of 1 means that the model is entirely above or entirely below the data +// A score of 0 is ideal (should have chi^2 = 1) +// A score below 0 is very suspect and probably unphysical +double midScatterScore (double p[DIM], float *time, float *amp, int size) +{ + int i ; + double prevDelta, delta, sumWithPrev = 0.0, sumSqr = 0.0 ; + + // Note that I use MAXFLOAT in a double since is may need to be increased by annealingFluctuation() + if ((p[D_SIN_I] <= 0.0) || (p[D_SIN_I] > 1.0)) return (MAXFLOAT) ; // sin_i + if ((p[D_ECC] < 0.0) || (p[D_ECC] >= 1.0)) return (MAXFLOAT) ; // e + if ((p[D_R1] <= 0.0) || (p[D_R1] >= (1.0 - p[D_ECC]))) return (MAXFLOAT) ; // r1 + if ((p[D_R2] <= 0.0) || (p[D_R2] >= (1.0 - p[D_ECC] - p[D_R1]))) return (MAXFLOAT) ; // r2 + if (p[D_B1] <= 0.0) return (MAXFLOAT) ; // b1 + if (p[D_B2] <= 0.0) return (MAXFLOAT) ; // b2 + + prevDelta = flux(time[size-1], p, MIN_INTEGRATION_STEP, 1) - amp[size-1] ; + + for (i = 0 ; i < size ; i++) + { + delta = flux(time[i], p, MIN_INTEGRATION_STEP, 0) - amp[i] ; + + sumWithPrev += (prevDelta * delta) ; + sumSqr += (delta * delta) ; + + prevDelta = delta ; + } + + if (sumSqr == 0.0) + return (0.0) ; + + return (sumWithPrev / sumSqr) ; +} + + + +#ifdef GRAPHIC +#ifdef PLOT +// Plot the light curve and the fit of the given parameters +// if (p == 0) then ignores the fit +// if (time == 0) then ignores the light curve data +// color = color of the model light curve plot +// if (doInterpol == 1) then plots the spline interpolation of the data +// checkVal = an arbitrary value the user wished to scale like the plot +// Returns the scales Y-axis pixel value which corresponds to (checkVal) +int plotFit (double p[DIM], float *time, float *amp, int size, int color, int doInterpol, double checkVal) +{ + double x, F, Fmin, Fmax ; + int i, y ; + + if (p) + { + if ((p[D_SIN_I] <= 0.0) || (p[D_SIN_I] > 1.0)) return(-1) ; // sin_i + if ((p[D_ECC] < 0.0) || (p[D_ECC] >= 1.0)) return(-2) ; // e + if ((p[D_R1] <= 0.0) || (p[D_R1] >= (1.0 - p[D_ECC]))) return(-3) ; // r1 + if ((p[D_R2] <= 0.0) || (p[D_R2] >= (1.0 - p[D_ECC] - p[D_R1]))) return(-4) ; // r2 + if (p[D_B1] <= 0.0) return(-5) ; // b1 + if (p[D_B2] <= 0.0) return(-6) ; // b2 + } + + Fmin = Fmax = amp[0] ; + + for (i = 1 ; i < size ; i++) + { + if (amp[i] < Fmin) + Fmin = amp[i] ; + else + if (amp[i] > Fmax) + Fmax = amp[i] ; + } + + if (p) + for (x = 0.0 ; x < 1.0 ; x += 0.001) + { + F = flux (x, p, MIN_INTEGRATION_STEP, 1) ; + + y = 400 - (int)(250.0 * (F - Fmin) / (Fmax - Fmin)) ; + if (y > 479) y = 479 ; + if (y < 0) y = 0 ; + + putpixel ((int)(640 * x), y, color) ; + } + + + if (time && doInterpol) + for (x = 0.0 ; x < 1.0 ; x += 0.001) + { + F = interpolateSmooth(x, time, amp, size) ; + + y = 400 - (int)(250.0 * (F - Fmin) / (Fmax - Fmin)) ; + + if ((y <= 479) && (y >= 0)) + putpixel ((int)(640 * x), y, 5) ; + } + + + if (time) + for (i = 0 ; i < size ; i++) + { + y = 400 - (int)(250.0 * (amp[i] - Fmin) / (Fmax - Fmin)) ; + + if ((y <= 479) && (y >= 0)) + putpixel ((int)(640 * time[i]), y, 15) ; + } + + return (400 - (int)(250.0 * (checkVal - Fmin) / (Fmax - Fmin))) ; +} +#endif +#endif + + +#ifdef WRITE_CURVE_FIT +// Writes to files - the raw data and the fitted curve +// Returns: 0 = success otherwise failed +int writeCurveFit (double p[DIM], float *time, float *amp, float *err, int size, char *filename) +{ + FILE *fout ; + char *localFilename, foutName[256] ; + int i ; + + i = strlen(filename) ; + for (i-- ; (i >= 0) && (filename[i] != '/') ; i--) ; // goes to slash or -1 + localFilename = &filename[i+1] ; + + //--------------------- + + sprintf (foutName, "%s.data", localFilename) ; + fout = fopen (foutName, "wt") ; + if (!fout) + return (1) ; + + for (i = 0 ; i < size ; i++) + fprintf (fout, "%f %f %f %f\n", time[i], -2.5 * log10(amp[i]), MAGNITUDE_ERROR_FACTOR * err[i] / amp[i], + 2.5 * log10(flux(time[i], p, MIN_INTEGRATION_STEP, 1) / amp[i])) ; + fclose (fout) ; + + //--------------------- + + sprintf (foutName, "%s.fit", localFilename) ; + fout = fopen (foutName, "wt") ; + if (!fout) + return (2) ; + + for (i = 0 ; i < WRITE_CURVE_FIT ; i++) + fprintf (fout, "%f %f\n", (float)i / WRITE_CURVE_FIT, + -2.5 * log10(flux ((float)i / WRITE_CURVE_FIT, p, MIN_INTEGRATION_STEP, 1))) ; + + fclose (fout) ; + return (0) ; +} +#endif + +//======================= Make a "first guess" for the initial parameters =============================== + +// Data structure of a single light curve observation +struct LCdata +{ + float primary ; + float secondary ; + float tertiary ; +}; + + +// A comparator for a pair-o-float +// Returns: -1 if x.primary < y.primary +// 0 if x.primary = y.primary +// 1 if x.primary > y.primary +int comparLCdata (const void *x, const void *y) +{ + if (((struct LCdata*)x)->primary < ((struct LCdata*)y)->primary) + return (-1) ; + else + return (((struct LCdata*)x)->primary > ((struct LCdata*)y)->primary) ; +} + + +// Returns 0 = success ; 1 = failure (malloc) +int sortSamples (float *time, float *amp, float *err, int size) +{ + int i ; + struct LCdata *arr = (struct LCdata*)malloc (size * sizeof(struct LCdata)) ; + + if (!arr) + return (1) ; + + for (i = 0 ; i < size ; i++) + { + arr[i].primary = time[i] ; + arr[i].secondary = amp[i] ; + arr[i].tertiary = err[i] ; + } + + qsort (arr, size, sizeof(struct LCdata), comparLCdata) ; + + for (i = 0 ; i < size ; i++) + { + time[i] = arr[i].primary ; + amp[i] = arr[i].secondary ; + err[i] = arr[i].tertiary ; + } + + free (arr) ; + return (0) ; +} + + +// A comparator function for sorting an array of floating point values +int comparFloat (const void *x, const void *y) +{ + if ((*((float*)x)) < (*((float*)y))) + return (-1) ; + else + return ((*((float*)x)) > (*((float*)y))) ; +} + + + +// Given a floating point array +// Returns the median amplitude (or MAXFLOAT in case of error - malloc failure) +double getMedian (float *data, int size) +{ + double median ; + float *arr = (float*)malloc (size * sizeof(float)) ; + + if (!arr) + return (MAXFLOAT) ; + + memcpy (arr, data, size * sizeof(float)) ; + + qsort (arr, size, sizeof(float), comparFloat) ; + + if (size & 1) // is odd + median = arr[(size-1)/2] ; + else // is even + median = 0.5 * (arr[size/2] + arr[(size/2)-1]) ; + + free (arr) ; + return (median) ; +} + + + +//----------------------- Find dips ------------------------------------ + +// Finds the two deepest minima of the light curve +// The primary minimum is simply at the smallest value +// The secondary minimum is the place that has the largest difference +// between the value itself and the maxima between it and the primary minimum +// Note: if a secondary minimum can't be found (very unusual), will set *pmin2Amp = MAXFLOAT +// May return an "edge minimum"- near (*pmin1Time + 0.5) +// *pmax1Amp >= *pmax2Amp >= *pmin1Amp ; *pmax1Amp >= *pmin2Amp >= *pmin1Amp +// ideally: *pmax2Amp > *pmin2Amp but there is no guarantee (can be used as a test) +void findDips (float *time, float *amp, int size, + double *pmin1Time, double *pmin2Time, + double *pmin1Amp, double *pmin2Amp) +{ + double maxAmp, min1TimePlusHalf ; + double diff, sampTime, sampAmp ; + + // Step 1: search for the primary dip + *pmin1Time = 0.0 ; + *pmin1Amp = interpolateSmooth (0.0, time, amp, size) ; + + for (sampTime = SEARCH_STEP_SIZE ; sampTime < 1.0 ; sampTime += SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth (sampTime, time, amp, size) ; + + if (*pmin1Amp > sampAmp) + { + *pmin1Amp = sampAmp ; + *pmin1Time = sampTime ; + } + } + + // Step 2: search for the secondary dip min1TimePlusHalf = min1Time + 0.5 ; + *pmin2Amp = MAXFLOAT ; + min1TimePlusHalf = *pmin1Time + 0.5 ; + maxAmp = *pmin1Amp ; + diff = 0.0 ; + + if (min1TimePlusHalf < 1.0) + { + // 2.1: look up + for (sampTime = *pmin1Time + SEARCH_STEP_SIZE ; sampTime <= min1TimePlusHalf ; sampTime += SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (maxAmp < sampAmp) + maxAmp = sampAmp ; + + if (diff < maxAmp - sampAmp) + { + diff = maxAmp - sampAmp ; + *pmin2Time = sampTime ; + *pmin2Amp = sampAmp ; + } + } + + // 2.2: look down + maxAmp = *pmin1Amp ; + + for (sampTime = *pmin1Time - SEARCH_STEP_SIZE ; sampTime >= 0.0 ; sampTime -= SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (maxAmp < sampAmp) + maxAmp = sampAmp ; + + if (diff < maxAmp - sampAmp) + { + diff = maxAmp - sampAmp ; + *pmin2Time = sampTime ; + *pmin2Amp = sampAmp ; + } + } + + for (sampTime = 1.0 - SEARCH_STEP_SIZE ; sampTime >= min1TimePlusHalf ; sampTime -= SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (maxAmp < sampAmp) + maxAmp = sampAmp ; + + if (diff < maxAmp - sampAmp) + { + diff = maxAmp - sampAmp ; + *pmin2Time = sampTime ; + *pmin2Amp = sampAmp ; + } + } + } + else // min1TimePlusHalf >= 1.0 + { + min1TimePlusHalf -= 1.0 ; // modulo 1.0 + + // 2.1: look up + for (sampTime = *pmin1Time + SEARCH_STEP_SIZE ; sampTime < 1.0 ; sampTime += SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (maxAmp < sampAmp) + maxAmp = sampAmp ; + + if (diff < (maxAmp - sampAmp)) + { + diff = maxAmp - sampAmp ; + *pmin2Time = sampTime ; + *pmin2Amp = sampAmp ; + } + } + + for (sampTime = 0.0 ; sampTime <= min1TimePlusHalf ; sampTime += SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (maxAmp < sampAmp) + maxAmp = sampAmp ; + + if (diff < maxAmp - sampAmp) + { + diff = maxAmp - sampAmp ; + *pmin2Time = sampTime ; + *pmin2Amp = sampAmp ; + } + } + + // 2.2: look down + maxAmp = *pmin1Amp ; + + for (sampTime = *pmin1Time - SEARCH_STEP_SIZE ; sampTime >= min1TimePlusHalf ; sampTime -= SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (maxAmp < sampAmp) + maxAmp = sampAmp ; + + if (diff < (maxAmp - sampAmp)) + { + diff = maxAmp - sampAmp ; + *pmin2Time = sampTime ; + *pmin2Amp = sampAmp ; + } + } + } +} + + +// Finds the values (should be about max) between the dips (pmax1Amp, pmax2Amp) +// given the average of the two dip times (min1Time, min2Time) +// Note that we can't use a simple max, since it may pick the interpolation +// overshoot at the edges of the dips. This approach is far more robust. +// Sets: *pmax1Amp >= *pmax2Amp +void findMidMaxs (float *time, float *amp, int size, double avrTime, double *pmax1Amp, double *pmax2Amp) +{ + *pmax1Amp = interpolateSmooth(avrTime, time, amp, size) ; + *pmax2Amp = interpolateSmooth(mod1(avrTime + 0.5), time, amp, size) ; + + if (*pmax1Amp < *pmax2Amp) + swap(pmax1Amp, pmax2Amp) ; +} + + + +// Assumed that goalAmp is larger than the amplitude at *pminTime +// Returns the half-width of the given dip, to the point it crosses a given goal amplitude (goalAmp) +// Returns 0.0 upon fatal error (couldn't reach goalAmp) +double findHalfWidth (float *time, float *amp, int size, double goalAmp, double *pminTime) +{ + double minTimePlusHalf = *pminTime + 0.5 ; + double sampAmp, sampTime ; + double limitUp = MAXFLOAT, limitDown = MAXFLOAT ; + double limitUpFineTune, limitDownFineTune ; + + // Step 1: find dip edges + if (minTimePlusHalf < 1.0) + { + // 1.1: look up + for (sampTime = *pminTime + SEARCH_STEP_SIZE ; (limitUp == MAXFLOAT) && (sampTime <= minTimePlusHalf) ; sampTime += SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (sampAmp > goalAmp) + limitUp = sampTime ; + } + + // 1.2: look down + for (sampTime = *pminTime - SEARCH_STEP_SIZE ; (limitDown == MAXFLOAT) && (sampTime >= 0.0) ; sampTime -= SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (sampAmp > goalAmp) + limitDown = sampTime ; + } + + for (sampTime = 1.0 - SEARCH_STEP_SIZE ; (limitDown == MAXFLOAT) && (sampTime >= minTimePlusHalf) ; sampTime -= SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (sampAmp > goalAmp) + limitDown = sampTime ; + } + } + else // minTimePlusHalf >= 1.0 + { + minTimePlusHalf -= 1.0 ; // modulo 1.0 + + // 1.1: look up + for (sampTime = *pminTime + SEARCH_STEP_SIZE ; (limitUp == MAXFLOAT) && (sampTime < 1.0) ; sampTime += SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (sampAmp > goalAmp) + limitUp = sampTime ; + } + + for (sampTime = 0.0 ; (limitUp == MAXFLOAT) && (sampTime <= minTimePlusHalf) ; sampTime += SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (sampAmp > goalAmp) + limitUp = sampTime ; + } + + // 1.2: look down + for (sampTime = *pminTime - SEARCH_STEP_SIZE ; (limitDown == MAXFLOAT) && (sampTime >= minTimePlusHalf) ; sampTime -= SEARCH_STEP_SIZE) + { + sampAmp = interpolateSmooth(sampTime, time, amp, size) ; + + if (sampAmp > goalAmp) + limitDown = sampTime ; + } + } + + if ((limitUp == MAXFLOAT) || (limitDown == MAXFLOAT)) + return (0.0) ; // Fatal error - couldn't reach goalAmp + + + // Step 2: correct for the search overshoot: (error <= 0.5) + limitUp -= (0.5 * SEARCH_STEP_SIZE) ; + if (limitUp < 0.0) limitUp += 1.0 ; + + limitDown += (0.5 * SEARCH_STEP_SIZE) ; + if (limitDown >= 1.0) limitDown -= 1.0 ; + + // Step 3: fine tune output results: + limitUpFineTune = findGoalSmooth (limitUp, goalAmp, time, amp, size) ; + limitDownFineTune = findGoalSmooth (limitDown, goalAmp, time, amp, size) ; + + // Step 4: update minimum: (especially important for square dips) + if (limitDownFineTune < limitUpFineTune) + { + *pminTime = 0.5 * (limitUpFineTune + limitDownFineTune) ; + + return (0.5 * (limitUpFineTune - limitDownFineTune)) ; + } + + *pminTime = 0.5 * (1.0 + limitUpFineTune + limitDownFineTune) ; + + if (*pminTime > 1.0) + *pminTime -= 1.0 ; + + return (0.5 * (1.0 + limitUpFineTune - limitDownFineTune)) ; +} + + + +// Outputs *pvarySin_i, a midway allowable variance for sin(i) +// when the returned value is close to the minimum *pvarySin_i become negative +// this is needed since if it is varied too much, the result will be only MAXFLOATs +// Given: Y = -e * sin(omega), for dip #1 and e * sin(omega), for dip #2 +// doShapeWarnings is for avoiding giving two warnings for the same problem (r1r2) +// Returns 1.0 or best guess upon error +double getSin_i (float *time, float *amp, int size, double e, + double Y, double Rmin, double Rmax, double *pvarySin_i, + double minTime, double minAmp, double medianAmp, + double halfWidth, char *filename, char *errFilename, int doShapeWarnings) +{ + double tmpMinTime, goalAmp, wideHalfWidth, narrowHalfWidth ; + double q, p, H, widthMultiple, cosi2, res ; + const double minSin_i = sqrt(1.0 - sqr(Rmin+Rmax)) ; // the valid range is between this and 1.0 + + *pvarySin_i = 0.5 * (1.0 - minSin_i) ; // default value + + tmpMinTime = minTime ; + goalAmp = (0.75 * medianAmp) + (0.25 * minAmp) ; + wideHalfWidth = findHalfWidth(time, amp, size, goalAmp, &tmpMinTime) ; + + tmpMinTime = minTime ; + goalAmp = (0.25 * medianAmp) + (0.75 * minAmp) ; + narrowHalfWidth = findHalfWidth(time, amp, size, goalAmp, &tmpMinTime) ; + + + if ((narrowHalfWidth >= halfWidth) || (narrowHalfWidth == 0.0) || (wideHalfWidth <= halfWidth)) + { + if (doShapeWarnings) + printError (errFilename, 0, filename, "getSin_i()", "Invalid slope") ; + + return (1.0) ; + } + + if (wideHalfWidth >= 0.25) + { + if (doShapeWarnings) + printError (errFilename, 0, filename, "getSin_i()", "Dip is too wide") ; + + return (1.0) ; + } + + + // Compensate for the widening of the ingress/egress by the smoothing kernel + H = (double)NUM_POINTS_HALF_KERNEL / size ; + q = 0.5 * (wideHalfWidth - narrowHalfWidth) / H ; + + if (q >= 1.0) p = 2.0 * q ; + else if (q > 0.3232309) p = q + sqrt(1.8 - sqrt(3.84 - (3.2 * q))) ; + else if (q > 0.2288838) p = sqrt(1.8 - (0.4 / q) - (q * q)) ; // Rounded up to protect against sqrt of negative + else return (1.0) ; + + widthMultiple = halfWidth / (p * H) ; + + if (widthMultiple > (Rmax / Rmin)) + { + // This error is commented out because it is too common, especially when the (r1r2) guess is wrong + // it could be, in principal, used to cancel the wrong guess, but it is simply too uncertain + + // printError (errFilename, 0, filename, "getSin_i()", "Invalid width multiple") ; + return (1.0) ; + } + + cosi2 = sqr(Rmax * (1.0 + Y) / (1.0 - (e * e))) * (1.0 - (widthMultiple * Rmin / Rmax)) ; + + if (cosi2 < 0.0) + { + printError (errFilename, 0, filename, "getSin_i()", "Negative cos(i)^2") ; + return (1.0) ; + } + + if ((cosi2 >= sqr(Rmin + Rmax)) || (cosi2 >= 1.0)) // The latter should never happen + { + printError (errFilename, 0, filename, "getSin_i()", "Sin(i) is too small") ; + cosi2 = Rmax * Rmax ; + } + + res = sqrt(1.0 - cosi2) ; + + if ((1.0 - res) <= (res - minSin_i)) + *pvarySin_i = 0.5 * (res - minSin_i) ; // Closer to max + else + *pvarySin_i = 0.5 * (res - 1.0) ; // Closer to min - set a negative variance + + return (res) ; +} + + +// =============== Take dips into account ========================= + + +// Returns 1 if t is in the given dip, otherwise returns 0 +int isInDip (double t, double minTime, double halfWidth) +{ + double diff = fabs(t - minTime) ; + + return ((diff < halfWidth) || ((1.0 - diff) < halfWidth)) ; +} + + +// Makes sure that there is a sufficient amount of data to contain a given dip +// minTime = time of dip's minimum +// halfWidth = the dip's half width +// returns: 1 = OK, plenty of data for dip ; 0 = bad, not enough data +int isEnoughDipData (float *time, int size, double minTime, double halfWidth) +{ + int i, dipDataNum = 0 ; + + for (i = 0 ; (dipDataNum < MIN_NUM_DATA) && (i < size) ; i++) + if (isInDip (time[i], minTime, halfWidth)) + dipDataNum++ ; + + return (dipDataNum == MIN_NUM_DATA) ; +} + + +// This may only correct by a small amount. But it's very important to get the +// depth of the small dip as accurately as possible +// pPlateauStdDiv = (output pointer) the standard deviation of the plateau amplitudes +// pPlateauWaviness = (output pointer) a statistical measure for how wavy the plateau is. +// The range is [-1,1], where 1 is very wavy and 0 is not wavy at all (negative values are unphysical). +// note that this is better than stddiv around a spline because a spline, +// has the nasty effect overshooting around the dips even worse, the spline stddiv is strongly +// determined by NUM_POINTS_HALF_KERNEL and might trace the deviations too closely (or not close enough) +// Returns: 0 = success ; 1 = malloc failure ; 2 = goal couldn't be reached ; 3 = not enough data in plateau ; 4 = zero variance +int findPlateauMedian (float *time, float *amp, int size, double min1Time, double min2Time, + double *pMedianAmp, double *pPlateauStdDiv, double *pPlateauWaviness) +{ + int i, reducedSize = 0 ; + double min1HalfWidth, min2HalfWidth ; + double sumVarianceAmp, sumNeighborVariance ; + float *reducedAmp = (float*)malloc (size * sizeof(float)) ; + + if (!reducedAmp) + return (1) ; + + min1HalfWidth = findHalfWidth(time, amp, size, *pMedianAmp, &min1Time) ; + min2HalfWidth = findHalfWidth(time, amp, size, *pMedianAmp, &min2Time) ; + + if ((min1HalfWidth == 0.0) || (min2HalfWidth == 0.0)) + { + free (reducedAmp) ; + return (2) ; + } + + for (i = 0 ; i < size ; i++) + if (!isInDip (time[i], min1Time, min1HalfWidth) && !isInDip(time[i], min2Time, min2HalfWidth)) + { + reducedAmp[reducedSize] = amp[i] ; + reducedSize++ ; + } + + // Check the number of data points in the plateau + if (reducedSize < MIN_NUM_DATA) + { + free (reducedAmp) ; + return (3) ; + } + + *pMedianAmp = getMedian(reducedAmp, size) ; + + // Note that I'm calculating around the median, instead of the average, so to make it more robust + // doing this will make the variance (or sumVarianceAmp) larger than it would have been otherwise. + // but usually the average will be very close to the median, so the difference will be small. + // Also note that I'm calculating the variance in this manner to reduce numerical errors, which + // could become a serious problem. + // Waviness measure - from the ratio of the mean square difference between neighbor to the variance + sumVarianceAmp = sqr(reducedAmp[0] - (*pMedianAmp)) ; + sumNeighborVariance = sqr(reducedAmp[size-1] - reducedAmp[0]) ; + for (i = 1 ; i < reducedSize ; i++) + { + sumVarianceAmp += sqr(reducedAmp[i] - (*pMedianAmp)) ; + sumNeighborVariance += sqr(reducedAmp[i-1] - reducedAmp[i]) ; + } + + if (sumVarianceAmp <= 0.0) + return (4) ; // This should never happen + + *pPlateauStdDiv = sqrt(sumVarianceAmp / reducedSize) ; + *pPlateauWaviness = 1.0 - (0.5 * sumNeighborVariance / sumVarianceAmp) ; + + free (reducedAmp) ; + return (0) ; +} + + +//----------------------- Simplex + simulated annealing ------------------------------------------ + +// Calculates the annealing fluctuation. In converts a flatly distributed random +// variable rand() to a logarithmicly distributed one. +// The temperature (ignoring the Boltzmann's constant) multiplies this +// distribution to create a perturbation above 1.0 + +// Returns a random, logarithmicly distributed perturbation above 1.0 +// probability: p(x) = (1/t) * exp(-(x-1)/t) ; where t = temperature +double annealingFluctuation (double temperature) +{ // May be optimize by subtracting a precalculated: log(1.0 + RAND_MAX) + + return (1.0 - (temperature * log((1.0 + rand()) / (1.0 + RAND_MAX)))) ; +} + +// Part of the downhill simplex method with simulated annealing [press 2002] +// Checks out a given extrapolation factor for the highest point. If it is an improvement +// then it replaces the highest point (makes all the necessary updates). +// p[DIM+1][DIM] - a matrix of the (DIM+1) simplex points in the DIM-dimensional space +// y[DIM+1] - the score (function value) of the (DIM+1) simplex points +// psum[DIM] - the sum of the points' values in each of the DIM coordinates +// ihi - the index for the highest point +// yhi - the value the highest point +// fac - the factor for the highest point, where: +// fac= 1 --> highest point +// fac= 0 --> c.m. of the remaining points +// fac= 0.5 --> mid point between the highest point and the c.m. of the remaining points +// fac= -1 --> reflection of the highest point about the c.m. of the remaining points +// dr - the infinitesimal integration step +// Returns the score (function value) for the extrapolated point +// Note that the arrays: p, y, psum - may get updated +double amotry (double p[DIM+1][DIM], double y[DIM+1], double psum[DIM], int ihi, double *pyhi, + double fac, float *time, float *amp, float *err, int size, double dr, double temperature, + double pElite[DIM], double *pyElite, int *piElite) +{ + int j ; + double ytry, yflu ; + double ptry[DIM] ; + double fac1 = (1.0 - fac) / DIM ; + double fac2 = fac1 - fac ; + + for (j = 0 ; j < DIM ; j++) + ptry[j] = (psum[j] * fac1) - (p[ihi][j] * fac2) ; + + ytry = scoreFit (ptry, time, amp, err, size, dr) ; + + yflu = ytry / annealingFluctuation(temperature) ; // with a random thermal fluctuation subtracted + + // Replaces the highest (worst) value with the new one. The new one will always + // Get copied if it's better than the worst and sometimes even if it's not + if (yflu < (*pyhi)) + { + if (ytry <= (*pyElite)) + { + *pyElite = ytry ; + *piElite = ihi ; + } + else if (ihi == (*piElite)) // About to overwrite the elite + { + memcpy (pElite, p[ihi], DIM * sizeof(double)) ; + *piElite = -1 ; + } + + y[ihi] = ytry ; + *pyhi = yflu ; + + for (j = 0 ; j < DIM ; j++) + psum[j] += (ptry[j] - p[ihi][j]) ; + + memcpy (p[ihi], ptry, DIM * sizeof(double)) ; + } + + return (yflu) ; +} + + +// Based on the downhill simplex method with simulated annealing [press 2002] +// includes Elite refresh [Aldous 1994], where you revert to the +// best fit found so far. This can be done every given number of iterations, +// or as I chose, a certain number of refreshes throughout the convergence +// p[DIM+1][DIM] - a matrix of the (DIM+1) simplex points in the DIM-dimensional space +// y[DIM+1] - the score (function value) of the (DIM+1) simplex points +// numIterations = number of iteration to run the convergence algorithm +// Returns the index for the lowest (best) point in the simplex +int amoeba (double p[DIM+1][DIM], double y[DIM+1], float *time, float *amp, float *err, + int size, long numIterations) +{ + int i, j ; // Temporary + int ilo, ihi ; // Fluctuated + int iElite ; // Exact value + double ytry, yhi, ylo, ynhi, ysave ; // Fluctuated + double sum, psum[DIM], pElite[DIM], yElite ; // Exact values ; pElite is only used when the elite is overwritten (iElite == -1) + double dr, temperature = INIT_TEMPERATURE ; // Utilities + const double coolingFactor = 1.0 - ((double)NUM_E_FOLD_COOL / numIterations) ; // A good approximation, if near 1.0 + const long minStepIteration = (long)(numIterations * MIN_STEP_ITERATION_FRACTION) ; + + // Step 1: [elitism] backup the best candidate + yElite = y[0] ; + iElite = 0 ; + for (i = 1 ; i <= DIM ; i++) + if (y[i] < yElite) + { + yElite = y[i] ; + iElite = i ; + } + + + // Step 2: initializes the sum of values in each coordinate + // (to be used later for calculating the average, or center of mass) + for (j = 0 ; j < DIM ; j++) + { + sum = p[0][j] ; + for (i = 1 ; i <= DIM ; i++) + sum += p[i][j] ; + + psum[j] = sum ; + } + + + // The main loop + while (numIterations > 0) + { + // Step 3: find- + // ihi = index of highest (worst) value + // ilo = index of lowest (best) value + // yhi = highest (worst) value + // ynhi = second highest (worst) value + // ylo = lowest (best) value + + // 3.1: sort the first two + ynhi = ylo = y[0] * annealingFluctuation(temperature) ; + yhi = y[1] * annealingFluctuation(temperature) ; + + if (ylo <= yhi) + { + ihi = 1 ; + ilo = 0 ; + } + else + { + ihi = 0 ; + ilo = 1 ; + ynhi = yhi ; // Swap: ynhi=ylo <--> yhi + yhi = ylo ; + ylo = ynhi ; + } + + // 3.2: sort the rest + for (i = 2 ; i <= DIM ; i++) + { + ytry = y[i] * annealingFluctuation(temperature) ; + + if (ytry <= ylo) + { + ilo = i ; + ylo = ytry ; + } + + if (ytry > yhi) + { + ihi = i ; + ynhi = yhi ; + yhi = ytry ; + } + else if (ytry > ynhi) + { + ynhi = ytry ; + } + } + + + // Step 4: integration step size + if ((numIterations > minStepIteration) && (yElite > 1.0)) + dr = MIN_INTEGRATION_STEP * sqrt(sqrt(yElite)) ; + else + dr = MIN_INTEGRATION_STEP ; + + + // Step 5: try various extrapolations (reflection, expansion and contraction) + + // 5.1: reflect the high point to the other side of the c.m. of the rest + ytry = amotry(p, y, psum, ihi, &yhi, -1.0, time, amp, err, size, dr, temperature, pElite, &yElite, &iElite) ; + numIterations-- ; + + if (ytry <= ylo) + { + // 5.1.1: if the result was the lowest so far, expand it more + ytry = amotry(p, y, psum, ihi, &yhi, 2.0, time, amp, err, size, dr, temperature, pElite, &yElite, &iElite) ; + numIterations-- ; + } + else if (ytry >= ynhi) + { + // 5.1.2: if the result is still the highest, try interpolating + ysave = yhi ; + ytry = amotry(p, y, psum, ihi, &yhi, 0.5, time, amp, err, size, dr, temperature, pElite, &yElite, &iElite) ; + numIterations-- ; + + // 5.1.2.1: if the result is even worse, contract around the lowest (best) point + if (ytry >= ysave) + { + if ((iElite != -1) && (iElite != ilo)) // about to overwrite the elite + { + memcpy (pElite, p[iElite], DIM * sizeof(double)) ; + iElite = -1 ; + } + + for (i = 0 ; i < (DIM+1) ; i++) + if (i != ilo) + { + for (j = 0 ; j < DIM ; j++) + p[i][j] = 0.5 * (p[i][j] + p[ilo][j]) ; + + y[i] = scoreFit(p[i], time, amp, err, size, dr) ; + + if (y[i] < yElite) + { + yElite = y[i] ; + iElite = i ; + } + } + numIterations -= DIM ; + + // 5.1.2.2: reinitialize the sum of values in each coordinate + for (j = 0 ; j < DIM ; j++) + { + sum = 0.0 ; + + for (i = 0 ; i <= DIM ; i++) + sum += p[i][j] ; + + psum[j] = sum ; + } + } + } + + temperature *= coolingFactor ; + +#ifdef GRAPHIC +#ifdef PLOT + if ((numIterations % PLOT_REFRESH_ITERATIONS) == 0) + { + cleardevice() ; + (void)plotFit (p[ihi], time, amp, size, 3, 0, 0.0) ; // Worst - cyan + + if (iElite == -1) + (void)plotFit (pElite, time, amp, size, 15, 0, 0.0) ; // Elite (not in simplex) - white + else + (void)plotFit (p[iElite], time, amp, size, 14, 0, 0.0) ; // Elite (in simplex) - yellow + } +#endif +#endif + } + + // Step 6: [elitism] return the best result + if (iElite == -1) + { + memcpy (p[0], pElite, DIM * sizeof(double)) ; + iElite = 0 ; + } + + return (iElite) ; +} + + + +// This procedure attempts to fine tune the resulting model parameters. +// It tunes the parameters one at a time, shifting each one, in turn, +// a step up and a step down. This is repeated until the chi2 is no longer decreased. +// For error estimation purposes, one parameter p[paramConstNum] is not +// fit. By setting this parameters at a small offset from the optimal +// value, one can measure the chi2 sensitivity to it. +// Set paramConstNum to (-1) for a full greedy fit. +// Returns: 0 = converged ; 1 = didn't converge +int greedyFit(double p[DIM], double *py, float *time, float *amp, float *err, + int size, long numIterations, int paramConstNum) +{ + int i, doCopy, foundImprovement ; + double yTmp, bestVal = 0.0 ; + double paramBack, varyEpsilon = GREEDY_CONVERGE_EPSILON ; + + numIterations = (long)(numIterations * MAX_GREEDY_ITERATION_FRACTION) ; + numIterations /= (2 * DIM) ; + + do + { + numIterations-- ; + foundImprovement = 0 ; + + for (i = 0 ; i < DIM ; i++) + if (i != paramConstNum) + { + doCopy = 0 ; + paramBack = p[i] ; + + p[i] = paramBack * (1.0 - varyEpsilon) ; + yTmp = scoreFit(p, time, amp, err, size, MIN_INTEGRATION_STEP) ; + if (yTmp < (*py)) + { + *py = yTmp ; + bestVal = p[i] ; + doCopy = 1 ; + foundImprovement = 1 ; + } + + p[i] = paramBack * (1.0 + varyEpsilon) ; + yTmp = scoreFit(p, time, amp, err, size, MIN_INTEGRATION_STEP) ; + if (yTmp < (*py)) + { + *py = yTmp ; + bestVal = p[i] ; + doCopy = 1 ; + foundImprovement = 1 ; + } + + if (doCopy) + p[i] = bestVal ; + else + p[i] = paramBack ; + } + + if (foundImprovement) + { + if (varyEpsilon <= HALF_MAX_GREEDY_EPSILON) + varyEpsilon *= 2.0 ; + } + else + varyEpsilon *= 0.5 ; + } + while ((foundImprovement || (varyEpsilon > GREEDY_CONVERGE_EPSILON)) && (numIterations > 0)) ; + + return (foundImprovement || (varyEpsilon > GREEDY_CONVERGE_EPSILON)) ; +} + + + +// Find the best fit for the given data, given initial values of the model parameters +// Returns the node index of the best fit +int runFit(double p[DIM+1][DIM], double y[DIM+1], float *time, float *amp, float *err, + int size, long numIterations, char *filename, char *errFilename) +{ + int best, isUnconverged ; + + best = amoeba(p, y, time, amp, err, size, numIterations) ; + + isUnconverged = greedyFit(p[best], &y[best], time, amp, err, size, numIterations, -1) ; + + if (isUnconverged) + printError (errFilename, 0, filename, "runFit()", "greedyFit() didn't converge") ; + + + // Takes care of the 180 degree turn degeneracy (makes sure that the R1 >= R2) + if (p[best][D_R1] < p[best][D_R2]) + { + swap (&p[best][D_R1], &p[best][D_R2]) ; + swap (&p[best][D_B1], &p[best][D_B2]) ; + p[best][D_TMO] -= 0.25 ; + p[best][D_TPO] += 0.25 ; + } + + return (best) ; +} + +//---------------------- Post-analysis ------------------------------------- + +// Returns the estimated error of a given parameter p[paramNum] +// this is done by offsetting this parameter by a small amount (ERROR_ESTIMATE_EPSILON) +// and seeing how much the chi2 raised, after re-fitting the remaining parameters +// the estimated error is the extrapolated offset needed to double the chi2 +// (compared to the minimum). We assume that the chi2 function is approximately a +// paraboloid around neat the minimum. +// p[DIM] = the given local best fit +// y = the chi2 of the given best fit +// isPhase = 0 for parameters whose error is proportional to their size +// 1 for phase-type parameters (modulo 1) +double estimateError (int paramNum, double p[DIM], double y, int isPhase, + float *time, float *amp, float *err, int size, long numIterations) +{ + double pOffset[DIM], yOffset1, yOffset2 ; + + numIterations = (long)(numIterations * MAX_ERROR_ESTIMATE_ITERATION_FRACTION) ; + numIterations /= 2 ; + + memcpy (pOffset, p, DIM * sizeof(double)) ; + pOffset[paramNum] *= (1.0 + ERROR_ESTIMATE_EPSILON) ; + yOffset1 = scoreFit(pOffset, time, amp, err, size, MIN_INTEGRATION_STEP) ; + greedyFit(pOffset, &yOffset1, time, amp, err, size, numIterations, paramNum) ; + + memcpy (pOffset, p, DIM * sizeof(double)) ; + pOffset[paramNum] *= (1.0 - ERROR_ESTIMATE_EPSILON) ; + yOffset2 = scoreFit(pOffset, time, amp, err, size, MIN_INTEGRATION_STEP) ; + greedyFit(pOffset, &yOffset2, time, amp, err, size, numIterations, paramNum) ; + + if (yOffset1 > yOffset2) + yOffset1 = yOffset2 ; // Set yOffset1 as the minimum + + if (yOffset1 == y) // This should almost never happen + return (-1.0) ; + + if (yOffset1 < y) // This shouldn't happen if greedyFit() converged + swap (&yOffset1, &y) ; + + if (isPhase) + return (ERROR_ESTIMATE_EPSILON * sqrt(y / (yOffset1 - y))) ; + + return (ERROR_ESTIMATE_EPSILON * fabs(p[paramNum]) * sqrt(y / (yOffset1 - y))) ; +} + + + +// Given the period and the radii (in units of a) +// Returns the mean density of the binary system (or maximum if r1=0) +double meanDensity (double period, double r1, double r2) +{ + // 0.01893 = 3 * pi / (G * (seconds per day)^2) [g/cm^3] + return (0.01893 / ((cube(r1) + cube(r2)) * sqr(period))) ; +} + + +#ifdef GRAPHIC +#ifdef PLOT +// Plot the first guess with reference lines +void drawInitLines(double p[DIM+1][DIM], float *time, float *amp, int size, + double min1Time, double min2Time, double min1HalfWidth, double min2HalfWidth, + double min1Amp, double min2Amp, double medianAmp) +{ + int min1AmpPlot, min2AmpPlot, medianAmpPlot, goalAmpPlot ; + + min1AmpPlot = plotFit (0, time, amp, size, 14, 0, min1Amp) ; + min2AmpPlot = plotFit (0, time, amp, size, 14, 0, min2Amp) ; + medianAmpPlot = plotFit (p[0], time, amp, size, 14, 1, medianAmp) ; + + setcolor(7) ; + line (0, medianAmpPlot, 639, medianAmpPlot) ; + + setcolor(5) ; + line ((int)(640 * min1Time), min1AmpPlot-10, (int)(640 * min1Time), 450) ; + line ((int)(640 * min1Time)-5, min1AmpPlot, (int)(640 * min1Time)+5, min1AmpPlot) ; + + setcolor(3) ; + line ((int)(640 * min2Time), min2AmpPlot-10, (int)(640 * min2Time), 450) ; + line ((int)(640 * min2Time)-5, min2AmpPlot, (int)(640 * min2Time)+5, min2AmpPlot) ; + + setcolor(4) ; + goalAmpPlot = (medianAmpPlot + min1AmpPlot) / 2 ; + line ((int)(640 * mod1(min1Time + min1HalfWidth)), goalAmpPlot, (int)(640 * mod1(min1Time + min1HalfWidth)), 450) ; + line ((int)(640 * mod1(min1Time - min1HalfWidth)), goalAmpPlot, (int)(640 * mod1(min1Time - min1HalfWidth)), 450) ; + + goalAmpPlot = (medianAmpPlot + min2AmpPlot) / 2 ; + line ((int)(640 * mod1(min2Time + min2HalfWidth)), goalAmpPlot, (int)(640 * mod1(min2Time + min2HalfWidth)), 450) ; + line ((int)(640 * mod1(min2Time - min2HalfWidth)), goalAmpPlot, (int)(640 * mod1(min2Time - min2HalfWidth)), 450) ; + + //(void)getc (stdin) ; +} +#endif + +// Prints the results of the fit onto the screen +// Note that I assume that p[D_R1] > p[D_R2] for calculating rhoMax +void printResultValue (double p[DIM], double y, float *time, float *amp, int size, int numRid, + double period, double avrChi2, double splineChi2, double sinChi2, + double sigmaMin2Amp, double sigmaMax1Amp, double sigmaMaxDiff, double plateauWaviness) +{ + #ifdef PLOT + + cleardevice() ; + (void)plotFit (p, time, amp, size, 14, 1, 0.0) ; + + gotoxy (1,1) ; + #endif + + + printf ("period=%f e=%f\n", period, p[D_ECC]) ; + printf ("r1/a=%f r2/a=%f B1=%f B2=%f\n", p[D_R1], p[D_R2], + -2.5 * log10(p[D_B1] * integrateWholeDisk(p[D_R1])), + -2.5 * log10(p[D_B2] * integrateWholeDisk(p[D_R2]))) ; + printf ("sin(i)=%f time0=%f omega=%f size=%d numRid=%d\n", p[D_SIN_I], mod1(p[D_TPO] + p[D_TMO]), + 360.0 * mod1(p[D_TPO] - p[D_TMO]), size, numRid) ; + printf ("chi2=%f avrChi2=%f splineChi2=%f sinChi2=%f\n", y, avrChi2, splineChi2, sinChi2) ; + printf ("sig.min2=%.2f sig.max1=%.2f sig.maxDiff=%.2f waviness=%.2f\n", sigmaMin2Amp, sigmaMax1Amp, sigmaMaxDiff, plateauWaviness) ; + printf ("midScatter=%f ", midScatterScore (p, time, amp, size)) ; + printf ("rhoMean=%f rhoMax=%f [g/cm^3]\n", meanDensity(period, p[D_R1], p[D_R2]), meanDensity(period, 0.0, p[D_R2])) ; +} +#endif + + + +// Writes the final (best fit) results to a given file (fout) +void printFinalResult (double p[DIM], double y, float *time, float *amp, float *err, int size, int numRid, double period, + double avrChi2, double splineChi2, double sinChi2, double sigmaMin2Amp, double sigmaMax1Amp, + double sigmaMaxDiff, double plateauWaviness, long numIterations, FILE *fout, char *filename, char *errFilename) +{ + int i ; + double errR1, errR2, errTMPO, errB1, errB2 ; + + // Checks that all the values are valid (not Inf or NaN) - may cause problems in older compilers + for (i = 0 ; (i < DIM) && (p[i] == p[i]) ; i++) ; + + if (i == DIM) + { + numIterations /= DIM ; + + errR1 = estimateError(D_R1, p, y, 0, time, amp, err, size, numIterations) ; + errR2 = estimateError(D_R2, p, y, 0, time, amp, err, size, numIterations) ; + errTMPO = sqrt(sqr(estimateError(D_TMO, p, y, 1, time, amp, err, size, numIterations)) + + sqr(estimateError(D_TPO, p, y, 1, time, amp, err, size, numIterations))) ; + errB1 = sqrt(sqr(estimateError(D_B1, p, y, 0, time, amp, err, size, numIterations) / p[D_B1]) + + sqr(2.0 * errR1 / p[D_R1])) * MAGNITUDE_ERROR_FACTOR ; + errB2 = sqrt(sqr(estimateError(D_B2, p, y, 0, time, amp, err, size, numIterations) / p[D_B2]) + + sqr(2.0 * errR2 / p[D_R2])) * MAGNITUDE_ERROR_FACTOR ; + + fprintf (fout, "%s %.12f ", filename, period) ; + fprintf (fout, "%f %f ", p[D_ECC], + estimateError(D_ECC, p, y, 0, time, amp, err, size, numIterations)) ; + fprintf (fout, "%f %f ", p[D_R1], errR1) ; + fprintf (fout, "%f %f ", p[D_R2], errR2) ; + fprintf (fout, "%f %f ", -2.5 * log10(p[D_B1] * integrateWholeDisk(p[D_R1])), errB1) ; + fprintf (fout, "%f %f ", -2.5 * log10(p[D_B2] * integrateWholeDisk(p[D_R2])), errB2) ; + fprintf (fout, "%f %f ", p[D_SIN_I], + estimateError(D_SIN_I, p, y, 0, time, amp, err, size, numIterations)) ; + fprintf (fout, "%f %f ", mod1(p[D_TPO] + p[D_TMO]), errTMPO) ; + fprintf (fout, "%f %f ", 360.0 * mod1(p[D_TPO] - p[D_TMO]), 360.0 * errTMPO) ; + + fprintf (fout, "%d %d %f %f %f %f ", size, numRid, y, avrChi2, splineChi2, sinChi2) ; + fprintf (fout, "%f %f %f %f ", sigmaMin2Amp, sigmaMax1Amp, sigmaMaxDiff, plateauWaviness) ; + fprintf (fout, "%f %f %f\n", midScatterScore (p, time, amp, size), + meanDensity(period, p[D_R1], p[D_R2]), meanDensity(period, 0.0, p[D_R2])) ; + } + else + printError (errFilename, 0, filename, "printFinalResult()", "One of the fitted parameters is Inf or NaN") ; + +#ifdef WRITE_CURVE_FIT + i = writeCurveFit (p, time, amp, err, size, filename) ; + + if (i) + printError (errFilename, 0, filename, "printFinalResult()", "Couldn't write a data or fit file") ; +#endif + + fflush(fout) ; +} + + +//------------------------------------------------------- + +int main (int argc, char **argv) +{ + int i, isDoublePeriod, best, numRid, size, sizeOrig ; + float *time, *amp, *err ; + double tmpTime, tmpMag, tmpErr ; + double min1Time, min2Time, tDiff, min1Amp, min2Amp, max1Amp, max2Amp ; + double sin_i, r1, r2, B1, B2, e, period, omega, time0 ; + double medianAmp, min1HalfWidth, min2HalfWidth, tmp, Y, varySin_i ; + double goalAmp, plateauStdDiv, plateauWaviness, avrChi2, splineChi2, sinChi2 ; + double sigmaMin1Amp, sigmaMin2Amp, sigmaMax1Amp, sigmaMaxDiff ; + double p[DIM+1][DIM], pPrevBest[DIM], y[DIM+1], yPrevBest ; + double quadA = DEFAULT_LIMB_QUAD_A, quadB = DEFAULT_LIMB_QUAD_B ; + long numIterations = DEFAULT_NUM_ITERATIONS ; + char filename[256], str[64] ; + FILE *finLC, *fout, *finList ; + +#ifdef GRAPHIC +#ifdef PLOT + int ga = 0 , gb = 0 ; + detectgraph (&ga, &gb) ; + initgraph (&ga, &gb, "") ; +#endif + + //argc = 4 ; + //argv[1] = "p.txt" ; + //argv[2] = "pout.txt" ; + //argv[3] = "perr.txt" ; + +#endif + + + if ((argc < 4) || (argc > 7)) + { + printf ("\n Welcome to the DEBiL fitter ver %s (DEBiL=Detached Eclipsing Binary Light-curve fitter)\n\n", VERSION) ; + printf ("Usage: %s [num iteration] [ ]\n", argv[0]) ; + printf (" Defaults: number of iterations = %d\n", DEFAULT_NUM_ITERATIONS) ; + printf (" quadratic limb darkening: a=%f b=%f\n", DEFAULT_LIMB_QUAD_A, DEFAULT_LIMB_QUAD_B) ; + printf ("\n") ; + return (1) ; + } + + if (!strcmp(argv[1], argv[2]) || + !strcmp(argv[1], argv[3]) || + !strcmp(argv[2], argv[3])) + { + printf ("ERROR: all the input/output filenames must be different\n") ; + return (2) ; + } + + + if (!(finList = fopen (argv[1], "rt"))) + { + printf ("ERROR: couldn't open the input LC list file ('%s')\n", argv[1]) ; + return (3) ; + } + + if (!(fout = fopen (argv[2], "at"))) + { + printf ("ERROR: couldn't open the output data file ('%s')\n", argv[2]) ; + fclose (finList) ; + return (4) ; + } + + if ((argc == 5) || (argc == 7)) + numIterations = atol(argv[4]) ; + + if (numIterations < 0) + { + printf ("ERROR: invalid number of iteration (%ld)\n", numIterations) ; + fclose (finList) ; + fclose (fout) ; + return (5) ; + } + + if (argc == 6) + { + quadA = atof(argv[4]) ; + quadB = atof(argv[5]) ; + } + else if (argc == 7) + { + quadA = atof(argv[5]) ; + quadB = atof(argv[6]) ; + } + + setLimbDarkening (quadA, quadB) ; + + printf (" Using settings: \n") ; + printf (" iterations = %ld\n", numIterations) ; + printf (" quadratic limb darkening params: a=%f b=%f\n", quadA, quadB) ; + + srand (RANDOM_SEED) ; + + //----------------------------------------------------------------------- + + while (2 == fscanf(finList, "%s %lf\n", filename, &period)) + { + printf ("%s P=%f\n", filename, period) ; + isDoublePeriod = 0 ; + + if (period <= 0.0) + { + printError (argv[3], 1, filename, "main()", "Invalid period") ; + continue ; + } + + if (!(finLC = fopen (filename, "rt"))) + { + printError (argv[3], 1, filename, "main()", "Couldn't open the input LC file") ; + continue ; + } + + //---------------------------------------------------------------- + + sizeOrig = 0 ; + while (1 == fscanf(finLC, "%*f %*f %lf\n", &tmpErr)) + if (tmpErr > 0.0) // Sign of an invalid magnitude + sizeOrig++ ; + + if (sizeOrig < (3 * MIN_NUM_DATA)) // Need MIN_NUM_DATA for both the dips and the plateau + { + printError (argv[3], 1, filename, "main()", "Not enough data points") ; + fclose (finLC) ; + continue ; + } + + time = (float*)malloc (sizeOrig * sizeof(float)) ; + amp = (float*)malloc (sizeOrig * sizeof(float)) ; + err = (float*)malloc (sizeOrig * sizeof(float)) ; + + if ((!time) || (!amp) || (!err)) + { + if (time) free(time) ; + if (amp) free(amp) ; + if (err) free(err) ; + + printError (argv[3], 1, filename, "main()", "Not enough memory") ; + fclose(finLC) ; + continue ; + } + + //------------------------- + +#ifdef DO_DOUBLE_PERIOD + MAKE_DOUBLE_PERIOD: +#endif + rewind(finLC) ; + size = sizeOrig ; // size is reduced in ridOutliers() when doing a double-period loopback + i = 0 ; + + while ((i < size) && (3 == fscanf(finLC, "%lf %lf %lf\n", &tmpTime, &tmpMag, &tmpErr))) + if (tmpErr > 0.0) // Sign of an invalid magnitude + { + time[i] = (float)mod1(tmpTime / period) ; + amp[i] = (float)pow(10.0, -0.4 * tmpMag) ; // Convert magnitude (logarithmic) to amplitude (linear) + err[i] = (float)(amp[i] * tmpErr / MAGNITUDE_ERROR_FACTOR) ; // Convert to absolute error + i++ ; + } + + if (i != size) + { + printError (argv[3], 1, filename, "main()", "Number mismatch") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + i = sortSamples(time, amp, err, size) ; + if (i) + { + printError (argv[3], 1, filename, "main()", "sortSamples() malloc failure") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + +#ifdef GRAPHIC + #ifdef PLOT + + (void)plotFit (0, time, amp, size, 1, 1, 0.0) ; + //(void)getc(stdin) ; + cleardevice() ; +#endif +#endif + splineChi2 = ridOutliers(time, amp, err, &size) ; + numRid = sizeOrig - size ; + + if (size < (3 * MIN_NUM_DATA)) // Need MIN_NUM_DATA for both the dips and the plateau + { + printError (argv[3], 1, filename, "main()", "Not enough non-outlier data points") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + //------------------------------------------------- + + // Find median: + medianAmp = getMedian(amp, size) ; + if (medianAmp == MAXFLOAT) + { + printError (argv[3], 1, filename, "main()", "getMedian() malloc failure") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + //-------------------------------------------------- + // Get the location of the dips: + + // Coarse search (secondary may be an "edge minimum") + findDips(time, amp, size, &min1Time, &min2Time, &min1Amp, &min2Amp) ; + + if (medianAmp < min2Amp) + { + if (isDoublePeriod) + { // This should never happen + printError (argv[3], 1, filename, "main()", "No secondary dip- double period was tried and failed (1)") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + else if ((2.0 * min1Amp) < medianAmp) + { + printError (argv[3], 1, filename, "main()", "No secondary dip- primary dip is too deep for doubling (1)") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + else // isDoublePeriod = 0 + { +#ifdef DO_DOUBLE_PERIOD + printError (argv[3], 0, filename, "main()", "No secondary dip- try double period (1)") ; + period *= 2.0 ; + isDoublePeriod = 1 ; + goto MAKE_DOUBLE_PERIOD ; +#else + printError (argv[3], 1, filename, "main()", "No secondary dip (1)") ; + goto ABORT_LIGHT_CURVE_FITTING ; +#endif + } + } + + + // Fine tune dips locations and finds their widths + goalAmp = 0.5 * (medianAmp + min1Amp) ; // Half width half min (coarse) + (void)findHalfWidth(time, amp, size, goalAmp, &min1Time) ; + min1Amp = interpolateSmooth (min1Time, time, amp, size) ; + goalAmp = 0.5 * (medianAmp + min2Amp) ; // Half width half min (coarse) + (void)findHalfWidth(time, amp, size, goalAmp, &min2Time) ; + min2Amp = interpolateSmooth (min2Time, time, amp, size) ; + + // find "maxs" midway between the dips + findMidMaxs(time, amp, size, 0.5 * (min1Time + min2Time), &max1Amp, &max2Amp) ; + + // fine-tune median: + i = findPlateauMedian(time, amp, size, min1Time, min2Time, + &medianAmp, &plateauStdDiv, &plateauWaviness) ; + if (i) + { + sprintf (str, "Error #%d in findPlateauMedian()", i) ; + printError (argv[3], 1, filename, "main()", str) ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + goalAmp = 0.5 * (medianAmp + min1Amp) ; // half width half min (fine tune) + min1HalfWidth = findHalfWidth(time, amp, size, goalAmp, &min1Time) ; + min1Amp = interpolateSmooth (min1Time, time, amp, size) ; + goalAmp = 0.5 * (medianAmp + min2Amp) ; // half width half min (fine tune) + min2HalfWidth = findHalfWidth(time, amp, size, goalAmp, &min2Time) ; + min2Amp = interpolateSmooth (min2Time, time, amp, size) ; + + sigmaMin1Amp = (medianAmp - min1Amp) / plateauStdDiv ; + sigmaMin2Amp = (medianAmp - min2Amp) / plateauStdDiv ; + sigmaMax1Amp = (max1Amp - medianAmp) / plateauStdDiv ; + sigmaMaxDiff = (max1Amp - max2Amp) / plateauStdDiv ; + + //------------- Tests: --------------------- + // Make sure that the dips are okay + // I don't use err[] here, in case the data is inherently volatile + + if (sigmaMin1Amp < MIN_STDDIV_BELOW_MEDIAN) + { + printError (argv[3], 1, filename, "main()", "Primary dip is too small") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + if (sigmaMax1Amp > MAX_STDDIV_ABOVE_MEDIAN) + printError (argv[3], 0, filename, "main()", "Large hump at mid-plateau") ; + + if (sigmaMin2Amp < MIN_STDDIV_BELOW_MEDIAN) // consider doubling the period + { + if (isDoublePeriod) + { + printError (argv[3], 1, filename, "main()", "Secondary dip is too small- double period was tried and failed (2)") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + else if ((2.0 * min1Amp) < medianAmp) + { + printError (argv[3], 1, filename, "main()", "Secondary dip is too small- primary dip is too deep for doubling (2)") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + else // isDoublePeriod = 0 + { +#ifdef DO_DOUBLE_PERIOD + printError (argv[3], 0, filename, "main()", "Secondary dip is too small- try double period (2)") ; + period *= 2.0 ; + isDoublePeriod = 1 ; + goto MAKE_DOUBLE_PERIOD ; +#else + printError (argv[3], 1, filename, "main()", "No secondary dip (2)") ; + goto ABORT_LIGHT_CURVE_FITTING ; +#endif + } + } + + if ((fabs(min1Time - min2Time) < (min1HalfWidth + min2HalfWidth)) || + (fabs(min1Time - min2Time) > (1.0 - min1HalfWidth - min2HalfWidth))) + { + if (isDoublePeriod) + { + printError (argv[3], 1, filename, "main()", "Dips are overlapping- double period was tried and failed (3)") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + else if ((2.0 * min1Amp) < medianAmp) + { + printError (argv[3], 1, filename, "main()", "Dips are overlapping- primary dip is too deep for doubling (3)") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + else // isDoublePeriod = 0 + { +#ifdef DO_DOUBLE_PERIOD + printError (argv[3], 0, filename, "main()", "Dips are overlapping- try double period (3)") ; + period *= 2.0 ; + isDoublePeriod = 1 ; + goto MAKE_DOUBLE_PERIOD ; +#else + printError (argv[3], 1, filename, "main()", "Dips are overlapping (3)") ; + goto ABORT_LIGHT_CURVE_FITTING ; +#endif + } + } + + if ((min1HalfWidth == 0.0) || (min2HalfWidth == 0.0)) + { + printError (argv[3], 1, filename, "main()", "Couldn't reach goal amplitude") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + if ((min1HalfWidth >= 0.25) || (min2HalfWidth >= 0.25)) + { + printError (argv[3], 1, filename, "main()", "Out of range half width") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + if (!isEnoughDipData(time, size, min1Time, min1HalfWidth) || + !isEnoughDipData(time, size, min2Time, min2HalfWidth)) + { + printError (argv[3], 1, filename, "main()", "Not enough data to constrain one of the dips") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + if ((min1Amp + min2Amp) < medianAmp) + { + printError (argv[3], 1, filename, "main()", "The dips are too deep") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + // ----------------------------------------------------- + + // Chi2 tests: + + avrChi2 = getAvrChi2 (amp, err, size) ; + sinChi2 = getSinChi2 (time, amp, err, size) ; + + // Calculate the fitting starting point: + + tDiff = fabs(min2Time - min1Time) ; + time0 = 0.5 * (min1Time + min2Time) ; // part 1/3 + + // Convert big-dip/small-dip into first-dip/second-dip (i.e. before/after perihelion) + if ((tDiff > 0.5) ^ (min1Time > min2Time)) + { + swap (&min1Time, &min2Time) ; + swap (&min1Amp, &min2Amp) ; + swap (&min1HalfWidth, &min2HalfWidth) ; + } + + if (tDiff > 0.5) + { + tDiff = 1.0 - tDiff ; + time0 += 0.5 ; // part 2/3 + } + + //------------------ + + // Y = e * sin(omega) + Y = (min1HalfWidth - min2HalfWidth) / (min1HalfWidth + min2HalfWidth) ; + e = getEccentricity(tDiff, Y) ; + omega = asin(Y / e) ; + + tmp = acos(cos(omega) / sqrt(1.0 - (Y*Y))) ; + if (omega < 0.0) + tmp = -tmp ; + + tmp -= (e * sqrt(1.0 - (e*e)) * Y * cos(omega)) / (1.0 - (Y*Y)) ; + + time0 += (tmp / (2.0 * M_PI)) ; + time0 = mod1(time0) ; + + //---------------------------------------- + + if ((e < 0.0) || (e >= 1.0)) + { + printError (argv[3], 1, filename, "main()", "Out of range eccentricity") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + //------- [r1 < r2] ------------ + + if (min1Amp < min2Amp) // I chose robustness over accuracy + r2 = sin(2.0 * M_PI * min1HalfWidth) ; + else + r2 = sin(2.0 * M_PI * min2HalfWidth) ; + + if (r2 > ((1.0 - e) / 2.1)) // In case of a large r (must hold: r1+r2 < 1-e) + r2 = (1.0 - e) / 2.1 ; // Theoretically this should be 2.0, but I'm allowing some extra play + + B2 = min2Amp / integrateWholeDisk(r2) ; + + r1 = invIntegrateDiskFromStart((medianAmp - min1Amp) / B2, r2) ; + if (r1 <= 0.0) + { + printError (argv[3], 1, filename, "main()", "Out of bound r1") ; + yPrevBest = MAXFLOAT ; + goto SECOND_ORIENTATION_FITTING ; + } + + B1 = (medianAmp - min2Amp) / integrateWholeDisk(r1) ; + + //------------------------------------------------- + + if (min1Amp < min2Amp) // I chose robustness over accuracy + sin_i = getSin_i (time, amp, size, e, -Y, r1, r2, &varySin_i, + min1Time, min1Amp, medianAmp, min1HalfWidth, filename, argv[3], 1) ; + else + sin_i = getSin_i (time, amp, size, e, Y, r1, r2, &varySin_i, + min2Time, min2Amp, medianAmp, min2HalfWidth, filename, argv[3], 1) ; + + //------------------------------------------------- + // Fit I: + for (i = 0 ; i < DIM+1 ; i++) + { + p[i][D_ECC] = e - ((i == 1) * 0.01 * e) ; + p[i][D_R1] = r1 - ((i == 2) * 0.1 * r1) ; + p[i][D_R2] = r2 - ((i == 3) * 0.1 * r2) ; + p[i][D_B1] = B1 + ((i == 4) * 0.1 * B1) ; + p[i][D_B2] = B2 + ((i == 5) * 0.1 * B2) ; + p[i][D_SIN_I] = sin_i - ((i == 6) * varySin_i) ; + p[i][D_TMO] = (0.5 * time0) - (omega / (4.0 * M_PI)) + ((i == 7) * 0.01) ; + p[i][D_TPO] = (0.5 * time0) + (omega / (4.0 * M_PI)) + ((i == 8) * 0.1) ; + + y[i] = scoreFit (p[i], time, amp, err, size, MIN_INTEGRATION_STEP) ; + } + +#ifdef GRAPHIC + #ifdef PLOT + + drawInitLines(p, time, amp, size, min1Time, min2Time, min1HalfWidth, min2HalfWidth, + min1Amp, min2Amp, medianAmp) ; +#endif +#endif + best = runFit(p, y, time, amp, err, size, numIterations, filename, argv[3]) ; + +#ifdef GRAPHIC + printResultValue (p[best], y[best], time, amp, size, numRid, period, avrChi2, splineChi2, + sinChi2, sigmaMin2Amp, sigmaMax1Amp, sigmaMaxDiff, plateauWaviness) ; +#endif + +#ifdef DOUBLE_PERIOD_SHORTCUT + if (isDoublePeriod) // If B1,B2 and r1,r2 are so close that they make only one minimum + { + printFinalResult (p[best], y[best], time, amp, err, size, numRid, period, avrChi2, splineChi2, sinChi2, + sigmaMin2Amp, sigmaMax1Amp, sigmaMaxDiff, plateauWaviness, numIterations, fout, filename, argv[3]) ; + goto ABORT_LIGHT_CURVE_FITTING ; + } +#endif + + for (i = 0 ; i < DIM ; i++) + pPrevBest[i] = p[best][i] ; + + yPrevBest = y[best] ; + +#ifdef GRAPHIC + //(void)getc(stdin) ; +#endif + + //------------ [r1 > r2] ------------------------------------- + + SECOND_ORIENTATION_FITTING: + + if (min1Amp < min2Amp) // I chose robustness over accuracy + r1 = sin(2.0 * M_PI * min1HalfWidth) ; + else + r1 = sin(2.0 * M_PI * min2HalfWidth) ; + + if (r1 > ((1.0 - e) / 2.1)) // In case of a large r (must hold: r1+r2 < 1-e) + r1 = (1.0 - e) / 2.1 ; // Theoretically this should be 2.0, but I'm allowing some extra play + + B1 = min1Amp / integrateWholeDisk(r1) ; + + r2 = invIntegrateDiskFromStart((medianAmp - min2Amp) / B1, r1) ; + if (r2 <= 0.0) + { + printError (argv[3], 1, filename, "main()", "Out of bound r2") ; + goto ABORT_LIGHT_CURVE_FITTING ; + } + + B2 = (medianAmp - min1Amp) / integrateWholeDisk(r2) ; + + //------------------------------------------------- + + if (min1Amp < min2Amp) // I chose robustness over accuracy + sin_i = getSin_i (time, amp, size, e, -Y, r2, r1, &varySin_i, + min1Time, min1Amp, medianAmp, min1HalfWidth, filename, argv[3], 0) ; + else + sin_i = getSin_i (time, amp, size, e, Y, r2, r1, &varySin_i, + min2Time, min2Amp, medianAmp, min2HalfWidth, filename, argv[3], 0) ; + //------------------------------------------------- + // Fit II: + for (i = 0 ; i < (DIM+1) ; i++) + { + p[i][D_ECC] = e - ((i == 1) * 0.01 * e) ; + p[i][D_R1] = r1 - ((i == 2) * 0.1 * r1) ; + p[i][D_R2] = r2 - ((i == 3) * 0.1 * r2) ; + p[i][D_B1] = B1 + ((i == 4) * 0.1 * B1) ; + p[i][D_B2] = B2 + ((i == 5) * 0.1 * B2) ; + p[i][D_SIN_I] = sin_i - ((i == 6) * varySin_i) ; + p[i][D_TMO] = (0.5 * time0) - (omega / (4.0 * M_PI)) + ((i == 7) * 0.01) ; + p[i][D_TPO] = (0.5 * time0) + (omega / (4.0 * M_PI)) + ((i == 8) * 0.1) ; + + y[i] = scoreFit (p[i], time, amp, err, size, MIN_INTEGRATION_STEP) ; + } + + +#ifdef GRAPHIC + #ifdef PLOT + + drawInitLines(p, time, amp, size, min1Time, min2Time, min1HalfWidth, min2HalfWidth, + min1Amp, min2Amp, medianAmp) ; +#endif +#endif + best = runFit(p, y, time, amp, err, size, numIterations, filename, argv[3]) ; + +#ifdef GRAPHIC + printResultValue (p[best], y[best], time, amp, size, numRid, period, avrChi2, splineChi2, + sinChi2, sigmaMin2Amp, sigmaMax1Amp, sigmaMaxDiff, plateauWaviness) ; +#endif + + //------------------------------------------------ + + if (y[best] < yPrevBest) + printFinalResult (p[best], y[best], time, amp, err, size, numRid, period, avrChi2, splineChi2, sinChi2, + sigmaMin2Amp, sigmaMax1Amp, sigmaMaxDiff, plateauWaviness, numIterations, fout, filename, argv[3]) ; + else + printFinalResult (pPrevBest, yPrevBest, time, amp, err, size, numRid, period, avrChi2, splineChi2, sinChi2, + sigmaMin2Amp, sigmaMax1Amp, sigmaMaxDiff, plateauWaviness, numIterations, fout, filename, argv[3]) ; + + ABORT_LIGHT_CURVE_FITTING: + fclose (finLC) ; + free (time) ; + free (amp) ; + free (err) ; + +#ifdef GRAPHIC + // (void)getc(stdin) ; +#endif + } + + fclose (finList) ; + fclose (fout) ; + + return (0) ; +} + + +/* + To-do: + 1. find best cooling rate (dynamic mutation rate: as the solutions converges, raise the temperature ?) + 2. loop-around convergence for sin_i + + + Note 1. + Calculating the error of the parameters is problematic for two reasons. The first is that we + must determine the size of perturbation that would make a "significant" change in the + optimization score. It is not clear what this "significant" value is. The second, and + probably more sever problem is that while changing each parameter in isolation will + make a relatively large change in the score, there are pairs of parameters (e.g. for e=0, there + is a degeneracy for 2*pi*time0 - omega = const). So lowering one while raising the other will + have a very small change in the score. + + Note 2. + Why does the dip separation vary even when the eccentricity is fixed? + Because when omega = pi/2 (i.e. eclipses occur at perihelion and aphelion), the distance between eclipses + will always be exactly half the period (perfectly symmetric). We assume here that omega = 0 (lower bound?). + That means that from the time difference between dips we can only compute a minimum eccentricity. +*/ diff --git a/mltsp/TCP/Algorithms/Debil/dotastro220107.dat.data b/mltsp/TCP/Algorithms/Debil/dotastro220107.dat.data new file mode 100755 index 00000000..c9c15ecd --- /dev/null +++ b/mltsp/TCP/Algorithms/Debil/dotastro220107.dat.data @@ -0,0 +1,433 @@ +0.002276 9.577000 0.032000 -0.047318 +0.003697 9.589000 0.031000 -0.035318 +0.003948 9.597000 0.039000 -0.027318 +0.006794 9.576000 0.043000 -0.048318 +0.007192 9.589000 0.036000 -0.035318 +0.007453 9.597000 0.036000 -0.027318 +0.015267 9.843000 0.036000 0.218682 +0.015530 9.618000 0.049000 -0.006318 +0.016955 9.667000 0.037000 0.042681 +0.018122 9.573000 0.047000 -0.051318 +0.021023 9.713000 0.031000 0.088682 +0.027230 9.577000 0.027000 -0.047318 +0.028270 9.594000 0.036000 -0.030318 +0.033506 9.570000 0.053000 -0.054318 +0.034735 9.667000 0.057000 0.042681 +0.035575 9.592000 0.025000 -0.032318 +0.035829 9.612000 0.035000 -0.012319 +0.037137 9.629000 0.031000 0.004682 +0.037208 9.653000 0.035000 0.028682 +0.039309 9.579000 0.028000 -0.045318 +0.040227 9.625000 0.026000 0.000682 +0.042113 9.614000 0.030000 -0.010318 +0.043350 9.610000 0.033000 -0.014318 +0.045103 9.617000 0.040000 -0.007318 +0.052005 9.725000 0.039000 0.100681 +0.054220 9.748000 0.052000 0.123682 +0.054367 9.655000 0.047000 0.030681 +0.056497 9.637000 0.037000 0.012682 +0.062465 9.605000 0.029000 -0.019319 +0.063234 9.607000 0.031000 -0.017318 +0.068826 9.673000 0.037000 0.048682 +0.074195 9.600000 0.032000 -0.024318 +0.075226 9.628000 0.046000 0.003682 +0.077929 9.596000 0.033000 -0.028318 +0.081859 9.621000 0.036000 -0.003319 +0.083188 9.652000 0.043000 0.027682 +0.087292 9.635000 0.040000 0.010682 +0.088119 9.646000 0.037000 0.021682 +0.089062 9.592000 0.052000 -0.032318 +0.098303 9.637000 0.029000 0.012682 +0.099267 9.631000 0.037000 0.006682 +0.101281 9.763000 0.041000 0.138682 +0.111354 9.796000 0.057000 0.171682 +0.111633 9.573000 0.036000 -0.051318 +0.122947 9.623000 0.030000 -0.001318 +0.123641 9.614000 0.032000 -0.010318 +0.130314 9.588000 0.029000 -0.036318 +0.130611 9.612000 0.043000 -0.012319 +0.132444 9.663000 0.043000 0.038682 +0.132867 9.800000 0.043000 0.175682 +0.134208 9.747000 0.048000 0.122682 +0.137308 9.635000 0.045000 0.010682 +0.137460 9.636000 0.032000 0.011681 +0.139244 9.580000 0.036000 -0.044318 +0.147820 9.615000 0.032000 -0.009318 +0.148044 9.630000 0.041000 0.005682 +0.150387 9.649000 0.050000 0.024682 +0.150861 9.623000 0.033000 -0.001318 +0.151972 9.648000 0.039000 0.023682 +0.156266 9.629000 0.029000 0.004682 +0.159943 9.670000 0.042000 0.045682 +0.161384 9.583000 0.053000 -0.041318 +0.168827 9.646000 0.036000 0.021682 +0.169119 9.621000 0.028000 -0.003319 +0.169354 9.605000 0.060000 -0.019319 +0.169870 9.629000 0.033000 0.004682 +0.172957 9.610000 0.054000 -0.014318 +0.174226 9.788000 0.034000 0.163682 +0.174293 9.736000 0.040000 0.111682 +0.181129 9.633000 0.050000 0.008682 +0.185496 9.653000 0.030000 0.028682 +0.187173 9.630000 0.036000 0.005682 +0.188852 9.625000 0.028000 0.000682 +0.193384 9.618000 0.033000 -0.006318 +0.193399 9.668000 0.041000 0.043682 +0.195986 9.853000 0.039000 0.228682 +0.198033 9.595000 0.057000 -0.029318 +0.201189 9.605000 0.042000 -0.019319 +0.201368 9.638000 0.047000 0.013682 +0.202556 9.635000 0.055000 0.010682 +0.203655 9.888000 0.049000 0.263682 +0.203662 9.640000 0.037000 0.015682 +0.206228 9.612000 0.032000 -0.012319 +0.207774 9.623000 0.036000 -0.001318 +0.208357 9.615000 0.042000 -0.009318 +0.208787 9.672000 0.028000 0.047682 +0.209914 9.641000 0.029000 0.016682 +0.212407 9.592000 0.038000 -0.032318 +0.214531 9.619000 0.029000 -0.005868 +0.216549 9.605000 0.059000 -0.021739 +0.218241 9.622000 0.043000 -0.006999 +0.218393 9.635000 0.036000 0.005770 +0.219522 9.613000 0.043000 -0.018069 +0.221976 9.623000 0.028000 -0.012809 +0.227238 9.652000 0.035000 0.003033 +0.228424 9.615000 0.044000 -0.037437 +0.232872 9.605000 0.037000 -0.062005 +0.236673 9.756000 0.054000 0.074930 +0.237686 9.734000 0.034000 0.048937 +0.243037 9.755000 0.040000 0.047334 +0.244283 9.648000 0.041000 -0.065266 +0.250112 9.746000 0.035000 0.005090 +0.250489 9.783000 0.028000 0.040231 +0.251783 9.675000 0.039000 -0.074212 +0.252035 9.750000 0.031000 -0.000477 +0.252976 9.786000 0.030000 0.030772 +0.253221 9.756000 0.026000 -0.000469 +0.255615 9.657000 0.039000 -0.111750 +0.259136 9.688000 0.050000 -0.099153 +0.260180 9.822000 0.035000 0.029338 +0.260464 9.886000 0.035000 0.091838 +0.261179 9.808000 0.038000 0.010052 +0.261617 9.919000 0.045000 0.118731 +0.263350 9.801000 0.031000 -0.008461 +0.264973 9.847000 0.030000 0.028941 +0.269820 9.731000 0.040000 -0.112457 +0.273677 9.695000 0.046000 -0.167976 +0.276927 9.804000 0.045000 -0.074630 +0.278448 9.756000 0.043000 -0.129633 +0.280180 9.903000 0.034000 0.009694 +0.281698 10.027000 0.029000 0.127259 +0.286643 9.858000 0.047000 -0.060602 +0.289150 9.806000 0.031000 -0.120669 +0.294416 9.890000 0.036000 -0.050015 +0.299953 9.895000 0.036000 -0.053580 +0.300529 9.923000 0.031000 -0.026153 +0.303271 9.913000 0.030000 -0.038088 +0.304916 9.884000 0.028000 -0.067632 +0.306904 9.866000 0.035000 -0.085680 +0.308147 9.933000 0.030000 -0.018372 +0.308585 9.826000 0.028000 -0.125202 +0.309834 10.135000 0.030000 0.184465 +0.312479 10.110000 0.029000 0.161768 +0.313160 9.887000 0.035000 -0.060438 +0.313474 9.948000 0.044000 0.000956 +0.316819 9.852000 0.030000 -0.089739 +0.319155 9.955000 0.042000 0.018185 +0.324206 10.265000 0.050000 0.342211 +0.326868 9.908000 0.047000 -0.005644 +0.327044 9.830000 0.051000 -0.083002 +0.328445 9.919000 0.030000 0.011289 +0.329078 9.853000 0.058000 -0.052226 +0.333488 9.888000 0.053000 0.001523 +0.335206 9.741000 0.027000 -0.137574 +0.342180 9.741000 0.046000 -0.103062 +0.342565 9.802000 0.052000 -0.040073 +0.344184 9.987000 0.031000 0.153349 +0.347943 9.796000 0.043000 -0.017846 +0.352512 9.659000 0.028000 -0.130656 +0.353426 9.796000 0.029000 0.011151 +0.353860 9.672000 0.033000 -0.110566 +0.355511 9.985000 0.038000 0.211055 +0.355778 9.653000 0.042000 -0.119554 +0.358960 9.723000 0.038000 -0.033217 +0.360752 9.772000 0.040000 0.024795 +0.363418 9.800000 0.038000 0.065892 +0.365258 9.708000 0.031000 -0.017317 +0.368211 9.729000 0.049000 0.017316 +0.370291 9.648000 0.057000 -0.054472 +0.370570 9.652000 0.040000 -0.049262 +0.370983 9.639000 0.050000 -0.060483 +0.372261 9.638000 0.035000 -0.056070 +0.378927 9.585000 0.055000 -0.083270 +0.379415 9.638000 0.032000 -0.028558 +0.380758 9.703000 0.032000 0.041027 +0.380844 9.615000 0.030000 -0.046687 +0.388130 9.683000 0.032000 0.042387 +0.388836 9.678000 0.046000 0.039062 +0.389830 9.689000 0.029000 0.052300 +0.389851 9.632000 0.038000 -0.004654 +0.390100 9.621000 0.034000 -0.015119 +0.392576 9.617000 0.026000 -0.014306 +0.395372 9.634000 0.034000 0.006867 +0.400732 9.606000 0.039000 -0.018318 +0.401910 9.651000 0.028000 0.026681 +0.402435 9.628000 0.037000 0.003682 +0.407214 9.653000 0.028000 0.028682 +0.407430 9.648000 0.033000 0.023682 +0.408070 9.620000 0.039000 -0.004318 +0.408073 9.764000 0.029000 0.139682 +0.412762 9.677000 0.038000 0.052682 +0.413138 9.674000 0.040000 0.049682 +0.415613 9.675000 0.048000 0.050682 +0.415945 9.616000 0.043000 -0.008318 +0.421586 9.593000 0.039000 -0.031318 +0.422793 9.650000 0.035000 0.025682 +0.424739 9.638000 0.055000 0.013682 +0.425491 9.637000 0.028000 0.012682 +0.430718 9.664000 0.044000 0.039681 +0.431028 9.619000 0.034000 -0.005318 +0.432370 9.688000 0.030000 0.063682 +0.432955 9.639000 0.035000 0.014682 +0.434727 9.614000 0.029000 -0.010318 +0.437163 9.642000 0.033000 0.017682 +0.438765 9.640000 0.037000 0.015682 +0.439819 9.647000 0.034000 0.022682 +0.449397 9.602000 0.044000 -0.022318 +0.452282 9.602000 0.043000 -0.022318 +0.455916 9.637000 0.029000 0.012682 +0.460777 9.621000 0.040000 -0.003319 +0.468196 9.627000 0.044000 0.002682 +0.468624 9.611000 0.045000 -0.013318 +0.470275 9.629000 0.037000 0.004682 +0.470548 9.595000 0.038000 -0.029318 +0.472081 9.616000 0.031000 -0.008318 +0.478224 9.625000 0.036000 0.000682 +0.481771 9.595000 0.028000 -0.029318 +0.486078 9.618000 0.044000 -0.006318 +0.486229 9.617000 0.040000 -0.007318 +0.486827 9.618000 0.049000 -0.006318 +0.489156 9.611000 0.033000 -0.013318 +0.495418 9.627000 0.040000 0.002682 +0.498035 9.626000 0.029000 0.001682 +0.501854 9.614000 0.037000 -0.010318 +0.504933 9.581000 0.045000 -0.043318 +0.510651 9.618000 0.059000 -0.006318 +0.512338 9.578000 0.044000 -0.046318 +0.513463 9.597000 0.044000 -0.027318 +0.515082 9.594000 0.032000 -0.030318 +0.515572 9.624000 0.030000 -0.000319 +0.516227 9.637000 0.028000 0.012682 +0.519792 9.627000 0.030000 0.002682 +0.523480 9.568000 0.058000 -0.056318 +0.524702 9.603000 0.028000 -0.021318 +0.528246 9.617000 0.056000 -0.007318 +0.529341 9.613000 0.033000 -0.011319 +0.530217 9.568000 0.050000 -0.056318 +0.533377 9.606000 0.031000 -0.018318 +0.533488 9.628000 0.032000 0.003682 +0.533648 9.621000 0.033000 -0.003319 +0.538006 9.610000 0.030000 -0.014318 +0.538111 9.580000 0.044000 -0.044318 +0.538228 9.600000 0.034000 -0.024318 +0.539111 9.580000 0.027000 -0.044318 +0.543601 9.595000 0.044000 -0.029318 +0.550314 9.618000 0.040000 -0.006318 +0.550749 9.633000 0.038000 0.008682 +0.553078 9.621000 0.029000 -0.003319 +0.555457 9.594000 0.044000 -0.030318 +0.557524 9.631000 0.044000 0.006682 +0.569886 9.614000 0.031000 -0.010318 +0.570124 9.656000 0.045000 0.031682 +0.570182 9.581000 0.046000 -0.043318 +0.570818 9.595000 0.026000 -0.029318 +0.572390 9.766000 0.045000 0.141681 +0.572523 9.637000 0.061000 0.012682 +0.575013 9.810000 0.028000 0.185682 +0.581371 9.581000 0.029000 -0.043318 +0.589309 9.627000 0.031000 0.002682 +0.589815 9.594000 0.026000 -0.030318 +0.589820 9.623000 0.038000 -0.001318 +0.590516 9.589000 0.036000 -0.035318 +0.591142 9.582000 0.031000 -0.042318 +0.592356 9.621000 0.033000 -0.003319 +0.599637 9.592000 0.030000 -0.032318 +0.606675 9.601000 0.032000 -0.023318 +0.607030 9.692000 0.047000 0.067682 +0.607882 9.567000 0.029000 -0.057318 +0.613112 9.612000 0.033000 -0.012319 +0.614332 9.588000 0.026000 -0.036318 +0.616967 9.613000 0.062000 -0.011319 +0.620535 9.617000 0.037000 -0.007318 +0.621716 9.600000 0.041000 -0.024318 +0.623833 9.774000 0.043000 0.149682 +0.625048 9.591000 0.039000 -0.033318 +0.625593 9.571000 0.061000 -0.053318 +0.626553 9.594000 0.035000 -0.030318 +0.629076 9.558000 0.045000 -0.066318 +0.630171 9.604000 0.027000 -0.020318 +0.630350 9.661000 0.034000 0.036682 +0.631837 9.807000 0.037000 0.182682 +0.634898 9.641000 0.032000 0.016682 +0.640387 9.623000 0.031000 -0.001318 +0.645125 9.621000 0.033000 -0.003319 +0.646906 9.608000 0.036000 -0.016318 +0.647337 9.581000 0.034000 -0.043318 +0.649006 9.594000 0.029000 -0.030318 +0.650250 9.660000 0.045000 0.035682 +0.655780 9.579000 0.039000 -0.045318 +0.660726 9.575000 0.030000 -0.049318 +0.661460 9.603000 0.033000 -0.021318 +0.661963 9.566000 0.029000 -0.058318 +0.663659 9.631000 0.049000 0.006682 +0.664577 9.547000 0.039000 -0.077318 +0.667919 9.574000 0.041000 -0.050318 +0.670973 9.587000 0.037000 -0.037318 +0.671574 9.601000 0.034000 -0.023318 +0.674757 9.569000 0.035000 -0.055318 +0.677844 9.605000 0.040000 -0.019319 +0.680111 9.606000 0.031000 -0.018318 +0.681348 9.581000 0.029000 -0.043318 +0.682480 9.673000 0.047000 0.048682 +0.682491 9.587000 0.042000 -0.037318 +0.682611 9.737000 0.029000 0.112681 +0.690116 9.615000 0.046000 -0.009318 +0.691616 9.548000 0.039000 -0.076318 +0.693431 9.817000 0.032000 0.192682 +0.695182 9.674000 0.031000 0.049682 +0.695219 9.568000 0.029000 -0.056318 +0.697299 9.565000 0.037000 -0.059318 +0.698199 9.546000 0.039000 -0.078318 +0.704211 9.572000 0.033000 -0.052318 +0.705624 9.558000 0.037000 -0.066318 +0.705914 9.628000 0.026000 0.003682 +0.707529 9.581000 0.030000 -0.043318 +0.712947 9.616000 0.038000 -0.008318 +0.712961 9.614000 0.045000 -0.010318 +0.713337 9.620000 0.037000 -0.004318 +0.713461 9.580000 0.048000 -0.044318 +0.716011 9.565000 0.043000 -0.059318 +0.722281 9.573000 0.037000 -0.051318 +0.722664 9.567000 0.036000 -0.057318 +0.724302 9.586000 0.035000 -0.038318 +0.725197 9.598000 0.034000 -0.026319 +0.733206 9.593000 0.051000 -0.032760 +0.739756 9.607000 0.029000 -0.032550 +0.740868 9.580000 0.041000 -0.062830 +0.741106 9.762000 0.026000 0.118442 +0.741387 9.609000 0.038000 -0.035426 +0.744583 9.583000 0.026000 -0.071895 +0.746847 9.578000 0.039000 -0.084541 +0.752949 9.842000 0.029000 0.164529 +0.753790 9.567000 0.045000 -0.110479 +0.754150 9.595000 0.053000 -0.082479 +0.757190 9.594000 0.032000 -0.083479 +0.757311 9.828000 0.036000 0.150521 +0.758752 9.643000 0.046000 -0.034479 +0.758815 9.616000 0.032000 -0.061479 +0.759830 9.674000 0.030000 -0.003479 +0.763330 9.597000 0.032000 -0.080479 +0.767641 9.601000 0.050000 -0.076479 +0.772548 9.664000 0.033000 -0.010525 +0.779150 9.617000 0.053000 -0.037019 +0.782378 9.630000 0.030000 -0.013471 +0.784257 9.638000 0.037000 0.000056 +0.787063 9.634000 0.036000 0.003006 +0.788150 9.638000 0.033000 0.009178 +0.789753 9.632000 0.030000 0.005730 +0.790380 9.635000 0.036000 0.009488 +0.791335 9.620000 0.033000 -0.004665 +0.797434 9.613000 0.031000 -0.011319 +0.799812 9.596000 0.045000 -0.028318 +0.801099 9.610000 0.033000 -0.014318 +0.806857 9.636000 0.034000 0.011681 +0.810070 9.591000 0.044000 -0.033318 +0.810317 9.582000 0.054000 -0.042318 +0.811961 9.632000 0.034000 0.007682 +0.813446 9.607000 0.031000 -0.017318 +0.814769 9.609000 0.030000 -0.015318 +0.815705 9.640000 0.028000 0.015682 +0.822607 9.590000 0.037000 -0.034318 +0.825823 9.621000 0.036000 -0.003319 +0.828875 9.640000 0.030000 0.015682 +0.830347 9.598000 0.028000 -0.026319 +0.830737 9.555000 0.054000 -0.069318 +0.835303 9.660000 0.030000 0.035682 +0.836647 9.588000 0.034000 -0.036318 +0.836865 9.634000 0.041000 0.009682 +0.839054 9.576000 0.038000 -0.048318 +0.839261 9.624000 0.051000 -0.000319 +0.844703 9.605000 0.029000 -0.019319 +0.849355 9.694000 0.043000 0.069682 +0.849571 9.627000 0.048000 0.002682 +0.850275 9.598000 0.042000 -0.026319 +0.850802 9.606000 0.027000 -0.018318 +0.856066 9.577000 0.037000 -0.047318 +0.856151 9.598000 0.033000 -0.026319 +0.859013 9.789000 0.051000 0.164682 +0.859609 9.614000 0.029000 -0.010318 +0.862180 9.572000 0.029000 -0.052318 +0.864120 9.591000 0.032000 -0.033318 +0.864391 9.550000 0.043000 -0.074318 +0.864569 9.648000 0.042000 0.023682 +0.872070 9.676000 0.052000 0.051682 +0.873306 9.603000 0.036000 -0.021318 +0.873879 9.574000 0.048000 -0.050318 +0.875039 9.622000 0.036000 -0.002318 +0.875724 9.600000 0.029000 -0.024318 +0.875898 9.575000 0.049000 -0.049318 +0.877651 9.569000 0.029000 -0.055318 +0.881114 9.552000 0.050000 -0.072318 +0.882148 9.590000 0.037000 -0.034318 +0.883686 9.566000 0.043000 -0.058318 +0.884840 9.572000 0.031000 -0.052318 +0.886124 9.586000 0.026000 -0.038318 +0.889055 9.601000 0.050000 -0.023318 +0.892522 9.562000 0.040000 -0.062318 +0.894824 9.614000 0.041000 -0.010318 +0.895062 9.574000 0.037000 -0.050318 +0.897153 9.563000 0.047000 -0.061318 +0.898719 9.599000 0.056000 -0.025318 +0.900866 9.756000 0.033000 0.131682 +0.901406 9.550000 0.034000 -0.074318 +0.909185 9.579000 0.028000 -0.045318 +0.909413 9.807000 0.042000 0.182682 +0.911936 9.723000 0.040000 0.098682 +0.914139 9.574000 0.040000 -0.050318 +0.916710 9.595000 0.031000 -0.029318 +0.918909 9.561000 0.047000 -0.063318 +0.924655 9.545000 0.037000 -0.079318 +0.925004 9.545000 0.043000 -0.079318 +0.926640 9.683000 0.034000 0.058682 +0.926651 9.573000 0.040000 -0.051318 +0.927919 9.591000 0.029000 -0.033318 +0.928619 9.616000 0.042000 -0.008318 +0.929195 9.614000 0.044000 -0.010318 +0.945448 9.606000 0.041000 -0.018318 +0.948090 9.621000 0.034000 -0.003319 +0.948225 9.587000 0.059000 -0.037318 +0.948947 9.598000 0.032000 -0.026319 +0.949159 9.609000 0.038000 -0.015318 +0.950582 9.645000 0.030000 0.020682 +0.953994 9.642000 0.044000 0.017682 +0.955958 9.602000 0.033000 -0.022318 +0.955960 9.593000 0.034000 -0.031318 +0.956075 9.632000 0.043000 0.007682 +0.961293 9.619000 0.032000 -0.005318 +0.968326 9.599000 0.036000 -0.025318 +0.970157 9.598000 0.040000 -0.026319 +0.977454 9.599000 0.031000 -0.025318 +0.980358 9.606000 0.041000 -0.018318 +0.983339 9.609000 0.043000 -0.015318 +0.984604 9.595000 0.036000 -0.029318 +0.985168 9.583000 0.032000 -0.041318 +0.986654 9.604000 0.052000 -0.020318 +0.987530 9.635000 0.051000 0.010682 +0.988520 9.593000 0.031000 -0.031318 +0.993242 9.550000 0.050000 -0.074318 +0.993535 9.634000 0.037000 0.009682 +0.995192 9.586000 0.035000 -0.038318 +0.995638 9.615000 0.030000 -0.009318 +0.998673 9.594000 0.045000 -0.030318 +0.999492 9.567000 0.046000 -0.057318 diff --git a/mltsp/TCP/Algorithms/Debil/dotastro220107.dat.fit b/mltsp/TCP/Algorithms/Debil/dotastro220107.dat.fit new file mode 100755 index 00000000..01adb134 --- /dev/null +++ b/mltsp/TCP/Algorithms/Debil/dotastro220107.dat.fit @@ -0,0 +1,500 @@ +0.000000 9.624318 +0.002000 9.624318 +0.004000 9.624318 +0.006000 9.624318 +0.008000 9.624318 +0.010000 9.624318 +0.012000 9.624318 +0.014000 9.624318 +0.016000 9.624318 +0.018000 9.624318 +0.020000 9.624318 +0.022000 9.624318 +0.024000 9.624318 +0.026000 9.624318 +0.028000 9.624318 +0.030000 9.624318 +0.032000 9.624318 +0.034000 9.624318 +0.036000 9.624318 +0.038000 9.624318 +0.040000 9.624318 +0.042000 9.624318 +0.044000 9.624318 +0.046000 9.624318 +0.048000 9.624318 +0.050000 9.624318 +0.052000 9.624318 +0.054000 9.624318 +0.056000 9.624318 +0.058000 9.624318 +0.060000 9.624318 +0.062000 9.624318 +0.064000 9.624318 +0.066000 9.624318 +0.068000 9.624318 +0.070000 9.624318 +0.072000 9.624318 +0.074000 9.624318 +0.076000 9.624318 +0.078000 9.624318 +0.080000 9.624318 +0.082000 9.624318 +0.084000 9.624318 +0.086000 9.624318 +0.088000 9.624318 +0.090000 9.624318 +0.092000 9.624318 +0.094000 9.624318 +0.096000 9.624318 +0.098000 9.624318 +0.100000 9.624318 +0.102000 9.624318 +0.104000 9.624318 +0.106000 9.624318 +0.108000 9.624318 +0.110000 9.624318 +0.112000 9.624318 +0.114000 9.624318 +0.116000 9.624318 +0.118000 9.624318 +0.120000 9.624318 +0.122000 9.624318 +0.124000 9.624318 +0.126000 9.624318 +0.128000 9.624318 +0.130000 9.624318 +0.132000 9.624318 +0.134000 9.624318 +0.136000 9.624318 +0.138000 9.624318 +0.140000 9.624318 +0.142000 9.624318 +0.144000 9.624318 +0.146000 9.624318 +0.148000 9.624318 +0.150000 9.624318 +0.152000 9.624318 +0.154000 9.624318 +0.156000 9.624318 +0.158000 9.624318 +0.160000 9.624318 +0.162000 9.624318 +0.164000 9.624318 +0.166000 9.624318 +0.168000 9.624318 +0.170000 9.624318 +0.172000 9.624318 +0.174000 9.624318 +0.176000 9.624318 +0.178000 9.624318 +0.180000 9.624318 +0.182000 9.624318 +0.184000 9.624318 +0.186000 9.624318 +0.188000 9.624318 +0.190000 9.624318 +0.192000 9.624318 +0.194000 9.624318 +0.196000 9.624318 +0.198000 9.624318 +0.200000 9.624318 +0.202000 9.624318 +0.204000 9.624318 +0.206000 9.624318 +0.208000 9.624318 +0.210000 9.624318 +0.212000 9.624318 +0.214000 9.624561 +0.216000 9.626134 +0.218000 9.628643 +0.220000 9.631916 +0.222000 9.635859 +0.224000 9.640414 +0.226000 9.645532 +0.228000 9.651177 +0.230000 9.657317 +0.232000 9.663989 +0.234000 9.671024 +0.236000 9.678475 +0.238000 9.686319 +0.240000 9.694534 +0.242000 9.703097 +0.244000 9.711985 +0.246000 9.721174 +0.248000 9.730641 +0.250000 9.740359 +0.252000 9.750301 +0.254000 9.760440 +0.256000 9.770743 +0.258000 9.781178 +0.260000 9.791710 +0.262000 9.802300 +0.264000 9.812908 +0.266000 9.823489 +0.268000 9.833998 +0.270000 9.844383 +0.272000 9.854592 +0.274000 9.864569 +0.276000 9.874257 +0.278000 9.883595 +0.280000 9.892524 +0.282000 9.900984 +0.284000 9.908917 +0.286000 9.916365 +0.288000 9.923099 +0.290000 9.929160 +0.292000 9.934516 +0.294000 9.939145 +0.296000 9.943038 +0.298000 9.946196 +0.300000 9.948629 +0.302000 9.950353 +0.304000 9.951386 +0.306000 9.951741 +0.308000 9.951422 +0.310000 9.950426 +0.312000 9.948740 +0.314000 9.946345 +0.316000 9.943227 +0.318000 9.939375 +0.320000 9.934786 +0.322000 9.929469 +0.324000 9.923447 +0.326000 9.916751 +0.328000 9.909421 +0.330000 9.901508 +0.332000 9.893065 +0.334000 9.884152 +0.336000 9.874827 +0.338000 9.865152 +0.340000 9.855187 +0.342000 9.844989 +0.344000 9.834614 +0.346000 9.824115 +0.348000 9.813542 +0.350000 9.802942 +0.352000 9.792359 +0.354000 9.781834 +0.356000 9.771403 +0.358000 9.761104 +0.360000 9.750967 +0.362000 9.741024 +0.364000 9.731304 +0.366000 9.721833 +0.368000 9.712636 +0.370000 9.703739 +0.372000 9.695163 +0.374000 9.686933 +0.376000 9.679070 +0.378000 9.671597 +0.380000 9.664537 +0.382000 9.657913 +0.384000 9.651752 +0.386000 9.646080 +0.388000 9.640928 +0.390000 9.636333 +0.392000 9.632338 +0.394000 9.629001 +0.396000 9.626405 +0.398000 9.624703 +0.400000 9.624318 +0.402000 9.624318 +0.404000 9.624318 +0.406000 9.624318 +0.408000 9.624318 +0.410000 9.624318 +0.412000 9.624318 +0.414000 9.624318 +0.416000 9.624318 +0.418000 9.624318 +0.420000 9.624318 +0.422000 9.624318 +0.424000 9.624318 +0.426000 9.624318 +0.428000 9.624318 +0.430000 9.624318 +0.432000 9.624318 +0.434000 9.624318 +0.436000 9.624318 +0.438000 9.624318 +0.440000 9.624318 +0.442000 9.624318 +0.444000 9.624318 +0.446000 9.624318 +0.448000 9.624318 +0.450000 9.624318 +0.452000 9.624318 +0.454000 9.624318 +0.456000 9.624318 +0.458000 9.624318 +0.460000 9.624318 +0.462000 9.624318 +0.464000 9.624318 +0.466000 9.624318 +0.468000 9.624318 +0.470000 9.624318 +0.472000 9.624318 +0.474000 9.624318 +0.476000 9.624318 +0.478000 9.624318 +0.480000 9.624318 +0.482000 9.624318 +0.484000 9.624318 +0.486000 9.624318 +0.488000 9.624318 +0.490000 9.624318 +0.492000 9.624318 +0.494000 9.624318 +0.496000 9.624318 +0.498000 9.624318 +0.500000 9.624318 +0.502000 9.624318 +0.504000 9.624318 +0.506000 9.624318 +0.508000 9.624318 +0.510000 9.624318 +0.512000 9.624318 +0.514000 9.624318 +0.516000 9.624318 +0.518000 9.624318 +0.520000 9.624318 +0.522000 9.624318 +0.524000 9.624318 +0.526000 9.624318 +0.528000 9.624318 +0.530000 9.624318 +0.532000 9.624318 +0.534000 9.624318 +0.536000 9.624318 +0.538000 9.624318 +0.540000 9.624318 +0.542000 9.624318 +0.544000 9.624318 +0.546000 9.624318 +0.548000 9.624318 +0.550000 9.624318 +0.552000 9.624318 +0.554000 9.624318 +0.556000 9.624318 +0.558000 9.624318 +0.560000 9.624318 +0.562000 9.624318 +0.564000 9.624318 +0.566000 9.624318 +0.568000 9.624318 +0.570000 9.624318 +0.572000 9.624318 +0.574000 9.624318 +0.576000 9.624318 +0.578000 9.624318 +0.580000 9.624318 +0.582000 9.624318 +0.584000 9.624318 +0.586000 9.624318 +0.588000 9.624318 +0.590000 9.624318 +0.592000 9.624318 +0.594000 9.624318 +0.596000 9.624318 +0.598000 9.624318 +0.600000 9.624318 +0.602000 9.624318 +0.604000 9.624318 +0.606000 9.624318 +0.608000 9.624318 +0.610000 9.624318 +0.612000 9.624318 +0.614000 9.624318 +0.616000 9.624318 +0.618000 9.624318 +0.620000 9.624318 +0.622000 9.624318 +0.624000 9.624318 +0.626000 9.624318 +0.628000 9.624318 +0.630000 9.624318 +0.632000 9.624318 +0.634000 9.624318 +0.636000 9.624318 +0.638000 9.624318 +0.640000 9.624318 +0.642000 9.624318 +0.644000 9.624318 +0.646000 9.624318 +0.648000 9.624318 +0.650000 9.624318 +0.652000 9.624318 +0.654000 9.624318 +0.656000 9.624318 +0.658000 9.624318 +0.660000 9.624318 +0.662000 9.624318 +0.664000 9.624318 +0.666000 9.624318 +0.668000 9.624318 +0.670000 9.624318 +0.672000 9.624318 +0.674000 9.624318 +0.676000 9.624318 +0.678000 9.624318 +0.680000 9.624318 +0.682000 9.624318 +0.684000 9.624318 +0.686000 9.624318 +0.688000 9.624318 +0.690000 9.624318 +0.692000 9.624318 +0.694000 9.624318 +0.696000 9.624318 +0.698000 9.624318 +0.700000 9.624318 +0.702000 9.624318 +0.704000 9.624318 +0.706000 9.624318 +0.708000 9.624318 +0.710000 9.624318 +0.712000 9.624318 +0.714000 9.624318 +0.716000 9.624318 +0.718000 9.624318 +0.720000 9.624318 +0.722000 9.624318 +0.724000 9.624318 +0.726000 9.624318 +0.728000 9.624318 +0.730000 9.624318 +0.732000 9.624659 +0.734000 9.626789 +0.736000 9.630269 +0.738000 9.634823 +0.740000 9.640251 +0.742000 9.646358 +0.744000 9.652930 +0.746000 9.659698 +0.748000 9.666304 +0.750000 9.672214 +0.752000 9.676525 +0.754000 9.677479 +0.756000 9.677479 +0.758000 9.677479 +0.760000 9.677479 +0.762000 9.677479 +0.764000 9.677479 +0.766000 9.677479 +0.768000 9.677479 +0.770000 9.677479 +0.772000 9.675660 +0.774000 9.670807 +0.776000 9.664640 +0.778000 9.657931 +0.780000 9.651157 +0.782000 9.644650 +0.784000 9.638665 +0.786000 9.633415 +0.788000 9.629102 +0.790000 9.625954 +0.792000 9.624347 +0.794000 9.624318 +0.796000 9.624318 +0.798000 9.624318 +0.800000 9.624318 +0.802000 9.624318 +0.804000 9.624318 +0.806000 9.624318 +0.808000 9.624318 +0.810000 9.624318 +0.812000 9.624318 +0.814000 9.624318 +0.816000 9.624318 +0.818000 9.624318 +0.820000 9.624318 +0.822000 9.624318 +0.824000 9.624318 +0.826000 9.624318 +0.828000 9.624318 +0.830000 9.624318 +0.832000 9.624318 +0.834000 9.624318 +0.836000 9.624318 +0.838000 9.624318 +0.840000 9.624318 +0.842000 9.624318 +0.844000 9.624318 +0.846000 9.624318 +0.848000 9.624318 +0.850000 9.624318 +0.852000 9.624318 +0.854000 9.624318 +0.856000 9.624318 +0.858000 9.624318 +0.860000 9.624318 +0.862000 9.624318 +0.864000 9.624318 +0.866000 9.624318 +0.868000 9.624318 +0.870000 9.624318 +0.872000 9.624318 +0.874000 9.624318 +0.876000 9.624318 +0.878000 9.624318 +0.880000 9.624318 +0.882000 9.624318 +0.884000 9.624318 +0.886000 9.624318 +0.888000 9.624318 +0.890000 9.624318 +0.892000 9.624318 +0.894000 9.624318 +0.896000 9.624318 +0.898000 9.624318 +0.900000 9.624318 +0.902000 9.624318 +0.904000 9.624318 +0.906000 9.624318 +0.908000 9.624318 +0.910000 9.624318 +0.912000 9.624318 +0.914000 9.624318 +0.916000 9.624318 +0.918000 9.624318 +0.920000 9.624318 +0.922000 9.624318 +0.924000 9.624318 +0.926000 9.624318 +0.928000 9.624318 +0.930000 9.624318 +0.932000 9.624318 +0.934000 9.624318 +0.936000 9.624318 +0.938000 9.624318 +0.940000 9.624318 +0.942000 9.624318 +0.944000 9.624318 +0.946000 9.624318 +0.948000 9.624318 +0.950000 9.624318 +0.952000 9.624318 +0.954000 9.624318 +0.956000 9.624318 +0.958000 9.624318 +0.960000 9.624318 +0.962000 9.624318 +0.964000 9.624318 +0.966000 9.624318 +0.968000 9.624318 +0.970000 9.624318 +0.972000 9.624318 +0.974000 9.624318 +0.976000 9.624318 +0.978000 9.624318 +0.980000 9.624318 +0.982000 9.624318 +0.984000 9.624318 +0.986000 9.624318 +0.988000 9.624318 +0.990000 9.624318 +0.992000 9.624318 +0.994000 9.624318 +0.996000 9.624318 +0.998000 9.624318 diff --git a/mltsp/TCP/Algorithms/Debil/test.in b/mltsp/TCP/Algorithms/Debil/test.in new file mode 100755 index 00000000..b04291ee --- /dev/null +++ b/mltsp/TCP/Algorithms/Debil/test.in @@ -0,0 +1 @@ +Phot/dotastro220107.dat 2.43648439 diff --git a/mltsp/TCP/Algorithms/Debil/test.out b/mltsp/TCP/Algorithms/Debil/test.out new file mode 100755 index 00000000..2fccb15a --- /dev/null +++ b/mltsp/TCP/Algorithms/Debil/test.out @@ -0,0 +1 @@ +Phot/dotastro220107.dat 2.436484390000 0.544444 0.530424 0.219584 0.024751 0.113447 0.053615 9.677479 0.460442 12.926126 1.845579 0.997124 0.007358 0.757538 1.419207 263.872047 510.914472 433 8 3.095258 9.934767 2.702335 7.100380 0.963495 -0.149294 0.512608 0.301985 0.123077 0.264675 2.183931 diff --git a/mltsp/TCP/Algorithms/EclFeatures/013113-7829.1.xml b/mltsp/TCP/Algorithms/EclFeatures/013113-7829.1.xml new file mode 100755 index 00000000..10e9fa5c --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/013113-7829.1.xml @@ -0,0 +1,773 @@ + + + ivo://edu.berkeley.tcp/instancedb.lyra#216059 + + + + + Best Positional Information for 013113-7829.1 + + + 22.8244200 + -78.4851750 + + + 0.0000000 + 0.0000000 + + + FK5 + 2000.0 + + + + + + tjd + 0.0 + UTC + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1868.601812.6770.074
1869.5863812.2770.047
1870.602712.7880.046
1872.5736812.9170.074
1874.5922812.4120.077
1875.588412.8910.078
1876.5892112.960.079
1877.5914312.8620.066
1878.5837812.7030.061
1879.5836412.2670.048
1880.5305413.0580.055
1880.5878912.9490.059
1881.5776212.9160.054
1884.5589712.0850.06
1886.5520812.9070.049
1887.6071413.50.06
1889.5483512.1360.055
1900.5271112.9250.049
1903.553212.5250.066
1905.5655612.9540.068
1907.5706312.7760.049
1914.527712.3480.068
1918.5417212.5370.053
1920.5968712.8350.055
1922.5954112.9160.043
1926.592813.0260.059
1929.5641312.260.05
1932.5294712.8420.052
1936.5257512.9010.053
1939.5552412.2630.043
1945.5202812.9980.051
1948.5551812.5310.05
1952.519812.7850.068
1954.5366412.4080.062
1955.5321412.9710.054
1966.5129712.7920.052
2053.9032613.0310.076
2055.9095112.8010.078
2057.9107512.3440.071
2067.892812.6040.065
2068.8967812.8810.074
2069.8894913.0220.073
2070.8957712.7220.067
2080.879212.7480.052
2082.9520112.380.049
2086.8352512.2750.045
2087.9120212.570.076
2094.9226613.0160.061
2095.8708312.5710.07
2103.7991112.8530.072
2104.8660612.9760.059
2105.866612.6180.056
2106.9004512.3270.055
2113.8934513.120.037
2115.8287512.4530.049
2116.8359112.410.038
2128.7392812.7260.057
2129.7585312.4630.062
2131.783513.130.055
2132.801712.9450.044
2133.8038812.9280.041
2134.7994512.7180.046
2135.8002312.1690.056
2143.7817412.8160.056
2156.6924112.9350.054
2156.7242213.0350.052
2164.7093912.4540.045
2164.7355912.7240.057
2167.6899312.8810.052
2167.7071512.8630.048
2168.7041512.6220.052
2168.73112.7360.04
2169.7156612.3310.04
2169.7417912.4830.041
2171.719312.9590.044
2172.6534612.7170.05
2172.7226412.9190.039
2173.6884412.740.045
2173.7078612.7150.042
2174.6905512.4130.046
2174.7100512.4450.041
2175.6717713.0990.046
2177.6604412.760.043
2178.6710212.6780.037
2178.6859912.6950.041
2180.5946812.9340.048
2183.6206112.5380.053
2183.6408312.4870.054
2184.6403112.4120.045
2184.659912.250.048
2185.6556912.9660.043
2185.668612.9490.043
2186.6883812.9720.043
2186.705512.9490.043
2189.7111612.480.041
2189.7219712.4530.042
2190.656712.9960.038
2190.6788112.8570.039
2191.6870612.8490.044
2192.6546312.8180.043
2192.6785113.7020.04
2193.660112.570.037
2193.6705312.6230.041
2194.6468212.2810.042
2194.670712.4220.04
2195.6488612.8860.05
2196.6546912.9970.05
2196.674112.8780.046
2197.649812.8150.036
2197.6669612.8680.04
2198.6397112.4520.04
2198.6669912.6360.04
2199.6403412.3980.041
2199.6642712.330.042
2201.6268912.8490.04
2201.6507612.9720.039
2203.6261412.5680.038
2203.650112.5480.041
2204.6263212.5960.038
2204.6367812.5020.039
2206.620713.0150.038
2207.6194712.8210.047
2208.6567913.730.039
2208.6878412.6960.043
2211.5979212.830.041
2211.6107813.0610.043
2213.5769212.4130.049
2213.5974312.3180.045
2214.609813.0650.039
2214.6293212.5730.044
2215.6188112.9890.04
2216.6144212.9460.038
2217.6163412.7590.037
2217.6335812.8860.042
2219.5872312.8970.039
2219.6045112.750.042
2222.6042712.6330.037
2222.6148912.4580.043
2224.5903113.130.044
2224.6098812.8850.046
2225.601512.9460.037
2225.6165912.8510.043
2226.5334312.6610.048
2226.5977412.7950.039
2227.5961112.7980.037
2227.6112112.6370.044
2228.5931412.2660.038
2228.6082412.230.041
2229.5907113.0860.039
2229.6058312.9380.041
2230.5885412.9250.037
2230.6059812.8490.044
2232.525912.5260.05
2232.5812112.6710.038
2233.5840612.2550.04
2233.5947812.2570.042
2234.5176112.630.051
2234.5668412.9970.038
2235.5687212.8920.038
2235.5861712.7810.042
2236.5651712.7360.042
2237.5750812.5990.043
2239.566413.0490.044
2239.5793512.7360.049
2241.5853112.7460.047
2242.5884512.5980.046
2243.5526212.4030.045
2243.5675612.480.052
2247.5578712.410.044
2247.598112.4490.054
2249.5978312.9450.043
2251.5662213.3270.051
2251.592812.9280.046
2253.5655212.2810.047
2255.5542813.0130.049
2255.581713.0290.043
2257.5504112.3940.051
2257.5778112.5690.052
2260.5745613.0310.054
2262.5597912.1980.067
2445.864412.4310.042
2453.8718612.6260.041
2460.7561813.0290.041
2464.8168212.4250.04
2465.8665312.3490.048
2468.8136212.7260.046
2470.8439712.5780.047
2473.8273512.8390.042
2482.7631512.7020.046
2486.8103613.0320.054
2489.9216412.6320.054
2495.7820113.1290.055
2496.8057313.0390.048
2498.8067912.5780.053
2499.8028712.1090.057
2500.7180513.0480.053
2502.8013912.8450.057
2508.7529112.4020.059
2529.7213512.9130.063
2540.789313.1020.054
2544.7660212.8070.04
2549.8603912.2870.053
2553.6410813.0710.056
2554.7146612.8110.057
2558.7892512.4670.036
2559.716112.9290.044
2560.7112112.8510.047
2561.6956412.7810.049
2562.6847712.4540.04
2564.6911712.9790.058
2565.709313.0480.045
2578.7094812.360.05
2622.5816312.6850.042
2624.6307912.960.045
2627.6397912.3090.04
2628.5905112.9310.045
2629.6393312.9840.045
2634.5294812.7230.044
2636.5631912.3020.041
2638.5774912.8890.043
2640.5802712.7610.042
2642.5806912.7410.047
2644.5766113.0120.048
2649.5664112.8830.044
2651.5715712.3010.042
2655.6061912.5570.043
2658.6072713.0720.042
2660.5640612.6670.055
2660.6095112.7770.044
2662.6064612.6180.041
2664.6002412.960.052
2668.6035512.9940.041
2670.5967412.7230.048
2674.5852912.8490.045
2676.571612.2280.048
2678.5571112.9850.048
2680.5598812.6140.053
2684.5812.8810.047
2686.5865212.3410.046
2688.5843112.8850.046
2690.5832112.6280.054
2692.5806613.0080.054
2695.5267812.4260.04
2697.5307712.9930.04
2699.5363512.7480.042
2701.5321412.4170.046
2703.5300112.9210.048
2705.5221612.390.04
2707.5247913.0150.042
2709.530312.7240.044
2712.5191212.9210.039
2718.5022212.8320.047
2724.490812.7030.036
2727.4883212.8970.041
2776.9357413.0350.036
2786.922813.0890.036
2790.9407613.1670.039
2809.8983812.6930.038
2812.8660812.6570.048
2816.9427912.9970.052
2838.8561912.2750.04
2851.9237813.0260.039
2860.8132812.950.035
2871.8725912.8340.045
2874.809512.9950.039
2883.7728412.7980.04
2888.7592512.9480.04
2892.8058112.5070.042
2898.7307112.9260.04
2900.7216912.7990.037
2903.8075312.8580.041
2906.7134112.4080.04
2908.7693613.0530.039
2910.7853712.9690.041
2915.7295112.7950.038
2917.6680413.1060.04
2924.7541512.890.04
2927.6953913.090.043
2929.7080412.9570.041
2931.7161612.2830.04
2935.6988812.6740.041
2939.6305412.7140.039
2940.7604112.7250.05
2944.6430112.8320.04
2948.6201812.8480.043
2950.6524712.4260.04
2954.6642512.7910.042
2954.6743712.8220.039
2964.6753513.1210.038
2966.6884712.2550.039
2968.6962512.9360.06
2971.5343412.9580.055
2973.5842812.8070.043
2975.5924312.3330.041
2977.61761130.039
2979.638912.8160.042
2981.6326712.3060.041
2981.6556212.3410.039
2983.6725712.8620.038
2985.7030412.7160.04
2987.6818612.9730.038
2990.6677412.7530.041
2992.6782713.1390.041
2994.666712.8050.037
2994.7433612.8730.037
2998.7147513.050.042
3005.62612.5270.037
3006.5935712.8350.039
3007.63412.8910.042
3008.6115512.9560.038
3009.679512.8960.04
3011.6770312.2490.04
3013.5931512.7990.039
3013.6791412.9120.039
3016.6050912.9180.041
3018.6754412.8220.038
3023.5296812.7230.04
3028.5287912.7540.039
3030.5857912.1210.04
3033.5454912.8080.039
3035.5568312.3440.038
3037.5571112.950.039
3037.6205812.8770.037
3041.6227712.9950.039
3043.5221712.5950.046
3046.5269413.1290.04
3061.5283613.0580.037
3076.5260412.9830.043
3079.5200912.1920.039
3082.5085912.8710.043
3087.4887612.780.039
3090.4910213.1460.038
3175.9450412.9510.037
3179.8874613.0070.037
3187.8595512.1030.047
3191.8645912.5150.066
3211.9402212.6060.055
3355.7261412.2340.065
3358.5766612.5520.051
3362.6723912.820.055
3363.6664912.7020.043
3366.6468113.1520.047
3366.7455812.950.054
3380.5360812.9270.045
3383.68412.720.042
3386.5471412.9160.063
3386.6173712.9330.059
3388.5765912.5450.039
3388.5845412.5520.055
3390.6103212.9030.045
3391.5788812.8940.044
3391.6148512.8310.043
3395.5703812.8480.04
3396.6258413.0660.04
3398.5481312.450.046
3399.5740912.6350.042
3403.5629812.4540.04
3405.5794613.630.038
3408.5307212.2580.046
3411.5261313.0180.052
3412.5636512.7520.042
3414.5205912.9530.049
3414.5672612.8860.042
3416.5765912.8610.04
3418.5771612.5970.046
3426.547612.8150.053
3433.5441712.1280.052
3437.5136712.4020.039
3440.5089113.0370.04
3447.5152112.4010.048
3452.5038212.5170.048
3454.4985312.9420.048
3458.4838312.9330.051
3502.9325813.0150.061
3509.9336112.8960.049
3522.924513.0570.07
3541.9081212.2430.075
3547.9400912.940.049
3551.9462812.3070.058
3555.8701312.4770.041
3560.8698712.5160.063
3563.8969913.1680.059
3568.9442912.9790.05
3571.8835612.4780.045
3574.8644112.7070.05
3577.8639312.8610.05
3581.9257112.1750.044
3584.8433712.6650.05
3587.8407913.1780.056
3601.8041112.8720.051
3615.8360411.9930.049
3618.7679612.6170.053
3621.7874612.9930.047
3624.8321512.4410.045
3628.7341612.4430.047
3630.7733112.9180.054
3632.7932312.9340.05
3638.7668512.650.054
3644.6906512.680.051
3648.6985512.480.056
3650.7764112.9360.045
3652.7711612.9890.042
3654.7812412.3070.045
3656.7115312.8050.045
3658.6946212.4460.045
3660.7134513.0210.045
3662.784412.8770.043
3665.6252513.0420.047
3668.7091812.5230.048
3670.7559313.0110.04
3671.7991712.9440.039
3673.6184312.3430.05
3675.6843612.9390.042
3678.618212.3030.046
3700.6138512.9320.049
3700.7257913.060.049
3703.5862112.9050.044
3705.7068512.9630.044
3708.6094312.7190.044
3708.647412.2420.044
3712.5912312.2980.041
3712.6192812.460.041
3714.6088912.8820.052
3714.6294912.8950.045
3716.6772912.9780.057
3717.5892812.3530.038
3718.6724512.1810.05
3720.5858513.0160.043
3720.7644312.9030.043
3722.6453813.4120.046
3725.61513.1850.051
3726.6052112.770.055
3727.6343612.3540.044
3728.6586812.160.047
3731.5810412.6790.039
3731.737613.1170.049
3734.6154413.0680.041
3734.6679113.4380.066
3737.6082512.2910.063
3737.6420612.4480.037
3739.6295912.9580.045
3742.5952412.2390.043
3742.6161512.2750.043
3744.6989112.9990.04
3745.6010812.9810.039
3747.5982312.0820.042
3748.5924213.2030.049
3750.5869312.8860.041
3752.583512.1490.054
3755.5495712.6540.042
3755.6278212.9330.06
3758.5482112.9360.062
3758.5814113.0490.064
3760.6496612.8350.075
3761.5524112.5150.055
3763.603913.2080.05
3764.5420812.9190.053
3766.5749212.70.044
3767.535912.4750.072
3769.5630313.0880.053
3771.6024612.6160.041
3774.5381312.8410.042
3774.5728313.0330.041
3776.5976912.5570.041
3777.5254712.7160.048
3779.5622912.8360.046
3783.5559513.3930.046
3787.5564212.610.045
3790.538612.8160.043
3793.5323413.0980.04
3796.5264912.5830.04
3799.5265612.9420.047
3802.5258612.6550.044
3805.520712.8150.04
3806.5000112.5560.066
3808.5012812.9610.047
3809.5084112.840.041
3812.5005912.8210.049
3815.5018112.8220.056
3818.4942712.9260.045
3822.4900412.9270.047
3863.9239312.8860.052
3868.9323612.7590.048
3877.9256812.9630.051
3892.9016812.9360.059
3898.9444112.760.047
3902.9170712.8970.045
3906.8837912.9880.062
3912.9451812.8680.064
4089.6608412.9180.045
4092.6074813.0330.047
4103.6111412.7870.044
4105.6330312.6290.044
4107.644612.8190.04
4126.6280512.1650.054
4128.6444912.9410.062
4131.567112.8170.044
4133.5850112.9620.04
4135.6004112.430.039
4137.6167113.0310.045
4140.5593912.2910.042
4142.5877113.0190.051
4145.5546312.2970.065
4150.5159812.0840.057
4152.5476113.1120.059
4155.5238712.1790.045
4158.5350312.9520.052
4160.5607812.2280.051
4173.5119112.6990.044
4175.5282312.1890.045
4189.4866612.4350.035
4228.9222312.4320.052
4255.9421812.9430.045
4273.9159812.1290.047
4278.938912.2440.038
4285.8972412.8770.047
4289.9458113.1220.04
4292.9015712.5040.038
4295.8852713.0160.044
4298.8916612.270.047
4304.827813.0120.048
4306.8889112.7580.038
4308.850812.9060.04
4311.8230512.5540.047
4316.8042712.5110.042
4329.8809413.0570.04
4331.8532912.5170.056
4333.8051712.8090.044
4339.7923612.7850.039
4341.7862312.7160.037
4343.834712.9060.055
4346.7685512.4870.042
4348.8128213.030.05
4351.7581512.5130.042
4357.7408812.7820.038
4362.7358812.8430.039
4364.7177712.8340.035
4367.7076913.0590.042
4369.7656312.9490.039
4371.7958412.6510.042
4374.774312.5840.041
4377.6727512.9510.039
4379.7360612.8440.045
4384.6573912.7510.038
4386.7173312.2830.034
4388.7307113.0370.038
4392.6712512.9710.055
4398.6977912.8320.045
4403.7042413.0280.038
4407.6983112.8730.037
4412.8350811.9530.045
4418.7230213.0180.036
4421.6392313.1650.037
4423.6502312.9090.043
4428.7603912.8990.039
4431.6370513.0320.038
4436.6249913.110.042
4438.6899512.8760.047
4440.7143112.3910.044
4440.7467912.4980.036
4443.6602113.0840.04
4448.7383112.8710.039
4453.6476112.7640.05
4455.7062712.5040.037
4458.6384412.8090.045
4461.6191912.9340.037
4463.6755612.9150.049
4464.645712.5590.04
4468.6855612.9480.047
4472.6854912.9870.05
4475.5663612.7890.044
4478.5766712.7860.063
4484.5785212.5050.042
4486.6362212.9620.044
4491.5737112.960.047
4493.5406312.7690.037
4493.6292212.7740.04
4499.624812.7370.046
4500.5469812.9660.043
4502.5956312.860.06
4505.5829312.8880.043
4508.5784612.7720.049
4509.5253712.6220.049
4510.5908812.9940.044
4517.5775912.9670.046
4520.5620612.9620.045
4522.5760812.9010.041
4525.549713.2440.043
4528.5417412.6150.042
4534.5263212.6180.04
4538.5099112.320.043
4546.4954412.9860.052
4549.4933513.040.051
4553.485112.0730.048
4593.9234413.0340.053
4597.933112.3010.04
4601.9356612.790.055
4609.9366412.890.041
4623.9257512.8780.044
4627.9190212.4870.057
4631.8947712.5270.053
4640.8988812.8270.041
4644.8854313.0190.045
4648.8812312.870.045
4655.8617612.7460.054
4661.9414212.5610.049
4664.896412.8390.04
4672.8725513.1760.04
4675.9102312.7220.041
4682.8815713.1590.067
4685.8432912.5510.04
4690.8430612.5630.036
4693.8588613.010.039
4697.8309713.1160.046
4702.785713.0160.04
4715.8231112.3020.055
4724.7421712.6340.049
4726.8070312.4810.039
4729.7615912.770.039
4740.6972212.5870.042
4747.7329512.770.042
4750.6710812.8310.04
4754.761512.6880.04
4757.640112.9380.037
4759.7098812.5180.04
4762.6377712.7710.037
4764.7183412.5370.037
4769.7447112.6150.04
4772.5943512.7820.039
4774.6592312.3260.035
4776.6956812.8250.038
4778.6458312.490.042
4780.6798812.9280.037
4783.7478912.7720.047
4786.6588512.9020.04
4794.6932112.3510.04
4797.6956312.9840.039
4802.6130812.8650.047
4804.6487512.170.036
4806.7147513.0310.04
4808.7539512.7890.048
4811.6064813.0420.042
4814.6051813.0710.039
4816.6924212.9280.044
4819.7157212.2730.044
4824.7261712.2980.069
4827.6558413.0610.045
4829.7080612.2430.051
4834.6654212.310.049
4837.6006712.4490.04
4839.6373412.6980.045
4842.6159412.6830.04
4845.6072612.9870.046
4848.603912.1680.045
4851.597312.9770.043
4857.6118312.6770.057
4860.62413.0620.049
4872.5789212.7020.047
4875.5826812.9660.05
4881.5571612.8440.044
4884.55296130.047
4902.5049812.3590.058
4994.9193412.6920.048
5014.8492412.8150.051
5018.9043112.8770.044
5021.9111512.820.043
5024.8548712.5990.048
5031.9437812.4330.044
5039.795912.4090.049
5042.8349412.9840.049
5072.7854512.8470.05
5075.7790112.9490.048
5082.8422412.9160.053
5085.7562312.9970.051
5087.8411412.9070.046
5092.7906412.9070.043
5097.7726212.8010.045
5110.6742312.8720.048
5128.6625912.5530.05
5164.7020412.950.046
+
+
+ + + + ivo://edu.berkeley.lyra:tutor:person_id=1 + 0 + 2011-07-28T15:06:39 + 1.0 + *** Sample *** static info there be! + + + + + + + + + + + + + + ivo://edu.berkeley.lyra:tutor:project_id=126 + TCP Tutor Project Ingest Tool + 2011-07-28T15:06:39 + 1.0 + *** Sample *** static info there be! + + + + + + + + + + + + + + ivo://edu.berkeley.lyra:tutor:project_id=126 + ASAS ACVS + 2011-07-28T15:06:39 + 1.0 + *** Sample *** static info there be! + + + + + +
\ No newline at end of file diff --git a/mltsp/TCP/Algorithms/EclFeatures/LC_246.dat b/mltsp/TCP/Algorithms/EclFeatures/LC_246.dat new file mode 100755 index 00000000..0a2366ac --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/LC_246.dat @@ -0,0 +1,468 @@ +1.868747339999999895e+03 1.085411854728460490e+01 3.482233081012964249e-02 3.149143890494654929e+00 +1.869742019999999911e+03 1.110724458203139164e+01 3.391108568757772446e-02 3.217363387228631577e+00 +1.870749859999999899e+03 1.072788599782876062e+01 3.562764078378677368e-02 3.107214182107370437e+00 +1.872752410000000054e+03 1.092638928720723435e+01 3.470961470156908035e-02 3.155571406525635947e+00 +1.873763670000000047e+03 1.116062789561433810e+01 3.377208020538091660e-02 3.248032956321184272e+00 +1.874757180000000062e+03 1.044491341688881469e+01 3.744460921734571457e-02 3.005461645754351263e+00 +1.875752269999999953e+03 1.244556065785652876e+01 4.410901851952075958e-02 3.095293566361112525e+00 +1.876742109999999911e+03 1.088309964096452020e+01 3.462465293705463409e-02 3.160585847633320622e+00 +1.877757560000000012e+03 1.118598805831358334e+01 3.378214873373508453e-02 3.242642514290466238e+00 +1.878741739999999936e+03 1.045114743811761571e+01 3.762958943843841553e-02 2.991080476594581317e+00 +1.879726480000000038e+03 1.075022918239255887e+01 3.606650885194540024e-02 3.085254513890916872e+00 +1.880727190000000064e+03 1.096127837221544610e+01 3.458133153617382050e-02 3.163209210831511964e+00 +1.881726159999999936e+03 1.118120114182658575e+01 3.377246670424938202e-02 3.247712621726420945e+00 +1.884705470000000105e+03 1.094555024927004006e+01 3.460068069398403168e-02 3.162030695121815782e+00 +1.885718029999999999e+03 1.109025299058182590e+01 3.378162719309329987e-02 3.242836332289540380e+00 +1.886719389999999976e+03 1.036915564995959294e+01 3.792473580688238144e-02 2.963265509146014498e+00 +1.887705799999999954e+03 1.087795570433111614e+01 3.546904865652322769e-02 3.115166404359841934e+00 +1.888709700000000112e+03 1.092295880231227656e+01 3.441780991852283478e-02 3.173609070944913402e+00 +1.889708730000000060e+03 1.115143557935251728e+01 3.380622528493404388e-02 3.235202931985068364e+00 +1.899686059999999998e+03 1.094301585476325833e+01 3.482158295810222626e-02 3.149184955095489791e+00 +1.900695339999999987e+03 1.105819106151634301e+01 3.397136740386486053e-02 3.210164188731935209e+00 +1.902670689999999922e+03 1.047506611295829693e+01 3.755288943648338318e-02 2.997256109501467147e+00 +1.903689540000000079e+03 1.093119885572580685e+01 3.481997922062873840e-02 3.149274475185643851e+00 +1.904672430000000077e+03 1.105826187004165639e+01 3.401276003569364548e-02 3.205792180687433657e+00 +1.905674659999999903e+03 1.095035932591787109e+01 3.470512945204973221e-02 3.155832068662917766e+00 +1.907679560000000038e+03 1.087202052520717466e+01 3.479135222733020782e-02 3.150886890650890670e+00 +1.908671759999999949e+03 1.117490057842857176e+01 3.382591996341943741e-02 3.230829863482847397e+00 +1.913646240000000034e+03 1.077544907857606837e+01 3.537844400852918625e-02 3.119746465373360866e+00 +1.914664539999999988e+03 1.072936039259782248e+01 3.609686065465211868e-02 3.083722667605814927e+00 +1.915664019999999937e+03 1.094729680310146769e+01 3.460135217756032944e-02 3.161991462546906551e+00 +1.918643430000000080e+03 1.072360838537696104e+01 3.614430129528045654e-02 3.081319184812555623e+00 +1.919652160000000094e+03 1.239810628819187244e+01 4.394851811230182648e-02 3.166202376371336502e+00 +1.922648969999999963e+03 1.084233418377342240e+01 3.534552175551652908e-02 3.121417079910800307e+00 +1.923642059999999901e+03 1.095407723971395342e+01 3.446119837462902069e-02 3.170763001724583141e+00 +1.925644739999999956e+03 1.041493122491924694e+01 3.790004178881645203e-02 2.965916389472894377e+00 +1.926636559999999918e+03 1.081856379649269684e+01 3.515651635825634003e-02 3.131143875589252001e+00 +1.929635700000000043e+03 1.038783056892961021e+01 3.779344260692596436e-02 2.976587842758724900e+00 +1.930633730000000014e+03 1.092116204648171340e+01 3.488063625991344452e-02 3.145903108483865118e+00 +1.932625749999999925e+03 1.105600180157704493e+01 3.392390441149473190e-02 3.215727938846973721e+00 +1.933625209999999925e+03 1.046764722171676354e+01 3.763906285166740417e-02 2.990292902284783949e+00 +1.934617899999999963e+03 1.082586747514669945e+01 3.485114220529794693e-02 3.147534030342520328e+00 +1.935570179999999937e+03 1.092740968866760198e+01 3.456335887312889099e-02 3.164310638875075909e+00 +1.937608060000000023e+03 1.044576889241221807e+01 3.758858237415552139e-02 2.994425206695486619e+00 +1.939595070000000078e+03 1.099535201723705491e+01 3.421888966113328934e-02 3.187790150901407049e+00 +1.941596549999999979e+03 1.052538007841731549e+01 3.706493601202964783e-02 3.008646335939142880e+00 +1.945589919999999893e+03 1.046220012253524523e+01 3.705746494233608246e-02 3.031288232210433087e+00 +1.947591349999999920e+03 1.111753151329574507e+01 3.382480982691049576e-02 3.231047992587813056e+00 +1.949581390000000056e+03 1.061170696278098902e+01 3.675093315541744232e-02 3.049217466549114519e+00 +1.950585800000000063e+03 1.088253062189266807e+01 3.475250210613012314e-02 3.153098288571236196e+00 +1.952576199999999972e+03 1.067149983961266990e+01 3.616812638938426971e-02 3.080108752601502964e+00 +1.958553239999999960e+03 1.093500185967349303e+01 3.469898831099271774e-02 3.156190007148501842e+00 +1.963548960000000079e+03 1.242702964291748735e+01 4.388525709509849548e-02 3.246668570806160670e+00 +1.965535489999999982e+03 1.067540212903535313e+01 3.576093446463346481e-02 3.100558888923510281e+00 +2.129898959999999988e+03 1.099939973940671933e+01 3.448700252920389175e-02 3.169099769677738543e+00 +2.131905139999999847e+03 1.089802895219140488e+01 3.480511438101530075e-02 3.150109926740159327e+00 +2.133905929999999898e+03 1.064562282757445466e+01 3.621887136250734329e-02 3.077521262242518763e+00 +2.143913129999999910e+03 1.096396437649202582e+01 3.430577646940946579e-02 3.181333300572952716e+00 +2.167811000000000149e+03 1.102974723664426371e+01 3.413891978561878204e-02 3.194220544375589554e+00 +2.168894850000000133e+03 1.042532788247121189e+01 3.787084203213453293e-02 2.968957812620567793e+00 +2.171845740000000205e+03 1.117831396829287627e+01 3.377179428935050964e-02 3.248248020408981862e+00 +2.173825899999999820e+03 1.073444979185651427e+01 3.629886452108621597e-02 3.073413800466148871e+00 +2.184833869999999933e+03 1.044612196412404082e+01 3.760713618248701096e-02 2.992922975768730343e+00 +2.189843690000000151e+03 1.087557337035425320e+01 3.479850385338068008e-02 3.150482962821701260e+00 +2.193778629999999794e+03 1.088844815012472900e+01 3.491643443703651428e-02 3.143935456773677917e+00 +2.194879420000000209e+03 1.109187551633392843e+01 3.383918665349483490e-02 3.228277849250682063e+00 +2.196830820000000131e+03 1.069876264792036125e+01 3.607868310064077377e-02 3.084640472465733030e+00 +2.198773419999999987e+03 1.105198649038436187e+01 3.408980369567871094e-02 3.198475317930877360e+00 +2.201799109999999928e+03 1.093719738587820522e+01 3.470275085419416428e-02 3.155970956549668305e+00 +2.215726090000000113e+03 1.064586980831638385e+01 3.629046492278575897e-02 3.073847206504277896e+00 +2.224767899999999827e+03 1.086963194746831363e+01 3.482193127274513245e-02 3.149165266324049028e+00 +2.227705559999999878e+03 1.034360375972216595e+01 3.792631346732378006e-02 2.963096618129009929e+00 +2.235752350000000206e+03 1.064296565338371359e+01 3.601076267659664154e-02 3.088062000496857085e+00 +2.241741829999999936e+03 1.112017600156234920e+01 3.378119226545095444e-02 3.243034472823881575e+00 +2.545796010000000024e+03 1.076812487430752796e+01 3.551858849823474884e-02 3.112675501543168188e+00 +2.558814600000000155e+03 1.113166136940350626e+01 3.378233872354030609e-02 3.242553969754622845e+00 +2.560804990000000089e+03 1.072972901725435690e+01 3.640824183821678162e-02 3.067729963799486370e+00 +2.562797300000000178e+03 1.110716371927078505e+01 3.377867396920919418e-02 3.244148328615687138e+00 +2.621746470000000045e+03 1.129690770063703020e+01 3.378752619028091431e-02 2.998419014134912075e+00 +2.623703289999999924e+03 1.093576580214637772e+01 3.481042757630348206e-02 3.149811926976270104e+00 +2.625686529999999948e+03 1.091108885853641652e+01 3.486092761158943176e-02 3.146991657507868023e+00 +2.628672050000000127e+03 1.112448677906743910e+01 3.389514982700347900e-02 3.219502467572447291e+00 +2.631797860000000128e+03 1.119314747412015265e+01 3.377288952469825745e-02 3.247425343110470042e+00 +2.635656469999999899e+03 1.098310162271443602e+01 3.474787902086973190e-02 3.153362428203217327e+00 +2.639669530000000123e+03 1.092840981756825691e+01 3.446936327964067459e-02 3.170234030830829219e+00 +2.641679099999999835e+03 1.031504932617260195e+01 3.785240463912487030e-02 2.970828621514412848e+00 +2.643688700000000154e+03 1.118248174447510834e+01 3.382248990237712860e-02 3.193674737272194974e+00 +2.645675079999999980e+03 1.043193520822361720e+01 3.760635014623403549e-02 2.992987229792363646e+00 +2.650629710000000159e+03 1.088411966123013208e+01 3.507450222969055176e-02 3.135447535424742416e+00 +2.654639220000000023e+03 1.092152650484151977e+01 3.481608256697654724e-02 3.149493202940999215e+00 +2.659684310000000096e+03 1.111101502915774830e+01 3.378282301127910614e-02 3.242355935254371602e+00 +2.661681459999999788e+03 1.085087928824265369e+01 3.518522437661886215e-02 3.129649439499434305e+00 +2.665670650000000023e+03 1.125116587747092645e+01 3.387910127639770508e-02 3.139357974665671236e+00 +2.667670110000000022e+03 1.106756584949762434e+01 3.390496131032705307e-02 3.218166430829650260e+00 +2.669659500000000207e+03 1.088110894492806935e+01 3.488742839545011520e-02 3.145526614940185706e+00 +2.671658590000000004e+03 1.108347779682411627e+01 3.401489928364753723e-02 3.205573583936411897e+00 +2.673653049999999894e+03 1.085411279347702163e+01 3.481894824653863907e-02 3.149333910452590590e+00 +2.675640800000000127e+03 1.104905744747169294e+01 3.404849022626876831e-02 3.202285042882366817e+00 +2.677622519999999895e+03 1.090033387663011766e+01 3.486746829003095627e-02 3.146628277199395196e+00 +2.679612669999999980e+03 1.102327961371418574e+01 3.391986247152090073e-02 3.216236958702335169e+00 +2.681604420000000118e+03 1.089477565374390267e+01 3.485620394349098206e-02 3.147254540628940056e+00 +2.685676140000000032e+03 1.086925166108484575e+01 3.439817111939191818e-02 3.174922974793839447e+00 +2.689653420000000096e+03 1.096735270794544981e+01 3.441784903407096863e-02 3.173606550140067206e+00 +2.691638359999999921e+03 1.037508197092030038e+01 3.792559728026390076e-02 2.963172800911975102e+00 +2.693650729999999839e+03 1.097000426359420189e+01 3.429740481078624725e-02 3.181933792657575033e+00 +2.697644760000000133e+03 1.103013427736415153e+01 3.415035177022218704e-02 3.193265411371879026e+00 +2.699635099999999966e+03 1.041978524228457026e+01 3.752878773957490921e-02 2.999134217056258045e+00 +2.701633060000000114e+03 1.102397897390060777e+01 3.404780197888612747e-02 3.202347925420173880e+00 +2.705620939999999791e+03 1.110210656177837230e+01 3.395364247262477875e-02 3.212161715134140838e+00 +2.707619049999999788e+03 1.053187011373668192e+01 3.692494984716176987e-02 3.039241260803768441e+00 +2.709603290000000015e+03 1.132515201356748769e+01 3.410004638135433197e-02 3.214821886690954589e+00 +2.711600300000000061e+03 1.061051150966872747e+01 3.690129332244396210e-02 3.040627679690178109e+00 +2.713612419999999929e+03 1.115473614708531613e+01 3.377594891935586929e-02 3.245543444749351192e+00 +2.715628970000000209e+03 1.081665118442134776e+01 3.543200343847274780e-02 3.117035442553678593e+00 +2.719540250000000015e+03 1.051855839511769730e+01 3.745437599718570709e-02 3.004743658952745200e+00 +2.723582660000000033e+03 1.080992262200458498e+01 3.565518371760845184e-02 3.105837727608713461e+00 +2.725579330000000027e+03 1.116976878244445537e+01 3.377921879291534424e-02 3.243898186008872919e+00 +2.727572869999999966e+03 1.079971633635896211e+01 3.535184822976589203e-02 3.121095910898776804e+00 +2.729570839999999862e+03 1.111892688521520967e+01 3.380275052040815353e-02 3.236082728370786921e+00 +2.733558640000000196e+03 1.108005418424427724e+01 3.383482526987791061e-02 3.229091263621858499e+00 +2.735554129999999986e+03 1.089408196152443509e+01 3.492070827633142471e-02 3.143702271029911177e+00 +2.737545909999999822e+03 1.112490403083335977e+01 3.388366848230361938e-02 3.221119341544266046e+00 +2.739568470000000161e+03 1.085803570876100288e+01 3.482244163751602173e-02 3.149136569495221138e+00 +2.741543580000000020e+03 1.105627993749665094e+01 3.416669275611639023e-02 3.191925070838891099e+00 +2.752534250000000156e+03 1.128357236506410466e+01 3.383633866906166077e-02 3.246656312292544033e+00 +2.755529809999999998e+03 1.086705246501214361e+01 3.457704745233058929e-02 3.163470135066158040e+00 +2.757526620000000094e+03 1.046598586835863287e+01 3.772021736949682236e-02 2.983311622202272861e+00 +2.760506199999999808e+03 1.118046390759464614e+01 3.377194516360759735e-02 3.248142485272607516e+00 +2.762507290000000012e+03 1.081889358555742575e+01 3.548934496939182281e-02 3.114145709377015070e+00 +2.764496290000000045e+03 1.119696668636927583e+01 3.377663157880306244e-02 3.245160341528653625e+00 +2.770484759999999824e+03 1.087864099591667966e+01 3.505508881062269211e-02 3.136475544123788151e+00 +2.776472540000000208e+03 1.113867978953238413e+01 3.396595921367406845e-02 3.210765240484671601e+00 +2.783474870000000010e+03 1.113701781275178604e+01 3.382038418203592300e-02 3.231972066599889892e+00 +2.785481180000000222e+03 1.075112505946850661e+01 3.625618107616901398e-02 3.075609466563013594e+00 +2.787481029999999919e+03 1.120242294104037128e+01 3.377173840999603271e-02 3.248300885807231975e+00 +2.794467849999999999e+03 1.095583255773495068e+01 3.443447686731815338e-02 3.172506442347225342e+00 +2.859916470000000118e+03 1.093501188184240291e+01 3.448020759969949722e-02 3.169536410711410124e+00 +2.884879469999999856e+03 1.167515653905463147e+01 3.702524211257696152e-02 3.054805352803833696e+00 +2.893860160000000178e+03 1.076226633949172751e+01 3.549343161284923553e-02 3.113940086158007770e+00 +2.896850269999999909e+03 1.037590174950275212e+01 3.792634513229131699e-02 2.963092170594061603e+00 +2.899871169999999893e+03 1.105159485206788794e+01 3.407941572368144989e-02 3.199412218326461943e+00 +2.903882500000000164e+03 1.079270738609460167e+01 3.557309135794639587e-02 3.109943099722865867e+00 +2.906839739999999892e+03 1.112825478160139347e+01 3.380737919360399246e-02 3.196695716807437915e+00 +2.910847270000000208e+03 1.113798472227458447e+01 3.382153436541557312e-02 3.231727385913720774e+00 +2.912857480000000123e+03 1.073298313391781633e+01 3.614172153174877167e-02 3.081449853723514209e+00 +2.923829810000000180e+03 1.046346898435773554e+01 3.792748693376779556e-02 2.962967602389606103e+00 +2.934808750000000146e+03 1.105468722303822560e+01 3.404993936419487000e-02 3.202147119132753073e+00 +2.939853399999999965e+03 1.075331297223282512e+01 3.556958492845296860e-02 3.110118809133906925e+00 +2.946741989999999987e+03 1.107620133640707749e+01 3.392742481082677841e-02 3.215289271470677335e+00 +2.947779719999999998e+03 1.067524638579380536e+01 3.663942217826843262e-02 3.055381059998234505e+00 +2.948811810000000150e+03 1.096138099939784816e+01 3.448111470788717270e-02 3.169478082340024816e+00 +2.956785150000000158e+03 1.100276297059412833e+01 3.439845237880945206e-02 3.174902455417558222e+00 +2.962754010000000108e+03 1.037332742873116764e+01 3.792109712958335876e-02 2.963663341788029815e+00 +2.964809400000000096e+03 1.117045888841057000e+01 3.379618190228939056e-02 3.237887795546415148e+00 +2.967744540000000143e+03 1.090535876274918969e+01 3.491155058145523071e-02 3.144201646181192800e+00 +2.970789580000000115e+03 1.063066442672767842e+01 3.628832474350929260e-02 3.073957737756561226e+00 +2.973781899999999951e+03 1.051993237287739547e+01 3.710526414215564728e-02 3.028327119368955600e+00 +2.975713839999999891e+03 1.089480008187058324e+01 3.484087809920310974e-02 3.148106417697437376e+00 +2.976751659999999902e+03 1.118676384491801912e+01 3.379273042082786560e-02 3.238921217557481302e+00 +2.977720600000000104e+03 1.096705284541189940e+01 3.439344931393861771e-02 3.175240175674245435e+00 +2.979733619999999974e+03 1.090234410911238250e+01 3.478485066443681717e-02 3.151254428359891335e+00 +2.984693920000000162e+03 1.111735043056604155e+01 3.391835559159517288e-02 3.216428343659372580e+00 +2.986742079999999987e+03 1.082947578995726268e+01 3.531400207430124283e-02 3.123024302287757958e+00 +2.988783579999999802e+03 1.090794040953181110e+01 3.467844054102897644e-02 3.157391447651824556e+00 +2.991679050000000188e+03 1.088899045503001695e+01 3.475891146808862686e-02 3.152732136397782714e+00 +2.995783559999999852e+03 1.120682122221845489e+01 3.377261571586132050e-02 3.247637740668080308e+00 +3.001694250000000011e+03 1.042217808243547239e+01 3.770211990922689438e-02 2.984906942063422441e+00 +3.005700510000000122e+03 1.057852880476971791e+01 3.708513919264078140e-02 3.029580202574651882e+00 +3.007708720000000085e+03 1.117140133731287932e+01 3.379786480218172073e-02 3.237410569664114224e+00 +3.013803579999999783e+03 1.090526850537154679e+01 3.466588072478771210e-02 3.158132129314793701e+00 +3.017599160000000211e+03 1.028740287438047574e+01 3.790209628641605377e-02 2.965697949321179028e+00 +3.023652489999999943e+03 1.121647057476160114e+01 3.377171605825424194e-02 3.248296423570576685e+00 +3.025771540000000186e+03 1.093584323471955955e+01 3.444375284016132355e-02 3.171898187323999974e+00 +3.036701399999999921e+03 1.074478198531274842e+01 3.583763912320137024e-02 3.096731674457484207e+00 +3.043639110000000073e+03 1.077389428175685460e+01 3.561408352106809616e-02 3.107890553991963678e+00 +3.045669670000000224e+03 1.094752806018153990e+01 3.446968086063861847e-02 3.170212380557469345e+00 +3.048642919999999776e+03 1.072985593053103948e+01 3.582656849175691605e-02 3.097284194416459968e+00 +3.050739819999999781e+03 1.041164542776375157e+01 3.731030877679586411e-02 3.014955541529091398e+00 +3.053621450000000095e+03 1.091261290211277490e+01 3.453900385648012161e-02 3.165819332785372975e+00 +3.057727840000000015e+03 1.115047890048577273e+01 3.379076626151800156e-02 3.239540346252058445e+00 +3.060583180000000084e+03 1.099967635975042235e+01 3.424174617975950241e-02 3.095777198871657365e+00 +3.064637580000000071e+03 1.096182650660696289e+01 3.482022695243358612e-02 3.149260585047163108e+00 +3.067649370000000090e+03 1.068908734365478530e+01 3.617960121482610703e-02 3.079526105219128951e+00 +3.071693229999999858e+03 1.090986344566739241e+01 3.481790889054536819e-02 3.149390711352439087e+00 +3.074608290000000125e+03 1.067002054630937025e+01 3.641178086400032043e-02 3.067543471567923952e+00 +3.076635049999999865e+03 1.087962159458148648e+01 3.442495781928300858e-02 3.173135881942649839e+00 +3.078641090000000077e+03 1.036945697277276857e+01 3.781569749116897583e-02 2.974453068693448721e+00 +3.080648470000000088e+03 1.099470597629542645e+01 3.413325268775224686e-02 3.194698656652820379e+00 +3.087500399999999900e+03 1.047681243033448872e+01 3.757269494235515594e-02 2.995693933845087198e+00 +3.091545759999999973e+03 1.083544056674114309e+01 3.572713583707809448e-02 3.102245469152033586e+00 +3.097572520000000168e+03 1.097181277893787765e+01 3.431384358555078506e-02 3.180756381124401955e+00 +3.105604330000000118e+03 1.032663596747153001e+01 3.792505152523517609e-02 2.963232125032161601e+00 +3.107604560000000220e+03 1.098648700922755594e+01 3.435386624187231064e-02 3.177945736251564401e+00 +3.109609629999999925e+03 1.041712403273761112e+01 3.765621036291122437e-02 2.988856638792298348e+00 +3.112495570000000043e+03 1.103328549310183426e+01 3.408202808350324631e-02 3.199175817420481849e+00 +3.114524669999999787e+03 1.070047200234728813e+01 3.632939886301755905e-02 3.071835776041064836e+00 +3.116553179999999884e+03 1.112651947377679207e+01 3.380146250128746033e-02 3.236427504274803635e+00 +3.122492630000000190e+03 1.068452044555559688e+01 3.610812872648239136e-02 3.083152465964368094e+00 +3.124536200000000008e+03 1.110244308753209808e+01 3.397053200751543045e-02 3.210254000834186883e+00 +3.127508240000000114e+03 1.090538941717077215e+01 3.434143960475921631e-02 3.178810380553643622e+00 +3.129525189999999839e+03 1.046434734648533116e+01 3.734598029404878616e-02 3.012498385983650717e+00 +3.134520889999999781e+03 1.089103671367043980e+01 3.480930812656879425e-02 3.149873876139246853e+00 +3.146452900000000227e+03 1.085529288827126848e+01 3.482245653867721558e-02 3.149134947938735163e+00 +3.154468130000000201e+03 1.094150041174435017e+01 3.446260094642639160e-02 3.170670758484374741e+00 +3.163450269999999819e+03 1.108898972933825000e+01 3.390471544116735458e-02 3.218202057820688022e+00 +3.272874749999999949e+03 1.078948243001736351e+01 3.572943247854709625e-02 3.102131401430685997e+00 +3.355688630000000103e+03 1.085794642594339798e+01 3.454322647303342819e-02 3.165557118777444057e+00 +3.358687879999999950e+03 1.082055633080246082e+01 3.531136736273765564e-02 3.123158415568689339e+00 +3.362698940000000221e+03 1.084268242315855524e+01 3.483041748404502869e-02 3.148689964957724907e+00 +3.365759169999999813e+03 1.082254651595689943e+01 3.545686975121498108e-02 3.115780151114049268e+00 +3.386773619999999937e+03 1.110152917532616534e+01 3.379046078771352768e-02 3.239631351974208595e+00 +3.388759820000000218e+03 1.083505083714260486e+01 3.517291136085987091e-02 3.120036552459159562e+00 +3.391595429999999851e+03 1.117022897967317974e+01 3.379848878830671310e-02 3.237232017089684000e+00 +3.394696449999999913e+03 1.110541247459996406e+01 3.378408122807741165e-02 3.241871967358573858e+00 +3.398805249999999887e+03 1.055860533798713163e+01 3.741707187145948410e-02 3.007465771069333993e+00 +3.404642420000000129e+03 1.061773413227575880e+01 3.658488951623439789e-02 3.058343016521019031e+00 +3.406641299999999774e+03 1.113931171625431205e+01 3.377804812043905258e-02 3.244443368217867718e+00 +3.408649699999999939e+03 1.072918274039930431e+01 3.575268574059009552e-02 3.100970222558134815e+00 +3.410707190000000082e+03 1.114539730105977533e+01 3.377050068229436874e-02 3.151717345271875637e+00 +3.413565639999999803e+03 1.084902719357677015e+01 3.481713030487298965e-02 3.149434843316771815e+00 +3.415573559999999816e+03 1.086151606364958511e+01 3.485827520489692688e-02 3.147139447548864322e+00 +3.419587939999999890e+03 1.048599083166554102e+01 3.721610363572835922e-02 3.021246997812875090e+00 +3.425640580000000227e+03 1.110037062997419888e+01 3.384988289326429367e-02 3.226394448815327554e+00 +3.427650869999999941e+03 1.066759978440080658e+01 3.627274744212627411e-02 3.074759276328642432e+00 +3.431637459999999919e+03 1.070509198803029172e+01 3.607970383018255234e-02 3.084589074121965258e+00 +3.433630470000000059e+03 1.123032673849132834e+01 3.377293981611728668e-02 3.248234715508433457e+00 +3.436636680000000069e+03 1.099815961529939301e+01 3.444360662251710892e-02 3.171909331376688179e+00 +3.439626710000000003e+03 1.082312642845738537e+01 3.520120028406381607e-02 3.128821074266300073e+00 +3.442628760000000057e+03 1.042317413260349213e+01 3.777813352644443512e-02 2.978027978238233509e+00 +3.444621849999999995e+03 1.101024236135797985e+01 3.426526673138141632e-02 3.184285218520308103e+00 +3.455608400000000074e+03 1.091345895684268719e+01 3.473345935344696045e-02 3.150348188105685843e+00 +3.457623649999999998e+03 1.051738878930879117e+01 3.726235218346118927e-02 3.018191903595351722e+00 +3.459617679999999837e+03 1.090649678663995914e+01 3.457346465438604355e-02 3.163689363798322773e+00 +3.461625610000000052e+03 1.034550371449855533e+01 3.792757168412208557e-02 2.962957517649005723e+00 +3.464529840000000149e+03 1.096488617120530051e+01 3.420065809041261673e-02 3.189207870859901650e+00 +3.466557549999999992e+03 1.061739850883487613e+01 3.664477076381444931e-02 3.055090747928743689e+00 +3.471572779999999966e+03 1.091859437900285457e+01 3.446311317384243011e-02 3.170638762154132095e+00 +3.473568720000000212e+03 1.037136923910483155e+01 3.792651742696762085e-02 2.963073569756513592e+00 +3.476510760000000118e+03 1.124965299710001077e+01 3.377572540193796158e-02 3.237490413379742193e+00 +3.478543160000000171e+03 1.084854674499915816e+01 3.527846746146678925e-02 3.124840460242726881e+00 +3.480565030000000206e+03 1.102543950035929576e+01 3.405066765844821930e-02 3.202079908429924959e+00 +3.490499189999999999e+03 1.086270432672219322e+01 3.496166225522756577e-02 3.141475701729076864e+00 +3.497494079999999940e+03 1.054701837404220832e+01 3.725277911871671677e-02 3.018828926201137630e+00 +3.502527799999999843e+03 1.100608777213115097e+01 3.448870684951543808e-02 3.168990816239561692e+00 +3.511480030000000170e+03 1.109042064320575349e+01 3.377406205981969833e-02 3.246643500744060606e+00 +3.520459879999999885e+03 1.045323564430368002e+01 3.766889590770006180e-02 2.969082530703305522e+00 +3.523462529999999788e+03 1.110088469799971023e+01 3.400845918804407120e-02 3.206231800498857698e+00 +3.528457080000000133e+03 1.058219896006861482e+01 3.713527414947748184e-02 3.026440311286571205e+00 +3.592919570000000022e+03 1.093262232212834562e+01 3.471142519265413284e-02 3.155465712384464272e+00 +3.603910760000000209e+03 1.112204448901263198e+01 3.377274889498949051e-02 3.247523222616658600e+00 +3.625902930000000197e+03 1.087037331608130231e+01 3.463598899543285370e-02 3.159907070932609585e+00 +3.639862560000000030e+03 1.037171714143644685e+01 3.792303241789340973e-02 2.963451268013368001e+00 +3.643840540000000146e+03 1.033162815967448012e+01 3.792710974812507629e-02 2.963007016596512333e+00 +3.647874020000000201e+03 1.054666341001549590e+01 3.699521441012620926e-02 3.035067862983465758e+00 +3.651813999999999851e+03 1.036502455302344217e+01 3.785605356097221375e-02 2.970167869363767199e+00 +3.655783669999999802e+03 1.043383591911515573e+01 3.792414907366037369e-02 2.963330173306933268e+00 +3.658783950000000004e+03 1.112395686524951088e+01 3.386673238128423691e-02 3.223652291755686239e+00 +3.661838699999999790e+03 1.121159337524443167e+01 3.377196565270423889e-02 3.248124954784616047e+00 +3.669826469999999972e+03 1.112927189541393069e+01 3.379707690328359604e-02 3.237633490554343130e+00 +3.672845809999999801e+03 1.103603051986974393e+01 3.409225679934024811e-02 3.198255508721985940e+00 +3.675809389999999894e+03 1.091084154898895520e+01 3.495077043771743774e-02 3.142066968236807423e+00 +3.680811610000000201e+03 1.104603508963710290e+01 3.402661811560392380e-02 3.204404017810965399e+00 +3.701739320000000134e+03 1.062600514727769507e+01 3.625058382749557495e-02 3.075897579101448898e+00 +3.704732100000000173e+03 1.119040340037229164e+01 3.377463016659021378e-02 3.246299516578215361e+00 +3.707722229999999854e+03 1.094547947955282474e+01 3.463516291230916977e-02 3.159957461918921684e+00 +3.713741399999999885e+03 1.044882816884659960e+01 3.772144392132759094e-02 2.983201503624009820e+00 +3.718754480000000058e+03 1.098176084554166287e+01 3.425384685397148132e-02 3.149909318134074265e+00 +3.721676100000000133e+03 1.038367574326513321e+01 3.792597074061632156e-02 2.963132985730726698e+00 +3.724706790000000183e+03 1.100335215098385611e+01 3.435252048075199127e-02 3.178038883438339290e+00 +3.726829589999999826e+03 1.116456578310367931e+01 3.381333127617835999e-02 3.233518775948305279e+00 +3.730675279999999930e+03 1.081033173887275822e+01 3.481649793684482574e-02 3.149470206950942597e+00 +3.733711749999999938e+03 1.077351040687743655e+01 3.586596064269542694e-02 3.095316438094711575e+00 +3.736697959999999966e+03 1.045865829802946934e+01 3.748815041035413742e-02 3.002228912565347851e+00 +3.739626760000000104e+03 1.105522296401928983e+01 3.408502228558063507e-02 3.196856471515518106e+00 +3.741706619999999930e+03 1.084608646211995620e+01 3.495663031935691833e-02 3.141749881454396487e+00 +3.744674430000000029e+03 1.037000644842402330e+01 3.792664036154747009e-02 2.963059490800693752e+00 +3.746793239999999969e+03 1.115014788848171534e+01 3.385469317436218262e-02 3.225586970059853176e+00 +3.751780529999999999e+03 1.043600793291928497e+01 3.764315135776996613e-02 2.989952595515135592e+00 +3.756733740000000125e+03 1.085008030253944433e+01 3.514544665813446045e-02 3.131721268250766688e+00 +3.758811689999999999e+03 1.048519477906005370e+01 3.750796150416135788e-02 3.000728733319562469e+00 +3.761661340000000109e+03 1.103476602548890995e+01 3.425043541938066483e-02 3.151709746710857463e+00 +3.763747649999999794e+03 1.056988651833634663e+01 3.699690755456686020e-02 3.034965274918763445e+00 +3.766624049999999897e+03 1.109736902733844488e+01 3.388011269271373749e-02 3.221635530480069232e+00 +3.771575049999999919e+03 1.102637335978528021e+01 3.403140231966972351e-02 3.203934126122877757e+00 +3.775678820000000087e+03 1.050324472375493201e+01 3.726792521774768829e-02 3.017818666597137156e+00 +3.779750109999999950e+03 1.090973345170354136e+01 3.486189339309930801e-02 3.146938333485156836e+00 +3.783605990000000020e+03 1.034906903028396385e+01 3.777565062046051025e-02 2.967216794247216072e+00 +3.789677740000000085e+03 1.113973884497864120e+01 3.378999698907136917e-02 3.239781669631025540e+00 +3.794635150000000067e+03 1.049968695169859778e+01 3.750403318554162979e-02 3.001028213205757300e+00 +3.796655409999999847e+03 1.095758064702615719e+01 3.435084316879510880e-02 3.178154770806779439e+00 +3.798710649999999987e+03 1.071069544625875025e+01 3.631498385220766068e-02 3.072580444958757262e+00 +3.803626980000000003e+03 1.083832810817368042e+01 3.491510357707738876e-02 3.144007610838082112e+00 +3.805650290000000041e+03 1.136944395628763438e+01 3.443947434425354004e-02 3.153082003260426980e+00 +3.810678559999999834e+03 1.086107427919121626e+01 3.546316362917423248e-02 3.115462835507476491e+00 +3.815576570000000174e+03 1.091129669060222085e+01 3.484303131699562073e-02 3.147986539699465514e+00 +3.817609440000000177e+03 1.070664770649806918e+01 3.597911633551120758e-02 3.089651578553186173e+00 +3.819630729999999858e+03 1.095477605816645728e+01 3.450220450758934021e-02 3.168131720906439686e+00 +3.822558759999999893e+03 1.055989870540396858e+01 3.727465402334928513e-02 3.017367321950205294e+00 +3.824597440000000006e+03 1.125269036238085540e+01 3.377184830605983734e-02 3.248221197557270123e+00 +3.826597699999999804e+03 1.073055272703646068e+01 3.553888108581304550e-02 3.111657587628521959e+00 +3.828607590000000073e+03 1.114080462685873663e+01 3.381748870015144348e-02 3.230795642800342371e+00 +3.831517130000000179e+03 1.092101290185354223e+01 3.482000250369310379e-02 3.149274154784786006e+00 +3.833548170000000027e+03 1.050316348229045005e+01 3.717364650219678879e-02 3.023997237447571429e+00 +3.835558910000000196e+03 1.099157073535718787e+01 3.445488680154085159e-02 3.171172995615553880e+00 +3.837570420000000013e+03 1.038488929487315282e+01 3.780434001237154007e-02 2.975546884626891320e+00 +3.848518849999999929e+03 1.106991406171188963e+01 3.389046806842088699e-02 3.220150138064959755e+00 +3.850556680000000142e+03 1.089419809979308162e+01 3.477758634835481644e-02 3.151667892864161491e+00 +3.860509630000000016e+03 1.066979234163922463e+01 3.600870538502931595e-02 3.088165319048548074e+00 +3.862507900000000063e+03 1.094319895773707962e+01 3.470307961106300354e-02 3.155950691341713910e+00 +3.870476299999999810e+03 1.092012213760793671e+01 3.463347163051366806e-02 3.160059420822140641e+00 +3.872501720000000205e+03 1.037885410119024954e+01 3.788500651717185974e-02 2.967428011973662905e+00 +3.881456779999999981e+03 1.086226271173489266e+01 3.505848068743944168e-02 3.136294978473569639e+00 +3.891457750000000033e+03 1.081501265632801712e+01 3.523625247180461884e-02 3.127012481217331441e+00 +3.983869970000000194e+03 1.097234011651711683e+01 3.419971559196710587e-02 3.189285593206712566e+00 +4.090693110000000161e+03 1.084219072666847872e+01 3.472506906837224960e-02 3.149180423871775769e+00 +4.103725099999999657e+03 1.101435395766267611e+01 3.423038497567176819e-02 3.186907677318286947e+00 +4.109635589999999866e+03 1.069965170475616212e+01 3.593965247273445129e-02 3.091629995551333554e+00 +4.128722389999999905e+03 1.085209782623262420e+01 3.482160903513431549e-02 3.149182611866935488e+00 +4.137588509999999587e+03 1.088684337886089359e+01 3.477033879607915878e-02 3.152078836384288874e+00 +4.139602539999999863e+03 1.047716831725955444e+01 3.749990649521350861e-02 3.001341920795518980e+00 +4.141630460000000312e+03 1.097371767584634661e+01 3.428987134248018265e-02 3.182480889222474740e+00 +4.143655169999999998e+03 1.052923356891948004e+01 3.696864563971757889e-02 3.036657019745318653e+00 +4.145731329999999616e+03 1.105694123893504077e+01 3.401774726808071136e-02 3.205287626761702757e+00 +4.145760800000000017e+03 1.085017965218781377e+01 3.524304740130901337e-02 3.126660792163430180e+00 +4.151618929999999636e+03 1.059446391075453420e+01 3.688650205731391907e-02 3.041488503910036556e+00 +4.153620450000000346e+03 1.114217943366070607e+01 3.379606362432241440e-02 3.237928941686765594e+00 +4.155631970000000365e+03 1.072046686160937767e+01 3.591636940836906433e-02 3.092796402692569835e+00 +4.157738360000000284e+03 1.045355005533335202e+01 3.762376401573419571e-02 2.991343503631018308e+00 +4.159679170000000340e+03 1.081983424490131185e+01 3.482049889862537384e-02 3.149247088921976800e+00 +4.161674149999999827e+03 1.085167712958449826e+01 3.473821375519037247e-02 3.153917584888728864e+00 +4.163687320000000000e+03 1.086247239202370096e+01 3.473402187228202820e-02 3.154158390144427226e+00 +4.172592220000000452e+03 1.098079456913693797e+01 3.425995819270610809e-02 3.184678224307944117e+00 +4.174602659999999560e+03 1.055485745108087237e+01 3.727035503834486008e-02 3.017656517793679161e+00 +4.179645019999999931e+03 1.091750717288766737e+01 3.443412017077207565e-02 3.172531004785837272e+00 +4.181661439999999857e+03 1.039631248200442748e+01 3.767471667379140854e-02 2.987280682935316456e+00 +4.184517880000000332e+03 1.094582057654164586e+01 3.438360895961523056e-02 3.175906612916466809e+00 +4.188566740000000209e+03 1.105026297280029901e+01 3.377918247133493423e-02 3.243905622741122929e+00 +4.190566270000000259e+03 1.075741575424994600e+01 3.606843668967485428e-02 3.085158010111294313e+00 +4.194622769999999946e+03 1.092082612878317605e+01 3.482245746999979019e-02 3.149134803552058770e+00 +4.197612460000000283e+03 1.060533384533431445e+01 3.694554045796394348e-02 3.038029528422609093e+00 +4.200585469999999987e+03 1.177527004082654294e+01 3.786225989460945129e-02 3.176850247853993725e+00 +4.203588099999999940e+03 1.113643752300141898e+01 3.383823391050100327e-02 3.228457583137739118e+00 +4.216500259999999798e+03 1.102200888790442512e+01 3.415536880493164062e-02 3.192852179994978279e+00 +4.227499289999999746e+03 1.119256345300135713e+01 3.377176262438297272e-02 3.248304981152517090e+00 +4.229518869999999879e+03 1.084303992697385866e+01 3.508404362946748734e-02 3.134943394030416108e+00 +4.231526990000000296e+03 1.111728967600618034e+01 3.395630884915590286e-02 3.211857301838335843e+00 +4.234486139999999978e+03 1.094456155213724102e+01 3.443323262035846710e-02 3.172588563369016956e+00 +4.247476539999999659e+03 1.085568191034858465e+01 3.489533532410860062e-02 3.145092077106318662e+00 +4.256460119999999733e+03 1.074952612933946305e+01 3.618760872632265091e-02 3.079117144416056551e+00 +4.347883429999999862e+03 1.076505163406506327e+01 3.575538843870162964e-02 3.100835602528037693e+00 +4.347896889999999985e+03 1.063162038518089147e+01 3.675367403775453568e-02 3.049064191441487104e+00 +4.358878139999999803e+03 1.109673444364006301e+01 3.380073700100183487e-02 3.236622368827148044e+00 +4.377851730000000316e+03 1.110639273533789151e+01 3.378884680569171906e-02 3.240175114345980489e+00 +4.381844750000000204e+03 1.115958748172699266e+01 3.377277497202157974e-02 3.247518050305025827e+00 +4.383840009999999893e+03 1.070655521384320608e+01 3.595590870827436447e-02 3.090816539937116580e+00 +4.403830890000000181e+03 1.089277859603411081e+01 3.478074911981821060e-02 3.151487310282603538e+00 +4.410791979999999967e+03 1.061957244735844874e+01 3.674253076314926147e-02 3.049686703466844229e+00 +4.423784050000000207e+03 1.102605224675436801e+01 3.438188042491674423e-02 3.176023550320699051e+00 +4.427759519999999611e+03 1.095427627079566690e+01 3.441330976784229279e-02 3.173909200983353163e+00 +4.430741689999999835e+03 1.079790187315841976e+01 3.528308309614658356e-02 3.124606254598780275e+00 +4.433731869999999617e+03 1.041652354161768912e+01 3.791711106896400452e-02 2.964092506717970643e+00 +4.436716279999999642e+03 1.116787180287212955e+01 3.379869647324085236e-02 3.237177533859577405e+00 +4.439722579999999653e+03 1.104859945083638451e+01 3.424257598817348480e-02 3.185981432115603251e+00 +4.448692060000000311e+03 1.101821317838206582e+01 3.421485051512718201e-02 3.188100740556194079e+00 +4.453812820000000102e+03 1.096314466733734605e+01 3.474172577261924744e-02 3.153715631950974263e+00 +4.461690330000000358e+03 1.079536136207301844e+01 3.558153752237558365e-02 3.109519295843401032e+00 +4.463782809999999699e+03 1.107853473540149203e+01 3.385573904961347580e-02 3.003820305874498775e+00 +4.466687420000000202e+03 1.099539948756530627e+01 3.435779362916946411e-02 3.177673387747553591e+00 +4.469665699999999561e+03 1.083807176568361719e+01 3.516504541039466858e-02 3.130697955072802241e+00 +4.475649250000000393e+03 1.113080840413248218e+01 3.386674262583255768e-02 3.223654702762682511e+00 +4.480793929999999818e+03 1.092047738033981830e+01 3.471873234957456589e-02 3.155041660392366332e+00 +4.484656210000000101e+03 1.060583678698043286e+01 3.657866828143596649e-02 3.058678451722320002e+00 +4.491595419999999649e+03 1.098224333375215167e+01 3.433030750602483749e-02 3.179590295771578923e+00 +4.493650959999999941e+03 1.093409743930248901e+01 3.445323836058378220e-02 3.171278612052225387e+00 +4.499641069999999672e+03 1.045248946459766870e+01 3.782412782311439514e-02 2.973632674700568135e+00 +4.501751009999999951e+03 1.108264581670452742e+01 3.394950181245803833e-02 3.212643389890597945e+00 +4.504643540000000030e+03 1.092387243183514300e+01 3.481815569102764130e-02 3.149376918259133795e+00 +4.506731139999999868e+03 1.036994067172974532e+01 3.759097866714000702e-02 2.994230629807001165e+00 +4.509603310000000420e+03 1.096193652798920937e+01 3.421314153820276260e-02 3.188236349749895115e+00 +4.511625039999999899e+03 1.058945957658531789e+01 3.684250451624393463e-02 3.044027643488316670e+00 +4.521626349999999547e+03 1.112604880212045799e+01 3.378666751086711884e-02 3.240925644492948177e+00 +4.523647820000000138e+03 1.089828777536026116e+01 3.482816927134990692e-02 3.148815161537767970e+00 +4.527692000000000007e+03 1.090411032785607581e+01 3.455640561878681183e-02 3.164740478941213908e+00 +4.530610480000000280e+03 1.039677771154353536e+01 3.765248134732246399e-02 2.989170432662224819e+00 +4.532668569999999818e+03 1.118906720278653744e+01 3.377249557524919510e-02 3.247711286970671463e+00 +4.536537510000000111e+03 1.091431708296073566e+01 3.455474600195884705e-02 3.164842752499686718e+00 +4.538602030000000013e+03 1.058830568262923855e+01 3.687681630253791809e-02 3.042051064224021051e+00 +4.540609959999999774e+03 1.117263147321653172e+01 3.377995081245899200e-02 3.243561529020957845e+00 +4.546643799999999828e+03 1.094294752363561685e+01 3.483543917536735535e-02 3.148410182863401019e+00 +4.551608540000000175e+03 1.189360495750992719e+01 3.974039573222398758e-02 3.180913804492632835e+00 +4.555631889999999657e+03 1.118249006354774089e+01 3.383785858750343323e-02 3.228525090378773665e+00 +4.560545470000000023e+03 1.112218135508996752e+01 3.378612361848354340e-02 3.241121860782081310e+00 +4.565499869999999646e+03 1.050564741849913730e+01 3.725631348788738251e-02 3.018593636848429185e+00 +4.567537809999999808e+03 1.099511067293025413e+01 3.423884324729442596e-02 3.186265819655591969e+00 +4.569557880000000296e+03 1.053578037142218982e+01 3.695341944694519043e-02 3.037562030292062509e+00 +4.571574209999999766e+03 1.122564900279267164e+01 3.377409838140010834e-02 3.246616888209366891e+00 +4.576508939999999711e+03 1.094389436822859096e+01 3.427722584456205368e-02 3.183402846427003663e+00 +4.585481329999999616e+03 1.055970039498704161e+01 3.690160159021615982e-02 3.040608299864243413e+00 +4.588498919999999998e+03 1.041653683778367601e+01 3.732183016836643219e-02 3.014166699941971839e+00 +4.590528290000000197e+03 1.100036454805148090e+01 3.430874831974506378e-02 3.181119127398813529e+00 +4.593490950000000339e+03 1.085193970629539528e+01 3.541564010083675385e-02 3.117860974310743938e+00 +4.597521770000000288e+03 1.089782646068090166e+01 3.481994848698377609e-02 3.149277142587933120e+00 +4.600516330000000380e+03 1.054991223157444402e+01 3.695810586214065552e-02 3.037283694718374338e+00 +4.609485219999999572e+03 1.090885795070606257e+01 3.477710764855146408e-02 3.151695757410024168e+00 +4.618457919999999831e+03 1.111355569076907379e+01 3.377247694879770279e-02 3.247736316812590562e+00 +4.623450640000000021e+03 1.043170495791442853e+01 3.790450468659400940e-02 2.965442682776216365e+00 +4.691918389999999818e+03 1.107990821655212521e+01 3.387529496103525162e-02 3.222349124298025558e+00 +4.701911329999999907e+03 1.089459889281984495e+01 3.481009416282176971e-02 3.149829368100211635e+00 +4.705906949999999597e+03 1.092230138132400441e+01 3.457750845700502396e-02 3.154862380008185418e+00 +4.709905920000000151e+03 1.093616978229138326e+01 3.455354087054729462e-02 3.164916888027136554e+00 +4.721872129999999743e+03 1.096298446283828198e+01 3.437667712569236755e-02 3.176379807925106213e+00 +4.726860719999999674e+03 1.132001278871463157e+01 3.381489031016826630e-02 3.218009885181428498e+00 +4.726874780000000101e+03 1.123376191543190394e+01 3.377676475793123245e-02 3.193797446677244967e+00 +4.729889879999999721e+03 1.114126134649878885e+01 3.380859270691871643e-02 3.234635512651975020e+00 +4.741839659999999640e+03 1.116341638882621545e+01 3.378219809383153915e-02 3.242616445452841223e+00 +4.741851139999999759e+03 1.116074674878558781e+01 3.377218544483184814e-02 3.247946357248661986e+00 +4.749847130000000107e+03 1.118716939710907710e+01 3.377619851380586624e-02 3.231328987987082790e+00 +4.752845040000000154e+03 1.104213052497175518e+01 3.426168393343687057e-02 3.184550746870374649e+00 +4.752849250000000211e+03 1.099731508948151060e+01 3.421717509627342224e-02 3.187922979608303287e+00 +4.756817149999999856e+03 1.100781071082884388e+01 3.433412592858076096e-02 3.179320973770082048e+00 +4.760800339999999778e+03 1.104270681394567610e+01 3.431179933249950409e-02 3.180903072548273869e+00 +4.764801040000000285e+03 1.101367442747448244e+01 3.408603835850954056e-02 3.198813825121987087e+00 +4.767836849999999686e+03 1.097891302854496942e+01 3.460696060210466385e-02 3.161652585113611025e+00 +4.771814959999999701e+03 1.093496215476128164e+01 3.456290625035762787e-02 3.160369056307932745e+00 +4.773804379999999583e+03 1.053959075998763772e+01 3.709689341485500336e-02 3.028849445814433494e+00 +4.774850510000000213e+03 1.091079520422403704e+01 3.484891075640916824e-02 3.147658990699981896e+00 +4.776792669999999816e+03 1.117011020138357580e+01 3.377180173993110657e-02 3.248261496507056645e+00 +4.779769320000000334e+03 1.093309205841993759e+01 3.468774817883968353e-02 3.156846878923707855e+00 +4.782809739999999692e+03 1.088414589453755354e+01 3.485935181379318237e-02 3.147078634641612638e+00 +4.786798639999999978e+03 1.083291471090739044e+01 3.482129052281379700e-02 3.149200427855273876e+00 +4.786822449999999662e+03 1.089978078365499492e+01 3.481883555650711060e-02 3.149339514402822893e+00 +4.792762700000000223e+03 1.120589039834071166e+01 3.376928903162479401e-02 3.211612446641180174e+00 +4.798744380000000092e+03 1.090820327293271852e+01 3.481620084494352341e-02 3.149487272322417208e+00 +4.804721889999999803e+03 1.093617750970531155e+01 3.441086504608392715e-02 3.174071837142831587e+00 +4.807700820000000022e+03 1.100400602140270934e+01 3.408633545041084290e-02 3.198787891568865671e+00 +4.809767929999999978e+03 1.082340331855100324e+01 3.517285082489252090e-02 3.130292589970347983e+00 +4.809786769999999706e+03 1.088647334916855414e+01 3.486859612166881561e-02 3.146567156506719698e+00 +4.815714479999999639e+03 1.122018907722566006e+01 3.376884758472442627e-02 3.248290391766172736e+00 +4.818738659999999982e+03 1.099951429594592334e+01 3.429919481277465820e-02 3.181807087120785749e+00 +4.823802010000000337e+03 1.041252753202423342e+01 3.792414069175720215e-02 2.963330404521066441e+00 +4.826740679999999884e+03 1.110513886325997746e+01 3.383967280387878418e-02 3.228189384162789999e+00 +4.829683159999999589e+03 1.088849331887338323e+01 3.492673393338918686e-02 3.143373534924962964e+00 +4.842673029999999926e+03 1.112312028733811609e+01 3.378949500620365143e-02 3.239940115110687469e+00 +4.847750600000000304e+03 1.056723745374743473e+01 3.674781601876020432e-02 3.049392722415738444e+00 +4.847798630000000230e+03 1.083169127242465102e+01 3.528028447180986404e-02 3.124748549320575552e+00 +4.857814239999999700e+03 1.077845963312311106e+01 3.561394382268190384e-02 3.107897981059536185e+00 +4.863679579999999987e+03 1.064292732865377111e+01 3.653837274760007858e-02 3.060843656982171090e+00 +4.879642230000000382e+03 1.086754057105959248e+01 3.526817820966243744e-02 3.125369900051266026e+00 +4.881687939999999799e+03 1.087945104515846673e+01 3.501449525356292725e-02 3.138637447315700157e+00 +4.884634399999999914e+03 1.095998640270371105e+01 3.431528899818658829e-02 3.180654745021154639e+00 +4.892672169999999824e+03 1.121946995203578368e+01 3.377227112650871277e-02 3.247899951620257131e+00 +4.916634210000000166e+03 1.080846472026769689e+01 3.551021311432123184e-02 3.113094999786737649e+00 +4.919579060000000027e+03 1.101583960726417466e+01 3.426429629325866699e-02 3.184358195359044519e+00 +4.926498419999999896e+03 1.063650870372438106e+01 3.601957298815250397e-02 3.087618809650162000e+00 +4.948567500000000109e+03 1.048373646821759309e+01 3.728767670691013336e-02 3.016491575785823276e+00 +4.960494010000000344e+03 1.040222653181117884e+01 3.763315267860889435e-02 2.990783733973041869e+00 +5.069918120000000272e+03 1.095948886286885227e+01 3.449156787246465683e-02 3.168809000095109685e+00 +5.086860169999999925e+03 1.109130671208965246e+01 3.386148251593112946e-02 3.224480418900431911e+00 +5.087873480000000200e+03 1.045322779783032630e+01 3.748298436403274536e-02 3.002617494684669541e+00 +5.099838190000000395e+03 1.066221244228708187e+01 3.663242701441049576e-02 3.043022087040453183e+00 +5.118841620000000148e+03 1.048730612362163583e+01 3.724260255694389343e-02 3.019503353472227758e+00 +5.123811059999999998e+03 1.090078575352670320e+01 3.481599129736423492e-02 3.149497469584616738e+00 +5.144833590000000186e+03 1.087461215666942849e+01 3.481978643685579300e-02 3.147235768103701758e+00 +5.154815630000000056e+03 1.087683351277053667e+01 3.464408311992883682e-02 3.159425581918565040e+00 +5.154841680000000451e+03 1.094359747358553570e+01 3.443328756839036942e-02 3.172586025060625925e+00 +5.162793169999999918e+03 1.092945305435078751e+01 3.449765965342521667e-02 3.168421425914459633e+00 +5.164728509999999915e+03 1.096091019752378948e+01 3.449825011193752289e-02 3.168384439980091560e+00 +5.165762169999999969e+03 1.127568606707964172e+01 3.381821792572736740e-02 3.084146021158049589e+00 +5.168749279999999999e+03 1.050562353862076925e+01 3.717687726020812988e-02 3.023790228807380132e+00 diff --git a/mltsp/TCP/Algorithms/EclFeatures/README b/mltsp/TCP/Algorithms/EclFeatures/README new file mode 100755 index 00000000..1b75f6a4 --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/README @@ -0,0 +1,34 @@ + +1. Compile polyfit, a stand-along command line code that fits periodic polynomials piecewise. + + # You'll need GSL! +gcc -L/usr/local/lib polyfit.c -lgsl -lgslcblas -lm -o polyfit + +# you also need Phoebe: http://phoebe.fiz.uni-lj.si (tried: phoebe lib 0.31a +) + + + # optional: make the shared library +gcc -L/usr/local/lib polyfit.c -lgsl -lgslcblas -lm -c polyfit.c -fPIC +gcc -shared -Wl -o polyfit.so polyfit.o -lc -lgsl -lgslcblas -lm + + +On citris33: + gcc -L /global/home/users/dstarr/local/lib/ -I /global/home/users/dstarr/local/include polyfit.c -lgsl -lgslcblas -lm -o polyfit + - where /global/home/users/dstarr/local/lib/ contains libgsl.so + gcc -L /global/home/users/dstarr/local/lib/ -I /global/home/users/dstarr/local/include polyfit.c -lgsl -lgslcblas -lm -c polyfit.c -fPIC + gcc -L /global/home/users/dstarr/local/lib/ -I /global/home/users/dstarr/local/include -shared -Wl -o polyfit.so polyfit.o -lc -lgsl -lgslcblas -lm + + + +2. test out using ipython: + ipython --pylab + >> run eclipse_features.py + >> test2() + >> test() + +This will show you how to get "new" features back. + +One trick is that if you already know the period of the source (like an RRL) you can avoid having to call LS again: + + …fix_initial_period=True,initial_period=0.4422664540092584 + diff --git a/mltsp/TCP/Algorithms/EclFeatures/eclipse_features.py b/mltsp/TCP/Algorithms/EclFeatures/eclipse_features.py new file mode 100644 index 00000000..95c717f1 --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/eclipse_features.py @@ -0,0 +1,423 @@ +#!/usr/bin/env python +""" +eclipse_features -- generate a dict of features related to + classification of eclipsing systems + in pulsational variables + +is_suspect Is there a reason not to trust the orbital period measurement? +p_pulse Pulsational period (dominant period found by LS) +feature-X-ratio-diff percent of sources more than X sigma fainter than model + relative to X sigma brighter (neg has more faint values) + x = [5,8,15,20,30] +best_orb_period best period found after removing the pulsational period +suspect_reason semicolon separated list why orb_period is suspect +best_orb_chi2 best chi2 fitting orb_period from polyfit +orb_signif LS significance +""" +from __future__ import print_function + +__author__ = "J. S. Bloom, D. Starr" +__version__ = "0.32" + +import os, sys +import numpy as np +from scipy.optimize import fmin + +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Algorithms/fitcurve')) + +from lomb_scargle_refine import lomb as lombr +import copy +import selectp +from matplotlib import pylab as plt + +def _load_ben_data(fname="LC_246.dat"): + + """loader for Ben's input files""" + + from matplotlib.mlab import csv2rec + ## Get the photometry + name = str(int(fname[fname.find("_")+1:fname.find(".dat")])) + c = csv2rec(fname,delimiter=" ",names=["t","m","merr","rrl"]) + x0 = c['t'] + y = c['m'] + dy = c['merr'] + return x0,y,dy, name + +def _load_dotastro_data(fname="013113-7829.1.xml"): + + """loader for dotastro xml files""" + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract/Code')) + import db_importer + + b = db_importer.Source(xml_handle=fname) + kk = b.ts.keys() + ind = 0 + photkey = kk[ind] + ts = b.ts + x0 = np.array(ts[photkey]['t']) + y = np.array(ts[photkey]['m']) + dy = np.array(ts[photkey]['m_err']) + name = fname.split(".xml")[0] + return x0,y,dy, name + +class ebfeature: + + def __init__(self,t=None, m=None, merr=None, name="", allow_plotting=True, sys_err=0.03, \ + verbose=False, fix_initial_period=False, initial_period=1.0, srcid=0): + + self.allow_plotting = allow_plotting + self.name = name + self.t = t ; self.m = m ; self.merr = merr ; self.sys_err = sys_err + self.verbose = verbose + self.fix_initial_period=fix_initial_period ; self.initial_period = initial_period + self.features = {"run": False} + self.srcid = srcid + + def _get_pulsational_period(self,min_freq=10.0,doplot=False,max_pulse_period=400.0): + self.x0 = self.t + self.y = self.m + self.dy = self.merr + self.dy0 = np.sqrt(self.dy**2+self.sys_err**2) + self.x0 -= self.x0.min() + self.nepochs = len(self.x0) + + # define the frequency grid + Xmax = self.x0.max() + if not self.fix_initial_period: + f0 = 1.0/max_pulse_period; df = 0.1/Xmax; fe = min_freq + numf = int((fe-f0)/df) + else: + f0 = 1./self.initial_period + df = 1e-7 + numf = 1 + + psdr,res2 = lombr(self.x0,self.y,self.dy0,f0,df,numf,detrend_order=1) + period=1./res2['freq'] + self.rrlp = period + if self.verbose: + print("Initial pulstional Period is %.8f day" % self.rrlp) + + self.features.update({"p_pulse_initial": self.rrlp}) + + if self.allow_plotting and doplot: + try: + plt.figure(3) + plt.cla() + tt=(self.x0/period) % 1.; s=tt.argsort() + plt.errorbar (tt,self.y,self.dy,fmt='o'); plt.plot(tt[s],res2['model'][s]) + plt.ylim(self.y.max()+0.05,self.y.min()-0.05) + plt.title("P=%f" % (self.rrlp)) + plt.draw() + except: + pass + return res2 + + def gen_outlier_stat_features(self,doplot=False,sig_features=[30,20,15,8,5],\ + min_freq=10.0,dosave=True,max_pulse_period=400.0): + """here we generate outlier features and refine the initial pulsational period + by downweighting those outliers. + """ + + res2 = self._get_pulsational_period(doplot=doplot,min_freq=min_freq) + + ## now sigclip + offs = (self.y - res2['model'])/self.dy0 + moffs = np.median(offs) + offs -= moffs + + ## do some feature creation ... find the statistics of major outliers + for i,s in enumerate(sig_features): + rr = (np.inf,s) if i == 0 else (sig_features[i-1],s) + tmp = (offs < rr[0]) & (offs > rr[1]) + nlow = float(tmp.sum())/self.nepochs + tmp = (offs > -1*rr[0]) & (offs < -1*rr[1]) + nhigh = float(tmp.sum())/self.nepochs + if self.verbose: + print("%i: low = %f high = %f feature-%i-ratio-diff = %f" % (s,nlow,nhigh,s,nhigh - nlow)) + + self.features.update({"feature-%i-ratio-diff" % s: (nhigh - nlow)*100.0}) + + tmp = np.where(abs(offs) > 4) + self.dy_orig = copy.copy(self.merr) + dy = copy.copy(self.merr) + dy[tmp] = np.sqrt(dy[tmp]**2 + res2['model_error'][tmp]**2 + (8.0*(1 - np.exp(-1.0*abs(offs[tmp])/4)))**2) + dy0 = np.sqrt(dy**2+self.sys_err**2) + + #Xmax = self.x0.max() + #f0 = 1.0/max_pulse_period; df = 0.1/Xmax; fe = min_freq + #numf = int((fe-f0)/df) + + #refine around original period + ## Josh's original calcs, which fail for sources like: 221205 + ##df = 0.1/self.x0.max() + ##f0 = res2['freq']*0.95 + ##fe = res2['freq']*1.05 + ##numf = int((fe-f0)/df) + + df = 0.1/self.x0.max() + f0 = res2['freq']*0.95 + fe = res2['freq']*1.05 + numf = int((fe-f0)/df) + if numf == 0: + ## Josh's original calcs, which fail for sources like: 221205 + numf = 100 # kludge / fudge / magic number + df = (fe-f0) / float(numf) + + psdr,res = lombr(self.x0,self.y,dy0,f0,df,numf,detrend_order=1) + period=1./res['freq'] + + self.features.update({"p_pulse": period}) + + if self.allow_plotting and doplot: + try: + tt=(self.x0*res2['freq']) % 1.; s=tt.argsort() + plt.errorbar (tt[tmp],self.y[tmp],self.dy_orig[tmp],fmt='o',c="r") + tt=(self.x0*res['freq']) % 1.; s=tt.argsort() + plt.plot(tt[s],res['model'][s],c="r") + if dosave: + plt.savefig("pulse-%s-p=%f.png" % (os.path.basename(self.name),period)) + if self.verbose: + print("saved...", "pulse-%s-p=%f.png" % (os.path.basename(self.name),period)) + plt.draw() + except: + pass + return offs, res2 + + def gen_orbital_period(self, doplot=False, sig_features=[30,20,15,8,5], min_eclipses=4, + eclipse_shorter=False, dynamic=True, choose_largest_numf=False): + """ + """ + try: + offs,res2 = self.gen_outlier_stat_features(doplot=doplot,sig_features=sig_features) + + ## subtract the model + new_y = self.y - res2['model'] + + # make new weights that penalize sources _near_ the model + dy0 = np.sqrt(self.dy_orig**2+ res2['model_error']**2 + (3*self.sys_err*np.exp(-1.0*abs(offs)/3))**2) ## this downweights data near the model + Xmax = self.x0.max() + #import pdb; pdb.set_trace() + #print + + if choose_largest_numf: + f0 = min_eclipses/Xmax + df = 0.1/Xmax + fe = res2['freq']*0.98 ## dont go near fundamental freq least we find it again + numf = int((fe-f0)/df) + + f0_b = res2['freq']*0.98 + fe_b = 10.0 + df_b = 0.1/Xmax + numf_b = int((fe_b-f0_b)/df_b) + + if numf < numf_b: + f0 = f0_b + fe = fe_b + df = df_b + numf = numf_b + else: + if not eclipse_shorter: + f0 = min_eclipses/Xmax + df = 0.1/Xmax + fe = res2['freq']*0.98 ## dont go near fundamental freq least we find it again + numf = int((fe-f0)/df) + else: + f0 = res2['freq']*0.98 + fe = 10.0 + df = 0.1/Xmax + numf = int((fe-f0)/df) + + freqin = f0 + df*np.arange(numf,dtype='float64') + periodin = 1/freqin + + if self.verbose: + print("P min, max", min(periodin),max(periodin)) + + psdr,res2 = lombr(self.x0,new_y,self.dy0,f0,df,numf) + period=1./res2['freq'] + if self.verbose: + print("orb period = %f sigf = %f" % (period,res2['signif'])) + self.last_res = res2 + s = selectp.selectp(self.x0, new_y, self.dy_orig, period, mults=[1.0,2.0], dynamic=dynamic, verbose=self.verbose, srcid=self.srcid) + s.select() + + self.features.update({"best_orb_period": s.rez['best_period'], "best_orb_chi2": \ + s.rez['best_chi2'], 'orb_signif': res2['signif']}) + + is_suspect = False + reason = [] + if abs(1.0 - self.features['best_orb_period']) < 0.01 or abs(2.0 - self.features['best_orb_period']) < 0.01 or \ + abs(0.5 - self.features['best_orb_period']) < 0.01: + ## likely an alias + is_suspect=True + reason.append("alias") + if self.features['best_orb_chi2'] > 10.0 or self.features['orb_signif'] < 4: + is_suspect=True + reason.append("low significance") + if self.features['best_orb_period'] > Xmax/(2*min_eclipses): + ## probably too long + is_suspect=True + reason.append("too long") + if (0.5 - abs( (self.features['best_orb_period'] / self.features['p_pulse']) % 1.0 - 0.5)) < 0.01: + ## probably an alias of the pulse period + is_suspect=True + reason.append("pulse alias") + + self.features.update({'is_suspect': is_suspect, 'suspect_reason': None if not is_suspect else \ + "; ".join(reason)}) + + + if doplot: + try: + plt.figure(2) + plt.cla() + s.plot_best(extra="suspect=%s %s" % (is_suspect,"" if not is_suspect else "(" + ",".join(reason) + ")")) + plt.savefig("orb-%s-p=%f-sig=%f.png" % (os.path.basename(self.name),period,res2['signif'])) + if self.verbose: + print("saved...", "org-%s-p=%f.png" % (os.path.basename(self.name),period)) + except: + pass + except: + return + + + def old_stuff(self): + print(res2['chi2'], res2['chi0']) + if self.verbose: + print("New Period is %.8f day" % period) + + plt.figure(2) + plt.cla() + tt=(self.x0/period) % 1.; s=tt.argsort() + plt.errorbar (tt[s],new_y[s],self.dy_orig[s],fmt='o',c="b") + plt.plot(tt[s],res2['model'][s],c="r") + + f = open("lc.dat","w") + z = zip(tt[s] - 0.5,new_y[s],self.dy_orig[s]) + for l in z: + f.write("%f %f %f\n" % l) + f.close() + + f = open("lc0.dat","w") + z = zip(self.x0,new_y,self.dy_orig) + for l in z: + f.write("%f %f %f\n" % l) + f.close() + + + psdr,res2 = lombr(self.x0,new_y,self.dy0,f0/2.,df,numf) + period1=1./res2['freq'] + + if self.verbose: + print("New Period is %.8f day" % period1) + + plt.figure(4) + plt.cla() + tt=(self.x0/period1) % 1.; s=tt.argsort() + plt.errorbar (tt[s],new_y[s],self.dy_orig[s],fmt='o',c="b") + plt.plot(tt[s],res2['model'][s],c="r") + print(res2['chi2'], res2['chi0']) + f = open("lc2.dat","w") + z = zip(tt[s] - 0.5,new_y[s],self.dy_orig[s]) + for l in z: + f.write("%f %f %f\n" % l) + f.close() + +def runben(doplot=False): + + import glob + from matplotlib.mlab import csv2rec + import numpy as np + l = glob.glob("/Users/jbloom/Dropbox/LCS/LCnew_??.dat") + if os.path.exists("benfeatures.csv"): + ttt = csv2rec("benfeatures.csv") + header=False + else: + header=True + ttt = np.rec.fromarrays([-1],names='name',formats='i4') + + m = open("benfeatures.csv","a") + has_run = False + for f in l: + if f.find(".dat") != -1: + fname = f + print("working on", f) + x0,y,dy, name =_load_ben_data(fname) + if len(np.where(ttt['name'] == int(os.path.basename(name)))[0]) != 0: + print("... already in list, skipping") + continue + a = ebfeature(t=x0,m=y,merr=dy,name=name) + a.gen_orbital_period(doplot=doplot) + if doplot: + plt.draw() + if not has_run: + ff = a.features.keys() + ff.remove("run") + ff.remove("p_pulse_initial") + if header: + m.write("name," + ",".join(ff) + "\n") + has_run = True + + m.write(os.path.basename(name) + "," + ",".join([str(a.features.get(s)) for s in ff]) + "\n") + m.close() + +def runcand(doplot=False): + + import time + l = os.listdir("BenLike/") + m = open("features.csv","w") + has_run = False + for f in l: + if f.find(".xml") != -1: + fname = "BenLike/" + f + print("working on", f) + x0,y,dy, name = _load_dotastro_data(fname) + a = ebfeature(t=x0,m=y,merr=dy,name=name) + a.gen_orbital_period(doplot=doplot) + if doplot: + plt.draw() + if not has_run: + ff = a.features.keys() + ff.remove("run") + ff.remove("p_pulse_initial") + m.write("name," + ",".join(ff) + "\n") + has_run = True + + m.write(os.path.basename(name) + "," + ",".join([str(a.features.get(s)) for s in ff]) + "\n") + time.sleep(1) + m.close() + + +def test(): + + """This is a test to show how to Ben's input files (t, m, merr)""" + x0,y,dy, name = _load_ben_data() + import pdb; pdb.set_trace() + print() + a = ebfeature(t=x0,m=y,merr=dy,fix_initial_period=True,initial_period=0.4422664540092584,name=name) + a.gen_orbital_period(doplot=True) + print(a.features) + +def test2(): + + """This is a test to show how to use doastro xml files""" + x0,y,dy, name = _load_dotastro_data() + + # note: if you already know the pulsational period, see test() above for + # ebfeature instantiation + a = ebfeature(t=x0,m=y,merr=dy,name=name) + a.gen_orbital_period(doplot=True) + print(a.features) + +if __name__ == '__main__': + ### this section is just for testing + # using t, m, merr: + test() + import pdb; pdb.set_trace() + print() + + ### using xml file: + test2() + diff --git a/mltsp/TCP/Algorithms/EclFeatures/lc0.dat b/mltsp/TCP/Algorithms/EclFeatures/lc0.dat new file mode 100755 index 00000000..b6a40d64 --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/lc0.dat @@ -0,0 +1,468 @@ +0.000000 -0.048767 0.034822 +0.994680 -0.006066 0.033911 +2.002520 -0.062008 0.035628 +4.005070 -0.002077 0.034710 +5.016330 -0.030598 0.033772 +6.009840 -0.099366 0.037445 +7.004930 1.651908 0.044109 +7.994770 -0.059368 0.034625 +9.010220 0.006933 0.033782 +9.994400 -0.061989 0.037630 +10.979140 -0.014092 0.036067 +11.979850 0.011625 0.034581 +12.978820 -0.009659 0.033772 +15.958130 -0.000854 0.034601 +16.970690 -0.089331 0.033782 +17.972050 -0.056504 0.037925 +18.958460 0.039396 0.035469 +19.962360 -0.061524 0.034418 +20.961390 -0.006580 0.033806 +30.938720 0.048620 0.034822 +31.948000 -0.039440 0.033971 +33.923350 0.021304 0.037553 +34.942200 0.026374 0.034820 +35.925090 -0.029639 0.034013 +36.927320 0.029565 0.034705 +38.932220 -0.041173 0.034791 +39.924420 0.032198 0.033826 +44.898900 -0.047505 0.035378 +45.917200 -0.029870 0.036097 +46.916680 0.001050 0.034601 +49.896090 -0.027678 0.036144 +50.904820 1.439998 0.043949 +53.901630 -0.007365 0.035346 +54.894720 -0.018929 0.034461 +56.897400 0.002065 0.037900 +57.889220 -0.046682 0.035157 +60.888360 -0.026498 0.037793 +61.886390 0.033937 0.034881 +63.878410 -0.042786 0.033924 +64.877870 0.029896 0.037639 +65.870560 -0.064306 0.034851 +66.822840 -0.025229 0.034563 +68.860720 -0.001134 0.037589 +70.847730 -0.045720 0.034219 +72.849210 0.041703 0.037065 +76.842580 -0.094771 0.037057 +78.844010 -0.025557 0.033825 +80.834050 -0.014733 0.036751 +81.838460 -0.038310 0.034753 +83.828860 -0.050594 0.036168 +89.805900 0.004879 0.034699 +94.801620 1.238030 0.043885 +96.788150 -0.131361 0.035761 +261.151620 0.039015 0.034487 +263.157800 -0.011652 0.034805 +265.158590 -0.071866 0.036219 +275.165790 -0.053729 0.034306 +299.063660 -0.029244 0.034139 +300.147510 0.015379 0.037871 +303.098400 -0.011630 0.033772 +305.078560 0.012643 0.036299 +316.086530 0.003618 0.037607 +321.096350 -0.035684 0.034799 +325.031290 0.004666 0.034916 +326.132080 -0.046387 0.033839 +328.083480 -0.061897 0.036079 +330.026080 -0.017809 0.034090 +333.051770 0.008076 0.034703 +346.978750 -0.063341 0.036290 +356.020560 -0.031262 0.034822 +358.958220 -0.086115 0.037926 +367.005010 -0.128206 0.036011 +372.994490 -0.060510 0.033781 +677.048670 -0.063456 0.035519 +690.067260 -0.038444 0.033782 +692.057650 0.032091 0.036408 +694.049960 -0.067547 0.033779 +752.999130 0.762164 0.033788 +754.955950 0.027978 0.034810 +756.939190 0.008223 0.034861 +759.924710 0.008898 0.033895 +763.050520 0.007597 0.033773 +766.909130 0.062369 0.034748 +770.922190 -0.041474 0.034469 +772.931760 -0.094723 0.037852 +774.941360 0.126368 0.033822 +776.927740 -0.008917 0.037606 +781.882370 0.013731 0.035075 +785.891880 0.025243 0.034816 +790.936970 -0.068619 0.033783 +792.934120 -0.010570 0.035185 +796.923310 0.374937 0.033879 +798.922770 -0.041978 0.033905 +800.912160 -0.004783 0.034887 +802.911250 0.011847 0.034015 +804.905710 -0.040605 0.034819 +806.893460 -0.012742 0.034048 +808.875180 0.012490 0.034867 +810.865330 -0.080500 0.033920 +812.857080 0.005734 0.034856 +816.928800 -0.119442 0.034398 +820.906080 -0.015607 0.034418 +822.891020 -0.073566 0.037926 +824.903390 -0.048629 0.034297 +828.897420 -0.024713 0.034150 +830.887760 -0.035003 0.037529 +832.885720 -0.053570 0.034048 +836.873600 0.002603 0.033954 +838.871710 -0.049889 0.036925 +840.855950 0.219903 0.034100 +842.852960 0.023415 0.036901 +844.865080 -0.024020 0.033776 +846.881630 -0.022924 0.035432 +850.792910 0.049605 0.037454 +854.835320 -0.006286 0.035655 +856.831990 -0.013790 0.033779 +858.825530 -0.047273 0.035352 +860.823500 -0.043817 0.033803 +864.811300 -0.062420 0.033835 +866.806790 0.011268 0.034921 +868.798570 0.006185 0.033884 +870.821130 -0.044023 0.034822 +872.796240 0.024829 0.034167 +883.786910 0.101098 0.033836 +886.782470 -0.081918 0.034577 +888.779280 -0.037276 0.037720 +891.758860 -0.010769 0.033772 +893.759950 -0.014924 0.035489 +895.748950 0.010448 0.033777 +901.737420 0.006906 0.035055 +907.725200 0.050905 0.033966 +914.727530 -0.005807 0.033820 +916.733840 0.024926 0.036256 +918.733690 0.012273 0.033772 +925.720510 -0.022379 0.034434 +991.169130 -0.032086 0.034480 +1016.132130 1.005964 0.037025 +1025.112820 -0.070711 0.035493 +1028.102930 -0.071499 0.037926 +1031.123830 -0.002987 0.034079 +1035.135160 -0.014592 0.035573 +1038.092400 0.065044 0.033807 +1042.099930 -0.003904 0.033822 +1044.110140 -0.013126 0.036142 +1055.082470 0.021726 0.037927 +1066.061410 -0.008210 0.034050 +1071.106060 -0.071578 0.035570 +1077.994650 -0.025948 0.033927 +1079.032380 0.030209 0.036639 +1080.064470 -0.005372 0.034481 +1088.037810 0.014697 0.034398 +1094.006670 -0.051403 0.037921 +1096.062060 0.013779 0.033796 +1098.997200 0.021995 0.034912 +1102.042240 -0.088302 0.036288 +1105.034560 -0.086567 0.037105 +1106.966500 0.004152 0.034841 +1108.004320 0.027457 0.033793 +1108.973260 -0.017751 0.034393 +1110.986280 -0.011013 0.034785 +1115.946580 0.009485 0.033918 +1117.994740 -0.020218 0.035314 +1120.036240 -0.026805 0.034678 +1122.931710 -0.029290 0.034759 +1127.036220 0.020810 0.033773 +1132.946910 -0.001828 0.037702 +1136.953170 0.034377 0.037085 +1138.961380 0.016045 0.033798 +1145.056240 -0.028657 0.034666 +1148.851820 -0.127735 0.037902 +1154.905150 0.025787 0.033772 +1157.024200 -0.039555 0.034444 +1167.954060 -0.047386 0.035838 +1174.891770 -0.029516 0.035614 +1176.922330 -0.021601 0.034470 +1179.895580 -0.063744 0.035827 +1181.992480 -0.164223 0.037310 +1184.874110 -0.042551 0.034539 +1188.980500 -0.022541 0.033791 +1191.835840 0.210223 0.034242 +1195.890240 0.057924 0.034820 +1198.902030 -0.049475 0.036180 +1202.945890 0.014978 0.034818 +1205.860950 -0.032240 0.036412 +1207.887710 -0.100650 0.034425 +1209.893750 -0.041500 0.037816 +1211.901130 -0.062833 0.034133 +1218.753060 0.031729 0.037573 +1222.798420 0.029267 0.035727 +1228.825180 -0.029690 0.034314 +1236.856990 -0.103627 0.037925 +1238.857220 -0.014733 0.034354 +1240.862290 -0.013647 0.037656 +1243.748230 -0.035458 0.034082 +1245.777330 -0.009591 0.036329 +1247.805840 -0.038148 0.033801 +1253.745290 -0.066154 0.036108 +1255.788860 0.014443 0.033971 +1258.760900 -0.099508 0.034341 +1260.777850 -0.024034 0.037346 +1265.773550 -0.016614 0.034809 +1277.705560 -0.046403 0.034822 +1285.720790 -0.029082 0.034463 +1294.702930 -0.022791 0.033905 +1404.127410 -0.015641 0.035729 +1486.941290 -0.095970 0.034543 +1489.940540 -0.028395 0.035311 +1493.951600 -0.049222 0.034830 +1497.011830 -0.012573 0.035457 +1518.026280 -0.072399 0.033790 +1520.012480 -0.008162 0.035173 +1522.848090 0.016347 0.033798 +1525.949110 -0.060865 0.033784 +1530.057910 -0.002993 0.037417 +1535.895080 -0.036457 0.036585 +1537.893960 -0.034607 0.033778 +1539.902360 -0.072435 0.035753 +1541.959850 0.222500 0.033771 +1544.818300 -0.046055 0.034817 +1546.826220 -0.048992 0.034858 +1550.840600 -0.107885 0.037216 +1556.893240 -0.027867 0.033850 +1558.903530 -0.051559 0.036273 +1562.890120 -0.048628 0.036080 +1564.883130 0.041377 0.033773 +1567.889340 0.023433 0.034444 +1570.879370 -0.035291 0.035201 +1573.881420 0.009599 0.037778 +1575.874510 -0.015038 0.034265 +1586.861060 0.004022 0.034733 +1588.876310 -0.069649 0.037262 +1590.870340 -0.041952 0.034573 +1592.878270 -0.097176 0.037928 +1595.782500 -0.076194 0.034201 +1597.810210 -0.022984 0.036645 +1602.825440 -0.051340 0.034463 +1604.821380 -0.063589 0.037927 +1607.763420 0.095340 0.033776 +1609.795820 -0.003043 0.035278 +1611.817690 -0.040405 0.034051 +1621.751850 -0.015636 0.034962 +1628.746740 0.041610 0.037253 +1633.780460 0.041867 0.034489 +1642.732690 -0.099584 0.033774 +1651.712540 0.042645 0.037669 +1654.715190 0.022669 0.034008 +1659.709740 0.052162 0.037135 +1724.172230 -0.002119 0.034711 +1735.163420 -0.069076 0.033773 +1757.155590 -0.067436 0.034636 +1771.115220 -0.057397 0.037923 +1775.093200 -0.106309 0.037927 +1779.126680 -0.013242 0.036995 +1783.066660 -0.045035 0.037856 +1787.036330 0.003090 0.037924 +1790.036610 -0.005785 0.033867 +1793.091360 0.023700 0.033772 +1801.079130 -0.039974 0.033797 +1804.098470 -0.028771 0.034092 +1807.062050 0.031801 0.034951 +1812.064270 -0.033262 0.034027 +1832.991980 -0.103241 0.036251 +1835.984760 0.010762 0.033775 +1838.974890 0.007664 0.034635 +1844.994060 0.029292 0.037721 +1850.007140 0.074444 0.034254 +1852.928760 -0.069030 0.037926 +1855.959450 0.004880 0.034353 +1858.082250 0.020779 0.033813 +1861.927940 -0.086641 0.034816 +1864.964410 -0.011448 0.035866 +1867.950620 -0.093795 0.037488 +1870.879420 -0.005897 0.034085 +1872.959280 -0.032355 0.034957 +1875.927090 -0.080425 0.037927 +1878.045900 0.014496 0.033855 +1883.033190 0.005253 0.037643 +1887.986400 -0.012397 0.035145 +1890.064350 -0.064019 0.037508 +1892.914000 0.120741 0.034250 +1895.000310 0.011102 0.036997 +1897.876710 -0.019355 0.033880 +1902.827710 -0.046498 0.034031 +1906.931480 0.002552 0.037268 +1911.002770 0.022257 0.034862 +1914.858650 -0.064018 0.037776 +1920.930400 -0.035375 0.033790 +1925.887810 -0.050508 0.037504 +1927.908070 -0.042997 0.034351 +1929.963310 0.002059 0.036315 +1934.879640 -0.043763 0.034915 +1936.902950 0.439324 0.034439 +1941.931220 0.028032 0.035463 +1946.829230 0.021555 0.034843 +1948.862100 -0.058180 0.035979 +1950.883390 -0.006161 0.034502 +1953.811420 0.060852 0.037275 +1955.850100 0.061869 0.033772 +1957.850360 -0.094475 0.035539 +1959.860250 -0.009985 0.033817 +1962.769790 0.022117 0.034820 +1964.800830 -0.101008 0.037174 +1966.811570 0.020304 0.034455 +1968.823080 -0.026131 0.037804 +1979.771510 -0.050398 0.033890 +1981.809340 -0.019586 0.034778 +1991.762290 -0.091730 0.036009 +1993.760560 0.016643 0.034703 +2001.728960 -0.017711 0.034633 +2003.754380 -0.034003 0.037885 +2012.709440 -0.007301 0.035058 +2022.710410 -0.046409 0.035236 +2115.122630 -0.059792 0.034200 +2221.945770 -0.060179 0.034725 +2234.977760 -0.011857 0.034230 +2240.888250 -0.072668 0.035940 +2259.975050 -0.047664 0.034822 +2268.841170 -0.027937 0.034770 +2270.855200 -0.076635 0.037500 +2272.883120 -0.043279 0.034290 +2274.907830 -0.033392 0.036969 +2276.983990 -0.021857 0.034018 +2277.013460 -0.012776 0.035243 +2282.871590 0.013481 0.036887 +2284.873110 -0.011454 0.033796 +2286.884630 -0.055108 0.035916 +2288.991020 -0.077691 0.037624 +2290.931830 -0.079187 0.034820 +2292.926810 -0.083836 0.034738 +2294.939980 -0.058545 0.034734 +2303.844880 -0.043904 0.034260 +2305.855320 0.056912 0.037270 +2310.897680 -0.058351 0.034434 +2312.914100 -0.028393 0.037675 +2315.770540 -0.044197 0.034384 +2319.819400 -0.120304 0.033779 +2321.818930 0.006047 0.036068 +2325.875430 0.019914 0.034822 +2328.865120 0.037902 0.036946 +2331.838130 0.776546 0.037862 +2334.840760 0.005883 0.033838 +2347.752920 -0.021755 0.034155 +2358.751950 0.003238 0.033772 +2360.771530 -0.023725 0.035084 +2362.779650 0.019223 0.033956 +2365.738800 -0.031428 0.034433 +2378.729200 -0.056895 0.034895 +2387.712780 0.019431 0.036188 +2479.136090 -0.033405 0.035755 +2479.149550 -0.037968 0.036754 +2490.130800 -0.071391 0.033801 +2509.104390 -0.052701 0.033789 +2513.097410 -0.024065 0.033773 +2515.092670 -0.061861 0.035956 +2535.083550 -0.019788 0.034781 +2542.044640 0.007653 0.036743 +2555.036710 0.036009 0.034382 +2559.012180 -0.026733 0.034413 +2561.994350 -0.050802 0.035283 +2564.984530 -0.009393 0.037917 +2567.968940 -0.001879 0.033799 +2570.975240 0.020280 0.034243 +2579.944720 -0.013686 0.034215 +2585.065480 0.043808 0.034742 +2592.942990 -0.022566 0.035582 +2595.035470 0.516244 0.033856 +2597.940080 -0.001653 0.034358 +2600.918360 -0.021186 0.035165 +2606.901910 -0.001897 0.033867 +2612.046590 -0.002619 0.034719 +2615.908870 -0.042556 0.036579 +2622.848080 -0.026244 0.034330 +2624.903620 -0.036449 0.034453 +2630.893730 0.042638 0.037824 +2633.003670 -0.018921 0.033950 +2635.896200 0.026162 0.034818 +2637.983800 -0.066571 0.037591 +2640.855970 -0.073272 0.034213 +2642.877700 0.000903 0.036843 +2652.879010 -0.053219 0.033787 +2654.900480 0.006749 0.034828 +2658.944660 -0.045581 0.034556 +2661.863140 -0.030132 0.037652 +2663.921230 -0.002207 0.033772 +2667.790170 -0.035651 0.034555 +2669.854690 0.007672 0.036877 +2671.862620 0.003937 0.033780 +2677.896460 0.052658 0.034835 +2682.861200 0.883541 0.039740 +2686.884550 0.052835 0.033838 +2691.798130 -0.057614 0.033786 +2696.752530 -0.092377 0.037256 +2698.790470 -0.033782 0.034239 +2700.810540 -0.027492 0.036953 +2702.826870 0.046268 0.033774 +2707.761600 -0.075778 0.034277 +2716.733990 -0.015045 0.036902 +2719.751580 -0.171168 0.037322 +2721.780950 -0.010396 0.034309 +2724.743610 0.016587 0.035416 +2728.774430 -0.000737 0.034820 +2731.768990 -0.012118 0.036958 +2740.737880 -0.004157 0.034777 +2749.710580 -0.070898 0.033772 +2754.703300 -0.059531 0.037905 +2823.171050 -0.049901 0.033875 +2833.163990 -0.011554 0.034810 +2837.159610 0.000029 0.034578 +2841.158580 -0.013731 0.034554 +2853.124790 -0.027991 0.034377 +2858.113380 0.202281 0.033815 +2858.127440 0.184134 0.033777 +2861.142540 -0.002390 0.033809 +2873.092320 -0.001873 0.033782 +2873.103800 -0.024782 0.033772 +2881.099790 0.032246 0.033776 +2884.097700 0.019399 0.034262 +2884.101910 -0.036263 0.034217 +2888.069810 0.004545 0.034334 +2892.053000 0.033189 0.034312 +2896.053700 -0.049209 0.034086 +2899.089510 0.038184 0.034607 +2903.067620 -0.002272 0.034563 +2905.057040 -0.084994 0.037097 +2906.103170 0.022608 0.034849 +2908.045330 -0.017976 0.033772 +2911.021980 0.005429 0.034688 +2914.062400 -0.002718 0.034859 +2918.051300 -0.059978 0.034821 +2918.075110 -0.003673 0.034819 +2924.015360 0.105895 0.033769 +2929.997040 0.013043 0.034816 +2935.974550 -0.059446 0.034411 +2938.953480 -0.058686 0.034086 +2941.020590 -0.034401 0.035173 +2941.039430 0.000720 0.034869 +2946.967140 0.030351 0.033769 +2949.991320 -0.013290 0.034299 +2955.054670 -0.051037 0.037924 +2957.993340 -0.022934 0.033840 +2960.935820 0.008753 0.034927 +2973.925690 -0.034119 0.033789 +2979.003260 -0.040577 0.036748 +2979.051290 -0.016157 0.035280 +2989.066900 -0.043069 0.035614 +2994.932240 -0.011871 0.036538 +3010.894890 0.018637 0.035268 +3012.940600 -0.021848 0.035014 +3015.887060 -0.048275 0.034315 +3023.924830 0.028330 0.033772 +3047.886870 -0.026930 0.035510 +3050.831720 -0.005800 0.034264 +3057.751080 -0.118861 0.036020 +3079.820160 -0.006433 0.037288 +3091.746670 -0.026210 0.037633 +3201.170780 -0.001597 0.034492 +3218.112830 -0.045842 0.033861 +3219.126140 0.000649 0.037483 +3231.090850 0.081469 0.036632 +3250.094280 -0.010960 0.037243 +3255.063720 0.005262 0.034816 +3276.086250 -0.051725 0.034820 +3286.068290 -0.057241 0.034644 +3286.094340 -0.030780 0.034433 +3294.045830 -0.030237 0.034498 +3295.981170 -0.022049 0.034498 +3297.014830 0.533276 0.033818 +3300.001940 -0.110457 0.037177 diff --git a/mltsp/TCP/Algorithms/EclFeatures/numc_eigs.py b/mltsp/TCP/Algorithms/EclFeatures/numc_eigs.py new file mode 100644 index 00000000..a1d0078e --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/numc_eigs.py @@ -0,0 +1,143 @@ +pythag_code = """ +inline double SQR(double a) { + return (a == 0.0 ? 0.0 : a*a); +} + +inline double SIGN(double a,double b) { + return ((b) >= 0.0 ? fabs(a) : -fabs(a)); +} + +double pythag(double a, double b) { + double absa,absb; + absa=fabs(a); + absb=fabs(b); + if (absa > absb) return absa*sqrt(1.0+SQR(absb/absa)); + else return (absb == 0.0 ? 0.0 : absb*sqrt(1.0+SQR(absa/absb))); +} +""" +tred2_code = """ +inline void tred2(double a[], int n, double d[], double e[]) { + int l,k,j,i; + double scale,hh,h,g,f; + + for (i=n-1;i>=1;i--) { + l=i-1; + h=scale=0.0; + if (l > 0) { + for (k=0;k<=l;k++) + scale += fabs(a[k+i*n]); + if (scale == 0.0) + e[i]=a[l+i*n]; + else { + for (k=0;k<=l;k++) { + a[k+i*n] /= scale; + h += a[k+i*n]*a[k+i*n]; + } + f=a[l+i*n]; + g=(f >= 0.0 ? -sqrt(h) : sqrt(h)); + e[i]=scale*g; + h -= f*g; + a[l+i*n]=f-g; + f=0.0; + for (j=0;j<=l;j++) { + a[i+j*n]=a[j+i*n]/h; + g=0.0; + for (k=0;k<=j;k++) + g += a[k+j*n]*a[k+i*n]; + for (k=j+1;k<=l;k++) + g += a[j+k*n]*a[k+i*n]; + e[j]=g/h; + f += e[j]*a[j+i*n]; + } + hh=f/(h+h); + for (j=0;j<=l;j++) { + f=a[j+i*n]; + e[j]=g=e[j]-hh*f; + for (k=0;k<=j;k++) + a[k+j*n] -= (f*e[k]+g*a[k+i*n]); + } + } + } else + e[i]=a[l+i*n]; + d[i]=h; + } + d[0]=0.0; + e[0]=0.0; + for (i=0;i=l;i--) { + f=s*e[i]; + b=c*e[i]; + e[i+1]=(r=pythag(f,g)); + if (r == 0.0) { + d[i+1] -= p; + e[m]=0.0; + break; + } + s=f/r; + c=g/r; + g=d[i+1]-p; + r=(d[i]-g)*s+2.0*c*b; + d[i+1]=g+(p=s*r); + g=c*r-b; + for (k=0;k= l) continue; + d[l] -= p; + e[l]=g; + e[m]=0.0; + } + } while (m != l); + } +} +""" + +scode = pythag_code + tred2_code + tqli_code +scode += """ +inline void get_eigs(int np,double x[],double d[]) { + double e[np]; + tred2(x,np,d,e); + tqli(d,e,np,x); +} +""" diff --git a/mltsp/TCP/Algorithms/EclFeatures/polyfit.c b/mltsp/TCP/Algorithms/EclFeatures/polyfit.c new file mode 100755 index 00000000..c1567b53 --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/polyfit.c @@ -0,0 +1,963 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +void *phoebe_malloc (size_t size); +/* #include */ +#include "polyfit.h" + +#define DEBUG 0 +#define LCPOINTS 400 + +void *phoebe_malloc (size_t size) +{ + /** + * phoebe_malloc: + * + * Allocates the space with the check whether the memory was exhausted. + */ + register void *value = malloc (size); + if (value == 0) + { + printf ("Virtual memory exhauseted.\n"); + exit (-1); + } + return value; +} + + +polyfit_options *polyfit_options_default () +{ + polyfit_options *options = phoebe_malloc (sizeof (*options)); + + options->polyorder = 2; + options->iters = 10000; + options->step_size = 0.001; + options->knots = 4; + options->find_knots = FALSE; + options->find_step = TRUE; + options->chain_length = 10; + options->ann_compat = FALSE; + + return options; +} + +int polyfit_options_free (polyfit_options *options) +{ + free (options); + + return SUCCESS; +} + +polyfit_solution *polyfit_solution_init (polyfit_options *options) +{ + polyfit_solution *solution = phoebe_malloc (sizeof (*solution)); + int k; + + solution->knots = phoebe_malloc (options->knots * sizeof (*(solution->knots))); + + solution->ck = phoebe_malloc (options->knots * sizeof (*(solution->ck))); + for (k = 0; k < options->knots; k++) + solution->ck[k] = phoebe_malloc ((options->polyorder+1) * sizeof (**(solution->ck))); + + solution->npts = phoebe_malloc (options->knots * sizeof (*(solution->npts))); + + return solution; +} + +int polyfit_solution_free (polyfit_solution *solution, polyfit_options *options) +{ + int k; + + free (solution->knots); + for (k = 0; k < options->knots; k++) + free (solution->ck[k]); + free (solution->ck); + free (solution); + + return SUCCESS; +} + +/* Maximum number of observed data points: */ +#define NMAX 10000 + +int polyfit_sort_by_phase (const void *a, const void *b) +{ + const polyfit_triplet *da = (const polyfit_triplet *) a; + const polyfit_triplet *db = (const polyfit_triplet *) b; + + return (da->x > db->x) - (da->x < db->x); +} + +int polyfit_sort_by_value (const void *a, const void *b) +{ + const double *da = (const double *) a; + const double *db = (const double *) b; + + return (*da > *db) - (*da < *db); +} + +int polyfit_find_knots (polyfit_triplet *data, int nobs, double **knots, polyfit_options *options) +{ + int i, j; + double average = 0.0; + int chain_too_short; + int chain_wrapped = 0; + + int chains = 0; + struct { + int len; + int start; + int end; + } chain[2]; + + for (i = 0; i < nobs; i++) + average += data[i].y; + average /= (double) nobs; + + if (!options->ann_compat) { + printf ("# searching for knots automatically:\n"); + printf ("# * average value of the flux: %lf\n", average); + } + + /* To allow wrapping of the phase interval, skip the first chain: */ + i = 0; + while (data[i].y < average) { + if (DEBUG) + printf ("# delaying point %8.4lf (%3d): %lf < %lf\n", data[i].x, i, data[i].y, average); + i++; + } + + for ( ; i < nobs; i++) { + if (data[i].y > average) { + if (DEBUG) + printf ("# skipping point %8.4lf (%3d): %lf > %lf\n", data[i].x, i, data[i].y, average); + continue; + } + + /* Check if the chain is at least CHAIN_LENGTH long: */ + chain_too_short = 0; + if (DEBUG) + printf ("# chain starts at %8.4lf (%3d): %lf < %lf\n", data[i].x, i, data[i].y, average); + for (j = 1; j < options->chain_length; j++) { + if (i+j == nobs) { + i = -j; + chain_wrapped = 1; + } + if (data[i+j].y > average) { + if (DEBUG) + printf ("# chain broken at %8.4lf (%3d): %lf > %lf\n", data[i+j].x, i+j, data[i+j].y, average); + i += j; + chain_too_short = 1; + break; + } + else + if (DEBUG) + printf ("# chain cont'd at %8.4lf (%3d): %lf < %lf\n", data[i+j].x, i+j, data[i+j].y, average); + } + + if (chain_wrapped && chain_too_short) break; + if (chain_too_short) continue; + + while (data[i+j].y < average) { + if (i+j == nobs) { + i = -j; + chain_wrapped = 1; + } + if (DEBUG) + printf ("# chain cont'd at %8.4lf (%3d): %lf < %lf\n", data[i+j].x, i+j, data[i+j].y, average); + j++; + } + + if (chains < 2) { + chains++; + chain[chains-1].len = j-1; + chain[chains-1].start = chain_wrapped*nobs + i; + chain[chains-1].end = i+j-1; + } + else { + chains++; /* Just to count all chains */ + if (j-1 > chain[0].len) { + if (chain[0].len > chain[1].len) { + chain[1].len = chain[0].len; + chain[1].start = chain[0].start; + chain[1].end = chain[0].end; + } + chain[0].len = j-1; + chain[0].start = chain_wrapped*nobs + i; + chain[0].end = i+j-1; + } + else if (j-1 > chain[1].len) { + chain[1].len = j-1; + chain[1].start = chain_wrapped*nobs + i; + chain[1].end = i+j-1; + } + /* else drop through without recording it because it is shorter. */ + } + + if (!options->ann_compat) + printf ("# * found a chain from %lf (index %d/%d) to %lf (index %d/%d)\n", data[chain_wrapped*nobs+i].x, chain_wrapped*nobs+i, nobs-1, data[i+j-1].x, i+j-1, nobs-1); + i += j-1; + if (chain_wrapped) break; + } + + if (!options->ann_compat) + printf ("# * total number of chains found: %d\n", chains); + + /* If the number of chains is less than 2, the search for knots failed. */ + if (chains < 2) + return -1; + + options->knots = 4; + *knots = malloc (options->knots * sizeof (**knots)); + (*knots)[0] = data[chain[0].start].x; (*knots)[1] = data[chain[0].end].x; + (*knots)[2] = data[chain[1].start].x; (*knots)[3] = data[chain[1].end].x; + + return 0; +} + +int polyfit (polyfit_solution *result, polyfit_triplet *data, int nobs, double *knots, int PRINT, polyfit_options *options) +{ + int i, j, k, intervals, kfinal, cum, int1index; + double chisq, chi2tot, knot, dknot; + + gsl_vector **x, **y, **w, **c; + gsl_matrix **A, **cov; + gsl_multifit_linear_workspace **mw; + + for (k = 0; k < options->knots; k++) { + result->knots[k] = knots[k]; + result->npts[k] = 0; + } + + /* Fast-forward to the first knot: */ + i = 0; cum = 0; + while (data[i].x < knots[0]) { i++; cum++; } + result->npts[options->knots-1] = i; + int1index = cum; + + for (j = 0; j < options->knots-1; j++) { + while (data[i].x < knots[j+1] && i < nobs) i++; + result->npts[j] += i-cum; /* we need += because of the wrapped interval */ + if (result->npts[j] <= options->polyorder) { + /* The intervals between knots don't have enough points; bail out. */ + result->chi2 = 1e10; + return -1; + } + cum += result->npts[j]; + } + + /* Add post-last knot data to the last interval: */ + result->npts[j] += nobs-cum; + if (result->npts[j] <= options->polyorder) { + /* The intervals between knots don't have enough points; bail out. */ + result->chi2 = 1e10; + return -1; + } + + /* Allocate arrays of vectors of interval data: */ + x = malloc (options->knots * sizeof (*x)); + y = malloc (options->knots * sizeof (*y)); + w = malloc (options->knots * sizeof (*w)); + + for (j = 0; j < options->knots; j++) { + x[j] = gsl_vector_alloc (result->npts[j]); + y[j] = gsl_vector_alloc (result->npts[j]); + w[j] = gsl_vector_alloc (result->npts[j]); + } + + /* Copy the (phase-shifted) data to these vectors: */ + cum = 0; + for (j = 0; j < options->knots-1; j++) { + for (i = 0; i < result->npts[j]; i++) { + gsl_vector_set (x[j], i, data[int1index+cum+i].x - knots[j]); + gsl_vector_set (y[j], i, data[int1index+cum+i].y); + gsl_vector_set (w[j], i, data[int1index+cum+i].z); + if (DEBUG) + printf ("%d: %lf\t%lf\t%lf\n", j, data[int1index+cum+i].x - knots[j], data[int1index+cum+i].y, data[int1index+cum+i].z); + } + cum += result->npts[j]; + } + + /* Copy the wrapped interval data to these vectors: */ + knot = knots[j]; + for (i = 0; i < result->npts[j]; i++) { + if (int1index+cum+i == nobs) { + cum = -int1index-i; + knot -= 1.0; + } + gsl_vector_set (x[j], i, data[int1index+cum+i].x - knot); + gsl_vector_set (y[j], i, data[int1index+cum+i].y); + gsl_vector_set (w[j], i, data[int1index+cum+i].z); + if (DEBUG) + printf ("%d: %lf\t%lf\t%lf\n", j, data[int1index+cum+i].x - knot, data[int1index+cum+i].y, data[int1index+cum+i].z); + } + + /* If polynomial order is 1, the last interval is determined by constraints: */ + if (options->polyorder == 1) intervals = options->knots-1; else intervals = options->knots; + + /* Allocate all vectors and matrices: */ + A = malloc (intervals * sizeof (*A)); + c = malloc (intervals * sizeof (*c)); + cov = malloc (intervals * sizeof (*cov)); + mw = malloc (intervals * sizeof (*mw)); + + /* The first interval has all polynomial coefficients free. */ + A[0] = gsl_matrix_alloc (result->npts[0], options->polyorder+1); + c[0] = gsl_vector_alloc (options->polyorder+1); + cov[0] = gsl_matrix_alloc (options->polyorder+1, options->polyorder+1); + mw[0] = gsl_multifit_linear_alloc (result->npts[0], options->polyorder+1); + + /* Intervals 1...(N-1) are constrained by the connectivity constraint. */ + for (j = 1; j < options->knots-1; j++) { + A[j] = gsl_matrix_alloc (result->npts[j], options->polyorder); + c[j] = gsl_vector_alloc (options->polyorder); + cov[j] = gsl_matrix_alloc (options->polyorder, options->polyorder); + mw[j] = gsl_multifit_linear_alloc (result->npts[j], options->polyorder); + } + + /* The last interval has two constraints (connectivity and periodicity). */ + if (j < intervals) { + A[j] = gsl_matrix_alloc (result->npts[j], options->polyorder-1); + c[j] = gsl_vector_alloc (options->polyorder-1); + cov[j] = gsl_matrix_alloc (options->polyorder-1, options->polyorder-1); + mw[j] = gsl_multifit_linear_alloc (result->npts[j], options->polyorder-1); + } + + /* Set all elements to all matrices: */ + for (j = 0; j < intervals; j++) { + if (j == 0) kfinal = options->polyorder+1; + else if (j == options->knots-1) kfinal = options->polyorder-1; + else kfinal = options->polyorder; + for (i = 0; i < result->npts[j]; i++) + for (k = 0; k < kfinal; k++) + gsl_matrix_set (A[j], i, k, pow (gsl_vector_get (x[j], i), options->polyorder-k)); + } + + /********************* FITTING THE 1ST INTERVAL: **********************/ + + gsl_multifit_wlinear (A[0], w[0], y[0], c[0], cov[0], &chisq, mw[0]); + + for (k = 0; k < options->polyorder+1; k++) + result->ck[0][k] = gsl_vector_get (c[0], k); + chi2tot = chisq; + + /******************** FITTING INTERVALS 2-(N-1): **********************/ + + for (j = 1; j < options->knots-1; j++) { + /* Satisfy the connectivity constraint: */ + result->ck[j][options->polyorder] = result->ck[j-1][options->polyorder]; + for (k = 0; k < options->polyorder; k++) + result->ck[j][options->polyorder] += result->ck[j-1][k] * pow (knots[j]-knots[j-1], options->polyorder-k); + + /* Apply the connectivity constraint: */ + for (i = 0; i < result->npts[j]; i++) + gsl_vector_set (y[j], i, gsl_vector_get (y[j], i) - result->ck[j][options->polyorder]); + + gsl_multifit_wlinear (A[j], w[j], y[j], c[j], cov[j], &chisq, mw[j]); + chi2tot += chisq; + + for (k = 0; k < options->polyorder; k++) + result->ck[j][k] = gsl_vector_get (c[j], k); + } + + /******************** FITTING THE LAST INTERVAL: **********************/ + + /* Satisfy the connectivity constraint: */ + result->ck[j][options->polyorder] = result->ck[j-1][options->polyorder]; + for (k = 0; k < options->polyorder; k++) + result->ck[j][options->polyorder] += result->ck[j-1][k] * pow (knots[j]-knots[j-1], options->polyorder-k); + + /* Satisfy the periodicity constraint: */ + result->ck[j][options->polyorder-1] = (result->ck[0][options->polyorder]-result->ck[j][options->polyorder])/(knots[0]-knots[j]+1.0); + + /* Apply both constraints: */ + for (i = 0; i < result->npts[j]; i++) + gsl_vector_set (y[j], i, gsl_vector_get (y[j], i) - result->ck[j][options->polyorder] - result->ck[j][options->polyorder-1] * gsl_vector_get (x[j], i)); + + if (options->polyorder > 1) { + for (k = 0; k < options->polyorder-1; k++) + for (i = 0; i < result->npts[j]; i++) + gsl_matrix_set (A[j], i, k, gsl_matrix_get (A[j], i, k) - gsl_vector_get (x[j], i) * pow(knots[0]-knots[j]+1, options->polyorder-k-1)); + + gsl_multifit_wlinear (A[j], w[j], y[j], c[j], cov[j], &chisq, mw[j]); + + for (k = 0; k < options->polyorder-1; k++) + result->ck[j][k] = gsl_vector_get (c[j], k); + chi2tot += chisq; + } + else { + /* + * If we are fitting linear polynomials, there's nothing to fit here + * because both knots are constrained (connectivity and periodicity). + * However, we still need to traverse data points to get chi2. + */ + + chisq = 0.0; + for (i = 0; i < result->npts[j]; i++) + chisq += gsl_vector_get (w[j], i) * gsl_vector_get (y[j], i) * gsl_vector_get (y[j], i); + chi2tot += chisq; + } + + result->chi2 = chi2tot; + + /* Done! Wrap it up: */ + for (i = 0; i < options->knots-1; i++) { + gsl_vector_free (x[i]); + gsl_vector_free (y[i]); + gsl_vector_free (w[i]); + } + + free (x); + free (y); + free (w); + + for (i = 0; i < intervals; i++) { + gsl_vector_free (c[i]); + gsl_matrix_free (A[i]); + gsl_matrix_free (cov[i]); + gsl_multifit_linear_free (mw[i]); + } + + free (c); + free (A); + free (cov); + free (mw); + + return SUCCESS; +} + +int polyfit_print (polyfit_solution *result, polyfit_options *options, int VERBOSE, int PRINT_SOLUTION) +{ + int i, j, k; + double knot, dknot; + + if (VERBOSE && !options->ann_compat) { + printf ("# Phase space partitioning:\n# \n"); + for (k = 0; k < options->knots-1; k++) + printf ("# interval %2d: [% 3.3lf, % 3.3lf), %3d data points\n", k, result->knots[k], result->knots[k+1], result->npts[k]); + printf ("# interval %2d: [% 3.3lf, % 3.3lf), %3d data points\n", k, result->knots[k], result->knots[0], result->npts[k]); + } + + /* Write out a header: */ + if (VERBOSE && !options->ann_compat) { + printf ("# \n# Weighted least-squares solution of the polyfit:\n# \n"); + printf ("# knot\t"); + for (k = 0; k < options->polyorder+1; k++) + printf (" c[%d]\t\t", k); + printf ("\n"); + } + + if (VERBOSE) { + if (options->ann_compat) + printf ("%lf\n", result->knots[0]); + else + printf ("# % lf\t", result->knots[0]); + for (k = 0; k < options->polyorder+1; k++) { + if (options->ann_compat) + printf ("%lf\n", result->ck[0][options->polyorder-k]); + else + printf ("% lf\t", result->ck[0][options->polyorder-k]); + } + if (!options->ann_compat) + printf ("\n"); + } + + for (j = 1; j < options->knots-1; j++) { + if (VERBOSE) { + if (options->ann_compat) + printf ("%lf\n", result->knots[j]); + else + printf ("# % lf\t", result->knots[j]); + for (k = 0; k < options->polyorder+1; k++) { + if (options->ann_compat) + printf ("%lf\n", result->ck[j][options->polyorder-k]); + else + printf ("% lf\t", result->ck[j][options->polyorder-k]); + } + if (!options->ann_compat) + printf ("\n"); + } + } + + if (VERBOSE) { + if (options->ann_compat) + printf ("%lf\n", result->knots[j]); + else + printf ("# % lf\t", result->knots[j]); + for (k = 0; k < options->polyorder+1; k++) { + if (options->ann_compat) + printf ("%lf\n", result->ck[j][options->polyorder-k]); + else + printf ("% lf\t", result->ck[j][options->polyorder-k]); + } + if (!options->ann_compat) + printf ("\n"); + } + + if (!options->ann_compat && PRINT_SOLUTION) { + double phase, flux; + printf ("# \n# Theoretical light curve:\n# \n Phase\t Flux\n"); + for (i = 0; i <= LCPOINTS; i++) { + phase = -0.5 + (double) i / (double) LCPOINTS; + flux = polyfit_compute (result, options, phase); + printf (" % lf\t% lf\n", phase, flux); + } + } +} + +double polyfit_compute (polyfit_solution *result, polyfit_options *options, double phase) +{ + int j, k; + double knot, dknot, flux; + + if (phase < result->knots[0]) { + j = options->knots-1; + knot = result->knots[j]-1.0; + dknot = result->knots[0]-result->knots[options->knots-1]+1.0; + } + else if (phase > result->knots[options->knots-1]) { + j = options->knots-1; + knot = result->knots[j]; + dknot = result->knots[0]-result->knots[options->knots-1]+1.0; + } + else { + j = 0; + while (result->knots[j+1] < phase && j < options->knots-1) j++; + knot = result->knots[j]; + dknot = result->knots[j+1]-result->knots[j]; + } + + flux = result->ck[j][options->polyorder]; + for (k = 0; k < options->polyorder; k++) { + flux += result->ck[j][k] * pow (phase-knot, options->polyorder-k); + if (j == options->knots-1 && k < options->polyorder-1) + flux -= result->ck[j][k] * (phase-knot) * pow (dknot, options->polyorder-k-1); + } + + return flux; +} + + + + +int main (int argc, char **argv) +{ + int i, nobs, iter, status; + polyfit_triplet *data; + FILE *in; + double col1, col2, col3, chi2, chi2test, u; + char line[255]; + + double *knots = NULL; + double *test; + + polyfit_options *options; + polyfit_solution *result; + + + gsl_rng *r; + + if (argc < 2) { + printf ("Usage: ./polyfit [options] lc.dat\n\n"); + printf ("File lc.dat can have 1 column (equidistant fluxes), 2 columns (phase and flux),\n"); + printf ("or 3 columns (phase, flux, and standard deviation)\n\n"); + printf ("Options:\n\n"); + printf (" -o order .. fitting polynomial order (default: 2)\n"); + printf (" -i iters .. number of iterations (default: 10000)\n"); + printf (" -s step .. step for random knot displacement (default: 0.01)\n"); + printf (" -k k1 k2 ... kN .. explicit list of knots\n"); + printf (" --find-knots .. attempt to find knots automatically\n"); + printf (" --find-step .. attempt to find step automatically\n"); + printf (" --chain-length .. minimum chain length for automatic knot search\n"); + printf (" --ann-compatible .. make output ANN-compatible\n\n"); + exit (0); + } + + options = polyfit_options_default (); + options->find_knots = FALSE; + + for (i = 1; i < argc; i++) { + if (strcmp (argv[i], "-o") == 0) + options->polyorder = atoi (argv[++i]); + if (strcmp (argv[i], "-i") == 0) + options->iters = atoi (argv[++i]); + if (strcmp (argv[i], "-s") == 0) + options->step_size = atof (argv[++i]); + if (strcmp (argv[i], "-k") == 0) { + double knot; + i++; + options->knots = 0; + while (sscanf (argv[i], "%lf", &knot) == 1) { + options->knots++; + knots = realloc (knots, options->knots * sizeof (*knots)); + knots[options->knots-1] = knot; + i++; + } + i--; + } + if (strcmp (argv[i], "--find-knots") == 0) + options->find_knots = TRUE; + if (strcmp (argv[i], "--find-step") == 0) + options->find_step = 1; + if (strcmp (argv[i], "--chain-length") == 0) + options->chain_length = atoi (argv[++i]); + if (strcmp (argv[i], "--ann-compatible") == 0) + options->ann_compat = 1; + } + + in = fopen (argv[argc-1], "r"); + if (!in) { + printf ("file %s not found, aborting.\n", argv[argc-1]); + exit (0); + } + + /* Read the input data: */ + + data = malloc (NMAX * sizeof (*data)); + i = 0; + while (!feof (in)) { + if (!fgets (line, 255, in)) break; + if (feof (in)) break; + if (line[0] == '\n') break; + if (1 <= (status = sscanf (line, "%lf\t%lf\t%lf\n", &col1, &col2, &col3))) { + switch (status) { + case 1: + data[i].x = -0.5 + (double) i / (double) LCPOINTS; + data[i].y = col1; + data[i].z = 1.0; + break; + case 2: + data[i].x = col1; + data[i].y = col2; + data[i].z = 1.0; + break; + case 3: + data[i].x = col1; + data[i].y = col2; + data[i].z = 1e-3/col3/col3; + break; + default: + + /* can't ever get here */ + + break; + } + i++; + } + } + fclose (in); + nobs = i; + + if (!options->ann_compat) + printf ("# %d data points read in from %s.\n# \n", nobs, argv[argc-1]); + + /* Sort the data by phase: */ + + qsort (data, nobs, sizeof (*data), polyfit_sort_by_phase); + + if (options->find_knots) { + status = polyfit_find_knots (data, nobs, &knots, options); + if (!options->ann_compat) { + if (status != 0) + printf ("# * automatic search for knots failed, reverting to defaults.\n"); + else + printf ("# * automatic search for knots successful.\n"); + printf ("# \n"); + } + } + + /* The initial phase intervals for knots: */ + + if (!knots) { + knots = malloc (options->knots * sizeof (*knots)); + knots[0] = -0.4; knots[1] = -0.1; knots[2] = 0.2; knots[3] = 0.4; + /* knots[4] = 0.45; + knots[5] = 0.48; */ + } + + /* Sort the knots in ascending order: */ + qsort (knots, options->knots, sizeof (*knots), polyfit_sort_by_value); + + if (options->find_step) { + double diff; + /* Step size would be the minimum width between two knots / 5: */ + diff = fabs (knots[1]-knots[0]); + for (i = 1; i < options->knots-1; i++) + if (fabs (knots[i+1]-knots[i]) < diff) + diff = fabs (knots[i+1]-knots[i]); + if (fabs (knots[i+1]-knots[0]) < diff) + diff = fabs (knots[i+1]-knots[0]); + + options->step_size = diff / 5.0; + } + + if (!options->ann_compat) { + printf ("# Fitting polynomial order: %d\n", options->polyorder); + printf ("# Initial set of knots: {"); + for (i = 0; i < options->knots-1; i++) + printf ("%lf, ", knots[i]); + printf ("%lf}\n", knots[i]); + printf ("# Number of iterations for knot search: %d\n", options->iters); + printf ("# Step size for knot search: %lf\n# \n", options->step_size); + } + + r = gsl_rng_alloc (gsl_rng_mt19937); + gsl_rng_set (r, 1); + + result = polyfit_solution_init (options); + polyfit (result, data, nobs, knots, 0, options); + chi2 = result->chi2; + + if (!options->ann_compat) + printf ("# Original chi2: %lf\n", chi2); + + test = malloc (options->knots * sizeof (*test)); + + for (iter = 0; iter < options->iters; iter++) { + for (i = 0; i < options->knots; i++) { + u = gsl_rng_uniform (r); + test[i] = knots[i] + options->step_size * 2 * u - options->step_size; + if (test[i] < -0.5) test[i] += 1.0; + if (test[i] > 0.5) test[i] -= 1.0; + } + + polyfit (result, data, nobs, test, 0, options); + + if (result->chi2 < chi2) { + chi2 = result->chi2; + for (i = 0; i < options->knots; i++) + knots[i] = test[i]; + } + } + + if (!options->ann_compat) + printf ("# Final chi2: %lf\n# \n", chi2); + + polyfit (result, data, nobs, knots, 0, options); + + polyfit_print (result, options, 1, 1); + + gsl_rng_free (r); + free (data); + free (test); + free (knots); + + polyfit_options_free (options); + + return 0; +} + +float altmain (int argc, char **argv) +{ + int i, nobs, iter, status; + polyfit_triplet *data; + FILE *in; + double col1, col2, col3, chi2, chi2test, u; + char line[255]; + + double *knots = NULL; + double *test; + + polyfit_options *options; + polyfit_solution *result; + + + gsl_rng *r; + + if (argc < 2) { + printf ("Usage: ./polyfit [options] lc.dat\n\n"); + printf ("File lc.dat can have 1 column (equidistant fluxes), 2 columns (phase and flux),\n"); + printf ("or 3 columns (phase, flux, and standard deviation)\n\n"); + printf ("Options:\n\n"); + printf (" -o order .. fitting polynomial order (default: 2)\n"); + printf (" -i iters .. number of iterations (default: 10000)\n"); + printf (" -s step .. step for random knot displacement (default: 0.01)\n"); + printf (" -k k1 k2 ... kN .. explicit list of knots\n"); + printf (" --find-knots .. attempt to find knots automatically\n"); + printf (" --find-step .. attempt to find step automatically\n"); + printf (" --chain-length .. minimum chain length for automatic knot search\n"); + printf (" --ann-compatible .. make output ANN-compatible\n\n"); + exit (0); + } + + options = polyfit_options_default (); + options->find_knots = FALSE; + + for (i = 1; i < argc; i++) { + if (strcmp (argv[i], "-o") == 0) + options->polyorder = atoi (argv[++i]); + if (strcmp (argv[i], "-i") == 0) + options->iters = atoi (argv[++i]); + if (strcmp (argv[i], "-s") == 0) + options->step_size = atof (argv[++i]); + if (strcmp (argv[i], "-k") == 0) { + double knot; + i++; + options->knots = 0; + while (sscanf (argv[i], "%lf", &knot) == 1) { + options->knots++; + knots = realloc (knots, options->knots * sizeof (*knots)); + knots[options->knots-1] = knot; + i++; + } + i--; + } + if (strcmp (argv[i], "--find-knots") == 0) + options->find_knots = TRUE; + if (strcmp (argv[i], "--find-step") == 0) + options->find_step = 1; + if (strcmp (argv[i], "--chain-length") == 0) + options->chain_length = atoi (argv[++i]); + if (strcmp (argv[i], "--ann-compatible") == 0) + options->ann_compat = 1; + } + + in = fopen (argv[argc-1], "r"); + if (!in) { + printf ("file %s not found, aborting.\n", argv[argc-1]); + exit (0); + } + + /* Read the input data: */ + + data = malloc (NMAX * sizeof (*data)); + i = 0; + while (!feof (in)) { + if (!fgets (line, 255, in)) break; + if (feof (in)) break; + if (line[0] == '\n') break; + if (1 <= (status = sscanf (line, "%lf\t%lf\t%lf\n", &col1, &col2, &col3))) { + switch (status) { + case 1: + data[i].x = -0.5 + (double) i / (double) LCPOINTS; + data[i].y = col1; + data[i].z = 1.0; + break; + case 2: + data[i].x = col1; + data[i].y = col2; + data[i].z = 1.0; + break; + case 3: + data[i].x = col1; + data[i].y = col2; + data[i].z = 1e-3/col3/col3; + break; + default: + + /* can't ever get here */ + + break; + } + i++; + } + } + fclose (in); + nobs = i; + + if (!options->ann_compat) + printf ("# %d data points read in from %s.\n# \n", nobs, argv[argc-1]); + + /* Sort the data by phase: */ + + qsort (data, nobs, sizeof (*data), polyfit_sort_by_phase); + + if (options->find_knots) { + status = polyfit_find_knots (data, nobs, &knots, options); + if (!options->ann_compat) { + if (status != 0) + printf ("# * automatic search for knots failed, reverting to defaults.\n"); + else + printf ("# * automatic search for knots successful.\n"); + printf ("# \n"); + } + } + + /* The initial phase intervals for knots: */ + + if (!knots) { + knots = malloc (options->knots * sizeof (*knots)); + knots[0] = -0.4; knots[1] = -0.1; knots[2] = 0.2; knots[3] = 0.4; + /* knots[4] = 0.45; + knots[5] = 0.48; */ + } + + /* Sort the knots in ascending order: */ + qsort (knots, options->knots, sizeof (*knots), polyfit_sort_by_value); + + if (options->find_step) { + double diff; + /* Step size would be the minimum width between two knots / 5: */ + diff = fabs (knots[1]-knots[0]); + for (i = 1; i < options->knots-1; i++) + if (fabs (knots[i+1]-knots[i]) < diff) + diff = fabs (knots[i+1]-knots[i]); + if (fabs (knots[i+1]-knots[0]) < diff) + diff = fabs (knots[i+1]-knots[0]); + + options->step_size = diff / 5.0; + } + + if (!options->ann_compat) { + printf ("# Fitting polynomial order: %d\n", options->polyorder); + printf ("# Initial set of knots: {"); + for (i = 0; i < options->knots-1; i++) + printf ("%lf, ", knots[i]); + printf ("%lf}\n", knots[i]); + printf ("# Number of iterations for knot search: %d\n", options->iters); + printf ("# Step size for knot search: %lf\n# \n", options->step_size); + } + + r = gsl_rng_alloc (gsl_rng_mt19937); + gsl_rng_set (r, 1); + + result = polyfit_solution_init (options); + polyfit (result, data, nobs, knots, 0, options); + chi2 = result->chi2; + + if (!options->ann_compat) + printf ("# Original chi2: %lf\n", chi2); + + test = malloc (options->knots * sizeof (*test)); + + for (iter = 0; iter < options->iters; iter++) { + for (i = 0; i < options->knots; i++) { + u = gsl_rng_uniform (r); + test[i] = knots[i] + options->step_size * 2 * u - options->step_size; + if (test[i] < -0.5) test[i] += 1.0; + if (test[i] > 0.5) test[i] -= 1.0; + } + + polyfit (result, data, nobs, test, 0, options); + + if (result->chi2 < chi2) { + chi2 = result->chi2; + for (i = 0; i < options->knots; i++) + knots[i] = test[i]; + } + } + + if (!options->ann_compat) + printf ("# Final chi2: %lf\n# \n", chi2); + + polyfit (result, data, nobs, knots, 0, options); + + polyfit_print (result, options, 1, 1); + + gsl_rng_free (r); + free (data); + free (test); + free (knots); + + polyfit_options_free (options); + + return (float) chi2; +} + diff --git a/mltsp/TCP/Algorithms/EclFeatures/polyfit.h b/mltsp/TCP/Algorithms/EclFeatures/polyfit.h new file mode 100755 index 00000000..44ed97d9 --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/polyfit.h @@ -0,0 +1,36 @@ +#include + +typedef struct polyfit_options { + int polyorder; + int iters; + double step_size; + int knots; + bool find_knots; + bool find_step; + int chain_length; + bool ann_compat; +} polyfit_options; + +typedef struct polyfit_triplet { + double x; + double y; + double z; +} polyfit_triplet; + +typedef struct polyfit_solution { + double chi2; + int *npts; /* Number of data points on each interval */ + double *knots; /* Array of knots */ + double **ck; /* Polynomial coefficients */ +} polyfit_solution; + +polyfit_options *polyfit_options_default (); +int polyfit_options_free (polyfit_options *options); +polyfit_solution *polyfit_solution_init (polyfit_options *options); +int polyfit_solution_free (polyfit_solution *solution, polyfit_options *options); +int polyfit_sort_by_phase (const void *a, const void *b); +int polyfit_sort_by_value (const void *a, const void *b); +int polyfit_find_knots (polyfit_triplet *data, int nobs, double **knots, polyfit_options *options); +double polyfit_compute (polyfit_solution *result, polyfit_options *options, double phase); +int polyfit_print (polyfit_solution *result, polyfit_options *options, int VERBOSE, int PRINT_SOLUTION); +int polyfit (polyfit_solution *result, polyfit_triplet *data, int nobs, double *knots, int PRINT, polyfit_options *options); diff --git a/mltsp/TCP/Algorithms/EclFeatures/selectp.py b/mltsp/TCP/Algorithms/EclFeatures/selectp.py new file mode 100644 index 00000000..d36e6fcd --- /dev/null +++ b/mltsp/TCP/Algorithms/EclFeatures/selectp.py @@ -0,0 +1,207 @@ +""" +Select a period. + +Runs polyfit (adapted from PHOEBE) and looks for a period +with the lowest chi-sq. you input the trial period and it will look +at aliases of that period. Assumed to be an eclipsing system. + +See test() for usage + +J.S.Bloom, Aug 2011 + +""" +from __future__ import print_function +import ctypes, sys, tempfile, os +from ctypes import c_char_p +from matplotlib.mlab import csv2rec +from matplotlib import pylab as plt +from numpy import where +import StringIO +import traceback +import time +# path to polyfit executable if dynamic = False + +# gcc -m32 -L/usr/local/lib polyfit.c -lgsl -lgslcblas -lm -o polyfit +# gcc -m32 -shared -Wl -o polyfit.so polyfit.o -lc -lgsl -lgslcblas -lm +exec_path = "./polyfit" + +class selectp: + + + def __init__(self,t, y, dy, period, mults=[0.5,1,2],\ + order=2, iknots=[-0.4,-0.2,0.2,0.4], exec_fpath='', + dynamic=True, mag=True, verbose=False, srcid=0): + + self.verbose = verbose + self.rez = {'models': []} + self.order = order + self.iknots = iknots + self.t = t + self.y = y + self.dy = dy + self.period = period + self.mults = mults + self.mag = mag # y values in mag not flux + self.srcid = srcid + self.dynamic = dynamic + #if len(exec_fpath) > 0: + # self.poly = exec_fpath + #else: + # self.poly = exec_path + self.poly = os.path.abspath(os.environ.get("TCP_DIR") + 'Algorithms/EclFeatures/polyfit') + if dynamic: + ## load the dynamic library + try: + self.polyfit = ctypes.cdll.LoadLibrary(os.path.abspath(os.environ.get("TCP_DIR") + 'Algorithms/EclFeatures/polyfit.so')) + except: + print("cannot load polyfit.so") + + self.ok = True + + def _runp(self,p): + if not self.ok: + return -1 + + ## try running with that period + if self.verbose: + print(" --> running with period ... %f" % p) + # write out phased photometry to the file -- center the most faint point at 0 + tt=(self.t/p) % 1.; s=tt.argsort() + x = tt[s]; y = self.y[s] ; z = self.dy[s] + if self.mag: + mm = where(y == max(y)) + else: + mm = where(y == min(y)) + pmm = x[mm] + tt = (((self.t/p) % 1.0) - pmm + 0.5) % 1.0; s=tt.argsort() + x = tt[s]; y = self.y[s] ; z = self.dy[s] + z = zip(x - 0.5,y,z) + f = tempfile.NamedTemporaryFile(dir="/tmp",suffix=".dat",delete=False) + name = f.name + #(f,name) = tempfile.mkstemp(dir="/tmp",suffix=".dat") + #f = open(name,"w") + lines = [] + for l in z: + lines.append("%f %f %f\n" % l) + write_str = ''.join(lines) + f.write(write_str) + f.flush() # dstarr adds to maybe reduce segfaults + f.close() + + try: + loop_max = 300 + i_loop = 0 + while ((os.stat(name).st_size < len(write_str)) and (i_loop < loop_max)): + time.sleep(1) + i_loop += 1 + if i_loop >= loop_max: + self.rez["models"].append({"period": p, "phase": None, 'f': None, 'chi2': 100000}) + os.remove(name) + return # maybe this is a good way to catch the segfault issue sources prior to segfaulting? + except: + self.rez["models"].append({"period": p, "phase": None, 'f': None, 'chi2': 100000}) + os.remove(name) + return # maybe this is a good way to catch the segfault issue sources prior to segfaulting? + + + tmp = "%s -o %i -k %s --find-step --chain-length 30 %s" % \ + (self.poly,self.order," ".join(["%.2f" % k for k in self.iknots]),name) + alttmp = "%s -o %i -k %s --find-knots --find-step --chain-length 30 %s" % \ + (self.poly,self.order," ".join(["%.2f" % k for k in [-0.45,-0.35,0.40,0.45]]),name) + + #import pdb; pdb.set_trace() + #print + + if self.dynamic: + # make the argv vector + argv = tmp.split() + argc = len(argv) + argv_type = ctypes.c_char_p * len(argv) + argv = argv_type(*argv) + argc = ctypes.c_int(argc) + self.polyfit.altmain.restype = ctypes.c_float + f1 = tempfile.TemporaryFile() + oldstdout = os.dup(sys.stdout.fileno()) + os.dup2(f1.fileno(), 1) + res = self.polyfit.altmain(argc,argv) + os.dup2(oldstdout, 1) + f1.seek(0) + s = csv2rec(f1,delimiter="\t") + self.rez["models"].append({"period": p, "phase": s['phase'], 'f': s['flux'], 'chi2': res}) + else: + from subprocess import PIPE,Popen + + #os.system("touch /global/home/users/dstarr/500GB/debug2/%d" % (self.srcid + 100000000)) + + pp = Popen(tmp, shell=True,stdin=PIPE, stdout=PIPE, \ + stderr=PIPE, close_fds=True) + #sts = os.waitpid(pp.pid, 0)[1] + pp.wait() + + + (child_stdin,child_stdout,child_stderr) = (pp.stdin, pp.stdout, pp.stderr) + ttt = child_stdout.readlines() ; ttt1 = child_stderr.readlines() + child_stdin.close() ; child_stdout.close() ; child_stderr.close() + if len(ttt) == 0 and len(ttt1) == 0: + # probably a seg fault + if self.verbose: + print(" --> trying",alttmp) + pp = Popen(alttmp, shell=True,stdin=PIPE, stdout=PIPE, \ + stderr=PIPE, close_fds=True) + pp.wait() + (child_stdin,child_stdout,child_stderr) = (pp.stdin, pp.stdout, pp.stderr) + ttt = child_stdout.readlines() ; ttt1 = child_stderr.readlines() + child_stdin.close() ; child_stdout.close() ; child_stderr.close() + if len(ttt) == 0 and len(ttt1) == 0: + self.rez["models"].append({"period": p, "phase": None, 'f': None, 'chi2': 100000}) + os.remove(name) + return + ttt1 = StringIO.StringIO("".join(ttt)) # make a new file + s = csv2rec(ttt1,delimiter="\t") + chi2 = 100000 + for l in ttt: + if l.find("Final chi2:") == -1: + continue + chi2 = float(l.split("Final chi2:")[-1]) + self.rez["models"].append({"period": p, "phase": s['phase'], 'f': s['flux'], 'chi2': chi2}) + os.remove(name) + + def select(self): + for m in self.mults: + self._runp(m*self.period) + r = [(x['chi2'],x['period']) for x in self.rez['models']] + r.sort() + if self.verbose: + print(" .... best p = ", r[0][1], "best chi2 = ", r[0][0]) + self.rez.update({"best_period": r[0][1], "best_chi2": r[0][0]}) + + def plot_best(self,extra=""): + b = [x for x in self.rez['models'] if x['period'] == self.rez['best_period']][0] + from matplotlib import pylab as plt + + tt=(self.t/self.rez['best_period']) % 1; s=tt.argsort() + x = tt[s]; y = self.y[s] ; z = self.dy[s] + if self.mag: + mm = where(y== max(y)) + else: + mm = where(y== min(y)) + pmm = x[mm] + tt = (((self.t/self.rez['best_period']) % 1.0) - pmm + 0.5) % 1.0; s=tt.argsort() + x = tt[s] - 0.5; y = self.y[s] ; z = self.dy[s] + + plt.errorbar (x,y,z,fmt='o',c="r") + plt.plot(b['phase'],b['f'],c="b") + plt.ylim(self.y.max()+0.05,self.y.min()-0.05) + plt.xlabel("phase") + plt.ylabel("flux/mag") + plt.title("Best p = %.6f (chi2 = %.3f)" % (self.rez['best_period'],self.rez['best_chi2'])) + plt.text(-0.2,self.y.max() - 0.05, "%s" % extra, ha='center',alpha=0.5) + +def test(): + x = csv2rec("lc.dat",delimiter=" ",names=["t","y","dy"]) + s = selectp(x['t'],x['y'],x['dy'],21.93784630,dynamic=False,verbose=True) + s.select() + print(s.rez) + s.plot_best() + + diff --git a/mltsp/TCP/Algorithms/PTF_SN_classifier.py b/mltsp/TCP/Algorithms/PTF_SN_classifier.py new file mode 100644 index 00000000..eb1b31be --- /dev/null +++ b/mltsp/TCP/Algorithms/PTF_SN_classifier.py @@ -0,0 +1,349 @@ +from scipy.special import erf +from numpy import array,matrix,arange,sqrt,exp,mean,sum,zeros,clip,fix,\ + cumsum,hstack,floor,ceil + +### ### NEED A FEATURE-CHECKING FUNCTION ### ### + +# (1) parse the XML + +# sys.path.append(os.path.expandvars("$TCP_DIR/Software/feature_extract/Code") +# import vosource_parse, pprint +# fname = "test_feature_algorithms.VOSource.xml" +# v = vosource_parse.vosource_parser(fname) +# pprint(v.d) +# note that v is of type xmldict.XmlDictObject +# v.d['ts'] is the parsed timeseries as a list, usually with 4 entries (time, val, valerr, limit) +# it's up to the user to decide how to use those columns...there's almost no reformating +# + + +# from v I need to extract: +# closest_in_light +# closest_in_light_ttype +# closest_in_light_dm +# sdss_best_offset_in_petro_g +# sdss_best_z + sdss_best_dz +# sdss_colors: +# sdss_photo_rest_ug +# sdss_photo_rest_gr +# sdss_photo_rest_ri +# sdss_photo_rest_iz + + +#(2) find host +# +#defaults: +near_z=None +gal_type=0 +sloan_colors=[] +near_z=0 +near_dz=0.1 +nearby=False +used_sdss_colors=False +used_z=False + + +light_threshold=1.5 +if (closest_in_light is not None) and (closest_in_light=conf*mcprob and delta0, fix that gal_type, otherwise use Sloan colors + (either input or defined via sloan type) and their associated + uncertainty when mapping to types. Fractional gal or sloan types + are permitted. + + Sloan colors are [u-g , g-r , r-i , i-z]. + + Galaxy Hubble types indexed according to: + 1=E,2=S0,3=Sa,4=Sb,5=Sc,6=Sd,7=Im . + + Setting sloan_type instead of gal_type is useful in that it provides + a crude propagation of typing uncertainty.""" + + + # + # observed rates + # + obs_rate_Ia = array([4.0018, 5.0504, 5.3397, 5.5446, 5.6459, 5.6683, 5.6113, 5.4954, 5.3387, 5.1593, 4.9450, 4.5844, 4.1014, 3.5384, 2.9377, 2.3418, 1.7929, 1.3334, 1.0057, 0.8486, 0.7604, 0.6771, 0.5985, 0.5249, 0.4561, 0.3922, 0.3331, 0.2790, 0.2297, 0.1854, 0.1459, 0.1113, 0.0816, 0.0569, 0.0370]) + + obs_rate_cc = array([0.8428, 2.3028, 2.3755, 2.2226, 1.9121, 1.6182, 1.3255, 1.0246, 0.7579, 0.5679, 0.4743, 0.3968, 0.3245, 0.2583, 0.1993, 0.1483, 0.1065, 0.0746, 0.0538, 0.0448, 0.0402, 0.0358, 0.0316, 0.0277, 0.0241, 0.0207, 0.0176, 0.0147, 0.0121, 0.0098, 0.0077, 0.0058, 0.0043, 0.0029, 0.0019]) + + obs_rate_IIp =array([0.3377, 0.7043, 0.7691, 0.7210, 0.6151, 0.5115, 0.4047, 0.2936, 0.1958, 0.1289, 0.1013, 0.0808, 0.0626, 0.0467, 0.0332, 0.0221, 0.0135, 0.0073, 0.0037, 0.0025, 0.0023, 0.0020, 0.0018, 0.0016, 0.0014, 0.0012, 0.0011, 0.0009, 0.0008, 0.0007, 0.0006, 0.0005, 0.0004, 0.0004, 0.0003]) + + obs_rate_Ibc =array([0.4616, 1.4410, 1.3800, 1.2553, 1.0378, 0.8448, 0.6681, 0.4958, 0.3484, 0.2459, 0.1970, 0.1582, 0.1234, 0.0929, 0.0666, 0.0449, 0.0277, 0.0154, 0.0080, 0.0056, 0.0049, 0.0043, 0.0038, 0.0033, 0.0028, 0.0024, 0.0020, 0.0016, 0.0013, 0.0011, 0.0008, 0.0006, 0.0004, 0.0003, 0.0002]) + + obs_rate_IIn =array([0.0435, 0.1575, 0.2265, 0.2463, 0.2592, 0.2620, 0.2527, 0.2351, 0.2137, 0.1930, 0.1760, 0.1578, 0.1384, 0.1187, 0.0994, 0.0813, 0.0652, 0.0519, 0.0422, 0.0367, 0.0329, 0.0294, 0.0260, 0.0228, 0.0199, 0.0171, 0.0145, 0.0121, 0.0100, 0.0080, 0.0063, 0.0047, 0.0034, 0.0023, 0.0014]) + + # rates are defined on the following redshift grid + nzbins = len(obs_rate_Ia) + zbin=0.01 + z_grid = arange(nzbins)*zbin + z_grid1 = z_grid - zbin/2. + z_grid1[0] = z_grid[0] + z_grid2 = z_grid + zbin/2. + + + # only do the work if the input-z is in range of interest, otherwise + # we throw up a flag high_z=True + nsig=2. + if (z-nsig*dz0): + zdn = fix( round((z-dz)/dz) )*dz + zup = fix( round((z+dz)/dz) )*dz + + z1sigma = (zdn,zup) + out_dict1 = {'high_z':True,\ + 'Prob_Ia':fix(0.99*100)/100,\ + 'Prob_CC':fix(0.01*100)/100,\ + 'Prob_IIp|CC':fix(0.34*100)/100,\ + 'Prob_Ibc|CC':fix(0.33*100)/100,\ + 'Prob_IIn|CC':fix(0.33*100)/100,\ + 'z_1sigma':z1sigma,'z_1sigma|Ia':z1sigma,'z_1sigma|CC':z1sigma,\ + 'z_1sigma|IIp':z1sigma,'z_1sigma|Ibc':z1sigma,'z_1sigma|IIp':z1sigma} + + + out_dict={ '': { \ + 'class_results':{ \ + 'SN Ia':{'prob': out_dict1['prob_Ia'],\ + 'weight':1.0,\ + 'TUTOR_name': "tia",\ + 'comments': "No Ia subtypes",\ + 'class_value_added_statements': {'name': "z_1sigma",'value' : out_dict1['Ia_z_1sigma'], 'comments': "This is the 1sigma redshift interval if it is a Ia"},\ + 'subclass': { \ + '1991bg-like' : {'prob': None, 'weight': 0.0, 'TUTOR-name': None},\ + 'super-Chandra': {'prob': None, 'weight': 0.0, 'TUTOR-name': "tiasc"},\ + 'Branch-Normal': {'prob': None, 'weight': 0.0, 'TUTOR-name': None},\ + 'peculiar': {'prob': None, 'weight': 0.0, 'TUTOR-name': None}}}, + 'SN CC':{'prob': out_dict1['prob_CC'],\ + 'weight':1.0,\ + 'TUTOR_name': "cc",\ + 'comments': None,\ + 'class_value_added_statements': {'name': "z_1sigma",'value' : out_dict1['cc_z_1sigma'], 'comments': "This is the 1sigma redshift interval if it is a CC-SN"}}, + 'SN Ibc':{'prob': out_dict1['prob_Ibc'],\ + 'weight':1.0,\ + 'TUTOR_name': None,\ + 'comments': "no Ib Ic differenciation",\ + 'class_value_added_statements': {'name': "z_1sigma",'value' : out_dict1['Ibc_z_1sigma'], 'comments': "This is the 1sigma redshift interval if it is a Ibc"},\ + 'subclass': { \ + 'Ib' : {'prob': None, 'weight': 0.0, 'TUTOR-name': "tib"},\ + 'Ic': {'prob': None, 'weight': 0.0, 'TUTOR-name': "tic"},\ + 'peculiar': {'prob': None, 'weight': 0.0, 'TUTOR-name': None}}}, + 'SN IIP':{'prob': out_dict1['prob_IIp'],\ + 'weight':1.0,\ + 'TUTOR_name': "iip",\ + 'comments': "Type II SNe are broken to IIP and IIn",\ + 'class_value_added_statements': {'name': "z_1sigma",'value' : out_dict1['IIp_z_1sigma'], 'comments': "This is the 1sigma redshift interval if it is a IIp"},\ + 'subclass': { \ + 'IIP' : {'prob': None, 'weight': 0.0, 'TUTOR-name': "iip"},\ + 'IIL': {'prob': None, 'weight': 0.0, 'TUTOR-name': "iil"},\ + 'IIb': {'prob': None, 'weight': 0.0, 'TUTOR-name': "iib"},\ + 'peculiar': {'prob': None, 'weight': 0.0, 'TUTOR-name': None}}}, + 'SN IIn':{'prob': out_dict1['prob_IIn'],\ + 'weight':1.0,\ + 'TUTOR_name': "iin",\ + 'comments': "Type II SNe are broken to IIP and IIn",\ + 'class_value_added_statements': {'name': "z_1sigma",'value' : out_dict1['IIn_z_1sigma'], 'comments': "This is the 1sigma redshift interval if it is a IIn"}}}, + 'global_statements_and_flags': [\ + {'name': "interesting_object", 'type': "bool", 'val': None, "comment": None},\ + {'name': "high-z", 'type': "bool", 'val': out_dict1['high_z'], "comment": None}],\ + 'comments' : "in this version weights are 0 or 1, the first for unconstrained questions, the latter for any derived value.",\ + 'version': "v0.1"}} + + return out_dict diff --git a/mltsp/TCP/Algorithms/SpatialClustering/cluster.py b/mltsp/TCP/Algorithms/SpatialClustering/cluster.py new file mode 100644 index 00000000..95e06808 --- /dev/null +++ b/mltsp/TCP/Algorithms/SpatialClustering/cluster.py @@ -0,0 +1,529 @@ +#!/usr/bin/env python + +""" +cluster: Monte Carlo simulation of clustering +""" +from __future__ import print_function + +import os,sys +import datetime +try: + from matplotlib import pylab +except: + pass +try: + from pylab import * +except: + pass +from numarray import random_array +import time +import copy +import math +import random +import numarray + +start_time = time.time() +global blah + + +def is_object_associated_with_source_algorithm_jbloom(n_sources, \ + obj_ra, obj_dec, obj_ra_rms, obj_dec_rms, \ + src_ra, src_dec, src_ra_rms, src_dec_rms, sigma_0): + """ Source matching algorithm + Input: obj & source ra,dec,errors + Return: True/False conditional result + """ + # log (Po(center)*Ps(center)/Po(midpoint)Ps(midpoint)) + #Poc = -1.0* math.log(self.assumed_err[0]*self.assumed_err[1]*2.0*math.pi) + #Psc = -1.0* math.log(s.current_err[0]*s.current_err[1]*2.0*math.pi) + + # This try/except is kudgy, since RMS for both sources or objects should not be 0: + # I think this only occurs for errant cases, while debugging, or integrating a new survey. + try: + midpt = [(obj_ra/obj_ra_rms**2 + src_ra/src_ra_rms**2)/ \ + (1/obj_ra_rms**2 + 1/src_ra_rms**2), \ + (obj_dec/obj_dec_rms**2 + src_dec/src_dec_rms**2)/ \ + (1/obj_dec_rms**2 + 1/src_dec_rms**2)] + except: + if src_ra_rms == 0: + src_ra_rms = 0.2 # default arcsecs + if src_dec_rms == 0: + src_dec_rms = 0.2 # default arcsecs + if obj_ra_rms == 0: + obj_ra_rms = 0.2 # default arcsecs + if obj_dec_rms == 0: + obj_dec_rms = 0.2 # default arcsecs + midpt = [(obj_ra/obj_ra_rms**2 + src_ra/src_ra_rms**2)/ \ + (1/obj_ra_rms**2 + 1/src_ra_rms**2), \ + (obj_dec/obj_dec_rms**2 + src_dec/src_dec_rms**2)/ \ + (1/obj_dec_rms**2 + 1/src_dec_rms**2)] + + + #miderr = [math.sqrt(1.0/(self.assumed_err[0]**(-2) + s.current_err[0]**(-2))),\ + # math.sqrt(1.0/(self.assumed_err[0]**(-2) + s.current_err[0]**(-2)))] + #print (midpt,self.pos,self.assumed_err,s.current_pos,s.current_err) + #Pom = -1.0* math.log(self.assumed_err[0]*self.assumed_err[1]*2.0*math.pi) - 0.5*( ((self.pos[0] - midpt[0])/self.assumed_err[0])**2 + \ + # ((self.pos[1] - midpt[1])/self.assumed_err[1])**2) + #Psm = -1.0* math.log(s.current_err[0]*s.current_err[1]*2.0*math.pi) - 0.5*( ((s.current_pos[0] - midpt[0])/s.current_err[0])**2 + \ + # ((s.current_pos[1] - midpt[1])/s.current_err[1])**2) + #odds = -1.0 * (Poc + Psc - Pom - Psm) + cos_dec_term = math.cos(midpt[1]*math.pi/(180.0*3600.0)) # obj/src positions are in arcsec & need to be converted to radians in cos() + simple_odds = - 0.5*( (cos_dec_term*(src_ra - midpt[0])/src_ra_rms)**2 + \ + ((src_dec - midpt[1])/src_dec_rms)**2) \ + - 0.5*( (cos_dec_term*(obj_ra - midpt[0])/obj_ra_rms)**2 + \ + ((obj_dec - midpt[1])/obj_dec_rms)**2) + #-2*logpop = chi^2 = sigma^2 --> sqrt(10) + num_obs_associated = n_sources + sigma_n = sqrt(2.0*log(num_obs_associated)) + + return ((-2.828*simple_odds < sigma_n**2 + sigma_0**2), simple_odds, sigma_n, midpt) + + +# 20071008 works, original algorihtms, un-normalized +def is_object_associated_with_source_algorithm_jbloom_orig(n_sources, \ + obj_ra, obj_dec, obj_ra_rms, obj_dec_rms, \ + src_ra, src_dec, src_ra_rms, src_dec_rms, sigma_0): + """ Source matching algorithm + Input: obj & source ra,dec,errors + Return: True/False conditional result + """ + # log (Po(center)*Ps(center)/Po(midpoint)Ps(midpoint)) + #Poc = -1.0* math.log(self.assumed_err[0]*self.assumed_err[1]*2.0*math.pi) + #Psc = -1.0* math.log(s.current_err[0]*s.current_err[1]*2.0*math.pi) + midpt = [(obj_ra/obj_ra_rms**2 + src_ra/src_ra_rms**2)/ \ + (1/obj_ra_rms**2 + 1/src_ra_rms**2), \ + (obj_dec/obj_dec_rms**2 + src_dec/src_dec_rms**2)/ \ + (1/obj_dec_rms**2 + 1/src_dec_rms**2)] + #miderr = [math.sqrt(1.0/(self.assumed_err[0]**(-2) + s.current_err[0]**(-2))),\ + # math.sqrt(1.0/(self.assumed_err[0]**(-2) + s.current_err[0]**(-2)))] + #print (midpt,self.pos,self.assumed_err,s.current_pos,s.current_err) + #Pom = -1.0* math.log(self.assumed_err[0]*self.assumed_err[1]*2.0*math.pi) - 0.5*( ((self.pos[0] - midpt[0])/self.assumed_err[0])**2 + \ + # ((self.pos[1] - midpt[1])/self.assumed_err[1])**2) + #Psm = -1.0* math.log(s.current_err[0]*s.current_err[1]*2.0*math.pi) - 0.5*( ((s.current_pos[0] - midpt[0])/s.current_err[0])**2 + \ + # ((s.current_pos[1] - midpt[1])/s.current_err[1])**2) + #odds = -1.0 * (Poc + Psc - Pom - Psm) + simple_odds = - 0.5*( ((src_ra - midpt[0])/src_ra_rms)**2 + \ + ((src_dec - midpt[1])/src_dec_rms)**2) \ + - 0.5*( ((obj_ra - midpt[0])/obj_ra_rms)**2 + \ + ((obj_dec - midpt[1])/obj_dec_rms)**2) + #-2*logpop = chi^2 = sigma^2 --> sqrt(10) + num_obs_associated = n_sources + sigma_n = sqrt(2.0*log(num_obs_associated)) + + return ((-2.0*simple_odds < sigma_n**2 + sigma_0**2), simple_odds, sigma_n) + + + + +class obs: + + def __init__(self,initial_pos,true_err=[[0.09,0.0],[0.0,0.09]],assumed_err=[0.3,0.3],t=None): + self.initial_pos = initial_pos # (true ra and dec) + self.true_err = true_err + self.assumed_err = assumed_err + self.t = t + self.associated_sources = [] + if self.t is None: + ## assign a time + self.t = time.time() - start_time ## this is in seconds + self.pos = [] + + def observe_pos(self): + """ + """ + self.pos = random_array.multivariate_normal(self.initial_pos,self.true_err) + + def plot(self): + scatter([self.pos[0]],[self.pos[1]],s=20) + return + + def is_associated_with_source(self,slist,sigma_0=3.0): + if type(slist) != type([]) or len(slist) == 0: + return {'answer': False, 'sources': []} + + ## todo: put the logic here + yes_source = [] + print(len(slist)) + source_odds = [] + for s in slist: + (match_bool, simple_odds, sigma_n, midpt) = \ + is_object_associated_with_source_algorithm_jbloom(\ + len(s.associated_obs), \ + self.pos[0], self.pos[1], self.assumed_err[0], self.assumed_err[1], \ + s.current_pos[0], s.current_pos[1], s.current_err[0], \ + s.current_err[1], sigma_0) + + if match_bool: + print(("associated",sqrt(-2.0*simple_odds),sqrt(sigma_n**2 + sigma_0**2))) + yes_source.append(s) + source_odds.append(simple_odds) + + + #print (simple_odds) + + if len(yes_source) == 0: + print(("no association",self.pos)) + return {'answer': False, 'sources': []} + + else: + mm= max(source_odds) + ind = source_odds.index(mm) + return {'answer': True, 'best_source': [yes_source[ind]], 'best_odds': mm, 'sources': yes_source, 'odds': source_odds} + + + def is_associated_with_source_orig(self,slist,sigma_0=3.0): + if type(slist) != type([]) or len(slist) == 0: + return {'answer': False, 'sources': []} + + ## todo: put the logic here + yes_source = [] + print(len(slist)) + source_odds = [] + for s in slist: + # log (Po(center)*Ps(center)/Po(midpoint)Ps(midpoint)) + #Poc = -1.0* math.log(self.assumed_err[0]*self.assumed_err[1]*2.0*math.pi) + #Psc = -1.0* math.log(s.current_err[0]*s.current_err[1]*2.0*math.pi) + midpt = [(self.pos[0]/self.assumed_err[0]**2 + s.current_pos[0]/s.current_err[0]**2)/(1/self.assumed_err[0]**2 + 1/s.current_err[0]**2),\ + (self.pos[1]/self.assumed_err[1]**2 + s.current_pos[1]/s.current_err[1]**2)/(1/self.assumed_err[1]**2 + 1/s.current_err[1]**2)] + #miderr = [math.sqrt(1.0/(self.assumed_err[0]**(-2) + s.current_err[0]**(-2))),\ + # math.sqrt(1.0/(self.assumed_err[0]**(-2) + s.current_err[0]**(-2)))] + #print (midpt,self.pos,self.assumed_err,s.current_pos,s.current_err) + #Pom = -1.0* math.log(self.assumed_err[0]*self.assumed_err[1]*2.0*math.pi) - 0.5*( ((self.pos[0] - midpt[0])/self.assumed_err[0])**2 + \ + # ((self.pos[1] - midpt[1])/self.assumed_err[1])**2) + #Psm = -1.0* math.log(s.current_err[0]*s.current_err[1]*2.0*math.pi) - 0.5*( ((s.current_pos[0] - midpt[0])/s.current_err[0])**2 + \ + # ((s.current_pos[1] - midpt[1])/s.current_err[1])**2) + #odds = -1.0 * (Poc + Psc - Pom - Psm) + simple_odds = - 0.5*( ((s.current_pos[0] - midpt[0])/s.current_err[0])**2 + \ + ((s.current_pos[1] - midpt[1])/s.current_err[1])**2) - 0.5*( ((self.pos[0] - midpt[0])/self.assumed_err[0])**2 + \ + ((self.pos[1] - midpt[1])/self.assumed_err[1])**2) + #-2*logpop = chi^2 = sigma^2 --> sqrt(10) + num_obs_associated = len(s.associated_obs) + sigma_n = sqrt(2.0*log(num_obs_associated)) + + if -2.0*simple_odds < sigma_n**2 + sigma_0**2: + print(("associated",sqrt(-2.0*simple_odds),sqrt(sigma_n**2 + sigma_0**2))) + yes_source.append(s) + source_odds.append(simple_odds) + + + #print (simple_odds) + + if len(yes_source) == 0: + print(("no association",self.pos)) + return {'answer': False, 'sources': []} + + else: + mm= max(source_odds) + ind = source_odds.index(mm) + return {'answer': True, 'best_source': [yes_source[ind]], 'best_odds': mm, 'sources': yes_source, 'odds': source_odds} + + + def associate_with_source(self,slist): + if type(slist) != type([]) or len(slist) == 0: + return + # todo: watch out for multiplicity + self.associated_sources.extend(slist) + + def __str__(self): + a = " t=%f" % self.t + a += "\tinitial pos = %s\n" % self.initial_pos + a += "\tobserved pos = %s\n" % self.pos + a += "\ttrue_obsevational_err = %s\n" % self.true_err + return a + +class source: + + def __init__(self,start_pos=[None,None],start_err=[None,None],current_pos=[None,None],current_err=[None,None],\ + associated_obs=[],stype="real"): + """ + possible types: real and constructed + """ + self.start_pos = start_pos + self.start_err = start_err + self.current_pos = current_pos + self.current_err = current_err + self.associated_obs = associated_obs + self.stype = stype + + def add_associated_obs(self,o): + # might want to deepcopy here + self.associated_obs.append(copy.deepcopy(o)) + + def plot(self,code='ys'): + try: + if self.stype=="real": + scatter([self.start_pos[0]],[self.start_pos[1]],c=code[0],marker=code[1],s=60) + else: + scatter([self.current_pos[0]],[self.current_pos[1]],c=code[0],marker=code[1],s=60) + except: + pass + + def recalculate_position(self): + """ + takes all the positions of the associated observation list and recalculated a position + """ + global blah + if self.stype=="real": + print("! not supposed to do this with a real source..") + return + if len(self.associated_obs) == 0: + return + + pos_array = numarray.fromlist([[x.pos[0],x.pos[1],x.assumed_err[0],x.assumed_err[1]] for x in self.associated_obs]) + raa = numarray.fromlist([x[0] for x in pos_array]) + raerra = numarray.fromlist([x[2] for x in pos_array]) + deca = numarray.fromlist([x[1] for x in pos_array]) + decerra = numarray.fromlist([x[3] for x in pos_array]) + + ra = numarray.sum(raa/raerra**2)/numarray.sum(1.0/raerra**2) + dec = numarray.sum(deca/decerra**2)/numarray.sum(1.0/decerra**2) + raerr = math.sqrt(1.0/numarray.sum(1.0/raerra**2)) + decerr = math.sqrt(1.0/numarray.sum(1.0/decerra**2)) + self.current_pos = [ra,dec] + self.current_err = [raerr,decerr] + + def __str__(self): + a = "===== source =====" + a = "type = %s\n" % self.stype + a += "start_pos = %s\n" % self.start_pos + a += "current_pos = %s\n" % self.current_pos + a += "associated sources (total number = %i):\n" % len(self.associated_obs) + a += "-------------------\n" + for o in self.associated_obs: + v = o.__str__() + a += v + + return a + + + +class testreal: + + def __init__(self,fname="./obj_dict_309.pickle"): + self.obj_dict = None + self.load_data(fname=fname) + self.constructed_source_list = [] + self.run() + self.reg_plot_functions() + + def load_data(self,fname="./obj_dict_309.pickle"): + import cPickle + f = open(fname,"r") + obj_dict = cPickle.load(f) + f.close() + print("there are %i observations loaded from the pickle file" % len(obj_dict)) + # dstarr adds this to convert the objects into the format expected by: is_object_associated_with_source_algorithm_jbloom() + # # # # # # # # + self.obj_dict = {} + for obj_key,obj_elem in obj_dict.items(): + obj_ra = obj_dict[obj_key]['ra'] * 3600.0 + obj_dec = obj_dict[obj_key]['decl'] * 3600.0 + new_key = (obj_ra, obj_dec, obj_key[2], obj_key[3]) + self.obj_dict[new_key] = copy.deepcopy(obj_elem) + self.obj_dict[new_key]['ra'] = obj_ra + self.obj_dict[new_key]['decl'] = obj_dec + + + def reg_plot_functions(self): + self.cid1 = connect("key_press_event",self.plot_source_info) + + def plot_source_info(self,event): + + ra = event.xdata + dec = event.ydata + #print (event.key,ra,dec) + if event.key == 's': + #print self.constructed_pos[:,0] + #print self.constructed_pos[:,1] + dist = numarray.sqrt( (self.constructed_pos[:,0] - ra)**2 + (self.constructed_pos[:,1] - dec)**2) + + #print dist + #print "min distance = %f " % min(dist) + the_source_ind = numarray.compress(dist == min(dist), numarray.fromlist(range(len(self.constructed_source_list)))) + #print the_source_ind + #the_source_ind = numarray.compress(dist == min(dist),numarray.arange(len(self.constructed_source_list))) + the_source = self.constructed_source_list[the_source_ind[0]] + print(the_source) + #dist = numarray.sqrt( (the_source.current_pos[0] - self.real_pos[:,0])**2 + (the_source.current_pos[1] - self.real_pos[:,1])**2) + #print "min distances to nearest real source = %f arcsec" % min(dist) + #the_source_ind = numarray.compress(dist == min(dist), numarray.fromlist(range(len(self.real_list)))) + #the_source = self.real_list[the_source_ind[0]] + #print "That real source is at ra=%f dec=%f" % (the_source.start_pos[0],the_source.start_pos[1]) + if event.key == 'r': + dist = numarray.sqrt( (self.real_pos[:,0] - ra)**2 + (self.real_pos[:,1] - dec)**2) + + #print dist + #print "min distance = %f " % min(dist) + the_source_ind = numarray.compress(dist == min(dist), numarray.fromlist(range(len(self.real_list)))) + #print the_source_ind + #the_source_ind = numarray.compress(dist == min(dist),numarray.arange(len(self.constructed_source_list))) + the_source = self.real_list[the_source_ind[0]] + print(the_source) + + + def run(self,shuffle=True): + constructed_source_list = [] + observation_list = [] + obslist = self.obj_dict.keys() + if shuffle: + random.seed() + random.shuffle(obslist) + random.shuffle(obslist) + random.shuffle(obslist) + print("shuffled") + for theo in obslist: + # choose a real source to draw an observation from + o = obs(initial_pos=[theo[0],theo[1]],assumed_err=[theo[2],theo[3]]) + o.pos = [theo[0],theo[1]] + o.plot() + tmp = o.is_associated_with_source(constructed_source_list) + # print tmp + if tmp['answer'] == True: + # o.associate_with_source(tmp['sources']) + for s in tmp['best_source']: + # print (len(tmp['best_source']),o.pos,s.current_pos) + s.add_associated_obs(copy.deepcopy(o)) + s.recalculate_position() + else: + ## make a new source + s = source(start_pos=copy.copy(o.pos),stype='constructed',start_err=copy.copy(o.assumed_err),current_pos=copy.copy(o.pos),\ + current_err=copy.copy(o.assumed_err),associated_obs=[copy.deepcopy(o)]) + print("1 new source") + #print s + #print s.associated_obs + constructed_source_list.append(copy.deepcopy(s)) + + observation_list.append(copy.deepcopy(o)) + + for s in constructed_source_list: + # print s + s.plot('g^') + + self.constructed_source_list = constructed_source_list + self.constructed_pos = (numarray.fromlist([x.current_pos for x in self.constructed_source_list])) + + +class simulate: + + def __init__(self): + + self.constructed_source_list = [] + self.real_list = [] + self.run() + self.reg_plot_functions() + + def reg_plot_functions(self): + + self.cid1 = connect("key_press_event",self.plot_source_info) + + def plot_source_info(self,event): + + ra = event.xdata + dec = event.ydata + #print (event.key,ra,dec) + if event.key == 's': + #print self.constructed_pos[:,0] + #print self.constructed_pos[:,1] + dist = numarray.sqrt( (self.constructed_pos[:,0] - ra)**2 + (self.constructed_pos[:,1] - dec)**2) + + #print dist + #print "min distance = %f " % min(dist) + the_source_ind = numarray.compress(dist == min(dist), numarray.fromlist(range(len(self.constructed_source_list)))) + #print the_source_ind + #the_source_ind = numarray.compress(dist == min(dist),numarray.arange(len(self.constructed_source_list))) + the_source = self.constructed_source_list[the_source_ind[0]] + print(the_source) + dist = numarray.sqrt( (the_source.current_pos[0] - self.real_pos[:,0])**2 + (the_source.current_pos[1] - self.real_pos[:,1])**2) + print("min distances to nearest real source = %f arcsec" % min(dist)) + the_source_ind = numarray.compress(dist == min(dist), numarray.fromlist(range(len(self.real_list)))) + the_source = self.real_list[the_source_ind[0]] + print("That real source is at ra=%f dec=%f" % (the_source.start_pos[0],the_source.start_pos[1])) + if event.key == 'r': + dist = numarray.sqrt( (self.real_pos[:,0] - ra)**2 + (self.real_pos[:,1] - dec)**2) + + #print dist + #print "min distance = %f " % min(dist) + the_source_ind = numarray.compress(dist == min(dist), numarray.fromlist(range(len(self.real_list)))) + #print the_source_ind + #the_source_ind = numarray.compress(dist == min(dist),numarray.arange(len(self.constructed_source_list))) + the_source = self.real_list[the_source_ind[0]] + print(the_source) + + + def run(self,n_sources = 3, n_observations = 21, ra_range = [-20.0,20.0],dec_range=[-20.0,20.0],typical_err=0.3,reuse=True): + + global real_list + + clf() + # make the real sources + if reuse: + try: + type(real_list) == type([]) + except NameError: + reuse = False + real_list = [] + + for ns in range(n_sources): + if not reuse: + real_list.append(source(start_pos=[random_array.uniform(ra_range[0],ra_range[1]),random_array.uniform(dec_range[0],dec_range[1])], + stype='real',start_err=[0.0,0.0],associated_obs=[])) + # print real_list[-1] + real_list[ns].plot() + + + constructed_source_list = [] + observation_list = [] + + ## pick a vector of len n_obsevations sources to choose from from 0 --> n_source - 1 + s_start_ind = random_array.randint(0,n_sources,shape=[n_observations]) + for i in range(n_observations): + # choose a real source to draw an observation from + o = obs(initial_pos=real_list[s_start_ind[i]].start_pos,true_err=[[typical_err**2,0.0],[0.0,typical_err**2]],assumed_err=[1.1*typical_err,1.1*typical_err]) + o.observe_pos() + o.plot() + tmp = o.is_associated_with_source(constructed_source_list) + # print tmp + if tmp['answer'] == True: + # o.associate_with_source(tmp['sources']) + for s in tmp['best_source']: + # print (len(tmp['best_source']),o.pos,s.current_pos) + s.add_associated_obs(copy.deepcopy(o)) + s.recalculate_position() + else: + ## make a new source + s = source(start_pos=copy.copy(o.pos),stype='constructed',start_err=copy.copy(o.assumed_err),current_pos=copy.copy(o.pos),\ + current_err=copy.copy(o.assumed_err),associated_obs=[copy.deepcopy(o)]) + print("new source") + #print s + #print s.associated_obs + constructed_source_list.append(copy.deepcopy(s)) + + observation_list.append(copy.deepcopy(o)) + + for s in constructed_source_list: + # print s + s.plot('g^') + + ## do the comparisons between real and constructed sources + for ns in range(n_sources): + #real_list[ns].plot('ys') + pass + + self.real_list = real_list + self.constructed_source_list = constructed_source_list + self.real_pos = (numarray.fromlist([x.start_pos for x in self.real_list])) + self.constructed_pos = (numarray.fromlist([x.current_pos for x in self.constructed_source_list])) + + + #del observation_list + +if __name__ == '__main__': + #s = simulate() + tr = testreal(fname="/tmp/obj_dict.pickle_309.37471543_0.33168565") +# ipython --pylab cluster.py + +# +# ipython --pylab +#import cluster +#a = cluster.testreal(fname="/tmp/obj_dict.pickle_309.37471543_0.33168565") +#s = cluster.simulate(n_sources = 4, n_observations = 27, ra_range = [180000.0,180040],dec_range=[162000,162040],typical_err=0.3) diff --git a/mltsp/TCP/Algorithms/SpatialClustering/obj_dict.pickle b/mltsp/TCP/Algorithms/SpatialClustering/obj_dict.pickle new file mode 100755 index 00000000..2da4e85d --- /dev/null +++ b/mltsp/TCP/Algorithms/SpatialClustering/obj_dict.pickle @@ -0,0 +1,3507 @@ +(dp1 +(F49.599477999999998 +F-1.0051140000000001 +F0.55002499999999999 +F0.62002800000000002 +I0 +tp2 +(dp3 +S'decl' +p4 +F-1.0051140000000001 +sS'survey_id' +p5 +I0 +sS'src_id' +p6 +I0 +sS'm_err' +p7 +F1.15402 +sS'm' +F22.910900000000002 +sS'dec_rms' +p8 +F0.62002800000000002 +sS'ra' +p9 +F49.599477999999998 +sS'obj_ids' +p10 +(lp11 +L58930212L +aL58930213L +aL58930214L +aL58930215L +aL58930216L +asS'filts' +p12 +(lp13 +I0 +aI1 +aI2 +aI3 +aI4 +asS'ra_rms' +p14 +F0.55002499999999999 +sS't' +F54007.470821499999 +ss(F49.606530999999997 +F-1.010715 +F0.38919700000000002 +F0.30128700000000003 +I0 +tp15 +(dp16 +g4 +F-1.010715 +sg5 +I0 +sg6 +I0 +sg7 +F0.147198 +sS'm' +F20.8748 +sg8 +F0.30128700000000003 +sg9 +F49.606530999999997 +sg10 +(lp17 +L917794L +aL917795L +asg12 +(lp18 +I2 +aI3 +asg14 +F0.38919700000000002 +sS't' +F53296.382370500003 +ss(F49.595993999999997 +F-1.011733 +F0.41114899999999999 +F0.37018699999999999 +I0 +tp19 +(dp20 +g4 +F-1.011733 +sg5 +I0 +sg6 +I0 +sg7 +F0.98050199999999998 +sS'm' +F23.681000000000001 +sg8 +F0.37018699999999999 +sg9 +F49.595993999999997 +sg10 +(lp21 +L1162318L +aL1162319L +aL1162320L +aL1162321L +asg12 +(lp22 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41114899999999999 +sS't' +F53644.403088699997 +ss(F49.606515999999999 +F-1.010745 +F0.415186 +F0.711121 +I0 +tp23 +(dp24 +g4 +F-1.010745 +sg5 +I0 +sg6 +I0 +sg7 +F0.50335799999999997 +sS'm' +F22.7164 +sg8 +F0.711121 +sg9 +F49.606515999999999 +sg10 +(lp25 +L954433L +aL954434L +aL954435L +aL954436L +asg12 +(lp26 +I1 +aI2 +aI3 +aI4 +asg14 +F0.415186 +sS't' +F53296.385686299996 +ss(F49.606605999999999 +F-1.010742 +F0.59204199999999996 +F0.359074 +I0 +tp27 +(dp28 +g4 +F-1.010742 +sg5 +I0 +sg6 +I0 +sg7 +F2.4832800000000002 +sS'm' +F23.376799999999999 +sg8 +F0.359074 +sg9 +F49.606605999999999 +sg10 +(lp29 +L1113177L +aL1113178L +aL1113179L +aL1113180L +aL1113181L +asg12 +(lp30 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.59204199999999996 +sS't' +F53635.415802900003 +ss(F49.606549999999999 +F-1.010732 +F0.165905 +F0.17996100000000001 +I0 +tp31 +(dp32 +g4 +F-1.010732 +sg5 +I0 +sg6 +I0 +sg7 +F1.04233 +sS'm' +F22.428000000000001 +sg8 +F0.17996100000000001 +sg9 +F49.606549999999999 +sg10 +(lp33 +L1193947L +aL1193948L +aL1193949L +aL1193950L +asg12 +(lp34 +I1 +aI2 +aI3 +aI4 +asg14 +F0.165905 +sS't' +F53663.398670000002 +ss(F49.606552999999998 +F-1.0106919999999999 +F0.129301 +F0.16814999999999999 +I0 +tp35 +(dp36 +g4 +F-1.0106919999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.2180499999999999 +sS'm' +F21.6904 +sg8 +F0.16814999999999999 +sg9 +F49.606552999999998 +sg10 +(lp37 +L1256808L +aL1256809L +aL1256810L +aL1256811L +aL1256812L +asg12 +(lp38 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.129301 +sS't' +F53669.474221999997 +ss(F49.599502000000001 +F-1.005112 +F0.26606000000000002 +F0.23808599999999999 +I0 +tp39 +(dp40 +g4 +F-1.005112 +sg5 +I0 +sg6 +I0 +sg7 +F0.65199399999999996 +sS'm' +F21.779499999999999 +sg8 +F0.23808599999999999 +sg9 +F49.599502000000001 +sg10 +(lp41 +L1204001L +aL1204002L +aL1204003L +aL1204004L +aL1204005L +asg12 +(lp42 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.26606000000000002 +sS't' +F53665.374964199997 +ss(F49.599535000000003 +F-1.0050790000000001 +F0.698021 +F0.61603300000000005 +I0 +tp43 +(dp44 +g4 +F-1.0050790000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.1430199999999999 +sS'm' +F23.2498 +sg8 +F0.61603300000000005 +sg9 +F49.599535000000003 +sg10 +(lp45 +L810207L +aL810208L +aL810209L +aL810210L +aL810211L +asg12 +(lp46 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.698021 +sS't' +F53270.412169800002 +ss(F49.599482999999999 +F-1.0051159999999999 +F0.479105 +F0.41310599999999997 +I0 +tp47 +(dp48 +g4 +F-1.0051159999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.96343 +sS'm' +F23.250800000000002 +sg8 +F0.41310599999999997 +sg9 +F49.599482999999999 +sg10 +(lp49 +L1083104L +aL1083105L +aL1083106L +aL1083107L +aL1083108L +asg12 +(lp50 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.479105 +sS't' +F53616.446104199997 +ss(F49.606515999999999 +F-1.01071 +F0.674064 +F0.32413599999999998 +I0 +tp51 +(dp52 +g4 +F-1.01071 +sg5 +I0 +sg6 +I0 +sg7 +F2.5000800000000001 +sS'm' +F23.121500000000001 +sg8 +F0.32413599999999998 +sg9 +F49.606515999999999 +sg10 +(lp53 +L1347816L +aL1347817L +aL1347818L +aL1347819L +aL1347820L +asg12 +(lp54 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.674064 +sS't' +F53675.356339500002 +ss(F49.599485999999999 +F-1.0051110000000001 +F0.45107399999999997 +F0.23711399999999999 +I0 +tp55 +(dp56 +g4 +F-1.0051110000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.4783900000000001 +sS'm' +F22.854099999999999 +sg8 +F0.23711399999999999 +sg9 +F49.599485999999999 +sg10 +(lp57 +L1114844L +aL1114845L +aL1114846L +aL1114847L +aL1114848L +asg12 +(lp58 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.45107399999999997 +sS't' +F53639.454393300002 +ss(F49.599513000000002 +F-1.0051030000000001 +F0.30109000000000002 +F0.315083 +I0 +tp59 +(dp60 +g4 +F-1.0051030000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.32318 +sS'm' +F23.1465 +sg8 +F0.315083 +sg9 +F49.599513000000002 +sg10 +(lp61 +L885773L +aL885774L +aL885775L +aL885776L +aL885777L +asg12 +(lp62 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.30109000000000002 +sS't' +F53288.389353500002 +ss(F49.599508 +F-1.0051129999999999 +F0.41102699999999998 +F0.37002800000000002 +I0 +tp63 +(dp64 +g4 +F-1.0051129999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1473199999999999 +sS'm' +F23.184799999999999 +sg8 +F0.37002800000000002 +sg9 +F49.599508 +sg10 +(lp65 +L1161326L +aL1161327L +aL1161328L +aL1161329L +aL1161330L +asg12 +(lp66 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41102699999999998 +sS't' +F53644.401440000001 +ss(F49.599500999999997 +F-1.005066 +F0.194193 +F0.65010400000000002 +I0 +tp67 +(dp68 +g4 +F-1.005066 +sg5 +I0 +sg6 +I0 +sg7 +F4.8445499999999999 +sS'm' +F22.614100000000001 +sg8 +F0.65010400000000002 +sg9 +F49.599500999999997 +sg10 +(lp69 +L1349547L +aL1349548L +aL1349549L +aL1349550L +aL1349551L +asg12 +(lp70 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.194193 +sS't' +F53676.47597 +ss(F49.606546999999999 +F-1.0107139999999999 +F0.57704100000000003 +F0.38306600000000002 +I0 +tp71 +(dp72 +g4 +F-1.0107139999999999 +sg5 +I0 +sg6 +I0 +sg7 +F5.8055099999999999 +sS'm' +F23.195900000000002 +sg8 +F0.38306600000000002 +sg9 +F49.606546999999999 +sg10 +(lp73 +L1011348L +aL1011349L +aL1011350L +aL1011351L +aL1011352L +asg12 +(lp74 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.57704100000000003 +sS't' +F53302.385041599999 +ss(F49.599502999999999 +F-1.00512 +F0.16514400000000001 +F0.17924000000000001 +I0 +tp75 +(dp76 +g4 +F-1.00512 +sg5 +I0 +sg6 +I0 +sg7 +F0.25284699999999999 +sS'm' +F20.881699999999999 +sg8 +F0.17924000000000001 +sg9 +F49.599502999999999 +sg10 +(lp77 +L1193786L +aL1193787L +aL1193788L +aL1193789L +asg12 +(lp78 +I1 +aI2 +aI3 +aI4 +asg14 +F0.16514400000000001 +sS't' +F53663.398650399999 +ss(F49.606551000000003 +F-1.010678 +F0.20303499999999999 +F0.247894 +I0 +tp79 +(dp80 +g4 +F-1.010678 +sg5 +I0 +sg6 +I0 +sg7 +F0.51501600000000003 +sS'm' +F20.735600000000002 +sg8 +F0.247894 +sg9 +F49.606551000000003 +sg10 +(lp81 +L1428715L +aL1428716L +aL1428717L +asg12 +(lp82 +I2 +aI3 +aI4 +asg14 +F0.20303499999999999 +sS't' +F53687.419193100002 +ss(F49.603005000000003 +F-1.0086299999999999 +F0.543574 +F0.398536 +I0 +tp83 +(dp84 +g4 +F-1.0086299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.75586 +sS'm' +F23.5215 +sg8 +F0.398536 +sg9 +F49.603005000000003 +sg10 +(lp85 +L1359922L +aL1359923L +aL1359924L +aL1359925L +aL1359926L +asg12 +(lp86 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.543574 +sS't' +F53680.364027600001 +ss(F49.593780000000002 +F-1.0076719999999999 +F0.56024799999999997 +F0.55668700000000004 +I0 +tp87 +(dp88 +g4 +F-1.0076719999999999 +sg5 +I0 +sg6 +I0 +sg7 +F7.6747199999999998 +sS'm' +F25.1372 +sg8 +F0.55668700000000004 +sg9 +F49.593780000000002 +sg10 +(lp89 +L1359854L +aL1359855L +aL1359856L +aL1359857L +asg12 +(lp90 +I0 +aI1 +aI2 +aI3 +asg14 +F0.56024799999999997 +sS't' +F53680.364002000002 +ss(F49.599504000000003 +F-1.0051140000000001 +F0.19524900000000001 +F0.19229599999999999 +I0 +tp91 +(dp92 +g4 +F-1.0051140000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.4556800000000001 +sS'm' +F23.027699999999999 +sg8 +F0.19229599999999999 +sg9 +F49.599504000000003 +sg10 +(lp93 +L1245033L +aL1245034L +aL1245035L +aL1245036L +aL1245037L +asg12 +(lp94 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.19524900000000001 +sS't' +F53668.386593800002 +ss(F49.606551000000003 +F-1.010696 +F0.42405900000000002 +F0.51404799999999995 +I0 +tp95 +(dp96 +g4 +F-1.010696 +sg5 +I0 +sg6 +I0 +sg7 +F5.7760100000000003 +sS'm' +F23.1861 +sg8 +F0.51404799999999995 +sg9 +F49.606551000000003 +sg10 +(lp97 +L987286L +aL987287L +aL987288L +aL987289L +aL987290L +asg12 +(lp98 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.42405900000000002 +sS't' +F53302.385042900001 +ss(F49.599516000000001 +F-1.005107 +F0.34306500000000001 +F0.36505199999999999 +I0 +tp99 +(dp100 +g4 +F-1.005107 +sg5 +I0 +sg6 +I0 +sg7 +F3.0487099999999998 +sS'm' +F23.559799999999999 +sg8 +F0.36505199999999999 +sg9 +F49.599516000000001 +sg10 +(lp101 +L862066L +aL862067L +aL862068L +aL862069L +aL862070L +asg12 +(lp102 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.34306500000000001 +sS't' +F53286.430859799999 +ss(F49.599494 +F-1.005109 +F0.189109 +F0.23908399999999999 +I0 +tp103 +(dp104 +g4 +F-1.005109 +sg5 +I0 +sg6 +I0 +sg7 +F0.145704 +sS'm' +F20.589600000000001 +sg8 +F0.23908399999999999 +sg9 +F49.599494 +sg10 +(lp105 +L1366249L +aL1366250L +aL1366251L +aL1366252L +asg12 +(lp106 +I1 +aI2 +aI3 +aI4 +asg14 +F0.189109 +sS't' +F53683.424227199997 +ss(F49.606557000000002 +F-1.0107269999999999 +F0.47915099999999999 +F0.41315499999999999 +I0 +tp107 +(dp108 +g4 +F-1.0107269999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.51000800000000002 +sS'm' +F22.668700000000001 +sg8 +F0.41315499999999999 +sg9 +F49.606557000000002 +sg10 +(lp109 +L1084193L +aL1084194L +aL1084195L +aL1084196L +asg12 +(lp110 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47915099999999999 +sS't' +F53616.447782299998 +ss(F49.599502999999999 +F-1.0051060000000001 +F0.324131 +F0.27618100000000001 +I0 +tp111 +(dp112 +g4 +F-1.0051060000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.114803 +sS'm' +F20.672799999999999 +sg8 +F0.27618100000000001 +sg9 +F49.599502999999999 +sg10 +(lp113 +L1284120L +aL1284121L +aL1284122L +aL1284123L +asg12 +(lp114 +I1 +aI2 +aI3 +aI4 +asg14 +F0.324131 +sS't' +F53670.393103299997 +ss(F49.603000000000002 +F-1.0086850000000001 +F0.43342900000000001 +F0.53063899999999997 +I0 +tp115 +(dp116 +g4 +F-1.0086850000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.58168 +sS'm' +F23.024999999999999 +sg8 +F0.53063899999999997 +sg9 +F49.603000000000002 +sg10 +(lp117 +L988544L +aL988545L +aL988546L +aL988547L +aL988548L +asg12 +(lp118 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.43342900000000001 +sS't' +F53302.385032999999 +ss(F49.602893000000002 +F-1.008594 +F0.68240599999999996 +F0.34113100000000002 +I0 +tp119 +(dp120 +g4 +F-1.008594 +sg5 +I0 +sg6 +I0 +sg7 +F1.03311 +sS'm' +F22.747199999999999 +sg8 +F0.34113100000000002 +sg9 +F49.602893000000002 +sg10 +(lp121 +L1348949L +aL1348950L +aL1348951L +aL1348952L +aL1348953L +asg12 +(lp122 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.68240599999999996 +sS't' +F53675.356329399998 +ss(F49.599483999999997 +F-1.005145 +F0.415074 +F0.71105499999999999 +I0 +tp123 +(dp124 +g4 +F-1.005145 +sg5 +I0 +sg6 +I0 +sg7 +F2.3523700000000001 +sS'm' +F23.581800000000001 +sg8 +F0.71105499999999999 +sg9 +F49.599483999999997 +sg10 +(lp125 +L953834L +aL953835L +aL953836L +aL953837L +aL953838L +asg12 +(lp126 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.415074 +sS't' +F53296.384008300003 +ss(F49.606549000000001 +F-1.0107349999999999 +F0.72906899999999997 +F0.61208099999999999 +I0 +tp127 +(dp128 +g4 +F-1.0107349999999999 +sg5 +I0 +sg6 +I0 +sg7 +F9.3339200000000009 +sS'm' +F25.202500000000001 +sg8 +F0.61208099999999999 +sg9 +F49.606549000000001 +sg10 +(lp129 +L850090L +aL850091L +aL850092L +aL850093L +aL850094L +asg12 +(lp130 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.72906899999999997 +sS't' +F53272.462159299997 +ss(F49.599487000000003 +F-1.0050969999999999 +F0.20135900000000001 +F0.24535399999999999 +I0 +tp131 +(dp132 +g4 +F-1.0050969999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.73814 +sS'm' +F22.4633 +sg8 +F0.24535399999999999 +sg9 +F49.599487000000003 +sg10 +(lp133 +L1428604L +aL1428605L +aL1428606L +aL1428607L +aL1428608L +asg12 +(lp134 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.20135900000000001 +sS't' +F53687.420832000003 +ss(F49.606619000000002 +F-1.0106999999999999 +F0.166155 +F0.17158000000000001 +I0 +tp135 +(dp136 +g4 +F-1.0106999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.2820299999999998 +sS'm' +F22.993099999999998 +sg8 +F0.17158000000000001 +sg9 +F49.606619000000002 +sg10 +(lp137 +L1453068L +aL1453069L +aL1453070L +aL1453071L +asg12 +(lp138 +I1 +aI2 +aI3 +aI4 +asg14 +F0.166155 +sS't' +F53693.367586300003 +ss(F49.606546000000002 +F-1.0107299999999999 +F0.27662399999999998 +F0.25041600000000003 +I0 +tp139 +(dp140 +g4 +F-1.0107299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.37349900000000003 +sS'm' +F22.387899999999998 +sg8 +F0.25041600000000003 +sg9 +F49.606546000000002 +sg10 +(lp141 +L1480488L +aL1480489L +aL1480490L +aL1480491L +asg12 +(lp142 +I1 +aI2 +aI3 +aI4 +asg14 +F0.27662399999999998 +sS't' +F53704.350906699998 +ss(F49.606552999999998 +F-1.0107379999999999 +F0.54313100000000003 +F0.31721100000000002 +I0 +tp143 +(dp144 +g4 +F-1.0107379999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.1529299999999996 +sS'm' +F23.717099999999999 +sg8 +F0.31721100000000002 +sg9 +F49.606552999999998 +sg10 +(lp145 +L1033779L +aL1033780L +aL1033781L +aL1033782L +aL1033783L +asg12 +(lp146 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.54313100000000003 +sS't' +F53312.340553299997 +ss(F49.606566999999998 +F-1.010683 +F0.19367799999999999 +F0.40159899999999998 +I0 +tp147 +(dp148 +g4 +F-1.010683 +sg5 +I0 +sg6 +I0 +sg7 +F9.7201500000000003 +sS'm' +F24.712 +sg8 +F0.40159899999999998 +sg9 +F49.606566999999998 +sg10 +(lp149 +L271775697L +aL271775698L +aL271775699L +aL271775700L +aL271775701L +asg12 +(lp150 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.19367799999999999 +sS't' +F54060.393457600003 +ss(F49.599502000000001 +F-1.0051000000000001 +F0.416047 +F0.47404200000000002 +I0 +tp151 +(dp152 +g4 +F-1.0051000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F5.0745300000000002 +sS'm' +F24.3172 +sg8 +F0.47404200000000002 +sg9 +F49.599502000000001 +sg10 +(lp153 +L1058522L +aL1058523L +aL1058524L +aL1058525L +aL1058526L +asg12 +(lp154 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.416047 +sS't' +F53314.341752799999 +ss(F49.599490000000003 +F-1.005104 +F0.12828500000000001 +F0.167291 +I0 +tp155 +(dp156 +g4 +F-1.005104 +sg5 +I0 +sg6 +I0 +sg7 +F1.3030600000000001 +sS'm' +F21.949300000000001 +sg8 +F0.167291 +sg9 +F49.599490000000003 +sg10 +(lp157 +L1255728L +aL1255729L +aL1255730L +aL1255731L +aL1255732L +asg12 +(lp158 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.12828500000000001 +sS't' +F53669.474202400001 +ss(F49.603043999999997 +F-1.0085630000000001 +F0.67572200000000004 +F0.60250999999999999 +I0 +tp159 +(dp160 +g4 +F-1.0085630000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.6905699999999999 +sS'm' +F23.2439 +sg8 +F0.60250999999999999 +sg9 +F49.603043999999997 +sg10 +(lp161 +L1325744L +aL1325745L +aL1325746L +aL1325747L +aL1325748L +asg12 +(lp162 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.67572200000000004 +sS't' +F53673.359442100002 +ss(F49.606575999999997 +F-1.0107079999999999 +F0.30111900000000003 +F0.31509399999999999 +I0 +tp163 +(dp164 +g4 +F-1.0107079999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.347528 +sS'm' +F22.670500000000001 +sg8 +F0.31509399999999999 +sg9 +F49.606575999999997 +sg10 +(lp165 +L885944L +aL885945L +aL885946L +aL885947L +asg12 +(lp166 +I1 +aI2 +aI3 +aI4 +asg14 +F0.30111900000000003 +sS't' +F53288.391031500003 +ss(F49.599474999999998 +F-1.0051000000000001 +F0.67402799999999996 +F0.32405800000000001 +I0 +tp167 +(dp168 +g4 +F-1.0051000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.9274500000000001 +sS'm' +F23.433399999999999 +sg8 +F0.32405800000000001 +sg9 +F49.599474999999998 +sg10 +(lp169 +L1347709L +aL1347710L +aL1347711L +aL1347712L +aL1347713L +asg12 +(lp170 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.67402799999999996 +sS't' +F53675.356319899998 +ss(F49.599499000000002 +F-1.005128 +F0.38005299999999997 +F0.47803600000000002 +I0 +tp171 +(dp172 +g4 +F-1.005128 +sg5 +I0 +sg6 +I0 +sg7 +F4.9840900000000001 +sS'm' +F24.625499999999999 +sg8 +F0.47803600000000002 +sg9 +F49.599499000000002 +sg10 +(lp173 +L966302L +aL966303L +aL966304L +aL966305L +aL966306L +asg12 +(lp174 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.38005299999999997 +sS't' +F53298.433802599997 +ss(F49.604802999999997 +F-1.008127 +F0.40374399999999999 +F0.570075 +I0 +tp175 +(dp176 +g4 +F-1.008127 +sg5 +I0 +sg6 +I0 +sg7 +F1.7718499999999999 +sS'm' +F24.3569 +sg8 +F0.570075 +sg9 +F49.604802999999997 +sg10 +(lp177 +L967854L +aL967855L +aL967856L +aL967857L +asg12 +(lp178 +I1 +aI2 +aI3 +aI4 +asg14 +F0.40374399999999999 +sS't' +F53298.435475799997 +ss(F49.606575999999997 +F-1.0106999999999999 +F0.411049 +F0.37005700000000002 +I0 +tp179 +(dp180 +g4 +F-1.0106999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.35704 +sS'm' +F23.466899999999999 +sg8 +F0.37005700000000002 +sg9 +F49.606575999999997 +sg10 +(lp181 +L1161506L +aL1161507L +aL1161508L +aL1161509L +aL1161510L +asg12 +(lp182 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.411049 +sS't' +F53644.401459599998 +ss(F49.606574999999999 +F-1.0106869999999999 +F0.41811599999999999 +F0.40118599999999999 +I0 +tp183 +(dp184 +g4 +F-1.0106869999999999 +sg5 +I0 +sg6 +I0 +sg7 +F8.9525699999999997 +sS'm' +F23.3752 +sg8 +F0.40118599999999999 +sg9 +F49.606574999999999 +sg10 +(lp185 +L1473333L +aL1473334L +aL1473335L +aL1473336L +aL1473337L +asg12 +(lp186 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41811599999999999 +sS't' +F53699.386762900001 +ss(F49.606577000000001 +F-1.0106900000000001 +F0.67102600000000001 +F0.59904000000000002 +I0 +tp187 +(dp188 +g4 +F-1.0106900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.30198999999999998 +sS'm' +F22.6309 +sg8 +F0.59904000000000002 +sg9 +F49.606577000000001 +sg10 +(lp189 +L1324488L +aL1324489L +aL1324490L +aL1324491L +asg12 +(lp190 +I1 +aI2 +aI3 +aI4 +asg14 +F0.67102600000000001 +sS't' +F53673.3611103 +ss(F49.602970999999997 +F-1.008688 +F0.739124 +F0.61629999999999996 +I0 +tp191 +(dp192 +g4 +F-1.008688 +sg5 +I0 +sg6 +I0 +sg7 +F4.0416299999999996 +sS'm' +F25.238600000000002 +sg8 +F0.61629999999999996 +sg9 +F49.602970999999997 +sg10 +(lp193 +L851231L +aL851232L +aL851233L +aL851234L +asg12 +(lp194 +I1 +aI2 +aI3 +aI4 +asg14 +F0.739124 +sS't' +F53272.463807799999 +ss(F49.603039000000003 +F-1.0085390000000001 +F0.52428900000000001 +F0.53886299999999998 +I0 +tp195 +(dp196 +g4 +F-1.0085390000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.0007100000000002 +sS'm' +F23.4803 +sg8 +F0.53886299999999998 +sg9 +F49.603039000000003 +sg10 +(lp197 +L1294317L +aL1294318L +aL1294319L +aL1294320L +asg12 +(lp198 +I0 +aI2 +aI3 +aI4 +asg14 +F0.52428900000000001 +sS't' +F53673.359443100002 +ss(F49.599502999999999 +F-1.0051060000000001 +F0.26505000000000001 +F0.20507700000000001 +I0 +tp199 +(dp200 +g4 +F-1.0051060000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.6772100000000001 +sS'm' +F23.153500000000001 +sg8 +F0.20507700000000001 +sg9 +F49.599502999999999 +sg10 +(lp201 +L909362L +aL909363L +aL909364L +aL909365L +aL909366L +asg12 +(lp202 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.26505000000000001 +sS't' +F53294.437025899999 +ss(F49.599490000000003 +F-1.0051190000000001 +F0.27608199999999999 +F0.250114 +I0 +tp203 +(dp204 +g4 +F-1.0051190000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.43391 +sS'm' +F23.284500000000001 +sg8 +F0.250114 +sg9 +F49.599490000000003 +sg10 +(lp205 +L1479914L +aL1479915L +aL1479916L +aL1479917L +aL1479918L +asg12 +(lp206 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.27608199999999999 +sS't' +F53704.349228699997 +ss(F49.599798 +F-1.005107 +F0.65103100000000003 +F0.92102099999999998 +I0 +tp207 +(dp208 +g4 +F-1.005107 +sg5 +I0 +sg6 +I0 +sg7 +F0.14508599999999999 +sS'm' +F20.602499999999999 +sg8 +F0.92102099999999998 +sg9 +F49.599798 +sg10 +(lp209 +L1399093L +aL1399094L +aL1399095L +aL1399096L +asg12 +(lp210 +I1 +aI2 +aI3 +aI4 +asg14 +F0.65103100000000003 +sS't' +F53683.424226299998 +ss(F49.606591999999999 +F-1.0106889999999999 +F0.69802699999999995 +F0.61603699999999995 +I0 +tp211 +(dp212 +g4 +F-1.0106889999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.27964800000000001 +sS'm' +F22.602399999999999 +sg8 +F0.61603699999999995 +sg9 +F49.606591999999999 +sg10 +(lp213 +L810453L +aL810454L +aL810455L +aL810456L +asg12 +(lp214 +I1 +aI2 +aI3 +aI4 +asg14 +F0.69802699999999995 +sS't' +F53270.413847900003 +ss(F49.599487000000003 +F-1.0051220000000001 +F0.55005899999999996 +F0.62007500000000004 +I0 +tp215 +(dp216 +g4 +F-1.0051220000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.62334 +sS'm' +F23.278400000000001 +sg8 +F0.62007500000000004 +sg9 +F49.599487000000003 +sg10 +(lp217 +L58930207L +aL58930208L +aL58930209L +aL58930210L +aL58930211L +asg12 +(lp218 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.55005899999999996 +sS't' +F54007.4708216 +ss(F49.606526000000002 +F-1.010678 +F0.30541000000000001 +F0.267401 +I0 +tp219 +(dp220 +g4 +F-1.010678 +sg5 +I0 +sg6 +I0 +sg7 +F0.66674100000000003 +sS'm' +F22.4923 +sg8 +F0.267401 +sg9 +F49.606526000000002 +sg10 +(lp221 +L1178237L +aL1178238L +aL1178239L +aL1178240L +asg12 +(lp222 +I1 +aI2 +aI3 +aI4 +asg14 +F0.30541000000000001 +sS't' +F53657.414121499998 +ss(F49.606574000000002 +F-1.010707 +F0.77722199999999997 +F0.60626999999999998 +I0 +tp223 +(dp224 +g4 +F-1.010707 +sg5 +I0 +sg6 +I0 +sg7 +F0.99794099999999997 +sS'm' +F22.825500000000002 +sg8 +F0.60626999999999998 +sg9 +F49.606574000000002 +sg10 +(lp225 +L1137053L +aL1137054L +aL1137055L +aL1137056L +aL1137057L +asg12 +(lp226 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77722199999999997 +sS't' +F53641.453578200002 +ss(F49.599500999999997 +F-1.0051079999999999 +F0.42402400000000001 +F0.51402400000000004 +I0 +tp227 +(dp228 +g4 +F-1.0051079999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.0011299999999999 +sS'm' +F24.039899999999999 +sg8 +F0.51402400000000004 +sg9 +F49.599500999999997 +sg10 +(lp229 +L987170L +aL987171L +aL987172L +aL987173L +aL987174L +asg12 +(lp230 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.42402400000000001 +sS't' +F53302.385023299998 +ss(F49.606583000000001 +F-1.0107109999999999 +F0.34311999999999998 +F0.36510900000000002 +I0 +tp231 +(dp232 +g4 +F-1.0107109999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.38601999999999997 +sS'm' +F22.493600000000001 +sg8 +F0.36510900000000002 +sg9 +F49.606583000000001 +sg10 +(lp233 +L862493L +aL862494L +aL862495L +aL862496L +asg12 +(lp234 +I1 +aI2 +aI3 +aI4 +asg14 +F0.34311999999999998 +sS't' +F53286.4325379 +ss(F49.599519999999998 +F-1.005072 +F0.499031 +F0.37904700000000002 +I0 +tp235 +(dp236 +g4 +F-1.005072 +sg5 +I0 +sg6 +I0 +sg7 +F1.1727799999999999 +sS'm' +F22.911300000000001 +sg8 +F0.37904700000000002 +sg9 +F49.599519999999998 +sg10 +(lp237 +L114556197L +aL114556198L +aL114556199L +aL114556200L +aL114556201L +asg12 +(lp238 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.499031 +sS't' +F54007.470822900003 +ss(F49.599513000000002 +F-1.005085 +F0.192384 +F0.401115 +I0 +tp239 +(dp240 +g4 +F-1.005085 +sg5 +I0 +sg6 +I0 +sg7 +F0.19079699999999999 +sS'm' +F20.8035 +sg8 +F0.401115 +sg9 +F49.599513000000002 +sg10 +(lp241 +L271775156L +aL271775157L +aL271775158L +aL271775159L +asg12 +(lp242 +I1 +aI2 +aI3 +aI4 +asg14 +F0.192384 +sS't' +F54060.395096400003 +ss(F49.599477999999998 +F-1.0051110000000001 +F0.30512299999999998 +F0.26712200000000003 +I0 +tp243 +(dp244 +g4 +F-1.0051110000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.75064 +sS'm' +F22.784300000000002 +sg8 +F0.26712200000000003 +sg9 +F49.599477999999998 +sg10 +(lp245 +L1177287L +aL1177288L +aL1177289L +aL1177290L +aL1177291L +asg12 +(lp246 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.30512299999999998 +sS't' +F53657.412443499998 +ss(F49.606563999999999 +F-1.0106999999999999 +F0.59913400000000006 +F0.46720099999999998 +I0 +tp247 +(dp248 +g4 +F-1.0106999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.55537800000000004 +sS'm' +F22.5748 +sg8 +F0.46720099999999998 +sg9 +F49.606563999999999 +sg10 +(lp249 +L1068218L +aL1068219L +aL1068220L +aL1068221L +asg12 +(lp250 +I1 +aI2 +aI3 +aI4 +asg14 +F0.59913400000000006 +sS't' +F53319.331229299998 +ss(F49.606552000000001 +F-1.01071 +F0.324347 +F0.27650400000000003 +I0 +tp251 +(dp252 +g4 +F-1.01071 +sg5 +I0 +sg6 +I0 +sg7 +F2.5003299999999999 +sS'm' +F22.7286 +sg8 +F0.27650400000000003 +sg9 +F49.606552000000001 +sg10 +(lp253 +L1285021L +aL1285022L +aL1285023L +aL1285024L +asg12 +(lp254 +I1 +aI2 +aI3 +aI4 +asg14 +F0.324347 +sS't' +F53670.393122900001 +ss(F49.599516000000001 +F-1.00508 +F0.53801600000000005 +F0.39303500000000002 +I0 +tp255 +(dp256 +g4 +F-1.00508 +sg5 +I0 +sg6 +I0 +sg7 +F2.8658299999999999 +sS'm' +F24.0609 +sg8 +F0.39303500000000002 +sg9 +F49.599516000000001 +sg10 +(lp257 +L1358367L +aL1358368L +aL1358369L +aL1358370L +aL1358371L +asg12 +(lp258 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.53801600000000005 +sS't' +F53680.364017899999 +ss(F49.606538 +F-1.01071 +F0.55006500000000003 +F0.62007599999999996 +I0 +tp259 +(dp260 +g4 +F-1.01071 +sg5 +I0 +sg6 +I0 +sg7 +F2.3589699999999998 +sS'm' +F24.239599999999999 +sg8 +F0.62007599999999996 +sg9 +F49.606538 +sg10 +(lp261 +L58930477L +aL58930478L +aL58930479L +aL58930480L +aL58930481L +asg12 +(lp262 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.55006500000000003 +sS't' +F54007.470841200004 +ss(F49.594420999999997 +F-1.007871 +F0.28323199999999998 +F0.28316999999999998 +I0 +tp263 +(dp264 +g4 +F-1.007871 +sg5 +I0 +sg6 +I0 +sg7 +F1.9009199999999999 +sS'm' +F22.8413 +sg8 +F0.28316999999999998 +sg9 +F49.594420999999997 +sg10 +(lp265 +L1205404L +aL1205405L +aL1205406L +asg12 +(lp266 +I0 +aI1 +aI2 +asg14 +F0.28323199999999998 +sS't' +F53665.374950099998 +ss(F49.599474999999998 +F-1.005198 +F0.70903000000000005 +F0.89205000000000001 +I0 +tp267 +(dp268 +g4 +F-1.005198 +sg5 +I0 +sg6 +I0 +sg7 +F0.18834400000000001 +sS'm' +F20.875499999999999 +sg8 +F0.89205000000000001 +sg9 +F49.599474999999998 +sg10 +(lp269 +L1421146L +aL1421147L +aL1421148L +aL1421149L +asg12 +(lp270 +I1 +aI2 +aI3 +aI4 +asg14 +F0.70903000000000005 +sS't' +F53686.3651073 +ss(F49.606547999999997 +F-1.010702 +F0.41622799999999999 +F0.474161 +I0 +tp271 +(dp272 +g4 +F-1.010702 +sg5 +I0 +sg6 +I0 +sg7 +F0.43813000000000002 +sS'm' +F22.483599999999999 +sg8 +F0.474161 +sg9 +F49.606547999999997 +sg10 +(lp273 +L1058626L +aL1058627L +aL1058628L +aL1058629L +asg12 +(lp274 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41622799999999999 +sS't' +F53314.3434308 +ss(F49.599508 +F-1.005066 +F0.51803299999999997 +F0.53504300000000005 +I0 +tp275 +(dp276 +g4 +F-1.005066 +sg5 +I0 +sg6 +I0 +sg7 +F0.96933400000000003 +sS'm' +F22.828900000000001 +sg8 +F0.53504300000000005 +sg9 +F49.599508 +sg10 +(lp277 +L1292126L +aL1292127L +aL1292128L +aL1292129L +aL1292130L +asg12 +(lp278 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.51803299999999997 +sS't' +F53673.3594333 +ss(F49.599518000000003 +F-1.005088 +F0.67102399999999995 +F0.59904100000000005 +I0 +tp279 +(dp280 +g4 +F-1.005088 +sg5 +I0 +sg6 +I0 +sg7 +F1.05287 +sS'm' +F22.9054 +sg8 +F0.59904100000000005 +sg9 +F49.599518000000003 +sg10 +(lp281 +L1323889L +aL1323890L +aL1323891L +aL1323892L +aL1323893L +asg12 +(lp282 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.67102399999999995 +sS't' +F53673.3594323 +ss(F49.599496000000002 +F-1.0051060000000001 +F0.38907999999999998 +F0.30113200000000001 +I0 +tp283 +(dp284 +g4 +F-1.0051060000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.6355900000000001 +sS'm' +F23.494299999999999 +sg8 +F0.30113200000000001 +sg9 +F49.599496000000002 +sg10 +(lp285 +L916437L +aL916438L +aL916439L +aL916440L +aL916441L +asg12 +(lp286 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.38907999999999998 +sS't' +F53296.384009599999 +ss(F49.599513000000002 +F-1.0051380000000001 +F0.59202399999999999 +F0.35904799999999998 +I0 +tp287 +(dp288 +g4 +F-1.0051380000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.25929099999999999 +sS'm' +F21.3705 +sg8 +F0.35904799999999998 +sg9 +F49.599513000000002 +sg10 +(lp289 +L1113014L +aL1113015L +aL1113016L +aL1113017L +asg12 +(lp290 +I1 +aI2 +aI3 +aI4 +asg14 +F0.59202399999999999 +sS't' +F53635.417441600002 +ss(F49.602998999999997 +F-1.008705 +F0.58464000000000005 +F0.41659200000000002 +I0 +tp291 +(dp292 +g4 +F-1.008705 +sg5 +I0 +sg6 +I0 +sg7 +F1.72224 +sS'm' +F23.1004 +sg8 +F0.41659200000000002 +sg9 +F49.602998999999997 +sg10 +(lp293 +L1011960L +aL1011961L +aL1011962L +aL1011963L +aL1011964L +asg12 +(lp294 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.58464000000000005 +sS't' +F53302.385031799997 +ss(F49.606544 +F-1.010723 +F0.19548599999999999 +F0.19259699999999999 +I0 +tp295 +(dp296 +g4 +F-1.010723 +sg5 +I0 +sg6 +I0 +sg7 +F0.74617599999999995 +sS'm' +F22.6036 +sg8 +F0.19259699999999999 +sg9 +F49.606544 +sg10 +(lp297 +L1245513L +aL1245514L +aL1245515L +aL1245516L +asg12 +(lp298 +I1 +aI2 +aI3 +aI4 +asg14 +F0.19548599999999999 +sS't' +F53668.388271800002 +ss(F49.597689000000003 +F-1.001153 +F0.50007400000000002 +F0.50470099999999996 +I0 +tp299 +(dp300 +g4 +F-1.001153 +sg5 +I0 +sg6 +I0 +sg7 +F6.0804200000000002 +sS'm' +F23.638400000000001 +sg8 +F0.50470099999999996 +sg9 +F49.597689000000003 +sg10 +(lp301 +L1194104L +aL1194105L +asg12 +(lp302 +I0 +aI3 +asg14 +F0.50007400000000002 +sS't' +F53663.396986899999 +ss(F49.599541000000002 +F-1.0051110000000001 +F0.742031 +F0.41505199999999998 +I0 +tp303 +(dp304 +g4 +F-1.0051110000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.187559 +sS'm' +F20.845500000000001 +sg8 +F0.41505199999999998 +sg9 +F49.599541000000002 +sg10 +(lp305 +L1516370L +aL1516371L +aL1516372L +aL1516373L +asg12 +(lp306 +I1 +aI2 +aI3 +aI4 +asg14 +F0.742031 +sS't' +F53989.4469101 +ss(F49.606574000000002 +F-1.01071 +F0.74206000000000005 +F0.41509400000000002 +I0 +tp307 +(dp308 +g4 +F-1.01071 +sg5 +I0 +sg6 +I0 +sg7 +F0.79056899999999997 +sS'm' +F22.3828 +sg8 +F0.41509400000000002 +sg9 +F49.606574000000002 +sg10 +(lp309 +L1516516L +aL1516517L +aL1516518L +aL1516519L +asg12 +(lp310 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74206000000000005 +sS't' +F53989.446929600002 +ss(F49.606535999999998 +F-1.0107699999999999 +F0.709063 +F0.89208500000000002 +I0 +tp311 +(dp312 +g4 +F-1.0107699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.3829899999999999 +sS'm' +F23.216899999999999 +sg8 +F0.89208500000000002 +sg9 +F49.606535999999998 +sg10 +(lp313 +L1421435L +aL1421436L +aL1421437L +aL1421438L +asg12 +(lp314 +I1 +aI2 +aI3 +aI4 +asg14 +F0.709063 +sS't' +F53686.365126899997 +ss(F49.606535000000001 +F-1.010696 +F0.45109700000000003 +F0.237155 +I0 +tp315 +(dp316 +g4 +F-1.010696 +sg5 +I0 +sg6 +I0 +sg7 +F8.6997 +sS'm' +F24.788 +sg8 +F0.237155 +sg9 +F49.606535000000001 +sg10 +(lp317 +L1115038L +aL1115039L +aL1115040L +aL1115041L +aL1115042L +asg12 +(lp318 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.45109700000000003 +sS't' +F53639.454412899999 +ss(F49.602995999999997 +F-1.0086919999999999 +F0.31084000000000001 +F0.323266 +I0 +tp319 +(dp320 +g4 +F-1.0086919999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.98572199999999999 +sS'm' +F23.827400000000001 +sg8 +F0.323266 +sg9 +F49.602995999999997 +sg10 +(lp321 +L887294L +aL887295L +aL887296L +aL887297L +asg12 +(lp322 +I1 +aI2 +aI3 +aI4 +asg14 +F0.31084000000000001 +sS't' +F53288.3910216 +ss(F49.603006000000001 +F-1.0086710000000001 +F0.41386099999999998 +F0.48358699999999999 +I0 +tp323 +(dp324 +g4 +F-1.0086710000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.27826 +sS'm' +F23.304500000000001 +sg8 +F0.48358699999999999 +sg9 +F49.603006000000001 +sg10 +(lp325 +L967858L +aL967859L +aL967860L +aL967861L +aL967862L +asg12 +(lp326 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41386099999999998 +sS't' +F53298.433812399999 +ss(F49.602964999999998 +F-1.0086569999999999 +F0.41203000000000001 +F0.37142799999999998 +I0 +tp327 +(dp328 +g4 +F-1.0086569999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.86317 +sS'm' +F23.722100000000001 +sg8 +F0.37142799999999998 +sg9 +F49.602964999999998 +sg10 +(lp329 +L1163138L +aL1163139L +aL1163140L +aL1163141L +aL1163142L +asg12 +(lp330 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41203000000000001 +sS't' +F53644.401449600002 +ss(F49.606563999999999 +F-1.010724 +F0.26614700000000002 +F0.23818600000000001 +I0 +tp331 +(dp332 +g4 +F-1.010724 +sg5 +I0 +sg6 +I0 +sg7 +F1.11686 +sS'm' +F23.1538 +sg8 +F0.23818600000000001 +sg9 +F49.606563999999999 +sg10 +(lp333 +L1204115L +aL1204116L +aL1204117L +aL1204118L +asg12 +(lp334 +I1 +aI2 +aI3 +aI4 +asg14 +F0.26614700000000002 +sS't' +F53665.376642299998 +ss(F49.602975000000001 +F-1.008616 +F0.69839399999999996 +F0.61632600000000004 +I0 +tp335 +(dp336 +g4 +F-1.008616 +sg5 +I0 +sg6 +I0 +sg7 +F9.0975699999999993 +sS'm' +F25.522500000000001 +sg8 +F0.61632600000000004 +sg9 +F49.602975000000001 +sg10 +(lp337 +L811721L +aL811722L +aL811723L +aL811724L +aL811725L +asg12 +(lp338 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.69839399999999996 +sS't' +F53270.412179400002 +ss(F49.606563999999999 +F-1.010715 +F0.38012400000000002 +F0.47808800000000001 +I0 +tp339 +(dp340 +g4 +F-1.010715 +sg5 +I0 +sg6 +I0 +sg7 +F0.38726899999999997 +sS'm' +F22.678100000000001 +sg8 +F0.47808800000000001 +sg9 +F49.606563999999999 +sg10 +(lp341 +L966452L +aL966453L +aL966454L +aL966455L +asg12 +(lp342 +I1 +aI2 +aI3 +aI4 +asg14 +F0.38012400000000002 +sS't' +F53298.435480699998 +ss(F49.599474999999998 +F-1.005198 +F0.709036 +F0.89206200000000002 +I0 +tp343 +(dp344 +g4 +F-1.005198 +sg5 +I0 +sg6 +I0 +sg7 +F0.18834500000000001 +sS'm' +F20.879899999999999 +sg8 +F0.89206200000000002 +sg9 +F49.599474999999998 +sg10 +(lp345 +L1421142L +aL1421143L +aL1421144L +aL1421145L +asg12 +(lp346 +I1 +aI2 +aI3 +aI4 +asg14 +F0.709036 +sS't' +F53686.3651073 +ss(F49.595993999999997 +F-1.011733 +F0.41392699999999999 +F0.37348999999999999 +I0 +tp347 +(dp348 +g4 +F-1.011733 +sg5 +I0 +sg6 +I0 +sg7 +F2.5001000000000002 +sS'm' +F23.572800000000001 +sg8 +F0.37348999999999999 +sg9 +F49.595993999999997 +sg10 +(lp349 +L1162322L +aL1162323L +aL1162324L +aL1162325L +aL1162326L +asg12 +(lp350 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41392699999999999 +sS't' +F53644.4014302 +ss(F49.599513999999999 +F-1.005107 +F0.729043 +F0.61205100000000001 +I0 +tp351 +(dp352 +g4 +F-1.005107 +sg5 +I0 +sg6 +I0 +sg7 +F0.93818699999999999 +sS'm' +F22.685099999999998 +sg8 +F0.61205100000000001 +sg9 +F49.599513999999999 +sg10 +(lp353 +L849745L +aL849746L +aL849747L +aL849748L +aL849749L +asg12 +(lp354 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.729043 +sS't' +F53272.462139800002 +ss(F49.606560000000002 +F-1.010699 +F0.19544300000000001 +F0.65048899999999998 +I0 +tp355 +(dp356 +g4 +F-1.010699 +sg5 +I0 +sg6 +I0 +sg7 +F1.7534400000000001 +sS'm' +F21.466999999999999 +sg8 +F0.65048899999999998 +sg9 +F49.606560000000002 +sg10 +(lp357 +L1350015L +aL1350016L +aL1350017L +aL1350018L +aL1350019L +asg12 +(lp358 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.19544300000000001 +sS't' +F53676.475989600003 +ss(F49.606575999999997 +F-1.010691 +F0.538161 +F0.39316800000000002 +I0 +tp359 +(dp360 +g4 +F-1.010691 +sg5 +I0 +sg6 +I0 +sg7 +F0.80276800000000004 +sS'm' +F22.740300000000001 +sg8 +F0.39316800000000002 +sg9 +F49.606575999999997 +sg10 +(lp361 +L1358553L +aL1358554L +aL1358555L +aL1358556L +aL1358557L +asg12 +(lp362 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.538161 +sS't' +F53680.364037500003 +ss(F49.599497999999997 +F-1.005118 +F0.54305400000000004 +F0.31709300000000001 +I0 +tp363 +(dp364 +g4 +F-1.005118 +sg5 +I0 +sg6 +I0 +sg7 +F1.4847600000000001 +sS'm' +F22.5947 +sg8 +F0.31709300000000001 +sg9 +F49.599497999999997 +sg10 +(lp365 +L1032664L +aL1032665L +aL1032666L +aL1032667L +aL1032668L +asg12 +(lp366 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.54305400000000004 +sS't' +F53312.3405337 +ss(F49.606565000000003 +F-1.0107139999999999 +F0.26513999999999999 +F0.20519399999999999 +I0 +tp367 +(dp368 +g4 +F-1.0107139999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.33516600000000002 +sS'm' +F22.536000000000001 +sg8 +F0.20519399999999999 +sg9 +F49.606565000000003 +sg10 +(lp369 +L909394L +aL909395L +aL909396L +aL909397L +asg12 +(lp370 +I1 +aI2 +aI3 +aI4 +asg14 +F0.26513999999999999 +sS't' +F53294.438704 +ss(F49.599511999999997 +F-1.005098 +F0.599051 +F0.46707199999999999 +I0 +tp371 +(dp372 +g4 +F-1.005098 +sg5 +I0 +sg6 +I0 +sg7 +F0.127806 +sS'm' +F20.8611 +sg8 +F0.46707199999999999 +sg9 +F49.599511999999997 +sg10 +(lp373 +L1066986L +aL1066987L +aL1066988L +aL1066989L +asg12 +(lp374 +I1 +aI2 +aI3 +aI4 +asg14 +F0.599051 +sS't' +F53319.331209700002 +ss(F49.606538 +F-1.0107139999999999 +F0.38107799999999997 +F0.25916400000000001 +I0 +tp375 +(dp376 +g4 +F-1.0107139999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.61465400000000003 +sS'm' +F22.465399999999999 +sg8 +F0.25916400000000001 +sg9 +F49.606538 +sg10 +(lp377 +L1225928L +aL1225929L +aL1225930L +aL1225931L +asg12 +(lp378 +I1 +aI2 +aI3 +aI4 +asg14 +F0.38107799999999997 +sS't' +F53666.468752799999 +ss. \ No newline at end of file diff --git a/mltsp/TCP/Algorithms/SpatialClustering/obj_dict_309.pickle b/mltsp/TCP/Algorithms/SpatialClustering/obj_dict_309.pickle new file mode 100755 index 00000000..748870e2 --- /dev/null +++ b/mltsp/TCP/Algorithms/SpatialClustering/obj_dict_309.pickle @@ -0,0 +1,73822 @@ +(dp1 +(F309.385426 +F0.34015400000000001 +F1.08002 +F1.01003 +I0 +tp2 +(dp3 +S'decl' +p4 +F0.34015400000000001 +sS'survey_id' +p5 +I0 +sS'src_id' +p6 +I0 +sS'm_err' +p7 +F0.509521 +sS'm' +F21.968399999999999 +sS'dec_rms' +p8 +F1.01003 +sS'ra' +p9 +F309.385426 +sS'obj_ids' +p10 +(lp11 +L345368281L +aL345368282L +aL345368283L +aL345368284L +aL345368285L +asS'filts' +p12 +(lp13 +I0 +aI1 +aI2 +aI3 +aI4 +asS'ra_rms' +p14 +F1.08002 +sS't' +F53675.078756299998 +ss(F309.37435299999999 +F0.326598 +F0.649034 +F0.53905000000000003 +I0 +tp15 +(dp16 +g4 +F0.326598 +sg5 +I0 +sg6 +I0 +sg7 +F4.7875399999999999 +sS'm' +F23.424499999999998 +sg8 +F0.53905000000000003 +sg9 +F309.37435299999999 +sg10 +(lp17 +L112297697L +aL112297698L +aL112297699L +aL112297700L +aL112297701L +asg12 +(lp18 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.649034 +sS't' +F53656.106090900001 +ss(F309.38268799999997 +F0.33515899999999998 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp19 +(dp20 +g4 +F0.33515899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.071475499999999997 +sS'm' +F19.404199999999999 +sg8 +F1.1100000000000001 +sg9 +F309.38268799999997 +sg10 +(lp21 +L344144544L +aL344144545L +aL344144546L +aL344144547L +aL344144548L +aL344144549L +aL344144550L +aL344144551L +aL344144552L +aL344144553L +asg12 +(lp22 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138220399996 +ss(F309.37473999999997 +F0.33168999999999998 +F0.47004099999999999 +F0.50303900000000001 +I0 +tp23 +(dp24 +g4 +F0.33168999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.038864099999999999 +sS'm' +F16.022600000000001 +sg8 +F0.50303900000000001 +sg9 +F309.37473999999997 +sg10 +(lp25 +L12884539L +aL12884540L +aL12884541L +aL12884542L +aL12884543L +asg12 +(lp26 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004099999999999 +sS't' +F53649.118500299999 +ss(F309.359824 +F0.32505600000000001 +F0.470248 +F0.50329699999999999 +I0 +tp27 +(dp28 +g4 +F0.32505600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.7270599999999998 +sS'm' +F22.156700000000001 +sg8 +F0.50329699999999999 +sg9 +F309.359824 +sg10 +(lp29 +L12887062L +aL12887063L +aL12887064L +aL12887065L +aL12887066L +asg12 +(lp30 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.470248 +sS't' +F53649.118458899997 +ss(F309.38193699999999 +F0.33612999999999998 +F1.0904400000000001 +F1.0713299999999999 +I0 +tp31 +(dp32 +g4 +F0.33612999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.22221 +sS'm' +F23.763100000000001 +sg8 +F1.0713299999999999 +sg9 +F309.38193699999999 +sg10 +(lp33 +L345676155L +aL345676156L +aL345676157L +asg12 +(lp34 +I2 +aI3 +aI4 +asg14 +F1.0904400000000001 +sS't' +F53680.084785899999 +ss(F309.38890500000002 +F0.34374700000000002 +F1.05002 +F0.94402399999999997 +I0 +tp35 +(dp36 +g4 +F0.34374700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.047606599999999999 +sS'm' +F16.209900000000001 +sg8 +F0.94402399999999997 +sg9 +F309.38890500000002 +sg10 +(lp37 +L346329453L +aL346329454L +aL346329455L +aL346329456L +aL346329457L +asg12 +(lp38 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.1596173 +ss(F309.37299899999999 +F0.320189 +F0.82833000000000001 +F0.94518500000000005 +I0 +tp39 +(dp40 +g4 +F0.320189 +sg5 +I0 +sg6 +I0 +sg7 +F0.43015199999999998 +sS'm' +F22.856300000000001 +sg8 +F0.94518500000000005 +sg9 +F309.37299899999999 +sg10 +(lp41 +L343127656L +aL343127657L +aL343127658L +aL343127659L +aL343127655L +asg12 +(lp42 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.82833000000000001 +sS't' +F53288.113415799999 +ss(F309.388127 +F0.33812399999999998 +F1.08006 +F1.0100499999999999 +I0 +tp43 +(dp44 +g4 +F0.33812399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.11036 +sS'm' +F22.8507 +sg8 +F1.0100499999999999 +sg9 +F309.388127 +sg10 +(lp45 +L345370490L +aL345370491L +aL345370492L +aL345370493L +aL345370494L +asg12 +(lp46 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08006 +sS't' +F53675.078763799997 +ss(F309.37308300000001 +F0.32442399999999999 +F0.93309399999999998 +F0.87806499999999998 +I0 +tp47 +(dp48 +g4 +F0.32442399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.27460600000000002 +sS'm' +F22.365600000000001 +sg8 +F0.87806499999999998 +sg9 +F309.37308300000001 +sg10 +(lp49 +L345030708L +aL345030709L +aL345030710L +aL345030711L +asg12 +(lp50 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93309399999999998 +sS't' +F53670.115510199998 +ss(F309.37280600000003 +F0.33522400000000002 +F1.05002 +F0.94401800000000002 +I0 +tp51 +(dp52 +g4 +F0.33522400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.80476400000000003 +sS'm' +F22.197199999999999 +sg8 +F0.94401800000000002 +sg9 +F309.37280600000003 +sg10 +(lp53 +L346332056L +aL346332057L +aL346332058L +aL346332059L +aL346332060L +asg12 +(lp54 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159572500001 +ss(F309.36453499999999 +F0.32446700000000001 +F0.47606799999999999 +F0.45406299999999999 +I0 +tp55 +(dp56 +g4 +F0.32446700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.107699 +sS'm' +F20.954999999999998 +sg8 +F0.45406299999999999 +sg9 +F309.36453499999999 +sg10 +(lp57 +L344875227L +aL344875228L +aL344875229L +aL344875230L +aL344875226L +asg12 +(lp58 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.47606799999999999 +sS't' +F53668.1106325 +ss(F309.38776300000001 +F0.32186799999999999 +F0.885409 +F1.11033 +I0 +tp59 +(dp60 +g4 +F0.32186799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F6.2619499999999997 +sS'm' +F24.934200000000001 +sg8 +F1.11033 +sg9 +F309.38776300000001 +sg10 +(lp61 +L344150965L +aL344150966L +aL344150967L +aL344150968L +aL344150969L +asg12 +(lp62 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.885409 +sS't' +F53635.138234500002 +ss(F309.37195100000002 +F0.34105200000000002 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp63 +(dp64 +g4 +F0.34105200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.049988400000000002 +sS'm' +F20.466799999999999 +sg8 +F1.0700099999999999 +sg9 +F309.37195100000002 +sg10 +(lp65 +L345679192L +aL345679193L +aL345679194L +aL345679195L +aL345679191L +asg12 +(lp66 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.0900000000000001 +sS't' +F53680.088075200001 +ss(F309.360073 +F0.320517 +F0.64901399999999998 +F0.539018 +I0 +tp67 +(dp68 +g4 +F0.320517 +sg5 +I0 +sg6 +I0 +sg7 +F0.16126699999999999 +sS'm' +F19.653500000000001 +sg8 +F0.539018 +sg9 +F309.360073 +sg10 +(lp69 +L112296615L +aL112296616L +aL112296617L +aL112296618L +aL112296619L +aL112296620L +aL112296621L +aL112296622L +aL112296623L +aL112296624L +asg12 +(lp70 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901399999999998 +sS't' +F53656.106051199997 +ss(F309.36834299999998 +F0.34217999999999998 +F0.82907900000000001 +F0.94657800000000003 +I0 +tp71 +(dp72 +g4 +F0.34217999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.38348 +sS'm' +F24.1264 +sg8 +F0.94657800000000003 +sg9 +F309.36834299999998 +sg10 +(lp73 +L343120334L +aL343120335L +aL343120336L +aL343120337L +asg12 +(lp74 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82907900000000001 +sS't' +F53288.113402800001 +ss(F309.36828300000002 +F0.32758399999999999 +F1.0901400000000001 +F1.0701700000000001 +I0 +tp75 +(dp76 +g4 +F0.32758399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.48356300000000002 +sS'm' +F23.365300000000001 +sg8 +F1.0701700000000001 +sg9 +F309.36828300000002 +sg10 +(lp77 +L345681144L +aL345681145L +aL345681146L +aL345681147L +asg12 +(lp78 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0901400000000001 +sS't' +F53680.088065000004 +ss(F309.38890600000002 +F0.34375699999999998 +F0.47004400000000002 +F0.50304099999999996 +I0 +tp79 +(dp80 +g4 +F0.34375699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.0409599 +sS'm' +F16.290099999999999 +sg8 +F0.50304099999999996 +sg9 +F309.38890600000002 +sg10 +(lp81 +L12884593L +aL12884594L +aL12884595L +aL12884596L +aL12884597L +asg12 +(lp82 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004400000000002 +sS't' +F53649.118539700001 +ss(F309.36453899999998 +F0.32447399999999998 +F0.50616300000000003 +F0.45923599999999998 +I0 +tp83 +(dp84 +g4 +F0.32447399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.042427399999999997 +sS'm' +F18.636700000000001 +sg8 +F0.45923599999999998 +sg9 +F309.36453899999998 +sg10 +(lp85 +L153251224L +aL153251225L +aL153251221L +aL153251222L +aL153251223L +asg12 +(lp86 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.50616300000000003 +sS't' +F53702.083120099996 +ss(F309.38199500000002 +F0.34295300000000001 +F0.50657099999999999 +F0.45969700000000002 +I0 +tp87 +(dp88 +g4 +F0.34295300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.33148 +sS'm' +F22.131599999999999 +sg8 +F0.45969700000000002 +sg9 +F309.38199500000002 +sg10 +(lp89 +L153250311L +aL153250312L +aL153250313L +aL153250314L +aL153250315L +asg12 +(lp90 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50657099999999999 +sS't' +F53702.083997900001 +ss(F309.38259799999997 +F0.33969500000000002 +F0.74100500000000002 +F0.96000600000000003 +I0 +tp91 +(dp92 +g4 +F0.33969500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.057201500000000002 +sS'm' +F18.7121 +sg8 +F0.96000600000000003 +sg9 +F309.38259799999997 +sg10 +(lp93 +L344475896L +aL344475897L +aL344475898L +aL344475899L +aL344475900L +aL344475901L +aL344475902L +aL344475903L +aL344475904L +aL344475905L +asg12 +(lp94 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100500000000002 +sS't' +F53644.123872999997 +ss(F309.36489599999999 +F0.334567 +F0.88589799999999996 +F1.11012 +I0 +tp95 +(dp96 +g4 +F0.334567 +sg5 +I0 +sg6 +I0 +sg7 +F2.1209099999999999 +sS'm' +F23.744599999999998 +sg8 +F1.11012 +sg9 +F309.36489599999999 +sg10 +(lp97 +L344153049L +aL344153050L +aL344153051L +aL344153052L +aL344153053L +asg12 +(lp98 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88589799999999996 +sS't' +F53635.138170999999 +ss(F309.36927800000001 +F0.318971 +F1.0100100000000001 +F0.99201099999999998 +I0 +tp99 +(dp100 +g4 +F0.318971 +sg5 +I0 +sg6 +I0 +sg7 +F0.46565499999999999 +sS'm' +F21.502199999999998 +sg8 +F0.99201099999999998 +sg9 +F309.36927800000001 +sg10 +(lp101 +L342964406L +aL342964407L +aL342964408L +aL342964409L +aL342964410L +asg12 +(lp102 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134569499998 +ss(F309.35980000000001 +F0.32509199999999999 +F0.86501499999999998 +F0.90001399999999998 +I0 +tp103 +(dp104 +g4 +F0.32509199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.6941799999999998 +sS'm' +F23.855799999999999 +sg8 +F0.90001399999999998 +sg9 +F309.35980000000001 +sg10 +(lp105 +L345812202L +aL345812203L +aL345812204L +aL345812205L +aL345812206L +aL345812207L +aL345812208L +aL345812209L +aL345812210L +aL345812211L +asg12 +(lp106 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86501499999999998 +sS't' +F53693.0882891 +ss(F309.36916500000001 +F0.34570400000000001 +F0.82814600000000005 +F0.94511800000000001 +I0 +tp107 +(dp108 +g4 +F0.34570400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F6.04521 +sS'm' +F24.440799999999999 +sg8 +F0.94511800000000001 +sg9 +F309.36916500000001 +sg10 +(lp109 +L343127537L +aL343127538L +aL343127539L +aL343127540L +aL343127541L +asg12 +(lp110 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82814600000000005 +sS't' +F53288.1117467 +ss(F309.38888800000001 +F0.34374399999999999 +F0.82803499999999997 +F0.94503099999999995 +I0 +tp111 +(dp112 +g4 +F0.34374399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.030150699999999999 +sS'm' +F14.4709 +sg8 +F0.94503099999999995 +sg9 +F309.38888800000001 +sg10 +(lp113 +L343120725L +aL343120726L +aL343120727L +aL343120728L +aL343120729L +aL343120730L +aL343120731L +aL343120732L +aL343120723L +aL343120724L +asg12 +(lp114 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.82803499999999997 +sS't' +F53288.110142899997 +ss(F309.374752 +F0.33167600000000003 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp115 +(dp116 +g4 +F0.33167600000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.044670500000000002 +sS'm' +F15.933299999999999 +sg8 +F1.1000099999999999 +sg9 +F309.374752 +sg10 +(lp117 +L345532049L +aL345532050L +aL345532051L +aL345532052L +aL345532053L +asg12 +(lp118 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.0997594 +ss(F309.38779499999998 +F0.32197199999999998 +F0.41672399999999998 +F0.41652600000000001 +I0 +tp119 +(dp120 +g4 +F0.32197199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1396299999999999 +sS'm' +F23.373799999999999 +sg8 +F0.41652600000000001 +sg9 +F309.38779499999998 +sg10 +(lp121 +L346001113L +aL346001114L +aL346001115L +aL346001116L +asg12 +(lp122 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41672399999999998 +sS't' +F53703.094806000001 +ss(F309.37304 +F0.32446599999999998 +F0.413684 +F0.41250599999999998 +I0 +tp123 +(dp124 +g4 +F0.32446599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.7606299999999999 +sS'm' +F23.495699999999999 +sg8 +F0.41250599999999998 +sg9 +F309.37304 +sg10 +(lp125 +L346002800L +aL346002801L +aL346002802L +aL346002803L +aL346002804L +asg12 +(lp126 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.413684 +sS't' +F53703.093106599998 +ss(F309.37300599999998 +F0.32106200000000001 +F0.98450899999999997 +F0.98931400000000003 +I0 +tp127 +(dp128 +g4 +F0.32106200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.29755 +sS'm' +F22.829699999999999 +sg8 +F0.98931400000000003 +sg9 +F309.37300599999998 +sg10 +(lp129 +L346467776L +aL346467777L +aL346467778L +aL346467779L +aL346467780L +asg12 +(lp130 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98450899999999997 +sS't' +F54007.119898099998 +ss(F309.36239399999999 +F0.31961899999999999 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp131 +(dp132 +g4 +F0.31961899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.77554299999999998 +sS'm' +F22.607500000000002 +sg8 +F1.0700099999999999 +sg9 +F309.36239399999999 +sg10 +(lp133 +L345675488L +aL345675489L +aL345675490L +aL345675491L +aL345675492L +asg12 +(lp134 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900099999999999 +sS't' +F53680.086390199998 +ss(F309.35982000000001 +F0.32512400000000002 +F0.73108200000000001 +F0.732074 +I0 +tp135 +(dp136 +g4 +F0.32512400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.3627500000000001 +sS'm' +F22.704799999999999 +sg8 +F0.732074 +sg9 +F309.35982000000001 +sg10 +(lp137 +L344603077L +aL344603078L +aL344603079L +aL344603080L +aL344603081L +asg12 +(lp138 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.73108200000000001 +sS't' +F53654.158460500003 +ss(F309.37432799999999 +F0.32660899999999998 +F1.0100100000000001 +F0.953013 +I0 +tp139 +(dp140 +g4 +F0.32660899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.84523499999999996 +sS'm' +F22.086099999999998 +sg8 +F0.953013 +sg9 +F309.37432799999999 +sg10 +(lp141 +L343712050L +aL343712051L +aL343712052L +aL343712053L +aL343712054L +asg12 +(lp142 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158739899998 +ss(F309.38007299999998 +F0.342144 +F0.98400500000000002 +F0.98800399999999999 +I0 +tp143 +(dp144 +g4 +F0.342144 +sg5 +I0 +sg6 +I0 +sg7 +F0.062432399999999999 +sS'm' +F18.583600000000001 +sg8 +F0.98800399999999999 +sg9 +F309.38007299999998 +sg10 +(lp145 +L346459513L +aL346459514L +aL346459515L +aL346459516L +aL346459517L +asg12 +(lp146 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.119917800002 +ss(F309.36597899999998 +F0.33172099999999999 +F1.0500100000000001 +F0.94401299999999999 +I0 +tp147 +(dp148 +g4 +F0.33172099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.218444 +sS'm' +F20.674700000000001 +sg8 +F0.94401299999999999 +sg9 +F309.36597899999998 +sg10 +(lp149 +L346329117L +aL346329118L +aL346329119L +aL346329120L +aL346329121L +asg12 +(lp150 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159553600002 +ss(F309.36739399999999 +F0.32930700000000002 +F0.25073800000000002 +F0.34926600000000002 +I0 +tp151 +(dp152 +g4 +F0.32930700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.00492 +sS'm' +F23.356300000000001 +sg8 +F0.34926600000000002 +sg9 +F309.36739399999999 +sg10 +(lp153 +L327908362L +aL327908363L +aL327908364L +aL327908365L +asg12 +(lp154 +I1 +aI2 +aI3 +aI4 +asg14 +F0.25073800000000002 +sS't' +F53312.064577500001 +ss(F309.37431900000001 +F0.32657799999999998 +F1.0500100000000001 +F0.94401400000000002 +I0 +tp155 +(dp156 +g4 +F0.32657799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.9863499999999998 +sS'm' +F24.211300000000001 +sg8 +F0.94401400000000002 +sg9 +F309.37431900000001 +sg10 +(lp157 +L346332100L +aL346332101L +aL346332102L +aL346332103L +aL346332104L +asg12 +(lp158 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159576700004 +ss(F309.38270799999998 +F0.33516400000000002 +F0.77501200000000003 +F0.75402599999999997 +I0 +tp159 +(dp160 +g4 +F0.33516400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.135329 +sS'm' +F19.461500000000001 +sg8 +F0.75402599999999997 +sg9 +F309.38270799999998 +sg10 +(lp161 +L342827500L +aL342827501L +aL342827502L +aL342827503L +aL342827504L +asg12 +(lp162 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501200000000003 +sS't' +F53243.2557801 +ss(F309.38539900000001 +F0.34015499999999999 +F0.74103399999999997 +F0.96002299999999996 +I0 +tp163 +(dp164 +g4 +F0.34015499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.39659699999999998 +sS'm' +F21.787800000000001 +sg8 +F0.96002299999999996 +sg9 +F309.38539900000001 +sg10 +(lp165 +L344482120L +aL344482121L +aL344482122L +aL344482123L +aL344482124L +asg12 +(lp166 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74103399999999997 +sS't' +F53644.123880799998 +ss(F309.36919999999998 +F0.34575499999999998 +F0.61640200000000001 +F0.77530200000000005 +I0 +tp167 +(dp168 +g4 +F0.34575499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.63584 +sS'm' +F24.119299999999999 +sg8 +F0.77530200000000005 +sg9 +F309.36919999999998 +sg10 +(lp169 +L346172021L +aL346172022L +aL346172023L +aL346172024L +asg12 +(lp170 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61640200000000001 +sS't' +F53704.0733014 +ss(F309.37769900000001 +F0.34561900000000001 +F1.05017 +F0.94413599999999998 +I0 +tp171 +(dp172 +g4 +F0.34561900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.32391599999999998 +sS'm' +F22.641500000000001 +sg8 +F0.94413599999999998 +sg9 +F309.37769900000001 +sg10 +(lp173 +L346336459L +aL346336460L +aL346336461L +aL346336462L +asg12 +(lp174 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05017 +sS't' +F53974.1612446 +ss(F309.36981100000003 +F0.34465400000000002 +F0.92417199999999999 +F1.0301 +I0 +tp175 +(dp176 +g4 +F0.34465400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.53416 +sS'm' +F23.043900000000001 +sg8 +F1.0301 +sg9 +F309.36981100000003 +sg10 +(lp177 +L345217353L +aL345217354L +aL345217355L +aL345217356L +aL345217357L +asg12 +(lp178 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92417199999999999 +sS't' +F53673.081823599998 +ss(F309.38648899999998 +F0.32197700000000001 +F0.248418 +F0.34827599999999997 +I0 +tp179 +(dp180 +g4 +F0.32197700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.72273299999999996 +sS'm' +F21.7544 +sg8 +F0.34827599999999997 +sg9 +F309.38648899999998 +sg10 +(lp181 +L327906708L +aL327906709L +aL327906710L +aL327906711L +aL327906712L +asg12 +(lp182 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248418 +sS't' +F53312.0629721 +ss(F309.38889799999998 +F0.34374300000000002 +F0.921014 +F1.1000300000000001 +I0 +tp183 +(dp184 +g4 +F0.34374300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.044991200000000002 +sS'm' +F16.177499999999998 +sg8 +F1.1000300000000001 +sg9 +F309.38889799999998 +sg10 +(lp185 +L345532472L +aL345532473L +aL345532474L +aL345532475L +aL345532476L +asg12 +(lp186 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.921014 +sS't' +F53677.099798700001 +ss(F309.36978800000003 +F0.344667 +F0.41477700000000001 +F0.41556900000000002 +I0 +tp187 +(dp188 +g4 +F0.344667 +sg5 +I0 +sg6 +I0 +sg7 +F3.3592900000000001 +sS'm' +F23.724900000000002 +sg8 +F0.41556900000000002 +sg9 +F309.36978800000003 +sg10 +(lp189 +L346002783L +aL346002784L +aL346002785L +aL346002786L +asg12 +(lp190 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41477700000000001 +sS't' +F53703.094755999999 +ss(F309.38363900000002 +F0.34498000000000001 +F0.41311100000000001 +F0.41212199999999999 +I0 +tp191 +(dp192 +g4 +F0.34498000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.7239599999999999 +sS'm' +F22.6372 +sg8 +F0.41212199999999999 +sg9 +F309.38363900000002 +sg10 +(lp193 +L346001038L +aL346001039L +aL346001040L +aL346001041L +aL346001042L +asg12 +(lp194 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41311100000000001 +sS't' +F53703.093136000003 +ss(F309.38934999999998 +F0.32214300000000001 +F0.92102899999999999 +F1.1000300000000001 +I0 +tp195 +(dp196 +g4 +F0.32214300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.16134599999999999 +sS'm' +F22.099799999999998 +sg8 +F1.1000300000000001 +sg9 +F309.38934999999998 +sg10 +(lp197 +L345537452L +aL345537453L +aL345537454L +aL345537455L +asg12 +(lp198 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92102899999999999 +sS't' +F53677.1014584 +ss(F309.388915 +F0.34377400000000002 +F1.08002 +F1.0100199999999999 +I0 +tp199 +(dp200 +g4 +F0.34377400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.032616300000000001 +sS'm' +F14.8874 +sg8 +F1.0100199999999999 +sg9 +F309.388915 +sg10 +(lp201 +L345363924L +aL345363925L +aL345363926L +aL345363927L +aL345363923L +asg12 +(lp202 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.08002 +sS't' +F53675.080424500004 +ss(F309.36149999999998 +F0.31850299999999998 +F0.86553000000000002 +F0.90110400000000002 +I0 +tp203 +(dp204 +g4 +F0.31850299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.45001600000000003 +sS'm' +F22.5808 +sg8 +F0.90110400000000002 +sg9 +F309.36149999999998 +sg10 +(lp205 +L345811279L +aL345811280L +aL345811281L +aL345811282L +asg12 +(lp206 +I1 +aI2 +aI3 +aI4 +asg14 +F0.86553000000000002 +sS't' +F53693.089952299997 +ss(F309.38392800000003 +F0.318743 +F1.05023 +F0.944133 +I0 +tp207 +(dp208 +g4 +F0.318743 +sg5 +I0 +sg6 +I0 +sg7 +F0.42159200000000002 +sS'm' +F23.006900000000002 +sg8 +F0.944133 +sg9 +F309.38392800000003 +sg10 +(lp209 +L346336566L +aL346336567L +aL346336568L +aL346336569L +asg12 +(lp210 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05023 +sS't' +F53974.161261900001 +ss(F309.37305700000002 +F0.32022 +F0.86628799999999995 +F0.90058499999999997 +I0 +tp211 +(dp212 +g4 +F0.32022 +sg5 +I0 +sg6 +I0 +sg7 +F2.76024 +sS'm' +F23.536899999999999 +sg8 +F0.90058499999999997 +sg9 +F309.37305700000002 +sg10 +(lp213 +L345816353L +aL345816354L +aL345816355L +aL345816356L +aL345816357L +asg12 +(lp214 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86628799999999995 +sS't' +F53693.088325899997 +ss(F309.36557599999998 +F0.34599099999999999 +F1.0900799999999999 +F1.0703 +I0 +tp215 +(dp216 +g4 +F0.34599099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F7.7823700000000002 +sS'm' +F22.6205 +sg8 +F1.0703 +sg9 +F309.36557599999998 +sg10 +(lp217 +L345675654L +aL345675655L +aL345675656L +aL345675657L +asg12 +(lp218 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0900799999999999 +sS't' +F53680.088057499997 +ss(F309.38891699999999 +F0.34375 +F0.476022 +F0.45402399999999998 +I0 +tp219 +(dp220 +g4 +F0.34375 +sg5 +I0 +sg6 +I0 +sg7 +F0.0382633 +sS'm' +F16.1921 +sg8 +F0.45402399999999998 +sg9 +F309.38891699999999 +sg10 +(lp221 +L344871419L +aL344871420L +aL344871421L +aL344871422L +aL344871423L +asg12 +(lp222 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.476022 +sS't' +F53668.109041800002 +ss(F309.37280399999997 +F0.33524900000000002 +F0.86500699999999997 +F0.900007 +I0 +tp223 +(dp224 +g4 +F0.33524900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.79594500000000001 +sS'm' +F22.157800000000002 +sg8 +F0.900007 +sg9 +F309.37280399999997 +sg10 +(lp225 +L345811443L +aL345811444L +aL345811445L +aL345811446L +aL345811447L +asg12 +(lp226 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86500699999999997 +sS't' +F53693.088325199999 +ss(F309.386413 +F0.33960499999999999 +F0.98529800000000001 +F0.98934900000000003 +I0 +tp227 +(dp228 +g4 +F0.33960499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.19953 +sS'm' +F22.7254 +sg8 +F0.98934900000000003 +sg9 +F309.386413 +sg10 +(lp229 +L346466082L +aL346466083L +aL346466084L +aL346466085L +aL346466086L +asg12 +(lp230 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98529800000000001 +sS't' +F54007.119935399998 +ss(F309.38890099999998 +F0.34373900000000002 +F0.85101199999999999 +F0.91302099999999997 +I0 +tp231 +(dp232 +g4 +F0.34373900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.039654099999999998 +sS'm' +F16.185199999999998 +sg8 +F0.91302099999999997 +sg9 +F309.38890099999998 +sg10 +(lp233 +L343874420L +aL343874421L +aL343874422L +aL343874423L +aL343874424L +aL343874425L +aL343874426L +aL343874427L +aL343874428L +aL343874429L +asg12 +(lp234 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85101199999999999 +sS't' +F53626.144992399997 +ss(F309.38392800000003 +F0.31876900000000002 +F1.0101100000000001 +F0.95316900000000004 +I0 +tp235 +(dp236 +g4 +F0.31876900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.330708 +sS'm' +F22.534600000000001 +sg8 +F0.95316900000000004 +sg9 +F309.38392800000003 +sg10 +(lp237 +L343715951L +aL343715952L +aL343715953L +aL343715954L +asg12 +(lp238 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101100000000001 +sS't' +F53623.160425000002 +ss(F309.37797499999999 +F0.33786300000000002 +F0.47603400000000001 +F0.45402999999999999 +I0 +tp239 +(dp240 +g4 +F0.33786300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.056669600000000001 +sS'm' +F18.405000000000001 +sg8 +F0.45402999999999999 +sg9 +F309.37797499999999 +sg10 +(lp241 +L344871309L +aL344871310L +aL344871311L +aL344871312L +aL344871313L +asg12 +(lp242 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47603400000000001 +sS't' +F53668.109011400004 +ss(F309.36006300000003 +F0.32052000000000003 +F0.86500699999999997 +F0.90000599999999997 +I0 +tp243 +(dp244 +g4 +F0.32052000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.10614999999999999 +sS'm' +F19.712800000000001 +sg8 +F0.90000599999999997 +sg9 +F309.36006300000003 +sg10 +(lp245 +L345811235L +aL345811236L +aL345811237L +aL345811238L +aL345811239L +aL345811240L +aL345811241L +aL345811242L +aL345811243L +aL345811244L +asg12 +(lp246 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86500699999999997 +sS't' +F53693.088289799998 +ss(F309.37771800000002 +F0.32558999999999999 +F0.82804800000000001 +F0.94503700000000002 +I0 +tp247 +(dp248 +g4 +F0.32558999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.1223799999999997 +sS'm' +F24.027000000000001 +sg8 +F0.94503700000000002 +sg9 +F309.37771800000002 +sg10 +(lp249 +L343123317L +aL343123318L +aL343123319L +aL343123320L +aL343123321L +asg12 +(lp250 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82804800000000001 +sS't' +F53288.111770399999 +ss(F309.38237299999997 +F0.32447700000000002 +F0.61676500000000001 +F0.77578599999999998 +I0 +tp251 +(dp252 +g4 +F0.32447700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.1886900000000002 +sS'm' +F23.742999999999999 +sg8 +F0.77578599999999998 +sg9 +F309.38237299999997 +sg10 +(lp253 +L346171353L +aL346171354L +aL346171355L +aL346171356L +aL346171357L +asg12 +(lp254 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61676500000000001 +sS't' +F53704.071679599998 +ss(F309.37301000000002 +F0.32011699999999998 +F0.77885899999999997 +F0.758077 +I0 +tp255 +(dp256 +g4 +F0.32011699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.6018500000000002 +sS'm' +F23.5807 +sg8 +F0.758077 +sg9 +F309.37301000000002 +sg10 +(lp257 +L342832267L +aL342832268L +aL342832269L +aL342832270L +asg12 +(lp258 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77885899999999997 +sS't' +F53243.257411600003 +ss(F309.37473499999999 +F0.331681 +F0.85100299999999995 +F0.91300700000000001 +I0 +tp259 +(dp260 +g4 +F0.331681 +sg5 +I0 +sg6 +I0 +sg7 +F0.039220400000000002 +sS'm' +F15.9472 +sg8 +F0.91300700000000001 +sg9 +F309.37473499999999 +sg10 +(lp261 +L343874216L +aL343874217L +aL343874218L +aL343874219L +aL343874220L +aL343874221L +aL343874222L +aL343874223L +aL343874224L +aL343874225L +asg12 +(lp262 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.144953100003 +ss(F309.38274999999999 +F0.32575300000000001 +F0.93302499999999999 +F0.87802599999999997 +I0 +tp263 +(dp264 +g4 +F0.32575300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.7815700000000001 +sS'm' +F23.145900000000001 +sg8 +F0.87802599999999997 +sg9 +F309.38274999999999 +sg10 +(lp265 +L345028360L +aL345028361L +aL345028362L +aL345028363L +aL345028364L +aL345028365L +aL345028366L +aL345028367L +aL345028368L +aL345028369L +asg12 +(lp266 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93302499999999999 +sS't' +F53670.113878600001 +ss(F309.38364799999999 +F0.34501300000000001 +F0.47607300000000002 +F0.454073 +I0 +tp267 +(dp268 +g4 +F0.34501300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.68796900000000005 +sS'm' +F21.787700000000001 +sg8 +F0.454073 +sg9 +F309.38364799999999 +sg10 +(lp269 +L344876260L +aL344876261L +aL344876262L +aL344876263L +aL344876264L +asg12 +(lp270 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47607300000000002 +sS't' +F53668.1090272 +ss(F309.38717300000002 +F0.32809899999999997 +F1.0924100000000001 +F1.0717699999999999 +I0 +tp271 +(dp272 +g4 +F0.32809899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F4.0946300000000004 +sS'm' +F24.4527 +sg8 +F1.0717699999999999 +sg9 +F309.38717300000002 +sg10 +(lp273 +L345686129L +aL345686130L +aL345686131L +aL345686132L +aL345686133L +asg12 +(lp274 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0924100000000001 +sS't' +F53680.086458999998 +ss(F309.37577700000003 +F0.34614099999999998 +F0.92427999999999999 +F1.0304899999999999 +I0 +tp275 +(dp276 +g4 +F0.34614099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F6.4402299999999997 +sS'm' +F24.6144 +sg8 +F1.0304899999999999 +sg9 +F309.37577700000003 +sg10 +(lp277 +L345224036L +aL345224037L +aL345224038L +aL345224039L +aL345224040L +asg12 +(lp278 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92427999999999999 +sS't' +F53673.0818402 +ss(F309.37454100000002 +F0.31692999999999999 +F1.0903 +F1.0702499999999999 +I0 +tp279 +(dp280 +g4 +F0.31692999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F8.4363700000000001 +sS'm' +F25.247800000000002 +sg8 +F1.0702499999999999 +sg9 +F309.37454100000002 +sg10 +(lp281 +L345685776L +aL345685777L +aL345685778L +aL345685779L +aL345685780L +aL345685781L +aL345685782L +aL345685783L +aL345685784L +aL345685785L +asg12 +(lp282 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0903 +sS't' +F53680.0864239 +ss(F309.38194399999998 +F0.336177 +F1.01084 +F0.99260800000000005 +I0 +tp283 +(dp284 +g4 +F0.336177 +sg5 +I0 +sg6 +I0 +sg7 +F1.1678599999999999 +sS'm' +F22.522300000000001 +sg8 +F0.99260800000000005 +sg9 +F309.38194399999998 +sg10 +(lp285 +L342964642L +aL342964643L +aL342964644L +aL342964645L +aL342964646L +asg12 +(lp286 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01084 +sS't' +F53270.134604699997 +ss(F309.386211 +F0.33897899999999997 +F0.41645500000000002 +F0.41656700000000002 +I0 +tp287 +(dp288 +g4 +F0.33897899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.657142 +sS'm' +F22.7849 +sg8 +F0.41656700000000002 +sg9 +F309.386211 +sg10 +(lp289 +L346001067L +aL346001068L +aL346001069L +aL346001070L +asg12 +(lp290 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41645500000000002 +sS't' +F53703.094801599997 +ss(F309.385423 +F0.34014699999999998 +F1.09002 +F1.07002 +I0 +tp291 +(dp292 +g4 +F0.34014699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.316973 +sS'm' +F21.556000000000001 +sg8 +F1.07002 +sg9 +F309.385423 +sg10 +(lp293 +L345679444L +aL345679445L +aL345679446L +aL345679447L +aL345679448L +asg12 +(lp294 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09002 +sS't' +F53680.086454199998 +ss(F309.36308200000002 +F0.32280300000000001 +F1.0120499999999999 +F0.99405600000000005 +I0 +tp295 +(dp296 +g4 +F0.32280300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.6035400000000002 +sS'm' +F23.410799999999998 +sg8 +F0.99405600000000005 +sg9 +F309.36308200000002 +sg10 +(lp297 +L342970287L +aL342970288L +aL342970289L +aL342970290L +aL342970291L +asg12 +(lp298 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0120499999999999 +sS't' +F53270.134552299998 +ss(F309.38709299999999 +F0.32805299999999998 +F0.98479899999999998 +F0.98867099999999997 +I0 +tp299 +(dp300 +g4 +F0.32805299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.6586999999999996 +sS'm' +F25.389500000000002 +sg8 +F0.98867099999999997 +sg9 +F309.38709299999999 +sg10 +(lp301 +L346463373L +aL346463374L +aL346463375L +aL346463376L +asg12 +(lp302 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98479899999999998 +sS't' +F54007.121595700002 +ss(F309.38081399999999 +F0.34451399999999999 +F1.0501199999999999 +F0.94411299999999998 +I0 +tp303 +(dp304 +g4 +F0.34451399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.54313400000000001 +sS'm' +F23.320599999999999 +sg8 +F0.94411299999999998 +sg9 +F309.38081399999999 +sg10 +(lp305 +L346329349L +aL346329350L +aL346329351L +aL346329352L +asg12 +(lp306 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0501199999999999 +sS't' +F53974.1612532 +ss(F309.37234999999998 +F0.32414399999999999 +F0.88502800000000004 +F1.11002 +I0 +tp307 +(dp308 +g4 +F0.32414399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.9011300000000002 +sS'm' +F24.092600000000001 +sg8 +F1.11002 +sg9 +F309.37234999999998 +sg10 +(lp309 +L344151929L +aL344151930L +aL344151931L +aL344151932L +aL344151933L +asg12 +(lp310 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88502800000000004 +sS't' +F53635.138191700004 +ss(F309.36670099999998 +F0.33549899999999999 +F1.0104599999999999 +F0.99256299999999997 +I0 +tp311 +(dp312 +g4 +F0.33549899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.6288 +sS'm' +F24.826699999999999 +sg8 +F0.99256299999999997 +sg9 +F309.36670099999998 +sg10 +(lp313 +L342970341L +aL342970342L +aL342970343L +aL342970344L +asg12 +(lp314 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0104599999999999 +sS't' +F53270.136220799999 +ss(F309.36762199999998 +F0.32833600000000002 +F1.01061 +F0.95392900000000003 +I0 +tp315 +(dp316 +g4 +F0.32833600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.97801899999999997 +sS'm' +F23.732700000000001 +sg8 +F0.95392900000000003 +sg9 +F309.36762199999998 +sg10 +(lp317 +L343715695L +aL343715696L +aL343715697L +aL343715698L +asg12 +(lp318 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01061 +sS't' +F53623.160379699999 +ss(F309.38259699999998 +F0.33969300000000002 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp319 +(dp320 +g4 +F0.33969300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.069109400000000001 +sS'm' +F18.741 +sg8 +F0.94401199999999996 +sg9 +F309.38259699999998 +sg10 +(lp321 +L346329329L +aL346329330L +aL346329331L +aL346329332L +aL346329333L +aL346329334L +aL346329335L +aL346329336L +aL346329337L +aL346329338L +asg12 +(lp322 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159599699997 +ss(F309.38395400000002 +F0.31877499999999998 +F1.0101500000000001 +F0.99223799999999995 +I0 +tp323 +(dp324 +g4 +F0.31877499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.488286 +sS'm' +F22.6356 +sg8 +F0.99223799999999995 +sg9 +F309.38395400000002 +sg10 +(lp325 +L342968317L +aL342968318L +aL342968319L +aL342968320L +asg12 +(lp326 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101500000000001 +sS't' +F53270.136268800001 +ss(F309.38365900000002 +F0.34502699999999997 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp327 +(dp328 +g4 +F0.34502699999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.39868700000000001 +sS'm' +F21.680900000000001 +sg8 +F1.0100100000000001 +sg9 +F309.38365900000002 +sg10 +(lp329 +L345366435L +aL345366436L +aL345366437L +aL345366438L +aL345366439L +asg12 +(lp330 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078751399997 +ss(F309.36917199999999 +F0.34571000000000002 +F1.0501100000000001 +F0.94409900000000002 +I0 +tp331 +(dp332 +g4 +F0.34571000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.45896399999999998 +sS'm' +F23.111000000000001 +sg8 +F0.94409900000000002 +sg9 +F309.36917199999999 +sg10 +(lp333 +L346336247L +aL346336248L +aL346336249L +aL346336250L +asg12 +(lp334 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0501100000000001 +sS't' +F53974.161220900001 +ss(F309.38270599999998 +F0.33516499999999999 +F0.92400599999999999 +F1.0300100000000001 +I0 +tp335 +(dp336 +g4 +F0.33516499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.0177088 +sS'm' +F16.570399999999999 +sg8 +F1.0300100000000001 +sg9 +F309.38270599999998 +sg10 +(lp337 +L345220236L +aL345220237L +aL345220238L +aL345220230L +aL345220231L +aL345220232L +aL345220233L +aL345220234L +aL345220235L +aL345220229L +asg12 +(lp338 +I2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI0 +asg14 +F0.92400599999999999 +sS't' +F53673.080200800003 +ss(F309.36981800000001 +F0.344669 +F1.0100800000000001 +F0.99208600000000002 +I0 +tp339 +(dp340 +g4 +F0.344669 +sg5 +I0 +sg6 +I0 +sg7 +F4.9187500000000002 +sS'm' +F24.095500000000001 +sg8 +F0.99208600000000002 +sg9 +F309.36981800000001 +sg10 +(lp341 +L342968160L +aL342968161L +aL342968162L +aL342968163L +aL342968164L +asg12 +(lp342 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100800000000001 +sS't' +F53270.134571000002 +ss(F309.385426 +F0.34017399999999998 +F0.74902199999999997 +F0.97802 +I0 +tp343 +(dp344 +g4 +F0.34017399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.316971 +sS'm' +F21.4815 +sg8 +F0.97802 +sg9 +F309.385426 +sg10 +(lp345 +L171381658L +aL171381659L +aL171381660L +aL171381661L +aL171381662L +asg12 +(lp346 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74902199999999997 +sS't' +F54005.107183400003 +ss(F309.36748799999998 +F0.329376 +F0.865093 +F0.90008900000000003 +I0 +tp347 +(dp348 +g4 +F0.329376 +sg5 +I0 +sg6 +I0 +sg7 +F1.68537 +sS'm' +F22.992999999999999 +sg8 +F0.90008900000000003 +sg9 +F309.36748799999998 +sg10 +(lp349 +L345816287L +aL345816288L +aL345816289L +aL345816290L +aL345816291L +asg12 +(lp350 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.865093 +sS't' +F53693.088310500003 +ss(F309.38024200000001 +F0.34038600000000002 +F0.98482999999999998 +F0.98869600000000002 +I0 +tp351 +(dp352 +g4 +F0.34038600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.04169 +sS'm' +F23.315200000000001 +sg8 +F0.98869600000000002 +sg9 +F309.38024200000001 +sg10 +(lp353 +L346459528L +aL346459529L +aL346459530L +aL346459531L +aL346459532L +asg12 +(lp354 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98482999999999998 +sS't' +F54007.119918199998 +ss(F309.38529799999998 +F0.33194400000000002 +F0.50632200000000005 +F0.45943600000000001 +I0 +tp355 +(dp356 +g4 +F0.33194400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.0271300000000001 +sS'm' +F22.5928 +sg8 +F0.45943600000000001 +sg9 +F309.38529799999998 +sg10 +(lp357 +L153250530L +aL153250531L +aL153250532L +aL153250533L +aL153250534L +asg12 +(lp358 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50632200000000005 +sS't' +F53702.084007099998 +ss(F309.36773399999998 +F0.33363799999999999 +F0.77872200000000003 +F0.75824800000000003 +I0 +tp359 +(dp360 +g4 +F0.33363799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.43693700000000002 +sS'm' +F21.895800000000001 +sg8 +F0.75824800000000003 +sg9 +F309.36773399999998 +sg10 +(lp361 +L342832182L +aL342832183L +aL342832184L +asg12 +(lp362 +I2 +aI3 +aI4 +asg14 +F0.77872200000000003 +sS't' +F53243.254079999999 +ss(F309.38565699999998 +F0.32636500000000002 +F0.77912899999999996 +F0.82910499999999998 +I0 +tp363 +(dp364 +g4 +F0.32636500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.38372299999999998 +sS'm' +F21.854800000000001 +sg8 +F0.82910499999999998 +sg9 +F309.38565699999998 +sg10 +(lp365 +L343277308L +aL343277309L +aL343277310L +aL343277311L +asg12 +(lp366 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77912899999999996 +sS't' +F53302.109119699999 +ss(F309.38750399999998 +F0.33216499999999999 +F1.09006 +F1.07006 +I0 +tp367 +(dp368 +g4 +F0.33216499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.59546500000000002 +sS'm' +F23.57 +sg8 +F1.07006 +sg9 +F309.38750399999998 +sg10 +(lp369 +L345680583L +aL345680584L +aL345680585L +aL345680586L +asg12 +(lp370 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09006 +sS't' +F53680.088118400003 +ss(F309.37306100000001 +F0.324457 +F0.92408699999999999 +F1.03006 +I0 +tp371 +(dp372 +g4 +F0.324457 +sg5 +I0 +sg6 +I0 +sg7 +F1.74488 +sS'm' +F23.187100000000001 +sg8 +F1.03006 +sg9 +F309.37306100000001 +sg10 +(lp373 +L345223978L +aL345223979L +aL345223980L +aL345223981L +aL345223982L +asg12 +(lp374 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92408699999999999 +sS't' +F53673.081832600001 +ss(F309.38091400000002 +F0.33934799999999998 +F0.75104700000000002 +F0.97826500000000005 +I0 +tp375 +(dp376 +g4 +F0.33934799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.70223500000000005 +sS'm' +F22.408999999999999 +sg8 +F0.97826500000000005 +sg9 +F309.38091400000002 +sg10 +(lp377 +L171378238L +aL171378239L +aL171378240L +aL171378241L +aL171378242L +asg12 +(lp378 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.75104700000000002 +sS't' +F54005.107170800002 +ss(F309.38394399999999 +F0.31875599999999998 +F0.74906499999999998 +F0.97804599999999997 +I0 +tp379 +(dp380 +g4 +F0.31875599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F8.8895800000000005 +sS'm' +F25.2164 +sg8 +F0.97804599999999997 +sg9 +F309.38394399999999 +sg10 +(lp381 +L171386502L +aL171386503L +aL171386504L +aL171386505L +aL171386506L +asg12 +(lp382 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74906499999999998 +sS't' +F54005.107179300001 +ss(F309.36310200000003 +F0.33105600000000002 +F0.88500599999999996 +F1.1100099999999999 +I0 +tp383 +(dp384 +g4 +F0.33105600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.19444 +sS'm' +F20.9558 +sg8 +F1.1100099999999999 +sg9 +F309.36310200000003 +sg10 +(lp385 +L344144069L +aL344144070L +aL344144071L +aL344144072L +aL344144073L +asg12 +(lp386 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500599999999996 +sS't' +F53635.138165999997 +ss(F309.36006099999997 +F0.32051200000000002 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp387 +(dp388 +g4 +F0.32051200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.11469799999999999 +sS'm' +F19.736499999999999 +sg8 +F0.99200699999999997 +sg9 +F309.36006099999997 +sg10 +(lp389 +L342964255L +aL342964256L +aL342964257L +aL342964258L +aL342964259L +asg12 +(lp390 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.1345439 +ss(F309.38274699999999 +F0.32577899999999999 +F0.47607699999999997 +F0.45407900000000001 +I0 +tp391 +(dp392 +g4 +F0.32577899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.110189 +sS'm' +F20.982800000000001 +sg8 +F0.45407900000000001 +sg9 +F309.38274699999999 +sg10 +(lp393 +L344876223L +aL344876224L +aL344876225L +aL344876226L +asg12 +(lp394 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47607699999999997 +sS't' +F53668.1106831 +ss(F309.37778700000001 +F0.34573300000000001 +F0.51386299999999996 +F0.47495100000000001 +I0 +tp395 +(dp396 +g4 +F0.34573300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.6167799999999999 +sS'm' +F22.871700000000001 +sg8 +F0.47495100000000001 +sg9 +F309.37778700000001 +sg10 +(lp397 +L153253764L +aL153253765L +aL153253766L +aL153253767L +aL153253768L +asg12 +(lp398 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.51386299999999996 +sS't' +F53702.083986199999 +ss(F309.36928699999999 +F0.31896099999999999 +F0.77504499999999998 +F0.75405199999999994 +I0 +tp399 +(dp400 +g4 +F0.31896099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.51801699999999995 +sS'm' +F21.041899999999998 +sg8 +F0.75405199999999994 +sg9 +F309.36928699999999 +sg10 +(lp401 +L342828780L +aL342828781L +aL342828782L +aL342828783L +aL342828784L +asg12 +(lp402 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77504499999999998 +sS't' +F53243.255742900001 +ss(F309.37473199999999 +F0.331704 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp403 +(dp404 +g4 +F0.331704 +sg5 +I0 +sg6 +I0 +sg7 +F0.049279200000000002 +sS'm' +F15.9505 +sg8 +F0.99200699999999997 +sg9 +F309.37473199999999 +sg10 +(lp405 +L342962044L +aL342962045L +aL342962046L +aL342962047L +aL342962048L +asg12 +(lp406 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134584699998 +ss(F309.38077099999998 +F0.34455000000000002 +F0.93333600000000005 +F0.87849299999999997 +I0 +tp407 +(dp408 +g4 +F0.34455000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.8854200000000001 +sS'm' +F24.490400000000001 +sg8 +F0.87849299999999997 +sg9 +F309.38077099999998 +sg10 +(lp409 +L345024687L +aL345024688L +aL345024689L +aL345024690L +asg12 +(lp410 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93333600000000005 +sS't' +F53670.1155315 +ss(F309.37097899999998 +F0.33043299999999998 +F1.0900799999999999 +F1.07012 +I0 +tp411 +(dp412 +g4 +F0.33043299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.1776200000000001 +sS'm' +F23.757400000000001 +sg8 +F1.07012 +sg9 +F309.37097899999998 +sg10 +(lp413 +L345683763L +aL345683764L +aL345683765L +aL345683766L +aL345683767L +asg12 +(lp414 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900799999999999 +sS't' +F53680.086413999998 +ss(F309.38390199999998 +F0.318768 +F0.82967900000000006 +F0.94601100000000005 +I0 +tp415 +(dp416 +g4 +F0.318768 +sg5 +I0 +sg6 +I0 +sg7 +F0.50781100000000001 +sS'm' +F23.039999999999999 +sg8 +F0.94601100000000005 +sg9 +F309.38390199999998 +sg10 +(lp417 +L343130189L +aL343130190L +aL343130191L +aL343130192L +asg12 +(lp418 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82967900000000006 +sS't' +F53288.113446000003 +ss(F309.36744399999998 +F0.32938299999999998 +F1.0800700000000001 +F1.01004 +I0 +tp419 +(dp420 +g4 +F0.32938299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.28909000000000001 +sS'm' +F22.562899999999999 +sg8 +F1.01004 +sg9 +F309.36744399999998 +sg10 +(lp421 +L345370105L +aL345370106L +aL345370107L +aL345370108L +aL345370109L +aL345370110L +aL345370111L +aL345370112L +asg12 +(lp422 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800700000000001 +sS't' +F53675.0803648 +ss(F309.38086900000002 +F0.339283 +F0.61632500000000001 +F0.77514799999999995 +I0 +tp423 +(dp424 +g4 +F0.339283 +sg5 +I0 +sg6 +I0 +sg7 +F2.2673399999999999 +sS'm' +F24.4193 +sg8 +F0.77514799999999995 +sg9 +F309.38086900000002 +sg10 +(lp425 +L346166345L +aL346166346L +aL346166347L +aL346166348L +asg12 +(lp426 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61632500000000001 +sS't' +F53704.0733339 +ss(F309.38022599999999 +F0.34039199999999997 +F0.74934199999999995 +F0.97828599999999999 +I0 +tp427 +(dp428 +g4 +F0.34039199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.72774399999999995 +sS'm' +F23.790800000000001 +sg8 +F0.97828599999999999 +sg9 +F309.38022599999999 +sg10 +(lp429 +L171378243L +aL171378244L +aL171378245L +aL171378246L +asg12 +(lp430 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74934199999999995 +sS't' +F54005.108827399999 +ss(F309.36823700000002 +F0.32760499999999998 +F0.75114300000000001 +F0.97891899999999998 +I0 +tp431 +(dp432 +g4 +F0.32760499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.6958200000000001 +sS'm' +F23.399899999999999 +sg8 +F0.97891899999999998 +sg9 +F309.36823700000002 +sg10 +(lp433 +L171384923L +aL171384924L +aL171384925L +aL171384926L +aL171384927L +asg12 +(lp434 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.75114300000000001 +sS't' +F54005.107135600003 +ss(F309.38274200000001 +F0.325766 +F0.92401900000000003 +F1.0300199999999999 +I0 +tp435 +(dp436 +g4 +F0.325766 +sg5 +I0 +sg6 +I0 +sg7 +F4.4192499999999999 +sS'm' +F24.204999999999998 +sg8 +F1.0300199999999999 +sg9 +F309.38274200000001 +sg10 +(lp437 +L345222010L +aL345222011L +aL345222012L +aL345222013L +aL345222014L +aL345222015L +aL345222016L +aL345222017L +aL345222018L +aL345222019L +asg12 +(lp438 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401900000000003 +sS't' +F53673.081859500002 +ss(F309.36636499999997 +F0.340804 +F0.865008 +F0.90000599999999997 +I0 +tp439 +(dp440 +g4 +F0.340804 +sg5 +I0 +sg6 +I0 +sg7 +F0.051425199999999997 +sS'm' +F18.380199999999999 +sg8 +F0.90000599999999997 +sg9 +F309.36636499999997 +sg10 +(lp441 +L345808961L +aL345808962L +aL345808963L +aL345808964L +aL345808965L +asg12 +(lp442 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.865008 +sS't' +F53693.0883073 +ss(F309.36087800000001 +F0.31763599999999997 +F0.92409300000000005 +F1.03009 +I0 +tp443 +(dp444 +g4 +F0.31763599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.20188400000000001 +sS'm' +F22.069299999999998 +sg8 +F1.03009 +sg9 +F309.36087800000001 +sg10 +(lp445 +L345219844L +aL345219845L +aL345219846L +aL345219847L +aL345219843L +asg12 +(lp446 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.92409300000000005 +sS't' +F53673.083457200002 +ss(F309.38365599999997 +F0.34499800000000003 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp447 +(dp448 +g4 +F0.34499800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.27754099999999998 +sS'm' +F21.3918 +sg8 +F1.0700099999999999 +sg9 +F309.38365599999997 +sg10 +(lp449 +L345676212L +aL345676213L +aL345676214L +aL345676215L +aL345676216L +asg12 +(lp450 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086449199996 +ss(F309.36979600000001 +F0.34464400000000001 +F0.88504300000000002 +F1.1100399999999999 +I0 +tp451 +(dp452 +g4 +F0.34464400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.58106500000000005 +sS'm' +F23.389299999999999 +sg8 +F1.1100399999999999 +sg9 +F309.36979600000001 +sg10 +(lp453 +L344151891L +aL344151892L +aL344151893L +aL344151894L +asg12 +(lp454 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88504300000000002 +sS't' +F53635.139843099998 +ss(F309.38683500000002 +F0.345447 +F0.92685499999999998 +F1.12233 +I0 +tp455 +(dp456 +g4 +F0.345447 +sg5 +I0 +sg6 +I0 +sg7 +F2.4090699999999998 +sS'm' +F24.604800000000001 +sg8 +F1.12233 +sg9 +F309.38683500000002 +sg10 +(lp457 +L344144700L +aL344144701L +aL344144702L +asg12 +(lp458 +I1 +aI2 +aI3 +asg14 +F0.92685499999999998 +sS't' +F53635.139890400002 +ss(F309.38365900000002 +F0.34500500000000001 +F0.92401699999999998 +F1.0300199999999999 +I0 +tp459 +(dp460 +g4 +F0.34500500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.33106099999999999 +sS'm' +F21.310400000000001 +sg8 +F1.0300199999999999 +sg9 +F309.38365900000002 +sg10 +(lp461 +L345220286L +aL345220287L +aL345220288L +aL345220289L +aL345220290L +asg12 +(lp462 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401699999999998 +sS't' +F53673.0818621 +ss(F309.37302799999998 +F0.32017699999999999 +F1.09005 +F1.07003 +I0 +tp463 +(dp464 +g4 +F0.32017699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.27004 +sS'm' +F22.7011 +sg8 +F1.07003 +sg9 +F309.37302799999998 +sg10 +(lp465 +L345683804L +aL345683805L +aL345683806L +aL345683807L +asg12 +(lp466 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09005 +sS't' +F53680.088078200002 +ss(F309.385626 +F0.32638899999999998 +F1.08005 +F1.01004 +I0 +tp467 +(dp468 +g4 +F0.32638899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.15515799999999999 +sS'm' +F21.836200000000002 +sg8 +F1.01004 +sg9 +F309.385626 +sg10 +(lp469 +L345370440L +aL345370441L +aL345370442L +aL345370443L +asg12 +(lp470 +I1 +aI2 +aI3 +aI4 +asg14 +F1.08005 +sS't' +F53675.080415299999 +ss(F309.36996199999999 +F0.334453 +F0.77940100000000001 +F0.75676100000000002 +I0 +tp471 +(dp472 +g4 +F0.334453 +sg5 +I0 +sg6 +I0 +sg7 +F0.24485899999999999 +sS'm' +F21.040099999999999 +sg8 +F0.75676100000000002 +sg9 +F309.36996199999999 +sg10 +(lp473 +L342832234L +aL342832235L +aL342832232L +aL342832233L +asg12 +(lp474 +I3 +aI4 +aI1 +aI2 +asg14 +F0.77940100000000001 +sS't' +F53243.254915500002 +ss(F309.38367899999997 +F0.345026 +F0.248195 +F0.34813300000000003 +I0 +tp475 +(dp476 +g4 +F0.345026 +sg5 +I0 +sg6 +I0 +sg7 +F0.566971 +sS'm' +F21.488399999999999 +sg8 +F0.34813300000000003 +sg9 +F309.38367899999997 +sg10 +(lp477 +L327906635L +aL327906636L +aL327906637L +aL327906638L +aL327906639L +asg12 +(lp478 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248195 +sS't' +F53312.062964299999 +ss(F309.37462099999999 +F0.31711800000000001 +F0.43480000000000002 +F0.440243 +I0 +tp479 +(dp480 +g4 +F0.31711800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.1794500000000001 +sS'm' +F23.699400000000001 +sg8 +F0.440243 +sg9 +F309.37462099999999 +sg10 +(lp481 +L346002823L +aL346002824L +aL346002825L +aL346002826L +asg12 +(lp482 +I1 +aI2 +aI3 +aI4 +asg14 +F0.43480000000000002 +sS't' +F53703.094769399999 +ss(F309.36766599999999 +F0.328268 +F1.0841099999999999 +F0.96825300000000003 +I0 +tp483 +(dp484 +g4 +F0.328268 +sg5 +I0 +sg6 +I0 +sg7 +F1.4758100000000001 +sS'm' +F22.8795 +sg8 +F0.96825300000000003 +sg9 +F309.36766599999999 +sg10 +(lp485 +L346336205L +aL346336206L +aL346336207L +aL346336208L +aL346336209L +asg12 +(lp486 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0841099999999999 +sS't' +F53974.159558300002 +ss(F309.37897700000002 +F0.32701799999999998 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp487 +(dp488 +g4 +F0.32701799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.28111700000000001 +sS'm' +F21.412199999999999 +sg8 +F1.0700099999999999 +sg9 +F309.37897700000002 +sg10 +(lp489 +L345679314L +aL345679315L +aL345679316L +aL345679317L +aL345679318L +asg12 +(lp490 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086436199999 +ss(F309.364892 +F0.33461400000000002 +F0.92138600000000004 +F1.10036 +I0 +tp491 +(dp492 +g4 +F0.33461400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.95489999999999997 +sS'm' +F23.0944 +sg8 +F1.10036 +sg9 +F309.364892 +sg10 +(lp493 +L345539403L +aL345539404L +aL345539405L +aL345539406L +aL345539407L +asg12 +(lp494 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92138600000000004 +sS't' +F53677.099732000002 +ss(F309.37237099999999 +F0.32938499999999998 +F0.88642100000000001 +F1.1110599999999999 +I0 +tp495 +(dp496 +g4 +F0.32938499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.19106 +sS'm' +F24.1816 +sg8 +F1.1110599999999999 +sg9 +F309.37237099999999 +sg10 +(lp497 +L344155545L +aL344155546L +aL344155547L +aL344155548L +asg12 +(lp498 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88642100000000001 +sS't' +F53635.139850200001 +ss(F309.38936100000001 +F0.32216400000000001 +F0.77912000000000003 +F0.82909100000000002 +I0 +tp499 +(dp500 +g4 +F0.32216400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.48303600000000002 +sS'm' +F22.1081 +sg8 +F0.82909100000000002 +sg9 +F309.38936100000001 +sg10 +(lp501 +L343277317L +aL343277318L +aL343277319L +aL343277320L +asg12 +(lp502 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77912000000000003 +sS't' +F53302.109129999997 +ss(F309.380064 +F0.34215299999999998 +F0.24806500000000001 +F0.34804600000000002 +I0 +tp503 +(dp504 +g4 +F0.34215299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.061845999999999998 +sS'm' +F18.699300000000001 +sg8 +F0.34804600000000002 +sg9 +F309.380064 +sg10 +(lp505 +L327903701L +aL327903702L +aL327903703L +aL327903704L +aL327903705L +aL327903706L +aL327903707L +aL327903708L +aL327903709L +aL327903710L +asg12 +(lp506 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24806500000000001 +sS't' +F53312.062954200002 +ss(F309.37280800000002 +F0.33524100000000001 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp507 +(dp508 +g4 +F0.33524100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.68198700000000001 +sS'm' +F21.845300000000002 +sg8 +F0.95301000000000002 +sg9 +F309.37280800000002 +sg10 +(lp509 +L343712015L +aL343712016L +aL343712017L +aL343712018L +aL343712019L +asg12 +(lp510 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158735600002 +ss(F309.38530100000003 +F0.33196599999999998 +F1.0100499999999999 +F0.99204700000000001 +I0 +tp511 +(dp512 +g4 +F0.33196599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.139381 +sS'm' +F19.118200000000002 +sg8 +F0.99204700000000001 +sg9 +F309.38530100000003 +sg10 +(lp513 +L342966185L +aL342966181L +aL342966182L +aL342966183L +aL342966184L +asg12 +(lp514 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F1.0100499999999999 +sS't' +F53270.135443300001 +ss(F309.38261899999998 +F0.33971899999999999 +F0.74900299999999997 +F0.97800600000000004 +I0 +tp515 +(dp516 +g4 +F0.33971899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.0499304 +sS'm' +F18.714099999999998 +sg8 +F0.97800600000000004 +sg9 +F309.38261899999998 +sg10 +(lp517 +L171378213L +aL171378214L +aL171378215L +aL171378216L +aL171378217L +asg12 +(lp518 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107175600002 +ss(F309.36636199999998 +F0.34080899999999997 +F0.85100299999999995 +F0.91300800000000004 +I0 +tp519 +(dp520 +g4 +F0.34080899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.014648100000000001 +sS'm' +F15.9908 +sg8 +F0.91300800000000004 +sg9 +F309.36636199999998 +sg10 +(lp521 +L343874098L +aL343874099L +aL343874095L +aL343874096L +aL343874097L +asg12 +(lp522 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.85100299999999995 +sS't' +F53626.144100600002 +ss(F309.36927200000002 +F0.31895200000000001 +F0.92100599999999999 +F1.1000099999999999 +I0 +tp523 +(dp524 +g4 +F0.31895200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.29303699999999999 +sS'm' +F21.309100000000001 +sg8 +F1.1000099999999999 +sg9 +F309.36927200000002 +sg10 +(lp525 +L345535095L +aL345535096L +aL345535097L +aL345535098L +aL345535099L +asg12 +(lp526 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100599999999999 +sS't' +F53677.099744200001 +ss(F309.38543399999998 +F0.34013399999999999 +F0.85107299999999997 +F0.91306699999999996 +I0 +tp527 +(dp528 +g4 +F0.34013399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.67494900000000002 +sS'm' +F21.7057 +sg8 +F0.91306699999999996 +sg9 +F309.38543399999998 +sg10 +(lp529 +L343880273L +aL343880274L +aL343880275L +aL343880276L +asg12 +(lp530 +I0 +aI1 +aI2 +aI3 +asg14 +F0.85107299999999997 +sS't' +F53626.144982799997 +ss(F309.36312600000002 +F0.33103399999999999 +F0.93301000000000001 +F0.87801099999999999 +I0 +tp531 +(dp532 +g4 +F0.33103399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.057723499999999997 +sS'm' +F18.7803 +sg8 +F0.87801099999999999 +sg9 +F309.36312600000002 +sg10 +(lp533 +L345024420L +aL345024421L +aL345024422L +aL345024423L +aL345024424L +asg12 +(lp534 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301000000000001 +sS't' +F53670.113824100001 +ss(F309.387833 +F0.32184299999999999 +F0.65087099999999998 +F0.54194299999999995 +I0 +tp535 +(dp536 +g4 +F0.32184299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.657 +sS'm' +F22.7683 +sg8 +F0.54194299999999995 +sg9 +F309.387833 +sg10 +(lp537 +L112299480L +aL112299481L +aL112299482L +aL112299483L +aL112299484L +asg12 +(lp538 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.65087099999999998 +sS't' +F53656.106128300002 +ss(F309.387136 +F0.31927299999999997 +F0.92141200000000001 +F1.1001799999999999 +I0 +tp539 +(dp540 +g4 +F0.31927299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F4.2394499999999997 +sS'm' +F24.3324 +sg8 +F1.1001799999999999 +sg9 +F309.387136 +sg10 +(lp541 +L345542094L +aL345542095L +aL345542096L +aL345542097L +aL345542098L +asg12 +(lp542 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92141200000000001 +sS't' +F53677.0997938 +ss(F309.38896799999998 +F0.34519100000000003 +F0.61601799999999995 +F0.77502099999999996 +I0 +tp543 +(dp544 +g4 +F0.34519100000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.44147399999999998 +sS'm' +F21.1448 +sg8 +F0.77502099999999996 +sg9 +F309.38896799999998 +sg10 +(lp545 +L346166374L +aL346166375L +aL346166376L +aL346166377L +aL346166378L +asg12 +(lp546 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601799999999995 +sS't' +F53704.071697899999 +ss(F309.382181 +F0.32175100000000001 +F1.0100100000000001 +F0.95301100000000005 +I0 +tp547 +(dp548 +g4 +F0.32175100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.25303599999999998 +sS'm' +F20.7058 +sg8 +F0.95301100000000005 +sg9 +F309.382181 +sg10 +(lp549 +L343712218L +aL343712219L +aL343712220L +aL343712221L +aL343712222L +asg12 +(lp550 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158761699997 +ss(F309.36995999999999 +F0.334507 +F0.749089 +F0.97809500000000005 +I0 +tp551 +(dp552 +g4 +F0.334507 +sg5 +I0 +sg6 +I0 +sg7 +F0.31481700000000001 +sS'm' +F22.885000000000002 +sg8 +F0.97809500000000005 +sg9 +F309.36995999999999 +sg10 +(lp553 +L171386270L +aL171386271L +aL171386272L +aL171386273L +asg12 +(lp554 +I1 +aI2 +aI3 +aI4 +asg14 +F0.749089 +sS't' +F54005.108798900001 +ss(F309.35980599999999 +F0.32505299999999998 +F0.92100700000000002 +F1.1000099999999999 +I0 +tp555 +(dp556 +g4 +F0.32505299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.85259200000000002 +sS'm' +F22.895900000000001 +sg8 +F1.1000099999999999 +sg9 +F309.35980599999999 +sg10 +(lp557 +L345534879L +aL345534880L +aL345534881L +aL345534882L +aL345534883L +aL345534884L +aL345534885L +aL345534886L +aL345534887L +aL345534888L +asg12 +(lp558 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100700000000002 +sS't' +F53677.099717899997 +ss(F309.36241899999999 +F0.31967499999999999 +F0.73286499999999999 +F0.73304199999999997 +I0 +tp559 +(dp560 +g4 +F0.31967499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.62859 +sS'm' +F22.3002 +sg8 +F0.73304199999999997 +sg9 +F309.36241899999999 +sg10 +(lp561 +L344603106L +aL344603107L +aL344603108L +aL344603109L +aL344603110L +asg12 +(lp562 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.73286499999999999 +sS't' +F53654.158467699999 +ss(F309.372345 +F0.32411099999999998 +F0.74108300000000005 +F0.960059 +I0 +tp563 +(dp564 +g4 +F0.32411099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.31897199999999998 +sS'm' +F22.780799999999999 +sg8 +F0.960059 +sg9 +F309.372345 +sg10 +(lp565 +L344482910L +aL344482911L +aL344482912L +aL344482913L +asg12 +(lp566 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74108300000000005 +sS't' +F53644.125503000003 +ss(F309.38810599999999 +F0.33811400000000003 +F0.47650500000000001 +F0.45441399999999998 +I0 +tp567 +(dp568 +g4 +F0.33811400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.33420299999999997 +sS'm' +F22.344000000000001 +sg8 +F0.45441399999999998 +sg9 +F309.38810599999999 +sg10 +(lp569 +L344876346L +aL344876347L +aL344876348L +aL344876349L +asg12 +(lp570 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47650500000000001 +sS't' +F53668.110697999997 +ss(F309.37476400000003 +F0.33170300000000003 +F0.64901500000000001 +F0.53902000000000005 +I0 +tp571 +(dp572 +g4 +F0.33170300000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.033778099999999998 +sS'm' +F15.975300000000001 +sg8 +F0.53902000000000005 +sg9 +F309.37476400000003 +sg10 +(lp573 +L112295410L +aL112295411L +aL112295412L +aL112295413L +aL112295414L +asg12 +(lp574 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901500000000001 +sS't' +F53656.106092000002 +ss(F309.36519299999998 +F0.33727400000000002 +F1.0501 +F0.944106 +I0 +tp575 +(dp576 +g4 +F0.33727400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F5.5170300000000001 +sS'm' +F24.323499999999999 +sg8 +F0.944106 +sg9 +F309.36519299999998 +sg10 +(lp577 +L346336191L +aL346336192L +aL346336193L +aL346336194L +asg12 +(lp578 +I0 +aI1 +aI2 +aI3 +asg14 +F1.0501 +sS't' +F53974.1595514 +ss(F309.382723 +F0.33515200000000001 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp579 +(dp580 +g4 +F0.33515200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.081133300000000005 +sS'm' +F19.4085 +sg8 +F1.1000099999999999 +sg9 +F309.382723 +sg10 +(lp581 +L345532341L +aL345532342L +aL345532343L +aL345532344L +aL345532345L +asg12 +(lp582 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099781600002 +ss(F309.38239499999997 +F0.32447100000000001 +F0.921126 +F1.10015 +I0 +tp583 +(dp584 +g4 +F0.32447100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.9725600000000001 +sS'm' +F23.4877 +sg8 +F1.10015 +sg9 +F309.38239499999997 +sg10 +(lp585 +L345535370L +aL345535371L +aL345535372L +aL345535373L +aL345535374L +asg12 +(lp586 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.921126 +sS't' +F53677.099780600001 +ss(F309.36634400000003 +F0.34079999999999999 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp587 +(dp588 +g4 +F0.34079999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.057736099999999999 +sS'm' +F18.364799999999999 +sg8 +F0.82900499999999999 +sg9 +F309.36634400000003 +sg10 +(lp589 +L343271444L +aL343271445L +aL343271446L +aL343271447L +aL343271448L +asg12 +(lp590 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.1074076 +ss(F309.368224 +F0.32761600000000002 +F0.82909900000000003 +F0.94611400000000001 +I0 +tp591 +(dp592 +g4 +F0.32761600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.7055600000000002 +sS'm' +F24.879100000000001 +sg8 +F0.94611400000000001 +sg9 +F309.368224 +sg10 +(lp593 +L343126889L +aL343126890L +aL343126891L +aL343126892L +asg12 +(lp594 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82909900000000003 +sS't' +F53288.113402499999 +ss(F309.38275099999998 +F0.32576100000000002 +F0.74900999999999995 +F0.97801099999999996 +I0 +tp595 +(dp596 +g4 +F0.32576100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.21669 +sS'm' +F23.030899999999999 +sg8 +F0.97801099999999996 +sg9 +F309.38275099999998 +sg10 +(lp597 +L171381609L +aL171381610L +aL171381611L +aL171381612L +aL171381613L +aL171381614L +aL171381615L +aL171381616L +aL171381617L +aL171381618L +asg12 +(lp598 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900999999999995 +sS't' +F54005.107175899997 +ss(F309.38750099999999 +F0.33218799999999998 +F0.77544299999999999 +F0.75438899999999998 +I0 +tp599 +(dp600 +g4 +F0.33218799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.2977599999999998 +sS'm' +F23.060099999999998 +sg8 +F0.75438899999999998 +sg9 +F309.38750099999999 +sg10 +(lp601 +L342830486L +aL342830487L +aL342830488L +aL342830489L +aL342830490L +asg12 +(lp602 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77544299999999999 +sS't' +F53243.2557935 +ss(F309.38266299999998 +F0.31700299999999998 +F1.05016 +F0.94427000000000005 +I0 +tp603 +(dp604 +g4 +F0.31700299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.26877 +sS'm' +F23.349799999999998 +sg8 +F0.94427000000000005 +sg9 +F309.38266299999998 +sg10 +(lp605 +L346336487L +aL346336488L +aL346336489L +aL346336490L +aL346336491L +asg12 +(lp606 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05016 +sS't' +F53974.159599899998 +ss(F309.385402 +F0.340138 +F1.05003 +F0.94403300000000001 +I0 +tp607 +(dp608 +g4 +F0.340138 +sg5 +I0 +sg6 +I0 +sg7 +F1.70845 +sS'm' +F23.025099999999998 +sg8 +F0.94403300000000001 +sg9 +F309.385402 +sg10 +(lp609 +L346336611L +aL346336612L +aL346336613L +aL346336614L +aL346336615L +asg12 +(lp610 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05003 +sS't' +F53974.159607499998 +ss(F309.368289 +F0.32754899999999998 +F1.0508 +F0.94445699999999999 +I0 +tp611 +(dp612 +g4 +F0.32754899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.8057499999999997 +sS'm' +F24.174700000000001 +sg8 +F0.94445699999999999 +sg9 +F309.368289 +sg10 +(lp613 +L346336210L +aL346336211L +aL346336212L +aL346336213L +aL346336214L +asg12 +(lp614 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0508 +sS't' +F53974.15956 +ss(F309.389343 +F0.322156 +F0.88506300000000004 +F1.1100300000000001 +I0 +tp615 +(dp616 +g4 +F0.322156 +sg5 +I0 +sg6 +I0 +sg7 +F3.9337 +sS'm' +F24.425899999999999 +sg8 +F1.1100300000000001 +sg9 +F309.389343 +sg10 +(lp617 +L344150960L +aL344150961L +aL344150962L +aL344150963L +aL344150964L +asg12 +(lp618 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88506300000000004 +sS't' +F53635.138238899999 +ss(F309.37474800000001 +F0.33168999999999998 +F0.92400700000000002 +F1.0300100000000001 +I0 +tp619 +(dp620 +g4 +F0.33168999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.035782399999999999 +sS'm' +F15.954700000000001 +sg8 +F1.0300100000000001 +sg9 +F309.37474800000001 +sg10 +(lp621 +L345217498L +aL345217499L +aL345217500L +aL345217501L +aL345217502L +asg12 +(lp622 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400700000000002 +sS't' +F53673.0818373 +ss(F309.38543800000002 +F0.34015400000000001 +F0.92405000000000004 +F1.0300400000000001 +I0 +tp623 +(dp624 +g4 +F0.34015400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.45618999999999998 +sS'm' +F21.683 +sg8 +F1.0300400000000001 +sg9 +F309.38543800000002 +sg10 +(lp625 +L345217592L +aL345217593L +aL345217594L +aL345217595L +aL345217596L +asg12 +(lp626 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92405000000000004 +sS't' +F53673.081867000001 +ss(F309.37473999999997 +F0.33171600000000001 +F0.61600999999999995 +F0.77501600000000004 +I0 +tp627 +(dp628 +g4 +F0.33171600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.037204099999999997 +sS'm' +F15.958 +sg8 +F0.77501600000000004 +sg9 +F309.37473999999997 +sg10 +(lp629 +L346166223L +aL346166224L +aL346166225L +aL346166226L +aL346166227L +asg12 +(lp630 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61600999999999995 +sS't' +F53704.071658399997 +ss(F309.38621999999998 +F0.33889900000000001 +F1.01041 +F0.953156 +I0 +tp631 +(dp632 +g4 +F0.33889900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.473356 +sS'm' +F22.933 +sg8 +F0.953156 +sg9 +F309.38621999999998 +sg10 +(lp633 +L343715997L +aL343715998L +aL343715999L +aL343716000L +asg12 +(lp634 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01041 +sS't' +F53623.160431299999 +ss(F309.38751500000001 +F0.33216000000000001 +F1.0501499999999999 +F0.94412700000000005 +I0 +tp635 +(dp636 +g4 +F0.33216000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.8281999999999998 +sS'm' +F23.914400000000001 +sg8 +F0.94412700000000005 +sg9 +F309.38751500000001 +sg10 +(lp637 +L346333353L +aL346333354L +aL346333355L +aL346333356L +aL346333357L +asg12 +(lp638 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0501499999999999 +sS't' +F53974.159613399999 +ss(F309.367411 +F0.32939400000000002 +F0.50721000000000005 +F0.46094499999999999 +I0 +tp639 +(dp640 +g4 +F0.32939400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.62548 +sS'm' +F22.879200000000001 +sg8 +F0.46094499999999999 +sg9 +F309.367411 +sg10 +(lp641 +L153253710L +aL153253711L +aL153253712L +aL153253713L +aL153253714L +asg12 +(lp642 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50721000000000005 +sS't' +F53702.083957399998 +ss(F309.368089 +F0.34602500000000003 +F0.92451099999999997 +F1.03023 +I0 +tp643 +(dp644 +g4 +F0.34602500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F3.0738599999999998 +sS'm' +F25.046199999999999 +sg8 +F1.03023 +sg9 +F309.368089 +sg10 +(lp645 +L345217363L +aL345217364L +aL345217365L +aL345217366L +asg12 +(lp646 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92451099999999997 +sS't' +F53673.083477300002 +ss(F309.387766 +F0.32188600000000001 +F0.74126400000000003 +F0.96038599999999996 +I0 +tp647 +(dp648 +g4 +F0.32188600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.9383499999999998 +sS'm' +F24.044799999999999 +sg8 +F0.96038599999999996 +sg9 +F309.387766 +sg10 +(lp649 +L344482149L +aL344482150L +aL344482151L +aL344482152L +aL344482153L +asg12 +(lp650 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74126400000000003 +sS't' +F53644.123887399997 +ss(F309.36983199999997 +F0.344663 +F0.24871099999999999 +F0.34864699999999998 +I0 +tp651 +(dp652 +g4 +F0.344663 +sg5 +I0 +sg6 +I0 +sg7 +F1.3701000000000001 +sS'm' +F23.684699999999999 +sg8 +F0.34864699999999998 +sg9 +F309.36983199999997 +sg10 +(lp653 +L327906521L +aL327906522L +aL327906523L +aL327906524L +asg12 +(lp654 +I1 +aI2 +aI3 +aI4 +asg14 +F0.24871099999999999 +sS't' +F53312.064584300002 +ss(F309.36004700000001 +F0.32052799999999998 +F0.413078 +F0.41208400000000001 +I0 +tp655 +(dp656 +g4 +F0.32052799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.137429 +sS'm' +F19.730799999999999 +sg8 +F0.41208400000000001 +sg9 +F309.36004700000001 +sg10 +(lp657 +L345997664L +aL345997665L +aL345997666L +aL345997667L +aL345997668L +aL345997669L +aL345997670L +aL345997671L +aL345997672L +aL345997673L +asg12 +(lp658 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.413078 +sS't' +F53703.093070499999 +ss(F309.36928699999999 +F0.31898700000000002 +F0.61602299999999999 +F0.77502499999999996 +I0 +tp659 +(dp660 +g4 +F0.31898700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.42768699999999998 +sS'm' +F21.221800000000002 +sg8 +F0.77502499999999996 +sg9 +F309.36928699999999 +sg10 +(lp661 +L346168172L +aL346168173L +aL346168174L +aL346168175L +aL346168176L +asg12 +(lp662 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61602299999999999 +sS't' +F53704.071643199997 +ss(F309.37433199999998 +F0.32658799999999999 +F0.92100499999999996 +F1.1000099999999999 +I0 +tp663 +(dp664 +g4 +F0.32658799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.89744 +sS'm' +F23.439699999999998 +sg8 +F1.1000099999999999 +sg9 +F309.37433199999998 +sg10 +(lp665 +L345535194L +aL345535195L +aL345535196L +aL345535197L +aL345535198L +aL345535199L +aL345535200L +aL345535201L +aL345535202L +aL345535203L +asg12 +(lp666 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100499999999996 +sS't' +F53677.099758199998 +ss(F309.38526300000001 +F0.33196399999999998 +F0.41319499999999998 +F0.41231699999999999 +I0 +tp667 +(dp668 +g4 +F0.33196399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.4457800000000001 +sS'm' +F22.446999999999999 +sg8 +F0.41231699999999999 +sg9 +F309.38526300000001 +sg10 +(lp669 +L346001048L +aL346001049L +aL346001050L +aL346001051L +aL346001052L +aL346001053L +aL346001054L +aL346001055L +aL346001056L +aL346001057L +asg12 +(lp670 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41319499999999998 +sS't' +F53703.093140600002 +ss(F309.37425300000001 +F0.32800499999999999 +F0.88843799999999995 +F1.1118399999999999 +I0 +tp671 +(dp672 +g4 +F0.32800499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.6812499999999999 +sS'm' +F23.4893 +sg8 +F1.1118399999999999 +sg9 +F309.37425300000001 +sg10 +(lp673 +L344147987L +aL344147988L +aL344147989L +aL344147990L +aL344147991L +asg12 +(lp674 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88843799999999995 +sS't' +F53635.138197 +ss(F309.38617399999998 +F0.33440500000000001 +F0.76371500000000003 +F0.98087800000000003 +I0 +tp675 +(dp676 +g4 +F0.33440500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.74819899999999995 +sS'm' +F22.482399999999998 +sg8 +F0.98087800000000003 +sg9 +F309.38617399999998 +sg10 +(lp677 +L171388887L +aL171388888L +aL171388889L +aL171388890L +aL171388891L +asg12 +(lp678 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.76371500000000003 +sS't' +F54005.107185499997 +ss(F309.38648599999999 +F0.32200099999999998 +F0.41320099999999998 +F0.41218199999999999 +I0 +tp679 +(dp680 +g4 +F0.32200099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.13861299999999999 +sS'm' +F21.0825 +sg8 +F0.41218199999999999 +sg9 +F309.38648599999999 +sg10 +(lp681 +L346001101L +aL346001102L +aL346001103L +aL346001104L +asg12 +(lp682 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41320099999999998 +sS't' +F53703.094802400003 +ss(F309.37472300000002 +F0.33168599999999998 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp683 +(dp684 +g4 +F0.33168599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.035603599999999999 +sS'm' +F15.942299999999999 +sg8 +F1.0700000000000001 +sg9 +F309.37472300000002 +sg10 +(lp685 +L345675866L +aL345675867L +aL345675868L +aL345675869L +aL345675870L +asg12 +(lp686 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086424399997 +ss(F309.360884 +F0.31767299999999998 +F1.08009 +F1.01007 +I0 +tp687 +(dp688 +g4 +F0.31767299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.0076400000000003 +sS'm' +F23.757200000000001 +sg8 +F1.01007 +sg9 +F309.360884 +sg10 +(lp689 +L345366037L +aL345366038L +aL345366039L +aL345366040L +aL345366041L +asg12 +(lp690 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08009 +sS't' +F53675.078688200003 +ss(F309.38271400000002 +F0.33517599999999997 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp691 +(dp692 +g4 +F0.33517599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.093149300000000004 +sS'm' +F19.381699999999999 +sg8 +F0.99200699999999997 +sg9 +F309.38271400000002 +sg10 +(lp693 +L342964632L +aL342964633L +aL342964634L +aL342964635L +aL342964636L +aL342964637L +aL342964638L +aL342964639L +aL342964640L +aL342964641L +asg12 +(lp694 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134606899999 +ss(F309.382046 +F0.343005 +F1.0100499999999999 +F0.992058 +I0 +tp695 +(dp696 +g4 +F0.343005 +sg5 +I0 +sg6 +I0 +sg7 +F0.73824400000000001 +sS'm' +F22.0107 +sg8 +F0.992058 +sg9 +F309.382046 +sg10 +(lp697 +L342962121L +aL342962122L +aL342962123L +aL342962124L +aL342962125L +asg12 +(lp698 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100499999999999 +sS't' +F53270.134604999999 +ss(F309.37897600000002 +F0.327075 +F0.50614899999999996 +F0.45924100000000001 +I0 +tp699 +(dp700 +g4 +F0.327075 +sg5 +I0 +sg6 +I0 +sg7 +F0.76202800000000004 +sS'm' +F21.518000000000001 +sg8 +F0.45924100000000001 +sg9 +F309.37897600000002 +sg10 +(lp701 +L153252783L +aL153252784L +aL153252785L +aL153252786L +aL153252787L +asg12 +(lp702 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50614899999999996 +sS't' +F53702.083989500003 +ss(F309.36087800000001 +F0.31764900000000001 +F0.921072 +F1.1000799999999999 +I0 +tp703 +(dp704 +g4 +F0.31764900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.5981800000000002 +sS'm' +F23.782399999999999 +sg8 +F1.1000799999999999 +sg9 +F309.36087800000001 +sg10 +(lp705 +L345535011L +aL345535012L +aL345535013L +aL345535014L +aL345535015L +asg12 +(lp706 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.921072 +sS't' +F53677.099720899998 +ss(F309.38366600000001 +F0.34500799999999998 +F0.98401099999999997 +F0.98801000000000005 +I0 +tp707 +(dp708 +g4 +F0.34500799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.427118 +sS'm' +F21.555099999999999 +sg8 +F0.98801000000000005 +sg9 +F309.38366600000001 +sg10 +(lp709 +L346462228L +aL346462229L +aL346462230L +aL346462231L +aL346462232L +asg12 +(lp710 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98401099999999997 +sS't' +F54007.119927699998 +ss(F309.37302499999998 +F0.32021699999999997 +F0.93316699999999997 +F0.878332 +I0 +tp711 +(dp712 +g4 +F0.32021699999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.42929899999999999 +sS'm' +F22.865400000000001 +sg8 +F0.878332 +sg9 +F309.37302499999998 +sg10 +(lp713 +L345030729L +aL345030730L +aL345030731L +aL345030732L +asg12 +(lp714 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93316699999999997 +sS't' +F53670.115510000003 +ss(F309.38008200000002 +F0.34215000000000001 +F0.50603799999999999 +F0.45910099999999998 +I0 +tp715 +(dp716 +g4 +F0.34215000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.078454700000000002 +sS'm' +F18.708300000000001 +sg8 +F0.45910099999999998 +sg9 +F309.38008200000002 +sg10 +(lp717 +L153250297L +aL153250298L +aL153250299L +aL153250300L +aL153250303L +aL153250304L +aL153250305L +aL153250306L +aL153250301L +aL153250302L +asg12 +(lp718 +I0 +aI1 +aI2 +aI3 +aI1 +aI2 +aI3 +aI4 +aI4 +aI0 +asg14 +F0.50603799999999999 +sS't' +F53702.083992599997 +ss(F309.37236999999999 +F0.324183 +F1.08005 +F1.01004 +I0 +tp719 +(dp720 +g4 +F0.324183 +sg5 +I0 +sg6 +I0 +sg7 +F0.26872200000000002 +sS'm' +F22.480799999999999 +sg8 +F1.01004 +sg9 +F309.37236999999999 +sg10 +(lp721 +L345370246L +aL345370247L +aL345370248L +aL345370249L +asg12 +(lp722 +I1 +aI2 +aI3 +aI4 +asg14 +F1.08005 +sS't' +F53675.080378500003 +ss(F309.38564400000001 +F0.32636599999999999 +F1.05003 +F0.94404100000000002 +I0 +tp723 +(dp724 +g4 +F0.32636599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.20447799999999999 +sS'm' +F21.767800000000001 +sg8 +F0.94404100000000002 +sg9 +F309.38564400000001 +sg10 +(lp725 +L346336607L +aL346336608L +aL346336609L +aL346336610L +asg12 +(lp726 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05003 +sS't' +F53974.1612666 +ss(F309.36633799999998 +F0.340837 +F0.74900299999999997 +F0.97800500000000001 +I0 +tp727 +(dp728 +g4 +F0.340837 +sg5 +I0 +sg6 +I0 +sg7 +F0.042937700000000002 +sS'm' +F18.357900000000001 +sg8 +F0.97800500000000001 +sg9 +F309.36633799999998 +sg10 +(lp729 +L171377933L +aL171377934L +aL171377935L +aL171377936L +aL171377937L +asg12 +(lp730 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.1071304 +ss(F309.38539900000001 +F0.34015499999999999 +F0.74104099999999995 +F0.96003499999999997 +I0 +tp731 +(dp732 +g4 +F0.34015499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.40560000000000002 +sS'm' +F21.814299999999999 +sg8 +F0.96003499999999997 +sg9 +F309.38539900000001 +sg10 +(lp733 +L344482125L +aL344482126L +aL344482127L +aL344482128L +aL344482129L +asg12 +(lp734 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74104099999999995 +sS't' +F53644.123880799998 +ss(F309.36776800000001 +F0.33361200000000002 +F1.0119499999999999 +F0.95534699999999995 +I0 +tp735 +(dp736 +g4 +F0.33361200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.91933 +sS'm' +F24.475100000000001 +sg8 +F0.95534699999999995 +sg9 +F309.36776800000001 +sg10 +(lp737 +L343717299L +aL343717300L +aL343717301L +aL343717302L +asg12 +(lp738 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0119499999999999 +sS't' +F53623.160380100002 +ss(F309.385289 +F0.33195000000000002 +F1.09002 +F1.0700099999999999 +I0 +tp739 +(dp740 +g4 +F0.33195000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.32186 +sS'm' +F24.222000000000001 +sg8 +F1.0700099999999999 +sg9 +F309.385289 +sg10 +(lp741 +L345680573L +aL345680574L +aL345680575L +aL345680576L +aL345680577L +aL345680578L +aL345680579L +aL345680580L +aL345680581L +aL345680582L +asg12 +(lp742 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09002 +sS't' +F53680.086453800002 +ss(F309.363113 +F0.33106799999999997 +F0.86500699999999997 +F0.90000599999999997 +I0 +tp743 +(dp744 +g4 +F0.33106799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.062205000000000003 +sS'm' +F18.812999999999999 +sg8 +F0.90000599999999997 +sg9 +F309.363113 +sg10 +(lp745 +L345808902L +aL345808903L +aL345808904L +aL345808905L +aL345808906L +aL345808907L +aL345808908L +aL345808909L +aL345808910L +aL345808911L +asg12 +(lp746 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86500699999999997 +sS't' +F53693.088298299997 +ss(F309.38750299999998 +F0.33274199999999998 +F0.98414500000000005 +F0.98810399999999998 +I0 +tp747 +(dp748 +g4 +F0.33274199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.9611900000000002 +sS'm' +F23.723199999999999 +sg8 +F0.98810399999999998 +sg9 +F309.38750299999998 +sg10 +(lp749 +L346463368L +aL346463369L +aL346463370L +aL346463371L +aL346463372L +asg12 +(lp750 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98414500000000005 +sS't' +F54007.119938399999 +ss(F309.38246900000001 +F0.330316 +F0.749139 +F0.97809000000000001 +I0 +tp751 +(dp752 +g4 +F0.330316 +sg5 +I0 +sg6 +I0 +sg7 +F1.3403799999999999 +sS'm' +F23.137899999999998 +sg8 +F0.97809000000000001 +sg9 +F309.38246900000001 +sg10 +(lp753 +L171386493L +aL171386494L +aL171386495L +aL171386496L +aL171386497L +asg12 +(lp754 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.749139 +sS't' +F54005.107175199999 +ss(F309.36310900000001 +F0.33106799999999997 +F0.74900299999999997 +F0.97800500000000001 +I0 +tp755 +(dp756 +g4 +F0.33106799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.051869100000000001 +sS'm' +F18.8004 +sg8 +F0.97800500000000001 +sg9 +F309.36310900000001 +sg10 +(lp757 +L171377865L +aL171377866L +aL171377867L +aL171377868L +aL171377869L +aL171377870L +aL171377871L +aL171377872L +aL171377873L +aL171377874L +asg12 +(lp758 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107121399997 +ss(F309.38891100000001 +F0.34373500000000001 +F0.77901200000000004 +F0.82901400000000003 +I0 +tp759 +(dp760 +g4 +F0.34373500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.037616499999999997 +sS'm' +F16.194299999999998 +sg8 +F0.82901400000000003 +sg9 +F309.38891100000001 +sg10 +(lp761 +L343271689L +aL343271690L +aL343271691L +aL343271692L +aL343271693L +asg12 +(lp762 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77901200000000004 +sS't' +F53302.107470299998 +ss(F309.36453399999999 +F0.32446000000000003 +F0.984012 +F0.98801000000000005 +I0 +tp763 +(dp764 +g4 +F0.32446000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F6.0193300000000001 +sS'm' +F24.5183 +sg8 +F0.98801000000000005 +sg9 +F309.36453399999999 +sg10 +(lp765 +L346463263L +aL346463264L +aL346463265L +aL346463266L +aL346463267L +asg12 +(lp766 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.984012 +sS't' +F54007.119874600001 +ss(F309.36635200000001 +F0.34083799999999997 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp767 +(dp768 +g4 +F0.34083799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.062244800000000003 +sS'm' +F18.378399999999999 +sg8 +F0.99200699999999997 +sg9 +F309.36635200000001 +sg10 +(lp769 +L342961880L +aL342961881L +aL342961882L +aL342961883L +aL342961884L +asg12 +(lp770 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134561400002 +ss(F309.38650899999999 +F0.32197799999999999 +F0.92402799999999996 +F1.03003 +I0 +tp771 +(dp772 +g4 +F0.32197799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.92093499999999995 +sS'm' +F22.4787 +sg8 +F1.03003 +sg9 +F309.38650899999999 +sg10 +(lp773 +L345224183L +aL345224184L +aL345224185L +aL345224186L +aL345224187L +asg12 +(lp774 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92402799999999996 +sS't' +F53673.081870000002 +ss(F309.38773300000003 +F0.32198500000000002 +F1.0119800000000001 +F0.99463500000000005 +I0 +tp775 +(dp776 +g4 +F0.32198500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.38151 +sS'm' +F22.6995 +sg8 +F0.99463500000000005 +sg9 +F309.38773300000003 +sg10 +(lp777 +L342968362L +aL342968363L +aL342968364L +aL342968365L +aL342968366L +asg12 +(lp778 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0119800000000001 +sS't' +F53270.134620800003 +ss(F309.38541500000002 +F0.34015099999999998 +F0.77907599999999999 +F0.82906899999999994 +I0 +tp779 +(dp780 +g4 +F0.34015099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.76098699999999997 +sS'm' +F21.724699999999999 +sg8 +F0.82906899999999994 +sg9 +F309.38541500000002 +sg10 +(lp781 +L343277303L +aL343277304L +aL343277305L +aL343277306L +aL343277307L +asg12 +(lp782 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77907599999999999 +sS't' +F53302.107460599997 +ss(F309.37795899999998 +F0.33787099999999998 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp783 +(dp784 +g4 +F0.33787099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.062556 +sS'm' +F18.3934 +sg8 +F0.99200699999999997 +sg9 +F309.37795899999998 +sg10 +(lp785 +L342962082L +aL342962083L +aL342962084L +aL342962085L +aL342962086L +aL342962077L +aL342962078L +aL342962079L +aL342962080L +aL342962081L +asg12 +(lp786 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134593700001 +ss(F309.37771700000002 +F0.32561000000000001 +F0.74102500000000004 +F0.96002100000000001 +I0 +tp787 +(dp788 +g4 +F0.32561000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.2101999999999999 +sS'm' +F24.139700000000001 +sg8 +F0.96002100000000001 +sg9 +F309.37771700000002 +sg10 +(lp789 +L344481241L +aL344481242L +aL344481243L +aL344481244L +aL344481245L +asg12 +(lp790 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74102500000000004 +sS't' +F53644.123859500003 +ss(F309.36402700000002 +F0.31757000000000002 +F0.74901799999999996 +F0.97801499999999997 +I0 +tp791 +(dp792 +g4 +F0.31757000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.085804199999999997 +sS'm' +F21.3308 +sg8 +F0.97801499999999997 +sg9 +F309.36402700000002 +sg10 +(lp793 +L171381139L +aL171381140L +aL171381141L +aL171381142L +aL171381138L +asg12 +(lp794 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.74901799999999996 +sS't' +F54005.108782399999 +ss(F309.36678899999998 +F0.33562599999999998 +F0.52685300000000002 +F0.49519299999999999 +I0 +tp795 +(dp796 +g4 +F0.33562599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.9649700000000001 +sS'm' +F24.3124 +sg8 +F0.49519299999999999 +sg9 +F309.36678899999998 +sg10 +(lp797 +L153253706L +aL153253707L +aL153253708L +aL153253709L +asg12 +(lp798 +I1 +aI2 +aI3 +aI4 +asg14 +F0.52685300000000002 +sS't' +F53702.085614099997 +ss(F309.35978799999998 +F0.32505400000000001 +F0.828017 +F0.94501299999999999 +I0 +tp799 +(dp800 +g4 +F0.32505400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.19624 +sS'm' +F22.668299999999999 +sg8 +F0.94501299999999999 +sg9 +F309.35978799999998 +sg10 +(lp801 +L343125927L +aL343125928L +aL343125929L +aL343125930L +aL343125931L +aL343125932L +aL343125933L +aL343125934L +aL343125935L +aL343125936L +asg12 +(lp802 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828017 +sS't' +F53288.111720599998 +ss(F309.37281000000002 +F0.33521899999999999 +F0.77900499999999995 +F0.82900700000000005 +I0 +tp803 +(dp804 +g4 +F0.33521899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.94626999999999994 +sS'm' +F21.965900000000001 +sg8 +F0.82900700000000005 +sg9 +F309.37281000000002 +sg10 +(lp805 +L343273320L +aL343273321L +aL343273322L +aL343273323L +aL343273324L +asg12 +(lp806 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900499999999995 +sS't' +F53302.107425599999 +ss(F309.36811499999999 +F0.346053 +F0.82836699999999996 +F0.94569700000000001 +I0 +tp807 +(dp808 +g4 +F0.346053 +sg5 +I0 +sg6 +I0 +sg7 +F0.53002099999999996 +sS'm' +F23.285900000000002 +sg8 +F0.94569700000000001 +sg9 +F309.36811499999999 +sg10 +(lp809 +L343127542L +aL343127543L +aL343127544L +aL343127545L +asg12 +(lp810 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82836699999999996 +sS't' +F53288.113402199997 +ss(F309.38653299999999 +F0.32198300000000002 +F0.47612700000000002 +F0.45413999999999999 +I0 +tp811 +(dp812 +g4 +F0.32198300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.69845299999999999 +sS'm' +F21.809799999999999 +sg8 +F0.45413999999999999 +sg9 +F309.38653299999999 +sg10 +(lp813 +L344876331L +aL344876332L +aL344876333L +aL344876334L +aL344876335L +asg12 +(lp814 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47612700000000002 +sS't' +F53668.109035200003 +ss(F309.38529599999998 +F0.33194299999999999 +F0.82804199999999994 +F0.94503099999999995 +I0 +tp815 +(dp816 +g4 +F0.33194299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.78665300000000005 +sS'm' +F22.203499999999998 +sg8 +F0.94503099999999995 +sg9 +F309.38529599999998 +sg10 +(lp817 +L343126107L +aL343126108L +aL343126109L +aL343126110L +aL343126111L +aL343126112L +aL343126113L +aL343126114L +aL343126115L +aL343126116L +asg12 +(lp818 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82804199999999994 +sS't' +F53288.1117915 +ss(F309.36005799999998 +F0.32051200000000002 +F0.24806500000000001 +F0.34804600000000002 +I0 +tp819 +(dp820 +g4 +F0.32051200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0218427 +sS'm' +F16.871500000000001 +sg8 +F0.34804600000000002 +sg9 +F309.36005799999998 +sg10 +(lp821 +L327903431L +aL327903432L +aL327903424L +aL327903425L +aL327903426L +aL327903427L +aL327903428L +aL327903429L +aL327903430L +aL327903423L +asg12 +(lp822 +I3 +aI4 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI0 +asg14 +F0.24806500000000001 +sS't' +F53312.062069400003 +ss(F309.36006099999997 +F0.32052199999999997 +F0.74900299999999997 +F0.97800500000000001 +I0 +tp823 +(dp824 +g4 +F0.32052199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.0153913 +sS'm' +F17.818300000000001 +sg8 +F0.97800500000000001 +sg9 +F309.36006099999997 +sg10 +(lp825 +L171377770L +aL171377771L +aL171377772L +aL171377773L +aL171377774L +aL171377775L +aL171377776L +aL171377777L +aL171377778L +aL171377769L +asg12 +(lp826 +I1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.74900299999999997 +sS't' +F54005.108771400002 +ss(F309.37795999999997 +F0.33787600000000001 +F0.61600999999999995 +F0.77501600000000004 +I0 +tp827 +(dp828 +g4 +F0.33787600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.0566358 +sS'm' +F18.350300000000001 +sg8 +F0.77501600000000004 +sg9 +F309.37795999999997 +sg10 +(lp829 +L346166252L +aL346166253L +aL346166254L +aL346166255L +aL346166256L +asg12 +(lp830 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61600999999999995 +sS't' +F53704.071667299999 +ss(F309.36676799999998 +F0.33558100000000002 +F1.05027 +F0.94437499999999996 +I0 +tp831 +(dp832 +g4 +F0.33558100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.0846300000000002 +sS'm' +F23.687799999999999 +sg8 +F0.94437499999999996 +sg9 +F309.36676799999998 +sg10 +(lp833 +L346337764L +aL346337765L +aL346337766L +aL346337767L +aL346337768L +asg12 +(lp834 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05027 +sS't' +F53974.159555799997 +ss(F309.38066600000002 +F0.32855600000000001 +F0.62918099999999999 +F0.78058000000000005 +I0 +tp835 +(dp836 +g4 +F0.32855600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.5028700000000002 +sS'm' +F23.180099999999999 +sg8 +F0.78058000000000005 +sg9 +F309.38066600000002 +sg10 +(lp837 +L346174354L +aL346174355L +aL346174356L +aL346174357L +aL346174358L +asg12 +(lp838 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.62918099999999999 +sS't' +F53704.071674799998 +ss(F309.36089700000002 +F0.31768200000000002 +F0.86510399999999998 +F0.90009700000000004 +I0 +tp839 +(dp840 +g4 +F0.31768200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.29099900000000001 +sS'm' +F22.102499999999999 +sg8 +F0.90009700000000004 +sg9 +F309.36089700000002 +sg10 +(lp841 +L345811265L +aL345811266L +aL345811267L +aL345811268L +asg12 +(lp842 +I1 +aI2 +aI3 +aI4 +asg14 +F0.86510399999999998 +sS't' +F53693.089950599999 +ss(F309.38782700000002 +F0.32186399999999998 +F0.78594799999999998 +F0.83201700000000001 +I0 +tp843 +(dp844 +g4 +F0.32186399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.16059 +sS'm' +F23.587900000000001 +sg8 +F0.83201700000000001 +sg9 +F309.38782700000002 +sg10 +(lp845 +L343277326L +aL343277327L +aL343277328L +aL343277329L +aL343277330L +asg12 +(lp846 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.78594799999999998 +sS't' +F53302.107467299997 +ss(F309.37281300000001 +F0.33523500000000001 +F0.47602299999999997 +F0.45402599999999999 +I0 +tp847 +(dp848 +g4 +F0.33523500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.2017 +sS'm' +F22.408000000000001 +sg8 +F0.45402599999999999 +sg9 +F309.37281300000001 +sg10 +(lp849 +L344873139L +aL344873140L +aL344873141L +aL344873142L +aL344873143L +asg12 +(lp850 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602299999999997 +sS't' +F53668.108997099996 +ss(F309.36766399999999 +F0.32834999999999998 +F0.85473100000000002 +F0.91710800000000003 +I0 +tp851 +(dp852 +g4 +F0.32834999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.70689400000000002 +sS'm' +F21.768000000000001 +sg8 +F0.91710800000000003 +sg9 +F309.36766399999999 +sg10 +(lp853 +L343881881L +aL343881882L +aL343881883L +aL343881884L +aL343881885L +asg12 +(lp854 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85473100000000002 +sS't' +F53626.1449335 +ss(F309.38788499999998 +F0.34222399999999997 +F0.24833 +F0.34825899999999999 +I0 +tp855 +(dp856 +g4 +F0.34222399999999997 +sg5 +I0 +sg6 +I0 +sg7 +F2.0531000000000001 +sS'm' +F22.8766 +sg8 +F0.34825899999999999 +sg9 +F309.38788499999998 +sg10 +(lp857 +L327902157L +aL327902158L +aL327902159L +aL327902160L +aL327902161L +asg12 +(lp858 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24833 +sS't' +F53312.062976000001 +ss(F309.378423 +F0.33690599999999998 +F0.83770500000000003 +F0.94531299999999996 +I0 +tp859 +(dp860 +g4 +F0.33690599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.9151800000000001 +sS'm' +F24.179099999999998 +sg8 +F0.94531299999999996 +sg9 +F309.378423 +sg10 +(lp861 +L343120516L +aL343120517L +aL343120518L +asg12 +(lp862 +I2 +aI3 +aI4 +asg14 +F0.83770500000000003 +sS't' +F53288.110113800001 +ss(F309.38027699999998 +F0.34037699999999999 +F0.92526299999999995 +F1.1053200000000001 +I0 +tp863 +(dp864 +g4 +F0.34037699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.4698 +sS'm' +F24.5959 +sg8 +F1.1053200000000001 +sg9 +F309.38027699999998 +sg10 +(lp865 +L345532270L +aL345532271L +aL345532272L +asg12 +(lp866 +I1 +aI2 +aI3 +asg14 +F0.92526299999999995 +sS't' +F53677.101433199998 +ss(F309.38007499999998 +F0.342144 +F0.77501200000000003 +F0.75402599999999997 +I0 +tp867 +(dp868 +g4 +F0.342144 +sg5 +I0 +sg6 +I0 +sg7 +F0.026003700000000001 +sS'm' +F17.3569 +sg8 +F0.75402599999999997 +sg9 +F309.38007499999998 +sg10 +(lp869 +L342827462L +aL342827463L +aL342827464L +aL342827465L +aL342827466L +aL342827467L +aL342827468L +aL342827469L +aL342827470L +aL342827461L +asg12 +(lp870 +I1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.77501200000000003 +sS't' +F53243.2574313 +ss(F309.38750499999998 +F0.33217200000000002 +F0.74911799999999995 +F0.97807500000000003 +I0 +tp871 +(dp872 +g4 +F0.33217200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.47006100000000001 +sS'm' +F23.3156 +sg8 +F0.97807500000000003 +sg9 +F309.38750499999998 +sg10 +(lp873 +L171384152L +aL171384153L +aL171384154L +aL171384155L +asg12 +(lp874 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74911799999999995 +sS't' +F54005.1088476 +ss(F309.37301600000001 +F0.32017499999999999 +F0.85170999999999997 +F0.91361999999999999 +I0 +tp875 +(dp876 +g4 +F0.32017499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.4822 +sS'm' +F22.5763 +sg8 +F0.91361999999999999 +sg9 +F309.37301600000001 +sg10 +(lp877 +L343882021L +aL343882022L +aL343882023L +aL343882024L +aL343882025L +asg12 +(lp878 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85170999999999997 +sS't' +F53626.144948300003 +ss(F309.387584 +F0.33213300000000001 +F0.47733999999999999 +F0.455009 +I0 +tp879 +(dp880 +g4 +F0.33213300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.24132 +sS'm' +F23.7119 +sg8 +F0.455009 +sg9 +F309.387584 +sg10 +(lp881 +L344873540L +aL344873541L +aL344873542L +aL344873543L +asg12 +(lp882 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47733999999999999 +sS't' +F53668.110696600001 +ss(F309.38189999999997 +F0.32081700000000002 +F0.88986100000000001 +F1.1183799999999999 +I0 +tp883 +(dp884 +g4 +F0.32081700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.2601899999999999 +sS'm' +F23.1691 +sg8 +F1.1183799999999999 +sg9 +F309.38189999999997 +sg10 +(lp885 +L344148120L +aL344148121L +aL344148122L +asg12 +(lp886 +I0 +aI2 +aI3 +asg14 +F0.88986100000000001 +sS't' +F53635.138218200002 +ss(F309.380246 +F0.34036699999999998 +F0.74592999999999998 +F0.96435099999999996 +I0 +tp887 +(dp888 +g4 +F0.34036699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.78176000000000001 +sS'm' +F23.852699999999999 +sg8 +F0.96435099999999996 +sg9 +F309.380246 +sg10 +(lp889 +L344475921L +aL344475922L +aL344475923L +aL344475924L +aL344475920L +asg12 +(lp890 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.74592999999999998 +sS't' +F53644.125525000003 +ss(F309.38889599999999 +F0.34376899999999999 +F0.74900999999999995 +F0.97801000000000005 +I0 +tp891 +(dp892 +g4 +F0.34376899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.0261271 +sS'm' +F16.176100000000002 +sg8 +F0.97801000000000005 +sg9 +F309.38889599999999 +sg10 +(lp893 +L171378424L +aL171378425L +aL171378426L +aL171378427L +aL171378428L +aL171378429L +aL171378430L +aL171378431L +aL171378432L +aL171378433L +asg12 +(lp894 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900999999999995 +sS't' +F54005.107193000003 +ss(F309.388915 +F0.34376699999999999 +F0.984012 +F0.988012 +I0 +tp895 +(dp896 +g4 +F0.34376699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.045437499999999999 +sS'm' +F16.2075 +sg8 +F0.988012 +sg9 +F309.388915 +sg10 +(lp897 +L346459648L +aL346459649L +aL346459650L +aL346459651L +aL346459652L +asg12 +(lp898 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.984012 +sS't' +F54007.1199423 +ss(F309.38935300000003 +F0.32218400000000003 +F0.74904400000000004 +F0.97803300000000004 +I0 +tp899 +(dp900 +g4 +F0.32218400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F6.8054800000000002 +sS'm' +F24.924499999999998 +sg8 +F0.97803300000000004 +sg9 +F309.38935300000003 +sg10 +(lp901 +L171381687L +aL171381688L +aL171381689L +aL171381690L +aL171381691L +asg12 +(lp902 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74904400000000004 +sS't' +F54005.107194299999 +ss(F309.36992700000002 +F0.334478 +F1.01013 +F0.99212699999999998 +I0 +tp903 +(dp904 +g4 +F0.334478 +sg5 +I0 +sg6 +I0 +sg7 +F5.2558699999999998 +sS'm' +F24.172000000000001 +sg8 +F0.99212699999999998 +sg9 +F309.36992700000002 +sg10 +(lp905 +L342968188L +aL342968189L +aL342968190L +aL342968191L +aL342968192L +asg12 +(lp906 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01013 +sS't' +F53270.134571299997 +ss(F309.38194800000002 +F0.33610299999999999 +F0.85156200000000004 +F0.91344800000000004 +I0 +tp907 +(dp908 +g4 +F0.33610299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F6.1207700000000003 +sS'm' +F24.127700000000001 +sg8 +F0.91344800000000004 +sg9 +F309.38194800000002 +sg10 +(lp909 +L343876328L +aL343876329L +aL343876330L +aL343876331L +aL343876332L +asg12 +(lp910 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85156200000000004 +sS't' +F53626.144973100003 +ss(F309.374326 +F0.32660499999999998 +F0.86501099999999997 +F0.90000999999999998 +I0 +tp911 +(dp912 +g4 +F0.32660499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.7559 +sS'm' +F23.038 +sg8 +F0.90000999999999998 +sg9 +F309.374326 +sg10 +(lp913 +L345812257L +aL345812258L +aL345812259L +aL345812260L +aL345812261L +aL345812262L +aL345812263L +aL345812264L +aL345812265L +aL345812266L +asg12 +(lp914 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86501099999999997 +sS't' +F53693.088329400001 +ss(F309.38753600000001 +F0.33216600000000002 +F0.93326299999999995 +F0.87838899999999998 +I0 +tp915 +(dp916 +g4 +F0.33216600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.1012900000000001 +sS'm' +F24.598299999999998 +sg8 +F0.87838899999999998 +sg9 +F309.38753600000001 +sg10 +(lp917 +L345028388L +aL345028389L +aL345028390L +aL345028391L +asg12 +(lp918 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93326299999999995 +sS't' +F53670.115550299997 +ss(F309.36598900000001 +F0.33174599999999999 +F0.50605 +F0.459115 +I0 +tp919 +(dp920 +g4 +F0.33174599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.038710700000000001 +sS'm' +F19.066600000000001 +sg8 +F0.459115 +sg9 +F309.36598900000001 +sg10 +(lp921 +L153250097L +aL153250098L +aL153250099L +aL153250100L +aL153250096L +asg12 +(lp922 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.50605 +sS't' +F53702.085611900002 +ss(F309.36145399999998 +F0.31856099999999998 +F0.92110899999999996 +F1.1002099999999999 +I0 +tp923 +(dp924 +g4 +F0.31856099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.45034 +sS'm' +F23.139500000000002 +sg8 +F1.1002099999999999 +sg9 +F309.36145399999998 +sg10 +(lp925 +L345535016L +aL345535017L +aL345535018L +aL345535019L +aL345535020L +asg12 +(lp926 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92110899999999996 +sS't' +F53677.099722500003 +ss(F309.37280800000002 +F0.33523599999999998 +F0.77501600000000004 +F0.75402999999999998 +I0 +tp927 +(dp928 +g4 +F0.33523599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.4453100000000001 +sS'm' +F23.121200000000002 +sg8 +F0.75402999999999998 +sg9 +F309.37280800000002 +sg10 +(lp929 +L342828805L +aL342828806L +aL342828807L +aL342828808L +aL342828809L +asg12 +(lp930 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501600000000004 +sS't' +F53243.255752600002 +ss(F309.38270599999998 +F0.33515099999999998 +F0.93300700000000003 +F0.87800800000000001 +I0 +tp931 +(dp932 +g4 +F0.33515099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.083639900000000003 +sS'm' +F19.4514 +sg8 +F0.87800800000000001 +sg9 +F309.38270599999998 +sg10 +(lp933 +L345027374L +aL345027375L +aL345027376L +aL345027377L +aL345027378L +asg12 +(lp934 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.1138785 +ss(F309.36631799999998 +F0.34083999999999998 +F0.41302499999999998 +F0.41203299999999998 +I0 +tp935 +(dp936 +g4 +F0.34083999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.060521600000000002 +sS'm' +F18.4206 +sg8 +F0.41203299999999998 +sg9 +F309.36631799999998 +sg10 +(lp937 +L345995943L +aL345995944L +aL345995945L +aL345995946L +aL345995947L +asg12 +(lp938 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41302499999999998 +sS't' +F53703.093087900001 +ss(F309.37196399999999 +F0.34107500000000002 +F1.0100100000000001 +F0.95301599999999997 +I0 +tp939 +(dp940 +g4 +F0.34107500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0944199999999999 +sS'm' +F22.370999999999999 +sg8 +F0.95301599999999997 +sg9 +F309.37196399999999 +sg10 +(lp941 +L343712005L +aL343712006L +aL343712007L +aL343712008L +aL343712009L +asg12 +(lp942 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158733299999 +ss(F309.36305399999998 +F0.32275500000000001 +F0.74390599999999996 +F0.96247799999999994 +I0 +tp943 +(dp944 +g4 +F0.32275500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.1231799999999996 +sS'm' +F24.409199999999998 +sg8 +F0.96247799999999994 +sg9 +F309.36305399999998 +sg10 +(lp945 +L344485416L +aL344485417L +aL344485418L +aL344485419L +aL344485420L +asg12 +(lp946 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74390599999999996 +sS't' +F53644.123818799999 +ss(F309.37196999999998 +F0.341059 +F0.56516500000000003 +F0.51413299999999995 +I0 +tp947 +(dp948 +g4 +F0.341059 +sg5 +I0 +sg6 +I0 +sg7 +F7.5661500000000004 +sS'm' +F24.104099999999999 +sg8 +F0.51413299999999995 +sg9 +F309.37196999999998 +sg10 +(lp949 +L344711576L +aL344711577L +aL344711578L +aL344711579L +aL344711580L +asg12 +(lp950 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.56516500000000003 +sS't' +F53654.158493000003 +ss(F309.37454400000001 +F0.31695699999999999 +F1.01033 +F0.99259500000000001 +I0 +tp951 +(dp952 +g4 +F0.31695699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1384000000000001 +sS'm' +F22.503299999999999 +sg8 +F0.99259500000000001 +sg9 +F309.37454400000001 +sg10 +(lp953 +L342970473L +aL342970474L +aL342970475L +aL342970476L +aL342970477L +asg12 +(lp954 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01033 +sS't' +F53270.134584200001 +ss(F309.38747599999999 +F0.33251399999999998 +F0.50702000000000003 +F0.46152300000000002 +I0 +tp955 +(dp956 +g4 +F0.33251399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.3055400000000001 +sS'm' +F23.126999999999999 +sg8 +F0.46152300000000002 +sg9 +F309.38747599999999 +sg10 +(lp957 +L153250535L +aL153250536L +aL153250537L +aL153250538L +aL153250539L +asg12 +(lp958 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50702000000000003 +sS't' +F53702.0840131 +ss(F309.36809399999999 +F0.34608299999999997 +F1.0903400000000001 +F1.07006 +I0 +tp959 +(dp960 +g4 +F0.34608299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F1.20706 +sS'm' +F24.379200000000001 +sg8 +F1.07006 +sg9 +F309.36809399999999 +sg10 +(lp961 +L345683709L +aL345683710L +aL345683711L +aL345683712L +asg12 +(lp962 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0903400000000001 +sS't' +F53680.0880645 +ss(F309.37454400000001 +F0.31689699999999998 +F1.0804100000000001 +F1.0105200000000001 +I0 +tp963 +(dp964 +g4 +F0.31689699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.47562500000000002 +sS'm' +F23.302299999999999 +sg8 +F1.0105200000000001 +sg9 +F309.37454400000001 +sg10 +(lp965 +L345371834L +aL345371835L +aL345371836L +aL345371837L +asg12 +(lp966 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0804100000000001 +sS't' +F53675.080384599998 +ss(F309.36980699999998 +F0.34459099999999998 +F0.77910400000000002 +F0.82910300000000003 +I0 +tp967 +(dp968 +g4 +F0.34459099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.87375999999999998 +sS'm' +F22.765699999999999 +sg8 +F0.82910300000000003 +sg9 +F309.36980699999998 +sg10 +(lp969 +L343278839L +aL343278840L +aL343278841L +aL343278842L +asg12 +(lp970 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77910400000000002 +sS't' +F53302.109075699998 +ss(F309.37459699999999 +F0.316942 +F0.85158800000000001 +F0.9133 +I0 +tp971 +(dp972 +g4 +F0.316942 +sg5 +I0 +sg6 +I0 +sg7 +F1.5167600000000001 +sS'm' +F22.6111 +sg8 +F0.9133 +sg9 +F309.37459699999999 +sg10 +(lp973 +L343883543L +aL343883544L +aL343883545L +aL343883546L +aL343883547L +asg12 +(lp974 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85158800000000001 +sS't' +F53626.1449527 +ss(F309.38008100000002 +F0.34216099999999999 +F0.61600999999999995 +F0.77501600000000004 +I0 +tp975 +(dp976 +g4 +F0.34216099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.027022999999999998 +sS'm' +F17.387899999999998 +sg8 +F0.77501600000000004 +sg9 +F309.38008100000002 +sg10 +(lp977 +L346166263L +aL346166264L +aL346166265L +aL346166266L +aL346166267L +aL346166268L +aL346166269L +aL346166262L +aL346166270L +aL346166271L +asg12 +(lp978 +I1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI0 +aI3 +aI4 +asg14 +F0.61600999999999995 +sS't' +F53704.073331699998 +ss(F309.38811900000002 +F0.33807700000000002 +F0.77912400000000004 +F0.82915399999999995 +I0 +tp979 +(dp980 +g4 +F0.33807700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.81282200000000004 +sS'm' +F22.678999999999998 +sg8 +F0.82915399999999995 +sg9 +F309.38811900000002 +sg10 +(lp981 +L343279132L +aL343279133L +aL343279134L +aL343279135L +asg12 +(lp982 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77912400000000004 +sS't' +F53302.1091265 +ss(F309.37433299999998 +F0.32660699999999998 +F0.74900500000000003 +F0.97800699999999996 +I0 +tp983 +(dp984 +g4 +F0.32660699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.09775 +sS'm' +F22.9162 +sg8 +F0.97800699999999996 +sg9 +F309.37433299999998 +sg10 +(lp985 +L171381440L +aL171381441L +aL171381442L +aL171381443L +aL171381444L +aL171381445L +aL171381446L +aL171381447L +aL171381448L +aL171381449L +asg12 +(lp986 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900500000000003 +sS't' +F54005.107152600001 +ss(F309.372816 +F0.33522999999999997 +F0.47006500000000001 +F0.50306099999999998 +I0 +tp987 +(dp988 +g4 +F0.33522999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.037705200000000001 +sS'm' +F16.969100000000001 +sg8 +F0.50306099999999998 +sg9 +F309.372816 +sg10 +(lp989 +L12886195L +aL12886196L +aL12886192L +aL12886193L +aL12886194L +asg12 +(lp990 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.47006500000000001 +sS't' +F53649.117665700003 +ss(F309.37474300000002 +F0.331681 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp991 +(dp992 +g4 +F0.331681 +sg5 +I0 +sg6 +I0 +sg7 +F0.047203299999999997 +sS'm' +F15.959899999999999 +sg8 +F0.94401199999999996 +sg9 +F309.37474300000002 +sg10 +(lp993 +L346329273L +aL346329274L +aL346329275L +aL346329276L +aL346329277L +asg12 +(lp994 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159577899998 +ss(F309.38274699999999 +F0.32577800000000001 +F0.47607699999999997 +F0.45407999999999998 +I0 +tp995 +(dp996 +g4 +F0.32577800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.109572 +sS'm' +F20.9773 +sg8 +F0.45407999999999998 +sg9 +F309.38274699999999 +sg10 +(lp997 +L344876219L +aL344876220L +aL344876221L +aL344876222L +asg12 +(lp998 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47607699999999997 +sS't' +F53668.1106831 +ss(F309.37794400000001 +F0.33784900000000001 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp999 +(dp1000 +g4 +F0.33784900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.048843600000000001 +sS'm' +F18.3536 +sg8 +F1.0700000000000001 +sg9 +F309.37794400000001 +sg10 +(lp1001 +L345675996L +aL345675997L +aL345675998L +aL345675999L +aL345676000L +aL345676001L +aL345676002L +aL345676003L +aL345676004L +aL345676005L +asg12 +(lp1002 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.0864334 +ss(F309.382475 +F0.32456000000000002 +F0.64962699999999995 +F0.53978899999999996 +I0 +tp1003 +(dp1004 +g4 +F0.32456000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.9099900000000001 +sS'm' +F22.422799999999999 +sg8 +F0.53978899999999996 +sg9 +F309.382475 +sg10 +(lp1005 +L112299423L +aL112299424L +aL112299425L +aL112299426L +aL112299427L +asg12 +(lp1006 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64962699999999995 +sS't' +F53656.106113499998 +ss(F309.374594 +F0.31691000000000003 +F1.0528900000000001 +F0.94598800000000005 +I0 +tp1007 +(dp1008 +g4 +F0.31691000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F3.6093799999999998 +sS'm' +F23.861699999999999 +sg8 +F0.94598800000000005 +sg9 +F309.374594 +sg10 +(lp1009 +L346337862L +aL346337863L +aL346337864L +aL346337865L +aL346337866L +asg12 +(lp1010 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0528900000000001 +sS't' +F53974.159577500002 +ss(F309.38898 +F0.34519899999999998 +F0.749004 +F0.97800600000000004 +I0 +tp1011 +(dp1012 +g4 +F0.34519899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.0493496 +sS'm' +F19.065100000000001 +sg8 +F0.97800600000000004 +sg9 +F309.38898 +sg10 +(lp1013 +L171378436L +aL171378437L +aL171378438L +aL171378434L +aL171378435L +asg12 +(lp1014 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.749004 +sS't' +F54005.1055347 +ss(F309.38797499999998 +F0.34223799999999999 +F0.56698700000000002 +F0.51589600000000002 +I0 +tp1015 +(dp1016 +g4 +F0.34223799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.61526099999999995 +sS'm' +F21.3459 +sg8 +F0.51589600000000002 +sg9 +F309.38797499999998 +sg10 +(lp1017 +L344709068L +aL344709069L +aL344709070L +aL344709071L +aL344709072L +asg12 +(lp1018 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.56698700000000002 +sS't' +F53654.1585375 +ss(F309.382743 +F0.32574799999999998 +F0.851024 +F0.91302499999999998 +I0 +tp1019 +(dp1020 +g4 +F0.32574799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1021700000000001 +sS'm' +F22.254799999999999 +sg8 +F0.91302499999999998 +sg9 +F309.382743 +sg10 +(lp1021 +L343878392L +aL343878393L +aL343878394L +aL343878395L +aL343878396L +aL343878397L +aL343878398L +aL343878399L +aL343878401L +aL343878400L +asg12 +(lp1022 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI4 +aI3 +asg14 +F0.851024 +sS't' +F53626.144975299998 +ss(F309.372815 +F0.33521299999999998 +F0.77900700000000001 +F0.82900799999999997 +I0 +tp1023 +(dp1024 +g4 +F0.33521299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.91285099999999997 +sS'm' +F21.925999999999998 +sg8 +F0.82900799999999997 +sg9 +F309.372815 +sg10 +(lp1025 +L343273315L +aL343273316L +aL343273317L +aL343273318L +aL343273319L +asg12 +(lp1026 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900700000000001 +sS't' +F53302.107425599999 +ss(F309.38890400000003 +F0.34376600000000002 +F1.0100199999999999 +F0.992039 +I0 +tp1027 +(dp1028 +g4 +F0.34376600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0068626499999999997 +sS'm' +F14.2584 +sg8 +F0.992039 +sg9 +F309.38890400000003 +sg10 +(lp1029 +L342962255L +aL342962256L +aL342962247L +aL342962248L +aL342962249L +aL342962250L +aL342962251L +aL342962252L +aL342962253L +aL342962254L +asg12 +(lp1030 +I3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +asg14 +F1.0100199999999999 +sS't' +F53270.1337948 +ss(F309.36679099999998 +F0.335648 +F0.78863399999999995 +F0.83450299999999999 +I0 +tp1031 +(dp1032 +g4 +F0.335648 +sg5 +I0 +sg6 +I0 +sg7 +F1.06436 +sS'm' +F22.9817 +sg8 +F0.83450299999999999 +sg9 +F309.36679099999998 +sg10 +(lp1033 +L343278787L +aL343278788L +aL343278789L +aL343278790L +asg12 +(lp1034 +I1 +aI2 +aI3 +aI4 +asg14 +F0.78863399999999995 +sS't' +F53302.1090673 +ss(F309.386527 +F0.32198900000000003 +F0.61605900000000002 +F0.77505000000000002 +I0 +tp1035 +(dp1036 +g4 +F0.32198900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.60380199999999995 +sS'm' +F21.608899999999998 +sg8 +F0.77505000000000002 +sg9 +F309.386527 +sg10 +(lp1037 +L346172270L +aL346172271L +aL346172272L +aL346172273L +aL346172274L +asg12 +(lp1038 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61605900000000002 +sS't' +F53704.071691099998 +ss(F309.36402099999998 +F0.31757000000000002 +F0.86505299999999996 +F0.90004499999999998 +I0 +tp1039 +(dp1040 +g4 +F0.31757000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.0110000000000001 +sS'm' +F23.190999999999999 +sg8 +F0.90004499999999998 +sg9 +F309.36402099999998 +sg10 +(lp1041 +L345814715L +aL345814716L +aL345814717L +aL345814718L +aL345814719L +asg12 +(lp1042 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86505299999999996 +sS't' +F53693.088300800002 +ss(F309.38635199999999 +F0.33888099999999999 +F0.64974600000000005 +F0.54011100000000001 +I0 +tp1043 +(dp1044 +g4 +F0.33888099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.40093 +sS'm' +F22.828499999999998 +sg8 +F0.54011100000000001 +sg9 +F309.38635199999999 +sg10 +(lp1045 +L112299447L +aL112299448L +aL112299449L +aL112299450L +asg12 +(lp1046 +I1 +aI2 +aI3 +aI4 +asg14 +F0.64974600000000005 +sS't' +F53656.107782699997 +ss(F309.36008700000002 +F0.32048599999999999 +F0.86500900000000003 +F0.900007 +I0 +tp1047 +(dp1048 +g4 +F0.32048599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.105868 +sS'm' +F19.7089 +sg8 +F0.900007 +sg9 +F309.36008700000002 +sg10 +(lp1049 +L345811230L +aL345811231L +aL345811232L +aL345811233L +aL345811234L +asg12 +(lp1050 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86500900000000003 +sS't' +F53693.088289899999 +ss(F309.38271400000002 +F0.33517200000000003 +F0.41304200000000002 +F0.41206300000000001 +I0 +tp1051 +(dp1052 +g4 +F0.33517200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.11028300000000001 +sS'm' +F19.427399999999999 +sg8 +F0.41206300000000001 +sg9 +F309.38271400000002 +sg10 +(lp1053 +L345998003L +aL345998004L +aL345998005L +aL345998006L +aL345998007L +asg12 +(lp1054 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41304200000000002 +sS't' +F53703.093133499999 +ss(F309.36810300000002 +F0.346082 +F0.98486899999999999 +F0.98887499999999995 +I0 +tp1055 +(dp1056 +g4 +F0.346082 +sg5 +I0 +sg6 +I0 +sg7 +F0.98647499999999999 +sS'm' +F23.902100000000001 +sg8 +F0.98887499999999995 +sg9 +F309.36810300000002 +sg10 +(lp1057 +L346459255L +aL346459256L +aL346459257L +aL346459258L +asg12 +(lp1058 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98486899999999999 +sS't' +F54007.121543000001 +ss(F309.36927600000001 +F0.31895000000000001 +F0.77901200000000004 +F0.82901199999999997 +I0 +tp1059 +(dp1060 +g4 +F0.31895000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.39776499999999998 +sS'm' +F21.000299999999999 +sg8 +F0.82901199999999997 +sg9 +F309.36927600000001 +sg10 +(lp1061 +L343275193L +aL343275194L +aL343275195L +aL343275196L +aL343275197L +asg12 +(lp1062 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77901200000000004 +sS't' +F53302.107415699997 +ss(F309.365049 +F0.33011699999999999 +F0.85100399999999998 +F0.91300800000000004 +I0 +tp1063 +(dp1064 +g4 +F0.33011699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.37867299999999998 +sS'm' +F21.065000000000001 +sg8 +F0.91300800000000004 +sg9 +F309.365049 +sg10 +(lp1065 +L343874065L +aL343874066L +aL343874067L +aL343874068L +aL343874069L +asg12 +(lp1066 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100399999999998 +sS't' +F53626.144926200002 +ss(F309.378648 +F0.33694800000000003 +F0.85205600000000004 +F0.91364500000000004 +I0 +tp1067 +(dp1068 +g4 +F0.33694800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F4.5787500000000003 +sS'm' +F23.7867 +sg8 +F0.91364500000000004 +sg9 +F309.378648 +sg10 +(lp1069 +L343874282L +aL343874283L +aL343874284L +aL343874285L +asg12 +(lp1070 +I0 +aI2 +aI3 +aI4 +asg14 +F0.85205600000000004 +sS't' +F53626.144963999999 +ss(F309.368404 +F0.34224900000000003 +F0.85132799999999997 +F0.91351300000000002 +I0 +tp1071 +(dp1072 +g4 +F0.34224900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F2.4630299999999998 +sS'm' +F23.139600000000002 +sg8 +F0.91351300000000002 +sg9 +F309.368404 +sg10 +(lp1073 +L343881923L +aL343881924L +aL343881925L +aL343881926L +aL343881927L +aL343881928L +aL343881929L +aL343881930L +aL343881931L +asg12 +(lp1074 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI2 +aI3 +aI4 +asg14 +F0.85132799999999997 +sS't' +F53626.1449355 +ss(F309.37234599999999 +F0.32414500000000002 +F0.93318999999999996 +F0.87823600000000002 +I0 +tp1075 +(dp1076 +g4 +F0.32414500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.4201899999999998 +sS'm' +F23.477399999999999 +sg8 +F0.87823600000000002 +sg9 +F309.37234599999999 +sg10 +(lp1077 +L345030716L +aL345030717L +aL345030718L +aL345030719L +aL345030720L +asg12 +(lp1078 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93318999999999996 +sS't' +F53670.113849699999 +ss(F309.387562 +F0.33276699999999998 +F0.47853200000000001 +F0.45661400000000002 +I0 +tp1079 +(dp1080 +g4 +F0.33276699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.7102900000000001 +sS'm' +F23.644600000000001 +sg8 +F0.45661400000000002 +sg9 +F309.387562 +sg10 +(lp1081 +L344873544L +aL344873545L +aL344873546L +aL344873547L +aL344873548L +asg12 +(lp1082 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47853200000000001 +sS't' +F53668.109038000002 +ss(F309.38393300000001 +F0.31877299999999997 +F0.61927299999999996 +F0.78044500000000006 +I0 +tp1083 +(dp1084 +g4 +F0.31877299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.68713199999999997 +sS'm' +F23.1768 +sg8 +F0.78044500000000006 +sg9 +F309.38393300000001 +sg10 +(lp1085 +L346174377L +aL346174378L +aL346174379L +aL346174380L +asg12 +(lp1086 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61927299999999996 +sS't' +F53704.073342399999 +ss(F309.38260400000001 +F0.33969500000000002 +F0.82801100000000005 +F0.94500899999999999 +I0 +tp1087 +(dp1088 +g4 +F0.33969500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.057134200000000003 +sS'm' +F18.703900000000001 +sg8 +F0.94500899999999999 +sg9 +F309.38260400000001 +sg10 +(lp1089 +L343120639L +aL343120640L +aL343120641L +aL343120642L +aL343120643L +asg12 +(lp1090 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801100000000005 +sS't' +F53288.111784000001 +ss(F309.37448000000001 +F0.31701299999999999 +F1.01189 +F0.95498700000000003 +I0 +tp1091 +(dp1092 +g4 +F0.31701299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.80544000000000004 +sS'm' +F22.033100000000001 +sg8 +F0.95498700000000003 +sg9 +F309.37448000000001 +sg10 +(lp1093 +L343717389L +aL343717390L +aL343717391L +aL343717392L +aL343717393L +asg12 +(lp1094 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01189 +sS't' +F53623.158740300001 +ss(F309.37473499999999 +F0.33170500000000003 +F0.50603699999999996 +F0.45910000000000001 +I0 +tp1095 +(dp1096 +g4 +F0.33170500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.021950999999999998 +sS'm' +F15.9603 +sg8 +F0.45910000000000001 +sg9 +F309.37473499999999 +sg10 +(lp1097 +L153248814L +aL153248815L +aL153248816L +aL153248817L +aL153248813L +asg12 +(lp1098 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.50603699999999996 +sS't' +F53702.085636199998 +ss(F309.388914 +F0.34373700000000001 +F0.92101599999999995 +F1.1000300000000001 +I0 +tp1099 +(dp1100 +g4 +F0.34373700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.0449909 +sS'm' +F16.177299999999999 +sg8 +F1.1000300000000001 +sg9 +F309.388914 +sg10 +(lp1101 +L345532467L +aL345532468L +aL345532469L +aL345532470L +aL345532471L +asg12 +(lp1102 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92101599999999995 +sS't' +F53677.099798800002 +ss(F309.37796300000002 +F0.33785300000000001 +F0.47004299999999999 +F0.50304000000000004 +I0 +tp1103 +(dp1104 +g4 +F0.33785300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.112287 +sS'm' +F18.453299999999999 +sg8 +F0.50304000000000004 +sg9 +F309.37796300000002 +sg10 +(lp1105 +L12885283L +aL12885284L +aL12885285L +aL12885286L +aL12885287L +asg12 +(lp1106 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004299999999999 +sS't' +F53649.118509300002 +ss(F309.37837400000001 +F0.33684799999999998 +F0.74595299999999998 +F0.96162700000000001 +I0 +tp1107 +(dp1108 +g4 +F0.33684799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.3329200000000001 +sS'm' +F24.180299999999999 +sg8 +F0.96162700000000001 +sg9 +F309.37837400000001 +sg10 +(lp1109 +L344475857L +aL344475858L +aL344475859L +aL344475860L +asg12 +(lp1110 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74595299999999998 +sS't' +F53644.1255198 +ss(F309.38530300000002 +F0.33196799999999999 +F1.01003 +F0.95303099999999996 +I0 +tp1111 +(dp1112 +g4 +F0.33196799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.74481 +sS'm' +F22.889900000000001 +sg8 +F0.95303099999999996 +sg9 +F309.38530300000002 +sg10 +(lp1113 +L343713378L +aL343713379L +aL343713380L +aL343713381L +aL343713382L +aL343713383L +aL343713384L +aL343713385L +aL343713386L +aL343713387L +asg12 +(lp1114 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01003 +sS't' +F53623.158770399998 +ss(F309.365996 +F0.33172200000000002 +F0.85100500000000001 +F0.91300899999999996 +I0 +tp1115 +(dp1116 +g4 +F0.33172200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.21043000000000001 +sS'm' +F20.3749 +sg8 +F0.91300899999999996 +sg9 +F309.365996 +sg10 +(lp1117 +L343874070L +aL343874071L +aL343874072L +aL343874073L +aL343874074L +asg12 +(lp1118 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100500000000001 +sS't' +F53626.1449288 +ss(F309.387541 +F0.332316 +F0.41458499999999998 +F0.43165700000000001 +I0 +tp1119 +(dp1120 +g4 +F0.332316 +sg5 +I0 +sg6 +I0 +sg7 +F1.25074 +sS'm' +F23.527100000000001 +sg8 +F0.43165700000000001 +sg9 +F309.387541 +sg10 +(lp1121 +L346001058L +aL346001059L +aL346001060L +aL346001061L +asg12 +(lp1122 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41458499999999998 +sS't' +F53703.094805300003 +ss(F309.382745 +F0.32578499999999999 +F1.0800099999999999 +F1.0100199999999999 +I0 +tp1123 +(dp1124 +g4 +F0.32578499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.083014199999999996 +sS'm' +F21.008800000000001 +sg8 +F1.0100199999999999 +sg9 +F309.382745 +sg10 +(lp1125 +L345367505L +aL345367506L +aL345367507L +aL345367508L +aL345367509L +aL345367510L +aL345367511L +aL345367512L +asg12 +(lp1126 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.080407300004 +ss(F309.378986 +F0.32703399999999999 +F1.0100100000000001 +F0.953017 +I0 +tp1127 +(dp1128 +g4 +F0.32703399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.41385699999999997 +sS'm' +F21.281500000000001 +sg8 +F0.953017 +sg9 +F309.378986 +sg10 +(lp1129 +L343712164L +aL343712165L +aL343712166L +aL343712167L +aL343712168L +asg12 +(lp1130 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158752800002 +ss(F309.38089000000002 +F0.33932000000000001 +F0.92162500000000003 +F1.1003000000000001 +I0 +tp1131 +(dp1132 +g4 +F0.33932000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.69246099999999999 +sS'm' +F23.676600000000001 +sg8 +F1.1003000000000001 +sg9 +F309.38089000000002 +sg10 +(lp1133 +L345532266L +aL345532267L +aL345532268L +aL345532269L +asg12 +(lp1134 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92162500000000003 +sS't' +F53677.101434900003 +ss(F309.38528300000002 +F0.33195400000000003 +F0.885023 +F1.11002 +I0 +tp1135 +(dp1136 +g4 +F0.33195400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F3.0998600000000001 +sS'm' +F24.160799999999998 +sg8 +F1.11002 +sg9 +F309.38528300000002 +sg10 +(lp1137 +L344150893L +aL344150894L +aL344150895L +aL344150896L +aL344150897L +aL344150898L +aL344150899L +aL344150900L +aL344150901L +aL344150902L +asg12 +(lp1138 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.885023 +sS't' +F53635.1382276 +ss(F309.38391200000001 +F0.31874999999999998 +F0.88509199999999999 +F1.11005 +I0 +tp1139 +(dp1140 +g4 +F0.31874999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.274837 +sS'm' +F22.542200000000001 +sg8 +F1.11005 +sg9 +F309.38391200000001 +sg10 +(lp1141 +L344153253L +aL344153254L +aL344153255L +aL344153256L +asg12 +(lp1142 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88509199999999999 +sS't' +F53635.139882299998 +ss(F309.36778199999998 +F0.34513300000000002 +F0.78015199999999996 +F0.76834199999999997 +I0 +tp1143 +(dp1144 +g4 +F0.34513300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.71347 +sS'm' +F22.861899999999999 +sg8 +F0.76834199999999997 +sg9 +F309.36778199999998 +sg10 +(lp1145 +L342832227L +aL342832228L +aL342832229L +aL342832230L +aL342832231L +asg12 +(lp1146 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.78015199999999996 +sS't' +F53243.255738699998 +ss(F309.37775199999999 +F0.32558599999999999 +F0.50634999999999997 +F0.45972000000000002 +I0 +tp1147 +(dp1148 +g4 +F0.32558599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F8.8041300000000007 +sS'm' +F24.194800000000001 +sg8 +F0.45972000000000002 +sg9 +F309.37775199999999 +sg10 +(lp1149 +L153252788L +aL153252789L +aL153252790L +aL153252791L +aL153252792L +asg12 +(lp1150 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50634999999999997 +sS't' +F53702.083986099999 +ss(F309.386483 +F0.32200200000000001 +F0.41319400000000001 +F0.41218700000000003 +I0 +tp1151 +(dp1152 +g4 +F0.32200200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.142647 +sS'm' +F21.1036 +sg8 +F0.41218700000000003 +sg9 +F309.386483 +sg10 +(lp1153 +L346001105L +aL346001106L +aL346001107L +aL346001108L +asg12 +(lp1154 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41319400000000001 +sS't' +F53703.094802400003 +ss(F309.36505699999998 +F0.330127 +F0.47006300000000001 +F0.50305800000000001 +I0 +tp1155 +(dp1156 +g4 +F0.330127 +sg5 +I0 +sg6 +I0 +sg7 +F0.75383 +sS'm' +F20.738399999999999 +sg8 +F0.50305800000000001 +sg9 +F309.36505699999998 +sg10 +(lp1157 +L12885223L +aL12885224L +aL12885225L +aL12885226L +aL12885227L +asg12 +(lp1158 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47006300000000001 +sS't' +F53649.118473399998 +ss(F309.37097499999999 +F0.33042199999999999 +F1.08029 +F1.0109999999999999 +I0 +tp1159 +(dp1160 +g4 +F0.33042199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.60145 +sS'm' +F23.260000000000002 +sg8 +F1.0109999999999999 +sg9 +F309.37097499999999 +sg10 +(lp1161 +L345370203L +aL345370204L +aL345370205L +aL345370206L +aL345370207L +asg12 +(lp1162 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08029 +sS't' +F53675.078716199998 +ss(F309.36774700000001 +F0.34516000000000002 +F0.98431100000000005 +F0.98864399999999997 +I0 +tp1163 +(dp1164 +g4 +F0.34516000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.46522 +sS'm' +F22.954499999999999 +sg8 +F0.98864399999999997 +sg9 +F309.36774700000001 +sg10 +(lp1165 +L346459269L +aL346459270L +aL346459271L +aL346459272L +aL346459273L +asg12 +(lp1166 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98431100000000005 +sS't' +F54007.119883500003 +ss(F309.377951 +F0.33785799999999999 +F0.98400500000000002 +F0.98800399999999999 +I0 +tp1167 +(dp1168 +g4 +F0.33785799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.058766800000000001 +sS'm' +F18.378399999999999 +sg8 +F0.98800399999999999 +sg9 +F309.377951 +sg10 +(lp1169 +L346459453L +aL346459454L +aL346459455L +aL346459456L +aL346459457L +aL346459458L +aL346459459L +aL346459460L +aL346459461L +aL346459462L +asg12 +(lp1170 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.119911900001 +ss(F309.36810100000002 +F0.34605200000000003 +F0.77930100000000002 +F0.82939399999999996 +I0 +tp1171 +(dp1172 +g4 +F0.34605200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.96692900000000004 +sS'm' +F22.876300000000001 +sg8 +F0.82939399999999996 +sg9 +F309.36810100000002 +sg10 +(lp1173 +L343278852L +aL343278853L +aL343278854L +aL343278855L +asg12 +(lp1174 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77930100000000002 +sS't' +F53302.109070899998 +ss(F309.365183 +F0.337281 +F1.0101199999999999 +F0.95314299999999996 +I0 +tp1175 +(dp1176 +g4 +F0.337281 +sg5 +I0 +sg6 +I0 +sg7 +F0.28237899999999999 +sS'm' +F22.3521 +sg8 +F0.95314299999999996 +sg9 +F309.365183 +sg10 +(lp1177 +L343715678L +aL343715679L +aL343715680L +aL343715681L +asg12 +(lp1178 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101199999999999 +sS't' +F53623.160372899998 +ss(F309.374731 +F0.33168300000000001 +F0.933006 +F0.87800800000000001 +I0 +tp1179 +(dp1180 +g4 +F0.33168300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.031125300000000002 +sS'm' +F15.9579 +sg8 +F0.87800800000000001 +sg9 +F309.374731 +sg10 +(lp1181 +L345024600L +aL345024601L +aL345024602L +aL345024603L +aL345024604L +asg12 +(lp1182 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.933006 +sS't' +F53670.113856299999 +ss(F309.38902200000001 +F0.345107 +F0.506077 +F0.459144 +I0 +tp1183 +(dp1184 +g4 +F0.345107 +sg5 +I0 +sg6 +I0 +sg7 +F6.75753 +sS'm' +F23.905200000000001 +sg8 +F0.459144 +sg9 +F309.38902200000001 +sg10 +(lp1185 +L153248905L +aL153248906L +aL153248907L +aL153248908L +aL153248909L +asg12 +(lp1186 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.506077 +sS't' +F53702.084017399997 +ss(F309.37841900000001 +F0.33688499999999999 +F0.75100699999999998 +F0.97817100000000001 +I0 +tp1187 +(dp1188 +g4 +F0.33688499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F8.3803300000000007 +sS'm' +F23.6523 +sg8 +F0.97817100000000001 +sg9 +F309.37841900000001 +sg10 +(lp1189 +L171378180L +aL171378181L +aL171378182L +aL171378183L +asg12 +(lp1190 +I1 +aI2 +aI3 +aI4 +asg14 +F0.75100699999999998 +sS't' +F54005.108822399998 +ss(F309.36825399999998 +F0.32755699999999999 +F0.88555499999999998 +F1.1103099999999999 +I0 +tp1191 +(dp1192 +g4 +F0.32755699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.78105899999999995 +sS'm' +F23.718399999999999 +sg8 +F1.1103099999999999 +sg9 +F309.36825399999998 +sg10 +(lp1193 +L344151887L +aL344151888L +aL344151889L +aL344151890L +asg12 +(lp1194 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88555499999999998 +sS't' +F53635.139838800002 +ss(F309.385673 +F0.32635900000000001 +F0.650285 +F0.54013500000000003 +I0 +tp1195 +(dp1196 +g4 +F0.32635900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.2468599999999999 +sS'm' +F22.599699999999999 +sg8 +F0.54013500000000003 +sg9 +F309.385673 +sg10 +(lp1197 +L112299460L +aL112299461L +aL112299462L +aL112299463L +aL112299464L +asg12 +(lp1198 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.650285 +sS't' +F53656.1061223 +ss(F309.374325 +F0.32658799999999999 +F0.92401 +F1.0300199999999999 +I0 +tp1199 +(dp1200 +g4 +F0.32658799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.62459 +sS'm' +F23.1084 +sg8 +F1.0300199999999999 +sg9 +F309.374325 +sg10 +(lp1201 +L345220069L +aL345220070L +aL345220071L +aL345220072L +aL345220073L +asg12 +(lp1202 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401 +sS't' +F53673.081836099998 +ss(F309.36237999999997 +F0.31964399999999998 +F0.88500800000000002 +F1.1100099999999999 +I0 +tp1203 +(dp1204 +g4 +F0.31964399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.75803100000000001 +sS'm' +F22.4605 +sg8 +F1.1100099999999999 +sg9 +F309.36237999999997 +sg10 +(lp1205 +L344147736L +aL344147737L +aL344147738L +aL344147739L +aL344147740L +asg12 +(lp1206 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500800000000002 +sS't' +F53635.138164000004 +ss(F309.38200899999998 +F0.34298200000000001 +F0.741031 +F0.96002500000000002 +I0 +tp1207 +(dp1208 +g4 +F0.34298200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.58542300000000003 +sS'm' +F22.239599999999999 +sg8 +F0.96002500000000002 +sg9 +F309.38200899999998 +sg10 +(lp1209 +L344475911L +aL344475912L +aL344475913L +aL344475914L +aL344475915L +asg12 +(lp1210 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.741031 +sS't' +F53644.123871399999 +ss(F309.36008900000002 +F0.32051099999999999 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp1211 +(dp1212 +g4 +F0.32051099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.113539 +sS'm' +F19.650700000000001 +sg8 +F0.95301000000000002 +sg9 +F309.36008900000002 +sg10 +(lp1213 +L343711757L +aL343711758L +aL343711759L +aL343711760L +aL343711761L +asg12 +(lp1214 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158700300002 +ss(F309.359801 +F0.32505499999999998 +F0.98401099999999997 +F0.98800900000000003 +I0 +tp1215 +(dp1216 +g4 +F0.32505499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.98180400000000001 +sS'm' +F22.528300000000002 +sg8 +F0.98800900000000003 +sg9 +F309.359801 +sg10 +(lp1217 +L346461766L +aL346461767L +aL346461768L +aL346461769L +aL346461770L +asg12 +(lp1218 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98401099999999997 +sS't' +F54007.119861500003 +ss(F309.37301500000001 +F0.317384 +F0.86606899999999998 +F0.90254999999999996 +I0 +tp1219 +(dp1220 +g4 +F0.317384 +sg5 +I0 +sg6 +I0 +sg7 +F7.7858000000000001 +sS'm' +F24.669699999999999 +sg8 +F0.90254999999999996 +sg9 +F309.37301500000001 +sg10 +(lp1221 +L345816380L +aL345816381L +aL345816382L +aL345816383L +aL345816384L +asg12 +(lp1222 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86606899999999998 +sS't' +F53693.088325800003 +ss(F309.38891999999998 +F0.34375 +F0.64901399999999998 +F0.53902000000000005 +I0 +tp1223 +(dp1224 +g4 +F0.34375 +sg5 +I0 +sg6 +I0 +sg7 +F0.0343421 +sS'm' +F16.203800000000001 +sg8 +F0.53902000000000005 +sg9 +F309.38891999999998 +sg10 +(lp1225 +L112295318L +aL112295319L +aL112295320L +aL112295321L +aL112295322L +asg12 +(lp1226 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901399999999998 +sS't' +F53656.106131400004 +ss(F309.37432799999999 +F0.32657599999999998 +F0.93301199999999995 +F0.87801399999999996 +I0 +tp1227 +(dp1228 +g4 +F0.32657599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.1145200000000002 +sS'm' +F23.331499999999998 +sg8 +F0.87801399999999996 +sg9 +F309.37432799999999 +sg10 +(lp1229 +L345028332L +aL345028333L +aL345028334L +aL345028335L +aL345028336L +asg12 +(lp1230 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301199999999995 +sS't' +F53670.113855199997 +ss(F309.37795699999998 +F0.33784799999999998 +F0.74100600000000005 +F0.96000700000000005 +I0 +tp1231 +(dp1232 +g4 +F0.33784799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.051417900000000002 +sS'm' +F18.332799999999999 +sg8 +F0.96000700000000005 +sg9 +F309.37795699999998 +sg10 +(lp1233 +L344475842L +aL344475843L +aL344475844L +aL344475845L +aL344475846L +asg12 +(lp1234 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.1238601 +ss(F309.38194600000003 +F0.33613700000000002 +F0.88528700000000005 +F1.11015 +I0 +tp1235 +(dp1236 +g4 +F0.33613700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.9529800000000002 +sS'm' +F24.065200000000001 +sg8 +F1.11015 +sg9 +F309.38194600000003 +sg10 +(lp1237 +L344144554L +aL344144555L +aL344144556L +aL344144557L +aL344144558L +asg12 +(lp1238 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88528700000000005 +sS't' +F53635.138218400003 +ss(F309.37796800000001 +F0.33788499999999999 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp1239 +(dp1240 +g4 +F0.33788499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.019618699999999999 +sS'm' +F17.166899999999998 +sg8 +F0.99200699999999997 +sg9 +F309.37796800000001 +sg10 +(lp1241 +L342962073L +aL342962074L +aL342962075L +aL342962076L +aL342962072L +asg12 +(lp1242 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.0100100000000001 +sS't' +F53270.136252099997 +ss(F309.37240100000002 +F0.32938800000000001 +F0.86831400000000003 +F0.90354000000000001 +I0 +tp1243 +(dp1244 +g4 +F0.32938800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F7.1643400000000002 +sS'm' +F25.6142 +sg8 +F0.90354000000000001 +sg9 +F309.37240100000002 +sg10 +(lp1245 +L345816344L +aL345816345L +aL345816346L +aL345816347L +asg12 +(lp1246 +I1 +aI2 +aI3 +aI4 +asg14 +F0.86831400000000003 +sS't' +F53693.089982600002 +ss(F309.37309900000002 +F0.32444800000000001 +F0.85104000000000002 +F0.91305400000000003 +I0 +tp1247 +(dp1248 +g4 +F0.32444800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.85265899999999994 +sS'm' +F22.752199999999998 +sg8 +F0.91305400000000003 +sg9 +F309.37309900000002 +sg10 +(lp1249 +L343882007L +aL343882008L +aL343882009L +aL343882010L +asg12 +(lp1250 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85104000000000002 +sS't' +F53626.146607000002 +ss(F309.37196999999998 +F0.34103800000000001 +F0.77902000000000005 +F0.82901800000000003 +I0 +tp1251 +(dp1252 +g4 +F0.34103800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.75860799999999995 +sS'm' +F21.721 +sg8 +F0.82901800000000003 +sg9 +F309.37196999999998 +sg10 +(lp1253 +L343275212L +aL343275213L +aL343275214L +aL343275215L +aL343275216L +asg12 +(lp1254 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77902000000000005 +sS't' +F53302.107423200003 +ss(F309.372794 +F0.33522200000000002 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp1255 +(dp1256 +g4 +F0.33522200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.37669599999999998 +sS'm' +F21.7651 +sg8 +F1.0700000000000001 +sg9 +F309.372794 +sg10 +(lp1257 +L345679201L +aL345679202L +aL345679203L +aL345679204L +aL345679205L +asg12 +(lp1258 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.0864191 +ss(F309.38752499999998 +F0.33216699999999999 +F1.0103 +F0.99212299999999998 +I0 +tp1259 +(dp1260 +g4 +F0.33216699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.127444 +sS'm' +F20.5565 +sg8 +F0.99212299999999998 +sg9 +F309.38752499999998 +sg10 +(lp1261 +L342966188L +aL342966189L +aL342966186L +aL342966187L +asg12 +(lp1262 +I3 +aI4 +aI1 +aI2 +asg14 +F1.0103 +sS't' +F53270.133790899999 +ss(F309.38622900000001 +F0.338889 +F1.0900399999999999 +F1.0700400000000001 +I0 +tp1263 +(dp1264 +g4 +F0.338889 +sg5 +I0 +sg6 +I0 +sg7 +F4.4041499999999996 +sS'm' +F24.528700000000001 +sg8 +F1.0700400000000001 +sg9 +F309.38622900000001 +sg10 +(lp1265 +L345679449L +aL345679450L +aL345679451L +aL345679452L +aL345679453L +asg12 +(lp1266 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900399999999999 +sS't' +F53680.0864564 +ss(F309.3614 +F0.31861099999999998 +F0.49663099999999999 +F0.484182 +I0 +tp1267 +(dp1268 +g4 +F0.31861099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.3130599999999999 +sS'm' +F23.042999999999999 +sg8 +F0.484182 +sg9 +F309.3614 +sg10 +(lp1269 +L344873017L +aL344873018L +aL344873019L +aL344873020L +aL344873021L +asg12 +(lp1270 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.49663099999999999 +sS't' +F53668.108965400002 +ss(F309.37277399999999 +F0.32424700000000001 +F0.50665700000000002 +F0.46002999999999999 +I0 +tp1271 +(dp1272 +g4 +F0.32424700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F5.1246999999999998 +sS'm' +F23.607299999999999 +sg8 +F0.46002999999999999 +sg9 +F309.37277399999999 +sg10 +(lp1273 +L153252749L +aL153252750L +aL153252751L +aL153252752L +aL153252753L +asg12 +(lp1274 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50665700000000002 +sS't' +F53702.083972300003 +ss(F309.37473599999998 +F0.33171299999999998 +F0.74900299999999997 +F0.97800500000000001 +I0 +tp1275 +(dp1276 +g4 +F0.33171299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.0255347 +sS'm' +F15.928900000000001 +sg8 +F0.97800500000000001 +sg9 +F309.37473599999998 +sg10 +(lp1277 +L171378096L +aL171378097L +aL171378098L +aL171378099L +aL171378100L +asg12 +(lp1278 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107153700003 +ss(F309.38007900000002 +F0.342144 +F0.47602100000000003 +F0.45402199999999998 +I0 +tp1279 +(dp1280 +g4 +F0.342144 +sg5 +I0 +sg6 +I0 +sg7 +F0.063455999999999999 +sS'm' +F18.663799999999998 +sg8 +F0.45402199999999998 +sg9 +F309.38007900000002 +sg10 +(lp1281 +L344871324L +aL344871325L +aL344871326L +aL344871327L +aL344871328L +aL344871329L +aL344871330L +aL344871331L +aL344871332L +aL344871333L +asg12 +(lp1282 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602100000000003 +sS't' +F53668.109017299998 +ss(F309.38622400000003 +F0.33889000000000002 +F0.78095400000000004 +F0.832677 +I0 +tp1283 +(dp1284 +g4 +F0.33889000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.02044 +sS'm' +F22.9282 +sg8 +F0.832677 +sg9 +F309.38622400000003 +sg10 +(lp1285 +L343277299L +aL343277300L +aL343277301L +aL343277302L +asg12 +(lp1286 +I1 +aI2 +aI3 +aI4 +asg14 +F0.78095400000000004 +sS't' +F53302.109121300004 +ss(F309.37282099999999 +F0.33524500000000002 +F1.0100100000000001 +F0.95301199999999997 +I0 +tp1287 +(dp1288 +g4 +F0.33524500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.67060600000000004 +sS'm' +F21.824999999999999 +sg8 +F0.95301199999999997 +sg9 +F309.37282099999999 +sg10 +(lp1289 +L343712010L +aL343712011L +aL343712012L +aL343712013L +aL343712014L +asg12 +(lp1290 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158735700003 +ss(F309.382182 +F0.32173600000000002 +F0.47603299999999998 +F0.45403199999999999 +I0 +tp1291 +(dp1292 +g4 +F0.32173600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.25535799999999997 +sS'm' +F20.660900000000002 +sg8 +F0.45403199999999999 +sg9 +F309.382182 +sg10 +(lp1293 +L344873265L +aL344873266L +aL344873267L +aL344873268L +aL344873269L +asg12 +(lp1294 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47603299999999998 +sS't' +F53668.109023099998 +ss(F309.38197300000002 +F0.33616400000000002 +F1.08039 +F1.0103500000000001 +I0 +tp1295 +(dp1296 +g4 +F0.33616400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F8.4201899999999998 +sS'm' +F25.068899999999999 +sg8 +F1.0103500000000001 +sg9 +F309.38197300000002 +sg10 +(lp1297 +L345363835L +aL345363836L +aL345363837L +aL345363838L +asg12 +(lp1298 +I0 +aI2 +aI3 +aI4 +asg14 +F1.08039 +sS't' +F53675.078746699997 +ss(F309.37842899999998 +F0.33685700000000002 +F0.93360699999999996 +F0.879305 +I0 +tp1299 +(dp1300 +g4 +F0.33685700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F6.1643299999999996 +sS'm' +F20.9802 +sg8 +F0.879305 +sg9 +F309.37842899999998 +sg10 +(lp1301 +L345024650L +aL345024651L +asg12 +(lp1302 +I3 +aI4 +asg14 +F0.93360699999999996 +sS't' +F53670.113037299998 +ss(F309.37096700000001 +F0.33696900000000002 +F0.92467500000000002 +F1.0304500000000001 +I0 +tp1303 +(dp1304 +g4 +F0.33696900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.4304600000000001 +sS'm' +F25.186399999999999 +sg8 +F1.0304500000000001 +sg9 +F309.37096700000001 +sg10 +(lp1305 +L345226596L +aL345226597L +aL345226598L +aL345226599L +asg12 +(lp1306 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92467500000000002 +sS't' +F53673.083485299998 +ss(F309.37100099999998 +F0.33040000000000003 +F1.01241 +F0.99729999999999996 +I0 +tp1307 +(dp1308 +g4 +F0.33040000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.74412800000000001 +sS'm' +F23.098400000000002 +sg8 +F0.99729999999999996 +sg9 +F309.37100099999998 +sg10 +(lp1309 +L342970428L +aL342970429L +aL342970430L +aL342970431L +asg12 +(lp1310 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01241 +sS't' +F53270.136232800003 +ss(F309.38750199999998 +F0.33268900000000001 +F1.0900700000000001 +F1.0700499999999999 +I0 +tp1311 +(dp1312 +g4 +F0.33268900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.6884700000000001 +sS'm' +F24.3352 +sg8 +F1.0700499999999999 +sg9 +F309.38750199999998 +sg10 +(lp1313 +L345680587L +aL345680588L +aL345680589L +aL345680590L +aL345680591L +asg12 +(lp1314 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900700000000001 +sS't' +F53680.086459899998 +ss(F309.36309599999998 +F0.331038 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp1315 +(dp1316 +g4 +F0.331038 +sg5 +I0 +sg6 +I0 +sg7 +F0.019696700000000001 +sS'm' +F16.5306 +sg8 +F0.94401199999999996 +sg9 +F309.36309599999998 +sg10 +(lp1317 +L346329104L +aL346329105L +aL346329106L +aL346329107L +aL346329108L +aL346329109L +aL346329110L +aL346329111L +aL346329102L +aL346329103L +asg12 +(lp1318 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F1.0500100000000001 +sS't' +F53974.157887000001 +ss(F309.389365 +F0.32216600000000001 +F0.92407600000000001 +F1.03009 +I0 +tp1319 +(dp1320 +g4 +F0.32216600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.27767399999999998 +sS'm' +F22.417200000000001 +sg8 +F1.03009 +sg9 +F309.389365 +sg10 +(lp1321 +L345224179L +aL345224180L +aL345224181L +aL345224182L +asg12 +(lp1322 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92407600000000001 +sS't' +F53673.083536400001 +ss(F309.36981600000001 +F0.34627000000000002 +F0.74944900000000003 +F0.97862499999999997 +I0 +tp1323 +(dp1324 +g4 +F0.34627000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.0232700000000001 +sS'm' +F24.9451 +sg8 +F0.97862499999999997 +sg9 +F309.36981600000001 +sg10 +(lp1325 +L171386258L +aL171386259L +aL171386260L +aL171386261L +asg12 +(lp1326 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74944900000000003 +sS't' +F54005.108798499998 +ss(F309.388914 +F0.34374300000000002 +F0.93300700000000003 +F0.87800900000000004 +I0 +tp1327 +(dp1328 +g4 +F0.34374300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.031536099999999997 +sS'm' +F16.171299999999999 +sg8 +F0.87800900000000004 +sg9 +F309.388914 +sg10 +(lp1329 +L345024786L +aL345024787L +aL345024788L +aL345024789L +aL345024790L +asg12 +(lp1330 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.1138957 +ss(F309.37795599999998 +F0.337841 +F0.85100299999999995 +F0.91300700000000001 +I0 +tp1331 +(dp1332 +g4 +F0.337841 +sg5 +I0 +sg6 +I0 +sg7 +F0.058279200000000003 +sS'm' +F18.3812 +sg8 +F0.91300700000000001 +sg9 +F309.37795599999998 +sg10 +(lp1333 +L343874272L +aL343874273L +aL343874274L +aL343874275L +aL343874276L +aL343874277L +aL343874278L +aL343874279L +aL343874280L +aL343874281L +asg12 +(lp1334 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.144961999998 +ss(F309.37235800000002 +F0.32416499999999998 +F0.74903699999999995 +F0.97802900000000004 +I0 +tp1335 +(dp1336 +g4 +F0.32416499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1616500000000001 +sS'm' +F22.979800000000001 +sg8 +F0.97802900000000004 +sg9 +F309.37235800000002 +sg10 +(lp1337 +L171384968L +aL171384969L +aL171384970L +aL171384971L +aL171384972L +asg12 +(lp1338 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74903699999999995 +sS't' +F54005.107147100003 +ss(F309.38237099999998 +F0.32453199999999999 +F0.74912800000000002 +F0.97806999999999999 +I0 +tp1339 +(dp1340 +g4 +F0.32453199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.48352400000000001 +sS'm' +F23.3689 +sg8 +F0.97806999999999999 +sg9 +F309.38237099999998 +sg10 +(lp1341 +L171381619L +aL171381620L +aL171381621L +aL171381622L +asg12 +(lp1342 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74912800000000002 +sS't' +F54005.108833300001 +ss(F309.372792 +F0.33524599999999999 +F0.24807299999999999 +F0.348053 +I0 +tp1343 +(dp1344 +g4 +F0.33524599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.63799600000000001 +sS'm' +F21.6219 +sg8 +F0.348053 +sg9 +F309.372792 +sg10 +(lp1345 +L327903575L +aL327903576L +aL327903577L +aL327903578L +aL327903579L +asg12 +(lp1346 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24807299999999999 +sS't' +F53312.062934000001 +ss(F309.38891599999999 +F0.343746 +F0.85101400000000005 +F0.91302099999999997 +I0 +tp1347 +(dp1348 +g4 +F0.343746 +sg5 +I0 +sg6 +I0 +sg7 +F0.039654300000000003 +sS'm' +F16.185199999999998 +sg8 +F0.91302099999999997 +sg9 +F309.38891599999999 +sg10 +(lp1349 +L343874415L +aL343874416L +aL343874417L +aL343874418L +aL343874419L +asg12 +(lp1350 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85101400000000005 +sS't' +F53626.144992499998 +ss(F309.374618 +F0.31685099999999999 +F0.75864600000000004 +F0.99328799999999995 +I0 +tp1351 +(dp1352 +g4 +F0.31685099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.28023 +sS'm' +F23.088899999999999 +sg8 +F0.99328799999999995 +sg9 +F309.374618 +sg10 +(lp1353 +L171388792L +aL171388793L +aL171388794L +aL171388795L +aL171388796L +asg12 +(lp1354 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.75864600000000004 +sS't' +F54005.1071534 +ss(F309.38544400000001 +F0.34016600000000002 +F1.0100499999999999 +F0.95305399999999996 +I0 +tp1355 +(dp1356 +g4 +F0.34016600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.83971899999999999 +sS'm' +F22.081299999999999 +sg8 +F0.95305399999999996 +sg9 +F309.38544400000001 +sg10 +(lp1357 +L343715992L +aL343715993L +aL343715994L +aL343715995L +aL343715996L +asg12 +(lp1358 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100499999999999 +sS't' +F53623.1587707 +ss(F309.36086299999999 +F0.31766899999999998 +F0.88506399999999996 +F1.11005 +I0 +tp1359 +(dp1360 +g4 +F0.31766899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F7.6342299999999996 +sS'm' +F25.142199999999999 +sg8 +F1.11005 +sg9 +F309.36086299999999 +sg10 +(lp1361 +L344147746L +aL344147747L +aL344147748L +aL344147749L +aL344147750L +asg12 +(lp1362 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88506399999999996 +sS't' +F53635.138159800001 +ss(F309.37281300000001 +F0.335256 +F0.74900699999999998 +F0.97800799999999999 +I0 +tp1363 +(dp1364 +g4 +F0.335256 +sg5 +I0 +sg6 +I0 +sg7 +F0.40265800000000002 +sS'm' +F21.765499999999999 +sg8 +F0.97800799999999999 +sg9 +F309.37281300000001 +sg10 +(lp1365 +L171381401L +aL171381402L +aL171381403L +aL171381404L +aL171381405L +asg12 +(lp1366 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900699999999998 +sS't' +F54005.107148299998 +ss(F309.382609 +F0.33971400000000002 +F0.74900299999999997 +F0.97800500000000001 +I0 +tp1367 +(dp1368 +g4 +F0.33971400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.049922800000000003 +sS'm' +F18.714700000000001 +sg8 +F0.97800500000000001 +sg9 +F309.382609 +sg10 +(lp1369 +L171378218L +aL171378219L +aL171378220L +aL171378221L +aL171378222L +aL171378223L +aL171378224L +aL171378225L +aL171378226L +aL171378227L +asg12 +(lp1370 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107175600002 +ss(F309.374325 +F0.32660299999999998 +F0.50610200000000005 +F0.45921400000000001 +I0 +tp1371 +(dp1372 +g4 +F0.32660299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1511400000000001 +sS'm' +F21.974499999999999 +sg8 +F0.45921400000000001 +sg9 +F309.374325 +sg10 +(lp1373 +L153251231L +aL153251232L +aL153251233L +aL153251234L +aL153251235L +asg12 +(lp1374 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50610200000000005 +sS't' +F53702.083976599999 +ss(F309.37433499999997 +F0.32658199999999998 +F0.47012399999999999 +F0.50312400000000002 +I0 +tp1375 +(dp1376 +g4 +F0.32658199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.28331 +sS'm' +F21.331 +sg8 +F0.50312400000000002 +sg9 +F309.37433499999997 +sg10 +(lp1377 +L12886585L +aL12886586L +aL12886587L +aL12886588L +aL12886589L +asg12 +(lp1378 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47012399999999999 +sS't' +F53649.118499199998 +ss(F309.36093899999997 +F0.31768000000000002 +F0.248887 +F0.34884799999999999 +I0 +tp1379 +(dp1380 +g4 +F0.31768000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.58386199999999999 +sS'm' +F21.861799999999999 +sg8 +F0.34884799999999999 +sg9 +F309.36093899999997 +sg10 +(lp1381 +L327903452L +aL327903453L +aL327903454L +aL327903455L +aL327903456L +asg12 +(lp1382 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248887 +sS't' +F53312.062901099998 +ss(F309.37100800000002 +F0.33049800000000001 +F0.78473700000000002 +F0.83547899999999997 +I0 +tp1383 +(dp1384 +g4 +F0.33049800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.7923399999999998 +sS'm' +F23.152100000000001 +sg8 +F0.83547899999999997 +sg9 +F309.37100800000002 +sg10 +(lp1385 +L343278886L +aL343278887L +aL343278888L +aL343278889L +aL343278890L +aL343278891L +aL343278892L +aL343278893L +aL343278894L +aL343278895L +asg12 +(lp1386 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.78473700000000002 +sS't' +F53302.107420599998 +ss(F309.38061699999997 +F0.32848699999999997 +F0.49874099999999999 +F0.46485500000000002 +I0 +tp1387 +(dp1388 +g4 +F0.32848699999999997 +sg5 +I0 +sg6 +I0 +sg7 +F2.0787900000000001 +sS'm' +F23.011700000000001 +sg8 +F0.46485500000000002 +sg9 +F309.38061699999997 +sg10 +(lp1389 +L344877873L +aL344877874L +aL344877875L +aL344877876L +aL344877877L +asg12 +(lp1390 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.49874099999999999 +sS't' +F53668.109018800002 +ss(F309.369911 +F0.33447199999999999 +F0.82825499999999996 +F0.94535400000000003 +I0 +tp1391 +(dp1392 +g4 +F0.33447199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.45475199999999999 +sS'm' +F22.919499999999999 +sg8 +F0.94535400000000003 +sg9 +F309.369911 +sg10 +(lp1393 +L343127590L +aL343127591L +aL343127592L +aL343127593L +asg12 +(lp1394 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82825499999999996 +sS't' +F53288.113407199999 +ss(F309.380088 +F0.34212100000000001 +F0.77900499999999995 +F0.82900600000000002 +I0 +tp1395 +(dp1396 +g4 +F0.34212100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.0640434 +sS'm' +F18.5824 +sg8 +F0.82900600000000002 +sg9 +F309.380088 +sg10 +(lp1397 +L343271572L +aL343271573L +aL343271574L +aL343271575L +aL343271576L +asg12 +(lp1398 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900499999999995 +sS't' +F53302.1074458 +ss(F309.38614999999999 +F0.33446500000000001 +F0.86921599999999999 +F0.91874699999999998 +I0 +tp1399 +(dp1400 +g4 +F0.33446500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F5.0491000000000001 +sS'm' +F23.917400000000001 +sg8 +F0.91874699999999998 +sg9 +F309.38614999999999 +sg10 +(lp1401 +L343882254L +aL343882255L +aL343882256L +aL343882257L +aL343882258L +asg12 +(lp1402 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86921599999999999 +sS't' +F53626.144984799997 +ss(F309.37661600000001 +F0.34460000000000002 +F0.74929900000000005 +F0.97835799999999995 +I0 +tp1403 +(dp1404 +g4 +F0.34460000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.14889 +sS'm' +F23.9023 +sg8 +F0.97835799999999995 +sg9 +F309.37661600000001 +sg10 +(lp1405 +L171386394L +aL171386395L +aL171386396L +asg12 +(lp1406 +I2 +aI3 +aI4 +asg14 +F0.74929900000000005 +sS't' +F54005.1055003 +ss(F309.38529 +F0.33197300000000002 +F1.08003 +F1.0100199999999999 +I0 +tp1407 +(dp1408 +g4 +F0.33197300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.80397300000000005 +sS'm' +F22.491299999999999 +sg8 +F1.0100199999999999 +sg9 +F309.38529 +sg10 +(lp1409 +L345367527L +aL345367528L +aL345367529L +aL345367530L +aL345367531L +asg12 +(lp1410 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08003 +sS't' +F53675.078756000003 +ss(F309.38564600000001 +F0.32638 +F0.74902999999999997 +F0.97802199999999995 +I0 +tp1411 +(dp1412 +g4 +F0.32638 +sg5 +I0 +sg6 +I0 +sg7 +F2.5641099999999999 +sS'm' +F23.855599999999999 +sg8 +F0.97802199999999995 +sg9 +F309.38564600000001 +sg10 +(lp1413 +L171386572L +aL171386573L +aL171386574L +aL171386575L +aL171386576L +asg12 +(lp1414 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74902999999999997 +sS't' +F54005.107184 +ss(F309.36312600000002 +F0.331063 +F0.64901299999999995 +F0.53901699999999997 +I0 +tp1415 +(dp1416 +g4 +F0.331063 +sg5 +I0 +sg6 +I0 +sg7 +F0.022172899999999999 +sS'm' +F16.586600000000001 +sg8 +F0.53901699999999997 +sg9 +F309.36312600000002 +sg10 +(lp1417 +L112296666L +aL112296667L +aL112296668L +aL112296669L +aL112296670L +aL112296671L +aL112296672L +aL112296673L +aL112296664L +aL112296665L +asg12 +(lp1418 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.64901299999999995 +sS't' +F53656.104401099998 +ss(F309.36503699999997 +F0.33012599999999998 +F0.74100600000000005 +F0.96000700000000005 +I0 +tp1419 +(dp1420 +g4 +F0.33012599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.21956000000000001 +sS'm' +F21.0593 +sg8 +F0.96000700000000005 +sg9 +F309.36503699999997 +sg10 +(lp1421 +L344475578L +aL344475579L +aL344475580L +aL344475581L +aL344475582L +asg12 +(lp1422 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.123824299997 +ss(F309.36807599999997 +F0.34610999999999997 +F0.74939299999999998 +F0.97814100000000004 +I0 +tp1423 +(dp1424 +g4 +F0.34610999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F3.0636100000000002 +sS'm' +F24.0472 +sg8 +F0.97814100000000004 +sg9 +F309.36807599999997 +sg10 +(lp1425 +L171386249L +aL171386250L +aL171386251L +aL171386252L +aL171386253L +asg12 +(lp1426 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74939299999999998 +sS't' +F54005.1071352 +ss(F309.36917499999998 +F0.34575699999999998 +F0.92105000000000004 +F1.10006 +I0 +tp1427 +(dp1428 +g4 +F0.34575699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.45616699999999999 +sS'm' +F23.3005 +sg8 +F1.10006 +sg9 +F309.36917499999998 +sg10 +(lp1429 +L345539473L +aL345539474L +aL345539475L +aL345539476L +asg12 +(lp1430 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92105000000000004 +sS't' +F53677.101402400003 +ss(F309.38201900000001 +F0.34295900000000001 +F1.0500499999999999 +F0.944048 +I0 +tp1431 +(dp1432 +g4 +F0.34295900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.98871500000000001 +sS'm' +F22.420100000000001 +sg8 +F0.944048 +sg9 +F309.38201900000001 +sg10 +(lp1433 +L346329344L +aL346329345L +aL346329346L +aL346329347L +aL346329348L +asg12 +(lp1434 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500499999999999 +sS't' +F53974.159598099999 +ss(F309.37239899999997 +F0.32937499999999997 +F0.75122699999999998 +F0.98007100000000003 +I0 +tp1435 +(dp1436 +g4 +F0.32937499999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.67930599999999997 +sS'm' +F23.749400000000001 +sg8 +F0.98007100000000003 +sg9 +F309.37239899999997 +sg10 +(lp1437 +L171388755L +aL171388756L +aL171388757L +aL171388758L +asg12 +(lp1438 +I1 +aI2 +aI3 +aI4 +asg14 +F0.75122699999999998 +sS't' +F54005.108805600001 +ss(F309.38273900000002 +F0.32574700000000001 +F0.82802399999999998 +F0.94501800000000002 +I0 +tp1439 +(dp1440 +g4 +F0.32574700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.8898700000000002 +sS'm' +F23.964200000000002 +sg8 +F0.94501800000000002 +sg9 +F309.38273900000002 +sg10 +(lp1441 +L343126087L +aL343126088L +aL343126089L +aL343126090L +aL343126091L +aL343126092L +aL343126093L +aL343126094L +aL343126095L +aL343126096L +asg12 +(lp1442 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82802399999999998 +sS't' +F53288.111784399996 +ss(F309.36399999999998 +F0.31755699999999998 +F0.88501399999999997 +F1.1100099999999999 +I0 +tp1443 +(dp1444 +g4 +F0.31755699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.70955599999999996 +sS'm' +F22.525500000000001 +sg8 +F1.1100099999999999 +sg9 +F309.36399999999998 +sg10 +(lp1445 +L344153044L +aL344153045L +aL344153046L +aL344153047L +aL344153048L +asg12 +(lp1446 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88501399999999997 +sS't' +F53635.138168500001 +ss(F309.38811700000002 +F0.33807700000000002 +F0.85124 +F0.91321200000000002 +I0 +tp1447 +(dp1448 +g4 +F0.33807700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0168299999999999 +sS'm' +F22.968 +sg8 +F0.91321200000000002 +sg9 +F309.38811700000002 +sg10 +(lp1449 +L343880264L +aL343880265L +aL343880266L +aL343880267L +asg12 +(lp1450 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85124 +sS't' +F53626.1466487 +ss(F309.38529999999997 +F0.331959 +F0.92404399999999998 +F1.0300499999999999 +I0 +tp1451 +(dp1452 +g4 +F0.331959 +sg5 +I0 +sg6 +I0 +sg7 +F1.5462800000000001 +sS'm' +F23.053100000000001 +sg8 +F1.0300499999999999 +sg9 +F309.38529999999997 +sg10 +(lp1453 +L345222024L +aL345222025L +aL345222026L +aL345222027L +aL345222028L +asg12 +(lp1454 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92404399999999998 +sS't' +F53673.081866599998 +ss(F309.38747699999999 +F0.33229300000000001 +F0.24910399999999999 +F0.358431 +I0 +tp1455 +(dp1456 +g4 +F0.33229300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.1581300000000001 +sS'm' +F23.510899999999999 +sg8 +F0.358431 +sg9 +F309.38747699999999 +sg10 +(lp1457 +L327906660L +aL327906661L +aL327906662L +aL327906663L +asg12 +(lp1458 +I1 +aI2 +aI3 +aI4 +asg14 +F0.24910399999999999 +sS't' +F53312.064633299997 +ss(F309.37768899999998 +F0.34560099999999999 +F0.88513600000000003 +F1.11008 +I0 +tp1459 +(dp1460 +g4 +F0.34560099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.35868800000000001 +sS'm' +F22.846299999999999 +sg8 +F1.11008 +sg9 +F309.37768899999998 +sg10 +(lp1461 +L344153195L +aL344153196L +aL344153197L +aL344153198L +aL344153199L +aL344153200L +aL344153201L +aL344153202L +asg12 +(lp1462 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88513600000000003 +sS't' +F53635.139864999997 +ss(F309.36597899999998 +F0.33172099999999999 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp1463 +(dp1464 +g4 +F0.33172099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.13037599999999999 +sS'm' +F20.388500000000001 +sg8 +F1.0700000000000001 +sg9 +F309.36597899999998 +sg10 +(lp1465 +L345675606L +aL345675607L +aL345675608L +aL345675609L +aL345675610L +asg12 +(lp1466 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086400100001 +ss(F309.37430699999999 +F0.32661499999999999 +F0.41304999999999997 +F0.41206199999999998 +I0 +tp1467 +(dp1468 +g4 +F0.32661499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F5.6819499999999996 +sS'm' +F23.945 +sg8 +F0.41206199999999998 +sg9 +F309.37430699999999 +sg10 +(lp1469 +L345999909L +aL345999910L +aL345999911L +aL345999912L +aL345999913L +asg12 +(lp1470 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41304999999999997 +sS't' +F53703.093110100002 +ss(F309.36633499999999 +F0.34083200000000002 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp1471 +(dp1472 +g4 +F0.34083200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.055227999999999999 +sS'm' +F18.3797 +sg8 +F1.0100100000000001 +sg9 +F309.36633499999999 +sg10 +(lp1473 +L345363499L +aL345363500L +aL345363501L +aL345363502L +aL345363503L +asg12 +(lp1474 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078703300002 +ss(F309.36398700000001 +F0.31761499999999998 +F0.41332099999999999 +F0.41233300000000001 +I0 +tp1475 +(dp1476 +g4 +F0.31761499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.7419500000000001 +sS'm' +F22.457899999999999 +sg8 +F0.41233300000000001 +sg9 +F309.36398700000001 +sg10 +(lp1477 +L345997701L +aL345997702L +aL345997703L +aL345997704L +aL345997705L +asg12 +(lp1478 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41332099999999999 +sS't' +F53703.093081500003 +ss(F309.36848600000002 +F0.33940399999999998 +F0.85438000000000003 +F0.91713500000000003 +I0 +tp1479 +(dp1480 +g4 +F0.33940399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.1947299999999998 +sS'm' +F23.424499999999998 +sg8 +F0.91713500000000003 +sg9 +F309.36848600000002 +sg10 +(lp1481 +L343881919L +aL343881920L +aL343881921L +aL343881922L +asg12 +(lp1482 +I0 +aI1 +aI2 +aI3 +asg14 +F0.85438000000000003 +sS't' +F53626.144935700002 +ss(F309.372366 +F0.324181 +F1.08006 +F1.01007 +I0 +tp1483 +(dp1484 +g4 +F0.324181 +sg5 +I0 +sg6 +I0 +sg7 +F0.30857000000000001 +sS'm' +F22.5762 +sg8 +F1.01007 +sg9 +F309.372366 +sg10 +(lp1485 +L345370254L +aL345370255L +aL345370256L +aL345370257L +asg12 +(lp1486 +I1 +aI2 +aI3 +aI4 +asg14 +F1.08006 +sS't' +F53675.080378500003 +ss(F309.383916 +F0.31873699999999999 +F0.74112800000000001 +F0.96009599999999995 +I0 +tp1487 +(dp1488 +g4 +F0.31873699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.25400200000000001 +sS'm' +F22.572600000000001 +sg8 +F0.96009599999999995 +sg9 +F309.383916 +sg10 +(lp1489 +L344483095L +aL344483096L +aL344483097L +aL344483098L +asg12 +(lp1490 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74112800000000001 +sS't' +F53644.125535200001 +ss(F309.36007000000001 +F0.320525 +F1.0100100000000001 +F0.992008 +I0 +tp1491 +(dp1492 +g4 +F0.320525 +sg5 +I0 +sg6 +I0 +sg7 +F0.114444 +sS'm' +F19.7331 +sg8 +F0.992008 +sg9 +F309.36007000000001 +sg10 +(lp1493 +L342964250L +aL342964251L +aL342964252L +aL342964253L +aL342964254L +asg12 +(lp1494 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134544 +ss(F309.37095599999998 +F0.33694000000000002 +F0.88519700000000001 +F1.1101700000000001 +I0 +tp1495 +(dp1496 +g4 +F0.33694000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.451517 +sS'm' +F22.8872 +sg8 +F1.1101700000000001 +sg9 +F309.37095599999998 +sg10 +(lp1497 +L344155533L +aL344155534L +aL344155535L +asg12 +(lp1498 +I2 +aI3 +aI4 +asg14 +F0.88519700000000001 +sS't' +F53635.136529299998 +ss(F309.366356 +F0.34079900000000002 +F0.93300799999999995 +F0.87800999999999996 +I0 +tp1499 +(dp1500 +g4 +F0.34079900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0481597 +sS'm' +F18.361499999999999 +sg8 +F0.87800999999999996 +sg9 +F309.366356 +sg10 +(lp1501 +L345024495L +aL345024496L +aL345024497L +aL345024498L +aL345024499L +asg12 +(lp1502 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300799999999995 +sS't' +F53670.113833000003 +ss(F309.38889399999999 +F0.34376800000000002 +F0.98401000000000005 +F0.988012 +I0 +tp1503 +(dp1504 +g4 +F0.34376800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0454378 +sS'm' +F16.207799999999999 +sg8 +F0.988012 +sg9 +F309.38889399999999 +sg10 +(lp1505 +L346459653L +aL346459654L +aL346459655L +aL346459656L +aL346459657L +aL346459658L +aL346459659L +aL346459660L +aL346459661L +aL346459662L +asg12 +(lp1506 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98401000000000005 +sS't' +F54007.1199423 +ss(F309.37449400000003 +F0.31692100000000001 +F0.82838599999999996 +F0.94561600000000001 +I0 +tp1507 +(dp1508 +g4 +F0.31692100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F5.7305599999999997 +sS'm' +F24.3903 +sg8 +F0.94561600000000001 +sg9 +F309.37449400000003 +sg10 +(lp1509 +L343130116L +aL343130117L +aL343130118L +aL343130119L +aL343130120L +asg12 +(lp1510 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82838599999999996 +sS't' +F53288.111761499997 +ss(F309.36402500000003 +F0.31753599999999998 +F0.92403199999999996 +F1.03003 +I0 +tp1511 +(dp1512 +g4 +F0.31753599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.90958399999999995 +sS'm' +F22.4499 +sg8 +F1.03003 +sg9 +F309.36402500000003 +sg10 +(lp1513 +L345219848L +aL345219849L +aL345219850L +aL345219851L +aL345219852L +asg12 +(lp1514 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92403199999999996 +sS't' +F53673.081807499999 +ss(F309.37898200000001 +F0.32704 +F0.74900699999999998 +F0.97800799999999999 +I0 +tp1515 +(dp1516 +g4 +F0.32704 +sg5 +I0 +sg6 +I0 +sg7 +F0.27059800000000001 +sS'm' +F21.2926 +sg8 +F0.97800799999999999 +sg9 +F309.37898200000001 +sg10 +(lp1517 +L171381517L +aL171381518L +aL171381519L +aL171381520L +aL171381521L +aL171381526L +aL171381527L +aL171381528L +aL171381529L +aL171381530L +asg12 +(lp1518 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900699999999998 +sS't' +F54005.107165499998 +ss(F309.365028 +F0.33012799999999998 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp1519 +(dp1520 +g4 +F0.33012799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.193523 +sS'm' +F20.9527 +sg8 +F1.1100000000000001 +sg9 +F309.365028 +sg10 +(lp1521 +L344144084L +aL344144085L +aL344144086L +aL344144087L +aL344144088L +asg12 +(lp1522 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138171400002 +ss(F309.36979100000002 +F0.34465600000000002 +F1.0900300000000001 +F1.07003 +I0 +tp1523 +(dp1524 +g4 +F0.34465600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.48661199999999999 +sS'm' +F23.3719 +sg8 +F1.07003 +sg9 +F309.36979100000002 +sg10 +(lp1525 +L345683696L +aL345683697L +aL345683698L +aL345683699L +aL345683700L +aL345683701L +aL345683702L +aL345683703L +asg12 +(lp1526 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900300000000001 +sS't' +F53680.088069199999 +ss(F309.374751 +F0.331673 +F0.93300700000000003 +F0.87800900000000004 +I0 +tp1527 +(dp1528 +g4 +F0.331673 +sg5 +I0 +sg6 +I0 +sg7 +F0.031125 +sS'm' +F15.957700000000001 +sg8 +F0.87800900000000004 +sg9 +F309.374751 +sg10 +(lp1529 +L345024595L +aL345024596L +aL345024597L +aL345024598L +aL345024599L +asg12 +(lp1530 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.113856399999 +ss(F309.37233199999997 +F0.32937300000000003 +F0.85481300000000005 +F0.91516900000000001 +I0 +tp1531 +(dp1532 +g4 +F0.32937300000000003 +sg5 +I0 +sg6 +I0 +sg7 +F6.4247199999999998 +sS'm' +F24.184999999999999 +sg8 +F0.91516900000000001 +sg9 +F309.37233199999997 +sg10 +(lp1533 +L343874226L +aL343874227L +aL343874228L +aL343874229L +aL343874230L +asg12 +(lp1534 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85481300000000005 +sS't' +F53626.144946400003 +ss(F309.36994800000002 +F0.33449200000000001 +F0.657501 +F0.54542000000000002 +I0 +tp1535 +(dp1536 +g4 +F0.33449200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.11042 +sS'm' +F21.828600000000002 +sg8 +F0.54542000000000002 +sg9 +F309.36994800000002 +sg10 +(lp1537 +L112300716L +aL112300717L +aL112300718L +aL112300719L +aL112300720L +asg12 +(lp1538 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.657501 +sS't' +F53656.106078700002 +ss(F309.37239899999997 +F0.32937499999999997 +F0.74919000000000002 +F0.97822200000000004 +I0 +tp1539 +(dp1540 +g4 +F0.32937499999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.66395899999999997 +sS'm' +F23.7239 +sg8 +F0.97822200000000004 +sg9 +F309.37239899999997 +sg10 +(lp1541 +L171388759L +aL171388760L +aL171388761L +aL171388762L +asg12 +(lp1542 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74919000000000002 +sS't' +F54005.108805600001 +ss(F309.38270799999998 +F0.33517400000000003 +F1.0100100000000001 +F0.953009 +I0 +tp1543 +(dp1544 +g4 +F0.33517400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.097576800000000005 +sS'm' +F19.4254 +sg8 +F0.953009 +sg9 +F309.38270799999998 +sg10 +(lp1545 +L343712233L +aL343712234L +aL343712235L +aL343712236L +aL343712237L +asg12 +(lp1546 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.1587631 +ss(F309.36812700000002 +F0.34605599999999997 +F0.93418299999999999 +F0.87932900000000003 +I0 +tp1547 +(dp1548 +g4 +F0.34605599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F2.50007 +sS'm' +F23.675799999999999 +sg8 +F0.87932900000000003 +sg9 +F309.36812700000002 +sg10 +(lp1549 +L345030628L +aL345030629L +aL345030630L +aL345030631L +asg12 +(lp1550 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93418299999999999 +sS't' +F53670.115496400002 +ss(F309.38270999999997 +F0.33515899999999998 +F0.74100600000000005 +F0.96000700000000005 +I0 +tp1551 +(dp1552 +g4 +F0.33515899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.076968900000000007 +sS'm' +F19.4513 +sg8 +F0.96000700000000005 +sg9 +F309.38270999999997 +sg10 +(lp1553 +L344475996L +aL344475997L +aL344475998L +aL344475999L +aL344476000L +asg12 +(lp1554 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.1238734 +ss(F309.38899099999998 +F0.34520299999999998 +F0.56513199999999997 +F0.51410699999999998 +I0 +tp1555 +(dp1556 +g4 +F0.34520299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.46967700000000001 +sS'm' +F20.992899999999999 +sg8 +F0.51410699999999998 +sg9 +F309.38899099999998 +sg10 +(lp1557 +L344709063L +aL344709064L +aL344709065L +aL344709066L +aL344709067L +asg12 +(lp1558 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.56513199999999997 +sS't' +F53654.158540299999 +ss(F309.38077299999998 +F0.344555 +F1.01037 +F0.95323100000000005 +I0 +tp1559 +(dp1560 +g4 +F0.344555 +sg5 +I0 +sg6 +I0 +sg7 +F2.2418499999999999 +sS'm' +F23.162400000000002 +sg8 +F0.95323100000000005 +sg9 +F309.38077299999998 +sg10 +(lp1561 +L343717457L +aL343717458L +aL343717459L +aL343717460L +aL343717461L +asg12 +(lp1562 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01037 +sS't' +F53623.158757800004 +ss(F309.38531 +F0.33194200000000001 +F0.92102099999999998 +F1.10002 +I0 +tp1563 +(dp1564 +g4 +F0.33194200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.01308 +sS'm' +F23.508500000000002 +sg8 +F1.10002 +sg9 +F309.38531 +sg10 +(lp1565 +L345537402L +aL345537403L +aL345537404L +aL345537405L +aL345537406L +aL345537407L +aL345537408L +aL345537409L +aL345537410L +aL345537411L +asg12 +(lp1566 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92102099999999998 +sS't' +F53677.099788699998 +ss(F309.36006600000002 +F0.32050699999999999 +F0.77501200000000003 +F0.75402599999999997 +I0 +tp1567 +(dp1568 +g4 +F0.32050699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.038062499999999999 +sS'm' +F16.776399999999999 +sg8 +F0.75402599999999997 +sg9 +F309.36006600000002 +sg10 +(lp1569 +L342827225L +aL342827226L +aL342827227L +aL342827228L +aL342827229L +aL342827230L +aL342827221L +aL342827222L +aL342827223L +aL342827224L +asg12 +(lp1570 +I4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.77501200000000003 +sS't' +F53243.256546500001 +ss(F309.38217200000003 +F0.32174999999999998 +F0.41304000000000002 +F0.412049 +I0 +tp1571 +(dp1572 +g4 +F0.32174999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.32198599999999999 +sS'm' +F20.765999999999998 +sg8 +F0.412049 +sg9 +F309.38217200000003 +sg10 +(lp1573 +L345997998L +aL345997999L +aL345998000L +aL345998001L +aL345998002L +asg12 +(lp1574 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41304000000000002 +sS't' +F53703.093132000002 +ss(F309.36680200000001 +F0.33564100000000002 +F0.86643400000000004 +F0.90044100000000005 +I0 +tp1575 +(dp1576 +g4 +F0.33564100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.29061500000000001 +sS'm' +F21.744199999999999 +sg8 +F0.90044100000000005 +sg9 +F309.36680200000001 +sg10 +(lp1577 +L345816284L +aL345816285L +aL345816286L +asg12 +(lp1578 +I2 +aI3 +aI4 +asg14 +F0.86643400000000004 +sS't' +F53693.086649999997 +ss(F309.363136 +F0.33109899999999998 +F0.73102299999999998 +F0.73202 +I0 +tp1579 +(dp1580 +g4 +F0.33109899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.083811899999999995 +sS'm' +F18.7515 +sg8 +F0.73202 +sg9 +F309.363136 +sg10 +(lp1581 +L344601488L +aL344601489L +aL344601490L +aL344601491L +aL344601492L +aL344601493L +aL344601494L +aL344601495L +aL344601496L +aL344601497L +asg12 +(lp1582 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.73102299999999998 +sS't' +F53654.1584697 +ss(F309.38926099999998 +F0.32208999999999999 +F0.50702499999999995 +F0.45975300000000002 +I0 +tp1583 +(dp1584 +g4 +F0.32208999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.99773 +sS'm' +F22.578900000000001 +sg8 +F0.45975300000000002 +sg9 +F309.38926099999998 +sg10 +(lp1585 +L153252880L +aL153252881L +aL153252882L +aL153252883L +aL153252884L +asg12 +(lp1586 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50702499999999995 +sS't' +F53702.084018100002 +ss(F309.36401799999999 +F0.31753399999999998 +F0.85106099999999996 +F0.91304600000000002 +I0 +tp1587 +(dp1588 +g4 +F0.31753399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.2000500000000001 +sS'm' +F23.432400000000001 +sg8 +F0.91304600000000002 +sg9 +F309.36401799999999 +sg10 +(lp1589 +L343880142L +aL343880143L +aL343880144L +aL343880145L +aL343880146L +asg12 +(lp1590 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85106099999999996 +sS't' +F53626.144923300002 +ss(F309.36914000000002 +F0.34574300000000002 +F0.77910400000000002 +F0.82908800000000005 +I0 +tp1591 +(dp1592 +g4 +F0.34574300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.1564399999999999 +sS'm' +F23.284500000000001 +sg8 +F0.82908800000000005 +sg9 +F309.36914000000002 +sg10 +(lp1593 +L343278847L +aL343278848L +aL343278849L +aL343278850L +aL343278851L +asg12 +(lp1594 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77910400000000002 +sS't' +F53302.107415400002 +ss(F309.382632 +F0.33967599999999998 +F0.93300799999999995 +F0.87800999999999996 +I0 +tp1595 +(dp1596 +g4 +F0.33967599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.056981400000000001 +sS'm' +F18.7593 +sg8 +F0.87800999999999996 +sg9 +F309.382632 +sg10 +(lp1597 +L345024662L +aL345024663L +aL345024664L +aL345024665L +aL345024666L +asg12 +(lp1598 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300799999999995 +sS't' +F53670.113878299999 +ss(F309.36849599999999 +F0.33944600000000003 +F1.05209 +F0.94672999999999996 +I0 +tp1599 +(dp1600 +g4 +F0.33944600000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.56890399999999997 +sS'm' +F23.3751 +sg8 +F0.94672999999999996 +sg9 +F309.36849599999999 +sg10 +(lp1601 +L346337808L +aL346337809L +aL346337810L +aL346337811L +asg12 +(lp1602 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05209 +sS't' +F53974.161219000001 +ss(F309.37655799999999 +F0.34648800000000002 +F0.74929800000000002 +F0.97829200000000005 +I0 +tp1603 +(dp1604 +g4 +F0.34648800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F5.8197900000000002 +sS'm' +F24.746400000000001 +sg8 +F0.97829200000000005 +sg9 +F309.37655799999999 +sg10 +(lp1605 +L171386397L +aL171386398L +aL171386399L +aL171386400L +aL171386401L +asg12 +(lp1606 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74929800000000002 +sS't' +F54005.107158699997 +ss(F309.37432899999999 +F0.32660800000000001 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp1607 +(dp1608 +g4 +F0.32660800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.032602100000000002 +sS'm' +F19.006799999999998 +sg8 +F1.0100100000000001 +sg9 +F309.37432899999999 +sg10 +(lp1609 +L345366254L +aL345366255L +aL345366256L +aL345366257L +aL345366258L +aL345366259L +aL345366260L +aL345366261L +aL345366252L +aL345366253L +asg12 +(lp1610 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F1.0800099999999999 +sS't' +F53675.077066899998 +ss(F309.36090300000001 +F0.31767499999999999 +F0.61624800000000002 +F0.77526700000000004 +I0 +tp1611 +(dp1612 +g4 +F0.31767499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.6564700000000001 +sS'm' +F23.398599999999998 +sg8 +F0.77526700000000004 +sg9 +F309.36090300000001 +sg10 +(lp1613 +L346168066L +aL346168067L +aL346168068L +aL346168069L +aL346168070L +asg12 +(lp1614 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61624800000000002 +sS't' +F53704.071619900002 +ss(F309.370948 +F0.33692899999999998 +F1.0505 +F0.94481400000000004 +I0 +tp1615 +(dp1616 +g4 +F0.33692899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.6332 +sS'm' +F25.451599999999999 +sg8 +F0.94481400000000004 +sg9 +F309.370948 +sg10 +(lp1617 +L346338101L +aL346338102L +aL346338103L +aL346338104L +asg12 +(lp1618 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0505 +sS't' +F53974.161225800002 +ss(F309.38538899999998 +F0.34016999999999997 +F0.413296 +F0.41239999999999999 +I0 +tp1619 +(dp1620 +g4 +F0.34016999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.99475599999999997 +sS'm' +F21.9497 +sg8 +F0.41239999999999999 +sg9 +F309.38538899999998 +sg10 +(lp1621 +L346001062L +aL346001063L +aL346001064L +aL346001065L +aL346001066L +asg12 +(lp1622 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.413296 +sS't' +F53703.093140899997 +ss(F309.36747200000002 +F0.32935999999999999 +F1.0100800000000001 +F0.99207199999999995 +I0 +tp1623 +(dp1624 +g4 +F0.32935999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F7.12819 +sS'm' +F24.5063 +sg8 +F0.99207199999999995 +sg9 +F309.36747200000002 +sg10 +(lp1625 +L342970349L +aL342970350L +aL342970351L +aL342970352L +aL342970353L +asg12 +(lp1626 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100800000000001 +sS't' +F53270.134564499996 +ss(F309.37308300000001 +F0.324438 +F1.0500400000000001 +F0.94404399999999999 +I0 +tp1627 +(dp1628 +g4 +F0.324438 +sg5 +I0 +sg6 +I0 +sg7 +F4.84084 +sS'm' +F24.180599999999998 +sg8 +F0.94404399999999999 +sg9 +F309.37308300000001 +sg10 +(lp1629 +L346336357L +aL346336358L +aL346336359L +aL346336360L +aL346336361L +asg12 +(lp1630 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500400000000001 +sS't' +F53974.159573299999 +ss(F309.386503 +F0.32197999999999999 +F0.74901399999999996 +F0.97801300000000002 +I0 +tp1631 +(dp1632 +g4 +F0.32197999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.57335400000000003 +sS'm' +F22.180800000000001 +sg8 +F0.97801300000000002 +sg9 +F309.386503 +sg10 +(lp1633 +L171381682L +aL171381683L +aL171381684L +aL171381685L +aL171381686L +asg12 +(lp1634 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74901399999999996 +sS't' +F54005.107186399997 +ss(F309.365973 +F0.33173200000000003 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp1635 +(dp1636 +g4 +F0.33173200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.14005999999999999 +sS'm' +F20.511099999999999 +sg8 +F1.1100000000000001 +sg9 +F309.365973 +sg10 +(lp1637 +L344144089L +aL344144090L +aL344144091L +aL344144092L +aL344144093L +asg12 +(lp1638 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138174 +ss(F309.38755300000003 +F0.33216000000000001 +F0.85127200000000003 +F0.91338900000000001 +I0 +tp1639 +(dp1640 +g4 +F0.33216000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.8364599999999998 +sS'm' +F24.6661 +sg8 +F0.91338900000000001 +sg9 +F309.38755300000003 +sg10 +(lp1641 +L343882246L +aL343882247L +aL343882248L +aL343882249L +asg12 +(lp1642 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85127200000000003 +sS't' +F53626.146647200003 +ss(F309.38810999999998 +F0.33812700000000001 +F0.74905100000000002 +F0.97804500000000005 +I0 +tp1643 +(dp1644 +g4 +F0.33812700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.87046 +sS'm' +F23.505299999999998 +sg8 +F0.97804500000000005 +sg9 +F309.38810999999998 +sg10 +(lp1645 +L171386587L +aL171386588L +aL171386589L +aL171386590L +aL171386591L +asg12 +(lp1646 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74905100000000002 +sS't' +F54005.107190800001 +ss(F309.360051 +F0.32050099999999998 +F0.74100600000000005 +F0.96000700000000005 +I0 +tp1647 +(dp1648 +g4 +F0.32050099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.088103399999999998 +sS'm' +F19.709 +sg8 +F0.96000700000000005 +sg9 +F309.360051 +sg10 +(lp1649 +L344475453L +aL344475454L +aL344475455L +aL344475456L +aL344475457L +aL344475458L +aL344475459L +aL344475460L +aL344475461L +aL344475462L +asg12 +(lp1650 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.1238104 +ss(F309.363088 +F0.33105000000000001 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp1651 +(dp1652 +g4 +F0.33105000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.054467599999999998 +sS'm' +F18.803799999999999 +sg8 +F1.1100000000000001 +sg9 +F309.363088 +sg10 +(lp1653 +L344144074L +aL344144075L +aL344144076L +aL344144077L +aL344144078L +aL344144079L +aL344144080L +aL344144081L +aL344144082L +aL344144083L +asg12 +(lp1654 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138165999997 +ss(F309.385334 +F0.34018399999999999 +F0.50658999999999998 +F0.45975500000000002 +I0 +tp1655 +(dp1656 +g4 +F0.34018399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.52801799999999999 +sS'm' +F21.1051 +sg8 +F0.45975500000000002 +sg9 +F309.385334 +sg10 +(lp1657 +L153250336L +aL153250337L +aL153250338L +aL153250339L +asg12 +(lp1658 +I0 +aI1 +aI2 +aI3 +asg14 +F0.50658999999999998 +sS't' +F53702.084007199999 +ss(F309.365228 +F0.337283 +F0.93327199999999999 +F0.87835799999999997 +I0 +tp1659 +(dp1660 +g4 +F0.337283 +sg5 +I0 +sg6 +I0 +sg7 +F0.34778900000000001 +sS'm' +F22.6296 +sg8 +F0.87835799999999997 +sg9 +F309.365228 +sg10 +(lp1661 +L345030602L +aL345030603L +aL345030604L +aL345030605L +asg12 +(lp1662 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93327199999999999 +sS't' +F53670.115488399999 +ss(F309.38895200000002 +F0.34520299999999998 +F0.24810199999999999 +F0.34806999999999999 +I0 +tp1663 +(dp1664 +g4 +F0.34520299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.99212599999999995 +sS'm' +F22.032599999999999 +sg8 +F0.34806999999999999 +sg9 +F309.38895200000002 +sg10 +(lp1665 +L327902152L +aL327902153L +aL327902154L +aL327902155L +aL327902156L +asg12 +(lp1666 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24810199999999999 +sS't' +F53312.062978900001 +ss(F309.378964 +F0.32703199999999999 +F0.88500699999999999 +F1.1100099999999999 +I0 +tp1667 +(dp1668 +g4 +F0.32703199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.26275500000000002 +sS'm' +F21.3432 +sg8 +F1.1100099999999999 +sg9 +F309.378964 +sg10 +(lp1669 +L344148040L +aL344148041L +aL344148042L +aL344148043L +aL344148044L +aL344148050L +aL344148051L +aL344148052L +aL344148053L +aL344148054L +asg12 +(lp1670 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500699999999999 +sS't' +F53635.138210099998 +ss(F309.37473799999998 +F0.33167000000000002 +F0.50606399999999996 +F0.45913399999999999 +I0 +tp1671 +(dp1672 +g4 +F0.33167000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.021455200000000001 +sS'm' +F16.197600000000001 +sg8 +F0.45913399999999999 +sg9 +F309.37473799999998 +sg10 +(lp1673 +L153248811L +aL153248812L +aL153248808L +aL153248809L +aL153248810L +asg12 +(lp1674 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.50606399999999996 +sS't' +F53702.083148400001 +ss(F309.38651499999997 +F0.32196000000000002 +F0.77904600000000002 +F0.82905300000000004 +I0 +tp1675 +(dp1676 +g4 +F0.32196000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.5188999999999999 +sS'm' +F22.487400000000001 +sg8 +F0.82905300000000004 +sg9 +F309.38651499999997 +sg10 +(lp1677 +L343277312L +aL343277313L +aL343277314L +aL343277315L +aL343277316L +asg12 +(lp1678 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77904600000000002 +sS't' +F53302.107463599998 +ss(F309.36848500000002 +F0.33943200000000001 +F0.83081400000000005 +F0.94689800000000002 +I0 +tp1679 +(dp1680 +g4 +F0.33943200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F6.8247099999999996 +sS'm' +F24.573599999999999 +sg8 +F0.94689800000000002 +sg9 +F309.36848500000002 +sg10 +(lp1681 +L343130029L +aL343130030L +aL343130031L +aL343130032L +aL343130033L +asg12 +(lp1682 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.83081400000000005 +sS't' +F53288.1117448 +ss(F309.374618 +F0.316834 +F0.27468300000000001 +F0.36343199999999998 +I0 +tp1683 +(dp1684 +g4 +F0.316834 +sg5 +I0 +sg6 +I0 +sg7 +F0.802983 +sS'm' +F23.363199999999999 +sg8 +F0.36343199999999998 +sg9 +F309.374618 +sg10 +(lp1685 +L327908398L +aL327908399L +aL327908400L +aL327908401L +asg12 +(lp1686 +I1 +aI2 +aI3 +aI4 +asg14 +F0.27468300000000001 +sS't' +F53312.064597600001 +ss(F309.385288 +F0.33195000000000002 +F0.74102999999999997 +F0.96002799999999999 +I0 +tp1687 +(dp1688 +g4 +F0.33195000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.6986600000000001 +sS'm' +F23.439699999999998 +sg8 +F0.96002799999999999 +sg9 +F309.385288 +sg10 +(lp1689 +L344481280L +aL344481281L +aL344481282L +aL344481283L +aL344481284L +aL344481285L +aL344481286L +aL344481287L +aL344481288L +aL344481289L +asg12 +(lp1690 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74102999999999997 +sS't' +F53644.123880500003 +ss(F309.37575600000002 +F0.34615499999999999 +F0.74126099999999995 +F0.96016999999999997 +I0 +tp1691 +(dp1692 +g4 +F0.34615499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.8712299999999997 +sS'm' +F24.591699999999999 +sg8 +F0.96016999999999997 +sg9 +F309.37575600000002 +sg10 +(lp1693 +L344482974L +aL344482975L +aL344482976L +aL344482977L +aL344482978L +asg12 +(lp1694 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74126099999999995 +sS't' +F53644.123853999998 +ss(F309.360051 +F0.32051800000000003 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp1695 +(dp1696 +g4 +F0.32051800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.084557300000000002 +sS'm' +F19.722100000000001 +sg8 +F1.1100000000000001 +sg9 +F309.360051 +sg10 +(lp1697 +L344143983L +aL344143984L +aL344143985L +aL344143986L +aL344143987L +asg12 +(lp1698 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138157599999 +ss(F309.388912 +F0.34378900000000001 +F1.0100100000000001 +F0.99202100000000004 +I0 +tp1699 +(dp1700 +g4 +F0.34378900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.049604700000000002 +sS'm' +F16.2135 +sg8 +F0.99202100000000004 +sg9 +F309.388912 +sg10 +(lp1701 +L342962242L +aL342962243L +aL342962244L +aL342962245L +aL342962246L +asg12 +(lp1702 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134624099999 +ss(F309.36403899999999 +F0.317552 +F1.01003 +F0.992035 +I0 +tp1703 +(dp1704 +g4 +F0.317552 +sg5 +I0 +sg6 +I0 +sg7 +F0.81741799999999998 +sS'm' +F22.136600000000001 +sg8 +F0.992035 +sg9 +F309.36403899999999 +sg10 +(lp1705 +L342968145L +aL342968146L +aL342968147L +aL342968148L +aL342968149L +asg12 +(lp1706 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01003 +sS't' +F53270.134554999997 +ss(F309.38652000000002 +F0.32197700000000001 +F0.77512099999999995 +F0.75411499999999998 +I0 +tp1707 +(dp1708 +g4 +F0.32197700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.99275 +sS'm' +F22.964099999999998 +sg8 +F0.75411499999999998 +sg9 +F309.38652000000002 +sg10 +(lp1709 +L342830520L +aL342830521L +aL342830522L +aL342830523L +aL342830524L +asg12 +(lp1710 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77512099999999995 +sS't' +F53243.255790700001 +ss(F309.37829299999999 +F0.336785 +F0.92133900000000002 +F1.10015 +I0 +tp1711 +(dp1712 +g4 +F0.336785 +sg5 +I0 +sg6 +I0 +sg7 +F3.83853 +sS'm' +F24.2088 +sg8 +F1.10015 +sg9 +F309.37829299999999 +sg10 +(lp1713 +L345532216L +aL345532217L +aL345532218L +aL345532219L +aL345532220L +asg12 +(lp1714 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92133900000000002 +sS't' +F53677.099769200002 +ss(F309.382024 +F0.34297 +F0.85107100000000002 +F0.91306699999999996 +I0 +tp1715 +(dp1716 +g4 +F0.34297 +sg5 +I0 +sg6 +I0 +sg7 +F1.3744000000000001 +sS'm' +F22.493400000000001 +sg8 +F0.91306699999999996 +sg9 +F309.382024 +sg10 +(lp1717 +L343880250L +aL343880251L +aL343880252L +aL343880253L +aL343880254L +asg12 +(lp1718 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85107100000000002 +sS't' +F53626.144973299997 +ss(F309.365994 +F0.33172299999999999 +F0.92100400000000004 +F1.1000099999999999 +I0 +tp1719 +(dp1720 +g4 +F0.33172299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.14082 +sS'm' +F20.3384 +sg8 +F1.1000099999999999 +sg9 +F309.365994 +sg10 +(lp1721 +L345531846L +aL345531847L +aL345531848L +aL345531849L +aL345531850L +asg12 +(lp1722 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100400000000004 +sS't' +F53677.099735099997 +ss(F309.38276500000001 +F0.32572400000000001 +F0.47124100000000002 +F0.50351000000000001 +I0 +tp1723 +(dp1724 +g4 +F0.32572400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.7951700000000002 +sS'm' +F22.520600000000002 +sg8 +F0.50351000000000001 +sg9 +F309.38276500000001 +sg10 +(lp1725 +L12887259L +aL12887260L +aL12887261L +aL12887262L +aL12887263L +asg12 +(lp1726 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47124100000000002 +sS't' +F53649.118522600002 +ss(F309.36310099999997 +F0.331042 +F0.82801199999999997 +F0.94500899999999999 +I0 +tp1727 +(dp1728 +g4 +F0.331042 +sg5 +I0 +sg6 +I0 +sg7 +F0.0604342 +sS'm' +F18.8217 +sg8 +F0.94500899999999999 +sg9 +F309.36310099999997 +sg10 +(lp1729 +L343120274L +aL343120275L +aL343120276L +aL343120277L +aL343120278L +asg12 +(lp1730 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801199999999997 +sS't' +F53288.111729800003 +ss(F309.38068800000002 +F0.32855200000000001 +F0.74325600000000003 +F0.96151900000000001 +I0 +tp1731 +(dp1732 +g4 +F0.32855200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.67025599999999996 +sS'm' +F23.66 +sg8 +F0.96151900000000001 +sg9 +F309.38068800000002 +sg10 +(lp1733 +L344485578L +aL344485579L +aL344485580L +aL344485581L +asg12 +(lp1734 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74325600000000003 +sS't' +F53644.125526199998 +ss(F309.36520100000001 +F0.337362 +F0.74909499999999996 +F0.97805900000000001 +I0 +tp1735 +(dp1736 +g4 +F0.337362 +sg5 +I0 +sg6 +I0 +sg7 +F4.2743599999999997 +sS'm' +F24.4147 +sg8 +F0.97805900000000001 +sg9 +F309.36520100000001 +sg10 +(lp1737 +L171386200L +aL171386201L +aL171386202L +aL171386203L +aL171386204L +asg12 +(lp1738 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74909499999999996 +sS't' +F54005.107127199997 +ss(F309.382408 +F0.33027099999999998 +F1.0901000000000001 +F1.0701099999999999 +I0 +tp1739 +(dp1740 +g4 +F0.33027099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F6.1232899999999999 +sS'm' +F24.891300000000001 +sg8 +F1.0701099999999999 +sg9 +F309.382408 +sg10 +(lp1741 +L345684019L +aL345684020L +aL345684021L +aL345684022L +aL345684023L +asg12 +(lp1742 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0901000000000001 +sS't' +F53680.0864458 +ss(F309.38022799999999 +F0.34039700000000001 +F0.87065099999999995 +F0.93983300000000003 +I0 +tp1743 +(dp1744 +g4 +F0.34039700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.10097 +sS'm' +F22.2498 +sg8 +F0.93983300000000003 +sg9 +F309.38022799999999 +sg10 +(lp1745 +L343874325L +aL343874326L +aL343874327L +aL343874328L +asg12 +(lp1746 +I0 +aI2 +aI3 +aI4 +asg14 +F0.87065099999999995 +sS't' +F53626.144968400004 +ss(F309.36765600000001 +F0.34526400000000002 +F0.48358299999999999 +F0.45848899999999998 +I0 +tp1747 +(dp1748 +g4 +F0.34526400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.38942500000000002 +sS'm' +F22.517800000000001 +sg8 +F0.45848899999999998 +sg9 +F309.36765600000001 +sg10 +(lp1749 +L344876110L +aL344876111L +aL344876112L +aL344876113L +asg12 +(lp1750 +I1 +aI2 +aI3 +aI4 +asg14 +F0.48358299999999999 +sS't' +F53668.110641200001 +ss(F309.36312700000002 +F0.33104299999999998 +F0.85100299999999995 +F0.91300800000000004 +I0 +tp1751 +(dp1752 +g4 +F0.33104299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.071442800000000001 +sS'm' +F18.831700000000001 +sg8 +F0.91300800000000004 +sg9 +F309.36312700000002 +sg10 +(lp1753 +L343874050L +aL343874051L +aL343874052L +aL343874053L +aL343874054L +asg12 +(lp1754 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.144920899998 +ss(F309.36635000000001 +F0.34079399999999999 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp1755 +(dp1756 +g4 +F0.34079399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.057722099999999998 +sS'm' +F18.3642 +sg8 +F0.82900499999999999 +sg9 +F309.36635000000001 +sg10 +(lp1757 +L343271439L +aL343271440L +aL343271441L +aL343271442L +aL343271443L +asg12 +(lp1758 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.1074076 +ss(F309.377972 +F0.33787099999999998 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp1759 +(dp1760 +g4 +F0.33787099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.059186000000000002 +sS'm' +F18.387599999999999 +sg8 +F0.95301000000000002 +sg9 +F309.377972 +sg10 +(lp1761 +L343709467L +aL343709468L +aL343709469L +aL343709470L +aL343709471L +asg12 +(lp1762 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158750000002 +ss(F309.368111 +F0.34609299999999998 +F0.88526000000000005 +F1.1102099999999999 +I0 +tp1763 +(dp1764 +g4 +F0.34609299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.0289200000000001 +sS'm' +F24.0214 +sg8 +F1.1102099999999999 +sg9 +F309.368111 +sg10 +(lp1765 +L344151903L +aL344151904L +aL344151905L +aL344151906L +asg12 +(lp1766 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88526000000000005 +sS't' +F53635.139838399999 +ss(F309.37234899999999 +F0.324133 +F0.98418099999999997 +F0.98813600000000001 +I0 +tp1767 +(dp1768 +g4 +F0.324133 +sg5 +I0 +sg6 +I0 +sg7 +F2.51485 +sS'm' +F23.5548 +sg8 +F0.98813600000000001 +sg9 +F309.37234899999999 +sg10 +(lp1769 +L346463951L +aL346463952L +aL346463953L +aL346463954L +aL346463955L +asg12 +(lp1770 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98418099999999997 +sS't' +F54007.119896299999 +ss(F309.38087000000002 +F0.33924199999999999 +F0.94153600000000004 +F0.88907899999999995 +I0 +tp1771 +(dp1772 +g4 +F0.33924199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1080700000000001 +sS'm' +F22.618200000000002 +sg8 +F0.88907899999999995 +sg9 +F309.38087000000002 +sg10 +(lp1773 +L345024691L +aL345024692L +aL345024693L +aL345024694L +asg12 +(lp1774 +I0 +aI2 +aI3 +aI4 +asg14 +F0.94153600000000004 +sS't' +F53670.113873399998 +ss(F309.37432799999999 +F0.32658999999999999 +F0.98400799999999999 +F0.98800699999999997 +I0 +tp1775 +(dp1776 +g4 +F0.32658999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.2765599999999999 +sS'm' +F22.808 +sg8 +F0.98800699999999997 +sg9 +F309.37432799999999 +sg10 +(lp1777 +L346462032L +aL346462033L +aL346462034L +aL346462035L +aL346462036L +asg12 +(lp1778 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400799999999999 +sS't' +F54007.119901799997 +ss(F309.36634600000002 +F0.34083999999999998 +F0.61600999999999995 +F0.77501600000000004 +I0 +tp1779 +(dp1780 +g4 +F0.34083999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.0564266 +sS'm' +F18.343499999999999 +sg8 +F0.77501600000000004 +sg9 +F309.36634600000002 +sg10 +(lp1781 +L346166081L +aL346166082L +aL346166083L +aL346166084L +aL346166085L +asg12 +(lp1782 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61600999999999995 +sS't' +F53704.071635100001 +ss(F309.38831800000003 +F0.346277 +F0.75019999999999998 +F0.97914299999999999 +I0 +tp1783 +(dp1784 +g4 +F0.346277 +sg5 +I0 +sg6 +I0 +sg7 +F2.39317 +sS'm' +F25.126100000000001 +sg8 +F0.97914299999999999 +sg9 +F309.38831800000003 +sg10 +(lp1785 +L171378451L +aL171378452L +aL171378453L +asg12 +(lp1786 +I1 +aI3 +aI4 +asg14 +F0.75019999999999998 +sS't' +F54005.108849900003 +ss(F309.37771199999997 +F0.32561000000000001 +F0.88501700000000005 +F1.1100099999999999 +I0 +tp1787 +(dp1788 +g4 +F0.32561000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.1856200000000001 +sS'm' +F23.7789 +sg8 +F1.1100099999999999 +sg9 +F309.37771199999997 +sg10 +(lp1789 +L344148045L +aL344148046L +aL344148047L +aL344148048L +aL344148049L +asg12 +(lp1790 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88501700000000005 +sS't' +F53635.138206600001 +ss(F309.387494 +F0.33274300000000001 +F0.74114599999999997 +F0.96011100000000005 +I0 +tp1791 +(dp1792 +g4 +F0.33274300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F7.0183 +sS'm' +F24.9954 +sg8 +F0.96011100000000005 +sg9 +F309.387494 +sg10 +(lp1793 +L344481295L +aL344481296L +aL344481297L +aL344481298L +aL344481299L +asg12 +(lp1794 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74114599999999997 +sS't' +F53644.123886599999 +ss(F309.38366000000002 +F0.34500999999999998 +F1.0100100000000001 +F0.95301800000000003 +I0 +tp1795 +(dp1796 +g4 +F0.34500999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.44984099999999999 +sS'm' +F21.377099999999999 +sg8 +F0.95301800000000003 +sg9 +F309.38366000000002 +sg10 +(lp1797 +L343712253L +aL343712254L +aL343712255L +aL343712256L +aL343712257L +asg12 +(lp1798 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158765799999 +ss(F309.38888500000002 +F0.34375699999999998 +F1.05002 +F0.94402299999999995 +I0 +tp1799 +(dp1800 +g4 +F0.34375699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.047606299999999997 +sS'm' +F16.210000000000001 +sg8 +F0.94402299999999995 +sg9 +F309.38888500000002 +sg10 +(lp1801 +L346329458L +aL346329459L +aL346329460L +aL346329461L +aL346329462L +aL346329463L +aL346329464L +aL346329465L +aL346329466L +aL346329467L +asg12 +(lp1802 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159617199999 +ss(F309.37234899999999 +F0.32414500000000002 +F1.0101 +F0.99207199999999995 +I0 +tp1803 +(dp1804 +g4 +F0.32414500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.3132299999999999 +sS'm' +F23.6724 +sg8 +F0.99207199999999995 +sg9 +F309.37234899999999 +sg10 +(lp1805 +L342966760L +aL342966761L +aL342966762L +aL342966763L +aL342966764L +asg12 +(lp1806 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0101 +sS't' +F53270.134578099998 +ss(F309.38811099999998 +F0.338115 +F1.01007 +F0.99205900000000002 +I0 +tp1807 +(dp1808 +g4 +F0.338115 +sg5 +I0 +sg6 +I0 +sg7 +F2.03857 +sS'm' +F23.133800000000001 +sg8 +F0.99205900000000002 +sg9 +F309.38811099999998 +sg10 +(lp1809 +L342968371L +aL342968372L +aL342968373L +aL342968374L +aL342968375L +asg12 +(lp1810 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01007 +sS't' +F53270.134621899997 +ss(F309.38619299999999 +F0.33889599999999998 +F0.88505100000000003 +F1.11005 +I0 +tp1811 +(dp1812 +g4 +F0.33889599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.67211 +sS'm' +F23.475999999999999 +sg8 +F1.11005 +sg9 +F309.38619299999999 +sg10 +(lp1813 +L344152652L +aL344152653L +aL344152654L +aL344152655L +aL344152656L +asg12 +(lp1814 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88505100000000003 +sS't' +F53635.138230199998 +ss(F309.38649900000001 +F0.32196900000000001 +F0.82803199999999999 +F0.94502600000000003 +I0 +tp1815 +(dp1816 +g4 +F0.32196900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.78531600000000001 +sS'm' +F22.202999999999999 +sg8 +F0.94502600000000003 +sg9 +F309.38649900000001 +sg10 +(lp1817 +L343127838L +aL343127839L +aL343127840L +aL343127841L +aL343127842L +asg12 +(lp1818 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82803199999999999 +sS't' +F53288.111794800003 +ss(F309.37282199999999 +F0.33521200000000001 +F0.85100600000000004 +F0.91301299999999996 +I0 +tp1819 +(dp1820 +g4 +F0.33521200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.73920300000000005 +sS'm' +F21.813199999999998 +sg8 +F0.91301299999999996 +sg9 +F309.37282199999999 +sg10 +(lp1821 +L343876193L +aL343876194L +aL343876195L +aL343876196L +aL343876197L +asg12 +(lp1822 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100600000000004 +sS't' +F53626.144947799999 +ss(F309.38933400000002 +F0.32219399999999998 +F0.61623300000000003 +F0.77520599999999995 +I0 +tp1823 +(dp1824 +g4 +F0.32219399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.31346499999999999 +sS'm' +F22.305700000000002 +sg8 +F0.77520599999999995 +sg9 +F309.38933400000002 +sg10 +(lp1825 +L346172275L +aL346172276L +aL346172277L +aL346172278L +asg12 +(lp1826 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61623300000000003 +sS't' +F53704.073357399997 +ss(F309.369259 +F0.31898199999999999 +F0.41306799999999999 +F0.41207899999999997 +I0 +tp1827 +(dp1828 +g4 +F0.31898199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.47558299999999998 +sS'm' +F21.2135 +sg8 +F0.41207899999999997 +sg9 +F309.369259 +sg10 +(lp1829 +L346000476L +aL346000477L +aL346000478L +aL346000479L +aL346000480L +asg12 +(lp1830 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41306799999999999 +sS't' +F53703.093096099998 +ss(F309.36239499999999 +F0.31965500000000002 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp1831 +(dp1832 +g4 +F0.31965500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.91103800000000001 +sS'm' +F22.636099999999999 +sg8 +F1.0100100000000001 +sg9 +F309.36239499999999 +sg10 +(lp1833 +L345366028L +aL345366029L +aL345366030L +aL345366031L +aL345366032L +asg12 +(lp1834 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078692399999 +ss(F309.37769600000001 +F0.34564400000000001 +F0.74912199999999995 +F0.97809500000000005 +I0 +tp1835 +(dp1836 +g4 +F0.34564400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.9535799999999997 +sS'm' +F24.5731 +sg8 +F0.97809500000000005 +sg9 +F309.37769600000001 +sg10 +(lp1837 +L171386384L +aL171386385L +aL171386386L +aL171386387L +aL171386388L +asg12 +(lp1838 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74912199999999995 +sS't' +F54005.107161899999 +ss(F309.36809199999999 +F0.34601399999999999 +F0.852105 +F0.91350600000000004 +I0 +tp1839 +(dp1840 +g4 +F0.34601399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.2967300000000002 +sS'm' +F23.456700000000001 +sg8 +F0.91350600000000004 +sg9 +F309.36809199999999 +sg10 +(lp1841 +L343881905L +aL343881906L +aL343881907L +aL343881908L +aL343881909L +asg12 +(lp1842 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.852105 +sS't' +F53626.144934600001 +ss(F309.37769600000001 +F0.34564400000000001 +F0.74911000000000005 +F0.97807999999999995 +I0 +tp1843 +(dp1844 +g4 +F0.34564400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.9603099999999998 +sS'm' +F24.5745 +sg8 +F0.97807999999999995 +sg9 +F309.37769600000001 +sg10 +(lp1845 +L171386379L +aL171386380L +aL171386381L +aL171386382L +aL171386383L +asg12 +(lp1846 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74911000000000005 +sS't' +F54005.107161899999 +ss(F309.36925500000001 +F0.31896999999999998 +F0.88500599999999996 +F1.1100099999999999 +I0 +tp1847 +(dp1848 +g4 +F0.31896999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.28172999999999998 +sS'm' +F21.433800000000002 +sg8 +F1.1100099999999999 +sg9 +F309.36925500000001 +sg10 +(lp1849 +L344147853L +aL344147854L +aL344147855L +aL344147856L +aL344147857L +asg12 +(lp1850 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500599999999996 +sS't' +F53635.138183100004 +ss(F309.3827 +F0.33516400000000002 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp1851 +(dp1852 +g4 +F0.33516400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.071620900000000001 +sS'm' +F19.406500000000001 +sg8 +F1.1100000000000001 +sg9 +F309.3827 +sg10 +(lp1853 +L344144539L +aL344144540L +aL344144541L +aL344144542L +aL344144543L +asg12 +(lp1854 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138220499997 +ss(F309.36778299999997 +F0.33358300000000002 +F0.92126600000000003 +F1.10019 +I0 +tp1855 +(dp1856 +g4 +F0.33358300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.30244 +sS'm' +F24.467400000000001 +sg8 +F1.10019 +sg9 +F309.36778299999997 +sg10 +(lp1857 +L345541959L +aL345541960L +aL345541961L +aL345541962L +asg12 +(lp1858 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92126600000000003 +sS't' +F53677.101398500003 +ss(F309.36914200000001 +F0.34576800000000002 +F0.25182900000000003 +F0.34961900000000001 +I0 +tp1859 +(dp1860 +g4 +F0.34576800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.3137799999999999 +sS'm' +F22.411000000000001 +sg8 +F0.34961900000000001 +sg9 +F309.36914200000001 +sg10 +(lp1861 +L327906516L +aL327906517L +aL327906518L +aL327906519L +aL327906520L +asg12 +(lp1862 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.25182900000000003 +sS't' +F53312.062923899997 +ss(F309.377679 +F0.34561399999999998 +F0.82820099999999996 +F0.94528299999999998 +I0 +tp1863 +(dp1864 +g4 +F0.34561399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F5.2368100000000002 +sS'm' +F24.284800000000001 +sg8 +F0.94528299999999998 +sg9 +F309.377679 +sg10 +(lp1865 +L343127734L +aL343127735L +aL343127736L +aL343127737L +aL343127738L +aL343127739L +aL343127740L +aL343127741L +aL343127742L +aL343127743L +asg12 +(lp1866 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82820099999999996 +sS't' +F53288.111770299998 +ss(F309.36633599999999 +F0.34081800000000001 +F0.98400500000000002 +F0.98800399999999999 +I0 +tp1867 +(dp1868 +g4 +F0.34081800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.0585858 +sS'm' +F18.374199999999998 +sg8 +F0.98800399999999999 +sg9 +F309.36633599999999 +sg10 +(lp1869 +L346459283L +aL346459284L +aL346459285L +aL346459286L +aL346459287L +asg12 +(lp1870 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.119879600003 +ss(F309.36978800000003 +F0.344667 +F0.413908 +F0.41334900000000002 +I0 +tp1871 +(dp1872 +g4 +F0.344667 +sg5 +I0 +sg6 +I0 +sg7 +F3.1318899999999998 +sS'm' +F23.720099999999999 +sg8 +F0.41334900000000002 +sg9 +F309.36978800000003 +sg10 +(lp1873 +L346002779L +aL346002780L +aL346002781L +aL346002782L +asg12 +(lp1874 +I1 +aI2 +aI3 +aI4 +asg14 +F0.413908 +sS't' +F53703.094755999999 +ss(F309.37280099999998 +F0.33523500000000001 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp1875 +(dp1876 +g4 +F0.33523500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.48005199999999998 +sS'm' +F22.063099999999999 +sg8 +F1.1100000000000001 +sg9 +F309.37280099999998 +sg10 +(lp1877 +L344147933L +aL344147934L +aL344147935L +aL344147936L +aL344147937L +asg12 +(lp1878 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138192999999 +ss(F309.37574499999999 +F0.34617799999999999 +F1.0901000000000001 +F1.0701099999999999 +I0 +tp1879 +(dp1880 +g4 +F0.34617799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.93696100000000004 +sS'm' +F22.8139 +sg8 +F1.0701099999999999 +sg9 +F309.37574499999999 +sg10 +(lp1881 +L345683869L +aL345683870L +aL345683871L +aL345683872L +aL345683873L +asg12 +(lp1882 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0901000000000001 +sS't' +F53680.086427299997 +ss(F309.38752599999998 +F0.33267099999999999 +F0.93358699999999994 +F0.878996 +I0 +tp1883 +(dp1884 +g4 +F0.33267099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.78158799999999995 +sS'm' +F23.4739 +sg8 +F0.878996 +sg9 +F309.38752599999998 +sg10 +(lp1885 +L345028392L +aL345028393L +aL345028394L +aL345028395L +asg12 +(lp1886 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93358699999999994 +sS't' +F53670.115550299997 +ss(F309.37770799999998 +F0.34562900000000002 +F0.85124 +F0.91324899999999998 +I0 +tp1887 +(dp1888 +g4 +F0.34562900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.2141199999999999 +sS'm' +F23.017499999999998 +sg8 +F0.91324899999999998 +sg9 +F309.37770799999998 +sg10 +(lp1889 +L343882083L +aL343882084L +aL343882085L +aL343882086L +aL343882087L +asg12 +(lp1890 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85124 +sS't' +F53626.144961400001 +ss(F309.36915399999998 +F0.34573100000000001 +F0.74110200000000004 +F0.96008400000000005 +I0 +tp1891 +(dp1892 +g4 +F0.34573100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.4297300000000002 +sS'm' +F24.2059 +sg8 +F0.96008400000000005 +sg9 +F309.36915399999998 +sg10 +(lp1893 +L344482788L +aL344482789L +aL344482790L +aL344482791L +aL344482792L +asg12 +(lp1894 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74110200000000004 +sS't' +F53644.123835699997 +ss(F309.37793799999997 +F0.33787 +F0.41302499999999998 +F0.41203400000000001 +I0 +tp1895 +(dp1896 +g4 +F0.33787 +sg5 +I0 +sg6 +I0 +sg7 +F0.061673499999999999 +sS'm' +F18.4603 +sg8 +F0.41203400000000001 +sg9 +F309.37793799999997 +sg10 +(lp1897 +L345996122L +aL345996123L +aL345996124L +aL345996125L +aL345996126L +asg12 +(lp1898 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41302499999999998 +sS't' +F53703.093120199999 +ss(F309.38889699999999 +F0.34374300000000002 +F0.921014 +F1.1000300000000001 +I0 +tp1899 +(dp1900 +g4 +F0.34374300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.045000400000000003 +sS'm' +F16.1768 +sg8 +F1.1000300000000001 +sg9 +F309.38889699999999 +sg10 +(lp1901 +L345532477L +aL345532478L +aL345532479L +aL345532480L +aL345532481L +asg12 +(lp1902 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.921014 +sS't' +F53677.099798700001 +ss(F309.372816 +F0.33524100000000001 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp1903 +(dp1904 +g4 +F0.33524100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.75976699999999997 +sS'm' +F22.424299999999999 +sg8 +F1.0100100000000001 +sg9 +F309.372816 +sg10 +(lp1905 +L345366227L +aL345366228L +aL345366229L +aL345366230L +aL345366231L +asg12 +(lp1906 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.0787213 +ss(F309.37854700000003 +F0.33688800000000002 +F0.79161400000000004 +F0.82936299999999996 +I0 +tp1907 +(dp1908 +g4 +F0.33688800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.97557 +sS'm' +F22.773299999999999 +sg8 +F0.82936299999999996 +sg9 +F309.37854700000003 +sg10 +(lp1909 +L343271567L +aL343271568L +aL343271569L +aL343271570L +aL343271571L +asg12 +(lp1910 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.79161400000000004 +sS't' +F53302.107441499997 +ss(F309.37280199999998 +F0.33521800000000002 +F0.93300700000000003 +F0.87800900000000004 +I0 +tp1911 +(dp1912 +g4 +F0.33521800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.681087 +sS'm' +F22.073599999999999 +sg8 +F0.87800900000000004 +sg9 +F309.37280199999998 +sg10 +(lp1913 +L345027194L +aL345027195L +aL345027196L +aL345027197L +aL345027198L +asg12 +(lp1914 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.113851000002 +ss(F309.37769500000002 +F0.34564600000000001 +F0.48071700000000001 +F0.45954899999999999 +I0 +tp1915 +(dp1916 +g4 +F0.34564600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.493925 +sS'm' +F22.7818 +sg8 +F0.45954899999999999 +sg9 +F309.37769500000002 +sg10 +(lp1917 +L344877865L +aL344877866L +aL344877867L +aL344877868L +asg12 +(lp1918 +I1 +aI2 +aI3 +aI4 +asg14 +F0.48071700000000001 +sS't' +F53668.110669100002 +ss(F309.38530400000002 +F0.33195200000000002 +F0.98404499999999995 +F0.98802699999999999 +I0 +tp1919 +(dp1920 +g4 +F0.33195200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.5853600000000001 +sS'm' +F23.037700000000001 +sg8 +F0.98802699999999999 +sg9 +F309.38530400000002 +sg10 +(lp1921 +L346463353L +aL346463354L +aL346463355L +aL346463356L +aL346463357L +aL346463358L +aL346463359L +aL346463360L +aL346463361L +aL346463362L +asg12 +(lp1922 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98404499999999995 +sS't' +F54007.119932299996 +ss(F309.37307199999998 +F0.32442599999999999 +F0.82808599999999999 +F0.94505700000000004 +I0 +tp1923 +(dp1924 +g4 +F0.32442599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.2172000000000001 +sS'm' +F23.347799999999999 +sg8 +F0.94505700000000004 +sg9 +F309.37307199999998 +sg10 +(lp1925 +L343127636L +aL343127637L +aL343127638L +aL343127639L +aL343127640L +asg12 +(lp1926 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82808599999999999 +sS't' +F53288.111757500003 +ss(F309.38799 +F0.34225899999999998 +F0.50634999999999997 +F0.45969399999999999 +I0 +tp1927 +(dp1928 +g4 +F0.34225899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F6.0632099999999998 +sS'm' +F19.6861 +sg8 +F0.45969399999999999 +sg9 +F309.38799 +sg10 +(lp1929 +L153248910L +aL153248911L +asg12 +(lp1930 +I3 +aI4 +asg14 +F0.50634999999999997 +sS't' +F53702.083185199997 +ss(F309.36746599999998 +F0.32933099999999998 +F0.47640700000000002 +F0.45458500000000002 +I0 +tp1931 +(dp1932 +g4 +F0.32933099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.57395200000000002 +sS'm' +F22.953900000000001 +sg8 +F0.45458500000000002 +sg9 +F309.36746599999998 +sg10 +(lp1933 +L344877807L +aL344877808L +aL344877809L +aL344877810L +asg12 +(lp1934 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47640700000000002 +sS't' +F53668.110640699997 +ss(F309.38795900000002 +F0.34221400000000002 +F0.92100800000000005 +F1.1000099999999999 +I0 +tp1935 +(dp1936 +g4 +F0.34221400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.486259 +sS'm' +F21.896899999999999 +sg8 +F1.1000099999999999 +sg9 +F309.38795900000002 +sg10 +(lp1937 +L345532487L +aL345532488L +aL345532489L +aL345532490L +aL345532491L +asg12 +(lp1938 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100800000000005 +sS't' +F53677.099796100003 +ss(F309.38650899999999 +F0.33955800000000003 +F0.74940799999999996 +F0.97851299999999997 +I0 +tp1939 +(dp1940 +g4 +F0.33955800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.52595700000000001 +sS'm' +F23.3948 +sg8 +F0.97851299999999997 +sg9 +F309.38650899999999 +sg10 +(lp1941 +L171381673L +aL171381674L +aL171381675L +aL171381676L +asg12 +(lp1942 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74940799999999996 +sS't' +F54005.108844800001 +ss(F309.37096400000001 +F0.33042300000000002 +F0.88525299999999996 +F1.1101300000000001 +I0 +tp1943 +(dp1944 +g4 +F0.33042300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.5309999999999999 +sS'm' +F23.384499999999999 +sg8 +F1.1101300000000001 +sg9 +F309.37096400000001 +sg10 +(lp1945 +L344153103L +aL344153104L +aL344153105L +aL344153106L +aL344153107L +asg12 +(lp1946 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88525299999999996 +sS't' +F53635.138187899996 +ss(F309.36143399999997 +F0.31858599999999998 +F0.61637799999999998 +F0.77540799999999999 +I0 +tp1947 +(dp1948 +g4 +F0.31858599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F6.2797900000000002 +sS'm' +F22.735099999999999 +sg8 +F0.77540799999999999 +sg9 +F309.36143399999997 +sg10 +(lp1949 +L346168084L +aL346168085L +aL346168086L +aL346168087L +aL346168088L +asg12 +(lp1950 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61637799999999998 +sS't' +F53704.071621399999 +ss(F309.37897600000002 +F0.327075 +F0.50614700000000001 +F0.45923000000000003 +I0 +tp1951 +(dp1952 +g4 +F0.327075 +sg5 +I0 +sg6 +I0 +sg7 +F0.78065799999999996 +sS'm' +F21.544699999999999 +sg8 +F0.45923000000000003 +sg9 +F309.37897600000002 +sg10 +(lp1953 +L153252793L +aL153252794L +aL153252795L +aL153252796L +aL153252797L +asg12 +(lp1954 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50614700000000001 +sS't' +F53702.083989500003 +ss(F309.386503 +F0.321961 +F0.85104800000000003 +F0.91305199999999997 +I0 +tp1955 +(dp1956 +g4 +F0.321961 +sg5 +I0 +sg6 +I0 +sg7 +F1.3300000000000001 +sS'm' +F22.461400000000001 +sg8 +F0.91305199999999997 +sg9 +F309.386503 +sg10 +(lp1957 +L343880295L +aL343880296L +aL343880297L +aL343880298L +aL343880299L +asg12 +(lp1958 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85104800000000003 +sS't' +F53626.144985799998 +ss(F309.36767300000002 +F0.32825100000000001 +F1.0841499999999999 +F1.01349 +I0 +tp1959 +(dp1960 +g4 +F0.32825100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F5.0094200000000004 +sS'm' +F24.5122 +sg8 +F1.01349 +sg9 +F309.36767300000002 +sg10 +(lp1961 +L345370113L +aL345370114L +aL345370115L +aL345370116L +asg12 +(lp1962 +I0 +aI2 +aI3 +aI4 +asg14 +F1.0841499999999999 +sS't' +F53675.078707000001 +ss(F309.35981500000003 +F0.325075 +F0.77504799999999996 +F0.75405900000000003 +I0 +tp1963 +(dp1964 +g4 +F0.325075 +sg5 +I0 +sg6 +I0 +sg7 +F0.15978100000000001 +sS'm' +F20.517900000000001 +sg8 +F0.75405900000000003 +sg9 +F309.35981500000003 +sg10 +(lp1965 +L342828720L +aL342828721L +aL342828722L +aL342828723L +aL342828724L +aL342828725L +aL342828726L +aL342828727L +asg12 +(lp1966 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77504799999999996 +sS't' +F53243.257375000001 +ss(F309.377973 +F0.33785799999999999 +F0.98400500000000002 +F0.98800500000000002 +I0 +tp1967 +(dp1968 +g4 +F0.33785799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.058762500000000002 +sS'm' +F18.3779 +sg8 +F0.98800500000000002 +sg9 +F309.377973 +sg10 +(lp1969 +L346459448L +aL346459449L +aL346459450L +aL346459451L +aL346459452L +asg12 +(lp1970 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.119911900001 +ss(F309.37473499999999 +F0.33168300000000001 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp1971 +(dp1972 +g4 +F0.33168300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.044670700000000001 +sS'm' +F15.933400000000001 +sg8 +F1.1000099999999999 +sg9 +F309.37473499999999 +sg10 +(lp1973 +L345532054L +aL345532055L +aL345532056L +aL345532057L +aL345532058L +asg12 +(lp1974 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.0997594 +ss(F309.38649400000003 +F0.32197700000000001 +F0.24840499999999999 +F0.34826200000000002 +I0 +tp1975 +(dp1976 +g4 +F0.32197700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.68794299999999997 +sS'm' +F21.706800000000001 +sg8 +F0.34826200000000002 +sg9 +F309.38649400000003 +sg10 +(lp1977 +L327906703L +aL327906704L +aL327906705L +aL327906706L +aL327906707L +asg12 +(lp1978 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24840499999999999 +sS't' +F53312.0629721 +ss(F309.36401799999999 +F0.31756099999999998 +F0.77527900000000005 +F0.75417800000000002 +I0 +tp1979 +(dp1980 +g4 +F0.31756099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F6.31081 +sS'm' +F23.782399999999999 +sg8 +F0.75417800000000002 +sg9 +F309.36401799999999 +sg10 +(lp1981 +L342830336L +aL342830337L +aL342830338L +aL342830339L +aL342830340L +asg12 +(lp1982 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77527900000000005 +sS't' +F53243.255728199998 +ss(F309.38261899999998 +F0.33968399999999999 +F1.0500100000000001 +F0.94401299999999999 +I0 +tp1983 +(dp1984 +g4 +F0.33968399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.069094900000000001 +sS'm' +F18.738600000000002 +sg8 +F0.94401299999999999 +sg9 +F309.38261899999998 +sg10 +(lp1985 +L346329324L +aL346329325L +aL346329326L +aL346329327L +aL346329328L +asg12 +(lp1986 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159599799998 +ss(F309.38890800000001 +F0.34375499999999998 +F0.50605100000000003 +F0.45914199999999999 +I0 +tp1987 +(dp1988 +g4 +F0.34375499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.039832899999999997 +sS'm' +F16.206399999999999 +sg8 +F0.45914199999999999 +sg9 +F309.38890800000001 +sg10 +(lp1989 +L153248890L +aL153248891L +aL153248892L +aL153248893L +aL153248894L +asg12 +(lp1990 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50605100000000003 +sS't' +F53702.084017100002 +ss(F309.37773800000002 +F0.32561000000000001 +F0.98402299999999998 +F0.98802400000000001 +I0 +tp1991 +(dp1992 +g4 +F0.32561000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.01064 +sS'm' +F23.307700000000001 +sg8 +F0.98802400000000001 +sg9 +F309.37773800000002 +sg10 +(lp1993 +L346463961L +aL346463962L +aL346463963L +aL346463964L +aL346463965L +asg12 +(lp1994 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98402299999999998 +sS't' +F54007.119911299997 +ss(F309.38066900000001 +F0.328592 +F0.83043599999999995 +F0.94678200000000001 +I0 +tp1995 +(dp1996 +g4 +F0.328592 +sg5 +I0 +sg6 +I0 +sg7 +F0.89734700000000001 +sS'm' +F23.669699999999999 +sg8 +F0.94678200000000001 +sg9 +F309.38066900000001 +sg10 +(lp1997 +L343130166L +aL343130167L +aL343130168L +aL343130169L +asg12 +(lp1998 +I1 +aI2 +aI3 +aI4 +asg14 +F0.83043599999999995 +sS't' +F53288.113437100001 +ss(F309.36240600000002 +F0.319635 +F0.98401400000000006 +F0.988012 +I0 +tp1999 +(dp2000 +g4 +F0.319635 +sg5 +I0 +sg6 +I0 +sg7 +F0.80774400000000002 +sS'm' +F22.310500000000001 +sg8 +F0.988012 +sg9 +F309.36240600000002 +sg10 +(lp2001 +L346461751L +aL346461752L +aL346461753L +aL346461754L +aL346461755L +asg12 +(lp2002 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98401400000000006 +sS't' +F54007.1198687 +ss(F309.38066700000002 +F0.32853300000000002 +F0.92112400000000005 +F1.10012 +I0 +tp2003 +(dp2004 +g4 +F0.32853300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.436058 +sS'm' +F23.254000000000001 +sg8 +F1.10012 +sg9 +F309.38066700000002 +sg10 +(lp2005 +L345539745L +aL345539746L +aL345539747L +aL345539748L +asg12 +(lp2006 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92112400000000005 +sS't' +F53677.101434299999 +ss(F309.382182 +F0.32172099999999998 +F0.77900700000000001 +F0.82900799999999997 +I0 +tp2007 +(dp2008 +g4 +F0.32172099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.280082 +sS'm' +F20.599799999999998 +sg8 +F0.82900799999999997 +sg9 +F309.382182 +sg10 +(lp2009 +L343273456L +aL343273457L +aL343273458L +aL343273459L +aL343273460L +asg12 +(lp2010 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900700000000001 +sS't' +F53302.107451600001 +ss(F309.38889599999999 +F0.34376600000000002 +F0.56510300000000002 +F0.51406799999999997 +I0 +tp2011 +(dp2012 +g4 +F0.34376600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.043076299999999998 +sS'm' +F16.2134 +sg8 +F0.51406799999999997 +sg9 +F309.38889599999999 +sg10 +(lp2013 +L344709048L +aL344709049L +aL344709050L +aL344709051L +aL344709052L +asg12 +(lp2014 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.56510300000000002 +sS't' +F53654.158539999997 +ss(F309.38896799999998 +F0.34517399999999998 +F0.741008 +F0.96000799999999997 +I0 +tp2015 +(dp2016 +g4 +F0.34517399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.18415999999999999 +sS'm' +F20.725899999999999 +sg8 +F0.96000799999999997 +sg9 +F309.38896799999998 +sg10 +(lp2017 +L344476113L +aL344476114L +aL344476115L +aL344476116L +aL344476117L +asg12 +(lp2018 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.741008 +sS't' +F53644.123890700001 +ss(F309.38066199999997 +F0.32856099999999999 +F1.09009 +F1.0701099999999999 +I0 +tp2019 +(dp2020 +g4 +F0.32856099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.7499800000000001 +sS'm' +F23.516500000000001 +sg8 +F1.0701099999999999 +sg9 +F309.38066199999997 +sg10 +(lp2021 +L345683963L +aL345683964L +aL345683965L +aL345683966L +aL345683967L +asg12 +(lp2022 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09009 +sS't' +F53680.086440899999 +ss(F309.37310200000002 +F0.32444499999999998 +F0.57303199999999999 +F0.51803500000000002 +I0 +tp2023 +(dp2024 +g4 +F0.32444499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.83555 +sS'm' +F22.561900000000001 +sg8 +F0.51803500000000002 +sg9 +F309.37310200000002 +sg10 +(lp2025 +L344712877L +aL344712878L +aL344712879L +aL344712880L +aL344712881L +asg12 +(lp2026 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.57303199999999999 +sS't' +F53654.158496199998 +ss(F309.37239899999997 +F0.32417400000000002 +F0.476937 +F0.45431199999999999 +I0 +tp2027 +(dp2028 +g4 +F0.32417400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.36208899999999999 +sS'm' +F22.439 +sg8 +F0.45431199999999999 +sg9 +F309.37239899999997 +sg10 +(lp2029 +L344876156L +aL344876157L +aL344876158L +aL344876159L +asg12 +(lp2030 +I1 +aI2 +aI3 +aI4 +asg14 +F0.476937 +sS't' +F53668.110654399999 +ss(F309.38651099999998 +F0.32194 +F0.47051700000000002 +F0.50371999999999995 +I0 +tp2031 +(dp2032 +g4 +F0.32194 +sg5 +I0 +sg6 +I0 +sg7 +F0.744815 +sS'm' +F20.728899999999999 +sg8 +F0.50371999999999995 +sg9 +F309.38651099999998 +sg10 +(lp2033 +L12887293L +aL12887294L +aL12887295L +aL12887296L +aL12887297L +asg12 +(lp2034 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47051700000000002 +sS't' +F53649.118533000001 +ss(F309.36600199999998 +F0.33175100000000002 +F0.61601300000000003 +F0.77501799999999998 +I0 +tp2035 +(dp2036 +g4 +F0.33175100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.21438399999999999 +sS'm' +F20.410900000000002 +sg8 +F0.77501799999999998 +sg9 +F309.36600199999998 +sg10 +(lp2037 +L346166047L +aL346166048L +aL346166049L +aL346166050L +aL346166051L +asg12 +(lp2038 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601300000000003 +sS't' +F53704.071634100001 +ss(F309.37431199999997 +F0.32658900000000002 +F0.88500500000000004 +F1.1100099999999999 +I0 +tp2039 +(dp2040 +g4 +F0.32658900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.3122499999999999 +sS'm' +F23.213799999999999 +sg8 +F1.1100099999999999 +sg9 +F309.37431199999997 +sg10 +(lp2041 +L344147977L +aL344147978L +aL344147979L +aL344147980L +aL344147981L +aL344147982L +aL344147983L +aL344147984L +aL344147985L +aL344147986L +asg12 +(lp2042 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500500000000004 +sS't' +F53635.138197200002 +ss(F309.36744700000003 +F0.329399 +F0.64926399999999995 +F0.539273 +I0 +tp2043 +(dp2044 +g4 +F0.329399 +sg5 +I0 +sg6 +I0 +sg7 +F3.1345200000000002 +sS'm' +F22.963200000000001 +sg8 +F0.539273 +sg9 +F309.36744700000003 +sg10 +(lp2045 +L112300690L +aL112300691L +aL112300692L +aL112300693L +aL112300694L +asg12 +(lp2046 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64926399999999995 +sS't' +F53656.1060717 +ss(F309.36312299999997 +F0.33105400000000001 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp2047 +(dp2048 +g4 +F0.33105400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.061750800000000002 +sS'm' +F18.774999999999999 +sg8 +F1.0100100000000001 +sg9 +F309.36312299999997 +sg10 +(lp2049 +L345363420L +aL345363421L +aL345363422L +aL345363423L +aL345363424L +asg12 +(lp2050 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078694399999 +ss(F309.374594 +F0.31691000000000003 +F1.05124 +F0.94445599999999996 +I0 +tp2051 +(dp2052 +g4 +F0.31691000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F3.5804900000000002 +sS'm' +F23.852900000000002 +sg8 +F0.94445599999999996 +sg9 +F309.374594 +sg10 +(lp2053 +L346337867L +aL346337868L +aL346337869L +aL346337870L +aL346337871L +asg12 +(lp2054 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05124 +sS't' +F53974.159577500002 +ss(F309.373062 +F0.324403 +F0.47871900000000001 +F0.51215699999999997 +I0 +tp2055 +(dp2056 +g4 +F0.324403 +sg5 +I0 +sg6 +I0 +sg7 +F0.71268600000000004 +sS'm' +F21.691500000000001 +sg8 +F0.51215699999999997 +sg9 +F309.373062 +sg10 +(lp2057 +L12888245L +aL12888246L +aL12888247L +aL12888248L +asg12 +(lp2058 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47871900000000001 +sS't' +F53649.120154099997 +ss(F309.38008600000001 +F0.342144 +F0.77501699999999996 +F0.75403100000000001 +I0 +tp2059 +(dp2060 +g4 +F0.342144 +sg5 +I0 +sg6 +I0 +sg7 +F0.0375915 +sS'm' +F16.727 +sg8 +F0.75403100000000001 +sg9 +F309.38008600000001 +sg10 +(lp2061 +L342827460L +aL342827456L +aL342827457L +aL342827458L +aL342827459L +asg12 +(lp2062 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.77501699999999996 +sS't' +F53243.256602100002 +ss(F309.38528400000001 +F0.33194800000000002 +F0.47232099999999999 +F0.50435600000000003 +I0 +tp2063 +(dp2064 +g4 +F0.33194800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.2229599999999996 +sS'm' +F22.636299999999999 +sg8 +F0.50435600000000003 +sg9 +F309.38528400000001 +sg10 +(lp2065 +L12887279L +aL12887280L +aL12887281L +aL12887282L +aL12887283L +asg12 +(lp2066 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47232099999999999 +sS't' +F53649.118529599997 +ss(F309.37306599999999 +F0.32444400000000001 +F1.09002 +F1.07002 +I0 +tp2067 +(dp2068 +g4 +F0.32444400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.4887199999999998 +sS'm' +F24.552600000000002 +sg8 +F1.07002 +sg9 +F309.37306599999999 +sg10 +(lp2069 +L345681157L +aL345681158L +aL345681159L +aL345681160L +aL345681161L +asg12 +(lp2070 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09002 +sS't' +F53680.086419799998 +ss(F309.388893 +F0.34377999999999997 +F1.08002 +F1.0100199999999999 +I0 +tp2071 +(dp2072 +g4 +F0.34377999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.043400899999999999 +sS'm' +F16.148599999999998 +sg8 +F1.0100199999999999 +sg9 +F309.388893 +sg10 +(lp2073 +L345363928L +aL345363929L +aL345363930L +aL345363931L +aL345363932L +aL345363933L +aL345363934L +aL345363935L +aL345363936L +aL345363937L +asg12 +(lp2074 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08002 +sS't' +F53675.078765999999 +ss(F309.38565699999998 +F0.32638400000000001 +F1.0100800000000001 +F0.99207199999999995 +I0 +tp2075 +(dp2076 +g4 +F0.32638400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.23392299999999999 +sS'm' +F21.8172 +sg8 +F0.99207199999999995 +sg9 +F309.38565699999998 +sg10 +(lp2077 +L342968326L +aL342968327L +aL342968328L +aL342968329L +asg12 +(lp2078 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0100800000000001 +sS't' +F53270.1362735 +ss(F309.38808399999999 +F0.33808899999999997 +F0.88503399999999999 +F1.1100300000000001 +I0 +tp2079 +(dp2080 +g4 +F0.33808899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.22303700000000001 +sS'm' +F22.3004 +sg8 +F1.1100300000000001 +sg9 +F309.38808399999999 +sg10 +(lp2081 +L344153303L +aL344153306L +aL344153304L +aL344153305L +asg12 +(lp2082 +I1 +aI4 +aI2 +aI3 +asg14 +F0.88503399999999999 +sS't' +F53635.139893899999 +ss(F309.37235299999998 +F0.32411899999999999 +F1.05009 +F0.94406800000000002 +I0 +tp2083 +(dp2084 +g4 +F0.32411899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.6426700000000001 +sS'm' +F22.995100000000001 +sg8 +F0.94406800000000002 +sg9 +F309.37235299999998 +sg10 +(lp2085 +L346336367L +aL346336368L +aL346336369L +aL346336370L +aL346336371L +asg12 +(lp2086 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05009 +sS't' +F53974.159571299999 +ss(F309.36239999999998 +F0.319633 +F0.77903 +F0.82902299999999995 +I0 +tp2087 +(dp2088 +g4 +F0.319633 +sg5 +I0 +sg6 +I0 +sg7 +F1.71018 +sS'm' +F22.6158 +sg8 +F0.82902299999999995 +sg9 +F309.36239999999998 +sg10 +(lp2089 +L343277119L +aL343277120L +aL343277121L +aL343277122L +aL343277123L +aL343277124L +aL343277125L +aL343277126L +aL343277127L +aL343277128L +asg12 +(lp2090 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77903 +sS't' +F53302.107396599997 +ss(F309.36771900000002 +F0.33363999999999999 +F0.93545199999999995 +F0.88149500000000003 +I0 +tp2091 +(dp2092 +g4 +F0.33363999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.27989 +sS'm' +F24.0701 +sg8 +F0.88149500000000003 +sg9 +F309.36771900000002 +sg10 +(lp2093 +L345032121L +aL345032122L +aL345032123L +aL345032124L +asg12 +(lp2094 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93545199999999995 +sS't' +F53670.1154953 +ss(F309.36634099999998 +F0.34080700000000003 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp2095 +(dp2096 +g4 +F0.34080700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.056190799999999999 +sS'm' +F18.329599999999999 +sg8 +F1.1000099999999999 +sg9 +F309.36634099999998 +sg10 +(lp2097 +L345531919L +aL345531920L +aL345531921L +aL345531922L +aL345531923L +asg12 +(lp2098 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099735999996 +ss(F309.38365399999998 +F0.34499200000000002 +F0.77507499999999996 +F0.75407900000000005 +I0 +tp2099 +(dp2100 +g4 +F0.34499200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.05599 +sS'm' +F21.303799999999999 +sg8 +F0.75407900000000005 +sg9 +F309.38365399999998 +sg10 +(lp2101 +L342830461L +aL342830462L +aL342830463L +aL342830464L +aL342830465L +asg12 +(lp2102 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77507499999999996 +sS't' +F53243.255782799999 +ss(F309.38897100000003 +F0.34520200000000001 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp2103 +(dp2104 +g4 +F0.34520200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.19924800000000001 +sS'm' +F20.7392 +sg8 +F1.0100100000000001 +sg9 +F309.38897100000003 +sg10 +(lp2105 +L345363938L +aL345363939L +aL345363940L +aL345363941L +aL345363942L +asg12 +(lp2106 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.0787662 +ss(F309.38711599999999 +F0.319303 +F0.74930099999999999 +F0.97811199999999998 +I0 +tp2107 +(dp2108 +g4 +F0.319303 +sg5 +I0 +sg6 +I0 +sg7 +F0.81897600000000004 +sS'm' +F23.954999999999998 +sg8 +F0.97811199999999998 +sg9 +F309.38711599999999 +sg10 +(lp2109 +L171388901L +aL171388902L +aL171388903L +aL171388904L +asg12 +(lp2110 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74930099999999999 +sS't' +F54005.108846499999 +ss(F309.36310900000001 +F0.33104099999999997 +F0.93300700000000003 +F0.87800800000000001 +I0 +tp2111 +(dp2112 +g4 +F0.33104099999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.057765200000000003 +sS'm' +F18.783000000000001 +sg8 +F0.87800800000000001 +sg9 +F309.36310900000001 +sg10 +(lp2113 +L345024425L +aL345024426L +aL345024427L +aL345024428L +aL345024429L +aL345024430L +aL345024431L +aL345024432L +aL345024433L +aL345024434L +asg12 +(lp2114 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.113824 +ss(F309.388913 +F0.34375899999999998 +F0.92401999999999995 +F1.0300199999999999 +I0 +tp2115 +(dp2116 +g4 +F0.34375899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.036181600000000001 +sS'm' +F16.192499999999999 +sg8 +F1.0300199999999999 +sg9 +F309.388913 +sg10 +(lp2117 +L345217710L +aL345217711L +aL345217712L +aL345217713L +aL345217714L +asg12 +(lp2118 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401999999999995 +sS't' +F53673.081876700002 +ss(F309.36405300000001 +F0.31754500000000002 +F0.48448000000000002 +F0.51478299999999999 +I0 +tp2119 +(dp2120 +g4 +F0.31754500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.49671300000000002 +sS'm' +F21.291799999999999 +sg8 +F0.51478299999999999 +sg9 +F309.36405300000001 +sg10 +(lp2121 +L12888229L +aL12888230L +aL12888231L +aL12888232L +asg12 +(lp2122 +I1 +aI2 +aI3 +aI4 +asg14 +F0.48448000000000002 +sS't' +F53649.120129100003 +ss(F309.38750499999998 +F0.33272099999999999 +F1.0504 +F0.94442700000000002 +I0 +tp2123 +(dp2124 +g4 +F0.33272099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.77430200000000005 +sS'm' +F23.705500000000001 +sg8 +F0.94442700000000002 +sg9 +F309.38750499999998 +sg10 +(lp2125 +L346333358L +aL346333359L +aL346333360L +aL346333361L +asg12 +(lp2126 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0504 +sS't' +F53974.161271800003 +ss(F309.36742199999998 +F0.32935300000000001 +F1.0501100000000001 +F0.94406199999999996 +I0 +tp2127 +(dp2128 +g4 +F0.32935300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.6584399999999997 +sS'm' +F24.140499999999999 +sg8 +F0.94406199999999996 +sg9 +F309.36742199999998 +sg10 +(lp2129 +L346336200L +aL346336201L +aL346336202L +aL346336203L +aL346336204L +asg12 +(lp2130 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0501100000000001 +sS't' +F53974.159557600004 +ss(F309.363113 +F0.33104899999999998 +F0.74100600000000005 +F0.96000700000000005 +I0 +tp2131 +(dp2132 +g4 +F0.33104899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.058681499999999998 +sS'm' +F18.785699999999999 +sg8 +F0.96000700000000005 +sg9 +F309.363113 +sg10 +(lp2133 +L344475563L +aL344475564L +aL344475565L +aL344475566L +aL344475567L +asg12 +(lp2134 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.1238189 +ss(F309.38198999999997 +F0.336117 +F1.05071 +F0.94492799999999999 +I0 +tp2135 +(dp2136 +g4 +F0.336117 +sg5 +I0 +sg6 +I0 +sg7 +F8.3925099999999997 +sS'm' +F24.768899999999999 +sg8 +F0.94492799999999999 +sg9 +F309.38198999999997 +sg10 +(lp2137 +L346332342L +aL346332343L +aL346332344L +aL346332345L +asg12 +(lp2138 +I0 +aI2 +aI3 +aI4 +asg14 +F1.05071 +sS't' +F53974.159597999998 +ss(F309.38715500000001 +F0.31929999999999997 +F1.0902099999999999 +F1.0701000000000001 +I0 +tp2139 +(dp2140 +g4 +F0.31929999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.98796600000000001 +sS'm' +F22.881799999999998 +sg8 +F1.0701000000000001 +sg9 +F309.38715500000001 +sg10 +(lp2141 +L345685857L +aL345685858L +aL345685859L +aL345685860L +aL345685861L +asg12 +(lp2142 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0902099999999999 +sS't' +F53680.086458999998 +ss(F309.373153 +F0.32444400000000001 +F0.64924599999999999 +F0.53925400000000001 +I0 +tp2143 +(dp2144 +g4 +F0.32444400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.7251799999999999 +sS'm' +F23.0305 +sg8 +F0.53925400000000001 +sg9 +F309.373153 +sg10 +(lp2145 +L112300730L +aL112300731L +aL112300732L +aL112300733L +asg12 +(lp2146 +I1 +aI2 +aI3 +aI4 +asg14 +F0.64924599999999999 +sS't' +F53656.107746000001 +ss(F309.37384500000002 +F0.31759700000000002 +F0.88656800000000002 +F1.11131 +I0 +tp2147 +(dp2148 +g4 +F0.31759700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.59345 +sS'm' +F24.279699999999998 +sg8 +F1.11131 +sg9 +F309.37384500000002 +sg10 +(lp2149 +L344155615L +aL344155616L +aL344155617L +asg12 +(lp2150 +I2 +aI3 +aI4 +asg14 +F0.88656800000000002 +sS't' +F53635.136537300001 +ss(F309.38217300000002 +F0.321739 +F0.92400800000000005 +F1.0300100000000001 +I0 +tp2151 +(dp2152 +g4 +F0.321739 +sg5 +I0 +sg6 +I0 +sg7 +F0.222858 +sS'm' +F20.835799999999999 +sg8 +F1.0300100000000001 +sg9 +F309.38217300000002 +sg10 +(lp2153 +L345220219L +aL345220220L +aL345220221L +aL345220222L +aL345220223L +asg12 +(lp2154 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400800000000005 +sS't' +F53673.081857899997 +ss(F309.37767600000001 +F0.34564099999999998 +F1.08013 +F1.0100899999999999 +I0 +tp2155 +(dp2156 +g4 +F0.34564099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.1642799999999998 +sS'm' +F24.303000000000001 +sg8 +F1.0100899999999999 +sg9 +F309.37767600000001 +sg10 +(lp2157 +L345370297L +aL345370298L +aL345370299L +aL345370300L +aL345370301L +aL345370302L +aL345370303L +aL345370304L +aL345370305L +aL345370306L +asg12 +(lp2158 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08013 +sS't' +F53675.078734800001 +ss(F309.36599000000001 +F0.33174700000000001 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp2159 +(dp2160 +g4 +F0.33174700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.15740100000000001 +sS'm' +F20.5212 +sg8 +F1.0100100000000001 +sg9 +F309.36599000000001 +sg10 +(lp2161 +L345363440L +aL345363441L +aL345363442L +aL345363443L +aL345363444L +asg12 +(lp2162 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078702300001 +ss(F309.38940000000002 +F0.32219100000000001 +F0.24962500000000001 +F0.34895599999999999 +I0 +tp2163 +(dp2164 +g4 +F0.32219100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.1137899999999998 +sS'm' +F23.365300000000001 +sg8 +F0.34895599999999999 +sg9 +F309.38940000000002 +sg10 +(lp2165 +L327906718L +aL327906719L +aL327906720L +aL327906721L +aL327906722L +asg12 +(lp2166 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24962500000000001 +sS't' +F53312.062980199997 +ss(F309.38887199999999 +F0.34376299999999999 +F0.24807899999999999 +F0.348049 +I0 +tp2167 +(dp2168 +g4 +F0.34376299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.030461200000000001 +sS'm' +F16.1938 +sg8 +F0.348049 +sg9 +F309.38887199999999 +sg10 +(lp2169 +L327902137L +aL327902138L +aL327902139L +aL327902140L +aL327902141L +asg12 +(lp2170 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24807899999999999 +sS't' +F53312.0629787 +ss(F309.36983099999998 +F0.34462199999999998 +F0.61663800000000002 +F0.77549500000000005 +I0 +tp2171 +(dp2172 +g4 +F0.34462199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.23245 +sS'm' +F22.399899999999999 +sg8 +F0.77549500000000005 +sg9 +F309.36983099999998 +sg10 +(lp2173 +L346172025L +aL346172026L +aL346172027L +aL346172028L +aL346172029L +asg12 +(lp2174 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61663800000000002 +sS't' +F53704.071644700001 +ss(F309.38217900000001 +F0.32173499999999999 +F0.98400600000000005 +F0.98800500000000002 +I0 +tp2175 +(dp2176 +g4 +F0.32173499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.20364299999999999 +sS'm' +F20.667999999999999 +sg8 +F0.98800500000000002 +sg9 +F309.38217900000001 +sg10 +(lp2177 +L346462184L +aL346462185L +aL346462186L +aL346462187L +aL346462188L +asg12 +(lp2178 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400600000000005 +sS't' +F54007.119923600003 +ss(F309.38780300000002 +F0.32191999999999998 +F0.61641000000000001 +F0.77568800000000004 +I0 +tp2179 +(dp2180 +g4 +F0.32191999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.74655899999999997 +sS'm' +F23.2012 +sg8 +F0.77568800000000004 +sg9 +F309.38780300000002 +sg10 +(lp2181 +L346172279L +aL346172280L +aL346172281L +aL346172282L +asg12 +(lp2182 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61641000000000001 +sS't' +F53704.073353100001 +ss(F309.38899700000002 +F0.34516999999999998 +F0.47015499999999999 +F0.50312500000000004 +I0 +tp2183 +(dp2184 +g4 +F0.34516999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.84615 +sS'm' +F21.6951 +sg8 +F0.50312500000000004 +sg9 +F309.38899700000002 +sg10 +(lp2185 +L12884608L +aL12884609L +aL12884610L +aL12884611L +aL12884612L +asg12 +(lp2186 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47015499999999999 +sS't' +F53649.118539900002 +ss(F309.35980699999999 +F0.32507200000000003 +F1.0100100000000001 +F0.99201300000000003 +I0 +tp2187 +(dp2188 +g4 +F0.32507200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F2.4529100000000001 +sS'm' +F23.345400000000001 +sg8 +F0.99201300000000003 +sg9 +F309.35980699999999 +sg10 +(lp2189 +L342965934L +aL342965935L +aL342965936L +aL342965937L +aL342965938L +asg12 +(lp2190 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134543200002 +ss(F309.38233000000002 +F0.32450299999999999 +F0.47769899999999998 +F0.45511699999999999 +I0 +tp2191 +(dp2192 +g4 +F0.32450299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F6.2473799999999997 +sS'm' +F24.213200000000001 +sg8 +F0.45511699999999999 +sg9 +F309.38233000000002 +sg10 +(lp2193 +L344876227L +aL344876228L +aL344876229L +aL344876230L +aL344876231L +asg12 +(lp2194 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47769899999999998 +sS't' +F53668.109023500001 +ss(F309.36600099999998 +F0.33172099999999999 +F0.77900499999999995 +F0.82900700000000005 +I0 +tp2195 +(dp2196 +g4 +F0.33172099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.25645699999999999 +sS'm' +F20.495899999999999 +sg8 +F0.82900700000000005 +sg9 +F309.36600099999998 +sg10 +(lp2197 +L343271395L +aL343271396L +aL343271397L +aL343271398L +aL343271399L +asg12 +(lp2198 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900499999999995 +sS't' +F53302.107406700001 +ss(F309.360072 +F0.32052399999999998 +F0.749004 +F0.97800600000000004 +I0 +tp2199 +(dp2200 +g4 +F0.32052399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.083061399999999994 +sS'm' +F19.667300000000001 +sg8 +F0.97800600000000004 +sg9 +F309.360072 +sg10 +(lp2201 +L171377764L +aL171377765L +aL171377766L +aL171377767L +aL171377768L +asg12 +(lp2202 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.749004 +sS't' +F54005.107112999998 +ss(F309.37454400000001 +F0.31689699999999998 +F1.0802700000000001 +F1.0103500000000001 +I0 +tp2203 +(dp2204 +g4 +F0.31689699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.47578199999999998 +sS'm' +F23.2746 +sg8 +F1.0103500000000001 +sg9 +F309.37454400000001 +sg10 +(lp2205 +L345371838L +aL345371839L +aL345371840L +aL345371841L +asg12 +(lp2206 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0802700000000001 +sS't' +F53675.080384599998 +ss(F309.37281000000002 +F0.33520299999999997 +F0.85100399999999998 +F0.91300999999999999 +I0 +tp2207 +(dp2208 +g4 +F0.33520299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.72897900000000004 +sS'm' +F21.798100000000002 +sg8 +F0.91300999999999999 +sg9 +F309.37281000000002 +sg10 +(lp2209 +L343876198L +aL343876199L +aL343876200L +aL343876201L +aL343876202L +asg12 +(lp2210 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100399999999998 +sS't' +F53626.144947699999 +ss(F309.386503 +F0.321961 +F0.85104299999999999 +F0.913053 +I0 +tp2211 +(dp2212 +g4 +F0.321961 +sg5 +I0 +sg6 +I0 +sg7 +F1.9832099999999999 +sS'm' +F22.899999999999999 +sg8 +F0.913053 +sg9 +F309.386503 +sg10 +(lp2213 +L343880290L +aL343880291L +aL343880292L +aL343880293L +aL343880294L +asg12 +(lp2214 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85104299999999999 +sS't' +F53626.144985799998 +ss(F309.37475499999999 +F0.33169399999999999 +F0.98400500000000002 +F0.98800399999999999 +I0 +tp2215 +(dp2216 +g4 +F0.33169399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.0450611 +sS'm' +F15.9716 +sg8 +F0.98800399999999999 +sg9 +F309.37475499999999 +sg10 +(lp2217 +L346459418L +aL346459419L +aL346459420L +aL346459421L +aL346459422L +asg12 +(lp2218 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.119902999999 +ss(F309.38751999999999 +F0.33274199999999998 +F0.74922500000000003 +F0.97811700000000001 +I0 +tp2219 +(dp2220 +g4 +F0.33274199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.82340899999999995 +sS'm' +F23.917899999999999 +sg8 +F0.97811700000000001 +sg9 +F309.38751999999999 +sg10 +(lp2221 +L171384156L +aL171384157L +aL171384158L +aL171384159L +asg12 +(lp2222 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74922500000000003 +sS't' +F54005.1088476 +ss(F309.36029200000002 +F0.31870900000000002 +F1.09304 +F1.0821400000000001 +I0 +tp2223 +(dp2224 +g4 +F0.31870900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.9671400000000001 +sS'm' +F24.915400000000002 +sg8 +F1.0821400000000001 +sg9 +F309.36029200000002 +sg10 +(lp2225 +L345675501L +aL345675502L +aL345675503L +aL345675504L +asg12 +(lp2226 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09304 +sS't' +F53680.088042800002 +ss(F309.386505 +F0.32195800000000002 +F0.921014 +F1.10002 +I0 +tp2227 +(dp2228 +g4 +F0.32195800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.424651 +sS'm' +F21.760100000000001 +sg8 +F1.10002 +sg9 +F309.386505 +sg10 +(lp2229 +L345537447L +aL345537448L +aL345537449L +aL345537450L +aL345537451L +asg12 +(lp2230 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.921014 +sS't' +F53677.099792100002 +ss(F309.382611 +F0.33968999999999999 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp2231 +(dp2232 +g4 +F0.33968999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.062394999999999999 +sS'm' +F18.728400000000001 +sg8 +F1.1000099999999999 +sg9 +F309.382611 +sg10 +(lp2233 +L345532246L +aL345532247L +aL345532248L +aL345532249L +aL345532250L +aL345532251L +aL345532252L +aL345532253L +aL345532254L +aL345532255L +asg12 +(lp2234 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099781199999 +ss(F309.37795499999999 +F0.33785700000000002 +F0.92400599999999999 +F1.0300100000000001 +I0 +tp2235 +(dp2236 +g4 +F0.33785700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.051163399999999998 +sS'm' +F18.3979 +sg8 +F1.0300100000000001 +sg9 +F309.37795499999999 +sg10 +(lp2237 +L345217533L +aL345217534L +aL345217535L +aL345217536L +aL345217537L +aL345217538L +aL345217539L +aL345217540L +aL345217541L +aL345217542L +asg12 +(lp2238 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400599999999999 +sS't' +F53673.081846200002 +ss(F309.37574499999999 +F0.346196 +F0.921153 +F1.10012 +I0 +tp2239 +(dp2240 +g4 +F0.346196 +sg5 +I0 +sg6 +I0 +sg7 +F1.2563500000000001 +sS'm' +F22.973299999999998 +sg8 +F1.10012 +sg9 +F309.37574499999999 +sg10 +(lp2241 +L345539664L +aL345539665L +aL345539666L +aL345539667L +aL345539668L +asg12 +(lp2242 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.921153 +sS't' +F53677.0997622 +ss(F309.38715999999999 +F0.31928099999999998 +F0.82887299999999997 +F0.94560200000000005 +I0 +tp2243 +(dp2244 +g4 +F0.31928099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.3931100000000001 +sS'm' +F22.839600000000001 +sg8 +F0.94560200000000005 +sg9 +F309.38715999999999 +sg10 +(lp2245 +L343131318L +aL343131319L +aL343131320L +aL343131321L +aL343131322L +asg12 +(lp2246 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82887299999999997 +sS't' +F53288.111796600002 +ss(F309.37431700000002 +F0.32657900000000001 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp2247 +(dp2248 +g4 +F0.32657900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.2501599999999999 +sS'm' +F23.142900000000001 +sg8 +F1.0700099999999999 +sg9 +F309.37431700000002 +sg10 +(lp2249 +L345679221L +aL345679222L +aL345679223L +aL345679224L +aL345679225L +aL345679226L +aL345679227L +aL345679228L +aL345679229L +aL345679230L +asg12 +(lp2250 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086423300003 +ss(F309.36453599999999 +F0.32445600000000002 +F0.77901299999999996 +F0.82901599999999998 +I0 +tp2251 +(dp2252 +g4 +F0.32445600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.5223200000000001 +sS'm' +F23.040800000000001 +sg8 +F0.82901599999999998 +sg9 +F309.36453599999999 +sg10 +(lp2253 +L343275150L +aL343275151L +aL343275152L +aL343275153L +aL343275154L +asg12 +(lp2254 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77901299999999996 +sS't' +F53302.107402599999 +ss(F309.38027499999998 +F0.31775999999999999 +F1.05227 +F0.94682999999999995 +I0 +tp2255 +(dp2256 +g4 +F0.31775999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.37781 +sS'm' +F24.3903 +sg8 +F0.94682999999999995 +sg9 +F309.38027499999998 +sg10 +(lp2257 +L346336502L +aL346336503L +aL346336504L +aL346336505L +asg12 +(lp2258 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05227 +sS't' +F53974.161251700003 +ss(F309.37771600000002 +F0.325596 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp2259 +(dp2260 +g4 +F0.325596 +sg5 +I0 +sg6 +I0 +sg7 +F2.2745799999999998 +sS'm' +F23.806799999999999 +sg8 +F1.0700099999999999 +sg9 +F309.37771600000002 +sg10 +(lp2261 +L345680544L +aL345680545L +aL345680546L +aL345680547L +aL345680548L +asg12 +(lp2262 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900099999999999 +sS't' +F53680.086432700002 +ss(F309.38888700000001 +F0.34374900000000003 +F0.74101600000000001 +F0.96001400000000003 +I0 +tp2263 +(dp2264 +g4 +F0.34374900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.0399727 +sS'm' +F16.1708 +sg8 +F0.96001400000000003 +sg9 +F309.38888700000001 +sg10 +(lp2265 +L344476103L +aL344476104L +aL344476105L +aL344476106L +aL344476107L +aL344476108L +aL344476109L +aL344476110L +aL344476111L +aL344476112L +asg12 +(lp2266 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74101600000000001 +sS't' +F53644.123890499999 +ss(F309.38651399999998 +F0.321992 +F1.0100199999999999 +F0.99202599999999996 +I0 +tp2267 +(dp2268 +g4 +F0.321992 +sg5 +I0 +sg6 +I0 +sg7 +F0.65751199999999999 +sS'm' +F21.8887 +sg8 +F0.99202599999999996 +sg9 +F309.38651399999998 +sg10 +(lp2269 +L342968353L +aL342968354L +aL342968355L +aL342968356L +aL342968357L +asg12 +(lp2270 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100199999999999 +sS't' +F53270.134617399999 +ss(F309.369801 +F0.34463199999999999 +F0.92106100000000002 +F1.1000399999999999 +I0 +tp2271 +(dp2272 +g4 +F0.34463199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1042000000000001 +sS'm' +F22.8264 +sg8 +F1.1000399999999999 +sg9 +F309.369801 +sg10 +(lp2273 +L345539477L +aL345539478L +aL345539479L +aL345539480L +aL345539481L +asg12 +(lp2274 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92106100000000002 +sS't' +F53677.099745699998 +ss(F309.36453499999999 +F0.32447999999999999 +F0.86501600000000001 +F0.90001600000000004 +I0 +tp2275 +(dp2276 +g4 +F0.32447999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.2361399999999998 +sS'm' +F23.305700000000002 +sg8 +F0.90001600000000004 +sg9 +F309.36453499999999 +sg10 +(lp2277 +L345812217L +aL345812218L +aL345812219L +aL345812220L +aL345812221L +asg12 +(lp2278 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86501600000000001 +sS't' +F53693.088302299999 +ss(F309.37652200000002 +F0.34501799999999999 +F0.92125199999999996 +F1.1003000000000001 +I0 +tp2279 +(dp2280 +g4 +F0.34501799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.64919099999999996 +sS'm' +F23.128299999999999 +sg8 +F1.1003000000000001 +sg9 +F309.37652200000002 +sg10 +(lp2281 +L345539706L +aL345539707L +aL345539708L +asg12 +(lp2282 +I2 +aI3 +aI4 +asg14 +F0.92125199999999996 +sS't' +F53677.098105800003 +ss(F309.366332 +F0.34082499999999999 +F0.24806300000000001 +F0.34804499999999999 +I0 +tp2283 +(dp2284 +g4 +F0.34082499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.052442599999999999 +sS'm' +F18.395900000000001 +sg8 +F0.34804499999999999 +sg9 +F309.366332 +sg10 +(lp2285 +L327901975L +aL327901976L +aL327901977L +aL327901978L +aL327901979L +asg12 +(lp2286 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24806300000000001 +sS't' +F53312.062916100003 +ss(F309.36915499999998 +F0.34573100000000001 +F0.741124 +F0.96009800000000001 +I0 +tp2287 +(dp2288 +g4 +F0.34573100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.181169 +sS'm' +F21.650300000000001 +sg8 +F0.96009800000000001 +sg9 +F309.36915499999998 +sg10 +(lp2289 +L344482800L +aL344482801L +aL344482802L +aL344482798L +aL344482799L +asg12 +(lp2290 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.741124 +sS't' +F53644.122177099998 +ss(F309.38261299999999 +F0.339696 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp2291 +(dp2292 +g4 +F0.339696 +sg5 +I0 +sg6 +I0 +sg7 +F0.054664499999999998 +sS'm' +F18.7119 +sg8 +F1.0700000000000001 +sg9 +F309.38261299999999 +sg10 +(lp2293 +L345676030L +aL345676031L +aL345676032L +aL345676033L +aL345676034L +asg12 +(lp2294 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086446300003 +ss(F309.36088899999999 +F0.31767899999999999 +F0.74907500000000005 +F0.97805600000000004 +I0 +tp2295 +(dp2296 +g4 +F0.31767899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.7757700000000001 +sS'm' +F23.940100000000001 +sg8 +F0.97805600000000004 +sg9 +F309.36088899999999 +sg10 +(lp2297 +L171377784L +aL171377785L +aL171377786L +aL171377787L +aL171377788L +asg12 +(lp2298 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74907500000000005 +sS't' +F54005.1071152 +ss(F309.37476099999998 +F0.331679 +F0.86500699999999997 +F0.90000599999999997 +I0 +tp2299 +(dp2300 +g4 +F0.331679 +sg5 +I0 +sg6 +I0 +sg7 +F0.032975600000000001 +sS'm' +F15.951700000000001 +sg8 +F0.90000599999999997 +sg9 +F309.37476099999998 +sg10 +(lp2301 +L345809049L +aL345809050L +aL345809051L +aL345809052L +aL345809053L +asg12 +(lp2302 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86500699999999997 +sS't' +F53693.088330699997 +ss(F309.378987 +F0.32702999999999999 +F0.98401099999999997 +F0.98800900000000003 +I0 +tp2303 +(dp2304 +g4 +F0.32702999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.32440600000000003 +sS'm' +F21.2425 +sg8 +F0.98800900000000003 +sg9 +F309.378987 +sg10 +(lp2305 +L346462130L +aL346462131L +aL346462132L +aL346462133L +aL346462134L +asg12 +(lp2306 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98401099999999997 +sS't' +F54007.119914700001 +ss(F309.37794000000002 +F0.33784599999999998 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp2307 +(dp2308 +g4 +F0.33784599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.061082400000000002 +sS'm' +F18.346800000000002 +sg8 +F0.94401199999999996 +sg9 +F309.37794000000002 +sg10 +(lp2309 +L346329311L +aL346329312L +aL346329313L +aL346329314L +aL346329315L +aL346329316L +aL346329317L +aL346329318L +aL346329319L +aL346329320L +asg12 +(lp2310 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.1595868 +ss(F309.36488800000001 +F0.33457500000000001 +F1.05016 +F0.94439600000000001 +I0 +tp2311 +(dp2312 +g4 +F0.33457500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.0357400000000001 +sS'm' +F22.4864 +sg8 +F0.94439600000000001 +sg9 +F309.36488800000001 +sg10 +(lp2313 +L346336176L +aL346336177L +aL346336178L +aL346336179L +aL346336180L +asg12 +(lp2314 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05016 +sS't' +F53974.1595505 +ss(F309.385471 +F0.34018900000000002 +F0.61610200000000004 +F0.77511300000000005 +I0 +tp2315 +(dp2316 +g4 +F0.34018900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.50024500000000005 +sS'm' +F21.3916 +sg8 +F0.77511300000000005 +sg9 +F309.385471 +sg10 +(lp2317 +L346171733L +aL346171734L +aL346171735L +aL346171736L +aL346171737L +asg12 +(lp2318 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61610200000000004 +sS't' +F53704.071688199998 +ss(F309.38793700000002 +F0.34219300000000002 +F0.47034199999999998 +F0.50337200000000004 +I0 +tp2319 +(dp2320 +g4 +F0.34219300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.56873 +sS'm' +F21.549900000000001 +sg8 +F0.50337200000000004 +sg9 +F309.38793700000002 +sg10 +(lp2321 +L12884613L +aL12884614L +aL12884615L +aL12884616L +aL12884617L +asg12 +(lp2322 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47034199999999998 +sS't' +F53649.118537000002 +ss(F309.36402500000003 +F0.317548 +F0.98402599999999996 +F0.98802000000000001 +I0 +tp2323 +(dp2324 +g4 +F0.317548 +sg5 +I0 +sg6 +I0 +sg7 +F1.8119099999999999 +sS'm' +F23.206900000000001 +sg8 +F0.98802000000000001 +sg9 +F309.36402500000003 +sg10 +(lp2325 +L346465791L +aL346465792L +aL346465793L +aL346465794L +aL346465795L +asg12 +(lp2326 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98402599999999996 +sS't' +F54007.119873199998 +ss(F309.37088599999998 +F0.33038299999999998 +F0.61655300000000002 +F0.77568000000000004 +I0 +tp2327 +(dp2328 +g4 +F0.33038299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.5743199999999999 +sS'm' +F22.673200000000001 +sg8 +F0.77568000000000004 +sg9 +F309.37088599999998 +sg10 +(lp2329 +L346172062L +aL346172063L +aL346172064L +aL346172065L +aL346172066L +asg12 +(lp2330 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61655300000000002 +sS't' +F53704.071647700002 +ss(F309.36597799999998 +F0.33172299999999999 +F0.82801000000000002 +F0.94500899999999999 +I0 +tp2331 +(dp2332 +g4 +F0.33172299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.16250600000000001 +sS'm' +F20.3505 +sg8 +F0.94500899999999999 +sg9 +F309.36597799999998 +sg10 +(lp2333 +L343120294L +aL343120295L +aL343120296L +aL343120297L +aL343120298L +asg12 +(lp2334 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801000000000002 +sS't' +F53288.111737799998 +ss(F309.36784799999998 +F0.34499400000000002 +F1.0901700000000001 +F1.0702100000000001 +I0 +tp2335 +(dp2336 +g4 +F0.34499400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.88283400000000001 +sS'm' +F22.747599999999998 +sg8 +F1.0702100000000001 +sg9 +F309.36784799999998 +sg10 +(lp2337 +L345683717L +aL345683718L +aL345683719L +aL345683720L +aL345683721L +asg12 +(lp2338 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0901700000000001 +sS't' +F53680.086405299997 +ss(F309.37278900000001 +F0.33522299999999999 +F0.82801000000000002 +F0.94500899999999999 +I0 +tp2339 +(dp2340 +g4 +F0.33522299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.63880700000000001 +sS'm' +F21.967600000000001 +sg8 +F0.94500899999999999 +sg9 +F309.37278900000001 +sg10 +(lp2341 +L343123179L +aL343123180L +aL343123181L +aL343123182L +aL343123183L +asg12 +(lp2342 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801000000000002 +sS't' +F53288.111756699996 +ss(F309.37653899999998 +F0.34482299999999999 +F0.82879899999999995 +F0.94554099999999996 +I0 +tp2343 +(dp2344 +g4 +F0.34482299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.46593 +sS'm' +F22.890599999999999 +sg8 +F0.94554099999999996 +sg9 +F309.37653899999998 +sg10 +(lp2345 +L343127744L +aL343127745L +aL343127746L +aL343127747L +asg12 +(lp2346 +I0 +aI2 +aI3 +aI4 +asg14 +F0.82879899999999995 +sS't' +F53288.111767100003 +ss(F309.36980899999998 +F0.344661 +F0.93319799999999997 +F0.87819899999999995 +I0 +tp2347 +(dp2348 +g4 +F0.344661 +sg5 +I0 +sg6 +I0 +sg7 +F4.6647800000000004 +sS'm' +F24.192399999999999 +sg8 +F0.87819899999999995 +sg9 +F309.36980899999998 +sg10 +(lp2349 +L345030619L +aL345030620L +aL345030621L +aL345030622L +aL345030623L +asg12 +(lp2350 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93319799999999997 +sS't' +F53670.113842600003 +ss(F309.38796200000002 +F0.34224599999999999 +F0.616039 +F0.77503599999999995 +I0 +tp2351 +(dp2352 +g4 +F0.34224599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.7383200000000001 +sS'm' +F22.764700000000001 +sg8 +F0.77503599999999995 +sg9 +F309.38796200000002 +sg10 +(lp2353 +L346166379L +aL346166380L +aL346166381L +aL346166382L +aL346166383L +asg12 +(lp2354 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.616039 +sS't' +F53704.071695099999 +ss(F309.35980599999999 +F0.32505899999999999 +F0.93301500000000004 +F0.87801600000000002 +I0 +tp2355 +(dp2356 +g4 +F0.32505899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.15458 +sS'm' +F19.020399999999999 +sg8 +F0.87801600000000002 +sg9 +F309.35980599999999 +sg10 +(lp2357 +L345027005L +aL345027006L +aL345027007L +aL345027008L +aL345027009L +aL345027010L +aL345027001L +aL345027002L +aL345027003L +aL345027004L +asg12 +(lp2358 +I4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.93301500000000004 +sS't' +F53670.114644100002 +ss(F309.36505199999999 +F0.33012900000000001 +F0.77501500000000001 +F0.75402800000000003 +I0 +tp2359 +(dp2360 +g4 +F0.33012900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.0042800000000001 +sS'm' +F21.417999999999999 +sg8 +F0.75402800000000003 +sg9 +F309.36505199999999 +sg10 +(lp2361 +L342827327L +aL342827328L +aL342827329L +aL342827330L +aL342827331L +asg12 +(lp2362 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501500000000001 +sS't' +F53243.255731099998 +ss(F309.372816 +F0.335233 +F0.56505700000000003 +F0.51403600000000005 +I0 +tp2363 +(dp2364 +g4 +F0.335233 +sg5 +I0 +sg6 +I0 +sg7 +F0.71372100000000005 +sS'm' +F21.5197 +sg8 +F0.51403600000000005 +sg9 +F309.372816 +sg10 +(lp2365 +L344710889L +aL344710890L +aL344710891L +aL344710892L +aL344710893L +asg12 +(lp2366 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.56505700000000003 +sS't' +F53654.158495399999 +ss(F309.36768000000001 +F0.32828800000000002 +F0.74389099999999997 +F0.96380999999999994 +I0 +tp2367 +(dp2368 +g4 +F0.32828800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.4925600000000001 +sS'm' +F23.858599999999999 +sg8 +F0.96380999999999994 +sg9 +F309.36768000000001 +sg10 +(lp2369 +L344481820L +aL344481821L +aL344481822L +aL344481823L +aL344481824L +asg12 +(lp2370 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74389099999999997 +sS't' +F53644.123831600002 +ss(F309.373065 +F0.32445800000000002 +F0.92408999999999997 +F1.03007 +I0 +tp2371 +(dp2372 +g4 +F0.32445800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0753299999999999 +sS'm' +F22.651800000000001 +sg8 +F1.03007 +sg9 +F309.373065 +sg10 +(lp2373 +L345223983L +aL345223984L +aL345223985L +aL345223986L +aL345223987L +asg12 +(lp2374 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92408999999999997 +sS't' +F53673.081832600001 +ss(F309.36145800000003 +F0.31856600000000002 +F1.0801400000000001 +F1.0103200000000001 +I0 +tp2375 +(dp2376 +g4 +F0.31856600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.81931 +sS'm' +F23.404599999999999 +sg8 +F1.0103200000000001 +sg9 +F309.36145800000003 +sg10 +(lp2377 +L345366056L +aL345366057L +aL345366058L +aL345366059L +aL345366060L +asg12 +(lp2378 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0801400000000001 +sS't' +F53675.078689800001 +ss(F309.369123 +F0.34572700000000001 +F0.933172 +F0.87813200000000002 +I0 +tp2379 +(dp2380 +g4 +F0.34572700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.33588000000000001 +sS'm' +F19.9117 +sg8 +F0.87813200000000002 +sg9 +F309.369123 +sg10 +(lp2381 +L345030627L +aL345030624L +aL345030625L +aL345030626L +asg12 +(lp2382 +I4 +aI1 +aI2 +aI3 +asg14 +F0.933172 +sS't' +F53670.114670000003 +ss(F309.370949 +F0.33037100000000003 +F1.05016 +F0.94432799999999995 +I0 +tp2383 +(dp2384 +g4 +F0.33037100000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.32471699999999998 +sS'm' +F22.645800000000001 +sg8 +F0.94432799999999995 +sg9 +F309.370949 +sg10 +(lp2385 +L346336317L +aL346336318L +aL346336319L +aL346336320L +asg12 +(lp2386 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05016 +sS't' +F53974.161225800002 +ss(F309.38241900000003 +F0.32453900000000002 +F1.0102500000000001 +F0.95318800000000004 +I0 +tp2387 +(dp2388 +g4 +F0.32453900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.92179500000000003 +sS'm' +F23.672999999999998 +sg8 +F0.95318800000000004 +sg9 +F309.38241900000003 +sg10 +(lp2389 +L343713369L +aL343713370L +aL343713371L +aL343713372L +asg12 +(lp2390 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0102500000000001 +sS't' +F53623.160420799999 +ss(F309.38082300000002 +F0.34453600000000001 +F0.92433500000000002 +F1.0303 +I0 +tp2391 +(dp2392 +g4 +F0.34453600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.68344 +sS'm' +F23.145800000000001 +sg8 +F1.0303 +sg9 +F309.38082300000002 +sg10 +(lp2393 +L345217577L +aL345217578L +aL345217579L +aL345217580L +aL345217581L +asg12 +(lp2394 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92433500000000002 +sS't' +F53673.081854199998 +ss(F309.36746299999999 +F0.32934200000000002 +F0.92102899999999999 +F1.1000300000000001 +I0 +tp2395 +(dp2396 +g4 +F0.32934200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.33377200000000001 +sS'm' +F22.951000000000001 +sg8 +F1.1000300000000001 +sg9 +F309.36746299999999 +sg10 +(lp2397 +L345537932L +aL345537933L +aL345537934L +aL345537935L +aL345537936L +aL345537937L +aL345537938L +aL345537939L +asg12 +(lp2398 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92102899999999999 +sS't' +F53677.101397600003 +ss(F309.367456 +F0.32935500000000001 +F0.93310800000000005 +F0.87812999999999997 +I0 +tp2399 +(dp2400 +g4 +F0.32935500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.40790999999999999 +sS'm' +F22.809799999999999 +sg8 +F0.87812999999999997 +sg9 +F309.367456 +sg10 +(lp2401 +L345030611L +aL345030612L +aL345030613L +aL345030614L +asg12 +(lp2402 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93310800000000005 +sS't' +F53670.115494600002 +ss(F309.38272799999999 +F0.335175 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp2403 +(dp2404 +g4 +F0.335175 +sg5 +I0 +sg6 +I0 +sg7 +F0.097463599999999997 +sS'm' +F19.422799999999999 +sg8 +F0.95301000000000002 +sg9 +F309.38272799999999 +sg10 +(lp2405 +L343712228L +aL343712229L +aL343712230L +aL343712231L +aL343712232L +asg12 +(lp2406 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158763200001 +ss(F309.38366600000001 +F0.34499099999999999 +F0.92100899999999997 +F1.1000099999999999 +I0 +tp2407 +(dp2408 +g4 +F0.34499099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.058079199999999997 +sS'm' +F20.1206 +sg8 +F1.1000099999999999 +sg9 +F309.38366600000001 +sg10 +(lp2409 +L345535387L +aL345535388L +aL345535389L +aL345535385L +aL345535386L +asg12 +(lp2410 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.92100899999999997 +sS't' +F53677.098125600001 +ss(F309.37095099999999 +F0.33697100000000002 +F1.09009 +F1.07019 +I0 +tp2411 +(dp2412 +g4 +F0.33697100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.0465 +sS'm' +F25.392800000000001 +sg8 +F1.07019 +sg9 +F309.37095099999999 +sg10 +(lp2413 +L345685743L +aL345685744L +aL345685745L +aL345685746L +asg12 +(lp2414 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09009 +sS't' +F53680.088072400002 +ss(F309.38262800000001 +F0.33973399999999998 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp2415 +(dp2416 +g4 +F0.33973399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.069572999999999996 +sS'm' +F18.738099999999999 +sg8 +F0.99200699999999997 +sg9 +F309.38262800000001 +sg10 +(lp2417 +L342962101L +aL342962102L +aL342962103L +aL342962104L +aL342962105L +asg12 +(lp2418 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134606599997 +ss(F309.38540799999998 +F0.34014299999999997 +F0.885019 +F1.1100099999999999 +I0 +tp2419 +(dp2420 +g4 +F0.34014299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.387461 +sS'm' +F21.8093 +sg8 +F1.1100099999999999 +sg9 +F309.38540799999998 +sg10 +(lp2421 +L344152647L +aL344152648L +aL344152649L +aL344152650L +aL344152651L +asg12 +(lp2422 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.885019 +sS't' +F53635.138228000003 +ss(F309.368313 +F0.32756200000000002 +F0.98483100000000001 +F0.98834200000000005 +I0 +tp2423 +(dp2424 +g4 +F0.32756200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.74141400000000002 +sS'm' +F23.381 +sg8 +F0.98834200000000005 +sg9 +F309.368313 +sg10 +(lp2425 +L346463939L +aL346463940L +aL346463941L +aL346463942L +asg12 +(lp2426 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98483100000000001 +sS't' +F54007.121543499998 +ss(F309.36452100000002 +F0.32445200000000002 +F1.05002 +F0.944017 +I0 +tp2427 +(dp2428 +g4 +F0.32445200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0587899999999999 +sS'm' +F22.514800000000001 +sg8 +F0.944017 +sg9 +F309.36452100000002 +sg10 +(lp2429 +L346333253L +aL346333254L +aL346333255L +aL346333256L +aL346333257L +asg12 +(lp2430 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.1595495 +ss(F309.36241000000001 +F0.31964799999999999 +F0.47021499999999999 +F0.503386 +I0 +tp2431 +(dp2432 +g4 +F0.31964799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.6110899999999999 +sS'm' +F22.464600000000001 +sg8 +F0.503386 +sg9 +F309.36241000000001 +sg10 +(lp2433 +L12887102L +aL12887103L +aL12887104L +aL12887105L +aL12887106L +asg12 +(lp2434 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47021499999999999 +sS't' +F53649.118466100001 +ss(F309.38898499999999 +F0.34517199999999998 +F0.77900700000000001 +F0.829009 +I0 +tp2435 +(dp2436 +g4 +F0.34517199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.088050299999999998 +sS'm' +F19.5364 +sg8 +F0.829009 +sg9 +F309.38898499999999 +sg10 +(lp2437 +L343271705L +aL343271706L +aL343271707L +aL343271708L +aL343271704L +asg12 +(lp2438 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.77900700000000001 +sS't' +F53302.109128900003 +ss(F309.364529 +F0.32449 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp2439 +(dp2440 +g4 +F0.32449 +sg5 +I0 +sg6 +I0 +sg7 +F2.3121100000000001 +sS'm' +F23.666899999999998 +sg8 +F1.0100100000000001 +sg9 +F309.364529 +sg10 +(lp2441 +L345367421L +aL345367422L +aL345367423L +aL345367424L +aL345367425L +asg12 +(lp2442 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.0786983 +ss(F309.36523999999997 +F0.33729199999999998 +F0.85529500000000003 +F0.91611200000000004 +I0 +tp2443 +(dp2444 +g4 +F0.33729199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.72803300000000004 +sS'm' +F22.607199999999999 +sg8 +F0.91611200000000004 +sg9 +F309.36523999999997 +sg10 +(lp2445 +L343881848L +aL343881849L +aL343881850L +aL343881851L +asg12 +(lp2446 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85529500000000003 +sS't' +F53626.146585199996 +ss(F309.36978699999997 +F0.34464699999999998 +F1.0501499999999999 +F0.94413400000000003 +I0 +tp2447 +(dp2448 +g4 +F0.34464699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.9270099999999999 +sS'm' +F23.165700000000001 +sg8 +F0.94413400000000003 +sg9 +F309.36978699999997 +sg10 +(lp2449 +L346336242L +aL346336243L +aL346336244L +aL346336245L +aL346336246L +asg12 +(lp2450 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0501499999999999 +sS't' +F53974.159564200003 +ss(F309.38076799999999 +F0.34462199999999998 +F0.42844500000000002 +F0.42231099999999999 +I0 +tp2451 +(dp2452 +g4 +F0.34462199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F5.0558699999999996 +sS'm' +F25.0459 +sg8 +F0.42231099999999999 +sg9 +F309.38076799999999 +sg10 +(lp2453 +L345997985L +aL345997986L +aL345997987L +aL345997988L +asg12 +(lp2454 +I1 +aI2 +aI3 +aI4 +asg14 +F0.42844500000000002 +sS't' +F53703.094786499998 +ss(F309.38529199999999 +F0.33195799999999998 +F0.24846699999999999 +F0.348246 +I0 +tp2455 +(dp2456 +g4 +F0.33195799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.3188499999999999 +sS'm' +F23.042400000000001 +sg8 +F0.348246 +sg9 +F309.38529199999999 +sg10 +(lp2457 +L327906650L +aL327906651L +aL327906652L +aL327906653L +aL327906654L +asg12 +(lp2458 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24846699999999999 +sS't' +F53312.062968799997 +ss(F309.38650000000001 +F0.32196000000000002 +F0.64914099999999997 +F0.53922300000000001 +I0 +tp2459 +(dp2460 +g4 +F0.32196000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.987954 +sS'm' +F21.7012 +sg8 +F0.53922300000000001 +sg9 +F309.38650000000001 +sg10 +(lp2461 +L112299465L +aL112299466L +aL112299467L +aL112299468L +aL112299469L +asg12 +(lp2462 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64914099999999997 +sS't' +F53656.106124600003 +ss(F309.36153200000001 +F0.31861099999999998 +F0.79039099999999995 +F0.767293 +I0 +tp2463 +(dp2464 +g4 +F0.31861099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.44296200000000002 +sS'm' +F21.6829 +sg8 +F0.767293 +sg9 +F309.36153200000001 +sg10 +(lp2465 +L342827271L +aL342827272L +aL342827268L +aL342827269L +aL342827270L +asg12 +(lp2466 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.79039099999999995 +sS't' +F53243.254891999997 +ss(F309.365182 +F0.337368 +F0.98410600000000004 +F0.988093 +I0 +tp2467 +(dp2468 +g4 +F0.337368 +sg5 +I0 +sg6 +I0 +sg7 +F0.28618399999999999 +sS'm' +F22.3218 +sg8 +F0.988093 +sg9 +F309.365182 +sg10 +(lp2469 +L346465810L +aL346465811L +aL346465812L +aL346465813L +asg12 +(lp2470 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98410600000000004 +sS't' +F54007.121534799997 +ss(F309.38529999999997 +F0.331959 +F0.924037 +F1.03003 +I0 +tp2471 +(dp2472 +g4 +F0.331959 +sg5 +I0 +sg6 +I0 +sg7 +F1.4612700000000001 +sS'm' +F22.9907 +sg8 +F1.03003 +sg9 +F309.38529999999997 +sg10 +(lp2473 +L345222029L +aL345222030L +aL345222031L +aL345222032L +aL345222033L +asg12 +(lp2474 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.924037 +sS't' +F53673.081866599998 +ss(F309.38009499999998 +F0.34214600000000001 +F0.64901299999999995 +F0.53901699999999997 +I0 +tp2475 +(dp2476 +g4 +F0.34214600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.077120999999999995 +sS'm' +F18.680299999999999 +sg8 +F0.53901699999999997 +sg9 +F309.38009499999998 +sg10 +(lp2477 +L112296812L +aL112296813L +aL112296814L +aL112296815L +aL112296816L +aL112296817L +aL112296818L +aL112296819L +aL112296820L +aL112296821L +asg12 +(lp2478 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901299999999995 +sS't' +F53656.106106799998 +ss(F309.38780800000001 +F0.32191599999999998 +F0.47806599999999999 +F0.45940999999999999 +I0 +tp2479 +(dp2480 +g4 +F0.32191599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.8641200000000002 +sS'm' +F23.363399999999999 +sg8 +F0.45940999999999999 +sg9 +F309.38780800000001 +sg10 +(lp2481 +L344876341L +aL344876342L +aL344876343L +aL344876344L +aL344876345L +asg12 +(lp2482 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47806599999999999 +sS't' +F53668.1090387 +ss(F309.38890400000003 +F0.34375 +F0.74101700000000004 +F0.96001499999999995 +I0 +tp2483 +(dp2484 +g4 +F0.34375 +sg5 +I0 +sg6 +I0 +sg7 +F0.039972800000000003 +sS'm' +F16.1708 +sg8 +F0.96001499999999995 +sg9 +F309.38890400000003 +sg10 +(lp2485 +L344476098L +aL344476099L +aL344476100L +aL344476101L +aL344476102L +asg12 +(lp2486 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74101700000000004 +sS't' +F53644.1238906 +ss(F309.38262700000001 +F0.33968500000000001 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp2487 +(dp2488 +g4 +F0.33968500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.0623236 +sS'm' +F18.728000000000002 +sg8 +F1.1000099999999999 +sg9 +F309.38262700000001 +sg10 +(lp2489 +L345532241L +aL345532242L +aL345532243L +aL345532244L +aL345532245L +asg12 +(lp2490 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099781299999 +ss(F309.38010000000003 +F0.34215699999999999 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp2491 +(dp2492 +g4 +F0.34215699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.065177499999999999 +sS'm' +F18.6463 +sg8 +F0.95301000000000002 +sg9 +F309.38010000000003 +sg10 +(lp2493 +L343709485L +aL343709486L +aL343709487L +aL343709488L +aL343709489L +asg12 +(lp2494 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158755900004 +ss(F309.37238400000001 +F0.32414999999999999 +F1.01007 +F0.95311000000000001 +I0 +tp2495 +(dp2496 +g4 +F0.32414999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F5.2420099999999996 +sS'm' +F24.0899 +sg8 +F0.95311000000000001 +sg9 +F309.37238400000001 +sg10 +(lp2497 +L343715828L +aL343715829L +aL343715830L +aL343715831L +aL343715832L +asg12 +(lp2498 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01007 +sS't' +F53623.158734500001 +ss(F309.37775499999998 +F0.34561599999999998 +F0.77701299999999995 +F0.756216 +I0 +tp2499 +(dp2500 +g4 +F0.34561599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.96408300000000002 +sS'm' +F21.726700000000001 +sg8 +F0.756216 +sg9 +F309.37775499999998 +sg10 +(lp2501 +L342832298L +aL342832299L +aL342832300L +aL342832301L +aL342832302L +asg12 +(lp2502 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77701299999999995 +sS't' +F53243.255766399998 +ss(F309.38021500000002 +F0.34037200000000001 +F0.886741 +F1.1116699999999999 +I0 +tp2503 +(dp2504 +g4 +F0.34037200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.7062900000000001 +sS'm' +F24.572099999999999 +sg8 +F1.1116699999999999 +sg9 +F309.38021500000002 +sg10 +(lp2505 +L344144484L +aL344144485L +aL344144486L +aL344144487L +asg12 +(lp2506 +I1 +aI2 +aI3 +aI4 +asg14 +F0.886741 +sS't' +F53635.139872 +ss(F309.369843 +F0.34469899999999998 +F0.86510900000000002 +F0.90013799999999999 +I0 +tp2507 +(dp2508 +g4 +F0.34469899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.71941900000000003 +sS'm' +F23.1035 +sg8 +F0.90013799999999999 +sg9 +F309.369843 +sg10 +(lp2509 +L345814753L +aL345814754L +aL345814755L +aL345814756L +asg12 +(lp2510 +I1 +aI2 +aI3 +aI4 +asg14 +F0.86510900000000002 +sS't' +F53693.089975399998 +ss(F309.38890099999998 +F0.34377099999999999 +F0.616012 +F0.77501900000000001 +I0 +tp2511 +(dp2512 +g4 +F0.34377099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.037672900000000002 +sS'm' +F16.1873 +sg8 +F0.77501900000000001 +sg9 +F309.38890099999998 +sg10 +(lp2513 +L346166364L +aL346166365L +aL346166366L +aL346166367L +aL346166368L +asg12 +(lp2514 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.616012 +sS't' +F53704.071697699997 +ss(F309.36005699999998 +F0.32049 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp2515 +(dp2516 +g4 +F0.32049 +sg5 +I0 +sg6 +I0 +sg7 +F0.089257299999999998 +sS'm' +F19.594100000000001 +sg8 +F1.1000099999999999 +sg9 +F309.36005699999998 +sg10 +(lp2517 +L345531764L +aL345531765L +aL345531766L +aL345531767L +aL345531768L +asg12 +(lp2518 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099718600002 +ss(F309.37833499999999 +F0.33679599999999998 +F0.85664600000000002 +F0.91578499999999996 +I0 +tp2519 +(dp2520 +g4 +F0.33679599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.5071300000000001 +sS'm' +F23.044599999999999 +sg8 +F0.91578499999999996 +sg9 +F309.37833499999999 +sg10 +(lp2521 +L343874286L +aL343874287L +aL343874288L +aL343874289L +aL343874290L +asg12 +(lp2522 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85664600000000002 +sS't' +F53626.1449631 +ss(F309.38774699999999 +F0.32183699999999998 +F0.92644300000000002 +F1.0317099999999999 +I0 +tp2523 +(dp2524 +g4 +F0.32183699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.7722899999999999 +sS'm' +F23.203700000000001 +sg8 +F1.0317099999999999 +sg9 +F309.38774699999999 +sg10 +(lp2525 +L345224188L +aL345224189L +aL345224190L +aL345224191L +aL345224192L +asg12 +(lp2526 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92644300000000002 +sS't' +F53673.081873399999 +ss(F309.373088 +F0.32442599999999999 +F0.93309500000000001 +F0.87807900000000005 +I0 +tp2527 +(dp2528 +g4 +F0.32442599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.31344499999999997 +sS'm' +F22.485600000000002 +sg8 +F0.87807900000000005 +sg9 +F309.373088 +sg10 +(lp2529 +L345030712L +aL345030713L +aL345030714L +aL345030715L +asg12 +(lp2530 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93309500000000001 +sS't' +F53670.115510199998 +ss(F309.38888700000001 +F0.34375600000000001 +F0.41302899999999998 +F0.41203600000000001 +I0 +tp2531 +(dp2532 +g4 +F0.34375600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.037258800000000002 +sS'm' +F16.200299999999999 +sg8 +F0.41203600000000001 +sg9 +F309.38888700000001 +sg10 +(lp2533 +L345996175L +aL345996176L +aL345996177L +aL345996178L +aL345996179L +asg12 +(lp2534 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41302899999999998 +sS't' +F53703.093150599998 +ss(F309.36668400000002 +F0.335563 +F0.93656399999999995 +F0.88191399999999998 +I0 +tp2535 +(dp2536 +g4 +F0.335563 +sg5 +I0 +sg6 +I0 +sg7 +F1.1029 +sS'm' +F22.610299999999999 +sg8 +F0.88191399999999998 +sg9 +F309.36668400000002 +sg10 +(lp2537 +L345032107L +aL345032108L +aL345032109L +aL345032110L +aL345032111L +asg12 +(lp2538 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93656399999999995 +sS't' +F53670.113834000003 +ss(F309.37280399999997 +F0.33522800000000003 +F0.98400600000000005 +F0.98800500000000002 +I0 +tp2539 +(dp2540 +g4 +F0.33522800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.51330399999999998 +sS'm' +F21.779900000000001 +sg8 +F0.98800500000000002 +sg9 +F309.37280399999997 +sg10 +(lp2541 +L346462017L +aL346462018L +aL346462019L +aL346462020L +aL346462021L +asg12 +(lp2542 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400600000000005 +sS't' +F54007.119897600001 +ss(F309.38270699999998 +F0.33517599999999997 +F0.74900299999999997 +F0.97800600000000004 +I0 +tp2543 +(dp2544 +g4 +F0.33517599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.072821300000000005 +sS'm' +F19.445900000000002 +sg8 +F0.97800600000000004 +sg9 +F309.38270699999998 +sg10 +(lp2545 +L171378325L +aL171378326L +aL171378327L +aL171378328L +aL171378329L +aL171378330L +aL171378331L +aL171378332L +aL171378333L +aL171378334L +asg12 +(lp2546 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107175800003 +ss(F309.36776300000002 +F0.33362199999999997 +F1.05237 +F0.94688700000000003 +I0 +tp2547 +(dp2548 +g4 +F0.33362199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F5.9356099999999996 +sS'm' +F24.402899999999999 +sg8 +F0.94688700000000003 +sg9 +F309.36776300000002 +sg10 +(lp2549 +L346337799L +aL346337800L +aL346337801L +aL346337802L +aL346337803L +asg12 +(lp2550 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05237 +sS't' +F53974.159558500003 +ss(F309.377972 +F0.33785199999999999 +F0.92400800000000005 +F1.0300100000000001 +I0 +tp2551 +(dp2552 +g4 +F0.33785199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.051166499999999997 +sS'm' +F18.397400000000001 +sg8 +F1.0300100000000001 +sg9 +F309.377972 +sg10 +(lp2553 +L345217528L +aL345217529L +aL345217530L +aL345217531L +aL345217532L +asg12 +(lp2554 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400800000000005 +sS't' +F53673.081846300003 +ss(F309.38201800000002 +F0.34295199999999998 +F0.82804999999999995 +F0.94503300000000001 +I0 +tp2555 +(dp2556 +g4 +F0.34295199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.77656199999999997 +sS'm' +F22.186699999999998 +sg8 +F0.94503300000000001 +sg9 +F309.38201800000002 +sg10 +(lp2557 +L343120544L +aL343120545L +aL343120546L +aL343120547L +aL343120548L +asg12 +(lp2558 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82804999999999995 +sS't' +F53288.111782400003 +ss(F309.38794300000001 +F0.34222799999999998 +F1.05002 +F0.94401599999999997 +I0 +tp2559 +(dp2560 +g4 +F0.34222799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.83579499999999995 +sS'm' +F22.2254 +sg8 +F0.94401599999999997 +sg9 +F309.38794300000001 +sg10 +(lp2561 +L346329473L +aL346329474L +aL346329475L +aL346329476L +aL346329477L +asg12 +(lp2562 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159614600001 +ss(F309.36486600000001 +F0.33454400000000001 +F1.08022 +F1.0101599999999999 +I0 +tp2563 +(dp2564 +g4 +F0.33454400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.22417500000000001 +sS'm' +F22.2681 +sg8 +F1.0101599999999999 +sg9 +F309.36486600000001 +sg10 +(lp2565 +L345370092L +aL345370093L +aL345370094L +aL345370095L +aL345370091L +asg12 +(lp2566 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.08022 +sS't' +F53675.080357699997 +ss(F309.37308000000002 +F0.32444000000000001 +F1.01004 +F0.95305200000000001 +I0 +tp2567 +(dp2568 +g4 +F0.32444000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.377218 +sS'm' +F22.681899999999999 +sg8 +F0.95305200000000001 +sg9 +F309.37308000000002 +sg10 +(lp2569 +L343715820L +aL343715821L +aL343715822L +aL343715823L +asg12 +(lp2570 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01004 +sS't' +F53623.160394799997 +ss(F309.377951 +F0.33784199999999998 +F0.93300700000000003 +F0.87800800000000001 +I0 +tp2571 +(dp2572 +g4 +F0.33784199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.048084799999999997 +sS'm' +F18.361799999999999 +sg8 +F0.87800800000000001 +sg9 +F309.377951 +sg10 +(lp2573 +L345024640L +aL345024641L +aL345024642L +aL345024643L +aL345024644L +aL345024645L +aL345024646L +aL345024647L +aL345024648L +aL345024649L +asg12 +(lp2574 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.113865300002 +ss(F309.38934999999998 +F0.32216 +F0.82810799999999996 +F0.94507600000000003 +I0 +tp2575 +(dp2576 +g4 +F0.32216 +sg5 +I0 +sg6 +I0 +sg7 +F0.27228400000000003 +sS'm' +F22.339600000000001 +sg8 +F0.94507600000000003 +sg9 +F309.38934999999998 +sg10 +(lp2577 +L343127848L +aL343127849L +aL343127850L +aL343127851L +asg12 +(lp2578 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82810799999999996 +sS't' +F53288.113461200002 +ss(F309.37457000000001 +F0.31692399999999998 +F0.92120400000000002 +F1.1001799999999999 +I0 +tp2579 +(dp2580 +g4 +F0.31692399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.92855 +sS'm' +F23.396100000000001 +sg8 +F1.1001799999999999 +sg9 +F309.37457000000001 +sg10 +(lp2581 +L345539630L +aL345539631L +aL345539632L +aL345539633L +aL345539634L +asg12 +(lp2582 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92120400000000002 +sS't' +F53677.099758900004 +ss(F309.38242400000001 +F0.32451200000000002 +F0.92428999999999994 +F1.0303800000000001 +I0 +tp2583 +(dp2584 +g4 +F0.32451200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.15595100000000001 +sS'm' +F20.897300000000001 +sg8 +F1.0303800000000001 +sg9 +F309.38242400000001 +sg10 +(lp2585 +L345222022L +aL345222023L +aL345222020L +aL345222021L +asg12 +(lp2586 +I3 +aI4 +aI1 +aI2 +asg14 +F0.92428999999999994 +sS't' +F53673.081029300003 +ss(F309.36848600000002 +F0.33945999999999998 +F0.92729200000000001 +F1.0344899999999999 +I0 +tp2587 +(dp2588 +g4 +F0.33945999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.53932000000000002 +sS'm' +F23.158799999999999 +sg8 +F1.0344899999999999 +sg9 +F309.36848600000002 +sg10 +(lp2589 +L345225914L +aL345225915L +aL345225916L +asg12 +(lp2590 +I1 +aI2 +aI3 +asg14 +F0.92729200000000001 +sS't' +F53673.083478400004 +ss(F309.386505 +F0.32195699999999999 +F0.92101299999999997 +F1.10002 +I0 +tp2591 +(dp2592 +g4 +F0.32195699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.421788 +sS'm' +F21.752800000000001 +sg8 +F1.10002 +sg9 +F309.386505 +sg10 +(lp2593 +L345537442L +aL345537443L +aL345537444L +aL345537445L +aL345537446L +asg12 +(lp2594 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92101299999999997 +sS't' +F53677.099792100002 +ss(F309.360906 +F0.317637 +F0.85125200000000001 +F0.91311600000000004 +I0 +tp2595 +(dp2596 +g4 +F0.317637 +sg5 +I0 +sg6 +I0 +sg7 +F3.7634799999999999 +sS'm' +F23.6098 +sg8 +F0.91311600000000004 +sg9 +F309.360906 +sg10 +(lp2597 +L343878209L +aL343878210L +aL343878211L +aL343878212L +aL343878213L +asg12 +(lp2598 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85125200000000001 +sS't' +F53626.144914700002 +ss(F309.374326 +F0.3266 +F0.24811800000000001 +F0.34809099999999998 +I0 +tp2599 +(dp2600 +g4 +F0.3266 +sg5 +I0 +sg6 +I0 +sg7 +F2.1850100000000001 +sS'm' +F22.978400000000001 +sg8 +F0.34809099999999998 +sg9 +F309.374326 +sg10 +(lp2601 +L327905572L +aL327905573L +aL327905574L +aL327905575L +aL327905576L +asg12 +(lp2602 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24811800000000001 +sS't' +F53312.062938299998 +ss(F309.38261499999999 +F0.33970299999999998 +F0.47602100000000003 +F0.45402199999999998 +I0 +tp2603 +(dp2604 +g4 +F0.33970299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.066062700000000002 +sS'm' +F18.747699999999998 +sg8 +F0.45402199999999998 +sg9 +F309.38261499999999 +sg10 +(lp2605 +L344871389L +aL344871390L +aL344871391L +aL344871392L +aL344871393L +aL344871394L +aL344871395L +aL344871396L +aL344871397L +aL344871398L +asg12 +(lp2606 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602100000000003 +sS't' +F53668.1090243 +ss(F309.362413 +F0.31963000000000003 +F0.775084 +F0.75409300000000001 +I0 +tp2607 +(dp2608 +g4 +F0.31963000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.758853 +sS'm' +F21.6553 +sg8 +F0.75409300000000001 +sg9 +F309.362413 +sg10 +(lp2609 +L342827241L +aL342827242L +aL342827243L +aL342827244L +aL342827245L +asg12 +(lp2610 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.775084 +sS't' +F53243.255723800001 +ss(F309.36313699999999 +F0.33103399999999999 +F0.865008 +F0.90000599999999997 +I0 +tp2611 +(dp2612 +g4 +F0.33103399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.062137400000000002 +sS'm' +F18.8108 +sg8 +F0.90000599999999997 +sg9 +F309.36313699999999 +sg10 +(lp2613 +L345808897L +aL345808898L +aL345808899L +aL345808900L +aL345808901L +asg12 +(lp2614 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.865008 +sS't' +F53693.088298399998 +ss(F309.36522600000001 +F0.33733099999999999 +F0.82820800000000006 +F0.94536799999999999 +I0 +tp2615 +(dp2616 +g4 +F0.33733099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.22811 +sS'm' +F22.695799999999998 +sg8 +F0.94536799999999999 +sg9 +F309.36522600000001 +sg10 +(lp2617 +L343127520L +aL343127521L +aL343127522L +aL343127523L +aL343127524L +asg12 +(lp2618 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82820800000000006 +sS't' +F53288.111735699997 +ss(F309.380672 +F0.32851599999999997 +F1.0522499999999999 +F0.946546 +I0 +tp2619 +(dp2620 +g4 +F0.32851599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F4.0403099999999998 +sS'm' +F23.976700000000001 +sg8 +F0.946546 +sg9 +F309.380672 +sg10 +(lp2621 +L346337915L +aL346337916L +aL346337917L +aL346337918L +aL346337919L +asg12 +(lp2622 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0522499999999999 +sS't' +F53974.1595944 +ss(F309.36088599999999 +F0.31766899999999998 +F0.74117599999999995 +F0.96017200000000003 +I0 +tp2623 +(dp2624 +g4 +F0.31766899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.0956700000000001 +sS'm' +F24.1541 +sg8 +F0.96017200000000003 +sg9 +F309.36088599999999 +sg10 +(lp2625 +L344475483L +aL344475484L +aL344475485L +aL344475486L +aL344475487L +asg12 +(lp2626 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74117599999999995 +sS't' +F53644.123812700003 +ss(F309.36740700000001 +F0.32940199999999997 +F0.41403200000000001 +F0.41264000000000001 +I0 +tp2627 +(dp2628 +g4 +F0.32940199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.62033099999999997 +sS'm' +F22.7577 +sg8 +F0.41264000000000001 +sg9 +F309.36740700000001 +sg10 +(lp2629 +L346002753L +aL346002754L +aL346002755L +aL346002756L +asg12 +(lp2630 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41403200000000001 +sS't' +F53703.094749399999 +ss(F309.37196 +F0.34105799999999997 +F0.98401099999999997 +F0.98800900000000003 +I0 +tp2631 +(dp2632 +g4 +F0.34105799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.70384100000000005 +sS'm' +F22.138000000000002 +sg8 +F0.98800900000000003 +sg9 +F309.37196 +sg10 +(lp2633 +L346462007L +aL346462008L +aL346462009L +aL346462010L +aL346462011L +asg12 +(lp2634 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98401099999999997 +sS't' +F54007.119895199998 +ss(F309.38007599999997 +F0.34212799999999999 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp2635 +(dp2636 +g4 +F0.34212799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.0602298 +sS'm' +F18.6084 +sg8 +F1.1000099999999999 +sg9 +F309.38007599999997 +sg10 +(lp2637 +L345532256L +aL345532257L +aL345532258L +aL345532259L +aL345532260L +asg12 +(lp2638 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099774200004 +ss(F309.37279699999999 +F0.33522999999999997 +F0.82801999999999998 +F0.94501500000000005 +I0 +tp2639 +(dp2640 +g4 +F0.33522999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.65531399999999995 +sS'm' +F21.995000000000001 +sg8 +F0.94501500000000005 +sg9 +F309.37279699999999 +sg10 +(lp2641 +L343123174L +aL343123175L +aL343123176L +aL343123177L +aL343123178L +asg12 +(lp2642 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801999999999998 +sS't' +F53288.111756699996 +ss(F309.37898100000001 +F0.32704100000000003 +F0.41309699999999999 +F0.41210799999999997 +I0 +tp2643 +(dp2644 +g4 +F0.32704100000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.91378199999999998 +sS'm' +F21.9422 +sg8 +F0.41210799999999997 +sg9 +F309.37898100000001 +sg10 +(lp2645 +L346000988L +aL346000989L +aL346000990L +aL346000991L +aL346000992L +asg12 +(lp2646 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41309699999999999 +sS't' +F53703.0931231 +ss(F309.36005999999998 +F0.32051800000000003 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp2647 +(dp2648 +g4 +F0.32051800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.089068700000000001 +sS'm' +F19.629799999999999 +sg8 +F1.0100100000000001 +sg9 +F309.36005999999998 +sg10 +(lp2649 +L345365948L +aL345365949L +aL345365950L +aL345365951L +aL345365952L +asg12 +(lp2650 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.0786859 +ss(F309.374526 +F0.31691599999999998 +F0.88517500000000005 +F1.1102000000000001 +I0 +tp2651 +(dp2652 +g4 +F0.31691599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F5.0839400000000001 +sS'm' +F24.6691 +sg8 +F1.1102000000000001 +sg9 +F309.374526 +sg10 +(lp2653 +L344155596L +aL344155597L +aL344155598L +aL344155599L +aL344155600L +aL344155601L +aL344155602L +aL344155603L +aL344155604L +aL344155605L +asg12 +(lp2654 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88517500000000005 +sS't' +F53635.138197799999 +ss(F309.37773399999998 +F0.325627 +F0.74902299999999999 +F0.97801899999999997 +I0 +tp2655 +(dp2656 +g4 +F0.325627 +sg5 +I0 +sg6 +I0 +sg7 +F0.11369 +sS'm' +F21.683 +sg8 +F0.97801899999999997 +sg9 +F309.37773399999998 +sg10 +(lp2657 +L171381522L +aL171381523L +aL171381524L +aL171381525L +asg12 +(lp2658 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74902299999999999 +sS't' +F54005.108820499998 +ss(F309.36489799999998 +F0.33460699999999999 +F0.74134100000000003 +F0.96020099999999997 +I0 +tp2659 +(dp2660 +g4 +F0.33460699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.6600099999999998 +sS'm' +F24.542300000000001 +sg8 +F0.96020099999999997 +sg9 +F309.36489799999998 +sg10 +(lp2661 +L344482765L +aL344482766L +aL344482767L +aL344482768L +aL344482769L +asg12 +(lp2662 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74134100000000003 +sS't' +F53644.123823900001 +ss(F309.37419 +F0.32800200000000002 +F0.83339300000000005 +F0.94912399999999997 +I0 +tp2663 +(dp2664 +g4 +F0.32800200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.4201900000000001 +sS'm' +F22.8505 +sg8 +F0.94912399999999997 +sg9 +F309.37419 +sg10 +(lp2665 +L343126020L +aL343126021L +aL343126022L +aL343126023L +asg12 +(lp2666 +I0 +aI1 +aI2 +aI3 +asg14 +F0.83339300000000005 +sS't' +F53288.111760599997 +ss(F309.37238600000001 +F0.32414399999999999 +F0.64978499999999995 +F0.53946300000000003 +I0 +tp2667 +(dp2668 +g4 +F0.32414399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.60693299999999994 +sS'm' +F21.911300000000001 +sg8 +F0.53946300000000003 +sg9 +F309.37238600000001 +sg10 +(lp2669 +L112300734L +aL112300735L +aL112300736L +aL112300737L +asg12 +(lp2670 +I1 +aI2 +aI3 +aI4 +asg14 +F0.64978499999999995 +sS't' +F53656.1077439 +ss(F309.383667 +F0.34500700000000001 +F0.74900800000000001 +F0.97800799999999999 +I0 +tp2671 +(dp2672 +g4 +F0.34500700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.31397599999999998 +sS'm' +F21.468900000000001 +sg8 +F0.97800799999999999 +sg9 +F309.383667 +sg10 +(lp2673 +L171381633L +aL171381634L +aL171381635L +aL171381636L +aL171381637L +asg12 +(lp2674 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900800000000001 +sS't' +F54005.107178500002 +ss(F309.36505299999999 +F0.33013599999999999 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp2675 +(dp2676 +g4 +F0.33013599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.414211 +sS'm' +F21.3644 +sg8 +F0.99200699999999997 +sg9 +F309.36505299999999 +sg10 +(lp2677 +L342961824L +aL342961825L +aL342961826L +aL342961827L +aL342961828L +asg12 +(lp2678 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134557799996 +ss(F309.38889699999999 +F0.34376299999999999 +F0.92401699999999998 +F1.0300199999999999 +I0 +tp2679 +(dp2680 +g4 +F0.34376299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.016873200000000001 +sS'm' +F14.4366 +sg8 +F1.0300199999999999 +sg9 +F309.38889699999999 +sg10 +(lp2681 +L345217722L +aL345217723L +aL345217724L +aL345217715L +aL345217716L +aL345217717L +aL345217718L +aL345217719L +aL345217720L +aL345217721L +asg12 +(lp2682 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.92401699999999998 +sS't' +F53673.080218000003 +ss(F309.38890199999997 +F0.343754 +F0.47004000000000001 +F0.50303799999999999 +I0 +tp2683 +(dp2684 +g4 +F0.343754 +sg5 +I0 +sg6 +I0 +sg7 +F0.040913499999999998 +sS'm' +F16.287600000000001 +sg8 +F0.50303799999999999 +sg9 +F309.38890199999997 +sg10 +(lp2685 +L12884598L +aL12884599L +aL12884600L +aL12884601L +aL12884602L +aL12884603L +aL12884604L +aL12884605L +aL12884606L +aL12884607L +asg12 +(lp2686 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004000000000001 +sS't' +F53649.118539700001 +ss(F309.36503199999999 +F0.33015499999999998 +F0.41303099999999998 +F0.41203899999999999 +I0 +tp2687 +(dp2688 +g4 +F0.33015499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.52726899999999999 +sS'm' +F21.3033 +sg8 +F0.41203899999999999 +sg9 +F309.36503199999999 +sg10 +(lp2689 +L345997773L +aL345997774L +aL345997775L +aL345997776L +aL345997777L +asg12 +(lp2690 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41303099999999998 +sS't' +F53703.093084400003 +ss(F309.36675300000002 +F0.33560000000000001 +F0.74931300000000001 +F0.97818099999999997 +I0 +tp2691 +(dp2692 +g4 +F0.33560000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.41408 +sS'm' +F23.196999999999999 +sg8 +F0.97818099999999997 +sg9 +F309.36675300000002 +sg10 +(lp2693 +L171388667L +aL171388668L +aL171388669L +aL171388670L +aL171388671L +asg12 +(lp2694 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74931300000000001 +sS't' +F54005.107131500001 +ss(F309.378986 +F0.327011 +F0.77902000000000005 +F0.829017 +I0 +tp2695 +(dp2696 +g4 +F0.327011 +sg5 +I0 +sg6 +I0 +sg7 +F0.56622499999999998 +sS'm' +F21.397400000000001 +sg8 +F0.829017 +sg9 +F309.378986 +sg10 +(lp2697 +L343277232L +aL343277233L +aL343277234L +aL343277235L +aL343277236L +asg12 +(lp2698 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77902000000000005 +sS't' +F53302.107442699999 +ss(F309.368448 +F0.342169 +F1.01234 +F0.95751299999999995 +I0 +tp2699 +(dp2700 +g4 +F0.342169 +sg5 +I0 +sg6 +I0 +sg7 +F1.85615 +sS'm' +F24.436800000000002 +sg8 +F0.95751299999999995 +sg9 +F309.368448 +sg10 +(lp2701 +L343717307L +aL343717308L +aL343717309L +aL343717310L +asg12 +(lp2702 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01234 +sS't' +F53623.160382000002 +ss(F309.37299899999999 +F0.320187 +F0.82834099999999999 +F0.94517600000000002 +I0 +tp2703 +(dp2704 +g4 +F0.320187 +sg5 +I0 +sg6 +I0 +sg7 +F1.64341 +sS'm' +F23.017499999999998 +sg8 +F0.94517600000000002 +sg9 +F309.37299899999999 +sg10 +(lp2705 +L343127660L +aL343127661L +aL343127662L +aL343127663L +aL343127664L +asg12 +(lp2706 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82834099999999999 +sS't' +F53288.111757300001 +ss(F309.36635200000001 +F0.34081499999999998 +F0.77501500000000001 +F0.75402899999999995 +I0 +tp2707 +(dp2708 +g4 +F0.34081499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.067033899999999993 +sS'm' +F18.366800000000001 +sg8 +F0.75402899999999995 +sg9 +F309.36635200000001 +sg10 +(lp2709 +L342825639L +aL342825640L +aL342825641L +aL342825642L +aL342825643L +asg12 +(lp2710 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501500000000001 +sS't' +F53243.255734699997 +ss(F309.36914200000001 +F0.34574300000000002 +F0.77529099999999995 +F0.75454200000000005 +I0 +tp2711 +(dp2712 +g4 +F0.34574300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.2082100000000002 +sS'm' +F24.103400000000001 +sg8 +F0.75454200000000005 +sg9 +F309.36914200000001 +sg10 +(lp2713 +L342832219L +aL342832220L +aL342832221L +aL342832222L +asg12 +(lp2714 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77529099999999995 +sS't' +F53243.257400900002 +ss(F309.37471699999998 +F0.331702 +F0.24806300000000001 +F0.34804499999999999 +I0 +tp2715 +(dp2716 +g4 +F0.331702 +sg5 +I0 +sg6 +I0 +sg7 +F0.029977199999999999 +sS'm' +F15.9704 +sg8 +F0.34804499999999999 +sg9 +F309.37471699999998 +sg10 +(lp2717 +L327902050L +aL327902051L +aL327902052L +aL327902053L +aL327902054L +asg12 +(lp2718 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24806300000000001 +sS't' +F53312.062939399999 +ss(F309.37897700000002 +F0.32703399999999999 +F0.92401500000000003 +F1.0300199999999999 +I0 +tp2719 +(dp2720 +g4 +F0.32703399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.32602999999999999 +sS'm' +F21.294 +sg8 +F1.0300199999999999 +sg9 +F309.37897700000002 +sg10 +(lp2721 +L345220166L +aL345220167L +aL345220172L +aL345220173L +aL345220174L +aL345220175L +aL345220168L +aL345220169L +aL345220170L +aL345220171L +asg12 +(lp2722 +I0 +aI1 +aI1 +aI2 +aI3 +aI4 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.92401500000000003 +sS't' +F53673.081849100003 +ss(F309.36634099999998 +F0.34079999999999999 +F0.50607599999999997 +F0.45912399999999998 +I0 +tp2723 +(dp2724 +g4 +F0.34079999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.064668000000000003 +sS'm' +F18.354299999999999 +sg8 +F0.45912399999999998 +sg9 +F309.36634099999998 +sg10 +(lp2725 +L153250101L +aL153250102L +aL153250103L +aL153250104L +aL153250105L +asg12 +(lp2726 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50607599999999997 +sS't' +F53702.083954399997 +ss(F309.36992199999997 +F0.33448600000000001 +F1.08013 +F1.0100800000000001 +I0 +tp2727 +(dp2728 +g4 +F0.33448600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.55558 +sS'm' +F23.226600000000001 +sg8 +F1.0100800000000001 +sg9 +F309.36992199999997 +sg10 +(lp2729 +L345370179L +aL345370180L +aL345370181L +aL345370182L +aL345370183L +asg12 +(lp2730 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08013 +sS't' +F53675.078713299998 +ss(F309.382026 +F0.34298800000000002 +F0.98403200000000002 +F0.98802800000000002 +I0 +tp2731 +(dp2732 +g4 +F0.34298800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.73669499999999999 +sS'm' +F22.242999999999999 +sg8 +F0.98802800000000002 +sg9 +F309.382026 +sg10 +(lp2733 +L346459518L +aL346459519L +aL346459520L +aL346459521L +aL346459522L +asg12 +(lp2734 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98403200000000002 +sS't' +F54007.1199232 +ss(F309.360071 +F0.320488 +F0.77900499999999995 +F0.82900600000000002 +I0 +tp2735 +(dp2736 +g4 +F0.320488 +sg5 +I0 +sg6 +I0 +sg7 +F0.0338204 +sS'm' +F17.814900000000002 +sg8 +F0.82900600000000002 +sg9 +F309.360071 +sg10 +(lp2737 +L343273183L +aL343273184L +aL343273185L +aL343273186L +aL343273182L +asg12 +(lp2738 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.77900499999999995 +sS't' +F53302.109048600003 +ss(F309.36146600000001 +F0.31857000000000002 +F0.78232299999999999 +F0.83237700000000003 +I0 +tp2739 +(dp2740 +g4 +F0.31857000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.0101300000000002 +sS'm' +F23.205300000000001 +sg8 +F0.83237700000000003 +sg9 +F309.36146600000001 +sg10 +(lp2741 +L343277134L +aL343277135L +aL343277136L +aL343277137L +aL343277138L +asg12 +(lp2742 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.78232299999999999 +sS't' +F53302.1073941 +ss(F309.38269500000001 +F0.33517400000000003 +F0.24806400000000001 +F0.34804600000000002 +I0 +tp2743 +(dp2744 +g4 +F0.33517400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.102869 +sS'm' +F19.462299999999999 +sg8 +F0.34804600000000002 +sg9 +F309.38269500000001 +sg10 +(lp2745 +L327903751L +aL327903752L +aL327903753L +aL327903754L +aL327903755L +asg12 +(lp2746 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24806400000000001 +sS't' +F53312.0629615 +ss(F309.36240700000002 +F0.31964300000000001 +F1.0100199999999999 +F0.99201799999999996 +I0 +tp2747 +(dp2748 +g4 +F0.31964300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.3806500000000002 +sS'm' +F23.3141 +sg8 +F0.99201799999999996 +sg9 +F309.36240700000002 +sg10 +(lp2749 +L342965957L +aL342965958L +aL342965959L +aL342965960L +aL342965961L +aL342965962L +aL342965963L +aL342965964L +aL342965965L +aL342965966L +asg12 +(lp2750 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100199999999999 +sS't' +F53270.134550499999 +ss(F309.37773600000003 +F0.32563300000000001 +F1.08002 +F1.0100199999999999 +I0 +tp2751 +(dp2752 +g4 +F0.32563300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.4958200000000001 +sS'm' +F23.7498 +sg8 +F1.0100199999999999 +sg9 +F309.37773600000003 +sg10 +(lp2753 +L345366356L +aL345366357L +aL345366358L +aL345366359L +aL345366360L +asg12 +(lp2754 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08002 +sS't' +F53675.078735000003 +ss(F309.37305500000002 +F0.32017000000000001 +F1.01206 +F0.95512699999999995 +I0 +tp2755 +(dp2756 +g4 +F0.32017000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.73126500000000005 +sS'm' +F23.419 +sg8 +F0.95512699999999995 +sg9 +F309.37305500000002 +sg10 +(lp2757 +L343717360L +aL343717361L +aL343717362L +aL343717363L +asg12 +(lp2758 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01206 +sS't' +F53623.160394799997 +ss(F309.36599999999999 +F0.33174300000000001 +F1.0100100000000001 +F0.992008 +I0 +tp2759 +(dp2760 +g4 +F0.33174300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.189718 +sS'm' +F20.428699999999999 +sg8 +F0.992008 +sg9 +F309.36599999999999 +sg10 +(lp2761 +L342961829L +aL342961830L +aL342961831L +aL342961832L +aL342961833L +asg12 +(lp2762 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134560400002 +ss(F309.36311799999999 +F0.33104699999999998 +F0.47004299999999999 +F0.50304000000000004 +I0 +tp2763 +(dp2764 +g4 +F0.33104699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.16082299999999999 +sS'm' +F18.930900000000001 +sg8 +F0.50304000000000004 +sg9 +F309.36311799999999 +sg10 +(lp2765 +L12885213L +aL12885214L +aL12885215L +aL12885216L +aL12885217L +aL12885218L +aL12885219L +aL12885220L +aL12885221L +aL12885222L +asg12 +(lp2766 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004299999999999 +sS't' +F53649.118468000001 +ss(F309.38622800000002 +F0.33888699999999999 +F0.61714599999999997 +F0.77554500000000004 +I0 +tp2767 +(dp2768 +g4 +F0.33888699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.51242200000000004 +sS'm' +F22.827200000000001 +sg8 +F0.77554500000000004 +sg9 +F309.38622800000002 +sg10 +(lp2769 +L346171743L +aL346171744L +aL346171745L +aL346171746L +asg12 +(lp2770 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61714599999999997 +sS't' +F53704.073348700003 +ss(F309.38749200000001 +F0.33272099999999999 +F0.85124900000000003 +F0.913219 +I0 +tp2771 +(dp2772 +g4 +F0.33272099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.9787300000000001 +sS'm' +F23.341899999999999 +sg8 +F0.913219 +sg9 +F309.38749200000001 +sg10 +(lp2773 +L343882250L +aL343882251L +aL343882252L +aL343882253L +asg12 +(lp2774 +I0 +aI2 +aI3 +aI4 +asg14 +F0.85124900000000003 +sS't' +F53626.144988499997 +ss(F309.38005500000003 +F0.34215299999999998 +F0.41302499999999998 +F0.41203400000000001 +I0 +tp2775 +(dp2776 +g4 +F0.34215299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.067476599999999998 +sS'm' +F18.639199999999999 +sg8 +F0.41203400000000001 +sg9 +F309.38005500000003 +sg10 +(lp2777 +L345997975L +aL345997976L +aL345997977L +aL345997978L +aL345997979L +aL345997980L +aL345997981L +aL345997982L +aL345997983L +aL345997984L +asg12 +(lp2778 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41302499999999998 +sS't' +F53703.093126100001 +ss(F309.37431800000002 +F0.32658399999999999 +F0.741008 +F0.960009 +I0 +tp2779 +(dp2780 +g4 +F0.32658399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.07599 +sS'm' +F22.930299999999999 +sg8 +F0.960009 +sg9 +F309.37431800000002 +sg10 +(lp2781 +L344478885L +aL344478886L +aL344478887L +aL344478888L +aL344478889L +asg12 +(lp2782 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.741008 +sS't' +F53644.123850000004 +ss(F309.38620900000001 +F0.33891300000000002 +F0.74912500000000004 +F0.97806000000000004 +I0 +tp2783 +(dp2784 +g4 +F0.33891300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.33744 +sS'm' +F23.130299999999998 +sg8 +F0.97806000000000004 +sg9 +F309.38620900000001 +sg10 +(lp2785 +L171381668L +aL171381669L +aL171381670L +aL171381671L +aL171381672L +asg12 +(lp2786 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74912500000000004 +sS't' +F54005.107185599998 +ss(F309.36632500000002 +F0.34081099999999998 +F0.74100500000000002 +F0.96000600000000003 +I0 +tp2787 +(dp2788 +g4 +F0.34081099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.051908799999999998 +sS'm' +F18.367999999999999 +sg8 +F0.96000600000000003 +sg9 +F309.36632500000002 +sg10 +(lp2789 +L344475637L +aL344475638L +aL344475639L +aL344475640L +aL344475641L +asg12 +(lp2790 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100500000000002 +sS't' +F53644.123827800002 +ss(F309.36925200000002 +F0.31896200000000002 +F0.82801400000000003 +F0.94501299999999999 +I0 +tp2791 +(dp2792 +g4 +F0.31896200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.36901099999999998 +sS'm' +F21.343599999999999 +sg8 +F0.94501299999999999 +sg9 +F309.36925200000002 +sg10 +(lp2793 +L343123090L +aL343123091L +aL343123092L +aL343123093L +aL343123094L +asg12 +(lp2794 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801400000000003 +sS't' +F53288.111746900002 +ss(F309.36814500000003 +F0.34607300000000002 +F0.86582800000000004 +F0.90028600000000003 +I0 +tp2795 +(dp2796 +g4 +F0.34607300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.1620300000000001 +sS'm' +F23.260899999999999 +sg8 +F0.90028600000000003 +sg9 +F309.36814500000003 +sg10 +(lp2797 +L345814766L +aL345814767L +aL345814768L +aL345814769L +aL345814770L +asg12 +(lp2798 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86582800000000004 +sS't' +F53693.088312300002 +ss(F309.38076699999999 +F0.34445300000000001 +F0.77954500000000004 +F0.829287 +I0 +tp2799 +(dp2800 +g4 +F0.34445300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.2946599999999999 +sS'm' +F23.1904 +sg8 +F0.829287 +sg9 +F309.38076699999999 +sg10 +(lp2801 +L343279021L +aL343279022L +aL343279023L +aL343279024L +asg12 +(lp2802 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77954500000000004 +sS't' +F53302.109106099997 +ss(F309.38235300000002 +F0.32449299999999998 +F0.85118799999999994 +F0.91325999999999996 +I0 +tp2803 +(dp2804 +g4 +F0.32449299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.94475600000000004 +sS'm' +F22.889399999999998 +sg8 +F0.91325999999999996 +sg9 +F309.38235300000002 +sg10 +(lp2805 +L343878402L +aL343878403L +aL343878404L +aL343878405L +asg12 +(lp2806 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85118799999999994 +sS't' +F53626.146632700002 +ss(F309.360074 +F0.32049299999999997 +F0.98400600000000005 +F0.98800500000000002 +I0 +tp2807 +(dp2808 +g4 +F0.32049299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.104654 +sS'm' +F19.7331 +sg8 +F0.98800500000000002 +sg9 +F309.360074 +sg10 +(lp2809 +L346461736L +aL346461737L +aL346461738L +aL346461739L +aL346461740L +asg12 +(lp2810 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400600000000005 +sS't' +F54007.119862200001 +ss(F309.373109 +F0.31741999999999998 +F1.0135700000000001 +F0.95586899999999997 +I0 +tp2811 +(dp2812 +g4 +F0.31741999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.6324200000000002 +sS'm' +F23.3292 +sg8 +F0.95586899999999997 +sg9 +F309.373109 +sg10 +(lp2813 +L343717394L +aL343717395L +aL343717396L +aL343717397L +aL343717398L +asg12 +(lp2814 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0135700000000001 +sS't' +F53623.158736500001 +ss(F309.36398500000001 +F0.31755 +F0.50639699999999999 +F0.459455 +I0 +tp2815 +(dp2816 +g4 +F0.31755 +sg5 +I0 +sg6 +I0 +sg7 +F2.5002800000000001 +sS'm' +F22.425999999999998 +sg8 +F0.459455 +sg9 +F309.36398500000001 +sg10 +(lp2817 +L153250029L +aL153250030L +aL153250031L +aL153250032L +aL153250033L +asg12 +(lp2818 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50639699999999999 +sS't' +F53702.083947899999 +ss(F309.36994800000002 +F0.33456799999999998 +F0.421514 +F0.42088300000000001 +I0 +tp2819 +(dp2820 +g4 +F0.33456799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.55389100000000002 +sS'm' +F22.6326 +sg8 +F0.42088300000000001 +sg9 +F309.36994800000002 +sg10 +(lp2821 +L346002775L +aL346002776L +aL346002777L +aL346002778L +asg12 +(lp2822 +I1 +aI2 +aI3 +aI4 +asg14 +F0.421514 +sS't' +F53703.094756500002 +ss(F309.36088000000001 +F0.31764999999999999 +F0.82809100000000002 +F0.94508400000000004 +I0 +tp2823 +(dp2824 +g4 +F0.31764999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.18451100000000001 +sS'm' +F21.9754 +sg8 +F0.94508400000000004 +sg9 +F309.36088000000001 +sg10 +(lp2825 +L343122954L +aL343122955L +aL343122956L +aL343122957L +asg12 +(lp2826 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82809100000000002 +sS't' +F53288.113382099997 +ss(F309.38077700000002 +F0.34454200000000001 +F0.88514499999999996 +F1.1101000000000001 +I0 +tp2827 +(dp2828 +g4 +F0.34454200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.56547499999999995 +sS'm' +F23.355599999999999 +sg8 +F1.1101000000000001 +sg9 +F309.38077700000002 +sg10 +(lp2829 +L344155691L +aL344155692L +aL344155693L +aL344155694L +asg12 +(lp2830 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88514499999999996 +sS't' +F53635.139873599997 +ss(F309.382024 +F0.34297299999999997 +F0.92102300000000004 +F1.10002 +I0 +tp2831 +(dp2832 +g4 +F0.34297299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.55784100000000003 +sS'm' +F22.061299999999999 +sg8 +F1.10002 +sg9 +F309.382024 +sg10 +(lp2833 +L345532261L +aL345532262L +aL345532263L +aL345532264L +aL345532265L +asg12 +(lp2834 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92102300000000004 +sS't' +F53677.099779600001 +ss(F309.37095799999997 +F0.33695000000000003 +F0.85157400000000005 +F0.91327800000000003 +I0 +tp2835 +(dp2836 +g4 +F0.33695000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.32011699999999998 +sS'm' +F20.173100000000002 +sg8 +F0.91327800000000003 +sg9 +F309.37095799999997 +sg10 +(lp2837 +L343883538L +aL343883535L +aL343883536L +aL343883537L +asg12 +(lp2838 +I4 +aI0 +aI2 +aI3 +asg14 +F0.85157400000000005 +sS't' +F53626.145771900003 +ss(F309.38275299999998 +F0.325741 +F0.77902300000000002 +F0.82902600000000004 +I0 +tp2839 +(dp2840 +g4 +F0.325741 +sg5 +I0 +sg6 +I0 +sg7 +F0.0532457 +sS'm' +F19.488 +sg8 +F0.82902600000000004 +sg9 +F309.38275299999998 +sg10 +(lp2841 +L343275292L +aL343275293L +aL343275284L +aL343275285L +aL343275286L +aL343275287L +aL343275288L +aL343275289L +aL343275290L +aL343275291L +asg12 +(lp2842 +I3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.77902300000000002 +sS't' +F53302.106623899999 +ss(F309.38651399999998 +F0.321992 +F1.0100199999999999 +F0.99202699999999999 +I0 +tp2843 +(dp2844 +g4 +F0.321992 +sg5 +I0 +sg6 +I0 +sg7 +F0.69874499999999995 +sS'm' +F21.957699999999999 +sg8 +F0.99202699999999999 +sg9 +F309.38651399999998 +sg10 +(lp2845 +L342968348L +aL342968349L +aL342968350L +aL342968351L +aL342968352L +asg12 +(lp2846 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100199999999999 +sS't' +F53270.134617399999 +ss(F309.362391 +F0.319635 +F0.82802200000000004 +F0.94501900000000005 +I0 +tp2847 +(dp2848 +g4 +F0.319635 +sg5 +I0 +sg6 +I0 +sg7 +F1.5025299999999999 +sS'm' +F22.919899999999998 +sg8 +F0.94501900000000005 +sg9 +F309.362391 +sg10 +(lp2849 +L343122939L +aL343122940L +aL343122941L +aL343122942L +aL343122943L +asg12 +(lp2850 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82802200000000004 +sS't' +F53288.111727800002 +ss(F309.38366200000002 +F0.34500900000000001 +F0.61603300000000005 +F0.77503200000000005 +I0 +tp2851 +(dp2852 +g4 +F0.34500900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.48807299999999998 +sS'm' +F21.3626 +sg8 +F0.77503200000000005 +sg9 +F309.38366200000002 +sg10 +(lp2853 +L346171723L +aL346171724L +aL346171725L +aL346171726L +aL346171727L +asg12 +(lp2854 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61603300000000005 +sS't' +F53704.071683200003 +ss(F309.36914999999999 +F0.34574500000000002 +F0.984093 +F0.98808200000000002 +I0 +tp2855 +(dp2856 +g4 +F0.34574500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.53839400000000004 +sS'm' +F23.021100000000001 +sg8 +F0.98808200000000002 +sg9 +F309.36914999999999 +sg10 +(lp2857 +L346459246L +aL346459247L +aL346459248L +aL346459249L +asg12 +(lp2858 +I1 +aI2 +aI3 +aI4 +asg14 +F0.984093 +sS't' +F54007.121545900001 +ss(F309.37280399999997 +F0.33522299999999999 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp2859 +(dp2860 +g4 +F0.33522299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.381517 +sS'm' +F21.778700000000001 +sg8 +F1.0700099999999999 +sg9 +F309.37280399999997 +sg10 +(lp2861 +L345679196L +aL345679197L +aL345679198L +aL345679199L +aL345679200L +asg12 +(lp2862 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.0864191 +ss(F309.38396399999999 +F0.31878099999999998 +F0.93566000000000005 +F0.88065099999999996 +I0 +tp2863 +(dp2864 +g4 +F0.31878099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.44008199999999997 +sS'm' +F23.184999999999999 +sg8 +F0.88065099999999996 +sg9 +F309.38396399999999 +sg10 +(lp2865 +L345032242L +aL345032243L +aL345032244L +aL345032245L +asg12 +(lp2866 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93566000000000005 +sS't' +F53670.115540400002 +ss(F309.38891599999999 +F0.34377200000000002 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp2867 +(dp2868 +g4 +F0.34377200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.042812999999999997 +sS'm' +F16.2136 +sg8 +F0.95301000000000002 +sg9 +F309.38891599999999 +sg10 +(lp2869 +L343709601L +aL343709602L +aL343709603L +aL343709604L +aL343709605L +asg12 +(lp2870 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158780400001 +ss(F309.38217100000003 +F0.321745 +F0.24809899999999999 +F0.34806399999999998 +I0 +tp2871 +(dp2872 +g4 +F0.321745 +sg5 +I0 +sg6 +I0 +sg7 +F0.31001800000000002 +sS'm' +F20.809200000000001 +sg8 +F0.34806399999999998 +sg9 +F309.38217100000003 +sg10 +(lp2873 +L327903726L +aL327903727L +aL327903728L +aL327903729L +aL327903730L +asg12 +(lp2874 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24809899999999999 +sS't' +F53312.062960099996 +ss(F309.35981099999998 +F0.32509199999999999 +F0.50613799999999998 +F0.45920299999999997 +I0 +tp2875 +(dp2876 +g4 +F0.32509199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.10405499999999999 +sS'm' +F20.591699999999999 +sg8 +F0.45920299999999997 +sg9 +F309.35981099999998 +sg10 +(lp2877 +L153252610L +aL153252611L +aL153252612L +aL153252613L +asg12 +(lp2878 +I1 +aI2 +aI3 +aI4 +asg14 +F0.50613799999999998 +sS't' +F53702.085594700002 +ss(F309.37097799999998 +F0.330426 +F0.86535600000000001 +F0.90049299999999999 +I0 +tp2879 +(dp2880 +g4 +F0.330426 +sg5 +I0 +sg6 +I0 +sg7 +F4.6442600000000001 +sS'm' +F24.1023 +sg8 +F0.90049299999999999 +sg9 +F309.37097799999998 +sg10 +(lp2881 +L345814828L +aL345814829L +aL345814830L +aL345814831L +asg12 +(lp2882 +I0 +aI1 +aI2 +aI3 +asg14 +F0.86535600000000001 +sS't' +F53693.088320100003 +ss(F309.37773099999998 +F0.32560699999999998 +F1.01003 +F0.95303499999999997 +I0 +tp2883 +(dp2884 +g4 +F0.32560699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.1978900000000001 +sS'm' +F23.141999999999999 +sg8 +F0.95303499999999997 +sg9 +F309.37773099999998 +sg10 +(lp2885 +L343712169L +aL343712170L +aL343712171L +aL343712172L +aL343712173L +asg12 +(lp2886 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01003 +sS't' +F53623.158749299997 +ss(F309.37300299999998 +F0.32020100000000001 +F0.741228 +F0.96015399999999995 +I0 +tp2887 +(dp2888 +g4 +F0.32020100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.14819 +sS'm' +F23.697399999999998 +sg8 +F0.96015399999999995 +sg9 +F309.37300299999998 +sg10 +(lp2889 +L344482923L +aL344482924L +aL344482925L +aL344482926L +aL344482927L +asg12 +(lp2890 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.741228 +sS't' +F53644.123846399998 +ss(F309.37570799999997 +F0.34617399999999998 +F0.61673100000000003 +F0.77570300000000003 +I0 +tp2891 +(dp2892 +g4 +F0.34617399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.40898600000000002 +sS'm' +F22.597000000000001 +sg8 +F0.77570300000000003 +sg9 +F309.37570799999997 +sg10 +(lp2893 +L346172144L +aL346172145L +aL346172146L +asg12 +(lp2894 +I1 +aI2 +aI3 +asg14 +F0.61673100000000003 +sS't' +F53704.073319499999 +ss(F309.38896399999999 +F0.34517100000000001 +F0.828013 +F0.94501100000000005 +I0 +tp2895 +(dp2896 +g4 +F0.34517100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.276063 +sS'm' +F20.808499999999999 +sg8 +F0.94501100000000005 +sg9 +F309.38896399999999 +sg10 +(lp2897 +L343120733L +aL343120734L +aL343120735L +aL343120736L +aL343120737L +asg12 +(lp2898 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828013 +sS't' +F53288.111801699997 +ss(F309.37307399999997 +F0.324438 +F0.77905500000000005 +F0.829036 +I0 +tp2899 +(dp2900 +g4 +F0.324438 +sg5 +I0 +sg6 +I0 +sg7 +F3.2709199999999998 +sS'm' +F23.325099999999999 +sg8 +F0.829036 +sg9 +F309.37307399999997 +sg10 +(lp2901 +L343278906L +aL343278907L +aL343278908L +aL343278909L +aL343278910L +asg12 +(lp2902 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77905500000000005 +sS't' +F53302.107426299997 +ss(F309.38530400000002 +F0.33198299999999997 +F0.61609000000000003 +F0.77506299999999995 +I0 +tp2903 +(dp2904 +g4 +F0.33198299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.795296 +sS'm' +F21.914999999999999 +sg8 +F0.77506299999999995 +sg9 +F309.38530400000002 +sg10 +(lp2905 +L346171358L +aL346171359L +aL346171360L +aL346171361L +aL346171362L +aL346171363L +aL346171364L +aL346171365L +aL346171366L +aL346171367L +asg12 +(lp2906 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61609000000000003 +sS't' +F53704.071687700001 +ss(F309.36400900000001 +F0.31757800000000003 +F0.24849399999999999 +F0.34838400000000003 +I0 +tp2907 +(dp2908 +g4 +F0.31757800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.92260500000000001 +sS'm' +F22.0319 +sg8 +F0.34838400000000003 +sg9 +F309.36400900000001 +sg10 +(lp2909 +L327903466L +aL327903467L +aL327903468L +aL327903469L +aL327903470L +asg12 +(lp2910 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24849399999999999 +sS't' +F53312.062909599998 +ss(F309.38563299999998 +F0.32636300000000001 +F0.98404999999999998 +F0.98804800000000004 +I0 +tp2911 +(dp2912 +g4 +F0.32636300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.17512 +sS'm' +F21.763500000000001 +sg8 +F0.98804800000000004 +sg9 +F309.38563299999998 +sg10 +(lp2913 +L346466069L +aL346466070L +aL346466071L +aL346466072L +asg12 +(lp2914 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98404999999999998 +sS't' +F54007.121591700001 +ss(F309.37472400000001 +F0.33170699999999997 +F0.41303499999999999 +F0.412047 +I0 +tp2915 +(dp2916 +g4 +F0.33170699999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.036750100000000001 +sS'm' +F15.973100000000001 +sg8 +F0.412047 +sg9 +F309.37472400000001 +sg10 +(lp2917 +L345996079L +aL345996080L +aL345996081L +aL345996082L +aL345996083L +asg12 +(lp2918 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41303499999999999 +sS't' +F53703.093111299997 +ss(F309.37473999999997 +F0.33171899999999999 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp2919 +(dp2920 +g4 +F0.33171899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.049279099999999999 +sS'm' +F15.9503 +sg8 +F0.99200699999999997 +sg9 +F309.37473999999997 +sg10 +(lp2921 +L342962039L +aL342962040L +aL342962041L +aL342962042L +aL342962043L +asg12 +(lp2922 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134584699998 +ss(F309.38540799999998 +F0.34014299999999997 +F0.88502599999999998 +F1.11002 +I0 +tp2923 +(dp2924 +g4 +F0.34014299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.38964100000000002 +sS'm' +F21.815999999999999 +sg8 +F1.11002 +sg9 +F309.38540799999998 +sg10 +(lp2925 +L344152657L +aL344152658L +aL344152659L +aL344152660L +aL344152661L +asg12 +(lp2926 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88502599999999998 +sS't' +F53635.138228000003 +ss(F309.36312800000002 +F0.331044 +F0.98400500000000002 +F0.98800500000000002 +I0 +tp2927 +(dp2928 +g4 +F0.331044 +sg5 +I0 +sg6 +I0 +sg7 +F0.067832799999999999 +sS'm' +F18.841899999999999 +sg8 +F0.98800500000000002 +sg9 +F309.36312800000002 +sg10 +(lp2929 +L346459182L +aL346459183L +aL346459184L +aL346459185L +aL346459186L +asg12 +(lp2930 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.1198707 +ss(F309.382723 +F0.33514899999999997 +F0.85100399999999998 +F0.91300899999999996 +I0 +tp2931 +(dp2932 +g4 +F0.33514899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.106574 +sS'm' +F19.476800000000001 +sg8 +F0.91300899999999996 +sg9 +F309.382723 +sg10 +(lp2933 +L343876313L +aL343876314L +aL343876315L +aL343876316L +aL343876317L +asg12 +(lp2934 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100399999999998 +sS't' +F53626.144975299998 +ss(F309.382025 +F0.34300999999999998 +F1.08003 +F1.01003 +I0 +tp2935 +(dp2936 +g4 +F0.34300999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.71672 +sS'm' +F23.331600000000002 +sg8 +F1.01003 +sg9 +F309.382025 +sg10 +(lp2937 +L345363737L +aL345363738L +aL345363739L +aL345363740L +aL345363741L +asg12 +(lp2938 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08003 +sS't' +F53675.078746899999 +ss(F309.36634299999997 +F0.340812 +F0.74100600000000005 +F0.96000700000000005 +I0 +tp2939 +(dp2940 +g4 +F0.340812 +sg5 +I0 +sg6 +I0 +sg7 +F0.051911600000000002 +sS'm' +F18.367599999999999 +sg8 +F0.96000700000000005 +sg9 +F309.36634299999997 +sg10 +(lp2941 +L344475632L +aL344475633L +aL344475634L +aL344475635L +aL344475636L +asg12 +(lp2942 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.123827900003 +ss(F309.37327399999998 +F0.32952399999999998 +F1.09378 +F1.0730999999999999 +I0 +tp2943 +(dp2944 +g4 +F0.32952399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.20397 +sS'm' +F25.015599999999999 +sg8 +F1.0730999999999999 +sg9 +F309.37327399999998 +sg10 +(lp2945 +L345685760L +aL345685761L +aL345685762L +aL345685763L +asg12 +(lp2946 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09378 +sS't' +F53680.0880789 +ss(F309.36914200000001 +F0.34574300000000002 +F0.77526499999999998 +F0.75429199999999996 +I0 +tp2947 +(dp2948 +g4 +F0.34574300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.3555099999999998 +sS'm' +F24.140799999999999 +sg8 +F0.75429199999999996 +sg9 +F309.36914200000001 +sg10 +(lp2949 +L342832211L +aL342832212L +aL342832213L +aL342832214L +asg12 +(lp2950 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77526499999999998 +sS't' +F53243.257400900002 +ss(F309.3827 +F0.33516000000000001 +F0.82801199999999997 +F0.94500899999999999 +I0 +tp2951 +(dp2952 +g4 +F0.33516000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.083923700000000004 +sS'm' +F19.418700000000001 +sg8 +F0.94500899999999999 +sg9 +F309.3827 +sg10 +(lp2953 +L343123379L +aL343123380L +aL343123381L +aL343123382L +aL343123383L +asg12 +(lp2954 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801199999999997 +sS't' +F53288.111784300003 +ss(F309.37471399999998 +F0.33168399999999998 +F0.828009 +F0.94500799999999996 +I0 +tp2955 +(dp2956 +g4 +F0.33168399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.033418099999999999 +sS'm' +F15.9703 +sg8 +F0.94500799999999996 +sg9 +F309.37471399999998 +sg10 +(lp2957 +L343120466L +aL343120467L +aL343120468L +aL343120469L +aL343120470L +asg12 +(lp2958 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828009 +sS't' +F53288.111762100001 +ss(F309.37774899999999 +F0.32561699999999999 +F0.61607999999999996 +F0.77506799999999998 +I0 +tp2959 +(dp2960 +g4 +F0.32561699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.8342700000000001 +sS'm' +F23.316299999999998 +sg8 +F0.77506799999999998 +sg9 +F309.37774899999999 +sg10 +(lp2961 +L346171694L +aL346171695L +aL346171696L +aL346171697L +aL346171698L +asg12 +(lp2962 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61607999999999996 +sS't' +F53704.071666700002 +ss(F309.38747599999999 +F0.33271699999999998 +F0.77922199999999997 +F0.829596 +I0 +tp2963 +(dp2964 +g4 +F0.33271699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F6.9483800000000002 +sS'm' +F24.145299999999999 +sg8 +F0.829596 +sg9 +F309.38747599999999 +sg10 +(lp2965 +L343279123L +aL343279124L +aL343279125L +aL343279126L +aL343279127L +asg12 +(lp2966 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77922199999999997 +sS't' +F53302.107466300004 +ss(F309.38089500000001 +F0.339314 +F0.98449299999999995 +F0.98835600000000001 +I0 +tp2967 +(dp2968 +g4 +F0.339314 +sg5 +I0 +sg6 +I0 +sg7 +F3.4494600000000002 +sS'm' +F23.8904 +sg8 +F0.98835600000000001 +sg9 +F309.38089500000001 +sg10 +(lp2969 +L346459523L +aL346459524L +aL346459525L +aL346459526L +aL346459527L +asg12 +(lp2970 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98449299999999995 +sS't' +F54007.119919999997 +ss(F309.37769500000002 +F0.34563300000000002 +F0.74111899999999997 +F0.960121 +I0 +tp2971 +(dp2972 +g4 +F0.34563300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.9686599999999999 +sS'm' +F24.368099999999998 +sg8 +F0.960121 +sg9 +F309.37769500000002 +sg10 +(lp2973 +L344482993L +aL344482994L +aL344482995L +aL344482996L +aL344482997L +aL344482998L +aL344482999L +aL344483000L +aL344483001L +aL344483002L +asg12 +(lp2974 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74111899999999997 +sS't' +F53644.123859400002 +ss(F309.36675300000002 +F0.33565 +F1.0102199999999999 +F0.95336699999999996 +I0 +tp2975 +(dp2976 +g4 +F0.33565 +sg5 +I0 +sg6 +I0 +sg7 +F1.1211100000000001 +sS'm' +F23.886500000000002 +sg8 +F0.95336699999999996 +sg9 +F309.36675300000002 +sg10 +(lp2977 +L343717279L +aL343717280L +aL343717281L +aL343717282L +asg12 +(lp2978 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0102199999999999 +sS't' +F53623.160377300002 +ss(F309.37194499999998 +F0.34107199999999999 +F0.41308499999999998 +F0.41209099999999999 +I0 +tp2979 +(dp2980 +g4 +F0.34107199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.5250600000000001 +sS'm' +F22.5045 +sg8 +F0.41209099999999999 +sg9 +F309.37194499999998 +sg10 +(lp2981 +L346000935L +aL346000936L +aL346000937L +aL346000938L +aL346000939L +asg12 +(lp2982 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41308499999999998 +sS't' +F53703.093103599997 +ss(F309.36007799999999 +F0.32049899999999998 +F0.85100399999999998 +F0.91300899999999996 +I0 +tp2983 +(dp2984 +g4 +F0.32049899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.12750900000000001 +sS'm' +F19.7395 +sg8 +F0.91300899999999996 +sg9 +F309.36007799999999 +sg10 +(lp2985 +L343876050L +aL343876051L +aL343876052L +aL343876053L +aL343876054L +asg12 +(lp2986 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100399999999998 +sS't' +F53626.144912399999 +ss(F309.37304499999999 +F0.32019300000000001 +F0.61644100000000002 +F0.77558400000000005 +I0 +tp2987 +(dp2988 +g4 +F0.32019300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.65475399999999995 +sS'm' +F23.119 +sg8 +F0.77558400000000005 +sg9 +F309.37304499999999 +sg10 +(lp2989 +L346174313L +aL346174314L +aL346174315L +aL346174316L +aL346174317L +aL346174318L +aL346174319L +aL346174320L +asg12 +(lp2990 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61644100000000002 +sS't' +F53704.073312100001 +ss(F309.38068800000002 +F0.32852599999999998 +F1.0848500000000001 +F1.0166200000000001 +I0 +tp2991 +(dp2992 +g4 +F0.32852599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.4888499999999998 +sS'm' +F24.116599999999998 +sg8 +F1.0166200000000001 +sg9 +F309.38068800000002 +sg10 +(lp2993 +L345371887L +aL345371888L +aL345371889L +aL345371890L +aL345371891L +asg12 +(lp2994 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0848500000000001 +sS't' +F53675.0787432 +ss(F309.377971 +F0.33786500000000003 +F0.61601700000000004 +F0.77502000000000004 +I0 +tp2995 +(dp2996 +g4 +F0.33786500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.056499500000000001 +sS'm' +F18.344999999999999 +sg8 +F0.77502000000000004 +sg9 +F309.377971 +sg10 +(lp2997 +L346166247L +aL346166248L +aL346166249L +aL346166250L +aL346166251L +asg12 +(lp2998 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601700000000004 +sS't' +F53704.0716674 +ss(F309.36484400000001 +F0.33452100000000001 +F0.98421700000000001 +F0.98818399999999995 +I0 +tp2999 +(dp3000 +g4 +F0.33452100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.9860300000000004 +sS'm' +F24.308399999999999 +sg8 +F0.98818399999999995 +sg9 +F309.36484400000001 +sg10 +(lp3001 +L346465796L +aL346465797L +aL346465798L +aL346465799L +aL346465800L +asg12 +(lp3002 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98421700000000001 +sS't' +F54007.1198755 +ss(F309.37096600000001 +F0.33041199999999998 +F0.74912400000000001 +F0.97823300000000002 +I0 +tp3003 +(dp3004 +g4 +F0.33041199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.43919 +sS'm' +F23.217400000000001 +sg8 +F0.97823300000000002 +sg9 +F309.37096600000001 +sg10 +(lp3005 +L171386296L +aL171386297L +aL171386298L +aL171386299L +aL171386300L +asg12 +(lp3006 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74912400000000001 +sS't' +F54005.107143200003 +ss(F309.38199200000003 +F0.34303099999999997 +F0.47623799999999999 +F0.454212 +I0 +tp3007 +(dp3008 +g4 +F0.34303099999999997 +sg5 +I0 +sg6 +I0 +sg7 +F1.44082 +sS'm' +F22.605599999999999 +sg8 +F0.454212 +sg9 +F309.38199200000003 +sg10 +(lp3009 +L344871339L +aL344871340L +aL344871341L +aL344871342L +aL344871343L +asg12 +(lp3010 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47623799999999999 +sS't' +F53668.109022600001 +ss(F309.36241000000001 +F0.319631 +F0.85103499999999999 +F0.91302899999999998 +I0 +tp3011 +(dp3012 +g4 +F0.319631 +sg5 +I0 +sg6 +I0 +sg7 +F1.82409 +sS'm' +F22.818100000000001 +sg8 +F0.91302899999999998 +sg9 +F309.36241000000001 +sg10 +(lp3013 +L343878199L +aL343878200L +aL343878201L +aL343878202L +aL343878203L +aL343878204L +aL343878205L +aL343878206L +aL343878207L +aL343878208L +asg12 +(lp3014 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85103499999999999 +sS't' +F53626.144918899998 +ss(F309.37238200000002 +F0.32414799999999999 +F0.61619900000000005 +F0.77510599999999996 +I0 +tp3015 +(dp3016 +g4 +F0.32414799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.95764 +sS'm' +F23.365100000000002 +sg8 +F0.77510599999999996 +sg9 +F309.37238200000002 +sg10 +(lp3017 +L346172099L +aL346172100L +aL346172101L +aL346172102L +aL346172103L +asg12 +(lp3018 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61619900000000005 +sS't' +F53704.071651799997 +ss(F309.38075800000001 +F0.34451999999999999 +F0.82821699999999998 +F0.94517099999999998 +I0 +tp3019 +(dp3020 +g4 +F0.34451999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.2093799999999999 +sS'm' +F23.997 +sg8 +F0.94517099999999998 +sg9 +F309.38075800000001 +sg10 +(lp3021 +L343120549L +aL343120550L +aL343120551L +aL343120552L +asg12 +(lp3022 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82821699999999998 +sS't' +F53288.113437300002 +ss(F309.38810100000001 +F0.33813300000000002 +F0.61617500000000003 +F0.77529999999999999 +I0 +tp3023 +(dp3024 +g4 +F0.33813300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.30484299999999998 +sS'm' +F22.2742 +sg8 +F0.77529999999999999 +sg9 +F309.38810100000001 +sg10 +(lp3025 +L346172307L +aL346172308L +aL346172309L +aL346172310L +asg12 +(lp3026 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61617500000000003 +sS't' +F53704.073353899999 +ss(F309.37771199999997 +F0.34563100000000002 +F1.01017 +F0.99217200000000005 +I0 +tp3027 +(dp3028 +g4 +F0.34563100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.60761500000000002 +sS'm' +F22.875699999999998 +sg8 +F0.99217200000000005 +sg9 +F309.37771199999997 +sg10 +(lp3029 +L342970506L +aL342970507L +aL342970508L +aL342970509L +asg12 +(lp3030 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01017 +sS't' +F53270.136251399999 +ss(F309.38713100000001 +F0.31924799999999998 +F0.984232 +F0.98835200000000001 +I0 +tp3031 +(dp3032 +g4 +F0.31924799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.29908 +sS'm' +F24.621300000000002 +sg8 +F0.98835200000000001 +sg9 +F309.38713100000001 +sg10 +(lp3033 +L346467920L +aL346467921L +aL346467922L +aL346467923L +asg12 +(lp3034 +I1 +aI2 +aI3 +aI4 +asg14 +F0.984232 +sS't' +F54007.121595800003 +ss(F309.375719 +F0.34622399999999998 +F1.0102100000000001 +F0.95320400000000005 +I0 +tp3035 +(dp3036 +g4 +F0.34622399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.4290099999999999 +sS'm' +F22.6663 +sg8 +F0.95320400000000005 +sg9 +F309.375719 +sg10 +(lp3037 +L343715865L +aL343715866L +aL343715867L +aL343715868L +aL343715869L +asg12 +(lp3038 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0102100000000001 +sS't' +F53623.158743699998 +ss(F309.37281899999999 +F0.335231 +F0.86501099999999997 +F0.90000899999999995 +I0 +tp3039 +(dp3040 +g4 +F0.335231 +sg5 +I0 +sg6 +I0 +sg7 +F0.66583599999999998 +sS'm' +F21.959099999999999 +sg8 +F0.90000899999999995 +sg9 +F309.37281899999999 +sg10 +(lp3041 +L345811438L +aL345811439L +aL345811440L +aL345811441L +aL345811442L +asg12 +(lp3042 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86501099999999997 +sS't' +F53693.088325299999 +ss(F309.38270499999999 +F0.33516299999999999 +F0.50603799999999999 +F0.45910099999999998 +I0 +tp3043 +(dp3044 +g4 +F0.33516299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.13175700000000001 +sS'm' +F19.465900000000001 +sg8 +F0.45910099999999998 +sg9 +F309.38270499999999 +sg10 +(lp3045 +L153250344L +aL153250345L +aL153250346L +aL153250347L +aL153250348L +asg12 +(lp3046 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50603799999999999 +sS't' +F53702.083999800001 +ss(F309.367953 +F0.34500399999999998 +F0.92416799999999999 +F1.0302899999999999 +I0 +tp3047 +(dp3048 +g4 +F0.34500399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.25899499999999998 +sS'm' +F22.3109 +sg8 +F1.0302899999999999 +sg9 +F309.367953 +sg10 +(lp3049 +L345217371L +aL345217372L +aL345217373L +aL345217374L +asg12 +(lp3050 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92416799999999999 +sS't' +F53673.083476899999 +ss(F309.38278200000002 +F0.32574999999999998 +F0.64918299999999995 +F0.53915100000000005 +I0 +tp3051 +(dp3052 +g4 +F0.32574999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.36877500000000002 +sS'm' +F21.372299999999999 +sg8 +F0.53915100000000005 +sg9 +F309.38278200000002 +sg10 +(lp3053 +L112299414L +aL112299415L +aL112299416L +aL112299417L +asg12 +(lp3054 +I1 +aI2 +aI3 +aI4 +asg14 +F0.64918299999999995 +sS't' +F53656.107772800002 +ss(F309.36979500000001 +F0.34463300000000002 +F0.85107299999999997 +F0.91306799999999999 +I0 +tp3055 +(dp3056 +g4 +F0.34463300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F8.4361099999999993 +sS'm' +F24.4803 +sg8 +F0.91306799999999999 +sg9 +F309.36979500000001 +sg10 +(lp3057 +L343881890L +aL343881891L +aL343881892L +aL343881893L +aL343881894L +aL343881895L +aL343881896L +aL343881897L +aL343881898L +aL343881899L +asg12 +(lp3058 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85107299999999997 +sS't' +F53626.144939400001 +ss(F309.38007599999997 +F0.34214299999999997 +F0.92400599999999999 +F1.0300100000000001 +I0 +tp3059 +(dp3060 +g4 +F0.34214299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.055469400000000002 +sS'm' +F18.6233 +sg8 +F1.0300100000000001 +sg9 +F309.38007599999997 +sg10 +(lp3061 +L345217572L +aL345217573L +aL345217574L +aL345217575L +aL345217576L +asg12 +(lp3062 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400599999999999 +sS't' +F53673.081852099996 +ss(F309.36143700000002 +F0.31858300000000001 +F0.82825800000000005 +F0.94539700000000004 +I0 +tp3063 +(dp3064 +g4 +F0.31858300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.5312599999999996 +sS'm' +F23.114000000000001 +sg8 +F0.94539700000000004 +sg9 +F309.36143700000002 +sg10 +(lp3065 +L343122967L +aL343122968L +aL343122969L +aL343122970L +aL343122971L +asg12 +(lp3066 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82825800000000005 +sS't' +F53288.111725199997 +ss(F309.36635799999999 +F0.34081800000000001 +F0.98400600000000005 +F0.98800500000000002 +I0 +tp3067 +(dp3068 +g4 +F0.34081800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.058564699999999997 +sS'm' +F18.372499999999999 +sg8 +F0.98800500000000002 +sg9 +F309.36635799999999 +sg10 +(lp3069 +L346459278L +aL346459279L +aL346459280L +aL346459281L +aL346459282L +asg12 +(lp3070 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400600000000005 +sS't' +F54007.119879700003 +ss(F309.37195000000003 +F0.34104699999999999 +F0.741012 +F0.96001000000000003 +I0 +tp3071 +(dp3072 +g4 +F0.34104699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.44342100000000001 +sS'm' +F21.915700000000001 +sg8 +F0.96001000000000003 +sg9 +F309.37195000000003 +sg10 +(lp3073 +L344478840L +aL344478841L +aL344478842L +aL344478843L +aL344478844L +asg12 +(lp3074 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.741012 +sS't' +F53644.123843499998 +ss(F309.38390600000002 +F0.31872699999999998 +F0.85280400000000001 +F0.91482699999999995 +I0 +tp3075 +(dp3076 +g4 +F0.31872699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.4628299999999999 +sS'm' +F23.1386 +sg8 +F0.91482699999999995 +sg9 +F309.38390600000002 +sg10 +(lp3077 +L343882185L +aL343882186L +aL343882187L +aL343882188L +aL343882189L +asg12 +(lp3078 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85280400000000001 +sS't' +F53626.144978600001 +ss(F309.38080400000001 +F0.34452300000000002 +F0.47755999999999998 +F0.45563700000000001 +I0 +tp3079 +(dp3080 +g4 +F0.34452300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.7158800000000001 +sS'm' +F22.797599999999999 +sg8 +F0.45563700000000001 +sg9 +F309.38080400000001 +sg10 +(lp3081 +L344871334L +aL344871335L +aL344871336L +aL344871337L +aL344871338L +asg12 +(lp3082 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47755999999999998 +sS't' +F53668.109019299998 +ss(F309.36914400000001 +F0.34574300000000002 +F1.0900399999999999 +F1.07003 +I0 +tp3083 +(dp3084 +g4 +F0.34574300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.2515099999999999 +sS'm' +F23.139099999999999 +sg8 +F1.07003 +sg9 +F309.36914400000001 +sg10 +(lp3085 +L345683704L +aL345683705L +aL345683706L +aL345683707L +aL345683708L +asg12 +(lp3086 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900399999999999 +sS't' +F53680.086408900002 +ss(F309.37435399999998 +F0.32800600000000002 +F1.08484 +F1.01342 +I0 +tp3087 +(dp3088 +g4 +F0.32800600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.4606300000000001 +sS'm' +F23.159099999999999 +sg8 +F1.01342 +sg9 +F309.37435399999998 +sg10 +(lp3089 +L345366262L +aL345366263L +aL345366264L +aL345366265L +asg12 +(lp3090 +I0 +aI1 +aI2 +aI3 +asg14 +F1.08484 +sS't' +F53675.078725599997 +ss(F309.37301600000001 +F0.31726900000000002 +F1.0971200000000001 +F1.0813200000000001 +I0 +tp3091 +(dp3092 +g4 +F0.31726900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.77803 +sS'm' +F23.931999999999999 +sg8 +F1.0813200000000001 +sg9 +F309.37301600000001 +sg10 +(lp3093 +L345685786L +aL345685787L +aL345685788L +aL345685789L +asg12 +(lp3094 +I0 +aI1 +aI2 +aI3 +asg14 +F1.0971200000000001 +sS't' +F53680.086419699997 +ss(F309.36309799999998 +F0.322714 +F0.92768200000000001 +F1.0329999999999999 +I0 +tp3095 +(dp3096 +g4 +F0.322714 +sg5 +I0 +sg6 +I0 +sg7 +F2.1110000000000002 +sS'm' +F24.659700000000001 +sg8 +F1.0329999999999999 +sg9 +F309.36309799999998 +sg10 +(lp3097 +L345225877L +aL345225878L +aL345225879L +aL345225880L +asg12 +(lp3098 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92768200000000001 +sS't' +F53673.083463399998 +ss(F309.38540799999998 +F0.34015499999999999 +F0.82805099999999998 +F0.94503899999999996 +I0 +tp3099 +(dp3100 +g4 +F0.34015499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.56013299999999999 +sS'm' +F21.8202 +sg8 +F0.94503899999999996 +sg9 +F309.38540799999998 +sg10 +(lp3101 +L343120659L +aL343120660L +aL343120661L +aL343120662L +aL343120663L +asg12 +(lp3102 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82805099999999998 +sS't' +F53288.111791800002 +ss(F309.38076000000001 +F0.34446500000000002 +F0.85123300000000002 +F0.91314399999999996 +I0 +tp3103 +(dp3104 +g4 +F0.34446500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.12148 +sS'm' +F23.6951 +sg8 +F0.91314399999999996 +sg9 +F309.38076000000001 +sg10 +(lp3105 +L343882148L +aL343882149L +aL343882150L +aL343882151L +aL343882152L +asg12 +(lp3106 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85123300000000002 +sS't' +F53626.1449698 +ss(F309.37300499999998 +F0.321073 +F1.0111699999999999 +F0.95454799999999995 +I0 +tp3107 +(dp3108 +g4 +F0.321073 +sg5 +I0 +sg6 +I0 +sg7 +F8.7131299999999996 +sS'm' +F24.6435 +sg8 +F0.95454799999999995 +sg9 +F309.37300499999998 +sg10 +(lp3109 +L343717368L +aL343717369L +aL343717370L +aL343717371L +aL343717372L +asg12 +(lp3110 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0111699999999999 +sS't' +F53623.158736199999 +ss(F309.38083699999999 +F0.33940700000000001 +F1.08148 +F1.01227 +I0 +tp3111 +(dp3112 +g4 +F0.33940700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.0494600000000001 +sS'm' +F24.2501 +sg8 +F1.01227 +sg9 +F309.38083699999999 +sg10 +(lp3113 +L345363816L +aL345363817L +aL345363818L +aL345363819L +asg12 +(lp3114 +I1 +aI2 +aI3 +aI4 +asg14 +F1.08148 +sS't' +F53675.080402 +ss(F309.37796400000002 +F0.33783999999999997 +F1.0500100000000001 +F0.94401299999999999 +I0 +tp3115 +(dp3116 +g4 +F0.33783999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.0610739 +sS'm' +F18.345700000000001 +sg8 +F0.94401299999999999 +sg9 +F309.37796400000002 +sg10 +(lp3117 +L346329306L +aL346329307L +aL346329308L +aL346329309L +aL346329310L +asg12 +(lp3118 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159586900001 +ss(F309.367861 +F0.34499800000000003 +F0.83244099999999999 +F0.96960599999999997 +I0 +tp3119 +(dp3120 +g4 +F0.34499800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.36046600000000001 +sS'm' +F22.383299999999998 +sg8 +F0.96960599999999997 +sg9 +F309.367861 +sg10 +(lp3121 +L343127546L +aL343127547L +aL343127548L +aL343127549L +asg12 +(lp3122 +I1 +aI2 +aI3 +aI4 +asg14 +F0.83244099999999999 +sS't' +F53288.113401499999 +ss(F309.36488400000002 +F0.33457999999999999 +F0.74921000000000004 +F0.97819800000000001 +I0 +tp3123 +(dp3124 +g4 +F0.33457999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.5281100000000001 +sS'm' +F23.2836 +sg8 +F0.97819800000000001 +sg9 +F309.36488400000002 +sg10 +(lp3125 +L171386186L +aL171386187L +aL171386188L +aL171386189L +aL171386190L +asg12 +(lp3126 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74921000000000004 +sS't' +F54005.107126299998 +ss(F309.38008300000001 +F0.34212599999999999 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp3127 +(dp3128 +g4 +F0.34212599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.064055399999999998 +sS'm' +F18.582899999999999 +sg8 +F0.82900499999999999 +sg9 +F309.38008300000001 +sg10 +(lp3129 +L343271577L +aL343271578L +aL343271579L +aL343271580L +aL343271581L +asg12 +(lp3130 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.1074458 +ss(F309.37308100000001 +F0.32443100000000002 +F0.74105699999999997 +F0.960036 +I0 +tp3131 +(dp3132 +g4 +F0.32443100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.24457599999999999 +sS'm' +F22.476600000000001 +sg8 +F0.960036 +sg9 +F309.37308100000001 +sg10 +(lp3133 +L344482906L +aL344482907L +aL344482908L +aL344482909L +asg12 +(lp3134 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74105699999999997 +sS't' +F53644.125505099997 +ss(F309.38549499999999 +F0.34008500000000003 +F0.649509 +F0.53940399999999999 +I0 +tp3135 +(dp3136 +g4 +F0.34008500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.85944299999999996 +sS'm' +F21.5444 +sg8 +F0.53940399999999999 +sg9 +F309.38549499999999 +sg10 +(lp3137 +L112299451L +aL112299452L +aL112299453L +aL112299454L +aL112299455L +asg12 +(lp3138 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.649509 +sS't' +F53656.106121800003 +ss(F309.36927100000003 +F0.31895200000000001 +F0.93301299999999998 +F0.87801399999999996 +I0 +tp3139 +(dp3140 +g4 +F0.31895200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.22020000000000001 +sS'm' +F19.441199999999998 +sg8 +F0.87801399999999996 +sg9 +F309.36927100000003 +sg10 +(lp3141 +L345027138L +aL345027134L +aL345027135L +aL345027136L +aL345027137L +asg12 +(lp3142 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.93301299999999998 +sS't' +F53670.114670399998 +ss(F309.37844100000001 +F0.336895 +F1.0520099999999999 +F0.94470399999999999 +I0 +tp3143 +(dp3144 +g4 +F0.336895 +sg5 +I0 +sg6 +I0 +sg7 +F2.7059299999999999 +sS'm' +F24.494 +sg8 +F0.94470399999999999 +sg9 +F309.37844100000001 +sg10 +(lp3145 +L346329321L +aL346329322L +aL346329323L +asg12 +(lp3146 +I2 +aI3 +aI4 +asg14 +F1.0520099999999999 +sS't' +F53974.157929599998 +ss(F309.37300299999998 +F0.32020799999999999 +F0.984267 +F0.98823499999999997 +I0 +tp3147 +(dp3148 +g4 +F0.32020799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.76735600000000004 +sS'm' +F23.419499999999999 +sg8 +F0.98823499999999997 +sg9 +F309.37300299999998 +sg10 +(lp3149 +L346467768L +aL346467769L +aL346467770L +aL346467771L +asg12 +(lp3150 +I1 +aI2 +aI3 +aI4 +asg14 +F0.984267 +sS't' +F54007.121556600003 +ss(F309.36506500000002 +F0.33014100000000002 +F0.64901699999999996 +F0.53902099999999997 +I0 +tp3151 +(dp3152 +g4 +F0.33014100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.44413999999999998 +sS'm' +F20.816600000000001 +sg8 +F0.53902099999999997 +sg9 +F309.36506500000002 +sg10 +(lp3153 +L112296674L +aL112296675L +aL112296676L +aL112296677L +aL112296678L +asg12 +(lp3154 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901699999999996 +sS't' +F53656.106065100001 +ss(F309.364891 +F0.33460200000000001 +F0.50776500000000002 +F0.462451 +I0 +tp3155 +(dp3156 +g4 +F0.33460200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.5380600000000002 +sS'm' +F23.205100000000002 +sg8 +F0.462451 +sg9 +F309.364891 +sg10 +(lp3157 +L153252666L +aL153252667L +aL153252668L +aL153252669L +aL153252670L +asg12 +(lp3158 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50776500000000002 +sS't' +F53702.083950400003 +ss(F309.37197200000003 +F0.341057 +F0.77505900000000005 +F0.75406200000000001 +I0 +tp3159 +(dp3160 +g4 +F0.341057 +sg5 +I0 +sg6 +I0 +sg7 +F2.06473 +sS'm' +F22.562899999999999 +sg8 +F0.75406200000000001 +sg9 +F309.37197200000003 +sg10 +(lp3161 +L342830379L +aL342830380L +aL342830381L +aL342830382L +aL342830383L +asg12 +(lp3162 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77505900000000005 +sS't' +F53243.255750299999 +ss(F309.37671799999998 +F0.32769399999999999 +F0.85489499999999996 +F0.92161199999999999 +I0 +tp3163 +(dp3164 +g4 +F0.32769399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.75036099999999994 +sS'm' +F22.7911 +sg8 +F0.92161199999999999 +sg9 +F309.37671799999998 +sg10 +(lp3165 +L343879201L +aL343879202L +aL343879203L +asg12 +(lp3166 +I2 +aI3 +aI4 +asg14 +F0.85489499999999996 +sS't' +F53626.143300000003 +ss(F309.387947 +F0.34221099999999999 +F0.93301599999999996 +F0.87801700000000005 +I0 +tp3167 +(dp3168 +g4 +F0.34221099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.927257 +sS'm' +F22.423500000000001 +sg8 +F0.87801700000000005 +sg9 +F309.387947 +sg10 +(lp3169 +L345024806L +aL345024807L +aL345024808L +aL345024809L +aL345024810L +asg12 +(lp3170 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301599999999996 +sS't' +F53670.113893000002 +ss(F309.372364 +F0.324133 +F0.77914899999999998 +F0.82913499999999996 +I0 +tp3171 +(dp3172 +g4 +F0.324133 +sg5 +I0 +sg6 +I0 +sg7 +F2.5351400000000002 +sS'm' +F23.0471 +sg8 +F0.82913499999999996 +sg9 +F309.372364 +sg10 +(lp3173 +L343278911L +aL343278912L +aL343278913L +aL343278914L +aL343278915L +asg12 +(lp3174 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77914899999999998 +sS't' +F53302.107424299997 +ss(F309.36006400000002 +F0.320492 +F0.85100299999999995 +F0.91300800000000004 +I0 +tp3175 +(dp3176 +g4 +F0.320492 +sg5 +I0 +sg6 +I0 +sg7 +F0.12617300000000001 +sS'm' +F19.725899999999999 +sg8 +F0.91300800000000004 +sg9 +F309.36006400000002 +sg10 +(lp3177 +L343876055L +aL343876056L +aL343876057L +aL343876058L +aL343876059L +asg12 +(lp3178 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.144912299998 +ss(F309.38270299999999 +F0.33518199999999998 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp3179 +(dp3180 +g4 +F0.33518199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.081081100000000003 +sS'm' +F19.442900000000002 +sg8 +F1.0100100000000001 +sg9 +F309.38270299999999 +sg10 +(lp3181 +L345363825L +aL345363826L +aL345363827L +aL345363828L +aL345363829L +aL345363830L +aL345363831L +aL345363832L +aL345363833L +aL345363834L +asg12 +(lp3182 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078748799999 +ss(F309.37433399999998 +F0.32659700000000003 +F1.0100100000000001 +F0.99201300000000003 +I0 +tp3183 +(dp3184 +g4 +F0.32659700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.0241800000000001 +sS'm' +F22.382300000000001 +sg8 +F0.99201300000000003 +sg9 +F309.37433399999998 +sg10 +(lp3185 +L342966043L +aL342966044L +aL342966045L +aL342966046L +aL342966047L +asg12 +(lp3186 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134583599996 +ss(F309.369912 +F0.33447500000000002 +F0.48485600000000001 +F0.46667599999999998 +I0 +tp3187 +(dp3188 +g4 +F0.33447500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F8.8968399999999992 +sS'm' +F24.595800000000001 +sg8 +F0.46667599999999998 +sg9 +F309.369912 +sg10 +(lp3189 +L344877828L +aL344877829L +aL344877830L +aL344877831L +aL344877832L +asg12 +(lp3190 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.48485600000000001 +sS't' +F53668.108989 +ss(F309.374326 +F0.32657999999999998 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp3191 +(dp3192 +g4 +F0.32657999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.3521099999999999 +sS'm' +F23.228300000000001 +sg8 +F1.0700099999999999 +sg9 +F309.374326 +sg10 +(lp3193 +L345679216L +aL345679217L +aL345679218L +aL345679219L +aL345679220L +asg12 +(lp3194 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086423300003 +ss(F309.35978599999999 +F0.32508700000000001 +F0.41309099999999999 +F0.41211399999999998 +I0 +tp3195 +(dp3196 +g4 +F0.32508700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.34639 +sS'm' +F22.9818 +sg8 +F0.41211399999999998 +sg9 +F309.35978599999999 +sg10 +(lp3197 +L346000231L +aL346000232L +aL346000233L +aL346000234L +aL346000235L +aL346000236L +aL346000237L +aL346000238L +aL346000239L +aL346000240L +asg12 +(lp3198 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41309099999999999 +sS't' +F53703.093069800001 +ss(F309.38006999999999 +F0.34215899999999999 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp3199 +(dp3200 +g4 +F0.34215899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.058403799999999999 +sS'm' +F18.590199999999999 +sg8 +F1.0100100000000001 +sg9 +F309.38006999999999 +sg10 +(lp3201 +L345363727L +aL345363728L +aL345363729L +aL345363730L +aL345363731L +aL345363732L +aL345363733L +aL345363734L +aL345363735L +aL345363736L +asg12 +(lp3202 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078741500001 +ss(F309.37433399999998 +F0.32657599999999998 +F0.85100699999999996 +F0.91301299999999996 +I0 +tp3203 +(dp3204 +g4 +F0.32657599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.81424300000000005 +sS'm' +F21.922899999999998 +sg8 +F0.91301299999999996 +sg9 +F309.37433399999998 +sg10 +(lp3205 +L343878308L +aL343878309L +aL343878310L +aL343878311L +aL343878312L +asg12 +(lp3206 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100699999999996 +sS't' +F53626.144952000002 +ss(F309.37453099999999 +F0.31684600000000002 +F0.77949900000000005 +F0.82929699999999995 +I0 +tp3207 +(dp3208 +g4 +F0.31684600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.7075300000000002 +sS'm' +F23.4619 +sg8 +F0.82929699999999995 +sg9 +F309.37453099999999 +sg10 +(lp3209 +L343278937L +aL343278938L +aL343278939L +aL343278940L +aL343278941L +asg12 +(lp3210 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77949900000000005 +sS't' +F53302.107430299999 +ss(F309.37898100000001 +F0.32704100000000003 +F0.41309600000000002 +F0.41209899999999999 +I0 +tp3211 +(dp3212 +g4 +F0.32704100000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.999089 +sS'm' +F22.040900000000001 +sg8 +F0.41209899999999999 +sg9 +F309.37898100000001 +sg10 +(lp3213 +L346000978L +aL346000979L +aL346000980L +aL346000981L +aL346000982L +asg12 +(lp3214 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41309600000000002 +sS't' +F53703.0931231 +ss(F309.36990800000001 +F0.33450400000000002 +F0.86547200000000002 +F0.90042100000000003 +I0 +tp3215 +(dp3216 +g4 +F0.33450400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F7.0133099999999997 +sS'm' +F24.5505 +sg8 +F0.90042100000000003 +sg9 +F309.36990800000001 +sg10 +(lp3217 +L345816329L +aL345816330L +aL345816331L +aL345816332L +aL345816333L +asg12 +(lp3218 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86547200000000002 +sS't' +F53693.088317200003 +ss(F309.38941 +F0.32213700000000001 +F0.64934800000000004 +F0.53932100000000005 +I0 +tp3219 +(dp3220 +g4 +F0.32213700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.7301299999999999 +sS'm' +F23.152699999999999 +sg8 +F0.53932100000000005 +sg9 +F309.38941 +sg10 +(lp3221 +L112299475L +aL112299476L +aL112299477L +aL112299478L +aL112299479L +asg12 +(lp3222 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64934800000000004 +sS't' +F53656.106132699999 +ss(F309.36912899999999 +F0.34575099999999998 +F1.08009 +F1.0100800000000001 +I0 +tp3223 +(dp3224 +g4 +F0.34575099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.43758000000000002 +sS'm' +F23.029800000000002 +sg8 +F1.0100800000000001 +sg9 +F309.36912899999999 +sg10 +(lp3225 +L345370122L +aL345370123L +aL345370124L +aL345370125L +asg12 +(lp3226 +I1 +aI2 +aI3 +aI4 +asg14 +F1.08009 +sS't' +F53675.0803695 +ss(F309.36980699999998 +F0.34459099999999998 +F0.77909700000000004 +F0.82910600000000001 +I0 +tp3227 +(dp3228 +g4 +F0.34459099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.871892 +sS'm' +F22.763300000000001 +sg8 +F0.82910600000000001 +sg9 +F309.36980699999998 +sg10 +(lp3229 +L343278843L +aL343278844L +aL343278845L +aL343278846L +asg12 +(lp3230 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77909700000000004 +sS't' +F53302.109075699998 +ss(F309.37235299999998 +F0.324127 +F1.09002 +F1.07003 +I0 +tp3231 +(dp3232 +g4 +F0.324127 +sg5 +I0 +sg6 +I0 +sg7 +F3.5015900000000002 +sS'm' +F24.2593 +sg8 +F1.07003 +sg9 +F309.37235299999998 +sg10 +(lp3233 +L345681162L +aL345681163L +aL345681164L +aL345681165L +aL345681166L +asg12 +(lp3234 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09002 +sS't' +F53680.086417799997 +ss(F309.38805200000002 +F0.33806000000000003 +F0.50762300000000005 +F0.459897 +I0 +tp3235 +(dp3236 +g4 +F0.33806000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.51910699999999999 +sS'm' +F22.410699999999999 +sg8 +F0.459897 +sg9 +F309.38805200000002 +sg10 +(lp3237 +L153252885L +aL153252886L +aL153252887L +aL153252888L +asg12 +(lp3238 +I1 +aI2 +aI3 +aI4 +asg14 +F0.50762300000000005 +sS't' +F53702.085673200003 +ss(F309.361448 +F0.31855499999999998 +F0.93318699999999999 +F0.87830799999999998 +I0 +tp3239 +(dp3240 +g4 +F0.31855499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.84335599999999999 +sS'm' +F22.837599999999998 +sg8 +F0.87830799999999998 +sg9 +F309.361448 +sg10 +(lp3241 +L345026992L +aL345026993L +aL345026994L +aL345026995L +aL345026996L +asg12 +(lp3242 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93318699999999999 +sS't' +F53670.113819400001 +ss(F309.36785300000003 +F0.344995 +F1.0501799999999999 +F0.94433699999999998 +I0 +tp3243 +(dp3244 +g4 +F0.344995 +sg5 +I0 +sg6 +I0 +sg7 +F1.77536 +sS'm' +F23.075500000000002 +sg8 +F0.94433699999999998 +sg9 +F309.36785300000003 +sg10 +(lp3245 +L346336255L +aL346336256L +aL346336257L +aL346336258L +aL346336259L +asg12 +(lp3246 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0501799999999999 +sS't' +F53974.159558799998 +ss(F309.36452400000002 +F0.32449499999999998 +F0.41309200000000001 +F0.412109 +I0 +tp3247 +(dp3248 +g4 +F0.32449499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.135853 +sS'm' +F21.0562 +sg8 +F0.412109 +sg9 +F309.36452400000002 +sg10 +(lp3249 +L346000246L +aL346000247L +aL346000248L +aL346000249L +asg12 +(lp3250 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41309200000000001 +sS't' +F53703.094741399997 +ss(F309.38800300000003 +F0.34579599999999999 +F0.74693600000000004 +F0.96425700000000003 +I0 +tp3251 +(dp3252 +g4 +F0.34579599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.67679299999999998 +sS'm' +F23.129100000000001 +sg8 +F0.96425700000000003 +sg9 +F309.38800300000003 +sg10 +(lp3253 +L344476125L +aL344476126L +aL344476127L +asg12 +(lp3254 +I2 +aI3 +aI4 +asg14 +F0.74693600000000004 +sS't' +F53644.122229499997 +ss(F309.380223 +F0.34038200000000002 +F0.92538399999999998 +F1.0304599999999999 +I0 +tp3255 +(dp3256 +g4 +F0.34038200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.3185500000000001 +sS'm' +F22.8764 +sg8 +F1.0304599999999999 +sg9 +F309.380223 +sg10 +(lp3257 +L345217597L +aL345217598L +aL345217599L +aL345217600L +aL345217601L +asg12 +(lp3258 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92538399999999998 +sS't' +F53673.0818525 +ss(F309.38807800000001 +F0.33807700000000002 +F0.82808700000000002 +F0.94508000000000003 +I0 +tp3259 +(dp3260 +g4 +F0.33807700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.219775 +sS'm' +F22.0945 +sg8 +F0.94508000000000003 +sg9 +F309.38807800000001 +sg10 +(lp3261 +L343127879L +aL343127880L +aL343127881L +aL343127882L +asg12 +(lp3262 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82808700000000002 +sS't' +F53288.113457599997 +ss(F309.366333 +F0.34081499999999998 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp3263 +(dp3264 +g4 +F0.34081499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.046676599999999999 +sS'm' +F18.354700000000001 +sg8 +F1.1100000000000001 +sg9 +F309.366333 +sg10 +(lp3265 +L344144127L +aL344144128L +aL344144129L +aL344144130L +aL344144131L +asg12 +(lp3266 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138175 +ss(F309.382386 +F0.32450899999999999 +F1.0802700000000001 +F1.0101800000000001 +I0 +tp3267 +(dp3268 +g4 +F0.32450899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.912416 +sS'm' +F23.814800000000002 +sg8 +F1.0101800000000001 +sg9 +F309.382386 +sg10 +(lp3269 +L345367513L +aL345367514L +aL345367515L +aL345367516L +asg12 +(lp3270 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0802700000000001 +sS't' +F53675.080406300003 +ss(F309.36848700000002 +F0.33941199999999999 +F0.922481 +F1.1017999999999999 +I0 +tp3271 +(dp3272 +g4 +F0.33941199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F9.3734400000000004 +sS'm' +F25.177700000000002 +sg8 +F1.1017999999999999 +sg9 +F309.36848700000002 +sg10 +(lp3273 +L345541963L +aL345541964L +aL345541965L +aL345541966L +aL345541967L +asg12 +(lp3274 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.922481 +sS't' +F53677.099741999999 +ss(F309.366782 +F0.33557599999999999 +F0.92420800000000003 +F1.0302 +I0 +tp3275 +(dp3276 +g4 +F0.33557599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.46919699999999998 +sS'm' +F23.004799999999999 +sg8 +F1.0302 +sg9 +F309.366782 +sg10 +(lp3277 +L345223883L +aL345223884L +aL345223885L +aL345223886L +asg12 +(lp3278 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92420800000000003 +sS't' +F53673.083473600003 +ss(F309.38935900000001 +F0.32216299999999998 +F1.01007 +F0.992089 +I0 +tp3279 +(dp3280 +g4 +F0.32216299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.36379899999999998 +sS'm' +F22.310199999999998 +sg8 +F0.992089 +sg9 +F309.38935900000001 +sg10 +(lp3281 +L342968358L +aL342968359L +aL342968360L +aL342968361L +asg12 +(lp3282 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01007 +sS't' +F53270.136283799999 +ss(F309.37426900000003 +F0.32794800000000002 +F0.78066800000000003 +F0.83082999999999996 +I0 +tp3283 +(dp3284 +g4 +F0.32794800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.788551 +sS'm' +F22.650400000000001 +sg8 +F0.83082999999999996 +sg9 +F309.37426900000003 +sg10 +(lp3285 +L343275227L +aL343275228L +aL343275229L +aL343275230L +asg12 +(lp3286 +I1 +aI2 +aI3 +aI4 +asg14 +F0.78066800000000003 +sS't' +F53302.109088099998 +ss(F309.378964 +F0.32704899999999998 +F0.248366 +F0.34823399999999999 +I0 +tp3287 +(dp3288 +g4 +F0.32704899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.59409299999999998 +sS'm' +F21.543199999999999 +sg8 +F0.34823399999999999 +sg9 +F309.378964 +sg10 +(lp3289 +L327906589L +aL327906590L +aL327906591L +aL327906592L +aL327906593L +asg12 +(lp3290 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248366 +sS't' +F53312.062951200001 +ss(F309.389366 +F0.32218000000000002 +F0.98406400000000005 +F0.98805799999999999 +I0 +tp3291 +(dp3292 +g4 +F0.32218000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.25915100000000002 +sS'm' +F22.212700000000002 +sg8 +F0.98805799999999999 +sg9 +F309.389366 +sg10 +(lp3293 +L346466102L +aL346466103L +aL346466104L +aL346466105L +asg12 +(lp3294 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98406400000000005 +sS't' +F54007.121601999999 +ss(F309.38077399999997 +F0.34454699999999999 +F1.08022 +F1.01017 +I0 +tp3295 +(dp3296 +g4 +F0.34454699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.57662100000000005 +sS'm' +F23.340599999999998 +sg8 +F1.01017 +sg9 +F309.38077399999997 +sg10 +(lp3297 +L345371892L +aL345371893L +aL345371894L +aL345371895L +asg12 +(lp3298 +I1 +aI2 +aI3 +aI4 +asg14 +F1.08022 +sS't' +F53675.080401899999 +ss(F309.38930299999998 +F0.32209599999999999 +F0.48110799999999998 +F0.51939500000000005 +I0 +tp3299 +(dp3300 +g4 +F0.32209599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.3813500000000001 +sS'm' +F22.4175 +sg8 +F0.51939500000000005 +sg9 +F309.38930299999998 +sg10 +(lp3301 +L12888298L +aL12888299L +aL12888300L +aL12888301L +asg12 +(lp3302 +I1 +aI2 +aI3 +aI4 +asg14 +F0.48110799999999998 +sS't' +F53649.120199199999 +ss(F309.369258 +F0.31894800000000001 +F1.0500100000000001 +F0.94401500000000005 +I0 +tp3303 +(dp3304 +g4 +F0.31894800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.33156600000000003 +sS'm' +F21.186 +sg8 +F0.94401500000000005 +sg9 +F309.369258 +sg10 +(lp3305 +L346331968L +aL346331969L +aL346331970L +aL346331971L +aL346331972L +asg12 +(lp3306 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159562699999 +ss(F309.38750399999998 +F0.33273000000000003 +F0.82831200000000005 +F0.94531600000000005 +I0 +tp3307 +(dp3308 +g4 +F0.33273000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.2632000000000001 +sS'm' +F22.700700000000001 +sg8 +F0.94531600000000005 +sg9 +F309.38750399999998 +sg10 +(lp3309 +L343126121L +aL343126122L +aL343126123L +aL343126124L +aL343126125L +asg12 +(lp3310 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82831200000000005 +sS't' +F53288.111797600002 +ss(F309.35978 +F0.325069 +F0.88500699999999999 +F1.1100099999999999 +I0 +tp3311 +(dp3312 +g4 +F0.325069 +sg5 +I0 +sg6 +I0 +sg7 +F0.67239800000000005 +sS'm' +F22.462599999999998 +sg8 +F1.1100099999999999 +sg9 +F309.35978 +sg10 +(lp3313 +L344147716L +aL344147717L +aL344147718L +aL344147719L +aL344147720L +asg12 +(lp3314 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500699999999999 +sS't' +F53635.1381568 +ss(F309.38621000000001 +F0.33887600000000001 +F0.47720699999999999 +F0.45538000000000001 +I0 +tp3315 +(dp3316 +g4 +F0.33887600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.7772399999999999 +sS'm' +F23.6616 +sg8 +F0.45538000000000001 +sg9 +F309.38621000000001 +sg10 +(lp3317 +L344871404L +aL344871405L +aL344871406L +aL344871407L +aL344871408L +asg12 +(lp3318 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47720699999999999 +sS't' +F53668.109034300003 +ss(F309.38890099999998 +F0.34377099999999999 +F0.61600999999999995 +F0.77501600000000004 +I0 +tp3319 +(dp3320 +g4 +F0.34377099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.037683000000000001 +sS'm' +F16.188199999999998 +sg8 +F0.77501600000000004 +sg9 +F309.38890099999998 +sg10 +(lp3321 +L346166369L +aL346166370L +aL346166371L +aL346166372L +aL346166373L +asg12 +(lp3322 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61600999999999995 +sS't' +F53704.071697699997 +ss(F309.38262900000001 +F0.33970699999999998 +F0.98400600000000005 +F0.98800500000000002 +I0 +tp3323 +(dp3324 +g4 +F0.33970699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.019996699999999999 +sS'm' +F17.266200000000001 +sg8 +F0.98800500000000002 +sg9 +F309.38262900000001 +sg10 +(lp3325 +L346459499L +aL346459500L +aL346459501L +aL346459502L +aL346459498L +asg12 +(lp3326 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.98400600000000005 +sS't' +F54007.121583300002 +ss(F309.38005500000003 +F0.342136 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp3327 +(dp3328 +g4 +F0.342136 +sg5 +I0 +sg6 +I0 +sg7 +F0.050578699999999997 +sS'm' +F18.596800000000002 +sg8 +F1.1100000000000001 +sg9 +F309.38005500000003 +sg10 +(lp3329 +L344144474L +aL344144475L +aL344144476L +aL344144477L +aL344144478L +asg12 +(lp3330 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138213099999 +ss(F309.38811500000003 +F0.33812399999999998 +F0.92408000000000001 +F1.0301199999999999 +I0 +tp3331 +(dp3332 +g4 +F0.33812399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.31328 +sS'm' +F22.5518 +sg8 +F1.0301199999999999 +sg9 +F309.38811500000003 +sg10 +(lp3333 +L345224198L +aL345224199L +aL345224200L +aL345224201L +asg12 +(lp3334 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92408000000000001 +sS't' +F53673.083532899996 +ss(F309.38650699999999 +F0.33956199999999997 +F0.83178799999999997 +F0.94675299999999996 +I0 +tp3335 +(dp3336 +g4 +F0.33956199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F7.7061700000000002 +sS'm' +F24.709099999999999 +sg8 +F0.94675299999999996 +sg9 +F309.38650699999999 +sg10 +(lp3337 +L343120669L +aL343120670L +aL343120671L +aL343120672L +aL343120673L +asg12 +(lp3338 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.83178799999999997 +sS't' +F53288.111794800003 +ss(F309.36492099999998 +F0.33457900000000002 +F0.786802 +F0.83645499999999995 +I0 +tp3339 +(dp3340 +g4 +F0.33457900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.3113600000000001 +sS'm' +F23.209900000000001 +sg8 +F0.83645499999999995 +sg9 +F309.36492099999998 +sg10 +(lp3341 +L343278750L +aL343278751L +aL343278752L +aL343278753L +asg12 +(lp3342 +I1 +aI2 +aI3 +aI4 +asg14 +F0.786802 +sS't' +F53302.109062099997 +ss(F309.382317 +F0.324517 +F0.82827799999999996 +F0.94516599999999995 +I0 +tp3343 +(dp3344 +g4 +F0.324517 +sg5 +I0 +sg6 +I0 +sg7 +F7.1030899999999999 +sS'm' +F24.620799999999999 +sg8 +F0.94516599999999995 +sg9 +F309.382317 +sg10 +(lp3345 +L343126097L +aL343126098L +aL343126099L +aL343126100L +aL343126101L +asg12 +(lp3346 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82827799999999996 +sS't' +F53288.111783200002 +ss(F309.382384 +F0.32449 +F0.775281 +F0.75410299999999997 +I0 +tp3347 +(dp3348 +g4 +F0.32449 +sg5 +I0 +sg6 +I0 +sg7 +F3.1414300000000002 +sS'm' +F23.017900000000001 +sg8 +F0.75410299999999997 +sg9 +F309.382384 +sg10 +(lp3349 +L342830452L +aL342830453L +aL342830454L +aL342830455L +aL342830456L +asg12 +(lp3350 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.775281 +sS't' +F53243.255779200001 +ss(F309.368357 +F0.34221600000000002 +F1.0563 +F0.95348500000000003 +I0 +tp3351 +(dp3352 +g4 +F0.34221600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.2445200000000001 +sS'm' +F24.272500000000001 +sg8 +F0.95348500000000003 +sg9 +F309.368357 +sg10 +(lp3353 +L346337804L +aL346337805L +aL346337806L +aL346337807L +asg12 +(lp3354 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0563 +sS't' +F53974.161218599998 +ss(F309.386483 +F0.32197199999999998 +F1.05002 +F0.94402200000000003 +I0 +tp3355 +(dp3356 +g4 +F0.32197199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.720275 +sS'm' +F22.070699999999999 +sg8 +F0.94402200000000003 +sg9 +F309.386483 +sg10 +(lp3357 +L346336652L +aL346336653L +aL346336654L +aL346336655L +aL346336656L +asg12 +(lp3358 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159610499999 +ss(F309.360862 +F0.31768099999999999 +F1.0101899999999999 +F0.99214599999999997 +I0 +tp3359 +(dp3360 +g4 +F0.31768099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.37345600000000001 +sS'm' +F22.3353 +sg8 +F0.99214599999999997 +sg9 +F309.360862 +sg10 +(lp3361 +L342965967L +aL342965968L +aL342965969L +aL342965970L +asg12 +(lp3362 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101899999999999 +sS't' +F53270.136204599999 +ss(F309.364893 +F0.33454600000000001 +F0.78314499999999998 +F0.77153300000000002 +I0 +tp3363 +(dp3364 +g4 +F0.33454600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.2979400000000001 +sS'm' +F22.057600000000001 +sg8 +F0.77153300000000002 +sg9 +F309.364893 +sg10 +(lp3365 +L342832158L +aL342832159L +aL342832160L +aL342832161L +aL342832162L +asg12 +(lp3366 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.78314499999999998 +sS't' +F53243.255730700002 +ss(F309.373085 +F0.32444600000000001 +F0.86507500000000004 +F0.90006200000000003 +I0 +tp3367 +(dp3368 +g4 +F0.32444600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.1843699999999999 +sS'm' +F23.2789 +sg8 +F0.90006200000000003 +sg9 +F309.373085 +sg10 +(lp3369 +L345814846L +aL345814847L +aL345814848L +aL345814849L +aL345814850L +asg12 +(lp3370 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86507500000000004 +sS't' +F53693.088325999997 +ss(F309.36599200000001 +F0.33172800000000002 +F0.98400600000000005 +F0.98800500000000002 +I0 +tp3371 +(dp3372 +g4 +F0.33172800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.17036899999999999 +sS'm' +F20.444500000000001 +sg8 +F0.98800500000000002 +sg9 +F309.36599200000001 +sg10 +(lp3373 +L346459202L +aL346459203L +aL346459204L +aL346459205L +aL346459206L +asg12 +(lp3374 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400600000000005 +sS't' +F54007.119878600002 +ss(F309.38795900000002 +F0.34223100000000001 +F0.47608200000000001 +F0.45407900000000001 +I0 +tp3375 +(dp3376 +g4 +F0.34223100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F7.1804300000000003 +sS'm' +F24.360900000000001 +sg8 +F0.45407900000000001 +sg9 +F309.38795900000002 +sg10 +(lp3377 +L344871439L +aL344871440L +aL344871441L +aL344871442L +asg12 +(lp3378 +I0 +aI2 +aI3 +aI4 +asg14 +F0.47608200000000001 +sS't' +F53668.109039100003 +ss(F309.38261499999999 +F0.33971800000000002 +F0.61600999999999995 +F0.77501600000000004 +I0 +tp3379 +(dp3380 +g4 +F0.33971800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.066341999999999998 +sS'm' +F18.699999999999999 +sg8 +F0.77501600000000004 +sg9 +F309.38261499999999 +sg10 +(lp3381 +L346166335L +aL346166336L +aL346166337L +aL346166338L +aL346166339L +aL346166340L +aL346166341L +aL346166342L +aL346166343L +aL346166344L +asg12 +(lp3382 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61600999999999995 +sS't' +F53704.071680300003 +ss(F309.37100800000002 +F0.33034799999999997 +F0.92112000000000005 +F1.1003000000000001 +I0 +tp3383 +(dp3384 +g4 +F0.33034799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F1.30566 +sS'm' +F23.022500000000001 +sg8 +F1.1003000000000001 +sg9 +F309.37100800000002 +sg10 +(lp3385 +L345539510L +aL345539511L +aL345539512L +aL345539513L +aL345539514L +asg12 +(lp3386 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92112000000000005 +sS't' +F53677.099749000001 +ss(F309.367636 +F0.32835500000000001 +F1.0129999999999999 +F1.02504 +I0 +tp3387 +(dp3388 +g4 +F0.32835500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.4462000000000002 +sS'm' +F24.375800000000002 +sg8 +F1.02504 +sg9 +F309.367636 +sg10 +(lp3389 +L342970359L +aL342970360L +aL342970361L +aL342970362L +asg12 +(lp3390 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0129999999999999 +sS't' +F53270.136223399997 +ss(F309.37795699999998 +F0.33785799999999999 +F0.77501200000000003 +F0.75402599999999997 +I0 +tp3391 +(dp3392 +g4 +F0.33785799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.067347000000000004 +sS'm' +F18.373699999999999 +sg8 +F0.75402599999999997 +sg9 +F309.37795699999998 +sg10 +(lp3393 +L342825733L +aL342825734L +aL342825735L +aL342825736L +aL342825737L +asg12 +(lp3394 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501200000000003 +sS't' +F53243.255766900002 +ss(F309.372365 +F0.32411099999999998 +F0.85108600000000001 +F0.91310500000000006 +I0 +tp3395 +(dp3396 +g4 +F0.32411099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.3136800000000002 +sS'm' +F23.465900000000001 +sg8 +F0.91310500000000006 +sg9 +F309.372365 +sg10 +(lp3397 +L343882011L +aL343882012L +aL343882013L +aL343882014L +aL343882015L +asg12 +(lp3398 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85108600000000001 +sS't' +F53626.144946499997 +ss(F309.36492299999998 +F0.33460899999999999 +F0.93801299999999999 +F0.87860000000000005 +I0 +tp3399 +(dp3400 +g4 +F0.33460899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.2581600000000002 +sS'm' +F23.400200000000002 +sg8 +F0.87860000000000005 +sg9 +F309.36492299999998 +sg10 +(lp3401 +L345030592L +aL345030593L +aL345030594L +aL345030595L +aL345030596L +asg12 +(lp3402 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93801299999999999 +sS't' +F53670.113829100002 +ss(F309.37573800000001 +F0.34615499999999999 +F1.05017 +F0.94423199999999996 +I0 +tp3403 +(dp3404 +g4 +F0.34615499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.28739 +sS'm' +F22.715399999999999 +sg8 +F0.94423199999999996 +sg9 +F309.37573800000001 +sg10 +(lp3405 +L346336432L +aL346336433L +aL346336434L +aL346336435L +aL346336436L +asg12 +(lp3406 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05017 +sS't' +F53974.159580699998 +ss(F309.36310600000002 +F0.33106400000000002 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp3407 +(dp3408 +g4 +F0.33106400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.061655500000000002 +sS'm' +F18.771899999999999 +sg8 +F1.0100100000000001 +sg9 +F309.36310600000002 +sg10 +(lp3409 +L345363425L +aL345363426L +aL345363427L +aL345363428L +aL345363429L +aL345363430L +aL345363431L +aL345363432L +aL345363433L +aL345363434L +asg12 +(lp3410 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078694299998 +ss(F309.36670299999997 +F0.335563 +F0.885378 +F1.11033 +I0 +tp3411 +(dp3412 +g4 +F0.335563 +sg5 +I0 +sg6 +I0 +sg7 +F1.5275000000000001 +sS'm' +F24.456099999999999 +sg8 +F1.11033 +sg9 +F309.36670299999997 +sg10 +(lp3413 +L344155442L +aL344155443L +aL344155444L +aL344155445L +asg12 +(lp3414 +I1 +aI2 +aI3 +aI4 +asg14 +F0.885378 +sS't' +F53635.139834499998 +ss(F309.382609 +F0.33968700000000002 +F0.93300700000000003 +F0.87800800000000001 +I0 +tp3415 +(dp3416 +g4 +F0.33968700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.057050799999999999 +sS'm' +F18.760400000000001 +sg8 +F0.87800800000000001 +sg9 +F309.382609 +sg10 +(lp3417 +L345024667L +aL345024668L +aL345024669L +aL345024670L +aL345024671L +aL345024672L +aL345024673L +aL345024674L +aL345024675L +aL345024676L +asg12 +(lp3418 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.113878199998 +ss(F309.386504 +F0.321994 +F1.08002 +F1.0100199999999999 +I0 +tp3419 +(dp3420 +g4 +F0.321994 +sg5 +I0 +sg6 +I0 +sg7 +F0.58171499999999998 +sS'm' +F22.127500000000001 +sg8 +F1.0100199999999999 +sg9 +F309.386504 +sg10 +(lp3421 +L345370466L +aL345370467L +aL345370468L +aL345370469L +aL345370470L +aL345370471L +aL345370472L +aL345370473L +aL345370474L +aL345370475L +asg12 +(lp3422 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08002 +sS't' +F53675.078759299999 +ss(F309.36310500000002 +F0.33105699999999999 +F0.24806400000000001 +F0.34804499999999999 +I0 +tp3423 +(dp3424 +g4 +F0.33105699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.061575900000000003 +sS'm' +F18.8401 +sg8 +F0.34804499999999999 +sg9 +F309.36310500000002 +sg10 +(lp3425 +L327903511L +aL327903512L +aL327903513L +aL327903514L +aL327903515L +aL327903516L +aL327903517L +aL327903518L +aL327903519L +aL327903520L +asg12 +(lp3426 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24806400000000001 +sS't' +F53312.0629071 +ss(F309.36240800000002 +F0.31965700000000002 +F0.41313899999999998 +F0.41214400000000001 +I0 +tp3427 +(dp3428 +g4 +F0.31965700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.4200900000000001 +sS'm' +F23.393799999999999 +sg8 +F0.41214400000000001 +sg9 +F309.36240800000002 +sg10 +(lp3429 +L345997684L +aL345997685L +aL345997686L +aL345997687L +aL345997688L +asg12 +(lp3430 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41313899999999998 +sS't' +F53703.093077099998 +ss(F309.382182 +F0.32172099999999998 +F0.93300899999999998 +F0.87801099999999999 +I0 +tp3431 +(dp3432 +g4 +F0.32172099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.18448400000000001 +sS'm' +F20.547599999999999 +sg8 +F0.87801099999999999 +sg9 +F309.382182 +sg10 +(lp3433 +L345027364L +aL345027365L +aL345027366L +aL345027367L +aL345027368L +asg12 +(lp3434 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300899999999998 +sS't' +F53670.113877000003 +ss(F309.36308100000002 +F0.32269799999999998 +F1.09144 +F1.07098 +I0 +tp3435 +(dp3436 +g4 +F0.32269799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F9.2365499999999994 +sS'm' +F25.341699999999999 +sg8 +F1.07098 +sg9 +F309.36308100000002 +sg10 +(lp3437 +L345685618L +aL345685619L +aL345685620L +aL345685621L +aL345685622L +asg12 +(lp3438 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09144 +sS't' +F53680.086392099998 +ss(F309.38890099999998 +F0.343775 +F0.50604199999999999 +F0.45912900000000001 +I0 +tp3439 +(dp3440 +g4 +F0.343775 +sg5 +I0 +sg6 +I0 +sg7 +F0.0216838 +sS'm' +F14.876799999999999 +sg8 +F0.45912900000000001 +sg9 +F309.38890099999998 +sg10 +(lp3441 +L153248896L +aL153248897L +aL153248898L +aL153248899L +aL153248895L +asg12 +(lp3442 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.50604199999999999 +sS't' +F53702.085675499999 +ss(F309.37315599999999 +F0.31751699999999999 +F0.94359199999999999 +F1.0395700000000001 +I0 +tp3443 +(dp3444 +g4 +F0.31751699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.319 +sS'm' +F23.4998 +sg8 +F1.0395700000000001 +sg9 +F309.37315599999999 +sg10 +(lp3445 +L345225999L +aL345226000L +aL345226001L +aL345226002L +asg12 +(lp3446 +I0 +aI1 +aI2 +aI3 +asg14 +F0.94359199999999999 +sS't' +F53673.081832900003 +ss(F309.36927100000003 +F0.318969 +F0.476049 +F0.454044 +I0 +tp3447 +(dp3448 +g4 +F0.318969 +sg5 +I0 +sg6 +I0 +sg7 +F0.52559500000000003 +sS'm' +F21.4907 +sg8 +F0.454044 +sg9 +F309.36927100000003 +sg10 +(lp3449 +L344873084L +aL344873085L +aL344873086L +aL344873087L +aL344873088L +asg12 +(lp3450 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.476049 +sS't' +F53668.108987200001 +ss(F309.38025900000002 +F0.340393 +F0.94222600000000001 +F0.887571 +I0 +tp3451 +(dp3452 +g4 +F0.340393 +sg5 +I0 +sg6 +I0 +sg7 +F1.2154100000000001 +sS'm' +F24.010300000000001 +sg8 +F0.887571 +sg9 +F309.38025900000002 +sg10 +(lp3453 +L345024695L +aL345024696L +aL345024697L +aL345024698L +asg12 +(lp3454 +I1 +aI2 +aI3 +aI4 +asg14 +F0.94222600000000001 +sS't' +F53670.115530100004 +ss(F309.37196299999999 +F0.34104899999999999 +F0.92100800000000005 +F1.1000099999999999 +I0 +tp3455 +(dp3456 +g4 +F0.34104899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.54055900000000001 +sS'm' +F22.0229 +sg8 +F1.1000099999999999 +sg9 +F309.37196299999999 +sg10 +(lp3457 +L345535169L +aL345535170L +aL345535171L +aL345535172L +aL345535173L +asg12 +(lp3458 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100800000000005 +sS't' +F53677.0997517 +ss(F309.386258 +F0.33439600000000003 +F0.74126800000000004 +F0.96047099999999996 +I0 +tp3459 +(dp3460 +g4 +F0.33439600000000003 +sg5 +I0 +sg6 +I0 +sg7 +F5.5967900000000004 +sS'm' +F24.748200000000001 +sg8 +F0.96047099999999996 +sg9 +F309.386258 +sg10 +(lp3461 +L344483161L +aL344483162L +aL344483163L +aL344483164L +aL344483165L +asg12 +(lp3462 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74126800000000004 +sS't' +F53644.123883200002 +ss(F309.36850299999998 +F0.33939900000000001 +F0.74336500000000005 +F0.961808 +I0 +tp3463 +(dp3464 +g4 +F0.33939900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.72403099999999998 +sS'm' +F23.734500000000001 +sg8 +F0.961808 +sg9 +F309.36850299999998 +sg10 +(lp3465 +L344485475L +aL344485476L +aL344485477L +aL344485478L +asg12 +(lp3466 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74336500000000005 +sS't' +F53644.125492300001 +ss(F309.36147399999999 +F0.318606 +F0.85501499999999997 +F0.915663 +I0 +tp3467 +(dp3468 +g4 +F0.318606 +sg5 +I0 +sg6 +I0 +sg7 +F1.5804800000000001 +sS'm' +F22.660799999999998 +sg8 +F0.915663 +sg9 +F309.36147399999999 +sg10 +(lp3469 +L343878214L +aL343878215L +aL343878216L +aL343878217L +aL343878218L +asg12 +(lp3470 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85501499999999997 +sS't' +F53626.1449163 +ss(F309.38068299999998 +F0.328569 +F0.92679 +F1.0329299999999999 +I0 +tp3471 +(dp3472 +g4 +F0.328569 +sg5 +I0 +sg6 +I0 +sg7 +F2.5383900000000001 +sS'm' +F23.598600000000001 +sg8 +F1.0329299999999999 +sg9 +F309.38068299999998 +sg10 +(lp3473 +L345226038L +aL345226039L +aL345226040L +aL345226041L +aL345226042L +asg12 +(lp3474 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92679 +sS't' +F53673.081853800002 +ss(F309.385426 +F0.34017399999999998 +F0.74902999999999997 +F0.978024 +I0 +tp3475 +(dp3476 +g4 +F0.34017399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.31655899999999998 +sS'm' +F21.479700000000001 +sg8 +F0.978024 +sg9 +F309.385426 +sg10 +(lp3477 +L171381663L +aL171381664L +aL171381665L +aL171381666L +aL171381667L +asg12 +(lp3478 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74902999999999997 +sS't' +F54005.107183400003 +ss(F309.38939299999998 +F0.32208199999999998 +F0.57084299999999999 +F0.51886399999999999 +I0 +tp3479 +(dp3480 +g4 +F0.32208199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.35216999999999998 +sS'm' +F21.7407 +sg8 +F0.51886399999999999 +sg9 +F309.38939299999998 +sg10 +(lp3481 +L344711600L +aL344711601L +aL344711602L +aL344711603L +asg12 +(lp3482 +I1 +aI2 +aI3 +aI4 +asg14 +F0.57084299999999999 +sS't' +F53654.160199899998 +ss(F309.38072 +F0.328573 +F0.85453900000000005 +F0.91506600000000005 +I0 +tp3483 +(dp3484 +g4 +F0.328573 +sg5 +I0 +sg6 +I0 +sg7 +F1.10581 +sS'm' +F23.061499999999999 +sg8 +F0.91506600000000005 +sg9 +F309.38072 +sg10 +(lp3485 +L343882144L +aL343882145L +aL343882146L +aL343882147L +asg12 +(lp3486 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85453900000000005 +sS't' +F53626.146628199996 +ss(F309.35981099999998 +F0.32507599999999998 +F0.85602500000000004 +F0.83902500000000002 +I0 +tp3487 +(dp3488 +g4 +F0.32507599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.0495986 +sS'm' +F19.562999999999999 +sg8 +F0.83902500000000002 +sg9 +F309.35981099999998 +sg10 +(lp3489 +L189993937L +asg12 +(lp3490 +I2 +asg14 +F0.85602500000000004 +sS't' +F53704.069959599998 +ss(F309.367458 +F0.32932600000000001 +F0.77517599999999998 +F0.75419199999999997 +I0 +tp3491 +(dp3492 +g4 +F0.32932600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.27827 +sS'm' +F22.807200000000002 +sg8 +F0.75419199999999997 +sg9 +F309.367458 +sg10 +(lp3493 +L342832178L +aL342832179L +aL342832180L +aL342832181L +asg12 +(lp3494 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77517599999999998 +sS't' +F53243.257396200002 +ss(F309.36311999999998 +F0.33107199999999998 +F0.74900599999999995 +F0.97800699999999996 +I0 +tp3495 +(dp3496 +g4 +F0.33107199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.017933899999999999 +sS'm' +F17.775400000000001 +sg8 +F0.97800699999999996 +sg9 +F309.36311999999998 +sg10 +(lp3497 +L171377863L +aL171377864L +aL171377860L +aL171377861L +aL171377862L +asg12 +(lp3498 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.74900599999999995 +sS't' +F54005.106292099998 +ss(F309.377972 +F0.33783099999999999 +F0.93300899999999998 +F0.87801099999999999 +I0 +tp3499 +(dp3500 +g4 +F0.33783099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.048037499999999997 +sS'm' +F18.359200000000001 +sg8 +F0.87801099999999999 +sg9 +F309.377972 +sg10 +(lp3501 +L345024635L +aL345024636L +aL345024637L +aL345024638L +aL345024639L +asg12 +(lp3502 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300899999999998 +sS't' +F53670.113865300002 +ss(F309.37472000000002 +F0.33168799999999998 +F0.74100500000000002 +F0.96000600000000003 +I0 +tp3503 +(dp3504 +g4 +F0.33168799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.039633099999999997 +sS'm' +F15.931100000000001 +sg8 +F0.96000600000000003 +sg9 +F309.37472000000002 +sg10 +(lp3505 +L344475775L +aL344475776L +aL344475777L +aL344475778L +aL344475779L +asg12 +(lp3506 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100500000000002 +sS't' +F53644.123851199998 +ss(F309.36912000000001 +F0.34572799999999998 +F0.93310400000000004 +F0.87818200000000002 +I0 +tp3507 +(dp3508 +g4 +F0.34572799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.51843899999999998 +sS'm' +F23.0716 +sg8 +F0.87818200000000002 +sg9 +F309.36912000000001 +sg10 +(lp3509 +L345030615L +aL345030616L +aL345030617L +aL345030618L +asg12 +(lp3510 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93310400000000004 +sS't' +F53670.115499200001 +ss(F309.37769700000001 +F0.34561700000000001 +F1.09006 +F1.0700499999999999 +I0 +tp3511 +(dp3512 +g4 +F0.34561700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.34171200000000002 +sS'm' +F22.9726 +sg8 +F1.0700499999999999 +sg9 +F309.37769700000001 +sg10 +(lp3513 +L345683910L +aL345683911L +aL345683912L +aL345683913L +aL345683914L +aL345683915L +aL345683916L +aL345683917L +asg12 +(lp3514 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09006 +sS't' +F53680.088091099999 +ss(F309.36784699999998 +F0.34503400000000001 +F1.0102500000000001 +F0.95423899999999995 +I0 +tp3515 +(dp3516 +g4 +F0.34503400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.41012799999999999 +sS'm' +F22.772200000000002 +sg8 +F0.95423899999999995 +sg9 +F309.36784699999998 +sg10 +(lp3517 +L343715739L +aL343715740L +aL343715741L +aL343715742L +aL343715738L +asg12 +(lp3518 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.0102500000000001 +sS't' +F53623.160380300003 +ss(F309.37303700000001 +F0.31732700000000003 +F0.85150800000000004 +F0.91342100000000004 +I0 +tp3519 +(dp3520 +g4 +F0.31732700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.50391200000000003 +sS'm' +F22.3552 +sg8 +F0.91342100000000004 +sg9 +F309.37303700000001 +sg10 +(lp3521 +L343883553L +aL343883554L +aL343883555L +asg12 +(lp3522 +I2 +aI3 +aI4 +asg14 +F0.85150800000000004 +sS't' +F53626.143289799998 +ss(F309.36671899999999 +F0.335559 +F0.92121200000000003 +F1.10012 +I0 +tp3523 +(dp3524 +g4 +F0.335559 +sg5 +I0 +sg6 +I0 +sg7 +F5.65116 +sS'm' +F24.627600000000001 +sg8 +F1.10012 +sg9 +F309.36671899999999 +sg10 +(lp3525 +L345539425L +aL345539426L +aL345539427L +aL345539428L +aL345539429L +asg12 +(lp3526 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92121200000000003 +sS't' +F53677.099737099998 +ss(F309.37309199999999 +F0.324457 +F0.98404599999999998 +F0.98804199999999998 +I0 +tp3527 +(dp3528 +g4 +F0.324457 +sg5 +I0 +sg6 +I0 +sg7 +F0.298097 +sS'm' +F22.3659 +sg8 +F0.98804199999999998 +sg9 +F309.37309199999999 +sg10 +(lp3529 +L346463947L +aL346463948L +aL346463949L +aL346463950L +asg12 +(lp3530 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98404599999999998 +sS't' +F54007.121556799997 +ss(F309.380922 +F0.33934599999999998 +F1.01024 +F0.99225600000000003 +I0 +tp3531 +(dp3532 +g4 +F0.33934599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.8937599999999999 +sS'm' +F23.515899999999998 +sg8 +F0.99225600000000003 +sg9 +F309.380922 +sg10 +(lp3533 +L342962126L +aL342962127L +aL342962128L +aL342962129L +aL342962130L +asg12 +(lp3534 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01024 +sS't' +F53270.134601899998 +ss(F309.36005599999999 +F0.32049800000000001 +F0.92400599999999999 +F1.0300100000000001 +I0 +tp3535 +(dp3536 +g4 +F0.32049800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.089909699999999995 +sS'm' +F19.6463 +sg8 +F1.0300100000000001 +sg9 +F309.36005599999999 +sg10 +(lp3537 +L345219754L +aL345219755L +aL345219756L +aL345219757L +aL345219758L +asg12 +(lp3538 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400599999999999 +sS't' +F53673.081796500002 +ss(F309.37233600000002 +F0.32943499999999998 +F1.0537300000000001 +F0.94681000000000004 +I0 +tp3539 +(dp3540 +g4 +F0.32943499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F6.4995700000000003 +sS'm' +F24.500499999999999 +sg8 +F0.94681000000000004 +sg9 +F309.37233600000002 +sg10 +(lp3541 +L346337833L +aL346337834L +aL346337835L +aL346337836L +aL346337837L +asg12 +(lp3542 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0537300000000001 +sS't' +F53974.159571199998 +ss(F309.369302 +F0.31896999999999998 +F0.56514699999999995 +F0.51411700000000005 +I0 +tp3543 +(dp3544 +g4 +F0.31896999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.76873499999999995 +sS'm' +F21.602699999999999 +sg8 +F0.51411700000000005 +sg9 +F309.369302 +sg10 +(lp3545 +L344711547L +aL344711548L +aL344711549L +aL344711550L +aL344711551L +asg12 +(lp3546 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.56514699999999995 +sS't' +F53654.158485599997 +ss(F309.38719800000001 +F0.31923200000000002 +F0.78345600000000004 +F0.83069099999999996 +I0 +tp3547 +(dp3548 +g4 +F0.31923200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.7990400000000002 +sS'm' +F23.155899999999999 +sg8 +F0.83069099999999996 +sg9 +F309.38719800000001 +sg10 +(lp3549 +L343279109L +aL343279110L +aL343279111L +aL343279112L +aL343279113L +asg12 +(lp3550 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.78345600000000004 +sS't' +F53302.107465499997 +ss(F309.36237699999998 +F0.31965399999999999 +F0.50621899999999997 +F0.459256 +I0 +tp3551 +(dp3552 +g4 +F0.31965399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.3900899999999998 +sS'm' +F23.152200000000001 +sg8 +F0.459256 +sg9 +F309.36237699999998 +sg10 +(lp3553 +L153250015L +aL153250016L +aL153250017L +aL153250018L +aL153250019L +asg12 +(lp3554 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50621899999999997 +sS't' +F53702.083943400001 +ss(F309.373063 +F0.32444000000000001 +F1.09002 +F1.07002 +I0 +tp3555 +(dp3556 +g4 +F0.32444000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.9510700000000001 +sS'm' +F24.413399999999999 +sg8 +F1.07002 +sg9 +F309.373063 +sg10 +(lp3557 +L345681152L +aL345681153L +aL345681154L +aL345681155L +aL345681156L +asg12 +(lp3558 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09002 +sS't' +F53680.086419799998 +ss(F309.36926999999997 +F0.31895699999999999 +F0.98401099999999997 +F0.988008 +I0 +tp3559 +(dp3560 +g4 +F0.31895699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.32564599999999999 +sS'm' +F21.2575 +sg8 +F0.988008 +sg9 +F309.36926999999997 +sg10 +(lp3561 +L346461932L +aL346461933L +aL346461934L +aL346461935L +aL346461936L +asg12 +(lp3562 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98401099999999997 +sS't' +F54007.1198878 +ss(F309.37899199999998 +F0.327019 +F0.93301699999999999 +F0.87801799999999997 +I0 +tp3563 +(dp3564 +g4 +F0.327019 +sg5 +I0 +sg6 +I0 +sg7 +F0.30608299999999999 +sS'm' +F21.159300000000002 +sg8 +F0.87801799999999997 +sg9 +F309.37899199999998 +sg10 +(lp3565 +L345027301L +aL345027302L +aL345027303L +aL345027304L +aL345027305L +aL345027306L +aL345027307L +aL345027308L +aL345027309L +aL345027310L +asg12 +(lp3566 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301699999999999 +sS't' +F53670.113868100001 +ss(F309.36918800000001 +F0.34576699999999999 +F1.0101599999999999 +F0.95314699999999997 +I0 +tp3567 +(dp3568 +g4 +F0.34576699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.68005700000000002 +sS'm' +F23.323499999999999 +sg8 +F0.95314699999999997 +sg9 +F309.36918800000001 +sg10 +(lp3569 +L343715725L +aL343715726L +aL343715727L +aL343715728L +asg12 +(lp3570 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101599999999999 +sS't' +F53623.160384000003 +ss(F309.36978199999999 +F0.34467199999999998 +F0.74907000000000001 +F0.97803799999999996 +I0 +tp3571 +(dp3572 +g4 +F0.34467199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.534165 +sS'm' +F23.476700000000001 +sg8 +F0.97803799999999996 +sg9 +F309.36978199999999 +sg10 +(lp3573 +L171386236L +aL171386237L +aL171386238L +aL171386239L +asg12 +(lp3574 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74907000000000001 +sS't' +F54005.108798399997 +ss(F309.38260700000001 +F0.339721 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp3575 +(dp3576 +g4 +F0.339721 +sg5 +I0 +sg6 +I0 +sg7 +F0.061069499999999999 +sS'm' +F18.738900000000001 +sg8 +F1.0100100000000001 +sg9 +F309.38260700000001 +sg10 +(lp3577 +L345363806L +aL345363807L +aL345363808L +aL345363809L +aL345363810L +aL345363811L +aL345363812L +aL345363813L +aL345363814L +aL345363815L +asg12 +(lp3578 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078748499996 +ss(F309.372793 +F0.33522200000000002 +F0.74100600000000005 +F0.96000700000000005 +I0 +tp3579 +(dp3580 +g4 +F0.33522200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.57265500000000003 +sS'm' +F22.213999999999999 +sg8 +F0.96000700000000005 +sg9 +F309.372793 +sg10 +(lp3581 +L344478850L +aL344478851L +aL344478852L +aL344478853L +aL344478854L +asg12 +(lp3582 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.123845800001 +ss(F309.38203700000003 +F0.342968 +F0.77528399999999997 +F0.75425900000000001 +I0 +tp3583 +(dp3584 +g4 +F0.342968 +sg5 +I0 +sg6 +I0 +sg7 +F0.89943799999999996 +sS'm' +F21.470300000000002 +sg8 +F0.75425900000000001 +sg9 +F309.38203700000003 +sg10 +(lp3585 +L342827471L +aL342827472L +aL342827473L +aL342827474L +aL342827475L +asg12 +(lp3586 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77528399999999997 +sS't' +F53243.255778300001 +ss(F309.36008199999998 +F0.32048399999999999 +F0.93301100000000003 +F0.87801200000000001 +I0 +tp3587 +(dp3588 +g4 +F0.32048399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.096764000000000003 +sS'm' +F19.668299999999999 +sg8 +F0.87801200000000001 +sg9 +F309.36008199999998 +sg10 +(lp3589 +L345026939L +aL345026940L +aL345026941L +aL345026942L +aL345026943L +asg12 +(lp3590 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301100000000003 +sS't' +F53670.113815600002 +ss(F309.38365199999998 +F0.34501100000000001 +F0.82802699999999996 +F0.94502200000000003 +I0 +tp3591 +(dp3592 +g4 +F0.34501100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.46494200000000002 +sS'm' +F21.608000000000001 +sg8 +F0.94502200000000003 +sg9 +F309.38365199999998 +sg10 +(lp3593 +L343123432L +aL343123433L +aL343123434L +aL343123435L +aL343123436L +asg12 +(lp3594 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82802699999999996 +sS't' +F53288.111786900001 +ss(F309.36745100000002 +F0.32934999999999998 +F0.82807900000000001 +F0.94506400000000002 +I0 +tp3595 +(dp3596 +g4 +F0.32934999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.40075499999999997 +sS'm' +F22.7791 +sg8 +F0.94506400000000002 +sg9 +F309.36745100000002 +sg10 +(lp3597 +L343126880L +aL343126881L +aL343126882L +aL343126883L +aL343126876L +aL343126877L +aL343126878L +aL343126879L +asg12 +(lp3598 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82807900000000001 +sS't' +F53288.113400299997 +ss(F309.36504400000001 +F0.33014500000000002 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp3599 +(dp3600 +g4 +F0.33014500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.241589 +sS'm' +F21.081800000000001 +sg8 +F1.0100100000000001 +sg9 +F309.36504400000001 +sg10 +(lp3601 +L345363435L +aL345363436L +aL345363437L +aL345363438L +aL345363439L +asg12 +(lp3602 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078699700003 +ss(F309.38365199999998 +F0.34498800000000002 +F0.74101399999999995 +F0.96001199999999998 +I0 +tp3603 +(dp3604 +g4 +F0.34498800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.27913399999999999 +sS'm' +F21.363199999999999 +sg8 +F0.96001199999999998 +sg9 +F309.38365199999998 +sg10 +(lp3605 +L344479036L +aL344479037L +aL344479038L +aL344479039L +aL344479040L +asg12 +(lp3606 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74101399999999995 +sS't' +F53644.123875999998 +ss(F309.385424 +F0.34012999999999999 +F0.92102700000000004 +F1.1000300000000001 +I0 +tp3607 +(dp3608 +g4 +F0.34012999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.35265800000000003 +sS'm' +F21.531199999999998 +sg8 +F1.1000300000000001 +sg9 +F309.385424 +sg10 +(lp3609 +L345535410L +aL345535411L +aL345535412L +aL345535413L +aL345535414L +asg12 +(lp3610 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92102700000000004 +sS't' +F53677.099789100001 +ss(F309.37280600000003 +F0.33521899999999999 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp3611 +(dp3612 +g4 +F0.33521899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.54607499999999998 +sS'm' +F22.038399999999999 +sg8 +F1.1000099999999999 +sg9 +F309.37280600000003 +sg10 +(lp3613 +L345535179L +aL345535180L +aL345535181L +aL345535182L +aL345535183L +asg12 +(lp3614 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099754000003 +ss(F309.36926 +F0.31895499999999999 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp3615 +(dp3616 +g4 +F0.31895499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.23302800000000001 +sS'm' +F21.1785 +sg8 +F1.0700099999999999 +sg9 +F309.36926 +sg10 +(lp3617 +L345679103L +aL345679104L +aL345679105L +aL345679106L +aL345679107L +asg12 +(lp3618 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086409299998 +ss(F309.36312600000002 +F0.32271100000000003 +F0.93722899999999998 +F0.88184200000000001 +I0 +tp3619 +(dp3620 +g4 +F0.32271100000000003 +sg5 +I0 +sg6 +I0 +sg7 +F7.3110900000000001 +sS'm' +F24.684899999999999 +sg8 +F0.88184200000000001 +sg9 +F309.36312600000002 +sg10 +(lp3621 +L345032066L +aL345032067L +aL345032068L +aL345032069L +aL345032070L +asg12 +(lp3622 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93722899999999998 +sS't' +F53670.113824100001 +ss(F309.36521900000002 +F0.33728399999999997 +F0.88507000000000002 +F1.11008 +I0 +tp3623 +(dp3624 +g4 +F0.33728399999999997 +sg5 +I0 +sg6 +I0 +sg7 +F1.3785400000000001 +sS'm' +F23.265699999999999 +sg8 +F1.11008 +sg9 +F309.36521900000002 +sg10 +(lp3625 +L344153071L +aL344153072L +aL344153073L +aL344153074L +aL344153075L +asg12 +(lp3626 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88507000000000002 +sS't' +F53635.138171899998 +ss(F309.36306000000002 +F0.32270799999999999 +F1.0518099999999999 +F0.94554499999999997 +I0 +tp3627 +(dp3628 +g4 +F0.32270799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.546261 +sS'm' +F23.327000000000002 +sg8 +F0.94554499999999997 +sg9 +F309.36306000000002 +sg10 +(lp3629 +L346337748L +aL346337749L +aL346337750L +aL346337751L +asg12 +(lp3630 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0518099999999999 +sS't' +F53974.161203900003 +ss(F309.361515 +F0.31853900000000002 +F0.74156299999999997 +F0.960368 +I0 +tp3631 +(dp3632 +g4 +F0.31853900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.33691199999999999 +sS'm' +F22.865100000000002 +sg8 +F0.960368 +sg9 +F309.361515 +sg10 +(lp3633 +L344475492L +aL344475493L +aL344475494L +aL344475495L +asg12 +(lp3634 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74156299999999997 +sS't' +F53644.125472899999 +ss(F309.375765 +F0.34618700000000002 +F0.93572900000000003 +F0.88273900000000005 +I0 +tp3635 +(dp3636 +g4 +F0.34618700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.5863 +sS'm' +F23.549600000000002 +sg8 +F0.88273900000000005 +sg9 +F309.375765 +sg10 +(lp3637 +L345032189L +aL345032190L +aL345032191L +aL345032192L +aL345032193L +asg12 +(lp3638 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93572900000000003 +sS't' +F53670.113859199999 +ss(F309.37096000000003 +F0.33041300000000001 +F1.01024 +F0.953511 +I0 +tp3639 +(dp3640 +g4 +F0.33041300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.41711700000000002 +sS'm' +F22.793600000000001 +sg8 +F0.953511 +sg9 +F309.37096000000003 +sg10 +(lp3641 +L343715802L +aL343715803L +aL343715804L +aL343715805L +asg12 +(lp3642 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01024 +sS't' +F53623.160388999997 +ss(F309.37282099999999 +F0.335225 +F0.92401500000000003 +F1.0300199999999999 +I0 +tp3643 +(dp3644 +g4 +F0.335225 +sg5 +I0 +sg6 +I0 +sg7 +F0.61144399999999999 +sS'm' +F22.016400000000001 +sg8 +F1.0300199999999999 +sg9 +F309.37282099999999 +sg10 +(lp3645 +L345220034L +aL345220035L +aL345220036L +aL345220037L +aL345220038L +asg12 +(lp3646 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401500000000003 +sS't' +F53673.081832000003 +ss(F309.36313799999999 +F0.331063 +F0.64902000000000004 +F0.53902300000000003 +I0 +tp3647 +(dp3648 +g4 +F0.331063 +sg5 +I0 +sg6 +I0 +sg7 +F0.086982000000000004 +sS'm' +F18.857700000000001 +sg8 +F0.53902300000000003 +sg9 +F309.36313799999999 +sg10 +(lp3649 +L112296659L +aL112296660L +aL112296661L +aL112296662L +aL112296663L +asg12 +(lp3650 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64902000000000004 +sS't' +F53656.106059700003 +ss(F309.36805399999997 +F0.34612100000000001 +F1.05033 +F0.94443999999999995 +I0 +tp3651 +(dp3652 +g4 +F0.34612100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.66128600000000004 +sS'm' +F23.5305 +sg8 +F0.94443999999999995 +sg9 +F309.36805399999997 +sg10 +(lp3653 +L346336251L +aL346336252L +aL346336253L +aL346336254L +asg12 +(lp3654 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05033 +sS't' +F53974.1612178 +ss(F309.37794100000002 +F0.33784599999999998 +F0.828009 +F0.94500799999999996 +I0 +tp3655 +(dp3656 +g4 +F0.33784599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.049358199999999998 +sS'm' +F18.342600000000001 +sg8 +F0.94500799999999996 +sg9 +F309.37794100000002 +sg10 +(lp3657 +L343120506L +aL343120507L +aL343120508L +aL343120509L +aL343120510L +aL343120511L +aL343120512L +aL343120513L +aL343120514L +aL343120515L +asg12 +(lp3658 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828009 +sS't' +F53288.111771000004 +ss(F309.372972 +F0.32103399999999999 +F0.92560699999999996 +F1.03068 +I0 +tp3659 +(dp3660 +g4 +F0.32103399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.0221899999999999 +sS'm' +F23.865200000000002 +sg8 +F1.03068 +sg9 +F309.372972 +sg10 +(lp3661 +L345225973L +aL345225974L +aL345225975L +aL345225976L +asg12 +(lp3662 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92560699999999996 +sS't' +F53673.083490800003 +ss(F309.38755099999997 +F0.33271800000000001 +F0.77573999999999999 +F0.754471 +I0 +tp3663 +(dp3664 +g4 +F0.33271800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.7670599999999999 +sS'm' +F22.8171 +sg8 +F0.754471 +sg9 +F309.38755099999997 +sg10 +(lp3665 +L342830491L +aL342830492L +aL342830493L +aL342830494L +aL342830495L +asg12 +(lp3666 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77573999999999999 +sS't' +F53243.255793600001 +ss(F309.38262800000001 +F0.31697399999999998 +F0.74399099999999996 +F0.96409400000000001 +I0 +tp3667 +(dp3668 +g4 +F0.31697399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.7386799999999996 +sS'm' +F24.568000000000001 +sg8 +F0.96409400000000001 +sg9 +F309.38262800000001 +sg10 +(lp3669 +L344485591L +aL344485592L +aL344485593L +aL344485594L +aL344485595L +asg12 +(lp3670 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74399099999999996 +sS't' +F53644.123873099998 +ss(F309.37309699999997 +F0.32446999999999998 +F1.08006 +F1.0100499999999999 +I0 +tp3671 +(dp3672 +g4 +F0.32446999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.30805100000000002 +sS'm' +F22.579699999999999 +sg8 +F1.0100499999999999 +sg9 +F309.37309699999997 +sg10 +(lp3673 +L345370250L +aL345370251L +aL345370252L +aL345370253L +asg12 +(lp3674 +I1 +aI2 +aI3 +aI4 +asg14 +F1.08006 +sS't' +F53675.080380500003 +ss(F309.381958 +F0.34303499999999998 +F0.24873500000000001 +F0.34843200000000002 +I0 +tp3675 +(dp3676 +g4 +F0.34303499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1873499999999999 +sS'm' +F22.306799999999999 +sg8 +F0.34843200000000002 +sg9 +F309.381958 +sg10 +(lp3677 +L327903711L +aL327903712L +aL327903713L +aL327903714L +aL327903715L +asg12 +(lp3678 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24873500000000001 +sS't' +F53312.062959499999 +ss(F309.375697 +F0.34621800000000003 +F0.98420700000000005 +F0.98830099999999999 +I0 +tp3679 +(dp3680 +g4 +F0.34621800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F2.0649500000000001 +sS'm' +F23.318300000000001 +sg8 +F0.98830099999999999 +sg9 +F309.375697 +sg10 +(lp3681 +L346465953L +aL346465954L +aL346465955L +aL346465956L +asg12 +(lp3682 +I0 +aI1 +aI2 +aI3 +asg14 +F0.98420700000000005 +sS't' +F54007.119905599997 +ss(F309.38006300000001 +F0.34212900000000002 +F0.828009 +F0.94500799999999996 +I0 +tp3683 +(dp3684 +g4 +F0.34212900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0550217 +sS'm' +F18.617699999999999 +sg8 +F0.94500799999999996 +sg9 +F309.38006300000001 +sg10 +(lp3685 +L343120534L +aL343120535L +aL343120536L +aL343120537L +aL343120538L +aL343120539L +aL343120540L +aL343120541L +aL343120542L +aL343120543L +asg12 +(lp3686 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828009 +sS't' +F53288.111776899997 +ss(F309.373086 +F0.32444800000000001 +F0.88502700000000001 +F1.11002 +I0 +tp3687 +(dp3688 +g4 +F0.32444800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.29941499999999999 +sS'm' +F22.636500000000002 +sg8 +F1.11002 +sg9 +F309.373086 +sg10 +(lp3689 +L344151934L +aL344151935L +aL344151936L +aL344151937L +asg12 +(lp3690 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88502700000000001 +sS't' +F53635.139852200002 +ss(F309.385471 +F0.34018900000000002 +F0.61610799999999999 +F0.77510699999999999 +I0 +tp3691 +(dp3692 +g4 +F0.34018900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.480574 +sS'm' +F21.3462 +sg8 +F0.77510699999999999 +sg9 +F309.385471 +sg10 +(lp3693 +L346171738L +aL346171739L +aL346171740L +aL346171741L +aL346171742L +asg12 +(lp3694 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61610799999999999 +sS't' +F53704.071688199998 +ss(F309.366356 +F0.34082299999999999 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp3695 +(dp3696 +g4 +F0.34082299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.055239799999999999 +sS'm' +F18.379799999999999 +sg8 +F1.0100100000000001 +sg9 +F309.366356 +sg10 +(lp3697 +L345363494L +aL345363495L +aL345363496L +aL345363497L +aL345363498L +asg12 +(lp3698 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078703400002 +ss(F309.38278200000002 +F0.32574999999999998 +F0.64917999999999998 +F0.53915000000000002 +I0 +tp3699 +(dp3700 +g4 +F0.32574999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1740699999999999 +sS'm' +F21.890499999999999 +sg8 +F0.53915000000000002 +sg9 +F309.38278200000002 +sg10 +(lp3701 +L112299418L +aL112299419L +aL112299420L +aL112299421L +aL112299422L +asg12 +(lp3702 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64917999999999998 +sS't' +F53656.106114299997 +ss(F309.36599799999999 +F0.331733 +F0.47602699999999998 +F0.45402700000000001 +I0 +tp3703 +(dp3704 +g4 +F0.331733 +sg5 +I0 +sg6 +I0 +sg7 +F0.20465 +sS'm' +F20.3904 +sg8 +F0.45402700000000001 +sg9 +F309.36599799999999 +sg10 +(lp3705 +L344871135L +aL344871136L +aL344871137L +aL344871138L +aL344871139L +asg12 +(lp3706 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602699999999998 +sS't' +F53668.108978099997 +ss(F309.38006200000001 +F0.34213199999999999 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp3707 +(dp3708 +g4 +F0.34213199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.066909099999999999 +sS'm' +F18.647600000000001 +sg8 +F0.94401199999999996 +sg9 +F309.38006200000001 +sg10 +(lp3709 +L346329339L +aL346329340L +aL346329341L +aL346329342L +aL346329343L +asg12 +(lp3710 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159592700002 +ss(F309.38795599999997 +F0.34224900000000003 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp3711 +(dp3712 +g4 +F0.34224900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.70560800000000001 +sS'm' +F22.254200000000001 +sg8 +F1.0100100000000001 +sg9 +F309.38795599999997 +sg10 +(lp3713 +L345363943L +aL345363944L +aL345363945L +aL345363946L +aL345363947L +asg12 +(lp3714 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078763400001 +ss(F309.382182 +F0.32174799999999998 +F0.749004 +F0.97800600000000004 +I0 +tp3715 +(dp3716 +g4 +F0.32174799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.182645 +sS'm' +F20.797899999999998 +sg8 +F0.97800600000000004 +sg9 +F309.382182 +sg10 +(lp3717 +L171381594L +aL171381595L +aL171381596L +aL171381597L +aL171381598L +asg12 +(lp3718 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.749004 +sS't' +F54005.1071744 +ss(F309.37095699999998 +F0.336955 +F0.77942400000000001 +F0.82941399999999998 +I0 +tp3719 +(dp3720 +g4 +F0.336955 +sg5 +I0 +sg6 +I0 +sg7 +F2.42292 +sS'm' +F22.996600000000001 +sg8 +F0.82941399999999998 +sg9 +F309.37095699999998 +sg10 +(lp3721 +L343280290L +aL343280291L +aL343280292L +aL343280293L +asg12 +(lp3722 +I0 +aI2 +aI3 +aI4 +asg14 +F0.77942400000000001 +sS't' +F53302.107420400003 +ss(F309.38795099999999 +F0.342248 +F1.0100100000000001 +F0.95301599999999997 +I0 +tp3723 +(dp3724 +g4 +F0.342248 +sg5 +I0 +sg6 +I0 +sg7 +F1.2885800000000001 +sS'm' +F22.550599999999999 +sg8 +F0.95301599999999997 +sg9 +F309.38795099999999 +sg10 +(lp3725 +L343709621L +aL343709622L +aL343709623L +aL343709624L +aL343709625L +asg12 +(lp3726 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158777700002 +ss(F309.37309599999998 +F0.32444400000000001 +F0.85104100000000005 +F0.913053 +I0 +tp3727 +(dp3728 +g4 +F0.32444400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.65324899999999997 +sS'm' +F22.488 +sg8 +F0.913053 +sg9 +F309.37309599999998 +sg10 +(lp3729 +L343882003L +aL343882004L +aL343882005L +aL343882006L +asg12 +(lp3730 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85104100000000005 +sS't' +F53626.146607000002 +ss(F309.37100800000002 +F0.33044800000000002 +F0.93336600000000003 +F0.87873599999999996 +I0 +tp3731 +(dp3732 +g4 +F0.33044800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.2938900000000002 +sS'm' +F24.1051 +sg8 +F0.87873599999999996 +sg9 +F309.37100800000002 +sg10 +(lp3733 +L345030662L +aL345030663L +aL345030664L +aL345030665L +asg12 +(lp3734 +I0 +aI1 +aI2 +aI3 +asg14 +F0.93336600000000003 +sS't' +F53670.113846 +ss(F309.37102099999998 +F0.33039299999999999 +F0.92461800000000005 +F1.03024 +I0 +tp3735 +(dp3736 +g4 +F0.33039299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.74224 +sS'm' +F23.185300000000002 +sg8 +F1.03024 +sg9 +F309.37102099999998 +sg10 +(lp3737 +L345223933L +aL345223934L +aL345223935L +aL345223936L +aL345223937L +asg12 +(lp3738 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92461800000000005 +sS't' +F53673.081827000002 +ss(F309.36451399999999 +F0.32447500000000001 +F0.88500599999999996 +F1.1100099999999999 +I0 +tp3739 +(dp3740 +g4 +F0.32447500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.2642099999999998 +sS'm' +F24.223500000000001 +sg8 +F1.1100099999999999 +sg9 +F309.36451399999999 +sg10 +(lp3741 +L344150740L +aL344150741L +aL344150742L +aL344150743L +aL344150744L +asg12 +(lp3742 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500599999999996 +sS't' +F53635.138169999998 +ss(F309.37432799999999 +F0.32660800000000001 +F0.61601899999999998 +F0.77502300000000002 +I0 +tp3743 +(dp3744 +g4 +F0.32660800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.071800299999999997 +sS'm' +F20.515499999999999 +sg8 +F0.77502300000000002 +sg9 +F309.37432799999999 +sg10 +(lp3745 +L346170946L +aL346170947L +aL346170948L +aL346170949L +asg12 +(lp3746 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61601899999999998 +sS't' +F53704.0733157 +ss(F309.36490800000001 +F0.334588 +F1.0903400000000001 +F1.0704199999999999 +I0 +tp3747 +(dp3748 +g4 +F0.334588 +sg5 +I0 +sg6 +I0 +sg7 +F0.63044900000000004 +sS'm' +F22.367799999999999 +sg8 +F1.0704199999999999 +sg9 +F309.36490800000001 +sg10 +(lp3749 +L345683663L +aL345683664L +aL345683665L +aL345683666L +aL345683667L +asg12 +(lp3750 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0903400000000001 +sS't' +F53680.086397200001 +ss(F309.36918600000001 +F0.34576699999999999 +F1.0101100000000001 +F0.95316199999999995 +I0 +tp3751 +(dp3752 +g4 +F0.34576699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.682396 +sS'm' +F23.338200000000001 +sg8 +F0.95316199999999995 +sg9 +F309.36918600000001 +sg10 +(lp3753 +L343715721L +aL343715722L +aL343715723L +aL343715724L +asg12 +(lp3754 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101100000000001 +sS't' +F53623.160384000003 +ss(F309.35980699999999 +F0.32508799999999999 +F0.74900699999999998 +F0.97800799999999999 +I0 +tp3755 +(dp3756 +g4 +F0.32508799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.4148099999999999 +sS'm' +F23.200399999999998 +sg8 +F0.97800799999999999 +sg9 +F309.35980699999999 +sg10 +(lp3757 +L171381108L +aL171381109L +aL171381110L +aL171381111L +aL171381112L +asg12 +(lp3758 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900699999999998 +sS't' +F54005.107112199999 +ss(F309.36311999999998 +F0.33103100000000002 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp3759 +(dp3760 +g4 +F0.33103100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.071848400000000007 +sS'm' +F18.795000000000002 +sg8 +F0.82900499999999999 +sg9 +F309.36311999999998 +sg10 +(lp3761 +L343271375L +aL343271376L +aL343271377L +aL343271378L +aL343271379L +asg12 +(lp3762 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.107398599997 +ss(F309.36634199999997 +F0.34082899999999999 +F0.50603699999999996 +F0.45910000000000001 +I0 +tp3763 +(dp3764 +g4 +F0.34082899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.0646206 +sS'm' +F18.353100000000001 +sg8 +F0.45910000000000001 +sg9 +F309.36634199999997 +sg10 +(lp3765 +L153250106L +aL153250107L +aL153250108L +aL153250109L +aL153250110L +asg12 +(lp3766 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50603699999999996 +sS't' +F53702.083954399997 +ss(F309.36776400000002 +F0.33366200000000001 +F1.0103200000000001 +F0.99224800000000002 +I0 +tp3767 +(dp3768 +g4 +F0.33366200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.72864 +sS'm' +F22.9573 +sg8 +F0.99224800000000002 +sg9 +F309.36776400000002 +sg10 +(lp3769 +L342970367L +aL342970368L +aL342970369L +aL342970370L +aL342970371L +asg12 +(lp3770 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0103200000000001 +sS't' +F53270.134565300003 +ss(F309.38935300000003 +F0.32215300000000002 +F1.09002 +F1.07002 +I0 +tp3771 +(dp3772 +g4 +F0.32215300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.5009600000000001 +sS'm' +F24.282800000000002 +sg8 +F1.07002 +sg9 +F309.38935300000003 +sg10 +(lp3773 +L345680620L +aL345680621L +aL345680622L +aL345680623L +aL345680624L +asg12 +(lp3774 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09002 +sS't' +F53680.086465100001 +ss(F309.36635699999999 +F0.34080500000000002 +F0.92400700000000002 +F1.0300100000000001 +I0 +tp3775 +(dp3776 +g4 +F0.34080500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.050747100000000003 +sS'm' +F18.3718 +sg8 +F1.0300100000000001 +sg9 +F309.36635699999999 +sg10 +(lp3777 +L345217375L +aL345217376L +aL345217377L +aL345217378L +aL345217379L +asg12 +(lp3778 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400700000000002 +sS't' +F53673.081813999997 +ss(F309.374618 +F0.31685099999999999 +F0.74917699999999998 +F0.97809299999999999 +I0 +tp3779 +(dp3780 +g4 +F0.31685099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.0821499999999999 +sS'm' +F22.901299999999999 +sg8 +F0.97809299999999999 +sg9 +F309.374618 +sg10 +(lp3781 +L171388797L +aL171388798L +aL171388799L +aL171388800L +aL171388801L +asg12 +(lp3782 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74917699999999998 +sS't' +F54005.1071534 +ss(F309.36745100000002 +F0.32935999999999999 +F0.85104599999999997 +F0.91305199999999997 +I0 +tp3783 +(dp3784 +g4 +F0.32935999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.73966799999999999 +sS'm' +F22.6248 +sg8 +F0.91305199999999997 +sg9 +F309.36745100000002 +sg10 +(lp3785 +L343881877L +aL343881878L +aL343881879L +aL343881880L +asg12 +(lp3786 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85104599999999997 +sS't' +F53626.146591299999 +ss(F309.38269200000002 +F0.33517599999999997 +F0.41302499999999998 +F0.41203400000000001 +I0 +tp3787 +(dp3788 +g4 +F0.33517599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.110801 +sS'm' +F19.4343 +sg8 +F0.41203400000000001 +sg9 +F309.38269200000002 +sg10 +(lp3789 +L345998008L +aL345998009L +aL345998010L +aL345998011L +aL345998012L +asg12 +(lp3790 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41302499999999998 +sS't' +F53703.093133399998 +ss(F309.365274 +F0.33730500000000002 +F0.92724899999999999 +F1.032 +I0 +tp3791 +(dp3792 +g4 +F0.33730500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.7833000000000001 +sS'm' +F23.6995 +sg8 +F1.032 +sg9 +F309.365274 +sg10 +(lp3793 +L345223875L +aL345223876L +aL345223877L +aL345223878L +asg12 +(lp3794 +I0 +aI1 +aI2 +aI3 +asg14 +F0.92724899999999999 +sS't' +F53673.081810999996 +ss(F309.374347 +F0.32658799999999999 +F0.47603699999999999 +F0.45404299999999997 +I0 +tp3795 +(dp3796 +g4 +F0.32658799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F6.5809300000000004 +sS'm' +F24.269300000000001 +sg8 +F0.45404299999999997 +sg9 +F309.374347 +sg10 +(lp3797 +L344874982L +aL344874983L +aL344874984L +aL344874985L +aL344874986L +asg12 +(lp3798 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47603699999999999 +sS't' +F53668.109001299999 +ss(F309.37280500000003 +F0.33522600000000002 +F0.92400700000000002 +F1.0300100000000001 +I0 +tp3799 +(dp3800 +g4 +F0.33522600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.59698799999999996 +sS'm' +F21.991499999999998 +sg8 +F1.0300100000000001 +sg9 +F309.37280500000003 +sg10 +(lp3801 +L345220039L +aL345220040L +aL345220041L +aL345220042L +aL345220043L +asg12 +(lp3802 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400700000000002 +sS't' +F53673.081831900003 +ss(F309.37796500000002 +F0.33785900000000002 +F0.77501900000000001 +F0.75403200000000004 +I0 +tp3803 +(dp3804 +g4 +F0.33785900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0673821 +sS'm' +F18.373899999999999 +sg8 +F0.75403200000000004 +sg9 +F309.37796500000002 +sg10 +(lp3805 +L342825728L +aL342825729L +aL342825730L +aL342825731L +aL342825732L +asg12 +(lp3806 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501900000000001 +sS't' +F53243.255767000002 +ss(F309.370971 +F0.33046700000000001 +F0.98423400000000005 +F0.98828300000000002 +I0 +tp3807 +(dp3808 +g4 +F0.33046700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.97796499999999997 +sS'm' +F22.5124 +sg8 +F0.98828300000000002 +sg9 +F309.370971 +sg10 +(lp3809 +L346465883L +aL346465884L +aL346465885L +aL346465886L +aL346465887L +asg12 +(lp3810 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98423400000000005 +sS't' +F54007.119892499999 +ss(F309.38897800000001 +F0.34518100000000002 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp3811 +(dp3812 +g4 +F0.34518100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.047636299999999999 +sS'm' +F19.543299999999999 +sg8 +F1.0700000000000001 +sg9 +F309.38897800000001 +sg10 +(lp3813 +L345676199L +aL345676200L +aL345676201L +aL345676202L +aL345676198L +asg12 +(lp3814 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.0900000000000001 +sS't' +F53680.088122499998 +ss(F309.38712199999998 +F0.31928600000000001 +F1.05288 +F0.94706199999999996 +I0 +tp3815 +(dp3816 +g4 +F0.31928600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.1894999999999998 +sS'm' +F23.305800000000001 +sg8 +F0.94706199999999996 +sg9 +F309.38712199999998 +sg10 +(lp3817 +L346337943L +aL346337944L +aL346337945L +aL346337946L +aL346337947L +asg12 +(lp3818 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05288 +sS't' +F53974.159612299998 +ss(F309.35982300000001 +F0.32507200000000003 +F0.47605599999999998 +F0.45405499999999999 +I0 +tp3819 +(dp3820 +g4 +F0.32507200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F3.3826700000000001 +sS'm' +F23.543600000000001 +sg8 +F0.45405499999999999 +sg9 +F309.35982300000001 +sg10 +(lp3821 +L344875980L +aL344875981L +aL344875982L +aL344875983L +aL344875984L +aL344875985L +aL344875986L +aL344875987L +aL344875988L +aL344875989L +asg12 +(lp3822 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47605599999999998 +sS't' +F53668.108960999998 +ss(F309.36912899999999 +F0.34575099999999998 +F1.0800799999999999 +F1.01007 +I0 +tp3823 +(dp3824 +g4 +F0.34575099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.10015499999999999 +sS'm' +F20.433900000000001 +sg8 +F1.01007 +sg9 +F309.36912899999999 +sg10 +(lp3825 +L345370132L +aL345370133L +aL345370130L +aL345370131L +asg12 +(lp3826 +I3 +aI4 +aI1 +aI2 +asg14 +F1.0800799999999999 +sS't' +F53675.077881800004 +ss(F309.36505499999998 +F0.33013199999999998 +F0.47602499999999998 +F0.45402500000000001 +I0 +tp3827 +(dp3828 +g4 +F0.33013199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.401202 +sS'm' +F21.1782 +sg8 +F0.45402500000000001 +sg9 +F309.36505499999998 +sg10 +(lp3829 +L344871130L +aL344871131L +aL344871132L +aL344871133L +aL344871134L +asg12 +(lp3830 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602499999999998 +sS't' +F53668.108975499999 +ss(F309.38272799999999 +F0.33516400000000002 +F0.64901299999999995 +F0.53901699999999997 +I0 +tp3831 +(dp3832 +g4 +F0.33516400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.12944700000000001 +sS'm' +F19.381399999999999 +sg8 +F0.53901699999999997 +sg9 +F309.38272799999999 +sg10 +(lp3833 +L112296842L +aL112296843L +aL112296844L +aL112296845L +aL112296846L +asg12 +(lp3834 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901299999999995 +sS't' +F53656.106114200004 +ss(F309.378986 +F0.32700499999999999 +F0.47026000000000001 +F0.50331199999999998 +I0 +tp3835 +(dp3836 +g4 +F0.32700499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.0323099999999998 +sS'm' +F22.275099999999998 +sg8 +F0.50331199999999998 +sg9 +F309.378986 +sg10 +(lp3837 +L12887221L +aL12887222L +aL12887223L +aL12887224L +aL12887225L +asg12 +(lp3838 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47026000000000001 +sS't' +F53649.118512100002 +ss(F309.36786999999998 +F0.34509699999999999 +F0.85122299999999995 +F0.91349999999999998 +I0 +tp3839 +(dp3840 +g4 +F0.34509699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.2643 +sS'm' +F23.046199999999999 +sg8 +F0.91349999999999998 +sg9 +F309.36786999999998 +sg10 +(lp3841 +L343881910L +aL343881911L +aL343881912L +aL343881913L +aL343881914L +asg12 +(lp3842 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85122299999999995 +sS't' +F53626.144934000004 +ss(F309.372367 +F0.32416699999999998 +F0.86516300000000002 +F0.90017599999999998 +I0 +tp3843 +(dp3844 +g4 +F0.32416699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.78174399999999999 +sS'm' +F23.094999999999999 +sg8 +F0.90017599999999998 +sg9 +F309.372367 +sg10 +(lp3845 +L345814857L +aL345814858L +aL345814859L +aL345814860L +aL345814856L +asg12 +(lp3846 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.86516300000000002 +sS't' +F53693.089982500001 +ss(F309.36635999999999 +F0.34083599999999997 +F0.61601700000000004 +F0.77501799999999998 +I0 +tp3847 +(dp3848 +g4 +F0.34083599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.056285300000000003 +sS'm' +F18.337599999999998 +sg8 +F0.77501799999999998 +sg9 +F309.36635999999999 +sg10 +(lp3849 +L346166076L +aL346166077L +aL346166078L +aL346166079L +aL346166080L +asg12 +(lp3850 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601700000000004 +sS't' +F53704.071635100001 +ss(F309.38079499999998 +F0.34451799999999999 +F1.0900799999999999 +F1.0700700000000001 +I0 +tp3851 +(dp3852 +g4 +F0.34451799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.5215699999999996 +sS'm' +F24.555499999999999 +sg8 +F1.0700700000000001 +sg9 +F309.38079499999998 +sg10 +(lp3853 +L345685817L +aL345685818L +aL345685819L +aL345685820L +aL345685821L +asg12 +(lp3854 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900799999999999 +sS't' +F53680.086441300002 +ss(F309.382723 +F0.33514300000000002 +F0.93301000000000001 +F0.87800900000000004 +I0 +tp3855 +(dp3856 +g4 +F0.33514300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.083227800000000005 +sS'm' +F19.4434 +sg8 +F0.87800900000000004 +sg9 +F309.382723 +sg10 +(lp3857 +L345027369L +aL345027370L +aL345027371L +aL345027372L +aL345027373L +asg12 +(lp3858 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301000000000001 +sS't' +F53670.1138785 +ss(F309.37308200000001 +F0.324457 +F1.01006 +F0.99205299999999996 +I0 +tp3859 +(dp3860 +g4 +F0.324457 +sg5 +I0 +sg6 +I0 +sg7 +F0.45349200000000001 +sS'm' +F22.545000000000002 +sg8 +F0.99205299999999996 +sg9 +F309.37308200000001 +sg10 +(lp3861 +L342966756L +aL342966757L +aL342966758L +aL342966759L +asg12 +(lp3862 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01006 +sS't' +F53270.136238599996 +ss(F309.36835300000001 +F0.34220800000000001 +F0.89061800000000002 +F1.1124400000000001 +I0 +tp3863 +(dp3864 +g4 +F0.34220800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.5166299999999999 +sS'm' +F23.3689 +sg8 +F1.1124400000000001 +sg9 +F309.36835300000001 +sg10 +(lp3865 +L344155484L +aL344155485L +aL344155486L +aL344155487L +aL344155488L +asg12 +(lp3866 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.89061800000000002 +sS't' +F53635.138180599999 +ss(F309.37655899999999 +F0.34487200000000001 +F0.74184600000000001 +F0.960808 +I0 +tp3867 +(dp3868 +g4 +F0.34487200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.5000900000000001 +sS'm' +F23.256 +sg8 +F0.960808 +sg9 +F309.37655899999999 +sg10 +(lp3869 +L344483003L +aL344483004L +aL344483005L +asg12 +(lp3870 +I2 +aI3 +aI4 +asg14 +F0.74184600000000001 +sS't' +F53644.122197700002 +ss(F309.38776999999999 +F0.32189899999999999 +F0.98760700000000001 +F0.99251800000000001 +I0 +tp3871 +(dp3872 +g4 +F0.32189899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.1539100000000002 +sS'm' +F23.378699999999998 +sg8 +F0.99251800000000001 +sg9 +F309.38776999999999 +sg10 +(lp3873 +L346466106L +aL346466107L +aL346466108L +aL346466109L +aL346466110L +asg12 +(lp3874 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98760700000000001 +sS't' +F54007.119939099997 +ss(F309.38629700000001 +F0.33899499999999999 +F0.27091100000000001 +F0.37854900000000002 +I0 +tp3875 +(dp3876 +g4 +F0.33899499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F6.5583799999999997 +sS'm' +F24.174299999999999 +sg8 +F0.37854900000000002 +sg9 +F309.38629700000001 +sg10 +(lp3877 +L327903746L +aL327903747L +aL327903748L +aL327903749L +aL327903750L +asg12 +(lp3878 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.27091100000000001 +sS't' +F53312.062971500003 +ss(F309.38269400000001 +F0.33515099999999998 +F0.828009 +F0.94500799999999996 +I0 +tp3879 +(dp3880 +g4 +F0.33515099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.029987300000000001 +sS'm' +F17.350999999999999 +sg8 +F0.94500799999999996 +sg9 +F309.38269400000001 +sg10 +(lp3881 +L343123390L +aL343123391L +aL343123392L +aL343123393L +aL343123384L +aL343123385L +aL343123386L +aL343123387L +aL343123388L +aL343123389L +asg12 +(lp3882 +I1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.828009 +sS't' +F53288.1134427 +ss(F309.38242600000001 +F0.324546 +F1.0102599999999999 +F0.99222999999999995 +I0 +tp3883 +(dp3884 +g4 +F0.324546 +sg5 +I0 +sg6 +I0 +sg7 +F4.8389699999999998 +sS'm' +F24.084199999999999 +sg8 +F0.99222999999999995 +sg9 +F309.38242600000001 +sg10 +(lp3885 +L342966151L +aL342966152L +aL342966153L +aL342966154L +aL342966155L +asg12 +(lp3886 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0102599999999999 +sS't' +F53270.1346061 +ss(F309.382743 +F0.32575300000000001 +F1.05002 +F0.94402399999999997 +I0 +tp3887 +(dp3888 +g4 +F0.32575300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F6.3559900000000003 +sS'm' +F24.472000000000001 +sg8 +F0.94402399999999997 +sg9 +F309.382743 +sg10 +(lp3889 +L346332297L +aL346332298L +aL346332299L +aL346332300L +aL346332301L +asg12 +(lp3890 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.1596001 +ss(F309.36827899999997 +F0.32763500000000001 +F1.01058 +F0.95339099999999999 +I0 +tp3891 +(dp3892 +g4 +F0.32763500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.2599199999999999 +sS'm' +F24.014600000000002 +sg8 +F0.95339099999999999 +sg9 +F309.36827899999997 +sg10 +(lp3893 +L343715699L +aL343715700L +aL343715701L +aL343715702L +asg12 +(lp3894 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01058 +sS't' +F53623.160381499998 +ss(F309.369935 +F0.33445900000000001 +F0.93474699999999999 +F0.87956199999999995 +I0 +tp3895 +(dp3896 +g4 +F0.33445900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.6196700000000002 +sS'm' +F23.9175 +sg8 +F0.87956199999999995 +sg9 +F309.369935 +sg10 +(lp3897 +L345032154L +aL345032155L +aL345032156L +aL345032157L +aL345032158L +asg12 +(lp3898 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93474699999999999 +sS't' +F53670.113842999999 +ss(F309.36927100000003 +F0.31897799999999998 +F0.74900599999999995 +F0.97800699999999996 +I0 +tp3899 +(dp3900 +g4 +F0.31897799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.34787499999999999 +sS'm' +F21.5974 +sg8 +F0.97800699999999996 +sg9 +F309.36927100000003 +sg10 +(lp3901 +L171381296L +aL171381297L +aL171381298L +aL171381299L +aL171381300L +asg12 +(lp3902 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900599999999995 +sS't' +F54005.107138500003 +ss(F309.36240900000001 +F0.31962699999999999 +F0.92401699999999998 +F1.0300199999999999 +I0 +tp3903 +(dp3904 +g4 +F0.31962699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.0587 +sS'm' +F23.336099999999998 +sg8 +F1.0300199999999999 +sg9 +F309.36240900000001 +sg10 +(lp3905 +L345219834L +aL345219835L +aL345219836L +aL345219837L +aL345219838L +asg12 +(lp3906 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401699999999998 +sS't' +F53673.081803000001 +ss(F309.36635200000001 +F0.34080199999999999 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp3907 +(dp3908 +g4 +F0.34080199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.060976099999999998 +sS'm' +F18.347000000000001 +sg8 +F0.94401199999999996 +sg9 +F309.36635200000001 +sg10 +(lp3909 +L346329142L +aL346329143L +aL346329144L +aL346329145L +aL346329146L +asg12 +(lp3910 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159554600003 +ss(F309.38622099999998 +F0.33891100000000002 +F0.92415000000000003 +F1.0301400000000001 +I0 +tp3911 +(dp3912 +g4 +F0.33891100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.9403699999999999 +sS'm' +F23.302299999999999 +sg8 +F1.0301400000000001 +sg9 +F309.38622099999998 +sg10 +(lp3913 +L345217587L +aL345217588L +aL345217589L +aL345217590L +aL345217591L +asg12 +(lp3914 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92415000000000003 +sS't' +F53673.081869200003 +ss(F309.36240900000001 +F0.319664 +F0.86502599999999996 +F0.90002099999999996 +I0 +tp3915 +(dp3916 +g4 +F0.319664 +sg5 +I0 +sg6 +I0 +sg7 +F0.0675563 +sS'm' +F20.035599999999999 +sg8 +F0.90002099999999996 +sg9 +F309.36240900000001 +sg10 +(lp3917 +L345811257L +aL345811258L +aL345811259L +aL345811255L +aL345811256L +asg12 +(lp3918 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.86502599999999996 +sS't' +F53693.086637799999 +ss(F309.37773099999998 +F0.345638 +F1.0101599999999999 +F0.95322799999999996 +I0 +tp3919 +(dp3920 +g4 +F0.345638 +sg5 +I0 +sg6 +I0 +sg7 +F0.43800699999999998 +sS'm' +F22.845500000000001 +sg8 +F0.95322799999999996 +sg9 +F309.37773099999998 +sg10 +(lp3921 +L343715888L +aL343715889L +aL343715890L +aL343715891L +asg12 +(lp3922 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101599999999999 +sS't' +F53623.160407800002 +ss(F309.37473999999997 +F0.33169999999999999 +F0.47602 +F0.45402199999999998 +I0 +tp3923 +(dp3924 +g4 +F0.33169999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.037907400000000001 +sS'm' +F15.9907 +sg8 +F0.45402199999999998 +sg9 +F309.37473999999997 +sg10 +(lp3925 +L344871282L +aL344871283L +aL344871284L +aL344871285L +aL344871286L +asg12 +(lp3926 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602 +sS't' +F53668.1090024 +ss(F309.38650000000001 +F0.32196000000000002 +F0.64914799999999995 +F0.53926600000000002 +I0 +tp3927 +(dp3928 +g4 +F0.32196000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0035099999999999 +sS'm' +F21.718299999999999 +sg8 +F0.53926600000000002 +sg9 +F309.38650000000001 +sg10 +(lp3929 +L112299470L +aL112299471L +aL112299472L +aL112299473L +aL112299474L +asg12 +(lp3930 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64914799999999995 +sS't' +F53656.106124600003 +ss(F309.38082100000003 +F0.34458800000000001 +F0.50785899999999995 +F0.45972800000000003 +I0 +tp3931 +(dp3932 +g4 +F0.34458800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.2941900000000004 +sS'm' +F23.411200000000001 +sg8 +F0.45972800000000003 +sg9 +F309.38082100000003 +sg10 +(lp3933 +L153250307L +aL153250308L +aL153250309L +aL153250310L +asg12 +(lp3934 +I0 +aI2 +aI3 +aI4 +asg14 +F0.50785899999999995 +sS't' +F53702.083994599998 +ss(F309.374751 +F0.33170699999999997 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp3935 +(dp3936 +g4 +F0.33170699999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.042414100000000003 +sS'm' +F15.965400000000001 +sg8 +F0.95301000000000002 +sg9 +F309.374751 +sg10 +(lp3937 +L343709424L +aL343709425L +aL343709426L +aL343709427L +aL343709428L +asg12 +(lp3938 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158740999999 +ss(F309.382611 +F0.33970299999999998 +F0.77501200000000003 +F0.75402599999999997 +I0 +tp3939 +(dp3940 +g4 +F0.33970299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.080234700000000006 +sS'm' +F18.700299999999999 +sg8 +F0.75402599999999997 +sg9 +F309.382611 +sg10 +(lp3941 +L342827481L +aL342827482L +aL342827483L +aL342827484L +aL342827485L +aL342827486L +aL342827487L +aL342827488L +aL342827489L +aL342827490L +asg12 +(lp3942 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501200000000003 +sS't' +F53243.255779899999 +ss(F309.36186300000003 +F0.332401 +F0.88622199999999995 +F1.11138 +I0 +tp3943 +(dp3944 +g4 +F0.332401 +sg5 +I0 +sg6 +I0 +sg7 +F1.0252699999999999 +sS'm' +F24.02 +sg8 +F1.11138 +sg9 +F309.36186300000003 +sg10 +(lp3945 +L344144094L +aL344144095L +aL344144096L +aL344144097L +asg12 +(lp3946 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88622199999999995 +sS't' +F53635.139820999997 +ss(F309.36399899999998 +F0.31754500000000002 +F0.82803400000000005 +F0.94502900000000001 +I0 +tp3947 +(dp3948 +g4 +F0.31754500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.26596 +sS'm' +F22.731300000000001 +sg8 +F0.94502900000000001 +sg9 +F309.36399899999998 +sg10 +(lp3949 +L343127493L +aL343127494L +aL343127495L +aL343127496L +aL343127497L +asg12 +(lp3950 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82803400000000005 +sS't' +F53288.1117323 +ss(F309.38812200000001 +F0.33812300000000001 +F1.01007 +F0.95307500000000001 +I0 +tp3951 +(dp3952 +g4 +F0.33812300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.6599400000000002 +sS'm' +F23.701599999999999 +sg8 +F0.95307500000000001 +sg9 +F309.38812200000001 +sg10 +(lp3953 +L343716054L +aL343716055L +aL343716056L +aL343716057L +aL343716058L +asg12 +(lp3954 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01007 +sS't' +F53623.158778199999 +ss(F309.37768199999999 +F0.34568500000000002 +F0.98429299999999997 +F0.98860300000000001 +I0 +tp3955 +(dp3956 +g4 +F0.34568500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.40740300000000002 +sS'm' +F22.716799999999999 +sg8 +F0.98860300000000001 +sg9 +F309.37768199999999 +sg10 +(lp3957 +L346465945L +aL346465946L +aL346465947L +aL346465948L +aL346465949L +aL346465950L +aL346465951L +aL346465952L +asg12 +(lp3958 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98429299999999997 +sS't' +F54007.1215696 +ss(F309.38272999999998 +F0.32576100000000002 +F0.88500999999999996 +F1.1100099999999999 +I0 +tp3959 +(dp3960 +g4 +F0.32576100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.54789 +sS'm' +F23.397200000000002 +sg8 +F1.1100099999999999 +sg9 +F309.38272999999998 +sg10 +(lp3961 +L344150873L +aL344150874L +aL344150875L +aL344150876L +aL344150877L +aL344150878L +aL344150879L +aL344150880L +aL344150881L +aL344150882L +asg12 +(lp3962 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500999999999996 +sS't' +F53635.138220599998 +ss(F309.369125 +F0.34574899999999997 +F0.51814899999999997 +F0.46282600000000002 +I0 +tp3963 +(dp3964 +g4 +F0.34574899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.56680600000000003 +sS'm' +F19.950099999999999 +sg8 +F0.46282600000000002 +sg9 +F309.369125 +sg10 +(lp3965 +L153253736L +aL153253732L +aL153253733L +aL153253734L +aL153253735L +asg12 +(lp3966 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.51814899999999997 +sS't' +F53702.084791399997 +ss(F309.36681599999997 +F0.33561000000000002 +F1.0805400000000001 +F1.0105299999999999 +I0 +tp3967 +(dp3968 +g4 +F0.33561000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.62044999999999995 +sS'm' +F23.419699999999999 +sg8 +F1.0105299999999999 +sg9 +F309.36681599999997 +sg10 +(lp3969 +L345371732L +aL345371733L +aL345371734L +aL345371735L +asg12 +(lp3970 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0805400000000001 +sS't' +F53675.080363100002 +ss(F309.36916300000001 +F0.34576200000000001 +F0.74907199999999996 +F0.97804599999999997 +I0 +tp3971 +(dp3972 +g4 +F0.34576200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.6747399999999999 +sS'm' +F23.898099999999999 +sg8 +F0.97804599999999997 +sg9 +F309.36916300000001 +sg10 +(lp3973 +L171386240L +aL171386241L +aL171386242L +aL171386243L +aL171386244L +asg12 +(lp3974 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74907199999999996 +sS't' +F54005.107138200001 +ss(F309.38807700000001 +F0.33811799999999997 +F0.25026799999999999 +F0.35036699999999998 +I0 +tp3975 +(dp3976 +g4 +F0.33811799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.39535799999999999 +sS'm' +F22.331099999999999 +sg8 +F0.35036699999999998 +sg9 +F309.38807700000001 +sg10 +(lp3977 +L327906723L +aL327906724L +aL327906725L +aL327906726L +asg12 +(lp3978 +I1 +aI2 +aI3 +aI4 +asg14 +F0.25026799999999999 +sS't' +F53312.064634900002 +ss(F309.37466999999998 +F0.316888 +F0.93773700000000004 +F0.882301 +I0 +tp3979 +(dp3980 +g4 +F0.316888 +sg5 +I0 +sg6 +I0 +sg7 +F1.1767799999999999 +sS'm' +F23.656600000000001 +sg8 +F0.882301 +sg9 +F309.37466999999998 +sg10 +(lp3981 +L345032180L +aL345032181L +aL345032182L +aL345032183L +asg12 +(lp3982 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93773700000000004 +sS't' +F53670.115514600002 +ss(F309.38796000000002 +F0.34220699999999998 +F0.85101800000000005 +F0.91302000000000005 +I0 +tp3983 +(dp3984 +g4 +F0.34220699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.64652 +sS'm' +F22.688700000000001 +sg8 +F0.91302000000000005 +sg9 +F309.38796000000002 +sg10 +(lp3985 +L343874435L +aL343874436L +aL343874437L +aL343874438L +aL343874439L +asg12 +(lp3986 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85101800000000005 +sS't' +F53626.144989799999 +ss(F309.37308200000001 +F0.324436 +F0.92103299999999999 +F1.1000300000000001 +I0 +tp3987 +(dp3988 +g4 +F0.324436 +sg5 +I0 +sg6 +I0 +sg7 +F0.21456500000000001 +sS'm' +F22.439800000000002 +sg8 +F1.1000300000000001 +sg9 +F309.37308200000001 +sg10 +(lp3989 +L345539584L +aL345539585L +aL345539586L +aL345539587L +asg12 +(lp3990 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92103299999999999 +sS't' +F53677.101413199998 +ss(F309.38243799999998 +F0.330347 +F1.08039 +F1.0102800000000001 +I0 +tp3991 +(dp3992 +g4 +F0.330347 +sg5 +I0 +sg6 +I0 +sg7 +F0.35306399999999999 +sS'm' +F22.794 +sg8 +F1.0102800000000001 +sg9 +F309.38243799999998 +sg10 +(lp3993 +L345370389L +aL345370390L +aL345370391L +aL345370392L +asg12 +(lp3994 +I1 +aI2 +aI3 +aI4 +asg14 +F1.08039 +sS't' +F53675.080406499997 +ss(F309.36503299999998 +F0.33011800000000002 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp3995 +(dp3996 +g4 +F0.33011800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.231767 +sS'm' +F21.169599999999999 +sg8 +F1.0700000000000001 +sg9 +F309.36503299999998 +sg10 +(lp3997 +L345675601L +aL345675602L +aL345675603L +aL345675604L +aL345675605L +asg12 +(lp3998 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086397500003 +ss(F309.36301800000001 +F0.32276100000000002 +F0.98710900000000001 +F0.99039200000000005 +I0 +tp3999 +(dp4000 +g4 +F0.32276100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.15299 +sS'm' +F24.115200000000002 +sg8 +F0.99039200000000005 +sg9 +F309.36301800000001 +sg10 +(lp4001 +L346467604L +aL346467605L +aL346467606L +aL346467607L +aL346467608L +asg12 +(lp4002 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98710900000000001 +sS't' +F54007.119870399998 +ss(F309.37471399999998 +F0.33169300000000002 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp4003 +(dp4004 +g4 +F0.33169300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0324061 +sS'm' +F15.9308 +sg8 +F1.1100000000000001 +sg9 +F309.37471399999998 +sg10 +(lp4005 +L344144339L +aL344144340L +aL344144341L +aL344144342L +aL344144343L +asg12 +(lp4006 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138198300003 +ss(F309.38269500000001 +F0.33515699999999998 +F0.74100500000000002 +F0.96000600000000003 +I0 +tp4007 +(dp4008 +g4 +F0.33515699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.076782500000000004 +sS'm' +F19.447800000000001 +sg8 +F0.96000600000000003 +sg9 +F309.38269500000001 +sg10 +(lp4009 +L344476001L +aL344476002L +aL344476003L +aL344476004L +aL344476005L +aL344476006L +aL344476007L +aL344476008L +aL344476009L +aL344476010L +asg12 +(lp4010 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100500000000002 +sS't' +F53644.123873299999 +ss(F309.36983600000002 +F0.344669 +F0.77522800000000003 +F0.754274 +I0 +tp4011 +(dp4012 +g4 +F0.344669 +sg5 +I0 +sg6 +I0 +sg7 +F0.338918 +sS'm' +F21.615100000000002 +sg8 +F0.754274 +sg9 +F309.36983600000002 +sg10 +(lp4013 +L342832216L +aL342832217L +aL342832218L +aL342832215L +asg12 +(lp4014 +I2 +aI3 +aI4 +aI1 +asg14 +F0.77522800000000003 +sS't' +F53243.254085799999 +ss(F309.37573300000003 +F0.34618100000000002 +F1.0805 +F1.0103 +I0 +tp4015 +(dp4016 +g4 +F0.34618100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.409354 +sS'm' +F22.956700000000001 +sg8 +F1.0103 +sg9 +F309.37573300000003 +sg10 +(lp4017 +L345370307L +aL345370308L +aL345370309L +aL345370310L +asg12 +(lp4018 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0805 +sS't' +F53675.080387900001 +ss(F309.36309399999999 +F0.33103900000000003 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp4019 +(dp4020 +g4 +F0.33103900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.056833000000000002 +sS'm' +F18.823499999999999 +sg8 +F1.0700000000000001 +sg9 +F309.36309399999999 +sg10 +(lp4021 +L345675591L +aL345675592L +aL345675593L +aL345675594L +aL345675595L +aL345675596L +aL345675597L +aL345675598L +aL345675599L +aL345675600L +asg12 +(lp4022 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086392099998 +ss(F309.38621999999998 +F0.33889900000000001 +F1.01004 +F0.95304299999999997 +I0 +tp4023 +(dp4024 +g4 +F0.33889900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.47107199999999999 +sS'm' +F22.927600000000002 +sg8 +F0.95304299999999997 +sg9 +F309.38621999999998 +sg10 +(lp4025 +L343715988L +aL343715989L +aL343715990L +aL343715991L +asg12 +(lp4026 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01004 +sS't' +F53623.160431299999 +ss(F309.36505299999999 +F0.33014900000000003 +F0.616012 +F0.77501699999999996 +I0 +tp4027 +(dp4028 +g4 +F0.33014900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.38084200000000001 +sS'm' +F21.0763 +sg8 +F0.77501699999999996 +sg9 +F309.36505299999999 +sg10 +(lp4029 +L346166042L +aL346166043L +aL346166044L +aL346166045L +aL346166046L +asg12 +(lp4030 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.616012 +sS't' +F53704.071631500003 +ss(F309.37093399999998 +F0.336951 +F0.93359499999999995 +F0.87840600000000002 +I0 +tp4031 +(dp4032 +g4 +F0.336951 +sg5 +I0 +sg6 +I0 +sg7 +F8.5066000000000006 +sS'm' +F24.849 +sg8 +F0.87840600000000002 +sg9 +F309.37093399999998 +sg10 +(lp4033 +L345032470L +aL345032471L +aL345032472L +aL345032473L +asg12 +(lp4034 +I0 +aI2 +aI3 +aI4 +asg14 +F0.93359499999999995 +sS't' +F53670.113845799999 +ss(F309.36634299999997 +F0.34082499999999999 +F1.0100100000000001 +F0.953009 +I0 +tp4035 +(dp4036 +g4 +F0.34082499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.032121200000000003 +sS'm' +F16.833100000000002 +sg8 +F0.953009 +sg9 +F309.36634299999997 +sg10 +(lp4037 +L343709331L +aL343709332L +aL343709333L +aL343709334L +aL343709330L +asg12 +(lp4038 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.0100100000000001 +sS't' +F53623.160376100001 +ss(F309.38530900000001 +F0.33194499999999999 +F0.93304500000000001 +F0.87804199999999999 +I0 +tp4039 +(dp4040 +g4 +F0.33194499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.098197300000000001 +sS'm' +F21.153199999999998 +sg8 +F0.87804199999999999 +sg9 +F309.38530900000001 +sg10 +(lp4041 +L345028380L +aL345028381L +aL345028382L +aL345028383L +aL345028384L +aL345028385L +aL345028386L +aL345028387L +asg12 +(lp4042 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93304500000000001 +sS't' +F53670.115544100001 +ss(F309.387539 +F0.33218999999999999 +F0.98412999999999995 +F0.98810500000000001 +I0 +tp4043 +(dp4044 +g4 +F0.33218999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F9.8821600000000007 +sS'm' +F25.0398 +sg8 +F0.98810500000000001 +sg9 +F309.387539 +sg10 +(lp4045 +L346463363L +aL346463364L +aL346463365L +aL346463366L +aL346463367L +asg12 +(lp4046 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98412999999999995 +sS't' +F54007.1199385 +ss(F309.36241200000001 +F0.319662 +F0.74900900000000004 +F0.97800900000000002 +I0 +tp4047 +(dp4048 +g4 +F0.319662 +sg5 +I0 +sg6 +I0 +sg7 +F0.59983699999999995 +sS'm' +F22.229399999999998 +sg8 +F0.97800900000000002 +sg9 +F309.36241200000001 +sg10 +(lp4049 +L171377779L +aL171377780L +aL171377781L +aL171377782L +aL171377783L +asg12 +(lp4050 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900900000000004 +sS't' +F54005.107119499997 +ss(F309.37448000000001 +F0.31701299999999999 +F1.016 +F0.95596199999999998 +I0 +tp4051 +(dp4052 +g4 +F0.31701299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.0726500000000001 +sS'm' +F22.351500000000001 +sg8 +F0.95596199999999998 +sg9 +F309.37448000000001 +sg10 +(lp4053 +L343717384L +aL343717385L +aL343717386L +aL343717387L +aL343717388L +asg12 +(lp4054 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.016 +sS't' +F53623.158740300001 +ss(F309.36007799999999 +F0.32050800000000002 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp4055 +(dp4056 +g4 +F0.32050800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.089399800000000001 +sS'm' +F19.6342 +sg8 +F1.0100100000000001 +sg9 +F309.36007799999999 +sg10 +(lp4057 +L345365943L +aL345365944L +aL345365945L +aL345365946L +aL345365947L +asg12 +(lp4058 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.0786859 +ss(F309.36550399999999 +F0.34592000000000001 +F0.885127 +F1.11008 +I0 +tp4059 +(dp4060 +g4 +F0.34592000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.56267800000000001 +sS'm' +F23.057500000000001 +sg8 +F1.11008 +sg9 +F309.36550399999999 +sg10 +(lp4061 +L344144123L +aL344144124L +aL344144125L +aL344144126L +asg12 +(lp4062 +I1 +aI2 +aI3 +aI4 +asg14 +F0.885127 +sS't' +F53635.139831200002 +ss(F309.36240800000002 +F0.31966299999999997 +F0.61604000000000003 +F0.77503500000000003 +I0 +tp4063 +(dp4064 +g4 +F0.31966299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.087057800000000005 +sS'm' +F20.7713 +sg8 +F0.77503500000000003 +sg9 +F309.36240800000002 +sg10 +(lp4065 +L346168058L +aL346168059L +aL346168060L +aL346168061L +asg12 +(lp4066 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61604000000000003 +sS't' +F53704.073282600002 +ss(F309.38890099999998 +F0.343754 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp4067 +(dp4068 +g4 +F0.343754 +sg5 +I0 +sg6 +I0 +sg7 +F0.0137346 +sS'm' +F14.4443 +sg8 +F1.0700099999999999 +sg9 +F309.38890099999998 +sg10 +(lp4069 +L345676180L +aL345676181L +aL345676182L +aL345676178L +aL345676179L +asg12 +(lp4070 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F1.0900099999999999 +sS't' +F53680.0848052 +ss(F309.36911900000001 +F0.34576200000000001 +F0.25062800000000002 +F0.34989700000000001 +I0 +tp4071 +(dp4072 +g4 +F0.34576200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.5435700000000001 +sS'm' +F22.5961 +sg8 +F0.34989700000000001 +sg9 +F309.36911900000001 +sg10 +(lp4073 +L327906511L +aL327906512L +aL327906513L +aL327906514L +aL327906515L +asg12 +(lp4074 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.25062800000000002 +sS't' +F53312.062923799996 +ss(F309.36787600000002 +F0.34503099999999998 +F0.92113699999999998 +F1.1008 +I0 +tp4075 +(dp4076 +g4 +F0.34503099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.48064 +sS'm' +F23.152799999999999 +sg8 +F1.1008 +sg9 +F309.36787600000002 +sg10 +(lp4077 +L345539491L +aL345539492L +aL345539493L +aL345539494L +aL345539495L +asg12 +(lp4078 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92113699999999998 +sS't' +F53677.0997403 +ss(F309.37771900000001 +F0.32561299999999999 +F0.92404600000000003 +F1.0300400000000001 +I0 +tp4079 +(dp4080 +g4 +F0.32561299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.7501099999999998 +sS'm' +F23.686699999999998 +sg8 +F1.0300400000000001 +sg9 +F309.37771900000001 +sg10 +(lp4081 +L345220176L +aL345220177L +aL345220178L +aL345220179L +aL345220180L +asg12 +(lp4082 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92404600000000003 +sS't' +F53673.081845599998 +ss(F309.37796100000003 +F0.33784199999999998 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp4083 +(dp4084 +g4 +F0.33784199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.037089900000000002 +sS'm' +F16.545400000000001 +sg8 +F0.82900499999999999 +sg9 +F309.37796100000003 +sg10 +(lp4085 +L343271561L +aL343271562L +aL343271563L +aL343271564L +aL343271565L +aL343271566L +aL343271557L +aL343271558L +aL343271559L +aL343271560L +asg12 +(lp4086 +I4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.77900400000000003 +sS't' +F53302.108269199998 +ss(F309.38232099999999 +F0.32441700000000001 +F0.415966 +F0.41515600000000003 +I0 +tp4087 +(dp4088 +g4 +F0.32441700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F5.3852099999999998 +sS'm' +F23.886199999999999 +sg8 +F0.41515600000000003 +sg9 +F309.38232099999999 +sg10 +(lp4089 +L346001003L +aL346001004L +aL346001005L +aL346001006L +aL346001007L +asg12 +(lp4090 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.415966 +sS't' +F53703.093132399998 +ss(F309.38795599999997 +F0.34222599999999997 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp4091 +(dp4092 +g4 +F0.34222599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.43386599999999997 +sS'm' +F21.931100000000001 +sg8 +F1.0700099999999999 +sg9 +F309.38795599999997 +sg10 +(lp4093 +L345676203L +aL345676204L +aL345676205L +aL345676206L +aL345676207L +asg12 +(lp4094 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.0864612 +ss(F309.38085599999999 +F0.33930700000000003 +F0.88992199999999999 +F1.1116600000000001 +I0 +tp4095 +(dp4096 +g4 +F0.33930700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.2273000000000001 +sS'm' +F24.2102 +sg8 +F1.1116600000000001 +sg9 +F309.38085599999999 +sg10 +(lp4097 +L344144488L +aL344144489L +aL344144490L +aL344144491L +asg12 +(lp4098 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88992199999999999 +sS't' +F53635.139873799999 +ss(F309.36632100000003 +F0.34080199999999999 +F0.828009 +F0.94500799999999996 +I0 +tp4099 +(dp4100 +g4 +F0.34080199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.049984099999999997 +sS'm' +F18.375299999999999 +sg8 +F0.94500799999999996 +sg9 +F309.36632100000003 +sg10 +(lp4101 +L343120324L +aL343120325L +aL343120326L +aL343120327L +aL343120328L +aL343120329L +aL343120330L +aL343120331L +aL343120332L +aL343120333L +asg12 +(lp4102 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828009 +sS't' +F53288.111738799998 +ss(F309.36991699999999 +F0.33449600000000002 +F0.98492100000000005 +F0.98898799999999998 +I0 +tp4103 +(dp4104 +g4 +F0.33449600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.20967 +sS'm' +F23.822700000000001 +sg8 +F0.98898799999999998 +sg9 +F309.36991699999999 +sg10 +(lp4105 +L346467732L +aL346467733L +aL346467734L +aL346467735L +aL346467736L +asg12 +(lp4106 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98492100000000005 +sS't' +F54007.119889499998 +ss(F309.382023 +F0.342972 +F0.649397 +F0.53946099999999997 +I0 +tp4107 +(dp4108 +g4 +F0.342972 +sg5 +I0 +sg6 +I0 +sg7 +F5.33277 +sS'm' +F23.538900000000002 +sg8 +F0.53946099999999997 +sg9 +F309.382023 +sg10 +(lp4109 +L112296822L +aL112296823L +aL112296824L +aL112296825L +aL112296826L +asg12 +(lp4110 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.649397 +sS't' +F53656.106112200003 +ss(F309.36981800000001 +F0.344669 +F1.0100899999999999 +F0.992089 +I0 +tp4111 +(dp4112 +g4 +F0.344669 +sg5 +I0 +sg6 +I0 +sg7 +F5.0020699999999998 +sS'm' +F24.113800000000001 +sg8 +F0.992089 +sg9 +F309.36981800000001 +sg10 +(lp4113 +L342968165L +aL342968166L +aL342968167L +aL342968168L +aL342968169L +asg12 +(lp4114 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100899999999999 +sS't' +F53270.134571000002 +ss(F309.373065 +F0.32443499999999997 +F0.77905500000000005 +F0.82904500000000003 +I0 +tp4115 +(dp4116 +g4 +F0.32443499999999997 +sg5 +I0 +sg6 +I0 +sg7 +F3.1543399999999999 +sS'm' +F23.285499999999999 +sg8 +F0.82904500000000003 +sg9 +F309.373065 +sg10 +(lp4117 +L343278901L +aL343278902L +aL343278903L +aL343278904L +aL343278905L +asg12 +(lp4118 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77905500000000005 +sS't' +F53302.107426299997 +ss(F309.38270799999998 +F0.31709399999999999 +F0.75225799999999998 +F0.98465199999999997 +I0 +tp4119 +(dp4120 +g4 +F0.31709399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F7.6912700000000003 +sS'm' +F25.058800000000002 +sg8 +F0.98465199999999997 +sg9 +F309.38270799999998 +sg10 +(lp4121 +L171388868L +aL171388869L +aL171388870L +aL171388871L +aL171388872L +asg12 +(lp4122 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.75225799999999998 +sS't' +F54005.107175800003 +ss(F309.38530100000003 +F0.33196599999999998 +F1.0100800000000001 +F0.99207100000000004 +I0 +tp4123 +(dp4124 +g4 +F0.33196599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.5588900000000001 +sS'm' +F22.842400000000001 +sg8 +F0.99207100000000004 +sg9 +F309.38530100000003 +sg10 +(lp4125 +L342966176L +aL342966177L +aL342966178L +aL342966179L +aL342966180L +asg12 +(lp4126 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100800000000001 +sS't' +F53270.134614100003 +ss(F309.36311599999999 +F0.331069 +F0.61600999999999995 +F0.77501600000000004 +I0 +tp4127 +(dp4128 +g4 +F0.331069 +sg5 +I0 +sg6 +I0 +sg7 +F0.068603999999999998 +sS'm' +F18.773 +sg8 +F0.77501600000000004 +sg9 +F309.36311599999999 +sg10 +(lp4129 +L346166032L +aL346166033L +aL346166034L +aL346166035L +aL346166036L +aL346166037L +aL346166038L +aL346166039L +aL346166040L +aL346166041L +asg12 +(lp4130 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61600999999999995 +sS't' +F53704.071626099998 +ss(F309.37304499999999 +F0.32022899999999999 +F1.0101199999999999 +F0.99219100000000005 +I0 +tp4131 +(dp4132 +g4 +F0.32022899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.40576000000000001 +sS'm' +F22.430700000000002 +sg8 +F0.99219100000000005 +sg9 +F309.37304499999999 +sg10 +(lp4133 +L342968221L +aL342968222L +aL342968223L +aL342968224L +asg12 +(lp4134 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101199999999999 +sS't' +F53270.136238500003 +ss(F309.37773700000002 +F0.32559500000000002 +F0.77904099999999998 +F0.82903800000000005 +I0 +tp4135 +(dp4136 +g4 +F0.32559500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.28215499999999999 +sS'm' +F21.516400000000001 +sg8 +F0.82903800000000005 +sg9 +F309.37773700000002 +sg10 +(lp4137 +L343276122L +aL343276123L +aL343276124L +aL343276125L +asg12 +(lp4138 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77904099999999998 +sS't' +F53302.109097699999 +ss(F309.36087700000002 +F0.31766499999999998 +F0.93315899999999996 +F0.87818499999999999 +I0 +tp4139 +(dp4140 +g4 +F0.31766499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F7.9202399999999997 +sS'm' +F24.970800000000001 +sg8 +F0.87818499999999999 +sg9 +F309.36087700000002 +sg10 +(lp4141 +L345026974L +aL345026975L +aL345026976L +aL345026977L +aL345026978L +asg12 +(lp4142 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93315899999999996 +sS't' +F53670.113817799996 +ss(F309.36985099999998 +F0.34466599999999997 +F1.0100899999999999 +F0.95309600000000005 +I0 +tp4143 +(dp4144 +g4 +F0.34466599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.608151 +sS'm' +F23.204699999999999 +sg8 +F0.95309600000000005 +sg9 +F309.36985099999998 +sg10 +(lp4145 +L343715729L +aL343715730L +aL343715731L +aL343715732L +asg12 +(lp4146 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0100899999999999 +sS't' +F53623.160385900002 +ss(F309.382431 +F0.330287 +F0.921207 +F1.10026 +I0 +tp4147 +(dp4148 +g4 +F0.330287 +sg5 +I0 +sg6 +I0 +sg7 +F0.323129 +sS'm' +F22.913599999999999 +sg8 +F1.10026 +sg9 +F309.382431 +sg10 +(lp4149 +L345539782L +aL345539783L +aL345539784L +asg12 +(lp4150 +I1 +aI2 +aI3 +asg14 +F0.921207 +sS't' +F53677.1014392 +ss(F309.37280900000002 +F0.33524300000000001 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp4151 +(dp4152 +g4 +F0.33524300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.67881000000000002 +sS'm' +F21.9207 +sg8 +F0.99200699999999997 +sg9 +F309.37280900000002 +sg10 +(lp4153 +L342964490L +aL342964491L +aL342964492L +aL342964493L +aL342964494L +asg12 +(lp4154 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134579400001 +ss(F309.363111 +F0.331042 +F0.92400599999999999 +F1.0300100000000001 +I0 +tp4155 +(dp4156 +g4 +F0.331042 +sg5 +I0 +sg6 +I0 +sg7 +F0.059843199999999999 +sS'm' +F18.810099999999998 +sg8 +F1.0300100000000001 +sg9 +F309.363111 +sg10 +(lp4157 +L345217295L +aL345217296L +aL345217297L +aL345217298L +aL345217299L +aL345217300L +aL345217301L +aL345217302L +aL345217303L +aL345217304L +asg12 +(lp4158 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400599999999999 +sS't' +F53673.081805000002 +ss(F309.37774200000001 +F0.32561600000000002 +F1.01004 +F0.99203799999999998 +I0 +tp4159 +(dp4160 +g4 +F0.32561600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.0860300000000001 +sS'm' +F23.593800000000002 +sg8 +F0.99203799999999998 +sg9 +F309.37774200000001 +sg10 +(lp4161 +L342966086L +aL342966087L +aL342966088L +aL342966089L +aL342966090L +asg12 +(lp4162 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01004 +sS't' +F53270.134593100003 +ss(F309.37196299999999 +F0.34107999999999999 +F0.86501700000000004 +F0.90001500000000001 +I0 +tp4163 +(dp4164 +g4 +F0.34107999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.3972100000000001 +sS'm' +F22.780999999999999 +sg8 +F0.90001500000000001 +sg9 +F309.37196299999999 +sg10 +(lp4165 +L345812252L +aL345812253L +aL345812254L +aL345812255L +aL345812256L +asg12 +(lp4166 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86501700000000004 +sS't' +F53693.088322900003 +ss(F309.38367599999998 +F0.34501599999999999 +F1.0100100000000001 +F0.99201600000000001 +I0 +tp4167 +(dp4168 +g4 +F0.34501599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.44107499999999999 +sS'm' +F21.427399999999999 +sg8 +F0.99201600000000001 +sg9 +F309.38367599999998 +sg10 +(lp4169 +L342966156L +aL342966157L +aL342966158L +aL342966159L +aL342966160L +asg12 +(lp4170 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134609499997 +ss(F309.36635699999999 +F0.34080100000000002 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp4171 +(dp4172 +g4 +F0.34080100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.056142999999999998 +sS'm' +F18.326499999999999 +sg8 +F1.1000099999999999 +sg9 +F309.36635699999999 +sg10 +(lp4173 +L345531914L +aL345531915L +aL345531916L +aL345531917L +aL345531918L +asg12 +(lp4174 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099736099997 +ss(F309.36761999999999 +F0.32830900000000002 +F0.92519700000000005 +F1.0307599999999999 +I0 +tp4175 +(dp4176 +g4 +F0.32830900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.42577 +sS'm' +F24.810199999999998 +sg8 +F1.0307599999999999 +sg9 +F309.36761999999999 +sg10 +(lp4177 +L345223895L +aL345223896L +aL345223897L +aL345223898L +asg12 +(lp4178 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92519700000000005 +sS't' +F53673.083476 +ss(F309.36097599999999 +F0.31762000000000001 +F0.49976799999999999 +F0.52263499999999996 +I0 +tp4179 +(dp4180 +g4 +F0.31762000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.87722199999999995 +sS'm' +F20.908799999999999 +sg8 +F0.52263499999999996 +sg9 +F309.36097599999999 +sg10 +(lp4181 +L12888201L +aL12888202L +aL12888203L +aL12888204L +aL12888205L +asg12 +(lp4182 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.49976799999999999 +sS't' +F53649.118462099999 +ss(F309.36401899999998 +F0.31757999999999997 +F0.61606700000000003 +F0.77506600000000003 +I0 +tp4183 +(dp4184 +g4 +F0.31757999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.12900200000000001 +sS'm' +F21.266400000000001 +sg8 +F0.77506600000000003 +sg9 +F309.36401899999998 +sg10 +(lp4185 +L346168071L +aL346168072L +aL346168073L +aL346168074L +asg12 +(lp4186 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61606700000000003 +sS't' +F53704.073286999999 +ss(F309.36487799999998 +F0.334619 +F0.86565400000000003 +F0.90040500000000001 +I0 +tp4187 +(dp4188 +g4 +F0.334619 +sg5 +I0 +sg6 +I0 +sg7 +F2.7185199999999998 +sS'm' +F23.516500000000001 +sg8 +F0.90040500000000001 +sg9 +F309.36487799999998 +sg10 +(lp4189 +L345814720L +aL345814721L +aL345814722L +aL345814723L +aL345814724L +asg12 +(lp4190 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86565400000000003 +sS't' +F53693.088303199998 +ss(F309.38749799999999 +F0.33272299999999999 +F0.85122799999999998 +F0.91339300000000001 +I0 +tp4191 +(dp4192 +g4 +F0.33272299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.4922499999999999 +sS'm' +F23.147099999999998 +sg8 +F0.91339300000000001 +sg9 +F309.38749799999999 +sg10 +(lp4193 +L343882242L +aL343882243L +aL343882244L +aL343882245L +asg12 +(lp4194 +I0 +aI2 +aI3 +aI4 +asg14 +F0.85122799999999998 +sS't' +F53626.144988499997 +ss(F309.36453 +F0.324461 +F0.924014 +F1.0300199999999999 +I0 +tp4195 +(dp4196 +g4 +F0.324461 +sg5 +I0 +sg6 +I0 +sg7 +F0.98494700000000002 +sS'm' +F22.553999999999998 +sg8 +F1.0300199999999999 +sg9 +F309.36453 +sg10 +(lp4197 +L345221948L +aL345221949L +aL345221950L +aL345221951L +aL345221952L +asg12 +(lp4198 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.924014 +sS't' +F53673.081808900002 +ss(F309.38565599999998 +F0.32639200000000002 +F1.01004 +F0.95305099999999998 +I0 +tp4199 +(dp4200 +g4 +F0.32639200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.98976 +sS'm' +F23.480599999999999 +sg8 +F0.95305099999999998 +sg9 +F309.38565599999998 +sg10 +(lp4201 +L343716013L +aL343716014L +aL343716015L +aL343716016L +aL343716017L +asg12 +(lp4202 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01004 +sS't' +F53623.158771299997 +ss(F309.38007299999998 +F0.34212799999999999 +F0.93300700000000003 +F0.87800800000000001 +I0 +tp4203 +(dp4204 +g4 +F0.34212799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.052334600000000002 +sS'm' +F18.5701 +sg8 +F0.87800800000000001 +sg9 +F309.38007299999998 +sg10 +(lp4205 +L345024677L +aL345024678L +aL345024679L +aL345024680L +aL345024681L +asg12 +(lp4206 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.113871100002 +ss(F309.37422800000002 +F0.32801200000000003 +F1.0906 +F1.0702499999999999 +I0 +tp4207 +(dp4208 +g4 +F0.32801200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.81215099999999996 +sS'm' +F23.942799999999998 +sg8 +F1.0702499999999999 +sg9 +F309.37422800000002 +sg10 +(lp4209 +L345679231L +aL345679232L +aL345679233L +aL345679234L +asg12 +(lp4210 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0906 +sS't' +F53680.088081499998 +ss(F309.36141500000002 +F0.31859599999999999 +F0.74922599999999995 +F0.97821999999999998 +I0 +tp4211 +(dp4212 +g4 +F0.31859599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1077300000000001 +sS'm' +F22.916799999999999 +sg8 +F0.97821999999999998 +sg9 +F309.36141500000002 +sg10 +(lp4213 +L171377789L +aL171377790L +aL171377791L +aL171377792L +aL171377793L +asg12 +(lp4214 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74922599999999995 +sS't' +F54005.107116699997 +ss(F309.38272000000001 +F0.33514500000000003 +F0.77900499999999995 +F0.82900600000000002 +I0 +tp4215 +(dp4216 +g4 +F0.33514500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.113527 +sS'm' +F19.487200000000001 +sg8 +F0.82900600000000002 +sg9 +F309.38272000000001 +sg10 +(lp4217 +L343273461L +aL343273462L +aL343273463L +aL343273464L +aL343273465L +asg12 +(lp4218 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900499999999995 +sS't' +F53302.107453099998 +ss(F309.38896099999999 +F0.34517700000000001 +F0.88500500000000004 +F1.1100000000000001 +I0 +tp4219 +(dp4220 +g4 +F0.34517700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.16419800000000001 +sS'm' +F20.6584 +sg8 +F1.1100000000000001 +sg9 +F309.38896099999999 +sg10 +(lp4221 +L344144685L +aL344144686L +aL344144687L +aL344144688L +aL344144689L +asg12 +(lp4222 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500500000000004 +sS't' +F53635.138237899999 +ss(F309.36634199999997 +F0.34081600000000001 +F0.77501200000000003 +F0.75402499999999995 +I0 +tp4223 +(dp4224 +g4 +F0.34081600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.066994600000000001 +sS'm' +F18.366299999999999 +sg8 +F0.75402499999999995 +sg9 +F309.36634199999997 +sg10 +(lp4225 +L342825644L +aL342825645L +aL342825646L +aL342825647L +aL342825648L +asg12 +(lp4226 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501200000000003 +sS't' +F53243.255734699997 +ss(F309.37196 +F0.34107100000000001 +F0.74900699999999998 +F0.97800799999999999 +I0 +tp4227 +(dp4228 +g4 +F0.34107100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.34612900000000002 +sS'm' +F21.587299999999999 +sg8 +F0.97800799999999999 +sg9 +F309.37196 +sg10 +(lp4229 +L171381396L +aL171381397L +aL171381398L +aL171381399L +aL171381400L +asg12 +(lp4230 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900699999999998 +sS't' +F54005.107146000002 +ss(F309.37303400000002 +F0.31731799999999999 +F0.88545200000000002 +F1.11046 +I0 +tp4231 +(dp4232 +g4 +F0.31731799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.90824499999999997 +sS'm' +F24.1187 +sg8 +F1.11046 +sg9 +F309.37303400000002 +sg10 +(lp4233 +L344155606L +aL344155607L +aL344155608L +aL344155609L +asg12 +(lp4234 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88545200000000002 +sS't' +F53635.139852100001 +ss(F309.36632100000003 +F0.340808 +F0.24812200000000001 +F0.34806199999999998 +I0 +tp4235 +(dp4236 +g4 +F0.340808 +sg5 +I0 +sg6 +I0 +sg7 +F0.052330799999999997 +sS'm' +F18.3917 +sg8 +F0.34806199999999998 +sg9 +F309.36632100000003 +sg10 +(lp4237 +L327901970L +aL327901971L +aL327901972L +aL327901973L +aL327901974L +asg12 +(lp4238 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24812200000000001 +sS't' +F53312.062916100003 +ss(F309.36972300000002 +F0.34460099999999999 +F0.50860700000000003 +F0.46130900000000002 +I0 +tp4239 +(dp4240 +g4 +F0.34460099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.6786399999999999 +sS'm' +F23.691800000000001 +sg8 +F0.46130900000000002 +sg9 +F309.36972300000002 +sg10 +(lp4241 +L153253724L +aL153253725L +aL153253726L +aL153253727L +asg12 +(lp4242 +I1 +aI2 +aI3 +aI4 +asg14 +F0.50860700000000003 +sS't' +F53702.0856222 +ss(F309.37308300000001 +F0.32444000000000001 +F0.775204 +F0.75421499999999997 +I0 +tp4243 +(dp4244 +g4 +F0.32444000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.74585900000000005 +sS'm' +F22.204699999999999 +sg8 +F0.75421499999999997 +sg9 +F309.37308300000001 +sg10 +(lp4245 +L342832254L +aL342832255L +aL342832256L +aL342832257L +asg12 +(lp4246 +I1 +aI2 +aI3 +aI4 +asg14 +F0.775204 +sS't' +F53243.257411899998 +ss(F309.38269500000001 +F0.33515899999999998 +F1.0500100000000001 +F0.94401500000000005 +I0 +tp4247 +(dp4248 +g4 +F0.33515899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.090817300000000004 +sS'm' +F19.358499999999999 +sg8 +F0.94401500000000005 +sg9 +F309.38269500000001 +sg10 +(lp4249 +L346332332L +aL346332333L +aL346332334L +aL346332335L +aL346332336L +aL346332337L +aL346332338L +aL346332339L +aL346332340L +aL346332341L +asg12 +(lp4250 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159599999999 +ss(F309.36006900000001 +F0.32049699999999998 +F0.92401100000000003 +F1.0300199999999999 +I0 +tp4251 +(dp4252 +g4 +F0.32049699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.10105699999999999 +sS'm' +F19.649699999999999 +sg8 +F1.0300199999999999 +sg9 +F309.36006900000001 +sg10 +(lp4253 +L345219749L +aL345219750L +aL345219751L +aL345219752L +aL345219753L +asg12 +(lp4254 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401100000000003 +sS't' +F53673.081796500002 +ss(F309.37769400000002 +F0.34559000000000001 +F0.93313800000000002 +F0.87814499999999995 +I0 +tp4255 +(dp4256 +g4 +F0.34559000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.38284600000000002 +sS'm' +F20.065899999999999 +sg8 +F0.87814499999999995 +sg9 +F309.37769400000002 +sg10 +(lp4257 +L345030815L +aL345030811L +aL345030812L +aL345030813L +aL345030814L +asg12 +(lp4258 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.93313800000000002 +sS't' +F53670.114693800002 +ss(F309.387944 +F0.34221099999999999 +F0.741012 +F0.96001000000000003 +I0 +tp4259 +(dp4260 +g4 +F0.34221099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.626892 +sS'm' +F22.319299999999998 +sg8 +F0.96001000000000003 +sg9 +F309.387944 +sg10 +(lp4261 +L344476118L +aL344476119L +aL344476120L +aL344476121L +aL344476122L +asg12 +(lp4262 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.741012 +sS't' +F53644.123887900001 +ss(F309.370993 +F0.336951 +F0.98424599999999995 +F0.98828400000000005 +I0 +tp4263 +(dp4264 +g4 +F0.336951 +sg5 +I0 +sg6 +I0 +sg7 +F2.82077 +sS'm' +F23.679400000000001 +sg8 +F0.98828400000000005 +sg9 +F309.370993 +sg10 +(lp4265 +L346468178L +aL346468179L +aL346468180L +aL346468181L +asg12 +(lp4266 +I0 +aI2 +aI3 +aI4 +asg14 +F0.98424599999999995 +sS't' +F54007.119892499999 +ss(F309.36995000000002 +F0.33444800000000002 +F0.77937800000000002 +F0.82935099999999995 +I0 +tp4267 +(dp4268 +g4 +F0.33444800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.98135399999999995 +sS'm' +F22.8918 +sg8 +F0.82935099999999995 +sg9 +F309.36995000000002 +sg10 +(lp4269 +L343278861L +aL343278862L +aL343278863L +aL343278864L +asg12 +(lp4270 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77937800000000002 +sS't' +F53302.109076100001 +ss(F309.38082600000001 +F0.33928000000000003 +F0.74680899999999995 +F0.96268399999999998 +I0 +tp4271 +(dp4272 +g4 +F0.33928000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.6694599999999999 +sS'm' +F24.124199999999998 +sg8 +F0.96268399999999998 +sg9 +F309.38082600000001 +sg10 +(lp4273 +L344475916L +aL344475917L +aL344475918L +aL344475919L +asg12 +(lp4274 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74680899999999995 +sS't' +F53644.125526600001 +ss(F309.37298700000002 +F0.32017899999999999 +F1.05131 +F0.94514299999999996 +I0 +tp4275 +(dp4276 +g4 +F0.32017899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.559693 +sS'm' +F23.3582 +sg8 +F0.94514299999999996 +sg9 +F309.37298700000002 +sg10 +(lp4277 +L346337851L +aL346337852L +aL346337853L +aL346337854L +asg12 +(lp4278 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05131 +sS't' +F53974.161231500002 +ss(F309.36599100000001 +F0.33175100000000002 +F0.749004 +F0.97800600000000004 +I0 +tp4279 +(dp4280 +g4 +F0.33175100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.13829900000000001 +sS'm' +F20.425599999999999 +sg8 +F0.97800600000000004 +sg9 +F309.36599100000001 +sg10 +(lp4281 +L171377880L +aL171377881L +aL171377882L +aL171377883L +aL171377884L +asg12 +(lp4282 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.749004 +sS't' +F54005.107129399999 +ss(F309.36972800000001 +F0.34463199999999999 +F0.50801799999999997 +F0.46158399999999999 +I0 +tp4283 +(dp4284 +g4 +F0.34463199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.44167600000000001 +sS'm' +F21.719999999999999 +sg8 +F0.46158399999999999 +sg9 +F309.36972800000001 +sg10 +(lp4285 +L153253729L +aL153253730L +aL153253731L +aL153253728L +asg12 +(lp4286 +I2 +aI3 +aI4 +aI1 +asg14 +F0.50801799999999997 +sS't' +F53702.082305199998 +ss(F309.38530200000002 +F0.33194600000000002 +F0.77514099999999997 +F0.75411799999999996 +I0 +tp4287 +(dp4288 +g4 +F0.33194600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.04941 +sS'm' +F22.551100000000002 +sg8 +F0.75411799999999996 +sg9 +F309.38530200000002 +sg10 +(lp4289 +L342830476L +aL342830477L +aL342830478L +aL342830479L +aL342830480L +aL342830481L +aL342830482L +aL342830483L +aL342830484L +aL342830485L +asg12 +(lp4290 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77514099999999997 +sS't' +F53243.255787299997 +ss(F309.38259199999999 +F0.33969700000000003 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp4291 +(dp4292 +g4 +F0.33969700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.052310299999999997 +sS'm' +F18.690200000000001 +sg8 +F1.1100000000000001 +sg9 +F309.38259199999999 +sg10 +(lp4293 +L344144464L +aL344144465L +aL344144466L +aL344144467L +aL344144468L +aL344144469L +aL344144470L +aL344144471L +aL344144472L +aL344144473L +asg12 +(lp4294 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138220200002 +ss(F309.38617599999998 +F0.33894200000000002 +F0.985398 +F0.98937200000000003 +I0 +tp4295 +(dp4296 +g4 +F0.33894200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.370782 +sS'm' +F22.601600000000001 +sg8 +F0.98937200000000003 +sg9 +F309.38617599999998 +sg10 +(lp4297 +L346466078L +aL346466079L +aL346466080L +aL346466081L +asg12 +(lp4298 +I1 +aI2 +aI3 +aI4 +asg14 +F0.985398 +sS't' +F54007.121593199998 +ss(F309.36743799999999 +F0.329345 +F1.09002 +F1.07002 +I0 +tp4299 +(dp4300 +g4 +F0.329345 +sg5 +I0 +sg6 +I0 +sg7 +F4.3957600000000001 +sS'm' +F24.529299999999999 +sg8 +F1.07002 +sg9 +F309.36743799999999 +sg10 +(lp4301 +L345681129L +aL345681130L +aL345681131L +aL345681132L +aL345681133L +aL345681134L +aL345681135L +aL345681136L +aL345681137L +aL345681138L +asg12 +(lp4302 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09002 +sS't' +F53680.086404200003 +ss(F309.38565399999999 +F0.32638600000000001 +F0.616151 +F0.77513100000000001 +I0 +tp4303 +(dp4304 +g4 +F0.32638600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F9.1177299999999999 +sS'm' +F24.589600000000001 +sg8 +F0.77513100000000001 +sg9 +F309.38565399999999 +sg10 +(lp4305 +L346172260L +aL346172261L +aL346172262L +aL346172263L +aL346172264L +asg12 +(lp4306 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.616151 +sS't' +F53704.071688700002 +ss(F309.36633599999999 +F0.34081 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp4307 +(dp4308 +g4 +F0.34081 +sg5 +I0 +sg6 +I0 +sg7 +F0.048925299999999998 +sS'm' +F18.3581 +sg8 +F1.0700000000000001 +sg9 +F309.36633599999999 +sg10 +(lp4309 +L345675671L +aL345675672L +aL345675673L +aL345675674L +aL345675675L +asg12 +(lp4310 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086401100001 +ss(F309.36982 +F0.344665 +F1.0800799999999999 +F1.0101 +I0 +tp4311 +(dp4312 +g4 +F0.344665 +sg5 +I0 +sg6 +I0 +sg7 +F0.23572699999999999 +sS'm' +F21.778700000000001 +sg8 +F1.0101 +sg9 +F309.36982 +sg10 +(lp4313 +L345370127L +aL345370128L +aL345370129L +aL345370126L +asg12 +(lp4314 +I2 +aI3 +aI4 +aI1 +asg14 +F1.0800799999999999 +sS't' +F53675.077054399997 +ss(F309.374323 +F0.32659300000000002 +F0.88500699999999999 +F1.1100099999999999 +I0 +tp4315 +(dp4316 +g4 +F0.32659300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.048356000000000003 +sS'm' +F17.247900000000001 +sg8 +F1.1100099999999999 +sg9 +F309.374323 +sg10 +(lp4317 +L344147976L +aL344147972L +aL344147973L +aL344147974L +aL344147975L +asg12 +(lp4318 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.88500699999999999 +sS't' +F53635.139026500001 +ss(F309.373087 +F0.32447199999999998 +F0.74902800000000003 +F0.97802599999999995 +I0 +tp4319 +(dp4320 +g4 +F0.32447199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.21169399999999999 +sS'm' +F22.430199999999999 +sg8 +F0.97802599999999995 +sg9 +F309.373087 +sg10 +(lp4321 +L171384960L +aL171384961L +aL171384962L +aL171384963L +asg12 +(lp4322 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74902800000000003 +sS't' +F54005.108807600001 +ss(F309.38367499999998 +F0.34498299999999998 +F0.77901900000000002 +F0.82901899999999995 +I0 +tp4323 +(dp4324 +g4 +F0.34498299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.59037499999999998 +sS'm' +F21.4421 +sg8 +F0.82901899999999995 +sg9 +F309.38367499999998 +sg10 +(lp4325 +L343277268L +aL343277269L +aL343277270L +aL343277271L +aL343277272L +asg12 +(lp4326 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77901900000000002 +sS't' +F53302.107455700003 +ss(F309.36635699999999 +F0.34083000000000002 +F0.64901299999999995 +F0.53901699999999997 +I0 +tp4327 +(dp4328 +g4 +F0.34083000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0656138 +sS'm' +F18.425599999999999 +sg8 +F0.53901699999999997 +sg9 +F309.36635699999999 +sg10 +(lp4329 +L112295360L +aL112295361L +aL112295362L +aL112295363L +aL112295364L +asg12 +(lp4330 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901299999999995 +sS't' +F53656.106068699999 +ss(F309.38203800000002 +F0.33610000000000001 +F0.98818700000000004 +F0.99128000000000005 +I0 +tp4331 +(dp4332 +g4 +F0.33610000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.84263 +sS'm' +F23.2026 +sg8 +F0.99128000000000005 +sg9 +F309.38203800000002 +sg10 +(lp4333 +L346462204L +aL346462205L +aL346462206L +aL346462207L +asg12 +(lp4334 +I0 +aI2 +aI3 +aI4 +asg14 +F0.98818700000000004 +sS't' +F54007.1199232 +ss(F309.36454300000003 +F0.324492 +F0.616031 +F0.77503200000000005 +I0 +tp4335 +(dp4336 +g4 +F0.324492 +sg5 +I0 +sg6 +I0 +sg7 +F0.099890900000000005 +sS'm' +F20.952000000000002 +sg8 +F0.77503200000000005 +sg9 +F309.36454300000003 +sg10 +(lp4337 +L346170904L +aL346170905L +aL346170906L +aL346170907L +asg12 +(lp4338 +I1 +aI2 +aI3 +aI4 +asg14 +F0.616031 +sS't' +F53704.073288500003 +ss(F309.36492900000002 +F0.33456999999999998 +F0.249834 +F0.35021999999999998 +I0 +tp4339 +(dp4340 +g4 +F0.33456999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.23272 +sS'm' +F22.350999999999999 +sg8 +F0.35021999999999998 +sg9 +F309.36492900000002 +sg10 +(lp4341 +L327906450L +aL327906451L +aL327906452L +aL327906453L +aL327906454L +asg12 +(lp4342 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.249834 +sS't' +F53312.062912200003 +ss(F309.385402 +F0.340138 +F1.05003 +F0.94404299999999997 +I0 +tp4343 +(dp4344 +g4 +F0.340138 +sg5 +I0 +sg6 +I0 +sg7 +F0.51842699999999997 +sS'm' +F21.689499999999999 +sg8 +F0.94404299999999997 +sg9 +F309.385402 +sg10 +(lp4345 +L346336616L +aL346336617L +aL346336618L +aL346336619L +aL346336620L +asg12 +(lp4346 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05003 +sS't' +F53974.159607499998 +ss(F309.38566500000002 +F0.32634299999999999 +F0.93307200000000001 +F0.87809400000000004 +I0 +tp4347 +(dp4348 +g4 +F0.32634299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.0986400000000001 +sS'm' +F23.327000000000002 +sg8 +F0.87809400000000004 +sg9 +F309.38566500000002 +sg10 +(lp4349 +L345030933L +aL345030934L +aL345030935L +aL345030936L +aL345030937L +asg12 +(lp4350 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93307200000000001 +sS't' +F53670.113886699997 +ss(F309.36005399999999 +F0.32049299999999997 +F0.98400500000000002 +F0.98800399999999999 +I0 +tp4351 +(dp4352 +g4 +F0.32049299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.104558 +sS'm' +F19.732700000000001 +sg8 +F0.98800399999999999 +sg9 +F309.36005399999999 +sg10 +(lp4353 +L346461741L +aL346461742L +aL346461743L +aL346461744L +aL346461745L +aL346461746L +aL346461747L +aL346461748L +aL346461749L +aL346461750L +asg12 +(lp4354 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.119862200001 +ss(F309.366354 +F0.340812 +F0.47603800000000002 +F0.45402799999999999 +I0 +tp4355 +(dp4356 +g4 +F0.340812 +sg5 +I0 +sg6 +I0 +sg7 +F0.055904299999999997 +sS'm' +F18.369 +sg8 +F0.45402799999999999 +sg9 +F309.366354 +sg10 +(lp4357 +L344871183L +aL344871184L +aL344871185L +aL344871186L +aL344871187L +asg12 +(lp4358 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47603800000000002 +sS't' +F53668.108979099998 +ss(F309.38087200000001 +F0.33935500000000002 +F0.77917800000000004 +F0.75478199999999995 +I0 +tp4359 +(dp4360 +g4 +F0.33935500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.8028299999999999 +sS'm' +F22.411300000000001 +sg8 +F0.75478199999999995 +sg9 +F309.38087200000001 +sg10 +(lp4361 +L342827491L +aL342827492L +aL342827493L +aL342827494L +asg12 +(lp4362 +I0 +aI2 +aI3 +aI4 +asg14 +F0.77917800000000004 +sS't' +F53243.255774999998 +ss(F309.38008100000002 +F0.34215499999999999 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp4363 +(dp4364 +g4 +F0.34215499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.020949099999999998 +sS'm' +F16.781400000000001 +sg8 +F0.99200699999999997 +sg9 +F309.38008100000002 +sg10 +(lp4365 +L342962119L +aL342962120L +aL342962116L +aL342962117L +aL342962118L +asg12 +(lp4366 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F1.0100100000000001 +sS't' +F53270.133770300003 +ss(F309.38217800000001 +F0.321745 +F0.61601499999999998 +F0.77502000000000004 +I0 +tp4367 +(dp4368 +g4 +F0.321745 +sg5 +I0 +sg6 +I0 +sg7 +F0.26407900000000001 +sS'm' +F20.658799999999999 +sg8 +F0.77502000000000004 +sg9 +F309.38217800000001 +sg10 +(lp4369 +L346168368L +aL346168369L +aL346168370L +aL346168371L +aL346168372L +asg12 +(lp4370 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601499999999998 +sS't' +F53704.071679000001 +ss(F309.38218000000001 +F0.32176199999999999 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp4371 +(dp4372 +g4 +F0.32176199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.164327 +sS'm' +F20.582899999999999 +sg8 +F1.0100100000000001 +sg9 +F309.38218000000001 +sg10 +(lp4373 +L345366410L +aL345366411L +aL345366412L +aL345366413L +aL345366414L +asg12 +(lp4374 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078747300002 +ss(F309.38794100000001 +F0.34221400000000002 +F0.88500800000000002 +F1.1100099999999999 +I0 +tp4375 +(dp4376 +g4 +F0.34221400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.46553600000000001 +sS'm' +F22.0243 +sg8 +F1.1100099999999999 +sg9 +F309.38794100000001 +sg10 +(lp4377 +L344144690L +aL344144691L +aL344144692L +aL344144693L +aL344144694L +asg12 +(lp4378 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500800000000002 +sS't' +F53635.138234999999 +ss(F309.386459 +F0.33953299999999997 +F1.09039 +F1.07033 +I0 +tp4379 +(dp4380 +g4 +F0.33953299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F1.3445199999999999 +sS'm' +F23.221 +sg8 +F1.07033 +sg9 +F309.386459 +sg10 +(lp4381 +L345679454L +aL345679455L +aL345679456L +aL345679457L +aL345679458L +asg12 +(lp4382 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09039 +sS't' +F53680.086456999998 +ss(F309.36750799999999 +F0.32930799999999999 +F0.48141800000000001 +F0.51512400000000003 +I0 +tp4383 +(dp4384 +g4 +F0.32930799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.04969 +sS'm' +F22.847799999999999 +sg8 +F0.51512400000000003 +sg9 +F309.36750799999999 +sg10 +(lp4385 +L12888237L +aL12888238L +aL12888239L +aL12888240L +asg12 +(lp4386 +I1 +aI2 +aI3 +aI4 +asg14 +F0.48141800000000001 +sS't' +F53649.120138699996 +ss(F309.36745100000002 +F0.32935999999999999 +F0.85105200000000003 +F0.913053 +I0 +tp4387 +(dp4388 +g4 +F0.32935999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.80052000000000001 +sS'm' +F22.711200000000002 +sg8 +F0.913053 +sg9 +F309.36745100000002 +sg10 +(lp4389 +L343881873L +aL343881874L +aL343881875L +aL343881876L +asg12 +(lp4390 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85105200000000003 +sS't' +F53626.146591299999 +ss(F309.36786999999998 +F0.34504699999999999 +F0.88514899999999996 +F1.1107800000000001 +I0 +tp4391 +(dp4392 +g4 +F0.34504699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.9823599999999999 +sS'm' +F23.663900000000002 +sg8 +F1.1107800000000001 +sg9 +F309.36786999999998 +sg10 +(lp4393 +L344151907L +aL344151908L +aL344151909L +aL344151910L +aL344151911L +asg12 +(lp4394 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88514899999999996 +sS't' +F53635.138179299996 +ss(F309.36847899999998 +F0.33944600000000003 +F0.98640300000000003 +F0.99067899999999998 +I0 +tp4395 +(dp4396 +g4 +F0.33944600000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.91163000000000005 +sS'm' +F23.606400000000001 +sg8 +F0.99067899999999998 +sg9 +F309.36847899999998 +sg10 +(lp4397 +L346467712L +aL346467713L +aL346467714L +aL346467715L +asg12 +(lp4398 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98640300000000003 +sS't' +F54007.121544000001 +ss(F309.36992199999997 +F0.33445000000000003 +F1.0900799999999999 +F1.07006 +I0 +tp4399 +(dp4400 +g4 +F0.33445000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.7349300000000001 +sS'm' +F23.505199999999999 +sg8 +F1.07006 +sg9 +F309.36992199999997 +sg10 +(lp4401 +L345683732L +aL345683733L +aL345683734L +aL345683735L +aL345683736L +asg12 +(lp4402 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900799999999999 +sS't' +F53680.086411099997 +ss(F309.36312600000002 +F0.33102999999999999 +F0.92100499999999996 +F1.1000099999999999 +I0 +tp4403 +(dp4404 +g4 +F0.33102999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.24274699999999999 +sS'm' +F21.069900000000001 +sg8 +F1.1000099999999999 +sg9 +F309.36312600000002 +sg10 +(lp4405 +L345531826L +aL345531827L +aL345531828L +aL345531829L +aL345531830L +asg12 +(lp4406 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100499999999996 +sS't' +F53677.099727100001 +ss(F309.36093499999998 +F0.31767600000000001 +F0.50730299999999995 +F0.46072200000000002 +I0 +tp4407 +(dp4408 +g4 +F0.31767600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.3362799999999999 +sS'm' +F22.751000000000001 +sg8 +F0.46072200000000002 +sg9 +F309.36093499999998 +sg10 +(lp4409 +L153250024L +aL153250025L +aL153250026L +aL153250027L +aL153250028L +asg12 +(lp4410 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50730299999999995 +sS't' +F53702.0839394 +ss(F309.37306000000001 +F0.32447199999999998 +F0.41364000000000001 +F0.412545 +I0 +tp4411 +(dp4412 +g4 +F0.32447199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.0359999999999996 +sS'm' +F23.572800000000001 +sg8 +F0.412545 +sg9 +F309.37306000000001 +sg10 +(lp4413 +L346002805L +aL346002806L +aL346002807L +aL346002808L +aL346002809L +asg12 +(lp4414 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41364000000000001 +sS't' +F53703.093106699998 +ss(F309.374751 +F0.33170699999999997 +F0.616012 +F0.77501699999999996 +I0 +tp4415 +(dp4416 +g4 +F0.33170699999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.037203300000000002 +sS'm' +F15.957599999999999 +sg8 +F0.77501699999999996 +sg9 +F309.374751 +sg10 +(lp4417 +L346166218L +aL346166219L +aL346166220L +aL346166221L +aL346166222L +asg12 +(lp4418 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.616012 +sS't' +F53704.071658399997 +ss(F309.380066 +F0.34213300000000002 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp4419 +(dp4420 +g4 +F0.34213300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.052899500000000002 +sS'm' +F18.615500000000001 +sg8 +F1.0700000000000001 +sg9 +F309.380066 +sg10 +(lp4421 +L345676045L +aL345676046L +aL345676047L +aL345676048L +aL345676049L +asg12 +(lp4422 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086439300001 +ss(F309.36008299999997 +F0.32054899999999997 +F0.73102500000000004 +F0.73202199999999995 +I0 +tp4423 +(dp4424 +g4 +F0.32054899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.169959 +sS'm' +F19.734100000000002 +sg8 +F0.73202199999999995 +sg9 +F309.36008299999997 +sg10 +(lp4425 +L344601463L +aL344601464L +aL344601465L +aL344601466L +aL344601467L +asg12 +(lp4426 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.73102500000000004 +sS't' +F53654.158461200001 +ss(F309.35979400000002 +F0.32505400000000001 +F1.0500100000000001 +F0.94401599999999997 +I0 +tp4427 +(dp4428 +g4 +F0.32505400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.161721 +sS'm' +F20.440999999999999 +sg8 +F0.94401599999999997 +sg9 +F309.35979400000002 +sg10 +(lp4429 +L346331804L +aL346331805L +aL346331806L +aL346331807L +aL346331808L +aL346331809L +aL346331810L +aL346331811L +asg12 +(lp4430 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.161194799999 +ss(F309.37473599999998 +F0.33171400000000001 +F0.86500600000000005 +F0.90000599999999997 +I0 +tp4431 +(dp4432 +g4 +F0.33171400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.0329763 +sS'm' +F15.952 +sg8 +F0.90000599999999997 +sg9 +F309.37473599999998 +sg10 +(lp4433 +L345809054L +aL345809055L +aL345809056L +aL345809057L +aL345809058L +asg12 +(lp4434 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86500600000000005 +sS't' +F53693.088330600003 +ss(F309.38217200000003 +F0.32173099999999999 +F0.741008 +F0.96000799999999997 +I0 +tp4435 +(dp4436 +g4 +F0.32173099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.17114199999999999 +sS'm' +F20.738199999999999 +sg8 +F0.96000799999999997 +sg9 +F309.38217200000003 +sg10 +(lp4437 +L344478994L +aL344478995L +aL344478996L +aL344478997L +aL344478998L +asg12 +(lp4438 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.741008 +sS't' +F53644.123871900003 +ss(F309.36598300000003 +F0.33173900000000001 +F0.248082 +F0.348055 +I0 +tp4439 +(dp4440 +g4 +F0.33173900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.21632699999999999 +sS'm' +F20.3873 +sg8 +F0.348055 +sg9 +F309.36598300000003 +sg10 +(lp4441 +L327903526L +aL327903527L +aL327903528L +aL327903529L +aL327903530L +asg12 +(lp4442 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248082 +sS't' +F53312.062915100003 +ss(F309.377747 +F0.32561000000000001 +F0.64915100000000003 +F0.53920100000000004 +I0 +tp4443 +(dp4444 +g4 +F0.32561000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.37123699999999998 +sS'm' +F21.379200000000001 +sg8 +F0.53920100000000004 +sg9 +F309.377747 +sg10 +(lp4445 +L112299385L +aL112299386L +aL112299387L +aL112299388L +asg12 +(lp4446 +I1 +aI2 +aI3 +aI4 +asg14 +F0.64915100000000003 +sS't' +F53656.107758799997 +ss(F309.386503 +F0.32197999999999999 +F0.74901300000000004 +F0.97801300000000002 +I0 +tp4447 +(dp4448 +g4 +F0.32197999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.56451899999999999 +sS'm' +F22.1629 +sg8 +F0.97801300000000002 +sg9 +F309.386503 +sg10 +(lp4449 +L171381677L +aL171381678L +aL171381679L +aL171381680L +aL171381681L +asg12 +(lp4450 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74901300000000004 +sS't' +F54005.107186399997 +ss(F309.386482 +F0.32197199999999998 +F1.05002 +F0.94402200000000003 +I0 +tp4451 +(dp4452 +g4 +F0.32197199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.70708700000000002 +sS'm' +F22.043299999999999 +sg8 +F0.94402200000000003 +sg9 +F309.386482 +sg10 +(lp4453 +L346336657L +aL346336658L +aL346336659L +aL346336660L +aL346336661L +asg12 +(lp4454 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159610499999 +ss(F309.38080200000002 +F0.34460200000000002 +F0.77920699999999998 +F0.75862399999999997 +I0 +tp4455 +(dp4456 +g4 +F0.34460200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.9624900000000001 +sS'm' +F23.274899999999999 +sg8 +F0.75862399999999997 +sg9 +F309.38080200000002 +sg10 +(lp4457 +L342832320L +aL342832321L +aL342832322L +aL342832323L +asg12 +(lp4458 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77920699999999998 +sS't' +F53243.257433300001 +ss(F309.388104 +F0.33810299999999999 +F1.0500400000000001 +F0.94406100000000004 +I0 +tp4459 +(dp4460 +g4 +F0.33810299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.23123099999999999 +sS'm' +F22.063600000000001 +sg8 +F0.94406100000000004 +sg9 +F309.388104 +sg10 +(lp4461 +L346336643L +aL346336644L +aL346336645L +aL346336646L +asg12 +(lp4462 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0500400000000001 +sS't' +F53974.161273500002 +ss(F309.38084199999997 +F0.344559 +F0.98419599999999996 +F0.988151 +I0 +tp4463 +(dp4464 +g4 +F0.344559 +sg5 +I0 +sg6 +I0 +sg7 +F4.73672 +sS'm' +F24.235700000000001 +sg8 +F0.988151 +sg9 +F309.38084199999997 +sg10 +(lp4465 +L346467857L +aL346467858L +aL346467859L +aL346467860L +aL346467861L +asg12 +(lp4466 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98419599999999996 +sS't' +F54007.119919899997 +ss(F309.38270599999998 +F0.33516899999999999 +F0.98400500000000002 +F0.98800399999999999 +I0 +tp4467 +(dp4468 +g4 +F0.33516899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.090818999999999997 +sS'm' +F19.463699999999999 +sg8 +F0.98800399999999999 +sg9 +F309.38270599999998 +sg10 +(lp4469 +L346462194L +aL346462195L +aL346462196L +aL346462199L +aL346462200L +aL346462201L +aL346462202L +aL346462203L +aL346462197L +aL346462198L +asg12 +(lp4470 +I0 +aI1 +aI2 +aI0 +aI1 +aI2 +aI3 +aI4 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.1199251 +ss(F309.365047 +F0.33014700000000002 +F0.74900299999999997 +F0.97800600000000004 +I0 +tp4471 +(dp4472 +g4 +F0.33014700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.32024900000000001 +sS'm' +F21.497199999999999 +sg8 +F0.97800600000000004 +sg9 +F309.365047 +sg10 +(lp4473 +L171377875L +aL171377876L +aL171377877L +aL171377878L +aL171377879L +asg12 +(lp4474 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107126800001 +ss(F309.38648599999999 +F0.32196999999999998 +F0.88501300000000005 +F1.1100099999999999 +I0 +tp4475 +(dp4476 +g4 +F0.32196999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.30542900000000001 +sS'm' +F20.308 +sg8 +F1.1100099999999999 +sg9 +F309.38648599999999 +sg10 +(lp4477 +L344150959L +aL344150950L +aL344150951L +aL344150952L +aL344150953L +aL344150954L +aL344150955L +aL344150956L +aL344150957L +aL344150958L +asg12 +(lp4478 +I4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.88501300000000005 +sS't' +F53635.139060300004 +ss(F309.36308000000002 +F0.322683 +F0.62133400000000005 +F0.77864699999999998 +I0 +tp4479 +(dp4480 +g4 +F0.322683 +sg5 +I0 +sg6 +I0 +sg7 +F0.97245599999999999 +sS'm' +F23.549900000000001 +sg8 +F0.77864699999999998 +sg9 +F309.36308000000002 +sg10 +(lp4481 +L346174242L +aL346174243L +aL346174244L +aL346174245L +asg12 +(lp4482 +I1 +aI2 +aI3 +aI4 +asg14 +F0.62133400000000005 +sS't' +F53704.073284400001 +ss(F309.385291 +F0.33194400000000002 +F1.05003 +F0.94402799999999998 +I0 +tp4483 +(dp4484 +g4 +F0.33194400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.174787 +sS'm' +F21.159800000000001 +sg8 +F0.94402799999999998 +sg9 +F309.385291 +sg10 +(lp4485 +L346333345L +aL346333346L +aL346333347L +aL346333348L +aL346333349L +aL346333350L +aL346333351L +aL346333352L +asg12 +(lp4486 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05003 +sS't' +F53974.161265700001 +ss(F309.363113 +F0.33105200000000001 +F0.77501200000000003 +F0.75402599999999997 +I0 +tp4487 +(dp4488 +g4 +F0.33105200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.084430900000000003 +sS'm' +F18.791699999999999 +sg8 +F0.75402599999999997 +sg9 +F309.363113 +sg10 +(lp4489 +L342827317L +aL342827319L +aL342827320L +aL342827321L +aL342827322L +aL342827323L +aL342827324L +aL342827325L +aL342827326L +aL342827318L +asg12 +(lp4490 +I0 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI1 +asg14 +F0.77501200000000003 +sS't' +F53243.255725700001 +ss(F309.38007700000003 +F0.34215200000000001 +F1.0100100000000001 +F0.953009 +I0 +tp4491 +(dp4492 +g4 +F0.34215200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.065272300000000005 +sS'm' +F18.649999999999999 +sg8 +F0.953009 +sg9 +F309.38007700000003 +sg10 +(lp4493 +L343709490L +aL343709491L +aL343709492L +aL343709493L +aL343709494L +aL343709495L +aL343709496L +aL343709497L +aL343709498L +aL343709499L +asg12 +(lp4494 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158755800003 +ss(F309.38008500000001 +F0.34215699999999999 +F0.61602000000000001 +F0.77502000000000004 +I0 +tp4495 +(dp4496 +g4 +F0.34215699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.062764500000000001 +sS'm' +F18.585899999999999 +sg8 +F0.77502000000000004 +sg9 +F309.38008500000001 +sg10 +(lp4497 +L346166257L +aL346166258L +aL346166259L +aL346166260L +aL346166261L +asg12 +(lp4498 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61602000000000001 +sS't' +F53704.0716732 +ss(F309.35980499999999 +F0.32508100000000001 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp4499 +(dp4500 +g4 +F0.32508100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.63739699999999999 +sS'm' +F22.231000000000002 +sg8 +F1.0100100000000001 +sg9 +F309.35980499999999 +sg10 +(lp4501 +L345365953L +aL345365954L +aL345365955L +aL345365956L +aL345365957L +aL345365958L +aL345365959L +aL345365960L +aL345365961L +aL345365962L +asg12 +(lp4502 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078685200002 +ss(F309.374731 +F0.33171099999999998 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp4503 +(dp4504 +g4 +F0.33171099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.043120400000000003 +sS'm' +F15.939 +sg8 +F1.0100100000000001 +sg9 +F309.374731 +sg10 +(lp4505 +L345363641L +aL345363642L +aL345363643L +aL345363644L +aL345363645L +asg12 +(lp4506 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078726599997 +ss(F309.37098900000001 +F0.33698 +F1.0104599999999999 +F0.95361099999999999 +I0 +tp4507 +(dp4508 +g4 +F0.33698 +sg5 +I0 +sg6 +I0 +sg7 +F0.81298199999999998 +sS'm' +F23.205300000000001 +sg8 +F0.95361099999999999 +sg9 +F309.37098900000001 +sg10 +(lp4509 +L343717751L +aL343717752L +aL343717753L +asg12 +(lp4510 +I2 +aI3 +aI4 +asg14 +F1.0104599999999999 +sS't' +F53623.157072000002 +ss(F309.38270899999998 +F0.33514300000000002 +F0.85100299999999995 +F0.91300800000000004 +I0 +tp4511 +(dp4512 +g4 +F0.33514300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.106628 +sS'm' +F19.477599999999999 +sg8 +F0.91300800000000004 +sg9 +F309.38270899999998 +sg10 +(lp4513 +L343876318L +aL343876319L +aL343876320L +aL343876321L +aL343876322L +aL343876323L +aL343876324L +aL343876325L +aL343876326L +aL343876327L +asg12 +(lp4514 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.144975199997 +ss(F309.36599000000001 +F0.331731 +F0.47008100000000003 +F0.50307299999999999 +I0 +tp4515 +(dp4516 +g4 +F0.331731 +sg5 +I0 +sg6 +I0 +sg7 +F0.64884799999999998 +sS'm' +F20.570599999999999 +sg8 +F0.50307299999999999 +sg9 +F309.36599000000001 +sg10 +(lp4517 +L12885228L +aL12885229L +aL12885230L +aL12885231L +aL12885232L +asg12 +(lp4518 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47008100000000003 +sS't' +F53649.118476000003 +ss(F309.373088 +F0.32445499999999999 +F0.98404899999999995 +F0.98804199999999998 +I0 +tp4519 +(dp4520 +g4 +F0.32445499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.28666599999999998 +sS'm' +F22.325399999999998 +sg8 +F0.98804199999999998 +sg9 +F309.373088 +sg10 +(lp4521 +L346463943L +aL346463944L +aL346463945L +aL346463946L +asg12 +(lp4522 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98404899999999995 +sS't' +F54007.121556799997 +ss(F309.38780000000003 +F0.32193300000000002 +F0.86117900000000003 +F0.91802600000000001 +I0 +tp4523 +(dp4524 +g4 +F0.32193300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.7990699999999999 +sS'm' +F22.7927 +sg8 +F0.91802600000000001 +sg9 +F309.38780000000003 +sg10 +(lp4525 +L343880305L +aL343880306L +aL343880307L +aL343880308L +asg12 +(lp4526 +I0 +aI2 +aI3 +aI4 +asg14 +F0.86117900000000003 +sS't' +F53626.144989400003 +ss(F309.37473599999998 +F0.33167999999999997 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp4527 +(dp4528 +g4 +F0.33167999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.037184700000000001 +sS'm' +F15.954800000000001 +sg8 +F0.82900499999999999 +sg9 +F309.37473599999998 +sg10 +(lp4529 +L343271527L +aL343271528L +aL343271529L +aL343271530L +aL343271531L +asg12 +(lp4530 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.107430900003 +ss(F309.37302799999998 +F0.32017800000000002 +F1.09005 +F1.0700400000000001 +I0 +tp4531 +(dp4532 +g4 +F0.32017800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.27281300000000003 +sS'm' +F22.715399999999999 +sg8 +F1.0700400000000001 +sg9 +F309.37302799999998 +sg10 +(lp4533 +L345683800L +aL345683801L +aL345683802L +aL345683803L +asg12 +(lp4534 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09005 +sS't' +F53680.088078200002 +ss(F309.377971 +F0.337843 +F0.85100299999999995 +F0.91300800000000004 +I0 +tp4535 +(dp4536 +g4 +F0.337843 +sg5 +I0 +sg6 +I0 +sg7 +F0.058300100000000001 +sS'm' +F18.381799999999998 +sg8 +F0.91300800000000004 +sg9 +F309.377971 +sg10 +(lp4537 +L343874267L +aL343874268L +aL343874269L +aL343874270L +aL343874271L +asg12 +(lp4538 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.144962099999 +ss(F309.36403300000001 +F0.31754900000000003 +F0.47620699999999999 +F0.45416699999999999 +I0 +tp4539 +(dp4540 +g4 +F0.31754900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.15232899999999999 +sS'm' +F21.4206 +sg8 +F0.45416699999999999 +sg9 +F309.36403300000001 +sg10 +(lp4541 +L344873009L +aL344873010L +aL344873011L +aL344873012L +asg12 +(lp4542 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47620699999999999 +sS't' +F53668.110631099997 +ss(F309.37897600000002 +F0.32701400000000003 +F0.82802200000000004 +F0.94501800000000002 +I0 +tp4543 +(dp4544 +g4 +F0.32701400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.38599800000000001 +sS'm' +F21.396000000000001 +sg8 +F0.94501800000000002 +sg9 +F309.37897600000002 +sg10 +(lp4545 +L343123322L +aL343123323L +aL343123324L +aL343123325L +aL343123326L +asg12 +(lp4546 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82802200000000004 +sS't' +F53288.111773899996 +ss(F309.36454600000002 +F0.32449499999999998 +F0.47036499999999998 +F0.50331700000000001 +I0 +tp4547 +(dp4548 +g4 +F0.32449499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.45996399999999998 +sS'm' +F21.206800000000001 +sg8 +F0.50331700000000001 +sg9 +F309.36454600000002 +sg10 +(lp4549 +L12887107L +aL12887108L +aL12887109L +aL12887110L +asg12 +(lp4550 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47036499999999998 +sS't' +F53649.1201305 +ss(F309.38564400000001 +F0.32635700000000001 +F0.82806100000000005 +F0.94504900000000003 +I0 +tp4551 +(dp4552 +g4 +F0.32635700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.1106600000000002 +sS'm' +F23.2956 +sg8 +F0.94504900000000003 +sg9 +F309.38564400000001 +sg10 +(lp4553 +L343127833L +aL343127834L +aL343127835L +aL343127836L +aL343127837L +asg12 +(lp4554 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82806100000000005 +sS't' +F53288.111792399999 +ss(F309.36917199999999 +F0.34571000000000002 +F1.0500700000000001 +F0.94410700000000003 +I0 +tp4555 +(dp4556 +g4 +F0.34571000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.45569399999999999 +sS'm' +F23.102 +sg8 +F0.94410700000000003 +sg9 +F309.36917199999999 +sg10 +(lp4557 +L346336238L +aL346336239L +aL346336240L +aL346336241L +asg12 +(lp4558 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0500700000000001 +sS't' +F53974.161220900001 +ss(F309.373018 +F0.32022200000000001 +F0.88510200000000006 +F1.11009 +I0 +tp4559 +(dp4560 +g4 +F0.32022200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F9.2590400000000006 +sS'm' +F25.363099999999999 +sg8 +F1.11009 +sg9 +F309.373018 +sg10 +(lp4561 +L344153121L +aL344153122L +aL344153123L +aL344153124L +aL344153125L +asg12 +(lp4562 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88510200000000006 +sS't' +F53635.138193600003 +ss(F309.372365 +F0.32940799999999998 +F1.0904 +F1.0701700000000001 +I0 +tp4563 +(dp4564 +g4 +F0.32940799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.62033499999999997 +sS'm' +F23.642900000000001 +sg8 +F1.0701700000000001 +sg9 +F309.372365 +sg10 +(lp4565 +L345685756L +aL345685757L +aL345685758L +aL345685759L +asg12 +(lp4566 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0904 +sS't' +F53680.088076300002 +ss(F309.38898599999999 +F0.34520600000000001 +F1.0100100000000001 +F0.99200900000000003 +I0 +tp4567 +(dp4568 +g4 +F0.34520600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.356628 +sS'm' +F21.120200000000001 +sg8 +F0.99200900000000003 +sg9 +F309.38898599999999 +sg10 +(lp4569 +L342962257L +aL342962258L +aL342962259L +aL342962260L +aL342962261L +asg12 +(lp4570 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134624300001 +ss(F309.36810800000001 +F0.346086 +F1.0802099999999999 +F1.01017 +I0 +tp4571 +(dp4572 +g4 +F0.346086 +sg5 +I0 +sg6 +I0 +sg7 +F3.67502 +sS'm' +F24.167999999999999 +sg8 +F1.01017 +sg9 +F309.36810800000001 +sg10 +(lp4573 +L345370134L +aL345370135L +aL345370136L +aL345370137L +aL345370138L +asg12 +(lp4574 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0802099999999999 +sS't' +F53675.078708200002 +ss(F309.37302899999997 +F0.32019900000000001 +F1.0802 +F1.01014 +I0 +tp4575 +(dp4576 +g4 +F0.32019900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.37027500000000002 +sS'm' +F22.846 +sg8 +F1.01014 +sg9 +F309.37302899999997 +sg10 +(lp4577 +L345370263L +aL345370264L +aL345370265L +aL345370266L +asg12 +(lp4578 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0802 +sS't' +F53675.080380300002 +ss(F309.38530600000001 +F0.33195400000000003 +F0.77905500000000005 +F0.82905499999999999 +I0 +tp4579 +(dp4580 +g4 +F0.33195400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F6.6162999999999998 +sS'm' +F24.092099999999999 +sg8 +F0.82905499999999999 +sg9 +F309.38530600000001 +sg10 +(lp4581 +L343276160L +aL343276161L +aL343276162L +aL343276163L +aL343276164L +asg12 +(lp4582 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77905500000000005 +sS't' +F53302.107460300002 +ss(F309.37195500000001 +F0.34106399999999998 +F0.47034900000000002 +F0.50336599999999998 +I0 +tp4583 +(dp4584 +g4 +F0.34106399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.91361 +sS'm' +F21.767099999999999 +sg8 +F0.50336599999999998 +sg9 +F309.37195500000001 +sg10 +(lp4585 +L12887170L +aL12887171L +aL12887172L +aL12887173L +aL12887174L +asg12 +(lp4586 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47034900000000002 +sS't' +F53649.118492599999 +ss(F309.36785900000001 +F0.34504400000000002 +F0.74916799999999995 +F0.97823899999999997 +I0 +tp4587 +(dp4588 +g4 +F0.34504400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.28518100000000002 +sS'm' +F22.767900000000001 +sg8 +F0.97823899999999997 +sg9 +F309.36785900000001 +sg10 +(lp4589 +L171386254L +aL171386255L +aL171386256L +aL171386257L +asg12 +(lp4590 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74916799999999995 +sS't' +F54005.108792999999 +ss(F309.37419599999998 +F0.32802799999999999 +F0.74947900000000001 +F0.97846200000000005 +I0 +tp4591 +(dp4592 +g4 +F0.32802799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.84401400000000004 +sS'm' +F23.989799999999999 +sg8 +F0.97846200000000005 +sg9 +F309.37419599999998 +sg10 +(lp4593 +L171381450L +aL171381451L +aL171381452L +aL171381453L +asg12 +(lp4594 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74947900000000001 +sS't' +F54005.108810600002 +ss(F309.38275700000003 +F0.32575599999999999 +F0.77509799999999995 +F0.75411499999999998 +I0 +tp4595 +(dp4596 +g4 +F0.32575599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F9.4121100000000002 +sS'm' +F24.212 +sg8 +F0.75411499999999998 +sg9 +F309.38275700000003 +sg10 +(lp4597 +L342830442L +aL342830443L +aL342830444L +aL342830445L +aL342830446L +asg12 +(lp4598 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77509799999999995 +sS't' +F53243.255780300002 +ss(F309.36597999999998 +F0.331731 +F0.74100699999999997 +F0.96000700000000005 +I0 +tp4599 +(dp4600 +g4 +F0.331731 +sg5 +I0 +sg6 +I0 +sg7 +F0.13855600000000001 +sS'm' +F20.436599999999999 +sg8 +F0.96000700000000005 +sg9 +F309.36597999999998 +sg10 +(lp4601 +L344475583L +aL344475584L +aL344475585L +aL344475586L +aL344475587L +asg12 +(lp4602 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100699999999997 +sS't' +F53644.123826900002 +ss(F309.38237900000001 +F0.324515 +F0.88512999999999997 +F1.1101399999999999 +I0 +tp4603 +(dp4604 +g4 +F0.324515 +sg5 +I0 +sg6 +I0 +sg7 +F5.4727699999999997 +sS'm' +F24.786300000000001 +sg8 +F1.1101399999999999 +sg9 +F309.38237900000001 +sg10 +(lp4605 +L344150883L +aL344150884L +aL344150885L +aL344150886L +aL344150887L +asg12 +(lp4606 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88512999999999997 +sS't' +F53635.138219599998 +ss(F309.38752299999999 +F0.33228799999999997 +F0.61633199999999999 +F0.77560899999999999 +I0 +tp4607 +(dp4608 +g4 +F0.33228799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.55083400000000005 +sS'm' +F22.933299999999999 +sg8 +F0.77560899999999999 +sg9 +F309.38752299999999 +sg10 +(lp4609 +L346171368L +aL346171369L +aL346171370L +aL346171371L +asg12 +(lp4610 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61633199999999999 +sS't' +F53704.073352300002 +ss(F309.37433199999998 +F0.326571 +F0.77900899999999995 +F0.82901100000000005 +I0 +tp4611 +(dp4612 +g4 +F0.326571 +sg5 +I0 +sg6 +I0 +sg7 +F0.042507200000000002 +sS'm' +F17.2059 +sg8 +F0.82901100000000005 +sg9 +F309.37433199999998 +sg10 +(lp4613 +L343275221L +aL343275222L +aL343275223L +aL343275224L +aL343275225L +aL343275226L +aL343275217L +aL343275218L +aL343275219L +aL343275220L +asg12 +(lp4614 +I4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.77900899999999995 +sS't' +F53302.108259100001 +ss(F309.36913199999998 +F0.345744 +F0.88505999999999996 +F1.1100300000000001 +I0 +tp4615 +(dp4616 +g4 +F0.345744 +sg5 +I0 +sg6 +I0 +sg7 +F0.406524 +sS'm' +F22.9892 +sg8 +F1.1100300000000001 +sg9 +F309.36913199999998 +sg10 +(lp4617 +L344151899L +aL344151900L +aL344151901L +aL344151902L +asg12 +(lp4618 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88505999999999996 +sS't' +F53635.139841199998 +ss(F309.37578600000001 +F0.34621499999999999 +F0.82840599999999998 +F0.94537300000000002 +I0 +tp4619 +(dp4620 +g4 +F0.34621499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.346752 +sS'm' +F22.615100000000002 +sg8 +F0.94537300000000002 +sg9 +F309.37578600000001 +sg10 +(lp4621 +L343127718L +aL343127719L +aL343127720L +aL343127721L +asg12 +(lp4622 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82840599999999998 +sS't' +F53288.113423499999 +ss(F309.38796000000002 +F0.342219 +F0.775115 +F0.75414199999999998 +I0 +tp4623 +(dp4624 +g4 +F0.342219 +sg5 +I0 +sg6 +I0 +sg7 +F0.48733599999999999 +sS'm' +F21.756599999999999 +sg8 +F0.75414199999999998 +sg9 +F309.38796000000002 +sg10 +(lp4625 +L342825824L +aL342825825L +aL342825826L +aL342825827L +asg12 +(lp4626 +I1 +aI2 +aI3 +aI4 +asg14 +F0.775115 +sS't' +F53243.2574532 +ss(F309.360071 +F0.32048500000000002 +F0.92100400000000004 +F1.1000099999999999 +I0 +tp4627 +(dp4628 +g4 +F0.32048500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.089224600000000001 +sS'm' +F19.593299999999999 +sg8 +F1.1000099999999999 +sg9 +F309.360071 +sg10 +(lp4629 +L345531759L +aL345531760L +aL345531761L +aL345531762L +aL345531763L +asg12 +(lp4630 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100400000000004 +sS't' +F53677.099718600002 +ss(F309.38272899999998 +F0.32577200000000001 +F0.41317199999999998 +F0.412188 +I0 +tp4631 +(dp4632 +g4 +F0.32577200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F5.80924 +sS'm' +F23.968599999999999 +sg8 +F0.412188 +sg9 +F309.38272899999998 +sg10 +(lp4633 +L346000993L +aL346000994L +aL346000995L +aL346000996L +aL346000997L +asg12 +(lp4634 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41317199999999998 +sS't' +F53703.093133499999 +ss(F309.38560100000001 +F0.326374 +F0.50688100000000003 +F0.459756 +I0 +tp4635 +(dp4636 +g4 +F0.326374 +sg5 +I0 +sg6 +I0 +sg7 +F1.42041 +sS'm' +F22.204499999999999 +sg8 +F0.459756 +sg9 +F309.38560100000001 +sg10 +(lp4637 +L153252860L +aL153252861L +aL153252862L +aL153252863L +aL153252864L +asg12 +(lp4638 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50688100000000003 +sS't' +F53702.084007899997 +ss(F309.36005599999999 +F0.32048900000000002 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp4639 +(dp4640 +g4 +F0.32048900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.085553799999999999 +sS'm' +F19.709199999999999 +sg8 +F1.0700000000000001 +sg9 +F309.36005599999999 +sg10 +(lp4641 +L345675473L +aL345675474L +aL345675475L +aL345675476L +aL345675477L +asg12 +(lp4642 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.0863837 +ss(F309.37293299999999 +F0.320994 +F0.86151299999999997 +F0.91530500000000004 +I0 +tp4643 +(dp4644 +g4 +F0.320994 +sg5 +I0 +sg6 +I0 +sg7 +F2.12053 +sS'm' +F22.891100000000002 +sg8 +F0.91530500000000004 +sg9 +F309.37293299999999 +sg10 +(lp4645 +L343882026L +aL343882027L +aL343882028L +aL343882029L +aL343882030L +asg12 +(lp4646 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86151299999999997 +sS't' +F53626.144948100002 +ss(F309.36492900000002 +F0.33456999999999998 +F0.249691 +F0.34953800000000002 +I0 +tp4647 +(dp4648 +g4 +F0.33456999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.09232 +sS'm' +F22.2179 +sg8 +F0.34953800000000002 +sg9 +F309.36492900000002 +sg10 +(lp4649 +L327906460L +aL327906461L +aL327906462L +aL327906463L +aL327906464L +asg12 +(lp4650 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.249691 +sS't' +F53312.062912200003 +ss(F309.36916100000002 +F0.34571800000000003 +F0.92409399999999997 +F1.0301400000000001 +I0 +tp4651 +(dp4652 +g4 +F0.34571800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.43608599999999997 +sS'm' +F22.9133 +sg8 +F1.0301400000000001 +sg9 +F309.36916100000002 +sg10 +(lp4653 +L345217349L +aL345217350L +aL345217351L +aL345217352L +asg12 +(lp4654 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92409399999999997 +sS't' +F53673.083480200003 +ss(F309.37093299999998 +F0.336953 +F0.74128000000000005 +F0.96043800000000001 +I0 +tp4655 +(dp4656 +g4 +F0.336953 +sg5 +I0 +sg6 +I0 +sg7 +F0.92645999999999995 +sS'm' +F24.009 +sg8 +F0.96043800000000001 +sg9 +F309.37093299999998 +sg10 +(lp4657 +L344485521L +aL344485522L +aL344485523L +aL344485524L +asg12 +(lp4658 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74128000000000005 +sS't' +F53644.125499100002 +ss(F309.38890600000002 +F0.343775 +F0.74901099999999998 +F0.97801099999999996 +I0 +tp4659 +(dp4660 +g4 +F0.343775 +sg5 +I0 +sg6 +I0 +sg7 +F0.026127000000000001 +sS'm' +F16.175899999999999 +sg8 +F0.97801099999999996 +sg9 +F309.38890600000002 +sg10 +(lp4661 +L171378419L +aL171378420L +aL171378421L +aL171378422L +aL171378423L +asg12 +(lp4662 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74901099999999998 +sS't' +F54005.107193000003 +ss(F309.36768699999999 +F0.32831100000000002 +F0.75190800000000002 +F0.97924999999999995 +I0 +tp4663 +(dp4664 +g4 +F0.32831100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.7511700000000001 +sS'm' +F23.933199999999999 +sg8 +F0.97924999999999995 +sg9 +F309.36768699999999 +sg10 +(lp4665 +L171384928L +aL171384929L +aL171384930L +aL171384931L +aL171384932L +asg12 +(lp4666 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.75190800000000002 +sS't' +F54005.107134099999 +ss(F309.36006500000002 +F0.32049100000000003 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp4667 +(dp4668 +g4 +F0.32049100000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.13084999999999999 +sS'm' +F19.6751 +sg8 +F0.82900499999999999 +sg9 +F309.36006500000002 +sg10 +(lp4669 +L343273187L +aL343273188L +aL343273189L +aL343273190L +aL343273191L +asg12 +(lp4670 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.107390199999 +ss(F309.36634900000001 +F0.34084300000000001 +F0.74900299999999997 +F0.97800600000000004 +I0 +tp4671 +(dp4672 +g4 +F0.34084300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.042949500000000002 +sS'm' +F18.357800000000001 +sg8 +F0.97800600000000004 +sg9 +F309.36634900000001 +sg10 +(lp4673 +L171377928L +aL171377929L +aL171377930L +aL171377931L +aL171377932L +asg12 +(lp4674 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.1071304 +ss(F309.36485399999998 +F0.33455800000000002 +F0.92466499999999996 +F1.03043 +I0 +tp4675 +(dp4676 +g4 +F0.33455800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.25988600000000001 +sS'm' +F22.341100000000001 +sg8 +F1.03043 +sg9 +F309.36485399999998 +sg10 +(lp4677 +L345223867L +aL345223868L +aL345223869L +aL345223870L +asg12 +(lp4678 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92466499999999996 +sS't' +F53673.083468299999 +ss(F309.38270799999998 +F0.33515499999999998 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp4679 +(dp4680 +g4 +F0.33515499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.073842599999999994 +sS'm' +F19.426300000000001 +sg8 +F1.0700000000000001 +sg9 +F309.38270799999998 +sg10 +(lp4681 +L345676140L +aL345676141L +aL345676142L +aL345676143L +aL345676144L +asg12 +(lp4682 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086446599998 +ss(F309.36811299999999 +F0.34612500000000002 +F0.77543799999999996 +F0.75415900000000002 +I0 +tp4683 +(dp4684 +g4 +F0.34612500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F6.5305 +sS'm' +F24.5808 +sg8 +F0.75415900000000002 +sg9 +F309.36811299999999 +sg10 +(lp4685 +L342832223L +aL342832224L +aL342832225L +aL342832226L +asg12 +(lp4686 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77543799999999996 +sS't' +F53243.257398000002 +ss(F309.37897600000002 +F0.32701400000000003 +F0.82802200000000004 +F0.945017 +I0 +tp4687 +(dp4688 +g4 +F0.32701400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.37913400000000003 +sS'm' +F21.3752 +sg8 +F0.945017 +sg9 +F309.37897600000002 +sg10 +(lp4689 +L343123312L +aL343123313L +aL343123314L +aL343123315L +aL343123316L +asg12 +(lp4690 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82802200000000004 +sS't' +F53288.111773899996 +ss(F309.36927200000002 +F0.31896799999999997 +F1.0100100000000001 +F0.95301400000000003 +I0 +tp4691 +(dp4692 +g4 +F0.31896799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.34946899999999997 +sS'm' +F21.084099999999999 +sg8 +F0.95301400000000003 +sg9 +F309.36927200000002 +sg10 +(lp4693 +L343711945L +aL343711946L +aL343711947L +aL343711948L +aL343711949L +asg12 +(lp4694 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.1587258 +ss(F309.37795499999999 +F0.337868 +F1.0100100000000001 +F0.953009 +I0 +tp4695 +(dp4696 +g4 +F0.337868 +sg5 +I0 +sg6 +I0 +sg7 +F0.059216100000000001 +sS'm' +F18.389500000000002 +sg8 +F0.953009 +sg9 +F309.37795499999999 +sg10 +(lp4697 +L343709472L +aL343709473L +aL343709474L +aL343709475L +aL343709476L +aL343709477L +aL343709478L +aL343709479L +aL343709480L +aL343709481L +asg12 +(lp4698 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158749900002 +ss(F309.36400700000002 +F0.31754100000000002 +F0.92101500000000003 +F1.10002 +I0 +tp4699 +(dp4700 +g4 +F0.31754100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.88126899999999997 +sS'm' +F22.585100000000001 +sg8 +F1.10002 +sg9 +F309.36400700000002 +sg10 +(lp4701 +L345539393L +aL345539394L +aL345539395L +aL345539396L +aL345539397L +asg12 +(lp4702 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92101500000000003 +sS't' +F53677.099729599999 +ss(F309.36853000000002 +F0.33941500000000002 +F1.0125900000000001 +F0.95714200000000005 +I0 +tp4703 +(dp4704 +g4 +F0.33941500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.66457900000000003 +sS'm' +F23.309999999999999 +sg8 +F0.95714200000000005 +sg9 +F309.36853000000002 +sg10 +(lp4705 +L343717311L +aL343717312L +aL343717313L +aL343717314L +asg12 +(lp4706 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0125900000000001 +sS't' +F53623.160382200003 +ss(F309.38199400000002 +F0.34300700000000001 +F0.41355500000000001 +F0.41267999999999999 +I0 +tp4707 +(dp4708 +g4 +F0.34300700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.18484800000000001 +sS'm' +F21.381599999999999 +sg8 +F0.41267999999999999 +sg9 +F309.38199400000002 +sg10 +(lp4709 +L345997989L +aL345997990L +aL345997991L +aL345997992L +asg12 +(lp4710 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41355500000000001 +sS't' +F53703.094789900002 +ss(F309.388102 +F0.33807300000000001 +F0.77690800000000004 +F0.75619099999999995 +I0 +tp4711 +(dp4712 +g4 +F0.33807300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.99513200000000002 +sS'm' +F22.536100000000001 +sg8 +F0.75619099999999995 +sg9 +F309.388102 +sg10 +(lp4713 +L342832426L +aL342832427L +aL342832428L +aL342832429L +asg12 +(lp4714 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77690800000000004 +sS't' +F53243.257453600003 +ss(F309.38620200000003 +F0.33886699999999997 +F0.82817399999999997 +F0.94525099999999995 +I0 +tp4715 +(dp4716 +g4 +F0.33886699999999997 +sg5 +I0 +sg6 +I0 +sg7 +F5.4976200000000004 +sS'm' +F23.7867 +sg8 +F0.94525099999999995 +sg9 +F309.38620200000003 +sg10 +(lp4717 +L343120654L +aL343120655L +aL343120656L +aL343120657L +aL343120658L +asg12 +(lp4718 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82817399999999997 +sS't' +F53288.111793999997 +ss(F309.37282299999998 +F0.33521200000000001 +F0.92100499999999996 +F1.1000099999999999 +I0 +tp4719 +(dp4720 +g4 +F0.33521200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.52493000000000001 +sS'm' +F21.994 +sg8 +F1.1000099999999999 +sg9 +F309.37282299999998 +sg10 +(lp4721 +L345535174L +aL345535175L +aL345535176L +aL345535177L +aL345535178L +asg12 +(lp4722 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100499999999996 +sS't' +F53677.099754100003 +ss(F309.36453599999999 +F0.32447999999999999 +F1.0100199999999999 +F0.99201499999999998 +I0 +tp4723 +(dp4724 +g4 +F0.32447999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.9617800000000001 +sS'm' +F23.100200000000001 +sg8 +F0.99201499999999998 +sg9 +F309.36453599999999 +sg10 +(lp4725 +L342965975L +aL342965976L +aL342965977L +aL342965978L +aL342965979L +asg12 +(lp4726 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100199999999999 +sS't' +F53270.1345564 +ss(F309.37455899999998 +F0.31691200000000003 +F0.98428099999999996 +F0.98835499999999998 +I0 +tp4727 +(dp4728 +g4 +F0.31691200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.1432899999999999 +sS'm' +F23.147400000000001 +sg8 +F0.98835499999999998 +sg9 +F309.37455899999998 +sg10 +(lp4729 +L346467799L +aL346467800L +aL346467801L +aL346467802L +aL346467803L +aL346467804L +aL346467805L +aL346467806L +aL346467807L +aL346467808L +asg12 +(lp4730 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98428099999999996 +sS't' +F54007.119902400002 +ss(F309.37578100000002 +F0.34608299999999997 +F0.86998600000000004 +F1.0382100000000001 +I0 +tp4731 +(dp4732 +g4 +F0.34608299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.69661899999999999 +sS'm' +F23.067 +sg8 +F1.0382100000000001 +sg9 +F309.37578100000002 +sg10 +(lp4733 +L345816389L +aL345816390L +aL345816391L +aL345816392L +asg12 +(lp4734 +I1 +aI2 +aI3 +aI4 +asg14 +F0.86998600000000004 +sS't' +F53693.0899919 +ss(F309.3777 +F0.34559600000000001 +F0.26211099999999998 +F0.35721900000000001 +I0 +tp4735 +(dp4736 +g4 +F0.34559600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.197625 +sS'm' +F20.5077 +sg8 +F0.35721900000000001 +sg9 +F309.3777 +sg10 +(lp4737 +L327908421L +aL327908422L +aL327908419L +aL327908420L +asg12 +(lp4738 +I3 +aI4 +aI1 +aI2 +asg14 +F0.26211099999999998 +sS't' +F53312.062118399997 +ss(F309.37454400000001 +F0.31695699999999999 +F1.0118100000000001 +F0.99358999999999997 +I0 +tp4739 +(dp4740 +g4 +F0.31695699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.18004100000000001 +sS'm' +F21.090900000000001 +sg8 +F0.99358999999999997 +sg9 +F309.37454400000001 +sg10 +(lp4741 +L342970471L +aL342970472L +aL342970468L +aL342970469L +aL342970470L +asg12 +(lp4742 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F1.0118100000000001 +sS't' +F53270.133754900002 +ss(F309.36636299999998 +F0.34082499999999999 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp4743 +(dp4744 +g4 +F0.34082499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.059149500000000001 +sS'm' +F18.382200000000001 +sg8 +F0.95301000000000002 +sg9 +F309.36636299999998 +sg10 +(lp4745 +L343709325L +aL343709326L +aL343709327L +aL343709328L +aL343709329L +asg12 +(lp4746 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158717699996 +ss(F309.38273900000002 +F0.32575199999999999 +F0.74101399999999995 +F0.96001199999999998 +I0 +tp4747 +(dp4748 +g4 +F0.32575199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.069794900000000007 +sS'm' +F20.986899999999999 +sg8 +F0.96001199999999998 +sg9 +F309.38273900000002 +sg10 +(lp4749 +L344479014L +aL344479015L +aL344479016L +aL344479017L +aL344479018L +aL344479019L +aL344479020L +aL344479021L +asg12 +(lp4750 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74101399999999995 +sS't' +F53644.125531899997 +ss(F309.36668100000003 +F0.33554400000000001 +F0.74449900000000002 +F0.96235000000000004 +I0 +tp4751 +(dp4752 +g4 +F0.33554400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.76492199999999999 +sS'm' +F23.793299999999999 +sg8 +F0.96235000000000004 +sg9 +F309.36668100000003 +sg10 +(lp4753 +L344485444L +aL344485445L +aL344485446L +aL344485447L +asg12 +(lp4754 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74449900000000002 +sS't' +F53644.1254873 +ss(F309.37309599999998 +F0.32444299999999998 +F0.92103500000000005 +F1.1000300000000001 +I0 +tp4755 +(dp4756 +g4 +F0.32444299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.263936 +sS'm' +F22.587800000000001 +sg8 +F1.1000300000000001 +sg9 +F309.37309599999998 +sg10 +(lp4757 +L345539588L +aL345539589L +aL345539590L +aL345539591L +asg12 +(lp4758 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92103500000000005 +sS't' +F53677.101413299999 +ss(F309.36632700000001 +F0.34082499999999999 +F0.413053 +F0.41204800000000003 +I0 +tp4759 +(dp4760 +g4 +F0.34082499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.018021200000000001 +sS'm' +F15.988 +sg8 +F0.41204800000000003 +sg9 +F309.36632700000001 +sg10 +(lp4761 +L345995941L +aL345995942L +aL345995938L +aL345995939L +aL345995940L +asg12 +(lp4762 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.413053 +sS't' +F53703.092258700002 +ss(F309.36927400000002 +F0.31897199999999998 +F0.86501399999999995 +F0.90001200000000003 +I0 +tp4763 +(dp4764 +g4 +F0.31897199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.40636699999999998 +sS'm' +F21.4008 +sg8 +F0.90001200000000003 +sg9 +F309.36927400000002 +sg10 +(lp4765 +L345811373L +aL345811374L +aL345811375L +aL345811376L +aL345811377L +asg12 +(lp4766 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86501399999999995 +sS't' +F53693.088315399997 +ss(F309.37794100000002 +F0.33784799999999998 +F0.74100500000000002 +F0.96000600000000003 +I0 +tp4767 +(dp4768 +g4 +F0.33784799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.0514248 +sS'm' +F18.334099999999999 +sg8 +F0.96000600000000003 +sg9 +F309.37794100000002 +sg10 +(lp4769 +L344475847L +aL344475848L +aL344475849L +aL344475850L +aL344475851L +aL344475852L +aL344475853L +aL344475854L +aL344475855L +aL344475856L +asg12 +(lp4770 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100500000000002 +sS't' +F53644.1238601 +ss(F309.38007099999999 +F0.34213399999999999 +F0.82801199999999997 +F0.94501000000000002 +I0 +tp4771 +(dp4772 +g4 +F0.34213399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.054974200000000001 +sS'm' +F18.615400000000001 +sg8 +F0.94501000000000002 +sg9 +F309.38007099999999 +sg10 +(lp4773 +L343120529L +aL343120530L +aL343120531L +aL343120532L +aL343120533L +asg12 +(lp4774 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801199999999997 +sS't' +F53288.111776999998 +ss(F309.36794800000001 +F0.34487499999999999 +F0.86541500000000005 +F0.90098 +I0 +tp4775 +(dp4776 +g4 +F0.34487499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.39818 +sS'm' +F23.374600000000001 +sg8 +F0.90098 +sg9 +F309.36794800000001 +sg10 +(lp4777 +L345814771L +aL345814772L +aL345814773L +aL345814774L +aL345814775L +asg12 +(lp4778 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86541500000000005 +sS't' +F53693.088311699998 +ss(F309.38261399999999 +F0.33968500000000001 +F0.85100299999999995 +F0.91300700000000001 +I0 +tp4779 +(dp4780 +g4 +F0.33968500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.017588900000000001 +sS'm' +F16.756799999999998 +sg8 +F0.91300700000000001 +sg9 +F309.38261399999999 +sg10 +(lp4781 +L343874313L +aL343874314L +aL343874315L +aL343874306L +aL343874307L +aL343874308L +aL343874309L +aL343874310L +aL343874311L +aL343874312L +asg12 +(lp4782 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.85100299999999995 +sS't' +F53626.143316399997 +ss(F309.37796500000002 +F0.33783600000000003 +F0.77900400000000003 +F0.82900600000000002 +I0 +tp4783 +(dp4784 +g4 +F0.33783600000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.019891499999999999 +sS'm' +F16.751000000000001 +sg8 +F0.82900600000000002 +sg9 +F309.37796500000002 +sg10 +(lp4785 +L343271554L +aL343271555L +aL343271556L +aL343271552L +aL343271553L +asg12 +(lp4786 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.77900400000000003 +sS't' +F53302.105781300001 +ss(F309.38811700000002 +F0.33807700000000002 +F0.85105699999999995 +F0.91304600000000002 +I0 +tp4787 +(dp4788 +g4 +F0.33807700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0227200000000001 +sS'm' +F22.974299999999999 +sg8 +F0.91304600000000002 +sg9 +F309.38811700000002 +sg10 +(lp4789 +L343880260L +aL343880261L +aL343880262L +aL343880263L +asg12 +(lp4790 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85105699999999995 +sS't' +F53626.1466487 +ss(F309.37794400000001 +F0.337866 +F0.24806400000000001 +F0.34804499999999999 +I0 +tp4791 +(dp4792 +g4 +F0.337866 +sg5 +I0 +sg6 +I0 +sg7 +F0.053483299999999998 +sS'm' +F18.433900000000001 +sg8 +F0.34804499999999999 +sg9 +F309.37794400000001 +sg10 +(lp4793 +L327902078L +aL327902079L +aL327902080L +aL327902081L +aL327902082L +asg12 +(lp4794 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24806400000000001 +sS't' +F53312.062948300001 +ss(F309.365996 +F0.33174199999999998 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp4795 +(dp4796 +g4 +F0.33174199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.192664 +sS'm' +F20.3599 +sg8 +F0.95301000000000002 +sg9 +F309.365996 +sg10 +(lp4797 +L343709276L +aL343709277L +aL343709278L +aL343709279L +aL343709280L +asg12 +(lp4798 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158716700003 +ss(F309.37240100000002 +F0.32414500000000002 +F0.64929099999999995 +F0.53932100000000005 +I0 +tp4799 +(dp4800 +g4 +F0.32414500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.56129099999999998 +sS'm' +F21.831900000000001 +sg8 +F0.53932100000000005 +sg9 +F309.37240100000002 +sg10 +(lp4801 +L112300726L +aL112300727L +aL112300728L +aL112300729L +asg12 +(lp4802 +I1 +aI2 +aI3 +aI4 +asg14 +F0.64929099999999995 +sS't' +F53656.1077439 +ss(F309.38807500000001 +F0.33817599999999998 +F0.42246899999999998 +F0.42574699999999999 +I0 +tp4803 +(dp4804 +g4 +F0.33817599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.59897299999999998 +sS'm' +F22.720199999999998 +sg8 +F0.42574699999999999 +sg9 +F309.38807500000001 +sg10 +(lp4805 +L346002903L +aL346002904L +aL346002905L +aL346002906L +asg12 +(lp4806 +I1 +aI2 +aI3 +aI4 +asg14 +F0.42246899999999998 +sS't' +F53703.0948068 +ss(F309.36006800000001 +F0.32050200000000001 +F0.47004600000000002 +F0.50304300000000002 +I0 +tp4807 +(dp4808 +g4 +F0.32050200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.031885499999999997 +sS'm' +F17.147200000000002 +sg8 +F0.50304300000000002 +sg9 +F309.36006800000001 +sg10 +(lp4809 +L12885175L +aL12885176L +aL12885177L +aL12885173L +aL12885174L +asg12 +(lp4810 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.47004600000000002 +sS't' +F53649.116800999996 +ss(F309.36979600000001 +F0.34464400000000001 +F0.88504400000000005 +F1.1100399999999999 +I0 +tp4811 +(dp4812 +g4 +F0.34464400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.522285 +sS'm' +F23.270600000000002 +sg8 +F1.1100399999999999 +sg9 +F309.36979600000001 +sg10 +(lp4813 +L344151895L +aL344151896L +aL344151897L +aL344151898L +asg12 +(lp4814 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88504400000000005 +sS't' +F53635.139843099998 +ss(F309.37795699999998 +F0.33786100000000002 +F0.47602100000000003 +F0.45402199999999998 +I0 +tp4815 +(dp4816 +g4 +F0.33786100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.056766900000000002 +sS'm' +F18.408999999999999 +sg8 +F0.45402199999999998 +sg9 +F309.37795699999998 +sg10 +(lp4817 +L344871314L +aL344871315L +aL344871316L +aL344871317L +aL344871318L +asg12 +(lp4818 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602100000000003 +sS't' +F53668.109011400004 +ss(F309.37897600000002 +F0.32702199999999998 +F0.74101399999999995 +F0.96001400000000003 +I0 +tp4819 +(dp4820 +g4 +F0.32702199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.25988899999999998 +sS'm' +F21.277200000000001 +sg8 +F0.96001400000000003 +sg9 +F309.37897600000002 +sg10 +(lp4821 +L344478934L +aL344478935L +aL344478936L +aL344478937L +aL344478938L +asg12 +(lp4822 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74101399999999995 +sS't' +F53644.123863000001 +ss(F309.36774300000002 +F0.33363999999999999 +F0.92435299999999998 +F1.0303800000000001 +I0 +tp4823 +(dp4824 +g4 +F0.33363999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.2116099999999999 +sS'm' +F23.447500000000002 +sg8 +F1.0303800000000001 +sg9 +F309.36774300000002 +sg10 +(lp4825 +L345225904L +aL345225905L +aL345225906L +aL345225907L +aL345225908L +asg12 +(lp4826 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92435299999999998 +sS't' +F53673.081817899998 +ss(F309.36600099999998 +F0.331733 +F0.77501799999999998 +F0.75402999999999998 +I0 +tp4827 +(dp4828 +g4 +F0.331733 +sg5 +I0 +sg6 +I0 +sg7 +F0.31612699999999999 +sS'm' +F20.486799999999999 +sg8 +F0.75402999999999998 +sg9 +F309.36600099999998 +sg10 +(lp4829 +L342827332L +aL342827333L +aL342827334L +aL342827335L +aL342827336L +asg12 +(lp4830 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501799999999998 +sS't' +F53243.255733700003 +ss(F309.36140499999999 +F0.31852000000000003 +F0.88530299999999995 +F1.1101799999999999 +I0 +tp4831 +(dp4832 +g4 +F0.31852000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.79300000000000004 +sS'm' +F22.652999999999999 +sg8 +F1.1101799999999999 +sg9 +F309.36140499999999 +sg10 +(lp4833 +L344147755L +aL344147756L +aL344147757L +aL344147758L +aL344147759L +asg12 +(lp4834 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88530299999999995 +sS't' +F53635.138161299998 +ss(F309.38563299999998 +F0.326372 +F0.88502400000000003 +F1.11002 +I0 +tp4835 +(dp4836 +g4 +F0.326372 +sg5 +I0 +sg6 +I0 +sg7 +F1.02885 +sS'm' +F22.9405 +sg8 +F1.11002 +sg9 +F309.38563299999998 +sg10 +(lp4837 +L344153276L +aL344153277L +aL344153278L +aL344153279L +aL344153280L +asg12 +(lp4838 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88502400000000003 +sS't' +F53635.138228600001 +ss(F309.38529 +F0.33197300000000002 +F1.0800399999999999 +F1.0100199999999999 +I0 +tp4839 +(dp4840 +g4 +F0.33197300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.95331100000000002 +sS'm' +F22.682600000000001 +sg8 +F1.0100199999999999 +sg9 +F309.38529 +sg10 +(lp4841 +L345367522L +aL345367523L +aL345367524L +aL345367525L +aL345367526L +asg12 +(lp4842 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800399999999999 +sS't' +F53675.078756000003 +ss(F309.36311499999999 +F0.33105699999999999 +F1.0100100000000001 +F0.953009 +I0 +tp4843 +(dp4844 +g4 +F0.33105699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.071159200000000006 +sS'm' +F18.843599999999999 +sg8 +F0.953009 +sg9 +F309.36311499999999 +sg10 +(lp4845 +L343709261L +aL343709262L +aL343709263L +aL343709264L +aL343709265L +aL343709266L +aL343709267L +aL343709268L +aL343709269L +aL343709270L +asg12 +(lp4846 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158708700001 +ss(F309.382722 +F0.33516200000000002 +F0.92400899999999997 +F1.0300100000000001 +I0 +tp4847 +(dp4848 +g4 +F0.33516200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.084872199999999995 +sS'm' +F19.489000000000001 +sg8 +F1.0300100000000001 +sg9 +F309.382722 +sg10 +(lp4849 +L345220224L +aL345220225L +aL345220226L +aL345220227L +aL345220228L +asg12 +(lp4850 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400899999999997 +sS't' +F53673.081859500002 +ss(F309.365047 +F0.33012200000000003 +F0.98400500000000002 +F0.98800500000000002 +I0 +tp4851 +(dp4852 +g4 +F0.33012200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.31032700000000002 +sS'm' +F21.198799999999999 +sg8 +F0.98800500000000002 +sg9 +F309.365047 +sg10 +(lp4853 +L346459197L +aL346459198L +aL346459199L +aL346459200L +aL346459201L +asg12 +(lp4854 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.119875999997 +ss(F309.38753000000003 +F0.33271600000000001 +F0.92438699999999996 +F1.0303500000000001 +I0 +tp4855 +(dp4856 +g4 +F0.33271600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F7.1453899999999999 +sS'm' +F24.721800000000002 +sg8 +F1.0303500000000001 +sg9 +F309.38753000000003 +sg10 +(lp4857 +L345222038L +aL345222039L +aL345222040L +aL345222041L +aL345222042L +asg12 +(lp4858 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92438699999999996 +sS't' +F53673.081872800001 +ss(F309.38649900000001 +F0.32196900000000001 +F0.82803300000000002 +F0.94502600000000003 +I0 +tp4859 +(dp4860 +g4 +F0.32196900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.63467899999999999 +sS'm' +F21.964099999999998 +sg8 +F0.94502600000000003 +sg9 +F309.38649900000001 +sg10 +(lp4861 +L343127843L +aL343127844L +aL343127845L +aL343127846L +aL343127847L +asg12 +(lp4862 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82803300000000002 +sS't' +F53288.111794800003 +ss(F309.36776800000001 +F0.333619 +F0.98456900000000003 +F0.98821000000000003 +I0 +tp4863 +(dp4864 +g4 +F0.333619 +sg5 +I0 +sg6 +I0 +sg7 +F4.6245700000000003 +sS'm' +F24.2242 +sg8 +F0.98821000000000003 +sg9 +F309.36776800000001 +sg10 +(lp4865 +L346467699L +aL346467700L +aL346467701L +aL346467702L +aL346467703L +asg12 +(lp4866 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98456900000000003 +sS't' +F54007.119883599997 +ss(F309.38201600000002 +F0.342976 +F0.88502400000000003 +F1.1100099999999999 +I0 +tp4867 +(dp4868 +g4 +F0.342976 +sg5 +I0 +sg6 +I0 +sg7 +F0.791601 +sS'm' +F22.637499999999999 +sg8 +F1.1100099999999999 +sg9 +F309.38201600000002 +sg10 +(lp4869 +L344144479L +aL344144480L +aL344144481L +aL344144482L +aL344144483L +asg12 +(lp4870 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88502400000000003 +sS't' +F53635.138218599997 +ss(F309.37303500000002 +F0.32020900000000002 +F0.92664500000000005 +F1.0314700000000001 +I0 +tp4871 +(dp4872 +g4 +F0.32020900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F7.0028699999999997 +sS'm' +F24.7074 +sg8 +F1.0314700000000001 +sg9 +F309.37303500000002 +sg10 +(lp4873 +L345225963L +aL345225964L +aL345225965L +aL345225966L +aL345225967L +asg12 +(lp4874 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92664500000000005 +sS't' +F53673.081832600001 +ss(F309.36776400000002 +F0.33362799999999998 +F0.85126599999999997 +F0.913439 +I0 +tp4875 +(dp4876 +g4 +F0.33362799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.6456599999999999 +sS'm' +F23.4969 +sg8 +F0.913439 +sg9 +F309.36776400000002 +sg10 +(lp4877 +L343881886L +aL343881887L +aL343881888L +aL343881889L +asg12 +(lp4878 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85126599999999997 +sS't' +F53626.146592199999 +ss(F309.37899099999998 +F0.32703900000000002 +F0.61602800000000002 +F0.77503100000000003 +I0 +tp4879 +(dp4880 +g4 +F0.32703900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.44004900000000002 +sS'm' +F21.250699999999998 +sg8 +F0.77503100000000003 +sg9 +F309.37899099999998 +sg10 +(lp4881 +L346171689L +aL346171690L +aL346171691L +aL346171692L +aL346171693L +asg12 +(lp4882 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61602800000000002 +sS't' +F53704.071670199999 +ss(F309.38748900000002 +F0.33274399999999998 +F0.88510500000000003 +F1.1100699999999999 +I0 +tp4883 +(dp4884 +g4 +F0.33274399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.0927500000000001 +sS'm' +F23.005800000000001 +sg8 +F1.1100699999999999 +sg9 +F309.38748900000002 +sg10 +(lp4885 +L344150907L +aL344150908L +aL344150909L +aL344150910L +aL344150911L +asg12 +(lp4886 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88510500000000003 +sS't' +F53635.138233799997 +ss(F309.377725 +F0.32558799999999999 +F0.93304299999999996 +F0.87804700000000002 +I0 +tp4887 +(dp4888 +g4 +F0.32558799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.15199399999999999 +sS'm' +F21.682600000000001 +sg8 +F0.87804700000000002 +sg9 +F309.377725 +sg10 +(lp4889 +L345027311L +aL345027312L +aL345027313L +aL345027314L +asg12 +(lp4890 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93304299999999996 +sS't' +F53670.115523100001 +ss(F309.38366200000002 +F0.34500500000000001 +F0.470389 +F0.50331000000000004 +I0 +tp4891 +(dp4892 +g4 +F0.34500500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.0185 +sS'm' +F21.8263 +sg8 +F0.50331000000000004 +sg9 +F309.38366200000002 +sg10 +(lp4893 +L12887264L +aL12887265L +aL12887266L +aL12887267L +aL12887268L +asg12 +(lp4894 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.470389 +sS't' +F53649.118525099999 +ss(F309.36527899999999 +F0.337283 +F0.92108900000000005 +F1.1000700000000001 +I0 +tp4895 +(dp4896 +g4 +F0.337283 +sg5 +I0 +sg6 +I0 +sg7 +F0.21215800000000001 +sS'm' +F22.4238 +sg8 +F1.1000700000000001 +sg9 +F309.36527899999999 +sg10 +(lp4897 +L345539416L +aL345539417L +aL345539418L +aL345539419L +asg12 +(lp4898 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92108900000000005 +sS't' +F53677.1013915 +ss(F309.38935700000002 +F0.32215199999999999 +F0.41348099999999999 +F0.41249999999999998 +I0 +tp4899 +(dp4900 +g4 +F0.32215199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.37272100000000002 +sS'm' +F22.198899999999998 +sg8 +F0.41249999999999998 +sg9 +F309.38935700000002 +sg10 +(lp4901 +L346001109L +aL346001110L +aL346001111L +aL346001112L +asg12 +(lp4902 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41348099999999999 +sS't' +F53703.094810399998 +ss(F309.38623100000001 +F0.33893299999999998 +F1.0801000000000001 +F1.0100899999999999 +I0 +tp4903 +(dp4904 +g4 +F0.33893299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.03457 +sS'm' +F22.770900000000001 +sg8 +F1.0100899999999999 +sg9 +F309.38623100000001 +sg10 +(lp4905 +L345368286L +aL345368287L +aL345368288L +aL345368289L +aL345368290L +asg12 +(lp4906 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0801000000000001 +sS't' +F53675.078758600001 +ss(F309.38648699999999 +F0.32198700000000002 +F0.50633799999999995 +F0.459339 +I0 +tp4907 +(dp4908 +g4 +F0.32198700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.3589100000000001 +sS'm' +F22.156400000000001 +sg8 +F0.459339 +sg9 +F309.38648699999999 +sg10 +(lp4909 +L153252870L +aL153252871L +aL153252872L +aL153252873L +aL153252874L +aL153252875L +aL153252876L +aL153252877L +aL153252878L +aL153252879L +asg12 +(lp4910 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50633799999999995 +sS't' +F53702.084010400002 +ss(F309.366826 +F0.33565 +F0.249385 +F0.34989599999999998 +I0 +tp4911 +(dp4912 +g4 +F0.33565 +sg5 +I0 +sg6 +I0 +sg7 +F1.65602 +sS'm' +F22.674700000000001 +sg8 +F0.34989599999999998 +sg9 +F309.366826 +sg10 +(lp4913 +L327906455L +aL327906456L +aL327906457L +aL327906458L +aL327906459L +asg12 +(lp4914 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.249385 +sS't' +F53312.062917499999 +ss(F309.36148900000001 +F0.31850699999999998 +F0.98428800000000005 +F0.98843800000000004 +I0 +tp4915 +(dp4916 +g4 +F0.31850699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.5407799999999998 +sS'm' +F23.579999999999998 +sg8 +F0.98843800000000004 +sg9 +F309.36148900000001 +sg10 +(lp4917 +L346461761L +aL346461762L +aL346461763L +aL346461764L +aL346461765L +asg12 +(lp4918 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98428800000000005 +sS't' +F54007.119866100002 +ss(F309.38542000000001 +F0.34015800000000002 +F0.77520299999999998 +F0.75428300000000004 +I0 +tp4919 +(dp4920 +g4 +F0.34015800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.29184900000000003 +sS'm' +F21.1922 +sg8 +F0.75428300000000004 +sg9 +F309.38542000000001 +sg10 +(lp4921 +L342830507L +aL342830508L +aL342830509L +aL342830510L +aL342830506L +asg12 +(lp4922 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.77520299999999998 +sS't' +F53243.257446099997 +ss(F309.38272999999998 +F0.32577299999999998 +F0.41317300000000001 +F0.41218399999999999 +I0 +tp4923 +(dp4924 +g4 +F0.32577299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F5.9405000000000001 +sS'm' +F23.992999999999999 +sg8 +F0.41218399999999999 +sg9 +F309.38272999999998 +sg10 +(lp4925 +L346000998L +aL346000999L +aL346001000L +aL346001001L +aL346001002L +asg12 +(lp4926 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41317300000000001 +sS't' +F53703.093133499999 +ss(F309.38887999999997 +F0.34375099999999997 +F0.88501099999999999 +F1.1100099999999999 +I0 +tp4927 +(dp4928 +g4 +F0.34375099999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.032846899999999998 +sS'm' +F16.1661 +sg8 +F1.1100099999999999 +sg9 +F309.38887999999997 +sg10 +(lp4929 +L344144675L +aL344144676L +aL344144677L +aL344144678L +aL344144679L +aL344144680L +aL344144681L +aL344144682L +aL344144683L +aL344144684L +asg12 +(lp4930 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88501099999999999 +sS't' +F53635.138237599997 +ss(F309.38564500000001 +F0.32636599999999999 +F0.775447 +F0.75440700000000005 +I0 +tp4931 +(dp4932 +g4 +F0.32636599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.63469699999999996 +sS'm' +F22.045100000000001 +sg8 +F0.75440700000000005 +sg9 +F309.38564500000001 +sg10 +(lp4933 +L342832396L +aL342832397L +aL342832398L +aL342832399L +asg12 +(lp4934 +I1 +aI2 +aI3 +aI4 +asg14 +F0.775447 +sS't' +F53243.257446700001 +ss(F309.38202899999999 +F0.342972 +F0.77908299999999997 +F0.82906999999999997 +I0 +tp4935 +(dp4936 +g4 +F0.342972 +sg5 +I0 +sg6 +I0 +sg7 +F1.32016 +sS'm' +F22.331600000000002 +sg8 +F0.82906999999999997 +sg9 +F309.38202899999999 +sg10 +(lp4937 +L343277249L +aL343277250L +aL343277251L +aL343277252L +aL343277253L +asg12 +(lp4938 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77908299999999997 +sS't' +F53302.107451199998 +ss(F309.382386 +F0.32452399999999998 +F1.05019 +F0.94414200000000004 +I0 +tp4939 +(dp4940 +g4 +F0.32452399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F5.3377299999999996 +sS'm' +F24.281700000000001 +sg8 +F0.94414200000000004 +sg9 +F309.382386 +sg10 +(lp4941 +L346332302L +aL346332303L +aL346332304L +aL346332305L +aL346332306L +asg12 +(lp4942 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05019 +sS't' +F53974.159599099999 +ss(F309.38772599999999 +F0.32190000000000002 +F1.08056 +F1.0107699999999999 +I0 +tp4943 +(dp4944 +g4 +F0.32190000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.24911800000000001 +sS'm' +F21.493200000000002 +sg8 +F1.0107699999999999 +sg9 +F309.38772599999999 +sg10 +(lp4945 +L345370483L +aL345370484L +aL345370481L +aL345370482L +asg12 +(lp4946 +I3 +aI4 +aI1 +aI2 +asg14 +F1.08056 +sS't' +F53675.077933400004 +ss(F309.382631 +F0.33971000000000001 +F0.61601700000000004 +F0.77501900000000001 +I0 +tp4947 +(dp4948 +g4 +F0.33971000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.066087099999999996 +sS'm' +F18.692799999999998 +sg8 +F0.77501900000000001 +sg9 +F309.382631 +sg10 +(lp4949 +L346166330L +aL346166331L +aL346166332L +aL346166333L +aL346166334L +asg12 +(lp4950 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601700000000004 +sS't' +F53704.071680300003 +ss(F309.36309299999999 +F0.33107599999999998 +F0.41302499999999998 +F0.41203400000000001 +I0 +tp4951 +(dp4952 +g4 +F0.33107599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.076068700000000003 +sS'm' +F18.8598 +sg8 +F0.41203400000000001 +sg9 +F309.36309299999999 +sg10 +(lp4953 +L345997763L +aL345997764L +aL345997765L +aL345997766L +aL345997767L +aL345997768L +aL345997769L +aL345997770L +aL345997771L +aL345997772L +asg12 +(lp4954 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41302499999999998 +sS't' +F53703.093078999998 +ss(F309.38651399999998 +F0.32197599999999998 +F0.98402000000000001 +F0.98801899999999998 +I0 +tp4955 +(dp4956 +g4 +F0.32197599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.0160199999999999 +sS'm' +F22.5474 +sg8 +F0.98801899999999998 +sg9 +F309.38651399999998 +sg10 +(lp4957 +L346466092L +aL346466093L +aL346466094L +aL346466095L +aL346466096L +asg12 +(lp4958 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98402000000000001 +sS't' +F54007.1199357 +ss(F309.37235299999998 +F0.324156 +F0.47726600000000002 +F0.454845 +I0 +tp4959 +(dp4960 +g4 +F0.324156 +sg5 +I0 +sg6 +I0 +sg7 +F7.17753 +sS'm' +F24.364000000000001 +sg8 +F0.454845 +sg9 +F309.37235299999998 +sg10 +(lp4961 +L344876164L +aL344876165L +aL344876166L +aL344876167L +aL344876168L +asg12 +(lp4962 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47726600000000002 +sS't' +F53668.108995800001 +ss(F309.37656399999997 +F0.34477600000000003 +F1.0906899999999999 +F1.0704899999999999 +I0 +tp4963 +(dp4964 +g4 +F0.34477600000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.71954700000000005 +sS'm' +F23.326699999999999 +sg8 +F1.0704899999999999 +sg9 +F309.37656399999997 +sg10 +(lp4965 +L345683918L +aL345683919L +aL345683920L +asg12 +(lp4966 +I2 +aI3 +aI4 +asg14 +F1.0906899999999999 +sS't' +F53680.084771000002 +ss(F309.36006200000003 +F0.320494 +F0.93300700000000003 +F0.87800800000000001 +I0 +tp4967 +(dp4968 +g4 +F0.320494 +sg5 +I0 +sg6 +I0 +sg7 +F0.095338900000000004 +sS'm' +F19.6723 +sg8 +F0.87800800000000001 +sg9 +F309.36006200000003 +sg10 +(lp4969 +L345026944L +aL345026945L +aL345026946L +aL345026947L +aL345026948L +aL345026949L +aL345026950L +aL345026951L +aL345026952L +aL345026953L +asg12 +(lp4970 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.113815600002 +ss(F309.37233600000002 +F0.324129 +F0.77562799999999998 +F0.75433099999999997 +I0 +tp4971 +(dp4972 +g4 +F0.324129 +sg5 +I0 +sg6 +I0 +sg7 +F2.0467300000000002 +sS'm' +F23.2561 +sg8 +F0.75433099999999997 +sg9 +F309.37233600000002 +sg10 +(lp4973 +L342832259L +aL342832260L +aL342832261L +aL342832262L +aL342832258L +asg12 +(lp4974 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.77562799999999998 +sS't' +F53243.257409799997 +ss(F309.38101699999999 +F0.33924100000000001 +F0.78097899999999998 +F0.82963299999999995 +I0 +tp4975 +(dp4976 +g4 +F0.33924100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.9157999999999999 +sS'm' +F24.065100000000001 +sg8 +F0.82963299999999995 +sg9 +F309.38101699999999 +sg10 +(lp4977 +L343271650L +aL343271651L +aL343271652L +aL343271653L +asg12 +(lp4978 +I1 +aI2 +aI3 +aI4 +asg14 +F0.78097899999999998 +sS't' +F53302.109106800002 +ss(F309.36979300000002 +F0.34465099999999999 +F0.98409999999999997 +F0.98804800000000004 +I0 +tp4979 +(dp4980 +g4 +F0.34465099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.53635699999999997 +sS'm' +F23.014099999999999 +sg8 +F0.98804800000000004 +sg9 +F309.36979300000002 +sg10 +(lp4981 +L346459242L +aL346459243L +aL346459244L +aL346459245L +asg12 +(lp4982 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98409999999999997 +sS't' +F54007.121547700001 +ss(F309.37237099999999 +F0.32414999999999999 +F0.92421399999999998 +F1.0301400000000001 +I0 +tp4983 +(dp4984 +g4 +F0.32414999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.339671 +sS'm' +F22.620100000000001 +sg8 +F1.0301400000000001 +sg9 +F309.37237099999999 +sg10 +(lp4985 +L345223988L +aL345223989L +aL345223990L +aL345223991L +asg12 +(lp4986 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92421399999999998 +sS't' +F53673.083489199998 +ss(F309.36307299999999 +F0.322772 +F0.83047099999999996 +F0.94704100000000002 +I0 +tp4987 +(dp4988 +g4 +F0.322772 +sg5 +I0 +sg6 +I0 +sg7 +F0.75994099999999998 +sS'm' +F23.490400000000001 +sg8 +F0.94704100000000002 +sg9 +F309.36307299999999 +sg10 +(lp4989 +L343129931L +aL343129932L +aL343129933L +aL343129934L +asg12 +(lp4990 +I1 +aI2 +aI3 +aI4 +asg14 +F0.83047099999999996 +sS't' +F53288.113388199999 +ss(F309.36744399999998 +F0.32938600000000001 +F0.92408299999999999 +F1.03007 +I0 +tp4991 +(dp4992 +g4 +F0.32938600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.37382300000000002 +sS'm' +F22.7515 +sg8 +F1.03007 +sg9 +F309.36744399999998 +sg10 +(lp4993 +L345223887L +aL345223888L +aL345223889L +aL345223890L +aL345223891L +aL345223892L +aL345223893L +aL345223894L +asg12 +(lp4994 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92408299999999999 +sS't' +F53673.083475500003 +ss(F309.365228 +F0.33738400000000002 +F0.86529900000000004 +F0.900227 +I0 +tp4995 +(dp4996 +g4 +F0.33738400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.44874900000000001 +sS'm' +F22.5852 +sg8 +F0.900227 +sg9 +F309.365228 +sg10 +(lp4997 +L345814725L +aL345814726L +aL345814727L +asg12 +(lp4998 +I1 +aI2 +aI3 +asg14 +F0.86529900000000004 +sS't' +F53693.089962600003 +ss(F309.360071 +F0.32048199999999999 +F1.0500100000000001 +F0.94401299999999999 +I0 +tp4999 +(dp5000 +g4 +F0.32048199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.10623100000000001 +sS'm' +F19.656600000000001 +sg8 +F0.94401299999999999 +sg9 +F309.360071 +sg10 +(lp5001 +L346331747L +aL346331748L +aL346331749L +aL346331750L +aL346331751L +asg12 +(lp5002 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159537200001 +ss(F309.37796900000001 +F0.33786300000000002 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp5003 +(dp5004 +g4 +F0.33786300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.055551799999999998 +sS'm' +F18.403400000000001 +sg8 +F1.0100100000000001 +sg9 +F309.37796900000001 +sg10 +(lp5005 +L345363683L +aL345363684L +aL345363685L +aL345363686L +aL345363687L +asg12 +(lp5006 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.0787356 +ss(F309.367751 +F0.33363199999999998 +F0.86550800000000006 +F0.90047500000000003 +I0 +tp5007 +(dp5008 +g4 +F0.33363199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.4669000000000001 +sS'm' +F23.886800000000001 +sg8 +F0.90047500000000003 +sg9 +F309.367751 +sg10 +(lp5009 +L345816307L +aL345816308L +aL345816309L +aL345816310L +asg12 +(lp5010 +I1 +aI2 +aI3 +aI4 +asg14 +F0.86550800000000006 +sS't' +F53693.089969599998 +ss(F309.36987399999998 +F0.33445399999999997 +F0.28576099999999999 +F0.37439 +I0 +tp5011 +(dp5012 +g4 +F0.33445399999999997 +sg5 +I0 +sg6 +I0 +sg7 +F3.5867900000000001 +sS'm' +F24.742100000000001 +sg8 +F0.37439 +sg9 +F309.36987399999998 +sg10 +(lp5013 +L327908376L +aL327908377L +aL327908378L +aL327908379L +asg12 +(lp5014 +I1 +aI2 +aI3 +aI4 +asg14 +F0.28576099999999999 +sS't' +F53312.064584400003 +ss(F309.38793900000002 +F0.34221200000000002 +F0.828017 +F0.94501500000000005 +I0 +tp5015 +(dp5016 +g4 +F0.34221200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.72773500000000002 +sS'm' +F22.091200000000001 +sg8 +F0.94501500000000005 +sg9 +F309.38793900000002 +sg10 +(lp5017 +L343120738L +aL343120739L +aL343120740L +aL343120741L +aL343120742L +asg12 +(lp5018 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828017 +sS't' +F53288.111798799997 +ss(F309.38201700000002 +F0.34297100000000003 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp5019 +(dp5020 +g4 +F0.34297100000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.42949399999999999 +sS'm' +F21.9194 +sg8 +F1.0700099999999999 +sg9 +F309.38201700000002 +sg10 +(lp5021 +L345676050L +aL345676051L +aL345676052L +aL345676053L +aL345676054L +asg12 +(lp5022 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900099999999999 +sS't' +F53680.086444699999 +ss(F309.38271900000001 +F0.33517400000000003 +F0.61601600000000001 +F0.77502099999999996 +I0 +tp5023 +(dp5024 +g4 +F0.33517400000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.098370799999999994 +sS'm' +F19.373899999999999 +sg8 +F0.77502099999999996 +sg9 +F309.38271900000001 +sg10 +(lp5025 +L346168373L +aL346168374L +aL346168375L +aL346168376L +aL346168377L +asg12 +(lp5026 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601600000000001 +sS't' +F53704.071680499997 +ss(F309.36520899999999 +F0.33728200000000003 +F0.74111800000000005 +F0.96016000000000001 +I0 +tp5027 +(dp5028 +g4 +F0.33728200000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.29384500000000002 +sS'm' +F22.722100000000001 +sg8 +F0.96016000000000001 +sg9 +F309.36520899999999 +sg10 +(lp5029 +L344482779L +aL344482780L +aL344482781L +aL344482782L +asg12 +(lp5030 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74111800000000005 +sS't' +F53644.125483199998 +ss(F309.36402199999998 +F0.31757000000000002 +F1.08002 +F1.0100199999999999 +I0 +tp5031 +(dp5032 +g4 +F0.31757000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.95106400000000002 +sS'm' +F22.6843 +sg8 +F1.0100199999999999 +sg9 +F309.36402199999998 +sg10 +(lp5033 +L345366042L +aL345366043L +aL345366044L +aL345366045L +aL345366046L +asg12 +(lp5034 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08002 +sS't' +F53675.078696899996 +ss(F309.389342 +F0.32214999999999999 +F0.74104999999999999 +F0.960059 +I0 +tp5035 +(dp5036 +g4 +F0.32214999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.20899899999999999 +sS'm' +F22.3447 +sg8 +F0.960059 +sg9 +F309.389342 +sg10 +(lp5037 +L344482145L +aL344482146L +aL344482147L +aL344482148L +asg12 +(lp5038 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74104999999999999 +sS't' +F53644.125550199999 +ss(F309.36148100000003 +F0.31853399999999998 +F1.0901099999999999 +F1.0701499999999999 +I0 +tp5039 +(dp5040 +g4 +F0.31853399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.30875799999999998 +sS'm' +F22.798100000000002 +sg8 +F1.0701499999999999 +sg9 +F309.36148100000003 +sg10 +(lp5041 +L345675497L +aL345675498L +aL345675499L +aL345675500L +asg12 +(lp5042 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0901099999999999 +sS't' +F53680.088046099998 +ss(F309.36743799999999 +F0.32936500000000002 +F0.88503500000000002 +F1.1100300000000001 +I0 +tp5043 +(dp5044 +g4 +F0.32936500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.4928100000000004 +sS'm' +F24.053899999999999 +sg8 +F1.1100300000000001 +sg9 +F309.36743799999999 +sg10 +(lp5045 +L344151872L +aL344151873L +aL344151874L +aL344151875L +aL344151876L +aL344151877L +aL344151878L +aL344151879L +aL344151880L +aL344151881L +asg12 +(lp5046 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88503500000000002 +sS't' +F53635.138178100002 +ss(F309.38274999999999 +F0.32576500000000003 +F0.50628099999999998 +F0.45931499999999997 +I0 +tp5047 +(dp5048 +g4 +F0.32576500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F4.2298600000000004 +sS'm' +F23.396799999999999 +sg8 +F0.45931499999999997 +sg9 +F309.38274999999999 +sg10 +(lp5049 +L153252816L +aL153252817L +aL153252818L +aL153252819L +aL153252820L +asg12 +(lp5050 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50628099999999998 +sS't' +F53702.084000000003 +ss(F309.367457 +F0.32938899999999999 +F0.74904199999999999 +F0.97802599999999995 +I0 +tp5051 +(dp5052 +g4 +F0.32938899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.25157499999999999 +sS'm' +F22.629899999999999 +sg8 +F0.97802599999999995 +sg9 +F309.367457 +sg10 +(lp5053 +L171384919L +aL171384920L +aL171384921L +aL171384922L +asg12 +(lp5054 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74904199999999999 +sS't' +F54005.108791899998 +ss(F309.382024 +F0.34300599999999998 +F1.01003 +F0.95303800000000005 +I0 +tp5055 +(dp5056 +g4 +F0.34300599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.85332399999999997 +sS'm' +F22.097000000000001 +sg8 +F0.95303800000000005 +sg9 +F309.382024 +sg10 +(lp5057 +L343709500L +aL343709501L +aL343709502L +aL343709503L +aL343709504L +asg12 +(lp5058 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01003 +sS't' +F53623.1587612 +ss(F309.38529799999998 +F0.33196999999999999 +F0.74901899999999999 +F0.97801899999999997 +I0 +tp5059 +(dp5060 +g4 +F0.33196999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.68198700000000001 +sS'm' +F22.377700000000001 +sg8 +F0.97801899999999997 +sg9 +F309.38529799999998 +sg10 +(lp5061 +L171384142L +aL171384143L +aL171384144L +aL171384145L +aL171384146L +aL171384147L +aL171384148L +aL171384149L +aL171384150L +aL171384151L +asg12 +(lp5062 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74901899999999999 +sS't' +F54005.107183 +ss(F309.38216499999999 +F0.32173099999999999 +F0.82801100000000005 +F0.94501000000000002 +I0 +tp5063 +(dp5064 +g4 +F0.32173099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.23477999999999999 +sS'm' +F20.8108 +sg8 +F0.94501000000000002 +sg9 +F309.38216499999999 +sg10 +(lp5065 +L343123374L +aL343123375L +aL343123376L +aL343123377L +aL343123378L +asg12 +(lp5066 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801100000000005 +sS't' +F53288.111782799999 +ss(F309.37305400000002 +F0.32023299999999999 +F0.86969799999999997 +F0.90361400000000003 +I0 +tp5067 +(dp5068 +g4 +F0.32023299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.2147700000000001 +sS'm' +F23.703800000000001 +sg8 +F0.90361400000000003 +sg9 +F309.37305400000002 +sg10 +(lp5069 +L345816348L +aL345816349L +aL345816350L +aL345816351L +aL345816352L +asg12 +(lp5070 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86969799999999997 +sS't' +F53693.088325899997 +ss(F309.36451099999999 +F0.32446000000000003 +F0.82801899999999995 +F0.94501400000000002 +I0 +tp5071 +(dp5072 +g4 +F0.32446000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.44398 +sS'm' +F22.876200000000001 +sg8 +F0.94501400000000002 +sg9 +F309.36451099999999 +sg10 +(lp5073 +L343125958L +aL343125959L +aL343125960L +aL343125961L +aL343125962L +asg12 +(lp5074 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801899999999995 +sS't' +F53288.111733700003 +ss(F309.36916100000002 +F0.34575699999999998 +F0.85108300000000003 +F0.91308500000000004 +I0 +tp5075 +(dp5076 +g4 +F0.34575699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.3508800000000001 +sS'm' +F23.087199999999999 +sg8 +F0.91308500000000004 +sg9 +F309.36916100000002 +sg10 +(lp5077 +L343881900L +aL343881901L +aL343881902L +aL343881903L +aL343881904L +asg12 +(lp5078 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85108300000000003 +sS't' +F53626.144937600002 +ss(F309.38261199999999 +F0.33971299999999999 +F1.0100100000000001 +F0.953009 +I0 +tp5079 +(dp5080 +g4 +F0.33971299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.068604899999999996 +sS'm' +F18.767600000000002 +sg8 +F0.953009 +sg9 +F309.38261199999999 +sg10 +(lp5081 +L343709576L +aL343709577L +aL343709578L +aL343709579L +aL343709580L +aL343709581L +aL343709582L +aL343709583L +aL343709584L +aL343709585L +asg12 +(lp5082 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158762899999 +ss(F309.37898899999999 +F0.32703500000000002 +F0.47606599999999999 +F0.45406000000000002 +I0 +tp5083 +(dp5084 +g4 +F0.32703500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.42055100000000001 +sS'm' +F21.2376 +sg8 +F0.45406000000000002 +sg9 +F309.37898899999999 +sg10 +(lp5085 +L344875375L +aL344875376L +aL344875377L +aL344875378L +aL344875379L +asg12 +(lp5086 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47606599999999999 +sS't' +F53668.109014200003 +ss(F309.38271099999997 +F0.33518199999999998 +F0.61600999999999995 +F0.77501600000000004 +I0 +tp5087 +(dp5088 +g4 +F0.33518199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.098878499999999994 +sS'm' +F19.381 +sg8 +F0.77501600000000004 +sg9 +F309.38271099999997 +sg10 +(lp5089 +L346168378L +aL346168379L +aL346168380L +aL346168381L +aL346168382L +asg12 +(lp5090 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61600999999999995 +sS't' +F53704.071680499997 +ss(F309.36743899999999 +F0.329378 +F1.01004 +F0.953044 +I0 +tp5091 +(dp5092 +g4 +F0.329378 +sg5 +I0 +sg6 +I0 +sg7 +F0.35409000000000002 +sS'm' +F22.609999999999999 +sg8 +F0.953044 +sg9 +F309.36743899999999 +sg10 +(lp5093 +L343715687L +aL343715688L +aL343715689L +aL343715690L +aL343715691L +aL343715692L +aL343715693L +aL343715694L +asg12 +(lp5094 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01004 +sS't' +F53623.160379200002 +ss(F309.37770799999998 +F0.34562900000000002 +F0.85182999999999998 +F0.91333600000000004 +I0 +tp5095 +(dp5096 +g4 +F0.34562900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.37242 +sS'm' +F23.7605 +sg8 +F0.91333600000000004 +sg9 +F309.37770799999998 +sg10 +(lp5097 +L343882078L +aL343882079L +aL343882080L +aL343882081L +aL343882082L +asg12 +(lp5098 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85182999999999998 +sS't' +F53626.144961400001 +ss(F309.380809 +F0.34453 +F0.74938899999999997 +F0.97818700000000003 +I0 +tp5099 +(dp5100 +g4 +F0.34453 +sg5 +I0 +sg6 +I0 +sg7 +F0.536524 +sS'm' +F23.480799999999999 +sg8 +F0.97818700000000003 +sg9 +F309.380809 +sg10 +(lp5101 +L171388856L +aL171388857L +aL171388858L +aL171388859L +asg12 +(lp5102 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74938899999999997 +sS't' +F54005.108828999997 +ss(F309.37774100000001 +F0.32561099999999998 +F0.24848999999999999 +F0.34838400000000003 +I0 +tp5103 +(dp5104 +g4 +F0.32561099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F8.2946299999999997 +sS'm' +F24.422000000000001 +sg8 +F0.34838400000000003 +sg9 +F309.37774100000001 +sg10 +(lp5105 +L327906599L +aL327906600L +aL327906601L +aL327906602L +aL327906603L +asg12 +(lp5106 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24848999999999999 +sS't' +F53312.062947799997 +ss(F309.38897300000002 +F0.34517199999999998 +F1.0500100000000001 +F0.94401400000000002 +I0 +tp5107 +(dp5108 +g4 +F0.34517199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.193411 +sS'm' +F19.004200000000001 +sg8 +F0.94401400000000002 +sg9 +F309.38897300000002 +sg10 +(lp5109 +L346329472L +aL346329468L +aL346329469L +aL346329470L +aL346329471L +asg12 +(lp5110 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F1.0500100000000001 +sS't' +F53974.1604467 +ss(F309.37303500000002 +F0.32020300000000002 +F0.924292 +F1.0301800000000001 +I0 +tp5111 +(dp5112 +g4 +F0.32020300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F7.4323699999999997 +sS'm' +F24.772300000000001 +sg8 +F1.0301800000000001 +sg9 +F309.37303500000002 +sg10 +(lp5113 +L345225968L +aL345225969L +aL345225970L +aL345225971L +aL345225972L +asg12 +(lp5114 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.924292 +sS't' +F53673.081832600001 +ss(F309.365994 +F0.33175199999999999 +F0.865008 +F0.900007 +I0 +tp5115 +(dp5116 +g4 +F0.33175199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.18787599999999999 +sS'm' +F20.474 +sg8 +F0.900007 +sg9 +F309.365994 +sg10 +(lp5117 +L345808917L +aL345808918L +aL345808919L +aL345808920L +aL345808921L +asg12 +(lp5118 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.865008 +sS't' +F53693.0883063 +ss(F309.38750199999998 +F0.33274599999999999 +F1.0103500000000001 +F0.99218300000000004 +I0 +tp5119 +(dp5120 +g4 +F0.33274599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.0362099999999996 +sS'm' +F23.883500000000002 +sg8 +F0.99218300000000004 +sg9 +F309.38750199999998 +sg10 +(lp5121 +L342966190L +aL342966191L +aL342966192L +aL342966193L +aL342966194L +asg12 +(lp5122 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0103500000000001 +sS't' +F53270.134620199999 +ss(F309.37096500000001 +F0.33697100000000002 +F1.0803499999999999 +F1.01031 +I0 +tp5123 +(dp5124 +g4 +F0.33697100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F7.5494199999999996 +sS'm' +F24.956499999999998 +sg8 +F1.01031 +sg9 +F309.37096500000001 +sg10 +(lp5125 +L345372231L +aL345372232L +aL345372233L +aL345372234L +aL345372235L +asg12 +(lp5126 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0803499999999999 +sS't' +F53675.078716199998 +ss(F309.38624600000003 +F0.33441799999999999 +F0.89057699999999995 +F1.1125799999999999 +I0 +tp5127 +(dp5128 +g4 +F0.33441799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.49569400000000002 +sS'm' +F23.2254 +sg8 +F1.1125799999999999 +sg9 +F309.38624600000003 +sg10 +(lp5129 +L344155786L +aL344155787L +aL344155788L +asg12 +(lp5130 +I1 +aI2 +aI3 +asg14 +F0.89057699999999995 +sS't' +F53635.139888799997 +ss(F309.35981199999998 +F0.32505400000000001 +F0.77901600000000004 +F0.82901400000000003 +I0 +tp5131 +(dp5132 +g4 +F0.32505400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.122331 +sS'm' +F20.5624 +sg8 +F0.82901400000000003 +sg9 +F309.35981199999998 +sg10 +(lp5133 +L343275117L +aL343275118L +aL343275119L +aL343275120L +asg12 +(lp5134 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77901600000000004 +sS't' +F53302.109047899998 +ss(F309.372906 +F0.32106299999999999 +F0.84561600000000003 +F0.95043699999999998 +I0 +tp5135 +(dp5136 +g4 +F0.32106299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1571400000000001 +sS'm' +F22.629999999999999 +sg8 +F0.95043699999999998 +sg9 +F309.372906 +sg10 +(lp5137 +L343127665L +aL343127666L +aL343127667L +aL343127668L +asg12 +(lp5138 +I0 +aI1 +aI2 +aI3 +asg14 +F0.84561600000000003 +sS't' +F53288.1117571 +ss(F309.38274999999999 +F0.32577699999999998 +F1.0100199999999999 +F0.99201899999999998 +I0 +tp5139 +(dp5140 +g4 +F0.32577699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.3633499999999996 +sS'm' +F23.971299999999999 +sg8 +F0.99201899999999998 +sg9 +F309.38274999999999 +sg10 +(lp5141 +L342966141L +aL342966142L +aL342966143L +aL342966144L +aL342966145L +aL342966146L +aL342966147L +aL342966148L +aL342966149L +aL342966150L +asg12 +(lp5142 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100199999999999 +sS't' +F53270.134607 +ss(F309.37300199999999 +F0.32020399999999999 +F0.98420600000000003 +F0.98815799999999998 +I0 +tp5143 +(dp5144 +g4 +F0.32020399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.69853100000000001 +sS'm' +F23.311 +sg8 +F0.98815799999999998 +sg9 +F309.37300199999999 +sg10 +(lp5145 +L346467772L +aL346467773L +aL346467774L +aL346467775L +asg12 +(lp5146 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98420600000000003 +sS't' +F54007.121556600003 +ss(F309.38271600000002 +F0.33514899999999997 +F1.05002 +F0.94401599999999997 +I0 +tp5147 +(dp5148 +g4 +F0.33514899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.091465199999999997 +sS'm' +F19.371200000000002 +sg8 +F0.94401599999999997 +sg9 +F309.38271600000002 +sg10 +(lp5149 +L346332327L +aL346332328L +aL346332329L +aL346332330L +aL346332331L +asg12 +(lp5150 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.1596001 +ss(F309.37296199999997 +F0.32104899999999997 +F0.88523200000000002 +F1.1101799999999999 +I0 +tp5151 +(dp5152 +g4 +F0.32104899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.71855199999999997 +sS'm' +F23.575099999999999 +sg8 +F1.1101799999999999 +sg9 +F309.37296199999997 +sg10 +(lp5153 +L344153131L +aL344153132L +aL344153133L +aL344153134L +asg12 +(lp5154 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88523200000000002 +sS't' +F53635.139851899999 +ss(F309.37898799999999 +F0.32704800000000001 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp5155 +(dp5156 +g4 +F0.32704800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.38672299999999998 +sS'm' +F21.651900000000001 +sg8 +F1.0100100000000001 +sg9 +F309.37898799999999 +sg10 +(lp5157 +L345366346L +aL345366347L +aL345366348L +aL345366349L +aL345366350L +aL345366351L +aL345366352L +aL345366353L +aL345366354L +aL345366355L +asg12 +(lp5158 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.0787385 +ss(F309.36765000000003 +F0.328293 +F0.77942699999999998 +F0.82958600000000005 +I0 +tp5159 +(dp5160 +g4 +F0.328293 +sg5 +I0 +sg6 +I0 +sg7 +F2.8254100000000002 +sS'm' +F23.1648 +sg8 +F0.82958600000000005 +sg9 +F309.36765000000003 +sg10 +(lp5161 +L343278801L +aL343278802L +aL343278803L +aL343278804L +aL343278805L +asg12 +(lp5162 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77942699999999998 +sS't' +F53302.107411199999 +ss(F309.36993000000001 +F0.33446700000000001 +F0.88510100000000003 +F1.11005 +I0 +tp5163 +(dp5164 +g4 +F0.33446700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.356514 +sS'm' +F22.842199999999998 +sg8 +F1.11005 +sg9 +F309.36993000000001 +sg10 +(lp5165 +L344153094L +aL344153095L +aL344153096L +aL344153097L +asg12 +(lp5166 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88510100000000003 +sS't' +F53635.1398434 +ss(F309.367864 +F0.34506900000000001 +F0.61634299999999997 +F0.77560700000000005 +I0 +tp5167 +(dp5168 +g4 +F0.34506900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.3037399999999999 +sS'm' +F23.087399999999999 +sg8 +F0.77560700000000005 +sg9 +F309.367864 +sg10 +(lp5169 +L346172030L +aL346172031L +aL346172032L +aL346172033L +aL346172034L +asg12 +(lp5170 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61634299999999997 +sS't' +F53704.071639299997 +ss(F309.38367199999999 +F0.344976 +F0.85102199999999995 +F0.91302099999999997 +I0 +tp5171 +(dp5172 +g4 +F0.344976 +sg5 +I0 +sg6 +I0 +sg7 +F0.37829499999999999 +sS'm' +F21.048999999999999 +sg8 +F0.91302099999999997 +sg9 +F309.38367199999999 +sg10 +(lp5173 +L343874444L +aL343874445L +aL343874446L +aL343874447L +aL343874448L +asg12 +(lp5174 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85102199999999995 +sS't' +F53626.144977900003 +ss(F309.36927400000002 +F0.31896000000000002 +F0.92401199999999994 +F1.0300199999999999 +I0 +tp5175 +(dp5176 +g4 +F0.31896000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.40210299999999999 +sS'm' +F21.539100000000001 +sg8 +F1.0300199999999999 +sg9 +F309.36927400000002 +sg10 +(lp5177 +L345219956L +aL345219957L +aL345219958L +aL345219959L +aL345219960L +asg12 +(lp5178 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401199999999994 +sS't' +F53673.081822100001 +ss(F309.37092999999999 +F0.33033800000000002 +F0.82826900000000003 +F0.94600700000000004 +I0 +tp5179 +(dp5180 +g4 +F0.33033800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.0427 +sS'm' +F23.257100000000001 +sg8 +F0.94600700000000004 +sg9 +F309.37092999999999 +sg10 +(lp5181 +L343127603L +aL343127604L +aL343127605L +aL343127606L +aL343127607L +asg12 +(lp5182 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82826900000000003 +sS't' +F53288.111751600001 +ss(F309.36006600000002 +F0.32051099999999999 +F1.0100100000000001 +F0.953009 +I0 +tp5183 +(dp5184 +g4 +F0.32051099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.11129500000000001 +sS'm' +F19.624099999999999 +sg8 +F0.953009 +sg9 +F309.36006600000002 +sg10 +(lp5185 +L343711762L +aL343711763L +aL343711764L +aL343711765L +aL343711766L +aL343711767L +aL343711768L +aL343711769L +aL343711770L +aL343711771L +asg12 +(lp5186 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158700300002 +ss(F309.37301600000001 +F0.32017499999999999 +F0.85245300000000002 +F0.91472299999999995 +I0 +tp5187 +(dp5188 +g4 +F0.32017499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.4674 +sS'm' +F22.5749 +sg8 +F0.91472299999999995 +sg9 +F309.37301600000001 +sg10 +(lp5189 +L343882016L +aL343882017L +aL343882018L +aL343882019L +aL343882020L +asg12 +(lp5190 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85245300000000002 +sS't' +F53626.144948300003 +ss(F309.38796200000002 +F0.34224900000000003 +F0.74900900000000004 +F0.97800900000000002 +I0 +tp5191 +(dp5192 +g4 +F0.34224900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.78839800000000004 +sS'm' +F22.465800000000002 +sg8 +F0.97800900000000002 +sg9 +F309.38796200000002 +sg10 +(lp5193 +L171378439L +aL171378440L +aL171378441L +aL171378442L +aL171378443L +asg12 +(lp5194 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900900000000004 +sS't' +F54005.107190399998 +ss(F309.36148100000003 +F0.318546 +F0.92424200000000001 +F1.03017 +I0 +tp5195 +(dp5196 +g4 +F0.318546 +sg5 +I0 +sg6 +I0 +sg7 +F1.6265799999999999 +sS'm' +F23.0991 +sg8 +F1.03017 +sg9 +F309.36148100000003 +sg10 +(lp5197 +L345219862L +aL345219863L +aL345219864L +aL345219865L +asg12 +(lp5198 +I0 +aI1 +aI2 +aI3 +asg14 +F0.92424200000000001 +sS't' +F53673.081800499996 +ss(F309.361469 +F0.31851000000000002 +F1.0501100000000001 +F0.94417099999999998 +I0 +tp5199 +(dp5200 +g4 +F0.31851000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.32760499999999998 +sS'm' +F22.6189 +sg8 +F0.94417099999999998 +sg9 +F309.361469 +sg10 +(lp5201 +L346331800L +aL346331801L +aL346331802L +aL346331803L +asg12 +(lp5202 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0501100000000001 +sS't' +F53974.161199499998 +ss(F309.38234999999997 +F0.32454300000000003 +F0.74115699999999995 +F0.96013700000000002 +I0 +tp5203 +(dp5204 +g4 +F0.32454300000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.65512000000000004 +sS'm' +F23.629799999999999 +sg8 +F0.96013700000000002 +sg9 +F309.38234999999997 +sg10 +(lp5205 +L344479022L +aL344479023L +aL344479024L +aL344479025L +asg12 +(lp5206 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74115699999999995 +sS't' +F53644.125530800004 +ss(F309.36775599999999 +F0.33362000000000003 +F1.0901000000000001 +F1.07006 +I0 +tp5207 +(dp5208 +g4 +F0.33362000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F7.2611299999999996 +sS'm' +F25.0764 +sg8 +F1.07006 +sg9 +F309.36775599999999 +sg10 +(lp5209 +L345683691L +aL345683692L +aL345683693L +aL345683694L +aL345683695L +asg12 +(lp5210 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0901000000000001 +sS't' +F53680.086405100003 +ss(F309.36775599999999 +F0.33361299999999999 +F0.88527100000000003 +F1.1101300000000001 +I0 +tp5211 +(dp5212 +g4 +F0.33361299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.5464799999999999 +sS'm' +F24.309999999999999 +sg8 +F1.1101300000000001 +sg9 +F309.36775599999999 +sg10 +(lp5213 +L344155474L +aL344155475L +aL344155476L +aL344155477L +aL344155478L +asg12 +(lp5214 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88527100000000003 +sS't' +F53635.138179000001 +ss(F309.384659 +F0.34554200000000002 +F1.09046 +F1.0704499999999999 +I0 +tp5215 +(dp5216 +g4 +F0.34554200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.93851 +sS'm' +F25.352799999999998 +sg8 +F1.0704499999999999 +sg9 +F309.384659 +sg10 +(lp5217 +L345676217L +aL345676218L +aL345676219L +aL345676220L +asg12 +(lp5218 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09046 +sS't' +F53680.088110500001 +ss(F309.38796500000001 +F0.34221000000000001 +F0.77902499999999997 +F0.82902299999999995 +I0 +tp5219 +(dp5220 +g4 +F0.34221000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.5002499999999999 +sS'm' +F22.994399999999999 +sg8 +F0.82902299999999995 +sg9 +F309.38796500000001 +sg10 +(lp5221 +L343271709L +aL343271710L +aL343271711L +aL343271712L +aL343271713L +asg12 +(lp5222 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77902499999999997 +sS't' +F53302.1074677 +ss(F309.382723 +F0.33518799999999999 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp5223 +(dp5224 +g4 +F0.33518799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.093281199999999995 +sS'm' +F19.384399999999999 +sg8 +F0.99200699999999997 +sg9 +F309.382723 +sg10 +(lp5225 +L342964627L +aL342964628L +aL342964629L +aL342964630L +aL342964631L +asg12 +(lp5226 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134606899999 +ss(F309.36848900000001 +F0.33946300000000001 +F0.75106799999999996 +F0.97915700000000006 +I0 +tp5227 +(dp5228 +g4 +F0.33946300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.62587400000000004 +sS'm' +F23.655899999999999 +sg8 +F0.97915700000000006 +sg9 +F309.36848900000001 +sg10 +(lp5229 +L171388717L +aL171388718L +aL171388719L +aL171388720L +asg12 +(lp5230 +I1 +aI2 +aI3 +aI4 +asg14 +F0.75106799999999996 +sS't' +F54005.108794799999 +ss(F309.38935300000003 +F0.32215500000000002 +F0.85111099999999995 +F0.91308699999999998 +I0 +tp5231 +(dp5232 +g4 +F0.32215500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.07989 +sS'm' +F22.2319 +sg8 +F0.91308699999999998 +sg9 +F309.38935300000003 +sg10 +(lp5233 +L343880300L +aL343880301L +aL343880302L +aL343880303L +aL343880304L +asg12 +(lp5234 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85111099999999995 +sS't' +F53626.1449937 +ss(F309.36845099999999 +F0.33944099999999999 +F1.08934 +F1.01387 +I0 +tp5235 +(dp5236 +g4 +F0.33944099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.3173599999999999 +sS'm' +F24.0579 +sg8 +F1.01387 +sg9 +F309.36845099999999 +sg10 +(lp5237 +L345371775L +aL345371776L +aL345371777L +aL345371778L +asg12 +(lp5238 +I0 +aI1 +aI2 +aI3 +asg14 +F1.08934 +sS't' +F53675.078709200003 +ss(F309.36743100000001 +F0.329372 +F0.74105200000000004 +F0.96004299999999998 +I0 +tp5239 +(dp5240 +g4 +F0.329372 +sg5 +I0 +sg6 +I0 +sg7 +F4.24735 +sS'm' +F24.442900000000002 +sg8 +F0.96004299999999998 +sg9 +F309.36743100000001 +sg10 +(lp5241 +L344481810L +aL344481811L +aL344481812L +aL344481813L +aL344481814L +aL344481815L +aL344481816L +aL344481817L +aL344481818L +aL344481819L +asg12 +(lp5242 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74105200000000004 +sS't' +F53644.123830899996 +ss(F309.375697 +F0.34618599999999999 +F0.88524499999999995 +F1.1101399999999999 +I0 +tp5243 +(dp5244 +g4 +F0.34618599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.27819199999999999 +sS'm' +F22.340900000000001 +sg8 +F1.1101399999999999 +sg9 +F309.375697 +sg10 +(lp5245 +L344153179L +aL344153180L +aL344153181L +aL344153174L +aL344153175L +aL344153176L +aL344153177L +aL344153178L +asg12 +(lp5246 +I2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +aI1 +asg14 +F0.88524499999999995 +sS't' +F53635.136542499997 +ss(F309.38266299999998 +F0.31700299999999998 +F1.05067 +F0.94462800000000002 +I0 +tp5247 +(dp5248 +g4 +F0.31700299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.4681700000000002 +sS'm' +F23.442299999999999 +sg8 +F0.94462800000000002 +sg9 +F309.38266299999998 +sg10 +(lp5249 +L346336492L +aL346336493L +aL346336494L +aL346336495L +aL346336496L +asg12 +(lp5250 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05067 +sS't' +F53974.159599899998 +ss(F309.36993699999999 +F0.33444099999999999 +F0.85211999999999999 +F0.91424799999999995 +I0 +tp5251 +(dp5252 +g4 +F0.33444099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.9563299999999999 +sS'm' +F22.8889 +sg8 +F0.91424799999999995 +sg9 +F309.36993699999999 +sg10 +(lp5253 +L343881967L +aL343881968L +aL343881969L +aL343881970L +aL343881971L +asg12 +(lp5254 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85211999999999999 +sS't' +F53626.144939799997 +ss(F309.36003799999997 +F0.32051099999999999 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp5255 +(dp5256 +g4 +F0.32051099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.084210199999999999 +sS'm' +F19.717400000000001 +sg8 +F1.1100000000000001 +sg9 +F309.36003799999997 +sg10 +(lp5257 +L344143988L +aL344143989L +aL344143990L +aL344143991L +aL344143992L +asg12 +(lp5258 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138157499998 +ss(F309.367841 +F0.34502100000000002 +F0.74123499999999998 +F0.96044799999999997 +I0 +tp5259 +(dp5260 +g4 +F0.34502100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F7.96624 +sS'm' +F25.1266 +sg8 +F0.96044799999999997 +sg9 +F309.367841 +sg10 +(lp5261 +L344482807L +aL344482808L +aL344482809L +aL344482810L +aL344482811L +asg12 +(lp5262 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74123499999999998 +sS't' +F53644.123832099998 +ss(F309.38654000000002 +F0.32198199999999999 +F0.47612700000000002 +F0.45413700000000001 +I0 +tp5263 +(dp5264 +g4 +F0.32198199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.86846999999999996 +sS'm' +F22.052099999999999 +sg8 +F0.45413700000000001 +sg9 +F309.38654000000002 +sg10 +(lp5265 +L344876326L +aL344876327L +aL344876328L +aL344876329L +aL344876330L +asg12 +(lp5266 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47612700000000002 +sS't' +F53668.109035200003 +ss(F309.36312099999998 +F0.33103500000000002 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp5267 +(dp5268 +g4 +F0.33103500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.070622400000000002 +sS'm' +F18.815200000000001 +sg8 +F0.94401199999999996 +sg9 +F309.36312099999998 +sg10 +(lp5269 +L346329097L +aL346329098L +aL346329099L +aL346329100L +aL346329101L +asg12 +(lp5270 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.1595456 +ss(F309.37095900000003 +F0.33696999999999999 +F0.74922200000000005 +F0.97827600000000003 +I0 +tp5271 +(dp5272 +g4 +F0.33696999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F5.5358700000000001 +sS'm' +F24.696999999999999 +sg8 +F0.97827600000000003 +sg9 +F309.37095900000003 +sg10 +(lp5273 +L171389833L +aL171389834L +aL171389835L +aL171389836L +aL171389837L +asg12 +(lp5274 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74922200000000005 +sS't' +F54005.107143200003 +ss(F309.372345 +F0.32413900000000001 +F0.82819100000000001 +F0.94510400000000006 +I0 +tp5275 +(dp5276 +g4 +F0.32413900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.57498800000000005 +sS'm' +F23.132999999999999 +sg8 +F0.94510400000000006 +sg9 +F309.372345 +sg10 +(lp5277 +L343127646L +aL343127647L +aL343127648L +aL343127649L +asg12 +(lp5278 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82819100000000001 +sS't' +F53288.113413899999 +ss(F309.37772799999999 +F0.325596 +F0.92101999999999995 +F1.10002 +I0 +tp5279 +(dp5280 +g4 +F0.325596 +sg5 +I0 +sg6 +I0 +sg7 +F0.124503 +sS'm' +F21.775400000000001 +sg8 +F1.10002 +sg9 +F309.37772799999999 +sg10 +(lp5281 +L345537379L +aL345537380L +aL345537381L +aL345537382L +asg12 +(lp5282 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92101999999999995 +sS't' +F53677.101426100002 +ss(F309.36313200000001 +F0.33103500000000002 +F0.47603699999999999 +F0.45402799999999999 +I0 +tp5283 +(dp5284 +g4 +F0.33103500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.068668099999999996 +sS'm' +F18.823799999999999 +sg8 +F0.45402799999999999 +sg9 +F309.36313200000001 +sg10 +(lp5285 +L344871115L +aL344871116L +aL344871117L +aL344871118L +aL344871119L +asg12 +(lp5286 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47603699999999999 +sS't' +F53668.108970200003 +ss(F309.36401599999999 +F0.31752999999999998 +F0.77908200000000005 +F0.82906500000000005 +I0 +tp5287 +(dp5288 +g4 +F0.31752999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.28171299999999999 +sS'm' +F21.519600000000001 +sg8 +F0.82906500000000005 +sg9 +F309.36401599999999 +sg10 +(lp5289 +L343277162L +aL343277163L +aL343277164L +aL343277165L +asg12 +(lp5290 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77908200000000005 +sS't' +F53302.109059599999 +ss(F309.36632600000002 +F0.34080899999999997 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp5291 +(dp5292 +g4 +F0.34080899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.048908 +sS'm' +F18.357500000000002 +sg8 +F1.0700000000000001 +sg9 +F309.36632600000002 +sg10 +(lp5293 +L345675676L +aL345675677L +aL345675678L +aL345675679L +aL345675680L +asg12 +(lp5294 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086401100001 +ss(F309.37308899999999 +F0.32444099999999998 +F1.0500499999999999 +F0.94404500000000002 +I0 +tp5295 +(dp5296 +g4 +F0.32444099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.9283799999999998 +sS'm' +F24.1995 +sg8 +F0.94404500000000002 +sg9 +F309.37308899999999 +sg10 +(lp5297 +L346336362L +aL346336363L +aL346336364L +aL346336365L +aL346336366L +asg12 +(lp5298 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500499999999999 +sS't' +F53974.159573299999 +ss(F309.38651399999998 +F0.32198900000000003 +F1.0100199999999999 +F0.95302699999999996 +I0 +tp5299 +(dp5300 +g4 +F0.32198900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.95207799999999998 +sS'm' +F22.2226 +sg8 +F0.95302699999999996 +sg9 +F309.38651399999998 +sg10 +(lp5301 +L343716036L +aL343716037L +aL343716038L +aL343716039L +aL343716040L +aL343716041L +aL343716042L +aL343716043L +aL343716044L +aL343716045L +asg12 +(lp5302 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100199999999999 +sS't' +F53623.158773700001 +ss(F309.359803 +F0.32505800000000001 +F0.92401299999999997 +F1.0300199999999999 +I0 +tp5303 +(dp5304 +g4 +F0.32505800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.82523299999999999 +sS'm' +F22.356100000000001 +sg8 +F1.0300199999999999 +sg9 +F309.359803 +sg10 +(lp5305 +L345219759L +aL345219760L +aL345219761L +aL345219762L +aL345219763L +aL345219764L +aL345219765L +aL345219766L +aL345219767L +aL345219768L +asg12 +(lp5306 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401299999999997 +sS't' +F53673.081795799997 +ss(F309.363989 +F0.31753199999999998 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp5307 +(dp5308 +g4 +F0.31753199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.59207600000000005 +sS'm' +F22.299099999999999 +sg8 +F1.0700099999999999 +sg9 +F309.363989 +sg10 +(lp5309 +L345683658L +aL345683659L +aL345683660L +aL345683661L +aL345683662L +asg12 +(lp5310 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900099999999999 +sS't' +F53680.086394600003 +ss(F309.38889999999998 +F0.34377400000000002 +F0.50604199999999999 +F0.45912900000000001 +I0 +tp5311 +(dp5312 +g4 +F0.34377400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.039848099999999997 +sS'm' +F16.209199999999999 +sg8 +F0.45912900000000001 +sg9 +F309.38889999999998 +sg10 +(lp5313 +L153248900L +aL153248901L +aL153248902L +aL153248903L +aL153248904L +asg12 +(lp5314 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50604199999999999 +sS't' +F53702.084017100002 +ss(F309.37770699999999 +F0.34564899999999998 +F0.41881200000000002 +F0.417985 +I0 +tp5315 +(dp5316 +g4 +F0.34564899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.63697700000000002 +sS'm' +F22.785 +sg8 +F0.417985 +sg9 +F309.37770699999999 +sg10 +(lp5317 +L345997873L +aL345997874L +aL345997875L +aL345997876L +asg12 +(lp5318 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41881200000000002 +sS't' +F53703.094777999999 +ss(F309.38752099999999 +F0.33274799999999999 +F0.92108500000000004 +F1.10006 +I0 +tp5319 +(dp5320 +g4 +F0.33274799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F9.7388700000000004 +sS'm' +F25.233000000000001 +sg8 +F1.10006 +sg9 +F309.38752099999999 +sg10 +(lp5321 +L345537417L +aL345537418L +aL345537419L +aL345537420L +aL345537421L +asg12 +(lp5322 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92108500000000004 +sS't' +F53677.099794900001 +ss(F309.37302599999998 +F0.32022899999999999 +F0.93316200000000005 +F0.878363 +I0 +tp5323 +(dp5324 +g4 +F0.32022899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.42647699999999999 +sS'm' +F22.860800000000001 +sg8 +F0.878363 +sg9 +F309.37302599999998 +sg10 +(lp5325 +L345030725L +aL345030726L +aL345030727L +aL345030728L +asg12 +(lp5326 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93316200000000005 +sS't' +F53670.115510000003 +ss(F309.38753600000001 +F0.33267999999999998 +F1.0801700000000001 +F1.0101800000000001 +I0 +tp5327 +(dp5328 +g4 +F0.33267999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.5498700000000003 +sS'm' +F24.405899999999999 +sg8 +F1.0101800000000001 +sg9 +F309.38753600000001 +sg10 +(lp5329 +L345367537L +aL345367538L +aL345367539L +aL345367540L +aL345367541L +asg12 +(lp5330 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0801700000000001 +sS't' +F53675.078762199999 +ss(F309.38752399999998 +F0.33219500000000002 +F0.92418 +F1.03016 +I0 +tp5331 +(dp5332 +g4 +F0.33219500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.68115000000000003 +sS'm' +F23.390999999999998 +sg8 +F1.03016 +sg9 +F309.38752399999998 +sg10 +(lp5333 +L345222034L +aL345222035L +aL345222036L +aL345222037L +asg12 +(lp5334 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92418 +sS't' +F53673.083531199998 +ss(F309.36006500000002 +F0.32050200000000001 +F0.74100699999999997 +F0.96000700000000005 +I0 +tp5335 +(dp5336 +g4 +F0.32050200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.088278099999999998 +sS'm' +F19.710799999999999 +sg8 +F0.96000700000000005 +sg9 +F309.36006500000002 +sg10 +(lp5337 +L344475448L +aL344475449L +aL344475450L +aL344475451L +aL344475452L +asg12 +(lp5338 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100699999999997 +sS't' +F53644.123810500001 +ss(F309.374731 +F0.33168900000000001 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp5339 +(dp5340 +g4 +F0.33168900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.035603700000000002 +sS'm' +F15.9422 +sg8 +F1.0700000000000001 +sg9 +F309.374731 +sg10 +(lp5341 +L345675861L +aL345675862L +aL345675863L +aL345675864L +aL345675865L +asg12 +(lp5342 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086424499998 +ss(F309.37309900000002 +F0.32447599999999999 +F0.749031 +F0.97803099999999998 +I0 +tp5343 +(dp5344 +g4 +F0.32447599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.225356 +sS'm' +F22.464400000000001 +sg8 +F0.97803099999999998 +sg9 +F309.37309900000002 +sg10 +(lp5345 +L171384964L +aL171384965L +aL171384966L +aL171384967L +asg12 +(lp5346 +I1 +aI2 +aI3 +aI4 +asg14 +F0.749031 +sS't' +F54005.108807600001 +ss(F309.38264099999998 +F0.33971099999999999 +F0.64901900000000001 +F0.53902399999999995 +I0 +tp5347 +(dp5348 +g4 +F0.33971099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.080088400000000004 +sS'm' +F18.736999999999998 +sg8 +F0.53902399999999995 +sg9 +F309.38264099999998 +sg10 +(lp5349 +L112296827L +aL112296828L +aL112296829L +aL112296830L +aL112296831L +asg12 +(lp5350 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901900000000001 +sS't' +F53656.106113900001 +ss(F309.382611 +F0.33970400000000001 +F0.92400599999999999 +F1.0300100000000001 +I0 +tp5351 +(dp5352 +g4 +F0.33970400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.057407699999999999 +sS'm' +F18.710100000000001 +sg8 +F1.0300100000000001 +sg9 +F309.382611 +sg10 +(lp5353 +L345217567L +aL345217568L +aL345217569L +aL345217570L +aL345217571L +asg12 +(lp5354 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400599999999999 +sS't' +F53673.0818592 +ss(F309.36842999999999 +F0.34215800000000002 +F0.92164100000000004 +F1.1009800000000001 +I0 +tp5355 +(dp5356 +g4 +F0.34215800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.3815200000000001 +sS'm' +F24.346499999999999 +sg8 +F1.1009800000000001 +sg9 +F309.36842999999999 +sg10 +(lp5357 +L345542685L +aL345542686L +aL345542687L +aL345542688L +aL345542689L +asg12 +(lp5358 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92164100000000004 +sS't' +F53677.099741899998 +ss(F309.38084400000002 +F0.33929399999999998 +F0.82907900000000001 +F0.94558299999999995 +I0 +tp5359 +(dp5360 +g4 +F0.33929399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.9390099999999999 +sS'm' +F23.200199999999999 +sg8 +F0.94558299999999995 +sg9 +F309.38084400000002 +sg10 +(lp5361 +L343120664L +aL343120665L +aL343120666L +aL343120667L +aL343120668L +asg12 +(lp5362 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82907900000000001 +sS't' +F53288.1117791 +ss(F309.37278700000002 +F0.33522800000000003 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp5363 +(dp5364 +g4 +F0.33522800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.466277 +sS'm' +F22.0318 +sg8 +F1.1100000000000001 +sg9 +F309.37278700000002 +sg10 +(lp5365 +L344147938L +aL344147939L +aL344147940L +aL344147941L +aL344147942L +asg12 +(lp5366 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138192899998 +ss(F309.38652000000002 +F0.32197700000000001 +F0.77513200000000004 +F0.75412400000000002 +I0 +tp5367 +(dp5368 +g4 +F0.32197700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.9655399999999998 +sS'm' +F22.9541 +sg8 +F0.75412400000000002 +sg9 +F309.38652000000002 +sg10 +(lp5369 +L342830525L +aL342830526L +aL342830527L +aL342830528L +aL342830529L +asg12 +(lp5370 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77513200000000004 +sS't' +F53243.255790700001 +ss(F309.37196599999999 +F0.34107199999999999 +F0.47605799999999998 +F0.45405200000000001 +I0 +tp5371 +(dp5372 +g4 +F0.34107199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1133200000000001 +sS'm' +F22.322399999999998 +sg8 +F0.45405200000000001 +sg9 +F309.37196599999999 +sg10 +(lp5373 +L344876133L +aL344876134L +aL344876135L +aL344876136L +aL344876137L +asg12 +(lp5374 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47605799999999998 +sS't' +F53668.1089947 +ss(F309.38273900000002 +F0.32577600000000001 +F0.248277 +F0.34820499999999999 +I0 +tp5375 +(dp5376 +g4 +F0.32577600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.12159499999999999 +sS'm' +F21.004799999999999 +sg8 +F0.34820499999999999 +sg9 +F309.38273900000002 +sg10 +(lp5377 +L327906613L +aL327906614L +aL327906615L +aL327906616L +asg12 +(lp5378 +I1 +aI2 +aI3 +aI4 +asg14 +F0.248277 +sS't' +F53312.064620099998 +ss(F309.36774500000001 +F0.33363399999999999 +F1.0811999999999999 +F1.0115700000000001 +I0 +tp5379 +(dp5380 +g4 +F0.33363399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.2325200000000001 +sS'm' +F24.176500000000001 +sg8 +F1.0115700000000001 +sg9 +F309.36774500000001 +sg10 +(lp5381 +L345371766L +aL345371767L +aL345371768L +aL345371769L +asg12 +(lp5382 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0811999999999999 +sS't' +F53675.0803657 +ss(F309.37653799999998 +F0.34479900000000002 +F0.85146100000000002 +F0.91339899999999996 +I0 +tp5383 +(dp5384 +g4 +F0.34479900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.1379600000000001 +sS'm' +F23.398700000000002 +sg8 +F0.91339899999999996 +sg9 +F309.37653799999998 +sg10 +(lp5385 +L343882088L +aL343882089L +aL343882090L +aL343882091L +aL343882092L +asg12 +(lp5386 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85146100000000002 +sS't' +F53626.144958099998 +ss(F309.36503900000002 +F0.33013900000000002 +F0.24807299999999999 +F0.348051 +I0 +tp5387 +(dp5388 +g4 +F0.33013900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.32963399999999998 +sS'm' +F21.329999999999998 +sg8 +F0.348051 +sg9 +F309.36503900000002 +sg10 +(lp5389 +L327903521L +aL327903522L +aL327903523L +aL327903524L +aL327903525L +asg12 +(lp5390 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24807299999999999 +sS't' +F53312.062912499998 +ss(F309.380877 +F0.33930700000000003 +F1.05227 +F0.946357 +I0 +tp5391 +(dp5392 +g4 +F0.33930700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F5.0581899999999997 +sS'm' +F24.199999999999999 +sg8 +F0.946357 +sg9 +F309.380877 +sg10 +(lp5393 +L346329353L +aL346329354L +aL346329355L +aL346329356L +aL346329357L +asg12 +(lp5394 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05227 +sS't' +F53974.159594999997 +ss(F309.38194900000002 +F0.33613700000000002 +F0.92480300000000004 +F1.0312699999999999 +I0 +tp5395 +(dp5396 +g4 +F0.33613700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.7772000000000001 +sS'm' +F24.032900000000001 +sg8 +F1.0312699999999999 +sg9 +F309.38194900000002 +sg10 +(lp5397 +L345220239L +aL345220240L +aL345220241L +aL345220242L +asg12 +(lp5398 +I0 +aI1 +aI3 +aI4 +asg14 +F0.92480300000000004 +sS't' +F53673.0818573 +ss(F309.38241599999998 +F0.33027600000000001 +F0.88517299999999999 +F1.1101399999999999 +I0 +tp5399 +(dp5400 +g4 +F0.33027600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F5.2354599999999998 +sS'm' +F24.736000000000001 +sg8 +F1.1101399999999999 +sg9 +F309.38241599999998 +sg10 +(lp5401 +L344153243L +aL344153244L +aL344153245L +aL344153246L +aL344153247L +asg12 +(lp5402 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88517299999999999 +sS't' +F53635.138219699998 +ss(F309.38898399999999 +F0.34517900000000001 +F0.47603899999999999 +F0.45403700000000002 +I0 +tp5403 +(dp5404 +g4 +F0.34517900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.44611099999999998 +sS'm' +F21.0243 +sg8 +F0.45403700000000002 +sg9 +F309.38898399999999 +sg10 +(lp5405 +L344871434L +aL344871435L +aL344871436L +aL344871437L +aL344871438L +asg12 +(lp5406 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47603899999999999 +sS't' +F53668.109041999996 +ss(F309.386211 +F0.338868 +F1.0101 +F0.99212400000000001 +I0 +tp5407 +(dp5408 +g4 +F0.338868 +sg5 +I0 +sg6 +I0 +sg7 +F0.39191199999999998 +sS'm' +F22.392700000000001 +sg8 +F0.99212400000000001 +sg9 +F309.386211 +sg10 +(lp5409 +L342968344L +aL342968345L +aL342968346L +aL342968347L +asg12 +(lp5410 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101 +sS't' +F53270.136274999997 +ss(F309.36401799999999 +F0.31753900000000002 +F0.93303899999999995 +F0.87803699999999996 +I0 +tp5411 +(dp5412 +g4 +F0.31753900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.102448 +sS'm' +F21.255700000000001 +sg8 +F0.87803699999999996 +sg9 +F309.36401799999999 +sg10 +(lp5413 +L345026979L +aL345026980L +aL345026981L +aL345026982L +asg12 +(lp5414 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93303899999999995 +sS't' +F53670.115485000002 +ss(F309.36991499999999 +F0.33450000000000002 +F1.0101199999999999 +F0.95330400000000004 +I0 +tp5415 +(dp5416 +g4 +F0.33450000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.3464999999999998 +sS'm' +F23.2104 +sg8 +F0.95330400000000004 +sg9 +F309.36991499999999 +sg10 +(lp5417 +L343715773L +aL343715774L +aL343715775L +aL343715776L +aL343715777L +asg12 +(lp5418 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0101199999999999 +sS't' +F53623.158727599999 +ss(F309.36400900000001 +F0.31753100000000001 +F1.05002 +F0.94402399999999997 +I0 +tp5419 +(dp5420 +g4 +F0.31753100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.2098199999999999 +sS'm' +F22.599599999999999 +sg8 +F0.94402399999999997 +sg9 +F309.36400900000001 +sg10 +(lp5421 +L346331786L +aL346331787L +aL346331788L +aL346331789L +aL346331790L +asg12 +(lp5422 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159548099997 +ss(F309.37472400000001 +F0.33168999999999998 +F0.82801000000000002 +F0.94500799999999996 +I0 +tp5423 +(dp5424 +g4 +F0.33168999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.033418099999999999 +sS'm' +F15.9701 +sg8 +F0.94500799999999996 +sg9 +F309.37472400000001 +sg10 +(lp5425 +L343120461L +aL343120462L +aL343120463L +aL343120464L +aL343120465L +asg12 +(lp5426 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801000000000002 +sS't' +F53288.111762100001 +ss(F309.36523199999999 +F0.33727800000000002 +F1.08013 +F1.0100899999999999 +I0 +tp5427 +(dp5428 +g4 +F0.33727800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0178799999999999 +sS'm' +F22.754799999999999 +sg8 +F1.0100899999999999 +sg9 +F309.36523199999999 +sg10 +(lp5429 +L345370100L +aL345370101L +aL345370102L +aL345370103L +aL345370104L +asg12 +(lp5430 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08013 +sS't' +F53675.0787002 +ss(F309.38024200000001 +F0.34040199999999998 +F1.09459 +F1.0703499999999999 +I0 +tp5431 +(dp5432 +g4 +F0.34040199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.2857799999999999 +sS'm' +F23.808199999999999 +sg8 +F1.0703499999999999 +sg9 +F309.38024200000001 +sg10 +(lp5433 +L345676059L +aL345676060L +aL345676061L +aL345676062L +aL345676063L +asg12 +(lp5434 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09459 +sS't' +F53680.086439799998 +ss(F309.37453099999999 +F0.31684600000000002 +F0.77952500000000002 +F0.82929799999999998 +I0 +tp5435 +(dp5436 +g4 +F0.31684600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.3138300000000003 +sS'm' +F24.5015 +sg8 +F0.82929799999999998 +sg9 +F309.37453099999999 +sg10 +(lp5437 +L343278933L +aL343278934L +aL343278935L +aL343278936L +asg12 +(lp5438 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77952500000000002 +sS't' +F53302.109088800004 +ss(F309.37795499999999 +F0.33785900000000002 +F0.50603799999999999 +F0.45910099999999998 +I0 +tp5439 +(dp5440 +g4 +F0.33785900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.066070500000000004 +sS'm' +F18.395199999999999 +sg8 +F0.45910099999999998 +sg9 +F309.37795499999999 +sg10 +(lp5441 +L153250259L +aL153250260L +aL153250261L +aL153250262L +aL153250263L +asg12 +(lp5442 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50603799999999999 +sS't' +F53702.083986700003 +ss(F309.38077299999998 +F0.34449400000000002 +F0.61759699999999995 +F0.776335 +I0 +tp5443 +(dp5444 +g4 +F0.34449400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.17961 +sS'm' +F23.766999999999999 +sg8 +F0.776335 +sg9 +F309.38077299999998 +sg10 +(lp5445 +L346166277L +aL346166278L +aL346166279L +aL346166280L +asg12 +(lp5446 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61759699999999995 +sS't' +F53704.073333599998 +ss(F309.38750700000003 +F0.33218300000000001 +F0.88505199999999995 +F1.1100699999999999 +I0 +tp5447 +(dp5448 +g4 +F0.33218300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.81405499999999997 +sS'm' +F23.730899999999998 +sg8 +F1.1100699999999999 +sg9 +F309.38750700000003 +sg10 +(lp5449 +L344150903L +aL344150904L +aL344150905L +aL344150906L +asg12 +(lp5450 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88505199999999995 +sS't' +F53635.139892300002 +ss(F309.382047 +F0.34298800000000002 +F0.61621800000000004 +F0.775173 +I0 +tp5451 +(dp5452 +g4 +F0.34298800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0517799999999999 +sS'm' +F22.2226 +sg8 +F0.775173 +sg9 +F309.382047 +sg10 +(lp5453 +L346166272L +aL346166273L +aL346166274L +aL346166275L +aL346166276L +asg12 +(lp5454 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61621800000000004 +sS't' +F53704.071678699998 +ss(F309.37473 +F0.33169799999999999 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp5455 +(dp5456 +g4 +F0.33169799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.032406200000000003 +sS'm' +F15.9308 +sg8 +F1.1100000000000001 +sg9 +F309.37473 +sg10 +(lp5457 +L344144334L +aL344144335L +aL344144336L +aL344144337L +aL344144338L +asg12 +(lp5458 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138198300003 +ss(F309.383962 +F0.31875300000000001 +F0.92107000000000006 +F1.1000799999999999 +I0 +tp5459 +(dp5460 +g4 +F0.31875300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.1624699999999999 +sS'm' +F24.009799999999998 +sg8 +F1.1000799999999999 +sg9 +F309.383962 +sg10 +(lp5461 +L345539817L +aL345539818L +aL345539819L +aL345539820L +aL345539821L +asg12 +(lp5462 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92107000000000006 +sS't' +F53677.099784999999 +ss(F309.38260100000002 +F0.33971499999999999 +F0.24806400000000001 +F0.34804499999999999 +I0 +tp5463 +(dp5464 +g4 +F0.33971499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.063515199999999994 +sS'm' +F18.745100000000001 +sg8 +F0.34804499999999999 +sg9 +F309.38260100000002 +sg10 +(lp5465 +L327903731L +aL327903732L +aL327903733L +aL327903734L +aL327903735L +aL327903736L +aL327903737L +aL327903738L +aL327903739L +aL327903740L +asg12 +(lp5466 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24806400000000001 +sS't' +F53312.062961299998 +ss(F309.37898899999999 +F0.32703500000000002 +F0.47606799999999999 +F0.45406299999999999 +I0 +tp5467 +(dp5468 +g4 +F0.32703500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.42673100000000003 +sS'm' +F21.254200000000001 +sg8 +F0.45406299999999999 +sg9 +F309.37898899999999 +sg10 +(lp5469 +L344875384L +aL344875385L +aL344875386L +aL344875387L +aL344875388L +asg12 +(lp5470 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47606799999999999 +sS't' +F53668.109014200003 +ss(F309.37472100000002 +F0.33168399999999998 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp5471 +(dp5472 +g4 +F0.33168399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.047203500000000002 +sS'm' +F15.9603 +sg8 +F0.94401199999999996 +sg9 +F309.37472100000002 +sg10 +(lp5473 +L346329278L +aL346329279L +aL346329280L +aL346329281L +aL346329282L +asg12 +(lp5474 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159577899998 +ss(F309.365049 +F0.33014700000000002 +F0.86500699999999997 +F0.900007 +I0 +tp5475 +(dp5476 +g4 +F0.33014700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.33343 +sS'm' +F21.159600000000001 +sg8 +F0.900007 +sg9 +F309.365049 +sg10 +(lp5477 +L345808912L +aL345808913L +aL345808914L +aL345808915L +aL345808916L +asg12 +(lp5478 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86500699999999997 +sS't' +F53693.088303700002 +ss(F309.38651499999997 +F0.32196000000000002 +F0.77904799999999996 +F0.82905399999999996 +I0 +tp5479 +(dp5480 +g4 +F0.32196000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.5281800000000001 +sS'm' +F22.4941 +sg8 +F0.82905399999999996 +sg9 +F309.38651499999997 +sg10 +(lp5481 +L343277321L +aL343277322L +aL343277323L +aL343277324L +aL343277325L +asg12 +(lp5482 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77904799999999996 +sS't' +F53302.107463599998 +ss(F309.38261899999998 +F0.33970099999999998 +F0.77501699999999996 +F0.75403699999999996 +I0 +tp5483 +(dp5484 +g4 +F0.33970099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.080512299999999995 +sS'm' +F18.705400000000001 +sg8 +F0.75403699999999996 +sg9 +F309.38261899999998 +sg10 +(lp5485 +L342827476L +aL342827477L +aL342827478L +aL342827479L +aL342827480L +asg12 +(lp5486 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501699999999996 +sS't' +F53243.255779899999 +ss(F309.38737500000002 +F0.32950499999999999 +F0.88922900000000005 +F1.11721 +I0 +tp5487 +(dp5488 +g4 +F0.32950499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.95082599999999995 +sS'm' +F23.713899999999999 +sg8 +F1.11721 +sg9 +F309.38737500000002 +sg10 +(lp5489 +L344144770L +aL344144771L +aL344144772L +asg12 +(lp5490 +I2 +aI3 +aI4 +asg14 +F0.88922900000000005 +sS't' +F53635.136574900003 +ss(F309.37301200000002 +F0.320218 +F0.74916099999999997 +F0.97817299999999996 +I0 +tp5491 +(dp5492 +g4 +F0.320218 +sg5 +I0 +sg6 +I0 +sg7 +F0.51340399999999997 +sS'm' +F23.4252 +sg8 +F0.97817299999999996 +sg9 +F309.37301200000002 +sg10 +(lp5493 +L171388780L +aL171388781L +aL171388782L +aL171388783L +asg12 +(lp5494 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74916099999999997 +sS't' +F54005.108807299999 +ss(F309.38266499999997 +F0.31703500000000001 +F0.92373000000000005 +F1.1029100000000001 +I0 +tp5495 +(dp5496 +g4 +F0.31703500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.1706400000000001 +sS'm' +F23.596399999999999 +sg8 +F1.1029100000000001 +sg9 +F309.38266499999997 +sg10 +(lp5497 +L345542080L +aL345542081L +aL345542082L +aL345542083L +aL345542084L +asg12 +(lp5498 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92373000000000005 +sS't' +F53677.0997814 +ss(F309.38541500000002 +F0.34021400000000002 +F0.47621000000000002 +F0.45429799999999998 +I0 +tp5499 +(dp5500 +g4 +F0.34021400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.49765300000000001 +sS'm' +F21.4255 +sg8 +F0.45429799999999998 +sg9 +F309.38541500000002 +sg10 +(lp5501 +L344871399L +aL344871400L +aL344871401L +aL344871402L +aL344871403L +asg12 +(lp5502 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47621000000000002 +sS't' +F53668.109032100001 +ss(F309.387449 +F0.33213300000000001 +F0.92108100000000004 +F1.10006 +I0 +tp5503 +(dp5504 +g4 +F0.33213300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.1743700000000001 +sS'm' +F24.0092 +sg8 +F1.10006 +sg9 +F309.387449 +sg10 +(lp5505 +L345537412L +aL345537413L +aL345537414L +aL345537415L +aL345537416L +asg12 +(lp5506 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92108100000000004 +sS't' +F53677.0997947 +ss(F309.38064300000002 +F0.32855699999999999 +F0.88599399999999995 +F1.1107800000000001 +I0 +tp5507 +(dp5508 +g4 +F0.32855699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.62269600000000003 +sS'm' +F23.463200000000001 +sg8 +F1.1107800000000001 +sg9 +F309.38064300000002 +sg10 +(lp5509 +L344155687L +aL344155688L +aL344155689L +aL344155690L +asg12 +(lp5510 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88599399999999995 +sS't' +F53635.139873200002 +ss(F309.380675 +F0.32855400000000001 +F0.75022299999999997 +F0.97906599999999999 +I0 +tp5511 +(dp5512 +g4 +F0.32855400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F9.8571100000000005 +sS'm' +F25.3278 +sg8 +F0.97906599999999999 +sg9 +F309.380675 +sg10 +(lp5513 +L171388851L +aL171388852L +aL171388853L +aL171388854L +aL171388855L +asg12 +(lp5514 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.75022299999999997 +sS't' +F54005.107170199997 +ss(F309.36084099999999 +F0.317689 +F0.41432600000000003 +F0.41331800000000002 +I0 +tp5515 +(dp5516 +g4 +F0.317689 +sg5 +I0 +sg6 +I0 +sg7 +F0.40664 +sS'm' +F22.2668 +sg8 +F0.41331800000000002 +sg9 +F309.36084099999999 +sg10 +(lp5517 +L345997693L +aL345997694L +aL345997695L +aL345997696L +asg12 +(lp5518 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41432600000000003 +sS't' +F53703.094731199999 +ss(F309.38237099999998 +F0.32452900000000001 +F0.98419800000000002 +F0.98821800000000004 +I0 +tp5519 +(dp5520 +g4 +F0.32452900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.7618299999999998 +sS'm' +F23.6526 +sg8 +F0.98821800000000004 +sg9 +F309.38237099999998 +sg10 +(lp5521 +L346463343L +aL346463344L +aL346463345L +aL346463346L +aL346463347L +asg12 +(lp5522 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98419800000000002 +sS't' +F54007.119924099999 +ss(F309.382183 +F0.321737 +F0.77502300000000002 +F0.75403500000000001 +I0 +tp5523 +(dp5524 +g4 +F0.321737 +sg5 +I0 +sg6 +I0 +sg7 +F0.34374500000000002 +sS'm' +F20.576699999999999 +sg8 +F0.75403500000000001 +sg9 +F309.382183 +sg10 +(lp5525 +L342828892L +aL342828893L +aL342828894L +aL342828895L +aL342828896L +asg12 +(lp5526 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77502300000000002 +sS't' +F53243.255778699997 +ss(F309.359803 +F0.32508900000000002 +F0.64908900000000003 +F0.53908199999999995 +I0 +tp5527 +(dp5528 +g4 +F0.32508900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.3973100000000001 +sS'm' +F23.3324 +sg8 +F0.53908199999999995 +sg9 +F309.359803 +sg10 +(lp5529 +L112298213L +aL112298214L +aL112298215L +aL112298216L +aL112298217L +asg12 +(lp5530 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64908900000000003 +sS't' +F53656.106050499999 +ss(F309.38008400000001 +F0.34213500000000002 +F0.47004400000000002 +F0.50304099999999996 +I0 +tp5531 +(dp5532 +g4 +F0.34213500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.13130600000000001 +sS'm' +F18.6663 +sg8 +F0.50304099999999996 +sg9 +F309.38008400000001 +sg10 +(lp5533 +L12885298L +aL12885299L +aL12885300L +aL12885301L +aL12885302L +asg12 +(lp5534 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004400000000002 +sS't' +F53649.118515200003 +ss(F309.36151000000001 +F0.31848799999999999 +F1.0102899999999999 +F0.95342499999999997 +I0 +tp5535 +(dp5536 +g4 +F0.31848799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.3265799999999999 +sS'm' +F23.1403 +sg8 +F0.95342499999999997 +sg9 +F309.36151000000001 +sg10 +(lp5537 +L343711813L +aL343711814L +aL343711815L +aL343711816L +aL343711817L +asg12 +(lp5538 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0102899999999999 +sS't' +F53623.158704300004 +ss(F309.38275700000003 +F0.32575599999999999 +F0.77509799999999995 +F0.75411399999999995 +I0 +tp5539 +(dp5540 +g4 +F0.32575599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F9.3568800000000003 +sS'm' +F24.2056 +sg8 +F0.75411399999999995 +sg9 +F309.38275700000003 +sg10 +(lp5541 +L342830447L +aL342830448L +aL342830449L +aL342830450L +aL342830451L +asg12 +(lp5542 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77509799999999995 +sS't' +F53243.255780300002 +ss(F309.38649700000002 +F0.32197700000000001 +F0.74102500000000004 +F0.96001700000000001 +I0 +tp5543 +(dp5544 +g4 +F0.32197700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.45720899999999998 +sS'm' +F21.958200000000001 +sg8 +F0.96001700000000001 +sg9 +F309.38649700000002 +sg10 +(lp5545 +L344482135L +aL344482136L +aL344482137L +aL344482138L +aL344482139L +aL344482140L +aL344482141L +aL344482142L +aL344482143L +aL344482144L +asg12 +(lp5546 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74102500000000004 +sS't' +F53644.1238839 +ss(F309.38620100000003 +F0.338868 +F0.93311999999999995 +F0.87813200000000002 +I0 +tp5547 +(dp5548 +g4 +F0.338868 +sg5 +I0 +sg6 +I0 +sg7 +F0.30328699999999997 +sS'm' +F22.473299999999998 +sg8 +F0.87813200000000002 +sg9 +F309.38620100000003 +sg10 +(lp5549 +L345028734L +aL345028735L +aL345028736L +aL345028737L +asg12 +(lp5550 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93311999999999995 +sS't' +F53670.115546599998 +ss(F309.36845699999998 +F0.33944400000000002 +F0.62493399999999999 +F0.780918 +I0 +tp5551 +(dp5552 +g4 +F0.33944400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.3439800000000002 +sS'm' +F23.1081 +sg8 +F0.780918 +sg9 +F309.36845699999998 +sg10 +(lp5553 +L346174279L +aL346174280L +aL346174281L +aL346174282L +aL346174283L +asg12 +(lp5554 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.62493399999999999 +sS't' +F53704.071640900002 +ss(F309.364531 +F0.32447999999999999 +F0.248198 +F0.34812900000000002 +I0 +tp5555 +(dp5556 +g4 +F0.32447999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.0259999999999998 +sS'm' +F22.896599999999999 +sg8 +F0.34812900000000002 +sg9 +F309.364531 +sg10 +(lp5557 +L327905842L +aL327905843L +aL327905844L +aL327905845L +aL327905846L +asg12 +(lp5558 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248198 +sS't' +F53312.062911100002 +ss(F309.38197200000002 +F0.336144 +F0.74285999999999996 +F0.96080500000000002 +I0 +tp5559 +(dp5560 +g4 +F0.336144 +sg5 +I0 +sg6 +I0 +sg7 +F1.28077 +sS'm' +F24.301100000000002 +sg8 +F0.96080500000000002 +sg9 +F309.38197200000002 +sg10 +(lp5561 +L344476011L +aL344476012L +aL344476013L +aL344476014L +asg12 +(lp5562 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74285999999999996 +sS't' +F53644.125529800003 +ss(F309.38260100000002 +F0.33969500000000002 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp5563 +(dp5564 +g4 +F0.33969500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.054669700000000002 +sS'm' +F18.712800000000001 +sg8 +F1.0700000000000001 +sg9 +F309.38260100000002 +sg10 +(lp5565 +L345676035L +aL345676036L +aL345676037L +aL345676038L +aL345676039L +aL345676040L +aL345676041L +aL345676042L +aL345676043L +aL345676044L +asg12 +(lp5566 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086446300003 +ss(F309.37237099999999 +F0.32938499999999998 +F0.88543099999999997 +F1.1102700000000001 +I0 +tp5567 +(dp5568 +g4 +F0.32938499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1879200000000001 +sS'm' +F24.1769 +sg8 +F1.1102700000000001 +sg9 +F309.37237099999999 +sg10 +(lp5569 +L344155549L +aL344155550L +aL344155551L +aL344155552L +asg12 +(lp5570 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88543099999999997 +sS't' +F53635.139850200001 +ss(F309.365072 +F0.33017600000000003 +F0.73103200000000002 +F0.73202599999999995 +I0 +tp5571 +(dp5572 +g4 +F0.33017600000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.54533799999999999 +sS'm' +F21.092400000000001 +sg8 +F0.73202599999999995 +sg9 +F309.365072 +sg10 +(lp5573 +L344601498L +aL344601499L +aL344601500L +aL344601501L +aL344601502L +asg12 +(lp5574 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.73103200000000002 +sS't' +F53654.158475099997 +ss(F309.37773700000002 +F0.32560800000000001 +F0.47622399999999998 +F0.45416000000000001 +I0 +tp5575 +(dp5576 +g4 +F0.32560800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.21373900000000001 +sS'm' +F21.830300000000001 +sg8 +F0.45416000000000001 +sg9 +F309.37773700000002 +sg10 +(lp5577 +L344875380L +aL344875381L +aL344875382L +aL344875383L +asg12 +(lp5578 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47622399999999998 +sS't' +F53668.110669200003 +ss(F309.36456199999998 +F0.32450200000000001 +F0.73107999999999995 +F0.73205600000000004 +I0 +tp5579 +(dp5580 +g4 +F0.32450200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.169597 +sS'm' +F20.987300000000001 +sg8 +F0.73205600000000004 +sg9 +F309.36456199999998 +sg10 +(lp5581 +L344603111L +aL344603112L +aL344603113L +aL344603114L +asg12 +(lp5582 +I1 +aI2 +aI3 +aI4 +asg14 +F0.73107999999999995 +sS't' +F53654.160132099998 +ss(F309.38217900000001 +F0.32172200000000001 +F0.92100400000000004 +F1.1000099999999999 +I0 +tp5583 +(dp5584 +g4 +F0.32172200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.18973999999999999 +sS'm' +F20.7652 +sg8 +F1.1000099999999999 +sg9 +F309.38217900000001 +sg10 +(lp5585 +L345535335L +aL345535336L +aL345535337L +aL345535338L +aL345535339L +asg12 +(lp5586 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100400000000004 +sS't' +F53677.099779999997 +ss(F309.38262800000001 +F0.33970099999999998 +F0.92400800000000005 +F1.0300100000000001 +I0 +tp5587 +(dp5588 +g4 +F0.33970099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.057390700000000003 +sS'm' +F18.709099999999999 +sg8 +F1.0300100000000001 +sg9 +F309.38262800000001 +sg10 +(lp5589 +L345217557L +aL345217558L +aL345217559L +aL345217560L +aL345217561L +asg12 +(lp5590 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400800000000005 +sS't' +F53673.0818592 +ss(F309.38776000000001 +F0.32195699999999999 +F0.82844600000000002 +F0.94659899999999997 +I0 +tp5591 +(dp5592 +g4 +F0.32195699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.0392900000000003 +sS'm' +F24.006399999999999 +sg8 +F0.94659899999999997 +sg9 +F309.38776000000001 +sg10 +(lp5593 +L343127852L +aL343127853L +aL343127854L +aL343127855L +aL343127856L +asg12 +(lp5594 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82844600000000002 +sS't' +F53288.1117983 +ss(F309.365048 +F0.330123 +F0.92400700000000002 +F1.0300100000000001 +I0 +tp5595 +(dp5596 +g4 +F0.330123 +sg5 +I0 +sg6 +I0 +sg7 +F0.27096999999999999 +sS'm' +F21.073799999999999 +sg8 +F1.0300100000000001 +sg9 +F309.365048 +sg10 +(lp5597 +L345217305L +aL345217306L +aL345217307L +aL345217308L +aL345217309L +asg12 +(lp5598 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400700000000002 +sS't' +F53673.081810399999 +ss(F309.385423 +F0.34014699999999998 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp5599 +(dp5600 +g4 +F0.34014699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.319859 +sS'm' +F21.5672 +sg8 +F1.0700099999999999 +sg9 +F309.385423 +sg10 +(lp5601 +L345679439L +aL345679440L +aL345679441L +aL345679442L +aL345679443L +asg12 +(lp5602 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900099999999999 +sS't' +F53680.086454199998 +ss(F309.36672800000002 +F0.33557399999999998 +F1.0904799999999999 +F1.0706599999999999 +I0 +tp5603 +(dp5604 +g4 +F0.33557399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.35408 +sS'm' +F24.5059 +sg8 +F1.0706599999999999 +sg9 +F309.36672800000002 +sg10 +(lp5605 +L345685668L +aL345685669L +aL345685670L +aL345685671L +asg12 +(lp5606 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0904799999999999 +sS't' +F53680.0880607 +ss(F309.38624600000003 +F0.338918 +F0.85134200000000004 +F0.91323600000000005 +I0 +tp5607 +(dp5608 +g4 +F0.338918 +sg5 +I0 +sg6 +I0 +sg7 +F1.3672899999999999 +sS'm' +F22.487300000000001 +sg8 +F0.91323600000000005 +sg9 +F309.38624600000003 +sg10 +(lp5609 +L343880268L +aL343880269L +aL343880270L +aL343880271L +aL343880272L +asg12 +(lp5610 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85134200000000004 +sS't' +F53626.1449851 +ss(F309.377703 +F0.345667 +F0.61633800000000005 +F0.77558400000000005 +I0 +tp5611 +(dp5612 +g4 +F0.345667 +sg5 +I0 +sg6 +I0 +sg7 +F5.5579499999999999 +sS'm' +F24.046099999999999 +sg8 +F0.77558400000000005 +sg9 +F309.377703 +sg10 +(lp5613 +L346172163L +aL346172164L +aL346172165L +aL346172166L +aL346172167L +asg12 +(lp5614 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61633800000000005 +sS't' +F53704.071666600001 +ss(F309.37292500000001 +F0.32022 +F0.27008300000000002 +F0.37345 +I0 +tp5615 +(dp5616 +g4 +F0.32022 +sg5 +I0 +sg6 +I0 +sg7 +F0.68032300000000001 +sS'm' +F22.930599999999998 +sg8 +F0.37345 +sg9 +F309.37292500000001 +sg10 +(lp5617 +L327908389L +aL327908390L +aL327908391L +aL327908392L +asg12 +(lp5618 +I1 +aI2 +aI3 +aI4 +asg14 +F0.27008300000000002 +sS't' +F53312.064592900002 +ss(F309.37310000000002 +F0.32444200000000001 +F1.01004 +F0.95305499999999999 +I0 +tp5619 +(dp5620 +g4 +F0.32444200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.43608400000000003 +sS'm' +F22.824300000000001 +sg8 +F0.95305499999999999 +sg9 +F309.37310000000002 +sg10 +(lp5621 +L343715824L +aL343715825L +aL343715826L +aL343715827L +asg12 +(lp5622 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01004 +sS't' +F53623.160394899998 +ss(F309.38777199999998 +F0.32188499999999998 +F1.0504800000000001 +F0.94476899999999997 +I0 +tp5623 +(dp5624 +g4 +F0.32188499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.9614799999999999 +sS'm' +F24.1982 +sg8 +F0.94476899999999997 +sg9 +F309.38777199999998 +sg10 +(lp5625 +L346336667L +aL346336668L +aL346336669L +aL346336670L +aL346336671L +asg12 +(lp5626 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0504800000000001 +sS't' +F53974.159614099997 +ss(F309.38650799999999 +F0.32194400000000001 +F0.933029 +F0.87803200000000003 +I0 +tp5627 +(dp5628 +g4 +F0.32194400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.08634 +sS'm' +F20.991199999999999 +sg8 +F0.87803200000000003 +sg9 +F309.38650799999999 +sg10 +(lp5629 +L345030948L +aL345030949L +aL345030950L +aL345030951L +aL345030947L +asg12 +(lp5630 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.933029 +sS't' +F53670.115547499998 +ss(F309.363113 +F0.33103700000000003 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp5631 +(dp5632 +g4 +F0.33103700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.071804400000000004 +sS'm' +F18.7942 +sg8 +F0.82900499999999999 +sg9 +F309.363113 +sg10 +(lp5633 +L343271380L +aL343271381L +aL343271382L +aL343271383L +aL343271384L +aL343271385L +aL343271386L +aL343271387L +aL343271388L +aL343271389L +asg12 +(lp5634 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.107398599997 +ss(F309.382183 +F0.32175100000000001 +F1.0100100000000001 +F0.992008 +I0 +tp5635 +(dp5636 +g4 +F0.32175100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.245585 +sS'm' +F20.750599999999999 +sg8 +F0.992008 +sg9 +F309.382183 +sg10 +(lp5637 +L342964617L +aL342964618L +aL342964619L +aL342964620L +aL342964621L +asg12 +(lp5638 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134605400002 +ss(F309.38624800000002 +F0.33885700000000002 +F0.77707599999999999 +F0.757795 +I0 +tp5639 +(dp5640 +g4 +F0.33885700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.69547499999999995 +sS'm' +F21.3643 +sg8 +F0.757795 +sg9 +F309.38624800000002 +sg10 +(lp5641 +L342830501L +aL342830502L +aL342830503L +aL342830504L +aL342830505L +asg12 +(lp5642 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77707599999999999 +sS't' +F53243.255790000003 +ss(F309.37296600000002 +F0.32107000000000002 +F1.05246 +F0.94658299999999995 +I0 +tp5643 +(dp5644 +g4 +F0.32107000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.4059299999999999 +sS'm' +F24.4041 +sg8 +F0.94658299999999995 +sg9 +F309.37296600000002 +sg10 +(lp5645 +L346337859L +aL346337860L +aL346337861L +asg12 +(lp5646 +I1 +aI2 +aI3 +asg14 +F1.05246 +sS't' +F53974.161231400001 +ss(F309.38889499999999 +F0.34375299999999998 +F0.88501099999999999 +F1.1100099999999999 +I0 +tp5647 +(dp5648 +g4 +F0.34375299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.032847599999999998 +sS'm' +F16.1662 +sg8 +F1.1100099999999999 +sg9 +F309.38889499999999 +sg10 +(lp5649 +L344144670L +aL344144671L +aL344144672L +aL344144673L +aL344144674L +asg12 +(lp5650 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88501099999999999 +sS't' +F53635.138237699997 +ss(F309.37902200000002 +F0.32702399999999998 +F0.64908600000000005 +F0.53908100000000003 +I0 +tp5651 +(dp5652 +g4 +F0.32702399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1483300000000001 +sS'm' +F21.866299999999999 +sg8 +F0.53908100000000003 +sg9 +F309.37902200000002 +sg10 +(lp5653 +L112299393L +aL112299394L +aL112299395L +aL112299396L +aL112299397L +asg12 +(lp5654 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64908600000000005 +sS't' +F53656.106103899998 +ss(F309.36400700000002 +F0.31754399999999999 +F0.74102599999999996 +F0.96002200000000004 +I0 +tp5655 +(dp5656 +g4 +F0.31754399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.71319900000000003 +sS'm' +F22.510400000000001 +sg8 +F0.96002200000000004 +sg9 +F309.36400700000002 +sg10 +(lp5657 +L344482737L +aL344482738L +aL344482739L +aL344482740L +aL344482741L +aL344482742L +aL344482743L +aL344482744L +aL344482745L +aL344482746L +asg12 +(lp5658 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74102599999999996 +sS't' +F53644.123821399997 +ss(F309.36771199999998 +F0.33362000000000003 +F0.82981000000000005 +F0.94617300000000004 +I0 +tp5659 +(dp5660 +g4 +F0.33362000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F5.2011200000000004 +sS'm' +F24.278500000000001 +sg8 +F0.94617300000000004 +sg9 +F309.36771199999998 +sg10 +(lp5661 +L343130015L +aL343130016L +aL343130017L +aL343130018L +aL343130019L +asg12 +(lp5662 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82981000000000005 +sS't' +F53288.111742599998 +ss(F309.36489999999998 +F0.33455800000000002 +F1.01417 +F0.99953000000000003 +I0 +tp5663 +(dp5664 +g4 +F0.33455800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.8526099999999999 +sS'm' +F23.5061 +sg8 +F0.99953000000000003 +sg9 +F309.36489999999998 +sg10 +(lp5665 +L342970315L +aL342970316L +aL342970317L +aL342970318L +aL342970319L +asg12 +(lp5666 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01417 +sS't' +F53270.134557400001 +ss(F309.36311599999999 +F0.33104899999999998 +F0.47602100000000003 +F0.45402199999999998 +I0 +tp5667 +(dp5668 +g4 +F0.33104899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.068523799999999996 +sS'm' +F18.821300000000001 +sg8 +F0.45402199999999998 +sg9 +F309.36311599999999 +sg10 +(lp5669 +L344871120L +aL344871121L +aL344871122L +aL344871123L +aL344871124L +aL344871125L +aL344871126L +aL344871127L +aL344871128L +aL344871129L +asg12 +(lp5670 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602100000000003 +sS't' +F53668.108970100002 +ss(F309.36452700000001 +F0.32450899999999999 +F0.74900699999999998 +F0.97800900000000002 +I0 +tp5671 +(dp5672 +g4 +F0.32450899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.56345 +sS'm' +F23.3108 +sg8 +F0.97800900000000002 +sg9 +F309.36452700000001 +sg10 +(lp5673 +L171384065L +aL171384066L +aL171384067L +aL171384068L +aL171384069L +asg12 +(lp5674 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900699999999998 +sS't' +F54005.107125299997 +ss(F309.38753700000001 +F0.33212199999999997 +F0.77929700000000002 +F0.829152 +I0 +tp5675 +(dp5676 +g4 +F0.33212199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F4.9340999999999999 +sS'm' +F24.615600000000001 +sg8 +F0.829152 +sg9 +F309.38753700000001 +sg10 +(lp5677 +L343279119L +aL343279120L +aL343279121L +aL343279122L +asg12 +(lp5678 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77929700000000002 +sS't' +F53302.109124900002 +ss(F309.38217800000001 +F0.32171899999999998 +F0.85100600000000004 +F0.91300999999999999 +I0 +tp5679 +(dp5680 +g4 +F0.32171899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.031958300000000002 +sS'm' +F18.8582 +sg8 +F0.91300999999999999 +sg9 +F309.38217800000001 +sg10 +(lp5681 +L343876311L +aL343876312L +aL343876303L +aL343876304L +aL343876305L +aL343876306L +aL343876307L +aL343876308L +aL343876309L +aL343876310L +asg12 +(lp5682 +I3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.85100600000000004 +sS't' +F53626.144144500002 +ss(F309.37281999999999 +F0.33525500000000003 +F1.0100100000000001 +F0.99200900000000003 +I0 +tp5683 +(dp5684 +g4 +F0.33525500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.66267100000000001 +sS'm' +F21.894200000000001 +sg8 +F0.99200900000000003 +sg9 +F309.37281999999999 +sg10 +(lp5685 +L342964485L +aL342964486L +aL342964487L +aL342964488L +aL342964489L +asg12 +(lp5686 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134579400001 +ss(F309.38262400000002 +F0.33968300000000001 +F0.77900499999999995 +F0.82900600000000002 +I0 +tp5687 +(dp5688 +g4 +F0.33968300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.070400000000000004 +sS'm' +F18.7591 +sg8 +F0.82900600000000002 +sg9 +F309.38262400000002 +sg10 +(lp5689 +L343271635L +aL343271636L +aL343271637L +aL343271638L +aL343271639L +asg12 +(lp5690 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900499999999995 +sS't' +F53302.107452800003 +ss(F309.38274000000001 +F0.32575500000000002 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp5691 +(dp5692 +g4 +F0.32575500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.9518599999999999 +sS'm' +F24.093599999999999 +sg8 +F1.0700099999999999 +sg9 +F309.38274000000001 +sg10 +(lp5693 +L345679394L +aL345679396L +aL345679397L +aL345679398L +aL345679399L +aL345679400L +aL345679401L +aL345679402L +aL345679403L +aL345679395L +asg12 +(lp5694 +I0 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI1 +asg14 +F1.0900099999999999 +sS't' +F53680.086446699999 +ss(F309.38084199999997 +F0.34455000000000002 +F1.01027 +F0.99223099999999997 +I0 +tp5695 +(dp5696 +g4 +F0.34455000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.50149 +sS'm' +F23.355599999999999 +sg8 +F0.99223099999999997 +sg9 +F309.38084199999997 +sg10 +(lp5697 +L342970554L +aL342970555L +aL342970556L +aL342970557L +aL342970558L +asg12 +(lp5698 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01027 +sS't' +F53270.134601700003 +ss(F309.387947 +F0.34224700000000002 +F1.0100100000000001 +F0.99201499999999998 +I0 +tp5699 +(dp5700 +g4 +F0.34224700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.83084599999999997 +sS'm' +F22.1402 +sg8 +F0.99201499999999998 +sg9 +F309.387947 +sg10 +(lp5701 +L342962262L +aL342962263L +aL342962264L +aL342962265L +aL342962266L +asg12 +(lp5702 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.1346214 +ss(F309.37304499999999 +F0.32022899999999999 +F1.0101100000000001 +F0.99215699999999996 +I0 +tp5703 +(dp5704 +g4 +F0.32022899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.24654599999999999 +sS'm' +F21.798100000000002 +sg8 +F0.99215699999999996 +sg9 +F309.37304499999999 +sg10 +(lp5705 +L342968226L +aL342968227L +aL342968228L +aL342968225L +asg12 +(lp5706 +I2 +aI3 +aI4 +aI1 +asg14 +F1.0101100000000001 +sS't' +F53270.1329214 +ss(F309.36308100000002 +F0.32270399999999999 +F0.92288899999999996 +F1.1014999999999999 +I0 +tp5707 +(dp5708 +g4 +F0.32270399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.5009100000000002 +sS'm' +F24.108599999999999 +sg8 +F1.1014999999999999 +sg9 +F309.36308100000002 +sg10 +(lp5709 +L345541893L +aL345541894L +aL345541895L +aL345541896L +aL345541897L +asg12 +(lp5710 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92288899999999996 +sS't' +F53677.099727000001 +ss(F309.36006099999997 +F0.32051299999999999 +F0.50603900000000002 +F0.45910299999999998 +I0 +tp5711 +(dp5712 +g4 +F0.32051299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.14624400000000001 +sS'm' +F19.606200000000001 +sg8 +F0.45910299999999998 +sg9 +F309.36006099999997 +sg10 +(lp5713 +L153249995L +aL153249996L +aL153249997L +aL153249998L +aL153249999L +aL153250000L +aL153250001L +aL153250002L +aL153250003L +aL153250004L +asg12 +(lp5714 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50603900000000002 +sS't' +F53702.083937000003 +ss(F309.36451899999997 +F0.324457 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp5715 +(dp5716 +g4 +F0.324457 +sg5 +I0 +sg6 +I0 +sg7 +F1.45722 +sS'm' +F23.314599999999999 +sg8 +F1.0700099999999999 +sg9 +F309.36451899999997 +sg10 +(lp5717 +L345679054L +aL345679055L +aL345679056L +aL345679057L +aL345679058L +asg12 +(lp5718 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.0863961 +ss(F309.36668800000001 +F0.33560099999999998 +F0.85241100000000003 +F0.91469500000000004 +I0 +tp5719 +(dp5720 +g4 +F0.33560099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.46218599999999999 +sS'm' +F22.2578 +sg8 +F0.91469500000000004 +sg9 +F309.36668800000001 +sg10 +(lp5721 +L343881870L +aL343881871L +aL343881872L +asg12 +(lp5722 +I2 +aI3 +aI4 +asg14 +F0.85241100000000003 +sS't' +F53626.143272200003 +ss(F309.38891100000001 +F0.34376499999999999 +F0.565052 +F0.51403100000000002 +I0 +tp5723 +(dp5724 +g4 +F0.34376499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.043082200000000001 +sS'm' +F16.2151 +sg8 +F0.51403100000000002 +sg9 +F309.38891100000001 +sg10 +(lp5725 +L344709053L +aL344709054L +aL344709055L +aL344709056L +aL344709057L +aL344709058L +aL344709059L +aL344709060L +aL344709061L +aL344709062L +asg12 +(lp5726 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.565052 +sS't' +F53654.158540099997 +ss(F309.38530400000002 +F0.33195200000000002 +F0.47616999999999998 +F0.45415899999999998 +I0 +tp5727 +(dp5728 +g4 +F0.33195200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.109613 +sS'm' +F20.9755 +sg8 +F0.45415899999999998 +sg9 +F309.38530400000002 +sg10 +(lp5729 +L344873536L +aL344873537L +aL344873538L +aL344873539L +asg12 +(lp5730 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47616999999999998 +sS't' +F53668.110690200003 +ss(F309.38201800000002 +F0.34295100000000001 +F0.93305700000000003 +F0.87805599999999995 +I0 +tp5731 +(dp5732 +g4 +F0.34295100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.58584700000000001 +sS'm' +F21.905000000000001 +sg8 +F0.87805599999999995 +sg9 +F309.38201800000002 +sg10 +(lp5733 +L345024682L +aL345024683L +aL345024684L +aL345024685L +aL345024686L +asg12 +(lp5734 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93305700000000003 +sS't' +F53670.1138766 +ss(F309.38532500000002 +F0.33195599999999997 +F0.64915999999999996 +F0.53917400000000004 +I0 +tp5735 +(dp5736 +g4 +F0.33195599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.28421400000000002 +sS'm' +F21.084900000000001 +sg8 +F0.53917400000000004 +sg9 +F309.38532500000002 +sg10 +(lp5737 +L112299433L +aL112299434L +aL112299435L +aL112299436L +asg12 +(lp5738 +I1 +aI2 +aI3 +aI4 +asg14 +F0.64915999999999996 +sS't' +F53656.107779799997 +ss(F309.38622099999998 +F0.33890199999999998 +F1.0500700000000001 +F0.94407600000000003 +I0 +tp5739 +(dp5740 +g4 +F0.33890199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.7117899999999999 +sS'm' +F23.0273 +sg8 +F0.94407600000000003 +sg9 +F309.38622099999998 +sg10 +(lp5741 +L346336621L +aL346336622L +aL346336623L +aL346336624L +aL346336625L +asg12 +(lp5742 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500700000000001 +sS't' +F53974.159609800001 +ss(F309.365994 +F0.33172600000000002 +F0.92400700000000002 +F1.0300100000000001 +I0 +tp5743 +(dp5744 +g4 +F0.33172600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.17646200000000001 +sS'm' +F20.542100000000001 +sg8 +F1.0300100000000001 +sg9 +F309.365994 +sg10 +(lp5745 +L345217310L +aL345217311L +aL345217312L +aL345217313L +aL345217314L +asg12 +(lp5746 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400700000000002 +sS't' +F53673.081812999997 +ss(F309.38936000000001 +F0.32214300000000001 +F0.933083 +F0.87808900000000001 +I0 +tp5747 +(dp5748 +g4 +F0.32214300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.24632299999999999 +sS'm' +F22.242899999999999 +sg8 +F0.87808900000000001 +sg9 +F309.38936000000001 +sg10 +(lp5749 +L345030952L +aL345030953L +aL345030954L +aL345030955L +asg12 +(lp5750 +I1 +aI2 +aI3 +aI4 +asg14 +F0.933083 +sS't' +F53670.1155554 +ss(F309.37301200000002 +F0.32445600000000002 +F0.24918000000000001 +F0.34859099999999998 +I0 +tp5751 +(dp5752 +g4 +F0.32445600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.94137 +sS'm' +F23.622599999999998 +sg8 +F0.34859099999999998 +sg9 +F309.37301200000002 +sg10 +(lp5753 +L327906553L +aL327906554L +aL327906555L +aL327906556L +aL327906557L +asg12 +(lp5754 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24918000000000001 +sS't' +F53312.062934599999 +ss(F309.36454300000003 +F0.32447999999999999 +F0.64905999999999997 +F0.53907000000000005 +I0 +tp5755 +(dp5756 +g4 +F0.32447999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.26826299999999997 +sS'm' +F21.020299999999999 +sg8 +F0.53907000000000005 +sg9 +F309.36454300000003 +sg10 +(lp5757 +L112298219L +aL112298220L +aL112298221L +aL112298222L +aL112298218L +asg12 +(lp5758 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.64905999999999997 +sS't' +F53656.107722100001 +ss(F309.38366200000002 +F0.34499200000000002 +F0.93301800000000001 +F0.87801899999999999 +I0 +tp5759 +(dp5760 +g4 +F0.34499200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.36447800000000002 +sS'm' +F21.362300000000001 +sg8 +F0.87801899999999999 +sg9 +F309.38366200000002 +sg10 +(lp5761 +L345027409L +aL345027410L +aL345027411L +aL345027412L +aL345027413L +asg12 +(lp5762 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301800000000001 +sS't' +F53670.113881099998 +ss(F309.382746 +F0.32577800000000001 +F0.61605200000000004 +F0.77504300000000004 +I0 +tp5763 +(dp5764 +g4 +F0.32577800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.76241 +sS'm' +F22.795999999999999 +sg8 +F0.77504300000000004 +sg9 +F309.382746 +sg10 +(lp5765 +L346171343L +aL346171344L +aL346171345L +aL346171346L +aL346171347L +asg12 +(lp5766 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61605200000000004 +sS't' +F53704.071680599998 +ss(F309.38397700000002 +F0.31876399999999999 +F0.98416800000000004 +F0.98807699999999998 +I0 +tp5767 +(dp5768 +g4 +F0.31876399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F3.2169500000000002 +sS'm' +F23.8215 +sg8 +F0.98807699999999998 +sg9 +F309.38397700000002 +sg10 +(lp5769 +L346466032L +aL346466033L +aL346466034L +aL346466035L +aL346466036L +aL346466037L +aL346466038L +aL346466039L +aL346466040L +asg12 +(lp5770 +I0 +aI1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98416800000000004 +sS't' +F54007.119928599997 +ss(F309.38566200000002 +F0.32635399999999998 +F0.47639599999999999 +F0.45448 +I0 +tp5771 +(dp5772 +g4 +F0.32635399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.19179399999999999 +sS'm' +F21.700500000000002 +sg8 +F0.45448 +sg9 +F309.38566200000002 +sg10 +(lp5773 +L344876322L +aL344876323L +aL344876324L +aL344876325L +asg12 +(lp5774 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47639599999999999 +sS't' +F53668.110691200003 +ss(F309.37195600000001 +F0.341057 +F0.93301699999999999 +F0.87801799999999997 +I0 +tp5775 +(dp5776 +g4 +F0.341057 +sg5 +I0 +sg6 +I0 +sg7 +F0.83180100000000001 +sS'm' +F22.296299999999999 +sg8 +F0.87801799999999997 +sg9 +F309.37195600000001 +sg10 +(lp5777 +L345028327L +aL345028328L +aL345028329L +aL345028330L +aL345028331L +asg12 +(lp5778 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301699999999999 +sS't' +F53670.113848599998 +ss(F309.38564300000002 +F0.32636900000000002 +F0.92404900000000001 +F1.0300400000000001 +I0 +tp5779 +(dp5780 +g4 +F0.32636900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.6629399999999999 +sS'm' +F24.263400000000001 +sg8 +F1.0300400000000001 +sg9 +F309.38564300000002 +sg10 +(lp5781 +L345224164L +aL345224165L +aL345224166L +aL345224167L +aL345224168L +asg12 +(lp5782 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92404900000000001 +sS't' +F53673.081867599998 +ss(F309.37236300000001 +F0.32412800000000003 +F0.61636000000000002 +F0.77519300000000002 +I0 +tp5783 +(dp5784 +g4 +F0.32412800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.72715 +sS'm' +F22.776 +sg8 +F0.77519300000000002 +sg9 +F309.37236300000001 +sg10 +(lp5785 +L346172108L +aL346172109L +aL346172110L +aL346172111L +aL346172112L +asg12 +(lp5786 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61636000000000002 +sS't' +F53704.071651799997 +ss(F309.38937399999998 +F0.32217099999999999 +F0.775339 +F0.75419000000000003 +I0 +tp5787 +(dp5788 +g4 +F0.32217099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.35797800000000002 +sS'm' +F19.93 +sg8 +F0.75419000000000003 +sg9 +F309.38937399999998 +sg10 +(lp5789 +L342830533L +aL342830530L +aL342830531L +aL342830532L +asg12 +(lp5790 +I4 +aI1 +aI2 +aI3 +asg14 +F0.775339 +sS't' +F53243.256627900002 +ss(F309.374754 +F0.33170100000000002 +F0.64901299999999995 +F0.53901699999999997 +I0 +tp5791 +(dp5792 +g4 +F0.33170100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.033778700000000002 +sS'm' +F15.9755 +sg8 +F0.53901699999999997 +sg9 +F309.374754 +sg10 +(lp5793 +L112295415L +aL112295416L +aL112295417L +aL112295418L +aL112295419L +asg12 +(lp5794 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901299999999995 +sS't' +F53656.106092000002 +ss(F309.38259900000003 +F0.33968999999999999 +F0.828009 +F0.94500799999999996 +I0 +tp5795 +(dp5796 +g4 +F0.33968999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.032602199999999998 +sS'm' +F16.552099999999999 +sg8 +F0.94500799999999996 +sg9 +F309.38259900000003 +sg10 +(lp5797 +L343120652L +aL343120653L +aL343120644L +aL343120645L +aL343120646L +aL343120647L +aL343120648L +aL343120649L +aL343120650L +aL343120651L +asg12 +(lp5798 +I3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.828009 +sS't' +F53288.110954700001 +ss(F309.38890099999998 +F0.34375899999999998 +F0.77501299999999995 +F0.75403299999999995 +I0 +tp5799 +(dp5800 +g4 +F0.34375899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.043110099999999998 +sS'm' +F16.1998 +sg8 +F0.75403299999999995 +sg9 +F309.38890099999998 +sg10 +(lp5801 +L342825809L +aL342825810L +aL342825811L +aL342825812L +aL342825813L +aL342825814L +aL342825815L +aL342825816L +aL342825817L +aL342825818L +asg12 +(lp5802 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501299999999995 +sS't' +F53243.2557973 +ss(F309.38750499999998 +F0.332179 +F0.82821900000000004 +F0.94511900000000004 +I0 +tp5803 +(dp5804 +g4 +F0.332179 +sg5 +I0 +sg6 +I0 +sg7 +F0.62310900000000002 +sS'm' +F23.249600000000001 +sg8 +F0.94511900000000004 +sg9 +F309.38750499999998 +sg10 +(lp5805 +L343126117L +aL343126118L +aL343126119L +aL343126120L +asg12 +(lp5806 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82821900000000004 +sS't' +F53288.1134561 +ss(F309.385426 +F0.34015400000000001 +F1.08003 +F1.01003 +I0 +tp5807 +(dp5808 +g4 +F0.34015400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.50007500000000005 +sS'm' +F21.9468 +sg8 +F1.01003 +sg9 +F309.385426 +sg10 +(lp5809 +L345368291L +aL345368292L +aL345368293L +aL345368294L +aL345368295L +asg12 +(lp5810 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08003 +sS't' +F53675.078756299998 +ss(F309.37797399999999 +F0.33786100000000002 +F0.64901299999999995 +F0.53901699999999997 +I0 +tp5811 +(dp5812 +g4 +F0.33786100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.065618700000000002 +sS'm' +F18.426200000000001 +sg8 +F0.53901699999999997 +sg9 +F309.37797399999999 +sg10 +(lp5813 +L112295439L +aL112295440L +aL112295441L +aL112295442L +aL112295443L +asg12 +(lp5814 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901299999999995 +sS't' +F53656.106100899997 +ss(F309.382383 +F0.32449899999999998 +F1.09006 +F1.0700400000000001 +I0 +tp5815 +(dp5816 +g4 +F0.32449899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.62012 +sS'm' +F23.431899999999999 +sg8 +F1.0700400000000001 +sg9 +F309.382383 +sg10 +(lp5817 +L345679404L +aL345679405L +aL345679406L +aL345679407L +aL345679408L +asg12 +(lp5818 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09006 +sS't' +F53680.086445699999 +ss(F309.38898399999999 +F0.34517799999999998 +F0.77502599999999999 +F0.75403900000000001 +I0 +tp5819 +(dp5820 +g4 +F0.34517799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.49501299999999998 +sS'm' +F20.885200000000001 +sg8 +F0.75403900000000001 +sg9 +F309.38898399999999 +sg10 +(lp5821 +L342825819L +aL342825820L +aL342825821L +aL342825822L +aL342825823L +asg12 +(lp5822 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77502599999999999 +sS't' +F53243.255797600003 +ss(F309.36486600000001 +F0.33454600000000001 +F0.61645700000000003 +F0.77537299999999998 +I0 +tp5823 +(dp5824 +g4 +F0.33454600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F9.9775100000000005 +sS'm' +F24.690100000000001 +sg8 +F0.77537299999999998 +sg9 +F309.36486600000001 +sg10 +(lp5825 +L346171980L +aL346171981L +aL346171982L +aL346171983L +aL346171984L +aL346171985L +aL346171986L +aL346171987L +aL346171988L +asg12 +(lp5826 +I0 +aI1 +aI2 +aI3 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61645700000000003 +sS't' +F53704.071630899998 +ss(F309.38529199999999 +F0.33195799999999998 +F0.248449 +F0.348244 +I0 +tp5827 +(dp5828 +g4 +F0.33195799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.04033 +sS'm' +F22.9025 +sg8 +F0.348244 +sg9 +F309.38529199999999 +sg10 +(lp5829 +L327906655L +aL327906656L +aL327906657L +aL327906658L +aL327906659L +asg12 +(lp5830 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248449 +sS't' +F53312.062968799997 +ss(F309.38935199999997 +F0.32214500000000001 +F1.05006 +F0.94406599999999996 +I0 +tp5831 +(dp5832 +g4 +F0.32214500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.0560999999999998 +sS'm' +F23.981000000000002 +sg8 +F0.94406599999999996 +sg9 +F309.38935199999997 +sg10 +(lp5833 +L346336662L +aL346336663L +aL346336664L +aL346336665L +aL346336666L +asg12 +(lp5834 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05006 +sS't' +F53974.159618500002 +ss(F309.381911 +F0.33617900000000001 +F0.921377 +F1.1003099999999999 +I0 +tp5835 +(dp5836 +g4 +F0.33617900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.4466300000000001 +sS'm' +F24.5823 +sg8 +F1.1003099999999999 +sg9 +F309.381911 +sg10 +(lp5837 +L345532356L +aL345532357L +aL345532358L +aL345532359L +asg12 +(lp5838 +I1 +aI2 +aI3 +aI4 +asg14 +F0.921377 +sS't' +F53677.101437700003 +ss(F309.38006100000001 +F0.34213199999999999 +F0.74100600000000005 +F0.96000600000000003 +I0 +tp5839 +(dp5840 +g4 +F0.34213199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.055544799999999998 +sS'm' +F18.617000000000001 +sg8 +F0.96000600000000003 +sg9 +F309.38006100000001 +sg10 +(lp5841 +L344475906L +aL344475907L +aL344475908L +aL344475909L +aL344475910L +asg12 +(lp5842 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.123866000002 +ss(F309.38065699999999 +F0.32855000000000001 +F0.98553999999999997 +F0.99001499999999998 +I0 +tp5843 +(dp5844 +g4 +F0.32855000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.47138200000000002 +sS'm' +F22.881 +sg8 +F0.99001499999999998 +sg9 +F309.38065699999999 +sg10 +(lp5845 +L346467853L +aL346467854L +aL346467855L +aL346467856L +asg12 +(lp5846 +I1 +aI2 +aI3 +aI4 +asg14 +F0.98553999999999997 +sS't' +F54007.121577799997 +ss(F309.36087300000003 +F0.317639 +F1.0500700000000001 +F0.94405799999999995 +I0 +tp5847 +(dp5848 +g4 +F0.317639 +sg5 +I0 +sg6 +I0 +sg7 +F2.0766200000000001 +sS'm' +F22.991800000000001 +sg8 +F0.94405799999999995 +sg9 +F309.36087300000003 +sg10 +(lp5849 +L346331781L +aL346331782L +aL346331783L +aL346331784L +aL346331785L +asg12 +(lp5850 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500700000000001 +sS't' +F53974.159539400003 +ss(F309.38564200000002 +F0.326349 +F0.92103000000000002 +F1.10002 +I0 +tp5851 +(dp5852 +g4 +F0.326349 +sg5 +I0 +sg6 +I0 +sg7 +F1.4174800000000001 +sS'm' +F23.123799999999999 +sg8 +F1.10002 +sg9 +F309.38564200000002 +sg10 +(lp5853 +L345539861L +aL345539862L +aL345539863L +aL345539864L +aL345539865L +asg12 +(lp5854 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92103000000000002 +sS't' +F53677.099789699998 +ss(F309.36926099999999 +F0.31896200000000002 +F0.74100999999999995 +F0.960009 +I0 +tp5855 +(dp5856 +g4 +F0.31896200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.27825 +sS'm' +F21.3598 +sg8 +F0.960009 +sg9 +F309.36926099999999 +sg10 +(lp5857 +L344478765L +aL344478766L +aL344478767L +aL344478768L +aL344478769L +asg12 +(lp5858 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100999999999995 +sS't' +F53644.123835999999 +ss(F309.36007899999998 +F0.32051800000000003 +F0.61601899999999998 +F0.77501900000000001 +I0 +tp5859 +(dp5860 +g4 +F0.32051800000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.11190799999999999 +sS'm' +F19.569099999999999 +sg8 +F0.77501900000000001 +sg9 +F309.36007899999998 +sg10 +(lp5861 +L346168033L +aL346168034L +aL346168035L +aL346168036L +aL346168037L +asg12 +(lp5862 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601899999999998 +sS't' +F53704.071617699999 +ss(F309.36743799999999 +F0.32934099999999999 +F0.98407999999999995 +F0.98805500000000002 +I0 +tp5863 +(dp5864 +g4 +F0.32934099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.38047599999999998 +sS'm' +F22.642199999999999 +sg8 +F0.98805500000000002 +sg9 +F309.36743799999999 +sg10 +(lp5865 +L346463926L +aL346463927L +aL346463928L +aL346463929L +aL346463930L +aL346463931L +aL346463932L +aL346463933L +asg12 +(lp5866 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98407999999999995 +sS't' +F54007.121541100001 +ss(F309.37473199999999 +F0.33169300000000002 +F0.92400599999999999 +F1.0300100000000001 +I0 +tp5867 +(dp5868 +g4 +F0.33169300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.035781899999999998 +sS'm' +F15.954599999999999 +sg8 +F1.0300100000000001 +sg9 +F309.37473199999999 +sg10 +(lp5869 +L345217503L +aL345217504L +aL345217505L +aL345217506L +aL345217507L +asg12 +(lp5870 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400599999999999 +sS't' +F53673.0818373 +ss(F309.38271800000001 +F0.33517799999999998 +F0.749004 +F0.97800600000000004 +I0 +tp5871 +(dp5872 +g4 +F0.33517799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.072846099999999997 +sS'm' +F19.445 +sg8 +F0.97800600000000004 +sg9 +F309.38271800000001 +sg10 +(lp5873 +L171378320L +aL171378321L +aL171378322L +aL171378323L +aL171378324L +asg12 +(lp5874 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.749004 +sS't' +F54005.107175899997 +ss(F309.37472000000002 +F0.33171899999999999 +F0.41302499999999998 +F0.41203299999999998 +I0 +tp5875 +(dp5876 +g4 +F0.33171899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.036749999999999998 +sS'm' +F15.9732 +sg8 +F0.41203299999999998 +sg9 +F309.37472000000002 +sg10 +(lp5877 +L345996084L +aL345996085L +aL345996086L +aL345996087L +aL345996088L +asg12 +(lp5878 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41302499999999998 +sS't' +F53703.093111299997 +ss(F309.385423 +F0.34019300000000002 +F1.01004 +F0.99204700000000001 +I0 +tp5879 +(dp5880 +g4 +F0.34019300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.61869399999999997 +sS'm' +F21.813300000000002 +sg8 +F0.99204700000000001 +sg9 +F309.385423 +sg10 +(lp5881 +L342968339L +aL342968340L +aL342968341L +aL342968342L +aL342968343L +asg12 +(lp5882 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01004 +sS't' +F53270.134614399998 +ss(F309.38828699999999 +F0.34631000000000001 +F0.831677 +F0.94679899999999995 +I0 +tp5883 +(dp5884 +g4 +F0.34631000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.38842 +sS'm' +F25.392399999999999 +sg8 +F0.94679899999999995 +sg9 +F309.38828699999999 +sg10 +(lp5885 +L343120748L +aL343120749L +aL343120750L +aL343120751L +asg12 +(lp5886 +I1 +aI2 +aI3 +aI4 +asg14 +F0.831677 +sS't' +F53288.113458200001 +ss(F309.36926299999999 +F0.31897700000000001 +F0.50610900000000003 +F0.459175 +I0 +tp5887 +(dp5888 +g4 +F0.31897700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.57757400000000003 +sS'm' +F21.2121 +sg8 +F0.459175 +sg9 +F309.36926299999999 +sg10 +(lp5889 +L153252711L +aL153252712L +aL153252713L +aL153252714L +aL153252715L +asg12 +(lp5890 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50610900000000003 +sS't' +F53702.083962500001 +ss(F309.37196 +F0.34107799999999999 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp5891 +(dp5892 +g4 +F0.34107799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.64673999999999998 +sS'm' +F22.241399999999999 +sg8 +F1.0100100000000001 +sg9 +F309.37196 +sg10 +(lp5893 +L345366222L +aL345366223L +aL345366224L +aL345366225L +aL345366226L +asg12 +(lp5894 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078718899997 +ss(F309.37194699999998 +F0.34104200000000001 +F1.0500100000000001 +F0.94401599999999997 +I0 +tp5895 +(dp5896 +g4 +F0.34104200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.16049 +sS'm' +F22.6051 +sg8 +F0.94401599999999997 +sg9 +F309.37194699999998 +sg10 +(lp5897 +L346332051L +aL346332052L +aL346332053L +aL346332054L +aL346332055L +asg12 +(lp5898 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159570199998 +ss(F309.38541500000002 +F0.34015099999999998 +F0.77906699999999995 +F0.82906599999999997 +I0 +tp5899 +(dp5900 +g4 +F0.34015099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.83173299999999994 +sS'm' +F21.8231 +sg8 +F0.82906599999999997 +sg9 +F309.38541500000002 +sg10 +(lp5901 +L343277294L +aL343277295L +aL343277296L +aL343277297L +aL343277298L +asg12 +(lp5902 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77906699999999995 +sS't' +F53302.107460599997 +ss(F309.36403899999999 +F0.31753700000000001 +F0.64920699999999998 +F0.53926099999999999 +I0 +tp5903 +(dp5904 +g4 +F0.31753700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.8246099999999998 +sS'm' +F22.851099999999999 +sg8 +F0.53926099999999999 +sg9 +F309.36403899999999 +sg10 +(lp5905 +L112299284L +aL112299285L +aL112299286L +aL112299287L +aL112299288L +asg12 +(lp5906 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64920699999999998 +sS't' +F53656.1060622 +ss(F309.36310400000002 +F0.33104 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp5907 +(dp5908 +g4 +F0.33104 +sg5 +I0 +sg6 +I0 +sg7 +F0.23308999999999999 +sS'm' +F21.175000000000001 +sg8 +F1.0700000000000001 +sg9 +F309.36310400000002 +sg10 +(lp5909 +L345675586L +aL345675587L +aL345675588L +aL345675589L +aL345675590L +asg12 +(lp5910 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086392199999 +ss(F309.37898799999999 +F0.32701999999999998 +F0.85101700000000002 +F0.91301699999999997 +I0 +tp5911 +(dp5912 +g4 +F0.32701999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.57578300000000004 +sS'm' +F21.533999999999999 +sg8 +F0.91301699999999997 +sg9 +F309.37898799999999 +sg10 +(lp5913 +L343879191L +aL343879192L +aL343879193L +aL343879194L +aL343879195L +aL343879196L +aL343879197L +aL343879198L +aL343879199L +aL343879200L +asg12 +(lp5914 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85101700000000002 +sS't' +F53626.144964899999 +ss(F309.37300599999998 +F0.32109100000000002 +F0.86579899999999999 +F0.90046000000000004 +I0 +tp5915 +(dp5916 +g4 +F0.32109100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F5.5311599999999999 +sS'm' +F25.332799999999999 +sg8 +F0.90046000000000004 +sg9 +F309.37300599999998 +sg10 +(lp5917 +L345816358L +aL345816359L +aL345816360L +aL345816361L +asg12 +(lp5918 +I1 +aI2 +aI3 +aI4 +asg14 +F0.86579899999999999 +sS't' +F53693.0899842 +ss(F309.36992299999997 +F0.33446599999999999 +F0.74115799999999998 +F0.96014200000000005 +I0 +tp5919 +(dp5920 +g4 +F0.33446599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.89581 +sS'm' +F23.556799999999999 +sg8 +F0.96014200000000005 +sg9 +F309.36992299999997 +sg10 +(lp5921 +L344482846L +aL344482847L +aL344482848L +aL344482849L +aL344482850L +asg12 +(lp5922 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74115799999999998 +sS't' +F53644.123837799998 +ss(F309.371013 +F0.33045200000000002 +F0.74118899999999999 +F0.96034900000000001 +I0 +tp5923 +(dp5924 +g4 +F0.33045200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.66299 +sS'm' +F23.4131 +sg8 +F0.96034900000000001 +sg9 +F309.371013 +sg10 +(lp5925 +L344482855L +aL344482856L +aL344482857L +aL344482858L +aL344482859L +asg12 +(lp5926 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74118899999999999 +sS't' +F53644.1238409 +ss(F309.37298600000003 +F0.32107000000000002 +F0.74925399999999998 +F0.97817699999999996 +I0 +tp5927 +(dp5928 +g4 +F0.32107000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.62924899999999995 +sS'm' +F23.6539 +sg8 +F0.97817699999999996 +sg9 +F309.37298600000003 +sg10 +(lp5929 +L171388784L +aL171388785L +aL171388786L +aL171388787L +asg12 +(lp5930 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74925399999999998 +sS't' +F54005.108807299999 +ss(F309.36453499999999 +F0.32446199999999997 +F0.93301699999999999 +F0.87801799999999997 +I0 +tp5931 +(dp5932 +g4 +F0.32446199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F5.8531500000000003 +sS'm' +F24.442599999999999 +sg8 +F0.87801799999999997 +sg9 +F309.36453499999999 +sg10 +(lp5933 +L345028304L +aL345028305L +aL345028306L +aL345028307L +aL345028308L +asg12 +(lp5934 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301699999999999 +sS't' +F53670.113828000001 +ss(F309.35981299999997 +F0.325075 +F1.0100100000000001 +F0.95301400000000003 +I0 +tp5935 +(dp5936 +g4 +F0.325075 +sg5 +I0 +sg6 +I0 +sg7 +F0.041900899999999998 +sS'm' +F19.564499999999999 +sg8 +F0.95301400000000003 +sg9 +F309.35981299999997 +sg10 +(lp5937 +L343711820L +aL343711821L +aL343711822L +aL343711818L +aL343711819L +asg12 +(lp5938 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F1.0100100000000001 +sS't' +F53623.157040999999 +ss(F309.38084300000003 +F0.33935700000000002 +F0.50800500000000004 +F0.46138899999999999 +I0 +tp5939 +(dp5940 +g4 +F0.33935700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F9.10365 +sS'm' +F25.520900000000001 +sg8 +F0.46138899999999999 +sg9 +F309.38084300000003 +sg10 +(lp5941 +L153250340L +aL153250341L +aL153250342L +aL153250343L +asg12 +(lp5942 +I1 +aI2 +aI3 +aI4 +asg14 +F0.50800500000000004 +sS't' +F53702.085653100003 +ss(F309.387967 +F0.34223500000000001 +F0.92401500000000003 +F1.0300199999999999 +I0 +tp5943 +(dp5944 +g4 +F0.34223500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.79369100000000004 +sS'm' +F21.917400000000001 +sg8 +F1.0300199999999999 +sg9 +F309.387967 +sg10 +(lp5945 +L345217730L +aL345217731L +aL345217732L +aL345217733L +aL345217734L +asg12 +(lp5946 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401500000000003 +sS't' +F53673.081874000003 +ss(F309.37308100000001 +F0.32445600000000002 +F1.01006 +F0.99205299999999996 +I0 +tp5947 +(dp5948 +g4 +F0.32445600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.44884800000000002 +sS'm' +F22.542400000000001 +sg8 +F0.99205299999999996 +sg9 +F309.37308100000001 +sg10 +(lp5949 +L342966752L +aL342966753L +aL342966754L +aL342966755L +asg12 +(lp5950 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01006 +sS't' +F53270.136238599996 +ss(F309.36634199999997 +F0.34080899999999997 +F0.92400599999999999 +F1.0300100000000001 +I0 +tp5951 +(dp5952 +g4 +F0.34080899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.050716799999999999 +sS'm' +F18.371099999999998 +sg8 +F1.0300100000000001 +sg9 +F309.36634199999997 +sg10 +(lp5953 +L345217380L +aL345217381L +aL345217382L +aL345217383L +aL345217384L +asg12 +(lp5954 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400599999999999 +sS't' +F53673.081813999997 +ss(F309.36634400000003 +F0.34082299999999999 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp5955 +(dp5956 +g4 +F0.34082299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.062269400000000003 +sS'm' +F18.379799999999999 +sg8 +F0.99200699999999997 +sg9 +F309.36634400000003 +sg10 +(lp5957 +L342961885L +aL342961886L +aL342961887L +aL342961888L +aL342961889L +asg12 +(lp5958 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134561400002 +ss(F309.36310500000002 +F0.33104299999999998 +F0.98400500000000002 +F0.98800399999999999 +I0 +tp5959 +(dp5960 +g4 +F0.33104299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.067886199999999994 +sS'm' +F18.8447 +sg8 +F0.98800399999999999 +sg9 +F309.36310500000002 +sg10 +(lp5961 +L346459187L +aL346459188L +aL346459189L +aL346459190L +aL346459191L +aL346459192L +aL346459193L +aL346459194L +aL346459195L +aL346459196L +asg12 +(lp5962 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.1198706 +ss(F309.38246600000002 +F0.330231 +F1.0514699999999999 +F0.94429799999999997 +I0 +tp5963 +(dp5964 +g4 +F0.330231 +sg5 +I0 +sg6 +I0 +sg7 +F4.2208800000000002 +sS'm' +F24.0228 +sg8 +F0.94429799999999997 +sg9 +F309.38246600000002 +sg10 +(lp5965 +L346336549L +aL346336550L +aL346336551L +aL346336552L +aL346336553L +asg12 +(lp5966 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0514699999999999 +sS't' +F53974.159599400002 +ss(F309.37296900000001 +F0.31718099999999999 +F0.83470200000000006 +F0.95398099999999997 +I0 +tp5967 +(dp5968 +g4 +F0.31718099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.36193900000000001 +sS'm' +F21.935500000000001 +sg8 +F0.95398099999999997 +sg9 +F309.37296900000001 +sg10 +(lp5969 +L343130114L +aL343130115L +aL343130111L +aL343130112L +aL343130113L +asg12 +(lp5970 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.83470200000000006 +sS't' +F53288.110927900001 +ss(F309.37307900000002 +F0.32443 +F0.74105799999999999 +F0.960036 +I0 +tp5971 +(dp5972 +g4 +F0.32443 +sg5 +I0 +sg6 +I0 +sg7 +F0.22861899999999999 +sS'm' +F22.4406 +sg8 +F0.960036 +sg9 +F309.37307900000002 +sg10 +(lp5973 +L344482902L +aL344482903L +aL344482904L +aL344482905L +asg12 +(lp5974 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74105799999999999 +sS't' +F53644.125505000004 +ss(F309.38890600000002 +F0.34373999999999999 +F0.77901200000000004 +F0.829013 +I0 +tp5975 +(dp5976 +g4 +F0.34373999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.037616799999999999 +sS'm' +F16.194500000000001 +sg8 +F0.829013 +sg9 +F309.38890600000002 +sg10 +(lp5977 +L343271694L +aL343271695L +aL343271696L +aL343271697L +aL343271698L +aL343271699L +aL343271700L +aL343271701L +aL343271702L +aL343271703L +asg12 +(lp5978 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77901200000000004 +sS't' +F53302.107470299998 +ss(F309.36977400000001 +F0.34632000000000002 +F0.87240700000000004 +F0.90865700000000005 +I0 +tp5979 +(dp5980 +g4 +F0.34632000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.59617699999999996 +sS'm' +F22.706900000000001 +sg8 +F0.90865700000000005 +sg9 +F309.36977400000001 +sg10 +(lp5981 +L345814776L +aL345814777L +aL345814778L +asg12 +(lp5982 +I2 +aI3 +aI4 +asg14 +F0.87240700000000004 +sS't' +F53693.086658200002 +ss(F309.36007000000001 +F0.32050499999999998 +F0.47602100000000003 +F0.45402300000000001 +I0 +tp5983 +(dp5984 +g4 +F0.32050499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.019496099999999999 +sS'm' +F16.8856 +sg8 +F0.45402300000000001 +sg9 +F309.36007000000001 +sg10 +(lp5985 +L344872973L +aL344872974L +aL344872975L +aL344872976L +aL344872977L +aL344872978L +aL344872979L +aL344872970L +aL344872971L +aL344872972L +asg12 +(lp5986 +I3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.47602100000000003 +sS't' +F53668.108132399997 +ss(F309.37432899999999 +F0.32658799999999999 +F0.77503100000000003 +F0.75406200000000001 +I0 +tp5987 +(dp5988 +g4 +F0.32658799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.9127200000000002 +sS'm' +F23.507200000000001 +sg8 +F0.75406200000000001 +sg9 +F309.37432899999999 +sg10 +(lp5989 +L342828815L +aL342828816L +aL342828817L +aL342828818L +aL342828819L +asg12 +(lp5990 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77503100000000003 +sS't' +F53243.255756899998 +ss(F309.37449299999997 +F0.31692900000000002 +F0.82838800000000001 +F0.945627 +I0 +tp5991 +(dp5992 +g4 +F0.31692900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.5275400000000001 +sS'm' +F23.501799999999999 +sg8 +F0.945627 +sg9 +F309.37449299999997 +sg10 +(lp5993 +L343130106L +aL343130107L +aL343130108L +aL343130109L +aL343130110L +asg12 +(lp5994 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82838800000000001 +sS't' +F53288.111761499997 +ss(F309.388105 +F0.33807799999999999 +F0.74106799999999995 +F0.96004999999999996 +I0 +tp5995 +(dp5996 +g4 +F0.33807799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.79173 +sS'm' +F23.497900000000001 +sg8 +F0.96004999999999996 +sg9 +F309.388105 +sg10 +(lp5997 +L344483181L +aL344483182L +aL344483183L +aL344483184L +aL344483185L +asg12 +(lp5998 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74106799999999995 +sS't' +F53644.123888299997 +ss(F309.36309799999998 +F0.331069 +F0.41305900000000001 +F0.41206100000000001 +I0 +tp5999 +(dp6000 +g4 +F0.331069 +sg5 +I0 +sg6 +I0 +sg7 +F0.075666499999999998 +sS'm' +F18.850000000000001 +sg8 +F0.41206100000000001 +sg9 +F309.36309799999998 +sg10 +(lp6001 +L345997758L +aL345997759L +aL345997760L +aL345997761L +aL345997762L +asg12 +(lp6002 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41305900000000001 +sS't' +F53703.093078999998 +ss(F309.36765100000002 +F0.32828600000000002 +F0.92147000000000001 +F1.1003000000000001 +I0 +tp6003 +(dp6004 +g4 +F0.32828600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.71075 +sS'm' +F24.749199999999998 +sg8 +F1.1003000000000001 +sg9 +F309.36765100000002 +sg10 +(lp6005 +L345537940L +aL345537941L +aL345537942L +aL345537943L +asg12 +(lp6006 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92147000000000001 +sS't' +F53677.1013981 +ss(F309.387201 +F0.31924999999999998 +F0.92457199999999995 +F1.0304599999999999 +I0 +tp6007 +(dp6008 +g4 +F0.31924999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.0792799999999998 +sS'm' +F23.809999999999999 +sg8 +F1.0304599999999999 +sg9 +F309.387201 +sg10 +(lp6009 +L345226600L +aL345226601L +aL345226602L +aL345226603L +aL345226604L +asg12 +(lp6010 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92457199999999995 +sS't' +F53673.081871900002 +ss(F309.38651399999998 +F0.32197599999999998 +F0.98402000000000001 +F0.98801799999999995 +I0 +tp6011 +(dp6012 +g4 +F0.32197599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.084341799999999995 +sS'm' +F20.366800000000001 +sg8 +F0.98801799999999995 +sg9 +F309.38651399999998 +sg10 +(lp6013 +L346466100L +aL346466097L +aL346466098L +aL346466099L +aL346466101L +asg12 +(lp6014 +I3 +aI0 +aI1 +aI2 +aI4 +asg14 +F0.98402000000000001 +sS't' +F54007.119106400001 +ss(F309.373018 +F0.320218 +F0.88510100000000003 +F1.1100699999999999 +I0 +tp6015 +(dp6016 +g4 +F0.320218 +sg5 +I0 +sg6 +I0 +sg7 +F8.8699899999999996 +sS'm' +F25.316299999999998 +sg8 +F1.1100699999999999 +sg9 +F309.373018 +sg10 +(lp6017 +L344153126L +aL344153127L +aL344153128L +aL344153129L +aL344153130L +asg12 +(lp6018 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88510100000000003 +sS't' +F53635.138193600003 +ss(F309.360051 +F0.32050200000000001 +F0.82801199999999997 +F0.94501000000000002 +I0 +tp6019 +(dp6020 +g4 +F0.32050200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.097671499999999994 +sS'm' +F19.650400000000001 +sg8 +F0.94501000000000002 +sg9 +F309.360051 +sg10 +(lp6021 +L343122919L +aL343122920L +aL343122921L +aL343122922L +aL343122923L +asg12 +(lp6022 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801199999999997 +sS't' +F53288.111721300003 +ss(F309.36764499999998 +F0.32829199999999997 +F0.98463199999999995 +F0.98863800000000002 +I0 +tp6023 +(dp6024 +g4 +F0.32829199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F2.3675999999999999 +sS'm' +F23.493400000000001 +sg8 +F0.98863800000000002 +sg9 +F309.36764499999998 +sg10 +(lp6025 +L346463934L +aL346463935L +aL346463936L +aL346463937L +aL346463938L +asg12 +(lp6026 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98463199999999995 +sS't' +F54007.119883200001 +ss(F309.36505099999999 +F0.33013599999999999 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp6027 +(dp6028 +g4 +F0.33013599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.45401799999999998 +sS'm' +F21.370999999999999 +sg8 +F0.95301000000000002 +sg9 +F309.36505099999999 +sg10 +(lp6029 +L343709271L +aL343709272L +aL343709273L +aL343709274L +aL343709275L +asg12 +(lp6030 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158714099998 +ss(F309.383914 +F0.31872499999999998 +F0.92427499999999996 +F1.03023 +I0 +tp6031 +(dp6032 +g4 +F0.31872499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.38935500000000001 +sS'm' +F22.797899999999998 +sg8 +F1.03023 +sg9 +F309.383914 +sg10 +(lp6033 +L345224137L +aL345224138L +aL345224139L +aL345224140L +asg12 +(lp6034 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92427499999999996 +sS't' +F53673.083521200002 +ss(F309.38549499999999 +F0.34008500000000003 +F0.64954599999999996 +F0.53940299999999997 +I0 +tp6035 +(dp6036 +g4 +F0.34008500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.86076699999999995 +sS'm' +F21.5472 +sg8 +F0.53940299999999997 +sg9 +F309.38549499999999 +sg10 +(lp6037 +L112299442L +aL112299443L +aL112299444L +aL112299445L +aL112299446L +asg12 +(lp6038 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64954599999999996 +sS't' +F53656.106121800003 +ss(F309.36485399999998 +F0.33456999999999998 +F0.42017300000000002 +F0.41322500000000001 +I0 +tp6039 +(dp6040 +g4 +F0.33456999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.18408 +sS'm' +F22.228400000000001 +sg8 +F0.41322500000000001 +sg9 +F309.36485399999998 +sg10 +(lp6041 +L346000865L +aL346000866L +aL346000867L +aL346000868L +aL346000869L +asg12 +(lp6042 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.42017300000000002 +sS't' +F53703.093083899999 +ss(F309.386527 +F0.32198900000000003 +F0.61605900000000002 +F0.77504899999999999 +I0 +tp6043 +(dp6044 +g4 +F0.32198900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.77588999999999997 +sS'm' +F21.889600000000002 +sg8 +F0.77504899999999999 +sg9 +F309.386527 +sg10 +(lp6045 +L346172265L +aL346172266L +aL346172267L +aL346172268L +aL346172269L +asg12 +(lp6046 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61605900000000002 +sS't' +F53704.071691099998 +ss(F309.36633799999998 +F0.34080899999999997 +F0.933006 +F0.87800800000000001 +I0 +tp6047 +(dp6048 +g4 +F0.34080899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.0481742 +sS'm' +F18.3627 +sg8 +F0.87800800000000001 +sg9 +F309.36633799999998 +sg10 +(lp6049 +L345024500L +aL345024501L +aL345024502L +aL345024503L +aL345024504L +asg12 +(lp6050 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.933006 +sS't' +F53670.113833000003 +ss(F309.368448 +F0.342281 +F1.0806 +F1.01024 +I0 +tp6051 +(dp6052 +g4 +F0.342281 +sg5 +I0 +sg6 +I0 +sg7 +F2.4740799999999998 +sS'm' +F23.735199999999999 +sg8 +F1.01024 +sg9 +F309.368448 +sg10 +(lp6053 +L345371779L +aL345371780L +aL345371781L +aL345371782L +aL345371783L +asg12 +(lp6054 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0806 +sS't' +F53675.078709200003 +ss(F309.38273700000002 +F0.33516400000000002 +F0.64902300000000002 +F0.53902000000000005 +I0 +tp6055 +(dp6056 +g4 +F0.33516400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.129192 +sS'm' +F19.379100000000001 +sg8 +F0.53902000000000005 +sg9 +F309.38273700000002 +sg10 +(lp6057 +L112296837L +aL112296838L +aL112296839L +aL112296840L +aL112296841L +asg12 +(lp6058 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64902300000000002 +sS't' +F53656.106114200004 +ss(F309.37300299999998 +F0.32111299999999998 +F0.93371300000000002 +F0.87911499999999998 +I0 +tp6059 +(dp6060 +g4 +F0.32111299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.4972799999999999 +sS'm' +F25.167899999999999 +sg8 +F0.87911499999999998 +sg9 +F309.37300299999998 +sg10 +(lp6061 +L345030733L +aL345030734L +aL345030735L +aL345030736L +asg12 +(lp6062 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93371300000000002 +sS't' +F53670.115510000003 +ss(F309.37196699999998 +F0.34106599999999998 +F0.64906299999999995 +F0.53908 +I0 +tp6063 +(dp6064 +g4 +F0.34106599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.6387799999999999 +sS'm' +F22.253299999999999 +sg8 +F0.53908 +sg9 +F309.37196699999998 +sg10 +(lp6065 +L112299334L +aL112299335L +aL112299336L +aL112299337L +aL112299338L +asg12 +(lp6066 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64906299999999995 +sS't' +F53656.106084300001 +ss(F309.377948 +F0.33787400000000001 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp6067 +(dp6068 +g4 +F0.33787400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.055556399999999999 +sS'm' +F18.4041 +sg8 +F1.0100100000000001 +sg9 +F309.377948 +sg10 +(lp6069 +L345363688L +aL345363689L +aL345363690L +aL345363691L +aL345363692L +aL345363693L +aL345363694L +aL345363695L +aL345363696L +aL345363697L +asg12 +(lp6070 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.0787356 +ss(F309.36634500000002 +F0.340804 +F0.85100299999999995 +F0.91300700000000001 +I0 +tp6071 +(dp6072 +g4 +F0.340804 +sg5 +I0 +sg6 +I0 +sg7 +F0.058236599999999999 +sS'm' +F18.383900000000001 +sg8 +F0.91300700000000001 +sg9 +F309.36634500000002 +sg10 +(lp6073 +L343874100L +aL343874101L +aL343874102L +aL343874103L +aL343874104L +asg12 +(lp6074 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.144929800001 +ss(F309.37303500000002 +F0.32017499999999999 +F0.92110599999999998 +F1.1000799999999999 +I0 +tp6075 +(dp6076 +g4 +F0.32017499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.37298900000000001 +sS'm' +F23.0747 +sg8 +F1.1000799999999999 +sg9 +F309.37303500000002 +sg10 +(lp6077 +L345539575L +aL345539576L +aL345539577L +aL345539578L +asg12 +(lp6078 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92110599999999998 +sS't' +F53677.101413099997 +ss(F309.38259299999999 +F0.33971099999999999 +F0.41302499999999998 +F0.41203400000000001 +I0 +tp6079 +(dp6080 +g4 +F0.33971099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.068188799999999994 +sS'm' +F18.659400000000002 +sg8 +F0.41203400000000001 +sg9 +F309.38259299999999 +sg10 +(lp6081 +L345998013L +aL345998014L +aL345998015L +aL345998016L +aL345998017L +asg12 +(lp6082 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41302499999999998 +sS't' +F53703.093133100003 +ss(F309.36847799999998 +F0.33943099999999998 +F0.88623799999999997 +F1.1109800000000001 +I0 +tp6083 +(dp6084 +g4 +F0.33943099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.4870700000000001 +sS'm' +F24.288499999999999 +sg8 +F1.1109800000000001 +sg9 +F309.36847799999998 +sg10 +(lp6085 +L344155489L +aL344155490L +aL344155491L +aL344155492L +aL344155493L +asg12 +(lp6086 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88623799999999997 +sS't' +F53635.138181000002 +ss(F309.36453299999999 +F0.324457 +F0.85101199999999999 +F0.91301600000000005 +I0 +tp6087 +(dp6088 +g4 +F0.324457 +sg5 +I0 +sg6 +I0 +sg7 +F0.167073 +sS'm' +F20.976199999999999 +sg8 +F0.91301600000000005 +sg9 +F309.36453299999999 +sg10 +(lp6089 +L343878219L +aL343878220L +aL343878221L +aL343878222L +asg12 +(lp6090 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85101199999999999 +sS't' +F53626.146583200003 +ss(F309.363113 +F0.33103900000000003 +F0.85100299999999995 +F0.91300700000000001 +I0 +tp6091 +(dp6092 +g4 +F0.33103900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.017377400000000001 +sS'm' +F16.597799999999999 +sg8 +F0.91300700000000001 +sg9 +F309.363113 +sg10 +(lp6093 +L343874062L +aL343874063L +aL343874064L +aL343874055L +aL343874056L +aL343874057L +aL343874058L +aL343874059L +aL343874060L +aL343874061L +asg12 +(lp6094 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.85100299999999995 +sS't' +F53626.143262199999 +ss(F309.38241599999998 +F0.32446999999999998 +F0.77922199999999997 +F0.82928900000000005 +I0 +tp6095 +(dp6096 +g4 +F0.32446999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.7721499999999999 +sS'm' +F24.017199999999999 +sg8 +F0.82928900000000005 +sg9 +F309.38241599999998 +sg10 +(lp6097 +L343275294L +aL343275295L +aL343275296L +aL343275297L +asg12 +(lp6098 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77922199999999997 +sS't' +F53302.109110700003 +ss(F309.37659200000002 +F0.34482299999999999 +F0.88540200000000002 +F1.11025 +I0 +tp6099 +(dp6100 +g4 +F0.34482299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.57657700000000001 +sS'm' +F23.159400000000002 +sg8 +F1.11025 +sg9 +F309.37659200000002 +sg10 +(lp6101 +L344153203L +aL344153204L +aL344153205L +asg12 +(lp6102 +I2 +aI3 +aI4 +asg14 +F0.88540200000000002 +sS't' +F53635.1365449 +ss(F309.36636700000003 +F0.34082600000000002 +F0.64901600000000004 +F0.53902099999999997 +I0 +tp6103 +(dp6104 +g4 +F0.34082600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.065563300000000005 +sS'm' +F18.424499999999998 +sg8 +F0.53902099999999997 +sg9 +F309.36636700000003 +sg10 +(lp6105 +L112295355L +aL112295356L +aL112295357L +aL112295358L +aL112295359L +asg12 +(lp6106 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901600000000004 +sS't' +F53656.106068699999 +ss(F309.37793399999998 +F0.33785300000000001 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp6107 +(dp6108 +g4 +F0.33785300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.046812600000000003 +sS'm' +F18.364799999999999 +sg8 +F1.1100000000000001 +sg9 +F309.37793399999998 +sg10 +(lp6109 +L344144416L +aL344144417L +aL344144418L +aL344144419L +aL344144420L +aL344144421L +aL344144422L +aL344144423L +aL344144424L +aL344144425L +asg12 +(lp6110 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138207199998 +ss(F309.36089199999998 +F0.31767299999999998 +F1.0100899999999999 +F0.95308899999999996 +I0 +tp6111 +(dp6112 +g4 +F0.31767299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.22928200000000001 +sS'm' +F22.100999999999999 +sg8 +F0.95308899999999996 +sg9 +F309.36089199999998 +sg10 +(lp6113 +L343711791L +aL343711792L +aL343711793L +aL343711794L +asg12 +(lp6114 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0100899999999999 +sS't' +F53623.160361000002 +ss(F309.36092300000001 +F0.31761400000000001 +F0.47641699999999998 +F0.45451999999999998 +I0 +tp6115 +(dp6116 +g4 +F0.31761400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.230985 +sS'm' +F21.886099999999999 +sg8 +F0.45451999999999998 +sg9 +F309.36092300000001 +sg10 +(lp6117 +L344873000L +aL344873001L +aL344873002L +aL344873003L +asg12 +(lp6118 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47641699999999998 +sS't' +F53668.110622499997 +ss(F309.38936699999999 +F0.322181 +F1.01006 +F0.95306999999999997 +I0 +tp6119 +(dp6120 +g4 +F0.322181 +sg5 +I0 +sg6 +I0 +sg7 +F0.23627699999999999 +sS'm' +F22.149799999999999 +sg8 +F0.95306999999999997 +sg9 +F309.38936699999999 +sg10 +(lp6121 +L343716046L +aL343716047L +aL343716048L +aL343716049L +asg12 +(lp6122 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01006 +sS't' +F53623.1604401 +ss(F309.38890300000003 +F0.34375800000000001 +F0.47602 +F0.45402199999999998 +I0 +tp6123 +(dp6124 +g4 +F0.34375800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.019195799999999999 +sS'm' +F14.444699999999999 +sg8 +F0.45402199999999998 +sg9 +F309.38890300000003 +sg10 +(lp6125 +L344871426L +aL344871427L +aL344871428L +aL344871429L +aL344871430L +aL344871431L +aL344871432L +aL344871433L +aL344871424L +aL344871425L +asg12 +(lp6126 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.47602 +sS't' +F53668.107383199997 +ss(F309.36979100000002 +F0.34462900000000002 +F0.74112699999999998 +F0.96004999999999996 +I0 +tp6127 +(dp6128 +g4 +F0.34462900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F6.4974999999999996 +sS'm' +F24.904399999999999 +sg8 +F0.96004999999999996 +sg9 +F309.36979100000002 +sg10 +(lp6129 +L344482793L +aL344482794L +aL344482795L +aL344482796L +aL344482797L +asg12 +(lp6130 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74112699999999998 +sS't' +F53644.123837500003 +ss(F309.36597599999999 +F0.33175900000000003 +F0.41303299999999998 +F0.41204299999999999 +I0 +tp6131 +(dp6132 +g4 +F0.33175900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.273841 +sS'm' +F20.576000000000001 +sg8 +F0.41204299999999999 +sg9 +F309.36597599999999 +sg10 +(lp6133 +L345997778L +aL345997779L +aL345997780L +aL345997781L +aL345997782L +asg12 +(lp6134 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41303299999999998 +sS't' +F53703.093087000001 +ss(F309.37236899999999 +F0.32412200000000002 +F0.92104799999999998 +F1.1000399999999999 +I0 +tp6135 +(dp6136 +g4 +F0.32412200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.31603199999999998 +sS'm' +F22.761099999999999 +sg8 +F1.1000399999999999 +sg9 +F309.37236899999999 +sg10 +(lp6137 +L345539592L +aL345539593L +aL345539594L +aL345539595L +asg12 +(lp6138 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92104799999999998 +sS't' +F53677.101411199998 +ss(F309.36091699999997 +F0.31763000000000002 +F0.77583199999999997 +F0.75451400000000002 +I0 +tp6139 +(dp6140 +g4 +F0.31763000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.69611400000000001 +sS'm' +F21.960799999999999 +sg8 +F0.75451400000000002 +sg9 +F309.36091699999997 +sg10 +(lp6141 +L342827251L +aL342827252L +aL342827253L +aL342827254L +asg12 +(lp6142 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77583199999999997 +sS't' +F53243.257378100003 +ss(F309.365047 +F0.33011400000000002 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp6143 +(dp6144 +g4 +F0.33011400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.24445900000000001 +sS'm' +F21.077200000000001 +sg8 +F1.1000099999999999 +sg9 +F309.365047 +sg10 +(lp6145 +L345531841L +aL345531842L +aL345531843L +aL345531844L +aL345531845L +asg12 +(lp6146 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099732499999 +ss(F309.38540499999999 +F0.34012999999999999 +F0.93305700000000003 +F0.87806300000000004 +I0 +tp6147 +(dp6148 +g4 +F0.34012999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.165271 +sS'm' +F21.254000000000001 +sg8 +F0.87806300000000004 +sg9 +F309.38540499999999 +sg10 +(lp6149 +L345028731L +aL345028732L +aL345028733L +aL345028729L +aL345028730L +asg12 +(lp6150 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.93305700000000003 +sS't' +F53670.112227400001 +ss(F309.38543800000002 +F0.34023500000000001 +F0.24902099999999999 +F0.34846700000000003 +I0 +tp6151 +(dp6152 +g4 +F0.34023500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.0865199999999999 +sS'm' +F22.209599999999998 +sg8 +F0.34846700000000003 +sg9 +F309.38543800000002 +sg10 +(lp6153 +L327903741L +aL327903742L +aL327903743L +aL327903744L +aL327903745L +asg12 +(lp6154 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24902099999999999 +sS't' +F53312.0629692 +ss(F309.387134 +F0.31928600000000001 +F0.88712000000000002 +F1.1115200000000001 +I0 +tp6155 +(dp6156 +g4 +F0.31928600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.21319 +sS'm' +F24.501999999999999 +sg8 +F1.1115200000000001 +sg9 +F309.387134 +sg10 +(lp6157 +L344155805L +aL344155806L +aL344155807L +aL344155808L +aL344155809L +asg12 +(lp6158 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88712000000000002 +sS't' +F53635.138232800004 +ss(F309.380674 +F0.32856299999999999 +F1.0102800000000001 +F0.99217999999999995 +I0 +tp6159 +(dp6160 +g4 +F0.32856299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.97031800000000001 +sS'm' +F23.389399999999998 +sg8 +F0.99217999999999995 +sg9 +F309.380674 +sg10 +(lp6161 +L342970550L +aL342970551L +aL342970552L +aL342970553L +asg12 +(lp6162 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0102800000000001 +sS't' +F53270.136259600004 +ss(F309.37771800000002 +F0.325598 +F0.77513900000000002 +F0.75417400000000001 +I0 +tp6163 +(dp6164 +g4 +F0.325598 +sg5 +I0 +sg6 +I0 +sg7 +F0.341389 +sS'm' +F21.364599999999999 +sg8 +F0.75417400000000001 +sg9 +F309.37771800000002 +sg10 +(lp6165 +L342830404L +aL342830405L +aL342830406L +aL342830407L +asg12 +(lp6166 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77513900000000002 +sS't' +F53243.257424700001 +ss(F309.360071 +F0.320523 +F0.61601099999999998 +F0.77501600000000004 +I0 +tp6167 +(dp6168 +g4 +F0.320523 +sg5 +I0 +sg6 +I0 +sg7 +F0.11223900000000001 +sS'm' +F19.573699999999999 +sg8 +F0.77501600000000004 +sg9 +F309.360071 +sg10 +(lp6169 +L346168038L +aL346168039L +aL346168040L +aL346168041L +aL346168042L +aL346168043L +aL346168044L +aL346168045L +aL346168046L +aL346168047L +asg12 +(lp6170 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601099999999998 +sS't' +F53704.071617599999 +ss(F309.362416 +F0.31963000000000003 +F0.93302200000000002 +F0.878023 +I0 +tp6171 +(dp6172 +g4 +F0.31963000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.58639 +sS'm' +F23.004200000000001 +sg8 +F0.878023 +sg9 +F309.362416 +sg10 +(lp6173 +L345026964L +aL345026965L +aL345026966L +aL345026967L +aL345026968L +asg12 +(lp6174 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93302200000000002 +sS't' +F53670.1138221 +ss(F309.37305500000002 +F0.32016699999999998 +F1.0101199999999999 +F0.95320300000000002 +I0 +tp6175 +(dp6176 +g4 +F0.32016699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.71257700000000002 +sS'm' +F23.3813 +sg8 +F0.95320300000000002 +sg9 +F309.37305500000002 +sg10 +(lp6177 +L343717364L +aL343717365L +aL343717366L +aL343717367L +asg12 +(lp6178 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101199999999999 +sS't' +F53623.160394799997 +ss(F309.36632800000001 +F0.34080700000000003 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp6179 +(dp6180 +g4 +F0.34080700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.060974 +sS'm' +F18.347200000000001 +sg8 +F0.94401199999999996 +sg9 +F309.36632800000001 +sg10 +(lp6181 +L346329147L +aL346329148L +aL346329149L +aL346329150L +aL346329151L +asg12 +(lp6182 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159554500002 +ss(F309.38275199999998 +F0.32574199999999998 +F0.92100899999999997 +F1.1000099999999999 +I0 +tp6183 +(dp6184 +g4 +F0.32574199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.0997600000000001 +sS'm' +F22.84 +sg8 +F1.1000099999999999 +sg9 +F309.38275199999998 +sg10 +(lp6185 +L345535360L +aL345535361L +aL345535362L +aL345535363L +aL345535364L +aL345535365L +aL345535366L +aL345535367L +aL345535368L +aL345535369L +asg12 +(lp6186 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100899999999997 +sS't' +F53677.099781600002 +ss(F309.36769700000002 +F0.328268 +F0.82911699999999999 +F0.94588799999999995 +I0 +tp6187 +(dp6188 +g4 +F0.328268 +sg5 +I0 +sg6 +I0 +sg7 +F1.7016899999999999 +sS'm' +F23.0566 +sg8 +F0.94588799999999995 +sg9 +F309.36769700000002 +sg10 +(lp6189 +L343126884L +aL343126885L +aL343126886L +aL343126887L +aL343126888L +asg12 +(lp6190 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82911699999999999 +sS't' +F53288.111742599998 +ss(F309.36632700000001 +F0.340806 +F0.82801000000000002 +F0.94500899999999999 +I0 +tp6191 +(dp6192 +g4 +F0.340806 +sg5 +I0 +sg6 +I0 +sg7 +F0.032311800000000002 +sS'm' +F15.9732 +sg8 +F0.94500899999999999 +sg9 +F309.36632700000001 +sg10 +(lp6193 +L343120322L +aL343120323L +aL343120319L +aL343120320L +aL343120321L +asg12 +(lp6194 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.82801000000000002 +sS't' +F53288.110909499999 +ss(F309.38723800000002 +F0.319216 +F1.01084 +F0.95411100000000004 +I0 +tp6195 +(dp6196 +g4 +F0.319216 +sg5 +I0 +sg6 +I0 +sg7 +F2.7794500000000002 +sS'm' +F23.402100000000001 +sg8 +F0.95411100000000004 +sg9 +F309.38723800000002 +sg10 +(lp6197 +L343717769L +aL343717770L +aL343717771L +aL343717772L +aL343717773L +asg12 +(lp6198 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01084 +sS't' +F53623.158775700002 +ss(F309.378964 +F0.32704899999999998 +F0.248364 +F0.34823399999999999 +I0 +tp6199 +(dp6200 +g4 +F0.32704899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.59554300000000004 +sS'm' +F21.545300000000001 +sg8 +F0.34823399999999999 +sg9 +F309.378964 +sg10 +(lp6201 +L327906594L +aL327906595L +aL327906596L +aL327906597L +aL327906598L +asg12 +(lp6202 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248364 +sS't' +F53312.062951200001 +ss(F309.37457000000001 +F0.31692399999999998 +F0.92122000000000004 +F1.10029 +I0 +tp6203 +(dp6204 +g4 +F0.31692399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.98312 +sS'm' +F23.392299999999999 +sg8 +F1.10029 +sg9 +F309.37457000000001 +sg10 +(lp6205 +L345539625L +aL345539626L +aL345539627L +aL345539628L +aL345539629L +asg12 +(lp6206 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92122000000000004 +sS't' +F53677.099758900004 +ss(F309.38200499999999 +F0.34298499999999998 +F0.92403999999999997 +F1.0300400000000001 +I0 +tp6207 +(dp6208 +g4 +F0.34298499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.59069400000000005 +sS'm' +F21.978200000000001 +sg8 +F1.0300400000000001 +sg9 +F309.38200499999999 +sg10 +(lp6209 +L345217582L +aL345217583L +aL345217584L +aL345217585L +aL345217586L +asg12 +(lp6210 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92403999999999997 +sS't' +F53673.081857500001 +ss(F309.37308200000001 +F0.32450000000000001 +F0.61626099999999995 +F0.77519499999999997 +I0 +tp6211 +(dp6212 +g4 +F0.32450000000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.70470600000000005 +sS'm' +F23.124300000000002 +sg8 +F0.77519499999999997 +sg9 +F309.37308200000001 +sg10 +(lp6213 +L346172104L +aL346172105L +aL346172106L +aL346172107L +asg12 +(lp6214 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61626099999999995 +sS't' +F53704.073312200002 +ss(F309.37657000000002 +F0.34481899999999999 +F0.77917199999999998 +F0.82914200000000005 +I0 +tp6215 +(dp6216 +g4 +F0.34481899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.0469499999999998 +sS'm' +F23.731300000000001 +sg8 +F0.82914200000000005 +sg9 +F309.37657000000002 +sg10 +(lp6217 +L343278985L +aL343278986L +aL343278987L +asg12 +(lp6218 +I2 +aI3 +aI4 +asg14 +F0.77917199999999998 +sS't' +F53302.1057774 +ss(F309.35979400000002 +F0.32505299999999998 +F1.0900000000000001 +F1.0700099999999999 +I0 +tp6219 +(dp6220 +g4 +F0.32505299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F9.2177000000000007 +sS'm' +F25.339600000000001 +sg8 +F1.0700099999999999 +sg9 +F309.35979400000002 +sg10 +(lp6221 +L345678943L +aL345678944L +aL345678945L +aL345678946L +aL345678947L +asg12 +(lp6222 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086383000002 +ss(F309.378446 +F0.33687400000000001 +F0.93472699999999997 +F1.03051 +I0 +tp6223 +(dp6224 +g4 +F0.33687400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F6.7007500000000002 +sS'm' +F24.641400000000001 +sg8 +F1.03051 +sg9 +F309.378446 +sg10 +(lp6225 +L345217543L +aL345217544L +aL345217545L +aL345217546L +asg12 +(lp6226 +I0 +aI2 +aI3 +aI4 +asg14 +F0.93472699999999997 +sS't' +F53673.081847599999 +ss(F309.38795099999999 +F0.34224399999999999 +F0.984012 +F0.98801000000000005 +I0 +tp6227 +(dp6228 +g4 +F0.34224399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.473995 +sS'm' +F21.672599999999999 +sg8 +F0.98801000000000005 +sg9 +F309.38795099999999 +sg10 +(lp6229 +L346459668L +aL346459669L +aL346459670L +aL346459671L +aL346459672L +asg12 +(lp6230 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.984012 +sS't' +F54007.119939600001 +ss(F309.37796400000002 +F0.33787499999999998 +F0.749004 +F0.97800600000000004 +I0 +tp6231 +(dp6232 +g4 +F0.33787499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.042693700000000001 +sS'm' +F18.342400000000001 +sg8 +F0.97800600000000004 +sg9 +F309.37796400000002 +sg10 +(lp6233 +L171378165L +aL171378166L +aL171378167L +aL171378168L +aL171378169L +asg12 +(lp6234 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.749004 +sS't' +F54005.107162699998 +ss(F309.38564600000001 +F0.32636300000000001 +F0.85107500000000003 +F0.91306500000000002 +I0 +tp6235 +(dp6236 +g4 +F0.32636300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.294821 +sS'm' +F21.609300000000001 +sg8 +F0.91306500000000002 +sg9 +F309.38564600000001 +sg10 +(lp6237 +L343880286L +aL343880287L +aL343880288L +aL343880289L +asg12 +(lp6238 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85107500000000003 +sS't' +F53626.146641899999 +ss(F309.37303600000001 +F0.32017699999999999 +F0.92113 +F1.1001000000000001 +I0 +tp6239 +(dp6240 +g4 +F0.32017699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.36777799999999999 +sS'm' +F23.0627 +sg8 +F1.1001000000000001 +sg9 +F309.37303600000001 +sg10 +(lp6241 +L345539571L +aL345539572L +aL345539573L +aL345539574L +asg12 +(lp6242 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92113 +sS't' +F53677.101413099997 +ss(F309.37773600000003 +F0.32558500000000001 +F0.47485899999999998 +F0.51000100000000004 +I0 +tp6243 +(dp6244 +g4 +F0.32558500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.57301 +sS'm' +F21.555700000000002 +sg8 +F0.51000100000000004 +sg9 +F309.37773600000003 +sg10 +(lp6245 +L12888263L +aL12888264L +aL12888265L +aL12888266L +aL12888267L +asg12 +(lp6246 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47485899999999998 +sS't' +F53649.118508599997 +ss(F309.37308000000002 +F0.317386 +F0.74138499999999996 +F0.96027899999999999 +I0 +tp6247 +(dp6248 +g4 +F0.317386 +sg5 +I0 +sg6 +I0 +sg7 +F0.77722000000000002 +sS'm' +F23.645399999999999 +sg8 +F0.96027899999999999 +sg9 +F309.37308000000002 +sg10 +(lp6249 +L344485538L +aL344485539L +aL344485540L +aL344485541L +asg12 +(lp6250 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74138499999999996 +sS't' +F53644.125505099997 +ss(F309.38650899999999 +F0.32197799999999999 +F0.92402700000000004 +F1.03003 +I0 +tp6251 +(dp6252 +g4 +F0.32197799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1293800000000001 +sS'm' +F22.7058 +sg8 +F1.03003 +sg9 +F309.38650899999999 +sg10 +(lp6253 +L345224174L +aL345224175L +aL345224176L +aL345224177L +aL345224178L +asg12 +(lp6254 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92402700000000004 +sS't' +F53673.081870000002 +ss(F309.38897700000001 +F0.34518500000000002 +F0.98400600000000005 +F0.98800600000000005 +I0 +tp6255 +(dp6256 +g4 +F0.34518500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.24296200000000001 +sS'm' +F20.781400000000001 +sg8 +F0.98800600000000005 +sg9 +F309.38897700000001 +sg10 +(lp6257 +L346459663L +aL346459664L +aL346459665L +aL346459666L +aL346459667L +asg12 +(lp6258 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400600000000005 +sS't' +F54007.119942500001 +ss(F309.38749899999999 +F0.33269900000000002 +F0.77917800000000004 +F0.82928999999999997 +I0 +tp6259 +(dp6260 +g4 +F0.33269900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F8.6764600000000005 +sS'm' +F24.386900000000001 +sg8 +F0.82928999999999997 +sg9 +F309.38749899999999 +sg10 +(lp6261 +L343279114L +aL343279115L +aL343279116L +aL343279117L +aL343279118L +asg12 +(lp6262 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77917800000000004 +sS't' +F53302.107466399997 +ss(F309.38636700000001 +F0.33898800000000001 +F0.50931700000000002 +F0.462474 +I0 +tp6263 +(dp6264 +g4 +F0.33898800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.7372099999999999 +sS'm' +F22.412400000000002 +sg8 +F0.462474 +sg9 +F309.38636700000001 +sg10 +(lp6265 +L153250331L +aL153250332L +aL153250333L +aL153250334L +aL153250335L +asg12 +(lp6266 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50931700000000002 +sS't' +F53702.084009999999 +ss(F309.38897800000001 +F0.34517300000000001 +F0.85100600000000004 +F0.91301100000000002 +I0 +tp6267 +(dp6268 +g4 +F0.34517300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.26544099999999998 +sS'm' +F20.613800000000001 +sg8 +F0.91301100000000002 +sg9 +F309.38897800000001 +sg10 +(lp6269 +L343874430L +aL343874431L +aL343874432L +aL343874433L +aL343874434L +asg12 +(lp6270 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100600000000004 +sS't' +F53626.144992699999 +ss(F309.363113 +F0.331063 +F0.50603799999999999 +F0.45910099999999998 +I0 +tp6271 +(dp6272 +g4 +F0.331063 +sg5 +I0 +sg6 +I0 +sg7 +F0.035349899999999997 +sS'm' +F16.254999999999999 +sg8 +F0.45910099999999998 +sg9 +F309.363113 +sg10 +(lp6273 +L153250085L +aL153250086L +aL153250087L +aL153250088L +aL153250089L +aL153250090L +aL153250081L +aL153250082L +aL153250083L +aL153250084L +asg12 +(lp6274 +I4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.50603799999999999 +sS't' +F53702.084774700001 +ss(F309.36929600000002 +F0.318967 +F0.47021099999999999 +F0.50323700000000005 +I0 +tp6275 +(dp6276 +g4 +F0.318967 +sg5 +I0 +sg6 +I0 +sg7 +F2.5180099999999999 +sS'm' +F22.0717 +sg8 +F0.50323700000000005 +sg9 +F309.36929600000002 +sg10 +(lp6277 +L12887145L +aL12887146L +aL12887147L +aL12887148L +aL12887149L +asg12 +(lp6278 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47021099999999999 +sS't' +F53649.118485200001 +ss(F309.36926999999997 +F0.31897999999999999 +F1.0800099999999999 +F1.0100100000000001 +I0 +tp6279 +(dp6280 +g4 +F0.31897999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.300016 +sS'm' +F21.351099999999999 +sg8 +F1.0100100000000001 +sg9 +F309.36926999999997 +sg10 +(lp6281 +L345366153L +aL345366154L +aL345366155L +aL345366156L +aL345366157L +asg12 +(lp6282 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800099999999999 +sS't' +F53675.078711499998 +ss(F309.36238400000002 +F0.31962299999999999 +F1.05002 +F0.94401800000000002 +I0 +tp6283 +(dp6284 +g4 +F0.31962299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.16586400000000001 +sS'm' +F20.757400000000001 +sg8 +F0.94401800000000002 +sg9 +F309.36238400000002 +sg10 +(lp6285 +L346331773L +aL346331774L +aL346331775L +aL346331776L +aL346331772L +asg12 +(lp6286 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.05002 +sS't' +F53974.161202000003 +ss(F309.369843 +F0.34469899999999998 +F0.86513700000000004 +F0.90015000000000001 +I0 +tp6287 +(dp6288 +g4 +F0.34469899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.72118599999999999 +sS'm' +F23.100000000000001 +sg8 +F0.90015000000000001 +sg9 +F309.369843 +sg10 +(lp6289 +L345814757L +aL345814758L +aL345814759L +aL345814760L +asg12 +(lp6290 +I1 +aI2 +aI3 +aI4 +asg14 +F0.86513700000000004 +sS't' +F53693.089975399998 +ss(F309.38067000000001 +F0.32852999999999999 +F0.93523400000000001 +F0.88239800000000002 +I0 +tp6291 +(dp6292 +g4 +F0.32852999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.83068699999999995 +sS'm' +F23.5961 +sg8 +F0.88239800000000002 +sg9 +F309.38067000000001 +sg10 +(lp6293 +L345032224L +aL345032225L +aL345032226L +aL345032227L +asg12 +(lp6294 +I1 +aI2 +aI3 +aI4 +asg14 +F0.93523400000000001 +sS't' +F53670.115531299998 +ss(F309.369259 +F0.318967 +F0.248145 +F0.34809099999999998 +I0 +tp6295 +(dp6296 +g4 +F0.318967 +sg5 +I0 +sg6 +I0 +sg7 +F0.74775400000000003 +sS'm' +F21.8002 +sg8 +F0.34809099999999998 +sg9 +F309.369259 +sg10 +(lp6297 +L327906525L +aL327906526L +aL327906527L +aL327906528L +aL327906529L +asg12 +(lp6298 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248145 +sS't' +F53312.0629242 +ss(F309.37234999999998 +F0.32414300000000001 +F0.88504899999999997 +F1.1100399999999999 +I0 +tp6299 +(dp6300 +g4 +F0.32414300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F7.9769399999999999 +sS'm' +F25.198699999999999 +sg8 +F1.1100399999999999 +sg9 +F309.37234999999998 +sg10 +(lp6301 +L344151938L +aL344151939L +aL344151940L +aL344151941L +aL344151942L +asg12 +(lp6302 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88504899999999997 +sS't' +F53635.138191700004 +ss(F309.37309099999999 +F0.32022099999999998 +F0.487954 +F0.46794799999999998 +I0 +tp6303 +(dp6304 +g4 +F0.32022099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.4513100000000001 +sS'm' +F22.618400000000001 +sg8 +F0.46794799999999998 +sg9 +F309.37309099999999 +sg10 +(lp6305 +L344877841L +aL344877842L +aL344877843L +aL344877844L +aL344877845L +asg12 +(lp6306 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.487954 +sS't' +F53668.108997800002 +ss(F309.372365 +F0.32940799999999998 +F1.09104 +F1.07121 +I0 +tp6307 +(dp6308 +g4 +F0.32940799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.68179999999999996 +sS'm' +F23.748899999999999 +sg8 +F1.07121 +sg9 +F309.372365 +sg10 +(lp6309 +L345685752L +aL345685753L +aL345685754L +aL345685755L +asg12 +(lp6310 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09104 +sS't' +F53680.088076300002 +ss(F309.37235600000002 +F0.32413999999999998 +F0.77521499999999999 +F0.75420600000000004 +I0 +tp6311 +(dp6312 +g4 +F0.32413999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.8466100000000001 +sS'm' +F22.441099999999999 +sg8 +F0.75420600000000004 +sg9 +F309.37235600000002 +sg10 +(lp6313 +L342832249L +aL342832250L +aL342832251L +aL342832252L +aL342832253L +asg12 +(lp6314 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77521499999999999 +sS't' +F53243.2557514 +ss(F309.37474900000001 +F0.33171699999999998 +F0.74900299999999997 +F0.97800500000000001 +I0 +tp6315 +(dp6316 +g4 +F0.33171699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.025535200000000001 +sS'm' +F15.929 +sg8 +F0.97800500000000001 +sg9 +F309.37474900000001 +sg10 +(lp6317 +L171378091L +aL171378092L +aL171378093L +aL171378094L +aL171378095L +asg12 +(lp6318 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107153700003 +ss(F309.37452500000001 +F0.31691000000000003 +F0.92480200000000001 +F1.0303800000000001 +I0 +tp6319 +(dp6320 +g4 +F0.31691000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.61185599999999996 +sS'm' +F23.190000000000001 +sg8 +F1.0303800000000001 +sg9 +F309.37452500000001 +sg10 +(lp6321 +L345225986L +aL345225987L +aL345225988L +aL345225989L +asg12 +(lp6322 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92480200000000001 +sS't' +F53673.0834951 +ss(F309.375879 +F0.34625499999999998 +F0.42496099999999998 +F0.413047 +I0 +tp6323 +(dp6324 +g4 +F0.34625499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.29705 +sS'm' +F22.951599999999999 +sg8 +F0.413047 +sg9 +F309.375879 +sg10 +(lp6325 +L345997881L +aL345997882L +aL345997883L +aL345997884L +asg12 +(lp6326 +I0 +aI1 +aI2 +aI3 +asg14 +F0.42496099999999998 +sS't' +F53703.0931145 +ss(F309.37194699999998 +F0.341053 +F0.88500699999999999 +F1.1100099999999999 +I0 +tp6327 +(dp6328 +g4 +F0.341053 +sg5 +I0 +sg6 +I0 +sg7 +F0.42430499999999999 +sS'm' +F21.917999999999999 +sg8 +F1.1100099999999999 +sg9 +F309.37194699999998 +sg10 +(lp6329 +L344147928L +aL344147929L +aL344147930L +aL344147931L +aL344147932L +asg12 +(lp6330 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500699999999999 +sS't' +F53635.138190600002 +ss(F309.37233300000003 +F0.32415300000000002 +F0.41395999999999999 +F0.41313299999999997 +I0 +tp6331 +(dp6332 +g4 +F0.32415300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F9.64954 +sS'm' +F24.521899999999999 +sg8 +F0.41313299999999997 +sg9 +F309.37233300000003 +sg10 +(lp6333 +L346002810L +aL346002811L +aL346002812L +aL346002813L +aL346002814L +asg12 +(lp6334 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41395999999999999 +sS't' +F53703.093104599997 +ss(F309.37300499999998 +F0.32106800000000002 +F0.92125299999999999 +F1.10015 +I0 +tp6335 +(dp6336 +g4 +F0.32106800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.3149200000000001 +sS'm' +F23.031700000000001 +sg8 +F1.10015 +sg9 +F309.37300499999998 +sg10 +(lp6337 +L345539579L +aL345539580L +aL345539581L +aL345539582L +aL345539583L +asg12 +(lp6338 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92125299999999999 +sS't' +F53677.0997546 +ss(F309.36452200000002 +F0.32446799999999998 +F0.74101099999999998 +F0.96001099999999995 +I0 +tp6339 +(dp6340 +g4 +F0.32446799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.93000700000000003 +sS'm' +F22.7637 +sg8 +F0.96001099999999995 +sg9 +F309.36452200000002 +sg10 +(lp6341 +L344478716L +aL344478717L +aL344478718L +aL344478719L +aL344478720L +asg12 +(lp6342 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74101099999999998 +sS't' +F53644.1238228 +ss(F309.36993999999999 +F0.33445999999999998 +F0.92111399999999999 +F1.1000799999999999 +I0 +tp6343 +(dp6344 +g4 +F0.33445999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.38454300000000002 +sS'm' +F23.110399999999998 +sg8 +F1.1000799999999999 +sg9 +F309.36993999999999 +sg10 +(lp6345 +L345539496L +aL345539497L +aL345539498L +aL345539499L +asg12 +(lp6346 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92111399999999999 +sS't' +F53677.101404499997 +ss(F309.38538799999998 +F0.34016999999999997 +F0.41331499999999999 +F0.412385 +I0 +tp6347 +(dp6348 +g4 +F0.34016999999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.53593400000000002 +sS'm' +F21.973099999999999 +sg8 +F0.412385 +sg9 +F309.38538799999998 +sg10 +(lp6349 +L346001071L +aL346001072L +aL346001073L +aL346001074L +aL346001075L +asg12 +(lp6350 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41331499999999999 +sS't' +F53703.093140899997 +ss(F309.36918900000001 +F0.34574100000000002 +F0.86518099999999998 +F0.90020699999999998 +I0 +tp6351 +(dp6352 +g4 +F0.34574100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.6863199999999998 +sS'm' +F23.8445 +sg8 +F0.90020699999999998 +sg9 +F309.36918900000001 +sg10 +(lp6353 +L345814761L +aL345814762L +aL345814763L +aL345814764L +aL345814765L +asg12 +(lp6354 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86518099999999998 +sS't' +F53693.088315200002 +ss(F309.37878699999999 +F0.33687099999999998 +F1.2068700000000001 +F0.99005299999999996 +I0 +tp6355 +(dp6356 +g4 +F0.33687099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.32782 +sS'm' +F22.835999999999999 +sg8 +F0.99005299999999996 +sg9 +F309.37878699999999 +sg10 +(lp6357 +L346459463L +aL346459464L +aL346459465L +aL346459466L +aL346459467L +asg12 +(lp6358 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.2068700000000001 +sS't' +F54007.119914199997 +ss(F309.38274899999999 +F0.32576500000000003 +F1.0100199999999999 +F0.95301899999999995 +I0 +tp6359 +(dp6360 +g4 +F0.32576500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.053475599999999998 +sS'm' +F19.913599999999999 +sg8 +F0.95301899999999995 +sg9 +F309.38274899999999 +sg10 +(lp6361 +L343713361L +aL343713362L +aL343713363L +aL343713364L +aL343713365L +aL343713366L +aL343713367L +aL343713368L +aL343713359L +aL343713360L +asg12 +(lp6362 +I2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +asg14 +F1.0100199999999999 +sS't' +F53623.157104700003 +ss(F309.38393100000002 +F0.318772 +F1.0800700000000001 +F1.0100899999999999 +I0 +tp6363 +(dp6364 +g4 +F0.318772 +sg5 +I0 +sg6 +I0 +sg7 +F2.1307 +sS'm' +F23.578600000000002 +sg8 +F1.0100899999999999 +sg9 +F309.38393100000002 +sg10 +(lp6365 +L345370393L +aL345370394L +aL345370395L +aL345370396L +aL345370397L +asg12 +(lp6366 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800700000000001 +sS't' +F53675.078752200003 +ss(F309.38889399999999 +F0.34374700000000002 +F0.93300700000000003 +F0.87800800000000001 +I0 +tp6367 +(dp6368 +g4 +F0.34374700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.031536399999999999 +sS'm' +F16.171399999999998 +sg8 +F0.87800800000000001 +sg9 +F309.38889399999999 +sg10 +(lp6369 +L345024791L +aL345024792L +aL345024793L +aL345024794L +aL345024795L +aL345024796L +aL345024797L +aL345024798L +aL345024799L +aL345024800L +asg12 +(lp6370 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.1138957 +ss(F309.36927400000002 +F0.31894800000000001 +F0.85101099999999996 +F0.91301299999999996 +I0 +tp6371 +(dp6372 +g4 +F0.31894800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.47148099999999998 +sS'm' +F21.313800000000001 +sg8 +F0.91301299999999996 +sg9 +F309.36927400000002 +sg10 +(lp6373 +L343878293L +aL343878294L +aL343878295L +aL343878296L +aL343878297L +asg12 +(lp6374 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85101099999999996 +sS't' +F53626.144937899997 +ss(F309.36242499999997 +F0.31964500000000001 +F0.476074 +F0.454071 +I0 +tp6375 +(dp6376 +g4 +F0.31964500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.59694199999999997 +sS'm' +F21.6328 +sg8 +F0.454071 +sg9 +F309.36242499999997 +sg10 +(lp6377 +L344872990L +aL344872991L +aL344872992L +aL344872993L +aL344872994L +asg12 +(lp6378 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.476074 +sS't' +F53668.108968200002 +ss(F309.38898499999999 +F0.34517100000000001 +F0.92100400000000004 +F1.1000099999999999 +I0 +tp6379 +(dp6380 +g4 +F0.34517100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.225161 +sS'm' +F20.8033 +sg8 +F1.1000099999999999 +sg9 +F309.38898499999999 +sg10 +(lp6381 +L345532482L +aL345532483L +aL345532484L +aL345532485L +aL345532486L +asg12 +(lp6382 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100400000000004 +sS't' +F53677.099798900002 +ss(F309.38260500000001 +F0.33969899999999997 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp6383 +(dp6384 +g4 +F0.33969899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.0523454 +sS'm' +F18.691700000000001 +sg8 +F1.1100000000000001 +sg9 +F309.38260500000001 +sg10 +(lp6385 +L344144459L +aL344144460L +aL344144461L +aL344144462L +aL344144463L +asg12 +(lp6386 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138220200002 +ss(F309.372792 +F0.335227 +F1.05002 +F0.94401599999999997 +I0 +tp6387 +(dp6388 +g4 +F0.335227 +sg5 +I0 +sg6 +I0 +sg7 +F0.83924799999999999 +sS'm' +F22.244800000000001 +sg8 +F0.94401599999999997 +sg9 +F309.372792 +sg10 +(lp6389 +L346332061L +aL346332062L +aL346332063L +aL346332064L +aL346332065L +asg12 +(lp6390 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159572500001 +ss(F309.359802 +F0.32506099999999999 +F0.24817600000000001 +F0.34812300000000002 +I0 +tp6391 +(dp6392 +g4 +F0.32506099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.22140699999999999 +sS'm' +F18.992699999999999 +sg8 +F0.34812300000000002 +sg9 +F309.359802 +sg10 +(lp6393 +L327906400L +aL327906399L +aL327906391L +aL327906392L +aL327906393L +aL327906394L +aL327906395L +aL327906396L +aL327906397L +aL327906398L +asg12 +(lp6394 +I4 +aI3 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.24817600000000001 +sS't' +F53312.063727200002 +ss(F309.38074 +F0.32861400000000002 +F0.78048499999999998 +F0.75867799999999996 +I0 +tp6395 +(dp6396 +g4 +F0.32861400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.1700699999999999 +sS'm' +F21.9392 +sg8 +F0.75867799999999996 +sg9 +F309.38074 +sg10 +(lp6397 +L342832315L +aL342832316L +aL342832317L +aL342832318L +aL342832319L +asg12 +(lp6398 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.78048499999999998 +sS't' +F53243.255774700003 +ss(F309.38935099999998 +F0.32217099999999999 +F1.08006 +F1.0100499999999999 +I0 +tp6399 +(dp6400 +g4 +F0.32217099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F6.2250199999999998 +sS'm' +F24.7515 +sg8 +F1.0100499999999999 +sg9 +F309.38935099999998 +sg10 +(lp6401 +L345370476L +aL345370477L +aL345370478L +aL345370479L +aL345370480L +asg12 +(lp6402 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.08006 +sS't' +F53675.078767200001 +ss(F309.37098800000001 +F0.336949 +F1.01041 +F0.99252099999999999 +I0 +tp6403 +(dp6404 +g4 +F0.336949 +sg5 +I0 +sg6 +I0 +sg7 +F2.5000599999999999 +sS'm' +F22.739899999999999 +sg8 +F0.99252099999999999 +sg9 +F309.37098800000001 +sg10 +(lp6405 +L342971031L +aL342971032L +aL342971033L +asg12 +(lp6406 +I2 +aI3 +aI4 +asg14 +F1.01041 +sS't' +F53270.1329157 +ss(F309.36239799999998 +F0.31963999999999998 +F0.74101499999999998 +F0.96001300000000001 +I0 +tp6407 +(dp6408 +g4 +F0.31963999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.0569500000000001 +sS'm' +F22.905899999999999 +sg8 +F0.96001300000000001 +sg9 +F309.36239799999998 +sg10 +(lp6409 +L344475473L +aL344475474L +aL344475475L +aL344475476L +aL344475477L +asg12 +(lp6410 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74101499999999998 +sS't' +F53644.123816899999 +ss(F309.36310800000001 +F0.33103700000000003 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp6411 +(dp6412 +g4 +F0.33103700000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.064435599999999996 +sS'm' +F18.826000000000001 +sg8 +F1.1000099999999999 +sg9 +F309.36310800000001 +sg10 +(lp6413 +L345531831L +aL345531832L +aL345531833L +aL345531834L +aL345531835L +aL345531836L +aL345531837L +aL345531838L +aL345531839L +aL345531840L +asg12 +(lp6414 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099727100001 +ss(F309.36809699999998 +F0.34610299999999999 +F0.92130100000000004 +F1.10029 +I0 +tp6415 +(dp6416 +g4 +F0.34610299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F8.9496199999999995 +sS'm' +F25.124199999999998 +sg8 +F1.10029 +sg9 +F309.36809699999998 +sg10 +(lp6417 +L345539486L +aL345539487L +aL345539488L +aL345539489L +aL345539490L +asg12 +(lp6418 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92130100000000004 +sS't' +F53677.099740899997 +ss(F309.37309800000003 +F0.32445000000000002 +F0.86508300000000005 +F0.90007199999999998 +I0 +tp6419 +(dp6420 +g4 +F0.32445000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.5950700000000002 +sS'm' +F23.462900000000001 +sg8 +F0.90007199999999998 +sg9 +F309.37309800000003 +sg10 +(lp6421 +L345814851L +aL345814852L +aL345814853L +aL345814854L +aL345814855L +asg12 +(lp6422 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86508300000000005 +sS't' +F53693.088325999997 +ss(F309.37449900000001 +F0.31691900000000001 +F0.74751800000000002 +F0.97014500000000004 +I0 +tp6423 +(dp6424 +g4 +F0.31691900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.69403199999999998 +sS'm' +F23.554300000000001 +sg8 +F0.97014500000000004 +sg9 +F309.37449900000001 +sg10 +(lp6425 +L344485530L +aL344485531L +aL344485532L +aL344485533L +aL344485534L +aL344485535L +aL344485536L +aL344485537L +asg12 +(lp6426 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74751800000000002 +sS't' +F53644.125508999998 +ss(F309.38090399999999 +F0.339333 +F1.09077 +F1.07047 +I0 +tp6427 +(dp6428 +g4 +F0.339333 +sg5 +I0 +sg6 +I0 +sg7 +F0.96013400000000004 +sS'm' +F24.1204 +sg8 +F1.07047 +sg9 +F309.38090399999999 +sg10 +(lp6429 +L345676055L +aL345676056L +aL345676058L +aL345676057L +asg12 +(lp6430 +I1 +aI2 +aI4 +aI3 +asg14 +F1.09077 +sS't' +F53680.088100100002 +ss(F309.37575099999998 +F0.346188 +F0.74921599999999999 +F0.97813399999999995 +I0 +tp6431 +(dp6432 +g4 +F0.346188 +sg5 +I0 +sg6 +I0 +sg7 +F5.8897599999999999 +sS'm' +F24.7469 +sg8 +F0.97813399999999995 +sg9 +F309.37575099999998 +sg10 +(lp6433 +L171386389L +aL171386390L +aL171386391L +aL171386392L +aL171386393L +asg12 +(lp6434 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74921599999999999 +sS't' +F54005.107156500002 +ss(F309.36844300000001 +F0.34214899999999998 +F0.92799200000000004 +F1.0337700000000001 +I0 +tp6435 +(dp6436 +g4 +F0.34214899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.92733 +sS'm' +F23.754200000000001 +sg8 +F1.0337700000000001 +sg9 +F309.36844300000001 +sg10 +(lp6437 +L345225917L +aL345225918L +aL345225919L +aL345225920L +aL345225921L +asg12 +(lp6438 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92799200000000004 +sS't' +F53673.081819799998 +ss(F309.37279899999999 +F0.33524700000000002 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp6439 +(dp6440 +g4 +F0.33524700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0180828 +sS'm' +F16.996400000000001 +sg8 +F1.0100100000000001 +sg9 +F309.37279899999999 +sg10 +(lp6441 +L345366235L +aL345366236L +aL345366232L +aL345366233L +aL345366234L +asg12 +(lp6442 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F1.0800000000000001 +sS't' +F53675.077892000001 +ss(F309.36556899999999 +F0.345972 +F0.75882099999999997 +F0.98285199999999995 +I0 +tp6443 +(dp6444 +g4 +F0.345972 +sg5 +I0 +sg6 +I0 +sg7 +F8.3141700000000007 +sS'm' +F23.145399999999999 +sg8 +F0.98285199999999995 +sg9 +F309.36556899999999 +sg10 +(lp6445 +L171377925L +aL171377926L +aL171377927L +asg12 +(lp6446 +I0 +aI1 +aI4 +asg14 +F0.75882099999999997 +sS't' +F54005.107128199998 +ss(F309.36486200000002 +F0.334671 +F0.85333800000000004 +F0.91348399999999996 +I0 +tp6447 +(dp6448 +g4 +F0.334671 +sg5 +I0 +sg6 +I0 +sg7 +F3.1141100000000002 +sS'm' +F23.399699999999999 +sg8 +F0.91348399999999996 +sg9 +F309.36486200000002 +sg10 +(lp6449 +L343881843L +aL343881844L +aL343881845L +aL343881846L +aL343881847L +asg12 +(lp6450 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85333800000000004 +sS't' +F53626.144925699999 +ss(F309.37278400000002 +F0.33524999999999999 +F0.41303000000000001 +F0.41204000000000002 +I0 +tp6451 +(dp6452 +g4 +F0.33524999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F9.1550700000000003 +sS'm' +F24.462499999999999 +sg8 +F0.41204000000000002 +sg9 +F309.37278400000002 +sg10 +(lp6453 +L345997848L +aL345997849L +aL345997850L +aL345997851L +aL345997852L +asg12 +(lp6454 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41303000000000001 +sS't' +F53703.0931059 +ss(F309.37836099999998 +F0.33687699999999998 +F1.09154 +F1.0704899999999999 +I0 +tp6455 +(dp6456 +g4 +F0.33687699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F5.4533399999999999 +sS'm' +F26.027100000000001 +sg8 +F1.0704899999999999 +sg9 +F309.37836099999998 +sg10 +(lp6457 +L345676006L +aL345676007L +aL345676008L +aL345676009L +asg12 +(lp6458 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09154 +sS't' +F53680.088092999998 +ss(F309.369935 +F0.34617599999999998 +F1.0904199999999999 +F1.0703100000000001 +I0 +tp6459 +(dp6460 +g4 +F0.34617599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F9.2256199999999993 +sS'm' +F25.1632 +sg8 +F1.0703100000000001 +sg9 +F309.369935 +sg10 +(lp6461 +L345683713L +aL345683714L +aL345683715L +aL345683716L +asg12 +(lp6462 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0904199999999999 +sS't' +F53680.088069600002 +ss(F309.385648 +F0.32636799999999999 +F1.09002 +F1.07002 +I0 +tp6463 +(dp6464 +g4 +F0.32636799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.4470799999999999 +sS'm' +F23.3066 +sg8 +F1.07002 +sg9 +F309.385648 +sg10 +(lp6465 +L345684079L +aL345684080L +aL345684081L +aL345684082L +aL345684083L +aL345684084L +aL345684085L +aL345684086L +aL345684087L +aL345684088L +asg12 +(lp6466 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09002 +sS't' +F53680.086454800003 +ss(F309.37992300000002 +F0.31975399999999998 +F1.0504100000000001 +F0.94440800000000003 +I0 +tp6467 +(dp6468 +g4 +F0.31975399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.4273400000000001 +sS'm' +F23.423100000000002 +sg8 +F0.94440800000000003 +sg9 +F309.37992300000002 +sg10 +(lp6469 +L346336497L +aL346336498L +aL346336499L +aL346336500L +aL346336501L +asg12 +(lp6470 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0504100000000001 +sS't' +F53974.159592299999 +ss(F309.37449800000002 +F0.31693300000000002 +F0.86902000000000001 +F0.90049199999999996 +I0 +tp6471 +(dp6472 +g4 +F0.31693300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F6.89337 +sS'm' +F24.540800000000001 +sg8 +F0.90049199999999996 +sg9 +F309.37449800000002 +sg10 +(lp6473 +L345816366L +aL345816367L +aL345816368L +aL345816369L +aL345816370L +asg12 +(lp6474 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86902000000000001 +sS't' +F53693.088329899998 +ss(F309.37862100000001 +F0.33686100000000002 +F1.0873200000000001 +F1.0126200000000001 +I0 +tp6475 +(dp6476 +g4 +F0.33686100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F6.6355399999999998 +sS'm' +F24.814800000000002 +sg8 +F1.0126200000000001 +sg9 +F309.37862100000001 +sg10 +(lp6477 +L345363698L +aL345363699L +aL345363700L +aL345363701L +asg12 +(lp6478 +I0 +aI2 +aI3 +aI4 +asg14 +F1.0873200000000001 +sS't' +F53675.078737399999 +ss(F309.38262400000002 +F0.33969300000000002 +F0.47604000000000002 +F0.45403199999999999 +I0 +tp6479 +(dp6480 +g4 +F0.33969300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.065903500000000004 +sS'm' +F18.743200000000002 +sg8 +F0.45403199999999999 +sg9 +F309.38262400000002 +sg10 +(lp6481 +L344871384L +aL344871385L +aL344871386L +aL344871387L +aL344871388L +asg12 +(lp6482 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47604000000000002 +sS't' +F53668.1090243 +ss(F309.388893 +F0.34375 +F0.82804 +F0.94503599999999999 +I0 +tp6483 +(dp6484 +g4 +F0.34375 +sg5 +I0 +sg6 +I0 +sg7 +F0.033817699999999999 +sS'm' +F16.190200000000001 +sg8 +F0.94503599999999999 +sg9 +F309.388893 +sg10 +(lp6485 +L343120718L +aL343120719L +aL343120720L +aL343120721L +aL343120722L +asg12 +(lp6486 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82804 +sS't' +F53288.111801500003 +ss(F309.36004400000002 +F0.32049499999999997 +F0.828009 +F0.94500799999999996 +I0 +tp6487 +(dp6488 +g4 +F0.32049499999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.092889799999999995 +sS'm' +F19.644600000000001 +sg8 +F0.94500799999999996 +sg9 +F309.36004400000002 +sg10 +(lp6489 +L343122924L +aL343122925L +aL343122926L +aL343122927L +aL343122928L +aL343122929L +aL343122930L +aL343122931L +aL343122932L +aL343122933L +asg12 +(lp6490 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828009 +sS't' +F53288.111721300003 +ss(F309.36634700000002 +F0.34081499999999998 +F0.47004200000000002 +F0.50303900000000001 +I0 +tp6491 +(dp6492 +g4 +F0.34081499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.115257 +sS'm' +F18.4876 +sg8 +F0.50303900000000001 +sg9 +F309.36634700000002 +sg10 +(lp6493 +L12885233L +aL12885234L +aL12885235L +aL12885236L +aL12885237L +asg12 +(lp6494 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004200000000002 +sS't' +F53649.118477000004 +ss(F309.37310400000001 +F0.32443699999999998 +F0.47664499999999999 +F0.45439499999999999 +I0 +tp6495 +(dp6496 +g4 +F0.32443699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.61141800000000002 +sS'm' +F22.906099999999999 +sg8 +F0.45439499999999999 +sg9 +F309.37310400000001 +sg10 +(lp6497 +L344876160L +aL344876161L +aL344876162L +aL344876163L +asg12 +(lp6498 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47664499999999999 +sS't' +F53668.110656299999 +ss(F309.377973 +F0.337839 +F0.92100400000000004 +F1.1000099999999999 +I0 +tp6499 +(dp6500 +g4 +F0.337839 +sg5 +I0 +sg6 +I0 +sg7 +F0.056140299999999997 +sS'm' +F18.3337 +sg8 +F1.1000099999999999 +sg9 +F309.377973 +sg10 +(lp6501 +L345532201L +aL345532202L +aL345532203L +aL345532204L +aL345532205L +asg12 +(lp6502 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100400000000004 +sS't' +F53677.099768400003 +ss(F309.38897400000002 +F0.34515899999999999 +F0.93301199999999995 +F0.87801200000000001 +I0 +tp6503 +(dp6504 +g4 +F0.34515899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.40461999999999998 +sS'm' +F21.241599999999998 +sg8 +F0.87801200000000001 +sg9 +F309.38897400000002 +sg10 +(lp6505 +L345024801L +aL345024802L +aL345024803L +aL345024804L +aL345024805L +asg12 +(lp6506 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93301199999999995 +sS't' +F53670.113895900002 +ss(F309.36086699999998 +F0.317662 +F0.98408799999999996 +F0.98807999999999996 +I0 +tp6507 +(dp6508 +g4 +F0.317662 +sg5 +I0 +sg6 +I0 +sg7 +F2.1761699999999999 +sS'm' +F23.41 +sg8 +F0.98807999999999996 +sg9 +F309.36086699999998 +sg10 +(lp6509 +L346461756L +aL346461757L +aL346461758L +aL346461759L +aL346461760L +asg12 +(lp6510 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98408799999999996 +sS't' +F54007.119864400003 +ss(F309.37238600000001 +F0.32937899999999998 +F0.78058499999999997 +F0.83036299999999996 +I0 +tp6511 +(dp6512 +g4 +F0.32937899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.6508699999999998 +sS'm' +F23.095400000000001 +sg8 +F0.83036299999999996 +sg9 +F309.37238600000001 +sg10 +(lp6513 +L343278896L +aL343278897L +aL343278898L +aL343278899L +aL343278900L +asg12 +(lp6514 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.78058499999999997 +sS't' +F53302.107424399997 +ss(F309.364529 +F0.32447999999999999 +F0.77504099999999998 +F0.75407000000000002 +I0 +tp6515 +(dp6516 +g4 +F0.32447999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.25899699999999998 +sS'm' +F21.058499999999999 +sg8 +F0.75407000000000002 +sg9 +F309.364529 +sg10 +(lp6517 +L342828738L +aL342828739L +aL342828740L +aL342828741L +asg12 +(lp6518 +I1 +aI2 +aI3 +aI4 +asg14 +F0.77504099999999998 +sS't' +F53243.257388099999 +ss(F309.37899099999998 +F0.32703900000000002 +F0.61602900000000005 +F0.77503200000000005 +I0 +tp6519 +(dp6520 +g4 +F0.32703900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.42995800000000001 +sS'm' +F21.224299999999999 +sg8 +F0.77503200000000005 +sg9 +F309.37899099999998 +sg10 +(lp6521 +L346171699L +aL346171700L +aL346171701L +aL346171702L +aL346171703L +asg12 +(lp6522 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61602900000000005 +sS't' +F53704.071670199999 +ss(F309.37476099999998 +F0.33169399999999999 +F0.476026 +F0.45402399999999998 +I0 +tp6523 +(dp6524 +g4 +F0.33169399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.037906799999999997 +sS'm' +F15.9902 +sg8 +F0.45402399999999998 +sg9 +F309.37476099999998 +sg10 +(lp6525 +L344871277L +aL344871278L +aL344871279L +aL344871280L +aL344871281L +asg12 +(lp6526 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.476026 +sS't' +F53668.109002500001 +ss(F309.37282199999999 +F0.33523999999999998 +F0.64901799999999998 +F0.53902300000000003 +I0 +tp6527 +(dp6528 +g4 +F0.33523999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.14611 +sS'm' +F21.863099999999999 +sg8 +F0.53902300000000003 +sg9 +F309.37282199999999 +sg10 +(lp6529 +L112297682L +aL112297683L +aL112297684L +aL112297685L +aL112297686L +asg12 +(lp6530 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901799999999998 +sS't' +F53656.106086599997 +ss(F309.37449800000002 +F0.31693399999999999 +F0.86548899999999995 +F0.90034700000000001 +I0 +tp6531 +(dp6532 +g4 +F0.31693399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.48532199999999998 +sS'm' +F20.499199999999998 +sg8 +F0.90034700000000001 +sg9 +F309.37449800000002 +sg10 +(lp6533 +L345816375L +aL345816371L +aL345816372L +aL345816373L +aL345816374L +asg12 +(lp6534 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.86548899999999995 +sS't' +F53693.089159199997 +ss(F309.37581799999998 +F0.34624899999999997 +F1.0134000000000001 +F0.99694799999999995 +I0 +tp6535 +(dp6536 +g4 +F0.34624899999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.55753399999999997 +sS'm' +F22.780899999999999 +sg8 +F0.99694799999999995 +sg9 +F309.37581799999998 +sg10 +(lp6537 +L342970498L +aL342970499L +aL342970500L +aL342970501L +asg12 +(lp6538 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0134000000000001 +sS't' +F53270.136246200003 +ss(F309.36091900000002 +F0.31767699999999999 +F0.64946300000000001 +F0.53944599999999998 +I0 +tp6539 +(dp6540 +g4 +F0.31767699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.3753299999999999 +sS'm' +F22.065300000000001 +sg8 +F0.53944599999999998 +sg9 +F309.36091900000002 +sg10 +(lp6541 +L112299265L +aL112299266L +aL112299267L +aL112299268L +aL112299269L +asg12 +(lp6542 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64946300000000001 +sS't' +F53656.1060536 +ss(F309.385423 +F0.34019300000000002 +F1.01004 +F0.99203799999999998 +I0 +tp6543 +(dp6544 +g4 +F0.34019300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.61844399999999999 +sS'm' +F21.812799999999999 +sg8 +F0.99203799999999998 +sg9 +F309.385423 +sg10 +(lp6545 +L342968334L +aL342968335L +aL342968336L +aL342968337L +aL342968338L +asg12 +(lp6546 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01004 +sS't' +F53270.134614399998 +ss(F309.36682200000001 +F0.33556900000000001 +F0.77565099999999998 +F0.75500100000000003 +I0 +tp6547 +(dp6548 +g4 +F0.33556900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.374089 +sS'm' +F21.724599999999999 +sg8 +F0.75500100000000003 +sg9 +F309.36682200000001 +sg10 +(lp6549 +L342832175L +aL342832176L +aL342832177L +asg12 +(lp6550 +I2 +aI3 +aI4 +asg14 +F0.77565099999999998 +sS't' +F53243.254077400001 +ss(F309.38237199999998 +F0.32446999999999998 +F0.93383499999999997 +F0.87862700000000005 +I0 +tp6551 +(dp6552 +g4 +F0.32446999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.184119 +sS'm' +F20.878399999999999 +sg8 +F0.87862700000000005 +sg9 +F309.38237199999998 +sg10 +(lp6553 +L345028373L +aL345028374L +aL345028370L +aL345028371L +aL345028372L +asg12 +(lp6554 +I3 +aI4 +aI0 +aI1 +aI2 +asg14 +F0.93383499999999997 +sS't' +F53670.113048300002 +ss(F309.37770399999999 +F0.34560000000000002 +F0.92110800000000004 +F1.1001000000000001 +I0 +tp6555 +(dp6556 +g4 +F0.34560000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.26838499999999998 +sS'm' +F22.6967 +sg8 +F1.1001000000000001 +sg9 +F309.37770399999999 +sg10 +(lp6557 +L345539698L +aL345539699L +aL345539700L +aL345539701L +aL345539702L +aL345539703L +aL345539704L +aL345539705L +asg12 +(lp6558 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92110800000000004 +sS't' +F53677.101426100002 +ss(F309.38216199999999 +F0.321739 +F0.88500500000000004 +F1.1100000000000001 +I0 +tp6559 +(dp6560 +g4 +F0.321739 +sg5 +I0 +sg6 +I0 +sg7 +F0.17403199999999999 +sS'm' +F20.8125 +sg8 +F1.1100000000000001 +sg9 +F309.38216199999999 +sg10 +(lp6561 +L344148110L +aL344148111L +aL344148112L +aL344148113L +aL344148114L +aL344148115L +aL344148116L +aL344148117L +aL344148118L +aL344148119L +asg12 +(lp6562 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500500000000004 +sS't' +F53635.138219 +ss(F309.38217100000003 +F0.32172800000000001 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp6563 +(dp6564 +g4 +F0.32172800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.161357 +sS'm' +F20.6934 +sg8 +F1.0700000000000001 +sg9 +F309.38217100000003 +sg10 +(lp6565 +L345679384L +aL345679385L +aL345679386L +aL345679387L +aL345679388L +asg12 +(lp6566 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086445100002 +ss(F309.36826000000002 +F0.32758799999999999 +F0.92120400000000002 +F1.10023 +I0 +tp6567 +(dp6568 +g4 +F0.32758799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.61507100000000003 +sS'm' +F23.639399999999998 +sg8 +F1.10023 +sg9 +F309.36826000000002 +sg10 +(lp6569 +L345537944L +aL345537945L +aL345537946L +aL345537947L +asg12 +(lp6570 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92120400000000002 +sS't' +F53677.101399799998 +ss(F309.38261599999998 +F0.339694 +F0.47004299999999999 +F0.50304099999999996 +I0 +tp6571 +(dp6572 +g4 +F0.339694 +sg5 +I0 +sg6 +I0 +sg7 +F0.14075399999999999 +sS'm' +F18.759 +sg8 +F0.50304099999999996 +sg9 +F309.38261599999998 +sg10 +(lp6573 +L12885303L +aL12885304L +aL12885305L +aL12885306L +aL12885307L +asg12 +(lp6574 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004299999999999 +sS't' +F53649.118522199999 +ss(F309.36148200000002 +F0.31858900000000001 +F0.41458099999999998 +F0.41523399999999999 +I0 +tp6575 +(dp6576 +g4 +F0.31858900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.98776799999999998 +sS'm' +F21.8794 +sg8 +F0.41523399999999999 +sg9 +F309.36148200000002 +sg10 +(lp6577 +L345997714L +aL345997715L +aL345997716L +aL345997717L +aL345997718L +asg12 +(lp6578 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41458099999999998 +sS't' +F53703.093074500001 +ss(F309.38780500000001 +F0.32187100000000002 +F0.93475799999999998 +F0.87879600000000002 +I0 +tp6579 +(dp6580 +g4 +F0.32187100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.25058900000000001 +sS'm' +F21.242599999999999 +sg8 +F0.87879600000000002 +sg9 +F309.38780500000001 +sg10 +(lp6581 +L345030958L +aL345030959L +aL345030956L +aL345030957L +asg12 +(lp6582 +I3 +aI4 +aI1 +aI2 +asg14 +F0.93475799999999998 +sS't' +F53670.113063299999 +ss(F309.38070499999998 +F0.32852199999999998 +F1.0125 +F0.95611500000000005 +I0 +tp6583 +(dp6584 +g4 +F0.32852199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.2050700000000001 +sS'm' +F25.0351 +sg8 +F0.95611500000000005 +sg9 +F309.38070499999998 +sg10 +(lp6585 +L343717453L +aL343717454L +aL343717455L +aL343717456L +asg12 +(lp6586 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0125 +sS't' +F53623.160415999999 +ss(F309.35980899999998 +F0.32505699999999998 +F0.85101499999999997 +F0.913018 +I0 +tp6587 +(dp6588 +g4 +F0.32505699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.54142 +sS'm' +F22.634 +sg8 +F0.913018 +sg9 +F309.35980899999998 +sg10 +(lp6589 +L343878162L +aL343878163L +aL343878164L +aL343878165L +aL343878166L +asg12 +(lp6590 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85101499999999997 +sS't' +F53626.1449116 +ss(F309.36312199999998 +F0.331069 +F0.61601399999999995 +F0.77501799999999998 +I0 +tp6591 +(dp6592 +g4 +F0.331069 +sg5 +I0 +sg6 +I0 +sg7 +F0.068584900000000004 +sS'm' +F18.772200000000002 +sg8 +F0.77501799999999998 +sg9 +F309.36312199999998 +sg10 +(lp6593 +L346166027L +aL346166028L +aL346166029L +aL346166030L +aL346166031L +asg12 +(lp6594 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601399999999995 +sS't' +F53704.071626099998 +ss(F309.38262700000001 +F0.33969100000000002 +F0.85100399999999998 +F0.91300800000000004 +I0 +tp6595 +(dp6596 +g4 +F0.33969100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.068087700000000001 +sS'm' +F18.727 +sg8 +F0.91300800000000004 +sg9 +F309.38262700000001 +sg10 +(lp6597 +L343874301L +aL343874302L +aL343874303L +aL343874304L +aL343874305L +asg12 +(lp6598 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100399999999998 +sS't' +F53626.144975000003 +ss(F309.35981800000002 +F0.32508300000000001 +F0.61602900000000005 +F0.77502899999999997 +I0 +tp6599 +(dp6600 +g4 +F0.32508300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.074976899999999999 +sS'm' +F20.570599999999999 +sg8 +F0.77502899999999997 +sg9 +F309.35981800000002 +sg10 +(lp6601 +L346170886L +aL346170887L +aL346170888L +aL346170889L +aL346170890L +aL346170891L +aL346170892L +aL346170893L +asg12 +(lp6602 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61602900000000005 +sS't' +F53704.073275399998 +ss(F309.36776099999997 +F0.333652 +F0.74916099999999997 +F0.97811800000000004 +I0 +tp6603 +(dp6604 +g4 +F0.333652 +sg5 +I0 +sg6 +I0 +sg7 +F0.80304600000000004 +sS'm' +F23.9344 +sg8 +F0.97811800000000004 +sg9 +F309.36776099999997 +sg10 +(lp6605 +L171388713L +aL171388714L +aL171388715L +aL171388716L +asg12 +(lp6606 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74916099999999997 +sS't' +F54005.108792799998 +ss(F309.38261899999998 +F0.33971800000000002 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp6607 +(dp6608 +g4 +F0.33971800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.069620699999999994 +sS'm' +F18.7394 +sg8 +F0.99200699999999997 +sg9 +F309.38261899999998 +sg10 +(lp6609 +L342962106L +aL342962107L +aL342962108L +aL342962109L +aL342962110L +aL342962111L +aL342962112L +aL342962113L +aL342962114L +aL342962115L +asg12 +(lp6610 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134606599997 +ss(F309.38007800000003 +F0.34212399999999998 +F0.85100299999999995 +F0.91300700000000001 +I0 +tp6611 +(dp6612 +g4 +F0.34212399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.0653527 +sS'm' +F18.643000000000001 +sg8 +F0.91300700000000001 +sg9 +F309.38007800000003 +sg10 +(lp6613 +L343874316L +aL343874317L +aL343874318L +aL343874319L +aL343874320L +asg12 +(lp6614 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.1449679 +ss(F309.38261399999999 +F0.33970699999999998 +F0.50603799999999999 +F0.45910099999999998 +I0 +tp6615 +(dp6616 +g4 +F0.33970699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.081855399999999995 +sS'm' +F18.7789 +sg8 +F0.45910099999999998 +sg9 +F309.38261399999999 +sg10 +(lp6617 +L153250321L +aL153250322L +aL153250323L +aL153250324L +aL153250325L +aL153250326L +aL153250327L +aL153250328L +aL153250329L +aL153250330L +asg12 +(lp6618 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50603799999999999 +sS't' +F53702.0839996 +ss(F309.38010200000002 +F0.342138 +F0.47604299999999999 +F0.45403100000000002 +I0 +tp6619 +(dp6620 +g4 +F0.342138 +sg5 +I0 +sg6 +I0 +sg7 +F0.063196299999999997 +sS'm' +F18.655799999999999 +sg8 +F0.45403100000000002 +sg9 +F309.38010200000002 +sg10 +(lp6621 +L344871319L +aL344871320L +aL344871321L +aL344871322L +aL344871323L +asg12 +(lp6622 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47604299999999999 +sS't' +F53668.109017299998 +ss(F309.37774100000001 +F0.34563199999999999 +F0.77952299999999997 +F0.829237 +I0 +tp6623 +(dp6624 +g4 +F0.34563199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.16307 +sS'm' +F23.0749 +sg8 +F0.829237 +sg9 +F309.37774100000001 +sg10 +(lp6625 +L343278977L +aL343278978L +aL343278979L +aL343278980L +aL343278981L +aL343278982L +aL343278983L +aL343278984L +asg12 +(lp6626 +I1 +aI2 +aI3 +aI4 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77952299999999997 +sS't' +F53302.109097699999 +ss(F309.38887699999998 +F0.34376699999999999 +F0.413024 +F0.41203299999999998 +I0 +tp6627 +(dp6628 +g4 +F0.34376699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.037260000000000001 +sS'm' +F16.200900000000001 +sg8 +F0.41203299999999998 +sg9 +F309.38887699999998 +sg10 +(lp6629 +L345996180L +aL345996181L +aL345996182L +aL345996183L +aL345996184L +aL345996185L +aL345996186L +aL345996187L +aL345996188L +aL345996189L +asg12 +(lp6630 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.413024 +sS't' +F53703.093150599998 +ss(F309.363113 +F0.33105499999999999 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp6631 +(dp6632 +g4 +F0.33105499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.070638699999999999 +sS'm' +F18.7864 +sg8 +F0.99200699999999997 +sg9 +F309.363113 +sg10 +(lp6633 +L342961814L +aL342961815L +aL342961816L +aL342961817L +aL342961818L +aL342961819L +aL342961820L +aL342961821L +aL342961822L +aL342961823L +asg12 +(lp6634 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134552399999 +ss(F309.38272899999998 +F0.33516800000000002 +F0.98400600000000005 +F0.98800500000000002 +I0 +tp6635 +(dp6636 +g4 +F0.33516800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.090827099999999994 +sS'm' +F19.463999999999999 +sg8 +F0.98800500000000002 +sg9 +F309.38272899999998 +sg10 +(lp6637 +L346462189L +aL346462190L +aL346462191L +aL346462192L +aL346462193L +asg12 +(lp6638 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400600000000005 +sS't' +F54007.1199251 +ss(F309.37280399999997 +F0.33523399999999998 +F0.506046 +F0.45911000000000002 +I0 +tp6639 +(dp6640 +g4 +F0.33523399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.1715899999999999 +sS'm' +F21.993500000000001 +sg8 +F0.45911000000000002 +sg9 +F309.37280399999997 +sg10 +(lp6641 +L153250171L +aL153250172L +aL153250173L +aL153250174L +aL153250175L +asg12 +(lp6642 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.506046 +sS't' +F53702.083972300003 +ss(F309.38190400000002 +F0.336169 +F0.82855100000000004 +F0.94562500000000005 +I0 +tp6643 +(dp6644 +g4 +F0.336169 +sg5 +I0 +sg6 +I0 +sg7 +F5.47159 +sS'm' +F25.303699999999999 +sg8 +F0.94562500000000005 +sg9 +F309.38190400000002 +sg10 +(lp6645 +L343123394L +aL343123395L +aL343123396L +aL343123397L +asg12 +(lp6646 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82855100000000004 +sS't' +F53288.113440499998 +ss(F309.382184 +F0.32173600000000002 +F0.47248600000000002 +F0.50550200000000001 +I0 +tp6647 +(dp6648 +g4 +F0.32173600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0000599999999999 +sS'm' +F20.965299999999999 +sg8 +F0.50550200000000001 +sg9 +F309.382184 +sg10 +(lp6649 +L12887250L +aL12887251L +aL12887252L +aL12887253L +aL12887254L +asg12 +(lp6650 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47248600000000002 +sS't' +F53649.118520999997 +ss(F309.382631 +F0.33970499999999998 +F0.64901299999999995 +F0.53901699999999997 +I0 +tp6651 +(dp6652 +g4 +F0.33970499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.080348600000000006 +sS'm' +F18.741499999999998 +sg8 +F0.53901699999999997 +sg9 +F309.382631 +sg10 +(lp6653 +L112296832L +aL112296833L +aL112296834L +aL112296835L +aL112296836L +asg12 +(lp6654 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64901299999999995 +sS't' +F53656.106113900001 +ss(F309.38077299999998 +F0.34456399999999998 +F0.92113599999999995 +F1.1001099999999999 +I0 +tp6655 +(dp6656 +g4 +F0.34456399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.56569199999999997 +sS'm' +F23.5426 +sg8 +F1.1001099999999999 +sg9 +F309.38077299999998 +sg10 +(lp6657 +L345542063L +aL345542064L +aL345542065L +aL345542066L +asg12 +(lp6658 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92113599999999995 +sS't' +F53677.101434600001 +ss(F309.38717000000003 +F0.319297 +F1.0102500000000001 +F0.99224900000000005 +I0 +tp6659 +(dp6660 +g4 +F0.319297 +sg5 +I0 +sg6 +I0 +sg7 +F1.8285800000000001 +sS'm' +F24.081299999999999 +sg8 +F0.99224900000000005 +sg9 +F309.38717000000003 +sg10 +(lp6661 +L342968330L +aL342968331L +aL342968332L +aL342968333L +asg12 +(lp6662 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0102500000000001 +sS't' +F53270.136277700003 +ss(F309.38542000000001 +F0.34015800000000002 +F0.7752 +F0.75428899999999999 +I0 +tp6663 +(dp6664 +g4 +F0.34015800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.75919999999999999 +sS'm' +F21.461200000000002 +sg8 +F0.75428899999999999 +sg9 +F309.38542000000001 +sg10 +(lp6665 +L342830496L +aL342830497L +aL342830498L +aL342830499L +aL342830500L +asg12 +(lp6666 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.7752 +sS't' +F53243.2557877 +ss(F309.36148300000002 +F0.318525 +F1.01013 +F0.99229500000000004 +I0 +tp6667 +(dp6668 +g4 +F0.318525 +sg5 +I0 +sg6 +I0 +sg7 +F0.39898099999999997 +sS'm' +F22.393999999999998 +sg8 +F0.99229500000000004 +sg9 +F309.36148300000002 +sg10 +(lp6669 +L342965971L +aL342965972L +aL342965973L +aL342965974L +asg12 +(lp6670 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01013 +sS't' +F53270.136206299998 +ss(F309.368403 +F0.34216000000000002 +F1.0929500000000001 +F1.0726599999999999 +I0 +tp6671 +(dp6672 +g4 +F0.34216000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.32419 +sS'm' +F23.2028 +sg8 +F1.0726599999999999 +sg9 +F309.368403 +sg10 +(lp6673 +L345685697L +aL345685698L +aL345685699L +aL345685700L +aL345685701L +asg12 +(lp6674 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0929500000000001 +sS't' +F53680.086406900002 +ss(F309.36992800000002 +F0.334513 +F0.61895500000000003 +F0.777725 +I0 +tp6675 +(dp6676 +g4 +F0.334513 +sg5 +I0 +sg6 +I0 +sg7 +F0.67132599999999998 +sS'm' +F23.144500000000001 +sg8 +F0.777725 +sg9 +F309.36992800000002 +sg10 +(lp6677 +L346174288L +aL346174289L +aL346174290L +aL346174291L +asg12 +(lp6678 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61895500000000003 +sS't' +F53704.073303500001 +ss(F309.38937299999998 +F0.32214100000000001 +F0.47634100000000001 +F0.45477800000000002 +I0 +tp6679 +(dp6680 +g4 +F0.32214100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F6.7686900000000003 +sS'm' +F24.300999999999998 +sg8 +F0.45477800000000002 +sg9 +F309.38937299999998 +sg10 +(lp6681 +L344876336L +aL344876337L +aL344876338L +aL344876339L +aL344876340L +asg12 +(lp6682 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47634100000000001 +sS't' +F53668.109043099998 +ss(F309.381845 +F0.336198 +F0.77929800000000005 +F0.82932799999999995 +I0 +tp6683 +(dp6684 +g4 +F0.336198 +sg5 +I0 +sg6 +I0 +sg7 +F0.86207299999999998 +sS'm' +F21.863199999999999 +sg8 +F0.82932799999999995 +sg9 +F309.381845 +sg10 +(lp6685 +L343273476L +aL343273477L +aL343273478L +aL343273479L +aL343273480L +asg12 +(lp6686 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77929800000000005 +sS't' +F53302.107450700001 +ss(F309.36309799999998 +F0.322768 +F1.0805400000000001 +F1.01023 +I0 +tp6687 +(dp6688 +g4 +F0.322768 +sg5 +I0 +sg6 +I0 +sg7 +F0.77694300000000005 +sS'm' +F23.668800000000001 +sg8 +F1.01023 +sg9 +F309.36309799999998 +sg10 +(lp6689 +L345371695L +aL345371696L +aL345371697L +aL345371698L +asg12 +(lp6690 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0805400000000001 +sS't' +F53675.080352800003 +ss(F309.38750700000003 +F0.33213999999999999 +F0.74116099999999996 +F0.96012500000000001 +I0 +tp6691 +(dp6692 +g4 +F0.33213999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F7.6922100000000002 +sS'm' +F25.095400000000001 +sg8 +F0.96012500000000001 +sg9 +F309.38750700000003 +sg10 +(lp6693 +L344481290L +aL344481291L +aL344481292L +aL344481293L +aL344481294L +asg12 +(lp6694 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74116099999999996 +sS't' +F53644.123886699999 +ss(F309.38751500000001 +F0.33220300000000003 +F1.0801499999999999 +F1.01014 +I0 +tp6695 +(dp6696 +g4 +F0.33220300000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.8064899999999999 +sS'm' +F23.388500000000001 +sg8 +F1.01014 +sg9 +F309.38751500000001 +sg10 +(lp6697 +L345367532L +aL345367533L +aL345367534L +aL345367535L +aL345367536L +asg12 +(lp6698 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0801499999999999 +sS't' +F53675.078762099998 +ss(F309.382611 +F0.33970400000000001 +F0.92400700000000002 +F1.0300199999999999 +I0 +tp6699 +(dp6700 +g4 +F0.33970400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.057391699999999997 +sS'm' +F18.709599999999998 +sg8 +F1.0300199999999999 +sg9 +F309.382611 +sg10 +(lp6701 +L345217562L +aL345217563L +aL345217564L +aL345217565L +aL345217566L +asg12 +(lp6702 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400700000000002 +sS't' +F53673.0818592 +ss(F309.387812 +F0.32186100000000001 +F0.25612400000000002 +F0.35656900000000002 +I0 +tp6703 +(dp6704 +g4 +F0.32186100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.7946 +sS'm' +F23.224399999999999 +sg8 +F0.35656900000000002 +sg9 +F309.387812 +sg10 +(lp6705 +L327906713L +aL327906714L +aL327906715L +aL327906716L +aL327906717L +asg12 +(lp6706 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.25612400000000002 +sS't' +F53312.0629758 +ss(F309.368492 +F0.339449 +F1.09097 +F1.07094 +I0 +tp6707 +(dp6708 +g4 +F0.339449 +sg5 +I0 +sg6 +I0 +sg7 +F2.9822000000000002 +sS'm' +F24.100999999999999 +sg8 +F1.07094 +sg9 +F309.368492 +sg10 +(lp6709 +L345685707L +aL345685708L +aL345685709L +aL345685710L +aL345685711L +asg12 +(lp6710 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09097 +sS't' +F53680.086407100003 +ss(F309.37431299999997 +F0.326575 +F0.82801400000000003 +F0.94501100000000005 +I0 +tp6711 +(dp6712 +g4 +F0.326575 +sg5 +I0 +sg6 +I0 +sg7 +F1.0635699999999999 +sS'm' +F22.5381 +sg8 +F0.94501100000000005 +sg9 +F309.37431299999997 +sg10 +(lp6713 +L343126010L +aL343126011L +aL343126012L +aL343126013L +aL343126014L +aL343126015L +aL343126016L +aL343126017L +aL343126018L +aL343126019L +asg12 +(lp6714 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801400000000003 +sS't' +F53288.111761 +ss(F309.373041 +F0.32109900000000002 +F0.74128899999999998 +F0.96018400000000004 +I0 +tp6715 +(dp6716 +g4 +F0.32109900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.55421399999999998 +sS'm' +F23.375 +sg8 +F0.96018400000000004 +sg9 +F309.373041 +sg10 +(lp6717 +L344482933L +aL344482934L +aL344482935L +aL344482936L +asg12 +(lp6718 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74128899999999998 +sS't' +F53644.125504900003 +ss(F309.37280399999997 +F0.33524799999999999 +F0.749004 +F0.97800600000000004 +I0 +tp6719 +(dp6720 +g4 +F0.33524799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.37234200000000001 +sS'm' +F21.6755 +sg8 +F0.97800600000000004 +sg9 +F309.37280399999997 +sg10 +(lp6721 +L171381406L +aL171381407L +aL171381408L +aL171381409L +aL171381410L +asg12 +(lp6722 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.749004 +sS't' +F54005.107148299998 +ss(F309.378987 +F0.32700800000000002 +F0.77507099999999995 +F0.75407999999999997 +I0 +tp6723 +(dp6724 +g4 +F0.32700800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.70397699999999996 +sS'm' +F21.380099999999999 +sg8 +F0.75407999999999997 +sg9 +F309.378987 +sg10 +(lp6725 +L342830412L +aL342830413L +aL342830414L +aL342830415L +aL342830416L +asg12 +(lp6726 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77507099999999995 +sS't' +F53243.255769800002 +ss(F309.38770799999998 +F0.32191199999999998 +F0.92428600000000005 +F1.10232 +I0 +tp6727 +(dp6728 +g4 +F0.32191199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.2726899999999999 +sS'm' +F23.6404 +sg8 +F1.10232 +sg9 +F309.38770799999998 +sg10 +(lp6729 +L345537456L +aL345537457L +aL345537458L +aL345537459L +aL345537460L +asg12 +(lp6730 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92428600000000005 +sS't' +F53677.099795399998 +ss(F309.37464499999999 +F0.31689299999999998 +F0.497359 +F0.467916 +I0 +tp6731 +(dp6732 +g4 +F0.31689299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.09656 +sS'm' +F22.310199999999998 +sg8 +F0.467916 +sg9 +F309.37464499999999 +sg10 +(lp6733 +L344877851L +aL344877852L +aL344877853L +aL344877854L +aL344877855L +asg12 +(lp6734 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.497359 +sS't' +F53668.109002199999 +ss(F309.36980699999998 +F0.34463100000000002 +F0.82813000000000003 +F0.94509299999999996 +I0 +tp6735 +(dp6736 +g4 +F0.34463100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.69088499999999997 +sS'm' +F23.383600000000001 +sg8 +F0.94509299999999996 +sg9 +F309.36980699999998 +sg10 +(lp6737 +L343127533L +aL343127534L +aL343127535L +aL343127536L +asg12 +(lp6738 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82813000000000003 +sS't' +F53288.113406900004 +ss(F309.36505399999999 +F0.33013300000000001 +F0.50604400000000005 +F0.45910899999999999 +I0 +tp6739 +(dp6740 +g4 +F0.33013300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.42521700000000001 +sS'm' +F20.866599999999998 +sg8 +F0.45910899999999999 +sg9 +F309.36505399999999 +sg10 +(lp6741 +L153250091L +aL153250092L +aL153250093L +aL153250094L +aL153250095L +asg12 +(lp6742 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50604400000000005 +sS't' +F53702.083950799999 +ss(F309.36242299999998 +F0.31964500000000001 +F0.64912400000000003 +F0.53914899999999999 +I0 +tp6743 +(dp6744 +g4 +F0.31964500000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.70375900000000002 +sS'm' +F21.328900000000001 +sg8 +F0.53914899999999999 +sg9 +F309.36242299999998 +sg10 +(lp6745 +L112296625L +aL112296626L +aL112296627L +aL112296628L +aL112296629L +asg12 +(lp6746 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64912400000000003 +sS't' +F53656.106057800003 +ss(F309.38830799999999 +F0.34628900000000001 +F0.92599500000000001 +F1.0348599999999999 +I0 +tp6747 +(dp6748 +g4 +F0.34628900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.02257 +sS'm' +F23.968399999999999 +sg8 +F1.0348599999999999 +sg9 +F309.38830799999999 +sg10 +(lp6749 +L345217739L +aL345217740L +aL345217741L +asg12 +(lp6750 +I2 +aI3 +aI4 +asg14 +F0.92599500000000001 +sS't' +F53673.080216399998 +ss(F309.37473299999999 +F0.331706 +F1.0100100000000001 +F0.953009 +I0 +tp6751 +(dp6752 +g4 +F0.331706 +sg5 +I0 +sg6 +I0 +sg7 +F0.042413899999999997 +sS'm' +F15.9655 +sg8 +F0.953009 +sg9 +F309.37473299999999 +sg10 +(lp6753 +L343709429L +aL343709430L +aL343709431L +aL343709432L +aL343709433L +asg12 +(lp6754 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158740999999 +ss(F309.36929300000003 +F0.318969 +F0.64905599999999997 +F0.53905599999999998 +I0 +tp6755 +(dp6756 +g4 +F0.318969 +sg5 +I0 +sg6 +I0 +sg7 +F0.73105299999999995 +sS'm' +F21.370999999999999 +sg8 +F0.53905599999999998 +sg9 +F309.36929300000003 +sg10 +(lp6757 +L112299309L +aL112299310L +aL112299311L +aL112299312L +aL112299313L +asg12 +(lp6758 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64905599999999997 +sS't' +F53656.106076800002 +ss(F309.37899199999998 +F0.32703900000000002 +F1.0100100000000001 +F0.99201399999999995 +I0 +tp6759 +(dp6760 +g4 +F0.32703900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.56196000000000002 +sS'm' +F21.711300000000001 +sg8 +F0.99201399999999995 +sg9 +F309.37899199999998 +sg10 +(lp6761 +L342966101L +aL342966102L +aL342966103L +aL342966104L +aL342966105L +asg12 +(lp6762 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.1345965 +ss(F309.378533 +F0.33688600000000002 +F1.0108999999999999 +F0.95351399999999997 +I0 +tp6763 +(dp6764 +g4 +F0.33688600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.9696199999999999 +sS'm' +F21.759599999999999 +sg8 +F0.95351399999999997 +sg9 +F309.378533 +sg10 +(lp6765 +L343709482L +aL343709483L +aL343709484L +asg12 +(lp6766 +I2 +aI3 +aI4 +asg14 +F1.0108999999999999 +sS't' +F53623.157093000002 +ss(F309.36811299999999 +F0.34605900000000001 +F0.74136800000000003 +F0.96054200000000001 +I0 +tp6767 +(dp6768 +g4 +F0.34605900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.93192600000000003 +sS'm' +F24.0106 +sg8 +F0.96054200000000001 +sg9 +F309.36811299999999 +sg10 +(lp6769 +L344482803L +aL344482804L +aL344482805L +aL344482806L +asg12 +(lp6770 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74136800000000003 +sS't' +F53644.125491300001 +ss(F309.365994 +F0.33172699999999999 +F0.93300799999999995 +F0.87800900000000004 +I0 +tp6771 +(dp6772 +g4 +F0.33172699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.16626099999999999 +sS'm' +F20.405799999999999 +sg8 +F0.87800900000000004 +sg9 +F309.365994 +sg10 +(lp6773 +L345024440L +aL345024441L +aL345024442L +aL345024443L +aL345024444L +asg12 +(lp6774 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300799999999995 +sS't' +F53670.113832000003 +ss(F309.38367199999999 +F0.34498099999999998 +F0.50617800000000002 +F0.45923599999999998 +I0 +tp6775 +(dp6776 +g4 +F0.34498099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.63888900000000004 +sS'm' +F21.320499999999999 +sg8 +F0.45923599999999998 +sg9 +F309.38367199999999 +sg10 +(lp6777 +L153252821L +aL153252822L +aL153252823L +aL153252824L +aL153252825L +asg12 +(lp6778 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50617800000000002 +sS't' +F53702.0840025 +ss(F309.37195100000002 +F0.34107300000000002 +F0.248192 +F0.34812799999999999 +I0 +tp6779 +(dp6780 +g4 +F0.34107300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.68098800000000004 +sS'm' +F21.6936 +sg8 +F0.34812799999999999 +sg9 +F309.37195100000002 +sg10 +(lp6781 +L327906543L +aL327906544L +aL327906545L +aL327906546L +aL327906547L +asg12 +(lp6782 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248192 +sS't' +F53312.062931699998 +ss(F309.367457 +F0.32938899999999999 +F0.74904199999999999 +F0.97802699999999998 +I0 +tp6783 +(dp6784 +g4 +F0.32938899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.14090800000000001 +sS'm' +F19.382300000000001 +sg8 +F0.97802699999999998 +sg9 +F309.367457 +sg10 +(lp6785 +L171384918L +aL171384915L +aL171384916L +aL171384917L +asg12 +(lp6786 +I4 +aI1 +aI2 +aI3 +asg14 +F0.74904199999999999 +sS't' +F54005.1079627 +ss(F309.38562999999999 +F0.32638200000000001 +F0.24906600000000001 +F0.34884700000000002 +I0 +tp6787 +(dp6788 +g4 +F0.32638200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.28604600000000002 +sS'm' +F21.973400000000002 +sg8 +F0.34884700000000002 +sg9 +F309.38562999999999 +sg10 +(lp6789 +L327906699L +aL327906700L +aL327906701L +aL327906702L +asg12 +(lp6790 +I1 +aI2 +aI3 +aI4 +asg14 +F0.24906600000000001 +sS't' +F53312.064628100001 +ss(F309.38260700000001 +F0.33970699999999998 +F0.98400500000000002 +F0.98800399999999999 +I0 +tp6791 +(dp6792 +g4 +F0.33970699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.066325300000000004 +sS'm' +F18.7638 +sg8 +F0.98800399999999999 +sg9 +F309.38260700000001 +sg10 +(lp6793 +L346459503L +aL346459504L +aL346459505L +aL346459506L +aL346459507L +aL346459508L +aL346459509L +aL346459510L +aL346459511L +aL346459512L +asg12 +(lp6794 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400500000000002 +sS't' +F54007.119924799998 +ss(F309.388126 +F0.338092 +F0.93308999999999997 +F0.87810200000000005 +I0 +tp6795 +(dp6796 +g4 +F0.338092 +sg5 +I0 +sg6 +I0 +sg7 +F1.09067 +sS'm' +F22.604399999999998 +sg8 +F0.87810200000000005 +sg9 +F309.388126 +sg10 +(lp6797 +L345030976L +aL345030977L +aL345030978L +aL345030979L +aL345030980L +asg12 +(lp6798 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93308999999999997 +sS't' +F53670.113893499998 +ss(F309.367481 +F0.32936700000000002 +F0.61622600000000005 +F0.77518699999999996 +I0 +tp6799 +(dp6800 +g4 +F0.32936700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.56554700000000002 +sS'm' +F22.954000000000001 +sg8 +F0.77518699999999996 +sg9 +F309.367481 +sg10 +(lp6801 +L346166052L +aL346166053L +aL346166054L +aL346166055L +asg12 +(lp6802 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61622600000000005 +sS't' +F53704.0732967 +ss(F309.38532500000002 +F0.33195599999999997 +F0.649227 +F0.53925000000000001 +I0 +tp6803 +(dp6804 +g4 +F0.33195599999999997 +sg5 +I0 +sg6 +I0 +sg7 +F9.1562900000000003 +sS'm' +F24.128299999999999 +sg8 +F0.53925000000000001 +sg9 +F309.38532500000002 +sg10 +(lp6805 +L112299428L +aL112299429L +aL112299430L +aL112299431L +aL112299432L +asg12 +(lp6806 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.649227 +sS't' +F53656.1061214 +ss(F309.36453699999998 +F0.32447900000000002 +F1.0100100000000001 +F0.95301499999999995 +I0 +tp6807 +(dp6808 +g4 +F0.32447900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.092598600000000003 +sS'm' +F20.992899999999999 +sg8 +F0.95301499999999995 +sg9 +F309.36453699999998 +sg10 +(lp6809 +L343713281L +aL343713282L +aL343713283L +aL343713284L +asg12 +(lp6810 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.160371099999 +ss(F309.37795299999999 +F0.33787099999999998 +F0.74900299999999997 +F0.97800500000000001 +I0 +tp6811 +(dp6812 +g4 +F0.33787099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.042685000000000001 +sS'm' +F18.342600000000001 +sg8 +F0.97800500000000001 +sg9 +F309.37795299999999 +sg10 +(lp6813 +L171378170L +aL171378171L +aL171378172L +aL171378173L +aL171378174L +aL171378175L +aL171378176L +aL171378177L +aL171378178L +aL171378179L +asg12 +(lp6814 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107162599998 +ss(F309.38009199999999 +F0.34214899999999998 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp6815 +(dp6816 +g4 +F0.34214899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.033425000000000003 +sS'm' +F17.3734 +sg8 +F1.0100100000000001 +sg9 +F309.38009199999999 +sg10 +(lp6817 +L345363723L +aL345363724L +aL345363725L +aL345363726L +aL345363722L +asg12 +(lp6818 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F1.0800000000000001 +sS't' +F53675.080399999999 +ss(F309.38271099999997 +F0.33516400000000002 +F0.47602100000000003 +F0.45402199999999998 +I0 +tp6819 +(dp6820 +g4 +F0.33516400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.099254899999999993 +sS'm' +F19.439 +sg8 +F0.45402199999999998 +sg9 +F309.38271099999997 +sg10 +(lp6821 +L344873275L +aL344873276L +aL344873277L +aL344873278L +aL344873279L +asg12 +(lp6822 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602100000000003 +sS't' +F53668.109024600002 +ss(F309.36088599999999 +F0.31767899999999999 +F0.77917599999999998 +F0.82927499999999998 +I0 +tp6823 +(dp6824 +g4 +F0.31767899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.72671 +sS'm' +F22.6173 +sg8 +F0.82927499999999998 +sg9 +F309.36088599999999 +sg10 +(lp6825 +L343277129L +aL343277130L +aL343277131L +aL343277132L +aL343277133L +asg12 +(lp6826 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77917599999999998 +sS't' +F53302.107392400001 +ss(F309.382746 +F0.32577800000000001 +F0.61605100000000002 +F0.77504200000000001 +I0 +tp6827 +(dp6828 +g4 +F0.32577800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.9406099999999999 +sS'm' +F22.901700000000002 +sg8 +F0.77504200000000001 +sg9 +F309.382746 +sg10 +(lp6829 +L346171348L +aL346171349L +aL346171350L +aL346171351L +aL346171352L +asg12 +(lp6830 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61605100000000002 +sS't' +F53704.071680599998 +ss(F309.38566200000002 +F0.32638099999999998 +F0.41328900000000002 +F0.41239399999999998 +I0 +tp6831 +(dp6832 +g4 +F0.32638099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.25498599999999999 +sS'm' +F21.775099999999998 +sg8 +F0.41239399999999998 +sg9 +F309.38566200000002 +sg10 +(lp6833 +L346001097L +aL346001098L +aL346001099L +aL346001100L +asg12 +(lp6834 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41328900000000002 +sS't' +F53703.0948001 +ss(F309.370924 +F0.33699099999999999 +F0.86603799999999997 +F0.90256899999999995 +I0 +tp6835 +(dp6836 +g4 +F0.33699099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F4.2387100000000002 +sS'm' +F24.0002 +sg8 +F0.90256899999999995 +sg9 +F309.370924 +sg10 +(lp6837 +L345816583L +aL345816584L +aL345816585L +aL345816586L +asg12 +(lp6838 +I0 +aI2 +aI3 +aI4 +asg14 +F0.86603799999999997 +sS't' +F53693.088320000003 +ss(F309.38809800000001 +F0.33810299999999999 +F0.984093 +F0.98806899999999998 +I0 +tp6839 +(dp6840 +g4 +F0.33810299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.2396600000000002 +sS'm' +F23.413699999999999 +sg8 +F0.98806899999999998 +sg9 +F309.38809800000001 +sg10 +(lp6841 +L346466111L +aL346466112L +aL346466113L +aL346466114L +aL346466115L +asg12 +(lp6842 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.984093 +sS't' +F54007.119940099998 +ss(F309.36980699999998 +F0.34463100000000002 +F0.82813899999999996 +F0.94507600000000003 +I0 +tp6843 +(dp6844 +g4 +F0.34463100000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.540991 +sS'm' +F23.443200000000001 +sg8 +F0.94507600000000003 +sg9 +F309.36980699999998 +sg10 +(lp6845 +L343127529L +aL343127530L +aL343127531L +aL343127532L +asg12 +(lp6846 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82813899999999996 +sS't' +F53288.113406900004 +ss(F309.38262600000002 +F0.33971099999999999 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp6847 +(dp6848 +g4 +F0.33971099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.0610529 +sS'm' +F18.7376 +sg8 +F1.0100100000000001 +sg9 +F309.38262600000002 +sg10 +(lp6849 +L345363801L +aL345363802L +aL345363803L +aL345363804L +aL345363805L +asg12 +(lp6850 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078748599997 +ss(F309.37304 +F0.32019799999999998 +F0.78201100000000001 +F0.831094 +I0 +tp6851 +(dp6852 +g4 +F0.32019799999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.61226 +sS'm' +F23.4315 +sg8 +F0.831094 +sg9 +F309.37304 +sg10 +(lp6853 +L343278916L +aL343278917L +aL343278918L +aL343278919L +asg12 +(lp6854 +I1 +aI2 +aI3 +aI4 +asg14 +F0.78201100000000001 +sS't' +F53302.109084700001 +ss(F309.36980599999998 +F0.344698 +F0.47725099999999998 +F0.45458300000000001 +I0 +tp6855 +(dp6856 +g4 +F0.344698 +sg5 +I0 +sg6 +I0 +sg7 +F1.6416999999999999 +sS'm' +F22.749099999999999 +sg8 +F0.45458300000000001 +sg9 +F309.36980599999998 +sg10 +(lp6857 +L344876101L +aL344876102L +aL344876103L +aL344876104L +aL344876105L +asg12 +(lp6858 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47725099999999998 +sS't' +F53668.108988699998 +ss(F309.36744900000002 +F0.32935199999999998 +F0.77905899999999995 +F0.82905200000000001 +I0 +tp6859 +(dp6860 +g4 +F0.32935199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.3527200000000001 +sS'm' +F22.9649 +sg8 +F0.82905200000000001 +sg9 +F309.36744900000002 +sg10 +(lp6861 +L343278791L +aL343278792L +aL343278793L +aL343278794L +aL343278795L +asg12 +(lp6862 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77905899999999995 +sS't' +F53302.107410700002 +ss(F309.37430999999998 +F0.32802999999999999 +F0.92186500000000005 +F1.10073 +I0 +tp6863 +(dp6864 +g4 +F0.32802999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.1548499999999999 +sS'm' +F24.336099999999998 +sg8 +F1.10073 +sg9 +F309.37430999999998 +sg10 +(lp6865 +L345535204L +aL345535205L +aL345535206L +aL345535207L +asg12 +(lp6866 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92186500000000005 +sS't' +F53677.101416600002 +ss(F309.387947 +F0.34224900000000003 +F0.41332999999999998 +F0.41241 +I0 +tp6867 +(dp6868 +g4 +F0.34224900000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.55803 +sS'm' +F22.526 +sg8 +F0.41241 +sg9 +F309.387947 +sg10 +(lp6869 +L345996195L +aL345996196L +aL345996197L +aL345996198L +aL345996199L +asg12 +(lp6870 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41332999999999998 +sS't' +F53703.093148 +ss(F309.378986 +F0.32703399999999999 +F1.0100100000000001 +F0.95301599999999997 +I0 +tp6871 +(dp6872 +g4 +F0.32703399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.412887 +sS'm' +F21.2788 +sg8 +F0.95301599999999997 +sg9 +F309.378986 +sg10 +(lp6873 +L343712159L +aL343712160L +aL343712161L +aL343712162L +aL343712163L +asg12 +(lp6874 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158752800002 +ss(F309.377701 +F0.34562300000000001 +F0.92415400000000003 +F1.0301100000000001 +I0 +tp6875 +(dp6876 +g4 +F0.34562300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.43161100000000002 +sS'm' +F20.2849 +sg8 +F1.0301100000000001 +sg9 +F309.377701 +sg10 +(lp6877 +L345224061L +aL345224057L +aL345224058L +aL345224059L +aL345224060L +asg12 +(lp6878 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.92415400000000003 +sS't' +F53673.082674800004 +ss(F309.38650799999999 +F0.32194400000000001 +F0.933029 +F0.87803100000000001 +I0 +tp6879 +(dp6880 +g4 +F0.32194400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.092172599999999993 +sS'm' +F20.5655 +sg8 +F0.87803100000000001 +sg9 +F309.38650799999999 +sg10 +(lp6881 +L345030944L +aL345030945L +aL345030946L +aL345030942L +aL345030943L +asg12 +(lp6882 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.933029 +sS't' +F53670.112230500003 +ss(F309.38891000000001 +F0.34376400000000001 +F0.77501399999999998 +F0.75403299999999995 +I0 +tp6883 +(dp6884 +g4 +F0.34376400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.043111700000000003 +sS'm' +F16.200199999999999 +sg8 +F0.75403299999999995 +sg9 +F309.38891000000001 +sg10 +(lp6885 +L342825804L +aL342825805L +aL342825806L +aL342825807L +aL342825808L +asg12 +(lp6886 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501399999999998 +sS't' +F53243.255797400001 +ss(F309.374752 +F0.331704 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp6887 +(dp6888 +g4 +F0.331704 +sg5 +I0 +sg6 +I0 +sg7 +F0.043120699999999998 +sS'm' +F15.939 +sg8 +F1.0100100000000001 +sg9 +F309.374752 +sg10 +(lp6889 +L345363636L +aL345363637L +aL345363638L +aL345363639L +aL345363640L +asg12 +(lp6890 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078726699998 +ss(F309.388891 +F0.34375299999999998 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp6891 +(dp6892 +g4 +F0.34375299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.036003899999999998 +sS'm' +F16.180399999999999 +sg8 +F1.0700099999999999 +sg9 +F309.388891 +sg10 +(lp6893 +L345676183L +aL345676184L +aL345676185L +aL345676186L +aL345676187L +aL345676188L +aL345676189L +aL345676190L +aL345676191L +aL345676192L +asg12 +(lp6894 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900099999999999 +sS't' +F53680.086463799998 +ss(F309.37897800000002 +F0.327011 +F1.05002 +F0.94401599999999997 +I0 +tp6895 +(dp6896 +g4 +F0.327011 +sg5 +I0 +sg6 +I0 +sg7 +F0.41481400000000002 +sS'm' +F21.4406 +sg8 +F0.94401599999999997 +sg9 +F309.37897800000002 +sg10 +(lp6897 +L346332219L +aL346332220L +aL346332221L +aL346332222L +aL346332223L +aL346332228L +aL346332229L +aL346332230L +aL346332231L +aL346332232L +asg12 +(lp6898 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159589700001 +ss(F309.37474200000003 +F0.331673 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp6899 +(dp6900 +g4 +F0.331673 +sg5 +I0 +sg6 +I0 +sg7 +F0.037185000000000003 +sS'm' +F15.9549 +sg8 +F0.82900499999999999 +sg9 +F309.37474200000003 +sg10 +(lp6901 +L343271522L +aL343271523L +aL343271524L +aL343271525L +aL343271526L +asg12 +(lp6902 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.107430900003 +ss(F309.382723 +F0.33516099999999999 +F0.47603499999999999 +F0.45403700000000002 +I0 +tp6903 +(dp6904 +g4 +F0.33516099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.099000900000000003 +sS'm' +F19.435199999999998 +sg8 +F0.45403700000000002 +sg9 +F309.382723 +sg10 +(lp6905 +L344873270L +aL344873271L +aL344873272L +aL344873273L +aL344873274L +asg12 +(lp6906 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47603499999999999 +sS't' +F53668.109024600002 +ss(F309.37298700000002 +F0.32107799999999997 +F1.09172 +F1.0721400000000001 +I0 +tp6907 +(dp6908 +g4 +F0.32107799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F6.8140400000000003 +sS'm' +F25.009899999999998 +sg8 +F1.0721400000000001 +sg9 +F309.37298700000002 +sg10 +(lp6909 +L345683808L +aL345683809L +aL345683810L +aL345683811L +aL345683812L +asg12 +(lp6910 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09172 +sS't' +F53680.086419599997 +ss(F309.382744 +F0.32575799999999999 +F0.98401799999999995 +F0.98801399999999995 +I0 +tp6911 +(dp6912 +g4 +F0.32575799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.102228 +sS'm' +F21.123000000000001 +sg8 +F0.98801399999999995 +sg9 +F309.382744 +sg10 +(lp6913 +L346463334L +aL346463335L +aL346463336L +aL346463337L +aL346463338L +aL346463339L +aL346463340L +aL346463341L +aL346463342L +aL346463333L +asg12 +(lp6914 +I1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.98401799999999995 +sS't' +F54007.121583599997 +ss(F309.38216599999998 +F0.32172699999999999 +F1.0500100000000001 +F0.94401299999999999 +I0 +tp6915 +(dp6916 +g4 +F0.32172699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.22036600000000001 +sS'm' +F20.6769 +sg8 +F0.94401299999999999 +sg9 +F309.38216599999998 +sg10 +(lp6917 +L346332287L +aL346332288L +aL346332289L +aL346332290L +aL346332291L +aL346332292L +aL346332293L +aL346332294L +aL346332295L +aL346332296L +asg12 +(lp6918 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159598500002 +ss(F309.37769900000001 +F0.34561900000000001 +F1.05016 +F0.94413100000000005 +I0 +tp6919 +(dp6920 +g4 +F0.34561900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.32354300000000003 +sS'm' +F22.639800000000001 +sg8 +F0.94413100000000005 +sg9 +F309.37769900000001 +sg10 +(lp6921 +L346336463L +aL346336464L +aL346336465L +aL346336466L +asg12 +(lp6922 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05016 +sS't' +F53974.1612446 +ss(F309.364867 +F0.33457399999999998 +F0.82826500000000003 +F0.94525999999999999 +I0 +tp6923 +(dp6924 +g4 +F0.33457399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.5186599999999999 +sS'm' +F22.930599999999998 +sg8 +F0.94525999999999999 +sg9 +F309.364867 +sg10 +(lp6925 +L343127502L +aL343127503L +aL343127504L +aL343127505L +aL343127506L +asg12 +(lp6926 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82826500000000003 +sS't' +F53288.111734700004 +ss(F309.377949 +F0.33785799999999999 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp6927 +(dp6928 +g4 +F0.33785799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.046841800000000003 +sS'm' +F18.3659 +sg8 +F1.1100000000000001 +sg9 +F309.377949 +sg10 +(lp6929 +L344144411L +aL344144412L +aL344144413L +aL344144414L +aL344144415L +asg12 +(lp6930 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138207299999 +ss(F309.36917499999998 +F0.34575699999999998 +F0.92105700000000001 +F1.10006 +I0 +tp6931 +(dp6932 +g4 +F0.34575699999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.45169199999999998 +sS'm' +F23.289000000000001 +sg8 +F1.10006 +sg9 +F309.36917499999998 +sg10 +(lp6933 +L345539482L +aL345539483L +aL345539484L +aL345539485L +asg12 +(lp6934 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92105700000000001 +sS't' +F53677.101402400003 +ss(F309.38649800000002 +F0.321965 +F1.0900099999999999 +F1.0700099999999999 +I0 +tp6935 +(dp6936 +g4 +F0.321965 +sg5 +I0 +sg6 +I0 +sg7 +F0.45822000000000002 +sS'm' +F22.001100000000001 +sg8 +F1.0700099999999999 +sg9 +F309.38649800000002 +sg10 +(lp6937 +L345680615L +aL345680616L +aL345680617L +aL345680618L +aL345680619L +aL345680625L +aL345680626L +aL345680627L +aL345680628L +aL345680629L +asg12 +(lp6938 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900099999999999 +sS't' +F53680.086457099998 +ss(F309.36997200000002 +F0.33449600000000002 +F0.925149 +F1.0310900000000001 +I0 +tp6939 +(dp6940 +g4 +F0.33449600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.9075299999999999 +sS'm' +F23.284800000000001 +sg8 +F1.0310900000000001 +sg9 +F309.36997200000002 +sg10 +(lp6941 +L345225941L +aL345225942L +aL345225943L +aL345225944L +aL345225945L +asg12 +(lp6942 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.925149 +sS't' +F53673.081824000001 +ss(F309.38897900000001 +F0.345192 +F0.92400899999999997 +F1.0300100000000001 +I0 +tp6943 +(dp6944 +g4 +F0.345192 +sg5 +I0 +sg6 +I0 +sg7 +F0.31326599999999999 +sS'm' +F21.071999999999999 +sg8 +F1.0300100000000001 +sg9 +F309.38897900000001 +sg10 +(lp6945 +L345217725L +aL345217726L +aL345217727L +aL345217728L +aL345217729L +asg12 +(lp6946 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400899999999997 +sS't' +F53673.081876800003 +ss(F309.37196999999998 +F0.341061 +F0.92401500000000003 +F1.0300199999999999 +I0 +tp6947 +(dp6948 +g4 +F0.341061 +sg5 +I0 +sg6 +I0 +sg7 +F1.0653999999999999 +sS'm' +F22.6404 +sg8 +F1.0300199999999999 +sg9 +F309.37196999999998 +sg10 +(lp6949 +L345220029L +aL345220030L +aL345220031L +aL345220032L +aL345220033L +asg12 +(lp6950 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92401500000000003 +sS't' +F53673.0818296 +ss(F309.38076999999998 +F0.34453099999999998 +F0.74132399999999998 +F0.96017200000000003 +I0 +tp6951 +(dp6952 +g4 +F0.34453099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.54406 +sS'm' +F23.330400000000001 +sg8 +F0.96017200000000003 +sg9 +F309.38076999999998 +sg10 +(lp6953 +L344485582L +aL344485583L +aL344485584L +aL344485585L +aL344485586L +asg12 +(lp6954 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74132399999999998 +sS't' +F53644.123868000002 +ss(F309.36668200000003 +F0.33552300000000002 +F0.985263 +F0.98840899999999998 +I0 +tp6955 +(dp6956 +g4 +F0.33552300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.0725899999999999 +sS'm' +F24.505400000000002 +sg8 +F0.98840899999999998 +sg9 +F309.36668200000003 +sg10 +(lp6957 +L346467654L +aL346467655L +aL346467656L +aL346467657L +asg12 +(lp6958 +I1 +aI2 +aI3 +aI4 +asg14 +F0.985263 +sS't' +F54007.121539 +ss(F309.36517600000002 +F0.337308 +F1.09006 +F1.0700799999999999 +I0 +tp6959 +(dp6960 +g4 +F0.337308 +sg5 +I0 +sg6 +I0 +sg7 +F0.83311900000000005 +sS'm' +F22.6846 +sg8 +F1.0700799999999999 +sg9 +F309.36517600000002 +sg10 +(lp6961 +L345683686L +aL345683687L +aL345683688L +aL345683689L +aL345683690L +asg12 +(lp6962 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09006 +sS't' +F53680.086397899999 +ss(F309.37197300000003 +F0.34107399999999999 +F0.616031 +F0.77503100000000003 +I0 +tp6963 +(dp6964 +g4 +F0.34107399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.89032299999999998 +sS'm' +F22.040199999999999 +sg8 +F0.77503100000000003 +sg9 +F309.37197300000003 +sg10 +(lp6965 +L346170941L +aL346170942L +aL346170943L +aL346170944L +aL346170945L +asg12 +(lp6966 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.616031 +sS't' +F53704.071650700003 +ss(F309.36744900000002 +F0.32935199999999998 +F0.77905199999999997 +F0.82904699999999998 +I0 +tp6967 +(dp6968 +g4 +F0.32935199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.3404699999999998 +sS'm' +F22.959199999999999 +sg8 +F0.82904699999999998 +sg9 +F309.36744900000002 +sg10 +(lp6969 +L343278796L +aL343278797L +aL343278798L +aL343278799L +aL343278800L +asg12 +(lp6970 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77905199999999997 +sS't' +F53302.107410700002 +ss(F309.37424600000003 +F0.32813700000000001 +F0.86644600000000005 +F0.90116799999999997 +I0 +tp6971 +(dp6972 +g4 +F0.32813700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F2.25101 +sS'm' +F23.3109 +sg8 +F0.90116799999999997 +sg9 +F309.37424600000003 +sg10 +(lp6973 +L345812267L +aL345812268L +aL345812269L +aL345812270L +aL345812271L +asg12 +(lp6974 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86644600000000005 +sS't' +F53693.0883292 +ss(F309.38897700000001 +F0.34519499999999997 +F1.0100100000000001 +F0.95301199999999997 +I0 +tp6975 +(dp6976 +g4 +F0.34519499999999997 +sg5 +I0 +sg6 +I0 +sg7 +F5.0614400000000002 +sS'm' +F20.972200000000001 +sg8 +F0.95301199999999997 +sg9 +F309.38897700000001 +sg10 +(lp6977 +L343709616L +aL343709617L +aL343709618L +aL343709619L +aL343709620L +asg12 +(lp6978 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158780600003 +ss(F309.36503099999999 +F0.33011800000000002 +F0.82801000000000002 +F0.94500799999999996 +I0 +tp6979 +(dp6980 +g4 +F0.33011800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.29867100000000002 +sS'm' +F21.095099999999999 +sg8 +F0.94500799999999996 +sg9 +F309.36503099999999 +sg10 +(lp6981 +L343120289L +aL343120290L +aL343120291L +aL343120292L +aL343120293L +asg12 +(lp6982 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801000000000002 +sS't' +F53288.1117352 +ss(F309.360862 +F0.31764599999999998 +F1.09005 +F1.0700700000000001 +I0 +tp6983 +(dp6984 +g4 +F0.31764599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.195465 +sS'm' +F22.319600000000001 +sg8 +F1.0700700000000001 +sg9 +F309.360862 +sg10 +(lp6985 +L345675493L +aL345675494L +aL345675495L +aL345675496L +asg12 +(lp6986 +I1 +aI2 +aI3 +aI4 +asg14 +F1.09005 +sS't' +F53680.088044399999 +ss(F309.38773800000001 +F0.32191199999999998 +F1.0125 +F0.95897299999999996 +I0 +tp6987 +(dp6988 +g4 +F0.32191199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.78260600000000002 +sS'm' +F23.4894 +sg8 +F0.95897299999999996 +sg9 +F309.38773800000001 +sg10 +(lp6989 +L343716050L +aL343716051L +aL343716052L +aL343716053L +asg12 +(lp6990 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0125 +sS't' +F53623.160435600003 +ss(F309.38365499999998 +F0.34499600000000002 +F1.05002 +F0.944017 +I0 +tp6991 +(dp6992 +g4 +F0.34499600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.36109799999999997 +sS'm' +F21.267199999999999 +sg8 +F0.944017 +sg9 +F309.38365499999998 +sg10 +(lp6993 +L346332366L +aL346332367L +aL346332368L +aL346332369L +aL346332370L +asg12 +(lp6994 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.05002 +sS't' +F53974.159602699998 +ss(F309.36854399999999 +F0.342165 +F1.0158 +F0.99761299999999997 +I0 +tp6995 +(dp6996 +g4 +F0.342165 +sg5 +I0 +sg6 +I0 +sg7 +F2.55762 +sS'm' +F24.445699999999999 +sg8 +F0.99761299999999997 +sg9 +F309.36854399999999 +sg10 +(lp6997 +L342970384L +aL342970385L +aL342970386L +aL342970387L +asg12 +(lp6998 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0158 +sS't' +F53270.136226000002 +ss(F309.36504600000001 +F0.330119 +F0.93300700000000003 +F0.87800900000000004 +I0 +tp6999 +(dp7000 +g4 +F0.330119 +sg5 +I0 +sg6 +I0 +sg7 +F0.27206000000000002 +sS'm' +F21.010000000000002 +sg8 +F0.87800900000000004 +sg9 +F309.36504600000001 +sg10 +(lp7001 +L345024435L +aL345024436L +aL345024437L +aL345024438L +aL345024439L +asg12 +(lp7002 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93300700000000003 +sS't' +F53670.113829399997 +ss(F309.38007499999998 +F0.34215299999999998 +F0.74900299999999997 +F0.97800500000000001 +I0 +tp7003 +(dp7004 +g4 +F0.34215299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.047569300000000002 +sS'm' +F18.605699999999999 +sg8 +F0.97800500000000001 +sg9 +F309.38007499999998 +sg10 +(lp7005 +L171378228L +aL171378229L +aL171378230L +aL171378231L +aL171378232L +asg12 +(lp7006 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74900299999999997 +sS't' +F54005.107168499999 +ss(F309.38261199999999 +F0.339696 +F0.74100699999999997 +F0.96000700000000005 +I0 +tp7007 +(dp7008 +g4 +F0.339696 +sg5 +I0 +sg6 +I0 +sg7 +F0.0572118 +sS'm' +F18.712599999999998 +sg8 +F0.96000700000000005 +sg9 +F309.38261199999999 +sg10 +(lp7009 +L344475891L +aL344475892L +aL344475893L +aL344475894L +aL344475895L +asg12 +(lp7010 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100699999999997 +sS't' +F53644.123873099998 +ss(F309.37770999999998 +F0.32562400000000002 +F0.41329100000000002 +F0.41223799999999999 +I0 +tp7011 +(dp7012 +g4 +F0.32562400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.60229 +sS'm' +F23.447900000000001 +sg8 +F0.41223799999999999 +sg9 +F309.37770999999998 +sg10 +(lp7013 +L346000983L +aL346000984L +aL346000985L +aL346000986L +aL346000987L +asg12 +(lp7014 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41329100000000002 +sS't' +F53703.093119600002 +ss(F309.37795399999999 +F0.33785100000000001 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp7015 +(dp7016 +g4 +F0.33785100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.0488607 +sS'm' +F18.354299999999999 +sg8 +F1.0700000000000001 +sg9 +F309.37795399999999 +sg10 +(lp7017 +L345675991L +aL345675992L +aL345675993L +aL345675994L +aL345675995L +asg12 +(lp7018 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.0864334 +ss(F309.36845399999999 +F0.34225800000000001 +F0.75226899999999997 +F0.97962099999999996 +I0 +tp7019 +(dp7020 +g4 +F0.34225800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F3.1903999999999999 +sS'm' +F25.444299999999998 +sg8 +F0.97962099999999996 +sg9 +F309.36845399999999 +sg10 +(lp7021 +L171388725L +aL171388726L +aL171388727L +aL171388728L +asg12 +(lp7022 +I1 +aI2 +aI3 +aI4 +asg14 +F0.75226899999999997 +sS't' +F54005.108794699998 +ss(F309.36916000000002 +F0.34575499999999998 +F1.0101800000000001 +F0.99213099999999999 +I0 +tp7023 +(dp7024 +g4 +F0.34575499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.2774000000000001 +sS'm' +F23.2546 +sg8 +F0.99213099999999999 +sg9 +F309.36916000000002 +sg10 +(lp7025 +L342968170L +aL342968171L +aL342968172L +aL342968173L +aL342968174L +asg12 +(lp7026 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0101800000000001 +sS't' +F53270.134569200003 +ss(F309.36309 +F0.32273400000000002 +F0.886216 +F1.11104 +I0 +tp7027 +(dp7028 +g4 +F0.32273400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0144599999999999 +sS'm' +F24.008299999999998 +sg8 +F1.11104 +sg9 +F309.36309 +sg10 +(lp7029 +L344155390L +aL344155391L +aL344155392L +aL344155393L +asg12 +(lp7030 +I1 +aI2 +aI3 +aI4 +asg14 +F0.886216 +sS't' +F53635.139824400001 +ss(F309.38271300000002 +F0.33515600000000001 +F0.47004299999999999 +F0.50304000000000004 +I0 +tp7031 +(dp7032 +g4 +F0.33515600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.25420399999999999 +sS'm' +F19.494399999999999 +sg8 +F0.50304000000000004 +sg9 +F309.38271300000002 +sg10 +(lp7033 +L12885308L +aL12885309L +aL12885310L +aL12885311L +aL12885312L +asg12 +(lp7034 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47004299999999999 +sS't' +F53649.118522500001 +ss(F309.380897 +F0.34452500000000003 +F0.28814099999999998 +F0.37393199999999999 +I0 +tp7035 +(dp7036 +g4 +F0.34452500000000003 +sg5 +I0 +sg6 +I0 +sg7 +F4.5887500000000001 +sS'm' +F23.784800000000001 +sg8 +F0.37393199999999999 +sg9 +F309.380897 +sg10 +(lp7037 +L327903716L +aL327903717L +aL327903718L +aL327903719L +aL327903720L +asg12 +(lp7038 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.28814099999999998 +sS't' +F53312.062956499998 +ss(F309.36312900000001 +F0.331036 +F0.92400800000000005 +F1.0300100000000001 +I0 +tp7039 +(dp7040 +g4 +F0.331036 +sg5 +I0 +sg6 +I0 +sg7 +F0.059958299999999999 +sS'm' +F18.8125 +sg8 +F1.0300100000000001 +sg9 +F309.36312900000001 +sg10 +(lp7041 +L345217290L +aL345217291L +aL345217292L +aL345217293L +aL345217294L +asg12 +(lp7042 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92400800000000005 +sS't' +F53673.081805000002 +ss(F309.36309299999999 +F0.331038 +F0.828009 +F0.94500799999999996 +I0 +tp7043 +(dp7044 +g4 +F0.331038 +sg5 +I0 +sg6 +I0 +sg7 +F0.060315500000000001 +sS'm' +F18.819600000000001 +sg8 +F0.94500799999999996 +sg9 +F309.36309299999999 +sg10 +(lp7045 +L343120279L +aL343120280L +aL343120281L +aL343120282L +aL343120283L +aL343120284L +aL343120285L +aL343120286L +aL343120287L +aL343120288L +asg12 +(lp7046 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828009 +sS't' +F53288.111729800003 +ss(F309.37770599999999 +F0.32560600000000001 +F1.0500400000000001 +F0.94403099999999995 +I0 +tp7047 +(dp7048 +g4 +F0.32560600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.19275400000000001 +sS'm' +F21.585899999999999 +sg8 +F0.94403099999999995 +sg9 +F309.37770599999999 +sg10 +(lp7049 +L346332224L +aL346332225L +aL346332226L +aL346332227L +asg12 +(lp7050 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0500400000000001 +sS't' +F53974.1612446 +ss(F309.36505199999999 +F0.33011400000000002 +F0.77900499999999995 +F0.82900600000000002 +I0 +tp7051 +(dp7052 +g4 +F0.33011400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.0242531 +sS'm' +F18.0504 +sg8 +F0.82900600000000002 +sg9 +F309.36505199999999 +sg10 +(lp7053 +L343271392L +aL343271393L +aL343271394L +aL343271390L +aL343271391L +asg12 +(lp7054 +I2 +aI3 +aI4 +aI0 +aI1 +asg14 +F0.77900499999999995 +sS't' +F53302.105745499997 +ss(F309.36747200000002 +F0.32935900000000001 +F1.0100800000000001 +F0.99207000000000001 +I0 +tp7055 +(dp7056 +g4 +F0.32935900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F7.1421299999999999 +sS'm' +F24.508400000000002 +sg8 +F0.99207000000000001 +sg9 +F309.36747200000002 +sg10 +(lp7057 +L342970354L +aL342970355L +aL342970356L +aL342970357L +aL342970358L +asg12 +(lp7058 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100800000000001 +sS't' +F53270.134564499996 +ss(F309.36634199999997 +F0.34082200000000001 +F0.47602 +F0.45402199999999998 +I0 +tp7059 +(dp7060 +g4 +F0.34082200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.055960200000000002 +sS'm' +F18.372299999999999 +sg8 +F0.45402199999999998 +sg9 +F309.36634199999997 +sg10 +(lp7061 +L344871188L +aL344871189L +aL344871190L +aL344871191L +aL344871192L +asg12 +(lp7062 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47602 +sS't' +F53668.108979099998 +ss(F309.36308100000002 +F0.32272800000000001 +F0.750332 +F0.97970400000000002 +I0 +tp7063 +(dp7064 +g4 +F0.32272800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.6258900000000001 +sS'm' +F24.7135 +sg8 +F0.97970400000000002 +sg9 +F309.36308100000002 +sg10 +(lp7065 +L171388644L +aL171388645L +aL171388646L +aL171388647L +asg12 +(lp7066 +I1 +aI2 +aI3 +aI4 +asg14 +F0.750332 +sS't' +F54005.108779800001 +ss(F309.36849899999999 +F0.33942299999999997 +F1.0116799999999999 +F0.99430399999999997 +I0 +tp7067 +(dp7068 +g4 +F0.33942299999999997 +sg5 +I0 +sg6 +I0 +sg7 +F1.06694 +sS'm' +F23.4924 +sg8 +F0.99430399999999997 +sg9 +F309.36849899999999 +sg10 +(lp7069 +L342970380L +aL342970381L +aL342970382L +aL342970383L +asg12 +(lp7070 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0116799999999999 +sS't' +F53270.136225800001 +ss(F309.37305300000003 +F0.324434 +F0.50731800000000005 +F0.46177200000000002 +I0 +tp7071 +(dp7072 +g4 +F0.324434 +sg5 +I0 +sg6 +I0 +sg7 +F2.2897500000000002 +sS'm' +F22.728100000000001 +sg8 +F0.46177200000000002 +sg9 +F309.37305300000003 +sg10 +(lp7073 +L153252754L +aL153252755L +aL153252756L +aL153252757L +aL153252758L +asg12 +(lp7074 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50731800000000005 +sS't' +F53702.083973000001 +ss(F309.36239799999998 +F0.31966899999999998 +F0.248256 +F0.34817799999999999 +I0 +tp7075 +(dp7076 +g4 +F0.31966899999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.6370800000000001 +sS'm' +F23.301100000000002 +sg8 +F0.34817799999999999 +sg9 +F309.36239799999998 +sg10 +(lp7077 +L327903443L +aL327903444L +aL327903445L +aL327903446L +aL327903447L +asg12 +(lp7078 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248256 +sS't' +F53312.0629052 +ss(F309.36848400000002 +F0.33934199999999998 +F0.78351700000000002 +F0.83471399999999996 +I0 +tp7079 +(dp7080 +g4 +F0.33934199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.0084599999999999 +sS'm' +F24.1127 +sg8 +F0.83471399999999996 +sg9 +F309.36848400000002 +sg10 +(lp7081 +L343278811L +aL343278812L +aL343278813L +aL343278814L +asg12 +(lp7082 +I1 +aI2 +aI3 +aI4 +asg14 +F0.78351700000000002 +sS't' +F53302.109071999999 +ss(F309.37307499999997 +F0.32442799999999999 +F0.82808400000000004 +F0.94506100000000004 +I0 +tp7083 +(dp7084 +g4 +F0.32442799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.21367 +sS'm' +F23.3461 +sg8 +F0.94506100000000004 +sg9 +F309.37307499999997 +sg10 +(lp7085 +L343127641L +aL343127642L +aL343127643L +aL343127644L +aL343127645L +asg12 +(lp7086 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82808400000000004 +sS't' +F53288.111757500003 +ss(F309.38273900000002 +F0.32577600000000001 +F0.24826999999999999 +F0.34820000000000001 +I0 +tp7087 +(dp7088 +g4 +F0.32577600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.082992300000000005 +sS'm' +F19.9377 +sg8 +F0.34820000000000001 +sg9 +F309.38273900000002 +sg10 +(lp7089 +L327906618L +aL327906619L +aL327906620L +aL327906617L +asg12 +(lp7090 +I2 +aI3 +aI4 +aI1 +asg14 +F0.24826999999999999 +sS't' +F53312.061303100003 +ss(F309.36312199999998 +F0.33106799999999997 +F1.0100100000000001 +F0.99200699999999997 +I0 +tp7091 +(dp7092 +g4 +F0.33106799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.070585800000000004 +sS'm' +F18.784300000000002 +sg8 +F0.99200699999999997 +sg9 +F309.36312199999998 +sg10 +(lp7093 +L342961809L +aL342961810L +aL342961811L +aL342961812L +aL342961813L +asg12 +(lp7094 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134552399999 +ss(F309.38771100000002 +F0.32195200000000002 +F0.75201399999999996 +F0.98159200000000002 +I0 +tp7095 +(dp7096 +g4 +F0.32195200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.51617999999999997 +sS'm' +F23.433399999999999 +sg8 +F0.98159200000000002 +sg9 +F309.38771100000002 +sg10 +(lp7097 +L171381692L +aL171381693L +aL171381694L +aL171381695L +asg12 +(lp7098 +I1 +aI2 +aI3 +aI4 +asg14 +F0.75201399999999996 +sS't' +F54005.108848199998 +ss(F309.37194499999998 +F0.34106599999999998 +F0.50614599999999998 +F0.45919399999999999 +I0 +tp7099 +(dp7100 +g4 +F0.34106599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.65507 +sS'm' +F22.372499999999999 +sg8 +F0.45919399999999999 +sg9 +F309.37194499999998 +sg10 +(lp7101 +L153252739L +aL153252740L +aL153252741L +aL153252742L +aL153252743L +asg12 +(lp7102 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.50614599999999998 +sS't' +F53702.08397 +ss(F309.388912 +F0.34376099999999998 +F0.61601099999999998 +F0.77501600000000004 +I0 +tp7103 +(dp7104 +g4 +F0.34376099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.037671299999999998 +sS'm' +F16.186599999999999 +sg8 +F0.77501600000000004 +sg9 +F309.388912 +sg10 +(lp7105 +L346166359L +aL346166360L +aL346166361L +aL346166362L +aL346166363L +asg12 +(lp7106 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.61601099999999998 +sS't' +F53704.071697699997 +ss(F309.37898100000001 +F0.327017 +F0.92100800000000005 +F1.1000099999999999 +I0 +tp7107 +(dp7108 +g4 +F0.327017 +sg5 +I0 +sg6 +I0 +sg7 +F0.331042 +sS'm' +F21.4588 +sg8 +F1.1000099999999999 +sg9 +F309.37898100000001 +sg10 +(lp7109 +L345535276L +aL345535277L +aL345535278L +aL345535279L +aL345535280L +asg12 +(lp7110 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100800000000005 +sS't' +F53677.099771200003 +ss(F309.37194799999997 +F0.34104499999999999 +F0.828017 +F0.94501500000000005 +I0 +tp7111 +(dp7112 +g4 +F0.34104499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.77930500000000003 +sS'm' +F22.189399999999999 +sg8 +F0.94501500000000005 +sg9 +F309.37194799999997 +sg10 +(lp7113 +L343126000L +aL343126001L +aL343126002L +aL343126003L +aL343126004L +asg12 +(lp7114 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.828017 +sS't' +F53288.111754400001 +ss(F309.38811199999998 +F0.33808500000000002 +F0.921045 +F1.1000399999999999 +I0 +tp7115 +(dp7116 +g4 +F0.33808500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.7120899999999999 +sS'm' +F23.328399999999998 +sg8 +F1.1000399999999999 +sg9 +F309.38811199999998 +sg10 +(lp7117 +L345539895L +aL345539896L +aL345539897L +aL345539898L +aL345539899L +asg12 +(lp7118 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.921045 +sS't' +F53677.099796499999 +ss(F309.37197400000002 +F0.34106900000000001 +F1.0100100000000001 +F0.99201399999999995 +I0 +tp7119 +(dp7120 +g4 +F0.34106900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.61879300000000004 +sS'm' +F21.814800000000002 +sg8 +F0.99201399999999995 +sg9 +F309.37197400000002 +sg10 +(lp7121 +L342966033L +aL342966034L +aL342966035L +aL342966036L +aL342966037L +asg12 +(lp7122 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53270.134576999997 +ss(F309.38708000000003 +F0.32811299999999999 +F0.88722400000000001 +F1.11222 +I0 +tp7123 +(dp7124 +g4 +F0.32811299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.0894699999999999 +sS'm' +F24.078399999999998 +sg8 +F1.11222 +sg9 +F309.38708000000003 +sg10 +(lp7125 +L344144766L +aL344144767L +aL344144768L +aL344144769L +asg12 +(lp7126 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88722400000000001 +sS't' +F53635.1398911 +ss(F309.37452500000001 +F0.31691000000000003 +F0.92521399999999998 +F1.0305 +I0 +tp7127 +(dp7128 +g4 +F0.31691000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F0.62783100000000003 +sS'm' +F23.186499999999999 +sg8 +F1.0305 +sg9 +F309.37452500000001 +sg10 +(lp7129 +L345225990L +aL345225991L +aL345225992L +aL345225993L +asg12 +(lp7130 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92521399999999998 +sS't' +F53673.0834951 +ss(F309.36816399999998 +F0.34610299999999999 +F1.0160800000000001 +F0.95626599999999995 +I0 +tp7131 +(dp7132 +g4 +F0.34610299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.6724299999999999 +sS'm' +F23.837599999999998 +sg8 +F0.95626599999999995 +sg9 +F309.36816399999998 +sg10 +(lp7133 +L343715733L +aL343715734L +aL343715735L +aL343715736L +aL343715737L +asg12 +(lp7134 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0160800000000001 +sS't' +F53623.158722699998 +ss(F309.38394899999997 +F0.31876700000000002 +F0.476692 +F0.45454099999999997 +I0 +tp7135 +(dp7136 +g4 +F0.31876700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.0820700000000001 +sS'm' +F22.2958 +sg8 +F0.45454099999999997 +sg9 +F309.38394899999997 +sg10 +(lp7137 +L344876265L +aL344876266L +aL344876267L +aL344876268L +aL344876269L +asg12 +(lp7138 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.476692 +sS't' +F53668.109027999999 +ss(F309.38270799999998 +F0.33515400000000001 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp7139 +(dp7140 +g4 +F0.33515400000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.046376599999999997 +sS'm' +F16.152799999999999 +sg8 +F1.1000099999999999 +sg9 +F309.38270799999998 +sg10 +(lp7141 +L345532355L +aL345532346L +aL345532347L +aL345532348L +aL345532349L +aL345532350L +aL345532351L +aL345532352L +aL345532353L +aL345532354L +asg12 +(lp7142 +I4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.92100300000000002 +sS't' +F53677.1006108 +ss(F309.38621499999999 +F0.33888299999999999 +F0.741089 +F0.960059 +I0 +tp7143 +(dp7144 +g4 +F0.33888299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.99457899999999999 +sS'm' +F22.842300000000002 +sg8 +F0.960059 +sg9 +F309.38621499999999 +sg10 +(lp7145 +L344482130L +aL344482131L +aL344482132L +aL344482133L +aL344482134L +asg12 +(lp7146 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.741089 +sS't' +F53644.123883100001 +ss(F309.36778099999998 +F0.33362900000000001 +F0.74262700000000004 +F0.96131699999999998 +I0 +tp7147 +(dp7148 +g4 +F0.33362900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.717839 +sS'm' +F23.723800000000001 +sg8 +F0.96131699999999998 +sg9 +F309.36778099999998 +sg10 +(lp7149 +L344485471L +aL344485472L +aL344485473L +aL344485474L +asg12 +(lp7150 +I1 +aI2 +aI3 +aI4 +asg14 +F0.74262700000000004 +sS't' +F53644.125490300001 +ss(F309.367886 +F0.34503099999999998 +F1.0102500000000001 +F0.99251800000000001 +I0 +tp7151 +(dp7152 +g4 +F0.34503099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.37143599999999999 +sS'm' +F22.3278 +sg8 +F0.99251800000000001 +sg9 +F309.367886 +sg10 +(lp7153 +L342968179L +aL342968180L +aL342968181L +aL342968182L +asg12 +(lp7154 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0102500000000001 +sS't' +F53270.136224100002 +ss(F309.36634199999997 +F0.34083799999999997 +F0.86500699999999997 +F0.90000599999999997 +I0 +tp7155 +(dp7156 +g4 +F0.34083799999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.051542299999999999 +sS'm' +F18.3855 +sg8 +F0.90000599999999997 +sg9 +F309.36634199999997 +sg10 +(lp7157 +L345808966L +aL345808967L +aL345808968L +aL345808969L +aL345808970L +asg12 +(lp7158 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.86500699999999997 +sS't' +F53693.0883073 +ss(F309.38216999999997 +F0.32172299999999998 +F0.50606300000000004 +F0.45912900000000001 +I0 +tp7159 +(dp7160 +g4 +F0.32172299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.17167299999999999 +sS'm' +F18.643599999999999 +sg8 +F0.45912900000000001 +sg9 +F309.38216999999997 +sg10 +(lp7161 +L153251405L +aL153251401L +aL153251402L +aL153251403L +aL153251404L +asg12 +(lp7162 +I4 +aI0 +aI1 +aI2 +aI3 +asg14 +F0.50606300000000004 +sS't' +F53702.084827600003 +ss(F309.37841900000001 +F0.33687099999999998 +F0.88707400000000003 +F1.1101799999999999 +I0 +tp7163 +(dp7164 +g4 +F0.33687099999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.8298399999999999 +sS'm' +F24.522600000000001 +sg8 +F1.1101799999999999 +sg9 +F309.37841900000001 +sg10 +(lp7165 +L344144426L +aL344144427L +aL344144428L +aL344144429L +asg12 +(lp7166 +I1 +aI2 +aI3 +aI4 +asg14 +F0.88707400000000003 +sS't' +F53635.139866999998 +ss(F309.382205 +F0.321741 +F0.64902800000000005 +F0.53903100000000004 +I0 +tp7167 +(dp7168 +g4 +F0.321741 +sg5 +I0 +sg6 +I0 +sg7 +F0.477794 +sS'm' +F20.898599999999998 +sg8 +F0.53903100000000004 +sg9 +F309.382205 +sg10 +(lp7169 +L112297757L +aL112297758L +aL112297759L +aL112297760L +aL112297761L +asg12 +(lp7170 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64902800000000005 +sS't' +F53656.106112699999 +ss(F309.36309699999998 +F0.33104800000000001 +F0.74100500000000002 +F0.96000600000000003 +I0 +tp7171 +(dp7172 +g4 +F0.33104800000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.058703999999999999 +sS'm' +F18.788 +sg8 +F0.96000600000000003 +sg9 +F309.36309699999998 +sg10 +(lp7173 +L344475568L +aL344475569L +aL344475570L +aL344475571L +aL344475572L +aL344475573L +aL344475574L +aL344475575L +aL344475576L +aL344475577L +asg12 +(lp7174 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100500000000002 +sS't' +F53644.1238189 +ss(F309.36742199999998 +F0.32935199999999998 +F1.0501100000000001 +F0.94406199999999996 +I0 +tp7175 +(dp7176 +g4 +F0.32935199999999998 +sg5 +I0 +sg6 +I0 +sg7 +F4.66533 +sS'm' +F24.142099999999999 +sg8 +F0.94406199999999996 +sg9 +F309.36742199999998 +sg10 +(lp7177 +L346336195L +aL346336196L +aL346336197L +aL346336198L +aL346336199L +asg12 +(lp7178 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0501100000000001 +sS't' +F53974.159557600004 +ss(F309.37470000000002 +F0.33169100000000001 +F0.24809500000000001 +F0.34807100000000002 +I0 +tp7179 +(dp7180 +g4 +F0.33169100000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.029976699999999998 +sS'm' +F15.9701 +sg8 +F0.34807100000000002 +sg9 +F309.37470000000002 +sg10 +(lp7181 +L327902045L +aL327902046L +aL327902047L +aL327902048L +aL327902049L +asg12 +(lp7182 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.24809500000000001 +sS't' +F53312.062939299998 +ss(F309.38261899999998 +F0.33968799999999999 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp7183 +(dp7184 +g4 +F0.33968799999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.070424600000000004 +sS'm' +F18.759899999999998 +sg8 +F0.82900499999999999 +sg9 +F309.38261899999998 +sg10 +(lp7185 +L343271640L +aL343271641L +aL343271642L +aL343271643L +aL343271644L +aL343271645L +aL343271646L +aL343271647L +aL343271648L +aL343271649L +asg12 +(lp7186 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.107452800003 +ss(F309.38810100000001 +F0.33810200000000001 +F1.0900300000000001 +F1.07002 +I0 +tp7187 +(dp7188 +g4 +F0.33810200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.18310599999999999 +sS'm' +F22.247900000000001 +sg8 +F1.07002 +sg9 +F309.38810100000001 +sg10 +(lp7189 +L345684109L +aL345684110L +aL345684111L +aL345684112L +asg12 +(lp7190 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0900300000000001 +sS't' +F53680.08812 +ss(F309.37300399999998 +F0.32019999999999998 +F0.74124299999999999 +F0.96014200000000005 +I0 +tp7191 +(dp7192 +g4 +F0.32019999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.72018 +sS'm' +F24.292300000000001 +sg8 +F0.96014200000000005 +sg9 +F309.37300399999998 +sg10 +(lp7193 +L344482928L +aL344482929L +aL344482930L +aL344482931L +aL344482932L +asg12 +(lp7194 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74124299999999999 +sS't' +F53644.123846399998 +ss(F309.36488400000002 +F0.33455600000000002 +F0.47693799999999997 +F0.45537100000000003 +I0 +tp7195 +(dp7196 +g4 +F0.33455600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.06257 +sS'm' +F22.2728 +sg8 +F0.45537100000000003 +sg9 +F309.36488400000002 +sg10 +(lp7197 +L344876055L +aL344876056L +aL344876057L +aL344876058L +aL344876059L +asg12 +(lp7198 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.47693799999999997 +sS't' +F53668.108975000003 +ss(F309.374751 +F0.33168700000000001 +F0.85100299999999995 +F0.91300700000000001 +I0 +tp7199 +(dp7200 +g4 +F0.33168700000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.039220699999999997 +sS'm' +F15.9472 +sg8 +F0.91300700000000001 +sg9 +F309.374751 +sg10 +(lp7201 +L343874211L +aL343874212L +aL343874213L +aL343874214L +aL343874215L +asg12 +(lp7202 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85100299999999995 +sS't' +F53626.144953100003 +ss(F309.38888400000002 +F0.34377099999999999 +F0.248062 +F0.34804400000000002 +I0 +tp7203 +(dp7204 +g4 +F0.34377099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.030463299999999999 +sS'm' +F16.194500000000001 +sg8 +F0.34804400000000002 +sg9 +F309.38888400000002 +sg10 +(lp7205 +L327902142L +aL327902143L +aL327902144L +aL327902145L +aL327902146L +aL327902147L +aL327902148L +aL327902149L +aL327902150L +aL327902151L +asg12 +(lp7206 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.248062 +sS't' +F53312.0629787 +ss(F309.36762900000002 +F0.32827600000000001 +F0.88629899999999995 +F1.11042 +I0 +tp7207 +(dp7208 +g4 +F0.32827600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F4.7416299999999998 +sS'm' +F23.8033 +sg8 +F1.11042 +sg9 +F309.36762900000002 +sg10 +(lp7209 +L344151882L +aL344151883L +aL344151884L +aL344151885L +aL344151886L +asg12 +(lp7210 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88629899999999995 +sS't' +F53635.138178599998 +ss(F309.36913600000003 +F0.34576600000000002 +F0.41393799999999997 +F0.413466 +I0 +tp7211 +(dp7212 +g4 +F0.34576600000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.50007 +sS'm' +F23.766300000000001 +sg8 +F0.413466 +sg9 +F309.36913600000003 +sg10 +(lp7213 +L346002787L +aL346002788L +aL346002789L +aL346002790L +asg12 +(lp7214 +I1 +aI2 +aI3 +aI4 +asg14 +F0.41393799999999997 +sS't' +F53703.094754199999 +ss(F309.37473799999998 +F0.33168900000000001 +F0.74100600000000005 +F0.96000600000000003 +I0 +tp7215 +(dp7216 +g4 +F0.33168900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.0396332 +sS'm' +F15.931100000000001 +sg8 +F0.96000600000000003 +sg9 +F309.37473799999998 +sg10 +(lp7217 +L344475770L +aL344475771L +aL344475772L +aL344475773L +aL344475774L +asg12 +(lp7218 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100600000000005 +sS't' +F53644.123851199998 +ss(F309.36983199999997 +F0.34626699999999999 +F0.82942700000000003 +F0.94673399999999996 +I0 +tp7219 +(dp7220 +g4 +F0.34626699999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.6531500000000001 +sS'm' +F24.8126 +sg8 +F0.94673399999999996 +sg9 +F309.36983199999997 +sg10 +(lp7221 +L343127550L +aL343127551L +aL343127552L +aL343127553L +asg12 +(lp7222 +I1 +aI2 +aI3 +aI4 +asg14 +F0.82942700000000003 +sS't' +F53288.113406999997 +ss(F309.37473299999999 +F0.33169399999999999 +F0.98400399999999999 +F0.98800399999999999 +I0 +tp7223 +(dp7224 +g4 +F0.33169399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.045060999999999997 +sS'm' +F15.9716 +sg8 +F0.98800399999999999 +sg9 +F309.37473299999999 +sg10 +(lp7225 +L346459423L +aL346459424L +aL346459425L +aL346459426L +aL346459427L +asg12 +(lp7226 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400399999999999 +sS't' +F54007.119902899998 +ss(F309.36493200000001 +F0.334511 +F1.01013 +F0.95333400000000001 +I0 +tp7227 +(dp7228 +g4 +F0.334511 +sg5 +I0 +sg6 +I0 +sg7 +F2.2967499999999998 +sS'm' +F23.186199999999999 +sg8 +F0.95333400000000001 +sg9 +F309.36493200000001 +sg10 +(lp7229 +L343715669L +aL343715670L +aL343715671L +aL343715672L +aL343715673L +asg12 +(lp7230 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01013 +sS't' +F53623.158713800003 +ss(F309.36991899999998 +F0.33444400000000002 +F1.05013 +F0.94414200000000004 +I0 +tp7231 +(dp7232 +g4 +F0.33444400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.391957 +sS'm' +F22.907599999999999 +sg8 +F0.94414200000000004 +sg9 +F309.36991899999998 +sg10 +(lp7233 +L346336300L +aL346336301L +aL346336302L +aL346336303L +asg12 +(lp7234 +I1 +aI2 +aI3 +aI4 +asg14 +F1.05013 +sS't' +F53974.161223000003 +ss(F309.36004600000001 +F0.32048900000000002 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp7235 +(dp7236 +g4 +F0.32048900000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.085221599999999995 +sS'm' +F19.704000000000001 +sg8 +F1.0700000000000001 +sg9 +F309.36004600000001 +sg10 +(lp7237 +L345675478L +aL345675479L +aL345675480L +aL345675481L +aL345675482L +aL345675483L +aL345675484L +aL345675485L +aL345675486L +aL345675487L +asg12 +(lp7238 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.0863837 +ss(F309.38895300000001 +F0.34520600000000001 +F0.41305900000000001 +F0.41206300000000001 +I0 +tp7239 +(dp7240 +g4 +F0.34520600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.96630000000000005 +sS'm' +F21.904699999999998 +sg8 +F0.41206300000000001 +sg9 +F309.38895300000001 +sg10 +(lp7241 +L345996190L +aL345996191L +aL345996192L +aL345996193L +aL345996194L +asg12 +(lp7242 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.41305900000000001 +sS't' +F53703.093150799999 +ss(F309.36453 +F0.32445800000000002 +F0.92100700000000002 +F1.1000099999999999 +I0 +tp7243 +(dp7244 +g4 +F0.32445800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.09745 +sS'm' +F22.828700000000001 +sg8 +F1.1000099999999999 +sg9 +F309.36453 +sg10 +(lp7245 +L345535021L +aL345535022L +aL345535023L +aL345535024L +aL345535025L +asg12 +(lp7246 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100700000000002 +sS't' +F53677.099731000002 +ss(F309.36402299999997 +F0.317552 +F1.01003 +F0.95303000000000004 +I0 +tp7247 +(dp7248 +g4 +F0.317552 +sg5 +I0 +sg6 +I0 +sg7 +F0.59294400000000003 +sS'm' +F22.042999999999999 +sg8 +F0.95303000000000004 +sg9 +F309.36402299999997 +sg10 +(lp7249 +L343711795L +aL343711796L +aL343711797L +aL343711798L +aL343711799L +asg12 +(lp7250 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.01003 +sS't' +F53623.158711199998 +ss(F309.38540499999999 +F0.34012999999999999 +F0.93304699999999996 +F0.87805100000000003 +I0 +tp7251 +(dp7252 +g4 +F0.34012999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.46185700000000002 +sS'm' +F21.636800000000001 +sg8 +F0.87805100000000003 +sg9 +F309.38540499999999 +sg10 +(lp7253 +L345028724L +aL345028725L +aL345028726L +aL345028727L +aL345028728L +asg12 +(lp7254 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.93304699999999996 +sS't' +F53670.113885999999 +ss(F309.38393600000001 +F0.31873800000000002 +F1.09006 +F1.0700700000000001 +I0 +tp7255 +(dp7256 +g4 +F0.31873800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.1349200000000002 +sS'm' +F23.738600000000002 +sg8 +F1.0700700000000001 +sg9 +F309.38393600000001 +sg10 +(lp7257 +L345684032L +aL345684033L +aL345684034L +aL345684035L +aL345684036L +asg12 +(lp7258 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.09006 +sS't' +F53680.086450000003 +ss(F309.36912999999998 +F0.34575 +F0.47671200000000002 +F0.45489099999999999 +I0 +tp7259 +(dp7260 +g4 +F0.34575 +sg5 +I0 +sg6 +I0 +sg7 +F0.92588800000000004 +sS'm' +F23.476099999999999 +sg8 +F0.45489099999999999 +sg9 +F309.36912999999998 +sg10 +(lp7261 +L344876106L +aL344876107L +aL344876108L +aL344876109L +asg12 +(lp7262 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47671200000000002 +sS't' +F53668.110645300003 +ss(F309.38818400000002 +F0.33804800000000002 +F0.65229300000000001 +F0.54382799999999998 +I0 +tp7263 +(dp7264 +g4 +F0.33804800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F2.2467899999999998 +sS'm' +F23.342700000000001 +sg8 +F0.54382799999999998 +sg9 +F309.38818400000002 +sg10 +(lp7265 +L112300824L +aL112300825L +aL112300826L +aL112300827L +asg12 +(lp7266 +I1 +aI2 +aI3 +aI4 +asg14 +F0.65229300000000001 +sS't' +F53656.1077878 +ss(F309.36503299999998 +F0.33011800000000002 +F1.0500100000000001 +F0.94401299999999999 +I0 +tp7267 +(dp7268 +g4 +F0.33011800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.30999199999999999 +sS'm' +F21.105599999999999 +sg8 +F0.94401299999999999 +sg9 +F309.36503299999998 +sg10 +(lp7269 +L346329112L +aL346329113L +aL346329114L +aL346329115L +aL346329116L +asg12 +(lp7270 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.159550900004 +ss(F309.37795499999999 +F0.33784599999999998 +F0.92100300000000002 +F1.1000099999999999 +I0 +tp7271 +(dp7272 +g4 +F0.33784599999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.056158 +sS'm' +F18.334499999999998 +sg8 +F1.1000099999999999 +sg9 +F309.37795499999999 +sg10 +(lp7273 +L345532206L +aL345532207L +aL345532208L +aL345532209L +aL345532210L +aL345532211L +aL345532212L +aL345532213L +aL345532214L +aL345532215L +asg12 +(lp7274 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92100300000000002 +sS't' +F53677.099768300002 +ss(F309.38889499999999 +F0.34376899999999999 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp7275 +(dp7276 +g4 +F0.34376899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.042813700000000003 +sS'm' +F16.213999999999999 +sg8 +F0.95301000000000002 +sg9 +F309.38889499999999 +sg10 +(lp7277 +L343709606L +aL343709607L +aL343709608L +aL343709609L +aL343709610L +aL343709611L +aL343709612L +aL343709613L +aL343709614L +aL343709615L +asg12 +(lp7278 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.1587803 +ss(F309.36759799999999 +F0.32823200000000002 +F1.0907 +F1.0702 +I0 +tp7279 +(dp7280 +g4 +F0.32823200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F3.01383 +sS'm' +F24.115600000000001 +sg8 +F1.0702 +sg9 +F309.36759799999999 +sg10 +(lp7281 +L345681139L +aL345681140L +aL345681141L +aL345681142L +aL345681143L +asg12 +(lp7282 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0907 +sS't' +F53680.086404599999 +ss(F309.366015 +F0.33174300000000001 +F0.64902000000000004 +F0.53902399999999995 +I0 +tp7283 +(dp7284 +g4 +F0.33174300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.39417200000000002 +sS'm' +F20.683 +sg8 +F0.53902399999999995 +sg9 +F309.366015 +sg10 +(lp7285 +L112296679L +aL112296680L +aL112296681L +aL112296682L +aL112296683L +asg12 +(lp7286 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.64902000000000004 +sS't' +F53656.106067699999 +ss(F309.36312199999998 +F0.33105200000000001 +F0.77501699999999996 +F0.75402999999999998 +I0 +tp7287 +(dp7288 +g4 +F0.33105200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.084845500000000004 +sS'm' +F18.7989 +sg8 +F0.75402999999999998 +sg9 +F309.36312199999998 +sg10 +(lp7289 +L342827312L +aL342827313L +aL342827314L +aL342827315L +aL342827316L +asg12 +(lp7290 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501699999999996 +sS't' +F53243.255725700001 +ss(F309.382723 +F0.335175 +F1.0800000000000001 +F1.0100100000000001 +I0 +tp7291 +(dp7292 +g4 +F0.335175 +sg5 +I0 +sg6 +I0 +sg7 +F0.081071900000000002 +sS'm' +F19.441600000000001 +sg8 +F1.0100100000000001 +sg9 +F309.382723 +sg10 +(lp7293 +L345363820L +aL345363821L +aL345363822L +aL345363823L +aL345363824L +asg12 +(lp7294 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0800000000000001 +sS't' +F53675.078748799999 +ss(F309.36668700000001 +F0.335532 +F0.83046500000000001 +F0.94730800000000004 +I0 +tp7295 +(dp7296 +g4 +F0.335532 +sg5 +I0 +sg6 +I0 +sg7 +F1.3467 +sS'm' +F22.797899999999998 +sg8 +F0.94730800000000004 +sg9 +F309.36668700000001 +sg10 +(lp7297 +L343129990L +aL343129991L +aL343129992L +aL343129993L +aL343129994L +asg12 +(lp7298 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.83046500000000001 +sS't' +F53288.111739799999 +ss(F309.38543199999998 +F0.34017199999999997 +F0.98403700000000005 +F0.988043 +I0 +tp7299 +(dp7300 +g4 +F0.34017199999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.56581000000000004 +sS'm' +F21.880700000000001 +sg8 +F0.988043 +sg9 +F309.38543199999998 +sg10 +(lp7301 +L346466073L +aL346466074L +aL346466075L +aL346466076L +aL346466077L +asg12 +(lp7302 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98403700000000005 +sS't' +F54007.119932599999 +ss(F309.37474099999997 +F0.33169500000000002 +F0.77501500000000001 +F0.754027 +I0 +tp7303 +(dp7304 +g4 +F0.33169500000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.042666099999999998 +sS'm' +F15.9642 +sg8 +F0.754027 +sg9 +F309.37474099999997 +sg10 +(lp7305 +L342825703L +aL342825704L +aL342825705L +aL342825706L +aL342825707L +asg12 +(lp7306 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501500000000001 +sS't' +F53243.255757999999 +ss(F309.37771800000002 +F0.32557999999999998 +F0.85105900000000001 +F0.91305800000000004 +I0 +tp7307 +(dp7308 +g4 +F0.32557999999999998 +sg5 +I0 +sg6 +I0 +sg7 +F3.62568 +sS'm' +F23.561900000000001 +sg8 +F0.91305800000000004 +sg9 +F309.37771800000002 +sg10 +(lp7309 +L343879186L +aL343879187L +aL343879188L +aL343879189L +aL343879190L +asg12 +(lp7310 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85105900000000001 +sS't' +F53626.144961400001 +ss(F309.38066800000001 +F0.328488 +F0.77925900000000003 +F0.82924500000000001 +I0 +tp7311 +(dp7312 +g4 +F0.328488 +sg5 +I0 +sg6 +I0 +sg7 +F0.40024399999999999 +sS'm' +F21.948699999999999 +sg8 +F0.82924500000000001 +sg9 +F309.38066800000001 +sg10 +(lp7313 +L343279018L +aL343279019L +aL343279020L +asg12 +(lp7314 +I2 +aI3 +aI4 +asg14 +F0.77925900000000003 +sS't' +F53302.1057888 +ss(F309.37460099999998 +F0.316944 +F0.85142300000000004 +F0.91329199999999999 +I0 +tp7315 +(dp7316 +g4 +F0.316944 +sg5 +I0 +sg6 +I0 +sg7 +F1.49492 +sS'm' +F22.595199999999998 +sg8 +F0.91329199999999999 +sg9 +F309.37460099999998 +sg10 +(lp7317 +L343883548L +aL343883549L +aL343883550L +aL343883551L +aL343883552L +asg12 +(lp7318 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85142300000000004 +sS't' +F53626.1449527 +ss(F309.37282800000003 +F0.335231 +F0.98400799999999999 +F0.98800600000000005 +I0 +tp7319 +(dp7320 +g4 +F0.335231 +sg5 +I0 +sg6 +I0 +sg7 +F0.53406100000000001 +sS'm' +F21.825600000000001 +sg8 +F0.98800600000000005 +sg9 +F309.37282800000003 +sg10 +(lp7321 +L346462012L +aL346462013L +aL346462014L +aL346462015L +aL346462016L +asg12 +(lp7322 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.98400799999999999 +sS't' +F54007.119897600001 +ss(F309.377949 +F0.33785300000000001 +F0.82801199999999997 +F0.94500899999999999 +I0 +tp7323 +(dp7324 +g4 +F0.33785300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.049352 +sS'm' +F18.341899999999999 +sg8 +F0.94500899999999999 +sg9 +F309.377949 +sg10 +(lp7325 +L343120501L +aL343120502L +aL343120503L +aL343120504L +aL343120505L +asg12 +(lp7326 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.82801199999999997 +sS't' +F53288.111771099997 +ss(F309.38751600000001 +F0.33222200000000002 +F1.0101500000000001 +F0.95321100000000003 +I0 +tp7327 +(dp7328 +g4 +F0.33222200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.27959 +sS'm' +F24.0319 +sg8 +F0.95321100000000003 +sg9 +F309.38751600000001 +sg10 +(lp7329 +L343713388L +aL343713389L +aL343713390L +aL343713391L +asg12 +(lp7330 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0101500000000001 +sS't' +F53623.160434899997 +ss(F309.37280800000002 +F0.33522099999999999 +F0.74100900000000003 +F0.960009 +I0 +tp7331 +(dp7332 +g4 +F0.33522099999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.60028800000000004 +sS'm' +F22.265599999999999 +sg8 +F0.960009 +sg9 +F309.37280800000002 +sg10 +(lp7333 +L344478845L +aL344478846L +aL344478847L +aL344478848L +aL344478849L +asg12 +(lp7334 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74100900000000003 +sS't' +F53644.123845800001 +ss(F309.38621899999998 +F0.33889399999999997 +F0.92105499999999996 +F1.10005 +I0 +tp7335 +(dp7336 +g4 +F0.33889399999999997 +sg5 +I0 +sg6 +I0 +sg7 +F0.22497500000000001 +sS'm' +F22.4878 +sg8 +F1.10005 +sg9 +F309.38621899999998 +sg10 +(lp7337 +L345535415L +aL345535416L +aL345535417L +aL345535418L +asg12 +(lp7338 +I1 +aI2 +aI3 +aI4 +asg14 +F0.92105499999999996 +sS't' +F53677.1014497 +ss(F309.38202100000001 +F0.342997 +F0.74902199999999997 +F0.97801700000000003 +I0 +tp7339 +(dp7340 +g4 +F0.342997 +sg5 +I0 +sg6 +I0 +sg7 +F0.60020200000000001 +sS'm' +F22.229500000000002 +sg8 +F0.97801700000000003 +sg9 +F309.38202100000001 +sg10 +(lp7341 +L171378233L +aL171378234L +aL171378235L +aL171378236L +aL171378237L +asg12 +(lp7342 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74902199999999997 +sS't' +F54005.107173900004 +ss(F309.36807700000003 +F0.34611399999999998 +F1.01511 +F0.99445300000000003 +I0 +tp7343 +(dp7344 +g4 +F0.34611399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.2526900000000001 +sS'm' +F23.6663 +sg8 +F0.99445300000000003 +sg9 +F309.36807700000003 +sg10 +(lp7345 +L342968175L +aL342968176L +aL342968177L +aL342968178L +asg12 +(lp7346 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01511 +sS't' +F53270.1362247 +ss(F309.36912999999998 +F0.34575 +F0.47684300000000002 +F0.45453500000000002 +I0 +tp7347 +(dp7348 +g4 +F0.34575 +sg5 +I0 +sg6 +I0 +sg7 +F0.87050099999999997 +sS'm' +F23.4102 +sg8 +F0.45453500000000002 +sg9 +F309.36912999999998 +sg10 +(lp7349 +L344876097L +aL344876098L +aL344876099L +aL344876100L +asg12 +(lp7350 +I1 +aI2 +aI3 +aI4 +asg14 +F0.47684300000000002 +sS't' +F53668.110645300003 +ss(F309.38530900000001 +F0.33193600000000001 +F0.85107299999999997 +F0.91305999999999998 +I0 +tp7351 +(dp7352 +g4 +F0.33193600000000001 +sg5 +I0 +sg6 +I0 +sg7 +F1.00658 +sS'm' +F22.152100000000001 +sg8 +F0.91305999999999998 +sg9 +F309.38530900000001 +sg10 +(lp7353 +L343879227L +aL343879228L +aL343879229L +aL343879230L +aL343879231L +asg12 +(lp7354 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85107299999999997 +sS't' +F53626.144982500002 +ss(F309.363134 +F0.33106000000000002 +F1.0100100000000001 +F0.95301000000000002 +I0 +tp7355 +(dp7356 +g4 +F0.33106000000000002 +sg5 +I0 +sg6 +I0 +sg7 +F0.071236099999999997 +sS'm' +F18.844000000000001 +sg8 +F0.95301000000000002 +sg9 +F309.363134 +sg10 +(lp7357 +L343709256L +aL343709257L +aL343709258L +aL343709259L +aL343709260L +asg12 +(lp7358 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158708800001 +ss(F309.38775900000002 +F0.32185900000000001 +F1.0900700000000001 +F1.07019 +I0 +tp7359 +(dp7360 +g4 +F0.32185900000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.529393 +sS'm' +F23.403099999999998 +sg8 +F1.07019 +sg9 +F309.38775900000002 +sg10 +(lp7361 +L345680630L +aL345680631L +aL345680632L +aL345680633L +asg12 +(lp7362 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0900700000000001 +sS't' +F53680.088119100001 +ss(F309.36241100000001 +F0.31962299999999999 +F0.92101 +F1.1000099999999999 +I0 +tp7363 +(dp7364 +g4 +F0.31962299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.067025100000000004 +sS'm' +F20.9071 +sg8 +F1.1000099999999999 +sg9 +F309.36241100000001 +sg10 +(lp7365 +L345535007L +aL345535008L +aL345535009L +aL345535010L +aL345535001L +aL345535002L +aL345535003L +aL345535004L +aL345535005L +aL345535006L +asg12 +(lp7366 +I1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.92101 +sS't' +F53677.101383599998 +ss(F309.38712700000002 +F0.31923800000000002 +F0.62214499999999995 +F0.78142999999999996 +I0 +tp7367 +(dp7368 +g4 +F0.31923800000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.5808800000000001 +sS'm' +F24.0914 +sg8 +F0.78142999999999996 +sg9 +F309.38712700000002 +sg10 +(lp7369 +L346174398L +aL346174399L +aL346174400L +aL346174401L +asg12 +(lp7370 +I1 +aI2 +aI3 +aI4 +asg14 +F0.62214499999999995 +sS't' +F53704.073351200001 +ss(F309.36601899999999 +F0.33178299999999999 +F0.73108499999999998 +F0.73206499999999997 +I0 +tp7371 +(dp7372 +g4 +F0.33178299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.29615399999999997 +sS'm' +F20.3994 +sg8 +F0.73206499999999997 +sg9 +F309.36601899999999 +sg10 +(lp7373 +L344601503L +aL344601504L +aL344601505L +aL344601506L +aL344601507L +asg12 +(lp7374 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.73108499999999998 +sS't' +F53654.158477700003 +ss(F309.36526199999997 +F0.33735700000000002 +F1.0103200000000001 +F0.99229000000000001 +I0 +tp7375 +(dp7376 +g4 +F0.33735700000000002 +sg5 +I0 +sg6 +I0 +sg7 +F4.6443700000000003 +sS'm' +F24.036899999999999 +sg8 +F0.99229000000000001 +sg9 +F309.36526199999997 +sg10 +(lp7377 +L342968150L +aL342968151L +aL342968152L +aL342968153L +aL342968154L +asg12 +(lp7378 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0103200000000001 +sS't' +F53270.134558400001 +ss(F309.36631799999998 +F0.340812 +F0.88500400000000001 +F1.1100000000000001 +I0 +tp7379 +(dp7380 +g4 +F0.340812 +sg5 +I0 +sg6 +I0 +sg7 +F0.0466489 +sS'm' +F18.3537 +sg8 +F1.1100000000000001 +sg9 +F309.36631799999998 +sg10 +(lp7381 +L344144132L +aL344144133L +aL344144134L +aL344144135L +aL344144136L +asg12 +(lp7382 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500400000000001 +sS't' +F53635.138175 +ss(F309.38092399999999 +F0.33936300000000003 +F0.85148999999999997 +F0.91339099999999995 +I0 +tp7383 +(dp7384 +g4 +F0.33936300000000003 +sg5 +I0 +sg6 +I0 +sg7 +F1.3005100000000001 +sS'm' +F23.2362 +sg8 +F0.91339099999999995 +sg9 +F309.38092399999999 +sg10 +(lp7385 +L343874321L +aL343874322L +aL343874323L +aL343874324L +asg12 +(lp7386 +I1 +aI2 +aI3 +aI4 +asg14 +F0.85148999999999997 +sS't' +F53626.1466287 +ss(F309.366514 +F0.34607199999999999 +F0.99147399999999997 +F0.99673500000000004 +I0 +tp7387 +(dp7388 +g4 +F0.34607199999999999 +sg5 +I0 +sg6 +I0 +sg7 +F2.01701 +sS'm' +F23.307099999999998 +sg8 +F0.99673500000000004 +sg9 +F309.366514 +sg10 +(lp7389 +L346459264L +aL346459265L +aL346459266L +aL346459267L +aL346459268L +asg12 +(lp7390 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.99147399999999997 +sS't' +F54007.119880099999 +ss(F309.385424 +F0.34012999999999999 +F0.92102499999999998 +F1.1000300000000001 +I0 +tp7391 +(dp7392 +g4 +F0.34012999999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.35939199999999999 +sS'm' +F21.553699999999999 +sg8 +F1.1000300000000001 +sg9 +F309.385424 +sg10 +(lp7393 +L345535405L +aL345535406L +aL345535407L +aL345535408L +aL345535409L +asg12 +(lp7394 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.92102499999999998 +sS't' +F53677.099789100001 +ss(F309.38271900000001 +F0.33516499999999999 +F0.77501699999999996 +F0.75402800000000003 +I0 +tp7395 +(dp7396 +g4 +F0.33516499999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.13655100000000001 +sS'm' +F19.472100000000001 +sg8 +F0.75402800000000003 +sg9 +F309.38271900000001 +sg10 +(lp7397 +L342827495L +aL342827496L +aL342827497L +aL342827498L +aL342827499L +asg12 +(lp7398 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501699999999996 +sS't' +F53243.255780200001 +ss(F309.36004600000001 +F0.32048599999999999 +F1.0500100000000001 +F0.94401199999999996 +I0 +tp7399 +(dp7400 +g4 +F0.32048599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.10588400000000001 +sS'm' +F19.652000000000001 +sg8 +F0.94401199999999996 +sg9 +F309.36004600000001 +sg10 +(lp7401 +L346331752L +aL346331753L +aL346331754L +aL346331755L +aL346331756L +aL346331757L +aL346331758L +aL346331759L +aL346331760L +aL346331761L +asg12 +(lp7402 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0500100000000001 +sS't' +F53974.1595371 +ss(F309.38025499999998 +F0.34040300000000001 +F1.0120400000000001 +F0.99270199999999997 +I0 +tp7403 +(dp7404 +g4 +F0.34040300000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.87782700000000002 +sS'm' +F23.279699999999998 +sg8 +F0.99270199999999997 +sg9 +F309.38025499999998 +sg10 +(lp7405 +L342962131L +aL342962132L +aL342962133L +aL342962134L +asg12 +(lp7406 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0120400000000001 +sS't' +F53270.136258500002 +ss(F309.37196899999998 +F0.34104899999999999 +F0.85101599999999999 +F0.91301900000000002 +I0 +tp7407 +(dp7408 +g4 +F0.34104899999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.7115800000000001 +sS'm' +F22.7395 +sg8 +F0.91301900000000002 +sg9 +F309.37196899999998 +sg10 +(lp7409 +L343878303L +aL343878304L +aL343878305L +aL343878306L +aL343878307L +asg12 +(lp7410 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.85101599999999999 +sS't' +F53626.144945400003 +ss(F309.37265500000001 +F0.32419399999999998 +F0.50673599999999996 +F0.45955099999999999 +I0 +tp7411 +(dp7412 +g4 +F0.32419399999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.3169 +sS'm' +F20.762699999999999 +sg8 +F0.45955099999999999 +sg9 +F309.37265500000001 +sg10 +(lp7413 +L153252762L +aL153252759L +aL153252760L +aL153252761L +asg12 +(lp7414 +I4 +aI1 +aI2 +aI3 +asg14 +F0.50673599999999996 +sS't' +F53702.084801199999 +ss(F309.38563299999998 +F0.32636399999999999 +F0.74103699999999995 +F0.96003400000000005 +I0 +tp7415 +(dp7416 +g4 +F0.32636399999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.12445000000000001 +sS'm' +F21.7315 +sg8 +F0.96003400000000005 +sg9 +F309.38563299999998 +sg10 +(lp7417 +L344483142L +aL344483143L +aL344483144L +aL344483145L +aL344483141L +asg12 +(lp7418 +I1 +aI2 +aI3 +aI4 +aI0 +asg14 +F0.74103699999999995 +sS't' +F53644.1255399 +ss(F309.37840199999999 +F0.33688400000000002 +F1.01264 +F0.99263699999999999 +I0 +tp7419 +(dp7420 +g4 +F0.33688400000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.7321 +sS'm' +F23.810700000000001 +sg8 +F0.99263699999999999 +sg9 +F309.37840199999999 +sg10 +(lp7421 +L342962087L +aL342962088L +aL342962089L +aL342962090L +asg12 +(lp7422 +I1 +aI2 +aI3 +aI4 +asg14 +F1.01264 +sS't' +F53270.136253299999 +ss(F309.37232 +F0.32929000000000003 +F0.83152899999999996 +F0.94760699999999998 +I0 +tp7423 +(dp7424 +g4 +F0.32929000000000003 +sg5 +I0 +sg6 +I0 +sg7 +F3.9867400000000002 +sS'm' +F23.989100000000001 +sg8 +F0.94760699999999998 +sg9 +F309.37232 +sg10 +(lp7425 +L343130088L +aL343130089L +aL343130090L +aL343130091L +aL343130092L +asg12 +(lp7426 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.83152899999999996 +sS't' +F53288.111755400001 +ss(F309.362416 +F0.31964599999999999 +F1.0100100000000001 +F0.95301800000000003 +I0 +tp7427 +(dp7428 +g4 +F0.31964599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F1.81443 +sS'm' +F22.798999999999999 +sg8 +F0.95301800000000003 +sg9 +F309.362416 +sg10 +(lp7429 +L343711782L +aL343711783L +aL343711784L +aL343711785L +aL343711786L +asg12 +(lp7430 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158706800001 +ss(F309.374731 +F0.33169599999999999 +F0.77501200000000003 +F0.75402499999999995 +I0 +tp7431 +(dp7432 +g4 +F0.33169599999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.042665399999999999 +sS'm' +F15.9642 +sg8 +F0.75402499999999995 +sg9 +F309.374731 +sg10 +(lp7433 +L342825708L +aL342825709L +aL342825710L +aL342825711L +aL342825712L +asg12 +(lp7434 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77501200000000003 +sS't' +F53243.255757999999 +ss(F309.382633 +F0.33971200000000001 +F1.0100100000000001 +F0.95301100000000005 +I0 +tp7435 +(dp7436 +g4 +F0.33971200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.068535600000000002 +sS'm' +F18.7651 +sg8 +F0.95301100000000005 +sg9 +F309.382633 +sg10 +(lp7437 +L343709571L +aL343709572L +aL343709573L +aL343709574L +aL343709575L +asg12 +(lp7438 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0100100000000001 +sS't' +F53623.158762899999 +ss(F309.367839 +F0.34503299999999998 +F0.785972 +F0.83724200000000004 +I0 +tp7439 +(dp7440 +g4 +F0.34503299999999998 +sg5 +I0 +sg6 +I0 +sg7 +F2.1113900000000001 +sS'm' +F22.845600000000001 +sg8 +F0.83724200000000004 +sg9 +F309.367839 +sg10 +(lp7441 +L343278856L +aL343278857L +aL343278858L +aL343278859L +aL343278860L +asg12 +(lp7442 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.785972 +sS't' +F53302.107411800003 +ss(F309.38082400000002 +F0.339306 +F1.0101800000000001 +F0.95354499999999998 +I0 +tp7443 +(dp7444 +g4 +F0.339306 +sg5 +I0 +sg6 +I0 +sg7 +F4.7790699999999999 +sS'm' +F23.9907 +sg8 +F0.95354499999999998 +sg9 +F309.38082400000002 +sg10 +(lp7445 +L343709586L +aL343709587L +aL343709588L +aL343709589L +aL343709590L +asg12 +(lp7446 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0101800000000001 +sS't' +F53623.158757899997 +ss(F309.36919899999998 +F0.34575499999999998 +F0.61618799999999996 +F0.775231 +I0 +tp7447 +(dp7448 +g4 +F0.34575499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F1.4156 +sS'm' +F23.961600000000001 +sg8 +F0.775231 +sg9 +F309.36919899999998 +sg10 +(lp7449 +L346172017L +aL346172018L +aL346172019L +aL346172020L +asg12 +(lp7450 +I1 +aI2 +aI3 +aI4 +asg14 +F0.61618799999999996 +sS't' +F53704.0733014 +ss(F309.383644 +F0.344995 +F0.88500800000000002 +F1.1100099999999999 +I0 +tp7451 +(dp7452 +g4 +F0.344995 +sg5 +I0 +sg6 +I0 +sg7 +F0.25848100000000002 +sS'm' +F21.3139 +sg8 +F1.1100099999999999 +sg9 +F309.383644 +sg10 +(lp7453 +L344148138L +aL344148139L +aL344148140L +aL344148141L +aL344148142L +asg12 +(lp7454 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.88500800000000002 +sS't' +F53635.138223100003 +ss(F309.36637100000002 +F0.34087200000000001 +F0.73102299999999998 +F0.73202 +I0 +tp7455 +(dp7456 +g4 +F0.34087200000000001 +sg5 +I0 +sg6 +I0 +sg7 +F0.064261299999999993 +sS'm' +F18.2529 +sg8 +F0.73202 +sg9 +F309.36637100000002 +sg10 +(lp7457 +L344600281L +aL344600282L +aL344600283L +aL344600284L +aL344600285L +asg12 +(lp7458 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.73102299999999998 +sS't' +F53654.158478700003 +ss(F309.38271300000002 +F0.335144 +F0.77900400000000003 +F0.82900499999999999 +I0 +tp7459 +(dp7460 +g4 +F0.335144 +sg5 +I0 +sg6 +I0 +sg7 +F0.113339 +sS'm' +F19.485199999999999 +sg8 +F0.82900499999999999 +sg9 +F309.38271300000002 +sg10 +(lp7461 +L343273466L +aL343273467L +aL343273468L +aL343273469L +aL343273470L +aL343273471L +aL343273472L +aL343273473L +aL343273474L +aL343273475L +asg12 +(lp7462 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.77900400000000003 +sS't' +F53302.107453099998 +ss(F309.37298900000002 +F0.32017299999999999 +F1.0502899999999999 +F0.94419799999999998 +I0 +tp7463 +(dp7464 +g4 +F0.32017299999999999 +sg5 +I0 +sg6 +I0 +sg7 +F0.60704400000000003 +sS'm' +F23.4514 +sg8 +F0.94419799999999998 +sg9 +F309.37298900000002 +sg10 +(lp7465 +L346337855L +aL346337856L +aL346337857L +aL346337858L +asg12 +(lp7466 +I1 +aI2 +aI3 +aI4 +asg14 +F1.0502899999999999 +sS't' +F53974.161231500002 +ss(F309.35979600000002 +F0.32506200000000002 +F0.74101099999999998 +F0.96001000000000003 +I0 +tp7467 +(dp7468 +g4 +F0.32506200000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.8390500000000001 +sS'm' +F23.520700000000001 +sg8 +F0.96001000000000003 +sg9 +F309.35979600000002 +sg10 +(lp7469 +L344478630L +aL344478631L +aL344478632L +aL344478633L +aL344478634L +asg12 +(lp7470 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.74101099999999998 +sS't' +F53644.123809700002 +ss(F309.37281000000002 +F0.33525300000000002 +F0.616012 +F0.77501699999999996 +I0 +tp7471 +(dp7472 +g4 +F0.33525300000000002 +sg5 +I0 +sg6 +I0 +sg7 +F1.02878 +sS'm' +F22.202000000000002 +sg8 +F0.77501699999999996 +sg9 +F309.37281000000002 +sg10 +(lp7473 +L346168236L +aL346168237L +aL346168238L +aL346168239L +aL346168240L +asg12 +(lp7474 +I0 +aI1 +aI2 +aI3 +aI4 +asg14 +F0.616012 +sS't' +F53704.071652999999 +ss(F309.38269700000001 +F0.33515499999999998 +F1.0900000000000001 +F1.0700000000000001 +I0 +tp7475 +(dp7476 +g4 +F0.33515499999999998 +sg5 +I0 +sg6 +I0 +sg7 +F0.073786099999999993 +sS'm' +F19.425699999999999 +sg8 +F1.0700000000000001 +sg9 +F309.38269700000001 +sg10 +(lp7477 +L345676145L +aL345676146L +aL345676147L +aL345676148L +aL345676149L +aL345676150L +aL345676151L +aL345676152L +aL345676153L +aL345676154L +asg12 +(lp7478 +I0 +aI1 +aI2 +aI3 +aI4 +aI0 +aI1 +aI2 +aI3 +aI4 +asg14 +F1.0900000000000001 +sS't' +F53680.086446599998 +ss. \ No newline at end of file diff --git a/mltsp/TCP/Algorithms/__init__.py b/mltsp/TCP/Algorithms/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/mltsp/TCP/Algorithms/__init__.py @@ -0,0 +1 @@ + diff --git a/mltsp/TCP/Algorithms/asas_catalog.R b/mltsp/TCP/Algorithms/asas_catalog.R new file mode 100755 index 00000000..38891271 --- /dev/null +++ b/mltsp/TCP/Algorithms/asas_catalog.R @@ -0,0 +1,543 @@ +##################################################################### +##### run this script to create MACC classification catalog for ASAS +## and save all relevant output, classifications + performance metrics +###################################################################### +n = dim(feat.debos)[1] + +############################ +# load ASAS data +asasdat=read.arff(file=asas_test_arff_fpath) +feat.tmp = data.frame(asasdat) +feat.asas = matrix(0,dim(feat.tmp)[1],dim(feat.debos)[2]) +for(ii in 1:dim(feat.debos)[2]){ + feat.asas[,ii]= feat.tmp[,names(feat.tmp)==names(feat.debos)[ii]] +} +colnames(feat.asas) = names(feat.debos) +feat.asas = data.frame(feat.asas) +class.asas = paste(asasdat$class) # this throws double & low-confidence labels into MISC +class.asas[class.asas=="UNKNOWN"] = "MISC" +class.asas = class.debos(class.asas) +ID.asas = asasdat$source_id +n.epochs.asas = read.table(paste(path,"data/n_epochs_asas.dat",sep=""))[,1] +N = dim(feat.asas)[1] + +### 20120810 dstarr commends out: +## add RRLd feature (0.0035 chosen by considering f2/f1 of known RRd) +#feat.debos$freq_rrd = ifelse(abs(feat.debos$freq_frequency_ratio_21 - 0.746) < 0.0035 | abs(feat.debos$freq_frequency_ratio_31 - 0.746) < 0.0035, 1,0) +#feat.asas$freq_rrd = ifelse(abs(feat.asas$freq_frequency_ratio_21 - 0.746) < 0.0035 | abs(feat.asas$freq_frequency_ratio_31 - 0.746) < 0.0035, 1,0) + + + +## ASAS ACVS classes (as of ACTA ASTRONOMICA Vol. 55 (2005) pp. 275–301): +# to obtain all ACVS classifications (not throwing double labels into MISC) +acvs = read.table(paste(path,"data/ACVS.1.1",sep="")) +# positional information for ASAS and debosscher +ra.dec.asas = read.table(paste(path,"data/ra_dec.csv",sep=""),sep=";") +ra.dec.deb = read.table(paste(path,"data/ra_dec_deb.csv",sep=""),sep=";") + +# fix order of acvs table to be same as our ARFF file (ordered by dotAstro ID) +fix.class = NULL +for(ii in 1:N){ # fix order of class.asas vector + fix.class = c(fix.class,which(ra.dec.asas[,1]==ID.asas[ii])) +} +acvs = acvs[fix.class,] +ra.dec.asas = ra.dec.asas[fix.class,] + + +## sum(acvs[,1]==ra.dec.asas[,9]) # 50124 + + +# # # # # # # # # +# Joey's original asas_catalog.R: +# # # # # # # # # + +feat.train = feat.debos +class.train = class.deb +ID.train = ID + +# keep track of which ASAS data are in training set +intrain = rep("",length(ID.asas)) + +#################################################### +## REMOVE THE FOLLOWING LOW-AMPLITUDE CLASSES: +## k. Lambda Bootis, m. Slowly Puls. B, n. Gamma Doradus, r. Wolf-Rayet +cat("Removing low-amplitude classes\n") +lowamp.rem = c('k. Lambda Bootis', 'm. Slowly Puls. B', 'n. Gamma Doradus', 'r. Wolf-Rayet') +remove = which(class.train %in% lowamp.rem) +feat.train = feat.train[-remove,] +class.train = factor(class.train[-remove]) +ID.train = ID.train[-remove] + + +#################################################### +## add ASAS - debosscher overlap data to training set +# for each match, replace Hipparcos/OGLE features with ASAS features +cat("Adding ASAS training objects that overlap with Debosscher\n") +counter = 0 +for(ii in 1:dim(ra.dec.deb)[1]){ + # kludgey match criterion: rounded versions of RA & Dec both match + ind = which(round(ra.dec.asas[,10],2)==round(ra.dec.deb[ii,10],2) & + round(ra.dec.asas[,12],2)==round(ra.dec.deb[ii,12],2)) + if(length(ind)>0){ + ind1 = which(ID.asas == ra.dec.asas[ind,1]) + ind2 = which(ID == ra.dec.deb[ii,1]) + ind3 = which(ID.train == ra.dec.deb[ii,1]) + if(length(ind2)==1){ + counter = counter+1 + ## remove old Hipparcos data + feat.train = feat.train[-ind3,] + class.train = class.train[-ind3] + ID.train = ID.train[-ind3] + ## add new ASAS data + feat.train = rbind(feat.train,feat.asas[ind1,]) + class.train = c(paste(class.train),paste(class.deb[ind2])) + ID.train = c(ID.train,ID.asas[ind1]) + intrain[ind1] = paste(class.deb[ind2]) + } + } +} +class.train = factor(class.train) +nn = length(class.train) +# total size: +print(table(class.train[(nn-counter+1):nn])[table(class.train[(nn-counter+1):nn])>0]) + ## a. Mira b1. Semireg PV c. RV Tauri + ## 71 9 5 + ## d. Classical Cepheid e. Pop. II Cepheid g. RR Lyrae, FM + ## 76 9 62 + ## h. RR Lyrae, FO j. Delta Scuti j1. SX Phe + ## 15 9 1 + ## l. Beta Cephei o. Pulsating Be p. Per. Var. SG + ## 2 1 2 + ## s1. Class. T Tauri s2. Weak-line T Tauri t. Herbig AE/BE + ## 1 2 1 + ## u. S Doradus v. Ellipsoidal + ## 1 1 +cat("number added:",counter,"\n") +# 268 + + +## #################################################### +## #################################################### +## # RF classifier fit on Debosscher data (OGLE, Hip, ASAS): +## cat("Fitting Original RF on Deb data\n") +## rf.deb = randomForest(x=as.matrix(feat.train),y=class.train,mtry=15,ntree=1000,nodesize=1) +## pred.asas.0 = predict(rf.deb,newdata = feat.asas) +## pred.asas.prob.0 = predict(rf.deb,newdata = feat.asas,type='prob') +## # agreement w/ acvs labels +## par(mar=c(1.5,9,9,1.95)) +## asas.tab = table(pred.asas.0,class.asas) +## asas.tab = asas.tab[,c(1:8,10:13,9)] +## plot.table(asas.tab,title="",cexprob=1,cexaxis=1.22) +## abline(h=1/24,lwd=4,col=4) +## mtext("ACVS Class",2,padj=-6.05,cex=2) +## mtext("RF Predicted Class",3,padj=-5.8,cex=2) + +## ###### performance metrics ########## +## agree.acvs = sum(paste(pred.asas.0)==paste(class.asas))/sum(class.asas!="MISC") +## p.hat.0 = apply(pred.asas.prob.0,1,max) +## mean.p.hat = mean(p.hat.0) +## perc.conf = sum(p.hat.0>0.5)/N + + +#################################################### +#################################################### +# add AL sources to training set +cat("Adding AL data to training set\n") +m=9 # number of AL steps +#### loop through the steps +for(step in 1:m){ + cat("Step",step,"of",m,"\n") + # these files are also in: trunk/Data/allstars/ + instep = read.table(paste(path,"data/AL_addToTrain_",step,".dat",sep="")) + + for(kk in 1:length(instep[,1])){ + if(length(intersect(ID.asas[which(ID.asas==instep[kk,1])],ID.train))==0){ # only add items that are not already included + feat.train = rbind(feat.train,feat.asas[which(ID.asas==instep[kk,1]),]) + class.train = c(paste(class.train),paste(class.debos(instep[kk,2]))) + ID.train = c(ID.train,ID.asas[which(ID.asas==instep[kk,1])]) + intrain[which(ID.asas==instep[kk,1])] = paste(class.debos(instep[kk,2])) + } + else{ cat(ID.asas[which(ID.asas==instep[kk,1])]," already added\n")} + } + class.train = factor(class.train) +} +cat("New training set size:",dim(feat.train)[1],"\n") +cat("Number of unique sources:",length(ID.train),"\n") + + +#################################################### +#################################################### +## add selected SIMBAD confirmed training sources +cat("Adding SIMBAD confirmed sources\n") +# this file is also in: trunk/Data/allstars/ +instep = read.table(paste(path,"data/AL_SIMBAD_confirmed.dat",sep=""))# 94 sources +instep = instep[instep[,1] %in% setdiff(instep[,1],ID.train),] # 80 sources + +### removed symbiotics on 20120310; they are only identifiable spectroscopically (AAM) +#symbiotics = read.table("/Users/jwrichar/Documents/CDI/TCP/trunk/Data/allstars/symbiotics_munari_2002_catalog.dat") +#instep = rbind(instep,symbiotics) + +# loop through SIMBAD-confirmed sources & add to training set +for(kk in 1:length(instep[,1])){ + if(length(intersect(ID.asas[which(ID.asas==instep[kk,1])],ID.train))==0){ # only add items that are not already included + feat.train = rbind(feat.train,feat.asas[which(ID.asas==instep[kk,1]),]) + class.train = c(paste(class.train),paste(class.debos(instep[kk,2]))) + ID.train = c(ID.train,ID.asas[which(ID.asas==instep[kk,1])]) + intrain[which(ID.asas==instep[kk,1])] = paste(class.debos(instep[kk,2])) + } + else{cat("already in training set\n")} +} +class.train = factor(class.train) + +### add more known RCBs: +new.RCB = c(250762, 257713, 251489, 256221, 247066) +for(kk in 1:length(new.RCB)){ + feat.train = rbind(feat.train,feat.asas[which(ID.asas==new.RCB[kk]),]) + class.train = factor(c(paste(class.train),"r1. RCB")) + ID.train = c(ID.train,new.RCB[kk]) + intrain[which(ID.asas==new.RCB[kk])] = c("r1. RCB") +} + + + + + +################################################################################ +## ADD RS CVn and BY Dra training objects from Strassmeier 1988 +################ +## RS CVn +rscvn = read.table(paste(path,"data/RS_CVn_ra_dec_training.dat",sep=""),sep=" ") +rscvn.result = NULL +for(ii in 1:length(rscvn[,1])){ + ind = which(substr(ra.dec.asas[,9],1,4)==paste(substr(rscvn[ii,1],1,2),substr(rscvn[ii,1],4,5),sep="") & substr(ra.dec.asas[,9],7,11)==paste(substr(rscvn[ii,2],1,3),substr(rscvn[ii,2],5,6),sep="")) + if(length(ind)==1){ + if(length(intersect(ID.asas[which(ID.asas==ra.dec.asas[ind,1])],ID.train))==0){ # only add items that are not already included + # add to training set + feat.train = rbind(feat.train,feat.asas[which(ID.asas==ra.dec.asas[ind,1]),]) + class.train = c(paste(class.train),"s3. RS CVn") + ID.train = c(ID.train,ID.asas[which(ID.asas==ra.dec.asas[ind,1])]) + intrain[which(ID.asas==ra.dec.asas[ind,1])] = "s3. RS CVn" + } + } +} +class.train = factor(class.train) + +################ +## BY Dra (added as RS CVn; no point in making an extra class for 1 object) +bydra = read.table(paste(path,"data/BY_Dra_ra_dec_training.dat",sep=""),sep=" ") +bydra.result = NULL +for(ii in 1:length(bydra[,1])){ + ind = which(substr(ra.dec.asas[,9],1,4)==paste(substr(bydra[ii,1],1,2),substr(bydra[ii,1],4,5),sep="") & substr(ra.dec.asas[,9],7,11)==paste(substr(bydra[ii,2],1,3),substr(bydra[ii,2],5,6),sep="")) + if(length(ind)==1){ + if(length(intersect(ID.asas[which(ID.asas==ra.dec.asas[ind,1])],ID.train))==0){ # only add items that are not already included + # add to training set + feat.train = rbind(feat.train,feat.asas[which(ID.asas==ra.dec.asas[ind,1]),]) + class.train = c(paste(class.train),"s3. RS CVn") + ID.train = c(ID.train,ID.asas[which(ID.asas==ra.dec.asas[ind,1])]) + intrain[which(ID.asas==ra.dec.asas[ind,1])] = "s3. RS CVn" + } + } +} +class.train = factor(class.train) + + +N.train = length(ID.train) + + +################################################ +################################################ +# now fit classifier on combined training set +################################################ + +# output ASAS training set IDs and classes +write( rbind(ID.train, paste(class.train)),paste(path,"tables/training_set_id_class.dat",sep=""),ncolumns=2,sep=",\t") + +cat("Final training set size:",dim(feat.train)[1],"\n") +cat("Number of unique sources:",length(unique(ID.train)),"\n") + +################################################ +# tune RF parameters (uncomment below to run, is expensive to run grid search) +################################################ +#source(paste(path,"R/tune_asas_RF.R",sep="")) +#tuneparam = tuneRF(feat.train, class.train, cv = 5, asas = which(ID.train > 200000),ntree=c(5000),mtry=seq(15,21,2),nodesize=2) +## ntree = 5000 mtry = 17 nodesize = 1 : +## CV Error = 0.1915 +################################################ + +# fit the RF with optimal tuning parameters on entire training set +cat("Fitting Final Random Forest\n") +rf.tr = randomForest(x=as.matrix(feat.train),y=class.train,mtry=17,ntree=5000,nodesize=1) +pred.asas.AL = predict(rf.tr,newdata = feat.asas) +pred.asas.prob.AL = predict(rf.tr,newdata = feat.asas,type='prob') + +# save RF object +#save(rf.tr,file=paste(path,"data/asas_randomForest.Rdat",sep="")) +save(rf.tr,file=rf_clfr_fpath) + +agree.acvs = sum(paste(pred.asas.AL)==paste(class.asas))/sum(class.asas!="MISC") +p.hat.AL = apply(pred.asas.prob.AL,1,max) +mean.p.hat = mean(p.hat.AL) +perc.conf = sum(p.hat.AL>0.5)/N + +# performance metrics +cat("Final performance metrics:\n") +cat("Agreement w/ ACVS:",agree.acvs,"\n") +cat("Mean max p-hat:",mean.p.hat,"\n") +cat("Percent w/ prob > 0.5:",perc.conf,"\n") +# Agreement w/ ACVS: 0.8080446 + +# plot confusion matrix w/ ACVS +par(mar=c(1.5,9,9,1.95)) +asas.tab = table(pred.asas.AL,class.asas) +asas.tab = asas.tab[,c(1:8,10:13,9)] +plot.table(asas.tab,title="",cexprob=1,cexaxis=1.06) +abline(h=1/24,lwd=4,col=4) +mtext("ACVS Class",2,padj=-6.05,cex=2) +mtext("RF Predicted Class",3,padj=-5.8,cex=2) + + +######## +## plot feature importance (average over 5 repetitions) +plotfi = FALSE +if(plotfi){ + featimp = matrix(0,length(rf.tr$importance),5) + rownames(featimp) = rownames(rf.tr$importance) + featimp[,1] = rf.tr$importance + for(ii in 2:5){ + rf.tmp = randomForest(x=as.matrix(feat.train),y=class.train,mtry=17,ntree=5000,nodesize=1) + featimp[,ii] = rf.tmp$importance + } + featimp.mean = apply(featimp,1,mean) + featimp.sd = apply(featimp,1,sd) + + featimp.sort = featimp.mean[sort(featimp.mean,index.return=TRUE,decreasing=T)$ix] + featimp.sdsort = featimp.sd[sort(featimp.mean,index.return=TRUE,decreasing=T)$ix] + + pdf(paste(path,"plots/asas_rf_imp.pdf",sep=""),height=6,width=9) + par(mar=c(5,14,1,1)) + barplot(featimp.sort[20:1],horiz=TRUE,xlab="Mean Gini Decrease",names.arg=rep("",20),space=0.2,lwd=2,col=2,xlim=c(0,150)) + axis(2,labels=names(featimp.sort)[20:1],at=0.7+(0:19)*1.2,tick=FALSE,las=2) + arrows(featimp.sort[20:1] - featimp.sdsort[20:1], 0.7+(0:19)*1.2, featimp.sort[20:1] + featimp.sdsort[20:1], 0.7+(0:19)*1.2, code=3, angle=90, length=0.05,lwd=2) + legend('bottomright',"Feature Importance",cex=2,bty="n",text.col=1) + dev.off() +} + + +###################################################### +# compute outlier measure +###################################################### + +## DO DISTANCE-BASED OUTLIER MEASURE +# set to TRUE if you want to compute it, else read it in from file +compoutlier = FALSE +source(paste(path,"R/compute_outlier.R",sep="")) +if(compoutlier){ + cat("Computing classifier confidence values\n") + outlier.score = anomScore(feat.train,class.train, feat.asas, ntree=500, knn=2, metric="rf") + write(outlier.score,paste(path,"data/outScore_asas_class.dat",sep=""),ncolumns=1) + + # find optimal threshold using cross-validation on training set + source(paste(path,"R/confidence_findThresh.R",sep="")) +} else { + outlier.score = read.table(paste(path,"data/outScore_asas_class.dat",sep=""))[,1] + out.thresh = 10.0 +} + + # plot outliers on P-A plot +## pdf(paste(path,"plots/outlier_per_amp.pdf",sep=""),height=8,width=8) +## par(mar=c(5,5,2,1)) +## plot(1/feat.train$freq1_harmonics_freq_0, feat.train$freq1_harmonics_amplitude_0[],pch=19,col="#00000070",log='xy',ylim=c(.003,4),xlab="Period (days)", ylab="Amplitude (V mag)",cex.lab=1.5) +## out.size = (outlier.score[outlier.score >= out.thresh])/5 - 1.5 +## # col.size = paste("#FF0000",ifelse(out.size >= 3, 99, round(out.size/2 * 100)),sep="") +## points(1/feat.asas$freq1_harmonics_freq_0[outlier.score >= out.thresh], feat.asas$freq1_harmonics_amplitude_0[outlier.score >= out.thresh],pch=17,col="#FF000070",cex=out.size) +## legend('topleft',c('Training Set','ASAS Outliers'),col=1:2,pch=c(19,17),cex=1.25) +## dev.off() + + ## plot(feat.train$color_diff_bj, feat.train$skew,pch=19,col="#00000030",xlab="Skew", ylab="Signif. of Period (# of sigma)") + ## points(feat.asas$color_diff_bj[catalog.table$Anomaly >= out.thresh], feat.asas$skew[catalog.table$Anomaly >= out.thresh],pch=17,col="#FF000050") + ## legend('topleft',c('Training Set','ASAS Outliers'),col=1:2,pch=c(19,17)) + + + + + +###################################################### +###################################################### + + +########################### +########################## +# Check probability calibration on AL training data +########################### +########################### +# set this to TRUE if you want to fit calibration parameters +# and produce reliability plots (else uses parameter ab.opt below) +checkcalib = FALSE +if(checkcalib){ + cat("Checking Classifier Calibration\n") + source(paste(path,"R/check_calibration.R",sep="")) # run calibration routine + pred.asas.prob.final = calibrate.sigmoid(pred.asas.prob.AL,ab.opt[1],ab.opt[2]) +} else { + ab.opt = c(-5.270766, 1.754329) # use hard-coded values found from calib. routine + pred.asas.prob.final = calibrate.sigmoid(pred.asas.prob.AL,ab.opt[1],ab.opt[2]) +} +pred.asas.final = pred.asas.AL + + + +##################################################### +# CORRECT THE PERIODS OF THE ECLIPSING SOURCES +########################### +Periods = 1/feat.asas$freq1_harmonics_freq_0 + +# fit RF to set of confirmed eclipsing sources where we are correct and off by factor of 2 +periodic = which(class.asas != "MISC") +half.ID = read.table(paste(path,"data/P_half_ACVS_followup.txt",sep=""),sep=",",header=TRUE)[,1] +same = which( (abs(acvs[periodic,2] - (Periods[periodic])) / acvs[periodic,2]) < .1) +ecl = which(substr(pred.asas.final,1,1) %in% c('w','x','y')) +same.ID = c(ID.asas[intersect(ecl,periodic[same])[1:150]],216273,216323) +feat.half = feat.asas[ID.asas %in% half.ID,] +feat.same = feat.asas[ID.asas %in% same.ID,] +correctP = factor(c(rep("n",length(half.ID)),rep("y",length(same.ID)))) +rf.period = randomForest(rbind(feat.half,feat.same),correctP,ntree=500) # RF + +ecl1 = which(substr(class.asas,1,1) %in% c('w','x','y')) +ecl2 = union(ecl,ecl1) +pred.corP = predict(rf.period,feat.asas[ecl2,]) +Periods[ecl2] =((pred.corP=='n')+1)/feat.asas$freq1_harmonics_freq_0[ecl2] # correct periods + +sum( (abs(acvs[ecl1,2] - (1/feat.asas$freq1_harmonics_freq_0[ecl1])) / acvs[ecl1,2]) < .1) +sum( (abs(acvs[ecl1,2] - Periods[ecl1]) / acvs[ecl1,2]) < .1) + +same = sum(abs(( acvs[periodic,2] - (Periods[periodic])) / acvs[periodic,2]) < .1) / length(periodic) +# 0.7598, up from 0.5386 +half = sum(abs(( acvs[periodic,2] - (2*Periods[periodic])) / acvs[periodic,2]) < .1) / length(periodic) +# 0.152, down from 0.380996 +any = ( sum(abs(( acvs[periodic,2] - (Periods[periodic])) / acvs[periodic,2]) < .1) + + sum(abs(( acvs[periodic,2] - (2*Periods[periodic])) / acvs[periodic,2]) < .1) + + sum(abs(( acvs[periodic,2] - (.5*Periods[periodic])) / acvs[periodic,2]) < .1) )/ length(periodic) +# 0.9287142 +cat("Period Agreement Rate: ",same,", ",half,", ",any,"\n") + + + +###################################################### +##################################################### +# WRITE OUT FINAL CATALOG +########################### +########################### + +# get class names into easily readable format +class.names = unlist(lapply(lapply(levels(pred.asas.final),strsplit,split=". ",fixed=TRUE),function(x) paste(x[[1]][-1],collapse=""))) +class.names = unlist(lapply(lapply(class.names,strsplit,split=",",fixed=TRUE),function(x) paste(x[[1]],collapse=""))) +class.names = unlist(lapply(lapply(class.names,strsplit,split="/",fixed=TRUE),function(x) paste(x[[1]],collapse=""))) +class.names = unlist(lapply(lapply(class.names,strsplit,split="-",fixed=TRUE),function(x) paste(x[[1]],collapse=""))) +class.names = unlist(lapply(lapply(class.names,strsplit,split=".",fixed=TRUE),function(x) paste(x[[1]],collapse=""))) +class.names = unlist(lapply(lapply(class.names,strsplit,split=" ",fixed=TRUE),function(x) paste(x[[1]],collapse="_"))) + +intrain.readable = unlist(lapply(lapply(paste(intrain),strsplit,split=". ",fixed=TRUE),function(x) paste(x[[1]][-1],collapse=""))) +intrain.readable = unlist(lapply(lapply(intrain.readable,strsplit,split=",",fixed=TRUE),function(x) paste(x[[1]],collapse=""))) +intrain.readable = unlist(lapply(lapply(intrain.readable,strsplit,split="/",fixed=TRUE),function(x) paste(x[[1]],collapse=""))) +intrain.readable = unlist(lapply(lapply(intrain.readable,strsplit,split="-",fixed=TRUE),function(x) paste(x[[1]],collapse=""))) +intrain.readable = unlist(lapply(lapply(intrain.readable,strsplit,split=".",fixed=TRUE),function(x) paste(x[[1]],collapse=""))) +intrain.readable = unlist(lapply(lapply(intrain.readable,strsplit,split=" ",fixed=TRUE),function(x) paste(x[[1]],collapse="_"))) + + +# save training set table +class.names.space = unlist(lapply(lapply(class.names,strsplit,split="_",fixed=TRUE),function(x) paste(x[[1]],collapse=" "))) +write.table(cbind(class.names.space,table(class.train),round(table(class.train)/length(class.train),4)),file=paste(path,"tables/training_set.dat",sep=""),quote=FALSE,row.names=FALSE,sep=" & ",eol="\\\\\n",col.names=FALSE) + + +# store RF output with readable class names +pred.asas.final1 = factor(class.names[apply(pred.asas.prob.final,1,which.max)]) +pred.asas.prob.final1 = pred.asas.prob.final +colnames(pred.asas.prob.final1) = class.names + +# add some other important features to the catalog: +catalog.table = cbind(acvs[,1],ID.asas,ra.dec.asas[,c(10,12)],paste(pred.asas.final1),apply(pred.asas.prob.final,1,max),outlier.score,acvs[,6],intrain.readable,pred.asas.prob.final,Periods,feat.asas$freq_signif,n.epochs.asas,acvs[,4],feat.asas$amplitude) +colnames(catalog.table) = c("ASAS_ID","dotAstro_ID","RA","DEC","Class","P_Class","Anomaly","ACVS_Class","Train_Class",class.names,"P","P_signif","N_epochs","V","deltaV") + +#### set this to TRUE if you want to write catalog +write.catalog = TRUE + +if(write.catalog){ + cat("Writing out Catalog\n") + save(pred.asas.final,pred.asas.prob.final,file=paste(path,"data/asas_pred_final_v2_3.Rdat",sep="")) + + write.table(catalog.table,file=paste(path,"catalog/asas_class_catalog_v2_3.dat",sep=""),sep=',',quote=FALSE,row.names=FALSE) + + ### write out latex table to be included in paper + N.table = 40 + catalog.paper = cbind(catalog.table[1:N.table,1:5],round(catalog.table[1:N.table,6:7],3),catalog.table[1:N.table,8:9],round(catalog.table[1:N.table,10],3),rep(" ... ",N.table),round(catalog.table[1:N.table,37:42],3)) + write.table(catalog.paper,file=paste(path,"tables/asas_catalog.dat",sep=""),quote=FALSE,row.names=FALSE,sep=" & ",eol="\\\\\n") + + +#### plot correspondence between us & ACVS + pdf(paste(path,"plots/catalog_rf_acvs.pdf",sep=""),height=8,width=12) + par(mar=c(3,9,9.5,2.75)) + asas.tab = table(pred.asas.final,class.asas) + asas.tab = asas.tab[,c(1:8,10:13,9)] + plot.table(asas.tab,title="",cexprob=0.95,cexaxis=1.35) + abline(h=1/24,lwd=4,col=4) + mtext("ACVS Class",2,padj=-6.05,cex=2) + mtext("MACC Class",3,padj=-6.3,cex=2) + dev.off() + + ### correspondence for confident sources + pdf(paste(path,"plots/catalog_rf_acvs_conf.pdf",sep=""),height=8,width=12) + par(mar=c(3,9,9.5,2.75)) + conf = which(outlier.score < 3) + asas.tab = table(pred.asas.final[conf],class.asas[conf]) + asas.tab = asas.tab[,c(1:8,10:13,9)] + plot.table(asas.tab,title="",cexprob=0.95,cexaxis=1.35) + abline(h=1/24,lwd=4,col=4) + mtext("ACVS Class",2,padj=-6.05,cex=2) + dev.off() + +cat("ACVS agreement rate:",sum(paste(pred.asas.final)==paste(class.asas))/sum(class.asas!="MISC"),"\n") +#ACVS agreement rate: 0.8052965 + +cat("ACVS agreement rate for confident sources:",sum(paste(pred.asas.final[conf])==paste(class.asas[conf]))/sum(class.asas[conf]!="MISC"),"\n") +# ACVS agreement rate for confident sources: 0.9162604 +## length(conf) +## [1] 25158 +} + +########################################################################### +########################### +########################### +# Compare with other papers +########################### +# set this to TRUE if you want to generate comparison tables +docompare = FALSE +if(docompare){ + cat("Comparing classifications to other ASAS papers\n") + source(paste(path,"R/compare_asas_papers.R",sep="")) +} + + + +#################################################### +# plot period-period relationship ACVS vs this work +#################################################### +plotper = FALSE # set to TRUE if you want to generate period plot +if(plotper){ + pdf(paste(path,"plots/period_acvs_us.pdf",sep=""),height=7,width=7) + par(mar=c(5,5,2,1),mfrow=c(1,1)) + # plot(acvs[,2],Periods,log='xy',col="#00000007",pch=20,xlim=c(.03,3000),ylim=c(.03,3000),xlab="Period (ACVS)",ylab="Period (this work)",cex.lab=1.5,cex.axis=1) + # abline(0,1,col=2,lty=3,lwd=2) + # legend('bottomright',"All Sources",cex=1.5,bty="n",text.col=4) + periodic = which(class.asas != "MISC") +#periodic = which(substr(acvs[,6],1,4)!="MISC") + plot(acvs[periodic,2],Periods[periodic],log='xy',col="#00000010",pch=20,xlim=c(.03,1000),ylim=c(.03,1000),xlab="Period (ACVS)",ylab="Period (this work)",cex.lab=1.5,cex.axis=1,cex=1.25) + abline(0,1,col=2,lty=1,lwd=1) + legend('bottomright',"ACVS Periodic Sources",cex=2,bty="n",text.col=4) + legend('topleft',paste("Agreement Rate: ",round(same,3)*100,"%",sep=""),cex=2,bty="n",text.col=2) + dev.off() + + ## half = which( (abs(acvs[periodic,2] - (2/feat.asas$freq1_harmonics_freq_0[periodic])) / acvs[periodic,2]) < .1) + ## half.tab = cbind(catalog.table[periodic[half[1:150]],c(2,5:6,42)], acvs[periodic[half[1:150]],2]) + ## colnames(half.tab)[5] = "P_ACVS" + ## write.table(half.tab, "tables/P_half_ACVS_followup.dat", row.names=FALSE,sep=",",quote=FALSE) + +} diff --git a/mltsp/TCP/Algorithms/class_cv.R b/mltsp/TCP/Algorithms/class_cv.R new file mode 100755 index 00000000..fc06dac4 --- /dev/null +++ b/mltsp/TCP/Algorithms/class_cv.R @@ -0,0 +1,704 @@ + +# CART +rpart.cv = function(x,y,nfolds=5,method="gini",loss=NULL,prior=NULL,seed=sample(1:10^5,1)){ + require(rpart) + set.seed(seed) + + n = length(y) + p = length(table(y)) + folds = sample(1:nfolds,n,replace=TRUE) + predictions = matrix(0,nrow=n,ncol=p) + + # default loss function + if(is.null(loss)){ + loss = matrix(1,p,p) + diag(loss) = rep(0,p)} + + # default prior: prop. to observed class rates + if(is.null(prior)){ + prior = table(y)/n + } + + prior = prior / sum(prior) + + for(ii in 1:nfolds){ + print(paste("fold",ii,"of",nfolds)) + leaveout = which(folds==ii) + # fit tree + y.in = y[-leaveout] + tree.fit = rpart(y.in~.,data=data.frame(x[-leaveout,]),parms=list(split=method,loss=loss,prior=prior),control=rpart.control(minsplit=2,minbucket=1,cp=.001,xval=2)) + if(dim(tree.fit$cptable)[2] < 4) { + print("tree is a stump, skip pruning") + tree.prune = tree.fit } + else { + # print(tree.fit$cptable[which.min(tree.fit$cptable[,"xerror"]),"CP"]) + tree.prune = try(prune(tree.fit,cp=tree.fit$cptable[which.min(tree.fit$cptable[,"xerror"]),"CP"])) + if(length(tree.prune)==1) {tree.prune = prune(tree.fit,cp=2*tree.fit$cptable[which.min(tree.fit$cptable[,"xerror"]),"CP"]) } + } + predictions[leaveout,] = predict(tree.prune,newdata=data.frame(x[leaveout,]),type="prob") + } + pred = levels(y)[apply(predictions,1,which.max)] + pred = factor(pred,levels=levels(y)) + confmat = fixconfmat(table(pred,y),levels(pred),levels(y)) + err.rate = 1-sum(diag(confmat))/n + return(list(predclass=pred,predprob=predictions,confmat=confmat,err.rate=err.rate)) +} + + +### Random Forest +rf.cv = function(x,y,nfolds=5,testset=NULL,prior=NULL,mtry=NULL,n.trees=500,seed=sample(1:10^5,1)){ + # don't train on any of the data in testset + # this is to use in the hierarchical classifier + require(randomForest) + set.seed(seed) + + n = length(y) + p = length(table(y)) + folds = sample(1:nfolds,n,replace=TRUE) + predictions = matrix(0,nrow=n,ncol=p) + + if(is.null(mtry)){ + mtry = ceiling(sqrt(dim(x)[2])) + } + # default prior: prop. to observed class rates + if(is.null(prior)){ + prior = table(y)/n + } + + for(ii in 1:nfolds){ + print(paste("fold",ii,"of",nfolds)) + leaveout = which(folds==ii) + rf.tmp = randomForest(x=as.matrix(x[-union(leaveout,testset),]),y=y[-union(leaveout,testset)],classwt=prior,mtry=mtry,ntree=n.trees,nodesize=5) + predictions[leaveout,] = predict(rf.tmp,newdata=x[leaveout,],type='prob') + } + pred = levels(y)[apply(predictions,1,which.max)] + pred = factor(pred,levels=levels(y)) + confmat = fixconfmat(table(pred,y),levels(pred),names(table(y))) + err.rate = 1-sum(diag(confmat))/n + + return(list(predclass=pred,predprob=predictions,confmat=confmat,err.rate=err.rate)) +} + + + + +### Random Forest (party) +rfc.cv = function(x,y,nfolds=5,testset=NULL,mtry=NULL,weights=NULL,n.trees=500,seed=sample(1:10^5,1)){ + # don't train on any of the data in testset + # this is to use in the hierarchical classifier + require(party) + set.seed(seed) + + n = length(y) + p = length(table(y)) + folds = sample(1:nfolds,n,replace=TRUE) + predictions = matrix(0,nrow=n,ncol=p) + + if(is.null(mtry)){ + mtry = ceiling(sqrt(dim(x)[2])) + } + + for(ii in 1:nfolds){ + print(paste("fold",ii,"of",nfolds)) + leaveout = which(folds==ii) + train = cbind(y[-union(leaveout,testset)],x[-union(leaveout,testset),]) + test = cbind(y[leaveout],x[leaveout,]) + names(train)[1] = names(test)[1] = "y" + rf.tmp = cforest(y~.,data=train,weights=weights[-leaveout],controls=cforest_classical(mtry=mtry,ntree=n.trees)) + predictions[leaveout,] = matrix(unlist(treeresponse(rf.tmp,newdata=test)),length(leaveout),p,byrow=T) + } + pred = levels(y)[apply(predictions,1,which.max)] + pred = factor(pred,levels=levels(y)) + confmat = fixconfmat(table(pred,y),levels(pred),names(table(y))) + err.rate = 1-sum(diag(confmat))/n + + return(list(predclass=pred,predprob=predictions,confmat=confmat,err.rate=err.rate)) +} + + +### Random Forest with MetaCost wrapper +rfMetaCost.cv = function(x,y,nfolds=5,cost=costMat(2),prior=NULL,mtry=NULL,n.trees=500,seed=sample(1:10^5,1)){ + require(randomForest) + set.seed(seed) + + n = length(y) + p = length(table(y)) + folds = sample(1:nfolds,n,replace=TRUE) + predictions = matrix(0,nrow=n,ncol=p) + + if(is.null(mtry)){ + mtry = ceiling(sqrt(dim(x)[2])) + } + # default prior: prop. to observed class rates + if(is.null(prior)){ + prior = table(y)/n + } + + for(ii in 1:nfolds){ + print(paste("fold",ii,"of",nfolds)) + leaveout = which(folds==ii) + rf.init = randomForest(x=as.matrix(x[-leaveout,]),y=y[-leaveout],classwt=prior,mtry=mtry,ntree=n.trees,nodesize=5) + y.adj = factor(apply(rf.init$votes%*%cost,1,which.min)) + rf.adj = randomForest(x=as.matrix(x[-leaveout,]),y=y.adj,mtry=mtry,ntree=n.trees,nodesize=5) + predictions[leaveout] = as.numeric(paste(predict(rf.adj,newdata=x[leaveout,],type='class'))) + } + pred = factor(levels(y)[predictions],levels=levels(y)) + confmat = fixconfmat(table(pred,y),levels(pred),names(table(y))) + err.rate = 1-sum(diag(confmat))/n + + return(list(predclass=pred,predprob=predictions,confmat=confmat,err.rate=err.rate)) +} + +# ############## HSC +# Random Forest hierarchical single class. +rf.hsc = function(x,ymat,y,nfolds=5,mtry=NULL,weights=NULL,n.trees=100,seed=sample(1:10^5,1)){ + require(randomForest) + depth = ymat$depth + ymat = ymat$class + + n = length(ymat[,1]) + p = length(colnames(ymat)[colnames(ymat)==substr(colnames(ymat),1,1)]) + y.hat = matrix(0,nrow=n,ncol=length(ymat[1,])) + predictions = matrix(0,nrow=n,ncol=p) + if(is.null(mtry)){ + mtry = ceiling(sqrt(dim(x)[2])) + } + + print("Classifying at top level") + class.top = factor(colnames(ymat)[depth==1][apply(ymat[,depth==1]==1,1,which)]) + # random forest on top level + rftop = rf.cv(x,class.top,n.trees=n.trees,nfolds=nfolds,mtry=mtry,seed=seed) + y.hat[,depth==1] = rftop$predprob + + print("Classifying within subtrees:") + # go down in the class hierarchy + # do classification at each level within each subtree + for(jj in 2:max(depth)){ + up = which(depth==jj-1) + for(kk in 1:length(up)){ + subtree = up[kk]:min(up[kk+1],length(depth),na.rm=T) + if(sum(depth[subtree]==jj)>0){ # check if the subtree goes deeper + elem.sub = which(ymat[,up[kk]]==1) + out = (1:n)[-elem.sub] + class.sub = rep(NA,n) + class.sub[elem.sub] = colnames(ymat)[depth==jj][apply(ymat[elem.sub,depth==jj]==1,1,which)] + class.sub = factor(class.sub) + rftmp = rf.cv(x,class.sub,testset=out,n.trees=n.trees,mtry=mtry,nfolds=nfolds,seed=seed) + y.hat[,subtree[depth[subtree]==jj]] = rftmp$predprob + } + } + } + + # turn y.hat tree probability estimates into class prob. estimates + kk=0 + for(ii in 1:length(depth)){ + if(ii == 1){ isdeep = (depth[ii] == depth[ii+1]) + } else if(ii == length(depth)){ isdeep = (depth[ii] == depth[ii-1]) + } else { isdeep = depth[ii] == depth[ii-1] | depth[ii] == depth[ii+1]} + if(isdeep){ + kk = kk+1 + tmp = y.hat[,ii] + for(jj in (depth[ii]-1):1){ + ind = which(depth==jj) + tmp = tmp * y.hat[,max(ind[ind0){ # check if the subtree goes deeper + elem.sub = which(ymat[,up[kk]]==1) + out = (1:n)[-elem.sub] + class.sub = rep(NA,n) + class.sub[elem.sub] = colnames(ymat)[depth==jj][apply(ymat[elem.sub,depth==jj]==1,1,which)] + class.sub = factor(class.sub) + rftmp = rfc.cv(x,class.sub,testset=out,n.trees=n.trees,mtry=mtry,nfolds=nfolds,seed=seed) + y.hat[,subtree[depth[subtree]==jj]] = rftmp$predprob + } + } + } + + # turn y.hat tree probability estimates into class prob. estimates + kk=0 + for(ii in 1:length(depth)){ + if(ii == 1){ isdeep = (depth[ii] == depth[ii+1]) + } else if(ii == length(depth)){ isdeep = (depth[ii] == depth[ii-1]) + } else { isdeep = depth[ii] == depth[ii-1] | depth[ii] == depth[ii+1]} + if(isdeep){ + kk = kk+1 + tmp = y.hat[,ii] + for(jj in (depth[ii]-1):1){ + ind = which(depth==jj) + tmp = tmp * y.hat[,max(ind[ind 1L) + sample(y, 1L) + else y +} + +which.is.min.big = function (x,y.in) # break ties to bigger class +{ + y <- seq_along(x)[x == min(x)] + if (length(y) > 1L) + y[which.max(tabulate(y.in)[y.in[y]])] + else y +} + +# pair-wise probability-calculating routines + + +minpair1 <- function(probin) + { ## Count number of classes and construct prob. matrix + nclass <- (1+sqrt(1 + 8*length(probin)))/2 + if(nclass%%1 != 0) stop("Vector has wrong length only one against one problems supported") + probim <- matrix(0, nclass, nclass) + probim[lower.tri(probim)] <- probin + probim = t(probim) + probim[lower.tri(probim)] <- 1 - probin + + sum <- colSums(probim^2) + Q <- diag(sum) + Q[upper.tri(Q)] <- - probin*(1 - probin) + Q[lower.tri(Q)] <- - probin*(1 - probin) + SQ <- matrix(0,nclass +1, nclass +1) + SQ[1:(nclass+1) <= nclass, 1:(nclass+1) <= nclass] <- Q + SQ[1:(nclass+1) > nclass, 1:(nclass+1) <= nclass] <- rep(1,nclass) + SQ[1:(nclass+1) <= nclass, 1:(nclass+1) > nclass] <- rep(1,nclass) + + rhs <- rep(0,nclass+1) + rhs[nclass + 1] <- 1 + + p <- solve(SQ,rhs) + + p <- p[-(nclass+1)]/sum(p[-(nclass+1)]) + return(p) + } + + +couple1 <- function(probin, coupler = "minpair1") +{ + if(is.vector(probin)) + probin <- matrix(probin,1) + m <- dim(probin)[1] + + coupler <- match.arg(coupler, c("minpair1", "pkpd", "vote", "ht")) + +# if(coupler == "ht") +# multiprob <- sapply(1:m, function(x) do.call(coupler, list(probin[x ,], clscnt))) +# else + multiprob <- sapply(1:m, function(x) do.call(coupler, list(probin[x ,]))) + + return(t(multiprob)) +} + + diff --git a/mltsp/TCP/Algorithms/classify_Deb.R b/mltsp/TCP/Algorithms/classify_Deb.R new file mode 100755 index 00000000..74a90965 --- /dev/null +++ b/mltsp/TCP/Algorithms/classify_Deb.R @@ -0,0 +1,365 @@ + +# load data +path = "/Users/jwrichar/Documents/CDI/TCP/debosscher/" +#path = "/accounts/gen/vis/jwrichar/debosscher/" +#.libPaths("/accounts/gen/vis/jwrichar/Rlib") + +source(paste(path,"R/utils_classify.R",sep="")) +source(paste(path,"R/class_cv.R",sep="")) + # load in features & classes +data = load.data(path) +features = data$features +classes = data$classes +ID = data$ID +features = featureConvert(features) # convert freq / amp to ratios to first freq / amp + +features = features[,-which(names(features)=='freq_nharm')] # remove freq_nharm +features = features[,-which(names(features)=='stetson_mean')] # remove stet mean +features = features[,-which(names(features)=='kurtosis')] # remove kurtosis +features = features[,-which(names(features)=='freq_harmonics_offset')] # remove time offset +features = features[,-which(names(features)=='freq_amplitude_ratio_21')] # remove time offset +features = features[,-which(names(features)=='freq_amplitude_ratio_31')] # remove time offset +features = features[,-which(names(features)=='freq_frequency_ratio_21')] # remove time offset +features = features[,-which(names(features)=='freq_frequency_ratio_31')] # remove time offset +classes.mat = class.hier(classes) +n = length(classes) +print(paste("Number of sources analyzed:",n)) + +# feature importance (to screen features for SVM) +library(randomForest) +rf.outinit = randomForest(features,classes,nfolds=10) +featimp = rf.outinit$importance +featimp.q = quantile(featimp,0.7) + + +#################### +# initialize error-rate + computation time matrix +err.rates = matrix(0,10,10) +bad = (costMat(10)==10) # define bad misclassifications +err.rates.bad = matrix(0,10,10) +row.names(err.rates) = c("CART","C4.5","RF","Boost","CART.pw","RF.pw","Boost.pw","SVM.pw","HSC-RF","HMC-RF") +row.names(err.rates.bad) = c("CART","C4.5","RF","Boost","CART.pw","RF.pw","Boost.pw","SVM.pw","HSC-RF","HMC-RF") +comp.times = matrix(0,10,10) +row.names(comp.times) = c("CART","C4.5","RF","Boost","CART.pw","RF.pw","Boost.pw","SVM.pw","HSC-RF","HMC-RF") + +for(ii in 1:10){ +#for(ii in 1:1){ + # keep track of all classifications (to see which sources are hard) + predictions = matrix(0,10,length(classes)) + + seed = sample(1:10^6,1) + + print(err.rates) + print(err.rates.bad) + print(comp.times) + +# CART + t.st = proc.time()[3] + tree.out = rpart.cv(features,classes,nfolds=10,method="gini",seed=seed) + comp.times[1,ii] = proc.time()[3]-t.st + err.rates[1,ii] = tree.out$err.rate + err.rates.bad[1,ii] = sum(tree.out$confmat*bad)/n + predictions[1,] = tree.out$predclass + +# C4.5 + t.st = proc.time()[3] + tree.out = rpart.cv(features,classes,nfolds=10,method="information",seed=seed) + comp.times[2,ii] = proc.time()[3]-t.st + err.rates[2,ii] = tree.out$err.rate + err.rates.bad[2,ii] = sum(tree.out$confmat*bad)/n + predictions[2,] = tree.out$predclass + +# RF + t.st = proc.time()[3] + rf.out = rf.cv(features,classes,n.trees=1000,mtry=15,nfolds=10,seed=seed) + comp.times[3,ii] = proc.time()[3]-t.st + err.rates[3,ii] = rf.out$err.rate + err.rates.bad[3,ii] = sum(rf.out$confmat*bad)/n + predictions[3,] = rf.out$predclass + +# Boosting + t.st = proc.time()[3] + boost.out = boostTree.cv(features,classes,n.trees=50,depth=15,rate="Breiman",nfolds=5,seed=seed) + comp.times[4,ii] = proc.time()[3]-t.st + err.rates[4,ii] = boost.out$err.rate + err.rates.bad[4,ii] = sum(boost.out$confmat*bad)/n + predictions[4,] = boost.out$predclass + +# CART pw vote +# CART pw meta-vote + t.st = proc.time()[3] + cart.pw = vote.pairwise(features,classes,nfolds=10,method='cart',k.meta=10,seed=seed) + comp.times[5,ii] = proc.time()[3]-t.st + err.rates[5,ii] = cart.pw$err.rate.prob + err.rates.bad[5,ii] = sum(cart.pw$confmat.prob*bad)/n + predictions[5,] = cart.pw$predclass.prob + if(ii==1){ + postscript(paste(path,"plots/featImportance_pwCart.ps",sep=""),horizontal=TRUE) + plot.featImp(cart.pw$FeatImp) + dev.off() + } + +# RF pw vote +# RF pw meta-vote + t.st = proc.time()[3] + rf.pw = vote.pairwise(features,classes,nfolds=10,method='rf',n.tree=100,mtry=10,k.meta=10,seed=seed) + comp.times[6,ii] = proc.time()[3]-t.st + err.rates[6,ii] = rf.pw$err.rate.prob + err.rates.bad[6,ii] = sum(rf.pw$confmat.prob*bad)/n + predictions[6,] = rf.pw$predclass.prob + if(ii==1){ + pdf(paste(path,"plots/featImportance_pwRF.pdf",sep=""),height=8,width=10) +# plot.featImp(t(t(rf.pw$FeatImp)/colSums(rf.pw$FeatImp))) # regular + plot.featImp(t(t(sqrt(rf.pw$FeatImp))/colSums(sqrt(rf.pw$FeatImp)))) # square-root (better) + dev.off() + } + + # Boosting pairwise voting + t.st = proc.time()[3] + boost.pw = vote.pairwise(features,classes,nfolds=5,n.tree=50,shrinkage=.05,method='boost',k.meta=10,seed=seed) + comp.times[7,ii] = proc.time()[3]-t.st + err.rates[7,ii] = boost.pw$err.rate.prob + err.rates.bad[7,ii] = sum(boost.pw$confmat.prob*bad)/n + predictions[7,] = boost.pw$predclass.prob + +# SVM pw vote +# SVM pw meta-vote + t.st = proc.time()[3] + svm.pw = vote.pairwise(features[,which(featimp>20)],classes,nfolds=10,method='svm',svmsig=0.05,k.meta=10,seed=seed) + comp.times[8,ii] = proc.time()[3]-t.st + err.rates[8,ii] = svm.pw$err.rate + err.rates.bad[8,ii] = sum(svm.pw$confmat*bad)/n + predictions[8,] = svm.pw$predclass + + ## HSC + t.st = proc.time()[3] + hsc.out = rf.hsc(features,classes.mat,classes,nfolds=10,seed=seed,n.trees=1000,mtry=25) + comp.times[9,ii] = proc.time()[3]-t.st + err.rates[9,ii] = hsc.out$err.rate + err.rates.bad[9,ii] = sum(hsc.out$confmat*bad)/n + predictions[9,] = hsc.out$predclass + + # HMC +# t.st = proc.time()[3] +# hmc.run(out = "hmc1.s",n.trees=500,mtry=25,w0=0.5,seed=seed,path=paste(path,"clus/",sep="")) +# hmc.out = hmc.read(classes,classes.mat$class,file=paste(path,"clus/hmc1.test.pred.arff",sep="")) +# comp.times[10,ii] = proc.time()[3]-t.st +# err.rates[10,ii] = hmc.out$err.rate +# err.rates.bad[10,ii] = sum(hmc.out$confmat*bad)/n +# predictions[10,] = hmc.out$predclass + + + + superClass = factor(levels(classes)[apply(apply(predictions,2,tabulate,nbins=length(table(classes))),2,which.max)]) + superconfmat = fixconfmat(table(superClass,classes),levels(superClass),levels(classes)) + print(paste("Super-classifier mis-class rate:",1-sum(diag(superconfmat))/length(classes))) + # 23.0% + + + if(ii==1){ + periods = 1/features[,"freq1_harmonics_freq_0"] + wrong.all = which(apply(as.numeric(classes)==t(predictions),1,sum)==0) # which sources always misclassified? + # plot folded LCs w/ spline fits for those that are always misclassified + postscript(paste(path,"plots/LCfold_misclass.ps",sep=""),horizontal=F) + par(mfrow=c(4,1),mar=c(0,4,0,.3)) + for(indbad in 1:length(wrong.all)){ + # read in folded LC plus spline fit + perLC = read.table(paste(path,"LC_timefold/deboss_pf",ID[wrong.all[indbad]],".dat",sep="")) + perFit = read.table(paste(path,"LC_timefold/deboss_spline",ID[wrong.all[indbad]],".dat",sep="")) + + plot(perLC[,1],perLC[,2],pch=20,cex=.5,xlim=c(0,1),ylim=range(perLC[,2])[2:1],ylab="mag",xaxt='n') + arrows(perLC[,1],perLC[,2]+perLC[,3],perLC[,1],perLC[,2]-perLC[,3],length=0) + lines(perFit[,1],perFit[,2],col=2,lwd=2) + lines(perFit[,1],perFit[,2]-perFit[,3],col=4,lty=3,lwd=1.5) + lines(perFit[,1],perFit[,2]+perFit[,3],col=4,lty=3,lwd=1.5) + text(0.5,min(perLC[,2]),paste("ID",ID[wrong.all[indbad]],":",classes[wrong.all[indbad]]),pos=1,col="darkred",cex=1.5) + text(1,max(perLC[,2]),paste("Classify as:",superClass[wrong.all[indbad]]),cex=1.5,col="darkblue",pos=2) + text(0,max(perLC[,2]),paste("Period =",signif(periods[wrong.all[indbad]],2),"days"),cex=1.5,col="darkblue",pos=4) + axis(1,labels=FALSE) + if(indbad %% 4 == 0){ + axis(1,padj=-3.5,cex.axis=1) + } + } + dev.off() + } + + print(paste(ii,"of 10 done!")) +} +#boxplot(err.rates~row.names(err.rates)) + +write(t(err.rates),paste(path,"out/errorRates.dat",sep=""),ncolumns=10) +write(t(err.rates.bad),paste(path,"out/errorRates_bad.dat",sep=""),ncolumns=10) +write(t(comp.times),paste(path,"out/compTimes.dat",sep=""),ncolumns=10) + +round(cbind(apply(err.rates,1,mean)*100, +apply(err.rates.bad,1,mean)*100,apply(comp.times,1,mean)),1) + +## CART 32.2 13.7 10.6 +## C4.5 29.8 12.7 14.4 +## RF 22.8 8.0 117.6 +## Boost 25.0 9.9 466.5 +## CART.pw 25.8 8.7 323.2 +## RF.pw 23.4 8.0 290.3 +## Boost.pw 24.1 8.2 301.5 +## SVM.pw 25.3 8.4 273.0 +## HSC-RF 23.5 7.8 230.9 +## HMC-RF 23.4 8.2 946.0 + + +# hmc :0.23365759 0.08171206 945.96260000 + +## [,1] [,2] [,3] [,4] [,5] +## [1,] 0.23151751 0.2341115 0.2392996 0.23281453 2.360571e-01 +## [2,] 0.08106355 0.0843061 0.0843061 0.08236057 8.171206e-02 +## [3,] 940.91800000 901.4580000 888.7930000 958.16100000 1.028320e+03 +## [,6] [,7] [,8] [,9] [,10] +## [1,] 0.23281453 2.347601e-01 0.23994812 0.22827497 0.22697795 +## [2,] 0.08236057 8.106355e-02 0.08041505 0.07782101 0.08171206 +## [3,] 918.74900000 1.001902e+03 898.06400000 964.22500000 959.03600000 + + +# SECOND PART: +# take a couple classifiers and apply to debosscher's features +feat.deb = read.table(paste(path,"debos_features.dat",sep="")) +# hipparcos +ind.hip = read.table("/Users/jwrichar/Documents/CDI/TCP/debosscher/hipparcos_hipind.dat")[,1] +names.deb = paste(feat.deb[,1]) +feat.deb=feat.deb[-which(duplicated(names.deb)),] +names.deb = names.deb[-which(duplicated(names.deb,fromLast=TRUE))] +names.hip = strsplit(paste(read.table("/Users/jwrichar/Documents/CDI/TCP/debosscher/J_A+A_475_1159_list.dat.txt",skip=4,sep="|",strip.white=TRUE)[ind.hip,5]),split=" ") +subset = NULL +for(ii in 1:length(names.hip)){ + subset = c(subset,which(names.deb==names.hip[[ii]][1])) +} +feat.hip = feat.deb[subset,] + duplic = c("c-25473.hip","c-26304.hip","c-33165.hip","c-34042.hip","c-36750.hip","c-39009.hip","c-53461.hip","c-57812.hip","c-58907.hip","c-75377.hip","c-104029.hip") + hip.out = which(feat.hip[,31]=="ROAP" | feat.hip[,31]=="XB" | feat.hip[,31]=="SXPHE" | feat.hip[,1] %in% duplic) +feat.hip = feat.hip[-hip.out,] +class.hip = class.debos(feat.hip[,31]) +feat.hip = feat.hip[,-c(1,31)] +# ogle +feat.ogle = feat.deb[c(which(substr(names.deb,1,4)=="OGLE"),1251:1345),-c(1,31)] +class.ogle = class.debos(feat.deb[c(which(substr(names.deb,1,4)=="OGLE"),1251:1345),31]) + +features.deb = rbind(feat.hip,feat.ogle) +class.deb = factor(c(paste(class.hip),paste(class.ogle))) +class.deb.mat = class.hier(class.deb) + +err.deb = matrix(0,3,10) +for(ii in 1:10){ + seed = sample(1:10^6,1) +# RF + rf.deb = rf.cv(features.deb,class.deb,nfolds=10,n.trees=1000,mtry=10,seed=seed) + err.deb[1,ii] = rf.deb$err.rate #26.4% + +# RF-pw + rfpw.deb = vote.pairwise(features.deb,class.deb,nfolds=10,method='rf',n.tree=100,k.meta=10,seed=seed) + err.deb[2,ii] = rfpw.deb$err.rate.prob #29.0% + + # HSC-RF + hsc.deb = rf.hsc(features.deb,class.deb.mat,class.deb,nfolds=10,seed=seed,n.trees=1000,mtry=10) + err.deb[3,ii] = hsc.deb$err.rate # 28.3% + + print(err.deb) +} +row.names(err.deb)=c("RF","RF.pw","HSC-RF") +write(t(err.deb),paste(path,"out/errorRates_debFeatures.dat",sep=""),ncolumns=10) + +## > apply(err.deb,1,mean) +## RF RF.pw HSC-RF +## 0.2669464 0.2891543 0.2812782 + +# THIRD PART: +# +# run our algorithms on only our LS features +features.ls = features[which(substr(names(features),1,4)=="freq")] + +err.ls = matrix(0,3,10) + +for(ii in 1:10){ + seed = sample(1:10^6,1) +# RF + rf.ls = rf.cv(features.ls,classes,nfolds=10,n.trees=1000,mtry=10,seed=seed) + err.ls[1,ii] = rf.ls$err.rate #26.4% + +# RF-pw + rfpw.ls = vote.pairwise(features.ls,classes,nfolds=10,method='rf',n.tree=100,k.meta=10,seed=seed) + err.ls[2,ii] = rfpw.ls$err.rate.prob #29.0% + + # HSC-RF + hsc.ls = rf.hsc(features.ls,classes.mat,classes,nfolds=10,seed=seed,n.trees=1000,mtry=10) + err.ls[3,ii] = hsc.ls$err.rate # 28.3% + + print(err.ls) +} +row.names(err.ls)=c("RF","RF.pw","HSC-RF") + +write(t(err.ls),paste(path,"out/errorRates_LSFeatures.dat",sep=""),ncolumns=10) + +## > apply(err.ls,1,mean) +## RF RF.pw HSC-RF +## 0.2378080 0.2634890 0.2459144 + +# FOURTH PART: +# +# run our algorithms on only our non-LS features +features.nls = features[which(substr(names(features),1,4)!="freq")] + +err.nls = matrix(0,3,10) + +for(ii in 1:10){ + seed = sample(1:10^6,1) +# RF + rf.nls = rf.cv(features.nls,classes,nfolds=10,n.trees=1000,mtry=7,seed=seed) + err.nls[1,ii] = rf.nls$err.rate #26.4% + +# RF-pw + rfpw.nls = vote.pairwise(features.nls,classes,nfolds=10,method='rf',n.tree=100,k.meta=10,seed=seed) + err.nls[2,ii] = rfpw.nls$err.rate.prob #29.0% + + # HSC-RF + hsc.nls = rf.hsc(features.nls,classes.mat,classes,nfolds=10,seed=seed,n.trees=1000,mtry=7) + err.nls[3,ii] = hsc.nls$err.rate # 28.3% + + print(err.nls) +} +row.names(err.nls)=c("RF","RF.pw","HSC-RF") + +write(t(err.nls),paste(path,"out/errorRates_NLSFeatures.dat",sep=""),ncolumns=10) + +## > apply(err.nls,1,mean) +## RF RF.pw HSC-RF +## 0.2763294 0.2855383 0.2783398 + + +# Debosscher results: +# Gaussian Mixture Model: 31% +# Bayes avg. of ANN: 30% +# 3-dependent Bayesian Network: 34% +# SVM: 50% + +err.rates = read.table(paste(path,"out/errorRates.dat",sep="")) +row.names(err.rates) = c("CART","C4.5","RF","Boost","CART.pw","RF.pw","Boost.pw","SVM.pw","HSC-RF","HMC-RF") +err.deb = read.table(paste(path,"out/errorRates_debFeatures.dat",sep="")) +row.names(err.deb)=c("RF","RF.pw","HSC-RF") +err.ls = read.table(paste(path,"out/errorRates_LSFeatures.dat",sep="")) +row.names(err.ls)=c("RF","RF.pw","HSC-RF") +err.nls = read.table(paste(path,"out/errorRates_NLSFeatures.dat",sep="")) +row.names(err.nls)=c("RF","RF.pw","HSC-RF") + + +# plot boxplot +Errors = rbind(err.rates,err.deb,err.ls,err.nls) + +pdf(paste(path,"plots/misclassRates.pdf",sep=""),width=12,height=8) +par(mar=c(5,4.5,.5,.3)) +boxplot(t(Errors),range=0,names=c(row.names(err.rates),row.names(err.deb),row.names(err.ls),row.names(err.nls)),ylab="Mis-classification Rate",cex.lab=1.5,xaxt="n",boxwex=.5,ylim=c(.21,.3375)) +axis(1,labels=c(row.names(err.rates),row.names(err.deb),row.names(err.ls),row.names(err.nls)),at=1:dim(Errors)[1],las=2,cex.axis= 1,padj=0.5,tick=TRUE) +abline(.3,0,col=2,lty=2,lwd=2.5) +abline(v=c(10.5,13.5,16.5),lwd=2) +legend("topleft","Debosscher et al. (2007)",lwd=2.5,lty=2,col=2,cex=1.45,bty='n') +text(5.5,.215,"LS + non-LS Features\n(this work)",cex=1.25,col='darkblue') +text(12,.215,"LS Features\n(Debosscher)",cex=1.25,col='darkblue') +text(15,.215,"LS Features\n(this work)",cex=1.25,col='darkblue') +text(18.5,.215,"non-LS Feat.\n(this work)",cex=1.25,col='darkblue') +dev.off() diff --git a/mltsp/TCP/Algorithms/compare_randforest_classifiers.py b/mltsp/TCP/Algorithms/compare_randforest_classifiers.py new file mode 100644 index 00000000..9b07ff60 --- /dev/null +++ b/mltsp/TCP/Algorithms/compare_randforest_classifiers.py @@ -0,0 +1,331 @@ +#!/usr/bin/env python +""" +* Get fortran code running for comparisons with R's party:cforest +** install cforest +** have script which runs forest and cforest on some dataset +** also run parf rf classifier on dataset +*** betsy: ~/scratch/rf_parf/parf +** compare results (will need to do crossvalidation) +** First try out on non-missing-value dataset +** Need some missing-feature datasets to try out + +""" +from __future__ import print_function +from __future__ import absolute_import +import os, sys +import numpy + +def example_initial_r_randomforest(): + """ Initial example which trains and classifies a R randomForest classifier + Using 1 40/60 fold of debosscher data. + """ + + algorithms_dirpath = os.path.abspath(os.environ.get("TCP_DIR") + 'Algorithms/') + sys.path.append(algorithms_dirpath) + from . import rpy2_classifiers + rc = rpy2_classifiers.Rpy2Classifier(algorithms_dirpath=algorithms_dirpath) + + train_arff_str = open(os.path.expandvars("$HOME/scratch/full_deboss_1542srcs_20110106.arff")).read() + traindata_dict = rc.parse_full_arff(arff_str=train_arff_str) + + Gen_Fold_Classif = rpy2_classifiers.GenerateFoldedClassifiers() + all_fold_data = Gen_Fold_Classif.generate_fold_subset_data(full_data_dict=traindata_dict, + n_folds=10, + do_stratified=False, + classify_percent=40.) + i_fold = 0 # of 10 folds + fold_data = all_fold_data[i_fold] + do_ignore_NA_features = False + classifier_fpath = os.path.expandvars("$HOME/scratch/classifier_RF_0.rdata")# % (i_fold)) + Gen_Fold_Classif.generate_R_randomforest_classifier_rdata(train_data=fold_data['train_data'], + classifier_fpath=classifier_fpath, + do_ignore_NA_features=do_ignore_NA_features, + algorithms_dirpath=algorithms_dirpath) + + r_name='rf_clfr' + classifier_dict = {'class_name':r_name} + rc.load_classifier(r_name=r_name, + fpath=classifier_fpath) + classif_results = rc.apply_randomforest(classifier_dict=classifier_dict, + data_dict=fold_data['classif_data'], + do_ignore_NA_features=do_ignore_NA_features) + + print("classif_results['error_rate']=", classif_results['error_rate']) + import pdb; pdb.set_trace() + print() + + + +def count_classes(class_list=[]): + """ + """ + count_dict = {} + for class_name in class_list: + if class_name not in count_dict: + count_dict[class_name] = 0 + count_dict[class_name] += 1 + return count_dict + + +def generate_parf_header_with_weighted_classes(count_dict={}, + n_sources=0, arff_header=[]): + """ Given some class information and an existing arff header list, + generate a parf style @attribute class entry which has inverse proportional class weights. + """ + new_arff_header = [] + for line in arff_header: + #if '@attribute source_id' in line.lower(): + # new_arff_header.append('@ignored source_id NUMERIC') + # continue + if not "@attribute class" in line.lower(): + new_arff_header.append(line) + continue + sub_line = line[line.find('{')+1:line.rfind('}')] + class_list = sub_line.split("','") + new_line = line[:line.find('{')+1] + total_weight = 0 # for sanity check only + for quoted_class_name in class_list: + class_name = quoted_class_name.strip("'") + class_weight = count_dict[class_name] / float(n_sources) + + ###Using NO WEIGHT:# + new_line += "'%s', " % (class_name) + ### USING WEIGHTS (which, as calculated seem to worsen the final classification error) + ### - it seems internal weights are used by PARF since nowt error rate agrees with R:randomForest + #new_line += "'%s' (%f), " % (class_name, class_weight) + + total_weight += class_weight + new_line = new_line[:-2] + line[line.rfind('}'):] + print('total_weight=', total_weight) + #print 'line: ', line + #print 'new_line:', new_line + new_arff_header.append(new_line) + + return new_arff_header + + +if __name__ == '__main__': + + #example_initial_r_randomforest() + + # I want to do the following over the same folded datasets + # I also want to use the same parms + #####parf --verbose -t ~/scratch/full_deboss_1542srcs_20110106.arff -a ~/scratch/full_deboss_1542srcs_20110106.arff -n 1000 -m 25 + + # NOTE: this is compiled differently (with different FFLAGS, CFLAGS) than for library/python wrapping version: + parf_exec_fpath = '/home/pteluser/scratch/rf_parf__back_copy2/parf/parf' + + noisify_attribs = [ \ + 'freq1_harmonics_amplitude_0', + 'freq1_harmonics_amplitude_1', + 'freq1_harmonics_amplitude_2', + 'freq1_harmonics_amplitude_3', + 'freq1_harmonics_rel_phase_0', + 'freq1_harmonics_rel_phase_1', + 'freq1_harmonics_rel_phase_2', + 'freq1_harmonics_rel_phase_3', + 'freq2_harmonics_amplitude_0', + 'freq2_harmonics_amplitude_1', + 'freq2_harmonics_amplitude_2', + 'freq2_harmonics_amplitude_3', + 'freq2_harmonics_rel_phase_0', + 'freq2_harmonics_rel_phase_1', + 'freq2_harmonics_rel_phase_2', + 'freq2_harmonics_rel_phase_3', + 'freq3_harmonics_amplitude_0', + 'freq3_harmonics_amplitude_1', + 'freq3_harmonics_amplitude_2', + 'freq3_harmonics_amplitude_3', + 'freq3_harmonics_freq_0', + 'freq3_harmonics_rel_phase_0', + 'freq3_harmonics_rel_phase_1', + 'freq3_harmonics_rel_phase_2', + 'freq3_harmonics_rel_phase_3', + 'freq_amplitude_ratio_31', + 'freq_frequency_ratio_31', + 'freq_signif_ratio_31', + 'skew', + 'qso_log_chi2_qsonu', + 'qso_log_chi2nuNULL_chi2nu', + 'median_absolute_deviation', + 'std', + 'stetson_j', + 'percent_difference_flux_percentile'] + + + ntrees = 100 + mtry=25 + nodesize=5 + use_missing_values = True + prob_source_has_missing=0.3 + prob_misattrib_is_missing=0.5 + + + algorithms_dirpath = os.path.abspath(os.environ.get("TCP_DIR") + 'Algorithms/') + sys.path.append(algorithms_dirpath) + from . import rpy2_classifiers + rc = rpy2_classifiers.Rpy2Classifier(algorithms_dirpath=algorithms_dirpath) + + train_arff_str = open(os.path.expandvars("$HOME/scratch/full_deboss_1542srcs_20110106.arff")).read() + + + if use_missing_values: + train_arff_str = rc.insert_missing_value_features(arff_str=train_arff_str, + noisify_attribs=noisify_attribs, + prob_source_has_missing=prob_source_has_missing, + prob_misattrib_is_missing=prob_misattrib_is_missing) + + traindata_dict = rc.parse_full_arff(arff_str=train_arff_str, fill_arff_rows=True) + arff_header = rc.parse_arff_header(arff_str=train_arff_str)#, ignore_attribs=['source_id']) + + Gen_Fold_Classif = rpy2_classifiers.GenerateFoldedClassifiers() + + all_fold_data = Gen_Fold_Classif.generate_fold_subset_data(full_data_dict=traindata_dict, + n_folds=10, + do_stratified=False, + classify_percent=40.) + + temp_arff_fpath_root = os.path.expandvars("/tmp/parf") + + meta_parf_avgs = [] + meta_R_randomForest_avgs = [] + meta_R_cforest_avgs = [] + for k in range(50): + parf_fpath_dict = {} + results_dict = {} + for i_fold, fold_dict in all_fold_data.items(): + parf_fpath_dict[i_fold] = {} + results_dict[i_fold] = {} + for data_case in fold_dict.keys(): + if data_case == 'train_data': + count_dict = count_classes(class_list=fold_dict['train_data']['class_list']) + n_sources = len(fold_dict['train_data']['class_list']) + new_arff_header = generate_parf_header_with_weighted_classes(count_dict=count_dict, n_sources=n_sources, arff_header=arff_header) + else: + new_arff_header = arff_header + fold_arff_lines = [] + fold_arff_lines.extend(new_arff_header) + fold_arff_lines.extend(fold_dict[data_case]['arff_rows']) + fold_arff_fpath = "%s_%s_%d" % (temp_arff_fpath_root, data_case, i_fold) + if os.path.exists(fold_arff_fpath): + os.system('rm ' + fold_arff_fpath) + fp = open(fold_arff_fpath, 'w') + for line in fold_arff_lines: + fp.write(line + '\n') + fp.close() + parf_fpath_dict[i_fold][data_case] = fold_arff_fpath + + ### Do parf classification + exec_parf_str = '%s -t %s -a %s -n %d -m %d -xs %d -ri source_id -uu source_id' % ( \ + parf_exec_fpath, + parf_fpath_dict[i_fold]['train_data'], + parf_fpath_dict[i_fold]['classif_data'], + ntrees, mtry, nodesize) + print(exec_parf_str) + (a,b,c) = os.popen3(exec_parf_str) + a.close() + c.close() + lines_str = b.read() + b.close() + lines = lines_str.split('\n') + for line in lines: + if not 'Testset classification error' in line: + continue + vals = line.split() + + class_error = float(vals[4].strip('%')) + kappa = float(vals[8]) + results_dict[i_fold]['parf'] = {'class_error':class_error, + 'kappa':kappa} + + if not use_missing_values: + ### Do the R randomForest here: + do_ignore_NA_features = False + for i_fold, fold_data in all_fold_data.items(): + classifier_fpath = os.path.expandvars("$HOME/scratch/classifier_RF_%d.rdata" % (i_fold)) + Gen_Fold_Classif.generate_R_randomforest_classifier_rdata(train_data=fold_data['train_data'], + classifier_fpath=classifier_fpath, + do_ignore_NA_features=do_ignore_NA_features, + algorithms_dirpath=algorithms_dirpath, + ntrees=ntrees, mtry=mtry, + nfolds=10, nodesize=nodesize) + + r_name='rf_clfr' + classifier_dict = {'class_name':r_name} + rc.load_classifier(r_name=r_name, + fpath=classifier_fpath) + classif_results = rc.apply_randomforest(classifier_dict=classifier_dict, + data_dict=fold_data['classif_data'], + do_ignore_NA_features=do_ignore_NA_features) + + print("classif_results['error_rate']=", classif_results['error_rate']) + + results_dict[i_fold]['randomForest'] = {'class_error':classif_results['error_rate']} + + + # # # # # # + # # # # # # + # # # # # # + ### Do the R cforest here: + do_ignore_NA_features = False + for i_fold, fold_data in all_fold_data.items(): + classifier_fpath = os.path.expandvars("$HOME/scratch/classifier_RF_%d.rdata" % (i_fold)) + print('generating cforest...') + Gen_Fold_Classif.generate_R_randomforest_classifier_rdata(train_data=fold_data['train_data'], + classifier_fpath=classifier_fpath, + do_ignore_NA_features=do_ignore_NA_features, + algorithms_dirpath=algorithms_dirpath, + ntrees=ntrees, mtry=mtry, + nfolds=10, nodesize=nodesize, + classifier_type='cforest') + + r_name='rf_clfr' + classifier_dict = {'class_name':r_name} + rc.load_classifier(r_name=r_name, + fpath=classifier_fpath) + + print('applying cforest...') + classif_results_cforest = rc.apply_cforest(classifier_dict=classifier_dict, + data_dict=fold_data['classif_data'], + do_ignore_NA_features=do_ignore_NA_features) + + print("classif_results['error_rate']=", classif_results_cforest['error_rate']) + + results_dict[i_fold]['cforest'] = {'class_error':classif_results_cforest['error_rate']} + + + + + ##### Analyze the results (compare the classifiers): + parf_errors = [] + randomForest_errors = [] + cforest_errors = [] + for i_fold in all_fold_data.keys(): + parf_errors.append(results_dict[i_fold]['parf']['class_error'] / 100.) + randomForest_errors.append(results_dict[i_fold].get('randomForest',{}).get('class_error',-1)) + cforest_errors.append(results_dict[i_fold]['cforest']['class_error']) + + #meta_parf_avgs.append(numpy.mean(parf_errors)) + #meta_R_randomForest_avgs.append(numpy.mean(randomForest_errors)) + #meta_R_cforest_avgs.append(numpy.mean(cforest_errors)) + meta_parf_avgs.extend(parf_errors) + meta_R_randomForest_avgs.extend(randomForest_errors) + meta_R_cforest_avgs.extend(cforest_errors) + + print("PARF mean=%lf, std=%lf" % (numpy.mean(parf_errors), numpy.std(parf_errors))) + print("randomForest mean=%lf, std=%lf" % (numpy.mean(randomForest_errors), numpy.std(randomForest_errors))) + print("cforest mean=%lf, std=%lf" % (numpy.mean(cforest_errors), numpy.std(cforest_errors))) + + + #### Put this within the inner loop so can see how this is improving: + print('META PARF :', numpy.mean(meta_parf_avgs), numpy.std(meta_parf_avgs), k*10 + i_fold) + print('META randomForest:', numpy.mean(meta_R_randomForest_avgs), numpy.std(meta_R_randomForest_avgs), k*10 + i_fold) + print('META cforest :', numpy.mean(meta_R_cforest_avgs), numpy.std(meta_R_cforest_avgs), k*10 + i_fold) + + print('Final META PARF :', numpy.mean(meta_parf_avgs), numpy.std(meta_parf_avgs)) + print('Final META randomForest:', numpy.mean(meta_R_randomForest_avgs), numpy.std(meta_R_randomForest_avgs)) + print('Final META cforest :', numpy.mean(meta_R_cforest_avgs), numpy.std(meta_R_cforest_avgs)) + + import pdb; pdb.set_trace() + print() + diff --git a/mltsp/TCP/Algorithms/count_class_names.py b/mltsp/TCP/Algorithms/count_class_names.py new file mode 100644 index 00000000..9fcb70ce --- /dev/null +++ b/mltsp/TCP/Algorithms/count_class_names.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +""" Tally the occurances of various science classes found in class_names datafile +""" +from __future__ import print_function +import os, sys +import pprint +import MySQLdb + +class tutor_db: + """ + """ + def __init__(self): + self.pars ={'tcptutor_hostname':'192.168.1.103', + 'tcptutor_username':'tutor', # guest + 'tcptutor_password':'ilove2mass', #'iamaguest', + 'tcptutor_database':'tutor', + 'tcptutor_port':3306} + + + self.tutor_db = MySQLdb.connect(host=self.pars['tcptutor_hostname'], \ + user=self.pars['tcptutor_username'], \ + passwd=self.pars['tcptutor_password'],\ + db=self.pars['tcptutor_database'],\ + port=self.pars['tcptutor_port']) + self.tutor_cursor = self.tutor_db.cursor() + +db = tutor_db() + + +lines = open('class_names').readlines() + +tally_dict = {} +for line in lines: + class_name = line.strip() + if class_name not in tally_dict: + tally_dict[class_name] = [1, class_name] + else: + tally_dict[class_name][0] += 1 + +sorted_elems = tally_dict.values() +sorted_elems.sort(reverse=True) + +for a in sorted_elems: + class_name = a[1].replace(' - ','%') + select_str = 'SELECT * FROM classes WHERE class_name like "' + class_name + '" AND class_is_active="yes" AND class_is_public="yes"' + db.tutor_cursor.execute(select_str) + results = db.tutor_cursor.fetchall() + if len(results) < 1: + select_str = 'SELECT * FROM classes WHERE class_name like "%' + class_name + '%" AND class_is_active="yes" AND class_is_public="yes"' + db.tutor_cursor.execute(select_str) + results = db.tutor_cursor.fetchall() + if len(results) < 1: + select_str = 'SELECT * FROM classes WHERE class_name like "' + class_name + '" AND class_is_active="yes" AND class_is_public="no"' + db.tutor_cursor.execute(select_str) + results = db.tutor_cursor.fetchall() + try: + print("%4d %35s http://dotastro.org/lightcurves/class.php?Class_ID=%d " % (a[0], a[1], int(results[0][0]))) + except: + print("!!!", len(results), class_name) + + +""" +Num sources science class URL to description, class heirarchy +----------- ------------- ----------------------------------- +1048 Classical Cepheid http://dotastro.org/lightcurves/class.php?Class_ID=238 + 889 W Ursae Majoris - W UMa http://dotastro.org/lightcurves/class.php?Class_ID=85 + 515 Beta Persei http://dotastro.org/lightcurves/class.php?Class_ID=253 + 240 Beta Lyrae http://dotastro.org/lightcurves/class.php?Class_ID=251 + 223 Type Ia Supernovae http://dotastro.org/lightcurves/class.php?Class_ID=182 + 189 RR Lyrae, Fundamental Mode http://dotastro.org/lightcurves/class.php?Class_ID=218 + 150 Delta Scuti http://dotastro.org/lightcurves/class.php?Class_ID=211 + 121 W Ursae Majoris http://dotastro.org/lightcurves/class.php?Class_ID=252 + 113 Mira http://dotastro.org/lightcurves/class.php?Class_ID=208 + 110 RR Lyrae, Double Mode http://dotastro.org/lightcurves/class.php?Class_ID=220 + 110 Pulsating Variable http://dotastro.org/lightcurves/class.php?Class_ID=203 + 107 Multiple Mode Cepheid http://dotastro.org/lightcurves/class.php?Class_ID=237 + 63 Microlensing Event http://dotastro.org/lightcurves/class.php?Class_ID=145 + 50 RR Lyrae, First Overtone http://dotastro.org/lightcurves/class.php?Class_ID=219 + 48 Binary http://dotastro.org/lightcurves/class.php?Class_ID=248 + 34 Semiregular Pulsating Variable http://dotastro.org/lightcurves/class.php?Class_ID=214 + 32 Wolf-Rayet http://dotastro.org/lightcurves/class.php?Class_ID=192 + 32 Long Period (W Virginis) http://dotastro.org/lightcurves/class.php?Class_ID=235 + 31 RR Lyrae - Asymmetric http://dotastro.org/lightcurves/class.php?Class_ID=43 + 31 Beta Cephei http://dotastro.org/lightcurves/class.php?Class_ID=213 + 27 Cataclysmic Variable http://dotastro.org/lightcurves/class.php?Class_ID=157 + 26 Gamma Doradus http://dotastro.org/lightcurves/class.php?Class_ID=204 + 17 Population II Cepheid http://dotastro.org/lightcurves/class.php?Class_ID=216 + 16 RR Lyrae http://dotastro.org/lightcurves/class.php?Class_ID=206 + 16 BL Lac http://dotastro.org/lightcurves/class.php?Class_ID=139 + 15 T Tauri http://dotastro.org/lightcurves/class.php?Class_ID=200 + 15 RR Lyrae - First Overtone http://dotastro.org/lightcurves/class.php?Class_ID=219 + 14 Short period (BL Herculis) http://dotastro.org/lightcurves/class.php?Class_ID=234 + 14 Semiregular Pulsating Red Giants http://dotastro.org/lightcurves/class.php?Class_ID=134 + 14 SX Phoenicis http://dotastro.org/lightcurves/class.php?Class_ID=205 + 13 RR Lyrae, Closely Spaced Modes http://dotastro.org/lightcurves/class.php?Class_ID=222 + 13 Lambda Bootis Variable http://dotastro.org/lightcurves/class.php?Class_ID=261 + 13 Ellipsoidal http://dotastro.org/lightcurves/class.php?Class_ID=246 + 10 Blazar http://dotastro.org/lightcurves/class.php?Class_ID=256 + 9 Herbig AE/BE Star http://dotastro.org/lightcurves/class.php?Class_ID=197 + 7 X Ray Binary http://dotastro.org/lightcurves/class.php?Class_ID=260 + 6 RV Tauri http://dotastro.org/lightcurves/class.php?Class_ID=215 + 6 Anomolous Cepheid http://dotastro.org/lightcurves/class.php?Class_ID=236 + 5 S Doradus http://dotastro.org/lightcurves/class.php?Class_ID=191 + 3 Variable Stars [Alt] http://dotastro.org/lightcurves/class.php?Class_ID=154 + 3 Flat Spectrum Radio Quasar http://dotastro.org/lightcurves/class.php?Class_ID=265 + 2 Type II Supernovae http://dotastro.org/lightcurves/class.php?Class_ID=185 + 2 Systems with Planets http://dotastro.org/lightcurves/class.php?Class_ID=254 + 2 Supernovae http://dotastro.org/lightcurves/class.php?Class_ID=180 + 1 SX Phoenicis - Pulsating Subdwarfs http://dotastro.org/lightcurves/class.php?Class_ID=53 + 1 SU Ursae Majoris http://dotastro.org/lightcurves/class.php?Class_ID=169 + 1 SRd http://dotastro.org/lightcurves/class.php?Class_ID=231 + 1 Rotating Variable http://dotastro.org/lightcurves/class.php?Class_ID=240 + 1 AM Herculis (True Polar) http://dotastro.org/lightcurves/class.php?Class_ID=166 +""" diff --git a/mltsp/TCP/Algorithms/cp_noise_files.py b/mltsp/TCP/Algorithms/cp_noise_files.py new file mode 100644 index 00000000..26c6a132 --- /dev/null +++ b/mltsp/TCP/Algorithms/cp_noise_files.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python +""" scps noise trained weka .model files neede for classification +""" +from __future__ import print_function + +import sys, os +import glob + +client_defs = [ \ + {'name':'__local__', + 'hostname':'127.0.0.1', + 'furl_dirpath':'/home/pteluser/.ipython/security', + 'username':'pteluser', + 'ssh_port':22, + 'n_engines':10}, + {'name':'__worms2__', + 'hostname':'localhost', + 'furl_dirpath':'/home/starr/.ipython/security', + 'username':'starr', + 'ssh_port':32151, + 'n_engines':0}, + {'name':'__cch1__', + 'hostname':'localhost', + 'furl_dirpath':'/home/dstarr/.ipython/security', + 'username':'dstarr', + 'nice':19, + 'ssh_port':32161, + 'n_engines':1}, + ] + +""" + {'name':'__trans1__', + 'hostname':'192.168.1.45', + 'furl_dirpath':'/home/pteluser/.ipython/security', + 'username':'pteluser', + 'ssh_port':22, + 'n_engines':0}, + {'name':'__trans2__', + 'hostname':'192.168.1.55', + 'furl_dirpath':'/home/pteluser/.ipython/security', + 'username':'pteluser', + 'ssh_port':22, + 'n_engines':0}, + {'name':'__trans3__', + 'hostname':'192.168.1.65', + 'furl_dirpath':'/home/pteluser/.ipython/security', + 'username':'pteluser', + 'ssh_port':22, + 'n_engines':0}, + {'name':'__sgn02__', + 'hostname':'sgn02.nersc.gov', + 'furl_dirpath':'/global/homes/d/dstarr/datatran/.ipython/security', + 'username':'dstarr', + 'ssh_port':22, + 'n_engines':0}, +""" + +def send_to_other_nodes(glob_mask, dirnames, client_defs): + """ send files on this computer to other node computers. + """ + + for client_def in client_defs: + if client_def['name'] == '__local__': + continue + for dirname in dirnames: + exec_str = "ssh -tp %d %s@%s mkdir scratch/Noisification/%s" % ( \ + client_def['ssh_port'], + client_def['username'], + client_def['hostname'], + dirname) + os.system(exec_str) + + exec_str = "scp -CP %d ~/scratch/Noisification/%s/*arff %s@%s:scratch/Noisification/%s/" % ( \ + client_def['ssh_port'], + dirname, + client_def['username'], + client_def['hostname'], + dirname) + os.system(exec_str) + + exec_str = "scp -CP %d ~/scratch/Noisification/%s/*model %s@%s:scratch/Noisification/%s/" % ( \ + client_def['ssh_port'], + dirname, + client_def['username'], + client_def['hostname'], + dirname) + os.system(exec_str) + + +def retrieve_from_other_node(glob_mask, dirnames, retrieve_host_dict): + """ copy files to this node from other nodes. + """ + # will do an scp to ~/scratch/Noisification/ files: scratch/Noisification/*glob_mask*/*arff *model + + for dirname in dirnames: + exec_str = "mkdir -p ~/scratch/Noisification/%s" % (dirname) + os.system(exec_str) + + exec_str = "scp -CP %d %s@%s:scratch/Noisification/%s/{*arff,*model} ~/scratch/Noisification/%s/" % ( \ + retrieve_host_dict['ssh_port'], + retrieve_host_dict['username'], + retrieve_host_dict['hostname'], + dirname, + dirname) + print(exec_str) + os.system(exec_str) + + + +if __name__ == '__main__': + + #glob_mask = sys.argv[1] # eg: 50nois_*short1 + glob_mask = "50nois_*qk17.9" + dirnames = glob.glob(glob_mask) + + #send_to_other_nodes(glob_mask, dirnames, client_defs) + + retrieve_host_dict = \ + {'name':'__cch1__', + 'hostname':'localhost', + 'furl_dirpath':'/home/dstarr/.ipython/security', + 'username':'dstarr', + 'nice':19, + 'ssh_port':32161, + 'n_engines':1} + + dirnames = ['20nois_19epch_040need_0.050mtrc_j48_17.9', + '20nois_15epch_040need_0.050mtrc_j48_17.9', + '20nois_11epch_040need_0.050mtrc_j48_17.9', + '20nois_21epch_040need_0.050mtrc_j48_17.9', + '20nois_25epch_040need_0.050mtrc_j48_17.9', + '20nois_29epch_040need_0.050mtrc_j48_17.9', + '20nois_17epch_040need_0.050mtrc_j48_17.9', + '20nois_13epch_040need_0.050mtrc_j48_17.9', + '20nois_20epch_040need_0.050mtrc_j48_17.9', + '20nois_27epch_040need_0.050mtrc_j48_17.9', + '20nois_23epch_040need_0.050mtrc_j48_17.9', + '20nois_09epch_040need_0.050mtrc_j48_17.9', + '20nois_10epch_040need_0.050mtrc_j48_17.9', + '20nois_33epch_040need_0.050mtrc_j48_17.9'] + + retrieve_from_other_node(glob_mask, dirnames, retrieve_host_dict) diff --git a/mltsp/TCP/Algorithms/debosscher_vosourcexml_copy.sh b/mltsp/TCP/Algorithms/debosscher_vosourcexml_copy.sh new file mode 100755 index 00000000..53eaeb77 --- /dev/null +++ b/mltsp/TCP/Algorithms/debosscher_vosourcexml_copy.sh @@ -0,0 +1,1393 @@ +#!/bin/sh +cp /home/pteluser/scratch/vosource_xml_writedir/100148010.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148011.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148012.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148013.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148014.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148015.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148016.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148017.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148018.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148019.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148020.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148021.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148022.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148023.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148024.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148025.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148026.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148027.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148028.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148029.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148030.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148031.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148032.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148033.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148034.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148035.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148036.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148037.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148038.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148039.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148040.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148041.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148042.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148043.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148044.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148045.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148046.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148047.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148048.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148049.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148050.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148051.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148052.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148053.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148054.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148055.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148056.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148057.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148058.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148059.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148060.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148061.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148062.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148063.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148064.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148065.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148066.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148067.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148068.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148069.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148070.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148071.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148072.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148073.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148074.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148075.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148076.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148077.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148078.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148079.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148080.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148081.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148082.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148083.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148084.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148085.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148086.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148087.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148088.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148089.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148090.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148091.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148092.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148093.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148094.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148095.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148096.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148097.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148098.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148099.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148100.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148101.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148102.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148103.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148104.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148105.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148106.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148107.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148108.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148109.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148110.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148111.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148112.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148113.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148114.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148115.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148116.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148117.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148118.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148119.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148120.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148121.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148122.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148123.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148124.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148125.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148126.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148127.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148128.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148129.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148130.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148131.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148132.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148133.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148134.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148135.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148136.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148137.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148138.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148139.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148140.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148141.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148142.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148143.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148144.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148145.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148146.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148147.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148148.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148149.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148150.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148151.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148152.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148153.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148154.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148155.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148156.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148157.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148158.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148159.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148160.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148161.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148162.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148163.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148164.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148165.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148166.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148167.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148168.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148169.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148170.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148171.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148172.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148173.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148174.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148175.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148176.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148177.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148178.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148179.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148180.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148181.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148182.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148183.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148184.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148185.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148186.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148187.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148188.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148189.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148190.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148191.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148192.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148193.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148194.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148195.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148196.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148197.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148198.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148199.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148200.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148201.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148202.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148203.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148204.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148205.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148206.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148207.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148208.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148209.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148210.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148211.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148212.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148213.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148214.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148215.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148216.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148217.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148218.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148219.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148220.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148221.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148222.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148223.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148224.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148225.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148226.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148227.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148228.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148229.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148230.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148231.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148232.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148233.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148234.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148235.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148236.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148237.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148238.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148239.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148240.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148241.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148242.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148243.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148244.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148245.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148246.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148247.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148248.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148249.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148250.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148251.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148252.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148253.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148254.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148255.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148256.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148257.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148258.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148259.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148260.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148261.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148262.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148263.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148264.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148265.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148266.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148267.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148268.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148269.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148270.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148271.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148272.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148273.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148274.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148275.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148276.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148277.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148278.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148279.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148280.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148281.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148282.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148283.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148284.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148285.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148286.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148287.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148288.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148289.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148290.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148291.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148292.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148293.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148294.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148295.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148296.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148297.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148298.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148299.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148300.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148301.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148302.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148303.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148304.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148305.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148306.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148307.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148308.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148309.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148310.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148311.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148312.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148313.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148314.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148315.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148316.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148317.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148318.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148319.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148320.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148321.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148322.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148323.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148324.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148325.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148326.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148327.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148328.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148329.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148330.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148331.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148332.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148333.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148334.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148335.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148336.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148337.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148338.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148339.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148340.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148341.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148342.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148343.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148344.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148345.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148346.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148347.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148348.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148349.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148350.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148351.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148352.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148353.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148354.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148355.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148356.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148357.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148358.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148359.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148360.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148361.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148362.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148363.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148364.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148365.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148366.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148367.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148368.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148369.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148370.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148371.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148372.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148373.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148374.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148375.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148376.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148377.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148378.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148379.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148380.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148381.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148382.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148383.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148384.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148385.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148386.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148387.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148388.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148389.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148390.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148391.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148392.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148393.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148394.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148395.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148396.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148397.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148398.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148399.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148400.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148401.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148402.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148403.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148404.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148405.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148406.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148407.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148408.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148409.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148410.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148411.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148412.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148413.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148414.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148415.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148416.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148417.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148418.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148419.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148420.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148421.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148422.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148423.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148424.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148425.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148426.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148427.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148428.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148429.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148430.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148431.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148432.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148433.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148434.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148435.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148436.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148437.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148438.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148439.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148440.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148441.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148442.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148443.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148444.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148445.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148446.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148447.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148448.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148449.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148450.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148451.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148452.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148453.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148454.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148455.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148456.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148457.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148458.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148459.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148460.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148461.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148462.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148463.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148464.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148465.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148466.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148467.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148468.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148469.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148470.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148471.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148472.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148473.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148474.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148475.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148476.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148477.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148478.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148479.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148480.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148481.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148482.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148483.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148484.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148485.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148486.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148487.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148488.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148489.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148490.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148491.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148492.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148493.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148494.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148495.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148496.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148497.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148498.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148499.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148500.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148501.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148502.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148503.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148504.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148505.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148506.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148507.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148508.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148509.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148510.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148511.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148512.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148513.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148514.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148515.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148516.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148517.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148518.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148519.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148520.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148521.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148522.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148523.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148524.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148525.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148526.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148527.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148528.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148529.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148530.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148531.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148532.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148533.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148534.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148535.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148536.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148537.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148538.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148539.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148540.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148541.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148542.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148543.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148544.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148545.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148546.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148547.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148548.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148549.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148550.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148551.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148552.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148553.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148554.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148555.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148556.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148557.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148558.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148559.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148560.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148561.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148562.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148563.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148564.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148565.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148566.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148567.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148568.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148569.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148570.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148571.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148572.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148573.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148574.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148575.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148576.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148577.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148578.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148579.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148580.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148581.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148582.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148583.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148584.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148585.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148586.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148587.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148588.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148589.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148590.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148591.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148592.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148593.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148594.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148595.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148596.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148597.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148598.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148599.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148600.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148601.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148602.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148603.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148604.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148605.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148606.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148607.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148608.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148609.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148610.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148611.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148612.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148613.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148614.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148615.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148616.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148617.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148618.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148619.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148620.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148621.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148622.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148623.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148624.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148625.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148626.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148627.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148628.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148629.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148630.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148631.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148632.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148633.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148634.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148635.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148636.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148637.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148638.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148639.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148640.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148641.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148642.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148643.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148644.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148645.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148646.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148647.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148648.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148649.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148650.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148651.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148652.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148653.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148654.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148655.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148656.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148657.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148658.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148659.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148660.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148661.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148662.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148663.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148664.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148665.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148666.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148667.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148668.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148669.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148670.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148671.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148672.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148673.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148674.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148675.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148676.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148677.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148678.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148679.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148680.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148681.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148682.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148683.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148684.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148685.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148686.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148687.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148688.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148689.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148690.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148691.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148692.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148693.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148694.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148695.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148696.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148697.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148698.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148699.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148700.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148701.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148702.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148703.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148704.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148705.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148706.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148707.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148708.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148709.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148710.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148711.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148712.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148713.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148714.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148715.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148716.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148717.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148718.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148719.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148720.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148721.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148722.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148723.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148724.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148725.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148726.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148727.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148728.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148729.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148730.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148731.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148732.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148733.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148734.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148735.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148736.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148737.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148738.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148739.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148740.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148741.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148742.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148743.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148744.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148745.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148746.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148747.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148748.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148749.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148750.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148751.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148752.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148753.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148754.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148755.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148756.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148757.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148758.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148759.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148760.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148761.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148762.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148763.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148764.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148765.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148766.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148767.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148768.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148769.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148770.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148771.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148772.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148773.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148774.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148775.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148776.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148777.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148778.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148779.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148780.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148781.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148782.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148783.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148784.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148785.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148786.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148787.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148788.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148789.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148790.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148791.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148792.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148793.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148794.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148795.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148796.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148797.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148798.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148799.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148800.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148801.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148802.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148803.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148804.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148805.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148806.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148807.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148808.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148809.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148810.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148811.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148812.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148813.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148814.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148815.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148816.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148817.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148818.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148819.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148820.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148821.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148822.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148823.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148824.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148825.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148826.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148827.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148828.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148829.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148830.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148831.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148832.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148833.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148834.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148835.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148836.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148837.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148838.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148839.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148840.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148841.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148842.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148843.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148844.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148845.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148846.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148847.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148848.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148849.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148850.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148851.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148852.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148853.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148854.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148855.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148856.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148857.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148858.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148859.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148860.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148861.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148862.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148863.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148864.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148865.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148866.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148867.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148868.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148869.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148870.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148871.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148872.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148873.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148874.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148875.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148876.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148877.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148878.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148879.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148880.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148881.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148882.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148883.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148884.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148885.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148886.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148887.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148888.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148889.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148890.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148891.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148892.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148893.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148894.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148895.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148896.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148897.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148898.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148899.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148900.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148901.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148902.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148903.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148904.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148905.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148906.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148907.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148908.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148909.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148910.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148911.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148912.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148913.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148914.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148915.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148916.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148917.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148918.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148919.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148920.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148921.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148922.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148923.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148924.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148925.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148926.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148927.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148928.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148929.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148930.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148931.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148932.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148933.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148934.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148935.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148936.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148937.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148938.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148939.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148940.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148941.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148942.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148943.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148944.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148945.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148946.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148947.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148948.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148949.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148950.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148951.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148952.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148953.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148954.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148955.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148956.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148957.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148958.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148959.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148960.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148961.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148962.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148963.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148964.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148965.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148966.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148967.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148968.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148969.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148970.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148971.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148972.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148973.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148974.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148975.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148976.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148977.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148978.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148979.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148980.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148981.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148982.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148983.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148984.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148985.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148986.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148987.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148988.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148989.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148990.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148991.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148992.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148993.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148994.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148995.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148996.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148997.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148998.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100148999.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149000.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149001.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149002.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149003.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149004.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149005.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149006.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149007.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149008.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149009.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149010.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149011.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149012.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149013.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149014.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149015.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149016.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149017.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149018.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149019.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149020.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149021.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149022.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149023.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149024.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149025.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149026.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149027.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149028.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149029.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149030.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149031.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149032.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149033.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149034.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149035.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149036.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149037.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149038.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149039.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149040.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149041.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149042.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149043.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149044.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149045.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149046.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149047.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149048.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149049.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149050.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149051.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149052.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149053.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149054.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149055.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149056.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149057.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149058.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149059.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149060.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149061.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149062.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149063.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149064.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149065.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149066.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149067.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149068.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149069.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149070.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149071.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149072.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149073.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149074.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149075.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149076.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149077.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149078.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149079.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149080.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149081.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149082.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149083.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149084.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149085.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149086.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149087.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149088.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149089.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149090.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149091.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149092.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149093.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149094.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149095.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149096.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149097.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149098.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149099.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149100.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149101.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149102.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149103.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149104.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149105.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149106.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149107.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149108.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149109.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149110.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149111.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149112.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149113.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149114.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149115.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149116.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149117.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149118.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149119.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149120.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149121.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149122.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149123.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149124.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149125.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149126.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149127.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149128.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149129.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149130.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149131.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149132.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149133.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149134.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149135.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149136.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149137.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149138.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149139.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149140.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149141.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149142.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149143.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149144.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149145.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149146.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149147.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149148.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149149.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149150.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149151.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149152.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149153.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149154.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149155.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149156.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149157.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149158.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149159.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149160.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149161.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149162.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149163.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149164.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149165.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149166.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149167.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149168.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149169.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149170.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149171.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149172.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149173.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149174.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149175.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149176.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149177.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149178.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149179.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149180.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149181.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149182.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149183.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149184.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149185.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149186.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149187.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149188.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149189.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149190.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149191.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149192.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149193.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149194.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149195.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149196.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149197.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149198.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149199.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149200.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149201.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149202.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149203.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149204.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149205.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149206.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149207.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149208.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149209.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149210.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149211.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149212.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149213.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149214.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149215.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149216.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149217.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149218.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149219.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149220.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149221.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149222.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149223.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149224.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149225.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149226.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149227.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149228.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149229.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149230.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149231.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149232.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149233.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149234.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149235.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149236.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149237.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149238.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149239.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149240.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149241.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149242.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149243.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149244.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149245.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149246.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149247.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149248.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149249.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149250.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149251.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149252.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149253.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149254.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149255.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149256.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149257.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149258.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149259.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149260.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149261.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149262.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149263.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149264.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149265.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149266.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149267.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149268.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149269.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149270.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149271.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149272.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149273.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149274.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149275.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149276.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149277.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149278.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149279.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149280.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149281.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149282.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149283.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149284.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149285.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149286.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149287.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149288.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149289.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149290.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149291.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149292.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149293.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149294.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149295.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149296.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149297.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149298.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149299.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149300.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149301.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149302.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149303.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149304.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149305.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149306.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149307.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149308.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149309.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149310.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149311.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149312.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149313.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149314.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149315.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149316.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149317.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149318.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149319.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149320.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149321.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149322.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149323.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149324.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149325.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149326.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149327.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149328.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149329.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149330.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149331.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149332.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149333.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149334.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149335.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149336.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149337.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149338.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149339.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149340.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149341.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149342.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149343.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149344.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149345.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149346.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149347.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149348.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149349.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149350.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149351.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149352.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149353.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149354.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149355.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149356.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149357.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149358.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149359.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149360.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149361.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149362.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149363.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149364.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149365.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149366.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149367.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149368.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149369.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149370.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149371.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149372.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149373.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149374.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149375.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149376.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149377.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149378.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149379.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149380.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149381.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149382.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149383.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149384.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149385.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149386.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149387.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100149388.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161326.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161327.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161328.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161329.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161330.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161331.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161332.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161333.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161334.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161335.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161336.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161337.xml ./ +cp /home/pteluser/scratch/vosource_xml_writedir/100161338.xml ./ diff --git a/mltsp/TCP/Algorithms/do_qsoy.py b/mltsp/TCP/Algorithms/do_qsoy.py new file mode 100644 index 00000000..9cac7256 --- /dev/null +++ b/mltsp/TCP/Algorithms/do_qsoy.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +""" Nat wrote 20100930, dstarr to adapt as a TCP feature. +""" +from __future__ import print_function +from __future__ import absolute_import +from numpy import median,loadtxt +from .qso_fit import qso_fit +import glob + +if __name__ == '__main__': + + #files=glob.glob('*.dat') + files=['/home/pteluser/scratch/100149386.dat'] + for file in files: + id = file[file.rfind('/'):] + (x,y,dy) = loadtxt(file,unpack=True) + + y0 = 19. + y -= median(y) - y0 + od = qso_fit(x,y,dy,filter='g') + res = od['chi2_qso/nu'],od['chi2_qso/nu_NULL'] + + # QSO-like: res[0]<~2 + # non-QSO: res[1]/res[0]<~2 + + print(("%s %f %f") % (id,res[0],res[1]/res[0])) + import pprint + pprint.pprint(od) diff --git a/mltsp/TCP/Algorithms/evaluate_eclipsing_classifs_using_fiteb.py b/mltsp/TCP/Algorithms/evaluate_eclipsing_classifs_using_fiteb.py new file mode 100644 index 00000000..f607e33b --- /dev/null +++ b/mltsp/TCP/Algorithms/evaluate_eclipsing_classifs_using_fiteb.py @@ -0,0 +1,1480 @@ +#!/usr/bin/env python +""" +Using JSB's fiteb.py, found at: + wget http://commondatastorage.googleapis.com/bloom_code/jsb_eb_fit_v12may2011.tgz + +This code fits eclipsing models in order to determine which type of eclipsing class a TUTOR source is. + +""" +from __future__ import print_function +from __future__ import absolute_import + +import sys, os +import MySQLdb +import glob +from numpy import loadtxt +import numpy +import matplotlib.pyplot as pyplot + +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + 'Software/ingest_tools')) +from activelearn_utils import Database_Utils + +sys.path.append(os.path.abspath(os.environ.get("HOME") + '/src/install/jsb_eb_fit')) +from . import fiteb + +import pprint +import copy +import cPickle +import datetime +import time + +class IPython_Task_Administrator: + """ Send of Imputation tasks + + Adapted from activelearn_utils.py which was + adapted from generate_weka_classifiers.py:Parallel_Arff_Maker() + + """ + def __init__(self, pars={}): + try: + from IPython.kernel import client + except: + pass + + self.kernel_client = client + + self.pars = pars + # TODO: - initialize ipython modules + self.mec = client.MultiEngineClient() + #self.mec.reset(targets=self.mec.get_ids()) # Reset the namespaces of all engines + self.tc = client.TaskClient() + self.task_id_list = [] + + #### 2011-01-21 added: + self.mec.reset(targets=self.mec.get_ids()) + self.mec.clear_queue() + self.mec.clear_pending_results() + self.tc.task_controller.clear() + + + def initialize_clients(self, mec_str): + """ Instantiate ipython1 clients, import all module dependencies. + """ + #task_str = """cat = os.getpid()""" + #taskid = self.tc.run(client.StringTask(task_str, pull="cat")) + #time.sleep(2) + #print self.tc.get_task_result(taskid, block=False).results + + # 20090815(before): a = arffify.Maker(search=[], skip_class=False, local_xmls=True, convert_class_abrvs_to_names=False, flag_retrieve_class_abrvs_from_TUTOR=True, dorun=False) + import time + + self.mec.execute(mec_str) + time.sleep(2) # This may be needed. + + ### testing: + #task_str = """cat = os.getpid()""" + #taskid = self.tc.run(client.StringTask(task_str, pull="cat")) + #time.sleep(1) + #print self.tc.get_task_result(taskid, block=False).results + + + +class Run_FitEB_Parallel: + """ Do the equivalent of run_fiteb_generate_html_pkl() in parallel. + """ + + def __init__(self): + self.pars = {'tutor_hostname':'192.168.1.103', + 'tutor_username':'dstarr', #'tutor', # guest + 'tutor_password':'ilove2mass', #'iamaguest', + 'tutor_database':'tutor', + 'tutor_port':3306, #33306, + 'tcp_hostname':'192.168.1.25', + 'tcp_username':'pteluser', + 'tcp_port': 3306, #23306, + 'tcp_database':'source_test_db', + 'pkl_fpath':os.path.abspath(os.environ.get("HOME") + '/scratch/evaluate_eclipsing_classifs_using_fiteb__dict.pkl'), + 'fiteb_class_lookup':{'contact':'y. W Ursae Maj.', + 'detached':'w. Beta Persei', + 'semi-detached':'x. Beta Lyrae'}, + 'analysis_params':['chisq', 'i_err', 'q_err', 'l1/l2_err', 'l1/l2', 'q', 'r1', 'r2', 'reflect1'], + 'al_dirpath':os.path.abspath(os.environ.get("TCP_DIR") + 'Data/allstars'), + 'al_glob_str':'AL_*_*.dat', + 'classids_of_interest':[251,#'x. Beta Lyrae', + 253,#'w. Beta Persei', + 252,#'y. W Ursae Maj.', + ], + 'fittype':4, + 'skip_list':[234996, 164830, 164872, 239309, 216110, 225745], + } + + + def client_setup(self, class_id_name={}): + """ Routines for setting up params, database connections for ipython client + """ + + #orig_cwd = os.getcwd() + os.chdir(os.path.abspath(os.environ.get("HOME") + '/src/install/jsb_eb_fit')) + + if len(class_id_name) == 0: + self.DatabaseUtils = Database_Utils(pars=self.pars) + rclass_tutorid_lookup = self.DatabaseUtils.retrieve_tutor_class_ids() + self.class_id_name = dict([[v,k] for k,v in rclass_tutorid_lookup.items()]) + else: + self.class_id_name = class_id_name + + + def client_task(self): + """ Computation task which is to be run on Ipython engines. + """ + pass + + + def add_task(self, srcid=None, period=None, fittype=None, filename=None, classid=None): + """ + """ + tc_exec_str = """ +try: + (alt_rez, rez) = fiteb.period_select(idd=int(srcid), + per=period, + plot=False, + use_xml=True, + try_alt=True, + dosave=False, + show=False, + fittype=fittype) + out_dict = {'alt_rez':alt_rez, + 'rez':rez, + 'srcid':srcid, + 'traceback':"", + 'filename':filename, + 'classid':classid} +except: + out_dict = {'traceback':traceback.format_exc(), + 'srcid':srcid} + """ + tc_exec_str__test = """ +out_dict = {'alt_rez':fiteb.__author__} + """ + task_id = self.ipy_tasks.tc.run(self.ipy_tasks.kernel_client.StringTask(tc_exec_str, + push={'srcid':srcid, + 'period':period, + 'fittype':fittype, + 'filename':filename, + 'classid':classid, + }, + pull='out_dict', + retries=3)) + #print self.ipy_tasks.tc.get_task_result(task_id, block=False) + #import pdb; pdb.set_trace() + #print + self.ipy_tasks.task_id_list.append(task_id) + + + + def ipython_master(self): + """ + """ + self.ipy_tasks = IPython_Task_Administrator() + self.client_setup() # Needed here to make database connections + + mec_str = """ +import sys, os +import MySQLdb +import glob +from numpy import loadtxt +import numpy +import matplotlib.pyplot as pyplot + +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + 'Software/ingest_tools')) +from activelearn_utils import Database_Utils + +sys.path.append(os.path.abspath(os.environ.get("HOME") + '/src/install/jsb_eb_fit')) +import fiteb + +import pprint +import copy +import cPickle +import traceback + +sys.path.append(os.environ.get('TCP_DIR') + '/Algorithms') +import evaluate_eclipsing_classifs_using_fiteb +RunFitEBParallel = evaluate_eclipsing_classifs_using_fiteb.Run_FitEB_Parallel() +RunFitEBParallel.client_setup(class_id_name=%s) +""" % (str(self.class_id_name)) + self.ipy_tasks.initialize_clients(mec_str=mec_str) + + fpaths = glob.glob("%s/%s" % (self.pars['al_dirpath'], self.pars['al_glob_str'])) + + pickle_dict = {} + + fp = open(os.path.abspath(os.environ.get("HOME") + '/scratch/evaluate_eclipsing_classifs.html'),'w') + fp.write(""" + + """) + + ########### AL*dat sources: + if 1: + for fpath in fpaths: + tup_list = loadtxt(fpath, + dtype={'names': ('src_id', 'class_id'), + 'formats': ('i4', 'i4')}, + usecols=(0,1), + unpack=False) + srcid_list = tup_list['src_id'] + classid_list = tup_list['class_id'] + for i, classid in enumerate(classid_list): + ### NOTE: i corresponds to classid and srcid_list[i] + if classid not in self.pars['classids_of_interest']: + continue + srcid = srcid_list[i] + if int(srcid) in self.pars['skip_list']: + continue + print("srcid:", srcid) + select_str = "SELECT feat_val FROM source_test_db.feat_values JOIN feat_lookup USING (feat_id) WHERE filter_id=8 AND feat_name='freq1_harmonics_freq_0' AND src_id=%d" % (srcid + 100000000) + self.DatabaseUtils.tcp_cursor.execute(select_str) + results = self.DatabaseUtils.tcp_cursor.fetchall() + if len(results) == 0: + raise "Error" + period = 1. / results[0][0] + + if 0: + ### For single-thread testing only: + RunFitEBParallel = Run_FitEB_Parallel() + RunFitEBParallel.client_setup() + (alt_rez, rez) = fiteb.period_select(idd=int(srcid), + per=period, + plot=True, + use_xml=True, + try_alt=True, + dosave=True, + show=False, + fittype=self.pars['fittype']) #) #True,#verbose=False) + import pdb; pdb.set_trace() + print() + + self.add_task(srcid=srcid, + period=period, + fittype=self.pars['fittype'], + filename=fpath[fpath.rfind('/')+1:], + classid=classid) + + ######### Debosscher sources using TUTOR database query: + select_str = "select source_id, class_id from sources where project_id = 123" + self.DatabaseUtils.tutor_cursor.execute(select_str) + results = self.DatabaseUtils.tutor_cursor.fetchall() + if len(results) == 0: + raise "Error" + for row in results: + (srcid, classid) = row + if classid in self.pars['classids_of_interest']: + if int(srcid) in self.pars['skip_list']: + continue + print("22222222", srcid) + + select_str = "SELECT feat_val FROM source_test_db.feat_values JOIN feat_lookup USING (feat_id) WHERE filter_id=8 AND feat_name='freq1_harmonics_freq_0' AND src_id=%d" % (srcid + 100000000) + self.DatabaseUtils.tcp_cursor.execute(select_str) + results = self.DatabaseUtils.tcp_cursor.fetchall() + if len(results) == 0: + raise "Error" + period = 1. / results[0][0] + + self.add_task(srcid=srcid, + period=period, + fittype=self.pars['fittype'], + filename="Debosscher", + classid=classid) + + ######### + #import pdb; pdb.set_trace() + #print + + task_id_list = self.ipy_tasks.task_id_list + tc = self.ipy_tasks.tc + + dtime_pending_1 = None + while ((tc.queue_status()['scheduled'] > 0) or + (tc.queue_status()['pending'] > 0)): + tasks_to_pop = [] + for task_id in self.ipy_tasks.task_id_list: + temp = self.ipy_tasks.tc.get_task_result(task_id, block=False) + if temp is None: + continue + temp2 = temp.results + if temp2 is None: + continue + results = temp['out_dict'] + if len(results.get('traceback',"")) > 0: + print("Task Traceback:", results.get('srcid',""), results.get('traceback',"")) + continue + tasks_to_pop.append(task_id) + srcid = results['srcid'] + rez = results['rez'] + alt_rez = results['alt_rez'] + filename = results['filename'] + classid = results['classid'] + fp.write('\n' % \ + (srcid, srcid, srcid, filename, self.class_id_name[classid], pars['fiteb_class_lookup'].get(rez.get('class',None),'unknown'), str(rez.get('okfit',False)), + rez.get('chisq',False) if rez.get('chisq',99999) is not None else 99999, + rez.get('e',False), + rez.get('i',99999), + rez.get('i_err',99999) if rez.get('i_err',99999) is not None else 99999, + rez.get('q',99999), + rez.get('q_err',99999) if rez.get('q_err',99999) is not None else 99999, + rez.get('l1/l2',99999), + rez.get('l1/l2_err',99999) if rez.get('l1/l2_err',99999) is not None else 99999, + str(rez.get('reflect1',99999) if rez.get('reflect1',99999) is not None else 99999), + str(rez.get('reflect2',99999) if rez.get('reflect2',99999) is not None else 99999), + )) + fp.flush() + pickle_dict[srcid] = rez + pickle_dict[srcid].update({'file':filename, + 'tutor_class':self.class_id_name[classid], + 'fiteb_class':pars['fiteb_class_lookup'].get(rez.get('class',None),'unknown'), + 'okfit':rez.get('okfit',False), + 'chisq':rez.get('chisq',False), + 'chisq_percentiles':alt_rez.get('chisq_percentiles',{}), + 'e_percentiles':alt_rez.get('e_percentiles',{}), + 'i_err_percentiles':alt_rez.get('i_err_percentiles',{}), + 'l1/l2_err_percentiles':alt_rez.get('l1/l2_err_percentiles',{}), + 'l1/l2_percentiles':alt_rez.get('l1/l2_percentiles',{}), + 'l1_percentiles':alt_rez.get('l1_percentiles',{}), + 'l2_percentiles':alt_rez.get('l2_percentiles',{}), + 'omega_deg_percentiles':alt_rez.get('omega_deg_percentiles',{}), + 'primary_eclipse_phase_percentiles':alt_rez.get('primary_eclipse_phase_percentiles',{}), + 'period_percentiles':alt_rez.get('period_percentiles',{}), + 'ratiopass_for_percentile':alt_rez.get('ratiopass_for_percentile',{}), + 'vals_for_percentile':alt_rez.get('vals_for_percentile',{}), + 'nmodels':alt_rez.get('nmodels',{}), + 'q_err_percentiles':alt_rez.get('q_err_percentiles',{}), + 'q_percentiles':alt_rez.get('q_percentiles',{}), + 'r1_percentiles':alt_rez.get('r1_percentiles',{}), + 'r2_percentiles':alt_rez.get('r2_percentiles',{}), + 'reflect1_percentiles':alt_rez.get('reflect1_percentiles',{}), + 'reflect2_percentiles':alt_rez.get('reflect2_percentiles',{}), + 'e':rez.get('e',False), + 'i':rez.get('i',99999), + 'i_err':rez.get('i_err',99999), + 'q':rez.get('q',99999), + 'q_err':rez.get('q_err',99999) if rez.get('q_err',99999) is not None else 99999, + 'l1/l2':rez.get('l1/l2',99999), + 'l1/l2_err':rez.get('l1/l2_err',99999) if rez.get('l1/l2_err',99999) is not None else 99999, + 'reflect1':rez.get('reflect1',99999) if rez.get('reflect1',99999) is not None else 99999, + 'reflect2':rez.get('reflect2',99999) if rez.get('reflect2',99999) is not None else 99999, + }) + #import pdb; pdb.set_trace() + #print + for task_id in tasks_to_pop: + task_id_list.remove(task_id) + # # # + if ((tc.queue_status()['scheduled'] == 0) and + (tc.queue_status()['pending'] <= 2)): + if dtime_pending_1 is None: + dtime_pending_1 = datetime.datetime.now() + else: + now = datetime.datetime.now() + if ((now - dtime_pending_1) >= datetime.timedelta(seconds=300)): + print("dtime_pending=1 timeout break!") + break + print(tc.queue_status()) + print('Sleep... 20', datetime.datetime.utcnow()) + time.sleep(20) + print('> > > > tc.queue_status():', tc.queue_status()) + + ### IN CASE THERE are still tasks which have not been pulled/retrieved: + for task_id in self.ipy_tasks.task_id_list: + temp = self.ipy_tasks.tc.get_task_result(task_id, block=False) + if temp is None: + continue + temp2 = temp.results + if temp2 is None: + continue + results = temp['out_dict'] + if len(results.get('traceback',"")) > 0: + print("Task Traceback:", results.get('srcid',""), results.get('traceback',"")) + continue + tasks_to_pop.append(task_id) + srcid = results['srcid'] + rez = results['rez'] + alt_rez = results['alt_rez'] + filename = results['filename'] + classid = results['classid'] + fp.write('\n' % \ + (srcid, srcid, srcid, filename, self.class_id_name[classid], pars['fiteb_class_lookup'].get(rez.get('class',None),'unknown'), str(rez.get('okfit',False)), + rez.get('chisq',False) if rez.get('chisq',99999) is not None else 99999, + rez.get('e',False), + rez.get('i',99999), + rez.get('i_err',99999) if rez.get('i_err',99999) is not None else 99999, + rez.get('q',99999), + rez.get('q_err',99999) if rez.get('q_err',99999) is not None else 99999, + rez.get('l1/l2',99999), + rez.get('l1/l2_err',99999) if rez.get('l1/l2_err',99999) is not None else 99999, + str(rez.get('reflect1',99999) if rez.get('reflect1',99999) is not None else 99999), + str(rez.get('reflect2',99999) if rez.get('reflect2',99999) is not None else 99999), + )) + fp.flush() + pickle_dict[srcid] = rez + pickle_dict[srcid].update({'file':filename, + 'tutor_class':self.class_id_name[classid], + 'fiteb_class':pars['fiteb_class_lookup'].get(rez.get('class',None),'unknown'), + 'okfit':rez.get('okfit',False), + 'chisq':rez.get('chisq',False), + 'chisq_percentiles':alt_rez.get('chisq_percentiles',{}), + 'e_percentiles':alt_rez.get('e_percentiles',{}), + 'i_err_percentiles':alt_rez.get('i_err_percentiles',{}), + 'l1/l2_err_percentiles':alt_rez.get('l1/l2_err_percentiles',{}), + 'l1/l2_percentiles':alt_rez.get('l1/l2_percentiles',{}), + 'l1_percentiles':alt_rez.get('l1_percentiles',{}), + 'l2_percentiles':alt_rez.get('l2_percentiles',{}), + 'omega_deg_percentiles':alt_rez.get('omega_deg_percentiles',{}), + 'primary_eclipse_phase_percentiles':alt_rez.get('primary_eclipse_phase_percentiles',{}), + 'period_percentiles':alt_rez.get('period_percentiles',{}), + 'ratiopass_for_percentile':alt_rez.get('ratiopass_for_percentile',{}), + 'vals_for_percentile':alt_rez.get('vals_for_percentile',{}), + 'nmodels':alt_rez.get('nmodels',{}), + 'q_err_percentiles':alt_rez.get('q_err_percentiles',{}), + 'q_percentiles':alt_rez.get('q_percentiles',{}), + 'r1_percentiles':alt_rez.get('r1_percentiles',{}), + 'r2_percentiles':alt_rez.get('r2_percentiles',{}), + 'reflect1_percentiles':alt_rez.get('reflect1_percentiles',{}), + 'reflect2_percentiles':alt_rez.get('reflect2_percentiles',{}), + 'e':rez.get('e',False), + 'i':rez.get('i',99999), + 'i_err':rez.get('i_err',99999), + 'q':rez.get('q',99999), + 'q_err':rez.get('q_err',99999) if rez.get('q_err',99999) is not None else 99999, + 'l1/l2':rez.get('l1/l2',99999), + 'l1/l2_err':rez.get('l1/l2_err',99999) if rez.get('l1/l2_err',99999) is not None else 99999, + 'reflect1':rez.get('reflect1',99999) if rez.get('reflect1',99999) is not None else 99999, + 'reflect2':rez.get('reflect2',99999) if rez.get('reflect2',99999) is not None else 99999, + }) + + + + fp.write("""
source_idplotfileTUTOR classfitEB classokfitchi2eccentricityinclination (deg)mass ratiolum ratioreflect 1reflect 2
%dplot%s%s%s%s%4.2f%4.4f%4.2f +- %4.2f%4.2f +- %4.2f%4.2f +- %4.2f%s%s
%dplot%s%s%s%s%4.2f%4.4f%4.2f +- %4.2f%4.2f +- %4.2f%4.2f +- %4.2f%s%s
+ """) + fp.close() + + fp_pickle = open(pars['pkl_fpath'], 'wb') + cPickle.dump(pickle_dict, fp_pickle, 1) + fp_pickle.close() + + import pdb; pdb.set_trace() + print() + + + + + + +def run_fiteb_generate_html_pkl(pars={}): + """ Run fiteb.py on all ASAS AL / Debosscher sources. + Generate .png plots, .html summary, and dictionary .pkl + """ + pars = copy.copy(pars) + pars.update({ \ + 'al_dirpath':os.path.abspath(os.environ.get("TCP_DIR") + 'Data/allstars'), + 'al_glob_str':'AL_*_*.dat', + 'classids_of_interest':[251,#'x. Beta Lyrae', + 253,#'w. Beta Persei', + 252,#'y. W Ursae Maj.', + ], + 'fittype':3, + 'skip_list':[234996, 164830, 164872, 239309, 216110, 225745], + }) + + #period_select(args.did[0],args.per[0],plot=args.plot,use_xml=True,try_alt=args.alt,dosave=args.savefig,show=args.showfig) + orig_cwd = os.getcwd() + os.chdir(os.path.abspath(os.environ.get("HOME") + '/src/install/jsb_eb_fit')) + + DatabaseUtils = Database_Utils(pars=pars) + rclass_tutorid_lookup = DatabaseUtils.retrieve_tutor_class_ids() + class_id_name = dict([[v,k] for k,v in rclass_tutorid_lookup.items()]) + + fpaths = glob.glob("%s/%s" % (pars['al_dirpath'], pars['al_glob_str'])) + + pickle_dict = {} + + fp = open(os.path.abspath(os.environ.get("HOME") + '/scratch/evaluate_eclipsing_classifs.html'),'w') + fp.write(""" + + """) + if 1: + for fpath in fpaths: + tup_list = loadtxt(fpath, + dtype={'names': ('src_id', 'class_id'), + 'formats': ('i4', 'i4')}, + usecols=(0,1), + unpack=False) + srcid_list = tup_list['src_id'] + classid_list = tup_list['class_id'] + for i, classid in enumerate(classid_list): + if int(srcid_list[i]) != 164594: + continue + if classid in pars['classids_of_interest']: + srcid = srcid_list[i] + if int(srcid) in pars['skip_list']: + continue + print("11111111", srcid) + select_str = "SELECT feat_val FROM source_test_db.feat_values JOIN feat_lookup USING (feat_id) WHERE filter_id=8 AND feat_name='freq1_harmonics_freq_0' AND src_id=%d" % (srcid + 100000000) + DatabaseUtils.tcp_cursor.execute(select_str) + results = DatabaseUtils.tcp_cursor.fetchall() + if len(results) == 0: + raise "Error" + period = 1. / results[0][0] + + #try: + if 1: + (alt_rez, rez) = fiteb.period_select(idd=int(srcid), + per=period, + plot=True, + use_xml=True, + try_alt=True, + dosave=True, + show=False, + fittype=pars['fittype']) #True,#verbose=False) + #except: + # print srcid, period + # import pdb; pdb.set_trace() + # print + # continue + + #pprint.pprint(rez) + fp.write('\n' % \ + (srcid, srcid, srcid, fpath[fpath.rfind('/')+1:], class_id_name[classid], pars['fiteb_class_lookup'].get(rez.get('class',None),'unknown'), str(rez.get('okfit',False)), + rez.get('chisq',False), + rez.get('e',False), + rez.get('i',99999), + rez.get('i_err',99999) if rez.get('i_err',99999) is not None else 99999, + rez.get('q',99999), + rez.get('q_err',99999) if rez.get('q_err',99999) is not None else 99999, + rez.get('l1/l2',99999), + rez.get('l1/l2_err',99999) if rez.get('l1/l2_err',99999) is not None else 99999, + str(rez.get('reflect1',99999) if rez.get('reflect1',99999) is not None else 99999), + str(rez.get('reflect2',99999) if rez.get('reflect2',99999) is not None else 99999), + )) + fp.flush() + pickle_dict[srcid] = rez + pickle_dict[srcid].update({'file':fpath[fpath.rfind('/')+1:], + 'tutor_class':class_id_name[classid], + 'fiteb_class':pars['fiteb_class_lookup'].get(rez.get('class',None),'unknown'), + 'okfit':rez.get('okfit',False), + 'chisq':rez.get('chisq',False), + 'e':rez.get('e',False), + 'i':rez.get('i',99999), + 'i_err':rez.get('i_err',99999), + 'q':rez.get('q',99999), + 'q_err':rez.get('q_err',99999) if rez.get('q_err',99999) is not None else 99999, + 'l1/l2':rez.get('l1/l2',99999), + 'l1/l2_err':rez.get('l1/l2_err',99999) if rez.get('l1/l2_err',99999) is not None else 99999, + 'reflect1':rez.get('reflect1',99999) if rez.get('reflect1',99999) is not None else 99999, + 'reflect2':rez.get('reflect2',99999) if rez.get('reflect2',99999) is not None else 99999, + }) + #import pdb; pdb.set_trace() + #print + + select_str = "select source_id, class_id from sources where project_id = 123" + DatabaseUtils.tutor_cursor.execute(select_str) + results = DatabaseUtils.tutor_cursor.fetchall() + if len(results) == 0: + raise "Error" + for row in results: + (srcid, classid) = row + if classid in pars['classids_of_interest']: + if int(srcid) in pars['skip_list']: + continue + if int(srcid) != 164594: + continue + print("22222222", srcid) + + select_str = "SELECT feat_val FROM source_test_db.feat_values JOIN feat_lookup USING (feat_id) WHERE filter_id=8 AND feat_name='freq1_harmonics_freq_0' AND src_id=%d" % (srcid + 100000000) + DatabaseUtils.tcp_cursor.execute(select_str) + results = DatabaseUtils.tcp_cursor.fetchall() + if len(results) == 0: + raise "Error" + period = 1. / results[0][0] + + (alt_rez, rez) = fiteb.period_select(idd=int(srcid), + per=period, + plot=True, + use_xml=True, + try_alt=True, + dosave=True, + show=False, + fittype=pars['fittype'])#, #True,verbose=False) + + #pprint.pprint(rez) + fp.write('\n' % \ + (srcid, srcid, srcid, "Debosscher", class_id_name[classid], pars['fiteb_class_lookup'].get(rez.get('class',None),'unknown'), str(rez.get('okfit',False)), + rez.get('chisq',False), + rez.get('e',False), + rez.get('i',0), + rez.get('i_err',99999) if rez.get('i_err',99999) is not None else 99999, + rez.get('q',0), + rez.get('q_err',0) if rez.get('q_err',0) is not None else 99999, + rez.get('l1/l2',0), + rez.get('l1/l2_err',0) if rez.get('l1/l2_err',0) is not None else 99999, + str(rez.get('reflect1',99999) if rez.get('reflect1',99999) is not None else 99999), + str(rez.get('reflect2',99999) if rez.get('reflect2',99999) is not None else 99999), + )) + + fp.flush() + pickle_dict[srcid] = rez + pickle_dict[srcid].update({'file':"Debosscher", + 'tutor_class':class_id_name[classid], + 'fiteb_class':pars['fiteb_class_lookup'].get(rez.get('class',None),'unknown'), + 'okfit':rez.get('okfit',False), + 'chisq':rez.get('chisq',False), + 'e':rez.get('e',False), + 'i':rez.get('i',99999), + 'i_err':rez.get('i_err',99999), + 'q':rez.get('q',99999), + 'q_err':rez.get('q_err',99999) if rez.get('q_err',99999) is not None else 99999, + 'l1/l2':rez.get('l1/l2',99999), + 'l1/l2_err':rez.get('l1/l2_err',99999) if rez.get('l1/l2_err',99999) is not None else 99999, + 'reflect1':rez.get('reflect1',99999) if rez.get('reflect1',99999) is not None else 99999, + 'reflect2':rez.get('reflect2',99999) if rez.get('reflect2',99999) is not None else 99999, + }) + #break + + fp.write("""
source_idplotfileTUTOR classfitEB classokfitchi2eccentricityinclination (deg)mass ratiolum ratioreflect 1reflect 2
%dplot%s%s%s%s%4.2f%4.4f%4.2f +- %4.2f%4.2f +- %4.2f%4.2f +- %4.2f%s%s
%dplot%s%s%s%s%4.2f%4.4f%4.2f +- %4.2f%4.2f +- %4.2f%4.2f +- %4.2f%s%s
+ """) + fp.close() + + fp_pickle = open(pars['pkl_fpath'], 'wb') + cPickle.dump(pickle_dict, fp_pickle, 1) + fp_pickle.close() + + + +class FitEB_Param_Analysis(Database_Utils): + """ + """ + def __init__(self, pars={}): + self.pars = pars + self.pars['fiteb_class_lookup_rev'] = {} + for k, v in self.pars['fiteb_class_lookup'].items(): + self.pars['fiteb_class_lookup_rev'][v] = k + self.connect_to_db() + + + def reduce_arff_attrib_list_using_SVMranker(self, arff_attrib_list_orig): + """ Parse the WEKA results file returned from the attribute-select SVM-ranker. + Return; a reduced arff_attrib_list + +* want to parse SVM_ranker file and construct ordered lists for each attribute + - storing merit, rank : +** This code runs at: +** then store attribs in final allowed list which: + - have a merit above a certain value + - OR, that attribute has not been stored yet. + - initially allowing 4/7 percentiles for each attribute to pass + - then iterateing and weeding down again and maybe allowing + 2/7 or 1/7 attribs + +average merit average rank attribute +672 +- 0 1 +- 0 658 detached_e_npass_50 +669.3 +- 1.418 3.7 +- 1.42 616 detached_l2_npass_50 + + """ + attrib_added_dict = {} + arff_attrib_list_out = [] + in_header = True + for line in open(self.pars['SVMrank_results_input_fpath']).readlines(): + if len(line) <= 1: + continue + if "average merit" in line: + in_header = False + continue # skip this line + if in_header: + continue + line_rep = line.replace("+-", "") + elems = line_rep.split() + merit = float(elems[0]) + rank = float(elems[2]) + attrib = elems[5] + i_split = attrib.rfind("_") + attrib_root = attrib[:i_split] + if merit < self.pars['SVMrank_allow_cut']: + #import pdb; pdb.set_trace() + #print + pass # we do not use this percentile attribute + elif attrib_root not in attrib_added_dict: + attrib_added_dict[attrib_root] = [attrib] + arff_attrib_list_out.append(attrib) + elif len(attrib_added_dict[attrib_root]) < self.pars['n_attrib_percentiles_cut']: + attrib_added_dict[attrib_root].append(attrib) + arff_attrib_list_out.append(attrib) + else: + pass + arff_attrib_list_out.sort() + return arff_attrib_list_out + + + def parse_trainset_srcid_list(self): + """ Parse a list file of srcids, classified as one of 3 eclipsing classes. + These are to be used as the training set for the WEKA classifier, and are + added to the .arff file in main(). + """ + srcid_class_dict = {} + lines = open(self.pars['trainset_srcid_list_fpath']).readlines() + for line in lines: + if len(line) <= 1: + continue + elems = line.split() + class_name = self.pars['class_short_lookup'][elems[0]] + srcid = int(elems[1]) + srcid_class_dict[srcid] = class_name + + return srcid_class_dict + + + + def main(self, use_trainset_srcid_list=True): + """ + ** Need to generate these plots for: + - different matched classes: EA, EB, EW + - different surveys: Debosscher, ASAS + - different parameters : chi2, incl_ + ** so we need to plot a historgram for: + - sources we agree on (with some tightness cuts) + - all other sources + + Reference existing liklihood code: + - tutor_database_project_insert.py:plot_aperture_mag_relation() + - get_colors_for_tutor_sources.py:determine_color_param_likelyhoods() + + """ + if use_trainset_srcid_list: + trainset_srcid_class_dict = self.parse_trainset_srcid_list() + + fp_pickle = open(self.pars['pkl_fpath']) + data_dict = cPickle.load(fp_pickle) + fp_pickle.close() + + fp_html = open(os.path.abspath(os.environ.get("HOME") + '/scratch/evaluate_eclipsing_classifs.html'),'w') + fp_html.write(""" + + """) + + attribs_for_percentiles = ['chisq', 'i_err', 'q_err', 'l1/l2_err', 'l1/l2', 'q', 'r1', 'r2', 'reflect1', 'reflect2', 'primary_eclipse_phase', 'period', 'omega_deg', 'l1', 'l2', 'e'] # 'primary_eclipse_phase', 'period', 'omega_deg', 'l1', 'l2', 'e'] + arff_attrib_list_orig = copy.copy(self.pars['analysis_params']) + for a_name in attribs_for_percentiles: + for c_name in self.pars['fiteb_class_lookup'].keys(): + for temp_type in ['perc', 'npass']: + for perc in [5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90]: + temp_param_name = "%s_%s_%s_%d" % (c_name, a_name, temp_type, perc) + if temp_param_name in self.pars['percentile_attrib_skip_list']: + continue + arff_attrib_list_orig.append(temp_param_name) + for a_name in attribs_for_percentiles: + for perc in [5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90]: + temp_param_name = "perc_val_%s_%d" % (a_name, perc) + arff_attrib_list_orig.append(temp_param_name) + for a_name in attribs_for_percentiles: + for perc in [5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90]: + temp_param_name = "perc_pass_%s_%d" % (a_name, perc) + arff_attrib_list_orig.append(temp_param_name) + + + + arff_attrib_list = self.reduce_arff_attrib_list_using_SVMranker(arff_attrib_list_orig) + ###DO THIS ONLY ON FIRST ITERATION, prior to running SVM Ranker: + #arff_attrib_list = arff_attrib_list_orig + + fp_arff = open(os.path.abspath(os.environ.get("HOME") + '/scratch/evaluate_eclipsing_classifs.arff'),'w') + fp_arff.write("@RELATION ts\n") + fp_arff.write("@ATTRIBUTE srcid NUMERIC\n") + for param_name in arff_attrib_list: + fp_arff.write("@ATTRIBUTE %s NUMERIC\n" % (param_name)) + fp_arff.write("@ATTRIBUTE class {'contact','detached','semi-detached'}\n@DATA\n") + + + xlim_dict = {'q_err': [0.0, 50], + 'q': [-5.0, 45], + 'l1/l2_err':[0.0, 10], + 'l1/l2': [0.0, 10], + 'chisq': [0.0, 5], + 'reflect1': [0.0, 0.1], + 'r1': [0.0, 2], + 'r2': [0.0, 2], + 'i_err': [0.0, 100]} + + for class_name in self.pars['fiteb_class_lookup'].values(): + for i_param, param_name in enumerate(self.pars['analysis_params']): + match_vals = [] + mismatch_vals = [] + for srcid, src_dict in data_dict.items(): + ### NOTE: cannot apply these constraints: + ## i : even for detached, i spread for matches is >= mismatch i value spread + ## e : doesnt seem to be related to match / mismatch + ## l1 : doesnt seem to be related to match / mismatch + ## dof : probably related to N-epochs + #if ((class_name == src_dict['tutor_class'] == src_dict['fiteb_class']) and + # (src_dict['chisq'] <= 2.4) and + #if ((class_name == src_dict['fiteb_class']) and + # (src_dict['chisq'] <= 0.91) and + + # # # Below list are ambigious sources which may be classified wrong by Debosscher or Allstars users + """ + if ((class_name == src_dict['tutor_class']) and + (src_dict['tutor_class'] != src_dict['fiteb_class']) + ): + """ + + ## ## ## Prior to reclassification of non tutor_class == fiteb_class sources: + # # # Below list are ambigious sources which may be classified wrong by Debosscher or Allstars users + """ + if ((class_name == src_dict['tutor_class'] == src_dict['fiteb_class']) and + ((srcid not in [ \ + +164798, +164636, +164633, +164612, +164869, +221996, +228218, +164768, +164772, +244713, +164850, +164880, +261921, +237428, +249855, +164624, +164649, +164736, +164775, +164790, +164794, +164814, +164822, +234812, +227324, +219432, +252570, +164828, +164839, +164535, +164581, +164598, +164606, +246724, +249004, +226992, +231228]) or (srcid in [ \ +164843, +164847, +164851, +164854, +217524, +232806, +237022, +222870, +164537, +164512, +164518, +164543, +164776, +164786, +])) + ): + """ + + if use_trainset_srcid_list: + if not srcid in trainset_srcid_class_dict.keys(): + continue # skip this source + source_class = trainset_srcid_class_dict[srcid] + #import pdb; pdb.set_trace() + #print + else: + source_class = src_dict['tutor_class'] + + # # # Below list are ambigious sources which may be classified wrong by Debosscher or Allstars users + if ((class_name == source_class) + ): + if i_param == 0: + fp_html.write('\n' % \ + (srcid, srcid, srcid, src_dict['file'], + source_class, + src_dict['fiteb_class'], + str(src_dict['okfit']), + src_dict['chisq'], + src_dict['e'], + src_dict['i'], + src_dict.get('i_err',99999) if src_dict.get('i_err',99999) is not None else 99999, + src_dict['q'], + src_dict['q_err'], + src_dict['l1/l2'], + src_dict['l1/l2_err'], + str(src_dict['reflect1']), + str(src_dict['reflect2']), + )) + ### KLUDGEY: + val_strs = [] + for param_name2 in arff_attrib_list: + #if ((srcid == 264245) and (param_name2 == 'semi-detached_chisq_perc_5')): + #import pdb; pdb.set_trace() + #print + if '_perc_' in param_name2: + perc_num = int(param_name2[param_name2.rfind('_')+1:]) + cls_name = param_name2[:param_name2.find('_')] + attrib_root = param_name2[param_name2.find('_')+1:param_name2.rfind('_perc_')] + attrib_percentiles_name = attrib_root + "_percentiles" + v = src_dict.get(attrib_percentiles_name,{}).get(cls_name,{}).get(perc_num,{}).get('val_at_perc',"?") + elif '_npass_' in param_name2: + perc_num = int(param_name2[param_name2.rfind('_')+1:]) + cls_name = param_name2[:param_name2.find('_')] + attrib_root = param_name2[param_name2.find('_')+1:param_name2.rfind('_npass_')] + attrib_percentiles_name = attrib_root + "_percentiles" + v = src_dict.get(attrib_percentiles_name,{}).get(cls_name,{}).get(perc_num,{}).get('n_pass',"?") + elif 'perc_val_' in param_name2: + perc_num = int(param_name2[param_name2.rfind('_')+1:]) + attrib_root = param_name2[param_name2.find('perc_val_')+9:param_name2.rfind('_')] + v = src_dict.get('vals_for_percentile',{}).get(attrib_root,{}).get(perc_num,"?") + elif 'perc_pass_' in param_name2: + perc_num = int(param_name2[param_name2.rfind('_')+1:]) + attrib_root = param_name2[param_name2.find('perc_pass_')+10:param_name2.rfind('_')] + v = src_dict.get('ratiopass_for_percentile',{}).get(attrib_root,{}).get(perc_num,"?") + else: + v = src_dict.get(param_name2, "?") if src_dict.get(param_name2, "?") is not None else "?" + if numpy.isnan(v): + v = "?" # KLUDGE + if v == 999999: + print('INT 999999') + v = "?" # KLUDGE: catches this N/A value which is generated in fiteb.py::period_select() when EB.run().outrez{} is missing some physical parameters + elif v == 99999: + print('INT 99999') + v = "?" # KLUDGE: catches this N/A value which is generated in fiteb.py::period_select() when EB.run().outrez{} is missing some physical parameters + val_strs.append(str(v)) + a_str = "%d,%s,'%s'\n" % (srcid, ",".join(val_strs), self.pars['fiteb_class_lookup_rev'][class_name]) + fp_arff.write(a_str) + + if 'chi2_perc' in param_name: + perc_num = int(param_name[param_name.rfind('_')+1:]) + cls_name = self.pars['fiteb_class_lookup_rev'][class_name] + if cls_name in src_dict['chisq_percentiles']: + v = src_dict['chisq_percentiles'][cls_name][perc_num]['val_at_perc'] + else: + v = None + elif 'chi2_npass' in param_name: + perc_num = int(param_name[param_name.rfind('_')+1:]) + cls_name = self.pars['fiteb_class_lookup_rev'][class_name] + if cls_name in src_dict['chisq_percentiles']: + v = src_dict['chisq_percentiles'][cls_name][perc_num]['n_pass'] + else: + v = None + else: + v = src_dict[param_name] + if v != None: + match_vals.append(v) + print(" MATCH plot:%s TUTOR:%s fiteb:%s chi2:%f" % (class_name, source_class, src_dict['fiteb_class'], src_dict['chisq'])) + elif ((class_name == source_class) and + (source_class != src_dict['fiteb_class']) and + (srcid in [260456, 220490, 217279, 222948, 219432, 216954, 251878, 226123, 247767, 237081, 235730, 250580, 231228, 222870, 246079, 164512, 164525, 164531, 164533, 164541, 164542, 164543, 164544, 164558, 164556, 164562, 164577, 164579, 164583, 164588, 164596, 164592, 164603, 164611, 164613, 164625, 164628, 164643, 164651, 164667, 164669, 164674, 164683, 164685, 164684, 164690, 164697, 164704, 164703, 164701, 164712, 164707, 164710, 164725, 164744, 164766, 164771, 164778, 164797, 164833, 164867, 164876, 164881]) + ): + if 'chi2_perc' in param_name: + perc_num = int(param_name[param_name.rfind('_')+1:]) + cls_name = self.pars['fiteb_class_lookup_rev'][class_name] + if cls_name in src_dict['chisq_percentiles']: + v = src_dict['chisq_percentiles'][cls_name][perc_num]['val_at_perc'] + else: + v = None + elif 'chi2_npass' in param_name: + perc_num = int(param_name[param_name.rfind('_')+1:]) + cls_name = self.pars['fiteb_class_lookup_rev'][class_name] + if cls_name in src_dict['chisq_percentiles']: + v = src_dict['chisq_percentiles'][cls_name][perc_num]['n_pass'] + else: + v = None + else: + v = src_dict.get(param_name,88888) + if v != None: + mismatch_vals.append(v) + print("MISMATCH plot:%s TUTOR:%s fiteb:%s chi2:%f" % (class_name, source_class, src_dict['fiteb_class'], src_dict['chisq'] if src_dict.get('chisq',99999) is not None else 99999)) + + #mags = vals + #fits = norm.fit(mags) + #dist = norm(fits) + #for m in mags: + # probs.append(dist.pdf(m)[0]) # * len(param_list)/float(len(mag))) + + if (len(xlim_dict.get(param_name,[])) == 0): + minmax_list = [] + for a_list in [match_vals, mismatch_vals]: + if len(a_list) > 0: + minmax_list.extend([min(a_list), max(a_list)]) + x_range = (min(minmax_list), max(minmax_list)) + #if (len(match_vals) > 0): + # x_range = (min(match_vals), max(match_vals)) + #else: + # x_range = (min(mismatch_vals), max(mismatch_vals)) + else: + x_range = (xlim_dict[param_name][0], xlim_dict[param_name][1]) + + pyplot.hist(mismatch_vals, bins=50, normed=False, facecolor='b', alpha=0.3, range=x_range) + pyplot.hist(match_vals, bins=50, normed=False, facecolor='r', alpha=0.3, range=x_range) + #pyplot.plot(mags, probs, 'ro', ms=3) + + title_str = '%s %s' % (class_name, param_name) + pyplot.title(title_str) + fpath = "/tmp/evaluate_eclipsing_classifs__%s.png" % (title_str.replace(' ','_').replace('/','_')) + pyplot.savefig(fpath) + #os.system('eog %s ' % (fpath)) + #pyplot.show() + + print(param_name) + pyplot.clf() + + + fp_html.write("""
source_idplotfileTUTOR classfitEB classokfitchi2eccentricityinclination (deg)mass ratiolum ratioreflect 1reflect 2
%dplot%s%s%s%s%4.2f%4.4f%4.2f +- %4.2f%4.2f +- %4.2f%4.2f +- %4.2f%s%s
+ """) + fp_html.close() + fp_arff.close() + os.system('eog /tmp/evaluate_eclipsing_classifs*png &') + #import pdb; pdb.set_trace() + #print + +class Classify_And_Summarize: + """ Classify and generate summary html, as well as classification distribution summary file. + """ + def __init__(self, pars={}): + self.DatabaseUtils = Database_Utils(pars=pars) + + + def classify_and_summarize(self): + """ Classify and generate summary html, as well as classification distribution summary file. + + ### ### ### + # 1st iteration, producing initial classification distribution with .model generated using + # dstarr's hand selected training-set. + p = {'test_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__tutor_fiteb_mismatch_testset2__noclassattribs.arff', + 'test_arff_nosrcid':"/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__tutor_fiteb_mismatch_testset2__noclassattribs__nosrcid.arff", + 'train_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__trainset2__noclassattribs.arff', + 'train_model':"/home/pteluser/scratch/evaluate_eclipsing_classifs__RandForest_2of11__nonclassattribs__trainset2_crossvalid.model", + 'comment_file':"/home/pteluser/scratch/evaluate_eclipsing_classifs.comments", + 'classif_distrib_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs.class_distrib', + 'classif_distrib_html_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs_distribution_summary.html', + 'classes':['contact','detached','semi-detached'], # order used in the .arff / classifier distrib output + 'distribclass_to_classes_lookup':{ + 'detached':'detached', + 'semi-det':'semi-detached', + 'contact':'contact', + }, + } + ### ### ### + # 2nd iteration, using 2 corrberating classifications in papers for a source to be used in the training set. + # Maybe 5-10 sources which were not in trainingset or in the wrong trainingset classes. + ### ### ### + p = {'test_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__tutor_fiteb_mismatch_testset2__noclassattribs.arff', + 'test_arff_nosrcid':"/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__tutor_fiteb_mismatch_testset2__noclassattribs__nosrcid.arff", + 'train_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__trainset3.arff', + 'train_model':"/home/pteluser/scratch/evaluate_eclipsing_classifs__RandForest_2of11__trainset3_crossvalid.model", + 'comment_file':"/home/pteluser/scratch/evaluate_eclipsing_classifs.comments", + 'classif_distrib_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs.class_distrib', + 'classif_distrib_html_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs_distribution_summary.html', + 'classes':['contact','detached','semi-detached'], # order used in the .arff / classifier distrib output + 'distribclass_to_classes_lookup':{ + 'detached':'detached', + 'semi-det':'semi-detached', + 'contact':'contact', + }, + } + + ### ### ### + Fourth iteration (there was no third): + p = {'test_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__tutor_fiteb_mismatch_testset2__noclassattribs.arff', + 'test_arff_nosrcid':"/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__tutor_fiteb_mismatch_testset2__noclassattribs__nosrcid.arff", + 'train_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__trainset4.arff', + 'train_model':"/home/pteluser/scratch/evaluate_eclipsing_classifs__RandForest_2of11__trainset4_crossvalid.model", + 'comment_file':"/home/pteluser/scratch/evaluate_eclipsing_classifs.comments", + 'classif_distrib_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs.class_distrib', + 'classif_distrib_html_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs_distribution_summary.html', + 'classes':['contact','detached','semi-detached'], # order used in the .arff / classifier distrib output + 'distribclass_to_classes_lookup':{ + 'detached':'detached', + 'semi-det':'semi-detached', + 'contact':'contact', + }, + } + ### ### ### + 5th iteration, re-analysis of attributes using SVM Ranker + p = {'test_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__allsrcs__attribsfrom_testset5redone.arff', + 'test_arff_nosrcid':"/home/pteluser/scratch/evaluate_eclipsing_classifs__allsrcs__attribsfrom_testset5redone__nosrcid.arff", + 'train_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__trainset5__redoneattribs.arff', + 'train_model':"/home/pteluser/scratch/evaluate_eclipsing_classifs__RandForest_2of11__trainset5__redoneattribs__crossvalid.model", + 'comment_file':"/home/pteluser/scratch/evaluate_eclipsing_classifs.comments", + 'classif_distrib_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs.class_distrib', # for output + 'classif_distrib_html_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs_distribution_summary.html', # for output + 'classes':['contact','detached','semi-detached'], # order used in the .arff / classifier distrib output + 'distribclass_to_classes_lookup':{ + 'detached':'detached', + 'semi-det':'semi-detached', + 'contact':'contact', + }, + } + + ### ### ### + + """ + p = {'test_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__allsrcs__attribsfrom_testset6.arff', + 'test_arff_nosrcid':"/home/pteluser/scratch/evaluate_eclipsing_classifs__allsrcs__attribsfrom_testset6__nosrcid.arff", + 'train_arff_withsrcid':'/home/pteluser/scratch/evaluate_eclipsing_classifs__2of11perc__trainset6.arff', + 'train_model':"/home/pteluser/scratch/evaluate_eclipsing_classifs__RandForest_2of11__trainset6_crossvalid.model", + 'comment_file':"/home/pteluser/scratch/evaluate_eclipsing_classifs.comments", + 'classif_distrib_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs.class_distrib', # for output + 'classif_distrib_html_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs_distribution_summary.html', # for output + 'classes':['contact','detached','semi-detached'], # order used in the .arff / classifier distrib output + 'distribclass_to_classes_lookup':{ + 'detached':'detached', + 'semi-det':'semi-detached', + 'contact':'contact', + }, + } + + srcid_comment = {} + for line in open(p['comment_file']).readlines(): + if len(line) <= 1: + continue + srcid = int(line[:line.find(' ')]) + comment = line[line.find(' '):] + srcid_comment[srcid] = comment.strip() + + + testing_srcid_list = [] + found_data = False + for line in open(p['test_arff_withsrcid']).readlines(): + if found_data: + srcid = int(line[:line.find(',')]) + testing_srcid_list.append(srcid) + # NOTE: I dont think we need to parse the class, snce this is contained in the class distrib output + elif "@DATA" in line: + found_data = True + + training_srcid_list = [] + found_data = False + for line in open(p['train_arff_withsrcid']).readlines(): + if found_data: + srcid = int(line[:line.find(',')]) + training_srcid_list.append(srcid) + # NOTE: I dont think we need to parse the class, snce this is contained in the class distrib output + elif "@DATA" in line: + found_data = True + + ### Apply classifier to test-set + sys_str = "java weka.classifiers.trees.RandomForest -T %s -l %s -p 1 -distribution > %s" % (p['test_arff_nosrcid'], p['train_model'], p['classif_distrib_fpath']) + os.system(sys_str) + time.sleep(2) + + #training_srcid_list = [] + found_header = False + test_srcid_classifs = {} + test_class_prob_srcid_tups = [] + i_src = 0 + for line in open(p['classif_distrib_fpath']).readlines(): + if found_header and (len(line) > 1): + elems = line[:i_error].split() + tutor_class = p['distribclass_to_classes_lookup'][elems[1][elems[1].find(':') +1:]] + pred_class = elems[2][elems[2].find(':') +1:] + + srcid = testing_srcid_list[i_src] + elems = line[i_error + 5:].split() + prob_elems = elems[0].split(',') + class_probs = [] + for i_class, prob_str in enumerate(prob_elems): + if '*' in prob_str: + i_chosen_class = i_class + prob_num = float(prob_str.replace("*",'')) + class_probs.append(prob_num) + test_srcid_classifs[srcid] = {'primary_class_i':i_chosen_class, + 'class_probs':class_probs, + 'tutor_class':tutor_class, + } + ### Here we append (class_name, primary_classprob, srcid) to a list for sorting: + test_class_prob_srcid_tups.append((p['classes'][i_chosen_class], class_probs[i_chosen_class], srcid)) + i_src += 1 + + elif "inst#" in line: + found_header = True + i_error = line.index('error') + + fp = open(p['classif_distrib_html_fpath'], 'w') + fp.write(""" + + + + + + + + + + + + + + """) + test_class_prob_srcid_tups.sort(reverse=True) + #import pdb; pdb.set_trace() + #print + for (pred_class, pred_prob, srcid) in test_class_prob_srcid_tups: + tutor_matches_pred_str = "" + if pred_class == test_srcid_classifs[srcid]['tutor_class']: + tutor_matches_pred_str = "match" + + in_trainingset_str = "" + if srcid in training_srcid_list: + in_trainingset_str = "train" + + comment_str = "" + if srcid in srcid_comment.keys(): + comment_str = srcid_comment[srcid] + + a_str = """ + + + + + + + + + + + \n""" % ( \ + srcid, + srcid, + srcid, + tutor_matches_pred_str, + in_trainingset_str, + test_srcid_classifs[srcid]['tutor_class'], + p['classes'][test_srcid_classifs[srcid]['primary_class_i']], + test_srcid_classifs[srcid]['class_probs'][test_srcid_classifs[srcid]['primary_class_i']], + test_srcid_classifs[srcid]['class_probs'][0], + test_srcid_classifs[srcid]['class_probs'][1], + test_srcid_classifs[srcid]['class_probs'][2], + comment_str, + ) + #import pdb; pdb.set_trace() + #print + fp.write(a_str) + + + select_str = "select source_ra, source_dec, source_name from sources where source_id = %d" % (srcid) + self.DatabaseUtils.tutor_cursor.execute(select_str) + results = self.DatabaseUtils.tutor_cursor.fetchall() + if len(results) == 0: + raise "Error" + ra = results[0][0] + decl = results[0][1] + source_name = results[0][2] + # ASAS only: if srcid >= 215153: + if ((test_srcid_classifs[srcid]['tutor_class'] != p['classes'][test_srcid_classifs[srcid]['primary_class_i']]) and + ((test_srcid_classifs[srcid]['class_probs'][0] >= 0.8) or + (test_srcid_classifs[srcid]['class_probs'][1] >= 0.8) or + (test_srcid_classifs[srcid]['class_probs'][2] >= 0.8))): + print("%d %s %12.6lf %12.6lf %s %0.7s %0.7s %0.2f %0.2f %0.2f %s" % ( \ + srcid, + source_name, + ra, + decl, + in_trainingset_str if in_trainingset_str == "train" else " ", + test_srcid_classifs[srcid]['tutor_class'], + p['classes'][test_srcid_classifs[srcid]['primary_class_i']], + test_srcid_classifs[srcid]['class_probs'][0], #test_srcid_classifs[srcid]['class_probs'][test_srcid_classifs[srcid]['primary_class_i']], + test_srcid_classifs[srcid]['class_probs'][1], + test_srcid_classifs[srcid]['class_probs'][2], + comment_str, + )) + #import pdb; pdb.set_trace() + #print + + fp.write("""
source_idplotMatchesTrainSetTUTOR/ALLStarsPredictedPred. Prob       contactdetachedsemi-detCOMMENT
%dplot%s%s%s%s%0.2f%0.2f%0.2f%0.2f%s
+ """) + fp.close() + + + +def generate_jktebop_templates(pars={}): + """ + ### generate additional JKTEBOP template files, to better explore param space + # when trying to fit an eclipsing model to a lightcurve. + """ + if len(pars) == 0: + pars = {'template_dirpath':os.path.abspath(os.environ.get("HOME") + '/src/install/jsb_eb_fit/Templates'), + 'reference_template_fpath':os.path.abspath(os.environ.get("HOME") + '/src/install/jsb_eb_fit/Templates/eb.4.template'),#'/home/pteluser/src/install/jsb_eb_fit/Templates/eb.3.template', + 'fname_i_start':2, + 'tweak_params':{'Orbital inclination':{'i_low':0, + 'i_high':4, + 'min':65., + 'max':90., + 'n_samples':5}, + 'Mass ratio of system':{'i_low':5, + 'i_high':9, + 'min':-0.5, + 'max':2.0, + 'n_samples':5}, + 'Ratio of the radii':{'i_low':5, + 'i_high':9, + 'min':0.1, + 'max':3.0, + 'n_samples':5}, + }, + } + lines = open(pars['reference_template_fpath']).readlines() + + i_template = pars['fname_i_start'] + + pname_1 = 'Orbital inclination' + pdict_1 = pars['tweak_params'][pname_1] + val_arr_1 = numpy.linspace(pdict_1['min'], pdict_1['max'], pdict_1['n_samples']) + for val_1 in list(val_arr_1): + new_lines = [] + for i_line, line in enumerate(lines): + if pname_1 in line: + val_1_str = "%0.1f" % (val_1) + new_line = "%s%s%s" % (line[:pdict_1["i_low"]], val_1_str, line[pdict_1["i_low"] + len(val_1_str):]) + print(new_line) + new_lines.append(new_line) + else: + new_lines.append(line) + + lines = new_lines + + pname_2 = 'Mass ratio of system' + pdict_2 = pars['tweak_params'][pname_2] + val_arr_2 = numpy.linspace(pdict_2['min'], pdict_2['max'], pdict_2['n_samples']) + for val_2 in list(val_arr_2): + new_lines = [] + for i_line, line in enumerate(lines): + if pname_2 in line: + val_2_str = "%0.1f" % (val_2) + new_line = "%s%s%s" % (line[:pdict_2["i_low"]], val_2_str, line[pdict_2["i_low"] + len(val_2_str):]) + print(new_line) + new_lines.append(new_line) + else: + new_lines.append(line) + + lines = new_lines + + pname_3 = 'Ratio of the radii' + pdict_3 = pars['tweak_params'][pname_3] + val_arr_3 = numpy.linspace(pdict_3['min'], pdict_3['max'], pdict_3['n_samples']) + for val_3 in list(val_arr_3): + new_lines = [] + for i_line, line in enumerate(lines): + if pname_3 in line: + val_3_str = "%0.1f" % (val_3) + new_line = "%s%s%s" % (line[:pdict_3["i_low"]], val_3_str, line[pdict_3["i_low"] + len(val_3_str):]) + print(new_line) + new_lines.append(new_line) + else: + new_lines.append(line) + + + fpath = "%s/eb.4.alt%d.template" % (pars['template_dirpath'], i_template) + #fpath = "%s/eb.3.alt%d.template" % (pars['template_dirpath'], i_template) + if os.path.exists(fpath): + os.system("rm " + fpath) + fp = open(fpath, 'w') + fp.writelines(new_lines) + fp.close() + i_template += 1 + #import pdb; pdb.set_trace() + #print + + """ + # KLUDGEY: doesnt iterate perfectly over MxN combinations + i_template = pars['fname_i_start'] + for param_str, p_dict in pars['tweak_params'].items(): + val_arr = numpy.linspace(p_dict['min'], p_dict['max'], p_dict['n_samples']) + for val in list(val_arr): + new_lines = [] + for i_line, line in enumerate(lines): + if param_str in line: + new_line = "%s%s%s" % (line[:p_dict["i_low"]], str(val), line[p_dict["i_high"]:]) + #import pdb; pdb.set_trace() + #print + new_lines.append(new_line) + else: + new_lines.append(line) + fpath = "%s/eb.3.alt%d.template" % (pars['template_dirpath'], i_template) + if os.path.exists(fpath): + os.system("rm " + fpath) + fp = open(fpath, 'w') + fp.writelines(new_lines) + fp.close() + i_template += 1 + #import pdb; pdb.set_trace() + #print + lines = new_lines + + """ + + + +if __name__ == '__main__': + pars = {'tutor_hostname':'192.168.1.103', + 'tutor_username':'dstarr', #'tutor', # guest + 'tutor_password':'ilove2mass', #'iamaguest', + 'tutor_database':'tutor', + 'tutor_port':3306, #33306, + 'tcp_hostname':'192.168.1.25', + 'tcp_username':'pteluser', + 'tcp_port': 3306, #23306, + 'tcp_database':'source_test_db', + 'pkl_fpath':os.path.abspath(os.environ.get("HOME") + '/scratch/evaluate_eclipsing_classifs_using_fiteb__dict.pkl'), + 'class_short_lookup':{'EW':'y. W Ursae Maj.', + 'EA':'w. Beta Persei', + 'EB':'x. Beta Lyrae'}, + 'fiteb_class_lookup':{'contact':'y. W Ursae Maj.', + 'detached':'w. Beta Persei', + 'semi-detached':'x. Beta Lyrae'}, + 'analysis_params':['chisq', 'i_err', 'q_err', 'l1/l2_err', 'l1/l2', 'q', 'r1', 'r2', 'reflect1', + 'reflect2', 'primary_eclipse_phase', 'period', 'omega_deg', 'l1', 'e', + ], + 'al_dirpath':os.path.abspath(os.environ.get("TCP_DIR") + 'Data/allstars'), + 'al_glob_str':'AL_*_*.dat', + 'classids_of_interest':[251,#'x. Beta Lyrae', + 253,#'w. Beta Persei', + 252,#'y. W Ursae Maj.', + ], + 'fittype':3, + 'skip_list':[234996, 164830, 164872, 239309, 216110, 225745], + 'percentile_attrib_skip_list':[], + 'SVMrank_results_input_fpath':"/home/pteluser/scratch/evaluate_eclipsing_classifs__SVMranker_3of11perc__trainset6.results", + 'SVMrank_allow_cut':0.1, #30.2,# SKIP attrib when: merit < self.pars['SVMrank_allow_cut'] + 'n_attrib_percentiles_cut':2, #N of percentiles to allow, of 7 percentiles: [5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90] + 'trainset_srcid_list_fpath':'/home/pteluser/scratch/evaluate_eclipsing_classifs__trainset_srcid.list__subset6', + } + + if 0: + ### For generating pickle & html files: + ### IPython-Parallel mode: + RunFitEBParallel = Run_FitEB_Parallel() + RunFitEBParallel.ipython_master() + + ### Single mode (for only for debugging a srcid now): + #run_fiteb_generate_html_pkl(pars=pars) + import pdb; pdb.set_trace() + print() + + if 0: + ### For generating parameter liklihood plots in order to choose param cuts. + new_pars = {} + new_pars.update(pars) + fpa = FitEB_Param_Analysis(pars=new_pars) + fpa.main(use_trainset_srcid_list=False) # use_trainset_srcid_list=True # generate small train-set arff; =False: generate arff with all eclip sources + + if 1: + ### Generate classification and a summary HTML + ### - using an existing WEKA .model, test/train .arff + cas = Classify_And_Summarize(pars=pars) + cas.classify_and_summarize() + + if 0: + ### generate additional JKTEBOP template files, to better explore param space + # when trying to fit an eclipsing model to a lightcurve. + generate_jktebop_templates(pars=pars) diff --git a/mltsp/TCP/Algorithms/example_1_ajax_retrieves_json_from_phpmysql.html b/mltsp/TCP/Algorithms/example_1_ajax_retrieves_json_from_phpmysql.html new file mode 100755 index 00000000..b93a7a34 --- /dev/null +++ b/mltsp/TCP/Algorithms/example_1_ajax_retrieves_json_from_phpmysql.html @@ -0,0 +1,30 @@ + + + + + + + +
+ + + + diff --git a/mltsp/TCP/Algorithms/example_1_givenpost_mysqlqueries_returnsjson.php b/mltsp/TCP/Algorithms/example_1_givenpost_mysqlqueries_returnsjson.php new file mode 100755 index 00000000..932defb9 --- /dev/null +++ b/mltsp/TCP/Algorithms/example_1_givenpost_mysqlqueries_returnsjson.php @@ -0,0 +1,55 @@ +getMessage () . "\n"); + + +## Get the column names from table: +$select_str = "DESCRIBE source_test_db.caltech_classif_summary"; +$result =& $mdb2->query($select_str); +if (PEAR::isError($result)) { + $result =& $mdb2->query($select_str); + die($result->getMessage() . '
' . $result->getDebugInfo()); +} + +$col_names = array(); +$table_data = array(); +while ($row_array = $result->fetchRow()) { + $col_names[] = $row_array[0]; + $table_data[] = array(); +} +$result->free(); + +### Get the table values: +$select_str = "SELECT * FROM source_test_db.caltech_classif_summary"; +$result =& $mdb2->query($select_str); +if (PEAR::isError($result)) { + $result =& $mdb2->query($select_str); + die($result->getMessage() . '
' . $result->getDebugInfo()); +} + +while ($row_array = $result->fetchRow()) { + $i_col = 0; + for ($i=0; $ifree(); + +$output_array = array("table_data" => $table_data, "col_names" => $col_names); +echo json_encode($output_array); + +?> diff --git a/mltsp/TCP/Algorithms/example_parse_vosourcexml.py b/mltsp/TCP/Algorithms/example_parse_vosourcexml.py new file mode 100644 index 00000000..e1756d2b --- /dev/null +++ b/mltsp/TCP/Algorithms/example_parse_vosourcexml.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python +""" This example script parses VOSource style XML. + These XML may be generated TUTOR/DotAstro.org, + or XML generated / used by TCP related programs. + +NOTE: This requires a couple Python packages: + + python-xml # Allows: import xml.etree.cElementTree + +NOTE: This also requires reference to a PATH which contains required Python modules. + - If one svn checks-out TCP, then just add a .bashrc environment variable pointing to the TCP directory: + + export TCP_DIR=/home/pteluser/src/TCP/ + + + +""" +from __future__ import print_function +import os, sys +import pprint + +sys.path.append(os.environ.get('TCP_DIR') + '/Software/feature_extract/Code/extractors') +import mlens3 + +sys.path.append(os.environ.get('TCP_DIR') + '/Software/feature_extract/MLData') +import arffify + +sys.path.append(os.environ.get('TCP_DIR') + '/Software/feature_extract/Code/extractors') +import db_importer + +if __name__ == '__main__': + + + #xml_fpath = "/home/pteluser/scratch/vosource_xml_writedir/100015915.xml" + xml_fpath = "/home/pteluser/Dropbox/work/403.47491.770.xml" + dbi_src = db_importer.Source(xml_handle=xml_fpath)#make_dict_if_given_xml=False + import pdb; pdb.set_trace() + + ##### NOTE: + #print dbi_src.x_sdict.keys() + #['src_id', 'ra', 'dec', 'dec_rms', 'class', 'ra_rms', 'ts'] + #print dbi_src.x_sdict['ts'].keys() + #['B:table13168'] + #print dbi_src.x_sdict['ts']['B:table13168'].keys() + #['ucds', 'm_err', 'ordered_column_names', 'm', 'IDs', 'units', 't', 'limitmags'] + #print dbi_src.x_sdict['ts']['B:table13168']['t'] + #[1165.7560000000001, 1166.7670000000001, .... ] + + ############ + # OBSOLETE: + ############ + + a = arffify.Maker(search=[], skip_class=False, local_xmls=True, convert_class_abrvs_to_names=False, flag_retrieve_class_abrvs_from_TUTOR=False, dorun=False) + a.pars['skip_sci_class_list'] = [] + class_features_dict = a.generate_arff_line_for_vosourcexml(xml_fpath=xml_fpath) + + + pprint.pprint(class_features_dict) + """ +{'class': 'Variable Stars', + 'features': {('amplitude', 'float'): 0.025850000000000001, + ('beyond1std', 'float'): 0.0, + ('flux_percentile_ratio_mid20', 'float'): 0.23181637707700001, + ('flux_percentile_ratio_mid35', 'float'): 0.43537035954600001, + ('flux_percentile_ratio_mid50', 'float'): 0.60144542283299995, + ('flux_percentile_ratio_mid65', 'float'): 0.72181559826399999, + ('flux_percentile_ratio_mid80', 'float'): 0.88061936278599995, + ('freq1_harmonics_amplitude_0', 'string'): None, + ('freq1_harmonics_freq_0', 'string'): None, + ('freq1_harmonics_moments_0', 'string'): None, + ('freq1_harmonics_peak2peak_flux', 'string'): None, + ('freq1_harmonics_rel_phase_0', 'string'): None, + ('freq2_harmonics_amplitude_0', 'string'): None, + ('freq2_harmonics_freq_0', 'string'): None, + ('freq2_harmonics_moments_0', 'string'): None, + ('freq2_harmonics_rel_phase_0', 'string'): None, + ('freq3_harmonics_amplitude_0', 'string'): None, + ('freq3_harmonics_freq_0', 'string'): None, + ('freq3_harmonics_moments_0', 'string'): None, + ('freq3_harmonics_rel_phase_0', 'string'): None, + ('freq_harmonics_offset', 'string'): None, + ('freq_nharm', 'string'): None, + ('freq_signif', 'string'): None, + ('freq_y_offset', 'string'): None, + ('max_slope', 'float'): 4.0, + ('median_buffer_range_percentage', 'float'): 0.25, + ('pair_slope_trend', 'float'): 0.0666666666667, + ('percent_amplitude', 'float'): 34.639465635699999, + ('percent_difference_flux_percentile', 'float'): 0.0384360559729, + ('sdss_petro_radius_g_err', 'string'): None, + ('sdss_photo_z_pztype', 'string'): None, + ('sdss_rosat_flux_in_mJy', 'string'): None, + ('sdss_rosat_log_xray_luminosity', 'string'): None, + ('skew', 'float'): -0.21906825572300001, + ('std', 'float'): 0.0138923614089, + ('ws_variability_bv', 'string'): None, + ('ws_variability_gr', 'string'): None, + ('ws_variability_iz', 'string'): None, + ('ws_variability_ri', 'string'): None, + ('ws_variability_ru', 'string'): None, + ('ws_variability_self', 'float'): 994999.20798299997, + ('ws_variability_ug', 'string'): None}, + 'file': '/home/pteluser/scratch/vosource_xml_writedir/100015915.xml', + 'num': ''} +""" + + d = mlens3.EventData(xml_fpath) + ### NOTE: "d" is an object which contains xmldict.XmlDictObject components among other things. + + + ts_dict = {} + for filter_name, elem_list in d.data['ts'].items(): + ts_dict[filter_name] = {} + for xml_elem in elem_list: + ts_dict[filter_name][xml_elem['name']] = xml_elem['val'] + + pprint.pprint(ts_dict) + """ +{'I:table6235': {'limit': array(['false', 'false', ...], dtype='|S5'), + 'm': array([ 16.2127, 16.2109, ...]), + 'm_err': array([ 0.0061, 0.0081, ...]), + 't': array([ 49086.86378, 49087.78441, ...])}, + 'V:table7886': {'limit': ....}} + """ + + + + + if False: + + ##### The following just kicks us into a PDB prompt rather than exiting, which allows interactive work with variables. + ##### Type "?" for a list of available commands, although print and most Python syntax works + import pdb; pdb.set_trace() + + + + ##### This gives some examples of access to "d"'s XmlDictObject components: + print(d.data['ts'].keys()) + #['I:table6235', 'V:table7886'] + print(d.data['ts']['I:table6235'][2]['name']) + #m_err + + print(d.feat_dict.keys()) + #['I:table6235', 'multiband', 'V:table7886'] + + print(d.feat_dict['I:table6235'].keys()) + #['ratio32', 'ratio31', 'freq3_harmonics_amplitude_error_0', 'freq1_harmonics_peak2peak_flux', 'beyond1std', 'freq1_harmonics_rel_phase_0', 'max_slope', .... ] + + import pprint + pprint.pprint(d.feat_dict['I:table6235']['amplitude']) + #{'description': 'amplitude', + # 'err': {'_text': 'unknown', 'datatype': 'string'}, + # 'filter': {'_text': 'I:table6235', 'datatype': 'string'}, + # 'name': {'_text': 'amplitude', 'class': 'timeseries'}, + # 'origin': {'code_output': {'_text': '"0.02585"', 'datatype': 'string'}, + # 'code_ver': 'db_importer.py 1572 2010-07-06 11:40:46Z pteluser', + # 'description': ' Returns the half the difference between the maximum magnitude and the minimum magnitude. Note this will also work for data that is given in terms of flux. So in a sense, it__SINGLEQUOTE__s a volitile feature across different datasets. Suggestion: use the new percent_amplitude below instead. Turn this one off__qmark__ ', + # 't_gen': {'_text': '2010-07-09T23:54:51.292070', + # 'ucd': 'time.epoch'}}, + # 'val': {'_text': '0.02585', 'datatype': 'float', 'is_reliable': 'True'}} + + + + + diff --git a/mltsp/TCP/Algorithms/fitcurve/av_lombtest_tcp_source(32data).png b/mltsp/TCP/Algorithms/fitcurve/av_lombtest_tcp_source(32data).png new file mode 100755 index 0000000000000000000000000000000000000000..7cf80140d6563fff8051b615b02d4c91853b1b21 GIT binary patch literal 32018 zcmeFZg;$pC5#hNDGQcDIpEgAl(gT z9^89>-&tq<&L42rVXeJC(dT{MJLaCb=9+8n03`+Kt5{@MXlQ6xAIM0mprK(8O^m&l75wMC?Y#$Tm*B_s(sLC2e%VS!%N7j{M<4kgdX{*m2^tzT+5^eEYL0PB zqi(Jp+ovt-EzyIzH%TOlyEVU;1>)1)w^8=fzP0E@>K0DRSVt3C|4qt`F8SUs-40DH zWtn_cwtF)vX`j{T2J2*=mAkon)YN|+`Z~K5*EP2!vRW~0u@~1RIOo(UR=&GfQ=l91 zLJM{F<9OF|6kQVeY4*rM!#n#aP)4Uc`+1Uj?(Cl=YwlzI=kd2#xM$C-lMzv$Ju}J6 zbm#Bq&D1>qKGgsJzX%V{U)bt58ag_<-Rjur%IzxcYI|1r?G3qL_sVTr+DR*9)yxTT zajkw9R8|V;vXR`GO`MaImL|Z(ZD{nqXzRK}%&Lux`+JmX)1wPMvElIA{vs~kx&vEe z&_t8}oZ~QS#mGHlXX#gI&c3Gq^w}UZYvhS zdjNY($8%m*vU$QL2E)d}k@!yEM|Ez0bM-v!@aAU8bLY-Is&^NSc=3X?yRY~~8%xM> z8+-lQR*$0X@pivz?jz3ck?e|@3h@JWUonrVT{LGKndjvT49LUKt0hFQn2+pl@xWY5%u3&faXS<$Qku6?_0aNiLe}1EZ=R ztQ^6O8?w)y(bC<2^Q~rF{A4|(z20)XE}rk@kkw@KWw2?-=}>7I1%=t#-La`);T38c zn%C8u`LXFE)WN*NzKc(Aq5;}1JEy;$}rLTYzqG$1G__1Tv| zk+lX4wU25668_hUO#7H%a`&73uCg!IRw=EH)ee4o#f&4eh88dMik6z%(`B_bvO8Ut z+vCKQUM}iRD6LfS2m^er_{p9(tj>#Q2?7EF33GE6{t+vT(NC{Z)v{I0M=C>;CH#xw z)0Ll z=&BfZm;Dk*R6@QwQpMeqsc5vnF;i+eF4p#P&N+h3b=APYAmHuWbe#%|_9#v|*`FJK zatgSfHlSt5MSte*5>chDl9I&YzS@Y7XYCnEC(UKro5iBHT6dV=lCU}zB5pWd=eD&v zE-t%{u9SQaGr{A;2{BELJZ;Q|!4jirVFxxE8k#p`yi9HT6=TlKoSdBd&L^$!8Q`Sd zF*i3apTzj4!J(Uf*ZacE-lMs|p!)h2|7#S_!0vdAe|QSL`tzJJk;eo-{bBgC?;jWk zo#hhTcC?r@^V>(NY_V^apk(wjDZwemR_U_ABGw+n-Qc%4FNf3UD^c1x2sVxeCv+mg zWktU$LG)<5UvI=|E?)2&Hx>?#(NL+0lkCyYqY6sO4L-~*DIrjVPv^bwXf3^`B z17owOS-&5_qV>7RpoPo7up^q=|IM2#DXFR4U81l45RSWUUJYl~G(6f{7ZiJP=MM5! zjB7`2}H0~pY_kC<-XM)^~@3vAY$p6u46-Mn?{#o}?*y9g0t zyw)4YrmRcMk7cdoNVGTUDNwX-}tSnI;SJ7TLC;q_<4tp0ds*w(F}vsRCm*2V;J zXRf_fRhO!kF*bIqut)R3QdVrrx`E&ol1E?3_gfOHf)`nt8>mKfM8_eIM5k77I!&Mn93S zo_6q$Ki}avf8oN$d}>HoTwL5s^}IZtij7X;)oErIFi!5s$z!n7;t@kFjR^HZGJcCI zQJ1Gkh;^ic$@Sr+?K_Xv3-k9I%(h3jCyFOx5i!Bmg)Y~e93R>qY?(OkEJYg>v}LPi z4ip*q>u5yoDu3A)?=beDErQkLM-sYJ5b-TW#sK+PzV+kXaofE$ z{Xin-3k^}629L^2iKf23oeE;FOM390o?OTdb$T=>UTW4K{3VEFPS6ExdVi^;D@xRb zkAKXOjzY-p_s5+4$#0=_xld|iS}0xKfXl`BQK&DWU25EzndttoCqv!@mY$IB4wrMj`lBXxdSp9PVW|kmaBs6q ze1D~Sbq~IHeyEIDHB+H>iG`Ndy$K%=Z@5yIjhUMIcgh_2t8tquT@7%`C8Im59;d@_ zx*~|k$<5)U=D;RKSEOfV>UdwoDbKGzan1pwh-jNB)-E@Xo;iWNDSF~KftdrFtO4OI zHz|oa=V3V0FNg|ewVR#78rs_05t}$vV&-3(n;#J|sTG1PTJ#m@jXUp-I^>m^^=q?5 zwvh?iJg<9l3Z5cwZOtkN;5pWi0vhn!Q@!xD8$`I{`BQUsuw+zViph> z_^4Ts!0UEkx7hF+L$Hqj=g*%SckXzGM@2cdUV&et$NiUwEA+NTLc|Wf1)@-e5CDuZ zFI>=0myIm9sNL3B+@DLVs5@M#cCEF?!}FLa&egqu6Lf~n2st{?t5EM56uS%b#P3N+ zFg~df*k0^6YV^X4tkHuA0~kfneTIiv2f=i%!{8=K1+1tYMqiPD6Fq<>va}k$SU~y&*27q@+Ojre*s ziLnRUi>m1li7cCm5a4>_c#7)u+ejr3Cub<~P2&!5?3TuAV<8~oQc_-vvNwXDd>!T- z%lC3a^7*jwB@H%we0&Ik8Q|o!f*qEJ!qd`j@>!0#wzd?qF!yioOTkj5S$(%WWQUl| zr2g?aF%=pdDcBA+^TA?YfB-~xk~+v>!MkQ@@9MuQ!`5Pp)cTh%^nOF%~U zJxe*&c%+gOiBNN$@oy-EBksQ?TOTw^{F!tYBV>jcnfN&3ng+ktC_Nd9uam(1mWkxRkCJ=MAxuIw@o1}z>AWSORDdhmX7m|Gtb>bEI?2r77lK7 z#hf&JnK7U-X3hMX>8cq1Fm?C~0oT34QBHEH)d%*@ip4!HVc}yTOIr!gGk0$a*D?$e z*)`(gMr7&4R^S9o zLC7;aKG=?K=}Zunb#)badxO8z`bjZ+4{ok5;>2J9Hru(otiaDAkrr&B>C>ylC}9T+ zL&f_cl%lAhAOmpWx-QFQXs{Y!A)Vmw<-j2fl$ntjv;;%c^9DdPuwRU}4aCm#+5>;XX3SDMnv$9n3kGMsmM#RNG(qkx=Cm$w}Q zvEBteDmBKF@VlbljKYJ6qXa=z3@0Rb#WI^fMx z^T9A02|wg<;V0k}P$qOKf%Eiwg&@04!YYrf=6*c;mtJNOE%iLBJ6wkiD z3kZ9NqS5+)+pD#3{7vD1JMRErR6i{!SVn;k?kTEZw8t&FtvgIMc+#e-6e|K5pm%od zET#NC62v<3{y&y;4%}wFs*q4B?2AI}o*$wB2-8fW6~RcZ5a&77!hYJNn%O?pmyNMI zg5fZJRX+Bf(!1IMMagDWBr&)5f42!cbpVUx82q9!n!AbwbDxo#ZD;C}8sqK9Wcf84 z-5wXtH+*_kXiiElX1+4~sf_XdO5Kfn61BT0sBh`Wx)M=eOU2ffO#6MjMbI9DxjEa& zUJr1%Dp9A#u~X{a6RZGRj|iq0fq_Tgzj<2Ly-t_y=+BU!9gydb9t(9@d0ohHsdo<( zPv_t7dKxE$xmu62T7zNMA2UhKg!QMdt=93j`gbjfL=}~%U$A<(i_J-oPO4i6Gu|$c zn)F}GuNzwVKzky+%)6U~W_|tf4_eyDuHvVQ8c~7-vt9g6Y1-vJl%mvJ-CGuWAKzRV zDDNPom5uxy!8*JBtH7hqAx)X?wo3C#8m({QklBhd`XtAvBq_;_)p_M8?iNDIYWqgs z{yTO&cB|L=^(-BPy7rD8dW4JZ7+p6m-(-*&EdEixygwEiNVKfLs3P#Msob>e?vckh zig);Dszb&`d`wD)Q2Snb^D<60rvy3?_*k|$FmJ{t~WoNaRn0_d#TafwP#QhY`)yQ!++ zv*=j_h7vKiA8Hq+EKpRqx7%aBWB(&x$>mNz&5|)%?OM%H!d=JOq5T(}F=VM?x z3a0c8Aefkqo!A-HZ^fVQx#)g`_bd0cG*#`Bs7l9(=*@nenGR2$wNsikktLU#N&MT1%i@Ms|%JX5k zlrgHchfKl2r2fdpJ$gKxd1CrOmfFIRQr@q;4zZiGCkp@A*rejlvaopaQKVjy0tI*T zpP$mn_k6wF*sf-_CHATf6i&F_-B_+LeE+r4d%~B5T3}$shjvHVr9+g=>lQ8T6TlgU zUBSYuKBj%YxBHXbT)35;=M)@w2EEwD?ldiIFyH>>8bU7zv3sHceSVzkiF2!*_ITw_ zc*|r?FUBOt$1JHdj$)RQpxr8p?;%wFYgRqO)~Cl~u}b+9b}Pe07|uI9*ylyI3Ez-n zq(2;tf7o38&%V*tt$eKEMG611$X4vk{CUEYkl?hN!GD62tcnU681rY!SflfqnN54^ zg%fj9H;Jv+1?97}%LR8wHfsYz?sd+1!7*8_;|{vq+#EII>~YY#@|<>3?JVPa_g=$J z$f_YXV(T;Z+KBDzEmX|6w!Zh-eLqQSxh5%ym>QM_4I{UyJbawD<&~=etjVr6 z+FXCN5FqnpQ1oJRv7GnjLT0kL7AlCFStlS)*-t_!Vx$sB{-8ENsNI&o%4Y z-3>yq%P9Cgsr`MtJ5kiq9w;+JbGR}1SkC!-q+ZM|7l&0o7u1{U6ScP@r9>VeQ@sS< zdAe<5#?Y}NhIcLTG%5jyh$@oZ_U`Lim%)W-ZyYG%ut|%S6EV8hn``3m@pEQjCwgl~vc!+fkZ6hCI#IcJEcK5A z@egmV{>u;*)_W8Uz4m823@>#Q>f;hVcVH?CVhBvb5%bJU@FHM%+J1e0^hO{d<2!%i z_1nl&(mbN24fA~wtA@|1XtXe1xzp&sj zjv%v=$)J;#ONAx$$-2FFU}oIiyrTAuUs2%$`(v^UdGGDTiTYFDgKhmiD*@Y#hJ<^P zi^?i+TT;^tPmgz< z)*3IG441R6*6vawc|2tOMn977BI$hq0fY0px?_Sy<98&t3P7Qr0`9Y0{KdNI7(~pv zx86b}=(t7=X`%zQe7sONr1St7&vGY(ZUdU)8Zc)DkmXm26=?Cd*?i9FeE?YV`-E@R#*%5TO-@iy)oP)hh8D_c)FJ{rh+O zRGxO(v*GfWIa zKOTUk1uAdjkp*6;?EZ-hcadxR_3NCU-;`*s(716+Ape1dPl23tkj)23LA1g{+QsuLLuEmbFc=Ca zL>>mB90OlO)39zY#=4R4S@&2t(__-syf)~D{x1>a&|aG9>7 zJu&|qTyGbOUYM?t@c*6Q(w<@Y^QU2$Ws@Ile{149T+~}%B4%n%ygz;3MFt)3?%`Ee z^_-ZE)d*6#ZQ&Ia6{+Pu3S};+32UM9h>LvU8~|*S3ropkHBU!RS#ANTjSkft@t0Y& zpOcyDdA$7kQ!yUvmh4dc!|9DOi#FUKKK;=JSY^=-1Ac*&ar zEOW-&n{!=8CrA5ELjCdO2EZ_8X_qlwzI-{l1&CCryCL+o$i_Fi5t}yFeYsU#roWlz zw-;gG#e4)g+l(afx(RR7=XtBGEJiVr(x1`d z`%ByXbN&#F{?8^5Qk ze&4PGDv1i{VeZBLf-VvJoh2>E1x+B;2M!alYQ34fx1Ctk+(zvR-4hd5%VldF{Dz(W zfjErqfyBPAF**u!7YqFDm!F;-*|!hJrqRSt^1>(zs#k={Uk*pSG#R&LHhK)~4kp!r zLd5h(U;s6uxnAS~Pu`|o>s&@eKwto58JLYz^jtIWT(4ih{sq-3?vQvv+piyWD)P^$ zEZe!xGO^<=)g16t8cIs<%7DrV63eW+MQc-Kzg(OfYgwL~BE`Bm6UoZV+OZ-@I~EzL zuf?yo?WG<#rD0H4sB+stO0B@cfrat8jak8Ci(zYE#t||O0%dN9_{o5Fg+)B?v*t?( zJ!bkVH@ZbHq{8IVFDVx7QWT`U9Pm#nDk@p(ImGMh>vk(6f}3%`lXG!#6|3dmy?Ym- z2B4DBU16!G5HBPJQ9!HQoD?E=$y7Q@h9)9ZpU=o;0y9hFDxW2v>~i29T_m=4g>Z9* z&*9!qvqxqAHzN_}wqg4gd~xflmn{qlj$X*w0mjq2GhP^KP>@oq&-Y~FH2LFHOr<-1 zu)pVUec6YNc7MH%-4F#;7{hZbQJhLOm802`OZ))PSj|F;m%owUD`0K<9&Y$3Mdq#& z08pkoaqdU5N|ixbME#NV|0D&;J$2aF^3H%eb(w?z)e%QTBG^hW{~jNJM!BC%W^W!gp zjVV%wH2$6OG;Ezq+OCrwD5Z&x=nbre(`8g4}2u!5i(_gH!q^S z45nqS^L{6!rkx~ZBRM)8x0(sh$Xsu}?6`2Ni|7cD+#o<&Z~{@dHx{EA@T>)pHNEys zE2H0_{kr4+iymrxye^w6xkkN@gjcRVb-qWhz_Ry+@`5CIfmZy8w6q@+^UCmB&LzD1 zG^nUI)3CH%IgR2#f8vCh;Bq#>nf*C=yp8Gi^2TlR|J4FyT#DvQeY!h@d^-ZDFE%8$yL0jtESx+gek$f$flJ|>r zl}+yzZ04wo#Os`FZN)6r65pKIBC*|MC68q9f89S8%~0S?tP4cdiXHu6`8oVCe2_WK zaox*Fw*#G#{2xR(sRxKZfT3L}q+;AJK@{wUb`IHh7j_==OR^DB6Iyi-eH9y3z>tSf zN|Md=3kw;)qc|}PJ5<(bCVBF7ngWT|`ZTTjAFtIf+z?~1-8dYpUD7J{LI3&FUK(FK z6Iq)JCMLKPS6A!IzD7AL8iEbBKIq9PG`zYrd=Wex@QVQ(tE=zFca1ly2jmb{LS%Y+ zqd`dH(f;h>gg-JSlAa{=Tpc6lJ2CwJ-WQh@K8Pa@Tq&R2lfFKP&iERt$yhE~X2O1l zMN%sIay~Zko#$zz0g^Whc9yv%in_a>_Ayni->)W^iJ$c(WcepWAbeuf*&u<_*qy#M z=JKN`75PlP`*9y3&FOJLblQ`GgwcTJYo-NN(h`M|k~P1#Oe#;^AJvhI?cMp}k1D{r z>bt#|Z1aMf;dvWzHNk#4%-SwXS%P5d_ziNZa1IyQ=X+bP3_hy4zEaf!WMf7yr zG)uj0iJ;gbel)=Ky~f;z9+Do3%y)^?(4ONn_Y4vD<9oRT)5c7eBQ24%OuhdjKb};3 zp@6M|L?Xv_pB*t)N}G+eh2?=7(g;>>;nh+w7Q(c!TN9}vNiTIu^d~<1+B0m3IXH8c z3PqlF-?a1pnMNP_d7}BUs_W8#{;V613E~XaKa?1C)QPRHbJ%9=SJ%%grCyNTSrI*5 z{nMwl0hqF`z97Fd9g@*=%h#xBRR+j~4gH=k4Pt=PTCRZ8E-8|2tc(isX3qCq8J!3b zPg10+R&|o@DC7_#7yTag;X~V>FKg*35?H~`;0B4xP?oX}IGZ@#4_aA%IxXfQ&djoi zyJbwfcD*Z$d~z5G<^l6 z99FBUC52m<^8d-bl0M!*J6L8(3D8`RX8$U%`eSSW4&{U{-%BH({^|s zfPAi{vWeo&4OaEInrc-Q4^GtF!$d|}(Dsc(c9ZQf)?$BCUd2$n%!b52^iHSE9><7% zETfP{zRx>ccw9z*9Vi>BJKQ&9wcxT5JIRn{IZURRb{tGP<0C6%PqUFT0QdJ#o% zHZs@f<-GZ)Q_(4(5giBRK+tI z+<2InUeT{#&!2y+Q1~s%$mFjNLe;wOHEucbSeV;0u>s8qCtmSjmtV9{HljgvcOd@0 z&A+IfLvrzJ`uc`W?eeina-_&2)jv@5|0Yvna4?tHB+ow>FJqJP4-@2)mKod80REvP zHu?V5v&SJwf=5i1?&wO*DFFLDiif=ivJDUK_ZJfVK`vAXWJR<)pC+-m&ok3u2-$gx zpMtB9X;gu5<8C=7a$T7CYY3ppB?UU#bIHjWmj+8(So}gm^&MzKy&(BN+sxIWPed`i z-WRES9L6yt+h9_(bF5nDplYfydqaF|g~ulNACs$@`$1zo@WZvc(t?7J8S(a^OR&Q3 z$G?{=Ce~Y)73h+7Vye&l$uoaIxevKXN#DIonv{@?%dylOs3u8p#s8?``xhg*{D*rJ z=_;nCzcAb7zr9%2Q-u=H(~gOLS7%MG~+*ee$<)v0QUwqw;{6O=KQJJ*;l^4MVzY)9w5$Uva{MaRSxh)7OSQZ}}(LrSIVw%w-{ zte&ORNML>Z%X8j%$9zNvd^mmc*C7gN^7%7U+S@b8Qf`6+LW^n8fL0;`I-RCh{da?i z!67>g1%r^v5cFwVkPMONxrPE8v$;Q*9O zqpW;cE`+??;uoxohpWp9Q{pzTqCNH_#V>-?(`4|>KKoq8Oy~>XInPW2(>s6hVh>H^G~{saG_HWS|7c&Ttxq4*W^);xNMsG&wJJ|3evWL>*s z-Z}YPZJU&$reJF`3d7c*8X{!Ycq8U^;3$+qm-T5)f5aJy_Q^4-hN-c@Sr^}ES>#`w6=6HXw*buc)WPnS0*{E|M{+l?=Q5WQVWu|@4 zAiyKV_=bi%`L#RRNRbzq8qt{HYmf(r#>L51o${Kq+pRpZvDuJXrTSY?Mid=-aAY8* zn~AloONJt``FPzZUG(wK|2qRV>v`#^`~Lm=F+>IU_(_jA&qniWyFXTn53=F}(YxO4 zHNbTkz+$@WuB3aMo?M|6iMo1&??;J|A|iK#oLDqskj*)X&UPhsft*nEL4|$_|0EG14-R;7epBNM3~|ymzw+SH^43>+N`s zPQ}WLxz>dgBD~$avv?Dc;ku=a#G8SsFC-KGRMbLbAJtxG$isxGMofgqTsJ#h4;C`3 z*mTtfhJs@-!h*hilYzo}KuAcJjqA?RppTzlH%JLw#SLMvay0U2|RVqXf-IS!h)#&}(o$|Aq^!)!l~=vEb0qiissaZf_*W4i)}4 zZ{Dzs8Y1dT(3#MJbfmXe4d_@Im@g^U^Gopf#*Qo=V=0smL#5k`t7G{kqPY<8Y3=t8 zw?xEp>MO`Wp<1iU!6hR?&Hl0_Zs;vgDadvphXHh)VNflB!c*7Y`qYBnCH`U?t)W|8 z%DQZkd~AfR{v=O4FB7!05B`n4lOn)aF8*5URb3l0v(NmSq9Ky7t{8rtuW!BAr_^1c zIzcZ&4hbf`0#8%1|Ja$fDpmk5!Hw9k>zBeD)Qj7S+q-^z3F>hDgy7?8mw)onuo5EX-z(J@g&dEHC57XIP=r45!pX{Xs6el1 zZiosx|9WlT`jjDwUK>|pw@IcgUZ@wr4eZhCSn=vtCBko4|Fu3&3kyH83Csu3bjt5+ z|3S8!(e>FgYO%4SxICTy6`s1g|A5xH+O>0XQD{^ixyVY2%=9vH6Ed@2tvkX80%Jw; z42PCpDL@Hy*En%l#6?@>L-204efYuC7kgqZFdg0#FzVEiEI4=(5LQ$CVIPonNqo|20SRGJTAi^$Tw(^N=Nc;N=CXaslgeDXB2B z|K^r^@9R&v+C=<(8jKR}hSDN?7g~QfPdESLzoZOLCqPetl(e+vq=NX@$UUREky9n0 zE_wdSb+pri$Y>neNw&W=>vfXh^1G?`GcJ*GH6x(MhSR7k#w`XuR8a4S$N-+R|C6GM z%gFOGe>{J_A%az@Gz$q((<<)!n1A~Hhb_EA#QDUVj>7>@u20EIOD=I)kS~qB)Tjdj zg?92re$|E9PG3c_*F^?!VCv*VLF5srja5Bb-N9hoC5{6+q)5Fb*Yj?r}y+oWWaM!`*?nHu4$-@!}PsRv?O3yN zJat2|{As8E8mj>dw)3`^O8W0`O(b`rO#o!D@5xBhxU_oHh7tIbW)R=Le$m#Bn~PXE z@&rEVWlqkuc5b9tlZltv^Ve7jiJ_`lW)@r2xH&tBEVan;^n=P7;!BrbU%ioJtXxgt zbe7#frs>$+qbPC5bMR0CCQ%QZN0qJqFyCJNDL4^7pZ*uDZFgXXh1Wvqn-I8>Pk9c!UePnn_M8>#2_QT=Rj z6_m?!N&U(!;z<*j&yjh}2>j_L(A(_Sv)b%1tQzeS<96`?UQgHf_njyKJieD+7p^WT zOr4qK-&%bEsQ~U14~n`IGSgqBh$|5I8O{BpvPkQe^)TOUWpJk}h&>(Tsz|a8L;ap@ zd!h+ByD}?Y-uh!A0#;}ju0SF;ApiILxJsEa0iU3?>b7ZkTe}xI6_a+V84W#(P100% z4|nV{t6cx_rh1$Y!L`he--{Kp*5 zJU}-CM&h@;q94gWbk)}XdB{&~**n8<#Kqn-l}+DOr>oI$GR^GYRY z)dh&l2&V9QwKTvP!LHW{;zK}A=+wNt>f`2ku{HY{gA1--uK)>8tHNPXef7dst{f(d zaWL9-V(A@E=(Pw0xMl;QO3<i3+%4ING*GRB5`9P_KuV;gI7yQo(9745 zvj9TKclRzX$wiml&nP_mOzSStIxj%GP;zoIA^Vd!L=5?~(aTl56SVI#&|0CMqp^MG z;h|tYn$y%<{_A|^*C7i@fpU_TMGn-R#@!F|TDZwYoj)w}WWEm#y$g*}XsQddebL-T z#(f`&08c-I?jhH`3I7l5dI|Q+Lq+b#&Wc}%*HM)Md(#9xo64U`5jT*=@o9lx)%6XP zC4JiAM}X+h3=EL&owi8!OsEP=N=b2goE(XWe??jvkOhGTtnh-JOm^!L++0wCBJD;X zI(Vq9O$NDw`RJ!`NcbR}CiWD+kOjD38^Hho7Nqc8P&5OK9+7z{_y1DImpU=ZmQ{?K zUenKdd}F2R;%qzk64)z46B8tq2pjH1Ga*N=3aaPOpWGyNp=f+-{w7Z^6gcFioP4< zDNxO9b=w`i*Z>)CC#=RkWC5GJew}Qst*sxJHQ9#OZCk?Lzptfua8obrz5Hqm=x9KB zd-koZ++7V9sUU$i9M5LXFBDcDyUD;XC!oT>zFZHDIFLG4LR*DNe|~%mmyqw2^BqLv zT(>ugZ2=}W=6?7RZMHLB7FHU_7>xeM4v*_7Eg=O*Wc~|gEx{C+8)R6EJ~Zo8P-u#f ziW4HT6NEMbej>(mC5DZb^^KnBKu`tuKXG}Bi0%X2xn>8gMXAvcoeT7M#fiDaOiw?D zmK525wzvSb|K-pHwL3#?&cXHAmoK-Dh^&LI!Pmz}ckAT8xqM(&R@S*z1{+S0f-VgL zXtdhyJ9B3qYI$UGQBR$xR;zKA$X<&h=OCmGSew?O$SIZOdT8a~G9TbT$SaW3!vrwe zeYRjBf~mw6l$3Bm=~CaWIUy3va;K9~BlkL-bPLh@Fnv@&0ArG*lPZYO?N>&km-niQ zJOn#%s(t`7B^o9>t)dXe;o@Fuf&q0Z#I1VlG!wjghbHRW&>0W3-7fd^4!V^>>SJi) zkk-{D&(6+1kBRw$vR>^Fl+|v?I@GxxLh*UrydsiSCj#pJhQU{uu8=Exf;Z&SYl_(T zM4tZ`I$Fe>cUL;V^O%56<0<{mmX?;DN^66Hg6Ugfnx_XON4xcgT{u^PX~Gl6Jm1hB ztyGXeN+x0!F&eEvz%58{CMWqNm1Kc6dm=pWshY}gD>4&M~KOi3%Dl;n~FJTD+ z5^;UlvL26$s;ke}T*ixT2feB{=9@=kXy`=p%{f*OpCAosi2Noq!8!0EmFv5Ur~Ef6 zz<)=NJ{5J|qGn?YhF@M>n|LTMKl4k+at0cc-rV31hNdAdr;X=G#DESn6Oaw%cjdU< zX=XF)ztYZ!QlK}a1?JZw zP31NnE?4WaOV7!P$3Zgq*%w=@(uxM!XW=c-5fa|M1muqv+h^$Pfo8!k&}_3XT)_@* zI|Y^qG&oBs5NjVR#Cs)(P6P`lIar>B`#2Jcml3|FbK)KMeIuhDn&tc-nS+G)$jI3u zbAGUyPopT`VUNN&_wo1N{EW^1ym}dFhy^dnqE|QK_k1jw61S*nvn%#ktZx5;X)nSv zqhvJvuicFo`ccj*pf7y^VEI(#3rBwQfd&ePkv%aU9sYT6YLaJ)aKU8&uD@+<$b zEa>bQb;?|-_J`F5&Tmv(2(O`n4ZFf_u>f5I%xCY?kJp!ria>qA zzchdj${FtqjakZPC$Tlw=RE3-Po;q45~mB7Kw0f9GtAa=VSR7iy$fujS} zl|wi53ErzFYYn_d35ylj+qiU)2;`%k5&p5xD^YDTw4$P;8FmSo z*xDkDbQqtTCf4*z=A;Ag&nB=g3b?h!TA~mM^UDJOaI`+zF&cHoC4(*SrQtJ@11`UM zF5>uO^( z2b`X2wf)N*Dgk>LK&^P=v?tQgoUJ+DdNR$UlY5VyRg^$9AyEKTtljZ5q$o3ia0};_ zuB|yh2M_cWink0y>rFsFz`6~HWO@q{2WjlT6IQ>6bO04MS9$IxA72DGP|=oQ_tRqs z0C2T8WSTF!9dWkDo6WkZeSChlhM}8atGew}9!H=Kg~lmKav<2|`>=<~yz?KQWlFSR z;dJ!L1v(YM06|^^r^j*{TmT%{WupL0FqQir4gaX!dkQ=$*RKt)GcGwTvLbmeq_4>5 zu-<_zlLMNi+daCVuX*yuMFJpp;*LQnYL#3Vb02O$%u@MscK&Gx1uckjJw4I* zEJkFYscI?s8Ft=B>d3_|@rjJs-!W!#H2A+&F<7A6&D9@)=8`zyd;zdXgWPjDm}b(} z@0xGg%|~^*NQQzEhy=KC6whQ@MIOrsDGrAPIY?uWX@`DBithp`Xh<_Z$V5{OJ7S=F z315?q+laO8^NbDn3{!T7Ey~9~!t{(f?;IZ}72h-;x%4`Cv7ZnRk5Ly%J?UbYNZc{H zjvtS!h1NJN+yW+Ip!_W9MF}L*Ip3KUQSS|-8h6F07`-6j*MIyI|DO-xJ%EkOHLbu~aTZYEsw_hLcEdAqZt zGRX`UxPe@c0Bwdv(91<`=}@JcmYL}y7`~g85>Ycya?zp+^I*q!ed=r{C-snFPhq`- zqXoT#?LU$w5UH$GAYrS$0_bXMsM=-i?zW|;WlC($t{tu#UXxj${CkMm|8saCo;K-N z)_zG15i@ll#FLKU!mQgn_bX2oxFKLuTdWUnkwBSgF~7PKj#qH0$LVQ>!|pm~{Qhan zI5&;S2;t=zK3T>;^dFLlMqkyJe;kN7rmfcSHr1?9vwWnnSWc+^K`Q(qpK%H+V|CUi z#+PLlAG4nBYW96%Ro03q^_f08iL%@vdM_CkEjZUcz3nQpal1dxcGfnZ@_m<4{$iXg znW(n&fl2@EOK51G^+k`-yHllc+@QRo;g3ELtS_S|#;BghBp+}3iU%%1xn)qz_z2>c zs=0YCh0`uSB4dh%FinpO?Y#OU}C5L zTIy4QULtI}7*gW=V(Nda`I0H~+y!)8V{g@(p*Pd^jzdJ1-b+V`<s$w0$v z@hD*~bd-LZu$n%M=~++%gNOSuWVe?FRiTrUUixCx;-FFblKFzAM~M(Vyl%B{^pXt7 zmhILjr5@KfDg)5O!p82|-<*3j^PLDZ$`7EG@}aD34>S|!0QOmcYbFYXo)@H~+z<9R zlKAse;-TD!lRfF2RCF{n!EgN{2Gy_bXyof=Ll3bVNVgB5nK_4mL17*Q&>%<-2a#*3 zVF%grV2L!Sp1bu<4>WU{FkL4%^=vf!w0fIwmha!G zJKB(yl9HM^)K*jbu(LAC{NNK@$?zc}!qCvzlabFdf|xxbLoss?R^xSxJ*Es?08s{| zL|47xD%(tp`eXYC-F-QlL}X;9@O;;c=au)xhsxdq`1m`{E_=nsgC?qzB;XO4Zr+r1 zJJ?bNe~&0TK?7|D8JsiJPHsKWbK4Fl<1v0}UFzxZmXt1Dkj`x@bh>o39|OKPp=4B) zTC?CupC>v7+=Q^SqYb780$OMR&jsI@1wF`r28vRVsoG-67IcY6x^FWtl=Y{PJSjvB zP6>B|w`(9Dt<`$|2MuhK{9IR}rlVseAZbLcuSF5jWqmhNK{H?G=g;otifXJ-=nB`L58N))koT^@>8pL$U^K5;1Qack;m(e`e){u(H-GtDCQ!>% zpn#QEgfeBhkYs~dhGOJ3@^=v|$;eivd&Aa3%8&+q+oGpOn^@Pb{fg9c&jy6H2$23@ zyTBulQqaq-$iLB*=%NrK)Q4={9pzBu+v%vGpryV{c7y8JACLqv`!~^K_GANuf6Snm z(C(J!y1yahepKoE6Mc-+A-~i%bE}m>#W<_)Ck!|WF=%MAEvP%*(RrW(A1`~}ivPIY z{qf-7pmvR85j0q^2IH=^|4hv%>N-6#>i_JG%rjsa>m4uy^T6%AyLk-L>ihckhI*N) zI^2b$j@&H*g+Tp>Wk8fR+gqCe>4ciGaTf4VWkAj7tn5OP2mNSNeeCY**q9eD z=D_hqTK|C|F}~M3TLPX2P}2Z;1IY;Ar#)Y zJv@G*0m-k80Qna&g@+FVS86spMP7o~cvB;4jXQ`$R;OI%2A>QO)1$v*g1plda>E!g zw@;7|76AM5JJO3haO5IqFWDy z9M_({#+13+A}cG~HY)yZAO)=oZi#pWl6~Z~L6>ze#O;s6(8BqrPz0ZpG#eUinCR*6 z!_5Z0AWi21#t9tULm*PJWB4sCUZFT1XvgrFNA*@$Y|W=40S?V|0yGQI+ihirgN@zh zR-2Xor1m3Fg4rtR51m)4=4yyjAH(+w!eQYvA4uBUbNuqn^bVTCiB1$1cEAA{P$u8vnQhGM!(LIbe-cz+tv{ z30C4eR&)N4jIVur94@qY3qvAQR8aw9Elkd>D>s*Adv#n7lJY)q6&N;`v2+Nj0dxKt zD$Ds~zx)weG#25`5oIs|Vm93@c(G}NC;9{Djrp($3D# zD~lCj@$q@!!}4^iRNy3Pg2Y4?x9oTjHbog6INVV45o+$HrzgkGi+L41roFe_PWI=( z^3(%@N%8QKVMCk+yTdjs4j(CTk+4--hYD9bnxFYRX{^KrvvOwcyx63^z^jIGF&5}{``3wGP>V&e)`6c zfg=GMmMRyBihUtn*+J9u(?D-j^%Q`LBNc9b(d-gGtvT3TT`iAFB>h#OR{#nw*j|OO zoZHUO{&nj?h{y&CuK&38061(Fm`X6EXpFEgXi6-=L&O7p{1LA0Vg$Y)nz7XF?aSdV zre_CL4Z1h@Km9s*RH=0Eh5Za3?P&wx=&iCf5a=nt z>S*IDtTmIE*b|`VGyw1+IACN7WG}acgoeUwH;8mtB%^FG4&b9i`1mOxle*2u*0~Yt z1#V^$sHLzCHi0QCfvr)8@fkJ_0k|3J7Crr}$qg~rO0k1^IxuCq=;-K=Pij92+07@x zWeizBF=N&-VB;Osw?(FZeVgvG63S<3xP^h{c}G>LE+RBE8J?Pl_o+KOeU=DVXr&?z4S!}YT0~GKQ>s<;s=txNj- zw||!&3s9^1;q@mCiA(=ib6*}-^ZLHK%5Jksp$wTalu8sTl%}m+8fes@QBrAAG|;fL z*jtg(K!c=}G>|5W=D`jLiKRhv618Za=g$4E?DN~_obUPlb^bWl#nn}7tQdkeJI%6`%( zZ)W`IQz^l_X>S>alW%>!Zn7q0tW{$n7t1waSi5*|D^Zs?ct6G~GiuWqFN1jbaj_RK z7G0^-)@f|K%AAZKsbKv&uwz!dfx0xINh8;oiYt>O*5@$jcn!5kzI)p zkE~6*VUUqTppCGI3J`ukL+rcQ@U>E57lzhBFv&9J;pF}5U5d*&H*A-_!-$bKI0OvW z)`|f&9aIk(Zt-Ru=u@ppIYzuF&DUyiMCGmoTk*MxV2AHDGh+q4GcNm6uP>rdjDm2N zn8?Kg(?bj`1+^usw8@;DU!a#sV|V@lC;aO%iVmF~wR-I|p2g95^@So6?KW@-7dwqL)LYm^6TIMlL6GtSPjsK3Oc5702g z+*8^9eJKllvGdG7Ylo9I>N`!;tzWAiIH&$|)ntld)$C$tSM?gvXZBknzGIE3FLQ;A zdQtUJyTOx8aoMr8eE9w1jj@Yc{>&xo{8 zZ_LpnGZb}k`Lf%0WP<^Bx=cHm$RPrE}r>S=#AUf(b08G9j-N*zueOQdAS@;rSA>;GA@cT z=e1EZ%9^nf;C4>EOzo5%X4|RbcZY+0SyN^-KfKX961E8{K?(l+5fS3^o*)BDM~Ur( zgz5X@p@P=D)3OR~swu`SAWSPkq(m;ZJ=K&ssiw&qSmuiPfl-;v^aqB!ck8MLbhxl) zrr#EKa>jTArOlyAP6$?@lCDK|=5eW{Nt^n7G6o^a`Q@0XHEh3^^6k@cs-|**NbyA`Mf+^XQs1;YYcT&uhcBZ zWfVzlzb&P-uQGNgmJ@YWnzaO*cXNpHqut(71a<&G8wsLDDV`UStWS^`*uuYc=guQ% z&YVdxNQ*}E$_ykkw9%bvz_L2=54ejuK>926*yM@(51dFi8d6a%r+$jf!k zr$)Zlq!>R*$#-MMYspVM|4Twx&W}5CyFMCbJti!Hb^{?0a2cq6W8|m%m86_oOo6e~ z)z!DVl`tX>oaI)PCwLTKT-FJx3evp{+(;677_G{m0~8!V=b|ojmNS4>SwIcQUJtQ2 z;R4`b*~hFkEkC50iMs#TCMcvqon*xT!aE1w)S>55GP;_Hz$0Vi=TCbB2D&40f;MEP z@7N7gM+MFe9}1*(eEHU{6h>wZd_WgUlXIFB1O=4=!`>Fr1RkKX)%V7n4CJvBK}0@# zI1r(tFw+t3QInSiOFciMVt7B84!qAfb`%B1KM*c804&^{pVNdZAY+q}2sTE!drs3{ zzzy7+heK8U7}5^r!5P`N_9)9xjVBvh1^mm1nNqZijE+vhc!WEWgxYxp=R}?IwsNR0 zU*mTdZL4&T9XqyG!shMH9ApLyF%eA-t_|<#3VkDMG;a9LXhh4Kt(8*GA2VmI+WsBn z(^jRcHv#p8e`M}pR3W2&r*Ahxzq`Qf4!}|Y*RL0U^_Ce|Z?WZ6njE4hu9Y(7fTgFE zus)ixfPn^EJIxDoRU2y|cu#Xe2g_(_*Q6vZdOFHdd71kWHL7cAopY$NTf)sP?ly<$ zIrj+(yY}vVs@li@Dl9Bvr%A%dkHq)dtWjM=QiK_ymHB!(fwQX0I)e&Yu7`Yi`Z>T* z{`D)@dZTzM6cyG*liwdk%X&UG_ZfJxrLPX1A~)=JDNU2Joi)GUI(-^+P;@(ovASuY zu-shXa6zk@Sw3q8EOO(Zvc-7MvTBJU6_LO@ZTK0#w;? z2t!#ho}8E4qfu)2qjImii1F2oI&fQbqNAB_hJg>bjp@Lf8H_ciT(pn z_E!UNxhA_<+t{Qav6k=h`4ZALNq~k9y-j(O$V5G{`?wANlS;>IHiS&~)NhsRrwuna zr0Xohmp|manISj)UJ1xCl6($YU$D&90l~p_*xas%bPMksn7l`$U(#QJ3`ls{=l6K$ z6Rcs`4C(b;*4EZvXXOwNgFEmP`@5~}IN9i14_&WDAv^k=Du~F)7^4!KJ9o(|&SS?I zA)5h9B;Dqjhz@52-dKHs$Uc)Um{N|Pw2^%JPA!YK?zkRE`^2?%Q}3!BA+Z;XC%Yw> zktHk`pxprcHxFfoWV{VhEG)j)Xn0M{J9n6JUXCl3F28ryl$2z9qz(7^YUn>?5e#4~ zlXDmT^7M(*?QFLP+2?l?bEp`1{Fmo8_wSqSkw~?&I8s*p3mabFxoxJgI8GKGA58ka!`^33Ad$_SRf7M1=AEOkb z4=kK8IPcYti#pWiUTEr(2^HFk&)17i`^> z8DwZ4`YtAPuTwlhV~dW;S}c0%(iI|UF&XU=J!Cne~=~HhDT3f57 z8RyLwc;_7T(_I4`e3cQFF|pW=f5*VL+l*K_#%c=|F1Wc3kM*$K{rgohq2KEwCx=5( z1jm}CfMm%IhvGkg3=%(I>aD99dDRU2vzVKO8ffhzfFa_$CpeNC9=~|fTOKCJa?*** z0SVV0D zK7veaV?)ioD_J8@7t}e7y8i^QwxsGw?-2C3?_5(WlQl;cY5U6b1Yn8Vv=OPnH=?KO|4%7uq`tzIai=F$-&A7zDLX2$(W}`FeIj{}Ke{gJA zC+gI)V`i#VH+=iQU)9TOdla-TvEwAO&zD7cD}E+1nD4{;8Rp^9l4s-w?0*D zUUBP>bL$E@T3kp_5hbe3Vo<8!1n}?4n(cNoUd%tag$Yd4cEdylDjcnj6eIh(@;1Q# z{6ywWZ??#i=wJ`#jiT|5kl(hGxz?nDNnj1GA7okC~Dt7^CdyTmUYW*8+bPfzc;i{%d%0^OHy_J zF~1bp*|4Wyiv6<`jHj%|PCsxw##+yr3ky0NW&@IsuRIQ(5A|j>a$`;RVD~d{hGwLxli9)d#+ueSt4@uoU0cP9cgJ6&X{VIWxC^}8c1g*jXwPa4 zk|1;xwA#55Gz9*>x@7z^(p%t_rGN-E7IJSKK2wdD#efZ6!xPXs!w!ue?VEBRp~g+h zsX>wuUhDQcYNKyWfLqMXo4n1WAnI3N&N&KYeF!-tpdqDxT1U5)DipLqbm_Wni1AtT z`%C(N$M0V5J@DW1yI|b5-gp;(KI)P_EjwEhM6jHeiHeFJYM|gtqU|t4mwV}`y#zJ( z9i5d8(LCeYbg=<9Hu!LV8RM=J#Pwh`0c}kr#-r8vo^9->|;NT^^isW`-VOt^ZA#|K@pPZ#YDBm|sWf4_cD*v@iAgFL0mzcNBchk)A%?V`*ubm$AAW=o9?wCXy(uk{gRLJTZJ(SBC~E=l{mr z*2*IoNi#1p292oa<~F=D_#@D@JMMI>59vqUoYT$K0H{G5<&3eUgk4(yL7y#yDgs)L zFl94+>B;6_hx)J)m3f8}#m^6@cizIf|B5LQIKEe=w;)pm`@ z6y-h%;*(H8`_gJ)d#RJJLROUHPVR!XKZV@><JS$2LsZArCtJc#k@Bm^?Dwcvf zcUn2jky-ZH#X(fF_|_0DzQ4cU=a4jZfvbghKzFwzSrEvyfJD}4dzXN%DHXpd(CWxYxC-`_ z@Tur0)ifI8t$>ir=Z)1#TU&>=(u)YVbPpc9G&#)FD=ghvdZg=e)Go_QXv~^A@TJ@V zt;;v^_mRM*&@&5dXw14int#;QL9`p(njt*e7isQ&1TYq{uwDzv{hm!@3;PeuZP)Do z$=vQS&9K}M!j70hiGa+l!Lsqtq*nCkZ`EHav6@qcQV+2hirX+iUIIlX}P7fX5 zHK8$#mT^xZ>ROVSgg)-o7Gd z3e)!0IeB;8^+!#f7&K%@V3r^ae#6VppFuhh-i>loS#Y zvZXo4@v`o2j)wx^NRg(yi!_NnvdNz2t}KT0^^7;D;>TH8L(^K&tfV8=N)+S-%L9mi zhl1y2Am2R@|1E6y%s*7i+Em_x6W>(P9$bi53pkTl@Q~Ry>tp0CWKCgV2s0K zVp377*I6%C;v*qsVTSxyWBi{#>DeRF{_Q6KTHdZj=W0{?YE`f4Ga$+6g&aV{ii6)4 zsoD`B#^tZn+*@S0)HrAK*ns64-LYOqF_oCDo}8%;C(H}`3XUrvA+43>#>YyiUejYO zu5tt01?QdGH}VZWW&~sEmiaNneMQntnOQmT!HbLnY3KdQ`y=*jJp`y6bD-|KDz2uz z7W2eg|MZA)p^A_VHJ@J`Y0IsDo{O-M_)=ueO*L|4^(S&WaU|0QA+YxzsU&8R)f zlf4J(f;w5KD0A_HQzC?#bx#3OcIY8+rF1)?{hYa(*0vfYli@dG3A(%d*ZH3JcrkH> zUM8s7RLU68>S~MJ-l;eOxoI^7lQU$C*@9ccyEI!l!C&8Pi?mM3#Bf@;Vz)Tg2!>H~(Bni?^0n z=LXj8jW5J}B;8**lBfYu3Me^7zI*CC8+q{u04e8B#1gOt4Z_z)l;&4?ZTaA+_c%KQ2M(Bcaay``7{9gt!l+kw5MN5GFrAYSYM%|F^%Y$|LQa?7z`VRm#3v z8=5~PN|V7CI>6E@%c~e0N24R%Q6NQve8~9#PaW&q%kD3zgIX+&>zPLv&$;2N2POr? zC(AZa+po)?IYb|?{f_|j>h%$ZhIj?jEd}I;`E^FYdOyoG1`93sAup$gOgS7`8oamg z)~!mY>`_MwAN2`vr5y*yO1wr=a0bGIC9B0wp$3BF)zB9G9ssd660y3tz>=oA&n{Qy z1U(@I>_U%91Aj|VGOp(vs9~#TKC{M^drzy$Q^I1Z()j`r%G$xZrdX5|!=J63_cNj( zz+RQ(d=xqv3noGo@ELjL5p|zpMK)bd_!T{S`xMZ37F{059oL~(;yv({MtI?d04{k1 zq#;pNL6ESxDU$v927aI3|1d$hLk7i9PdCdD2?ct?c|nfm+6Y2211`4<)z)WaoaHQ; z(A?*vRHCMs>W#A%v`{*b<<9muZ|aHrx`_enxypCuXsD^_0Q0(D<5t^l@-%gFwC5oP z!Nk!h{nk-fDg6r|UWFb&2a5lp>@j4*leOrzz_{1kVt@d@BR}f}4dHbAHOIvv2SHeZ zNcutkIMtJbetBL5!{juH|HFX>2Lyx(Y=Bbs$0Kb1(vpOK2@cF-Vg|4x2>pi+rg31l zrUW#dMXlT^9(z&4UNll`5|#i}JIGW`2s!h=ULe9HBcmu2Z_UQEBp0mse_>ALO1`Ye zk0nt?MdA~)e76C$z~W{79IwC=*Fb)?#i;;Q`AC*h^L+WiZ^ilys+r}w{Ep85)wyTB zxXnzu2k|QuzyHE(9UUP)#{I|7rGWKWac$P+5S=WA4?;QL)ZQIKAB9Q=s$m}b&JNKx z^1nIEW%CG=EVc?NFO4QW4JcZQpC1n=u1;s8FV)5)O8c_3JLoahU181Y2usCdxUW zXfil;>eLyn7oF_I6m&Nw+LfZSsR+h!{)e*6nf5>Ka;SnFb!#hS%NdRF^qFYp#}lB; z>4(K+K|2eM@+kC72e1Ztk zd3kvg&?R(LezR4uToMuPk>(XnfO9{o)Ej-K3iytjVkEPStAk)2$`&`vKN=buiU>^q z;*`pvLk{SI;dw!RcH9ba;!&XNhJ5#jAge$B&=U@&@w16sRhXNoO2L9f;SW)<%n+^6 zqZ5~LHL0^5uVl+C|DEkOBiI*Gli1mQe}xXQKlY#NH6^)p=aQMH`pE!KlyzvZdQIkB zZ>lYwYJi*6K_&u9-8}?w5*4y*UuC7VEh;Gn&6@I|K>=HP@a_@|lc41xK9G4Ggs}M$ zLVPG7of4OoHAO@|@{M`^@-b@I zka@{uO$IL{9^Pq3(@l@jsiU`YG|NTbcHdafWHR$+03R1>X+8V#w(ADO91j7e^XP&Y z8C0S6h<;aBIOsSEEn8{mK=+h@vl?3P`J6`JkG5e%r-<$ z*G1;eON1zkn-xSwMaQaOd$wm&L@bI6b)GsNBS(Y0bMgiwfUiUPaG~vIv)EBJ^p53J zd)Zx|<=Tkup@E2t*5YiRS561cc3jz9fkW;t#Lk>UQ#@62Ovbm%Sp!^Ilh1c?-h*ZE z6ZnE0!AQ$*qUEN@`R z@v67E05<}Y(qz75@!~yymz7=HP>^xHK?t0J3VO1dc*A?+)<6<*mhB3}`6MkNCneD} zqRK`m5N1%onE-QFnBy)3)$ukfdtEj48`2gAT7i`BY+>!^q z36ZrL#(?U<7u+pMu`%8{RgHA{Lrd{&M6QI_9sK=mH@EM2;V#bB(W?rx=DRsvC!f;? zxgWZ4UkOI4R2{j&e4O<)l$~SuQ6(&!I^~g3ScUjdAg|XV?-*LD4%6qR%SHRXER7wl zz!@fkR51@Xw`>6{(Ia6AIF!!>F0K}lp%hjev35uEes6ZEd~3QVXAbl&^UA&fxOml}!zOg+rQZ>D-a)7jmuF z#@)TVzJVN0B?4_AYSF;QgdyMAQDJvJ{1|l*htH^3g!YPOk#w5-*w7g*Wj+CNF^JsUhr=vYfN;hc7?(hHOCObLjJYJ`D09YJp|dyt%@6!H3c=`G10nWH!NIX`lxLz<|( z;8)J~gm*BK=41hg8Scr)=*taDxAI_r}sUonS|q}eIc z_utVpLuw;!2DmLm0Hm#Y7@=5DaOB?8ppTqjWpl5%@5D7UgO9_(Wj`Jy$8Oi{eqq@u zUy-K?LQx;GucjUtVmDNjt(r_r7V2&inj2D>y9YSL0uUbEQ37>a*9tOWUut2_33_>O zn6K}GX+xgY>1_8O1|&hbc=2Keb}ZWepIa?r<2=;SbPa9ax~o2f?YXCQ`eYSM5KN@3{hwKT^GXZLAX z(;@t<3pv_Vg??YmBAy`{e4rKZJ~1CUNr(BYAft?>(-z7~kHyF4C{VAj^^>NCm1&ZV z-o@=ZiH%M+_=Su$_$O7P=BadC07!SzMqCUSl`(B7X84t`so z42vpwfQ`RDTMKJvsYsth&X6}}3)Bru)m|!b%iXk{LpOeMVip>lSr@tNZGkOa<7bKX z~x^MrGjcJ`fEFU2`D`TX?1?qeu@x$i{Li8bGbuPS^cyI}Y4(2Wuo3&|xP zkb~F7B`qDc1!e{Y5jr@t5+4Klv3eIH{St^e5WAl*ED(B$+aATrmMY|ScbMkB z4><`CQjgQn!gd3t-UHxzu`yKQ&touFS_(7OPlIbD?`fgHKM1IIO;{jAmusO}c|BxR zv#(8A`kYn<2e!KuXY1Hivy97^qRs?0y?sYt&2pe0`&O3qQ|aR-EJw-{Bj;Uv3gt$< z_770H@)GB%Ha~sC*D!-y9m-z4x7s@k7Wk|AFqePXeeiq(8NM@bYf;Xe_w>7c@Z zxb?6=6a;@eQ0xXMpjga5xNslCGO!KHKR;{vmW3j?!v?8cG zMmy?*kaX+#>R~JW65g*(MQ3)7zv;YhIbN*Q?L|zKLx+mTEY=wwm&Jdrvz3T$zbrH& zRL>&eQLh9-D$r;uYy`KLO7d>P56WSs|LdPU z+<-L@NuKXsP9+2d3@on^xb%+tbZAUdbnf|)_5vPPkf9~t_Ug;Ug&SWDje+iey^Ax) zLye>Wj#;u%*rB9EW-OwWcLz!ve&gBJ6|}EK8!iw}R9bGl?au~m)O3rIbi`XJ0C4De zs1M^m3{8E(hI6Q$v2V_QLTnOdGzGp2eu=JT%K<&-;$;-tA&?{{CZMoUxp$vq$tt33 zt%187ezi5Y>#9)fdn8bBdfuY$2rb1gEiC?&yX;X;Nak#QC33V#lgX2 z!@)VFLv$K`67T%N4*tS-lvTb@1b;k<9%10$#CA##9C2_cOpyO@KT2ml!NFm}QAXdq z@0z$UWDdyf0o?|mnyPp`4!%Shty;$=E;}0=gS;EO(({c28q^A3#b?L zEjo*%PX6$WT8Q~#kUu-*v}`9o!t!&=ppiedX7~T|E6ksdI8-NpV(#Gn_j~E5PCkRy zS0Fg~I;P|$3FXOW?CJmCg;3bZU*XK5DJiUa#WpvXIrIj-rS*!e?Ds4On^XGIq{ zop<NYR5K?k6muRqvs&DxE+XebZq3haWzQ^ey!RJ{O-)TP;o;`1*t*)<+LfL0SK^b; z_P3YS(P(@Msh!k&$;XBZBh@MX{`h;F^YtFfl`&I;No#v+hZj**w~^ByjDpKuci)&1 ztl!(1tqEfFZfHxB>&r9oyJsjYA`&|~YMd#tU0G%~b_yqelupg1g?T*$6Z>8i435X{ zaPJwXO6>RaS5miuEH(Ei#VW#auf1#zKo!#|P$LWll zey11u3rT(NWvaF3=n0e1@u+;!Fa2m(DaOag7iXR~u&9zEl?1DL&85x~LVM-c$nlX& zOQL9$^>TrFiWJVmV5va!>a+Ro_6oQ4uI$M_Ft(JJVk3Nj<IC$KfcL8VoS6EGJD}}VQw4u-8CfT}zqGBfbNN8}d za^-MqEAOUc2*y=l6MRmjFN{(6amRb&fnr;(t5;v*;+?je{7oBu^?_^=wx zov=0g@n3h|p^3$uW@O+5Jhqo6n}tUnZO;AmJlyP=XibscbWdphwOoCyRug!p)PDT* zVt?U9Ha6e2$v-2jg_)`e3dcu>jVaR7ivz`(N)afl!IB8&D9(J-I+Cirxho`RFTHj@ z>@o6Db#)a{R#yIIJrM0M`8(fZ+vaCY%_pO3@92^BSiXlMU=Q#pAK>@}AGhJKZKn8W z6+YGc^^(4(#D4seL7CuCxr@4FOy5H^x+25?ja~|FHZR!U-94OqHeUa#c)&`?BSFY| zp|P>?Q$5&$HSfKQmqX?Sebu{D30>o`FU|?g=EZ$hTie4Pyv>fPar|{Q1$_&$mTH1fAAGbDwqeV%=gWsu=f+45{c>(jk^(gV^}zmlwmEBcV-gN6LLYgj&1=EERl75ibDj%t;Y z;ROc@`>4R8_1DNq%Jztl^s|{WGVSl=?|Dd>wC;c?5&w+i}bWxv` zN*q6dkI(T{vp8uVDcBJ*dVY2T^~N`s?=^s3v3hM#!KwQG-M61;po$l^ZRu2(PMX^D zKHQ^XV2ID4Q$(Y`z6vxB#)!1%Rv-O_XOYp-IbRn_r|u#pA;FZ#uQmyFP1%7FzZ=z-?sZ)o0PkG*Dnc;jy)V%cdC4^ybo?7hep@;ep$_E*R(M=R;t=Qge!Q6k-`WC#S>M z&wws30UVNZR~u?5q!Y&;@;mIe=7P7)woJmF!lw#shQ!EOrBoh2emo};-xR3(H%t2! z9wGUo-A#Ek`#h4NMcNmYyW^U3OS~k~8+(0tu8;b7yn5tBo}KJBFtTQ`rR($71T44- z0#>u5^L+O;1Kf^Ek8Ksw&;jstMF$6mIsb(wexp(c4prQ>`cj4mtJ*#-#oB3QUItpy zbW~K0-UuQ{oN<=hJJ?;PPpQl8lTD4p?AI^mKXW zyzi#r?>CpDmJU)z9{%?t@pvc{77Z&&x9a=KB<6IfMqwvIH37$UA-_H`nIoOUJ=dtZ zMR>$hZn(lN>8pnu1QAikDKgl{#;xh2^Z_65;$w;9nc@-ei$X#|%^nq!71s*PLW`~X zu!*TY#sz(Xt!T7oB!WY@=KBh`z#zz&M6Rp)3Gnen+(}n3Dd?MNPY>#JY)Y0C9~umg zxTxr`ij`0HIoiFdzEj1RTd_uh!&|k3qT@AGaXFf5PVn3wav`r)i{UY7h`302yw_6= zAxJ0Q5u)5U&E+pS;-x&#;U`sJ&Pc@w_yFOAyajKg3=9#>?rWb9I z>=p>ubAZGe&La6c`kLNHgL0uP?Of-XXSd#R*A3WKt5$m-e!TnP)|~gn;%yOPQqqUm z+TbTF0+0Zb-RCar7Fj7n>bk5~bk*M8-m3pwFq~7y6_u}g5T8TOU3&-NPhxK-eP?&~ zPPMn!TzAfVR}U=}pDKa|@T`Ow0dd@RX|gGPSkUJ>o#cY#%K4t$X~@FDq;xzJmD|G? zuU~(Spa$dbIAG;5Id1%75FA}M|7t%OD!Z{#ikOCT@bCNi@XkdF+8f%ElIQ8IRgfg$BWzR7G8TBX`Z`l5HtcfZbz@c zBj5Ra|8gKX^Y1*9nuZu&qxkuGh(JZw1Lyfn(NA&jXK7t4vg-Q@Yk5#?Gh|TNTHd_h zBEAep)mvhJ5u$L7O|gJ^(|N$Q*i9?vGcvR%V3)3)iIOf>)R7Yc#SA# z4{@sz{JF$#Om?nHo>|Pv7%ZKgo&7zFxckPX3l}aR3xteC??$mLE6JuN2%rM?@Ynuw zb#CFXJd_0NVFS1Qj@=?&!tRePFQ|H%^kG$$q+OcVE`mS z^mtGv#KRK~4wUaSdlzy=U9zOd(%z=v9l#mr+QUOP*Tc$h^xMlL>fj`=B-V(QE4NwX zL(YzY@tJMRv?q!^3y}{!=Vmsb0T(4ACN_cS`Jk-mQDdZjsYAfg;r{yCAKrW49^c_H ztRQ;bf6aNeg9Fa3Awk$SqcwdOwe(3R-!xImtKW&N(O-&n`$Ow5uh{~7+da=gZ3X!s zL*M9ax1B4t`Ymy?4a%b-i{fb%n5!b#7(u(}=)es;70hsZ z!%#&7ca08kvcfAC$*-P=kfTK)@Pe6{KoFm8AtWH60xLxJD~S&|<=WJ8Yk^ZtQl7D| zU%&3cju$=s`x&>pqa0`Q_uGpuOM{-rhugEs4*~Q^Y_!SYpFTbO(4prZZe()^9d8T7 z)lSV{G+b(rhRU8n$>DlGfEziXmOEumPn?&Bn<2e6L~*Ilt%CLAXn^11z&1SY`^s@e z`^yA`-A`9c0Qu4|GX8meK~A4_7`LCWR=&(-xdmM0$bpqIp*iD%j?FEDu_e`%SNk0n z<5e4dCBj}(OIOPKEg=qOnEi?Ff=I1xLP=fU)_~py@ zU?~-w-Fi-QUBNke#Tn;VaiB_IlzE*6mD z?0Ky3*5W`yIGamqYdvzZMtfF+2~w;hD-aph;XjMn{(2SG z?ToGXhl2RGPfGIt`-(iN4bGU~q_}3RW@WKB&w_$U^i=(;nm7TwUH-umTyO8!!n|j> z@i}hE^nKOHN8Qgl{WnW*8jYUt`9@Qg(B2Y{LYW&>l4NPugwU=`#%Sf^YGjc4`^(IB zXneag(Ms|B`Rhni$*Dn65jW~^mH<4$(f%7mM83L(scw#s2hOp0_s;0iL|DCphq~`u zLO;}oLVd9)mb1F5l0tqvMwdYT!>zV#dO@qlv{VEnj}CVuqsB&W_Lk9h=N6O1S@w*s z)~8vhyB@hU#I(9CE20x`FW#vCh+{8MmL`wZ=MtrlzUJq1L{qijGB=5N>EDu+reC_? zku>66;I28<62M#KyT9aTSUJji?2D}{Sbm1Cz0qap2=s<%*QP=_|oPv71eZq z0imIH9|OzZ626Mnz#Fx{|MD36y9__Sd@s8c^{`&H+Pk|t6ytFZzM~tc4QS@)->mDd zd4*z{rl{-(c#J}^m!$wM`tvgUNDQ&2mRONB6qb`GceK*+<}SX(yl8x=a0%fnam)!R_g#AyT;@ z-9OW13H7YSA+LppeSMAxxY6XSLP@vK?E9Y(7AV(g?#+$*hgkG^;gi4S_IbWNHpxkZB4zf3 zm(tD~$oXJZ?p)~1F!GH!gjOKwH=j^K;iHxQ!tR6DTq*wJ^{Q}T`x>ovRmiO)+01A$)E||;VJB4N|MmICviY7gYduT39~`$+HLr9A zCoW^-*~AKcy$vL+cQ zic@1pIkoi{R3Oq_C9zP zZ9ds-xrrmWK`C+gt#I`n22*|yVfk1dc3rakkkwZ()@PxbX-~1cUK4+V^6VqpN15sg z$O0`+PVA!R%Jahd`iaJFbH6p|08%}gPTRpet%fp(IwurWMAH*$2np{wsUkMIv-3Ii zx916$E5^MN$joCTJyLB9K5DndvyLy@ibY^t?*8K`5#P2J{luQ7-o&$93S#){Qe>0# zm$ai=y5g{CRuDC;{4b9_;^J%XUo4lw?X6;7DsOc{wIa5U%kL$2aJZb&iE(9x4Wcnd zXig;sn_+))=FvG#Oz@pmd*QuJzr+0;pTNMMH0rVNNNdt_U@MFPoqjMfVLSM^ z`N`{Y$8}EsAP9zFlW#7Wz)H6@5dS2AcstngGobs?dhv+Xs(r4*MBdgdVj^GX#cbNI z@Vn>k;P%{4?cdhcqB#}i^L^^cPen#4uWfT>o2$O#RL=k=Bx5|7VxW2?e!IQsT2oRM zZ7x$G_z}NWij>wJE>t)Y2>ug1>;vE`V%=Yw{dZiSo)Tgs=p`oO)ecuTeW>Y=q0;^$ zvpLs&OIzGUHd!Kr#x3a6J(KS^I$vw&&QMX+f2^E3f941E>dmP1cd?YL>esTdc-cm$ z3w>8tS5?A8`03Ob~cPk;Qj1p#6aJbIgk6s{~xl`P^%af9d4{>{nHT7Gl0+UT| zERgi8T=GanB^Kv+FQ%{}AA=!A)}rw^jA5Z+VlW)}xY?k{yx#6B=|In2mCRM|+$xeV zh6k0Z)2#_=z)vb=8JE)Md}jM%=RupjTCDYBt!8ew7x!fww+>d;$jAB`)&Ac6byNRY z!K(2IW!H^6u6s{(zBRyOx2FGZ`oVG+Z{v#QIdUB-E3*^gQ|hJ%ZsAhJl)BS$YX_p_ zjR%A*Yb5NG$@C9oZ5H-#O*VT#v@Xe8C*OK(&1N?t7w$hzKZ$7?c)}8U=;DtNrDBD6j0{9>6kFHM_jR<=-K+-6$Ls z)*Y&|bbu*<1qA@VBa9!0>LL*tnTq2O6pN3$v*{7~=ZaSLC=@MIe|W3k10ylGlGp4d zi2tYg<85_x#nAWX5Jwk=NGE^Csa-T~CfHrOEnoA5JB~G){KrC~OcE2xeP7v-av4044rNZ)XC3DL-_Z%){mzdzN!mT~m@iVln zOA|vbKU!P4$>nRGnK#GR0m1akGPlyXe%^a;maA%i329;64W;l6Jj1wFTzwb@s7_S; zY0+IIc=4?6FL$?P&HWvlj8V;ukmkONKkQcDf7xsDR_7D6XMJ~$9x*xj)c5Cj_dneY zU=nrE0Njm`*HCH2yAMIpf%6g2cG)x$Dd}y=<;y1-=k~#Riroa}#=-BA5hsS-0t^w7 z`eW9EoL>P6(<*)31mw(Y*C!fa!5%^V{PH~C3%B*D6OMTvs1`z*G}(X-Nk#bo-Bu5h zoH8C1O3h`0=p`$KAE6%OXz+f1->CHQ^StZlB^id@|3Lg)KgXlr@H2q4z{y%gg$(xa zcSj+V=)omV4vx)8{^;69u?F}vQ*;ElZybQ=NoBIv1%86%-Yy?W-ewuei`=HPBbE$8z4Az zFG{lNkrM&r|ETO;_oD3d*5E7Pm6M$p`#+SLLqS2`a>m{w9uJETqzpDfkp-zxpoqxx z+;#YT|C2282|n;=SFi!cRaC_u_cvSHW?sten2SM$!VQo(H)aw4EQYf6R36xsV7=|J zOLP1UT-VX(gb3pZ{00g*)XlQk*z;=15{-_nlGE>M`{ee0OEeDmHv5WgN0_-tp0H8^ zXNpJobD_^}hEih1cUI6r*nPvdRXV69C`a=vfZ?wNmEE5;uLxQ7erL3;xCv}|U#TNk zx@;7c<)Zqy?giWl77kc5wC4#Q6L$kCBCGdstwRB zwrPgqK-6Q)Dx(KEQrmnB3W=@Q!o9zvKQcNShHk0&lhCGG>&5cbK=9g*Oj;}i#znwp zP(7XSREdP#P{`9=~m#;J7{Scg{+LBD21XX0$Ly_)%sgN6y=(VNV)rYIqzf^-LB@ zu9==(gfc?d=hRfTmSo94(CPX4PCgVEG1HFs%5hR!w1pVg&%HVy?-80ef8Babx$H0* za-(>P3)K<~Aqh*4~^GxsrZLGw?L~h>-DZFaCG^j;o zS^zlKG!XLJ9bBwAvMrgV_IR>#Im*AYv>tWP z*LataLaoaFa=M>CVd>hBhnbG{je4tDPvHS*u$M%Vt0u6i6Uhc;__@_K&7>NuW8z1< z>X=tSvz@A3uxamEpk52nMN2d`M09s#E54HD+|LS$33=(yTa`ybWvzCpN&ztpLUgSn z2PY>#JAdR_6Gzrx+r zo#Y>WV>J{xhOhUR!Rl+DA%&$o0COV8Q~yuAtKJVG$gP*$kEI@ z$a9x+#<}>7Bzo{>XGXWq@p3hxk5A{5+9dGxjYU$AZP~gI2-_kt|5#HNpdEfu?htrt zY|0z7gA5Mbo$`j;*AR-vHf^IHQR=$4mz`&f;ob?1!l|+ZAGOXz^C0-7^k3!tpyv25 zyREAW!`9a-xz{Wlr*s_su-H@wGk^(+ivN@uwanH-B%AX!7AZFqgkUA*w{E?7O$mTe zr>F@6?)1N^e0#++j6dr_p<3wW*QF0KBe6l*mHlLq`65>J-}kG7LX<-KdzIJR;cJiev7ok0 z3MLWbGmX@%=l;3g7Y7fnjYD9uUni*ZTRP zfpB?j8|>6ek2X+U((86&h*(Gi{NDA62kQr=7vBY`WL=#)LY-=|r?}(e<8e&1W;}`K zT~<;H9opN{xTR|Cd8>#5NPbK-W<){U*T6+#{m2&vm77&s{#HCQ^z3=Btnm)tY4NF8 zu&bYhTQJVcEp z8KgYAMNY(45Rr8m`EWcx0m-> zC_JXUnsUR`ztFUObsUO!u`t(kTs-43*_~BI+EQ%aKj*1Gxh2I$=)6=beK{CBUe>a! zO^QuwZq4k{gANAw8)hN1g4mpJX1}$`v7F*;Q*`aUPyfX0*z0B_WUS=G#Lz{6vk>+e zBLF@QxIHFOIM7mICAu?44$Nj|I#?xx`iaVMgEHeW5Hao93zurxiE&;($ZFgkHx|ohW@Fssq8=OZRUuw z<>!MHbf=qor) zJtD3u>mm@}#g1xmUPVdlu#qtl*;YW%-YL76nR@?ntO%8%*I)3dY5H$A>q1(;56xTrM|^_34^_CR zo@49M94)f6m!?!9C^p4HPag`V@x$$r*1SCBTenQ1o&N3VU+%&koJ&Sk63^zkOrWjy z<>mbKlZT&}Qgz)nz+mziyirS|Z?#8jiFXzRI+fA-%l~IL>5;1{WY3;lqfF?V&b9;u z1lVuP+_4!f8C&?+cOqS**xk67mA3uL2TpTM`t23DbcL0vgl^6NRMmSBp7;j_c9gp; ztK^EhEHU9gf9RIW7mYO8-bH5~{gTmdFZ-^YXtwOnlruxc_H;(`3xFUc-Q0>(*YtD~ zOuIil1f*yNeg3Ne>Tmb_s;zB6RNGJ=-voxYY@9ylF73aIG(=Ufu{@H3G-v=4B28`I zuC)75A)!Eo16>hnCML3f>b3knD+K=Tdd2-GYW$$4vY2hd#bQU>E;Kv}cB4wqQ1!#b z8x3O3ew&XT)O7yV1C2-pIDlnWM4@Bky~_a#jI)b!gMN=-PZ!7%1T0$YK&KV7 zRuT!A2JQKMb-WvY#AW!->V>5&J>m0wr-pr4In{-b6#PGppv?@GM3D$EMJgJasQxS} zN=g}MwmtwY0<8X)0r3?nspQ^Xoj@{r?Ak%N1_dVJ4h6vF8q3@tL99O;qq?VTQA^z1 zzx!iXYKe!kuvLkDhV#Rf;z$R&n4)2BW!rordHb;b7)!s=+(|>o(42#9y4SM2s z%8P;%#Cl&03mKevt3IAiDycp?99uJs6>fE+rV_9c(hGD{;lBS-2C8qUg^W5x zWB*rli&*ITOnb1CUU*=0S}sI>Q0oMzkJWS^v7wgG0ALyi$on2S&n z5a^S?2`b&8vRawXg~+Akd>0qX4qfrljoD7nm;cpvXT+6l=O-7_d>}2GK>%5R!VbfQnF$MS^u^q|l! zy1#lMIoHQW#ED4AMlcEFKcOU)bhlJg9zm_<9}o~1jzSq)&1=mwj^pA%M6%bfbniA4 zx|fNh={~4{L&3-0H|OLX9QZFPyu8k=h_2}E`b0^6DvTjc4TTj+Xr3c@P)Z%nERdvt z{_02a`YJSvfw1DeEe!&><`q$}SpdL)-1ZlXKj{|EF&pJV8+_Iq7@e7y#hfU^smv7P zKK_{j?eWPv52x8vyK6rPSs@Cc`ff(G6(D<>4W@g$r|3y%AR-d2S9p2;2hcrn5^nqu zTdT&$Z+uclGx50#R%}LVVkTN`!HBl#1&IKB&~RmQxXY{jr%p?>>iT%+C98Du>Uh0? zRc~H(g(1{fgIR!zA1OZ`&`Kx{-WGMh=f0m8J>fM*0GOrcKe=5^5cq>%VT|?ABBhsf zcZy~~I$%qGxl(k>6_*DHb?0R(?nH4yThMboY?d86{~t@|isLsUxpU_ZA}a)U%P3d2 z{QLRs*f^Ac4V9mbfb6ECc?enG@v0Gdj$Vz+$j!p1U>UssNyLfoO=<$IKm<~g&}m)} zk(ikH-*5I7Q?Ph-%@NGDA++?gl3L(bvkMYT=FR+&{^R~B3>qqDdMKp!$--HKPT+@q zGBM3)m~eK$xub7Wp&(`k+qqVA1%(~+KKvUWyN?Y8{I|ckK&-4x$!rbl8oYue85Wx( z&l2Y|?wkBc(DVyA7ciY%u!Y}F*M>?~MszNO1p{MHQ)%Ul{vZSwwGWf>$~JQYn+IE4 z3P3t76kD4;D~H=!ek!%vU0H-_X|*Ww|6tWZcsv!Uakx- zQ0C@Md0T{3RINx`uNLpa`|m-lvin;aC3y%WfQ}C|DChnHuxS_qc#Fb57qWhlu9$N= z7L)r~>kNy}U_2=YDp~Gib$g?Dmb9r{$=Bi0vttZj+^`(2X9a{4k&UpcSQE9Bz{x*3 zficbIu;K?vVmGTi<6rWel%W{c*uH`bisY8GY*a=rBVKJENSopbgaQ3tL_IiJn&12P zI$1|f3q%B@@Ix$%p?hOL#UmhQmH$(5Vq9PIR{KA!Pu1py9}Pm9)X0i1;<)?7qnLdclFsXGKZ^N#i@1*7nABbq#Oz_s^Qhb(0Xf zYZYg{M~^Y*5IRaxn3CMzZ_~_GRTb#$T~4n2{UyCd{yWZ;(1W*zl}E+8uv9K&sWwY7 zM%hWN9-AE#juF)z`RRqCV+(z71toKYP%bH*c}zsq2EWU0NT3sQDRNd&zXisO=0`fY zwPAgWz_EX`B)oYOyu&pRTGG=gCd~}UK3zoaJE)^V#w7W(9e&sNS$~hMrW^)W)5h zu&{|&C-+ZF5{Fowh0B53&QN29q88aJ;gdDDHN|OsW%myP4h36kC6t9ZK5!KAfQpT( z^h7?Eu)C?PQ$p#!frAhLXo&$*UL84x=~f^z*egN$01~U4fJBJN$k;Dk!T^E0`d8b? z%=HjtmP8a3Tt-!%fNk1~to0yC>nHZxpWL(wTW7b(fK~wi!S05fecqjuV<=xf1d#Td zc~k6<+0IOQ{zpV0A7U31iw7Bad!C6L^hFY<`v3o-b9T_P)xHJi!)H!hLJ4QQ*iltE zYRr}dDTS8cD68c2-N0lZd}u)iR8D8UW>q>*HPJ5}ciy@P%BBxavmFS}4G)ybvfP#i zoqa2|3m2ZBA|S!B1B41%rSlT5*Fn|iAo3~;NGdP~CJ~(c{CH2E$fTb&Iii{c=5U^o z-T!9>jB~&GkKC#YizDvw{<>o5e4(+7e52ipg*mQt_Z5GzLEKKOtu8t zwG0vBxBoXkeqafG^=cXv|M#%Ny6P}Wti%Y5ahc*8NdGiVSff(^{fo&vjK!^<w5Orrclj!4I1bA$pE$3T^T(l6z& z38Fx(0Dc?!Cx(}XjxI(_iTJ?_6>BZJn@QKYc!9q%zh zB9aGU+2_C7vVx|@S&EJ?%|z~!=B+EO!LcXD4y+F#=f~|oA+C;$PZLH&tTb}jO#(N9 zsyYdsxWYC%G{#1*xDt=ob*XYYD#i6Hp@D)>G`5KInSQ4;k}-XEgWLe!bV>7fzn{gH z6}X`%U{fk8ys4&qA-OD_cI4{a>4a88B#N()kR^WNZ@sgfdG3Yo(&#~;AYn`ft%$7n zzrRyty(xp^H1`N@G|>V*|LZP1>|986W~?Z}K{_We3Sjo*1wo>;4~s7ZI^&*jIh5(^ zA)7E^+s@N3UVwE_CWtX!dTxmzjbANW+Al1h8E?9`+FZ%+`k3C0f-97}?dEQqWb+Q?4I;h^B7 zq@|UIBJ#(NA3${Q0l?L5_{X8 zt_axmIwBAnJd=(`Wc4V#Hl+kP)bu31oN#f|4-|@VulK_{EWX z8MS2H$6w;v*MFdb9=x4z+E!5-XcAoVqKB3Z8Sg>*uF1ERlv1Hh%%kSdSrtlTd~N+f zG0&ST7H|lU*!iie_Q|&v1zi*mUeexnV^L>kN)BXI=JQCXEuQQHOn3XZvpkC$iX0J4+e^UP)O@AQifnW zvh?Xe2v#N7FzQo}iab;C6{qwX2rv;PGP$%m%m&Sj{WPf2%GMeC+Cxn>9U2aJKZke* zg*_^B3DPzSs6}78TMMVVJWfl{0P{afPhW+Bm5B3&VH%G0OHYN;$=yG@<2ID4O|{%r zDnQ0UMtbgh>Is%&O&B8W#%z}VInK&_|6b&>vaV%!_82Jdp{IZ-hx?0d)%W!TH1xhb zzPU75+9~WnAr&vb%a={-x%`KA6!+TDwXch;bJC*9UBC~Ql%UjhmB(FE1l@WX zgwu+Rj@uH)2kX!U@&{sMWwoAFz-!M55e~zs$3o;)v)^yV>REm8JBB~PECA@hZ$)2? zTjGPhK*jBvK&{sLUttis8isUAJL2)adI;bD1OTjr5n5m4&j^$X%$q+NRZ9UpQFXBa z@ji@H1b}XqK`HtMas@@%7dN)Y(_f|DrUMW)VKZ1kOd&;-B=%##7J|YO()n^7!c4$8 z*7`)0y1DBTi0X~^w-$NS0LMIC(r<{N=>NutR5DuOOx<*ZuybLI2nwaky&~f<)zk13eoiaW=r9=jv)Q*cOEVx9_OldkVv_Vg$2Xh6*9O6IYfPt zp@;Y4!s1h&49>4e<-1j#yc$<+e(3s}b_!L*BtU?lBbBJVPx2+OR3! zFHSmcg8@({LX5)CW_bmqQ@-1}IWhwSLv5g~cn9w2QfP!Bh8>g`d3!}8`+UU~!%GIF zEEB;Fie55gf)-;IB^53l!sJ^53|HrwYuMd)>1mKbh_p^;S%+eRp7f9d?_DAS9Wn!? z(uCzh*w=Lu6ny#~D_5)Mv`p@?1tmoz4>%`6^)4^JN=Y$_PZ_8`I6PEUJWItJ{TfHF zNaiGSDLFssKMS=dq;CXN;%4AIDh3;Mdr(GZIiuV^W+z1Z-m%VC$#uIgXDtWhNa)H#AD zFQWQp_m|V|a_AJ1=@tV~r-IbvhQjz)1ORZ5oxko2<2jv9XQ{@aA5TwBue{!-p{w~( z2L1{}D@4Y|J{F5t94KmLc<~o{?+}oNSiH`%c&K>5K@#RNzIet3BpP;Sbv)xC=KS0L zZSAx^I%(}tu)H5Hvi78Ayd8m(C(GPWX>Zpkx+<~z95L4*E7UqRem+7uvV9M82zu8eoVB>~V^T_Y|B_}hc z+|@n{Evk3Vc+eHvV?S4#1iG(h-}FO3l|CF~7X*!=d|zLjqpjlV_B1&{m_2|qv1bLz z*rP3i%8{IPhwXRiIgQgFZbP&{wRBaAOYC1=7_wBoMHf*%4G!Yu^lg?1WphoG4M+Tu zj{o~XFyUr9-+VP)`@^bzt8{Y0hO zO8@SUKf+a77E7KPF0}wA7_Mk5%0afzO4I?=AA0LDHp7CzzY4ewNwGoH_grrl?rKP- z+Ju1`$k%7?-n~o4{)Zvw%C#0}L@~Fz+Eu%E4n>f)bNCi@c)%jBEbV&;@RimL$JXW2A5l)h7GFAntq>6kU7F zxlk{@hZX>WByzfV9ONPqVn<47-!=LFZgSU-f^2 zI&2ld>$@;d(RpVn7!(q%`Np_Tv!-W$aBH_f4ze!<9;oZ`&Xykd{a=Iz>uJW_9SdUp zs9X4X_B;xU2g>rYXPTavozF`{W97@n$KFVUKqfz6fM@kP9>r_GBA>N#KC9*ljDk4; zswW;f?fvc!sG@M zbx`OSL+O-}UP_yL{>5J?Xph!Yjwz|BWnrWzzmI=-y6JZ_9p@nZB?Gi8unS63EQo%vO+XCWGMP?+}hey$?jZ zy$!dAjwM$^qywafah%JU%ZJpUIaHQ10FwbsCdGOqu0_^a5CMCh&6_vlJ*XabqUHnr zli5U5TomY&K8Ow%T55YA?OHf5G+2Q=a-6o%T}4GD@R$djU)=foSk3ikpTU$(;ruAi znJ*G|WXH`4nsz`Yx&*MHOmZ5qAx>|#k2K^#A*$v@S9$0ZV6HSLk^1a2!n6ROvRLy1 z&~E>UsR~>Iw&O)cz+kK6+JtgsWMoGY%!?#HM}uAo z^xE>Fsp_mNh-ClnHu2F4M27W%T#iaNGEvp!p~1&VNwKCnR9OW za4Bd#*}|;vPZ%Lmg>luRy^y=;ukC}S8s$RwKN`aWl|(HKr9D)%^p5qG-pNp8^?Cyd z5~`{&K|R@p>cTrJP>ZU{JBl0TlP$AOHYdaY^nJ}^P!=2Rp#F_47qc(+?05V=pLKlI z~W%srMR>z^{v;d;C$azs0LH{syWl-*{Dme_3Y+Yuq0t4JXdt4!O!q7bo z$iG1hJYcF7=+|w3mtD{)KbH1zVX<)RJGMV~W}a`(`2KN3qfpJYI-UOPzIU?x zPvVp>-@0-y;$0+z_bjJ%bR4^09rLXrVtdP%?4Rf_(?mo*46Z$2aBx)8^eE2cSCeSZ zcH+9X6bs9oXRGLXa=obem)6qgR^bs!W@ZG6fLd`h(XmBzQi{&NDI(xeKstvGs^y#W zH9=c)R-f#GBYAcoQPH-%3xbyB<|=hQPb#z|ytRE3Kh;%ss{iO<)UAy>O%X^T=Lw;G- zjk_d35Brv`>ASw;G^`w&WV}Uu%;(teo8W*lIU%`sE{KPbezx=jgsgUR=N=V&{v1S9oUtpY5;&c)m`aF)rkt8}McY zI*4!u%-U!s9zH7f4UN?cD0vzhyy}BfSG0PeVwUh0#&cLK>~WaSDRzJ%y<~^QFyZ0R zB$r_mC|8g%L^?y)=b%8UL4N*7+p68uzCMTZM(~b`KMC#V+In`*pQY3BG}dTz$j?dsg!T~+ z3UZcjuxSqtzTkY)NIL~lre#|fT1~XCo)L&SOb`KKw`nd&wR(Y`er2hAO69msW8ew8 zmTt(qTr_;!kHQK%R_Cg($RMxefbqy?C`bFiA4Ek(;ijQ5FpCV0ISyDC{t`fjlT^dXW>U%5}LJ`;-{!GDLF0^;rS*|&LW$h2lHX$ee=je#BMVum# z>^UU0B!ycihFVO3$wj=RikPO!c&vCNRrdz61wEU~6fnFp)jUUxdxMYI6ffy(ByYlI z<+&^mR|qREG1g5wM7(`#CTj9yBk)|lWzFfw9r#iQZGvoPsV;w6umVQ??1j#ZK6uWX zC(juSJ??r$Wy|8Rzz37`FingP+EkQ;L}J;qdEm9q4p7P0{-CBwbAL9|QHQt<-OZa* z=*m*Zzcgt4gFGChn+F`5MZ@b0ID>XIXAsf&8Ac%um_Z!0DW3F4Vec!x`U%pG0qeQL z3n-5HaPg)Ht(+xz?=6p#Qkq4$IeP{ZE zc_ZY6r9*=GGEJ=eOvQsS1`xmy2mba=5C?gi2t=larY3fA@r29wGBjX_`VX;uZSbHC zF!-hqtw9pw^EZnw(J}mq+9m1+u=QDZ@d`)>aL5>iUcw;mOR$VPIl4DMN%99?8B-ZO z2{ft1!AcFHbNy=er{mj`d!UFJFU;jd1qeHGmgw8f=OAmU<~Cy4+u$q6>FX=%#Pp8G z)UUAEf{GigHv#4~?SSy;tP52f(03Vn26C6cogLS?p4?XGsVXZeA=Bd=Vq#(=^)ouc zRO0bM0b#^Pa#*TCGkYMp%}+n_O_ z&!e5TTn$6S6d8O|ttslrt8NC0mx+r%OGy6#KUOMxn5ghwD%p~M0gRx0q_)EIeIbWOJ$*; zT8{t|)@l9*K^%tREAH7)kdpo>=Rs}3>oyjKb8h-#TwCktAU2q9X-a#rQ|`*+ezhJD zk~-YD2kjSRa2f#apu?YQkW;8>Y0bn9BQ|H+$KMRROHU^qEa5>}@Ls@;zu~742Adxt zL(NE9JaqcW6G|2vNL?;)H4v^q@6%wmzwinK5=0#ZVF~m(wjBUyfkZAn+#2|FCq1x- zUlYt|Jq%Nwx1hM{zR z*PtS&r0OS5bDfJ}i-MU2rZ{nE-K|}qd1ERUg^*)3-@yLjXA0V|-FFAxPlLj0R zw8npCxuGY}qN3)zf5U`-=I1;BJpwHw=|ItQI`ZkW_GhbgUc8-0hD!9jH#d8X?&TUv zvUqLWS%P5OB7N+cYmWF5WT}a?AQqIQWD*i@9{wV$+QE_zdup=SSjUXQL6f zp(9X2f(!TkRCv!0@(u@hD@>Ae;8?unmsQiUcSwL<@8}#mSRbp}H*Pu)ft~&J;TEI5 z>xGIVF|zaEH2=AdFoBXusXouwuU{o%Gh87kuU0^NS&RXi*Y2BEnP4cq;_GF%NLkfatck|}M!>Yq@rEB-rVg~8z zL}OcZHMlLxZh{D;uHKw=^^oZU(pGg>cNY2J)m*!7`_`Z<_3Xcd!s36pEm!S*-Ajx~ z@+sKSG_(^Ud?S*qqm4F~&cKUz03xitDqngbedMbyl@Bb#I=G(Fcb!sd@1wqhcXU+t zk$-pue5k3x=2s=4;X!?!nwm|5iOG|?7=xb&-wYr%>EVGRlR$>)@cm&xx^kP1^R!wg zrxLn0Ue7ill?~=RAepox?RZ?1C4CXk-m}o&QoCQsJ?MH-CE>J~vGPG2G!=-6Ix~Je z>-j-I2hay~H?LPmN%?th)mK=SBhpnE87OIYI+A^ovpWuaRrORNzGtdb| zYzE%4fV{Q}-nOKpWE}*Lv1$pAL8~nj#fe1!v%>~1Kfap1jy4w$KHCi(5HeT;ROlqk zw{XF`Uf?Z7oe*e&MTmB(X7%0ysYAaVys!sJGjQuZc%uh0`wzOlq8(<}S68?c2`fc| z|4hpA1}io09J-XO$i`mBJ$(iq75#pNocYCiYY+(ccc-m0BcdjS4F>>e0diO(ECLXJo#>tmQpwq=t8i$b!5Nr?>l6&j>+FQodnrAWwoLg1@E5cqGQE@aLxq?0^lsIZ&Q=Xxof&;Ab8e7D12}8R=$B? zh0N{cP8K3Ml${TWOa%v@E!02i_c=3AMZB9IVRc^cRhKSILbpT@ESdut2Fco~*U`}m z?(SkhbBaw?!K@&>3M%g9OETN~4KXl5Y|PQNG-!gYrRbUPxw{PnpB;fYK%Z+fL7o0gL4eupOOk{#K!t~!nA^%=zY)KZUm%6KpLb|5D6&>>28z~L|VF}1qrD$9^dc#_TE3vx%RKKu2UERMBV0&x^TJ|Z%EK|qA1ni z(2ZLiuwtU-@^r~;YP#842X7=c7`FuxLAfUYDK43GMUoV~3Jg>S92~F5E|oK+CrePr(iM#SrM>1qL6lDfAW~4Par>EPjQdU477%(F1~$P*P{OKvs*5b`)?Cz%zD;HFBi&DPugZCJQS7u- z+8B732+fq$)LxULj>srym6Eo5e-4LE)C{vyq^x8F8ud|+HcagyNEqyXQEbS0P!?$B zf|Xw2H?Ra`GLS{PT&b5Gs=I`WGQPk{b^}KOaJ+QD0E8)mc*yM43&as-uIOa61i+ed z#SaU6ul1Pj_HK0?W>3g#V=GC?*Pexb!KuSdmuK$HEO5Qc;ucVKuhDTCZWM1r%rTvs zLxnB4^s{07Gie@R`@yM_^^lN~zyC9dx14E4H{{8Pg1o05HAmL_uf*z}K1ZFClvlAA z`1jdY@j$9Z4Ctz^)7Hqyb=Pc5u1xAEd~6ekR6O&I=EOu&Cnm#zk~M}!r*>rp+TlwS zDdxXSs+K5$ppHzNXxD?O$P~OI>bLZB>KZ-*eM1!(T{@p}aWdX^kFGx%x%6ejg`0;j zu84?eFV`>~-tfZ0+BaMOFeC;EtBh0laJ05d`UE-@^p6WoqW-@lU=u2wYV6W znTtoei!XLxDE(C}x{62PIaO})Adh%&6S=`4Gyj03GnqGx$uDf4ejZh(cW^1knKIU6 zPvE`uXCEv>FpKMx!<8pgtuHy-CAc_Gco-j~?(eY~5u95w^-tYTOG{IRO}o60v6E%y zHtlQ`UcT>HMn=JCNh^m+vyeL}d(B1n-+o$#pTI)4IePu+X5&u1gYoBgS?Vo23ljGo zzz1B7w`ABD*Y90UpFr%0>#g}@jz*LIzEo-@l^n@LE)9__k+b0%=Z1QLJ~wxA&i&DI zGmMepd|7vy3uBKexd_UZZ&nW6N577pgnD#Gp`_I3S(6}Coh-f=M4xA013uFoQE_m( zMF9zQqLa+Gw6*xfI{Ts(i$pL$>{_ezDlxV`KIirigsEfpF85TTMp~wni8ppCVJKgX z)AA;_??ofgj|)}Hwz?&B#WVsEhb6~34v#aU2zu!3OvO<(&KQ+cCnu2{L_{dlKAtj~ zWWLn_{6`u-q!D}>!hOdYMIewf+IPcjZ48@c;m9+*%Ni$CS>dJ_`= zmM10~iX5%p_nOb~=!-Jno;@dBqqwJGqMK(l#&P=Z(WZQ_cb<8Xn2+SgPm|L?b(ArE zMbDE6hZ>+O+6f)FbG0zpl!d@8#=$YwuRSEMoah}S6npy+ZDe?k2&fpHucR3z8BZFNim(H|=lR$tWk-xlBhACh*~ZjvZ=XhC@I7+_X`7?=hW; z3HT~%PC#Q^N%NSA5C>Ywgj`nc-27aw^PYLsA73dc=^b9u(UEs#ril-UO}RbZ@AiEW z-WV~~DpG?^rOz%joOkaa=;Bg)8)?|Lvh|mQ)3mjBmT~axl}mrwdN037MiTa@@)m`<=R&2` z+C~a>c#R%CyJ6p`KW5`?u_m_q@do`b#ZvU!QZkZj-yswLhk!KokB`7NAGGX@@$ZEX zYAawL)rKYgt&=U5Wkn6KX=bIlCjv0K@RCp zRxt@?`GqtUh54oLh0Iqd_vEOyced|H z>QX-OolT&K2HRA6r@iw*kA+sJt@0MSp0>nJlt;QF(LZL&xHr_{k8? zsoQ&jR)aU5HvLWE8RZ5c3h~Y~(iiXN9 zHzV`w=XdTnMFhQ-t#{864Pz1D=C+N?6uKN}A(rskg8gdBn^x_!RSbu^i#?%oUeOWy z;yPYAc1M{i;=HHg7w|qpeY&lvBMhKyVPtKU<|H+(Qy#^9?~ap@qx0R!cyQ2*i*p0J zOoQb>BmWBL3vq`78+w}B7X*xb{&;BP{sCMYD_=?WljzZIhEJWF9Hq7_hWzjxvJ$iX zF^LTH@n-#qm5hqQ%WXRthdxDaS_0QEx3e38CI+((7?RRap6iX5p2>{jmSu>ZWp$o~ zj;TBRvih>E!10vnh+{(j*139>XLoU9($m-QK#TnNn!%xu1S+J%Q@CVTFq2ik7JDyn zTgx1%RC~xobM{_94mUUI>?7_Y>|1;9-q@dEEyO(_B5VJ4ei{*>rslTwg@eLlT`*#L zAZ?9w=TFAOt?-bF8OaY64txx z;NH4E?^63ZB4mCykz2<#X_`7do<;iiC3d5U{SA8RM=lQsh-$0*6KhQIVGWtQ^1n<( zwz&I3f{VLXt<7et{D+Rzf?Hl*w%}}vps5VRD4pBn5xAEFnOE>%EXFR8gfl3x`4bnf zkW+MLe*1=g><$A=OUDvy@cK0tpJ2)r67`i+#)g$v!r2b0*|p-?Utb{AO=KTuS>zje zS-a+&3-NgldX`%`<`>yXR~o=YpX|Napr2#z+`<;r+58bU`NU&)otr!#%CGJ>xkiDx zasUZYlzJ??bqDV2*LH_U?hgnL>;vvwXwOCmBc1wRWaG? z2Asq|srBz|7WF1)*yyYKPd?At;5k$9_-C_9S;e0!xk)XAnXmc$PK-dn#KuybX5rP; zI2Xy?W|JPS!jqc9^CakWjVndmhR9G-1Bhgz{V?vMa$D2o6#Gc}e)z z)mFRldJ@mhV@`WKZ_&pGPDRxh{9g7h$s>{6`3bg74bJz%m)T0zIXf!<+AiS=UhFYJ zPIzwx&9-i~-AL`R!=<2@1ry2A(k?uLTcy&M8rf-sZ!%y}@(zye)6u<(O~i@UL)Wia z*``!cMN<=jZ6ur1b|vbj@ua}v27ei|mZ$6{@rNtnw=-CBqu!p(`(i7S^jS{;p$su< zo~-~NR^Ui1fjFsR=#Yktw*8&@N0Ajs0D>q1QbLDfs66BlAf3vxzx%^6LJ(&y)m5H0 z%kAO6eY{`cL-^>r=v7n*#vZS4D!WN8?%;#muPY!Q}@Y!U6=UQ3*Y;jk*E0kjUV4Bm&2Xd@*4ew2r$_S;NVA<21 zTT{-Upb%*a+PtU}5cUIPQQW8_AtmO<1jwSYIGR46sok16J4OuqjuK?PiHMe3sfifD2EWr|-|g-=IWm2j zco-0r%M^X7D$aA=T{Xo*W|3OnrucQGQj!U!ZH1*7;z-&Gc@+TL2a>EOKn)fZL*3(8jx&GFV{o}3d<=(e`!D^>44SK*~^~_eE7k{>to$fw&1E{N-@xEdgSCE8z|yU-K1MlExrzK30Fv3 zQ?lrN=&V`9=R@ViD${!nNNkfu#!}p!ms7#~1|3!elg)+;E23qV_zArF4jxdzgtSA>^LBm+Vz zk^K)O`~3dE0#t5xcnf;Rq<uE(oJ%kUu@T^~=4 zCg#7f0H6p$D6)+LPRH6v>(h8BM|27|>^>LibQYVgih873B=UauXpDO3QN8x5$ z^O{(dBnr8Xb>2i0!v~2^rt^zict;WvMTv-*DF{VSq8=^$(?Fc97`p!!%o*XMI=4Fr zt~%rj#|2sjhF6eIMiimbp-vIsHBvQup=t)5+m6JH`PuTWA75;(?~SJZN0sCsCXN#K zlLS5yBGmuSu}EzP7RA|n57!}eIan0v8)!Qp71*o&fk22QU|;|C%i?1w0_!<_m1dkg zw;CZ0zmDH8ZW}(9ulwn+`n`!$NT`YGvu6!ult&xwUABZl;8DAwmEp14l4D&ZzrMNR zmzlfSKqYpBSz+^vu0jgb7`d-P1@(pIlULDiMZus@Tqc|VHC9;KCT3=DVq=|KywmkO zNjpUkBwY9uQ*|G!Ff+W(Rrv5rIQxLXh=XsBG0Utv2uET?{F?)p#4jC(HS{ z^!M8JJ`p}xO>{G#Aa$@oG^YT&FGt&oxw>Kq1b4{SD?w);5;VSw9$5#IEkt1zz_9eq!fA$SBOv{z<1dg3+!mm=kjJuKV-*V`WFC=Uxq8 zx{R!4E);K0t9;fnB>VH+fj`?!BFe-6(C_z}aXaqrB~_s6Y;{oaYF>uW=P+^L!Bw7% zradT{AH*|Pg2yqkXsfA)4uB+>g}>48xCPUZ?^KB&oK!mEtCEsn@r;)gM?ZaWp*-h< z;v4X$FX9S0chy4;6cMin{w^ejaA8>>6OUZYJstP5IFAvkN^kr7ql!0}72kL*`<`{j zK-$dQicKF9xk&^ao$X&gD8$p*n!DEM*Y$PqJ#&aNBi3$O4OjbK43OTa?fN9}pez7U&pvMt=ATgw(ob@wGPL$Z6 zixpOPk_X$5-MUv^u;fwY zVD8f|B<}v;%Ym5;RUxO54NrLIx>a?rJuoN;AHF2)3O8Eu<}e-L*dHAhn^Imu^4 zCnk0Sxd3FhWes-F>{j2$4?^1ssCsQ}R2k$*6MC_55&xC3yrUGThqYlq9`QOTm`;$F zclwFrC0(vqa6)&mL<}#@9N|+PGBLczR3GOyBRJW?7CHHATzr}7(1o1+cIGn-#ly(t zKSQOi86JI42uH(x7z>r^wEvd&)HN}o2eLINu)b9D61n}J;gxS^a4uD7bXRV7YJLtuNwu`L4|d8czuUE*A#g9+Yl@ zlGF@kyZEi&ApC{89M`|+4PYIl6hBef|Bk|X2rr0c?OQkAW=BL|eo<-at?h+012UQ` zox7IbFQ+8RY2Lp`q^jEUIzs&E->J7&VZ9J}ZeQErIXK)M$H5Qahl56B$HS~pPVG_b zI^41A<*gVJ=!eQ?0&4lfq$p1;tVEqikTNajxky-< z%CxOfY*0Ti)jdByXYRGf)J;0MF?mI$=5zny4p2CpR*aCun2}?34_jCL!Lx$Mbik8A znNFqpbV0okg{TD~3Q{i##qL86`4BSgXkA@hC?g=TfX>?kXv2Wo-<{dV;2EI7?`{nFadQh^Nx*2s=*MW5Ais>J z=QR6D%+S+E@M?w(zB(xw*ca7LUfIw0Xy0WdNlS%0O@|tLDwi-9=zk-nP0+AbhTFSH zK#&dfF(CFwLcw7<)jt;InwlCh6e2zmP3QAKhL=GU1AQqgBZS=#C_!dVlCexI`=fP6`wvsKy`hsIjX59tBQq{~Ekb-| zF2s1@zS|tmghfg*)BGn;Cj;RrFG-q6U{`>|oMRG?MGL^Q?yIOQgTB}tfUODuAa0u& z*EqAGsqiR7R=zV$FIfcL;>`q3=o;1zt#%fKoqU4*pNyG z0M5MNVVX)%cam_^qL`UYhqeH8-eEf@QmsEAOS9(Z<(adKww%)X2%B(_CB2gYZTInG z-1@PpxIHIsl95{ey8R^NrX5PdsCr*(y%hyOU;yDbqQ4x)apU^nJFgeu;Xi2@nQY?C$e^bdmA|A&7-eOI&&ei|A_(%T zA(87=yLq~;0i50q!=NkfKnai%>+zdS z#ko5yY?4wP5v>^q0=U&Qwe-^)zC$pbfGalZ(D=pPV1Wvv2*TMG) zC}$|BQ4NjQ2=;mfcHcucNa-=n&COGgUsonJeNNVSri{M-DqyLWAG1e%8$3{3DYk)l zL$HBKr?7{ULEbS{C<%+GUloo4J8DTM6d!?j3Z<`>55PxvjE)A^97*}Pf6JHsC-e7U zK3V}+FD*7qr{Sr(XWiJb{poK_0P@|xfrZ@~dBd~-snmrX-n5oYAZsPEPJ;vSsLCl+KGz0?ZE~|(Zmwhy6Gg0h`ho1G`ItoQ5|Ao zT|crW;Hs}{f>^Cu{W0BYUc7DUV8l4=)|q;j(!$>F0>7^x1VuIey=?z3I!YpUYx=pd3O2- z-i*Luv8kMJDSs?%hq|TgkB0FNUP>yfibpdtI$M;M;K>suW2iJTG^>c;HP6**bdqqW zothl{K!y}d(Cv(s3w8fh28#X^HqS5%Ph~YnDLqm56XGvMMFaLGyQH84H((!v9a9N^ zC*^qiM)Aw%mj{R;b0JelScxa@)WxRZ4zVR2&kU$vVT!!gVtHV(uOBy3QNrsVabvh}}WFra-mSOqHx#px*k(RbZJ z+6Mg@2a+mWnm4)IS#+FvQ&w@l8DwS7;py&hv<5=> zI&;{Ec#Fw=*nGcatpQYcypHkHJYgG$@A;edzI8Mkih1w^iy2y>MK7=B++e^u+ohS1 zJ9&hZWw7)V#9XFEOiU6OJS!(bw+kus)1^fVYbJ(_4krG zUlGlZq6WLpXn!iA{6tQ9JdXh-3wyKo7xY^gf2##)p6f1#j(fRdF{8DWFr%U*B84>% zx9`D3)3UhGW}NaswbBy%ct25v4_vCaxH3MdOM#Uy?^)I*=H$2)P=bT=Bi#8rh`gMg zf`+VPW)cL`jV>ETTR)movFuyidgHNX9?A4AB$^qWy1yu$Wj=Gl+xq%$X~yqIJwVul zFr%Yx@?N4dgHcJD8@B|>>)lrA9K9G3Z=ryLjY{J+P3~(P;3&-}S@y66b>KSiY53f4 zkO|{Tw_1q_iC*UD+%`2y7>h`@{SFne`?QpTgKUkd{7`7y;boDaH`Fq;R<3qiqHq?u zZE@y+w^eTO(K`8g1Q?W=?rW@})OjU-q+#GdhrZ$CEi}L{)NSrb1nCChuyebACNyM( z%$vnKw{Kyzwzej|iCH*&;x;riJE#CK1Ozz&kGq87K_{*@S2~5a%bV6|+qW-bf9squNb?52Vb@+yz0#8dv@;NWtJ(t&Q9p%J${`uWv9mWY{)Pd@s0@ zZiAEn!$$es%LTJ$a?)YHM;ss`#+4!L=rTo2{K+^w2RK!Pmi$$il5LRqr-n$c)Z>JX|Hs(&AV zeKd^zY)jKsRsrX_B~~5`x>sBd^y|~Md^8G1e>V6*(`xpsEHd0(d1=ot5KzN9{F?%w zUkLv5Ro3`3>27xbA@w(U2CF6%sFrabtL8-`8~2!D?PiCoIV!8ygfN}gT86b+*Ad(we}OKRmi|+rw1YJ>K;i@mOl925mfMKc zYDp2S7;+03>a<0xDO?WM0!|ZTwzJ?f zirr(a;>Q;j1Qsv%e53LrbqsaOvO-Fjcc+_>>SF($*3nbG_<)F;0} zRzq)}Jsn|p^q+fikOvWcR2lTN%PH|ok;e+UQaxn@QnnH%CRrOy40LoYcn{J&`tY>d zy+f}W?|X()1Hc^2NNLc;ssjVKa48mvIsh{MH}HscC-a?mGKtP?US z-zjcEi>au&tGu5*b3v&NQvIak7;_Bw0`Ne)*$`0>!xK^B=ZBC2B4?Fq(Z4_ta}^m8 zOA^Kw5Y&F6%h5Oq_Z<#nI&@*u1~@nu@js>BhpKS1KhE}c>lwG^!1c&ENPS`lcJK5RNFK^|^ zAmTgd#BC5Ta3sFn{OcppO&Lyz2%u-mi;lTgtycj_I*4!yvLVX!eQ$obRJTuMi-6DQ z7+86}_4vVL}BKGV7FY_oJ%bQ_+cZ6TUV?C zZvk-wgazP%tG-qd!vVaLcs`h4FKAvtN&}!#;n!wJheeS8QiaG5(a-?2F2e5w(9`GI zeh_^IevH1r!K9-O;PR2iTIZ)*-WJmhq7)PqLGcalM7m)OL!bSMj*iZe zSl`G9X-8-B-Sryhfvne1AZgujaa73Htc#43xzvPZf??@nJUa`y;!H>xoBf^ydPT-d z!JJdzEGi}va(lZ3bcv8|mY|*u z`4NY0e^l&4fmXq72%!1vP@5ltSp(7aZZIJyjh>-hGgeQ!_%xMjAt(qku<(%naKq3n=BuaAGRZ2^xfg<7 z^hvy>Y9v`7;u?5gi;gw|pt*&7A8=uTaK@6Cm#614_7t@1 z)PU0mrn?KEWLQm*!X=b|a*FbEPZJZ9AI{!6=u+~NU`zo`Hy_d3mkM>5K!^x%g-SSA zMt_$<$FayXg5o-d?_UABAH1GqNz3=Wu>-defSTUtr~Dv>_TKyatU#|i8g$kWc5{u( z25u7|oKPT}F1)w{K(Xf|r}|xqTXbqpJ3AlkGAteln1yffG;lyvMBP<+u^V76xtaw& zl|Q%?il2RFvyp_m%A^n`=d%saubrvewaV$9{&$*VGdVR?2{3F=Izo-NXPQxn00xW_ z0=<>etB(65p;>8LaUj0+NL z-%T6CVF#~#Soll~&$0C1`3})WNrbV00OXVz3oRNpYt~SQ068|Fth$4OfM0ZR2Z6=H zM;M4EcFHjoL~aRD*0=zV?;BNC)qg^*j+alo8PUN1cpVbKF}N#wKy5Ylcz+dhH3zVh z_e=C)fKXUzrav93f9-oAjplOnROIBkU2TKJ2M6wnbS!dF4H8mw;^Qu^KP)y#h3FGt zQW+jnn4&+2-@zM1&B30SfSTMMQ~=jlO3ID191e_H1;jlH@*;rzo;zT*XP$`E|a6w7IY7)cBmi`l-*?3eis2^TKY`@Z#9mv3m_LX# zKR0!IpwqJb;bGioI)m+jdrLznpt%{XFf(om>!M=MscQAs;jyiDjmF=JB9IO#HP9Ph zot%0fBG|tAg(KrG#>DFsW??FuTKuKnmruX+5F_2dc0>?dBx`%Sz2v>w(*q@%kiOK} zgK0QsHe;I4SebDL9vKZh)4$3wH$ks7Ji51sN4hKBdt7;ejib?u?`H%JVZ8@}xP+ze z#v;*H0&qXEQ&K=*0(SA3y3K09d;N~vFS#-^WFoZ1n-d1Lnk&ubMT5JGZ9YZ}(*9ge ztr$zq`lyFk7Xe%Ld!!lhtsoP(Z4NBRBs8K<%dah@(EI3af7;SQj>O*C@j!9<(eAkA zKaU!b@JS!Y4qM%W933Fqsl}{>qg;CvF`$zSv~aRcqQr+)7PK|UDdQ>A8UE3ns6Y<~ z(t?KGW6BHHUcWXSd+5Xi?ZR&S{DIts7{Fc+WA-H5_Gc zNVOmA_M2)h@AexvqgS1KO}vJOC?y{U$Fwju-kv^h@j(OW71PGHjC&R8snAzuCYV+6 zY&bvT5&yqFn+BhKo{?diHwdZK`De-efl#u`VX1>K!Ycy!PN47rW zpEA@Lq3UivZE!3MhdMd^Dp-p`5!%X0-PMQ!whiE^jrRg7)&_1I{;@23F3L*=OcS<= z@iJ_%>g!hODZqPLPP=r)5byWTM5RSlRa0+d8Xxi_mI93G3aG=w$XihslL3eUX=@05 z-VnJe;b+H%e{Ck{Fa#ocykpuyDV0I+q2j6^}QeI7~A`En1--~39bn} zsCIY?kq#mnr6P7jj}Sd)y`T#84hk(Axet6n4sIY{ivuVZkC{ImKyZbWV}^hqhA5YU z0P7JHW2@IozaR}>AVjI!aC0F4;jtw;LA1cL_eUV!fNFWra^A}Qg{J}#a6!v@1|%aM zL$wrX!wby&R0L^%?OLkq|B6b&$k^!;B!TdYe*rfHy7;Df7S|$EPhbeBgPou@W8E2v z{y*+iKnvjff!E!GUXw7ELT_L2EMr|gps)s9MI*ouA<|9%Z(fPPseu*5E%6WY)Ue{e zJQWT=Mj+y(=l0eQWPRSd;mzo&-umI0l+`lK;( zGTQ5LZ{FN9HN6E?Kt>p_r#o})pzPb`^0&_<^IeP!c(g$L0LcpI5lR4q(+16n5gKX&HD(AkwC``}->ASitcBJdl*0(0c#}Fu+yv zQ6_p@YXBilpAQ-aQja_W4yPL&76_>(3tdrIVloQlDGJ45Wvl;VT7^UChhPDKACV|v zPY0^Q%lX9(bKo~FL4aho51FN#LIJp!32V1oF71ApffzRms@QOXemGICPT3Ok!N>(C zWNJ?%@f-$7z@;PN$tYm;0hn;O3fh0Z4iCRYM~D6oCFSrxl$78DxN1>a1DAF(t;p0= zq@|CwEOMkM;!=yDTR_u})bd=YnG0q`IiA?Sgonc8V(nG~#8S|b2;pS{t>rmGu@WR# ztf0~cExa6|ram72cNH>Z!L?>(XFC9mio`}mS@{Aa5jk$bxPvEL20eZEK_lEX9mWWh zEmp?La6Iq>O`dMC)T z2SXcDHe13j=;k8`t(p(_Cv1WKiwEqWJzCjJbBBmndj7emX65 zOEHxYSqNq=G6Lm~N#MI8yl^0gmO3sgLl(haa;F6T4`@O1Ajt&iEie?&VvCTrO@Z~l^ai=#$=e`YOSs3&JUe-1J@)}16qAf$zKg0@venD3A#iE*t5 z-8@g=vc$0KCxH$*C`&>FtyU4+;(;l~maz<~qdf*TP0 zz?SI;!TBBQaUNjIw!$pa`SdJyBM2P{#(>620*Y-eE)^RB4vGMbgKUJzYz2sdXv^QM zzJPbN2?%x7@KljN4p!O)L{$MYkV3OwsY1>|8BEMwkeBNN8L6ebs_+~JZF0Z^1S7KQ z5W{jm|Fuvz0V;nz@U3?E;YA$PuoZx{7S4UhFUkbIG#J%yE-5|;x5~t10jCml6GC?T zgd@O;FQk^S_o;!kC!iL1+gx-HRI6Wt3Huz+0Wy=x&baTMB8eoVwKB;qMI&U-nD4TO zCRG;D8W^O<5vE(k{2|uu=2GZkr-M3~K0loXR<+ZR5}?1h;bBmf(9`^BUuQ$|pTOT^ zhhbZW=Sog2XPn~66*|goHzNT{s2vb1d%L~Hkp6j?C9Jr)Q`70K&4%o_EBh{6(x}pbCzv3Y&0?KV@SA|^)7I~ucA<1V2nToCRiAvjkXcG1K zP87;%b21TH)N_KG(uC@Q0AvKRz_K{4eGh{Oy#!KGz}Bt;5D6k70qDu{Yj=!b9}EJ1 zA83w)i!O?AjUlIC3cUt-tVXx}=bhf$LB)VhthoKW($)2bYB~PZPL2_>ucXWs?X-mh zxrJ<*5z_ZQ)AJ7DW)AqvM~b}-7s2@~k0p$w*8G!}NllXVE*EYXtpX2c%X$+AiQcCZ z+Q+LHF`5UW+r5lK^6AfHXwJnGUZzr*6$=s-r5>kEtZJyJL<|lN#-yd$xKN)=1GrX0 zQ!^VRV$DIe1F{oQhzHt|8I#p@uS7WN%sjv|8N=j6r`zKR@)c`QB%Sfy|pf>K{Q91657UI2Kk`I4=8(!)@cq2ks}7SZz{gXJ?eu)YO&d zYb>iSwNoqin?lRLR*QO{fpi-4yWJ0*q5`SPPfbji;Jg5_iEf>Jps$~5Q0HdsQm&I% zS*ZnGC&odviJBl#k3Am#6S*EipI27)hH+~sbjn6cLnEfa^C)wF-=%E6M;A^PomEg! zaOaqto0~z-+1WY3ENPXA_LgpyUB(4$>`tX5Xl|dE<-O#GO3=2lDxjpKjERhV`}60s zviX@S0D)zcduC(9C)mBd_vg1IJ|SU#UY;C`-SsIrbyn2Fq-z9$-ORqLz%bQ|_BwPx z8GIFYCcR7ocW{5Oiuclo4<8oR)`at%rF_O%*x8kT|Nb2u5~8l86gFnhi39(NKD2LV z1HlqaW8)0?O(!(NR*Kfp(*vSRBvI z49KzroFx=Z%f|N3PCek1=CJ;2pi$ZQ__))_p*=ZW%7tIMyNjSe30T9}_;^+}HbvNU zV(G#5$b&b*4GP*ZNl72zXWcfHYv8xcd&T}ayCWD%Mn?8NGV-$ZR1I`5Vtb&a6>syS zjye7dL(Whhcwvdxh^B)=Lp3}+gdw@317(bs*49s;|JR!?ZrIz~%X0hna8r{H1Pd|o z@n$YiM=u5GVgVq)Tlf`V@_ zD;IvdFV4@ugG=9-ZZu?IU@+}$bwykuN&g`UI66pcX8QV~$=z&qm%Mk+8FZ?yiFuAL zI6J=&`_bqCEB+>4G#~mf*yx%smbfHC^Qsz(C|8ZZgp`Y_H(^K zF$~b}nPv=LKE80l{#iRF7$O>RFCHN}l+lHEJ}6YjD5!BJ^ux3;D0ZFnlEWn+;A0_2 z&4~Nm&_?-qTW8+TCJ&LWuC8WbVNsKk@&^e?G7^$^@f?Pq=XX}1^(5}4OX?C5K6CT) z!(YGN*{p$~4Gs_2eDEL=1hQgdVzQQ&OkZx|qPF=}B~YkFXa;XK*#IHN8l<6XJda9k zrfL`}Cknw>GqJKNOifMI*v|*ZD<}+)kAEmHFTdmc=)r@xdwWiWdev$VA3lVEh#7wN z5Z03Jqeo#iw^2=oEtlC)O}0Dk_4E5!SXiszKb30BcrBM|v&qZJsd{@iZcaCfyBio9 zrYoliWc2kZ193P%KVJbR+Av@pok39H>n>dXC(~Za#igYWb#*6O)1;`G;#r)FsF?^5 z8@zs-CK?jhTykp9p8ZVN1xy*c+|SL;IQrpl-^|U;?_(2CM|RFrOw}0_gK^$F+_ ztAX?LKvgyB^XJcdN4sWY8!m;0jRu|J*NzLf&`}BfoyUycHOPGQNuS}ZgZF=?9tvf2 q6^;k5)&~;E+y8#n{(tyt&p9eMt`>vn>8>GiZF17eQbm$Re*Xug(_!TR literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/compare_fit.png b/mltsp/TCP/Algorithms/fitcurve/compare_fit.png new file mode 100755 index 0000000000000000000000000000000000000000..09bf99d552890e78f9a311025c2b8d4b6c2dd371 GIT binary patch literal 38011 zcmdqJbzGI})-F5|P!t7GN|2Hk0Z~F4kp`tZ1?dLqnie3bNC^l^cOwldB?2Nb=|-fa zyT9?c_S*YB`|S6;-yi3%vwlkn=bX>|+%d*AuIn1lOQi?W7tT?fL!nR?WMw2&P$+C# z6zY@~-f8$voa<8u_=4jsE~|zI|9Rs*3WT4}I>=}{qfmqokv~|Oq8XMb6fH_t;;x!| z!tYTpy-3sJleHb%r|t?ew`F_UOQHv=B}joawszG(ynEE#!dy>TrQ!c?XCTC?#j z_CI8d#BFO#mAp-o$=m(SM)jVmP+IgkYY#kSGhe?E{GfK)uMXq48y5H6S7}!&SG+{t z&maBT*XuWRzH^lT3kHNfdzi}sUr}P1yC~!rMii&;ke_=liXmTO{ZXgj%O`G}i^z}Z zbZF$u%?nsK@C9v&M~nQZaPR-Qx2`%I?5xBjB_%b7QCYjNa-?Nsv~_kWZv5&fsUk+9 z1L)Bx^ozs8L%E~C@bH)pvp1>9oiB`yjepM0W;{DXC{XJrA@Th1u>HvTc%1?ZRgqAS z!9|Iwo0kl7n}5HWQQ)%BEBoQYhi~7$snmLIB^Y?6d10d_WMMuhu*^CW^%oZNbjqAO zM(TMupJxuG5jE)7cY9~m zmzz~sc(Zn^PgnD(EKjRQ+-HAN*}&4l~Q-_-nHt_fA_01sQ~6M=a?F%rU4HR<^EEBIO|vY+Z1@?V!VA_S8tZ8O9xNC zOhkU=FA9C<4xYH%=3!G)Q;#P;VRgI{ET5|~>xd&c+Ud*F#nk)x9j&)4XmG4m~Ip(`aI;?0|_>hYuexx>rM59YRq?fdI|4th(>6Mmn4t(;P}!=DMWgGT%LuUB?#_cgHcg?r>fH z0*#0stami*6#w&Al0CN;Sh={AgGt#{%B(O!`fm~va#b@P%zp@=zRnw9Hd5gj6dc^s z!8e}EWzwAa;GMv?_V(Uf?UGW*X{kKJdV}NR!;*6-%`fATC?l?bh7TSazoIPCkX3FD zxiY;O$M5{hV!X~r5-ZiRC!NtiQC`01^RqMWKDy~wINYU|3Q@Xy_ld~Kp|cCD)La?7 zn^j0iZ@M|O=lJM=gq)m37Cs?;ducdB^klDdf6?$n=kc*gxNthPuxI3=weNH&A2AJ0 z!SZM|8xM~<>`~V3{UVc=Z!V&mu1iB{?*!elA2#?mg@u!IiQCt#`NOnlcr90E3|POQ zmyhvXnVy;=CL_y$dz*uMyg{my=y&YV)ZDxfrD@O=$*MY{!iU`^2WJoz|m*Hhs*{cYlTxJ>+eyh!|m+v;18)$_kV*<0ys zUS>aDH@7R#S(_^0vM>jOV&yVkZxKCKhE1vgAFgY48fDl58&Rv>tR(CG`%k?)?d|Q6 zk3uf$4JE6y2ny;(L`FrWRj<_PYHMrnZ}l6x%)WCIu)V#2$%!%W*}~ka-FbW4yws$H zpvg9l*@^GPR%8Ewusyz$=?_~~W$_hyqA zWj}xZ{GijtW#sJ}W<|LOIOjvR44umo*!A@+Hs`wHc&wu%A|f_d8wllZ4Hdwd-aHsT zshg`gIo_#{NTrt!izGj)B$lVf790HW6c;Wu`OL%0D*LxEd-=M3ysR#w88 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 XeSWID<F0ji+y!O literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/cv_dotastro.txt b/mltsp/TCP/Algorithms/fitcurve/cv_dotastro.txt new file mode 100755 index 00000000..a55abe2c --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/cv_dotastro.txt @@ -0,0 +1,62 @@ + m_err_list = [.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01,.01] + avail_list2 = [] + avail_list = [2453072.13, + 2453073.1769, + 2453080.196, + 2453081.0925, + 2453081.1887, + 2453082.051, + 2453082.1399, + 2453084.0474, + 2453084.237, + 2453085.0327, + 2453085.1154, + 2453085.220, + 2453089.0485, + 2453104.0592, + 2453104.1665, + 2453108.0916, + 2453109.0451, + 2453109.1489, + 2453110.0888, + 2453111.0473, + 2453111.1455, + 2453112.0303, + 2453112.1564, + 2453114.0266, + 2453114.1342, + 2453116.0093, + 2453116.1329, + 2453117.0429, + 2453118.0103, + 2453118.1034] + m_list = [12.923, + 12.94, + 13.161, + 13.199, + 13.399, + 13.309, + 13.52, + 13.6, + 13.533, + 13.86, + 13.76, + 13.91, + 14.294, + 13.315, + 13.248, + 13.366, + 13.623, + 13.568, + 13.61, + 13.721, + 13.898, + 14.015, + 14.047, + 14.494, + 14.286, + 14.435, + 14.461, + 14.311, + 14.352, + 14.005] diff --git a/mltsp/TCP/Algorithms/fitcurve/fitted_cv.png b/mltsp/TCP/Algorithms/fitcurve/fitted_cv.png new file mode 100755 index 0000000000000000000000000000000000000000..09bf99d552890e78f9a311025c2b8d4b6c2dd371 GIT binary patch literal 38011 zcmdqJbzGI})-F5|P!t7GN|2Hk0Z~F4kp`tZ1?dLqnie3bNC^l^cOwldB?2Nb=|-fa zyT9?c_S*YB`|S6;-yi3%vwlkn=bX>|+%d*AuIn1lOQi?W7tT?fL!nR?WMw2&P$+C# z6zY@~-f8$voa<8u_=4jsE~|zI|9Rs*3WT4}I>=}{qfmqokv~|Oq8XMb6fH_t;;x!| z!tYTpy-3sJleHb%r|t?ew`F_UOQHv=B}joawszG(ynEE#!dy>TrQ!c?XCTC?#j z_CI8d#BFO#mAp-o$=m(SM)jVmP+IgkYY#kSGhe?E{GfK)uMXq48y5H6S7}!&SG+{t z&maBT*XuWRzH^lT3kHNfdzi}sUr}P1yC~!rMii&;ke_=liXmTO{ZXgj%O`G}i^z}Z zbZF$u%?nsK@C9v&M~nQZaPR-Qx2`%I?5xBjB_%b7QCYjNa-?Nsv~_kWZv5&fsUk+9 z1L)Bx^ozs8L%E~C@bH)pvp1>9oiB`yjepM0W;{DXC{XJrA@Th1u>HvTc%1?ZRgqAS z!9|Iwo0kl7n}5HWQQ)%BEBoQYhi~7$snmLIB^Y?6d10d_WMMuhu*^CW^%oZNbjqAO zM(TMupJxuG5jE)7cY9~m zmzz~sc(Zn^PgnD(EKjRQ+-HAN*}&4l~Q-_-nHt_fA_01sQ~6M=a?F%rU4HR<^EEBIO|vY+Z1@?V!VA_S8tZ8O9xNC zOhkU=FA9C<4xYH%=3!G)Q;#P;VRgI{ET5|~>xd&c+Ud*F#nk)x9j&)4XmG4m~Ip(`aI;?0|_>hYuexx>rM59YRq?fdI|4th(>6Mmn4t(;P}!=DMWgGT%LuUB?#_cgHcg?r>fH z0*#0stami*6#w&Al0CN;Sh={AgGt#{%B(O!`fm~va#b@P%zp@=zRnw9Hd5gj6dc^s z!8e}EWzwAa;GMv?_V(Uf?UGW*X{kKJdV}NR!;*6-%`fATC?l?bh7TSazoIPCkX3FD zxiY;O$M5{hV!X~r5-ZiRC!NtiQC`01^RqMWKDy~wINYU|3Q@Xy_ld~Kp|cCD)La?7 zn^j0iZ@M|O=lJM=gq)m37Cs?;ducdB^klDdf6?$n=kc*gxNthPuxI3=weNH&A2AJ0 z!SZM|8xM~<>`~V3{UVc=Z!V&mu1iB{?*!elA2#?mg@u!IiQCt#`NOnlcr90E3|POQ zmyhvXnVy;=CL_y$dz*uMyg{my=y&YV)ZDxfrD@O=$*MY{!iU`^2WJoz|m*Hhs*{cYlTxJ>+eyh!|m+v;18)$_kV*<0ys zUS>aDH@7R#S(_^0vM>jOV&yVkZxKCKhE1vgAFgY48fDl58&Rv>tR(CG`%k?)?d|Q6 zk3uf$4JE6y2ny;(L`FrWRj<_PYHMrnZ}l6x%)WCIu)V#2$%!%W*}~ka-FbW4yws$H zpvg9l*@^GPR%8Ewusyz$=?_~~W$_hyqA zWj}xZ{GijtW#sJ}W<|LOIOjvR44umo*!A@+Hs`wHc&wu%A|f_d8wllZ4Hdwd-aHsT zshg`gIo_#{NTrt!izGj)B$lVf790HW6c;Wu`OL%0D*LxEd-=M3ysR#w88 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 XeSWID<F0ji+y!O literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/harmonics_phase_(189.312|n_0p05820).png b/mltsp/TCP/Algorithms/fitcurve/harmonics_phase_(189.312|n_0p05820).png new file mode 100755 index 0000000000000000000000000000000000000000..624cb8e7924001667b3099c23636de8d339867a1 GIT binary patch literal 34591 zcmeFZgmmq3Y{8-x}b`6 z5q=YE?_~vlVAwo(^c)MmT(MsI!M`tCNvqkQPmN5!Njd~=0|G8uQ+PKq; z=X+bw8=fQWaN8jy=<>x9`?Ge;BiTBWZrlgb;pYp zli1ktys8LnCr#`qk|+Jyx23Ph5*WC9xW0=k!NTQQ?C3Z?a@;EJim_Q>p`1UC*(8~= z6-@B^`{j5qc>qlu`D*saMiKn|3VDh~^Y@D~?ZV&x5*L=l{I8D(V&nh)%=UF+>c5|v z;b6S?&-MDxJ^%So>;Hcv0s@ACv(w|tSFhe?W$jwI`%1mS;^vz-Z{%XR+g9$<&?w$V zR_)}8j*d>1c3WE;1_lP|+PV76@1eIaE?#^+)$m4fbG$@f>H@mR@$7u}4GHn)IE=A*RbgUEO)w;Hc3k5}_)R9LX^w1E1&$shh^HJU}_Uk{`>Q5eYCyG?97FK_6Ynwhjm|Scjw|v?5fo{xs zwcuOP`Epj0(O}`t7#!+K%q9M1P8#M1*X`3HPiX=WS(?)WQ2 zv!^sa$%Q#{IBx0eZ%%f@w7NoXJ#<_xs0irByTR!_H}?{LukiLFj?7rKervGVSY=pa zVe_HjcmB z=$$sI76Y`;C(qBK$SrHaV0!GG~_q);)LAB_ax6yk)zRMboc5Ho%M z{#~ax{ZSS%6-rlESNQC3cFbYY4S67?h_lu2xkn3~aZ*M`cf;uwMA!EQwOm*p`r^L& zm9J*e#z;f6kpic+SpgFRnN!ZO3Y-7@h=&5 zpYvyFX!NuZ<89Ut*uSP$^_p(H+M#G`)yBp~Rz&-kH32~h8%q-t4NZh%fjW;T=K&gn zpmywM^U(`nDn8h?Dy0UU*=nVCG(MY6&$Wfqbroq;6h1frr*ixRaXS%&WMtS4Fm06u zr>wq5%F4?AHnlDXcW7w5RJ5Gl?X3<*IiGeV2no2K@T2bEzkijC+b=#oo-pr)`S_Q; zvVkfXnUE1yq@UmOA1oDPjaS%e8n&jJmiw~scuarId0kHE6FrBYeHE74U}!Q{ zR_r+Byf1r_?_*$MmN;(feX(0@>ExS~%aTtp8ptIc$Wx(bVtUV_@p)@NMSHsmPwYvW zBn~RkWkUcKzX?v?aG5dD`bhcg@n*f@&r}K9&549p?U8Cn>-Yp=GQFa3Zr$&)vu_3F z=|q&{VKwY7_r-{~@ZPv_V{UP=4;E&IIG+Odl7h(IwJRjdQ&V5xUb}X!2aH(sXfAwa zwY0Rh}$Jx?y6qsxx3m2*FO^awr|`A2EQRnRg^fcn+aXa!qN zPR{Myw|mkb5q$^`_xJbzI&FndMD#4hWo@YBEvdF^*n8G5ex9BvK6(=5)_EtpeF`0k zB5~Q-cbyM59xEy;W{i5sMlw&&yk`?#SA{R7mNHCY>I_vdvpkieI~*KgU*BFrH>eoj z-L-{t{LK>$9qTG{{Z4jrvS(!_|3>YBmi^k$eFK9``c&{jetwu_yk_6K#m=wZ10Mr} zj;ND*{`?va8F%)~%l))lsu`-EUS7U+>(*5Y{;jgvl9CeeAYmUqyl!!ki{X4nD;2!e z!PWh-O1TcX*G{lFYU-B167MMfIf-LB}t&sUtAn}h8&RiNQo z$NcWyyQ?<^Kf;H8*19-Uy!yKfllYXBU2t4rUvU-_U0Ai&;bS z%A-|gAf{F_`?I^8o|RSVdi1;Wi&pr61bE@KB1T^syXD?@teRi0oqO2Ya*Md^rz0jp zDH02YQ~6_}9rwBCM;dPKvVN`Lv9Yn4oeTl1DHOyI`dhc&Bqvh`QwUs$zPt=$qY!ca zI5nkX0*1eFeB3ltpQ{YU=zchTDNo;#*sZ%OxXv;nYjb$`=Rv{mT@fLnKXpop^rGyA z+V!Fdf_8d)D+3lDYzlo8p^9Z@!yjNDfA8!l2x)O2q)EId$EG;+qX& zW_vL6aU8$n7B%S$D>OW@lj6~xzx!&r_3bCe3L1mNWSv_Kmmw}38){zO&xeO&RW@MM z^n!w4`d3p^Q&lT0#*JI!<>_H7=US;eUVin$r2A$6*Zz)5^YfWu9uG%9n->Ht&chO< zx*TlS!bl$JAt-AaE7L>{^g zl`Q$2utth20)KZKhstf2pf&g=t&k8odz#^d$GIEIqI#VdS+&$tte#Rs1wq@T25=^i z3)IV{Wo7k$d}QFKz(qVtySvy%>V@>H?@8GV;M~Z?^M{R%y@=&8ZSlgqvNT!mv26;j z0@rso(1sTrwCks1IRt;5E!G`xFip4$Qd4^#Ot^#~-*D9S*GHw0Xl5>^W&Mr#_MJN) zVqzY-yNkj$q&>@$54({Rkd9DNHO`#=ROnwt}!BJM%IM< znM)^+I;Jc#*8gwdNx9I!$a;-NNGQ(x(9u349sjwi^!;)ZaY-qnq|ke+s?h`6;^M9k zJOP}k-+XXJPfd+F4fFGJ)UvndMIZS*U$twS`Ucg2mVQB>hDNp0sWbqe0IgrkCc;O@ z-_H+qd3#$pDp8(XZX0dE_a*t%@UAW4%xu9GdYYMsf3Y~K`q?vo*4Y=kIXg5oGlHFH zun%at#MiDJxSps@+oUh8pePnwgB)sYzBWlmY#TiqLi1Q5<*2gIQmXD;rcBqx~F{+Nd(sB(NF)e(GrpM)+4Dc{D zU>|MxG)sWVe)Q7I=PxKuKYTEH_M@t^VdmDu8iS=ctnAtaMq+B-v`gx+Q=R5vVa$`Y z)g4ES6?~Rm0h-mqH)ZGYb7~jJ{;n-SMQ?y6&2Oo{8BudVfbtq+kn$Sgw%C9DqQ?9i zD}gmzCtAskAO`U3+Ovgj8v8LdUXxZ38tY=%cCtNne;^Jic zG9Nnuw!FcvbFXTUMZL@qa8gu(M#byHE!~y=oQHsfV}zYJ!@|Pmwel{FIJlnjxbEM$ zdL316qLv^D8rdaK<0gj!`e`oW&LR+`XyZa>#EMDkqHT!sX|8pG1I`CUIo-WTxu9~ zRF|7wJJ=S^Zb~8-i*a(TzayRMx#c)deE3_oa`{f>hM=^(4-tL7JR3Y@MvW0*Qe-478wLP` zteb4HO(l6Bgg$3xWLO_=O>=dj5p4dRkLoFB8gm!&_HEikw0> z!=xy4J_YI}H2F?jdb~9)eA6MP`sJE(kxyO`>-m?4drQA?lncFUU8dPQI7DvakTr}u zH2o?_Y(vJaM@&p@p{%MZZDz(iT46~qAP}>)WtB(kevO@CZF+*E~7D$rBhIj< zg@Z{vTFK{~$9{h2j3ZcE;0*~qQ5}+=IWGI`II?2p5Q>5&Pfbf}ulcoX%c<9lwa}H&4v8V- z3s=8d3PFsL5(Cx#Fxst6kGO%tF-=$03p?VPqdOGBSo*Dv0mKFo1zicc!<=`SZ9Ogm zb_6%hu$ra(*NrD4*Z@+lEZHbl;ghYVn(Y?ye9h`eI7%h%r_O|ggjoDMQyxRby3dQW z65d|IBhfyFj2JnMkOmq5%D(}b7sJ^|om;h1JzY++erv~%=PFvp%K6TxcBNmGqF58V z2}umFLr;%&&s-1J`Ig2BHcDLDXIdBs&nbh=a#IbSTFrm<;orT(q5%BN#!g?ZRN;er_-c! z?<99GN|6rneGQABtgAGM9}*HCKX4VUR#e1dWKK_3=b=eU^H-2A9!R$Ucb=pEubb}Y zyB$-DPUKtJjoY!i3643Y4dgH`9$Iq=ug*v5F3KDIg7aB_Y>}-wx?)RHw;IAEE3xAn zk>SZfK=4^zE%)wfY1XHUdY>{;`sR^J&EybN$o>YE5ia*5%tW_e9cfrs-YzEjR&Q`J z$vZJ+5%F4Zzx#fPDmq2K$u};;m94r1xpC{LGjV{kseM+aVnMQJV=^^FWAo|>G6Kuw zzu{sikkaUY@h*FwtjONS7&A&Lyb!Ss7ZJ?kgC?;vH1MT*c?wi8=oWGwVcGOtBdvFS z=ZXN!v`(Cgq~}i-#qfzS4<@cuOkit!nDY|tmd~Ik>pqO;?PR7q88Iz3B`veW8`QdD zS&u_6ubS|r`Plds13_3Ru!OD?6SY01^tS6J_BYQ@Z2Ewgst}Ah9w@}|IIm{7r(EFm zp3Udh!{qzuj;kzreg2LWF!~>VPWk|C`1yTIhdU_C2gd}Cf1+EPz}c+5M9v%Cws3Zb z9si3R7de^x9`Tqf*O(2S>wXMGni`dzUl0jqU;IFTjpBy|&!NDUYhPH!s0_Ni+rm5J zA!f?mQcUw1Xj@B5MhV(^b;y;r=^14Y_>0$sC`S@*YyWF+MP20ST@O=Yo+l>a(n?0t zq-%-fg%9_oJhbZM=_$O)teM-kOk?M8}_8Z*fTYDSkcXT#~(2D8{ zXVQeDUg#|}!hMF%0eY}8GY5i$$R8?y|4Q5K8{mZK$mr~uhs}8N^Ya8$RNX*KJOCc& zA3`vvaga*XHTu>=AAAxLNx<61z-d9`^(QCNkiztHET8n?6S?{H>DIVIv8#aVNlDDX zEkpZJ^UT&Ie|qYS{I6@^^&?N)yQ z`@y0VIgZ9OpBO}0;mmQ@(cSuLCeN>fG8?_Pm|*yKB~}3@ zB^~W7R-d{t3aX8(0N+~ly9v+W(x#{zHSaIDh@SsC2`hJAK+tvF1)sy=dVkoUZ+d!q ze*XRp)-}0Te1J%K4SX2|n;^-GzR*R}tpG=ytUm65Jf*iDXU}l-9jZ=VJMKJIE&J}8 z1Q~pDt@>xPwkU0PwHe2sV$YeQP@$hPXyR_5Nwso~k?6nUgMUOM@k; zR7etagS>gl*u_0w*y#i26_TFJ$K)%6MV7i>abKZ!vAMZ zj5<0xdf~EOP9gBx8)#|8A}tXuw>>4GOuwxRzSw-OcUvK=!R>+}oZ?K6rB>I7PK8GGgN8F_(58SMMamakOHU8x? z&XS1eA?M1RCMVQ0r}Wq#wZy+^?$hLUCeUAK{*Q?u9=^bf?lX_O@Y=ZP0%i7LF)VXFbHn6_^%m|`QZ7!yV8lV+s;-Y7<4jR zqHka!{{%lh{a$CRGCeX2=6`&c9#eZ{%)C~Xg37k8O1UYV^GR2Idl^z#kDRM};7-L< z`iF;mQZdUc%&`f~oeeD^ddxd5cKg0T|2wuBfwM8KJZ#2$W-Z!OMp;CE_TJ)uU9?`Fn|h(y;AHQO`>{D!)sgnOSDhQ&jCgOg z$ZEaZK=s!`=M(VR{@@eFy0u45l_VgfAI_pD#9U_4c#tHTiBGWkN&ixru|5eNK-Ryj zSeYdDc`)|_Hh$c8#ifyH&#r`9wCHt*7gqX9U>reerEn;wY7eH^JWBqqmCKQaOF^zN zF>^_O;0=SKko4QcR1<3xF4J8?xO{>AiyDGEkG-sC z^W|xkI+wX+8HzLvmA`*kOxyhfz^gI5O$IOMiwqDi_Eqw;l{t5_oy#%irGE z+UbTsPO5Fj8Rdp7;186rXYi*WRYtcu!D%~r$Gj;~{W3!+pG}g7uUHy_u4A-(YW2Pwy z<6`5eWn4s;o?dct12WPX9D@!|gHCETxM&8K@m}-#LbtEPd!1j*hxO;BfcDLbDzaouto zU|bp*SmA~gNhL(&VyWRnXF>0GY6+RPb-%QBxWNU?%HowZp^bm}x-lLaX`n1gcs_4+ zFNCt#oP2G}IC6=YfZ!;tL$30-%+8yE!)@g(hB&tJ!F9tEE^*#78G*veLV4Yjr%A$>A#axoY206bk{3DP-)wP5!N;FSch98q z$N;hW1V|^5#L8SopyGzA@Jp;dLL!lyvcgmQqq^OcT(&~|Lo3|#JMZ>mBY+Oko&OQB zyEYu&+$??(kMf0U4V36ykJl?G_^mt}8hV974Z7mnkb31vx#@CG3Ob5jA@MdR=Le|g zd;&zmIXOs5x%4Q!BWpB{_x|cHFmEA7W^NJvYKOSf`>bESg9Yl5R!B&Gay_t+(I^>5 z8=I&BZfO0tEwgoL5P6E5OR33B!yDx+0WNK$BDF^ki+>cqY$JT|;KB97ta{9Ul@Am* z%Av$?msJ#%t5Vbj^u(jbkLRH_3NHb$8X~ zRcp@9j7B6YkBh|P1QXt3;>j$r1eUSxwa;hw>V=XR*w2_av^gpq9WgR4y*ZFi~<{_YYz<7 z+{>#Yy$R@(Ayw777n)l%XUu@i-^KBT<5P8W<>Vl_Ec;zQm_q53W6#5n2+*E7J#Mla z1h!205vKGFz+I2P@&VFdoa?ewrXG=JbZ#HcmP7sJmH#Yp6^YL9r&oqV!<=}+sQNQ( ze}5DHAH$dN_>#Q#meAPhu+k*e5~RiRuaS^sX4s!Lm==8v5o_e?R!tBWe%$$u6Jg;_ zPFzWtRjo$0t85mL!)|M98#B1S+~*6qJCx&nX7s^`k+MaZai7nhz13=#imcj$#29Hv z$*h($U~et$R|^bwe*8>JiI-Raw0P;{giH8`n4Oh4uuf4<=2-1nt-(gTl0{a%)Q zCjNF)4x8dP`9$t^z9a|Ae2pwa8S!Qnk)zu+e;CuV;*Dv)CNq&^Q?8R%qPCg*LSPf|qy{Ma;bcSo;)HriwsZMIthR@E{m`}|0u z@<5AA_we&5m|9))GIuTY*RNa4S&SAEz~K536u-Ru@?|uorR5yUI#0DCp5OD4ipf|7 zmW?V1%Fk;(QGHiF855lxPr}L)gyohQ;??X$4i^t;yvMUna0a}yL2P#)4KiV0yr$rr zR$T%R>a^!6W)qWa6r<~ByM7%UC+DY!Un-ztQUb`DjgPSlMDc6yvxJDxd#r!2A&d~7+o zS>Lpnlt&7i94C;_Q#Y!bH5f{zDE^j$jRmZYjaGSQ+hbiF%tB&O0!Kzz61`JbqPN8;k?oCcj< zZ!b+(E#}M9*r!s$6f`76Tq}pyg=x`E20jS}9hPp4cjA?>)oq;(KuO@_>(4YOpt${M zSQ}Q(%2BsBEpj5?^OTO+-{d=X3na^!d6>^i>e;xb$o6#Yebc)~h%ge6RWH-T}*m&#}E<@XNnovu>u0O=gS?(3tS zR{1Lff1$kuq<^bLzI>D3DGv+eXGQIeiku+b@)+NB?=LWYgb^llw5qK;E6K$mf}B;w$bXPhyUp^lI69gq zx-@2sxOlPEjsfv48ZC>j7ySI+;E+#c#^uY;x-;H;k)~9P;kjmZ*eW)a;``jy@8G%^ zC1kU?=6c%yqdKSX@6|ch_HI5V?Y*^Ss&BrP@|b?8tzOy8>fJCYuwzB*$8n9C4l(5m z9_J8k6(h%Ua>S#oS^xAq5o~J#W|h1sd|m_Qq5-tS>(^7|gB{M}DJgK6a^kZRId`Ha z9Gg~dD@K}NVt(YI5Z*#AlXr457~C0BHTu~IL6POTCl;4Mben#Nh=Cnp*bmdO>l=0C z5Su660bhU2gn;--QbtHVfs|l#w^!C`H=E&sIHL@vU()fBA=FALH${6Wo@^^Ch`d_h zs6G2K@F<?gfygH1J~|i$-%mzW-q~d(;ydy{2Xy{WA=R8K zsUXgIO)J^Zn^9~@h2+d+M`@`_#fc*2*vizIi?o>6^OTCkYkoE1JyiS}FJBFP(seeewhOsXfZBZ}O1q=E#AV~@_N_Yoj_ZeeDy6w`j(F=tG&7p^8{SSk zI*l0T%%VTS|C7vyODhUAZy^24(N1%T z(7Ckg0hqF$_0c!g4WZ{>K&Z#B@7WrQb)jU3Sc`g^R9wPOZTI2)V7mP*w+G@itzYc6 zeo7fsn(nPAXO%=nFsXb3C{IX4bVJyY9d%RCmRdw40oWK0od(ne^mZ!OYsAD7=whmh zau177dOBhZuzrOrs3(Z0ue|eZsy&FMIsQ(N*C#DulmvPElx-uCLc`wR!+LkPdD4F_ z+_6ZXiOFa6u`NVqqqezPgTG#3i;gHdNp2t!+nWmyO)44~uX%^;CN6MvCb?>LV#)ay zvSN|{R-_9F48+hGEYvitk&5Fr$HK;*0R>pPcD*}LgjIBT1J6AVV?56K%tZN}%OHr1 zWx2bRRxJeH2#tdjSRfo62y)(U^v!J_3`HJ5rbWVg?yq@?;lNfOIz{$uH9+R@=`$avz{@G?LTl{T8o zQQAJOly8gby!@~#YTo%32yc7G?37tjy>LuHylzdOW&KxTmFUC}r=5IxeY}kF!I97A z?NCEg)XP?qk->&~?|cy7gbtKCBbqUG+z0&fKRY(P*ih4>=XmZJPBP)hdNmAG=T7ysNjHTs9j7#+yp=u7=I^Quo>saxM(zdW8b6Ev_8NhI6)#9nL zS)0W!I$`1XrKKgAaW+uqfwHd$B!;V!})Lli%JG!#&i zg(B9=moEWrM_u^O+8qS7=4;m{nikdmN~;%h=(}wz78;E;>6SHtx2*uI5pas*KdC&% z@YiK{^xqP2eME#qT1dCQpbcuc|CvfUO2_yA6kTNBEoS%IwvgW7YrwH!Dj%F&X z^n#R^lZ&gZyE{v(*4cKY-ybgO%~#`Ma%Zvt2oRUELK%AEYBY9zq#PZOd4^g~Rw_7J zE3}e-9S2GzPapb1U2$u@!fK-m&L61*E7=?#_oe1mI{K!sZ`m#4;Vk6aoE>c~r2$Eq z&x}O#p~*tct^Luh{%4G$=_?2~mHR1G)QPaLhOn@nl7uDqgGPX3L7G&`Q`*W^R<3l= zg#P$d&6l3>HBkhg!px5B_$i(rl<8-hCY&zqZ>ntiV%DlUuqx&z?JE)>QVO5PUi=w*;WlOBhfAq(wSM^E{g9RWr!7>GHc@|xf$%AJ=wms zfnda(fPgQ>__2I^BGj@`%1_w|sI1qbmockmak(f!oD|sjpz@DNn|ha)Bf}wXZ$yAAlSGhq{^mqMdev$_96a(BA&DWB0@C*FMs(m zw{b6skmm@i)gm(<$MGV(3LL#2(4pai6dM$P0=7%|P{B=c+F8iZS~QW+RK;S^h*fY@ z$>(1k^*bz^bbs5<=1VCuRZxKtWO}u5On=0fj~LB&1c2-q5taO3S(Mior3?%WiAYH7 zM@ly9j)Q%0$T?qr$2aIs)LgME6zzFW^3@Zq_|+A0siZw~sQb0EHR*?Zov5|?M*Meb zzuvROPE3oqbX;sv6eXrE{E45>$*lItJ2VvkA})pF$o9~X>Zebiq#r$EIQSz*N`(T~ z>Fwk5dZ{Ocu~WTy+OsV@MT3u+ipKDDw}?UfPM-p7t9Y}zRB%ISccUKxqi8c1%;6SL z9e#dTz`V!{QQo+5*-F_)ptrY|-}TUHTO@bn1D(NIrg9yjKxr(GZpZaf?JgBHIY5sG64Mzd_`GrrWeMyI2m+VJnobe!OsMU*=AlvR^Z@XCn>^ zAQ!xbu)_F-Q;ee^1Od$T;YmxC(Ns+TbA^^1&Pn$x;M{>jP7p+9I75mlefnqbhM=uc zMximp1aPPj6No4%fWtG|ka|zT(&dN;+7VFe#E5x_f>8JBb@t>3o3&=cpJZNXmR$I3 z>8l``)BlR*0>-5{5u1&wOD#cM?W*tnPM(%~UHCCVLJLsWa(Cvv)%3fqgL<%;lOXM@ zUj@k#d8U|H62d#!yKanCdHebjx%s@xL?oe-fjaP;juCu*E9PITY*{2R>zqEQr{=pi+5se#uyyg++d0>tFZps%+#J~6Qp zoq$S#SGSn&`H56@WB^ht?L5h;YQH+L82R{`bsk2vGh&K=Eqwy7 z#D|xLxfNo9ZSWX%~z9_gkhx4w{pMy=0k=2=*8EJWW13--5Y^2F}Oq$=IUy>P5 z&xEl-X#4mlF=BYAW!d|)`7L&Q(PKG~;W1%jC#!M!1$yI&7K1AtdIU%wOp7S!hUiSg zH7b2tM3QKebL=q;xq44BT60U|?y_>$w)}`+50YwSa^mfJoS|!0$7+RIjE_;sHRE+8 zn7UJ2j$;pMAq9t$a7ea5u{fL%D+8Mdq@>Zr7akx3wUk^@HGgu|?4j=cw+uV+2ov#K zLvj*OYwGJb=653eZ1!~1S6b=rT~890DbO?>y+&fz^IES9rK3*O_Ux941I9H`*!Y7+ zxPDRU)xWM*tJl5w23K6h_PR_oRpjxm|M^y_H98v6YBo3E+@RF(V=V0WcOG*xbronL+Y?smFolBp(BIf; zpA4~+p(u6ZCpstBbUT}pr=O!&-{nDVymFJ6cU0VF_r+^|riDCE{J>gry89y3 zg-^MD$-16ZsS(QGf?i$zoy*UWw(9t)N*4nTyGay`IC$Q!dbh zvj!5h3!zC#n^7J^qZLiQRIw9y$U}+obr!tLCd`yWq5eriFW=D4_RuUJxENB6eNP0n zGd#<*IytlkG4;Yu@RhZ zAx}weV7{251(5e5_&U&z>^}^@1NP5?jBMTc9#V@a?G|l+rXcbSWY`MFP3sf2Lg)LX z>p~72aHu>>^nnOe&B!Lb&7&lQ_1@3Hiht@IX|jVQ!s2{hMKgxtgTuHTDHJ&}puYiB z_n$4sWni+Zwaz@?PGj%J-ANG?cz!{up_2vmQ^s1u#j8`aRF#`;MJt zJ1Nl8m+(05BHvi@%)_-ddrWDFe;_N+$yr2{UUW97a72yK-I8NG&t0&+U|l z+Z@}n2Cd0gBca8?7}w9#Y!JN{&=#-xNVAfP<~QiwLTi9TARF2jlHC8~D3DS~)SZz* zQIbCC`SvY6J}92we7D%~CdmWITD~u9xe}}lyuJSx;c|FksZV}FP=IhZ4V_2HpaD>B z-9}nq^z;+p6fZCTQ}CYac0c*q(H+ZWK`APAJ6PAJlRHBLZooXQa>08hf)-#9( zVnMyAmI}`5+VWpvDey6+eZ_u$H^E)Te#SAT{Z~47ZVY=8LZU)F#@-0Np zx9RCgxx=Ow)TpGTrKdpbOAApL+SS5BLmP-yUI1crDF|LQs5)7-jlBt@vFqyNZUmBJfaIrA7L(z4KoS*C<$rcnF)j~VCE?n@Lvc02r z^PxE7k`Fn^_)5(_`}q;W7S*2-+pl@%6~U5vAlMhoFy3XO3Mns)InD;rb(s$pzk${| zXofPp&)MCB&N8DZde{Jb>nF_AG{hFqAS5ambo5qJc|byQj;ONDI51X20Cz&y2Giac zbo*TX^?8a$kG5hGH;6ng!B;|D*u0ahZ-)aY+DGDyU2tX~d%n(Pa1|7rEQQPo^7K@$ zTWI<%frx07g#H@AQIg5PR7tDOw%*~s#^3#j;l)W!O|~%vlK6T2x{uE3?{>B^>(-n3 z8Wq7%+O+wKNg5g#*AA*`Nsz>-eKxxRtr>{}9OEDsp_y1bnCx88_BguI5s&QkHmQ(( z^vvwI!>v0lpz@Je=NTL-M4|P~Zg00zmD;bXzkdB13zX6eah92;gM|?zY|Z4$Z%DS~ z6~u75MJ`>!y$6j7P^P20N`{f-ZsM%{7E}ha+KBR%<|XxJq4~M!dA8YE-9`*# z{6*~@-hNo6CmRp()Dl|G5i!gtB9PyfOi5w4y<4+ScCsIb+;Xrp8VzJsXX6Chyq}rw zL33FS#7>aKWw{aG1VkIw(!-9T;%D>&g3Zr%OfNh{YR*M>R}GOR*gbluScd0tv&5Ty~p=3q&h@olq-tD<#QNq&w)@dBB?cAHut z8p!KA1i8QqeQ;s(IZx9rUc#j)7WDCxu96J$`gpBWIMYvB$r_0OQ^7(I5FK`6DMO+2 z2f#N!^kRVozeF&2G&_}K+a32(nVE6q_ZOc*p$63^sNjBU&3xSRxnRKfBn|}rC7Ni^ z!Iwtpkqr%7uIHx*DCQTHp>=M@>crjayZ7E7`ZSA|3NIvz^pxcw+dw*Ig$_!LmLTvR ze@A!$X+)+A#>B+5ZljCpsrT@R<+I#4dP12Fo6Q%`udDp+%Q|oAi%dX?yyl#k-+ME9 z@}l5Y|Jc^H12k8-w)W?+yVnetRJyw%M!~n**D5DGS>C?u<@Z-My-qm|qU=v_2o$?t z85nRr*KiN;i#i;gq~^b_*VM zFLuxj<%`)S{E)cZ&(dj)gNtge0c~BCnZ^*>Z!cUwu=h=9N(*GzgroYo^UAu_iqQT!W3$sfHA7Z z1~D#O>PwZlqUEyA1ETcVl$VKFtRe)Hr8e|0Y;bChS(}>?OjIMGm3V|t`xHM1_rJ9O zthidvKsx@GLX3_C^E(wL^l3Zo7=XUKAXx9RNDob2j;YGwGX3GE2U6<*lR!i?Pt&MH zZjx~WbUz70Y+{@u6uN++B`!bs{(mAfx>vMjTY_lW*+W6%sbnn!SSd~N>;C#y8$Fl> zfu+^&^c!CUtdaxpEN5hnxBuTVlx8UpBXBInL&dkge*LQ4nhZO8n~shHoC3r>30OnW zKkA;H97TNThPG$N?Qf)2&^nIQ)0#-*z8a~~!Jbd5RV?W5=lJ$uf-7$^i0qXeVNPJF zxmY5(31y zjxXC1;^R;4n^^tdR3q5T&6-c105h$v01bPfn7ag>@JL4F67*$P+;ya>FjB}~zq!@l zxH6P_X)eUWQ$C9bTJf8v?`|vEc8y0et38mG#)7sO;dMu7)___-dV2cvB~fVXoQB?9 z;hhdHMn-Y(v(rv*#XT>-L!>qZy-q)&<;j`H_(8}*=M7>~DSP{UwQvuze+}6Qqastf4^`RynGKeg;G3N(`{%8Li)Rk zi;HE(xo)AUmwUxo+DqwKld6n_7#kZSvQWC<^X-xMY;~0ZL>jFmBGmTKZ~pIG`o`Y> z)&TqR8o?&FD}R3>4qLq$oYfrcf2*uzS`S=w-A*L+3R4sNAu`TUbV= zY3|}ouCeR+aRCH46oR&XUS3{=i-AtHJh$cvA^?Yx+1%6lzNfT$(tt)LyEPfXceQ=-^ z$C@YR`8(k0Rh-dMOQ$Wb5Dyok5V{Wi;#HlUh0csbJS?naSewQJ)BlHtiC14_Mfz@K zxcK-g4qertL89Ssd-jpEH1*xPen2^*3?4Y^>fVALd^&#qXdoXWoq!68RJvQ_=a}V7 z$r%?=yY18B_};M^sre1qUKO^hOXcL!oqkYyViCHoZgiHDkLM}Nbp3^~n2(PSNqym` zL1)@gkqPJ!Wz+UJ<$;DzYS2iT4CGeX)`P$VwAwu~nth*M$wC)55YFf4`y0Znxz6Xa zhb|XGt?>FyKWMz%$W+UTsLF~k9v+y9x?y3?7iHSk$^6Xt=_pTa>=nOQqpFt~YR0S) z8aZ^a6}@A<;vA1z?oXeb@!uy*Zs>@&F>n;2!lV49>*Lft_;wNANpj>~FA#|_0c|O_ zbAXLG5_N#%Eoie42&`c?a1{%G&N8C3a)Di4E~uDbe0~S@CQXLeh9{qIBJ?882a4j~ z{GK#Fuy7-9&8vC8JUcq|a$e`Ld0rMePQvd^f7%M%oe5&z!K8ClXWt3hw-Sq<=P1T< zz6yZ&Z>-@HBKk)f(!MxopaIggXl)i6w%fEMS?W_h!MhulKvLXh-NAkphf-M87mrF= zQSk$7^%~~@bY6EamR@ChBD^+qYoLgY?zZ$|!7r?a?yKwL8V>Zgvz;g>HRz3X_L`i7@Z-HppxZVPt19~6Xv?ror;0W4DgAB;0eV%i|{dk=sWVJ6Vgn)v=3~9yn z5-S3L48EL)_0JdF6DG7NfT$MNamcPq8f1=oT@&4qXk`eesU@*=uO(&(!b#331xH+1J|}2;Dr_L5^O3RpbF!ednT zWZK+=7py8JaXJ`NjXt;$AHp-{+t=kUBxf@!=Vv>u{z8^*BU?p5v+#?ILw{b@I}Q#^ zEw6))8^$M&Hr!>3bXOiU8DjT(bmVQSrix!KP%U`??Gt@)+y^pbNpFfcKL@bz48GSL znMCI+HHtr*4W}+G8GUPR&IT~f2%{`)efgLKPkhV^^BR@UEgn;Y!oYI9cjLyWq4|P} zj)Cp712Kjqp|WZA-9h2m$_uyaSyoD~*%LE+Ky%?Ww#^#-jnK2b!G#umR6taRTn;$a z`{>4BFI4v>CodH_wOHrrbVhSDZD65vVl2kfV|l=aKQODBP?>EEIXYGe7yke3`W~C-~OyuOqO|^yC(=cDPAFEeGX57c$iuQW(M3q zKX4|m9A2Qd0%RgOL{N9+*bgvJ_(NJw5+H$It~*|nzo6P}O-l{U^S$S%ljqAI9{aIZ z3xOAUUDW=->m#_Ko>mKQtNC-Zm}D-!EQHK{uL)0aePkgKb^2#G;i6{|h2Tq8eh%ld z-K6uOgo_e?*OwgaXeF=cIlPcTxLyTbY+ye8N#a94G_GZ&r>ow;LAmBCvn+QBWkhN7 z9$ZA>N8gbPmH8O@`!JvQE(wK-=SPNTlED0S@3@fjnmqw+Al)N~d$5e9oMfoOv7VF# zi|l!;D!b*kGB&LgZh3xtp8-8*2bYW{#x}T7HS=p~42&`+ zC3@dcB2z zTPD{p+-ME*gsy9i&N#lPQFBRI1%;^Fnjo(y6SU3Flus}*6h;;I*PpYT{>l3oikKC6 zfso#lqu$w&XRatUut<14$@lr!ZR_@V07eC^rta+@$V4#0L-&WHaZ&k7rJ4P;)w?Ts ziYNsS^b1hElObl3aXTJKz_7w?C8k!7c{iq%|aDnxdj~9~zUh?WW9m&QRUg z5ck)mVt$`AAFF%{H6j_Xb9k$i9lXA2A`#K3iH7p~B!ilX4=@Z$ngx0!b z{GNv$*G6_+>KZll?+dyf7K0um4~oA_AV=t@gHY_itO2904El-ec0+O-1*4heE*19{YEKC$~;Lyc!EOGU`q|6t=5PzyO+JjOvxO${aZ zxAD>My>7RqD0|NlO6vj)-{oU?8tVxl$xe*0^u+pG6gvzsJiMP`EN@I8 zm6E*umjwAPsJ`-anECMn1z{ZA%XYLsn*i7L_HbAx-dM(l*a!t?5xEG*eVG;(c1)4; zOhV@z7EQ3Drnk$lks#mKGZZSyf5$S3Glqu{%c!sJtP^Z{HWzwG-yDB(d-0c@&7U>N z7h|$Iv2uy05zLBhX?&x19W!cXrXZHR%dd7?ICnYKWpycdF|~xP<8sFHP&gY%ZVC?9 zRm%_S)~%eDrjI;a6&{$Jr()Wu@K**<&U-Fw$p5G#EsBu^*QWK?Bgv%QPDEOsJ{`>_ z6`j>}d|Z;|QrKX9Ov!_o*zh-^>$~-_0e1435^l3)EGlYGgxQ?>&*1r#N;%{RFE+o4 z5is`dFu5d%8#93G-LkIMvxW5|BQ14RVMv1>4}y=yP|-wxD*+IkXOTI%#~pj-d~}R_ zrm4J8Cs$<{UM<$tFmc|-WIn+gUyLG4w_%|VQ&JKXtO5<~4_J{T-&T$ZoV*lzOcuLt z+HT{?Z$~J54y!c~9z!GAap#x^hZ17k=&;|`yz<;YLN+~dlgZ17FZ|d#CF|A^YaaS; zGWoC$5zS=U2$z1>q*Dwy3A-*0_gDD){=!e#or~A+dd@IaOoJ<@R5W_kkorO`KPTg6 z9Bz>F_YG3YS*8kDN6&nFP`5Zs{$BZew>ocTPiG?h@|q6@*haT`j;We9$i=HjFU}j1 zU&n@@>;8yWlVAM46_;iH*Ja5`z{x8H_E)?|kE*~(#k4N^5&YmZUq_@}tKHY(I9NeP7w#DOdwCc!Tw97)=SShmA?s|7QoS@`PCqIGf-806SaMpA?X zRp92pXU|^G&)=>LJ|+vyu)}Eu27M`;*=2sz%Ca;v+qJ*I$k8Z}0L(Ck>SL7(s)1L# z>4SsoGMf~xevwPikmnETctot?-MrN#AEO|jpxG9-_S{LljEt=IS~)l4MC`^A@eSe= zMN}ksrF#z2T*s@Zw}&kmo%@+F)m$mr#hy)SdeW$(7#YE5^ae$;-pT zqd7?$t;yG+)pclo86vaS*uoB=+SPJxZ&1_FB%ok}zu2>?aPi^vcEVC3NRdgrRhQnZ zJ z-rbvfYgj`Nn5(y`qN1V!NSJ(_;B*xHLER>!g=hlPNc8=mfB~Fxaz-4sW`6AL&0q7~ zjyMrfzQ43o{zj|Z;~k229aru46}cp88#?ppRs5joK1-qR3X3~gn9uOm7$&GE9FWJ9 zExS| z`;X=m{4m9ASLO7nrlz>f+D+$+)T(dU(v~N1y;&K`2n8i260g4TF|Pb|ttPUVI>KeP zQF9oD=4U%=|HnS(39W9aGUlPfxVNESNkL9BaZ|Stz(YunFVPiDDAC=3Dh#IEqAtKSx?Fm;!>AZ)~GQm?lmYLP{ zbgU3K#MQ=WHV`31z<6WULCS(63D$)ZPKz1t3@pjumPl}mk}er^#w&ELzTeg*fj%BJ znv>jjHa_C`wK$yOFccS?0UJYRQQI?`x>j!F9>F`NJ8?@}lgaf^hkfjm=LenU!Wg$) z#!Uu~<*Bx&l`M;|r$zF3{t#)G3t<=gGO#AZgR zY6)IuiGyc@FXMxDInSR`Q1D-wX2Bk7`W=`x2HP|jyQxg(%>ROo#LuA)oeKr+%TDj0 ztE(>>1d4Ruyoum?6>cxHIIB5WDTG|pJRBPlt(_j-tc6da^>jV4VVfYqi$=77MR*GZ zug+Iok@#K*xeIyC%i>(xB$lN4oh}$*(xDiuq-c?6fJ@rD^fUO5v)IasQkoH~p$2Y} zF#@0?OKHdn1S~r9D8+@?*iM;eiB_jzI%@HReJynxGeKO6_#`*@?LmyDp5NX(XL4p# za<@`^1sLE_m2vpKIX58k-O$&h(BtOqui*$42T+dJOzq~)49G&aF*9F`{3{P!v~9U6 z?5&=tRlCC~|DI0j9(OizLSw0K$Djvqg_3J;50I_aKn+`*(b>Vl*vdnZk$H{!I{%y4 zOs@!KB4WM|-t;KMJp1QmJYYbRn8cflnAsrmmROu*T^M zgFShtaPFLjn%Wag{MqbDK_iC41c?H)6e=N2OUqPX>qye16rFXw>Y=lYtOTL{niU9^ z|MOD$A-t=O4Kpz!D>YdSwttBxkel`J5EAe@R{>*6_ zLeAfPgCFYqkDf;?$|xz-P2&ZuUfK_A1$`d3~Ozh>%B zOE&Rf9bB(t^gb+ohn_FQD~OCvWj>0%WufJmHV;&pe}Pb&0M5|O;T$}8$iM*y#z3y~ z`<8BhZ6{rN7=@Mer2SP7)2tzUldfyqoLFEUjM3F)rwcgcpk^6g7!`_>p^r0GvSD1q z#bfcaNyK*KHJmI>K{ddS>?!1?Nq=Jz&azQ`6szi&FTb=M?@Yq~RPZNp1X@bKaVZ+e zFoDmXCmu2U_ycknG7h6O9SZd9{K%(8xb8un37-*3w!O#C)9MjX=ONtqgPZCsO6vzc9!!b0Q z7k+8bdT!qI07%w#>vLgtX=(WzZ3^i|;Fl)a2kWspI_yH1T!?V8vg>yx2y5UolX**% zsy&0bX>xS$unW*o-V3b%$8=$Vk#fyB7- zG6ZZSR6~zf7~h*C(Gxpf7Du=HatNpxD4l84#6zY%#CA&LcFptpHATCAhtqQbeg@vI z4T;=*7fn%YbXSE74jd6QJMim9gisOt?-h^PG$dKy%NB;F1C(xj%cT zERX-rq>_W}+Kb<4(l@Q&2oA&}A>BB}s507jlZNr1g8#ffeqMX|Nd6hcn7s1y{P~wC z4C+2SVq|fZy!888Lcv%k>BOx5s$O2hlv?+cuWq(UQAxt2bNf22yZ>hY!j`vZa~4ez zy$6eFu=YJ1d}njUL~OW!c5I3?y32t>I^P)(rn%CL(3$k<$wDek)7*xdE&-;?thmKdPR~Pg2aY z|FcfRUHT4qmH-MjO>*m5H#sfDkYIaMGc65I--;v!Jzc-|0{t?H-A)DHwGD&ZkXBuT z+K}3L1@Yrnua{6f9Ai;?s3XY^?Q=+IXR-Po|Z}5_TB)UL25IjeB!dyZdhFKU#qD zp$@yQMiM}xCNYD_8`IG%52*(!iuN`pgep!J%=q8zx!+;3>6$xzz|ZlZEnAQR@v3q0 zm=}L3!O&1+wv91KY22mR`$?h`>Isbe`k*Bm(LT0pmW6U*2v<`N3YL+HDa0uc77&ZT zlea)YJ4TfI?j>C8CL$TPT{Yh@HVfIsJ@}hP6mNZlCznL$HuAZpX*6p17p| z%x2o6!gQjBWQwIJ{2#!YU0PbYkB1c=Mu+6#U$;aZA$hHa^%so1NjlVfuQ;fob0&b{ znA#5pK<-CP*3GCS!5t>bnLp*xA-`#z`$j=ct;aq>cH%VMUGsufQlPZomz3BrSBpFi z32`VMfVi-75q^13e0?Lqlg5EG9qKA9B#n6yzPYyZsQa(o;M;jyO2iuBWWpHl;o0!( zRlFV^$hCyUx_Qbg00h>#9n_19Fb2w>3W;#~8I1PW%TV(idDsH`70mb0kr@Z-^BTzA z^QV}I?we8%LLxNEN?XF#tPFivA7`N-cTp5r5Mi=N=icbXZZi@;zyN@DrWyE4-XAnP z2?Bl&R93*UXUDQIdd$iwZ!)jdz8o=xGpH}vRWwmzz?mr_uU5@1pxO2L)qiSwOAh>X#$4s0=MF`^NzU|6%VYp{{d86S6@$dD|+YA=49NpD-KZX;=}@o zj3x+n!p!X7CN`$WPaooTz5IUk_}uk(Gb(X+?6~Lxw(x%={3`lEK@5hCg$zOTamArbY_9gu+}0IOY?LJ*9QXs1?B~SE3ON=P5;Bh;9%y zqgZ&$jwjf(TDfFANwP< zWTd5ECXjANh}*hu1~Pq7elQ@3Q_iKI@@GSyCG5>#Ey%WF^YDpqdCDZH#9j1Et9%$&oCVWQcCqVct*GRzMK5k1L*p>29i+x?NEa}IM=~oy2CG}%40HZaBifH#%8gxqSa*{TZXo_+~T7u~FUn?z5*sf6rn zwa@KTmpep&4N;5QIkDMab9Jc(b*>csTkMFdZY*g+3?k){B1ugp zF}D1Pdt?DaZWP*055C=B>$(gwI@6qQw9CRdNAJbGjz<%AgM)xdp}QH(TRGg^ac>hO zjsI=?LBh3b-Fm-%NIvGJhFa=JzP~5ClC1?Dd9xlpR44VwchR|Tsyqf{5L%ol4Rh(u^T7UjcW zXm4Z%N90(vT=w=Xk^q1+7nz@Jy1w&K(ZBnSpthTNoh{{%X^O)H9EZ$<(1_e^@dVJB zB=zaL@BG&%o&eW|2aEZkl)TG!Aw2^=k`?<>@s2z`6y1FZ`?-MpT(X3o&+MBbD9g89Yp+C;f0)+g?IaSBRi@Y!)$Y#>+$ief`AS@nY zX8(%XzA5mnu4B(tk748-GLq$ne~#ub*{7F2P>Z$I2Q|PB>EmW z_vE8@ApA~HDLU@wc4>w*45uayIr}_lIBl z3oxjCBH_0V?%VgCH>LLm$#%FhZrfk^oEs4_TWzFp^@iQP)y!K7Xm$1vU1pHD=1lP^ z?r#+16O#h9s1(Exd`**y*(~;z3|5qDl_&^`1T#&OAIjXvzqZHhcEcM`*InE%SNA!f z-#S{q3czX@YKKL5WygRmPQcL< z{?Tm~g%=H6%uO30Qv~2LB{i;DmL&0j#Sn2`e)rLvIRU_wWb+px8JocwNbz8?^*;Z= za%_~Mpd>nh(Ho*4Wm|R1vZPs*LI9qhozsXeBbfcp0*LB6;t1nOBbOwAtX5dXCPxfg zXJdX{GOjhE&=qIxXh3rAZRr2R-~S~BYn)){vxu{o8gZ;kX=&-U+o$uGNq!j5)zPq& zcJQfAG&DalUT;Lbrk5ulU<9+jbFZIY-Tn1-qgicXw3Y|{g#r^{0}(-BT`%OQ4K;io z6R1kN8JB%$xmq$*^f|-s1HbH>Xk5kqYV15LL95$!{ECr6n5g1zp^)iQ9!p8mOLK~U zu9bhhJ$U*GUVGD~x1!s+9m!0_1Fq+C$tcdU@CW1LFymWSKYH$p4+>xCt%kk|27NuN z;4iUozlX|I@OL_;zV-dnX0OLyjX&vkGd}lwVRPzKd{<)dV7 zaG*AU)vxompjux+vuIhCz=EZ7OovZ0iC^FWDXiw|LS~h}Q-Sg(*x}WR^IiDib}_f% zjK8AFt7r%hJUr_1ZVhvt=I=>JsbJ0z@FxWhoUiAGId2W_3*<7e6B$>OKQbp3EUaqU z+1}omXJweHO0hyVTgjq%x#nH7R(`5kP)PYf365!&nSTH9u1v+=%Z8(L1DwhE8X?Ee zF81x1uI_RU$gvaBbahy^GAY}byVXHf#$Edw`lNi?`|@X>W^=Qb(h#`-$lp-VdU$!M zgHeU2AzM~k(s?)C^dtNCOXCoLc&)UTq(Wr3`MXoRn#nWgFB7Ge-d?*K4@Qg&E=@0S zJ*$g}k#LGWRQLoOgu|@=maQ?1voR1Op$V)SJ9182AXG?EsGSuR9jVwUTm?K2wJ{)y z_?Ndnc@QP*V+sY+mx>BC*mUdP=`S zJp3YU2A*^kDvU`M`n*Sb)1hyhjc}`7r{9+#A<>aQ-q0-LBpu_iEn_!1&pn$KP0p># z%fCK)A>FqpS&TTh>AD@k8Gk;?owTozuY*P|(AQV_^#FL#i?GOV`cKeCHwX7J%zON} z1{t(%uMnkYWGquRa98i+n64g=`T?!i%7W6gS(gMi+o_NvB_ki25;$i^c{^MRr$uJm z*($?$>38h|*_nJ(@RBRpUpY$5)3LMeIR9k5490R*FtqmOF@rqq`t`Mt6(pcEL!~0s z>A5a)XT067*;e1`x#P;x!&kg-|EQL1 zl4shxEvDJ3cZ6<7WV?Bs6pc+|;-55?wQgaeG0>%$eti<|qyfvRMcu+xetH&uLDMVV zUk~aSbxPPS^nEp^aJ?5vOx}e;#O=X@0Wus53O4@rJ$QhE79Apdo{wsoXNTg-)inpb z9cD8QA8_A)n{U%*gE7_>kWB9MMw_Qv&FWx2Qoc|X${7>0AW^n7zA9+Z7Z)4-{YsoF zXICLVaeH64#TLCx(?G~zbRx^pc~ys&b!uLa?wA2H;Sqni)Wd;WqH}C#X-N70i!S*K zz>oc(O2Ag5D3MmE4)1pa+myeQb7u}vC8T_))B17tWBa5Folf+`M4;=TlX$`YPBCc^ z%FccutUr1dLIuc8 z=x|aKdXSUXn=RORRIxja=%Mk#t~WZ;}*vU9F-l32~GYeuHlO9 zRFKWqLl#d)Nq~k`6=b4DjJnGss&^$r3Lp=x??g5ba2SDc*ZaWm@MLuGhtP*-617c) z{wW%V`yoR~)WMQD9tp31DThBOK~8a%l3129dNl)gx$u1`>lEj02QPbj+#KPerVjQg z|K$7X%n{BY8k$gco+C#_E^jFl`$Nk$Vez_#PnFIPOj#$(#{?xG+%P!tY})}-Rh`+>8975saVO8 z&2d$sm1{8WH5WV%y!T;|iuT#hHYr=S-|M6KSo(2@Oscv@lWf5*R+an33(bP?kF7f} zCq;0rq1_~zYS=3ySUzy4a%EWp|JKdGb#nP+O}0%7JB!P}%JdSs=#q$BRJ)3czl`&j zR7e&w;NRw{@VCn2i^G|05#u-JfB)X4Z3iD@*TC>#HJkRSPXDK}wels}NXA5wO5(jf zGT(n5zhBi#bEWK~7p;ihIeaD=zelJj(a1eQy9qDsi4B|r_{wzheMk@b#V8s@g+FH@ zwMf))uUmGZ3@(!JbiM7ap1Qp0@BgWP-gTbMR)z+DR``;blp66Q@6JVqgd=F%6i6?!JIoOm6x$N`It%=vJWxbE8^l-Q36(fHTTDslZbw*AOq+!+cFb?gJI5W13*4J?l6!hTI z)X@urLk-Vo-O0#E(#svi6%RlEIiQ1v`|G#PfRc_wx3@LT@PTX#@Ke3&`STYzZ9Yi3 ztYn|-ulkYJ`_X=8`d2MXM-A=P6iS6|qaW3{ouOS@gX34oABh(zVZ`vE0svkzos+Y4XTwA?KedqeN)8O*{R>}e ztNJnBjQ%B2bO`rVffF^iBEVNZ{_OaeGMeysQ)Qzkee%kcXppEkyNf7%j-g$C{!nSz zon;)%OI(sv`nm1M1}S#~Mw6Kj8{6+)eF5s36u3Z|V=GHR5GP&1|7YL(^G|hDksVHR z9q3iR6|JK_LV4K_GgY&rZJL-kt1n#rWs%#9Pb{jImXR@?`B7_%Kf^(9QAhzM70-^~ zG`Qfe$rlr#5dJv!(4Gggec%BbP)4Dx3`;5q@%=RQCE3}f$o4rRXa=dDmyyw%m|QvP z*e{Tw^R3oMS}J$j-WwYK`N6)*d&TI%M&<_0R*tM%;48>(DcM0rx8Op7V|H1}H@ec7 z1gdXu#A}VnGP1r(NC^Wy3FR`MR_aL@#MDCXWmQ~u$9k0oH!xyg>@w|$l%fGoHL~JZ z91#>#KS)dJcF1P((?WB+A~<<43I=G%IHy3I`tUv}TIofVqy{eC{_@_Eze z$Gh|~$5)3FFdN}rmdlRyWG!MAyRFQtk*ExWG~(@lh}M@*3l#pj2#F*F6*+%W07{++ z>VFen&%6f@p7HaD{wY1F$Gj{ze5sU5S%^m#WGvhog)g}ppTG{KQ~SW1od3)AplX9{+dHeMT6i2pp}Em=qZaB4M-~>jCMx}` zT}}528GnkEtF)(3yWPmTr$80ff&D7%5=z?cT+YQ*BlM_y`Exs-WnZrkXq!;#xk)8Fj z-?o9)h2;F7ts^e4+b~o+nq|0)w{;Xcy5sNx^~AxIC^z>0^%poDGzwwkBTjbwQJyuh zRUm)vg38O9o;f_=CQ4p)SbFj0q6$e>V8+){xr{w<(`DUH%i5N?YUhrhmEU=e2 zUXx5yV16u_+J(Eq-nO8}nUCvCE_G{WQ5)CEyer>7`Ppl{$M!$gZk}ZYy^LeT9UM=E z2Zx&#Uup)T@`4o>`H~3l)rnW*CLcF?aFTC)@~6J=;sQiOS{27XifClCp$+HR(9ob; zJ&sCs^@sveJ2ZQdY|U zJSeX{)o?z{XZw7u{asp6r`IhplPph9&yiJU3VzPs(l$IR|SZo<`XEcv)} zbE)exi=a-)i$+1_&e4mt7WOXt@B!Bkmz3{I?ReDeTwGjDlL$vl{+>7zcPCOh!opFG zUD#Y-W}C6-kf^**7c!vYZRL}+va)iIrtCV`!>IAL1*$hMoPE;UYL+4>fpdZi3x3SM z=_puPG%Gn=vC*3&3bCk@-eN0n>vbIbjPDOIOa46hF0q#s=;7WoaRbvAU;nxFS`$9} zpk(Rf1YELz^gaDbUC_%xSY=EI^1Pu%2Q z?X8WHEAxi(Upmjc0I102+8U5Wz0gpH-h1nV<((( zaF3M#ciUW?B*Y(hNMDZ}jA9^bJf>qto>(;_<3D6k+TJBo0Xee^mQlp|`$L>x7>R*C zW=UsV2Jso+j?J50-)-03({%6Uw+oh5SV5d79iNerp<6aL-gQVm9wVOx)wgmx$O-Y} zUZhEX4kT2C#o>VDM5Tf%yTuuk?2Z+o$g9%1VHRlQ4mGDmLD_=N>j8Bfw*0#GhM{!m zt?|x_xPw}-D5NS#z78U?ee#Rg#2FS{66$d((#6Fq(@GBm3!||3Ej#we(=sqLUBweC zJ}=Dq=4B;3RWm`&cHsP+MJ#rOe34ciS1y zMqZ?IEUwvB%|sAu{p9~RrB=A&W}S*eql*c%Z2otob;nFozMFkETzdmULPCb;u}3+A z=kydvb<=)%eIU2wvK936bMPCFw|B~DWavC4Rn5>>p((lulMz_Wuq*Ypz4tiYmTeQe zp+p%$L=9(Mp z+%JJw2tD<6T&m`#FrQ%)pt5=-HxD#do}W8k(4NF!uV&p z=Il-w-=tx{aJ*2M<;{>TFSG{VY;$c6&e`Lv%#uFqg$_L`tZ%e@zy^64tdEVDBp+WT z7v9j#TekF&U!~MK>bOHEjLR1fBJ-~h(_o}aH)WS*!{?h!U2u}3M;g6%GBuGC#CeF` z_U6|EZjCIv%)fb>CF)X=jGVmN-xFo<_uF36LgA>3uX}sN0@mDUxifn}KT8MBD?c}u z1HK%_Fjq*g86?(E3-m2gdvuq`oq%rGV|RnIxo3lqmik^Hm+0Z+$H!!R_TG5Ht6AlH z1%9QCZ{~*h3e3~VupSoImT6{;Md-YZ1E{@lpgbZphS{|jo%3T}j~eZCKLUe4Ls)yr z0A13{%Rm8`?h|(CpM)kYTD_8dLZ5C!RQKq1JRplG>q95C5F0Aq-UZa5p5m5D&1($Ml`Fp?crU(Fg4W`fa znH894B`R@GElriV{E;NmRJCK>4m{Eufao%qS52=@BYlqYyR~YKmgdHVpyUhb5Uy}Y zEF3Mjl)&>iy{h-?BI`v4Kq6f_59jc(ly~}cwDsn9Z}LqX4>FivxK{pIwk4lUmz(^ZS*7jC8F0yll z0GRpXA_d|22w&U1IjB5vSnKrZdpIzD>#w=O)yCz8X~=f0$lVFSOayENA~8b+iHKqs zl;1cgy>m~s6AnOSWM)nR$?D242fTx`h;C+hxGg@2 zPGQLfi>AQWm>-rea8V_Q2(lyAeG60fI<}K+@_6B&a&*AuNO-R%j?0*~`%?v)T4aWYu9!T?oGj_|ma++A zAd;XUbk+2>R?c$KFdaMgs%hJvBG7I$oi*Gzi%##JK@L0QkQER#b$R51xtT zDQI`Q&U@22r5u)AbySjAz<6{*tPr$AIHvC_fFLr({)@20aDbnvm;)C3m#({zWDXbv v!jndDI>WmlIep(ReDnTa*i2Co%(p@x@%x$ugbrjTb~YL|e{O8JqR~y? z{mcI4PtC}np*x=&YpdBLCGD8sMCK?~|6U1Xk_q;%RF9pp7Ry{%&xxIh{yj6+u*|V@ zRAv?T_3Kv#iPNv4%HBmR2IOnvu96q#^lR`N7U}6%!87dBKQUM)ocZ_1rOy59Glc>8 z7f(N9LrqTqujl#i+&leHwZ;EG5C-#ku08(Y?*2Zv{p{1+guXnz-?(n>?h(Qc-}|3Q zNF=^S_Q>hFj?Sp9XHsI~*yJS6({Ml4AL%h;WBQgUteEW%QvSK7;(B` zVq!96Q+JIqP~3U_W{j}I#8{R0klRMfko9jO8WFVrds-I^yH;`G{*oUC^J$OFgjh?W zdVx&9=Si&S-s>c#UQIiqhwli-;e>e2{`kYDkGL%S2tHU_TT4t#w4QChP9ZyJf~r(vuDp@ahi7D zo^Fe4n+z0h^{3={M0-+mRmXZVK)`monKJotgl)&)mkbR0M3LB}q-*+y7CM7)$nOX# zCxSBzOndGS(+E~}r#_b>r^BkMsuJCwP4K6^8@ah@@3Otv(4T9hUh2ek|Ni~QQT#u; zCkG3x+OqV1J1yn)Y6dIAhCf7fGi-frjoB{rR|q#ZH&$PXqg5*7iy9agt1|Yk>ui56 zlk4{4c(0D<-%t(9s?n2QCx#BoL+Z$r?@zVe@>5tCUZu!Nslg7Hn3&k%;YJ(Q;fm)8 z&KEcbL$N<24y2^n?1;`!@YfjmrfZi)(%yAZ+Fje*+cO*~aMY5JNS7O2^~J~}?e6Vi z_ua)y-1SfwMlYVPOqP$jvzhlI&s0)ZmtG^^d>kbA>df~ zI*>Ncwc^`1j6vN8E$d7WxHoU#u64?BWZO*Ea>rG;AD|WD#E85qD#Uk&9qF8%ov$w1 zZtcy)g$=~WNl1u#p9*=>5FD%M$>D}S1=s6x_k&9m6!qk)npNRk29K6GH1hrX`qV5- zmiSHoq|0_C%NMPbAFS@|811e99r8F>8nSI-vtJqrK`#wFOOPV^a80B(luZM+l!Hkj z`ishs7g){VT;6avsFuhY(6&b@3NeBnhk`3*JFp|0x_=u(P#z+n>%sQKu)SB;x3X@QjQTfrf#w~^D`h%5!;F8yCYhk3Hex~(f_;;0rWP0b<6xVX?zso(F2gD$;31{Ir%((CRWJqo#k-x+HVqZPNP;DDqiDCIgT=kK-#-%1(w&q zEam!jm4xA66j904ZUF-*^XQR&{m1KGHWQX;H2>vWk98}(uy^-E#b0&jTWEkrFMcRQ zJeB@e5XAMPol%^RpFTabwY7a4SE5^W2E9Dgu)no1H&n!<>o0QS#tm5+8C_UG2F9F< ztt#gR8(V;v7ZxrtjoSP^*c&1AB85hQW!bD58990XFq01A`@W|%emLpu>@*%Kw2@uI zehOj(56GZUx9S4v9MKZbQ?asdu(0@LWpSQ4bLNp&puhiF-I>;ytL_1_v&M%ume^{kfDkinv?x`w&_D@spx|T57-N}GquZt54PXDd&g}t z!22~Jp=h&Hu0PuVkH@I>=AApfV7j_8v_!)GUP1P`EjTPpmAh6{N3u31R^}XrzM05>JwzMeDmf_d!Cuv<+!@4&oj zS`T;Fq$nfr=jRW7{rZgJ^XGC}I)&EP!S_i>N-EE9foe**xCq0C?NN`BwXRvaA8h}v z54vGK@H2I408~d-UY=1{xVX9e<&$JaHT33ehc~R9$8tyz>_|&quXfW{Nx!~An;U*t zIoKl_D8Q*PGc(f&T6;+aP+_;Hsd5NAE;n!W>O5H*$ZKe9)SqsS=riX>HHYg>4_-pv zc~w0ZMI?T5$Wv5QZ>S zD<}{XTw�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 (reasonable, although probably too liberal) +## -FOR TCP_EXPLORER PLOT: +## The values stored in db_dictionary are essentially used to create the plot on tcp_explorer. db_dictionary does have extra values not needed in the plot, but useful +## perhaps in feature generation. + +###### +from __future__ import print_function +import sys +import os + +try: + import MySQLdb +except: + pass +import pprint +try: + import matplotlib + import matplotlib.pyplot as pyplot + import matplotlib.mlab as mlab +except: + pass # dstarr doesn't want any extra printed output + #print "matplotlib dependencies could not load" +import scipy +import numpy +try: + import pylab + from pylab import * +except: + pass +from numpy import * # from numpy import loadtxt,long,linspace,pi,arctan2,sin,cos,hstack,array,log10,abs,logical_or,logical_and,var +from scipy.optimize import fmin, brute +from scipy import random +from numpy.random import rand +import lomb_scargle # obsolete? +from lomb_scargle import peak2sigma,lprob2sigma, lomb, get_peak_width # obsolete? +import pre_whiten # obsolete? +from lomb_scargle_refine import lomb as lombr + +import pickle +import copy +from multi_harmonic_fit import multi_harmonic_fit as mh +from scipy.special import gammaincc,gammaln +from scipy.stats import scoreatpercentile + + +class lomb_model(object): + def create_model(self, available, m, m_err, out_dict): + def model(times): + data = zeros(times.size) + for freq in out_dict: + freq_dict = out_dict[freq] + # the if/else is a bit of a hack, + # but I don't want to catch "freq_searched_min" or "freq_searched_max" + if len(freq) > 8: + continue + else: + time_offset = freq_dict["harmonics_time_offset"] + for harmonic in range(freq_dict["harmonics_freq"].size): + f = freq_dict["harmonics_freq"][harmonic] + omega = f * 2 * pi + amp = freq_dict["harmonics_amplitude"][harmonic] + phase = freq_dict["harmonics_rel_phase"][harmonic] + new = amp * sin(omega * (times - time_offset) + phase) + data += new + print("length of data is:", len(data)) + print("data:", data) + return data + return model + +class period_folding_model(lomb_model): + """ contains methods that use period-folding to model data """ + def period_folding(self, needed, available, m , m_err, out_dict, doplot=True): + """ period folds both the needed and available times. Times are not ordered anymore! """ + + # find the first frequency in the lomb scargle dictionary: + f = (out_dict["freq1"]["harmonics_freq"][0]) + if out_dict["freq2"]["signif"] > out_dict["freq1"]["signif"]: + f = out_dict["freq2"]["frequency"] + + # find the phase: + p = out_dict["freq1"]["harmonics_rel_phase"][0] + + #period-fold the available times + t_fold = mod( available + p/(2*pi*f) , (1./f) ) + + #period-fold the needed times + t_fold_model = mod( needed + p/(2*pi*f) , (1./f) ) + ###### DEBUG ###### + early_bool = available < (2.4526e6 + 40) + ###### DEBUG ##### + + period_folded_progenitor_file = file("period_folded_progenitor.txt", "w") + progenitor_file = file("progenitor.txt", "w") + + for n in range(len(t_fold)): + period_folded_progenitor_file.write("%f\t%f\t%f\n" % (t_fold[n], m[n], m_err[n])) + progenitor_file.write("%f\t%f\t%f\n" % (available[n], m[n], m_err[n])) + progenitor_file.close() + + print("RETURNING t_fold:") + print(t_fold) + print("RETURNING t_fold_model:") + print(t_fold_model) + return t_fold, t_fold_model + + + def create_model(self,available, m , m_err, out_dict): + f = out_dict["freq1"]["frequency"] + def model(times): + t_fold, t_fold_model = self.period_folding(times, available, m, m_err, out_dict) + data = empty(0) + rms = empty(0) + for time in t_fold_model: + # we're going to create a window around the desired time and sample a gaussian distribution around that time + period = 1./f + assert period < available.ptp()*1.5, "period is greater than ####SEE VARIABLE CONTSTRAINT#### of the duration of available data" #alterring this. originally 1/3 + # window is 2% of the period + passed = False + for x in arange(0.01, 0.1, 0.01): + t_min = time - x * period + t_max = time + x * period + window = logical_and((t_fold < t_max), (t_fold > t_min)) # picks the available times that are within that window + try: + # there must be more than # points in the window for this to work: + assert (window.sum() >= 2), str(time) # jhiggins changed sum from 5 to 2 + except AssertionError: + continue + else: + passed = True + break + assert passed, "No adequate window found" + m_window = m[window] + mean_window = mean(m_window) + std_window = std(m_window) + + # now we're ready to sample that distribution and create our point + new = (random.normal(loc=mean_window, scale = std_window, size = 1))[0] + data = append(data,new) + rms = append(rms, std_window) + period_folded_model_file = file("period_folded_model.txt", "w") +# model_file = file("model.txt", "w") + for n in range(len(t_fold_model)): + period_folded_model_file.write("%f\t%f\t%f\n" % (t_fold_model[n], data[n], rms[n])) +# model_file.write("%f\t%f\t%f\n" % (available[n], data[n], rms[n])) +# model_file.close() + period_folded_model_file.close() + return {'flux':data, 'rms': rms} + return model + +############################# +# Use this code to generate out_dict as referenced above +############################# + +class observatory_source_interface(object): + def __init__(self): + pass + + + def get_peak_width(self, psd,imax): + pmax = psd[imax] + i = 0 + while ( (psd[imax-i:imax+1+i]>(pmax/2.)).sum()/(1.+2*i)==1 ): + w = 1.+2*i + i+=1 + return w + + + def make_psd_plot(self, psd=None, srcid=None, freqin=None): + """ Make PSD .png plots used in ALLStars webpages. + """ + import time + trys_left = 120 + while trys_left > 0: + try: + from matplotlib import pyplot as plt + ### Plot the PSD(freq) + psd_array = numpy.array(psd) + #import matplotlib + #matplotlib.use('PNG') + #import matplotlib.pyplot as plt + #from matplotlib import pyplot as plt + #from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas + + fig = plt.figure(figsize=(5,3), dpi=100) + ax2 = fig.add_subplot(211) + ax2.plot(freqin, numpy.log10(psd_array)) + ax2.set_ylim(0,3) + ax2.set_yticks([3,2,1,0]) + ax2.set_ylabel("Log10(psd)") + ax2.annotate("freq", xy=(.5, -0.05), xycoords='axes fraction', + horizontalalignment='center', + verticalalignment='top', + fontsize=10) + ax2.set_title(str(srcid) + " Non-prewhitened, Power Spectral Density", fontsize=9) + ax3 = fig.add_subplot(212) + ax3.plot(numpy.log10(freqin), numpy.log10(psd_array)) + ax3.set_ylim(-3,3) + ax3.set_xlim(-3,1) + ax3.set_yticks([3,2,1,0,-1,-2,-3]) + ax3.set_yticklabels(['3','','','0','','','-3']) + ax3.set_xticks([1,0,-1,-2,-3]) + ax3.set_ylabel("Log10(psd)") + ax3.annotate("Log10(freq)", xy=(.5, -0.15), xycoords='axes fraction', + horizontalalignment='center', + verticalalignment='top', + fontsize=10) + #plt.show() + fpath = "/home/pteluser/scratch/tutor_psd_png/psd_%d.png" % (srcid) + plt.savefig(fpath) + fig.clf() + trys_left = 0 + break + #os.system('eog ' + fpath) + #import pdb; pdb.set_trace() + #print + except: + trys_left -= 1 + time.sleep(1) + + + def get_2P_modeled_features(self, x=None, y=None, freq1_freq=None, srcid=None, ls_dict={}): + """ + """ + out_dict = {} + out_dict['model_phi1_phi2'] = 0.0 # NaN / divide by zero default value + out_dict['model_min_delta_mags'] = 0.0 + out_dict['model_max_delta_mags'] = 0.0 + + from scipy.optimize import fmin#, fmin_powell + t_folded_phase = (x / (1./freq1_freq)) % 1. + + A = ls_dict['freq1']['harmonics_amplitude'] + y0 = ls_dict['freq1']['harmonics_y_offset'] + ph = ls_dict['freq1']['harmonics_rel_phase'] + + def model_f(t): + return A[0]*sin(2*pi *t+ph[0]) + \ + A[1]*sin(2*pi*2.*t+ph[1]) + \ + A[2]*sin(2*pi*3.*t+ph[2]) + \ + A[3]*sin(2*pi*4.*t+ph[3]) + \ + A[4]*sin(2*pi*5.*t+ph[4]) + \ + A[5]*sin(2*pi*6.*t+ph[5]) + \ + A[6]*sin(2*pi*7.*t+ph[6]) + \ + A[7]*sin(2*pi*8.*t+ph[7]) + + def model_neg(t): + return -1. * model_f(t) + + + min_1_a = fmin(model_neg, 0.05)[0] # start finding 1st minima, at 5% of phase (fudge/magic number) > 0.018 + max_2_a = fmin(model_f, min_1_a + 0.01)[0] + min_3_a = fmin(model_neg, max_2_a + 0.01)[0] + max_4_a = fmin(model_f, min_3_a + 0.01)[0] + + try: + out_dict['model_phi1_phi2'] = (min_3_a - max_2_a) / (max_4_a / min_3_a) + out_dict['model_min_delta_mags'] = abs(model_f(min_1_a) - model_f(min_3_a)) + out_dict['model_max_delta_mags'] = abs(model_f(max_2_a) - model_f(max_4_a)) + except: + pass # out_dict will just contains defauld 0.0 values + + if 0: + from matplotlib import pyplot as plt + fig = plt.figure() + ax2 = fig.add_subplot(111) + ax2.plot(t_folded_phase, y, 'bo') + + y_median = (max(y) - min(y))/2. + min(y) + t_plot = arange(0.01, 1.0, 0.01) + modl = model_f(t_plot) + y_median + + ax2.plot(t_plot, modl, 'go') + + ax2.plot([max_2_a, max_4_a], numpy.array([model_f(max_2_a), model_f(max_4_a)]) + y_median + 0.5, 'yo') + ax2.plot([min_1_a, min_3_a], numpy.array([model_f(min_1_a), model_f(min_3_a)]) + y_median + 0.5, 'ko') + + ax2.set_title("srcid=%d P=%f min_1=%f max_2=%f min_3=%f max_4=%f" % (srcid, 1. / freq1_freq, min_1_a, max_2_a, min_3_a, max_4_a), fontsize=9) + plt.savefig("/tmp/ggg.png") + #os.system("eog /tmp/ggg.png &") + plt.show() + print() + import pdb; pdb.set_trace() + print() + return out_dict + + + def lomb_code(self, y, dy, x, sys_err=0.05, srcid=0): + """ This function is used for final psd and final L-S freqs which are used as features. + NOTE: lomb_extractor.py..lomb_extractor..extract() also generates psd, but its psd and objects not used for the final L.S. freqs. + + NOTE: currently (20101120) This is adapted from Nat's run_lomb14.py + + """ + ### These are defaults found in run_lomb14.py::run_lomb() definition: + nharm = 8 # nharm = 4 + num_freq_comps = 3 + do_models = True # 20120720: dstarr changes from False -> True + tone_control = 5.0 #1. + ############## + + dy0 = sqrt(dy**2 + sys_err**2) + + wt = 1./dy0**2 + x-=x.min()#needed for lomb() code to run in a fast amount of time + + chi0 = dot(y**2,wt) + + #alias_std = std( x-x.round() ) + + Xmax = x.max() + f0 = 1./Xmax + df = 0.8/Xmax # 20120202 : 0.1/Xmax + fe = 33. #pre 20120126: 10. # 25 + numf = int((fe-f0)/df) + freqin = f0 + df*arange(numf,dtype='float64') # OK + + ytest=1.*y # makes a copy of the array + dof = n0 = len(x) + hh = 1.+arange(nharm) + + out_dict = {} + #prob = gammaincc(0.5*(n0-1.),0.5*chi0) + #if (prob>0): + # lprob=log(prob) + #else: + # lprob= -gammaln(0.5*(n0-1)) - 0.5*chi0 + 0.5*(n0-3)*log(0.5*chi0) + #out_dict['sigma_vary'] = lprob2sigma(lprob) + + lambda0_range=[-log10(n0),8] # these numbers "fix" the strange-amplitude effect + + for i in range(num_freq_comps): + if (i==0): + psd,res = lombr(x,ytest,dy0,f0,df,numf, tone_control=tone_control, + lambda0_range=lambda0_range, nharm=nharm, detrend_order=1) + ### I think it still makes sense to set these here, even though freq1 may be replaced by another non-alias freq. This is because these are parameters that are derived from the first prewhitening application: + out_dict['lambda'] = res['lambda0'] # 20120206 added + out_dict['chi0'] = res['chi0'] + out_dict['time0'] = res['time0'] + out_dict['trend'] = res['trend_coef'][1] #temp_b + out_dict['trend_error'] = res['trend_coef_error'][1] # temp_covar[1][1] # this is the stdev(b)**2 + else: + psd,res = lombr(x,ytest,dy0,f0,df,numf, tone_control=tone_control, + lambda0_range=lambda0_range, nharm=nharm, detrend_order=0) + ytest -= res['model'] + if (i==0): + out_dict['varrat'] = dot(ytest**2,wt) / chi0 + #pre20110426: out_dict['cn0'] -= res['trend']*res['time0'] + dof -= n0 - res['nu'] + dstr = "freq%i" % (i + 1) + + if (do_models==True): + #20120720Commentout#raise # this needs to be moved below after alias stuff + out_dict[dstr+'_model'] = res['model'] + out_dict[dstr] = {} + freq_dict = out_dict[dstr] + freq_dict["frequency"] = res['freq'] + freq_dict["signif"] = res['signif'] + freq_dict["psd"] = psd # 20110804 added just for self.make_psd_plot() use. + freq_dict["f0"] = f0 + freq_dict["df"] = df + freq_dict["numf"] = numf + + freq_dict['harmonics_amplitude'] = res['amplitude'] + freq_dict['harmonics_amplitude_error'] = res['amplitude_error'] + freq_dict['harmonics_rel_phase'] = res['rel_phase'] + freq_dict['harmonics_rel_phase_error'] = res['rel_phase_error'] + freq_dict['harmonics_nharm'] = nharm + freq_dict['harmonics_time_offset'] = res['time0'] + freq_dict['harmonics_y_offset'] = res['cn0'] # 20110429: disable since it was previously mean subtracted and not useful, and not mean subtracted is avg-mag and essentially survey biased # out_dict['cn0'] + + ### Here we check for "1-day" aliases in ASAS / Deboss sources + dstr_alias = [] + dstr_all = ["freq%i" % (i + 1) for i in range(num_freq_comps)] + ### 20120223 co: + #for dstr in dstr_all: + # period = 1./out_dict[dstr]['frequency'] + # if (((period >= 0.93) and (period <= 1.07) and + # (out_dict[dstr]['signif'] < (3.771221/numpy.power(numpy.abs(period - 1.), 0.25) + 3.293027))) or + # ((period >= 0.485) and (period <= 0.515) and (out_dict[dstr]['signif'] < 10.0)) or + # ((period >= 0.325833333) and (period <= 0.340833333) and (out_dict[dstr]['signif'] < 8.0))): + # dstr_alias.append(dstr) # this frequency has a "1 day" alias (or 0.5 or 0.33 + # + ### 20120212 Joey alias re-analysis: + alias = [{'per':1., + 'p_low':0.92, + 'p_high':1.08, + 'alpha_1':8.191855, + 'alpha_2':-7.976243}, + {'per':0.5, + 'p_low':0.48, + 'p_high':0.52, + 'alpha_1':2.438913, + 'alpha_2':0.9837243}, + {'per':0.3333333333, + 'p_low':0.325, + 'p_high':0.342, + 'alpha_1':2.95749, + 'alpha_2':-4.285432}, + {'per':0.25, + 'p_low':0.245, + 'p_high':0.255, + 'alpha_1':1.347657, + 'alpha_2':2.326338}] + + for dstr in dstr_all: + period = 1./out_dict[dstr]['frequency'] + for a in alias: + if ((period >= a['p_low']) and + (period <= a['p_high']) and + (out_dict[dstr]['signif'] < (a['alpha_1']/numpy.power(numpy.abs(period - a['per']), 0.25) + a['alpha_2']))): + dstr_alias.append(dstr) # this frequency has a "1 day" alias (or 0.5 or 0.33 + break # only need to do this once per period, if an alias is found. + + out_dict['n_alias'] = len(dstr_alias) + if 0: + # 20120624 comment out the code which replaces the aliased freq1 with the next non-aliased one: + if len(dstr_alias) > 0: + ### Here we set the next non-alias frequency to freq1, etc: + dstr_diff = list(set(dstr_all) - set(dstr_alias)) + dstr_diff.sort() # want to ensure that the lowest freq is first + reorder = [] + for dstr in dstr_all: + if len(dstr_diff) > 0: + reorder.append(out_dict[dstr_diff.pop(0)]) + else: + reorder.append(out_dict[dstr_alias.pop(0)]) + + for i, dstr in enumerate(dstr_all): + out_dict[dstr] = reorder[i] + + if 0: + ### Write PSD vs freq .png plots for AllStars web visualization: + self.make_psd_plot(psd=out_dict['freq1']['psd'], srcid=srcid, freqin=freqin) + + var0 = var(ytest) - median(dy0)**2 + out_dict['sigma0'] = 0. + if (var0 > 0.): + out_dict['sigma0'] = sqrt(var0) + out_dict['nu'] = dof + out_dict['chi2'] = res['chi2'] #dot(ytest**2,wt) # 20110512: res['chi2'] is the last freq (freq3)'s chi2, which is pretty similar to the old dot(ytest**2,wt) calculation which uses the signal removed ytest + #out_dict['alias_std'] = alias_std + out_dict['freq_binwidth'] = df + out_dict['freq_searched_min']=min(freqin) + out_dict['freq_searched_max']=max(freqin) + out_dict['mad_of_model_residuals'] = median(abs(ytest - median(ytest))) + + ##### This is used for p2p_scatter_2praw feature: + t_2per_fold = x % (2/out_dict['freq1']['frequency']) + tups = zip(t_2per_fold, y)#, range(len(t_2per_fold))) + tups.sort() + t_2fold, m_2fold = zip(*tups) #So: m_2fold[30] == y[i_fold[30]] + m_2fold_array = numpy.array(m_2fold) + sumsqr_diff_folded = numpy.sum((m_2fold_array[1:] - m_2fold_array[:-1])**2) + sumsqr_diff_unfold = numpy.sum((y[1:] - y[:-1])**2) + p2p_scatter_2praw = sumsqr_diff_folded / sumsqr_diff_unfold + out_dict['p2p_scatter_2praw'] = p2p_scatter_2praw + + mad = numpy.median(numpy.abs(y - median(y))) + out_dict['p2p_scatter_over_mad'] = numpy.median(numpy.abs(y[1:] - y[:-1])) / mad + + ### eta feature from arXiv 1101.3316 Kim QSO paper: + out_dict['p2p_ssqr_diff_over_var'] = sumsqr_diff_unfold / ((len(y) - 1) * numpy.var(y)) + + t_1per_fold = x % (1./out_dict['freq1']['frequency']) + tups = zip(t_1per_fold, y)#, range(len(t_2per_fold))) + tups.sort() + t_1fold, m_1fold = zip(*tups) #So: m_1fold[30] == y[i_fold[30]] + m_1fold_array = numpy.array(m_1fold) + out_dict['p2p_scatter_pfold_over_mad'] = \ + numpy.median(numpy.abs(m_1fold_array[1:] - m_1fold_array[:-1])) / mad + + ######################## # # # + ### This section is used to calculate Dubath (10. Percentile90:2P/P) + ### Which requires regenerating a model using 2P where P is the original found period + ### NOTE: this essentially runs everything a second time, so makes feature + ### generation take roughly twice as long. + + model_vals = numpy.zeros(len(y)) + #all_model_vals = numpy.zeros(len(y)) + freq_2p = out_dict['freq1']['frequency'] * 0.5 + ytest_2p=1.*y # makes a copy of the array + + ### So here we force the freq to just 2*freq1_Period + # - we also do not use linear detrending since we are not searching for freqs, and + # we want the resulting model to be smooth when in phase-space. Detrending would result + # in non-smooth model when period folded + psd,res = lombr(x,ytest_2p,dy0,freq_2p,df,1, tone_control=tone_control, + lambda0_range=lambda0_range, nharm=nharm, detrend_order=0)#1) + model_vals += res['model'] + #all_model_vals += res['model'] + + ytest_2p -= res['model'] + for i in range(1,num_freq_comps): + psd,res = lombr(x,ytest_2p,dy0,f0,df,numf, tone_control=tone_control, + lambda0_range=lambda0_range, nharm=nharm, detrend_order=0) + + #all_model_vals += res['model'] + ytest_2p -= res['model'] + + out_dict['medperc90_2p_p'] = scoreatpercentile(numpy.abs(ytest_2p), 90) / \ + scoreatpercentile(numpy.abs(ytest), 90) + + some_feats = self.get_2P_modeled_features(x=x, y=y, freq1_freq=out_dict['freq1']['frequency'], srcid=srcid, ls_dict=out_dict) + out_dict.update(some_feats) + + ### So the following uses the 2*Period model, and gets a time-sorted, folded t and m: + ### - NOTE: if this is succesful, I think a lot of other features could characterize the + ### shapes of the 2P folded data (not P or 2P dependent). + ### - the reason we choose 2P is that occasionally for eclipsing + ### sources the LS code chooses 0.5 of true period (but never 2x + ### the true period). slopes are not dependent upon the actual + ### period so 2P is fine if it gives a high chance of correct fitting. + ### - NOTE: we only use the model from freq1 because this with its harmonics seems to + ### adequately model shapes such as RRLyr skewed sawtooth, multi minima of rvtau + ### without getting the scatter from using additional LS found frequencies. + + + t_2per_fold = x % (1/freq_2p) + tups = zip(t_2per_fold, model_vals) + tups.sort() + t_2fold, m_2fold = zip(*tups) + t_2fold_array = numpy.array(t_2fold) + m_2fold_array = numpy.array(m_2fold) + slopes = (m_2fold_array[1:] - m_2fold_array[:-1]) / (t_2fold_array[1:] - t_2fold_array[:-1]) + out_dict['fold2P_slope_10percentile'] = scoreatpercentile(slopes,10) # this gets the steepest negative slope? + out_dict['fold2P_slope_90percentile'] = scoreatpercentile(slopes,90) # this gets the steepest positive slope? + + return out_dict, ytest + + +class GetPeriodFoldForWeb: + """ + To be called by tcp_html_show_recent_ptf_sources.py, + which is called by a PHP script on lyra. + + Eventually this only prints a JSON javascript structure which + contains period folded data for plottingL like: (mag vs time.) + """ + def __init__(self): + self.pars = { \ + 'mysql_user':"pteluser", + 'mysql_hostname':"192.168.1.25", + 'mysql_database':'source_test_db', + 'mysql_port':3306, + 'featid_lookup_pkl_fpath':os.path.expandvars("$TCP_DATA_DIR/featname_featid_lookup.pkl"), + 'color_chris_folded':"#cc0033", + 'color_chris_model':"#ff3399", + 'color_feature_resampled':"#3399cc", + 'color_folded_data':"#000066", + 'tcptutor_hostname':'lyra.berkeley.edu', + 'tcptutor_username':'pteluser', + 'tcptutor_password':'Edwin_Hubble71', + 'tcptutor_port': 3306, + 'tcptutor_database':'tutor', + } + + + def make_db_connection(self): + """ + """ + self.db = MySQLdb.connect(host=self.pars['mysql_hostname'], + user=self.pars['mysql_user'], + db=self.pars['mysql_database'], + port=self.pars['mysql_port']) + self.cursor = self.db.cursor() + + self.tutor_db = MySQLdb.connect(host=self.pars['tcptutor_hostname'], \ + user=self.pars['tcptutor_username'], \ + passwd=self.pars['tcptutor_password'],\ + db=self.pars['tcptutor_database'],\ + port=self.pars['tcptutor_port']) + self.tutor_cursor = self.tutor_db.cursor() + + + + def generate_featname_featid_lookup(self, filter_id=8): + """ Generate a RDB feature table lookup dictionary for: + feat_id : feat_value + """ + import cPickle + # TODO: if not .pkl file exists... + if os.path.exists(self.pars['featid_lookup_pkl_fpath']): + fp = open(self.pars['featid_lookup_pkl_fpath']) + self.featname_lookup = cPickle.load(fp) + fp.close() + return + else: + select_str = "SELECT feat_name, feat_id FROM source_test_db.feat_lookup WHERE filter_id = %d" % (filter_id) + self.cursor.execute(select_str) + + results = self.cursor.fetchall() + self.cursor.close() + self.featname_lookup = {} + for (feat_name, feat_id) in results: + self.featname_lookup[feat_name] = feat_id + + fp = open(self.pars['featid_lookup_pkl_fpath'], 'w') + cPickle.dump(self.featname_lookup, fp) + fp.close() + return + + + def get_source_arrays(self, source_id): + """ Retrieve source m, t from rdb. + """ + + #select_str = """SELECT object_test_db.obj_srcid_lookup.src_id, + # object_test_db.ptf_events.ujd, + # object_test_db.ptf_events.mag, + # object_test_db.ptf_events.mag_err + # FROM object_test_db.obj_srcid_lookup + # JOIN object_test_db.ptf_events ON (object_test_db.ptf_events.id = object_test_db.obj_srcid_lookup.obj_id) + # WHERE survey_id = 3 AND src_id = %d """ % (source_id) + + # 20091030: dstarr comments out: + #select_str = """SELECT object_test_db.obj_srcid_lookup.src_id, + # object_test_db.ptf_events.ujd, + # (-2.5 * LOG10(object_test_db.ptf_events.flux_aper + object_test_db.ptf_events.f_aper) + object_test_db.ptf_events.ub1_zp_ref) AS m_total, + # object_test_db.ptf_events.mag_err + # FROM object_test_db.obj_srcid_lookup + # JOIN object_test_db.ptf_events ON (object_test_db.ptf_events.id = object_test_db.obj_srcid_lookup.obj_id) + # WHERE survey_id = 3 AND src_id = %d + # ORDER BY object_test_db.ptf_events.ujd""" % (source_id) + + # 20091030: dstarr instead uses: + select_str = """SELECT object_test_db.obj_srcid_lookup.src_id, + object_test_db.ptf_events.ujd, + object_test_db.ptf_events.mag AS m_total, + object_test_db.ptf_events.mag_err + FROM object_test_db.obj_srcid_lookup + JOIN object_test_db.ptf_events ON (object_test_db.ptf_events.id = object_test_db.obj_srcid_lookup.obj_id) + WHERE survey_id = 3 AND src_id = %d + ORDER BY object_test_db.ptf_events.ujd""" % (source_id) + + + #Testing fluxes +## select_str = """SELECT object_test_db.obj_srcid_lookup.src_id, +## object_test_db.ptf_events.ujd, +## object_test_db.ptf_events.flux, +## object_test_db.ptf_events.flux_err +## FROM object_test_db.obj_srcid_lookup +## JOIN object_test_db.ptf_events ON (object_test_db.ptf_events.id = object_test_db.obj_srcid_lookup.obj_id) +## WHERE survey_id = 3 AND src_id = %d +## ORDER BY object_test_db.ptf_events.ujd""" % (source_id) + + self.cursor.execute(select_str) + + t_list = [] + m_list = [] + merr_list = [] + + results = self.cursor.fetchall() + + # TODO: maybe close DB connection too. + for row in results: + t_list.append(row[1]) + m_list.append(row[2]) + merr_list.append(row[3]) + + src_dict = {} + src_dict['src_id'] = results[0][0] + src_dict['t'] = numpy.array(t_list) + src_dict['m'] = numpy.array(m_list) + src_dict['m_err'] = numpy.array(merr_list) + #src_dict['m_err'] = [] #/@/ Justin changed 20090804 + return src_dict + + + def get_source_arrays__dotastro(self, source_id): + """ Retrieve source m, t from rdb. + + This version of the method queries the DotAstro.org / TUTOR database on lyra + """ + + # TODO: need to determine shich filter has the most number of epochs + # TODO: need to retrieve the magnitudes(time) from dotastro database for this fitler + # m_err(time) + srcid_dotastro = source_id - 100000000 + + # first need to use observations.source_id == to get the + # observations.observation_id + # then select count(*) from obs_data.observation_id== and see which observation_id (eg filter) has the most epochs. + # then retrieve all mag, m_err, time for this observation_id and return it. + + ##### First Retrieve the filter for the srcid from the tranx RDB + + select_str = "SELECT feats_used_filt FROM source_test_db.srcid_lookup WHERE src_id = %d" % (source_id) + self.cursor.execute(select_str) + results = self.cursor.fetchall() + if len(results) == 0: + return {} + feat_filter = results[0][0] + + ##### Determine the filter / observation_id which has the most number of epochs, + # since this currently corresponds to the timeseries which the feature algorithms + # were generated using (eg not using the combo_band). + #select_str = """SELECT filters.*, count(obs_data.obsdata_val) AS epoch_count, observations.observation_id + # FROM observations + # JOIN obs_data USING (observation_id) + # JOIN filters USING (filter_id) + # WHERE observations.source_id=%d AND filters.filter_name like "%s%" + # GROUP BY observations.observation_id + # ORDER BY epoch_count DESC""" % (srcid_dotastro, feat_filter[0]) + + select_str = """SELECT obs_data.obsdata_time, obs_data.obsdata_val, obs_data.obsdata_err + FROM observations + JOIN obs_data USING (observation_id) + JOIN filters USING (filter_id) + WHERE observations.source_id=%d AND filters.filter_name like "%s""" % (srcid_dotastro, feat_filter[0]) + '%"' + #'" """ + self.tutor_cursor.execute(select_str) + + t_list = [] + m_list = [] + merr_list = [] + + results = self.tutor_cursor.fetchall() + # TODO: maybe close DB connection too. + for row in results: + t_list.append(row[0]) + m_list.append(row[1]) + merr_list.append(row[2]) + + src_dict = {} + src_dict['src_id'] = source_id + src_dict['t'] = numpy.array(t_list) + src_dict['m'] = numpy.array(m_list) + src_dict['m_err'] = numpy.array(merr_list) + #src_dict['m_err'] = [] #/@/ Justin changed 20090804 + return src_dict + + + ### This function is no longer used by lomb_scargle_extractor. ONly Noisification/Chris related lightcurve.py functions use it. + def generate_lomb_period_fold(self, src_dict, return_option='top4lombfreqs_withharmonics'): + """ Re-generate lomb scargle using Chris code. + + Return period folded m(t) and evenly resampled m(t) in a dictionary. + """ + + obs = observatory_source_interface() + out_dict, cn_output = obs.lomb_code(src_dict['m'], + src_dict['m_err'], + src_dict['t']) + + + return out_dict + + + + def using_features_generate_resampled(self, src_dict): + """ Using features retrieved from RDB and stored in src_dict, + form a re-sampled m(t) and return in a dictionary. + """ + ##### TODO: Get the frequency components from feature tables if + # available. + # - Construct y_axis for some generated time-axis. + + # TODO: using: + # self.featname_lookup + # form a SELECT string which retrieves all features of interest + # then gemerate an out_dict{} so that this works: + + select_str = """SELECT + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s + """%(src_dict['src_id'], self.featname_lookup['freq1_harmonics_freq_0'], 'freq1_harmonics_freq_0', + src_dict['src_id'], self.featname_lookup['freq2_harmonics_freq_0'], 'freq2_harmonics_freq_0', + src_dict['src_id'], self.featname_lookup['freq3_harmonics_freq_0'], 'freq3_harmonics_freq_0', + src_dict['src_id'], self.featname_lookup['freq1_harmonics_amplitude_0'], 'freq1_harmonics_amplitude_0', + src_dict['src_id'], self.featname_lookup['freq2_harmonics_amplitude_0'], 'freq2_harmonics_amplitude_0', + src_dict['src_id'], self.featname_lookup['freq3_harmonics_amplitude_0'], 'freq3_harmonics_amplitude_0', + src_dict['src_id'], self.featname_lookup['freq1_harmonics_rel_phase_0'], 'freq1_harmonics_rel_phase_0', + src_dict['src_id'], self.featname_lookup['freq2_harmonics_rel_phase_0'], 'freq2_harmonics_rel_phase_0', + src_dict['src_id'], self.featname_lookup['freq3_harmonics_rel_phase_0'], 'freq3_harmonics_rel_phase_0', + src_dict['src_id'], self.featname_lookup['freq1_signif'], 'freq1_signif', + src_dict['src_id'], self.featname_lookup['freq2_signif'], 'freq2_signif', + ) + + self.cursor.execute(select_str) + + result = self.cursor.fetchall() + + ############# + + freq_list = [] + amp_list = [] + rel_phase = [] + + freq_list.append(result[0][0]) + freq_list.append(result[0][1]) + freq_list.append(result[0][2]) + amp_list.append(result[0][3]) + amp_list.append(result[0][4]) + amp_list.append(result[0][5]) + rel_phase.append(result[0][6]) + rel_phase.append(result[0][7]) + rel_phase.append(result[0][8]) + + freq1_harmonics_freq_0 = result[0][0] + freq2_harmonics_freq_0 = result[0][1] + freq1_signif = result[0][9] + freq2_signif = result[0][10] + freq1_harmonics_rel_phase_0 = result[0][6] + + #try: + # plot_period = 1.0 / freq_list[0] + # x_axis = arange(0,plot_period, .01) + # + # y_axis= amp_list[0]*sin(2*numpy.pi*freq_list[0]*(x_axis-rel_phase[0]))+\ + # amp_list[1]*sin(2*numpy.pi*freq_list[1]*(x_axis-rel_phase[1]))+\ + # amp_list[2]*sin(2*numpy.pi*freq_list[2]*(x_axis-rel_phase[2])) + # + # feature_resampled_dict = {'feature_resampled':{'t':x_axis, 'm':y_axis, + # 'color':self.pars['color_feature_resampled']}} + #except: + # feature_resampled_dict = {'feature_resampled':{'t':[], 'm':[], + # 'color':self.pars['color_feature_resampled']}} + + + ##### Here we period fold the existing data. + f = (freq1_harmonics_freq_0) + if freq2_signif > freq1_signif: + f = freq2_harmonics_freq_0 + + # find the phase: + p = freq1_harmonics_rel_phase_0 + + #period-fold the available times + t_fold = mod( src_dict['t'] + p/(2*pi*f) , (1./f) ) + ##### This is the earlier data: + try: + plot_period = 1.0 / freq_list[0] + x_axis = arange(0,plot_period, .001) + + #KLUDGE: I fake the generated LC mag amplitude & offset using real data: + amp_kludge = max(src_dict['m']) - min(src_dict['m']) + m_offset_kludge = amp_kludge/2. + min(src_dict['m']) + + # 20090720: dstarr replaces the following with something 4-6 lines below + #y_axis= (amp_list[0]*sin(2*numpy.pi*freq_list[0]*(x_axis-rel_phase[0]))+\ + # amp_list[1]*sin(2*numpy.pi*freq_list[1]*(x_axis-rel_phase[1]))+\ + # amp_list[2]*sin(2*numpy.pi*freq_list[2]*(x_axis-rel_phase[2]))) + y_axis= (amp_list[0]*sin(2*numpy.pi*freq_list[0]*(x_axis)))+\ + amp_list[1]*sin(2*numpy.pi*freq_list[1]*(x_axis) + rel_phase[1])+\ + amp_list[2]*sin(2*numpy.pi*freq_list[2]*(x_axis) + rel_phase[2]) + + y_axis= (amp_list[0]*sin(2*numpy.pi*freq_list[0]*(x_axis) + rel_phase[0]))+\ + amp_list[1]*sin(2*numpy.pi*freq_list[1]*(x_axis) + rel_phase[1])+\ + amp_list[2]*sin(2*numpy.pi*freq_list[2]*(x_axis) + rel_phase[2]) + + amp_sampled_m = max(y_axis) - min(y_axis) + amp_sampled_offset = amp_sampled_m / 2. + min(y_axis) + + y_axis = ((y_axis -amp_sampled_offset) / amp_sampled_m) * amp_kludge + m_offset_kludge + + feature_resampled_dict = {'DB features Generated':{'t':x_axis, 'm':y_axis, + 'color':self.pars['color_feature_resampled']}} + except: + feature_resampled_dict = {'DB features Generated':{'t':[], 'm':[], 'points': {'radius': 0.1}, + 'color':self.pars['color_feature_resampled']}} + ##### + + feature_resampled_dict.update({"DB features Period Folded":{'t':t_fold, 'm':src_dict['m'], + 'color':self.pars['color_folded_data']}}) + + html_str = "" + for i in range(len(amp_list)): + html_str += ""+str(i)+""+str(amp_list[i])+""+str(freq_list[i])+""+str(rel_phase[i])+""+str(1/freq_list[i])+" \n" + + if len(sys.argv) >= 2: + if sys.argv[1] == 'get_table_data': + return html_str + + return feature_resampled_dict + + def form_json(self, combo_dict): + """ Given period folded structures, form a JSON-like string, return. + Justin changing order in list since dictionary model blocks folded data + """ + json_list = [] + data_list1 = [] + for i in range(len(combo_dict['Actual Mags folded']['t'])): + data_list1.append([combo_dict['Actual Mags folded']['t'][i],combo_dict['Actual Mags folded']['m'][i]]) + data_list2 = [] + for i in range(len(combo_dict['Folded Model']['t'])): + data_list2.append([combo_dict['Folded Model']['t'][i],combo_dict['Folded Model']['m'][i]]) + data_list3 = [] + for i in range(len(combo_dict['Model with dictionary values']['t'])): + data_list3.append([combo_dict['Model with dictionary values']['t'][i],combo_dict['Model with dictionary values']['m'][i]]) + json_list.append({'label':'Model with dictionary values', + 'color':'#F2BABB', + 'data':data_list3}) + json_list.append({'label':'Folded Model', + 'color':'#BB8800', + 'data':data_list2}) + json_list.append({'label':'Actual Mags folded', + 'color':'#194E84', + 'data':data_list1}) + + json_string_single_quotes = pprint.pformat(json_list) + json_string = json_string_single_quotes.replace("'",'"') + return json_string + + + + def main(self, source_id): + """ + Eventually this function will calculate the period fold + plotting x,y array and return a string with this JSON-like + output, such as: + + [{"label":"Period Fold", "color":#36477b, + "data":[[1,1],[2,4],[3,9],[4,16]]}] + """ + print("make db connect") + self.make_db_connection() + print("before mysql query") + self.generate_featname_featid_lookup() + print("after mysql query") + if source_id >= 100000000: + src_dict = self.get_source_arrays__dotastro(source_id) + else: + src_dict = self.get_source_arrays(source_id) + print("finished generating src_dict") + lc_dict = {} + lomb_folded_dict = self.generate_lomb_period_fold(src_dict) + lc_dict.update(lomb_folded_dict) + + json_string = self.form_json(lc_dict) + return json_string + ####### Justin adding to view fluxes folded ####### + def online_dictionary(self, source_id, return_option="database"): + self.make_db_connection() + self.generate_featname_featid_lookup() + src_dict = self.get_source_arrays(source_id) + + db_dict = self.generate_lomb_period_fold(src_dict,return_option="db_dictionary") + return db_dict + + + + def html_table(self, source_id, return_option="html"): + self.make_db_connection() + self.generate_featname_featid_lookup() + + src_dict = self.get_source_arrays(source_id) + lomb_str = self.generate_lomb_period_fold(src_dict) + db_str = self.using_features_generate_resampled(src_dict) + final_str = " \n" + final_str += " \n" + final_str += "
Chris ValuesDB values
\n" + final_str += " \n" + final_str += lomb_str+"
Harmonic NumAmplitudeFreqOffset 1 / freq
\n" + final_str += " \n" + final_str += " \n" + final_str += db_str+"
Harmonic NumAmplitudeFreqOffset 1 / freq
" + + return final_str + + def for_testing(self, source_id): + pass + + +# 20090806: dstarr does this since sys.argv doesnt work for module imports: +sys_argv_1 = None +sys_argv_2 = None +if len(sys.argv) >= 3: + sys_argv_1 = sys.argv[1] + sys_argv_2 = sys.argv[2] + +if sys_argv_1 == 'get_period_fold2': + source_id = int(sys_argv_2) + GetPeriodFoldForWeb = GetPeriodFoldForWeb() + json_out_string = GetPeriodFoldForWeb.main(source_id) + print(json_out_string) + +if sys_argv_1 == 'get_period_fold4': + from lomb_scargle import * + from pre_whiten import * + from numpy import random + time = arange(0,7.5,0.3) + mags = sin(time) + mags += 15. + 0.1*random.normal(size=len(time)) + psd,freq,signi,simsigni,psdpeak = lomb(time,mags) + i0=psd.argmax(); freq0=freq[i0] + cn, out_dict = pre_whiten(time,mags, freq0) + plot (time,mags,'o') + plot (time,mags-cn) + A = out_dict['amplitude'] + dA = out_dict['amplitude_error'] + ph = out_dict['rel_phase'] + t0 = out_dict['time_offset'] + y0 = out_dict['y_offset'] + f = out_dict['freq'] + tt = min(time) + (max(time)-min(time))*arange(1000)/999. + modl = y0 + A[0]*sin(2*pi*f[0]*(tt-t0)+ph[0]) + for i in range(len(f)-1): + j=i+1 + modl += A[j]*sin(2*pi*f[j]*(tt-t0)+ph[j]) + fig = pyplot.figure() + ax = fig.add_subplot(111) + ax.plot(tt,modl, 'ro') + ax.plot(time, mags, 'bo') + pyplot.show() + +if sys_argv_1 == 'get_period_fold3': + x = arange(0,7.5, 0.3) + y = numpy.sin(x) + y_err = [] + y += 15. + 0.1*random.normal(size=len(x)) + #now add magnitude offest + src_dict = {'t': x, + 'm': y, + 'm_err':y_err} + get = GetPeriodFoldForWeb() + lomb_folded_dict = get.generate_lomb_period_fold(src_dict) + fig = pyplot.figure() + ax1 = fig.add_subplot(111) + ax1.plot(lomb_folded_dict['Actual Mags folded']['t'],lomb_folded_dict['Actual Mags folded']['m'], 'bo') + ax1.plot(lomb_folded_dict['Chris Period Folded: JUSTIN MODIFIED']['t'],lomb_folded_dict['Chris Period Folded: JUSTIN MODIFIED']['m'], 'ro') + ax1.plot(lomb_folded_dict['Chris model generated (w/ new_offset)']['t'],lomb_folded_dict['Chris model generated (w/ new_offset)']['m'], 'yo') + ax1.invert_yaxis() + pyplot.show() + +if sys_argv_1 == 'get_period_fold5': + source_id = int(sys_argv_2) + GetPeriodFoldForWeb = GetPeriodFoldForWeb() + db_dict = GetPeriodFoldForWeb.online_dictionary(source_id) + print(db_dict) + +if __name__ == '__main__': + ### 20101012: Added __main__ for testing use only, to see tracebacks from LombScargle code. + + + source_id = 100149386 + gpffw =GetPeriodFoldForWeb() + #db_dict = gpffw.main(source_id=source_id) + ### The following is done in gpffw.main(), but is hardcoded + # here to keep from doing DB connections + src_dict = {'m': array([ \ + 18.172, 18.556]), + 'm_err': array([ 0.045, 0.046]), + 'src_id': 100149386, + 't': array([ 2451214.70375, 2451215.60842])} + + + lomb_folded_dict = gpffw.generate_lomb_period_fold(src_dict, return_option='top4lombfreqs_withharmonics') + import pprint + pprint.pprint(lomb_folded_dict) + diff --git a/mltsp/TCP/Algorithms/fitcurve/linfit.py b/mltsp/TCP/Algorithms/fitcurve/linfit.py new file mode 100644 index 00000000..15cb9ce7 --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/linfit.py @@ -0,0 +1,31 @@ +from numpy import ones,sqrt + +def linfit(x,y,dy=[]): + """ + m = a+b*x + minimize chi^2 = Sum (y-m)^2/dy^2 + """ + lx=len(x) + if (dy==[]): + dy = ones(lx,dtype='float32') + + wt = 1./dy**2 + ss = wt.sum() + sx = (wt * x).sum() + sy = (wt * y).sum() + t = (x - sx/ss) / dy + b = (t * y / dy).sum() + + st2 = (t*t).sum() + + # parameter estimates + b = b / st2 + a = (sy - sx * b) / ss + + # error estimates + sdeva = sqrt((1. + sx * sx / (ss * st2)) / ss) + sdevb = sqrt(1. / st2) + covar = -sx/(ss*st2) + covar = [[sdeva**2, covar], [covar, sdevb**2]] + + return (a,b,covar) diff --git a/mltsp/TCP/Algorithms/fitcurve/lomb_period_fit(srcid_2570332).png b/mltsp/TCP/Algorithms/fitcurve/lomb_period_fit(srcid_2570332).png new file mode 100755 index 0000000000000000000000000000000000000000..dcbbd776c24ed4e2aaaee108af75ebea28fe42ad GIT binary patch literal 34319 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/lomb_period_fit(srcid_2758348).png b/mltsp/TCP/Algorithms/fitcurve/lomb_period_fit(srcid_2758348).png new file mode 100755 index 0000000000000000000000000000000000000000..f8ebc3d022bbe5fb724797ef69f3a7700c72c559 GIT binary patch literal 37372 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.): + sigma = norm.ppf(1.-0.5*exp(1.*lprob)) + else: + # this is good to 5.e-2; just to be crazy, get to 5.e-5 + sigma = sqrt( log(2./pi) - 2.*log(8.2) - 2.*lprob ) + f = 0.5*log(2./pi) - 0.5*sigma**2 - log(sigma) - lprob + df = - sigma - 1./sigma + sigma = sigma - f/df + + return float(sigma) + + +def peak2sigma(psdpeak,n0): + """ translates a psd peak height into a multi-trial NULL-hypothesis probability + NOTE: dstarr replaces '0' with 0.000001 to catch float-point accuracy bugs + Which I otherwise stumble into. + """ + + # Student's-T + prob0 = betai( 0.5*n0-2.,0.5,(n0-1.)/(n0-1.+2.*psdpeak) ) + if (0.5*n0-2.<=0.000001): + lprob0=0. + elif ( (n0-1.)/(n0-1.+2.*psdpeak) <=0.000001 ): + lprob0=-999. + elif (prob0==0): + lprob0=(0.5*n0-2.)*log( (n0-1.)/(n0-1.+2.*psdpeak) +) - log(0.5*n0-2.) - betaln(0.5*n0-2.,0.5) + else: lprob0=log(prob0) + + # ballpark number of independent frequencies + # (Horne and Baliunas, eq. 13) + horne = long(-6.362+1.193*n0+0.00098*n0**2.) + if (horne <= 0): horne=5 + + if (lprob0>log(1.e-4) and prob0>0): + # trials correction, monitoring numerical precision + lprob = log( 1. - exp( horne*log(1-prob0) ) ) + elif (lprob0+log(horne)>log(1.e-4) and prob0>0): + lprob = log( 1. - exp( -horne*prob0 ) ) + else: + lprob = log(horne) + lprob0 + + sigma = lprob2sigma(lprob) + + return sigma + + +def get_peak_width(psd,imax): + pmax = psd[imax] + i = 0 + while ( (psd[imax-i:imax+1+i]>(pmax/2.)).sum()/(1.+2*i)==1 ): + w = 1.+2*i + i+=1 + return w + + +# New as of 20101120: (with run_lomb14.py changes): +def lomb(time, signal, error, f1, df, numf, fit_mean=True, fit_slope=False, subtract_mean=True): + """ + C version of lomb_scargle + + Inputs: + time: time vector + signal: data vector + error: uncertainty on signal + df: frequency step + numf: number of frequencies to consider + + Output: + psd: power spectrum on frequency grid: f1,f1+df,...,f1+numf*df + """ + numt = len(time) + + wth = (1./error).astype('float64') + s0 = dot(wth,wth) + wth /= sqrt(s0) + + if (fit_mean==True): + subtract_mean=True + + if (fit_slope==True): + fit_mean=True + subtract_mean=True + + cn = (signal*wth).astype('float64') + if (subtract_mean==True): + cn -= dot(cn,wth)*wth + + tt = 2*pi*time.astype('float64') + sinx0, cosx0 = sin(df*tt), cos(df*tt) + sinx, cosx = sin(f1*tt)*wth, cos(f1*tt)*wth + + if (fit_slope==True): + tt *= wth + tt -= dot(tt,wth)*wth + tt /= tt.max() + s1 = dot(tt,tt) + cn -= dot(tt,cn)*tt/s1 + + numf = int(numf) + psd = empty(numf,dtype='float64') + + if (subtract_mean==False): + vcn = 1./s0 + else: + vcn = var(cn) + + fit_mean = int(fit_mean) + lomb_scargle_support = """ + inline double SQR(double a) { + return (a == 0.0 ? 0.0 : a*a); + } + + inline void update_sincos (long int numt, double *sinx0_ptr, double *cosx0_ptr, double *sinx_ptr, double *cosx_ptr) { + double tmp,*sinx0 = sinx0_ptr, *cosx0 = cosx0_ptr, *sinx = sinx_ptr, *cosx = cosx_ptr; + for (unsigned long i=0;i1: print('Starting Lomb (standard)...') + + signal = atleast_1d(signal).astype(double) + time = atleast_1d(time).astype(double) + + n0 = len(time) + + # if data error not given, assume all are unity + if (signal_err==[]): + wt = ones(n0,dtype=float) + else: + wt = 1./atleast_1d(signal_err).astype(double)**2; + wt[signal_err<=0] = 1. + + # if delta_time not given, assume 0 + do_sync=True + if (delta_time==[]): + do_sync=False + delta_time = zeros(n0, dtype=float) + else: + delta_time = atleast_1d(delta_time).astype(double) + + # make times manageable (Scargle periodogram is time-shift invariant) + tt = time-min(time) + ii = tt.argsort() + tt = tt[ii]; cn = signal[ii]; wt=wt[ii]; + + s0 = sum(wt) + msignal = sum( cn*wt ) / s0 + cn -= msignal + + # defaults + renorm=1 + if noise == 0: + renorm=0 + noise = sqrt( sum( cn**2*wt )/(n0-1) ) + + # make times manageable (Scargle periodogram is time-shift invariant) + tt = time-min(time) + tt.sort() + max_tt = tt[-1] + + # min.freq is 1/T, go a bit past that + # initial max. freq guess: approx. to Nyquist frequency + df = 0.1/max_tt + fmin = 0.5/max_tt + fmax = n0*fmin + # refine the maximum frequency to be a bit higher + dt = tt[1:] - tt[:-1] + g=where(dt>0) + if (len(g[0])>0): + dt_min = dt[g].min() + fmax = 0.5/dt_min + + # if omega is not given, compute it + if (freqin==[]): + numf = long( ceil( (fmax-fmin)/df ) ) + if (numf>num_freq_max): + if (verbosity>1): print(("Warning: shrinking num_freq %d -> %d (num_freq_max)") % (numf,num_freq_max)) + numf = long(num_freq_max) + #fmax = fmin + numf*df + df = (fmax - fmin)/numf + freqin = fmax - df*arange(numf,dtype=float) + om = 2.*pi*freqin + else: + om = freqin*2*pi + numf = len(om) + + # Bayes term in periodogram gets messy at frequencies lower than this + om0 = pi/max_tt + + if (numf==0): multiple = 0 + + if verbosity>1: print('Setting up periodogram...') + + # Periodogram + # Ref.: W.H. Press and G.B. Rybicki, 1989, ApJ 338, 277 + + # finite bins leads to sinc function; sinc factors drop out if delta_time = const. + # sinc(x) = sin(x*pi)/(x*pi) + + if (multiple > 0): + if verbosity>1: print('Looping...') + sisi=zeros([n0,numf], dtype=float) + coco=zeros([n0,numf], dtype=float) + + # Eq. (6); s2, c2 + ts1 = zeros(numf, dtype=float) + tc1 = zeros(numf, dtype=float) + s1 = zeros(numf, dtype=float) + s2 = zeros(numf, dtype=float) + c2 = zeros(numf, dtype=float) + # Eq. (5); sh and ch + sh = zeros(numf, dtype=float) + ch = zeros(numf, dtype=float) + bayes_term = zeros(numf, dtype=float) + + sync_func = lambda x: 1. + if (do_sync): + sync_func = lambda x: (1.e-99 + sin(pi*x))/(1.e-99 + pi*x) + + + for i in range(numf): + + x = ( om[i]*tt ) % (2*pi) + synct = sync_func(freqin[i]*delta_time) + sinom = sin(x)*synct + cosom = cos(x)*synct + + ts1[i] = sum( sinom*wt ) + tc1[i] = sum (cosom*wt ) + s1[i] = sum( synct**2*wt ) + s2[i] = 2.*sum( sinom*cosom*wt ) + c2[i] = sum( (cosom**2-sinom**2)*wt ) + sh[i] = sum( cn*sinom*wt ) + ch[i] = sum( cn*cosom*wt ) + + if (multiple > 0): + sisi[:,i]=sinom*wt + coco[:,i]=cosom*wt + + # cleanup + sinom = 0. + cosom = 0. + synct = 0. + + # Eq. (2): Definition -> tan(2omtau) + # --- tan(2omtau) = s2 / c2 + omtau = arctan2(s2,c2)/2 + + # cos(tau), sin(tau) + cosomtau = cos(omtau) + sinomtau = sin(omtau) + + tmp = 1.*ts1; + ts1 = cosomtau*tmp - sinomtau*tc1; + tc1 = sinomtau*tmp + cosomtau*tc1; + + tmp = 1.*sh; + sh = cosomtau*tmp - sinomtau*ch; + ch = sinomtau*tmp + cosomtau*ch; + + # Eq. (7); sum(cos(t-tau)**2) and sum(sin(t-tau)**2) + tmp = c2*cos(2.*omtau) + s2*sin(2.*omtau) + tc2 = 0.5*(s1+tmp) # sum(cos(t-tau)**2) + ts2 = 0.5*(s1-tmp) # sum(sin(t-tau)**2) + + norm_sin = sh/ts2; + norm_cos = ch/tc2; + cn0 = ( norm_sin*ts1 + norm_cos*tc1 ) / ( ts1**2/ts2 + tc1**2/tc2 - s0 ); + norm_sin -= cn0*ts1/ts2; + norm_cos -= cn0*tc1/tc2; + + #amplitude = sqrt(norm_sin**2+norm_cos**2) + #damplitude = sqrt(norm_sin**2/ts2+norm_cos**2/tc2)/amplitude*noise + + bayes_term = -0.5*log( s0*ts2*tc2 - tc1**2*ts2 - ts1**2*tc2 ) + 1.5*log(s0) - 0.5*log(4.) - log(freqin) + (log(freqin)).mean() + + # Eq. (3), modified + px = norm_sin**2*ts2 + norm_cos**2*tc2 - cn0**2*s0 + + # be careful here + wh = (tc2<=0) | (ts2<=0) + px[wh] = 0. + + # clean up + tmp = 0. + omtau = 0. + s2 = 0. + c2 = 0. + if multiple <=0 : + ts1 = 0. + tc1 = 0. + tc2 = 0. + ts2 = 0. + + # correct normalization + psd = atleast_1d( 0.5*px/(noise**2) ) + + if (use_bayes): + g=where(om0): + if (use_bayes): + j0 = psd.argmax() + signi = peak2sigma( (psd-bayes_term)[j0],n0) + else: + signi = peak2sigma(psd.max(),n0) + + # --- RUN SIMULATIONS for multiple > 0 + simsigni=[] + psdpeak=[] + if multiple > 0: + if verbosity>1: print('Running Simulations...') + if (multiple*fap < 10): + print('WARNING: Number of iterations (multiple keyword) not large enough for false alarm probability requested (need multiple*FAP > 10 )') + + psdpeak = zeros(multiple, dtype=float) + for m in range(multiple): + if ((m+1)%100 == 0) and (verbosity>0): + print("...working on %ith simulation. (%.2f Done)" % (m,m/multiple)) + + # Gaussian noise simulation + cn = normal(loc=0.0,scale=1.,size=n0)/sqrt(wt) + msignal = sum( cn*wt ) / s0 + cn = cn-msignal # force OBSERVED count rate to zero + if (renorm==0): noise = sqrt( sum( cn**2*wt )/(n0-1) ) + + # Eq. (5); sh and ch + for i in range(numf): + sh[i]=sum(cn*sisi[:,i]) + ch[i]=sum(cn*coco[:,i]) + + # Eq. (3) ; computing the periodogram for each simulation + tmp = sh; + sh = cosomtau*tmp - sinomtau*ch; + ch = sinomtau*tmp + cosomtau*ch; + + norm_sin = sh/ts2; + norm_cos = ch/tc2; + cn0 = ( norm_sin*ts1 + norm_cos*tc1 ) / ( ts1*ts1/ts2 + tc1*tc1/tc2 - s0 ); + norm_sin -= cn0*ts1/ts2; + norm_cos -= cn0*tc1/tc2; + + # Eq. (3), modified + px = norm_sin**2*ts2 + norm_cos**2*tc2 - s0*cn0**2 + + # be careful here + px[wh] = 0. + + psdpeak[m] = 0.5*px.max()/(noise**2) + + # False Alarm Probability according to simulations + if len(psdpeak) != 0: + psdpeak.sort() + psd0 = psdpeak[ long((1-fap)*(multiple-1)) ] + simsigni = peak2sigma(psd0,n0) + + + freq = om/(2.*pi) + + if verbosity>1: print('Done...') + + return (psd,freq,signi,simsigni,psdpeak) + + +if __name__ == '__main__': + from numpy.random import normal + from scipy.stats import betai + + #print('Testing Lomb-Scargle Periodogram with Gaussian noise...') + #freq = 10. # Hz - Sample frequency + #time = 10. #seconds + #noisetime = arange(0,time,1./freq, dtype=float) + #N = len(noisetime) + #dnoisetime=0*noisetime + 1./freq + #noisedata = sin(noisetime*2*pi)*1. + normal(loc=0,scale=1,size=N) + #dnoisedata = noisedata*0.+1. + + file='vosource_9026.dat' + #file='00331_3.dat' + #file='07914_9.dat' + mfile=open(file,'r') + fileList = mfile.readlines() + N = fileList.__len__() + noisedata = zeros(N,dtype=float) + dnoisedata = zeros(N,dtype=float) + noisetime = zeros(N,dtype=float) + dnoisetime = zeros(N,dtype=float) + + i=0 + for line in fileList: + (a,b,c) = line.split() + noisetime[i]=float(a) + noisedata[i]=float(b) + dnoisedata[i]=float(c) + i = i+1 + + noisetime = noisetime - noisetime[0] + + mfile.close() + + # get a careful estimate of the typical time between observations + time = noisetime + time.sort + dt = median( time[1:]-time[:-1] ) + + maxlogx = log(0.5/dt) # max frequency is ~ the sampling rate + minlogx = log(0.5/(time[-1]-time[0])) #min frequency is 0.5/T + + # sample the PSD with 1% fractional precision + M=long(ceil( (maxlogx-minlogx)*100. )) + frequencies = exp(maxlogx-arange(M, dtype=float) / (M-1.) * (maxlogx-minlogx)) + fap = 0.01 # we want to see what psd peak this false alarm probability would correspond to + + # set multiple >0 to get Monte Carlo significane estimate for peak (warning: this is slow) + multiple = 0 # should be >~10/fap + psd, freqs, signi, sim_signi, peak_sort = lomb(noisetime,noisedata,delta_time=dnoisedata, +signal_err=dnoisedata,freqin=frequencies,fap=fap,multiple=multiple) + + #peak location + imax = psd.argmax() + freq_max = freqs[imax] + + mpsd=max(psd) + print(("Peak=%.2f @ %.2f Hz, significance estimate: %.1f-sigma (T-test)") % (mpsd,freq_max,signi)) + + if (len(peak_sort)>0): + + psd0 = peak_sort[ long((1-fap)*(multiple-1)) ] + print(("Expected peak %.2f for False Alarm of %.2e") % (psd0,fap)) + + Prob0 = betai( 0.5*N-2.,0.5,(N-1.)/(N-1.+2.*psd0) ) + Nindep = log(1-fap)/log(1-Prob0) + horne = long(-6.362+1.193*N+0.00098*N**2.) + if (horne <= 0): horne=5 + print(("Estimated number of independent trials: %.2f (horne=%d)") % (Nindep,horne)) + + nover = sum( peak_sort>=mpsd ) + print(("Fraction of simulations with peak greater than observed value: %d/%d") % (nover,multiple)) + +""" +import Gnuplot +import time +plotobj = Gnuplot.Gnuplot() +plotobj.xlabel('Period (s)') +plotobj.ylabel('LS Periodogram') +plotobj('set logscale x') +plotobj('set logscale y') +plotobj.plot(Gnuplot.Data(1./freqs,psd, with = 'l 4 0')) +time.sleep(30) +""" diff --git a/mltsp/TCP/Algorithms/fitcurve/lomb_scargle_refine.py b/mltsp/TCP/Algorithms/fitcurve/lomb_scargle_refine.py new file mode 100644 index 00000000..a6597f54 --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/lomb_scargle_refine.py @@ -0,0 +1,183 @@ +# TODO duplicate? +from numpy import empty,pi,sqrt,sin,cos,dot,where,arange,arctan2,array,diag,ix_,log10,outer,hstack,log,round,zeros +from scipy import weave +from lomb_scargle import lprob2sigma +from scipy.stats import f as fdist +from ls_support import lomb_code,lomb_scargle_support +from numc_eigs import scode as eigs_code + +def lomb(time, signal, error, f1, df, numf, nharm=8, psdmin=6., detrend_order=0,freq_zoom=10.,tone_control=1.,return_model=True,lambda0=1.,lambda0_range=[-8,6]): + """ + C version of lomb_scargle: + Simultaneous fit of a sum of sinusoids by weighted, linear least squares. + model(t) = Sum_k Ck*t^k + Sum_i Sum_j Aij sin(2*pi*j*fi*(t-t0)+phij), i=[1,nfreq], j=[1,nharm] + [t0 defined such that ph11=0] + + Inputs: + time: time vector + signal: data vector + error: data uncertainty vector + df: frequency step + numf: number of frequencies to consider + + detrend_order: order of polynomial detrending (Ck orthogonol polynomial terms above; + 0 floating mean; <0 no detrending) + + psdmin: refine periodogram values with larger psd using multi-harmonic fit + nharm: number of harmonics to use in refinement + lambda0: typical value for regularization parameter (expert parameter) + lambda0_range: allowable range for log10 of regularization parameter + + Output: + psd: power spectrum on frequency grid: f1,f1+df,...,f1+numf*df + out_dict: dictionary describing various parameters of the multiharmonic fit at + the best-fit frequency + """ + numt = len(time) + + freq_zoom = round(freq_zoom/2.)*2. + + dord = detrend_order + if (detrend_order<0): + dord=0 + + if (tone_control<0): + tone_control=0. + + # polynomial terms + coef = empty(dord+1,dtype='float64') + norm = empty(dord+1,dtype='float64') + + wth0 = (1./error).astype('float64') + s0 = dot(wth0,wth0) + wth0 /= sqrt(s0) + + cn = (signal*wth0).astype('float64') + coef[0] = dot(cn,wth0); cn0 = coef[0]; norm[0] = 1. + cn -= coef[0]*wth0 + vcn = 1. + + # sin's and cosin's for later + tt = 2*pi*time.astype('float64') + sinx,cosx = sin(tt*f1)*wth0,cos(tt*f1)*wth0 + sinx_step,cosx_step = sin(tt*df),cos(tt*df) + sinx_back,cosx_back = -sin(tt*df/2.),cos(tt*df/2) + sinx_smallstep,cosx_smallstep = sin(tt*df/freq_zoom),cos(tt*df/freq_zoom) + + npar=2*nharm + hat_matr = empty((npar,numt),dtype='float64') + hat0 = empty((npar,dord+1),dtype='float64') + hat_hat = empty((npar,npar),dtype='float64') + soln = empty(npar,dtype='float64') + psd = zeros(numf,dtype='float64') + + # detrend the data and create the orthogonal detrending basis + if (dord>0): + wth = empty((dord+1,numt),dtype='float64') + wth[0,:] = wth0 + else: + wth = wth0 + + for i in range(detrend_order): + f = wth[i,:]*tt/(2*pi) + for j in range(i+1): + f -= dot(f,wth[j,:])*wth[j,:] + norm[i+1] = sqrt(dot(f,f)); f /= norm[i+1] + coef[i+1] = dot(cn,f) + cn -= coef[i+1]*f + wth[i+1,:] = f + vcn += (f/wth0)**2 + + + chi0 = dot(cn,cn) + varcn = chi0/(numt-1-dord) + psdmin *= 2*varcn + + Tr = array(0.,dtype='float64') + ifreq = array(0,dtype='int32') + lambda0 = array(lambda0/s0,dtype='float64') + lambda0_range = 10**array(lambda0_range,dtype='float64')/s0 + + vars=['numt','numf','nharm','detrend_order','psd','cn','wth','sinx','cosx','sinx_step','cosx_step','sinx_back','cosx_back','sinx_smallstep','cosx_smallstep','hat_matr','hat_hat','hat0','soln','chi0','freq_zoom','psdmin','tone_control','lambda0','lambda0_range','Tr','ifreq'] + weave.inline(lomb_code, vars, support_code = eigs_code + lomb_scargle_support,force=0) + + hat_hat /= s0 + ii = arange(nharm,dtype='int32') + soln[0:nharm] /= (1.+ii)**2; soln[nharm:] /= (1.+ii)**2 + if (detrend_order>=0): + hat_matr0 = outer(hat0[:,0],wth0) + for i in range(detrend_order): + hat_matr0 += outer(hat0[:,i+1],wth[i+1,:]) + + + modl = dot(hat_matr.T,soln); modl0 = dot(hat_matr0.T,soln) + coef0 = dot(soln,hat0) + coef -= coef0 + if (detrend_order>=0): + hat_matr -= hat_matr0 + + out_dict={} + out_dict['chi0'] = chi0*s0 + if (return_model): + if (dord>0): + out_dict['trend'] = dot(coef,wth)/wth0 + else: + out_dict['trend'] = coef[0] + 0*wth0 + out_dict['model'] = modl/wth0 + out_dict['trend'] + + j = psd.argmax() + freq = f1+df*j + (ifreq/freq_zoom - 1/2.)*df + tt = (time*freq) % 1. ; s =tt.argsort() + out_dict['freq'] = freq + out_dict['s0'] = s0 + out_dict['chi2'] = (chi0 - psd[j])*s0 + out_dict['psd'] = psd[j]*0.5/varcn + out_dict['lambda0'] = lambda0*s0 + out_dict['gcv_weight'] = (1-3./numt)/Tr + out_dict['trace'] = Tr + out_dict['nu0'] = numt - npar + npars = (1-Tr)*numt/2 + out_dict['nu'] = numt-npars + out_dict['npars'] = npars + + A0, B0 = soln[0:nharm],soln[nharm:] + hat_hat /= outer( hstack(((1.+ii)**2,(1.+ii)**2)),hstack(((1.+ii)**2,(1.+ii)**2)) ) + err2 = diag(hat_hat) + vA0, vB0 = err2[0:nharm], err2[nharm:] + covA0B0 = hat_hat[(ii,nharm+ii)] + + if (return_model): + vmodl = vcn/s0 + dot( (hat_matr/wth0).T, dot(hat_hat, hat_matr/wth0) ) + vmodl0 = vcn/s0 + dot( (hat_matr0/wth0).T, dot(hat_hat, hat_matr0/wth0) ) + out_dict['model_error'] = sqrt(diag(vmodl)) + out_dict['trend_error'] = sqrt(diag(vmodl0)) + + amp = sqrt(A0**2+B0**2) + damp = sqrt( A0**2*vA0 + B0**2*vB0 + 2.*A0*B0*covA0B0 )/amp + phase = arctan2( B0,A0 ) + rel_phase = phase - phase[0]*(1.+ii) + rel_phase = arctan2( sin(rel_phase),cos(rel_phase) ) + dphase = 0.*rel_phase + for i in range(nharm-1): + j=i+1 + v = array([-A0[0]*(1.+j)/amp[0]**2,B0[0]*(1.+j)/amp[0]**2,A0[j]/amp[j]**2,-B0[j]/amp[j]**2]) + jj=array([0,nharm,j,j+nharm]) + m = hat_hat[ix_(jj,jj)] + dphase[j] = sqrt( dot(dot(v,m),v) ) + + out_dict['amplitude'] = amp + out_dict['amplitude_error'] = damp + out_dict['rel_phase'] = rel_phase + out_dict['rel_phase_error'] = dphase + out_dict['time0'] = -phase[0]/(2*pi*freq) + + ncp = norm.cumprod() + out_dict['trend_coef'] = coef/ncp + out_dict['cn0'] = out_dict['trend_coef'][0] - cn0 + out_dict['trend_coef_error'] = sqrt( ( 1./s0 + diag(dot(hat0.T,dot(hat_hat,hat0))) )/ncp**2 ) + out_dict['cn0_error'] = out_dict['trend_coef_error'][0] + + prob = fdist.sf( 0.5*(numt-1.-dord)*(1.-out_dict['chi2']/out_dict['chi0']), 2,numt-1-dord ) + out_dict['signif'] = lprob2sigma(log(prob)) + + return 0.5*psd/varcn,out_dict diff --git a/mltsp/TCP/Algorithms/fitcurve/lombcheck_1.png b/mltsp/TCP/Algorithms/fitcurve/lombcheck_1.png new file mode 100755 index 0000000000000000000000000000000000000000..17f9d42fa34d514567f0de3f5885f391e2000ace GIT binary patch literal 24757 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%0A4eBrmUPD-O#g`+aygX<(X5`8-Kn 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ʬbJ|fc+yjLT` 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/lombtest_(45data)_realbogus_p018.png b/mltsp/TCP/Algorithms/fitcurve/lombtest_(45data)_realbogus_p018.png new file mode 100755 index 0000000000000000000000000000000000000000..2d3d2df211dc0b21437058f48951e16818159bf1 GIT binary patch literal 32616 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 F{{igkVaNag literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/lombtest_less_samp.png b/mltsp/TCP/Algorithms/fitcurve/lombtest_less_samp.png new file mode 100755 index 0000000000000000000000000000000000000000..7d94a8072d8a8fbdfe8d166057da465f9355da64 GIT binary patch literal 38128 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/lombtest_tcp_source(32data).png b/mltsp/TCP/Algorithms/fitcurve/lombtest_tcp_source(32data).png new file mode 100755 index 0000000000000000000000000000000000000000..1b692dfbd42ad306708cc75d6253977600900703 GIT binary patch literal 32462 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 wpSRHe&nbcZxZ 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 px = ( c2*sh*sh - 2.*cs*ch*sh + s2*ch*ch ) / detm; + return px; + } + inline void calc_dotprod(int numt, double sinx[], double cosx[], double wt[], int dord, double *st, double *ct) { + int i; + unsigned long n2=numt*dord; + for (*st=0,*ct=0,i=0;ipxmax) { + pxmax=px; + *ifreq = i; + } + update_sincos(numt, sinx_smallstep, cosx_smallstep, sinx1, cosx1, 0); + } + copy_sincos(numt,sinx,cosx,sinx1,cosx1); + if (*ifreqpx_max && Tr>0) { + px_max = px; + lambda_best = lambda; + *Trace = Tr; + } + lambda *= dlambda; + } + if (lambda_best-1.e-5>start) start=lambda_best/dlambda; + else break; + if(lambda_best+1.e-5psd0max && psdmax==0) { + psd0max = psd[j]; + copy_sincos(numt,sinx,cosx,sinx2,cosx2); + jmax = j; + } + // refine the fit around significant sin+cos fits + if (psd[j]>(double)psdmin) { + // first let the frequency vary slightly + px = do_lomb_zoom(numt,detrend_order, cn, sinx, cosx, sinx1, cosx1, sinx_back, cosx_back, sinx_smallstep, cosx_smallstep, wth, freq_zoom, &ifr); + lambda = *lambda0; + // now fit a multi-harmonic model with generalized cross-validation to avoid over-fitting + psd[j] = refine_psd(numt,nharm,detrend_order,hat_matr,hat0,hat_hat,sinx1,cosx1,wth,cn,soln,&lambda,lambda0_range,chi0,tone_control,&Trace,0); + if (psd[j]>psdmax) { + copy_sincos(numt,sinx1,cosx1,sinx2,cosx2); + psdmax=psd[j]; + *ifreq = ifr; + jmax = j; + } + } + update_sincos(numt, sinx_step, cosx_step, sinx, cosx, 0); + } + // finally, rerun at the best-fit period so we get some statistics + psd[jmax] = refine_psd(numt,nharm,detrend_order,hat_matr,hat0,hat_hat,sinx2,cosx2,wth,cn,soln,lambda0,lambda0_range,chi0,tone_control,Tr,1); +""" diff --git a/mltsp/TCP/Algorithms/fitcurve/multi_harmonic_fit.py b/mltsp/TCP/Algorithms/fitcurve/multi_harmonic_fit.py new file mode 100644 index 00000000..d1f3efee --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/multi_harmonic_fit.py @@ -0,0 +1,224 @@ +from __future__ import print_function +from numpy import sin,cos,sqrt,empty,pi,dot,arctan2,atleast_1d,diag,arange,abs,ones,array,zeros,log,trace +from scipy.linalg import cho_solve,cho_factor + +from pre_whiten import chi2sigma + +def CholeskyInverse(t,B): + """ + Computes inverse of matrix given its Cholesky upper Triangular decomposition t. + """ + nrows = len(t) + # Backward step for inverse. + for j in reversed(range(nrows)): + tjj = t[j,j] + S = sum([t[j,k]*B[j,k] for k in range(j+1, nrows)]) + B[j,j] = 1.0/ tjj**2 - S/ tjj + for i in reversed(range(j)): + B[j,i] = B[i,j] = -sum([t[i,k]*B[k,j] for k in range(i+1,nrows)])/t[i,i] + +def multi_harmonic_fit(time,data,error,freq,nharm=4,return_model=False,freq_sep=0.01,fit_mean=True,fit_slope=False): + """ + Simultaneous fit of a sum of sinusoids by weighted, linear least squares. + model(t) = C0 + C1*(t-t0) + Sum_i Sum_j Aij sin(2*pi*j*fi*(t-t0)+phij), i=[1,nfreq], j=[1,nharm] + [t0 defined such that ph11=0] + + Input: + time: x vector + data: y vector + error: uncertainty on data + freq: one or more frequencies freq_i to fit + nharm: number of harmonics of each frequency to fit (nharm=1 is just fundamental) + fij = fi, 2*fi, ... nharm*fi + freq_sep: freq_ij seperated by less than this are ignored (should be the search grid spacing) + fit_slope=False, then C1=0 + fit_mean=False, then C0=0 + + Output: + A dictionary containing the model evaluated on the time grid (if return_model==True) and + the model amplitudes Aij, phases phij, and their uncertainties. + """ + t = time.astype('float64') + r = data.astype('float64') + dr = error.astype('float64') + + numt = len(t) + + wt = 1./dr**2 + s0 = wt.sum() + t0 = (t*wt).sum()/s0 + t -= t0 + + dr *= sqrt(s0) + r0 = (r*wt).sum()/s0 + r -= r0 + + nfit=0 + if (fit_mean==True): + nfit=1 + + if (fit_slope==True): + fit_mean=True + nfit=2 + tm = t.max() + s1 = ((t/tm)**2*wt).sum() + sb = ((t/tm)*r*wt).sum() + slope = sb/s1; s1 /= s0 + r -= slope*t/tm + tt = t/tm/dr + + rr = r/dr + chi0 = dot(rr,rr)*s0 + + matr = empty((nfit+2*nharm,nfit+2*nharm),dtype='float64') + vec = empty(nfit+2*nharm,dtype='float64') + + sx = empty((nharm,numt),dtype='float64') + cx = empty((nharm,numt),dtype='float64') + + # + # We will solve matr*res = vec, for res. Define matr and vec. + # + sx0,cx0 = sin(2*pi*t*freq), cos(2*pi*t*freq) + sx[0,:] = sx0/dr; cx[0,:] = cx0/dr + for i in range(nharm-1): + sx[i+1,:] = cx0*sx[i,:] + sx0*cx[i,:] + cx[i+1,:] = -sx0*sx[i,:] + cx0*cx[i,:] + + if (nfit>0): + vec[0] = 0.; matr[0,0] = 1.; + if (nfit>1): + vec[1] = matr[0,1] = matr[1,0] = 0.; matr[1,1] = s1 + + for i in range(nharm): + vec[i+nfit] = dot(sx[i,:],rr) + vec[nharm+i+nfit] = dot(cx[i,:],rr) + if (nfit>0): + matr[0,i+nfit] = matr[i+nfit,0] = dot(sx[i,:],1./dr) + matr[0,nharm+i+nfit] = matr[nharm+i+nfit,0] = dot(cx[i,:],1./dr) + if (nfit>1): + matr[1,i+nfit] = matr[i+nfit,1] = dot(sx[i,:],tt) + matr[1,nharm+i+nfit] = matr[nharm+i+nfit,1] = dot(cx[i,:],tt) + for j in range(i+1): + matr[j+nfit,i+nfit] = matr[i+nfit,j+nfit] = dot(sx[i,:],sx[j,:]) + matr[j+nfit,nharm+i+nfit] = matr[nharm+i+nfit,j+nfit] = dot(cx[i,:],sx[j,:]) + matr[nharm+j+nfit,i+nfit] = matr[i+nfit,nharm+j+nfit] = dot(sx[i,:],cx[j,:]) + matr[nharm+j+nfit,nharm+i+nfit] = matr[nharm+i+nfit,nharm+j+nfit] = dot(cx[i,:],cx[j,:]) + + + out_dict={} + + # + # Convert to amplitudes and phases and propagate errors + # + out_dict['cn0'] = r0 + out_dict['cn0_error'] = 1./sqrt(s0) + out_dict['trend'] = 0. + out_dict['trend_error']=0. + + A0,B0,vA0,vB0,covA0B0 = zeros((5,nharm),dtype='float64') + amp,phase,rel_phase = zeros((3,nharm),dtype='float64') + damp,dphase = zeros((2,nharm),dtype='float64') + covA0B0 = zeros(nharm,dtype='float64') + res = zeros(nfit+2*nharm,dtype='float64') + err2 = zeros(nfit+2*nharm,dtype='float64') + + out_dict['bayes_factor'] = 0. + + try: + # + # solve the equation and replace matr with its inverse + # + m0 = cho_factor(matr,lower=False) + out_dict['bayes_factor'] = -log(trace(m0[0])) + res = cho_solve(m0,vec) + CholeskyInverse(m0[0],matr) + + A0, B0 = res[nfit:nharm+nfit],res[nharm+nfit:] + amp = sqrt(A0**2+B0**2) + phase = arctan2( B0,A0 ) + + err2 = diag(matr)/s0 + vA0, vB0 = err2[nfit:nharm+nfit], err2[nharm+nfit:] + for i in range(nharm): + covA0B0[i] = matr[nfit+i,nharm+nfit+i]/s0 + + damp = sqrt( A0**2*vA0 + B0**2*vB0 + 2.*A0*B0*covA0B0 )/amp + dphase = sqrt( A0**2*vB0 + B0**2*vA0 - 2.*A0*B0*covA0B0 )/amp**2 + rel_phase = phase - phase[0]*(1.+arange(nharm)) + rel_phase = arctan2( sin(rel_phase),cos(rel_phase) ) + + except: + print ("Failed: singular matrix! (Are your frequencies unique/non-harmonic?)") + + out_dict['time0'] = t0-phase[0]/(2*pi*freq) + out_dict["amplitude"] = amp + out_dict["amplitude_error"] = damp + out_dict["rel_phase"] = rel_phase + out_dict["rel_phase_error"] = dphase + + modl = r0 + dot(A0,sx*dr) + dot(B0,cx*dr) + if (nfit>0): + out_dict['cn0'] += res[0] + out_dict['cn0_error'] = sqrt(err2[0]) + modl += res[0] + if (nfit>1): + out_dict['trend'] = (res[1]+slope)/tm + out_dict['trend_error'] = sqrt(err2[1])/tm + modl += out_dict['trend']*t + ### + #import os + #import matplotlib.pyplot as pyplot + #t_folded = t % (1./freq) + #pyplot.title("nfit=%d After modl += res[0] and modl += out_dict['trend']*t" % (nfit)) + + #pyplot.plot(t_folded, data, 'bo', ms=3) + #pyplot.plot(t_folded, modl, 'ro', ms=3) + #pyplot.plot(t_folded, modl - out_dict['trend']*t, 'mo', ms=3) + #pyplot.plot(t_folded, out_dict['trend']*t, 'go', ms=3) + ##pyplot.plot(t, data, 'bo', ms=3) + ##pyplot.plot(t, modl, 'ro', ms=3) + ##pyplot.plot(t, modl - out_dict['trend']*t, 'mo', ms=3) + ##pyplot.plot(t, out_dict['trend']*t, 'go', ms=3) + ###pyplot.show() + ##fpath = '/tmp/multiharmonic.ps' + ##pyplot.savefig(fpath) + ##os.system('gv %s &' % (fpath)) + #import pdb; pdb.set_trace() + ### + resid = (modl-r-r0-slope*tt*dr)/dr + out_dict['chi2'] = dot(resid,resid)*s0 + out_dict['cn0'] += out_dict['trend']*(out_dict['time0']-t0) + else: + resid = (modl-r-r0)/dr + out_dict['chi2'] = dot(resid,resid)*s0 + + ### + #import os + #import matplotlib.pyplot as pyplot + #t_folded = t % (1./freq) + #pyplot.title("nfit=%d freq=%f End" % (nfit, freq)) + + #pyplot.plot(t_folded, data, 'bo', ms=3) + #pyplot.plot(t_folded, modl, 'ro', ms=3) + #pyplot.plot(t_folded, modl - out_dict['trend']*t, 'mo', ms=3) + #pyplot.plot(t_folded, out_dict['trend']*t, 'go', ms=3) + ##pyplot.plot(t, data, 'bo', ms=3) + ##pyplot.plot(t, modl, 'ro', ms=3) + ##pyplot.plot(t, modl - out_dict['trend']*t, 'mo', ms=3) + ##pyplot.plot(t, out_dict['trend']*t, 'go', ms=3) + ###pyplot.show() + #fpath = '/tmp/multiharmonic.ps' + #pyplot.savefig(fpath) + #os.system('gv %s &' % (fpath)) + #import pdb; pdb.set_trace() + #pyplot.clf() + ### + + + out_dict['nu'] = numt - 2*nharm - nfit + out_dict['signif'] = chi2sigma(chi0,out_dict['chi2'],numt-nfit,nharm) + if (return_model): + out_dict['model'] = modl + + return out_dict diff --git a/mltsp/TCP/Algorithms/fitcurve/numc_eigs.py b/mltsp/TCP/Algorithms/fitcurve/numc_eigs.py new file mode 100644 index 00000000..a1d0078e --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/numc_eigs.py @@ -0,0 +1,143 @@ +pythag_code = """ +inline double SQR(double a) { + return (a == 0.0 ? 0.0 : a*a); +} + +inline double SIGN(double a,double b) { + return ((b) >= 0.0 ? fabs(a) : -fabs(a)); +} + +double pythag(double a, double b) { + double absa,absb; + absa=fabs(a); + absb=fabs(b); + if (absa > absb) return absa*sqrt(1.0+SQR(absb/absa)); + else return (absb == 0.0 ? 0.0 : absb*sqrt(1.0+SQR(absa/absb))); +} +""" +tred2_code = """ +inline void tred2(double a[], int n, double d[], double e[]) { + int l,k,j,i; + double scale,hh,h,g,f; + + for (i=n-1;i>=1;i--) { + l=i-1; + h=scale=0.0; + if (l > 0) { + for (k=0;k<=l;k++) + scale += fabs(a[k+i*n]); + if (scale == 0.0) + e[i]=a[l+i*n]; + else { + for (k=0;k<=l;k++) { + a[k+i*n] /= scale; + h += a[k+i*n]*a[k+i*n]; + } + f=a[l+i*n]; + g=(f >= 0.0 ? -sqrt(h) : sqrt(h)); + e[i]=scale*g; + h -= f*g; + a[l+i*n]=f-g; + f=0.0; + for (j=0;j<=l;j++) { + a[i+j*n]=a[j+i*n]/h; + g=0.0; + for (k=0;k<=j;k++) + g += a[k+j*n]*a[k+i*n]; + for (k=j+1;k<=l;k++) + g += a[j+k*n]*a[k+i*n]; + e[j]=g/h; + f += e[j]*a[j+i*n]; + } + hh=f/(h+h); + for (j=0;j<=l;j++) { + f=a[j+i*n]; + e[j]=g=e[j]-hh*f; + for (k=0;k<=j;k++) + a[k+j*n] -= (f*e[k]+g*a[k+i*n]); + } + } + } else + e[i]=a[l+i*n]; + d[i]=h; + } + d[0]=0.0; + e[0]=0.0; + for (i=0;i=l;i--) { + f=s*e[i]; + b=c*e[i]; + e[i+1]=(r=pythag(f,g)); + if (r == 0.0) { + d[i+1] -= p; + e[m]=0.0; + break; + } + s=f/r; + c=g/r; + g=d[i+1]-p; + r=(d[i]-g)*s+2.0*c*b; + d[i+1]=g+(p=s*r); + g=c*r-b; + for (k=0;k= l) continue; + d[l] -= p; + e[l]=g; + e[m]=0.0; + } + } while (m != l); + } +} +""" + +scode = pythag_code + tred2_code + tqli_code +scode += """ +inline void get_eigs(int np,double x[],double d[]) { + double e[np]; + tred2(x,np,d,e); + tqli(d,e,np,x); +} +""" diff --git a/mltsp/TCP/Algorithms/fitcurve/observatory_source_interface_LGC.py b/mltsp/TCP/Algorithms/fitcurve/observatory_source_interface_LGC.py new file mode 100644 index 00000000..40d95a16 --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/observatory_source_interface_LGC.py @@ -0,0 +1,444 @@ +#!/usr/bin/env python +# encoding: utf-8 +""" +the observatory emits certain demands, fulfilled by this interface +""" +from __future__ import print_function +import sys +import os + +from pylab import * + +from numpy import * +from scipy.optimize import fmin, brute +from scipy import random +from numpy.random import rand + +from xml_reading import xml_reading +from janskies_converter import janskies_converter + +import lomb_scargle +from gcd_utilities import gcd_array +from scipy.fftpack import fftfreq, ifft +import pre_whiten + +import pickle + +import copy + +import ephem + +from spline_fit import spline_fitted_magnitudes, window_creator , window_tttimes, spline_fitted_magnitudes_brute + +from numpy.random import permutation + + +class lomb_model(object): + def create_model(self, available, m, m_err, out_dict): + def model(times): + data = zeros(times.size) + for freq in out_dict: + freq_dict = out_dict[freq] + # the if/else is a bit of a hack, + # but I don't want to catch "freq_searched_min" or "freq_searched_max" + if len(freq) > 8: + continue + else: + time_offset = freq_dict["harmonics_time_offset"] + for harmonic in range(freq_dict["harmonics_freq"].size): + f = freq_dict["harmonics_freq"][harmonic] + omega = f * 2 * pi + amp = freq_dict["harmonics_amplitude"][harmonic] + phase = freq_dict["harmonics_rel_phase"][harmonic] + new = amp * sin(omega * (times - time_offset) + phase) + data += new + return data + return model + +class period_folding_model(lomb_model): + """ contains methods that use period-folding to model data """ + def period_folding(self, needed, available, m , m_err, out_dict, doplot=True): + """ period folds both the needed and available times. Times are not ordered anymore! """ + + # find the first frequency in the lomb scargle dictionary: + f = (out_dict["freq1"]["harmonics_freq"][0]) + if out_dict["freq2"]["signif"] > out_dict["freq1"]["signif"]: + f = out_dict["freq2"]["frequency"] + + # find the phase: + p = out_dict["freq1"]["harmonics_rel_phase"][0] + + #period-fold the available times + t_fold = mod( available + p/(2*pi*f) , (1./f) ) + + #period-fold the needed times + t_fold_model = mod( needed + p/(2*pi*f) , (1./f) ) + ###### DEBUG ###### + early_bool = available < (2.4526e6 + 40) + ###### DEBUG ##### + + period_folded_progenitor_file = file("period_folded_progenitor.txt", "w") + progenitor_file = file("progenitor.txt", "w") + for n in range(len(t_fold)): + period_folded_progenitor_file.write("%f\t%f\t%f\n" % (t_fold[n], m[n], m_err[n])) + progenitor_file.write("%f\t%f\t%f\n" % (available[n], m[n], m_err[n])) + progenitor_file.close() + return t_fold, t_fold_model + + def create_model(self,available, m , m_err, out_dict): + f = out_dict["freq1"]["frequency"] + def model(times): + t_fold, t_fold_model = self.period_folding(times, available, m, m_err, out_dict) + data = empty(0) + rms = empty(0) + for time in t_fold_model: + # we're going to create a window around the desired time and sample a gaussian distribution around that time + period = 1./f + assert period < available.ptp()/3, "period is greater than one third of the duration of available data" + # window is 2% of the period + passed = False + for x in arange(0.01, 0.1, 0.01): + t_min = time - x * period + t_max = time + x * period + window = logical_and((t_fold < t_max), (t_fold > t_min)) # picks the available times that are within that window + try: + # there must be more than 3 points in the window for this to work: + assert (window.sum() > 5), str(time) + except AssertionError: + continue + else: + passed = True + break + assert passed, "No adequate window found" + m_window = m[window] + mean_window = mean(m_window) + std_window = std(m_window) + + # now we're ready to sample that distribution and create our point + new = (random.normal(loc=mean_window, scale = std_window, size = 1))[0] + data = append(data,new) + rms = append(rms, std_window) + period_folded_model_file = file("period_folded_model.txt", "w") +# model_file = file("model.txt", "w") + for n in range(len(t_fold_model)): + period_folded_model_file.write("%f\t%f\t%f\n" % (t_fold_model[n], data[n], rms[n])) +# model_file.write("%f\t%f\t%f\n" % (available[n], data[n], rms[n])) +# model_file.close() + period_folded_model_file.close() + return {'flux':data, 'rms': rms} + return model + +class spline_model(lomb_model): + """ Uses a spline fit as model """ + def create_model(self,available, m , m_err, out_dict): + def model(times): + assert available.ptp() > times.ptp(), "not enough range in available time data to perform spline fit" + delta = available[0] - times[0] + shifted_times = times + delta + mindiff = min(abs(diff(shifted_times))) + possible_range = max(available) - max(shifted_times) + dt = arange(0,possible_range, mindiff/5.*sign(possible_range)) + rand_dt = dt[permutation(dt.size)] + ispassed = False + for t in rand_dt: + try: + trial_times = shifted_times+t # try to advance shifted_times by amount t and see if that works + for i in arange(trial_times.size): + difftimes = available - trial_times[i] + absdiff = abs(difftimes) + nearest = absdiff.argmin() # the distance to the two nearest points + other_side = nearest - 1 * sign(difftimes[nearest]) + distance_to_nearest = absdiff[nearest] + distance_to_other_side = absdiff[other_side] + + # check that the distance to the nearest points is smaller than the minimum separation between desired times + assert distance_to_nearest < mindiff, "distance to the nearest points must be smaller than the minimum separation between desired times" + assert distance_to_other_side < mindiff, "distance to the other side must also be smaller than the minimum separation between desired times" + shift_worked = t + desired_times = shifted_times + t + window = logical_and(available > (desired_times.min()-10.), available < (desired_times.max()+10)) + + data, rms = spline_fitted_magnitudes(available, m, m_err, desired_times, mindiff = mindiff) + except AssertionError as description: + latest_description = description + continue + else: + print("passed") + ispassed = True + break + assert ispassed, "Didn't find a time shift that works, latest reason:" + str(latest_description) + time_fold, time_model_fold = period_folding_model().period_folding(desired_times, available, m , m_err, out_dict, doplot = False) + model_file = file("model.txt", "w") + for n in range(len(desired_times)): + model_file.write("%f\t%f\t%f\n" % (desired_times[n], data[n], rms[n])) + model_file.close() + return {'flux':data, 'rms':rms, 'new_times':desired_times} + return model + +class brutespline(lomb_model): + def create_model(self,available, m , m_err, out_dict): + def model(times): + assert available.ptp() > times.ptp(), "not enough range in available time data to perform spline fit" + delta = available[0] - times[0] + shifted_times = times + delta + possible_range = available[-2] - max(shifted_times) + mindiff = min(abs(diff(shifted_times))) + dt = arange(available[1],possible_range, mindiff/5.*sign(possible_range)) + rand_dt = dt[permutation(dt.size)] + t= rand_dt[0] + ispassed = False + desired_times = shifted_times+t # try to advance shifted_times by amount t and see if that works + data, rms = spline_fitted_magnitudes_brute(available, m, m_err, desired_times) + time_fold, time_model_fold = period_folding_model().period_folding(desired_times, available, m , m_err, out_dict, doplot = False) + model_file = file("model.txt", "w") + for n in range(len(desired_times)): + model_file.write("%f\t%f\t%f\n" % (desired_times[n], data[n], rms[n])) + model_file.close() + return {'flux':data, 'rms':rms, 'new_times':desired_times} + return model + + + +class observatory_source_interface(object): + # # # # # #: dstarr changes this to initially exclude spline models. Only want period_folded. + if len(sys.argv) > 4: + # xxx + if sys.argv[4] == 'tutor': + list_of_models = [period_folding_model()] + else: + list_of_models = [period_folding_model(), spline_model()] + else: + list_of_models = [period_folding_model(), spline_model()] + + def __init__(self): + pass + def get_out_dict(self, available, m, m_err, xml_file): + # time = x + # time.sort() + # 20080520: dstarr finds that SDSS-II data can have "duplicate" data points, which a noisy result of the photometric pipeline(s?). The median() can often be 0.0, which fouls things. So I use a mean here: + #dt = median( time[1:]-time[:-1] ) + dt = median( available[1:]-available[:-1] ) + maxlogx = log(0.5/dt) # max frequency is ~ the sampling rate + minlogx = log(0.5/(available[-1]-available[0])) #min frequency is 0.5/T + # sample the PSD with 1% fractional precision + M=long(ceil( (maxlogx-minlogx)*1000. )) # could change 100 to 1000 for higher resolution + frequencies = exp(maxlogx-arange(M, dtype=float) / (M-1.) * (maxlogx-minlogx)) + out_dict = self.lomb_code(frequencies, m, m_err, available) + f = (out_dict["freq1"]["harmonics_freq"][0]) + if out_dict["freq2"]["signif"] > out_dict["freq1"]["signif"]: + f = out_dict["freq2"]["frequency"] + narrow_frequencies = arange(0.99*f,1.01*f, 0.00001) + out_dict = self.lomb_code(narrow_frequencies, m, m_err, available) + return out_dict + def lomb_code(self,frequencies, m, m_err, available): + len_av = len(available) + dx = zeros(len_av,dtype=float) + num_freq_comps = 4 + out_dict={} + ytest=m + dof = len_av # don't know why we need to have two separate variables for this + if (dof>=5): + out_dict['frequencies'] = frequencies + out_dict['freq_searched_min']=min(frequencies) + out_dict['freq_searched_max']=max(frequencies) + for i in range(num_freq_comps): + psd, freqs, signi, sim_signi, peak_sort = lomb_scargle.lomb(available,ytest,delta_time=dx, signal_err=m_err,freqin=frequencies,verbosity=2) + imax = psd.argmax() + freq_max = freqs[imax] + void_ytest, harm_dict = pre_whiten.pre_whiten(available, ytest, freq_max, delta_time=dx, signal_err=m_err, dof=dof, nharm_min=1, nharm_max=99) + dstr = "freq%i" % (i+1) + # check for nharm and rerun + nharm = harm_dict["nharm"] + if nharm == 0: + break + print("frequency", i+1, "nharm", nharm) + ytest, harm_dict = pre_whiten.pre_whiten(available, ytest, freq_max, delta_time=dx, signal_err=m_err, dof=dof, nharm_min=nharm, nharm_max=nharm) + out_dict[dstr] = {} + freq_dict = out_dict[dstr] + freq_dict["signif"] = signi + freq_dict["frequency"] = freq_max + for elem_k, elem_v in harm_dict.items(): + freq_dict["harmonics_" + elem_k] = elem_v + dof = dof - harm_dict['nharm']*2. + return out_dict + + def form_vsrc_xml_ts(self, old_ts_dict, times, mags, merrs): + """ form a s_dict['ts'] style dict and return it. + """ + new_ts = copy.deepcopy(old_ts_dict) + assert len(new_ts.keys()) == 1 # DEBUG KLUDGE TEST + band_dict = new_ts.values()[0] + band_dict['m'] = mags + band_dict['m_err'] = merrs + band_dict['t'] = times + return new_ts + + + def obs_request(self, target, needed, band="u"): + # first, have xml_reading parse the xml: + xml_file, picked_band = self.pick_object(target,band) + self.xml_file = xml_file + s_dict, source = xml_reading().read_xml(xml_file = xml_file) + # we're going to dig through the dictionary and define a few useful variables + # this is the sub-dictionary that contains the actually time series data, it is defined by db_importer: + ts = s_dict["ts"] + # ts's sub-entries are the different bands available for this source + # we choose the band we want: + picked_band_key = picked_band + for item in ts.keys(): + if picked_band == item.split(":")[0]: + try: + picked_band_key = picked_band + ":" + item.split(":")[1] + except IndexError: + break + print(picked_band_key) + try: + if len(sys.argv) > 4: + if sys.argv[4] != 'tutor': + band_dic = ts[picked_band] + else: + if picked_band == 'any': + band_dic = ts.values()[0] + else: + bands = ts.keys() + band_dic = {} + for vsrc_band in bands: + if picked_band in vsrc_band: + band_dic = ts[vsrc_band] + break + if len(band_dic) == 0: + raise KeyError + else: + band_dic = ts[picked_band] + except KeyError: + print("print ts.keys()", ts.keys()) + raise KeyError + # we then make a copy of this dictionary for us to work with: + my_dic = band_dic.copy() + # we now prepare for the lomb scargle periodogram + available = array(my_dic["t"]) # available times + available = available - min(available) + m = array(my_dic["m"]) + m_err = array(my_dic["m_err"]) + self.out_dict = self.get_out_dict(available, m, m_err, xml_file) + passed = False + for model in self.list_of_models: + print("trying", model) + try: + model_function = model.create_model(available,m,m_err, self.out_dict) + model_output = model_function(needed) + except AssertionError as description: + print("we caught an assertion error %s" % description) + continue + else: + passed = True + break + print(passed, "passed?") + assert passed, "None of the models supplied worked :-/" + # reduce my_dic to these picked times + model_flux = model_output["flux"] + model_rms = model_output["rms"] + m_new = model_flux + model_lightcurve = [] + avg_model_mag = model_flux.mean() + vosource_fpath = sys.argv[1] + + # TODO: replace modeled_lightcurves/ with some explicit, command-line stated dirpath + if vosource_fpath.count('/') == 0: + sourceid = vosource_fpath[:-4] + else: + sourceid = vosource_fpath[vosource_fpath.rfind('/')+1:\ + vosource_fpath.rfind('.')] + ##### The following will automatically contain the TUTOR Classification info: + temp_ts = {} + temp_ts['default_band'] = my_dic + ### OLD (gets full, original t,m,merr): + #s_dict['ts'] = temp_ts + s_dict['ts'] = self.form_vsrc_xml_ts(temp_ts, needed, model_output["flux"], model_output["rms"]) + source.source_dict_to_xml(s_dict) + out_xml_fpath = "OutputVOSources/%s_%s.xml" % (sourceid, str(avg_model_mag)) + # DEBUG/KLUDGE: (the first generated model seems to have an average mag of 0, while subsequent are >>0) I skip the ~0 source: + if avg_model_mag > 3: + source.write_xml(out_xml_fpath=out_xml_fpath) + + first_time = needed[0] + model_lightcurve_file2 = file("model.txt", "w") + model_lightcurve_file = file("modeled_lightcurves/" + sourceid + "_" + str(avg_model_mag), "w") + for n in range(len(needed)): + model_lightcurve_file.write(str(needed[n]) + "\t" + str(model_flux[n]) + "\t" + str(model_rms[n]) + "\n") + model_lightcurve_file2.write(str(needed[n]-first_time) + "\t" + str(model_flux[n]) + "\t" + str(model_rms[n]) + "\n") + model_lightcurve.append([needed[n], model_flux[n], model_rms[n]]) + model_lightcurve_file.close() + model_lightcurve_file2.close() + my_dic["t"] = needed + my_dic["m"] = m_new + m.mean() + my_dic["m_err"] = model_rms + return {"old data": m, "new data": my_dic["m"], "difference": None, "needed": needed, "available":available, "m_err": m_err, "out_dict": self.out_dict, "my_dic": my_dic, "s_dict":s_dict, "source": source, "old_xmlfile":xml_file} + def pick_object(self,target, band = "u"): + if len(sys.argv) > 1: + xml_filename = sys.argv[1] + band = sys.argv[2] + assert xml_filename.split('.')[1] == 'xml' + if xml_filename.count('/') == 0: + xml_fpath = "VOsources/" + xml_filename + else: + xml_fpath = xml_filename # I expect this to be a full, expanded filepath to .xml + return xml_fpath, band + def read_mags_and_convert(self,my_dic,band): + """ reads the magnitudes from the source dictionary and converts them to janskies + this function assumes the vo_source structure + """ + # each band has an entry for the actual data, the magnitudes, which we convert to a numpy array: + magnitudes = array(my_dic['m']) + # and the uncertainties: + errors = array(my_dic["m_err"]) + # send this off to a separate function in janskies_converter for conversion + janskies_dic = janskies_converter().m_to_janskies(magnitudes,errors,band) + my_dic["janskies"] = janskies_dic["janskies"] + my_dic["j_err"] = janskies_dic["errors"] + return my_dic + + +class use_pickle(observatory_source_interface): + """ This class stores the lomb scargle model in a pickle file to speed up simulation of the same source multiple times """ + def get_out_dict(self, available, m, m_err, xml_file): + if '/' in xml_file: + sourcename = xml_file[xml_file.rfind('/')+1:xml_file.rfind('.')] + else: + sourcename = xml_file.split('.')[0] + sourcename = sourcename.split('/')[1] + band = sys.argv[2] + pklfile = 'pickled_models/' + sourcename + "_" + band + '.pkl' + try: + outdict_file = open(pklfile, 'r') + out_dict = pickle.load(outdict_file) + return out_dict + except IOError: + out_dict = super(use_pickle, self).get_out_dict(available, m, m_err, xml_file) + outdict_file = open(pklfile, 'w') + pickle.dump(out_dict, outdict_file) + return out_dict + +def main(): + + def request_noisified(): + my_obs = observatory_PTF.PTF + # make up an object: + vega = my_obs.create_target(ephem.hours('18:36:56.20'), ephem.degrees('38:46:59.0'), "cepheid") # coordinates of vega + for i in range(10): + mindiff_multiplier = i - 5 + if mindiff_multiplier < 1: + mindiff_multiplier = 1 + t = generic_observatory.time_series_generator() + time_series = t.generate_time_series(vega, my_obs) + print("mindiff_multiplier should be: ", mindiff_multiplier) + try: + output = my_obs.observe(target=vega, times = time_series, band = "V") + except AssertionError as description: + print("Failed %s times so far, because of %s" % ((i+1), description)) + else: + return output + return request_noisified() + +if __name__ == '__main__': + output = main() diff --git a/mltsp/TCP/Algorithms/fitcurve/period_folded_model.txt b/mltsp/TCP/Algorithms/fitcurve/period_folded_model.txt new file mode 100755 index 00000000..4a809f1e --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/period_folded_model.txt @@ -0,0 +1,13 @@ +0.083135 0.119154 0.014450 +0.095055 -0.213515 0.052800 +0.106125 -0.200382 0.034450 +0.117155 -0.271233 0.114150 +0.128545 0.353082 0.101350 +0.003258 1.130176 0.017750 +0.069918 0.461138 0.443700 +0.081048 0.083851 0.014450 +0.091998 -0.276903 0.052800 +0.103158 -0.230852 0.034450 +0.114268 -0.197139 0.114150 +0.126648 0.342404 0.101350 +0.002312 1.155161 0.017750 diff --git a/mltsp/TCP/Algorithms/fitcurve/period_folded_progenitor.txt b/mltsp/TCP/Algorithms/fitcurve/period_folded_progenitor.txt new file mode 100755 index 00000000..94c99a26 --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/period_folded_progenitor.txt @@ -0,0 +1,32 @@ +0.440755 1.751870 0.167700 +0.452115 0.764970 0.074400 +0.463535 0.539770 0.061700 +0.474805 0.376470 0.045600 +0.502385 0.013970 0.030800 +0.513525 -0.062230 0.031100 +0.524665 -0.130630 0.035800 +0.536785 -0.155830 0.039500 +0.547545 -0.032630 0.041500 +0.558245 0.126870 0.050200 +0.569275 0.112870 0.051700 +0.580205 0.005170 0.075400 +0.591245 0.245770 0.072100 +0.602555 0.276770 0.071800 +0.613595 0.282770 0.081400 +0.432221 2.355470 0.178200 +0.442461 1.266470 0.107300 +0.452901 0.750970 0.076700 +0.463601 0.551570 0.054300 +0.473911 0.240270 0.053000 +0.484221 0.056470 0.046000 +0.494661 -0.006230 0.039500 +0.505141 -0.170430 0.036400 +0.515561 -0.248130 0.034200 +0.525941 -0.277530 0.038900 +0.536371 -0.246630 0.044500 +0.546891 -0.243230 0.040800 +0.557481 -0.201030 0.044600 +0.567981 -0.059130 0.049600 +0.578451 -0.092630 0.063500 +0.588961 -0.029130 0.070300 +0.541140 -1.172930 0.088900 diff --git a/mltsp/TCP/Algorithms/fitcurve/phase_data.xml b/mltsp/TCP/Algorithms/fitcurve/phase_data.xml new file mode 100755 index 00000000..b7610514 --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/phase_data.xml @@ -0,0 +1,256 @@ + +3356609 +6.95778972201 +1.45039799048 +-0.0682688064713 +7.02937972201 +0.0419597574403 +-0 +6.95938972201 +0.0150078940119 +-0.00359226900613 +6.89018972202 +0.00936571842057 +-0.0471685124956 + + + +2570332 +2.90423691236 +1.14107802901 +-0.159250093555 +2.91059691236 +0.135928910531 +-0.277634049788 +2.92487691236 +0.0299363944642 +-0.143492181815 +2.90767691236 +0.0207236829602 +-0.157715548325 + + + +2570183 +3.65998218581 +0.960095303557 +-0.0614757090546 +3.69630218581 +0.139756744402 +-0.114979776716 +3.62311218581 +0.152238763046 +-0.110402322502 +3.63298218581 +0.133917215004 +-0.0144578888194 + + + +2813201 +3.39987029668 +0.69394819367 +-0.051472551812 +3.43239029668 +0.0115434895399 +-0.182088849454 +3.36443029668 +0.0162810583622 +-0.0445840712313 +3.43239029668 +0.00926812944243 +-0.0582684318253 + + + +3404778 +8.24044481299 +0.608763695285 +-0.0364058017265 +8.15661481299 +0.00168015446065 +-0.0582349431585 +8.32139481299 +0.00336334440883 +-0.0570817766342 +8.15661481299 +0.00331678345774 +-0.0582349431585 + + + +2809008 +7.93808204548 +1.07271617091 +-0.0409418796805 +8.01688204547 +0.0896169219774 +-0.0093552580136 +7.92634204548 +0.0577820788227 +-0.104083320562 +8.00366204547 +0.0201054184354 +-0.034359271848 + + + +3363430 +0.194941393556 +220.616362982 +-1.92365506966 +0.196871393556 +4.15030152304 +-2.15876970404 +0.192981393556 +0.560490413536 +-1.29546167842 +0.196871393556 +1.80296349039 +-2.03178325086 + + + +2802728 +0.0933729712585 +18.8223260539 +-2.67743434348 +0.0952529712585 +0.00144766082575 +-0.524918008745 +0.0933729712585 +0.00148400126849 +-2.94517777783 +0.0952529712585 +0.00144766005639 +-0.524918008745 + + + +2758348 +8.05002430809 +0.744502290408 +-0.0534159877714 +8.04691430809 +0.119905449111 +-0.064206806098 +8.06009430809 +0.0374211196961 +-0.0624726379479 +8.13000430808 +0.0134264541486 +-0.0705082434781 + + + +2773469 +3.31927907238 +1.04571668807 +-0.0451905358751 +3.35407907238 +0.00172217232879 +-0.0670824972055 +3.28766907238 +0.00315500018751 +-0.030416686655 +3.35407907238 +0.00263756726241 +-0.0894433296073 + + + +3376953 +7.67669446707 +1.2269336628 +-0.00651322000823 +7.75595446707 +0.00802657933796 +-0.0128933196326 +7.60237446707 +0.00572900315897 +-0.0953649419849 +7.75595446707 +0.00523539194396 +-0.0322332990816 + + + +3426086 +7.98069892496 +1.46022524679 +-0.0939767314934 +7.95550892496 +0.519117580264 +-0.0628495303967 +8.04822892495 +0.0557364491031 +-0.106680099012 +8.01666892496 +0.0128354937821 +-0.0719460516789 + + + +405248 +5.93696047921 +1.19271498768 +-0.0168436357881 +5.9977104792 +0.00205243692488 +-0.0666921154976 +5.87895047921 +0.00380451548614 +-0.0807967343287 +5.9977104792 +0.0038088682357 +-0.062523858279 + + + +3393548 +0.197534194176 +70.7453143109 +-0.253120732886 +0.199454194176 +1.03833753812 +-0.250684124275 +0.195514194176 +1.13108473875 +-0.51147181626 +0.199454194176 +1.55511134166 +-0.250684124275 + + + +448268 +6.71066711032 +1.66961233905 +-0.0819590647186 +6.77914711032 +0.0167478731315 +-0.051628913535 +6.64490711032 +0.0309472297837 +-0 +6.77914711032 +0.0320001022031 +-0.051628913535 + + + +2660820 +1.39365768695 +3.79593177713 +-0.287014525694 +1.40045768695 +0.462906728823 +-0.339174831504 +1.37992768695 +0.174817013604 +-0.271753370518 +1.40779768695 +0.232362430081 +-0.248615268547 + + diff --git a/mltsp/TCP/Algorithms/fitcurve/phase_fold_(50 datapoints).png b/mltsp/TCP/Algorithms/fitcurve/phase_fold_(50 datapoints).png new file mode 100755 index 0000000000000000000000000000000000000000..bba41d40b9f58a57063e5779222b1ab4c2aa7f4f GIT binary patch literal 34124 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

E$BBpgjtARH7lMp1=ADpfpZXJI==_z+Z||p- zq5Gf~%EOjvKNy=J7n&KM0BR#c$;dKmgo&#k|D*nN2-$CsKvVQlOM4?Mk|eI|P=%y@ z2|);rPjRb$zl*v`{ZKqA@7=|%jQX=+CEgI=h<;ij+fGKv`Q7eFJtLRajr2RHTcGYe zus|nocax3s8om{&W@6^asV?fwl;_789+43$?xmHI%pw?J8s?=!pcDJ)!Fp zP!dRsnWAK}`1Z;aKp1w0l9JN<&k1GFqIOAy6pH>tmx0}llPR{L@Y_%KkfP?q2QxtG z<-dQt*MkPAfW*YkU$g0+lcsQ>arvhG8^6PCL$@FDpb!X$CKBg<72y(48*phCSi?>f%)Z~^nc`w(|?yd~GLhT=P2G;%AL`YN5Pyn+> z_GSGR&w#_Pqco=>)DK7afRSi1QAx!)KcYVQ6JOpCf+YoA7IQk-3Vglb_YEd$nm-wV zKR_}+X_u<$6uW{Moz6s<@j65Tequ?ClvyFVnFJD<1lWLy9K7eP3pzg=)*rbo7uo8B z52-lmZCP39$r7E5^SmYqse&BYmh9S?fq4ZIE$^9i)7gz^fs!FU{2+#}A3f3*HmDUe zG0tDe*C|?no~d_EQ*}7%5#jX&1WzkPlK3$}n$*;+0@A%e=haK7Lv})XTmOV`g&zl} zbg`?e_K<8VgKo%c`U$Rbn{#R_W#oaej~EnLcNUu`JdxdUHv3!{)QZz#j0HWUcnsjQ z+cpSDgP@0w-|ygYz`+b||ATR4uA))p$HPU!sj_k>cUOjnSlt|~Y5o3M{daWHMCj~8 zlK6gpxt16rI%^@8fD;7qZQ(904OxZ4UZ%{PqGkfE5sQ>m1~kEryHS#DnM?ZK&bkL` zEC`FUBn#akkyM2}#AKWd^~pE1pdqQOy2i!D1?dh%15kaFN<|Js#!F<}otl-k;Tc}a zeJ+-e&h9T#-0LWcZ?8e~)pCB&C0zo#B8e4UUENEG#y*_2KD#VpVxux#WO%HYxJ}=a zp=9E=jz~R529GzIfvo~hsE*E$CmCz49v`j;lFqf!(I2{U_`~nRgmC9qiW+CYb12^j zBMK0}eFUwe&^cSy;0h@R;U&HXupm}aBDxD3wYbvf_OR$9KX~gKYBuyUsi0VQ4_S4f zdm!r~kVs5UR=j;X7(Bg#O!W%S1)`7^IY3PV{upR*NTB`d9Dq1U3MO{gw*Fvd9IG! zif31ew){T@b#HqDm$DL(j!ftu`}IXZ;Ap{Qwxups)AI~ihc85)pq1zOkz1zwVQ8CwaaP%eq;JXao&&C{Uo|8zQ#Dazh z5QLL+=ksjdGvxFu+)So`30^O2eF0GG1PT)!%&QmaE?b92OG}=OcAn+kK zz?bDfY9DfQ5BhwG!ZLDMD!?IUmpIpu|G*sA|3vvn;vu_nsx7|JuUKy>aSQ0eD#V#M#E;3dD zp-{506T|7zZm0AlbcY9k48db#QbmC|J`9jWN3m(MZhe3xSRB^$d`G;X{YWe{<{@3m z8>f6YBh|R`f6j|}5(yGJ7>KC1|h;S>n zb;7tfgw^$MUA+D4+duq)#}{Z_hupfE-gDf!bql~rsne9y%lP=7!_og+%y+#4?~8G$ zC$#QipG~X-enji0y#WMbC@7zxHJRNkLV^D^50U>dEQoRj;i#hm>p_}?jf1k!{=^Ys ztSdyj%MTtruv$|YE;f}#Q`gXdMr`@FMGiv+KlR$w0v({?Rx)jb&R{?2ARm=#0gZiD zbW^1k1U!jR09;eT*;v^49y8HNT;SG5_;z;GJ_DV|L;s86X`KLV@(ioC_1bn`r01V5 zcH5oCL5RmkT<6~EPmO80b?C{@Yajk!3cnRI2RE-lEgk2%=fd0Lu077XgF5}tYYlDc z;?R991u=zy{yZ_qZupZG{YrlhiT}|bP8S@qt!NygH^A6jf~7?A$D*!e%<}_W>-xFr z&#?7&RGIdlH7$tZa>2HT(PcL#YZdR^(DT|444@e6mK!j=4 zlMy6Dw-R@kVWycxdOk+_Ok~jxTHW2 ztrQvTNC~3dihKus+0c>t^7U)?R*7k7c}1g5Hy8a16cn|{-O8&)yLSQh7nsy%=$QDw zhEDJ?w^wG!Ya6saYN9`c26{Sik7$sp(x|ere06Tb)+W2*$s=(lQh9h97Jl$#+;HW5 zr(y!fL8?~mhxzHeWFI-Q9CJEcKit^_W#xt z7A@|x!7O}BxUO{lapeKP%f?GncHZ=4H!|MbDfM#J= zNoj%CTbN&~2d1Fm$&l`*`^p<5aRk?lNgZPK^_LS?P#Qr9MtE4SgPAZ<=UFTrLuYJ+ zP{D&2n*QVD7)eokcDXmR7mY`*1j|y;?OZ!Cgb6f0_1PvMjMX z!Qwy*GcMhQk$UMbu@^2q4)qV+U-9mKzh2fO%J_xA$YjXa4qYGRRYFcqE(m~!UOK># zh*q!{`0t(ZfWRdw57B#xJcTgD+)`4;fSEscXGrGf=3WJ#_kFvrh}-Lr>hDB&>p?t3 zOe$*XobGgSZb3o8DN)h%K&MvK-$9EhA`g7F#zEzPFCM)T|Kh*y73yKp^GHdHqq zCnNkU#T=E5c9@@K7gd9wkn`>qW(N0lm5*9V_ml-WvM@JQ&W{rRv{3Zb`7i8CJQh8& zd$E;*!OF?G#M=X==;}?Z^BzuFdxHBRT|A31Aoj%mr$+^VbqzB=)EB3bHw^{XEO4-L zAGm#=Unq9ufOK9aHnnX^j1MHwd|rzm+)2xE7N@ZxEO-!2Z%XK zu(TiVzYT^jLFZXHqrlVMBj_>L0#R@N70k^CwLXeh?%pGyPNAm~F_E#%#!odfuRoBO zwrBKbrI&VGKgMiuM=e||0Q=^=c1;;++J|?eWPyx)<(#lH_c%|IZun5^G4q?Ymn1U3dTIVLZBb&8-q}W z!N$T;c!`05;Wp*JZ?iew=mTjr6%|z$GZc6Mw_MD@o?bcHd;Ky#i(b4ybvBjui}hQg z5Q&PJ*_|MPwF&M*{ja}qr-_XhOpHZ_N9rc-w7SG@l%7B?R*AJL)6@? zn_6?|vft@$b&jd*^%qg*c*Y_|+6j6=ZX4ZAV3eL z_rtmg*^lr^!i!a2e%Po#H;x-e;WZE){o&VX(y!J$sy{Cid%l4b2G2x&zYOwE<7yY( z^psrO<8F{dSzc)(pytWdDKbux4h*PU1Zx%Y-LrqqW2CQ?$fE_3X1#Kbm_S|Z#d8O= zjlR+>&9}iV0|E`c?knsLQ#=l1>{O+*(y_RwLTz3u=r3U((IdOY9ohwe*3Sb-W;;^+ zcCaKZ6o<$wFwBeP~oWy3C3eX+9wa1k?8oQ?&ItA?)@Kit&O_MU*^0*||X| z3z)O?PV}X>;o%n`2Dqm*CbXbkBd5O(0-@AFDOQkw#7^kK?MmSh-6SvBq&JEU_g){sN{?R13@w**=*fv#!f*ZZC#^+ANyy@3En)j57nB|>y#td%xo5d)%IZ|T9v(y=qU;r zOFKQ5UfGpYdWq`~6;&0LCRn%gr{_$_rvwzCDEXi51H7Y_ zu%vb8oc#o5VCw7t{PO|Myc%u&&j*3pj|e}3??VD0<2*Zaqv#+v(TKK0(cH`xCV2Dt zxT71l!PUG$YX5LByF|UrbLzeKR7a}l**XJ`)kHSwaSS_gO2B-9)w7FPsh&DTE1NP( zSUT#!S+?pu()?!_HKhCK#6dLD(hYMTLKku`GLkJLnc={F)tG2bAA?x2n)W_szwg2( zp=cI)d|AuSS39uJ&v&9vYFmu7%eOl{4G9_OC)*-Hw|R5#vd8yhdjgi+DJ2*y7|PVC*^YZ4*2|Ba6O(Ntt&zI$^~iU!B22; zJRnbfhPo#hgsA~H;>11s4oc`B)<5hrB8Wu<5yySwmzTpZ4~&l*Ki11MxR3W9L=RUF zei)csHb$i7*|pLJ&IwnAa&{SWdcR|5YRywywc@cfOBV>}DYn^r^;13P&cmqmNe6`u zbSc4^i2_R5@h(MeW0a8bkAOMvc9)Om?T?Y@c4a}P`JOyG{wxFTg@qBlREGJ+T}gMU zYhDJ^f+dU+mX%*2SD>8W-;KA<%oN=C@FMG$eO<=PiZ-+tCTjz!jl@*Rl$rHUpZ>WK z97FR%q>YxX{gi2#n|Yfc);wvgzm+pKMr%s$S>{i)cO!vP_!-veRt2Xe{I!W^+v3fD zEu(TrLsZ3WRl94{8s%*f_ivT`q<6R>Zd<>g@L_JrsBDm* z+os(%l@gn;vu)<@aEjRHn%!(o(18>^I~(}y%<|;h7vzynom#q-Xs@&sJ9=<~P&gDJ z>Px2claHqCP^)iZ4PdRDIN?Y5#mSD}Y~B3X$Eh-})3cG?*=za~wvul}!AbW`*Cz@3 zk2i{1m!3{m{8Xv_FtFml+RfMB6+S7NYIyFimwGwp0ph~q+!8`!fNrjOJW4MoAHF0m zJc8=Z6(Vor{3qdmYUzur6PioPsUnnz$5Up%r?4tK!&ZBGOzqdNR6Tw+a&5LE*4xXL z(QoV5V@f~!cpPIai3Z1k$Y&=nga1{%yzABUkEMi!XCF5|pK`4DYcfN*E1@CnYZefg zE4|WB;L`>{R??cdkc7ZrwDSpVtHk+pIM->CuBkZtWnD%@WeXe>GtV~Sp@cjN@nkZ#pT0t1_?$=wjG7LR$tU|})f&;%?hsmime!bnlzo9v& zZ@Wo2`Wb0D{0KaqH6j#CDy7(&I zr7t%p|5{G-W60*0N9f*HsK2M9eVBP4XZ!#Mxlop(A%)Sjx;MMrM8Rz7@f z1Me;}H)>co;l}dY>;yNk3(Ae(+-Do@^a<8ajD$w*SQs?#vANVBEYHioSKf?F=6Q0b zL+jPG|4GJO7jH27Twz>F$W~$vaGnA;8p9EBhd9m#fNqCuLRgwo3DvmI_M1dU#>esm(0L&)!@= zl=$(&m^-mUk%5um+|H*w&|!>ro#RH~Q)3MipjlrL8zERx`sg{5z`iA{rSAImvaqqn?0d?@rJfli{I)6lrH< zAUF+`YuUC{KSq0_`sK@X5OH>!7C%F$<59_Qu^Qkifzf#~*9B^*U3BTI4jL=YLv6a4 zz2@R*Lv%jW;ZJighw?e)Z7NQS+x2z3C`FFc<1$Ma;dUe&F;{Khg{}h#d1`%vY;6+(@f~=h&Gi?IQHXc8R zXfp8QqeBaF8lXpqsPR(T;Oe}~D(Fm4hOTUKJu$k$drsA=QFWrn5az?IqN1f2{Vp{G zN1}ItmJ%2q9zKatVr1=73~A!}ty?qPtEX8{LhEZ(;p3fnW7nR@O5RCQTzxZLFDtg! zz{8^$a7S~dp;(qlk?52gLJ>x)?H=kZGhV-2CzN*qX-Pm(&^u(C`|R5b85ORo949V8 zi848uLwgwTev&qo*T*h7rGuc!blFga9!j3_hDBd_S2a75!L+h{?<2lwu6``*{Y z(>R8tzyN!IL8t!bZ`_SJwaM)J61!D@EKf;EvBu_;MceQb;8h6Zqizd7wMqKo z=W8D?F^;OE46pF%kqxE$7D%(442DNfQKL4o+8?==BjxhV;Qm5&d~Xf~=<^n-OO#H} z5jk%Rodf|c9un^deSPP=e=bZ3zxu{}S#SB{I_OlLYdBol`r9$3FT?un!o{ zM7>>?6_CA~h3&d3lk8w<;@at+It;FAyTZ|Dij)k#wU+l{hbKu>ahb9Pq&ld^>c z1@M+8#Sz$P!iWLdGdtDeA3&*1B6wZY(pR35WCQfUMkpZ_q-aR zb>@?lG*FlyRV?pC*EpL@s{t|yH(4ziRalr)bM55!{vP$NI1gTb%JAvo*&&Jkr%4kG zoN2t?uK^97gKWDFdY`uv^>^nq-*|m~u=|nnI9ojf|3lC|&!I=VMc%8>%%eYrv2i6c z^EaO{Mf3ltz5^(#gzjlgiYU@ z`!mrpfwykGT37(aM!}c@Ly7haSAi!!0DNkTe`a-wN`4N1zG9!0*xGUzj zH)mMkRDaJuFQ#8^^!UKQd+NZx17;21a`GJLW)Q@00pTONWLUZkJkwY?&-}%O5#QdT zg$xj(W5uj)gBKDdBXxG zK5nH$U0e_c8PHLh?c1o((0g#J1K?Pbg$g!dhjU5h_;7PZOi%sY z8-UjZ?k{9mD|D1Om>L}3%{+e!-mk!u58Qn#a@5n!6av51Jf-c{&LsuqWZlzsb zqBS#)wA`e3(mKuZcz>%^N*E7f#1}H7s%Kyz_KZz;(~2Bv^>^W*Oa>RGsQH~aN$}Q% zjDM#kl~J(MRq-n!u zB{5+`ZEi{o3Fz`;ho(f1*)X2aX_Vzzn4?>!3Q2x|1--(%K22%8-I57dX0+vZk~pfR zp&$eh(7tV%8|Dm9ShfPX!An(gY+@J_(RoJ%beGRjl6?119e>;k=M-6AHWeFZyEwWe z!~8E9)K$#%9-^xnuZqGGavbTECqxw%c!f-DZu^|@A{KwAoA)G{6^qA|(v(>Ga~tt% z*x;OLsY$9Ou5qgch)%M!oHkrSxb2OjvNIXxADbOJiubOb_~-z@t;cI8iVR;e{fZfE zQcTx79xGZsz9`I8MYFpmJsA9np;R3QPd$#3(LGJ<}Saf zZyDP<9x54V?@j-+W^0!$SFKpwjs0}~v#TyzaPR7~`#G1+ulw7`{CL{(BGi+j-{)AJ zIpnspD)d2e%B8QA<_wr>Br{Sk5k^Kr-lFROQYpa$gvR9e7Fq#abe3USOzD6u^LlaO zsD+hUSQzA~G_p8i7%%DNv~J|I9@JCn?<)J}OK`iCOxBAba+P_KXCMz?#UL8(+F0}; z#-)CAWdMvw%$?9S95AUUAGZH+;;QF&Eiky6o8kw;j#9?IQjd2M8lo2;=;S_}4Dltc zFRGB~b(IKZd7%=XD=x50+nbga5N#0=Da3z-7J74qkg~cS0%#^n|KYK*oTpWWT!JH>VPiUzX2nqMxWMC*H}gS6CmV*^v7 zmzK2S%XSWq(WMUM{87R}azF0iz!?PN+nav~3xCjeC^4{nx^z#P_R)bhUF>=Moizsi z^_%;VYXXeSF0LEcM`S87FjnqaYGIlFSSsfS#3->=Nl`wFhO^(qkjK)gu{#o^&kC<& zA#h~o59yt}x2nWgV(#-q`Ocj$+egpSc*$({tYz%^$DXc^7HbG3@6-NBmCq@1H=ZxV zr*DxwG5dM7V+?JtyeVy`S2zxKd`d|4x zVI|}FUQkxrCDO9tnRM{aT7I{J|EXirxUn>5;Dcscg?Zak|AfX*#-us@4JH&m$LIB2 zQ&@PxcT;BiSR1_gjPsxL-jJ>4W&^{PK03rzAN5~FddXX4Ar>OC>NDqJ@mPvQ!(LSl z35Ne%tc(y_03Evf|_JIkgLu~9AmZd8|z zRb#CG(cT8yWIrA?T`U~?+Fpbljn+e@VH{<`vI`ujSnm^KBKyt}!=r7sw7@;0s~CG< z)rkh)juoeVb!9MD`W>efUYPtL`LWc!r{^lqQ9x^csb~HMH!j4)YlbHIMnA8@dOJji zaUW4qJszjZ1oS$?&K6aIa(!s7f67Hx#Ww>Sn2+-lNwk>>+ME0Eq+Q3!b#C;(rhIj|TCSyvCqU0- zou5ZfS&v)v-zB>N@CcQ0|1A1?+FPnhpJ}l&bozL%D=n2WMUQbA5vaK~9N-6;WNS@;XK>EzNRl)%4cih{3j7 zMcepdIb`Y=Bcddf3Rh%ZG?gdJpu|X1uJcE^>24Yd|AbE zmTjrOno1a)x&#LWKdkl751+w56iul2zu~riy@CH%`r!O~M-Fh_zfZe&u!pa<+#6t4 z>h$N;*3G;7oAvR}~dfJ^1Nc&RhlH@{adfr$dm))Qmq-}!PLM3iu<<$2CZ8-R6H zD^?KOlH!ZDiCJNH`@2J^GhAn0B8*;O|NZubFg3T=BAho<@jlppX_oO4YT3^1KrYnVVFSwY8%*agEIW;q&dqO6z&I{wFnj*b^=Y6f;eVv@p*- zT|Xz0?1u-e7Z^ZRO@ml*JYf!Fe)PdPX$qF;e1y`rb;xDt%wBK8OpyCvx{ZR8*wh$0=k&458B(sj0v{d^J9*}E910Gkkq#7 z3*eiPo#e(Rlao&VH*RF0m1Km+hA&o$T-y2u_=@!}ziG#K01|KU-Xe8-dI%I&70}3AtN_wgm+9Nb#J$=8m?J#wYg1>G2 z60q0?MzJn<#4KF$CLlZs&}<*7C#2@zLDnVLWlcBuHykKKSWi~^+48s|ry+9w!< z>g#Lu4PM->fN8UbAaJU6j9<%2l-F8DnE9GYJJrUse%}4x&^JkXqk`H<5i|^V^_sn@_aqC@5;DkalmVCDN zTWf>wnJ>8xNo-tuz7Ouovp$39 zO9=hGcEf>puS|r}ygePG1l_o*M5g92$gDJLO=Z%mIfe@dIed@KMekU6vPAnAa-;s)1OkvmK0=d-1M>dA}%H>>)6u&6+_sO(M|ZJ3^YfWd8nYH-Cx6% zrGE9ZwATmrzXn>h2R<|*6%7~!lM{;dxruKxV^E)-!@ReETemcU5(pjBm;AxNe;xcv zKCo`EHSa)&oDhoHux?$%+#J5H4e-!#3RyFQfA;QOnl^bBaqx5tI$Vq|C;cVAjVPtg zOlWn#M6yEbO^Q?dF0J?<9B(bJ)2^9{pJKZbM?P@tX4_$VJSB50fLMv9q^1fW<lx6Wp)FK2`43`)VpF}yA0Kp`3vyyC`zCwM0W3jxfIMmpl*iD@&4D> zF}8p~iod@%PWTTHLXmH|*LGS8%Xbo9g^$zhvO@JXit9J-Zepc@*r0L@2RVu$QshuF_sRx!LJcCZyt{29?!Glq~Df*ri%AJDKQ3AamJXwaD z)l4J8*|aMiUxja|seW=OddY3Bm@WGwjq)Qm>~ZOQw7zQ(8C#^b5k%@8SwrcIhqg%3 z#-{$8vsWDk^00a%DsRO1LM{N|mHgR7N|0a*9%k?GlGrAu?f*S+Xk*gRSAxbnsdssf z$MPatquIT96J==EzD5Oy?4a*oB5n_bCIXm$ZkFgh=FUb>)9y*+8v3Y)=}qLb0l%I- zc#yW$LD{xN^+>yH;er3=!Pw}5dtwV-VLD!xK9O0)>%>|`*-4ax7f(U(A_J?}%;ySu ztM!>p8}VYQZ*iZw5O_<{%ZjdMd6L67(OGekymgfdn;VcMs$g4 zYSMx>(@I8E9m+tN`YC1^R3x^LX~@P!$S(iM&On%?TWMH#D>+ULp@sO-K36)-7jgjW z$#agJ>Te(7WBn8^u8zKON}1JfPhEZFaH)3NlPW=_?DDpO!{tI^+BU6P(yr>Wi=Jst z)*0&<%E?rwkZCp1bqV;*bN?QbYr>|KiQX*rFCTXv7hN4g{TXqcMa;qdOqCmvc+>c?EVH5q;nfi@1tdsWJ5_bbGJ}Md1@Tfm zdG=|zlsp^hfhbTW1dnF*fn6qK9cji9O7d_HXbe5rLETbi*1 zEUMBxnP4CcdeB8Hpzn88^X=uxcj`+@>ika#It9TJ7|9G5)Gv{_a>2zL8Q4 zf>sU6uJrSZ#i#vsQUb7q_bh&+Cj>gBv`j-HOis;UG&;L*OL6) zt^Zp09ggAs=P4Z}RQEOC2aOYIrCVD`16aM`PDwod;tl*>@_eBeN64!8(`YxiRKLDf z6EeCp!7<+)xJUKpVnNYssp{o~`2iGhqsrno%3Jr}c}?v^&uAc{=bWFy-F+&vy$UI> zBG7_FeLyt)C1k*Pom-Bm6_7FBBBixu@1X(O5mnW265)>;q{dm$u0RKGMJSbVjxi_~)2)p)H7t2Ypp0suGN)%5V* z6V#q-cIIa`_0-m2?wL$g;ADB zf5YXqjbuLVCN9X62S~qYV7GO@7Pw@N{*O52Fb_LJJIdr2oQLqqZI8 zgvnJYY`^C!hI@UO--w>*_U-lV+|GkW36I=xIxwrqddMgZVBhnlxs{Avt-tFyzZQ^Y zBHri3G{lF+N=WQ-@VuHS*q_%z5)R}%DNzE{8BX|;d9p=cnIUd3=slNZ=!XjnT)xT8 zERXn@uOeiuiXu2f&T_HHR3<~4!Ef%@i<+gV(yWs1Cd`5sx11}oAu&%{*9;|?*-nYh zbGJWWZoU1!O@E$t79}q1=|N+5n13lzQ=deVKhfx`0Fx_Y-CY6K@BKUr)5%g7efmz2 z%pe^?H2@BXEdQn>u_9kA`d_Rh%b~_l)JjRdF22#ZR@Ak3qlHpvDJdi65lX=z7kL*2tZE}7>>*T#bc~-x< ze?7h5M1q{{aD4f>u*p}uX#H<{`jlI;dw6!&Jvsel(%QOa&BPP$5^zY0wztq1cT(f~ zHy2!HxWM_ZF+2wJde1>R*NSUGnLupnG*% ziqSJpDS{{N7!vZlbG6?T3Df_Lo)J?s-K-OOX-5L_x* znmakUt-#^x4<&0REBI!aC+TJpz6buxIS}t_>qKK-nm()bnxD-uJa_moo5{IIAzSCu zgx5Sw3J3$OSsx8&oQN)K(pvt8%-|EqlPn^>h9C&PkK|qx#D%ReSNyRj`}+h@ zc^>cx{uHvnYVfDvK71oVbnPb{DM7T8$n^ia9}YN$-YD{UUC73Cik+-=GYvFJHXg1X zi|H+eo({E$I$GkIcuW`nZiW%t6=pYV^+ZhyK6l4PF}Gw* z7h3M9a?Wi)E1qn3q2WZ*hC!~vkQu)5!HDp1l)S6Ga9QIU|5qGm#F(odOJ6JKd!H4D z66#%+u>|gdG^h#TYC(7CdxtCC8rm+hZ^)awxA~E#q8tV|fYXmbNY3Zm3pG&$zJ+Ev z3pehmL%PX7DrUDoZd!o993v{o_P$=t=x&qT@K43-xmq$U3hk?F#055I8;?n4ROI8@ zO7vX$ckfmOTU1q5l}47Ub{`&ZFO%ozS0Ookm_ek22DEG=o=ZdJw8qNG|3JnPw+L|6 zw2|>r9Wya@8bs3;%x$@}Iuxov8(aaHZt&#vuzLZ zJvuttUUKHga7PA(Liw{yLq{i)?7P3P$gUPLsJ`Hi<~k-aVSMBp%;>lj0_K8j_0ii~ z?F$cvkH@dZuaFddaC*~q{f>i*44+BXIvA(AkbKR)cGS-@+M#kpdLtg<3%GM<6VtL~ z=@_Uz(3Y2hc|DfS6oJnh1eb5Re&1(dmR~?X4dP6FS#sJ9^e1=h%V#W6r@uPB5;oYC z0U{_`Xh(PN+^K~9e+vcJJ?KjKrKOE9r9F>SKxFW2s2|lv>Alx(zi}8R<}2}!$|d?P zx>s4|Zbpx>?6Vbz)TI|UgM#*&8g@x)pVw+R;9)kgHWK?*?6wMbiEnmJB9d4&EGvjxIdiM|cGwuq7%IHw!x4AxS%C*u6ad^wNO&v#lhhjK+N9-0%V%ksk z)A66UHNb4l83ciS&{72X`4Qcy<0UXZ%mD+GsG%06m}TYO02a|x?pKe@%8GGO>^V|1 z`}pIK5{7aG0mCa9f9<&0)ubQ;?I}Lv{7g(C%9IVkUKWk3Io=I7%Z1)!^Zq#Miq)&d z01%#67UlGwY+`Io$y!L0YzfY{T*bm74yR%{Io$El4MO=K(govc(r4VS4B(&>9j$GB zcQ-gEXWdQo{$a?2HrCCM5DD15C3ypE(a(*tkSVw~{PX*w>EL0rs9f)`-}9IltIqE^ zhPM~>njU5J-5ope)*thrlHasI0@)F2aV$|*YKr72X#xP_f##>N2wqAFcv289;Qh+! zIh5A|n*eVmqI}EL#TMrbs7@|I$0sFGdW5~m66ArRiX>e9xn73$EKlLrRvlwnm>l}( zP$AB{8QO|Q$N2mospRGweIl=uB{ycpnl%mhYnQYBrub_!&|}1|T)i3$NU9sxQSQdK z&dcwy!?y-e$6GNR_a(lPt?B;!nOWr}*x#$X&tsqj_R7zz1~;ziDTY4*v|lB%IIr;t z8itt$mK7^RfWorRZ5QmS8_b7)Yd=#y8IsD=@=Z&BK>6+aRlOQaH*>RFQ@**BXo8W} zuJHDKK+pJ~<)&wO6I%=%+mQFch4^2;-Xmj{ti+nqD#bad$ra_YtY*0xM@8G}2U-e0n?u;}CZIei06I&tU}4mD1|tYILdtIZ*^OjKZHmpp+a;thy_ z$Xy!;0pdUA+w8@1UZ^4{h?z`2`uqF0NIN|Ox60m`H)m8I=PtShk2_6|o+6=a+|KzH zr0qzc<)ED#b5N7le}&sQhRCFg<3Y+)Gm_op?EktHj?FeLya4PFaw#>f`&CY4^5YDW zi&qURhcvGWj&d|bL7+drZdMB)`}AYkNX}c1mMjr4YC?H&g{c0KhQXCMJV%ZgI|}>S z+hVdYN$UcP_#O4SE%>w3j;pc4q zXEFx$Hu>7xLb)-EA0|0*QT*CU@QTfV)dBtsRf&KTSl(_-^LmmcwN<}TCA)mqhI|3@ z8|3BG(UZMp{!D4eZW2E=vj5Umk^O-1cM#{Q?0!5h58524oCZ%vH(aW57C7eO;&QRu zW9iXsL(Qi5@vqH48maH{z@81zD=HoyyBj{j-e%-;q{!ZXtR-JB6dzy~PICQ}A7rg> z{)$CdeE)vG-G^-|v!hk42R@#4?naEW>!akn^lo?VSVcpiKAkf+L@sa4 zY({fDjtp!_?+;%)ThdqA4o>yI?F~p$G@e61GCnx}Bx^mdfWT`^r7T7G8yCz_{biE) zm#i$Xlv>;nt0!c4Y9!h%MbvXC=^+0i7=UPR;)v~eD(F=4e1N4Nx7xkL_c&Mjqs^Ad z-Y&w?4sD8}8ucXk1P8@3WDQ%xgCsiLcp9xtil0z%tS9X3A`%ma^K+W-ns|3~V%%~v zZoznY28ARUa$X|b2IF|`b!}<+oE`3AOdwDlQ2Py)UyY;aodAX^*uEXuJNe7Ju77*zjFwD z>RNVoJ7#uCkwz(!Im-QtyvTQ)osMJ#4AWB|?DE?k27rLGO-lj8mw?C{afxb)>*aqK zbptPVYHj&ylU;5P2O;ovXK4!kOqtjzAne` zJNj~CcGp_N5 z3)@AX6E=8!0GeJMq;RCNaSey`IrL}jXVVEH`!Gt=3pc5juU!RE2npzCW3X;T7TJBk zco}_20h=*l3W~D>q|OHo!&J<-Oh*sV-Au-^eiO;-#yibo%qT8l-i``n09~YJB()vi z&jMw=MmA>G?8TcrdGqFkkZG}wOUaC*a7jltbfx{6OFN5e(l0g6!Rt@H)7G#i3o2Z+ z^<#vdqi^PZ1fCQWOl`+TGR~3&Mly#+7;|0N$V6P&42mA1?g{~DFWIU?PM|^qwKJl( z6hb5wkOY_WstD+1p3u{Sq-y#UR;Ndvx#|shaSJMo_j2Y)^Uso)iKMBrvT~xr@})~n z#@s9|AM!dLJ{%6Zvu@X1PdqCzYDO05A;<{Ms?f-BwTs({u4J;7_f5NZtLKP&b|IRB z_rQ-_K#(EJueY5Wi7u)C>51&3o-M)bQd*?w5EtFtgA$)4dcSE(K8pKK>2>x6wqI() z)aPUgzc~_O%&xV}T`ygCF{L+PVll=8nzm+4Y`~=6BcRNegIKAH?F87Ib?&M=CN7N5zA3AyEe*nyi BDs2D& literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/pre_whiten.py b/mltsp/TCP/Algorithms/fitcurve/pre_whiten.py new file mode 100644 index 00000000..5c962739 --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/pre_whiten.py @@ -0,0 +1,289 @@ +#! /usr/bin/env python +# this is Nat's code copied over from the feature_extract project on August 3rd 2008, but I copied over nat's original svn upload, not Dan's modification (the modifications did not apply to this project) + + +from numpy import * + +from lomb_scargle import lprob2sigma + +def chi2sigma(chi0,chi1,nu0,nharm): + from scipy.stats import betai + from scipy.special import betaln + + nu1 = nu0 - 2.*nharm + dfn = nu0-nu1 + dfd = nu1 + sigma = 0. + if (dfn>0 and dfd>0 and chi0>chi1): + fstat = (chi0/chi1-1.)*dfd/dfn + prob = betai( dfd/2., dfn/2., dfd/(dfd+dfn*fstat) ) + if (dfd<=0 or dfn<=0): lprob=0. + elif (chi1==0): lprob=-999. + elif (prob==0): lprob = 0.5*dfd*log( dfd/(dfd+dfn*fstat) )-log(dfd/2.)-betaln(dfd/2.,dfn/2.) + else: lprob = log(prob) + sigma = lprob2sigma(lprob) + + return sigma + + +def pre_whiten(time, signal, freq, delta_time=[], signal_err=[], dof=-999, +nharm_min=4, nharm_max=20): + """Generates a harmonic fit to data (time,signal) with at most + nharm_max harmonics relative to the fundamental frequency freq. + Report statistics for nharm_min of them. + """ + n0 = len(time) + if (dof==-999 or dof>n0): dof=n0 + + A0 = zeros(nharm_max,dtype=float) + dA0 = zeros(nharm_max,dtype=float) + B0 = zeros(nharm_max,dtype=float) + dB0 = zeros(nharm_max,dtype=float) + pha = zeros(nharm_max,dtype=float) + + # if data error not given, assume all are unity + if (signal_err==[]): + wt = ones(n0,dtype=float) + else: + wt = 1./signal_err**2; + wt[signal_err<=0]=1. + + # if delta_time not given, assume 0 + do_sync=True + if (delta_time==[]): + do_sync=False + delta_time = zeros(n0, dtype=float) + + sync_func = lambda x: 1. + if (do_sync): + sync_func = lambda x: (1.e-99 + sin(pi*x))/(1.e-99 + pi*x) + + x = 2*pi*freq*time + cn = 1.*signal + + # just in case it wasn't already subtracted away + s0 = sum(wt) + mn = sum(cn*wt) / s0 + cn_offset = mn + cn -= cn_offset + dof = dof - 1. + + # initial chi^2 value for constant fit + nu0 = dof + chi0 = sum( cn**2*wt ) + + # + n_grid = (1+nharm_max)*20 + x_grid = 2*pi*arange(n_grid,dtype=float)/(1.*n_grid) + modls = zeros([nharm_max,n_grid],dtype=float) + modlc = zeros([nharm_max,n_grid],dtype=float) + modl0 = zeros(n_grid,dtype=float) + vmodl0 = zeros(n_grid,dtype=float) + + # + # do the dirty work, fit for the sinusoid amplitudes and phases + # modulus cn = A*sin(x+pha) , of A0*sin(x)+B0*cos(x) + # + chi1_last = chi0 + stop = 0 + for i in range(nharm_max): + + j = i+1 + + synct = sync_func(freq*j*delta_time) + sinx = sin(j*x)*synct + cosx = cos(j*x)*synct + + ts2 = 2.*sum( sinx*cosx*wt ) + tc2 = sum( (cosx**2-sinx**2)*wt ) + + x0 = 0.5*arctan2(ts2, tc2)/j + sinomtau = sin(j*x0) + cosomtau = cos(j*x0) + sin2omtau = 2.*sinomtau*cosomtau; + cos2omtau = cosomtau**2 - sinomtau**2 + + tmp = tc2*cos2omtau + ts2*sin2omtau; + tc2 = 0.5*(s0+tmp); + ts2 = 0.5*(s0-tmp); + + tmp = sinx + sinx = tmp*cosomtau-cosx*sinomtau + cosx = cosx*cosomtau + tmp*sinomtau + + sh = sum( cn*sinx*wt ) + ts1 = sum( sinx*wt ) + + ch = sum( cn*cosx*wt ) + tc1 = sum( cosx*wt ) + + A0[i] = sh / ts2; dA0[i] = 1./sqrt(ts2); + B0[i] = ch / tc2; dB0[i] = 1./sqrt(tc2); + cn0 = ( A0[i]*ts1 + B0[i]*tc1 ) / ( ts1**2/ts2 + tc1**2/tc2 - s0 ); + A0[i] -= cn0*ts1/ts2; + B0[i] -= cn0*tc1/tc2; + + pha[i] = arctan2(B0[i],A0[i]) - j*x0 + + cn_test = cn - cn0 - ( A0[i]*sinx + B0[i]*cosx ) * synct + + chi1 = sum( cn_test**2*wt ) # chi^2 for harmonic component removed + if (chi1 > chi1_last*(nu0-2*j)/(nu0-2*(j-1)) or j==nharm_max): + stop=1 + nharm = i + sigma = chi2sigma(chi0,chi1,nu0,nharm) + + if (stop==1 and j>nharm_min): # calculate >= nharm_min harmonics + + A0 = A0[:i] + dA0 = dA0[:i] + B0 = B0[:i] + dB0 = dB0[:i] + pha = pha[:i] + modls = modls[:i,:] + modlc = modlc[:i,:] + break + + chi1_last = chi1 + cn = cn_test + cn_offset += cn0 + + modls[i,:] = sin(j*(x_grid-x0)) + modlc[i,:] = cos(j*(x_grid-x0)) + modl0 += A0[i]*modls[i,:] + B0[i]*modlc[i,:] + vmodl0 += (dA0[i]*modls[i,:])**2 + (dB0[i]*modlc[i,:])**2 + + + # find light curve extremum for bookkeeping + pk = argmax(modl0*modl0) + # report phases relative to extremum, time' = time - time_offset + time_offset = - x_grid[pk] / (2*pi*freq) + for i in range(nharm): + pha[i] = pha[i] - (1+i)*x_grid[pk] + pha[i] = arctan2( sin(pha[i]),cos(pha[i]) ) + + x_grid = x_grid-x_grid[pk] + x_grid = arctan2(sin(x_grid),cos(x_grid)) + i0 = argmin(x_grid) + i1 = argmax(x_grid) + + # + # error propagation + # + A = sqrt( A0**2 + B0**2 ) + dA = sqrt( (A0*dA0)**2 + (B0*dB0)**2 ) / A + dpha = 1./(1+(A0/B0)**2) * sqrt( (dA0/B0)**2+(A0*dB0/B0**2)**2 ) + + # use the chi^2 values to get a better (more conservative) error estimate + fac=1. + sigma0 = A[0]/dA[0] + if (sigma0>sigma and sigma>0): fac = sigma0/sigma + # now apply it + dA = fac*dA + vmodl0 = fac**2*vmodl0 + dpha = fac*dpha + + # + # get flux extrema + # + mn = argmin(modl0) + fmin = modl0[mn] + vfmin = vmodl0[mn] + mx = argmax(modl0) + fmax = modl0[mx] + vfmax = vmodl0[mx] + peak2peak_flux = fmax - fmin + peak2peak_flux_error = sqrt( vfmin+vfmax ) + + # + # set flux offset and sign for moment calculation below + # + s0 = 0.5*(modl0[i0]+modl0[i1]) + vs0 = 0.25*(vmodl0[i0]+vmodl0[i1]) + + #import Gnuplot + #import time + #plotobj = Gnuplot.Gnuplot() + #plotobj.xlabel('Time (s)') + #plotobj.ylabel('Folded Light Curve') + #plotobj('unset logscale x') + #plotobj.plot(Gnuplot.Data(x_grid/(2*pi*freq),modl0-s0)) + #time.sleep(3) + + niter=10 + for k in range(niter): + if (k==0): window = 1. + + nmom = 4 # number of moments requested (don't change) + mu = zeros(1+nmom,dtype=float) + vmu = zeros(1+nmom,dtype=float) + x0=0. + norm=1. + for j in range(1+nmom): + xfac = pow(x_grid-x0,j)*window + mu[j] = -s0*mean(xfac)/norm + vmu[j] = vs0*(mean(xfac)/norm)**2 + for k in range(nharm): + mas = mean( xfac*modls[k,:] ) + mac = mean( xfac*modlc[k,:] ) + mu[j] = mu[j] + (A0[k]*mas + B0[k]*mac)/norm + vmu[j] = vmu[j] + (dA0[k]*mas/norm)**2 + (dB0[k]*mac/norm)**2 + if (j==0 and abs(mu[0])>0): norm = mu[0] + if (j==1): x0 = mu[1] + if (j==2): window = 1*( abs(x_grid-x0) < 3.*sqrt(mu[2]) ) + if (sum(window)==n_grid): break + + # defaults + moments = array([0.,0.5/freq,0.,0.]) + dmoments = array([1.,0.5/freq,1.,1.]) + if (abs(mu[0])>0 and mu[2]>0): + av = x0 + var = mu[2] + stdev = sqrt(var) + skewness = mu[3] / mu[2]**1.5 + kurtosis = mu[4] / mu[2]**2 - 3. + # error propagation is approximate + dav = sqrt(vmu[1]) + dstdev = 0.5*sqrt(vmu[2]/mu[2]) + dskewness = sqrt( vmu[3] ) / var**1.5 + dkurtosis = sqrt( vmu[4] ) / var**2. + + moments = array([av,stdev/(2*pi*freq),skewness,kurtosis]) + dmoments = array([dav,dstdev/(2*pi*freq),dskewness,dkurtosis]) + + # + # put it all in a dictionary + # + freqs = freq*(1+arange(nharm_min)) + #out_dict = { 'signif': sigma, 'peak2peak_flux': peak2peak_flux, + # 'peak2peak_flux_error': peak2peak_flux_error, 'amplitude': A[:nharm_min], + # 'freq': freqs, 'amplitude_error': dA[:nharm_min], 'rel_phase': pha[:nharm_min], + # 'rel_phase_error': dpha[:nharm_min], 'moments': moments, + # 'moments_err': dmoments, 'nharm': nharm} + + # 20080508: dstarr wants verbosely labeled dict: + out_dict = { 'signif': sigma, 'peak2peak_flux': peak2peak_flux, + 'peak2peak_flux_error': peak2peak_flux_error, 'nharm': nharm} + + for i in range(len(moments)): + out_dict['moments_' + str(i)] = moments[i] + for i in range(len(dA[:nharm_min])): + out_dict['amplitude_error_' + str(i)] = dA[:nharm_min][i] + for i in range(len(dmoments)): + out_dict['moments_err_' + str(i)] = dmoments[i] + for i in range(len(dpha[:nharm_min])): + out_dict['rel_phase_error_' + str(i)] = dpha[:nharm_min][i] + for i in range(len(A[:nharm_min])): + out_dict['amplitude_' + str(i)] = A[:nharm_min][i] + for i in range(len(pha[:nharm_min])): + out_dict['rel_phase_' + str(i)] = pha[:nharm_min][i] + for i in range(len(freqs)): + out_dict['freq_' + str(i)] = freqs[i] + + out_dict = { 'signif': sigma, 'peak2peak_flux': peak2peak_flux, +'peak2peak_flux_error': peak2peak_flux_error, 'amplitude': A[:nharm_min], +'freq': freqs, 'amplitude_error': dA[:nharm_min], 'rel_phase': pha[:nharm_min], +'rel_phase_error': dpha[:nharm_min], 'moments': moments, +'moments_err': dmoments, 'nharm': nharm, 'time_offset': time_offset,'y_offset':cn_offset} + + return cn, out_dict diff --git a/mltsp/TCP/Algorithms/fitcurve/progenitor.txt b/mltsp/TCP/Algorithms/fitcurve/progenitor.txt new file mode 100755 index 00000000..66231c8b --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/progenitor.txt @@ -0,0 +1,32 @@ +2454939.824650 1.751870 0.167700 +2454939.836010 0.764970 0.074400 +2454939.847430 0.539770 0.061700 +2454939.858700 0.376470 0.045600 +2454939.886280 0.013970 0.030800 +2454939.897420 -0.062230 0.031100 +2454939.908560 -0.130630 0.035800 +2454939.920680 -0.155830 0.039500 +2454939.931440 -0.032630 0.041500 +2454939.942140 0.126870 0.050200 +2454939.953170 0.112870 0.051700 +2454939.964100 0.005170 0.075400 +2454939.975140 0.245770 0.072100 +2454939.986450 0.276770 0.071800 +2454939.997490 0.282770 0.081400 +2454944.838870 2.355470 0.178200 +2454944.849110 1.266470 0.107300 +2454944.859550 0.750970 0.076700 +2454944.870250 0.551570 0.054300 +2454944.880560 0.240270 0.053000 +2454944.890870 0.056470 0.046000 +2454944.901310 -0.006230 0.039500 +2454944.911790 -0.170430 0.036400 +2454944.922210 -0.248130 0.034200 +2454944.932590 -0.277530 0.038900 +2454944.943020 -0.246630 0.044500 +2454944.953540 -0.243230 0.040800 +2454944.964130 -0.201030 0.044600 +2454944.974630 -0.059130 0.049600 +2454944.985100 -0.092630 0.063500 +2454944.995610 -0.029130 0.070300 +2455016.701420 -1.172930 0.088900 diff --git a/mltsp/TCP/Algorithms/fitcurve/scipy_interpolate.png b/mltsp/TCP/Algorithms/fitcurve/scipy_interpolate.png new file mode 100755 index 0000000000000000000000000000000000000000..003a017ee50c15086d4da1af7c2053894b09e0be GIT binary patch literal 34689 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 KifM<>d;Jf)j_eWu literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/scipy_interpolate_splrep.png b/mltsp/TCP/Algorithms/fitcurve/scipy_interpolate_splrep.png new file mode 100755 index 0000000000000000000000000000000000000000..7d94a8072d8a8fbdfe8d166057da465f9355da64 GIT binary patch literal 38128 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fitcurve/spline_fit.py b/mltsp/TCP/Algorithms/fitcurve/spline_fit.py new file mode 100644 index 00000000..f5ff18c3 --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/spline_fit.py @@ -0,0 +1,119 @@ +from numpy import * +from scipy import array +from scipy.interpolate import splprep, splev, interp1d + + +def append(arr1, arr2): + arr1_list = [] + arr2_list = [] + gen_arr = array([4,5]) + if not(type(arr1) == type(gen_arr)): + arr1_list.append(arr1) + for value in arr2: + arr2_list.append(value) + if not(type(arr2) == type(gen_arr)): + arr2_list.append(arr2) + for value in arr1: + arr1_list.append(value) + if (type(arr1) == type(gen_arr) and (type(arr2) == type(gen_arr))): + for value in arr1: + arr1_list.append(value) + for value in arr2: + arr2_list.append(value) + for value in arr2_list: + arr1_list.append(value) + combined_arr = array(arr1_list) + return combined_arr + + +# Given input arrays of times, magntidues, and requested_times, this function +# returns the spline_fitted_magnitudes. +def spline_fitted_magnitudes(times, magnitudes, errors, requested_times, mindiff = None): + # Spline parameters: + k=5 # spline order + nest=-1 # estimate of number of knots needed (-1 = maximal) + + fitted_errors = empty(0) + fitted_magnitudes = empty(0) + for rtime, window in window_creator(times, requested_times, mindiff = mindiff): + wtimes = times[window] + wmagnitudes = magnitudes[window] + werrors = errors[window] + + # spline parameter: + s=len(wtimes)/100. # smoothness parameter + + # Find the knot points. + tckp, u = splprep([wtimes, wmagnitudes],s=s,k=k,nest=-1) + + # Evaluate spline, including interpolated points. + new_times, new_magnitudes = splev(linspace(0,1,len(wtimes)),tckp) + + # Define an interpolating function along the spline fit. + interpolating_function = interp1d(new_times, new_magnitudes, kind = "linear") + + # Interpolate linerarly along the spline at the requested times. + fitted_magnitude = interpolating_function(rtime) + fitted_magnitudes = append(fitted_magnitudes, fitted_magnitude) + + for m in range(len(wtimes)-1): + if (rtime > wtimes[m]) and (rtime < wtimes[m+1]): + error = (werrors[m] + werrors[m+1])*0.5 + fitted_errors = append(fitted_errors, error) + return fitted_magnitudes, fitted_errors + +def spline_fitted_magnitudes_brute(times, magnitudes, errors, requested_times): + # Spline parameters: + s=len(times)/100. # smoothness parameter + k=5 # spline order + nest=-1 # estimate of number of knots needed (-1 = maximal) + + # Find the knot points. + tckp, u = splprep([times, magnitudes],s=s,k=k,nest=-1) + + # Evaluate spline, including interpolated points. + new_times, new_magnitudes = splev(linspace(0,1,len(times)),tckp) + + # Define an interpolating function along the spline fit. + interpolating_function = interp1d(new_times, new_magnitudes, kind = "linear") + + # Interpolate linerarly along the spline at the requested times. + fitted_magnitudes = interpolating_function(requested_times) + + fitted_errors = array([]) + for n in range(len(requested_times)): + for m in range(len(times)-1): + if (requested_times[n] > times[m]) and (requested_times[n] < times[m+1]): + error = (errors[m] + errors[m+1])*0.5 + fitted_errors = append(fitted_errors, error) + return fitted_magnitudes, fitted_errors + +def window_creator(times, requested_times, mindiff = None): + if not mindiff: + mindiff = min(abs(diff(requested_times))) + for rtime in requested_times: + itime = argmin(abs(times - rtime)) # index of the time that best matches the requested times + diffs = abs(diff(times)) # spacings between times + ibad = where(diffs > mindiff)[0] + 1 # indices where two points are too far apart for a good spline fit + ibad = append(0, ibad) # add the edges + ibad = append(ibad, times.size - 1) + ibadl = ibad[ibad < itime] # indices where two points are too far apart and that are *before* the requested time (l="lower") + ibadu = ibad[ibad > itime] # indices where two points are too far apart and that are *after* the requested time (u="upper") + assert ibadl.size > 0, "the requested time is right at the edge of available times" + assert ibadu.size > 0, "the requested time is right at the edge of available times" + nearestbadl = ibadl[-1] # closest bad time before the requested time + nearestbadu = ibadu[0] # closest bad time after the requested time + assert itime - nearestbadl > 1, "can't be right next to the edge" + assert nearestbadu - itime > 1, "can't be right next to the edge" + window = arange(nearestbadl,nearestbadu) + assert window.size > 5, "window size is too small" + yield rtime, window + +def window_tttimes(times, requested_times, ttimes): + poverlap = zeros(ttimes.size).astype(bool) + for rtime, window in window_creator(times,requested_times): + boundaries = (times[window[0]], times[window[-1]]) + overlap = logical_and( ttimes < boundaries[1] , ttimes > boundaries[0]) + poverlap = logical_or(overlap, poverlap) + wttimes = ttimes[poverlap] + return wttimes \ No newline at end of file diff --git a/mltsp/TCP/Algorithms/fitcurve/test.txt b/mltsp/TCP/Algorithms/fitcurve/test.txt new file mode 100755 index 00000000..1cac6bfc --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/test.txt @@ -0,0 +1,231 @@ +Check that you can query the mysql db to get the harmonic's data rather than running this code: + + + +Source RA, DEC = (188.70795310,8.83488902) + +src_id = 456785, may + +primary: +f = 2.8966 +amp = 0.906 +offset = -0.163985 + +second: +f = 2.95511 +amp = .0010337 +offset = -0.0084599 + +third = +f= 2.8966 +amp = 0.00105 +offset = -0.0431 + +fourth: +f = 2.95511 +amp = .001337 +offset = -0.0084599 + +---------------- +potential first frequency: 386, 692 + +Corresponding mysql query: +feat_id, feat_name in feat_lookup where filter_id=8 ++---------+-------------------------------------------+ +| feat_id | feat_name | ++---------+-------------------------------------------+ +| 1056 | amplitude | +| 282 | beyond1std | +| 435 | chi2 | +| 1218 | chi2_per_deg | +| 1074 | closest_in_light | +| 588 | closest_in_light_absolute_bmag | +| 1425 | closest_in_light_angle_from_major_axis | +| 1740 | closest_in_light_angular_offset_in_arcmin | +| 120 | closest_in_light_dm | +| 57 | closest_in_light_physical_offset_in_kpc | +| 363 | closest_in_light_ttype | +| 183 | dc | +| 777 | distance_in_arcmin_to_nearest_galaxy | +| 1578 | distance_in_kpc_to_nearest_galaxy | +| 714 | dist_from_u | +| 372 | ecpb | +| 1506 | ecpl | +| 1641 | first_lomb | +| 147 | fourier | +| 606 | freq1 | +| 1020 | freq1_harmonics_amplitude_0 | +| 273 | freq1_harmonics_amplitude_1 | +| 480 | freq1_harmonics_amplitude_2 | +| 651 | freq1_harmonics_amplitude_3 | +| 426 | freq1_harmonics_amplitude_error_0 | +| 210 | freq1_harmonics_amplitude_error_1 | +| 1083 | freq1_harmonics_amplitude_error_2 | +| 1200 | freq1_harmonics_amplitude_error_3 | +| 1713 | freq1_harmonics_freq_0 | +| 417 | freq1_harmonics_freq_1 | +| 1533 | freq1_harmonics_freq_2 | +| 1434 | freq1_harmonics_freq_3 | +| 660 | freq1_harmonics_moments_0 | +| 1182 | freq1_harmonics_moments_1 | +| 903 | freq1_harmonics_moments_2 | +| 1335 | freq1_harmonics_moments_3 | +| 219 | freq1_harmonics_moments_err_0 | +| 1092 | freq1_harmonics_moments_err_1 | +| 1362 | freq1_harmonics_moments_err_2 | +| 1551 | freq1_harmonics_moments_err_3 | +| 525 | freq1_harmonics_nharm | +| 246 | freq1_harmonics_peak2peak_flux | +| 1272 | freq1_harmonics_peak2peak_flux_error | +| 1254 | freq1_harmonics_rel_phase_0 | +| 804 | freq1_harmonics_rel_phase_1 | +| 552 | freq1_harmonics_rel_phase_2 | +| 615 | freq1_harmonics_rel_phase_3 | +| 381 | freq1_harmonics_rel_phase_error_0 | +| 696 | freq1_harmonics_rel_phase_error_1 | +| 732 | freq1_harmonics_rel_phase_error_2 | +| 1623 | freq1_harmonics_rel_phase_error_3 | +| 327 | freq1_harmonics_signif | +| 1686 | freq1_signif | +| 894 | freq2 | +| 633 | freq2_harmonics_amplitude_0 | +| 1524 | freq2_harmonics_amplitude_1 | +| 912 | freq2_harmonics_amplitude_2 | +| 237 | freq2_harmonics_amplitude_3 | +| 1704 | freq2_harmonics_amplitude_error_0 | +| 174 | freq2_harmonics_amplitude_error_1 | +| 723 | freq2_harmonics_amplitude_error_2 | +| 1299 | freq2_harmonics_amplitude_error_3 | +| 1515 | freq2_harmonics_freq_0 | +| 1614 | freq2_harmonics_freq_1 | +| 795 | freq2_harmonics_freq_2 | +| 48 | freq2_harmonics_freq_3 | +| 1038 | freq2_harmonics_moments_0 | +| 1461 | freq2_harmonics_moments_1 | +| 12 | freq2_harmonics_moments_2 | +| 786 | freq2_harmonics_moments_3 | +| 165 | freq2_harmonics_moments_err_0 | +| 858 | freq2_harmonics_moments_err_1 | +| 1119 | freq2_harmonics_moments_err_2 | +| 21 | freq2_harmonics_moments_err_3 | +| 1659 | freq2_harmonics_nharm | +| 759 | freq2_harmonics_peak2peak_flux | +| 1245 | freq2_harmonics_peak2peak_flux_error | +| 1146 | freq2_harmonics_rel_phase_0 | +| 1290 | freq2_harmonics_rel_phase_1 | +| 93 | freq2_harmonics_rel_phase_2 | +| 111 | freq2_harmonics_rel_phase_3 | +| 1668 | freq2_harmonics_rel_phase_error_0 | +| 1317 | freq2_harmonics_rel_phase_error_1 | +| 1650 | freq2_harmonics_rel_phase_error_2 | +| 1029 | freq2_harmonics_rel_phase_error_3 | +| 822 | freq2_harmonics_signif | +| 39 | freq2_signif | +| 1416 | freq3 | +| 939 | freq3_harmonics_amplitude_0 | +| 390 | freq3_harmonics_amplitude_1 | +| 336 | freq3_harmonics_amplitude_2 | +| 1695 | freq3_harmonics_amplitude_3 | +| 444 | freq3_harmonics_amplitude_error_0 | +| 399 | freq3_harmonics_amplitude_error_1 | +| 102 | freq3_harmonics_amplitude_error_2 | +| 813 | freq3_harmonics_amplitude_error_3 | +| 84 | freq3_harmonics_freq_0 | +| 1587 | freq3_harmonics_freq_1 | +| 1209 | freq3_harmonics_freq_2 | +| 1002 | freq3_harmonics_freq_3 | +| 318 | freq3_harmonics_moments_0 | +| 687 | freq3_harmonics_moments_1 | +| 291 | freq3_harmonics_moments_2 | +| 975 | freq3_harmonics_moments_3 | +| 75 | freq3_harmonics_moments_err_0 | +| 561 | freq3_harmonics_moments_err_1 | +| 1155 | freq3_harmonics_moments_err_2 | +| 750 | freq3_harmonics_moments_err_3 | +| 1371 | freq3_harmonics_nharm | +| 264 | freq3_harmonics_peak2peak_flux | +| 1497 | freq3_harmonics_peak2peak_flux_error | +| 1128 | freq3_harmonics_rel_phase_0 | +| 768 | freq3_harmonics_rel_phase_1 | +| 570 | freq3_harmonics_rel_phase_2 | +| 1227 | freq3_harmonics_rel_phase_3 | +| 1389 | freq3_harmonics_rel_phase_error_0 | +| 948 | freq3_harmonics_rel_phase_error_1 | +| 849 | freq3_harmonics_rel_phase_error_2 | +| 624 | freq3_harmonics_rel_phase_error_3 | +| 597 | freq3_harmonics_signif | +| 1452 | freq3_signif | +| 1677 | freq_searched_max | +| 1101 | freq_searched_min | +| 1560 | galb | +| 1137 | gall | +| 1470 | interng | +| 885 | intersdss | +| 876 | linear | +| 1326 | lomb | +| 300 | lomb_scargle | +| 471 | max | +| 516 | max_slope | +| 579 | median | +| 993 | median_buffer_range_percentage | +| 1344 | min | +| 642 | n_points | +| 543 | pair_slope_trend | +| 3 | percent_amplitude | +| 498 | position_intermediate | +| 930 | power | +| 1479 | power_spectrum | +| 1542 | ratio21 | +| 129 | ratio31 | +| 138 | ratio32 | +| 1731 | sdss_best_dm | +| 669 | sdss_best_offset_in_kpc | +| 309 | sdss_best_offset_in_petro_g | +| 354 | sdss_best_z | +| 489 | sdss_best_zerr | +| 1353 | sdss_chicago_class | +| 1596 | sdss_dered_g | +| 741 | sdss_dered_i | +| 984 | sdss_dered_r | +| 1632 | sdss_dered_u | +| 1605 | sdss_dered_z | +| 1488 | sdss_dist_arcmin | +| 1164 | sdss_first_flux_in_mjy | +| 534 | sdss_first_offset_in_arcsec | +| 1236 | sdss_in_footprint | +| 507 | sdss_nearest_obj_type | +| 867 | sdss_petro_radius_g | +| 831 | sdss_petro_radius_g_err | +| 1173 | sdss_photo_rest_abs_g | +| 1722 | sdss_photo_rest_abs_i | +| 966 | sdss_photo_rest_abs_r | +| 1398 | sdss_photo_rest_abs_u | +| 1065 | sdss_photo_rest_abs_z | +| 957 | sdss_photo_rest_gr | +| 1443 | sdss_photo_rest_iz | +| 66 | sdss_photo_rest_ri | +| 255 | sdss_photo_rest_ug | +| 1380 | sdss_photo_z_pztype | +| 921 | sdss_rosat_flux_in_mJy | +| 201 | sdss_rosat_log_xray_luminosity | +| 705 | sdss_rosat_offset_in_arcsec | +| 1407 | sdss_rosat_offset_in_sigma | +| 345 | sdss_spec_confidence | +| 1110 | second_lomb | +| 462 | sine_fit | +| 678 | sine_leastsq | +| 1191 | sine_lomb | +| 192 | skew | +| 1308 | std | +| 1569 | stdvs_from_u | +| 408 | tmpned | +| 1011 | weighted_average | +| 453 | wei_av_uncertainty | +| 156 | ws_variability_bv | +| 1047 | ws_variability_gr | +| 1281 | ws_variability_iz | +| 1263 | ws_variability_ri | +| 30 | ws_variability_ru | +| 228 | ws_variability_self | +| 840 | ws_variability_ug | ++---------+-------------------------------------------+ diff --git a/mltsp/TCP/Algorithms/fitcurve/test_lomb_scargle_refine.py b/mltsp/TCP/Algorithms/fitcurve/test_lomb_scargle_refine.py new file mode 100644 index 00000000..603e978b --- /dev/null +++ b/mltsp/TCP/Algorithms/fitcurve/test_lomb_scargle_refine.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python +""" +v 0.1 2011-04-21 Code from Nat + +######### +Heres an example invocation to test: + +from lomb_scargle_refine import lomb as lombr + +sys_err=0.05 +(x,y,dy)=load_some_data +dy0 = sqrt(dy**2+sys_err**2) + +Xmax = x.max() +f0 = 1./Xmax; df = 0.1/Xmax; fe = 10. +numf = int((fe-f0)/df) +freqin = f0 + df*arange(numf,dtype='float64') + +psd,res = lombr(x,y,dy0,f0,df,numf) +plot (freqin,psd) + +### +The default is to fit 8 harmonics to every initial lomb-scargle peak +above 6, with 0th order detrending (fitting mean only). Dan, if you +think I should, I can put the logic to define the frequency grid in +the main code and not in a wrapper like this. + +res is a dictionary containing the stuff previously reported by +pre_whiten: amplitudes, phases, the folded model, etc. + +To iterate 3 times (in not the most elegant fashion): +psd,res = lombr(x,y,dy0,f0,df,numf) +psd1,res1 = lombr(x,y-res['model'],dy0,f0,df,numf) +psd2,res2 = lombr(x,y-res['model']-res1['model'],dy0,f0,df,numf) + +In the way we did this for the Deboscher paper, the first invocation +would have detrend_order=1 set, and we would use nharm=4 throughout. +I suspect we might get more mileage out of leaving nharm=8, but only +using stats on the first 4 as features. + +""" +from __future__ import print_function + + +import sys, os +import random +from numpy import * + + +class Database_Utils: + """ Establish database connections, contains methods related to database tables. + """ + def __init__(self, pars={}): + self.pars = pars + #self.connect_to_db() + + + def connect_to_db(self): + import MySQLdb + self.tcp_db = MySQLdb.connect(host=pars['tcp_hostname'], \ + user=pars['tcp_username'], \ + db=pars['tcp_database'],\ + port=pars['tcp_port']) + self.tcp_cursor = self.tcp_db.cursor() + + self.tutor_db = MySQLdb.connect(host=pars['tutor_hostname'], \ + user=pars['tutor_username'], \ + db=pars['tutor_database'], \ + passwd=pars['tutor_password'], \ + port=pars['tutor_port']) + self.tutor_cursor = self.tutor_db.cursor() + + + def get_timeseries_for_source(self, source_id=None): + """ Get timeseries data from tutor when given a source_id + + """ + select_str = """SELECT sources.source_id, observation_id, obsdata_time, obsdata_val, obsdata_err + FROM sources + JOIN observations USING (source_id) + JOIN obs_data USING (observation_id) + WHERE source_id=%d + """ % (source_id) + self.tutor_cursor.execute(select_str) + results = self.tutor_cursor.fetchall() + if len(results) == 0: + raise "Error" + + t_list = [] + m_list = [] + m_err_list = [] + used_src_id = results[0][0] + used_obs_id = results[0][1] + for (src_id, obs_id, t, m, err) in results: + if ((src_id == used_src_id) and + (obs_id == used_obs_id)): + t_list.append(t) + m_list.append(m) + m_err_list.append(err) + + return {'t':array(t_list), + 'm':array(m_list), + 'm_err':array(m_err_list)} + + + +if __name__ == '__main__': + + ### NOTE: most of the RDB parameters were dupliclated from ingest_toolspy::pars{} + pars = { \ + 'tutor_hostname':'192.168.1.103', #'lyra.berkeley.edu', + 'tutor_username':'dstarr', #'tutor', # guest + 'tutor_password':'ilove2mass', #'iamaguest', + 'tutor_database':'tutor', + 'tutor_port':3306, + 'tcp_hostname':'192.168.1.25', + 'tcp_username':'pteluser', + 'tcp_port': 3306, + 'tcp_database':'source_test_db', + 'high_conf_srcids':range(22), #[241682, 238040, 221547, 225633, 227203, 250761, 219325, 252782, 245584, 236706, 216173, 225396, 233750, 232693, 263653, 216768, 225919, 264626, 230520, 229680, 231266, 221448, 226872, 261712], # Used for session=0, iter=1 (1st) + } + + + dbutil = Database_Utils(pars=pars) + + #import pdb; pdb.set_trace() + #print + + + ######### + #Heres an example invocation to test: + + from lomb_scargle_refine import lomb as lombr + + sys_err=0.05 + #(x,y,dy)=load_some_data + + fpath = '/home/training/scratch/ls_src.dat' + if os.path.exists(fpath): + x = [] + y = [] + dy = [] + fp = open(fpath) + lines = fp.readlines() + for line in lines: + e = line.split() + x.append(float(e[0])) + y.append(float(e[1])) + dy.append(float(e[2])) + fp.close() + x = array(x) + y = array(y) + dy = array(dy) + + + else: + data = dbutil.get_timeseries_for_source(source_id=241682) + x = data['t'] + y = data['m'] + dy = data['m_err'] + + fp = open(fpath, 'w') + for i in range(len(x)): + fp.write("%lf %lf %lf\n" % (x[i], y[i], dy[i])) + fp.close() + + + dy0 = sqrt(dy**2+sys_err**2) + + Xmax = x.max() + f0 = 1./Xmax; df = 0.1/Xmax; fe = 10. + numf = int((fe-f0)/df) + freqin = f0 + df*arange(numf,dtype='float64') + + #psd,res = lombr(x,y,dy0,f0,df,numf) + psd,res = lombr(x,y,dy0,f0,df,numf, detrend_order=1) + import pdb; pdb.set_trace() + print() + psd1,res1 = lombr(x,y-res['model'],dy0,f0,df,numf, detrend_order=0) + plot (freqin,psd) + + ### + """ + The default is to fit 8 harmonics to every initial lomb-scargle peak + above 6, with 0th order detrending (fitting mean only). Dan, if you + think I should, I can put the logic to define the frequency grid in + the main code and not in a wrapper like this. + + res is a dictionary containing the stuff previously reported by + pre_whiten: amplitudes, phases, the folded model, etc. + + To iterate 3 times (in not the most elegant fashion): + psd,res = lombr(x,y,dy0,f0,df,numf) + psd1,res1 = lombr(x,y-res['model'],dy0,f0,df,numf) + psd2,res2 = lombr(x,y-res['model']-res1['model'],dy0,f0,df,numf) + + In the way we did this for the Deboscher paper, the first invocation + would have detrend_order=1 set, and we would use nharm=4 throughout. + I suspect we might get more mileage out of leaving nharm=8, but only + using stats on the first 4 as features. + """ diff --git a/mltsp/TCP/Algorithms/fitcurve/weird_first_generation_phase.png b/mltsp/TCP/Algorithms/fitcurve/weird_first_generation_phase.png new file mode 100755 index 0000000000000000000000000000000000000000..691394ef9800573395851c7c21621f0610640fb2 GIT binary patch literal 34343 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 NMPBV#`q9%@{};=MOho_y literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Algorithms/fiteb.py b/mltsp/TCP/Algorithms/fiteb.py new file mode 100644 index 00000000..85eaa499 --- /dev/null +++ b/mltsp/TCP/Algorithms/fiteb.py @@ -0,0 +1,734 @@ +#!/usr/bin/env python + +""" +EB fitting code wrapping around JKTEBOP (http://www.astro.keele.ac.uk/~jkt/codes/jktebop.html) + +v1.0 written by J. S. Bloom +v1.1 updated by dstarr + +From the command line: + + a) this will fit dotastro source 237224 on a period of 2.55535306 and plot the results + ./fiteb.py 237224 2.55535306 -p + + b) this will fit dotastro source 237224 on a period of 2.55535306 and plot the results using + alternative starting point 0 + ./fiteb.py 237224 2.55535306 -p -a --altnum=0 + + c) this will fit dotastro source 237224 on a period of 2.55535306 and plot the results using + alternative starting point 1 + ./fiteb.py 237224 2.55535306 -p -a --altnum=1 + + d) will fit dotastro source 237224 on a period of 2.55535306 and plot the results using + all three starting points. Finding the best fit result and the best harmonic of the period + ./fiteb.py 237224 2.55535306 -p -s -a + *** this is the preferred usage to make sure you have a wide sweep over parameter space + +From the command line, the meat of the code can be run in three different ways: + + a) Dotastro source, where the XML is grabbed off of the web + e = fiteb.EB(dotastro_id=217688,period=2.76901598*2,use_xml=True) + e.run() + e.plot() + + # you can grab the time-series recarray + newrecarray = numpy.rec.fromarrays([e.ts['V:table542421']['t'],e.ts['V:table542421']['m'],\ + e.ts['V:table542421']['m_err']],names='t,m,m_err',formats='f8,f8,f8') + + b) From a timeseries numpy recarray + b = fiteb.EB(dotastro_id=217688,period=2.76901598*2,use_xml=False,rec_array=newrecarray) + # here the dotastro id isn't really used other than as a placeholder for the bookkeeping + b.run() + b.plot() + + options to run(): + fittype=3,sigma=3.0 + + fittype = same types as on the JKTEBOP website. 3 is the quick and dirty one. 4 does sigma clipping + sigma = 3.0 (used for fittype 4) + + c) You can also try to do model selection when you're not confident which period is correct: + + p = fiteb.period_select(225431,11.9680949,try_alt=True) + # this will search over period 1/2, 1, and 2x the input period, returning the period with the best chisq + # this should also work with a recarray as in case b) above. try_alt will use three different starting points + + + +""" +from __future__ import print_function + +import urllib2, urllib +import os, sys +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract/Code')) +import db_importer +import matplotlib + + +from matplotlib import pylab as plt +from matplotlib import mlab +import numpy +import argparse + +__author__ = "JS Bloom (UC Berkeley)" +__version__ = "12 May 2011" + +rez_dict = {"Reduced chi-squared from errorbars:": "chisq", "Number of degrees of freedom:": "dof",\ + "Oblateness of the secondary star:": "ob2", "Oblateness of the primary star:": "ob1", \ + "Geometric reflection coeff (star B):": "reflect2", "Geometric reflection coeff (star A):": "reflect1",\ + "Omega (degrees):": "omega_deg", "Eccentricity:": "e", "Secondary contrib'n to system light:": "l2", \ + "Primary contribut'n to system light:": "l1", "Fractional secondary radius:": "r2", "Fractional primary radius:": "r1", + "Phase of primary eclipse:": "primary_eclipse_phase", "Orbit inclination": "i", "Mass ratio (q)": "q", + "Ephemeris timebase": "t0", "Orbital period (P)": "period", "Surf. bright. ratio": "l1/l2"} + + +class EB: + + dotastro_url = "http://dotastro.org/lightcurves/vosource.php?Source_ID=" + xml_dir = "XML/" + phot_dir = "Phot/" + rez_dir = "Results/" + + # newrecarray = numpy.rec.fromarrays([e.ts['V:table542421']['t'],e.ts['V:table542421']['m'],e.ts['V:table542421']['m_err']],names='t,m,m_err',formats='f8,f8,f8') + + #def __init__(self,dotastro_id=216313,period=0.97154408): + + def __init__(self,dotastro_id=217688,period=2.76901598*2,use_xml=True,rec_array=None,verbose=True): + """ + rec_array should have t, m, m_err at the column names + """ + self.dotastro_id = dotastro_id + self.gotxml = False + self.outname = None + self.photkey = None + self.period = period + self.use_xml = use_xml + self.rec_array = rec_array + self.outrez = {'valid': False, 'chisq':None} + self.verbose= verbose + + def run(self,fittype=3,sigma=3.0,try_alt=False,altnum=1): + + inf, outf, outpar, outfit = self._prep_infiles(fittype=fittype,sigma=sigma,try_alt=try_alt,altnum=altnum) + if inf is None or outf is None: + print("Sorry. Refusing to go further here.") + return + for x in [outf, outpar, outfit]: + if os.path.exists(x): + os.remove(x) + + os.system("./timeout 240 ./jktebop " + inf) + + # replace the output + f = open(outf,"r") + ff = f.readlines() + f.close() + if len(ff) == 0: + print("!!! len(ff) == 0", end=' ') + self.outrez = {'valid': False, 'okfit': False, 'fittype':fittype,'chisq':None, "parameter_file": "", "outfile": ""} + return + ff[0] = ff[0].replace("#"," ") + f = open(outf,"w") + f.writelines(ff) + f.close() + self.outf = outf + + # gobble up the output + self.outrez = self._gobbleout(outpar,fittype=fittype) + if self.verbose: + print("Summary of Results (see %s for more info):" % self.outrez.get('parameter_file')) + print("*"*40) + print("Chisq/dof:", self.outrez.get('chisq')) + print("Is this an Ok fit (chisq aside)?", self.outrez.get("okfit")) + print("period:", self.outrez.get('period'), "day") + print('eccentricity', self.outrez.get('e')) + try: + print("(r1 + r2)/a:", self.outrez.get('r1') + self.outrez.get('r2')) + print("r1/r2:", self.outrez.get('r1')/self.outrez.get('r2')) + except: + pass + + print('r1 overflow:', self.outrez.get('r1overflow')) + print('r2 overflow:', self.outrez.get('r2overflow')) + print('classification:', self.outrez.get('class')) + print("inclination:", self.outrez.get('i'), "+-", self.outrez.get('i_err'), " deg") + print("mass ratio (q):", self.outrez.get('q'), "+-", self.outrez.get('q_err')) + print("lum ratio (l1/l2):", self.outrez.get('l1/l2'), "+-", self.outrez.get('l1/l2_err')) + print("*"*40) + print("") + + def _gobbleout(self,outfile,fittype=None): + rez = {'valid': False, 'okfit': False, 'fittype':fittype,'chisq':None, "parameter_file": outfile, "outfile": self.outf} + if not os.path.exists(outfile): + return rez + + f = open(outfile,"r") + ff = f.readlines() + f.close() + ff.reverse() # look backwards + failed = False + kys = rez_dict.keys() + for l in ff: + for k in kys: + if l.find(k) != -1: + tmp = l.split(k)[-1] + if tmp.find("+/-") != -1: + ## this has an error bar + tmp1 = tmp.split("+/-") + try: + rez.update({rez_dict[k]: float(tmp1[0])}) + except: + failed = True + try: + rez.update({rez_dict[k]+"_err": float(tmp1[1])}) + except: + rez.update({rez_dict[k]+"_err": None}) + + else: + tmp = tmp.strip() + tmp1 = tmp.split(" ") + try: + rez.update({rez_dict[k]: float(tmp1[0])}) + except: + failed = True + kys.remove(k) + break + rez.update({"valid": True}) + try: + if rez['l1/l2'] > -0.05 and rez['reflect1'] > 0.0: + if not failed: + rez['okfit'] = True + except: + rez['okfit'] = False + + if (('r2' not in rez) or ('r1' not in rez)) and (rez['okfit'] == False): + return rez + if rez['r2'] > 0 and rez['r1'] > 0: + + q = (rez['r2']/rez['r1'])**1.534 + vv1 = (0.49*q**(-2./3))/(0.6*q**(-2./3) + numpy.log(1 + q**(-1./3))) + vv2 = (0.49*q**(2./3))/(0.6*q**(2./3) + numpy.log(1 + q**(1./3))) + print(q, rez['r1'], vv1, rez['r2'], vv2) + if q <= 1: + r1over = rez['r1'] > vv1*0.95 + r2over = rez['r2'] > vv2*0.95 + else: + ## fit gave the wrong r1 and r2 (r2 should be smaller) + r2over = rez['r2'] > vv1*0.95 + r1over = rez['r1'] > vv2*0.95 + + rez.update({'r1overflow': r1over, 'r2overflow': r2over}) + if not r1over and not r2over: + cl = 'detached' + elif r1over and r2over: + cl = 'contact' + else: + cl = 'semi-detached' + rez.update({'class': cl}) + else: + rez.update({'class': 'unknown'}) + + return rez + + def plot(self,outf = None,dosave=True,savedir="Plot/",show=True): + if outf is None: + outf = self.outf + #print outf + oo = mlab.csv2rec(outf,delimiter=" ") + #print oo + plt.errorbar(oo['time'] % self.period, oo['magnitude'], oo['error'], fmt="b.") + plt.plot(oo['time'] % self.period, oo['model'],"ro") + plt.title("#%i P=%f d (chisq/dof = %f) r1+r2=%f" % (self.dotastro_id,self.period,self.outrez['chisq'],\ + self.outrez.get('r1') + self.outrez.get('r2'))) + ylim = plt.ylim() + #print ylim + if ylim[0] < ylim[1]: + plt.ylim(ylim[1],ylim[0]) + plt.draw() + if show: + plt.show() + if dosave: + if not os.path.isdir(savedir): + os.mkdir(savedir) + plt.savefig("%splot%i.png" % (savedir,self.dotastro_id))#,self.period)) + print("Saved", "%splot%i.png" % (savedir,self.dotastro_id))#,self.period) + plt.clf() + + def _prep_infiles(self,dotastro_id=None,fittype=3,sigma=3.0,ntries=20,try_alt=False,altnum=1): + if dotastro_id is None: + dotastro_id = self.dotastro_id + + if self.use_xml: + if dotastro_id is None or not isinstance(dotastro_id,int): + return (None,None,None,None) + + print("preppin the infile") + photname, hjd = self._make_intable(dotastro_id=dotastro_id) + if photname is None: + return (None,None,None,None) + + alt = "" if not try_alt else ".alt" + str(altnum) + template_file = "Templates/" + "eb." + str(fittype) + alt + ".template" + print("using template", template_file) + if not os.path.exists(template_file): + print("no template file for that type") + return (None,None,None,None) + + # #import pdb; pdb.set_trace() + # #print + a = open(template_file,"r").readlines() + tmp = self.rez_dir + "dotastro" + str(dotastro_id) + if fittype == 4: + b = "".join(a) % (self.period,hjd,sigma,'"' + photname + '"','"' + tmp + '.par"',\ + '"' + tmp + '.out"', '"' + tmp + '.fit"') + elif fittype == 3: + b = "".join(a) % (self.period,hjd,'"' + photname + '"','"' + tmp + '.par"',\ + '"' + tmp + '.out"', '"' + tmp + '.fit"') + elif fittype == 5: + b = "".join(a) % (self.period,hjd,ntries,'"' + photname + '"','"' + tmp + '.par"',\ + '"' + tmp + '.out"', '"' + tmp + '.fit"') + elif fittype == 6: + b = "".join(a) % (self.period,hjd,'"' + photname + '"','"' + tmp + '.par"',\ + '"' + tmp + '.out"', '"' + tmp + '.fit"') + else: + return (None,None,None,None) + + inname = "dotastro" + str(dotastro_id) + ".in" + f = open(inname,"w") + f.writelines(b) + f.close() + print("wrote %s" % (inname)) + return (inname, tmp + ".out", tmp + ".par", tmp + ".fit") + + + def _make_intable(self,dotastro_id=None,verbose=True,percentile=0.95): + if dotastro_id is None: + dotastro_id = self.dotastro_id + if self.use_xml: + if dotastro_id is None or not isinstance(dotastro_id,int): + return None, None + self._get_xml(dotastro_id,verbose=verbose) + + self._get_timeseries() + + if not os.path.isdir(self.phot_dir): + os.mkdir(self.phot_dir) + + self.photname = self.phot_dir + "dotastro" + str(dotastro_id) + ".dat" + f=open(self.photname,"w") + merr = numpy.array( self.ts[self.photkey]['m_err']) + + merr[numpy.where(merr == 0.0)] += 0.005 + + self.ts[self.photkey]['m_err'] = list(merr) + + try: + rez = zip(self.ts[self.photkey]['t'],self.ts[self.photkey]['m'],self.ts[self.photkey]['m_err']) + except: + print("problem with the timeseries of that source. Bailing") + return (None, None) + + tmp = [f.write("%f %f %f\n" % (x[0], x[1], x[2])) for x in rez] + f.close() + + rez = sorted(rez,key=lambda x: x[1]) ## sort by magnitude + + # return the time near the minimum flux + return (self.photname, rez[int(percentile*len(rez))][0]) + + + def _get_timeseries(self): + if self.use_xml: + if not self.gotxml or self.outname is None: + print("dont have the xml to build the timeseries") + return + try: + self.b = db_importer.Source(xml_handle=self.outname) + except: + print("timeseries import failed. Check your XML file. Maybe rm %s" % self.outname) + return + + kk = self.b.ts.keys() + ind = 0 + if len(kk) > 1: + print("note: lots of phototometry keys to choose from...using the first FIXME") + ind = -1 + for i,k in enumerate(kk): + if k[0].lower() == 'r': + ind = i + break + if ind == -1: + ind = 0 + + self.photkey = kk[ind] + print("phot key = ", kk[ind]) ## FIXME...maybe want to choose V band first + self.ts = self.b.ts + else: + if self.rec_array is None: + print("must give me a recarray!") + return + self.photkey = "V" + self.ts = {self.photkey: self.rec_array} + + def _get_xml(self,dotastro_id=None,verbose=True): + if dotastro_id is None: + dotastro_id = self.dotastro_id + if dotastro_id is None or not isinstance(dotastro_id,int): + self.gotxml = False + print("no dotastro") + return + + if not os.path.isdir(self.xml_dir): + os.mkdir(self.xml_dir) + self.outname = self.xml_dir + "dotastro" + str(dotastro_id) + ".xml" + if not os.path.exists(self.outname): + print(self.dotastro_url + str(dotastro_id)) + urllib.urlretrieve(self.dotastro_url + str(dotastro_id), self.outname) + + #f = open(self.outname,"w") + #r = urllib2.urlopen(self.dotastro_url + str(dotastro_id)) + #f.writelines(r.readlines()) + #f.close() + else: + if verbose: + print("already have file %s locally." % (self.outname)) + self.gotxml = True + + +def period_select(idd=243641,per=2.20770441,use_xml=True,rec_array=None,plot=True,trials=[0.5,1,2],\ + try_alt=False,all_models=True,dosave=False,show=True, fittype=3): + + if try_alt and all_models: + #alts = [-1,0,1] # OLD + #alts = range(-1, 1 + 126) + alts = range(-1, 1 + 5) + else: + alts = [-1] + tt = [] + altuse = [] + result_keys = [] + results = {'chisq':[], + 'class':[], + 'dof':[], + 'e':[], + 'i':[], + 'i_err':[], + 'l1':[], + 'l1/l2':[], + 'l1/l2_err':[], + 'l2':[], + 'ob1':[], + 'ob2':[], + 'okfit':[], + 'omega_deg':[], + 'period':[], + 'primary_eclipse_phase':[], + 'q':[], + 'q_err':[], + 'r1':[], + 'r2':[], + 'r1overflow':[], + 'r2overflow':[], + 'reflect1':[], + 'reflect2':[], + 't0':[], + 't0_err':[], + 'valid':[], + } + + + for i,t in enumerate(trials): + for alt in alts: + a = EB(idd,per*t,use_xml=use_xml,rec_array=rec_array) + print("trying period = %f" % (per*t)) + #if alt < 0: + # a.run(fittype=3,try_alt=False,altnum=alt) + #else: + # a.run(fittype=3,try_alt=True,altnum=alt) + + ###164593: using fittype=4 returns the same detached class and only a slightly tighter chi2: + if alt < 0: + a.run(fittype=fittype,try_alt=False,altnum=alt) + else: + a.run(fittype=fittype,try_alt=True,altnum=alt) + for result_k, result_list in results.items(): + #result_list.append(a.outrez.get(result_k, 999999)) # 999999 is a KLUDGE + result_list.append(a.outrez.get(result_k, numpy.nan)) # 999999 is a KLUDGE + ### doesnt work: + #if a.outrez.has_key(result_k): + # result_list.append(a.outrez[result_k]) + tt.append(t) + altuse.append(alt) + #print '>>>', i, t, alt + + for k in results.keys(): + results[k] = numpy.array(results[k]) + + trials = numpy.array(tt) + altuse = numpy.array(altuse) + + #print ok, trials, chisq, altuse + + oks = numpy.where(results['okfit'] == True)[0] + + #print ok, trials, chisq, altuse + + ok_results = {} + for k in results.keys(): + ok_results[k] = results[k][oks] + + + if len(oks) == 0: + print("warning...no EB models seem like ok fits") + bestt = trials[numpy.where(chisq == min(chisq))] + bestalt = altuse[numpy.where(chisq == min(chisq))] + + rez = {'okfit': False, 'best_period': bestt[0]*per, "best_chisq": min(chisq), "best_alt": bestalt[0]} + else: + trials = trials[oks] + chisq = ok_results['chisq'] + altuse = altuse[oks] + bestt = trials[numpy.where(chisq == min(chisq))] + bestalt = altuse[numpy.where(chisq == min(chisq))] + rez = {'okfit': True, 'best_period': bestt[0]*per, "best_chisq": min(chisq), "best_alt": bestalt[0]} + print(rez) + + from scipy.stats import scoreatpercentile + + results_for_class = {} + for class_name in ['detached', 'semi-detached', 'contact']: + results_for_class[class_name] = {} + for k in ok_results.keys(): + results_for_class[class_name][k] = ok_results[k][numpy.where(ok_results['class'] == class_name)] + results_class_perc = {} + chosen_chisq_class_tups = [] + + attribs_for_percentiles = ['chisq', 'i_err', 'q_err', 'l1/l2_err', 'l1/l2', 'q', 'r1', 'r2', 'reflect1', 'reflect2', 'primary_eclipse_phase', 'period', 'omega_deg', 'l1', 'l2', 'e'] + rez['nmodels'] = {} + #npass_vs_attrib_percentile = {} + vals_for_attribute = {} + for cur_attrib in attribs_for_percentiles: + rez['nmodels'][cur_attrib] = {} + chisq_percentiles = {} + #npass_vs_attrib_percentile[cur_attrib] = {} + vals_for_attribute[cur_attrib] = [] + #for perc in [5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90]: + # npass_vs_attrib_percentile[cur_attrib][perc] = 0 + for class_name in results_for_class.keys(): + subarr = results_for_class[class_name][cur_attrib][numpy.where(results_for_class[class_name][cur_attrib] > -numpy.inf)] # excludes: None, Nan + rez['nmodels'][cur_attrib][class_name] = len(subarr) + vals_for_attribute[cur_attrib].extend(list(subarr)) + if len(results_for_class[class_name][cur_attrib]) <= 1: + continue + chisq_percentiles[class_name] = {} + #subarr = results_for_class[class_name][cur_attrib][numpy.where(results_for_class[class_name][cur_attrib] > -numpy.inf)] # excludes: None, Nan + if len(subarr) > 1: + for perc in [5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90]: + #subarr = results_for_class[class_name][cur_attrib][numpy.where(results_for_class[class_name][cur_attrib] > -numpy.inf)] # excludes: None, Nan + #if len(subarr) <= 1: + # continue + n_at_percentile = len(subarr[numpy.where(subarr <= scoreatpercentile(subarr, perc))]) + chisq_percentiles[class_name][perc] = {'val_at_perc':scoreatpercentile(subarr, perc), + 'n_pass':n_at_percentile/float(len(subarr))} + #npass_vs_attrib_percentile[cur_attrib][perc] += n_at_percentile + if cur_attrib == 'chisq': + ### KLUGEY + results_class_perc[class_name] = {} + chisq_percentile_cut = scoreatpercentile(results_for_class[class_name]['chisq'], 10) + for k in results_for_class[class_name].keys(): + results_class_perc[class_name][k] = results_for_class[class_name][k][numpy.where(results_for_class[class_name]['chisq'] <= chisq_percentile_cut)] + #import pdb; pdb.set_trace() + #print + + source_chisq_at_cut = max(results_for_class[class_name]['chisq'][numpy.where(results_for_class[class_name]['chisq'] <= chisq_percentile_cut)]) + chosen_chisq_class_tups.append((chisq_percentile_cut, + class_name, + trials[numpy.where(chisq == source_chisq_at_cut)], + altuse[numpy.where(chisq == source_chisq_at_cut)], + len(results_class_perc[class_name]['chisq']))) + + #import copy + percentiles_name = "%s_percentiles" % (cur_attrib) + rez[percentiles_name] = chisq_percentiles# copy.deepcopy(chisq_percentiles) # does this help??? (no: the bug was elsewhere) + #import pdb; pdb.set_trace() + #print + rez['ratiopass_for_percentile'] = {} + rez['vals_for_percentile'] = {} + for cur_attrib in attribs_for_percentiles: + total_models_for_attrib = sum(rez['nmodels'][cur_attrib].values()) + rez['ratiopass_for_percentile'][cur_attrib] = {} + rez['vals_for_percentile'][cur_attrib] = {} + for perc in [5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90]: + #rez['ratiopass_for_percentile'][cur_attrib][perc] = npass_vs_attrib_percentile[cur_attrib][perc] / float(total_models_for_attrib) + val_array = numpy.array(vals_for_attribute[cur_attrib]) + rez['vals_for_percentile'][cur_attrib][perc] = scoreatpercentile(val_array, perc) + n_at_percentile = len(val_array[numpy.where(val_array <= rez['vals_for_percentile'][cur_attrib][perc])]) + rez['ratiopass_for_percentile'][cur_attrib][perc] = n_at_percentile / float(total_models_for_attrib) + #import pprint + #import pdb; pdb.set_trace() + #print + + ### NOTE: could probably stick this above so not all attributes are iterated over. + if len(chosen_chisq_class_tups) == 0: + return {}, {} #{}, {'valid': False, 'okfit': False, 'fittype':fittype,'chisq':None, "parameter_file": "", "outfile": ""} + + chosen_chisq_class_tups.sort() + #print "### Sorted chi2 5% percentiles (chisq, class, bestt, bestalt, N_cut): " + #import pprint + #pprint.pprint(chosen_chisq_class_tups) + #for tup in chosen_chisq_class_tups: + # print tup[0], tup[1], results_class_perc[tup[1]]['chisq'] + #import pdb; pdb.set_trace() + #print + + (best_chisq, best_class, bestt, bestalt, n_cut) = chosen_chisq_class_tups[0] + + # results_detach_perc[k] = ok_results[k][numpy.where(numpy.logical_and( \ + # (ok_results['class'] == 'semi-detached'), + # (ok_results['chisq'] < 1.0)))] + + + a = EB(idd,per*bestt[0],use_xml=use_xml,rec_array=rec_array) + a.run(fittype=fittype, try_alt=(bestalt[0] >= 0), altnum=bestalt[0]) + #import pdb; pdb.set_trace() + #print + if plot: + print(dosave,show) + a.plot(dosave=dosave,show=show) + + return rez, a.outrez + + +# OBSOLETE: +def period_select__old(idd=243641,per=2.20770441,use_xml=True,rec_array=None,plot=True,trials=[0.5,1,2],\ + try_alt=False,all_models=True,dosave=False,show=True, fittype=3): + + chisq = [] + ok = [] + if try_alt and all_models: + #alts = [-1,0,1] # OLD + alts = range(-1, 1 + 126) + else: + alts = [-1] + tt = [] + altuse = [] + classif = [] + for i,t in enumerate(trials): + for alt in alts: + a = EB(idd,per*t,use_xml=use_xml,rec_array=rec_array) + print("trying period = %f" % (per*t)) + #if alt < 0: + # a.run(fittype=3,try_alt=False,altnum=alt) + #else: + # a.run(fittype=3,try_alt=True,altnum=alt) + + ###164593: using fittype=4 returns the same detached class and only a slightly tighter chi2: + if alt < 0: + a.run(fittype=fittype,try_alt=False,altnum=alt) + else: + a.run(fittype=fittype,try_alt=True,altnum=alt) + chisq.append(a.outrez['chisq']) + ok.append(a.outrez['okfit']) + tt.append(t) + altuse.append(alt) + classif.append(a.outrez['class']) + print('>>>', i, t, alt) + #import pdb; pdb.set_trace() + #print + + ok = numpy.array(ok) + trials = numpy.array(tt) + chisq = numpy.array(chisq) + altuse = numpy.array(altuse) + classif = numpy.array(classif) + + #import pdb; pdb.set_trace() + #print + #print ok, trials, chisq, altuse + + oks = numpy.where(ok == True)[0] + + #print ok, trials, chisq, altuse + + if len(oks) == 0: + print("warning...no EB models seem like ok fits") + bestt = trials[numpy.where(chisq == min(chisq))] + bestalt = altuse[numpy.where(chisq == min(chisq))] + + rez = {'okfit': False, 'best_period': bestt[0]*per, "best_chisq": min(chisq), "best_alt": bestalt[0]} + else: + trials = trials[oks] + chisq = chisq[oks] + altuse = altuse[oks] + classif = classif[oks] + bestt = trials[numpy.where(chisq == min(chisq))] + bestalt = altuse[numpy.where(chisq == min(chisq))] + rez = {'okfit': True, 'best_period': bestt[0]*per, "best_chisq": min(chisq), "best_alt": bestalt[0]} + + print(rez) + a = EB(idd,per*bestt[0],use_xml=use_xml,rec_array=rec_array) + a.run(fittype=fittype, try_alt=(bestalt[0] >= 0), altnum=bestalt[0]) + #import pdb; pdb.set_trace() + #print + if plot: + print(dosave,show) + a.plot(dosave=dosave,show=show) + + return rez, a.outrez + + +def test(idd=243641,per=2.20770441,plot=True,try_alt=False,altnum=1,dosave=False,show=True): + #e = EB(dotastro_id=217688,period=2.76901598) + #e = EB(216887,4.39149364) ## interesting asmmyetry + #e = EB(216470,2.97443659) ## cannot be fit easily + e = EB(idd,per) + e.run(try_alt=try_alt,altnum=altnum) + if plot: + e.plot(dosave=dosave,show=show) + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description='Fit eclipsing binary model to dotastro sources') + parser.add_argument('did', metavar='dotastro_id', type=int, nargs=1, + help='dotastro id (e.g. 233474)') + parser.add_argument('per', metavar='period', type=float, nargs=1, + help='period of that source in days (e.g. 1.51608476)') + parser.add_argument('-p', dest='plot', action='store_true', + default=False, + help='plot') + parser.add_argument('-a', dest='alt', action='store_true', + default=False, + help='Try alternative template (closer starting point)') + parser.add_argument('-s', dest='select', action='store_true', + default=False, + help='Do period selection') + + parser.add_argument('--altnum',dest='altnum',type=int,default=1, + help='altnative starting point number 0 or 1') + + parser.add_argument("-f",dest='savefig',action='store_true',default=False,help="save the figure") + parser.add_argument("-x",dest='showfig',action='store_false',default=True,help="dont show the figure. No X11 screen.") + + args = parser.parse_args() + if not args.showfig: + matplotlib.use('Agg') + + if args.select: + out = period_select(args.did[0],args.per[0],plot=args.plot,use_xml=True,try_alt=args.alt,dosave=args.savefig,show=args.showfig, fittype=4) + import pprint + pprint.pprint(out) + else: + test(args.did[0],args.per[0],args.plot,try_alt=args.alt,altnum=args.altnum,dosave=args.savefig,show=args.showfig) + + + # test(230476,2.34910859) + # test(243473,2.21889119) + # test(225492,1.18067021) + # test(255056,1.16160775) + # test(233474,1.51608476) + # test(261052,1.11247858) + # test(216493,1.1935771) + + #test(225332,8.99898396) + #test(216887,8.78298728) diff --git a/mltsp/TCP/Algorithms/generate_arff_using_xml.py b/mltsp/TCP/Algorithms/generate_arff_using_xml.py new file mode 100644 index 00000000..f2b4bbe0 --- /dev/null +++ b/mltsp/TCP/Algorithms/generate_arff_using_xml.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +""" This is intended to be an example which can be emulated / copied in other code. + +Given a directory with some vosource xmls (which have features generated), +generate a WEKA style .arff file. + +You should be able to run this using: + + python generate_arff_using_xml.py + +NOTE: ASSUMES that the correct directory path pointing to the xmls is defined in this file. + +NOTE: ASSUMES that environment variable TCP_DIR has been defined and works (can be printed/found in os.environ). +""" +import os, sys +import glob + +sys.path.append(os.environ.get("TCP_DIR") + '/Software/feature_extract/MLData') +import arffify + + + + +if __name__ == '__main__': + ### NOTE: this __main__ section will only be executed when the python script is called like: + ### python generate_arff_using_xml.py + ### or + ### ./generate_arff_using_xml.py + + + xml_dirpath = "/home/dstarr/scratch/xml_list" + out_arff_filepath = "/tmp/gen.arff" # to be written + + filepaths = glob.glob("%s/*xml" % (xml_dirpath)) + + vosource_list = [] + for num, fpath in enumerate(filepaths): + ### NOTE: I'm using 'num' as a psedudo source-id for identification in the .arff file. + vosource_list.append((str(num), fpath)) # NOTE: a tuple of this form is needed. + + + a = arffify.Maker(search=[], skip_class=False, local_xmls=True, + convert_class_abrvs_to_names=False, + flag_retrieve_class_abrvs_from_TUTOR=False, + dorun=False, add_srcid_to_arff=True) + a.pars['skip_sci_class_list'] = [] # NOTE: this means that all sources will be added to the .arff, regardless of how ambigous the classification is. + a.populate_features_and_classes_using_local_xmls(srcid_xml_tuple_list=vosource_list) + a.write_arff(outfile=out_arff_filepath, \ + remove_sparse_classes=False)#, remove_sparse_classes=True, n_sources_needed_for_class_inclusion=10) # this parameter allows you to exclude science-classes from the .arff by requiring a certain number of examples to exist. diff --git a/mltsp/TCP/Algorithms/generate_summary.py b/mltsp/TCP/Algorithms/generate_summary.py new file mode 100644 index 00000000..1bf81411 --- /dev/null +++ b/mltsp/TCP/Algorithms/generate_summary.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +""" Generate a summary of metacost.results Weka output in Noisification/* dirs +""" +from __future__ import print_function + +import sys, os +import glob + + +if __name__ == '__main__': + + + os.chdir('/home/pteluser/scratch/Noisification') + + glob_paths = glob.glob("/home/pteluser/scratch/Noisification/*/metacost.results") + for fpath in glob_paths: + lines = open(fpath).readlines() + i_1st_slash = fpath.rfind('/') + i_2nd_slash = fpath.rfind('/',0,i_1st_slash) + case_name = fpath[i_2nd_slash+1:i_1st_slash] + passed_stratified = False + percent = 0. + for line in lines: + if "=== Stratified cross-validation ===" in line: + passed_stratified = True + elif (passed_stratified and \ + "Correctly Classified Instances" in line): + percent = float(line[52:line.rfind('%')-1]) + break + print("%0.2f %s" % (percent, case_name)) diff --git a/mltsp/TCP/Algorithms/ipengine_kill.py b/mltsp/TCP/Algorithms/ipengine_kill.py new file mode 100644 index 00000000..3101d8e7 --- /dev/null +++ b/mltsp/TCP/Algorithms/ipengine_kill.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +""" This kills ipython-parallel's ipengine which I cannot +seem to directly ssh-exeucte a pkill on. +""" +import sys, os + +if __name__ == '__main__': + + command_str = "ps awwux | grep bin.ipengine" + + (a,b,c) = os.popen3(command_str) + a.close() + c.close() + lines = b.readlines() + b.close() + + for line in lines: + if len(line) >10: + line_list = line.split() + try: + pid = int(line_list[1]) + exec_str = "kill -9 %d" % (pid) + os.system(exec_str) + except: + pass diff --git a/mltsp/TCP/Algorithms/macc_wrapper.py b/mltsp/TCP/Algorithms/macc_wrapper.py new file mode 100644 index 00000000..57278277 --- /dev/null +++ b/mltsp/TCP/Algorithms/macc_wrapper.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +""" +* asas_catalog.R in Python +** input parameters: + - deboss arff fpath + - asas arff fpath + - features to exclude +** output: + - asas_randomForest.Rdat fpath + - classifier effeciency metrics +** I want to call the full AL R script, but be able to + modify some bits. +*** wrapping the R code in a python string is less ideal + - but it could just be for a specific version of the AL/MACC code +""" +import os, sys +from rpy2.robjects.packages import importr +from rpy2 import robjects + + + +if __name__ == '__main__': + # TODO: do some popen of the asas_catalog.R script + # source a file which initializes variables + # source asas_catalog.R + + pars = {'root_dirpath':"/Data/dstarr/src/ASASCatalog/", + 'deboss_srcids_arff_fpath':"/Data/dstarr/src/ASASCatalog/data/debosscher_feats_20120305.arff", + 'deboss_train_arff_fpath':"/Data/dstarr/src/ASASCatalog/data/train_20120327_10ntree_5mtry.arff", + 'asas_test_arff_fpath':"/Data/dstarr/src/ASASCatalog/data/test_20120327_10ntree_5mtry.arff", + 'rf_clfr_fpath':"/home/dstarr/scratch/macc_wrapper_rfclfr.rdat", + } + + ### Initialize: + r_str = ''' +set.seed(1) +source("{root_dirpath}R/utils_classify.R") +source("{root_dirpath}R/class_cv.R") +source("{root_dirpath}R/missForest.R") +source("{root_dirpath}R/utils_PTF.R") +source("{root_dirpath}R/runJunkClass.R") +library(randomForest) +library(nnet) +library(foreign) + '''.format(root_dirpath=pars['root_dirpath']) + robjects.r(r_str) + + r_str = ''' +path = "{root_dirpath}" +asas_test_arff_fpath = "{asas_test_arff_fpath}" +rf_clfr_fpath="{rf_clfr_fpath}" + +# Load Debosscher data +debdat=read.arff(file="{deboss_srcids_arff_fpath}") +ID.use = debdat$source_id +debdat=read.arff(file="{deboss_train_arff_fpath}") +use = which(debdat$source_id {isin} ID.use) +debdat = debdat[use,] + +ID = debdat$source_id +debdat$class = paste(debdat$class) +deb.reclassify = read.table(paste(path,"data/reclassified_debosscher_eclipsing.dat",sep="")) +debdat$class[which(ID {isin} deb.reclassify[,1])] = deb.reclassify[,2] + +# straighten out T Tauri subclasses (AAM visual reclassifications) +ttau.cl = c(163375,163434,163445,163480,163585,163762,163907,164145,164355) +debdat$class[debdat$source_id {isin} ttau.cl] = 201 +ttau.wl = c(163981,164277) +debdat$class[debdat$source_id {isin} ttau.wl] = 202 + +class.deb = class.debos(debdat$class) + +# re-label the source that Nat found to be wrong +class.deb[ID==164154] = "y. W Ursae Maj." + +p = dim(debdat)[2] +feat.debos = data.frame(debdat)[,-c(1,p)] # Deb features + '''.format(isin="%in%", + root_dirpath=pars['root_dirpath'], + rf_clfr_fpath=pars['rf_clfr_fpath'], + deboss_srcids_arff_fpath=pars['deboss_srcids_arff_fpath'], + deboss_train_arff_fpath=pars['deboss_train_arff_fpath'], + asas_test_arff_fpath=pars['asas_test_arff_fpath']) + robjects.r(r_str) + + ### Remove useless features from the training data: + r_str = ''' +rem = c(which(substr(names(feat.debos),1,7) == "eclpoly")) +rem = c(rem,which(names(feat.debos)=="color_bv_extinction")) +rem = c(rem,which(names(feat.debos)=="color_diff_bj")) +rem = c(rem,which(names(feat.debos)=="color_diff_hk")) +rem = c(rem,which(names(feat.debos)=="color_diff_jh")) +rem = c(rem,which(names(feat.debos)=="color_diff_rj")) +rem = c(rem,which(names(feat.debos)=="color_diff_vj")) +rem = c(rem,which(names(feat.debos)=="n_points")) +rem = c(rem,which(names(feat.debos)=="freq_rrd")) +rem = c(rem,which(substr(names(feat.debos),17,27)=="rel_phase_0")) +feat.debos = feat.debos[,-rem] + '''.format() + robjects.r(r_str) + #import pdb; pdb.set_trace() + #print + + ### NOTE: must use the local version of asas_catalog.R: + r_str = 'source("asas_catalog.R")' + #r_str = 'source("{root_dirpath}R/asas_catalog.R")'.format(root_dirpath=pars['root_dirpath']) + robjects.r(r_str) + #import pdb; pdb.set_trace() + #print + + + ### TODO: ensure .R files are coming from current path + + ### TODO: retrieve resulting metrics diff --git a/mltsp/TCP/Algorithms/migrate_local_test_mysql_to_raid0.sh b/mltsp/TCP/Algorithms/migrate_local_test_mysql_to_raid0.sh new file mode 100755 index 00000000..e21e86fb --- /dev/null +++ b/mltsp/TCP/Algorithms/migrate_local_test_mysql_to_raid0.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +#This migrates the test-version setup'd mysql table files from local disk to +#transx RAID0 disk. + +# NOTE: the ned_feat_cache tables MUST BE NEWLY created if we wish to +# uncomment the ned_feat_cache tables bit & move it to raid0 +# - otherwise a sym-link to nothing will be move to raid0 & tables lost! + +sudo mysqladmin shutdown +sudo rm -Rf /media/raid_0/object_test_db +sudo rm -Rf /media/raid_0/source_test_db +#sudo rm -Rf /media/raid_0/ned_feat_cache +sudo mv /var/lib/mysql/object_test_db /media/raid_0/ +sudo mv /var/lib/mysql/source_test_db /media/raid_0/ +#sudo mv /var/lib/mysql/ned_feat_cache /media/raid_0/ +sudo ln -s /media/raid_0/object_test_db /var/lib/mysql/object_test_db +sudo ln -s /media/raid_0/source_test_db /var/lib/mysql/source_test_db +#sudo ln -s /media/raid_0/ned_feat_cache /var/lib/mysql/ned_feat_cache +sudo chown -R mysql /media/raid_0/object_test_db +sudo chown -R mysql /media/raid_0/source_test_db +#sudo chown -R mysql /media/raid_0/ned_feat_cache +sudo /usr/local/bin/mysqld_safe --binlog-ignore-db=minor_planet --binlog-ignore-db=source_test_db --binlog-ignore-db=object_test_db --binlog-ignore-db=source_db --binlog-ignore-db=object_db & diff --git a/mltsp/TCP/Algorithms/missForest.R b/mltsp/TCP/Algorithms/missForest.R new file mode 100755 index 00000000..1dc03015 --- /dev/null +++ b/mltsp/TCP/Algorithms/missForest.R @@ -0,0 +1,284 @@ +## +## MissForest - nonparametric missing value imputation for mixed-type data +## +## This R script contains the necessary functions for performing imputation +## using the missForest algorithm in the statistical software R. +## +## An R package 'missForest' will be made available as soon as possible. +## +## Author: D.Stekhoven, stekhoven@stat.math.ethz.ch +############################################################################## + + +missForest <- function(xmis, maxiter = 10, + decreasing = FALSE, + verbose = FALSE, + mtry = floor(sqrt(ncol(xmis))), + ntree = 100, xtrue = NA) +{ ## ---------------------------------------------------------------------- + ## Arguments: + ## xmis = data matrix with missing values + ## maxiter = stop after how many iterations (default = 10) + ## decreasing = (boolean) if TRUE the columns are sorted with decreasing + ## amount of missing values + ## verbose = (boolean) if TRUE then missForest returns error estimates, + ## runtime and if available true error during iterations + ## mtry = how many variables should be tried randomly at each node + ## ntree = how many trees are grown in the forest + ## xtrue = complete data matrix + ## + ## ---------------------------------------------------------------------- + ## Author: Daniel Stekhoven, stekhoven@stat.math.ethz.ch + + n <- nrow(xmis) + p <- ncol(xmis) + + ## perform initial guess on xmis + ximp <- xmis + xAttrib <- lapply(xmis, attributes) + varType <- character(p) + for (t.co in 1:p){ + if (is.null(xAttrib[[t.co]])){ + varType[t.co] <- 'numeric' + ximp[is.na(xmis[,t.co]),t.co] <- mean(xmis[,t.co], na.rm = TRUE) + } else { + varType[t.co] <- xAttrib[[t.co]]$class + ## take the level which is more 'likely' (majority vote) + max.level <- max(table(ximp[,t.co])) + ## if there are several classes which are major, sample one at random + class.assign <- sample(names(which(max.level == summary(ximp[,t.co]))), 1) + ## it shouldn't be the NA class + if (class.assign != "NA's"){ + ximp[is.na(xmis[,t.co]),t.co] <- class.assign + } else { + while (class.assign == "NA's"){ + class.assign <- sample(names(which(max.level == + summary(ximp[,t.co]))), 1) + } + ximp[is.na(xmis[,t.co]),t.co] <- class.assign + } + } + } + + ## extract missingness pattern + NAloc <- is.na(xmis) # where are missings + noNAvar <- apply(NAloc, 2, sum) # how many are missing in the vars + sort.j <- order(noNAvar) # indices of increasing amount of NA in vars + if (decreasing) + sort.j <- rev(sort.j) + sort.noNAvar <- noNAvar[sort.j] + + ## output + Ximp <- vector('list', maxiter) + + ## initialize parameters of interest + iter <- 0 + k <- length(unique(varType)) + convNew <- rep(0, k) + convOld <- rep(Inf, k) + OOBerror <- numeric(p) + names(OOBerror) <- varType + + ## setup convergence variables w.r.t. variable types + if (k == 1){ + if (unique(varType) == 'numeric'){ + names(convNew) <- c('numeric') + } else { + names(convNew) <- c('factor') + } + convergence <- c() + OOBerr <- numeric(1) + } else { + names(convNew) <- c('numeric', 'factor') + convergence <- matrix(NA, ncol = 2) + OOBerr <- numeric(2) + } + + ## function to yield the stopping criterion in the following 'while' loop + stopCriterion <- function(varType, convNew, convOld, iter, maxiter){ + k <- length(unique(varType)) + if (k == 1){ + (convNew < convOld) & (iter < maxiter) + } else { + ((convNew[1] < convOld[1]) | (convNew[2] < convOld[2])) & (iter < maxiter) + } + } + + ## iterate missForest + while (stopCriterion(varType, convNew, convOld, iter, maxiter)){ + if (iter != 0){ + convOld <- convNew + OOBerrOld <- OOBerr + } + cat(" missForest iteration", iter+1, "in progress...") + t.start <- proc.time() + ximp.old <- ximp + for (s in 1:p){ + varInd <- sort.j[s] + if (noNAvar[[varInd]] != 0){ + obsi <- !NAloc[,varInd] # which i's are observed + misi <- NAloc[,varInd] # which i's are missing + obsY <- ximp[obsi, varInd] # training response + obsX <- ximp[obsi, seq(1, p)[-varInd]] # training variables + misX <- ximp[misi, seq(1, p)[-varInd]] # prediction variables + typeY <- varType[varInd] + if (typeY == 'numeric'){ + ## train random forest on observed data + RF <- randomForest(x = obsX, y = obsY, ntree = ntree) + ## record out-of-bag error + OOBerror[varInd] <- RF$mse[ntree] + ## predict missing values in column varInd + misY <- predict(RF, misX) + } else { # if Y is categorical + obsY <- factor(obsY) ## remove empty classes + summarY <- summary(obsY) + if (length(summarY) == 1){ ## if there is only one level left + misY <- factor(rep(names(summarY), sum(misi))) + } else { + ## train random forest on observed data + RF <- randomForest(x = obsX, y = obsY, ntree = ntree) + ## record out-of-bag error + OOBerror[varInd] <- RF$err.rate[[ntree,1]] + ## predict missing values in column varInd + misY <- predict(RF, misX) + } + } + + ## replace old imputed value with prediction + ximp[misi, varInd] <- misY + } + } + cat('done!\n') + + iter <- iter+1 + Ximp[[iter]] <- ximp + + t.co2 <- 1 + ## check the difference between iteration steps + for (t.type in names(convNew)){ + t.ind <- which(varType == t.type) + if (t.type == "numeric"){ + convNew[t.co2] <- sum((ximp[,t.ind]-ximp.old[,t.ind])^2)/sum(ximp[,t.ind]^2) + } else { + dist <- sum(as.character(as.matrix(ximp[,t.ind])) != as.character(as.matrix(ximp.old[,t.ind]))) + convNew[t.co2] <- dist / (n * sum(varType == 'factor')) + } + t.co2 <- t.co2 + 1 + } + + ## compute estimated imputation error + NRMSE <- sqrt(mean(OOBerror[varType=='numeric'])/var(as.vector(as.matrix(xmis[,varType=='numeric'])), na.rm = TRUE)) + PFC <- mean(OOBerror[varType=='factor']) + if (k==1){ + if (unique(varType)=='numeric'){ + OOBerr <- NRMSE + names(OOBerr) <- 'NRMSE' + } else { + OOBerr <- PFC + names(OOBerr) <- 'PFC' + } + } else { + OOBerr <- c(NRMSE, PFC) + names(OOBerr) <- c('NRMSE', 'PFC') + } + + ## return status output, if desired + if (verbose){ + delta.start <- proc.time() - t.start + if (any(!is.na(xtrue))){ + err <- mixError(ximp, xmis, xtrue) + cat(" error(s):", err, "\n") + } + cat(" estimated error(s):", OOBerr, "\n") + cat(" convergence:", convNew, "\n") + cat(" time:", delta.start[3], "seconds\n\n") + } + }#end while((convNew + + + +""" + for row in rows: + out_str += "\n" + for col in row: + out_str += "" % (str(col)) + out_str += "\n" + out_str += """ + +
%s
+ +""" + print(out_str) + + # Then, out_str could be file_pointer.write(out_str) to some .html file. + + # You could also figure out the URL for more information about a PTF source (Caltech or a nersc.gov page, I think) and then print a link column into the above html string: + # something like: + #
Click on this link + + + + def some_main_function(self): + """ This is the main'ish function. + + This module should work on the tranx computer (psycopg2 is installed). + + """ + + import psycopg2 + conn = psycopg2.connect("dbname='ptfcands' user='tcp' host='navtara.caltech.edu' password='classify'"); + pg_cursor = conn.cursor() + + column_list = ['shortname', 'ra', 'dec', 'mag', 'type2', 'class', 'isspectra', 'rundate'] + column_str = ', '.join(column_list) + select_str = "SELECT %s FROM saved_cands WHERE shortname > '' AND rundate > '20090101' ORDER BY rundate DESC LIMIT 20" % (column_str) + # The above is the same as: + # SELECT shortname, ra, dec, mag, type2, class, isspectra, rundate FROM saved_cands WHERE shortname > '' AND rundate > '20090101' ORDER BY rundate DESC LIMIT 20 + + pg_cursor.execute(select_str) + + rows = pg_cursor.fetchall() + for row in rows: + print(row) + + # Can also display the results in an html string (which could be written to file): + self.print_rows_in_html_table_form(rows) + + + + def get_ptf_data_epoch_at_classification_time(self): + """ This function gets the datapoint / epoch for a source, which + is closest to the time that Mansi/Robert/Brad identified the source + as interesting / a transient. + + """ + import psycopg2 + conn = psycopg2.connect("dbname='ptfcands' user='tcp' host='navtara.caltech.edu' password='classify'"); + pg_cursor = conn.cursor() + + ### NOTE: The following has some duplicate rows due to there + # occasionally being more than one datesave time for a + # particular source shortname. Thus this isn't useful: + #select_str = "SELECT distinct shortname, datesaved, (cast(to_char(datesaved, 'J')as real) + cast(to_char(datesaved, 'SSSS') as real)/3600./24. - 0.5) as jd FROM annotate order by datesaved ASC" + + ### NOTE: The following only selects the row with the earliest + # datesaved time, thus the first classification of a source. + ### NOTE: This also calculates a Julian-date from the + # string-like datesaved column. + #select_str = "SELECT DISTINCT ON (shortname) shortname, datesaved, (cast(to_char(datesaved, 'J')as real) + cast(to_char(datesaved, 'SSSS') as real)/3600./24. - 0.5) as jd FROM annotate ORDER BY shortname, datesaved" + ### This version JOINs with sources table to also get the + # ra, dec, and source-id: + # # # # # #select_str = "SELECT DISTINCT ON (annotate.shortname) annotate.shortname, sources.id, sources.ra, sources.dec, (cast(to_char(annotate.datesaved, 'J')as real) + cast(to_char(annotate.datesaved, 'SSSS') as real)/3600./24. - 0.5) as jd FROM sources JOIN annotate ON (annotate.shortname=sources.name) ORDER BY annotate.shortname, annotate.datesaved" + #select_str = "SELECT DISTINCT ON (annotate.shortname) annotate.shortname, sources.id, sources.ra, sources.dec, saved_cands.isspectra, (cast(to_char(annotate.datesaved, 'J')as real) + cast(to_char(annotate.datesaved, 'SSSS') as real)/3600./24. - 0.5) as jd FROM sources JOIN annotate ON (annotate.shortname=sources.name) JOIN saved_cands ON (annotate.shortname=saved_cands.shortname) WHERE saved_cands.isspectra = 't' ORDER BY annotate.shortname, annotate.datesaved" + select_str = "SELECT DISTINCT ON (annotate.shortname) annotate.shortname, sources.id, sources.ra, sources.dec, saved_cands.isspectra, (cast(to_char(annotate.datesaved, 'J')as real) + cast(to_char(annotate.datesaved, 'SSSS') as real)/3600./24. - 0.5) as jd FROM sources JOIN annotate ON (annotate.shortname=sources.name) JOIN saved_cands ON (annotate.shortname=saved_cands.shortname) ORDER BY annotate.shortname, annotate.datesaved" + pg_cursor.execute(select_str) + rows = pg_cursor.fetchall() + caltech_sources = {} + for row in rows: + row + caltech_sources[row[0]] = {'shortname':row[0], + 'caltech_srcid':row[1], + 'ra':row[2], + 'dec':row[3], + 'isspectra':row[4], + 'jd_time':row[5]} + print() + + # NOTE: Return a single ptf-events row/epoch/observation which + # most closely correlates to the Caltech classification time. + # - Thus, we believe that the observation at this time + # is what the Caltech person saw when they made the initial + # identification and classification. + db = MySQLdb.connect(host=pars['mysql_hostname'], + user=pars['mysql_user'], + db=pars['mysql_database'], + port=pars['mysql_port']) + cursor = db.cursor() + + for ct_src_dict in caltech_sources.values(): + #select_str = "SELECT T1.*, (T1.ujd - 2454972.8723) AS t_aftr_classif FROM (SELECT id, ra, decl, ujd, mag, mag_err, realbogus, obj_srcid_lookup.src_id FROM ptf_events_htm JOIN obj_srcid_lookup ON (id=obj_id) WHERE obj_srcid_lookup.survey_id=3 AND DIF_HTMCircle(258.96142767, 64.23848418, 0.05)) AS T1 WHERE (T1.ujd - 2454972.8723) > -0.1 ORDER BY src_id, ujd DESC" + select_str = """ +SELECT object_test_db.obj_srcid_lookup.src_id, T1.id, T1.ujd, T1.mag, T1.realbogus, (T1.ujd - %lf) AS t_aftr_classif +FROM + (SELECT id, ra, decl, ujd, mag, mag_err, realbogus + FROM object_test_db.ptf_events_htm + WHERE DIF_HTMCircle(%lf, %lf, 0.05)) AS T1 +JOIN object_test_db.obj_srcid_lookup ON (T1.id=object_test_db.obj_srcid_lookup.obj_id) +WHERE object_test_db.obj_srcid_lookup.survey_id=3 +ORDER BY src_id, ujd DESC + """ % (ct_src_dict['jd_time'], ct_src_dict['ra'], ct_src_dict['dec']) + cursor.execute(select_str) + results = cursor.fetchall() + + ct_src_dict['data'] = [] + for row in results: + ct_src_dict['data'].append({'mysql_srcid':row[0], + 'mysql_objid':row[1], + 'ujd':row[2], + 'mag':row[3], + 'realbogus':row[4], + 't_after_classif':row[5]}) + pprint.pprint(ct_src_dict) + + + def LBL_pgsql__query_realbogus_using_ptf_id(self): + """ + Using a (hardcoded as an example) PTF object/event/epoch id, retrieve + RealBogus values from LBL's PostgreSQL database. + """ + import psycopg2 + conn = psycopg2.connect("dbname='subptf' user='dstarr' host='sgn02.nersc.gov' password='*2ta77' port=6540"); + pg_cursor = conn.cursor() + + select_str = "SELECT candidate_id, bogus, suspect, unclear, maybe, realish, realbogus FROM rb_classifier WHERE candidate_id = 3000001" + pg_cursor.execute(select_str) + rows = pg_cursor.fetchall() + for row in rows: + (candidate_id, bogus, suspect, unclear, maybe, realish, realbogus) = row + print(candidate_id, realbogus) + + +if __name__ == '__main__': + + pars = { \ + 'mysql_user':"pteluser", + 'mysql_hostname':"192.168.1.25", + 'mysql_database':'source_test_db', + 'mysql_port':3306, + } + + + Pg_Db_Class_Example = Postgre_Database_Class_Example(pars) + + Pg_Db_Class_Example.LBL_pgsql__query_realbogus_using_ptf_id() + sys.exit() + Pg_Db_Class_Example.get_ptf_data_epoch_at_classification_time() + sys.exit() + Pg_Db_Class_Example.some_main_function() + + + db = MySQLdb.connect(host=pars['mysql_hostname'], + user=pars['mysql_user'], + db=pars['mysql_database'], + port=pars['mysql_port']) + cursor = db.cursor() + + select_str = "SELECT src_id, ra, decl FROM srcid_lookup LIMIT 3" % () + cursor.execute(select_str) + results = cursor.fetchall() + for row in results: + print(row) + + + # This example queries the TCP Mysql database (on tranx), for a position, + # and returns all the sources, and the magnitude(time) datapoints. + # NOTE: DIF_HTMCircle(258.96142767, 64.23848418, 0.05) means: + # - a 0.05 arc minute (0.05 * 1/60. degrees) radius circle is queried. + # which is around 3 arcseconds, and probably a good standard query for sources. + # - if you query less than 1 arcsecond, you may begin missing a some data for a source. + # NOTE: "ujd" is essentially time, with 1.0 representing 1 day. Aka Julian Date. + # + # NOTE: besides the "realbogus" value, there are also 5 characterstics which GroupThink uses + # in calculating realbogus, and may be pertinant to the real/bogus classification. + # Ideally, these 5 params can be hidden because the realbogus value correctly + # represents whether the subtracted object is real or bogus. + # So, for now you can just concern yourself with the "realbogus" characteristic if you want. + # The other 5 characteristics are: + # bogus | suspect | unclear | maybe | realish + + ### This selects just information from the ptf_events table: + # SELECT id, ra, decl, ujd, mag, mag_err, realbogus, bogus, suspect, unclear, maybe, realish FROM ptf_events_htm WHERE DIF_HTMCircle(258.96142767, 64.23848418, 0.05); + + ### This does the above select (without the 5 extra characteristics), + # but also including the associated TCP source-id. + """ +SELECT id, ra, decl, ujd, mag, mag_err, realbogus, obj_srcid_lookup.src_id FROM ptf_events_htm JOIN obj_srcid_lookup ON (id=obj_id) WHERE obj_srcid_lookup.survey_id=3 AND DIF_HTMCircle(258.96142767, 64.23848418, 0.05); ++---------+--------------+--------------+---------------+---------+---------+-----------+--------+ +| id | ra | decl | ujd | mag | mag_err | realbogus | src_id | ++---------+--------------+--------------+---------------+---------+---------+-----------+--------+ +| 4731119 | 258.96127891 | 64.238416648 | 2454972.8723 | 18.784 | 0.0226 | 0.002 | 50343 | +| 4731815 | 258.96142767 | 64.23848418 | 2454972.91348 | 19.8342 | 0.0788 | 0.019 | 50343 | ++---------+--------------+--------------+---------------+---------+---------+-----------+--------+ + +select sources.name, sources.ra, sources.dec, phot.mag, phot.emag, phot.filter, phot.obsdate from sources JOIN phot ON (phot.sourceid=sources.id) where sources.name='09aa' ORDER BY obsdate; + + name | ra | dec | mag | emag | filter | obsdate +------+------------+----------+---------+----------+--------+------------------------- + 09aa | 173.336234 | -9.41118 | 999 | 999 | R | 2009-02-20 06:46:01.983 + 09aa | 173.336234 | -9.41118 | 999 | 999 | R | 2009-02-20 10:14:15.683 + 09aa | 173.336234 | -9.41118 | 999 | 999 | R | 2009-02-24 10:11:24.683 + 09aa | 173.336234 | -9.41118 | 999 | 999 | g | 2009-02-28 06:05:30.783 + 09aa | 173.336234 | -9.41118 | 999 | 999 | g | 2009-02-28 08:00:10.433 + + +select sources.name, sources.ra, sources.dec, annotations.username, annotations.type, annotations.comment from sources JOIN annotations ON (annotations.sourceid=sources.id) where sources.name='09aa' limit 10; + +name | ra | dec | username | type | comment +------+------------+----------+----------+----------------+----------- + 09aa | 173.336234 | -9.41118 | robert | classification | SN Ia + 09aa | 173.336234 | -9.41118 | robert | redshift | 0.12 + 09aa | 173.336234 | -9.41118 | robert | type | Transient + +###### + +select src_id, ptf_events.id, ptf_events.ujd, ptf_events.mag, ptf_events.realbogus + from obj_srcid_lookup + JOIN ptf_events ON (ptf_events.id=obj_srcid_lookup.obj_id) + WHERE src_id=(SELECT src_id FROM obj_srcid_lookup WHERE obj_id = 4227695 AND survey_id = 3); + + +mysql> select src_id, ptf_events.id, ptf_events.ujd, ptf_events.mag, ptf_events.realbogus from obj_srcid_lookup JOIN ptf_events on (ptf_events.id=obj_srcid_lookup.obj_id) WHERE src_id=(select src_id from obj_srcid_lookup where obj_id = 4227695); ++--------+---------+---------------+---------+------------+ +| src_id | id | ujd | mag | realbogus | ++--------+---------+---------------+---------+------------+ +| 466081 | 4227695 | 2454972.93413 | 19.3241 | 0.0248442 | +| 466081 | 4226964 | 2454972.90348 | 19.8569 | 0.00284416 | ++--------+---------+---------------+---------+------------+ +2 rows in set (0.05 sec) + + + +ptfcands=> select * from sources order by creationdate DESC limit 50; + id | sub_id | cand_id | name | iauname | status | programid | ra | dec | era | edec | classification | redshift | creationdate | lastmodified | priority | scheduling +------+--------+---------+------+---------+--------+-----------+------------+-----------+-----+------+----------------+----------+----------------------------+----------------------------+----------+------------ + 1266 | 12985 | 4447384 | 09ke | | active | -1 | 215.047294 | 51.740923 | | | | | 2009-05-21 20:12:06.438379 | 2009-05-21 20:12:06.438379 | 5 | auto + 1265 | 12433 | 4256479 | 09kd | | active | -1 | 255.859193 | 43.766691 | | | | | 2009-05-21 19:47:39.956362 | 2009-05-21 19:47:39.956362 | 5 | auto + 1264 | 13213 | 4543054 | 09kc | | active | -1 | 186.805834 | 61.72272 | | | | | 2009-05-21 18:16:40.154638 | 2009-05-21 18:16:40.154638 | 5 | auto + 1263 | 11686 | 3985221 | 09kb | | active | -1 | 189.694058 | 79.645662 | | | | | 2009-05-20 23:34:38.119103 | 2009-05-20 23:34:38.119103 | 5 | auto + 1262 | 11444 | 3843122 | 09ka | | active | -1 | 257.394746 | 72.060907 | | | | | 2009-05-20 23:28:03.399104 | 2009-05-20 23:28:03.399104 | 5 | auto + 1261 | 10949 | 3605721 | 09jz | | active | -1 | 195.106203 | 67.460265 | | | | | 2009-05-20 23:07:32.438336 | 2009-05-20 23:07:32.438336 | 5 | auto + 1260 | 11139 | 3692473 | 09jy | | active | -1 | 263.846781 | 68.123137 | | | | | 2009-05-20 22:31:23.594331 | 2009-05-20 22:31:23.594331 | 5 | auto + 1259 | 10799 | 3556880 | 09jx | | active | -1 | 203.348915 | 59.348204 | | | | | 2009-05-20 22:25:08.14293 | 2009-05-20 22:25:08.14293 | 5 | auto + 1258 | 10581 | 3482376 | 09jw | | active | -1 | 193.598873 | 56.732591 | | | | | 2009-05-20 22:23:32.550871 | 2009-05-20 22:23:32.550871 | 5 | auto + + + + + + """ + + + + + + + + + """ +on tranx/192.168.1.25: + +mysql -u pteluser + + +show databases; + +use source_test_db; + +show tables; + +select * from srcid_lookup limit 3; + + +### This gets all features available: + +SELECT feat_name FROM feat_lookup WHERE filter_id=8 AND is_internal=0 ORDER BY feat_name + + +### This gets all features for an (assumed PTF) source & prints them out with feature-names: + +select src_id, feat_id, feat_name, feat_val from feat_values JOIN feat_lookup USING (feat_id) WHERE filter_id=8 AND src_id = 118 ORDER BY feat_name; ++--------+---------+--------------------------------------+------------------+ +| src_id | feat_id | feat_name | feat_val | ++--------+---------+--------------------------------------+------------------+ +| 118 | 1061 | amplitude | 0.5036405 | +| 118 | 287 | beyond1std | 0 | +| 118 | 440 | chi2 | 57122.0446203 | + + +### This mimics the query on the tcp_ptf_summary.php webpage: + +SELECT x.feat_val, y.feat_val FROM feat_values AS x + JOIN srcid_lookup USING (src_id) + INNER JOIN feat_values AS y + ON y.src_id = x.src_id + AND y.feat_id=(SELECT feat_id FROM feat_lookup WHERE ( + feat_lookup.filter_id = 8 AND + feat_lookup.feat_name = 'std')) + WHERE x.feat_id=(SELECT feat_id FROM feat_lookup WHERE ( + feat_lookup.filter_id = 8 AND + feat_lookup.feat_name = 'median')) + AND srcid_lookup.nobjs >= 15; + + +####################### + +# How to connect to Caltech PostgreSQL server: + +# - use tranx +# - password : classify + +psql -d ptfcands -U tcp -h navtara.caltech.edu --password + +### Commands: +# (NOTE: I'm not sure why, by /d and /dt don't work, which would normally allow us to see other tables & databases. Maybe this has been disabled for the tcp user). + +\h # help, lists SQL commands +\h SELECT # gives help on a particular command + +###### +# Here is what columns are in the ptfcands.saved_cands table: +ptfcands=> select * from saved_cands limit 1; + canname | ra | dec | x | y | expname | scanner | ip | class | comments | datesaved | a | b | mag | fwhm | sigma | max2sig | max3sig | flag | type | rundate | visit | field | chip | shortname | isspectra | z | cannum | phase | specdate | date | id | sub_id | obsjd | type2 +---------+------------+-----------+--------+--------+-------------------------------------------------+---------+-----------------+-------+----------+-----------+------+------+---------+------+-------+---------+---------+------+-----------+----------+-------+--------+------+-----------+-----------+-------+--------+-------+---------------+------+----+--------+-------+----------------- + | 120.196928 | 46.948476 | 1786.7 | 3495.8 | PTF200903171418_2_o_14865_00.w_cd.ptf_100224_00 | mansi | 198.202.125.194 | Ia | | | 0.85 | 0.79 | 20.1955 | 2.4 | 7.73 | 5 | 1 | 0 | Transient | 20090317 | 1 | 100224 | 0 | 09h | t | 0.121 | 12 | -2d | Mar 20.360082 | | | | | SurelyTransient + + | 171.386532 | 13.636271 | 1386 | 218.6 | PTF200903023554_1_o_12989_09.w_cd.ptf_002_09 | robert | 75.27.243.136 | | | | 1.31 | 1.27 | 19.0126 | 2.91 | 16.3 | 1 | 0 | 0 | Rock | | | | | None | | | | | | | | | | + + | 171.167212 | 13.376099 | 628.4 | 1144.2 | PTF200903023554_1_o_12989_09.w_cd.ptf_002_09 | robert | 75.27.243.136 | | | | 1.38 | 1.27 | 18.6404 | 3.24 | 21.42 | 0 | 0 | 0 | Rock | | | | | None | | | | | | | | | | + + + + + + +""" diff --git a/mltsp/TCP/Algorithms/qso_fit.py b/mltsp/TCP/Algorithms/qso_fit.py new file mode 100644 index 00000000..94764a6b --- /dev/null +++ b/mltsp/TCP/Algorithms/qso_fit.py @@ -0,0 +1,298 @@ +""" Nat wrote 20100930, dstarr to adapt as a TCP feature. +""" + +from numpy import sqrt,abs,zeros,log,exp,dot,log10,median,atleast_1d,var,shape,pi,where +from scipy.stats import norm +from scipy.linalg import solveh_banded,cholesky_banded +from scipy.special import gammaln,betainc,gammaincc +from scipy import transpose +from scipy import __version__ as scipy_version + +def lprob2sigma(lprob): + """ translates a log_e(probability) to units of Gaussian sigmas """ + if (lprob>-36.): + sigma = norm.ppf(1.-0.5*exp(1.*lprob)) + else: + sigma = sqrt( log(2./pi) - 2.*log(8.2) - 2.*lprob ) + return float(sigma) + + +def chol_inverse_diag(t): + """ Computes inverse of matrix given its Cholesky upper Triangular decomposition t. + matrix form: ab[u + i - j, j] == a[i,j] (here u=1) + (quick version: only calculates diagonal and neighboring elements) """ + (uu,nrows) = shape(t) + B = zeros((uu,nrows),dtype='float64') + B[1,nrows-1] = 1.0/t[1,nrows-1]**2 + B[0,nrows-1] = -t[0,nrows-1]*B[1,nrows-1]/t[1,nrows-2] + for j in reversed(range(nrows-1)): + tjj = t[1,j] + B[1,j] = (1.0/tjj-t[0,j+1]*B[0,j+1])/tjj + B[0,j] = -t[0,j]*B[1,j]/t[1,j-1] + return B + + + +def qso_engine(time,data,error,ltau=3.,lvar=-1.7,sys_err=0.,return_model=False): + """Calculates the fit quality of a damped random walk to a qso lightcurve. + The formalism is from Rybicki & Press (1994; arXiv:comp-gas/9405004) + + Data are modelled with a covariance function + Lij = 0.5*var*tau*exp(-|time_i-time_j|/tau) . + + Input: + time - measurement times, typically days + data - measured magnitudes + error - uncertainty in measured magnitudes + + Output (dictionary): + + chi2/nu - classical variability measure + chi2_qso/nu - for goodness of fit given fixed parameters + chi2_qso/nu_extra - for parameter fitting, add to chi2/nu + chi^2/nu_NULL - expected chi2/nu for non-qso variable + + signif_qso - significance chi^2/nu1 (rule out qso) + signif_vary - significance that source is variable + class - resulting source type (ambiguous, not_qso, qso) + + model - time series prediction for each datum given all others (iff return_model==True) + dmodel - model uncertainty, including uncertainty in data + + Notes: + T = L^(-1) + Data variance is D + Full covariance C^(-1) = (L+D)^(-1) = T [T+D^(-1)]^(-1) D^(-1) + Code takes advantage of the tridiagonality of T and T+D^(-1).""" + + + out_dict={} + out_dict['chi2_qso/nu']=999; out_dict['chi2_qso/nu_extra']=0.; + out_dict['signif_qso']=0.; out_dict['signif_not_qso']=0.; out_dict['signif_vary']=0. + out_dict['chi2_qso/nu_NULL']=0.; out_dict['chi2/nu']=0.; out_dict['nu']=0 + out_dict['model']=[]; out_dict['dmodel']=[]; + out_dict['class']='ambiguous' + + lvar0 = log10(0.5)+lvar+ltau + + ln = len(data) + dt = abs(time[1:]-time[:-1]) + + # first make sure all dt>0 + g=where(dt>0.)[0]; lg = len(g) + # must have at least 2 data points + if (lg<=0): + return out_dict + + if (return_model): + model = 1.*data; dmodel = -1.*error + + if (lg3): + if (out_dict['signif_qso']>3): + out_dict['class']='qso' + elif (out_dict['signif_not_qso']>3): + out_dict['class']='not_qso' + + # best-fit model for the lightcurve + if (return_model): + model[gg] = dat - (u-u0*x0)/diagC + dmodel[gg] = 1./sqrt(diagC) + out_dict['model'] = model + out_dict['dmodel'] = dmodel + + return out_dict + + +def qso_fit(time,data,error,filter='r',sys_err=0.0,return_model=False): + """ Best-fit qso model determined for Sesar Strip82, ugriz-bands (default r). + See additional notes for underlying code qso_engine. + + Input: + time - measurement times [days] + data - measured magnitudes in single filter (also specified) + error - uncertainty in measured magnitudes + + Output: + chi^2/nu - classical variability measure + chi^2_qso/nu - fit statistic + chi^2_qso/nu_NULL - expected fit statistic for non-qso variable + + signif_qso - significance chi^2/nu1 (rule out qso) + signif_vary - significance that source is variable at all + class - source type (ambiguous, not_qso, qso) + + model - time series prediction for each datum given all others (iff return_model==True) + dmodel - model uncertainty, including uncertainty in data + + Note on use (i.e., how class is defined): + + (0) signif_vary < 3: ambiguous, else + (1) signif_qso > 3: qso, else + (2) signif_not_qso > 3: not_qso""" + + pars={} + pars['u'] = [-3.90, 0.12, 2.73, -0.02] + pars['g'] = [-4.10, 0.14, 2.92, -0.07] + pars['r'] = [-4.34, 0.20, 3.12, -0.15] + pars['i'] = [-4.23, 0.05, 2.83, 0.07] + pars['z'] = [-4.44, 0.13, 3.06, -0.07] + if filter.lower() not in pars: + filter='r' + + par = pars[filter.lower()] + mag0 = median(data) + lvar = par[0]+par[1]*(mag0-19.) + ltau = par[2]+par[3]*(mag0-19.) + + time = atleast_1d(time).astype('float64') + data = atleast_1d(data).astype('float64') + error = atleast_1d(error).astype('float64') + + adict = qso_engine(time,data,error,ltau=ltau,lvar=lvar,return_model=return_model,sys_err=sys_err) + + out_dict={} + out_dict['lvar']=lvar + out_dict['ltau']=ltau + out_dict['chi2/nu']=adict['chi2/nu'] + out_dict['nu'] = adict['nu'] + out_dict['chi2_qso/nu']=adict['chi2_qso/nu'] + out_dict['chi2_qso/nu_NULL']=adict['chi2_qso/nu_NULL'] + out_dict['signif_qso']=adict['signif_qso'] + out_dict['signif_not_qso']=adict['signif_not_qso'] + out_dict['signif_vary']=adict['signif_vary'] + out_dict['class']=adict['class']; + out_dict['chi2qso_nu_nuNULL_ratio'] = out_dict['chi2_qso/nu'] / out_dict['chi2_qso/nu_NULL'] + + ### Nat has converged upon the following being the most significant featues, + # Joey believes it is best to jut use these features only (so now the others are disabled in + # __init__.py and qso_extractor.py + out_dict['log_chi2_qsonu'] = log(out_dict['chi2_qso/nu']) + out_dict['log_chi2nuNULL_chi2nu'] = log(out_dict['chi2_qso/nu_NULL'] / out_dict['chi2_qso/nu']) + ### + + if (return_model): + out_dict['model']=adict['model']; out_dict['dmodel']=adict['dmodel'] + + return out_dict diff --git a/mltsp/TCP/Algorithms/randomforest_breiman_v51.f b/mltsp/TCP/Algorithms/randomforest_breiman_v51.f new file mode 100755 index 00000000..b8866187 --- /dev/null +++ b/mltsp/TCP/Algorithms/randomforest_breiman_v51.f @@ -0,0 +1,3434 @@ + program rf5new +c +c Copyright 2002-2003 Leo Breiman and Adele Cutler +c +c This is free open source software but its use,in part or +c in whole,in any commercial product that is sold for profit +c is prohibited without the written consent of Leo Breiman +c and Adele Cutler. +c +c We very much appreciate bug notices and suggested improvements. +c +c leo@stat.berkeley.edu adele@math.usu.edu +c +c SET ALL PARAMETERS FIRST GROUP BELOW. GENERALLY, +c SETTING PARAMETERS TO ZERO TURNS THE CORRESPONDING +c OPTION OFF. +c +c ALL RELEVANT OUTPUT FILES MUST BE GIVEN NAMES--SEE BELOW. +c + integer mdim,ntrain,nclass,maxcat,ntest, + & labelts,labeltr,mtry0,ndsize,jbt,look,lookcls, + & jclasswt,mdim2nd,mselect,imp,interact,impn, + & nprox,nrnn,noutlier,nscale,nprot,missfill,iviz, + & isaverf,isavepar,isavefill,isaveprox, + & irunrf,ireadpar,ireadfill,ireadprox + real code +c +c ------------------------------------------------------- +c CONTROL PARAMETERS +c + parameter( +c DESCRIBE DATA + 1 mdim=9,ntrain=214,nclass=6,maxcat=1, + 1 ntest=0,labelts=0,labeltr=1, +c +c SET RUN PARAMETERS + 2 mtry0=2,ndsize=1,jbt=500,look=100,lookcls=1, + 2 jclasswt=0,mdim2nd=0,mselect=0, +c +c SET IMPORTANCE OPTIONS + 3 imp=1,interact=0,impn=1, +c +c SET PROXIMITY COMPUTATIONS + 4 nprox=1,nrnn=ntrain, +c +c SET OPTIONS BASED ON PROXIMITIES + 5 noutlier=0,nscale=0,nprot=0, +c +c REPLACE MISSING VALUES + 6 code=-999,missfill=0, +c +c GRAPHICS + 7 iviz=0, +c +c SAVING A FOREST + 8 isaverf=0,isavepar=0,isavefill=0,isaveprox=0, +c +c RUNNING A SAVED FOREST + 9 irunrf=0,ireadpar=0,ireadfill=0,ireadprox=0) +c +c ------------------------------------------------------- +c OUTPUT CONTROLS +c + integer isumout,idataout,impfastout,impout,impnout,interout, + & iprotout,iproxout,iscaleout,ioutlierout + parameter( + & isumout = 1,!0/1 1=summary to screen + & idataout= 0,!0/1/2 1=train,2=adds test(7) + & impfastout= 0,!0/1 1=gini fastimp (8) + & impout= 0,!0/1/2 1=imp,2=to screen(9) + & impnout= 0,!0/1 1=impn (10) + & interout= 0,!0/1/2 1=interaction,2=screen(11) + & iprotout= 1,!0/1/2 1=prototypes,2=screen(12) + & iproxout= 1,!0/1/2 1=prox,2=adds test(13) + & iscaleout= 0,!0/1 1=scaling coors (14) + & ioutlierout= 1) !0/1/2 1=train,2=adds test (15) +c +c ------------------------------------------------------- +c DERIVED PARAMETERS (DO NOT CHANGE) +c + integer nsample,nrnodes,mimp,near, + & ifprot,ifscale,iftest,mdim0,ntest0,nprot0,nscale0 + parameter( + & nsample=(2-labeltr)*ntrain, + & nrnodes=2*nsample+1, + & mimp=imp*(mdim-1)+1, + & ifprot=nprot/(nprot-.1), + & ifscale=nscale/(nscale-.1), + & iftest=ntest/(ntest-.1), + & nprot0=(1-ifprot)+nprot, + & nscale0=(1-ifscale)+nscale, + & ntest0=(1-iftest)+ntest, + & mdim0=interact*(mdim-1)+1, + & near=nprox*(nsample-1)+1) +C +c ------------------------------------------------------- +c DIMENSIONING OF ARRAYS +c + real x(mdim,nsample),xts(mdim,ntest0),v5(mdim),v95(mdim), + & tgini(mdim),zt(mdim),avgini(mdim), + & votes(mdim0,jbt),effect(mdim0,mdim0),teffect(mdim0,mdim0), + & hist(0:mdim0,mdim0),g(mdim0),fill(mdim),rinpop(near,jbt), + & dgini(nrnodes),xbestsplit(nrnodes),tnodewt(nrnodes), + & tw(nrnodes),tn(nrnodes),v(nsample),win(nsample),temp(nrnn), + 7 q(nclass,nsample),devout(nclass),classwt(nclass),wr(nclass), + & tmissts(nclass),tmiss(nclass),tclasspop(nclass),wl(nclass), + & rmedout(nclass),tclasscat(nclass,maxcat),qts(nclass,ntest0), + & classpop(nclass,nrnodes),signif(mimp),zscore(mimp),sqsd(mimp), + & avimp(mimp),qimp(nsample),qimpm(nsample,mimp),tout(near), + & outtr(near),xc(maxcat),dn(maxcat),cp(maxcat),cm(maxcat), + & votecat(maxcat),freq(maxcat),wc(nsample),outts(ntest0), + & popclass(nprot0,nclass),protlow(mdim,nprot0,nclass), + & prot(mdim,nprot0,nclass),prothigh(mdim,nprot0,nclass), + & protfreq(mdim,nprot0,nclass,maxcat),rpop(nrnodes), + & protv(mdim,nprot0,nclass),wtx(nsample), + & protvlow(mdim,nprot0,nclass),protvhigh(mdim,nprot0,nclass) + + integer cat(mdim),iv(mdim),msm(mdim), + & muse(mdim),irnk(mdim,jbt),missing(mdim,near),a(mdim,nsample), + & asave(mdim,nsample),b(mdim,nsample), + & cl(nsample),out(nsample),nodextr(nsample),nodexvr(nsample), + & jin(nsample),joob(nsample),pjoob(nsample),ndbegin(near,jbt), + & jvr(nsample),jtr(nsample),jest(nsample),ibest(nrnn), + & isort(nsample),loz(near,nrnn), + & ta(nsample),ncase(nsample),idmove(nsample),kpop(nrnodes), + & jests(ntest0),jts(ntest0),iwork(near), + & nodexts(ntest0),clts(ntest0),imax(ntest0),jinb(near,jbt), + & bestsplitnext(nrnodes),bestvar(nrnodes),bestsplit(nrnodes), + & nodestatus(nrnodes),nodepop(nrnodes),nodestart(nrnodes), + & nodeclass(nrnodes),parent(nrnodes),treemap(2,nrnodes), + & ncts(nclass),nc(nclass),mtab(nclass,nclass),ncn(near), + & its(nsample),jpur(nrnn),npend(nclass),inear(nrnn), + & nrcat(maxcat),kcat(maxcat),ncatsplit(maxcat), + & nbestcat(maxcat,nrnodes),ncp(near),nodexb(near,jbt), + & npcase(near,jbt),ncount(near,jbt),nod(nrnodes),nmfmax, + & ncsplit,ncmax,nmissfill,ndimreps,nmf,nmd,iseed +c +c ------------------------------------------------------- +c USED IN PROXIMITY AND SCALING +c + double precision prox(near,nrnn),y(near),u(near), + & dl(nscale0),xsc(near,nscale0),red(near),ee(near), + & ev(near,nscale0),ppr(near) +c + character*500 text +c +c ------------------------------------------------------- +c SCALAR DECLARATIONS +c + real errtr,errts,tavg,er,randomu +c + integer mtry,n,m,mdimt,k,j,i,m1,jb,nuse,ndbigtree,jj,mr, + & n0,n1,n2,n3,n4,n5,n6,n7 +c +c ------------------------------------------------------- +c READ OLD TREE STRUCTURE AND/OR PARAMETERS +c + if (irunrf.eq.1) + & open(1,file='savedforest',status='old') + if (ireadpar.eq.1) + & open(2,file='savedparams',status='old') + if (ireadfill.eq.1) + & open(3,file='savedmissfill',status='old') + if (ireadprox.eq.1) + & open(4,file='savedprox',status='old') +c +c ------------------------------------------------------- +c NAME OUTPUT FILES FOR SAVING THE FOREST STRUCTURE +c + if (isaverf.eq.1) + & open(1,file='savedforest',status='new') + if (isavepar.eq.1) + & open(2,file='savedparams',status='new') + if (isavefill.eq.1) + & open(3,file='savedmissfill',status='new') + if (isaveprox.eq.1) + & open(4,file='savedprox',status='new') +c +c ------------------------------------------------------- +c NAME OUTPUT FILES TO SAVE DATA FROM CURRENT RUN +c + if (idataout.ge.1) + & open(7,file='save-data-from-run',status='new') + if (impfastout.eq.1) + & open(8,file='save-impfast',status='new') + if (impout.eq.1) + & open(9,file='save-importance-data',status='new') + if (impnout.eq.1) + & open(10,file='save-caseimp-data',status='new') + if (interout.eq.1) + & open(11,file='save-pairwise-effects',status='new') + if (iprotout.eq.1) + & open(12,file='save-protos',status='new') + if (iproxout.ge.1) + & open(13,file='save-run-proximities',status='new') + if (iscaleout.eq.1) + & open(14,file='save-scale',status='new') + if (ioutlierout.ge.1) + & open(15,file='save-outliers',status='new') + if(iviz.eq.1) then +c the graphics program expects files to be named in the +c following way: + open(21,file='data.txt',status='new') + open(22,file='imp.txt',status='new') + open(23,file='info.txt',status='new') + open(24,file='par.txt',status='new') + open(25,file='scale.txt',status='new') + if (iprotout.eq.1) then + open(26,file='proto.txt',status='new') + open(27,file='protinf.txt',status='new') + endif + if(interact.eq.1) open(28,file='inter.txt',status='new') + if(iproxout.ge.1) open(29,file='prox.txt',status='new') + endif +c +c ------------------------------------------------------- +c READ IN DATA--SEE MANUAL FOR FORMAT +c + open(16, file='data.train', status='old') + do n=1,ntrain + read(16,*) (x(m,n),m=1,mdim),cl(n) + enddo + close(16) + if(ntest.gt.0) then + open(17, file='data.test', status='old') + if(labelts.ne.0) then + do n=1,ntest0 + read(17,*) (xts(m,n),m=1,mdim),clts(n) + enddo + else + do n=1,ntest0 + read(17,*) (xts(m,n),m=1,mdim) + enddo + endif + close(17) + endif +c +c ------------------------------------------------------- +c SELECT SUBSET OF VARIABLES TO USE +c + if(mselect.eq.0) then + mdimt=mdim + do k=1,mdim + msm(k)=k + enddo + endif + if (mselect.eq.1) then +c fill in which variables +c mdimt= +c msm(1)= +c --- +c msm(mdimt)= + endif +c +c ------------------------------------------------------- +c SET CATEGORICAL VALUES +c + do m=1,mdim + cat(m)=1 + enddo +c fill in cat(m) for all variables m for which cat(m)>1 +c do m=1,mdim +c cat(m)=4 +c enddo +c +c ------------------------------------------------------- +c SET CLASS WEIGHTS + + if(jclasswt.eq.0) then + do j=1,nclass + classwt(j)=1 + enddo + endif + if(jclasswt.eq.1) then +c fill in classwt(j) for each j: +c classwt(1)=1. +c classwt(2)=10. + endif +c +c ======================================================= +c ************** END OF USER INPUT ******************** +c ======================================================= +c +c ------------------------------------------------------- +c MISC PARAMETERS (SHOULD NOT USUALLY NEED ADJUSTMENT) + iseed=4351 + call sgrnd(iseed) + nmfmax = 5 !number of iterations (iterative fillin) + ncsplit = 25 !number of random splits (big categoricals) + ncmax = 25 !big categorical has more than ncmax levels +c +c ------------------------------------------------------- +c ERROR CHECKING +c + call checkin(labelts,labeltr,nclass,lookcls,jclasswt, + & mselect,mdim2nd,mdim,imp,impn,interact,nprox,nrnn, + & nsample,noutlier,nscale,nprot,missfill,iviz,isaverf, + & irunrf,isavepar,ireadpar,isavefill,ireadfill,isaveprox, + & ireadprox,isumout,idataout,impfastout,impout,interout, + & iprotout,iproxout,iscaleout,ioutlierout,cat,maxcat,cl) +c +c ------------------------------------------------------- +c SPECIAL CASES - QUERY PARAMETERS OR USE SAVED TREE +c +c query parameters + if(ireadpar.eq.1) goto 888 +c +c use saved tree + if(irunrf.eq.1) goto 999 +c +c ------------------------------------------------------- +c INITIALIZATION +c +c mtry will change if mdim2nd>0, so make it a variable + mtry=mtry0 +c +c nmissfill is the number of missing-value-fillin loops + nmissfill=1 + if(missfill.eq.2) nmissfill=nmfmax +c +c ndimreps is 2 if we want to do variable selection, +c otherwise it's 1 + ndimreps=1 + if(mdim2nd.gt.0) ndimreps=2 +c +c assign weights for equal weighting case +c (use getweights for unequal weighting case) + if(jclasswt.eq.0) then + do k=1,nrnodes + tnodewt(k)=1 + enddo + endif +c + if(labeltr.eq.1) then + do n=1,nsample + wtx(n)=classwt(cl(n)) + enddo + else + do n=1,nsample + wtx(n)=1.0 + enddo + endif +c +c ------------------------------------------------------- +c IF DATA ARE UNLABELED, ADD A SYNTHETIC CLASS +c + if(labeltr.eq.0) then + call createclass(x,cl,ntrain,nsample,mdim) + endif +c +c ------------------------------------------------------- +c COUNT CLASS POPULATIONS +c + call zerv(nc,nclass) + do n=1,nsample + nc(cl(n))=nc(cl(n))+1 + enddo + if(ntest.gt.0.and.labelts.eq.1) then + call zerv(ncts,nclass) + do n=1,ntest0 + ncts(clts(n))=ncts(clts(n))+1 + enddo + endif +c +c ------------------------------------------------------- +c DO PRELIMINARY MISSING DATA +c + if(missfill.eq.1) then + call roughfix(x,v,ncase,mdim,nsample, + & cat,code,nrcat,maxcat,fill) + if(ntest.gt.0) then + call xfill(xts,ntest,mdim,fill,code) + endif + endif + if(missfill.eq.2) then + do n=1,near + do m=1,mdim + if(abs(code-x(m,n)).lt.8.232D-11) then + missing(m,n)=1 + else + missing(m,n)=0 + endif + enddo + enddo + call roughfix(x,v,ncase,mdim,nsample, + & cat,code,nrcat,maxcat,fill) + endif +c +c ------------------------------------------------------- +c TOP OF LOOP FOR ITERATIVE MISSING VALUE FILL OR SUBSET SELECTION +c + do nmd=1,ndimreps + + if(imp.gt.0) then + call zervr(sqsd,mimp) + call zervr(avimp,mimp) + endif + call zervr(avgini,mdim) + if(impn.eq.1) then + call zervr(qimp,nsample) + call zermr(qimpm,nsample,mdim) + endif + if(interact.eq.1) call zermr(votes,mdim,jbt) + + do nmf=1,nmissfill +c +c ------------------------------------------------------- +c INITIALIZE FOR RUN +c + call makea(x,mdim,nsample,cat,isort,v,asave,b,mdimt, + & msm,v5,v95,maxcat) +c + call zermr(q,nclass,nsample) + call zerv(out,nsample) + if(nprox.gt.0) call zermd(prox,near,nrnn) + if(ntest.gt.0) then + call zermr(qts,nclass,ntest) + endif +c +c ======================================================= +c ************** BEGIN MAIN LOOP ********************** +c ======================================================= +c + do jb=1,jbt +c +c ------------------------------------------------------- +c INITIALIZE +c + call zervr(win,nsample) + call zerv(jin,nsample) + call zervr(tclasspop,nclass) +c +c ------------------------------------------------------- +c TAKE A BOOTSTRAP SAMPLE +c + do n=1,nsample + k=int(randomu()*nsample) + if(k.lt.nsample) k=k+1 + win(k)=win(k)+classwt(cl(k)) + jin(k)=jin(k)+1 + tclasspop(cl(k))=tclasspop(cl(k))+classwt(cl(k)) + enddo + do n=1,nsample + if(jin(n).eq.0) out(n)=out(n)+1 +c out(n)=number of trees for which the nth +c obs has been out-of-bag + enddo +c +c ------------------------------------------------------- +c PREPARE TO BUILD TREE +c + call moda(asave,a,nuse,nsample,mdim,cat,maxcat,ncase, + & jin,mdimt,msm) +c +c ------------------------------------------------------- +c MAIN TREE-BUILDING +c + call buildtree(a,b,cl,cat,mdim,nsample,nclass,treemap, + & bestvar,bestsplit,bestsplitnext,dgini,nodestatus,nodepop, + & nodestart,classpop,tclasspop,tclasscat,ta,nrnodes, + & idmove,ndsize,ncase,parent,mtry,nodeclass,ndbigtree, + & win,wr,wl,nuse,kcat,ncatsplit,xc,dn,cp,cm,maxcat, + & nbestcat,msm,mdimt,iseed,ncsplit,ncmax) +c +c ------------------------------------------------------- +c SPLIT X +c + call xtranslate(x,mdim,nrnodes,nsample,bestvar,bestsplit, + & bestsplitnext,xbestsplit,nodestatus,cat,ndbigtree) +c +c ------------------------------------------------------- +c ASSIGN CLASSWEIGHTS TO NODES +c + if(jclasswt.eq.1) then + call getweights(x,nsample,mdim,treemap,nodestatus, + & xbestsplit,bestvar,nrnodes,ndbigtree, + & cat,maxcat,nbestcat,jin,win,tw,tn,tnodewt) + endif +c +c ------------------------------------------------------- +c GET OUT-OF-BAG ESTIMATES +c + call testreebag(x,nsample,mdim,treemap,nodestatus, + & xbestsplit,bestvar,nodeclass,nrnodes,ndbigtree,kpop, + & cat,jtr,nodextr,maxcat,nbestcat,rpop,dgini,tgini,jin, + & wtx) + do n=1,nsample + if(jin(n).eq.0) then +c this case is out-of-bag + q(jtr(n),n)=q(jtr(n),n)+tnodewt(nodextr(n)) + endif + enddo + do k=1,mdimt + m=msm(k) + avgini(m)=avgini(m)+tgini(m) + if(interact.eq.1) votes(m,jb)=tgini(m) + enddo +c +c ------------------------------------------------------- +c DO PRE-PROX COMPUTATION +c + if(nprox.eq.1) then + call preprox(near,nrnodes,jbt,nodestatus,ncount,jb, + & nod,nodextr,nodexb,jin,jinb,ncn,ndbegin,kpop,rinpop, + & npcase,rpop,nsample) + endif +c +c ------------------------------------------------------- +c GET TEST SET ERROR ESTIMATES +c + if(ntest.gt.0) then + call testreelite(xts,ntest,mdim,treemap,nodestatus, + & xbestsplit,bestvar,nodeclass,nrnodes,ndbigtree, + & cat,jts,maxcat,nbestcat,nodexts) + do n=1,ntest0 + qts(jts(n),n)=qts(jts(n),n)+tnodewt(nodexts(n)) + enddo + endif +c +c ------------------------------------------------------- +c GIVE RUNNING OUTPUT +c + if(lookcls.eq.1.and.jb.eq.1) then + write(*,*) 'class counts-training data' + write(*,*) (nc(j),j=1,nclass) + if(ntest.gt.0.and.labelts.eq.1) then + print* + write(*,*) 'class counts-test data' + write(*,*) (ncts(j),j=1,nclass) + endif + endif + if(mod(jb,look).eq.0.or.jb.eq.jbt) then + call comperrtr(q,cl,nsample,nclass,errtr, + & tmiss,nc,jest,out) + if(look.gt.0) then + if(lookcls.eq.1) then + write(*,'(i8,100f10.2)') + & jb,100*errtr,(100*tmiss(j),j=1,nclass) + else + write(*,'(i8,2f10.2)') jb,100*errtr + endif + endif + if(ntest.gt.0) then + call comperrts(qts,clts,ntest,nclass,errts, + & tmissts,ncts,jests,labelts) + if(look.gt.0) then + if(labelts.eq.1) then + if(lookcls.eq.1) then + write(*,'(i8,20f10.2)') jb,100*errts, + & (100*tmissts(j),j=1,nclass) + else + write(*,'(i8,2f10.2)') jb,100*errts + endif + print * + endif + endif + endif + endif +c +c ------------------------------------------------------- +c VARIABLE IMPORTANCE +c + if(imp.eq.1.and.nmf.eq.nmissfill) then + call varimp(x,nsample,mdim,cl,nclass,jin,jtr,impn, + & interact,msm,mdimt,qimp,qimpm,avimp,sqsd, + & treemap,nodestatus,xbestsplit,bestvar,nodeclass,nrnodes, + & ndbigtree,cat,jvr,nodexvr,maxcat,nbestcat,tnodewt, + & nodextr,joob,pjoob,iv) + endif +c +c ------------------------------------------------------- +c SEND SAVETREE DATA TO FILE (IF THIS IS THE FINAL FOREST) +c + if(isaverf.eq.1.and.nmd.eq.ndimreps.and.nmf.eq.nmissfill) then + if(jb.eq.1) then + write(1,*) (cat(m),m=1,mdim) + if(missfill.ge.1) write(1,*) (fill(m),m=1,mdim) + endif + write(1,*) ndbigtree + do n=1,ndbigtree + write(1,*) n,nodestatus(n),bestvar(n),treemap(1,n), + & treemap(2,n),nodeclass(n),xbestsplit(n),tnodewt(n), + & (nbestcat(k,n),k=1,maxcat) + enddo + endif + +c ======================================================= +c ************** END MAIN LOOP ************************ +c ======================================================= + enddo !jb +c +c ------------------------------------------------------- +c FIND PROXIMITIES, FILL IN MISSING VALUES AND ITERATE +c + if(nmf.lt.nmissfill) then + write(*,*) 'nrep',nmf + +c compute proximities between each obs in the training +c set and its nrnn closest neighbors + + call comprox(prox,nodexb,jinb,ndbegin, + & npcase,ppr,rinpop,near,jbt,noutlier,outtr,cl, + & loz,nrnn,wtx,nsample,iwork,ibest) + +c use proximities to impute missing values + + call impute(x,prox,near,mdim, + & maxcat,votecat,cat,nrnn,loz,missing) + endif + enddo !nmf +c +c ------------------------------------------------------- +c COMPUTE IMPORTANCES, SELECT SUBSET AND LOOP BACK +c + if(imp.eq.1) then + call finishimp(mdim,sqsd,avimp,signif, + & zscore,jbt,mdimt,msm) + do m=1,mdimt +c zt(m) is the negative z-score for variable msm(m) + zt(m)=-zscore(msm(m)) + muse(m)=msm(m) + enddo +c sort zt from smallest to largest,and sort muse accordingly + call quicksort(zt,muse,1,mdimt,mdim) +c muse(m) refers to the variable that has the mth-smallest zt +c select the mdim2nd most important variables and iterate + if(mdim2nd.gt.0) then + mdimt=mdim2nd + do m=1,mdimt + msm(m)=muse(m) + enddo + mtry=nint(sqrt(real(mdimt))) + endif + endif + enddo !nmd +c +c ------------------------------------------------------- +c END OF ITERATIONS - NOW ENDGAME +c ------------------------------------------------------- +c +c ------------------------------------------------------- +c NORMALIZE VOTES +c + do j=1,nclass + do n=1,nsample + if(q(j,n).gt.0.0.and.out(n).gt.0) q(j,n)=q(j,n)/real(out(n)) + enddo + if(ntest.gt.0) then + do n=1,ntest0 + qts(j,n)=qts(j,n)/jbt + enddo + endif + enddo +c +c ------------------------------------------------------- +c COMPUTE PROXIMITIES AND SEND TO FILE +c + if(nprox.ge.1) then +c compute proximities between each obs in the training +c set and its nrnn closest neighbors + + call comprox(prox,nodexb,jinb,ndbegin, + & npcase,ppr,rinpop,near,jbt,noutlier,outtr,cl, + & loz,nrnn,wtx,nsample,iwork,ibest) + + if(iproxout.ge.1) then + do n=1,near + write(13,'(i5,500(i5,f10.3))') n,(loz(n,k), + & prox(n,k),k=1,nrnn) + enddo + endif + endif + close(13) +c +c ------------------------------------------------------- +c COMPUTE SCALING COORDINATES AND SEND TO FILE +c + if(nprox.eq.1.and.nscale.gt.0) then + call myscale(loz,prox,xsc,y,u,near,nscale,red,nrnn, + & ee,ev,dl) + if(iscaleout.eq.1)then + do n=1,nscale0 + write(14,'(i5,f10.3)') n,dl(n) + enddo + do n=1,near + write(14,'(3i5,15f10.3)') n,cl(n),jest(n), + & (xsc(n,k),k=1,nscale0) + enddo + close(14) + endif + endif +c +c ------------------------------------------------------- +c COMPUTE CASEWISE VARIABLE IMPORTANCE (FOR GRAPHICS) +c AND SEND TO FILE +c + if(impn.eq.1) then + do n=1,nsample + do m1=1,mdimt + mr=msm(m1) + qimpm(n,mr)=100*(qimp(n)-qimpm(n,mr))/jbt + enddo + if(impnout.eq.1) write(10,'(100f10.3)') + & (qimpm(n,msm(m1)),m1=1,mdimt) + enddo + endif +c +c ------------------------------------------------------- +c SEND IMPORTANCES TO FILE OR SCREEN +c + if(imp.eq.1) then + do k=1,min0(mdimt,25) + m=muse(k) + if(impout.eq.1) write(9,'(i5,10f10.3)')m,100*avimp(m), + & zscore(m),signif(m) + if(impout.eq.2) write(*,'(i5,10f10.3)')m,100*avimp(m), + & zscore(m),signif(m) + enddo + close(9) + endif +c +c ------------------------------------------------------- +c COMPUTE INTERACTIONS AND SEND TO FILE OR SCREEN +c + if(interact.eq.1) then + call compinteract(votes,effect,msm,mdim,mdimt, + & jbt,g,iv,irnk,hist,teffect) + if(interout.eq.1) then + write(11,*)'CODE' + do i=1,mdimt + write(11,*) i,msm(i) + enddo + print* + do i=1,mdimt + m=msm(i) + effect(m,m)=0 + write(11,'(40i5)') i, + & (nint(effect(m,msm(j))),j=1,mdimt) + enddo + close(11) + endif + if(interout.eq.2) then + write(*,*)'CODE' + do i=1,mdimt + write(*,*) i,msm(i) + enddo + print* + do i=1,mdimt + m=msm(i) + effect(m,m)=0 + write(*,'(20i5)') i, + & (nint(effect(m,msm(j))),j=1,mdimt) + enddo + endif + endif +c +c ------------------------------------------------------- +c COMPUTE FASTIMP AND SEND TO FILE +c + if(impfastout.eq.1) then + tavg=0 + do k=1,mdimt + m=msm(k) + tavg=tavg+avgini(m) + enddo + tavg=tavg/mdimt + do k=1,mdimt + m=msm(k) + write(8,*) m,avgini(m)/tavg + enddo + close(8) + endif + +c ------------------------------------------------------- +c COMPUTE PROTOTYPES AND SEND TO FILE +c + if(nprox.ge.1.and.nprot.gt.0) then + call compprot(loz,nrnn,nsample,mdim,its, + & cl,wc,nclass,x,mdimt,msm,temp,cat,maxcat, + & jpur,inear,nprot,protlow,prothigh,prot,protfreq, + & protvlow,protvhigh,protv, + & popclass,npend,freq,v5,v95) +c + if (iprotout.eq.1) then + write(12,'(a5,50i10)') ' ',( + & (nint(popclass(i,j)),i=1,npend(j)),j=1,nclass) + write(12,'(a5,50i10)') ' ',( + & (i,i=1,npend(j)),j=1,nclass) + write(12,'(a5,50i10)') ' ',( + & (j,i=1,npend(j)),j=1,nclass) + do k=1,mdimt + m=msm(k) + if(cat(m).eq.1) then + write(12,'(i5,50f10.3)') k, + & ((prot(m,i,j),protlow(m,i,j), + & prothigh(m,i,j),i=1,npend(j)),j=1,nclass) + else + write(12,'(i5,50f10.3)') k, + & (((protfreq(m,i,j,jj),jj=1,cat(m)), + & i=1,npend(j)),j=1,nclass) + endif + enddo + endif + close (12) +c + if(iprotout.eq.2) then + write(*,'(a5,50i10)') ' ',((nint(popclass(i,j)), + & i=1,npend(j)),j=1,nclass) + do k=1,mdimt + m=msm(k) + if(cat(m).eq.1) then + write(*,'(i5,50f10.3)') k, + & ((prot(m,i,j),protlow(m,i,j), + & prothigh(m,i,j),i=1,npend(j)),j=1,nclass) + else + write(*,'(i5,50f10.3)') k, + & (((protfreq(m,i,j,jj),jj=1,cat(m)), + & i=1,npend(j)),j=1,nclass) + endif + enddo + endif + endif +c +c ------------------------------------------------------- +c COMPUTE OUTLIER MEASURE AND SEND TO FILE +c + if(noutlier.ge.1) then + call locateout(cl,tout,outtr,ncp,isort,devout, + & near,nsample,nclass,rmedout) + if(ioutlierout.ge.1) then + do n=1,near + write(15,'(2i5,f10.3)') n,cl(n), + & amax1(outtr(n),0.0) + enddo + endif + endif + +c ------------------------------------------------------- +c SUMMARY OUTPUT +c + if (isumout.eq.1) then + write(*,*) 'final error rate % ',100*errtr + if(ntest.gt.0.and.labelts.ne.0)then + write(*,*) 'final error test % ',100*errts + endif + print * + write(*,*) 'Training set confusion matrix (OOB):' + call zerm(mtab,nclass,nclass) + do n=1,nsample + if(jest(n).gt.0) mtab(cl(n),jest(n))=mtab(cl(n),jest(n))+1 + enddo + write(*,*) ' true class ' + print * + write(*,'(20i6)') (i,i=1,nclass) + print * + do j=1,nclass + write(*,'(20i6)') j,(mtab(i,j),i=1,nclass) + enddo + print * + if(ntest.gt.0.and.labelts.ne.0) then + call zerm(mtab,nclass,nclass) + do n=1,ntest0 + mtab(clts(n),jests(n))=mtab(clts(n),jests(n))+1 + enddo + write(*,*) 'Test set confusion matrix:' + write(*,*) ' true class ' + print * + write(*,'(20i6)') (i,i=1,nclass) + print * + do j=1,nclass + write(*,'(20i6)') j,(mtab(i,j),i=1,nclass) + enddo + print * + endif + endif +c +c ------------------------------------------------------- +c SEND INFO ON TRAINING AND/OR TEST SET DATA TO FILE +c + if(idataout.ge.1) then + do n=1,nsample + write(7,'(3i5,5000f10.3)') n,cl(n),jest(n), + & (q(j,n),j=1,nclass),(x(m,n),m=1,mdim) + enddo + endif + if(idataout.eq.2.and.ntest.gt.0) then + if(labelts.eq.1) then + do n=1,ntest0 + write(7,'(3i5,1000f10.3)') n,clts(n),jests(n), + & (qts(j,n),j=1,nclass),(xts(m,n),m=1,mdim) + enddo + else + do n=1,ntest0 + write(7,'(2i5,1000f10.3)') n,jests(n), + & (qts(j,n),j=1,nclass),(xts(m,n),m=1,mdim) + enddo + endif + endif + close(7) +c +c ------------------------------------------------------- +c SEND GRAPHICS INFO TO FILES +c + if(iviz.eq.1) then + do n=1,nsample + write(21,'(1000f10.3)') (x(msm(m),n),m=1,mdimt) + enddo + do n=1,nsample + write(22,'(100f10.3)')(qimpm(n,msm(m1)),m1=1,mdimt) + enddo + do n=1,nsample + write(23,'(3i5,5000f10.3)') n,cl(n),jest(n), + & (q(j,n),j=1,nclass) + enddo + write(24,*) nsample,mdimt,nscale,nclass,mdimt,nprot,nrnn + do n=1,near + write(25,'(50f10.3)') (xsc(n,k),k=1,nscale0) + enddo + if (iprotout.eq.1) then + do j=1,nclass + do i=1,npend(j) + write(26,'(3i5,5000f10.3)') j,i,1,(protv(msm(m),i,j),m=1,mdimt) + write(26,'(3i5,5000f10.3)') j,i,2,(protvlow(msm(m),i,j),m=1,mdimt) + write(26,'(3i5,5000f10.3)') j,i,3,(protvhigh(msm(m),i,j),m=1,mdimt) + write(27,'(i5)') nint(popclass(i,j)) + enddo + enddo + endif + if(interact.eq.1) then + do i=1,mdimt + m=msm(i) + effect(m,m)=0 + write(28,'(40i5)') + & (nint(effect(m,msm(j))),j=1,mdimt) + enddo + endif + if(iproxout.ge.1) then + do n=1,nsample +c write(29,'(5000(i5,f10.3))') (loz(n,k),prox(n,k),k=1,nrnn) +c NEW???: + write(29,'(5000(i5,f10.3))') (k,prox(n,k),k=1,nrnn) + enddo + endif + endif +c +c ------------------------------------------------------- +c SEND FILL TO FILE (ROUGH FILL ONLY) +c + if(isavefill.eq.1.and.missfill.eq.1) then + write(3,*) (fill(m),m=1,mdim) + endif +c +c ------------------------------------------------------- +c SEND RUN PARAMETERS TO FILE +c + if(isavepar.eq.1) then + write(2,*) ntrain,mdim,maxcat,nclass,jbt, + & jclasswt,missfill,code,nrnodes, + & 100*errtr +c +c type in comments up to 500 characters long +c between the ' ' in the line below. +c + write(2,*) 'this is a test run to verify that my + & descriptive output works.' + close (2) + endif +c +c ------------------------------------------------------- +c END OF USUAL RUN +c +c +c ------------------------------------------------------- +c READ RUN PARAMETERS AND PRINT TO SCREEN +c +888 if(ireadpar.eq.1) then + read(2,*) n0,n1,n2,n3,n4,n5,n6,n7,er + write(*,*) 'parameters' + write(*,*) 'nsample=' ,n0 + write(*,*) 'mdim= ' ,n1 + write(*,*) 'maxcat=',n2 + write(*,*) 'nclass=',n3 + write(*,*) 'jbt= ' ,n4 + write(*,*) 'jclasswt=',n5 + write(*,*) 'code=' ,n6 + write(*,*) 'nrnodes=' ,n7 + print * + write(*,*) 'out-of-bag error=',er,'%' + print * + read(2,'(500a)') text + write(*,*) text +c + stop +c + endif +c +c ------------------------------------------------------- +c RERUN OLD RANDOM FOREST +c +999 if(irunrf.eq.1.and.ntest.gt.0) then + call runforest(mdim,ntest,nclass,maxcat,nrnodes, + & labelts,jbt,clts,xts,xbestsplit,qts,treemap,nbestcat, + & nodestatus,cat,nodeclass,jts,jests,bestvar,tmissts,ncts, + & fill,missfill,code,errts,tnodewt,outts,idataout,imax, + & look,lookcls,nodexts,isumout,mtab) + endif +c +c ======================================================= +c ************** END MAIN ****************************** +c ======================================================= +c + end +c +c ======================================================= +c ************** SUBROUTINES AND FUNCTIONS ************ +c ======================================================= +c +c ------------------------------------------------------- + subroutine runforest(mdim,ntest,nclass,maxcat,nrnodes, + & labelts,jbt,clts,xts,xbestsplit,qts,treemap,nbestcat, + & nodestatus,cat,nodeclass,jts,jests,bestvar,tmissts,ncts, + & fill,missfill,code,errts,tnodewt,outts,idataout,imax, + & look,lookcls,nodexts,isumout,mtab) +c +c reads a forest file and runs new data through it +c + real xts(mdim,ntest),xbestsplit(nrnodes),tmissts(nclass), + & qts(nclass,ntest),fill(mdim),tnodewt(nrnodes),outts(ntest) +c + integer treemap(2,nrnodes),nodestatus(nrnodes), + & cat(mdim),nodeclass(nrnodes),jests(ntest), + & bestvar(nrnodes),jts(ntest),clts(ntest),nodexts(nrnodes), + & ncts(nclass),imax(ntest),nbestcat(maxcat,nrnodes), + & isumout,mtab(nclass,nclass) + +c + integer mdim,ntest,nclass,maxcat,nrnodes,labelts, + & jbt,missfill,look,lookcls,idataout + real errts,code + integer m,j,n,jb,ndbigtree,idummy + call zermr(qts,nclass,ntest) +c + read(1,*) (cat(m),m=1,mdim) +c + if(missfill.eq.1) then + read(1,*) (fill(m),m=1,mdim) +c fast fix on the test data - + call xfill(xts,ntest,mdim,fill,code) + endif +c + if(labelts.eq.1) then + do n=1,ntest + ncts(clts(n))=ncts(clts(n))+1 + enddo + endif +c +c START DOWN FOREST +c + do jb=1,jbt + read(1,*) ndbigtree + do n=1,ndbigtree + read(1,*) idummy,nodestatus(n),bestvar(n), + & treemap(1,n),treemap(2,n),nodeclass(n), + & xbestsplit(n),tnodewt(n),(nbestcat(j,n),j=1,maxcat) + enddo + + call testreelite(xts,ntest,mdim,treemap,nodestatus, + & xbestsplit,bestvar,nodeclass,nrnodes,ndbigtree, + & cat,jts,maxcat,nbestcat,nodexts) + do n=1,ntest + qts(jts(n),n)=qts(jts(n),n)+tnodewt(nodexts(n)) + enddo + + if(labelts.eq.1) then + if(mod(jb,look).eq.0.and.jb.le.jbt) then + call comperrts(qts,clts,ntest,nclass,errts, + & tmissts,ncts,jests,labelts) + if(lookcls.eq.1) then + write(*,'(i8,100f10.2)') + & jb,100*errts,(100*tmissts(j),j=1,nclass) + else + write(*,'(i8,2f10.2)') jb,100*errts + endif + endif + endif +c + enddo !jb +c + if(idataout.eq.2) then + if(labelts.eq.1) then + do n=1,ntest + write(7,'(3i5,1000f10.3)') n,clts(n),jests(n), + & (qts(j,n),j=1,nclass),(xts(m,n),m=1,mdim) + enddo + else + do n=1,ntest + write(7,'(3i5,1000f10.3)') n,jests(n), + & (qts(j,n),j=1,nclass),(xts(m,n),m=1,mdim) + enddo + endif + endif + close(7) + if (isumout.eq.1) then + if(labelts.eq.1)then + write(*,*) 'final error test % ',100*errts + call zerm(mtab,nclass,nclass) + do n=1,ntest + mtab(clts(n),jests(n))=mtab(clts(n),jests(n))+1 + enddo + write(*,*) 'Test set confusion matrix:' + write(*,*) ' true class ' + print * + write(*,'(20i6)') (j,j=1,nclass) + print * + do n=1,nclass + write(*,'(20i6)') n,(mtab(j,n),j=1,nclass) + enddo + print * + endif + endif + end +c +c ------------------------------------------------------- + subroutine makea(x,mdim,nsample,cat,isort,v,asave,b,mdimt, + & msm,v5,v95,maxcat) +c + real x(mdim,nsample),v(nsample),v5(mdim),v95(mdim) + integer cat(mdim),isort(nsample),asave(mdim,nsample), + & b(mdim,nsample),msm(mdim) + integer mdim,nsample,mdimt,maxcat + integer k,mvar,n,n1,n2,ncat,jj +c +c submakea constructs the mdim x nsample integer array a. +c If there are less than 32,000 cases, this can be declared +c integer*2,otherwise integer*4. For each numerical variable +c with values x(m,n),n=1,...,nsample, the x-values are sorted +c from lowest to highest. Denote these by xs(m,n). +c Then asave(m,n) is the case number in which +c xs(m,n) occurs. The b matrix is also constructed here. If the mth +c variable is categorical, then asave(m,n) is the category of the nth +c case number. +c +c input: x,cat +c output: a,b +c work: v,isort +c + do k=1,mdimt + mvar=msm(k) + if (cat(mvar).eq.1) then + do n=1,nsample + v(n)=x(mvar,n) + isort(n)=n + enddo + call quicksort(v,isort,1,nsample,nsample) +c this sorts the v(n) in ascending order. isort(n) is the +c case number of that v(n) nth from the lowest (assume +c the original case numbers are 1,2,...). + n1=nint(.05*nsample) + if(n1.lt.1) n1=1 + v5(mvar)=v(n1) + n2=nint(.95*nsample) + if(n2.gt.nsample) n2=nsample + v95(mvar)=v(n2) + do n=1,nsample-1 + n1=isort(n) + n2=isort(n+1) + asave(mvar,n)=n1 + if(n.eq.1) b(mvar,n1)=1 + if (v(n).lt.v(n+1)) then + b(mvar,n2)=b(mvar,n1)+1 + else + b(mvar,n2)=b(mvar,n1) + endif + enddo + asave(mvar,nsample)=isort(nsample) + else + do ncat=1,nsample + jj=nint(x(mvar,ncat)) + asave(mvar,ncat)=jj + enddo + endif + enddo +c + end +c +c ------------------------------------------------------- + subroutine moda(asave,a,nuse,nsample,mdim,cat,maxcat, + & ncase,jin,mdimt,msm) +c + integer asave(mdim,nsample),a(mdim,nsample),cat(mdim), + & jin(nsample),ncase(nsample),msm(mdim) + integer nuse,nsample,mdim,mdimt,maxcat + integer n,jj,m,k,nt,j +c +c copy rows msm(1),...,msm(mdimt) of asave into the same +c rows of a +c + nuse=0 + do n=1,nsample + do k=1,mdimt + m=msm(k) + a(m,n)=asave(m,n) + enddo + if(jin(n).ge.1) nuse=nuse+1 + enddo + do jj=1,mdimt + m=msm(jj) + k=1 + nt=1 + if(cat(m).eq.1) then + do n=1,nsample + if(k.gt.nsample) goto 37 + if(jin(a(m,k)).ge.1) then + a(m,nt)=a(m,k) + k=k+1 + else + do j=1,nsample-k + if(jin(a(m,k+j)).ge.1) then + a(m,nt)=a(m,k+j) + k=k+j+1 + goto 28 + endif + enddo + endif +28 continue + nt=nt+1 + if(nt.gt.nuse) goto 37 + enddo +37 continue + endif + enddo + if(maxcat.gt.1) then + k=1 + nt=1 + do n=1,nsample + if(jin(k).ge.1) then + ncase(nt)=k + k=k+1 + else + do jj=1,nsample-k + if(jin(k+jj).ge.1) then + ncase(nt)=k+jj + k=k+jj+1 + goto 58 + endif + enddo + endif +58 continue + nt=nt+1 + if(nt.gt.nuse) goto 85 + enddo +85 continue + endif + end +c +c ------------------------------------------------------- + subroutine buildtree(a,b,cl,cat,mdim,nsample,nclass,treemap, + & bestvar,bestsplit,bestsplitnext,dgini,nodestatus,nodepop, + & nodestart,classpop,tclasspop,tclasscat,ta,nrnodes, + & idmove,ndsize,ncase,parent,mtry,nodeclass,ndbigtree, + & win,wr,wl,nuse,kcat,ncatsplit,xc,dn,cp,cm,maxcat, + & nbestcat,msm,mdimt,iseed,ncsplit,ncmax) +c +c Buildtree consists of repeated calls to findbestsplit and movedata. +c Findbestsplit does just that--it finds the best split of the current +c node. Movedata moves the data in the split node right and left so +c that the data corresponding to each child node is contiguous. +c +c The buildtree bookkeeping is different from that in Friedman's +c original CART program: +c ncur is the total number of nodes to date +c nodestatus(k)=1 if the kth node has been split. +c nodestatus(k)=2 if the node exists but has not yet been split +c and=-1 of the node is terminal. +c A node is terminal if its size is below a threshold value, or if it +c is all one class,or if all the x-values are equal. If the current +c node k is split,then its children are numbered ncur+1 (left), and +c ncur+2(right),ncur increases to ncur+2 and the next node to be split +c is numbered k+1. When no more nodes can be split,buildtree +c returns to the main program. +c + integer cl(nsample),cat(mdim),ncatsplit(maxcat), + & treemap(2,nrnodes),bestvar(nrnodes),nodeclass(nrnodes), + & bestsplit(nrnodes),nodestatus(nrnodes),ta(nsample), + & nodepop(nrnodes),nodestart(nrnodes),idmove(nsample), + & bestsplitnext(nrnodes),ncase(nsample),parent(nrnodes), + & kcat(maxcat),msm(mdim),iseed,ncsplit,ncmax + + integer a(mdim,nsample),b(mdim,nsample) + real tclasspop(nclass),classpop(nclass,nrnodes), + & tclasscat(nclass,maxcat),win(nsample),wr(nclass), + & wl(nclass),dgini(nrnodes),xc(maxcat),dn(maxcat), + & cp(maxcat),cm(maxcat) + integer mdim,nsample,nclass,nrnodes,ndsize, + & mtry,ndbigtree,nuse,maxcat,mdimt,j,ncur, + & kbuild,ndstart,ndend,jstat + integer msplit,nbest + integer lcat,i,kn,k,n,ndendl,nc + real decsplit,popt1,popt2,pp + integer nbestcat(maxcat,nrnodes) +c + call zerv(nodestatus,nrnodes) + call zerv(nodestart,nrnodes) + call zerv(nodepop,nrnodes) + call zermr(classpop,nclass,nrnodes) + call zerm(treemap,2,nrnodes) + call zerm(nbestcat,maxcat,nrnodes) + do j=1,nclass + classpop(j,1)=tclasspop(j) + enddo +c + ncur=1 + nodestart(1)=1 + nodepop(1)=nuse + nodestatus(1)=2 +c start main loop +c + do 30 kbuild=1,nrnodes + if (kbuild.gt.ncur) goto 50 + if (nodestatus(kbuild).ne.2) goto 30 +c initialize for next call to findbestsplit +c + ndstart=nodestart(kbuild) + ndend=ndstart+nodepop(kbuild)-1 + do j=1,nclass + tclasspop(j)=classpop(j,kbuild) + enddo + jstat=0 +c + call findbestsplit(a,b,cl,mdim,nsample,nclass,cat, + & ndstart,ndend,tclasspop,tclasscat,msplit,decsplit,nbest, + & ncase,jstat,mtry,win,wr,wl,kcat,ncatsplit,xc,dn, + & cp,cm,maxcat,msm,mdimt,iseed,ncsplit,ncmax) +c + if(jstat.eq.1) then + nodestatus(kbuild)=-1 + goto 30 + else + bestvar(kbuild)=msplit + dgini(kbuild)=decsplit +c + if (cat(msplit).eq.1) then +c continuous + bestsplit(kbuild)=a(msplit,nbest) + bestsplitnext(kbuild)=a(msplit,nbest+1) + else +c categorical + lcat=cat(msplit) + do i=1,lcat + nbestcat(i,kbuild)=ncatsplit(i) + enddo + endif + endif + call movedata(a,ta,mdim,nsample,ndstart,ndend,idmove,ncase, + & msplit,cat,nbest,ndendl,ncatsplit,maxcat,mdimt,msm) +c +c leftnode no.=ncur+1,rightnode no.=ncur+2. +c + nodepop(ncur+1)=ndendl-ndstart+1 + nodepop(ncur+2)=ndend-ndendl + nodestart(ncur+1)=ndstart + nodestart(ncur+2)=ndendl+1 +c +c +c find class populations in both nodes + do n=ndstart,ndendl + nc=ncase(n) + j=cl(nc) + classpop(j,ncur+1)=classpop(j,ncur+1)+win(nc) + enddo + do n=ndendl+1,ndend + nc=ncase(n) + j=cl(nc) + classpop(j,ncur+2)=classpop(j,ncur+2)+win(nc) + enddo +c +c check on nodestatus +c + nodestatus(ncur+1)=2 + nodestatus(ncur+2)=2 + if (nodepop(ncur+1).le.ndsize) nodestatus(ncur+1)=-1 + if (nodepop(ncur+2).le.ndsize) nodestatus(ncur+2)=-1 + popt1=0 + popt2=0 + do j=1,nclass + popt1=popt1+classpop(j,ncur+1) + popt2=popt2+classpop(j,ncur+2) + enddo + do j=1,nclass + if (abs(classpop(j,ncur+1)-popt1) + & .lt.8.232D-11) nodestatus(ncur+1)=-1 + if (abs(classpop(j,ncur+2)-popt2) + & .lt.8.232D-11) nodestatus(ncur+2)=-1 + enddo + treemap(1,kbuild)=ncur+1 + treemap(2,kbuild)=ncur+2 + parent(ncur+1)=kbuild + parent(ncur+2)=kbuild + nodestatus(kbuild)=1 + ncur=ncur+2 + if (ncur.ge.nrnodes) goto 50 +30 continue +50 continue + ndbigtree=nrnodes + do k=nrnodes,1,-1 + if (nodestatus(k).eq.0) ndbigtree=ndbigtree-1 + if (nodestatus(k).eq.2) nodestatus(k)=-1 + enddo + do kn=1,ndbigtree + if(nodestatus(kn).eq.-1) then + pp=0 + do j=1,nclass + if(classpop(j,kn).gt.pp) then + nodeclass(kn)=j + pp=classpop(j,kn) + endif + enddo + endif + enddo + end +c +c ------------------------------------------------------- + subroutine findbestsplit(a,b,cl,mdim,nsample,nclass,cat, + & ndstart,ndend,tclasspop,tclasscat,msplit,decsplit,nbest, + & ncase,jstat,mtry,win,wr,wl,kcat,ncatsplit,xc,dn, + & cp,cm,maxcat,msm,mdimt,iseed,ncsplit,ncmax) +c +c For the best split,msplit is the variable split on. decsplit is the dec. in impurity. +c If msplit is numerical,nsplit is the case number of value of msplit split on, +c and nsplitnext is the case number of the next larger value of msplit. If msplit is +c categorical,then nsplit is the coding into an integer of the categories going left. +c + integer a(mdim,nsample),b(mdim,nsample),iseed,ncsplit,ncmax +c + integer cl(nsample),cat(mdim),ncase(nsample),msm(mdim), + & kcat(maxcat),ncatsplit(maxcat),icat(32) +c + integer mdim,nsample,nclass,ndstart,ndend,mdimt,mtry, + & msplit,nbest,jstat,maxcat,i,j,k,mv,mvar,nc, + & lcat,nnz,nhit,ncatsp,nsp +c + real tclasspop(nclass),tclasscat(nclass,maxcat), + & win(nsample),wr(nclass),wl(nclass),xc(maxcat), + & dn(maxcat),cp(maxcat),cm(maxcat) +c + real decsplit,pno,pdo,rrn,rrd,rln,rld,u, + & crit0,critmax,crit,su +c + real randomu +c + external unpack +c +c compute initial values of numerator and denominator of Gini + pno=0 + pdo=0 + do j=1,nclass + pno=pno+tclasspop(j)*tclasspop(j) + pdo=pdo+tclasspop(j) + enddo + crit0=pno/pdo + jstat=0 +c start main loop through variables to find best split + critmax=-1.0e20 +c + do 20 mv=1,mtry + k=int(mdimt*randomu())+1 + mvar=msm(k) + if(cat(mvar).eq.1) then +c it's not a categorical variable: + rrn=pno + rrd=pdo + rln=0 + rld=0 + call zervr(wl,nclass) + do j=1,nclass + wr(j)=tclasspop(j) + enddo + do nsp=ndstart,ndend-1 + nc=a(mvar,nsp) + u=win(nc) + k=cl(nc) + rln=rln+u*(2*wl(k)+u) + rrn=rrn+u*(-2*wr(k)+u) + rld=rld+u + rrd=rrd-u + wl(k)=wl(k)+u + wr(k)=wr(k)-u + if (b(mvar,nc).lt.b(mvar,a(mvar,nsp+1))) then + if(amin1(rrd,rld).gt.1.0e-5) then + crit=(rln/rld)+(rrn/rrd) + if (crit.gt.critmax) then + nbest=nsp + critmax=crit + msplit=mvar + + endif + endif + endif + enddo + + else +c it's a categorical variable: +c compute the decrease in impurity given by categorical splits + lcat=cat(mvar) + call zermr(tclasscat,nclass,maxcat) + do nsp=ndstart,ndend + nc=ncase(nsp) + k=a(mvar,ncase(nsp)) + tclasscat(cl(nc),k)=tclasscat(cl(nc),k)+win(nc) + enddo + nnz=0 + do i=1,lcat + su=0 + do j=1,nclass + su=su+tclasscat(j,i) + enddo + dn(i)=su + nnz=nnz+1 + enddo + if (nnz.eq.1) then + critmax=-1.0e25 + goto 20 + endif + if(lcat.lt.ncmax) then + call catmax(pdo,tclasscat,tclasspop,nclass,lcat, + & ncatsp,critmax,nhit,maxcat) + if(nhit.eq.1) then + msplit=mvar + call unpack(lcat,ncatsp,icat) + call zerv(ncatsplit,maxcat) + do k=1,lcat + ncatsplit(k)=icat(k) + enddo + endif + else + call catmaxr(ncsplit,tclasscat,tclasspop,icat, + & nclass,lcat,maxcat,ncatsplit,critmax,pdo,nhit, + & iseed) + if(nhit.eq.1)then + msplit=mvar + endif + endif + endif !cat +20 continue +25 continue + decsplit=critmax-crit0 + if (critmax.lt.-1.0e10) jstat=1 + end +c +c ------------------------------------------------------- + subroutine catmaxr(ncsplit,tclasscat,tclasspop,icat, + & nclass,lcat,maxcat,ncatsplit,critmax,pdo,nhit,iseed) +c +c this routine takes the best of ncsplit random splits +c + real tclasscat(nclass,maxcat),tclasspop(nclass),tmpclass(100) + real critmax,pdo + integer icat(32),iseed + integer ncsplit,nclass,lcat,maxcat,ncatsplit(maxcat),nhit +c + integer irbit + real pln,pld,prn,tdec + integer j,n,i,k +c + nhit=0 + do n=1,ncsplit +c generate random split + do k=1,lcat + icat(k)=irbit(iseed) !icat(k) is bernouilli + enddo + do j=1,nclass + tmpclass(j)=0 + do k=1,lcat + if(icat(k).eq.1) then + tmpclass(j)=tmpclass(j)+tclasscat(j,k) + endif + enddo + enddo + pln=0 + pld=0 + do j=1,nclass + pln=pln+tmpclass(j)*tmpclass(j) + pld=pld+tmpclass(j) + enddo + prn=0 + do j=1,nclass + tmpclass(j)=tclasspop(j)-tmpclass(j) + prn=prn+tmpclass(j)*tmpclass(j) + enddo + tdec=(pln/pld)+(prn/(pdo-pld)) + if (tdec.gt.critmax) then + critmax=tdec + nhit=1 + do k=1,lcat + ncatsplit(k)=icat(k) + enddo + endif + enddo + end +c +c ------------------------------------------------------- + subroutine catmax(pdo,tclasscat,tclasspop,nclass,lcat, + & ncatsp,critmax,nhit,maxcat) +c +c this finds the best split of a categorical variable +c with lcat categories and nclass classes, where +c tclasscat(j,k) is the number of cases in +c class j with category value k. The method uses an +c exhaustive search over all partitions of the category +c values. For the two class problem,there is a faster +c exact algorithm. If lcat.ge.10,the exhaustive search +c gets slow and there is a faster iterative algorithm. + real tclasscat(nclass,maxcat),tclasspop(nclass),tmpclass(100) + integer icat(32),n,lcat,nhit,l,j,ncatsp,nclass,maxcat + real critmax,pdo,pln,pld,prn,tdec +c + external unpack + nhit=0 + do n=1,(2**(lcat-1))-1 + call unpack(lcat,n,icat) + do j=1,nclass + tmpclass(j)=0 + do l=1,lcat + if(icat(l).eq.1) then + tmpclass(j)=tmpclass(j)+tclasscat(j,l) + endif + enddo + enddo + pln=0 + pld=0 + do j=1,nclass + pln=pln+tmpclass(j)*tmpclass(j) + pld=pld+tmpclass(j) + enddo + prn=0 + do j=1,nclass + tmpclass(j)=tclasspop(j)-tmpclass(j) + prn=prn+tmpclass(j)*tmpclass(j) + enddo + tdec=(pln/pld)+(prn/(pdo-pld)) + if (tdec.gt.critmax) then + critmax=tdec + ncatsp=n + nhit=1 + endif + enddo + end +c +c ------------------------------------------------------- + subroutine movedata(a,ta,mdim,nsample,ndstart,ndend,idmove, + & ncase,msplit,cat,nbest,ndendl,ncatsplit,maxcat,mdimt,msm) +c +c movedata is the heart of the buildtree construction. +c Based on the best split the data corresponding to the +c current node is moved to the left if it belongs to the +c left child and right if it belongs to the right child. + integer a(mdim,nsample),ta(nsample),idmove(nsample), + & ncase(ndend),cat(mdim),ncatsplit(maxcat),msm(mdimt) + integer mdim,ndstart,ndend,nsample,msplit,nbest,ndendl + integer maxcat,mdimt,nsp,nc,ms,msh,k,n,ih +c compute idmove=indicator of case nos. going left +c + if (cat(msplit).eq.1) then + do nsp=ndstart,nbest + nc=a(msplit,nsp) + idmove(nc)=1 + enddo + do nsp=nbest+1,ndend + nc=a(msplit,nsp) + idmove(nc)=0 + enddo + ndendl=nbest + else + ndendl=ndstart-1 + do nsp=ndstart,ndend + nc=ncase(nsp) + if (ncatsplit(a(msplit,nc)).eq.1) then + idmove(nc)=1 + ndendl=ndendl+1 + else + idmove(nc)=0 + endif + enddo + endif + +c shift case. nos. right and left for numerical variables. + + do ms=1,mdimt + msh=msm(ms) + if (cat(msh).eq.1) then + k=ndstart-1 + do n=ndstart,ndend + ih=a(msh,n) + if (idmove(ih).eq.1) then + k=k+1 + ta(k)=a(msh,n) + endif + enddo + do n=ndstart,ndend + ih=a(msh,n) + if (idmove(ih).eq.0) then + k=k+1 + ta(k)=a(msh,n) + endif + enddo + do k=ndstart,ndend + a(msh,k)=ta(k) + enddo + endif + enddo + +c compute case nos. for right and left nodes. + + if (cat(msplit).eq.1) then + do n=ndstart,ndend + ncase(n)=a(msplit,n) + enddo + else + k=ndstart-1 + do n=ndstart,ndend + if (idmove(ncase(n)).eq.1) then + k=k+1 + ta(k)=ncase(n) + endif + enddo + do n=ndstart,ndend + if (idmove(ncase(n)).eq.0) then + k=k+1 + ta(k)=ncase(n) + endif + enddo + do k=ndstart,ndend + ncase(k)=ta(k) + enddo + endif + end + +c +c ------------------------------------------------------- + subroutine xtranslate(x,mdim,nrnodes,nsample,bestvar, + & bestsplit,bestsplitnext,xbestsplit,nodestatus,cat, + & ndbigtree) +c +c xtranslate takes the splits on numerical variables and translates them +c back into x-values. It also unpacks each categorical split into a 32- +c dimensional vector with components of zero or one--a one indicates +c that the corresponding category goes left in the split. +c + integer cat(mdim),bestvar(nrnodes),bestsplitnext(nrnodes), + & nodestatus(nrnodes),bestsplit(nrnodes) + real x(mdim,nsample),xbestsplit(nrnodes) + integer mdim,nrnodes,nsample,ndbigtree,k,m +c + do k=1,ndbigtree + if (nodestatus(k).eq.1) then + m=bestvar(k) + if (cat(m).eq.1) then + xbestsplit(k)=(x(m,bestsplit(k))+ + & x(m,bestsplitnext(k)))/2 + else + xbestsplit(k)=real(bestsplit(k)) + endif + endif + enddo + end +c +c ------------------------------------------------------- + subroutine getweights(x,nsample,mdim,treemap,nodestatus, + & xbestsplit,bestvar,nrnodes,ndbigtree, + & cat,maxcat,nbestcat,jin,win,tw,tn,tnodewt) +c + real x(mdim,nsample),xbestsplit(nrnodes), + & win(nsample),tw(ndbigtree),tn(ndbigtree),tnodewt(ndbigtree) + integer nsample,mdim,nrnodes,ndbigtree,maxcat + integer treemap(2,nrnodes),bestvar(nrnodes), + & cat(mdim),nodestatus(nrnodes),jin(nsample) +c + integer nbestcat(maxcat,nrnodes) + integer jcat,n,kt,k,m + call zervr(tw,ndbigtree) + call zervr(tn,ndbigtree) + do n=1,nsample + if(jin(n).ge.1) then + kt=1 + do k=1,ndbigtree + if (nodestatus(kt).eq.-1) then + tw(kt)=tw(kt)+win(n) + tn(kt)=tn(kt)+jin(n) + goto 100 + endif + m=bestvar(kt) + if (cat(m).eq.1) then + if (x(m,n).le.xbestsplit(kt)) then + kt=treemap(1,kt) + else + kt=treemap(2,kt) + endif + else + jcat=nint(x(m,n)) + if (nbestcat(jcat,kt).eq.1) then + kt=treemap(1,kt) + else + kt=treemap(2,kt) + endif + endif + enddo +100 continue + endif + enddo + do n=1,ndbigtree + if(nodestatus(n).eq.-1) tnodewt(n)=tw(n)/tn(n) + enddo + end +c +c ------------------------------------------------------- + subroutine testreebag(x,nsample,mdim,treemap,nodestatus, + & xbestsplit,bestvar,nodeclass,nrnodes,ndbigtree,kpop, + & cat,jtr,nodextr,maxcat,nbestcat,rpop,dgini,tgini,jin, + & wtx) +c +c predicts the class of all objects in x +c +c input: + real x(mdim,nsample),xbestsplit(nrnodes),dgini(nrnodes), + & rpop(nrnodes),wtx(nsample) + integer treemap(2,nrnodes),bestvar(nrnodes), + & nodeclass(nrnodes),cat(mdim),nodestatus(nrnodes), + & nbestcat(maxcat,nrnodes),jin(nsample),kpop(nrnodes) +c + integer nsample,mdim,nrnodes,ndbigtree,maxcat +c +c output: + real tgini(mdim) + integer jtr(nsample),nodextr(nsample) +c +c local + integer n,kt,k,m,jcat +c + call zerv(jtr,nsample) + call zerv(nodextr,nsample) + call zervr(tgini,mdim) + call zervr(rpop,nrnodes) + call zerv(kpop,nrnodes) +c + n=1 +903 kt=1 + do k=1,ndbigtree + if (nodestatus(kt).eq.-1) then + jtr(n)=nodeclass(kt) + nodextr(n)=kt + if(jin(n).gt.0)then + rpop(kt)=rpop(kt)+jin(n) + kpop(kt)=kpop(kt)+1 + endif + goto 100 + endif + m=bestvar(kt) + tgini(m)=tgini(m)+dgini(kt) + if (cat(m).eq.1) then + if (x(m,n).le.xbestsplit(kt)) then + kt=treemap(1,kt) + else + kt=treemap(2,kt) + endif + endif + if(cat(m).gt.1) then + jcat=nint(x(m,n)) + if (nbestcat(jcat,kt).eq.1) then + kt=treemap(1,kt) + else + kt=treemap(2,kt) + endif + endif + enddo !k +100 n=n+1 + if(n.le.nsample) goto 903 + + do m=1,mdim + tgini(m)=tgini(m)/nsample + enddo + + end +c +c ------------------------------------------------------- + subroutine testreelite(xts,ntest,mdim,treemap,nodestatus, + & xbestsplit,bestvar,nodeclass,nrnodes,ndbigtree, + & cat,jts,maxcat,nbestcat,nodexts) +c +c predicts the class of all objects in xts +c +c input: + real xts(mdim,ntest),xbestsplit(nrnodes) + integer treemap(2,nrnodes),bestvar(nrnodes),nodeclass(nrnodes), + & cat(mdim),nodestatus(nrnodes),nbestcat(maxcat,nrnodes) + integer ntest,mdim,nrnodes,ndbigtree,maxcat +c +c output: + integer jts(ntest),nodexts(ntest) +c + integer n,kt,k,m,jcat +c + n=1 +903 kt=1 + do k=1,ndbigtree + if (nodestatus(kt).eq.-1) then + jts(n)=nodeclass(kt) + nodexts(n)=kt + goto 100 + endif + m=bestvar(kt) + if (cat(m).eq.1) then + if (xts(m,n).le.xbestsplit(kt)) then + kt=treemap(1,kt) + else + kt=treemap(2,kt) + endif + endif + if(cat(m).gt.1) then + jcat=nint(xts(m,n)) + if (nbestcat(jcat,kt).eq.1) then + kt=treemap(1,kt) + else + kt=treemap(2,kt) + endif + endif + enddo !k +100 n=n+1 + if(n.le.ntest) goto 903 + end +c +c ------------------------------------------------------- + subroutine testreeimp(x,nsample,mdim,joob,pjoob,nout,mr, + & treemap,nodestatus,xbestsplit,bestvar,nodeclass,nrnodes, + & ndbigtree,cat,jvr,nodexvr,maxcat,nbestcat) +c +c predicts the class of out-of-bag-cases for variable importance +c also computes nodexvr +c +c input: + real x(mdim,nsample),xbestsplit(nrnodes) + integer treemap(2,nrnodes),bestvar(nrnodes),nodeclass(nrnodes), + & cat(mdim),nodestatus(nrnodes),nbestcat(maxcat,nrnodes), + & joob(nout),pjoob(nout) + integer nsample,mdim,nout,mr,nrnodes,ndbigtree,maxcat +c +c output: + integer jvr(nout),nodexvr(nout) +c + integer n,kt,k,m,jcat + real xmn +c + call permobmr(joob,pjoob,nout) + n=1 +904 kt=1 + do k=1,ndbigtree + if (nodestatus(kt).eq.-1) then + jvr(n)=nodeclass(kt) + nodexvr(n)=kt + goto 100 + endif + m=bestvar(kt) + if(m.eq.mr) then + xmn=x(m,pjoob(n)) ! permuted value + else + xmn=x(m,joob(n)) + endif + if (cat(m).eq.1) then + if (xmn.le.xbestsplit(kt)) then + kt=treemap(1,kt) + else + kt=treemap(2,kt) + endif + endif + if(cat(m).gt.1) then + jcat=nint(xmn) + if (nbestcat(jcat,kt).eq.1) then + kt=treemap(1,kt) + else + kt=treemap(2,kt) + endif + endif + enddo !k +100 n=n+1 + if(n.le.nout) goto 904 + end +c +c ------------------------------------------------------- + subroutine permobmr(joob,pjoob,nout) +c +c randomly permute the elements of joob and put them in pjoob +c +c input: + integer joob(nout),nout +c output: + integer pjoob(nout) +c local: + integer j,k,jt + real rnd,randomu +c + do j=1,nout + pjoob(j)=joob(j) + enddo + j=nout +11 rnd=randomu() + k=int(j*rnd) + if(k.lt.j) k=k+1 +c switch j and k + jt=pjoob(j) + pjoob(j)=pjoob(k) + pjoob(k)=jt + j=j-1 + if(j.gt.1) go to 11 + end +c +c ------------------------------------------------------- + subroutine comperrtr(q,cl,nsample,nclass,errtr, + & tmiss,nc,jest,out) +c + integer cl(nsample),nc(nclass),jest(nsample),out(nsample) + real q(nclass,nsample),tmiss(nclass),errtr + integer nsample,nclass + real cmax,ctemp + integer n,j,jmax + call zervr(tmiss,nclass) + errtr=0 + do n=1,nsample + cmax=0 + if(out(n).gt.0) then + do j=1,nclass + ctemp=q(j,n)/out(n) + if(ctemp.gt.cmax) then + jmax=j + cmax=ctemp + endif + enddo + else + jmax=1 + endif + jest(n)=jmax + if (jmax.ne.cl(n)) then + tmiss(cl(n))=tmiss(cl(n))+1 + errtr=errtr+1 + endif + enddo + errtr=errtr/nsample + do j=1,nclass + tmiss(j)=tmiss(j)/nc(j) + enddo + end +c +c ------------------------------------------------------- + subroutine comperrts(qts,clts,ntest,nclass,errts, + & tmissts,ncts,jests,labelts) +c +c + integer clts(ntest),ncts(nclass),jests(ntest) + real qts(nclass,ntest),tmissts(nclass) + integer ntest,nclass,labelts + real errts,cmax + integer n,j,jmax + call zervr(tmissts,nclass) + errts=0 + do n=1,ntest + cmax=0 + do j=1,nclass + if (qts(j,n).gt.cmax) then + jmax=j + cmax=qts(j,n) + endif + enddo + jests(n)=jmax + if(labelts.eq.1) then + if (jmax.ne.clts(n)) then + tmissts(clts(n))=tmissts(clts(n))+1 + errts=errts+1 + endif + endif + enddo + if(labelts.eq.1) then + errts=errts/ntest + do j=1,nclass + tmissts(j)=tmissts(j)/ncts(j) + enddo + endif + end +c +c ------------------------------------------------------- + subroutine createclass(x,cl,ns,nsample,mdim) +c + real x(mdim,nsample) + integer cl(nsample) + integer ns,nsample,mdim + real randomu + integer n,m,k +c + do n=1,ns + cl(n)=1 + enddo + do n=ns+1,nsample + cl(n)=2 + enddo + do n=ns+1,nsample + do m=1,mdim + k=int(randomu()*ns) + if(k.lt.ns) k=k+1 + x(m,n)=x(m,k) + enddo + enddo + end +c +c ------------------------------------------------------- + subroutine varimp(x,nsample,mdim,cl,nclass,jin,jtr,impn, + & interact,msm,mdimt,qimp,qimpm,avimp,sqsd, + & treemap,nodestatus,xbestsplit,bestvar,nodeclass,nrnodes, + & ndbigtree,cat,jvr,nodexvr,maxcat,nbestcat,tnodewt, + & nodextr,joob,pjoob,iv) +c + real x(mdim,nsample),xbestsplit(nrnodes), + & avimp(mdim),sqsd(mdim), + & qimp(nsample),qimpm(nsample,mdim),tnodewt(nrnodes) + integer cl(nsample),jin(nsample),jtr(nsample), + & msm(mdimt),treemap(2,nrnodes),nodestatus(nrnodes), + & bestvar(nrnodes),nodeclass(nrnodes),cat(mdim),jvr(nsample), + & nodexvr(nsample),nbestcat(maxcat,nrnodes), + & nodextr(nsample),joob(nsample),pjoob(nsample),iv(mdim) + integer nsample,mdim,nrnodes,ndbigtree,maxcat, + & nclass,impn,interact,mdimt + integer nout,mr,nn,n,jj,k + real right,rightimp +c + nout=0 + right=0 + do n=1,nsample + if(jin(n).eq.0) then +c this case is out-of-bag +c update count of correct oob classifications +c (jtr(n)=cl(n) if case n is correctly classified) + if(jtr(n).eq.cl(n)) right=right+tnodewt(nodextr(n)) +c nout=number of obs out-of-bag for THIS tree + nout=nout+1 + joob(nout)=n + endif + enddo + if(impn.eq.1) then + do n=1,nout + nn=joob(n) + if(jtr(nn).eq.cl(nn)) then + qimp(nn)=qimp(nn)+tnodewt(nodextr(nn))/nout + endif + enddo + endif + call zerv(iv,mdim) + do jj=1,ndbigtree +c iv(j)=1 if variable j was used to split on + if(nodestatus(jj).ne.-1) iv(bestvar(jj))=1 + enddo + do k=1,mdimt + mr=msm(k) +c choose only those that used a split on variable mr + if(iv(mr).eq.1) then + call testreeimp(x,nsample,mdim,joob,pjoob,nout,mr, + & treemap,nodestatus,xbestsplit,bestvar,nodeclass,nrnodes, + & ndbigtree,cat,jvr,nodexvr,maxcat,nbestcat) + rightimp=0 + do n=1,nout +c the nth out-of-bag case is the nnth original case + nn=joob(n) + if(impn.eq.1) then + if(jvr(n).eq.cl(nn)) then + qimpm(nn,mr)=qimpm(nn,mr)+ + & tnodewt(nodexvr(n))/nout + endif + endif + if(jvr(n).eq.cl(nn)) rightimp=rightimp+ + & tnodewt(nodexvr(n)) + enddo + avimp(mr)=avimp(mr)+(right-rightimp)/nout + sqsd(mr)=sqsd(mr)+((right-rightimp)**2)/(nout**2) + else + do n=1,nout +c the nth out-of-bag case is +c the nnth original case + nn=joob(n) + if(impn.eq.1) then + if(jtr(nn).eq.cl(nn)) then + qimpm(nn,mr)=qimpm(nn,mr)+ + & tnodewt(nodextr(nn))/nout + endif + endif + enddo + endif + enddo !k + end +c +c ------------------------------------------------------- + subroutine finishimp(mdim,sqsd,avimp,signif,zscore, + & jbt,mdimt,msm) +c + real sqsd(mdim),avimp(mdim),zscore(mdim),signif(mdim) + integer msm(mdim) + integer mdim,mdimt,k,m1,jbt + real v,av,se + real erfcc + do k=1,mdimt + m1=msm(k) + avimp(m1)=avimp(m1)/jbt + av=avimp(m1) + se=(sqsd(m1)/jbt)-av*av + se=sqrt(se/jbt) + if(se.gt.0.0) then + zscore(m1)=avimp(m1)/se + v=zscore(m1) + signif(m1)=erfcc(v) + else + zscore(m1)=-5 + signif(m1)=1 + endif + enddo + end +c +c ------------------------------------------------------- + subroutine compinteract(votes,effect,msm,mdim,mdimt, + & jbt,g,iv,irnk,hist,teffect) +c + real votes(mdim,jbt),effect(mdim,mdim),g(mdim), + & hist(0:mdim,mdim),teffect(mdim,mdim) + integer msm(mdimt),iv(mdim),irnk(mdim,jbt) + integer mdim,mdimt,jbt,jb,i,nt,irk,j,ii, + & jj,ij,mmin,m,k + real gmin,rcor + do jb=1,jbt + nt=0 + call zerv(iv,mdim) + do i=1,mdimt + m=msm(i) + g(m)=votes(m,jb) + if(abs(g(m)).lt.8.232D-11) then + irnk(m,jb)=0 + iv(m)=1 + nt=nt+1 + endif + enddo + irk=0 + do j=1,8000 + gmin=10000 + do i=1,mdimt + m=msm(i) + if(iv(m).eq.0.and.g(m).lt.gmin) then + gmin=g(m) + mmin=m + endif + enddo + iv(mmin)=1 + irk=irk+1 + irnk(mmin,jb)=irk + nt=nt+1 + if(nt.ge.mdimt) goto 79 + enddo !j +79 continue + enddo !jb + do j=0,mdimt + do i=1,mdimt + m=msm(i) + hist(j,m)=0 + enddo + enddo + do i=1,mdimt + m=msm(i) + do jb=1,jbt + hist(irnk(m,jb),m)=hist(irnk(m,jb),m)+1 + enddo + do j=0,mdimt + hist(j,m)=hist(j,m)/jbt + enddo + enddo !m + + call zermr(effect,mdim,mdim) + do i=1,mdimt + do j=1,mdimt + m=msm(i) + k=msm(j) + do jb=1,jbt + effect(m,k)=effect(m,k)+iabs(irnk(m,jb)-irnk(k,jb)) + enddo + effect(m,k)=effect(m,k)/jbt + enddo + enddo + call zermr(teffect,mdim,mdim) + do i=1,mdimt + do j=1,mdimt + m=msm(i) + k=msm(j) + do ii=0,mdimt + do jj=0,mdimt + teffect(m,k)=teffect(m,k)+abs(ii-jj)*hist(jj,m)*hist(ii,k) + enddo + enddo + rcor=0 + do ij=1,mdimt + rcor=rcor+hist(ij,m)*hist(ij,k) + enddo + teffect(m,k)=teffect(m,k)/(1-rcor) + enddo + enddo + + do i=1,mdimt + do j=1,mdimt + m=msm(i) + k=msm(j) + effect(m,k)=100*(effect(m,k)-teffect(m,k)) + enddo + enddo + end +c +c ------------------------------------------------------- + subroutine compprot(loz,nrnn,ns,mdim,its, + & jest,wc,nclass,x,mdimt,msm,temp,cat,maxcat, + & jpur,inear,nprot,protlow,prothigh,prot,protfreq, + & protvlow,protvhigh,protv,popclass,npend,freq,v5,v95) +c + integer nrnn,ns,mdim,nclass,mdimt,nprot,maxcat + integer loz(ns,nrnn),jest(ns),msm(mdim),its(ns), + & jpur(nrnn),inear(nrnn),npend(nclass),cat(mdim) + real wc(ns),prot(mdim,nprot,nclass), + & protlow(mdim,nprot,nclass),prothigh(mdim,nprot,nclass), + & protfreq(mdim,nprot,nclass,maxcat), + & protvlow(mdim,nprot,nclass),protvhigh(mdim,nprot,nclass), + & x(mdim,ns),temp(nrnn),protv(mdim,nprot,nclass), + & popclass(nprot,nclass),freq(maxcat),v5(mdim),v95(mdim) + integer ii,i,k,n,jp,npu,mm,m,nclose,jj,ll,jmax,nn + real fmax,dt + + + do jp=1,nclass + call zerv(its,ns) +c we try to find nprot prototypes for this class: + npend(jp)=nprot + do i=1,nprot + call zervr(wc,ns) + do n=1,ns + if(its(n).eq.0) then +c wc(n) is the number of unseen neighbors +c of case n that are predicted to be +c in class jp +c loz(n,1),...,loz(n,nrnn) point to +c the nrnn nearest neighbors of +c case n + do k=1,nrnn + nn=loz(n,k) + if(its(nn).eq.0) then + ii=jest(nn) + if(ii.eq.jp) wc(n)=wc(n)+1 + endif + enddo + endif + enddo +c find the unseen case with the largest number +c of unseen predicted-class-jp neighbors + nclose=0 + npu=0 + do n=1,ns + if(wc(n).ge.nclose.and.its(n).eq.0) then + npu=n + nclose=wc(n) + endif + enddo +c if nclose=0,no case has any unseen predicted-class-jp neighbors +c can't find another prototype for this class - reduce npend by 1 and +c start finding prototypes for the next class + if(nclose.eq.0) then + npend(jp)=i-1 + goto 93 + endif +c case npu has the largest number +c of unseen predicted-class-jp neighbors +c put these neighbors in a list of length nclose + ii=0 + do k=1,nrnn + nn=loz(npu,k) + if(its(nn).eq.0.and.jest(nn).eq.jp) then + ii=ii+1 + inear(ii)=nn + endif + enddo +c popclass is a measure of the size of the cluster around +c this prototype + popclass(i,jp)=nclose + do mm=1,mdimt +c m is the index of the mmth variable + m=msm(mm) + if(cat(m).eq.1) then + dt=v95(m)-v5(m) + do ii=1,nclose +c put the value of the mmth variable into the list + temp(ii)=x(m,inear(ii)) + enddo !ii +c sort the list + call quicksort(temp,jpur,1,nclose,nclose) + ii=nclose/4 + if(ii.eq.0) ii=1 +c find the 25th percentile + protvlow(m,i,jp)=temp(ii) + protlow(m,i,jp)=(temp(ii)-v5(m))/dt + ii=nclose/4 + ii=(3*nclose)/4 + if(ii.eq.0) ii=1 +c find the 75th percentile + protvhigh(m,i,jp)=temp(ii) + prothigh(m,i,jp)=(temp(ii)-v5(m))/dt + ii=nclose/2 + if(ii.eq.0) ii=1 +c find the median + protv(m,i,jp)=temp(ii) + prot(m,i,jp)=(temp(ii)-v5(m))/dt + endif + if(cat(m).ge.2) then +c for categorical variables,choose the most frequent class + call zervr(freq,maxcat) + do k=1,nclose + jj=nint(x(m,loz(npu,k))) + freq(jj)=freq(jj)+1 + enddo + jmax=1 + fmax=freq(1) + do ll=2,cat(m) + if(freq(ll).gt.fmax) then + jmax=ll + fmax=freq(ll) + endif + enddo + protv(m,i,jp)=jmax + protvlow(m,i,jp)=jmax + protvhigh(m,i,jp)=jmax + do ll=1,cat(m) + protfreq(m,i,jp,ll)=freq(ll) + enddo + endif + enddo !m +c record that npu and it's neighbors have been 'seen' + its(npu)=1 + do k=1,nclose + nn=loz(npu,k) + its(nn)=1 + enddo + enddo !nprot +93 continue + enddo !jp + + end +c +c ------------------------------------------------------- + subroutine preprox(near,nrnodes,jbt,nodestatus,ncount,jb, + & nod,nodextr,nodexb,jin,jinb,ncn,ndbegin,kpop,rinpop,npcase, + & rpop,nsample) +c + integer near,nrnodes,jbt,jb,nsample, + & nodestatus(nrnodes),ncount(near,jbt),nod(nrnodes), + & nodextr(near),nodexb(near,jbt),jin(nsample),jinb(near,jbt), + & ncn(near),kpop(near),npcase(near,jbt),ndbegin(near,jbt) + real rpop(near),rinpop(near,jbt) + integer n, ntt, k, nterm, kn + + do n=1,near + ncount(n,jb)=0 + ndbegin(n,jb)=0 + enddo + ntt=0 + do k=1,nrnodes + if(nodestatus(k).eq.-1) then + ntt=ntt+1 + nod(k)=ntt + endif + enddo + nterm=ntt + do n=1,near + rinpop(n,jb)=rpop(nodextr(n)) + nodexb(n,jb)=nod(nodextr(n)) + jinb(n,jb)=jin(n) + k=nodexb(n,jb) + ncount(k,jb)=ncount(k,jb)+1 + ncn(n)=ncount(k,jb) + enddo + ndbegin(1,jb)=1 + do k=2,nterm+1 + ndbegin(k,jb)=ndbegin(k-1,jb)+ncount(k-1,jb) + enddo + do n=1,near + kn=ndbegin(nodexb(n,jb),jb)+ncn(n)-1 + npcase(kn,jb)=n + enddo + end +c +c ------------------------------------------------------- + subroutine comprox(prox,nodexb,jinb,ndbegin, + & npcase,ppr,rinpop,near,jbt,noutlier,outtr,cl, + & loz,nrnn,wtx,nsample,iwork,ibest) +c + double precision prox(near,nrnn),ppr(near) + real outtr(near),rinpop(near,jbt),wtx(nsample) + integer nodexb(near,jbt),jinb(near,jbt), + & ndbegin(near,jbt),npcase(near,jbt),cl(nsample), + & loz(near,nrnn),iwork(near),ibest(nrnn), + & near,jbt,noutlier,nrnn,nsample + integer n,jb,k,j,kk + real rsq +c + do n=1,near + call zervd(ppr,near) + do jb=1,jbt + k=nodexb(n,jb) + if(jinb(n,jb).gt.0) then + do j=ndbegin(k,jb),ndbegin(k+1,jb)-1 + kk=npcase(j,jb) + if(jinb(kk,jb).eq.0) then + ppr(kk)=ppr(kk)+(wtx(n)/rinpop(n,jb)) + endif + enddo + endif + if(jinb(n,jb).eq.0) then + do j=ndbegin(k,jb),ndbegin(k+1,jb)-1 + kk=npcase(j,jb) + if(jinb(kk,jb).gt.0) then + ppr(kk)=ppr(kk)+(wtx(kk)/rinpop(kk,jb)) + endif + enddo + endif + enddo !jbt + if(noutlier.eq.1) then + rsq=0 + do k=1,near + if(ppr(k).gt.0.and.cl(k).eq.cl(n)) rsq=rsq+ppr(k)*ppr(k) + enddo + if(rsq.eq.0) rsq=1 + outtr(n)=near/rsq + endif + + if(nrnn.eq.near) then + do k=1,near + prox(n,k)=ppr(k) + loz(n,k)=k + enddo + else + call biggest(ppr,near,nrnn,ibest,iwork) + do k=1,nrnn + prox(n,k)=ppr(ibest(k)) + loz(n,k)=ibest(k) + enddo + endif + enddo !n + end +c +c ------------------------------------------------------ + subroutine biggest(x,n,nrnn,ibest,iwork) +c + double precision x(n) + integer n,nrnn,ibest(nrnn),iwork(n) + integer i,j,ihalfn,jsave +c +c finds the nrnn largest values in the vector x and +c returns their positions in the vector ibest(1),...,ibest(nrnn): +c x(ibest(1)) is the largest +c ... +c x(ibest(nrnn)) is the nrnn-th-largest +c the vector x is not disturbed +c the vector iwork is used as workspace +c + ihalfn=int(n/2) + do i=1,n + iwork(i)=i + enddo + do j=1,ihalfn + i=ihalfn + 1 - j + call sift(x,iwork,n,n,i) + enddo + do j=1,nrnn-1 + i=n-j+1 + ibest(j)=iwork(1) + jsave=iwork(i) + iwork(i)=iwork(1) + iwork(1)=jsave + call sift(x,iwork,n,n-j,1) + enddo + ibest(nrnn)=iwork(1) + end +c +c ------------------------------------------------------ + subroutine sift(x,iwork,n,m,i) +c + double precision x(n) + integer iwork(m),n,m,i + real xsave + integer j,k,jsave,ksave +c +c used by subroutine biggest,to bring the largest element to the +c top of the heap +c + xsave=x(iwork(i)) + ksave=iwork(i) + jsave=i + j=i + i + do k=1,m + if( j.gt.m ) goto 10 + if( j.lt.m ) then + if( x(iwork(j)).lt.x(iwork(j+1)) ) j=j + 1 + endif + if( xsave.ge.x(iwork(j)) ) goto 10 + iwork(jsave)=iwork(j) + jsave=j + j=j + j + enddo +10 continue + iwork(jsave)=ksave + return + end +c +c ------------------------------------------------------ + subroutine locateout(cl,tout,outtr,ncp,isort,devout, + & near,nsample,nclass,rmedout) +c + real outtr(near),tout(near),devout(nclass),rmedout(nclass) + integer cl(nsample),isort(nsample),ncp(near),near,nsample, + & nclass + real rmed, dev + integer jp,nt,n,i + + do jp=1,nclass + nt=0 + do n=1,near + if(cl(n).eq.jp) then + nt=nt+1 + tout(nt)=outtr(n) + ncp(nt)=n + endif + enddo + call quicksort(tout,isort,1,nt,nsample) + rmed=tout((1+nt)/2) + dev=0 + do i=1,nt + dev=dev+amin1(abs(tout(i)-rmed),5*rmed) + enddo + dev=dev/nt + devout(jp)=dev + rmedout(jp)=rmed + do i=1,nt + outtr(ncp(i))=amin1((outtr(ncp(i))-rmed)/dev,20.0) + enddo + enddo !jp + end + +c ------------------------------------------------------- + subroutine myscale(loz,prox,xsc,y,u,near,nscale,red,nrnn, + & ee,ev,dl) +c + double precision prox(near,nrnn),y(near),u(near),dl(nscale), + & xsc(near,nscale),red(near),ee(near),ev(near,nscale),bl(10) + integer loz(near,nrnn) +c + integer near,nscale,nrnn,j,i,it,n,jit,k + double precision dotd,y2,sred,eu,ru,ra,ynorm,sa + do j=1,near + ee(j)=dble(1.) + enddo +c + do j=1,near + red(j)=0 + do i=1,nrnn + red(j)=red(j)+prox(j,i) + enddo + red(j)=red(j)/near + enddo + sred=dotd(ee,red,near) + sred=sred/near + do it=1,nscale + do n=1,near + if(mod(n,2).eq.0) then + y(n)=1 + else + y(n)=-1 + endif + enddo + do jit=1,1000 + y2=dotd(y,y,near) + y2=dsqrt(y2) + do n=1,near + u(n)=y(n)/y2 + enddo + do n=1,near + y(n)=0 + do k=1,nrnn + y(n)=y(n)+prox(n,k)*u(loz(n,k)) + enddo + enddo + eu=dotd(ee,u,near) + ru=dotd(red,u,near) + do n=1,near + y(n)=y(n)-(red(n)-sred)*eu-ru + y(n)=.5*y(n) + enddo + if(it.gt.1) then + do j=1,it-1 + bl(j)=0 + do n=1,near + bl(j)=bl(j)+ev(n,j)*u(n) + enddo + do n=1,near + y(n)=y(n)-bl(j)*dl(j)*ev(n,j) + enddo + enddo + endif + ra=dotd(y,u,near) + ynorm=0 + do n=1,near + ynorm=ynorm+(y(n)-ra*u(n))**2 + enddo + sa=dabs(ra) + if(ynorm.lt.sa*1.0e-7)then + do n=1,near + xsc(n,it)=(dsqrt(sa))*u(n) + ev(n,it)=u(n) + enddo + dl(it)=ra + goto 101 + endif + enddo +101 continue + enddo !nn + end +c +c ------------------------------------------------------- + + subroutine xfill(x,nsample,mdim,fill,code) +c +c input: + real code,fill(mdim) + integer mdim,nsample +c output: + real x(mdim,nsample) +c local: + integer n,m + do n=1,nsample + do m=1,mdim + if(abs(x(m,n)-code).lt.8.232D-11) + & x(m,n)=fill(m) + enddo !m + enddo + end +c +c ------------------------------------------------------- + subroutine roughfix(x,v,ncase,mdim,nsample,cat,code, + & nrcat,maxcat,fill) +c + real x(mdim,nsample),v(nsample),fill(mdim),code + integer ncase(nsample),cat(mdim),nrcat(maxcat) + integer mdim,nsample,maxcat + integer m,n,nt,j,jmax,lcat,nmax + real rmed +c + do m=1,mdim + if(cat(m).eq.1) then +c continuous variable + nt=0 + do n=1,nsample + if(abs(x(m,n)-code).ge.8.232D-11) then + nt=nt+1 + v(nt)=x(m,n) + endif + enddo + call quicksort (v,ncase,1,nt,nsample) + if(nt.gt.0) then + rmed=v((nt+1)/2) + else + rmed=0 + endif + fill(m)=rmed + else +c categorical variable + lcat=cat(m) + call zerv(nrcat,maxcat) + do n=1,nsample + if(abs(x(m,n)-code).ge.8.232D-11) then + j=nint(x(m,n)) + nrcat(j)=nrcat(j)+1 + endif + enddo + nmax=0 + jmax=1 + do j=1,lcat + if(nrcat(j).gt.nmax) then + nmax=nrcat(j) + jmax=j + endif + enddo + fill(m)=real(jmax) + endif + enddo !m + do n=1,nsample + do m=1,mdim + if(abs(x(m,n)-code).lt.8.232D-11) x(m,n)=fill(m) + enddo + enddo + end + +c ------------------------------------------------------- + subroutine impute(x,prox,near,mdim, + & maxcat,votecat,cat,nrnn,loz,missing) +c + real x(mdim,near),votecat(maxcat) + double precision prox(near,nrnn) + integer near,mdim,maxcat,nrnn + integer cat(mdim),loz(near,nrnn), + & missing(mdim,near) + integer i,j,jmax,m,n,k + real sx,dt,rmax +c + do m=1,mdim + if(cat(m).eq.1) then + do n=1,near + if(missing(m,n).eq.1) then + sx=0 + dt=0 + do k=1,nrnn + if(missing(m,loz(n,k)).ne.1) then + sx=sx+real(prox(n,k))*x(m,loz(n,k)) + dt=dt+real(prox(n,k)) + endif + enddo + if(dt.gt.0) x(m,n)=sx/dt + endif + enddo !n + endif + enddo !m + do m=1,mdim + if(cat(m).gt.1) then + do n=1,near + if(missing(m,n).eq.1) then + call zervr(votecat,maxcat) + do k=1,nrnn + if (missing(m,loz(n,k)).ne.1) then + j=nint(x(m,loz(n,k))) + votecat(j)=votecat(j)+real(prox(n,k)) + endif + enddo !k + rmax=-1 + do i=1,cat(m) + if(votecat(i).gt.rmax) then + rmax=votecat(i) + jmax=i + endif + enddo + x(m,n)=real(jmax) + endif + enddo !n + endif + enddo !m + end +c +c ------------------------------------------------------- + subroutine checkin(labelts,labeltr,nclass,lookcls,jclasswt, + & mselect,mdim2nd,mdim,imp,impn,interact,nprox,nrnn, + & nsample,noutlier,nscale,nprot,missfill,iviz,isaverf, + & irunrf,isavepar,ireadpar,isavefill,ireadfill,isaveprox, + & ireadprox,isumout,idataout,impfastout,impout,interout, + & iprotout,iproxout,iscaleout,ioutlierout,cat,maxcat,cl) +c + integer labelts,labeltr,nclass,lookcls,jclasswt,mselect, + & mdim2nd,mdim,imp,impn,interact,nprox,nrnn,nsample,noutlier, + & nscale,nprot,missfill,iviz,isaverf,irunrf,isavepar,ireadpar, + & isavefill,ireadfill,isaveprox,ireadprox,isumout,idataout, + & impfastout,impout,interout,iprotout,iproxout,iscaleout, + & ioutlierout,cat(mdim),maxcat,cl(nsample) +c + integer n,m +c + if(labelts.ne.0.and.labelts.ne.1) then + write(*,*) 'error labelts',labelts + stop + endif + if(labeltr.ne.0.and.labeltr.ne.1) then + write(*,*) 'error labeltr',labeltr + stop + endif + if(labeltr.eq.0.and.nclass.ne.2) then + write(*,*) 'error,nclass should be 2 if labeltr=0' + stop + endif + if(lookcls.ne.0.and.lookcls.ne.1) then + write(*,*) 'error lookcls',lookcls + stop + endif + if(jclasswt.ne.0.and.jclasswt.ne.1) then + write(*,*) 'error jclasswt',jclasswt + stop + endif + if(mselect.ne.0.and.mselect.ne.1) then + write(*,*) 'error mselect',mselect + stop + endif + if(mdim2nd.lt.0.or.mdim2nd.gt.mdim) then + write(*,*) 'error mdim2nd',mdim2nd + stop + endif + if(imp.ne.0.and.imp.ne.1) then + write(*,*) 'error imp',imp + stop + endif + if(impn.ne.0.and.impn.ne.1) then + write(*,*) 'error impn',impn + stop + endif + if(interact.ne.0.and.interact.ne.1) then + write(*,*) 'error interact',interact + stop + endif + if(nprox.lt.0.or.nprox.gt.1) then + write(*,*) 'error nprox',nprox + stop + endif + if(nrnn.lt.0.or.nrnn.gt.nsample) then + write(*,*) 'error - nrnn',nrnn + stop + endif + if(noutlier.lt.0.or.noutlier.gt.2) then + write(*,*) 'error - noutlier',noutlier + stop + endif + if(nscale.lt.0.or.nscale.gt.mdim) then + write(*,*) 'error - nscale',nscale + stop + endif + if(nprot.lt.0.or.nprot.gt.nsample) then + write(*,*) 'error - nprot',nprot + stop + endif + if(missfill.lt.0.or.missfill.gt.2) then + write(*,*) 'error missfill',missfill + stop + endif + if(iviz.ne.0.and.iviz.ne.1) then + write(*,*) 'error iviz',iviz + stop + endif + if(iviz.eq.1.and.impn.ne.1) then + write(*,*) 'error iviz=1 and impn=',impn + stop + endif + if(iviz.eq.1.and.imp.ne.1) then + write(*,*) 'error iviz=1 and imp=',imp + stop + endif + if(iviz.eq.1.and.nprox.ne.1) then + write(*,*) 'error iviz=1 and nprox=',nprox + stop + endif + if(iviz.eq.1.and.nscale.ne.3) then + write(*,*) 'error iviz=1 and nscale=',nscale + stop + endif + if(isaverf.ne.0.and.isaverf.ne.1) then + write(*,*) 'error isaverf',isaverf + stop + endif + if(isaverf.eq.1.and.missfill.eq.2) then + write(*,*) 'error - only rough fix can be saved' + stop + endif + if(irunrf.ne.0.and.irunrf.ne.1) then + write(*,*) 'error irunrf',irunrf + stop + endif + if(isavepar.ne.0.and.isavepar.ne.1) then + write(*,*) 'error isavepar',isavepar + stop + endif + if(ireadpar.ne.0.and.ireadpar.ne.1) then + write(*,*) 'error ireadpar',ireadpar + stop + endif + if(isavefill.ne.0.and.isavefill.ne.1) then + write(*,*) 'error isavefill',isavefill + stop + endif + if(ireadfill.ne.0.and.ireadfill.ne.1) then + write(*,*) 'error ireadfill',ireadfill + stop + endif + if(isaveprox.ne.0.and.isaveprox.ne.1) then + write(*,*) 'error isaveprox',isaveprox + stop + endif + if(ireadprox.ne.0.and.ireadprox.ne.1) then + write(*,*) 'error ireadprox',ireadprox + stop + endif + if(isumout.lt.0.or.isumout.gt.1) then + write(*,*) 'error isumout',isumout + stop + endif + if(idataout.lt.0.or.idataout.gt.2) then + write(*,*) 'error idataout',idataout + stop + endif + if(impfastout.lt.0.or.impfastout.gt.1) then + write(*,*) 'error impfastout',impfastout + stop + endif + if(impout.lt.0.or.impout.gt.2) then + write(*,*) 'error impout',impout + stop + endif + if(interout.lt.0.or.interout.gt.2) then + write(*,*) 'error interout',interout + stop + endif + if(iprotout.lt.0.or.iprotout.gt.2) then + write(*,*) 'error iprotout',iprotout + stop + endif + if(iproxout.lt.0.or.iproxout.gt.2) then + write(*,*) 'error iproxout',iproxout + stop + endif + if(iscaleout.lt.0.or.iscaleout.gt.1) then + write(*,*) 'error iscaleout',iscaleout + stop + endif + if(ioutlierout.lt.0.or.ioutlierout.gt.2) then + write(*,*) 'error ioutlierout',ioutlierout + stop + endif + if(noutlier.gt.0.and.nprox.eq.0) then + write(*,*) 'error - noutlier>0 and nprox=0' + stop + endif + if(nscale.gt.0.and.nprox.eq.0) then + write(*,*) 'error - nscale>0 and nprox=0' + stop + endif + if(nprot.gt.0.and.nprox.eq.0) then + write(*,*) 'error - nprot>0 and nprox=0' + stop + endif + if(mdim2nd.gt.0.and.imp.eq.0) then + write(*,*) 'error - mdim2nd>0 and imp=0' + stop + endif + if(impn.gt.0.and.imp.eq.0) then + write(*,*) 'error - impn>0 and imp=0' + stop + endif + do m=1,mdim + if(cat(m).gt.maxcat) then + write(*,*) 'error in cat',m,cat(m) + stop + endif + enddo + if(labeltr.eq.1) then + do n=1,nsample + if(cl(n).lt.1.or.cl(n).gt.nclass) then + write(*,*) 'error in class label',n,cl(n) + stop + endif + enddo + endif + return + end +c +c ------------------------------------------------------- + subroutine quicksort(v,iperm,ii,jj,kk) +c +c puts into iperm the permutation vector which sorts v into +c increasing order. only elementest from ii to jj are considered. +c array iu(k) and array il(k) permit sorting up to 2**(k+1)-1 elements +c +c this is a modification of acm algorithm #347 by r. c. singleton, +c which is a modified hoare quicksort. +c + real v(kk),vt,vtt + integer t,tt,iperm(kk),iu(32),il(32) + integer ii,jj,kk,m,i,j,k,ij,l +c + m=1 + i=ii + j=jj + 10 if (i.ge.j) go to 80 + 20 k=i + ij=(j+i)/2 + t=iperm(ij) + vt=v(ij) + if (v(i).le.vt) go to 30 + iperm(ij)=iperm(i) + iperm(i)=t + t=iperm(ij) + v(ij)=v(i) + v(i)=vt + vt=v(ij) + 30 l=j + if (v(j).ge.vt) go to 50 + iperm(ij)=iperm(j) + iperm(j)=t + t=iperm(ij) + v(ij)=v(j) + v(j)=vt + vt=v(ij) + if (v(i).le.vt) go to 50 + iperm(ij)=iperm(i) + iperm(i)=t + t=iperm(ij) + v(ij)=v(i) + v(i)=vt + vt=v(ij) + go to 50 + 40 iperm(l)=iperm(k) + iperm(k)=tt + v(l)=v(k) + v(k)=vtt + 50 l=l-1 + if (v(l).gt.vt) go to 50 + tt=iperm(l) + vtt=v(l) + 60 k=k+1 + if (v(k).lt.vt) go to 60 + if (k.le.l) go to 40 + if (l-i.le.j-k) go to 70 + il(m)=i + iu(m)=l + i=k + m=m+1 + go to 90 + 70 il(m)=k + iu(m)=j + j=l + m=m+1 + go to 90 + 80 m=m-1 + if (m.eq.0) return + i=il(m) + j=iu(m) + 90 if (j-i.gt.10) go to 20 + if (i.eq.ii) go to 10 + i=i-1 + 100 i=i+1 + if (i.eq.j) go to 80 + t=iperm(i+1) + vt=v(i+1) + if (v(i).le.vt) go to 100 + k=i + 110 iperm(k+1)=iperm(k) + v(k+1)=v(k) + k=k-1 + if (vt.lt.v(k)) go to 110 + iperm(k+1)=t + v(k+1)=vt + go to 100 + end +c +c ------------------------------------------------------- + subroutine unpack(l,npack,icat) +c + integer icat(32),npack,l,j,n,k + if(l.gt.32) then + write(*,*) 'error in unpack,l=',l + stop + endif + do j=1,32 + icat(j)=0 + enddo + n=npack + icat(1)=mod(n,2) + do k=2,l + n=(n-icat(k-1))/2 + icat(k)=mod(n,2) + enddo + end +c +c ------------------------------------------------------- + subroutine zerv(ix,m1) +c + integer ix(m1),m1,n + do n=1,m1 + ix(n)=0 + enddo + end +c +c ------------------------------------------------------- + subroutine zervr(rx,m1) +c + real rx(m1) + integer m1,n + do n=1,m1 + rx(n)=0 + enddo + end +c +c ------------------------------------------------------- + + subroutine zervd(rx,m1) +c + double precision rx(m1) + integer m1,n + do n=1,m1 + rx(n)=0 + enddo + end +c +c ________________________________________________________ + + subroutine zerm(mx,m1,m2) +c + integer mx(m1,m2),m1,m2,i,j + do j=1,m2 + do i=1,m1 + mx(i,j)=0 + enddo + enddo + end +c +c ------------------------------------------------------- + subroutine zermr(rx,m1,m2) +c + real rx(m1,m2) + integer m1,m2,i,j + do j=1,m2 + do i=1,m1 + rx(i,j)=0 + enddo + enddo + end +c +c ------------------------------------------------------- + subroutine zermd(rx,m1,m2) +c + double precision rx(m1,m2) + integer m1,m2,i,j + do j=1,m2 + do i=1,m1 + rx(i,j)=0 + enddo + enddo + end +c +c ------------------------------------------------------- + real function erfcc(x) +c + real x,t,z + z=abs(x)/1.41421356 + t=1./(1.+0.5*z) + erfcc=t*exp(-z*z-1.26551223+t*(1.00002368+t*(.37409196+t* + * (.09678418+t*(-.18628806+t*(.27886807+t*(-1.13520398+t* + * (1.48851587+t*(-.82215223+t*.17087277))))))))) + erfcc=erfcc/2 + if (x.lt.0.) erfcc=2.-erfcc + return + end +c +c ------------------------------------------------------- + integer function irbit(iseed) +c + integer iseed, ib1, ib2, ib5, ib18, mask + parameter(ib1=1,ib2=2,ib5=16,ib18=131072,mask=ib1+ib2+ib5) + if(iand(iseed,ib18).ne.0) then + iseed=ior(ishft(ieor(iseed,mask),1),ib1) + irbit=1 + else + iseed=iand(ishft(iseed,1),not(ib1)) + irbit=0 + endif + return + end +c +c ------------------------------------------------------- + real function randomu() +c + double precision grnd,u + u=grnd() + randomu=real(u) + end +c +c ------------------------------------------------------- + real function rnorm(i) +c + integer i + real randomu + rnorm=sqrt(-2*log(randomu()))*cos(6.283185*randomu()) + end +c +c ------------------------------------------------------- + double precision function dotd(u,v,ns) +c +c computes the inner product +c input: + double precision u(ns),v(ns) + integer ns +c local: + integer n + dotd=dble(0.0) + do n=1,ns + dotd=dotd+u(n)*v(n) + enddo + end +C************************************************************************** +* A C-program for MT19937: Real number version +* genrand() generates one pseudorandom real number (double) +* which is uniformly distributed on [0,1]-interval,for each +* call. sgenrand(seed) set initial values to the working area +* of 624 words. Before genrand(),sgenrand(seed) must be +* called once. (seed is any 32-bit integer except for 0). +* Integer generator is obtained by modifying two lines. +* Coded by Takuji Nishimura,considering the suggestions by +* Topher Cooper and Marc Rieffel in July-Aug. 1997. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Library General Public +* License as published by the Free Software Foundation; either +* version 2 of the License,or (at your option) any later +* version. +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU Library General Public License for more details. +* You should have received a copy of the GNU Library General +* Public License along with this library; if not,write to the +* Free Foundation,Inc.,59 Temple Place,Suite 330,Boston,MA +* 02111-1307 USA +* +* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. +* When you use this,send an email to: matumoto@math.keio.ac.jp +* with an appropriate reference to your work. +* +* Fortran translation by Hiroshi Takano. Jan. 13,1999. +************************************************************************ +* This program uses the following non-standard intrinsics. +* ishft(i,n): If n>0,shifts bits in i by n positions to left. +* If n<0,shifts bits in i by n positions to right. +* iand (i,j): Performs logical AND on corresponding bits of i and j. +* ior (i,j): Performs inclusive OR on corresponding bits of i and j. +* ieor (i,j): Performs exclusive OR on corresponding bits of i and j. +* +************************************************************************ + subroutine sgrnd(seed) +* + implicit integer(a-z) +* +* Period parameters + parameter(n = 624) +* + dimension mt(0:n-1) +* the array for the state vector + common /block/mti,mt + save /block/ +* +* setting initial seeds to mt[n] using +* the generator Line 25 of Table 1 in +* [KNUTH 1981,The Art of Computer Programming +* Vol. 2 (2nd Ed.),pp102] +* + mt(0)=iand(seed,-1) + do 1000 mti=1,n-1 + mt(mti)=iand(69069 * mt(mti-1),-1) +1000 continue +* + return + end +************************************************************************ + double precision function grnd() +* + implicit integer(a-z) +* +* Period parameters + parameter(n = 624) + parameter(n1 = n+1) + parameter(m = 397) + parameter(mata =-1727483681) +* constant vector a + parameter(umask=-2147483648) +* most significant w-r bits + parameter(lmask= 2147483647) +* least significant r bits +* Tempering parameters + parameter(tmaskb=-1658038656) + parameter(tmaskc=-272236544) +* + dimension mt(0:n-1) +* the array for the state vector + common /block/mti,mt + save /block/ + data mti/n1/ +* mti==n+1 means mt[n] is not initialized +* + dimension mag01(0:1) + data mag01/0,mata/ + save mag01 +* mag01(x)=x * mata for x=0,1 +* + TSHFTU(y)=ishft(y,-11) + TSHFTS(y)=ishft(y,7) + TSHFTT(y)=ishft(y,15) + TSHFTL(y)=ishft(y,-18) +* + if(mti.ge.n) then +* generate n words at one time + if(mti.eq.n+1) then +* if sgrnd() has not been called, + call sgrnd(4357) +* a default initial seed is used + endif +* + do 1000 kk=0,n-m-1 + y=ior(iand(mt(kk),umask),iand(mt(kk+1),lmask)) + mt(kk)=ieor(ieor(mt(kk+m),ishft(y,-1)),mag01(iand(y,1))) + 1000 continue + do 1100 kk=n-m,n-2 + y=ior(iand(mt(kk),umask),iand(mt(kk+1),lmask)) + mt(kk)=ieor(ieor(mt(kk+(m-n)),ishft(y,-1)),mag01(iand(y,1))) + 1100 continue + y=ior(iand(mt(n-1),umask),iand(mt(0),lmask)) + mt(n-1)=ieor(ieor(mt(m-1),ishft(y,-1)),mag01(iand(y,1))) + mti=0 + endif +* + y=mt(mti) + mti=mti+1 + y=ieor(y,TSHFTU(y)) + y=ieor(y,iand(TSHFTS(y),tmaskb)) + y=ieor(y,iand(TSHFTT(y),tmaskc)) + y=ieor(y,TSHFTL(y)) +* + if(y.lt.0) then + grnd=(dble(y)+2.0d0**32)/(2.0d0**32-1.0d0) + else + grnd=dble(y)/(2.0d0**32-1.0d0) + endif +* + return + end diff --git a/mltsp/TCP/Algorithms/randomforest_parf_fortran.py b/mltsp/TCP/Algorithms/randomforest_parf_fortran.py new file mode 100644 index 00000000..72cb3071 --- /dev/null +++ b/mltsp/TCP/Algorithms/randomforest_parf_fortran.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +""" +Compile the python module using fortran code using: + +f2py -c flaplace.f -m flaplace + +""" +from __future__ import print_function +import os, sys +import numpy + + +class Simple_Fortran_Test: + """ + Compile the python module using fortran code using: + + f2py -c flaplace.f -m flaplace + + """ + + def fortranTimeStep(self, u, dx, dy): + """Takes a time step using a simple fortran module that + implements the loop in Fortran. """ + u_new, err = flaplace.timestep(u, dx, dy) + return u_new + + def func3(self, x,y): + return (1- x/2 + x**5 + y**3)*numpy.exp(-x**2-y**2) + + def main(self): + x, y = numpy.meshgrid(numpy.arange(-2,2,1), numpy.arange(-2,2,1)) + u = self.func3(x,y) + dx = 1 + dy = 1 + for i in range(10): + u = self.fortranTimeStep(u, dx, dy) + print(u) + +class RF_Fortran_Test: + """ Wrapping PARF missing-value Fortran re-implementation of RandomForest. + + """ + + def main(self): + """ + """ + pass + + + + +if __name__ == '__main__': + + + RFFortranTest = RF_Fortran_Test() + RFFortranTest.main() + + + ### For just testing that fortran module compiling works: + if 1: + import flaplace + SimpleFortranTest = Simple_Fortran_Test() + SimpleFortranTest.main() + + diff --git a/mltsp/TCP/Algorithms/retrieve_xmls_from_tutor.py b/mltsp/TCP/Algorithms/retrieve_xmls_from_tutor.py new file mode 100644 index 00000000..1772a0ff --- /dev/null +++ b/mltsp/TCP/Algorithms/retrieve_xmls_from_tutor.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +""" retrieve xmls for a particular tutor/dotastro class_id +""" +from __future__ import print_function +import os, sys +import pprint +import MySQLdb +import datetime + +class tutor_db: + """ + """ + def __init__(self): + self.pars ={'tcptutor_hostname':'192.168.1.103', + 'tcptutor_username':'tutor', # guest + 'tcptutor_password':'ilove2mass', #'iamaguest', + 'tcptutor_database':'tutor', + 'tcptutor_port':3306} + + + self.tutor_db = MySQLdb.connect(host=self.pars['tcptutor_hostname'], \ + user=self.pars['tcptutor_username'], \ + passwd=self.pars['tcptutor_password'],\ + db=self.pars['tcptutor_database'],\ + port=self.pars['tcptutor_port']) + self.tutor_cursor = self.tutor_db.cursor() + + + +class Retrieve_XMLs: + """ + """ + def __init__(self, pars={}): + self.pars = pars + self.db = tutor_db() + + def retrieve_xmls_for_proj_list(self, base_dirpath="", proj_id_list=[]): + """ Given a list of proj_id, retrieve xmls from TUTOR. + """ + + for proj_id in proj_id_list: + + select_str = "SELECT source_id FROM sources WHERE project_id=%d" % (proj_id) + self.db.tutor_cursor.execute(select_str) + results = self.db.tutor_cursor.fetchall() + + if len(results)== 0: + print(datetime.datetime.now(), "No sources for project_id=%d" % (proj_id)) + else: + print(datetime.datetime.now(), "Project_id=", proj_id, "N sources=", len(results)) + + srcid_list = [] + for row in results: + srcid_list.append(row[0]) + + retrieve_dirpath = "%s/tutor_%d" % (base_dirpath, proj_id) + if not os.path.exists(retrieve_dirpath): + os.system("mkdir -p %s" % (retrieve_dirpath)) + + for src_id in srcid_list: + #get_str = "wget -O %s/%d.xml http://dotastro.org/lightcurves/vosource.php?Source_ID=%d" % (pars['retrieve_dirpath'], src_id, src_id) + get_str = "curl --compressed -o %s/%d.xml http://dotastro.org/lightcurves/vosource.php?Source_ID=%d" % (retrieve_dirpath, src_id, src_id) + #os.system(get_str) + #print get_str + (a,b,c) = os.popen3(get_str) + a.close() + c.close() + lines = b.read() + b.close() + + #print " Retrieved: %d" % (src_id) + + + +if __name__ == '__main__': + + pars = { \ + } + # 'project_id':121, # 120 : ASAS (122 : debosscher) + # 'retrieve_dirpath':'/media/raid_0/tutor_121_xmls', #'/tmp/tutor_120_xmls', + #RetrieveXMLs.retrieve_xmls_for_proj_list(base_dirpath="/media/raid_0/all_tutor_xmls", + # proj_id_list=[16, 55]) + + RetrieveXMLs = Retrieve_XMLs(pars=pars) + + proj_id_list = range(1,126 + 1) # 126 is currently the largest tutor project_id + + skip_projids = [121, 123, 126, + 120, 122] # already done, obsolete/old + + for projid in skip_projids: + proj_id_list.remove(projid) + + print() + RetrieveXMLs.retrieve_xmls_for_proj_list(base_dirpath="/media/raid_0/all_tutor_xmls", + proj_id_list=proj_id_list) + + diff --git a/mltsp/TCP/Algorithms/rpy2_classifiers.py b/mltsp/TCP/Algorithms/rpy2_classifiers.py new file mode 100644 index 00000000..fd8b533d --- /dev/null +++ b/mltsp/TCP/Algorithms/rpy2_classifiers.py @@ -0,0 +1,1543 @@ +#!/usr/bin/env python +""" + +Contains Classes which wrap R classifiers using rpy2. + +Tested using: + R 2.11.1 + rpy2 2.1.9 + +""" +from __future__ import print_function +import os, sys +from rpy2.robjects.packages import importr +from rpy2 import robjects +#from numpy import array # only tried out in missforest_parallel_*() +#import rpy2.robjects.numpy2ri # only tried out in missforest_parallel_*() + + +def missforest_parallel_task(varInd, ximp, obsi, misi, varType, ntree, p): + """ Task which is to be spawned off in Parallel onto IPython cluster + and invoked from the activelearn_utils.py:parallelized_imputation() + or activelearn_utils.py::IPython_Task_Administrator() + + This will do a task, atomized by (ntree, impute_feature_i, cross_valid_fold, cross_valid_case) + """ + #import rpy2.robjects.numpy2ri # DEBUG ONLY! + #import numpy # DEBUG ONLY! + robjects.globalenv['varInd'] = robjects.IntVector(varInd) + robjects.globalenv['ximp'] = ximp + robjects.globalenv['obsi'] = robjects.BoolVector(obsi) + robjects.globalenv['misi'] = robjects.BoolVector(misi) + robjects.globalenv['varType'] = varType + robjects.globalenv['ntree'] = ntree + robjects.globalenv['p'] = p + robjects.r(""" +obsY <- ximp[obsi, varInd] # training response +obsX <- ximp[obsi, seq(1, p)[-varInd]] # training variables +misX <- ximp[misi, seq(1, p)[-varInd]] # prediction variables +typeY <- varType[varInd] +blah <- 3 +#ximp[misi, varInd] <- misY""") + #import pdb; pdb.set_trace() + #print + #misY = array(robjects.r("misY")) + #OOBerror_val = list(robjects.r("OOBerror_val"))[0] + #return (misY, OOBerror_val) + #return (0,0) + #return {'obsY':array(robjects.r("obsY")), + # 'obsY_20':robjects.r("obsY[20]"), + # 'obsX_23':robjects.r("obsX[2,3]"), + # 'obsX_1065':robjects.r("obsX[10,65]"), + # 'ntree':robjects.r("ntree"), + # 'typeY':robjects.r("typeY")} + return {'ntree':robjects.r("blah")} + + +class Rpy2Classifier: + """ + """ + def __init__(self, pars={}, + algorithms_dirpath=''): + # # # on citris33: algorithms_dirpath='/global/home/users/dstarr/src/TCP/Algorithms' + self.pars = pars + + ### NOTE: really only need to require() classifiers if we use them + + r_str = ''' + require(randomForest) + require(party) + set.seed(sample(1:10^5,1)) + source("%s/utils_classify.R") + source("%s/missForest.R") + ''' % (algorithms_dirpath, algorithms_dirpath)#, algorithms_dirpath) + #source("%s/class_cv.R") + + #source("/home/pteluser/src/TCP/Algorithms/utils_classify.R") + #NOTNEEDED#source("/home/pteluser/src/TCP/Algorithms/class_cv.R") + robjects.r(r_str) + + + def read_class_dat(self, fpath="/home/pteluser/scratch/features.dat"): + """ Read Joey class.dat + + Taken from tutorial_rpy.py + + """ + lines = open(fpath).readlines() + out_list = [] + for i, line in enumerate(lines): + the_str = line.strip() + if len(the_str) == 0: + continue + out_list.append(the_str) + return out_list + + + def read_features_dat(self, fpath="/home/pteluser/scratch/features.dat"): + """ Read Joey features.dat + + Taken from tutorial_rpy.py + + """ + from rpy2 import robjects + + lines = open(fpath).readlines() + out_list = [] + feat_val_dict = {} + for i, line in enumerate(lines): + if i == 0: + feat_names_with_quotes = line.split() + feat_names = [] + for feat_name in feat_names_with_quotes: + feat_names.append(feat_name.strip('"')) + n_cols = len(feat_names) + for fname in feat_names: + feat_val_dict[fname] = [] + continue # skip the header + line_split = line.split() + for i_f, feat_val in enumerate(line_split): + if feat_val == 'NA': + out_list.append(None) + feat_val_dict[feat_names[i_f]].append(None) + else: + out_list.append(float(feat_val)) + feat_val_dict[feat_names[i_f]].append(float(feat_val)) + + for feat_name, feat_list in feat_val_dict.items(): + feat_val_dict[feat_name] = robjects.FloatVector(feat_list) + + return {'feat_list':out_list, + 'n_cols':n_cols, + 'feat_names':feat_names, + 'feat_val_dict':feat_val_dict} + + + def parse_joey_feature_class_datfile(self, feature_fpath='', class_fpath=''): + """ Parse Joey's features.dat classes.dat. + + """ + f_dict = self.read_features_dat(fpath=feature_fpath) + features = robjects.r['data.frame'](**f_dict['feat_val_dict']) + + class_list = self.read_class_dat(fpath=class_fpath) + classes = robjects.StrVector(class_list) + + ### ??? Do this? : + #robjects.globalenv['features'] = features + #robjects.globalenv['classes'] = classes + + + return {'features':features, + 'classes':classes} + + + def parse_arff_header(self, arff_str='', ignore_attribs=[]): + """ Parse a given ARFF string, replace @attribute with @ignored for attributes in + ignore_attribs list (ala PARF data specification). + + Return arff header string. + """ + lines = arff_str.split('\n') + out_lines = [] + for line in lines: + out_lines.append(line) + if '@data' in line.lower(): + return out_lines + return None # shouldn't get here. + + + def parse_full_arff(self, arff_str='', parse_srcid=True, parse_class=True, + skip_missingval_lines=False, fill_arff_rows=False): + """ Parse class & features from a full arff file. + """ + percent_list = [] + iters_list = [] + featname_list = [] + srcid_list = [] + class_list = [] + arff_rows = [] + #featval_long_list = [] + featname_longfeatval_dict = {} + lines = arff_str.split('\n') + for line in lines: + if len(line) == 0: + continue + elif line[0] == '%': + continue + elif line[:10] == '@ATTRIBUTE': + if (('class' in line) or + ('source_id' in line)): + #if line[11:16] == + continue # I could store the potential classes somewhere + else: + feat_name = line.split()[1] + featname_list.append(feat_name) + featname_longfeatval_dict[feat_name] = [] + elif line[0] == '@': + # -> could add to some feature structure + continue + elif (skip_missingval_lines and ('?' in line)): + continue # we skip souirces/arrf lines which have missing values since R Randomforest (and maybe other classifiers) cannot handle missing values. + else: + ### Then we have a source row with features + if parse_class: + #i_r = line.rfind("'") + #i_l = line.rfind("'", 0, i_r) + if '"' in line: + i_r = line.rfind('"') + i_l = line.rfind('"', 0, i_r) + else: + i_r = line.rfind("'") + i_l = line.rfind("'", 0, i_r) + + a_class = line[i_l+1:i_r] + class_list.append(a_class) #a_class.strip("'")) + shortline = line[:i_l -1] #feat_list[:-1] + elems = shortline.split(',') + if fill_arff_rows: + arff_rows.append(line) + feat_list = elems + if parse_srcid: + if elems[0].count('_') == 0: + src_id = elems[0] + srcid_list.append(src_id) + else: + tups = elems[0].split('_') + srcid = int(tups[0]) + perc = float(tups[1]) + niter = int(tups[2]) + srcid_list.append(srcid) + percent_list.append(perc) + iters_list.append(niter) + feat_list = feat_list[1:] + + for i, elem in enumerate(feat_list): + feat_name = featname_list[i] + if elem == '?': + val = None + else: + try: + val = float(elem) + except: + val = elem + featname_longfeatval_dict[feat_name].append(val) + + #for feat_name, feat_longlist in featname_longfeatval_dict.items(): + # featname_longfeatval_dict[feat_name] = robjects.FloatVector(feat_longlist) + #features = robjects.r['data.frame'](**featname_longfeatval_dict) + #classes = robjects.StrVector(class_list) + #return {'features':features, + # 'classes':classes, + # 'class_list':class_list, + # 'srcid_list':srcid_list, + # 'percent_list':percent_list, + # 'iters_list':iters_list} + + + ### NOTE: We dont do this here anymore. We do it closer to the R classifier building code: + #for feat_name, feat_longlist in featname_longfeatval_dict.items(): + # featname_longfeatval_dict[feat_name] = robjects.FloatVector(feat_longlist) + #features = robjects.r['data.frame'](**featname_longfeatval_dict) + #classes = robjects.StrVector(class_list) + + return {'featname_longfeatval_dict':featname_longfeatval_dict, + 'class_list':class_list, + 'srcid_list':srcid_list, + 'percent_list':percent_list, + 'iters_list':iters_list, + 'arff_rows':arff_rows} + + + + def insert_missing_value_features(self, arff_str='', noisify_attribs=[], + prob_source_has_missing=0.2, + prob_misattrib_is_missing=0.2): + """ Insert some missing-value features to arff rows. + Exepect the input to be a single string representation of arff with \n's. + Returning a similar single string. + """ + import random + out_lines = [] + misattrib_name_to_id = {} + i_attrib = 0 + lines = arff_str.split('\n') + do_attrib_parse = True + for line in lines: + if do_attrib_parse: + if line[:10] == '@ATTRIBUTE': + feat_name = line.split()[1] + if feat_name in noisify_attribs: + misattrib_name_to_id[feat_name] = i_attrib + i_attrib += 1 + elif '@data' in line.lower(): + do_attrib_parse = False + out_lines.append(line) + continue + ### Should only get here after hitting @data line, which means just feature lines + if random.random() > prob_source_has_missing: + out_lines.append(line) + continue # don't set any attributes as missing for this source + attribs = line.split(',') + new_attribs = [] + for i, attrib_val in enumerate(attribs): + if i in misattrib_name_to_id.values(): + if random.random() <= prob_misattrib_is_missing: + new_attribs.append('?') + continue + new_attribs.append(attrib_val) + new_line = ','.join(new_attribs) + out_lines.append(new_line) + new_train_arff_str = '\n'.join(out_lines) + return new_train_arff_str + + + def train_randomforest(self, data_dict, do_ignore_NA_features=False, + ntrees=1000, mtry=25, nfolds=10, nodesize=5): + """ Train a randomForest() R classifier + + Taken from class_cv.R : rf.cv (L40) + """ + featname_longfeatval_dict = data_dict['featname_longfeatval_dict'] + for feat_name, feat_longlist in featname_longfeatval_dict.items(): + featname_longfeatval_dict[feat_name] = robjects.FloatVector(feat_longlist) + data_dict['features'] = robjects.r['data.frame'](**featname_longfeatval_dict) + data_dict['classes'] = robjects.StrVector(data_dict['class_list']) + + robjects.globalenv['x'] = data_dict['features'] + robjects.globalenv['y'] = data_dict['classes'] + + if do_ignore_NA_features: + feat_trim_str = 'x = as.data.frame(x[,-which(substr(names(x),1,4)=="sdss" | substr(names(x),1,3)=="ws_")])' + else: + feat_trim_str = '' + + r_str = ''' + %s + y = class.debos(y) + + ntrees=%d + mtry=%d + nfolds=%d + rf_clfr = randomForest(x=x,y=y,mtry=mtry,ntree=ntrees,nodesize=%d) + ''' % (feat_trim_str, ntrees, mtry, nfolds, nodesize) + ### NOTE: when no classwt is given, this same prior is calculated, so no need to do it again: + #n = length(y) + #prior = table(y)/n + #rf_clfr = randomForest(x=x,y=y,classwt=prior,mtry=mtry,ntree=ntrees,nodesize=%d) + # + # rf_clfr = randomForest(x=x,y=y) + + classifier_out = robjects.r(r_str) + #import pdb; pdb.set_trace() + #print classifier_out + return {'py_obj':classifier_out, + 'r_name':'rf_clfr'} + + + # obsolete / backup: + def actlearn_randomforest__nocost(self, traindata_dict={}, + testdata_dict={}, + do_ignore_NA_features=False, + ntrees=1000, mtry=25, + nfolds=10, nodesize=5, + num_srcs_for_users=100, + random_seed=0, + final_user_classifs={}): + """ Train a randomForest() R classifier + + Taken from class_cv.R : rf.cv (L40) + """ + if do_ignore_NA_features: + print("actlearn_randomforest():: do_ignore_NA_features==True not implemented because obsolete") + raise + + train_featname_longfeatval_dict = traindata_dict['featname_longfeatval_dict'] + for feat_name, feat_longlist in train_featname_longfeatval_dict.items(): + train_featname_longfeatval_dict[feat_name] = robjects.FloatVector(feat_longlist) + traindata_dict['features'] = robjects.r['data.frame'](**train_featname_longfeatval_dict) + traindata_dict['classes'] = robjects.StrVector(traindata_dict['class_list']) + + robjects.globalenv['xtr'] = traindata_dict['features'] + robjects.globalenv['ytr'] = traindata_dict['classes'] + + test_featname_longfeatval_dict = testdata_dict['featname_longfeatval_dict'] + for feat_name, feat_longlist in test_featname_longfeatval_dict.items(): + test_featname_longfeatval_dict[feat_name] = robjects.FloatVector(feat_longlist) + testdata_dict['features'] = robjects.r['data.frame'](**test_featname_longfeatval_dict) + testdata_dict['classes'] = robjects.StrVector(testdata_dict['class_list']) + + robjects.globalenv['xte'] = testdata_dict['features'] + robjects.globalenv['yte'] = testdata_dict['classes'] + + import pdb; pdb.set_trace() + print() + + r_str = ''' + + m=%d + + ntrees=%d + mtry=%d + nfolds=%d + + ytr = class.debos(ytr) + + n.tr = length(ytr) # number of training data + n.te = dim(xte)[1] # number of test data + + if(is.null(mtry)){ mtry = ceiling(sqrt(dim(xtr)[2]))} # set mtry + rf_clfr = randomForest(x=xtr,y=ytr,xtest=xte,ntrees=ntrees,mtry=mtry,proximity=T,nodesize=%d) + rho = rf_clfr$test$proximity # RF proximity matrix, n.tr by n.te matrix + ''' % (num_srcs_for_users, ntrees, mtry, nfolds, nodesize) + + + r_str += ''' + + n.bar = apply(rho[1:n.te,(n.te+1):(n.te+n.tr)],1,sum) # avg. # training data in same terminal node + p.hat = apply(rf_clfr$test$votes,1,max) + err.decr = ((1-p.hat)/(n.bar+1)) %*%rho[1:n.te,1:n.te] # this is Delta V + + # choose probabalistically? or take top choices? + if(FALSE){ # take top m choices + select = which(err.decr >= sort(err.decr,decreasing=TRUE)[m]) + }else{ # sample from distribution defined by err.decr + select = sample(1:n.te,m,prob=err.decr/sum(err.decr),replace=FALSE)} + ''' + + + classifier_out = robjects.r(r_str) + + + #robjects.globalenv['pred_forconfmat'] + #robjects.r("rf_clfr$classes") + + possible_classes = robjects.r("rf_clfr$classes") + + ''' + actlearn_tups = [] + # Nice and kludgey. Could do this in R if I knew it a bit better + #for i, srcid in enumerate(data_dict['srcid_list']): + for i in robjects.globalenv['select']: + # I think the robjects.globalenv['select'] R array has an index starting at i=1 + # so this means if R array gives i=999, then this translates srcid_list[i=998] + # so this means if R array gives i=1, then this translates srcid_list[i=0] + srcid = testdata_dict['srcid_list'][i-1] + tups_list = zip(list(robjects.r("rf_clfr$test$votes[%d,]" % (i))), possible_classes) + tups_list.sort(reverse=True) + for j in range(3): + actlearn_tups.append((int(srcid), j, tups_list[j][0], tups_list[j][1])) + ''' + #import pdb; pdb.set_trace() + #print + + actlearn_tups = [] + # Nice and kludgey. Could do this in R if I knew it a bit better + #for i, srcid in enumerate(data_dict['srcid_list']): + + for i in robjects.globalenv['select']: + # I think the robjects.globalenv['select'] R array has an index starting at i=1 + # so this means if R array gives i=999, then this translates srcid_list[i=998] + # so this means if R array gives i=1, then this translates srcid_list[i=0] + srcid = testdata_dict['srcid_list'][i-1]# index is python so starts at 0 + actlearn_tups.append((int(srcid), robjects.globalenv['err.decr'][i-1]))# I tested this, i starts at 0 + + + allsrc_tups = [] + # Nice and kludgey. Could do this in R if I knew it a bit better + for i, srcid in enumerate(testdata_dict['srcid_list']): + tups_list = zip(list(robjects.r("rf_clfr$test$votes[%d,]" % (i+1))), possible_classes) + tups_list.sort(reverse=True) + for j in range(3): + allsrc_tups.append((int(srcid), j, tups_list[j][0], tups_list[j][1])) + + + return {'actlearn_tups':actlearn_tups, + 'allsrc_tups':allsrc_tups, + 'py_obj':classifier_out, + 'r_name':'rf_clfr', + 'select':robjects.globalenv['select'], + 'select.pred':robjects.r("rf_clfr$test$predicted[select]"), + 'select.predprob':robjects.r("rf_clfr$test$votes[select,]"), + 'err.decr':robjects.globalenv['err.decr'], + 'all.pred':robjects.r("rf_clfr$test$predicted"), + 'all.predprob':robjects.r("rf_clfr$test$votes"), + 'possible_classes':possible_classes, + } + + + def test_missForest_impuation_error(self, feature_data_dict): + """ Do imputation of missing-value feature values in dataset + + - See arxiv 1105.0828v1 for more information on + the R:MissForest imputation code for R:randomForest() + + This function is used to explore the errors which arrise due to imputation of ASAS data + for various "ntree" parameter values used in randomForest() + + 1 - (40588 / 46057.) = 0.11874416483922101 + -> where 46057 is the number of sources with both NA and non-NA attribs + -> where 40588 is the number of sources with non-NA attribs + So we will simulate this NA-source ratio un the 40588 source dataset + by adding + + """ + import datetime + r_data_dict = {} + for feat_name, feat_longlist in feature_data_dict.items(): + r_data_dict[feat_name] = robjects.FloatVector(feat_longlist) + features_r_data = robjects.r['data.frame'](**r_data_dict) + + robjects.globalenv['miss_data'] = features_r_data + robjects.r(""" + miss_data_no_NA = na.omit(miss_data) + """) + ntree_list = [300] + for ntree in ntree_list: + now = datetime.datetime.now() + + robjects.r(""" + miss_data_generated_NA <- miss_data_no_NA + + ### Here we take the non-NA dataset and force NA in a percentage of sources for all of the color features + noNA = 0.118744 + n <- nrow(miss_data_generated_NA) + NAloc <- rep(FALSE, n) + NAloc[sample(n, floor(n*noNA))] <- TRUE + miss_data_generated_NA$color_diff_hk[array(NAloc, dim=n)] <- NA + miss_data_generated_NA$color_diff_jh[array(NAloc, dim=n)] <- NA + miss_data_generated_NA$color_bv_extinction[array(NAloc, dim=n)] <- NA + + miss_data_generated_NA.imp = missForest(miss_data_generated_NA, mtry=5, ntree=%d) + err = mixError(miss_data_generated_NA.imp$Ximp, miss_data_generated_NA, miss_data_no_NA) + """ % (ntree)) + err = float(list(robjects.r('err'))[0]) + fp = open("/home/pteluser/scratch/active_learn/asas_ntree_imputation_tests.dat", "a+") + fp.write("%d %lf %s\n" % (ntree, err, str(datetime.datetime.now() - now))) + fp.close() + import pdb; pdb.set_trace() + print() + + + def generate_imputed_arff_for_ntree(self, feature_data_dict, mtry=None, ntree=None, header_str=None, feature_list=[], srcid_list=[], class_list=[], train_srcids=[]): + """ given a feature_data_dict and mtrey, ntree params, impute the data set + and write arff file. + + - To be run on Ipython task node. + """ + + new_feat_dict = self.imputation_using_missForest(feature_data_dict, mtry=mtry, ntree=ntree) + + n_srcs = len(srcid_list)#new_feat_dict[new_feat_dict.keys()[0]]) + + train_row_lines = [header_str, "@DATA"] + test_row_lines = [header_str, "@DATA"] + for i in range(n_srcs): + srcid = srcid_list[i] + if srcid in train_srcids: + train_row_list = [srcid_list[i]] + ### We use the ordered feature_list, so that attribs in a row match the order of the header + for feat_name in feature_list: + train_row_list.append(str(new_feat_dict[feat_name][i])) + train_row_list.append("'%s'" % (class_list[i])) + new_line = ','.join(train_row_list) + train_row_lines.append(new_line) + else: + test_row_list = [srcid_list[i]] + ### We use the ordered feature_list, so that attribs in a row match the order of the header + for feat_name in feature_list: + test_row_list.append(str(new_feat_dict[feat_name][i])) + test_row_list.append("'%s'" % (class_list[i])) + new_line = ','.join(test_row_list) + test_row_lines.append(new_line) + + train_arff_str = '\n'.join(train_row_lines) + train_arff_fpath = "/home/pteluser/scratch/active_learn/imputed_arffs/train_full_%dntree_%dmtry.arff" % (ntree, mtry) + fp = open(train_arff_fpath, "w") + fp.write(train_arff_str) + fp.close() + + test_arff_str = '\n'.join(test_row_lines) + test_arff_fpath = "/home/pteluser/scratch/active_learn/imputed_arffs/test_full_%dntree_%dmtry.arff" % (ntree, mtry) + fp = open(test_arff_fpath, "w") + fp.write(test_arff_str) + fp.close() + + return {'test_arff_fpath':test_arff_fpath, + 'train_arff_fpath':train_arff_fpath} + + + def imputation_using_missForest(self, feature_data_dict, mtry=None, ntree=None): + """ Do imputation of missing-value feature values in dataset + + - See arxiv 1105.0828v1 for more information on + the R:MissForest imputation code for R:randomForest() + """ + #import numpy + r_data_dict = {} + for feat_name, feat_longlist in feature_data_dict.items(): + try: + r_data_dict[feat_name] = robjects.FloatVector(feat_longlist) + except: + print('feat_longlist.count(None)=', feat_longlist.count(None), '\t', feat_name) + raise # apparently None values are not automatically converted to numpy.nan. Must do earlier. + #print feat_longlist.count(numpy.nan), '\t', feat_name + #import pdb; pdb.set_trace() + #print + features_r_data = robjects.r['data.frame'](**r_data_dict) + + robjects.globalenv['miss_data'] = features_r_data + + r_str = "miss_data.imp = missForest(miss_data, verbose=TRUE, mtry=%d, ntree=%d)$Ximp" % ( \ + mtry, ntree) + blah = robjects.r(r_str) + + out_feat_dict = {} + feature_names = list(robjects.r("names(miss_data.imp)")) + for i, feat_name in enumerate(feature_names): + out_feat_dict[feat_name] = list(robjects.r("miss_data.imp$%s" % (feat_name))) + + return out_feat_dict + + + def actlearn_randomforest(self, traindata_dict={}, + testdata_dict={}, + do_ignore_NA_features=False, + ntrees=1000, mtry=25, + nfolds=10, nodesize=5, + num_srcs_for_users=100, + random_seed=0, + both_user_match_srcid_bool=[], + actlearn_sources_freqsignifs=[]): + """ Train a randomForest() R classifier + + Taken from class_cv.R : rf.cv (L40) + """ + if do_ignore_NA_features: + print("actlearn_randomforest():: do_ignore_NA_features==True not implemented because obsolete") + raise + + train_featname_longfeatval_dict = traindata_dict['featname_longfeatval_dict'] + for feat_name, feat_longlist in train_featname_longfeatval_dict.items(): + train_featname_longfeatval_dict[feat_name] = robjects.FloatVector(feat_longlist) + traindata_dict['features'] = robjects.r['data.frame'](**train_featname_longfeatval_dict) + traindata_dict['classes'] = robjects.StrVector(traindata_dict['class_list']) + + robjects.globalenv['xtr'] = traindata_dict['features'] + robjects.globalenv['ytr'] = traindata_dict['classes'] + + test_featname_longfeatval_dict = testdata_dict['featname_longfeatval_dict'] + for feat_name, feat_longlist in test_featname_longfeatval_dict.items(): + test_featname_longfeatval_dict[feat_name] = robjects.FloatVector(feat_longlist) + testdata_dict['features'] = robjects.r['data.frame'](**test_featname_longfeatval_dict) + testdata_dict['classes'] = robjects.StrVector(testdata_dict['class_list']) + + robjects.globalenv['xte'] = testdata_dict['features'] + robjects.globalenv['yte'] = testdata_dict['classes'] + + #import pdb; pdb.set_trace() + #print + + #robjects.globalenv['instep'] = robjects.IntVector(actlearn_used_srcids_indicies) + #robjects.globalenv['incl_tr'] = robjects.BoolVector(both_user_match_srcid_bool) + robjects.globalenv['actlearn_sources_freqsignifs'] = robjects.FloatVector(actlearn_sources_freqsignifs) + robjects.globalenv['both_user_match_srcid_bool'] = robjects.BoolVector(both_user_match_srcid_bool) + + #for class_name in testdata_dict['class_list']: + # if (('algol' in class_name.lower()) or ('persei' in class_name.lower())): + # print '!', class_name + + r_str = ''' + + m=%d + + ntrees=%d + mtry=%d + nfolds=%d + + ##### ESTIMATE COST FUNCTION FROM AL SAMPLE + ## function taking AL sample (indicator that label found & freq_signif) to fit model for + ## cost (prob. manually label) as fxn. of freq_signif (glm) + getCost = function(sig, labeled){ + cost.fit = glm(labeled~sig,family="binomial") # logistic regression + #sig.vec = round(min(freqSigAll)):round(max(freqSigAll)) # vector to predict + sig.vec = 0:ceiling(max(xte[,'freq_signif'])) # 0:38 # vector to predict (range of freq_signif values in the 50k asas dataset) + cost.pred = predict(cost.fit,newdata = data.frame(sig=sig.vec),se.fit=TRUE) # prediction + + cost = exp(cost.pred$fit) / (1+exp(cost.pred$fit)) # cost function + cost.up = exp(cost.pred$fit+cost.pred$se.fit) / (1+exp(cost.pred$fit+cost.pred$se.fit)) + cost.dn = exp(cost.pred$fit-cost.pred$se.fit) / (1+exp(cost.pred$fit-cost.pred$se.fit)) + return(list(cost=cost,costUp=cost.up,costDn=cost.dn)) + } + + #al.sel.cost = alSelect(feat.debos,class.deb,feat.asas[1:7000,],m=50,ntrees=500,cost=cost.fxn) + + + #cost = getCost(instep,incl_tr,xtr[,'freq_signif']) + cost = getCost(actlearn_sources_freqsignifs, both_user_match_srcid_bool) + cost.fxn = cost$cost + + ytr = class.debos(ytr) + + n.tr = length(ytr) # number of training data + n.te = dim(xte)[1] # number of test data + + if(is.null(mtry)){ mtry = ceiling(sqrt(dim(xtr)[2]))} # set mtry + #xte.imp = missForest(xte, verbose=TRUE)$Ximp + #xtr.imp = missForest(xtr, verbose=TRUE)$Ximp # dstarr hack to get rid of training missingvals + rf_clfr = randomForest(x=xtr,y=ytr,xtest=xte,ntrees=ntrees,mtry=mtry,proximity=TRUE,nodesize=%d) + rho = rf_clfr$test$proximity # RF proximity matrix, n.tr by n.te matrix + + cat("Selecting best objects\n") + n.bar = apply(rho[1:n.te,(n.te+1):(n.te+n.tr)],1,sum) # avg. # training data in same terminal node + p.hat = apply(rf_clfr$test$votes,1,max) + err.decr = ((1-p.hat)/(n.bar+1)) %srho[1:n.te,1:n.te] # this is Delta V + + # if there is a cost vector, use it to alter err.decr + if(length(cost.fxn)>0){ + min.fs = round(min(xte[,'freq_signif'])) + freqsig = round(xte[,'freq_signif']) + te.cost = cost.fxn[freqsig - min.fs + 1] + err.decr = err.decr*te.cost + } + + # choose probabalistically: + select = sample(1:n.te,m,prob=err.decr/sum(err.decr),replace=FALSE) + #return(list(select=select,select.pred=rf_clfr$test$predicted[select],select.predprob=rf_clfr$test$votes[select,],err.decr=err.decr,all.pred=rf_clfr$test$predicted,all.predprob=rf_clfr$test$votes)) + + # # # This is just needed for filling the ASAS catalog tables: + rf_applied_to_train = randomForest(x=xtr,y=ytr,xtest=xtr,ntrees=ntrees,mtry=mtry,proximity=TRUE,nodesize=%d) + # # # + + ''' % (num_srcs_for_users, ntrees, mtry, nfolds, nodesize, "%*%", nodesize) + + classifier_out = robjects.r(r_str) + + #robjects.globalenv['pred_forconfmat'] + #robjects.r("rf_clfr$classes") + + possible_classes = robjects.r("rf_clfr$classes") + + ''' + actlearn_tups = [] + # Nice and kludgey. Could do this in R if I knew it a bit better + #for i, srcid in enumerate(data_dict['srcid_list']): + for i in robjects.globalenv['select']: + # I think the robjects.globalenv['select'] R array has an index starting at i=1 + # so this means if R array gives i=999, then this translates srcid_list[i=998] + # so this means if R array gives i=1, then this translates srcid_list[i=0] + srcid = testdata_dict['srcid_list'][i-1] + tups_list = zip(list(robjects.r("rf_clfr$test$votes[%d,]" % (i))), possible_classes) + tups_list.sort(reverse=True) + for j in range(3): + actlearn_tups.append((int(srcid), j, tups_list[j][0], tups_list[j][1])) + ''' + + actlearn_tups = [] + # Nice and kludgey. Could do this in R if I knew it a bit better + #for i, srcid in enumerate(data_dict['srcid_list']): + + for i in robjects.globalenv['select']: + # I think the robjects.globalenv['select'] R array has an index starting at i=1 + # so this means if R array gives i=999, then this translates srcid_list[i=998] + # so this means if R array gives i=1, then this translates srcid_list[i=0] + srcid = testdata_dict['srcid_list'][i-1]# index is python so starts at 0 + actlearn_tups.append((int(srcid), robjects.globalenv['err.decr'][i-1]))# I tested this, i starts at 0 + + + #import pdb; pdb.set_trace() + #print + allsrc_tups = [] + everyclass_tups = [] + trainset_everyclass_tups = [] + # Nice and kludgey. Could do this in R if I knew it a bit better + for i, srcid in enumerate(testdata_dict['srcid_list']): + tups_list = zip(list(robjects.r("rf_clfr$test$votes[%d,]" % (i+1))), possible_classes) + tups_list.sort(reverse=True) + for j in range(len(tups_list)): + if j < 3: + allsrc_tups.append((int(srcid), j, tups_list[j][0], tups_list[j][1])) + everyclass_tups.append((int(srcid), j, tups_list[j][0], tups_list[j][1])) + + # # # This is just needed for filling the ASAS catalog tables: + for i, srcid in enumerate(traindata_dict['srcid_list']): + tups_list = zip(list(robjects.r("rf_applied_to_train$test$votes[%d,]" % (i+1))), possible_classes) + tups_list.sort(reverse=True) + for j in range(len(tups_list)): + trainset_everyclass_tups.append((int(srcid), j, tups_list[j][0], tups_list[j][1])) + # # # + + #import pdb; pdb.set_trace() + #print + return {'actlearn_tups':actlearn_tups, + 'allsrc_tups':allsrc_tups, + 'everyclass_tups':everyclass_tups, + 'trainset_everyclass_tups':trainset_everyclass_tups, + 'py_obj':classifier_out, + 'r_name':'rf_clfr', + 'select':robjects.globalenv['select'], + 'select.pred':robjects.r("rf_clfr$test$predicted[select]"), + 'select.predprob':robjects.r("rf_clfr$test$votes[select,]"), + 'err.decr':robjects.globalenv['err.decr'], + 'all.pred':robjects.r("rf_clfr$test$predicted"), + 'all.predprob':robjects.r("rf_clfr$test$votes"), + 'possible_classes':possible_classes, + 'all_top_prob':robjects.r("apply(rf_clfr$test$votes,1,max)"), + } + + + def get_confident_sources(self, combo_result_dict={}, n_sources_per_class=10, prob_thresh=0.5): + """ Generate a N-list of confident sources which should be a good representations + of each science class. + """ + robjects.globalenv['pred'] = robjects.IntVector(combo_result_dict['all.pred']) + robjects.globalenv['maxprob'] = robjects.FloatVector(combo_result_dict['all_top_prob']) + + # KLUDGEY + srcid_list = [] + for str_srcid in combo_result_dict['srcid_list']: + srcid_list.append(int(str_srcid)) + robjects.globalenv['ID'] = robjects.IntVector(srcid_list) + + r_str = ''' + m = %d + probThresh= %f + whichConf = which(maxprob>probThresh) # only look at sources with maxProb>probThresh + tabConf = table(pred[whichConf]) # class distribution of confident sources + confAdd = NULL # sources to add + for(ii in 1:length(tabConf)){ + if(tabConf[ii]>0){ # cycle thru confident classes + if(tabConf[ii] 10: + n_folds = 10 + else: + n_folds = min_n_srcs + + + class_indlist = {} + for i, class_name in enumerate(full_data_dict['class_list']): + if class_name not in class_indlist: + class_indlist[class_name] = [] + class_indlist[class_name].append(i) + + + + all_fold_dict = {} + for i in range(n_folds): + all_fold_dict[i] = {'train_data':{'srcid_list':[], + 'featname_longfeatval_dict':{}, + 'iters_list':[], + 'percent_list':[], + 'class_list':[], + 'arff_rows':[]}, + 'classif_data':{'srcid_list':[], + 'featname_longfeatval_dict':{}, + 'iters_list':[], + 'percent_list':[], + 'class_list':[], + 'arff_rows':[]}} + for feat_name in full_data_dict['featname_longfeatval_dict'].keys(): + all_fold_dict[i]['train_data']['featname_longfeatval_dict'][feat_name] = [] + all_fold_dict[i]['classif_data']['featname_longfeatval_dict'][feat_name] = [] + + if do_stratified: + ### Stratified case will have to keep track of which srcids were used in each train/classif fold. + print('do_stratified!!! Case not coded yet!') + + raise + else: + for class_name, ind_list in class_indlist.items(): + src_count = len(ind_list) + if classify_percent is None: + n_to_classify = src_count / n_folds # we exclude only 1 point if n_srcs < (n_folds * 2) + else: + n_to_classify = int(src_count * (classify_percent / 100.)) + + for i_fold, fold_dict in all_fold_dict.items(): + random.shuffle(ind_list) + sub_range = ind_list[:n_to_classify] + for i in sub_range: + fold_dict['classif_data']['srcid_list'].append(full_data_dict['srcid_list'][i]) + for feat_name in full_data_dict['featname_longfeatval_dict'].keys(): + fold_dict['classif_data']['featname_longfeatval_dict'][feat_name].append( \ + full_data_dict['featname_longfeatval_dict'][feat_name][i]) + if len(full_data_dict['iters_list']) > 0: + fold_dict['classif_data']['iters_list'].append(full_data_dict['iters_list'][i]) + if len(full_data_dict['percent_list']) > 0: + fold_dict['classif_data']['percent_list'].append(full_data_dict['percent_list'][i]) + fold_dict['classif_data']['class_list'].append(full_data_dict['class_list'][i]) + if len(full_data_dict['arff_rows']) > 0: + fold_dict['classif_data']['arff_rows'].append(full_data_dict['arff_rows'][i]) + + train_inds = filter(lambda x: x not in sub_range, ind_list) + for i in train_inds: + fold_dict['train_data']['srcid_list'].append(full_data_dict['srcid_list'][i]) + for feat_name in full_data_dict['featname_longfeatval_dict'].keys(): + fold_dict['train_data']['featname_longfeatval_dict'][feat_name].append( \ + full_data_dict['featname_longfeatval_dict'][feat_name][i]) + if len(full_data_dict['iters_list']) > 0: + fold_dict['train_data']['iters_list'].append(full_data_dict['iters_list'][i]) + if len(full_data_dict['percent_list']) > 0: + fold_dict['train_data']['percent_list'].append(full_data_dict['percent_list'][i]) + fold_dict['train_data']['class_list'].append(full_data_dict['class_list'][i]) + if len(full_data_dict['arff_rows']) > 0: + fold_dict['train_data']['arff_rows'].append(full_data_dict['arff_rows'][i]) + + return all_fold_dict + + + def generate_R_randomforest_classifier_rdata(self, train_data={}, + classifier_fpath='', + do_ignore_NA_features=True, + algorithms_dirpath='', + ntrees=1000, mtry=25, nfolds=10, nodesize=5, + classifier_type='randomForest'): + """ Given fpath for an rdata file, file will be generated and (re)written. + """ + rc = Rpy2Classifier(algorithms_dirpath=algorithms_dirpath) + + if os.path.exists(classifier_fpath): + os.system("rm %s" % (classifier_fpath)) + + + if classifier_type == 'randomForest': + classifier_dict = rc.train_randomforest(train_data, + do_ignore_NA_features=do_ignore_NA_features, + ntrees=ntrees, mtry=mtry, nfolds=nfolds, nodesize=nodesize) + elif classifier_type == 'cforest': + classifier_dict = rc.train_cforest(train_data, + do_ignore_NA_features=do_ignore_NA_features, + ntrees=ntrees, mtry=mtry, nfolds=nfolds, nodesize=nodesize) + else: + print('incorrect classifier_type!') + raise + + rc.save_classifier(classifier_dict=classifier_dict, + fpath=classifier_fpath) + print('WROTE:', classifier_fpath) + + + +if __name__ == '__main__': + + + ##### Usage example: + rc = Rpy2Classifier() + + #arff_str = open(os.path.expandvars("$HOME/scratch/full_deboss_20101220.arff")).read() + arff_str = open(os.path.expandvars("$HOME/scratch/full_deboss_1542srcs_20110106.arff")).read() + traindata_dict = rc.parse_full_arff(arff_str=arff_str) + do_ignore_NA_features = False + + #traindata_dict = rc.parse_joey_feature_class_datfile( \ + # feature_fpath=os.path.expandvars("$HOME/scratch/features.dat"), + # class_fpath=os.path.expandvars("$HOME/scratch/class.dat")) + #do_ignore_NA_features = True + + + if 1: + # generate multiple (folded) classifiers: + import cPickle + + Gen_Fold_Classif = GenerateFoldedClassifiers() + all_fold_data = Gen_Fold_Classif.generate_fold_subset_data(full_data_dict=traindata_dict, + n_folds=10, + do_stratified=False, + classify_percent=40.) + + for i_fold, fold_data in all_fold_data.items(): + classifier_fpath = os.path.expandvars("$HOME/scratch/classifier_deboss_RF_%d.rdata" % ( \ + i_fold)) + src_data_pkl_fpath = os.path.expandvars("$HOME/scratch/classifier_deboss_RF_%d.srcs.pkl" % ( \ + i_fold)) + if os.path.exists(src_data_pkl_fpath): + os.system('rm ' + src_data_pkl_fpath) + fp = open(src_data_pkl_fpath, 'wb') + cPickle.dump({'srcid_list':all_fold_data[i_fold]['classif_data']['srcid_list']},fp,1) + fp.close() + + Gen_Fold_Classif.generate_R_randomforest_classifier_rdata(train_data=fold_data['train_data'], + classifier_fpath=classifier_fpath, + do_ignore_NA_features=do_ignore_NA_features) + sys.exit() + + else: + ##### Single classifier case: + classifier_fpath = os.path.expandvars("$HOME/scratch/test_RF_classifier__crap.rdata") + if not os.path.exists(classifier_fpath): + classifier_dict = rc.train_randomforest(traindata_dict, + do_ignore_NA_features=do_ignore_NA_features) + rc.save_classifier(classifier_dict=classifier_dict, + fpath=classifier_fpath) + print('WROTE:', classifier_fpath) + sys.exit() + else: + r_name='rf_clfr' + classifier_dict = {'r_name':r_name} + rc.load_classifier(r_name=r_name, + fpath=classifier_fpath) + + + + classif_results = rc.apply_randomforest(classifier_dict=classifier_dict, + data_dict=traindata_dict, + do_ignore_NA_features=do_ignore_NA_features) + import pdb; pdb.set_trace() + + #TODO: crossvalid_results = rc.get_crossvalid_errors() + diff --git a/mltsp/TCP/Algorithms/simbad_id_lookup.py b/mltsp/TCP/Algorithms/simbad_id_lookup.py new file mode 100644 index 00000000..77a83a00 --- /dev/null +++ b/mltsp/TCP/Algorithms/simbad_id_lookup.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python +""" Adapted from josh's simbad.py +""" +from __future__ import print_function + +import os, sys + +import urllib + + +def query_votable(src_name="HD 27290"): + + #alt_html_pre = "http://simbad.u-strasbg.fr/simbad/sim-coo?" + #html_pre = "http://simbad.harvard.edu/simbad/sim-coo?" + html = "http://simbad.harvard.edu/simbad/sim-id?" + + + #params = urllib.urlencode({'output.format': "VOTABLE", "Coord": "%fd%f" % (ra, dec),\ + # 'Radius': rad, 'Radius.unit': "arcsec"}) + + params = urllib.urlencode({'output.format': "VOTABLE", "Ident":src_name, "NbIdent":1, \ + 'Radius': 2, 'Radius.unit': "arcsec", 'submit':'submit id'}) + f = urllib.urlopen("%s%s" % (html,params)) + s = f.read() + f.close() + return s + + +def parse_class(votable_str): + import amara + + a = amara.parse(votable_str) + #b = a.xml_select("/VOTABLE/RESOURCE/TABLE/FIELD") + #b = a.xml_xpath("/VOTABLE/RESOURCE/TABLE/FIELD[@name='OTYPE']") + b = a.xml_xpath("/VOTABLE/RESOURCE/TABLE/FIELD") + i_col_otype = -1 + for i, elem in enumerate(b): + if elem['name'] == 'OTYPE': + i_col_otype = i + break + b = a.xml_xpath("/VOTABLE/RESOURCE/TABLE/DATA/TABLEDATA/TR/TD") + #print len(b[i_col_otype]) + return str(b[i_col_otype]) + + + + +def query_html(src_name = "HD 27290"): + """ This returns the various associated ids that a source has, unlike in the votable case + """ + #alt_html_pre = "http://simbad.u-strasbg.fr/simbad/sim-coo?" + #html_pre = "http://simbad.harvard.edu/simbad/sim-coo?" + html = "http://simbad.harvard.edu/simbad/sim-id?" + + + #params = urllib.urlencode({'output.format': "VOTABLE", "Coord": "%fd%f" % (ra, dec),\ + # 'Radius': rad, 'Radius.unit': "arcsec"}) + + params = urllib.urlencode({'output.format': "html", "Ident":src_name, "NbIdent":1, \ + 'Radius': 2, 'Radius.unit': "arcsec", 'submit':'submit id'}) + f = urllib.urlopen("%s%s" % (html,params)) + s = f.read() + f.close() + #print s + #a = amara.parse(s) + #b = a.xml_select("/VOTABLE/RESOURCE/TABLE/FIELD") + return s + + +def parse_html_for_ids(html_str, instr_identifier='HIP'): + """ + """ + lines = html_str.split('\n') + out_id_str_list = [] + for line in lines: + if (('
%d AND id <= %d" + # NOTE: this table was filled using the TCP/Software/ingest_tools/sync_with_lbl_footprint_table.py script. + + #(ra, dec) = (336.00127488, 36.490527063) + (ra, dec) = (320.87275, -0.84803) + ##### This gets the PTF limiting magnitude for an (ra,dec): + #select_str = "SELECT filter, ujd, lmt_mg from object_test_db.ptf_candidate_footprint WHERE (MBRContains(radec_region, GeomFromText('POINT(%lf %lf)'))) ORDER BY filter, ujd" % (ra, dec) + select_str = """ +SELECT source_test_db.srcid_lookup_htm.src_id, + object_test_db.sdss_events_a.t, + object_test_db.sdss_events_a.jsb_mag, + object_test_db.sdss_events_a.jsb_mag_err, + object_test_db.sdss_events_a.filt, + object_test_db.sdss_events_a.ra, + object_test_db.sdss_events_a.decl +FROM source_test_db.srcid_lookup_htm +JOIN object_test_db.obj_srcid_lookup USING (src_id) +JOIN object_test_db.sdss_events_a USING (obj_id) +WHERE (DIF_HTMCircle(%lf, %lf, 0.01)) +ORDER BY src_id, t + """ % (ra, dec) + print("SDSS filter numbers translate using {0:'u',1:'g',2:'r',3:'i',4:'z'}") + cursor.execute(select_str) + results = cursor.fetchall() + for row in results: + print(row) diff --git a/mltsp/TCP/Algorithms/stetson_stats.py b/mltsp/TCP/Algorithms/stetson_stats.py new file mode 100644 index 00000000..d3fa832c --- /dev/null +++ b/mltsp/TCP/Algorithms/stetson_stats.py @@ -0,0 +1,51 @@ +from numpy import ones,empty,median,sqrt,mean,abs,sign + + +def stetson_mean( x, weight=100.,alpha=2.,beta=2.,tol=1.e-6,nmax=20): + """An iteratively weighted mean""" + + x0 = median( x ) + + for i in range(nmax): + resid = x - x0 + resid_err = abs(resid)*sqrt(weight) + weight1 = weight/(1. + (resid_err/alpha)**beta) + weight1 /= weight1.mean() + diff = mean( x*weight1 ) - x0 + x0 += diff + if (abs(diff) < tol*abs(x0) or abs(diff) < tol): break + + + return x0 + + +def stetson_j(x,y=[],dx=0.1,dy=0.1): + """Robust covariance statistic between pairs of observations x,y + whose uncertainties are dx,dy. if y is not given, calculates + a robust variance for x.""" + + nels = len(x) + + x0 = stetson_mean(x, 1./dx**2) + delta_x = sqrt(nels / (nels - 1.)) * (x - x0) / dx + + if (y!=[]): + y0 = stetson_mean(y, 1./dy**2) + delta_y = sqrt(nels / (nels - 1.)) * (y - y0) / dy + p_k = delta_x*delta_y + else: + p_k = delta_x**2-1. + + return mean( sign(p_k) * sqrt(abs(p_k)) ) + + +def stetson_k(x,dx=0.1): + """A kurtosis statistic.""" + + nels = len(x) + + x0 = stetson_mean(x, 1./dx**2) + + delta_x = sqrt(nels / (nels - 1.)) * (x - x0) / dx + + return 1./0.798 * mean( abs(delta_x) ) / sqrt( mean(delta_x**2) ) diff --git a/mltsp/TCP/Algorithms/summarize_AL_sources.py b/mltsp/TCP/Algorithms/summarize_AL_sources.py new file mode 100644 index 00000000..74cd2554 --- /dev/null +++ b/mltsp/TCP/Algorithms/summarize_AL_sources.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +""" Summarizes certain science class sources found in AL*.dat files + +""" +from __future__ import print_function + +import sys, os +import MySQLdb +import glob +from numpy import loadtxt + +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + 'Software/ingest_tools')) +import activelearn_utils + +if __name__ == '__main__': + + pars = {'tutor_hostname':'192.168.1.103', + 'tutor_username':'dstarr', #'tutor', # guest + 'tutor_password':'ilove2mass', #'iamaguest', + 'tutor_database':'tutor', + 'tutor_port':3306, #33306, + 'tcp_hostname':'192.168.1.25', + 'tcp_username':'pteluser', + 'tcp_port': 3306, #23306, + 'tcp_database':'source_test_db', + 'al_dirpath':'/home/pteluser/src/TCP/Data/allstars', + 'al_glob_str':'AL_*_*.dat', + 'classids_of_interest':[202, # wtts + 201, # ctts + 200, # tt (obsolete) + 267, # Herbig AE + 197], # Herbig AE/BE], + } + + + DatabaseUtils = activelearn_utils.Database_Utils(pars=pars) + rclass_tutorid_lookup = DatabaseUtils.retrieve_tutor_class_ids() + class_id_name = dict([[v,k] for k,v in rclass_tutorid_lookup.items()]) + + fpaths = glob.glob("%s/%s" % (pars['al_dirpath'], pars['al_glob_str'])) + + print(""" + """) + for fpath in fpaths: + tup_list = loadtxt(fpath, + dtype={'names': ('src_id', 'class_id'), + 'formats': ('i4', 'i4')}, + usecols=(0,1), + unpack=False) + srcid_list = tup_list['src_id'] + classid_list = tup_list['class_id'] + for i, classid in enumerate(classid_list): + if classid in pars['classids_of_interest']: + print('' % (srcid_list[i], fpath[fpath.rfind('/')+1:], class_id_name[classid].replace(' ','_'), srcid_list[i], srcid_list[i])) + + select_str = "select source_id, class_id from sources where project_id = 123" + DatabaseUtils.tutor_cursor.execute(select_str) + results = DatabaseUtils.tutor_cursor.fetchall() + if len(results) == 0: + raise "Error" + for row in results: + (source_id, classid) = row + if classid in pars['classids_of_interest']: + print('' % (source_id, "Debosscher", class_id_name[classid].replace(' ','_'), source_id, source_id)) + + print("""
%d (%s) %s %d
%d (%s) %s %d
+ """) + import pdb; pdb.set_trace() + print() + diff --git a/mltsp/TCP/Algorithms/timeout b/mltsp/TCP/Algorithms/timeout new file mode 100755 index 00000000..6a542e9e --- /dev/null +++ b/mltsp/TCP/Algorithms/timeout @@ -0,0 +1,56 @@ +#!/bin/sh + +# Execute a command with a timeout + +# Author: +# http://www.pixelbeat.org/ +# Notes: +# Note there is a timeout command packaged with coreutils since v7.0 +# If the timeout occurs the exit status is 124. +# There is an asynchronous (and buggy) equivalent of this +# script packaged with bash (under /usr/share/doc/ in my distro), +# which I only noticed after writing this. +# I noticed later again that there is a C equivalent of this packaged +# with satan by Wietse Venema, and copied to forensics by Dan Farmer. +# Changes: +# V1.0, Nov 3 2006, Initial release +# V1.1, Nov 20 2007, Brad Greenlee +# Make more portable by using the 'CHLD' +# signal spec rather than 17. +# V1.3, Oct 29 2009, Ján Sáreník +# Even though this runs under dash,ksh etc. +# it doesn't actually timeout. So enforce bash for now. +# Also change exit on timeout from 128 to 124 +# to match coreutils. +# V2.0, Oct 30 2009, Ján Sáreník +# Rewritten to cover compatibility with other +# Bourne shell implementations (pdksh, dash) + +if [ "$#" -lt "2" ]; then + echo "Usage: `basename $0` timeout_in_seconds command" >&2 + echo "Example: `basename $0` 2 sleep 3 || echo timeout" >&2 + exit 1 +fi + +cleanup() +{ + trap - ALRM #reset handler to default + kill -ALRM $a 2>/dev/null #stop timer subshell if running + kill $! 2>/dev/null && #kill last job + exit 124 #exit with 124 if it was running +} + +watchit() +{ + trap "cleanup" ALRM + sleep $1& wait + kill -ALRM $$ +} + +watchit $1& a=$! #start the timeout +shift #first param was timeout for sleep +trap "cleanup" ALRM INT #cleanup after timeout +"$@"& wait $!; RET=$? #start the job wait for it and save its return value +kill -ALRM $a #send ALRM signal to watchit +wait $a #wait for watchit to finish cleanup +exit $RET #return the value diff --git a/mltsp/TCP/Algorithms/tutor_vizier_utils.py b/mltsp/TCP/Algorithms/tutor_vizier_utils.py new file mode 100644 index 00000000..e4725dba --- /dev/null +++ b/mltsp/TCP/Algorithms/tutor_vizier_utils.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python +""" Scripts for retrieving vizier.cfa.harvard.edu data and then +importing into TUTOR database via web-interface. + +Vizier page: + + http://vizier.cfa.harvard.edu/viz-bin/VizieR?-source=J/A+A/461/183 + +Select: + "Max. Entries: 9999" + "Output layout": "tab -Seperated-Values" + *** also "show" the "recno" column, which gives a source-id + + - This downloads a .tsv file of just source info, filenames, ... + + +NOTE: will need to place timeseries data files in lyr3 directory using: + + + +""" +from __future__ import print_function +import sys, os + +def parse_tsv(tsv_fpath): + """ Parse a tsv ';' seperated file which was downloaded from vizier + """ + out_dict = {'data_lists':{}, + 'data_units_dict':{}} + icol_to_colname = {} + lines = open(tsv_fpath) + i_signif_line = 0 + for line_raw in lines: + line = line_raw.strip() + if len(line) == 0: + continue + elif line[0] == '#': + continue + elif i_signif_line == 0: + # _RAJ2000;_DEJ2000;Name;RAJ2000;DEJ2000;Bmag;Vmag;SpType;FileName + col_names = line.split(';') + for i, col_name in enumerate(col_names): + out_dict['data_lists'][col_name] = [] + icol_to_colname[i] = col_name + elif i_signif_line == 1: + unit_str_list = line.split(';') + for i, unit_str in enumerate(unit_str_list): + out_dict['data_units_dict'][icol_to_colname[i]] = unit_str + elif i_signif_line == 2: + pass # skip this but also increment i_signif_line below + else: + elems = line.split(';') + for i, elem in enumerate(elems): + out_dict['data_lists'][icol_to_colname[i]].append(elem) + i_signif_line += 1 + return out_dict + + +def get_timeseries_files_using_tsv(tsv_fpath='', + data_url_prefix='', + data_url_suffix='', + data_download_dirpath=''): + """ +http://vizier.cfa.harvard.edu/viz-bin/nph-Plot/Vgraph/txt?J/A%2bA/461/183/./phot/aaori.dat&P=0&-y&-&-&- + """ + if not os.path.exists(data_download_dirpath): + os.system('mkdir -p %s' % (data_download_dirpath)) + + data_dict = parse_tsv(tsv_fpath) + print(data_dict['data_lists'].keys()) + print('FileName', data_dict['data_lists']['FileName'][10]) + print('RAJ2000', data_dict['data_lists']['RAJ2000'][10]) + + for fname in data_dict['data_lists']['FileName']: + #get_str = "curl -O %s%s%s" % (data_url_prefix, fname, data_url_suffix) + get_str = 'curl "%s%s%s" > "%s/%s"' % (data_url_prefix, fname, data_url_suffix, + data_download_dirpath, fname) + os.system(get_str) + + print("TSV file:\n\t", tsv_fpath) + print("Timeseries dat downloaded to:\n\t", data_download_dirpath) + + + + + +if __name__ == '__main__': + get_timeseries_files_using_tsv(tsv_fpath='/Users/dstarr/Downloads/asu (2).tsv', + data_url_prefix='http://vizier.cfa.harvard.edu/viz-bin/nph-Plot/Vgraph/txt?J/A%2bA/461/183/./phot/', + data_url_suffix='&P=0&-y&-&-&-', + data_download_dirpath='/Users/dstarr/analysis/tutor124ttauri') diff --git a/mltsp/TCP/Algorithms/utils_classify.R b/mltsp/TCP/Algorithms/utils_classify.R new file mode 100755 index 00000000..7678ab86 --- /dev/null +++ b/mltsp/TCP/Algorithms/utils_classify.R @@ -0,0 +1,325 @@ + +# plots confusion matrix as a heat map +plot.confusion = function(confmat,title="Confusion Matrix",cexprob=0.5,cexaxis=1){ + n = dim(confmat)[1] + err.rate = round(1-sum(diag(confmat))/sum(confmat),4) + # flip confusion matrix for plotting + confmat = confmat[,n:1] + confmat.prob = confmat/rowSums(confmat) + + par(mar=c(5,7,5,.5)) + image(matrix(sqrt(confmat.prob),nrow=n,ncol=n),xlab=paste("True Class, Error Rate:",err.rate),xaxt="n",yaxt="n",main=title,cex.lab= 1.5,col=heat.colors(128)) + axis(2,labels=row.names(confmat),at=seq(1,0,length.out=n),las=2,cex.axis= 0.7*cexaxis) + axis(3,labels=substr(colnames(confmat),1,1),at=seq(1,0,length.out=n),las=1,cex.axis= 0.7*cexaxis,padj=2/cexaxis,tick=FALSE) + axis(1,labels=paste(rowSums(confmat)),at=seq(0,1,length.out=n),las=1,cex.axis=.5*cexaxis,tick=F,padj=-4/cexaxis) + abline(v=seq(-1./((n-1)*2),1-1./((n-1)*2),length.out= n)) + abline(h=seq(-1./((n-1)*2),1-1./((n-1)*2),length.out= n)) + for(ii in 1:n){ + for(jj in 1:n){ + if(confmat.prob[ii,jj]>0.005){ + if(confmat.prob[ii,jj]>=0.1){ + text((ii-1)*(1/(n-1)),(jj-1)*(1/(n-1)),round(confmat.prob[ii,jj],2),cex=cexprob,col='blue') + } + else { + text((ii-1)*(1/(n-1)),(jj-1)*(1/(n-1)),round(confmat.prob[ii,jj],2),cex=cexprob,col='white') + } + } + } + } +} + +# set up Debossher classes as factor vector (to compare w/ their work) +class.debos = function(class){ + class.new = paste(class) + class.new[class=="Mira" | class=="MIRA"] = "a. Mira" + class.new[class=="Semiregular Pulsating Variable" | class=="SR"] = "b. Semireg PV" + class.new[class=="RV Tauri" | class=="RVTAU"] = "c. RV Tauri" + class.new[class=="Classical Cepheid" | class=="CLCEP"] = "d. Classical Cepheid" + class.new[class=="Population II Cepheid" | class=="PTCEP"] = "e. Pop. II Cepheid" + class.new[class=="Multiple Mode Cepheid" | class=="DMCEP"] = "f. Multi. Mode Cepheid" + class.new[class=="RR Lyrae, Fundamental Mode" | class=="RRAB"] = "g. RR Lyrae, FM" + class.new[class=="RR Lyrae, First Overtone" | class=="RRC"] = "h. RR Lyrae, FO" + class.new[class=="RR Lyrae, Double Mode" | class=="RRD"] = "i. RR Lyrae, DM" + class.new[class=="Delta Scuti" | class=="DSCUT"] = "j. Delta Scuti" + class.new[class=="Lambda Bootis Variable" | class=="LBOO"] = "k. Lambda Bootis" + class.new[class=="Beta Cephei" | class=="BCEP"] = "l. Beta Cephei" + class.new[class=="Slowly Pulsating B-stars" | class=="SPB"] = "m. Slowly Puls. B" + class.new[class=="Gamma Doradus" | class=="GDOR"] = "n. Gamma Doradus" + class.new[class=="Be Star"] = "o. Pulsating Be" + class.new[class=="Periodically variable supergiants" | class=="PVSG"] = "p. Per. Var. SG" + class.new[class=="Chemically Peculiar Stars" | class=="CP"] = "q. Chem. Peculiar" + class.new[class=="Wolf-Rayet" | class=="WR"] = "r. Wolf-Rayet" + class.new[class=="T Tauri"| class=="TTAU"] = "s. T Tauri" + class.new[class=="Herbig AE/BE Star" | class=="HAEBE"] = "t. Herbig AE/BE" + class.new[class=="S Doradus" | class=="LBV"] = "u. S Doradus" + class.new[class=="Ellipsoidal" | class=="ELL"] = "v. Ellipsoidal" + class.new[class=="Beta Persei" | class=="EA"] = "w. Beta Persei" + class.new[class=="Beta Lyrae" | class=="EB"] = "x. Beta Lyrae" + class.new[class=="W Ursae Majoris" | class=="EW"] = "y. W Ursae Maj." + class.new[class=="Algol (Beta Persei)" | class=="EA"] = "w. Beta Persei" + + class.new = factor(class.new) +# levels(class.new) = sort(c(levels(class.new),"o. BE Star")) + return(class.new) +} + +# straighten out doubly-labeled data +class.double = function(class,ID){ + class[ID==148137] = "u. S Doradus" + class[ID==148583] = "u. S Doradus" + class[ID==148614] = "u. S Doradus" + class[ID==148615] = "u. S Doradus" + class[ID==148038] = "u. S Doradus" + class[ID==148174] = "t. Herbig AE/BE" + class[ID==148375] = "t. Herbig AE/BE" + return(factor(class)) +} + +# loads in OGLE + HIPPARCOS data +load.data = function(path){ + +### HIPPARCOS + hip.ID = read.table(paste(path,"hipparcos_hipIDs.dat",sep=""))[,1] + hip.classes = read.table(paste(path,"hipparcos_classes.dat",sep=""))[[1]] + throwout = c("25473","26304","33165","34042","36750","39009","53461","57812","58907","75377","104029") +#old: "25473", "34042","36750","39009","57812","58907","104029") + hip.out = which(hip.classes=="ROAP" | hip.classes=="XB" | hip.classes=="SXPHE" | hip.ID %in% throwout) + + hip.classes = hip.classes[-hip.out] + hip.ID = hip.ID[-hip.out] + hip.features = read.table(paste(path,"hipparcos_features.dat",sep=""),header=TRUE)[-hip.out,] +# sortfeat = sort(names(hip.features),index.return=TRUE) +# hip.features = hip.features[,sortfeat$ix] +# fix doubly-labeled sources + hip.classes[hip.ID=="5267"] = "LBV" + hip.classes[hip.ID=="23428"] = "LBV" + hip.classes[hip.ID=="26403"] = "HAEBE" + hip.classes[hip.ID=="54413"] = "HAEBE" + hip.classes[hip.ID=="86624"] = "LBV" + hip.classes[hip.ID=="89956"] = "LBV" + hip.classes[hip.ID=="89963"] = "LBV" + ## new double-labels: + hip.classes[hip.ID=="27400"] = "DSCUT" + hip.classes[hip.ID=="30326"] = "MIRA" + hip.classes[hip.ID=="54283"] = "WR" + hip.classes[hip.ID=="84757"] = "WR" + hip.classes[hip.ID=="88856"] = "WR" + hip.classes[hip.ID=="99252"] = "DSCUT" + hip.classes[hip.ID=="109306"] = "LBOO" + hip.classes = class.debos(hip.classes) + +## OGLE + ID = read.table(paste(path,"R/IDs.dat",sep=""))[,1] + features = read.table(paste(path,"R/features.dat",sep=""),header=T) + features = as.data.frame(features[,-which(substr(names(features),1,4)=="sdss" | substr(names(features),1,3)=="ws_")]) # take out sdss & ws features + classes = (read.table(paste(path,"R/class.dat",sep=""),sep="\n"))[[1]] + ogle = which(classes=="W Ursae Majoris" | classes=="RR Lyrae, Double Mode" | classes == "Multiple Mode Cepheid" | classes == "Beta Lyrae" | classes == "Beta Persei") + ogl.features = features[ogle,] + ogl.classes = class.debos(classes[ogle]) + ogl.ID = ID[ogle] + + hip1.features=NULL + for(ii in 1:length(names(ogl.features))){ + ind = which(names(hip.features)==names(ogl.features)[ii]) + hip1.features = cbind(hip1.features,hip.features[,ind]) + } + colnames(hip1.features) = colnames(ogl.features) + hip.features = as.data.frame(hip1.features) + + # hip.features = hip.features[,which(names(hip.features) %in% names(ogl.features))] + + classes = factor(c(paste(hip.classes),paste(ogl.classes))) + features = rbind(hip.features,ogl.features) + names(features)[54:55]= c("QSO","non_QSO") + ID = c(hip.ID,ogl.ID) + return(list(features=features,classes=classes,ID=ID)) +} + +## fixes a confusion matrix w/ too few classes +fixconfmat = function(confmat,pred.names,y.names){ + p = dim(confmat)[2] + + # find which class names are missing + var.LO = setdiff(y.names,pred.names) + var.LOind = sort(which(y.names%in%var.LO)) + len.LO = length(var.LO) + if(len.LO>0){ + cm.tmp = confmat[1:(var.LOind[1]-1),] + for(ii in 1:len.LO){ + cm.tmp = rbind(cm.tmp,rep(0,p)) + + nadd = ifelse(is.na(var.LOind[ii+1]),p-var.LOind[ii],var.LOind[ii+1]-var.LOind[ii]-1) + if(nadd>0){ + cm.tmp = rbind(cm.tmp,confmat[(var.LOind[ii]-ii+1):(var.LOind[ii]-ii+nadd),]) + } + } + confmat = cm.tmp + row.names(confmat) = y.names + } + confmat = t(confmat) + return(confmat) +} + +# plots feature importance matrix (from pairwise CART) +plot.featImp = function(mat,sortLS = TRUE){ + n = dim(mat) + # put LS features first + featNames = row.names(mat) + if(sortLS){ + feat.LS = which(substr(featNames,1,4)=="freq") + mat = rbind(mat[feat.LS,],mat[-feat.LS,]) + featNames = c(featNames[feat.LS],featNames[-feat.LS]) + } + # plot + par(mar=c(11,7,.3,.5)) + image(mat[,n[2]:1],xlab="",xaxt="n",yaxt="n",cex.lab= 1,col=heat.colors(64)) + axis(2,labels=colnames(mat),at=seq(1,0,length.out=n[2]),las=2,cex.axis= 0.7) + axis(1,labels=row.names(mat),at=seq(0,1,length.out=n[1]),las=2,cex.axis= 0.75,padj=0.5,tick=TRUE) + if(sortLS){ + abline(v=(length(feat.LS)-.5)/(n[1]-1),lwd=3,col='darkblue') } + # abline(v=(length(feat.LS)-.5)/(n[1]-1),lwd=2,col=4) + # axis(1,labels=paste(rowSums(mat)),at=seq(0,1,length.out=n[2]),las=1,cex.axis=.5,tick=F,padj=-4) +# abline(v=seq(-1./((n[1]-1)*2),1-1./((n-1)*2),length.out= n[1])) +# abline(h=seq(-1./((n[2]-1)*2),1-1./((n-1)*2),length.out= n[2])) +} + +######## +### create class hierarchy from varstar classes +class.hier = function(class){ + hier = c('1 pv','.1 giant','a','b','c','.2 cepheid','d','e','f','.3 rrl','g','h','i','.4 other','j','k','l','m','n','o','2 ev','p','q','r','s','t','u','3 msv','v','w','x','y') + depth = c(1,2,rep(3,3),2,rep(3,3),2,rep(3,3),2,rep(3,6),1,rep(2,6),1,rep(2,4)) + node = which(substr(hier,1,1)==hier) + intern = which(substr(hier,1,1)!=hier) + top = which(depth==1) + class = factor(substr(paste(class),1,1)) + class.boo = matrix(0,length(class),length(hier)) + class.boo[cbind(1:length(class),node[as.numeric(class)])] = 1 + for(ii in 1:length(class)){ + class.boo[ii,max(intern[intern < node[as.numeric(class)[ii]]])] = 1 + class.boo[ii,max(top[top < node[as.numeric(class)[ii]]])] = 1 + } + colnames(class.boo) = hier + return(list(class=class.boo,depth=depth)) +} + + + + +# construct cost matrix for classifier +costMat = function(val=2){ + p = 25 + cost = matrix(0,p,p) + tax1 = c(rep("pv",15),rep("ev",6),rep("msv",4)) + tax2 = c(rep("giant",3),rep("ceph",3),rep("rrl",3),"ds","lb","bc","spb","gd","be","pvsg","cp","wr","tt","haebe","sd","ell","bp","bl","wum") + + + for(ii in 1:(p-1)){ + for(jj in (ii+1):p){ + if(tax1[ii]==tax1[jj]){ + if(tax2[ii]==tax2[jj]){ + cost[ii,jj] = cost[jj,ii] = .5 + } else { + cost[ii,jj] = cost[jj,ii] = 1 + } + } + else { + cost[ii,jj] = cost[jj,ii] = val + } + } + } + return(cost) +} + +# compute class weights using rescaling approach to cost matrix +costWeights = function(y,cost=costMat(2)){ + n = table(y) + eps = rowSums(cost) + w = (sum(n)*eps)/sum(n*eps) + return(w) +} + +# take ratios of frequencies & amplitudes +featureConvert = function(features){ + + freq1 = features[,"freq1_harmonics_freq_0"] + features[,"freq2_harmonics_freq_0"] = features[,"freq2_harmonics_freq_0"]/freq1 + features[,"freq3_harmonics_freq_0"] = features[,"freq3_harmonics_freq_0"]/freq1 + + amp1 = features[,"freq1_harmonics_amplitude_0"] + features[,"freq1_harmonics_amplitude_1"] = features[,"freq1_harmonics_amplitude_1"]/amp1 + features[,"freq1_harmonics_amplitude_2"] = features[,"freq1_harmonics_amplitude_2"]/amp1 + features[,"freq1_harmonics_amplitude_3"] = features[,"freq1_harmonics_amplitude_3"]/amp1 + features[,"freq2_harmonics_amplitude_0"] = features[,"freq2_harmonics_amplitude_0"]/amp1 + features[,"freq2_harmonics_amplitude_1"] = features[,"freq2_harmonics_amplitude_1"]/amp1 + features[,"freq2_harmonics_amplitude_2"] = features[,"freq2_harmonics_amplitude_2"]/amp1 + features[,"freq2_harmonics_amplitude_3"] = features[,"freq2_harmonics_amplitude_3"]/amp1 + features[,"freq3_harmonics_amplitude_0"] = features[,"freq3_harmonics_amplitude_0"]/amp1 + features[,"freq3_harmonics_amplitude_1"] = features[,"freq3_harmonics_amplitude_1"]/amp1 + features[,"freq3_harmonics_amplitude_2"] = features[,"freq3_harmonics_amplitude_2"]/amp1 + features[,"freq3_harmonics_amplitude_3"] = features[,"freq3_harmonics_amplitude_3"]/amp1 + + return(features) +} + + +# plot prob(correct) for each source, by class +probPlot = function(probMat,pred,classes,thresh = NULL){ + + n = length(classes) + y.names = levels(classes) + p = length(y.names) + probCor = probMat[cbind(1:n,as.numeric(classes))] + +# if(is.null(thresh)) { thresh = rep(1/p,p)} + + par(mar=c(8.75,4,.5,.5)) + # correct class vs. not + col.cor = ifelse(pred==classes,"#00800070",'red') + pch.cor = ifelse(pred==classes,19,4) + # second place + sortProb = apply(probMat,1,sort,decreasing=TRUE) + first = which(probCor==sortProb[1,]) + second = which(probCor==sortProb[2,]) + col.cor[second] = "#00008B70" + pch.cor[second] = 17 + lwd.cor = rep(1.5,n) + lwd.cor[c(first,second)] = 0 + + plot(as.numeric(classes)+runif(n,-.2,.2),probCor,xaxt='n',xlab="",ylab="Pr(Correct Class)",col=col.cor,pch=pch.cor,xlim = c(-.5,p),ylim=c(-.15,1),lwd=lwd.cor) + abline(v=0:length(y.names)+.5) + abline(h=c(0,1),lty=2) + axis(1,labels=y.names,at=1:length(y.names),las=2,cex.axis=.9,padj=0.5,tick=TRUE) + + first.class = tabulate(classes[first])/tabulate(classes) + if(length(tabulate(classes[first])) < length(tabulate(classes))){ + first.class[(length(tabulate(classes[first]))+1) : p] = 0 } + second.class = tabulate(classes[second])/tabulate(classes) + if(length(tabulate(classes[second])) < length(tabulate(classes))){ + second.class[(length(tabulate(classes[second]))+1) : p] = 0 } + none.class = rep(1,p) - first.class - second.class + for(jj in 1:p){ + text(jj,-.05,round(first.class[jj]*100,1),cex=.8,col='darkgreen') + text(jj,-.1,round(second.class[jj]*100,1),cex=.8,col='darkblue') + text(jj,-.15,round(none.class[jj]*100,1),cex=.8,col='red') + } + text(0.5,-.05,"Top (%)",pos=2) + text(0.5,-.1,"2nd (%)",pos=2) + text(0.5,-.15,"X (%)",pos=2) +} + +# plot prob(class) for each source / class +probPlot1 = function(probMat,pred,classes){ + + n = length(classes) + y.names = levels(classes) + m = length(y.names) + par(mar=c(8.75,4,.5,.5)) + plot(rep(1,n)+runif(n,-.2,.2),probMat[,1],xlim=c(1,m),xaxt='n',xlab="",ylab="Pr(Class)",col=ifelse(classes==y.names[1],'blue','grey'),pch=ifelse(classes==y.names[1],20,3),cex=.7,ylim=c(0,1)) + for(ii in 2:length(y.names)){ + points(rep(ii,n)+runif(n,-.2,.2),probMat[,ii],col=ifelse(classes==y.names[ii],'blue','grey'),pch=ifelse(classes==y.names[ii],20,3),cex=.7) + } + abline(v=0:length(y.names)+.5) + abline(h=c(0,1),lty=2) + axis(1,labels=y.names,at=1:length(y.names),las=2,cex.axis=.9,padj=0.5,tick=TRUE) + +} diff --git a/mltsp/TCP/Algorithms/xmlrpc_example.py b/mltsp/TCP/Algorithms/xmlrpc_example.py new file mode 100644 index 00000000..5b701adc --- /dev/null +++ b/mltsp/TCP/Algorithms/xmlrpc_example.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +""" +An example client / server of xmlrpc transport with python. + +You could have the server using one version of python and the client using another version of python (within reason : maybe not with Python 1.0 and Python3000...). + +To use in it's current simple form: +1) start server by having "if 1:" under __main__ + +2) start client by having "if 0:" under __main__ + +""" +from __future__ import print_function +import os, sys + +server_hostname = "192.168.1.25" +server_port = 23459 + +class Some_Class_We_Want_Remotely_Accessible: + """ Awesome Class which does awesome stuff. + """ + def __init__(self, important_parameter=123): + self.important_parameter = important_parameter + + def some_method(self, passed_value): + print('important_parameter=', self.important_parameter) + print('passed_value=', passed_value) + + +if __name__ == '__main__': + + if 1: + # server: + import SimpleXMLRPCServer + server = SimpleXMLRPCServer.SimpleXMLRPCServer( \ + (server_hostname, server_port), \ + allow_none=True) + server.register_instance( \ + Some_Class_We_Want_Remotely_Accessible(important_parameter=1)) + server.register_multicall_functions() + server.register_introspection_functions() + print('XMLRPC Server is starting at:', server_hostname, server_port) + server.serve_forever() + + else: + # client: + import xmlrpclib + server = xmlrpclib.ServerProxy("http://%s:%d" % \ + (server_hostname, server_port)) + try: + print(server.system.listMethods()) + except: + print('EXCEPT at server.system.listMethods() : Probably XMLRPC server is down!') + sys.exit() + print(server.system.methodHelp("some_method")) + #src_list = server.get_sources_for_radec(ra, dec, box_range) + src_list = server.some_method('hello') diff --git a/mltsp/TCP/Software/__init__.py b/mltsp/TCP/Software/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/mltsp/TCP/Software/__init__.py @@ -0,0 +1 @@ + diff --git a/mltsp/TCP/Software/citris33/__init__.py b/mltsp/TCP/Software/citris33/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/mltsp/TCP/Software/citris33/__init__.py @@ -0,0 +1 @@ + diff --git a/mltsp/TCP/Software/citris33/arff_generation_master.py b/mltsp/TCP/Software/citris33/arff_generation_master.py new file mode 100644 index 00000000..345dec1b --- /dev/null +++ b/mltsp/TCP/Software/citris33/arff_generation_master.py @@ -0,0 +1,2696 @@ +#!/usr/bin/env python +""" +Adapted from test_pairwise_on_citris33_ipython.py + +./arff_generation_master.py +scp -P 10322 ~/scratch/out.arff pteluser@lyra.berkeley.edu:/tmp/citris33_asas.arff + +""" +from __future__ import print_function +import sys, os +import cPickle +import time +import gzip +import copy +import glob +import matplotlib +matplotlib.use('agg') # just needed for lightcurve.py::lomb_code() PSD.png plotting without X11 + +from optparse import OptionParser + +sys.path.append(os.path.abspath(os.environ.get('TCP_DIR') + 'Software/ingest_tools')) + +sciclass_lookup = {'classid_shortname': {0: '_varstar_', + 1: 'GCVS', + 2: 'Eruptive', + 3: 'FU', + 4: 'GCAS', + 5: 'I', + 6: 'IA', + 7: 'IB', + 8: 'IN', + 9: 'INA', + 10: 'INB', + 11: 'INT', + 12: 'IN(YY)', + 13: 'IS', + 14: 'ISA', + 16: 'ISB', + 17: 'RCB', + 18: 'RS', + 19: 'SDOR', + 20: 'UV', + 21: 'UVN', + 22: 'WR', + 23: 'Pulsating', + 24: 'ACYG', + 25: 'BCEP', + 26: 'BCEPS', + 27: 'CEP', + 28: 'CEP(B)', + 29: 'CW', + 30: 'CWA', + 31: 'CWB', + 32: 'DCEP', + 33: 'DCEPS', + 34: 'DSCT', + 35: 'DSCTC', + 36: 'L', + 37: 'LB', + 38: 'LC', + 39: 'M', + 40: 'PVTEL', + 41: 'RR', + 42: 'RR(B)', + 43: 'RRAB', + 44: 'RRC', + 45: 'RV', + 46: 'RVA', + 47: 'RVB', + 48: 'SR', + 49: 'SRA', + 50: 'SRB', + 51: 'SRC', + 52: 'SRD', + 53: 'SXPHE', + 54: 'ZZ', + 55: 'ZZA', + 56: 'ZZB', + 57: 'Rotating', + 58: 'ACV', + 59: 'ACVO', + 60: 'BY', + 61: 'ELL', + 62: 'FKCOM', + 63: 'PSR', + 64: 'SXARI', + 65: 'Cataclysmic', + 66: 'N', + 67: 'NA', + 68: 'NB', + 69: 'NC', + 70: 'NL', + 71: 'NR', + 72: 'SN', + 73: 'SNI', + 74: 'SNII', + 75: 'UG', + 76: 'UGSS', + 77: 'UGSU', + 78: 'UGZ', + 79: 'ZAND', + 80: 'Eclipsing', + 82: 'E', + 83: 'EA', + 84: 'EB', + 85: 'EW', + 86: 'GS', + 87: 'PN', + 88: 'RS', + 89: 'WD', + 90: 'WR(1)', + 91: 'AR', + 92: 'D', + 93: 'DM', + 94: 'DS', + 95: 'DW', + 96: 'K', + 97: 'KE', + 98: 'KW', + 99: 'SD', + 100: 'SNIa', + 101: 'SNIb', + 102: 'SNIc', + 103: 'SNIIP', + 104: 'SNIIN', + 105: 'SNIIL', + 106: 'SNIa-sc', + 107: 'Nonstellar', + 109: 'GalNuclei', + 110: 'AGN', + 111: 'TDE', + 112: 'DrkMatterA', + 113: 'GRB', + 114: 'SHB', + 115: 'LSB', + 116: 'SGR', + 117: 'X', + 118: 'XB', + 119: 'XF', + 120: 'XI', + 121: 'XJ', + 122: 'XND', + 123: 'XNG', + 124: 'XP', + 125: 'XPR', + 126: 'XPRM', + 127: 'XRM', + 128: 'ZZO', + 129: 'NEW', + 130: 'AM', + 131: 'R', + 132: 'BE', + 133: 'EP', + 134: 'SRS', + 135: 'GDOR', + 136: 'RPHS', + 137: 'LPB', + 138: 'BLBOO', + 139: 'BL-Lac', + 140: 'RRcl', + 141: 'RRe', + 142: 'SNIa-pec', + 143: 'SNIc-pec', + 145: 'ML', + 149: 'UXUma', + 150: 'Polars', + 151: 'DQ', + 152: 'EWa', + 153: 'EWs', + 154: 'vs', + 157: 'cv', + 158: 'nov', + 159: 'cn', + 160: 'n-l', + 161: 'sw', + 162: 'vy', + 163: 'ux', + 164: 'amcvn', + 165: 'p', + 166: 'am', + 167: 'dqh', + 168: 'ug', + 169: 'su', + 170: 'er', + 171: 'wz', + 172: 'zc', + 173: 'ssc', + 174: 'rn', + 175: 'sv', + 176: 'grb', + 177: 'lgrb', + 178: 'sgrb', + 179: 'srgrb', + 180: 'sne', + 181: 'cc', + 182: 'tia', + 183: 'tib', + 184: 'tic', + 185: 'tsnii', + 186: 'pi', + 187: 'tsni', + 188: 'ev', + 189: 'rscvn', + 190: 'uv', + 191: 'sdorad', + 192: 'wr', + 193: 'gc', + 194: 'fuor', + 195: 'ov', + 196: 'rcb', + 197: 'haebe', + 198: 'be', + 199: 'shs', + 200: 'tt', + 201: 'ttc', + 202: 'ttw', + 203: 'puls', + 204: 'gd', + 205: 'sx', + 206: 'rr-lyr', + 207: 'ac', + 208: 'mira', + 209: 'pwd', + 211: 'ds', + 212: 'pvt', + 213: 'bc', + 214: 'sreg', + 215: 'rv', + 216: 'piic', + 217: 'c', + 218: 'rr-ab', + 219: 'rr-c', + 220: 'rr-d', + 221: 'rr-e', + 222: 'rr-cl', + 223: 'zz', + 224: 'zzh', + 225: 'zzhe', + 226: 'zzheii', + 227: 'gw', + 228: 'sr-a', + 229: 'sr-b', + 230: 'sr-c', + 231: 'sr-d', + 232: 'rvc', + 233: 'rvv', + 234: 'bl', + 235: 'wv', + 236: 'ca', + 237: 'cm', + 238: 'dc', + 239: 'sdc', + 240: 'rot', + 241: 'sxari', + 242: 'aii', + 243: 'fk', + 244: 'plsr', + 245: 'by', + 246: 'ell', + 247: 'msv', + 248: 'b', + 249: 'iii', + 250: 'xrb', + 251: 'bly', + 252: 'wu', + 253: 'alg', + 254: 'psys', + 255: 'SSO', + 256: 'BLZ', + 257: 'OVV', + 258: 'dsm', + 259: 'lamb', + 260: 'xrbin', + 261: 'lboo', + 262: 'qso', + 263: 'seyf', + 265: 'fsrq', + 266: 'iin', + 267: 'hae', + 268: 'tiapec', + 269: 'tiasc', + 270: 'iil', + 271: 'iip', + 272: 'iib', + 273: 'ticpec', + 274: 'maser', + 275: 'moving', + 276: 'ast', + 277: 'comet', + 278: 'hpm', + 279: 'eclipsing', + 280: 'k', + 281: 'd', + 282: 'sd', + 283: 'unclass', + 284: 'pvsg', + 285: 'cp', + 286: 'spb', + 287: 'sdbv', + 1000000: 'Chemically Peculiar Stars'}, + 'longname_shortname': {'AM Canum Venaticorum': 'amcvn', + 'AM Her': 'AM', + 'AM Herculis (True Polar)': 'am', + 'Active Galactic Nuclei': 'AGN', + 'Algol (Beta Persei)': 'alg', + 'Alpha Cygni': 'ac', + 'Alpha2 CVn - Rapily Oscillating': 'ACVO', + 'Alpha2 Canum Venaticorum': 'aii', + 'Anomalous Cepheids': 'BLBOO', + 'Anomolous Cepheid': 'ca', + 'Asteroid': 'ast', + 'BL Lac': 'BL-Lac', + 'BY Draconis': 'by', + 'Be Star': 'be', + 'Be star': 'BE', + 'Beta Cephei': 'bc', + 'Beta Cephei - Short Period': 'BCEPS', + 'Beta Lyrae': 'bly', + 'Binary': 'b', + 'Blazar': 'BLZ', + 'Cataclysmic (Explosive and Novalike) Variable Stars': 'Cataclysmic', + 'Cataclysmic Variable': 'cv', + 'Cepheid Variable': 'c', + 'Cepheids': 'CEP', + 'Cepheids - Multiple Modes': 'CEP(B)', + 'Chemically Peculiar Stars': 'CP', + 'Classical Cepheid': 'dc', + 'Classical Novae': 'cn', + 'Classical T Tauri': 'ttc', + 'Close Binary Eclipsing Systems': 'eclipsing', + 'Close Binary with Reflection': 'R', + 'Comet': 'comet', + 'Contact Systems': 'k', + 'Contact Systems - Early (O-A)': 'KE', + 'Contact Systems - W Ursa Majoris': 'KW', + 'Core Collapse Supernovae': 'cc', + 'DQ Herculis (Intermdiate Polars)': 'dqh', + 'DQ Herculis Variable (Intermediate Polars)': 'DQ', + 'Dark Matter Anniliation Event': 'DrkMatterA', + 'Delta Cep': 'DCEP', + 'Delta Cep - Symmetrical': 'DCEPS', + 'Delta Scuti': 'ds', + 'Delta Scuti - Low Amplitude': 'DSCTC', + 'Delta Scuti - Multiple Modes': 'dsm', + 'Detached': 'd', + 'Detached - AR Lacertae': 'AR', + 'Detached - Main Sequence': 'DM', + 'Detached - With Subgiant': 'DS', + 'ER Ursae Majoris': 'er', + 'Eclipsed by Planets': 'EP', + 'Eclipsing Binary Systems': 'E', + 'Ellipsoidal': 'ell', + 'Eruptive Variable': 'ev', + 'Eruptive Variable Stars': 'Eruptive', + 'Eruptive Wolf-Rayet': 'WR', + 'FK Comae Berenices': 'fk', + 'FU Orionis': 'fuor', + 'Fast Novae': 'NA', + 'Flaring Orion Variables': 'UVN', + 'Flat Spectrum Radio Quasar': 'fsrq', + 'Fluctuating X-Ray Systems': 'XF', + 'GW Virginis': 'gw', + 'Galaxy Nuclei ': 'GalNuclei', + 'Gamma Cas': 'GCAS', + 'Gamma Cassiopeiae': 'gc', + 'Gamma Doradus': 'gd', + 'Gamma Ray Burst': 'grb', + 'Gamma-ray Bursts': 'GRB', + 'Herbig AE': 'hae', + 'Herbig AE/BE Star': 'haebe', + 'High Proper Motion Star': 'hpm', + 'Irregular': 'I', + 'Irregular Early O-A': 'IA', + 'Irregular Intermediate F-M': 'IB', + 'Irregular Supergiants': 'LC', + 'Lambda Bootis Variable': 'lboo', + 'Lambda Eridani': 'lamb', + 'Long GRB': 'lgrb', + 'Long Gamma-ray Burst': 'LSB', + 'Long Period (W Virginis)': 'wv', + 'Long Period B': 'LPB', + 'Maser': 'maser', + 'Microlensing Event': 'ML', + 'Mira': 'mira', + 'Moving Source': 'moving', + 'Multiple Mode Cepheid': 'cm', + 'Multiple Star Variables': 'msv', + 'New Variability Types': 'NEW', + 'Novae': 'nov', + 'Novalike': 'n-l', + 'Novalike Variables': 'NL', + 'Optically Variable Pulsars': 'PSR', + 'Optically Violent Variable Quasar (OVV)': 'OVV', + 'Orion': 'IN', + 'Orion Early Types (B-A or Ae)': 'INA', + 'Orion Intermediate Types (F-M or Fe-Me)': 'INB', + 'Orion T Tauri': 'INT', + 'Orion Variable': 'ov', + 'Orion with Absorption': 'IN(YY)', + 'PV Telescopii': 'pvt', + 'Pair Instability Supernovae': 'pi', + 'Peculiar Type Ia SN': 'tiapec', + 'Peculiar Type Ia Supernovae': 'SNIa-pec', + 'Peculiar Type Ic Supernovae': 'SNIc-pec', + 'Periodically variable supergiants': 'pvsg', + 'Polars': 'p', + 'Population II Cepheid': 'piic', + 'Pulsar': 'plsr', + 'Pulsating Variable': 'puls', + 'Pulsating Variable Stars': 'Pulsating', + 'Pulsating White Dwarf': 'pwd', + 'Pulsating subdwarf B-stars': 'sdbv', + 'QSO': 'qso', + 'R Coronae Borealis': 'rcb', + 'RR Lyrae': 'rr-lyr', + 'RR Lyrae - Asymmetric': 'RRAB', + 'RR Lyrae - Dual Mode': 'RR(B)', + 'RR Lyrae - Near Symmetric': 'RRC', + 'RR Lyrae -- Closely Spaced Modes': 'RRcl', + 'RR Lyrae -- Second Overtone Pulsations': 'RRe', + 'RR Lyrae, Closely Spaced Modes': 'rr-cl', + 'RR Lyrae, Double Mode': 'rr-d', + 'RR Lyrae, First Overtone': 'rr-c', + 'RR Lyrae, Fundamental Mode': 'rr-ab', + 'RR Lyrae, Second Overtone': 'rr-e', + 'RS Canum Venaticorum': 'rscvn', + 'RV Tauri': 'rv', + 'RV Tauri - Constant Mean Magnitude': 'RVA', + 'RV Tauri - Variable Mean Magnitude': 'RVB', + 'RV Tauri, Constant Mean Brightness': 'rvc', + 'RV Tauri, Variable Mean Brightness': 'rvv', + 'Rapid Irregular': 'IS', + 'Rapid Irregular Early Types (B-A or Ae)': 'ISA', + 'Rapid Irregular Intermediate to Late (F-M and Fe-Me)': 'ISB', + 'Recurrent Novae': 'rn', + 'Rotating Ellipsoidal': 'ELL', + 'Rotating Variable': 'rot', + 'Rotating Variable Stars': 'Rotating', + 'S Doradus': 'sdorad', + 'SRa (Z Aquarii)': 'sr-a', + 'SRb': 'sr-b', + 'SRc': 'sr-c', + 'SRd': 'sr-d', + 'SS Cygni': 'ssc', + 'SU Ursae Majoris': 'su', + 'SW Sextantis': 'sw', + 'SX Arietis': 'sxari', + 'SX Phoenicis': 'sx', + 'SX Phoenicis - Pulsating Subdwarfs': 'SXPHE', + 'Semidetached': 'sd', + 'Semiregular': 'SR', + 'Semiregular - Persistent Periodicity': 'SRA', + 'Semiregular - Poorly Defined Periodicity': 'SRB', + 'Semiregular F, G, or K': 'SRD', + 'Semiregular Pulsating Red Giants': 'SRS', + 'Semiregular Pulsating Variable': 'sreg', + 'Semiregular Supergiants': 'SRC', + 'Seyfert': 'seyf', + 'Shell Star': 'shs', + 'Short GRB': 'sgrb', + 'Short Gamma-ray Burst': 'SHB', + 'Short period (BL Herculis)': 'bl', + 'Slow Irregular': 'L', + 'Slow Irregular - Late Spectral Type (K, M, C, S)': 'LB', + 'Slow Novae': 'NB', + 'Slowly Pulsating B-stars': 'spb', + 'Soft Gamma Ray Repeater': 'srgrb', + 'Soft Gamma-ray Repeater': 'SGR', + 'Solar System Object': 'SSO', + 'Super-chandra Ia supernova': 'SNIa-sc', + 'Super-chandra Type Ia SN': 'tiasc', + 'Supernovae': 'sne', + 'Symbiotic Variable': 'sv', + 'Symbiotic Variables': 'ZAND', + 'Symmetrical': 'sdc', + 'Systems with Planetary Nebulae': 'PN', + 'Systems with Planets': 'psys', + 'Systems with Supergiant(s)': 'GS', + 'Systems with White Dwarfs': 'WD', + 'Systems with Wolf-Rayet Stars': 'WR(1)', + 'T Tauri': 'tt', + 'Three or More Stars': 'iii', + 'Tidal Disruption Event': 'TDE', + 'Type I Supernovae': 'tsni', + 'Type II L supernova': 'iil', + 'Type II N Supernova': 'iin', + 'Type II P supernova': 'iip', + 'Type II Supernovae': 'tsnii', + 'Type II b Supernova': 'iib', + 'Type II-L': 'SNIIL', + 'Type IIN': 'SNIIN', + 'Type IIP': 'SNIIP', + 'Type Ia': 'SNIa', + 'Type Ia Supernovae': 'tia', + 'Type Ib': 'SNIb', + 'Type Ib Supernovae': 'tib', + 'Type Ic': 'SNIc', + 'Type Ic Supernovae': 'tic', + 'Type Ic peculiar': 'ticpec', + 'U Geminorum': 'ug', + 'UV Ceti': 'UV', + 'UV Ceti Variable': 'uv', + 'UX Uma': 'UXUma', + 'UX Ursae Majoris': 'ux', + 'Unclassified': 'unclass', + 'VY Scl': 'vy', + 'Variable Sources (Non-stellar)': 'Nonstellar', + 'Variable Stars': 'GCVS', + 'Variable Stars [Alt]': 'vs', + 'Very Rapidly Pulsating Hot (subdwarf B)': 'RPHS', + 'Very Slow Novae': 'NC', + 'W Ursa Majoris': 'DW', + 'W Ursae Majoris': 'wu', + 'W Ursae Majoris - W UMa': 'EW', + 'W Ursae Majoris- a': 'EWa', + 'W Ursae Majoris- s': 'EWs', + 'W Virginis': 'CW', + 'W Virginis - Long Period': 'CWA', + 'W Virigins - Short Period': 'CWB', + 'WZ Sagittae': 'wz', + 'Weak-lined T Tauri': 'ttw', + 'Wolf-Rayet': 'wr', + 'X Ray Binary': 'xrbin', + 'X Ray Burster': 'xrb', + 'X-Ray Binaries with Jets': 'XJ', + 'X-Ray Bursters': 'XB', + 'X-Ray Pulsar': 'XP', + 'X-Ray Pulsar with late-type dwarf': 'XPRM', + 'X-Ray Pulsar, with Reflection': 'XPR', + 'X-Ray Sources, Optically Variable': 'X', + 'X-Ray with late-type dwarf, un-observed pulsar': 'XRM', + 'X-Ray, Novalike': 'XND', + 'X-Ray, Novalike with Early Type supergiant or giant': 'XNG', + 'X-ray Irregulars': 'XI', + 'Z Camelopardalis': 'zc', + 'ZZ Ceti': 'zz', + 'ZZ Ceti - Only H Absorption': 'ZZA', + 'ZZ Ceti - Only He Absorption': 'ZZB', + 'ZZ Ceti showing HeII': 'ZZO', + 'ZZ Ceti, H Absorption Only': 'zzh', + 'ZZ Ceti, He Absorption Only': 'zzhe', + 'ZZ Ceti, With He-II': 'zzheii', + '_varstar_': '_varstar_'}, + 'shortname_isactive': {'ACVO': 'Yes', + 'AGN': 'Yes', + 'AR': 'Yes', + 'BCEPS': 'Yes', + 'BL-Lac': 'Yes', + 'BLZ': 'Yes', + 'CP': 'No', + 'CW': 'Yes', + 'CWA': 'Yes', + 'CWB': 'Yes', + 'D': 'Yes', + 'DCEP': 'Yes', + 'DCEPS': 'Yes', + 'DM': 'Yes', + 'DS': 'Yes', + 'DSCTC': 'Yes', + 'DrkMatterA': 'Yes', + 'E': 'Yes', + 'ELL': 'Yes', + 'EP': 'Yes', + 'EWa': 'Yes', + 'EWs': 'Yes', + 'Eclipsing': 'Yes', + 'GS': 'Yes', + 'GalNuclei': 'Yes', + 'I': 'Yes', + 'IA': 'Yes', + 'IB': 'Yes', + 'IN(YY)': 'Yes', + 'INA': 'Yes', + 'INB': 'Yes', + 'IS': 'Yes', + 'ISA': 'Yes', + 'ISB': 'Yes', + 'K': 'Yes', + 'KE': 'Yes', + 'KW': 'Yes', + 'L': 'Yes', + 'LB': 'Yes', + 'LC': 'Yes', + 'LPB': 'Yes', + 'ML': 'Yes', + 'NA': 'Yes', + 'NB': 'Yes', + 'NC': 'Yes', + 'NEW': 'Yes', + 'Nonstellar': 'Yes', + 'OVV': 'Yes', + 'PN': 'Yes', + 'PSR': 'Yes', + 'R': 'Yes', + 'RPHS': 'Yes', + 'RR(B)': 'Yes', + 'RRAB': 'Yes', + 'RRC': 'Yes', + 'SD': 'Yes', + 'SNIc-pec': 'Yes', + 'SRA': 'Yes', + 'SRB': 'Yes', + 'SRC': 'Yes', + 'SRD': 'Yes', + 'SRS': 'Yes', + 'SSO': 'Yes', + 'TDE': 'Yes', + 'UVN': 'Yes', + 'WD': 'Yes', + 'WR(1)': 'Yes', + 'X': 'Yes', + 'XF': 'Yes', + 'XI': 'Yes', + 'XJ': 'Yes', + 'XND': 'Yes', + 'XNG': 'Yes', + 'XP': 'Yes', + 'XPR': 'Yes', + 'XPRM': 'Yes', + 'XRM': 'Yes', + '_varstar_': 'No', + 'ac': 'Yes', + 'aii': 'Yes', + 'alg': 'Yes', + 'am': 'Yes', + 'amcvn': 'Yes', + 'ast': 'Yes', + 'b': 'Yes', + 'bc': 'Yes', + 'be': 'Yes', + 'bl': 'Yes', + 'bly': 'Yes', + 'by': 'Yes', + 'c': 'Yes', + 'ca': 'Yes', + 'cc': 'Yes', + 'cm': 'Yes', + 'cn': 'Yes', + 'comet': 'Yes', + 'cp': 'Yes', + 'cv': 'Yes', + 'd': 'Yes', + 'dc': 'Yes', + 'dqh': 'Yes', + 'ds': 'Yes', + 'dsm': 'Yes', + 'eclipsing': 'Yes', + 'ell': 'Yes', + 'er': 'Yes', + 'ev': 'Yes', + 'fk': 'Yes', + 'fsrq': 'Yes', + 'fuor': 'Yes', + 'gc': 'Yes', + 'gd': 'Yes', + 'grb': 'Yes', + 'gw': 'Yes', + 'hae': 'Yes', + 'haebe': 'Yes', + 'hpm': 'Yes', + 'iib': 'Yes', + 'iii': 'Yes', + 'iil': 'Yes', + 'iin': 'Yes', + 'iip': 'Yes', + 'k': 'Yes', + 'lamb': 'Yes', + 'lboo': 'Yes', + 'lgrb': 'Yes', + 'maser': 'Yes', + 'mira': 'Yes', + 'moving': 'Yes', + 'msv': 'Yes', + 'n-l': 'Yes', + 'nov': 'Yes', + 'ov': 'Yes', + 'p': 'Yes', + 'pi': 'Yes', + 'piic': 'Yes', + 'plsr': 'Yes', + 'psys': 'Yes', + 'puls': 'Yes', + 'pvsg': 'Yes', + 'pvt': 'Yes', + 'pwd': 'Yes', + 'qso': 'Yes', + 'rcb': 'Yes', + 'rn': 'Yes', + 'rot': 'Yes', + 'rr-ab': 'Yes', + 'rr-c': 'Yes', + 'rr-cl': 'Yes', + 'rr-d': 'Yes', + 'rr-e': 'Yes', + 'rr-lyr': 'Yes', + 'rscvn': 'Yes', + 'rv': 'Yes', + 'rvc': 'Yes', + 'rvv': 'Yes', + 'sd': 'Yes', + 'sdbv': 'Yes', + 'sdc': 'Yes', + 'sdorad': 'Yes', + 'seyf': 'Yes', + 'sgrb': 'Yes', + 'shs': 'Yes', + 'sne': 'Yes', + 'spb': 'Yes', + 'sr-a': 'Yes', + 'sr-b': 'Yes', + 'sr-c': 'Yes', + 'sr-d': 'Yes', + 'sreg': 'Yes', + 'srgrb': 'Yes', + 'ssc': 'Yes', + 'su': 'Yes', + 'sv': 'Yes', + 'sw': 'Yes', + 'sx': 'Yes', + 'sxari': 'Yes', + 'tia': 'Yes', + 'tiapec': 'Yes', + 'tiasc': 'Yes', + 'tib': 'Yes', + 'tic': 'Yes', + 'ticpec': 'Yes', + 'tsni': 'Yes', + 'tsnii': 'Yes', + 'tt': 'Yes', + 'ttc': 'Yes', + 'ttw': 'Yes', + 'ug': 'Yes', + 'unclass': 'Yes', + 'uv': 'Yes', + 'ux': 'Yes', + 'vs': 'Yes', + 'vy': 'Yes', + 'wr': 'Yes', + 'wu': 'Yes', + 'wv': 'Yes', + 'wz': 'Yes', + 'xrb': 'Yes', + 'xrbin': 'Yes', + 'zc': 'Yes', + 'zz': 'Yes', + 'zzh': 'Yes', + 'zzhe': 'Yes', + 'zzheii': 'Yes'}, + 'shortname_ispublic': {'ACVO': 'No', + 'AGN': 'Yes', + 'AR': 'No', + 'BCEPS': 'No', + 'BL-Lac': 'Yes', + 'BLZ': 'Yes', + 'CP': 'No', + 'CW': 'No', + 'CWA': 'No', + 'CWB': 'No', + 'D': 'No', + 'DCEP': 'No', + 'DCEPS': 'No', + 'DM': 'No', + 'DS': 'No', + 'DSCTC': 'No', + 'DrkMatterA': 'Yes', + 'E': 'No', + 'ELL': 'No', + 'EP': 'No', + 'EWa': 'No', + 'EWs': 'No', + 'Eclipsing': 'No', + 'GS': 'No', + 'GalNuclei': 'Yes', + 'I': 'No', + 'IA': 'No', + 'IB': 'No', + 'IN(YY)': 'No', + 'INA': 'No', + 'INB': 'No', + 'IS': 'No', + 'ISA': 'No', + 'ISB': 'No', + 'K': 'No', + 'KE': 'No', + 'KW': 'No', + 'L': 'No', + 'LB': 'No', + 'LC': 'No', + 'LPB': 'No', + 'ML': 'Yes', + 'NA': 'No', + 'NB': 'No', + 'NC': 'No', + 'NEW': 'No', + 'Nonstellar': 'Yes', + 'OVV': 'Yes', + 'PN': 'No', + 'PSR': 'No', + 'R': 'No', + 'RPHS': 'No', + 'RR(B)': 'No', + 'RRAB': 'No', + 'RRC': 'No', + 'SD': 'No', + 'SNIc-pec': 'No', + 'SRA': 'No', + 'SRB': 'No', + 'SRC': 'No', + 'SRD': 'No', + 'SRS': 'No', + 'SSO': 'Yes', + 'TDE': 'Yes', + 'UVN': 'No', + 'WD': 'No', + 'WR(1)': 'No', + 'X': 'No', + 'XF': 'No', + 'XI': 'No', + 'XJ': 'No', + 'XND': 'No', + 'XNG': 'No', + 'XP': 'No', + 'XPR': 'No', + 'XPRM': 'No', + 'XRM': 'No', + '_varstar_': 'No', + 'ac': 'Yes', + 'aii': 'Yes', + 'alg': 'Yes', + 'am': 'Yes', + 'amcvn': 'Yes', + 'ast': 'Yes', + 'b': 'Yes', + 'bc': 'Yes', + 'be': 'Yes', + 'bl': 'Yes', + 'bly': 'Yes', + 'by': 'Yes', + 'c': 'Yes', + 'ca': 'Yes', + 'cc': 'Yes', + 'cm': 'Yes', + 'cn': 'Yes', + 'comet': 'Yes', + 'cp': 'Yes', + 'cv': 'Yes', + 'd': 'Yes', + 'dc': 'Yes', + 'dqh': 'Yes', + 'ds': 'Yes', + 'dsm': 'Yes', + 'eclipsing': 'No', + 'ell': 'Yes', + 'er': 'Yes', + 'ev': 'Yes', + 'fk': 'Yes', + 'fsrq': 'Yes', + 'fuor': 'Yes', + 'gc': 'Yes', + 'gd': 'Yes', + 'grb': 'Yes', + 'gw': 'Yes', + 'hae': 'Yes', + 'haebe': 'Yes', + 'hpm': 'Yes', + 'iib': 'Yes', + 'iii': 'Yes', + 'iil': 'Yes', + 'iin': 'Yes', + 'iip': 'Yes', + 'k': 'No', + 'lamb': 'Yes', + 'lboo': 'Yes', + 'lgrb': 'Yes', + 'maser': 'Yes', + 'mira': 'Yes', + 'moving': 'Yes', + 'msv': 'Yes', + 'n-l': 'Yes', + 'nov': 'Yes', + 'ov': 'Yes', + 'p': 'Yes', + 'pi': 'Yes', + 'piic': 'Yes', + 'plsr': 'Yes', + 'psys': 'Yes', + 'puls': 'Yes', + 'pvsg': 'Yes', + 'pvt': 'Yes', + 'pwd': 'Yes', + 'qso': 'Yes', + 'rcb': 'Yes', + 'rn': 'Yes', + 'rot': 'Yes', + 'rr-ab': 'Yes', + 'rr-c': 'Yes', + 'rr-cl': 'Yes', + 'rr-d': 'Yes', + 'rr-e': 'Yes', + 'rr-lyr': 'Yes', + 'rscvn': 'Yes', + 'rv': 'Yes', + 'rvc': 'Yes', + 'rvv': 'Yes', + 'sd': 'No', + 'sdbv': 'Yes', + 'sdc': 'Yes', + 'sdorad': 'Yes', + 'seyf': 'Yes', + 'sgrb': 'Yes', + 'shs': 'Yes', + 'sne': 'Yes', + 'spb': 'Yes', + 'sr-a': 'Yes', + 'sr-b': 'Yes', + 'sr-c': 'Yes', + 'sr-d': 'Yes', + 'sreg': 'Yes', + 'srgrb': 'Yes', + 'ssc': 'Yes', + 'su': 'Yes', + 'sv': 'Yes', + 'sw': 'Yes', + 'sx': 'Yes', + 'sxari': 'Yes', + 'tia': 'Yes', + 'tiapec': 'Yes', + 'tiasc': 'Yes', + 'tib': 'Yes', + 'tic': 'Yes', + 'ticpec': 'Yes', + 'tsni': 'Yes', + 'tsnii': 'Yes', + 'tt': 'Yes', + 'ttc': 'Yes', + 'ttw': 'Yes', + 'ug': 'Yes', + 'unclass': 'Yes', + 'uv': 'Yes', + 'ux': 'Yes', + 'vs': 'Yes', + 'vy': 'Yes', + 'wr': 'Yes', + 'wu': 'Yes', + 'wv': 'Yes', + 'wz': 'Yes', + 'xrb': 'Yes', + 'xrbin': 'Yes', + 'zc': 'Yes', + 'zz': 'Yes', + 'zzh': 'Yes', + 'zzhe': 'Yes', + 'zzheii': 'Yes'}, + 'shortname_longname': {'ACVO': 'Alpha2 CVn - Rapily Oscillating', + 'AGN': 'Active Galactic Nuclei', + 'AR': 'Detached - AR Lacertae', + 'BCEPS': 'Beta Cephei - Short Period', + 'BL-Lac': 'BL Lac', + 'BLZ': 'Blazar', + 'CP': 'Chemically Peculiar Stars', + 'CW': 'W Virginis', + 'CWA': 'W Virginis - Long Period', + 'CWB': 'W Virigins - Short Period', + 'D': 'Detached', + 'DCEP': 'Delta Cep', + 'DCEPS': 'Delta Cep - Symmetrical', + 'DM': 'Detached - Main Sequence', + 'DS': 'Detached - With Subgiant', + 'DSCTC': 'Delta Scuti - Low Amplitude', + 'DrkMatterA': 'Dark Matter Anniliation Event', + 'E': 'Eclipsing Binary Systems', + 'ELL': 'Rotating Ellipsoidal', + 'EP': 'Eclipsed by Planets', + 'EWa': 'W Ursae Majoris- a', + 'EWs': 'W Ursae Majoris- s', + 'Eclipsing': 'Close Binary Eclipsing Systems', + 'GS': 'Systems with Supergiant(s)', + 'GalNuclei': 'Galaxy Nuclei ', + 'I': 'Irregular', + 'IA': 'Irregular Early O-A', + 'IB': 'Irregular Intermediate F-M', + 'IN(YY)': 'Orion with Absorption', + 'INA': 'Orion Early Types (B-A or Ae)', + 'INB': 'Orion Intermediate Types (F-M or Fe-Me)', + 'IS': 'Rapid Irregular', + 'ISA': 'Rapid Irregular Early Types (B-A or Ae)', + 'ISB': 'Rapid Irregular Intermediate to Late (F-M and Fe-Me)', + 'K': 'Contact Systems', + 'KE': 'Contact Systems - Early (O-A)', + 'KW': 'Contact Systems - W Ursa Majoris', + 'L': 'Slow Irregular', + 'LB': 'Slow Irregular - Late Spectral Type (K, M, C, S)', + 'LC': 'Irregular Supergiants', + 'LPB': 'Long Period B', + 'ML': 'Microlensing Event', + 'NA': 'Fast Novae', + 'NB': 'Slow Novae', + 'NC': 'Very Slow Novae', + 'NEW': 'New Variability Types', + 'Nonstellar': 'Variable Sources (Non-stellar)', + 'OVV': 'Optically Violent Variable Quasar (OVV)', + 'PN': 'Systems with Planetary Nebulae', + 'PSR': 'Optically Variable Pulsars', + 'R': 'Close Binary with Reflection', + 'RPHS': 'Very Rapidly Pulsating Hot (subdwarf B)', + 'RR(B)': 'RR Lyrae - Dual Mode', + 'RRAB': 'RR Lyrae - Asymmetric', + 'RRC': 'RR Lyrae - Near Symmetric', + 'SD': 'Semidetached', + 'SNIc-pec': 'Peculiar Type Ic Supernovae', + 'SRA': 'Semiregular - Persistent Periodicity', + 'SRB': 'Semiregular - Poorly Defined Periodicity', + 'SRC': 'Semiregular Supergiants', + 'SRD': 'Semiregular F, G, or K', + 'SRS': 'Semiregular Pulsating Red Giants', + 'SSO': 'Solar System Object', + 'TDE': 'Tidal Disruption Event', + 'UVN': 'Flaring Orion Variables', + 'WD': 'Systems with White Dwarfs', + 'WR(1)': 'Systems with Wolf-Rayet Stars', + 'X': 'X-Ray Sources, Optically Variable', + 'XF': 'Fluctuating X-Ray Systems', + 'XI': 'X-ray Irregulars', + 'XJ': 'X-Ray Binaries with Jets', + 'XND': 'X-Ray, Novalike', + 'XNG': 'X-Ray, Novalike with Early Type supergiant or giant', + 'XP': 'X-Ray Pulsar', + 'XPR': 'X-Ray Pulsar, with Reflection', + 'XPRM': 'X-Ray Pulsar with late-type dwarf', + 'XRM': 'X-Ray with late-type dwarf, un-observed pulsar', + '_varstar_': '_varstar_', + 'ac': 'Alpha Cygni', + 'aii': 'Alpha2 Canum Venaticorum', + 'alg': 'Algol (Beta Persei)', + 'am': 'AM Herculis (True Polar)', + 'amcvn': 'AM Canum Venaticorum', + 'ast': 'Asteroid', + 'b': 'Binary', + 'bc': 'Beta Cephei', + 'be': 'Be Star', + 'bl': 'Short period (BL Herculis)', + 'bly': 'Beta Lyrae', + 'by': 'BY Draconis', + 'c': 'Cepheid Variable', + 'ca': 'Anomolous Cepheid', + 'cc': 'Core Collapse Supernovae', + 'cm': 'Multiple Mode Cepheid', + 'cn': 'Classical Novae', + 'comet': 'Comet', + 'cp': 'Chemically Peculiar Stars', + 'cv': 'Cataclysmic Variable', + 'd': 'Detached', + 'dc': 'Classical Cepheid', + 'dqh': 'DQ Herculis (Intermdiate Polars)', + 'ds': 'Delta Scuti', + 'dsm': 'Delta Scuti - Multiple Modes', + 'eclipsing': 'Close Binary Eclipsing Systems', + 'ell': 'Ellipsoidal', + 'er': 'ER Ursae Majoris', + 'ev': 'Eruptive Variable', + 'fk': 'FK Comae Berenices', + 'fsrq': 'Flat Spectrum Radio Quasar', + 'fuor': 'FU Orionis', + 'gc': 'Gamma Cassiopeiae', + 'gd': 'Gamma Doradus', + 'grb': 'Gamma Ray Burst', + 'gw': 'GW Virginis', + 'hae': 'Herbig AE', + 'haebe': 'Herbig AE/BE Star', + 'hpm': 'High Proper Motion Star', + 'iib': 'Type II b Supernova', + 'iii': 'Three or More Stars', + 'iil': 'Type II L supernova', + 'iin': 'Type II N Supernova', + 'iip': 'Type II P supernova', + 'k': 'Contact Systems', + 'lamb': 'Lambda Eridani', + 'lboo': 'Lambda Bootis Variable', + 'lgrb': 'Long GRB', + 'maser': 'Maser', + 'mira': 'Mira', + 'moving': 'Moving Source', + 'msv': 'Multiple Star Variables', + 'n-l': 'Novalike', + 'nov': 'Novae', + 'ov': 'Orion Variable', + 'p': 'Polars', + 'pi': 'Pair Instability Supernovae', + 'piic': 'Population II Cepheid', + 'plsr': 'Pulsar', + 'psys': 'Systems with Planets', + 'puls': 'Pulsating Variable', + 'pvsg': 'Periodically variable supergiants', + 'pvt': 'PV Telescopii', + 'pwd': 'Pulsating White Dwarf', + 'qso': 'QSO', + 'rcb': 'R Coronae Borealis', + 'rn': 'Recurrent Novae', + 'rot': 'Rotating Variable', + 'rr-ab': 'RR Lyrae, Fundamental Mode', + 'rr-c': 'RR Lyrae, First Overtone', + 'rr-cl': 'RR Lyrae, Closely Spaced Modes', + 'rr-d': 'RR Lyrae, Double Mode', + 'rr-e': 'RR Lyrae, Second Overtone', + 'rr-lyr': 'RR Lyrae', + 'rscvn': 'RS Canum Venaticorum', + 'rv': 'RV Tauri', + 'rvc': 'RV Tauri, Constant Mean Brightness', + 'rvv': 'RV Tauri, Variable Mean Brightness', + 'sd': 'Semidetached', + 'sdbv': 'Pulsating subdwarf B-stars', + 'sdc': 'Symmetrical', + 'sdorad': 'S Doradus', + 'seyf': 'Seyfert', + 'sgrb': 'Short GRB', + 'shs': 'Shell Star', + 'sne': 'Supernovae', + 'spb': 'Slowly Pulsating B-stars', + 'sr-a': 'SRa (Z Aquarii)', + 'sr-b': 'SRb', + 'sr-c': 'SRc', + 'sr-d': 'SRd', + 'sreg': 'Semiregular Pulsating Variable', + 'srgrb': 'Soft Gamma Ray Repeater', + 'ssc': 'SS Cygni', + 'su': 'SU Ursae Majoris', + 'sv': 'Symbiotic Variable', + 'sw': 'SW Sextantis', + 'sx': 'SX Phoenicis', + 'sxari': 'SX Arietis', + 'tia': 'Type Ia Supernovae', + 'tiapec': 'Peculiar Type Ia SN', + 'tiasc': 'Super-chandra Type Ia SN', + 'tib': 'Type Ib Supernovae', + 'tic': 'Type Ic Supernovae', + 'ticpec': 'Type Ic peculiar', + 'tsni': 'Type I Supernovae', + 'tsnii': 'Type II Supernovae', + 'tt': 'T Tauri', + 'ttc': 'Classical T Tauri', + 'ttw': 'Weak-lined T Tauri', + 'ug': 'U Geminorum', + 'unclass': 'Unclassified', + 'uv': 'UV Ceti Variable', + 'ux': 'UX Ursae Majoris', + 'vs': 'Variable Stars [Alt]', + 'vy': 'VY Scl', + 'wr': 'Wolf-Rayet', + 'wu': 'W Ursae Majoris', + 'wv': 'Long Period (W Virginis)', + 'wz': 'WZ Sagittae', + 'xrb': 'X Ray Burster', + 'xrbin': 'X Ray Binary', + 'zc': 'Z Camelopardalis', + 'zz': 'ZZ Ceti', + 'zzh': 'ZZ Ceti, H Absorption Only', + 'zzhe': 'ZZ Ceti, He Absorption Only', + 'zzheii': 'ZZ Ceti, With He-II'}, + 'shortname_nsrcs': {'ACV': 0, + 'ACVO': 0, + 'ACYG': 0, + 'AGN': 57, + 'AM': 0, + 'AR': 0, + 'BCEP': 0, + 'BCEPS': 0, + 'BE': 0, + 'BL-Lac': 46, + 'BLBOO': 0, + 'BLZ': 24, + 'BY': 0, + 'CEP': 5, + 'CEP(B)': 0, + 'CP': 0, + 'CW': 0, + 'CWA': 0, + 'CWB': 0, + 'Cataclysmic': 0, + 'Chemically Peculiar Stars': 0, + 'D': 2, + 'DCEP': 0, + 'DCEPS': 0, + 'DM': 0, + 'DQ': 0, + 'DS': 0, + 'DSCT': 149, + 'DSCTC': 0, + 'DW': 0, + 'DrkMatterA': 0, + 'E': 3, + 'EA': 260, + 'EB': 67, + 'ELL': 0, + 'EP': 0, + 'EW': 891, + 'EWa': 0, + 'EWs': 0, + 'Eclipsing': 0, + 'Eruptive': 0, + 'FKCOM': 0, + 'FU': 0, + 'GCAS': 0, + 'GCVS': 712, + 'GDOR': 15, + 'GRB': 0, + 'GS': 0, + 'GalNuclei': 0, + 'I': 0, + 'IA': 0, + 'IB': 0, + 'IN': 0, + 'IN(YY)': 0, + 'INA': 0, + 'INB': 0, + 'INT': 0, + 'IS': 0, + 'ISA': 0, + 'ISB': 0, + 'K': 0, + 'KE': 0, + 'KW': 0, + 'L': 0, + 'LB': 0, + 'LC': 1, + 'LPB': 1, + 'LSB': 0, + 'M': 11, + 'ML': 658, + 'N': 1, + 'NA': 0, + 'NB': 0, + 'NC': 0, + 'NEW': 0, + 'NL': 3, + 'NR': 0, + 'Nonstellar': 0, + 'OVV': 0, + 'PN': 0, + 'PSR': 0, + 'PVTEL': 0, + 'Polars': 0, + 'Pulsating': 1, + 'R': 0, + 'RCB': 0, + 'RPHS': 0, + 'RR': 9, + 'RR(B)': 0, + 'RRAB': 31, + 'RRC': 15, + 'RRcl': 0, + 'RRe': 0, + 'RS': 0, + 'RV': 0, + 'RVA': 0, + 'RVB': 0, + 'Rotating': 0, + 'SD': 0, + 'SDOR': 0, + 'SGR': 0, + 'SHB': 0, + 'SN': 0, + 'SNI': 0, + 'SNII': 0, + 'SNIIL': 0, + 'SNIIN': 1, + 'SNIIP': 0, + 'SNIa': 0, + 'SNIa-pec': 0, + 'SNIa-sc': 0, + 'SNIb': 0, + 'SNIc': 0, + 'SNIc-pec': 0, + 'SR': 0, + 'SRA': 0, + 'SRB': 0, + 'SRC': 0, + 'SRD': 0, + 'SRS': 14, + 'SSO': 0, + 'SXARI': 0, + 'SXPHE': 7, + 'TDE': 0, + 'UG': 3, + 'UGSS': 0, + 'UGSU': 0, + 'UGZ': 1, + 'UV': 0, + 'UVN': 0, + 'UXUma': 0, + 'WD': 0, + 'WR': 173, + 'WR(1)': 0, + 'X': 0, + 'XB': 0, + 'XF': 0, + 'XI': 0, + 'XJ': 0, + 'XND': 0, + 'XNG': 0, + 'XP': 0, + 'XPR': 0, + 'XPRM': 0, + 'XRM': 0, + 'ZAND': 0, + 'ZZ': 0, + 'ZZA': 0, + 'ZZB': 0, + 'ZZO': 0, + '_varstar_': 0, + 'ac': 0, + 'aii': 81, + 'alg': 732, + 'am': 5, + 'amcvn': 0, + 'ast': 93, + 'b': 53, + 'bc': 84, + 'be': 47, + 'bl': 14, + 'bly': 403, + 'by': 0, + 'c': 329, + 'ca': 7, + 'cc': 58, + 'cm': 202, + 'cn': 1, + 'comet': 3, + 'cp': 49, + 'cv': 193, + 'd': 2270, + 'dc': 865, + 'dqh': 5, + 'ds': 845, + 'dsm': 1, + 'eclipsing': 2934, + 'ell': 17, + 'er': 0, + 'ev': 0, + 'fk': 1, + 'fsrq': 3, + 'fuor': 4, + 'gc': 0, + 'gd': 73, + 'grb': 0, + 'gw': 2, + 'hae': 1, + 'haebe': 28, + 'hpm': 4, + 'iib': 27, + 'iii': 0, + 'iil': 0, + 'iin': 111, + 'iip': 74, + 'k': 2758, + 'lamb': 1, + 'lboo': 26, + 'lgrb': 1, + 'maser': 1, + 'mira': 3048, + 'moving': 0, + 'msv': 0, + 'n-l': 3, + 'nov': 3, + 'ov': 0, + 'p': 0, + 'pi': 0, + 'piic': 41, + 'plsr': 0, + 'psys': 3, + 'puls': 250, + 'pvsg': 0, + 'pvt': 0, + 'pwd': 3, + 'qso': 6307, + 'rcb': 2, + 'rn': 0, + 'rot': 4, + 'rr-ab': 1706, + 'rr-c': 452, + 'rr-cl': 13, + 'rr-d': 168, + 'rr-e': 0, + 'rr-lyr': 16, + 'rscvn': 1, + 'rv': 11, + 'rvc': 1, + 'rvv': 0, + 'sd': 879, + 'sdbv': 0, + 'sdc': 53, + 'sdorad': 21, + 'seyf': 0, + 'sgrb': 0, + 'shs': 0, + 'sne': 619, + 'spb': 0, + 'sr-a': 2, + 'sr-b': 2, + 'sr-c': 2, + 'sr-d': 3, + 'sreg': 76, + 'srgrb': 0, + 'ssc': 3, + 'su': 3, + 'sv': 0, + 'sw': 1, + 'sx': 28, + 'sxari': 0, + 'tia': 2176, + 'tiapec': 35, + 'tiasc': 0, + 'tib': 68, + 'tic': 124, + 'ticpec': 5, + 'tsni': 48, + 'tsnii': 749, + 'tt': 32, + 'ttc': 2, + 'ttw': 0, + 'ug': 3, + 'unclass': 61200, + 'uv': 0, + 'ux': 2, + 'vs': 774, + 'vy': 1, + 'wr': 219, + 'wu': 1075, + 'wv': 35, + 'wz': 0, + 'xrb': 0, + 'xrbin': 14, + 'zc': 3, + 'zz': 0, + 'zzh': 0, + 'zzhe': 0, + 'zzheii': 0}, + 'shortname_parent_id': {'ACVO': 58, + 'AGN': 109, + 'AR': 80, + 'BCEPS': 25, + 'BL-Lac': 256, + 'BLZ': 110, + 'CP': 0, + 'CW': 23, + 'CWA': 29, + 'CWB': 29, + 'D': 80, + 'DCEP': 23, + 'DCEPS': 32, + 'DM': 92, + 'DS': 92, + 'DSCTC': 34, + 'DrkMatterA': 107, + 'E': 80, + 'ELL': 57, + 'EP': 129, + 'EWa': 85, + 'EWs': 85, + 'Eclipsing': 1, + 'GS': 80, + 'GalNuclei': 107, + 'I': 2, + 'IA': 2, + 'IB': 2, + 'IN(YY)': 8, + 'INA': 8, + 'INB': 8, + 'IS': 2, + 'ISA': 2, + 'ISB': 13, + 'K': 80, + 'KE': 96, + 'KW': 96, + 'L': 23, + 'LB': 36, + 'LC': 36, + 'LPB': 129, + 'ML': 107, + 'NA': 66, + 'NB': 66, + 'NC': 66, + 'NEW': 1, + 'Nonstellar': 0, + 'OVV': 256, + 'PN': 80, + 'PSR': 57, + 'R': 129, + 'RPHS': 129, + 'RR(B)': 41, + 'RRAB': 41, + 'RRC': 41, + 'SD': 80, + 'SNIc-pec': 102, + 'SRA': 48, + 'SRB': 48, + 'SRC': 48, + 'SRD': 48, + 'SRS': 129, + 'SSO': 107, + 'TDE': 109, + 'UVN': 2, + 'WD': 80, + 'WR(1)': 80, + 'X': 1, + 'XF': 117, + 'XI': 117, + 'XJ': 117, + 'XND': 117, + 'XNG': 117, + 'XP': 117, + 'XPR': 124, + 'XPRM': 124, + 'XRM': 124, + 'ac': 203, + 'aii': 240, + 'alg': 248, + 'am': 165, + 'amcvn': 160, + 'ast': 275, + 'b': 247, + 'bc': 203, + 'be': 193, + 'bl': 216, + 'bly': 248, + 'by': 240, + 'c': 203, + 'ca': 217, + 'cc': 180, + 'cm': 217, + 'cn': 158, + 'comet': 275, + 'cp': 154, + 'cv': 154, + 'd': 279, + 'dc': 217, + 'dqh': 165, + 'ds': 203, + 'dsm': 211, + 'eclipsing': 154, + 'ell': 240, + 'er': 169, + 'ev': 154, + 'fk': 240, + 'fsrq': 256, + 'fuor': 195, + 'gc': 188, + 'gd': 203, + 'grb': 157, + 'gw': 209, + 'hae': 197, + 'haebe': 188, + 'hpm': 275, + 'iib': 185, + 'iii': 247, + 'iil': 185, + 'iin': 185, + 'iip': 185, + 'k': 279, + 'lamb': 198, + 'lboo': 203, + 'lgrb': 176, + 'maser': 107, + 'mira': 203, + 'moving': 0, + 'msv': 154, + 'n-l': 158, + 'nov': 157, + 'ov': 188, + 'p': 158, + 'pi': 181, + 'piic': 203, + 'plsr': 240, + 'psys': 248, + 'puls': 154, + 'pvsg': 154, + 'pvt': 203, + 'pwd': 203, + 'qso': 110, + 'rcb': 188, + 'rn': 158, + 'rot': 154, + 'rr-ab': 206, + 'rr-c': 206, + 'rr-cl': 206, + 'rr-d': 206, + 'rr-e': 206, + 'rr-lyr': 203, + 'rscvn': 188, + 'rv': 203, + 'rvc': 215, + 'rvv': 215, + 'sd': 279, + 'sdbv': 203, + 'sdc': 238, + 'sdorad': 188, + 'seyf': 110, + 'sgrb': 176, + 'shs': 193, + 'sne': 157, + 'spb': 203, + 'sr-a': 214, + 'sr-b': 214, + 'sr-c': 214, + 'sr-d': 214, + 'sreg': 203, + 'srgrb': 176, + 'ssc': 168, + 'su': 168, + 'sv': 157, + 'sw': 160, + 'sx': 203, + 'sxari': 240, + 'tia': 180, + 'tiapec': 182, + 'tiasc': 182, + 'tib': 181, + 'tic': 181, + 'ticpec': 184, + 'tsni': 180, + 'tsnii': 181, + 'tt': 195, + 'ttc': 200, + 'ttw': 200, + 'ug': 158, + 'unclass': 154, + 'uv': 188, + 'ux': 160, + 'vs': 0, + 'vy': 160, + 'wr': 188, + 'wu': 248, + 'wv': 216, + 'wz': 169, + 'xrb': 260, + 'xrbin': 248, + 'zc': 168, + 'zz': 209, + 'zzh': 223, + 'zzhe': 223, + 'zzheii': 223}, + 'shortname_parentshortname': {'ACVO': 'aii', + 'AGN': 'GalNuclei', + 'AR': 'Eclipsing', + 'BCEPS': 'bc', + 'BL-Lac': 'BLZ', + 'BLZ': 'AGN', + 'CP': '_varstar_', + 'CW': 'puls', + 'CWA': 'CW', + 'CWB': 'CW', + 'D': 'Eclipsing', + 'DCEP': 'puls', + 'DCEPS': 'DCEP', + 'DM': 'D', + 'DS': 'D', + 'DSCTC': 'ds', + 'DrkMatterA': 'Nonstellar', + 'E': 'Eclipsing', + 'ELL': 'rot', + 'EP': 'NEW', + 'EWa': 'wu', + 'EWs': 'wu', + 'Eclipsing': 'vs', + 'GS': 'Eclipsing', + 'GalNuclei': 'Nonstellar', + 'I': 'ev', + 'IA': 'ev', + 'IB': 'ev', + 'IN(YY)': 'ov', + 'INA': 'ov', + 'INB': 'ov', + 'IS': 'ev', + 'ISA': 'ev', + 'ISB': 'IS', + 'K': 'Eclipsing', + 'KE': 'K', + 'KW': 'K', + 'L': 'puls', + 'LB': 'L', + 'LC': 'L', + 'LPB': 'NEW', + 'ML': 'Nonstellar', + 'NA': 'nov', + 'NB': 'nov', + 'NC': 'nov', + 'NEW': 'vs', + 'Nonstellar': '_varstar_', + 'OVV': 'BLZ', + 'PN': 'Eclipsing', + 'PSR': 'rot', + 'R': 'NEW', + 'RPHS': 'NEW', + 'RR(B)': 'rr-lyr', + 'RRAB': 'rr-lyr', + 'RRC': 'rr-lyr', + 'SD': 'Eclipsing', + 'SNIc-pec': 'tic', + 'SRA': 'sreg', + 'SRB': 'sreg', + 'SRC': 'sreg', + 'SRD': 'sreg', + 'SRS': 'NEW', + 'SSO': 'Nonstellar', + 'TDE': 'GalNuclei', + 'UVN': 'ev', + 'WD': 'Eclipsing', + 'WR(1)': 'Eclipsing', + 'X': 'vs', + 'XF': 'X', + 'XI': 'X', + 'XJ': 'X', + 'XND': 'X', + 'XNG': 'X', + 'XP': 'X', + 'XPR': 'XP', + 'XPRM': 'XP', + 'XRM': 'XP', + 'ac': 'puls', + 'aii': 'rot', + 'alg': 'b', + 'am': 'p', + 'amcvn': 'n-l', + 'ast': 'moving', + 'b': 'msv', + 'bc': 'puls', + 'be': 'gc', + 'bl': 'piic', + 'bly': 'b', + 'by': 'rot', + 'c': 'puls', + 'ca': 'c', + 'cc': 'sne', + 'cm': 'c', + 'cn': 'nov', + 'comet': 'moving', + 'cp': 'vs', + 'cv': 'vs', + 'd': 'eclipsing', + 'dc': 'c', + 'dqh': 'p', + 'ds': 'puls', + 'dsm': 'ds', + 'eclipsing': 'vs', + 'ell': 'rot', + 'er': 'su', + 'ev': 'vs', + 'fk': 'rot', + 'fsrq': 'BLZ', + 'fuor': 'ov', + 'gc': 'ev', + 'gd': 'puls', + 'grb': 'cv', + 'gw': 'pwd', + 'hae': 'haebe', + 'haebe': 'ev', + 'hpm': 'moving', + 'iib': 'tsnii', + 'iii': 'msv', + 'iil': 'tsnii', + 'iin': 'tsnii', + 'iip': 'tsnii', + 'k': 'eclipsing', + 'lamb': 'be', + 'lboo': 'puls', + 'lgrb': 'grb', + 'maser': 'Nonstellar', + 'mira': 'puls', + 'moving': '_varstar_', + 'msv': 'vs', + 'n-l': 'nov', + 'nov': 'cv', + 'ov': 'ev', + 'p': 'nov', + 'pi': 'cc', + 'piic': 'puls', + 'plsr': 'rot', + 'psys': 'b', + 'puls': 'vs', + 'pvsg': 'vs', + 'pvt': 'puls', + 'pwd': 'puls', + 'qso': 'AGN', + 'rcb': 'ev', + 'rn': 'nov', + 'rot': 'vs', + 'rr-ab': 'rr-lyr', + 'rr-c': 'rr-lyr', + 'rr-cl': 'rr-lyr', + 'rr-d': 'rr-lyr', + 'rr-e': 'rr-lyr', + 'rr-lyr': 'puls', + 'rscvn': 'ev', + 'rv': 'puls', + 'rvc': 'rv', + 'rvv': 'rv', + 'sd': 'eclipsing', + 'sdbv': 'puls', + 'sdc': 'dc', + 'sdorad': 'ev', + 'seyf': 'AGN', + 'sgrb': 'grb', + 'shs': 'gc', + 'sne': 'cv', + 'spb': 'puls', + 'sr-a': 'sreg', + 'sr-b': 'sreg', + 'sr-c': 'sreg', + 'sr-d': 'sreg', + 'sreg': 'puls', + 'srgrb': 'grb', + 'ssc': 'ug', + 'su': 'ug', + 'sv': 'cv', + 'sw': 'n-l', + 'sx': 'puls', + 'sxari': 'rot', + 'tia': 'sne', + 'tiapec': 'tia', + 'tiasc': 'tia', + 'tib': 'cc', + 'tic': 'cc', + 'ticpec': 'tic', + 'tsni': 'sne', + 'tsnii': 'cc', + 'tt': 'ov', + 'ttc': 'tt', + 'ttw': 'tt', + 'ug': 'nov', + 'unclass': 'vs', + 'uv': 'ev', + 'ux': 'n-l', + 'vs': '_varstar_', + 'vy': 'n-l', + 'wr': 'ev', + 'wu': 'b', + 'wv': 'piic', + 'wz': 'su', + 'xrb': 'xrbin', + 'xrbin': 'b', + 'zc': 'ug', + 'zz': 'pwd', + 'zzh': 'zz', + 'zzhe': 'zz', + 'zzheii': 'zz'}} + +def parse_options(): + """ Deal with parsing command line options & --help. Return options object. + """ + parser = OptionParser(usage="usage: %prog cmd [options]") + + +head_str = """ + + + + + + 6930531 + + Best positional information of the source + + + 323.47114731 + -0.79916734036 + + + 0.000277777777778 + 0.000277777777778 + + + + + + MJD + 0.0 + UTC + TOPOCENTER + + + + + + + + + +""" + +tail_str = """ + +
+
+
+
""" + + + +def generate_xml_str_using_lsd_ts(dat_fpath): + """ Adapted from format_csv_getfeats.py + For converting Ben's generated RRLyrae/eclips lightcurve .dat files + + """ + import csv + + data_str_list = [] + + rows = csv.reader(open(dat_fpath), delimiter=' ') + + t_list = [] + m_list = [] + merr_list = [] + for i,row in enumerate(rows): + t = float(row[0]) + m = float(row[1]) + m_err = float(row[2]) + data_str = ' %lf%lf%lf' % \ + (i, t, m, m_err) + data_str_list.append(data_str) + t_list.append(t) + m_list.append(m) + merr_list.append(m_err) + + all_data_str = '\n'.join(data_str_list) + + out_xml = head_str + all_data_str + tail_str + + return out_xml + + +def get_perc_subset(srcid_list=[], percent_list=[], niters=1, xml_dirpath='', include_header=True, + write_multiinfo_srcids=True, source_xml_dict={}, ParseNomadColorsList=None, use_mtmerr_ts_files=False, do_sigmaclip=True): + """ Adapted from: + - analysis_deboss_tcp_source_compare.py::perc_subset_worker() + - generate_weka_classifiers.py --train_mode : + spawn_off_arff_line_tasks() + + # TODO: might need to convert ids into 100000000 + ids + + # TODO: currently this generates xml-strings with features, + - we eventually want arff rows which can be classified + (ala generate_weka_classifiers.py --train_mode) + ... condense_task_results_and_form_arff() + + """ + import copy + import random + import io + sys.path.append(os.environ.get('TCP_DIR') + '/Software/feature_extract/MLData') + #sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + '/Software/feature_extract/Code/extractors')) + #print os.environ.get("TCP_DIR") + #import mlens3 + import arffify + + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract/Code')) + import db_importer + from data_cleaning import sigmaclip_sdict_ts + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract')) + from Code import generators_importers + + #out_arff_row_dict = {} + + master_list = [] + master_features_dict = {} + all_class_list = [] + master_classes_dict = {} + + new_srcid_list = [] + for src_id in srcid_list: + + if use_mtmerr_ts_files: + ### Then we want to generate some pseudo XML using the timeseries column file (with lines like: "55243.43624000 19.36500000 ......") + new_xml_str = generate_xml_str_using_lsd_ts(source_xml_dict[src_id]) + else: + + #20120130#tutor_src_id = src_id - 100000000 + tutor_src_id = src_id + if len(source_xml_dict) > 0: + #20120130#xml_fpath = source_xml_dict[str(tutor_src_id)] + xml_fpath = source_xml_dict[tutor_src_id] + else: + xml_fpath = os.path.expandvars("%s/%d.xml" % (xml_dirpath, src_id)) + + xml_str = open(xml_fpath).read() + new_xml_str = ParseNomadColorsList.get_colors_for_srcid(xml_str=xml_str, srcid=tutor_src_id - 100000000) #, srcid=tutor_src_id) + + signals_list = [] + gen_orig = generators_importers.from_xml(signals_list) + gen_orig.signalgen = {} + gen_orig.sig = db_importer.Source(xml_handle=new_xml_str, doplot=False, make_xml_if_given_dict=True) + gen_orig.sdict = gen_orig.sig.x_sdict + gen_orig.set_outputs() # this adds/fills self.signalgen[,multiband]{'input':{filled},'features':{empty},'inter':{empty}} + + signals_list_temp = [] + #import pdb; pdb.set_trace() + #print + + if do_sigmaclip: + try: + ### Do some sigma clipping (Ex: for ASAS data) + sigmaclip_sdict_ts(gen_orig.sig.x_sdict['ts'], sigma_low=4.0, sigma_high=4.0) + except: + continue # probably doesnt have a gen_orig.sig.x_sdict['ts'][]['m'] + + gen_temp = copy.deepcopy(gen_orig) + for perc in percent_list: + ### We generate several random, percent-subsampled vosource in order to include error info: + #if 1: + # i = niters # this should just be a single (integer) subset number/iteration index + #for i in range(niters): + for i in niters: + if write_multiinfo_srcids: + new_srcid = "%d_%2.2f_%d" % (src_id, perc, i) + else: + if type(src_id) == type(12): + new_srcid = "%d" % (src_id) + else: + new_srcid = src_id + + new_srcid_list.append(new_srcid) + + dbi_src = db_importer.Source(make_dict_if_given_xml=False) + + for band, band_dict in gen_orig.sig.x_sdict['ts'].items(): + if ":NOMAD" in band: + i_start = 0 + i_end = len(band_dict['m']) + else: + i_start = int(((len(band_dict['m'])+1) * (1 - perc)) * random.random()) + i_end = i_start + int(perc * (len(band_dict['m'])+1)) + gen_temp.sig.x_sdict['ts'][band]['m'] = band_dict['m'][i_start:i_end] + gen_temp.sig.x_sdict['ts'][band]['m_err'] = band_dict['m_err'][i_start:i_end] + gen_temp.sig.x_sdict['ts'][band]['t'] = band_dict['t'][i_start:i_end] + dbi_src.source_dict_to_xml(gen_temp.sig.x_sdict) + write_xml_str = dbi_src.xml_string + + signals_list = [] + gen = generators_importers.from_xml(signals_list) + gen.generate(xml_handle=write_xml_str) + gen.sig.add_features_to_xml_string(signals_list) + gen.sig.x_sdict['src_id'] = new_srcid + dbi_src.source_dict_to_xml(gen.sig.x_sdict) + + xml_fpath = dbi_src.xml_string + #import pdb; pdb.set_trace() + #print + + a = arffify.Maker(search=[], skip_class=False, local_xmls=True, convert_class_abrvs_to_names=False, flag_retrieve_class_abrvs_from_TUTOR=False, dorun=False) + out_dict = a.generate_arff_line_for_vosourcexml(num=new_srcid, xml_fpath=xml_fpath) + + #out_arff_row_dict[(src_id, perc, i)] = out_dict # ??? TODO: just arff rows? + # dbi_src.xml_string + master_list.append(out_dict) + all_class_list.append(out_dict['class']) + master_classes_dict[out_dict['class']] = 0 + for feat_tup in out_dict['features']: + master_features_dict[feat_tup] = 0 # just make sure there is this key in the dict. 0 is filler + + master_features = master_features_dict.keys() + master_classes = master_classes_dict.keys() + a = arffify.Maker(search=[], skip_class=False, local_xmls=True, + convert_class_abrvs_to_names=False, + flag_retrieve_class_abrvs_from_TUTOR=False, + dorun=False, add_srcid_to_arff=True) + a.master_features = master_features + a.all_class_list = all_class_list + a.master_classes = master_classes + a.master_list = master_list + # # # TODO: ideally just the arff lines / strings will be used + # - although it might be nice to have a disk copy of the arff rows for record, passing to others. + fp_strio = io.StringIO() + a.write_arff(outfile=fp_strio, \ + remove_sparse_classes=True, \ + n_sources_needed_for_class_inclusion=1, + include_header=include_header)#, classes_arff_str='', remove_sparse_classes=False) + + arff_row_list = [] + out_dict = {} + arff_rows_str = fp_strio.getvalue() + + # See pairwise_classification.py 2550 + #Pairwise_Classification parse_arff(self, arff_has_ids=False, arff_has_classes=True, has_srcid=False, get_features=False): + """ + arff_rows = [] + for a_str in arff_rows_str.split('\n'): + if len(a_str) == 0: + continue + if a_str[0] == '@': + continue + if a_str[0] == '%': + continue + arff_rows.append(a_str) + + assert(len(all_class_list) == len(arff_rows)) + + for i, arff_row in enumerate(arff_rows): + class_name = all_class_list[i] + + if not out_dict.has_key(class_name): + out_dict[class_name] = {'srcid_list':[], + 'count':0, + 'arffrow_wo_classnames':[], + } + out_dict[class_name]['srcid_list'].append(new_srcid_list[i]) + out_dict[class_name]['count'] += 1 + out_dict[class_name]['arffrow_wo_classnames'].append( \ + arff_row[:arff_row.rindex("'", 0,arff_row.rindex("'")) - 1]) + + return out_dict # out_dict[class_name][arffrow_wo_classnames:[], count:1, srcid_list:[] ### exclude:'arffrow_with_classnames:[] + + """ + + return arff_rows_str + + +class Arff_Generation_Engine_Tasks: + """ Class contains methods that will be used for arff lines generation + """ + + def task_generate_feature_arff_lines(self, pars, srcid_list=[], xml_dirpath='', include_header=True, + write_multiinfo_srcids=True, source_xml_dict={}, + ParseNomadColorsList=None, + use_mtmerr_ts_files=False, + do_sigmaclip=True): + """ Given a sourceid list, generate features and the resulting ARFF lines. + + """ + #perc_arr = array(list(arange(0.2, 0.6, 0.01))) + #'percent':[str(elem) for elem in perc_arr] + sub_perc_list = [1.0] + sub_iter_list = [1] + #debug = 'hi3' + #import traceback + #try: + arff_str = get_perc_subset(srcid_list, sub_perc_list, sub_iter_list, xml_dirpath=xml_dirpath, + include_header=include_header, + source_xml_dict=source_xml_dict, + write_multiinfo_srcids=write_multiinfo_srcids, + ParseNomadColorsList=ParseNomadColorsList, + use_mtmerr_ts_files=use_mtmerr_ts_files, + do_sigmaclip=do_sigmaclip) + #except: + # debug = traceback.format_exc() + #return {'test':debug, 'arff_rows':[1,2,3,4,5]} + arff_rows = [] + class_list = [] + for row in arff_str.split('\n'): + if len(row) == 0: + continue + elif row[:5] == '@data': + continue + elif row[:16] == '@ATTRIBUTE class': + class_str = row[row.rfind("{'") + 2: row.rfind("'}")] + class_list = class_str.split("','") + else: + arff_rows.append(row) + + return {'arff_rows':arff_rows, 'class_list':class_list} + + + +def master_ipython_arff_generation(pars={}, write_multiinfo_srcids=True, source_xml_dict={}, use_mtmerr_ts_files=False, do_sigmaclip=True): + """ Main code which controls ipython nodes when generating + +This is the task which will be called on ipengines by this function: + +task_generate_feature_arff_lines(pars, srcid_list=[]) + + """ + + import datetime + import time + import cPickle + try: + from IPython.kernel import client + except: + pass + + mec = client.MultiEngineClient() + mec.reset(targets=mec.get_ids()) # Reset the namespaces of all engines + tc = client.TaskClient() + + mec_exec_str = """ +import sys, os +import copy +import matplotlib +matplotlib.use('agg') +sys.path.append(os.path.abspath('/global/home/users/dstarr/src/TCP/Software/ingest_tools')) +sys.path.append(os.path.abspath('/global/home/users/dstarr/src/TCP/Software/citris33')) +from get_colors_for_tutor_sources import Parse_Nomad_Colors_List +ParseNomadColorsList = Parse_Nomad_Colors_List(fpath='/global/home/users/dstarr/src/TCP/Data/best_nomad_src_list') +import arff_generation_master +ArffEngineTasks = arff_generation_master.Arff_Generation_Engine_Tasks()""" + + print('before mec()') + #print mec_exec_str + #import pdb; pdb.set_trace() + engine_ids = mec.get_ids() + pending_result_dict = {} + for engine_id in engine_ids: + pending_result_dict[engine_id] = mec.execute(mec_exec_str, targets=[engine_id], block=False) + n_pending = len(pending_result_dict) + i_count = 0 + while n_pending > 0: + still_pending_dict = {} + for engine_id, pending_result in pending_result_dict.items(): + try: + result_val = pending_result.get_result(block=False) + except: + print("get_result() Except. Still pending on engine: %d" % (engine_id)) + still_pending_dict[engine_id] = pending_result + result_val = None # 20110105 added + if result_val is None: + print("Still pending on engine: %d" % (engine_id)) + still_pending_dict[engine_id] = pending_result + if i_count > 10: + mec.clear_pending_results() + pending_result_dict = {} + mec.reset(targets=still_pending_dict.keys()) + for engine_id in still_pending_dict.keys(): + pending_result_dict[engine_id] = mec.execute(mec_exec_str, targets=[engine_id], block=False) + ### + time.sleep(20) # hack + pending_result_dict = [] # hack + ### + i_count = 0 + else: + print("sleeping...") + time.sleep(5) + pending_result_dict = still_pending_dict + n_pending = len(pending_result_dict) + i_count += 1 + + print('after mec()') + time.sleep(5) # This may be needed, although mec() seems to wait for all the Ipython clients to finish + print('after sleep()') + #import pdb; pdb.set_trace() + + # todo: fill a dict and write to pickle: of srcid:xml_filepath + srcid_list = pars['src_id'] + + task_id_list = [] + class_list = [] + + #if use_mtmerr_ts_files: + # ### This case is used when source timeseries is not stored in XMLs, but rather files with lines like: "55243.43624000 19.36500000 ......" + # return # TODO want to have an else below... + + #for srcid in srcid_list[:4]: + if use_mtmerr_ts_files: + srcid_list_new = srcid_list + else: + srcid_list_new = [] + for srcid in srcid_list: + ##20120130disable: #srcid_list_new.append(int(srcid) + 100000000) + srcid_list_new.append(srcid) + #junktry#srcid_list_new.append(str(srcid)) # late we expect this to be a string, non +100000000 + + ### 20110622: I believe this is just a quick run-through of code in non-parallel mode, for one source: + result_arff_list = [] + from get_colors_for_tutor_sources import Parse_Nomad_Colors_List + ParseNomadColorsList = Parse_Nomad_Colors_List(fpath='/global/home/users/dstarr/src/TCP/Data/best_nomad_src_list') + ArffEngineTasks = Arff_Generation_Engine_Tasks() + out_dict = ArffEngineTasks.task_generate_feature_arff_lines(pars, srcid_list=srcid_list_new[:1], xml_dirpath=pars['xml_dirpath'], include_header=True, write_multiinfo_srcids=write_multiinfo_srcids, source_xml_dict=source_xml_dict, ParseNomadColorsList=ParseNomadColorsList, use_mtmerr_ts_files=use_mtmerr_ts_files, do_sigmaclip=do_sigmaclip) + #out_dict = ArffEngineTasks.task_generate_feature_arff_lines(pars, srcid_list=srcid_list_new, xml_dirpath=pars['xml_dirpath'], include_header=True, write_multiinfo_srcids=write_multiinfo_srcids, source_xml_dict=source_xml_dict, ParseNomadColorsList=ParseNomadColorsList) + ### KLUDGE leave out the last row since it will be reprocessed below: + result_arff_list.extend(out_dict['arff_rows'][:-1]) + #import pdb; pdb.set_trace() + #print + + + n_src_per_task = 10 # 10 # NOTE: is generating PSD(freq) plots within lightcurve.py, should use n_src_per_task = 1, and all tasks should finish.# for ALL_TUTOR, =1 ipcontroller uses 99% memory, so maybe =3? (NOTE: cant do =10 since some TUTOR sources fail) + + imin_list = range(0, len(srcid_list_new), n_src_per_task) + + for i_min in imin_list: + srcid_sublist = srcid_list_new[i_min: i_min + n_src_per_task] + sub_source_xml_dict = {} + if len(source_xml_dict) > 0: + for sid in srcid_sublist: + sub_source_xml_dict[sid] = source_xml_dict[sid] + + #print srcid_list + #import pdb; pdb.set_trace() + #print + ##### FOR DEBUGGING: + ##### - NOTE: will use up memory if run for ~100 iterations + #ArffEngineTasks = Arff_Generation_Engine_Tasks() + #out_dict = ArffEngineTasks.task_generate_feature_arff_lines(pars, srcid_list=srcid_sublist, xml_dirpath=pars['xml_dirpath'], include_header=False, write_multiinfo_srcids=write_multiinfo_srcids, ParseNomadColorsList=ParseNomadColorsList) + #import pdb; pdb.set_trace() + #print + ##### + ### 20110106: This doesn't seem to solve the ipcontroller memory error, but works: + tc_exec_str = """ +tmp_stdout = sys.stdout +sys.stdout = open(os.devnull, 'w') +#os.system('touch /global/home/groups/dstarr/debug_started/%s' % (str(srcid_list[0]))) +out_dict = ArffEngineTasks.task_generate_feature_arff_lines(pars, srcid_list=srcid_list, xml_dirpath=xml_dirpath, include_header=include_header, write_multiinfo_srcids=write_multiinfo_srcids, source_xml_dict=source_xml_dict, ParseNomadColorsList=ParseNomadColorsList, use_mtmerr_ts_files=use_mtmerr_ts_files, do_sigmaclip=do_sigmaclip) +#os.system('touch /global/home/groups/dstarr/debug/%s' % (str(srcid_list[0]))) +sys.stdout.close() +sys.stdout = tmp_stdout + + """ + + if 1: + taskid = tc.run(client.StringTask(tc_exec_str, + push={'pars':pars, + 'srcid_list':srcid_sublist, + 'xml_dirpath':pars['xml_dirpath'], + 'include_header':False, + 'source_xml_dict':sub_source_xml_dict, + 'write_multiinfo_srcids':write_multiinfo_srcids, + 'use_mtmerr_ts_files':use_mtmerr_ts_files, + 'do_sigmaclip':do_sigmaclip}, + pull='out_dict', + retries=3)) # 3 + task_id_list.append(taskid) + #import pdb; pdb.set_trace() + #print # print tc.get_task_result(0, block=False).results + #import pdb; pdb.set_trace() + #### + #combo_results_dict = {} + dtime_pending_1 = None + while ((tc.queue_status()['scheduled'] > 0) or + (tc.queue_status()['pending'] > 0)): + tasks_to_pop = [] + for task_id in task_id_list: + temp = tc.get_task_result(task_id, block=False) + if temp is None: + continue + temp2 = temp.results + if temp2 is None: + continue + results = temp2.get('out_dict',None) + if results is None: + continue # skip some kind of NULL result + if len(results) > 0: + tasks_to_pop.append(task_id) + result_arff_list.extend(results['arff_rows']) + for a_class in results['class_list']: + if not a_class in class_list: + class_list.append(a_class) + #ipython_return_dict = results + #update_combo_results(combo_results_dict=combo_results_dict, + # ipython_return_dict=copy.deepcopy(ipython_return_dict)) + for task_id in tasks_to_pop: + task_id_list.remove(task_id) + + + # (tc.queue_status()['pending'] <= 64)): + # if ((now - dtime_pending_1) >= datetime.timedelta(seconds=300)): + if ((tc.queue_status()['scheduled'] == 0) and + (tc.queue_status()['pending'] <= 7)): + if dtime_pending_1 is None: + dtime_pending_1 = datetime.datetime.now() + else: + now = datetime.datetime.now() + if ((now - dtime_pending_1) >= datetime.timedelta(seconds=1200)): + print("dtime_pending=1 timeout break!") + break + print(tc.queue_status()) + print('Sleep... 60 in test_pairwise_on_citris33_ipython::master_ipython_R_classifiers()', datetime.datetime.utcnow()) + time.sleep(60) + # IN CASE THERE are still tasks which have not been pulled/retrieved: + for task_id in task_id_list: + temp = tc.get_task_result(task_id, block=False) + if temp is None: + continue + temp2 = temp.results + if temp2 is None: + continue + results = temp2.get('out_dict',None) + if results is None: + continue #skip some kind of NULL result + if len(results) > 0: + tasks_to_pop.append(task_id) + result_arff_list.extend(results['arff_rows']) + for a_class in results['class_list']: + if not a_class in class_list: + class_list.append(a_class) + #ipython_return_dict = results + #update_combo_results(combo_results_dict=combo_results_dict, + # ipython_return_dict=copy.deepcopy(ipython_return_dict)) + #### + print(tc.queue_status()) + return {'result_arff_list':result_arff_list, + 'class_list':class_list} + + + +def do_branimir_ptf_timeseries(pars={}): + """ Use Branimir's RRLyrae PTF timeseries files: + TODO: need to create a dict of {srcid:path} + - store this in a .pkl + """ + # TODO: load filename + #20110125#src_list_fpath = "/global/home/users/dstarr/500GB/branimir/IPAC_lightcurves" + src_list_fpath = "/global/home/users/dstarr/500GB/branimir/linear_rr_in_ptf_lightcurves" + fpaths_unstripped = open(src_list_fpath).readlines() + + source_fpath_dict = {} + for fpath_unstripped in fpaths_unstripped: + fpath = fpath_unstripped.strip().replace('/home/bsesar/projects/rrlyr','/global/home/users/dstarr/500GB/branimir') + #src_name = fpath[fpath.rfind('lightcurves') + 12:].replace('_','/') + src_name = fpath[fpath.rfind('_') + 1:] # dstarr has checked that these src_name are all unique and no source is weing overwritten + #if src_name != '6094056391088054904': + if src_name != '6941401624103488574': + continue + source_fpath_dict[src_name] = fpath + + pars['src_id'] = source_fpath_dict.keys() + pars['xml_dirpath'] = None # not needed in our case + out_dict = master_ipython_arff_generation(pars=pars, + source_xml_dict=source_fpath_dict, + write_multiinfo_srcids=False, + use_mtmerr_ts_files=True, + do_sigmaclip=False, + ) #write_multiinfo_srcids=False:only srcid in output arff; True when doing several percent/subset arff rows + result_arff_list = out_dict['result_arff_list'] + + ### Need to find the last ATTRIBUTE in the header, so the classes can be inserted: + in_attibs = False + for i, elem in enumerate(out_dict['result_arff_list']): + if len(elem) == 0: + continue + elif elem[0] == "%": + continue + elif elem[:10] == "@ATTRIBUTE": + in_attibs = True + elif in_attibs: + ### Now we are done parsing the @ATTRIBUTES + class_str = "@ATTRIBUTE class {'%s'}" % ("','".join(out_dict['class_list'])) + out_dict['result_arff_list'].insert(i, class_str) + ### Also want to insert @DATA before the data starts. + out_dict['result_arff_list'].insert(i + 1, '@DATA') + break + + fp = open(os.path.expandvars("$HOME/scratch/out.arff"), 'w') + fp.write('\n'.join(result_arff_list)) + fp.close() + import datetime + print(datetime.datetime.now()) + import pdb; pdb.set_trace() + print() + + + + + +if __name__ == '__main__': + + pars = {'src_id':[], #deboss_srcid_list, #['148875', '148723', '148420', '149144', '149049'], #deboss_srcid_list,#['148875', '148723', '148420', '149144', '149049'], #deboss_srcid_list, #['149144', '149049', '149338', '149049', '149338','149182','149108'], + 'percent':[], #[str(elem) for elem in perc_arr], #[str(elem) for elem in arange(0.90, 1.0, 0.01)], # [str(elem) for elem in arange(0.58, 1.0, 0.01)]#[str(elem) for elem in arange(0.01, 1.01, 0.01)], #[str(elem) for elem in arange(0.8, 1.0, 0.10)], #['0.8', '0.86', '0.88', '0.9', '0.95', '1.0'], + 'niters':'7', #'5', #'6',#'12', # Not a list, string value, will be used to generate list: range(niters) + 'pairwise_classifier_pkl_fpath':"/home/pteluser/Dropbox/work/WEKAj48_dotastro_ge1srcs_period_nonper__exclude_non_debosscher/pairwise_classifier__debosscher_table3.pkl.gz", # This is just debosscher data + 'crossvalid_pairwise_classif_dirpath':'/global/home/users/dstarr/scratch/crossvalid/pairwise_scratch_20101109_4060nostratif_2qso', # NOTE: set to '' if want to do non-crossvalid-folded classifiers + 'taxonomy_prune_defs':{'terminating_classes':['mira', 'sreg', 'rv', 'dc', 'piic', 'cm', 'rr-ab', 'rr-c', 'rr-d', 'ds', 'lboo', 'bc', 'spb', 'gd', 'be', 'pvsg', 'CP', 'wr', 'tt', 'haebe', 'sdorad', 'ell', 'alg', 'bly', 'wu']}, + 'plot_symb':['o','s','v','d','<'], # ,'+','x','.', ,'>','^' + 'feat_distrib_colors':['#000000', + '#ff3366', + '#660000', + '#aa0000', + '#ff0000', + '#ff6600', + '#996600', + '#cc9900', + '#ffff00', + '#ffcc33', + '#ffff99', + '#99ff99', + '#666600', + '#99cc00', + '#00cc00', + '#006600', + '#339966', + '#33ff99', + '#006666', + '#66ffff', + '#0066ff', + '#0000cc', + '#660099', + '#993366', + '#ff99ff', + '#440044'], + 'R_class_lookup':{ \ + 'X Ray Binary':'xrbin', + 'a. Mira':'mira', + 'b. Semireg PV':'sreg', + 'c. RV Tauri':'rv', + 'd. Classical Cepheid':'dc', + 'e. Pop. II Cepheid':'piic', + 'f. Multi. Mode Cepheid':'cm', + 'g. RR Lyrae, FM':'rr-ab', + 'h. RR Lyrae, FO':'rr-c', + 'i. RR Lyrae, DM':'rr-d', + 'j. Delta Scuti':'ds', + 'k. Lambda Bootis':'lboo', + 'l. Beta Cephei':'bc', + 'm. Slowly Puls. B':'spb', + 'n. Gamma Doradus':'gd', + 'o. Pulsating Be':'be', + 'p. Per. Var. SG':'pvsg', + 'q. Chem. Peculiar':'CP', + 'r. Wolf-Rayet':'wr', + 's. T Tauri':'tt', + 't. Herbig AE/BE':'haebe', + 'u. S Doradus':'sdorad', + 'v. Ellipsoidal':'ell', + 'w. Beta Persei':'alg', + 'x. Beta Lyrae':'bly', + 'y. W Ursae Maj.':'wu', + }, + 'R_class_lookup__old':{ \ + 'X Ray Binary':'xrbin', + 'a. Mira':'mira', + 'b. semireg PV':'sreg', + 'c. RV Tauri':'rv', + 'd. Classical Cepheid':'dc', + 'e. Pop. II Cepheid':'piic', + 'f. Multi. Mode Cepheid':'cm', + 'g. RR Lyrae, FM':'rr-ab', + 'h. RR Lyrae, FO':'rr-c', + 'i. RR Lyrae, DM':'rr-d', + 'j. Delta Scuti':'ds', + 'k. Lambda Bootis':'lboo', + 'l. Beta Cephei':'bc', + 'm. Slowly Puls. B':'spb', + 'n. Gamma Doradus':'gd', + 'o. BE':'be', + 'p. Per. Var. SG':'pvsg', + 'q. Chem. Peculiar':'CP', + 'r. Wolf-Rayet':'wr', + 's. T Tauri':'tt', + 't. Herbig AE/BE':'haebe', + 'u. S Doradus':'sdorad', + 'v. Ellipsoidal':'ell', + 'w. Beta Persei':'alg', + 'x. Beta Lyrae':'bly', + 'y. W Ursae Maj.':'wu', + }, + } + # 'srcid':[], + # 'percent'[] + options = parse_options() + #if options.srcid != '': + # pars['src_id'] = options.srcid + + ### Use Branimir's RRLyrae PTF timeseries files: + # TODO: need to create a dict of {srcid:path} + # - store this in a .pkl + if 0: + ### 20120126 Use Branimir's RRLyrae PTF timeseries files: + do_branimir_ptf_timeseries(pars=pars) + sys.exit() + + + if 0: + ### OBSOLETE + ### all_tutor_xmls: Many tutor project_ids case: + pars['xml_dirpath'] = '/global/home/users/dstarr/500GB/all_tutor_xmls_flat' + xmls_dict_pkl_fpath = '/global/home/users/dstarr/500GB/all_tutor_xmls_dict.pkl' + glob_str = '%s/*/*' % (pars['xml_dirpath']) + + if os.path.exists(xmls_dict_pkl_fpath): + source_xml_dict = cPickle.load(open(xmls_dict_pkl_fpath)) + else: + #import pdb; pdb.set_trace() + #print + + source_xml_dict = {} + dirs = os.listdir(pars['xml_dirpath']) + for dir in dirs: + dirpath = "%s/%s" % (pars['xml_dirpath'], dir) + glob_str = '%s/*' % (dirpath) + + xml_fpaths = glob.glob(glob_str) + + for xml_fpath in xml_fpaths: + print(xml_fpath) + num_str = xml_fpath[xml_fpath.rfind('/') + 1:xml_fpath.rfind('.')] + srcid = int(num_str)# - 100000000 + source_xml_dict[str(srcid)] = xml_fpath + + + fp = open(xmls_dict_pkl_fpath, 'wb') + cPickle.dump(source_xml_dict,fp,1) # ,1) means a binary pkl is used. + fp.close() + + + else: + ### Most other TUTOR projects: + #pars['xml_dirpath'] = '/global/home/users/dstarr/500GB/all_tutor_xmls_flat' + #xmls_dict_pkl_fpath = '/global/home/users/dstarr/500GB/all_tutor_xmls_dict.pkl' + #glob_str = '%s/*' % (pars['xml_dirpath']) + + + ### ASAS configs pre20120221 #(?pre 20110511?): + #pars['xml_dirpath'] = '/global/home/users/dstarr/500GB/xmls/proj_126/xmls' + #xmls_dict_pkl_fpath = '/global/home/users/dstarr/500GB/xmls/proj_126/xmls_dict.pkl' + + ### ASAS configs (pre 20110511): + pars['xml_dirpath'] = '/global/home/users/dstarr/500GB/xmls/proj_126/asas_ACVS_50k_new_aper_20120221' + xmls_dict_pkl_fpath = '/global/home/users/dstarr/500GB/xmls/proj_126/asas_ACVS_50k_new_aper_20120221_xmls_dict.pkl' + + ### stipe82 SDSS: + #pars['xml_dirpath'] = '/global/home/groups/dstarr/tutor_121_xmls' + #xmls_dict_pkl_fpath = '/global/home/groups/dstarr/tutor_121_xmls/xmls_dict.pkl' + + glob_str = '%s/*' % (pars['xml_dirpath']) + + + if os.path.exists(xmls_dict_pkl_fpath): + source_xml_dict = cPickle.load(open(xmls_dict_pkl_fpath)) + else: + xml_fpaths = glob.glob(glob_str) + + source_xml_dict = {} + for xml_fpath in xml_fpaths: + #print xml_fpath + num_str = xml_fpath[xml_fpath.rfind('/') + 1:xml_fpath.rfind('.')] + #20120130#srcid = int(num_str) - 100000000 + #20120130#source_xml_dict[str(srcid)] = xml_fpath + source_xml_dict[int(num_str)] = xml_fpath + fp = open(xmls_dict_pkl_fpath, 'wb') + cPickle.dump(source_xml_dict,fp,1) # ,1) means a binary pkl is used. + fp.close() + + #import pdb; pdb.set_trace() + #print + pars['src_id'] = source_xml_dict.keys() + + #import pdb; pdb.set_trace() + #print + out_dict = master_ipython_arff_generation(pars=pars, + source_xml_dict=source_xml_dict, + write_multiinfo_srcids=False) #False:only srcid in output arff; True when doing several percent/subset arff rows + #print result_arff_list + result_arff_list = out_dict['result_arff_list'] + + ### Need to find the last ATTRIBUTE in the header, so the classes can be inserted: + in_attibs = False + for i, elem in enumerate(out_dict['result_arff_list']): + if len(elem) == 0: + continue + elif elem[0] == "%": + continue + elif elem[:10] == "@ATTRIBUTE": + in_attibs = True + elif in_attibs: + ### Now we are done parsing the @ATTRIBUTES + class_str = "@ATTRIBUTE class {'%s'}" % ("','".join(out_dict['class_list'])) + out_dict['result_arff_list'].insert(i, class_str) + ### Also want to insert @DATA before the data starts. + out_dict['result_arff_list'].insert(i + 1, '@DATA') + break + + if 0: + # pre 20120220 + # This section is for recording which LS params were changed for each arff. + # ('nharm', 8), + # ? want to vary the sigmaclipping? + arff_pars = [ \ + ('f_max', 33.0), + ('df_factor', 0.8), + ('nharm', 8), + ('tone_control',5.0), + ('dtrend_order',1)] + fp_dat = open('/global/home/users/dstarr/500GB/LS_param_explore_arffs/LS_param_explore_arffs.dat','a') + arff_fname = "/global/home/users/dstarr/500GB/LS_param_explore_arffs/%f_%f_%d_%f_%d.arff" % ( \ + arff_pars[0][1], + arff_pars[1][1], + arff_pars[2][1], + arff_pars[3][1], + arff_pars[4][1]) + + fp_dat.write("%s %f %f %d %f %d\n" % (arff_fname, + arff_pars[0][1], + arff_pars[1][1], + arff_pars[2][1], + arff_pars[3][1], + arff_pars[4][1])) + fp_dat.close() + + fp = open(arff_fname, 'w') + fp.write('\n'.join(result_arff_list)) + fp.close() + + else: + fp = open(os.path.expandvars("$HOME/scratch/out.arff"), 'w') + fp.write('\n'.join(result_arff_list)) + fp.close() + import datetime + print(datetime.datetime.now()) + import pdb; pdb.set_trace() + print() diff --git a/mltsp/TCP/Software/citris33/arff_generation_master_using_generic_ts_data.py b/mltsp/TCP/Software/citris33/arff_generation_master_using_generic_ts_data.py new file mode 100644 index 00000000..c0d3636d --- /dev/null +++ b/mltsp/TCP/Software/citris33/arff_generation_master_using_generic_ts_data.py @@ -0,0 +1,2506 @@ +#!/usr/bin/env python +""" + +Adapted from arff_generation_master.py + +""" +from __future__ import print_function +import sys, os +import cPickle +import time +import gzip +import copy +import glob +import matplotlib +matplotlib.use('agg') # just needed for lightcurve.py::lomb_code() PSD.png plotting without X11 + +from optparse import OptionParser + +sys.path.append(os.path.abspath(os.environ.get('TCP_DIR') + 'Software/ingest_tools')) + +sciclass_lookup = {'classid_shortname': {0: '_varstar_', + 1: 'GCVS', + 2: 'Eruptive', + 3: 'FU', + 4: 'GCAS', + 5: 'I', + 6: 'IA', + 7: 'IB', + 8: 'IN', + 9: 'INA', + 10: 'INB', + 11: 'INT', + 12: 'IN(YY)', + 13: 'IS', + 14: 'ISA', + 16: 'ISB', + 17: 'RCB', + 18: 'RS', + 19: 'SDOR', + 20: 'UV', + 21: 'UVN', + 22: 'WR', + 23: 'Pulsating', + 24: 'ACYG', + 25: 'BCEP', + 26: 'BCEPS', + 27: 'CEP', + 28: 'CEP(B)', + 29: 'CW', + 30: 'CWA', + 31: 'CWB', + 32: 'DCEP', + 33: 'DCEPS', + 34: 'DSCT', + 35: 'DSCTC', + 36: 'L', + 37: 'LB', + 38: 'LC', + 39: 'M', + 40: 'PVTEL', + 41: 'RR', + 42: 'RR(B)', + 43: 'RRAB', + 44: 'RRC', + 45: 'RV', + 46: 'RVA', + 47: 'RVB', + 48: 'SR', + 49: 'SRA', + 50: 'SRB', + 51: 'SRC', + 52: 'SRD', + 53: 'SXPHE', + 54: 'ZZ', + 55: 'ZZA', + 56: 'ZZB', + 57: 'Rotating', + 58: 'ACV', + 59: 'ACVO', + 60: 'BY', + 61: 'ELL', + 62: 'FKCOM', + 63: 'PSR', + 64: 'SXARI', + 65: 'Cataclysmic', + 66: 'N', + 67: 'NA', + 68: 'NB', + 69: 'NC', + 70: 'NL', + 71: 'NR', + 72: 'SN', + 73: 'SNI', + 74: 'SNII', + 75: 'UG', + 76: 'UGSS', + 77: 'UGSU', + 78: 'UGZ', + 79: 'ZAND', + 80: 'Eclipsing', + 82: 'E', + 83: 'EA', + 84: 'EB', + 85: 'EW', + 86: 'GS', + 87: 'PN', + 88: 'RS', + 89: 'WD', + 90: 'WR(1)', + 91: 'AR', + 92: 'D', + 93: 'DM', + 94: 'DS', + 95: 'DW', + 96: 'K', + 97: 'KE', + 98: 'KW', + 99: 'SD', + 100: 'SNIa', + 101: 'SNIb', + 102: 'SNIc', + 103: 'SNIIP', + 104: 'SNIIN', + 105: 'SNIIL', + 106: 'SNIa-sc', + 107: 'Nonstellar', + 109: 'GalNuclei', + 110: 'AGN', + 111: 'TDE', + 112: 'DrkMatterA', + 113: 'GRB', + 114: 'SHB', + 115: 'LSB', + 116: 'SGR', + 117: 'X', + 118: 'XB', + 119: 'XF', + 120: 'XI', + 121: 'XJ', + 122: 'XND', + 123: 'XNG', + 124: 'XP', + 125: 'XPR', + 126: 'XPRM', + 127: 'XRM', + 128: 'ZZO', + 129: 'NEW', + 130: 'AM', + 131: 'R', + 132: 'BE', + 133: 'EP', + 134: 'SRS', + 135: 'GDOR', + 136: 'RPHS', + 137: 'LPB', + 138: 'BLBOO', + 139: 'BL-Lac', + 140: 'RRcl', + 141: 'RRe', + 142: 'SNIa-pec', + 143: 'SNIc-pec', + 145: 'ML', + 149: 'UXUma', + 150: 'Polars', + 151: 'DQ', + 152: 'EWa', + 153: 'EWs', + 154: 'vs', + 157: 'cv', + 158: 'nov', + 159: 'cn', + 160: 'n-l', + 161: 'sw', + 162: 'vy', + 163: 'ux', + 164: 'amcvn', + 165: 'p', + 166: 'am', + 167: 'dqh', + 168: 'ug', + 169: 'su', + 170: 'er', + 171: 'wz', + 172: 'zc', + 173: 'ssc', + 174: 'rn', + 175: 'sv', + 176: 'grb', + 177: 'lgrb', + 178: 'sgrb', + 179: 'srgrb', + 180: 'sne', + 181: 'cc', + 182: 'tia', + 183: 'tib', + 184: 'tic', + 185: 'tsnii', + 186: 'pi', + 187: 'tsni', + 188: 'ev', + 189: 'rscvn', + 190: 'uv', + 191: 'sdorad', + 192: 'wr', + 193: 'gc', + 194: 'fuor', + 195: 'ov', + 196: 'rcb', + 197: 'haebe', + 198: 'be', + 199: 'shs', + 200: 'tt', + 201: 'ttc', + 202: 'ttw', + 203: 'puls', + 204: 'gd', + 205: 'sx', + 206: 'rr-lyr', + 207: 'ac', + 208: 'mira', + 209: 'pwd', + 211: 'ds', + 212: 'pvt', + 213: 'bc', + 214: 'sreg', + 215: 'rv', + 216: 'piic', + 217: 'c', + 218: 'rr-ab', + 219: 'rr-c', + 220: 'rr-d', + 221: 'rr-e', + 222: 'rr-cl', + 223: 'zz', + 224: 'zzh', + 225: 'zzhe', + 226: 'zzheii', + 227: 'gw', + 228: 'sr-a', + 229: 'sr-b', + 230: 'sr-c', + 231: 'sr-d', + 232: 'rvc', + 233: 'rvv', + 234: 'bl', + 235: 'wv', + 236: 'ca', + 237: 'cm', + 238: 'dc', + 239: 'sdc', + 240: 'rot', + 241: 'sxari', + 242: 'aii', + 243: 'fk', + 244: 'plsr', + 245: 'by', + 246: 'ell', + 247: 'msv', + 248: 'b', + 249: 'iii', + 250: 'xrb', + 251: 'bly', + 252: 'wu', + 253: 'alg', + 254: 'psys', + 255: 'SSO', + 256: 'BLZ', + 257: 'OVV', + 258: 'dsm', + 259: 'lamb', + 260: 'xrbin', + 261: 'lboo', + 262: 'qso', + 263: 'seyf', + 265: 'fsrq', + 266: 'iin', + 267: 'hae', + 268: 'tiapec', + 269: 'tiasc', + 270: 'iil', + 271: 'iip', + 272: 'iib', + 273: 'ticpec', + 274: 'maser', + 275: 'moving', + 276: 'ast', + 277: 'comet', + 278: 'hpm', + 279: 'eclipsing', + 280: 'k', + 281: 'd', + 282: 'sd', + 283: 'unclass', + 284: 'pvsg', + 285: 'cp', + 286: 'spb', + 287: 'sdbv', + 1000000: 'Chemically Peculiar Stars'}, + 'longname_shortname': {'AM Canum Venaticorum': 'amcvn', + 'AM Her': 'AM', + 'AM Herculis (True Polar)': 'am', + 'Active Galactic Nuclei': 'AGN', + 'Algol (Beta Persei)': 'alg', + 'Alpha Cygni': 'ac', + 'Alpha2 CVn - Rapily Oscillating': 'ACVO', + 'Alpha2 Canum Venaticorum': 'aii', + 'Anomalous Cepheids': 'BLBOO', + 'Anomolous Cepheid': 'ca', + 'Asteroid': 'ast', + 'BL Lac': 'BL-Lac', + 'BY Draconis': 'by', + 'Be Star': 'be', + 'Be star': 'BE', + 'Beta Cephei': 'bc', + 'Beta Cephei - Short Period': 'BCEPS', + 'Beta Lyrae': 'bly', + 'Binary': 'b', + 'Blazar': 'BLZ', + 'Cataclysmic (Explosive and Novalike) Variable Stars': 'Cataclysmic', + 'Cataclysmic Variable': 'cv', + 'Cepheid Variable': 'c', + 'Cepheids': 'CEP', + 'Cepheids - Multiple Modes': 'CEP(B)', + 'Chemically Peculiar Stars': 'CP', + 'Classical Cepheid': 'dc', + 'Classical Novae': 'cn', + 'Classical T Tauri': 'ttc', + 'Close Binary Eclipsing Systems': 'eclipsing', + 'Close Binary with Reflection': 'R', + 'Comet': 'comet', + 'Contact Systems': 'k', + 'Contact Systems - Early (O-A)': 'KE', + 'Contact Systems - W Ursa Majoris': 'KW', + 'Core Collapse Supernovae': 'cc', + 'DQ Herculis (Intermdiate Polars)': 'dqh', + 'DQ Herculis Variable (Intermediate Polars)': 'DQ', + 'Dark Matter Anniliation Event': 'DrkMatterA', + 'Delta Cep': 'DCEP', + 'Delta Cep - Symmetrical': 'DCEPS', + 'Delta Scuti': 'ds', + 'Delta Scuti - Low Amplitude': 'DSCTC', + 'Delta Scuti - Multiple Modes': 'dsm', + 'Detached': 'd', + 'Detached - AR Lacertae': 'AR', + 'Detached - Main Sequence': 'DM', + 'Detached - With Subgiant': 'DS', + 'ER Ursae Majoris': 'er', + 'Eclipsed by Planets': 'EP', + 'Eclipsing Binary Systems': 'E', + 'Ellipsoidal': 'ell', + 'Eruptive Variable': 'ev', + 'Eruptive Variable Stars': 'Eruptive', + 'Eruptive Wolf-Rayet': 'WR', + 'FK Comae Berenices': 'fk', + 'FU Orionis': 'fuor', + 'Fast Novae': 'NA', + 'Flaring Orion Variables': 'UVN', + 'Flat Spectrum Radio Quasar': 'fsrq', + 'Fluctuating X-Ray Systems': 'XF', + 'GW Virginis': 'gw', + 'Galaxy Nuclei ': 'GalNuclei', + 'Gamma Cas': 'GCAS', + 'Gamma Cassiopeiae': 'gc', + 'Gamma Doradus': 'gd', + 'Gamma Ray Burst': 'grb', + 'Gamma-ray Bursts': 'GRB', + 'Herbig AE': 'hae', + 'Herbig AE/BE Star': 'haebe', + 'High Proper Motion Star': 'hpm', + 'Irregular': 'I', + 'Irregular Early O-A': 'IA', + 'Irregular Intermediate F-M': 'IB', + 'Irregular Supergiants': 'LC', + 'Lambda Bootis Variable': 'lboo', + 'Lambda Eridani': 'lamb', + 'Long GRB': 'lgrb', + 'Long Gamma-ray Burst': 'LSB', + 'Long Period (W Virginis)': 'wv', + 'Long Period B': 'LPB', + 'Maser': 'maser', + 'Microlensing Event': 'ML', + 'Mira': 'mira', + 'Moving Source': 'moving', + 'Multiple Mode Cepheid': 'cm', + 'Multiple Star Variables': 'msv', + 'New Variability Types': 'NEW', + 'Novae': 'nov', + 'Novalike': 'n-l', + 'Novalike Variables': 'NL', + 'Optically Variable Pulsars': 'PSR', + 'Optically Violent Variable Quasar (OVV)': 'OVV', + 'Orion': 'IN', + 'Orion Early Types (B-A or Ae)': 'INA', + 'Orion Intermediate Types (F-M or Fe-Me)': 'INB', + 'Orion T Tauri': 'INT', + 'Orion Variable': 'ov', + 'Orion with Absorption': 'IN(YY)', + 'PV Telescopii': 'pvt', + 'Pair Instability Supernovae': 'pi', + 'Peculiar Type Ia SN': 'tiapec', + 'Peculiar Type Ia Supernovae': 'SNIa-pec', + 'Peculiar Type Ic Supernovae': 'SNIc-pec', + 'Periodically variable supergiants': 'pvsg', + 'Polars': 'p', + 'Population II Cepheid': 'piic', + 'Pulsar': 'plsr', + 'Pulsating Variable': 'puls', + 'Pulsating Variable Stars': 'Pulsating', + 'Pulsating White Dwarf': 'pwd', + 'Pulsating subdwarf B-stars': 'sdbv', + 'QSO': 'qso', + 'R Coronae Borealis': 'rcb', + 'RR Lyrae': 'rr-lyr', + 'RR Lyrae - Asymmetric': 'RRAB', + 'RR Lyrae - Dual Mode': 'RR(B)', + 'RR Lyrae - Near Symmetric': 'RRC', + 'RR Lyrae -- Closely Spaced Modes': 'RRcl', + 'RR Lyrae -- Second Overtone Pulsations': 'RRe', + 'RR Lyrae, Closely Spaced Modes': 'rr-cl', + 'RR Lyrae, Double Mode': 'rr-d', + 'RR Lyrae, First Overtone': 'rr-c', + 'RR Lyrae, Fundamental Mode': 'rr-ab', + 'RR Lyrae, Second Overtone': 'rr-e', + 'RS Canum Venaticorum': 'rscvn', + 'RV Tauri': 'rv', + 'RV Tauri - Constant Mean Magnitude': 'RVA', + 'RV Tauri - Variable Mean Magnitude': 'RVB', + 'RV Tauri, Constant Mean Brightness': 'rvc', + 'RV Tauri, Variable Mean Brightness': 'rvv', + 'Rapid Irregular': 'IS', + 'Rapid Irregular Early Types (B-A or Ae)': 'ISA', + 'Rapid Irregular Intermediate to Late (F-M and Fe-Me)': 'ISB', + 'Recurrent Novae': 'rn', + 'Rotating Ellipsoidal': 'ELL', + 'Rotating Variable': 'rot', + 'Rotating Variable Stars': 'Rotating', + 'S Doradus': 'sdorad', + 'SRa (Z Aquarii)': 'sr-a', + 'SRb': 'sr-b', + 'SRc': 'sr-c', + 'SRd': 'sr-d', + 'SS Cygni': 'ssc', + 'SU Ursae Majoris': 'su', + 'SW Sextantis': 'sw', + 'SX Arietis': 'sxari', + 'SX Phoenicis': 'sx', + 'SX Phoenicis - Pulsating Subdwarfs': 'SXPHE', + 'Semidetached': 'sd', + 'Semiregular': 'SR', + 'Semiregular - Persistent Periodicity': 'SRA', + 'Semiregular - Poorly Defined Periodicity': 'SRB', + 'Semiregular F, G, or K': 'SRD', + 'Semiregular Pulsating Red Giants': 'SRS', + 'Semiregular Pulsating Variable': 'sreg', + 'Semiregular Supergiants': 'SRC', + 'Seyfert': 'seyf', + 'Shell Star': 'shs', + 'Short GRB': 'sgrb', + 'Short Gamma-ray Burst': 'SHB', + 'Short period (BL Herculis)': 'bl', + 'Slow Irregular': 'L', + 'Slow Irregular - Late Spectral Type (K, M, C, S)': 'LB', + 'Slow Novae': 'NB', + 'Slowly Pulsating B-stars': 'spb', + 'Soft Gamma Ray Repeater': 'srgrb', + 'Soft Gamma-ray Repeater': 'SGR', + 'Solar System Object': 'SSO', + 'Super-chandra Ia supernova': 'SNIa-sc', + 'Super-chandra Type Ia SN': 'tiasc', + 'Supernovae': 'sne', + 'Symbiotic Variable': 'sv', + 'Symbiotic Variables': 'ZAND', + 'Symmetrical': 'sdc', + 'Systems with Planetary Nebulae': 'PN', + 'Systems with Planets': 'psys', + 'Systems with Supergiant(s)': 'GS', + 'Systems with White Dwarfs': 'WD', + 'Systems with Wolf-Rayet Stars': 'WR(1)', + 'T Tauri': 'tt', + 'Three or More Stars': 'iii', + 'Tidal Disruption Event': 'TDE', + 'Type I Supernovae': 'tsni', + 'Type II L supernova': 'iil', + 'Type II N Supernova': 'iin', + 'Type II P supernova': 'iip', + 'Type II Supernovae': 'tsnii', + 'Type II b Supernova': 'iib', + 'Type II-L': 'SNIIL', + 'Type IIN': 'SNIIN', + 'Type IIP': 'SNIIP', + 'Type Ia': 'SNIa', + 'Type Ia Supernovae': 'tia', + 'Type Ib': 'SNIb', + 'Type Ib Supernovae': 'tib', + 'Type Ic': 'SNIc', + 'Type Ic Supernovae': 'tic', + 'Type Ic peculiar': 'ticpec', + 'U Geminorum': 'ug', + 'UV Ceti': 'UV', + 'UV Ceti Variable': 'uv', + 'UX Uma': 'UXUma', + 'UX Ursae Majoris': 'ux', + 'Unclassified': 'unclass', + 'VY Scl': 'vy', + 'Variable Sources (Non-stellar)': 'Nonstellar', + 'Variable Stars': 'GCVS', + 'Variable Stars [Alt]': 'vs', + 'Very Rapidly Pulsating Hot (subdwarf B)': 'RPHS', + 'Very Slow Novae': 'NC', + 'W Ursa Majoris': 'DW', + 'W Ursae Majoris': 'wu', + 'W Ursae Majoris - W UMa': 'EW', + 'W Ursae Majoris- a': 'EWa', + 'W Ursae Majoris- s': 'EWs', + 'W Virginis': 'CW', + 'W Virginis - Long Period': 'CWA', + 'W Virigins - Short Period': 'CWB', + 'WZ Sagittae': 'wz', + 'Weak-lined T Tauri': 'ttw', + 'Wolf-Rayet': 'wr', + 'X Ray Binary': 'xrbin', + 'X Ray Burster': 'xrb', + 'X-Ray Binaries with Jets': 'XJ', + 'X-Ray Bursters': 'XB', + 'X-Ray Pulsar': 'XP', + 'X-Ray Pulsar with late-type dwarf': 'XPRM', + 'X-Ray Pulsar, with Reflection': 'XPR', + 'X-Ray Sources, Optically Variable': 'X', + 'X-Ray with late-type dwarf, un-observed pulsar': 'XRM', + 'X-Ray, Novalike': 'XND', + 'X-Ray, Novalike with Early Type supergiant or giant': 'XNG', + 'X-ray Irregulars': 'XI', + 'Z Camelopardalis': 'zc', + 'ZZ Ceti': 'zz', + 'ZZ Ceti - Only H Absorption': 'ZZA', + 'ZZ Ceti - Only He Absorption': 'ZZB', + 'ZZ Ceti showing HeII': 'ZZO', + 'ZZ Ceti, H Absorption Only': 'zzh', + 'ZZ Ceti, He Absorption Only': 'zzhe', + 'ZZ Ceti, With He-II': 'zzheii', + '_varstar_': '_varstar_'}, + 'shortname_isactive': {'ACVO': 'Yes', + 'AGN': 'Yes', + 'AR': 'Yes', + 'BCEPS': 'Yes', + 'BL-Lac': 'Yes', + 'BLZ': 'Yes', + 'CP': 'No', + 'CW': 'Yes', + 'CWA': 'Yes', + 'CWB': 'Yes', + 'D': 'Yes', + 'DCEP': 'Yes', + 'DCEPS': 'Yes', + 'DM': 'Yes', + 'DS': 'Yes', + 'DSCTC': 'Yes', + 'DrkMatterA': 'Yes', + 'E': 'Yes', + 'ELL': 'Yes', + 'EP': 'Yes', + 'EWa': 'Yes', + 'EWs': 'Yes', + 'Eclipsing': 'Yes', + 'GS': 'Yes', + 'GalNuclei': 'Yes', + 'I': 'Yes', + 'IA': 'Yes', + 'IB': 'Yes', + 'IN(YY)': 'Yes', + 'INA': 'Yes', + 'INB': 'Yes', + 'IS': 'Yes', + 'ISA': 'Yes', + 'ISB': 'Yes', + 'K': 'Yes', + 'KE': 'Yes', + 'KW': 'Yes', + 'L': 'Yes', + 'LB': 'Yes', + 'LC': 'Yes', + 'LPB': 'Yes', + 'ML': 'Yes', + 'NA': 'Yes', + 'NB': 'Yes', + 'NC': 'Yes', + 'NEW': 'Yes', + 'Nonstellar': 'Yes', + 'OVV': 'Yes', + 'PN': 'Yes', + 'PSR': 'Yes', + 'R': 'Yes', + 'RPHS': 'Yes', + 'RR(B)': 'Yes', + 'RRAB': 'Yes', + 'RRC': 'Yes', + 'SD': 'Yes', + 'SNIc-pec': 'Yes', + 'SRA': 'Yes', + 'SRB': 'Yes', + 'SRC': 'Yes', + 'SRD': 'Yes', + 'SRS': 'Yes', + 'SSO': 'Yes', + 'TDE': 'Yes', + 'UVN': 'Yes', + 'WD': 'Yes', + 'WR(1)': 'Yes', + 'X': 'Yes', + 'XF': 'Yes', + 'XI': 'Yes', + 'XJ': 'Yes', + 'XND': 'Yes', + 'XNG': 'Yes', + 'XP': 'Yes', + 'XPR': 'Yes', + 'XPRM': 'Yes', + 'XRM': 'Yes', + '_varstar_': 'No', + 'ac': 'Yes', + 'aii': 'Yes', + 'alg': 'Yes', + 'am': 'Yes', + 'amcvn': 'Yes', + 'ast': 'Yes', + 'b': 'Yes', + 'bc': 'Yes', + 'be': 'Yes', + 'bl': 'Yes', + 'bly': 'Yes', + 'by': 'Yes', + 'c': 'Yes', + 'ca': 'Yes', + 'cc': 'Yes', + 'cm': 'Yes', + 'cn': 'Yes', + 'comet': 'Yes', + 'cp': 'Yes', + 'cv': 'Yes', + 'd': 'Yes', + 'dc': 'Yes', + 'dqh': 'Yes', + 'ds': 'Yes', + 'dsm': 'Yes', + 'eclipsing': 'Yes', + 'ell': 'Yes', + 'er': 'Yes', + 'ev': 'Yes', + 'fk': 'Yes', + 'fsrq': 'Yes', + 'fuor': 'Yes', + 'gc': 'Yes', + 'gd': 'Yes', + 'grb': 'Yes', + 'gw': 'Yes', + 'hae': 'Yes', + 'haebe': 'Yes', + 'hpm': 'Yes', + 'iib': 'Yes', + 'iii': 'Yes', + 'iil': 'Yes', + 'iin': 'Yes', + 'iip': 'Yes', + 'k': 'Yes', + 'lamb': 'Yes', + 'lboo': 'Yes', + 'lgrb': 'Yes', + 'maser': 'Yes', + 'mira': 'Yes', + 'moving': 'Yes', + 'msv': 'Yes', + 'n-l': 'Yes', + 'nov': 'Yes', + 'ov': 'Yes', + 'p': 'Yes', + 'pi': 'Yes', + 'piic': 'Yes', + 'plsr': 'Yes', + 'psys': 'Yes', + 'puls': 'Yes', + 'pvsg': 'Yes', + 'pvt': 'Yes', + 'pwd': 'Yes', + 'qso': 'Yes', + 'rcb': 'Yes', + 'rn': 'Yes', + 'rot': 'Yes', + 'rr-ab': 'Yes', + 'rr-c': 'Yes', + 'rr-cl': 'Yes', + 'rr-d': 'Yes', + 'rr-e': 'Yes', + 'rr-lyr': 'Yes', + 'rscvn': 'Yes', + 'rv': 'Yes', + 'rvc': 'Yes', + 'rvv': 'Yes', + 'sd': 'Yes', + 'sdbv': 'Yes', + 'sdc': 'Yes', + 'sdorad': 'Yes', + 'seyf': 'Yes', + 'sgrb': 'Yes', + 'shs': 'Yes', + 'sne': 'Yes', + 'spb': 'Yes', + 'sr-a': 'Yes', + 'sr-b': 'Yes', + 'sr-c': 'Yes', + 'sr-d': 'Yes', + 'sreg': 'Yes', + 'srgrb': 'Yes', + 'ssc': 'Yes', + 'su': 'Yes', + 'sv': 'Yes', + 'sw': 'Yes', + 'sx': 'Yes', + 'sxari': 'Yes', + 'tia': 'Yes', + 'tiapec': 'Yes', + 'tiasc': 'Yes', + 'tib': 'Yes', + 'tic': 'Yes', + 'ticpec': 'Yes', + 'tsni': 'Yes', + 'tsnii': 'Yes', + 'tt': 'Yes', + 'ttc': 'Yes', + 'ttw': 'Yes', + 'ug': 'Yes', + 'unclass': 'Yes', + 'uv': 'Yes', + 'ux': 'Yes', + 'vs': 'Yes', + 'vy': 'Yes', + 'wr': 'Yes', + 'wu': 'Yes', + 'wv': 'Yes', + 'wz': 'Yes', + 'xrb': 'Yes', + 'xrbin': 'Yes', + 'zc': 'Yes', + 'zz': 'Yes', + 'zzh': 'Yes', + 'zzhe': 'Yes', + 'zzheii': 'Yes'}, + 'shortname_ispublic': {'ACVO': 'No', + 'AGN': 'Yes', + 'AR': 'No', + 'BCEPS': 'No', + 'BL-Lac': 'Yes', + 'BLZ': 'Yes', + 'CP': 'No', + 'CW': 'No', + 'CWA': 'No', + 'CWB': 'No', + 'D': 'No', + 'DCEP': 'No', + 'DCEPS': 'No', + 'DM': 'No', + 'DS': 'No', + 'DSCTC': 'No', + 'DrkMatterA': 'Yes', + 'E': 'No', + 'ELL': 'No', + 'EP': 'No', + 'EWa': 'No', + 'EWs': 'No', + 'Eclipsing': 'No', + 'GS': 'No', + 'GalNuclei': 'Yes', + 'I': 'No', + 'IA': 'No', + 'IB': 'No', + 'IN(YY)': 'No', + 'INA': 'No', + 'INB': 'No', + 'IS': 'No', + 'ISA': 'No', + 'ISB': 'No', + 'K': 'No', + 'KE': 'No', + 'KW': 'No', + 'L': 'No', + 'LB': 'No', + 'LC': 'No', + 'LPB': 'No', + 'ML': 'Yes', + 'NA': 'No', + 'NB': 'No', + 'NC': 'No', + 'NEW': 'No', + 'Nonstellar': 'Yes', + 'OVV': 'Yes', + 'PN': 'No', + 'PSR': 'No', + 'R': 'No', + 'RPHS': 'No', + 'RR(B)': 'No', + 'RRAB': 'No', + 'RRC': 'No', + 'SD': 'No', + 'SNIc-pec': 'No', + 'SRA': 'No', + 'SRB': 'No', + 'SRC': 'No', + 'SRD': 'No', + 'SRS': 'No', + 'SSO': 'Yes', + 'TDE': 'Yes', + 'UVN': 'No', + 'WD': 'No', + 'WR(1)': 'No', + 'X': 'No', + 'XF': 'No', + 'XI': 'No', + 'XJ': 'No', + 'XND': 'No', + 'XNG': 'No', + 'XP': 'No', + 'XPR': 'No', + 'XPRM': 'No', + 'XRM': 'No', + '_varstar_': 'No', + 'ac': 'Yes', + 'aii': 'Yes', + 'alg': 'Yes', + 'am': 'Yes', + 'amcvn': 'Yes', + 'ast': 'Yes', + 'b': 'Yes', + 'bc': 'Yes', + 'be': 'Yes', + 'bl': 'Yes', + 'bly': 'Yes', + 'by': 'Yes', + 'c': 'Yes', + 'ca': 'Yes', + 'cc': 'Yes', + 'cm': 'Yes', + 'cn': 'Yes', + 'comet': 'Yes', + 'cp': 'Yes', + 'cv': 'Yes', + 'd': 'Yes', + 'dc': 'Yes', + 'dqh': 'Yes', + 'ds': 'Yes', + 'dsm': 'Yes', + 'eclipsing': 'No', + 'ell': 'Yes', + 'er': 'Yes', + 'ev': 'Yes', + 'fk': 'Yes', + 'fsrq': 'Yes', + 'fuor': 'Yes', + 'gc': 'Yes', + 'gd': 'Yes', + 'grb': 'Yes', + 'gw': 'Yes', + 'hae': 'Yes', + 'haebe': 'Yes', + 'hpm': 'Yes', + 'iib': 'Yes', + 'iii': 'Yes', + 'iil': 'Yes', + 'iin': 'Yes', + 'iip': 'Yes', + 'k': 'No', + 'lamb': 'Yes', + 'lboo': 'Yes', + 'lgrb': 'Yes', + 'maser': 'Yes', + 'mira': 'Yes', + 'moving': 'Yes', + 'msv': 'Yes', + 'n-l': 'Yes', + 'nov': 'Yes', + 'ov': 'Yes', + 'p': 'Yes', + 'pi': 'Yes', + 'piic': 'Yes', + 'plsr': 'Yes', + 'psys': 'Yes', + 'puls': 'Yes', + 'pvsg': 'Yes', + 'pvt': 'Yes', + 'pwd': 'Yes', + 'qso': 'Yes', + 'rcb': 'Yes', + 'rn': 'Yes', + 'rot': 'Yes', + 'rr-ab': 'Yes', + 'rr-c': 'Yes', + 'rr-cl': 'Yes', + 'rr-d': 'Yes', + 'rr-e': 'Yes', + 'rr-lyr': 'Yes', + 'rscvn': 'Yes', + 'rv': 'Yes', + 'rvc': 'Yes', + 'rvv': 'Yes', + 'sd': 'No', + 'sdbv': 'Yes', + 'sdc': 'Yes', + 'sdorad': 'Yes', + 'seyf': 'Yes', + 'sgrb': 'Yes', + 'shs': 'Yes', + 'sne': 'Yes', + 'spb': 'Yes', + 'sr-a': 'Yes', + 'sr-b': 'Yes', + 'sr-c': 'Yes', + 'sr-d': 'Yes', + 'sreg': 'Yes', + 'srgrb': 'Yes', + 'ssc': 'Yes', + 'su': 'Yes', + 'sv': 'Yes', + 'sw': 'Yes', + 'sx': 'Yes', + 'sxari': 'Yes', + 'tia': 'Yes', + 'tiapec': 'Yes', + 'tiasc': 'Yes', + 'tib': 'Yes', + 'tic': 'Yes', + 'ticpec': 'Yes', + 'tsni': 'Yes', + 'tsnii': 'Yes', + 'tt': 'Yes', + 'ttc': 'Yes', + 'ttw': 'Yes', + 'ug': 'Yes', + 'unclass': 'Yes', + 'uv': 'Yes', + 'ux': 'Yes', + 'vs': 'Yes', + 'vy': 'Yes', + 'wr': 'Yes', + 'wu': 'Yes', + 'wv': 'Yes', + 'wz': 'Yes', + 'xrb': 'Yes', + 'xrbin': 'Yes', + 'zc': 'Yes', + 'zz': 'Yes', + 'zzh': 'Yes', + 'zzhe': 'Yes', + 'zzheii': 'Yes'}, + 'shortname_longname': {'ACVO': 'Alpha2 CVn - Rapily Oscillating', + 'AGN': 'Active Galactic Nuclei', + 'AR': 'Detached - AR Lacertae', + 'BCEPS': 'Beta Cephei - Short Period', + 'BL-Lac': 'BL Lac', + 'BLZ': 'Blazar', + 'CP': 'Chemically Peculiar Stars', + 'CW': 'W Virginis', + 'CWA': 'W Virginis - Long Period', + 'CWB': 'W Virigins - Short Period', + 'D': 'Detached', + 'DCEP': 'Delta Cep', + 'DCEPS': 'Delta Cep - Symmetrical', + 'DM': 'Detached - Main Sequence', + 'DS': 'Detached - With Subgiant', + 'DSCTC': 'Delta Scuti - Low Amplitude', + 'DrkMatterA': 'Dark Matter Anniliation Event', + 'E': 'Eclipsing Binary Systems', + 'ELL': 'Rotating Ellipsoidal', + 'EP': 'Eclipsed by Planets', + 'EWa': 'W Ursae Majoris- a', + 'EWs': 'W Ursae Majoris- s', + 'Eclipsing': 'Close Binary Eclipsing Systems', + 'GS': 'Systems with Supergiant(s)', + 'GalNuclei': 'Galaxy Nuclei ', + 'I': 'Irregular', + 'IA': 'Irregular Early O-A', + 'IB': 'Irregular Intermediate F-M', + 'IN(YY)': 'Orion with Absorption', + 'INA': 'Orion Early Types (B-A or Ae)', + 'INB': 'Orion Intermediate Types (F-M or Fe-Me)', + 'IS': 'Rapid Irregular', + 'ISA': 'Rapid Irregular Early Types (B-A or Ae)', + 'ISB': 'Rapid Irregular Intermediate to Late (F-M and Fe-Me)', + 'K': 'Contact Systems', + 'KE': 'Contact Systems - Early (O-A)', + 'KW': 'Contact Systems - W Ursa Majoris', + 'L': 'Slow Irregular', + 'LB': 'Slow Irregular - Late Spectral Type (K, M, C, S)', + 'LC': 'Irregular Supergiants', + 'LPB': 'Long Period B', + 'ML': 'Microlensing Event', + 'NA': 'Fast Novae', + 'NB': 'Slow Novae', + 'NC': 'Very Slow Novae', + 'NEW': 'New Variability Types', + 'Nonstellar': 'Variable Sources (Non-stellar)', + 'OVV': 'Optically Violent Variable Quasar (OVV)', + 'PN': 'Systems with Planetary Nebulae', + 'PSR': 'Optically Variable Pulsars', + 'R': 'Close Binary with Reflection', + 'RPHS': 'Very Rapidly Pulsating Hot (subdwarf B)', + 'RR(B)': 'RR Lyrae - Dual Mode', + 'RRAB': 'RR Lyrae - Asymmetric', + 'RRC': 'RR Lyrae - Near Symmetric', + 'SD': 'Semidetached', + 'SNIc-pec': 'Peculiar Type Ic Supernovae', + 'SRA': 'Semiregular - Persistent Periodicity', + 'SRB': 'Semiregular - Poorly Defined Periodicity', + 'SRC': 'Semiregular Supergiants', + 'SRD': 'Semiregular F, G, or K', + 'SRS': 'Semiregular Pulsating Red Giants', + 'SSO': 'Solar System Object', + 'TDE': 'Tidal Disruption Event', + 'UVN': 'Flaring Orion Variables', + 'WD': 'Systems with White Dwarfs', + 'WR(1)': 'Systems with Wolf-Rayet Stars', + 'X': 'X-Ray Sources, Optically Variable', + 'XF': 'Fluctuating X-Ray Systems', + 'XI': 'X-ray Irregulars', + 'XJ': 'X-Ray Binaries with Jets', + 'XND': 'X-Ray, Novalike', + 'XNG': 'X-Ray, Novalike with Early Type supergiant or giant', + 'XP': 'X-Ray Pulsar', + 'XPR': 'X-Ray Pulsar, with Reflection', + 'XPRM': 'X-Ray Pulsar with late-type dwarf', + 'XRM': 'X-Ray with late-type dwarf, un-observed pulsar', + '_varstar_': '_varstar_', + 'ac': 'Alpha Cygni', + 'aii': 'Alpha2 Canum Venaticorum', + 'alg': 'Algol (Beta Persei)', + 'am': 'AM Herculis (True Polar)', + 'amcvn': 'AM Canum Venaticorum', + 'ast': 'Asteroid', + 'b': 'Binary', + 'bc': 'Beta Cephei', + 'be': 'Be Star', + 'bl': 'Short period (BL Herculis)', + 'bly': 'Beta Lyrae', + 'by': 'BY Draconis', + 'c': 'Cepheid Variable', + 'ca': 'Anomolous Cepheid', + 'cc': 'Core Collapse Supernovae', + 'cm': 'Multiple Mode Cepheid', + 'cn': 'Classical Novae', + 'comet': 'Comet', + 'cp': 'Chemically Peculiar Stars', + 'cv': 'Cataclysmic Variable', + 'd': 'Detached', + 'dc': 'Classical Cepheid', + 'dqh': 'DQ Herculis (Intermdiate Polars)', + 'ds': 'Delta Scuti', + 'dsm': 'Delta Scuti - Multiple Modes', + 'eclipsing': 'Close Binary Eclipsing Systems', + 'ell': 'Ellipsoidal', + 'er': 'ER Ursae Majoris', + 'ev': 'Eruptive Variable', + 'fk': 'FK Comae Berenices', + 'fsrq': 'Flat Spectrum Radio Quasar', + 'fuor': 'FU Orionis', + 'gc': 'Gamma Cassiopeiae', + 'gd': 'Gamma Doradus', + 'grb': 'Gamma Ray Burst', + 'gw': 'GW Virginis', + 'hae': 'Herbig AE', + 'haebe': 'Herbig AE/BE Star', + 'hpm': 'High Proper Motion Star', + 'iib': 'Type II b Supernova', + 'iii': 'Three or More Stars', + 'iil': 'Type II L supernova', + 'iin': 'Type II N Supernova', + 'iip': 'Type II P supernova', + 'k': 'Contact Systems', + 'lamb': 'Lambda Eridani', + 'lboo': 'Lambda Bootis Variable', + 'lgrb': 'Long GRB', + 'maser': 'Maser', + 'mira': 'Mira', + 'moving': 'Moving Source', + 'msv': 'Multiple Star Variables', + 'n-l': 'Novalike', + 'nov': 'Novae', + 'ov': 'Orion Variable', + 'p': 'Polars', + 'pi': 'Pair Instability Supernovae', + 'piic': 'Population II Cepheid', + 'plsr': 'Pulsar', + 'psys': 'Systems with Planets', + 'puls': 'Pulsating Variable', + 'pvsg': 'Periodically variable supergiants', + 'pvt': 'PV Telescopii', + 'pwd': 'Pulsating White Dwarf', + 'qso': 'QSO', + 'rcb': 'R Coronae Borealis', + 'rn': 'Recurrent Novae', + 'rot': 'Rotating Variable', + 'rr-ab': 'RR Lyrae, Fundamental Mode', + 'rr-c': 'RR Lyrae, First Overtone', + 'rr-cl': 'RR Lyrae, Closely Spaced Modes', + 'rr-d': 'RR Lyrae, Double Mode', + 'rr-e': 'RR Lyrae, Second Overtone', + 'rr-lyr': 'RR Lyrae', + 'rscvn': 'RS Canum Venaticorum', + 'rv': 'RV Tauri', + 'rvc': 'RV Tauri, Constant Mean Brightness', + 'rvv': 'RV Tauri, Variable Mean Brightness', + 'sd': 'Semidetached', + 'sdbv': 'Pulsating subdwarf B-stars', + 'sdc': 'Symmetrical', + 'sdorad': 'S Doradus', + 'seyf': 'Seyfert', + 'sgrb': 'Short GRB', + 'shs': 'Shell Star', + 'sne': 'Supernovae', + 'spb': 'Slowly Pulsating B-stars', + 'sr-a': 'SRa (Z Aquarii)', + 'sr-b': 'SRb', + 'sr-c': 'SRc', + 'sr-d': 'SRd', + 'sreg': 'Semiregular Pulsating Variable', + 'srgrb': 'Soft Gamma Ray Repeater', + 'ssc': 'SS Cygni', + 'su': 'SU Ursae Majoris', + 'sv': 'Symbiotic Variable', + 'sw': 'SW Sextantis', + 'sx': 'SX Phoenicis', + 'sxari': 'SX Arietis', + 'tia': 'Type Ia Supernovae', + 'tiapec': 'Peculiar Type Ia SN', + 'tiasc': 'Super-chandra Type Ia SN', + 'tib': 'Type Ib Supernovae', + 'tic': 'Type Ic Supernovae', + 'ticpec': 'Type Ic peculiar', + 'tsni': 'Type I Supernovae', + 'tsnii': 'Type II Supernovae', + 'tt': 'T Tauri', + 'ttc': 'Classical T Tauri', + 'ttw': 'Weak-lined T Tauri', + 'ug': 'U Geminorum', + 'unclass': 'Unclassified', + 'uv': 'UV Ceti Variable', + 'ux': 'UX Ursae Majoris', + 'vs': 'Variable Stars [Alt]', + 'vy': 'VY Scl', + 'wr': 'Wolf-Rayet', + 'wu': 'W Ursae Majoris', + 'wv': 'Long Period (W Virginis)', + 'wz': 'WZ Sagittae', + 'xrb': 'X Ray Burster', + 'xrbin': 'X Ray Binary', + 'zc': 'Z Camelopardalis', + 'zz': 'ZZ Ceti', + 'zzh': 'ZZ Ceti, H Absorption Only', + 'zzhe': 'ZZ Ceti, He Absorption Only', + 'zzheii': 'ZZ Ceti, With He-II'}, + 'shortname_nsrcs': {'ACV': 0, + 'ACVO': 0, + 'ACYG': 0, + 'AGN': 57, + 'AM': 0, + 'AR': 0, + 'BCEP': 0, + 'BCEPS': 0, + 'BE': 0, + 'BL-Lac': 46, + 'BLBOO': 0, + 'BLZ': 24, + 'BY': 0, + 'CEP': 5, + 'CEP(B)': 0, + 'CP': 0, + 'CW': 0, + 'CWA': 0, + 'CWB': 0, + 'Cataclysmic': 0, + 'Chemically Peculiar Stars': 0, + 'D': 2, + 'DCEP': 0, + 'DCEPS': 0, + 'DM': 0, + 'DQ': 0, + 'DS': 0, + 'DSCT': 149, + 'DSCTC': 0, + 'DW': 0, + 'DrkMatterA': 0, + 'E': 3, + 'EA': 260, + 'EB': 67, + 'ELL': 0, + 'EP': 0, + 'EW': 891, + 'EWa': 0, + 'EWs': 0, + 'Eclipsing': 0, + 'Eruptive': 0, + 'FKCOM': 0, + 'FU': 0, + 'GCAS': 0, + 'GCVS': 712, + 'GDOR': 15, + 'GRB': 0, + 'GS': 0, + 'GalNuclei': 0, + 'I': 0, + 'IA': 0, + 'IB': 0, + 'IN': 0, + 'IN(YY)': 0, + 'INA': 0, + 'INB': 0, + 'INT': 0, + 'IS': 0, + 'ISA': 0, + 'ISB': 0, + 'K': 0, + 'KE': 0, + 'KW': 0, + 'L': 0, + 'LB': 0, + 'LC': 1, + 'LPB': 1, + 'LSB': 0, + 'M': 11, + 'ML': 658, + 'N': 1, + 'NA': 0, + 'NB': 0, + 'NC': 0, + 'NEW': 0, + 'NL': 3, + 'NR': 0, + 'Nonstellar': 0, + 'OVV': 0, + 'PN': 0, + 'PSR': 0, + 'PVTEL': 0, + 'Polars': 0, + 'Pulsating': 1, + 'R': 0, + 'RCB': 0, + 'RPHS': 0, + 'RR': 9, + 'RR(B)': 0, + 'RRAB': 31, + 'RRC': 15, + 'RRcl': 0, + 'RRe': 0, + 'RS': 0, + 'RV': 0, + 'RVA': 0, + 'RVB': 0, + 'Rotating': 0, + 'SD': 0, + 'SDOR': 0, + 'SGR': 0, + 'SHB': 0, + 'SN': 0, + 'SNI': 0, + 'SNII': 0, + 'SNIIL': 0, + 'SNIIN': 1, + 'SNIIP': 0, + 'SNIa': 0, + 'SNIa-pec': 0, + 'SNIa-sc': 0, + 'SNIb': 0, + 'SNIc': 0, + 'SNIc-pec': 0, + 'SR': 0, + 'SRA': 0, + 'SRB': 0, + 'SRC': 0, + 'SRD': 0, + 'SRS': 14, + 'SSO': 0, + 'SXARI': 0, + 'SXPHE': 7, + 'TDE': 0, + 'UG': 3, + 'UGSS': 0, + 'UGSU': 0, + 'UGZ': 1, + 'UV': 0, + 'UVN': 0, + 'UXUma': 0, + 'WD': 0, + 'WR': 173, + 'WR(1)': 0, + 'X': 0, + 'XB': 0, + 'XF': 0, + 'XI': 0, + 'XJ': 0, + 'XND': 0, + 'XNG': 0, + 'XP': 0, + 'XPR': 0, + 'XPRM': 0, + 'XRM': 0, + 'ZAND': 0, + 'ZZ': 0, + 'ZZA': 0, + 'ZZB': 0, + 'ZZO': 0, + '_varstar_': 0, + 'ac': 0, + 'aii': 81, + 'alg': 732, + 'am': 5, + 'amcvn': 0, + 'ast': 93, + 'b': 53, + 'bc': 84, + 'be': 47, + 'bl': 14, + 'bly': 403, + 'by': 0, + 'c': 329, + 'ca': 7, + 'cc': 58, + 'cm': 202, + 'cn': 1, + 'comet': 3, + 'cp': 49, + 'cv': 193, + 'd': 2270, + 'dc': 865, + 'dqh': 5, + 'ds': 845, + 'dsm': 1, + 'eclipsing': 2934, + 'ell': 17, + 'er': 0, + 'ev': 0, + 'fk': 1, + 'fsrq': 3, + 'fuor': 4, + 'gc': 0, + 'gd': 73, + 'grb': 0, + 'gw': 2, + 'hae': 1, + 'haebe': 28, + 'hpm': 4, + 'iib': 27, + 'iii': 0, + 'iil': 0, + 'iin': 111, + 'iip': 74, + 'k': 2758, + 'lamb': 1, + 'lboo': 26, + 'lgrb': 1, + 'maser': 1, + 'mira': 3048, + 'moving': 0, + 'msv': 0, + 'n-l': 3, + 'nov': 3, + 'ov': 0, + 'p': 0, + 'pi': 0, + 'piic': 41, + 'plsr': 0, + 'psys': 3, + 'puls': 250, + 'pvsg': 0, + 'pvt': 0, + 'pwd': 3, + 'qso': 6307, + 'rcb': 2, + 'rn': 0, + 'rot': 4, + 'rr-ab': 1706, + 'rr-c': 452, + 'rr-cl': 13, + 'rr-d': 168, + 'rr-e': 0, + 'rr-lyr': 16, + 'rscvn': 1, + 'rv': 11, + 'rvc': 1, + 'rvv': 0, + 'sd': 879, + 'sdbv': 0, + 'sdc': 53, + 'sdorad': 21, + 'seyf': 0, + 'sgrb': 0, + 'shs': 0, + 'sne': 619, + 'spb': 0, + 'sr-a': 2, + 'sr-b': 2, + 'sr-c': 2, + 'sr-d': 3, + 'sreg': 76, + 'srgrb': 0, + 'ssc': 3, + 'su': 3, + 'sv': 0, + 'sw': 1, + 'sx': 28, + 'sxari': 0, + 'tia': 2176, + 'tiapec': 35, + 'tiasc': 0, + 'tib': 68, + 'tic': 124, + 'ticpec': 5, + 'tsni': 48, + 'tsnii': 749, + 'tt': 32, + 'ttc': 2, + 'ttw': 0, + 'ug': 3, + 'unclass': 61200, + 'uv': 0, + 'ux': 2, + 'vs': 774, + 'vy': 1, + 'wr': 219, + 'wu': 1075, + 'wv': 35, + 'wz': 0, + 'xrb': 0, + 'xrbin': 14, + 'zc': 3, + 'zz': 0, + 'zzh': 0, + 'zzhe': 0, + 'zzheii': 0}, + 'shortname_parent_id': {'ACVO': 58, + 'AGN': 109, + 'AR': 80, + 'BCEPS': 25, + 'BL-Lac': 256, + 'BLZ': 110, + 'CP': 0, + 'CW': 23, + 'CWA': 29, + 'CWB': 29, + 'D': 80, + 'DCEP': 23, + 'DCEPS': 32, + 'DM': 92, + 'DS': 92, + 'DSCTC': 34, + 'DrkMatterA': 107, + 'E': 80, + 'ELL': 57, + 'EP': 129, + 'EWa': 85, + 'EWs': 85, + 'Eclipsing': 1, + 'GS': 80, + 'GalNuclei': 107, + 'I': 2, + 'IA': 2, + 'IB': 2, + 'IN(YY)': 8, + 'INA': 8, + 'INB': 8, + 'IS': 2, + 'ISA': 2, + 'ISB': 13, + 'K': 80, + 'KE': 96, + 'KW': 96, + 'L': 23, + 'LB': 36, + 'LC': 36, + 'LPB': 129, + 'ML': 107, + 'NA': 66, + 'NB': 66, + 'NC': 66, + 'NEW': 1, + 'Nonstellar': 0, + 'OVV': 256, + 'PN': 80, + 'PSR': 57, + 'R': 129, + 'RPHS': 129, + 'RR(B)': 41, + 'RRAB': 41, + 'RRC': 41, + 'SD': 80, + 'SNIc-pec': 102, + 'SRA': 48, + 'SRB': 48, + 'SRC': 48, + 'SRD': 48, + 'SRS': 129, + 'SSO': 107, + 'TDE': 109, + 'UVN': 2, + 'WD': 80, + 'WR(1)': 80, + 'X': 1, + 'XF': 117, + 'XI': 117, + 'XJ': 117, + 'XND': 117, + 'XNG': 117, + 'XP': 117, + 'XPR': 124, + 'XPRM': 124, + 'XRM': 124, + 'ac': 203, + 'aii': 240, + 'alg': 248, + 'am': 165, + 'amcvn': 160, + 'ast': 275, + 'b': 247, + 'bc': 203, + 'be': 193, + 'bl': 216, + 'bly': 248, + 'by': 240, + 'c': 203, + 'ca': 217, + 'cc': 180, + 'cm': 217, + 'cn': 158, + 'comet': 275, + 'cp': 154, + 'cv': 154, + 'd': 279, + 'dc': 217, + 'dqh': 165, + 'ds': 203, + 'dsm': 211, + 'eclipsing': 154, + 'ell': 240, + 'er': 169, + 'ev': 154, + 'fk': 240, + 'fsrq': 256, + 'fuor': 195, + 'gc': 188, + 'gd': 203, + 'grb': 157, + 'gw': 209, + 'hae': 197, + 'haebe': 188, + 'hpm': 275, + 'iib': 185, + 'iii': 247, + 'iil': 185, + 'iin': 185, + 'iip': 185, + 'k': 279, + 'lamb': 198, + 'lboo': 203, + 'lgrb': 176, + 'maser': 107, + 'mira': 203, + 'moving': 0, + 'msv': 154, + 'n-l': 158, + 'nov': 157, + 'ov': 188, + 'p': 158, + 'pi': 181, + 'piic': 203, + 'plsr': 240, + 'psys': 248, + 'puls': 154, + 'pvsg': 154, + 'pvt': 203, + 'pwd': 203, + 'qso': 110, + 'rcb': 188, + 'rn': 158, + 'rot': 154, + 'rr-ab': 206, + 'rr-c': 206, + 'rr-cl': 206, + 'rr-d': 206, + 'rr-e': 206, + 'rr-lyr': 203, + 'rscvn': 188, + 'rv': 203, + 'rvc': 215, + 'rvv': 215, + 'sd': 279, + 'sdbv': 203, + 'sdc': 238, + 'sdorad': 188, + 'seyf': 110, + 'sgrb': 176, + 'shs': 193, + 'sne': 157, + 'spb': 203, + 'sr-a': 214, + 'sr-b': 214, + 'sr-c': 214, + 'sr-d': 214, + 'sreg': 203, + 'srgrb': 176, + 'ssc': 168, + 'su': 168, + 'sv': 157, + 'sw': 160, + 'sx': 203, + 'sxari': 240, + 'tia': 180, + 'tiapec': 182, + 'tiasc': 182, + 'tib': 181, + 'tic': 181, + 'ticpec': 184, + 'tsni': 180, + 'tsnii': 181, + 'tt': 195, + 'ttc': 200, + 'ttw': 200, + 'ug': 158, + 'unclass': 154, + 'uv': 188, + 'ux': 160, + 'vs': 0, + 'vy': 160, + 'wr': 188, + 'wu': 248, + 'wv': 216, + 'wz': 169, + 'xrb': 260, + 'xrbin': 248, + 'zc': 168, + 'zz': 209, + 'zzh': 223, + 'zzhe': 223, + 'zzheii': 223}, + 'shortname_parentshortname': {'ACVO': 'aii', + 'AGN': 'GalNuclei', + 'AR': 'Eclipsing', + 'BCEPS': 'bc', + 'BL-Lac': 'BLZ', + 'BLZ': 'AGN', + 'CP': '_varstar_', + 'CW': 'puls', + 'CWA': 'CW', + 'CWB': 'CW', + 'D': 'Eclipsing', + 'DCEP': 'puls', + 'DCEPS': 'DCEP', + 'DM': 'D', + 'DS': 'D', + 'DSCTC': 'ds', + 'DrkMatterA': 'Nonstellar', + 'E': 'Eclipsing', + 'ELL': 'rot', + 'EP': 'NEW', + 'EWa': 'wu', + 'EWs': 'wu', + 'Eclipsing': 'vs', + 'GS': 'Eclipsing', + 'GalNuclei': 'Nonstellar', + 'I': 'ev', + 'IA': 'ev', + 'IB': 'ev', + 'IN(YY)': 'ov', + 'INA': 'ov', + 'INB': 'ov', + 'IS': 'ev', + 'ISA': 'ev', + 'ISB': 'IS', + 'K': 'Eclipsing', + 'KE': 'K', + 'KW': 'K', + 'L': 'puls', + 'LB': 'L', + 'LC': 'L', + 'LPB': 'NEW', + 'ML': 'Nonstellar', + 'NA': 'nov', + 'NB': 'nov', + 'NC': 'nov', + 'NEW': 'vs', + 'Nonstellar': '_varstar_', + 'OVV': 'BLZ', + 'PN': 'Eclipsing', + 'PSR': 'rot', + 'R': 'NEW', + 'RPHS': 'NEW', + 'RR(B)': 'rr-lyr', + 'RRAB': 'rr-lyr', + 'RRC': 'rr-lyr', + 'SD': 'Eclipsing', + 'SNIc-pec': 'tic', + 'SRA': 'sreg', + 'SRB': 'sreg', + 'SRC': 'sreg', + 'SRD': 'sreg', + 'SRS': 'NEW', + 'SSO': 'Nonstellar', + 'TDE': 'GalNuclei', + 'UVN': 'ev', + 'WD': 'Eclipsing', + 'WR(1)': 'Eclipsing', + 'X': 'vs', + 'XF': 'X', + 'XI': 'X', + 'XJ': 'X', + 'XND': 'X', + 'XNG': 'X', + 'XP': 'X', + 'XPR': 'XP', + 'XPRM': 'XP', + 'XRM': 'XP', + 'ac': 'puls', + 'aii': 'rot', + 'alg': 'b', + 'am': 'p', + 'amcvn': 'n-l', + 'ast': 'moving', + 'b': 'msv', + 'bc': 'puls', + 'be': 'gc', + 'bl': 'piic', + 'bly': 'b', + 'by': 'rot', + 'c': 'puls', + 'ca': 'c', + 'cc': 'sne', + 'cm': 'c', + 'cn': 'nov', + 'comet': 'moving', + 'cp': 'vs', + 'cv': 'vs', + 'd': 'eclipsing', + 'dc': 'c', + 'dqh': 'p', + 'ds': 'puls', + 'dsm': 'ds', + 'eclipsing': 'vs', + 'ell': 'rot', + 'er': 'su', + 'ev': 'vs', + 'fk': 'rot', + 'fsrq': 'BLZ', + 'fuor': 'ov', + 'gc': 'ev', + 'gd': 'puls', + 'grb': 'cv', + 'gw': 'pwd', + 'hae': 'haebe', + 'haebe': 'ev', + 'hpm': 'moving', + 'iib': 'tsnii', + 'iii': 'msv', + 'iil': 'tsnii', + 'iin': 'tsnii', + 'iip': 'tsnii', + 'k': 'eclipsing', + 'lamb': 'be', + 'lboo': 'puls', + 'lgrb': 'grb', + 'maser': 'Nonstellar', + 'mira': 'puls', + 'moving': '_varstar_', + 'msv': 'vs', + 'n-l': 'nov', + 'nov': 'cv', + 'ov': 'ev', + 'p': 'nov', + 'pi': 'cc', + 'piic': 'puls', + 'plsr': 'rot', + 'psys': 'b', + 'puls': 'vs', + 'pvsg': 'vs', + 'pvt': 'puls', + 'pwd': 'puls', + 'qso': 'AGN', + 'rcb': 'ev', + 'rn': 'nov', + 'rot': 'vs', + 'rr-ab': 'rr-lyr', + 'rr-c': 'rr-lyr', + 'rr-cl': 'rr-lyr', + 'rr-d': 'rr-lyr', + 'rr-e': 'rr-lyr', + 'rr-lyr': 'puls', + 'rscvn': 'ev', + 'rv': 'puls', + 'rvc': 'rv', + 'rvv': 'rv', + 'sd': 'eclipsing', + 'sdbv': 'puls', + 'sdc': 'dc', + 'sdorad': 'ev', + 'seyf': 'AGN', + 'sgrb': 'grb', + 'shs': 'gc', + 'sne': 'cv', + 'spb': 'puls', + 'sr-a': 'sreg', + 'sr-b': 'sreg', + 'sr-c': 'sreg', + 'sr-d': 'sreg', + 'sreg': 'puls', + 'srgrb': 'grb', + 'ssc': 'ug', + 'su': 'ug', + 'sv': 'cv', + 'sw': 'n-l', + 'sx': 'puls', + 'sxari': 'rot', + 'tia': 'sne', + 'tiapec': 'tia', + 'tiasc': 'tia', + 'tib': 'cc', + 'tic': 'cc', + 'ticpec': 'tic', + 'tsni': 'sne', + 'tsnii': 'cc', + 'tt': 'ov', + 'ttc': 'tt', + 'ttw': 'tt', + 'ug': 'nov', + 'unclass': 'vs', + 'uv': 'ev', + 'ux': 'n-l', + 'vs': '_varstar_', + 'vy': 'n-l', + 'wr': 'ev', + 'wu': 'b', + 'wv': 'piic', + 'wz': 'su', + 'xrb': 'xrbin', + 'xrbin': 'b', + 'zc': 'ug', + 'zz': 'pwd', + 'zzh': 'zz', + 'zzhe': 'zz', + 'zzheii': 'zz'}} + +def parse_options(): + """ Deal with parsing command line options & --help. Return options object. + """ + parser = OptionParser(usage="usage: %prog cmd [options]") + + + +head_str = """ + + + + + + 6930531 + + Best positional information of the source + + + 323.47114731 + -0.79916734036 + + + 0.000277777777778 + 0.000277777777778 + + + + + + MJD + 0.0 + UTC + TOPOCENTER + + + + + + + + + +""" + +tail_str = """ + +
+
+
+
""" + + + +def generate_xml_str_using_ben_dat(dat_fpath): + """ Adapted from format_csv_getfeats.py + For converting Ben's generated RRLyrae/eclips lightcurve .dat files + + """ + import csv + + data_str_list = [] + + rows = csv.reader(open(dat_fpath), delimiter=' ') + + t_list = [] + m_list = [] + merr_list = [] + for i,row in enumerate(rows): + t = float(row[0]) + m = float(row[1]) + m_err = float(row[2]) + data_str = ' %lf%lf%lf' % \ + (i, t, m, m_err) + data_str_list.append(data_str) + t_list.append(t) + m_list.append(m) + merr_list.append(m_err) + + all_data_str = '\n'.join(data_str_list) + + out_xml = head_str + all_data_str + tail_str + + return out_xml + + + +def get_dat_arffstrs(dat_fpaths=[], percent_list=[], niters=1, include_header=True, + write_multiinfo_srcids=True, ParseNomadColorsList=None): + """ Adapted from: + - analysis_deboss_tcp_source_compare.py::perc_subset_worker() + - generate_weka_classifiers.py --train_mode : + spawn_off_arff_line_tasks() + + # TODO: might need to convert ids into 100000000 + ids + + # TODO: currently this generates xml-strings with features, + - we eventually want arff rows which can be classified + (ala generate_weka_classifiers.py --train_mode) + ... condense_task_results_and_form_arff() + + """ + import copy + import random + import io + sys.path.append(os.environ.get('TCP_DIR') + '/Software/feature_extract/MLData') + #sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + '/Software/feature_extract/Code/extractors')) + #print os.environ.get("TCP_DIR") + #import mlens3 + import arffify + + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract/Code')) + import db_importer + from data_cleaning import sigmaclip_sdict_ts + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract')) + from Code import generators_importers + + #out_arff_row_dict = {} + + master_list = [] + master_features_dict = {} + all_class_list = [] + master_classes_dict = {} + + new_srcid_list = [] + for dat_fpath in dat_fpaths: + + # TODO: here I form the xml string from dat file ala format_csv_getfeats.py + + new_xml_str = generate_xml_str_using_ben_dat(dat_fpath) + + #xml_str = open(xml_fpath).read() + #new_xml_str = ParseNomadColorsList.get_colors_for_srcid(xml_str=xml_str, srcid=tutor_src_id) + + signals_list = [] + gen_orig = generators_importers.from_xml(signals_list) + gen_orig.signalgen = {} + gen_orig.sig = db_importer.Source(xml_handle=new_xml_str, doplot=False, make_xml_if_given_dict=True) + gen_orig.sdict = gen_orig.sig.x_sdict + gen_orig.set_outputs() # this adds/fills self.signalgen[,multiband]{'input':{filled},'features':{empty},'inter':{empty}} + + signals_list_temp = [] + + try: + ### Do some sigma clipping (Ex: for ASAS data) + sigmaclip_sdict_ts(gen_orig.sig.x_sdict['ts'], sigma_low=4.0, sigma_high=4.0) + except: + continue # probably doesnt have a gen_orig.sig.x_sdict['ts'][]['m'] + + gen_temp = copy.deepcopy(gen_orig) + for perc in percent_list: + ### We generate several random, percent-subsampled vosource in order to include error info: + #if 1: + # i = niters # this should just be a single (integer) subset number/iteration index + #for i in range(niters): + for i in niters: + if write_multiinfo_srcids: + new_srcid = "%d_%2.2f_%d" % (src_id, perc, i) + else: + new_srcid = '%s' % (dat_fpath[dat_fpath.rfind("_") + 1:dat_fpath.rfind(".")]) + new_srcid_list.append(new_srcid) + + dbi_src = db_importer.Source(make_dict_if_given_xml=False) + + for band, band_dict in gen_orig.sig.x_sdict['ts'].items(): + if ":NOMAD" in band: + i_start = 0 + i_end = len(band_dict['m']) + else: + i_start = int(((len(band_dict['m'])+1) * (1 - perc)) * random.random()) + i_end = i_start + int(perc * (len(band_dict['m'])+1)) + gen_temp.sig.x_sdict['ts'][band]['m'] = band_dict['m'][i_start:i_end] + gen_temp.sig.x_sdict['ts'][band]['m_err'] = band_dict['m_err'][i_start:i_end] + gen_temp.sig.x_sdict['ts'][band]['t'] = band_dict['t'][i_start:i_end] + dbi_src.source_dict_to_xml(gen_temp.sig.x_sdict) + write_xml_str = dbi_src.xml_string + + signals_list = [] + gen = generators_importers.from_xml(signals_list) + gen.generate(xml_handle=write_xml_str) + gen.sig.add_features_to_xml_string(signals_list) + gen.sig.x_sdict['src_id'] = new_srcid + dbi_src.source_dict_to_xml(gen.sig.x_sdict) + + xml_fpath = dbi_src.xml_string + + a = arffify.Maker(search=[], skip_class=False, local_xmls=True, convert_class_abrvs_to_names=False, flag_retrieve_class_abrvs_from_TUTOR=False, dorun=False) + out_dict = a.generate_arff_line_for_vosourcexml(num=new_srcid, xml_fpath=xml_fpath) + + #out_arff_row_dict[(src_id, perc, i)] = out_dict # ??? TODO: just arff rows? + # dbi_src.xml_string + master_list.append(out_dict) + all_class_list.append(out_dict['class']) + master_classes_dict[out_dict['class']] = 0 + for feat_tup in out_dict['features']: + master_features_dict[feat_tup] = 0 # just make sure there is this key in the dict. 0 is filler + + master_features = master_features_dict.keys() + master_classes = master_classes_dict.keys() + a = arffify.Maker(search=[], skip_class=False, local_xmls=True, + convert_class_abrvs_to_names=False, + flag_retrieve_class_abrvs_from_TUTOR=False, + dorun=False, add_srcid_to_arff=True) + a.master_features = master_features + a.all_class_list = all_class_list + a.master_classes = master_classes + a.master_list = master_list + # # # TODO: ideally just the arff lines / strings will be used + # - although it might be nice to have a disk copy of the arff rows for record, passing to others. + fp_strio = io.StringIO() + a.write_arff(outfile=fp_strio, \ + remove_sparse_classes=True, \ + n_sources_needed_for_class_inclusion=1, + include_header=include_header)#, classes_arff_str='', remove_sparse_classes=False) + + arff_row_list = [] + out_dict = {} + arff_rows_str = fp_strio.getvalue() + + # See pairwise_classification.py 2550 + #Pairwise_Classification parse_arff(self, arff_has_ids=False, arff_has_classes=True, has_srcid=False, get_features=False): + """ + arff_rows = [] + for a_str in arff_rows_str.split('\n'): + if len(a_str) == 0: + continue + if a_str[0] == '@': + continue + if a_str[0] == '%': + continue + arff_rows.append(a_str) + + assert(len(all_class_list) == len(arff_rows)) + + for i, arff_row in enumerate(arff_rows): + class_name = all_class_list[i] + + if not out_dict.has_key(class_name): + out_dict[class_name] = {'srcid_list':[], + 'count':0, + 'arffrow_wo_classnames':[], + } + out_dict[class_name]['srcid_list'].append(new_srcid_list[i]) + out_dict[class_name]['count'] += 1 + out_dict[class_name]['arffrow_wo_classnames'].append( \ + arff_row[:arff_row.rindex("'", 0,arff_row.rindex("'")) - 1]) + + return out_dict # out_dict[class_name][arffrow_wo_classnames:[], count:1, srcid_list:[] ### exclude:'arffrow_with_classnames:[] + + """ + + return arff_rows_str + + +class Arff_Generation_Engine_Tasks: + """ Class contains methods that will be used for arff lines generation + """ + + def task_generate_feature_arff_lines(self, pars, dat_fpaths=[], include_header=True, + write_multiinfo_srcids=True, + ParseNomadColorsList=None): + """ Given a sourceid list, generate features and the resulting ARFF lines. + + """ + #perc_arr = array(list(arange(0.2, 0.6, 0.01))) + #'percent':[str(elem) for elem in perc_arr] + sub_perc_list = [1.0] + sub_iter_list = [1] + + arff_str = get_dat_arffstrs(dat_fpaths, sub_perc_list, sub_iter_list, + include_header=include_header, + write_multiinfo_srcids=write_multiinfo_srcids, + ParseNomadColorsList=ParseNomadColorsList) + arff_rows = [] + class_list = [] + for row in arff_str.split('\n'): + if len(row) == 0: + continue + elif row[:5] == '@data': + continue + elif row[:16] == '@ATTRIBUTE class': + class_str = row[row.rfind("{'") + 2: row.rfind("'}")] + class_list = class_str.split("','") + else: + arff_rows.append(row) + + return {'arff_rows':arff_rows, 'class_list':class_list} + + + +def master_ipython_arff_generation(pars={}, write_multiinfo_srcids=True, dat_fpaths=[]): + """ Main code which controls ipython nodes when generating + +This is the task which will be called on ipengines by this function: + +task_generate_feature_arff_lines(pars, srcid_list=[]) + + """ + + import datetime + import time + import cPickle + try: + from IPython.kernel import client + except: + pass + + mec = client.MultiEngineClient() + mec.reset(targets=mec.get_ids()) # Reset the namespaces of all engines + tc = client.TaskClient() + + mec_exec_str = """ +import sys, os +import copy +import matplotlib +matplotlib.use('agg') +sys.path.append(os.path.abspath('/home/pteluser/src/TCP/Software/ingest_tools')) +sys.path.append(os.path.abspath('/home/pteluser/src/TCP/Software/citris33')) +import arff_generation_master_using_generic_ts_data +ArffEngineTasks = arff_generation_master_using_generic_ts_data.Arff_Generation_Engine_Tasks() +""" + + print('before mec()') + #print mec_exec_str + #import pdb; pdb.set_trace() + engine_ids = mec.get_ids() + pending_result_dict = {} + for engine_id in engine_ids: + pending_result_dict[engine_id] = mec.execute(mec_exec_str, targets=[engine_id], block=False) + n_pending = len(pending_result_dict) + i_count = 0 + while n_pending > 0: + still_pending_dict = {} + for engine_id, pending_result in pending_result_dict.items(): + try: + result_val = pending_result.get_result(block=False) + except: + print("get_result() Except. Still pending on engine: %d" % (engine_id)) + still_pending_dict[engine_id] = pending_result + result_val = None # 20110105 added + if result_val is None: + print("Still pending on engine: %d" % (engine_id)) + still_pending_dict[engine_id] = pending_result + if i_count > 10: + mec.clear_pending_results() + pending_result_dict = {} + mec.reset(targets=still_pending_dict.keys()) + for engine_id in still_pending_dict.keys(): + pending_result_dict[engine_id] = mec.execute(mec_exec_str, targets=[engine_id], block=False) + ### + time.sleep(20) # hack + pending_result_dict = [] # hack + ### + i_count = 0 + else: + print("sleeping...") + time.sleep(5) + pending_result_dict = still_pending_dict + n_pending = len(pending_result_dict) + i_count += 1 + + print('after mec()') + time.sleep(5) # This may be needed, although mec() seems to wait for all the Ipython clients to finish + print('after sleep()') + #import pdb; pdb.set_trace() + + # todo: fill a dict and write to pickle: of srcid:xml_filepath + #srcid_list = pars['src_id'] + + #srcid_list_new = [] + task_id_list = [] + class_list = [] + + #for srcid in srcid_list[:4]: + #for srcid in srcid_list: + # srcid_list_new.append(int(srcid) + 100000000) + + ### 20110622: I believe this is just a quick run-through of code in non-parallel mode, for one source: + result_arff_list = [] + from get_colors_for_tutor_sources import Parse_Nomad_Colors_List + ParseNomadColorsList = Parse_Nomad_Colors_List(fpath='/home/pteluser/src/TCP/Data/best_nomad_src_list') + ArffEngineTasks = Arff_Generation_Engine_Tasks() + out_dict = ArffEngineTasks.task_generate_feature_arff_lines(pars, dat_fpaths=dat_fpaths[:1], include_header=True, write_multiinfo_srcids=write_multiinfo_srcids, ParseNomadColorsList=ParseNomadColorsList) + ### KLUDGE leave out the last row since it will be reprocessed below: + result_arff_list.extend(out_dict['arff_rows'][:-1]) + + + n_src_per_task = 10 # NOTE: is generating PSD(freq) plots within lightcurve.py, should use n_src_per_task = 1, and all tasks should finish.# for ALL_TUTOR, =1 ipcontroller uses 99% memory, so maybe =3? (NOTE: cant do =10 since some TUTOR sources fail) + + imin_list = range(0, len(dat_fpaths), n_src_per_task) + + for i_min in imin_list: + dat_sublist = dat_fpaths[i_min: i_min + n_src_per_task] + #print + ##### FOR DEBUGGING: + ##### - NOTE: will use up memory if run for ~100 iterations + #ArffEngineTasks = Arff_Generation_Engine_Tasks() + #out_dict = ArffEngineTasks.task_generate_feature_arff_lines(pars, dat_fpaths=dat_sublist, include_header=False, write_multiinfo_srcids=write_multiinfo_srcids) + #import pdb; pdb.set_trace() + #print + ##### + ### 20110106: This doesn't seem to solve the ipcontroller memory error, but works: + tc_exec_str = """ +tmp_stdout = sys.stdout +sys.stdout = open(os.devnull, 'w') +out_dict = ArffEngineTasks.task_generate_feature_arff_lines(pars, dat_fpaths=dat_fpaths, include_header=include_header, write_multiinfo_srcids=write_multiinfo_srcids) +sys.stdout.close() +sys.stdout = tmp_stdout + """ + if 1: + taskid = tc.run(client.StringTask(tc_exec_str, + push={'pars':pars, + 'dat_fpaths':dat_sublist, + 'include_header':False, + 'write_multiinfo_srcids':write_multiinfo_srcids}, + pull='out_dict', + retries=3)) + task_id_list.append(taskid) + ###for debugging: + #for a,b in inspect.getmembers(tc.get_task_result(taskid, block=False)): print a,b + #import pdb; pdb.set_trace() + #print + #import pdb; pdb.set_trace() + #### + #combo_results_dict = {} + dtime_pending_1 = None + while ((tc.queue_status()['scheduled'] > 0) or + (tc.queue_status()['pending'] > 0)): + tasks_to_pop = [] + for task_id in task_id_list: + temp = tc.get_task_result(task_id, block=False) + if temp is None: + continue + temp2 = temp.results + if temp2 is None: + continue + results = temp2.get('out_dict',None) + if results is None: + continue # skip some kind of NULL result + if len(results) > 0: + tasks_to_pop.append(task_id) + result_arff_list.extend(results['arff_rows']) + for a_class in results['class_list']: + if not a_class in class_list: + class_list.append(a_class) + #ipython_return_dict = results + #update_combo_results(combo_results_dict=combo_results_dict, + # ipython_return_dict=copy.deepcopy(ipython_return_dict)) + for task_id in tasks_to_pop: + task_id_list.remove(task_id) + + if ((tc.queue_status()['scheduled'] == 0) and + (tc.queue_status()['pending'] <= 64)): + if dtime_pending_1 is None: + dtime_pending_1 = datetime.datetime.now() + else: + now = datetime.datetime.now() + if ((now - dtime_pending_1) >= datetime.timedelta(seconds=300)): + print("dtime_pending=1 timeout break!") + break + print(tc.queue_status()) + print('Sleep... 20 in test_pairwise_on_citris33_ipython::master_ipython_R_classifiers()', datetime.datetime.utcnow()) + time.sleep(20) + # IN CASE THERE are still tasks which have not been pulled/retrieved: + for task_id in task_id_list: + temp = tc.get_task_result(task_id, block=False) + if temp is None: + continue + temp2 = temp.results + if temp2 is None: + continue + results = temp2.get('out_dict',None) + if results is None: + continue #skip some kind of NULL result + if len(results) > 0: + tasks_to_pop.append(task_id) + result_arff_list.extend(results['arff_rows']) + for a_class in results['class_list']: + if not a_class in class_list: + class_list.append(a_class) + #ipython_return_dict = results + #update_combo_results(combo_results_dict=combo_results_dict, + # ipython_return_dict=copy.deepcopy(ipython_return_dict)) + #### + return {'result_arff_list':result_arff_list, + 'class_list':class_list} + + + + +if __name__ == '__main__': + + pars = {'src_id':[], #deboss_srcid_list, #['148875', '148723', '148420', '149144', '149049'], #deboss_srcid_list,#['148875', '148723', '148420', '149144', '149049'], #deboss_srcid_list, #['149144', '149049', '149338', '149049', '149338','149182','149108'], + 'percent':[], #[str(elem) for elem in perc_arr], #[str(elem) for elem in arange(0.90, 1.0, 0.01)], # [str(elem) for elem in arange(0.58, 1.0, 0.01)]#[str(elem) for elem in arange(0.01, 1.01, 0.01)], #[str(elem) for elem in arange(0.8, 1.0, 0.10)], #['0.8', '0.86', '0.88', '0.9', '0.95', '1.0'], + 'niters':'7', #'5', #'6',#'12', # Not a list, string value, will be used to generate list: range(niters) + 'pairwise_classifier_pkl_fpath':"/home/pteluser/Dropbox/work/WEKAj48_dotastro_ge1srcs_period_nonper__exclude_non_debosscher/pairwise_classifier__debosscher_table3.pkl.gz", # This is just debosscher data + 'crossvalid_pairwise_classif_dirpath':'/global/home/users/dstarr/scratch/crossvalid/pairwise_scratch_20101109_4060nostratif_2qso', # NOTE: set to '' if want to do non-crossvalid-folded classifiers + 'taxonomy_prune_defs':{'terminating_classes':['mira', 'sreg', 'rv', 'dc', 'piic', 'cm', 'rr-ab', 'rr-c', 'rr-d', 'ds', 'lboo', 'bc', 'spb', 'gd', 'be', 'pvsg', 'CP', 'wr', 'tt', 'haebe', 'sdorad', 'ell', 'alg', 'bly', 'wu']}, + 'plot_symb':['o','s','v','d','<'], # ,'+','x','.', ,'>','^' + 'feat_distrib_colors':['#000000', + '#ff3366', + '#660000', + '#aa0000', + '#ff0000', + '#ff6600', + '#996600', + '#cc9900', + '#ffff00', + '#ffcc33', + '#ffff99', + '#99ff99', + '#666600', + '#99cc00', + '#00cc00', + '#006600', + '#339966', + '#33ff99', + '#006666', + '#66ffff', + '#0066ff', + '#0000cc', + '#660099', + '#993366', + '#ff99ff', + '#440044'], + 'R_class_lookup':{ \ + 'X Ray Binary':'xrbin', + 'a. Mira':'mira', + 'b. Semireg PV':'sreg', + 'c. RV Tauri':'rv', + 'd. Classical Cepheid':'dc', + 'e. Pop. II Cepheid':'piic', + 'f. Multi. Mode Cepheid':'cm', + 'g. RR Lyrae, FM':'rr-ab', + 'h. RR Lyrae, FO':'rr-c', + 'i. RR Lyrae, DM':'rr-d', + 'j. Delta Scuti':'ds', + 'k. Lambda Bootis':'lboo', + 'l. Beta Cephei':'bc', + 'm. Slowly Puls. B':'spb', + 'n. Gamma Doradus':'gd', + 'o. Pulsating Be':'be', + 'p. Per. Var. SG':'pvsg', + 'q. Chem. Peculiar':'CP', + 'r. Wolf-Rayet':'wr', + 's. T Tauri':'tt', + 't. Herbig AE/BE':'haebe', + 'u. S Doradus':'sdorad', + 'v. Ellipsoidal':'ell', + 'w. Beta Persei':'alg', + 'x. Beta Lyrae':'bly', + 'y. W Ursae Maj.':'wu', + }, + 'R_class_lookup__old':{ \ + 'X Ray Binary':'xrbin', + 'a. Mira':'mira', + 'b. semireg PV':'sreg', + 'c. RV Tauri':'rv', + 'd. Classical Cepheid':'dc', + 'e. Pop. II Cepheid':'piic', + 'f. Multi. Mode Cepheid':'cm', + 'g. RR Lyrae, FM':'rr-ab', + 'h. RR Lyrae, FO':'rr-c', + 'i. RR Lyrae, DM':'rr-d', + 'j. Delta Scuti':'ds', + 'k. Lambda Bootis':'lboo', + 'l. Beta Cephei':'bc', + 'm. Slowly Puls. B':'spb', + 'n. Gamma Doradus':'gd', + 'o. BE':'be', + 'p. Per. Var. SG':'pvsg', + 'q. Chem. Peculiar':'CP', + 'r. Wolf-Rayet':'wr', + 's. T Tauri':'tt', + 't. Herbig AE/BE':'haebe', + 'u. S Doradus':'sdorad', + 'v. Ellipsoidal':'ell', + 'w. Beta Persei':'alg', + 'x. Beta Lyrae':'bly', + 'y. W Ursae Maj.':'wu', + }, + } + # 'srcid':[], + # 'percent'[] + options = parse_options() + #if options.srcid != '': + # pars['src_id'] = options.srcid + + if 0: + ### OBSOLETE + ### all_tutor_xmls: Many tutor project_ids case: + pars['xml_dirpath'] = '/global/home/users/dstarr/500GB/all_tutor_xmls_flat' + xmls_dict_pkl_fpath = '/global/home/users/dstarr/500GB/all_tutor_xmls_dict.pkl' + glob_str = '%s/*/*' % (pars['xml_dirpath']) + + if os.path.exists(xmls_dict_pkl_fpath): + source_xml_dict = cPickle.load(open(xmls_dict_pkl_fpath)) + else: + #import pdb; pdb.set_trace() + #print + + source_xml_dict = {} + dirs = os.listdir(pars['xml_dirpath']) + for dir in dirs: + dirpath = "%s/%s" % (pars['xml_dirpath'], dir) + glob_str = '%s/*' % (dirpath) + + xml_fpaths = glob.glob(glob_str) + + for xml_fpath in xml_fpaths: + print(xml_fpath) + num_str = xml_fpath[xml_fpath.rfind('/') + 1:xml_fpath.rfind('.')] + srcid = int(num_str)# - 100000000 + source_xml_dict[str(srcid)] = xml_fpath + + + fp = open(xmls_dict_pkl_fpath, 'wb') + cPickle.dump(source_xml_dict,fp,1) # ,1) means a binary pkl is used. + fp.close() + + + else: + if 0: + ### For testing: + xml_str = generate_xml_str_using_ben_dat("/home/pteluser/Dropbox/LCS/LCnew_417.dat") + import pdb; pdb.set_trace() + print() + + glob_str = '/home/pteluser/Dropbox/LCS/LCnew_*.dat' + + dat_fpaths = glob.glob(glob_str) + + out_dict = master_ipython_arff_generation(pars=pars, + dat_fpaths=dat_fpaths, + write_multiinfo_srcids=False) #False:only srcid in output arff; True when doing several percent/subset arff rows + #print result_arff_list + result_arff_list = out_dict['result_arff_list'] + + ### Need to find the last ATTRIBUTE in the header, so the classes can be inserted: + in_attibs = False + for i, elem in enumerate(out_dict['result_arff_list']): + if len(elem) == 0: + continue + elif elem[0] == "%": + continue + elif elem[:10] == "@ATTRIBUTE": + in_attibs = True + elif in_attibs: + ### Now we are done parsing the @ATTRIBUTES + class_str = "@ATTRIBUTE class {'%s'}" % ("','".join(out_dict['class_list'])) + out_dict['result_arff_list'].insert(i, class_str) + ### Also want to insert @DATA before the data starts. + out_dict['result_arff_list'].insert(i + 1, '@DATA') + break + + fp = open(os.path.expandvars("$HOME/scratch/out.arff"), 'w') + fp.write('\n'.join(result_arff_list)) + fp.close() + import datetime + print(datetime.datetime.now()) + import pdb; pdb.set_trace() + print() diff --git a/mltsp/TCP/Software/citris33/start_ipengines.qsub b/mltsp/TCP/Software/citris33/start_ipengines.qsub new file mode 100755 index 00000000..8904de43 --- /dev/null +++ b/mltsp/TCP/Software/citris33/start_ipengines.qsub @@ -0,0 +1,34 @@ +#!/bin/sh + +#PBS -N ipengines_pwise +#PBS -l nodes=12:ppn=8 +#PBS -l walltime=48:00:00 +#PBS -o outfile +#PBS -e errfile +#PBS -M dstarr@astro.berkeley.edu +#PBS -m abe +#PBS -q long +# +# Export all my environment variables to the job +#PBS -V +# +# +## Run my parallel job +##cd /global/home/users/kmuriki/sample_executables/mpi/matrixmult +cd /global/home/users/dstarr/src/TCP/Software/citris33 + +cat $PBS_NODEFILE +. /usr/Modules/init/bash + +module load intel/11.1.072 +module load gcc +module list + +### full = 74mins per node. 112 nodes (14*8) :: 12*8 =96 +mpiexec -n 96 ipengine --mpi=mpi4py + +##### /global/home/users/dstarr/src/install/epd-6.2-2-rh5-x86_64/lib/python2.6/pdb.py test_pairwise_on_citris33_ipython.py --pairwise_classifier_pkl_fpath=$HOME/scratch/pairwise_classifier__debosscher_table3.pkl.gz --use_hardcoded_sciclass_lookup +##### qsub -I -V -X -l walltime=24:00:00,nodes=1:ppn=1 -q normal +##### qdel 6366.perceus-citris.banatao.berkeley.edu +##### qstat -a +##### qsub start_ipengines.qsub \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/FeatureExtractor.py b/mltsp/TCP/Software/feature_extract/Code/FeatureExtractor.py new file mode 100644 index 00000000..f0a601cd --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/FeatureExtractor.py @@ -0,0 +1,320 @@ +from __future__ import print_function + +import numpy +from numpy import random +from scipy import fftpack, stats, optimize + +from .extractors import * + +import time + +from . import internal_generated_extractors_holder # 20080508 KLUDGE + +#20090321#import amara + +class ExtractException(Exception): + "extractor refused to extract" + pass +class ResultObject(object): + def __init__(self,result): + self.result = result + def __str__(self): + return str(self.result) +class Intermediary(ResultObject): + pass +class Feature(ResultObject): + pass + +class GeneralExtractor(object): + # 20080508 KLUDGE: + igea = internal_generated_extractors_holder.\ + Internal_Gen_Extractors_Accessor() # 20080508 KLUDGE + glob_internally_generated_extractors = igea.glob_internally_generated_extractors + + why_fail = "This didn't fail as far as I know" # implement in subclasses please + minpoints = 0 + maxpoints = 28200 #20090127: dstarr adds this after seeing a ws_variability_extractor related memory balloon possibly due to a +30k dataset. + def __init__(self): + pass + active = False + extname = 'FeatureExtractorctor' #extractor's name + counter = 0 # number of extractions performed + def extr(self,properties,band=None): #general code run before extraction + tic = time.time() + self.properties = properties + self.finddatadic(properties,band=band) # find the dictionary of the signal properties that contains the actual data + if not self.checkalready(): # if it doesn't exist already + try: + self.set_names(self.dic['input']) + self.longenough() # check that there is enough data to run this + result = self.extract() + self.why_fail = False # I didn't fail so far + except ExtractException as e: + result = False + #self.why_fail = "I don't know why it failed" + self.prepare_obj(result) + ### check that resources are not wasted + self.__class__.counter += 1 # number of times this feature has been run, supposed to be used as a check for redundancies, doesn't do anyting right now + #if self.counter > 1: + #dstarr com out# print "I just did this thing twice, that's ridiculous", self.extname, self.counter, "times" + ### + return self.output + def finddatadic(self,properties,band=None): + """ find the dictionary of the signal properties that contains the actual data """ + if band: # if the signal has bands, look for data in respective subdictionary + self.dic = self.properties['data'][band] + self.band = band + else: # otherwise the data is directly in ['data'] (no bands) + self.dic = self.properties['data'] + self.band = None + return None + def checkalready(self): + """ check if this feature has already been extracted in the past """ + for subdic in ['input','features','inter']: + if self.extname in self.dic[subdic]: # test to see if this feature has already been extracted + output = self.dic[subdic][self.extname] + self.output = output + return True # yes it already exists + else: pass + return False # no it doesn't exist yet + + def prepare_obj(self,result): + self.output = self.out_type(result) + self.output.plots = self.plots # give my plot method + self.output.dic = self.dic # give it the signal/band's dictionary (this is kinda crazy actually) + self.output.__doc__ = self.__doc__ # give my docstring + self.output.extname = self.extname # give my name + try: + self.output.uncertainty = self.uncertainty # if the feature extractor specifies an uncertainty value, export it + except AttributeError: + self.output.uncertainty = 0 # otherwise, the uncertainty is zero + #if self.why_fail: #don't pass anything if not failed + self.output.why = self.why_fail # explanation of why a feature extraction failed (or refused to perform) + self.general_obj(self.output) # implement different behavior if this is a feature or an intermediary result + if self.output.result is not False: # no need to do so if failed + self.specific_obj(self.output) # specific feature extractors may be interested in particular behaviors + def general_obj(self,output): + """implement different behavior if this is a feature or an intermediary result""" + pass + def specific_obj(self,output): + """add more information in the output object on a feature-specific basis (implemented at subclass level)""" # this docstring gets overridden down the line, kinda stupid + pass + def extract(self): # delegates the actual implementation to subclasses + pass +# TODO why try / except KeyError? + def set_names(self,where): + """ prepares the most commonly used inputs for easy access """ + try: + self.time_data = where['time_data'] + self.flux_data = where['flux_data'] + except KeyError: + pass + + ####20110512commentout#'frequencies':self.fgen(input_dic['time_data'])}) # 20110512: NOTE: this and self.frequencies are not used by any current features (used to be related to old lomb implementations). About to add a new self.frequencies overwriting declaration in lomb_scargle_extractor.py:extractor(), which will allow the first freq self.frequencies, self.psd to be accessible to outside code. + #try: + # import pdb; pdb.set_trace() + # self.frequencies = where['frequencies'] + #except KeyError: + # self.frequencies = numpy.array([]) + try: + self.rms_data = where['rms_data'] + except KeyError: + try: # sorry this is getting messy, this is for multiband extractors + self.rms_data = numpy.ones(len(self.time_data), dtype=float) + except AttributeError: + pass + try: + self.ra = where['ra'] + self.dec = where['dec'] + except KeyError: + pass + try: + self.ra_rms = where['ra_rms'] + self.dec_rms = where['dec_rms'] + except KeyError: + pass + + try: + self.time_data_unit = where['time_data_unit'] + self.flux_data_unit = where['flux_data_unit'] + self.rms_data_unit = where['rms_data_unit'] + self.time_data_ucd = where['time_data_ucd'] + self.flux_data_ucd = where['flux_data_ucd'] + self.rms_data_ucd = where['rms_data_ucd'] + except KeyError: + pass + + def register_extractor(self): # broken + """ register this extractor as an active extractor""" + from . import feature_interfaces + feature_interfaces.feature_interface.register_extractor(type(self)) + def remove_extractor(self): # broken + """ inactivate this extractor """ + from . import feature_interfaces + feature_interfaces.feature_interface.remove_extractor(type(self)) + def plots(self,properties=None): + if not properties: properties = self.dic + self.set_names(properties['input']) + merge = dict(properties['input'], **properties['features']) + merge = dict(merge, **properties['inter']) + if self == 'Fail': + print("I can't print myself, I'm a failure", self.extname) + else: + self.plot_feature(merge) # delegates at extractor (subclass) level, each extractor knows how to plot itself + legend() + def plot_feature(self,properties): + print("I don't know how to plot myself", self.extname) # implement in subclasses + + + def fetch_extr(self,extractor_name,properties=None,error=True, band=None, returnall = False, return_object = False): + """ Fetch the result from other extractors + error (boolean): True to proagate the error of fetched extractors """ + if not band: band = self.band + if not properties: properties = self.properties + + if not isinstance(extractor_name, str): + print("Method %s is still using old fetch procedure, calling %s" % (self.extname, extractor_name.extname)) + return self.fetch_extr_old(extractor_name,properties,error, band, returnall, return_object) + #print extractor_name, self.properties, self.band + # # # # # # # # dstarr KLUDGE (next single condition:): + from . import feature_interfaces + fetched_extractor = feature_interfaces.feature_interface.request_extractor(extractor_name) # the feature interface is in charge of storing and finding extractors, receives an extractor or False + if not fetched_extractor: #if the feature_interface was unable to find the extractor + self.ex_error("Extractor %s not able to fetch extractor %s" % (self.extname, extractor_name)) + fetched_instance = fetched_extractor() # instantiate + if return_object: + return fetched_instance + elif returnall: # return the entire object + ret_object = fetched_instance.extr(properties,band=band) + returner = ret_object + else: + ret_object = fetched_instance.extr(properties,band=band) + returner = ret_object.result + if ret_object.result is False and error: # if the result is an error + self.ex_error(ret_object.why) # then propagate the error + return returner + def fetch_extr_old( self,extractor_name,properties=None,error=True, band=None, returnall = False, return_object = False): + """ Fetch the result from other extractors + error (boolean): True to proagate the error of fetched extractors """ + if not band: band = self.band + if not properties: properties = self.properties + #print extractor_name, self.properties, self.band + # # # # # # # # dstarr KLUDGE (next single condition:): + if return_object: + ret_object = extractor_name() + #result = ret_object.result + result = True # KLUDGE + returner = ret_object + elif returnall: # return the entire object + ret_object = extractor_name().extr(properties,band=band) + result = ret_object.result + returner = ret_object + else: + ret_object = extractor_name().extr(properties,band=band) + result = ret_object.result + returner = result + if result is False and error: + self.ex_error(ret_object.why) + return returner + def ex_error(self,text="I don't know why"): + """ a feature extractor's way of raising an error cleanly """ + self.why_fail = text + raise ExtractException(text) + def longenough(self): + """ will not perform extraction if there aren't enough data points, minpoints set at extractor level """ + try: + if (len(self.flux_data) < self.minpoints) or \ + (len(self.flux_data) > self.maxpoints): # if 4 or less points, error + self.ex_error("not enough (or too much) data points: %d" % (len(self.flux_data))) + except: + self.ex_error("not enough (or too much) data points") +class FeatureExtractor(GeneralExtractor): + out_type = Feature + internal_use_only = False # dstarr adds this. But a bit of a KLUDGE + # since non-feature extractors should be InterExtractors and + # not FeatureExtractors. But with users making feature extractors + # this parameter may be needed. + def general_obj(self,output): + pass + +class InterExtractor(GeneralExtractor): + out_type = Intermediary + internal_use_only = True # dstarr adds this. But a bit of a KLUDGE + # since non-feature extractors should be InterExtractors and + # not FeatureExtractors. But with users making feature extractors + # this parameter may be needed. + def general_obj(self,output): + pass + +class ContextExtractor(GeneralExtractor): + """ This is a special extractor class for context features. """ + def longenough(self): # we're getting rid of the longenough method because it does not make sense + pass + +class MultiExtractor(ContextExtractor): + """ for feature extractors that need to *compare* multiple bands """ + band1 = 'v' + band2 = 'u' + compared_extr = None + def finddatadic(self,properties,band=None): + """ this needs to be changed so the extractor has access to data from multiple bands """ + assert (band == 'multiband'), 'band should be multiband' + self.dic = self.properties['data']['multiband'] + self.multidic = self.properties['data'] + self.band = band + return None + def set_names(self,where): + """ prepares the most commonly used inputs for easy access """ + ContextExtractor.set_names(self,where) + if self.band1 not in self.multidic: + self.ex_error("Multiband extractor %s did not find band '%s' in '%s'" % (self.extname, self.band1, self.multidic.keys())) + else: pass + if self.band2 not in self.multidic: + self.ex_error("Multiband extractor %s did not find band '%s' in '%s'" % (self.extname, self.band2, self.multidic.keys())) + else: pass + self.dic1 = self.multidic[self.band1] + self.dic2 = self.multidic[self.band2] + self.extr1 = self.fetch_extr(self.compared_extr, band=self.band1) + self.extr2 = self.fetch_extr(self.compared_extr, band=self.band2) + return None + def general_obj(self,output): + output.band1 = self.band1 + output.band2 = self.band2 + output.compared_extr = self.compared_extr + return None + +class MultiFeatureExtractor(MultiExtractor,FeatureExtractor): + pass +class MultiInterExtractor(MultiExtractor,InterExtractor): + pass + +class ContextFeatureExtractor(ContextExtractor,FeatureExtractor): + pass +class ContextInterExtractor(ContextExtractor,InterExtractor): + pass + +# Extractors +####################****************############ +# Extractor Outputs + +"""class Extracted(object): + def __init__(self,data): + self.data = data + def __repr__(self): + return str(self.data) + def newobj(self,new): + self.data = new + return self + def __add__(self,other): + new = self.data + other + self.newobj(new) + def __abs__(self): + new = abs(self.data) + self.newobj(new) + def __getitem__(self,key): + return self.data[key] + def __getattr__(self,name): + print name +# exec "return self.data.%s" % name + out = eval("self.data.%s" % name) + return out""" diff --git a/mltsp/TCP/Software/feature_extract/Code/__init__.py b/mltsp/TCP/Software/feature_extract/Code/__init__.py new file mode 100644 index 00000000..7d148c58 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/__init__.py @@ -0,0 +1,14 @@ +from . import main +from .main import test, xml_print +from .main import signals_list +from .main import generators_importers +from . import signal_objects +#from . import feature_interfaces +#available = feature_interfaces.feature_interface.available_extractors +from . import extractors +from .extractors import * +#from . import feature_interfaces +from . import FeatureExtractor +from . import generators_importers +from . import plotters +from . import signal_objects diff --git a/mltsp/TCP/Software/feature_extract/Code/data_cleaning.py b/mltsp/TCP/Software/feature_extract/Code/data_cleaning.py new file mode 100644 index 00000000..062fe6a1 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/data_cleaning.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python +""" data_cleaning.py + +Tools which are used to clean timeseris data. + +Initially intended to be applied to gen.generate()'s gen.sig.x_sdict object. + +For Example: + +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract')) + +from data_cleaning import sigmaclip_sdict_ts + +gen.generate(xml_handle="../../Data/vosource_9026.xml") +sigmaclip_sdict_ts(gen.sig.x_sdict['ts'], sigma_low=4., sigma_high=4.) + + +This is used in: + arff_generation_master.py + +""" +import os, sys +from numpy import array + +def sigmaclip_sdict_ts(sdict_ts={}, sigma_low=4., sigma_high=4.): + """Iterative sigma-clipping of array elements. + + Parameters: + + sdict_ts # A dictionary such as: + gen.sig.x_sdict['ts'] + When previously called: + gen.generate(xml_handle="../../Data/vosource_9026.xml") + + low : lower bound of sigma clipping + high : upper bound of sigma clipping + + NOTE: sdict_ts is mpodified to use the new sigma-clipped timeseries data + + Example: + + gen.generate(xml_handle="../../Data/vosource_9026.xml") + sigmaclip(gen.sig.x_sdict['ts'], low=4., high=4.) + + + Note: satisfy the conditions: + c > mean(c)-std(c)*low and c < mean(c) + std(c)*high + + """ + for band_name, band_dict in sdict_ts.items(): + + if ":NOMAD" in band_name: + continue # skip from sigmaclipping the 1 pseudo epoch NOMAD epoch + elif "extinct" in band_name: + continue # skip from sigmaclipping the 1 pseudo epoch NOMAD epoch + + m = array(band_dict['m']) + + m_std = m.std() + m_mean = m.mean() + keep_inds = ((m > m_mean - (m_std * sigma_low )) & + (m < m_mean + (m_std * sigma_high))) + + ### This limit-mag section is not applicable since limiting mags can + ### potentially have different time sampling/array: + #if ((len(band_dict.get('limitmags', {}).get('lmt_mg',[])) > 0) and + # (len(band_dict.get('limitmags', {}).get('lmt_mg',[])) == len(m))): + # lmt_mg = array(band_dict['limitmags']['lmt_mg']) + # band_dict['limitmags']['lmt_mg'] = list(lmt_mg[keep_inds]) + # + # lmt_t = array(band_dict['limitmags']['t']) + # band_dict['limitmags']['t'] = list(lmt_t[keep_inds]) + + band_dict['m'] = list(m[keep_inds]) + + t = array(band_dict['t']) + band_dict['t'] = list(t[keep_inds]) + + m_err = array(band_dict['m_err']) + band_dict['m_err'] = list(m_err[keep_inds]) + diff --git a/mltsp/TCP/Software/feature_extract/Code/db_importer.py b/mltsp/TCP/Software/feature_extract/Code/db_importer.py new file mode 100644 index 00000000..d5808bf1 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/db_importer.py @@ -0,0 +1,1216 @@ +#!/usr/bin/env python + +""" +main remote interaction client to the transients source database + +NOTE: I've added the "svn propset" characteristic to this file, for $Id: db_importer.py 1573 2010-07-12 18:14:15Z pteluser $ using: + svn propset svn:keywords Id *.py + +To run this locally, you'll want to set up a tunnel from here->lyra->linux + + ssh -L 8000:192.168.1.45:8000 lyra.berkeley.edu + +Leave that window open. + +you'll want to have Amara (XML toolkit installed) + wget http://peak.telecommunity.com/dist/ez_setup.py + sudo python ez_setup.py + sudo /scisoft/i386/Packages/Python/Python.framework/Versions/Current/bin/easy_install amara + (or /sw/bin/easy_install amara) + +Open up a new UNIX window.Typical usage might be: +bash> ipython -pylab +py> import db_importer +py> pe =db_importer.PositionExtractor(pos=(49.599497, -1.0050998),radius=0.001,prefer_only_source_search=True, host="192.168.1.45") +py> pe.search_pos(out_xml_fpath='') # this populates the pe.sources list +py> # to view the dictionary associated with the first source returned +py> import pprint +py> pprint.pprint(pe.sources[0].d) + +If you have an xml that you want to be put in to an internal representation (py dictionary), then do something like this: +bash> ipython -pylab +py> import db_importer +py> s = db_importer.Source(xml_handle="source_5.xml") + +Now s.x_sdict will have a dictionary representation of the xml. +that dictionary (and the one coerced from Dan's db) will look like: +py> pprint.pprint(s.x_sdict) + +{'dec': -1.0142709999999999, + 'dec_rms': 0.000118, + 'ra': 49.591202000000003, + 'ra_rms': 0.00012300000000000001, + 'src_id': 26, + 'ts': {'g': {'m': [24.215399999999999], + 'm_err': [3.4363600000000001], + 't': [53666.468710000001]}, + 'i': {'m': [23.313300000000002], + 'm_err': [1.5199199999999999], + 't': [53666.466222000003]}, + 'r': {'m': [22.273800000000001], + 'm_err': [0.47815600000000003], + 't': [53666.465392999999]}, + 'z': {'m': [22.619199999999999], + 'm_err': [2.7249099999999999], + 't': [53666.467880999997]}}} + +if the source was made from Dan's codes then use s.d for the dictionary. +""" +from __future__ import print_function +from __future__ import absolute_import + +__author__ = "JSB" +__version__ = "9-Aug-2007" +__svn_id__ = "$Id: db_importer.py 1573 2010-07-12 18:14:15Z pteluser $".replace('$','').replace('Id:','').strip() + +__tab__ = " " + +import time, datetime +import os, sys +from logging import * +import copy + +MAX_SEARCH_RADIUS = 0.5 # degrees +#20080225# MAX_SEARCH_RADIUS = 0.125 # degrees +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR","") + \ + '/Software/feature_extract/Code')) # 20090309 dstarr adds this for nosetests use only +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR","") + \ + '/Software/feature_extract/Code/extractors')) # 20090309 dstarr adds this for xmldict load only +from .extractors import xmldict +from . import vo_timeseries +import numpy +try: + import numarray +except: + import numpy as numarray +#import matplotlib +#try: +# from matplotlib import pylab +#except: +# pass +try: + from xml.etree import cElementTree as ElementTree # this is a nicer implementation +except: + # This is caught in M45's python 2.4.3 distro where the elementtree module was installed instead + from elementtree import ElementTree + + +sdss_filters = {'u': 0, 'g': 1, 'r': 2, 'i': 3, 'z': 4, 'V': 5} +sdss_plotting_codes = {'u': 'kd', 'g': 'bo', 'r': 'gs','i': 'rD', 'z': 'md', 'V': 'bo', + 'ptf_g':'go', 'ptf_r':'ro'} + + +def setup_logging(file_level=DEBUG, screen_level=INFO,fname="./db_importer.log"): + + basicConfig(level=file_level,format='%(asctime)s %(levelname)-8s %(message)s', + datefmt='%a, %d %b %Y %H:%M:%S', + filename=fname,filemode='w') + console = StreamHandler() + console.setLevel(screen_level) + getLogger('').addHandler(console) + return + +#try: +# import amara +# use_amara = True +#except: +# warning("cannot use Amara for xml fun") +# use_amara = False + +def add_pretty_indents_to_elemtree(elem, level=0): + """ in-place prettyprint formatter + """ + i = "\n" + level*" " + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = i + " " + if not elem.tail or not elem.tail.strip(): + elem.tail = i + for elem in elem: + if (elem.tag == "MAG") or (elem.tag == "TIME"): + elem.tail = "\n" + (level+1)*" " + continue + add_pretty_indents_to_elemtree(elem, level+1) + if not elem.tail or not elem.tail.strip(): + elem.tail = i + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i + + + +class vosource_classification_obj: + """ This deals with forming the part + of the vosource XML. + """ + def __init__(self): + # Internal representation of class:probabilities is: + #self._classes[source_name][class_schema_name][class_name] = prob + self._classes = {} + + + def add_classif_prob(self, class_name="", prob=-1.0, + src_name='None', class_schema_name='None', + human_algo="algorithm", + catalog_tcp="tcp"): + """ This adds a classification to the internal class structure. + + NOTE: human_algo == ["algorithm" OR "human"] + NOTE: catalog_tcp == ["catalog" OR "tcp"] + """ + if human_algo not in self._classes: + self._classes[human_algo] = {} + if catalog_tcp not in self._classes[human_algo]: + self._classes[human_algo][catalog_tcp] = {} + if src_name not in self._classes[human_algo][catalog_tcp]: + self._classes[human_algo][catalog_tcp][src_name] = {} + if class_schema_name not in self._classes[human_algo][catalog_tcp][src_name]: + self._classes[human_algo][catalog_tcp][src_name][class_schema_name] = {} + if class_name not in self._classes[human_algo][catalog_tcp][src_name][class_schema_name]: + self._classes[human_algo][catalog_tcp][src_name][class_schema_name][class_name] = {} + if class_name not in self._classes[human_algo][catalog_tcp][src_name][class_schema_name]: + self._classes[human_algo][catalog_tcp][src_name][class_schema_name][class_name] = {} + self._classes[human_algo][catalog_tcp][src_name][class_schema_name][class_name]['prob'] = prob + + + def get_class_xml_string(self): + """ This forms the ( ) string + and returns this string. + """ + __tab__ = " " # This is a global variable in db_importer.py + + self.class_xml_string = " \n" + for human_algo in self._classes.keys(): + self.class_xml_string += ' \n' % (human_algo) + for catalog_tcp in self._classes[human_algo].keys(): + for src_name in self._classes[human_algo][catalog_tcp].keys(): + self.class_xml_string += """ + + %s + 1.0 + + \n""" % (catalog_tcp, src_name) + for class_schema_name in self._classes[human_algo][catalog_tcp][src_name].keys(): + #self.class_xml_string += ' \n' % (class_schema_name) + for class_name in self._classes[human_algo][catalog_tcp][src_name][class_schema_name].keys(): + #self.class_xml_string += ' \n' % (class_name, \ + #20090420 comment out# self.class_xml_string += ' \n' % (class_name, class_name, self._classes[human_algo][catalog_tcp][src_name][class_schema_name][class_name]['prob']) + self.class_xml_string += ' \n' % (class_name, class_schema_name, self._classes[human_algo][catalog_tcp][src_name][class_schema_name][class_name]['prob']) + self.class_xml_string += " \n" + #self.class_xml_string += " \n" + self.class_xml_string += " \n" + self.class_xml_string += " \n" + return self.class_xml_string + + + def add_class_xml_to_existing_vosource_xml(self, old_vosource_str): + """ Given a vosource XML string, this forms and inserts the + contents and returns a new vosource string. + + Uses get_class_xml_string() + Returns a new vosource_str. + """ + class_xml_string = self.get_class_xml_string() + + # This is KLUDGEY: I'm not sure the re module would be efficient since + # it might search over the enormous string. So I try 3 cases: + r_buffer_size = 1000 + vosource_end_str = old_vosource_str[-r_buffer_size:] + ind = vosource_end_str.rfind(' at end of string!") + return old_vosource_str + + # get the true index of the beginning of : + i_begin_of_vosource = ind + len(old_vosource_str) - r_buffer_size + new_vosource_str = "%s\n%s\n%s" % (\ + old_vosource_str[:i_begin_of_vosource], \ + class_xml_string, \ + old_vosource_str[i_begin_of_vosource:]) + return new_vosource_str + + +class Source: + + def __init__(self,verbose=True, sdict=None, xml_handle=None,\ + make_xml_if_given_dict=True, interactive=False,\ + make_dict_if_given_xml=True, doplot=False,xml_validate=False,\ + out_xml_fpath='', use_source_id_in_xml_fpath=False, \ + write_xml=True, read_simpletimeseries=False): + """ + sdict - the dictionary with the data of the source + as it comes from the database + xml_handle - the string representation, file name, or file h + """ + self.sdict = sdict + self.verbose = verbose + self.xml_handle = xml_handle + self.marshalled_to_xml = False + self.coerced_to_dict = False + self.xml_validate = xml_validate + self.id = "unk" + self.use_source_id = use_source_id_in_xml_fpath + self._handle_start() + + if read_simpletimeseries and make_dict_if_given_xml: + self.simpletimeseriesxml_to_source_dict(self.xml_handle) + return + + if make_xml_if_given_dict and self.coerced_to_dict: + self.source_dict_to_xml(self.d) + if write_xml == True: + self.write_xml(out_xml_fpath=out_xml_fpath) + if doplot: + self.plot_from_dict(self.d,interactive= \ + interactive) + + elif make_dict_if_given_xml and not self.coerced_to_dict: + self.xml_to_source_dict(self.xml_handle) + if doplot: + self.plot_from_dict(self.x_sdict,interactive= \ + interactive,bands=self.x_sdict['ts'].keys()) + + def write_xml(self, out_xml_fpath=''): + if not self.marshalled_to_xml: + return + if type(out_xml_fpath) != type(""): + # This catches filepointers and StringIO + f = out_xml_fpath + else: + if len(out_xml_fpath) != 0: + if not self.use_source_id: + fname = out_xml_fpath + else: + bb = os.path.dirname(out_xml_fpath) + if bb == "": + bb = "./" + if out_xml_fpath.endswith(".xml"): + ttt = "" + else: + ttt = ".xml" + fname = os.path.normpath(bb + "/source" + \ + str(self.id) + "." + os.path.basename(out_xml_fpath) + ttt) + else: + fname = "source_" + str(self.id) + ".xml" + + f = open(fname,"w") + + f.write(self.xml_string) + + if type(out_xml_fpath) == type(""): + f.close() + print("wrote %s " % fname) + + def _handle_start(self): + """ + decides what do to with the initial instantiation + """ + if self.sdict is None and self.xml_handle is None: + # this is a blank instance + if self.verbose: + info("blank instance of Source created") + if self.sdict is not None: + self.coerce_sdict() + + + def coerce_sdict(self,metakeys=["src_id",'ra_rms',"dec_rms","ra",\ + "dec", 'feat_gen_date']): + """ + this makes a reasonable dictionary out of the primitive currently being returned from Dan's codes + """ + self.d = {} + + all_entries = self.sdict.keys() + # TODO: rather than select the first entry, I want to select the entry which has the mst amount of info. + best_represent_entry = all_entries[0] + # NOTE: I want to choose the self.sdict entry which has all of the source info. + # - this is needed because some filters just contain limiting mags and not much source info. + for entry in all_entries: + if 'm' in self.sdict[entry]: + best_represent_entry = entry + break + for m in metakeys: + if m in self.sdict[best_represent_entry]: + self.d.update({m: self.sdict[best_represent_entry][m]}) + for b in all_entries: + if m in self.sdict[b]: + self.sdict[b].pop(m) + self.d.update({'ts': self.sdict}) + if "src_id" in self.d: + self.id = self.d['src_id'] + self.coerced_to_dict = True + return + + + def plot_from_dict(self,dic,bands=['u','g','r','i','z'],plot_title="",interactive=False,save_plot_name=None): + if not self.coerced_to_dict: + return + + if "ts" not in dic: + warning("no timeseries to plot") + return + + import matplotlib + + matplotlib.pylab.hold(False) + matplotlib.pylab.plot([120,111]) + matplotlib.pylab.hold(True) + xxtrema = [[],[]] + yytrema = [[],[]] + #print bands + for i in range(len(bands)): + filt = bands[i] + if filt not in dic['ts']: + continue + #g = [ numpy.array(dic['ts'][filt]['t']),numpy.array(dic['ts'][filt]['m']),numpy.array(dic['ts'][filt]['m_err']) ] + + g = [ numarray.array(dic['ts'][filt]['t']),numarray.array(dic['ts'][filt]['m']),numarray.array(dic['ts'][filt]['m_err']) ] + #print g + matplotlib.pylab.errorbar(g[0],g[1],g[2],fmt=sdss_plotting_codes[filt]) + xxtrema[0].append(min(g[0])) + xxtrema[1].append(max(g[0])) + yytrema[0].append(max(g[1])) + yytrema[1].append(min(g[1])) + + matplotlib.pylab.ylim( (max(yytrema[0]) + 1,min(yytrema[1]) - 0.3) ) + matplotlib.pylab.xlim( (min(xxtrema[0]) - 10,max(xxtrema[1]) + 10) ) + #print (max(yytrema[1]) + 1,min(yytrema[0])) + #print (min(xxtrema[0]) - 10,max(xxtrema[1]) + 10) + #print yytrema + matplotlib.pylab.xlabel("%s - %5.2f [%s]" % (self.timesys, self.timezero, "day")) + matplotlib.pylab.ylabel('magnitude') + + if plot_title=='': + plot_title = "ID: " + repr(dic['src_id']) + matplotlib.pylab.title(plot_title) + + if interactive: + matplotlib.pylab.show() + else: + if save_plot_name is None: + save_plot_name = "source_plot_" + repr(dic['src_id']) + ".png" + matplotlib.pylab.savefig(save_plot_name) + f = open(save_plot_name,'r') + if f.readline().find("PS-Adobe") != -1: + # this is a postscript file + os.rename(save_plot_name,save_plot_name.replace(".png",".ps")) + save_plot_name = save_plot_name.replace(".png",".ps") + f.close() + if self.verbose: + print("+ save light curve %s" % save_plot_name) + + + def normalize_vosource_tags(self, xml_str): + """ Convert specific VOSource tags to expected case + so that it is easier to xpath query, traverse. + """ + xs = xml_str.replace('CLASSIFICATIONS','Classifications')\ + .replace('CLASSIFICATION','Classification')\ + .replace('classification','Classification')\ + .replace(' seems more descriptive than in some cases (9022) + if class_update_dict["class"] != "UNKNOWN": + break # This means we already found a valid classification from xml parsing + for classfn_branch in classification_branches: + correct_branch = False + try: + for source_branch in classfn_branch.findall('source'): + if (source_branch.get('type') == classification_node_type_name): + correct_branch = True + break + except: + pass + if correct_branch: + # Then we get the innermost, longest class dbname & parse last ':' suffix + classes = classfn_branch.findall('.//class') + tmpclasses = [] + dbname_to_name = {} + for c in classes: + class_name = c.get('dbname','') + if len(class_name) > 0: + tmpclasses.append(class_name) + if c.get('name') != None: + verbose_name = c.get('name') + else: + verbose_name = c.get('dbname','') # I'd perfer not having this case arise. + dbname_to_name[class_name] = verbose_name + tmpclasses.sort(key=len,reverse=True) + grandchild_classname = '' + if len(tmpclasses) > 0: + grandchild_classname = dbname_to_name[tmpclasses[0]] + class_update_dict = {"class":grandchild_classname} + break + #else: + # class_update_dict = {"class":"UNKNOWN"} + self.x_sdict.update(class_update_dict) + ###################### + + # self.elemtree.findall('WhereWhen/Position2D/Value2/c1')[0].text + try: + self.x_sdict.update({"ra": float(self.elemtree.\ + findall('WhereWhen/Position2D/Value2/c1')[0].text)}) + except: + self.x_sdict.update({"ra": ''}) + try: + self.x_sdict.update({"dec": float(self.elemtree.\ + findall('WhereWhen/Position2D/Value2/c2')[0].text)}) + except: + self.x_sdict.update({"dec": ''}) + try: + self.x_sdict.update({"dec_rms": float(self.elemtree.\ + findall('WhereWhen/Position2D/Error2/c2')[0].text)}) + except: + self.x_sdict.update({"dec_rms": ''}) + try: + self.x_sdict.update({"ra_rms": float(self.elemtree.\ + findall('WhereWhen/Position2D/Error2/c1')[0].text)}) + except: + self.x_sdict.update({"ra_rms": ''}) + + self.ts = {} + ## now parse through to get all the timeseries data + + ## figure out what kind of timeseries it is + try: + self.timesys = self.elemtree.findall('VOTimeseries/TIMESYS/TimeType')[0].text.upper() + self.timezero = float(self.elemtree.findall('VOTimeseries/TIMESYS/TimeZero')[0].text) + except: + #print "No TIMESYS ... assuming the defaults" + self.timesys = "MJD" + self.timezero = 0.0 + + try: + # 20090311: dstarr not sure if a-mara string case still applicable for etree. Commenting out: + #filt_nodes = [x for x in self.doc.VOSOURCE.VOTIMESERIES.RESOURCE.xml_children if type(x) != type(u"")] + filt_nodes = self.elemtree.findall('VOTimeseries/Resource/TABLE') + except: + filt_nodes = [] + self.durga = filt_nodes + for fn in filt_nodes: + # Here we are iterating over ... + # get the band name + band_split = fn.get('name').split("-") + if len(band_split) == 2: + band = band_split[1] + else: + band = band_split[0] + + units = [] + array_names = [] + ucds = [] + IDs = [] + data = {} + for f in fn.findall('FIELD'): + ucds.append(f.get('ucd')) # appends None otherwise + units.append(f.get('unit')) # appends None otherwise + if f.get('name') != None: + array_names.append(f.get('name')) + else: + array_names.append("unknown") + data.update({array_names[-1]: []}) + if f.get('ID') != None: + IDs.append(f.get('ID')) + else: + IDs.append("unknown") + + data.update({'units': units, 'ucds': ucds, 'IDs': IDs, 'ordered_column_names': array_names, + 'limitmags':{'t':[], 'lmt_mg':[]}}) + ## now go through the timeseries part of the data line by line + try: + rows = fn.findall('DATA/TABLEDATA/TR') + except: + rows = [] + # needed for limit_mag use: + col_name_dict = {} + for i, col_name in enumerate(array_names): + col_name_dict[col_name] = i + + for tr in rows: + cols = tr.findall('TD') + if 'limit' in tr.keys(): + # KLUDGE: for limiting-magnitude XML TABLE row: + # explicitly assume column names exist: XML.TABLE.FIELD.name = {'t','m'} + data['limitmags']['t'].append(float(cols[col_name_dict['t']].text)) + data['limitmags']['lmt_mg'].append(float(cols[col_name_dict['m']].text)) + else: + for i,td in enumerate(cols): + data[array_names[i]].append(float(td.text)) + self.ts.update({band: copy.copy(data)}) + + if 0: + # # # 20100521: dstarr disables this due to complications with watt_per_m2_flux and just the general sloppiness of combining filters and their magnigueds. Ideally there would be some soft of offset magnitude used for each band (like the watt_per_m2_flux, and specific features would act only on this internal combined flux(t) dataset + ############################### + ### KLUDGE: (20090616) + # I'm generating a combined-band which due to a combined number of data points, should + # be used for band-invariant features. This is useful for PTF since data is sparse and + # spread bi-monthly over 2 bands. It is a kludge because astrophysical objects have + # different brightnesses in different bands. Hopefully features which dominate + # effective classification prefer more samples than magnitude accuracy/offsets. + ts_without_combo = {} + for k,v in self.ts.items(): + if k != 'combo_band': + ts_without_combo[k] = v + + band_name_with_data = ts_without_combo.keys()[0] + for band,data_dict in ts_without_combo.items(): + if len(data_dict.get('m',[])) > 0: + band_name_with_data = band + break + combo_band_dict = copy.deepcopy(ts_without_combo[band_name_with_data]) + if 'limitmags' not in combo_band_dict: + combo_band_dict['limitmags'] = {'lmt_mg':[], 't':[]} + for band,data_dict in ts_without_combo.items(): + if band == band_name_with_data: + continue + combo_band_dict['limitmags']['lmt_mg'].extend(data_dict.get('limitmags',{}).get('lmt_mg',[])) + combo_band_dict['limitmags']['t'].extend(data_dict.get('limitmags',{}).get('t',[])) + combo_band_dict['m'].extend(data_dict.get('m',[])) + combo_band_dict['m_err'].extend(data_dict.get('m_err',[])) + combo_band_dict['t'].extend(data_dict.get('t',[])) + t_tup_list = [] + for i,t_val in enumerate(combo_band_dict.get('t',[])): + t_tup_list.append((t_val,i)) + t_tup_list.sort() + i_sorted_list = map(lambda a_b: a_b[1], t_tup_list) + combo_band_dict['m'] = map(lambda i: combo_band_dict['m'][i], i_sorted_list) + combo_band_dict['m_err'] = map(lambda i: combo_band_dict['m_err'][i], i_sorted_list) + combo_band_dict['t'] = map(lambda i: combo_band_dict['t'][i], i_sorted_list) + + t_tup_list = [] + for i,t_val in enumerate(combo_band_dict['limitmags']['t']): + t_tup_list.append((t_val,i)) + t_tup_list.sort() + i_sorted_list = map(lambda a_b1: a_b1[1], t_tup_list) + combo_band_dict['limitmags']['lmt_mg'] = map(lambda i: combo_band_dict['limitmags']['lmt_mg'][i], i_sorted_list) + combo_band_dict['limitmags']['t'] = map(lambda i: combo_band_dict['limitmags']['t'][i], i_sorted_list) + + self.ts['combo_band'] = combo_band_dict + ############################### + self.x_sdict.update({'ts': self.ts}) + if self.verbose: + info("converted xml to dict") + + self.coerced_to_dict = True + + + + # TODO(20100211): I may have the following function take a keyword which specifies xml version, and at some point allows the default of simpletimeseries xml (once all code can make use of this xml... assuming they all use db_importer and not mlens) + def source_dict_to_xml(self,sdict): + sss = vo_timeseries.vo_source_preamble + xmllevel = 1 + + #print sdict + ## put in some versioning to start + sss += """%s\n%s\n%s\n""" % \ + (__tab__*xmllevel,__tab__*(xmllevel+1),str(datetime.datetime.utcnow()),os.path.basename(__file__),__version__,__tab__*xmllevel) + if "src_id" in sdict: + sss += "%s%s\n" % (__tab__*xmllevel,sdict['src_id']) + + ## get the positional info + if "ra" in sdict and "dec" in sdict: + sss += "%s\n" % (__tab__*xmllevel) + sss += '%sBest positional information of the source\n' % (__tab__*(xmllevel + 1)) + sss += '%s\n%s\n' % (__tab__*(xmllevel + 1),__tab__*(xmllevel + 2)) + sss += "%s%s\n%s%s\n%s\n" % \ + (__tab__*(xmllevel + 3),str(sdict['ra']),__tab__*(xmllevel + 3),str(sdict['dec']),__tab__*(xmllevel + 2)) + if "ra_rms" in sdict and "dec_rms" in sdict: + xmllevel += 1 + sss += "%s\n" % (__tab__*(xmllevel + 1)) + sss += "%s%s\n%s%s\n%s\n" % \ + (__tab__*(xmllevel + 2),str(sdict['ra_rms']),__tab__*(xmllevel + 2),str(sdict['dec_rms']),__tab__*(xmllevel + 1)) + xmllevel -= 1 + sss += "%s\n" % (__tab__*(xmllevel + 1)) + sss += "%s\n" % (__tab__*xmllevel) + + ## now do the timeseries + if "ts" in sdict: + sss += __tab__*xmllevel + vo_timeseries.vo_timeseries_preamble + xmllevel += 1 + sss += __tab__*xmllevel + vo_timeseries.vo_timeseries_mjd + filts = sdict['ts'].keys() + if self.verbose: + info(" there are %i band resources for the timeseries ... ") + sss += '%s\n' % (__tab__*xmllevel) + for b in filts: + bdata = copy.deepcopy(sdict['ts'][b]) #20090617 dstarr adds deepcopy due to sdict['ts'] being extended with limitmags while originally this sdict['ts'] structure is still accessible to later classes (which expect only regular magnitudes in sdict['ts']). + + # NOTE: KLUDGE: for now I clump both filters together for limiting magnitudes, since + # it will take more of a rework to seperate filters in all TCP code. + if 't' in bdata: + # KLUDGE: I'm also assuming m, m_err exist. + bdata['is_limit'] = [False] * len(bdata['t']) + is_limit = bdata['is_limit'] # 20091102 dstarr adds this line + elif 'limitmags' in bdata: + # This filter had no normal (t,m,m_err) data. Just lim-mags + bdata['is_limit'] = [] + bdata['t'] = [] + bdata['m'] = [] + bdata['m_err'] = [] + + if 'limitmags' in bdata: + bdata['is_limit'].extend([True] * len(bdata['limitmags']['t'])) + bdata['t'].extend(bdata['limitmags']['t']) + bdata['m'].extend(bdata['limitmags']['lmt_mg']) + bdata['m_err'].extend([0.0] * len(bdata['limitmags']['t'])) + + xmllevel += 1 + sss += '%s
\n' % (__tab__*xmllevel,b) + xmllevel += 1 + col = 1 + has_m = has_m_err = has_t = False + if 't' in bdata: + sss += '%s\n' \ + % (__tab__*xmllevel,col) + t = numarray.array(bdata['t']) + tsort = t.argsort() + t = t[tsort] + has_t = True + col += 1 + else: + warning("no time array given for filter %s" % b) + + if 'limitmags' in bdata: + try: + is_limit = numarray.array(bdata['is_limit'])[tsort] + except: + is_limit = numarray.array(bdata['is_limit']) + if "m" in bdata: + sss += '%s\n' \ + % (__tab__*xmllevel,col,b) + has_m = True + try: + m = numarray.array(bdata['m'])[tsort] + except: + m = numarray.array(bdata['m']) + col += 1 + if "m_err" in bdata: + sss += '%s\n' \ + % (__tab__*xmllevel,col,b) + has_m_err = True + try: + m_err = numarray.array(bdata['m_err'])[tsort] + except: + m_err = numarray.array(bdata['m_err']) + col += 1 + + if "objid_candid" in bdata: + ptf_charac_val_list = [] + ptf_charac_name_list = ['a_elip_candid', 'b_elip_candid', 'chip_id', 'dec_candidate', 'dec_subtract', 'dtime_observe', 'dtime_reductn', 'field_id', 'filter_id', 'fourier_factor', 'fwhm_obj_candid', 'fwhm_obj_subtr', 'hp_il', 'hp_iu', 'hp_kern_radius', 'hp_newskybkg', 'hp_newskysig', 'hp_nsx', 'hp_nsy', 'hp_refskybkg', 'hp_refskysig', 'hp_rss', 'hp_tl', 'hp_tu', 'img_id_candid', 'img_id_refer', 'mag_refer', 'mag_sig_refer', 'mag_sig_subtr', 'mag_subtr', 'nn_a_elip', 'nn_b_elip', 'nn_dec', 'nn_distance', 'nn_mag', 'nn_mag_sig', 'nn_ra', 'nn_star_galaxy', 'nn_x', 'nn_y', 'objid_candid', 'objid_subtract', 'perc_cand_saved', 'percent_incres', 'positive_pix_ratio', 'quality_factor', 'ra_candidate', 'ra_subtract', 'signoise_subt_big_ap', 'signoise_subt_normap', 'surf_bright', 'x_candidate', 'x_subtref', 'y_candidate', 'y_subtref', 'zp_candidate', 'zp_reference'] + for charac in ptf_charac_name_list: + #try: + # ptf_charac_val_list[j] = bdata[charac][tsort] + #except: + # ptf_charac_val_list[j] = bdata[charac] + + #ptf_charac_val_list.append(bdata[charac]) + ptf_charac_val_list.append(numarray.array(bdata[charac])[tsort]) + + sss += '%s\n' % (__tab__*xmllevel,charac,col,b) + col += 1 + + sss += "%s\n" % (__tab__*xmllevel) + if has_t: + xmllevel += 1 + sss += "%s\n" % (__tab__*xmllevel) + xmllevel += 1 + for i in range(len(t)): + # # # # + if is_limit[i]: + sss += '%s' % (__tab__*xmllevel,i + 1) + else: + sss += '%s' % (__tab__*xmllevel,i + 1) + sss += "" % t[i] + if has_m: + sss += "" % m[i] + if has_m_err: + sss += "" % m_err[i] + if "objid_candid" in bdata: + # TODO: I need to have ptf_charac_name_list[j][i] in array form, in case there are >1 ptf datapoint + for j in range(len(ptf_charac_name_list)): + sss += "" % float(ptf_charac_val_list[j][i]) + sss += "\n" + sss += "%s\n" % (__tab__*xmllevel) + xmllevel -= 1 + sss += "%s\n" % (__tab__*xmllevel) + xmllevel -= 1 + sss += "%s
%f%f%f%lf
\n" % (__tab__*xmllevel) + xmllevel -= 1 + sss += "%s\n" % (__tab__*xmllevel) + xmllevel -= 1 + sss += __tab__*xmllevel + "\n" + if "features" in sdict: + sss += "%s\n" % (__tab__*xmllevel) + xmllevel += 1 + for filt_name,filt_dict in sdict["features"].items(): + for feat_name,feat_str_val in filt_dict.items(): + sss += "%s\n" % (__tab__*xmllevel) + xmllevel += 1 + sss += '%s%s\n' % (__tab__*xmllevel, feat_name) # or "class=context" + xmllevel += 1 + sss += '%s%s\n' % (__tab__*xmllevel, feat_name) + xmllevel += 1 + #TODO: WANT "unit" :: sss += "%s%s\n" % (__tab__*xmllevel, feat_str_val) + #if feat_name == 'flux_percentile_ratio_mid50': + # print 'yo' + if 'fail' in feat_str_val.lower(): + sss += """%s%s\n""" % (__tab__*xmllevel, feat_str_val) + else: + # 20090129 KLUDGE to discern strings vs floats: + try: + test = float(feat_str_val) + sss += """%s%s\n""" % (__tab__*xmllevel, feat_str_val) + except: + sss += """%s%s\n""" % (__tab__*xmllevel, feat_str_val) + # TODO: add errors here, if known: + sss += """%sunknown\n""" % (__tab__*xmllevel) + ##### TODO: add features: + sss += """%s%s\n""" % (__tab__*xmllevel, filt_name) + sss += """%s\n""" % (__tab__*xmllevel, sdict["feature_docs"][filt_name].get(feat_name,"").replace('\n','').replace('?','__qmark__').replace('&','__amper__')) + xmllevel += 1 + sss += """%s%s\n""" % (__tab__*xmllevel, __svn_id__) + # TODO: not sure the best way to extract SVN version... (latest version under /feature_extract/Code/ ???) + sss += """%s%s\n""" % (__tab__*xmllevel, sdict['feat_gen_date'].replace(' ','T')) + # TODO: Insert some feature-code generated comment here: + sss += """%s"%s"\n""" % (__tab__*xmllevel, feat_str_val) + xmllevel -= 1 + sss += """%s\n""" % (__tab__*xmllevel) + xmllevel -= 3 + sss += "%s\n" % (__tab__*xmllevel) + xmllevel -= 1 + sss += "%s\n" % (__tab__*xmllevel) + + #### + if "class" in sdict: + vosource_class_obj = vosource_classification_obj() + # 20081023: dstarr comments out: + #vosource_class_obj.add_classif_prob(class_name="tutor", + vosource_class_obj.add_classif_prob(class_name=sdict['class'], + prob=1.0, + class_schema_name="tutor", + human_algo="human") + sss += vosource_class_obj.get_class_xml_string() + sss += "\n" + + self.xml_string = sss + self.marshalled_to_xml = True + + + def add_features_to_xml_string(self, signals_list): + """ Given a signals_list (aka parent .signals_list), + Add features to self.x_sdict and self.xml_string (for XML file write). + """ + # KLUDGE: Assume 1 source in signals_list + self.x_sdict['features'] = {} + self.x_sdict['feature_docs'] = {} + + #import datetime + self.x_sdict['feat_gen_date'] = str(datetime.datetime.utcnow()) + + for filter_name,filt_dict in signals_list[0].properties['data'].items(): + self.x_sdict['features'][filter_name] = {} + self.x_sdict['feature_docs'][filter_name] = {} + # KLUDGE: Since scalar values in ['features'] dict are actually + # of type: Code.FeatureExtractor.outputclass, I explicitly cast str: + for feat_name,value_object in signals_list[0].properties['data']\ + [filter_name]['features'].items(): + self.x_sdict['features'][filter_name][feat_name] = str(value_object) + self.x_sdict['feature_docs'][filter_name][feat_name] = \ + str(value_object.__doc__).replace('&','__AMPERSAND__').replace("'",'__SINGLEQUOTE__').replace('"','__DOUBLEQUOTE__')[:500] + self.source_dict_to_xml(self.x_sdict) + + +class PositionExtractor: + def __init__(self, pos=(None,None), radius=0.001, verbose=True, \ + prefer_only_source_search=True, host="localhost", \ + port=8000, doplot=True, use_source_id_in_xml_name=True, \ + do_remote_connection=1, write_xml=True): + """ + radius - search distance (box) in degrees + use_source_id_in_xml_name - in the case where you've asked for an xml file name, setting + this to True will mean that you get a unique xml file out. + """ + self.verbose = verbose + self.allow_search = False + self.pos = pos + self.radius = radius + self.prefer_only_source_search = prefer_only_source_search + self.doplot = doplot + self.write_xml = write_xml + self.use_source_id_in_xml_name=use_source_id_in_xml_name + + if self.radius > MAX_SEARCH_RADIUS: + warning("search radius exceeded. Cutting down to %f deg" % MAX_SEARCH_RADIUS) + self.radius = MAX_SEARCH_RADIUS + self.pos_well_formed = False + if type(self.pos) == type(()): + if len(self.pos) == 2: + if type(self.pos[0]) == type(1.0) and type(self.pos[1]) == type(1.0): + self.pos_well_formed = True + + if do_remote_connection == 1: + self.setup_remote_connection(host=host, port=port) + + def setup_remote_connection(self,host="localhost",port=8000): + import xmlrpclib + info("connecting to the server") + self.server = xmlrpclib.ServerProxy("http://%s:%i" % (host, port)) + self.remote_meth = self.server.system.listMethods() + if 'system.multicall' in self.remote_meth: + self.multicall = True + else: + self.multicall = False + + if "get_sources_for_radec" in self.remote_meth: + self.allow_search = True + self.search_type = "full" + + if self.prefer_only_source_search and ("get_sources_for_radec_assume_in_src_db" in self.remote_meth): + self.allow_search = True + self.search_type = "src" + + def search_pos(self, out_xml_fpath='', summary_ps_fpath='', \ + get_sources_for_radec_method=None, \ + skip_construct_sources=False): + if not self.allow_search: + warning("No search allowed because the server does not have the appropriate method") + return + info("making the call to the server for position %s" % repr(self.pos)) + if get_sources_for_radec_method != None: + info("this could take awhile") + self.rez = get_sources_for_radec_method(self.pos[0],self.pos[1],self.radius, summary_ps_fpath) + elif self.search_type == "full": + info("this could take awhile") + self.rez = self.server.get_sources_for_radec(self.pos[0],self.pos[1],self.radius, summary_ps_fpath) + else: + self.rez = self.server.get_sources_for_radec_assume_in_src_db(self.pos[0],self.pos[1],self.radius) + + if self.verbose: + info("Got %i sources." % len(self.rez)) + + #20080313 dstarr KLUDGE: I want to call this outside, but + # I believe others might call search_pos() in their own code + # so I leave this as the default action: + if not skip_construct_sources: + self.construct_sources(self.rez, out_xml_fpath=out_xml_fpath) + + def construct_sources(self,slist, out_xml_fpath=''): + """ slist is a list of source dictionaries + """ + if type(slist) != type([]): + warning("slist is not a list") + self.sources = [] + return + if len(slist) == 0: + warning("slist is empty list") + self.sources = [] + return + if type(slist[0]) != type({}): + warning("first entry in slist is not a dictionary") + self.sources = [] + return + # 20080127: dstarr thinks this deepcopy() is unnecissary: + #self.sources = [copy.deepcopy(Source(sdict=s, \ + # out_xml_fpath=out_xml_fpath,doplot=self.doplot,\ + # use_source_id_in_xml_fpath= \ + # self.use_source_id_in_xml_name, \ + # write_xml=self.write_xml)) for s in slist] + self.sources = [Source(sdict=s, \ + out_xml_fpath=out_xml_fpath,doplot=self.doplot,\ + use_source_id_in_xml_fpath= \ + self.use_source_id_in_xml_name, \ + write_xml=self.write_xml) for s in slist] + + def summary_plot(self): + import matplotlib + + matplotlib.pylab.hold(False) + matplotlib.pylab.plot([120,111]) + matplotlib.pylab.hold(True) + rr = [] + dd = [] + for s in self.sources: + matplotlib.pylab.scatter([s.d['ra']],[s.d['dec']]) + rr.append(s.d['ra']) + dd.append(s.d['dec']) + #matplotlib.pylab.ylim( (max(yytrema[0]) + 1,min(yytrema[1]) - 0.3) ) + #matplotlib.pylab.xlim( (min(xxtrema[0]) - 10,max(xxtrema[1]) + 10) ) + #print (max(yytrema[1]) + 1,min(yytrema[0])) + #print (min(xxtrema[0]) - 10,max(xxtrema[1]) + 10) + matplotlib.pylab.ylim( (min(dd) - 0.01,max(dd) + 0.01) ) + matplotlib.pylab.xlim( (min(rr) - 0.01,max(rr) + 0.01) ) + + matplotlib.pylab.xlabel('RA [deg]') + matplotlib.pylab.ylabel('DEC [dec]') + matplotlib.pylab.show() + + def ds9_summary(self,fname="tmp.reg"): + """ + makes a ds9 region file from all the sources. Source number and the number of obs in each filter is given + + TODO: make error ellipses instead of points + """ + pream = \ +""" +# Region file format: DS9 version 4.0 +global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source +fk5 +""" + f = open(fname,"w") + f.write(pream) + for s in self.sources: + (ra,dec) = (str(s.d['ra']),str(s.d['dec'])) + src_id = s.d['src_id'] + vv = s.d['ts'].values() + ss = [band + "=" + str(len(val['t'])) for band, val in s.d['ts'].items()] + label = "s" + str(src_id) + ":" + ";".join(ss) + f.write("point(%s,%s) # point=circle text={%s}\n" % (ra,dec,label)) + f.close() + print("wrote %s" % fname) + + def get_search_help(self): + if self.allow_search: + if self.search_type == "full": + print(self.server.system.methodHelp("get_sources_for_radec")) + else: + print(self.server.system.methodHelp("get_sources_for_radec_assume_in_src_db")) + return + + def __del__(self): + try: + info("disconnecting from the server") + del self.server + except: + pass + +class TestClass: + """ Testing class for python-nose tests. + Useful for refactoring and adding new XML schema + + NOTE: Make sure that environment variable is set to: + PYTHONOPTIMIZE="" + NOTE: Make sure that no ".pyo" files exist in source directories. + + TO RUN python-nose test in SHELL: + nosetests --tests=db_importer + + OR more verbosely: + nosetests -s -vv --tests=db_importer + + TO RUN python-nose test in PDB: + + BREAK on any ERROR: + nosetests --pdb --tests=db_importer + + BREAK on TEST FAILURE: + nosetests --pdb-failures --tests=db_importer + + + TODO TESTS: + - read various things from an testing XML file. + - write a feature & (brute force?) read from xmlfile? + - write a mag,time epoch & (brute force?) read from xmlfile? + - write a classification & (brute force?) read from xmlfile? + """ + def setUp(self): + """ Performed at the beginning of each test + """ + self.temp_rw_vosource_fpath = '/tmp/db_importer_tests.vosource.xml' + + + def tearDown(self): + """ Performed at the end of each test + """ + pass + + + def make_assertions_for__vosource_1990af(self,dbi_src): + """ For $TCP_DIR/Data/1990af.xml + """ + from nose import tools as nt + + nt.assert_true( dbi_src.x_sdict['src_id'] == 14483) + nt.assert_true( dbi_src.x_sdict['class'] =='Type Ia Supernovae') + nt.assert_true( ((dbi_src.x_sdict['ra'] > 323.74216) and + (dbi_src.x_sdict['ra'] < 323.74217))) + nt.assert_true( dbi_src.x_sdict['ts']['B:table4598']['m'][2] == 17.939) + nt.assert_true( ((dbi_src.x_sdict['ts']['B:table4598']['m_err'][3] > 0.030) and + (dbi_src.x_sdict['ts']['B:table4598']['m_err'][3] < 0.032))) + nt.assert_true( ((dbi_src.x_sdict['ts']['B:table4598']['t'][1] > 2448193.53) and + (dbi_src.x_sdict['ts']['B:table4598']['t'][1] < 2448193.55))) + + + def make_assertions_for__vosource_tutor12881(self,dbi_src): + """ For $TCP_DIR/Data/vosource_tutor12881.xml: + """ + from nose import tools as nt + + nt.assert_true( dbi_src.x_sdict['src_id'] == 12881) + nt.assert_true( dbi_src.x_sdict['class'] =='RR Lyrae, Fundamental Mode') + nt.assert_true( ((dbi_src.x_sdict['ra'] > 30.47567) and + (dbi_src.x_sdict['ra'] < 30.47568))) + nt.assert_true( dbi_src.x_sdict['ts']['H:table1384']['m'][2] == 11.5783) + nt.assert_true( ((dbi_src.x_sdict['ts']['H:table1384']['m_err'][3] > 0.0429) and + (dbi_src.x_sdict['ts']['H:table1384']['m_err'][3] < 0.0431))) + nt.assert_true( ((dbi_src.x_sdict['ts']['H:table1384']['t'][1] > 7904.22188) and + (dbi_src.x_sdict['ts']['H:table1384']['t'][1] < 7904.2219))) + + + def test_case_parse_vosource_file(self): + """ Tests related to the parsed vosource xml + """ + # old TCP vosource: + vosource_fpath = os.path.expandvars("$TCP_DIR/Data/vosource_tutor12881.xml") + dbi_src = Source(make_dict_if_given_xml=True, + make_xml_if_given_dict=False, + doplot=False, + xml_handle=vosource_fpath) + self.make_assertions_for__vosource_tutor12881(dbi_src) + + # TUTOR vosource: + vosource_fpath = os.path.expandvars("$TCP_DIR/Data/1990af.xml") + dbi_src = Source(make_dict_if_given_xml=True, + make_xml_if_given_dict=False, + doplot=False, + xml_handle=vosource_fpath) + self.make_assertions_for__vosource_1990af(dbi_src) + + + + + def test_case_generated_vosource_xml_string(self): + """ Tests related to writing a internal sdict to VOSource XML string. + """ + # TODO: test that I want to pickle the test_feature_algorithms's signals_list[0] and open it here + # ( in the class) and then write out a vosource xml string & then test that all the expected are in place. + vosource_fpath = os.path.expandvars("$TCP_DIR/Data/vosource_tutor12881.xml")#old TCP vosource + + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR","") + \ + 'Software/feature_extract')) + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR","") + \ + 'Software/feature_extract/Code')) + from Code import generators_importers + from . import db_importer + + signals_list = [] + gen = generators_importers.from_xml(signals_list) + + gen.generate(xml_handle=vosource_fpath) + gen.sig.add_features_to_xml_string(gen.signals_list) + + from nose import tools as nt + nt.assert_true( ((float(str(signals_list[0].properties['data']['multiband']['features']['ecpl'])) > 25.2720) and + (float(str(signals_list[0].properties['data']['multiband']['features']['ecpl'])) < 25.2721))) + nt.assert_true( ((float(str(signals_list[0].properties['data']['H:table1384']['features']['median'])) > 11.9414) and + (float(str(signals_list[0].properties['data']['H:table1384']['features']['median'])) < 11.9416))) + + # TODO: do schema / formatting tests on the xml string : + # gen.sig.xml_string + + ### Now write this new VOSource XML to file, read again, and test values/format are correct. + gen.sig.write_xml(out_xml_fpath=self.temp_rw_vosource_fpath) + + dbi_src = Source(make_dict_if_given_xml=True, + make_xml_if_given_dict=False, + doplot=False, + xml_handle=self.temp_rw_vosource_fpath) + + # NOTE: This function uses new temp XML, but with original assertions: + self.make_assertions_for__vosource_tutor12881(dbi_src) + + +if __name__ == "__main__": + + tc = TestClass() + tc.setUp() + #tc.test_case_parse_vosource_file() + tc.test_case_generated_vosource_xml_string() + tc.tearDown() + + sys.exit() + setup_logging() + info("started.") + dotest1() + info("finished.") + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/.__init__.py.swp b/mltsp/TCP/Software/feature_extract/Code/extractors/.__init__.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..b2dba1ea63c6754f308deb5bcb04381a62e9dc30 GIT binary patch literal 28672 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 q^!Q4EY7 0: +# tmp = "from %s import " + ", ".join([x for x in zclass]) +# exec tmp""" % (n,n) +# exec tmp +# except: +# print "could not import %s" % n + + + +#__all__=["chi2extractor","dc_extractor","dist_from_u_extractor","fourierextractor","linear_extractor","max_slope_extractor","medianextractor","beyond1std_extractor","stdvs_from_u_extractor","old_dcextractor","power_spectrum_extractor","power_extractor","pct_80_montecarlo_extractor","pct_90_montecarlo_extractor","pct_95_montecarlo_extractor","pct_99_montecarlo_extractor","significant_80_power_extractor","significant_90_power_extractor","significant_95_power_extractor","significant_99_power_extractor","first_freq_extractor","sine_fit_extractor","sine_leastsq_extractor","skew_extractor","stdextractor","wei_av_uncertainty_extractor","weighted_average_extractor","lomb_extractor","first_lomb_extractor","sine_lomb_extractor","second_extractor","third_extractor","second_lomb_extractor"] diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/amplitude_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/amplitude_extractor.py new file mode 100644 index 00000000..d4369f7b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/amplitude_extractor.py @@ -0,0 +1,198 @@ +try: + from ..FeatureExtractor import FeatureExtractor +except: + import os + ppath = os.environ.get('PYTHONPATH') + os.environ.update({'PYTHONPATH': ppath + ":" + os.path.realpath("..")}) + #print os.environ.get("PYTHONPATH") + from FeatureExtractor import FeatureExtractor + +import unittest +import sys +from scipy import stats +import numpy + +# TODO scipy.stats.scoreatpercentile is deprecated; should use numpy.percentile +class amplitude_extractor(FeatureExtractor): + """ Returns the half the difference between the maximum magnitude and the minimum magnitude. + Note this will also work for data that is given in terms of flux. So in a sense, it's + a volitile feature across different datasets. + + Suggestion: use the new percent_amplitude below instead. Turn this one off? + + """ + active = True + extname = 'amplitude' #extractor's name + def extract(self): + maxm = self.fetch_extr('max') # maximum magnitude + minm = self.fetch_extr('min') # minimum magnitude + try: + amplitude = maxm - minm + except: + return None + #print ("absolute",amplitude) + + return amplitude/2.0 + +# TODO what is up with this assumed_unit stuff? this seems well-defined for any units +# in general, should we assume things are log-scale? +class percent_amplitude_extractor(FeatureExtractor): + """ Returns the largest percentage difference between the maximum + magnitude and the minimum magnitude relative to the median. + + assumes that the flux data is in units of magnitudes unless flux_data_unit has been set otherwise. + """ + active = True + extname = 'percent_amplitude' #extractor's name + assumed_unit = "mag" # 20100518: actually, I think a unitless percentage is returned. + def extract(self): +# TODO is there really any reason to call these extractors instead of just Python functions... + maxm = self.fetch_extr('max') # maximum magnitude + minm = self.fetch_extr('min') # minimum magnitude + medd = self.fetch_extr("median") + try: + unit = self.flux_data_unit + except NameError: + unit = self.assumed_unit + + try: + if unit in ['mag','mags','magnitude']: + maxm = 10**(-0.4*maxm) + minm = 10**(-0.4*minm) + medd = 10**(-0.4*medd) + + amplitude = maxm - minm + #20100916dstarr comments this out since the different numerators seems not very useful/consistant: + #tmp = [(maxm - medd)/medd, medd/(maxm - medd), (minm - medd)/medd, medd/(minm - medd)] + #20100916dstarr adds this instead: + tmp = [abs((maxm - medd)/medd), abs((minm - medd)/medd)] + #print ("percent",max(tmp)) + return max(tmp) + except: + return None + + +class percent_difference_flux_percentile_extractor(FeatureExtractor): + """ The 2nd & 98th flux percentiles are subtracted and converted into magnitude. + Assumes that the flux data is in units of magnitudes unless flux_data_unit has been set otherwise. + This algorithms is mentioned by Eyer (2005) arXiv:astro-ph/0511458v1 + and he references Evans & Belokurov (2005). + + I actually use 5th and 95th since we could be interested in sources with less than 50-100 epochs. + + """ + active = True + extname = 'percent_difference_flux_percentile' #extractor's name + assumed_unit = "mag" # 20100518: actually, I think a unitless percentage is returned. + def extract(self): + watts_m2 = self.fetch_extr('watt_per_m2_flux') + try: + flux_high = stats.scoreatpercentile(watts_m2, 95) + flux_low = stats.scoreatpercentile(watts_m2, 5) + flux_50 = stats.scoreatpercentile(watts_m2, 50) + return (flux_high - flux_low) / flux_50 + except: + return None + + +class flux_percentile_ratio_mid20_extractor(FeatureExtractor): + """ + mid20: A ratio of (60 flux percentile - 40 flux percentile) / + (95 flux percentile - 5 flux percentile) + """ + active = True + extname = 'flux_percentile_ratio_mid20' #extractor's name + assumed_unit = "mag" # 20100518: actually, I think a unitless percentage is returned. + def extract(self): + watts_m2 = self.fetch_extr('watt_per_m2_flux') + try: + flux_high = stats.scoreatpercentile(watts_m2, 60) + flux_low = stats.scoreatpercentile(watts_m2, 40) + flux_diff_ref = stats.scoreatpercentile(watts_m2, 95) - \ + stats.scoreatpercentile(watts_m2, 5) + return (flux_high - flux_low) / flux_diff_ref + except: + return None + + +class flux_percentile_ratio_mid35_extractor(FeatureExtractor): + """ + mid35: A ratio of (67.5 flux percentile - 32.5 flux percentile) / + (95 flux percentile - 5 flux percentile) + """ + active = True + extname = 'flux_percentile_ratio_mid35' #extractor's name + assumed_unit = "mag" # 20100518: actually, I think a unitless percentage is returned. + def extract(self): + watts_m2 = self.fetch_extr('watt_per_m2_flux') + try: + flux_high = stats.scoreatpercentile(watts_m2, 67.5) + flux_low = stats.scoreatpercentile(watts_m2, 32.5) + flux_diff_ref = stats.scoreatpercentile(watts_m2, 95) - \ + stats.scoreatpercentile(watts_m2, 5) + return (flux_high - flux_low) / flux_diff_ref + except: + return None + + +class flux_percentile_ratio_mid50_extractor(FeatureExtractor): + """ + mid50: A ratio of (75 flux percentile - 25 flux percentile) / + (95 flux percentile - 5 flux percentile) + """ + active = True + extname = 'flux_percentile_ratio_mid50' #extractor's name + assumed_unit = "mag" # 20100518: actually, I think a unitless percentage is returned. + def extract(self): + watts_m2 = self.fetch_extr('watt_per_m2_flux') + try: + flux_high = stats.scoreatpercentile(watts_m2, 75) + flux_low = stats.scoreatpercentile(watts_m2, 25) + flux_diff_ref = stats.scoreatpercentile(watts_m2, 95) - \ + stats.scoreatpercentile(watts_m2, 5) + return (flux_high - flux_low) / flux_diff_ref + except: + return None + + +class flux_percentile_ratio_mid65_extractor(FeatureExtractor): + """ + mid65: A ratio of (82.5 flux percentile - 17.5 flux percentile) / + (95 flux percentile - 5 flux percentile) + """ + active = True + extname = 'flux_percentile_ratio_mid65' #extractor's name + assumed_unit = "mag" # 20100518: actually, I think a unitless percentage is returned. + def extract(self): + watts_m2 = self.fetch_extr('watt_per_m2_flux') + try: + flux_high = stats.scoreatpercentile(watts_m2, 82.5) + flux_low = stats.scoreatpercentile(watts_m2, 17.5) + flux_diff_ref = stats.scoreatpercentile(watts_m2, 95) - \ + stats.scoreatpercentile(watts_m2, 5) + return (flux_high - flux_low) / flux_diff_ref + except: + return None + +class flux_percentile_ratio_mid80_extractor(FeatureExtractor): + """ + mid80: A ratio of (90 flux percentile - 10 flux percentile) / + (95 flux percentile - 5 flux percentile) + """ + active = True + extname = 'flux_percentile_ratio_mid80' #extractor's name + assumed_unit = "mag" # 20100518: actually, I think a unitless percentage is returned. + def extract(self): + watts_m2 = self.fetch_extr('watt_per_m2_flux') + try: + flux_high = stats.scoreatpercentile(watts_m2, 90) + flux_low = stats.scoreatpercentile(watts_m2, 10) + flux_diff_ref = stats.scoreatpercentile(watts_m2, 95) - \ + stats.scoreatpercentile(watts_m2, 5) + return (flux_high - flux_low) / flux_diff_ref + except: + return None + + +if __name__ == '__main__': + unittest.main() diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/ar_is_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/ar_is_extractor.py new file mode 100644 index 00000000..8cecc3c9 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/ar_is_extractor.py @@ -0,0 +1,76 @@ +from ..FeatureExtractor import FeatureExtractor + +import scipy.optimize as optim +import numpy + +class ar_is_theta_extractor(FeatureExtractor): + ''' + AR-IS(1) model of Erdogan et al. (2005) + http://www.siam.org/proceedings/datamining/2005/dm05_74erdogane.pdf + + This model should be fit on the *** Lomb-Scargle model subtracted data *** + + Model: x(t + delta) = theta^delta * x(t) + sigma_delta * eps + eps ~ N(0,1) + ''' + active = True + extname = 'ar_is_theta' + + + def sum_of_sq(self, theta,delta,x): + return numpy.sum((x[1:] - theta**delta * x[:-1])**2) + + def extract(self): + try: + t = self.time_data + m = self.flux_data + n = len(t) + +# TODO could be more flexible here; do we always want to subtract the full LS fit? +# maybe just the polynomial fit? looks like that's what the paper does + # get the LS model residuals (for principal frequency) + lomb_dict = self.fetch_extr('lomb_scargle') + model = lomb_dict.get('freq1_model',[]) + x = m - model + + delta = t[1:] - t[:-1] + + # estimate theta + theta = optim.fminbound(self.sum_of_sq, x1=0., x2=1., args=(delta, x)) + + return theta + except: + return 0.0 + + + + +class ar_is_sigma_extractor(FeatureExtractor): + ''' returns the ratio of phase_dispersion-estimated and lomb_scargle-estimated frequencies ''' + active = True + extname = 'ar_is_sigma' + def extract(self): + try: + t = self.time_data + m = self.flux_data + n = len(t) + + # get the LS model residuals (for principal frequency) + lomb_dict = self.fetch_extr('lomb_scargle') + model = lomb_dict.get('freq1_model',[]) + x = m - model + + delta = t[1:] - t[:-1] + + # get theta + theta = self.fetch_extr('ar_is_theta') + + # estimate sigma + z = x[1:] - theta**delta * x[:-1] + sigma = numpy.sqrt( 1./n * numpy.sum( z**2 / (1-theta**(2*delta))/(1-theta**2))) + return sigma + except: + return 0.0 + + # estimate sigma + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/beyond1std_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/beyond1std_extractor.py new file mode 100644 index 00000000..b637c556 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/beyond1std_extractor.py @@ -0,0 +1,22 @@ +from ..FeatureExtractor import FeatureExtractor + +# TODO simplify +class beyond1std_extractor(FeatureExtractor): + """ calculates the percentage of points that lie beyond one standard deviation from the weighted mean """ + active = True + extname = 'beyond1std' #extractor's name + def extract(self): + self.x_devs() + stdvs_from_u = self.fetch_extr('stdvs_from_u') + dvs_from_u = 0 + for i in stdvs_from_u: + if i > self.devs: + dvs_from_u += 1 + try: + ret_val = dvs_from_u / float(len(stdvs_from_u)) + except: + self.ex_error(text="beyond1std_extractor") + return ret_val +# TODO why + def x_devs(self): # how many deviations ? + self.devs = 1.0 diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/chi2_data_error_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/chi2_data_error_extractor.py new file mode 100644 index 00000000..1d4e584a --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/chi2_data_error_extractor.py @@ -0,0 +1,9 @@ +from ..FeatureExtractor import FeatureExtractor + +class chi2_data_error_extractor(FeatureExtractor): + active = True + extname = 'chi2_data_error' # identifier used in final extracted value dict. + def extract(self): + mean_val = self.fetch_extr('weighted_average') + chi2 = sum( ((self.flux_data-mean_val)/self.rms_data)**2 ) + return chi2 diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/chi2_per_deg_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/chi2_per_deg_extractor.py new file mode 100644 index 00000000..1b23c36f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/chi2_per_deg_extractor.py @@ -0,0 +1,11 @@ +from ..FeatureExtractor import FeatureExtractor + +class chi2_per_deg_extractor(FeatureExtractor): #Chi Square per degree of freedom + active = 1 + active = True + extname = 'chi2_per_deg' #extractor's name + def extract(self): + chi2 = self.fetch_extr('chi2') + degrees = len(self.flux_data) - 1 + chi2_per_degrees = chi2 / degrees + return chi2_per_degrees diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/chi2extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/chi2extractor.py new file mode 100644 index 00000000..fff70c0b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/chi2extractor.py @@ -0,0 +1,11 @@ +from __future__ import absolute_import +from ..FeatureExtractor import FeatureExtractor +from .common_functions import ChiSquare + +class chi2extractor(FeatureExtractor,ChiSquare): + active = True + extname = 'chi2' #extractor's name + def extract(self): + dc = self.fetch_extr('dc') + chisquare = self.chi_square_sum(self.flux_data,lambda x: dc,x=self.time_data,rms=self.rms_data) + return chisquare \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light.py b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light.py new file mode 100644 index 00000000..a4155ec0 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light.py @@ -0,0 +1,25 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class closest_in_light(ContextFeatureExtractor): + """distance_in_arcmin_to_nearest_galaxy""" + active = True + extname = 'closest_in_light' #extractor's name + + light_cutoff = 4.0 ## dont report anything farther away than this + verbose = False + def extract(self): + n = self.fetch_extr('interng') + + try: + tmp = n["closest_in_light"] + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + + if tmp is None or tmp > self.light_cutoff: + rez = None + else: + rez = tmp + if self.verbose: + print(n) + return rez diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_absolute_bmag.py b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_absolute_bmag.py new file mode 100644 index 00000000..7cfbbbd2 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_absolute_bmag.py @@ -0,0 +1,26 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class closest_in_light_absolute_bmag(ContextFeatureExtractor): + """closest_light_absolute_bmag""" + active = True + extname = 'closest_light_absolute_bmag' #extractor's name + + light_cutoff = 4.0 ## dont report anything farther away than this + verbose = False + def extract(self): + n = self.fetch_extr('interng') + + try: + tmp = n["closest_in_light"] + ret = n["closest_in_light_absolute_bmag"] + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + + if tmp is None or tmp > self.light_cutoff: + rez = None + else: + rez = ret + if self.verbose: + print(n) + return rez diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_angle_from_major_axis.py b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_angle_from_major_axis.py new file mode 100644 index 00000000..1246a10f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_angle_from_major_axis.py @@ -0,0 +1,26 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class closest_in_light_angle_from_major_axis(ContextFeatureExtractor): + """closest_light_angle_from_major_axis""" + active = True + extname = 'closest_light_angle_from_major_axis' #extractor's name + + light_cutoff = 4.0 ## dont report anything farther away than this + verbose = False + def extract(self): + n = self.fetch_extr('interng') + + try: + tmp = n["closest_in_light"] + ret = n["closest_in_light_angle_from_major_axis"] + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + + if tmp is None or tmp > self.light_cutoff: + rez = None + else: + rez = ret + if self.verbose: + print(n) + return rez diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_angular_offset_in_arcmin.py b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_angular_offset_in_arcmin.py new file mode 100644 index 00000000..9cb48827 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_angular_offset_in_arcmin.py @@ -0,0 +1,26 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class closest_in_light_angular_offset_in_arcmin(ContextFeatureExtractor): + """closest_light_angular_offset_in_arcmin""" + active = True + extname = 'closest_light_angular_offset_in_arcmin' #extractor's name + + light_cutoff = 4.0 ## dont report anything farther away than this + verbose = False + def extract(self): + n = self.fetch_extr('interng') + + try: + tmp = n["closest_in_light"] + ret = n["closest_in_light_angular_offset_in_arcmin"] + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + + if tmp is None or tmp > self.light_cutoff: + rez = None + else: + rez = ret + if self.verbose: + print(n) + return rez diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_dm.py b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_dm.py new file mode 100644 index 00000000..a6eebb53 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_dm.py @@ -0,0 +1,26 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class closest_in_light_dm(ContextFeatureExtractor): + """closest_light_dm""" + active = True + extname = 'closest_light_dm' #extractor's name + + light_cutoff = 4.0 ## dont report anything farther away than this + verbose = False + def extract(self): + n = self.fetch_extr('interng') + + try: + tmp = n["closest_in_light"] + ret = n["closest_in_light_dm"] + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + + if tmp is None or tmp > self.light_cutoff: + rez = None + else: + rez = ret + if self.verbose: + print(n) + return rez diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_physical_offset_in_kpc.py b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_physical_offset_in_kpc.py new file mode 100644 index 00000000..26044d72 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_physical_offset_in_kpc.py @@ -0,0 +1,26 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class closest_in_light_physical_offset_in_kpc(ContextFeatureExtractor): + """closest_light_physical_offset_in_kpc""" + active = True + extname = 'closest_light_physical_offset_in_kpc' #extractor's name + + light_cutoff = 4.0 ## dont report anything farther away than this + verbose = False + def extract(self): + n = self.fetch_extr('interng') + + try: + tmp = n["closest_in_light"] + ret = n["closest_in_light_physical_offset_in_kpc"] + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + + if tmp is None or tmp > self.light_cutoff: + rez = None + else: + rez = ret + if self.verbose: + print(n) + return rez diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_ttype.py b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_ttype.py new file mode 100644 index 00000000..c92d24ae --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/closest_in_light_ttype.py @@ -0,0 +1,26 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class closest_in_light_ttype(ContextFeatureExtractor): + """closest_light_ttype""" + active = True + extname = 'closest_light_ttype' #extractor's name + + light_cutoff = 4.0 ## dont report anything farther away than this + verbose = False + def extract(self): + n = self.fetch_extr('interng') + + try: + tmp = n["closest_in_light"] + ret = n["closest_in_light_ttype"] + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + + if tmp is None or tmp > self.light_cutoff: + rez = None + else: + rez = ret + if self.verbose: + print(n) + return rez diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/color_diff_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/color_diff_extractor.py new file mode 100644 index 00000000..6be9e7b4 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/color_diff_extractor.py @@ -0,0 +1,103 @@ +from ..FeatureExtractor import FeatureExtractor, InterExtractor + +#class static_colors_extractor(FeatureExtractor): # Using this will add a 'X' feature in vosource xml whose value is a string representation of the returned od dict. (using internal_use_only=False, active=False) +class static_colors_extractor(InterExtractor): + """ Retrieve non timeseries colors (average, or single measurment) + + These colors are not intended to be used as features, but instead used + in color difference features. + + Initially coded to use cdsclient NOMAD colors. + + """ + #active = False # TODO probably want False + internal_use_only = False # if set True, then seems to run all X code for each sub-feature + active = True # if set False, then seems to run all X code for each sub-feature + extname = 'static_colors' #extractor's name + + def extract(self): + """ TODO: want to check if self.static_colors exists of len() != 0 + - if not, then want to retrieve from NOMAD servers + - Maybe these values will be inserted prior to feature generation by some code which has cached / inmemory access to NOMAD info for all TUTOR sources - in order to remove the need for netowrk or disk access. + """ + #self.static_colors = {'B':15.900, + # 'V':15.600, # None + # 'R':15.370, + # 'J':15.617, + # 'H':15.496, + # 'K':14.641} + + self.static_band_names = ['B:NOMAD', 'V:NOMAD', 'R:NOMAD', 'J:NOMAD', 'H:NOMAD', 'K:NOMAD', 'extinct_bv'] + self.static_colors = {} + for band in self.static_band_names: + #self.static_colors[band] = self.properties['data'][band]['input']['flux_data'][0] + self.static_colors[band] = self.properties['data'].get(band,{}) \ + .get('input',{}) \ + .get('flux_data',[None])[0] + return self.static_colors + + +class color_diff_jh_extractor(FeatureExtractor): + """ Generate color difference features using non timeseries, static or + average color magnitude measurements. Initially coded to use + cdsclient NOMAD colors. + """ + active = True + extname = 'color_diff_jh' #extractor's name + color_name1 = 'J:NOMAD' + color_name2 = 'H:NOMAD' + + def extract(self): + + self.static_colors = self.properties['data'][self.band]['inter']['static_colors'].result + + color_1 = self.static_colors[self.color_name1] + color_2 = self.static_colors[self.color_name2] + + if ((color_1 != -99) and (color_1 != None) and (color_2 != -99) and (color_2 != None)): + return color_1 - color_2 + else: + return None + + +class color_diff_hk_extractor(color_diff_jh_extractor): + extname = 'color_diff_hk' + color_name1 = 'H:NOMAD' + color_name2 = 'K:NOMAD' + +class color_diff_bj_extractor(color_diff_jh_extractor): + """ See color_diff_jh_extractor docstring. + B-J chosen since it combines a survey with 2mass (which we have J-H and H-K features) + """ + extname = 'color_diff_bj' + color_name1 = 'B:NOMAD' + color_name2 = 'J:NOMAD' + +class color_diff_vj_extractor(color_diff_jh_extractor): + """ See color_diff_jh_extractor docstring. + V-J chosen since it combines a survey with 2mass (which we have J-H and H-K features) + """ + extname = 'color_diff_vj' + color_name1 = 'V:NOMAD' + color_name2 = 'J:NOMAD' + +class color_diff_rj_extractor(color_diff_jh_extractor): + """ See color_diff_jh_extractor docstring. + R-J chosen since it combines a survey with 2mass (which we have J-H and H-K features) + """ + extname = 'color_diff_rj' + color_name1 = 'R:NOMAD' + color_name2 = 'J:NOMAD' + +class color_bv_extinction_extractor(FeatureExtractor): + """ NED galactic extinction estimate from ned.ipac.caltech.edu given an ra,dec. + This is the E(B-V) value from G. Schlegel et al. 1998ApJ..500..525S. + This value is stored in TCP/Data/best_nomad_src_list for a srcid, along with NOMAD colors. + """ + active = True + extname = 'color_bv_extinction' #extractor's name + + def extract(self): + self.static_colors = self.properties['data'][self.band]['inter']['static_colors'].result + + return self.static_colors['extinct_bv'] diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/ChiSquare.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/ChiSquare.py new file mode 100644 index 00000000..70cb6dc1 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/ChiSquare.py @@ -0,0 +1,26 @@ +import numpy +from numpy import random +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass + +# TODO I think this is all pretty unnecessary, just use weighted least squares +class ChiSquare(object): #gives extractors the ability to calculate chi squares + def chi_square_sum(self,y,f,x=None,rms=None): + """ inputs: [y]-data (array) [f]unction (function), [x]-axis [rms] noise (array)""" + chi2=self.chi_square(y,f,x,rms) + chi2_sum = chi2.sum() + return chi2_sum + def chi_square(self,y,f,x=None,rms=None): + """ inputs: [y]-data (array) [f]unction (function), [x]-axis [rms] noise (array)""" + if rms is None: + rms = ones(len(y)) + if x is None: + x = range(len(y)) + chi2_total = 0.0 + fx = f(x) +# print 'fx',fx + chi2 = numpy.power(y - fx,2)/numpy.power(rms,2) + return chi2 diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/Example_Methods.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/Example_Methods.py new file mode 100644 index 00000000..164acf79 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/Example_Methods.py @@ -0,0 +1,28 @@ +import numpy +from numpy import random +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass + +class Example_Methods(object): # Extractors which inherit this object can make use of these methods. + def example_main_method(self,y,f,x=None,rms=None): + """ Inputs: + [y]-data (array) + [f]unction (function) + [x]-axis (array) + [rms] noise (array) + """ + # Always initialize these in-case they aren't defined: + if rms is None: + rms = ones(len(y)) + if x is None: + x = range(len(y)) + + # Do work here. Call inherited methods if needed. + # - NOTE: use numpy module for basic math/array tasks. + + # Return a scalar float: + return sum(y) + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/__init__.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/__init__.py new file mode 100644 index 00000000..86b7fc69 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/__init__.py @@ -0,0 +1,2 @@ +from .ChiSquare import ChiSquare +from .Example_Methods import Example_Methods diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_eigs.h b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_eigs.h new file mode 100644 index 00000000..e8aeb446 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_eigs.h @@ -0,0 +1,138 @@ +#include + +inline double SQR(double a) { + return (a == 0.0 ? 0.0 : a*a); +} + +inline double SIGN(double a,double b) { + return ((b) >= 0.0 ? fabs(a) : -fabs(a)); +} + +double pythag(double a, double b) { + double absa,absb; + absa=fabs(a); + absb=fabs(b); + if (absa > absb) return absa*sqrt(1.0+SQR(absb/absa)); + else return (absb == 0.0 ? 0.0 : absb*sqrt(1.0+SQR(absa/absb))); +} + +static inline void tred2(double a[], int n, double d[], double e[]) { + int l,k,j,i; + double scale,hh,h,g,f; + + for (i=n-1;i>=1;i--) { + l=i-1; + h=scale=0.0; + if (l > 0) { + for (k=0;k<=l;k++) + scale += fabs(a[k+i*n]); + if (scale == 0.0) + e[i]=a[l+i*n]; + else { + for (k=0;k<=l;k++) { + a[k+i*n] /= scale; + h += a[k+i*n]*a[k+i*n]; + } + f=a[l+i*n]; + g=(f >= 0.0 ? -sqrt(h) : sqrt(h)); + e[i]=scale*g; + h -= f*g; + a[l+i*n]=f-g; + f=0.0; + for (j=0;j<=l;j++) { + a[i+j*n]=a[j+i*n]/h; + g=0.0; + for (k=0;k<=j;k++) + g += a[k+j*n]*a[k+i*n]; + for (k=j+1;k<=l;k++) + g += a[j+k*n]*a[k+i*n]; + e[j]=g/h; + f += e[j]*a[j+i*n]; + } + hh=f/(h+h); + for (j=0;j<=l;j++) { + f=a[j+i*n]; + e[j]=g=e[j]-hh*f; + for (k=0;k<=j;k++) + a[k+j*n] -= (f*e[k]+g*a[k+i*n]); + } + } + } else + e[i]=a[l+i*n]; + d[i]=h; + } + d[0]=0.0; + e[0]=0.0; + for (i=0;i=l;i--) { + f=s*e[i]; + b=c*e[i]; + e[i+1]=(r=pythag(f,g)); + if (r == 0.0) { + d[i+1] -= p; + e[m]=0.0; + break; + } + s=f/r; + c=g/r; + g=d[i+1]-p; + r=(d[i]-g)*s+2.0*c*b; + d[i+1]=g+(p=s*r); + g=c*r-b; + for (k=0;k= l) continue; + d[l] -= p; + e[l]=g; + e[m]=0.0; + } + } while (m != l); + } +} + +static inline void get_eigs(int np,double x[],double d[]) { + double e[np]; + tred2(x,np,d,e); + tqli(d,e,np,x); +} diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.h b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.h new file mode 100644 index 00000000..1c399669 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.h @@ -0,0 +1,226 @@ +#include +#include "_eigs.h" + +static inline void copy_sincos (int numt, double sinx0[], double cosx0[], double sinx[], double cosx[]) { + int i; + for (i=0;i0) px = ( c2*sh*sh - 2.*cs*ch*sh + s2*ch*ch ) / detm; + return px; +} + +static inline void calc_dotprod(int numt, double sinx[], double cosx[], double wt[], int dord, double *st, double *ct) { + int i; + unsigned long n2=numt*dord; + for (*st=0,*ct=0,i=0;ipxmax) { + pxmax=px; + *ifreq = i; + } + update_sincos(numt, sinx_smallstep, cosx_smallstep, sinx1, cosx1, 0); + } + copy_sincos(numt,sinx,cosx,sinx1,cosx1); + if (*ifreqpx_max && Tr>0) { + px_max = px; + lambda_best = lambda; + *Trace = Tr; + } + lambda *= dlambda; + } + if (lambda_best-1.e-5>start) start=lambda_best/dlambda; + else break; + if(lambda_best+1.e-5psd0max && psdmax==0) { + psd0max = psd[j]; + copy_sincos(numt,sinx,cosx,sinx2,cosx2); + jmax = j; + } + // refine the fit around significant sin+cos fits + if (psd[j]>(double)psdmin) { + // first let the frequency vary slightly + px = do_lomb_zoom(numt,detrend_order, cn, sinx, cosx, sinx1, cosx1, sinx_back, cosx_back, sinx_smallstep, cosx_smallstep, wth, freq_zoom, &ifr); + lambda = *lambda0; + // now fit a multi-harmonic model with generalized cross-validation to avoid over-fitting + psd[j] = refine_psd(numt,nharm,detrend_order,hat_matr,hat0,hat_hat,sinx1,cosx1,wth,cn,soln,&lambda,lambda0_range,chi0,tone_control,&Trace,0); + if (psd[j]>psdmax) { + copy_sincos(numt,sinx1,cosx1,sinx2,cosx2); + psdmax=psd[j]; + *ifreq = ifr; + jmax = j; + } + } + update_sincos(numt, sinx_step, cosx_step, sinx, cosx, 0); + } + // finally, rerun at the best-fit period so we get some statistics + psd[jmax] = refine_psd(numt,nharm,detrend_order,hat_matr,hat0,hat_hat,sinx2,cosx2,wth,cn,soln,lambda0,lambda0_range,chi0,tone_control,Tr,1); +} diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.pxd b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.pxd new file mode 100644 index 00000000..a18c0518 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.pxd @@ -0,0 +1,12 @@ +cdef extern from "_lomb_scargle.h": + void lomb_scargle(int numt, int numf, int nharm, int detrend_order, + double psd[], double cn[], double wth[], + double sinx[], double cosx[], double sinx_step[], + double cosx_step[], double sinx_back[], + double cosx_back[], double sinx_smallstep[], + double cosx_smallstep[], double hat_matr[], + double hat_hat[], double hat0[], + double soln[], double chi0, double freq_zoom, + double psdmin, double tone_control, + double lambda0[], double lambda0_range[], + double Tr[], int ifreq[]) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.pyx b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.pyx new file mode 100644 index 00000000..15646621 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/_lomb_scargle.pyx @@ -0,0 +1,29 @@ +from _lomb_scargle cimport lomb_scargle as _lomb_scargle + +cimport numpy as cnp +import numpy as np + +def lomb_scargle(int numt, int numf, int nharm, int detrend_order, + double[:] psd, double[:] cn, cnp.ndarray wth, + double[:] sinx, double[:] cosx, double[:] sinx_step, + double[:] cosx_step, double[:] sinx_back, + double[:] cosx_back, double[:] sinx_smallstep, + double[:] cosx_smallstep, double[:, :] hat_matr, + double[:, :] hat_hat, double[:, :] hat0, + double[:] soln, double chi0, double freq_zoom, + double psdmin, double tone_control, + cnp.ndarray[dtype=double, ndim=0] lambda0, + double[:] lambda0_range, + cnp.ndarray[dtype=double, ndim=0] Tr, + cnp.ndarray[dtype=cnp.int32_t, ndim=0] ifreq): + + assert wth.dtype == np.double + + _lomb_scargle(numt, numf, nharm, detrend_order, &psd[0], &cn[0], + (wth.data), &sinx[0], &cosx[0], &sinx_step[0], + &cosx_step[0], &sinx_back[0], &cosx_back[0], + &sinx_smallstep[0], &cosx_smallstep[0], &hat_matr[0, 0], + &hat_hat[0, 0], &hat0[0, 0], + &soln[0], chi0, freq_zoom, psdmin, tone_control, + (lambda0.data), &lambda0_range[0], + (Tr.data), (ifreq.data)) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/build/temp.linux-x86_64-3.3/_lomb_scargle.o b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/build/temp.linux-x86_64-3.3/_lomb_scargle.o new file mode 100644 index 0000000000000000000000000000000000000000..5b16c19298b18c396da6f1d11d6abf90a35ec4d1 GIT binary patch literal 1995952 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

-^~4*E!%^>SRKlJLF~Hsjq7T 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%0A(e?jQJQ<$9Wyu*jhfnc(wxsy2 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 z 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 (reasonable, although probably too liberal) + +-FOR TCP_EXPLORER PLOT: + The values stored in db_dictionary are essentially used to + create the plot on tcp_explorer. db_dictionary does have + extra values not needed in the plot, but useful perhaps + feature generation. +""" + +import sys +import os + +try: + import MySQLdb +except: + pass +import pprint + +import numpy as np +# TODO use namespace +from numpy import * + +from scipy import random +from .lomb_scargle_refine import lomb as lombr + +from scipy.stats import scoreatpercentile + + +class lomb_model(object): + def create_model(self, available, m, m_err, out_dict): + def model(times): + data = zeros(times.size) + for freq in out_dict: + freq_dict = out_dict[freq] + # the if/else is a bit of a hack, + # but I don't want to catch "freq_searched_min" or "freq_searched_max" + if len(freq) > 8: + continue + else: + time_offset = freq_dict["harmonics_time_offset"] + for harmonic in range(freq_dict["harmonics_freq"].size): + f = freq_dict["harmonics_freq"][harmonic] + omega = f * 2 * pi + amp = freq_dict["harmonics_amplitude"][harmonic] + phase = freq_dict["harmonics_rel_phase"][harmonic] + new = amp * sin(omega * (times - time_offset) + phase) + data += new + return data + return model + +class period_folding_model(lomb_model): + """ contains methods that use period-folding to model data """ + def period_folding(self, needed, available, m , m_err, out_dict, doplot=True): + """ period folds both the needed and available times. Times are not ordered anymore! """ + + # find the first frequency in the lomb scargle dictionary: + f = (out_dict["freq1"]["harmonics_freq"][0]) + if out_dict["freq2"]["signif"] > out_dict["freq1"]["signif"]: + f = out_dict["freq2"]["frequency"] + + # find the phase: + p = out_dict["freq1"]["harmonics_rel_phase"][0] + + #period-fold the available times + t_fold = mod( available + p/(2*pi*f) , (1./f) ) + + #period-fold the needed times + t_fold_model = mod( needed + p/(2*pi*f) , (1./f) ) + ###### DEBUG ###### + early_bool = available < (2.4526e6 + 40) + ###### DEBUG ##### + + period_folded_progenitor_file = file("period_folded_progenitor.txt", "w") + progenitor_file = file("progenitor.txt", "w") + + for n in range(len(t_fold)): + period_folded_progenitor_file.write("%f\t%f\t%f\n" % (t_fold[n], m[n], m_err[n])) + progenitor_file.write("%f\t%f\t%f\n" % (available[n], m[n], m_err[n])) + progenitor_file.close() + + return t_fold, t_fold_model + + + def create_model(self,available, m , m_err, out_dict): + f = out_dict["freq1"]["frequency"] + def model(times): + t_fold, t_fold_model = self.period_folding(times, available, m, m_err, out_dict) + data = empty(0) + rms = empty(0) + for time in t_fold_model: + # we're going to create a window around the desired time and sample a gaussian distribution around that time + period = 1./f + assert period < available.ptp()*1.5, "period is greater than ####SEE VARIABLE CONTSTRAINT#### of the duration of available data" #alterring this. originally 1/3 + # window is 2% of the period + passed = False + for x in arange(0.01, 0.1, 0.01): + t_min = time - x * period + t_max = time + x * period + window = logical_and((t_fold < t_max), (t_fold > t_min)) # picks the available times that are within that window + try: + # there must be more than # points in the window for this to work: + assert (window.sum() >= 2), str(time) # jhiggins changed sum from 5 to 2 + except AssertionError: + continue + else: + passed = True + break + assert passed, "No adequate window found" + m_window = m[window] + mean_window = mean(m_window) + std_window = std(m_window) + + # now we're ready to sample that distribution and create our point + new = (random.normal(loc=mean_window, scale = std_window, size = 1))[0] + data = append(data,new) + rms = append(rms, std_window) + period_folded_model_file = file("period_folded_model.txt", "w") +# model_file = file("model.txt", "w") + for n in range(len(t_fold_model)): + period_folded_model_file.write("%f\t%f\t%f\n" % (t_fold_model[n], data[n], rms[n])) +# model_file.write("%f\t%f\t%f\n" % (available[n], data[n], rms[n])) +# model_file.close() + period_folded_model_file.close() + return {'flux':data, 'rms': rms} + return model + +############################# +# Use this code to generate out_dict as referenced above +############################# + +class observatory_source_interface(object): + def __init__(self): + pass + + + def get_peak_width(self, psd,imax): + pmax = psd[imax] + i = 0 + while ( (psd[imax-i:imax+1+i]>(pmax/2.)).sum()/(1.+2*i)==1 ): + w = 1.+2*i + i+=1 + return w + + + def make_psd_plot(self, psd=None, srcid=None, freqin=None): + """ Make PSD .png plots used in ALLStars webpages. + """ + import time + trys_left = 120 + while trys_left > 0: + try: + from matplotlib import pyplot as plt + ### Plot the PSD(freq) + psd_array = np.array(psd) + #import matplotlib + #matplotlib.use('PNG') + #import matplotlib.pyplot as plt + #from matplotlib import pyplot as plt + #from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas + + fig = plt.figure(figsize=(5,3), dpi=100) + ax2 = fig.add_subplot(211) + ax2.plot(freqin, np.log10(psd_array)) + ax2.set_ylim(0,3) + ax2.set_yticks([3,2,1,0]) + ax2.set_ylabel("Log10(psd)") + ax2.annotate("freq", xy=(.5, -0.05), xycoords='axes fraction', + horizontalalignment='center', + verticalalignment='top', + fontsize=10) + ax2.set_title(str(srcid) + " Non-prewhitened, Power Spectral Density", fontsize=9) + ax3 = fig.add_subplot(212) + ax3.plot(np.log10(freqin), np.log10(psd_array)) + ax3.set_ylim(-3,3) + ax3.set_xlim(-3,1) + ax3.set_yticks([3,2,1,0,-1,-2,-3]) + ax3.set_yticklabels(['3','','','0','','','-3']) + ax3.set_xticks([1,0,-1,-2,-3]) + ax3.set_ylabel("Log10(psd)") + ax3.annotate("Log10(freq)", xy=(.5, -0.15), xycoords='axes fraction', + horizontalalignment='center', + verticalalignment='top', + fontsize=10) + #plt.show() + fpath = "/home/pteluser/scratch/tutor_psd_png/psd_%d.png" % (srcid) + plt.savefig(fpath) + fig.clf() + trys_left = 0 + break + #os.system('eog ' + fpath) + #import pdb; pdb.set_trace() + #print + except: + trys_left -= 1 + time.sleep(1) + + + def get_2P_modeled_features(self, x=None, y=None, freq1_freq=None, srcid=None, ls_dict={}): + """ + """ + out_dict = {} + out_dict['model_phi1_phi2'] = 0.0 # NaN / divide by zero default value + out_dict['model_min_delta_mags'] = 0.0 + out_dict['model_max_delta_mags'] = 0.0 + + from scipy.optimize import fmin#, fmin_powell + t_folded_phase = (x / (1./freq1_freq)) % 1. + + A = ls_dict['freq1']['harmonics_amplitude'] + y0 = ls_dict['freq1']['harmonics_y_offset'] + ph = ls_dict['freq1']['harmonics_rel_phase'] + + def model_f(t): + return A[0]*sin(2*pi *t+ph[0]) + \ + A[1]*sin(2*pi*2.*t+ph[1]) + \ + A[2]*sin(2*pi*3.*t+ph[2]) + \ + A[3]*sin(2*pi*4.*t+ph[3]) + \ + A[4]*sin(2*pi*5.*t+ph[4]) + \ + A[5]*sin(2*pi*6.*t+ph[5]) + \ + A[6]*sin(2*pi*7.*t+ph[6]) + \ + A[7]*sin(2*pi*8.*t+ph[7]) + + def model_neg(t): + return -1. * model_f(t) + + + min_1_a = fmin(model_neg, 0.05)[0] # start finding 1st minima, at 5% of phase (fudge/magic number) > 0.018 + max_2_a = fmin(model_f, min_1_a + 0.01)[0] + min_3_a = fmin(model_neg, max_2_a + 0.01)[0] + max_4_a = fmin(model_f, min_3_a + 0.01)[0] + + try: +# TODO is this wrong? seems like it should be a minus + out_dict['model_phi1_phi2'] = (min_3_a - max_2_a) / (max_4_a / min_3_a) + out_dict['model_min_delta_mags'] = abs(model_f(min_1_a) - model_f(min_3_a)) + out_dict['model_max_delta_mags'] = abs(model_f(max_2_a) - model_f(max_4_a)) + except: + pass # out_dict will just contains defauld 0.0 values + + if 0: + from matplotlib import pyplot as plt + fig = plt.figure() + ax2 = fig.add_subplot(111) + ax2.plot(t_folded_phase, y, 'bo') + + y_median = (max(y) - min(y))/2. + min(y) + t_plot = arange(0.01, 1.0, 0.01) + modl = model_f(t_plot) + y_median + + ax2.plot(t_plot, modl, 'go') + + ax2.plot([max_2_a, max_4_a], np.array([model_f(max_2_a), model_f(max_4_a)]) + y_median + 0.5, 'yo') + ax2.plot([min_1_a, min_3_a], np.array([model_f(min_1_a), model_f(min_3_a)]) + y_median + 0.5, 'ko') + + ax2.set_title("srcid=%d P=%f min_1=%f max_2=%f min_3=%f max_4=%f" % (srcid, 1. / freq1_freq, min_1_a, max_2_a, min_3_a, max_4_a), fontsize=9) + plt.savefig("/tmp/ggg.png") + #os.system("eog /tmp/ggg.png &") + plt.show() + print + import pdb; pdb.set_trace() + print + return out_dict + + + def lomb_code(self, y, dy, x, sys_err=0.05, srcid=0): + """ This function is used for final psd and final L-S freqs which are used as features. + NOTE: lomb_extractor.py..lomb_extractor..extract() also generates psd, but its psd and objects not used for the final L.S. freqs. + + NOTE: currently (20101120) This is adapted from Nat's run_lomb14.py + + """ + ### These are defaults found in run_lomb14.py::run_lomb() definition: + nharm = 8 # nharm = 4 + num_freq_comps = 3 + do_models = True # 20120720: dstarr changes from False -> True + tone_control = 5.0 #1. + ############## + + dy0 = sqrt(dy**2 + sys_err**2) + + wt = 1./dy0**2 + x-=x.min()#needed for lomb() code to run in a fast amount of time + + chi0 = dot(y**2,wt) + + #alias_std = std( x-x.round() ) + + Xmax = x.max() +# TODO why? seems arbitrary; applies to this whole section... + f0 = 1./Xmax + df = 0.8/Xmax # 20120202 : 0.1/Xmax + fe = 33. #pre 20120126: 10. # 25 + numf = int((fe-f0)/df) + freqin = f0 + df*arange(numf,dtype='float64') # OK + + ytest=1.*y # makes a copy of the array + dof = n0 = len(x) + hh = 1.+arange(nharm) + + out_dict = {} + #prob = gammaincc(0.5*(n0-1.),0.5*chi0) + #if (prob>0): + # lprob=log(prob) + #else: + # lprob= -gammaln(0.5*(n0-1)) - 0.5*chi0 + 0.5*(n0-3)*log(0.5*chi0) + #out_dict['sigma_vary'] = lprob2sigma(lprob) + + lambda0_range=[-log10(n0),8] # these numbers "fix" the strange-amplitude effect + + for i in range(num_freq_comps): + if (i==0): + psd,res = lombr(x,ytest,dy0,f0,df,numf, tone_control=tone_control, + lambda0_range=lambda0_range, nharm=nharm, detrend_order=1) + ### I think it still makes sense to set these here, even though freq1 may be replaced by another non-alias freq. This is because these are parameters that are derived from the first prewhitening application: + out_dict['lambda'] = res['lambda0'] # 20120206 added + out_dict['chi0'] = res['chi0'] + out_dict['time0'] = res['time0'] + out_dict['trend'] = res['trend_coef'][1] #temp_b + out_dict['trend_error'] = res['trend_coef_error'][1] # temp_covar[1][1] # this is the stdev(b)**2 + else: + psd,res = lombr(x,ytest,dy0,f0,df,numf, tone_control=tone_control, + lambda0_range=lambda0_range, nharm=nharm, detrend_order=0) + + ytest -= res['model'] + if (i==0): + out_dict['varrat'] = dot(ytest**2,wt) / chi0 + #pre20110426: out_dict['cn0'] -= res['trend']*res['time0'] + dof -= n0 - res['nu'] + dstr = "freq%i" % (i + 1) + + if (do_models==True): + #20120720Commentout#raise # this needs to be moved below after alias stuff + out_dict[dstr+'_model'] = res['model'] + out_dict[dstr] = {} + freq_dict = out_dict[dstr] + freq_dict["frequency"] = res['freq'] + freq_dict["signif"] = res['signif'] + freq_dict["psd"] = psd # 20110804 added just for self.make_psd_plot() use. + freq_dict["f0"] = f0 + freq_dict["df"] = df + freq_dict["numf"] = numf + + freq_dict['harmonics_amplitude'] = res['amplitude'] + freq_dict['harmonics_amplitude_error'] = res['amplitude_error'] + freq_dict['harmonics_rel_phase'] = res['rel_phase'] + freq_dict['harmonics_rel_phase_error'] = res['rel_phase_error'] + freq_dict['harmonics_nharm'] = nharm + freq_dict['harmonics_time_offset'] = res['time0'] + freq_dict['harmonics_y_offset'] = res['cn0'] # 20110429: disable since it was previously mean subtracted and not useful, and not mean subtracted is avg-mag and essentially survey biased # out_dict['cn0'] + +# TODO what is going on here? also, decouple + ### Here we check for "1-day" aliases in ASAS / Deboss sources + dstr_alias = [] + dstr_all = ["freq%i" % (i + 1) for i in range(num_freq_comps)] + ### 20120223 co: + #for dstr in dstr_all: + # period = 1./out_dict[dstr]['frequency'] + # if (((period >= 0.93) and (period <= 1.07) and + # (out_dict[dstr]['signif'] < (3.771221/np.power(np.abs(period - 1.), 0.25) + 3.293027))) or + # ((period >= 0.485) and (period <= 0.515) and (out_dict[dstr]['signif'] < 10.0)) or + # ((period >= 0.325833333) and (period <= 0.340833333) and (out_dict[dstr]['signif'] < 8.0))): + # dstr_alias.append(dstr) # this frequency has a "1 day" alias (or 0.5 or 0.33 + # + ### 20120212 Joey alias re-analysis: + alias = [{'per':1., + 'p_low':0.92, + 'p_high':1.08, + 'alpha_1':8.191855, + 'alpha_2':-7.976243}, + {'per':0.5, + 'p_low':0.48, + 'p_high':0.52, + 'alpha_1':2.438913, + 'alpha_2':0.9837243}, + {'per':0.3333333333, + 'p_low':0.325, + 'p_high':0.342, + 'alpha_1':2.95749, + 'alpha_2':-4.285432}, + {'per':0.25, + 'p_low':0.245, + 'p_high':0.255, + 'alpha_1':1.347657, + 'alpha_2':2.326338}] + + for dstr in dstr_all: + period = 1./out_dict[dstr]['frequency'] + for a in alias: + if ((period >= a['p_low']) and + (period <= a['p_high']) and + (out_dict[dstr]['signif'] < (a['alpha_1']/np.power(np.abs(period - a['per']), 0.25) + a['alpha_2']))): + dstr_alias.append(dstr) # this frequency has a "1 day" alias (or 0.5 or 0.33 + break # only need to do this once per period, if an alias is found. + + out_dict['n_alias'] = len(dstr_alias) + if 0: + # 20120624 comment out the code which replaces the aliased freq1 with the next non-aliased one: + if len(dstr_alias) > 0: + ### Here we set the next non-alias frequency to freq1, etc: + dstr_diff = list(set(dstr_all) - set(dstr_alias)) + dstr_diff.sort() # want to ensure that the lowest freq is first + reorder = [] + for dstr in dstr_all: + if len(dstr_diff) > 0: + reorder.append(out_dict[dstr_diff.pop(0)]) + else: + reorder.append(out_dict[dstr_alias.pop(0)]) + + for i, dstr in enumerate(dstr_all): + out_dict[dstr] = reorder[i] + + if 0: + ### Write PSD vs freq .png plots for AllStars web visualization: + self.make_psd_plot(psd=out_dict['freq1']['psd'], srcid=srcid, freqin=freqin) + + var0 = var(ytest) - median(dy0)**2 + out_dict['sigma0'] = 0. + if (var0 > 0.): + out_dict['sigma0'] = sqrt(var0) + out_dict['nu'] = dof + out_dict['chi2'] = res['chi2'] #dot(ytest**2,wt) # 20110512: res['chi2'] is the last freq (freq3)'s chi2, which is pretty similar to the old dot(ytest**2,wt) calculation which uses the signal removed ytest + #out_dict['alias_std'] = alias_std + out_dict['freq_binwidth'] = df + out_dict['freq_searched_min']=min(freqin) + out_dict['freq_searched_max']=max(freqin) + out_dict['mad_of_model_residuals'] = median(abs(ytest - median(ytest))) + + ##### This is used for p2p_scatter_2praw feature: + t_2per_fold = x % (2/out_dict['freq1']['frequency']) + tups = list(zip(t_2per_fold, y))#, range(len(t_2per_fold))) + tups.sort() + t_2fold, m_2fold = zip(*tups) #So: m_2fold[30] == y[i_fold[30]] + m_2fold_array = np.array(m_2fold) + sumsqr_diff_folded = np.sum((m_2fold_array[1:] - m_2fold_array[:-1])**2) + sumsqr_diff_unfold = np.sum((y[1:] - y[:-1])**2) + p2p_scatter_2praw = sumsqr_diff_folded / sumsqr_diff_unfold + out_dict['p2p_scatter_2praw'] = p2p_scatter_2praw + + mad = np.median(np.abs(y - median(y))) + out_dict['p2p_scatter_over_mad'] = np.median(np.abs(y[1:] - y[:-1])) / mad + + ### eta feature from arXiv 1101.3316 Kim QSO paper: + out_dict['p2p_ssqr_diff_over_var'] = sumsqr_diff_unfold / ((len(y) - 1) * np.var(y)) + + t_1per_fold = x % (1./out_dict['freq1']['frequency']) + tups = list(zip(t_1per_fold, y))#, range(len(t_2per_fold))) + tups.sort() + t_1fold, m_1fold = zip(*tups) #So: m_1fold[30] == y[i_fold[30]] + m_1fold_array = np.array(m_1fold) + out_dict['p2p_scatter_pfold_over_mad'] = \ + np.median(np.abs(m_1fold_array[1:] - m_1fold_array[:-1])) / mad + + ######################## # # # + ### This section is used to calculate Dubath (10. Percentile90:2P/P) + ### Which requires regenerating a model using 2P where P is the original found period + ### NOTE: this essentially runs everything a second time, so makes feature + ### generation take roughly twice as long. + + model_vals = np.zeros(len(y)) + #all_model_vals = np.zeros(len(y)) + freq_2p = out_dict['freq1']['frequency'] * 0.5 + ytest_2p=1.*y # makes a copy of the array + + ### So here we force the freq to just 2*freq1_Period + # - we also do not use linear detrending since we are not searching for freqs, and + # we want the resulting model to be smooth when in phase-space. Detrending would result + # in non-smooth model when period folded + psd,res = lombr(x,ytest_2p,dy0,freq_2p,df,1, tone_control=tone_control, + lambda0_range=lambda0_range, nharm=nharm, detrend_order=0)#1) + model_vals += res['model'] + #all_model_vals += res['model'] + + ytest_2p -= res['model'] + for i in range(1,num_freq_comps): + psd,res = lombr(x,ytest_2p,dy0,f0,df,numf, tone_control=tone_control, + lambda0_range=lambda0_range, nharm=nharm, detrend_order=0) + + #all_model_vals += res['model'] + ytest_2p -= res['model'] + + out_dict['medperc90_2p_p'] = scoreatpercentile(np.abs(ytest_2p), 90) / \ + scoreatpercentile(np.abs(ytest), 90) + + some_feats = self.get_2P_modeled_features(x=x, y=y, freq1_freq=out_dict['freq1']['frequency'], srcid=srcid, ls_dict=out_dict) + out_dict.update(some_feats) + + ### So the following uses the 2*Period model, and gets a time-sorted, folded t and m: + ### - NOTE: if this is succesful, I think a lot of other features could characterize the + ### shapes of the 2P folded data (not P or 2P dependent). + ### - the reason we choose 2P is that occasionally for eclipsing + ### sources the LS code chooses 0.5 of true period (but never 2x + ### the true period). slopes are not dependent upon the actual + ### period so 2P is fine if it gives a high chance of correct fitting. + ### - NOTE: we only use the model from freq1 because this with its harmonics seems to + ### adequately model shapes such as RRLyr skewed sawtooth, multi minima of rvtau + ### without getting the scatter from using additional LS found frequencies. + + + t_2per_fold = x % (1/freq_2p) + tups = list(zip(t_2per_fold, model_vals)) +# TODO why? + tups.sort() + t_2fold, m_2fold = zip(*tups) + t_2fold_array = np.array(t_2fold) + m_2fold_array = np.array(m_2fold) + slopes = (m_2fold_array[1:] - m_2fold_array[:-1]) / (t_2fold_array[1:] - t_2fold_array[:-1]) +# TODO why not just get the (almost) steepest positive/negative slopes directly? +# wrong for strictly increasing/decreasing +# TODO why is this here instead of another extractor... + out_dict['fold2P_slope_10percentile'] = scoreatpercentile(slopes,10) # this gets the steepest negative slope? + out_dict['fold2P_slope_90percentile'] = scoreatpercentile(slopes,90) # this gets the steepest positive slope? + + return out_dict, ytest + + +class GetPeriodFoldForWeb: + """ + To be called by tcp_html_show_recent_ptf_sources.py, + which is called by a PHP script on lyra. + + Eventually this only prints a JSON javascript structure which + contains period folded data for plottingL like: (mag vs time.) + """ + def __init__(self): + self.pars = { \ + 'mysql_user':"pteluser", + 'mysql_hostname':"192.168.1.25", + 'mysql_database':'source_test_db', + 'mysql_port':3306, + 'featid_lookup_pkl_fpath':os.path.expandvars("$TCP_DATA_DIR/featname_featid_lookup.pkl"), + 'color_chris_folded':"#cc0033", + 'color_chris_model':"#ff3399", + 'color_feature_resampled':"#3399cc", + 'color_folded_data':"#000066", + 'tcptutor_hostname':'lyra.berkeley.edu', + 'tcptutor_username':'pteluser', + 'tcptutor_password':'Edwin_Hubble71', + 'tcptutor_port': 3306, + 'tcptutor_database':'tutor', + } + + + def make_db_connection(self): + """ + """ + self.db = MySQLdb.connect(host=self.pars['mysql_hostname'], + user=self.pars['mysql_user'], + db=self.pars['mysql_database'], + port=self.pars['mysql_port']) + self.cursor = self.db.cursor() + + self.tutor_db = MySQLdb.connect(host=self.pars['tcptutor_hostname'], \ + user=self.pars['tcptutor_username'], \ + passwd=self.pars['tcptutor_password'],\ + db=self.pars['tcptutor_database'],\ + port=self.pars['tcptutor_port']) + self.tutor_cursor = self.tutor_db.cursor() + + + + def generate_featname_featid_lookup(self, filter_id=8): + """ Generate a RDB feature table lookup dictionary for: + feat_id : feat_value + """ + import cPickle + # TODO: if not .pkl file exists... + if os.path.exists(self.pars['featid_lookup_pkl_fpath']): + fp = open(self.pars['featid_lookup_pkl_fpath']) + self.featname_lookup = cPickle.load(fp) + fp.close() + return + else: + select_str = "SELECT feat_name, feat_id FROM source_test_db.feat_lookup WHERE filter_id = %d" % (filter_id) + self.cursor.execute(select_str) + + results = self.cursor.fetchall() + self.cursor.close() + self.featname_lookup = {} + for (feat_name, feat_id) in results: + self.featname_lookup[feat_name] = feat_id + + fp = open(self.pars['featid_lookup_pkl_fpath'], 'w') + cPickle.dump(self.featname_lookup, fp) + fp.close() + return + + + def get_source_arrays(self, source_id): + """ Retrieve source m, t from rdb. + """ + + #select_str = """SELECT object_test_db.obj_srcid_lookup.src_id, + # object_test_db.ptf_events.ujd, + # object_test_db.ptf_events.mag, + # object_test_db.ptf_events.mag_err + # FROM object_test_db.obj_srcid_lookup + # JOIN object_test_db.ptf_events ON (object_test_db.ptf_events.id = object_test_db.obj_srcid_lookup.obj_id) + # WHERE survey_id = 3 AND src_id = %d """ % (source_id) + + # 20091030: dstarr comments out: + #select_str = """SELECT object_test_db.obj_srcid_lookup.src_id, + # object_test_db.ptf_events.ujd, + # (-2.5 * LOG10(object_test_db.ptf_events.flux_aper + object_test_db.ptf_events.f_aper) + object_test_db.ptf_events.ub1_zp_ref) AS m_total, + # object_test_db.ptf_events.mag_err + # FROM object_test_db.obj_srcid_lookup + # JOIN object_test_db.ptf_events ON (object_test_db.ptf_events.id = object_test_db.obj_srcid_lookup.obj_id) + # WHERE survey_id = 3 AND src_id = %d + # ORDER BY object_test_db.ptf_events.ujd""" % (source_id) + + # 20091030: dstarr instead uses: + select_str = """SELECT object_test_db.obj_srcid_lookup.src_id, + object_test_db.ptf_events.ujd, + object_test_db.ptf_events.mag AS m_total, + object_test_db.ptf_events.mag_err + FROM object_test_db.obj_srcid_lookup + JOIN object_test_db.ptf_events ON (object_test_db.ptf_events.id = object_test_db.obj_srcid_lookup.obj_id) + WHERE survey_id = 3 AND src_id = %d + ORDER BY object_test_db.ptf_events.ujd""" % (source_id) + + + #Testing fluxes +## select_str = """SELECT object_test_db.obj_srcid_lookup.src_id, +## object_test_db.ptf_events.ujd, +## object_test_db.ptf_events.flux, +## object_test_db.ptf_events.flux_err +## FROM object_test_db.obj_srcid_lookup +## JOIN object_test_db.ptf_events ON (object_test_db.ptf_events.id = object_test_db.obj_srcid_lookup.obj_id) +## WHERE survey_id = 3 AND src_id = %d +## ORDER BY object_test_db.ptf_events.ujd""" % (source_id) + + self.cursor.execute(select_str) + + t_list = [] + m_list = [] + merr_list = [] + + results = self.cursor.fetchall() + + # TODO: maybe close DB connection too. + for row in results: + t_list.append(row[1]) + m_list.append(row[2]) + merr_list.append(row[3]) + + src_dict = {} + src_dict['src_id'] = results[0][0] + src_dict['t'] = np.array(t_list) + src_dict['m'] = np.array(m_list) + src_dict['m_err'] = np.array(merr_list) + #src_dict['m_err'] = [] #/@/ Justin changed 20090804 + return src_dict + + + def get_source_arrays__dotastro(self, source_id): + """ Retrieve source m, t from rdb. + + This version of the method queries the DotAstro.org / TUTOR database on lyra + """ + + # TODO: need to determine shich filter has the most number of epochs + # TODO: need to retrieve the magnitudes(time) from dotastro database for this fitler + # m_err(time) + srcid_dotastro = source_id - 100000000 + + # first need to use observations.source_id == to get the + # observations.observation_id + # then select count(*) from obs_data.observation_id== and see which observation_id (eg filter) has the most epochs. + # then retrieve all mag, m_err, time for this observation_id and return it. + + ##### First Retrieve the filter for the srcid from the tranx RDB + + select_str = "SELECT feats_used_filt FROM source_test_db.srcid_lookup WHERE src_id = %d" % (source_id) + self.cursor.execute(select_str) + results = self.cursor.fetchall() + if len(results) == 0: + return {} + feat_filter = results[0][0] + + ##### Determine the filter / observation_id which has the most number of epochs, + # since this currently corresponds to the timeseries which the feature algorithms + # were generated using (eg not using the combo_band). + #select_str = """SELECT filters.*, count(obs_data.obsdata_val) AS epoch_count, observations.observation_id + # FROM observations + # JOIN obs_data USING (observation_id) + # JOIN filters USING (filter_id) + # WHERE observations.source_id=%d AND filters.filter_name like "%s%" + # GROUP BY observations.observation_id + # ORDER BY epoch_count DESC""" % (srcid_dotastro, feat_filter[0]) + + select_str = """SELECT obs_data.obsdata_time, obs_data.obsdata_val, obs_data.obsdata_err + FROM observations + JOIN obs_data USING (observation_id) + JOIN filters USING (filter_id) + WHERE observations.source_id=%d AND filters.filter_name like "%s""" % (srcid_dotastro, feat_filter[0]) + '%"' + #'" """ + self.tutor_cursor.execute(select_str) + + t_list = [] + m_list = [] + merr_list = [] + + results = self.tutor_cursor.fetchall() + # TODO: maybe close DB connection too. + for row in results: + t_list.append(row[0]) + m_list.append(row[1]) + merr_list.append(row[2]) + + src_dict = {} + src_dict['src_id'] = source_id + src_dict['t'] = np.array(t_list) + src_dict['m'] = np.array(m_list) + src_dict['m_err'] = np.array(merr_list) + #src_dict['m_err'] = [] #/@/ Justin changed 20090804 + return src_dict + + + ### This function is no longer used by lomb_scargle_extractor. ONly Noisification/Chris related lightcurve.py functions use it. + def generate_lomb_period_fold(self, src_dict, return_option='top4lombfreqs_withharmonics'): + """ Re-generate lomb scargle using Chris code. + + Return period folded m(t) and evenly resampled m(t) in a dictionary. + """ + + obs = observatory_source_interface() + out_dict, cn_output = obs.lomb_code(src_dict['m'], + src_dict['m_err'], + src_dict['t']) + + + return out_dict + + + + def using_features_generate_resampled(self, src_dict): + """ Using features retrieved from RDB and stored in src_dict, + form a re-sampled m(t) and return in a dictionary. + """ + ##### TODO: Get the frequency components from feature tables if + # available. + # - Construct y_axis for some generated time-axis. + + # TODO: using: + # self.featname_lookup + # form a SELECT string which retrieves all features of interest + # then gemerate an out_dict{} so that this works: + + select_str = """SELECT + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s, + (SELECT feat_val FROM source_test_db.feat_values WHERE src_id=%d AND feat_id=%d) AS %s + """%(src_dict['src_id'], self.featname_lookup['freq1_harmonics_freq_0'], 'freq1_harmonics_freq_0', + src_dict['src_id'], self.featname_lookup['freq2_harmonics_freq_0'], 'freq2_harmonics_freq_0', + src_dict['src_id'], self.featname_lookup['freq3_harmonics_freq_0'], 'freq3_harmonics_freq_0', + src_dict['src_id'], self.featname_lookup['freq1_harmonics_amplitude_0'], 'freq1_harmonics_amplitude_0', + src_dict['src_id'], self.featname_lookup['freq2_harmonics_amplitude_0'], 'freq2_harmonics_amplitude_0', + src_dict['src_id'], self.featname_lookup['freq3_harmonics_amplitude_0'], 'freq3_harmonics_amplitude_0', + src_dict['src_id'], self.featname_lookup['freq1_harmonics_rel_phase_0'], 'freq1_harmonics_rel_phase_0', + src_dict['src_id'], self.featname_lookup['freq2_harmonics_rel_phase_0'], 'freq2_harmonics_rel_phase_0', + src_dict['src_id'], self.featname_lookup['freq3_harmonics_rel_phase_0'], 'freq3_harmonics_rel_phase_0', + src_dict['src_id'], self.featname_lookup['freq1_signif'], 'freq1_signif', + src_dict['src_id'], self.featname_lookup['freq2_signif'], 'freq2_signif', + ) + + self.cursor.execute(select_str) + + result = self.cursor.fetchall() + + ############# + + freq_list = [] + amp_list = [] + rel_phase = [] + + freq_list.append(result[0][0]) + freq_list.append(result[0][1]) + freq_list.append(result[0][2]) + amp_list.append(result[0][3]) + amp_list.append(result[0][4]) + amp_list.append(result[0][5]) + rel_phase.append(result[0][6]) + rel_phase.append(result[0][7]) + rel_phase.append(result[0][8]) + + freq1_harmonics_freq_0 = result[0][0] + freq2_harmonics_freq_0 = result[0][1] + freq1_signif = result[0][9] + freq2_signif = result[0][10] + freq1_harmonics_rel_phase_0 = result[0][6] + + #try: + # plot_period = 1.0 / freq_list[0] + # x_axis = arange(0,plot_period, .01) + # + # y_axis= amp_list[0]*sin(2*np.pi*freq_list[0]*(x_axis-rel_phase[0]))+\ + # amp_list[1]*sin(2*np.pi*freq_list[1]*(x_axis-rel_phase[1]))+\ + # amp_list[2]*sin(2*np.pi*freq_list[2]*(x_axis-rel_phase[2])) + # + # feature_resampled_dict = {'feature_resampled':{'t':x_axis, 'm':y_axis, + # 'color':self.pars['color_feature_resampled']}} + #except: + # feature_resampled_dict = {'feature_resampled':{'t':[], 'm':[], + # 'color':self.pars['color_feature_resampled']}} + + + ##### Here we period fold the existing data. + f = (freq1_harmonics_freq_0) + if freq2_signif > freq1_signif: + f = freq2_harmonics_freq_0 + + # find the phase: + p = freq1_harmonics_rel_phase_0 + + #period-fold the available times + t_fold = mod( src_dict['t'] + p/(2*pi*f) , (1./f) ) + ##### This is the earlier data: + try: + plot_period = 1.0 / freq_list[0] + x_axis = arange(0,plot_period, .001) + + #KLUDGE: I fake the generated LC mag amplitude & offset using real data: + amp_kludge = max(src_dict['m']) - min(src_dict['m']) + m_offset_kludge = amp_kludge/2. + min(src_dict['m']) + + # 20090720: dstarr replaces the following with something 4-6 lines below + #y_axis= (amp_list[0]*sin(2*np.pi*freq_list[0]*(x_axis-rel_phase[0]))+\ + # amp_list[1]*sin(2*np.pi*freq_list[1]*(x_axis-rel_phase[1]))+\ + # amp_list[2]*sin(2*np.pi*freq_list[2]*(x_axis-rel_phase[2]))) + y_axis= (amp_list[0]*sin(2*np.pi*freq_list[0]*(x_axis)))+\ + amp_list[1]*sin(2*np.pi*freq_list[1]*(x_axis) + rel_phase[1])+\ + amp_list[2]*sin(2*np.pi*freq_list[2]*(x_axis) + rel_phase[2]) + + y_axis= (amp_list[0]*sin(2*np.pi*freq_list[0]*(x_axis) + rel_phase[0]))+\ + amp_list[1]*sin(2*np.pi*freq_list[1]*(x_axis) + rel_phase[1])+\ + amp_list[2]*sin(2*np.pi*freq_list[2]*(x_axis) + rel_phase[2]) + + amp_sampled_m = max(y_axis) - min(y_axis) + amp_sampled_offset = amp_sampled_m / 2. + min(y_axis) + + y_axis = ((y_axis -amp_sampled_offset) / amp_sampled_m) * amp_kludge + m_offset_kludge + + feature_resampled_dict = {'DB features Generated':{'t':x_axis, 'm':y_axis, + 'color':self.pars['color_feature_resampled']}} + except: + feature_resampled_dict = {'DB features Generated':{'t':[], 'm':[], 'points': {'radius': 0.1}, + 'color':self.pars['color_feature_resampled']}} + ##### + + feature_resampled_dict.update({"DB features Period Folded":{'t':t_fold, 'm':src_dict['m'], + 'color':self.pars['color_folded_data']}}) + + html_str = "" + for i in range(len(amp_list)): + html_str += ""+str(i)+""+str(amp_list[i])+""+str(freq_list[i])+""+str(rel_phase[i])+""+str(1/freq_list[i])+" \n" + + if len(sys.argv) >= 2: + if sys.argv[1] == 'get_table_data': + return html_str + + return feature_resampled_dict + + def form_json(self, combo_dict): + """ Given period folded structures, form a JSON-like string, return. + Justin changing order in list since dictionary model blocks folded data + """ + json_list = [] + data_list1 = [] + for i in range(len(combo_dict['Actual Mags folded']['t'])): + data_list1.append([combo_dict['Actual Mags folded']['t'][i],combo_dict['Actual Mags folded']['m'][i]]) + data_list2 = [] + for i in range(len(combo_dict['Folded Model']['t'])): + data_list2.append([combo_dict['Folded Model']['t'][i],combo_dict['Folded Model']['m'][i]]) + data_list3 = [] + for i in range(len(combo_dict['Model with dictionary values']['t'])): + data_list3.append([combo_dict['Model with dictionary values']['t'][i],combo_dict['Model with dictionary values']['m'][i]]) + json_list.append({'label':'Model with dictionary values', + 'color':'#F2BABB', + 'data':data_list3}) + json_list.append({'label':'Folded Model', + 'color':'#BB8800', + 'data':data_list2}) + json_list.append({'label':'Actual Mags folded', + 'color':'#194E84', + 'data':data_list1}) + + json_string_single_quotes = pprint.pformat(json_list) + json_string = json_string_single_quotes.replace("'",'"') + return json_string + + + + def main(self, source_id): + """ + Eventually this function will calculate the period fold + plotting x,y array and return a string with this JSON-like + output, such as: + + [{"label":"Period Fold", "color":#36477b, + "data":[[1,1],[2,4],[3,9],[4,16]]}] + """ + self.make_db_connection() + self.generate_featname_featid_lookup() + if source_id >= 100000000: + src_dict = self.get_source_arrays__dotastro(source_id) + else: + src_dict = self.get_source_arrays(source_id) + lc_dict = {} + lomb_folded_dict = self.generate_lomb_period_fold(src_dict) + lc_dict.update(lomb_folded_dict) + + json_string = self.form_json(lc_dict) + return json_string + ####### Justin adding to view fluxes folded ####### + def online_dictionary(self, source_id, return_option="database"): + self.make_db_connection() + self.generate_featname_featid_lookup() + src_dict = self.get_source_arrays(source_id) + + db_dict = self.generate_lomb_period_fold(src_dict,return_option="db_dictionary") + return db_dict + + + + def html_table(self, source_id, return_option="html"): + self.make_db_connection() + self.generate_featname_featid_lookup() + + src_dict = self.get_source_arrays(source_id) + lomb_str = self.generate_lomb_period_fold(src_dict) + db_str = self.using_features_generate_resampled(src_dict) + final_str = " \n" + final_str += " \n" + final_str += "
Chris ValuesDB values
\n" + final_str += " \n" + final_str += lomb_str+"
Harmonic NumAmplitudeFreqOffset 1 / freq
\n" + final_str += " \n" + final_str += " \n" + final_str += db_str+"
Harmonic NumAmplitudeFreqOffset 1 / freq
" + + return final_str + + def for_testing(self, source_id): + pass diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/linfit.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/linfit.py new file mode 100644 index 00000000..d5fdfb2f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/linfit.py @@ -0,0 +1,32 @@ +from numpy import ones,sqrt + +# TODO don't see any reason to use this instead of polyfit from numpy +def linfit(x,y,dy=[]): + """ + m = a+b*x + minimize chi^2 = Sum (y-m)^2/dy^2 + """ + lx=len(x) + if (dy==[]): + dy = ones(lx,dtype='float32') + + wt = 1./dy**2 + ss = wt.sum() + sx = (wt * x).sum() + sy = (wt * y).sum() + t = (x - sx/ss) / dy + b = (t * y / dy).sum() + + st2 = (t*t).sum() + + # parameter estimates + b = b / st2 + a = (sy - sx * b) / ss + + # error estimates + sdeva = sqrt((1. + sx * sx / (ss * st2)) / ss) + sdevb = sqrt(1. / st2) + covar = -sx/(ss*st2) + covar = [[sdeva**2, covar], [covar, sdevb**2]] + + return (a,b,covar) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/lomb_scargle_refine.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/lomb_scargle_refine.py new file mode 100644 index 00000000..c542f2b9 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/lomb_scargle_refine.py @@ -0,0 +1,211 @@ +from numpy import exp,empty,pi,sqrt,sin,cos,dot,where,arange,arctan2,array,diag,ix_,log10,outer,hstack,log,round,zeros +from scipy.stats import f as fdist, norm +from ._lomb_scargle import lomb_scargle + + +def lprob2sigma(lprob): + """ translates a log_e(probability) to units of Gaussian sigmas + """ + + if (lprob>-36.): + sigma = norm.ppf(1.-0.5*exp(1.*lprob)) + else: + # this is good to 5.e-2; just to be crazy, get to 5.e-5 + sigma = sqrt( log(2./pi) - 2.*log(8.2) - 2.*lprob ) + f = 0.5*log(2./pi) - 0.5*sigma**2 - log(sigma) - lprob + df = - sigma - 1./sigma + sigma = sigma - f/df + + return float(sigma) + + +def lomb(time, signal, error, f1, df, numf, nharm=8, psdmin=6., detrend_order=0, + freq_zoom=10., tone_control=1., return_model=True, + lambda0=1., lambda0_range=[-8,6]): + """ + C version of lomb_scargle: + Simultaneous fit of a sum of sinusoids by weighted, linear least squares. + model(t) = Sum_k Ck*t^k + Sum_i Sum_j Aij sin(2*pi*j*fi*(t-t0)+phij), i=[1,nfreq], j=[1,nharm] + [t0 defined such that ph11=0] + + Inputs: + time: time vector + signal: data vector + error: data uncertainty vector + df: frequency step + numf: number of frequencies to consider + + detrend_order: order of polynomial detrending (Ck orthogonol polynomial terms above; + 0 floating mean; <0 no detrending) + + psdmin: refine periodogram values with larger psd using multi-harmonic fit + nharm: number of harmonics to use in refinement + lambda0: typical value for regularization parameter (expert parameter) + lambda0_range: allowable range for log10 of regularization parameter + + Output: + psd: power spectrum on frequency grid: f1,f1+df,...,f1+numf*df + out_dict: dictionary describing various parameters of the multiharmonic fit at + the best-fit frequency + """ + numt = len(time) + +# TODO what is this? + freq_zoom = round(freq_zoom/2.)*2. + + dord = detrend_order + if (detrend_order<0): + dord=0 + + if (tone_control<0): + tone_control=0. + + # polynomial terms + coef = empty(dord+1,dtype='float64') + norm = empty(dord+1,dtype='float64') + + wth0 = (1./error).astype('float64') + s0 = dot(wth0,wth0) + wth0 /= sqrt(s0) + +# TODO what is this step + cn = (signal*wth0).astype('float64') + coef[0] = dot(cn,wth0); cn0 = coef[0]; norm[0] = 1. + cn -= coef[0]*wth0 + vcn = 1. + + # sin's and cosin's for later + tt = 2*pi*time.astype('float64') + sinx,cosx = sin(tt*f1)*wth0,cos(tt*f1)*wth0 + sinx_step,cosx_step = sin(tt*df),cos(tt*df) + sinx_back,cosx_back = -sin(tt*df/2.),cos(tt*df/2) + sinx_smallstep,cosx_smallstep = sin(tt*df/freq_zoom),cos(tt*df/freq_zoom) + + npar=2*nharm + hat_matr = empty((npar,numt),dtype='float64') + hat0 = empty((npar,dord+1),dtype='float64') + hat_hat = empty((npar,npar),dtype='float64') + soln = empty(npar,dtype='float64') + psd = zeros(numf,dtype='float64') + + # detrend the data and create the orthogonal detrending basis + if (dord>0): + wth = empty((dord+1,numt),dtype='float64') + wth[0,:] = wth0 + else: + wth = wth0 + +# TODO can we just use polyfit from numpy +# TODO not clear why this has to live inside lomb_scargle code, should be decoupled + for i in range(detrend_order): + f = wth[i,:]*tt/(2*pi) + for j in range(i+1): + f -= dot(f,wth[j,:])*wth[j,:] + norm[i+1] = sqrt(dot(f,f)); f /= norm[i+1] + coef[i+1] = dot(cn,f) + cn -= coef[i+1]*f + wth[i+1,:] = f + vcn += (f/wth0)**2 + + + chi0 = dot(cn,cn) + varcn = chi0/(numt-1-dord) + psdmin *= 2*varcn + + Tr = array(0.,dtype='float64') + ifreq = array(0,dtype='int32') + lambda0 = array(lambda0/s0,dtype='float64') + lambda0_range = 10**array(lambda0_range,dtype='float64')/s0 + + +# TODO why? + vars=['numt','numf','nharm','detrend_order','psd','cn','wth','sinx','cosx','sinx_step','cosx_step','sinx_back','cosx_back','sinx_smallstep','cosx_smallstep','hat_matr','hat_hat','hat0','soln','chi0','freq_zoom','psdmin','tone_control','lambda0','lambda0_range','Tr','ifreq'] + + lomb_scargle(numt, numf, nharm, detrend_order, psd, cn, wth, sinx, + cosx, sinx_step, cosx_step, sinx_back, cosx_back, + sinx_smallstep, cosx_smallstep, hat_matr, hat_hat, hat0, + soln, chi0, freq_zoom, psdmin, tone_control, lambda0, + lambda0_range, Tr, ifreq) + + hat_hat /= s0 + ii = arange(nharm,dtype='int32') +# TODO why? + soln[0:nharm] /= (1.+ii)**2; soln[nharm:] /= (1.+ii)**2 + if (detrend_order>=0): + hat_matr0 = outer(hat0[:,0],wth0) + for i in range(detrend_order): + hat_matr0 += outer(hat0[:,i+1],wth[i+1,:]) + + + modl = dot(hat_matr.T,soln); modl0 = dot(hat_matr0.T,soln) + coef0 = dot(soln,hat0) + coef -= coef0 + if (detrend_order>=0): + hat_matr -= hat_matr0 + + out_dict={} + out_dict['chi0'] = chi0*s0 + if (return_model): + if (dord>0): + out_dict['trend'] = dot(coef,wth)/wth0 + else: + out_dict['trend'] = coef[0] + 0*wth0 + out_dict['model'] = modl/wth0 + out_dict['trend'] + + j = psd.argmax() + freq = f1+df*j + (ifreq/freq_zoom - 1/2.)*df + tt = (time*freq) % 1. ; s =tt.argsort() + out_dict['freq'] = freq + out_dict['s0'] = s0 + out_dict['chi2'] = (chi0 - psd[j])*s0 + out_dict['psd'] = psd[j]*0.5/varcn + out_dict['lambda0'] = lambda0*s0 + out_dict['gcv_weight'] = (1-3./numt)/Tr + out_dict['trace'] = Tr + out_dict['nu0'] = numt - npar + npars = (1-Tr)*numt/2 + out_dict['nu'] = numt-npars + out_dict['npars'] = npars + + A0, B0 = soln[0:nharm],soln[nharm:] + hat_hat /= outer( hstack(((1.+ii)**2,(1.+ii)**2)),hstack(((1.+ii)**2,(1.+ii)**2)) ) + err2 = diag(hat_hat) + vA0, vB0 = err2[0:nharm], err2[nharm:] + covA0B0 = hat_hat[(ii,nharm+ii)] + + if (return_model): + vmodl = vcn/s0 + dot( (hat_matr/wth0).T, dot(hat_hat, hat_matr/wth0) ) + vmodl0 = vcn/s0 + dot( (hat_matr0/wth0).T, dot(hat_hat, hat_matr0/wth0) ) + out_dict['model_error'] = sqrt(diag(vmodl)) + out_dict['trend_error'] = sqrt(diag(vmodl0)) + + amp = sqrt(A0**2+B0**2) + damp = sqrt( A0**2*vA0 + B0**2*vB0 + 2.*A0*B0*covA0B0 )/amp + phase = arctan2( B0,A0 ) + rel_phase = phase - phase[0]*(1.+ii) + rel_phase = arctan2( sin(rel_phase),cos(rel_phase) ) + dphase = 0.*rel_phase +# TODO what is this + for i in range(nharm-1): + j=i+1 + v = array([-A0[0]*(1.+j)/amp[0]**2,B0[0]*(1.+j)/amp[0]**2,A0[j]/amp[j]**2,-B0[j]/amp[j]**2]) + jj=array([0,nharm,j,j+nharm]) + m = hat_hat[ix_(jj,jj)] + dphase[j] = sqrt( dot(dot(v,m),v) ) + + out_dict['amplitude'] = amp + out_dict['amplitude_error'] = damp + out_dict['rel_phase'] = rel_phase + out_dict['rel_phase_error'] = dphase + out_dict['time0'] = -phase[0]/(2*pi*freq) + + ncp = norm.cumprod() + out_dict['trend_coef'] = coef/ncp + out_dict['cn0'] = out_dict['trend_coef'][0] - cn0 + out_dict['trend_coef_error'] = sqrt( ( 1./s0 + diag(dot(hat0.T,dot(hat_hat,hat0))) )/ncp**2 ) + out_dict['cn0_error'] = out_dict['trend_coef_error'][0] + + prob = fdist.sf( 0.5*(numt-1.-dord)*(1.-out_dict['chi2']/out_dict['chi0']), 2,numt-1-dord ) + out_dict['signif'] = lprob2sigma(log(prob)) + + return 0.5*psd/varcn,out_dict diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/ls_support.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/ls_support.py new file mode 100644 index 00000000..d83a8a78 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/ls_support.py @@ -0,0 +1,203 @@ +# TODO remove? +lomb_scargle_support = """ + inline void copy_sincos (int numt, double sinx0[], double cosx0[], double sinx[], double cosx[]) { + for (int i=0;i0) px = ( c2*sh*sh - 2.*cs*ch*sh + s2*ch*ch ) / detm; + return px; + } + inline void calc_dotprod(int numt, double sinx[], double cosx[], double wt[], int dord, double *st, double *ct) { + int i; + unsigned long n2=numt*dord; + for (*st=0,*ct=0,i=0;ipxmax) { + pxmax=px; + *ifreq = i; + } + update_sincos(numt, sinx_smallstep, cosx_smallstep, sinx1, cosx1, 0); + } + copy_sincos(numt,sinx,cosx,sinx1,cosx1); + if (*ifreqpx_max && Tr>0) { + px_max = px; + lambda_best = lambda; + *Trace = Tr; + } + lambda *= dlambda; + } + if (lambda_best-1.e-5>start) start=lambda_best/dlambda; + else break; + if(lambda_best+1.e-5psd0max && psdmax==0) { + psd0max = psd[j]; + copy_sincos(numt,sinx,cosx,sinx2,cosx2); + jmax = j; + } + // refine the fit around significant sin+cos fits + if (psd[j]>(double)psdmin) { + // first let the frequency vary slightly + px = do_lomb_zoom(numt,detrend_order, cn, sinx, cosx, sinx1, cosx1, sinx_back, cosx_back, sinx_smallstep, cosx_smallstep, wth, freq_zoom, &ifr); + lambda = *lambda0; + // now fit a multi-harmonic model with generalized cross-validation to avoid over-fitting + psd[j] = refine_psd(numt,nharm,detrend_order,hat_matr,hat0,hat_hat,sinx1,cosx1,wth,cn,soln,&lambda,lambda0_range,chi0,tone_control,&Trace,0); + if (psd[j]>psdmax) { + copy_sincos(numt,sinx1,cosx1,sinx2,cosx2); + psdmax=psd[j]; + *ifreq = ifr; + jmax = j; + } + } + update_sincos(numt, sinx_step, cosx_step, sinx, cosx, 0); + } + // finally, rerun at the best-fit period so we get some statistics + psd[jmax] = refine_psd(numt,nharm,detrend_order,hat_matr,hat0,hat_hat,sinx2,cosx2,wth,cn,soln,lambda0,lambda0_range,chi0,tone_control,Tr,1); +""" diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/multi_harmonic_fit.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/multi_harmonic_fit.py new file mode 100644 index 00000000..1a226f74 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/multi_harmonic_fit.py @@ -0,0 +1,225 @@ +from __future__ import print_function +from __future__ import absolute_import +from numpy import sin,cos,sqrt,empty,pi,dot,arctan2,atleast_1d,diag,arange,abs,ones,array,zeros,log,trace +from scipy.linalg import cho_solve,cho_factor + +from .pre_whiten import chi2sigma + +def CholeskyInverse(t,B): + """ + Computes inverse of matrix given its Cholesky upper Triangular decomposition t. + """ + nrows = len(t) + # Backward step for inverse. + for j in reversed(range(nrows)): + tjj = t[j,j] + S = sum([t[j,k]*B[j,k] for k in range(j+1, nrows)]) + B[j,j] = 1.0/ tjj**2 - S/ tjj + for i in reversed(range(j)): + B[j,i] = B[i,j] = -sum([t[i,k]*B[k,j] for k in range(i+1,nrows)])/t[i,i] + +def multi_harmonic_fit(time,data,error,freq,nharm=4,return_model=False,freq_sep=0.01,fit_mean=True,fit_slope=False): + """ + Simultaneous fit of a sum of sinusoids by weighted, linear least squares. + model(t) = C0 + C1*(t-t0) + Sum_i Sum_j Aij sin(2*pi*j*fi*(t-t0)+phij), i=[1,nfreq], j=[1,nharm] + [t0 defined such that ph11=0] + + Input: + time: x vector + data: y vector + error: uncertainty on data + freq: one or more frequencies freq_i to fit + nharm: number of harmonics of each frequency to fit (nharm=1 is just fundamental) + fij = fi, 2*fi, ... nharm*fi + freq_sep: freq_ij seperated by less than this are ignored (should be the search grid spacing) + fit_slope=False, then C1=0 + fit_mean=False, then C0=0 + + Output: + A dictionary containing the model evaluated on the time grid (if return_model==True) and + the model amplitudes Aij, phases phij, and their uncertainties. + """ + t = time.astype('float64') + r = data.astype('float64') + dr = error.astype('float64') + + numt = len(t) + + wt = 1./dr**2 + s0 = wt.sum() + t0 = (t*wt).sum()/s0 + t -= t0 + + dr *= sqrt(s0) + r0 = (r*wt).sum()/s0 + r -= r0 + + nfit=0 + if (fit_mean==True): + nfit=1 + + if (fit_slope==True): + fit_mean=True + nfit=2 + tm = t.max() + s1 = ((t/tm)**2*wt).sum() + sb = ((t/tm)*r*wt).sum() + slope = sb/s1; s1 /= s0 + r -= slope*t/tm + tt = t/tm/dr + + rr = r/dr + chi0 = dot(rr,rr)*s0 + + matr = empty((nfit+2*nharm,nfit+2*nharm),dtype='float64') + vec = empty(nfit+2*nharm,dtype='float64') + + sx = empty((nharm,numt),dtype='float64') + cx = empty((nharm,numt),dtype='float64') + + # + # We will solve matr*res = vec, for res. Define matr and vec. + # + sx0,cx0 = sin(2*pi*t*freq), cos(2*pi*t*freq) + sx[0,:] = sx0/dr; cx[0,:] = cx0/dr + for i in range(nharm-1): + sx[i+1,:] = cx0*sx[i,:] + sx0*cx[i,:] + cx[i+1,:] = -sx0*sx[i,:] + cx0*cx[i,:] + + if (nfit>0): + vec[0] = 0.; matr[0,0] = 1.; + if (nfit>1): + vec[1] = matr[0,1] = matr[1,0] = 0.; matr[1,1] = s1 + + for i in range(nharm): + vec[i+nfit] = dot(sx[i,:],rr) + vec[nharm+i+nfit] = dot(cx[i,:],rr) + if (nfit>0): + matr[0,i+nfit] = matr[i+nfit,0] = dot(sx[i,:],1./dr) + matr[0,nharm+i+nfit] = matr[nharm+i+nfit,0] = dot(cx[i,:],1./dr) + if (nfit>1): + matr[1,i+nfit] = matr[i+nfit,1] = dot(sx[i,:],tt) + matr[1,nharm+i+nfit] = matr[nharm+i+nfit,1] = dot(cx[i,:],tt) + for j in range(i+1): + matr[j+nfit,i+nfit] = matr[i+nfit,j+nfit] = dot(sx[i,:],sx[j,:]) + matr[j+nfit,nharm+i+nfit] = matr[nharm+i+nfit,j+nfit] = dot(cx[i,:],sx[j,:]) + matr[nharm+j+nfit,i+nfit] = matr[i+nfit,nharm+j+nfit] = dot(sx[i,:],cx[j,:]) + matr[nharm+j+nfit,nharm+i+nfit] = matr[nharm+i+nfit,nharm+j+nfit] = dot(cx[i,:],cx[j,:]) + + + out_dict={} + + # + # Convert to amplitudes and phases and propagate errors + # + out_dict['cn0'] = r0 + out_dict['cn0_error'] = 1./sqrt(s0) + out_dict['trend'] = 0. + out_dict['trend_error']=0. + + A0,B0,vA0,vB0,covA0B0 = zeros((5,nharm),dtype='float64') + amp,phase,rel_phase = zeros((3,nharm),dtype='float64') + damp,dphase = zeros((2,nharm),dtype='float64') + covA0B0 = zeros(nharm,dtype='float64') + res = zeros(nfit+2*nharm,dtype='float64') + err2 = zeros(nfit+2*nharm,dtype='float64') + + out_dict['bayes_factor'] = 0. + + try: + # + # solve the equation and replace matr with its inverse + # + m0 = cho_factor(matr,lower=False) + out_dict['bayes_factor'] = -log(trace(m0[0])) + res = cho_solve(m0,vec) + CholeskyInverse(m0[0],matr) + + A0, B0 = res[nfit:nharm+nfit],res[nharm+nfit:] + amp = sqrt(A0**2+B0**2) + phase = arctan2( B0,A0 ) + + err2 = diag(matr)/s0 + vA0, vB0 = err2[nfit:nharm+nfit], err2[nharm+nfit:] + for i in range(nharm): + covA0B0[i] = matr[nfit+i,nharm+nfit+i]/s0 + + damp = sqrt( A0**2*vA0 + B0**2*vB0 + 2.*A0*B0*covA0B0 )/amp + dphase = sqrt( A0**2*vB0 + B0**2*vA0 - 2.*A0*B0*covA0B0 )/amp**2 + rel_phase = phase - phase[0]*(1.+arange(nharm)) + rel_phase = arctan2( sin(rel_phase),cos(rel_phase) ) + + except: + print ("Failed: singular matrix! (Are your frequencies unique/non-harmonic?)") + + out_dict['time0'] = t0-phase[0]/(2*pi*freq) + out_dict["amplitude"] = amp + out_dict["amplitude_error"] = damp + out_dict["rel_phase"] = rel_phase + out_dict["rel_phase_error"] = dphase + + modl = r0 + dot(A0,sx*dr) + dot(B0,cx*dr) + if (nfit>0): + out_dict['cn0'] += res[0] + out_dict['cn0_error'] = sqrt(err2[0]) + modl += res[0] + if (nfit>1): + out_dict['trend'] = (res[1]+slope)/tm + out_dict['trend_error'] = sqrt(err2[1])/tm + modl += out_dict['trend']*t + ### + #import os + #import matplotlib.pyplot as pyplot + #t_folded = t % (1./freq) + #pyplot.title("nfit=%d After modl += res[0] and modl += out_dict['trend']*t" % (nfit)) + + #pyplot.plot(t_folded, data, 'bo', ms=3) + #pyplot.plot(t_folded, modl, 'ro', ms=3) + #pyplot.plot(t_folded, modl - out_dict['trend']*t, 'mo', ms=3) + #pyplot.plot(t_folded, out_dict['trend']*t, 'go', ms=3) + ##pyplot.plot(t, data, 'bo', ms=3) + ##pyplot.plot(t, modl, 'ro', ms=3) + ##pyplot.plot(t, modl - out_dict['trend']*t, 'mo', ms=3) + ##pyplot.plot(t, out_dict['trend']*t, 'go', ms=3) + ###pyplot.show() + ##fpath = '/tmp/multiharmonic.ps' + ##pyplot.savefig(fpath) + ##os.system('gv %s &' % (fpath)) + #import pdb; pdb.set_trace() + ### + resid = (modl-r-r0-slope*tt*dr)/dr + out_dict['chi2'] = dot(resid,resid)*s0 + out_dict['cn0'] += out_dict['trend']*(out_dict['time0']-t0) + else: + resid = (modl-r-r0)/dr + out_dict['chi2'] = dot(resid,resid)*s0 + + ### + #import os + #import matplotlib.pyplot as pyplot + #t_folded = t % (1./freq) + #pyplot.title("nfit=%d freq=%f End" % (nfit, freq)) + + #pyplot.plot(t_folded, data, 'bo', ms=3) + #pyplot.plot(t_folded, modl, 'ro', ms=3) + #pyplot.plot(t_folded, modl - out_dict['trend']*t, 'mo', ms=3) + #pyplot.plot(t_folded, out_dict['trend']*t, 'go', ms=3) + ##pyplot.plot(t, data, 'bo', ms=3) + ##pyplot.plot(t, modl, 'ro', ms=3) + ##pyplot.plot(t, modl - out_dict['trend']*t, 'mo', ms=3) + ##pyplot.plot(t, out_dict['trend']*t, 'go', ms=3) + ###pyplot.show() + #fpath = '/tmp/multiharmonic.ps' + #pyplot.savefig(fpath) + #os.system('gv %s &' % (fpath)) + #import pdb; pdb.set_trace() + #pyplot.clf() + ### + + + out_dict['nu'] = numt - 2*nharm - nfit + out_dict['signif'] = chi2sigma(chi0,out_dict['chi2'],numt-nfit,nharm) + if (return_model): + out_dict['model'] = modl + + return out_dict diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/plot_methods.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/plot_methods.py new file mode 100644 index 00000000..a26cb69b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/plot_methods.py @@ -0,0 +1,44 @@ +from __future__ import print_function +try: + import pylab +except: + pass +try: + from pylab import * +except: + pass + +class plot_vs_time(object): + """ inheritable function to plot oneself against the time axis """ + extname = 'plot vs time inheritable method' #extractor's name + def plot_feature(self,properties): + plot(self.time_data, properties[self.extname], label=self.extname) + +class plot_vs_frequencies(object): + """ inheritable function to plot oneself against the frequency axis """ + extname = 'plot vs frequency inheritable method' + def plot_feature(self,properties): + # dstarr hacks this since some 'results' are tuples with frequencies as the [1] element + #plot(self.frequencies, properties[self.extname], label=self.extname) + if len(properties[self.extname]) == 2: + pylab.plot(properties[self.extname][1],properties[self.extname][0], 'bo') + pylab.title(self.extname) + pylab.show() + else: + #plot(self.frequencies, properties[self.extname], label=self.extname) + pylab.plot(properties[self.extname], 'bo') + pylab.title(self.extname) + pylab.show() + +class plot_vertical_line(object): + """ inheritable function to plot oneself against the frequency axis """ + extname = 'plot vertical line inheritable method' #extractor's name + def plot_feature(self,properties): + print(self.extname) + print(properties[self.extname]) + axvline(x=properties[self.extname],label=self.extname) +class plot_horizontal_line(object): + """ inheritable function to plot oneself horizontally """ + extname = 'plot horizontal line inheritable method' #extractor's name + def plot_feature(self,properties): + axhline(x=properties[self.extname],label=self.extname) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/pre_whiten.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/pre_whiten.py new file mode 100644 index 00000000..63bffe40 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/pre_whiten.py @@ -0,0 +1,291 @@ +#! /usr/bin/env python +# this is Nat's code copied over from the feature_extract project on August 3rd 2008, but I copied over nat's original svn upload, not Dan's modification (the modifications did not apply to this project) + +from __future__ import division +from __future__ import absolute_import +from numpy import * + +from .lomb_scargle_refine import lprob2sigma + + +def chi2sigma(chi0,chi1,nu0,nharm): + from scipy.stats import betai + from scipy.special import betaln + + nu1 = nu0 - 2.*nharm + dfn = nu0-nu1 + dfd = nu1 + sigma = 0. + if (dfn>0 and dfd>0 and chi0>chi1): + fstat = (chi0/chi1-1.)*dfd/dfn + prob = betai( dfd/2., dfn/2., dfd/(dfd+dfn*fstat) ) + if (dfd<=0 or dfn<=0): lprob=0. + elif (chi1==0): lprob=-999. + elif (prob==0): lprob = 0.5*dfd*log( dfd/(dfd+dfn*fstat) )-log(dfd/2.)-betaln(dfd/2.,dfn/2.) + else: lprob = log(prob) + sigma = lprob2sigma(lprob) + + return sigma + + +def pre_whiten(time, signal, freq, delta_time=[], signal_err=[], dof=-999, +nharm_min=4, nharm_max=20): + """Generates a harmonic fit to data (time,signal) with at most + nharm_max harmonics relative to the fundamental frequency freq. + Report statistics for nharm_min of them. + """ + n0 = len(time) + if (dof==-999 or dof>n0): dof=n0 + + A0 = zeros(nharm_max,dtype=float) + dA0 = zeros(nharm_max,dtype=float) + B0 = zeros(nharm_max,dtype=float) + dB0 = zeros(nharm_max,dtype=float) + pha = zeros(nharm_max,dtype=float) + + # if data error not given, assume all are unity + if (signal_err==[]): + wt = ones(n0,dtype=float) + else: + wt = 1./signal_err**2; + wt[signal_err<=0]=1. + + # if delta_time not given, assume 0 + do_sync=True + if (delta_time==[]): + do_sync=False + delta_time = zeros(n0, dtype=float) + + sync_func = lambda x: 1. + if (do_sync): + sync_func = lambda x: (1.e-99 + sin(pi*x))/(1.e-99 + pi*x) + + x = 2*pi*freq*time + cn = 1.*signal + + # just in case it wasn't already subtracted away + s0 = sum(wt) + mn = sum(cn*wt) / s0 + cn_offset = mn + cn -= cn_offset + dof = dof - 1. + + # initial chi^2 value for constant fit + nu0 = dof + chi0 = sum( cn**2*wt ) + + # + n_grid = (1+nharm_max)*20 + x_grid = 2*pi*arange(n_grid,dtype=float)/(1.*n_grid) + modls = zeros([nharm_max,n_grid],dtype=float) + modlc = zeros([nharm_max,n_grid],dtype=float) + modl0 = zeros(n_grid,dtype=float) + vmodl0 = zeros(n_grid,dtype=float) + + # + # do the dirty work, fit for the sinusoid amplitudes and phases + # modulus cn = A*sin(x+pha) , of A0*sin(x)+B0*cos(x) + # + chi1_last = chi0 + stop = 0 + for i in range(nharm_max): + + j = i+1 + + synct = sync_func(freq*j*delta_time) + sinx = sin(j*x)*synct + cosx = cos(j*x)*synct + + ts2 = 2.*sum( sinx*cosx*wt ) + tc2 = sum( (cosx**2-sinx**2)*wt ) + + x0 = 0.5*arctan2(ts2, tc2)/j + sinomtau = sin(j*x0) + cosomtau = cos(j*x0) + sin2omtau = 2.*sinomtau*cosomtau; + cos2omtau = cosomtau**2 - sinomtau**2 + + tmp = tc2*cos2omtau + ts2*sin2omtau; + tc2 = 0.5*(s0+tmp); + ts2 = 0.5*(s0-tmp); + + tmp = sinx + sinx = tmp*cosomtau-cosx*sinomtau + cosx = cosx*cosomtau + tmp*sinomtau + + sh = sum( cn*sinx*wt ) + ts1 = sum( sinx*wt ) + + ch = sum( cn*cosx*wt ) + tc1 = sum( cosx*wt ) + + A0[i] = sh / ts2; dA0[i] = 1./sqrt(ts2); + B0[i] = ch / tc2; dB0[i] = 1./sqrt(tc2); + cn0 = ( A0[i]*ts1 + B0[i]*tc1 ) / ( ts1**2/ts2 + tc1**2/tc2 - s0 ); + A0[i] -= cn0*ts1/ts2; + B0[i] -= cn0*tc1/tc2; + + pha[i] = arctan2(B0[i],A0[i]) - j*x0 + + cn_test = cn - cn0 - ( A0[i]*sinx + B0[i]*cosx ) * synct + + chi1 = sum( cn_test**2*wt ) # chi^2 for harmonic component removed + if (chi1 > chi1_last*(nu0-2*j)/(nu0-2*(j-1)) or j==nharm_max): + stop=1 + nharm = i + sigma = chi2sigma(chi0,chi1,nu0,nharm) + + if (stop==1 and j>nharm_min): # calculate >= nharm_min harmonics + + A0 = A0[:i] + dA0 = dA0[:i] + B0 = B0[:i] + dB0 = dB0[:i] + pha = pha[:i] + modls = modls[:i,:] + modlc = modlc[:i,:] + break + + chi1_last = chi1 + cn = cn_test + cn_offset += cn0 + + modls[i,:] = sin(j*(x_grid-x0)) + modlc[i,:] = cos(j*(x_grid-x0)) + modl0 += A0[i]*modls[i,:] + B0[i]*modlc[i,:] + vmodl0 += (dA0[i]*modls[i,:])**2 + (dB0[i]*modlc[i,:])**2 + + + # find light curve extremum for bookkeeping + pk = argmax(modl0*modl0) + # report phases relative to extremum, time' = time - time_offset + time_offset = - x_grid[pk] / (2*pi*freq) + for i in range(nharm): + pha[i] = pha[i] - (1+i)*x_grid[pk] + pha[i] = arctan2( sin(pha[i]),cos(pha[i]) ) + + x_grid = x_grid-x_grid[pk] + x_grid = arctan2(sin(x_grid),cos(x_grid)) + i0 = argmin(x_grid) + i1 = argmax(x_grid) + + # + # error propagation + # + A = sqrt( A0**2 + B0**2 ) + dA = sqrt( (A0*dA0)**2 + (B0*dB0)**2 ) / A + dpha = 1./(1+(A0/B0)**2) * sqrt( (dA0/B0)**2+(A0*dB0/B0**2)**2 ) + + # use the chi^2 values to get a better (more conservative) error estimate + fac=1. + sigma0 = A[0]/dA[0] + if (sigma0>sigma and sigma>0): fac = sigma0/sigma + # now apply it + dA = fac*dA + vmodl0 = fac**2*vmodl0 + dpha = fac*dpha + + # + # get flux extrema + # + mn = argmin(modl0) + fmin = modl0[mn] + vfmin = vmodl0[mn] + mx = argmax(modl0) + fmax = modl0[mx] + vfmax = vmodl0[mx] + peak2peak_flux = fmax - fmin + peak2peak_flux_error = sqrt( vfmin+vfmax ) + + # + # set flux offset and sign for moment calculation below + # + s0 = 0.5*(modl0[i0]+modl0[i1]) + vs0 = 0.25*(vmodl0[i0]+vmodl0[i1]) + + #import Gnuplot + #import time + #plotobj = Gnuplot.Gnuplot() + #plotobj.xlabel('Time (s)') + #plotobj.ylabel('Folded Light Curve') + #plotobj('unset logscale x') + #plotobj.plot(Gnuplot.Data(x_grid/(2*pi*freq),modl0-s0)) + #time.sleep(3) + + niter=10 + for k in range(niter): + if (k==0): window = 1. + + nmom = 4 # number of moments requested (don't change) + mu = zeros(1+nmom,dtype=float) + vmu = zeros(1+nmom,dtype=float) + x0=0. + norm=1. + for j in range(1+nmom): + xfac = pow(x_grid-x0,j)*window + mu[j] = -s0*mean(xfac)/norm + vmu[j] = vs0*(mean(xfac)/norm)**2 + for k in range(nharm): + mas = mean( xfac*modls[k,:] ) + mac = mean( xfac*modlc[k,:] ) + mu[j] = mu[j] + (A0[k]*mas + B0[k]*mac)/norm + vmu[j] = vmu[j] + (dA0[k]*mas/norm)**2 + (dB0[k]*mac/norm)**2 + if (j==0 and abs(mu[0])>0): norm = mu[0] + if (j==1): x0 = mu[1] + if (j==2): window = 1*( abs(x_grid-x0) < 3.*sqrt(mu[2]) ) + if (sum(window)==n_grid): break + + # defaults + moments = array([0.,0.5/freq,0.,0.]) + dmoments = array([1.,0.5/freq,1.,1.]) + if (abs(mu[0])>0 and mu[2]>0): + av = x0 + var = mu[2] + stdev = sqrt(var) + skewness = mu[3] / mu[2]**1.5 + kurtosis = mu[4] / mu[2]**2 - 3. + # error propagation is approximate + dav = sqrt(vmu[1]) + dstdev = 0.5*sqrt(vmu[2]/mu[2]) + dskewness = sqrt( vmu[3] ) / var**1.5 + dkurtosis = sqrt( vmu[4] ) / var**2. + + moments = array([av,stdev/(2*pi*freq),skewness,kurtosis]) + dmoments = array([dav,dstdev/(2*pi*freq),dskewness,dkurtosis]) + + # + # put it all in a dictionary + # + freqs = freq*(1+arange(nharm_min)) + #out_dict = { 'signif': sigma, 'peak2peak_flux': peak2peak_flux, + # 'peak2peak_flux_error': peak2peak_flux_error, 'amplitude': A[:nharm_min], + # 'freq': freqs, 'amplitude_error': dA[:nharm_min], 'rel_phase': pha[:nharm_min], + # 'rel_phase_error': dpha[:nharm_min], 'moments': moments, + # 'moments_err': dmoments, 'nharm': nharm} + + # 20080508: dstarr wants verbosely labeled dict: + out_dict = { 'signif': sigma, 'peak2peak_flux': peak2peak_flux, + 'peak2peak_flux_error': peak2peak_flux_error, 'nharm': nharm} + + for i in range(len(moments)): + out_dict['moments_' + str(i)] = moments[i] + for i in range(len(dA[:nharm_min])): + out_dict['amplitude_error_' + str(i)] = dA[:nharm_min][i] + for i in range(len(dmoments)): + out_dict['moments_err_' + str(i)] = dmoments[i] + for i in range(len(dpha[:nharm_min])): + out_dict['rel_phase_error_' + str(i)] = dpha[:nharm_min][i] + for i in range(len(A[:nharm_min])): + out_dict['amplitude_' + str(i)] = A[:nharm_min][i] + for i in range(len(pha[:nharm_min])): + out_dict['rel_phase_' + str(i)] = pha[:nharm_min][i] + for i in range(len(freqs)): + out_dict['freq_' + str(i)] = freqs[i] + + out_dict = { 'signif': sigma, 'peak2peak_flux': peak2peak_flux, +'peak2peak_flux_error': peak2peak_flux_error, 'amplitude': A[:nharm_min], +'freq': freqs, 'amplitude_error': dA[:nharm_min], 'rel_phase': pha[:nharm_min], +'rel_phase_error': dpha[:nharm_min], 'moments': moments, +'moments_err': dmoments, 'nharm': nharm, 'time_offset': time_offset,'y_offset':cn_offset} + + return cn, out_dict diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/setup.py b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/setup.py new file mode 100644 index 00000000..39e785a3 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/common_functions/setup.py @@ -0,0 +1,21 @@ +import os +import numpy as np +from Cython.Build import cythonize + +base_path = os.path.abspath(os.path.dirname(__file__)) + + +def configuration(parent_package='', top_path=None): + from numpy.distutils.misc_util import Configuration + config = Configuration('common_functions', parent_package, top_path) + + cythonize(os.path.join(base_path, '_lomb_scargle.pyx')) + + config.add_extension('_lomb_scargle', '_lomb_scargle.c', + include_dirs=[np.get_include()]) + + return config + +if __name__ == '__main__': + from numpy.distutils.core import setup + setup(**configuration(top_path='').todict()) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/dc_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/dc_extractor.py new file mode 100644 index 00000000..96ea5c6c --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/dc_extractor.py @@ -0,0 +1,25 @@ +from __future__ import absolute_import +from ..FeatureExtractor import FeatureExtractor + +from scipy import optimize +from .common_functions import ChiSquare +from .common_functions.plot_methods import plot_horizontal_line + + +class dc_extractor(plot_horizontal_line,FeatureExtractor,ChiSquare): + active = True + extname = 'dc' #extractor's name + def extract(self): +# print 'xdata',self.time_data,'ydata', self.flux_data,'rms_data',self.rms_data + dc = optimize.fminbound(self.weighted_average,-10,10,args=(self.time_data,self.flux_data,self.rms_data)) + # KLUDGY 20090810: (on some systems optimizes.fminbound returns an array, other ones it returns a numpy.float). The least painful fix is this: + try: + return(dc[0]) + except: + return(dc) + def weighted_average(self,u,x,y,rms): + def average(x): + dc = x.copy() + dc[:] = u + return dc + return self.chi_square_sum(y,average,x=x,rms=rms) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/delta_phase_2minima_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/delta_phase_2minima_extractor.py new file mode 100644 index 00000000..8e185b69 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/delta_phase_2minima_extractor.py @@ -0,0 +1,147 @@ +try: + from ..FeatureExtractor import FeatureExtractor +except: + import os + ppath = os.environ.get('PYTHONPATH') + os.environ.update({'PYTHONPATH': ppath + ":" + os.path.realpath("..")}) + #print os.environ.get("PYTHONPATH") + from FeatureExtractor import FeatureExtractor + +import numpy#, pdb +from scipy.optimize import fmin +try: + import matplotlib.pyplot as plt +except: + pass + +class delta_phase_2minima_extractor(FeatureExtractor): + ''' + returns a best guess of the phase difference between the two + lowest minima of a lightcurve. + + only relevant for eclipsing sources, and best used + to identify orbital eccentricity + + author: I.Shivvers, June 2012 + ''' + active = True + extname = 'delta_phase_2minima' + def extract(self): + try: + # get info + t = self.time_data + m = self.flux_data + pdm_period = 1./self.fetch_extr('phase_dispersion_freq0') + p = self.fold(t, pdm_period) + + # find the proper window for the model + best_GCV, optimal_window = self.minimize_GCV(p, m) + mins = self.findMins(p,m, optimal_window) + val = abs(mins[0]-mins[1]) + if val > .5: val = 1.-val # keep between 0. and .5 + if val == 0.: val = .5 # only found one minimum; probably got the period wrong by factor of 2 + return val + except: + return 0.0 + + def findMins(self, p, m, optimal_window): + """ + Find and return the phase of two lowest minima of unsmoothed data + If only one minima, returns that phase twice. + Couched in error-catching, so that it returns 0.,0. if it can't + make sense of the specific LC """ + try: + # calculate smoothed model + bandwidth = float(optimal_window)/len(p) + model = self.kernelSmooth(p, m, bandwidth) + # resort into proper order + zpm = list(zip(p, model)) + zpm.sort() + zpm_arr = numpy.array(zpm) + phs = zpm_arr[:,0] + model = zpm_arr[:,1] + # identify and rank the peaks + peaks_ind = self.find_peaks(model) + zppi = list(zip(model[peaks_ind], phs[peaks_ind], peaks_ind)) + zppi.sort(reverse=True) + # only report a minima as seperate if the model goes back past the mean and returns in between them + threshold = numpy.mean(model) + min1 = zppi[0] + min2 = zppi[0] + for zed in zppi[1:]: + test_values = model[ min([zed[2], min1[2]]): max([zed[2], min1[2]])] + if min(test_values) < threshold and zed[0] > threshold: + min2 = zed + break + return [min1[1], min2[1]] + except (IndexError, UnboundLocalError): + return [0., 0.] + + def fold(self, times, period): + ''' return phases for folded at ''' + t0 = times[0] + phase = ((times-t0)%period)/period + return phase + + def rolling_window(self, b, window): + """ Call: numpy.mean(rolling_window(observations, n), 1) + """ + # perform smoothing using strides trick + shape = b.shape[:-1] + (b.shape[-1] - window + 1, window) + strides = b.strides + (b.strides[-1],) + return numpy.lib.stride_tricks.as_strided(b, shape=shape, strides=strides) + + def GCV(self, window, X,Y): + # put in proper order + zpm = list(zip(X,Y)) + zpm.sort() + zpm_arr = numpy.array(zpm) + phs = zpm_arr[:,0] + mags = zpm_arr[:,1] + # handle edges properly by extending array in both directions + if window>1: + b = numpy.concatenate((mags[-window/2:], mags, mags[:window/2-1])) + else: + b = mags + # calculate smoothed model and corresponding smoothing matrix diagonal value + model = numpy.mean(self.rolling_window(b, window), 1) + Lii = 1./window + # return the Generalized Cross-Validation criterion + GCV = 1./len(phs) * numpy.sum( ((mags-model)/(1.-Lii))**2 ) + return GCV + + def minimize_GCV(self,X,Y, window_range=(10,50,2)): + ''' quick way to pick best GCV value ''' + windows = numpy.arange(*window_range) + GCVs = numpy.array( [self.GCV(window, X,Y) for window in windows] ) + best_GCV = numpy.min(GCVs) + optimal_window = windows[ numpy.argmin(GCVs) ] + return best_GCV, optimal_window + + def GaussianKernel(self, x): + return (1./numpy.sqrt(2.*numpy.pi)) * numpy.exp(-x**2 / 2.) + + def kernelSmooth(self, X, Y, bandwidth): + ''' slow implementation of gaussian kernel smoothing ''' + L = numpy.zeros([len(Y),len(X)]) + diags = [] + for i in range(len(X)): + diff = abs(X[i] - X) + # wrap around X=1; i.e. diff cannot be more than .5 + diff[diff>.5] = 1. - diff[diff>.5] + # renormalize, and operate on l vector + l = diff/bandwidth + # calculate the Gaussian for the values within 4sigma and plug it in + # anything beyond 4sigma is basically zero + tmp = self.GaussianKernel(l[l<4]) + diags.append(numpy.max(tmp)) + L[i,l<4] = tmp/numpy.sum(tmp) + # model is the smoothing matrix dotted into the data + return numpy.dot(L, Y.T) + + def find_peaks(self, x): + """ find peaks in """ + xmid = x[1:-1] # orig array with ends removed + xm1 = x[2:] # orig array shifted one up + xp1 = x[:-2] # orig array shifted one back + return numpy.where(numpy.logical_and(xmid > xm1, xmid > xp1))[0] + 1 diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/dist_from_u_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/dist_from_u_extractor.py new file mode 100644 index 00000000..4a7cabcf --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/dist_from_u_extractor.py @@ -0,0 +1,12 @@ +from ..FeatureExtractor import InterExtractor + +class dist_from_u_extractor(InterExtractor): + active = True + extname = 'dist_from_u' #extractor's name + def extract(self): + u = self.fetch_extr('weighted_average') + sd = self.fetch_extr('wei_av_uncertainty') + diff = self.flux_data - u + uncer = self.rms_data + sd + self.uncertainty = uncer + return diff diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/distance_in_arcmin_to_nearest_galaxy.py b/mltsp/TCP/Software/feature_extract/Code/extractors/distance_in_arcmin_to_nearest_galaxy.py new file mode 100644 index 00000000..8835e82e --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/distance_in_arcmin_to_nearest_galaxy.py @@ -0,0 +1,30 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class distance_in_arcmin_to_nearest_galaxy(ContextFeatureExtractor): + """distance_in_arcmin_to_nearest_galaxy""" + active = True + extname = 'distance_in_arcmin_to_nearest_galaxy' #extractor's name + + cutoff = 100.0 ## arcmin + verbose = False + def extract(self): + n = self.fetch_extr('tmpned') + + #if not isinstance(n,ned.NED): + # self.ex_error("bad ned instance") + + try: + tmp = n.distance_in_arcmin_to_nearest_galaxy() + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + + if tmp['distance'] is None or tmp['distance'] > self.cutoff: + ## JSB change to None because we assume we dont have a result here + rez = None + else: + rez = tmp['distance'] + if self.verbose: + print(tmp) + return rez + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/distance_in_kpc_to_nearest_galaxy.py b/mltsp/TCP/Software/feature_extract/Code/extractors/distance_in_kpc_to_nearest_galaxy.py new file mode 100644 index 00000000..373e3ff3 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/distance_in_kpc_to_nearest_galaxy.py @@ -0,0 +1,32 @@ +from __future__ import print_function +from __future__ import absolute_import +from ..FeatureExtractor import ContextFeatureExtractor + +from . import ned + +class distance_in_kpc_to_nearest_galaxy(ContextFeatureExtractor): + """distance_in_kpc_to_nearest_galaxy""" + active = True + extname = 'distance_in_kpc_to_nearest_galaxy' #extractor's name + + cutoff = 1000.0 ## kpc + verbose = False + def extract(self): + n = self.fetch_extr('tmpned') + + #if not isinstance(n,ned.NED): + # self.ex_error("bad ned instance") + + try: + tmp = n.distance_in_kpc_to_nearest_galaxy() + except: + return None # 20081010 dstarr adds try/except in case NED mysql cache server is down + if tmp['distance'] is None or tmp['distance'] > self.cutoff: + ## JSB change to None because we assume we dont have a result here + rez = None + else: + rez = tmp['distance'] + if self.verbose: + print(tmp) + return rez + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/eclipse_poly_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/eclipse_poly_extractor.py new file mode 100644 index 00000000..4fb1c1be --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/eclipse_poly_extractor.py @@ -0,0 +1,171 @@ +from ..FeatureExtractor import FeatureExtractor, InterExtractor + +import os, sys + +class eclipse_poly_extractor(InterExtractor): + """ +Josh's 20110809 eclipsing features code, which characterizes various +aspects of eclipsing timeseries. Applies a polyfit algorithm which is +not 2nd deriv continuous constrained as the splinefits in Nat's +lombscargle code. + +Requires GSL and requires C code compilation of polyfit.c into +polyfit.so for Python bindings. + + """ + #active = False # TODO probably want False + internal_use_only = False # if set True, then seems to run all X code for each sub-feature + active = True # if set False, then seems to run all X code for each sub-feature + extname = 'eclipse_poly' #extractor's name + + def extract(self): + """ Note: this is an internal feature which calculates data structures which + are used by other features. + """ + lomb_dict = self.fetch_extr('lomb_scargle') + + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Algorithms/EclFeatures')) + import eclipse_features + a = eclipse_features.ebfeature(t=self.properties['data'][self.band]['input']['time_data'], + m=self.properties['data'][self.band]['input']['flux_data'], + merr=self.properties['data'][self.band]['input']['rms_data'], + srcid=self.properties['data'][self.band]['input']['srcid'], + allow_plotting=False, + fix_initial_period=True, + initial_period=1./lomb_dict['freq1_harmonics_freq_0']) + a.gen_orbital_period(doplot=False, dynamic=False, eclipse_shorter=True, choose_largest_numf=True)#, dynamic=True) + a.features['final_period_ratio'] = a.features['p_pulse'] * lomb_dict['freq1_harmonics_freq_0'] + #import pprint + #pprint.pprint(a.features) + #import pdb; pdb.set_trace() + #print + return a.features + + + +class eclpoly_best_orb_chi2_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_best_orb_chi2' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['best_orb_chi2'] + return val + + +class eclpoly_best_orb_period_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_best_orb_period' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['best_orb_period'] + return val + + +class eclpoly_15_ratio_diff_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_15_ratio_diff' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['feature-15-ratio-diff'] + return val + + +class eclpoly_20_ratio_diff_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_20_ratio_diff' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['feature-20-ratio-diff'] + return val + + +class eclpoly_30_ratio_diff_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_30_ratio_diff' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['feature-30-ratio-diff'] + return val + + +class eclpoly_5_ratio_diff_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_5_ratio_diff' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['feature-5-ratio-diff'] + return val + + +class eclpoly_8_ratio_diff_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_8_ratio_diff' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['feature-8-ratio-diff'] + return val + + +class eclpoly_is_suspect_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_is_suspect' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['is_suspect'] + return int(val) + + +class eclpoly_orb_signif_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + """ + active = True + extname = 'eclpoly_orb_signif' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['orb_signif'] + return val + + +class eclpoly_p_pulse_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + + This is essentially freq1, so we disable in __init__.py + """ + active = True + extname = 'eclpoly_p_pulse' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['p_pulse'] + return val + + +class eclpoly_p_pulse_initial_extractor(FeatureExtractor): + """ A feature generated by jbloom 20110809 eclipsing polyfit eclipse_features.py code. + This is essentially freq1, so we disable in __init__.py + """ + active = True + extname = 'eclpoly_p_pulse_initial' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['p_pulse_initial'] + return val + + +class eclpoly_final_period_ratio_extractor(FeatureExtractor): + """ A feature added by dstarr on 20120206: ratio of eclip poly fit final period with LS freq1 period. + This represents how different the eclipsing period is from freq1, without duplicating a freq1 feature for + most sources (which would give more power than intended). + + """ + active = True + extname = 'eclpoly_final_period_ratio' #extractor's name + def extract(self): + val = self.properties['data'][self.band]['inter']['eclipse_poly'].result['final_period_ratio'] + return val + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/ecpb_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/ecpb_extractor.py new file mode 100644 index 00000000..e9c0778b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/ecpb_extractor.py @@ -0,0 +1,15 @@ +from ..FeatureExtractor import ContextFeatureExtractor + +class ecpb_extractor(ContextFeatureExtractor): + """the Ecliptic coordinate b (latitude) in degrees""" + active = True + extname = 'ecpb' #extractor's name + + def extract(self): + posdict = self.fetch_extr('position_intermediate') + + if 'ecb' not in posdict or posdict['ecb'] is None: + self.ex_error("bad ecb in the intermediate extractor. check install of pyephem and input coordinate") + + return posdict['ecb'] + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/ecpl_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/ecpl_extractor.py new file mode 100644 index 00000000..80249692 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/ecpl_extractor.py @@ -0,0 +1,15 @@ +from ..FeatureExtractor import ContextFeatureExtractor + +class ecpl_extractor(ContextFeatureExtractor): + """the Ecliptic coordinate l (longitude) in degrees""" + active = True + extname = 'ecpl' #extractor's name + + def extract(self): + posdict = self.fetch_extr('position_intermediate') + + if 'ecl' not in posdict or posdict['ecl'] is None: + self.ex_error("bad ecl in the intermediate extractor. check install of pyephem and input coordiantes") + + return posdict['ecl'] + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/example_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/example_extractor.py new file mode 100644 index 00000000..6e24205e --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/example_extractor.py @@ -0,0 +1,17 @@ +from __future__ import absolute_import +from ..FeatureExtractor import FeatureExtractor + +from .common_functions.Example_Methods import Example_Methods + +class example_extractor(FeatureExtractor,Example_Methods): + """ Just an example extractor skeleton. For full example, see: + http://lyra.berkeley.edu/dokuwiki/doku.php?id=tcp:feature_testing + """ + internal_use_only = True + active = True + extname = 'example' # identifier used in final extracted value dict. + def extract(self): + ls_result_dict = self.fetch_extr('lomb_scargle') + median_val = self.fetch_extr('median') # fetches the result from the media extractor (median_val is now the media value of the timecurve) + summed_val = self.example_main_method(self.flux_data,lambda x: median_val,x=self.time_data,rms=self.rms_data) # returns sum(self.flux_data) + return float(summed_val)/median_val diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/first_freq_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/first_freq_extractor.py new file mode 100644 index 00000000..f833f293 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/first_freq_extractor.py @@ -0,0 +1,18 @@ +from __future__ import absolute_import +from ..FeatureExtractor import FeatureExtractor +from .common_functions import plot_methods + +from .common_functions.plot_methods import plot_vertical_line + +class first_freq_extractor(plot_vertical_line,FeatureExtractor): + """grabs the highest frequency from an fft or lomb power spectrum""" + active = True + extname = 'first_freq' #extractor's name + def extract(self): + power = self.fetch_extr('power') + freqs = self.frequencies + max_index = power[1:].argmax() + 1 #power[1:len(power)/2+1].argmax() + 1 + max_freq = freqs[max_index] + #20080123dstarr comments: #assert max_freq < 0.5, "maximum frequency higher than 0.5" +# print "max_freq", max_freq, type(max_freq) + return max_freq diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/first_lomb_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/first_lomb_extractor.py new file mode 100644 index 00000000..81968e30 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/first_lomb_extractor.py @@ -0,0 +1,16 @@ +from __future__ import absolute_import +from ..FeatureExtractor import FeatureExtractor + +from .first_freq_extractor import first_freq_extractor +from .common_functions.plot_methods import plot_vertical_line + +class first_lomb_extractor(first_freq_extractor): + """ extracts the first frequency from the lomb periodogram""" + active = False + extname = 'first_lomb' #extractor's name + def extract(self): + power = self.fetch_extr('lomb') + freqs = self.frequencies + max_index = power[1:].argmax() + 1 + max_freq = freqs[max_index]#freqs[max_index] + return max_freq diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/fourier_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/fourier_extractor.py new file mode 100644 index 00000000..9e0ab7c3 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/fourier_extractor.py @@ -0,0 +1,25 @@ +from ..FeatureExtractor import InterExtractor +import numpy +from numpy import random, round +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass +from .common_functions import * +from .common_functions.plot_methods import plot_vs_frequencies + +class fourier_extractor(plot_vs_frequencies,InterExtractor): + active = 1 + active = False + extname = 'fourier' #extractor's name + def extract(self): + self.test_even() + #frequencies = self.frequencies #self.time_data / len(self.time_data) + fft = fftpack.fft(self.flux_data) + return fft + def test_even(self): + for x in range(len(self.time_data)-3): + slicex = self.time_data[x:x+3] # slice with three elements + if round((slicex[2] - slicex[1]),2) != round((slicex[1] - slicex[0]),2): + self.ex_error("Unevenly Spaced Data") diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/fourierextractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/fourierextractor.py new file mode 100644 index 00000000..7ab74ba5 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/fourierextractor.py @@ -0,0 +1,27 @@ +# TODO remove? +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +import numpy +from numpy import random, round +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass +from .common_functions import * +from .common_functions.plot_methods import plot_vs_frequencies + +class fourierextractor(plot_vs_frequencies,InterExtractor): + active = 1 + active = False + extname = 'fourier' #extractor's name + def extract(self): + self.test_even() + #frequencies = self.frequencies #self.time_data / len(self.time_data) + fft = fftpack.fft(self.flux_data) + return fft + def test_even(self): + for x in range(len(self.time_data)-3): + slicex = self.time_data[x:x+3] # slice with three elements + if round((slicex[2] - slicex[1]),2) != round((slicex[1] - slicex[0]),2): + self.ex_error("Unevenly Spaced Data") diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/frequency_ratio_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/frequency_ratio_extractor.py new file mode 100644 index 00000000..0c8f8407 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/frequency_ratio_extractor.py @@ -0,0 +1,25 @@ +from ..FeatureExtractor import FeatureExtractor + +class ratio21(FeatureExtractor): + """ Computes the ratio from the second frequency to the first frequency""" + active = True + extname = 'ratio21' #extractor's name + topex = 'second' + bottomex = 'first_freq' + def extract(self): + top = self.fetch_extr(self.topex) + bottom = self.fetch_extr(self.bottomex) + result = top/bottom + return result +class ratio31(ratio21): + """ Computes the ratio from the third frequency to the first frequency""" + active = True + extname = 'ratio31' #extractor's name + topex = 'third' + bottomex = 'first_freq' +class ratio32(ratio21): + """ Computes the ratio from the third frequency to the second frequency""" + active = True + extname = 'ratio32' #extractor's name + topex = 'third' + bottomex = 'second' diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/galb_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/galb_extractor.py new file mode 100644 index 00000000..eda74a10 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/galb_extractor.py @@ -0,0 +1,15 @@ +from ..FeatureExtractor import ContextFeatureExtractor + +class galb_extractor(ContextFeatureExtractor): + """the Galactic coordinate b (latitude) in degrees""" + active = True + extname = 'galb' #extractor's name + + def extract(self): + posdict = self.fetch_extr('position_intermediate') + + if 'galb' not in posdict or posdict['galb'] is None: + self.ex_error("bad gal-b in the intermediate extractor. check install pyephem and input coordinates") + + return posdict['galb'] + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/gall_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/gall_extractor.py new file mode 100644 index 00000000..e8df93bb --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/gall_extractor.py @@ -0,0 +1,15 @@ +from ..FeatureExtractor import ContextFeatureExtractor + +class gall_extractor(ContextFeatureExtractor): + """the Galactic coordinate l (longitude) in degrees""" + active = True + extname = 'gall' #extractor's name + + def extract(self): + posdict = self.fetch_extr('position_intermediate') + + if 'gall' not in posdict or posdict['gall'] is None: + self.ex_error("bad gal-l in the intermediate extractor. check install of pyephem and input coordinates") + + return posdict['gall'] + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/geohash2.py b/mltsp/TCP/Software/feature_extract/Code/extractors/geohash2.py new file mode 100644 index 00000000..29c9efd9 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/geohash2.py @@ -0,0 +1,215 @@ +#!/usr/bin/python +""" + implementation of http://en.wikipedia.org/wiki/Geohash + + This module was written in May 2008 by Schuyler Erle and is made + available in the public domain. Cheers to Christopher Schmidt for + suggesting it. Works in Python 2.3 and up. Run it on the command + line to try the doctests. Please send patches, comments, etc. to + schuyler@geocoder.us. + + You can instantiate a Geohash object with a (lon,lat) tuple, or with + a string. The bbox() and point() methods return the bounding box + and the center point of the area indicated by the geohash. Casting + the Geohash object to a string gives the hash itself. + + Adding two Geohash objects together gives the Geohash of their + minimal bounding box. + + The Geohash class inherits from a Geostring class, which provides an + identical API, but returns strings consisting of interleaved 0 and + 1 bits. Geostring is a less compact representation than the Geohash + class, but *much* more suitable for use when storing and comparing + bounding boxes in a B-Tree or similar index. If you are storing + bounding boxes in a database and space is not a major concern, you + should use the Geostring class instead of the Geohash. + +>>> hash = Geohash((-0.25, 51.5)) +>>> str(hash) +'gcpufr3cnxf6q' +>>> hash.bbox() +(-0.25, 51.5, -0.25, 51.5) +>>> hash.point() +(-0.25, 51.5) +>>> hash.bbox(4) +(-0.35156300000000001, 51.328125, 0.0, 51.503906000000001) + +*** note, floating point representations are weird +>>> -0.35156300000000001 == -0.351563 +True + +>>> hash = Geohash('9q8yykc03ycmh') +>>> hash.bbox() +(-122.41920399999999, 37.775196000000001, -122.41920399999999, 37.775196000000001) +>>> hash.point() +(-122.41920399999999, 37.775196000000001) +>>> hash.bbox(3) +(-123.75, 36.5625, -120.9375, 37.96875) +>>> union = hash + Geohash('9q8yze443z') +>>> str(union) +'9q8y' + +*** see note above +>>> -122.419204 == -122.41920399999999 +True + +A degenerate example, but at least it works lexically: + +>>> hash = Geoindex((-0.25,51.5),depth=8) +>>> str(hash) +'0222202022202022' +>>> hash.bbox() +(-1.40625, 51.328125, 0.0, 52.03125) +>>> hash2 = Geoindex((0.25,52.5),depth=8) +>>> str(hash2) +'2202000002000200' +>>> str(hash+hash2) +'1111111111111111' +>>> str(hash+hash2) > str(hash) +True +>>> str(hash+hash2) < str(hash2) +True + +>>> hash = Geostring((-0.25,51.5),depth=8) +>>> str(hash) +'0111101011101011' +>>> hash.bbox() +(-1.40625, 51.328125, 0.0, 52.03125) + +Some degenerate cases: + +>>> west = Geostring("0") +>>> west.bbox() +(-180.0, -90.0, 0.0, 90.0) +>>> east = Geostring("1") +>>> east.bbox() +(0.0, -90.0, 180.0, 90.0) +>>> str(east+west) +'' +>>> (east+west).bbox() +(-180.0, -90.0, 180.0, 90.0) +""" +from __future__ import print_function +from functools import reduce + +defbound = (0,-90,360,90) # (-180,-90,180,90) ## make this more astronomy friendly Josh Bloom +defdepth = 35 + +class Geostring (object): + def _to_bits (cls,f,depth=defdepth): + f *= (1 << depth) + return [(long(f) >> (depth-i)) & 1 for i in range(1,depth+1)] + _to_bits = classmethod(_to_bits) + + def bitstring (cls, xxx_todo_changeme,bound=defbound,depth=defdepth): + (x,y) = xxx_todo_changeme + x = cls._to_bits((x-bound[0])/float(bound[2]-bound[0]),depth) + y = cls._to_bits((y-bound[1])/float(bound[3]-bound[1]),depth) + bits = reduce(lambda x,y:x+list(y), zip(x,y), []) + return "".join(map(str,bits)) + bitstring = classmethod(bitstring) + + def __init__ (self, data, bound=defbound, depth=defdepth): + self.bound = bound + self.depth = depth + self.origin = bound[0:2] + self.size = (bound[2]-bound[0], bound[3]-bound[1]) + if isinstance(data,tuple) or isinstance(data,list): + self.hash = self.bitstring(data,bound,depth) + else: + self.hash = data + + def __str__ (self): + return self.hash + + def _to_bbox (self, bits): + depth = len(bits)/2 + minx = miny = 0.0 + maxx = maxy = 1.0 + for i in range(depth+1): + try: + minx += float(bits[i*2])/(2<>(4-i)&1 for i in range(5)] + for n in map(self.BASE_32.find, self.hash[:prefix])] + bits = reduce(lambda x,y:x+y, bits, []) + return self._to_bbox(bits) + +if __name__ == "__main__": + import sys + if len(sys.argv) == 1: + import doctest + doctest.testmod(verbose=True) + elif len(sys.argv) == 2: + print(Geohash(sys.argv[1]).bbox()) + else: + print(Geohash(map(float, sys.argv[1:3]))) \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/gskew_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/gskew_extractor.py new file mode 100644 index 00000000..16b8d406 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/gskew_extractor.py @@ -0,0 +1,20 @@ +from ..FeatureExtractor import FeatureExtractor +from numpy import median, sort, round +class gskew_extractor(FeatureExtractor): + """ Doesnt really have anything to do with skew at all. I tested this on the RCBs that we found and its clear that they all have fairly negative ghetto skew. Of course, for RCBs near the detection limit this wont be that helpful, and for highly active RCBs it may not be great, but for your typical RCB is should separate out from other things. Im curious to see what this produces for SRPV and Mira sources. + +Note - Ive arbitrarily selected 3 percent here. It could be 5 percent or 10, we should probably test a few different values to see how much difference it makes. + + """ + active = True + extname = 'gskew' # identifier used in final extracted value dict. + def extract(self): + """2012-06-12 Adam Miller coded + """ + medmag = median(self.flux_data) + sortmag = sort(self.flux_data) + three_per = int(round(0.03*len(self.flux_data))) +# TODO don't love this name... +# TODO this is just 2*np.median(x) - np.percentile(x, 98.5) - np.percentile(x, 1.5) w/ weird rounding of indices + ghetto_skew = (medmag - median(sortmag[-three_per:])) + (medmag-median(sortmag[0:three_per])) + return ghetto_skew diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/interng_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/interng_extractor.py new file mode 100644 index 00000000..64f87744 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/interng_extractor.py @@ -0,0 +1,46 @@ +from __future__ import absolute_import +from ..FeatureExtractor import ContextInterExtractor + +#from power_extractor import power_extractor as power_extractor +from . import ng + +class interng_extractor(ContextInterExtractor): + """intermediate call to the ng 200 Mpc galaxy server + should get something like + {'closest_in_light': 0.17192566500632125, + 'closest_in_light_absolute_bmag': -22.190000000000005, + 'closest_in_light_angle_from_major_axis': -125.26712677240506, + 'closest_in_light_dm': 33.200000000000003, + 'closest_in_light_physical_offset_in_kpc': 7.9431382807271822, + 'closest_in_light_position': (154.2234, 73.400639999999996), + 'closest_in_light_semimajor_r25_arcsec': 244.42816668246769, + 'closest_in_light_semiminor_r25_arcsec': 208.04211027151902, + 'closest_in_light_ttype': 3.8999999999999999, + 'closest_in_lightangular_offset_in_arcmin': 0.62555572920077607, + 'closest_units': 'galaxy_surface_brightness'} + + Explanation: + closest_in_light = "the nearest galaxy, in units of that galaxies r25 surface brightness ellipse". Less than ~1.5 should indicate that the source is reasonably sure of being physically associated with that galaxy + + closest_in_light_absolute_bmag: extinction corrected absolute magnitude of the nearest galaxy + + closest_in_light_angle_from_major_axis: offset angle from the semi-major axis (I'd think that cc would be +-20 deg around 0 deg and 180 deg. + + closest_in_light_dm: best distance modulus known + + closest_in_light_ttype: galaxy t-type if reasonable certain otherwise None + """ + active = True + extname = 'interng' #extractor's name + + n = None + def extract(self): + posdict = self.fetch_extr('position_intermediate') + + if 'ra' not in posdict or posdict['dec'] is None: + self.ex_error("bad RA or DEC in the intermediate ng extractor. check install pyephem and input coordinates") + + if not self.n: + self.n = ng.get_closest_by_light(pos=(posdict['ra'],posdict['dec'])) + + return self.n diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/intersdss_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/intersdss_extractor.py new file mode 100644 index 00000000..11e90de4 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/intersdss_extractor.py @@ -0,0 +1,57 @@ +from __future__ import absolute_import +from ..FeatureExtractor import ContextInterExtractor + +#from power_extractor import power_extractor as power_extractor +from . import sdss + +class intersdss_extractor(ContextInterExtractor): + """intermediate call to the sdss server + {'best_dl': 4455.1248913899999, + 'best_dm': 43.244299416029733, + 'best_offset_in_kpc': 7.0559739096982508, + 'bestz': 0.72108298999999998, + 'dec': 0.79265430000000003, + 'dered_g': 19.441016999999999, + 'dered_i': 19.391967999999999, + 'dered_r': 19.373417, + 'dered_u': 19.644580999999999, + 'dered_z': 19.353552000000001, + 'dist_in_arcmin': 0.016127780000000001, + 'in_footprint': True, + 'objid': 587731513946275936L, + 'photo2_flag': None, + 'photo2_z_cc': None, + 'photo2_z_d1': None, + 'photo2_zerr_cc': None, + 'photo2_zerr_d1': None, + 'photo_z': None, + 'photo_zerr': None, + 'ra': 15.008567559999999, + 'spec_confidence': 0.58286400000000005, + 'spec_veldisp': None, + 'spec_z': 0.72108300000000003, + 'spec_zStatus': 'xcorr_loc', + 'type': 'qso', + 'url': 'http://cas.sdss.org/astrodr7/en/tools/explore/obj.asp?id=587731513946275936', + 'urlalt': 'http://cas.sdss.org/astrodr7/en/tools/chart/navi.asp?ra=15.008568&dec=0.792654'} + + """ + active = True + extname = 'intersdss' #extractor's name + verbose = True + n = None + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + def extract(self): + posdict = self.fetch_extr('position_intermediate') + + if 'ra' not in posdict or posdict['dec'] is None: + self.ex_error("bad RA or DEC in the intermediate ng extractor. check install pyephem and input coordinates") + + #20090126 dstarr comments this conditional out: #if not self.n: + if 'sdss_internal_struct' in self.properties['data']['multiband']['inter']: + self.s = self.properties['data']['multiband']['inter']['sdss_internal_struct'] + else: + self.s = sdss.sdssq(pos=(posdict['ra'],posdict['dec']),verbose=self.verbose,maxd=self.light_cutoff*1.05) + + return self.s.feature diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/jansky_flux_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/jansky_flux_extractor.py new file mode 100644 index 00000000..5bf88606 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/jansky_flux_extractor.py @@ -0,0 +1,84 @@ +from __future__ import print_function +from ..FeatureExtractor import InterExtractor +from numpy import * + +class jansky_flux_extractor(InterExtractor): + """ Convert the flux from magnitudes to janskies """ + active = True + extname = 'jansky_flux' #extractor's name + # def extract(self): + # table1 = { \ + # "u": {"central":3650 , "width":680 , "f_lambda(0)": 4.27e-9 , "f_nu(0)": 1.90e-23, "constant": 13.84}, \ + # "b": {"central":4400 , "width":980 , "f_lambda(0)": 6.61e-9 , "f_nu(0)": 4.27e-23, "constant": 12.97}, \ + # "v": {"central":5500 , "width":890 , "f_lambda(0)": 3.64e-9 , "f_nu(0)": 3.67e-23, "constant": 13.72}, \ + # "r": {"central":7000 , "width":2200 , "f_lambda(0)": 1.74e-9 , "f_nu(0)": 2.84e-23, "constant": 13.54}, \ + # "i": {"central":9000 , "width":2400 , "f_lambda(0)": 8.32e-10, "f_nu(0)": 2.25e-23, "constant": 14.25}, \ + # "j": {"central":12500, "width":3000 , "f_lambda(0)": 3.18e-10, "f_nu(0)": 1.65e-23, "constant": 15.05}, \ + # "h": {"central":16500, "width":4000 , "f_lambda(0)": 1.18e-10, "f_nu(0)": 1.07e-23, "constant": 15.82}, \ + # "k": {"central":22000, "width":6000 , "f_lambda(0)": 4.17e-11, "f_nu(0)": 6.73e-24, "constant": 16.50}, \ + # "l": {"central":36000, "width":12000, "f_lambda(0)": 6.23e-12, "f_nu(0)": 2.69e-24, "constant": 17.82}, \ + # } # table 1 from Misconceptions About Astronomical Magnitudes," E. Schulman and C. V. Cox, American Journal of Physics, Vol. 65, pg. 1003 (1997). + # watts_m2 = self.fetch_extr('watt_per_m2_flux') + # centerA = table1[self.band.lower()]['central'] # Angstrom + # width = table1[self.band.lower()]['width'] # Angstrom + # minA = centerA - width / 2 + # maxA = centerA + width / 2 + # minm = minA * 1e-10 # Angstrom to m + # maxm = maxA * 1e-10 + # c = 299792458 # m / s + # maxHz = c / minm + # minHz = c / maxm + # width_Hz = maxHz - minHz + # jansky = watts_m2 / width_Hz # Jansky = W / m^2 / Hz + # return jansky + def extract(self): + try: + unit = self.flux_data_unit + except NameError: + unit = self.assumed_unit + if unit in ['mag','mags','magnitude']: + """ table from http://ssc.spitzer.caltech.edu/tools/magtojy/ref.html """ + zero_magnitude_fluxes = { \ + "u": 1823, \ + "b": 4130, \ + "v": 3781, \ + "r": 2941, \ + "i": 2635, \ + "j": 1603, \ + "h": 1075, \ + "k": 667 , \ + "l": 288 , \ + "m": 170 , \ + "n": 36 , \ + "o": 9.4 } + try: + """ This is inside a try/except to catch the possibility of the band not being in the zero_magnitude_fluxes dictionary """ + zero_magnitude = zero_magnitude_fluxes[self.band.lower()] + except KeyError: + self.ex_error("Band %s not found" % (self.band)) + """ follow the conversion method from http://ircamera.as.arizona.edu/astr_250/Lectures/Lec13_sml.htm """ + janskies = zero_magnitude * power(10, self.flux_data / (-2.5) ) + self.uncertainty = self.uncer_calc(janskies) + return janskies + else: + print("units not recognized", self.flux_data_unit, self.extname) + self.uncertainty = self.rms_data + return self.flux_data # else assume it's already in those units, no unit conversion implemented for the moment + def uncer_calc(self, flux_wm2): + """ calculate the uncertainty in the SI flux + Latex for the approximation (valid if the flux uncertainty is less than 10%): + + \sigma_m &=& \sqrt{ \sigma_{m,higher} \times \sigma_{m, lower}} \\ + &=& \sqrt{ \left( 2.5 \log_{10}(f - \sigma_f) - 2.5\log_{10}f \right) \times \left( -2.5 \log_{10}(f + \sigma_f) + 2.5\log_{10}f \right) } \\ + &=& \sqrt{ -2.5^2 \log_{10}\left(\frac{f}{f-\sigma_f}\right) \left(\log_{10}\frac{f}{f+\sigma_f}\right)} \\ + &=& \sqrt{ -2.5^2 \log_{10}\left(\frac{f-\sigma_f}{f}\right) \log_{10}\left(\frac{f+\sigma_f}{f}\right)} \\ + &=& 2.5\sqrt{ -\log_{10}\left( 1 - \frac{\sigma_f}{f} \right) \log_{10}\left( 1 + \frac{\sigma_f}{f} \right)} \\ + &=& \frac{2.5 }{\ln 10} \sqrt{ -\ln\left( 1 - \frac{\sigma_f}{f} \right) \ln\left( 1 + \frac{\sigma_f}{f} \right)} \\ + &\approx & \frac{2.5 }{\ln 10} \sqrt{ \left(\frac{\sigma_f}{f} \right) ^2 } \\ + &\approx & \frac{\sigma_f}{f} + + """ + f = flux_wm2 + sigmam = self.rms_data + sigmaf = f * sigmam + return sigmaf \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/kurtosis_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/kurtosis_extractor.py new file mode 100644 index 00000000..3d25ce57 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/kurtosis_extractor.py @@ -0,0 +1,12 @@ +from ..FeatureExtractor import FeatureExtractor + +from scipy import stats + +class kurtosis_extractor(FeatureExtractor): + """ calculates the kurtosis of the signal using scipy.stats.kurtosis + """ + active = True + extname = 'kurtosis' #extractor's name + def extract(self): + kurtosis = stats.kurtosis(self.flux_data) + return kurtosis diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/lcmodel_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/lcmodel_extractor.py new file mode 100644 index 00000000..440c5fb5 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/lcmodel_extractor.py @@ -0,0 +1,372 @@ +from ..FeatureExtractor import FeatureExtractor, InterExtractor + +import numpy as np +import scipy.integrate + +class lcmodel_extractor(InterExtractor): + """ Base class for the unfolded lightcurve model features. + dstarr coded 2012-07-20 + + Gaussian Kernel smoothing adapted from I.Shivvers' delta_phase_2minima_extractor.py + """ + internal_use_only = False # if set True, then seems to run all X code for each sub-feature + active = True # if set False, then seems to run all X code for each sub-feature + extname = 'lcmodel' #extractor's name + + def debug_compare_gp_and_shivv_models(self, X, y, dy, shivv_model, debug_x=[], debug_y=[], pos_delta_mag=None, neg_delta_mag=None): + """ Compare & Plot the fit generated by Shivver's code and the + scikits GaussianProcess function + + For debugging only. + """ + ##### + from sklearn.gaussian_process import GaussianProcess + from matplotlib import pyplot as pl + + t_min = np.min(X) + t_max = np.max(X) + x = np.atleast_2d(np.linspace(t_min, t_max, 10000)).T + + X = np.atleast_2d(X).T + + ### Instanciate a Gaussian Process model + #gp = GaussianProcess(corr='squared_exponential', theta0=1e-3, + # thetaL=1e-3, thetaU=1, + # nugget=(dy / y) ** 2, + # random_start=20) + gp = GaussianProcess(corr='absolute_exponential', theta0=1e-3, + nugget=(dy / y) ** 2, + random_start=10) + # Fit to data using Maximum Likelihood Estimation of the parameters + gp.fit(X, y) + + # Make the prediction on the meshed x-axis (ask for MSE as well) + y_pred, MSE = gp.predict(x, eval_MSE=True) + sigma = np.sqrt(MSE) + # Plot the function, the prediction and the 95% confidence interval based on + # the MSE + from matplotlib import rcParams + rcParams.update({'legend.fontsize':8}) + ms = 4 + fig = pl.figure() + pl.plot(x, [np.median(y)]*len(x), 'c', label='median') + #pl.plot(x, [np.mean(y)]*len(x), 'm', label=u'mean') + #pl.plot(X, y, 'r:', label=u'orig $m(t)$') + pl.errorbar(X.ravel(), y, dy, fmt='ro', ms=5, label='Observations') + pl.plot(X, shivv_model, 'g', ms=ms, label='Shivvers model') + pl.plot(X, shivv_model, 'go', ms=ms) + pl.plot(x, y_pred, 'b-', ms=ms, label='exp corr prediction') + pl.fill(np.concatenate([x, x[::-1]]), \ + np.concatenate([y_pred - 1.9600 * sigma, + (y_pred + 1.9600 * sigma)[::-1]]), \ + alpha=.5, fc='b', ec='None', label='95% confidence interval') + if len(debug_x) > 0: + pl.plot(debug_x, debug_y, 'y*', ms=10, label='cross threshhold') + if pos_delta_mag != None: + pl.plot(x, [pos_delta_mag]*len(x), 'y', label='median delta thresh') + pl.plot(x, [neg_delta_mag]*len(x), 'y', label='median delta thresh') + + + pl.xlabel('$t$') + pl.ylabel('$m(t)$') + pl.legend(loc='upper left') + srcid = 244888 + img_fpath = '/home/dstarr/scratch/lcmodel_feature_asas_examples/%d.png' % (srcid) + pl.title("Source ID=%d" % (srcid)) + pl.savefig(img_fpath) + #import os + #os.system("eog %s" % (img_fpath)) + #pl.show() + #import pdb; pdb.set_trace() + #print + + +# TODO abomination + def get_dmag_at_median_threshold(self, sign, normalized_model_mags): + """ + """ + if sign == 'pos': + thresh_list = np.linspace(0,np.max(normalized_model_mags),20) + elif sign == 'neg': + thresh_list = np.linspace(np.min(normalized_model_mags),0,20) + thresh_passthru = np.zeros(len(thresh_list), dtype=np.int) + for i_th, thresh in enumerate(thresh_list): + if sign == 'pos': + past_thresh = np.where(normalized_model_mags > thresh)[0] + elif sign == 'neg': + past_thresh = np.where(normalized_model_mags < thresh)[0]#[::-1] + j_prev = -10 # some value < -1 + for j in past_thresh: + if j-1 == j_prev: + j_prev = j + continue # we've already caught this threshold passthrough + thresh_passthru[i_th] += 1 + j_prev = j + + sum_n_passthru_2 = np.sum(thresh_passthru)/2. + cumul = 0 + delta_mag_median = 0. # This should always get a found value. + for i, n in enumerate(thresh_passthru): + cumul += n + if cumul >= (sum_n_passthru_2): + delta_mag_median = thresh_list[i] + break + + """ + from matplotlib import pyplot as pl + fig = pl.figure() + pl.plot(thresh_list, thresh_passthru, 'bo') + pl.xlabel('(threshold mag - median mag)') + pl.ylabel('N intersects for single direction') + + srcid = 244888 + pl.title("Source ID=%d" % (srcid)) + img_fpath = '/home/dstarr/scratch/lcmodel_feature_asas_examples/%d_%s_thresh.png' % (srcid, sign) + pl.savefig(img_fpath) + #pl.show() + pl.clf() + """ + + return {'delta_mag_median':delta_mag_median, + 'n_thresh_median':n} + + +# TODO off by 1? + def get_n_passing_median(self, normalized_model_mags): + """ Get number of positive slope intersections of delta_mag=0.0 median + """ + past_thresh = np.where(normalized_model_mags > 0.0)[0] + n_thresh_at_median = 0 + j_prev = -10 # some value < -1 + for j in past_thresh: + if j-1 == j_prev: + j_prev = j + continue # we've already caught this threshold passthrough + n_thresh_at_median += 1 + j_prev = j + return n_thresh_at_median + + + def get_area(self, sign, m, t): + """ Get area under model, for the postive (above median) and negative parts. + + I break the ( > median) points into segments which I integrate + over using trapazoid method. Otherwise, the interpolation + over ( < median) gaps would skew the results. + """ + if sign == 'pos': + past_thresh = np.where(m > 0.0)[0] + elif sign == 'neg': + past_thresh = np.where(m < 0.0)[0] + total_area = 0. + t_segment = [t[past_thresh[0]]] + m_segment = [m[past_thresh[0]]] + j_prev = past_thresh[0] + #import pdb; pdb.set_trace() + #print + for j in past_thresh[1:]: + if j-1 == j_prev: + j_prev = j + t_segment.append(t[j]) + m_segment.append(m[j]) + else: + if len(t_segment) >= 2: + total_area += scipy.integrate.trapz(m_segment, t_segment) + # then we integrate the current segment if long enough + t_segment = [t[j]] + m_segment = [m[j]] + j_prev = j + if len(t_segment) >= 2: + total_area += scipy.integrate.trapz(m_segment, t_segment) + return total_area + + + def extract(self): + """ Base, initial internal extractor for the unfolded lightcurve model features. + """ + try: + # get info + t = self.time_data + m = self.flux_data + + # find the proper window for the model + best_GCV, optimal_window = self.minimize_GCV(t, m) + bandwidth = 500*float(optimal_window)/len(t) # 1000 too smooth, 100 is ok but a little too coupled to orig data. + shivv_model = self.kernelSmooth(t, m, bandwidth) + + m_median = np.median(m) + normalized_model_mags = shivv_model - m_median + + n_thresh_at_median = self.get_n_passing_median(normalized_model_mags) + pos_dict = self.get_dmag_at_median_threshold('pos', normalized_model_mags) + neg_dict = self.get_dmag_at_median_threshold('neg', normalized_model_mags) + + pos_area = self.get_area('pos', normalized_model_mags, t) + neg_area = self.get_area('neg', normalized_model_mags, t) + + #self.debug_compare_gp_and_shivv_models(t, m, self.rms_data, shivv_model, + # pos_delta_mag=pos_dict['delta_mag_median'] + m_median, + # neg_delta_mag=neg_dict['delta_mag_median'] + m_median) + + + delta_t = np.max(t) - np.min(t) + + self.lc_feats = {'pos_mag_ratio': pos_dict['delta_mag_median']/(pos_dict['delta_mag_median'] + abs(neg_dict['delta_mag_median'])), + 'pos_n_ratio': pos_dict['n_thresh_median']/float(pos_dict['n_thresh_median'] + neg_dict['n_thresh_median']), + 'median_n_per_day': n_thresh_at_median / delta_t, + 'pos_n_per_day': pos_dict['n_thresh_median'] / delta_t, + 'neg_n_per_day': neg_dict['n_thresh_median'] / delta_t, + 'pos_area_ratio': pos_area / (pos_area + abs(neg_area)), + } + except: + self.lc_feats = {} + return self.lc_feats + + + def fold(self, times, period): + ''' return phases for folded at ''' + t0 = times[0] + phase = ((times-t0)%period)/period + return phase + + def rolling_window(self, b, window): + """ Call: np.mean(rolling_window(observations, n), 1) + """ + # perform smoothing using strides trick + shape = b.shape[:-1] + (b.shape[-1] - window + 1, window) + strides = b.strides + (b.strides[-1],) + return np.lib.stride_tricks.as_strided(b, shape=shape, strides=strides) + + def GCV(self, window, X,Y): + # put in proper order + zpm = list(zip(X,Y)) + zpm.sort() + zpm_arr = np.array(zpm) + phs = zpm_arr[:,0] + mags = zpm_arr[:,1] + # handle edges properly by extending array in both directions + if window>1: + b = np.concatenate((mags[-window/2:], mags, mags[:window/2-1])) + else: + b = mags + # calculate smoothed model and corresponding smoothing matrix diagonal value + model = np.mean(self.rolling_window(b, window), 1) + Lii = 1./window + # return the Generalized Cross-Validation criterion + GCV = 1./len(phs) * np.sum( ((mags-model)/(1.-Lii))**2 ) + return GCV + + def minimize_GCV(self,X,Y, window_range=(10,50,2)): + ''' quick way to pick best GCV value ''' + windows = np.arange(*window_range) + GCVs = np.array( [self.GCV(window, X,Y) for window in windows] ) + best_GCV = np.min(GCVs) + optimal_window = windows[ np.argmin(GCVs) ] + return best_GCV, optimal_window + + def GaussianKernel(self, x): + return (1./np.sqrt(2.*np.pi)) * np.exp(-x**2 / 2.) + + def kernelSmooth(self, X, Y, bandwidth): + ''' slow implementation of gaussian kernel smoothing ''' + L = np.zeros([len(Y),len(X)]) + diags = [] + for i in range(len(X)): + diff = abs(X[i] - X) + # wrap around X=1; i.e. diff cannot be more than .5 + diff[diff>.5] = 1. - diff[diff>.5] + # renormalize, and operate on l vector + l = diff/bandwidth + # calculate the Gaussian for the values within 4sigma and plug it in + # anything beyond 4sigma is basically zero + tmp = self.GaussianKernel(l[l<4]) + diags.append(np.max(tmp)) + L[i,l<4] = tmp/np.sum(tmp) + # model is the smoothing matrix dotted into the data + return np.dot(L, Y.T) + + def find_peaks(self, x): + """ find peaks in """ + xmid = x[1:-1] # orig array with ends removed + xm1 = x[2:] # orig array shifted one up + xp1 = x[:-2] # orig array shifted one back + return np.where(np.logical_and(xmid > xm1, xmid > xp1))[0] + 1 + + + +class lcmodel_pos_mag_ratio_extractor(FeatureExtractor): + """ this is a ratio of positive threshold's delta magnitude divided +by the sum of both the positive and negative threshold's delta +magnitudes + """ + active = True + extname = 'lcmodel_pos_mag_ratio' #extractor's name + + def extract(self): + lc_feats = self.properties['data'][self.band]['inter']['lcmodel'].result + return lc_feats.get('pos_mag_ratio', 0.0) + + +class lcmodel_pos_n_ratio_extractor(FeatureExtractor): + """ this is the number of intersections through the positive +threshold divided by the sum of both the positive and negative +threshold's number of intersections + """ + active = True + extname = 'lcmodel_pos_n_ratio' #extractor's name + + def extract(self): + lc_feats = self.properties['data'][self.band]['inter']['lcmodel'].result + return lc_feats.get('pos_n_ratio', 0.0) + +class lcmodel_median_n_per_day_extractor(FeatureExtractor): + """ this is the number of intersections through the median, + divided by the total time span of observations, so that +short surveys or observations of a source can be compared with longer +baselined sources. + """ + active = True + extname = 'lcmodel_median_n_per_day' #extractor's name + + def extract(self): + lc_feats = self.properties['data'][self.band]['inter']['lcmodel'].result + return lc_feats.get('median_n_per_day', 0.0) + +class lcmodel_pos_n_per_day_extractor(FeatureExtractor): + """ this is the number of intersections through the positive +threshold, divided by the total time span of observations, so that +short surveys or observations of a source can be compared with longer +baselined sources. + """ + active = True + extname = 'lcmodel_pos_n_per_day' #extractor's name + + def extract(self): + lc_feats = self.properties['data'][self.band]['inter']['lcmodel'].result + return lc_feats.get('pos_n_per_day', 0.0) + +class lcmodel_neg_n_per_day_extractor(FeatureExtractor): + """ this is the number of intersections through the negative +threshold, divided by the total time span of observations, so that +short surveys or observations of a source can be compared with longer +baselined sources. + """ + active = True + extname = 'lcmodel_neg_n_per_day' #extractor's name + + def extract(self): + lc_feats = self.properties['data'][self.band]['inter']['lcmodel'].result + return lc_feats.get('neg_n_per_day', 0.0) + +class lcmodel_pos_area_ratio_extractor(FeatureExtractor): + """describes the area above the median in relation to the abs() combined area of +both above and below the median. In other words, it is +(magnitude-days area above median) / ( (magnitude-days area above +median) + abs(magnitude-days area below median)). + """ + active = True + extname = 'lcmodel_pos_area_ratio' #extractor's name + + def extract(self): + lc_feats = self.properties['data'][self.band]['inter']['lcmodel'].result + return lc_feats.get('pos_area_ratio', 0.0) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/linear_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/linear_extractor.py new file mode 100644 index 00000000..dfd7180c --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/linear_extractor.py @@ -0,0 +1,23 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +import numpy +from scipy import optimize +from .common_functions import ChiSquare + +# TODO just use weighted least squares, e.g. polyfit +class linear_extractor(InterExtractor,ChiSquare): # fits ax+b + ''' produces a linear fit, returns in the format 'a(slope), b (y-intercept) ''' + active = True + extname = 'linear' #extractor's name + def extract(self): + a = 0 + b = 0 + init = numpy.array([a,b]) + linear = optimize.fmin(self.linear_fit,init,args=(self.time_data,self.flux_data,self.rms_data),disp=0) + return(linear) + def linear_fit(self,ab,x,y,rms): + def linear(x): + return ab[0]*x +ab[1] + return self.chi_square_sum(y,linear,x=x,rms=rms) + def plot_feature(self,properties): + plot( self.time_data,properties[self.extname][1]+ properties[self.extname][0]* self.time_data, label=self.extname) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_extractor.py new file mode 100644 index 00000000..4ea3cdd0 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_extractor.py @@ -0,0 +1,51 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +from .common_functions import lomb_scargle +from .common_functions.plot_methods import plot_vs_frequencies +from numpy import arange + +# TODO what is this +class lomb_extractor(plot_vs_frequencies,InterExtractor): + """extracts a lomb scargle periodogram from the data""" + active = True + extname = 'lomb' #extractor's name + minpoints = 5 # minimum number of points for the extractor to run + def extract(self): + """ NOTE: lightcurve.py:L228 actually calls lomb_scargle.lomb() and generates the psd and final L.S. freqs which are used as features. + """ + self.test_uneven() + #noisedata = normal(loc=0,scale=5,size=int(round(freq*time))) + #noisetime = self.time_data + #noisedata = self.flux_data + var = { 'x': self.time_data, 'y': self.flux_data, 'ylabel': 'Amplitude', + 'xlabel':'Time (s)' } + #N= len(noisetime) + #dt = 1.0 #findAverageSampleTime(var,0) + #maxlogx = log(1/(2*dt)) # max frequency is the sampling rate + #minlogx = log(1/(max(var['x'])-min(var['x']))) #min frequency is 1/T + #frequencies = self.frequencies#exp(arange(N, dtype = float) / (N-1.) * (maxlogx-minlogx)+minlogx) + psd, freqs, signi, simsigni, psdpeaks = lomb_scargle.lomb(var['x'], + var['y'],freqin=self.frequencies,verbosity=0) + #20071206 dstarr comment out: + #result = psd + #import pdb; pdb.set_trace() + if 0: + ### TEST / DEBUGGING only: + from .common_functions import plot_analysis_psd + plot_analysis_psd.do_plot(psd, freqs, signi, simsigni, psdpeaks, x=var['x'], y=var['y']) + + result = psd + return result + def test_uneven(self): + uneven = False + for x in arange(len(self.time_data)-3): + slicex = self.time_data[x:x+3] # slice with three elements + if round((slicex[2] - slicex[1]),2) != round((slicex[1] - slicex[0]),2): + uneven = True + break + if not uneven: + self.ex_error("Evenly Spaced Data (don't waste my time!)") + + + + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_scargle_alternative_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_scargle_alternative_extractor.py new file mode 100644 index 00000000..1ce4926c --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_scargle_alternative_extractor.py @@ -0,0 +1,103 @@ +# TODO what is this +""" This module is an implementation of lomb_scargle using type( """ +from __future__ import print_function +from __future__ import absolute_import + +from ..FeatureExtractor import FeatureExtractor +from ..FeatureExtractor import InterExtractor +from .common_functions.lomb_scargle import lomb +from .common_functions.pre_whiten import pre_whiten + +from pylab import * + +class lomb_scargle_extractor(InterExtractor): + """ wrapper for common_functions lomb_scargle and pre_whiten + """ + internal_use_only = False + active = False + extname = 'lomb_scargle' + def extract(self): + x = self.time_data + nx = len(x) + dx = zeros(nx,dtype=float) + y = self.flux_data + dy = self.rms_data + + time = x + time.sort + dt = median( time[1:]-time[:-1] ) + maxlogx = log(0.5/dt) # max frequency is ~ the sampling rate + minlogx = log(0.5/(time[-1]-time[0])) #min frequency is 0.5/T + # sample the PSD with 1% fractional precision + M=long(ceil( (maxlogx-minlogx)*100. )) + frequencies = exp(maxlogx-arange(M, dtype=float) / (M-1.) * (maxlogx-minlogx)) + num_freq_comps = 3 + out_dict={} + ytest=y + dof = len(x) + if (dof>=5): + + for i in range(num_freq_comps): + psd, freqs, signi, sim_signi, peak_sort = lomb(x,ytest,delta_time=dx, signal_err=dy,freqin=frequencies,verbosity=0) + imax = psd.argmax() + freq_max = freqs[imax] + ytest, harm_dict = pre_whiten(x, ytest, freq_max, delta_time=dx, signal_err=dy, dof=dof, nharm_min=4, nharm_max=100) + dstr = "freq%i" % (i+1) + out_dict['freq_searched_min']=min(freqs) + out_dict['freq_searched_max']=max(freqs) + out_dict[dstr] = freq_max + out_dict[dstr+"_signif"] = signi + #if (dof>0 and harm_dict['nharm']>0 and harm_dict['signif']>0): + # out_dict[dstr+"_harmonics"] = harm_dict + #else: + # out_dict[dstr+"_harmonics"] = {} + #dof = dof - harm_dict['nharm']*2. + + # 20080508: dstarr modifies harm_dict so it is a shallow dict which we can out_dict.update() + if (dof>0 and harm_dict['nharm']>0 and harm_dict['signif']>0): + for elem_k, elem_v in harm_dict.items(): + out_dict[dstr + "_harmonics_" + elem_k] = elem_v + # Do we even want to include this case as empty dict??? : + #else: + # out_dict[dstr+"_harmonics"] = {} + dof = dof - harm_dict['nharm']*2. + #print out_dict.keys() + return out_dict + +class lomb_generic(FeatureExtractor): + """ Generic lomb extractor grabs value from dictionary """ + internal_use_only = False + active = True + extname = 'to_be_overloaded' # identifier used in final extracted value dict. + lomb_key = 'to_be_overloaded' + def extract(self): + lomb_dict = self.fetch_extr('lomb_scargle') # fetches the dictionary from lomb_scargle_extractor with the useful lomb scargle results in it + # If lomb_dict is partially filled, most likely lomb couldn't compute completely due to FALSE condition: (dof>0 and harm_dict['nharm']>0 and harm_dict['signif']>0) + if self.lomb_key in lomb_dict: + return lomb_dict[self.lomb_key] # finds the correct keyword that this class is assigned to, this could be replaced by self.extname if it wasn't for the _alt + else: + self.exerror('Lomb Scargle Dictionary does not have key %s' % (self.lomb_key)) + +lomb_features = ['freq_searched_min', 'freq1_harmonics_rel_phase_error_1', 'freq1_harmonics_peak2peak_flux', 'freq1_harmonics_rel_phase_error_3', 'freq1_harmonics_rel_phase_error_2', 'freq1_harmonics_rel_phase_0', 'freq1_harmonics_rel_phase_1', 'freq1_harmonics_rel_phase_2', 'freq1_harmonics_rel_phase_3', 'freq1_harmonics_amplitude_2', 'freq1_harmonics_amplitude_3', 'freq1_harmonics_amplitude_0', 'freq1_harmonics_amplitude_1', 'freq2_signif', 'freq1_harmonics_peak2peak_flux_error', 'freq1_harmonics_signif', 'freq3', 'freq2', 'freq1', 'freq1_harmonics_rel_phase_error_0', 'freq1_harmonics_freq_0', 'freq1_harmonics_freq_1', 'freq1_harmonics_freq_2', 'freq1_harmonics_freq_3', 'freq3_signif', 'freq1_harmonics_nharm', 'freq1_harmonics_moments_err_0', 'freq1_harmonics_moments_err_1', 'freq1_harmonics_moments_err_2', 'freq1_harmonics_moments_err_3', 'freq1_signif', 'freq1_harmonics_moments_0', 'freq1_harmonics_moments_1', 'freq1_harmonics_moments_2', 'freq1_harmonics_moments_3', 'freq1_harmonics_amplitude_error_3', 'freq1_harmonics_amplitude_error_2', 'freq1_harmonics_amplitude_error_1', 'freq1_harmonics_amplitude_error_0', 'freq_searched_max'] + +for feature in lomb_features: + print("About to prepare type", feature) + newclass = type(feature, (lomb_generic,), {'__doc__': feature, 'extname':feature, 'lomb_key':feature}) # see http://docs.python.org/lib/built-in-funcs.html for documentation of type() + exec "%s = newclass" % (feature) + print("new extname:") + exec "print %s().extname" % (feature) + + + + + + + + +# regex from !'(\S+)',\n to +# class $1_extractor(lomb_generic): +# """ $1 """ +# extname = "$1" +# lomb_key = "$1" +# +# (need a newline at the end) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_scargle_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_scargle_extractor.py new file mode 100644 index 00000000..1a37f09a --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/lomb_scargle_extractor.py @@ -0,0 +1,903 @@ +"""This module is a low-tech implementation of lomb_scargle_extractor using +regular expressions +""" +from __future__ import print_function +from __future__ import absolute_import + +from ..FeatureExtractor import FeatureExtractor +from ..FeatureExtractor import InterExtractor +from .common_functions.pre_whiten import pre_whiten + +# TODO use namespace +try: + from pylab import * +except: + pass +from numpy import log, exp, arange, median, ceil +from .common_functions import lightcurve +import copy # 20100902 added + +class lomb_scargle_extractor(InterExtractor): + """ wrapper for common_functions lomb_scargle and pre_whiten + """ + internal_use_only = False + active = True + extname = 'lomb_scargle' + def __init__(self): + pass + + def extract(self): + src_dict = {} + src_dict['t'] = copy.copy(self.time_data) # 20100902 added the copy() + src_dict['m'] = copy.copy(self.flux_data) # 20100902 addde the copy() + src_dict['m_err'] = copy.copy(self.rms_data) # 20100902 added the copy() + + if len(self.time_data) == 0: + self.ex_error(text="self.time_data of len()==0") + + obs = lightcurve.observatory_source_interface() + # 20110611 dstarr added just for lightcurve.py:lomb_code(): debug/allstars-plot use. + db_dictionary, cn_output = obs.lomb_code(src_dict['m'], + src_dict['m_err'], + src_dict['t'], + srcid=self.dic['input'].get('srcid',0))# 20110611 dstarr added just for lightcurve.py:lomb_code(): debug/allstars-plot use. + + out_dict = {} + dstr_list = ['freq1','freq2','freq3']#,'freq4'] + for dstr in dstr_list: + lomb_dict = db_dictionary[dstr] + if len(lomb_dict['harmonics_amplitude']) < 4: + n_harm_iters = len(lomb_dict['harmonics_amplitude']) + else: + n_harm_iters = 1 + 3 # includes primary component + +# TODO don't like this but is there a simpler way? where/how else could these be stored in general? + out_dict["%s_harmonics_freq_0" % (dstr)] = lomb_dict['frequency'] + for i in range(n_harm_iters): + out_dict["%s_harmonics_amplitude_%d" % (dstr, i)] = \ + lomb_dict['harmonics_amplitude'][i] + out_dict["%s_harmonics_amplitude_error_%d" % (dstr, i)] = \ + lomb_dict['harmonics_amplitude_error'][i] + out_dict["%s_harmonics_rel_phase_%d" % (dstr, i)] = \ + lomb_dict['harmonics_rel_phase'][i] + out_dict["%s_harmonics_rel_phase_error_%d" % (dstr, i)] = \ + lomb_dict['harmonics_rel_phase_error'][i] + out_dict['freq_harmonics_offset'] = db_dictionary['freq1']['harmonics_time_offset'] + out_dict['freq_nharm'] = db_dictionary['freq1']['harmonics_nharm'] + out_dict['freq_signif'] = db_dictionary['freq1']['signif'] + out_dict['freq_y_offset'] = db_dictionary['freq1']['harmonics_y_offset'] + + out_dict['lambda'] = db_dictionary['lambda'] + out_dict['trend'] = db_dictionary['trend'] + out_dict['varrat'] = db_dictionary['varrat'] + out_dict['n_alias'] = db_dictionary['n_alias'] + out_dict['model_phi1_phi2'] = db_dictionary['model_phi1_phi2'] + out_dict['model_min_delta_mags'] = db_dictionary['model_min_delta_mags'] + out_dict['model_max_delta_mags'] = db_dictionary['model_max_delta_mags'] + + out_dict['freq1_psd'] = db_dictionary['freq1']["psd"] + out_dict['freq1_f0'] = db_dictionary['freq1']["f0"] + out_dict['freq1_df'] = db_dictionary['freq1']["df"] + out_dict['freq1_numf'] = db_dictionary['freq1']["numf"] + out_dict['freq1_model'] = db_dictionary['freq1_model'] + + # 20100916 dstarr adds a couple more features: + try: + out_dict['freq_signif_ratio_21'] = db_dictionary['freq2']['signif'] / db_dictionary['freq1']['signif'] + except: + out_dict['freq_signif_ratio_21'] = 0.0 + + try: + out_dict['freq_signif_ratio_31'] = db_dictionary['freq3']['signif'] / db_dictionary['freq1']['signif'] + except: + out_dict['freq_signif_ratio_31'] = 0.0 + + try: + out_dict['freq_frequency_ratio_21'] = db_dictionary['freq2']['frequency'] / db_dictionary['freq1']['frequency'] + except: + out_dict['freq_frequency_ratio_21'] = 0.0 + + try: + out_dict['freq_frequency_ratio_31'] = db_dictionary['freq3']['frequency'] / db_dictionary['freq1']['frequency'] + except: + out_dict['freq_frequency_ratio_31'] = 0.0 + + + try: + out_dict['freq_amplitude_ratio_21'] = db_dictionary['freq2']['harmonics_amplitude'][0] / db_dictionary['freq1']['harmonics_amplitude'][0] + except: + out_dict['freq_amplitude_ratio_21'] = 0.0 + + try: + out_dict['freq_amplitude_ratio_31'] = db_dictionary['freq3']['harmonics_amplitude'][0] / db_dictionary['freq1']['harmonics_amplitude'][0] + except: + out_dict['freq_amplitude_ratio_31'] = 0.0 + + try: + out_dict['mad_of_model_residuals'] = db_dictionary['mad_of_model_residuals'] + except: + out_dict['mad_of_model_residuals'] = 0.0 + + + try: + out_dict['p2p_scatter_2praw'] = db_dictionary['p2p_scatter_2praw'] + except: + out_dict['p2p_scatter_2praw'] = 0.0 + + try: + out_dict['p2p_scatter_over_mad'] = db_dictionary['p2p_scatter_over_mad'] + except: + out_dict['p2p_scatter_over_mad'] = 0.0 + + try: + out_dict['p2p_scatter_pfold_over_mad'] = db_dictionary['p2p_scatter_pfold_over_mad'] + except: + out_dict['p2p_scatter_pfold_over_mad'] = 0.0 + + try: + out_dict['medperc90_2p_p'] = db_dictionary['medperc90_2p_p'] + except: + out_dict['medperc90_2p_p'] = 0.0 + + + + try: + out_dict['p2p_ssqr_diff_over_var'] = db_dictionary['p2p_ssqr_diff_over_var'] + except: + out_dict['p2p_ssqr_diff_over_var'] = 0.0 + + try: + out_dict['fold2P_slope_10percentile'] = db_dictionary['fold2P_slope_10percentile'] + except: + out_dict['fold2P_slope_10percentile'] = 0.0 + + try: + out_dict['fold2P_slope_90percentile'] = db_dictionary['fold2P_slope_90percentile'] + except: + out_dict['fold2P_slope_90percentile'] = 0.0 + + return out_dict + + + +class lomb_generic(FeatureExtractor): + """ Generic lomb extractor grabs value from dictionary """ + internal_use_only = False + active = True + extname = 'to_be_overloaded' # identifier used in final extracted value dict. + lomb_key = 'to_be_overloaded' + def extract(self): + lomb_dict = self.fetch_extr('lomb_scargle') # fetches the dictionary from lomb_scargle_extractor with the useful lomb scargle results in it + # If lomb_dict is partially filled, most likely lomb couldn't compute completely due to FALSE condition: (dof>0 and harm_dict['nharm']>0 and harm_dict['signif']>0) + if self.lomb_key in lomb_dict: + return lomb_dict[self.lomb_key] # finds the correct keyword that this class is assigned to, this could be replaced by self.extname if it wasn't for the _alt + else: + self.ex_error('Lomb Scargle Dictionary does not have key %s' % (self.lomb_key)) + +#[!'freq_searched_min', +# !'freq1_harmonics_rel_phase_error_1', +# !'freq1_harmonics_peak2peak_flux', +# !'freq1_harmonics_rel_phase_error_3', +# !'freq1_harmonics_rel_phase_error_2', +# !'freq1_harmonics_rel_phase_0', +# !'freq1_harmonics_rel_phase_1', +# !'freq1_harmonics_rel_phase_2', +# !'freq1_harmonics_rel_phase_3', +# !'freq1_harmonics_amplitude_2', +# !'freq1_harmonics_amplitude_3', +# !'freq1_harmonics_amplitude_0', +# !'freq1_harmonics_amplitude_1', +# !'freq2_signif', +# !'freq1_harmonics_peak2peak_flux_error', +# !'freq1_harmonics_signif', +# !'freq3', +# !'freq2', +# !'freq1', +# !'freq1_harmonics_rel_phase_error_0', +# !'freq1_harmonics_freq_0', +# !'freq1_harmonics_freq_1', +# !'freq1_harmonics_freq_2', +# !'freq1_harmonics_freq_3', +# !'freq3_signif', +# !'freq1_harmonics_nharm', +# !'freq1_harmonics_moments_err_0', +# !'freq1_harmonics_moments_err_1', +# !'freq1_harmonics_moments_err_2', +# !'freq1_harmonics_moments_err_3', +# !'freq1_signif', +# !'freq1_harmonics_moments_0', +# !'freq1_harmonics_moments_1', +# !'freq1_harmonics_moments_2', +# !'freq1_harmonics_moments_3', +# !'freq1_harmonics_amplitude_error_3', +# !'freq1_harmonics_amplitude_error_2', +# !'freq1_harmonics_amplitude_error_1', +# !'freq1_harmonics_amplitude_error_0', +# !'freq_searched_max'] + +# regex from !'(\S+)',\n to +# class $1_extractor(lomb_generic): +# """ $1 """ +# extname = "$1" +# lomb_key = "$1" +# +# (need a newline at the end) + + + +#class freq1_extractor(lomb_generic): +# """ freq1 """ +# extname = "freq1" +# lomb_key = "freq1" + +class freq1_harmonics_amplitude_0_extractor(lomb_generic): + """ freq1_harmonics_amplitude_0 """ + extname = "freq1_harmonics_amplitude_0" + lomb_key = "freq1_harmonics_amplitude_0" + +class freq1_harmonics_amplitude_1_extractor(lomb_generic): + """ freq1_harmonics_amplitude_1 """ + extname = "freq1_harmonics_amplitude_1" + lomb_key = "freq1_harmonics_amplitude_1" + +class freq1_harmonics_amplitude_2_extractor(lomb_generic): + """ freq1_harmonics_amplitude_2 """ + extname = "freq1_harmonics_amplitude_2" + lomb_key = "freq1_harmonics_amplitude_2" + +class freq1_harmonics_amplitude_3_extractor(lomb_generic): + """ freq1_harmonics_amplitude_3 """ + extname = "freq1_harmonics_amplitude_3" + lomb_key = "freq1_harmonics_amplitude_3" + +class freq1_harmonics_amplitude_error_0_extractor(lomb_generic): + """ freq1_harmonics_amplitude_error_0 """ + extname = "freq1_harmonics_amplitude_error_0" + lomb_key = "freq1_harmonics_amplitude_error_0" + +#class freq1_harmonics_amplitude_error_1_extractor(lomb_generic): +# """ freq1_harmonics_amplitude_error_1 """ +# extname = "freq1_harmonics_amplitude_error_1" +# lomb_key = "freq1_harmonics_amplitude_error_1" +# +#class freq1_harmonics_amplitude_error_2_extractor(lomb_generic): +# """ freq1_harmonics_amplitude_error_2 """ +# extname = "freq1_harmonics_amplitude_error_2" +# lomb_key = "freq1_harmonics_amplitude_error_2" +# +#class freq1_harmonics_amplitude_error_3_extractor(lomb_generic): +# """ freq1_harmonics_amplitude_error_3 """ +# extname = "freq1_harmonics_amplitude_error_3" +# lomb_key = "freq1_harmonics_amplitude_error_3" + +class freq1_harmonics_freq_0_extractor(lomb_generic): + """ freq1_harmonics_freq_0 """ + extname = "freq1_harmonics_freq_0" + lomb_key = "freq1_harmonics_freq_0" + +#class freq1_harmonics_freq_1_extractor(lomb_generic): +# """ freq1_harmonics_freq_1 """ +# extname = "freq1_harmonics_freq_1" +# lomb_key = "freq1_harmonics_freq_1" +# +#class freq1_harmonics_freq_2_extractor(lomb_generic): +# """ freq1_harmonics_freq_2 """ +# extname = "freq1_harmonics_freq_2" +# lomb_key = "freq1_harmonics_freq_2" +# +#class freq1_harmonics_freq_3_extractor(lomb_generic): +# """ freq1_harmonics_freq_3 """ +# extname = "freq1_harmonics_freq_3" +# lomb_key = "freq1_harmonics_freq_3" + +class freq1_harmonics_moments_0_extractor(lomb_generic): + """ freq1_harmonics_moments_0 """ + extname = "freq1_harmonics_moments_0" + lomb_key = "freq1_harmonics_moments_0" + +class freq1_harmonics_moments_1_extractor(lomb_generic): + """ freq1_harmonics_moments_1 """ + extname = "freq1_harmonics_moments_1" + lomb_key = "freq1_harmonics_moments_1" + +class freq1_harmonics_moments_2_extractor(lomb_generic): + """ freq1_harmonics_moments_2 """ + extname = "freq1_harmonics_moments_2" + lomb_key = "freq1_harmonics_moments_2" + +class freq1_harmonics_moments_3_extractor(lomb_generic): + """ freq1_harmonics_moments_3 """ + extname = "freq1_harmonics_moments_3" + lomb_key = "freq1_harmonics_moments_3" + +class freq1_harmonics_moments_err_0_extractor(lomb_generic): + """ freq1_harmonics_moments_err_0 """ + extname = "freq1_harmonics_moments_err_0" + lomb_key = "freq1_harmonics_moments_err_0" + +#class freq1_harmonics_moments_err_1_extractor(lomb_generic): +# """ freq1_harmonics_moments_err_1 """ +# extname = "freq1_harmonics_moments_err_1" +# lomb_key = "freq1_harmonics_moments_err_1" +# +#class freq1_harmonics_moments_err_2_extractor(lomb_generic): +# """ freq1_harmonics_moments_err_2 """ +# extname = "freq1_harmonics_moments_err_2" +# lomb_key = "freq1_harmonics_moments_err_2" +# +#class freq1_harmonics_moments_err_3_extractor(lomb_generic): +# """ freq1_harmonics_moments_err_3 """ +# extname = "freq1_harmonics_moments_err_3" +# lomb_key = "freq1_harmonics_moments_err_3" + +## class freq1_harmonics_nharm_extractor(lomb_generic): +## """ freq1_harmonics_nharm """ +## extname = "freq1_harmonics_nharm" +## lomb_key = "freq1_harmonics_nharm" + +class freq1_harmonics_peak2peak_flux_extractor(lomb_generic): + """ freq1_harmonics_peak2peak_flux """ + extname = "freq1_harmonics_peak2peak_flux" + lomb_key = "freq1_harmonics_peak2peak_flux" + +class freq1_harmonics_peak2peak_flux_error_extractor(lomb_generic): + """ freq1_harmonics_peak2peak_flux_error """ + extname = "freq1_harmonics_peak2peak_flux_error" + lomb_key = "freq1_harmonics_peak2peak_flux_error" + +class freq1_harmonics_rel_phase_0_extractor(lomb_generic): + """ freq1_harmonics_rel_phase_0 """ + extname = "freq1_harmonics_rel_phase_0" + lomb_key = "freq1_harmonics_rel_phase_0" + +class freq1_harmonics_rel_phase_1_extractor(lomb_generic): + """ freq1_harmonics_rel_phase_1 """ + extname = "freq1_harmonics_rel_phase_1" + lomb_key = "freq1_harmonics_rel_phase_1" + +class freq1_harmonics_rel_phase_2_extractor(lomb_generic): + """ freq1_harmonics_rel_phase_2 """ + extname = "freq1_harmonics_rel_phase_2" + lomb_key = "freq1_harmonics_rel_phase_2" + +class freq1_harmonics_rel_phase_3_extractor(lomb_generic): + """ freq1_harmonics_rel_phase_3 """ + extname = "freq1_harmonics_rel_phase_3" + lomb_key = "freq1_harmonics_rel_phase_3" + +class freq1_harmonics_rel_phase_error_0_extractor(lomb_generic): + """ freq1_harmonics_rel_phase_error_0 """ + extname = "freq1_harmonics_rel_phase_error_0" + lomb_key = "freq1_harmonics_rel_phase_error_0" + +class freq1_harmonics_rel_phase_error_0_extractor(lomb_generic): + """ freq1_harmonics_rel_phase_error_0 """ + extname = "freq1_harmonics_rel_phase_error_0" + lomb_key = "freq1_harmonics_rel_phase_error_0" + +class freq1_lambda_extractor(lomb_generic): + """ freq1_lambda """ + extname = "freq1_lambda" + lomb_key = "lambda" + + + +#class freq1_harmonics_rel_phase_error_1_extractor(lomb_generic): +# """ freq1_harmonics_rel_phase_error_1 """ +# extname = "freq1_harmonics_rel_phase_error_1" +# lomb_key = "freq1_harmonics_rel_phase_error_1" +# +#class freq1_harmonics_rel_phase_error_2_extractor(lomb_generic): +# """ freq1_harmonics_rel_phase_error_2 """ +# extname = "freq1_harmonics_rel_phase_error_2" +# lomb_key = "freq1_harmonics_rel_phase_error_2" +# +#class freq1_harmonics_rel_phase_error_3_extractor(lomb_generic): +# """ freq1_harmonics_rel_phase_error_3 """ +# extname = "freq1_harmonics_rel_phase_error_3" +# lomb_key = "freq1_harmonics_rel_phase_error_3" + +## class freq1_harmonics_signif_extractor(lomb_generic): +## """ freq1_harmonics_signif """ +## extname = "freq1_harmonics_signif" +## lomb_key = "freq1_harmonics_signif" + +## class freq1_signif_extractor(lomb_generic): +## """ freq1_signif """ +## extname = "freq1_signif" +## lomb_key = "freq1_signif" + +## class freq2_extractor(lomb_generic): +## """ freq2 """ +## extname = "freq2" +## lomb_key = "freq2" + +class freq2_harmonics_amplitude_0_extractor(lomb_generic): + """ freq2_harmonics_amplitude_0 """ + extname = "freq2_harmonics_amplitude_0" + lomb_key = "freq2_harmonics_amplitude_0" + +class freq2_harmonics_amplitude_1_extractor(lomb_generic): + """ freq2_harmonics_amplitude_1 """ + extname = "freq2_harmonics_amplitude_1" + lomb_key = "freq2_harmonics_amplitude_1" + +class freq2_harmonics_amplitude_2_extractor(lomb_generic): + """ freq2_harmonics_amplitude_2 """ + extname = "freq2_harmonics_amplitude_2" + lomb_key = "freq2_harmonics_amplitude_2" + +class freq2_harmonics_amplitude_3_extractor(lomb_generic): + """ freq2_harmonics_amplitude_3 """ + extname = "freq2_harmonics_amplitude_3" + lomb_key = "freq2_harmonics_amplitude_3" + +class freq2_harmonics_amplitude_error_0_extractor(lomb_generic): + """ freq2_harmonics_amplitude_error_0 """ + extname = "freq2_harmonics_amplitude_error_0" + lomb_key = "freq2_harmonics_amplitude_error_0" + +#class freq2_harmonics_amplitude_error_1_extractor(lomb_generic): +# """ freq2_harmonics_amplitude_error_1 """ +# extname = "freq2_harmonics_amplitude_error_1" +# lomb_key = "freq2_harmonics_amplitude_error_1" +# +#class freq2_harmonics_amplitude_error_2_extractor(lomb_generic): +# """ freq2_harmonics_amplitude_error_2 """ +# extname = "freq2_harmonics_amplitude_error_2" +# lomb_key = "freq2_harmonics_amplitude_error_2" +# +#class freq2_harmonics_amplitude_error_3_extractor(lomb_generic): +# """ freq2_harmonics_amplitude_error_3 """ +# extname = "freq2_harmonics_amplitude_error_3" +# lomb_key = "freq2_harmonics_amplitude_error_3" + +class freq2_harmonics_freq_0_extractor(lomb_generic): + """ freq2_harmonics_freq_0 """ + extname = "freq2_harmonics_freq_0" + lomb_key = "freq2_harmonics_freq_0" + +#class freq2_harmonics_freq_1_extractor(lomb_generic): +# """ freq2_harmonics_freq_1 """ +# extname = "freq2_harmonics_freq_1" +# lomb_key = "freq2_harmonics_freq_1" +# +#class freq2_harmonics_freq_2_extractor(lomb_generic): +# """ freq2_harmonics_freq_2 """ +# extname = "freq2_harmonics_freq_2" +# lomb_key = "freq2_harmonics_freq_2" +# +#class freq2_harmonics_freq_3_extractor(lomb_generic): +# """ freq2_harmonics_freq_3 """ +# extname = "freq2_harmonics_freq_3" +# lomb_key = "freq2_harmonics_freq_3" + +class freq2_harmonics_moments_0_extractor(lomb_generic): + """ freq2_harmonics_moments_0 """ + extname = "freq2_harmonics_moments_0" + lomb_key = "freq2_harmonics_moments_0" + +class freq2_harmonics_moments_1_extractor(lomb_generic): + """ freq2_harmonics_moments_1 """ + extname = "freq2_harmonics_moments_1" + lomb_key = "freq2_harmonics_moments_1" + +class freq2_harmonics_moments_2_extractor(lomb_generic): + """ freq2_harmonics_moments_2 """ + extname = "freq2_harmonics_moments_2" + lomb_key = "freq2_harmonics_moments_2" + +class freq2_harmonics_moments_3_extractor(lomb_generic): + """ freq2_harmonics_moments_3 """ + extname = "freq2_harmonics_moments_3" + lomb_key = "freq2_harmonics_moments_3" + +class freq2_harmonics_moments_err_0_extractor(lomb_generic): + """ freq2_harmonics_moments_err_0 """ + extname = "freq2_harmonics_moments_err_0" + lomb_key = "freq2_harmonics_moments_err_0" + +#class freq2_harmonics_moments_err_1_extractor(lomb_generic): +# """ freq2_harmonics_moments_err_1 """ +# extname = "freq2_harmonics_moments_err_1" +# lomb_key = "freq2_harmonics_moments_err_1" +# +#class freq2_harmonics_moments_err_2_extractor(lomb_generic): +# """ freq2_harmonics_moments_err_2 """ +# extname = "freq2_harmonics_moments_err_2" +# lomb_key = "freq2_harmonics_moments_err_2" +# +#class freq2_harmonics_moments_err_3_extractor(lomb_generic): +# """ freq2_harmonics_moments_err_3 """ +# extname = "freq2_harmonics_moments_err_3" +# lomb_key = "freq2_harmonics_moments_err_3" + +## class freq2_harmonics_nharm_extractor(lomb_generic): +## """ freq2_harmonics_nharm """ +## extname = "freq2_harmonics_nharm" +## lomb_key = "freq2_harmonics_nharm" + +## class freq2_harmonics_peak2peak_flux_extractor(lomb_generic): +## """ freq2_harmonics_peak2peak_flux """ +## extname = "freq2_harmonics_peak2peak_flux" +## lomb_key = "freq2_harmonics_peak2peak_flux" + +## class freq2_harmonics_peak2peak_flux_error_extractor(lomb_generic): +## """ freq2_harmonics_peak2peak_flux_error """ +## extname = "freq2_harmonics_peak2peak_flux_error" +## lomb_key = "freq2_harmonics_peak2peak_flux_error" + +class freq2_harmonics_rel_phase_0_extractor(lomb_generic): + """ freq2_harmonics_rel_phase_0 """ + extname = "freq2_harmonics_rel_phase_0" + lomb_key = "freq2_harmonics_rel_phase_0" + +class freq2_harmonics_rel_phase_1_extractor(lomb_generic): + """ freq2_harmonics_rel_phase_1 """ + extname = "freq2_harmonics_rel_phase_1" + lomb_key = "freq2_harmonics_rel_phase_1" + +class freq2_harmonics_rel_phase_2_extractor(lomb_generic): + """ freq2_harmonics_rel_phase_2 """ + extname = "freq2_harmonics_rel_phase_2" + lomb_key = "freq2_harmonics_rel_phase_2" + +class freq2_harmonics_rel_phase_3_extractor(lomb_generic): + """ freq2_harmonics_rel_phase_3 """ + extname = "freq2_harmonics_rel_phase_3" + lomb_key = "freq2_harmonics_rel_phase_3" + +class freq2_harmonics_rel_phase_error_0_extractor(lomb_generic): + """ freq2_harmonics_rel_phase_error_0 """ + extname = "freq2_harmonics_rel_phase_error_0" + lomb_key = "freq2_harmonics_rel_phase_error_0" + +#class freq2_harmonics_rel_phase_error_1_extractor(lomb_generic): +# """ freq2_harmonics_rel_phase_error_1 """ +# extname = "freq2_harmonics_rel_phase_error_1" +# lomb_key = "freq2_harmonics_rel_phase_error_1" +# +#class freq2_harmonics_rel_phase_error_2_extractor(lomb_generic): +# """ freq2_harmonics_rel_phase_error_2 """ +# extname = "freq2_harmonics_rel_phase_error_2" +# lomb_key = "freq2_harmonics_rel_phase_error_2" +# +#class freq2_harmonics_rel_phase_error_3_extractor(lomb_generic): +# """ freq2_harmonics_rel_phase_error_3 """ +# extname = "freq2_harmonics_rel_phase_error_3" +# lomb_key = "freq2_harmonics_rel_phase_error_3" + +## class freq2_harmonics_signif_extractor(lomb_generic): +## """ freq2_harmonics_signif """ +## extname = "freq2_harmonics_signif" +## lomb_key = "freq2_harmonics_signif" + +## class freq2_signif_extractor(lomb_generic): +## """ freq2_signif """ +## extname = "freq2_signif" +## lomb_key = "freq2_signif" + +## class freq3_extractor(lomb_generic): +## """ freq3 """ +## extname = "freq3" +## lomb_key = "freq3" + +class freq3_harmonics_amplitude_0_extractor(lomb_generic): + """ freq3_harmonics_amplitude_0 """ + extname = "freq3_harmonics_amplitude_0" + lomb_key = "freq3_harmonics_amplitude_0" + +class freq3_harmonics_amplitude_1_extractor(lomb_generic): + """ freq3_harmonics_amplitude_1 """ + extname = "freq3_harmonics_amplitude_1" + lomb_key = "freq3_harmonics_amplitude_1" + +class freq3_harmonics_amplitude_2_extractor(lomb_generic): + """ freq3_harmonics_amplitude_2 """ + extname = "freq3_harmonics_amplitude_2" + lomb_key = "freq3_harmonics_amplitude_2" + +class freq3_harmonics_amplitude_3_extractor(lomb_generic): + """ freq3_harmonics_amplitude_3 """ + extname = "freq3_harmonics_amplitude_3" + lomb_key = "freq3_harmonics_amplitude_3" + +class freq3_harmonics_amplitude_error_0_extractor(lomb_generic): + """ freq3_harmonics_amplitude_error_0 """ + extname = "freq3_harmonics_amplitude_error_0" + lomb_key = "freq3_harmonics_amplitude_error_0" + +#class freq3_harmonics_amplitude_error_1_extractor(lomb_generic): +# """ freq3_harmonics_amplitude_error_1 """ +# extname = "freq3_harmonics_amplitude_error_1" +# lomb_key = "freq3_harmonics_amplitude_error_1" +# +#class freq3_harmonics_amplitude_error_2_extractor(lomb_generic): +# """ freq3_harmonics_amplitude_error_2 """ +# extname = "freq3_harmonics_amplitude_error_2" +# lomb_key = "freq3_harmonics_amplitude_error_2" +# +#class freq3_harmonics_amplitude_error_3_extractor(lomb_generic): +# """ freq3_harmonics_amplitude_error_3 """ +# extname = "freq3_harmonics_amplitude_error_3" +# lomb_key = "freq3_harmonics_amplitude_error_3" + +class freq3_harmonics_freq_0_extractor(lomb_generic): + """ freq3_harmonics_freq_0 """ + extname = "freq3_harmonics_freq_0" + lomb_key = "freq3_harmonics_freq_0" + +#class freq3_harmonics_freq_1_extractor(lomb_generic): +# """ freq3_harmonics_freq_1 """ +# extname = "freq3_harmonics_freq_1" +# lomb_key = "freq3_harmonics_freq_1" +# +#class freq3_harmonics_freq_2_extractor(lomb_generic): +# """ freq3_harmonics_freq_2 """ +# extname = "freq3_harmonics_freq_2" +# lomb_key = "freq3_harmonics_freq_2" +# +#class freq3_harmonics_freq_3_extractor(lomb_generic): +# """ freq3_harmonics_freq_3 """ +# extname = "freq3_harmonics_freq_3" +# lomb_key = "freq3_harmonics_freq_3" + +class freq3_harmonics_moments_0_extractor(lomb_generic): + """ freq3_harmonics_moments_0 """ + extname = "freq3_harmonics_moments_0" + lomb_key = "freq3_harmonics_moments_0" + +class freq3_harmonics_moments_1_extractor(lomb_generic): + """ freq3_harmonics_moments_1 """ + extname = "freq3_harmonics_moments_1" + lomb_key = "freq3_harmonics_moments_1" + +class freq3_harmonics_moments_2_extractor(lomb_generic): + """ freq3_harmonics_moments_2 """ + extname = "freq3_harmonics_moments_2" + lomb_key = "freq3_harmonics_moments_2" + +class freq3_harmonics_moments_3_extractor(lomb_generic): + """ freq3_harmonics_moments_3 """ + extname = "freq3_harmonics_moments_3" + lomb_key = "freq3_harmonics_moments_3" + +class freq3_harmonics_moments_err_0_extractor(lomb_generic): + """ freq3_harmonics_moments_err_0 """ + extname = "freq3_harmonics_moments_err_0" + lomb_key = "freq3_harmonics_moments_err_0" + +#class freq3_harmonics_moments_err_1_extractor(lomb_generic): +# """ freq3_harmonics_moments_err_1 """ +# extname = "freq3_harmonics_moments_err_1" +# lomb_key = "freq3_harmonics_moments_err_1" +# +#class freq3_harmonics_moments_err_2_extractor(lomb_generic): +# """ freq3_harmonics_moments_err_2 """ +# extname = "freq3_harmonics_moments_err_2" +# lomb_key = "freq3_harmonics_moments_err_2" +# +#class freq3_harmonics_moments_err_3_extractor(lomb_generic): +# """ freq3_harmonics_moments_err_3 """ +# extname = "freq3_harmonics_moments_err_3" +# lomb_key = "freq3_harmonics_moments_err_3" + +## class freq3_harmonics_nharm_extractor(lomb_generic): +## """ freq3_harmonics_nharm """ +## extname = "freq3_harmonics_nharm" +## lomb_key = "freq3_harmonics_nharm" + +## class freq3_harmonics_peak2peak_flux_extractor(lomb_generic): +## """ freq3_harmonics_peak2peak_flux """ +## extname = "freq3_harmonics_peak2peak_flux" +## lomb_key = "freq3_harmonics_peak2peak_flux" + +## class freq3_harmonics_peak2peak_flux_error_extractor(lomb_generic): +## """ freq3_harmonics_peak2peak_flux_error """ +## extname = "freq3_harmonics_peak2peak_flux_error" +## lomb_key = "freq3_harmonics_peak2peak_flux_error" + +class freq3_harmonics_rel_phase_0_extractor(lomb_generic): + """ freq3_harmonics_rel_phase_0 """ + extname = "freq3_harmonics_rel_phase_0" + lomb_key = "freq3_harmonics_rel_phase_0" + +class freq3_harmonics_rel_phase_1_extractor(lomb_generic): + """ freq3_harmonics_rel_phase_1 """ + extname = "freq3_harmonics_rel_phase_1" + lomb_key = "freq3_harmonics_rel_phase_1" + +class freq3_harmonics_rel_phase_2_extractor(lomb_generic): + """ freq3_harmonics_rel_phase_2 """ + extname = "freq3_harmonics_rel_phase_2" + lomb_key = "freq3_harmonics_rel_phase_2" + +class freq3_harmonics_rel_phase_3_extractor(lomb_generic): + """ freq3_harmonics_rel_phase_3 """ + extname = "freq3_harmonics_rel_phase_3" + lomb_key = "freq3_harmonics_rel_phase_3" + +class freq3_harmonics_rel_phase_error_0_extractor(lomb_generic): + """ freq3_harmonics_rel_phase_error_0 """ + extname = "freq3_harmonics_rel_phase_error_0" + lomb_key = "freq3_harmonics_rel_phase_error_0" + +#class freq3_harmonics_rel_phase_error_1_extractor(lomb_generic): +# """ freq3_harmonics_rel_phase_error_1 """ +# extname = "freq3_harmonics_rel_phase_error_1" +# lomb_key = "freq3_harmonics_rel_phase_error_1" +# +#class freq3_harmonics_rel_phase_error_2_extractor(lomb_generic): +# """ freq3_harmonics_rel_phase_error_2 """ +# extname = "freq3_harmonics_rel_phase_error_2" +# lomb_key = "freq3_harmonics_rel_phase_error_2" +# +#class freq3_harmonics_rel_phase_error_3_extractor(lomb_generic): +# """ freq3_harmonics_rel_phase_error_3 """ +# extname = "freq3_harmonics_rel_phase_error_3" +# lomb_key = "freq3_harmonics_rel_phase_error_3" + +## class freq3_harmonics_signif_extractor(lomb_generic): +## """ freq3_harmonics_signif """ +## extname = "freq3_harmonics_signif" +## lomb_key = "freq3_harmonics_signif" + +## class freq3_signif_extractor(lomb_generic): +## """ freq3_signif """ +## extname = "freq3_signif" +## lomb_key = "freq3_signif" + +## class freq_searched_max_extractor(lomb_generic): +## """ freq_searched_max """ +## extname = "freq_searched_max" +## lomb_key = "freq_searched_max" + +## class freq_searched_min_extractor(lomb_generic): +## """ freq_searched_min """ +## extname = "freq_searched_min" +## lomb_key = "freq_searched_min" + +###### + +class freq_harmonics_offset_extractor(lomb_generic): + """ freq_harmonics_offset """ + extname = "freq_harmonics_offset" + lomb_key = "freq_harmonics_offset" + +class freq_y_offset_extractor(lomb_generic): + """ freq_y_offset """ + extname = "freq_y_offset" + lomb_key = "freq_y_offset" + +class freq_signif_extractor(lomb_generic): + """ freq_signif """ + extname = "freq_signif" + lomb_key = "freq_signif" + +class freq_nharm_extractor(lomb_generic): + """ freq_nharm """ + extname = "freq_nharm" + lomb_key = "freq_nharm" + +class linear_trend_extractor(lomb_generic): + """ slope (b) of linear trend fitted to unfolded data using linfit.py: m = a+b*x; minimize chi^2 = Sum (y-m)^2/dy^2""" + extname = "linear_trend" + lomb_key = "trend" + +class freq_varrat_extractor(lomb_generic): + """ Ratio of variances: V_freq1_subtracted / V_linear_trend_subtracted """ + extname = "freq_varrat" + lomb_key = "varrat" + +######## + +class freq_signif_ratio_21_extractor(lomb_generic): + """ freq_signif_ratio_21 """ + extname = "freq_signif_ratio_21" + lomb_key = "freq_signif_ratio_21" + +class freq_signif_ratio_31_extractor(lomb_generic): + """ freq_signif_ratio_31 """ + extname = "freq_signif_ratio_31" + lomb_key = "freq_signif_ratio_31" + +class freq_frequency_ratio_21_extractor(lomb_generic): + """ freq_frequency_ratio_21 """ + extname = "freq_frequency_ratio_21" + lomb_key = "freq_frequency_ratio_21" + +class freq_frequency_ratio_31_extractor(lomb_generic): + """ freq_frequency_ratio_31 """ + extname = "freq_frequency_ratio_31" + lomb_key = "freq_frequency_ratio_31" + +class freq_amplitude_ratio_21_extractor(lomb_generic): + """ freq_amplitude_ratio_21 """ + extname = "freq_amplitude_ratio_21" + lomb_key = "freq_amplitude_ratio_21" + +class freq_amplitude_ratio_31_extractor(lomb_generic): + """ freq_amplitude_ratio_31 """ + extname = "freq_amplitude_ratio_31" + lomb_key = "freq_amplitude_ratio_31" + +class p2p_scatter_2praw_extractor(lomb_generic): + """ From arXiv 1101_2406v1 Dubath 20110112 paper. +sum of the squares of the magnitude +differences between pairs of successive data points in the light +curve folded around twice the period divided by the same quantity +derived from the raw light curve. """ + extname = "p2p_scatter_2praw" + lomb_key = "p2p_scatter_2praw" + +class p2p_scatter_over_mad_extractor(lomb_generic): + """ From arXiv 1101_2406v1 Dubath 20110112 paper. +median of the absolute values of the differences +between successive magnitudes in the raw light curve normalized +by the Median Absolute Deviation (MAD) around the median. +""" + extname = "p2p_scatter_over_mad" + lomb_key = "p2p_scatter_over_mad" + + +class p2p_scatter_pfold_over_mad_extractor(lomb_generic): + """ From arXiv 1101_2406v1 Dubath 20110112 paper. +median of the absolute values of the +differences between successive magnitudes in the folded light +curve normalized by the Median Absolute Deviation (MAD) +around the median of the raw lightcurve. """ + extname = "p2p_scatter_pfold_over_mad" + lomb_key = "p2p_scatter_pfold_over_mad" + + +class medperc90_2p_p_extractor(lomb_generic): + """ From arXiv 1101_2406v1 Dubath 20110112 paper. +Percentile90:2P/P: +the 90-th percentile of the absolute residual values around the 2P model +divided by the same quantity +for the residuals around the P model. The 2P model is a model +recomputed using twice the period value. +""" + extname = "medperc90_2p_p" + lomb_key = "medperc90_2p_p" + + +class p2p_ssqr_diff_over_var_extractor(lomb_generic): + """ eta feature from arXiv 1101.3316 Kim QSO paper. + if there exists positive serial correlation, the eta is small, negative serial correlation then eta is large. Note that the linear trend is not use in the model""" + extname = "p2p_ssqr_diff_over_var" + lomb_key = "p2p_ssqr_diff_over_var" + + +class fold2P_slope_10percentile_extractor(lomb_generic): + """ Using point-to-point slopes calculated from LS freq1 model and 2 Period folded data, this is 10 percentile median of the slopes. Note that the linear trend is not use in the model""" + extname = "fold2P_slope_10percentile" + lomb_key = "fold2P_slope_10percentile" + + +class fold2P_slope_90percentile_extractor(lomb_generic): + """ Using point-to-point slopes calculated from LS freq1 model and 2 Period folded data, this is 90 percentile median of the slopes. Note that the linear trend is not use in the model""" + extname = "fold2P_slope_90percentile" + lomb_key = "fold2P_slope_90percentile" + +class freq_n_alias_extractor(lomb_generic): + """ freq_n_alias """ + extname = "freq_n_alias" + lomb_key = "n_alias" + +class freq_model_phi1_phi2_extractor(lomb_generic): + """ freq_model_phi1_phi2 : ratio of model phase between max1 and min2 over phase between min2 to max3 """ + extname = "freq_model_phi1_phi2" + lomb_key = "model_phi1_phi2" + + +class freq_model_min_delta_mags_extractor(lomb_generic): + """ freq_model_min_delta_mags : ratio of model phase between max1 and min2 over phase between min2 to max3 """ + extname = "freq_model_min_delta_mags" + lomb_key = "model_min_delta_mags" + +class freq_model_max_delta_mags_extractor(lomb_generic): + """ freq_model_max_delta_mags : ratio of model phase between max1 and min2 over phase between min2 to max3 """ + extname = "freq_model_max_delta_mags" + lomb_key = "model_max_delta_mags" + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/max_slope_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/max_slope_extractor.py new file mode 100644 index 00000000..5d1e5cba --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/max_slope_extractor.py @@ -0,0 +1,18 @@ +from ..FeatureExtractor import FeatureExtractor + +class max_slope_extractor(FeatureExtractor): + active = True + extname = 'max_slope' #extractor's name + def extract(self): + max_slope = 0 + max_slope_i = 0 +# TODO np.diff +# TODO is this really supposed to return max_slope_i instead of max_slope...? + for i in range(len(self.time_data)-1): + ydiff = self.flux_data[i+1]-self.flux_data[i] + xdiff = self.time_data[i+1]-self.time_data[i] + slope = ydiff / xdiff + if abs(slope) > abs(max_slope): + max_slope = slope + max_slope_i = i + return(max_slope_i) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/median_absolute_deviation_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/median_absolute_deviation_extractor.py new file mode 100644 index 00000000..52ac558f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/median_absolute_deviation_extractor.py @@ -0,0 +1,13 @@ +from ..FeatureExtractor import FeatureExtractor + +from numpy import median + +class median_absolute_deviation_extractor(FeatureExtractor): + """ MAD: Median Absolute Deviation : median(abs(mag[] - median(mag[]))) + """ + active = True + extname = 'median_absolute_deviation' #extractor's name + def extract(self): + mad = median(abs(self.flux_data - median(self.flux_data))) + return mad + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/median_buffer_range_percentage_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/median_buffer_range_percentage_extractor.py new file mode 100644 index 00000000..af90eb80 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/median_buffer_range_percentage_extractor.py @@ -0,0 +1,27 @@ +from ..FeatureExtractor import FeatureExtractor + +class median_buffer_range_percentage_extractor(FeatureExtractor): + """ extracts the percentage of points that fall within the buffer reang of + the median """ + active = True + extname = 'median_buffer_range_percentage' #extractor's name +# TODO simplify logic + def extract(self): + magic_number = 1/10.0 #defines size of buffer range with respect to abs(max) - abs(min) + max = self.fetch_extr('max') + min = self.fetch_extr('min') + median = self.fetch_extr('median') + # TODO lots of this try/except -> return None... + try: +# TODO almost certainly wrong for inputs w/ different signs + buffer_range = (abs(max) - abs(min))*(magic_number) + points_within_buffer_range_of_median = 0 + for n in self.flux_data: + if abs(n - median) < buffer_range: + points_within_buffer_range_of_median += 1 + else: + pass + #print '!!!!', points_within_buffer_range_of_median/float(len(self.flux_data)) + return points_within_buffer_range_of_median/float(len(self.flux_data)) + except: + return None diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/median_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/median_extractor.py new file mode 100644 index 00000000..73a4b4be --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/median_extractor.py @@ -0,0 +1,13 @@ +from ..FeatureExtractor import FeatureExtractor +from numpy import median as med +from .common_functions.plot_methods import plot_horizontal_line + +class median_extractor(plot_horizontal_line,FeatureExtractor): + active = True + extname = 'median' #extractor's name + def extract(self): + try: + median = float(med(self.flux_data)) + except: + self.ex_error("EXCEPT in medianextractor() most likely flux_data=[]") + return(median) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/medianextractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/medianextractor.py new file mode 100644 index 00000000..6608c8a5 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/medianextractor.py @@ -0,0 +1,15 @@ +from __future__ import absolute_import +from ..FeatureExtractor import FeatureExtractor +from numpy import median as med +from .common_functions.plot_methods import plot_horizontal_line + +# TODO duplicate +class medianextractor(plot_horizontal_line,FeatureExtractor): + active = True + extname = 'median' #extractor's name + def extract(self): + try: + median = float(med(self.flux_data)) + except: + self.ex_error("EXCEPT in medianextractor() most likely flux_data=[]") + return(median) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/min_max_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/min_max_extractor.py new file mode 100644 index 00000000..02ca374e --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/min_max_extractor.py @@ -0,0 +1,27 @@ +from ..FeatureExtractor import FeatureExtractor + +class min_extractor(FeatureExtractor): + """ extracts the minimum magnitude (i.e. brightest points)""" + active = True + extname = 'min' #extractor's name + def extract(self): + try: + min_index = self.flux_data.argmin() + self.vplot = self.time_data[min_index] # tells plotting method where to plot this line + minimum = self.flux_data[min_index] + except: + minimum = None + return minimum + +class max_extractor(FeatureExtractor): + """ extracts the maximum magnitude (i.e. faintest points)""" + active = True + extname = 'max' #extractor's name + def extract(self): + try: + max_index = self.flux_data.argmax() + self.vplot = self.time_data[max_index] # tells plotting method where to plot this line + maximum = self.flux_data[max_index] + except: + maximum = None + return maximum diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/mlens3.py b/mltsp/TCP/Software/feature_extract/Code/extractors/mlens3.py new file mode 100755 index 00000000..ab46ba24 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/mlens3.py @@ -0,0 +1,760 @@ +#!/usr/bin/env python +"""Mlens + a plugin to the classification engine that makes statements about probabilities of a microlens in a light curve + + v1.0 -- JSB + + Usage: + import mlens3 + ## make a data model instance from a VOSource + d = mlens3.EventData("124.22024.4124.xml") + + ## run the fitter (turn off doplot for running without pylab) + m = mlens3.Mlens(datamodel=d,doplot=True) + + ## print the results + print m + + ## grab the results (prob_mlens should be between 0 and 1...anything above 0.8 is pretty sure bet) + prob_mlens = m.final_results["final"]["probabilities"]["single-lens"] + + TODO: + - combine multiple filters to make stronger statements + - search for anamolies in the data + - make statements about multiple lens + +""" +from __future__ import print_function +from __future__ import absolute_import +from numpy import * +from math import degrees, pi +from scipy.optimize import leastsq, fmin, fmin_powell +from scipy import random as r +from scipy.odr import * + +from scipy.stats import trim_mean, normaltest, moment, chisqprob +try: + from scipy.stats import median +except: + from scipy import median +try: + from scipy.stats import samplestd +except: + from scipy import std as samplestd + +from scipy.stats.kde import gaussian_kde as kde + +from scipy.stats import norm as statnorm +c = 2.998e10 +g = 6.674e-8 +import copy, sys, os +try: + from matplotlib.pylab import * +except: + print("unable to import matplotlib") +from . import vosource_parse, xmldict +#from pprint import pprint, pformat# dstarr disables pprint function since I'd rather not have this module constantly in memory if just for debugging use. + +__version__ = "1.0.2" + + +from .. import db_importer + +class Mlens: + + ## basic lens equations + theta_e = lambda s,ml, dl: sqrt(2.0*g*ml*1.99e33/(dl*3.085e18))/c + theta_e_arcsec = lambda s,ml, dl: 3600.0*degrees(theta_e(ml,dl)) + re = lambda s,ml, dl: dl*3.085e18*theta_e(ml,dl) + te = lambda s,ml, dl, vl: re(ml,dl)/(vl*1e5) + te_in_days = lambda s,ml, dl, vl: te(ml, dl, vl)/(24.0*3600.0) + u = lambda s,ml, dl, vl, umin, t0, t: sqrt(umin**2 + ((t - t0)/te_in_days(ml,dl,vl))**2) + u_te = lambda s,the_te, umin, t0, t: sqrt(umin**2 + ((t - t0)/the_te)**2) + + final_results = {} + + def __init__(self,datamodel=None,doplot=True,verbose=False): + self.doplot = doplot + self.verbose = verbose + if self.doplot: + cla() + if datamodel is None: + self.test() + else: + self.data = datamodel + self.run() + + def __str__(self): + a = "Results of microlens fitting\n" + # dstarr disables pprint function since I'd rather not have this module constantly in memory if just for debugging use. + #a += pformat(self.final_results) + a += str(self.final_results) + return a + + def out_print(self,rez): + + if not isinstance(rez,dict): + return "" + + a = "********* Filter = %s ************\n" % rez.keys()[0] + a += "_"*50 + "\n" + tmp = rez.values()[0] + for k,v in rez.values()[0].iteritems(): + a += " --> sub-set name: %s <-- \n" % k + a += " + metadata ---\n" + ndata = -1 if "ndata" not in v else v['ndata'] + normalcy_prob = -1 if "normalcy_prob" not in v else v['normalcy_prob'] + p_chi = -1 if "p_chi" not in v else v['p_chi'] + res_var = -1 if "resid_var" not in v else v['resid_var'] + chisq = -1 if "chisq" not in v else v['chisq'] + dof = -1 if "dof" not in v else v['dof'] + frac_data_remaining = 1 if "frac_data_remaining" not in v else v['frac_data_remaining'] + beta = [-1,-1,-1,-1,-1,-1] if "beta" not in v else v['beta'] + if len(beta) == 6: + eq = "f(t) = %8.3e + (%7.3f + %8.3e x t) * g(u[t])" % (beta[5],beta[3],beta[4]) + elif len(beta) == 5: + eq = "f(t) = (%7.3f + %8.3e x t) * g(u[t])" % (beta[3],beta[4]) + else: + eq = "" + a += "\tndata = %i chisq = %f dof = %f\n" % (ndata,chisq,dof) + a += "\tp_chi = %f p_normalcy= %f resid_variance = %f\n" % (p_chi,normalcy_prob,res_var) + a += "\tfrac data = %7.2f\n" % frac_data_remaining + a += "\tequation: %s\n" % eq + a += " + derived parameters ---\n" + a += "\tt_0 = %6.3f +/- %6.3f d t_e = %6.3f +/- %6.3f d\n" % \ + (v["t0"]["val"],v["t0"]["err"],v["te"]["val"],v["te"]["err"]) + a += "\tAmax = %6.3f +/- %6.3f u_min = %6.3f +/- %6.3f\n" % \ + (v["Amax"]["val"],v["Amax"]["err"],v["umin"]["val"],v["umin"]["err"]) + return a + def renorm_data(self,dat,rez,dset="sig5"): + + if dset not in rez.values()[0]: + dset = "all" + if dset not in rez.values()[0]: + durga + return (dat[0],dat[1],dat[2]) + v=rez.values()[0][dset] + if "beta" not in v: + durga + return (dat[0],dat[1],dat[2]) + + beta = v['beta'] + if len(beta) == 6: + zp = beta[5] + else: + zp = 0.0 + + f = (dat[1] - zp)/(beta[3] + beta[4]*dat[0]/dat[0][0]) + ferr = (f/dat[1])*dat[2] + + return (dat[0],f,ferr) + + + def run(self,multifilt=False): + + if not multifilt: + print("Warning: we're only going to use the filter with the most data for now") + print(" in the future we'll combine the results") + self.all_fits = [] + self.all_out = [] + if self.doplot: + cla() + minx, maxx = 1e9,-99 + miny, maxy = 1e9,-99 + maxdata = 0 + thef = "" + for f in self.data.filts: + if len(self.data.t(f)) > maxdata: + maxdata = len(self.data.t(f)) + thef = f + + f = thef + tt, ff, fferr = [], [], [] + print("using %i epochs from filter %s" % (maxdata,f)) + dat = [self.data.t(f),self.data.flux(f),self.data.flux_err(f)] + minx = min([min(self.data.t(f)),minx]) + miny = min([min(self.data.flux(f)),miny]) + maxx = max([max(self.data.t(f)),maxx]) + maxy = max([max(self.data.flux(f)),maxy]) + # 20090212: dstarr re-enables try/except to see if we handle it fine (when n_epochs==1) + try: + self.all_fits.append({f: self._filt_run(dat,f)}) + self.all_out.append({f: self.inspect_output_by_filter(self.all_fits[-1],dat,doplot=self.doplot)}) + if self.verbose: + print(self.out_print(self.all_out[-1])) + except: + print("EXCEPT: mlens3.py:168 self.inspect_output_by_filter(..). Probably not enough datapoints.") + return + tnorm, fluxnorm, flux_errnorm = self.renorm_data(dat,self.all_out[-1],dset="sig5") + tt.extend(list(tnorm)) + ff.extend(list(fluxnorm)) + fferr.extend(list(flux_errnorm)) + self.single_lens_statements(self.all_out[-1]) + a = self.out_print(self.all_out[-1]) + self.final_results.update({"description": a}) + if self.doplot: + xlim([minx,maxx]) + ylim([0.9*miny,maxy*1.1]) + return + else: + if not isinstance(self.data,EventData): + print("bad data model") + + self.all_fits = [] + self.all_out = [] + if self.doplot: + cla() + ## loop over the filters and collect the results + minx, maxx = 1e9,-99 + miny, maxy = 1e9,-99 + tt, ff, fferr = [], [], [] + for f in self.data.filts: + print("filter %s" % f) + dat = [self.data.t(f),self.data.flux(f),self.data.flux_err(f)] + minx = min([min(self.data.t(f)),minx]) + miny = min([min(self.data.flux(f)),miny]) + maxx = max([max(self.data.t(f)),maxx]) + maxy = max([max(self.data.flux(f)),maxy]) + try: + self.all_fits.append({f: self._filt_run(dat,f)}) + self.all_out.append({f: self.inspect_output_by_filter(self.all_fits[-1],dat,doplot=self.doplot)}) + if self.verbose: + print(self.out_print(self.all_out[-1])) + except: + continue + tnorm, fluxnorm, flux_errnorm = self.renorm_data(dat,self.all_out[-1],dset="sig5") + tt.extend(list(tnorm)) + ff.extend(list(fluxnorm)) + fferr.extend(list(flux_errnorm)) + self.single_lens_statements(self.all_out[-1]) + + if self.doplot: + xlim([minx,maxx]) + ylim([0.9*miny,maxy*1.1]) + + print(self.data.filts) + if len(self.data.filts) > 1: + print("combined fit") + print(dat) + #dat = [array(tt),array(ff),array(fferr)] + #self.all_fits.append({"all": self._filt_run(dat,"all")}) + #self.all_out.append({"all": self.inspect_output_by_filter(self.all_fits[-1],dat)}) + #self.out_print(self.all_out[-1]) + + def single_lens_statements(self,rez): + + f = rez.keys()[0] + rez = rez.values()[0] + rel_import = array([1/1.0,1/0.8,1/2.0]) ## importance of knowing umin, te, t0 + rel_pimport = array([1.0,2.0,3.0]) ## inverse of importance + bestp = besta = 0.0 + ret = [] + for k,v in rez.iteritems(): + effective_prob = sqrt(max([v['p_chi'], exp(-1.0*v['resid_var'])])) + expected_te = 40.0 + best_te_dif = min( [abs(expected_te - v['te']['val'] + v['te']['err']),\ + abs(expected_te - v['te']['val'] - v['te']['err']),\ + abs(expected_te - v['te']['val'])] ) + var = log10(12.0) + te_prob_1 = exp( -( log10(expected_te) - log10(v['te']['val'] + v['te']['err']) )**2/var**2) + te_prob_2 = exp( -(log10(expected_te) - log10(v['te']['val'] - v['te']['err']) )**2/var**2) + te_prob_3 = exp( -(log10(expected_te) - log10(v['te']['val']) )**2/var**2) + + #print (te_prob_1,te_prob_2,te_prob_3) + te_prob = max([te_prob_1,te_prob_2,te_prob_3]) + #effective_prob *= te_prob + + ## how well is umin and te measured? + umin_sig = v['umin']['val']/v['umin']['err'] + te_sig = v['te']['val']/v['te']['err'] + + ## how well is t0 measured (relative to t_e)? + t0_sig = v['te']['val']/v['t0']['err'] + + ## what's the chance that the peak was before the first data? + p_peak_before = statnorm.cdf((self.data.t(f)[0] - v['t0']['val'])/v['t0']['err']) + + ## what's the chance that the peak was the after the last data? + p_peak_after = 1 - statnorm.cdf((self.data.t(f)[-1] - v['t0']['val'])/v['t0']['err']) + + pvals = array([1.0 - math.exp(-1.0*umin_sig/2), 1.0 - math.exp(-1.0*te_sig/2),1.0 - math.exp(-1.0*t0_sig/2)]) + avgpval = sqrt( ( (pvals/rel_import)**2 ).sum() / ( (1.0/rel_import)**2 ).sum() ) + final_p = sqrt( ((avgpval/rel_pimport[0])**2 + (te_prob/rel_pimport[1])**2 + (effective_prob/rel_pimport[2])**2 ) / ((1.0/rel_pimport)**2).sum()) + bestp = bestp if bestp > final_p or isnan(final_p) else final_p + besta = besta if besta > avgpval or isnan(avgpval) else avgpval + + tmp = {k: {"probabilities": \ + {"peak_before_first_obs": p_peak_before, \ + "peak_after_last_obs": p_peak_after, \ + "well measured parameters": avgpval, \ + "combined_is_microlens": final_p, \ + "reasonable effetive time (te)": te_prob,\ + "statistical normalcy of fit": effective_prob}, \ + "parameters": \ + {"te": {"val": v['te']['val'], "err": v['te']['err'], "sig": te_sig},\ + "t0": {"val": v['t0']['val'], "err": v['t0']['err'], "sig": t0_sig},\ + "umin": {"val": v['umin']['val'], "err": v['umin']['err'], "sig": umin_sig}}}} + ret.append(tmp) + if self.verbose: + print((k, final_p, avgpval, te_prob, effective_prob, umin_sig,te_sig,t0_sig,p_peak_before,p_peak_after)) + ## what's the robustness of the result (how much do the parameters change on clipping)? + ## how well observed are all the data (how much do the parameters change on clipping)? + if self.verbose: + print("Best probability of a being a single microlens = %f" % bestp) + print("Robustness of the 3 parameter fit = %f " % besta) + ret = {"value_added_properties": ret} + #tmp = {"probabilities": {"single-lens": bestp, "single-lens-parameter-robustness": besta}} + #dstarr prefers a more generic form: ("weight" is just a 0..1 quantifier) + tmp = {"probabilities": {"single-lens": {'prob':bestp, "prob_weight": besta}}} + ret.update(tmp) + self.final_results = ret + + def _extract_info(self,b,berr,extra): + + umin_found, umin_found_sigma = b[1], berr[1] + dadu = -(umin_found**2 + 2)/(umin_found**2*sqrt(umin_found + 4)) - \ + (umin_found**2 + 2)/(2*umin_found*(umin_found + 4)**(1.5)) + \ + 2/sqrt(umin_found + 4) + + Amax = (umin_found**2 + 2)/(umin_found*sqrt(umin_found**2 + 4)) + Amax_sigma = sqrt(dadu**2)*umin_found_sigma + + ret = {"beta": b, + "t0": {"val": b[2], "err": berr[2]}, + "te": {"val": abs(b[0]), "err": berr[0]}, + "umin": {"val": abs(b[1]), "err": berr[1]}, + "Amax": {"val": abs(Amax), "err": Amax_sigma}, + "resid_var": extra.res_var} + + return ret + + def inspect_output_by_filter(self,rez,dat,doplot=False,test=False, + sig_clips=[5, 3, 2], sig_test=[False,False,True]): + p = rez.values()[0][1] + myoutput = rez.values()[0][0] + new = rez.values()[0][2] + filt = rez.keys()[0] + + ret = {} + ret.update({"all": self._extract_info(p,myoutput.sd_beta,myoutput)}) + err = dat[2] + tmp = (dat[1] - self.modelfunc_small_te(p,dat[0]))/err + dof = tmp.shape[0] - myoutput.beta.shape[0] + chisq = (tmp**2).sum() + ret['all'].update({"ndata": dat[0].shape[0], \ + "chisq": chisq, "dof": dof, "p_chi": chisqprob(chisq,dof), + "normalcy_prob": normaltest(tmp)[1]}) + + for s in enumerate(sig_clips): + if sig_test[s[0]] and not test: + continue + sig = s[1] + # get the indices of those inside and out of the clip area + tmpisig = (abs(tmp) < sig).nonzero()[0] + tmpisige = (abs(tmp) > sig).nonzero()[0] + frac_less_than_sig = float(tmpisig.shape[0])/dat[0].shape[0] + # print frac_less_than_sig + if frac_less_than_sig < 1.0: + out = self._filt_run([dat[0][tmpisig],dat[1][tmpisig],err[tmpisig]],\ + filt,do_sim=False,vplot=False) + p = out[1] + myoutput = out[0] + t = "-test" if sig_test[s[0]] else "" + + ret.update({"sig" + str(sig) + t: self._extract_info(p,myoutput.sd_beta,myoutput)}) + tmp = (dat[1][tmpisig] - self.modelfunc_small_te(p,dat[0][tmpisig]))/err[tmpisig] + dof = tmp.shape[0] - myoutput.beta.shape[0] + chisq = (tmp**2).sum() + try: + ntest = normaltest(tmp)[1] + except: + ntest = 0.0 + ret["sig" + str(sig) + t].update({"ndata": dat[0][tmpisig].shape[0], \ + "chisq": chisq, "dof": dof, "p_chi": chisqprob(chisq,dof), + "normalcy_prob": ntest, "frac_data_remaining": frac_less_than_sig }) + if doplot: + plot(dat[0][tmpisige],dat[1][tmpisige],".") + + return ret + + def _filt_run(self,dat,filt,do_sim=False,vplot=True,nrange=1): + + if self.doplot and vplot: + errorbar(dat[0],dat[1],dat[2],fmt="o") + + new = True + if new: + mymodel = Model(self.fitfunc_small_te,extra_args=[dat[1],dat[2],False]) + else: + mymodel = Model(self.fitfunc_te) #,extra_args=[dat[1],dat[2],False]) + + # get some good guesses + try: + scale = trim_mean(dat[1],0.3) + except: + scale = mean(dat[1]) + offset = 1.0 #trim_mean(dat[1],0.3) + t0 = median(dat[0]) + umin = 1.0 + b = 0.0 ## trending slope + mydata = RealData(dat[0],dat[1],sx=1.0/(60*24),sy=dat[2]) + + trange = list(linspace(min(dat[0]),max(dat[0]),nrange)) + maxi = (dat[1] == max(dat[1])).nonzero()[0] + trange.extend(list(dat[0][maxi])) + trange.extend([t0, max(dat[0]) + 10, max(dat[0]) + 100]) + + final_output = None + for t0i in trange: + for te in 10**linspace(log10(2),log10(200),nrange): + if new: + pinit = [te,umin,t0i] # ,scale,offset,b] + else: + pinit = [te,umin,t0i ,scale,offset,b] + + myodr = ODR(mydata,mymodel,beta0=pinit) + myoutput = myodr.run() + if final_output is None: + final_output = myoutput + old_sd_beta = final_output.sd_beta + continue + + if trim_mean(log10(myoutput.sd_beta / final_output.sd_beta),0.0) < 0.0 and \ + myoutput.res_var <= final_output.res_var and (myoutput.sd_beta == 0.0).sum() <= (final_output.sd_beta == 0.0).sum(): + final_output = myoutput + + if 1: + t = linspace(min(dat[0]),max([max(dat[0]),final_output.beta[2] + 6*final_output.beta[0]]),1500) + if new: + tmp = self.fitfunc_small_te(final_output.beta,dat[0],dat[1],dat[2],True) + #print tmp, "***" + p = list(final_output.beta) + p.extend([tmp[0],tmp[1],tmp[2]]) + y = array(self.modelfunc_small_te(p,t)) + else: + p = final_output.beta + y = self.fitfunc_te(final_output.beta,t) + #print final_output.beta + if self.doplot: + plot(t,y) + xlabel('Time [days]') + ylabel('Relative Flux Density') + + if do_sim: + for i in range(10): + tmp = r.multivariate_normal(myoutput.beta, myoutput.cov_beta) + if self.doplot: + plot(t, self.a_te(tmp[0],tmp[1],tmp[2],tmp[3],tmp[4],tmp[5],t),"-") + + return (final_output, p, new) + + def exp_model(self,scale): + pass + + def a_te(self,the_te, umin, t0, scale, offset, b, t): + uu = self.u_te(the_te,umin,t0,t) + return scale*(offset + b*(t/t[0]))*(uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + + #return scale*((uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + offset + b*(t/t[0])) + + def a(self,ml, dl, vl, umin, t0, t): + uu = self.u(ml, dl, vl, umin, t0, t) + return (uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + + def fitfunc_te(self,p, t): + return self.a_te(p[0],p[1],p[2],p[3],p[4],p[5],t) + + def errfunc_small_te(self,p, t, y, err): + the_te, umin, t0 = p[0],p[1],p[2] + uu = self.u_te(the_te,umin,t0,t) + tp = t/t[0] + c1, c2, c3, c4, c5 = (uu**2/err**2).sum(), (uu*tp/err**2).sum(), \ + (uu*y/err**2).sum(), (tp**2*uu**2/err**2).sum(), (tp*y*uu/err**2).sum() + a = (c5*c2 - c3*c4)/(c4*c1 - c2**2) + b = (-1.0*c3 - a*c1)/c2 + + f = (a + b*tp)*(uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + return (y - f) / err + + def modelfunc_small_te(self,p,t): + the_te, umin, t0, a, b = abs(p[0]),p[1],p[2],p[3],p[4] + if len(p) > 5: + c = p[5] + else: + c = 0 + #the_te, umin, t0 = 6.55809283e+01 , 1.01096831e+00 , 1.85432274e+03 + #a = 1.22903731e+00* 1.00337302e+00 + #b = -2.41483071e-04 * 1.22903731e+00 + + uu = self.u_te(the_te,umin,t0,t) + tp = t/t[0] + return c + (a + b*tp)*(uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + + def fitfunc_small_te(self,p, t, y,err,retab): + #the_te, umin, t0 = 6.55809283e+01 , 1.01096831e+00 , 1.85432274e+03 + + the_te, umin, t0 = abs(p[0]),p[1],p[2] + uu = self.u_te(the_te,umin,t0,t) + uu = (uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + tp = t/t[0] + #err[:] = 1 + old = False + if old: + c1, c2, c3, c4, c5 = (uu**2/err**2).sum(), (tp*uu**2/err**2).sum(), \ + (uu*y/err**2).sum(), (tp**2*uu**2/err**2).sum(), (tp*y*uu/err**2).sum() + # print c1, c2, c3, c4, c5 + a = (-1.0*c5*c2 + c3*c4)/(c4*c1 - c2**2) + b = (c3 - a*c1)/c2 + c = 0 + ## + #a = 1.0*c3/c1 + #b = 0.0 + # (uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + else: + c1 = (y/err**2).sum() + c2 = (1/err**2).sum() + c3 = (uu/err**2).sum() + c4 = (tp*uu/err**2).sum() + c5 = (y*uu/err**2).sum() + c6 = c4 + c7 = (uu**2/err**2).sum() + c8 = (tp*uu**2/err**2).sum() + c9 = (tp*y*uu/err**2).sum() + c10 = c4 + c11 = c8 + c12 = (tp**2*uu**2/err**2).sum() + c= (c3*(c12*c5-c8*c9)+c4*(c7*c9-c11*c5)+c1*(c11*c8-c12*c7))/(c2*(c11*c8-c12*c7)+c3*(c12*c6-c10*c8)+c4*(c10*c7-c11*c6)) + a=-(c2*(c12*c5-c8*c9)+c4*(c6*c9-c10*c5)+c1*(c10*c8-c12*c6))/(c2*(c11*c8-c12*c7)+c3*(c12*c6-c10*c8)+c4*(c10*c7-c11*c6)) + b= (c2*(c11*c5-c7*c9)+c3*(c6*c9-c10*c5)+c1*(c10*c7-c11*c6))/(c2*(c11*c8-c12*c7)+c3*(c12*c6-c10*c8)+c4*(c10*c7-c11*c6)) + + f = (a + b*tp)*uu + c + #cc = (((f - y)/err)**2).sum() + #print (a,b,the_te,umin,t0) + #a = 1.22903731e+00* 1.00337302e+00 + #b = -2.41483071e-04 * 1.22903731e+00 + #f = (a + b*tp)*uu # (uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + #cc1 = (((f - y)/err)**2).sum() + #print cc, cc1, cc/cc1 + #f = (a + b*tp)*uu # (uu**2 + 2)/(uu*sqrt(uu**2 + 4.0)) + if not retab: + return f # (y - f) / err + else: + return (a,b,c) + def plot_rez(self): + cla() + +class EventData: + + def __init__(self,data): + ## should be + if isinstance(data,xmldict.XmlDictObject) or isinstance(data,dict): + self.data = data + if isinstance(data,str): + ## maybe it's a file? + if data.endswith(".xml"): + v = vosource_parse.vosource_parser(data) + self.fname = data + #self.elemtree = v.elemtree # 20090225 dstarr added + self.data = v.d + else: + # The we assume it is a large string of XML + v = vosource_parse.vosource_parser(data, is_xmlstring=True) + self.fname = data + #self.elemtree = v.elemtree # 20090225 dstarr added + self.data = v.d + # self.fiter_data/dict = .... ?etree? + + self.filts = self.data['ts'].keys() + + # We get feature data (not for mlens use, but for other classifier's use) + self.get_features_from_data() + + + def get_features_from_data(self): + """ Retrieve features from self.data (vosource_parser) + inserts into self.feat_dict{} + WHERE: + self.feat_dict[] = {\ + 'description': 'freq1_harmonics_peak2peak_flux', + 'err': {'_text': 'unknown', 'datatype': 'string'}, + 'filter': {'_text': 'H', 'datatype': 'string'}, + 'name': {'_text': 'freq1_harmonics_peak2peak_flux', 'class': 'timeseries'}, + 'origin': {'code_output': {'_text': '"0.307688969542"', + 'datatype': 'string'}, + 'code_ver': 'db_importer.py 885 2008-10-24 19:47:03Z pteluser', + 'description': '', + 't_gen': {'_text': '2008-10-28T04:50:35.258144', + 'ucd': 'time.epoch'}}, + 'val': {'_text': '0.307688969542', + 'datatype': 'float', + 'is_reliable': 'True'}} + """ + self.feat_dict = {'multiband':{}} + # TODO: there are different filters. Use these. + + for feat_obj in self.data.get('VOSOURCE',{}).get('Features',{}).get('Feature',[]): + a_feat_dict = dict(feat_obj) + feat_name = a_feat_dict.get('name',{}).get('_text','NOT_A_FEATURE') + filt_name = a_feat_dict.get('filter',{}).get('_text','NOT_A_FILTER') + if filt_name not in self.feat_dict: + self.feat_dict[filt_name] = {} + self.feat_dict[filt_name][feat_name] = a_feat_dict # ??? need to copy.deepcopy() this? + + + def t(self,filt): + """assumes unit = day for now""" + + if isinstance(filt,str): + if filt not in self.filts: + return array([]) + else: + ret = array([]) + for c in self.data['ts'][filt]: + if "name" in c: + if c['name'] == "t": + ret = c['val'] + break + if "system" in c: + if c['system'] == "TIMESYS": + ret = c["val"] + break + return ret + return array([]) + + def flux(self,filt,zp=None): + """assumes unit = day for now""" + if not zp: + zp = 3000e3 ## just choose something to get us close to mJy + + if isinstance(filt,str): + if filt not in self.filts: + return array([]) + else: + ret = array([]) + for c in self.data['ts'][filt]: + if "name" in c: + if c['name'].find("err") != -1: + continue + #if c['name'] == "f" or c['name'].find("flux") != -1: + # ret = c['val'] + # break + #if c['name'] == "m" or c['name'].find("mag") != -1: + # ret = zp*10**(-0.4*c["val"]) + # break + if "ucd" in c: + if c['ucd'].find("err") != -1: + continue + if c['ucd'].find("rel flux") != -1: + ret = c["val"] + 1.0 ## for OGLE data + break + if c['ucd'].find("flux") != -1: + ret = c["val"] + break + if c['ucd'].find("phot.mag") != -1: + ret = zp*10**(-0.4*c["val"]) + break + if "unit" in c: + if c['unit'].find("Jy") != -1 or c['unit'].find("erg") != -1: + ret = c["val"] + break + if c["unit"].find("rel flux") != -1: + ret = c["val"] + 1.0 ## for OGLE + break + if c['unit'].find("mag") != -1: + ret = zp*10**(-0.4*c["val"]) + break + + return ret + return array([]) + + def flux_err(self,filt,zp=None): + """assumes unit = day for now + not a correct calculation for large errors + """ + + if not zp: + zp = 3000e3 ## just choose something to get us close to mJy + + if isinstance(filt,str): + if filt not in self.filts: + return array([]) + else: + ret = array([]) + for c in self.data['ts'][filt]: + #if c.has_key("name"): + # if c['name'] == "f_err": + # ret = c['val'] + # break + # if c['name'] == "m_err": + # ret = c["val"]*self.flux(filt,zp) + # break + if "ucd" in c: + if c['ucd'].find("flux") != -1 and c['ucd'].find("err") != -1: + ret = c["val"] + break + if c['ucd'].find("phot.mag") and c['ucd'].find("err") != -1: + ret = c["val"]*self.flux(filt,zp) + break + + if (ret == 0).sum() == ret.shape[0]: + ## all zeros! figure out the scatter + tmp = self.flux(filt,zp) + for i in range(5): + med = median(tmp) + sigma = sqrt(((tmp - med)**2).sum()/ret.shape[0]) + tmpi = (abs(tmp - med) < 2.5*sigma).nonzero()[0] + tmp = tmp[tmpi] + #print med, sigma + ret = sigma*ones(ret.shape[0]) + + return ret + return array([]) + +def test(): + + #d = EventData("test_feature_algorithms.VOSource.xml") + #m = Mlens(datamodel=d) + #d = EventData("MM1-1190.xml") + #d = EventData("sc33-290665.xml") + #d = EventData("124.22024.4124.xml") + #d = EventData("142.27776.3952.xml") + #d = EventData("167.24169.3673.xml") + #d = EventData("168.25079.1100.xml") + #d = EventData("307.36884.258.xml") + #d = EventData("sc39-468687.xml") + d = EventData("sc39-697584.xml") + #d = EventData("sc34-451887.xml") + #d = EventData("MM1-1192.xml") # 2 filters + #d = EventData("BLG157.7-132318.xml") # multi + #d = EventData("MM1-0307.xml") #not a lens + #d = EventData("ON231.xml") #not a lens + #d = EventData("SN1998dk.xml") #not a lens + #pprint(d.data) + #pprint(d.data['ts']) + #pprint(d.t("B")) + #pprint(d.flux("B")) + #pprint(d.flux_err("B")) + #durga + m = Mlens(datamodel=d,doplot=True) + print(m) + #errorbar(d.t("I"),d.flux("I"),d.flux_err("I")) + #print d.t("I").median() + +if __name__ == '__main__': + + ##### dstarr added these testing statements: + + d = EventData(os.path.abspath(os.environ.get("TCP_DIR") + "/Data/124.22024.4124.xml")) + + ## run the fitter (turn off doplot for running without pylab) + m = Mlens(datamodel=d,doplot=True) + + ###m.run() + ## print the results + import pprint + pprint.pprint(m.final_results) + + ## grab the results (prob_mlens should be between 0 and 1...anything above 0.8 is pretty sure bet) + prob_mlens = m.final_results["probabilities"]["single-lens"] + + pass # for pdb breakpoint diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/montecarlo_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/montecarlo_extractor.py new file mode 100644 index 00000000..ff640dc6 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/montecarlo_extractor.py @@ -0,0 +1,29 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +import numpy + +from ..generators_importers.montecarlo_gen import montecarlo_gen +from .power_extractor import power_extractor +class montecarlo_extractor(InterExtractor): + """ Performs a montecarlo bootstrap on the data to determine the significance of a power spectrum """ + active = True + extname = 'montecarlo' #extractor's name + how_many = 50 # TEN IS PROBABLY NOT ENOUGH BUT IT SPEEDS THINGS UP FOR NOW + def extract(self): + list_for_bootstraps = [] + spectra = [] + for i in range(self.how_many): + gen = montecarlo_gen() + try: + gen.generate(self.dic,list_for_bootstraps) + except KeyError: + self.ex_error("(KeyError in montecarlo generator) No rms data available in dictionary:%s" % self.dic['input'].keys().__str__()) + freqs = self.frequencies#self.fetch_extr('power_spectrum')[0] + for sig in list_for_bootstraps: + power = sig.update(power_extractor()).result + if power == "Fail": + self.ex_error(power.why) + spectra.append(power) + spec_stack = numpy.vstack(spectra) + spec_stack.sort(axis=0) + return spec_stack \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/n_points_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/n_points_extractor.py new file mode 100644 index 00000000..7016d411 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/n_points_extractor.py @@ -0,0 +1,8 @@ +from ..FeatureExtractor import FeatureExtractor + +class n_points_extractor(FeatureExtractor): + active = True + extname = 'n_points' # identifier used in final extracted value dict. + def extract(self): + n_val = len(self.flux_data) # number of photometric points in the light curve + return n_val diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/ned.py b/mltsp/TCP/Software/feature_extract/Code/extractors/ned.py new file mode 100644 index 00000000..26553cda --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/ned.py @@ -0,0 +1,460 @@ +from __future__ import print_function +import os,sys +import urllib +#20090321#import amara +import copy +import threading +import warnings + +class NED(object): + + max_dist_search_arcmin = 100.0 ## 5 degree radius at most + max_z_for_local_search = 0.003 ## otherwise it aint local and could hang + max_small_dist_search_arcmin = 1.0 + max_field_dist_search_arcmin = 30.0 + + local_results = None + nearest_results = None + field_results = None + + indict = {"in_csys": "Equatorial", "in_equinox": "J2000.0",\ + "out_csys": "Equatorial", "out_equinox": "J2000.0",\ + "obj_sort": "Distance to search center",\ + "of": "pre_text","zv_breaker": 30000.0, \ + "list_limit": 5, "img_stamp": "NO", "z_constraint": "Available",\ + "z_value1": "", "z_value2": "", "z_unit": "z", "ot_include": "ANY", \ + "in_objtypes1": "Galaxies", "nmp_op": "ANY", "search_type": "Near Position Search"} + + name_search_dict = {"objname": "", "extend": "no","of":"xml_derved","img_stamp":"NO"} + + ned_url = "http://ned.ipac.caltech.edu/cgi-bin/nph-objsearch?" + + ucd_lookup = {'name': "meta.id;meta.main", "ra": "pos.eq.ra;meta.main", + "dec": "pos.eq.dec;meta.main", "z": "src.redshift", "zflag": "meta.code;src.redshift", + "distance_arcmin": "pos.distance"} + + def __init__(self,pos=(None,None),verbose=False,object_types="Galaxies",precompute_on_instantiation=True, + do_threaded=True,do_local=True, do_field = True, do_nearest=True): + self.good_pos = False + self.ra = None + self.dec = None + self.parse_pos(pos) + self.verbose = verbose + self.indict.update({"in_objtypes1": object_types}) + self.objects = [] + self.threads = [] + self.do_threaded = do_threaded + self.do_local = do_local + self.do_nearest = do_nearest + self.do_field = do_field + + if precompute_on_instantiation: + if self.do_threaded: + self._run_threaded() + else: + if self.verbose: + print("precomuting") + if self.do_local: + self._local_gal_search() + if self.do_nearest: + self._nearest_galaxy_search() + if self.do_field: + self._field_galaxy_search() + + def _run_threaded(self): + if self.do_local: + if self.verbose: + print("Starting local search in a thread") + self.threads.append(threading.Thread(target=self._local_gal_search,name="local")) + self.threads[-1].start() + if self.do_nearest: + if self.verbose: + print("Starting nearest search in a thread") + self.threads.append(threading.Thread(target=self._nearest_galaxy_search,name="nearest")) + self.threads[-1].start() + if self.do_field: + if self.verbose: + print("Starting field search in a thread") + + self.threads.append(threading.Thread(target=self._field_galaxy_search,name="field")) + self.threads[-1].start() + ### dstarr adds, to insure all threads join before returning: + #for t in self.threads: + # t.join() + + def _local_gal_search(self,z_max=0.002,rad=100.0): + + local_dict = copy.copy(self.indict) + if rad > self.max_dist_search_arcmin: + rad = self.max_dist_search_arcmin + if self.verbose: + print("!NED: setting search radius to max_dist_search_arcmin (%f)" % self.max_dist_search_arcmin) + + if z_max > self.max_z_for_local_search: + z_max = self.max_z_for_local_search + if self.verbose: + print("!NED: setting max z to max_z_for_local_search (%f)" % self.max_z_for_local_search) + + ## get the xml_main for this, maybe nothing + local_dict.update({"lon": self.ra, "lat": self.dec, "radius": rad, "of": "xml_main",\ + "z_constraint": "Less Than","z_value1": z_max}) + self.local_results = self._do_search(local_dict) + + def print_local_gal_search(self, z_max=0.002,rad=150.0,timeout=60.0): + """ will do very wide search for local galaxies (z < z_max) consistent with a position """ + + if self.do_threaded: + for t in self.threads: + if t.getName() == 'local': + if self.verbose: + print("Joining the local thread and waiting for it to finish") + t.join(timeout) + + if self.local_results is None: + self._local_gal_search(z_max = z_max, rad= rad) + + print("*"*30) + print("Local Galaxy Results") + print("*"*30) + self._rez_print(self.local_results,key='kpc_offset') + + + def _nearest_galaxy_search(self,rad=0.2): + """ searches really nearby for all types of galaxies whether z is known or not ... default is 12 arcsec """ + local_dict = copy.copy(self.indict) + if rad > self.max_field_dist_search_arcmin: + rad = self.max_field_dist_search_arcmin + + ## get the xml_main for this, maybe nothing + local_dict.update({"lon": self.ra, "lat": self.dec, "radius": rad, "of": "xml_main",\ + "z_constraint": "Unconstrained"}) + + # we really only care about the nearest few guys + self.nearest_results = self._do_search(local_dict,max_derived=3) + + def print_nearest_galaxy_search(self,rad=0.2,timeout=60): + if self.do_threaded: + for t in self.threads: + if t.getName() == 'nearest': + if self.verbose: + print("Joining the 'nearest' thread and waiting for it to finish") + t.join(timeout) + + if self.nearest_results is None: + self._nearest_galaxy_search(rad= rad) + + print("*"*30) + print("Nearest Galaxy Results") + print("*"*30) + self._rez_print(self.nearest_results,key='distance_arcmin') + + def _field_galaxy_search(self,rad=10): + """ searches field galaxies """ + + local_dict = copy.copy(self.indict) + if rad > self.max_field_dist_search_arcmin: + rad = self.max_field_dist_search_arcmin + + ## get the xml_main for this, maybe nothing + local_dict.update({"lon": self.ra, "lat": self.dec, "radius": rad, "of": "xml_main",\ + "z_constraint": "Available", "z_value1": "", "z_value2": ""}) + + # we really only care about the nearest few guys + self.field_results = self._do_search(local_dict,max_derived=100) + + def print_field_galaxy_search(self,rad=5,timeout=60): + if self.do_threaded: + for t in self.threads: + if t.getName() == 'field': + if self.verbose: + print("Joining the 'field' thread and waiting for it to finish") + t.join(timeout) + + if self.field_results is None: + self._field_galaxy_search(rad= rad) + + print("*"*30) + print("Field Galaxy Results") + print("*"*30) + self._rez_print(self.field_results,key='kpc_offset') + + def distance_in_kpc_to_nearest_galaxy(self,timeout=60): + """ cutoff in kpc ... dont return anything if more than that """ + ans = {"request": "distance_in_kpc_to_nearest_galaxy","distance": None} + if self.do_threaded: + # we need to join field and local results + for t in self.threads: + if t.getName() in ['field','local']: + t.join(timeout) + else: + if self.field_results is None: + self._field_galaxy_search() + if self.local_results is None: + self._local_galaxy_search() + + if self.field_results is None or self.local_results is None: + warnings.warn("no field or local result return") + ans.update({'feedback': 'no field or local result return'}) + return ans + + tmp = copy.copy(self.field_results) + tmp.extend(copy.copy(self.local_results)) + + ## sort by kpc offset + key = 'kpc_offset' + obj = copy.copy(tmp) + for o in tmp: + if key not in o: + obj.remove(o) + + if len(obj) == 0: + ans.update({'feedback': 'no sources found with spatial position values known'}) + return ans + + obj.sort(key=lambda x: x[key]) + ans.update({'feedback': 'seems good','distance': obj[0][key], 'source_info': copy.copy(obj[0])}) + return ans + + def distance_in_arcmin_to_nearest_galaxy(self,timeout=60): + """ """ + ans = {"request": "distance_in_arcmin_to_nearest_galaxy","distance": None} + if self.do_threaded: + # we need to join field and local results + for t in self.threads: + if t.getName() in ['field','local','nearest']: + t.join(timeout) + else: + if self.field_results is None: + self._field_galaxy_search() + if self.nearest_results is None: + self._nearest_galaxy_search() + if self.local_results is None: + self._local_galaxy_search() + + if self.field_results is None or self.local_results is None or self.nearest_results is None: + warnings.warn("no field or local or nearest result return") + ans.update({'feedback': 'no field or local or nearest result return'}) + return ans + + tmp = copy.copy(self.field_results) + tmp.extend(copy.copy(self.local_results)) + + ## sort by kpc offset + key = 'distance_arcmin' + obj = copy.copy(tmp) + for o in tmp: + if key not in o: + obj.remove(o) + + if len(obj) == 0: + ans.update({'feedback': 'no sources found with spatial position values known'}) + return ans + + obj.sort(key=lambda x: x[key]) + ans.update({'feedback': 'seems good','distance': obj[0][key], \ + 'source_info': copy.copy(obj[0])}) + return ans + def _rez_print(self,objects,key='kpc_offset'): + + ## sort by kpc offset + other = [] + obj = copy.copy(objects) + + for o in objects: + if key not in o: + other.append(o) + obj.remove(o) + + obj.sort(key=lambda x: x[key]) + + print("%-30s\t%9s\t%9s\t%9s\t%9s" % ("Name","z","dm","dist","offset")) + print("%-30s\t%9s\t%9s\t%9s\t%9s" % ("","","mag","arcmin","kpc")) + for o in obj: + if "dm" in o: + dm = o['dm'] + else: + dm = "---" + if 'kpc_offset' in o: + ko = o['kpc_offset'] + else: + ko = "---" + if 'z' in o: + z = o['z'] + else: + z = "---" + + print("%-30s\t%9s\t%9s\t%9.3f\t%9s" % (o['name'],str(z),str(dm),o["distance_arcmin"],str(ko))) + + if len(other) > 0: + print(" *** OTHER (those that cannot be sorted by requested sort key)**** ") + print("%-30s\t%9s\t%9s\t%9s\t%9s" % ("Name","z","dm","dist","offset")) + print("%-30s\t%9s\t%9s\t%9s\t%9s" % ("","","mag","arcmin","kpc")) + for o in other: + if "dm" in o: + dm = o['dm'] + else: + dm = "---" + if 'kpc_offset' in o: + ko = o['kpc_offset'] + else: + ko = "---" + if 'z' in o: + z = o['z'] + else: + z = "---" + + print("%-30s\t%9s\t%9s\t%9.1f\t%9s" % (o['name'],str(z),str(dm),o["distance_arcmin"],str(ko))) + + def _do_search(self,local,get_derived_obj_info=True,max_derived=500): + """ actually performs the search and parses the output """ + + if not self.good_pos: + return [] + + params = urllib.urlencode(local) + if self.verbose: + print(self.ned_url + params) + f = urllib.urlopen(self.ned_url + params) + + tmp = f.read() + try: + doc = amara.parse(tmp) + except: + print("EXCEPT: ned() extractor") + return [] + self.doc = doc + if self.verbose: + print("got the document from NED") + try: + main_table = doc.xml_xpath(u'//TABLE[@ID="NED_MainTable"]')[0] + except: + print("no main table") + return [] + objs = self._get_objects_from_main_table(main_table) + if get_derived_obj_info: + objs = self._get_derived_info(objs,max_derived=max_derived) + + return objs + + def _get_derived_info(self,objs,max_derived=500): + + ret = [] + local = copy.copy(self.name_search_dict) + for o in objs[:max_derived]: + ## do a search on the name + if "name" not in o: + ret.append(o) + else: + tmp = copy.copy(o) + + local.update({"objname": o['name']}) + params = urllib.urlencode(local) + if self.verbose: + print(self.ned_url + params) + f = urllib.urlopen(self.ned_url + params) + tmp1 = f.read() + doc = amara.parse(tmp1) + if self.verbose: + print("got the derived document from NED for source %s" % o['name']) + try: + d= doc.xml_xpath(u'//TABLE[@ID="NED_DerivedValuesTable"]')[0] + except: + print("no dervived table") + continue + + dfields = d[0].xml_xpath(u'FIELD') + dat = d[0].xml_xpath(u'DATA/TABLEDATA/TR/TD') + for i in range(len(dfields)): + if dfields[i].xml_xpath(u'@ucd="pos.distance;scale;hubble.flow.galactocentric" and @unit="kpc/arcmin"'): + tmp1 = unicode(dat[i]) + try: + ug1 = float(tmp1) + except: + ug1 = str(tmp1).strip() + tmp.update({'kpc_arcmin': ug1}) + try: + tmp.update({'kpc_offset': tmp['kpc_arcmin']*tmp['distance_arcmin']}) + except: + pass + if dfields[i].xml_xpath(u'@ucd="pos.distance;luminosity_moduli" and @unit="mag"'): + tmp1 = unicode(dat[i]) + try: + ug1 = float(tmp1) + except: + ug1 = str(tmp1).strip() + tmp.update({'dm': ug1}) + ret.append(tmp) + return ret + + def _get_objects_from_main_table(self,main_table): + vals = self.ucd_lookup.values() + table_lookup = self.ucd_lookup.fromkeys(self.ucd_lookup) + + fields = main_table.xml_xpath(u'FIELD') + for i in range(len(fields)): + f = fields[i] + if f.ucd in vals: + for k,v in self.ucd_lookup.items(): + if v == f.ucd: + table_lookup[k] = i + break + + objs = main_table.xml_xpath(u'DATA/TABLEDATA/TR') + objects = [] + for o in objs: + ug = o.xml_xpath(u'TD') + tmp = {} + for k, i in table_lookup.items(): + tmp1 = unicode(ug[i]) + try: + ug1 = float(tmp1) + except: + ug1 = str(tmp1).strip() + tmp.update({k: ug1}) + objects.append(tmp) + + return objects + + def parse_pos(self,pos): + """ parses the position and set local variables """ + ## TODO: more error checking ... assume degrees now + #print pos + ra = pos[0] + dec = pos[1] + if type(ra) != type(1.2) or type(dec) != type(1.2): + warnings.warn("RA and/or DEC is not a type of float") + self.good_pos = False + return + + if ra < 0.0 or ra >= 360.0 or dec < -90.0 or dec > 90.0: + warnings.warn("RA and/or DEC out of range") + self.good_pos = False + return + + self.good_pos = True + self.ra = "%fd" % ra + self.dec = "%fd" % dec + + return + +def test(): + ra = 199.83412 + dec = 8.92897 + #ra = 286.61986 + #dec = 68.79320 + #ra = 185.1282480 + #dec = 28.346232 + b = NED(pos=(ra,dec),verbose=False) + #b.print_local_gal_search(rad=150) + #b.print_nearest_galaxy_search(rad=0.2) + #b.print_field_galaxy_search(rad=8) + print(b.distance_in_kpc_to_nearest_galaxy()) + print(b.distance_in_arcmin_to_nearest_galaxy()) + b.print_local_gal_search() + b.print_nearest_galaxy_search() + b.print_field_galaxy_search() + +if __name__ == "__main__": + test() + + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/ned_cache_server.py b/mltsp/TCP/Software/feature_extract/Code/extractors/ned_cache_server.py new file mode 100644 index 00000000..63159749 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/ned_cache_server.py @@ -0,0 +1,1093 @@ +#!/usr/bin/env python +""" + v0.2 ned_cache_server.py : Code is now more generic and allows caching of + SDSS server characteristics as well as NED characs. I'm coding + such that new SDSS extractadd new + v0.1 ned_cache_server.py : Code which caches and delegates NED + 'nearest object feature' information for various (ra,dec). + This information is returned to feature-extractors. + The purpose behind this is that the NED database only allows 1 query + per second, so we need to regulate & cache our queries. + +NOTE: This system works as follows: + - a server continually queries a shared MySQL table for new (retrieved=0) + table rows + - if >= 1 row such as this exists, the 'server' retrieves these items + from SDSS/NED and populates the MySQL tables, setting (retrieved=1) + - a client call, generally from tmpned_extractor.py feature extractor + will, by using a ned_cache_server.py Class for accessing, + will query for an (ra,dec) to see if previously retrieved feature + data exists. + - if no data exists, it places a (retrieved=0) row in MySQL table + - if data exists for (ra,dec), it retrieves and fills sdss and ned + structures which other ned and sdss feature extractors expect. + + +import ned_cache_server +ncc = ned_cache_server.Ned_Cache_Client(ned_cache_server.pars) +ned_dict = ncc.retrieve_queue_ned_dict(49.599486,-1.005111) +print ned_dict + +### Simple DEBUG snippet to submit ra,dec & get ned dict: +import socket +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.connect(('127.0.0.1', 45623)) +#s.send("%lf@%lf" % (49.599486,-1.005111)) +s.send("%lf@%lf" % (48.0,-3.005111)) +data = s.recv(512) +s.close() +rec_data = repr(data).replace("@"," ") +print rec_data + +""" +from __future__ import print_function +from __future__ import absolute_import +import sys, os +import time +import MySQLdb +import copy + +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract/Code/extractors/')) +from . import ned +from . import sdss + +pars = { + 'ned_cache_hostname':'192.168.1.25', + 'ned_cache_username':'pteluser', #'dstarr', + 'ned_cache_database':'ned_feat_cache', + 'ned_cache_db_port':3306, #3306, + 'tablename__ch_id_defs':'ch_id_defs', + 'tablename__ch_spatial':'ch_spatial', + 'tablename__ch_vals':'ch_vals', + 'tablename__ptf_footprint':'ptf_footprint', + 'ptf_postgre_dbname':'subptf', # KLUDGE: these ptf* are taken from ingest_tools.py + 'ptf_postgre_user':'dstarr', + 'ptf_postgre_host':'sgn02.nersc.gov', + 'ptf_postgre_password':'*2ta77', + 'ptf_postgre_port':6540, + 'ptf_postgre_sub_tablename':'subtraction', + 'ptf_postgre_candidate_tablename':'candidate', + 'htm_level':17, #BIGINT, ~0.024-0.053 arcsec resolution + 'htm_query_radius':0.016666 * 5.0, # in arcmins, used in SQL/HTM spatial query + 'while_loop_sleep_time':1, # seconds. Not too short: SQL query done for each + 'socket_loop_sleep_time':0.1, # seconds. May be short. + 'socket_bind_wait_time':3.0, # seconds. + 'socket_server_port':45623, + 'socket_n_backlog_connections':50, + 'do_ned_query':False, + 'do_sdss_query':True, + 'char_replace':{'-':'_', + '+':'_', + '"':'_', + "'":'_', + " ":'_'}, + } +pars['tablename__ch_spatial_htm'] = pars['tablename__ch_spatial'] + '_htm' + + +# For return to Feature extractors: +class Sdss_Obj: + def __init__(self): + self.feature = {} + + + + +# For return to Feature extractors: +class Ned_Dictlike_Obj: + def __init__(self): + self.__dict__ = {} + + + def __getitem__(self, key): + return self.__dict__[key] + + + def __setitem__(self, key, value): + self.__dict__[key] = value + + + def __str__(self): + return str(self.__dict__) + + + def __len__(self): + return len(self.__dict__) + + + def distance_in_arcmin_to_nearest_galaxy(self): + # NOTE: -1 is N/A + ret_dict = {'distance':self.__dict__.get('source_info',{})\ + .get('distance_arcmin', -1)} + return ret_dict + + def distance_in_kpc_to_nearest_galaxy(self): + # NOTE: -1 is N/A + ret_dict = {'distance':self.__dict__.get('source_info',{})\ + .get('kpc_offset', -1)} + return ret_dict + + +def select_ned_data_from_table(ra, dec, cursor): + """ Select NN info for a (ra,dec) and place in ned.py-like dict. + """ + ned_out_dict = Ned_Dictlike_Obj() + sdss_out_dict = Sdss_Obj() + + select_str = "SELECT spatial_id FROM %s WHERE (DIF_HTMCircle(%lf, %lf, %lf)) LIMIT 1" % \ + (pars['tablename__ch_spatial_htm'], \ + ra, dec, pars['htm_query_radius']) + cursor.execute(select_str) + results = cursor.fetchall() + + spatial_id = -1 + try: + if results[0][0] >= 0: + spatial_id = results[0][0] + except: + pass + + if spatial_id == -1: + return (ned_out_dict, sdss_out_dict) # Default "empty" dict-like objects + + select_str = "SELECT y.ch_group, y.ch_name, x.ch_val_dbl, x.ch_val_str, y.ch_type FROM %s AS x JOIN %s AS y ON y.ch_id = x.ch_id WHERE spatial_id=%d" %\ + (pars['tablename__ch_vals'], + pars['tablename__ch_id_defs'], + spatial_id) + cursor.execute(select_str) + results = cursor.fetchall() + + ################ + # Here we form the feature-extractor expected structures from RDB SELECT + + if len(results) > 0: + ned_out_dict['source_info'] = {} + for (ch_group, ch_name, ch_val_dbl, ch_val_str, ch_type) in results: + if ch_group == 0: + # NED + if ch_name == 'distance': + ned_out_dict['distance'] = ch_val_dbl + if ch_type: + ned_out_dict['source_info'][ch_name] = ch_val_str + else: + ned_out_dict['source_info'][ch_name] = ch_val_dbl + else: + # SDSS (ch_group == 1) + if ch_type: + sdss_out_dict.feature[ch_name] = ch_val_str + else: + sdss_out_dict.feature[ch_name] = ch_val_dbl + + return (ned_out_dict, sdss_out_dict) + + +class Ned_Cache_Server: + """ Caches and delegates NED (ra,dec) queries for 'nearest object' features. + """ + #import socket + def __init__(self, pars): + self.pars = pars + self.NED_connection_is_free = True # whether method can query NED server + self.threads = [] + + # Make general connection to MySQL server: + self.db = MySQLdb.connect(host=self.pars['ned_cache_hostname'], + user=self.pars['ned_cache_username'], + db=self.pars['ned_cache_database'], + port=self.pars['ned_cache_db_port']) + self.cursor = self.db.cursor() + + + def sig_handler(self, signum, frame): + """ Catch: 'kill':SIGTERM, ^C: SIGINT + """ + print("Got signal: %i" % (signum)) + self.do_loop = False + + + def drop_tables(self): + """ Drop tables and MySQL stuff. + """ + # Drop main tables: + try: + table_list = [('TABLE', self.pars['tablename__ch_id_defs']), + ('TABLE', self.pars['tablename__ch_spatial']), + ('TABLE', self.pars['tablename__ch_vals'])] + for t_type, table_name in table_list: + drop_table_str = "DROP %s IF EXISTS %s" % (t_type, + table_name) + print(drop_table_str) + self.cursor.execute(drop_table_str) + + # Drop HTM / dif triggers, views: + drop_table_str = """DROP view %s.%s; + """ % ( \ + self.pars['ned_cache_database'], + self.pars['tablename__ch_spatial_htm']) + self.cursor.execute(drop_table_str) + except: + print('!!! unable to drop tables / views') + + + def create_tables(self): + """ Create MySQL Tables. + """ + # NOTE: ch_type SMALLINT, ### 0:double, 1:string + create_str = """CREATE TABLE %s ( + ch_id SMALLINT, + ch_group TINYINT, + ch_type SMALLINT, + ch_name VARCHAR(40), + PRIMARY KEY (ch_id), + INDEX(ch_group, ch_name)) + """ % (self.pars['tablename__ch_id_defs']) + self.cursor.execute(create_str) + + #20090504: ch_val_str VARCHAR(500), # if this is changed again, also edit L357 + create_str = """CREATE TABLE %s ( + ch_id SMALLINT, + ch_val_dbl DOUBLE, + ch_val_str VARCHAR(20), + spatial_id INT UNSIGNED, + PRIMARY KEY (spatial_id, ch_id)) + """ % (self.pars['tablename__ch_vals']) + self.cursor.execute(create_str) + + # 20090724: dstarr removes obsolete index below: + # INDEX(local_retr_dtime) + create_str = """CREATE TABLE %s ( + ra DOUBLE, + decl DOUBLE, + spatial_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + retrieved TINYINT DEFAULT 0, + local_retr_dtime DATETIME DEFAULT NULL, + PRIMARY KEY (spatial_id), + INDEX(retrieved)) + """ % (self.pars['tablename__ch_spatial']) + self.cursor.execute(create_str) + + create_str = """CREATE TABLE %s ( + spatial_id INT UNSIGNED NOT NULL, + ujd DOUBLE, + lmt_mg FLOAT, + PRIMARY KEY (spatial_id, ujd)) + """ % (self.pars['tablename__ptf_footprint']) + self.cursor.execute(create_str) + + make_dif = \ + "$HOME/bin/dif --index-htm %s %s %d ra decl < /dev/null" % \ + (self.pars['ned_cache_database'], \ + self.pars['tablename__ch_spatial'], \ + self.pars['htm_level']) + os.system(make_dif) + + + def retrieve_insert_ned_data_to_table(self, ra, dec, spatial_id, cursor, \ + update_only=False): + """ Insert ned.py extracted NN dict info into RDB table. + """ + insert_list = ["INSERT INTO %s (%s.spatial_id, %s.ch_id, %s.ch_val_dbl, %s.ch_val_str) VALUES " % (\ + self.pars['tablename__ch_vals'], + self.pars['tablename__ch_vals'], + self.pars['tablename__ch_vals'], + self.pars['tablename__ch_vals'], + self.pars['tablename__ch_vals'])] + + if self.pars['do_ned_query']: + ### NED INSERT: + n = ned.NED(pos=(ra,dec),verbose=False, do_threaded=False) + nn_dict = n.distance_in_arcmin_to_nearest_galaxy() + if 'kpc_offset' not in nn_dict.get('source_info',{}): + print('ERROR: odd nn_dict:', nn_dict) + else: + nice_name = nn_dict['source_info']['name'] + for old,new in self.pars['char_replace'].items(): + nice_name = nice_name.replace(old,new) + if nn_dict['source_info']['dm'] == '': + float_dm = -1 + else: + float_dm = float(nn_dict['source_info']['dm']) + + ################ + # Here we parse the feature-extractor structures for INSERT: + nn_dict['source_info']['distance'] = nn_dict['distance'] + for ch_name,ch_val in nn_dict['source_info'].items(): + if (0,ch_name) not in self.chname_chid_lookup: + continue # skip this ch_name since its not a charac. + if self.chname_type_lookup[(0,ch_name)]: + ch_val_dbl = 'NULL' + ch_val_str = "'%s'" % (ch_val) + else: + ch_val_dbl = "%f" % (ch_val) + ch_val_str = 'NULL' + insert_list.append("(%d, %d, %s, %s), " % ( \ + spatial_id, self.chname_chid_lookup[(0,ch_name)], \ + ch_val_dbl, ch_val_str)) + + if self.pars['do_sdss_query']: + ### SDSS INSERT: + s = sdss.sdssq(pos=(ra,dec),verbose=True,maxd=0.2*1.05) # 0.2*1.05 :: dont report anything farther away than this in arcmin + + sdss_dict = s.feature + if 'in_footprint' not in sdss_dict: + print('ERROR: odd sdss_dict:', sdss_dict) + else: + ################ + # Here we parse the feature-extractor structures for INSERT: + for ch_name,ch_val in sdss_dict.items(): + if (1,ch_name) not in self.chname_chid_lookup: + continue # skip this ch_name since its not a charac. + if ch_val is None: + ch_val_dbl = 'NULL' + ch_val_str = 'NULL' + elif self.chname_type_lookup[(1,ch_name)] == 1: + ch_val_dbl = 'NULL' + ch_val_str = "'%s'" % (ch_val[-20:]) + elif self.chname_type_lookup[(1,ch_name)] == 2: + ch_val_dbl = 'NULL' + ch_val_str = 'NULL' + else: + ch_val_dbl = "%f" % (ch_val) + ch_val_str = 'NULL' + insert_list.append("(%d, %d, %s, %s), " % ( \ + spatial_id, self.chname_chid_lookup[(1,ch_name)], \ + ch_val_dbl, ch_val_str)) + + if len(insert_list) > 1: + insert_str = ''.join(insert_list)[:-2] + ' ON DUPLICATE KEY UPDATE spatial_id=VALUES(spatial_id), ch_id=VALUES(ch_id), ch_val_dbl=VALUES(ch_val_dbl), ch_val_str=VALUES(ch_val_str)' + cursor.execute(insert_str) + + update_str = \ + "UPDATE %s SET retrieved=1 WHERE (spatial_id=%d)" % (\ + self.pars['tablename__ch_spatial'], spatial_id) + cursor.execute(update_str) + + # obsolete: + def retrieve_from_pgsql_insert_into_local_table(self, pgsql_cursor=None, + mysql_cursor=None, + rdb_rows=[]): + """ Given a list of soruce-positions (ra,dec,id) which are retrieved from + MysqlDB accounting table, retrieve: + - footprint limiting magnitude data from PGSQL-lbl database + and store locally. + - (? other non-delayed tasks (like SDSS/NED) ?) + """ + # NOTE: the following is not intended to be used as an INSERT, since the row already exists, but I use this to allow UPDATEING of many rows at once (using INSERT ... UPDATE syntax): + #chspatial_update_list = ["INSERT INTO %s (spatial_id) VALUES " % (self.pars['tablename__ch_spatial'])] + chspatial_update_list = ["UPDATE %s SET local_retr_dtime=NOW() WHERE " % (self.pars['tablename__ch_spatial'])] + + footprint_insert_list = ["INSERT INTO %s (spatial_id, ujd, lmt_mg) VALUES " % (self.pars['tablename__ptf_footprint'])] + offset_deg = 0.0005556 + for (ra, dec, spatial_id) in rdb_rows: + chspatial_update_list.append("(spatial_id=%d) OR " % (spatial_id)) + select_str = "select obsjd, lmt_mg from proc_image where box(polygon'((%lf, %lf), (%lf, %lf), (%lf, %lf), (%lf, %lf), (%lf, %lf))') && box(image_footprint)" % ( \ + ra - offset_deg, + dec + offset_deg, + ra + offset_deg, + dec + offset_deg, + ra + offset_deg, + dec - offset_deg, + ra - offset_deg, + dec - offset_deg, + ra - offset_deg, + dec + offset_deg) + pgsql_cursor.execute(select_str) + rdb_rows = pgsql_cursor.fetchall() + + for (ujd, lmt_mg) in rdb_rows: + if ujd is None: + continue # this happens occasionally + footprint_insert_list.append("(%d, %lf, %lf), " % (spatial_id, ujd, lmt_mg)) + + footprint_insert_str = ''.join(footprint_insert_list)[:-2] + ' ON DUPLICATE KEY UPDATE spatial_id=VALUES(spatial_id), ujd=VALUES(ujd), lmt_mg=VALUES(lmt_mg)' + mysql_cursor.execute(footprint_insert_str) + + # NOTE: the following is not intended to be used as an INSERT, since the row already exists, but I use this to allow UPDATEING of many rows at once (using INSERT ... UPDATE syntax): + chspatial_update_str = ''.join(chspatial_update_list)[:-3] + mysql_cursor.execute(chspatial_update_str) + + # TODO: also update the accounting table with a datetimed local_retr_dtime == NOW() + + + def rdb_table_watcher(self): + """ This method continually polls the local NED MySQL table for + new position additions which have not had NED data retrieved. + This then queues a list of positions & retrieves NED data, updating + the RDB table. When in NED-querying mode, it locks/flags other methods + from querying the remote NED service. + """ + import time + + # ??? Why did I choose to have this DB cursor locally instantiated? + + db = MySQLdb.connect(host=self.pars['ned_cache_hostname'], + user=self.pars['ned_cache_username'], + db=self.pars['ned_cache_database']) + cursor = db.cursor() + + while self.do_loop: + try: + select_str = \ + "SELECT ra,decl,spatial_id FROM %s WHERE NOT retrieved LIMIT 50000" % \ + (self.pars['tablename__ch_spatial']) + #print 'select_str=', select_str + cursor.execute(select_str) + results = cursor.fetchall() + if len(results) == 0: + time.sleep(self.pars['while_loop_sleep_time']) + print('.', end=' ') + continue + else: + self.NED_connection_is_free = False + for (ra, dec, spatial_id) in results: + self.retrieve_insert_ned_data_to_table(ra, dec, spatial_id,\ + cursor, update_only=True) + self.NED_connection_is_free = True + except: + print('EXCEPT during cursor.execute(), DB down? Sleeping for a bit...') + print('select_str=', select_str) + time.sleep(self.pars['while_loop_sleep_time']) + print("Out of while loop") + + #### + + # obsolete: + def local_retr_table_watcher(self): + """ This method continually polls the local NED MySQL table for + new position additions which have not had NED data retrieved. + This then queues a list of positions & retrieves NED data, updating + the RDB table. When in NED-querying mode, it locks/flags other methods + from querying the remote NED service. + """ + import time + import psycopg2 + + # I chose to have this DB cursor locally instantiated so that multiple threads can poll DB. + + mysql_db = MySQLdb.connect(host=self.pars['ned_cache_hostname'], + user=self.pars['ned_cache_username'], + db=self.pars['ned_cache_database']) + mysql_cursor = mysql_db.cursor() + + pg_conn = psycopg2.connect(\ + "dbname='%s' user='%s' host='%s' password='%s' port=%d" % \ + (self.pars['ptf_postgre_dbname'],\ + self.pars['ptf_postgre_user'],\ + self.pars['ptf_postgre_host'],\ + self.pars['ptf_postgre_password'],\ + self.pars['ptf_postgre_port'])) + pg_cursor = pg_conn.cursor() + + while self.do_loop: + #try: + if 1: + select_str = \ + "SELECT ra,decl,spatial_id FROM %s ORDER BY local_retr_dtime ASC LIMIT 100" %\ + (self.pars['tablename__ch_spatial']) + mysql_cursor.execute(select_str) + results = mysql_cursor.fetchall() + if len(results) == 0: + time.sleep(self.pars['while_loop_sleep_time']) + print('.', end=' ') + continue + else: + #self.NED_connection_is_free = False + #TODO: the passed in method should take the full list of ra,dec, spatial_id. + # and then fill some other table with values retrieved from PGSQL. + self.retrieve_from_pgsql_insert_into_local_table( \ + pgsql_cursor=pg_cursor, + mysql_cursor=mysql_cursor, + rdb_rows=results) + + #for (ra, dec, spatial_id) in results: + # self.retrieve_insert_ned_data_to_table(ra, dec, spatial_id,\ + # mysql_cursor, update_only=True) + #self.NED_connection_is_free = True + #except: + if 0: + print('EXCEPT during cursor.execute(), DB down? Sleeping for a bit...') + print('select_str=', select_str) + time.sleep(self.pars['while_loop_sleep_time']) + print("Out of while loop") + + + #### + + + def get_chdefs_from_srccode(self): + """ Generate 'ch_id_defs_list' list(dict) from features which exist + in current software extractors (source code). + + KLUDGE: Currently ch_id_defs_list[{}] is explicitly filled below + for testing, development. + + TODO: Eventually parse (sdss,ned) features from + feature_extract/Code/extractor/ directory. + + For now I just hardcode a list{dict} + """ + ch_id_defs_list = [ \ + {'ch_id':0, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'best_dl', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':0, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'best_dm', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':0, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'best_offset_in_kpc', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':1, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'best_offset_in_petro_g', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':2, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'bestz', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':3, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'bestz_err', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':4, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'chicago_class', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':5, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'chicago_status', + 'val_type':0, # 0:double, 1:string ###20090504 1->0 + }, + {'ch_id':6, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'chicago_z', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':7, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'dec', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':8, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'dered_g', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':9, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'dered_i', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':10, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'dered_r', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':11, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'dered_u', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':12, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'dered_z', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':13, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'dist_in_arcmin', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':14, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'first_flux_in_mJy', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':15, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'first_offset_in_arcsec', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':16, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'in_footprint', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':17, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'objid', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':18, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'petroRadErr_g', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':19, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'petroRad_g', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':20, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo2_flag', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':21, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo2_z_cc', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':22, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo2_z_d1', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':23, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo2_zerr_cc', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':24, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo2_zerr_d1', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':25, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_abs_g', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':26, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_abs_i', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':27, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_abs_r', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':28, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_abs_u', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':29, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_abs_z', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':30, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_gr', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':31, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_iz', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':32, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_ri', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':33, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_rest_ug', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':34, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_z', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':35, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'photo_zerr', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':36, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'ra', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':37, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'rosat_cps', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':38, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'rosat_flux_in_microJy', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':39, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'rosat_hardness_1', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':40, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'rosat_hardness_2', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':41, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'rosat_log_xray_luminosity', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':42, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'rosat_offset_in_arcsec', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':43, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'rosat_offset_in_sigma', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':44, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'rosat_poserr', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':45, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'spec_confidence', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':46, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'spec_veldisp', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':47, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'spec_z', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':48, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'spec_zStatus', + 'val_type':1, # 0:double, 1:string + }, + {'ch_id':49, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'type', + 'val_type':1, # 0:double, 1:string + }, + {'ch_id':50, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'url', + 'val_type':1, # 0:double, 1:string + }, + {'ch_id':51, + 'ch_group':1, #0:NED, 1:SDSS featclass + 'ch_name':'urlalt', + 'val_type':2, # 0:double, 1:string, 2:NULL + }, + {'ch_id':52, + 'ch_group':0, #0:NED, 1:SDSS featclass + 'ch_name':'distance', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':53, + 'ch_group':0, #0:NED, 1:SDSS featclass + 'ch_name':'z', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':54, + 'ch_group':0, #0:NED, 1:SDSS featclass + 'ch_name':'dm', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':55, + 'ch_group':0, #0:NED, 1:SDSS featclass + 'ch_name':'name', + 'val_type':1, # 0:double, 1:string + }, + {'ch_id':56, + 'ch_group':0, #0:NED, 1:SDSS featclass + 'ch_name':'distance_arcmin', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':57, + 'ch_group':0, #0:NED, 1:SDSS featclass + 'ch_name':'kpc_offset', + 'val_type':0, # 0:double, 1:string + }, + {'ch_id':58, + 'ch_group':0, #0:NED, 1:SDSS featclass + 'ch_name':'kpc_arcmin', + 'val_type':0, # 0:double, 1:string + }] + return ch_id_defs_list + + + def get_chdefs_from_table(self): + """ This retrieves existing charac_id entries from 'ch_id_defs' TABLE + and returns results in a ch_defs[{}] + """ + ch_defs = [] + select_str = "SELECT ch_id, ch_group, ch_type, ch_name FROM %s" % ( \ + self.pars['tablename__ch_id_defs']) + self.cursor.execute(select_str) + results = self.cursor.fetchall() + for result in results: + if len(result) != 4: + print('ERROR: %s returns an unexpected result: %s' % ( \ + select_str, str(result))) + result_dict = {'ch_id':result[0], + 'ch_group':result[1], #0:NED, 1:SDSS featclass + 'ch_name':result[3], + 'val_type':result[2], # 0:double, 1:string + } + ch_defs.append(result_dict) + return ch_defs + + + def determine_chdefs_not_in_table(self, existing_table_chdefs, + srccode_chdefs): + """Updates srccode_chdefs[{}] with 'ch_id' numbers from existing + entries in existing_table_chdefs[{}] + Then, for entries not in " " " ", they be given a ch_id = MAX(ch_id)+1 + """ + existing_ch_id_list = [] + for exist_chdef in existing_table_chdefs: + existing_ch_id_list.append(exist_chdef['ch_id']) + if len(existing_ch_id_list) == 0: + max_ch_id = -1 # so first incremented id is 0 + else: + max_ch_id = max(existing_ch_id_list) + + new_chdefs = [] + all_chdefs = copy.deepcopy(existing_table_chdefs) + + for srccode_chdef in srccode_chdefs: + is_in_exist_chdef = False + # This is done brute force & CPU slow: + for exist_chdef in all_chdefs: + if ((srccode_chdef['ch_name'] == exist_chdef['ch_name']) and + (srccode_chdef['ch_group'] == exist_chdef['ch_group'])): + is_in_exist_chdef = True + break + if not is_in_exist_chdef: + updated_chdef = copy.deepcopy(srccode_chdef) + max_ch_id += 1 + updated_chdef['ch_id'] = max_ch_id + all_chdefs.append(updated_chdef) + new_chdefs.append(updated_chdef) + + self.chname_chid_lookup = {} + self.chname_type_lookup = {} + for chdef in all_chdefs: + self.chname_chid_lookup[(chdef['ch_group'], chdef['ch_name'])] = chdef['ch_id'] + self.chname_type_lookup[(chdef['ch_group'], chdef['ch_name'])] = chdef['val_type'] + + # NOTE: now we have syncd 'ch_id_defs' TABLE which matches all_chdefs[] + self.all_chdefs = all_chdefs # This will be referenced in later code. + + return new_chdefs + + + def update_chdefs_table(self, new_ch_defs): + """ using new_chdefs, we add new entries to 'ch_id_defs' table + """ + if len(new_ch_defs) == 0: + return # don't INSERT anything. + insert_list = \ + ["INSERT INTO %s (ch_id, ch_group, ch_type, ch_name) VALUES " % (\ + self.pars['tablename__ch_id_defs'])] + for ch_def in new_ch_defs: + insert_list.append("(%d, %d, %d, '%s'), " % \ + (ch_def['ch_id'], + ch_def['ch_group'], + ch_def['val_type'], + ch_def['ch_name'])) + + self.cursor.execute(''.join(insert_list)[:-2]) + + + def initialize_loop_threads(self): + """ Start table-watching and socket server threads. + Both threads while(self.do_loop), which is coupled to SIGINT event. + """ + import signal + import threading + + self.do_loop = True + signal.signal(signal.SIGINT, self.sig_handler) # Handle ^C + + existing_table_chdefs = self.get_chdefs_from_table() + + srccode_chdefs = self.get_chdefs_from_srccode() + + new_chdefs = self.determine_chdefs_not_in_table(existing_table_chdefs, + srccode_chdefs) + self.update_chdefs_table(new_chdefs) + + # TODO: now we use all_chdefs[] when storing queried SDSS & NED data. + #self.rdb_table_watcher() + + # TODO: eventually thread this off: + # 20090524: I just coded this and then decided not to use it: + #self.local_retr_table_watcher() + + t = threading.Thread(target=self.rdb_table_watcher, args=[]) + self.threads.append(t) + t.start() + + + ### Disable socket server for now: + #self.socket_listening_server() + #t = threading.Thread(target=self.socket_listening_server, args=[]) + #self.threads.append(t) + #t.start() + + + + def wait_for_thread_joins(self): + """ Wait for all loop threads to join. + """ + for t in self.threads: + t.join() + print("All threads have joined") + + + def insert_radec_into_cachetable_for_retrieval(self, ra, dec, cursor): + """ This INSERTs ra,dec only row into local cache table, so + table-watching thread will eventually retrieve from NED and UPDATE + it's entry in the local cache table. + """ + insert_str="INSERT INTO %s (ra, decl, retrieved) VALUES (%lf, %lf, 0)"%\ + (self.pars['ned_cache_tablename_root'], ra, dec) + cursor.execute(insert_str) + + + def get_ned_dict_trying_local_or_remote(self, ra, dec): + """ Attempt to retrieve NED dict from local cache table, or from + the NED service, or lastly just queue in table for eventual NED + retrieval by other thread. + """ + (ned_dict, sdss_dict) = select_ned_data_from_table(ra, dec, self.cursor) + if len(ned_dict) > 0: + if str(ned_dict['distance']) != "NULL": + return ned_dict + update_only=True + else: + update_only=False + if self.NED_connection_is_free: + self.NED_connection_is_free = False + # NOTE: OK to use self.cursor since other thread cursor is independt + self.retrieve_insert_ned_data_to_table(ra, dec, self.cursor, \ + update_only=update_only) + self.NED_connection_is_free = True + (ned_dict, sdss_dict) = select_ned_data_from_table(ra, dec, self.cursor) + return ned_dict + else: + self.insert_radec_into_cachetable_for_retrieval(ra, dec,self.cursor) + return {} + + + def socket_listening_server(self): + """ This loop waits for a socket connection, which passes (ra,dec) + and then tries to retrieve a NED dict, which it returns. + The NED dict retrieval can be done via direct NED server query or + retrieving from local NED cache database, or queue retrieval & return {} + """ + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try_to_bind = True + while try_to_bind: + try: + s.bind(('', self.pars['socket_server_port'])) + try_to_bind = False + except: + print("socket %d still in use"%(self.pars['socket_server_port'])) + time.sleep(self.pars['socket_bind_wait_time']) + + print("In socket listening loop...") + s.listen(self.pars['socket_n_backlog_connections']) + while self.do_loop: + time.sleep(self.pars['socket_loop_sleep_time']) + conn, addr = s.accept() + rec_str = conn.recv(64).split("@") + if len(rec_str) != 2: + continue # skip blank lines, which terminate queries + try: + ra = float(rec_str[0]) + dec = float(rec_str[1]) + except: + continue # skip weird values + + ned_dict = self.get_ned_dict_trying_local_or_remote(ra, dec) + + dict_str = str(ned_dict) + #out_str = "Hello@Joe,@%s %s" % (rec_str[0], rec_str[1]) + conn.send(dict_str) + conn.close() + + +class Ned_Cache_Client: + """ Client class called within NED feature extractor, which retrieves + ned_dict{} from cache table, if available; or queues todo-task by + adding a "retrieve==0" row (for ra,dec) to cache table. + """ + def __init__(self, pars): + self.pars = pars + # Make general connection to MySQL server: + self.db = MySQLdb.connect(host=self.pars['ned_cache_hostname'], + user=self.pars['ned_cache_username'], + db=self.pars['ned_cache_database'], + port=self.pars['ned_cache_db_port']) + self.cursor = self.db.cursor() + + + def retrieve_queue_ned_dict(self, ra, dec): + """ Given an (ra,dec), Attempt to retrieve filled ned_dict{} from + ned_cache table; if row is queued/empty, return {}; if (ra,dec) not + in table, add todo (retrieve=0) entry to table (for (ra,dec)). + """ + (ned_obj, sdss_obj) = select_ned_data_from_table(ra, dec, self.cursor) + if len(ned_obj) > 0: + #20090123: dstarr comments out: #if str(ned_obj['distance']) == "NULL": + if len(sdss_obj.feature) <= 0: + return (Ned_Dictlike_Obj(), Sdss_Obj()) + else: + return (ned_obj, sdss_obj) + else: + # This is non-existant row case. Need to add a (retrieved==0) row. + query_str = "INSERT INTO " + self.pars['tablename__ch_spatial'] + " (retrieved, ra, decl) VALUES (0, %lf, %lf)" + insert_str = query_str % (ra, dec) + self.cursor.execute(insert_str) + return (Ned_Dictlike_Obj(), Sdss_Obj()) + + +if __name__ == '__main__': + + # Can populate ned-cache-server using ra,decs from MySQL outfile: + # select ra,decl from sh_spatial into outfile '/tmp/out'; + # The results can be loaded back in once the ned_cach_server.py is running: + # load data infile '/tmp/out' into table ch_spatial (ra,decl); + + ##### Do Index server: + ncs = Ned_Cache_Server(pars) + #20081026: I don't want to drop all this hard work. I comment out: + #ncs.drop_tables() + #ncs.create_tables() + #sys.exit() + + ncs.initialize_loop_threads() + + ncs.wait_for_thread_joins() diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/ng.py b/mltsp/TCP/Software/feature_extract/Code/extractors/ng.py new file mode 100644 index 00000000..a8a4268f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/ng.py @@ -0,0 +1,461 @@ +#!/bin/env python +""" +ng -- gets the nearest galaxies + +USAGE: + ./ng.py [ra] +""" +from __future__ import print_function +from __future__ import absolute_import +import csv +import os +import sqlite3 +import numpy, math +from . import geohash2 +from math import sin, cos, radians, sqrt, atan2, degrees +import copy + +__author__ = "Josh Bloom" +__version__ = "10 Nov 2008" + +if "TCP_DIR" in os.environ: + DATADIR = os.environ.get("TCP_DIR") + "Data/" +else: + DATADIR = "" + +def_min_depth = 11 + +class GalGetter: + + dbname = "gal.db" + rez = [] + query = "" + index_type="index" + + def __init__(self,inname=DATADIR + "200MpcGalaxyCatalog_v2.dat",dbname=DATADIR + "gal_v2.db",max_rows=-1,make_db_on_instance=True,verbose=False): + self.inname = inname + self.dbname = dbname + self.verbose = verbose + + if make_db_on_instance: + self.make_db(max_rows=max_rows) + + # NOTE: 20090227: dstarr changes some default values so this works with normal feature extractor: + # def make_db(self,in_memory=False,clobber=False,skip_headers=[''],\ + def make_db(self,in_memory=False,clobber=False,skip_headers=[''],\ + intnames=['pgc'],default_hash_depth=18,max_rows=-1): + + if not os.path.exists(self.inname): + if self.verbose: + print("inname = %s does not exist" % self.inname) + return None + + r = csv.reader(open(self.inname), delimiter="|") + + ## figure out the headers + tmp = numpy.array([s.strip() for s in next(r)]) + use_indices = [] + for i in range(len(tmp)): + if not (tmp[i] in skip_headers): + use_indices.append(i) + tmp = list(tmp.take(use_indices)) + + self.headers = copy.copy(tmp) + self.headers.append('ghash') + + ra_ind = tmp.index('al2000') + dec_ind = tmp.index('de2000') + d_ind = tmp.index('logd25') + + if clobber: + if not in_memory: + if os.path.exists(self.dbname): + os.remove(self.dbname) + else: + if os.path.exists(self.dbname): + return self.dbname + + if in_memory: + self.dbname = ":memory:" + + # Make the DB + conn = sqlite3.connect(self.dbname) + c = conn.cursor() + tmp1 = [] + for s in tmp: + if s in intnames: + tmp1.append(s + " int") + else: + tmp1.append(s + " real") + + tmp1.append("ghash text") + tmp1 = ",".join(tmp1) + c.execute('''create table galaxies (%s)''' % tmp1) + #c.execute('select * from galaxies') + #print "*" + #for r in c: + # print r + #print "*" + i=0 + min_depth = 35 + if self.index_type == "hash": + g = geohash2.Geohash + else: + g = geohash2.Geoindex + for l in r: + if i > max_rows and max_rows > 1: + break + try: + tmp = numpy.array([s.strip() for s in l]) + tmp = list(tmp.take(use_indices)) + tmp[ra_ind] = str(float(tmp[ra_ind])*15.0) + hashpos = (float(tmp[ra_ind]),float(tmp[dec_ind])) + if float(tmp[d_ind]) > 0: + hashpos_depth = int(math.floor(18.25707 - \ + 3.333333*math.log10(60.0*10**(float(tmp[d_ind])*0.1)))) + else: + hashpos_depth = default_hash_depth + if hashpos_depth < min_depth: + min_depth = hashpos_depth + #hashpos_depth = 18 + #print hashpos, hashpos_depth + tmp.append("'%s'" % str(g(hashpos,depth=hashpos_depth))) + tmp = ",".join(tmp) + c.execute("""insert into galaxies values (%s)""" % tmp) + i+=1 + except: + if self.verbose: + print("row %i" % i) + i+=1 + continue + conn.commit() + conn.close() + if self.verbose: + print("min_depth ", min_depth) + return self.dbname + + def getgi(self,pos=(None,None),error=1.0,min_depth=def_min_depth): + mult = 3600.0 + depth =int(math.floor(18.25707 - 3.333333*math.log10(mult*error))) + if depth > min_depth: + depth = min_depth + #depth=18 + return geohash2.Geoindex(pos,depth=depth) + + def getgh(self,pos=(None,None),error=1.0,min_depth=def_min_depth): + mult = 3600.0 + depth =int(math.floor(18.25707 - 3.333333*math.log10(mult*error))) + if depth > min_depth: + depth = min_depth + #depth=18 + return geohash2.Geohash(pos,depth=depth) + + def getgals(self,pos=(49.362750 , 41.405417),radius=5,min_depth=def_min_depth,sort_by='dist',max_d=500.0): + if self.index_type == "hash": + g = self.getgh + else: + g = self.getgi + ## radius in degrees + ## max d in Mpc + dm_max = 5.0*math.log10(max_d*1e5) + gh= g(pos=pos,error=radius*3,min_depth=min_depth) + #gh1 = self.getgh(pos=(pos[0],pos[1]+radius),error=radius,min_depth=min_depth) + #gh2 = self.getgh(pos=(pos[0],pos[1]-radius),error=radius,min_depth=min_depth) + #gh3 = self.getgh(pos=(pos[0]-radius*cos(radians(pos[1])),pos[1]),error=radius,min_depth=min_depth) + #gh4 = self.getgh(pos=(pos[0]+radius*cos(radians(pos[1])),pos[1]),error=radius,min_depth=min_depth) + #print gh.bbox() + #print gh.point() + #print gh1.bbox(), (pos[0],pos[1]+radius), str(gh1) + #print gh2.bbox(), (pos[0],pos[1]-radius), str(gh2) + #print gh3.bbox(), (pos[0]-radius*cos(radians(pos[1])),pos[1]), str(gh3) + #print gh4.bbox(), (pos[0]+radius*cos(radians(pos[1])),pos[1]), str(gh4) + conn = sqlite3.connect(self.dbname) + c = conn.cursor() + self.query = 'pos = %s, radius = %f, sort_by=%s max_d=%f \nselect * from galaxies where galaxies.ghash glob %s and galaxies.mucin < %s' % \ + (repr(pos), radius, sort_by, max_d, str(gh)[:-2] + "*",dm_max) + c.execute('select * from galaxies where galaxies.ghash glob ? and galaxies.mucin < ?', (str(gh)[:-2] + "*",dm_max)) + tmp = c.fetchall() + d_ind = self.headers.index('logd25') + r_ind = self.headers.index('logr25') + pa_ind = self.headers.index('pa') + mucin = self.headers.index('mucin') + muc = self.headers.index('mup') + #semim = 60 * 10.**(r1[0][d_ind])*0.1 + #semimin = semim / 10**r1[0][r_ind] + #pa = r1[0][pa_ind] + + tmp1 = [] + for r in tmp: + d = self.distance(pos[0],pos[1],r[1],r[2]) + if d < radius: + dl = self.distlight(pos[0],pos[1],r[1],r[2],60 * 10.**(r[d_ind])*0.1,60 * 10.**(r[d_ind])*0.1/(10**r[r_ind]),r[pa_ind]) + if r[muc] > 0: + off = 1e3*radians(d)*1e-5*10**(r[muc]/5.0) + else: + off = 1e3*radians(d)*1e-5*10**(r[mucin]/5.0) + #print off, d, r[mucin] + tmp1.append( (r,d,dl,off)) + + tmp = tmp1 + #print len(tmp) + if sort_by == 'dist': + tmp.sort(key=lambda x: x[1]) + elif sort_by == 'dm': + tmp.sort(key=lambda x: x[0][self.headers.index('mucin')]) + elif sort_by == 'mag': + ## get the distance modulus and the b-band mag corrected + tmp.sort(key=lambda x: x[0][self.headers.index('btc')] - x[0][self.headers.index('mucin')]) + elif sort_by == 'light': + ## distance in light units + tmp.sort(key=lambda x: x[2][0]) + elif sort_by == 'phys': + tmp.sort(key=lambda x: x[3]) + self.rez = tmp + conn.close() + + def grab_rez(self,retkey="light",prefix="closest_in_"): + + + try: + r1=self.rez[0] + if retkey == 'light': + val= r1[2][0] + sb = "light" + units = "galaxy_surface_brightness" + alt_dict = {prefix + sb + "_physical_offset_in_kpc": r1[3], prefix + sb + "_angular_offset_in_arcmin": r1[1]*60} + elif retkey == 'phys': + val= r1[3] + sb = "physical_offset_in_kpc" + units = "kpc" + alt_dict = {prefix + sb + "_light": r1[2][0], prefix + sb + "_angular_offset_in_arcmin": r1[1]*60} + elif retkey == "dist": + val= r1[1]*60 + sb = "angular_offset_in_arcmin" + units = "arcmin" + alt_dict = {prefix + sb + "_light": r1[2][0], prefix + sb + "_physical_offset_in_kpc": r1[3]} + + else: + return {} + + d_ind = self.headers.index('logd25') + r_ind = self.headers.index('logr25') + pa_ind = self.headers.index('pa') + mucin = self.headers.index('mucin') + muc = self.headers.index('mup') + t = self.headers.index('t') + te = self.headers.index('e_t') + b = self.headers.index('btc') + ra = self.headers.index('al2000') + dec = self.headers.index('de2000') + + smj,sminor,pa = (60 * 10.**(r1[0][d_ind])*0.1, 60 * 10.**(r1[0][d_ind])*0.1/(10**r1[0][r_ind]), r1[0][pa_ind]) + dm = r1[0][muc] if r1[0][muc] > 0 else r1[0][mucin] + + if smj == 6.0e-99: + smj = None + sminor = None + + ## look at the t-type + ttype = r1[0][t] if r1[0][te] < 3 and r1[0][t] != -99.0 else None + + ## look at the absolute mag of the closest galaxy + absb = r1[0][b] - dm if r1[0][b] > 5.0 else None + + ## angle from major + angle_major = r1[2][1] or None + + ## position (for internal purposes if we want it) + ra, dec = r1[0][ra], r1[0][dec] + + except: + return {} + + alt_dict.update({prefix + sb: val, prefix + sb + "_units": units, prefix + sb + "_semimajor_r25_arcsec": smj, \ + prefix + sb + "_semiminor_r25_arcsec": sminor, prefix + sb + "_dm": dm, \ + prefix + sb + "_angle_from_major_axis": angle_major, prefix + sb + "_ttype": ttype, \ + prefix + sb + "_absolute_bmag": absb, prefix + sb + "_galaxy_position": (ra, dec)}) + return copy.copy(alt_dict) + + def __str__(self): + a = "%s\n%s\n%s\n" % ("*"*50, self.query,"*"*50) + a += "dist(') offset(kpc) dist(light) angle_from_major" + for h in self.headers: + a += "%9s" % h + a += "\n" + for r1 in self.rez: + r = r1[0] + #print r1[2] + a += "%7.4f %7.4f %7.4f %7.1f " % (r1[1]*60, r1[3], r1[2][0], r1[2][1] or -999) + a += " ".join([str(x) for x in r]) + " \n" + # a += "%f %f %f %f %s\n" % (r[1], r[2], r[7], r1[1], r[-1]) + return a + + def writeds9(self,fname='ds9.reg'): + ra_ind = self.headers.index('al2000') + dec_ind = self.headers.index('de2000') + d_ind = self.headers.index('logd25') + r_ind = self.headers.index('logr25') + pa_ind = self.headers.index('pa') + pgc_ind = self.headers.index('pgc') + mucin = self.headers.index('mucin') + muc = self.headers.index('mup') + + f = open(fname,'w') + f.write("# Region file\n") + f.write('global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source\nfk5\n') + mind = 100 + maxd = 0 + for r1 in self.rez: + if r1[0][muc] != -99: + m = r1[0][muc] + else: + m = r1[0][mucin] + if m < mind: mind = m + if m > maxd: maxd = m + + # max sure that maxd and mind aren't the same + if mind == maxd: + mind /= 1.02 + for r1 in self.rez: + d = r1[0] + semim = 60 * 10.**(r1[0][d_ind])*0.1 + semimin = semim / 10**r1[0][r_ind] + pa = r1[0][pa_ind] + if r1[0][muc] != -99: + m = r1[0][muc] + else: + m = r1[0][mucin] + #print r1, m, mind, maxd + cc = str(hex(int(255.0 - 255.0*(m - mind)/(maxd - mind)))).split("x")[1] + if len(cc) == 1: cc = "0" + cc + + col = '"#' + cc*2 + '44"' + width = int(5 - 4.0*(m - mind)/(maxd - mind)) + d= 1e-5*10**(m/5.0) + f.write('ellipse(%f,%f,%f",%f",%f) # text={pgc=%i, d=%4.1f Mpc} color=%s width=%i\n' % (r1[0][ra_ind],r1[0][dec_ind],\ + semim,semimin,pa - 90.0,r1[0][pgc_ind],d,col,width)) + f.close() + + def distance(self,lon0, lat0, lon, lat): + """ + Calculates the distance between two points (decimal) + """ + d_lat = radians(lat0 - lat) + d_lon = radians(lon0 - lon) + x = sin(d_lat/2) ** 2 + \ + cos(radians(lat0)) * cos(radians(lat)) *\ + sin(d_lon/2) ** 2 + y = 2 * atan2(sqrt(x), sqrt(1.0 - x)) + distance = y*180.0/math.pi + return distance + + def distlight(self,lon, lat, lon0, lat0,semimajor,semiminor,pa,assumed_size_if_none=15.0): + """assumed size = 15.0 arcsec""" + d = self.distance(lon0,lat0,lon,lat) + if pa == -99.0 and semimajor == 6e-99: + + if self.verbose: + print("bad pa or size: returning %f %f" % (d/(assumed_size_if_none/3600.0),d)) + return (d/(assumed_size_if_none/3600.0), None) + ## get the angle from the center of this galaxy to the source + dra = self.distance(lon0,lat0,lon,lat0) + ddec = self.distance(lon0,lat0,lon0,lat) + + if lat < lat0: + ddec *= -1 + if lon < lon0: + dra *= -1 + #if ((lon - lon0) > -180.0) and ((lon - lon0) < 180.0): + # dra *= -1 + + ## this is the angle between the center of the galaxy and the source (east of North) + a = atan2(dra,ddec) + + ## relative to the semi-major axis the angle is + t = a - radians(pa) + + ## here's the r25 along this direction + r = numpy.sqrt((semimajor**2)*(semiminor**2)/( (semimajor*numpy.sin(t))**2 + (semiminor*numpy.cos(t))**2)) + + #print r, d, d*3600.0/r, lon0, lat0, lon, lat + #print "*"*50 + return (d*3600.0/r, degrees(t)) + +def test(): + global ddd + ddd = GalGetter(max_rows=-1) + ddd.getgals() + print(ddd) + ddd.writeds9() + +def test1(): + conn = sqlite3.connect(ddd.dbname) + c = conn.cursor() + c.execute('select * from galaxies') + for r in c: print(r) + +def get_closest_by_light(pos=(None,None),max_d=300.0,radius=1.0): + """to be called by the extrators""" + ddd = GalGetter(verbose=False) + ddd.getgals(pos=pos,radius=1.0,sort_by="light",max_d=max_d) + return ddd.grab_rez("light") + +def get_closest_by_physical_offset(pos=(None,None),max_d=300.0,radius=1.0): + """to be called by the extrators in kpc""" + ddd = GalGetter(verbose=False) + ddd.getgals(pos=pos,radius=1.0,sort_by="phys",max_d=max_d) + return ddd.grab_rez("phys") + +def get_closest_by_angular_offset(pos=(None,None),max_d=300.0,radius=1.0): + """to be called by the extrators in arcmin""" + ddd = GalGetter(verbose=False) + ddd.getgals(pos=pos,radius=1.0,sort_by="dist",max_d=max_d) + return ddd.grab_rez("dist") + +if __name__ == "__main__": + from optparse import OptionParser + usage = "usage: %prog [options] -p ra dec\n" + parser = OptionParser(usage) + + parser.add_option("--ds9name", dest="ds9name", \ + help="Name of the output ds9 region file",\ + default="ds9.reg") + + parser.add_option("--nds9",dest="no_ds9", action="store_true",\ + help="dont write the ds9 file",default=False) + + parser.add_option("--radius",dest="radius",\ + help="Search radius in arcmin",type="float",default=60.0) + + parser.add_option("--maxd",dest="max_d",\ + help="Maximum distance to search (in Mpc); default = 500 Mpc",type="float",default=500.0) + + parser.add_option("-v","--verbose",dest="verbose",action="store_true",\ + help="Be verbose",default=False) + + parser.add_option("--ntop",dest="ntop",action="store_false",\ + help="Dont print the top result",default=False) + + parser.add_option("--sortkey",dest="sortkey",choices = ['dist', 'dm', 'mag', 'light','phys'], \ + help="Sort key: (dist; default) angular distance from source, " + \ + "(dm) proximity to Earth in Mpc, (mag) galaxy absolute mag, (light) light units, (phys) offset in kpc",default="dist") + + parser.add_option("-p", type="float", nargs=2, dest="pos") + + (options, args) = parser.parse_args() + +# if len(args) != 2: +# print "You must supply RA and DEC in decimal degrees" +# print usage +# parser.parse_args(['-h']) + + if not options.pos: + parser.parse_args(['-h']) + + ddd = GalGetter(verbose=options.verbose) + ddd.getgals(pos=options.pos,radius=float(options.radius)/60.,sort_by=options.sortkey,max_d=options.max_d) + if not options.no_ds9: + ddd.writeds9(fname=options.ds9name) + + if not options.ntop: + print(ddd) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/noisify.py b/mltsp/TCP/Software/feature_extract/Code/extractors/noisify.py new file mode 100644 index 00000000..c6c97318 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/noisify.py @@ -0,0 +1,87 @@ +from ..FeatureExtractor import InterExtractor +from numpy import inf +import numpy + +from ..generators_importers.copy_gen import noisified_gen # the class that will generate the new (noisified) signal + +class noisify(InterExtractor): + """ Noisifies the data as wished, and re-extracts all the features""" + active = False + extname = 'noisify' #extractor's name + list_of_noisifiers = [badpoints(p=0.001, sigma=10), addgaussian(sigma = 2), cliptop(maxvalue = 20), clipbottom(minvalue = 3)] # list of noisifying functions that will be applied in order to the signal, presumably this list should be defined elsewhere to make it more flexible and modifiable at runtime. Order matters, and entries can of course be repeated. + dic_of_noisifiers = {'badpoints':badpoints, 'addgaussian':addgaussian, 'cliptop':cliptop, 'clipbottom':clipbottom, 'makefainter':makefainter} # this dictionary (dic_of_noisifiers) is simply to be able to export all the noisifying functions outside of this module + def extract(self): + for i in range(len(self.list_of_noisifiers)): + self.list_of_noisifiers[i] = self.list_of_noisifiers[i].noisify # we want the actual function, not the class + generator = noisified_gen(self.list_of_noisifiers) # generate a new signal + signal = generator.generate(self.dic) # send the generator the list of functions to apply to the signal + return signal # the result is the actual signal, so far we haven't applied any feature extractions to it + + +class noisifier(object): + def noisify(self,inputdic): + self.flux_data = inputdic['flux_data'] + self.time_data = inputdic['time_data'] + self.n = len(self.flux_data) # because this is often useful + return self.myaction(inputdic) + def myaction(self,inputdic): + pass + + +class cliptop(noisifier): + """ clips the faintest points """ + def __init__(self,maxvalue=inf): + self.maxvalue = maxvalue + def myaction(self,inputdic): + self.flux_data = self.flux_data.clip(min = -inf, max = self.maxvalue) + inputdic['flux_data'] = self.flux_data + return inputdic + +class clipbottom(noisifier): + """ clips the brightest points """ + def __init__(self,minvalue=-inf): + self.minvalue = minvalue + def myaction(self,inputdic): + self.flux_data = self.flux_data.clip(min = self.minvalue, max = inf) + inputdic['flux_data'] = self.flux_data + return inputdic + +class addgaussian(noisifier): + """ _add_ gaussian noise to the signal + Here we will specify a sigma, and add corresponding noise to the signal. + The array of RMS values will simply be augmented by this sigma + """ + def __init__(self, sigma = 1): + self.sigma = sigma + def myaction(self,inputdic): + gauss = numpy.random.normal(loc=0.0,scale=self.sigma,size=self.n) # create the gaussian noise + self.flux_data = self.flux_data + gauss # add the gaussian noise to the signal + inputdic['flux_data'] = self.flux_data + inputdic['rms_data'] += self.sigma + return inputdic + +class badpoints(noisifier): + """ simulate bad points + input: the probability of a bad point, and the sigma associated with such a bad point + Note: it would make sense to apply the bad points _before_ clipping, to avoid points outside the clipping boundaries + """ + def __init__(self, p=0.001, sigma = 10): + self.p = p + self.sigma = sigma + def myaction(self,inputdic): + isitbad = numpy.random.binomial(1, self.p, size=self.n) # Create a bunch of zeros and ones using a binomial distribution. The ones will become bad points. Each point is just one trial (by definition), hence the first input. + nbadpoints = isitbad.sum() # number of bad points + isitbad = isitbad.astype(bool) # convert to True/False so we can use it to index things + gauss = numpy.random.normal(loc=0.0,scale=self.sigma,size=nbadpoints) # create the bad points + self.flux_data[isitbad] = gauss # the bad points are replaced by the random values we just created + inputdic['flux_data'] = self.flux_data + return inputdic + +class makefainter(noisifier): + """ Make an object fainter by a fixed number of magnitudes """ + def __init__(self, mags = 1): + self.mags = mags + def myaction(self,inputdic): + self.flux_data += self.mags # add that number of magnitudes (-> make fainter) + inputdic['flux_data'] = self.flux_data + return inputdic \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/old_dc_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/old_dc_extractor.py new file mode 100644 index 00000000..5b99971f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/old_dc_extractor.py @@ -0,0 +1,18 @@ +from ..FeatureExtractor import FeatureExtractor + +from numpy import ones, mean +from scipy import stats +from pylab import * + +# TODO ...also remove? +class old_dc_extractor(FeatureExtractor): + """ Old DC + """ + active = True + extname = 'old_dc' #extractor's name + def extract(self): + return(mean(self.flux_data)) + def plot_feature(self,properties): + dc_line = ones(len(self.time_data),dtype=float) + dc_line[:] = properties['old dc'] + plot(self.time_data,dc_line,label='old dc') diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/old_dcextractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/old_dcextractor.py new file mode 100644 index 00000000..057beafa --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/old_dcextractor.py @@ -0,0 +1,18 @@ +from ..FeatureExtractor import FeatureExtractor + +from numpy import ones +from scipy import stats +from pylab import * + +# TODO remove? +class old_dcextractor(FeatureExtractor): + """ Old DC + """ + active = True + extname = 'old_dc' #extractor's name + def extract(self): + return(stats.mean(self.flux_data)) + def plot_feature(self,properties): + dc_line = ones(len(self.time_data),dtype=float) + dc_line[:] = properties['old dc'] + plot(self.time_data,dc_line,label='old dc') diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/pair_slope_trend_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/pair_slope_trend_extractor.py new file mode 100644 index 00000000..515954a0 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/pair_slope_trend_extractor.py @@ -0,0 +1,35 @@ +from ..FeatureExtractor import FeatureExtractor + +class pair_slope_trend_extractor(FeatureExtractor): + """percentage of pairs of points which continually rise, over total number number of pairs. + + We only want to run this on the last MAX_PAIRS points to see if there is an + overall trend to the rise/fall. + + To account for plateaus, we devide by the total number of pairs examined, and + not the total of rising/falling pairs. + + The slopes are not weighted, but you can change the value of PLATEAU_SLOPE + to included values close to 0 as 0 slope. + + Blame: john m. brewer + """ + active = True + extname = 'pair_slope_trend' # extractor name + MAX_PAIRS = 30 # maximum number of pairs to examine from end of epochs + PLATEAU_SLOPE = 0.0 # slope considered equal to 0 + + def extract(self): + rising = 0; + falling = 0; + lastpoint = len(self.time_data) - 1 + firstpoint = max(0,lastpoint-self.MAX_PAIRS) + + for i in range(firstpoint,lastpoint): + fluxDiff = self.flux_data[i+1] - self.flux_data[i] + timeDiff = self.time_data[i+1] - self.time_data[i] + slope = fluxDiff/timeDiff + rising += (slope > self.PLATEAU_SLOPE) + falling += (slope < (0.0 - self.PLATEAU_SLOPE)) + + return float(rising - falling)/max(1.0,(lastpoint - firstpoint)) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/pct_montecarlo_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/pct_montecarlo_extractor.py new file mode 100644 index 00000000..1673b4c6 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/pct_montecarlo_extractor.py @@ -0,0 +1,40 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor + +from .common_functions.plot_methods import plot_vs_frequencies + + +class pct_80_montecarlo_extractor(plot_vs_frequencies,InterExtractor): + """ picks the right montecarlo cruve according to the desired significance """ + active = True + extname = 'pct_80_montecarlo' #extractor's name + percent_significance = 80 + def extract(self): + self.spectra = self.fetch_extr('montecarlo') + spectr_index = self.calc_index() + if spectr_index == len(self.spectra): + self.ex_error("too high degree of certainty for this number of montecarlo iteration") + nth_spectrum = self.spectra[spectr_index] + return nth_spectrum + def calc_index(self): + " will calculate the correct index for the sorted array of spectra according to the desired percent significance " + how_many = self.spectra.shape[0] + sign = float(self.percent_significance) + ind_rough = sign/100.0 * how_many + ind = int(round(ind_rough)) + return ind +class pct_90_montecarlo_extractor(pct_80_montecarlo_extractor): + """ picks the right montecarlo cruve according to the desired significance """ + active = True + extname = 'pct_90_montecarlo' #extractor's name + percent_significance = 90 +class pct_95_montecarlo_extractor(pct_80_montecarlo_extractor): + """ picks the right montecarlo cruve according to the desired significance """ + active = True + extname = 'pct_95_montecarlo' #extractor's name + percent_significance = 95 +class pct_99_montecarlo_extractor(pct_80_montecarlo_extractor): + """ picks the right montecarlo cruve according to the desired significance """ + active = True + extname = 'pct_99_montecarlo' #extractor's name + percent_significance = 99 diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/phase_dispersion_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/phase_dispersion_extractor.py new file mode 100644 index 00000000..5cdcf815 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/phase_dispersion_extractor.py @@ -0,0 +1,144 @@ +try: + from ..FeatureExtractor import FeatureExtractor +except: + import os + ppath = os.environ.get('PYTHONPATH') + os.environ.update({'PYTHONPATH': ppath + ":" + os.path.realpath("..")}) + #print os.environ.get("PYTHONPATH") + from FeatureExtractor import FeatureExtractor + +import numpy#, pdb +#from scipy.optimize import fmin +#from common_functions.lomb_scargle_refine import lomb + + +class phase_dispersion_freq0_extractor(FeatureExtractor): + ''' + returns the frequency estimated by phase dispersion minimization. + + NOTE: designed to identify correct period of eccentric eclipsing sources. + + by I.Shivvers, June 2012 + ''' + active = True + extname = 'phase_dispersion_freq0' + + def extract(self): + try: + t = self.time_data + m = self.flux_data + e = self.rms_data + + # find set of periods to test + test_periods = self.preSelect_periods() + + # choose best period by minimizing GCV + GCVs = [] + for iii, period in enumerate(test_periods): + #print iii,'of', len(self.test_periods), '...' + p = self.fold(t, period) + best_GCV, optimal_window = self.minimize_GCV(p, m) + GCVs.append(best_GCV) + b_period = test_periods[ numpy.argmin(GCVs) ] + # return the period with the lowest GCV + return 1./b_period + except: + return 0.0 + + # DEFINITIONS + def fold(self, times, period): + ''' return phases for folded at ''' + t0 = times[0] + phase = ((times-t0)%period)/period + return phase + + def rolling_window(self, a, window): + """ Call: numpy.mean(rolling_window(observations, n), 1) + """ + shape = a.shape[:-1] + (a.shape[-1] - window + 1, window) + strides = a.strides + (a.strides[-1],) + return numpy.lib.stride_tricks.as_strided(a, shape=shape, strides=strides) + + def GCV(self, window, X,Y): + # put in proper order + zpm = list(zip(X,Y)) + zpm.sort() + zpm_arr = numpy.array(zpm) + phs = zpm_arr[:,0] + mags = zpm_arr[:,1] + # handle edges properly by extending array in both directions + if window>1: + b = numpy.concatenate((mags[-window/2:], mags, mags[:window/2-1])) + else: + b = mags + # calculate smoothed model and corresponding smoothing matrix diagonal value + model = numpy.mean(self.rolling_window(b, window), 1) + Lii = 1./window + # return the Generalized Cross-Validation criterion + GCV = 1./len(phs) * numpy.sum( ((mags-model)/(1.-Lii))**2 ) + return GCV + + def minimize_GCV(self,X,Y, window_range=(10,50,2)): + ''' quick way to pick best GCV value; GCV is not smooth ''' + windows = numpy.arange(*window_range) + GCVs = numpy.array( [self.GCV(window, X,Y) for window in windows] ) + best_GCV = numpy.min(GCVs) + optimal_window = windows[ numpy.argmin(GCVs) ] + return best_GCV, optimal_window + + def preSelect_periods(self, numpeaks=5): + """ use LS to select trial periods for use in find_period + returns top most-likely periods """ + lomb_dict = self.fetch_extr('lomb_scargle') + psd = lomb_dict.get('freq1_psd',[]) + f0 = lomb_dict.get('freq1_f0',0.) + df = lomb_dict.get('freq1_df',0.) + numf = lomb_dict.get('freq1_numf',0.) + frequencies = numpy.linspace( f0, f0+df*numf, numf ) + periods = 1./frequencies + peaks_ind = self.find_peaks(psd) + zpp = list(zip(psd[peaks_ind], periods[peaks_ind])) + zpp.sort(reverse=True) + test_periods = numpy.array([zed[1] for zed in zpp[:numpeaks]]) + # return periods and a few harmonics + return numpy.concatenate( [test_periods, test_periods*2, test_periods*3, test_periods/2., test_periods/3. ] ) + ''' + def preSelect_periods(self, t,m,e, numpeaks=10): + ### calculate raw psd ### + # longest period (shortest frequency) is .5*(total time span) + f0 = 2./(t[-1]-t[0]) + # shortest period (largest frequency) is physically motivated at period = .1 days + fend = 1./.1 + numf = int(136121) + df = (fend-f0)/numf + periods = 1./numpy.arange(f0, fend, df) + # run the smoothed ls periodogram, and find all of the peaks + psd,lombdict = lomb(t,m,e, f0, df, numf) + peaks_ind = self.find_peaks(psd) + zpp = zip(psd[peaks_ind], periods[peaks_ind]) + zpp.sort(reverse=True) + test_periods = numpy.array([zed[1] for zed in zpp[:numpeaks]]) + # return periods and a few harmonics + return numpy.concatenate( [test_periods, test_periods*2, test_periods*3, test_periods/2., test_periods/3. ] ) + ''' + def find_peaks(self, x): + """ find peaks in x """ + xmid = x[1:-1] # orig array with ends removed + xm1 = x[2:] # orig array shifted one up + xp1 = x[:-2] # orig array shifted one back + return numpy.where(numpy.logical_and(xmid > xm1, xmid > xp1))[0] + 1 + + +class ratio_PDM_LS_freq0_extractor(FeatureExtractor): + ''' returns the ratio of phase_dispersion-estimated and lomb_scargle-estimated frequencies ''' + active = True + extname = 'ratio_PDM_LS_freq0' + def extract(self): + try: + pdm_freq = self.fetch_extr('phase_dispersion_freq0') + lomb_dict = self.fetch_extr('lomb_scargle') + LS_freq = lomb_dict.get('freq1_harmonics_freq_0',0.) + return pdm_freq/LS_freq + except: + return 0.0 + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/position_intermediate_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/position_intermediate_extractor.py new file mode 100644 index 00000000..c9a003f9 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/position_intermediate_extractor.py @@ -0,0 +1,59 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextInterExtractor +#from ..FeatureExtractor import FeatureExtractor +import math +rad2deg = 180.0/math.pi + +ok_to_use = True +try: + import ephem +except: + print("!position_intermedite_extractor: pyephem not installed. The position features will fail.") + ok_to_use = False + +default = {'galb': None, 'gall': None, 'ecb': None, 'ecl': None, 'ra': None, 'dec': None} + +class position_intermediate_extractor(ContextInterExtractor): +#class position_intermediate_extractor(FeatureExtractor): + """ intermediate position extractor """ + active = True + extname = 'position_intermediate' + exttype = "context" + + if active and not ok_to_use: + active = False + + def extract(self): + if not self.active: + return default + + ret = default + ## do some tests on the data + try: + if self.ra < 0.0 or self.ra >= 360.0: + ret.update({'ra': None}) + else: + ret.update({'ra': ephem.degrees(str(self.ra))}) + except: + ret.update({'ra': None}) + + try: + if self.dec < -90.0 or self.dec > 90.0: + ret.update({'dec': None}) + else: + ret.update({'dec': ephem.degrees(str(self.dec))}) + except: + ret.update({'dec': None}) + + if ret['dec'] is not None and ret['ra'] is not None: + np = ephem.Equatorial(ret['ra'],ret['dec'],epoch='2000') + else: + return ret + g = ephem.Galactic(np) + e = ephem.Ecliptic(np) + + ret = {'galb': rad2deg*float(g.lat), 'gall': rad2deg*float(g.long), \ + 'ecb': rad2deg*float(e.lat), 'ecl': rad2deg*float(e.long), \ + 'ra': rad2deg*float(np.ra), 'dec': rad2deg*float(np.dec)} + + return ret diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/power_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/power_extractor.py new file mode 100644 index 00000000..5eea7d2f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/power_extractor.py @@ -0,0 +1,34 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +from .common_functions.plot_methods import plot_vs_frequencies + +class power_extractor(plot_vs_frequencies,InterExtractor): + """ extracts a periodogram, chooses either a lomb or fft extraction method """ + active = True + extname = 'power' + def extract(self): + self.longenough() + if 0:#self.iseven(): # determines if the data is evenly sampled / commented out assuming all our data is uneven + #print "Evenly sampled data detected" + result = self.fetch_extr('power_spectrum') + else: # otherwise use lomb-scargle + #print "Unevenly sampled data detected" + power = self.fetch_extr('lomb') + result = power + return result + def longenough(self): + try: + if len(self.flux_data) < 5: # if 4 or less points, error + self.ex_error("not enough data points") + return None + except: + self.ex_error("not enough data points") + + def iseven(self): + iseven = True + for x in range(len(self.time_data)-3): + slicex = self.time_data[x:x+3] # slice with three elements + if round((slicex[2] - slicex[1]),2) != round((slicex[1] - slicex[0]),2): + iseven = False + break + return iseven diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/power_spectrum_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/power_spectrum_extractor.py new file mode 100644 index 00000000..d2536803 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/power_spectrum_extractor.py @@ -0,0 +1,13 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +from .common_functions.plot_methods import plot_vs_frequencies + +class power_spectrum_extractor(plot_vs_frequencies,InterExtractor): + active = False + extname = 'power_spectrum' #extractor's name + def extract(self): + fourier = self.fetch_extr('fourier') + if not isinstance(fourier,numpy.ndarray): + self.ex_error("Did not receive the correct type as input") + power_spec = abs(fourier)**2 + return power_spec diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/psd_example_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/psd_example_extractor.py new file mode 100644 index 00000000..4ff1ce53 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/psd_example_extractor.py @@ -0,0 +1,14 @@ +from ..FeatureExtractor import FeatureExtractor + +class psd_example_extractor(FeatureExtractor): + """ Example use of the first freq LombScargle derived PSD + """ + active = True + extname = "psd_example" + def extract(self): + lomb_dict = self.fetch_extr('lomb_scargle') + psd = lomb_dict.get('freq1_psd',[]) + f0 = lomb_dict.get('freq1_f0',0.) + df = lomb_dict.get('freq1_df',0.) + numf = lomb_dict.get('freq1_numf',0.) + return f0*df*numf + sum(psd) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/qso_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/qso_extractor.py new file mode 100755 index 00000000..4be6a06b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/qso_extractor.py @@ -0,0 +1,107 @@ +import os,sys +from numpy import median +from ..FeatureExtractor import FeatureExtractor, InterExtractor + +from .....Algorithms.qso_fit import qso_fit + + +#class qso_extractor(FeatureExtractor): # Using this will add a 'qso' feature in vosource xml whose value is a string representation of the returned od dict. (using internal_use_only=False, active=False) +class qso_extractor(InterExtractor): + """ calculates the skew of the signal using scipy.stats.skew + biased skew?""" + internal_use_only = False # if set True, then seems to run all qso code for each sub-feature + active = True # if set False, then seems to run all qso code for each sub-feature + extname = 'qso' #extractor's name + def extract(self): + y0 = 19. + y = self.flux_data - median(self.flux_data) + y0 + try: + od = qso_fit(self.time_data, + y, + self.rms_data,filter='g') + except: + self.ex_error(text="qso_extractor.qso_extractor()") + + #res = od['chi2_qso/nu'],od['chi2_qso/nu_NULL'] + # QSO-like: res[0]<~2 + # non-QSO: res[1]/res[0]<~2 + return od + + +class qso_generic(FeatureExtractor): + """ Generic qso extractor grabs value from dictionary """ + internal_use_only = False + active = True + extname = 'to_be_overloaded' # identifier used in final extracted value dict. + qso_key = 'to_be_overloaded' + def extract(self): + qso_dict = self.fetch_extr('qso') + if self.qso_key in qso_dict: + return qso_dict[self.qso_key] + else: + self.ex_error('qso_extractor dictionary does not have key %s' % (self.qso_key)) + +##### Nat has converged upon the following being the most significant featues, +# Joey believes it is best to jut use these features only (so now the others are disabled in +# __init__.py and qso_extractor.py + +class qso_log_chi2_qsonu_extractor(qso_generic): + """ qso_log_chi2_qsonu """ + extname = "qso_log_chi2_qsonu" + qso_key = "log_chi2_qsonu" + +class qso_log_chi2nuNULL_chi2nu_extractor(qso_generic): + """ qso_log_chi2nuNULL_chi2nu """ + extname = "qso_log_chi2nuNULL_chi2nu" + qso_key = "log_chi2nuNULL_chi2nu" + +##### + +### eventually get rid of: +#class qso_lvar_extractor(qso_generic): +# """ qso_lvar """ +# extname = "qso_lvar" +# qso_key = "lvar" + +### eventually get rid of: +#class qso_ltau_extractor(qso_generic): +# """ qso_ltau """ +# extname = "qso_ltau" +# qso_key = "ltau" + +### eventually get rid of: (since is not related to QSO classifier) +#class qso_chi2nu_extractor(qso_generic): +# """ qso_chi2nu """ +# extname = "qso_chi2nu" +# qso_key = "chi2/nu" + +#class qso_chi2_qsonu_extractor(qso_generic): +# """ qso_chi2_qsonu """ +# extname = "qso_chi2_qsonu" +# qso_key = "chi2_qso/nu" + +#class qso_chi2_qso_nu_NULL_extractor(qso_generic): +# """ chi2_qso_nu_NULL """ +# extname = "qso_chi2_qso_nu_NULL" +# qso_key = "chi2_qso/nu_NULL" + +#class qso_signif_qso_extractor(qso_generic): +# """ qso_signif_qso """ +# extname = "qso_signif_qso" +# qso_key = "signif_qso" + +#class qso_signif_not_qso_extractor(qso_generic): +# """ qso_signif_not_qso """ +# extname = "qso_signif_not_qso" +# qso_key = "signif_not_qso" + +#class qso_signif_vary_extractor(qso_generic): +# """ qso_signif_vary """ +# extname = "qso_signif_vary" +# qso_key = "signif_vary" + +#class qso_chi2qso_nu_nuNULL_ratio_extractor(qso_generic): +# """ qso_chi2qso_nu_nuNULL_ratio """ +# extname = "qso_chi2qso_nu_nuNULL_ratio" +# qso_key = "chi2qso_nu_nuNULL_ratio" + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/ratioRUfirst_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/ratioRUfirst_extractor.py new file mode 100644 index 00000000..129245d0 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/ratioRUfirst_extractor.py @@ -0,0 +1,17 @@ +from __future__ import print_function +from ..FeatureExtractor import MultiFeatureExtractor + +class ratioRUfirst_extractor(MultiFeatureExtractor): + """ calculates the ratio of the first frequency in the V band to the U band """ + active = False + extname = 'ratioRUfirst' #extractor's name + band1 = 'r' + band2 = 'u' + compared_extr = 'first_freq' + def extract(self): + self.extr1 = self.extr1 # just a reminder + self.extr2 = self.extr2 # just a reminder + ratioRU = self.extr1 / self.extr2 + print("ratioRU", ratioRU) + print("band",self.band) + return ratioRU \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/s_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/s_extractor.py new file mode 100644 index 00000000..31978279 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/s_extractor.py @@ -0,0 +1,20 @@ +from ..FeatureExtractor import InterExtractor +from numpy import sqrt + +class s_extractor(InterExtractor): + """ extracts the values s as shown in http://www.xycoon.com/peakedness_small_sample_test_1.htm for example + This is used by small_kurtosis_extractor""" + active = True + extname = 's' #extractor's name + minpoints = 2 # minimum number of points for the extractor to run +# TODO the quantity in the link is just std_extractor rescaled by sqrt(n/(n-1)) +# however, this uses the weighted average for x_bar, so maybe we want both versions? +# but this is different from the "weighted standard deviation"... + def extract(self): + n = float(self.fetch_extr('n_points')) + average = self.fetch_extr('weighted_average') + xi_minus_average = self.flux_data - average + squared = xi_minus_average**2 + sum_of_squared = squared.sum() + s = sqrt((1/(n-1)) * sum_of_squared) + return s diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sc.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sc.py new file mode 100644 index 00000000..ff920594 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sc.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python + +""" +dumbass tool to run skycoor on random assortment of coordinate string formats +""" +from __future__ import print_function +import os,string +skycoor = "/scisoft/i386/bin/skycoor" + +def string_metrics(sss): + + if type(sss) != type("sss"): + return {'digits': None, 'separators': None, 'letters': None} + + n_digits = len([x for x in sss if x in string.digits]) + n_letters = len([x for x in sss if x in string.ascii_letters]) + n_digits = len([x for x in sss if x in ",'=&+-: hmsd" or x in '"']) + return {'digits': n_digits, 'separators': n_letters, 'letters': n_digits, 'len': len(sss)} + +def sexify(sss): + + met = string_metrics(sss) + if met['separators'] > 0: + ## figure out what the separator is + nsplit ={} + for s in ":hmsd": + nsplit.update({s: len(sss.split(s)) - 1}) + #print nsplit + + ## remove the letters + sss = "".join([s for s in sss if s in string.digits or s in ["."]]) + + hh = sss[0:2] + mm = sss[2:4] + ss = sss[4:] + val = ":".join([hh,mm,ss]) + if sss.find(".") not in [6,-1]: + val = sss + + return val + +def reckonpos(a): + + ra, dec = None, None + + if len(a) == 1: + ## try removing letters + #print a[0] + seps = "hmso'" + '""' + b = a[0] + print(b) + for s in seps: + ttt = b.index(s) + print(ttt) + if ttt != -1: + if string.digits.find(b[ttt - 1]) != -1 and string.digits.find(b[ttt - 2]) == -1: + b[ttt - 2] = "0" + a[0] = b + print(b + "***") + tmp = [a for a in a[0] if string.ascii_letters.find(a) == -1 and "=".find(a) == -1 and "'".find(a) == -1 \ + and '"'.find(a) == -1] + tmp = "".join(tmp) + sss = "".join(tmp) + sss = sss.strip() + sss.replace("="," ") + sss.replace(" "," ") + sss.replace("\t","") + sss.replace("\n","") + if sss.count(".") > 1: + ## too many periods, remove all those at the beginning and the end + sss = string.strip(sss,".") + + print(sss) + tmp = [x for x in sss.split(" ") if x != ""] + if len(tmp) == 6: + ra = ":".join(tmp[0:3]) + dec = ":".join(tmp[3:6]) + return (ra,dec) + + + + tmp = [x for x in sss.split(":") if x != ""] + if len(tmp) == 6: + ra = ":".join(tmp[0:3]) + dec = ":".join(tmp[3:6]) + return (ra,dec) + + # probably like: J000356.67+010007.3 + met = string_metrics(sss) + + ## try to break on + or - + notgood = False + tmp = sss.split("-") + decsign = "-" + if len(tmp) != 2: + tmp = sss.split("+") + decsign="+" + if len(tmp) != 2: + notgood = True + if not notgood: + ra = sexify(tmp[0]) + dec = decsign + sexify(tmp[1]) + else: + tmp = [x for x in sss.split(" ") if x != ""] + if len(tmp) == 2: + ra, dec = tmp[0], tmp[1] + return (ra,dec) + else: + return (None,None) + if len(a) == 6: + ## this is probably HH MM SS DD MM SS + pass + + return (ra,dec) + #print (ra, dec) + +def clean(sss): + + if sss.count(".") > 1: + ## too many periods, remove all those at the beginning and the end + sss = string.strip(sss,".") + + return sss +if __name__ == "__main__": + from optparse import OptionParser + usage = "usage: %prog [options] 'ra dec'\n" + parser = OptionParser(usage) + + (options, args) = parser.parse_args() + + if len(args) < 1: + parser.parse_args(['-h']) + + #print args + ra,dec = reckonpos(args) + + ra = clean(ra) + dec = clean(dec) + if ra.find(":") != -1: + os.system(skycoor + " -dv %s %s" % (ra,dec)) + else: + os.system(skycoor + " -v %s %s" % (ra,dec)) + + #os.system(skycoor + " -v %s %s" % (ra,dec)) + +## +""" +./sc.py "3 33 48.97 +0 42 33.6" +./sc.py "RA 09:43:26.22 Dec 25:10:21.9 " +./sc.py "ra=55.497287&dec=-0.782905" +/sc.py " ra=55.49728745, dec=-0.78290499" + +""" \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/scatter_res_raw_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/scatter_res_raw_extractor.py new file mode 100644 index 00000000..a66c6d14 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/scatter_res_raw_extractor.py @@ -0,0 +1,18 @@ +from ..FeatureExtractor import FeatureExtractor + +class scatter_res_raw_extractor(FeatureExtractor): + """ From arXiv 1101_2406v1 Dubath 20110112 paper. + + Scatter:res/raw: + Median Absolute Deviation (MAD) of the residuals + (obtained by subtracting model values from the raw light curve) + divided by the MAD of the raw light-curve values + around the median. + """ + active = True + extname = "scatter_res_raw" + def extract(self): + median_absolute_deviation = self.fetch_extr('median_absolute_deviation') + lomb_dict = self.fetch_extr('lomb_scargle') + mad_of_model_residuals = lomb_dict.get('mad_of_model_residuals',0.) + return mad_of_model_residuals / median_absolute_deviation diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss.py new file mode 100644 index 00000000..cf017f3d --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss.py @@ -0,0 +1,609 @@ +""" +sdss -- query tools +182.520649 ++18.534407 +""" +from __future__ import print_function + +import os, sys, string,urllib,copy +from math import log10, radians, pi +import time, traceback, datetime +import threading +import StringIO + +global limit_per_min, recent_query_list, do_limit +limit_per_min = 19.99 +recent_query_list = [] +do_limit = True + +dr7_mirrors = [{'url': "http://cas.sdss.org/astrodr7/en/tools/search/x_sql.asp", "second_per_query": 1.02, + "active": True, "last": None, "running": False}, + {'url': "http://skyserver.sdss.org/astro/en/tools/search/x_sql.asp", "second_per_query": 1.02, "active": True, "last": None, + "running": False}, + {'url': "http://www.sdss.org.uk/dr7/en/tools/search/x_sql.asp", "second_per_query": 1.02, "active": True, "last": None, + "running": False}] + +class sdssq: + #dr_url='http://skyserver.sdss.org/dr6/en/tools/search/x_sql.asp' + dr_url="http://cas.sdss.org/astrodr7/en/tools/search/x_sql.asp" + formats = ['csv','xml','html'] + def_fmt = "csv" + all_completed = False + completed = False + z_completed = False + completed_master = False + threads = [] + z_results = None + results = None + results_master = None + feature = None + in_footprint = False + + def _get_dr_url(self,old=False,max_wait=10.0): + ## get the next available dr7 mirror + if old: + return self.dr_url + + ## loop over the dr7 mirrors + now = time.time() + while time.time() - now < max_wait: + for dr7 in dr7_mirrors: + if not dr7['active'] or dr7['running'] == True: + continue + if dr7['last'] is None: + ## we haven't used this guy yet! + dr7['last'] = time.time() + dr7['running'] =True + return dr7['url'] + if time.time() - dr7['last'] > dr7['second_per_query']: + dr7['last'] = time.time() + dr7['running'] =True + return dr7['url'] + time.sleep(0.01) + + return None + + + def __init__(self,pos=(None,None),threaded=True,verbose=False,block=True,maxd=1,timeout=10.0, \ + run_on_instance=False,run_feature_maker=True,runfoot=False): + + """maxd in arcmin""" + self.runfoot = runfoot + self.threaded = threaded + self.verbose = verbose + self.pos = pos + self.maxd = maxd + self.timeout = timeout + self.block =block + + self.run_on_instance = run_on_instance + self.run_feature_maker = run_feature_maker + self.threaded = threaded + self.do_runs() + return + t = threading.Thread(target=self.do_runs, args=[]) + t.start() + t.join(120.0) # wait 120 seconds before giving up on SDSS queries (I've seen some take ~50 seconds) + if t.isAlive(): + print("! Thread has not returned!") + + def do_runs(self): + """ This is to be threaded so that a timeout in thread .join() can be used. + """ + if self.runfoot: + ss = self.run_footprint_check() + if self.verbose: + print("Position in footprint: %s" % repr(ss)) + + if self.run_on_instance: + if not self.threaded: + self.run_all() + else: + self.run_all_threaded() + if self.verbose: + print(self.__str__()) + + if self.run_feature_maker: + self.feature_maker() + + + def run_all(self): + self._get_z_objs() + self._get_objs(force_galaxy=True,include_photo_z=True) + self._get_objs(force_galaxy=False,include_photo_z=False) + if self.completed and self.z_completed and self.completed_master: + self.all_completed = True + + def run_footprint_check(self,old=False): + sss = """SELECT count(*) as total from dbo.fFootprintEq(%f,%f,%f)""" % (self.pos[0],self.pos[1],0.2) + if old: + fff = self._query(sss) + else: + fff = self._new_query(sss) + + line = fff.readline() + if line.startswith("ERROR") or line.find("HTTP Error 404") != -1: + if self.verbose: + print(line) + print(fff.readlines()) + return False + ## get the keys + #kkk = line.split(",") + ## now go line by line + line = fff.readline() + vvv = line.strip().split(",") + if vvv[0] == "0" or vvv[0].find("The page cannot be found") != -1: + self.in_footprint = False + else: + self.in_footprint = True + return self.in_footprint + + def run_all_threaded(self): + + import threading + self.threads.append(threading.Thread(target=self._get_objs,name="master",kwargs={'force_galaxy': False,'include_photo_z': False})) + self.threads[-1].start() + self.threads.append(threading.Thread(target=self._get_objs,name="near",kwargs={'force_galaxy': True,'include_photo_z': True})) + self.threads[-1].start() + self.threads.append(threading.Thread(target=self._get_z_objs,name="z")) + self.threads[-1].start() + + if self.block: + for t in self.threads: + #print "joining %s" % repr(t) + t.join(self.timeout) + + if self.completed and self.z_completed and self.completed_master: + self.all_completed = True + + def feature_maker(self,force=False,old=False,verbose=False): + """http://www.sdss.org/dr6/algorithms/redshift_type.html#eclass""" + if not self.in_footprint: + self.feature = {"in_footprint": False} + if not force: + return + else: + self.feature = {"in_footprint": True} + + sss = """SELECT TOP 3 p.objid, case + WHEN S.bestObjID is NOT NULL then dbo.fSpecClassN(S.specClass) + WHEN p.probPSF = 0 THEN "galaxy" + WHEN p.probPSF = 1 THEN "star" + ELSE "unknown" + end as type, p.ra, p.dec,p.dered_u, p.dered_g, p.dered_r, p.dered_i, p.dered_z, p.err_u, p.err_g, p.err_r, p.err_i, p.err_z, + n.distance as dist_in_arcmin, R.spz as chicago_z, R.eclass as chicago_class, R.spz_status as chicago_status, + T.z as photo_z, T.zerr as photo_zerr, T.pzType as photo_z_pztype, + T.rest_ug as photo_rest_ug,T.rest_gr as photo_rest_gr,T.rest_ri as photo_rest_ri, + T.rest_iz as photo_rest_iz,T.absMag_g as photo_rest_abs_g,T.absMag_u as photo_rest_abs_u, + T.absMag_r as photo_rest_abs_r,T.absMag_i as photo_rest_abs_i,T.absMag_z as photo_rest_abs_z, + Q.photozcc2 as photo2_z_cc,Q.photozerrcc2 as photo2_zerr_cc,Q.photozd1 as photo2_z_d1, + Q.photozerrd1 as photo2_zerr_d1,Q.flag as photo2_flag,S.z as spec_z, S.velDisp as spec_veldisp, dbo.fSpecZWarningN(S.zWarning) as spec_zWarning, + dbo.fSpecZStatusN(S.zStatus) as spec_zStatus, S.zConf as spec_confidence, S.zErr as spec_zerr, case + WHEN S.bestObjID is NOT NULL AND S.zConf > 0.5 THEN S.z + WHEN Q.objID IS NOT NULL AND p.r > 20 then Q.photozcc2 + WHEN Q.objID IS NOT NULL AND p.r < 20 then Q.photozd1 + WHEN T.objID is NOT NULL AND T.z != -9999 THEN T.z + ELSE NULL + end as bestz, case + WHEN S.bestObjID is NOT NULL AND S.zConf > 0.5 THEN S.zErr + WHEN Q.objID IS NOT NULL AND p.r > 20 then Q.photozerrcc2 + WHEN Q.objID IS NOT NULL AND p.r < 20 then Q.photozerrd1 + WHEN T.objID is NOT NULL AND T.z != -9999 THEN T.zerr + ELSE NULL + end as bestz_err, + dbo.fCosmoDl(case + WHEN S.bestObjID is NOT NULL AND S.zConf > 0.5 AND S.z < 0.0001 THEN 0.00001 + WHEN S.bestObjID is NOT NULL AND S.zConf > 0.5 AND S.z > 0.0001 THEN S.z + WHEN Q.objID IS NOT NULL AND p.r > 20 then Q.photozcc2 + WHEN Q.objID IS NOT NULL AND p.r < 20 then Q.photozd1 + WHEN T.objID is NOT NULL AND T.z != -9999 THEN T.z + ELSE 1500 + end) as best_dl,case + WHEN p.petroRad_g > 0.0 THEN p.petroRad_g + ELSE NULL + end as petroRad_g, case + WHEN p.petroRad_g > 0.0 THEN p.petroRadErr_g + ELSE NULL + end as petroRadErr_g, case + WHEN p.petroRad_g > 0.0 THEN n.distance * 60.0 / p.petroRad_g + ELSE NULL + end as best_offset_in_petro_g, f.delta as first_offset_in_arcsec, f.integr as first_flux_in_mJy, + X.delta as rosat_offset_in_arcsec, X.hard1 as rosat_hardness_1,X.hard2 as rosat_hardness_2, X.cps as rosat_cps, X.posErr as rosat_poserr, case + WHEN X.objID is NOT NULL THEN X.delta / X.posErr + end as rosat_offset_in_sigma, X.cps * 6.9 as rosat_flux_in_microJy, R.seguetargetclass as classtype, + R.sptypea as spectral_stellar_type, R.hammersptype as spectral_hammer_type, R.flag as spectral_flag, R.zbclass as segue_class, R.zbsubclass as segue_star_type + FROM PhotoPrimary p + JOIN dbo.fGetNearbyObjEq(%f,%f,%f) as n ON p.objID = n.objID + LEFT JOIN photoz as T ON p.objID=T.objID + LEFT JOIN photoz2 as Q ON p.objID=Q.objID + LEFT JOIN SpecObjAll as S ON p.objId=S.bestObjId + LEFT JOIN sppParams as R ON S.specObjID=R.specObjID + LEFT JOIN First as f ON p.objID=f.objID + LEFT JOIN Rosat as X on p.objID=X.objID + ORDER by n.distance + """ % (self.pos[0],self.pos[1],self.maxd) + ## as per Dovi's suggestion, get the nearest guy, no questions asked. + #print sss + #"""""" + if old: + fff = self._query(sss) + else: + fff = self._new_query(sss,verbose=verbose) + + line = fff.readline() + if line.startswith("ERROR") or line.startswith("No objects"): + if self.verbose: + print(line) + print(fff.readlines()) + return self.feature + ## get the keys + kkk = line.split(",") + ## now go line by line + line = fff.readline() + rez = [] + try: + if not self.in_footprint: + self.in_footprint = True + self.feature = {"in_footprint": True} + while line: + tmp = {} + vvv = line.strip().split(",") + for k,v in dict(zip(kkk,vvv)).items(): + #print "***" + k + "****" + str(v) + "****" + if v == "0" or v == "null": + v = None + if k.strip() in ['objid',"photo2_flag"]: + if v != None: + v1 = long(v) + else: + v1 = None + elif k.strip() in ['type','spec_zStatus','spec_zWarning',"spectral_flag","spectral_hammer_type",\ + "spectral_stellar_type","spectral_flag","classtype","segue_class","segue_star_type"]: + v1 = v + if v1 != None: + v1 = v1.lower() + if v1 == 'null': + v1 = None + else: + if v != None: + if v != "-9999": + try: + v1 = float(v) + except: + print(traceback.print_exc()) + if v.startswith("ERR"): + time.sleep(60.0) + v1 = None + else: + v1 = None + #v1 = float(v) if v != "-9999" else None + else: + v1 = None + tmp.update({k.strip(): v1}) + tmp.update({"url": "http://cas.sdss.org/astrodr7/en/tools/explore/obj.asp?id=%i" % tmp['objid']}) + tmp.update({"urlalt": "http://cas.sdss.org/astrodr7/en/tools/chart/chart.asp?ra=%f&dec=%f" % (tmp['ra'],tmp['dec'])}) + if 'best_dl' in tmp: + if tmp['best_dl'] > 1e6: + ## kludge here + tmp.update({"best_dl": None}) + if tmp['best_dl'] != None: + tmp.update({"best_dm": 5.0*log10(tmp['best_dl']*1e5)}) + if 'bestz' in tmp and 'dist_in_arcmin' in tmp: + angdist =tmp['best_dl']/(1.0 + tmp['bestz'])**2 + tmp.update({"best_offset_in_kpc": 1e3*angdist*radians(tmp['dist_in_arcmin']/60.0)}) + if "rosat_flux_in_microJy" in tmp and "best_dl" in tmp and "best_z" in tmp: + if tmp["rosat_flux_in_microJy"] > 0.0 and tmp["best_dl"] and tmp["best_z"]: + l = ((3.085e24)**2)*4.0*pi*tmp["best_dl"]*tmp["best_dl"]*(1.0 + tmp["best_z"])*1e-29 + tmp.update({"rosat_log_xray_luminosity": log10(l)}) + else: + tmp.update({"rosat_log_xray_luminosity": None}) + rez.append(copy.copy(tmp)) + line = fff.readline() + except: + print(traceback.format_exc()) + print(line) + # 20090211: dstarr adds try/except: + try: + if len(rez) == 0: + self.feature.update(copy.copy(rez[0])) + elif len(rez) > 1: + ## make sure there isn't a more nearby galaxy + if rez[0]['type'] != 'galaxy' and rez[0]['best_offset_in_petro_g'] > 2.0: + ## we're sort of far from the closest star. Just check to make sure there isn't a galaxy closer in petro + usei = 0 + bestp = 100.0 + for i,r in enumerate(rez[1:]): + if r['type'] == 'galaxy' and r['best_offset_in_petro_g'] < bestp: + bestp = r['best_offset_in_petro_g'] + usei = i+1 + if bestp < 3.0: + self.feature.update(copy.copy(rez[usei])) + self.feature.update({"note": "nearer star not used. Instead nearby galaxy"}) + + else: + self.feature.update(copy.copy(rez[0])) + else: + self.feature.update(copy.copy(rez[0])) + except: + print("EXCEPT: sdss.py...self.feature.update(rez[0])") + return self.feature + return + + def nearest(self): + ret = None + if self.completed and self.results: + if len(self.results) > 0: + ret = copy.copy(self.results[0]) + return ret + + def nearest_all(self): + ret = None + if self.completed_master and self.results_master: + if len(self.results_master) > 0: + ret = copy.copy(self.results_master[0]) + return ret + + def nearest_with_z(self): + ret = None + if self.z_completed and self.z_results: + if len(self.z_results) > 0: + ret = copy.copy(self.z_results[0]) + return ret + + def __str__(self): + printone = False + a = "" + if self.z_completed: + a += "*** redshift search results within %6.1f arcmin of pos = %s *** \n" % (self.maxd, self.pos) + if self.z_results: + kkk = self.z_results[0].keys() + a += " ".join(kkk) + "\n" + if printone: + nn = 1 + else: + nn = len(self.z_results[0]) + for i in range(nn): + a += " ".join([str(x) for x in self.z_results[i].values()]) + "\n" + else: + a += " nothing found \n" + else: + a += "*** [redshift search not completed] \n" + + if self.completed: + a += "*** galaxy search results within %6.1f arcmin of pos = %s *** \n" % (self.maxd, self.pos) + if self.results: + kkk = self.results[0].keys() + a += " ".join(kkk) + "\n" + if printone: + nn = 1 + else: + nn= len(self.results[0]) + for i in range(nn): + a += " ".join([str(x) for x in self.results[i].values()]) + "\n" + else: + a += " nothing found \n" + else: + a += "*** [galaxy search not completed] \n" + + if self.completed_master: + a += "*** galaxy/star search results within %6.1f arcmin of pos = %s *** \n" % (self.maxd, self.pos) + if self.results_master: + kkk = self.results_master[0].keys() + a += " ".join(kkk) + "\n" + if printone: + nn = 1 + else: + nn = len(self.results_master[0]) + for i in range(nn): + a += " ".join([str(x) for x in self.results_master[i].values()]) + "\n" + else: + a += " nothing found \n" + else: + a += "*** [galaxy search not completed] \n" + + return a + + def _get_z_objs(self,force_galaxy=True,old=False): + if force_galaxy: + the_table = "Galaxy" + else: + the_table = "PhotoPrimary" + sss = """SELECT p.objid, p.ra, p.dec,p.dered_u, p.dered_g, p.dered_r, p.dered_i, p.dered_z, n.distance, S.z, S.velDisp, dbo.fSpecZStatusN(S.zStatus) as zStatus, S.zConf + FROM %s p + JOIN SpecObjAll as S ON p.objId=S.bestObjId + JOIN dbo.fGetNearbyObjEq(%f, %f,%f) as n ON p.objID = n.objID + WHERE + S.zStatus != dbo.fSpecZStatus('FAILED') + ORDER BY n.distance""" % (the_table,self.pos[0],self.pos[1],self.maxd) + + if old: + fff = self._query(sss) + else: + fff = self._new_query(sss) + line = fff.readline() + if line.startswith("ERROR") or line.startswith("No objects"): + self.z_completed = True + if self.verbose: + print(line) + print(fff.readlines()) + return + ## get the keys + kkk = line.split(",") + ## now go line by line + line = fff.readline() + rez = [] + while line: + tmp = {} + vvv = line.strip().split(",") + for k,v in dict(zip(kkk,vvv)).items(): + if k == 'objid': + v1 = long(v) + elif k == 'zStatus': + v1 = v + else: + if v != "-9999": + v1 = float(v) + else: + v1 = None + + tmp.update({k.strip(): v1}) + rez.append(copy.copy(tmp)) + line = fff.readline() + self.z_results = copy.copy(rez[0]) + self.z_completed = True + return + + def _get_objs(self,force_galaxy=True,include_photo_z=True,old=False): + if force_galaxy: + the_table = "Galaxy" + else: + the_table = "PhotoPrimary" + + if include_photo_z: + extra_col = ",T.z, T.zerr,T.dmod,T.rest_ug,T.rest_gr,T.rest_ri,T.rest_iz,T.absMag_g" + extra_join = "JOIN photoz as T ON p.objID=T.objID " + else: + extra_col = " " + extra_join = " " + + if include_photo_z or force_galaxy: + complete_flag = "self.completed" + results = "self.results" + else: + complete_flag = "self.completed_master" + results = "self.results_master" + + + sss = """SELECT p.objid, p.ra, p.dec,p.dered_u, p.dered_g, p.dered_r, p.dered_i, p.dered_z, n.distance %s + FROM %s p + JOIN dbo.fGetNearbyObjEq(%f, %f,%f) as n ON p.objID = n.objID + %s + ORDER BY n.distance""" % (extra_col,the_table,self.pos[0],self.pos[1],self.maxd,extra_join) + + #print sss, complete_flag, results + if old: + fff = self._query(sss) + else: + fff = self._new_query(sss) + + #print fff.readlines() + line = fff.readline() + #if line.startswith("ERROR") or line.startswith("No objects"): + # dstarr 20090127 adds len() condition: + if line.startswith("ERROR") or \ + line.startswith("No objects") or \ + (len(line) == 0): + exec(complete_flag + " = True") + if self.verbose: + print(line) + print(fff.readlines()) + return + ## get the keys + kkk = line.split(",") + ## now go line by line + line = fff.readline() + rez = [] + while line: + tmp = {} + vvv = line.strip().split(",") + for k,v in dict(zip(kkk,vvv)).items(): + if k == 'objid': + v1 = long(v) + elif k == 'zStatus': + v1 = v + else: + v1 = float(v) + tmp.update({k.strip(): v1}) + rez.append(copy.copy(tmp)) + line = fff.readline() + exec(results + " = copy.copy(rez)") + exec(complete_flag + " = True") + #print complete_flag, self.completed, self.completed_master + return + + def _filtercomment(self,sql): + "Get rid of comments starting with --" + fsql = '' + for line in sql.split('\n'): + fsql += line.split('--')[0] + ' ' + os.linesep; + return fsql + + def _new_query(self,sql,fmt=def_fmt,wait_period=62,verbose=True): + #print dr7_mirrors + url = self._get_dr_url(old=False) + if verbose: + print(url) + #print dr7_mirrors + if url is None: + return StringIO.StringIO() # This is an empty filehandler + + fsql = self._filtercomment(sql) + params = urllib.urlencode({'cmd': fsql, 'format': fmt}) + try: + ttt = urllib.urlopen(url+'?%s' % params) + for d in dr7_mirrors: + if d['url'] == url: + d['running'] = False + break + #print dr7_mirrors + return ttt + except: + print("TRIED: " + url+'?%s' % params) + print("EXCEPT: sdss.py._query()") + for d in dr7_mirrors: + if d['url'] == url: + d['running'] = False + d['active'] = False + break + return StringIO.StringIO() # This is an empty filehandler + + + def _query(self,sql,url=dr_url,fmt=def_fmt,wait_period=62): + "Run query and return file object" + global limit_per_min, recent_query_list, do_limit + if do_limit: + recent_query_list.append((time.time(),sql)) + ## cull out all the old calls + recent_query_list = [x for x in recent_query_list if time.time() - x[0] < wait_period] + if len(recent_query_list) > limit_per_min: + ## ug, we've got to wait + tmp = [time.time() - x[0] for x in recent_query_list if time.time() - x[0] < wait_period] + wait = wait_period - max(tmp) + 1 + if self.verbose: + print("Date: %s Query length is %i in the last %f sec" % (str(datetime.datetime.now()),len(recent_query_list) - 1 , wait_period)) + print("waiting %f sec, so as not to block the SDSS query %s" % (wait,sql)) + time.sleep(wait) + + fsql = self._filtercomment(sql) + params = urllib.urlencode({'cmd': fsql, 'format': fmt}) + try: + return urllib.urlopen(url+'?%s' % params) + except: + print("TRIED: " + url+'?%s' % params) + print("EXCEPT: sdss.py._query()") + return StringIO.StringIO() # This is an empty filehandler + +def test(verbose=True): + + dr7_mirrors[0]["second_per_query"] = 10 + dr7_mirrors[1]["second_per_query"] = 7 + + s = sdssq(pos=(36.522917 ,-0.540500),verbose=verbose) + #s = sdssq(pos=(38.522917 ,1.540500),verbose=verbose) + #s = sdssq(pos=(40.522917 ,2.540500),verbose=verbose) + #s = sdssq(pos=(42.522917 ,3.540500),verbose=verbose) + #s = sdssq(pos=(170.76476675499998,-8.5050723541500002), verbose=verbose) + + #print s.nearest() + #print s.nearest_with_z() + s.feature_maker(force=True,verbose=True) + import pprint + pprint.pprint(s.feature) + import webbrowser + try: + webbrowser.open_new_tab(s.feature["urlalt"]) + except: + pass + +if __name__ == "__main__": + test(verbose=False) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_dm.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_dm.py new file mode 100644 index 00000000..9bdabf66 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_dm.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_best_dm(ContextFeatureExtractor): + """If a redshift is known, what is the distance modulus?""" + active = True + extname = 'sdss_best_dm' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "best_dm" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["best_dm"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_offset_in_kpc.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_offset_in_kpc.py new file mode 100644 index 00000000..28d24069 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_offset_in_kpc.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_best_offset_in_kpc(ContextFeatureExtractor): + """If a redshift is known, what is the offset in kpc?""" + active = True + extname = 'sdss_best_offset_in_kpc' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "best_offset_in_kpc" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["best_offset_in_kpc"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_offset_in_petro_g.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_offset_in_petro_g.py new file mode 100644 index 00000000..b58ab7ed --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_offset_in_petro_g.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_best_offset_in_petro_g(ContextFeatureExtractor): + """What is the offset in Petrosian radii (gband)?""" + active = True + extname = 'sdss_best_offset_in_petro_g' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "best_offset_in_petro_g" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["best_offset_in_petro_g"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_z.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_z.py new file mode 100644 index 00000000..6271c42e --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_z.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_best_z(ContextFeatureExtractor): + """If a redshift is known, what is it?""" + active = True + extname = 'sdss_best_z' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "bestz" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["bestz"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_zerr.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_zerr.py new file mode 100644 index 00000000..4305ce12 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_best_zerr.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_best_zerr(ContextFeatureExtractor): + """If a redshift is known, what is it's error?""" + active = True + extname = 'sdss_best_zerr' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "bestz_err" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["bestz_err"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_chicago_class.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_chicago_class.py new file mode 100644 index 00000000..972e68d8 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_chicago_class.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_chicago_class(ContextFeatureExtractor): + """What is the PCA parameter for the galaxy type? from sppParams""" + active = True + extname = 'sdss_chicago_class' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "chicago_class" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["chicago_class"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_g.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_g.py new file mode 100644 index 00000000..360d7e7e --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_g.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_dered_g(ContextFeatureExtractor): + """What is the dereddened g magnitude?""" + active = True + extname = 'sdss_dered_g' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "dered_g" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["dered_g"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_i.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_i.py new file mode 100644 index 00000000..349e76fb --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_i.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_dered_i(ContextFeatureExtractor): + """What is the dereddened g magnitude?""" + active = True + extname = 'sdss_dered_i' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "dered_i" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["dered_i"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_r.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_r.py new file mode 100644 index 00000000..8d7998e6 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_r.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_dered_r(ContextFeatureExtractor): + """What is the dereddened r magnitude?""" + active = True + extname = 'sdss_dered_r' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "dered_r" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["dered_r"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_u.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_u.py new file mode 100644 index 00000000..70c9869b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_u.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_dered_u(ContextFeatureExtractor): + """What is the dereddened u magnitude?""" + active = True + extname = 'sdss_dered_u' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "dered_u" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["dered_u"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_z.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_z.py new file mode 100644 index 00000000..0aedf663 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dered_z.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_dered_z(ContextFeatureExtractor): + """What is the dereddened z magnitude?""" + active = True + extname = 'sdss_dered_z' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "dered_z" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["dered_z"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dist_arcmin.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dist_arcmin.py new file mode 100644 index 00000000..7cb96393 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_dist_arcmin.py @@ -0,0 +1,40 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_dist_arcmin(ContextFeatureExtractor): + """distance to sdss source""" + active = True + extname = 'sdss_dist_arcmin' #extractor's name + + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["dist_in_arcmin"] + if self.verbose: + print(n) + return rez diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_first_flux_in_mjy.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_first_flux_in_mjy.py new file mode 100644 index 00000000..4825f978 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_first_flux_in_mjy.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_first_flux_in_mjy(ContextFeatureExtractor): + """What is the flux of the first source?""" + active = True + extname = 'sdss_first_flux_in_mjy' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "first_flux_in_mJy" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["first_flux_in_mJy"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_first_offset_in_arcsec.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_first_offset_in_arcsec.py new file mode 100644 index 00000000..641a6d93 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_first_offset_in_arcsec.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_first_offset_in_arcsec(ContextFeatureExtractor): + """What is the offset of the first source?""" + active = True + extname = 'sdss_first_offset_in_arcsec' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "first_offset_in_arcsec" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["first_offset_in_arcsec"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_in_footprint.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_in_footprint.py new file mode 100644 index 00000000..c82f33a8 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_in_footprint.py @@ -0,0 +1,29 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_in_footprint(ContextFeatureExtractor): + """Is the source in the sdss footprint""" + active = True + extname = 'sdss_in_footprint' #extractor's name + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return 0 + else: + return 1 + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_nearest_obj_type.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_nearest_obj_type.py new file mode 100644 index 00000000..33cdecd8 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_nearest_obj_type.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_nearest_obj_type(ContextFeatureExtractor): + """What is classification of the nearest object?""" + active = True + extname = 'sdss_nearest_obj_type' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "type" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["type"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_petro_radius_g.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_petro_radius_g.py new file mode 100644 index 00000000..598b96e2 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_petro_radius_g.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_petro_radius_g(ContextFeatureExtractor): + """What is the Petrosian radius in arcsec?""" + active = True + extname = 'sdss_petro_radius_g' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "petroRad_g" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["petroRad_g"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_petro_radius_g_err.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_petro_radius_g_err.py new file mode 100644 index 00000000..9428d531 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_petro_radius_g_err.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_petro_radius_g_err(ContextFeatureExtractor): + """What is the Petrosian radius error in arcsec?""" + active = True + extname = 'sdss_petro_radius_g_err' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "petroRad_g_err" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["petroRad_g_err"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_g.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_g.py new file mode 100644 index 00000000..23e329c7 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_g.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_abs_g(ContextFeatureExtractor): + """What is the sdss_photo_rest_abs_g?""" + active = True + extname = 'sdss_photo_rest_abs_g' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_abs_g" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_abs_g"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_i.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_i.py new file mode 100644 index 00000000..6cb23819 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_i.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_abs_i(ContextFeatureExtractor): + """What is the sdss_photo_rest_abs_i?""" + active = True + extname = 'sdss_photo_rest_abs_i' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_abs_i" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_abs_i"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_r.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_r.py new file mode 100644 index 00000000..ec114333 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_r.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_abs_r(ContextFeatureExtractor): + """What is the sdss_photo_rest_abs_r?""" + active = True + extname = 'sdss_photo_rest_abs_r' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_abs_r" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_abs_r"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_u.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_u.py new file mode 100644 index 00000000..b83ceb32 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_u.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_abs_u(ContextFeatureExtractor): + """What is the sdss_photo_rest_abs_u?""" + active = True + extname = 'sdss_photo_rest_abs_u' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_abs_u" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_abs_u"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_z.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_z.py new file mode 100644 index 00000000..359a0291 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_abs_z.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_abs_z(ContextFeatureExtractor): + """What is the sdss_photo_rest_abs_z?""" + active = True + extname = 'sdss_photo_rest_abs_z' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_abs_z" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_abs_z"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_gr.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_gr.py new file mode 100644 index 00000000..9b397d84 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_gr.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_gr(ContextFeatureExtractor): + """What is the restframe g - r color?""" + active = True + extname = 'sdss_photo_rest_gr' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_gr" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_gr"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_iz.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_iz.py new file mode 100644 index 00000000..e7ccc588 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_iz.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_iz(ContextFeatureExtractor): + """What is the restframe i - z color?""" + active = True + extname = 'sdss_photo_rest_iz' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_iz" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_iz"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_ri.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_ri.py new file mode 100644 index 00000000..740322bb --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_ri.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_ri(ContextFeatureExtractor): + """What is the restframe r - i color?""" + active = True + extname = 'sdss_photo_rest_ri' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_ri" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_ri"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_ug.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_ug.py new file mode 100644 index 00000000..649874eb --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_rest_ug.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_rest_ug(ContextFeatureExtractor): + """What is the restframe u - g color?""" + active = True + extname = 'sdss_photo_rest_ug' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_rest_ug" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_rest_ug"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_z_pztype.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_z_pztype.py new file mode 100644 index 00000000..d4f3bb86 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_photo_z_pztype.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_photo_z_pztype(ContextFeatureExtractor): + """From the photoz pipeline, what is the galaxy type (0 - 1)? See photoz for more details""" + active = True + extname = 'sdss_photo_z_pztype' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "photo_z_pztype" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["photo_z_pztype"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_flux_in_mJy.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_flux_in_mJy.py new file mode 100644 index 00000000..95426144 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_flux_in_mJy.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_rosat_flux_in_mJy(ContextFeatureExtractor): + """What is the flux of the rosat source?""" + active = True + extname = 'sdss_rosat_flux_in_mJy' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "rosat_flux_in_mJy" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["rosat_flux_in_mJy"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_log_xray_luminosity.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_log_xray_luminosity.py new file mode 100644 index 00000000..cdda18f2 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_log_xray_luminosity.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_rosat_log_xray_luminosity(ContextFeatureExtractor): + """What is the luminosity of the rosat source?""" + active = True + extname = 'sdss_rosat_log_xray_luminosity' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "rosat_log_xray_luminosity" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["rosat_log_xray_luminosity"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_offset_in_arcsec.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_offset_in_arcsec.py new file mode 100644 index 00000000..0d886283 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_offset_in_arcsec.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_rosat_offset_in_arcsec(ContextFeatureExtractor): + """What is the offset of the rosat source?""" + active = True + extname = 'sdss_rosat_offset_in_arcsec' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "rosat_offset_in_arcsec" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["rosat_offset_in_arcsec"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_offset_in_sigma.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_offset_in_sigma.py new file mode 100644 index 00000000..ca79ac81 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_rosat_offset_in_sigma.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_rosat_offset_in_sigma(ContextFeatureExtractor): + """What is the offset of the rosat source?""" + active = True + extname = 'sdss_rosat_offset_in_sigma' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "rosat_offset_in_sigma" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["rosat_offset_in_sigma"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_spec_confidence.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_spec_confidence.py new file mode 100644 index 00000000..3f5ed05b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sdss_spec_confidence.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from ..FeatureExtractor import ContextFeatureExtractor + +class sdss_spec_confidence(ContextFeatureExtractor): + """If there is a spectrum, what is the confidence in the redshift derived from it?""" + active = True + extname = 'sdss_spec_confidence' #extractor's name + light_cutoff = 0.2 ## dont report anything farther away than this in arcmin + + verbose = False + def extract(self): + n = self.fetch_extr('intersdss') + + if n is None: + if self.verbose: + print("Nothing in the sdss extractor") + return None + + if "in_footprint" not in n: + if self.verbose: + print("No footprint info in the sdss extractor. Should never happen.") + return None + + if not n['in_footprint']: + if self.verbose: + print("Not in the footprint") + return None + + if "spec_confidence" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if "dist_in_arcmin" not in n: + if self.verbose: + print("Desired parameter was not determined") + return None + + if n["dist_in_arcmin"] > self.light_cutoff: + return None + else: + rez = n["spec_confidence"] + if self.verbose: + print(n) + return rez \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/second_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/second_extractor.py new file mode 100644 index 00000000..05160188 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/second_extractor.py @@ -0,0 +1,74 @@ +from __future__ import absolute_import + +from ..FeatureExtractor import FeatureExtractor +import numpy +from numpy import random +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass +from .common_functions import * + +#from power_extractor import power_extractor as power_extractor # could also use one of the x% significant extractors +from scipy import stats +from .common_functions.plot_methods import plot_vertical_line + + +class second_extractor(plot_vertical_line,FeatureExtractor): + """ extracts the second highest peak from a power spectrum""" + active = True + extname = 'second' #extractor's name + gauss_scale = 0.005 + def set_inputs(self): + #self.frequencies = self.fetch_extr('power_spectrum')[0] + #self.frequencies = self.frequencies[:len(self.frequencies)+1] + result = self.fetch_extr('significant_90_power') + (power, freq) = result + self.power = power + self.frequencies = freq + self.previous = self.fetch_extr('first_freq') + def extract(self): + # 20071215 dstarr adds try/except: + try: + self.set_inputs() + except: + why = "Except: {second,third}_extractor.set_inputs(). Probably Failure of self.fetch_extr(...) for second_extractor,first_freq_extractor, or power_extractor." + self.ex_error(text=why) + + gaussian = self.make_gaussian() + self.subtracted_gauss = self.power - gaussian + max_index = self.subtracted_gauss[1:].argmax() + 1 + max_freq = self.frequencies[max_index] + if self.subtracted_gauss[max_index] < 0.1: + why = "No %s frequency, power spectrum is zero/low at all points" % self.extname + self.ex_error(text=why) + #if self.extname == 'second lomb': + # plot(self.frequencies,subtracted_gauss,label="subtracted gaussian") + # plot(self.frequencies,gaussian,label="gaussian") + return max_freq + def make_gaussian(self): + gaussian = stats.norm.pdf(self.frequencies,loc=self.previous,scale = self.gauss_scale) +# plot(self.frequencies,gaussian,label = "early gaussian") + index = self.frequencies.searchsorted(self.previous) + ratio = self.power[index]/gaussian[index] + gaussian *= ratio + return gaussian + def specific_obj(self,output): + output.subtracted_gauss = self.subtracted_gauss + +class third_extractor(second_extractor): + """ extracts the third highest peak from a power spectrum""" + active = True + extname = 'third' #extractor's name + def set_inputs(self): + #self.power = self.fetch_extr('second').subtracted_gauss # result object has data about the subtracted gaussian + # 20071215 dstarr changes to this: + result = self.fetch_extr('second') + + self.power = result.subtracted_gauss + self.frequencies = result.frequencies + + # 20071215 dstarr notes this can probably be done instead: + ##### self.previous = result + self.previous = self.fetch_extr('second') diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/second_lomb_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/second_lomb_extractor.py new file mode 100644 index 00000000..01aaa326 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/second_lomb_extractor.py @@ -0,0 +1,27 @@ +from __future__ import absolute_import + +from ..FeatureExtractor import FeatureExtractor +import numpy +from numpy import random +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass +from .common_functions import * + +from .second_extractor import second_extractor +from .lomb_extractor import lomb_extractor +from .first_lomb_extractor import first_lomb_extractor +#from common_functions.plot_methods import plot_vertical_line + +class second_lomb_extractor(second_extractor): + """ Extracts the second frequency from a lomb power spectrum""" + active = False + extname = 'second_lomb' #extractor's name + gauss_scale = 0.002 + def set_inputs(self): + #self.frequencies = self.fetch_extr('lomb')[0] + (power,freq) = self.fetch_extr('lomb') + self.power = power + self.first = self.fetch_extr('first_lomb') diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/significant_power_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/significant_power_extractor.py new file mode 100644 index 00000000..66aea42f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/significant_power_extractor.py @@ -0,0 +1,41 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +from .common_functions.plot_methods import plot_vs_frequencies +from numpy import select + +class significant_80_power_extractor(plot_vs_frequencies,InterExtractor): + """ removes noise power from the periodogram """ + active = True + percent_significance = 80 + extname = 'significant_80_power' + def noise_p(self): #noise power + pct_montecarlo_extractor = 'pct_80_montecarlo' + return pct_montecarlo_extractor + def extract(self): + power = self.fetch_extr('power') + noise = self.fetch_extr(self.noise_p()) + subtract = power - noise + #>>> from numpy import * + #>>> x = array([5., -2., 1., 0., 4., -1., 3., 10.]) + #>>> select([x < 0, x == 0, x <= 5], [x-0.1, 0.0, x+0.2], default = 100.) + #array([ 5.2, -2.1, 1.2, 0. , 4.2, -1.1, 3.2, 100. ]) + result = select([subtract < 0],[0],default = subtract) + return result +class significant_90_power_extractor(significant_80_power_extractor): + percent_significance = 90 + extname = 'significant_90_power' + def noise_p(self): + pct_montecarlo_extractor = 'pct_90_montecarlo' + return pct_montecarlo_extractor +class significant_95_power_extractor(significant_80_power_extractor): + percent_significance = 95 + extname = 'significant_95_power' + def noise_p(self): + pct_montecarlo_extractor = 'pct_95_montecarlo' + return pct_montecarlo_extractor +class significant_99_power_extractor(significant_80_power_extractor): + percent_significance = 99 + extname = 'significant_99_power' + def noise_p(self): + pct_montecarlo_extractor = 'pct_99_montecarlo' + return pct_montecarlo_extractor diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sine_fit_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sine_fit_extractor.py new file mode 100644 index 00000000..f0d5575d --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sine_fit_extractor.py @@ -0,0 +1,43 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +import numpy +from numpy import random +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass +from .common_functions import ChiSquare + +# TODO remove? +class sine_fit_extractor(InterExtractor,ChiSquare): + active = True + extname = 'sine_fit' #extractor's name + def extract(self): + a = self.fetch_extr('old_dc') + try: + b = self.properties['amplitude'] #amplitude + except: + b = 1 + c = 2*numpy.pi * self.fetch_extr('first_freq') # related to amplitude + d = 0 # x shift + init = numpy.array([a,b,c,d]) + sine = optimize.fmin_l_bfgs_b( self.sine_fit,init,args= (self.time_data, self.flux_data, self.rms_data), approx_grad=1, bounds=[(-10,10),(10,20), (c-1/1000,c+1/1000),(0,0)]) + abcd = sine[0] + return(abcd) + def sine_fit(self,abcd,x,y,rms): + fx = self.sine_wave(abcd,x) + chi2 = numpy.power(y - fx,2)/numpy.power(rms,2) + chi2_sum = chi2.sum() + return chi2_sum + def sine_wave(self,abcd,x): + sine = abcd[0] + abcd[1]*numpy.sin(abcd[2]*x-abcd[3]) + return sine + def plot_feature(self,properties): + a = properties['sine_fit'][0] + b = properties['sine_fit'][1] + c = properties['sine_fit'][2] + d = properties['sine_fit'][3] + abcd = array([a,b,c,d]) + # y = a + b * sin(cx - d) + plot(self.time_data,self.sine_wave(abcd,self.time_data),label='sine fit') diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sine_leastsq_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sine_leastsq_extractor.py new file mode 100644 index 00000000..e2ccdf00 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sine_leastsq_extractor.py @@ -0,0 +1,51 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +import numpy +from numpy import random, pi +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass +from .common_functions import * + +# TODO remove? +class sine_leastsq_extractor(InterExtractor,ChiSquare): + active = True + extname = 'sine_leastsq' #extractor's name + def extract(self): + a = self.dc_estimate() + b = 15#properties['amplitude'] #amplitude + c = self.frequency_estimate() * 2 * pi + d = 0 # x shift + init = numpy.array([a,b,c,d]) +# print 'real', 'a:', properties['dc_real'], 'b:', properties['amplitude'], 'c:', 2* numpy.pi / properties['period'] + sine = optimize.leastsq(self.sine_fit,init,args=(self.time_data,self.flux_data,self.rms_data)) + return(sine[0]) +# def sine_fit(self,abcd,x,y,rms): +# def sine(x): +# # y = a + b * sin(cx - d) +# return abcd[0] + abcd[1]*numpy.sin(abcd[2]*x-abcd[3])#ab[0]*x +ab[1] +# print self.chi_square(y,sine,x=x,rms=rms) +# return self.chi_square(y,sine,x=x,rms=rms) + def frequency_estimate(self): + freq = self.fetch_extr('first_freq') #2*numpy.pi/20 + return freq + def dc_estimate(self): + dc = self.fetch_extr('weighted_average') + return dc + def sine_fit(self,abcd,x,y,rms): + fx = self.sine_wave(abcd,x) + chi2 = numpy.power(y - fx,2)/numpy.power(rms,2) + return chi2 + def sine_wave(self,abcd,x): + sine = abcd[0] + abcd[1]*numpy.sin(abcd[2]*x-abcd[3]) + return sine + def plot_feature(self,properties): + a = properties[self.extname][0] + b = properties[self.extname][1] + c = properties[self.extname][2] + d = properties[self.extname][3] + abcd = array([a,b,c,d]) + # y = a + b * sin(cx - d) + plot(self.time_data,self.sine_wave(abcd,self.time_data),label=self.extname) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/sine_lomb_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/sine_lomb_extractor.py new file mode 100644 index 00000000..2984810e --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/sine_lomb_extractor.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor + +from .sine_leastsq_extractor import sine_leastsq_extractor + +class sine_lomb_extractor(sine_leastsq_extractor): + """Fits a sine wave using the lomb result as an estimate """ + active = False + extname = 'sine_lomb' #extractor's name + def frequency_estimate(self): + freq = self.fetch_extr('first_lomb') #2*numpy.pi/20 + return freq diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/skew_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/skew_extractor.py new file mode 100644 index 00000000..ae42d6fa --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/skew_extractor.py @@ -0,0 +1,12 @@ +from ..FeatureExtractor import FeatureExtractor + +from scipy import stats + +class skew_extractor(FeatureExtractor): + """ calculates the skew of the signal using scipy.stats.skew + biased skew?""" + active = True + extname = 'skew' #extractor's name + def extract(self): + skew = stats.skew(self.flux_data) + return skew \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/small_kurtosis_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/small_kurtosis_extractor.py new file mode 100644 index 00000000..6ab40e92 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/small_kurtosis_extractor.py @@ -0,0 +1,29 @@ +from ..FeatureExtractor import FeatureExtractor + +from numpy import * + +class small_kurtosis_extractor(FeatureExtractor): + """ calculates the kurtosis of the signal using the kurtosis formula for small samples from http://www.xycoon.com/peakedness_small_sample_test_1.htm""" + active = True + extname = 'small_kurtosis' #extractor's name + minpoints = 4 # minimum number of points for the extractor to run + def extract(self): + kurtosis = self.kurtosis_calc() + self.uncertainty = self.uncertainty_calc() + return kurtosis + def kurtosis_calc(self): + """ simply follows http://www.xycoon.com/skewness_small_sample_test_1.htm """ + n = float(self.fetch_extr('n_points')) + average = self.fetch_extr('weighted_average') + s = self.fetch_extr('s') + xi_minus_average = self.flux_data - average + xi_minus_average_over_s = xi_minus_average / s + to_the_fourth = power(xi_minus_average_over_s,4) + sum_fourth_s = to_the_fourth.sum() + kurtosis = ( n*(n+1)/((n-1)*(n-2)*(n-3)) ) * sum_fourth_s - 3*(n-1)**2 / ((n-2) * (n-3)) + return kurtosis + def uncertainty_calc(self): + n = float(self.fetch_extr('n_points')) + ss = sqrt(6*n*(n-1)/(n-2)/(n+1)/(n+3)) + sk = sqrt(4*(n**2-1)*(ss**2)/(n-3)/(n+5)) + return sk diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/small_skew_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/small_skew_extractor.py new file mode 100644 index 00000000..30bf97fe --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/small_skew_extractor.py @@ -0,0 +1,29 @@ +from ..FeatureExtractor import FeatureExtractor + +from pylab import * + +class small_skew_extractor(FeatureExtractor): + """ calculates the skew of the signal using the skewness formula for small samples from http://www.xycoon.com/skewness_small_sample_test_1.htm""" + active = True + extname = 'small_skew' #extractor's name + minpoints = 3 # minimum number of points for the extractor to run + def extract(self): + skew = self.skew_calc() + self.uncertainty = self.uncertainty_calc() + return skew + def skew_calc(self): + """ simply follows http://www.xycoon.com/skewness_small_sample_test_1.htm """ + n = float(len(self.time_data)) + average = self.fetch_extr('weighted_average') + xi_minus_average = self.flux_data - average + cubed = xi_minus_average**3 + sum_of_cubed = cubed.sum() + m3 = (1/n) * sum_of_cubed + s = self.fetch_extr('s') + skewness = (n**2 * m3) / ((n-1)*(n-2)*(s**3)) + return skewness + def uncertainty_calc(self): + n = float(len(self.time_data)) + ss = sqrt(6*n*(n-1)/(n-2)/(n+1)/(n+3)) + return ss + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/std_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/std_extractor.py new file mode 100644 index 00000000..2f615eb2 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/std_extractor.py @@ -0,0 +1,8 @@ +from ..FeatureExtractor import FeatureExtractor +from numpy import std + +class std_extractor(FeatureExtractor): + active = True + extname = 'std' #extractor's name + def extract(self): + return(std(self.flux_data)) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/stdextractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/stdextractor.py new file mode 100644 index 00000000..2039acae --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/stdextractor.py @@ -0,0 +1,8 @@ +from ..FeatureExtractor import FeatureExtractor +from numpy import std + +class stdextractor(FeatureExtractor): + active = True + extname = 'std' #extractor's name + def extract(self): + return(std(self.flux_data)) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/stdvs_from_u_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/stdvs_from_u_extractor.py new file mode 100644 index 00000000..0f68bf6a --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/stdvs_from_u_extractor.py @@ -0,0 +1,28 @@ +from __future__ import absolute_import + +from ..FeatureExtractor import InterExtractor +import numpy +from numpy import random +from scipy import fftpack, stats, optimize +try: + from pylab import * +except: + pass +from .common_functions import * + +from .dist_from_u_extractor import dist_from_u_extractor +# TODO remove +from .wei_av_uncertainty_extractor import wei_av_uncertainty_extractor + +class stdvs_from_u_extractor(InterExtractor): + active = True + extname = 'stdvs_from_u' #extractor's name + def extract(self): + dist_from_u = self.fetch_extr('dist_from_u', returnall=True) + dist = dist_from_u.result + sd = self.fetch_extr('weighted_average', returnall=True).uncertainty # returns the uncertainty in the weighted average + num = dist/sd # number of standard deviations from the weighted average + uncer = dist_from_u.uncertainty/sd # scales the uncertainty (not sure this is correct) +# TODO uncertainty isn't tested anywhere yet + self.uncertainty = uncer + return num diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/stetson_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/stetson_extractor.py new file mode 100644 index 00000000..18f18445 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/stetson_extractor.py @@ -0,0 +1,35 @@ +import os,sys +from ..FeatureExtractor import FeatureExtractor + +from .....Algorithms.stetson_stats import stetson_mean, stetson_j, stetson_k + + +class stetson_mean_extractor(FeatureExtractor): + """ An iteratively weighted mean""" + active = True + extname = 'stetson_mean' #extractor's name + def extract(self): + value = stetson_mean(self.flux_data) + return value + + +class stetson_j_extractor(FeatureExtractor): + """Robust covariance statistic between pairs of observations x,y + whose uncertainties are dx,dy. if y is not given, calculates + a robust variance for x.""" + active = True + extname = 'stetson_j' #extractor's name + minpoints = 2 # minimum number of points for the extractor to run + def extract(self): + value = stetson_j(self.flux_data) + return value + + +class stetson_k_extractor(FeatureExtractor): + """A kurtosis statistic.""" + active = True + extname = 'stetson_k' #extractor's name + minpoints = 2 # minimum number of points for the extractor to run + def extract(self): + value = stetson_k(self.flux_data) + return value diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/tmpned_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/tmpned_extractor.py new file mode 100644 index 00000000..bf65eec7 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/tmpned_extractor.py @@ -0,0 +1,45 @@ +from __future__ import print_function +from __future__ import absolute_import +#from ..FeatureExtractor import FeatureExtractor +from ..FeatureExtractor import ContextInterExtractor +#from ..FeatureExtractor import MultiExtractor + +#from power_extractor import power_extractor as power_extractor +from . import ned + +class tmpned_extractor(ContextInterExtractor): + """the Galactic coordinate b (latitude) in degrees""" + active = True + extname = 'tmpned' #extractor's name + + n = None + def extract(self): + #20080617_dstarr_comments_out#self.ex_error("let's not do this today") + posdict = self.fetch_extr('position_intermediate') + + if 'ra' not in posdict or posdict['dec'] is None: + self.ex_error("bad RA or DEC in the intermediate extractor. check install pyephem and input coordinates") + + if not self.n: + #sys.path.append(os.path.abspath(os.environ.get("../../")) + # This module should exist in the local path: + #try: ### 20090123 dstarr comments this out. + try: + from . import ned_cache_server + ncc = ned_cache_server.Ned_Cache_Client(ned_cache_server.pars) + #self.n = ncc.retrieve_queue_ned_dict(posdict['ra'], \ + # posdict['dec']) + (ned_obj, sdss_obj) = ncc.retrieve_queue_ned_dict(posdict['ra'], \ + posdict['dec']) + self.n = ned_obj + #self.s = sdss_obj # 20090126: I added this line a couple days ago, but I don't think it is useful/accessed. So, I add the following line instead: + self.properties['data']['multiband']['inter']['sdss_internal_struct'] = sdss_obj + + except: + print("MySQL connection to NED cache server FAILED") + ###self.n = ned.NED(pos=(posdict['ra'],posdict['dec']),verbose=True, do_threaded=True) # dstarr changes flags to be verbose, ... + + + return self.n #{'distance_in_kpc_to_nearest_galaxy': self.n.distance_in_kpc_to_nearest_galaxy(),\ + #'distance_in_arcmin_to_nearest_galaxy': self.n.distance_in_arcmin_to_nearest_galaxy()} + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/vosource_parse.py b/mltsp/TCP/Software/feature_extract/Code/extractors/vosource_parse.py new file mode 100644 index 00000000..76c5a855 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/vosource_parse.py @@ -0,0 +1,121 @@ +""" +like dbimporter but more general. + +try it like: + +import vosource_parse, pprint + +fname = "test_feature_algorithms.VOSource.xml" +v = vosource_parse.vosource_parser(fname) +pprint(v.d) + +## note that v is of type xmldict.XmlDictObject + +v['ts'] is the parsed timeseries as a list, usually with 4 entries (time, val, valerr, limit) + +it's up to the user to decide how to use those columns...there's almost no reformating + +""" +from scipy import * +from . import xmldict +import os, sys +from xml.etree import cElementTree as ElementTree # this is a nicer implementation +from pprint import pprint + +class vosource_parser: + def __init__(self, fname, is_xmlstring=False): + self.fname = fname + self.d = {} + + if is_xmlstring: + self._parse_xmlstring() + elif os.path.exists(self.fname): + self._parse() + + if self.d: + self._make_timeseries() + + def _parse(self): + try: + # 20090225 dstarr adds: + self.elemtree = ElementTree.parse(self.fname).getroot() + self.d = xmldict.ConvertXmlToDict(self.elemtree) + except Exception as e: + print(e) + self.d = {} + return + + def _parse_xmlstring(self): + try: + self.elemtree = ElementTree.fromstring(self.fname) + self.d = xmldict.ConvertXmlToDict(self.elemtree) + except Exception as e: + print("EXCEPTION:", e) + self.d = {} + return + + def _make_timeseries(self): + self.d.update({"ts": {}}) + try: + if isinstance(self.d['VOSOURCE']['VOTimeseries']['Resource']['TABLE'], xmldict.XmlDictObject): + ts_dict = [self.d['VOSOURCE']['VOTimeseries']['Resource']['TABLE']] + else: + ts_dict = self.d['VOSOURCE']['VOTimeseries']['Resource']['TABLE'] + except: + print("Error") + return + + for filt in ts_dict: + name = filt['name'] + if not isinstance(filt.get('FIELD',''),list): + print("field is not a list") + continue + allcol = [] + ncols = len(filt['FIELD']) + for col in filt['FIELD']: + allcol.append(col) + allcol[-1].update({"val": []}) + try: + xml_obj = filt['DATA']['TABLEDATA']['TR'] + except: + continue # sometimes there is a blank line and no data. Skip this filter. + #20090212: dstarr adds this first condition to catch n_epochs=1, when there was just the 2nd previously: + if isinstance(xml_obj,xmldict.XmlDictObject): + xml_obj = [filt['DATA']['TABLEDATA']['TR']] + elif not isinstance(xml_obj,list): + print("data is not a list") + continue + ndata = len(xml_obj) + limit = empty(ndata,dtype="S5") + limit[:] = "false" + for d in xml_obj: + if len(d['TD']) != ncols: + continue + for c in enumerate(d['TD']): + if isinstance(c[1],str): + allcol[c[0]]['val'].append(float(c[1])) + elif isinstance(c[1],dict): + if "_text" in c[1]: + if isinstance(c[1]['_text'],str): + allcol[c[0]]['val'].append(float(c[1]['_text'])) + if "limit" in c[1]: + limit[c[0]] = c[1]['limit'] + #make the limits + lim = {'ID': 'col%i' % (ncols + 1), 'datatype': 'string', 'name': "limit", \ + "ucd": "stat.max;stat.min", "val": limit} + for col in allcol: + col.update({"val": array(col['val'])}) + + allcol.append(lim) + self.d['ts'].update({name: allcol}) + + #print ts_dict + +def test(): + + fname = "test_feature_algorithms.VOSource.xml" + v = vosource_parser(fname) + pprint(v.d) + +if __name__ == "__main__": + test() diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/watt_per_m2_flux_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/watt_per_m2_flux_extractor.py new file mode 100644 index 00000000..b5ff8be1 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/watt_per_m2_flux_extractor.py @@ -0,0 +1,66 @@ +from __future__ import print_function +from __future__ import absolute_import +from ..FeatureExtractor import InterExtractor +import numpy +from numpy import random +from scipy import fftpack, stats, optimize +from pylab import * +from .common_functions import * + +# TODO this should def. be a function, not an extractor +class watt_per_m2_flux_extractor(InterExtractor): + """ Convert the magnitudes to SI units""" + active = True + extname = 'watt_per_m2_flux' #extractor's name + def extract(self): + #import pdb; pdb.set_trace() + try: + unit = self.flux_data_unit + except NameError: + unit = self.assumed_unit + if unit in ['mag','mags','magnitude']: + constants = \ + {"u": 13.84 \ + ,"b": 12.97 \ + ,"v": 13.72 \ + ,"r": 13.54 \ + ,"i": 14.25 \ + ,"j": 15.05 \ + ,"h": 15.82 \ + ,"k": 16.50 \ + ,"l": 17.82} # from Misconceptions About Astronomical Magnitudes," E. Schulman and C. V. Cox, American Journal of Physics, Vol. 65, pg. 1003 (1997). Table 1 + try: + if 'clear' in self.band.lower(): + constant = constants['v'] # 20100722 kludge to get some debosscher data ingested + else: + # 20100518 dstarr adds a kludge which tries assuming that the first character of band string is a filter. Realistically, we need to have constants{} entries for all 24 bands found in the lyra:tutor:filters (take first elem + constant = constants[self.band[0].lower()] # find the right constant by enforcing lower case + except KeyError: + self.ex_error("Band %s not found" % (self.band)) + f = 10**(-0.4*(self.flux_data + constant)) # ergs per second per cm^2, equation 11 of the above-mentioned paper + fwatt = f * 1e-7 # conversion from erg/s to watts + fm2 = fwatt * 1e4 # 10 000 cm^2 in a m^2 + self.uncertainty = self.uncer_calc(fm2) + return fm2 + else: + print("units not recognized", self.flux_data_unit, self.extname) + self.uncertainty = self.rms_data + return self.flux_data # else assume it's already in those units, no unit conversion implemented for the moment + def uncer_calc(self, flux_wm2): + """ calculate the uncertainty in the SI flux + Latex for the approximation (valid if the flux uncertainty is less than 10%): + + \sigma_m &=& \sqrt{ \sigma_{m,higher} \times \sigma_{m, lower}} \\ + &=& \sqrt{ \left( 2.5 \log_{10}(f - \sigma_f) - 2.5\log_{10}f \right) \times \left( -2.5 \log_{10}(f + \sigma_f) + 2.5\log_{10}f \right) } \\ + &=& \sqrt{ -2.5^2 \log_{10}\left(\frac{f}{f-\sigma_f}\right) \left(\log_{10}\frac{f}{f+\sigma_f}\right)} \\ + &=& \sqrt{ -2.5^2 \log_{10}\left(\frac{f-\sigma_f}{f}\right) \log_{10}\left(\frac{f+\sigma_f}{f}\right)} \\ + &=& 2.5\sqrt{ -\log_{10}\left( 1 - \frac{\sigma_f}{f} \right) \log_{10}\left( 1 + \frac{\sigma_f}{f} \right)} \\ + &=& \frac{2.5 }{\ln 10} \sqrt{ -\ln\left( 1 - \frac{\sigma_f}{f} \right) \ln\left( 1 + \frac{\sigma_f}{f} \right)} \\ + &\approx & \frac{2.5 }{\ln 10} \sqrt{ \left(\frac{\sigma_f}{f} \right) ^2 } \\ + &\approx & \frac{\sigma_f}{f} + + """ + f = flux_wm2 + sigmam = self.rms_data + sigmaf = f * sigmam + return sigmaf diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/wei_av_uncertainty_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/wei_av_uncertainty_extractor.py new file mode 100644 index 00000000..d39c8a48 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/wei_av_uncertainty_extractor.py @@ -0,0 +1,9 @@ +from ..FeatureExtractor import FeatureExtractor + +# TODO should just be a function +class wei_av_uncertainty_extractor(FeatureExtractor): ### REDUNDANT + active = False + extname = 'wei_av_uncertainty' #extractor's name + def extract(self): + uncertainty = 1.0/(self.rms_data**(2)).sum() + return uncertainty diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/weighted_average_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/weighted_average_extractor.py new file mode 100644 index 00000000..c8efc4d8 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/weighted_average_extractor.py @@ -0,0 +1,23 @@ +from __future__ import absolute_import +from ..FeatureExtractor import FeatureExtractor + +try: + from pylab import * +except: + pass +from .common_functions.plot_methods import plot_horizontal_line + +class weighted_average_extractor(plot_horizontal_line,FeatureExtractor): + active = True + extname = 'weighted_average' #extractor's name + def extract(self): +# TODO do we compute these error weights a lot? could be a library function +# cf. ChiSquare module + we_av = (self.flux_data / (self.rms_data)**2).sum()/((1/self.rms_data)**2).sum() + self.uncertainty = sqrt(1.0/(self.rms_data**(2)).sum()) +# print 'weighted',we_av + return we_av + def plot_feature(self,properties): + dc_line = ones(len(self.time_data),dtype=float) + dc_line[:] = properties[extname] + plot(self.time_data,dc_line,label=extname) diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/ws_variability_extractor.py b/mltsp/TCP/Software/feature_extract/Code/extractors/ws_variability_extractor.py new file mode 100644 index 00000000..13af2366 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/ws_variability_extractor.py @@ -0,0 +1,125 @@ +from __future__ import print_function +from ..FeatureExtractor import MultiFeatureExtractor +from ..FeatureExtractor import FeatureExtractor + +from numpy import * + +class ws_variability_self_extractor(FeatureExtractor): + """ JSB adds this...a self variability for a single band + http://articles.adsabs.harvard.edu/cgi-bin/nph-iarticle_query?db_key=AST&bibcode=1996PASP..108..851S&letter=0&classic=YES&defaultprint=YES&whole_paper=YES&page=852&epage=852&send=Send+PDF&filetype=.pdf + page 853, equation in top left of the page + """ + active = True + extname = 'ws_variability_self' #extractor's name + compared_extr = 'n_points' + minpoints = 2 # 20081010: dstarr adds this variable, although it doesn't seem to used anywhere... # 20081108: changed min_points to minpoints, as expected by FeatureExtractor (this was a typo) + maxpoints = 10000 #20090127: dstarr adds this after seeing a ws_variability_extractor related memory balloon possibly due to a +30k dataset. + def extract(self): + band1= self.band + band2= self.band + n1 = self.extr # n_points from band 1 + n2 = self.extr + self.dic1 = self.dic # the dictionary in band 1 + self.dic2 = self.dic + timeindices = indexb, indexv = self.find_close_points(self.dic['input']['time_data'] , self.dic['input']['time_data']) # find the indices of the points + meanb = self.fetch_extr('dc') # b bar JSB changed to dc instead of old_dc + meanv = self.fetch_extr('dc') # v bar + bi = self.dic['input']['flux_data'][indexb] + vi = self.dic['input']['flux_data'][indexv] + sigbi = self.dic['input']['rms_data'][indexb] + sigvi = self.dic['input']['rms_data'][indexv] + insum = ((bi - meanb) / sigbi) * ( (vi - meanv) / sigvi) + summed = insum.sum() + n = float(len(indexb)) + try: + I = sqrt(1 / (n * (n-1) ) ) * summed + print("ws_variability_self for band %s = %f" % (self.band,I)) + except: + # if p'time_data'] just contains multiple same times, then n==1 & Excepts. + I = None + return I + + + def find_close_points(self, times1, times2): + """ find points in the two bands that were sampled close in time to each other """ + times1x, times2x = ix_(times1, times2) # http://www.scipy.org/Tentative_NumPy_Tutorial#head-05b0dc978ba9ce86c363b3fa92a6e4869e6c72a9 + # 20080702: dstarr noticies that we occasionally get a python MemoryError here. Due to large timeseries datasets? Is this an inefficeint algorithm?: + timediff = abs(times1x - times2x) # the difference in time between any two points + zeromatrix = zeros((len(times1),len(times2)) ) # a matrix full of zeros of the same dimensions as timediff + min1 = timediff.argmin(axis=0) # find the index of the minimum down each column + min2 = timediff.argmin(axis=1) # find the index of the minimum across each row + minmatrix1 = zeromatrix + minmatrix2 = zeromatrix.copy() + minmatrix1[min1 , arange(len(times2))] = 1 # mark the column minima with 1 + minmatrix2[arange(len(times1)), min2] = 1 # mark the row minima with 1 + boolmatrix = logical_and(minmatrix1,minmatrix2) # intersection + return where(boolmatrix) # the indices the of intersection points + + +class ws_variability_bv_extractor(MultiFeatureExtractor): + """ http://articles.adsabs.harvard.edu/cgi-bin/nph-iarticle_query?db_key=AST&bibcode=1996PASP..108..851S&letter=0&classic=YES&defaultprint=YES&whole_paper=YES&page=852&epage=852&send=Send+PDF&filetype=.pdf + page 853, equation in top left of the page + """ + active = True + extname = 'ws_variability_bv' #extractor's name + band1 = 'b' + band2 = 'v' + compared_extr = 'n_points' + def extract(self): + n1 = self.extr1 # n_points from band 1 + n2 = self.extr2 + self.dic1 = self.dic1 # the dictionary in band 1 + self.dic2 = self.dic2 + timeindices = indexb, indexv = self.find_close_points(self.dic1['input']['time_data'] , self.dic2['input']['time_data']) # find the indices of the points + meanb = self.fetch_extr('dc', band=self.band1) # b bar JSB changed to dc instead of old_dc + meanv = self.fetch_extr('dc', band=self.band2) # v bar + bi = self.dic1['input']['flux_data'][indexb] + vi = self.dic2['input']['flux_data'][indexv] + sigbi = self.dic1['input']['rms_data'][indexb] + sigvi = self.dic2['input']['rms_data'][indexv] + insum = ((bi - meanb) / sigbi) * ( (vi - meanv) / sigvi) + summed = insum.sum() + n = float(len(indexb)) + I = sqrt(1 / (n * (n-1) ) ) * summed + return I + + + def find_close_points(self, times1, times2): + """ find points in the two bands that were sampled close in time to each other """ + times1x, times2x = ix_(times1, times2) # http://www.scipy.org/Tentative_NumPy_Tutorial#head-05b0dc978ba9ce86c363b3fa92a6e4869e6c72a9 + timediff = abs(times1x - times2x) # the difference in time between any two points + zeromatrix = zeros((len(times1),len(times2)) ) # a matrix full of zeros of the same dimensions as timediff + min1 = timediff.argmin(axis=0) # find the index of the minimum down each column + min2 = timediff.argmin(axis=1) # find the index of the minimum across each row + minmatrix1 = zeromatrix + minmatrix2 = zeromatrix.copy() + minmatrix1[min1 , arange(len(times2))] = 1 # mark the column minima with 1 + minmatrix2[arange(len(times1)), min2] = 1 # mark the row minima with 1 + boolmatrix = logical_and(minmatrix1,minmatrix2) # intersection + return where(boolmatrix) # the indices the of intersection points + +class ws_variability_ru_extractor(ws_variability_bv_extractor): + extname = 'ws_variability_ru' + band1 = 'r' + band2 = 'u' + +class ws_variability_ug_extractor(ws_variability_bv_extractor): + extname = 'ws_variability_ug' + band1 = 'u' + band2 = 'g' + +class ws_variability_gr_extractor(ws_variability_bv_extractor): + extname = 'ws_variability_gr' + band1 = 'g' + band2 = 'r' + +class ws_variability_ri_extractor(ws_variability_bv_extractor): + extname = 'ws_variability_ri' + band1 = 'r' + band2 = 'i' + +class ws_variability_iz_extractor(ws_variability_bv_extractor): + extname = 'ws_variability_iz' + band1 = 'i' + band2 = 'z' + diff --git a/mltsp/TCP/Software/feature_extract/Code/extractors/xmldict.py b/mltsp/TCP/Software/feature_extract/Code/extractors/xmldict.py new file mode 100644 index 00000000..1c9e7de1 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/extractors/xmldict.py @@ -0,0 +1,137 @@ +from __future__ import print_function +from xml.etree import ElementTree +from pprint import pprint + +# calling example +def main(): + configdict = ConvertXmlToDict(ElementTree.parse('test_tdf.xml').getroot()) + return configdict + pprint(configdict) + + # you can access the data as a dictionary + #print configdict['settings']['color'] + #configdict['settings']['color'] = 'red' + + # or you can access it like object attributes + print(configdict.tdf.created_by) + configdict.tdf.created_by = 'red' + + root = ConvertDictToXml(configdict) + + tree = ElementTree.ElementTree(root) + tree.write('config.new.xml') + + +# Module Code: + +class XmlDictObject(dict): + def __init__(self, initdict=None): + if initdict is None: + initdict = {} + dict.__init__(self, initdict) + + def __getattr__(self, item): + return self.__getitem__(item) + + def __setattr__(self, item, value): + self.__setitem__(item, value) + + def __str__(self): + if '_text' in self: + return self.__getitem__('_text') + else: + return '' + + @staticmethod + def Wrap(x): + if isinstance(x, dict): + return XmlDictObject((k, XmlDictObject.Wrap(v)) for (k, v) in x.items()) + elif isinstance(x, list): + return [XmlDictObject.Wrap(v) for v in x] + else: + return x + + @staticmethod + def _UnWrap(x): + if isinstance(x, dict): + return dict((k, XmlDictObject._UnWrap(v)) for (k, v) in x.items()) + elif isinstance(x, list): + return [XmlDictObject._UnWrap(v) for v in x] + else: + return x + + def UnWrap(self): + return XmlDictObject._UnWrap(self) + +def _ConvertDictToXmlRecurse(parent, dictitem): + assert type(dictitem) is not type([]) + + if isinstance(dictitem, dict): + for (tag, child) in dictitem.items(): + if str(tag) == '_text': + parent.text = str(child) + elif type(child) is type([]): + for listchild in child: + elem = ElementTree.Element(tag) + parent.append(elem) + _ConvertDictToXmlRecurse(elem, listchild) + else: + elem = ElementTree.Element(tag) + parent.append(elem) + _ConvertDictToXmlRecurse(elem, child) + else: + parent.text = str(dictitem) + +def ConvertDictToXml(xmldict): + roottag = xmldict.keys()[0] + root = ElementTree.Element(roottag) + _ConvertDictToXmlRecurse(root, xmldict[roottag]) + return root + +def _ConvertXmlToDictRecurse(node, dictclass): + nodedict = dictclass() + + if len(node.items()) > 0: + # if we have attributes, set them + nodedict.update(dict(node.items())) + + for child in node: + # recursively add the element's children + newitem = _ConvertXmlToDictRecurse(child, dictclass) + if child.tag in nodedict: + # found duplicate tag, force a list + if type(nodedict[child.tag]) is type([]): + # append to existing list + nodedict[child.tag].append(newitem) + else: + # convert to list + nodedict[child.tag] = [nodedict[child.tag], newitem] + else: + # only one, directly set the dictionary + nodedict[child.tag] = newitem + + if node.text is None: + text = '' + else: + text = node.text.strip() + + if len(nodedict) > 0: + # if we have a dictionary add the text as a dictionary value (if there is any) + if len(text) > 0: + nodedict['_text'] = text + else: + # if we don't have child nodes or attributes, just set the text + try: + nodedict = node.text.strip() + except: + #print node.text + nodedict = None + #print nodedict + return nodedict + +def ConvertXmlToDict(root, dictclass=XmlDictObject): + return dictclass({root.tag: _ConvertXmlToDictRecurse(root, dictclass)}) + + +if __name__ == '__main__': + main() diff --git a/mltsp/TCP/Software/feature_extract/Code/feature_interfaces.py b/mltsp/TCP/Software/feature_extract/Code/feature_interfaces.py new file mode 100644 index 00000000..410b0039 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/feature_interfaces.py @@ -0,0 +1,168 @@ +from __future__ import print_function + +import numpy as np +from . import extractors +from . import FeatureExtractor +from . import internal_generated_extractors_holder + + +avtype = [('extname', 'S100'), + ('extractor', np.object_), + ('active', np.bool_)] # format of available_extractors + + +class FeatureInterface(object): + """This serves as an interface between signals and extractors. + An instance of this object is generated when the module is imported + """ + def __init__(self): + igea = internal_generated_extractors_holder.Internal_Gen_Extractors_Accessor() + # obsolete: + self.glob_internally_generated_extractors = \ + igea.glob_internally_generated_extractors + + # 20081216: dstarr sees that we keep on appending signals here (and growing memory) when he thinks only one signal is needed in self.subscribing_signals[] to do the feature extractions for a source. : (original function == True): + self.debug__original_do_append_signals_to_subscribing_signals = False + self.subscribing_signals = [] + self.available_extractors = np.empty(0, avtype) # declare the recipient numpy array for extractors + + #def register_signal(self,signal): + # self.subscribing_signals.append(signal) + # for ext_name,extractor in self.available_extractors.\ + # items(): + # signal.update(extractor()) + # 20071215: dstarr modifies this since he thinks order of load matters + # and a dictionary .items() or .values() is not applicable: + + def register_signal(self, signal, list_of_extractors, initialize=True): + """ initialize determines whether all the active extractors are immediately applied to the signal """ + if self.debug__original_do_append_signals_to_subscribing_signals: + self.subscribing_signals.append(signal) + else: + # 20081216: dstarr sees that we keep on appending signals here (and growing memory) when he thinks only one signal is needed in self.subscribing_signals[] to do the feature extractions for a source. + self.subscribing_signals = [signal] + if initialize: # check that we want to initialize the signal + for an_extractor in self.available_extractors[self.available_extractors['active']]: # loop through all active extractors + extractor_obj = an_extractor['extractor']() # instantiate + signal.update(extractor_obj) + + def register_extractor(self, extractor): + self.available_extractors = np.append(self.available_extractors, + np.array((extractor.extname, + extractor, + extractor.active), avtype)) # append a tuple of format avtype containing (extname, extractor object, active) + if extractor.active: self.notify(extractor) + + def notify(self, extractor): + #print "New active extractor available!" + for signal in self.subscribing_signals: + signal.update(extractor()) + + def remove_signal(self,signal): + self.subscribing_signals.remove(signal) + + + def remove_extractor(self,extractor): + """ Remove an extractor from the available extractor list. + Input is a type. To remove by name, using remove_extname """ + sizebeforeremoving = self.available_extractors.size + self.available_extractors = self.available_extractors[ where( \ + self.available_extractors['extractor'] != extractor)] # slice off the corresponding extractor + sizeafterremoving = self.available_extractors.size + if sizebeforeremoving == sizeafterremoving: + print("Key does not exist, can't be removed from active list", extractor.extname) + + + def remove_extname(self,extname): + """ Remove an extractor from the available extractor list by + its name. Input is a string. + To remove by type, using remove_extractor """ + sizebeforeremoving = self.available_extractors.size + self.available_extractors = self.available_extractors[ where( \ + self.available_extractors['extname'] != extname)] # slice off the corresponding extractor + sizeafterremoving = self.available_extractors.size + if sizebeforeremoving == sizeafterremoving: + print("Key does not exist, can't be removed from active list", extractor.extname) + + + def switch_extname(self,extractor_name,activate=False,deactivate=False): + extractor_index = self.find_extname(extractor_name, index=True) + if extractor_index: # check that find_extname worked + extractor_row = self.available_extractors[\ + extractor_index] + active = extractor_row['active'] + print("This extractor %s was in state %s" % (\ + extractor_name, active)) + if activate: + active = True + elif deactivate: + active = False + else: + active = not active + print("This extractor %s is now in state %s" % (\ + extractor_name,active)) + self.available_extractors[extractor_index] = array(\ + (extractor_row['extname'][0], \ + extractor_row['extractor'][0], active),avtype) + return "done" + else: + return False + + + def find_extname(self,extractor_name, index = False): # linked if want to modify the array directly + extractor_index = np.where(self.available_extractors['extname'] ==\ + np.compat.asbytes(extractor_name))[0] + + if np.size(extractor_index) is 0: + print("find_extname couldn't find extractor %s" % \ + (extractor_name)) + return False # if we didn't find the object + if index: + return extractor_index[0] + extractor_row = self.available_extractors[extractor_index][0] # return the corresponding extractor row (extname, extractor and active) + return extractor_row + + + def request_extractor(self,extractor_name): + extractor_row = self.find_extname(extractor_name) + if extractor_row: # check that find_extname worked + return extractor_row['extractor'] + else: + return False + + +feature_interface = FeatureInterface() + + +def initialize(list_of_extractors): + from ...ingest_tools import feature_extraction_interface + fs = feature_extraction_interface.Internal_Feature_Extractors() + for key_name in fs.feature_ordered_keys: + list_of_extractors.append(key_name) + # The following list is no-longer explicitly defined here. + # Rather, I build the list in feature_extraction_interface.py + #list_of_extractors.extend([ weighted_average_extractor , chi2extractor , dc_extractor , dist_from_u_extractor , fourierextractor , linear_extractor , max_slope_extractor , medianextractor , beyond1std_extractor , stdvs_from_u_extractor , old_dcextractor , power_spectrum_extractor , power_extractor , montecarlo_extractor , pct_80_montecarlo_extractor , pct_90_montecarlo_extractor , pct_95_montecarlo_extractor , pct_99_montecarlo_extractor , significant_80_power_extractor , significant_90_power_extractor , significant_95_power_extractor , significant_99_power_extractor , first_freq_extractor , sine_fit_extractor , sine_leastsq_extractor , skew_extractor , stdextractor , wei_av_uncertainty_extractor , lomb_extractor , first_lomb_extractor , sine_lomb_extractor , second_extractor , third_extractor , second_lomb_extractor , ratio21, ratio31, ratio32]) # order matters! + #for extractor in extractors.__dict__.values(): + #for extractor in list_of_extractors: + list_of_extractor_objects = [] + for extractor_name in list_of_extractors: + extractor = getattr(extractors, extractor_name) + list_of_extractor_objects.append(extractor) + + if isinstance(extractor,type): + instance = extractor() + if isinstance(instance,FeatureExtractor.GeneralExtractor): + instance.register_extractor() + else: + pass + else: + pass + + return list_of_extractor_objects + + +def fetch_extract(extractor_name,properties,band=None): + """ we want the result of this extractor """ + extractor = feature_interface.request_extractor(extractor_name) + result = extractor.extr(properties,band=band) + return result diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/__init__.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/__init__.py new file mode 100644 index 00000000..351d9b81 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/__init__.py @@ -0,0 +1,11 @@ +from .double_ind_gen import double_ind_gen +from .double_sig_gen import double_sig_gen +from .double_uneven_gen import double_uneven_gen +from .from_xml import from_xml +from .generator import generator +from .lin_inc_gen import lin_inc_gen +from .sgwindn_gen import sgwindn_gen +from .uneven_sine_gen import uneven_sine_gen +from .vizier_importer import vizier_importer +#20080614#from montecarlo_gen import montecarlo_gen +from .copy_gen import copy_gen, noisified_gen diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/copy_gen.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/copy_gen.py new file mode 100644 index 00000000..c1905d8f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/copy_gen.py @@ -0,0 +1,50 @@ +""" +This generates creates a simple copy of a signal. It was written for the noisification process. + +The noisifier generator first noisifies the data. + +Created by Maxime Rischard on 2008-05-26. + +""" +from __future__ import absolute_import + +import numpy + +from .gen_or_imp import gen_or_imp + +class copy_gen(gen_or_imp): + name = "copy generator" + def generate(self,dic): + inputdic = dic['input'] + rms = inputdic['rms_data'] + self.time_data = inputdic['time_data'] + # 200712076 dstarr try/excepts this: + try: + self.frequencies = inputdic['frequencies'] + except: + self.frequencies = numpy.array([]) + self.s = inputdic['flux_data'] + self.set_outputs(inputdic) + return self.store(self.signalgen) + def set_outputs(self, inputdic): + self.make_dics() + self.for_input = self.sub_dics(self.signaldata) + self.for_input = inputdic + def store(self,data): + from ..signal_objects import signal + return signal(data,register=False) + +class noisified_gen(copy_gen): + name = "noisifier" + def __init__(self, list_of_noisifiers): + """ we'll be using __init__ to initialize the string of actions to apply to the signal """ + self.list_of_noisifiers = list_of_noisifiers + def set_outputs(self, inputdic): + self.make_dics() + self.for_input = self.sub_dics(self.signaldata) + self.for_input['old inputs'] = inputdic + for noisifier in self.list_of_noisifiers: + inputdic = noisifier(inputdic) + self.for_input.update(inputdic) + + \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_ind_gen.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_ind_gen.py new file mode 100644 index 00000000..67b800f8 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_ind_gen.py @@ -0,0 +1,24 @@ +from __future__ import absolute_import +import numpy +from .storage import storage + +from .sgwindn_gen import sgwindn_gen +from .double_sig_gen import double_sig_gen + +class double_ind_gen(sgwindn_gen,double_sig_gen): + name = 'double sine wave with individual noise, evenly sampled' + def generate(self,stdev = 1.0): + self.stdev = stdev + self.s = self.randomsine() + # self.s = 5 * numpy.ones(len(self.t)) + self.noise_tuple = self.noise(stdev_in=self.stdev,size_in=len(self.s)) + self.n = self.noise_tuple[1] + self.set_outputs() + self.signaldata = {'period':(self.p/(self.r+1)) ,'period2':(self.p2/(self.r2+1)), 'amplitude':self.amp,'amplitude2':self.amp2 , 'time_data':self.t , 'flux_data':(self.s+self.n) , 'clean_flux_data':self.s ,'dc_real':self.dc} + self.store(self.signalgen) + def set_outputs(self): +# generator.set_outputs(self) +# self.for_input['rms_data'] = self.noise_tuple[0] + sgwindn_gen.set_outputs(self) + self.for_input['period2']=(self.p2/(self.r2+1)) + self.for_input['amplitude2']=self.amp2 \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_sig_gen.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_sig_gen.py new file mode 100644 index 00000000..d6b58a58 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_sig_gen.py @@ -0,0 +1,27 @@ +from __future__ import absolute_import +import numpy +from .storage import storage + +from .generator import generator + +class double_sig_gen(generator): + source = 'double_sig_gen' + def randomsine(self): #generates a random sine wave + self.set_vars() + self.t2 = self.tgen() + self.r2 = self.rgen() + self.amp2 = self.ampgen() + self.p2 = self.pgen() + s = self.dc + (self.amp * numpy.sin(2*numpy.pi*self.t*(self.r+1)/self.p)) + (self.amp2 * numpy.sin(2*numpy.pi*self.t2*(self.r2+1)/self.p2)) # if r=0, period=p, if r=1, period = p/2 + return(s) + def set_outputs(self): + super(double_sig_gen,self).set_outputs() + self.for_input['period2']=(self.p2/(self.r2+1)) + self.for_input['amplitude2']=self.amp2 + def generate(self,stdev = 1.0): + self.stdev = stdev + s = self.randomsine() + n = self.noise(stdev_in=self.stdev,size_in=len(self.s)) # generate noise with correct length + self.make_dics() + self.signaldata = {'period':(self.p/(self.r+1)) ,'period2':(self.p2/(self.r2+1)), 'amplitude':self.amp,'amplitude2':self.amp2 , 'time_data':self.t , 'flux_data':(s+n) , 'clean_flux_data':s ,'dc_real':self.dc} + self.store(self.signalgen) \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_uneven_gen.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_uneven_gen.py new file mode 100644 index 00000000..d4b6372c --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/double_uneven_gen.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import +import numpy +from .storage import storage + +from .uneven_sine_gen import uneven_sine_gen +from .double_ind_gen import double_ind_gen + +class double_uneven_gen(uneven_sine_gen,double_ind_gen): + name = 'unevenly sampled, double signal (two sine waves), uneven noise' \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/from_xml.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/from_xml.py new file mode 100644 index 00000000..5b3df22a --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/from_xml.py @@ -0,0 +1,171 @@ +from __future__ import print_function +from __future__ import absolute_import +import numpy, sys +from .. import db_importer +from .storage import storage +from numpy import log, exp, arange, median, ceil, pi + +from .gen_or_imp import gen_or_imp +import types + +class from_xml(gen_or_imp): + name = 'xml' + def __init__(self,signals_list=[]): + self.storer = storage() + self.signals_list = signals_list + def generate(self, xml_handle="/home/maxime/feature_extract/Code/source_5.xml", make_xml_if_given_dict=True, register = True): + self.signalgen = {} + self.sig = db_importer.Source(xml_handle=xml_handle,doplot=False, make_xml_if_given_dict=make_xml_if_given_dict) + self.sdict = self.sig.x_sdict + self.set_outputs() # this adds/fills self.signalgen[,multiband]{'input':{filled},'features':{empty},'inter':{empty}} + # see (1) at EOF for output from above function + self.storer.store(self.signalgen,self.signals_list, register=register) + + + # see (2) at EOF for output from above function + + def reckon_err_axis(self,d,obs_ind,ucd_error_values=['stat.error','error']): + """ figure out the column number for the error associated with index obs_ind """ + if 'units' in d and 'ordered_column_names' in d and 'ucds' in d: + ucd_obs = d['ucds'][obs_ind] + for i in range(len(d['ucds'])): + if i == obs_ind: + continue + if type(d['ucds'][i]) == str and d['ucds'][i].find(ucd_obs) != -1: + for e in ucd_error_values: + if d['ucds'][i].find(e) != -1: + return i + return None + + def set_outputs(self): + self.make_dics() + nominal_flux_or_mag_err = 0.10 + nominal_time_dependent_positional_err = 0.001 # degrees + + for band in self.sig.ts: + dic = self.sig.ts[band] + self.signaldata[band] = {} #20071206 dstarr adds this + input_dic = self.sub_dics(self.signaldata[band]) # creates sub-dictionaries in this particular band, chooses the right one to receive input data + #input_dic = dict(time_data=numpy.array(dic['t']), flux_data=numpy.array(dic['m']), rms_data=numpy.array(dic['m_err'])) + if "t" in dic: + time = numpy.array(dic['t']) + else: + time = numpy.array([]) + + ## JSB...adding units to the dictionary. Note that there is also UCD availability + ## TODO....allow for multiple flux measurements in the same instance + if 'units' in dic and 'ordered_column_names' in dic and 'ucds' in dic: + # PTF characteristics: + if 'mag_subtr' in dic['ordered_column_names']: + # NOTE: for PTF VOSource, which db_importer generated, the first 3 items (t,m,merr) are handled below. + for i_colname in range(3,len(dic['ordered_column_names'])): + colname = dic['ordered_column_names'][i_colname] + input_dic.update({(colname + '_unit'): dic['units'][i_colname], + (colname + '_ucd'): dic['ucds'][i_colname], + colname: numpy.array(dic[dic['ordered_column_names'][i_colname]])}) + ## TIME AXIS: REQUIRED + time_axis = 0 + try: + input_dic.update({'time_data_unit': dic['units'][time_axis], + 'time_data_ucd': dic['ucds'][time_axis], + 'time_data': numpy.array(dic[dic['ordered_column_names'][time_axis]])}) + input_dic['srcid'] = self.sdict.get("src_id",0) # 20110611 dstarr added just for lightcurve.py:lomb_code(): debug/allstars-plot use. + #input_dic.update({})#20110512commentout#'frequencies':self.fgen(input_dic['time_data'])}) # 20110512: NOTE: this and self.frequencies are not used by any current features (used to be related to old lomb implementations). About to add a new self.frequencies overwriting declaration in lomb_scargle_extractor.py:extractor(), which will allow the first freq self.frequencies, self.psd to be accessible to outside code. + except: + pass + ## FLUX/MAG AXIS: REQUIRED (or does it? Maybe we just want position versus time. Oh well....) + flux_or_mag_axis = 1 + try: + input_dic.update({'flux_data_unit': dic['units'][flux_or_mag_axis], + 'flux_data_ucd': dic['ucds'][flux_or_mag_axis],\ + 'flux_data': numpy.array(dic[dic['ordered_column_names'][flux_or_mag_axis]])}) + except: + input_dic.update({'flux_data': numpy.array([])}) + + ## UNCERTAINTY IN FLUX/MAX: OPTIONAL + try: + flux_or_mag_err_axis = self.reckon_err_axis(dic,flux_or_mag_axis) + if flux_or_mag_err_axis: + input_dic.update({'rms_data_unit': dic['units'][flux_or_mag_err_axis], + 'rms_data_ucd': dic['ucds'][flux_or_mag_err_axis], + 'rms_data': numpy.array(dic[dic['ordered_column_names'][flux_or_mag_err_axis]])}) + else: + ## assume that the UCD and units are the same as the flux axis + input_dic.update({'rms_data_unit': dic['units'][flux_or_mag_axis], + 'rms_data_ucd': dic['ucds'][flux_or_mag_axis], \ + 'rms_data': nominal_flux_or_mag_err*numpy.ones((len(input_dic['time_data'])))}) + except: + pass + ## POSITIONAL INFORMATION: OPTIONAL + ## positional info will have a UCD like pos.something.something + pos_header_names = [x for x in dic['ucds'][1:] if x.find("pos.") != -1] + if len(pos_header_names) in [2,4]: + print("FUTURE: There appears to be time_dependent positional information passed. You'll want to load input_dict with this.") + else: + print(" NOTE: No apparent time depdendent position information passes to from_xml().") + + else: + ## warning! + ## TODO: this is volitile because 1) we might not require m_err and 2) the name of the flux and time axes could be different + if "t" in dic: + time = numpy.array(dic['t']) + else: + time = numpy.array([]) + + input_dic.update({'time_data': time, 'flux_data':numpy.array(dic['m']), 'rms_data':numpy.array(dic['m_err']), \ + 'frequencies':self.fgen(time)}) + + input_dic.update( {'ra':self.sdict['ra'], 'dec':self.sdict['dec'], 'ra_rms':self.sdict['ra_rms'], 'dec_rms':self.sdict['dec_rms']}) + # 20090616 added: + input_dic['limit_mag_dict'] = dic.get('limitmags',{}) # 20090624 c/o dic['limitmags'] + self.signalgen['source']='xml' + self.signaldata['multiband'] = {} + input_dic = self.sub_dics(self.signaldata['multiband']) + input_dic.update( {'ra':self.sdict['ra'], 'dec':self.sdict['dec'], 'ra_rms':self.sdict['ra_rms'], 'dec_rms':self.sdict['dec_rms']}) # copied from line 28 + + + def fgen(self, time_data): + #var = { 'x': noisetime, 'y': noisedata, 'ylabel': 'Amplitude', 'xlabel':'Time (s)' } + + N= len(time_data) + + if N > 1: + # NOTE: 20090717: dstarr replaces frequency definition with freq defs from lightcurve.py->get_out_dict() + #maxt = max(time_data) + #mint = min(time_data) + #dt = (maxt - mint)/N #findAverageSampleTime(var,0) + #maxlogx = log(1/(2*dt)) # max frequency is the sampling rate + #minlogx = log(1/(maxt-mint)) #min frequency is 1/T + #frequencies = exp(arange(N, dtype = float) / (N-1.) * (maxlogx-minlogx)+minlogx) + + ### 20091122: + #tt = time_data - min(time_data) + #fmin = 0.5/max(tt) + #fmax = 48 # 48cyc/day : this cooresponds to 30 minute period, a minimum period of interest. #n0 / (2.*max(tt)) + #df_over_f=0.001 + #numf = long( ceil( log(fmax/fmin)/df_over_f ) ) + #freqin = exp( log(fmax)-log(fmax/fmin)*arange(numf, dtype=float)/(numf-1.) ) + #om = 2.*pi*freqin + #frequencies = om/(2.*pi) + ### + + tt = time_data - min(time_data) + fmin = 0.5/max(tt) + fmax = 48 # 48cyc/day : this cooresponds to 30 minute period, a minimum period of interest. #n0 / (2.*max(tt)) + + df = 0.1/max(tt) + numf = long( ceil( (fmax-fmin)/df ) ) + num_freq_max=10000 + + if (numf>num_freq_max): + numf = num_freq_max + df = (fmax - fmin)/numf + freqin = fmax - df*arange(numf,dtype=float) + + om = 2.*pi*freqin + frequencies = om/(2.*pi) + else: + frequencies = numpy.array([1]) + + return frequencies + diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/gen_or_imp.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/gen_or_imp.py new file mode 100644 index 00000000..b1bc31f2 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/gen_or_imp.py @@ -0,0 +1,12 @@ +import numpy + +class gen_or_imp(object): + name = 'gen_or_imp' + def make_dics(self): + self.signalgen = {'source':self.name,'data':{}} + self.signaldata = self.signalgen['data'] + def sub_dics(self,where): + where['input'] = {} # to receive time, flux and rms data from the generators + where['features'] = {} # to receive the extracted features later one + where['inter'] = {} # to receive intermediary features later on (not a single number, but useful for extractors down the line) + return where['input'] \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/generator.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/generator.py new file mode 100644 index 00000000..66950d89 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/generator.py @@ -0,0 +1,58 @@ +from __future__ import absolute_import +import numpy +from .storage import storage + +from .gen_or_imp import gen_or_imp + +class generator(gen_or_imp): + name = 'generator' + def __init__(self,signals_list=[]): + self.storer = storage() + self.signals_list = signals_list + def ampgen(self): + amp = (10.0+10.0*float(numpy.random.rand(1))) # one random number determines the amplitude between 10 and 20 + return amp + def tgen(self): # x axis (time) + return numpy.arange(500,dtype=float) #number of data points + def fgen(self): + frequencies = self.t / len(self.t) #evenly spaced data + def dcgen(self): + return(-10 + 20*float(numpy.random.rand(1))) # sets dc level randomly between -10 and +10 + def rgen(self): + return(float(numpy.random.rand(1))) # one random number determines the period + def pgen(self): + return(30) #period + def randomsine(self): #generates a random sine wave + self.set_vars() + s = self.dc + self.amp * numpy.sin(2*numpy.pi*self.t*(self.r+1)/self.p) # if r=0, period=p, if r=1, period = p/2 + return(s) + def noise(self,stdev_in = 1.0,size_in=1): #gaussian with standard deviation as input + # gauss = numpy.random.normal(loc=0.0,scale=stdev,size=size2) #gaussian noise signal in numpy + gauss = numpy.random.normal(loc=0.0,scale=stdev_in,size=size_in) + # return numarray.array(list(gauss)) #convert to numarray (in a horrible fashion) because couldn't plot with numpy + return gauss + def set_vars(self): # sets all the variables + self.t = self.tgen() + self.f = self.fgen() + self.r = self.rgen() + self.amp = self.ampgen() + self.p = self.pgen() + self.dc = self.dcgen() + def generate(self,stdev = 1.0): + self.stdev = stdev + self.s = self.randomsine() + self.n = self.noise(stdev_in=self.stdev,size_in=len(self.s)) # generate noise with correct length + self.set_outputs() + self.store(self.signalgen) + def set_outputs(self): + self.make_dics() + self.for_input = self.sub_dics(self.signaldata) + self.for_input['period']=(self.p/(self.r+1)) + self.for_input['amplitude']=self.amp + self.for_input['time_data']=self.t + self.for_input['flux_data']=(self.s+self.n) + self.for_input['clean_flux_data']=self.s + self.for_input['dc_real']=self.dc + self.for_input['frequencies'] = self.f + def store(self,data): + self.storer.store(data,self.signals_list) diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/lin_inc_gen.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/lin_inc_gen.py new file mode 100644 index 00000000..ed61e944 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/lin_inc_gen.py @@ -0,0 +1,18 @@ +from __future__ import absolute_import +import numpy +from .storage import storage + +from .sgwindn_gen import sgwindn_gen + +class lin_inc_gen(sgwindn_gen): #data with a slope + name = 'linearly increasing generator' + def slopegen(self): + a = float(numpy.random.normal(loc=0.1,scale=2,size=1)) + return a + def set_vars(self): + super(lin_inc,self).set_vars() + self.a = self.slopegen() + def set_outputs(self): + super(lin_inc,self).set_outputs() + self.for_input['real_slope'] = self.a + self.for_input['flux_data']=self.signalgen['flux_data'] + self.t * self.a \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/montecarlo_gen.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/montecarlo_gen.py new file mode 100644 index 00000000..bfdff93b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/montecarlo_gen.py @@ -0,0 +1,33 @@ +from __future__ import absolute_import +import numpy + +from .gen_or_imp import gen_or_imp + +class montecarlo_gen(gen_or_imp): + name = "montecarlo bootstrap generator" + def generate(self,dic,output): + inputdic = dic['input'] + rms = inputdic['rms_data'] + self.time_data = inputdic['time_data'] + # 200712076 dstarr try/excepts this: + try: + self.frequencies = inputdic['frequencies'] + except: + self.frequencies = numpy.array([]) + noise_signal = [] + for i in range(len(rms)): + noise = float(numpy.random.normal(loc=0.0,scale=rms[i],size=1)) + noise_signal.append(noise) + self.s = numpy.array(noise_signal) + self.set_outputs() + self.store(self.signalgen,output) + def set_outputs(self): + self.make_dics() + self.for_input = self.sub_dics(self.signaldata) + self.for_input['time_data'] = self.time_data + self.for_input['flux_data'] = self.s + self.for_input['frequencies'] = self.frequencies + def store(self,data,output): + from ..signal_objects import signal + signal_obj = signal(data,register=False) + output.append(signal_obj) diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/sgwindn_gen.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/sgwindn_gen.py new file mode 100644 index 00000000..5ec36bd4 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/sgwindn_gen.py @@ -0,0 +1,33 @@ +from __future__ import absolute_import +import numpy +from .storage import storage + +from .generator import generator + +class sgwindn_gen(generator): #signal with individual noise (each data point has a different standard deviation) + name = "signal with individual noise" + def noise(self,stdev_in = 1.0,size_in=1): #gaussian with standard deviation as input + #indiv_noise_std = abs(numpy.random.normal(loc=stdev_in,scale=1.0,size=size_in)) # each point gets a different noise with a different st. dev., absolute value avoids negative values (not perfect, could be linear instead of gaussian) + indiv_noise_std = numpy.random.rand(size_in)+1 +# indiv_noise_std[:] = 1 +# indiv_noise_std[5] = 20 +# indiv_noise_std[2] = 20 + indiv_noise = [] + for i in range(size_in): + noise = float(numpy.random.normal(loc=0.0,scale=indiv_noise_std[i],size=1)) + indiv_noise.append(noise) +# print 'indiv_noise_std',numpy.array(indiv_noise_std).sum(),'n','indiv_noise',numpy.array(indiv_noise).sum() + return (indiv_noise_std,indiv_noise) + def generate(self,stdev = 1.0): + self.stdev = stdev + self.s = self.randomsine() +# self.s = 5 * numpy.ones(len(self.t)) + self.noise_tuple = self.noise(stdev_in=self.stdev,size_in=len(self.s)) + self.n = self.noise_tuple[1] + self.set_outputs() + self.store(self.signalgen) + def set_vars(self): + super(sgwindn_gen,self).set_vars() + def set_outputs(self): + super(sgwindn_gen,self).set_outputs() + self.for_input['rms_data'] = self.noise_tuple[0] \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/storage.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/storage.py new file mode 100644 index 00000000..e22a3435 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/storage.py @@ -0,0 +1,14 @@ +import numpy +from ..signal_objects import signal_generator, signal_with_bands, signal_xml, signal + +class storage(object): + def store(self,signalfromgen,signals_list, register=True): + if signalfromgen['source'] =='generator': + signals_list.append(signal_generator(signalfromgen, register=register)) + elif signalfromgen['source'] == 'vizier cepheids': + signals_list.append(signal_with_bands(signalfromgen, register=register)) + elif signalfromgen['source'] == 'xml': + # generally going here... + out = signal_xml(signalfromgen, register=register) + signals_list.append(out) + else: signals_list.append(signal(signalfromgen, register=register)) diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/uneven_sine_gen.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/uneven_sine_gen.py new file mode 100644 index 00000000..fe847648 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/uneven_sine_gen.py @@ -0,0 +1,25 @@ +from __future__ import absolute_import +import numpy +from numpy import log, exp, random, ones, arange +from .storage import storage + +from .sgwindn_gen import sgwindn_gen + +class uneven_sine_gen(sgwindn_gen): + name = 'uneven sine with individual noise' + def tgen(self): + poiss = random.poisson(lam = 1000, size = 200) # 1000 = 1 day = expected time between measuremens + poiss = poiss / 1000.0 + x_axis = ones(len(poiss),dtype=float) + for i in arange(len(x_axis))[:-1]: + x_axis[i+1] = x_axis[i] + poiss[i] + return x_axis + def fgen(self): + noisetime = self.t + #var = { 'x': noisetime, 'y': noisedata, 'ylabel': 'Amplitude', 'xlabel':'Time (s)' } + N= len(noisetime) + dt = 1.0 #findAverageSampleTime(var,0) + maxlogx = log(1/(2*dt)) # max frequency is the sampling rate + minlogx = log(1/(max(noisetime)-min(noisetime))) #min frequency is 1/T + frequencies = exp(arange(N, dtype = float) / (N-1.) * (maxlogx-minlogx)+minlogx) + return frequencies \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/vizier_importer.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/vizier_importer.py new file mode 100644 index 00000000..154d5f16 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/vizier_importer.py @@ -0,0 +1,43 @@ +from __future__ import absolute_import +import numpy +from .storage import storage + +from .gen_or_imp import gen_or_imp + +class vizier_importer(gen_or_imp): + name = 'vizier cepheids' + def __init__(self,signals_list=[]): + self.storer = storage() + self.signals_list = signals_list + def generate(self): +# filepath = 'table.dat' + filepath = 'table2.dat' #smaller version for testing purposes + data = open(filepath, mode='r') + self.signalgen={} + first_line = data.readline() + self.name = first_line[0:9] + self.dates = [float(first_line[10:22])] + self.mags = [float(first_line[24:29])] + for line in data: + if line[0:9] != self.name: + self.set_outputs() + self.store(self.signalgen) + self.name = line[0:9] + self.dates=[] + self.mags=[] + jd = line[10:22] #julian date, specified from http://vizier.u-strasbg.fr/viz-bin/Cat?II/217 + mag = line[24:29] #[-0.93/16.0]? V (Johnson) magnitude + if mag != ' ': + self.dates.append(float(jd)) + self.mags.append(float(mag)) + self.set_outputs() + self.store(self.signalgen) + def set_outputs(self): + self.make_dics() + self.for_input = self.sub_dics(self.signaldata['Vmag']) + self.for_input = dict(time_data=numpy.array(self.dates,dtype=float), flux_data=numpy.array(self.mags,dtype=float), rms_data=numpy.ones(len(self.dates),dtype=float)/10.0) +# self.signalgen['time_data']= numpy.array(self.dates,dtype=float) +# self.signalgen['flux_data']= numpy.array(self.mags,dtype=float) + self.signalgen['object_name'] = self.name + def store(self,data): + self.storer.store(data,self.signals_list) \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/generators_importers/vo_timeseries.py b/mltsp/TCP/Software/feature_extract/Code/generators_importers/vo_timeseries.py new file mode 100644 index 00000000..6a441246 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/generators_importers/vo_timeseries.py @@ -0,0 +1,20 @@ + +vo_table_preamble = """ + + + +""" + +vo_timeseries_preamble = """\n""" +vo_timeseries_mjd = """ +\t\tMJD +\t\t0.0 +\t\tUTC +\t\tTOPOCENTER + + +""" + +vo_source_preamble = """\n\n\t\n""" + diff --git a/mltsp/TCP/Software/feature_extract/Code/import_vizier.py b/mltsp/TCP/Software/feature_extract/Code/import_vizier.py new file mode 100644 index 00000000..1c4ce08a --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/import_vizier.py @@ -0,0 +1,17 @@ +""" read files into numpy arrays """ +from __future__ import print_function + +import numpy +class vizier_importer(object): + def open_file(self): + filepath = 'table.dat' + data = open(filepath, mode='r') + for line in data: + jd = line[10:21] #julian date, specified from http://vizier.u-strasbg.fr/viz-bin/Cat?II/217 + mag = line[23:28] #[-0.93/16.0]? V (Johnson) magnitude + if mag != ' ': + print(jd, mag) + return None +if __name__ == '__main__': + importer = vizier_importer() + importer.open_file() \ No newline at end of file diff --git a/mltsp/TCP/Software/feature_extract/Code/internal_generated_extractors_holder.py b/mltsp/TCP/Software/feature_extract/Code/internal_generated_extractors_holder.py new file mode 100644 index 00000000..e1eafe5e --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/internal_generated_extractors_holder.py @@ -0,0 +1,12 @@ +glob_internally_generated_extractors = {} # 20080508: dstarr KLUDGE. Nat's Lomb Scargle algorithms generate a bunch of features, which due to the current architecture, must be represented in seperate extractor objects that are available many stacks higher (to be added to a "signal_list"). Existing architecture assumed all extractors are explicitly defined (listed as ordered __init__.py imports), but this dynamic feature-extractor generation breaks this assumption. So, I must use a global list which is accessible by signals_list related methods, and still updateable by the Nat-Lomb_scargle feature extractor. +class Internal_Gen_Extractors_Accessor: + """ Used only to allow access to a global list, by a + class which does: import feature_interfaces + + KLUDGE. + """ + def __init__(self): + global glob_internally_generated_extractors + self.glob_internally_generated_extractors = glob_internally_generated_extractors + def main(self): + pass diff --git a/mltsp/TCP/Software/feature_extract/Code/jsb_fake_data.py b/mltsp/TCP/Software/feature_extract/Code/jsb_fake_data.py new file mode 100644 index 00000000..c2b1c189 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/jsb_fake_data.py @@ -0,0 +1,62 @@ +#/bin/env python + +""" +makes some fake data for Maxime's codes +""" + +import datetime +import os, sys +import numpy +import cPickle +__version__ = "v0.01" + +class DataSet: + + def __init__(self,outname="tmp",clobber=True,odir="./"): + self.dict = None # the dictionary representation + self.xml = None # the XML representation of this data + self.outname = outname + self.odir = odir + + if outname == "time": + ## generate the outname from datetime + outname = "data" + str(datetime.datetime.now()).replace(" ","") + + if clobber: + if os.path.exists(odir + outname + ".pkl"): + os.remove(odir + outname + ".pkl") + if os.path.exists(odir + outname + ".xml"): + os.remove(odir + outname + ".xml") + + def make_dict(self): + self.data = {"B": {"t": numpy.array([23455.12,23455.23,23455.56,23455.901,23456.102,23456.9,123457.8]),\ + "f": numpy.array([12.02, 13.4, 12.00, 17.00, 12.01, 13.4, 13.56]), \ + "rms": numpy.array([0.02, 0.78, 0.05, 0.10, 0.03, 0.89, 0.45]), \ + "flux_units": "mag"},\ + "V": {"t": numpy.array([23455.12,23455.23,23455.56,23455.901,23456.102,23456.9,123457.8]),\ + "f": numpy.array([15.02, 16.5, 16.00, 19.00, 14.2, 17.6, 19.56]), \ + "rms": numpy.array([0.02, 0.78, 0.05, 0.10, -999, 0.89, -99]), \ + "flux_units": "mag"},\ + "I": {"t": numpy.array([23455.12,23455.23,23455.56,23455.901,23456.102,23456.9,123457.8]),\ + "f": numpy.array([15.02, 16.5, 17.00, 19.00, 19.2, 17.6, 11.56]), \ + "rms": numpy.array([0.2, 3.4, 5.0 , -999, 1.0, 3.0, -99.0]), \ + "flux_units": "uJy"}} + + self.dict = {"id": self.outname, "version": __version__, "lower_limit_code": -99, "upper_limit_code": -999, 'data': self.data} + + def get_dict(self): + if self.dict is None: + self.make_dict() + return self.dict + + def make_xml(self): + ## probably want to make the XML first then create the dictionary parse of it + pass + + def pickle(self): + output = open(self.odir + self.outname + ".pkl", 'wb') + cPickle.dump(self.dict, output,-1) + output.close() + return self.odir + self.outname + ".pkl", 'wb' + + diff --git a/mltsp/TCP/Software/feature_extract/Code/main.py b/mltsp/TCP/Software/feature_extract/Code/main.py new file mode 100644 index 00000000..a5ed98ab --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/main.py @@ -0,0 +1,42 @@ +""" +First, import this module +> import random_number +then run its test, assigning it a name +> sig = random_number.test() +then you can plot more things if you want, e.g.: +> sig.plots('dc') +""" +from __future__ import print_function +from __future__ import absolute_import + +from . import generators_importers + +signals_list = [] + + +def test(stdev = 1.0, clear=True, signals_list=signals_list): + """ performs a basic test and plots stuff + change the generator to sgwindn (line 13) to get an evenly sampled signal + """ +# gen = generators_importers.vizier_importer(signals_list) +# gen = generators_importers.sgwindn_gen(signals_list) + gen = generators_importers.from_xml(signals_list) +# gen = generators_importers.uneven_sine_gen(signals_list) +# gen = generators_importers.double_uneven_gen(signals_list) +# gen = generators_importers.double_sig_gen(signals_list) +# gen = generators_importers.test_lomb(signals_list) + i=0 + while i < 1: + gen.generate() + i += 1 + sig = signals_list[-1] +# sig.properties['data']['inter']['99pct significant power'].plots() + #sig.properties['data']['inter']['power'].plots() + #sig.properties['data']['inter']['pct 80 montecarlo'].plots() + #sig.properties['data']['inter']['pct 90 montecarlo'].plots() + #sig.properties['data']['inter']['pct 95 montecarlo'].plots() + #sig.properties['data']['inter']['pct 99 montecarlo'].plots() + return sig +def xml_print(): + for signal in signals_list: + print(signal.xml_print.xml()) diff --git a/mltsp/TCP/Software/feature_extract/Code/plotters.py b/mltsp/TCP/Software/feature_extract/Code/plotters.py new file mode 100644 index 00000000..34605d3a --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/plotters.py @@ -0,0 +1,32 @@ +from __future__ import print_function +from __future__ import absolute_import +try: + from pylab import * +except: + pass +from numpy import * +import numpy +from . import feature_interfaces + + +class plotter(object): + def plots(self,properties,what = 'data'): + if what =='data': + plot(properties['time_data'],properties['flux_data'],marker='d',label='signal data') + elif what =='real': + plot(properties['time_data'],properties['clean_flux_data'],label='clean data from generator',marker='o') + elif what =='dc_real': + dc_line = ones(len(properties['time_data']),dtype=float) + dc_line[:] = properties['dc_real'] + plot(properties['time_data'],dc_line,label='real dc from generator') + else: +# try: + extractor = feature_interfaces.extractor_fetch(what) + if what in properties: + pass + else: + print(what,'not available') + return None + extractor.plots(properties) +# except KeyError: +# print "can't plot", what diff --git a/mltsp/TCP/Software/feature_extract/Code/signal_objects.py b/mltsp/TCP/Software/feature_extract/Code/signal_objects.py new file mode 100644 index 00000000..8bfdd182 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/signal_objects.py @@ -0,0 +1,131 @@ +from __future__ import print_function +from __future__ import absolute_import +from . import feature_interfaces +from . import plotters +from . import FeatureExtractor + +#global_list_of_extractors = [] # Global KLUDGE: # 20071215 dstarr. Apparently this is done since feature_interfaces.initialize() is called outside of everything +global_list_of_extractors = feature_interfaces.initialize([]) +#20090321#import amara + +class signal(object): + def __init__(self,data,register=True): + self.properties = data + self.choose_plotter() + if register: self.register_signal() + def choose_plotter(self): + self.plotter = plotters.plotter() + def update(self,extract_method): + control = self.properties.copy() + result = extract_method.extr(self.properties) + assert (control == self.properties), "this bastard changed my dictionary" # this is just a test, can be removed if we trust our code + write_where = self.find_where() + self.write_result(write_where,result) + return result + def write_result(self,write_where,result): + """ the type (class) of result I get informs me of where to put it """ + if isinstance(result,FeatureExtractor.Feature): + write_where['features'][result.extname] = result + elif isinstance(result,FeatureExtractor.Intermediary): + write_where['inter'][result.extname] = result + else: raise "weird kinda of result, don't know what to do with it" + def register_signal(self, initialize = True): + """ says to the interface: i'm interested in hearing about new features + initialize determines whether active features should immediately be applied + """ + feature_interfaces.feature_interface.register_signal(self, \ + global_list_of_extractors, initialize=initialize) + def remove_signal(self): + """ says to the interface: I don't care about new features anymore """ + feature_interfaces.feature_interface.remove_signal(self) + #def plots(self,what = 'data'): + # self.plotter.plots(what) + def find_where(self,band=None): + return self.properties['data'] + def plots(self,list_what,band=None): + self.iplot(list_what,band) + def iplot(self,list_what,band=None): + for what in list_what: + self.plotter.plots(self.find_where(band)['input'],what) + plotters.grid(True) + plotters.legend() + def xml_print(self): + xml = amara.create_document(u"root") + xml_where = xml + waiting_dics = [] + dic = self.properties + while 1: + for key in dic: + value = dic[key] + xml_where[unicode(key)] = None + if isinstance(value,dict): + waiting_dics.append((value,xml_where[unicode(key)])) + if isinstance(value,ResultObject): + xml_where[unicode(key)] = value.xml_print() + else: + xml_where[unicode(key)] = value + try: + next_dic = waiting_dics.pop() + except IndexError: + break + dic = next_dic[0] + xml_where[1] + return xml + + + + + +class signal_generator(signal): #signal from random sine wave generator + pass +class signal_with_bands(signal): + def update(self,extract_method): + for key in self.properties['data'].keys(): + if key == 'multiband': + continue + elif 'NOMAD' in key: + # 20110517: dstarr adds this case since I want NOMAD color info available to color_diff_extractor.py, but I do not want to extract features for this "*:NOMAD" band. + continue + elif 'extinct_' in key: + # 20110517: dstarr adds this case since I want (NED extinction) color info available to color_diff_extractor.py, but I do not want to extract features for this "extinct_*" band. + continue + if isinstance(extract_method,FeatureExtractor.ContextExtractor): + write_where = self.find_where(band='multiband') + myband = 'multiband' + else: + write_where = self.find_where(band=key) + myband = key + result = extract_method.extr(self.properties.copy(),band=myband) # we could decide not to send a copy if we trust our code + if isinstance(extract_method,FeatureExtractor.FeatureExtractor): + # 20080508: dstarr adds condition: + if not extract_method.internal_use_only: + write_where['features'][result.extname] = result + elif isinstance(extract_method,FeatureExtractor.InterExtractor): + write_where['inter'][result.extname] = result + else: raise "weird kinda of result, don't know what to do with it" + #self.write_result(write_where,result) + def default_band(self): + print("Warning: using default band") + return 'Vmag' + def choose_plotter(self): + self.plotter = plotters.plotter() + def prinprop(self,list_what,band=None): + if band == 'all': + for aband in self.properties['data']: + print(aband, end=' ') + self.iprint(list_what,aband) + else: self.iprint(list_what,band) + def iprint(self,list_what,band=None): + for what in list_what: + print(self.find_where(band)[what]) + def plots(self,list_what,band=None): + if band == 'all': + for aband in self.properties['data']: + self.iplot(list_what,aband) + else: self.iplot(list_what,band) + def find_where(self,band=None): + return self.properties['data'][band] +class signal_xml(signal_with_bands): + def default_band(self): + return 'z' + diff --git a/mltsp/TCP/Software/feature_extract/Code/source_5.xml b/mltsp/TCP/Software/feature_extract/Code/source_5.xml new file mode 100755 index 00000000..700b52a5 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/Code/source_5.xml @@ -0,0 +1,238 @@ + + + + + + + 5 + + Best positional information of the source + + + 49.599486 + -1.005111 + + + 0.000125 + 0.000066 + + + + + + MJD + 0.0 + UTC + TOPOCENTER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
53270.41134117.6857000.041329
53272.46131117.6663000.046804
53286.43003017.7123000.032254
53288.38852417.6867000.051716
53294.43619717.7229000.040919
53296.38317917.6931000.044321
53296.38318017.7411000.041375
53298.43297317.6884000.042116
53302.38419417.6843000.030654
53312.33970417.6899000.034576
53314.34092317.6931000.056407
53319.32872217.6810000.046264
53616.44527517.6882000.040836
53635.41495418.0454000.040259
53639.45356417.6447000.043643
53644.40061117.6586000.034638
53657.41161417.6959000.049311
53663.39616317.6659000.031594
53665.37413517.6769000.058743
53668.38576518.1018000.043119
53669.47337317.6860000.041188
53670.39061617.6645000.036046
53673.35860317.6835000.041370
53673.35860417.6897000.057846
53675.35549117.6950000.030486
53676.47514117.6952000.063373
53680.36318917.6859000.053413
53683.42173917.7340000.047263
53683.42173917.6620000.044193
53686.36262017.7012000.044801
53686.36262017.7014000.044801
53687.42000317.6440000.047445
53704.34839917.6749000.033465
53989.44442217.6531000.034296
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
53270.41051119.2507000.038969
53272.46048119.2482000.055625
53286.42920119.2861000.038094
53288.38769519.2795000.040437
53294.43536719.3292000.052702
53296.38235019.3364000.047206
53296.38235119.3147000.059881
53298.43214419.2584000.044873
53302.38336519.2526000.047807
53312.33887519.2543000.049523
53314.34009419.2623000.046755
53319.32789319.3381000.045264
53616.44444619.2776000.045162
53635.41412519.5885000.059270
53639.45273519.2890000.040322
53644.39978119.2762000.043673
53657.41078519.2291000.050465
53663.39533319.2804000.068624
53665.37330619.3149000.046510
53668.38493519.7335000.066961
53669.47254419.2751000.060263
53670.38978619.2640000.076813
53673.35777419.1723000.045211
53673.35777519.2684000.042855
53675.35466119.3207000.046379
53676.47431119.3224000.130695
53680.36235919.2532000.042119
53683.42090919.1668000.075298
53683.42091019.2456000.075562
53686.36179019.2750000.057835
53686.36179019.2736000.057799
53687.41917319.3426000.151653
53704.34757019.2538000.057007
53989.44359319.2501000.051050
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
53270.41217023.2498001.143020
53272.46214022.6851000.938187
53286.43086023.5598003.048710
53288.38935423.1465001.323180
53294.43702623.1535001.677210
53296.38400823.5818002.352370
53296.38401023.4943002.635590
53298.43380324.6255004.984090
53302.38502324.0399004.001130
53312.34053422.5947001.484760
53314.34175324.3172005.074530
53616.44610423.2508001.963430
53639.45439322.8541001.478390
53644.40144023.1848001.147320
53657.41244322.7843001.750640
53665.37496421.7795000.651994
53668.38659423.0277002.455680
53669.47420221.9493001.303060
53673.35943222.9054001.052870
53673.35943322.8289000.969334
53675.35632023.4334001.927450
53676.47597022.6141004.844550
53680.36401824.0609002.865830
53687.42083222.4633003.738140
53704.34922923.2845002.433910
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
53270.41299916.8002000.027766
53272.46296916.7914000.049898
53286.43168916.8202000.040585
53288.39018316.7999000.063134
53294.43785516.7544000.050145
53296.38483816.8381000.049485
53296.38483916.8318000.052168
53298.43463216.8186000.033707
53302.38585316.7998000.038331
53312.34136316.8135000.037141
53314.34258216.7897000.033297
53319.33038116.8218000.050019
53616.44693416.8327000.051908
53635.41661217.2120000.043513
53639.45522316.7852000.033824
53644.40226916.8117000.030515
53657.41327316.8241000.043399
53663.39782116.8320000.033884
53665.37579416.8001000.033699
53668.38742317.2450000.053306
53669.47503216.8220000.041048
53670.39227416.8030000.053379
53673.36026216.7776000.046923
53673.36026316.7912000.056218
53675.35714916.8196000.051289
53676.47679916.7799000.070141
53680.36484716.8217000.033354
53683.42339716.7517000.049551
53683.42339816.7645000.045812
53686.36427816.8042000.032167
53686.36427816.8045000.032169
53687.42166116.8360000.117574
53704.35005816.8028000.041088
53989.44608116.7798000.042455
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
53270.41382820.8905000.107877
53272.46379820.6974000.109803
53286.43251820.8000000.106505
53288.39101220.7181000.082267
53294.43868420.8085000.083916
53296.38566720.8226000.098285
53296.38566820.8301000.102414
53298.43546120.7935000.087782
53302.38668220.7631000.128557
53312.34219220.7762000.140037
53314.34341120.8673000.114967
53319.33121020.8611000.127806
53616.44776320.8364000.112060
53635.41744221.3705000.259291
53639.45605220.8336000.122020
53644.40309820.8017000.078068
53657.41410220.7693000.126028
53663.39865020.8817000.252847
53665.37662320.8879000.148609
53668.38825221.3303000.236375
53669.47586120.8858000.187625
53670.39310320.6728000.114803
53673.36109120.8267000.101058
53673.36109220.8531000.102847
53675.35797820.8497000.101587
53676.47762820.7022000.262899
53680.36567620.8101000.086217
53683.42422620.6025000.145086
53683.42422720.5896000.145704
53686.36510720.8755000.188344
53686.36510720.8799000.188345
53687.42249120.6403000.437927
53704.35088720.8357000.112867
53989.44691020.8455000.187559
+
+
+
diff --git a/mltsp/TCP/Software/feature_extract/Code/source_plot_5.png b/mltsp/TCP/Software/feature_extract/Code/source_plot_5.png new file mode 100755 index 0000000000000000000000000000000000000000..68e0f50520af0e85d2924055f4d40466c6cec13a GIT binary patch literal 48677 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�aQBrwiX{p>z?Z0Y#VChkRiD?8EVwZ>fK!W|2|g4#KZ(J+b|l`;y`wg_@qyOXt8@i z12+fE9!h_kQW@zbM#C%W&M^?$E`c1W^l*w>9)u!k7|^rhw$T}}v3Gs;hpmxDGH^!R zhZ(Pl#O)FzN{E>$1@*hYF^yT zk4Vm#M&2e*&$#EeOn<)!`9jMg|WQ$)C;5rC5~3+VVPoH z5fqr6ytxgH&fqT;^=xNFc^D;pD(!K9uOC1Z#r7>tf(UYSMNp9(DyBOEOnf}v^HOr1 zeq8CGt+co10#blt(;iT5t|lBJlpfL;2&ifsiy`{=K;u3#Z~DjDeEh#AdGyY%@iQyu zQqULf+oLx=nFrO#r{MP1-qjY)SFMTS#Q-WPG^bcd0x2r|cwKhP!K&zQJB(09{hfnq zQO!aty@aLylv{2g4rFxbK@G3T>FGx^OY<>}v)bkveTRR^P(|KiGQJPx;ZdqP^=g@$ z&wJHGlzi&{1B2o~kigVOEFd3Bt`OP&Al1KNhP{T5D1Mm`RvCb`s|vMM`}%zQ+wPjA z#8cw6^b=>lsFexwvviTVEU)fAf*R`;^zTWX=2RRUd~EC4i)@O-JbLs~;G?k-jq~C9 z+BGp8dZ#)`t=`>vYmS$Z>S*t1EVhGs@B$>QFfHJ-*~9*%X||`m(~kC%#~NXS1rPI- zW#4}MDj21y&ocd6hLe?R_i7={Az~NTa#+49z_f#mWI!cmFd==p^vkRO!*97%c$WN_5U%UrG2<&#`dG$i>o}TaGG4=K zvFBJ$;-adpwLYXz0n+NGrpz5AoMkE71#Z#UW{c>1{^(*MsVHljugNaHMgY+W=H<(* zcC{2uyrA%@!`|#ieI&Qlz@q};(7)|R#}m%Zyy!YD)LQ17XG>G#zMK&RfqD+J#D#U% zCQ;W4*LDskCsqrz(WVrejzP7_UY*|e*;c%n7Tts7T2@CdoBlAko_-AR-z0bZ{B!;F zrBg0>e;vNR?C)}5R=&QdAMA;u(Rb!>fq*H6-vgqGJ)C;~w)+$?J$(Wcn zv6Igl>Bqjw#=gFnVu&GjkM{0|QayXcbaH6iX;g_e@~fuPxp?6YTc~Zk5|t>dJJ~PV z00ztLw#&H}WgEYQEzjd^IEAl%3~B0~tIR#JWp{0C*K37myxa|yaG8wl zX9*x+W{soB8NV0HsJT=#zw zOc113z?7I*@?I}G!((=m3ZZzYflh93Sj7l54a#V(!^>wDhIkfM*gd2eG1ha&L_O9* zZY)4!K?J4!-z)t|L^pm-Hg!A;vc}5@rD=YbsV^$z;g!O%#3f~lSJkq%3dJ$PiAp`c zG$xWHWB_Yz-4Zk}L5d3cIXqax-&_r9O2tI6TSi_f9+L@|({hS>u;45#E)$+ngkVKt zv>P1aJeP{iq2+bxaUHE1*&w}%RrC7$h{v-d?Dh(T2);Q z^l)-TTN*@F9D}&4L?5v%&CwqFPHx_Feut%jHV;LmD0}Hg$dqinHp^0t5_QdDe4iiU z;a$)7ZO42j{*BHu#@-q_!o_NU{+pYfarUdc?lJ6W0Uf}E3d%^Hg+~u5p>MFm#yhoJ z-4#a;3;o*08YG&5Yg}{>PXW)Z=LtUULpM6C!+&^gT`9D?Prw2Dh*Z9xq2*qs`~ow7 zKu~NO5lu;98};_G`GoTRm`n_lp8qUsa{Ha!RsL&jkKf{IKjAp3fTH;QAw+vgVs9U@ zNsGLrJn}#fa+`l)V+^a$M^d$Lv)YLhK^oav7g^>`^(kQd$$^9k<1H+GX3F9-JGi|?#Wfc z#)E0^mn!U;6<*|96V}XZDM^TS_jp|NcZjl7&vl`SRaA?9q#kY2e!EevffW_rlqz_( zCG~L~(^hEYn|R8qoiQ`>VR`C$@yIUd}E+GvPY3^k*7v z;ix8xH)kv$-8^I()m;C}rejiCYyQ^50Y980;tC^^DY09=Pk}tomJ&V?)YXdpf{ndP zr5b;HNItW+Ot|2tKz*Cah12ubm6wi;xW8+d2EX|iOV<8pb z;C$f1^D~a`Bzo(Tmdmh-r&~?E*g>TjP0a}``}9O7Z+kCXa&z%GXn8y6@W*f0q>N0L zF62mlFGDnAOFM-*XO!PxrowrO4(y}ay=GB85X_`PI+DF?a9-LN-LZegRBe^CnyaTS zw!5NP@3r%`(E~&<{2eaYMO-QT4VD;D-KB(639gtU7z@SA=K@@6@*#JWPG-n)HXAc- z=$kfs2!hvdSg3A88@Y5ASaEYDmx${*7+^!UZElbDWrk=~I_Zt+=)ET`e#^P>*Kp(y z1(2wf)-RuLyc9{UEa4grS=doWY=(?h>Ny|nCaL)py<~@FOAVdEnU?#R1$7;kF@2ec zCBlSY3fCpSm`BZUuO+8-%M&m+9@(Z71nIYApLz!AiJ4nOHP~qW`kOoB-O3^b8B#YG z;la=ZS{mq*P0d|v0i2f?MpIig>!D?UNwE)c-_q5+F*R{xqEJ<|TrVTzZ^s?J z|5!5LRn!c9GgPavM@sLoaxz!PxmY(rv=F#M4azDQCT4ZEtQ2Wa7f$*YoO<5+o0M0_ zac2hTie2J^ik|Oud)E`h|6nQfawZ~K`$L5SeR}F9AFlVP;k}|-79Fvyejl=@SRjZl zIwSXjYPW3AhRo29jfZx#aakZ)RHLuXX`-AC<3O9xjsOJ0P8Y> zifEW@FfQ2IVru%FZlQqpW+x}=5$3CK2X>avUm`O?e7EkkSU+dc>0h56d3nNnG9o#_ z#mdYI_1@fcv(@}!`T>#YORKW!Sm~`eqFI>K?|00T7N?iGr0jhSva22M{t1$2b^n`e zHCsn$`tzDK-H~pK6g7{YcZ3d5#ong{a9b>;sUp$~v6S)2?@Y|*!z|r!0TW7CQ1|Ds zHG842PYdHC`P;eG9nPRnKBoFP&o3ou>W%;-;_suAeV?(vCKkV%LFnzRA$=V>##Rjh zHW*z9&%Ai~`U2W<9AmTRNTEEUnHPNvsIms5iwZ%86|gh3G1h&{igbV1uv|hQuftp3 z&9K_{Pp`zonxG6?#4_7Sc5*w7i6<^#_bwz?kRU()4TNMiH(w~Mg@dK>Ig!^4zRrxDMSB28Rsu6-zll^K&YTTDH9DrZ$A@e3XVyyL# zhLH%zNzQds69^!1xV4uk>?P|Z&2ctAj?d3zMA&_80`KJg@gEO0DLtCc&qh0gNCB> z39irY$`5Td?oW~IEcD5RQVVDq86{8)*k#a3crD<|HQx1~LwWx3VUWB)gLVMYw7`oY zjl%j}cv;95h;+Gid{)h*TLkz=&VbJl|AK!P6G&B8xpe8$volg^ z{v2~QKn4o18dCDyGd4KdW$jvwY+8<$(~2Kp#jnEaj?gOEeDId-CKF=-#6AYaN1rEI z!)e9ttUgG)1w#5c65hLtNRWJf=ReK2{QSu#DJi+qI5af$5d}m+=kst~wbo!^4B~H! z>8shftHu9y^-{QEe)z1A3nKkAc&3&K@23&stB|1mZ!TUYp!1OO9W=1kfyV(xch~LJ zxp3dR_Omphm&n_^SP#?^=GYMGU&-}YpFn1S3JoIhHD7Tirp*3!LQq^bYvOAyf5W7@ zT8_hYye5Zpl;n2JFsl(ryv2f5&0DV}RJI!^=UN=LPR44hOJssk{91Ig0~JH~pZGmD zpCcA}Wz;1Po|lCH_>;}h%IaI_+&F=wuv2>193EMd_19^-8~Epda)}3uuQ+Qsn7gN% zD5?W8(RD{F9A;k%V=5dBeU3L;y+Dq3Imkl?HD`q-dEnjh>6gOWf2@<+`ij#5TJrIE zHS$9YFm7%;^Ti#zQR)K;Q2v|Dg z0!NTtsE$`P^BOI+OS-2}GUHljMze|9fwAkeej>RGi~O zN;Dd|x!wqn8k>6#9Dh?oM$E?YK1GdIc2xZ#YMgzyW*P94REPy}@&y@@t^)_i zuhKb4X(o3)NDjrW*Zy~e95f16ePEHrju=kysLt&N;ss#z``>_$D`H*0u?$w!l?ozt zo2+^ic*zEM-#<`v?t1aZe}0}OS)urB$-%!D8O~o6*(;GSzn8C1b-K~mjGsEBTxqU z{`lknuSosB3m5ih`(DBUiUog_7Yf{uL6lu=4R~gJQ!S&-|PmMeQt=zUgo& zbnM+T=OLgz*hECCOF;59gze^e#O0i4op>qnUu9%wwg-9mlHvFoL{Op$3Q&;1;HATO zL5&3I`9t9G|1TCIe{<*P(2~)7gO8?Z0uqomKLt4qU3zh^&<)Ql^~15-BG8G>~BCPD4pvB z>4V@1_7B9AW}d;r)Y?n)j6N~2_O}-xr^)r+;o-TW0KFXNi+iUGk;yR8Pn%P&2H z$z?HTO`U*$dpPvKF8B((z((fgW9i2unoFc3N*6*td>o;_Ur-qOGi{{D4zeuQAg3yx>a0+b<6!B5eGP9eweBu#iTOSK~LZG8) zuW~fQW;G|cPj}uE6O%lzvZq6o6GVfWxpefrTY+nHW$JXuJA)T&zsY{hx(f{b5&*^h zk+G3?5hti-+P}@isbR@TQ3=i;v@Lx}5>R?H7EIZ>Z@~sxJ@T zypJWOnmx(R;KvR>6SQ2)2@~A^;8bP#_?<3rT+jCfAZy3lKo!1p>i4@d-mw1CC!&mt z_n>Q{Xr9cTiDMOeT;Xg0CFHm8fKyVxK;@Wk$b{)pgArYA+0vK7FvS?m2EFDQ+=NX*Cu;ZP_V!(SN_mn(x6=0umky-u6+rX869HeOGo` z*BGcN8&wn6@jc~E3vVk=e=(nN^08{mp&gUt9lUk1g9@sX@_kG^cS^ ze^MsJUL#X3$h>lXKjAd4b9!oQ@HL+3JqIhGmRPg>*u`+Y@(ltkn--CjljN><WFxf7BWO1-Js26*&em@L-*;)LafB6IE%oZ83uBAU?Kpvb5hk7?%B}Qx zdPCh<-4r3OOZdqFvHn~?nfBJQD=Fl@%WJ`hT8u?Ev`J57$U#&6LD$0=lWk(}8gc2> zpED&sOS|A6MFE`LYNsmd35D{@zzwzc-Ob312;_+T*>ULi$4hEJ{QR>*2=By~eGvN{ z6(dCxjWOK4MI01o)x?D&gz&4A))O|G{OD{ZuD#uxyM1KJxQe{}S%Q!KmuZK<&JzL> zi2qzD;T?Ejd*Yg<<=H8FV2^3J?}z8>^7{L6{in4k(d-Th4I&vnR zt^!ZClhe$VW*v2G(*9;n4JmR$`+2>NHX9e)U`}6pl?MT&R|QX|JI9?d z9Wn4-$9JP;1zz5uNeHYzwylsTc^r%GU%yJ+xcm|uGoXg`N&n!n7sa?*YX2ULY%ZAa zjyW4ww6t*X4}V(X3y=?L62#TXN~y1bN}p6TON9o95b9IB@h8`=0kiRbW^O&#^W$-^ z3y?0wd?9(6fpd{m-;tW4Ju|!jF;88e^~u~3=rI{FtkY{@3v-5r25^II3;2!kjIb&; z;AuC^S#T#9WA=`$+ME_}%Pv7{F68dEp;6`PpENE?liXT15_zz2WA3hot5oOGs&QRXWCw^&OM!o4%8pWt@)fcM6s<#ckTl4N= zd)qSCNgy`pW8!)zd6ynBg??Y1l`AilMjo)5x^K2me!ievRk2J#|OR{eC1dr4sJPNvg`23B}LV

Z4+H|No|j~A4|cV0d3$!d>~h{%;|R@dR` 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 + + +""" + +vo_timeseries_preamble = """\n""" +vo_timeseries_mjd = """ +\t\t\tMJD +\t\t\t0.0 +\t\t\tUTC +\t\t\tTOPOCENTER +\t\t + +""" + +vo_source_preamble = """\n\n\t\n""" + diff --git a/mltsp/TCP/Software/feature_extract/MLData/__init__.py b/mltsp/TCP/Software/feature_extract/MLData/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/MLData/__init__.py @@ -0,0 +1 @@ + diff --git a/mltsp/TCP/Software/feature_extract/MLData/arffify.py b/mltsp/TCP/Software/feature_extract/MLData/arffify.py new file mode 100644 index 00000000..82a52293 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/MLData/arffify.py @@ -0,0 +1,1070 @@ +#!/usr/bin/env python + +""" +arffify + + makes ARFF files out of queries to the TCP/TUTOR DB. + +USAGE: + [0] mkdir XML + [1] In a separate window, make a tunnel to the test XML-RPC server on the linux boxes + print "ssh -L 34583:192.168.1.65:34583 lyra.berkeley.edu" + [2] Start python + +py> import arffify +py> a = arffify.Maker(search=["Cepheids","RR Lyrae - Asymmetric","Mira","W Ursae Majoris",]) ## search is a list of string names to look up + +""" +from __future__ import print_function +from __future__ import unicode_literals +import os,sys +#try: +# import amara +#except: +# pass +try: + import xmlrpclib +except ImportError: + import xmlrpc.client as xmlrpclib +import urllib +import copy +import datetime +try: + import MySQLdb +except: + pass +import time +import glob + +from ...feature_extract.Code.extractors import mlens3 + +# pre 20091117: +#skip_features = ['beyond1std', 'chi2', 'chi2_per_deg', 'dc', 'example', 'first_freq', 'freq1_harmonics_freq_1', 'freq1_harmonics_freq_2', 'freq1_harmonics_freq_3', 'freq2_harmonics_amplitude_error_1', 'freq2_harmonics_amplitude_error_2', 'freq2_harmonics_amplitude_error_3', 'freq2_harmonics_freq_1', 'freq2_harmonics_freq_2', 'freq2_harmonics_freq_3', 'freq3_harmonics_amplitude_error_1', 'freq3_harmonics_amplitude_error_2', 'freq3_harmonics_amplitude_error_3', 'freq3_harmonics_freq_1', 'freq3_harmonics_freq_2', 'freq3_harmonics_freq_3', 'freq_searched_max', 'max', 'median', 'min', 'old_dc', 'ratio21', 'ratio31', 'ratio32', 'ratioRUfirst', 'second', 'std', 'third', 'wei_av_uncertainty', 'weighted_average', 'distance_in_arcmin_to_nearest_galaxy', 'distance_in_kpc_to_nearest_galaxy', 'freq1_harmonics_nharm', 'freq2_harmonics_nharm', 'freq2_harmonics_signif', 'freq3_harmonics_nharm', 'freq3_harmonics_signif', 'percent_amplitude', 'max_slope'] #, 'n_points' + +skip_features =['chi2', + 'chi2_per_deg', + 'dc', + 'distance_in_arcmin_to_nearest_galaxy', + 'distance_in_kpc_to_nearest_galaxy', + 'example', + 'first_freq', + 'freq1_harmonics_freq_1', + 'freq1_harmonics_freq_2', + 'freq1_harmonics_freq_3', + 'freq1_harmonics_nharm', + 'freq2_harmonics_amplitude_error_1', + 'freq2_harmonics_amplitude_error_2', + 'freq2_harmonics_amplitude_error_3', + 'freq2_harmonics_freq_1', + 'freq2_harmonics_freq_2', + 'freq2_harmonics_freq_3', + 'freq2_harmonics_nharm', + 'freq2_harmonics_signif', + 'freq3_harmonics_amplitude_error_1', + 'freq3_harmonics_amplitude_error_2', + 'freq3_harmonics_amplitude_error_3', + 'freq3_harmonics_freq_1', + 'freq3_harmonics_freq_2', + 'freq3_harmonics_freq_3', + 'freq3_harmonics_nharm', + 'freq3_harmonics_signif', + 'freq_searched_max', + 'max', + #'max_slope', # 2010525 dstarr re-enables this since it looks like the algorithm might have worth when looking at old .arffs and also I dont recall why I disabled it + 'median', + 'min', + 'old_dc', + #'percent_amplitude', # 2010517 dstarr re-enables this to see if useful, althoguh return output of extractor looks kludgey and nonlinear. + 'ratio21', + 'ratio31', + 'ratio32', + 'ratioRUfirst', + 'second', + #'std', # 2010525 dstarr re-enables this since skew has been useful (although it may not be useful) + 'third', + 'wei_av_uncertainty', + 'weighted_average', + 'closest_in_light', + 'closest_light_absolute_bmag', + 'closest_light_angle_from_major_axis', + 'closest_light_angular_offset_in_arcmin', + 'closest_light_dm', + 'closest_light_physical_offset_in_kpc', + 'closest_light_ttype', + 'freq1_harmonics_amplitude_error_0', + 'freq1_harmonics_moments_err_0', + 'freq1_harmonics_peak2peak_flux_error', + 'freq1_harmonics_rel_phase_error_0', + 'freq2_harmonics_amplitude_error_0', + 'freq2_harmonics_moments_err_0', + 'freq2_harmonics_rel_phase_error_0', + 'freq3_harmonics_amplitude_error_0', + 'freq3_harmonics_moments_err_0', + 'freq3_harmonics_rel_phase_error_0', + #20120126 commentout'n_points', # This is required for internal use by plugin_classifier.py Thankfully it doesn't seem to be used much in classifier decision trees, though. + 'sdss_best_dm', + 'sdss_best_offset_in_kpc', + 'sdss_best_offset_in_petro_g', + 'sdss_best_z', + 'sdss_best_zerr', + 'sdss_dered_g', + 'sdss_dered_i', + 'sdss_dered_r', + 'sdss_dered_u', + 'sdss_dered_z', + 'sdss_dist_arcmin', + 'sdss_in_footprint', + 'sdss_nearest_obj_type', + 'sdss_petro_radius_g', + 'sdss_photo_rest_abs_g', + 'sdss_photo_rest_abs_i', + 'sdss_photo_rest_abs_r', + 'sdss_photo_rest_abs_u', + 'sdss_photo_rest_abs_z', + 'sdss_photo_rest_gr', + 'sdss_photo_rest_iz', + 'sdss_photo_rest_ri', + 'sdss_photo_rest_ug', + 'sdss_chicago_class', # 2010525 dstarr adds + 'sdss_first_flux_in_mjy', # 2010525 dstarr adds + 'sdss_first_offset_in_arcsec', # 2010525 dstarr adds + 'sdss_spec_confidence', # 2010525 dstarr adds + 'sdss_rosat_offset_in_arcsec', + 'sdss_rosat_offset_in_sigma'] + +positional_features = ["ecpb", "galb", "gall", "ecpl"] #"distance_in_arcmin_to_nearest_galaxy", "distance_in_kpc_to_nearest_galaxy" + + +def get_class_abrv_lookup_from_header(train_arff_fpath): + """ Given a .arff which is to be used for training, return the + {class_abrev:class_fullname} dictionary parsed from the header, if + it exists. + """ + lines = open(train_arff_fpath).readlines() + class_lookup_dict = {} + for line in lines: + if line[:20] == "%% class_lookup_dict": + exec(line[3:]) + break # get out of loop + return class_lookup_dict + +class Maker: + + #print "ssh lyra.berkeley.edu -c blowfish -X -L 13306:127.0.0.1:3306" + # 'skip_sci_class_list':['vs', 'GCVS', 'NEW', ''], # Science classes to skip from adding to .arff + # 'disambiguate_sci_class_dict':{'CEP':'c', # Ambiguous key classes are given value class_name + # 'dc':'c', + # 'RR':'rr-lyr', + # 'Nonstellar':'ML', + # 'Pulsating':'puls', + # }, + pars = {'tcptutor_hostname':'lyra.berkeley.edu', + 'tcptutor_username':'pteluser', + 'tcptutor_password':'Edwin_Hubble71', + 'tcptutor_port': 3306, # 13306, + 'tcptutor_database':'tutor', + 'classdb_hostname':'127.0.0.1', #'192.168.1.25', + 'classdb_username':'dstarr', #'pteluser', + 'classdb_port': 3306, + 'classdb_database':'source_test_db', #'source_db', + 't_sleep':0.2, + 'number_threads':4, + 'tcp_tutor_srcid_offset':100000000, + 'local_xmls_fpath':os.path.expandvars('$HOME/scratch/TUTOR_vosources'), + 'skip_sci_class_list':['','Variable Stars'], #20110202: dstarr excludes 'UNKNOWN', since unclassified ASAS sources need o be included in the arff files. # Science classes to skip from adding to .arff + 'disambiguate_sci_class_dict':{'Pulsating Variable Stars':'Pulsating Variable',#'Pulsating Variable':'Pulsating Variable Stars', #20100702 disable: 'Pulsating Variable Stars':'Pulsating Variable', # Ambiguous key classes are given value class_name + 'Cepheid Variable':'Classical Cepheid', + 'Cepheids':'Classical Cepheid', + 'Classical Cepheids':'Classical Cepheid', #20091115: dstarr adds + 'Classical Cepheids, Symmetrical':'Classical Cepheid', # 20091119: kludgy subclass assumption + 'Symmetrical':'Classical Cepheid', # 20091119: kludgy subclass assumption + 'Classical Cepheid Multiple Modes Symmetrical':'Multiple Mode Cepheid', #20091115: dstarr adds + 'RR-Lyrae stars, subtype ab':'RR Lyrae, Fundamental Mode', #20091117: would like: 'RR-Lyrae stars, subtype ab':'RR Lyrae, Fundamental Mode', + 'RR Lyrae - Near Symmetric':'RR Lyrae - First Overtone', + 'Contact Systems':'Binary', + 'Delta-Scuti stars':'Delta Scuti', + 'Algol (Beta Persei)':'Beta Persei', + 'Algol, with third?':'Beta Persei', + 'Algol, semidetached, pulsating component':'Beta Persei', + 'Beta Cephei, massive, rapidly rotating, multiperiodicity':'Beta-Cephei stars', + }, #20091117: disabling this since seems incorrect since seperate sub-types: 'RR Lyrae, First Overtone':'RR Lyrae, Fundamental Mode', + 'hardcoded_class_abrv_lookup': \ + {'ACV': 'Alpha2 Canum Venaticorum', + 'ACVO': 'Alpha2 CVn - Rapily Oscillating', + 'ACYG': 'Alpha Cygni', + 'AGN': 'Active Galactic Nuclei', + 'AM': 'AM Her', + 'AR': 'Detached - AR Lacertae', + 'BCEP': 'Beta Cephei', + 'BCEPS': 'Beta Cephei - Short Period', + 'BE': 'Be star', + 'BL-Lac': 'BL Lac', + 'BLBOO': 'Anomalous Cepheids', + 'BLZ': 'Blazar', + 'BY': 'BY Draconis', + 'CEP': 'Cepheids', + 'CEP(B)': 'Cepheids - Multiple Modes', + 'CW': 'W Virginis', + 'CWA': 'W Virginis - Long Period', + 'CWB': 'W Virigins - Short Period', + 'Cataclysmic': 'Cataclysmic (Explosive and Novalike) Variable Stars', + 'D': 'Detached', + 'DCEP': 'Delta Cep', + 'DCEPS': 'Delta Cep - Symmetrical', + 'DM': 'Detached - Main Sequence', + 'DQ': 'DQ Herculis Variable (Intermediate Polars)', + 'DS': 'Detached - With Subgiant', + 'DSCT': 'Delta Scuti', + 'DSCTC': 'Delta Scuti - Low Amplitude', + 'DW': 'W Ursa Majoris', + 'DrkMatterA': 'Dark Matter Anniliation Event', + 'E': 'Eclipsing Binary Systems', + 'EA': 'Algol (Beta Persei)', + 'EB': 'Beta Lyrae', + 'ELL': 'Rotating Ellipsoidal', + 'EP': 'Eclipsed by Planets', + 'EW': 'W Ursae Majoris - W UMa', + 'EWa': 'W Ursae Majoris- a', + 'EWs': 'W Ursae Majoris- s', + 'Eclipsing': 'Close Binary Eclipsing Systems', + 'Eruptive': 'Eruptive Variable Stars', + 'FKCOM': 'FK Comae Berenices', + 'FU': 'FU Orionis', + 'GCAS': 'Gamma Cas', + 'GCVS': 'Variable Stars', + 'GDOR': 'Gamma Doradus', + 'GRB': 'Gamma-ray Bursts', + 'GS': 'Systems with Supergiant(s)', + 'GalNuclei': 'Galaxy Nuclei ', + 'I': 'Irregular', + 'IA': 'Irregular Early O-A', + 'IB': 'Irregular Intermediate F-M', + 'IN': 'Orion', + 'IN(YY)': 'Orion with Absorption', + 'INA': 'Orion Early Types (B-A or Ae)', + 'INB': 'Orion Intermediate Types (F-M or Fe-Me)', + 'INT': 'Orion T Tauri', + 'IS': 'Rapid Irregular', + 'ISA': 'Rapid Irregular Early Types (B-A or Ae)', + 'ISB': 'Rapid Irregular Intermediate to Late (F-M and Fe-Me)', + 'K': 'Contact Systems', + 'KE': 'Contact Systems - Early (O-A)', + 'KW': 'Contact Systems - W Ursa Majoris', + 'L': 'Slow Irregular', + 'LB': 'Slow Irregular - Late Spectral Type (K, M, C, S)', + 'LC': 'Irregular Supergiants', + 'LPB': 'Long Period B', + 'LSB': 'Long Gamma-ray Burst', + 'M': 'Mira', + 'ML': 'Microlensing Event', + 'N': 'Novae', + 'NA': 'Fast Novae', + 'NB': 'Slow Novae', + 'NC': 'Very Slow Novae', + 'NEW': 'New Variability Types', + 'NL': 'Novalike Variables', + 'NR': 'Recurrent Novae', + 'Nonstellar': 'Variable Sources (Non-stellar)', + 'OVV': 'Optically Violent Variable Quasar (OVV)', + 'PN': 'Systems with Planetary Nebulae', + 'PSR': 'Optically Variable Pulsars', + 'PVTEL': 'PV Telescopii', + 'Polars': 'Polars', + 'Pulsating': 'Pulsating Variable Stars', + 'R': 'Close Binary with Reflection', + 'RCB': 'R Coronae Borealis', + 'RPHS': 'Very Rapidly Pulsating Hot (subdwarf B)', + 'RR': 'RR Lyrae', + 'RR(B)': 'RR Lyrae - Dual Mode', + 'RRAB': 'RR Lyrae - Asymmetric', + 'RRC': 'RR Lyrae - Near Symmetric', + 'RRcl': 'RR Lyrae -- Closely Spaced Modes', + 'RRe': 'RR Lyrae -- Second Overtone Pulsations', + 'RS': 'RS Canum Venaticorum', + 'RV': 'RV Tauri', + 'RVA': 'RV Tauri - Constant Mean Magnitude', + 'RVB': 'RV Tauri - Variable Mean Magnitude', + 'Rotating': 'Rotating Variable Stars', + 'SD': 'Semidetached', + 'SDOR': 'S Doradus', + 'SGR': 'Soft Gamma-ray Repeater', + 'SHB': 'Short Gamma-ray Burst', + 'SN': 'Supernovae', + 'SNI': 'Type I Supernovae', + 'SNII': 'Type II Supernovae', + 'SNIIL': 'Type II-L', + 'SNIIN': 'Type IIN', + 'SNIIP': 'Type IIP', + 'SNIa': 'Type Ia', + 'SNIa-pec': 'Peculiar Type Ia Supernovae', + 'SNIa-sc': 'Super-chandra Ia supernova', + 'SNIb': 'Type Ib', + 'SNIc': 'Type Ic', + 'SNIc-pec': 'Peculiar Type Ic Supernovae', + 'SR': 'Semiregular', + 'SRA': 'Semiregular - Persistent Periodicity', + 'SRB': 'Semiregular - Poorly Defined Periodicity', + 'SRC': 'Semiregular Supergiants', + 'SRD': 'Semiregular F, G, or K', + 'SRS': 'Semiregular Pulsating Red Giants', + 'SSO': 'Solar System Object', + 'SXARI': 'SX Arietis', + 'SXPHE': 'SX Phoenicis - Pulsating Subdwarfs', + 'TDE': 'Tidal Disruption Event', + 'UG': 'U Geminorum', + 'UGSS': 'SS Cygni', + 'UGSU': 'SU Ursae Majoris', + 'UGZ': 'Z Camelopardalis', + 'UV': 'UV Ceti', + 'UVN': 'Flaring Orion Variables', + 'UXUma': 'UX Uma', + 'WD': 'Systems with White Dwarfs', + 'WR': 'Eruptive Wolf-Rayet', + 'WR(1)': 'Systems with Wolf-Rayet Stars', + 'X': 'X-Ray Sources, Optically Variable', + 'XB': 'X-Ray Bursters', + 'XF': 'Fluctuating X-Ray Systems', + 'XI': 'X-ray Irregulars', + 'XJ': 'X-Ray Binaries with Jets', + 'XND': 'X-Ray, Novalike', + 'XNG': 'X-Ray, Novalike with Early Type supergiant or giant', + 'XP': 'X-Ray Pulsar', + 'XPR': 'X-Ray Pulsar, with Reflection', + 'XPRM': 'X-Ray Pulsar with late-type dwarf', + 'XRM': 'X-Ray with late-type dwarf, un-observed pulsar', + 'ZAND': 'Symbiotic Variables', + 'ZZ': 'ZZ Ceti', + 'ZZA': 'ZZ Ceti - Only H Absorption', + 'ZZB': 'ZZ Ceti - Only He Absorption', + 'ZZO': 'ZZ Ceti showing HeII', + 'ac': 'Alpha Cygni', + 'aii': 'Alpha2 Canum Venaticorum', + 'alg': 'Algol (Beta Persei)', + 'am': 'AM Herculis (True Polar)', + 'amcvn': 'AM Canum Venaticorum', + 'b': 'Binary', + 'bc': 'Beta Cephei', + 'be': 'Be Star', + 'bl': 'Short period (BL Herculis)', + 'bly': 'Beta Lyrae', + 'by': 'BY Draconis', + 'c': 'Cepheid Variable', + 'ca': 'Anomolous Cepheid', + 'cc': 'Core Collapse Supernovae', + 'cm': 'Multiple Mode Cepheid', + 'cn': 'Classical Novae', + 'cv': 'Cataclysmic Variable', + 'dc': 'Classical Cepheid', + 'dqh': 'DQ Herculis (Intermdiate Polars)', + 'ds': 'Delta Scuti', + 'dsm': 'Delta Scuti - Multiple Modes', + 'ell': 'Ellipsoidal', + 'er': 'ER Ursae Majoris', + 'ev': 'Eruptive Variable', + 'fk': 'FK Comae Berenices', + 'fsrq': 'Flat Spectrum Radio Quasar', + 'fuor': 'FU Orionis', + 'gc': 'Gamma Cassiopeiae', + 'gd': 'Gamma Doradus', + 'grb': 'Gamma Ray Burst', + 'gw': 'GW Virginis', + 'hae': 'Herbig AE', + 'haebe': 'Herbig AE/BE Star', + 'i': 'Type I Supernovae', + 'ib': 'Type Ib Supernovae', + 'ic': 'Type Ic Supernovae', + 'ii': 'Type II Supernovae', + 'iii': 'Three or More Stars', + 'iin': 'Type II N', + 'lamb': 'Lambda Eridani', + 'lboo': 'Lambda Bootis Variable', + 'lgrb': 'Long GRB', + 'mira': 'Mira', + 'msv': 'Multiple Star Variables', + 'n-l': 'Novalike', + 'nov': 'Novae', + 'ov': 'Orion Variable', + 'p': 'Polars', + 'pi': 'Pair Instability Supernovae', + 'piic': 'Population II Cepheid', + 'plsr': 'Pulsar', + 'psys': 'Systems with Planets', + 'puls': 'Pulsating Variable', + 'pvt': 'PV Telescopii', + 'pwd': 'Pulsating White Dwarf', + 'qso': 'QSO', + 'rcb': 'R Coronae Borealis', + 'rn': 'Recurrent Novae', + 'rot': 'Rotating Variable', + 'rr-ab': 'RR Lyrae, Fundamental Mode', + 'rr-c': 'RR Lyrae, First Overtone', + 'rr-cl': 'RR Lyrae, Closely Spaced Modes', + 'rr-d': 'RR Lyrae, Double Mode', + 'rr-e': 'RR Lyrae, Second Overtone', + 'rr-lyr': 'RR Lyrae', + 'rscvn': 'RS Canum Venaticorum', + 'rv': 'RV Tauri', + 'rvc': 'RV Tauri, Constant Mean Brightness', + 'rvv': 'RV Tauri, Variable Mean Brightness', + 'sdc': 'Symmetrical', + 'sdorad': 'S Doradus', + 'seyf': 'Seyfert', + 'sgrb': 'Short GRB', + 'shs': 'Shell Star', + 'sn': 'Supernovae', + 'sr-a': 'SRa (Z Aquarii)', + 'sr-b': 'SRb', + 'sr-c': 'SRc', + 'sr-d': 'SRd', + 'sreg': 'Semiregular Pulsating Variable', + 'srgrb': 'Soft Gamma Ray Repeater', + 'ssc': 'SS Cygni', + 'su': 'SU Ursae Majoris', + 'sv': 'Symbiotic Variable', + 'sw': 'SW Sextantis', + 'sx': 'SX Phoenicis', + 'sxari': 'SX Arietis', + 'tia': 'Type Ia Supernovae', + 'tt': 'T Tauri', + 'ttc': 'Classical T Tauri', + 'ttw': 'Weak-lined T Tauri', + 'ug': 'U Geminorum', + 'uv': 'UV Ceti Variable', + 'ux': 'UX Ursae Majoris', + 'vs': 'Variable Stars [Alt]', + 'vy': 'VY Scl', + 'wr': 'Wolf-Rayet', + 'wu': 'W Ursae Majoris', + 'wv': 'Long Period (W Virginis)', + 'wz': 'WZ Sagittae', + 'xrb': 'X Ray Burster', + 'xrbin': 'X Ray Binary', + 'zc': 'Z Camelopardalis', + 'zz': 'ZZ Ceti', + 'zzh': 'ZZ Ceti, H Absorption Only', + 'zzhe': 'ZZ Ceti, He Absorption Only', + 'zzheii': 'ZZ Ceti, With He-II'} # this is hopefully updated occasionally by a user (although seemingly pretty complete at this point). + } + + + def __init__(self,verbose=True, therange=None, dorun=True,\ + skip_class=False, local_xmls=False,\ + outfile = "maker.arff", \ + convert_class_abrvs_to_names=False, \ + search=["Cepheids","RR Lyrae - Asymmetric","RR Lyrae - Dual Mode","RR Lyrae - Near Symmetric","Cepheids - Multiple Modes"], ignore_positional_features=True, flag_retrieve_class_abrvs_from_TUTOR=False, local_xmls_fpath='', class_abrv_lookup={}, add_srcid_to_arff=False): + self.pars['local_xmls_fpath'] = local_xmls_fpath + self.add_srcid_to_arff = add_srcid_to_arff + self.skip_class = skip_class + self.local_xmls = local_xmls + self.convert_class_abrvs_to_names =convert_class_abrvs_to_names + self.flag_retrieve_class_abrvs_from_TUTOR = flag_retrieve_class_abrvs_from_TUTOR + self.verbose = True + self.outfile = outfile + self.search = search + self.skips = skip_features + + if self.flag_retrieve_class_abrvs_from_TUTOR: + self.retrieve_class_abrvs_from_TUTOR() + elif len(class_abrv_lookup) > 0: + self.class_abrv_lookup = class_abrv_lookup + else: + self.class_abrv_lookup = \ + self.pars['hardcoded_class_abrv_lookup'] + #elif self.convert_class_abrvs_to_names: + # # Obsolete to retrieve from TCP class database: + # self.populate_classname_lookup_dict() + + if ignore_positional_features: + self.skips.extend(positional_features) + if dorun: + self.run() + + + def retrieve_class_abrvs_from_TUTOR(self): + """ Retrieve : + relations from TUTOR database. + Fill self.class_abrv_lookup{} with the relation. + """ + self.db = MySQLdb.connect(host=self.pars['tcptutor_hostname'], \ + user=self.pars['tcptutor_username'], \ + passwd=self.pars['tcptutor_password'],\ + db=self.pars['tcptutor_database'],\ + port=self.pars['tcptutor_port']) + self.cursor = self.db.cursor() + select_str = "SELECT class_short_name, class_name FROM classes" # class_id + self.cursor.execute(select_str) + results = self.cursor.fetchall() + self.class_abrv_lookup = {} + for result in results: + #if self.class_abrv_lookup.has_key(result[0]): + # print "!!! ALREADY HAVE:", result[0],result[1], self.class_abrv_lookup[result[0]] + self.class_abrv_lookup[result[0]] = result[1] + + + # 20081023 Obsolete: + def populate_classname_lookup_dict(self): + """ Populate a dictionary which translates science class + abreviation names to full science class names. + """ + classdb_db = MySQLdb.connect(\ + host=self.pars['classdb_hostname'], \ + user=self.pars['classdb_username'], \ + db=self.pars['classdb_database'],\ + port=self.pars['classdb_port']) + classdb_cursor = classdb_db.cursor() + select_str = "SELECT class_short_name,class_name from classid_lookup" + classdb_cursor.execute(select_str) + results = classdb_cursor.fetchall() + # KLUDGE: There are some ?mislabeled? class abreviations, which I will clarify here: + self.class_abrv_lookup = {'ii': 'Type II Supernovae', + 'ab': 'RR Lyrae - Asymmetric', + 'bs': 'SX Phoenicis - Pulsating Subdwarfs', + 'sx': 'SX Phoenicis - Pulsating Subdwarfs', + 'c': 'RR Lyrae - Near Symmetric', + 'gd': 'Gamma Doradus', + 'mira': 'Mira', + 'ml': 'MIcrolensing Event', + 'ptcep': 'Population II Cepheid', + 'rg': 'Semiregular Pulsating Red Giants', + 'wu': 'W Ursa Majoris', + 'rrd':'Double Mode RR Lyrae' + } + for result in results: + self.class_abrv_lookup[result[0].lower()] = result[1] + + + def get_srcid_list_by_name(self,search): + + tmplist = [] + if type(search) == type("s"): + search = [search] + for s in search: + if s is None or s == "": + continue + params = urllib.urlencode({'fmt': "json", 't': "Source", 'f1': "Class_Name", "o1": "IS","v1": s}) + f = urllib.urlopen("http://lyra.berkeley.edu/tutor/pub/find_ids.php?%s" % params) + b = """a = %s""" % f.read() + exec(b) + if self.verbose: + print("[%s] %i objects returned" % (s,len(a))) + tmplist.extend([int(x) + self.pars['tcp_tutor_srcid_offset'] for x in a]) + tmplist = list(set(tmplist)) + return tmplist + + + # obsolete? : + def get_srcid_list_from_DB(self): + self.db = MySQLdb.connect(host=self.pars['tcptutor_hostname'], \ + user=self.pars['tcptutor_username'], \ + passwd=self.pars['tcptutor_password'],\ + db=self.pars['tcptutor_database'],\ + port=self.pars['tcptutor_port']) + self.cursor = self.db.cursor() + select_str = """SELECT DISTINCT sources.source_id FROM + sources WHERE EXISTS(SELECT Observations.Observation_ID FROM + Observations WHERE Observations.Source_ID = sources.Source_ID)""" + self.cursor.execute(select_str) + results = self.cursor.fetchall() + srcid_list = [] + for result in results: + srcid_list.append(result[0] + self.pars['tcp_tutor_srcid_offset']) + del self.cursor + return srcid_list + + + def run(self): + self.therange = self.get_srcid_list_by_name(self.search) + if self.local_xmls: + self.populate_features_and_classes_using_local_xmls() + else: + self.populate_features_and_classes() + self.write_arff() + #tmprange = ["100009020-100009360"] + #self.therange = self.get_srcid_list() + #self.getnums(tmprange) + #self.populate_features_and_classes() + #self.write_arff() + + + def write_arff(self, outfile='', classes_arff_str='', remove_sparse_classes=False, \ + n_sources_needed_for_class_inclusion=10, include_header=True, use_str_srcid=False): + + # TODO: form lookup dict string here: + class_lookup_dict_str = "%% class_lookup_dict={" + for abrv_class,long_class in self.class_abrv_lookup.items(): + class_lookup_dict_str += "'%s':'%s', " % (abrv_class,long_class) + class_lookup_dict_str = class_lookup_dict_str[:-2] + '}\n' + + #if type(outfile) == type(sys.stdout): + if type(outfile) == type(''): + if len(outfile) > 0: + self.outfile = outfile + + if os.path.exists(self.outfile): + os.system("rm " + self.outfile) + f = open(self.outfile,'w') + else: + # This is a file pointer, rather than a filepath string + f = outfile + if include_header: + f.write('%% date = %s\n' % str(datetime.datetime.now())) + f.write('%% \n') + f.write(class_lookup_dict_str) + f.write('%% \n') + f.write('@RELATION ts\n\n') + + self.master_features = list(self.master_features) + self.master_classes = list(self.master_classes) + # dstarr 20080526: Adding .sort() gives more consistant feature, class ordering in .arff files: self.class_abrv_lookup{} + self.master_features.sort() + self.master_classes.sort() + + if self.add_srcid_to_arff and include_header: + f.write("@ATTRIBUTE source_id NUMERIC\n") + + condensed_master_features = [] # KLUDGE: This wont contain the duplicate feature instances of 'string' and 'float' which arises from NULL as well as REAL feature values which are often contained in different vosource.xmls + # write in the feature and class defs + for fea in self.master_features: + if fea[1] == 'float': + thetype = 'NUMERIC' + condensed_master_features.append((fea[0],fea[1])) + elif (fea[0],'float') not in self.master_features: + if fea[0] == 'sdss_nearest_obj_type': + thetype = "{'galaxy','star','star_late', 'unknown', 'qso', 'hiz_qso', 'sky'}" + condensed_master_features.append((fea[0],'string')) + else: + ### NOTE: this (not-currently 20110621) commented-out case will insert strings for cases which most likely are just NONE/NULL values only (except sdss_nearest_obj_type). Weka barfs on STRING attributes, so we must exclude these from being included in .arff: + thetype = 'STRING' + condensed_master_features.append((fea[0],fea[1])) + #continue # skip this attribute/feature + else: + # NOTICE I dont append to condensed_master_features[] + continue # this is a case where 'NUMERIC' has already been written for this feature, and the stgin case probably arised from a 'None' for this feature in oune of the ningested vosource.xmls. So we skip. + #print fea + if include_header: + f.write('@ATTRIBUTE %s %s\n' % (fea[0],thetype)) + + + ########## This removes sparsely sampled classes from being written to arff + # KLUDGY, but it's 3am... + #master_classes_backup = copy.copy(self.master_classes) + if remove_sparse_classes: + master_classes_new = [] + for class_name in self.all_class_list: + if self.all_class_list.count(class_name) >= int(n_sources_needed_for_class_inclusion): + master_classes_new.append(class_name) + self.master_classes = list(set(master_classes_new)) # collapse to a single item for each class + ########## + if self.skip_class: + if len(classes_arff_str) == 0: + classes_arff_str = "@ATTRIBUTE class {'AM Her','Active Galactic Nuclei','Algol (Beta Persei)','BL Lac','Be star','Beta Cephei','Beta Lyrae','Cepheids','Close Binary with Reflection','Contact Systems','DQ Herculis Variable (Intermediate Polars)','Delta Scuti','Detached - With Subgiant','Double Mode RR Lyrae','Eclipsed by Planets','Eruptive Wolf-Rayet','Gamma Doradus','Gamma-ray Bursts','Irregular Early O-A','Irregular Supergiants','Microlensing Event','Mira','Novalike Variables','Orion T Tauri','Polars','R Coronae Borealis','RR Lyrae','RR Lyrae - Asymmetric','RR Lyrae - Near Symmetric','S Doradus','SS Cygni','SU Ursae Majoris','SX Phoenicis - Pulsating Subdwarfs','Semidetached','Semiregular - Persistent Periodicity','Semiregular - Poorly Defined Periodicity','Semiregular F, G, or K','Semiregular Pulsating Red Giants','Semiregular Supergiants','Type II Supernovae','Type Ia','Variable Stars','W Ursa Majoris','W Ursae Majoris - W UMa','Z Camelopardalis'}\n" + f.write(classes_arff_str) + # OBSOLETE: f.write("@ATTRIBUTE class {'GCVS:Eclipsing:E:EA','GCVS:Eclipsing:E:EB','GCVS:Eclipsing:E:EW','GCVS:Pulsating:CEP','GCVS:Pulsating:M','GCVS:Pulsating:RR:RRAB'}\n") + else: + f.write("@ATTRIBUTE class {%s}\n" % (",".join(["""'%s'""" % x for x in self.master_classes]))) + f.write("\n@data\n") + + for obj in self.master_list: + # # # # # # + #20081117: dstarr comments out: #if not obj['class'] in self.master_classes: + if remove_sparse_classes: + if not obj.get('class','') in self.master_classes: + continue # skip this object due to being in a sparse class + + tmp = [] + #for fea in self.master_features: + for fea in condensed_master_features: + val = "?" + if fea in obj['features']: + if fea[1] == 'float': + if ((obj['features'][fea] == "False") or + (str(obj['features'][fea]) == "inf") or + (str(obj['features'][fea]) == "nan")): + val = "?" + elif obj['features'][fea] != None: + val = str(obj['features'][fea]) + else: + if obj['features'][fea] is None: + val = "?" + else: + val = """'%s'""" % str(obj['features'][fea]) + tmp.append(val) + + ##### Unused hack: + #for fea in self.master_features: + # val = "?" + # if obj['features'].has_key(fea): + # str_fea_val = str(obj['features'][fea]) + # if ((str_fea_val == "False") or + # (str_fea_val == "inf") or + # (str_fea_val == "nan") or + # (str_fea_val == "None")): + # val = "?" + # elif fea[1] == 'float': + # val = str(obj['features'][fea]) + # else: + # val = """'%s'""" % str(obj['features'][fea]) + # tmp.append(val) + ##### + + #out_str = ",".join(tmp) + if self.add_srcid_to_arff: + if use_str_srcid: + out_str = str(obj['num']) + ',' + ",".join(tmp) + elif obj['num'].count('_') > 0: + # 20100810: dstarr adds this condition: + id_list = obj['num'].split('_') + source_id = int(id_list[0]) + if (source_id > 100000000) and (source_id < 1000000000000): + source_id -= 100000000 # TUTOR source_id case + #out_str = str(source_id) + '_' + id_list[1] + ',' + ",".join(tmp) + # 20100901: we now have error-sets info in the fname/idnum: 100149234_0.90_1.xml + out_str = str(source_id) + '_' + id_list[1] + '_' + id_list[2] + ',' + ",".join(tmp) + else: + source_id = int(obj['num']) + if (source_id > 100000000) and (source_id < 1000000000000): + source_id -= 100000000 # TUTOR source_id case + out_str = str(source_id) + ',' + ",".join(tmp) + else: + out_str = ",".join(tmp) + if self.skip_class: + out_str += ",?\n" + else: + out_str += ",'%s'\n" % (str(obj['class'])) + f.write(out_str) + #if type(outfile) != type(sys.stdout): + if type(outfile) == type(''): + f.close() + print("Wrote:", self.outfile) + + def populate_features_and_classes(self): + + self.master_list = [] + self.master_classes = [] + self.master_features = [] + self.grabber = XMLgrabber(verbose=self.verbose) + for num in self.therange: + print(num) + x = self.grabber.grab(num) + + if x is not None: + tmpdict = {} + if not self.skip_class: + theclass = self._get_class_names(x) + self.master_classes.append(theclass) + tmpdict['class'] = theclass + feat = self._get_features(x) + tmpdict.update({'num': num, 'file': os.path.basename(self.grabber.fname), 'features': feat}) + self.master_features.extend(feat.keys()) + self.master_list.append(copy.copy(tmpdict)) + + self.master_features = set(self.master_features) + self.all_class_list = copy.copy(self.master_classes) + self.master_classes = set(self.master_classes) + + + def populate_features_and_classes_using_local_xmls(self, \ + srcid_xml_tuple_list=[], \ + use_local_xml_fpaths=False): + """ Amara parse XML files/strings. + Extract features and (if available, classes) from XML_string. + + Method created by jbloom, modified by dstarr. + """ + self.master_list = [] + self.master_classes = [] + self.master_features = [] + # 20080617 dstarr disables this since it seems to be obsolete jbloom functionality: + #self.grabber = XMLgrabber(verbose=self.verbose) + + xml_fname = '' # dstarr: this variable seemes KLUDGY since it is filled with the arbitrary last value from a "for loop" + + if use_local_xml_fpaths: + if len(srcid_xml_tuple_list) == 0: + # Then we get xml-strings from disk + xml_fname_list = os.listdir(\ + self.pars['local_xmls_fpath']) + # KLUDGE: This can potentially load a lot of xml-strings into memory: + for xml_fname in xml_fname_list: + if xml_fname[-4:] != '.xml': + continue # skip this fpath + xml_fpath = "%s/%s" % (\ + self.pars['local_xmls_fpath'], xml_fname) + num = xml_fname[:xml_fname.rfind('.')] + #srcid_xml_tuple_listcosw.append((num, xml_fpath)) + srcid_xml_tuple_list.append((num, xml_fpath)) + #print "Loading:", xml_fname + #xml_string = open(xml_fpath).read() + #srcid_xml_tuple_list.append((num, xml_string)) + + for num,xml_string in srcid_xml_tuple_list: + d = mlens3.EventData(xml_string) + try: + raw_class = d.data['VOSOURCE'].get('Classifications',{}).\ + get('Classification',{}).get('class',{}).name + except: + raw_class = d.data['VOSOURCE'].get('CLASSIFICATIONS',{}).\ + get('CLASSIFICATION',{}).get('SOURCE',{}).\ + get('CLASS_SCHEMA',{}).get('CLASS',{}).get('dbname',{}) + tmpdict = {} + if (not self.skip_class) and (len(raw_class) > 0): + if self.convert_class_abrvs_to_names: + if raw_class in self.pars['skip_sci_class_list']: + print("Skipping GENERIC class:", raw_class, "for source:", num) + continue # skip this class since probably too generic to be useful for classification. + if raw_class not in self.class_abrv_lookup: + print("Skipping UNKNOWN class:", raw_class, "for source:", num) + continue # This class isn't in the lookup_dict{}, which is probably due to this class being added recently. We will skip this source. + if raw_class in self.pars['disambiguate_sci_class_dict'].keys(): + raw_class = self.pars['disambiguate_sci_class_dict'][raw_class] + theclass = self.class_abrv_lookup[raw_class] + else: + if raw_class in self.pars['skip_sci_class_list']: + print("Skipping GENERIC class:", raw_class, "for source:", num) + continue # skip this class since probably too generic to be useful for classification. + if raw_class in self.pars['disambiguate_sci_class_dict'].keys(): + raw_class = self.pars['disambiguate_sci_class_dict'][raw_class] + theclass = raw_class + self.master_classes.append(theclass) + tmpdict['class'] = theclass + feat = self._get_features(d) + tmpdict.update({'num': num, 'file': xml_fname , 'features': feat}) + self.master_features.extend(feat.keys()) + self.master_list.append(copy.copy(tmpdict)) + self.master_features = set(self.master_features) + self.all_class_list = copy.copy(self.master_classes) + self.master_classes = set(self.master_classes) + + + def generate_arff_line_for_vosourcexml(self, num='', xml_fpath=''): + """ Given a vosource.xml fpath, calculate the structures and possibly + .arff line for that source. + This is intended to be called by IPythron ipengine. + """ + d = mlens3.EventData(xml_fpath) + try: + raw_class = d.data['VOSOURCE'].get('Classifications',{}).\ + get('Classification',{}).get('class',{}).name + except: + raw_class = d.data['VOSOURCE'].get('CLASSIFICATIONS',{}).\ + get('CLASSIFICATION',{}).get('SOURCE',{}).\ + get('CLASS_SCHEMA',{}).get('CLASS',{}).get('dbname',{}) + tmpdict = {} + if (not self.skip_class) and (len(raw_class) > 0): + if self.convert_class_abrvs_to_names: + if raw_class in self.pars['skip_sci_class_list']: + print("Skipping GENERIC class:", raw_class, "for source:", num) + return # skip this class since probably too generic to be useful for classification. + if raw_class not in self.class_abrv_lookup: + print("Skipping UNKNOWN class:", raw_class, "for source:", num) + return # This class isn't in the lookup_dict{}, which is probably due to this class being added recently. We will skip this source. + if raw_class in self.pars['disambiguate_sci_class_dict'].keys(): + raw_class = self.pars['disambiguate_sci_class_dict'][raw_class] + theclass = self.class_abrv_lookup[raw_class] + else: + if raw_class in self.pars['skip_sci_class_list']: + print("Skipping GENERIC class:", raw_class, "for source:", num) + return#skip this class since probably too generic to be useful for classification + if raw_class in self.pars['disambiguate_sci_class_dict'].keys(): + raw_class = self.pars['disambiguate_sci_class_dict'][raw_class] + theclass = raw_class + tmpdict['class'] = theclass + feat = self._get_features(d) + tmpdict.update({'num': num, 'file': xml_fpath , 'features': feat}) + + #import pprint + #pprint.pprint(tmpdict) + + ### This will be ipython task-client 'pulled': + return tmpdict + + + + def _get_class_names(self,doc): + ## parses an XML to get the classes + class_name = doc.d['VOSOURCE']['Classifications']['Classification']['class']['name'] + return class_name + + + def _get_features(self,doc): + ret = {} + #doc.feat_dict[filt][feat] + #features = doc.xml_xpath(u"//Feature") + n_epoch_filt_list = [] + for filt_name,filt_dict in doc.data['ts'].items(): + n_epoch_filt_list.append((len(dict(filt_dict[0])['val']),filt_name)) + n_epoch_filt_list.sort(reverse=True) + try: + filt_most_sampled = n_epoch_filt_list[0][1] + except: + return {} + + feat_xmldicts = doc.feat_dict.get('multiband',{}) + feat_xmldicts.update(doc.feat_dict.get(filt_most_sampled,{})) + + for feat_name,feat_dict in feat_xmldicts.items(): + #tmp = f.xml_xpath(u"val")[0] + tmp = feat_dict['val']['_text'] + #if tmp.is_reliable == 'True': + thetype = feat_dict['val']['datatype'] + if feat_dict['val']['is_reliable'] == 'True': + #thetype = str(tmp.datatype) + #thetype = feat_dict['val']['datatype'] + v = str(tmp) + if (v == "None") or \ + (v == "False"): + val = None + else: + if str(thetype) == 'float': + try: + val = float(str(tmp)) + except: + val = str(tmp) + else: + val = str(tmp) + else: + val = None + if str(feat_name) not in self.skips: + #ret.update({(str(f.name),str(thetype)): val}) + # if this is string, dont add if float exists + # if this is float, replace string if string exists + # This is KLUDGY, since it shows that we should not index dict with type() in the index tuple, but instead should just use the feature only: + if thetype == 'string': + if (str(feat_name),'float') not in ret: + ret.update({(str(feat_name),thetype): val}) + elif thetype == 'float': + if (str(feat_name),'string') in ret: + ret.pop((str(feat_name),'string')) + ret.update({(str(feat_name),thetype): val}) + else: + ret.update({(str(feat_name),thetype): val}) + return ret + + # obsolete: 20090130: This wouldnt set values for 'False', etc... + def _get_features__old(self,doc): + ret = {} + features = doc.xml_xpath(u"//feature") + for f in features: + tmp = f.xml_xpath(u"val")[0] + if tmp.is_reliable == 'True': + thetype = tmp.datatype + v = str(tmp) + if v == "None": + val = None + else: + if str(tmp.datatype) == 'float': + try: + val = float(str(tmp)) + except: + val = str(tmp) + else: + val = str(tmp) + else: + val = None + if str(f.name) not in self.skips: + ret.update({(str(f.name),str(thetype)): val}) + return ret + + + def getnums(self,tmprange): + self.therange = [] + for i in tmprange: + if i.find("-") != -1: + ## we got a range + tmp = i.strip().split("-") + try: + tmp = range(int(tmp[0]),int(tmp[1]) + 1) + self.therange.extend(tmp) + except: + pass + + continue + try: + print(i) + tmp = int(i) + self.therange.append(tmp) + except: + pass + +class XMLgrabber: + + + server = None + xmldir = "/Users/jbloom/Projects/TCP/Software/feature_extract/MLData/XML/" + #print "You might need to issue 'ssh -L 34583:192.168.1.65:34583 lyra.berkeley.edu' if you haven't already" + #server_url = "http://lyra.berkeley.edu:34583" + server_url = "http://localhost:34583" + + def __init__(self,verbose=True,regrab=False): + self.verbose=verbose + self._connect() + self.regrab = regrab + + + def grab(self,num=None): + self.fname = self.xmldir + str(num) + ".xml" + if num and self.server is not None: + if self.regrab or not os.path.exists(self.fname): + try: + tmp = self.server.get_vosource_url_for_srcid(num) + except: + return None + if tmp.find('database_query_error') != -1: + if self.verbose: + print("No object number %i" % num) + return None + tmp1 = amara.parse(tmp) + fileloc = str(unicode(tmp1.A.href)) + h = urllib.urlretrieve(fileloc,self.fname) + + if os.path.exists(self.fname): + return amara.parse(self.fname) + else: + return None + else: + return None + + def _connect(self): + if self.server is None: + self.server = xmlrpclib.ServerProxy(self.server_url) + return + + def _disconnect(self): + if self.server is not None: + del self.server + + def __del(self): + self._disconnect() + + + +if __name__ == '__main__': + #NOTE: command line execution of arffify.py is intended only to be called by generate_arff.php on lyra. + + sci_class_list = sys.argv[0].split(',') + search_list = [] + #out_fpath = "/Volumes/BR1/Graham/Bloom-store/Josh/public_html/dstarr/vosource_outs/" + #out_fpath = os.environ.get("TCP_DIR") + \ + # 'Software/feature_extract/MLData/sdss_sources.arff' + #out_fpath = os.environ.get("TCP_DIR") + \ + # 'Software/feature_extract/MLData/TUTOR_sources.arff' + out_fpath = '/tmp/arffify_test.arff' + + ###for sci_class_underscored in sci_class_list: + ### sci_class = sci_class_underscored.replace("___", " ") + ### out_fpath += sci_class_underscored.replace("___", "_") + ### search_list.append(sci_class) + # TODO: parse the argv into seperate class-names + # TODO: form outfile using these: + # /Volumes/BR1/Graham/Bloom-store/Josh/public_html/dstarr/vosource_outs/..<>..arf + + ### This searches a list of string names to look up: + #a = Maker(search=search_list, outfile=out_fpath, skip_class=True, \ + # local_xmls=True, convert_class_abrvs_to_names=True) + + + # NOTE: parameter local_xmls=True can be used if populate_feat_db_using_TCPTUTOR_sources.py has been executed recently + # ( this generates the XML files) + a = Maker(search=search_list, outfile=out_fpath, skip_class=False, \ + local_xmls=True, convert_class_abrvs_to_names=False, \ + local_xmls_fpath=os.path.expandvars('$HOME/scratch/vosource_subset'), flag_retrieve_class_abrvs_from_TUTOR=True) diff --git a/mltsp/TCP/Software/feature_extract/MLData/heatmap_confustion_matrix.py b/mltsp/TCP/Software/feature_extract/MLData/heatmap_confustion_matrix.py new file mode 100644 index 00000000..e496d01b --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/MLData/heatmap_confustion_matrix.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python +""" + v0.1 Make an HTML heatmap table of a Weka classify confusion matrix. +""" +from __future__ import print_function +import sys, os + +__old__input_table_str = """ + a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad <-- classified as + 438 25 41 0 0 0 0 0 0 0 0 0 0 4 0 0 0 5 0 1 0 1 3 0 0 0 0 0 0 0 | a = Algol (Beta Persei) + 83 84 68 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 2 0 0 1 | b = Beta Lyrae + 21 26 930 3 0 0 1 0 0 1 0 0 0 6 0 5 2 1 0 1 0 0 2 0 0 0 10 1 0 1 | c = W Ursae Majoris + 1 0 3 12 0 0 0 0 1 0 0 0 0 22 0 0 0 0 0 5 0 0 7 0 0 0 4 0 0 0 | d = Binary + 1 0 0 0 1 0 0 0 0 0 0 0 0 6 0 0 0 0 0 1 0 0 3 0 1 0 0 0 0 2 | e = T Tauri + 0 0 0 0 1 15 0 0 0 0 0 0 0 1 0 0 0 0 0 5 0 0 10 0 0 0 2 0 0 0 | f = Wolf-Rayet + 0 0 0 0 0 0 45 0 1 0 0 0 0 3 0 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 | g = Type Ia Supernovae + 0 1 0 1 0 1 0 12 1 0 0 0 0 9 0 0 0 2 0 1 0 0 0 0 0 0 0 0 0 0 | h = BL Lac + 1 0 4 1 0 0 1 0 576 0 0 0 0 4 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | i = Microlensing Event + 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 | j = Semiregular Pulsating Red Giants + 1 0 0 0 0 0 0 0 0 0 14 0 0 11 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 5 | k = Semiregular Pulsating Variable + 0 0 2 0 0 0 0 0 0 0 0 0 0 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | l = Short period (BL Herculis) + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 | m = Population II Cepheid + 2 3 8 2 1 1 1 0 2 0 4 0 0 864 11 1 0 4 0 8 1 0 4 0 0 0 0 0 2 2 | n = Classical Cepheid + 0 0 0 1 0 0 0 0 2 0 1 0 0 18 20 2 0 0 0 1 0 0 3 0 0 0 0 0 0 0 | o = Symmetrical + 0 0 2 0 0 0 0 0 0 0 0 0 0 11 0 92 0 0 0 1 0 0 0 0 0 0 1 0 0 0 | p = Multiple Mode Cepheid + 0 0 6 0 0 0 0 0 0 0 0 0 0 1 0 3 20 0 0 0 1 0 0 0 0 0 0 0 0 0 | q = RR Lyrae - Asymmetric + 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 105 0 3 0 1 0 0 0 0 0 0 0 0 | r = RR Lyrae, Double Mode + 0 0 4 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 3 0 0 0 4 0 0 0 1 0 0 2 | s = RR Lyrae + 4 0 0 0 0 0 0 0 0 0 0 0 0 8 1 3 0 1 1 268 0 1 1 0 0 0 3 0 0 0 | t = RR Lyrae, Fundamental Mode + 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 3 0 0 0 0 0 0 0 0 0 | u = RR Lyrae - Near Symmetric + 2 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 | v = RR Lyrae, Closely Spaced Modes + 4 1 4 0 0 11 0 0 1 0 1 0 0 4 2 0 0 2 2 0 0 0 64 2 1 0 12 0 0 0 | w = Pulsating Variable + 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 8 1 0 18 0 0 0 | x = Beta Cephei + 6 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 6 0 6 2 14 0 0 0 | y = Gamma Doradus + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 8 0 0 0 | z = Lambda Bootis Variable + 0 0 32 0 0 5 0 0 1 0 0 0 0 4 0 2 1 0 0 6 0 0 11 5 4 5 74 0 0 0 | aa = Delta Scuti + 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 9 0 0 | ab = SX Phoenicis + 0 0 1 0 0 0 1 1 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 | ac = Long Period (W Virginis) + 0 0 3 0 0 0 0 0 0 0 1 0 0 4 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 103 | ad = Mira +""" + +input_table_str = """ + a b c d e f g h i j k l m n o p q r <-- classified as + 87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | a = RR Lyrae, Fundamental Mode + 0 1072 0 0 0 0 0 0 0 0 0 2 0 0 0 0 4 0 | b = W Ursae Majoris + 0 0 10 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 | c = Population II Cepheid + 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | d = Ellipsoidal + 0 0 0 0 204 0 0 0 0 0 0 1 0 0 1 0 1 0 | e = Binary + 0 2 0 0 2 450 0 0 0 0 0 3 0 0 0 0 2 0 | f = Algol (Beta Persei) + 0 0 0 0 0 0 33 0 0 1 0 0 0 0 0 0 0 0 | g = Wolf-Rayet + 0 0 0 0 0 0 0 149 0 0 0 0 0 0 0 0 0 0 | h = Beta Cephei + 0 0 2 0 0 0 0 0 110 0 0 0 0 0 0 0 0 0 | i = Classical Cepheid + 0 0 0 0 0 0 6 3 0 290 0 0 12 1 0 1 0 0 | j = Mira + 0 0 1 0 1 0 0 0 0 0 228 0 0 0 1 0 0 0 | k = Multiple Mode Cepheid + 0 0 0 0 0 7 0 0 0 0 0 318 0 0 0 0 0 0 | l = Beta Lyrae + 0 0 0 0 0 0 0 0 0 5 0 0 30 1 0 1 0 0 | m = Semiregular Pulsating Variable + 0 0 0 1 0 0 0 0 0 0 0 0 0 71 0 0 0 1 | n = Gamma Doradus + 0 0 0 0 0 0 0 0 8 0 2 0 0 0 565 0 0 0 | o = Symmetrical + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 16 0 0 | p = Be Star + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 | q = Pulsating Variable + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 215 | r = Delta Scuti +""" + + +if __name__ == '__main__': + + input_table_name = "/tmp/a" + output_costmatrix_fpath = "/home/pteluser/scratch/cost_matrix.cost" + if len(sys.argv) >= 3: + input_table_name = sys.argv[1] + output_costmatrix_fpath = sys.argv[2] + + ###DISABLED### input_table_str = open(input_table_name).read() + input_table_str = open(input_table_name).read() + + output_html_fpath = "/tmp/heatmap.html" + + input_line_list = input_table_str.split('\n') + for i_header_row in range(len(input_line_list)): + if "classified as" in input_line_list[i_header_row]: + break # i_header_row is the correct value. + + val_listoflists = [] + total_per_class_list = [] + class_name_list = [] + + line = input_line_list[i_header_row] + short_line = line[:line.rfind('<')] + col_name_list = short_line.split() + + for line in input_line_list[i_header_row +1:-1]: + if len(line) < 4: + continue # does not contain data + short_line = line[:line.rfind('|')] + #class_name = line[line.rfind('=')+2:] + class_name = line[line.rfind('|')+3:] + class_name_list.append(class_name) + str_val_list = short_line.split() + val_list = [] + for str_val in str_val_list: + val_list.append(int(str_val)) + total_per_class_list.append(sum(val_list)) + val_listoflists.append(val_list) + + + out_str = """ + + + + """ + #
+ + out_str += "" + for col_name in col_name_list: + out_str += '' % (col_name) + out_str += '\n' + + for i_class in range(len(val_listoflists)): + val_list = val_listoflists[i_class] + out_str += "" + for val in val_list: + try: + percent = val / float(total_per_class_list[i_class]) + except: + percent = 0.0 # div by zero catch + if percent < 0.0099999: + percent_str = "     " + else: + percent_str_a = "%2.2f" % (percent) + percent_str = percent_str_a[1:] + if ((percent > 0.0099999) and (percent < 0.15)): + percent = 0.15 # give small percents some minimum color + full_hex_str = "%2.2x" % (int((percent * 255))) + hex_str = full_hex_str[full_hex_str.rfind('x')+1:] + out_str += '' % (hex_str, percent_str) + out_str += '\n' % (class_name_list[i_class]) + out_str += "
%s
%s%s
" + + os.system("rm " + output_html_fpath) + fp = open(output_html_fpath, 'w') + fp.write(out_str) + fp.close() + + for i in range(len(total_per_class_list)): + print(total_per_class_list[i], '\t', class_name_list[i]) + + # TODO: make a cost matrix which is all normalized. + n_avg = sum(total_per_class_list) / float(len(total_per_class_list)) + + os.system("rm " + output_costmatrix_fpath) + fp = open(output_costmatrix_fpath, 'w') + + #header_str = "\% Rows \tColumns\n%d \t%d\n\% Matrix elements\n" % (len(total_per_class_list), len(total_per_class_list)) + header_str = "%% Rows \tColumns\n%d \t%d\n%%Matrix elements\n" % (len(total_per_class_list), len(total_per_class_list)) + fp.write(header_str) + for i in range(len(total_per_class_list)): + percent = n_avg / total_per_class_list[i] + line_str = "" + for j in range(len(total_per_class_list)): + if i == j: + line_str += "0.0\t" + else: + line_str += "%0.3f\t" % (percent) + fp.write(line_str + '\n') + fp.close() diff --git a/mltsp/TCP/Software/feature_extract/MLData/maker.arff b/mltsp/TCP/Software/feature_extract/MLData/maker.arff new file mode 100755 index 00000000..680388fd --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/MLData/maker.arff @@ -0,0 +1,399 @@ +% date = 2008-05-16 11:35:32.621177 +%% +@RELATION ts + +@ATTRIBUTE freq3_harmonics_moments_0 NUMERIC +@ATTRIBUTE freq1 NUMERIC +@ATTRIBUTE freq1_harmonics_rel_phase_error_2 NUMERIC +@ATTRIBUTE ratio21 NUMERIC +@ATTRIBUTE std NUMERIC +@ATTRIBUTE ecpb NUMERIC +@ATTRIBUTE freq2_harmonics_freq_2 NUMERIC +@ATTRIBUTE freq3_harmonics_rel_phase_error_1 NUMERIC +@ATTRIBUTE freq3_harmonics_moments_err_0 NUMERIC +@ATTRIBUTE freq1_harmonics_moments_1 NUMERIC +@ATTRIBUTE freq3_harmonics_rel_phase_2 NUMERIC +@ATTRIBUTE freq2_harmonics_rel_phase_error_0 NUMERIC +@ATTRIBUTE freq2_harmonics_rel_phase_1 NUMERIC +@ATTRIBUTE freq3_harmonics_rel_phase_error_3 NUMERIC +@ATTRIBUTE freq2_harmonics_nharm NUMERIC +@ATTRIBUTE freq1_harmonics_peak2peak_flux NUMERIC +@ATTRIBUTE n_points NUMERIC +@ATTRIBUTE freq3_harmonics_amplitude_3 NUMERIC +@ATTRIBUTE freq2_harmonics_signif NUMERIC +@ATTRIBUTE freq3_harmonics_moments_err_1 NUMERIC +@ATTRIBUTE freq2_harmonics_moments_2 NUMERIC +@ATTRIBUTE freq1_harmonics_moments_2 NUMERIC +@ATTRIBUTE freq1_signif NUMERIC +@ATTRIBUTE freq1_harmonics_moments_0 NUMERIC +@ATTRIBUTE ratio31 NUMERIC +@ATTRIBUTE freq2_harmonics_rel_phase_0 NUMERIC +@ATTRIBUTE freq2_harmonics_peak2peak_flux_error NUMERIC +@ATTRIBUTE freq2_harmonics_moments_err_0 NUMERIC +@ATTRIBUTE freq3_harmonics_freq_1 NUMERIC +@ATTRIBUTE freq3_harmonics_amplitude_error_0 NUMERIC +@ATTRIBUTE freq2_harmonics_moments_1 NUMERIC +@ATTRIBUTE freq3_harmonics_moments_err_2 NUMERIC +@ATTRIBUTE freq2_harmonics_moments_err_2 NUMERIC +@ATTRIBUTE freq3_harmonics_rel_phase_error_0 NUMERIC +@ATTRIBUTE freq2_harmonics_amplitude_error_2 NUMERIC +@ATTRIBUTE freq2_harmonics_rel_phase_3 NUMERIC +@ATTRIBUTE freq3_harmonics_moments_2 NUMERIC +@ATTRIBUTE beyond1std NUMERIC +@ATTRIBUTE freq3_harmonics_signif NUMERIC +@ATTRIBUTE freq1_harmonics_moments_3 NUMERIC +@ATTRIBUTE freq1_harmonics_moments_err_1 NUMERIC +@ATTRIBUTE amplitude NUMERIC +@ATTRIBUTE freq2_signif NUMERIC +@ATTRIBUTE skew NUMERIC +@ATTRIBUTE freq3_harmonics_amplitude_error_3 NUMERIC +@ATTRIBUTE freq2_harmonics_moments_0 NUMERIC +@ATTRIBUTE median NUMERIC +@ATTRIBUTE freq3_harmonics_amplitude_2 NUMERIC +@ATTRIBUTE freq1_harmonics_nharm NUMERIC +@ATTRIBUTE freq2_harmonics_amplitude_error_3 NUMERIC +@ATTRIBUTE freq3 NUMERIC +@ATTRIBUTE freq_searched_min NUMERIC +@ATTRIBUTE freq3_harmonics_amplitude_error_2 NUMERIC +@ATTRIBUTE freq1_harmonics_amplitude_error_3 NUMERIC +@ATTRIBUTE freq3_harmonics_amplitude_0 NUMERIC +@ATTRIBUTE freq2_harmonics_moments_3 NUMERIC +@ATTRIBUTE galb NUMERIC +@ATTRIBUTE freq1_harmonics_signif NUMERIC +@ATTRIBUTE freq1_harmonics_amplitude_error_2 NUMERIC +@ATTRIBUTE freq2_harmonics_amplitude_error_0 NUMERIC +@ATTRIBUTE freq3_harmonics_freq_3 NUMERIC +@ATTRIBUTE freq1_harmonics_amplitude_0 NUMERIC +@ATTRIBUTE freq2_harmonics_moments_err_3 NUMERIC +@ATTRIBUTE freq2_harmonics_amplitude_0 NUMERIC +@ATTRIBUTE freq3_harmonics_amplitude_error_1 NUMERIC +@ATTRIBUTE max NUMERIC +@ATTRIBUTE freq3_harmonics_freq_2 NUMERIC +@ATTRIBUTE wei_av_uncertainty NUMERIC +@ATTRIBUTE dc NUMERIC +@ATTRIBUTE old_dc NUMERIC +@ATTRIBUTE freq1_harmonics_amplitude_error_0 NUMERIC +@ATTRIBUTE freq2_harmonics_rel_phase_error_3 NUMERIC +@ATTRIBUTE freq2_harmonics_peak2peak_flux NUMERIC +@ATTRIBUTE freq2_harmonics_amplitude_3 NUMERIC +@ATTRIBUTE freq1_harmonics_moments_err_2 NUMERIC +@ATTRIBUTE gall NUMERIC +@ATTRIBUTE freq2_harmonics_rel_phase_2 NUMERIC +@ATTRIBUTE freq1_harmonics_amplitude_3 NUMERIC +@ATTRIBUTE freq1_harmonics_freq_2 NUMERIC +@ATTRIBUTE freq1_harmonics_moments_err_0 NUMERIC +@ATTRIBUTE max_slope NUMERIC +@ATTRIBUTE freq1_harmonics_rel_phase_error_0 NUMERIC +@ATTRIBUTE freq2_harmonics_moments_err_1 NUMERIC +@ATTRIBUTE freq3_signif NUMERIC +@ATTRIBUTE freq_searched_max NUMERIC +@ATTRIBUTE freq3_harmonics_moments_3 NUMERIC +@ATTRIBUTE freq1_harmonics_rel_phase_1 NUMERIC +@ATTRIBUTE freq2_harmonics_freq_0 NUMERIC +@ATTRIBUTE freq3_harmonics_amplitude_1 NUMERIC +@ATTRIBUTE weighted_average NUMERIC +@ATTRIBUTE freq3_harmonics_peak2peak_flux NUMERIC +@ATTRIBUTE chi2_per_deg NUMERIC +@ATTRIBUTE freq3_harmonics_peak2peak_flux_error NUMERIC +@ATTRIBUTE freq1_harmonics_rel_phase_2 NUMERIC +@ATTRIBUTE freq2_harmonics_amplitude_2 NUMERIC +@ATTRIBUTE distance_in_arcmin_to_nearest_galaxy NUMERIC +@ATTRIBUTE freq3_harmonics_freq_0 NUMERIC +@ATTRIBUTE freq1_harmonics_moments_err_3 NUMERIC +@ATTRIBUTE ecpl NUMERIC +@ATTRIBUTE freq1_harmonics_freq_0 NUMERIC +@ATTRIBUTE first_freq NUMERIC +@ATTRIBUTE second NUMERIC +@ATTRIBUTE freq2_harmonics_rel_phase_error_1 NUMERIC +@ATTRIBUTE ratioRUfirst NUMERIC +@ATTRIBUTE freq1_harmonics_rel_phase_error_3 NUMERIC +@ATTRIBUTE freq2_harmonics_amplitude_1 NUMERIC +@ATTRIBUTE chi2 NUMERIC +@ATTRIBUTE freq3_harmonics_rel_phase_3 NUMERIC +@ATTRIBUTE freq2_harmonics_freq_3 NUMERIC +@ATTRIBUTE freq3_harmonics_rel_phase_error_2 NUMERIC +@ATTRIBUTE freq1_harmonics_amplitude_1 NUMERIC +@ATTRIBUTE freq2_harmonics_rel_phase_error_2 NUMERIC +@ATTRIBUTE third NUMERIC +@ATTRIBUTE example NUMERIC +@ATTRIBUTE freq1_harmonics_rel_phase_3 NUMERIC +@ATTRIBUTE min NUMERIC +@ATTRIBUTE freq1_harmonics_amplitude_2 NUMERIC +@ATTRIBUTE distance_in_kpc_to_nearest_galaxy NUMERIC +@ATTRIBUTE ratio32 NUMERIC +@ATTRIBUTE freq1_harmonics_rel_phase_error_1 NUMERIC +@ATTRIBUTE freq3_harmonics_moments_err_3 NUMERIC +@ATTRIBUTE freq1_harmonics_freq_3 NUMERIC +@ATTRIBUTE freq1_harmonics_rel_phase_0 NUMERIC +@ATTRIBUTE freq2_harmonics_freq_1 NUMERIC +@ATTRIBUTE freq2_harmonics_amplitude_error_1 NUMERIC +@ATTRIBUTE freq3_harmonics_rel_phase_0 NUMERIC +@ATTRIBUTE freq2 NUMERIC +@ATTRIBUTE freq1_harmonics_peak2peak_flux_error NUMERIC +@ATTRIBUTE freq3_harmonics_moments_1 NUMERIC +@ATTRIBUTE freq1_harmonics_freq_1 NUMERIC +@ATTRIBUTE freq3_harmonics_nharm NUMERIC +@ATTRIBUTE freq1_harmonics_amplitude_error_1 NUMERIC +@ATTRIBUTE freq3_harmonics_rel_phase_1 NUMERIC +@ATTRIBUTE class {'GCVS:Pulsating:CEP','GCVS:Pulsating:RR:RRAB'} + +@data +0.589741363257,0.200066937624,0.692777094384,0.0,0.125484845627,-63.1651417336,3.28882248559,0.199098692775,0.11668518687,0.854675839964,-0.441966827994,0.0178581487214,2.65000667522,0.196499595405,99.0,0.339592158111,103.0,0.00702365952524,0.0,0.282958407446,0.0362385012407,-1.41580397612,4.73842366865,-0.250517783654,0.0,-2.91770418664,0.0196684644067,0.0195752414739,0.936649805124,0.00139882085459,0.186022604442,1.61697482018,0.133176710051,0.0956375293599,0.00139900954517,1.44078874102,-0.556507289907,0.0,0.0,-3.13514371964,0.171949806364,0.4903,4.75856999315,0.15969525194,0.00140696334953,0.232436896315,7.79,0.00302115576634,4.0,0.00132571337903,0.468324902562,0.000460707424728,0.00144803330749,0.0206953274834,0.0151565730776,-0.226069422018,-3.4546007141,6.07204078949,0.0166821850632,0.00137587953541,1.87329961025,0.120745287313,0.833146759736,0.0791701411701,0.00139856811686,8.0565,1.40497470769,?,7.79816323233,7.81191941748,0.0198854539189,0.220459515124,0.508916469404,0.00678578466085,0.335112314269,271.060874056,-1.92380442053,0.0252777800368,0.600200812871,0.094328048785,64.0,0.132502231878,0.0205942213148,2.49285427337,6.70600858365,0.322310967845,-2.71096289976,1.09627416186,0.00699573947346,7.79816323233,0.183890386589,152.06985153,0.0197398288066,-1.74765594523,0.00491103230531,100.0,0.468324902562,3.49510702832,168.185649187,0.200066937624,0.00485399618921,0.0,0.0694271935985,0.0,0.619213582805,0.020725516938,15511.1248561,0.123305717637,4.38509664745,0.45033978701,0.0277028494119,0.282335514666,0.0,?,-3.10831253738,7.5662,0.0270747475081,1000.0,0.0,0.579228261101,5.30154289298,0.800267750495,-1.62595969422,2.19254832373,0.00135169020567,-1.7595972517,1.09627416186,0.0527809186545,0.448655941082,0.400133875247,99.0,0.0197729647064,2.10434940596,'GCVS:Pulsating:CEP' +0.431536480638,1.02307128367,0.359717035704,0.0,0.220969528358,-7.57283804551,4.35557970164,0.41930020575,0.262238568412,0.48872449846,2.99659735592,0.0410344114524,-2.18393127427,0.624221782112,99.0,0.564943029343,78.0,0.0071355980085,0.0,0.0313082525337,-0.143644454725,0.0,3.11007649896,0.0,0.0,-0.359999321813,0.061248556573,0.0420344433081,11.8952442448,0.00474325498748,0.138932097329,1.38800167657,0.191705339847,0.106958740433,0.00441386047808,1.54459274034,0.146193503662,0.0,0.0,0.0,0.48872449846,0.7493,2.07690868963,0.0161749394552,0.00416971739265,-0.116851539842,10.316,0.0126422788972,4.0,0.00464137150688,5.9476221224,0.000458298624469,0.00432515107863,0.0292250146767,0.037559346235,-0.970070227256,-15.695068603,5.42918365553,0.0288904378878,0.00453839069213,23.7904884896,0.158609724106,1.84633137728,0.0999867752348,0.00404272903644,10.7463,17.8428663672,?,9.99999335625,10.3558115385,0.0292142860085,0.144034559204,1.0390716675,0.0288754593109,1.0,6.5692108864,2.64796020676,0.0734504235311,3.06921385101,1.0,47.0,0.192184923328,0.034287611379,2.16865085911,6.70600858361,-1.99257762471,-2.22762136845,1.45185990055,0.0110269458206,10.3293655835,0.435468111897,217.747196267,0.0610380354577,1.34605095305,0.0403590034282,100.0,5.9476221224,1.0,283.812106876,1.02307128367,0.0108808729318,0.0,0.232640026687,0.0,0.410390833362,0.0192327573552,16766.5341125,0.133871830098,5.80743960219,0.339154431461,0.0825771001404,0.10418835451,0.0,?,-0.278618990797,9.997,0.0855258390866,1000.0,0.0,0.346980151131,11.3832735994,4.09228513468,0.786944895578,2.9037198011,0.00415368219274,-0.572156528622,1.45185990055,0.0846563096442,0.0272621659642,2.04614256734,99.0,0.0308826567886,0.155681559043,'GCVS:Pulsating:RR:RRAB' +0.0877423019737,0.119011798343,1.2452678076,0.0,0.279068896215,38.9863102053,0.241697325428,0.107180029063,0.0361359783141,1.39827642933,0.71135527847,0.00427530807699,-1.88517651547,0.179387526691,99.0,0.770112908965,88.0,0.00458091992231,0.0,0.0176595149717,0.0,0.00611971356777,6.12327994407,-0.309124246142,0.0,2.31893500375,0.0117334923395,1.0,4.07836992769,0.000791047978407,6.20610922088,0.0937538210652,1.0,0.0499755053058,0.000833825141345,2.36785978494,-0.104586713206,0.0,0.0,-0.290841773992,0.27915047205,0.7892,5.2428014061,-0.0702193755415,0.000821338043384,0.0,5.8068,0.00862630630395,2.0,0.000901184525297,2.03918496385,0.000598819922346,0.000798498898332,0.0345505546084,0.0172659454256,0.0,4.86468388166,10.4277660041,0.0347770116186,0.00101412558061,8.15673985538,0.347653185973,1.0,0.167878247947,0.000789600811736,6.1943,6.11755489154,?,5.79067942951,5.83683863636,0.0333391817419,0.133568203829,0.732012208568,0.00570962714926,0.173725848801,49.14519818,0.307313690471,0.0534885935734,0.357035395028,0.0230722347176,67.0,0.0967599867931,6.20610922088,2.2163503077,6.70600858361,-0.711958565456,0.162198861396,0.0805657751427,0.00807338888218,5.79067942951,0.222312594445,2779.34605973,0.011675526343,-0.759201182897,0.0333692593957,100.0,2.03918496385,1.98924999171,289.779294323,0.119011798343,0.0312676890943,0.0,0.0193671690909,0.0,0.605785216518,0.0440811377841,241803.107196,0.078194413193,0.322263100571,0.0982852562937,0.0548311178389,0.0254352380658,0.0,?,-1.97155351371,5.4051,0.0276245788538,1000.0,0.0,0.559019815585,0.879656471484,0.47604719337,-2.23157827788,0.161131550285,0.0008544295623,1.66656803953,0.0805657751427,0.0973580763199,0.113545970227,0.238023596685,99.0,0.0371272555259,0.679968460869,'GCVS:Pulsating:CEP' +?,?,?,?,0.180423148818,56.0411624839,?,?,?,?,?,?,?,?,?,?,131.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.991363386564,?,?,9.3071,?,?,?,?,?,?,?,?,?,-2.40649492349,?,?,?,?,?,?,?,?,?,?,15.661952419,9.24040949709,9.25602442748,?,?,?,?,?,85.157718218,?,?,?,?,75.0,?,?,?,?,?,?,?,?,9.24040949709,?,111.69954472,?,?,?,100.0,?,?,339.645017162,?,0.0113720811784,?,?,?,?,?,14520.9408136,?,?,?,?,?,?,130.281097227,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +1.37282348739,0.193956249424,0.512086071751,0.0,0.213551716964,-66.4475325699,0.133612867938,0.369977093774,0.29266140404,2.57790095181,1.24585064984,0.0113245909672,1.6169867938,0.252332335046,99.0,0.603010639491,111.0,0.00509352042928,0.0,0.201636312041,0.0,0.0,5.48699740271,0.0,0.0,-3.00417575118,0.0181751747363,1.0,2.47108782863,0.00126150702,11.226463612,1.40905208412,1.0,0.0736292325099,0.0013726076117,0.48781167719,-1.38314818889,0.0,0.0,0.0,2.57790095181,0.7179,4.53203506255,-0.26664687321,0.00129490921189,0.0,7.731,0.00541613121072,8.0,0.00127457802979,1.23554391431,0.000432680795887,0.00130531994818,0.0305387685939,0.0178041722408,0.0,-6.32052023964,7.16107458474,0.0279497991744,0.00130057392636,4.94217565725,0.204026781273,1.0,0.113261707467,0.00132852534741,8.0494,3.70663174294,?,7.70214290142,7.7235,0.0284910845235,0.0911311844052,0.907374409342,0.0141807003337,1.0,274.577248964,-0.136188610116,0.0516936982432,0.581868748273,1.0,81.0,0.14259082847,11.226463612,2.90210900339,6.70600858369,-0.569911385583,0.582150142401,0.0445376226459,0.00335409326359,7.70214290142,0.224652538293,520.055288011,0.0181726290779,-0.252650194671,0.00565075342775,7.0,1.23554391431,1.0,175.525368032,0.193956249424,0.0298776807552,0.0,0.0684352671185,0.0,0.522891610003,0.0196049859444,57206.0816812,-0.68772817262,0.178150490583,0.233415853133,0.03463446655,0.215813965828,0.0,?,-0.470051454015,7.3315,0.0567163710831,40.11,0.0,0.87068089117,1.99724282787,0.775824997697,2.4317673417,0.0890752452917,0.00124810357096,-1.20642348027,0.0445376226459,0.117978016106,0.339823081153,0.387912498849,99.0,0.029530827895,2.4192067946,'GCVS:Pulsating:CEP' +-0.0954849249169,0.0223247394763,0.339265038994,0.0,0.257910774417,49.6945829477,0.0656468427605,0.0339151980626,0.0159842929613,22.3966779335,-0.0342490589234,0.0152176048598,-0.0801372775977,0.0534660632418,1.0,0.79389345598,258.0,0.0172094331741,0.0,0.411888766971,0.0,0.0,11.6090093633,0.0,0.0,-0.724343761337,0.00251348413719,1.0,0.0766565510185,0.000946678348471,22.8495375699,0.0395899067132,1.0,0.0233496026341,0.000839591339126,1.51559357286,-0.110983132238,0.0,0.0,0.0,22.3966779335,0.9956,7.15223514833,-0.842849507011,0.000900313605543,0.0,7.56195,0.0311753322266,4.0,0.000890720004139,0.0383282755093,0.000419821851788,0.000867981386084,0.0138341495181,0.0382279021387,0.0,9.7268316802,22.8705702065,0.0133921202653,0.000880870549388,0.153313102037,0.348842671281,1.0,0.0621836272237,0.00101317410394,7.9112,0.114984826528,?,7.43396518129,7.48023217054,0.0152529066014,0.116631044159,0.161163549897,0.00809197542452,1.0,58.8997591296,0.722998725713,0.00456590377636,0.066974218429,1.0,187.0,0.0413510613798,22.8495375699,5.90879781922,6.70690811542,-0.703630630368,0.615054747611,0.0218822809202,0.0246775754602,7.43396518129,0.48107028222,690.324041536,0.0128169048929,2.85772236631,0.00908694314065,9.1,0.0383282755093,1.0,292.01498982,0.0223247394763,0.0221229070511,0.0,0.032327354254,0.0,3.11829619022,0.0270633026308,177413.278675,-1.55172915141,0.0875291236807,0.0316292825105,0.109222779963,0.110262077868,0.0,?,-1.09942303946,6.9156,0.0438991673588,160.524,0.0,0.142124603095,0.347045433518,0.0892989579053,-1.22549483737,0.0437645618403,0.000986009629972,2.95535421908,0.0218822809202,0.040736781354,6.26050826549,0.0446494789527,99.0,0.0131207632474,0.984915479596,'GCVS:Pulsating:CEP' +0.0,0.163956106499,1.55192862603,0.0,0.235490604627,35.5396138462,0.298286561843,0.264769541158,1.0,0.900133064831,2.98156910564,0.0408161610392,-2.61882865906,0.845626090234,99.0,0.656930088179,100.0,0.00430521534326,0.0,1.36992927733,0.0,-0.890528898582,6.5813902735,-0.611078383245,0.0,-1.55161760729,0.0524507778074,1.0,0.729964689819,0.00442416792466,5.02872134343,1.0,1.0,0.107864138531,0.00396664291389,-0.888345060381,0.0,0.0,0.0,-1.32447196743,0.168767641872,0.81,5.42949377891,-0.187551109999,0.0038070662389,0.0,10.38175,0.0131815708194,4.0,0.00385061129144,0.364982344909,0.000599202296364,0.00399497518957,0.0250701031529,0.0300837712729,0.0,-7.38142976315,11.7218516773,0.0272474607175,0.00356605814063,1.45992937964,0.308673580598,1.0,0.0961413080928,0.00365819428252,10.7523,1.09494703473,?,9.99999335625,10.372159,0.0263331757726,0.404418906579,0.645928453638,0.00907439604927,0.17456877099,54.95215373,0.140561008506,0.0275331039583,0.491868319497,0.0699373708912,55.0,0.0765457634482,5.02872134343,2.39052931227,6.70600858361,0.0,0.844167115384,0.0994288539478,0.0141329729632,10.3529852681,0.284458940967,269.077431878,0.0523318436068,-2.15017041985,0.00323730020273,100.0,0.364982344909,1.905126694,306.269719842,0.163956106499,0.00134923439644,0.0,0.170729058272,0.0,0.8729612154,0.0219965295197,26638.6657559,-0.674766379007,0.397715415791,0.267650979622,0.0969940143398,1.09193570334,0.0,?,-1.57842948279,9.9423,0.0162877624404,1000.0,0.0,0.263680984942,1.0,0.655824425996,-1.25778211265,0.198857707896,0.00368262776631,-0.0600470377795,0.0994288539478,0.0741037763949,1.36992927733,0.327912212998,99.0,0.0255297298757,-2.23565355065,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.215797961044,19.6779643364,?,?,?,?,?,?,?,?,?,?,66.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.610496569149,?,?,10.4902,?,?,?,?,?,?,?,?,?,-8.69702774826,?,?,?,?,?,?,?,?,?,?,19.7792634202,9.99999335625,10.562630303,?,?,?,?,?,157.68215496,?,?,?,?,39.0,?,?,?,?,?,?,?,?,10.5395395454,?,494.91971632,?,?,?,100.0,?,?,67.0696634418,?,0.00793435424567,0.0,?,0.0,?,?,32169.7815608,?,?,?,?,?,0.0,66.4557015119,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +-0.145665859233,0.0891462041036,0.436928588755,0.0,0.233492271359,-61.6030591053,0.270126632233,2.60504385476,0.13048920893,2.16957825388,-2.1613212571,0.0541474582122,0.234810554811,0.525350835667,99.0,0.706524238073,103.0,0.00497516755334,0.0,2.05357972203,0.451512810077,0.0250789479407,7.38706772675,-0.090573644582,0.0,1.76442562831,0.0380780609709,0.172321381774,0.119509131766,0.00300673918498,1.66449699853,0.384823118236,0.500783181749,0.18805328335,0.00278156055773,2.25924455975,0.165512169413,0.0,0.0,-0.628786833777,0.208511985781,0.7435,5.43832073331,0.0808179815202,0.00279711309903,0.477961268537,9.6376,0.00310840605508,3.0,0.00280059868744,0.0597545658831,0.000467598929251,0.00254691252993,0.0195008394673,0.0135544765284,-1.08919989575,-2.09345280285,15.5213386889,0.0214303636891,0.00248366994089,0.239018263532,0.308161587595,5.6559411664,0.0550689888341,0.0025173791735,10.0407,0.179263697649,?,9.6556075797,9.6691,0.0198540598702,0.618669265715,0.348785707175,0.00422224670513,0.0517541162406,269.88400967,-0.104606729674,0.00788339437999,0.267438612311,0.00932665626229,70.0,0.0707082912932,0.900656569734,2.28734381718,6.70510929338,-0.843183222775,-0.810396043925,0.0900422107444,0.00110475020714,9.6556075797,0.11651677623,154.65074354,0.0381896239606,-2.44501972794,0.0156953200107,100.0,0.0597545658831,0.776889359721,166.262175962,0.0891462041036,0.034014878059,0.0,0.348297514655,0.0,2.71872200917,0.00761358779948,15774.3758411,1.1809473233,0.360168842978,0.915690098519,0.00285889125846,0.164964609777,0.0,?,-0.901765638306,9.2972,0.0454685130895,1000.0,0.0,7.01181477938,2.72793814054,0.356584816415,2.43561609424,0.180084421489,0.00277792042642,-1.58381393373,0.0900422107444,0.0594618901097,4.01074820835,0.178292408207,99.0,0.0208475843664,1.17973337864,'GCVS:Pulsating:CEP' +0.0,0.0584208113432,1.11123474955,0.0,0.372169868943,53.0861001884,0.390248164201,0.125757411759,1.0,2.62875015828,1.43673679495,0.0102692804543,0.828012356042,0.253014166848,99.0,1.01747319512,122.0,0.00847108285927,0.0,4.12258807734,0.0,0.598775187548,7.37757019633,0.398134841267,0.0,-3.13021940539,0.0322078372847,1.0,0.242566072874,0.00245391709154,3.84370802376,1.0,1.0,0.0562201758036,0.00227886258138,-2.82344355866,0.0,0.0,0.0,-0.73463695705,0.502308387654,1.1003,4.88906467342,-0.3408548858,0.00246213566571,0.0,9.2669,0.00757269274077,4.0,0.00230178350557,0.121283036437,0.000420883548038,0.00228311082496,0.036910249583,0.0378247739274,0.0,2.15767780637,12.1362121705,0.0387219816281,0.00266952372438,0.485132145749,0.458210840049,1.0,0.195660842946,0.00239080528787,9.6513,0.363849109312,?,9.13620689709,9.18265983607,0.037755671507,0.106120499653,1.15005797398,0.0214133537663,0.0959759959583,70.6142352554,0.182337907163,0.00828109655264,0.17526243403,0.043827201291,118.0,0.0821371774746,3.84370802376,2.45999746105,6.70510929338,0.0,-1.67687684288,0.1300827214,0.0172232851894,9.13620689709,0.507367115458,461.163892074,0.0321830238898,0.862150843722,0.0411946105955,100.0,0.121283036437,1.96802829106,313.692427536,0.0584208113432,0.011516245951,0.0,0.0296621748451,0.0,4.69135589485,0.0763016997825,55800.8309409,-0.439190859497,0.520330885602,0.297886392476,0.125996804645,0.0556180619024,0.0,?,-0.526355735094,8.551,0.033029333957,1000.0,0.0,0.281873961769,1.0,0.233683245373,1.01849760269,0.260165442801,0.00235534363806,-0.394185252503,0.1300827214,0.107729770105,4.12258807734,0.116841622686,99.0,0.0406512410329,-0.27963991547,'GCVS:Pulsating:CEP' +0.0,0.0140809463231,7.19720280162,0.0,0.254022001131,-64.2068776947,0.0253541731903,0.307676784887,1.0,35.5089770622,-2.23701549052,0.0236192394525,0.773988784006,0.547428703104,99.0,0.523414167033,107.0,0.00676675864121,0.0,0.46561905323,1.01996202789,0.0,4.83143845711,0.0,0.0,-0.671280786272,0.0525221246214,0.0309725481696,2.14767843597,0.00352720683422,22.8906625327,1.0,0.126933085968,0.157553187678,0.00382994578882,-2.88757908167,0.0,0.0,0.0,0.0,35.5089770622,0.9129,4.91649819127,0.152654299795,0.00360171022994,0.0645648689598,10.3675,0.00442329489644,4.0,0.00347045276023,1.07383921799,0.000423775885004,0.00375082516463,0.0332229196717,0.0242916072773,-0.519958294768,-4.28707947434,6.07380915356,0.0311588241984,0.00371806237404,4.29535687194,0.207004530093,1.48980751615,0.155228695616,0.00365346491161,10.8953,3.22151765396,?,9.99999335625,10.4273308411,0.0340815005641,0.14817225785,1.07711385649,0.027323909625,1.0,272.457277789,-1.37443865747,0.0242567206664,0.0422428389692,1.0,80.0,0.165922862188,4.22245906296,2.65975348608,6.70600858365,0.0,-0.896934844422,0.00845139106345,0.0118662918195,10.3876563284,0.28940686081,293.664766623,0.0514318974452,1.88928942648,0.0438774194399,100.0,1.07383921799,1.0,170.993849179,0.0140809463231,0.0141598307418,0.0,0.0767229473506,0.0,1.4560200076,0.0486507706633,31128.465262,3.01921836557,0.0338055642538,0.805432442699,0.068242262462,0.0797277041492,0.0,?,-2.41140192534,9.9824,0.00558559495405,1000.0,0.0,0.514610461632,1.0,0.0563237852923,1.01549300977,0.0169027821269,0.0036640460533,1.60425717567,0.00845139106345,0.096933059827,0.46561905323,0.0281618926461,99.0,0.0333550257828,2.82272327762,'GCVS:Pulsating:CEP' +0.505643410607,4.67793156184,2.37738389712,0.0,0.0673067783163,66.5727504564,13.4830992196,0.445207585781,0.0744772471955,0.106884847157,1.91133583641,0.0378007915855,-0.862634278622,0.260548000099,99.0,0.125178850469,115.0,0.00456317062997,0.0,0.144198109382,0.0,0.0,4.27187868738,0.0,0.0,-1.13676096121,0.0175043730208,1.0,1.00426533885,0.00118549750147,0.111250386544,0.568619207585,1.0,0.0989012097848,0.00124863608503,-0.988306985338,-0.429243704677,0.0,0.0,0.0,0.106884847157,0.2255,2.13811022654,-0.149149883102,0.00129353501557,0.0,7.587,0.00678762824188,4.0,0.00123975980238,0.502132669426,0.000441912740105,0.00129377471473,0.0110055356018,0.0131578386377,0.0,9.7788326169,4.72408540175,0.0110730987318,0.00133149394882,2.00853067771,0.0528972474419,1.0,0.0307017267499,0.00133358017888,7.6868,1.50639800828,?,7.57848119653,7.58043304348,0.0111973520678,0.270109072631,0.300994147988,0.00454329240141,1.0,83.3788895372,2.38137748754,0.0138160633532,14.0337946855,1.0,15.0,0.206185226759,0.111250386544,1.4558956188,6.70690811542,-0.444057283248,-2.41612285256,4.49436640654,0.00263084864957,7.57848119653,0.220866865373,55.0011977257,0.0174827033735,2.38780528015,0.00253617268301,100.0,0.502132669426,1.0,326.120239288,4.67793156184,0.00329220434127,0.0,0.215503638421,0.0,0.797388775283,0.00567989760556,6270.13654073,-1.49531789723,17.9774656262,0.176237550412,0.00298376518619,0.48228925574,0.0,?,-0.0242050778912,7.4613,0.00460585158307,1000.0,0.0,3.61024960684,1.72259869205,18.7117262474,2.99853528919,8.98873281309,0.00124672558453,-2.57614111341,4.49436640654,0.0312771399501,0.48992064553,9.35586312369,99.0,0.0113057042095,-0.00124502459264,'GCVS:Pulsating:RR:RRAB' +0.355678027511,0.477683355211,0.420343218105,0.0,0.213057019276,55.9184950815,1.29658836783,0.146555562394,0.0503781803709,0.401293989368,-0.321724182714,0.0200779054024,-1.7469188025,0.170838064992,99.0,0.371213257798,135.0,0.0156516407396,0.0,0.177980032559,-1.2954800093,-0.515219171361,5.4993938327,0.575644454902,0.0,-0.37362994218,0.039505186117,0.138065979134,0.608980678901,0.00264519036129,0.228755338604,0.37455369698,0.169069194822,0.0643439261699,0.00281942731534,2.55369843282,-0.310903697946,0.0,0.0,0.0146165665044,0.101949156314,0.6866,5.53005870767,-0.240384846291,0.00292886101462,1.19027040657,10.0893,0.011027413017,3.0,0.00278343272062,0.30449033945,0.000433504039421,0.00259016362769,0.0249826160828,0.0460029187595,4.19576903435,3.6996163681,7.26356048041,0.0243244818475,0.00278755597212,1.2179613578,0.161029885352,2.1201451403,0.138886254152,0.00293298466404,10.3289,0.913471018351,?,9.98033817346,10.0103733333,0.0221695524923,0.139819683998,0.893633894183,0.0200186240643,0.632284981011,73.2380867483,-1.01384345132,0.0254844700092,1.43305006563,0.0240706775011,120.0,0.184299036789,0.0865076459497,3.70558244163,6.70600858361,-0.756183336484,-2.66255551602,0.43219612261,0.019561544782,9.98033817346,0.524457258867,88.4282226746,0.0394674050757,-2.9944142108,0.0440899768758,100.0,0.30449033945,2.38892531076,315.597025314,0.477683355211,0.00945232655259,0.0,0.0770245882042,0.0,0.991050902758,0.0367066668239,11849.3818384,-1.59075111472,1.72878449044,0.27707053063,0.0216589494074,0.0627733272122,0.0,?,-0.26046784139,9.6423,0.0617701835727,1000.0,0.0,1.11609505863,1.57433156746,1.91073342084,-0.771901538837,0.864392245219,0.00277774924819,-1.86521665329,0.43219612261,0.0703894277922,0.73689207842,0.955366710422,99.0,0.0261356149196,-0.0800379716416,'GCVS:Pulsating:CEP' +-0.192997286071,0.145279844912,0.811423685446,0.0,0.276315118499,-58.4160402434,7.69667995074,0.51556488976,0.166585117001,1.30964840925,0.057967596806,0.0577899808537,0.112727701512,0.422779660624,99.0,0.546357974954,88.0,0.0219963120772,0.0,0.584853931924,-0.509171349651,0.423045944648,2.8275615927,0.112853162966,0.0,1.52629082016,0.129719982307,0.0385963662641,0.707829272303,0.00988662074542,0.104733340061,1.3162099181,0.195592628986,0.128310323721,0.00890109854803,1.56077917408,-1.75390332646,0.0,0.0,-0.2379217484,0.519879510448,1.2392,2.88774765236,-1.14179745832,0.00904312709226,0.427821147387,12.3747,0.0295100918372,4.0,0.00889293484425,0.353914636151,0.000443126193256,0.00997492789199,0.0518083168518,0.0676266377363,-0.761817433294,0.520783907236,3.73831596245,0.04935953727,0.00909261805023,1.41565854461,0.212826722532,0.603755666234,0.159174759195,0.0101027107267,12.7001,1.06174390845,?,9.99999335625,12.2887261364,0.0569311756068,0.410555825296,1.44012335673,0.0231181190275,0.280927915475,267.152176219,-0.593780560828,0.0378805254049,0.435839534737,0.0473237656369,45.0,0.214256486474,0.0134531206098,2.47799573593,6.70331143583,-2.46710337784,-0.941538910978,2.56555998358,0.0171142102197,12.2500068499,0.772489627482,1422.02483017,0.128808834818,1.18075808979,0.0529129745262,100.0,0.353914636151,3.33457978891,162.186996221,0.145279844912,0.0170645618505,0.0,0.30157711053,0.0,1.279272834,0.0334049619785,123716.160225,-1.49144439892,10.2622399343,0.286615251635,0.0873126458531,0.176779567047,0.0,?,1.71372660806,11.4609,0.0629789424358,1000.0,0.0,0.597810962568,10.3339153769,0.581119379649,1.72126102858,5.13111996716,0.00848457019276,2.49139428702,2.56555998358,0.147789768949,0.51911379081,0.290559689824,99.0,0.0492340719352,2.15794974923,'GCVS:Pulsating:RR:RRAB' +1.24941999186,0.0280966019473,0.203152848823,0.0,0.223155101213,-70.389651823,0.0868592471129,0.201427044858,0.290924135304,17.7957462948,-0.514146162251,0.0291779595482,2.42859627775,0.697716113388,99.0,0.733520226402,118.0,0.000727084564752,0.0,28.7672825082,0.160113913297,0.0,7.76768101512,0.0,0.0,0.612169934795,0.00719489851273,0.0240890900347,0.0177737275955,0.000528585771991,7.86433062014,1.64600990776,0.099082272909,0.0841717345169,0.000532032172669,1.0014460337,-1.25646379639,0.0,0.0,0.0,17.7957462948,0.7657,4.95507505262,-0.215323328046,0.000510577522086,-0.206085906433,3.95105,0.00151528044157,8.0,0.00056659653805,0.00888686379774,0.000423896468205,0.000552776947897,0.013034448428,0.00579383763173,-0.686302449144,-10.4492822721,20.6938822861,0.0169314782784,0.000547572933526,0.035547455191,0.320149131253,0.586591665272,0.0184930898518,0.000520068731506,4.2479,0.0266605913932,?,3.92870056283,3.92188305085,0.015470713848,0.10420844342,0.11938021451,0.00453955916095,1.0,279.718902991,1.61310348073,0.0356134559964,0.0842898058418,1.0,16.0,0.041217372657,0.769102925139,2.83444972535,6.70600858369,-0.749889837374,0.37003943176,0.028953082371,0.00286863991629,3.92870056283,0.073075579454,3373.6244718,0.00725059821975,1.88466142904,0.00339397546583,100.0,0.00888686379774,1.0,189.837407121,0.0280966019473,0.0483065829703,0.0,0.18046960423,0.0,0.442115085997,0.00259312518553,394714.0632,1.60492318818,0.115812329484,0.321615662522,0.104024037183,0.143332427514,0.0,?,-2.7012154084,3.4822,0.0613928820642,1000.0,0.0,0.127497651997,2.53179569927,0.112386407789,-1.1136593951,0.0579061647419,0.000562929074161,2.79650241621,0.028953082371,0.0575122728935,43.0671403618,0.0561932038946,99.0,0.0154205136673,-0.403559987978,'GCVS:Pulsating:CEP' +1.11974250167,0.107607312116,1.66113803158,0.0,0.197225070446,51.8778986994,0.00317262998314,0.130518905187,0.165739156477,1.43442339895,-2.9255658433,162.590103023,1.84971053637,0.0459896196805,4.0,0.413195271281,137.0,0.0508508695518,0.00577042771597,1.58052360198,0.0,0.00845551268969,6.39512600535,-0.0202420385838,0.0,2.48381374273,53.4941347443,1.0,0.0299806660619,0.00282910535804,472.793867539,0.763938614576,1.0,0.02821633011,17.9895050863,-1.17728665834,1.48752554509,0.0,0.0,-2.7002536918,0.327371381954,0.7789,4.98855574921,-0.0288680471816,0.00309115898998,0.0,9.6277,0.0223374850471,2.0,19.5599131171,0.014990333031,0.000434073803919,0.0023813143828,0.0235963172033,0.0870495153141,0.0,1.41078794451,8.51095128608,0.0252881515107,19.3635397555,0.0599613321238,0.187482982485,1.0,0.111735906485,0.00256967430848,9.9857,0.0449709990929,?,9.6240518639,9.62649343066,0.0220284403216,811.13568234,0.279925790699,0.0221954834505,0.104724489516,69.6169808686,0.221550502868,0.0435519105982,0.322821936349,0.0172597832511,60.0,0.119494902605,472.793867539,4.2464054053,6.70600858365,-5.57667949953,-1.21535665257,0.00105754332771,0.0204912960405,9.6240518639,0.656005516611,81.550101761,0.0372208403762,-0.632881145473,0.00737687480003,100.0,0.014990333031,3.46063194232,313.195322896,0.107607312116,0.0350608808568,0.0,630.426924152,0.0,0.483117562979,0.0312065060166,11090.8138395,3.02106769928,0.00423017331086,0.132269062788,0.00303248574062,2721.70248675,0.0,?,-4.3190869863,9.2068,0.0122257596531,1000.0,0.0,7.11691911725,2.36410678486,0.430429248466,-2.89361368401,0.00211508665543,17.903242988,-1.54351596647,0.00105754332771,0.0648319791132,11.3897438145,0.215214624233,99.0,0.0232246773956,-0.831722093988,'GCVS:Pulsating:CEP' +0.0,0.163782107113,0.296635957808,0.0,0.165338154635,53.8829267193,0.272270432604,0.540689826978,1.0,1.13883400477,1.34632321112,0.0437056388203,1.44888469243,0.222059945713,99.0,0.333083789914,133.0,0.0163961236457,0.0,3.69206151619,0.0,-0.447638979529,5.91800837414,0.650413463535,0.0,-1.17964332295,0.0496790040449,1.0,0.270851391726,0.00357326679591,5.5092284008,1.0,1.0,0.122364491325,0.00360702972663,-2.6414845309,0.0,0.0,0.0,-0.0817673070432,0.223579346879,0.5434,4.04179542207,0.0542541218596,0.00341707044031,0.0,10.7224,0.00748745726688,3.0,0.00380352714956,0.135425695863,0.000433867920799,0.00329396460993,0.0184713956631,0.0282364787524,0.0,2.49795904293,8.21923760936,0.0184387066141,0.00359769432916,0.541702783452,0.144726790223,1.0,0.0792134513097,0.00330260028001,10.9903,0.406277087589,?,9.99999335625,10.7277849624,0.0176082986161,0.100195115497,0.631760883644,0.0330150249197,0.50288085224,71.4656270693,-1.78685042587,0.0163196863304,0.491346321339,0.0389420638503,63.0,0.132806094265,5.5092284008,2.82339657193,6.70600858365,0.0,-0.0774627641685,0.090756810868,0.00717686515124,10.7247513704,0.341225830561,683.755735091,0.0495260267747,-1.90490978289,0.0292658048428,100.0,0.135425695863,1.85524568036,314.452501366,0.163782107113,0.0295947604423,0.0,0.130956230193,0.0,1.07938560095,0.0291204671858,90255.757032,3.13195038045,0.363027243472,0.500779309797,0.00855087675152,0.116246810527,0.0,?,1.02867290712,10.4469,0.0597706724154,1000.0,0.0,2.58498099637,1.0,0.655128428452,1.64006629879,0.181513621736,0.0032532508839,1.32803014702,0.090756810868,0.0482593136966,3.69206151619,0.327564214226,99.0,0.0159504043393,-1.5802819293,'GCVS:Pulsating:CEP' +0.237638660782,0.26188098755,1.69033721964,0.0,0.277130558831,-67.9043825025,0.559029010994,2.0409012411,0.0405499815322,1.90926422218,-2.60009372034,0.0186121150273,2.53916921989,1.43365625617,99.0,0.640564034592,112.0,0.00188524026274,0.0,0.632526407393,0.579319887128,0.0,5.43037617622,0.0,0.0,-2.49467847366,0.0380812907917,0.0228733565161,0.113259597261,0.00247198106002,0.980022759471,0.1300471576,0.288833727266,0.112780434886,0.00264714432317,-2.23127797404,-0.172675514093,0.0,0.0,0.0,1.90926422218,0.8442,4.28725196282,-0.289172638345,0.00270227622095,0.437390139858,9.63965,0.00250631824623,3.0,0.00268128186859,0.0566297986306,0.000424096260623,0.00288344148362,0.0343402510708,0.0267255858004,-1.51618473865,-7.71724488374,7.83568496402,0.0310047409882,0.00265130806095,0.226519194522,0.304785140988,1.39146619939,0.148883751095,0.00253875928252,9.9562,0.169889395892,?,9.54247965794,9.58004464286,0.0388970641862,0.0837722271598,1.09616677939,0.0324401616771,1.0,276.651141167,1.68635182182,0.0296397552137,0.785642962651,1.0,26.0,0.0949882713053,0.143189349111,1.32142399992,6.70600858369,-0.950974097798,-2.83717063872,0.186343003665,0.00141639392603,9.54247965794,0.396224468894,187.723631571,0.038308299983,2.23112679112,0.0924297466879,100.0,0.0566297986306,1.0,180.727063953,0.26188098755,0.0124151829448,0.0,0.0692123221227,0.0,1.06642839013,0.0388640633903,20837.3231044,-0.200990418338,0.745372014659,1.01323969038,0.0997039322377,0.0296459228009,0.0,?,-0.955997760717,9.112,0.0209918194992,1000.0,0.0,0.36155301132,0.61256314423,1.0475239502,0.439761263611,0.37268600733,0.00273477356023,-0.973168972833,0.186343003665,0.0932603525341,4.65722302857,0.5237619751,99.0,0.0302130990256,-2.22948902575,'GCVS:Pulsating:CEP' +0.0,0.606854024767,0.749587181347,0.0,0.318365865395,-25.1514343279,11.0341883414,0.369619504746,1.0,0.823921370863,1.98409336724,0.0449770942295,0.634716835289,0.95637319299,99.0,0.97834721933,50.0,0.0083659392619,0.0,3.62496112317,0.0,0.0,2.65825854658,0.0,0.0,-0.833102361456,0.105837940172,1.0,0.275865027519,0.00794091470864,0.135941127122,1.0,1.0,0.124752823228,0.00764518625531,-1.47117080458,0.0,0.0,0.0,0.0,0.823921370863,1.2979,2.86826239681,-0.720774802161,0.00707382195428,0.0,11.3912,0.0137157953505,4.0,0.00749801034594,0.13793251376,0.000522583716605,0.0105005850611,0.0721632324576,0.0594135316894,0.0,23.3513040758,4.0638867345,0.0726994720346,0.00685509606772,0.551730055039,0.333669481605,1.0,0.18690437921,0.00854735836847,11.8234,0.413797541279,?,9.99999335625,11.363406,0.0821059993559,0.100254234816,1.13243039517,0.0746170338713,1.0,237.727311012,-2.90508193509,0.0769761976704,1.8205620743,1.0,11.0,0.178999231191,0.135941127122,2.87729761528,6.70600858361,0.0,2.14059522988,3.67806278045,0.018313931749,11.3496342834,0.412405766932,1400.61011286,0.107092970637,0.117309592041,0.0404746516112,8.0,0.13793251376,1.0,140.710167917,0.606854024767,0.0144664305422,0.0,0.163368441588,0.0,0.832634301849,0.0437777559896,68629.8955301,-1.04369016931,14.7122511218,0.502108731378,0.140774210755,0.181449276937,0.0,?,-1.14761860743,10.5255,0.0877607485318,223.92,0.0,0.47912484886,1.0,2.42741609907,2.63596812613,7.3561255609,0.00787984855501,-3.14022722671,3.67806278045,0.203293134679,3.62496112317,1.21370804953,99.0,0.068704003063,2.15684491954,'GCVS:Pulsating:RR:RRAB' +0.328568596955,0.780678016979,1.02226064705,0.0,0.299558512245,-23.6355096002,11.2622375997,0.341738613682,0.0987425411927,0.640468911799,-2.19763688528,0.0334269856365,-0.791768974548,0.462536819815,99.0,0.624368395656,74.0,0.0111806610253,0.0,0.0178165564423,0.0,0.0,3.54472036975,0.0,0.0,-1.31737376236,0.0755935803789,1.0,12.75772842,0.00555684138794,0.133188452714,0.800326005489,1.0,0.102299120843,0.00563681715343,2.11073460218,-0.296471332887,0.0,0.0,0.0,0.640468911799,1.0046,2.90915119553,-0.27694498466,0.00546079687968,0.0,11.03415,0.0171102465629,2.0,0.00521940907703,6.37886421002,0.000526311396159,0.00536719476685,0.0481484454147,0.0512249495181,0.0,32.273062995,5.1764181705,0.0459610566058,0.00529254869854,25.5154568401,0.269529684761,1.0,0.159215512044,0.00550561718276,11.4459,19.1365926301,?,9.99999335625,10.9758486486,0.0520687618124,0.118483545922,1.2890004538,0.045628442226,1.0,251.659412788,2.31876559652,0.0708385136406,2.34203405094,1.0,67.0,0.16907193447,0.133188452714,1.86855517316,6.70600858377,-0.394333697766,1.40469349558,3.75407919989,0.0151345204021,10.9563838126,0.637168880456,978.403485578,0.0748428698165,0.262382862211,0.0641797565045,100.0,6.37886421002,1.0,157.315951392,0.780678016979,0.0226032102207,0.0,0.106466779729,0.0,0.653504101923,0.0492141582033,71423.4544472,2.98763256781,15.0163167996,0.306569618863,0.0838838704511,0.0782722743048,0.0,?,0.597551309472,10.4413,0.0473830045261,1000.0,0.0,0.567243508614,3.70346525532,3.12271206792,2.20685152699,7.50815839979,0.00537960327081,-2.28811674444,3.75407919989,0.133361053722,0.0337264204626,1.56135603396,99.0,0.0467159955623,0.453560536714,'GCVS:Pulsating:RR:RRAB' +0.237771698422,0.237274676302,0.424157378206,0.0,0.240244582823,-62.0801942407,0.0463713114483,0.227825805431,0.115234061854,0.816565020636,3.10299011711,0.0293699488023,-0.60071101113,0.295805688908,99.0,0.549498672178,117.0,0.0157665411857,0.0,5.13058939068,0.0509437834694,0.115550684828,5.53040606865,-0.320428309517,0.0,-2.92405735082,0.0623515000557,0.0257172604481,0.0557827316561,0.00531472788285,13.9836603692,0.910049003804,0.132535933642,0.100331162737,0.00446551808094,-1.99417026335,0.326068034827,0.0,0.0,-0.79057370832,0.147739589665,0.7856,4.54663384205,-0.394702903557,0.00411500283405,-0.20141130831,10.9698,0.00702672378708,3.0,0.00492699946335,0.027891365828,0.000443336410797,0.00426727448975,0.029961129126,0.0398501678673,-0.932791009396,-2.4051657789,7.42316638616,0.0331143179342,0.00453463836911,0.111565463312,0.224128655415,0.8495220687,0.145251446286,0.00423829397224,11.2413,0.0836740974841,?,9.99999335625,10.8625461538,0.0301931337324,0.138188294059,1.08727913941,0.028562993708,0.291122125418,282.000066541,-0.351676273371,0.0294284660803,0.711824028906,0.0219093113109,95.0,0.140341620198,1.78755987538,2.89876424026,6.70510929338,-0.608665814397,1.22099745219,0.0154571038161,0.0197272117159,10.8196994899,0.349164471308,668.697868687,0.0617431975565,0.537659143482,0.0736621888773,100.0,0.027891365828,1.55430943852,192.076344979,0.237274676302,0.0466892562559,0.0,0.0860592716391,0.0,1.08667870556,0.0460039981865,77568.9527677,1.57679422554,0.0618284152643,0.633018097821,0.0233684292455,0.0617807367074,0.0,?,3.5728811029,10.4557,0.0703006293766,1000.0,0.0,1.23129147319,5.75943355683,0.949098705207,-0.377374929358,0.0309142076322,0.00489115529847,-1.36337007913,0.0154571038161,0.080920346195,7.11128075569,0.474549352604,99.0,0.0387922746626,-2.64269439533,'GCVS:Pulsating:CEP' +0.0277775137749,4.58639872489,1.0858734666,0.0,0.135721618794,-42.5684136142,12.8285710058,0.111076295284,0.0784459090652,0.0293082289594,-1.68208540076,0.0261611356228,1.26132361191,0.134800354236,99.0,0.189839970922,173.0,0.0113701859059,0.0,0.0189441675388,0.352777738301,0.88816008511,4.57297251764,0.811378668481,0.0,-0.50153847278,0.0210004601539,0.0104702780142,8.81296264228,0.00159332358034,0.0668466750373,0.359982959784,0.0462177741511,0.0450070578793,0.00148201425466,-1.36163867258,-0.440919822455,0.0,0.0,-1.57131969518,0.0126914664728,0.5092,3.25993772234,-0.0776593460981,0.00145063586882,-0.432186536188,8.3485,0.00844825693455,4.0,0.00148962355689,4.40648132114,0.00043454109831,0.00150394721112,0.016800752031,0.0312808116057,-1.0833749959,-32.4450568947,5.06156140793,0.017126786587,0.00144888796839,17.6259252846,0.0877334672688,0.133504509401,0.0586344927873,0.00152155868924,8.5805,13.2194439634,?,8.35149240877,8.35630635838,0.0173332812146,0.0585371885251,0.642810472601,0.025396794732,0.33452861348,220.412105661,-1.55011635476,0.0130008361671,13.7591961747,0.225453215137,116.0,0.189512035557,0.00214277661323,2.39483182444,6.70780788842,-2.31299869587,0.939167235624,4.27619033528,0.0131144243148,8.35149240877,0.362301850281,94.5631918214,0.0209917418608,-1.92207635299,0.0199421504279,3.4,4.40648132114,4.4011548973,71.7665584095,4.58639872489,0.0146753511867,0.0,0.0575923974723,0.0,1.31567611973,0.0264087923159,16264.8689933,2.49536312429,17.1047613411,0.174394129082,0.0220522261756,0.0749592980803,0.0,?,2.03281544256,8.0713,0.015432891592,99.212,0.0,0.756680849938,5.42800895182,18.3455948996,-2.50834127063,8.55238067056,0.00145717234093,-2.48627142225,4.27619033528,0.0482685741755,0.0395807033612,9.17279744978,99.0,0.017199720296,-1.09828514966,'GCVS:Pulsating:RR:RRAB' +0.827242143764,0.0357514156762,1.27839381133,0.0,0.28925741734,-60.0519266153,0.48123681488,0.185221405044,0.101990981168,13.9854601711,-2.0757195349,0.0158601403316,0.392110715072,0.136096168753,99.0,0.912428632782,125.0,0.0130140635055,0.0,0.031872757208,0.410969156408,0.0,7.24770801776,0.0,0.0,0.0505432506924,0.0252040452023,0.0172074106627,6.20541874052,0.00175433193577,1.23772260499,1.72855542372,0.303310512041,0.0817075108852,0.0019829355567,-1.53195306296,0.264353994556,0.0,0.0,0.0,13.9854601711,0.9912,5.33695686481,0.0417524629215,0.0018013521132,0.708540751679,8.5463,0.00783858581117,2.0,0.00195939999798,3.10270937026,0.000424506433798,0.0018323680588,0.025367117038,0.0222398337566,-1.33611630362,-0.0989936411554,12.3390487082,0.027709533689,0.00190138585751,12.410837481,0.360997963919,0.976440993405,0.109357053211,0.00169478803538,9.0237,9.30812811079,?,8.50107189753,8.5490488,0.0292565474417,0.0344514700407,0.882057823318,0.0486393717484,1.0,280.3191685,3.11532196376,0.0659444709327,0.107254247029,1.0,77.0,0.0724489076277,0.126601575298,1.25663839218,6.70510929338,-1.82468601064,-2.27990899777,0.160412271627,0.010216094487,8.50107189753,0.339701808463,431.312636998,0.0251432125655,1.59458432906,0.0549745396374,100.0,3.10270937026,1.0,187.924800665,0.0357514156762,0.0355630867695,0.0,0.0316034558044,0.0,0.462362037399,0.0580012115209,53482.7669877,1.86019770354,0.641649086507,0.222163485987,0.108311470548,0.0305303467759,0.0,?,-2.31107429671,8.0325,0.0238938197264,1000.0,0.0,0.258347264231,5.14591950806,0.143005662705,-2.6708075469,0.320824543254,0.00174058725232,1.29686452531,0.160412271627,0.0814617595372,0.0654264013497,0.0715028313525,99.0,0.0296649582519,0.624659683973,'GCVS:Pulsating:CEP' +0.107077982655,0.10223795548,0.429621197978,0.0,0.215110347429,-63.9201519381,0.306713866439,0.252563301841,0.0910929679813,1.83958758684,-2.77717547732,0.0860277969473,-0.573638806679,0.930407665912,99.0,0.567242657677,114.0,0.00212979583535,0.0,1.57950919323,1.0981850481,-0.242750321107,7.57478882837,0.0504237421371,0.0,2.60059951017,0.027220887899,0.142628413451,0.109942491183,0.00199846354149,1.58834127229,0.212527101002,0.96845744418,0.149596020243,0.00191610485541,-0.248288843866,-0.109066754028,0.0,0.0,-0.437135838206,0.218658613175,0.7233,4.17836999888,0.34852543685,0.00188219882953,-0.352506840692,8.91245,0.0058854628164,3.0,0.00191443697619,0.0549712455914,0.000424411277684,0.00208425053979,0.0189608782092,0.0125239720831,-1.74907877144,-4.68855853688,14.218133311,0.0201218196538,0.00181283632129,0.219884982366,0.252708990513,9.36129598802,0.0243620666055,0.00210056985891,9.3572,0.164913736774,?,8.93799982889,8.96418596491,0.0177737108652,0.192408009679,0.34476262438,0.0103543407786,0.0430888930589,283.791483332,1.97004839053,0.00980877133249,0.306713866439,0.00907906780734,76.0,0.0824911195821,1.69412851894,2.98143509797,6.7051092933,-0.724902868097,0.253192315563,0.10223795548,0.00727784308303,8.93799982889,0.137507601486,207.723858375,0.0273438884804,-1.46033254075,0.00732846126501,100.0,0.0549712455914,1.01119582728,197.017869125,0.10223795548,0.0293190402369,0.0,0.232517165542,0.0,2.00452590941,0.0077139504761,23472.7959963,-2.10027229342,0.408951821919,0.32551868426,0.0258992431519,0.268102921605,0.0,?,-1.15728216817,8.6339,0.0423614604939,1000.0,0.0,0.804341694188,1.71677338584,0.408951821919,-1.97794589887,0.204475910959,0.00210656592527,2.03105340392,0.10223795548,0.0541467355454,4.52439371464,0.204475910959,99.0,0.0177242685315,3.04360312023,'GCVS:Pulsating:CEP' +0.0,0.0658412809716,0.64679820471,0.0,0.30586980062,64.4222561276,0.199510449328,0.211348900267,1.0,2.28274020315,0.111549033958,0.49639824397,-0.478668980521,0.110104890146,4.0,0.733922037198,97.0,0.0251064952923,2.34125035776,1.70962084493,0.0,0.0895687943558,6.44532107139,0.487257237077,0.0,-1.9795189385,0.154425904329,1.0,0.584925015955,0.002922487839,7.51840319668,1.0,1.0,0.0246524192857,0.0533039472441,2.72747951423,0.0,0.0,0.0,-1.11676628509,0.492820076799,0.9863,4.41660501829,-0.228471388175,0.00260337933727,0.0,9.6743,0.0300306764259,1.0,0.0530603873053,0.292462507977,0.000442016121813,0.00247789299559,0.0313138429879,0.100988425874,0.0,8.36704278964,10.9625772646,0.0356097446076,0.0512607735258,1.16985003191,0.338980563439,1.0,0.120014304356,0.0025329013811,10.0221,0.877387523932,?,9.56287066792,9.57479175258,0.0309216122502,1.79124401806,0.281855203551,0.0320823656755,0.13117615517,81.5076906763,-0.145927484106,0.0548686662844,0.197523842915,0.0618825963475,72.0,0.106767787447,7.51840319668,4.64121780118,6.70510929322,0.0,-0.874387311798,0.0665034831094,0.0136406176825,9.56287066792,0.58861198506,263.241321256,0.0377804177992,-0.950577933828,0.0368169380299,100.0,0.292462507977,2.20588115372,323.985082542,0.0658412809716,0.0162470459757,0.0,1.68086298796,0.0,0.576338379146,0.033989490464,25271.1668406,1.64934357174,0.266013932438,0.0986173376369,0.0247251759447,1.56255910873,0.0,?,3.57404520516,9.0358,0.0505705866614,1000.0,0.0,1.28787818703,1.0,0.263365123886,-2.52162896596,0.133006966219,0.053115049518,0.0345704415007,0.0665034831094,0.0943593110713,1.70962084493,0.131682561943,99.0,0.0317759826025,1.17722005782,'GCVS:Pulsating:CEP' +0.261888549578,1.07407408684,2.17689795625,0.0,0.282182154292,-10.8780371012,0.211734019031,0.144870303264,0.250401347356,0.465517235847,1.34646345461,0.019597943507,-2.33826767717,0.302384703686,99.0,0.612386154414,70.0,0.0151062072572,0.0,0.14310893331,-0.123458855514,0.0,2.83982018288,0.0,0.0,-2.28583899044,0.0617721584055,0.1426661201,1.70641576067,0.00440301676101,1.81526804157,0.135983396521,0.387747826499,0.058479218784,0.00447556948508,-0.539437249351,-0.247720657545,0.0,0.0,0.0,0.465517235847,1.0266,3.05269108271,-0.783025831511,0.0040887862975,1.25107335847,10.51355,0.0179023616936,2.0,0.00443250025271,0.853207880336,0.000463992248137,0.00413065909049,0.0565324318579,0.0738257654779,0.419651026591,-5.52665713978,3.80189074081,0.0588530372975,0.00467305009503,3.41283152134,0.237335436286,1.81381386419,0.208650931433,0.00484887654955,10.8398,2.55962364101,?,9.99999335625,10.4518814286,0.062425633051,0.091419515816,1.70535319522,0.0460776619392,1.0,356.998384883,1.51601838726,0.0873254749626,3.22222226052,1.0,56.0,0.229622915668,0.408218267133,3.17418402411,6.70690811542,-2.24223384698,1.10037639795,0.0705780063438,0.0272718736313,10.4256072425,0.654053944569,418.133288161,0.0614480728068,-1.61862035015,0.0151981656509,100.0,0.853207880336,1.0,270.190498279,1.07407408684,0.0175014967624,0.0,0.0854654263144,0.0,0.681701330811,0.0431658948783,28851.1968831,-1.7429459319,0.282312025375,0.252508764717,0.032961154903,0.273614477481,0.0,?,0.227975835736,9.8132,0.0264549767305,1000.0,0.0,1.76039275046,0.323042824849,4.29629634736,-1.70798233014,0.141156012688,0.00541637775139,1.60752263189,0.0705780063438,0.165977848155,0.577262765173,2.14814817368,99.0,0.058653484642,-0.998132736,'GCVS:Pulsating:RR:RRAB' +-0.844553066476,0.12616144141,0.672176658012,0.0,0.276052354978,-62.996422265,0.989218528039,0.319635282934,0.0633231196127,1.39278175838,-2.75389463984,0.0180436492465,-1.37266880597,0.222132346021,99.0,0.61425717763,108.0,0.0125546841821,0.0,0.108568448087,0.0,-0.0819744953024,4.31150205104,-0.106945665284,0.0,-1.25887560125,0.0388441040257,1.0,1.03462810087,0.00280766457455,1.5163484685,0.420412500227,1.0,0.0530479714172,0.00277928592692,0.784368998279,0.775618913472,0.0,0.0,-0.931248447096,0.459949802106,0.9195,4.93959675804,-0.37398184942,0.00269417878903,0.0,9.6831,0.0234378522786,4.0,0.00291147263231,0.517314050434,0.000424506787002,0.00258617561914,0.0390425796707,0.0505072119593,0.0,-3.54027474462,5.43256549334,0.0381328945342,0.00255460556115,2.06925620174,0.228770590577,1.0,0.170619043064,0.00252083281089,10.0157,1.5519421513,?,9.59339837511,9.60659537037,0.042110967803,0.0406112435809,1.04668586592,0.0647940353817,0.205370492697,282.979297536,-3.00145209573,0.0713261697014,0.378484324229,0.0145610990179,77.0,0.165687079858,1.5163484685,3.17824784234,6.70510929322,-0.834504609044,-1.35404916609,0.329739509346,0.00989045617061,9.59339837511,0.590714339258,187.811366444,0.0387879250252,-2.80097075974,0.0525279407817,100.0,0.517314050434,3.23741844231,194.647445297,0.12616144141,0.0201890221314,0.0,0.207181500047,0.0,0.566477967803,0.0130074251245,20095.8162095,0.664660259641,1.31895803739,0.126199749168,0.0065197404641,0.0514490236323,0.0,?,-1.32748743752,9.0962,0.0619414576668,1000.0,0.0,7.13834772748,0.819734427506,0.504645765639,0.179641001031,0.659479018693,0.0028283699031,0.19443297557,0.329739509346,0.113995078651,0.599078910415,0.25232288282,99.0,0.0355581828046,-1.97756094609,'GCVS:Pulsating:CEP' +?,?,?,?,0.365484410574,54.2925862942,?,?,?,?,?,?,?,?,?,?,151.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.0313813124921,?,?,6.5371,?,?,?,?,?,?,?,?,?,2.48403899236,?,?,?,?,?,?,?,?,?,?,85.7632933105,6.41140171476,6.52047019868,?,?,?,?,?,72.1499685158,?,?,?,?,107.0,?,?,?,?,?,?,?,?,6.41140171476,?,2050.96437414,?,?,?,100.0,?,?,315.386038802,?,0.0611950007867,?,?,?,?,?,307644.656121,?,?,?,?,?,?,150.615869422,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +-1.48747903287,0.0550462709714,0.847584860493,0.0,0.231052231168,-62.7794331163,0.165138812914,1.8813375047,0.880623180643,3.06925358933,-1.19473824732,0.100496552534,2.68840274714,0.425715493287,99.0,0.735984828382,117.0,0.0044179114979,0.0,199.341511629,0.0,0.170784944127,7.61473497174,0.369626507118,0.0,2.1693411325,0.0283877563356,1.0,0.0110244413381,0.00194034330682,9.08326742532,11.8090300665,1.0,0.314429354774,0.00193193471071,1.66336312781,2.04050680325,0.0,0.0,-0.446492560743,0.516873288071,0.8042,5.51265085326,0.0561812616896,0.00218492154128,0.0,8.8087,0.00315681002795,6.0,0.00226140814443,0.00551222066906,0.000434150127464,0.00183595616345,0.0212785712658,0.00660387984142,0.0,-3.27779015015,13.8458851387,0.0224022653529,0.00189420730439,0.0220488826762,0.315063599066,1.0,0.0212950080292,0.0020634532152,9.225,0.0165366620072,?,8.78139956984,8.80906923077,0.0227550348649,0.114131103871,0.49062809544,0.0175090529241,0.199791546776,282.796664456,1.40702484274,0.0316292797581,0.165138812914,0.0219313403418,32.0,0.06372519167,9.08326742532,1.55872772713,6.70555890834,1.96623305534,1.68505719313,0.0550462709714,0.00104248187834,8.78139956984,0.0773083709378,225.424847027,0.0286664931625,-0.371672165641,0.0207031798908,100.0,0.00551222066906,1.64538114003,194.132601011,0.0550462709714,0.0226694739243,0.0,0.0936178211006,0.0,0.757488924745,0.0223534272307,26149.2822551,-3.02509703454,0.220185083886,0.706871908846,0.0513679697509,0.101135254847,0.0,?,-1.97067373237,8.4208,0.0239835464263,1000.0,0.0,0.397994100947,22.8839088784,0.220185083886,2.80859351118,0.110092541943,0.00193386439142,1.13262473314,0.0550462709714,0.0766627118363,56.5793847326,0.110092541943,99.0,0.0223031714969,-0.0788587377172,'GCVS:Pulsating:CEP' +0.0741462916007,0.402848957329,0.265250978309,0.0,0.24281105049,-61.6099108223,0.107256558934,0.727238330145,0.0228014357206,0.465352340478,-2.24547253853,0.0146893403256,-2.14124278982,0.0878325567071,99.0,0.63854844659,103.0,0.0207485269625,0.0,0.0136995743257,0.0,-0.204681142249,4.54848095357,-0.408055446177,0.0,-1.4477498839,0.0269949699314,1.0,3.11130284552,0.00193064425148,13.9851587158,0.0458032511662,1.0,0.0430157364702,0.00182851019791,-1.82662318783,-0.169536808195,0.0,0.0,-1.06210476848,0.101874274467,0.8707,4.11931452459,-0.43125572289,0.00199720301645,0.0,8.4993,0.0203949313951,4.0,0.00190969887092,1.55565142276,0.000441787417108,0.00192390502792,0.0287183687007,0.0436961656734,0.0,-1.88429900369,7.01545950658,0.0267277563814,0.00202878132152,6.22260569104,0.198450258266,1.0,0.13012859858,0.00185730831718,8.7995,4.66695426828,?,8.45614647619,8.46859417476,0.028287563784,0.0399333531716,1.01121420372,0.0475285550923,0.434482044497,281.758922686,-2.80176056337,0.054332780856,1.20854687199,0.0113411704861,84.0,0.147883945046,13.9851587158,3.20665189742,6.70645831931,-0.950644437108,0.373696661802,0.0357521863114,0.00270302427293,8.45614647619,0.486942209598,310.081264149,0.0269493316998,-0.100545397942,0.049220167614,100.0,1.55565142276,2.06400373488,191.379193458,0.402848957329,0.0137339489481,0.0,0.079612714079,0.0,0.497762978184,0.0249867109244,31628.2889432,0.119967511321,0.143008745245,0.0931679224989,0.0499075898299,0.0440227355228,0.0,?,-1.81537091913,7.9288,0.110414821777,1000.0,0.0,0.571543110268,0.418983240205,1.61139582932,-2.86876816939,0.0715043726227,0.00209430590626,-2.36334308641,0.0357521863114,0.0791161881274,0.159921673161,0.805697914658,99.0,0.0272763622693,2.32001944445,'GCVS:Pulsating:CEP' +?,?,?,?,0.272377863844,47.3126861423,?,?,?,?,?,?,?,?,?,?,115.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.127172769853,?,?,5.8084,?,?,?,?,?,?,?,?,?,-1.51345905383,?,?,?,?,?,?,?,?,?,?,218.483722963,5.82472159461,5.8461773913,?,?,?,?,?,65.9947264019,?,?,?,?,19.0,?,?,?,?,?,?,?,?,5.82472159461,?,2208.36322121,?,?,?,100.0,?,?,311.789613007,?,0.0025094904129,?,?,?,?,?,251753.407218,?,?,?,?,?,?,115.747951243,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0,0.192600213649,0.458818442066,0.0,0.235283423246,-63.7875452153,1.19901806348,0.156167638371,1.0,0.999994579497,-3.14127721782,0.308946969582,2.59380897091,0.10283463988,4.0,0.595061358379,105.0,0.0246514248006,2.90018052654,1.15483670525,0.736803588265,0.0274807635695,6.13696863373,-0.0899762475893,0.0,0.057459280067,0.122513450149,0.0328320749393,0.865923290676,0.002513508515,0.401471431973,1.0,0.149130589197,0.0391360681134,0.0436018398755,-2.0406778884,0.0,0.0,0.0,-0.499082477857,0.167905051806,0.6887,4.81269087503,-0.409853990827,0.00279696592093,-0.0363374995152,9.5956,0.0461019460979,1.0,0.0425442796944,0.432961645338,0.000431870968425,0.0028925388928,0.0274533115301,0.0754636797298,-0.875690892008,-4.56699472627,9.49619884582,0.0276996486368,0.0456002504687,1.73184658135,0.22885780657,8.53105566023,0.132248958415,0.0025511601472,9.8098,1.29888493601,?,9.49002653117,9.51813619048,0.0240999383318,1.36271887973,0.34958640248,0.031937987977,0.0810593337879,283.850756355,2.01835959756,0.031458619808,0.577800640946,0.0128891430099,98.0,0.148566639827,0.316928574259,4.00971603107,6.70600858373,0.0,-3.53889386265,0.399672687826,0.0177399411726,9.49002653117,0.497631863658,158.982393881,0.0376702423288,-2.33074420854,0.0326949178417,100.0,0.432961645338,1.36666933976,197.077203733,0.192600213649,0.0374837767934,0.0,1.71529892617,0.0,0.893780986627,0.0244233841817,16534.1689636,0.412521577591,1.5986907513,0.0574469162801,0.0316221083099,1.30158091381,0.0,?,-2.71911226374,9.1211,0.0618330852692,1000.0,0.0,0.838206961275,1.0,0.770400854595,-2.08159922348,0.799345375652,0.0471737085188,-1.53934244086,0.399672687826,0.0760720050808,1.15483670525,0.385200427298,99.0,0.0292559825455,1.84408910586,'GCVS:Pulsating:CEP' +0.0,0.0387061392683,0.447551585112,0.0,0.318540625187,-43.4696095401,0.104012562714,0.122106697693,1.0,3.4637086198,0.309669104979,0.0317237645982,-1.13314871847,0.44968758636,99.0,0.906754035679,96.0,0.0101079863648,0.0,0.883558393338,-0.0423986164593,0.0585425684159,5.78134760721,0.808698990676,0.0,-0.604724292116,0.0635515231439,0.0904110626074,1.13178710942,0.00475249790581,4.08260714408,1.0,0.334581440253,0.0663492147888,0.00488336776771,0.798075568734,0.0,0.0,0.0,1.18287829556,1.17476416803,1.0051,3.41733955271,-0.18754570693,0.00449946228948,0.376087140351,10.7795,0.0227315430986,3.0,0.0039666475384,0.56589355471,0.000459332108515,0.00458181377558,0.0356679930806,0.0638161429727,1.58356344212,-7.08147513069,9.35358877146,0.0456116869567,0.00478970701109,2.26357421884,0.370840399887,4.74746595259,0.132677734876,0.00470480318079,11.2097,1.69768066413,?,9.99999335625,10.7262,0.0396468573665,0.106369749412,0.974515686767,0.0536029066581,0.169577025346,233.087288621,2.86685084659,0.0175539176387,0.116118417805,0.0711492975478,34.0,0.0945721329834,2.33331381699,2.58063652319,6.70510929338,0.0,-1.3038264524,0.0346708542381,0.0350647964821,10.6747390325,0.77163042951,586.419132858,0.0633009419429,-0.354274693984,0.0511446966632,100.0,0.56589355471,2.21623972474,110.350030978,0.0387061392683,0.0195187730384,0.0,0.160110618164,0.0,2.16938861239,0.0280054756681,55709.8176215,-0.0263474251491,0.138683416952,0.197805591172,0.148050134958,0.081129607015,0.0,?,2.6377490218,10.2046,0.074031113752,1000.0,0.0,0.22476652303,1.0,0.154824557073,2.30090025323,0.0693417084761,0.00499017473805,-2.54867711521,0.0346708542381,0.112374953087,0.883558393338,0.0774122785365,99.0,0.0445579253772,-1.00425609281,'GCVS:Pulsating:CEP' +0.489576542656,0.108917831318,0.748401919823,0.0,0.117254259562,-63.8548013572,0.0293446211921,1.11817779065,0.508277763684,1.52533535279,0.819716164804,0.0521257550951,-0.00552400297793,0.906037428182,99.0,0.319812267021,110.0,0.00279357596199,0.0,0.0912526449862,0.0,0.0641361345114,6.99599160413,-0.0914328817083,0.0,3.01643755191,0.0363094349251,1.0,8.38238293991,0.00281590720825,51.1166932495,1.51084713367,1.0,0.432060842458,0.00274382353339,1.54928806919,-0.399800869199,0.0,0.0,-0.190237675318,0.380791404341,0.4178,5.31108865998,0.61832092048,0.00260030304741,0.0,9.21755,0.00172553517602,6.0,0.00231796657712,4.19119146995,0.000431871013188,0.00256789533871,0.0107566847624,0.00547714122313,0.0,-4.66417180575,12.6114233333,0.0120987224127,0.0030691097476,16.7647658798,0.127186526931,1.0,0.0436981946877,0.00259240533271,9.5242,12.5735744099,?,9.2423677237,9.25023,0.0100850255812,0.229860011246,0.207722203089,0.0126419479827,0.162497410555,283.9546416,0.455288886375,0.0270748858965,0.326753493954,0.0313725973859,107.0,0.0948202395812,51.1166932495,0.144589547336,6.70600858377,-1.51439462955,0.392779252349,0.00978154039736,0.00226940741963,9.2423677237,0.0818868459316,35.8436530015,0.0361535104436,0.018963136863,0.00618749802702,100.0,4.19119146995,2.6403027058,197.36069534,0.108917831318,0.0219506561618,0.0,0.143950431047,0.0,0.41189662657,0.0167843123053,3906.95817716,-1.3432177463,0.0391261615895,1.48325285679,0.0292824921228,0.389829202892,0.0,?,0.629369283248,9.1064,0.0138653172566,1000.0,0.0,0.366889315167,3.3679822226,0.435671325272,0.996222253061,0.0195630807947,0.0028030084109,2.23192034095,0.00978154039736,0.0387125622034,0.0815333765472,0.217835662636,99.0,0.0111520570222,1.00896140122,'GCVS:Pulsating:CEP' +?,?,?,?,0.283826475601,49.3622975224,?,?,?,?,?,?,?,?,?,?,167.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.559713901603,?,?,11.3162,?,?,?,?,?,?,?,?,?,-0.415300310793,?,?,?,?,?,?,?,?,?,?,3.97211574745,9.99999335625,11.2304371257,?,?,?,?,?,67.8765680271,?,?,?,?,40.0,?,?,?,?,?,?,?,?,11.2071443693,?,1106.18030403,?,?,?,100.0,?,?,312.900741943,?,0.0182595024522,?,?,?,?,?,183625.930469,?,?,?,?,?,?,165.734345452,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,?,0.273175070998,58.4904303499,?,?,?,?,?,?,?,?,?,?,121.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.196761132298,?,?,10.0767,?,?,?,?,?,?,?,?,?,4.75900243192,?,?,?,?,?,?,?,?,?,?,10.6256375383,9.99999335625,10.110977686,?,?,?,?,?,76.1486522399,?,?,?,?,76.0,?,?,?,?,?,?,?,?,10.0683711231,?,132.646877607,?,?,?,100.0,?,?,318.761095514,?,0.0494555207669,?,?,?,?,?,15917.6253128,?,?,?,?,?,?,121.411603005,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0,0.347416321406,0.383795667549,0.0,0.165822633061,-63.8438503178,0.0513689112973,1.22531228688,1.0,0.457940763054,-1.01500796389,0.0620428728609,-2.46963409731,4.10174090522,99.0,0.462184529029,100.0,0.00100338187632,0.0,0.122947248148,0.0,0.00979274337554,6.03684213905,0.477583663044,0.0,-1.59175460913,0.0582185581545,1.0,8.13356960047,0.00412861648418,29.200540991,1.0,1.0,0.366070973088,0.00352813645805,1.09373454882,0.0,0.0,0.0,0.0856620040476,0.0944287812297,0.5963,4.18613239212,-0.492908926642,0.00403891786463,0.0,10.50305,0.00161867520305,4.0,0.00381579543813,4.06678480024,0.000431837883636,0.00395761752013,0.0191371534624,0.011001705045,0.0,-4.66027696667,9.75929645306,0.0200936699858,0.00401571025615,16.2671392009,0.198441883387,1.0,0.0671671241561,0.00412009076651,10.7476,12.2003544007,?,9.99999335625,10.493111,0.0203336259269,0.487977780929,0.421491110387,0.00914142052867,0.244184741657,283.982403716,-2.4664393697,0.0226067482892,1.04224896422,0.0536925087974,61.0,0.0890720637307,29.200540991,0.872717467605,6.70510929338,0.0,1.48651007763,0.0171229704324,0.00329317910025,10.4811545623,0.148717390175,314.981905294,0.0579686253859,-2.46692255962,0.0267727116597,100.0,4.06678480024,2.04199455888,197.419024808,0.347416321406,0.017402455656,0.0,0.11991683756,0.0,0.824356450632,0.0350743020713,31183.2086241,1.61448586678,0.0684918817297,2.62423721456,0.0601980994198,0.196295959929,0.0,?,0.195428354886,10.1513,0.0490903860709,1000.0,0.0,0.291893767518,1.0,1.38966528562,-0.333626846477,0.0342459408649,0.00397270039756,1.40449752874,0.0171229704324,0.0545699500913,0.122947248148,0.694832642811,99.0,0.020537252089,-0.519417940175,'GCVS:Pulsating:CEP' +?,?,?,?,0.439309706187,1.73443459081,?,?,?,?,?,?,?,?,?,?,100.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.609612443527,?,?,11.2563,?,?,?,?,?,?,?,?,?,-35.2354240014,?,?,?,?,?,?,?,?,?,?,7.24432950108,9.99999335625,11.192777,?,?,?,?,?,32.9625525498,?,?,?,?,8.0,?,?,?,?,?,?,?,?,11.1428822495,?,1190.23465244,?,?,?,100.0,?,?,313.069188484,?,0.0193356810997,?,?,?,?,?,117833.230592,?,?,?,?,?,?,99.4356671375,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,?,0.272386443601,53.5804126777,?,?,?,?,?,?,?,?,?,?,135.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.419992394571,?,?,9.5434,?,?,?,?,?,?,?,?,?,-4.05041790992,?,?,?,?,?,?,?,?,?,?,13.5459138751,9.66535568842,9.6953162963,?,?,?,?,?,82.3884865414,?,?,?,?,99.0,?,?,?,?,?,?,?,?,9.66535568842,?,172.644501402,?,?,?,100.0,?,?,336.048116103,?,0.00653210398472,?,?,?,?,?,23134.3631879,?,?,?,?,?,?,137.148993021,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0,0.0707169146197,0.56947976025,0.0,0.219292680867,-60.5848472037,0.336132961113,0.39000343113,1.0,7.07044421677,-0.105584490129,0.0253648679552,2.40248282859,1.62885166529,99.0,0.834858648748,120.0,0.0012806083687,0.0,2.04491857757,0.0,0.0,6.81235758641,0.0,0.0,2.14275335461,0.0294643353038,1.0,0.489017025405,0.00221960665094,4.46251981666,1.0,1.0,0.142795797635,0.00220623663881,-0.624371818253,0.0,0.0,0.0,0.0,7.07044421677,0.9405,4.39181652334,-0.447838069892,0.00211490398047,0.0,8.9714,0.00347570883233,13.0,0.00201609764932,0.244508512703,0.000456752766268,0.00207821460281,0.0282080690246,0.0140143475741,0.0,-0.738029449674,10.6503283194,0.0242373934462,0.00223382767193,0.978034050811,0.299522114649,1.0,0.0769980059884,0.00201807111566,9.2483,0.733525538108,?,8.91084415043,8.92788083333,0.0281232752331,0.474220076075,0.614994099766,0.0045111617896,1.0,281.081150701,2.98235483246,0.0427723201624,0.212150743859,1.0,103.0,0.0700898991635,4.46251981666,2.54419399474,6.70600858361,0.0,-2.13912125463,0.112044320371,0.00573874272118,8.91084415043,0.197363194926,199.838563001,0.0292858735351,2.76939260826,0.0267740855513,100.0,0.244508512703,1.0,189.620472361,0.0707169146197,0.0170145010499,0.0,0.0328848796922,0.0,0.487664340031,0.0597688529153,23780.7889972,-1.22547548886,0.448177281484,0.598457762587,0.0801674330763,0.0741099315687,0.0,?,-2.24159050947,8.3078,0.0406953966561,1000.0,0.0,0.322267167749,1.0,0.282867658479,2.80021640533,0.224088640742,0.00220712730309,0.952222403874,0.112044320371,0.120507291064,2.04491857757,0.141433829239,99.0,0.0212716255733,-0.51126503513,'GCVS:Pulsating:CEP' +0.0,0.20605155937,0.703408716078,0.0,0.266591953702,-61.4548189548,0.163340178555,0.309783708082,1.0,2.42657712239,-2.68736854938,0.0277908292629,-0.452299526875,0.669199750416,99.0,0.803425724821,108.0,0.00343625046419,0.0,27.3338539402,0.00440197220051,0.0,6.0151239546,0.0,0.0,1.52964634359,0.0335999381088,0.0165879977018,0.0365846690404,0.00227572028575,4.51566814143,1.0,0.0332721784434,0.0484887697794,0.00218466382099,0.236694867032,0.0,0.0,0.0,0.0,2.42657712239,0.8306,3.53700014386,0.272501649322,0.00244439794542,-0.0755986745822,9.12945,0.0162471590652,7.0,0.00245834656304,0.0182923345202,0.000424827218734,0.00241187457891,0.0316996411201,0.0508672172357,-0.790594550477,-1.74110131577,8.75840807004,0.0326954645754,0.00234579775618,0.0731693380808,0.241384883166,0.286407560108,0.0935884059172,0.00310920885178,9.611,0.0548770035606,?,9.15371567736,9.17496481481,0.0275603604258,0.0654980986857,0.861828732798,0.0349888201978,1.0,281.840588043,-2.54173066904,0.0483541399505,0.61815467811,1.0,90.0,0.167306070192,0.258372657216,3.46236482698,6.704210244,0.0,-0.833971877832,0.054446726185,0.00639996156754,9.15371567736,0.473438759055,239.340896592,0.0337716763419,-1.14988192245,0.0342707032579,100.0,0.0182923345202,1.0,191.49627677,0.20605155937,0.0056880410256,0.0,0.0594067289695,0.0,0.70465968351,0.0364884231666,25609.4759354,0.817892756495,0.21778690474,0.142719816402,0.0851091392705,0.0765518818224,0.0,?,2.44176205222,8.7804,0.0450459288352,1000.0,0.0,0.354581527179,1.0,0.824206237481,0.728561926172,0.10889345237,0.00276313012194,2.69864708675,0.054446726185,0.120062832901,27.3338539402,0.41210311874,99.0,0.0348036405363,2.92982028905,'GCVS:Pulsating:CEP' +?,?,?,?,0.365459271417,-26.8487748877,?,?,?,?,?,?,?,?,?,?,84.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.641213301316,?,?,10.2656,?,?,?,?,?,?,?,?,?,-41.2225536783,?,?,?,?,?,?,?,?,?,?,20.2482434649,9.99999335625,10.0837738095,?,?,?,?,?,355.42881065,?,?,?,?,26.0,?,?,?,?,?,?,?,?,10.032494121,?,276.849523535,?,?,?,48.1,?,?,304.163101242,?,0.0131951939769,?,?,?,?,?,22978.5104534,?,?,?,?,?,?,82.5121765898,?,?,?,4.83,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,?,0.205353693855,55.0436205588,?,?,?,?,?,?,?,?,?,?,129.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.524304834718,?,?,9.8356,?,?,?,?,?,?,?,?,?,-3.00301293619,?,?,?,?,?,?,?,?,?,?,11.2640519048,9.74290685031,9.76260542636,?,?,?,?,?,83.7918734612,?,?,?,?,71.0,?,?,?,?,?,?,?,?,9.74290685031,?,91.4506048258,?,?,?,100.0,?,?,337.690908213,?,0.0123676886115,?,?,?,?,?,11705.6774177,?,?,?,?,?,?,128.042630851,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +-1.44496549088,0.0126260385519,1.06064367509,0.0,0.265200310013,-62.6524251258,0.553637320906,0.86222331667,0.270793812503,39.6007027812,-0.226021047773,0.0177799011442,0.416456193882,0.22366628574,99.0,0.562614684321,98.0,0.0140882149722,0.0,8.65438881645,0.0,0.0,4.74124468129,0.0,0.0,1.99724908047,0.04500328702,1.0,0.0551209670705,0.00392253953987,2.70935492128,1.19473701877,1.0,0.0525897985369,0.00355490444948,0.636555004208,1.36894449647,0.0,0.0,0.0,39.6007027812,0.8244,4.49381407848,-0.00557693485145,0.0032023956183,0.0,9.83335,0.0160627538438,2.0,0.00330519566603,0.0275604835352,0.00047385527228,0.00317146165769,0.0340091904283,0.0522140367479,0.0,-3.18713776763,6.55182043219,0.0332331407982,0.00339878890122,0.110241934141,0.228831350189,1.0,0.16850685026,0.00300663350143,10.2647,0.0826814506057,?,9.82558639964,9.86578979592,0.03492637696,0.0806820273827,1.20578017325,0.0387523552745,1.0,282.97638642,2.35553718425,0.0782043218684,0.0378781156558,1.0,76.0,0.152359112564,2.70935492128,2.82368090858,6.70600858361,-0.717293221667,-1.37555208641,0.184545773635,0.003928843557,9.82558639964,0.348073638537,132.283173908,0.0449492490019,-1.40886514216,0.0614623422366,100.0,0.0275604835352,1.0,194.472551499,0.0126260385519,0.0128611953079,0.0,0.074916365188,0.0,0.474902158355,0.0443704997365,12831.467869,2.0309618553,0.738183094542,0.198144016966,0.0583859849666,0.0482764023821,0.0,?,3.2526687188,9.4403,0.0347532391807,1000.0,0.0,0.556941746117,1.58499839978,0.0505041542078,0.210157708576,0.369091547271,0.00329794564504,-1.09139127444,0.184545773635,0.100925220123,16.4417328138,0.0252520771039,99.0,0.0381228521973,-2.61295533427,'GCVS:Pulsating:CEP' +0.185704815852,2.0386359198,0.716999381806,0.0,0.307662630588,-55.7429636187,8.01293611846,0.602197473789,0.0387979539749,0.0991015501156,-0.806114483729,0.0340024623045,0.476769474723,0.345406347142,99.0,0.489226633851,120.0,0.0171006044733,0.0,0.0164504448637,0.0,0.427251779872,3.17184723972,0.0344507519085,0.0,1.45003605176,0.0809763670578,1.0,4.41707054507,0.00578975343876,0.187197299195,0.119351889951,1.0,0.0846050263531,0.00586688796886,-2.01845771764,-0.0741791213518,0.0,0.0,-0.958776864024,0.0282030665866,1.1724,3.0165215642,-0.844310824565,0.00557550886336,0.0,11.6949,0.0123940481631,3.0,0.00555878967294,2.20853527253,0.000425236438902,0.00571992208264,0.0447039079847,0.066943112939,0.0,4.433461431,4.28180107454,0.0447764102486,0.00588898633846,8.83414109014,0.18384216976,1.0,0.164383712106,0.00584737489061,11.9885,6.6256058176,?,9.99999335625,11.586545,0.0429357101275,0.0795382730286,1.47605415495,0.0745095255219,0.0930803626085,277.335202435,1.72051763312,0.0405213671054,6.1159077594,0.0296950051099,89.0,0.25585270542,0.187197299195,2.50845691971,6.70600858369,-0.972184278403,-1.07847627735,2.67097870615,0.00945286288432,11.5509652982,0.705244631562,1284.94171928,0.081219522623,2.16811900599,0.051510984264,100.0,2.20853527253,2.09747635123,181.708180173,2.0386359198,0.0247753798361,0.0,0.0856928337284,0.0,1.09737615335,0.0707760333876,152908.064594,2.77009794326,10.6839148246,0.462787844057,0.0753077546664,0.10857676279,0.0,?,2.65173560698,10.8161,0.0634839864933,1000.0,0.0,0.597320667252,0.695833796482,8.15454367921,-2.07269891734,5.34195741231,0.00543653808037,-1.43189808017,2.67097870615,0.126198355934,0.114417803103,4.0772718396,99.0,0.0442798434744,2.58321425802,'GCVS:Pulsating:RR:RRAB' +0.452150123535,0.0436266945615,0.364353631242,0.0,0.413914157575,-63.621973051,1.17196749832,2.12283004055,0.475973719948,11.4608728675,1.89846632092,0.0480744151602,-2.85901584309,0.640680554269,99.0,1.66353001425,99.0,0.0044290650876,0.0,4.64823671946,0.0,0.0,6.53200092561,0.0,0.0,-1.78666646824,0.0399182718226,1.0,0.0758439900016,0.0027968342463,1.27989897514,1.21987312873,1.0,0.110611902558,0.00295304141756,-2.44355128502,0.0131750407633,0.0,0.0,0.0,11.4608728675,1.2853,3.4164336456,-0.611782912952,0.00280853675016,0.0,9.6519,0.0056024220366,16.0,0.00292356147078,0.0379219950008,0.00045437902377,0.00280598976584,0.0429729965154,0.0262252389318,0.0,-4.41682962124,13.1593962673,0.0432043432179,0.00320475942523,0.151687980003,0.578190233202,1.0,0.0534720537882,0.00324746512016,10.0664,0.113765985002,?,9.54659446904,9.59065555556,0.043937443744,0.194320095408,0.398132084225,0.0142455619733,1.0,283.93075124,1.18221109634,0.12889168037,0.130880083685,1.0,9.0,0.0624737476556,1.27989897514,3.59996323263,6.70510929322,-1.39848547833,-2.69100795832,0.390655832775,0.00119161634778,9.54659446904,0.201864148432,471.041118434,0.0400114247767,2.92312120415,0.0155260394863,100.0,0.0379219950008,1.0,197.16449526,0.0436266945615,0.0432276452693,0.0,0.376426794925,0.0,0.281769583106,0.00769913230283,46162.0296065,-3.08268629912,1.5626233311,0.507931149067,0.127414753069,0.174240411674,0.0,?,2.71497459611,8.7811,0.103645624279,1000.0,0.0,0.297040564897,13.8659860575,0.174506778246,-3.11436552631,0.781311665549,0.00276444850879,-0.995109143244,0.390655832775,0.22147308791,3.98673837168,0.0872533891231,99.0,0.0414167309058,1.38599327452,'GCVS:Pulsating:CEP' +?,?,?,?,0.0517305212715,51.954970747,?,?,?,?,?,?,?,?,?,?,163.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.329036536146,?,?,6.0017,?,?,?,?,?,?,?,?,?,-5.33621240887,?,?,?,?,?,?,?,?,?,?,156.838143036,5.99484490166,5.99716932515,?,?,?,?,?,81.2036875673,?,?,?,?,104.0,?,?,?,?,?,?,?,?,5.99484490166,?,79.524944029,?,?,?,100.0,?,?,334.995432611,?,0.0146905607497,?,?,?,?,?,12883.0409327,?,?,?,?,?,?,162.87695153,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.332715355992,0.182572111353,1.27624151311,0.0,0.29204971497,-64.2696468732,1.09274722481,0.685590896613,0.238366737127,0.857101619766,-2.87792024854,0.089863676611,-2.35011616158,0.559642733678,99.0,0.596916123985,110.0,0.0132069010868,0.0,0.547944398973,0.0213693897282,-0.0840957756643,6.4880153385,-0.557682129635,0.0,-0.00680571140326,0.0977766842962,0.162605899874,0.550432316,0.00726851168545,1.05627661095,0.366190167691,0.0790315706043,0.153108979608,0.00673521905655,1.13954836641,-0.280448821015,0.0,0.0,-0.799572907212,0.211481930762,1.0127,3.97920432901,0.0964756710638,0.00651993487214,0.0494251397802,11.9915,0.0264570321712,2.0,0.00704098757085,0.275216158,0.000423611588027,0.00737883433558,0.0354907364369,0.0438900062841,-1.93258133588,-4.3537936827,9.74848242993,0.0377691123225,0.00660951056534,1.100864632,0.295950908863,0.495271427224,0.0815412350987,0.00630336585635,12.5695,0.825648474,?,9.99999335625,11.9963336364,0.0303586646424,0.163378897058,0.981487355682,0.0416567228242,0.315419510085,272.43303654,2.25298039759,0.0370402378533,0.547716334058,0.0759978314589,62.0,0.121313545902,0.256550496552,2.6767954524,6.70600858361,-1.71611773793,-0.882021852835,0.364249074937,0.0113008446007,11.9561423978,0.525214035421,1499.47080871,0.0976504224135,-1.1823524914,0.0549631988651,100.0,0.275216158,2.41809169444,170.91770942,0.182572111353,0.0149071623567,0.0,0.106102065497,0.0,0.829934879613,0.0606834472582,163442.318149,-2.94227861448,1.45699629975,0.247203612817,0.0162818035042,0.129973491913,0.0,?,-2.77509462595,11.5568,0.0286851244735,1000.0,0.0,2.32242479116,0.965969837023,0.730288445411,1.93830633787,0.728498149874,0.00759723799932,2.06693323196,0.364249074937,0.0948537794609,1.34536460542,0.365144222706,99.0,0.0305537471957,2.08366303008,'GCVS:Pulsating:CEP' +-0.0373040001302,0.025921513976,0.445523328893,0.0,0.34370368896,-62.8386585328,0.0476167012927,0.15748545972,0.0345885353041,19.2889967948,1.87781383476,0.00838648810076,-1.58827977711,0.633555565914,99.0,1.16276405907,115.0,0.00148304693248,0.0,1.6039390453,-0.100758988531,0.0,7.0753625471,0.0,0.0,2.70557683448,0.0135045404921,0.00722894864398,0.0411813229397,0.00090366228686,14.0197219709,0.0713610024599,0.04294598642,0.0574352910924,0.000955926984092,-2.30310167987,-0.0994732051013,0.0,0.0,0.0,19.2889967948,1.1528,4.53990492888,-0.23295168962,0.000988298044032,0.264924817197,6.5478,0.0132156702495,3.0,0.000978845613125,0.0205906614699,0.000454269035967,0.000989225974989,0.0290295990088,0.0171760942574,-0.898740758451,-3.43470909746,14.8533560574,0.0253898288964,0.00106646215344,0.0823626458795,0.467556669347,0.223197425378,0.102855250133,0.000896605359787,7.0541,0.0617719844096,?,6.4893867319,6.52197391304,0.03147818362,0.175911938463,0.857215174511,0.00522692400663,1.0,283.225783271,-0.857170595236,0.0185522363429,0.077764541928,1.0,97.0,0.0550338394396,0.48935487189,3.3125940641,6.70600858377,-1.05217078282,-0.285560338341,0.0158722337642,0.00636968039331,6.4893867319,0.225740388695,2409.33729041,0.0134502017205,-1.96428186618,0.0358869019321,100.0,0.0205906614699,1.0,195.122545446,0.025921513976,0.0256624028746,0.0,0.05627763419,0.0,1.50569729126,0.0178912710538,274664.451107,-2.91165810465,0.0634889350569,0.0696693541878,0.196783369701,0.0259201102945,0.0,?,0.384026014517,5.9013,0.0723398791481,1000.0,0.0,0.137908889283,0.765063948923,0.103686055904,1.61577294276,0.0317444675284,0.000902945631495,-0.537325210335,0.0158722337642,0.0839290359771,11.4253124474,0.051843027952,99.0,0.029333849425,1.29436556085,'GCVS:Pulsating:CEP' +1.13693716233,0.23446263635,0.818626678807,0.0,0.198549673844,-63.4822539007,0.038206929485,1.48645878636,0.369147876146,0.57242356907,1.80839127314,0.105497023797,0.934788899406,0.966142724265,99.0,0.532206070486,107.0,0.00332104858544,0.0,0.0755531780267,0.195572566372,0.658111258542,7.35175488687,0.501443727331,0.0,-0.179768822268,0.0455503705176,0.222864715068,12.2549209376,0.00333033097325,32.0658503621,6.52134135081,0.248234397231,0.253407605545,0.00326552546039,-1.9514500743,-1.24548939262,0.0,0.0,-0.959381544235,0.0965310773717,0.7147,2.87673661993,-0.380021089814,0.00319161012149,-0.309970983458,9.9202,0.00115820973867,5.0,0.00291715586817,6.12746046881,0.000454342313966,0.00321999809985,0.0164176474441,0.0121694608519,-1.91083789235,-4.24569868985,15.3073556924,0.0170250690271,0.00326385478811,24.5098418753,0.267783101029,0.626019059405,0.0297608136175,0.00326448515856,10.2093,18.3823814064,?,9.87708385155,9.90101775701,0.0174937530956,0.585382292155,0.300222516661,0.00626811615422,0.101035095301,283.828972967,1.86707082047,0.0154454262836,0.70338790905,0.058141139084,26.0,0.0612769370466,10.3913165727,0.906376555101,6.70510929322,0.728097057523,-2.03788161365,0.0127356431617,0.00212603151629,9.87708385155,0.201949750448,71.8666461072,0.0451865786986,-1.08553082574,0.00979974211575,100.0,6.12746046881,1.82829736703,196.846458569,0.23446263635,0.0163649791696,0.0,0.794865451983,0.0,1.15313181961,0.0039533496103,7617.86448737,-1.15660445022,0.0509425726466,2.76829278084,0.0691204286371,0.328977636347,0.0,?,-0.295350080088,9.4946,0.020248194274,1000.0,0.0,0.252327939689,15.20532868,0.937850545401,-2.2438066568,0.0254712863233,0.00326105635938,-2.84007486493,0.0127356431617,0.0527417665352,0.0409914958632,0.4689252727,99.0,0.0162553786775,2.77027203678,'GCVS:Pulsating:CEP' +0.301273264378,0.398640349874,0.520426285514,0.0,0.225798466295,-57.8567016496,0.769868188926,0.380242085528,0.214793799365,1.25426339847,-1.52651759004,0.0560950819069,-2.77266630518,0.545809862826,99.0,0.540054149395,105.0,0.0114903367358,0.0,5.77385376367,1.25184125869,0.0,5.43293448953,0.0,0.0,2.80376701441,0.0907839557401,0.188981422677,0.0773863239514,0.00721220858808,0.383434316139,1.33447729771,0.453208083416,0.22715482045,0.00627402156813,-2.52061497696,-0.116570992539,0.0,0.0,0.0,1.25426339847,0.7259,4.42243976538,-0.314487057075,0.00685944858137,-0.83009529549,11.7946,0.00594956844614,5.0,0.00684875480586,0.0386931619757,0.000454342351123,0.00586296443614,0.0272662205054,0.0266104081279,5.623276639,-0.186301266437,8.48706666335,0.0285761581921,0.00662036170789,0.154772647903,0.195902747826,5.78143391049,0.11170535239,0.00655823619902,12.0575,0.116079485927,?,9.99999335625,11.7221952381,0.0230825037197,0.245197624129,0.759057033789,0.024817912842,1.0,289.477556368,-2.68001173645,0.0762203705418,1.19592104962,1.0,35.0,0.150388467628,0.793098790422,2.32042706586,6.70735797166,-0.344174381833,0.726034172949,0.256622729642,0.0172532733916,11.6982881292,0.250600405741,1363.50483428,0.0910542846636,-1.56506765102,0.013191898164,100.0,0.0386931619757,1.0,205.224409621,0.398640349874,0.0279906261619,0.0,0.281259432081,0.0,0.321709707825,0.0224137122882,141804.502766,1.15556866255,1.02649091857,1.21986247021,0.112173408657,0.504002660238,0.0,?,0.462289610881,11.3316,0.0455247616429,1000.0,0.0,0.204446926216,6.22734424408,1.5945613995,-0.0578217477668,0.513245459284,0.0066043023651,-1.7432898118,0.256622729642,0.0803557350537,5.83608445597,0.797280699748,99.0,0.0297793178446,2.7191488879,'GCVS:Pulsating:CEP' +0.0,0.0805753700586,1.47916512493,0.0,0.266085997975,-60.5820998576,0.239319974558,0.230563767026,1.0,2.04090286553,1.5530600457,0.0217201462682,2.39087030238,0.857889157274,99.0,0.626647091238,110.0,0.00285946425343,0.0,29.8450511753,0.606413108238,-0.178764477313,7.2285845225,-0.341557326024,0.0,-0.822942145443,0.0356212380832,0.0200170150884,0.0335063925381,0.00261529807641,3.02750673709,1.0,0.255022878438,0.105810338221,0.0025695829115,2.99231914012,0.0,0.0,0.0,-0.579005835999,0.36402247654,0.9399,5.54736410293,-0.339930373289,0.00255474177603,-0.777931184438,9.54915,0.0028421197577,3.0,0.00256845691796,0.016753196269,0.000443610944826,0.00225551371033,0.0297469523731,0.0229531905409,-0.245453173704,-3.95380190444,12.395473105,0.0296674300862,0.00287872153849,0.0670127850762,0.319860825537,0.651985873933,0.108104783041,0.00273009009404,9.8949,0.0502595888071,?,9.50312988214,9.52061454545,0.0258046484251,0.0518099122194,0.617368780215,0.0470666723144,0.160708959159,291.210478593,-2.86518328202,0.0149294714449,0.241726110176,0.0271460646534,27.0,0.0900520099133,0.276162412159,2.89488497188,6.70690811525,0.0,-1.78601721178,0.0797733248528,0.0100681807602,9.50312988214,0.181233601184,208.64414899,0.0355682634098,1.84958267514,0.0325345906012,100.0,0.016753196269,1.77702693876,211.338056809,0.0805753700586,0.0251765138858,0.0,0.0427578806835,0.0,1.68631473249,0.0564640025332,22742.2122399,-0.043709901284,0.319093299411,1.00666567496,0.0423336817123,0.0755207864873,0.0,?,1.98758164039,8.955,0.0170570604887,1000.0,0.0,0.640716021746,1.0,0.322301480235,0.341238085048,0.159546649706,0.00259950832626,-2.99170928069,0.0797733248528,0.0783569614839,29.8450511753,0.161150740117,99.0,0.0281796062989,0.661541518714,'GCVS:Pulsating:CEP' +?,?,?,?,0.411827929451,19.2420705743,?,?,?,?,?,?,?,?,?,?,53.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.670251728452,?,?,12.1232,?,?,?,?,?,?,?,?,?,-27.0588969348,?,?,?,?,?,?,?,?,?,?,8.27821422363,9.99999335625,11.9152867925,?,?,?,?,?,52.372014864,?,?,?,?,18.0,?,?,?,?,?,?,?,?,11.8707205284,?,1723.60940263,?,?,?,100.0,?,?,319.075763163,?,0.0169258619683,?,?,?,?,?,89627.6889369,?,?,?,?,?,?,52.091048568,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +-0.0350988760574,0.059694236054,0.662098849752,0.0,0.380554477682,-58.4306083732,0.180883103238,0.839715859196,0.181239187408,8.37601807229,2.1859558162,0.016937731713,1.08730254617,0.201446435468,99.0,0.889458772766,109.0,0.00944445266306,0.0,0.532527085841,0.493908467186,0.0,7.21047898798,0.0,0.0,-2.34132244276,0.0286640378235,0.0178569989554,0.529992925776,0.00206641796114,3.35392629589,0.785474238581,0.192560876133,0.0940734244207,0.00192399208348,-1.47895102884,-0.822184334187,0.0,0.0,0.0,8.37601807229,1.071,5.17267006163,-0.267605416249,0.00217295722871,0.381023443149,8.8588,0.00991240888414,4.0,0.00231412706297,0.264996462888,0.000435024539082,0.00208203205202,0.0308290639181,0.0210819989963,-0.955909350762,-0.961522208667,13.3628325722,0.0348744871966,0.00210820765714,1.05998585155,0.424876681035,0.84749521183,0.119764834024,0.00225480227628,9.2441,0.794989388664,?,8.66350514801,8.73504862385,0.031795405558,0.129331064977,0.756931256468,0.014052294845,1.0,289.858372774,1.53284914611,0.0425400993293,0.179082708162,1.0,43.0,0.0997853503808,0.349446216481,4.1225669148,6.70600858361,-2.07596749246,-2.54968869939,0.060294367746,0.00220768627409,8.66350514801,0.163983300182,651.795721062,0.0285377079834,-1.9430108577,0.0693971799862,100.0,0.264996462888,1.0,206.447393667,0.059694236054,0.0129783405196,0.0,0.0313395542212,0.0,0.907162570495,0.0699479266214,70393.9378747,1.73429967371,0.241177470984,0.202057842801,0.105507536546,0.0308182512043,0.0,?,-2.37420445726,8.1731,0.0555357257835,1000.0,0.0,0.374328483499,11.4922240046,0.238776944216,-2.67892450121,0.120588735492,0.00188912572819,1.65851612486,0.060294367746,0.0961520040358,0.642669736585,0.119388472108,99.0,0.0327415272931,2.95830339735,'GCVS:Pulsating:CEP' +?,?,?,?,0.182014778825,63.2291665228,?,?,?,?,?,?,?,?,?,?,105.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.190011359217,?,?,10.5965,?,?,?,?,?,?,?,?,?,3.44238834235,?,?,?,?,?,?,?,?,?,?,10.1621885289,9.99999335625,10.5929009524,?,?,?,?,?,91.5062922369,?,?,?,?,3.0,?,?,?,?,?,?,?,?,10.5827050393,?,437.898940813,?,?,?,100.0,?,?,349.161764284,?,0.00688426741927,?,?,?,?,?,45541.4898445,?,?,?,?,?,?,104.964337281,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.361876320519,-22.7831569526,?,?,?,?,?,?,?,?,?,?,109.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.856749488019,?,?,10.5432,?,?,?,?,?,?,?,?,?,-78.2881545195,?,?,?,?,?,?,?,?,?,?,12.9927500455,9.99999335625,10.4009706422,?,?,?,?,?,40.8022326291,?,?,?,?,74.0,?,?,?,?,?,?,?,?,10.362314761,?,432.708430874,?,?,?,3.7,?,?,349.55885827,?,0.0269677741321,0.0,?,0.0,?,?,46732.5105344,?,?,?,?,?,0.0,107.529573564,?,?,?,3.33,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.0,0.0595740527122,1.58736149042,0.0,0.182209677583,-56.9093500631,0.649887753254,0.0549455902219,1.0,8.39291566105,-0.952085719864,0.00973071507683,-0.523160281033,0.162629171622,99.0,0.415614350063,99.0,0.00817286242893,0.0,12.777718283,-0.256935471333,0.0,4.75186735602,0.0,0.0,-0.373622704015,0.0166605798544,0.0107307784924,0.0782612339586,0.00143661635682,0.921159903846,1.0,0.0404345463022,0.0271955864028,0.00134213470708,2.79188711488,0.0,0.0,0.0,0.0,8.39291566105,0.5937,5.42179709392,0.12048161266,0.00112589943694,-0.0709204286379,6.9409,0.00896513663044,4.0,0.00118159959765,0.0391306169793,0.000441996229295,0.00133997528191,0.0293745406372,0.0403860319885,-0.485243433673,1.00706723828,6.46527312773,0.0242658859835,0.00114277446096,0.156522467917,0.167638184783,0.454742876272,0.126681417846,0.00125724453573,7.2846,0.117391850938,?,6.99633126641,6.99055151515,0.0259290182287,0.0903868248366,0.569978386028,0.0131133269345,1.0,289.012297989,-2.63885622134,0.00261328189416,0.178722158136,1.0,76.0,0.153539732377,0.0551431278575,3.03175008961,6.70600858377,0.0,-2.19158667671,0.216629251085,0.021211343683,6.99633126641,0.272826144405,512.040554448,0.0167886441071,-1.91779629674,0.00868585729462,100.0,0.0391306169793,1.0,203.624963516,0.0595740527122,0.00509673097621,0.0,0.0505183585557,0.0,8.80121192528,0.0235956205254,50179.9743359,-0.52804787287,0.866517004338,0.120166220544,0.0912787562361,0.122309762973,0.0,?,-2.05482010597,6.6909,0.0172971490017,1000.0,0.0,0.251357379165,1.0,0.238296210849,1.41942224575,0.433258502169,0.00120883936084,-2.29542813579,0.216629251085,0.0752658260651,12.777718283,0.119148105424,99.0,0.0297617489243,-1.02049766896,'GCVS:Pulsating:CEP' +-0.500353863426,0.13266898667,9.48939744359,0.0,0.124423578901,-58.9054345424,0.0117501218678,0.368724711914,0.646404981373,1.1704801539,0.435145017022,0.0949824152283,-2.98601002075,1.68905603086,99.0,0.344184644599,113.0,0.00102690143742,0.0,0.149772678779,1.15180240508,-0.522197105777,7.80404869241,-0.248582372793,0.0,1.89053950908,0.0250987179835,0.470125085884,9.93366026136,0.00183475406559,116.794963183,7.7530333492,1.89390485653,0.350330961542,0.0017986682736,2.91491251766,1.33824870512,0.0,0.0,-0.788866647008,0.158891527315,0.394,4.20270638703,0.284083390769,0.0017441728838,-1.43029992689,8.2344,0.00169001879998,3.0,0.00168242269828,4.96683013068,0.00044203662185,0.00175131520346,0.0098517486113,0.00475816372579,-1.27044489365,-1.64061664339,17.6207419996,0.00922691304736,0.00171599411547,19.8673205227,0.160773480751,2.48242537213,0.0185696628704,0.00190653185869,8.4644,14.900490392,?,8.24702425968,8.24905044248,0.00912410389727,0.219670807323,0.14584843557,0.00820851292986,0.0846754435308,290.237148375,2.35382280105,0.00505692515235,0.398006960009,0.0261811309322,49.0,0.061544518471,98.9794836105,0.151625241925,6.70600858361,3.00388347265,1.05734282234,0.00391670728926,0.00437187889555,8.24702425968,0.0644168347486,89.964905132,0.0246597841497,1.60179951799,0.00269011375072,100.0,4.96683013068,1.4562006479,207.631515973,0.13266898667,0.0417176893859,0.0,0.231382269244,0.0,1.8569762878,0.00754681764722,10076.0693748,-2.43223911323,0.015666829157,1.02279348049,0.0337814221725,0.634252128048,0.0,?,2.64298756937,8.0704,0.00103864357414,1000.0,0.0,0.284481340317,27.5520757669,0.530675946678,1.80513880901,0.00783341457852,0.0017331172108,0.854448697524,0.00391670728926,0.0259971622739,0.042683322069,0.265337973339,99.0,0.00933971738879,2.19424740096,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.297267201825,51.3273891153,?,?,?,?,?,?,?,?,?,?,130.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.415238910595,?,?,10.1359,?,?,?,?,?,?,?,?,?,-3.80205147681,?,?,?,?,?,?,?,?,?,?,7.94091955848,9.99999335625,10.0661953846,?,?,?,?,?,116.354968793,?,?,?,?,41.0,?,?,?,?,?,?,?,?,10.0081320796,?,145.753810129,?,?,?,100.0,?,?,33.0740023519,?,0.025473148699,0.0,?,0.0,?,?,18802.2415067,?,?,?,?,?,0.0,129.105989601,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.156275435573,0.019888443774,2.56045392966,0.0,0.281207489366,21.9293019909,4.22765008044,0.158108321587,0.0976745963671,25.1402274448,-1.05375571974,0.0227641978028,0.736399093867,0.143661653319,99.0,0.551914285659,91.0,0.023624502961,0.0,0.0545985985769,0.0,0.0,2.79279473506,0.0,0.0,-0.69204202526,0.0487077917377,1.0,3.88153251486,0.00340678511269,0.354807037351,0.430151072144,1.0,0.0997392697844,0.00341659525725,2.05245826208,0.574827919522,0.0,0.0,0.0,25.1402274448,1.0486,2.93777304341,-1.32619815924,0.00351480140155,0.0,10.1419,0.0101794484187,3.0,0.00342367216197,1.94076625743,0.000472162440424,0.00338983440895,0.0449974199666,0.0348952481815,0.0,65.8542087815,4.21348444167,0.0497757722207,0.00331396297924,7.76306502973,0.192464401388,1.0,0.157362257813,0.00360413681415,10.3561,5.82229877229,?,9.99999335625,10.0307472527,0.0456782038838,0.032552341082,1.82346927659,0.109771388848,1.0,199.441471867,1.74575297084,0.054634465899,0.0596653313219,1.0,50.0,0.235050180304,0.354807037351,1.14477694753,6.70780788825,-0.739039992509,1.47225731151,1.40921669348,0.0209527907659,10.0078386681,0.587950984042,163.73551526,0.0488395230278,1.30692614245,0.0228939093826,3.3,1.94076625743,1.0,154.583317116,0.019888443774,0.0200230646614,0.0,0.0915672876256,0.0,0.786368376584,0.0395752335442,14736.1963734,-2.24410565843,5.63686677392,0.348046306483,0.108755525586,0.151610328885,0.0,?,-0.215155752397,9.3075,0.015506903832,315.166,0.0,0.430284993894,3.31497786018,0.0795537750958,2.79013144363,2.81843338696,0.00328136232265,-0.847870353376,1.40921669348,0.128117928534,0.11026830375,0.0397768875479,99.0,0.0422212607244,-2.33552207141,'GCVS:Pulsating:RR:RRAB' +?,?,?,?,0.363660477824,-61.0928940456,?,?,?,?,?,?,?,?,?,?,100.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.467765148674,?,?,12.10595,?,?,?,?,?,?,?,?,?,-30.887345305,?,?,?,?,?,?,?,?,?,?,2.99413747882,9.99999335625,12.02637,?,?,?,?,?,309.985392228,?,?,?,?,50.0,?,?,?,?,?,?,?,?,11.9606720104,?,1376.3316741,?,?,?,31.0,?,?,280.761329667,?,0.0183703304351,?,?,?,?,?,136256.835736,?,?,?,?,?,?,99.3426372982,?,?,?,20.77,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,?,0.128162860192,69.4821425008,?,?,?,?,?,?,?,?,?,?,117.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.629900337676,?,?,8.0293,?,?,?,?,?,?,?,?,?,9.4022503713,?,?,?,?,?,?,?,?,?,?,66.0807506773,7.97518953109,7.98672393162,?,?,?,?,?,98.6393074268,?,?,?,?,113.0,?,?,?,?,?,?,?,?,7.97518953109,?,162.132947247,?,?,?,100.0,?,?,6.38281789578,?,0.0517102017802,?,?,?,?,?,18807.4218806,?,?,?,?,?,?,116.379597225,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0,0.0560580172193,0.314586065478,0.0,0.26689435922,66.3552514771,2.13704680924,1.25469098482,1.0,2.66692630728,-2.1018534211,0.194503377623,-1.06301556344,1.02426069455,99.0,0.917829740832,103.0,0.00400854763424,0.0,1.06865496437,0.0815315358118,0.230645846956,7.26999897939,0.764321945754,0.0,2.91640860187,0.0582679993008,0.104334538742,0.935755724101,0.00416490337453,0.351273628092,1.0,0.172331939708,0.479629624747,0.00413138355452,-1.15862168367,0.0,0.0,0.0,-0.675914716336,0.802654612533,0.8571,2.76425137006,-0.374026227475,0.00412127531591,-0.0133397946245,10.8012,0.00474301465516,16.0,0.0042434915505,0.46787786205,0.000424093001627,0.00440822927446,0.0221392065715,0.00870763554769,-0.815616327827,6.20526341465,14.7527872348,0.0251392824515,0.00401173970905,1.8715114482,0.341835718188,1.82892254693,0.021724506471,0.0040683398338,11.0875,1.40363358615,?,9.99999335625,10.7245466019,0.0231709244326,0.929386819846,0.203379737824,0.00430243625762,0.424118742521,94.9508892325,1.411744476,0.0411852761085,0.168174051658,0.123265486103,75.0,0.0785415738709,0.133443267524,1.52255009759,6.704210244,0.0,1.57441948646,0.712348936412,0.00335583022063,10.7051189225,0.161432544401,664.018638018,0.0582101873956,0.228305689653,0.00675869145409,64.8,0.46787786205,2.86700797632,356.469045138,0.0560580172193,0.0235385414992,0.0,0.888492373129,0.0,0.713363443114,0.00465082402691,67729.9010779,-1.08478939941,2.84939574565,0.818583088297,0.0589801771781,0.606244882492,0.0,?,-0.96038658879,10.2304,0.0766596691672,55.728,0.0,0.382973783303,1.0,0.224232068877,2.65457616074,1.42469787282,0.0040951462406,-2.18743932181,0.712348936412,0.141209499314,1.06865496437,0.112116034439,99.0,0.0277145954928,-1.16463154613,'GCVS:Pulsating:CEP' +0.132754326102,0.0326953264459,2.61309777062,0.0,0.239091525368,50.8310400042,1.03009101428,0.101341176904,0.0305157184995,15.2927055439,-1.63355414023,1.7027293397,0.94559982787,0.124392167528,4.0,0.468840012346,145.0,0.0167123914442,0.490661687858,0.0845915222439,0.884147598102,0.0,6.65833715009,0.0,0.0,-2.74648239782,0.729969581925,0.624358250327,0.974738642515,0.00231310926111,0.485332998619,0.195696550484,0.977779996814,0.0201793733151,0.252524594973,1.23106625088,-0.122809960184,0.0,0.0,0.0,15.2927055439,0.7423,5.44704273727,0.170650988589,0.00211008538877,0.0757824114256,8.9325,0.0195060296686,2.0,0.252653283527,0.487369321258,0.000433600387812,0.00209996026064,0.0265580991036,0.0961433732148,-2.76147142346,-9.215038357,9.21224875032,0.0220193159749,0.274630054004,1.94947728503,0.195599341056,48.5211409738,0.134750445834,0.00222231521462,9.3976,1.46210796377,?,8.97324050548,9.0077262069,0.0212325292507,4.93393615588,0.361017498019,0.04973758242,1.0,92.9161167622,0.603420379091,0.0856444946816,0.0980859793376,1.0,91.0,0.137928457946,1.39942228341,4.9136023131,6.70600858369,-0.27714571966,0.540124855347,0.343363671425,0.0197528792998,8.97324050548,0.634226802519,158.204030522,0.0295991491736,-1.74253145511,0.0236354155069,42.5,0.487369321258,1.0,354.598777353,0.0326953264459,0.0326767877836,0.0,14.5260858572,0.0,0.246660015285,0.0173790925347,22781.3803951,-0.638397811111,1.3734546857,0.106708945028,0.0486654665996,10.4668103212,0.0,?,-1.42857792069,8.6553,0.0095775951323,122.4,0.0,0.485086938967,2.53344106101,0.130781305784,0.914039214068,0.68672734285,0.25304107853,2.9295558258,0.343363671425,0.0676217927864,0.345504406028,0.0653906528918,99.0,0.0236749925102,-2.0003737156,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.159817172631,52.6110069739,?,?,?,?,?,?,?,?,?,?,137.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.637518996972,?,?,9.0088,?,?,?,?,?,?,?,?,?,-2.07213340711,?,?,?,?,?,?,?,?,?,?,18.9854191981,9.05839417443,9.06549708029,?,?,?,?,?,116.823586692,?,?,?,?,103.0,?,?,?,?,?,?,?,?,9.05839417443,?,78.1647845121,?,?,?,100.0,?,?,35.1042016298,?,0.00267297181867,0.0,?,0.0,?,?,10630.4106936,?,?,?,?,?,0.0,137.862212503,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0621432906746,3.79179644362,0.60230052757,0.0,0.379559287356,4.08294759377,4.57669073352,0.148593144882,0.049382843202,0.037901366137,1.86760433279,0.0518270755302,-1.79762981324,0.505843154942,99.0,1.10863946942,59.0,0.0165164763735,0.0,0.00936279721734,-0.995147894548,0.373642381603,2.94079377655,0.569436616834,0.0,1.31069202433,0.114919707646,0.173265409088,9.35673990918,0.00799188404633,0.101797940011,0.0840701997497,0.746097358502,0.16174472651,0.00852855744766,-2.93502538594,-0.0173269565857,0.0,0.0,-1.10414383052,0.0200546697019,1.3503,2.12708593865,-1.13738848526,0.00787319109753,-0.893157790897,11.9032,0.0238677034977,5.0,0.00756531024776,4.67836995459,0.000470430383209,0.00808099998401,0.0804172184628,0.0511429854003,-3.53861773535,59.4988207712,4.22312399961,0.080127267041,0.00739785693811,18.7134798184,0.342431363696,3.33391788314,0.174886609439,0.00823846333864,12.1295,14.0351098638,?,9.99999335625,11.7404745763,0.0810848470771,0.177582444623,1.57900080607,0.0534864341808,0.284941348255,240.576618263,2.64182626566,0.122487394881,11.3753893308,0.188679814182,35.0,0.220406508054,0.0337774671997,1.24114460584,6.70690811542,-1.15403505533,1.4628160933,1.52556357784,0.0536967121577,11.6966266744,0.665121721085,1592.61187193,0.115215311908,-2.67397380456,0.108452210072,5.3,4.67836995459,5.4703610085,162.703269925,3.79179644362,0.00574274965977,0.0,0.133333935846,0.0,0.622162821579,0.0615235801685,92371.4885718,0.752726903802,6.10225431136,0.340528786126,0.100366130739,0.0731730689285,0.0,?,-1.77417834359,10.7792,0.12741750566,237.652,0.0,0.798943093874,0.765283652907,15.1671857745,-0.519202104258,3.05112715568,0.00801116484579,-0.271562455222,1.52556357784,0.247469981274,0.0552873819686,7.58359288723,99.0,0.0763253480603,-2.07330358949,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.281813649105,-14.4031798263,?,?,?,?,?,?,?,?,?,?,65.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.498472242865,?,?,11.5638,?,?,?,?,?,?,?,?,?,-73.6883388205,?,?,?,?,?,?,?,?,?,?,8.84869614462,9.99999335625,11.5348553846,?,?,?,?,?,75.971820496,?,?,?,?,43.0,?,?,?,?,?,?,?,?,11.5097104248,?,1438.40284624,?,?,?,4.3,?,?,354.218670782,?,0.0175631494771,0.0,?,0.0,?,?,92057.7821592,?,?,?,?,?,0.0,64.8373026168,?,?,?,12.328,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.520739424482,0.0820841391515,0.425182911752,0.0,0.321831842325,-56.8191439748,9.68695914404,1.17463135357,0.584780796865,1.80455517519,-2.77575662535,0.291909912943,1.92001243491,3.05110360778,99.0,1.09901616443,108.0,0.0022627841583,0.0,0.0966386500227,-0.182436126718,0.376475840672,7.55135089028,0.423664813322,0.0,-0.217006587222,0.0972855817352,0.386094710765,8.71890410285,0.0069829262878,0.111061486144,1.86676547598,0.7037343127,0.490840189173,0.00700447198615,2.40738385209,-0.493860280218,0.0,0.0,-0.910343838376,0.372634393478,1.1854,1.3543864429,-0.722105024146,0.00680835744155,0.357212027105,11.80125,0.00507961851144,8.0,0.00655032452559,4.35945205143,0.000460551604314,0.00656415729745,0.0252094143358,0.0140940820018,-1.76409953617,0.981901874547,16.9116845604,0.0273848213251,0.00675012264404,17.4378082057,0.437728167494,1.82716716244,0.0238839023349,0.00707407809265,12.1999,13.0783561543,?,9.99999335625,11.7024824074,0.0258831795218,0.67923462311,0.334076443374,0.0106091695718,0.140615986863,289.336095454,-2.19891627078,0.0445957230232,0.246252417454,0.0587292622971,105.0,0.0598993667941,0.0793790829994,2.17504894182,6.70331143583,-1.43897981986,-0.487488739223,3.22898638135,0.00566465789734,11.6518136922,0.19777405528,1128.27230146,0.0966030875177,-0.451437743326,0.00703309942781,100.0,4.35945205143,2.18372620702,204.195639743,0.0820841391515,0.049739573266,0.0,0.762783123539,0.0,0.606251181385,0.00905547979938,120725.136256,-2.21481008171,12.9159455254,1.41559944307,0.0815900621547,0.957512963063,0.0,?,-0.082749606628,11.0145,0.0621164594855,1000.0,0.0,0.339541642301,4.15491739304,0.328336556606,-1.61074271924,6.45797276269,0.00681215553533,-0.367580866098,3.22898638135,0.105499122113,0.0758578376914,0.164168278303,99.0,0.0254656354687,2.71727322822,'GCVS:Pulsating:CEP' +0.0,0.323689572737,1.86681521804,0.0,0.259762491105,-62.1583227612,0.0492760939587,0.157130434457,1.0,0.538693414071,-0.143662924984,0.0117591529458,-3.13632406452,0.104918556986,99.0,0.547354594113,121.0,0.019383825637,0.0,0.153214006222,0.0871272298451,-0.0360619586222,6.14787496719,0.202055912235,0.0,-2.4479289566,0.0296292273335,0.00901276428882,6.526818433,0.00200994365032,13.8189036891,1.0,0.0422195127968,0.0761554453757,0.00232637759049,-1.50774370133,0.0,0.0,0.0,-0.619260289559,0.132531898164,0.8327,5.79778701925,-0.108881410614,0.00213489560023,-0.199064901061,9.1123,0.00904109338396,3.0,0.0019801574696,3.2634092165,0.000443820984451,0.00222848849447,0.0332866365799,0.0284309116763,-0.842991401288,-6.60631559773,8.01401594878,0.0308309886792,0.00233461532919,13.053636866,0.262785267064,0.262831429833,0.164197062119,0.00213054060723,9.5146,9.7902276495,?,9.08857427971,9.11893471074,0.0327907092703,0.156820534964,0.842944665496,0.0142542184778,0.237058284202,292.734724513,1.2197681599,0.0128295758925,0.971068718211,0.0114998817945,97.0,0.124810785307,0.602885308985,2.63592473813,6.70600858369,0.0,-2.8842281824,0.0164253646529,0.0132628277894,9.08857427971,0.28068231069,263.095914349,0.02947512763,-1.13245067904,0.0428254002776,100.0,3.2634092165,2.43507357917,216.805686281,0.323689572737,0.00373123162042,0.0,0.0880628960881,0.0,2.34737190825,0.0242236639391,31571.5097219,-2.75732686576,0.0657014586115,0.217090890877,0.010112346185,0.0445461520941,0.0,?,-2.24611861277,8.6819,0.0172901336284,1000.0,0.0,3.04348882842,1.0,1.29475829095,2.33713020087,0.0328507293058,0.00204914950395,-0.848742525993,0.0164253646529,0.0906776015658,0.153214006222,0.647379145474,99.0,0.0326110936846,3.02651505111,'GCVS:Pulsating:CEP' +0.491290762476,0.0268441185099,0.642140520012,0.0,0.256462114875,56.9242491476,0.0380374554957,0.167172196607,0.18462698633,8.28643704631,3.08946085995,0.0198740019439,2.51171309106,0.644138308233,99.0,0.670704569153,115.0,0.00342964710122,0.0,0.883389009416,0.327085952292,-0.387057884581,5.40770365145,0.625368915364,0.0,0.502645516155,0.031656041837,0.019693837989,0.494453687524,0.002147049606,17.1068431635,2.65307481313,0.229036059689,0.139043477635,0.00222115747559,-2.45004756505,-0.0166294968049,0.0,0.0,-0.676109906229,1.00791649739,0.794,5.10260204833,0.272231140637,0.00221792387271,-0.501000275857,9.1919,0.00524820278612,7.0,0.00250224878522,0.247226843762,0.000458209342267,0.00204670140146,0.0237419848955,0.017115721124,-0.488326835029,-3.24219050432,10.443152008,0.0203816598471,0.00238531786529,0.988907375048,0.206918864805,0.795420761895,0.10430835214,0.00232331310509,9.6477,0.741680531286,?,9.20312537072,9.23369391304,0.0198138325141,0.0649694068186,0.58395850798,0.0309328191625,0.304865078968,97.6475403971,0.713586656887,0.0548565774206,0.0805323555298,0.00870318083835,88.0,0.114191940594,1.81368264195,1.77139415042,6.70555890839,0.804526776317,1.83246580644,0.0126791518319,0.0128964186218,9.20312537072,0.241417668775,213.502008764,0.0313226229089,1.88415761093,0.0384205667828,100.0,0.247226843762,0.92738736137,2.33524903641,0.0268441185099,0.0268215459252,0.0,0.0720584255798,0.0,0.361722703883,0.0314600052319,24339.228999,2.89157994108,0.0507166073276,0.463211306917,0.0821373340657,0.0574973346042,0.0,?,-1.22468323808,8.8537,0.035461032717,1000.0,0.0,0.256559598181,10.3432471089,0.10737647404,1.16257604301,0.0253583036638,0.00216376911515,-0.274474504235,0.0126791518319,0.079425687506,0.788658704353,0.0536882370199,99.0,0.0218758480084,-1.17489389143,'GCVS:Pulsating:CEP' +?,?,?,?,0.300443472119,39.5502704198,?,?,?,?,?,?,?,?,?,?,124.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.31760214468,?,?,11.3656,?,?,?,?,?,?,?,?,?,-14.3007775703,?,?,?,?,?,?,?,?,?,?,5.32022430066,9.99999335625,11.281425,?,?,?,?,?,70.9920393324,?,?,?,?,120.0,?,?,?,?,?,?,?,?,11.2544490144,?,1167.93371161,?,?,?,100.0,?,?,327.415078249,?,0.0196746952417,?,?,?,?,?,143655.846528,?,?,?,?,?,?,123.081641092,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.0,0.170599131986,0.279210055602,0.0,0.259741398145,63.7571757711,3.63595718243,0.640686558625,1.0,1.05984148558,2.27017640489,0.0611733117152,-1.98601655484,0.587163709724,99.0,0.717069596107,100.0,0.0108500725593,0.0,44.9821138415,0.0,1.09967273596,3.62098873251,-0.334691457865,0.0,-1.10602110415,0.0894319149804,1.0,0.0222310584052,0.0067447391033,0.412546112272,1.0,1.0,0.127457483592,0.00641387093299,2.22351080139,0.0,0.0,0.0,1.18883679298,0.392594751139,1.0443,3.09928612214,-0.869095880491,0.00627171209831,0.0,11.88905,0.00955168144966,5.0,0.0073873251933,0.0111155292026,0.000430496692188,0.00541594850049,0.0359038915751,0.0468510948003,0.0,54.8343788885,5.97827933427,0.0349297332846,0.00596975521203,0.0444621168104,0.211189118949,1.0,0.109887326365,0.00591724421127,12.1591,0.0333465876078,?,9.99999335625,11.807727,0.0353260707874,0.158232777775,1.19491026783,0.0353980320649,0.610011856666,107.401393957,-1.09051706684,0.0812794979885,0.511797395957,0.0455808720138,96.0,0.14130573955,0.412546112272,2.1912802087,6.70510929338,0.0,-2.25552401116,1.21198572748,0.0106133598308,11.7885385543,0.353045993294,1658.16719013,0.0908498486594,0.648019300625,0.0340508696227,5.9,0.0111155292026,3.55550493407,165.609570307,0.170599131986,0.0267937845401,0.0,0.154083510148,0.0,0.358526126827,0.0394856098657,164158.551823,-2.68428504235,4.84794290991,0.8279069003,0.0590545558059,0.182997254494,0.0,?,1.36704622689,11.1148,0.108405675784,381.544,0.0,0.587210448135,1.0,0.682396527942,-1.82661903819,2.42397145496,0.00656912959981,0.26273426855,1.21198572748,0.105591598356,44.9821138415,0.341198263971,99.0,0.0300460591185,1.7205546313,'GCVS:Pulsating:RR:RRAB' +-0.816435504802,0.200416051121,0.341226647238,0.0,0.193296655884,57.1249913647,0.0215158504078,0.991828969922,0.160724511146,2.49481015719,-1.71654741553,0.0707491196746,-2.17212110948,0.610039502476,99.0,0.533659715294,118.0,0.00761627379461,0.0,0.144659004424,0.299249741279,0.0,5.85661099866,0.0,0.0,-2.61196442106,0.0742150249588,0.219040559777,2.90349998412,0.00568498760934,16.1594919152,3.31576664223,0.544260731626,0.143680255744,0.00527872317292,2.44348559923,0.398097576192,0.0,0.0,0.0,2.49481015719,0.7497,3.18795352828,-0.329321864298,0.00596627582745,0.128354565249,11.37795,0.0122505698366,6.0,0.00545462175042,1.45174999206,0.000431707831606,0.00503940719525,0.0237014730158,0.0332803801749,5.57178236015,-0.604014261724,8.55424291974,0.0234660143237,0.00538923974674,5.80699996824,0.191792722668,7.31570730607,0.0768909846358,0.00529062146496,11.6695,4.35524997618,?,9.99999335625,11.3356432203,0.022420771127,0.455466066345,0.73224565582,0.0115065132807,1.0,109.466926488,-2.07395154803,0.0380769765624,0.601248153362,1.0,77.0,0.117778109543,18.2222945234,2.3753866989,6.70510929322,-0.276911058737,2.434906434,0.00717195013593,0.00512433184827,11.324543081,0.432724163144,1146.67168677,0.0730553811514,-1.80880186495,0.0287048993384,100.0,1.45174999206,1.0,24.6683073217,0.200416051121,0.0458844439126,0.0,0.992789787696,0.0,0.565944686957,0.00529433347774,134160.587352,-1.76992240355,0.0286878005437,0.439383375202,0.0588339487644,0.176751572018,0.0,?,1.199401422,10.9198,0.0641946344714,1000.0,0.0,0.376262975637,9.5749425319,0.801664204482,-0.814380412398,0.0143439002719,0.00508978421406,0.921844608005,0.00717195013593,0.0784644307419,0.145284497044,0.400832102241,99.0,0.022933326408,-2.65852518709,'GCVS:Pulsating:CEP' +0.677411942309,0.0856295798569,0.415242990859,0.0,0.328103978897,-61.0033867708,0.113126433519,0.424174808888,0.747930923123,2.12810973618,-1.18210255874,0.016008257056,-0.676844228291,0.305485721938,99.0,0.879850827957,117.0,0.00950308400514,0.0,0.453062341079,0.100050352004,0.144928481877,6.22661189707,-0.480105168107,0.0,1.83039076465,0.0407730997949,0.00924171919541,1.5004802532,0.00292771447887,6.38738827541,0.590464922922,0.038950952785,0.117989317407,0.00273551805913,-2.06340247259,-0.427124980861,0.0,0.0,-0.518488689663,0.404016534858,1.1555,4.82176464372,-0.518908405674,0.0028465978803,-0.237276591674,9.9953,0.0113309818854,4.0,0.00316170048401,0.7502401266,0.000431342424065,0.0028296885272,0.0494433110912,0.0239621402068,-0.918698232733,-4.84861793778,8.65419955238,0.0385217451926,0.00286648587862,3.0009605064,0.381075466645,0.202755598817,0.181019434859,0.0030052339525,10.436,2.2507203798,?,9.88718516163,9.93308461538,0.0440335890498,0.0661331981789,0.973326134037,0.0406208270981,0.373590110141,292.004968383,2.47821886691,0.0419012857286,0.256888739571,0.0169562336493,115.0,0.0958018601725,0.239655259914,3.34521283714,6.70600858377,-2.2872994093,0.595221273215,0.037708811173,0.0065517797916,9.88718516163,0.258439247445,229.137405055,0.04072809545,-2.50588967562,0.0545095898151,100.0,0.7502401266,1.7902349865,213.630059596,0.0856295798569,0.00786322340655,0.0,0.0337938155742,0.0,0.846509724374,0.0793069405102,26579.9389864,2.49946304352,0.150835244692,0.257646650909,0.0224900630978,0.0563657013541,0.0,?,0.767200837829,9.2805,0.0967550476369,1000.0,0.0,2.25645352362,0.647424574963,0.342518319428,2.91310890229,0.075417622346,0.00312102456016,2.69692680821,0.037708811173,0.114940643688,0.78717176052,0.171259159714,99.0,0.0328846099501,-2.41891747908,'GCVS:Pulsating:CEP' +0.0,0.138404222829,0.548767446333,0.0,0.228197589035,62.0187334513,12.8254350939,0.813898680553,1.0,3.61260653599,0.503144806828,0.180374297413,2.35036872221,2.35647862923,99.0,0.652398911506,83.0,0.00266179371175,0.0,13.6615130217,0.0,0.0,6.10719309993,0.0,0.0,2.66939322716,0.092486851716,1.0,0.0731983345044,0.00808900135478,0.116955096573,1.0,1.0,0.343133147989,0.00654217676121,-2.92343758243,0.0,0.0,0.0,0.0,3.61260653599,0.9152,1.72864628909,0.0305947778028,0.00725232529277,0.0,11.351,0.00323792571204,4.0,0.00653950293986,0.0365991672522,0.000559643346011,0.00668818825347,0.0206003248851,0.0164491290631,0.0,2.36409227535,13.2455590334,0.0232561989862,0.00693640120575,0.146396669009,0.278465737623,1.0,0.0344729895158,0.00682951602997,11.8647,0.109797501757,?,9.99999335625,11.3958710843,0.0210233284168,2.22095285655,0.31143650923,0.00297934829899,1.0,102.115354267,3.03446405382,0.0373035651228,0.415212668486,1.0,23.0,0.0791503314213,0.116955096573,1.23284438508,6.70510929322,0.0,1.62911373537,4.27514503132,0.00785759084428,11.3592058747,0.193870059396,1080.69246843,0.092593447997,-2.17559183749,0.00646645135368,100.0,0.0365991672522,1.0,12.3019123362,0.138404222829,0.0130162298394,0.0,0.310468450173,0.0,0.592040783078,0.0217953576527,88616.7824115,-2.6043943542,17.1005801253,1.99758652533,0.101328877044,1.01258954489,0.0,?,1.20681670855,10.9495,0.0379460557979,1000.0,0.0,0.210021579817,1.0,0.553616891315,-0.693941406742,8.55029006263,0.0063597433102,0.875157086636,4.27514503132,0.0609200492347,13.6615130217,0.276808445657,99.0,0.0213883567537,-2.35664660424,'GCVS:Pulsating:CEP' +0.0,0.323295392341,0.603017396307,0.0,0.0765473123846,56.7281483103,0.0914205983442,0.439217841134,1.0,0.534834688672,2.69965920621,0.0304312507103,0.609725535204,1.08651009425,99.0,0.121757869179,124.0,0.00131870502558,0.0,0.546232281525,0.0,0.00162523945369,4.81595206555,0.625234465903,0.0,2.63414247582,0.0203294558474,1.0,1.83072299793,0.00145408906117,16.4076808418,1.0,1.0,0.130997267889,0.00142997924889,1.92001984952,0.0,0.0,0.0,-0.892725150495,0.175293766296,0.2954,4.65602943119,-0.202817303596,0.00144135026565,0.0,7.96045,0.00497887823808,3.0,0.00168167293608,0.915361498965,0.000424759727015,0.00142484644011,0.0106816403125,0.0108572587262,0.0,-3.43414438025,5.97167430866,0.0103691810537,0.00145741952999,3.66144599586,0.0546181805044,1.0,0.0472703081301,0.00140951734914,8.1055,2.74608449689,?,7.96118065495,7.95830483871,0.00914620886559,0.0683293101395,0.325080405071,0.0206666039489,0.66334237491,97.7646035132,1.7854349074,0.00635455066802,0.969886177023,0.0748858831543,14.0,0.201788146249,16.4076808418,2.43049746493,6.70600858361,0.0,1.50192185225,0.0304735327814,0.00335962681122,7.96118065495,0.132349865576,43.7950120503,0.0203110159019,-1.6663498586,0.0164535211082,100.0,0.915361498965,3.09358176873,2.53584839809,0.323295392341,0.0137617420076,0.0,0.0546383530729,0.0,1.49366557459,0.0277076535689,5386.78648219,1.64135940509,0.121894131126,0.291453963195,0.0104777188955,0.0882047538339,0.0,?,-0.33561698574,7.8101,0.0158149314878,1000.0,0.0,0.983497082335,1.0,1.29318156936,1.81335238691,0.0609470655628,0.00155655548667,2.04877435334,0.0304735327814,0.0285379023075,0.546232281525,0.646590784682,99.0,0.0100811379262,-1.27281837936,'GCVS:Pulsating:CEP' +0.25585543712,0.186832619303,0.287755839394,0.0,0.226690930908,62.1540672387,0.853097421751,0.143423745377,0.032840457264,2.67619220811,-1.87550159097,0.00684422653159,-1.07790393401,0.0909654170549,99.0,0.643339195009,86.0,0.00636213476323,0.0,0.010623118265,0.0,0.0,5.43548676534,0.0,0.0,-0.802746723058,0.00841483689103,1.0,7.21343782953,0.000622940023014,1.75829859727,0.234952793247,1.0,0.0322688916967,0.000597211595276,2.57657248065,0.15483265451,0.0,0.0,0.0,2.67619220811,0.7871,4.1944490219,-0.59698558936,0.00061403903103,0.0,4.29285,0.0100671623517,4.0,0.000607697395323,3.60671891477,0.000559643421179,0.000601847209481,0.0260404258022,0.0176621857924,0.0,2.52566553198,9.69072925539,0.0266279567582,0.000600386706107,14.4268756591,0.230759391767,1.0,0.0911060632826,0.000603764855017,4.4972,10.8201567443,?,4.21480503839,4.24228604651,0.0238123866311,0.0148953564111,0.496257801027,0.0404479826902,1.0,102.240453719,1.86965735573,0.081101543657,0.56049785791,1.0,78.0,0.132663316826,1.75829859727,2.16568825554,6.70510929322,-0.632663043066,-0.72380062848,0.28436580725,0.00409891299079,4.21480503839,0.18191047181,3650.11194986,0.00846153538184,2.60905766766,0.0220971269747,100.0,3.60671891477,1.0,12.6287605899,0.186832619303,0.0481293342214,0.0,0.0175799430845,0.0,0.335243703381,0.0329451424711,310259.515739,-2.17170938374,1.137463229,0.0583852329845,0.0610105628406,0.0272220491949,0.0,?,-0.772237889146,3.7101,0.0921950191014,1000.0,0.0,0.430590105437,1.33140310603,0.747330477213,1.04466796123,0.568731614501,0.000611557265574,0.504312288208,0.28436580725,0.0742390635841,0.0578604351888,0.373665238606,99.0,0.0275726618959,-0.614719651832,'GCVS:Pulsating:CEP' +-0.0989858171887,0.225923239156,0.398307891664,0.0,0.143792685088,-47.154718318,2.14093703534,0.119749129237,0.0103916952623,0.825983011992,0.830434605095,0.00978624829014,0.52678757456,0.0527945221261,99.0,0.343733701413,143.0,0.0143204006076,0.0,0.0102361124547,0.0,-0.10230055352,6.45751596489,-0.305172044545,0.0,-0.954075918534,0.0106754912353,1.0,1.74335559932,0.000746514210284,0.70062779766,0.0191885695702,1.0,0.0274143331086,0.000746140520027,0.532078915893,0.0375843856456,0.0,0.0,-0.520308543364,0.169703025957,0.4694,5.64470899854,-0.352776906689,0.000760757598585,0.0,6.0601,0.00207923128588,4.0,0.000818936521253,0.871677799661,0.000440060654088,0.000772996077906,0.0162857913524,0.0281388037536,0.0,-2.04203560589,8.87166622887,0.0147598814033,0.000731627217211,3.48671119865,0.127126345854,1.0,0.0805057007759,0.00075889436066,6.2453,2.61503339898,?,6.03601492807,6.04257132867,0.0143294779779,0.20053122626,0.52383992922,0.00357338085442,0.314418673352,310.782861483,-0.810951546191,0.0233882421051,0.677769717469,0.00720267261748,74.0,0.136148913971,0.70062779766,3.13100941505,6.70600858369,-0.929849945825,2.46008567312,0.713645678447,0.00642728827124,6.03601492807,0.290291886673,516.662048526,0.0107119564807,1.18701100134,0.0177182210576,100.0,0.871677799661,1.8839211158,236.14837344,0.225923239156,0.0200736262522,0.0,0.0275051156855,0.0,0.632740609501,0.0260218494872,73366.0108907,-1.04689853524,2.85458271379,0.359119765615,0.029268641713,0.0435202802927,0.0,?,-1.94513516295,5.7759,0.0401508704151,1000.0,0.0,0.524275831684,0.148858447919,0.903692956626,-2.58431912881,1.42729135689,0.00080956845726,1.95988758927,0.713645678447,0.043617478036,0.301709237119,0.451846478313,99.0,0.0160061958653,-1.88314443807,'GCVS:Pulsating:CEP' +0.0,1.36646236515,0.393617474277,0.0,0.20537015409,-25.1944420384,7.25083507992,0.179296093208,1.0,0.143495726435,-2.47873746788,0.032806550352,1.15011761734,0.170653006416,99.0,0.484603699356,83.0,0.0242610166451,0.0,9.08114071334,0.0,0.0770734826568,3.28873746332,0.0797296311859,0.0,-0.436485188358,0.050624999874,1.0,0.110118324511,0.00435993127218,0.206872723413,1.0,1.0,0.0422835589994,0.00358560547308,-1.53430701394,0.0,0.0,0.0,-0.836795819859,0.0422028920684,0.8474,2.69082640235,-1.26487896183,0.00335764467367,0.0,10.3479,0.0311003062806,4.0,0.00367071169258,0.0550591622554,0.000434324977462,0.00378227556879,0.0355847281238,0.0755630494571,0.0,33.8354245787,4.80874182204,0.0325677719228,0.00359322691109,0.220236649022,0.144968393319,1.0,0.108475758709,0.00369000331593,10.4819,0.165177486766,?,9.99999335625,10.2587072289,0.0301468447848,0.0920352846474,0.822935598092,0.038017468971,0.140632743518,289.291384617,2.0774468269,0.063593401972,4.09938709544,0.0266976289762,28.0,0.24776905461,0.206872723413,3.24722149322,6.70600858369,0.0,2.6759363421,2.41694502664,0.0206297875503,10.247666062,0.756874974901,200.702508416,0.0504236177288,-2.27584848271,0.0181856417942,100.0,0.0550591622554,2.30860311914,191.855775165,1.36646236515,0.0208980311321,0.0,0.0794870574206,0.0,0.472900768887,0.0503272303212,16457.6056901,-0.997858458801,9.66778010656,0.111784466958,0.0190857262989,0.195931555769,0.0,?,-1.720298656,9.6345,0.0832999491898,1000.0,0.0,1.67313689662,1.0,5.46584946058,-1.78283672604,4.83389005328,0.00327848012878,-1.81752694578,2.41694502664,0.0895818957996,9.08114071334,2.73292473029,99.0,0.0331467357567,-0.186277929459,'GCVS:Pulsating:RR:RRAB' +0.28864634818,4.23027222938,1.38656987122,0.0,0.248597080405,57.1832270962,1.05028718843,0.278673246092,0.0851698763954,0.118195702992,1.61327325109,0.0416381669003,-1.51653942935,1.10412886881,99.0,0.531228884611,99.0,0.00472563932038,0.0,5.93317087677,0.0,0.0,3.23696693215,0.0,0.0,-2.02571593981,0.0797867161007,1.0,0.032108113461,0.00644957121377,1.42818080286,0.601871826133,1.0,0.104178709143,0.00589967302696,-0.972268471714,0.346772943914,0.0,0.0,0.0,0.118195702992,1.0384,2.8138429342,-0.728182636509,0.00617858832072,0.0,11.36,0.018156179726,3.0,0.00545360337782,0.0160540567305,0.000424567453014,0.00589105370773,0.0343785640963,0.0513295407189,0.0,-2.96926243778,5.04136121456,0.0329969242813,0.00596316407371,0.0642162269221,0.181035368706,1.0,0.131848528087,0.00600805705378,11.7237,0.0481621701916,?,9.99999335625,11.2935242424,0.0359100173547,0.187224868557,0.928791085084,0.0311089870975,1.0,97.9915281559,2.57460192177,0.0398625135859,12.6908166882,1.0,25.0,0.175747957706,1.42818080286,1.2586470831,6.70331143583,-1.3100774207,-0.721938654427,0.350095729475,0.0191468707606,11.2777625708,0.886909411844,1093.30773213,0.0805215164981,-0.116682756994,0.0292347769856,7.3,0.0160540567305,1.0,2.98638672893,4.23027222938,0.0403915020097,0.0,0.0869505235525,0.0,0.826289118649,0.0587639570619,107144.157749,1.7425826385,1.4003829179,0.300228178338,0.11094864046,0.187538514234,0.0,?,-2.34976379829,10.6853,0.0247306007346,28.105,0.0,0.306932780763,2.99892940993,16.9210889175,-1.45823987269,0.700191458951,0.00635500841388,-0.314672364308,0.350095729475,0.0957897286516,13.4913675224,8.46054445877,99.0,0.033299392424,0.306243042259,'GCVS:Pulsating:RR:RRAB' +0.0,0.0915029809942,0.340488524274,0.0,0.236627768041,60.991129505,0.0581744939852,0.392757574072,1.0,1.74152554635,1.85947102075,0.0247805001497,2.79792267183,0.765351704907,99.0,0.815013053224,99.0,0.00261518397688,0.0,0.29681425964,-0.00842662644493,1.75092243753,4.73611407103,-0.0984179477804,0.0,0.49044617512,0.028627382513,0.0274252862525,3.36911036961,0.00199708293643,10.9422006022,1.0,0.0903615404797,0.092137181963,0.00213366384097,-1.07737511616,0.0,0.0,0.0,-1.19385925038,0.540292990187,1.0036,4.18453519568,-1.17984680045,0.00200596554312,-0.0871237868664,8.7841,0.00313426944183,5.0,0.0021844430071,1.68455518481,0.000432171410245,0.00186838833916,0.0260912338926,0.0220245000795,0.202511231243,1.19338394577,8.36546904391,0.0282048555523,0.00188011267395,6.73822073922,0.209425481457,0.891937790005,0.0881716238451,0.00197156597219,9.0127,5.05366555442,?,8.71435581961,8.73737979798,0.0250345175336,0.0321196739636,0.998782832398,0.0579553648926,0.0823995283498,101.373682845,2.12792755549,0.131062245849,0.274508942982,0.014971576309,82.0,0.143706799892,1.4496725856,2.84592886972,6.7051092933,0.0,-0.940829773137,0.0193914979951,0.00519155939043,8.71435581961,0.211587728463,330.701398035,0.0284313080296,1.249610676,0.0460657954581,100.0,1.68455518481,3.94332371279,10.3530861812,0.0915029809942,0.0134842384598,0.0,0.0598289918754,0.0,0.21759161613,0.0312742869054,32408.7370074,-1.442298086,0.0775659919803,0.704374244802,0.0626388194168,0.0416988466683,0.0,?,-0.961432860303,8.0091,0.0800936818181,1000.0,0.0,0.429718944156,1.0,0.366011923977,1.81525529989,0.0387829959902,0.00224222304641,-1.82659307758,0.0193914979951,0.0849063983825,0.29681425964,0.183005961988,99.0,0.0277380218895,-0.240238081836,'GCVS:Pulsating:CEP' +0.316918617561,0.156051565703,1.23046348876,0.0,0.266560244045,60.7088774801,0.196114232341,0.637646594511,0.0830244241835,3.20406910208,2.51251878995,0.0287749138805,-0.292812511742,0.557811001769,99.0,0.790019846425,105.0,0.00356808816832,0.0,0.0571021784233,-0.236362414862,0.0,7.043580823,0.0,0.0,-0.322663535734,0.031431084948,0.0296640183979,2.42496606517,0.00206447773245,3.0273668585,0.309631709118,0.452146347012,0.220125929299,0.00216427743207,-2.67211341434,-0.220056910399,0.0,0.0,0.0,3.20406910208,0.8849,4.58199842557,-0.188150769519,0.00252990434117,-0.469736769071,9.0488,0.00442634736723,10.0,0.00229739715282,1.21248303259,0.000467436756882,0.00239160767502,0.0272888609474,0.0111366843988,-1.3805641966,0.872193921056,12.3575122903,0.0283048818906,0.00253782655063,4.84993213034,0.33132161871,1.78457171491,0.0697491664075,0.00231245021247,9.4217,3.63744909776,?,8.98999952454,9.01747333333,0.0268113525544,0.0610619705287,0.447881992063,0.0378745495567,1.0,101.140793718,1.40726915643,0.0351121882337,0.468154697108,1.0,71.0,0.0831507972125,0.607892586572,1.56750310642,6.7051092933,-0.936676197071,-1.1956500554,0.0653714107804,0.00331527788676,8.98999952454,0.208697859017,278.314833808,0.03110302435,0.944221153435,0.0103516342628,100.0,1.21248303259,1.0,9.78075635806,0.156051565703,0.00539004694465,0.0,0.158765115489,0.0,0.766559229562,0.0147458160965,28944.742716,-0.619569545585,0.261485643121,0.46650410559,0.0725069667554,0.217146515696,0.0,?,2.77247015,8.5368,0.0218792767176,1000.0,0.0,0.397089984359,1.16796661432,0.624206262811,0.821394240977,0.130742821561,0.00218282189935,1.35595808823,0.0653714107804,0.122469636372,0.220669064914,0.312103131406,99.0,0.0256901080175,2.75481610042,'GCVS:Pulsating:CEP' +-0.239426714288,2.10229498417,0.510633757512,0.0,0.380474191489,-0.362155220901,8.51364300498,0.849626713217,0.167405886556,0.0476649447672,2.2936957348,0.0345756832084,1.76760241381,1.15939004368,99.0,1.03690393028,66.0,0.00465332652424,0.0,0.0873678139483,-0.115019451229,0.900931558079,3.89790911336,0.345922154933,0.0,-2.28934834614,0.0700494753156,0.0267955796133,4.93420585081,0.00488286011069,0.0818376735812,1.6182216257,0.229554376376,0.123237724847,0.00491775714482,2.02826179058,0.94109199303,0.0,0.0,-1.04837132409,0.015299707559,1.2548,2.5289596945,-0.682513416575,0.00462067834154,0.459292873984,10.8083,0.0134827362852,4.0,0.00515106130723,2.4671029254,0.000440428542609,0.00481288430262,0.0590601504129,0.0408561442322,-0.580058462884,59.8251416258,6.41601307952,0.0586914928928,0.00497575026762,9.86841170161,0.383330675563,0.781176240521,0.142690609243,0.00463839262372,11.1793,7.40130877621,?,9.99999335625,10.6711287879,0.0597459311277,0.0689577233637,1.53987460029,0.0692838257025,0.0988592261742,276.96040779,-1.38432851964,0.0420847090225,6.3068849525,0.0739923917697,38.0,0.148754825756,0.00996556313297,1.54504597575,6.70690811542,0.219281681766,-0.393907302231,2.83788100166,0.00628384949656,10.6085478479,0.636846664687,654.06998304,0.0703313089989,1.30314213232,0.0398223196799,2.6,2.4671029254,3.44637837115,180.312958799,2.10229498417,0.00991252586203,0.0,0.0687605623001,0.0,1.3669204722,0.0861103731427,42514.5488976,-2.67711191582,11.3515240066,0.378555837982,0.209164642328,0.125455968798,0.0,?,2.01982509964,9.9245,0.113272395394,0.906,0.0,0.267739516116,11.0333007434,8.40917993666,-1.09719728253,5.67576200332,0.00458667450181,2.28190360551,2.83788100166,0.165563757081,0.0741667825463,4.20458996833,99.0,0.0609681409771,2.6356857758,'GCVS:Pulsating:RR:RRAB' +0.347634312513,0.44617916422,0.870224532337,0.0,0.1187879672,62.7230755831,0.307757434844,0.372259374313,0.0657466992073,0.406695635573,-2.68183599181,0.0442886420654,-2.08301455076,0.303208243615,99.0,0.260421736837,111.0,0.00978704117088,0.0,0.331645274875,0.0644654760216,-0.111440807399,5.66885602621,0.328262336687,0.0,2.90488783361,0.0368231392545,0.0830437707525,0.355617122618,0.00254305332624,1.58972337373,0.324556456171,0.438480263257,0.0887983147978,0.00281355021701,-1.4304185921,-0.446958676108,0.0,0.0,-0.594401926025,0.0907724356053,0.4152,4.20078904077,0.221513451443,0.00233142663189,0.33900553956,9.7455,0.00348991577191,3.0,0.00282952792761,0.177808561309,0.000454127351878,0.00240999828108,0.0145876069365,0.0304196685529,-1.51043858163,3.25926439486,7.41566689179,0.0143707418105,0.00251823897486,0.711234245236,0.11885563064,4.34100982145,0.0600916145797,0.00260850299841,9.9964,0.533425683927,?,9.75045053616,9.75896666667,0.016027638832,0.0966460044549,0.449679307096,0.0254990887601,0.367762431803,102.975261714,0.488757742931,0.0076525288782,1.33853749266,0.0268080279553,12.0,0.123555229656,0.686285966039,3.58906010917,6.70600858369,-0.517782395123,-2.24124175439,0.102585811615,0.00700979635787,9.75045053616,0.278633419606,36.5376021189,0.036617599561,-2.10175640321,0.0204317936069,100.0,0.177808561309,2.14479117458,14.5042860412,0.44617916422,0.00842359350183,0.0,0.473535949848,0.0,2.04968976213,0.00535335526283,4019.13623308,0.628874238546,0.410343246458,0.804799799794,0.0028680237454,0.132667274159,0.0,?,-1.50117005784,9.5812,0.0182971619514,1000.0,0.0,5.68780573941,1.23503907249,1.78471665688,-2.24780506446,0.205171623229,0.00266150933776,0.67609504767,0.102585811615,0.0423540987058,1.40526254541,0.89235832844,99.0,0.0147476563863,2.18955656019,'GCVS:Pulsating:CEP' +-1.09184377829,0.186629804018,0.561900721517,0.0,0.272310149071,60.5833275009,1.17388808738,0.154709064479,0.0894495469542,0.944294432255,1.41021165875,0.0120116006315,-1.78797654613,0.0663872685903,99.0,0.60015355943,117.0,0.0274647665677,0.0,0.437536876148,0.723107250025,0.468384105615,4.79625103118,0.0543574030783,0.0,-0.792409046517,0.0272384639456,0.0156404541162,0.348013844812,0.00186397263524,0.458066543431,0.528638222665,0.15963172706,0.0424011237754,0.00189808242239,-2.43705282709,1.13639181831,0.0,0.0,-0.387986283841,0.301090820795,0.9999,5.0887011905,-0.0933279699886,0.00204670719928,-0.290712367135,9.0614,0.0186899749071,3.0,0.00199247068433,0.174006922406,0.000456752728716,0.00192859237194,0.0382527163399,0.0471207451414,-0.56573441833,0.743325029291,6.18800040925,0.0366463987629,0.00183826364634,0.696027689623,0.236537286888,1.0162175408,0.173321527322,0.00181576942681,9.5312,0.522020767217,?,9.01031594007,9.04522991453,0.0382251569562,0.025506929561,1.03799383046,0.0730127222011,0.099255256792,101.127646156,0.629181526096,0.030684286411,0.559889412054,0.0096494356936,48.0,0.142795992477,0.0480646153304,2.69440962294,6.70600858365,-0.519560545508,-2.56091450339,0.391296029125,0.0134410465204,9.01031594007,0.529104959635,339.692135424,0.0271503930126,-1.54576506755,0.0364434032706,100.0,0.174006922406,3.08705847537,9.71569361844,0.186629804018,0.0304874692736,0.0,0.0264224794208,0.0,1.09555117097,0.0719345742067,39404.2877092,1.868671213,1.5651841165,0.104194158264,0.0463606209462,0.0539682171691,0.0,?,-1.41249669103,8.5313,0.0646471509346,1000.0,0.0,0.765774861303,0.876641508895,0.746519216072,0.957287633789,0.78259205825,0.00194755426487,0.99336912428,0.391296029125,0.105220739913,2.02949197812,0.373259608036,99.0,0.0363260547661,-1.40157299942,'GCVS:Pulsating:CEP' +0.0,0.0411528312611,0.508802758113,0.0,0.149470072012,42.9107555446,2.8297798436,0.326405420109,1.0,4.59101774971,1.15557645982,0.0569552146792,-0.429831309586,0.386964351949,99.0,0.289553957459,91.0,0.0131661731934,0.0,21.0663177376,0.0,0.298770997133,3.11053790519,-0.425570267664,0.0,2.06896624344,0.0724747741082,1.0,0.047469140666,0.00526566966176,0.530076572349,1.0,1.0,0.212153375678,0.00540710175015,-2.44320575177,0.0,0.0,0.0,-0.405377169082,1.7051111973,0.5383,2.6917078794,-0.21896528538,0.00514493274011,0.0,11.083,0.00229973658511,3.0,0.00519896221991,0.023734570333,0.00044234152531,0.00519532834421,0.0266744039411,0.0244409063083,0.0,67.0560178515,3.95535987695,0.0295532740538,0.00547121211529,0.094938281332,0.12160517665,1.0,0.0846373283915,0.00564983779867,11.2963,0.071203710999,?,9.99999335625,11.0574846154,0.0307444026417,0.218569729153,0.821834256274,0.0230265819655,0.786900930534,145.12877837,-3.09954065439,0.0121315339353,0.123458493783,0.0441414479006,41.0,0.184330918802,0.530076572349,0.597071977866,6.70510929334,0.0,-3.12041658143,0.943259947867,0.015284590754,11.0420649426,0.259557080125,941.061875628,0.0727338648438,-0.326054964315,0.0366702105666,1.8,0.023734570333,3.51947224227,156.436409136,0.0411528312611,0.0354431291242,0.0,1.13482387517,0.0,2.03259664927,0.00440239035963,84695.5688065,1.60361254911,3.77303979147,2.21622197331,0.00888405718518,0.132989028736,0.0,?,-1.76830010016,10.758,0.0462693316568,9.213,0.0,2.96085971479,1.0,0.164611325045,1.65914876845,1.88651989573,0.00526665380923,1.80154993083,0.943259947867,0.0768334953615,21.0663177376,0.0823056625223,99.0,0.0255682176277,1.95321065224,'GCVS:Pulsating:RR:RRAB' +-0.0888332585702,0.103343176815,0.718907791565,0.0,0.17700098713,-59.5958687379,0.932028257772,0.404439406268,0.0430726785147,1.52971895267,2.28023192568,0.0119855741773,-0.597462301357,0.125401057298,99.0,0.398171404999,105.0,0.00676973183977,0.0,0.432880037762,-0.489387664488,0.160798523377,6.79049350529,-0.516240985259,0.0,2.94525941371,0.0120640422256,0.0106665415983,0.196599925152,0.00096254333234,0.732776301107,0.107250416557,0.116237452003,0.0581341612166,0.000807279559567,-2.82633661813,0.181629515893,0.0,0.0,-0.0294193412862,0.306285058922,0.5703,6.19433439046,0.585740238332,0.000871770123837,0.535608137976,6.2091,0.00232689630576,4.0,0.000816649396468,0.0982999625758,0.000442466278008,0.000849229295906,0.0170911663798,0.0135210104383,-0.17875989279,-7.70368473428,11.4605960732,0.0184372541053,0.000832856623251,0.393199850303,0.210424233931,0.370702361367,0.0739048483154,0.000982003932744,6.5949,0.294899887727,?,6.22690166157,6.23984857143,0.0183606709972,0.250720303475,0.323802444376,0.00357863497985,0.216240484508,298.630036454,2.62680549426,0.0232026722922,0.310029530444,0.0505920511651,103.0,0.0884696587793,0.0391263605712,2.17008635045,6.70555890834,-0.741716357219,-3.07617433341,0.310676085924,0.00190975750227,6.22690166157,0.140195252839,803.211387364,0.0121136505161,-1.39416375145,0.0183443977697,100.0,0.0982999625758,1.96703154328,227.865357952,0.103343176815,0.0014518778702,0.0,0.0557291000334,0.0,0.844753110933,0.0161961924494,83533.9842858,1.70757095279,1.2427043437,0.387723328269,0.0438356538635,0.0506335419431,0.0,?,1.29875158301,6.0246,0.0325258509633,1000.0,0.0,0.385606387732,0.962647794027,0.413372707258,-0.630462110413,0.621352171848,0.000813492355144,0.218993586508,0.310676085924,0.0575333020437,2.41708210317,0.206686353629,99.0,0.0199646219396,0.80437634655,'GCVS:Pulsating:CEP' +-0.138952786631,0.15597147585,0.382780224663,0.0,0.237328088461,-54.1068409243,2.6143799836,0.209586623817,0.0781759089284,3.20571436074,1.35388401058,0.0519944538988,0.912638939288,0.922615289015,99.0,0.831082053585,123.0,0.00501537046661,0.0,0.379823845127,0.0,0.0,6.25358502478,0.0,0.0,2.62801333308,0.0671613656095,1.0,0.366085363368,0.00499705765216,0.573749802787,0.182224793659,1.0,0.170352814407,0.00470775804265,1.34033245099,0.0167371606241,0.0,0.0,0.0,3.20571436074,0.8533,4.57694647851,-0.0257330485525,0.00510753356104,0.0,11.1587,0.0065438607124,9.0,0.00475186947243,0.183042681684,0.000443960582658,0.00458553889907,0.0214806203914,0.0281861564681,0.0,0.196293046435,10.3886973558,0.0242273138248,0.00486902050347,0.732170726735,0.23463835265,1.0,0.0901925163939,0.00536918666449,11.5808,0.549128045051,?,9.99999335625,11.1531747967,0.0225859262826,2.28835821889,0.547820783238,0.00210569910292,1.0,297.052859349,1.42274280783,0.0531029189498,0.467914427551,1.0,60.0,0.100705948461,0.573749802787,2.67517123104,6.70600858377,-0.866570170693,1.8094370732,0.871459994532,0.021298031138,11.1282860845,0.348700507727,955.550045188,0.0674441005757,-1.93769805933,0.0187448300634,100.0,0.183042681684,1.0,217.039770539,0.15597147585,0.0136794986831,0.0,0.224380864497,0.0,0.460658966538,0.0207932971702,116577.105513,2.37822142129,3.48583997813,0.765792831195,0.082040720256,0.259461536123,0.0,?,1.67492515623,10.7275,0.0565845952211,1000.0,0.0,0.276523079086,1.24757212618,0.623885903402,-0.0436767773441,1.74291998906,0.00489727044761,1.70265603723,0.871459994532,0.0984473591156,1.40569873391,0.311942951701,99.0,0.0239495602245,0.603773691908,'GCVS:Pulsating:CEP' +?,?,?,?,0.208210388883,65.1224411469,?,?,?,?,?,?,?,?,?,?,102.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.240683470514,?,?,11.0225,?,?,?,?,?,?,?,?,?,8.63403270513,?,?,?,?,?,?,?,?,?,?,7.01877522372,9.99999335625,10.9984990196,?,?,?,?,?,82.4459045553,?,?,?,?,57.0,?,?,?,?,?,?,?,?,10.9783557557,?,807.792066886,?,?,?,100.0,?,?,325.545168094,?,0.0167240601632,?,?,?,?,?,81586.9987555,?,?,?,?,?,?,101.777899751,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0,0.0781518669525,0.689316499107,0.0,0.166619253102,-54.9407200063,0.00127766850778,0.415363862316,1.0,2.30251159815,2.12509666468,0.232185985502,-0.547404909682,0.135203308692,4.0,0.420348721919,115.0,0.0218794367834,3.3991293645,5.84692360003,-0.307185823078,0.00091917881761,7.36990294535,-0.201353288992,0.0,-0.0648824870297,0.0605956033006,0.0686660501409,0.171030112313,0.00279060907054,387.007024997,1.0,0.39580512359,0.0680399994662,0.0193574912532,-2.52154284291,0.0,0.0,0.0,-0.603409701316,0.364019917428,0.6138,5.31516532468,-0.149599007253,0.00272658068232,-0.237393706018,9.7907,0.00334250894986,1.0,0.0202441881361,0.0855150561566,0.000425889502594,0.00305938933393,0.0177152335661,0.0430131772996,-1.09983240425,-0.956666205326,12.9285038638,0.0178226664928,0.0233858508276,0.342060224626,0.198000154926,5.58501417977,0.079491532262,0.00257351743091,10.0402,0.25654516847,?,9.76207716663,9.77561043478,0.0153150091466,2.16198493468,0.176206266208,0.00961313629074,0.173983676197,297.322257791,2.50303637094,0.017214631357,0.234455600857,0.0154368142048,4.0,0.0889573629111,211.645246972,4.38594508528,6.70465973855,0.0,-1.84395826265,0.000425889502594,0.00827767587196,9.76207716663,0.41395745143,62.1411863319,0.0403307297694,-0.293239625759,0.00236128579373,100.0,0.0855150561566,1.5096093736,218.488203533,0.0781518669525,0.0456166523043,0.0,2.49663991067,0.0,0.886742865324,0.00750901603284,7084.09524183,1.00537160897,0.00170355801038,0.797806092544,0.00453076432105,9.25261943995,0.0,?,0.267714460502,9.4264,0.0220267728682,1000.0,0.0,3.89479929249,1.0,0.31260746781,1.04450652149,0.000851779005188,0.023620725763,-1.26089643192,0.000425889502594,0.0480246468721,5.84692360003,0.156303733905,99.0,0.015914849152,0.915850421016,'GCVS:Pulsating:CEP' +0.776457136759,0.148271446681,1.64147611558,0.0,0.126120443594,-54.1983397987,0.0372086392647,0.547737710348,0.132929081507,1.00438858095,-0.170140269712,0.0127224081873,-2.63927876809,0.727956279753,99.0,0.320678311398,117.0,0.00130660932031,0.0,0.042784936484,-0.0915449999775,-0.322162601936,6.4907777805,-0.31221255716,0.0,-3.058550254,0.0137338470026,0.00849965122084,7.73614581296,0.000951655201771,19.2809121753,2.08900385973,0.0440184691064,0.0998273714824,0.000953624974581,1.31578307965,0.791755775579,0.0,0.0,-1.29398700749,0.255061333273,0.5185,5.19429469321,0.346016947689,0.000971295968269,-0.284225337639,6.6776,0.000860279893228,2.0,0.000991855990222,3.86807290648,0.000425884188171,0.00101060456864,0.016089983997,0.00978581458942,-0.832013052656,0.0275721128779,9.4369984521,0.0144385924013,0.00102587721465,15.4722916259,0.14319654818,0.203292632416,0.071329822837,0.00100855680992,7.008,11.6042187194,?,6.69737922652,6.7057991453,0.0151739505847,0.227060001026,0.423251062454,0.00412455394288,0.0540321960673,297.152422576,-0.792188249247,0.0210577860906,0.444814340042,0.05622524159,55.0,0.0999924312434,0.703522958879,3.75873694171,6.70600858377,-2.78093272751,-1.43783095113,0.0124028797549,0.00168084369958,6.69737922652,0.0996558244812,307.683531507,0.0135473675596,3.09290582135,0.0197499747,100.0,3.86807290648,2.88485524111,217.335567199,0.148271446681,0.024705595821,0.0,0.0215886046767,0.0,0.644943242005,0.0410902615544,35691.2896548,-1.69319402055,0.0496115190196,1.07034116127,0.0153780090034,0.0492579398019,0.0,?,-0.764587258495,6.4895,0.0093262138536,1000.0,0.0,0.86416667347,7.21510692892,0.593085786722,-2.50493376718,0.0248057595098,0.00106516457044,3.04497397858,0.0124028797549,0.0434838962948,0.047641001719,0.296542893361,99.0,0.0166286411925,0.030260608511,'GCVS:Pulsating:CEP' +-0.022393643495,0.171947652799,0.772977184173,0.0,0.277096627945,-53.7054306008,0.300448327282,0.112796954131,0.0121891423425,0.975139695607,-0.348788958571,0.00684661096488,-1.36004322956,0.087120279881,99.0,0.599530007934,127.0,0.013497847459,0.0,0.0494165428619,1.13768063481,-0.294034126201,7.21145849887,-0.485419859471,0.0,-1.98378289904,0.0150831679387,0.0162581210254,0.395627768477,0.000987417822866,0.767011432763,0.0170873118577,0.0514844072636,0.0355516902706,0.0011405406557,0.454010755177,0.0266543386167,0.0,0.0,-0.967580950374,0.174052215165,0.8391,5.6964695855,-0.266106834367,0.000988827571757,-0.232553979133,7.0675,0.0175617611342,3.0,0.00109306537237,0.197813884238,0.000454483954603,0.000936260787424,0.0267298264871,0.0331663556047,6.56827118314,0.671320386455,11.049922779,0.0301279246424,0.00115251507677,0.791255536954,0.298463658005,0.562654658556,0.149193954065,0.00104652684048,7.3279,0.593441652715,?,6.96502746427,6.99862755906,0.0270104745503,0.0353045571502,0.969259641651,0.0302547046401,0.253867678603,297.044378826,-0.865464004607,0.0230096021566,0.515842958398,0.0326091370953,83.0,0.103625526921,0.361493432934,3.58617543121,6.70600858361,-0.969892588587,-0.898046982695,0.100149442427,0.0101498866155,6.96502746427,0.492895184554,1064.04117467,0.0151472217475,-1.66227845489,0.0568463696689,8.8,0.197813884238,1.72181958589,216.608348999,0.171947652799,0.00181556097207,0.0,0.0176908200057,0.0,1.36288456721,0.0596178418857,134069.188008,-2.95801324676,0.400597769709,0.0731589450676,0.0591478136005,0.0181406064423,0.0,?,2.32705263424,6.4888,0.0358236260276,46.904,0.0,0.471846775716,0.158977023909,0.687790611197,1.25541312765,0.200298884855,0.00110621071535,-1.2337745835,0.100149442427,0.0819389846545,1.337705833,0.343895305598,99.0,0.0301650350296,1.77617875148,'GCVS:Pulsating:CEP' +0.0180467967834,0.203957306489,0.36156424399,0.0,0.208649755322,56.7228709314,1.03993639471,0.570938747383,0.170817266396,0.877541530066,1.86779817185,0.0454771841916,0.389470046485,1.40893003662,99.0,0.611751417259,88.0,0.00225097923324,0.0,15.9131168708,-0.136907969805,0.368171852852,5.40697372675,0.219964991102,0.0,-1.54625238272,0.0445178005375,0.0230977287583,0.0217342985462,0.003388996759,0.723757043332,0.375198889312,0.0402018710955,0.199413393277,0.00329072349699,2.41474530898,-0.163998687488,0.0,0.0,-0.969291966281,0.237496969986,0.727,3.42229847502,-0.403827001951,0.00313953159102,0.0335903360998,9.94035,0.00284042102319,7.0,0.0031553498317,0.0108671492731,0.000441922172662,0.00306039591515,0.0240515541956,0.0153789405827,-0.938817268132,-1.25612499899,9.19105568111,0.0237724936771,0.00328286020578,0.0434685970924,0.214352228991,0.41930888429,0.0663372311543,0.00301906925976,10.1888,0.0326014478193,?,9.86234730788,9.88793295455,0.0233218290073,0.526931237014,0.665364709607,0.00591313449943,0.322485055877,108.87503042,-0.4478826218,0.0808025959674,0.611871919468,0.0189544747336,16.0,0.124184338229,0.0633076305022,1.97896528827,6.70421024416,-0.581811887344,-0.708972138542,0.346645464903,0.00571700253069,9.86234730788,0.141212263615,104.521186832,0.045252805283,0.821403012479,0.01774764936,100.0,0.0108671492731,2.62258940313,23.2327167823,0.203957306489,0.0170181956365,0.0,0.108948720359,0.0,0.30555403453,0.0277371398116,9093.34325436,-1.94854938571,1.38658185961,1.13468022689,0.0474958236851,0.169113455724,0.0,?,2.9499883849,9.4618,0.0689793290206,1000.0,0.0,0.486090082346,4.34926098534,0.815829225957,1.24359937881,0.693290929806,0.00326340101632,-0.446637708024,0.346645464903,0.0891563668604,21.0609511882,0.407914612978,99.0,0.025759131505,-2.86089394667,'GCVS:Pulsating:CEP' +0.0,1.50923945693,1.46337748906,0.0,0.381689969855,-23.5600624754,1.85778152976,0.222909458989,1.0,0.331292690304,1.21337530956,0.0201491738944,2.10226547007,0.440500763051,99.0,0.836986347274,56.0,0.0126276034677,0.0,0.185389316659,-0.35294469293,0.0,3.19186306074,0.0,0.0,0.964526346619,0.0773024813834,0.0226081545688,5.39405408046,0.00561938647807,0.327577143871,1.0,0.0858464479305,0.118611596777,0.00549008035096,2.91589104245,0.0,0.0,0.0,0.0,0.331292690304,1.3141,2.93998155519,-0.871751967632,0.00532215634716,-0.0814838807562,10.94055,0.0137421167203,2.0,0.00547659020846,2.69702704023,0.000428144107724,0.00516849608159,0.0714791469354,0.0444740985228,-0.568296480137,35.510758857,4.56618199027,0.0804236197486,0.0059776297758,10.7881081609,0.334256238993,0.941612144172,0.258053489811,0.00698912745933,11.0983,8.09108112069,?,9.99999335625,10.7226517857,0.0732025661056,0.120509810602,1.5333075555,0.0446320366059,1.0,289.27636325,1.85101846124,0.0974774182355,4.52771837079,1.0,54.0,0.247932298236,0.0419032334552,1.53424472696,6.70600858361,0.0,1.95513296571,0.61926050992,0.0214190410908,10.7012946161,0.440330583661,793.400109964,0.076757524263,-1.83256982663,0.0809436601394,100.0,2.69702704023,1.0,191.451320622,1.50923945693,0.00805680110963,0.0,0.0638255784016,0.0,0.877221077578,0.0818425341489,43637.006048,-0.0177014855248,2.47704203968,0.416592582168,0.0661678801294,0.0664922197073,0.0,?,2.85609624596,9.7842,0.0511069647355,1000.0,0.0,1.11803195959,1.0,6.03695782772,-0.326485235817,1.23852101984,0.00572865847575,-2.2348973515,0.61926050992,0.217560344532,0.185389316659,3.01847891386,99.0,0.0824845550015,-0.861146702242,'GCVS:Pulsating:RR:RRAB' +0.400355377832,0.130268973548,0.800276884368,0.0,0.419065197646,24.8549467915,8.25899374831,0.31391154341,0.652242165894,1.40821940784,-0.252656508533,0.0284181963719,-1.5880000352,0.869453974515,99.0,0.873279087708,73.0,0.00848862410285,0.0,0.7216712632,-0.381149431058,0.0344476837103,3.39525034279,0.259022665334,0.0,-2.07033487094,0.106976075452,0.0281726422354,0.995374956222,0.00769550324628,0.0792068696562,1.13464714292,0.370285362357,0.149413473273,0.00758867988119,-0.0402762689813,0.964356820549,0.0,0.0,-1.04236565945,0.553996445277,1.3978,3.51323243333,-0.386772779852,0.00773291298909,0.583951780688,11.7945,0.0103562908683,4.0,0.00770951744766,0.497687478111,0.000471444173806,0.00740489242642,0.0822177505341,0.0498241614888,-0.220935347505,79.0402540978,4.25318902499,0.0777557258325,0.00746766667739,1.99074991244,0.340001171202,1.17760104115,0.266509751756,0.00818669879252,12.3251,1.49306243433,?,9.99999335625,11.7257890411,0.079940291674,0.142603012069,1.61293983498,0.0515272110345,0.529607282853,210.635898444,-1.69270492863,0.107387636429,0.390806920643,0.0262606363894,21.0,0.237284102435,0.0119879085216,1.22448216097,6.70555890834,6.39030353781,-0.409089271665,2.7529979161,0.022329696042,11.6708027691,0.94244694097,1457.33294,0.106422689383,-2.87636861764,0.052690026655,35.9,0.497687478111,3.67416749079,169.009987732,0.130268973548,0.00598832293798,0.0,0.165603390727,0.0,0.675123296648,0.0443611742411,104927.97168,0.580267875331,11.0119916644,0.74632539175,0.0754816426434,0.142442810358,0.0,?,2.25696731282,10.9273,0.0952882158501,78.621,0.0,1.04838464815,12.7315172853,0.521075894191,-2.35722473166,5.50599583221,0.00770804367576,2.29961789464,2.7529979161,0.223380639236,0.160564824474,0.260537947095,99.0,0.0773232022784,2.78111490032,'GCVS:Pulsating:RR:RRAB' +-0.0732486083935,1.57217927546,4.12911511532,0.0,0.223714094269,-16.5235924134,0.537979059524,0.331085936866,0.0864580931225,0.0776889036094,0.937644492444,0.0423384800113,0.372376517497,0.35009581989,99.0,0.400319536096,80.0,0.0161840487057,0.0,0.0401320746387,0.529561908858,-0.448576351667,3.50767075068,0.139293940355,0.0,-1.60374645104,0.0813291381737,0.0418531307367,3.65347866408,0.00566598703002,1.29778755893,0.135440656791,0.435761667885,0.215298526058,0.00648624272837,-2.89193773071,0.177842054213,0.0,0.0,-0.567370690919,0.0467897823467,0.8713,2.78333608528,-0.338400967444,0.0058595700732,-0.550690623749,11.3441,0.00890123090861,4.0,0.00540630974593,1.82673933204,0.000461363760827,0.00556646723185,0.0412780503432,0.0272551080095,-0.0832514159938,-65.0599811356,4.05926577901,0.041703094829,0.00626501068978,7.30695732816,0.174531446822,1.33275604348,0.128365391825,0.00574834100884,11.7055,5.48021799612,?,9.99999335625,11.288335,0.0429958165647,0.300844986542,0.948621995644,0.0209379355025,0.278879518338,33.4327170076,-2.09456269201,0.0296979213077,4.71653782639,0.0681807480344,12.0,0.253257971184,0.257439237479,0.949385539967,6.70690811542,-0.920835026486,1.95746517227,0.179326353175,0.0173884116313,11.2734202917,0.544430431449,1278.01860921,0.081738649911,-1.55644694358,0.0272394677104,3.0,1.82673933204,6.51196858036,336.961390141,1.57217927546,0.0231388122188,0.0,0.20187809411,0.0,1.55119370014,0.0270382282821,100963.470127,-2.4887321366,0.717305412698,0.669491126103,0.0577790035414,0.196429650166,0.0,?,0.929517224569,10.8342,0.0112932418692,3.44,0.0,0.724294376033,1.15914929006,6.28871710186,0.270312910411,0.358652706349,0.0061006587767,-0.279626994247,0.179326353175,0.12450397783,0.146412949687,3.14435855093,99.0,0.0453585419702,-2.46221571441,'GCVS:Pulsating:RR:RRAB' +0.482662626257,0.0665298830137,0.405441211314,0.0,0.281639200921,59.5064865928,0.197602337896,0.907459746213,0.319503045647,2.69767658284,-0.152467932537,0.0311019163619,-1.64044272478,0.515902655313,99.0,0.834379345633,109.0,0.00942600293868,0.0,0.425009063554,0.0,0.0405855705432,6.14333670465,0.251381487163,0.0,-2.12409875008,0.0693801324137,1.0,1.70710573389,0.00477439866707,7.59100330477,3.67833789119,1.0,0.321625172007,0.00487206560624,2.44729371336,-0.0557145944177,0.0,0.0,-0.296125855071,0.684331742112,1.1526,5.58926252197,-0.423486156601,0.00495499289855,0.0,11.1033,0.00741122590701,5.0,0.00499693034099,0.853552866945,0.000474377851313,0.00501891573599,0.0407945625098,0.0158649990037,0.0,2.52082387282,8.99207488239,0.0325361978397,0.00499876667828,3.41421146778,0.307308465475,1.0,0.155259488644,0.00498577249757,11.6265,2.56065860083,?,9.99999335625,11.087593578,0.0341754789071,0.0942597529786,0.937921922763,0.0516056183952,0.339389397747,110.723457379,2.57816230386,0.0464338131308,0.199589649041,0.0197768979518,19.0,0.105781608983,7.59100330477,1.9715232647,6.70645831935,-0.429910290416,-1.78891340214,0.0658674459654,0.00532679124902,11.0559377601,0.178457223749,917.417765714,0.069505297345,-1.53474972111,0.0227328949407,100.0,0.853552866945,2.45940356972,29.2060372557,0.0665298830137,0.0105246545456,0.0,0.156134722576,0.0,0.619572220254,0.0331884300829,99081.1186971,1.51181762783,0.263469783862,0.648355406766,0.0733974886579,0.218250861567,0.0,?,-1.25730413179,10.4739,0.0846886776336,1000.0,0.0,0.399471301098,13.3796540388,0.266119532055,-1.89975900639,0.131734891931,0.00467685856106,-1.5363638228,0.0658674459654,0.109853606766,0.247869463074,0.133059766027,99.0,0.0399115456952,-0.517069347943,'GCVS:Pulsating:CEP' +-1.43002260701,0.0780011148881,0.538343977718,0.0,0.288177177033,-58.9978248466,1.321935668,0.0271872215701,0.0466589141882,2.28272036492,-0.314748087489,0.00502101741984,-1.05044672859,0.0365915173843,99.0,0.610798388263,111.0,0.0227772148408,0.0,2.11663220127,-0.213234445422,-0.269588721453,5.255872233,0.0607701263384,0.0,-0.257501488448,0.0121362493859,0.00463552795532,0.0539976669594,0.000826230189639,0.48864764341,0.687803936818,0.0487156565396,0.0179815957909,0.000826485610576,-1.15581676492,1.94828126664,0.0,0.0,-0.158116600318,0.721281328523,0.8841,4.76398595976,-0.0412058819847,0.000905887986476,0.456514007508,6.4333,0.0165123486463,3.0,0.000817295097934,0.0269988334797,0.000437001367237,0.000828139080242,0.0352961694158,0.051177727665,-0.703656965979,-6.94088074777,7.22564958453,0.0385248976924,0.000864638934723,0.107995333919,0.24082655034,0.179953754009,0.169156397823,0.000912807137262,6.9041,0.0809965004391,?,6.44699749022,6.4683009009,0.0333293979347,0.0257266868163,0.849899249979,0.0351607496205,0.101867146133,298.652408,2.47369012419,0.0247260245988,0.234003344664,0.00483390236486,79.0,0.174008954763,0.0118333236117,2.54121565256,6.70510929326,1.58462130877,0.0988637880859,0.440645222667,0.029786914927,6.44699749022,0.646873844358,2105.6007849,0.0121782144319,-1.42326207122,0.0520455637449,100.0,0.0269988334797,2.99756141195,226.936911487,0.0780011148881,0.0174503412523,0.0,0.018469492676,0.0,1.58845247182,0.0508208923257,231616.086339,0.202658312177,1.76258089067,0.053806441656,0.0756238290188,0.0171444391536,0.0,?,1.6294402252,6.02,0.0662402018039,1000.0,0.0,0.515123128978,1.41507540477,0.312004459552,2.50508063517,0.881290445334,0.000793060217686,-2.63203501913,0.440645222667,0.107718018389,10.7883539845,0.156002229776,99.0,0.036403508454,1.17676034738,'GCVS:Pulsating:CEP' +0.0,1.90194404367,2.08302966672,0.0,0.222210573138,-37.4796700671,4.71839936223,0.928932713566,1.0,0.262888911829,-1.73690178527,0.0697857749629,-2.64085792063,0.645760300266,99.0,0.433601413169,109.0,0.0110875713808,0.0,1.19020901458,0.0,0.0,3.73247146496,0.0,0.0,-1.94873947562,0.0988661978225,1.0,0.840188561632,0.00767595564503,0.317904417334,1.0,1.0,0.176732769291,0.00728412146045,0.291750690708,0.0,0.0,0.0,0.0,0.262888911829,0.884,2.53060494199,-0.162509626193,0.00683991232963,0.0,12.0472,0.0125824231992,4.0,0.00736482696844,0.420094280816,0.000440337248662,0.00702864500012,0.0346815228841,0.0365010614179,0.0,-60.493480393,4.47023354181,0.0349467791027,0.00679964724756,1.68037712326,0.168729278293,1.0,0.102963763566,0.00749490017218,12.4639,1.26028284245,?,9.99999335625,12.0264522936,0.0377450700762,0.166176213449,1.06361609144,0.0402552343123,1.0,342.090714977,-0.746157640396,0.0664417840378,5.70583213101,1.0,80.0,0.19843889394,0.317904417334,1.33984894005,6.70600858377,0.0,-0.153239912473,1.57279978741,0.00708216162311,11.9998161637,0.498046596499,1537.76423017,0.0985264198462,-2.99711402975,0.0469002248706,100.0,0.420094280816,1.0,325.573317563,1.90194404367,0.0183311850801,0.0,0.235472815021,0.0,0.542435570662,0.0294136142811,166078.536858,-2.13115500667,6.29119914965,0.552797270031,0.00740661899057,0.151281512769,0.0,?,-1.73834489879,11.5799,0.0172570211044,1000.0,0.0,4.77810347205,1.0,7.60777617468,2.88925503429,3.14559957482,0.00704506785137,-0.39854889517,1.57279978741,0.101363136133,1.19020901458,3.80388808734,99.0,0.0354209912838,-2.35113608887,'GCVS:Pulsating:RR:RRAB' +-0.0427456231079,0.0693974910728,1.24952291205,0.0,0.387950195844,59.8667654488,0.60102865934,0.910790096968,0.183835932262,2.04424580843,-1.44947076395,0.0335926326362,1.90996745501,0.416444977514,99.0,1.08290946312,93.0,0.0151719416069,0.0,2.64198099533,-1.30697384898,0.2205951484,5.59730969007,-0.00928156100528,0.0,-0.665343746616,0.0927226811257,0.0829381214272,0.14159930665,0.00586906255158,0.897757184117,0.577527657496,0.426544899935,0.187955949183,0.00625145191856,-2.11851551574,-0.798772593679,0.0,0.0,-1.33863301036,0.518904279942,1.3011,4.33512114058,-0.315833390105,0.00689513548744,-0.174327620708,11.8249,0.0208349873173,4.0,0.00715198290355,0.0707996533248,0.000453390446505,0.00686277548242,0.0514440666576,0.0409381463686,-4.35504622561,3.06271496953,7.92836794287,0.051429052838,0.00667747778102,0.283198613299,0.52017222778,3.5970268491,0.194551977999,0.00775565453351,12.3202,0.212398959974,?,9.99999335625,11.7527989247,0.0656089918541,0.11187390252,1.54651302401,0.0562981184604,0.091487017874,111.023522326,1.04091873669,0.0803850735138,0.208192473218,0.0140045871399,58.0,0.0850983127795,0.130211776416,1.00458229083,6.70510929326,-1.01935718344,1.94516236445,0.200342886447,0.00639491149198,11.7011001201,0.52597581555,1526.29141771,0.0937708583032,1.5072448628,0.0725278494626,100.0,0.0707996533248,2.75884702966,30.2039374119,0.0693974910728,0.0372033328237,0.0,0.0791552710201,0.0,0.649233094398,0.0725314911021,140418.810429,2.91341282893,0.801371545786,0.323759450951,0.0679843504155,0.0966788783359,0.0,?,2.71690509587,11.0191,0.0417962363001,1000.0,0.0,0.790424143934,6.51298105409,0.277589964291,2.88185278768,0.400685772893,0.00813776048215,2.16698720747,0.200342886447,0.154554887453,2.90112962076,0.138794982146,99.0,0.0491317220042,-1.55067614006,'GCVS:Pulsating:CEP' +0.116380608098,2.44310355599,2.53373835981,0.0,0.237549608001,-30.2543615379,4.06267050325,0.338451345167,0.133600570536,0.0679362710252,-0.92859566143,0.0344499746309,-0.111491557914,1.01830872814,99.0,0.436516580552,71.0,0.00453390449863,0.0,0.0337732299828,0.0,0.153208415158,3.2220105318,0.0278058505618,0.0,-2.13064823845,0.0655161218172,1.0,8.30164051997,0.00453205281731,0.369215273255,0.461908091018,1.0,0.13971104411,0.00498133542754,-2.91469342337,-0.0542816891428,0.0,0.0,-0.936097817265,0.0411240976675,0.8226,2.70212791631,-0.45942367703,0.00459656981776,0.0,10.7395,0.00916111875585,3.0,0.00436594644389,4.15082025999,0.000436234842072,0.00472985498315,0.0486678751506,0.0336752065003,0.0,28.1471521836,3.81207666302,0.0482067790065,0.00467870879381,16.6032810399,0.190744608886,1.0,0.138400874504,0.00460000043326,11.0129,12.45246078,?,9.99999335625,10.6744211268,0.0500369288833,0.0726317480277,1.28131475802,0.0747813763261,0.151926497591,291.563390733,2.33931246075,0.0277826170945,7.32931066797,0.0320493181143,12.0,0.257555532326,0.369215273255,1.84863700298,6.70825786533,-0.372672188129,3.08604419477,1.35422350108,0.0136297028538,10.6692638051,0.343687533447,677.2076117,0.0653734656487,-2.26358500212,0.0507055721849,100.0,4.15082025999,6.51415498154,195.525762848,2.44310355599,0.0186001953369,0.0,0.119508694444,0.0,1.82236822485,0.0376877529538,47404.532819,0.957884157197,5.41689400433,0.490373463197,0.0130423702509,0.0849120475722,0.0,?,2.38726082541,10.1903,0.0201563940161,1000.0,0.0,3.81313292098,4.09601626026,9.77241422396,0.406530233861,2.70844700216,0.00471679568874,0.767345796995,1.35422350108,0.140984817404,0.0526113377746,4.88620711198,99.0,0.0497305727067,-0.0703840702945,'GCVS:Pulsating:RR:RRAB' +0.0,0.159199541427,0.60726974278,0.0,0.274245553908,59.2057705585,1.2727186272,0.314666138397,1.0,0.615263751682,-1.49728685135,0.0347059602953,-0.252479069877,0.380927942459,99.0,0.78368724139,119.0,0.00767600425207,0.0,0.337608428632,1.53495000293,-1.11559594964,6.98834119613,-1.61714527492,0.0,1.63517140363,0.042976978826,0.0699538962299,2.96201135751,0.00310486175514,0.629151233377,1.0,0.908055994157,0.117953274794,0.00310658684287,-2.71715358803,0.0,0.0,0.0,-3.02810069238,0.162664302756,0.9071,4.25164653802,-0.235225147081,0.00317142592414,-1.05610086466,10.1487,0.0108885937493,10.0,0.00310293264651,1.48100567876,0.000453537228916,0.00294283716103,0.0289270104234,0.0251679085141,1.20078628832,2.17496773627,12.0506150142,0.0253377145162,0.00322913050464,5.92402271502,0.288348901003,1.99395948358,0.0828441848463,0.00315249880942,10.5448,4.44301703627,?,9.99999335625,10.1085176471,0.0239281481206,0.132595220165,0.668424264811,0.0223915867196,0.434147832285,110.692637409,2.65859311015,0.091669640627,0.477598624282,0.313289951615,77.0,0.10500339972,0.180103180714,2.8335825362,6.70555890834,0.0,-2.06132913301,0.4242395424,0.00943913633,10.0810902965,0.308179817692,152.974815421,0.042976689655,-0.868871167133,0.0170250276044,100.0,1.48100567876,2.63754061789,28.8654541665,0.159199541427,0.00831941555009,0.0,0.0689302924321,0.0,0.277199921561,0.0405018419376,18051.0282197,-0.785011927268,1.6969581696,0.290497364034,0.0998696943813,0.174670790788,0.0,?,-0.71060114788,9.6377,0.0459710451827,1000.0,0.0,0.262884002869,1.0,0.63679816571,-2.71736101221,0.848479084799,0.00341407496559,0.981974618952,0.4242395424,0.120593255432,0.337608428632,0.318399082855,99.0,0.026844990371,2.11626392437,'GCVS:Pulsating:CEP' +0.590362844416,1.06404978625,0.484587070282,0.0,0.371681740045,-2.93648927624,1.32346544658,0.304063906765,0.201542519767,0.195172025921,-2.53887683888,0.0263048145406,-1.14654451659,0.217858919203,99.0,0.766205534505,74.0,0.0276859770509,0.0,0.0540420853575,-0.667178663865,0.360446983392,2.16268543171,-0.467820617112,0.0,3.13420228956,0.0904041511916,0.0218891485035,8.21453908562,0.00681364275104,0.630091679207,2.38057174038,0.18662575017,0.175454583491,0.0063560245708,-1.0997526556,-0.571090248581,0.0,0.0,-0.601066347736,0.0593340773179,1.2385,2.84553572675,-0.243379668953,0.00685107312499,0.770749172739,11.545,0.0159840586698,4.0,0.00663172594647,4.10726954281,0.000470466808364,0.00683242425111,0.0833767828631,0.0349379342762,-0.726262915518,-58.7420814345,3.10270643393,0.0749462313602,0.00664998872604,16.4290781712,0.297200772319,0.415663983513,0.237731422229,0.00643109896875,12.0356,12.3218086284,?,9.99999335625,11.4755972973,0.0957875901726,0.303125628932,1.56466482248,0.0204356286021,0.631935503766,62.4977820517,-3.10081589139,0.0389381786203,3.19214935876,0.0221378050352,50.0,0.222275648959,0.0486740551984,1.06554408095,6.70600858377,0.373430662745,1.95659484309,0.441155148859,0.0209840296003,11.4451689256,0.644256302486,1491.5588389,0.0906703100207,-2.52274170977,0.0446310266649,4.5,4.10726954281,2.43241705631,343.18407616,1.06404978625,0.0111601428793,0.0,0.0657650801061,0.0,1.79948276471,0.0959828617163,108883.79524,2.38551613005,1.76462059544,0.378092453646,0.0425277389911,0.144535528874,0.0,?,-2.08670622043,10.7971,0.157307071307,23.478,0.0,1.74950210488,7.31535290396,4.25619914501,-1.11274480683,0.882310297719,0.00662339857157,-0.531744168347,0.441155148859,0.222374737776,0.0545857140025,2.12809957251,99.0,0.0770542322888,-0.641145021521,'GCVS:Pulsating:RR:RRAB' +0.0,0.228178010469,0.270517102306,0.0,0.262189481313,-51.115016547,0.44525594864,0.0328377199847,1.0,2.19127162593,-0.118284107436,0.00599729762768,1.26596250599,0.0736291176917,99.0,0.790561872295,235.0,0.0103551684255,0.0,49.1622617149,0.136060584179,0.0,8.1258906647,0.0,0.0,-2.59309434082,0.0109054628342,0.00485385075528,0.0203408054292,0.00134511655113,1.49857630684,1.0,0.0118539448338,0.00781327480157,0.000711403727158,-0.424987942801,0.0,0.0,0.0,0.0,2.19127162593,0.8072,6.74629125946,-0.576412034724,0.000821196187216,-0.0292011940229,6.8722,0.0146296165146,9.0,0.000760887519496,0.0101704027146,0.000431204503721,0.000963234957973,0.0225838188904,0.0768927975835,-0.762366341187,3.86074490803,10.8627805468,0.0223192824077,0.000772483132472,0.0406816108583,0.237962665417,0.137205774375,0.131916230109,0.000900354236193,7.1075,0.0305112081437,?,6.74969964461,6.78266042553,0.0219062388669,0.0469821528922,1.17982380717,0.0169030021445,1.0,296.692806906,0.733583255793,0.0595849613398,0.684534031406,1.0,184.0,0.0912592608903,0.0337084489316,3.94379332371,6.70645831935,0.0,-1.17590078465,0.148418649547,0.0266750756824,6.74969964461,0.459015718107,1003.96876037,0.0110657545626,0.122231208893,0.0128995965832,100.0,0.0101704027146,1.0,213.502331866,0.228178010469,0.00844307483827,0.0,0.0618810377783,0.0,0.354084911329,0.0129900505033,234928.689927,1.26718055354,0.593674598186,0.0458082060482,0.050769811016,0.0668978678152,0.0,?,-1.81665499805,6.3003,0.0789565209329,1000.0,0.0,0.414149068968,1.0,0.912712041875,1.54519322779,0.296837299093,0.000757522180406,-1.06590609827,0.148418649547,0.092822546365,49.1622617149,0.456356020937,99.0,0.0227358259157,-1.39733751483,'GCVS:Pulsating:CEP' +0.779492807267,2.10035748885,1.13623568173,0.0,0.377960999454,42.1937482285,0.418507306264,0.115028650127,0.09385132601,0.238054713378,-0.902451682168,0.0259341817773,0.852347465199,0.215094866839,99.0,0.581985957061,201.0,0.0218668212212,0.0,0.390279443226,0.0392752169292,0.0,5.63542475396,0.0,0.0,-2.76749216035,0.0706194150089,0.0237223050119,0.404023228493,0.00475206528192,1.55274236069,0.505863701829,0.161940394187,0.0742249981872,0.00478139762683,-0.184272180688,-0.725978191799,0.0,0.0,0.0,0.238054713378,1.6039,4.2296979078,-0.589288328824,0.00541508072838,-0.276051476123,12.0989,0.0164356374712,4.0,0.00580697273457,0.202011614246,0.00048888370368,0.00469714458542,0.0408695723111,0.072075486188,-0.496252010898,76.9957963981,6.45133230233,0.0405750683719,0.00529263803161,0.808046456985,0.265002896944,0.838276370881,0.189737471962,0.005238373306,12.6538,0.606034842739,?,9.99999335625,12.0107064677,0.0410772356042,0.213469812037,1.71977933331,0.0209998128329,1.0,112.84427071,1.79243051833,0.0480272812934,6.30107246655,1.0,69.0,0.156012163689,0.191950261754,3.24737814035,6.7051092933,-1.15664622537,2.06425917985,0.139502435421,0.0419699752494,11.9542887017,0.927947628891,1575.15213847,0.0707298039282,3.03463465105,0.0369677319037,0.2,0.202011614246,1.0,175.086205308,2.10035748885,0.0527362445892,0.0,0.120339148919,0.0,0.863593018836,0.0421568776813,315030.427694,0.291562952643,0.558009741685,0.329810483143,0.0744536667184,0.144215975146,0.0,?,0.831163374184,11.0499,0.0367699310692,20.474,0.0,0.572807608101,0.960019575118,8.4014299554,-3.11531510386,0.279004870843,0.00496411590706,0.792627572752,0.139502435421,0.116706675545,1.60894299444,4.2007149777,99.0,0.0398388536896,1.46388709755,'GCVS:Pulsating:RR:RRAB' +0.698961515186,0.102375962224,0.312694108134,0.0,0.201510465609,59.2781810442,0.304070380224,0.295902611012,0.771925995176,2.00047567526,-0.0847246442121,0.0315531726037,-0.783523702689,0.321165665093,99.0,0.513271451417,133.0,0.00922092211566,0.0,10.8843828092,0.467187778077,0.295111138037,6.35514828354,-0.577311334709,0.0,-2.52669826668,0.0386870735844,0.0368070942637,0.0366323605238,0.00269445266247,2.1349650643,1.10571290433,0.343459916595,0.126993842128,0.00293259791819,-1.13961865386,3.28222882179,0.0,0.0,-0.658239624128,0.304921441923,0.6924,4.85037492789,0.351099525893,0.00263999898165,-0.407288086814,9.9275,0.00884046035106,5.0,0.00299379973064,0.0183161802619,0.000425661565973,0.00261793563128,0.0186261461726,0.0222877522923,0.0854460917925,2.37618047825,9.96510031201,0.020141968103,0.00282870006973,0.0732647210476,0.174546344608,1.35456834247,0.0843978552026,0.00279123820639,10.3687,0.0549485407857,?,9.95134954531,9.98092406015,0.0175157639305,0.156296057905,0.708338752021,0.0169688145748,0.389033182166,110.952650845,0.22810488386,0.0632387410246,0.307127886673,0.0162168144216,124.0,0.123590415681,0.402342468453,2.80602387021,6.70600858377,-0.534420828553,-1.22087556363,0.101356793408,0.00908991352544,9.95134954531,0.308395092451,77.7766844225,0.038566466,-2.63206225239,0.0156303393794,100.0,0.0183161802619,1.33478565787,29.4922226745,0.102375962224,0.0108351474351,0.0,0.052046310476,0.0,0.311273363977,0.0576471904991,10266.5223438,-1.54666636974,0.405427173632,0.340218346978,0.0263087556396,0.163869330279,0.0,?,-1.56424566503,9.6763,0.0583555468678,1000.0,0.0,0.714607582148,12.9460797267,0.409503848897,0.791383766269,0.202713586816,0.00255843732703,2.54125554953,0.101356793408,0.0602000695495,5.17072030603,0.204751924448,99.0,0.0200304902688,0.713659216833,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.191943255014,52.4390922819,?,?,?,?,?,?,?,?,?,?,154.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.00108003810058,?,?,10.0884,?,?,?,?,?,?,?,?,?,-2.18624918147,?,?,?,?,?,?,?,?,?,?,7.7328157502,9.99999335625,10.0997253247,?,?,?,?,?,116.969905932,?,?,?,?,43.0,?,?,?,?,?,?,?,?,10.0746529049,?,71.5554519205,?,?,?,100.0,?,?,35.2186371385,?,0.0398879305342,0.0,?,0.0,?,?,10947.9841438,?,?,?,?,?,0.0,154.172881726,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +-0.0792422984311,0.127776458272,0.265315568018,0.0,0.24094148304,59.5367474479,0.00667479366075,0.385421065749,0.0699831273021,3.91308388699,1.21146664565,0.0566181805333,2.64102259378,0.340103946855,99.0,0.755449048459,117.0,0.0116829867037,0.0,0.0258052553744,1.26749048084,0.0,5.87939455886,0.0,0.0,0.82478053684,0.0568873625656,0.130349385038,4.78782716009,0.00380415841078,157.728013711,0.134970482397,0.955073680553,0.148410520771,0.00393908062275,1.53008436623,-0.0889189183886,0.0,0.0,0.0,3.91308388699,0.8274,3.97700248809,0.698636891351,0.0039179262874,-1.21972201191,10.7278,0.0123487745213,10.0,0.00399253357279,2.39391358004,0.000435832232937,0.00401356681027,0.0212439753781,0.0276195508085,-0.314940244298,2.67593788467,10.6458504162,0.020917017298,0.00393999128601,9.57565432018,0.226644468983,1.59909396517,0.069712749052,0.00421589483807,11.2969,7.18174074013,?,9.99999335625,10.7999051282,0.0212894658596,0.135420731377,0.557027202429,0.0290976849552,1.0,110.981026172,0.258405813758,0.0441354850553,0.383329374815,1.0,109.0,0.103927920969,56.8701167519,2.82348982902,6.70645831935,-0.947140820189,2.1835276753,0.00222493122025,0.00967705807812,10.7866963441,0.26833631881,751.337658489,0.0556547961602,-0.775417099485,0.0153110979217,100.0,2.39391358004,1.0,29.7953665056,0.127776458272,0.00297538330786,0.0,0.117326078925,0.0,0.535585308146,0.0335686483573,87155.1683847,-0.354373890396,0.008899724881,0.313919366881,0.0540298508847,0.258219371754,0.0,?,-2.22990359231,10.4695,0.0898005856841,1000.0,0.0,0.464562766791,1.16102526406,0.511105833087,-0.659717839987,0.0044498624405,0.00397109672003,1.39451138015,0.00222493122025,0.101876454676,0.105504306317,0.255552916543,99.0,0.0210366363958,0.0345149645528,'GCVS:Pulsating:CEP' +0.0,0.0336671366062,0.644340986712,0.0,0.215810952101,-48.6959259516,1.04005640311,0.273435125219,1.0,14.8512778455,-1.96282321862,0.192633605637,-2.24890634619,0.144064732931,4.0,0.544224699618,173.0,0.0217161194503,5.78788721266,26.0115726893,0.0747088793536,0.0,7.23471268356,0.0,0.0,1.59642624414,0.055512354743,0.026710745529,0.0384444267151,0.00291911570815,0.566011538308,1.0,0.255848935314,0.0408439333282,0.0198241686345,2.19593582783,0.0,0.0,0.0,0.0,14.8512778455,0.7127,6.43589644458,-0.106529545084,0.00260627952885,0.217989232679,10.1286,0.0133955782264,1.0,0.0195900489046,0.0192222133576,0.000437355483534,0.00306369602857,0.0199829024958,0.069485266832,-0.900773035675,1.97609057891,9.94567506363,0.0203772240851,0.0189768855614,0.0768888534302,0.186447015446,1.87264256175,0.109836073277,0.0027517836437,10.4354,0.0576666400727,?,9.99999335625,10.0847872832,0.0187465420148,0.931185018292,0.292650521838,0.0219688005057,1.0,303.999880942,2.16660240109,0.0881604906334,0.101001409819,1.0,97.0,0.115409738173,0.13138790937,5.33440399419,6.70645831935,0.0,-0.606462328751,0.346685467704,0.010611060425,10.0431971591,0.59349752441,66.4455824425,0.0398430100104,-0.770643271874,0.0344865963938,100.0,0.0192222133576,1.0,224.599657771,0.0336671366062,0.0338662656715,0.0,0.918086278277,0.0,0.22073190869,0.0222349449119,11428.6401801,1.18226256022,1.38674187082,0.204044591124,0.0171058725967,0.585289495335,0.0,?,-0.553749148631,9.7227,0.0300793898011,1000.0,0.0,1.3565189008,1.0,0.134668546425,-0.692523708331,0.693370935409,0.0196512523223,1.67149612109,0.346685467704,0.0559290747569,26.0115726893,0.0673342732124,99.0,0.0196019812672,3.0230547617,'GCVS:Pulsating:CEP' +0.0,0.383077422548,0.659842817128,0.0,0.228084856495,-3.82773178975,0.274711776322,0.096673780264,1.0,0.434315999295,1.56934947329,0.00767155142457,1.58961732242,0.254980226741,99.0,0.663498486688,66.0,0.00747884456243,0.0,38.0547832142,0.180193551829,0.35709445179,4.71212627108,0.290953109329,0.0,-1.26706887366,0.0212435464098,0.0103994668978,0.0262779055755,0.00201467050268,1.95677412547,1.0,0.07684783239,0.082169246932,0.0013863953225,1.89815984852,0.0,0.0,0.0,-0.568248425988,0.121784014897,0.7061,4.29865982563,-0.734008901359,0.00128788701245,0.133498572772,7.62605,0.00914552477824,3.0,0.00157157826458,0.0131389527878,0.000450645405337,0.00205356071174,0.0346308268372,0.0168951752215,-1.02271096168,9.59356069596,7.88646670381,0.0305152443893,0.00189630684301,0.0525558111511,0.258429168592,0.786873043393,0.164911731504,0.00181207821078,7.809,0.0394168583633,?,7.54091289243,7.55160909091,0.0327686882223,0.0951218839038,0.607148131632,0.0150435290143,0.232203765798,356.312639363,-0.892432682336,0.0222923354016,1.14923226764,0.0310942213798,38.0,0.137598527672,0.161727134297,1.95793807277,6.704210244,0.0,-2.2706452536,0.0915705921072,0.0135346837234,7.54091289243,0.157012483505,781.409339398,0.0215723339131,2.86584958976,0.0173211334254,64.3,0.0131389527878,2.80138535103,256.676642688,0.383077422548,0.0147800565269,0.0,0.078636680033,0.0,1.5096978032,0.0192814448659,50791.6070609,-1.89966362276,0.366282368429,0.143462510857,0.071963136963,0.0946321428047,0.0,?,3.80165038195,7.1029,0.0591990799914,64.3,0.0,0.488357732527,1.0,1.53230969019,-2.34189177174,0.183141184214,0.00145865020136,1.04750243026,0.0915705921072,0.0985382627936,38.0547832142,0.766154845095,99.0,0.0348738586995,-1.57364927949,'GCVS:Pulsating:CEP' +0.436914544547,0.0200880355041,0.689808935771,0.0,0.19196809629,58.27465801,0.186575141513,0.281750080179,0.0521220666537,7.24196647411,0.91567714574,0.168368053517,0.319576729904,0.631708379387,4.0,0.430948290726,123.0,0.00735166332903,4.14890539436,2.36734427632,-1.07375280188,-0.0876729906142,5.03616286716,-0.58830556503,0.0,3.08736305982,0.0915545832335,0.144620833489,0.0452988620315,0.00517799254089,2.3088210823,0.411310215271,0.255926845522,0.0741345910746,0.0322241369251,-0.820597633462,-0.210064461653,0.0,0.0,-1.09812118962,2.28202041532,0.7949,4.77488536389,-0.0477846450209,0.00569126237166,-0.408373841013,11.2566,0.0195211559176,1.0,0.0270252164437,0.0226494310157,0.000435959608656,0.0046472773554,0.0221504699423,0.0674117890662,-1.3588574191,1.00353751136,6.91857388304,0.0231737916288,0.0377575769889,0.0905977240629,0.164878187409,5.51404055827,0.156652614847,0.0053948346263,11.6387,0.0679482930472,?,9.99999335625,11.2666869919,0.0238312389512,2.48114733281,0.369709183025,0.0147200923846,0.254570502431,110.354509477,-1.81914237732,0.0535095347096,0.0602641065122,0.113478604407,110.0,0.132095494059,1.1382104277,3.38144216225,6.70510929322,-0.866668473733,0.602650182578,0.0621917138377,0.0174858080494,11.2513312154,0.64632925529,1015.47531855,0.0714970916274,1.87607403855,0.0125105207894,100.0,0.0226494310157,3.16361139869,27.3484747179,0.0200880355041,0.0201431298672,0.0,0.474228545832,0.0,0.424519759051,0.0610023231492,123887.988863,-3.02881995153,0.248766855351,0.290914313486,0.0225858934314,2.33999801406,0.0,?,2.63564951951,10.8438,0.0324791163363,1000.0,0.0,1.04690307663,1.42939765737,0.0803521420162,2.66754549126,0.124383427675,0.0328159372388,2.93443847803,0.0621917138377,0.0644417148343,10.3337399526,0.0401760710081,99.0,0.0217882410899,-1.28244827849,'GCVS:Pulsating:CEP' +-0.169465297364,1.66917314388,1.34934354319,0.0,0.242265291951,25.0643313496,4.66886863039,0.47373470025,0.243190397101,0.0636490424983,-0.595682389641,0.0534077675671,2.57517191784,1.75271855545,99.0,0.489738885631,95.0,0.00368485129638,0.0,0.622899641751,-1.32359676354,0.455271255428,4.42667988936,-0.0704605725777,0.0,-2.49753490528,0.0897167386224,0.0777239272818,0.831105258994,0.00635690653898,0.149004690042,1.09876521088,1.44414734117,0.261388949371,0.00642558329363,0.147590849801,0.0137649518457,0.0,0.0,-0.506071921358,0.0247070220412,0.9573,2.85406731701,-0.657669191173,0.0062671134183,0.961305941368,11.6664,0.016378060375,4.0,0.00618949887419,0.415552629497,0.000434859646918,0.00595015072363,0.0368714419302,0.0245652395549,1.76244826156,83.2734233165,5.90601096349,0.0359443838558,0.00641065921228,1.66221051799,0.200713185028,3.6808795065,0.117659866603,0.00623095367496,11.9995,1.24665788849,?,9.99999335625,11.5936042105,0.0339845601827,0.232881684859,1.09616334213,0.0280486678052,0.276283142367,322.781831986,1.26930452025,0.0333289180229,5.00751943163,0.0385626327644,6.0,0.187595417732,0.0631172970128,1.01892620362,6.70465973855,-0.626741983073,-1.8478224674,1.55628954346,0.0136481958847,11.5733727092,0.57474690449,1340.42016714,0.0892755257399,-1.32358733783,0.018712578819,82.6,0.415552629497,4.1960379311,185.39614336,1.66917314388,0.00599412657344,0.0,0.204345565135,0.0,1.03523016592,0.0314251308279,125999.495712,-0.786746298751,6.22515817385,0.418352884463,0.0883487783445,0.335807634139,0.0,?,2.48307212408,11.0422,0.0260687613774,131.334,0.0,0.400922683624,7.99758561389,6.6766925755,-1.70939962896,3.11257908693,0.00628721595189,-3.11112763002,1.55628954346,0.0989327984843,0.517694208138,3.33834628775,99.0,0.0354756629839,-2.82993949678,'GCVS:Pulsating:RR:RRAB' +0.0,1.60288132703,2.5325034289,0.0,0.260504809515,-9.32187202717,8.85451484037,0.795590710972,1.0,0.311938252426,-0.413724567518,0.0463162668153,2.36878217504,10.3999771033,99.0,0.567552067212,79.0,0.000730953266963,0.0,2.3791779354,-0.543137655006,0.0,2.99175065449,0.0,0.0,0.862552476328,0.0947422357432,0.07647820635,0.420313245648,0.00694569568807,0.123375004764,1.0,0.205525887678,0.315552219666,0.00665169522993,-1.967846587,0.0,0.0,0.0,0.0,0.311938252426,0.9991,2.50379961179,-0.4347838581,0.00603222984617,0.550330924125,11.6685,0.00516740742687,4.0,0.00681323088694,0.210156622824,0.000437215423586,0.00636669247069,0.0448365688414,0.0204772525441,-1.51286130027,46.1367394639,4.0764161937,0.054972273583,0.00678536081054,0.840626491295,0.190872816068,0.403606742393,0.14207462309,0.00656359248776,12.0571,0.630469868472,?,9.99999335625,11.6286683544,0.0468236821262,0.0933497571223,1.12085575443,0.070223675648,1.0,306.434999371,2.37029234928,0.081483472879,4.80864398109,1.0,65.0,0.246123960317,0.0181945959213,1.31069818153,6.70600858373,0.0,-0.704614644349,2.95150494679,0.00858076533628,11.6082083682,0.353268554963,1525.77636434,0.09451229597,1.02354151111,0.0499298625308,100.0,0.210156622824,1.0,200.611364891,1.60288132703,0.0141061302053,0.0,0.549294080727,0.0,0.614682572833,0.0120456934637,119010.556418,-2.41389861535,11.8060197872,1.3700421752,0.0689584373844,0.134530026941,0.0,?,-1.52647577217,11.058,0.0164159860958,1000.0,0.0,0.680364049888,1.0,6.41152530812,-1.45790001843,5.90300989358,0.0068224339821,-1.25760607983,2.95150494679,0.130893671686,2.3791779354,3.20576265406,99.0,0.046873371681,2.26602846102,'GCVS:Pulsating:RR:RRAB' +0.0723698128872,0.0238090578733,0.354660599301,0.0,0.346463137823,53.5964981984,0.206186982887,0.303571725113,0.134375154915,8.68267137594,-2.32898481014,0.0255571009326,-0.436545807699,0.185643029799,99.0,0.58305623955,109.0,0.0240949285394,0.0,0.165482539276,-0.181465626328,0.373531619656,2.67652869041,-0.548879553741,0.0,-0.296767980259,0.0623701289831,0.0223435100801,0.883156733074,0.00450769061746,3.16290162086,0.0495022513631,0.137841566922,0.0528491013713,0.00429511411042,2.73462888036,-0.0547328781727,0.0,0.0,-0.23957838753,2.81400405396,1.3418,2.30737761545,-0.864600652036,0.00430175213012,-0.250476842987,11.0886,0.0648321931004,4.0,0.00433090367956,0.441578366537,0.000435905254249,0.00456026225797,0.0582488912981,0.0805138839801,-0.721941625034,63.0675300018,3.87429596148,0.0572749996325,0.00445172784961,1.76631346615,0.20601034037,0.76414270009,0.170510530319,0.00436968512853,11.3924,1.32473509961,?,9.99999335625,10.9239688073,0.0531736197797,0.0623884324846,2.05777209108,0.0709425422554,0.780700844587,119.431938063,1.98804803152,0.0319071127429,0.0714271736199,0.0242650900185,66.0,0.261167552475,0.362218600084,2.84792316773,6.70510929322,-2.02077536105,-1.37251176329,0.0687289942958,0.0145043131637,10.8828964054,1.28068996157,877.274102396,0.0619617844044,-0.591922720873,0.0696053572687,1.7,0.441578366537,2.73553493966,162.637827965,0.0238090578733,0.00898090410585,0.0,0.0836500604614,0.0,1.51659772351,0.0603873303346,94745.6030588,2.19675593786,0.274915977183,0.0649891728517,0.0789314049018,0.0641336548507,0.0,?,2.45181049121,10.0506,0.133566843133,229.721,0.0,0.691760863181,0.265772797365,0.0952362314932,-0.450536495425,0.137457988592,0.00393524281821,-1.77531952736,0.0687289942958,0.150050790324,0.988668893631,0.0476181157466,99.0,0.0494628510277,-0.0582947648202,'GCVS:Pulsating:RR:RRAB' +0.551688706151,0.0292797778203,0.66375766781,0.0,0.332604194968,-51.4922954952,0.770510135831,0.5044262109,0.150932568286,5.87963456642,-0.000754213199699,0.0613153210348,2.4515462197,0.215498501053,99.0,1.12181828513,170.0,0.0121057352038,0.0,2.40534064612,-0.74910485131,1.36984606628,8.28141802669,0.0482422541708,0.0,-0.132657868484,0.0379361017077,0.1050117443,0.131712352464,0.00246721360103,0.684644928581,1.55532116581,0.985780670957,0.168350285589,0.00290305667826,-0.579618856931,-0.429165962393,0.0,0.0,-2.95745480796,1.05814624823,1.051,4.87721689153,0.0951449905256,0.00280787825037,-0.648680458112,9.8537,0.00183386084012,18.0,0.00253565239304,0.0658561762321,0.000442160185969,0.00247320435852,0.020598366158,0.0180680339498,-2.09258618159,-1.71182183786,18.5046462752,0.0187455488566,0.0027131144461,0.263424704929,0.330695319967,4.167192101,0.0451630303157,0.00297150576072,10.4308,0.197568528696,?,9.86587088279,9.92990470588,0.0178709344155,1.89712226513,0.267176046478,0.00154448528457,0.104116065996,304.113785511,2.61711793032,0.0678383728418,0.087839333461,0.0332735253202,140.0,0.0642863852061,0.305461256153,3.27684668706,6.70600858369,0.00176577663579,-2.63293972379,0.256836711944,0.005128156538,9.86587088279,0.267671580674,169.795764222,0.0381624246235,-0.955087326243,0.0127343018768,100.0,0.0658561762321,3.09267246357,228.354110604,0.0292797778203,0.0291761561333,0.0,0.125405110691,0.0,0.275698042725,0.0213866431461,28695.4841535,-0.876192956301,1.02734684777,1.64019048389,0.162144225635,0.203800534601,0.0,?,-3.02553560696,9.3798,0.0349292924658,1000.0,0.0,0.122441438797,4.84655040577,0.117119111281,0.456508409739,0.513673423887,0.00278821668089,-0.799355853444,0.256836711944,0.118552825946,3.46467146243,0.0585595556407,99.0,0.0190427375112,1.77195777866,'GCVS:Pulsating:CEP' +-0.625935174242,0.120310158467,1.15202658841,0.0,0.386516541058,41.8580820669,1.29836508204,0.710278190551,0.714403112536,1.5033361814,-3.12103982456,0.0437813184801,2.39109878006,0.388527681497,99.0,0.762952199695,75.0,0.0226262143049,0.0,0.0693758416305,-0.0818293595355,-0.155136472661,3.55768843911,0.160755219419,0.0,1.01896609716,0.129337731515,0.0202020407997,4.28817163833,0.00931572337981,0.588634722947,1.09201330372,0.054089094001,0.11997633401,0.00987603227622,2.10290682193,-1.18478073871,0.0,0.0,-0.375353805625,0.669822299853,1.3653,1.76680990436,-0.653127852145,0.00936027693169,-0.154239615613,12.1983,0.029183118122,4.0,0.00863539562732,2.14408581917,0.000444548579455,0.00936733338725,0.0818753831898,0.0746460284552,-0.972904527154,61.1123706718,4.23697926809,0.0744118005392,0.0098367337389,8.57634327667,0.328859005347,0.356433936942,0.193385782924,0.00947526522244,12.5704,6.4322574575,?,9.99999335625,12.0509413333,0.077616382932,0.119505495786,1.99904939347,0.0800479720179,0.404440478179,39.9904623506,0.741969794023,0.0437567584161,0.360930475401,0.0339208111804,59.0,0.23758362181,0.0444103658276,1.47773389519,6.70510929322,-6.82317846071,0.862801085646,0.432788360681,0.012247935878,12.0102522222,0.952245780731,1381.22765031,0.128070187119,-1.38339109984,0.0408036780991,100.0,2.14408581917,4.16988634721,212.721157646,0.120310158467,0.0131473228233,0.0,0.103535260866,0.0,1.69181750417,0.0847674464583,102210.846123,0.0227375172402,1.73115344272,0.308708433158,0.0519047223578,0.206556417398,0.0,?,0.36198360584,11.2051,0.0701020581765,1000.0,0.0,1.9018940934,15.7601896463,0.481240633867,2.20262567982,0.865576721362,0.00941198545558,-3.06727286556,0.432788360681,0.217669042351,0.0619792151932,0.240620316934,99.0,0.0658515605119,-1.7849812366,'GCVS:Pulsating:RR:RRAB' +-0.366236723217,0.0917774949791,0.890391176888,0.0,0.265546300511,-45.8250065118,0.0889089419548,0.127247127112,0.0803286072214,1.81885443694,1.04776300949,0.0128614083178,-1.51497332629,0.128228945198,99.0,0.625844253142,109.0,0.0123721568284,0.0,5.04504754187,0.459391354605,-0.290092499008,5.18176251881,0.106583612021,0.0,-1.83387765693,0.0229992602119,0.0201384922616,0.0114915897148,0.00241046927627,5.4056410875,0.323120568455,0.127746718694,0.0191153024997,0.00177657792681,-2.34282908878,0.035433002789,0.0,0.0,-0.937443413424,0.524789000463,0.976,4.39478070946,-0.22270438357,0.00168234611208,-0.37337223515,7.9906,0.030671742947,2.0,0.00212618543134,0.00574579485738,0.000430687638123,0.00172555143519,0.0349754585782,0.0680713620488,-0.17812895181,5.22553465036,6.97446211011,0.0348896154742,0.00149695360072,0.0229831794295,0.272125630365,1.2606365402,0.138282778463,0.00200913389606,8.4215,0.0172373845721,?,7.95609115138,7.98913669725,0.0390174361935,0.0332508252303,1.12511179075,0.041005071848,0.0971654412235,304.44416941,-2.58653296802,0.0535657680201,0.275332484937,0.012334718322,47.0,0.109683488307,0.802342160832,2.08120741137,6.70600858373,1.39023495847,2.85194576356,0.0296363139849,0.0124606484176,7.95609115138,0.816625248544,463.869165274,0.0234023779734,-3.65806511768,0.032550466994,100.0,0.00574579485738,3.016097477,222.262519396,0.0917774949791,0.0106777337826,0.0,0.0722030786133,0.0,0.590835063421,0.0216230714655,50097.8698496,2.82260657223,0.11854525594,0.050036301486,0.0414602679992,0.0460015208138,0.0,?,-1.37747524803,7.4455,0.0364596173438,1000.0,0.0,0.703035442574,2.57420316484,0.367109979916,-1.72811258628,0.0592726279698,0.00169465514343,1.4902445885,0.0296363139849,0.100451615129,28.9624717733,0.183554989958,99.0,0.0397829768469,-2.78703487654,'GCVS:Pulsating:CEP' +0.204214789114,1.97756701921,0.550262114603,0.0,0.275569233128,53.9547071093,1.25738672189,0.157649740641,0.0412053641117,0.252835931801,-1.97171539524,0.0201313421407,-2.10191500458,0.531434763525,99.0,0.465501091858,124.0,0.00536497391003,0.0,0.021761023812,-0.18925530272,0.0,3.31297479125,0.0,0.0,0.638108564446,0.040981382734,0.0135337338132,4.92941073853,0.00294227406507,0.581590419491,0.359691222126,0.0665551832777,0.0327226286096,0.00298936404282,1.97721558437,-0.25387558864,0.0,0.0,0.0,0.252835931801,1.1201,3.28070175408,-0.847790634676,0.00294978547122,0.294633366654,9.99285,0.036588435996,4.0,0.00291263292931,2.46470536926,0.000423907264148,0.00292974955905,0.0395526299256,0.0873712629515,-0.643403109624,46.5331134549,4.38198290512,0.0403279807008,0.00292189552396,9.85882147706,0.168748617671,0.290543627126,0.142759761422,0.00297421623722,10.366,7.39411610779,?,9.89948428037,9.93788951613,0.038509647647,0.0448216939968,1.06454897641,0.0644639474889,1.0,137.784463492,-0.297155862728,0.045091437148,5.93270105762,1.0,2.0,0.231709594672,0.0313296950893,3.1265883734,6.70600858369,-0.762865822502,0.11075121862,0.419128907298,0.0179793603455,9.89948428037,0.993034498341,149.523320899,0.040868870399,1.80419349215,0.0791697652018,3.9,2.46470536926,1.0,129.385047916,1.97756701921,0.0219691371357,0.0,0.0467244322572,0.0,0.833005969882,0.0705266800011,18391.3684706,-1.86870203003,1.67651562919,0.0786835303713,0.0717319941893,0.0365921435648,0.0,?,-0.826680667593,9.2459,0.0678537875231,523.458,0.0,0.514451932118,2.75518063223,7.91026807683,-1.13964823456,0.838257814596,0.00267459539873,0.167937571926,0.419128907298,0.111107506121,0.073898169282,3.95513403841,99.0,0.0404049660918,-2.20638347028,'GCVS:Pulsating:RR:RRAB' +-2.67168911161,1.95876158722,1.73430875053,0.0,0.310666615775,35.8708795775,0.0538689733405,0.480476848269,0.522021593591,0.255263327229,0.651737272896,0.0405038103275,-1.29417954351,0.150927669762,99.0,0.447625413663,86.0,0.0429302659603,0.0,0.163695502192,0.0,0.0,2.7126500331,0.0,0.0,-2.76291673648,0.0978338006588,1.0,13.4102185864,0.00691805780092,27.8453422626,11.6907166605,1.0,0.0844214680847,0.00768205600668,1.48685955736,3.76720814683,0.0,0.0,0.0,0.255263327229,1.3894,2.27398878076,-0.983518688245,0.00724348405012,0.0,11.8848,0.016397730898,3.0,0.00730736052292,6.70510929322,0.000489833870296,0.00707537766466,0.0607055020377,0.0815135545328,0.0,83.9324939659,3.45735680459,0.0536071689841,0.00688037959993,26.8204371729,0.208639795094,1.0,0.167794929149,0.00661004924299,12.2776,20.1153278797,?,9.99999335625,11.7581383721,0.0603466193646,0.124460599428,1.78442731337,0.0517940037193,1.0,99.2417691807,1.46528797201,0.021708330593,5.87628476165,1.0,55.0,0.283895212137,27.8453422626,2.09163291532,6.70510929322,7.62438553045,1.73340595675,0.0179563244468,0.0146532716216,11.7224367714,0.815237918258,1553.38428847,0.0970616559597,2.93405830512,0.0676534628438,5.3,6.70510929322,1.0,179.650599803,1.95876158722,0.0385578412666,0.0,0.125117479624,0.0,2.72663780028,0.0596481302092,132037.66452,-0.855736130182,0.0718252977873,0.401622503636,0.0727931398448,0.0919453945835,0.0,?,0.583732806012,10.8882,0.0396653307822,202.619,0.0,0.835914851759,24.0170463895,7.83504634886,-3.03459515924,0.0359126488936,0.00669169210238,1.99103651651,0.0179563244468,0.168421332576,0.0539033012201,3.91752317443,99.0,0.0597749473748,-1.85717428383,'GCVS:Pulsating:RR:RRAB' +-0.320956210123,0.391333281824,5.10300400978,0.0,0.334818725603,-64.4961650924,3.09807365256,0.361161575795,0.0476264707665,0.438356431638,1.91295685194,0.0256971157058,-1.86218830278,2.05939226094,99.0,0.547708591624,107.0,0.00225462187925,0.0,0.00678990185264,-0.310976484258,-0.519456714284,3.92958458959,-0.0410103369957,0.0,1.4573374872,0.0657339147076,0.128141335487,12.7559552165,0.00438083564111,0.115498588241,0.241448255617,0.224854697392,0.0767229515418,0.00497161437158,-0.302301960433,0.0735454835471,0.0,0.0,-3.53245266776,0.126563077163,1.3046,2.69888253438,-0.565017173106,0.00464950335508,0.627352348588,11.1491,0.0087201876318,2.0,0.00459834280268,6.37797760824,0.000430419309671,0.00472023128049,0.0504802431086,0.0662392675672,-1.97312865317,-21.5369467666,4.99255409452,0.0517414041366,0.00482966805668,25.511910433,0.232238737968,3.15019060865,0.174550759303,0.00489212621649,11.6802,19.1339328247,?,9.99999335625,11.0972327103,0.0465170198602,0.0798845180571,1.43523406419,0.0587574198258,0.155833189958,303.237603722,-2.53985064921,0.0791503034933,1.17399984547,0.0352849993617,15.0,0.231778480192,0.0354817430205,1.5793319061,6.70510929338,-0.80797172373,2.92189487619,1.03269121752,0.0122726322045,11.0728981903,0.898742667546,1105.51373069,0.0652899544571,-3.32943332492,0.0451362050669,100.0,6.37797760824,4.86964330464,257.406614685,0.391333281824,0.00332590484048,0.0,0.0841174440226,0.0,0.643600900198,0.0538915397581,117184.455453,2.18596091252,4.13076487008,0.524719701278,0.0492503270374,0.0970936031912,0.0,?,-0.715079322105,10.3756,0.00945715987511,1000.0,0.0,1.01324084377,1.0098688143,1.56533312729,-2.87083481962,2.06538243504,0.00480594874926,-3.13881316964,1.03269121752,0.137003552861,0.037661987979,0.782666563647,99.0,0.0497255996575,2.03012778011,'GCVS:Pulsating:RR:RRAB' +0.693682680001,0.25923375886,0.405148977855,0.0,0.277427798937,19.5677907274,2.22457483274,1.63438720702,0.428942619679,1.92876113898,-2.97854144589,0.0792834927079,-0.766205657808,1.00849942484,99.0,0.852360907372,61.0,0.0036067023419,0.0,2.23164933219,-0.202248839377,0.0,4.92635106012,0.0,0.0,1.45513225173,0.049946935719,0.0428290904567,0.428675532633,0.00367328510143,0.344611291629,6.51724178501,0.131021020244,0.328970090939,0.00344597730567,1.30531225643,-0.675367467196,0.0,0.0,0.0,1.92876113898,0.8888,2.9594025882,-0.684490641065,0.00340459828438,0.231977744252,9.9002,0.00144143114143,4.0,0.0036396817512,0.214337766316,0.000450143878137,0.00343769108787,0.0274829463705,0.0109610625674,-0.864344368519,0.321304586777,11.8036334228,0.028944864197,0.00364658454187,0.857351065265,0.347883868832,0.64013699754,0.0477782082908,0.00331825069269,10.1603,0.643013298949,?,9.81199902149,9.80600655738,0.0294726086766,0.798658766002,0.395932858201,0.0042664232594,1.0,163.876984464,-2.98466106299,0.0591837152583,0.777701276579,1.0,30.0,0.0813408864392,0.0460541993291,1.26846821706,6.70600858369,0.58701406745,1.93222741992,0.741524944246,0.00235745154073,9.81199902149,0.171474180773,201.602326951,0.0499592137317,0.891986820075,0.021452726702,100.0,0.214337766316,1.0,78.6731161338,0.25923375886,0.00699779551202,0.0,0.525011548852,0.0,0.498808659844,0.00722056368259,12096.1396171,2.25409200301,2.96609977698,2.52575350132,0.127652965671,0.167554147482,0.0,?,-0.127384074163,9.2715,0.0686767758048,1000.0,0.0,0.235685194833,19.6297597372,1.03693503544,2.73342919289,1.48304988849,0.00331584857732,-3.07541381335,0.741524944246,0.0809336621631,0.992707483899,0.518467517719,99.0,0.0268800902646,-3.13524646513,'GCVS:Pulsating:CEP' +0.0,1.14105259856,0.269163574143,0.0,0.387605618926,-33.3012628825,8.76812117093,0.595655387979,1.0,0.438191894598,1.05354224956,0.0349074000984,2.5556630976,0.238992884976,99.0,0.854062685698,76.0,0.0247310706555,0.0,0.0986689896003,2.87018811574,0.0,2.96338448304,0.0,0.0,0.576225414609,0.0835117549125,0.0617364291273,10.1348965268,0.00584037125567,0.0583432454555,1.0,0.340425319136,0.110214073234,0.0058664360228,-0.778256857804,0.0,0.0,0.0,0.0,0.438191894598,1.3539,1.93381930112,-0.790004078624,0.00588614564202,0.0387887122835,11.37125,0.0417673140645,4.0,0.00604165135658,5.06744826338,0.000429565771464,0.00603096708494,0.0562971587465,0.0540647507808,0.675074139299,19.5752584865,5.09173679095,0.0571579543476,0.00588462649228,20.2697930535,0.276379019264,5.07661603173,0.169417393735,0.00599575837174,11.7315,15.2023447901,?,9.99999335625,11.2414565789,0.0542799108853,0.0807872501783,1.6171893602,0.0718303038359,1.0,305.298380849,2.08832259795,0.0786142776133,3.42315779569,1.0,48.0,0.21461651363,0.0285299609984,1.46051757603,6.70600858361,0.0,-1.7413950976,2.92270705698,0.00975168308059,11.196845568,0.746178207643,1215.42883058,0.0830407876891,1.05811508227,0.125233336553,100.0,5.06744826338,1.0,213.051865143,1.14105259856,0.0112315597722,0.0,0.0634202493782,0.0,0.719855156724,0.106106013394,91157.1622935,-2.6406815224,11.6908282279,0.138284903448,0.114194548616,0.0474301250145,0.0,?,2.76011427655,10.3776,0.208522012121,1000.0,0.0,0.474498543583,1.0,4.56421039425,-1.48441208361,5.84541411395,0.00531507116176,-0.245266922388,2.92270705698,0.160706931122,0.0986689896003,2.28210519713,99.0,0.0586982530147,-2.87167508118,'GCVS:Pulsating:RR:RRAB' +0.714892119583,1.40739173574,0.623502299775,0.0,0.340760320542,18.2012764527,0.193512444612,0.09466069358,0.0492863582109,0.35526711384,1.59805123262,0.0156173993275,-0.495119955758,0.470323248192,99.0,0.592868660029,119.0,0.00868846200855,0.0,0.0369577376015,0.0,0.0,2.92624364143,0.0,0.0,3.0873924661,0.0606021634893,1.0,2.52133022241,0.00431340695385,7.75143946433,0.356094543819,1.0,0.0444773407042,0.0042982713123,-0.0757180458518,-0.871265223386,0.0,0.0,0.0,0.35526711384,1.3604,3.77374287512,-0.506754614817,0.00454122591009,0.0,11.0116,0.01166129839,3.0,0.00460045235747,1.2606651112,0.000428370718531,0.00412092641758,0.0476666387934,0.0961610044612,0.0,75.525821681,4.5455697996,0.0448334773453,0.00543793881102,5.04266044481,0.192500228825,1.0,0.242386470549,0.00442072346156,11.5543,3.78199533361,?,9.99999335625,11.0058932773,0.0423489765446,0.0489572866693,1.53449552513,0.0824322369394,1.0,315.184546883,-0.631186203488,0.0336416608076,4.22217520723,1.0,44.0,0.226193176622,7.75143946433,3.5837928614,6.70690811542,-0.57307449236,1.66366931609,0.0645041482038,0.0442340140801,10.970970145,0.751652485762,971.659988806,0.0609678322816,0.442160499647,0.0427056318296,4.6,1.2606651112,1.0,189.512707349,1.40739173574,0.0151714454609,0.0,0.0599428929618,0.0,1.28816906662,0.0685169453076,114655.878679,-0.719937850166,0.258016592815,0.390174986279,0.128800628782,0.100295938637,0.0,?,0.742755058308,10.1939,0.0663329176792,43.55,0.0,0.32463571397,0.785616256508,5.62956694297,1.7565334656,0.129008296408,0.00457831767456,-2.83715463783,0.0645041482038,0.127412198955,0.228187287509,2.81478347149,99.0,0.0445757615894,-0.285254479264,'GCVS:Pulsating:RR:RRAB' +0.0,1.75406712262,1.59077160579,0.0,0.269569669881,46.0786064878,10.7085621062,0.0758392929398,1.0,0.285051805345,-0.0447207660286,0.64537187904,2.07295578364,0.170050575193,4.0,0.434448251526,199.0,0.0183638793016,1.56013059242,0.252797156836,1.33120145359,0.0,5.32775953819,0.0,0.0,-0.513430251805,0.226810418093,0.151703388518,3.95574069153,0.00314039196165,0.0464649204428,1.0,0.199940472614,0.0309505628703,0.0803291129192,2.4545332944,0.0,0.0,0.0,0.0,0.285051805345,0.984,3.84836390876,-0.597544264978,0.00309301344173,-0.0246978385145,10.7602,0.0193130533266,2.0,0.0797393171363,1.97787034576,0.000469527328904,0.00314265556404,0.0280385727839,0.099361371157,-3.8284766942,71.9895290419,6.3197189108,0.0294670728869,0.079473603078,7.91148138305,0.17528648037,18.3266921079,0.123989199452,0.00309112990673,11.0838,5.93361103729,?,9.99999335625,10.6734070352,0.0277364361997,1.51686952124,0.367513593133,0.0525226777945,1.0,73.6905036268,1.08391585712,0.0605083836331,5.26220136787,1.0,4.0,0.175779389049,0.0279642323075,3.12426210336,6.70510929322,0.0,2.39978965056,3.56952070206,0.0409955117771,10.6450254428,1.01513763077,517.259548771,0.043761099155,-0.0634801680351,0.0212006422855,4.4,1.97787034576,1.0,189.92521931,1.75406712262,0.0794115811016,0.0,2.36149474386,0.0,0.503042968795,0.033302262192,102417.390657,-1.85321813553,14.2780828082,0.158543596495,0.0208989667197,3.73851320754,0.0,?,1.77266413909,10.0998,0.0184156461582,722.26,0.0,1.40501643178,1.0,7.01626849049,-2.8798024829,7.13904140412,0.0807636231414,1.67000788515,3.56952070206,0.081891443966,0.252797156836,3.50813424524,99.0,0.028924815943,-2.53188580782,'GCVS:Pulsating:RR:RRAB' +0.0,0.803497352646,1.21102387006,0.0,0.324811186912,49.0870346301,7.17555326605,0.507671755221,1.0,0.227792846378,-0.0212411655071,0.026033943327,-2.74738625439,0.173609665562,99.0,0.415698879339,128.0,0.0299810459654,0.0,0.67414943275,0.0,-0.599897618651,3.10787371348,0.098232313783,0.0,-0.393098299465,0.0715111327155,1.0,1.48335065109,0.00532180235183,0.209043114082,1.0,1.0,0.0747247072148,0.00492029701447,-2.75926780433,0.0,0.0,0.0,-0.0582307765561,0.116981790697,1.2929,3.55915891124,-0.836856853645,0.00497018094388,0.0,11.59365,0.0366359186175,3.0,0.00482236570186,0.741675325544,0.000433058171058,0.00519314735672,0.0512732341715,0.065676545051,0.0,69.7585418107,3.69440503987,0.0507784190315,0.00523610361801,2.96670130217,0.184988848124,1.0,0.190069949465,0.00516859057451,11.9558,2.22502597663,?,9.99999335625,11.4603796875,0.0500727034875,0.0967120588155,1.38433340062,0.055841778131,0.295405178038,80.8736988904,-2.65684406373,0.00975541830463,2.41049205794,0.0347543570059,49.0,0.292405953339,0.209043114082,1.97893309235,6.7051092933,0.0,0.701056417642,2.39185108868,0.0100020360079,11.4232938163,0.79686310718,1301.20469549,0.0718824192532,-1.99471818971,0.031098726571,3.5,0.741675325544,4.636255692,188.144450143,0.803497352646,0.0165023689798,0.0,0.322026706388,0.0,5.40361557336,0.016061793299,165252.996327,-3.07022051801,9.56740435474,0.136593169532,0.0505024625656,0.17037118935,0.0,?,-1.84352029507,10.6629,0.0439913322801,1000.0,0.0,1.08461099851,1.0,3.21398941058,-0.259160550369,4.78370217737,0.00510597482821,1.21859257033,2.39185108868,0.146515940692,0.67414943275,1.60699470529,99.0,0.0502533143476,1.66239510926,'GCVS:Pulsating:RR:RRAB' +0.825061378749,0.105540356138,1.42016238337,0.0,0.174430765517,-45.3072579487,0.0757302665405,1.42092290626,1.34999019053,1.73724354595,-1.88352151848,0.0910351894612,2.06086397801,4.44030305068,99.0,0.564896409986,92.0,0.000522679478312,0.0,1.5701403512,0.199642372979,-0.0681255731935,6.84040398135,-0.156679456731,0.0,2.589268806,0.034026075681,0.0853068000486,0.314941912189,0.00259902405465,8.77378791128,6.51558102604,0.559939500997,0.279473150935,0.00255792771275,-0.179325400371,0.785971482413,0.0,0.0,-0.34320324254,0.288250992924,0.5669,3.92322039299,0.31904704922,0.00243892096132,-0.296297381222,8.81565,0.000870449408077,7.0,0.00252425931556,0.157470956095,0.000461667327805,0.00240417203979,0.0163549275663,0.00790819213609,-0.34937575823,0.197157283641,13.2209749475,0.0159075596391,0.00237005361319,0.629883824379,0.243203285867,2.69111936505,0.026184306297,0.00252186545166,9.2006,0.472412868284,?,8.8435350066,8.88075434783,0.0183952610782,0.175817437639,0.22855740446,0.0129661193469,0.14453893764,311.17007856,2.65229308794,0.016815713792,0.316621068415,0.0119955758845,75.0,0.0651556913749,3.61571850595,1.43930339826,6.7051092933,-3.7262463719,-1.94331323427,0.0252434221802,0.00158303727739,8.8435350066,0.0911725011909,109.57385574,0.0337024864758,-0.352944335458,0.0231839109999,100.0,0.157470956095,1.50943161326,234.235207803,0.105540356138,0.0115261158752,0.0,0.0925380660556,0.0,0.985231359077,0.0223161259032,9971.22087234,2.85808802352,0.100973688721,2.78698474083,0.0382612618791,0.097911289308,0.0,?,-2.00375666026,8.6337,0.0120468727698,1000.0,0.0,0.39485945857,23.5319786167,0.422161424553,3.11642256632,0.0504868443603,0.00311574587523,0.75415732363,0.0252434221802,0.0642018692722,1.11817887992,0.211080712276,99.0,0.0182215504254,-1.95625019447,'GCVS:Pulsating:CEP' +0.0355527195979,1.84380678267,0.545437183469,0.0,0.430381433296,10.7888965809,8.01056608196,0.961723272861,0.137728348336,0.271178089104,2.53761175589,0.0361193680859,-2.38821053371,0.621641855331,99.0,1.32529827815,51.0,0.0143255663298,0.0,0.0228571584484,0.0,0.0,2.90598752365,0.0,0.0,0.377797641006,0.12340841694,1.0,12.2558943217,0.00925332476369,0.187252684099,0.282331038955,1.0,0.208270793875,0.00900799168253,1.12147132427,0.00951068736738,0.0,0.0,0.0,0.271178089104,1.5688,2.46345953523,-0.668592429705,0.00837176536289,0.0,11.777,0.02694314454,6.0,0.0079518293843,6.12794716084,0.000572740736821,0.00869550654111,0.0990277994989,0.0395180791505,0.0,57.2502871187,4.14397428038,0.125061133856,0.00893479918611,24.5117886434,0.373980053626,1.0,0.23284819004,0.00838227749527,12.254,18.3838414825,?,9.99999335625,11.6553784314,0.0902467120505,0.479409608047,1.73448211394,0.0198565153893,1.0,336.912577791,0.708914292945,0.100951328952,5.531420348,1.0,21.0,0.260210563047,0.187252684099,2.07342283342,6.70555890834,-0.828155171875,-2.83765490176,2.67018869399,0.00925044855877,11.598390201,0.342469472696,1472.55872285,0.124497808559,-2.11166286486,0.0389267639597,1.2,6.12794716084,1.0,208.672335286,1.84380678267,0.00367572095772,0.0,0.0884691606501,0.0,0.887152208641,0.0892515309445,73627.9361425,-1.50172207337,10.6807547759,0.317623551128,0.152948401237,0.213071417086,0.0,?,-2.28098860652,10.6852,0.16366480159,0.592,0.0,0.635868676321,3.13424897623,7.37522713067,-2.91489077055,5.34037738797,0.00989213834279,-2.40955344072,2.67018869399,0.333301788868,0.0388430583583,3.68761356534,99.0,0.0904491947348,1.0744325172,'GCVS:Pulsating:RR:RRAB' +0.0555390745452,0.121434491567,0.349076808459,0.0,0.286830819236,-41.1519541838,0.118823366464,0.0591757659156,0.0540868316123,1.36200159912,-2.5072590076,0.00645309626747,1.56774381631,0.189426671018,99.0,0.748298845533,100.0,0.00646873510796,0.0,0.200451473184,0.07883603121,-0.0165048791296,5.47315534337,-0.713781446484,0.0,-1.95884303598,0.0161133918282,0.00624037651941,0.296659342375,0.00125494774698,5.2087969779,0.377640933656,0.119439946368,0.0401323458965,0.00139624872226,1.38182802685,2.77204256103,0.0,0.0,-0.47098713994,0.262983020565,0.8624,5.23781173477,-0.0679457426214,0.00105711695192,0.732608194682,6.95075,0.00440996187112,4.0,0.00119761152555,0.148329671187,0.000457323323721,0.00120877944833,0.0332082636047,0.0259066620179,-1.46214908351,4.66213418559,8.20898286425,0.0331339219159,0.00114888201957,0.593318684749,0.327323215826,0.363888729559,0.174757947161,0.00141074317918,7.385,0.444989013562,?,6.8756481206,6.930665,0.0398737847598,0.0132159079083,0.97723042683,0.0839676693487,0.373888488565,312.515401447,-1.76485446975,0.0248417034146,0.3643034747,0.0575006951308,79.0,0.097836268576,0.192964763942,2.05038607612,6.7051092933,-2.73203246817,0.32349117748,0.0396077888214,0.0164675709743,6.8756481206,0.480203376416,1301.65340629,0.0160215974667,2.82577139771,0.00737238388251,0.8,0.148329671187,1.82112609296,231.329328645,0.121434491567,0.0406199525414,0.0,0.0306719905976,0.0,1.5089643902,0.0359636329644,128863.687223,-2.52779543215,0.158431155286,0.251704577961,0.0642991738684,0.134492298185,0.0,?,-1.73350872181,6.5226,0.110088507997,43.368,0.0,0.532111144304,5.65598648145,0.485737966267,-1.41671091551,0.0792155776428,0.00121817469958,1.84600892012,0.0396077888214,0.102495114946,1.08203404943,0.242868983134,99.0,0.0363787454585,-2.76346337766,'GCVS:Pulsating:CEP' +-0.153181221289,5.22075927179,0.824794230867,0.0,0.383921457853,40.9061942338,5.31362681906,0.145089791779,0.0165527455828,0.0957715102287,-2.25951170189,0.0233181115423,-2.01769381503,0.239932870268,99.0,0.719894227918,101.0,0.0162061013944,0.0,0.0103169113595,0.0,0.0,3.11637130264,0.0,0.0,0.229882507166,0.0574190281079,1.0,2.75821171282,0.00403692392454,0.282293064808,0.0355980755056,1.0,0.0568016101028,0.0040115876431,2.45632754023,0.119840756779,0.0,0.0,0.0,0.0957715102287,1.2774,1.84515811208,-0.761400439793,0.00425138200312,0.0,10.6567,0.0302684604991,4.0,0.00391852533195,1.37910585641,0.000432519912741,0.0041820584666,0.0628981520994,0.0720388174648,0.0,73.9288608507,4.10133855879,0.0633161610684,0.00414774632744,5.51642342564,0.264539887988,1.0,0.171034793655,0.00415551777369,10.9868,4.13731756923,?,9.99999335625,10.5375,0.0645008658017,0.10176224583,1.70077949841,0.0413748518537,1.0,53.8885503808,2.73898746701,0.0560144290567,15.6622778154,1.0,11.0,0.226398373624,0.282293064808,1.34101986396,6.70510929322,-0.994713656326,-0.484484924878,1.77120893969,0.0273260312852,10.4943777621,1.07554873851,480.520512068,0.0573198446387,0.719828382262,0.0269258575704,41.6,1.37910585641,1.0,194.349051052,5.22075927179,0.0199374313431,0.0,0.0454384334629,0.0,1.08732862195,0.0885545818338,48052.0512068,0.703298617585,7.08483575875,0.134052004861,0.127025230596,0.155411417493,0.0,?,1.6445765776,9.7094,0.0735144364483,80.288,0.0,0.503425768086,0.218779861287,20.8830370872,-1.37171523512,3.54241787938,0.00409182802623,-2.65670077282,1.77120893969,0.174164985931,0.196595607818,10.4415185436,99.0,0.0602229553177,-2.85112421951,'GCVS:Pulsating:RR:RRAB' +-0.127327298634,0.121122447366,0.67451231862,0.0,0.144770810417,-45.6503680969,0.0762431056288,0.253424255793,0.263409930927,4.12805397242,-1.47142650826,0.0175015040033,-1.17273276521,0.405077766192,99.0,0.386975359395,87.0,0.00344610822777,0.0,0.363297891756,0.0173222009353,0.0,4.79956109307,0.0,0.0,1.1643762412,0.0174901171842,0.0143902885119,0.590398477593,0.0011683709823,8.97455698388,0.0621006484191,0.0473191204631,0.0521698569976,0.00127242902447,-2.67457299908,0.109788102753,0.0,0.0,0.0,4.12805397242,0.4155,4.44493675092,0.00881772251509,0.00112568339085,0.135803366265,6.8754,0.0169839207588,2.0,0.00118515301751,0.295199238797,0.000428024375509,0.00114908321058,0.0178815402487,0.0255093336352,-0.627715929699,-0.279736156686,8.29663680544,0.019257769586,0.00119486925191,1.18079695519,0.148048388171,0.355691145251,0.0737576274774,0.00129600900578,7.1032,0.88559771639,?,6.90260932435,6.90405977011,0.0178443858207,0.130149254236,0.439302222462,0.0100316174578,1.0,311.162525254,1.3864192309,0.0283928200335,0.363367342099,1.0,72.0,0.103322555818,0.543871989562,3.10752037089,6.7051092933,-2.3471589279,2.99337920355,0.0254143685429,0.0048955369205,6.90260932435,0.331663762482,296.640923396,0.0174709732592,-1.11360436241,0.00598022023767,100.0,0.295199238797,1.0,234.707705659,0.121122447366,0.00256332406345,0.0,0.0413164501895,0.0,0.570730098713,0.0269831349624,25511.1194121,0.842501925157,0.101657474172,0.0801842959997,0.0942322142653,0.204789242932,0.0,?,1.53226856156,6.6877,0.0213793055633,1000.0,0.0,0.147563479085,0.208016762196,0.484489789466,-1.70173949397,0.0508287370859,0.00152329026246,0.518050050576,0.0254143685429,0.0473064148826,1.82854207435,0.242244894733,99.0,0.0206981844497,3.07487216102,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.331483062817,-20.5667296412,?,?,?,?,?,?,?,?,?,?,50.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.424777353418,?,?,11.88105,?,?,?,?,?,?,?,?,?,-78.6523766549,?,?,?,?,?,?,?,?,?,?,8.65134225575,9.99999335625,11.827478,?,?,?,?,?,133.503595016,?,?,?,?,45.0,?,?,?,?,?,?,?,?,11.7787121746,?,1545.47737501,?,?,?,8.6,?,?,7.30937596295,?,0.00378207929829,0.0,?,0.0,?,?,75728.3913756,?,?,?,?,?,0.0,49.7745485458,?,?,?,5.661,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +-0.00540057925689,0.0182715223361,3.29697459166,0.0,0.277985287175,-38.7762454199,10.0843314405,0.469272079184,0.248120938201,27.3649885764,1.90846194219,0.0330551553302,0.654498566409,0.639493280507,99.0,0.497470143925,94.0,0.00729955962529,0.0,0.829166517777,-0.0354910604885,0.0,2.37135135039,0.0,0.0,1.89688815064,0.0658469759112,0.0321096108949,0.320692487202,0.00421221931506,0.0617050876101,0.108735851238,0.363603599357,0.139200140283,0.00462565278925,-0.0310188334813,-0.0517385126877,0.0,0.0,0.0,27.3649885764,0.9765,2.44812494752,-0.476172703096,0.00466723661883,-0.437292110872,11.01375,0.0105471499517,4.0,0.00459417031691,0.160346243601,0.0004502048941,0.00439111573035,0.0535491236492,0.0382196587935,-0.82861620657,20.0509138869,2.9642439531,0.062266176172,0.00462325278349,0.641384974405,0.172325311832,1.42835410541,0.143179565028,0.00422621455475,11.3658,0.481038730804,?,9.99999335625,10.9574106383,0.0581346591436,0.0952284450469,1.3647673235,0.0496580357061,1.0,264.204712824,2.72588840278,0.0421631849188,0.0548145670082,1.0,70.0,0.301751357491,0.0110979204261,0.766585906216,6.70600858377,-1.9307617552,-2.49131586371,3.3614438135,0.0111981795137,10.9200194465,0.896159763759,914.803871165,0.0657546100587,2.44465474534,0.0680950466604,6.0,0.160346243601,1.0,165.296275191,0.0182715223361,0.0132773301176,0.0,0.987340922838,0.0,1.41386042075,0.00474699339308,85076.7600184,0.135353005836,13.445775254,0.483468461222,0.0861735838258,0.068976013585,0.0,?,-0.095579161649,10.3893,0.0156890106565,406.98,0.0,0.593974776961,0.694964230176,0.0730860893442,2.24143345084,6.72288762701,0.0046728762814,1.30009254761,3.3614438135,0.159595717017,2.40906311615,0.0365430446721,99.0,0.0593954392228,1.03469287926,'GCVS:Pulsating:RR:RRAB' +0.0,2.27655295515,0.449444010449,0.0,0.400848931651,-53.5099640484,7.3986315262,0.105966237155,1.0,0.219630296264,-1.21342921958,0.48887928079,-2.08840511392,0.54880516158,4.0,0.884331441873,121.0,0.0120991201737,2.03868072745,0.245175336253,0.0,0.0,2.84649396303,0.0,0.0,-2.54842543203,0.248048449378,1.0,4.07871368826,0.00627068308338,0.202740195222,1.0,1.0,0.0484432506524,0.0857316978861,-2.28347816559,0.0,0.0,0.0,0.0,0.219630296264,1.5042,2.40185233369,-0.563499423981,0.00647372692407,0.0,12.1585,0.033623540684,1.0,0.0872765751277,2.03935684413,0.0004266622758,0.00666355765012,0.0533492092942,0.142522510039,0.0,-9.26114991809,4.30155463486,0.0574284628931,0.0874867610232,8.15742737652,0.226872169463,1.0,0.178357573605,0.0066540563377,12.6332,6.11807053239,?,9.99999335625,11.997968595,0.0527419011777,2.3072636237,0.607960193433,0.0377870626633,1.0,308.670593098,2.71701879015,0.190034338753,6.82965886546,1.0,72.0,0.246319325519,0.202740195222,2.04665898487,6.70555890839,0.0,3.56185692539,2.46621050873,0.0611493773292,11.9202196551,1.54691672191,1496.64176707,0.0927335088907,4.36240364609,0.071617446342,100.0,2.03935684413,1.0,242.461108251,2.27655295515,0.0161450326034,0.0,0.613191274529,0.0,0.285964871344,0.144870565677,179597.012049,2.4272537337,9.86484203493,0.192813247468,0.0518893593544,1.23884526929,0.0,?,-0.998369480209,11.129,0.113878288766,1000.0,0.0,1.04436792203,1.0,9.10621182061,-1.68256223143,4.93242101746,0.0855532987377,0.304189353378,2.46621050873,0.152728001299,0.245175336253,4.5531059103,99.0,0.0536949996824,1.4585512464,'GCVS:Pulsating:RR:RRAB' +-0.14484426296,0.101486878537,0.92941930131,0.0,0.217013088499,-82.6008115451,1.21053182539,0.120272175137,0.0318979665632,1.91522920624,1.97992142772,0.0162017199315,2.16245008928,0.310675024022,99.0,0.692184692461,89.0,0.00173208426906,0.0,0.894450456327,0.10915115978,0.172356852248,6.77292602381,0.0115823220261,0.0,0.237983616245,0.00704673144238,0.0116303645051,0.0662115497891,0.000507048313336,0.809707404706,0.0775810855909,0.0109918824397,0.0928545795867,0.000489335238882,-2.05890946254,0.112749083838,0.0,0.0,-0.531729994462,0.19739937361,0.7019,4.46046268159,0.0841677765753,0.000467383678412,-0.086081899556,3.903,0.00197996838219,5.0,0.000469164358522,0.0331057748946,0.000431213625999,0.000451240168333,0.0203449915538,0.00528231661414,-1.56047943883,-36.3677561332,14.7791012566,0.017954892386,0.000514351254062,0.132423099578,0.278347471319,0.0724826045687,0.029619618936,0.000518610177342,4.2439,0.0993173246837,?,3.86730181943,3.88258539326,0.0188338564359,0.0391988206381,0.230539475782,0.0135009205261,0.00972321706852,272.285035512,2.18458873779,0.028680546361,0.304460635612,0.00212235711382,49.0,0.0753289993959,0.0206703298176,1.81355221619,6.70600858365,-1.08781418221,1.20537180104,0.403510608462,0.00396192886504,3.86730181943,0.0731552774305,4312.29866952,0.00707015710041,-0.287420510622,0.0123225706495,100.0,0.0331057748946,0.818585935589,26.5703412134,0.101486878537,0.0169116729337,0.0,0.0494647142081,0.0,0.684463046425,0.0101476167997,379482.282918,-1.59713686366,1.61404243385,0.282417586108,0.0169336673281,0.0408569577727,0.0,?,0.288654783959,3.542,0.024099074964,1000.0,0.0,1.2816651482,0.521991315851,0.405947514149,1.02207839689,0.807021216924,0.00051601511063,1.95018469086,0.403510608462,0.0597704616612,7.82109698266,0.202973757074,99.0,0.0199960472727,-1.18717579455,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.220827607824,49.3946438309,?,?,?,?,?,?,?,?,?,?,144.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.301708030152,?,?,10.84165,?,?,?,?,?,?,?,?,?,-1.09841028131,?,?,?,?,?,?,?,?,?,?,4.51000996712,9.99999335625,10.8799006944,?,?,?,?,?,123.990669783,?,?,?,?,11.0,?,?,?,?,?,?,?,?,10.8466211083,?,594.616058988,?,?,?,100.0,?,?,45.4101462986,?,0.0578553700197,0.0,?,0.0,?,?,85030.0964352,?,?,?,?,?,0.0,144.508049974,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.292534469723,26.6166243792,?,?,?,?,?,?,?,?,?,?,65.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.631853763256,?,?,9.9338,?,?,?,?,?,?,?,?,?,-32.2244085884,?,?,?,?,?,?,?,?,?,?,33.665499596,9.81874038202,9.84455076923,?,?,?,?,?,110.089620595,?,?,?,?,60.0,?,?,?,?,?,?,?,?,9.81874038202,?,210.763883896,?,?,?,100.0,?,?,12.9789127762,?,0.00952688184806,0.0,?,0.0,?,?,13488.8885694,?,?,?,?,?,0.0,64.4160140128,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.266807220968,0.12155790042,0.520658769626,0.0,0.170776097945,-35.9009136268,0.502217047594,5.88032978523,0.720966904741,1.54543349952,-2.88060624266,0.107563478965,1.1526864525,1.07121544491,99.0,0.543550054321,70.0,0.00300235630655,0.0,4.15996149828,0.0,0.0522134879954,5.54840555703,-0.323420937472,0.0,2.80692309549,0.0505436958131,1.0,0.396859735244,0.00480183202838,2.98675643765,5.22441958101,1.0,0.411386959164,0.00377973805085,2.03735920647,-0.395959011959,0.0,0.0,-0.283558398025,0.279160534913,0.5847,3.24422034973,-0.155540277523,0.00406413580998,0.0,9.799,0.00110620052652,8.0,0.00373251259884,0.198429867622,0.000444802528272,0.00317644406768,0.020619975133,0.00771057749891,0.0,3.52330388633,11.5704630622,0.020502956624,0.00400185877095,0.793719470488,0.249568538359,1.0,0.0301706055162,0.00351307715164,10.0536,0.595289602866,?,9.77819764537,9.79328714286,0.0215694511981,0.149420264101,0.217231508751,0.0228008470363,0.300544030398,320.955323773,-0.882351791981,0.0546721360803,0.364673701261,0.0169050193647,47.0,0.0700006443006,2.98675643765,1.04506551573,6.70600858369,-0.556322906514,2.17413195606,0.167405682531,0.000611646757871,9.77819764537,0.100986330097,68.8076744589,0.0506778622014,1.43219515885,0.00339019556287,100.0,0.198429867622,1.65268466036,239.876689224,0.12155790042,0.0206178276627,0.0,1.34963980669,0.0,0.342508889758,0.00300709315845,4747.72953767,-0.885723106689,0.669622730125,3.73674374078,0.0457512306966,1.02414490391,0.0,?,0.282155171083,9.4689,0.0348990204985,1000.0,0.0,0.466776489022,49.6638736391,0.486231601681,2.16397471017,0.334811365063,0.00340844087482,2.87648341886,0.167405682531,0.076175877173,0.849543960035,0.24311580084,99.0,0.017571603731,-3.04654208896,'GCVS:Pulsating:CEP' +0.0798039922233,0.127611344762,0.542251618116,0.0,0.266683185467,51.636014666,2.01493759828,0.805091265223,0.0990302316648,1.47810900649,-3.03678712331,0.0525081043162,0.0536723501999,0.312798608649,99.0,0.81123349883,154.0,0.00948107918393,0.0,0.086764112845,0.115316017835,-0.00512704583563,8.59720820465,0.0998767926509,0.0,-2.66309825514,0.0436749327363,0.0581664445015,2.35225257483,0.00321929217933,0.298297538011,0.265536472467,1.05792263733,0.12542197638,0.00318375564558,-2.23973702238,0.173298881219,0.0,0.0,-0.28131744424,0.236708823004,0.8532,4.47998695492,-0.352366315249,0.00322733464807,-0.738799912868,10.2174,0.00207295574171,10.0,0.00311721004535,1.17612628741,0.000434504310574,0.00306943612425,0.0206288831693,0.0237353090977,-0.657862583472,10.4817928397,16.0775256886,0.0221946071762,0.00317550061116,4.70450514966,0.333473206253,3.32509425719,0.0583326164905,0.00309892443207,10.5079,3.52837886224,?,9.99999335625,10.1229233766,0.0207415750851,0.267483549097,0.475919969345,0.0114524058826,0.0920724390265,60.7740503498,-0.109870858802,0.0712589654347,0.382834034285,0.0111676395391,91.0,0.0624648572857,0.10373067132,3.10968407958,6.70600858369,-0.737117917003,-2.60347417324,0.671645866094,0.00382614758354,10.1067284085,0.31608745489,116.596084996,0.0436195666527,-3.01124526724,0.0303515668742,5.6,1.17612628741,1.3616970961,292.730517063,0.127611344762,0.0348276924825,0.0,0.117866080086,0.0,0.29978109379,0.027267438035,17839.2010044,1.94834761569,2.68658346438,1.50227490566,0.0848337768812,0.0989410817986,0.0,?,-1.33719057015,9.6547,0.0360813731551,511.28,0.0,0.251403666215,2.58556366662,0.510445379047,-2.56104202232,1.34329173219,0.00299486893127,2.11712412528,0.671645866094,0.092976797672,0.194427244926,0.255222689523,99.0,0.0205703167507,0.537332767849,'GCVS:Pulsating:CEP' +0.586741835177,0.295198416575,0.514994478889,0.0,0.182348442948,-46.7644288037,0.00128370169453,0.0852462764459,0.0355725670678,0.474829797883,0.93998137625,19.1812029267,0.0270008038235,0.180096953722,3.0,0.509556855025,199.0,0.00480231323618,0.0445101701627,0.0849318202108,0.0,0.657776607648,10.2507578958,0.417911974653,0.0,3.07812005078,3.56682014731,1.0,0.646055015548,0.000837971655259,1168.49577,0.13771186478,1.0,0.027804620865,1.26032454738,0.56951874828,-0.657401858773,0.0,0.0,-0.920911129151,0.0572155902206,0.6113,6.82443206782,-0.380092600532,0.00079357808028,0.0,6.8482,0.00687227550745,3.0,1.43629366229,0.323027507774,0.000427900564843,0.000832157610448,0.0112882845823,0.0293920172346,0.0,-6.81706569169,20.0646621013,0.0107929558262,1.28281106776,1.2921100311,0.235733693628,1.0,0.0570981389128,0.000831003490036,7.0771,0.969082523323,?,6.78212233991,6.81149899497,0.0117486999003,114.235290185,0.150006780172,0.00918355027682,0.0278106375993,315.384378811,0.804189291227,0.00496224782388,0.885595249724,0.03375111469,187.0,0.0480504896888,1168.49577,5.21523356151,6.70600858361,-1.18021544175,2.89186945702,0.000427900564843,0.00965586324128,6.78212233991,0.215942121405,484.360600373,0.0116617154328,2.75652242317,0.0104828099632,100.0,0.323027507774,1.30194579032,245.838489827,0.295198416575,0.00981351270715,0.0,58.569573674,0.0,2.3947018585,0.0189153018015,95903.3988739,0.574979570798,0.00171160225937,0.120262472273,0.0660244294495,117.676388606,0.0,?,0.295622584104,6.4658,0.0240443341425,1000.0,0.0,0.170731296933,0.291407083937,1.1807936663,-2.93268278089,0.000855801129687,1.27117037657,0.323424465285,0.000427900564843,0.0333124770715,1.01153689332,0.590396833149,99.0,0.0117532912137,-2.03002847829,'GCVS:Pulsating:CEP' +0.0,0.0775032045233,0.44588132454,0.0,0.292824348149,17.6165342635,0.00331475777044,0.374278174825,1.0,2.06434285127,2.67794387619,0.0612885181313,-0.836401935686,1.31134779148,99.0,1.01004911373,89.0,0.00230257376503,0.0,1.4979550768,-1.36558789832,0.843064407596,6.526589862,0.434402624271,0.0,-0.45647730096,0.0457999594171,0.0707965710913,0.667576762138,0.00361541043297,32.1761514476,1.0,0.647644081456,0.16081925451,0.00383745984875,-1.40568424462,0.0,0.0,0.0,-1.79941865649,0.277333848712,1.0622,3.74304164958,-0.241016498831,0.00319761817954,-0.230810030175,9.7626,0.00113550098921,4.0,0.00368451414342,0.333788381069,0.000467508181393,0.00302685201926,0.0268833753853,0.0169388335199,-2.14669903129,8.04835923115,14.1258440455,0.0265479303645,0.00375108284248,1.33515352428,0.396932099287,4.96017770995,0.0494348971109,0.00324300365905,10.2253,1.00136514321,?,9.68504086185,9.73032359551,0.0280997084498,0.0831645003621,0.374200732773,0.0341117793129,0.151392936813,22.1228884565,-2.74871889007,0.0534359048556,0.23250961357,0.0463748530211,32.0,0.0651848343993,11.6284229482,1.48079997714,6.70690811538,0.0,2.61581315145,0.00110491925681,0.00811551906194,9.68504086185,0.166869034822,205.52370905,0.0434458664959,0.618917140107,0.00851259878711,100.0,0.333788381069,1.55235527277,270.747264244,0.0775032045233,0.0321211466,0.0,0.419829498095,0.0,0.5055629274,0.00899589041918,18086.0863964,0.31112216551,0.00441967702725,2.75630333794,0.0951330442909,0.367573625907,0.0,?,0.229497741151,9.1631,0.0606444418534,1000.0,0.0,0.289780306866,1.0,0.310012818093,3.0882649138,0.00220983851362,0.00299506732495,-2.78768076809,0.00110491925681,0.0775517797901,1.4979550768,0.155006409047,99.0,0.0263302541266,-1.18895437735,'GCVS:Pulsating:CEP' +0.0,2.01972676923,1.53351492687,0.0,0.147270446226,-22.7767310488,5.37398844122,0.559031513421,1.0,0.247558237886,-2.30457463837,0.026361711603,2.52180800434,0.274489063757,99.0,0.31762482056,84.0,0.00887443908954,0.0,0.281927621085,0.0,0.0,3.90210745854,0.0,0.0,-1.94363942717,0.0343500903952,1.0,3.54700967628,0.00229947166044,0.279122297416,1.0,1.0,0.102524948821,0.00258136496725,0.57154958881,0.0,0.0,0.0,0.0,0.247558237886,0.493,3.39482353788,-0.261776728673,0.00244141091711,0.0,9.1676,0.00734195409166,4.0,0.00246378364179,1.77350483814,0.00044504717282,0.00233254648457,0.0247614089874,0.0252620871884,0.0,15.5642509238,4.81806675744,0.0266655054813,0.00254670407774,7.09401935257,0.117986814197,1.0,0.0882538942834,0.00251234254557,9.399,5.32051451442,?,9.14932447406,9.15626904762,0.0244884141579,0.0716175836113,0.665734215634,0.0334936404332,1.0,327.865852807,1.09824384237,0.0294412500324,6.05918030768,1.0,0.0,0.219267615399,0.279122297416,2.23370332713,6.70600858369,0.0,-1.85495049062,1.79132948041,0.00423673092323,9.14932447406,0.258365518984,85.0429835668,0.0346559290204,-2.04416339995,0.0138992031111,13.7,1.77350483814,1.0,234.855144745,2.01972676923,0.0181873660059,0.0,0.322161108057,0.0,0.865669048176,0.00752446837084,7058.56763604,1.38707780219,7.16531792162,0.355071637474,0.0365743215058,0.169009244682,0.0,?,-1.96169616022,8.906,0.0157221362208,1000.0,0.0,0.707704065963,1.0,8.07890707691,-2.20801851604,3.58265896081,0.00243349962292,2.06776145649,1.79132948041,0.0705859685276,0.281927621085,4.03945353845,99.0,0.024424694439,2.82173486946,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.276760176518,48.9240751611,?,?,?,?,?,?,?,?,?,?,180.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.326295645778,?,?,11.60575,?,?,?,?,?,?,?,?,?,-1.63770635705,?,?,?,?,?,?,?,?,?,?,2.39185239401,9.99999335625,11.5730988889,?,?,?,?,?,124.064721606,?,?,?,?,163.0,?,?,?,?,?,?,?,?,11.5361627045,?,1160.83633732,?,?,?,100.0,?,?,44.9916831436,?,0.0114788301954,0.0,?,0.0,?,?,207789.70438,?,?,?,?,?,0.0,179.493595847,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.289673218451,26.2003195315,?,?,?,?,?,?,?,?,?,?,99.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.534298342625,?,?,10.6927,?,?,?,?,?,?,?,?,?,-4.12229934508,?,?,?,?,?,?,?,?,?,?,12.2481474677,9.99999335625,10.6260575758,?,?,?,?,?,152.91647948,?,?,?,?,80.0,?,?,?,?,?,?,?,?,10.5982040193,?,611.307939661,?,?,?,100.0,?,?,68.0435907248,?,0.0206906281807,0.0,?,0.0,?,?,59908.1780868,?,?,?,?,?,0.0,98.3829809122,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.26267044472,52.4017161079,?,?,?,?,?,?,?,?,?,?,119.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.210612265369,?,?,11.0208,?,?,?,?,?,?,?,?,?,2.74601006591,?,?,?,?,?,?,?,?,?,?,5.6371374616,9.99999335625,11.0437134454,?,?,?,?,?,123.920500308,?,?,?,?,35.0,?,?,?,?,?,?,?,?,11.0161446756,?,827.83433717,?,?,?,100.0,?,?,49.2123302801,?,0.0149741798541,0.0,?,0.0,?,?,97684.4517861,?,?,?,?,?,0.0,119.247413981,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.315919032535,29.6825167386,?,?,?,?,?,?,?,?,?,?,85.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.633243186679,?,?,10.8948,?,?,?,?,?,?,?,?,?,-23.8821347578,?,?,?,?,?,?,?,?,?,?,11.6266902301,9.99999335625,10.8351011765,?,?,?,?,?,124.999734194,?,?,?,?,8.0,?,?,?,?,?,?,?,?,10.7991935419,?,792.958461788,?,?,?,100.0,?,?,30.292847855,?,0.0491175135653,0.0,?,0.0,?,?,66608.5107902,?,?,?,?,?,0.0,84.5342365165,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.421428410448,-41.4050149262,?,?,?,?,?,?,?,?,?,?,132.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.683095116775,?,?,11.3727,?,?,?,?,?,?,?,?,?,-77.7452143758,?,?,?,?,?,?,?,?,?,?,4.65664246765,9.99999335625,11.1886257576,?,?,?,?,?,293.97440678,?,?,?,?,117.0,?,?,?,?,?,?,?,?,11.1188762568,?,985.278714593,?,?,?,3.8,?,?,355.117098338,?,0.0242571832047,0.0,?,0.0,?,?,129071.511612,?,?,?,?,?,0.0,129.863497674,?,?,?,122.056,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.0,3.535029974,1.90059436088,0.0,0.336336541828,50.0572012536,1.16279067741,0.171194456009,1.0,0.0447395634221,-0.0357957461606,0.0296209424407,-1.93646631456,0.156699459086,99.0,0.463952384943,119.0,0.0307016717231,0.0,0.190939326041,0.531197493316,-0.360268683761,2.86415230365,0.0273112213011,0.0,0.994143671601,0.0673990978063,0.0379225483242,5.23726578876,0.00511178761853,0.450070239337,1.0,0.310690303118,0.0454894094121,0.00488484262025,1.9847209675,0.0,0.0,0.0,-1.23786961896,0.0351434914338,1.4939,2.6364865044,-0.68421544737,0.00473643322146,-0.115847556329,11.1943,0.0140254611107,4.0,0.00519272092283,2.61863289438,0.000418275913531,0.00471745167264,0.0660463864689,0.0987928643999,-3.04032561526,60.9874923808,3.01446484029,0.068777875211,0.00460996403466,10.4745315775,0.193660237027,3.43660921642,0.167280992638,0.00501188344087,11.6581,7.85589868313,?,9.99999335625,11.1309663866,0.0642436542762,0.207774640725,1.57474589089,0.0214355340105,0.186135612389,58.4534926454,0.176869300682,0.0464552070299,10.605089922,0.0365556686782,18.0,0.351103957047,0.105377467096,2.68578415446,6.70510929322,0.0,-0.510690203064,0.387596892471,0.0268511107432,11.0872836822,0.870891025654,968.532239826,0.0676205270941,-2.10710635203,0.0465481661821,2.5,2.61863289438,8.48828297207,207.692291972,3.535029974,0.00456424071997,0.0,0.0837195152072,0.0,1.41273418736,0.0587707944718,114286.804299,1.90158598118,1.55038756988,0.345557081128,0.010945761871,0.100315871975,0.0,?,1.6503975596,10.1642,0.0333238087876,288.375,0.0,6.13413011723,1.0,14.140119896,-2.27960401008,0.775193784942,0.00466634476474,1.81228298517,0.387596892471,0.186207287763,0.190939326041,7.070059948,99.0,0.0650296182634,1.74341481169,'GCVS:Pulsating:RR:RRAB' +0.438156708347,0.127795032791,0.36436556167,0.0,0.223562865123,18.0975136205,6.89868560108,0.195574473186,0.16024482513,3.91251513522,1.48138612286,0.0365359155088,0.0330996653779,0.376069078018,99.0,0.537649344426,68.0,0.0103366069395,0.0,0.0194306937561,0.100164407425,0.0,3.989311699,0.0,0.0,1.07102435732,0.0568187483767,0.0275353511621,13.1429117701,0.00389396538755,0.101359023607,0.559399727312,0.109529828825,0.188504211632,0.00437007305335,-2.57475763594,-0.503219999865,0.0,0.0,0.0,3.91251513522,0.7295,2.40015655485,-0.229630552898,0.00415040908845,-0.184511764879,10.254,0.0122420021707,4.0,0.00382404304578,6.57145588507,0.000458560813124,0.00394160918971,0.033047315332,0.0217494864001,-0.654657026511,49.6730690953,5.82002611334,0.0410776320048,0.00419623989391,26.2858235403,0.212186414162,0.697243655109,0.106030004666,0.00407341953005,10.5435,19.7143676552,?,9.99999335625,10.2036764706,0.0364579831826,0.212693237504,0.830225441815,0.0196699661885,1.0,359.390000141,-0.605308900097,0.0426444635394,0.383385098372,1.0,30.0,0.173695673133,0.0124250737467,0.423699711037,6.70421024416,-1.28913884461,-1.04674168617,2.29956186703,0.0201621231672,10.1815566069,0.401659813123,153.420728482,0.0566013503304,2.02274265344,0.0453759781108,1.1,6.57145588507,1.0,222.536668087,0.127795032791,0.0295833912493,0.0,0.131949483299,0.0,0.902056470777,0.0322358906561,10279.1888083,0.0878340650367,9.19824746811,0.330431196866,0.0637915977419,0.0815917511138,0.0,?,-1.28905828389,9.814,0.0879319746943,40.528,0.0,0.537550302696,1.48026806414,0.511180131163,0.549326195198,4.59912373405,0.00409390191563,0.299835939331,2.29956186703,0.105221409742,0.04699449107,0.255590065582,99.0,0.0369000244169,-2.62527068106,'GCVS:Pulsating:RR:RRAB' +0.371623491993,0.380116128796,1.13920304654,0.0,0.385915375203,20.6061626613,5.64949425393,0.743887296588,0.0789989093355,0.310756078603,-0.0715701532904,0.0247079627327,1.31224637818,0.400593745706,99.0,0.675162708408,78.0,0.0134830909277,0.0,0.01430217454,0.861151532109,0.160259350694,3.61976037003,0.360691390348,0.0,-1.55157875128,0.0718466980475,0.026340868591,10.6573719808,0.00486581472323,0.13899278707,0.476957905623,0.28578786197,0.135028209523,0.0052545080206,-0.577505217413,-0.0225840710183,0.0,0.0,-1.32327081904,0.171400422994,1.2973,2.10643440004,-0.488394028226,0.00482956792081,-0.835043802398,11.03025,0.037017789145,4.0,0.00504553174398,5.32868599038,0.000676757765616,0.00503602942568,0.0701354435035,0.0394689251187,0.161967398822,-15.4059688456,4.41602826789,0.0647826494953,0.00537404571839,21.3147439615,0.324100354383,0.661043636105,0.197773683535,0.00507292072462,11.4884,15.9860579711,?,9.99999335625,10.94925,0.0733918205958,0.0530586284838,1.63100591766,0.0979576021796,0.126585334872,41.7378030084,2.19990043136,0.00282419287355,1.14034838639,0.128936035162,55.0,0.224298126186,0.0145469828011,0.379889163316,6.70690811525,-0.897391328389,0.483958800188,1.88316475131,0.00698620599737,10.8938183594,0.890131579048,955.993239232,0.0720920460403,2.51657451936,0.0300401898417,100.0,5.32868599038,5.54853039893,302.87971787,0.380116128796,0.00228432654975,0.0,0.0741822481907,0.0,27.0348294323,0.0665101344754,73611.4794209,-2.6411863498,7.53265900524,0.138649934424,0.0928927346688,0.164589343484,0.0,?,-0.403329321405,10.1911,0.0751671553217,1000.0,0.0,0.772772201419,1.78526722253,1.52046451518,0.997116861711,3.76632950262,0.00524748018345,-3.13415882356,1.88316475131,0.206470978504,0.045361283813,0.760232257592,99.0,0.0792639920038,-1.54755544297,'GCVS:Pulsating:RR:RRAB' +-0.180019766185,0.0790386451202,0.723194179145,0.0,0.323587583322,-36.3259219109,0.71250444613,0.712456418922,0.19930194038,1.79085520025,2.21674529832,0.0695701637666,2.38301618541,0.595348505928,99.0,0.896278450123,74.0,0.00508290937524,0.0,8.39567515403,-0.709629984902,-0.354241373817,5.88781441044,0.492048099351,0.0,-1.26820881015,0.0396248203432,0.0541728366144,0.0547542919032,0.0030579597575,1.21414738076,1.05983317717,0.464273241863,0.202581467104,0.00283272957386,-1.65742249282,-0.162080439972,0.0,0.0,0.439308655471,0.485697533903,1.0144,4.25182825122,-0.114248894322,0.00267309790317,0.818278579619,9.3466,0.00476062300359,4.0,0.00274010558457,0.0273771459516,0.000467120443036,0.00296517080516,0.0347247361264,0.0128383128554,-0.849245404543,2.89962339614,12.3414695627,0.0314174671134,0.00272594266468,0.109508583806,0.362681835205,0.981071974265,0.0431639666052,0.00292723605644,9.8009,0.0821314378548,?,9.23591775354,9.31569459459,0.0293872486872,0.153806920039,0.401064192667,0.0196189088486,0.0726431673153,320.935301514,-1.29355440263,0.101139882951,0.237115935361,0.0533597084982,65.0,0.107840835352,0.231026483402,2.27256835213,6.70690811542,-0.823208394031,-0.97354658818,0.237501482043,0.00408737468584,9.23591775354,0.151967229682,339.906705824,0.0399958456833,0.834117849638,0.0434228797666,100.0,0.0273771459516,2.41739973325,240.442250202,0.0790386451202,0.0181715424805,0.0,0.0836304778924,0.0,0.3205933018,0.0302909651684,24813.1895252,0.464204410447,0.950005928173,0.561902480032,0.023492268829,0.0642063372845,0.0,?,2.95047472407,8.7865,0.0481833843803,1000.0,0.0,1.62633597855,7.65556714316,0.316154580481,0.678034876658,0.475002964086,0.00316458259195,-0.222913152912,0.237501482043,0.0923211742781,7.67063232306,0.15807729024,99.0,0.030599317703,2.51242592258,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.0622618391426,50.7456722743,?,?,?,?,?,?,?,?,?,?,164.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.346983658626,?,?,7.3018,?,?,?,?,?,?,?,?,?,0.746967352978,?,?,?,?,?,?,?,?,?,?,46.9219219219,7.30924240845,7.31041158537,?,?,?,?,?,124.126158837,?,?,?,?,29.0,?,?,?,?,?,?,?,?,7.30924240845,?,35.2466943217,?,?,?,100.0,?,?,47.3802478148,?,0.00315331917238,0.0,?,0.0,?,?,5745.21117443,?,?,?,?,?,0.0,164.193418061,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,?,0.323864828807,55.8976359977,?,?,?,?,?,?,?,?,?,?,120.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.35062207124,?,?,9.59555,?,?,?,?,?,?,?,?,?,-2.28794863922,?,?,?,?,?,?,?,?,?,?,16.4779936395,9.49110723457,9.5109575,?,?,?,?,?,84.3379919803,?,?,?,?,96.0,?,?,?,?,?,?,?,?,9.49110723457,?,254.604157075,?,?,?,100.0,?,?,338.188625422,?,0.00198486658743,?,?,?,?,?,30297.8946919,?,?,?,?,?,?,118.942103371,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.356838048556,45.9620243148,?,?,?,?,?,?,?,?,?,?,105.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.149555346306,?,?,9.4933,?,?,?,?,?,?,?,?,?,-5.08082776363,?,?,?,?,?,?,?,?,?,?,12.6438234922,9.39396531926,9.42631333333,?,?,?,?,?,124.410299702,?,?,?,?,41.0,?,?,?,?,?,?,?,?,9.39396531926,?,274.032489773,?,?,?,100.0,?,?,42.3451083457,?,0.0133679362909,0.0,?,0.0,?,?,28499.3789364,?,?,?,?,?,0.0,104.259098522,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +-0.38261787517,1.33940254963,0.456604158337,0.0,0.273200405406,24.2379031789,0.126079715032,1.64789389867,0.387009715042,0.085330099945,2.07619987202,0.15920767572,0.525252852683,2.65383435303,99.0,0.902631256775,60.0,0.0031015976505,0.0,0.257210117124,-0.0147392378911,1.26397432468,4.61285101398,0.534052885964,0.0,-2.047521361,0.117691432827,0.0970092749057,2.5227302767,0.00919058931502,5.68664005483,1.76955290591,0.189457302487,0.601038892302,0.00807486915809,2.55057360701,0.360046769937,0.0,0.0,-1.11164071416,0.0270216069958,1.0086,2.42494488899,-0.721359309406,0.00866808482702,-0.0276705585443,11.75055,0.00609905353986,7.0,0.00902566458067,1.26136513835,0.000635255138093,0.00854089809813,0.0387264740969,0.0127676603217,-0.898229409351,53.3178546054,9.83496994919,0.0313054729953,0.00928800965629,5.04546055339,0.325610709516,2.08282596087,0.0520472677499,0.00834125411312,12.0684,3.78409541505,?,9.99999335625,11.6776133333,0.0331074432559,0.4462952166,0.362244536767,0.0172099659993,0.224872556552,7.69214549372,-1.87114948067,0.0467484144638,4.0182076489,0.115770417477,47.0,0.104627096124,2.24139449183,0.000355942638474,6.70600858369,-0.85227960945,1.04444370392,0.0420265716773,0.00502035029048,11.6445738755,0.238795589475,1384.93510462,0.116096747715,3.04838784227,0.0201945457565,100.0,1.26136513835,3.43993199704,220.939428127,1.33940254963,0.0143050120445,0.0,0.649142660326,0.0,0.63410845227,0.0128842242699,81711.1711728,0.635642470608,0.168106286709,1.36622165218,0.165283584712,0.425576287116,0.0,?,-1.42169732143,11.0598,0.0756175038883,1000.0,0.0,0.196857555426,6.00150773154,5.35761019853,-0.705859212411,0.0840531433546,0.0082732361442,-2.53636440869,0.0420265716773,0.124901215418,0.207589741682,2.67880509927,99.0,0.0331994684716,-3.10736612843,'GCVS:Pulsating:RR:RRAB' +?,?,?,?,0.401108046197,16.334155567,?,?,?,?,?,?,?,?,?,?,56.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.975263481226,?,?,11.62395,?,?,?,?,?,?,?,?,?,-28.4383017728,?,?,?,?,?,?,?,?,?,?,12.0930682533,9.99999335625,11.4245517857,?,?,?,?,?,49.1426591464,?,?,?,?,7.0,?,?,?,?,?,?,?,?,11.3659263703,?,1502.45960829,?,?,?,4.1,?,?,317.741508627,?,0.00667168910755,?,?,?,?,?,82635.2784559,?,?,?,?,?,?,55.0393712981,?,?,?,18.818,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.302969029353,47.6595486563,?,?,?,?,?,?,?,?,?,?,91.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.269249486757,?,?,10.7937,?,?,?,?,?,?,?,?,?,-2.94861190907,?,?,?,?,?,?,?,?,?,?,8.18102982803,9.99999335625,10.8771516484,?,?,?,?,?,124.434688895,?,?,?,?,7.0,?,?,?,?,?,?,?,?,10.841396588,?,707.690382715,?,?,?,100.0,?,?,44.2309992594,?,0.0156967722226,0.0,?,0.0,?,?,63692.1344444,?,?,?,?,?,0.0,91.703567822,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.325643900759,33.7687294767,?,?,?,?,?,?,?,?,?,?,60.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.390623093881,?,?,12.4514,?,?,?,?,?,?,?,?,?,-19.050523897,?,?,?,?,?,?,?,?,?,?,4.60632079339,9.99999335625,12.39472,?,?,?,?,?,125.268966427,?,?,?,?,20.0,?,?,?,?,?,?,?,?,12.3641067368,?,1690.5098519,?,?,?,100.0,?,?,33.3397725752,?,0.0209626279588,0.0,?,0.0,?,?,99740.0812622,?,?,?,?,?,0.0,59.7268740864,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +-0.00733509996661,0.0299719996134,0.277083500776,0.0,0.245951553459,-42.1291202167,0.0838365840114,0.146223197825,0.0189699086306,16.6822369695,-1.29376140527,0.0081980263675,2.70908765601,0.170033846178,99.0,0.667346320303,139.0,0.00546335213372,0.0,1.01964825551,0.132730782875,0.0,6.1224171154,0.0,0.0,-1.77593701303,0.0121607842181,0.00710642766741,0.0397803559068,0.000940939719199,7.67204693252,0.0545133178475,0.0212426090073,0.0179687714797,0.00101447694297,-0.339141322463,-0.0307609770015,0.0,0.0,0.0,16.6822369695,0.8141,5.54839615591,-0.150580199571,0.000795550120641,0.0779824684132,6.5471,0.000510753775586,4.0,0.00106932852732,0.0198901779534,0.000444803762855,0.000963810570317,0.0217037127314,0.0441274907655,-0.752612082763,-8.14355805977,9.8856380865,0.0267816289665,0.000766018434652,0.0795607118136,0.245389550055,0.216154714973,0.11991257028,0.00109932219213,6.9411,0.0596705338602,?,6.54318523868,6.55281942446,0.0248228336814,0.0304066593672,0.950188503744,0.0271838182289,1.0,322.037337861,-2.71734174116,0.0463916147255,0.0899159988401,1.0,42.0,0.0831762728844,0.251815964514,4.93920154099,6.70600858377,-0.533819258422,-2.10150793634,0.0279455280038,0.00500113178874,6.54318523868,0.440141617214,1135.20879361,0.0121578362741,2.08690422279,0.0271346892816,100.0,0.0198901779534,1.0,252.678815251,0.0299719996134,0.0159912992296,0.0,0.026621940341,0.0,0.503389528439,0.032162155229,156658.813518,-2.133651268,0.111782112015,1.52541368203,0.12300682668,0.0277333443473,0.0,?,1.85476092865,6.127,0.0745617372954,1000.0,0.0,0.176199658951,0.630820846004,0.119887998453,-1.56203847617,0.0558910560076,0.000887961394858,-0.809225315144,0.0279455280038,0.0659047571697,10.7191765861,0.0599439992267,99.0,0.0231853766473,-1.63841236707,'GCVS:Pulsating:CEP' +0.0512439433068,0.0172564870107,0.946210926155,0.0,0.25224888368,-32.578076236,0.58280017832,0.466148047862,0.0604296306968,28.974611095,-2.48004755,0.0269949493085,-1.38595827332,0.977002974598,99.0,0.643529575672,81.0,0.00369827723641,0.0,0.644579297775,-0.0167162973135,0.0,5.03471111572,0.0,0.0,-0.115772557921,0.0540096938006,0.0224439384737,0.159492250748,0.00342993501147,1.18508729635,0.0907089345379,0.0817049169468,0.205741743794,0.00443563291159,0.180010285283,-0.120528852497,0.0,0.0,0.0,28.974611095,0.7894,4.74509390888,0.13729068167,0.00401977767272,-0.169596373154,10.105,0.0104733267775,4.0,0.00406450138462,0.0797461253738,0.000452312429202,0.00432499251485,0.0369009010803,0.021113077003,-0.559692163926,-0.720889847111,7.10630189122,0.0414950959123,0.00388002576149,0.318984501495,0.273166104927,0.539071014278,0.144996773318,0.00383440963578,10.5355,0.239238376121,?,9.99999335625,10.1057765432,0.0384399803313,0.100729709733,0.72322345862,0.0362109440095,1.0,328.547453215,-2.31682135954,0.0492645067887,0.0517694610321,1.0,76.0,0.132852144648,0.110015041882,1.9449691749,6.70600858369,-1.08935853217,2.07618131953,0.194266726107,0.0081337357521,10.073063395,0.323308244778,117.302381663,0.0541606178137,-0.23121513704,0.080724035621,100.0,0.0797461253738,1.0,249.602366254,0.0172564870107,0.0174756177321,0.0,0.102502348675,0.0,0.76854197343,0.0395641725674,9384.19053301,0.235346481909,0.777066904426,0.327417008017,0.0550402252965,0.0425284697045,0.0,?,-2.63463846039,9.7461,0.0361556845208,1000.0,0.0,0.840419505288,0.851767000123,0.0690259480428,-0.227773773083,0.388533452213,0.00372579859379,-2.33210527823,0.194266726107,0.111428995185,3.30003649927,0.0345129740214,99.0,0.0389541477854,0.972850288333,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.20474628427,42.6341018745,?,?,?,?,?,?,?,?,?,?,109.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.0852583913178,?,?,9.4899,?,?,?,?,?,?,?,?,?,-3.22229806208,?,?,?,?,?,?,?,?,?,?,16.1775649529,9.49951379765,9.52819816514,?,?,?,?,?,131.884550828,?,?,?,?,42.0,?,?,?,?,?,?,?,?,9.49951379765,?,115.302339556,?,?,?,100.0,?,?,52.0305789886,?,0.0449319378204,0.0,?,0.0,?,?,12452.652672,?,?,?,?,?,0.0,109.439888724,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.340716493867,-36.3516838766,?,?,?,?,?,?,?,?,?,?,85.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.725282030946,?,?,10.4326,?,?,?,?,?,?,?,?,?,-74.6203579735,?,?,?,?,?,?,?,?,?,?,16.9961078913,9.99999335625,10.3265482353,?,?,?,?,?,215.907083372,?,?,?,?,66.0,?,?,?,?,?,?,?,?,10.2937559953,?,335.290293232,?,?,?,1.5,?,?,16.6741293506,?,0.000995918267923,0.0,?,0.0,?,?,28164.3846315,?,?,?,?,?,0.0,84.1359392673,?,?,?,8.734,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.19696027437,-21.6408104578,?,?,?,?,?,?,?,?,?,?,95.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.294450786101,?,?,11.0743,?,?,?,?,?,?,?,?,?,-66.8805057098,?,?,?,?,?,?,?,?,?,?,8.48730723203,9.99999335625,11.0350989474,?,?,?,?,?,171.339271364,?,?,?,?,0.0,?,?,?,?,?,?,?,?,11.0241070748,?,946.115212613,?,?,?,7.7,?,?,24.0990803435,?,0.00857495263234,0.0,?,0.0,?,?,88934.8299856,?,?,?,?,?,0.0,94.6637168941,?,?,?,385.539,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.276830798713,0.0388887055004,0.75756209126,0.0,0.157418073038,-31.990702044,0.0579342430812,1.20106634392,0.125189561165,4.52537833119,-1.42414865311,0.0409270998646,-1.78699321088,1.63485763801,99.0,0.394382677577,90.0,0.00251594002192,0.0,0.23703388898,-0.820721111709,0.264154725329,5.14619813032,0.168539729504,0.0,0.949915215792,0.0587662785418,0.0557389440573,0.848845105876,0.00444164492843,10.8035375521,0.378769606419,1.14373539775,0.327962611625,0.0036838566745,2.48384112317,-0.253674970436,0.0,0.0,-0.453784542434,1.30057471608,0.5925,4.28585437082,-0.553775233323,0.00421849169019,0.839790926056,10.51725,0.000576525185389,3.0,0.00444735008343,0.424422552938,0.000467973485745,0.00410983124178,0.0241005666678,0.0119809406186,0.576157796013,-0.344497857759,7.14571539316,0.0265063283913,0.00440916339259,1.69769021175,0.170719559639,3.3077245337,0.0960603118814,0.00390154772307,10.7463,1.27326765881,?,9.99999335625,10.5086166667,0.023891178174,0.230358914875,0.538692962707,0.0169770792153,0.28778836918,329.000386081,-2.06968927465,0.00839737546869,0.116666116501,0.0280840873177,76.0,0.122576366658,3.76979924775,0.200820170368,6.70600858369,-1.06673505699,1.89963074263,0.0193114143604,0.00371237711269,10.4996913325,0.264536189658,358.131149611,0.0587594658952,1.15507704847,0.017455657119,100.0,0.424422552938,2.85197596034,249.552290065,0.0388887055004,0.0386645459175,0.0,0.220069469623,0.0,2.46719258376,0.0191768523824,31873.6723154,-0.473259449094,0.0772456574416,7.33561013906,0.0412516518276,0.278821610168,0.0,?,-0.143570142291,10.1538,0.0263046957208,1000.0,0.0,0.482618423255,1.51760535029,0.155554822002,1.33728159194,0.0386228287208,0.00420351433426,-0.848048293446,0.0193114143604,0.0671505506785,0.650877236914,0.0777774110008,99.0,0.0257790209939,-0.905463011959,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.0360319433213,39.8290306653,?,?,?,?,?,?,?,?,?,?,112.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.176944576563,?,?,6.43285,?,?,?,?,?,?,?,?,?,-6.15005798916,?,?,?,?,?,?,?,?,?,?,136.98630137,6.41847742779,6.42381785714,?,?,?,?,?,132.851089437,?,?,?,?,98.0,?,?,?,?,?,?,?,?,6.41847742779,?,24.2648188692,?,?,?,7.1,?,?,50.3317721977,?,0.0382844004575,0.0,?,0.0,?,?,2693.39489448,?,?,?,?,?,0.0,111.842744662,?,?,?,242.11,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.253098527054,0.102552191669,0.979170384298,0.0,0.192401193249,-36.4114848142,0.110932548929,0.203888075508,0.14067064827,1.56434843606,1.73066003083,0.0377560167986,0.733187700125,0.453745163107,99.0,0.616267752091,104.0,0.00225645004653,0.0,0.787918889878,0.41985166388,0.0917898161895,7.42576193287,0.100795238938,0.0,0.180733530539,0.0139116225622,0.0222230201204,0.404867654008,0.00115274794828,7.1071470278,1.03553237202,0.06587133747,0.100717212135,0.00108641365853,-2.49950109519,-0.768805895731,0.0,0.0,-0.402618238114,0.334542439855,0.6785,4.95041701946,-0.296967353127,0.000937634962491,-0.223015668274,6.7343,0.00379026758364,8.0,0.000994241335711,0.202433827004,0.000554358111238,0.00101385724437,0.0164518009456,0.00870526281231,-0.773009877531,-3.81208061209,15.4101760254,0.0177234282695,0.000923433318633,0.809735308016,0.290437590486,0.330164690153,0.028524372329,0.000950117900967,6.9459,0.607301481012,?,6.65443547853,6.67115769231,0.0188471299749,0.140828334377,0.20629562925,0.0069623260465,0.0264901363436,326.034339577,0.621512415998,0.0116149380185,0.307656575007,0.0151180697486,102.0,0.057122152364,0.519430900583,2.93001182728,6.7051092933,-0.184067734805,1.24837458654,0.0369775163096,0.0050249892447,6.65443547853,0.0702821173034,816.861808634,0.0138695468689,2.33297123101,0.00962264775181,100.0,0.202433827004,2.30908590695,250.912443157,0.102552191669,0.0324280135748,0.0,0.0615344350963,0.0,1.62977442817,0.0169043899983,84136.7662893,2.17584058653,0.147910065238,0.251238617482,0.0368334969963,0.0962805875691,0.0,?,0.461236848359,6.2674,0.0177369561685,1000.0,0.0,0.437247404075,6.06039523184,0.410208766676,-1.61027488886,0.0739550326192,0.000953008076787,2.94795029657,0.0369775163096,0.0716781535566,1.00052398914,0.205104383338,99.0,0.0194469190428,-2.15974812111,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.337081857868,-19.4490079746,?,?,?,?,?,?,?,?,?,?,65.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.328432633858,?,?,11.9415,?,?,?,?,?,?,?,?,?,-64.8942165501,?,?,?,?,?,?,?,?,?,?,6.38007375365,9.99999335625,11.8966215385,?,?,?,?,?,167.818565231,?,?,?,?,10.0,?,?,?,?,?,?,?,?,11.8462184891,?,1636.36090655,?,?,?,1.9,?,?,25.2720828133,?,0.0106651748835,0.0,?,0.0,?,?,104727.098019,?,?,?,?,?,0.0,64.7557174559,?,?,?,195.301,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +-0.210410207556,0.319976495847,0.578840832289,0.0,0.256569244964,-9.17183580578,0.397857516991,0.0457288185881,0.014900849406,0.51830278488,-1.8840507116,0.243820934303,-2.50602720402,0.155918089516,1.0,0.601757236717,120.0,0.00981761608816,4.28681357918,0.672294984342,0.145876162372,0.0726051472632,7.0878820489,0.345664865945,0.0,0.521498325511,0.0711166498158,0.18930975147,0.0400041787682,0.00184080424773,1.14199065371,0.05572706429,0.684935287479,0.0212470248815,0.0265177579309,-2.14686704024,-0.138855314431,0.0,0.0,-0.852808163073,0.0942401859635,0.8186,4.92688731317,-0.165614380064,0.00155871735653,0.755968746832,8.376,0.0103390608035,1.0,0.0241344005021,0.0200020893841,0.000518228012179,0.00146839099949,0.026456792635,0.0738909484843,-1.02066355243,-16.6891123643,11.4214925748,0.0255818991421,0.0248652564063,0.0800083575365,0.295036344941,4.51452354205,0.106592718812,0.00212565039721,8.7208,0.0600062681524,?,8.33082693342,8.36444583333,0.0258316803175,0.409977111869,0.329648494242,0.0655576687963,0.171612251084,187.530212507,-0.261762759052,0.0479956248847,0.959929487542,0.0250791881368,44.0,0.0902717568748,0.540411468942,4.73315355102,6.70690811525,-0.771571125455,0.227208358884,0.13261917233,0.0280022004347,8.33082693342,0.599610677404,464.314122171,0.0217752519511,-1.08298661215,0.0500203200283,100.0,0.0200020893841,1.79980436785,75.9741608043,0.319976495847,0.0541916457905,0.0,1.47664645554,0.0,0.534506195991,0.0182068298397,55253.3805384,0.127598906214,0.530476689321,0.193695004149,0.025330070171,0.492886440108,0.0,?,-3.16750286583,7.9022,0.0459707188264,1000.0,0.0,0.987515089791,0.302713513264,1.27990598339,-2.49904910507,0.265238344661,0.0241747741588,-0.334734259153,0.13261917233,0.0744717969038,12.0044923901,0.639952991694,99.0,0.0275212391669,-3.13133080533,'GCVS:Pulsating:CEP' +-2.40762131437,2.10198147807,1.20016474601,0.0,0.466853000062,38.1488239692,14.035332486,0.14176538326,0.43023432488,0.061698418849,-1.43437329828,0.0156504233538,-0.987059221425,0.44342994265,99.0,0.733613614703,105.0,0.0093085296608,0.0,0.225953178928,0.666556666387,-0.854512468577,3.04333677602,-0.495767304449,0.0,0.508118514214,0.0583229705478,0.0380408857363,7.07157331268,0.00406500150527,0.0359397968483,8.75341012757,0.266116234,0.0665474682541,0.00408305428624,1.90138367078,4.12116570396,0.0,0.0,-1.4474724379,0.0370100697333,1.44,2.7817943043,-0.327245352939,0.00412961779524,0.637469612708,10.7946,0.0345814862239,3.0,0.00423738501452,3.53578665634,0.000600355806873,0.0040562442246,0.0785250962083,0.0630746960678,-1.88650104821,45.4522153421,3.80795827155,0.0739585088665,0.0043079117804,14.1431466254,0.302813081874,1.3038262556,0.253427448119,0.00408309633008,11.3412,10.607359969,?,9.99999335625,10.7436133333,0.0795211134894,0.0710094390821,2.23949859622,0.0567209832757,0.101606425766,32.0266034143,-1.78287067488,0.0199497750969,6.30594443422,0.199406836721,68.0,0.253175621604,0.00489063639625,1.96981772999,6.70600858369,9.38175306227,2.48370496844,4.67844416198,0.029749339649,10.6827987762,0.822695785079,775.253631329,0.058419702502,-2.68074486922,0.106496334955,8.0,3.53578665634,6.50609234033,233.554227843,2.10198147807,0.00837487569548,0.0,0.249695366937,0.0,3.8964477682,0.0162641089447,80626.3776582,1.76071527525,18.7137766479,0.122342784743,0.103777904458,0.0391695357201,0.0,?,-1.84785956809,9.9012,0.0710513564567,439.2,0.0,0.72836430242,17.8384536091,8.4079259123,0.924972105247,9.35688832397,0.00419974492356,-0.416407596454,4.67844416198,0.225119087192,0.0983421497175,4.20396295615,99.0,0.080984447591,-1.1854440709,'GCVS:Pulsating:RR:RRAB' +-0.543673444844,2.69763280694,1.77206161168,0.0,0.297835464418,-61.1048734945,6.42927505006,0.102473694634,0.0461738477565,0.0612528731288,0.857741729737,0.0166616948221,-0.460407530149,0.0785159511517,99.0,0.489662030352,120.0,0.0318221104852,0.0,0.0866348367789,0.0,-0.766619386082,3.09369818254,-0.258079649019,0.0,-2.6086348624,0.0347006152238,1.0,1.29013093334,0.00249877061652,0.233307797274,0.612412125213,1.0,0.0455474041316,0.00239871404187,-1.95331234949,0.355885931857,0.0,0.0,-3.85264917347,0.0204092530817,1.182,2.99615415661,-0.84997669852,0.0024082454975,0.0,9.71485,0.0155108904916,4.0,0.00248988895099,0.64506546667,0.000425440027089,0.00263700994942,0.0475428903448,0.0535211302518,0.0,-22.9397044514,3.71757571387,0.0507862919112,0.00237102802132,2.58026186668,0.183291347966,1.0,0.152411638532,0.00243670391743,10.0272,1.93519640001,?,9.61723303745,9.63978416667,0.0493039986468,0.0296501402809,1.36153999943,0.0814162842884,0.420494017162,307.824001682,0.37602262251,0.0813226458531,8.09289842083,0.149489728286,116.0,0.264821727912,0.233307797274,1.1818572044,6.70510929322,-0.231906561364,-2.27693207733,2.14309168335,0.0241624523652,9.61723303745,0.688272422767,259.037422727,0.0347094216965,1.6131224016,0.00689555814225,100.0,0.64506546667,6.16699788255,263.793964371,2.69763280694,0.00913896932416,0.0,0.0484134423834,0.0,0.619746673418,0.0492074859777,30825.4533045,-0.862337560741,8.57236673342,0.148955610226,0.0255895193208,0.367562030332,0.0,?,3.1219687559,8.8452,0.0266128691044,1000.0,0.0,1.95172171325,2.04720089049,10.7905312278,-0.0260216992418,4.28618336671,0.00252661275952,-2.60782583311,2.14309168335,0.138702160088,0.332732161533,5.39526561389,99.0,0.0479883581368,-0.50980400253,'GCVS:Pulsating:RR:RRAB' +0.548454380904,2.14331067472,0.495619967488,0.0,0.377711377192,77.4823827263,9.49835178121,0.0887326000081,0.053073981449,0.0614815279442,1.06655063723,0.0259153110963,1.71562710013,0.119651261716,99.0,1.05770775074,93.0,0.0233392539296,0.0,0.778332345183,-0.415380755792,0.865317642892,5.713128822,0.382963522542,0.0,1.30845575746,0.0419465437963,0.0535116853412,0.213165116029,0.00344803154523,0.044084611547,0.596813039875,0.260223152328,0.035215643943,0.00294207274782,1.14300719247,1.60533554733,0.0,0.0,-0.32256158578,0.0137758979153,1.3963,2.58292500904,-0.912167689109,0.0032225905002,0.280805672187,9.961,0.0174741439902,4.0,0.00295564566058,0.106582558014,0.000421781316965,0.00292916021478,0.0401260548938,0.0750773110907,-3.88104074203,20.8972737462,10.3592085066,0.0405605069398,0.0029721037149,0.426330232058,0.437647307638,3.80066473992,0.114035015355,0.0029356279769,10.3052,0.319747674043,?,9.80112746783,9.83104516129,0.0422471762547,0.101955562029,1.26223229143,0.0290502958657,0.0528266870984,86.6406409766,1.92839994771,0.0105851174312,6.42993202415,0.05768798091,90.0,0.0908133436178,0.00814319301891,2.7390105133,6.70465973847,-4.01316853852,0.573817599174,3.1661172604,0.0336087766331,9.80112746783,0.685273628192,369.41626932,0.0421494161472,1.96876164551,0.0367067466004,100.0,0.106582558014,2.42083525988,313.182163401,2.14331067472,0.0103177892145,0.0,0.116810609635,0.0,3.97000426868,0.0294105845847,33986.2967774,0.403681864291,12.6644690416,0.174739730846,0.196060809571,0.081416228802,0.0,?,-1.28092828075,8.9089,0.0857587060851,1000.0,0.0,0.23025882058,3.54127671843,8.57324269887,-0.801792831997,6.33223452081,0.00263742863012,-2.93958052871,3.1661172604,0.116780278933,1.55584861997,4.28662134943,99.0,0.0376735444534,-2.80996406927,'GCVS:Pulsating:RR:RRAB' +0.0,0.00766472453078,0.181848891426,0.0,0.316728532077,-29.9769512211,0.180623749516,0.18985019283,1.0,23.6207500358,0.858235438253,0.0523779162152,-2.63891666341,0.691811766487,99.0,1.07057305046,76.0,0.00635171648636,0.0,27.8684320969,-0.758915197929,0.212925276588,5.31295529654,-0.615428017989,0.0,2.56876468553,0.0565285654771,0.112317330104,0.0358828941837,0.00528110855185,3.00069439413,1.0,1.06181013798,0.109584585402,0.00416978547408,-1.31821236382,0.0,0.0,0.0,-0.0644150289221,4.56543289422,1.0549,4.33990931191,0.172155937817,0.00401378962667,0.853237341944,10.2538,0.00912546935113,5.0,0.00475784489007,0.0179414470919,0.000451587556053,0.00398839279346,0.0388137144136,0.0302488088872,0.848097651391,0.955313758897,9.90414377856,0.0514830246583,0.00356100540745,0.0717657883675,0.408763616329,3.58927457619,0.0896874799849,0.00432348092372,10.7847,0.0538243412756,?,9.99999335625,10.2677736842,0.0412719792309,0.0961350291102,0.656404725699,0.0360702227229,0.437163527735,330.546274952,-3.07558777635,0.0376305990551,0.0229941735924,0.0299962357001,20.0,0.0803250599024,1.13492776054,1.07926222657,6.704210244,0.0,-2.00451953105,0.0602079165055,0.0193836066251,10.2270038326,0.400349757622,250.078021331,0.0570606814218,0.726894687071,0.0246002927434,100.0,0.0179414470919,1.81828237484,249.371869238,0.00766472453078,0.00763094526277,0.0,0.182911721965,0.0,0.915172905496,0.0268812851293,18755.8515998,2.92340626654,0.240831666022,0.440310289293,0.120537213487,0.154378734643,0.0,?,2.39279896811,9.7298,0.185196085085,1000.0,0.0,0.248186742395,1.0,0.0306588981231,1.87358489601,0.120415833011,0.00348031230482,-3.07639055228,0.0602079165055,0.13204916493,27.8684320969,0.0153294490616,99.0,0.0479301896932,-0.378242864321,'GCVS:Pulsating:CEP' +0.0,0.0638583774919,0.847188742069,0.0,0.371276454633,-66.0134485364,0.10300057232,0.203450557718,1.0,2.54021152837,0.702021942149,0.0291976307224,2.65466429563,0.208255480683,99.0,1.10096000414,97.0,0.0131701577871,0.0,2.90684773263,-0.352106275046,1.09345764155,6.49424548305,0.498418210752,0.0,-0.546831908188,0.0369367252478,0.0605257831463,0.344015267389,0.00271403511901,11.279005212,1.0,0.127991612773,0.0825850844393,0.00268686233365,-1.13254950486,0.0,0.0,0.0,-2.010179488,0.573111589846,1.2523,3.6504261079,-0.378529031808,0.00248683060669,0.517326599891,9.5159,0.00796570605494,8.0,0.00266736637433,0.172007633694,0.000454899477996,0.00276603835305,0.0338577432697,0.0305941003847,-1.86119771084,-7.77031970002,12.0880074248,0.0370737085744,0.00265660154257,0.688030534778,0.439840035624,0.243583803977,0.0872219338385,0.00280322668673,10.0197,0.516022901083,?,9.51010628487,9.54780824742,0.0363864796047,0.0681590800146,0.815492206411,0.0409948021726,0.321153660685,286.465435804,2.36964524905,0.0783082127905,0.191575132476,0.0803672899767,36.0,0.088581007836,1.15459887518,2.77960934288,6.70600858369,0.0,-2.81266799083,0.0343335241067,0.0120019377651,9.51010628487,0.405515233402,427.378996466,0.0366390650062,-0.487859885263,0.0451683605648,50.5,0.172007633694,2.55980362954,205.278086284,0.0638583774919,0.039084786449,0.0,0.0760926900496,0.0,0.546185164453,0.037824708431,41028.3836608,-0.0773453193267,0.137334096427,0.309491780647,0.17626453356,0.0601156715167,0.0,?,2.98970369772,8.7674,0.0448435894684,1000.0,0.0,0.188207173825,1.0,0.255433509968,0.18533991944,0.0686670482134,0.00245680938743,-1.00142141882,0.0343335241067,0.155927306838,2.90684773263,0.127716754984,99.0,0.0442762577845,-1.93163017001,'GCVS:Pulsating:CEP' +?,?,?,?,0.22543966059,32.1183789119,?,?,?,?,?,?,?,?,?,?,89.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.615697593761,?,?,10.1581,?,?,?,?,?,?,?,?,?,-9.73786518756,?,?,?,?,?,?,?,?,?,?,20.6181315849,9.99999335625,10.0989011236,?,?,?,?,?,52.442265309,?,?,?,?,18.0,?,?,?,?,?,?,?,?,10.0834412112,?,118.091140252,?,?,?,100.0,?,?,306.169138786,?,0.00895236892057,?,?,?,?,?,10392.0203422,?,?,?,?,?,?,88.48133017,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.0178338959206,0.00929677777199,0.644084099104,0.0,0.446770833912,83.9071875447,0.458859725285,0.238814430336,0.183666642373,21.4596735157,2.29411793433,0.0246926554946,0.637780363291,0.361931786137,99.0,1.19373174575,88.0,0.0152688521204,0.0,0.0416673271632,-0.968283886009,0.136998096154,4.24949223737,0.20914694757,0.0,-2.25212886746,0.0777256772604,0.171044148424,6.793989508,0.00553427599842,0.579711885378,0.594257556533,0.231609055583,0.0852718454463,0.00576176767244,2.48965338137,1.34636403569,0.0,0.0,-0.0726224834699,5.58079612259,1.4428,3.05351651699,-0.519580712046,0.00545963228628,1.45252170817,11.4852,0.0297569227659,6.0,0.00552861780479,3.396994754,0.00043134746997,0.00573055790959,0.060320975574,0.0646777714753,0.78381812859,23.7463958679,6.28366190253,0.0713104914391,0.00577974289482,13.587979016,0.386758823552,2.71756976482,0.213104320821,0.00542817515545,11.905,10.190984262,?,9.99999335625,11.2962965909,0.0615499098379,0.165906084617,1.38009500826,0.0334433572426,0.261705770756,97.0353652602,1.82125339632,0.0940220788549,0.027890333316,0.016802786863,6.0,0.166636278066,0.0465190709385,1.20916376318,6.70600858369,-6.94190508795,-1.68475773184,0.152953241762,0.0232795353347,11.2578564154,0.946441204557,1361.72410774,0.0777838782088,2.15065330765,0.0386630343665,100.0,3.396994754,2.0208972514,5.64969056645,0.00929677777199,0.0094367312402,0.0,0.0421407873668,0.0,0.702595380598,0.13139939466,118469.997373,1.18404497344,0.611812967047,0.178306843088,0.173621782515,0.137468110932,0.0,?,-0.06626067008,10.4622,0.0909947047437,1000.0,0.0,0.368031924513,8.66777337065,0.0371871110879,-1.91273678877,0.305906483523,0.0054571467888,1.26510631355,0.152953241762,0.214306755275,0.0532537716188,0.018593555544,99.0,0.0628121104181,1.83367079279,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.288792087437,-6.36994706833,?,?,?,?,?,?,?,?,?,?,56.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-1.53683655914,?,?,9.92625,?,?,?,?,?,?,?,?,?,-41.0924184656,?,?,?,?,?,?,?,?,?,?,47.1564651514,9.76610752256,9.78234285714,?,?,?,?,?,167.113116193,?,?,?,?,36.0,?,?,?,?,?,?,?,?,9.76610752256,?,247.639377892,?,?,?,100.0,?,?,45.7354616125,?,0.0119886372406,0.0,?,0.0,?,?,13620.165784,?,?,?,?,?,0.0,55.188132477,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.0,2.41500505876,1.66416134087,0.0,0.24533482009,-34.1692776718,0.850802613204,0.532513071885,1.0,0.0731650539839,-2.57577380642,0.0579878936095,0.164990789023,3.38208825811,99.0,0.417853186012,66.0,0.00286467132954,0.0,0.213349826204,-0.636954692214,-0.917589293798,2.19593157192,-0.54068899889,0.0,-0.217702936792,0.142244841169,0.0664213064886,4.68713763585,0.00993674175599,0.757429427238,1.0,0.462788986532,0.347353648454,0.0105801214921,-1.57664648913,0.0,0.0,0.0,-3.35951445862,0.0371525504425,0.997,2.32137827712,0.0686199611975,0.0104790891123,0.289840701391,12.262,0.00768893584656,4.0,0.010541042396,2.34356881792,0.000445692959179,0.0106642155487,0.0670456029225,0.0293289487776,-0.470479668595,-9.4740720773,2.42571598193,0.0658462356783,0.0114960005141,9.37427527169,0.152485950541,2.33043439148,0.156118192889,0.00915632757282,12.7867,7.03070645377,?,9.99999335625,12.2915333333,0.0628622442515,0.113633886885,1.04646657485,0.0851541200203,1.59568404778,332.284272688,-2.0613937815,0.0460881328906,7.24501517627,0.331924704631,2.0,0.447665743639,0.254962979119,0.977285606382,6.70331143583,0.0,0.736452780448,0.283600871068,0.0212622790555,12.26201333,0.43954147218,1572.98373198,0.142138738802,-1.96295699156,0.0702666690129,100.0,2.34356881792,7.69964985746,260.836227502,2.41500505876,0.0146176285219,0.0,0.46048596294,0.0,1.38623078161,0.0215441643726,102243.942579,1.19658525167,1.13440348427,1.25428994362,0.0200025516003,0.140248517823,0.0,?,-0.280899345022,11.7897,0.0395162836453,1000.0,0.0,3.21734598621,1.0,9.66002023503,0.931307994021,0.567201742136,0.01040614024,-2.13133886658,0.283600871068,0.184431503452,0.213349826204,4.83001011751,99.0,0.0665099832621,0.962893205702,'GCVS:Pulsating:RR:RRAB' +0.0,0.180833122995,0.803622336966,0.0,0.342019748867,-1.2051429975,0.0339076427399,0.657000674363,1.0,2.76498017464,-0.0814775399933,0.0502106618939,2.70804121811,1.44441654405,99.0,0.987974388325,70.0,0.00258798463323,0.0,0.114647860012,0.0899038637224,0.0,5.46274204584,0.0,0.0,-0.275480647562,0.0548096732528,0.0393833719567,8.72236080025,0.00351641968499,20.3265478061,1.0,0.199347148238,0.387059560682,0.00345733830001,-1.95597507672,0.0,0.0,0.0,0.0,2.76498017464,0.9928,3.66149923329,-0.271148391509,0.00383049043749,-0.230682312629,10.18545,0.00679779965717,4.0,0.00428808632653,4.36118040012,0.000463984355784,0.00388300254268,0.0343973799955,0.0106531506934,-0.818682840498,-0.584305064087,12.707159284,0.0345199430086,0.00427092359609,17.4447216005,0.412352532406,1.1007977304,0.0684238905177,0.00375164377272,10.5988,13.0835412004,?,9.99999335625,10.1486528571,0.0324504102916,0.198072002986,0.436231406077,0.0177013773305,1.0,187.438148405,1.15298627278,0.0513628944721,0.542499368986,1.0,60.0,0.0904475698892,3.77040750096,0.322219663344,6.70690811542,0.0,-2.78535298645,0.01130254758,0.0058319362132,10.0991488249,0.237488446412,266.428569921,0.0534473170282,0.418719596092,0.0429054669235,100.0,4.36118040012,1.0,90.040271422,0.180833122995,0.0053503039707,0.0,0.329159499318,0.0,0.678203103427,0.0111515600655,18383.5713246,2.94981717907,0.0452101903198,0.542269805197,0.171199684999,0.100254676186,0.0,?,-2.43050389171,9.606,0.0449142943571,1000.0,0.0,0.229331347197,1.0,0.723332491982,0.228629130139,0.0226050951599,0.00389913686442,2.34018232582,0.01130254758,0.0991640977888,0.114647860012,0.361666245991,99.0,0.0350964893208,0.0216543700245,'GCVS:Pulsating:CEP' +-1.55803677216,0.257082169841,0.303360683923,0.0,0.260559032416,-12.2872543082,0.0533392063028,1.19210837125,3.45852788619,1.94490345367,-1.43965083027,0.23173024906,1.9478334899,2.45452723821,99.0,1.02412376002,62.0,0.00310037616142,0.0,0.122342768247,0.0,0.0,4.73521040088,0.0,0.0,0.234177020225,0.11142956444,1.0,8.46710911658,0.00834158020984,28.1219032673,6.00664100457,1.0,0.444875756495,0.00715224646519,-2.33119961531,1.89361139209,0.0,0.0,0.0,1.94490345367,1.0005,2.81132047421,-0.834374071494,0.00787038677759,0.0,11.67155,0.00305407587699,8.0,0.0100226199114,4.23355455829,0.000484933964893,0.00770532277244,0.0267333061552,0.0162313992144,0.0,-5.98709385423,10.5269894871,0.0300064129216,0.00723860734334,16.9342182332,0.352516356288,1.0,0.0361364514193,0.00794478442509,11.9576,12.7006636749,?,9.99999335625,11.6132693548,0.0334869106425,0.77213564094,0.351004224697,0.00852226312242,1.0,197.134009227,-1.74181965227,0.0536462815267,0.771246509522,1.0,11.0,0.0744065093259,28.1219032673,0.853796149447,6.70780788825,6.00290352284,1.00015842026,0.0177797354343,0.00643927134481,11.5898624698,0.197260383932,1431.92628734,0.109139056977,-0.299919139647,0.00578157864992,100.0,4.23355455829,1.0,90.1242501882,0.257082169841,0.0191639872792,0.0,0.447360355151,0.0,0.573324763072,0.0183025938061,87347.5035276,2.14591875024,0.071118941737,2.53613142868,0.165330488678,1.52085835467,0.0,?,-1.35069027844,10.9571,0.0898348717483,1000.0,0.0,0.156255326609,32.4692194987,1.02832867936,2.30026497523,0.0355594708685,0.00741152447119,-2.8904900814,0.0177797354343,0.117557545703,0.0242520859774,0.514164339681,99.0,0.0332886138056,-1.26671020638,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.231338206902,-50.2979337916,?,?,?,?,?,?,?,?,?,?,115.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.4532885323,?,?,11.3058,?,?,?,?,?,?,?,?,?,-60.9522295262,?,?,?,?,?,?,?,?,?,?,5.64060331893,9.99999335625,11.2402652174,?,?,?,?,?,239.003576631,?,?,?,?,33.0,?,?,?,?,?,?,?,?,11.2208799466,?,1115.81419975,?,?,?,81.1,?,?,27.5039552467,?,0.0375095518636,0.0,?,0.0,?,?,127202.818771,?,?,?,?,?,0.0,114.333395248,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +-0.470606774836,2.05807621378,1.29058530775,0.0,0.186449510279,-84.9114710433,7.10297881153,0.290451632118,0.160809826433,0.242945327608,2.87134689919,0.0314224488129,-1.6167407016,0.288838109222,99.0,0.347234624841,79.0,0.00999298500092,0.0,0.045267064725,-0.110203050053,0.0,3.24026570444,0.0,0.0,2.7868126893,0.0405675781772,0.0104367233932,5.07899944831,0.00287859765483,0.111694417327,0.42972928089,0.0161045213092,0.125467865382,0.00299021009544,1.70746437274,0.438975822126,0.0,0.0,0.0,0.242945327608,0.5747,2.47890516057,-0.0985354976622,0.00287192239196,0.0469252370034,9.6682,0.00274698602425,2.0,0.00301038701642,2.53949972415,0.00047318802606,0.00311202324005,0.028615778896,0.0228881068809,-1.03346189699,-29.5728104005,4.86233401575,0.0281738397336,0.00287253641423,10.1579988966,0.135168481283,0.148158382111,0.0919934998749,0.00306532870707,9.9157,7.61849917246,?,9.63330530731,9.64953164557,0.0277990941892,0.357823487823,0.760757982243,0.00770365135624,1.0,270.532144972,0.754623149905,0.0367018994145,6.17422864134,1.0,63.0,0.222958856477,0.00383287084078,1.36672716534,6.70510929322,-1.54461358815,2.43495194938,2.36765960384,0.00942805177149,9.63330530731,0.32871289259,105.100058596,0.0405719342066,-0.95034488509,0.050094861421,100.0,2.53949972415,1.0,91.2582058591,2.05807621378,0.00827268798305,0.0,0.256364937718,0.0,0.794836939685,0.0120459539127,8197.80457048,2.54945462495,9.47063841537,0.978502528441,0.0621071985236,0.0568168084655,0.0,?,2.04233743704,9.341,0.0230603988691,1000.0,0.0,0.465092369568,0.967521031855,8.23230485512,1.65341509886,4.73531920769,0.002731998479,-3.13661573825,2.36765960384,0.0832845846102,0.136146560798,4.11615242756,99.0,0.0288457065644,-0.115104323268,'GCVS:Pulsating:RR:RRAB' +-0.0595484700201,2.51701937937,2.80280950071,0.0,0.268339033801,-43.6474842807,7.04052843948,0.533636659078,0.11801176871,0.198647656072,0.194254731616,0.0515189190026,1.15129053318,0.174469666377,99.0,0.443484399051,128.0,0.030625769332,0.0,0.0273215825121,0.610271811969,0.0,4.72896068155,0.0,0.0,-2.00031989084,0.0755111708183,0.0401034724494,5.50814744022,0.00526128505769,0.124406437844,0.0738505406918,0.22087617119,0.0933826051943,0.0057325003871,2.10176946444,-0.0588069181599,0.0,0.0,0.0,0.198647656072,1.0139,2.05628925977,-0.484589079362,0.00534921597747,-0.60585252638,11.60675,0.00232889927848,4.0,0.00536682050928,2.75407372011,0.000444981943078,0.00543393833573,0.0399672914854,0.0581846722066,-0.873672171236,-14.7147428565,5.3489496175,0.0378473323554,0.00535489414926,11.0162948804,0.208023446604,0.514512581798,0.10483688675,0.00520994971854,12.0241,8.26222116032,?,9.99999335625,11.5306601563,0.0388905227156,0.293268209586,1.1317054981,0.0181658152823,1.0,324.163065981,2.22935234448,0.0285372801293,7.55105813812,1.0,73.0,0.186622289336,0.0145512301829,2.31878725954,6.70690811525,-1.77798498256,0.125376248568,2.34684281316,0.0107992651712,11.5067983281,0.665015635459,1291.51227998,0.0753418221493,0.991064477472,0.0221433390548,100.0,2.75407372011,1.0,261.861458287,2.51701937937,0.00852477182279,0.0,0.129476516016,0.0,1.32290065769,0.0408053656865,164022.059557,1.76619057597,9.38737125265,2.26021884464,0.0523561224062,0.227442129139,0.0,?,-3.07337701537,11.0102,0.0142376557722,1000.0,0.0,0.707120497648,0.490015131252,10.0680775175,-1.38845672445,4.69368562632,0.00543990359631,1.50808212401,2.34684281316,0.109991426602,0.130492716302,5.03403875875,99.0,0.0408841951891,1.40058341943,'GCVS:Pulsating:RR:RRAB' +0.0,1.8817172499,0.57342230735,0.0,0.352976387019,-17.6602602559,6.11558377491,0.260432301597,1.0,0.0766538833553,-0.655952360991,1.09110833698,2.00903256334,0.0715363581054,4.0,0.634842806789,102.0,0.0861571388678,0.880227112949,0.334470059573,-0.215875822094,0.00718850830324,3.13561080314,-0.387668851541,0.0,1.62970421703,0.56875971917,0.0358458957438,2.98980423323,0.00600740725861,0.0904524647059,1.0,2.25471689751,0.0373751193787,0.209561294711,-2.08612275617,0.0,0.0,0.0,-1.0970326277,0.0436801147125,1.2578,2.42239805803,-0.358948405573,0.00591545749325,-0.242202240296,11.59205,0.0480659077567,1.0,0.204049683655,1.49490211661,0.000447285382521,0.00635054943432,0.0523022068829,0.16185602232,-1.25332961524,0.53997313112,4.5646608178,0.0559540371291,0.203875433105,5.97960846645,0.241069529708,16.7753505451,0.179456683884,0.00601757222044,12.0549,4.48470634984,?,9.99999335625,11.4737970588,0.0528121451584,2.80153302111,0.529160606712,0.0697633190009,0.142988235813,345.587024411,1.3827159967,0.0666233004257,5.64515174969,0.143835689613,53.0,0.209250140345,0.16524888298,2.6052772685,6.70510929322,0.0,3.42257563426,2.03852792497,0.0233441296407,11.4162371477,1.32498806257,1170.44468171,0.0846528296958,0.466785528336,0.0609229557807,100.0,1.49490211661,5.88969394718,258.847466796,1.8817172499,0.00602614858964,0.0,5.23140784229,0.0,0.761580425583,0.0387818078217,118214.912853,-0.433480732021,8.15411169989,0.122747527588,0.0364484037582,3.13429475592,0.0,?,0.98781127655,10.7971,0.0863718268525,1000.0,0.0,1.34262277098,1.0,7.52686899959,3.04573661975,4.07705584994,0.196747960435,-2.35293910924,2.03852792497,0.14752696588,0.334470059573,3.7634344998,99.0,0.054623607832,-0.196242254923,'GCVS:Pulsating:RR:RRAB' +-0.255452719017,0.090640716757,0.501109517629,0.0,0.284822078718,7.05442560039,1.52098242576,0.103950608837,0.0658507283699,2.03832976476,1.79551303918,0.0163782037524,-1.38801408815,0.342915529199,99.0,1.13082708138,64.0,0.00252413429487,0.0,0.232114453114,0.0,0.0456012656747,4.88867192394,-0.515550116864,0.0,-2.37678008286,0.0125562424255,1.0,0.665978193253,0.000949530571516,0.986204688889,0.477750706184,1.0,0.0577751031215,0.000878443275567,1.58698814951,-0.0485720631192,0.0,0.0,-0.0973384836156,0.563675167092,0.8877,2.88589850912,-1.30671279407,0.000905271622716,0.0,5.9077,0.00725749456497,8.0,0.000890641340382,0.332989096627,0.000463946370323,0.00091684330886,0.0413774847786,0.0144358608481,0.0,3.8370934172,9.62025713848,0.0389176971597,0.000833941307994,1.33195638651,0.331110659329,1.0,0.0583856928848,0.000906282330026,5.9608,0.99896728988,?,5.71421930793,5.7371671875,0.034418067476,0.0352484099892,0.534580323697,0.0252295274191,0.587836271302,180.447150153,2.72732005505,0.0680595184097,0.271922150271,0.0203802919894,40.0,0.122646486576,0.986204688889,1.50212014433,6.70690811525,-0.205323340863,2.48592135125,0.506994141919,0.00837082741508,5.71421930793,0.244987896838,3601.78352417,0.0125494669607,-1.35775810032,0.004278806322,100.0,0.332989096627,2.59853790332,90.4134102472,0.090640716757,0.0110307465083,0.0,0.0486652946481,0.0,0.506755032571,0.0186786377628,226912.362023,-0.185054165649,2.02797656768,0.120719911749,0.0963209227492,0.213988737354,0.0,?,0.463919504423,5.0731,0.0718773592825,1000.0,0.0,0.475614627559,2.75831213383,0.362562867028,1.00526598823,1.01398828384,0.000863863279293,-0.145228940704,0.506994141919,0.152477525669,0.621003162594,0.181281433514,99.0,0.0320494774196,-2.1604106027,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.194398872383,39.4159266549,?,?,?,?,?,?,?,?,?,?,79.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.368927944792,?,?,8.7893,?,?,?,?,?,?,?,?,?,0.0767371463655,?,?,?,?,?,?,?,?,?,?,53.3162721263,8.77787524761,8.78476329114,?,?,?,?,?,139.412129855,?,?,?,?,72.0,?,?,?,?,?,?,?,?,8.77787524761,?,216.916926913,?,?,?,54.8,?,?,62.0595158411,?,0.00231369000827,0.0,?,0.0,?,?,16919.5202992,?,?,?,?,?,0.0,78.9592231463,?,?,?,51.496,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0,3.16643850414,0.343839676569,0.0,0.386946211375,58.2385699551,3.356356255,0.121722297712,1.0,0.0506464886448,2.35929327568,0.0318886303766,2.8247432832,0.278285216455,99.0,1.05912416358,126.0,0.0209525976594,0.0,7.5806514974,-0.299605644659,1.90942114962,4.30805681125,0.40539704859,0.0,1.90303099811,0.0811667126036,0.0146964692639,0.131914783359,0.00607708261968,0.268773617478,1.0,0.044168532941,0.0857812752933,0.00562445787901,2.46766366295,0.0,0.0,0.0,-3.5464207822,0.00851305153439,1.607,3.07715155777,-0.962365243685,0.0056841918531,0.340606775913,11.7662,0.020447297463,5.0,0.00571159949677,0.0659573916795,0.000417796374136,0.00573738403225,0.0423349241404,0.0638361629164,-1.28938785588,37.0145675009,6.82697106026,0.0422820500129,0.00583708177926,0.263829566718,0.301626314452,0.142621670585,0.178321739613,0.00701614864039,12.2879,0.197872175039,?,9.99999335625,11.6774785714,0.044181572148,0.0635968700162,1.99092621006,0.0913964842274,0.339934312542,59.0619622991,-2.55145512334,0.108890417766,9.49931551241,0.13136505257,83.0,0.140185058708,0.010630903913,2.36788130404,6.70510929338,0.0,2.95199102619,1.11878541833,0.0413793334715,11.6188012024,0.577500983052,1346.95978206,0.0817612217204,-1.62191573131,0.0650081916627,4.1,0.0659573916795,3.6048299909,246.905516491,3.16643850414,0.0176323138144,0.0,0.0541827260208,0.0,0.407311371382,0.105124994646,168369.972757,3.01061478688,4.47514167333,0.28325662032,0.176471255751,0.090639275836,0.0,?,-0.599731405718,10.6809,0.128489237983,796.441,0.0,0.247122434014,1.0,12.6657540165,-0.0494588741558,2.23757083667,0.00586939478947,-0.168790010198,1.11878541833,0.135906660881,7.5806514974,6.33287700827,99.0,0.0437847779186,-1.77650007119,'GCVS:Pulsating:RR:RRAB' +0.0,0.0882364847953,0.518082730075,0.0,0.20850387984,-2.49849655773,0.619432762836,1.38544032483,1.0,5.66659019973,-2.20721393866,0.0335543803532,0.254082874217,0.551541431683,99.0,0.760437859612,86.0,0.00600375238842,0.0,1.32882525415,0.0,0.0,5.53938042829,0.0,0.0,1.05863851604,0.0493970292259,1.0,0.752544397297,0.00368855828891,2.42157033014,1.0,1.0,0.325249986184,0.00371376868182,0.0646985488729,0.0,0.0,0.0,0.0,5.66659019973,0.7258,5.51713777483,-0.295244631743,0.0037220978306,0.0,9.99715,0.00416790016766,6.0,0.00364781847643,0.376272198649,0.000467182320087,0.00320932592514,0.024391626628,0.0103938911038,0.0,-0.679428989298,10.0439096138,0.0252315275699,0.00358588402304,1.50508879459,0.278339357278,1.0,0.101573880075,0.00350953249694,10.3225,1.12881659595,?,9.98899122471,10.0088337209,0.0277122522982,0.344652129943,0.510029483961,0.00984553293251,1.0,188.874295037,-0.114399169514,0.072857633022,0.264709454386,1.0,44.0,0.0771856654909,2.42157033014,1.9986252891,6.70690811525,0.0,0.157271584289,0.206477587612,0.00252986384585,9.98899122471,0.164911373167,89.4457488839,0.0496264213123,-0.404337549291,0.0193504099323,100.0,0.376272198649,1.0,90.6719236798,0.0882364847953,0.0269792185863,0.0,0.363034213973,0.0,0.325355117279,0.0102063733281,7602.88865513,1.34261778365,0.825910350448,0.939302874265,0.0863661397899,0.178491199476,0.0,?,2.49368801701,9.5967,0.0450660577672,1000.0,0.0,0.276982673348,1.0,0.352945939181,-0.307518576198,0.412955175224,0.00332239539812,0.356287173083,0.206477587612,0.0857786348998,1.32882525415,0.176472969591,99.0,0.0242724131511,-2.87601448403,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.253596606182,37.1779961383,?,?,?,?,?,?,?,?,?,?,125.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.177111881771,?,?,7.8922,?,?,?,?,?,?,?,?,?,4.3057500683,?,?,?,?,?,?,?,?,?,?,61.413744396,7.81483092103,7.8618168,?,?,?,?,?,145.442356284,?,?,?,?,116.0,?,?,?,?,?,?,?,?,7.81483092103,?,598.920145935,?,?,?,100.0,?,?,70.9994671341,?,0.0411291548715,0.0,?,0.0,?,?,74266.0980959,?,?,?,?,?,0.0,124.518778034,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +-1.04719514715,0.055016565369,0.163642337342,0.0,0.138292678242,-22.7335441399,1.12720519409,0.525028161194,0.217176995255,3.88131899391,-1.33153025763,0.0211248953323,2.93044242412,1.12026176652,99.0,0.471220574611,73.0,0.00119212705937,0.0,0.306445693216,0.0,-0.00791756225205,4.6538544149,0.0221004551265,0.0,-3.11879058588,0.0165971712319,1.0,2.75970144763,0.00117290372054,1.33072488298,0.90337116249,1.0,0.137626419299,0.00114389043744,-2.68938633966,1.60831759544,0.0,0.0,-0.638464848111,0.38821430645,0.5289,4.35887120925,-0.571975249263,0.00105244881331,0.0,6.8425,0.00388255686385,3.0,0.00118064676598,1.37985072382,0.000545874132102,0.00117082453354,0.0198528729592,0.00873770775426,0.0,-2.21257386426,9.65018454719,0.0163079428142,0.00115000828613,5.51940289527,0.13871713872,1.0,0.0581372325385,0.00109259166456,7.0482,4.13955217145,?,6.81206310334,6.82502876712,0.0143745581281,0.0461439465202,0.29026923731,0.0251794046616,0.0211774250399,341.323112738,2.92104368239,0.0179461141413,0.165049696107,0.0079918133474,26.0,0.123851819965,1.33072488298,2.85247980879,6.70600858373,9.92019326428,-0.00630801346809,0.375735064695,0.00238931087825,6.81206310334,0.0830614489152,417.589101046,0.0165658899927,-2.13102731961,0.0129367220621,100.0,1.37985072382,0.658754886834,258.963630965,0.055016565369,0.00890143478437,0.0,0.0293407791892,0.0,0.763515618255,0.0373930561115,30066.4152753,1.07317730898,1.50294025878,0.298878124357,0.0383336612184,0.0932980943072,0.0,?,1.36462957961,6.5193,0.0952317512586,1000.0,0.0,0.440889298775,10.450147827,0.220066261476,2.44747456909,0.751470129391,0.0012523343546,0.61580204514,0.375735064695,0.0418973407094,0.0846141107796,0.110033130738,99.0,0.0153041844465,-0.464624177957,'GCVS:Pulsating:CEP' +0.0260502099838,0.283809520824,0.45804219385,0.0,0.245694129052,64.7709829639,0.54817375842,0.675506294552,0.0375291821159,0.801050291261,2.63369799409,0.0120269238403,1.37536803373,0.113466645936,99.0,0.725808993945,118.0,0.0116175046971,0.0,0.0427354945041,0.0,0.306145875545,4.26988505765,-0.184465793438,0.0,-2.88292788667,0.0186632702094,1.0,2.16989714407,0.00135346898472,2.73635863987,0.148704460145,1.0,0.0298802109002,0.00143413509043,-1.83555286725,-0.486454128734,0.0,0.0,-0.417966338006,0.139153413982,0.966,3.52106068193,-0.965718600755,0.0013296076579,0.0,8.00875,0.00214062257871,7.0,0.00131569892537,1.08494857204,0.000428928447778,0.00135958766868,0.0289168537637,0.0433690204463,0.0,16.2895793765,6.46471992862,0.0275823323326,0.00134042569589,4.33979428814,0.173653747184,1.0,0.110969001845,0.00130938422339,8.1917,3.25484571611,?,7.92098563867,7.91738728814,0.0268617587616,0.044527311328,1.03350360125,0.0300525872376,0.133276586239,73.1277048346,-1.93379180517,0.0480671682453,0.851428562471,0.00679798407128,106.0,0.165947137448,2.73635863987,2.40306712029,6.7051092933,-0.309920075207,1.11225027774,0.18272458614,0.00198530521135,7.92098563867,0.523549286261,566.566324781,0.0187497194148,-1.95291453426,0.0436172829753,100.0,1.08494857204,1.03220056974,297.255176027,0.283809520824,0.0357200440163,0.0,0.0221644724301,0.0,0.551289164055,0.0569478936676,66288.2599994,0.143940580619,0.73089834456,0.605497609271,0.0680955086467,0.0283647745197,0.0,?,1.75314474865,7.2257,0.0618790929267,1000.0,0.0,0.367975122177,2.06104958451,1.13523808329,-3.11353039557,0.36544917228,0.0014012430869,1.02712733817,0.18272458614,0.106256626872,0.174487248277,0.567619041647,99.0,0.0310012910381,-0.116647738873,'GCVS:Pulsating:RR:RRAB' +0.0,1.9587094839,0.637946286845,0.0,0.432367307207,-26.4859735872,8.5089123994,0.207848412911,1.0,0.0907609190582,-1.49132966533,0.0181535927217,-1.18273416785,0.158362146486,99.0,0.848306131807,104.0,0.0296568371819,0.0,0.242813358847,-0.274274429698,0.0758223043551,3.39495653508,0.33990226121,0.0,2.38686423047,0.063689823904,0.0445038984771,4.11838955133,0.00460997064796,0.0617022426759,1.0,0.32653187636,0.0679883076082,0.00451370463348,-3.05717392625,0.0,0.0,0.0,-0.587860392244,0.0438691358648,1.5864,3.43925458749,-1.00721468169,0.00438079983574,-0.627426174805,11.14785,0.0457304503866,4.0,0.00462476596805,2.05919477566,0.000603701049655,0.00459288558746,0.0804899773145,0.0651982261896,-0.8016292469,-4.86264139072,3.88207498231,0.085686952575,0.00447788657427,8.23677910266,0.30659856904,1.43949650421,0.251774589776,0.0043713548,11.4639,6.17758432699,?,9.99999335625,10.9522221154,0.0789780131596,0.0828610645383,1.92507714201,0.0537982476022,0.709846302239,338.537102577,-1.05790739731,0.0571290683907,5.87612845169,0.0298847896685,2.0,0.253744794248,0.00829901653046,1.46688778953,6.70600858369,0.0,3.00961116255,2.83630413313,0.0225266423258,10.9043668727,1.0533693459,968.175736794,0.0639347646401,2.13789671925,0.0402130147867,100.0,2.05919477566,4.64489017671,259.866245273,1.9587094839,0.0353144031565,0.0,0.100149207943,0.0,1.33714455982,0.0456359286408,99722.1008897,0.980781412731,11.3452165325,0.0982083121131,0.0561646853647,0.112596333629,0.0,?,1.69722076506,9.8775,0.113920993858,1000.0,0.0,1.41582813028,1.0,7.83483793558,-2.74594062659,5.67260826626,0.00453765305658,-0.0577220625734,2.83630413313,0.223181239413,0.242813358847,3.91741896779,99.0,0.0772338998806,1.54227239439,'GCVS:Pulsating:RR:RRAB' +-0.217568465481,0.114499862399,2.70443655598,0.0,0.240367966615,-24.8657754565,0.0192788209232,3.28589283473,0.224557590793,1.36120305273,-1.45542801114,0.0493019001401,2.74187161459,1.23751669223,99.0,0.657490550474,77.0,0.00461827563271,0.0,0.0500502469359,-0.1662797734,-0.535866337473,5.79949988528,-0.0690919900722,0.0,0.52443840909,0.0810355029762,0.0628541273784,8.38285874513,0.00585707874095,29.1348520666,0.822605700556,0.264853504766,0.356091603924,0.00548380441439,1.27915237255,0.197586754881,0.0,0.0,-0.695015215581,0.318085843919,0.8009,5.13724283919,0.234492171207,0.00548922000908,0.0344523476934,11.0842,0.00571667393757,2.0,0.00565899989156,4.19142937256,0.000467775034038,0.00547730786637,0.0309419755551,0.0151709523685,-0.154553258657,-11.3341871802,10.9506492739,0.0249558961035,0.00617717140509,16.7657174903,0.30887805366,3.84274346442,0.109645125507,0.00558732246423,11.5617,12.5742881177,?,9.99999335625,11.1151220779,0.0282063689499,0.872132799339,0.472107010125,0.00643729836562,0.116379460118,208.681694441,-1.01082404864,0.0436735267196,0.343499587198,0.0253830928697,59.0,0.0883527161721,12.9992668028,1.03056603507,6.70645831935,-0.790247033707,1.8097459047,0.00642627364108,0.00171142272973,11.1093996763,0.204612691434,1082.04466354,0.0789807415088,-0.184641433347,0.0231649226481,100.0,4.19142937256,2.53087882618,90.9342004775,0.114499862399,0.0343294178502,0.0,0.208918121274,0.0,0.575083871866,0.0255592073749,82235.3944293,-1.6009222256,0.0257050945643,1.0023459188,0.0684585027604,0.251994453844,0.0,?,-2.49667874934,10.7608,0.0116770863773,1000.0,0.0,0.443703544698,4.39211202648,0.457999449597,-0.997225940161,0.0128525472822,0.00651275373476,-1.33830361829,0.00642627364108,0.0797859657145,0.0587039474403,0.228999724799,99.0,0.0280519522566,-2.51812319468,'GCVS:Pulsating:CEP' +0.0,0.528201315745,1.24941912802,0.0,0.215546086625,-25.8945440375,0.0103406497641,1.5889445566,1.0,0.946608774147,1.15501838427,0.0476025245373,-2.73004312117,2.7885980019,99.0,0.481136140871,66.0,0.00227249759601,0.0,0.296611446961,-0.376838062826,0.0,4.3197844812,0.0,0.0,0.994053096892,0.0890106886037,0.0757460465121,3.37141405109,0.00649478832945,43.1184260658,1.0,0.482844052252,0.20245589619,0.00605998311149,-2.40070789379,0.0,0.0,0.0,0.0,0.946608774147,0.6126,2.8860668548,0.205553913184,0.00581385555586,0.0415389097994,11.10685,0.00720219425732,4.0,0.00705611268571,1.68570702555,0.000456879498224,0.0060409384754,0.0365678995943,0.0281431331629,-1.19094043456,-11.7781367562,6.02023965161,0.0347092971819,0.00715112636283,6.74282810218,0.205957196827,7.78083021672,0.112622081359,0.00558823672587,11.5003,5.05712107664,?,9.99999335625,11.1691484848,0.0342107970356,0.365235274906,1.41188254073,0.0150668606123,1.0,209.629760288,0.50076343384,0.0600477882306,1.58460394723,1.0,62.0,0.191941897356,27.6664969257,1.35163210985,6.704210244,0.0,2.58786411567,0.00344688325471,0.00422866278083,11.1561707782,0.330980808478,1159.12098856,0.0860609136575,1.4445182302,0.0194536378131,100.0,1.68570702555,1.0,90.9767578037,0.528201315745,0.0218361006878,0.0,0.159322366966,0.0,0.622631795316,0.0369471141829,75342.8642561,2.86243325895,0.0137875330188,0.843333499563,0.0220006941913,0.347559026578,0.0,?,3.12339767733,10.8877,0.0309772922373,1000.0,0.0,1.57549175026,1.0,2.11280526298,2.69099100652,0.00689376650942,0.00636269919792,0.61393025065,0.00344688325471,0.105505191511,0.296611446961,1.05640263149,99.0,0.0388078020072,1.42498874247,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.149223063657,59.2414523318,?,?,?,?,?,?,?,?,?,?,144.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-1.15288970908,?,?,18.3905,?,?,?,?,?,?,?,?,?,11.2325653318,?,?,?,?,?,?,?,?,?,?,495.785820526,9.99999335625,18.344875,?,?,?,?,?,70.0140031566,?,?,?,?,119.0,?,?,?,?,?,?,?,?,18.3547035244,?,9049253.34345,?,?,?,100.0,?,?,301.609062492,?,1.73662025588,0.0,?,0.0,?,?,1294043228.11,?,?,?,?,?,0.0,143.642750333,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +-0.148487292997,2.5911212499,0.91500191594,0.0,0.294055782583,-8.71293138352,5.47649525491,0.629354768234,0.241981443236,0.0538239331231,1.79960324468,0.0631317625949,0.332101628908,0.320969226488,99.0,0.626768703345,54.0,0.0325033713454,0.0,0.961342098525,0.0672036611801,0.647219584742,2.69814577458,0.808874236299,0.0,2.61750319662,0.119735728741,0.0266254482269,0.327379217175,0.00938564367193,0.141441663953,0.95999624106,0.0590545364891,0.117163584057,0.0102273917753,-0.508314853651,-0.570925552026,0.0,0.0,-1.59775119919,0.0312662006902,1.2057,1.73714551727,-1.00784741481,0.00722008824539,-0.136932587728,11.62895,0.041312273418,3.0,0.00841534738363,0.163689608588,0.000640318532345,0.00817440787865,0.0672169967472,0.067555920945,-0.909822522685,6.19584829793,3.81979466143,0.0648253991287,0.00775625315727,0.654758434351,0.260452245448,0.405639100402,0.14611614143,0.00811340089785,12.0041,0.491068825763,?,9.99999335625,11.5709111111,0.0681848812655,0.218096739319,1.3621073981,0.0386338461916,0.566737732522,352.626292971,-2.0568759678,0.0164711108377,7.77336374971,0.234126926667,30.0,0.245583367158,0.0125214328229,1.9374284063,6.704210244,-2.30384398941,-0.530397700533,1.8254984183,0.0138868008554,11.5399510122,0.655801071122,1318.51810613,0.11886716925,-0.377579091814,0.0765073909772,100.0,0.163689608588,5.15198005921,257.686910969,2.5911212499,0.00503010514918,0.0,0.12161556542,0.0,3.92789513769,0.0641904285913,69881.4596247,1.71195244532,7.30199367321,0.211580549929,0.0839944572741,0.103789716732,0.0,?,4.44950518394,10.7984,0.0733715599994,1000.0,0.0,0.854147486825,8.16083949579,10.3644849996,-2.03998192526,3.6509968366,0.00913945727424,2.01210947159,1.8254984183,0.186133057678,1.1929176715,5.1822424998,99.0,0.0613783716841,2.76090143917,'GCVS:Pulsating:RR:RRAB' +0.0,0.14394370607,0.372593540537,0.0,0.208694677795,-23.811707582,0.154105896403,0.529178183926,1.0,1.07137585221,-2.53407059692,0.0317581864626,0.56794060176,0.763770221996,99.0,0.510094276079,81.0,0.00657886381291,0.0,0.591264240779,-0.0432158480672,-0.396649716586,4.73019749478,-0.923959801468,0.0,-1.34170355074,0.0703949261097,0.0341561544436,1.69129118765,0.0056027096919,3.90093798776,1.0,0.499343474487,0.177716790906,0.00722319655578,1.28462533612,0.0,0.0,0.0,-1.54377570258,0.235651034632,0.8145,3.98487748151,0.0096885434436,0.00483251176164,-0.463793545104,11.0374,0.00543848617007,3.0,0.00459270336274,0.845645593823,0.000457133210848,0.00498211238158,0.0266247452638,0.0251053454356,-0.90370012829,-10.74242777,7.28864711822,0.0263396886614,0.00666460405109,3.38258237529,0.222932249973,1.9594386413,0.139937456134,0.00507890657642,11.4298,2.53693678147,?,9.99999335625,10.9877345679,0.0305862317598,0.447616435462,0.761365143091,0.0122879394415,0.462921637041,207.785696946,-2.08818167108,0.0268078565542,0.43183111821,0.105775297296,2.0,0.123741016635,0.883811026448,1.92241059347,6.70690811525,0.0,0.755785836407,0.0513686321342,0.00904871066761,10.9673914089,0.273395174197,1011.29487283,0.0699989075886,1.25011281419,0.110985535554,100.0,0.845645593823,2.07631330829,91.0568789241,0.14394370607,0.00733273888492,0.0,0.124616231874,0.0,1.00250532261,0.0404318456882,80903.5898261,-1.6605579099,0.205474528537,0.894609764141,0.0564934485064,0.0359003970475,0.0,?,-0.322890208,10.6153,0.0714470271848,1000.0,0.0,0.493360742832,1.0,0.57577482428,2.2969737196,0.102737264268,0.00561439394278,0.814035037604,0.0513686321342,0.0801649169561,0.591264240779,0.28788741214,99.0,0.0279101348481,1.39390285136,'GCVS:Pulsating:CEP' +0.264566813278,0.162323889716,0.236555980624,0.0,0.236688565343,-31.244088208,0.58304760298,1.06079880181,0.366746452889,1.12870733838,1.29377470864,0.0579893834016,1.2271815223,2.08702230322,99.0,0.737455240775,72.0,0.00205127305329,0.0,0.0553168979677,0.703125460647,0.0833786835123,4.6192239229,-0.311659742522,0.0,0.633599274994,0.06307847784,0.0871280306989,8.8122121164,0.00470778498414,0.875934427705,0.525535584566,0.834834802827,0.272109348937,0.00486029286858,0.0913512827305,-0.297423991091,0.0,0.0,0.0811627764782,0.251101528496,0.8039,3.31869465641,-0.784138503944,0.00465952766372,0.691865435681,10.5359,0.00701339820214,4.0,0.00478552962644,4.4061060582,0.000457281009314,0.0045313109182,0.0323555801978,0.0155787422135,-0.812277277344,-2.05908469969,8.58472793933,0.032175107258,0.00402449943578,17.6244242328,0.259754114551,3.64030395004,0.087897816228,0.0043562084882,10.6803,13.2183181746,?,9.99999335625,10.3997722222,0.0302576990659,0.0887324781091,0.773912826415,0.0476969635004,0.363197329351,221.664439619,-2.82072706853,0.0210121405045,0.486971669147,0.021474250867,51.0,0.113661674001,0.396423201132,1.12717521063,6.70690811533,-1.65556301906,-0.841426192808,0.194349200993,0.00428617423376,10.3812997289,0.197852387641,291.127339219,0.0628246478929,-0.720849737238,0.0472570034074,100.0,4.4061060582,2.12799478478,107.431062439,0.162323889716,0.0179671262606,0.0,0.144382444617,0.0,1.34278097863,0.0297648641745,20670.0410845,0.41176926833,0.777396803974,0.623697387055,0.117917731385,0.0877600146216,0.0,?,-1.86565494528,9.8764,0.11848046242,1000.0,0.0,0.2527161948,1.69752200932,0.649295558862,-0.947716439458,0.388698401987,0.00470599351083,-2.42545963515,0.194349200993,0.0870099371633,0.0810076141124,0.324647779431,99.0,0.0316076596599,2.45824709817,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.232182927355,27.7088674879,?,?,?,?,?,?,?,?,?,?,75.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.118692794592,?,?,9.791,?,?,?,?,?,?,?,?,?,-2.93308048759,?,?,?,?,?,?,?,?,?,?,36.1742150195,9.82968342763,9.84476533333,?,?,?,?,?,151.915247207,?,?,?,?,13.0,?,?,?,?,?,?,?,?,9.82968342763,?,152.355391043,?,?,?,100.0,?,?,68.4590977269,?,0.011543611424,0.0,?,0.0,?,?,11274.2989372,?,?,?,?,?,0.0,75.4118476152,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0,2.80766194973,1.64252634062,0.0,0.459310500272,52.8588217565,5.00568754697,0.164862146532,1.0,0.178084117302,-2.88271535522,0.0242645730856,-0.914452528151,0.0832934437177,99.0,0.835451836632,119.0,0.0585506003961,0.0,0.615961870681,0.0,0.0,3.03555926387,0.0,0.0,-1.10884138275,0.0699067989504,1.0,1.62347711376,0.00492588079304,0.299659134919,1.0,1.0,0.0747068370471,0.00495212838956,1.38272776852,0.0,0.0,0.0,0.0,0.178084117302,1.528,1.94243125541,-0.546440625639,0.00507401915088,0.0,11.5181,0.0168326228951,2.0,0.00507461149698,0.811738556881,0.000433239991777,0.00491822350528,0.0660785250401,0.0673300974511,0.0,35.3581614843,4.20288319112,0.065554466451,0.00498897923342,3.24695422752,0.287198617786,1.0,0.204246990043,0.00514915526209,12.0074,2.43521567064,?,9.99999335625,11.3757957983,0.0683337139593,0.039111902056,1.94033187564,0.124735252474,1.0,52.4346828371,-1.12189774425,0.0831015965233,8.4229858492,1.0,79.0,0.228634068999,0.299659134919,1.45363747756,6.70600858365,0.0,-1.02463344089,1.66856251566,0.029348070974,11.314162903,1.38461870136,1339.45452146,0.0702243958682,-0.402975569766,0.0939500159461,100.0,0.811738556881,1.0,249.649499392,2.80766194973,0.0377512195446,0.0,0.0343642016927,0.0,0.820209830367,0.146090739818,158055.633532,0.883630674953,6.67425006262,0.298399915944,0.111405875144,0.0533381911808,0.0,?,-1.266857979,10.4794,0.041635845861,1000.0,0.0,0.572353851057,1.0,11.2306477989,1.64824635729,3.33712503131,0.0049373180681,-0.0356463532121,1.66856251566,0.1901614401,0.615961870681,5.61532389947,99.0,0.0708547218499,-1.84427748828,'GCVS:Pulsating:RR:RRAB' +0.249506499561,0.0985190897425,1.98976911026,0.0,0.176711828416,-2.13460452656,0.272830420799,0.194274258994,0.0996685707415,1.58447473555,3.0467508509,0.0334897461875,-1.45412038498,0.148985374991,99.0,0.477833890751,70.0,0.00377277230255,0.0,9.74140303434,-0.625558445649,0.21699919722,5.69516592498,-0.0756083130954,0.0,1.19539198862,0.0082519629824,0.0244002873046,0.0642786063571,0.000702430902485,2.99513204739,0.442220483997,0.212766579668,0.055943625431,0.000607766711964,0.532807027312,-1.2284470636,0.0,0.0,-0.894177565987,0.365452102079,0.5481,4.40993435267,-0.37919506696,0.000611504087145,0.753192318517,4.17015,0.000818446926684,2.0,0.000662725964678,0.0321393031786,0.000467402341749,0.000619719878833,0.0187992179878,0.00908680512122,-0.627046977941,11.0887919942,11.2186309447,0.0218612822233,0.000616276967642,0.128557212714,0.217075088213,0.487197010675,0.017160438043,0.000558647605005,4.3315,0.0964179095357,?,4.11848740974,4.11296857143,0.0193495168245,0.0509996362824,0.247636242272,0.0122599869334,0.0177644733609,195.361134469,-1.13745795356,0.0400584287641,0.295557269228,0.0120413586166,26.0,0.0982117304869,0.263369270657,3.37313599157,6.70690811525,6.49719457362,-2.63943894373,0.0909434735996,0.00398075142809,4.11848740974,0.0503748500233,2557.54735169,0.00825818395908,-1.13716126811,0.029592937104,100.0,0.0321393031786,2.49521091767,104.097160151,0.0985190897425,0.017630123356,0.0,0.0451962163363,0.0,0.573043410244,0.012164563865,176470.767267,-1.83080877934,0.363773894398,0.690038435584,0.0211659310765,0.0188758444782,0.0,?,2.18920260063,3.7834,0.00962693624544,1000.0,0.0,1.12395419677,4.38233716601,0.39407635897,2.16304952714,0.181886947199,0.000643488002094,-1.72234639967,0.0909434735996,0.0587406751692,1.85113121742,0.197038179485,99.0,0.0188062999803,-0.979860781685,'GCVS:Pulsating:CEP' +-0.0779684296756,0.368719579593,0.859639776741,0.0,0.146371549209,-22.645607112,1.06277503871,4.8750860771,1.58666993745,0.425704737936,-2.49081796457,0.156688904381,-0.0145385354518,3.39834887661,99.0,0.366650207487,62.0,0.00130755497511,0.0,0.151377929986,0.00140821300118,-0.354851005568,5.29864774427,0.347318008125,0.0,-0.872461714715,0.0646650755146,0.101995706883,12.2573857896,0.0040836917396,0.69032671886,1.02862964001,0.203135355874,1.6316777336,0.00447213392675,0.630779255691,0.102552015098,0.0,0.0,-0.645445980592,0.10298575866,0.4566,2.70981503535,0.0926633131265,0.00470428409674,-0.0468006737294,10.50135,0.000342827070469,5.0,0.00465865948147,6.1286928948,0.000457658954177,0.00464425747601,0.018878317817,0.00342728498906,-0.742051967104,1.99590564613,10.9989054731,0.0169436214039,0.00510483938002,24.5147715792,0.183417718557,2.0683021014,0.0267868827834,0.00443660533799,10.7384,18.3860786844,?,9.99999335625,10.5183322581,0.0166759973532,0.756826708041,0.181847267602,0.00594130709583,0.212398626466,214.028889547,0.647090077638,0.0247515321078,1.10615873878,0.0564876181069,1.0,0.103900422432,0.282745039919,1.50958747711,6.70600858361,-1.66951584399,0.447368768728,0.354258346236,0.000966977764144,10.5217144808,0.0513575231123,461.587469555,0.0649365190521,2.73547875112,0.00877957803221,100.0,6.1286928948,2.49468666767,106.434657296,0.368719579593,0.0069457611438,0.0,0.790580588518,0.0,0.687189699557,0.00620125173301,28156.8356428,0.196310895143,1.41703338495,13.1297872989,0.0338437426218,0.533499341882,0.0,?,2.98576967949,10.2818,0.0217619766453,1000.0,0.0,0.582220564411,6.33945143181,1.47487831837,1.38009132802,0.708516692473,0.00443245325441,0.377627540904,0.354258346236,0.0559917167518,0.0577318884039,0.737439159186,99.0,0.018006097636,-1.51058775315,'GCVS:Pulsating:CEP' +-0.399209738688,0.0556651358283,0.742398603419,0.0,0.249923751333,-36.264798707,0.0411636510578,0.342901726561,0.0369376283121,2.7449492013,1.71037535728,12.683644705,3.08541160005,0.189200484124,4.0,0.613792049328,73.0,0.0261824010419,0.0731012210349,0.998760855805,0.482955701155,0.0032987403427,4.71903186623,-0.183770458133,0.0,-1.74848766697,5.99856574055,12.7591051156,0.0702714963494,0.00467890241674,10.3199677049,0.213180114451,29.4747547465,0.0705573376862,2.09970436521,-2.48523086178,0.265809444616,0.0,0.0,-1.80448640948,0.834692018786,0.8405,4.38317740468,0.0384970191159,0.00466900206385,0.802497139059,10.7095,0.0209724209336,1.0,2.27798536797,0.0351357481747,0.000457465368659,0.00605622427877,0.0384930476488,0.0692984226109,-1.6094768928,-4.24666219527,7.47988983019,0.0414051354046,2.14032441552,0.140542992699,0.259479020523,262.116410287,0.156460328185,0.00515601925418,11.1535,0.105407244524,?,9.99999335625,10.7382068493,0.0346902195639,74.3929640654,0.36503024875,0.0268425653006,0.0965116159956,226.255309459,0.576322872613,0.0512331203982,0.166995407485,0.0465520185912,9.0,0.133351797029,275.396472642,2.88648274452,6.70600858373,-0.885523561143,-1.64841169933,0.0137212170193,0.0133999276048,10.7014808108,0.551639717709,669.951528797,0.0679907222365,0.541839218467,0.0595498030267,100.0,0.0351357481747,3.81222637961,108.353791154,0.0556651358283,0.0135865085495,0.0,64.4275227978,0.0,0.612561007288,0.0326243819022,48236.5100734,-2.63854015328,0.054884868077,0.202496425879,0.0324522162075,33.574028711,0.0,?,-0.900438042563,10.313,0.0461116557728,1000.0,0.0,1.11307632135,0.726741611007,0.222660543313,-1.28753051243,0.0274424340385,1.99494486549,0.194283118789,0.0137212170193,0.102641879801,7.20253670093,0.111330271657,99.0,0.033017200518,0.413099820469,'GCVS:Pulsating:CEP' +-0.0345239329332,1.75379642634,16.7751818293,0.0,0.326586158814,-29.283104739,5.93277733078,1.08095136216,0.229946839055,0.0884836721353,-2.48082136393,0.0694466260499,-1.03669500002,1.36121209116,99.0,0.516486814655,59.0,0.00798061268099,0.0,0.626579725782,-0.251958181967,0.206002580638,2.85493421012,-0.0457922702876,0.0,1.52714252503,0.146469762904,0.0411861490321,0.872670222649,0.0102151930833,0.121678966737,0.84884872107,0.168519523036,0.202155745056,0.0106521413513,-1.76554446392,-0.227370706919,0.0,0.0,-0.965253410423,0.0716495081994,1.2221,1.5725645806,0.00648476983124,0.00974570342753,0.232553695861,12.166,0.00964202156065,4.0,0.0103984384121,0.436335111325,0.000602343700062,0.0104696398704,0.0847380575164,0.0512299728018,-0.943949146468,-14.0831717165,3.01125351716,0.0881827602321,0.0100019002495,1.7453404453,0.246794085033,0.893994544141,0.152217260563,0.0101118738382,12.8335,1.30900533397,?,9.99999335625,12.1597813559,0.0819572592036,0.200860307973,1.52900926915,0.050674308191,0.334317813476,340.442523829,-2.49753414035,0.0341651507163,5.26138927901,0.0638160214251,47.0,0.364781054163,0.0201279102383,2.67115129059,6.70510929334,-0.655541625332,-2.71184477557,1.97759244359,0.00975286413288,12.1249467156,0.502975228157,1511.44030403,0.146425058297,2.87776942946,0.0818412479842,100.0,0.436335111325,8.75551349872,270.03554866,1.75379642634,0.0131791221368,0.0,0.115059097461,0.0,2.55802439153,0.087491556747,87663.5376335,-0.036153791174,7.91036977437,1.04554217113,0.0276077057526,0.121171528557,0.0,?,-0.453598294686,11.6114,0.00491663168001,1000.0,0.0,3.10102513605,11.2960276234,7.01518570534,0.473635872015,3.95518488719,0.0105754991341,-0.25000895132,1.97759244359,0.242141619683,0.444603718451,3.50759285267,99.0,0.0848756730211,-0.197877677677,'GCVS:Pulsating:RR:RRAB' +0.0105048015568,0.645690676088,0.671675541373,0.0,0.266203179689,-33.9695129576,0.00790945954311,0.122353997181,0.139576418712,0.191350056727,-1.08590703276,0.0159916343448,-1.18709587813,0.245044778887,99.0,0.668952922771,67.0,0.0082514772265,0.0,0.0264454486359,0.0337747132745,0.343945897642,4.65007367422,-0.502729141368,0.0,-2.93512166934,0.0285799038763,0.012740570359,5.23797398616,0.0020050458767,87.3425712663,0.0327604209529,0.0271571916243,0.0409866422081,0.0019902615108,-1.12092794835,0.0343849050468,0.0,0.0,-1.97681385282,0.06760964065,0.7716,3.6541548818,-0.435508825394,0.00190774163925,-0.0411881230113,8.4017,0.0160458174324,4.0,0.00211709254196,2.61898699308,0.00045802535632,0.0020118740233,0.0454586286469,0.0465508788403,-0.546553568793,-3.09656411423,7.30626551193,0.0379046688344,0.00231095290328,10.4759479723,0.301911619593,0.290574747256,0.140169806781,0.00222217374203,8.6242,7.85696097925,?,8.28899229909,8.30900149254,0.0413222896294,0.0540022994198,0.967775651234,0.0400913984419,0.0588305050378,224.257162108,1.38458048645,0.0824808618448,1.93707202826,0.12108091608,41.0,0.144934364915,4.45592563896,2.55453650058,6.70555890834,-2.16363742933,-1.75994899485,0.00263648651437,0.0144357491513,8.28899229909,0.418672211053,620.660444677,0.0279217338934,-1.38347915758,0.0250241538987,100.0,2.61898699308,4.00059019561,108.140348723,0.645690676088,0.00251737298578,0.0,0.039270103299,0.0,0.485306681727,0.0513404943484,40963.5893487,-2.58934089386,0.0105459460575,0.118688965253,0.0320849482688,0.0767803838458,0.0,?,2.50707482764,7.8526,0.0756520073344,1000.0,0.0,1.38334420705,0.186959988615,2.58276270435,1.55354603105,0.00527297302874,0.00205705378583,-1.31523504841,0.00263648651437,0.127252988468,0.183906075865,1.29138135218,99.0,0.0408562793967,2.61653173306,'GCVS:Pulsating:CEP' +-0.417607404959,0.0853408349984,0.439598393494,0.0,0.229597959338,-6.14081747972,0.490721867205,0.0808635503383,0.0261424592873,5.85885994682,-1.95605326687,0.00470179444306,1.82901044946,0.135363597864,99.0,0.722889790575,74.0,0.00504718765042,0.0,0.024855220647,0.0,0.0,4.93250800219,0.0,0.0,-1.14259346675,0.00983924217948,1.0,1.88571154465,0.000651150555582,3.05672133289,0.127844417958,1.0,0.0476098612894,0.000708231477337,1.22040641703,0.452802822917,0.0,0.0,0.0,5.85885994682,0.765,4.23915530469,0.15878613618,0.000702159652429,0.0,4.81525,0.00985389055693,6.0,0.0006954666317,0.942855772324,0.000638935208852,0.000698967547412,0.0247431765259,0.0158218783074,0.0,-3.09165840485,9.47346301798,0.0274373565322,0.00101908152831,3.7714230893,0.236708407399,1.0,0.118642442137,0.00071204255129,5.2148,2.82856731697,?,4.79614111124,4.82496216216,0.0249864708343,0.180106410457,0.454891115012,0.00398687070436,1.0,1.0753807897,-0.392714086966,0.0337593555222,0.256022504995,1.0,17.0,0.111348013698,3.05672133289,1.33285697052,6.70600858377,-0.75093614001,1.90703492861,0.163573955735,0.00833239202101,4.79614111124,0.182992158291,2782.10710116,0.009758755551,2.85730918088,0.0318457986253,100.0,0.942855772324,1.0,270.073188166,0.0853408349984,0.0449993587613,0.0,0.0243336091291,0.0,0.788657119981,0.0295719843108,203093.818385,-0.865884827909,0.65429582294,0.0695873002331,0.100859130136,0.0218236816518,0.0,?,1.86011800097,4.4498,0.0632676818602,1000.0,0.0,0.281951525176,0.395207161897,0.341363339993,2.66053753994,0.32714791147,0.000676185938956,-2.65628983843,0.163573955735,0.088468566302,0.288210946701,0.170681669997,99.0,0.0238088632996,-2.81634934169,'GCVS:Pulsating:CEP' +-0.346004209335,2.66950727783,1.4557368333,0.0,0.377881350764,-68.567579325,4.17832917595,0.244100642724,0.0884604948844,0.0589165335621,-3.06672434859,0.0307900195028,-2.40823307598,0.149220083792,99.0,0.662009103524,89.0,0.0388793550822,0.0,0.0511608517256,0.2373448462,-0.492317136062,3.49705613727,-0.354949448947,0.0,-1.97243438331,0.0817870729686,0.109630230797,3.54190933548,0.00578693427001,0.314041655494,0.586673412603,0.141266849911,0.0926037522946,0.0055502163719,-2.76413039244,0.45307206226,0.0,0.0,-1.47283324987,0.0288775956165,1.4464,1.95817033675,-0.725641083321,0.00596477384659,-0.444872929649,11.5869,0.0109503043734,3.0,0.00591806125095,1.77095466774,0.000549849825016,0.00551053312241,0.0680958428821,0.0621827755531,-2.21644283742,-17.7853288854,4.37313871756,0.0658435391505,0.00611144851247,7.08381867095,0.275235425546,0.260620777331,0.177883116716,0.00564900428838,11.9757,5.31286400321,?,9.99999335625,11.4616505618,0.0629377303859,0.0628353152106,1.7687351643,0.0898249344546,0.30009528059,256.922642136,1.20215140784,0.064541817475,8.00852183348,0.0979463296741,43.0,0.239728320933,0.0456371502031,1.8117661647,6.70421024404,-0.144930418556,3.10487177193,1.39277639198,0.024279912835,11.4191211971,1.01744814264,1471.33225179,0.0818694184247,1.58822527671,0.0266268376588,3.8,1.77095466774,5.03278440314,119.771751758,2.66950727783,0.0173812644619,0.0,0.058958018677,0.0,0.95610077929,0.101350245574,129477.238157,-2.69908473475,5.57110556794,0.554264026362,0.0777649713895,0.227026823895,0.0,?,-0.896285326779,10.5293,0.0434660046691,294.158,0.0,0.786951983421,2.4428580116,10.6780291113,0.144457841333,2.78555278397,0.00558100803174,0.863267365333,1.39277639198,0.182285270457,0.129693879068,5.33901455566,99.0,0.0688735006405,-1.64405162259,'GCVS:Pulsating:RR:RRAB' +0.304064312064,0.235178350641,0.501218076274,0.0,0.187754666898,-39.1142675884,0.329923990172,0.574116523467,0.465230306957,2.12604603543,2.03620118554,0.0479949173891,-1.69184800812,1.12345719463,99.0,0.570407281848,129.0,0.0022515678654,0.0,0.155453729829,0.0,0.0,7.65361991743,0.0,0.0,2.17364441853,0.0367372379676,1.0,3.72844973068,0.00248983680898,4.54650175399,0.670634071285,1.0,0.302377660659,0.00256415434971,-0.670272783345,-0.0656474042794,0.0,0.0,0.0,2.12604603543,0.6556,5.55567105635,-0.350782468929,0.00267160753819,0.0,9.9031,0.00581805363794,3.0,0.00254997661265,1.86422486534,0.000458209430449,0.003169675188,0.0157116774986,0.00901678940231,0.0,-5.37959221899,15.8427752588,0.0130452749391,0.00258849752439,7.45689946137,0.224401530747,1.0,0.0545969810315,0.00258977059034,10.1622,5.59267459603,?,9.84852899998,9.87018837209,0.0141642816414,0.111566020524,0.447666269666,0.0239263450911,1.0,228.942902536,-2.70000755659,0.0117709824048,0.705535051924,1.0,98.0,0.0670429115302,4.54650175399,1.05234436653,6.70600858373,-1.89198643767,2.89240707146,0.109974663391,0.00454566839532,9.84852899998,0.206293172092,84.3386104953,0.036570660005,-0.693888304193,0.0173524659104,100.0,1.86422486534,1.0,109.086629963,0.235178350641,0.0215477034583,0.0,0.253235179553,0.0,1.148521148,0.00976933297955,10795.3421434,0.418563188693,0.439898653562,0.387175861939,0.105480062854,0.15131565893,0.0,?,-2.23590340802,9.5066,0.0331536393314,1000.0,0.0,0.13044950612,1.90213649694,0.940713402565,0.0720744880403,0.219949326781,0.00273372848513,-1.08366471642,0.109974663391,0.0425397387164,0.196257580782,0.470356701282,99.0,0.0153094681674,-0.321270624873,'GCVS:Pulsating:CEP' +0.0,0.0798585196957,0.304890292665,0.0,0.205701328288,-36.7654357565,0.619539613847,0.210357948994,1.0,2.42273034496,0.957627252043,0.0248782401216,-0.523857062812,0.341998119536,99.0,0.682027368365,90.0,0.00973270827515,0.0,10.1189104551,0.0881625249149,0.0141963809689,5.65699275305,0.517563131323,0.0,-2.01412265798,0.0408200006624,0.0672362113716,0.0988248689858,0.00298016111396,0.812764008456,1.0,0.494993922113,0.145002897321,0.00290013735759,-1.8168196511,0.0,0.0,0.0,-1.17667368532,0.693914014959,0.7115,4.95168501821,0.527579050716,0.00276992772578,-0.651888738343,9.6518,0.00135490247724,10.0,0.00270367809367,0.0494124344929,0.000458255264203,0.00283056707053,0.024503859865,0.0192261209622,-0.457046178509,-4.30323105827,9.27648715037,0.0250215220323,0.00363857023375,0.197649737972,0.199742834115,2.38450405583,0.0993229814188,0.00289053531624,10.0956,0.148237303479,?,9.67299802468,9.68364888889,0.0215321630782,0.146693526892,0.442717764169,0.0210910951009,0.753549042983,226.824906958,1.16820532402,0.0254916913883,0.239575559087,0.0259800878119,56.0,0.141605147857,0.208564265676,2.13024529071,6.70600858377,0.0,0.930910647134,0.206513204616,0.0136855726482,9.67299802468,0.143809985126,110.884927953,0.0408842750441,-0.76769158627,0.0132056148996,100.0,0.0494124344929,2.93490090315,108.695001303,0.0798585196957,0.0268903067858,0.0,0.392148373861,0.0,0.950000617708,0.00741457908218,9868.75858779,-1.19059918676,0.826052818463,2.22010277275,0.0545012609491,0.216641701604,0.0,?,2.77847164018,9.3841,0.0800247992924,1000.0,0.0,0.463039589129,1.0,0.319434078783,-1.65080626565,0.413026409232,0.00295973249413,0.605774183245,0.206513204616,0.111233787422,10.1189104551,0.159717039391,99.0,0.0233704640972,1.64406805543,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.283694990284,-35.6763940925,?,?,?,?,?,?,?,?,?,?,174.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.549849943471,?,?,9.91045,?,?,?,?,?,?,?,?,?,-44.2050544415,?,?,?,?,?,?,?,?,?,?,9.46163307787,9.77813493801,9.81517988506,?,?,?,?,?,208.74025203,?,?,?,?,66.0,?,?,?,?,?,?,?,?,9.77813493801,?,172.370997255,?,?,?,100.0,?,?,54.7232410665,?,0.029479858328,0.0,?,0.0,?,?,29820.1825252,?,?,?,?,?,0.0,172.327321161,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.310873742304,-68.3963763283,?,?,?,?,?,?,?,?,?,?,92.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.842249660466,?,?,11.63865,?,?,?,?,?,?,?,?,?,-46.9161759511,?,?,?,?,?,?,?,?,?,?,5.60591536189,9.99999335625,11.581675,?,?,?,?,?,259.344856496,?,?,?,?,19.0,?,?,?,?,?,?,?,?,11.5659390709,?,1391.03735637,?,?,?,43.8,?,?,32.9543152929,?,0.0181240994879,0.0,?,0.0,?,?,126584.39943,?,?,?,?,?,0.0,91.5496298969,?,?,?,12.264,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.297789053254,-39.2721629177,?,?,?,?,?,?,?,?,?,?,108.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.894840386172,?,?,11.81695,?,?,?,?,?,?,?,?,?,-45.4737647678,?,?,?,?,?,?,?,?,?,?,4.1709418821,9.99999335625,11.6905064815,?,?,?,?,?,213.632468341,?,?,?,?,33.0,?,?,?,?,?,?,?,?,11.6664970374,?,1380.53037293,?,?,?,100.0,?,?,53.662180156,?,0.0101753096215,0.0,?,0.0,?,?,147716.749904,?,?,?,?,?,0.0,106.844380318,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.132399874066,0.0455631790864,1.35834618814,0.0,0.206497128735,79.8747800792,7.10684273969,0.71263758876,0.0943396697452,10.9737733412,0.702500746977,0.0561131751533,-2.83990606185,0.675099640473,99.0,0.459140470469,80.0,0.00960050211355,0.0,0.0207729700205,0.8854842442,0.0,3.12798812482,0.0,0.0,0.410155551626,0.093668612852,0.0829574434319,8.21323029243,0.00681780334084,0.0789835444916,0.22924903774,1.20357868433,0.179032826171,0.00653715087997,-0.0392063537833,-0.10266673061,0.0,0.0,0.0,10.9737733412,0.7769,3.1339569178,-0.200441215053,0.00673890559915,-0.533347250005,11.71425,0.0182368123816,2.0,0.00668192839774,4.10661514622,0.000435092602717,0.0069326270237,0.0361002269805,0.0362682245091,0.434949816513,29.2427310646,4.20944087111,0.0361648025515,0.00659582806039,16.4264605849,0.140720920878,4.90099710951,0.117914515658,0.00649729445302,12.0455,12.3198454386,?,9.99999335625,11.69070125,0.0334298366902,0.247808310191,0.783236274211,0.0263589317312,1.0,108.007092844,-0.0119309459348,0.0888977167763,0.136689537259,1.0,64.0,0.278561968335,0.0409147616058,1.88377470405,6.704210244,-0.863171819859,0.65908749533,2.3689475799,0.00945803649607,11.6738111592,0.579320521512,1649.74769569,0.0934837445079,3.25300997284,0.0701319834623,100.0,4.10661514622,1.0,89.6874008948,0.0455631790864,0.0103374027358,0.0,0.153851496086,0.0,0.402204866759,0.0417424658961,130330.06796,1.2565586482,9.47579031959,0.346597469029,0.0310564805336,0.0952901525344,0.0,?,2.55393828293,11.2686,0.0264521260199,1000.0,0.0,1.12786531643,1.617050911,0.182252716346,-2.71130993155,4.73789515979,0.0068623538378,-2.98632114174,2.3689475799,0.100657175591,0.0615003222806,0.0911263581729,99.0,0.0368834218398,-1.08013463598,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.396801689607,-41.0083273863,?,?,?,?,?,?,?,?,?,?,109.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.900460694044,?,?,10.9832,?,?,?,?,?,?,?,?,?,-45.9987654177,?,?,?,?,?,?,?,?,?,?,8.14637404891,9.99999335625,10.7518880734,?,?,?,?,?,216.075560882,?,?,?,?,3.0,?,?,?,?,?,?,?,?,10.6989521736,?,678.174105228,?,?,?,100.0,?,?,53.1248260631,?,0.0528172180797,0.0,?,0.0,?,?,73242.8033646,?,?,?,?,?,0.0,106.704403088,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:RR:RRAB' +0.891274496067,2.22961885411,3.26600305004,0.0,0.386004088279,35.7913877401,7.17423597245,0.290587678732,0.134809998772,0.0501704965762,-1.7373655897,0.0333325040431,-0.262019110751,0.227460684813,99.0,0.807414712324,103.0,0.039147532502,0.0,3.70921886154,0.000942937753182,-0.63128557162,3.638489448,0.0976266481236,0.0,2.27937333172,0.120277667375,0.0208708811029,0.0686867433267,0.0121809553972,0.099961187835,1.7576303652,0.052499799388,0.0655431037637,0.00876099895918,-0.754289973803,-1.16985335708,0.0,0.0,6.1169795687,0.0607950777286,1.3746,4.34132272381,-0.298669994737,0.00832317931581,-0.100279390602,12.5552,0.0146807413824,2.0,0.00853382879854,0.0343433716634,0.000455262028701,0.00915876295306,0.060473471618,0.111647898864,-0.880232368003,16.6940032692,4.72599608207,0.0548488959463,0.0088484703799,0.137373486653,0.290957999292,0.455043725386,0.247824639503,0.00939276947641,13.0811,0.10303011499,?,9.99999335625,12.4591029126,0.0615654338765,0.540284947813,1.56089314103,0.0157438124435,0.173600692183,38.5150426477,-1.85370432777,0.135080739201,6.68885656234,0.0480022182832,99.0,0.186827728721,0.00855909087271,2.00955900494,6.70376080983,1.01548684176,2.35971165694,2.39141199082,0.0270316620392,12.3840791046,1.05736965537,1575.36475987,0.120968041547,-0.334315128871,0.124542302647,100.0,0.0343433716634,4.52292759351,270.307266024,2.22961885411,0.0067916838788,0.0,0.297119007155,0.0,0.408505264716,0.0279221711408,160687.205506,2.94184867819,9.56564796327,0.545074962164,0.0676349907468,0.0665996448551,0.0,?,0.253025386001,11.7065,0.0186216019166,1000.0,0.0,0.868021040956,4.48603000942,8.91847541645,-0.481786075019,4.78282398164,0.00884857718109,2.79726734924,2.39141199082,0.166672391787,6.79654759284,4.45923770822,99.0,0.0563292952316,-1.06489061623,'GCVS:Pulsating:RR:RRAB' +-0.256168121532,0.149388030675,1.21259834486,0.0,0.297037480738,-42.5198459312,0.101862454375,0.502165162627,0.278821625186,3.34698836139,-2.68808604673,0.043132963982,-3.07853584635,0.76169359973,99.0,0.725690454391,83.0,0.00796410836424,0.0,0.201923039628,0.519268163205,0.0,5.21943530708,0.0,0.0,2.31611307248,0.0936906993288,0.039631297795,2.81303465883,0.0065780449828,6.93369882845,1.38853288957,0.262607187124,0.351609235821,0.006092824755,2.09702472099,0.00755207480036,0.0,0.0,0.0,3.34698836139,0.8987,4.16780905274,-0.0436992245421,0.00772802134133,-0.366719043544,11.619,0.00851700960352,4.0,0.0070633795802,1.40651732942,0.000458657447823,0.00655032623985,0.0396509250793,0.0187339384841,-0.386264550042,-6.78483249754,8.0413999591,0.0408690936716,0.00695890365997,5.62606931767,0.274580817185,1.02507345244,0.145246107392,0.00670803970512,12.0364,4.21955198825,?,9.99999335625,11.5646939759,0.0341458973042,0.118219505445,0.977050175141,0.0523206525238,1.0,232.129548948,0.186318326619,0.108628953311,0.448164092025,1.0,63.0,0.173639944199,1.19455298634,0.659958263861,6.70421024408,-0.503280983938,-0.423440810928,0.0339541514584,0.0128708204751,11.5255896101,0.363827269042,1358.7767998,0.0930140220586,-0.567749262511,0.0287895136831,100.0,1.40651732942,1.0,109.940208191,0.149388030675,0.0347617758441,0.0,0.760016724173,0.0,0.343199879207,0.00807625589119,111419.697584,-1.2787257811,0.135816605834,0.777317691724,0.0735913577179,0.250555103073,0.0,?,3.10483263411,11.1377,0.0301346611307,1000.0,0.0,0.500124710077,7.01815624439,0.5975521227,-1.99146494012,0.0679083029168,0.00714199023432,-1.78806429634,0.0339541514584,0.110799319154,0.166214834191,0.29877606135,99.0,0.0469750254647,0.733723325706,'GCVS:Pulsating:CEP' +0.345776068088,0.0384995196206,0.14653908374,0.0,0.437939346771,-43.2695989237,1.2355977712,0.34575622783,0.137666522137,12.987175033,-2.91408330673,0.0441490537333,2.09250146345,0.326263966871,99.0,1.54925807369,102.0,0.00645905593407,0.0,0.134102858135,0.388887877617,0.0,6.2482119217,0.0,0.0,1.29383527996,0.0288381220512,0.0295522101876,2.12997588059,0.00215130697781,0.592933344289,0.934481098742,0.166595759535,0.147483394407,0.00204150320032,-0.130250883334,-0.187465145088,0.0,0.0,0.0,12.987175033,1.3439,3.75352282643,0.168034484976,0.00196771505203,-0.33139177306,8.6242,0.00642827259573,12.0,0.00203448873275,1.0649879403,0.000458657456238,0.0020183050372,0.0257213881309,0.0132282661452,-0.873935488754,-7.10945131329,15.6552434283,0.0333379592272,0.00226818382775,4.25995176118,0.462894763955,0.676450746582,0.0433832963693,0.00200855335195,9.3453,3.19496382089,?,8.62860458692,8.66490588235,0.0295680336159,0.105418530945,0.357178246495,0.019465631369,1.0,232.822015205,-2.26843830357,0.0701921034304,0.115498558862,1.0,16.0,0.0708939766121,0.0736170469555,2.37106074391,6.70600858369,-0.309801441197,-2.14145384892,0.411865923733,0.00595861361094,8.62860458692,0.203880325132,878.960446196,0.0288463203655,-1.43963295426,0.00785445543532,100.0,1.0649879403,1.0,110.111467685,0.0384995196206,0.0385083980912,0.0,0.0943590528788,0.0,0.644882645172,0.0194669316655,88775.0050658,-0.477386107401,1.64746369493,0.320668788546,0.255783851768,0.257974903955,0.0,?,-1.5823942228,8.0014,0.201635877934,1000.0,0.0,0.117040933815,3.91758026305,0.153998078482,-2.59117374266,0.823731847465,0.0023122510341,2.05723552087,0.411865923733,0.163165248606,0.21443646534,0.0769990392412,99.0,0.0321630649855,-3.05630918962,'GCVS:Pulsating:CEP' +0.0586621251216,0.179011874597,0.968837248806,0.0,0.250335322301,4.57887332778,0.00860455275693,0.091863144802,0.024334836464,0.871632157822,-0.0079822376515,0.00317733796447,-2.71394613589,0.0758852932267,99.0,0.65000823759,65.0,0.0105167376755,0.0,0.0280074434035,0.0,-0.152797548347,5.11374968785,-0.0271265514522,0.0,-2.15701605986,0.0125786771176,1.0,1.88581585787,0.000842278074249,174.326317982,0.0756407697045,1.0,0.0236926207011,0.000856468758636,1.22512685754,-0.121365998297,0.0,0.0,-0.346529982855,0.252409615021,0.7472,3.98472276505,-0.0864634620687,0.000901976637511,0.0,5.8484,0.0100472005895,4.0,0.000937525026984,0.942907928936,0.000463947674719,0.000858694294178,0.0359386155323,0.0362089640716,0.0,2.00181918417,8.78137894939,0.0363487854228,0.00171458335368,3.77163171574,0.306322411062,1.0,0.203639565087,0.000892911829825,6.2466,2.82872378681,?,5.84661028963,5.86617846154,0.0348831786929,0.0418006196707,0.597022345586,0.0220458176237,0.0214487046676,10.514932907,2.70729925427,0.0441570086279,0.537035623792,0.00661268262369,4.0,0.117751912036,174.326317982,3.18979465385,6.70600858377,-0.348235137791,1.11523208441,0.00286818425231,0.00885581158088,5.84661028963,0.258580863133,2764.64071284,0.0119897791574,-2.93483160556,0.033041138838,100.0,0.942907928936,3.1272392313,270.338330939,0.179011874597,0.0229755793577,0.0,0.04073087623,0.0,0.800289403661,0.0298506002739,176937.005622,-1.61755250628,0.0114727370092,0.0835925392521,0.0624465375968,0.0283982575864,0.0,?,1.04817165151,5.4994,0.0357488498767,1000.0,0.0,0.553365380709,0.852237877662,0.71604749839,-0.491994417369,0.00573636850462,0.000755120465376,2.66375556525,0.00286818425231,0.10270067115,0.223530770652,0.358023749195,99.0,0.0384211142315,0.40200494366,'GCVS:Pulsating:CEP' +0.729895957093,0.0812380400155,0.740445807725,0.0,0.315581546553,56.3975904906,0.0472163662646,0.444276168244,0.1977073535,2.30337753637,2.35419951338,0.0432491916857,-1.28575336838,0.291254135924,99.0,0.595555489279,91.0,0.0282401526235,0.0,1.08457289432,0.0,0.187931617446,2.99831197796,0.45268800611,0.0,2.81356011677,0.102880044702,1.0,0.12778473434,0.00754172869964,31.7686454649,1.76221711701,1.0,0.0701140802587,0.00841645766262,-2.29113553548,1.28063221936,0.0,0.0,-1.21931999555,1.1402733464,1.1857,2.27054960882,-0.38618740765,0.00656686104781,0.0,12.0396,0.0586211155476,4.0,0.00753919150959,0.0638923671698,0.000433172326356,0.00756587871712,0.0606309171903,0.097909825417,0.0,24.171818758,3.37438005411,0.0822388538754,0.00744293206435,0.255569468679,0.207751727818,1.0,0.162923759476,0.00760897582565,12.5385,0.191677101509,?,9.99999335625,11.9779945055,0.0615673766697,0.108544272468,1.85714247496,0.0650425545892,1.03371912339,59.0409428044,2.81899290833,0.0418028119388,0.243714120047,0.0393487457825,1.0,0.311229929669,31.7686454649,1.66218885538,6.70600858361,-4.86822753344,2.17104679966,0.0157387887549,0.0154183761732,11.93017179,1.4079304135,1650.88031725,0.102445532967,1.26594732744,0.0526615429265,100.0,0.0638923671698,4.66750768248,270.571918031,0.0812380400155,0.0362124074383,0.0,0.318692802892,0.0,1.58079393555,0.0223464293792,148579.228552,-2.69351292767,0.0629551550195,0.117354607275,0.0306064387313,0.123008214164,0.0,?,2.94557239871,11.3528,0.0775251229921,1000.0,0.0,2.13833031247,5.49318493045,0.324952160062,-0.948000266028,0.0314775775098,0.00739883233215,1.27952305157,0.0157387887549,0.188885729979,3.17003440962,0.162476080031,99.0,0.0608860376344,-1.85387870922,'GCVS:Pulsating:RR:RRAB' +0.147944559928,1.65334283653,1.66294521854,0.0,0.375277478982,-1.17622920358,8.77090715793,0.346560218205,0.0899098815756,0.0762561325006,-2.84214211866,0.0226564041327,-1.24223999941,2.8005387035,99.0,0.747947331095,66.0,0.00147326215619,0.0,2.02073168541,-0.113018161476,1.26945460298,3.21317485931,0.46675241925,0.0,-0.113812000951,0.0648079298698,0.0159288168668,0.0675930688072,0.00481729574932,0.0789010787904,1.18755882597,0.0572753149116,0.0944287627496,0.00435285499447,1.69315636946,-0.898239409108,0.0,0.0,0.274909194522,0.044388102637,1.354,2.67489150345,-0.909506606278,0.00521992405078,0.16431268113,10.65885,0.0114054055123,4.0,0.00441297331998,0.0337965344036,0.000463078762668,0.00558295942082,0.0702995719091,0.0472003040781,-0.897565462553,-12.8532020082,4.1514160274,0.0791562074375,0.0044615773263,0.135186137614,0.314349705053,0.396093309751,0.207391151342,0.00397731139745,10.9961,0.101389603211,?,9.99999335625,10.52635,0.075721079983,0.0521878003331,1.67641594494,0.0936988383619,0.126632416801,12.4957722875,-1.64652090061,0.0517266682178,4.9600285096,0.183168311463,63.0,0.247768633552,0.00541435326308,1.13716430105,6.7051092933,-4.63185166935,-3.03340001709,2.92363571931,0.0160779981325,10.4980585514,0.61571002927,578.349490535,0.0646207344108,2.25791787329,0.103910346744,3.9,0.0337965344036,6.68580663429,284.185649112,1.65334283653,0.0260083943193,0.0,0.191225037124,0.0,1.62781947357,0.0262372710006,37592.7168848,-0.467079612962,11.6945428772,0.381704282681,0.145202229599,0.0466034575388,0.0,?,-2.48627563785,9.6421,0.0443171523411,269.412,0.0,0.489368099393,11.3347308218,6.61337134613,-2.64849502559,5.84727143862,0.00425840734163,-2.69587588215,2.92363571931,0.219642222367,5.13899638117,3.30668567306,99.0,0.0828267307313,0.0719689584301,'GCVS:Pulsating:RR:RRAB' +?,?,?,0.0,0.205167908675,17.141083463,?,?,?,?,?,?,?,?,?,?,81.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,0.408135143518,?,?,7.6586,?,?,?,?,?,?,?,?,?,-1.47133335573,?,?,?,?,?,?,?,?,?,?,130.361100248,7.71196172292,7.74067777778,?,?,?,?,?,165.620852896,?,?,?,?,72.0,?,?,?,?,?,?,?,?,7.71196172292,?,480.719405344,?,?,?,100.0,?,?,78.0363734482,?,0.0133605377886,0.0,?,0.0,?,?,38457.5524275,?,?,?,?,?,0.0,81.8680829394,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.0,0.112162216983,0.931996957736,0.0,0.224128303268,-48.1555204567,0.196065960509,0.206603938466,1.0,1.27510806812,2.11447987306,0.024759486096,3.07335975808,0.501594823348,99.0,0.613928148408,182.0,0.00365050276517,0.0,0.751494098647,-0.12091926139,-1.36886391902,9.09716079804,-0.378414048354,0.0,-1.66053911237,0.0266371612882,0.0255489294026,1.33068243889,0.00201985788925,3.1356994004,1.0,0.408113926555,0.0974979323074,0.00188618334207,-1.91904927514,0.0,0.0,0.0,-2.06559122925,0.165201345805,0.7678,6.58636096921,0.213729400456,0.00192984314702,0.599027307583,9.1711,0.00730686117541,4.0,0.00182037586105,0.665341219446,0.000435545047344,0.00189836558954,0.0179402533672,0.0181186505918,-0.448434324884,-9.1677412365,15.8194201851,0.0156847306931,0.00180496313994,2.66136487778,0.25890103812,1.35988924258,0.0794481690981,0.00185930090657,9.6172,1.99602365834,?,9.16113914436,9.18385054945,0.0163660257513,0.0545593696268,0.449816766441,0.0357840783795,0.0632550084079,237.390386061,0.356238979344,0.0309048043026,0.33648665095,0.0444177540029,56.0,0.0657731499623,0.478745532679,2.81345436183,6.70600858377,0.0,-2.354707752,0.0653553201697,0.00920539587713,9.16113914436,0.211453078732,157.158531238,0.0265057450206,1.49371890285,0.036689736645,100.0,0.665341219446,1.76128277525,111.404830979,0.112162216983,0.0717481545929,0.0,0.0778829777911,0.0,0.50469141462,0.0263211802986,28445.694154,-2.23317426992,0.261421280679,0.254919640249,0.10537268523,0.0510091032843,0.0,?,-2.91139910213,8.8494,0.0191794979226,1000.0,0.0,0.146157978582,1.0,0.448648867933,0.163573427351,0.130710640339,0.00177433757452,-1.22932121964,0.0653553201697,0.0488959282033,0.751494098647,0.224324433966,99.0,0.0183780846554,0.5336897323,'GCVS:Pulsating:CEP' +-0.0244232908665,1.39363645725,1.03620070779,0.0,0.236541290825,-35.5082648168,4.85796612915,2.0501148935,0.0684892046214,0.13625747588,-2.92780754227,0.0399029048711,1.4393940435,0.607746727937,99.0,0.430067566607,111.0,0.00904637459547,0.0,0.0114019450248,-0.272562728803,-0.00598297513386,3.93565795841,-0.116816062827,0.0,0.387201360649,0.0770854928942,0.048296477644,8.46328738502,0.00541412947697,0.121382140696,0.0535810786339,0.169901783581,0.131232395636,0.0052793624548,-1.08002018576,0.053421635774,0.0,0.0,-0.643469082147,0.0477672642589,0.8917,3.19217606208,-0.199034276217,0.00546641795306,0.0240891019847,11.5019,0.0196739394195,4.0,0.00552710109932,4.23164369251,0.000460615317578,0.00529660766975,0.0422712771563,0.042293911876,-0.334527984678,-3.42170249742,4.23352046321,0.038763072026,0.00578882864348,16.92657477,0.175877196837,2.23075426158,0.133606073131,0.00580316424184,11.9056,12.6949310775,?,9.99999335625,11.4716027027,0.0415439581232,0.379978424781,0.964044801882,0.0143570849896,0.233491966114,225.903582894,-0.830762955721,0.0190043903177,4.18090937176,0.0333958575932,47.0,0.219990893756,0.0346867628559,2.18872079486,6.70510929334,-1.45905637939,1.25266929937,1.61932204305,0.00254112848473,11.4559492587,0.537531899438,1317.61914803,0.0770766316667,-0.568657207407,0.0273493989723,100.0,4.23164369251,2.95074077606,108.947511894,1.39363645725,0.0158939070528,0.0,0.13263555361,0.0,2.0519066419,0.0407303683416,144938.106283,0.35520341106,6.4772881722,0.288771738572,0.00858076887072,0.211540433486,0.0,?,3.0263203907,11.0139,0.0396338017195,1000.0,0.0,4.67460797305,0.432912069729,5.57454582902,-1.10439190971,3.2386440861,0.00555883163536,-0.296833058109,1.61932204305,0.11416707526,0.0762650594908,2.78727291451,99.0,0.0395693703679,1.63751738225,'GCVS:Pulsating:RR:RRAB' +0.0,0.134361221513,0.266099039363,0.0,0.162077222643,17.3403761233,1.07413221042,0.505684807615,1.0,1.39903246355,0.783460480888,0.0909338071448,-2.28999320518,1.12608641425,99.0,0.472498028288,68.0,0.00475191166896,0.0,12.8614366015,-2.07759450044,0.280277883972,4.69699825743,-0.605913972269,0.0,2.37213200229,0.0714654602376,1.16019521052,0.0777518119465,0.00595259244781,1.82824812174,1.0,4.16175602238,0.324948489485,0.00556280102095,-0.371034123639,0.0,0.0,0.0,-0.338395914895,0.241567870083,0.5667,4.01696862749,-0.0248174022795,0.00517982876187,2.63743888723,10.7071,0.00352107457194,4.0,0.00506870102237,0.0388759059732,0.00046757963648,0.00581551676663,0.0202238772448,0.0145979911732,0.334429119902,7.94468343742,8.57849339838,0.0197033534254,0.00501331165581,0.155503623893,0.188604460565,4.69341682007,0.0582027387715,0.00557099936938,10.9978,0.11662771792,?,9.99999335625,10.7016044118,0.0219857324365,0.336354967856,0.426620650242,0.0150598683977,0.43685804941,21.8621962462,-2.22971594383,0.0192980032324,0.403083664539,0.035259163272,66.0,0.106364562071,3.60070322494,1.9328567523,6.70780788842,0.0,3.12812450472,0.358044070139,0.00918058153824,10.680689119,0.146865516032,574.907159238,0.0719614438923,-2.25370738825,0.0097586242084,100.0,0.0388759059732,1.63694098337,270.712012841,0.134361221513,0.0317954152807,0.0,1.1589919156,0.0,1.11274708366,0.0046498349089,38518.779669,-0.19701583937,1.43217628056,1.35913853078,0.0223688290985,0.486470647055,0.0,?,-1.84465241938,10.4311,0.0861977056578,1000.0,0.0,0.904230560975,1.0,0.537444886051,-3.13226377252,0.716088140278,0.00491104676421,-0.905121311594,0.358044070139,0.0577886968576,12.8614366015,0.268722443026,99.0,0.0214852586125,-1.69703331324,'GCVS:Pulsating:CEP' +0.0250638519724,0.0507145176992,0.608699489168,0.0,0.293627526199,19.3268338902,0.054809311115,1.28512730575,0.143982748222,2.86704858124,2.11297760831,0.0916191340582,0.158298509408,0.911432542123,99.0,1.02535038021,79.0,0.00341947063519,0.0,0.0190708824771,0.0,1.10359965097,6.22721362343,0.661354048044,0.0,-2.73865073403,0.0426153010202,1.0,13.14707448,0.00301360466902,27.3676127192,0.198899780994,1.0,0.499334299944,0.00311611594144,2.13782645639,-0.00251198991,0.0,0.0,-2.46673083204,0.343281246353,1.0924,4.12053482864,-0.344465852369,0.00286396301498,0.0,9.5417,0.00308440561515,5.0,0.00314140264564,6.57353724001,0.000463836947732,0.00291283058777,0.0240339801414,0.00590623432251,0.0,8.87666181008,16.5825359494,0.0235780931114,0.00403243271862,26.2941489601,0.456256649812,1.0,0.0278092069257,0.00299864278594,10.0175,19.72061172,?,9.53079913315,9.56162911392,0.0275142867896,0.163224448259,0.168678585486,0.018746567253,0.127212361898,23.6357380934,-1.32395505346,0.0181240776657,0.152143553098,0.062330006448,12.0,0.0471118562053,27.3676127192,0.497283034723,6.70645831931,-1.0337415566,-1.00803661489,0.0182697703717,0.00230815171891,9.53079913315,0.072022900376,254.543429258,0.0421167256174,2.45575243445,0.00723472709539,100.0,6.57353724001,1.37546793846,270.738835212,0.0507145176992,0.00979163041125,0.0,0.450693747333,0.0,1.31699961684,0.00898510271837,19854.3874821,-3.09597232366,0.0730790814867,0.988698766176,0.125439306896,0.401584289678,0.0,?,-0.228128929479,8.9251,0.0399480462259,1000.0,0.0,0.183769140532,1.96924621958,0.202858070797,1.07067439797,0.0365395407433,0.00260083006032,1.686396987,0.0182697703717,0.0774673303831,0.0407358717083,0.101429035398,99.0,0.0254051552602,-0.84883020813,'GCVS:Pulsating:CEP' +0.0,0.0906177237476,0.411291980409,0.0,0.254084252351,19.1439976543,0.0826125804425,0.629165591591,1.0,1.91686688049,0.850100109162,0.0451607808306,2.25744932021,3.15209901516,99.0,0.680556067696,78.0,0.00167915747127,0.0,0.331330299252,0.299073689488,-0.01556507007,5.91402231039,0.486228690517,0.0,-1.489333931,0.0782124404083,0.0695051064212,3.01813628955,0.00549182250725,7.02437274973,1.0,0.99843173837,0.426147768716,0.00525808341597,-2.93127391559,0.0,0.0,0.0,-0.435843103076,0.32173467653,0.9211,3.46423879487,-0.589902146374,0.00575131584037,0.598654810363,11.12295,0.0052933595199,3.0,0.00529537147354,1.50906814478,0.000463836943429,0.00495727259621,0.0289185071079,0.0129604745009,-2.01127110109,8.78716949391,11.2702285386,0.0290918895579,0.00757554044826,6.03627257911,0.3130457734,3.58868790975,0.104842628793,0.00549750260957,11.4087,4.52720443433,?,9.99999335625,11.0626846154,0.0277763465334,0.218289324753,0.458213068684,0.0263473881918,0.294415564516,23.4743716456,0.0904995245366,0.00454553939803,0.271853171243,0.0325132754173,67.0,0.0978710590013,2.31620982994,0.324460828717,6.70510929338,0.0,-0.0669832921865,0.0275375268142,0.00879614779309,11.0587704067,0.181627945081,1016.77259781,0.0781158724425,0.621531888858,0.0266618427828,100.0,1.50906814478,1.60354005381,270.741222231,0.0906177237476,0.0133208895635,0.0,0.320840642275,0.0,6.31400808444,0.0199379213893,78291.4900315,-0.192772513349,0.110150107257,1.19018894162,0.0538509200668,0.226667894349,0.0,?,2.86837921819,10.4876,0.069391376444,1000.0,0.0,0.512531353423,1.0,0.36247089499,-1.49313394797,0.0550750536283,0.00490917366978,-2.0575658872,0.0275375268142,0.0814733393601,0.331330299252,0.181235447495,99.0,0.0307035141287,-1.38154586462,'GCVS:Pulsating:CEP' +0.0,0.107597908875,0.352253994322,0.0,0.186452816647,18.0966270977,0.225159257415,0.999570932337,1.0,4.64693045828,-2.57884832998,0.0641889235986,0.910987420224,2.05254651431,99.0,0.55147001623,78.0,0.00293281292145,0.0,0.0986683310606,0.0,0.0,4.90714508851,0.0,0.0,2.44853965562,0.0839827746837,1.0,10.1349641699,0.00603186962581,6.66195126605,1.0,1.0,0.609892963485,0.00640319081112,2.90846512102,0.0,0.0,0.0,0.0,4.64693045828,0.587,3.32885070102,-0.631072081345,0.00581333334382,0.0,11.35915,0.00266853944418,5.0,0.00583671777622,5.06748208494,0.000456249196887,0.00587367561245,0.0203392033299,0.00955689232146,0.0,8.28468372087,9.45094995508,0.0199258064786,0.00702004778195,20.2699283397,0.213142254012,1.0,0.0822196183338,0.00566980110655,11.4993,15.2024462548,?,9.99999335625,11.2777166667,0.0225524688021,0.682991737196,0.653192300326,0.00890775676806,1.0,22.5451117653,-2.93015966427,0.0883595763717,0.322793726626,1.0,12.0,0.0946048356648,6.66195126605,0.271430329727,6.70600858361,0.0,-0.676137543384,0.0750530858051,0.00619230517627,11.2611267429,0.174861494604,1208.35019121,0.0839182798334,-2.18175275782,0.0323289151426,100.0,5.06748208494,1.0,270.741037141,0.107597908875,0.0158497607702,0.0,0.560572123228,0.0,0.259763555807,0.0107177519572,93042.9647233,-0.0448868410543,0.30021234322,2.24407069841,0.0565965576244,0.170752149625,0.0,?,-0.945257208051,10.9123,0.0650113399238,1000.0,0.0,0.409124134871,1.0,0.430391635502,-0.754397530922,0.15010617161,0.00594028737059,-1.36041709353,0.0750530858051,0.0707449924732,0.0986683310606,0.215195817751,99.0,0.020008075958,-0.00997689318388,'GCVS:Pulsating:CEP' +-0.853968361163,0.0736900776801,0.433144101822,0.0,0.281480820395,-47.8462975964,0.0323999929088,0.57935679786,0.872639368905,2.11377975789,-0.0645569656064,0.039436967703,0.929439755883,0.951164023155,99.0,0.863685096282,149.0,0.00273758334043,0.0,6.30607082912,0.351997106141,0.363608989174,8.46343824244,0.454311987549,0.0,-1.69117055895,0.040470355965,0.0343555523355,0.136047203853,0.00281989199721,19.322376645,1.05382515584,0.323237139352,0.149022168644,0.00266511499698,2.55029165375,0.72116947198,0.0,0.0,-0.751472780572,0.295100406175,1.2634,4.74993664205,-0.72018378315,0.00316354768445,-0.340343651669,10.2091,0.0038728405454,4.0,0.00317693505015,0.0680236019263,0.000435616575796,0.00306583885642,0.0235949496908,0.0199870852699,-0.494763233341,-8.95554835493,14.6181990415,0.0239404240539,0.00328103066117,0.272094407705,0.373838522947,1.49525586737,0.0802936136106,0.00290720790193,10.6052,0.204070805779,?,9.99999335625,10.1735241611,0.0255735006677,0.078376711895,0.824774259879,0.0341953392045,0.11658033565,237.158686817,3.02154359665,0.0332489439034,0.22107023304,0.034603265158,117.0,0.0546763643667,3.84726014388,3.28537995163,6.70510929334,-1.97843488427,-2.54977563582,0.0107999976363,0.00478295874544,10.1410527166,0.297469220762,153.273620187,0.0401146319958,3.04630462792,0.0349082220373,100.0,0.0680236019263,1.40311722175,111.467526639,0.0736900776801,0.0612338063199,0.0,0.518760922691,0.0,0.652405607209,0.00522209862673,22684.4957877,-1.55903829535,0.043199990545,0.694106281126,0.0724131980291,0.0907069332424,0.0,?,2.7293896094,9.3418,0.0494749057381,1000.0,0.0,0.300432663134,1.16998569941,0.29476031072,-2.58720366662,0.0215999952725,0.00329650501943,2.32497759544,0.0107999976363,0.0667613397537,7.98311497294,0.14738015536,99.0,0.0237186668018,-0.146680909398,'GCVS:Pulsating:CEP' +0.0,0.219316041069,0.665959355417,0.0,0.151988151133,15.7062978767,0.123833851362,0.127045166653,1.0,0.45213415896,-0.731062994195,0.019963206468,0.445072623699,0.528168994675,99.0,0.486659575914,82.0,0.00415939267036,0.0,31.9568729894,0.0,-0.619446475092,4.68192045528,0.576967778834,0.0,-1.39459039989,0.0282707319935,1.0,0.0312921730587,0.00247266868386,12.1130045097,1.0,1.0,0.0779908394744,0.00201646110012,-0.885511853003,0.0,0.0,0.0,1.89546080784,0.24851290929,0.5376,4.53586693035,-0.96334164639,0.00187065517928,0.0,8.48785,0.00364174789326,7.0,0.0019656127248,0.0156460865294,0.000467587537928,0.00190384501154,0.0218836102763,0.0228694697001,0.0,7.1220826331,7.32117808425,0.0237599127451,0.00258245565173,0.0625843461175,0.163303834805,1.0,0.0936926189515,0.00238433922784,8.5965,0.0469382595881,?,8.41433192518,8.43154878049,0.0223056771636,0.1463370766,0.437148825964,0.0137359814082,0.0920148156411,20.4374850292,-2.79505020938,0.0389671851876,0.657948123208,0.141496084225,77.0,0.121965156795,12.1130045097,1.85311751661,6.70690811542,0.0,-1.10596333152,0.041277950454,0.0137014796395,8.41433192518,0.284885091021,152.20067062,0.0285631311866,1.91781356139,0.0166359263938,100.0,0.0156460865294,3.53539040582,270.750139031,0.219316041069,0.0221179992267,0.0,0.102822489991,0.0,0.521914128595,0.0185978833403,12328.2543202,0.762539972128,0.165111801816,0.603944397171,0.0742528642992,0.119881605227,0.0,?,2.06829476633,8.0589,0.0287327338343,1000.0,0.0,0.258990508106,1.0,0.877264164278,-1.20033521987,0.082555900908,0.00207332187274,-1.3144305424,0.041277950454,0.080203533575,31.9568729894,0.438632082139,99.0,0.0236201570133,1.31110990494,'GCVS:Pulsating:CEP' +0.0,1.58716562981,1.526962366,0.0,0.197823544084,25.841124204,0.0486444664862,0.600184056871,1.0,0.0940902098418,-1.33106486846,0.0217908063357,-1.84524182941,0.142641712275,99.0,0.421254048135,113.0,0.0250948699785,0.0,0.161112910606,-0.491153303967,1.32381190026,4.92022710228,0.051038063511,0.0,0.769452971817,0.0513834260491,0.0278392037196,6.20682722594,0.00370617229931,11.8797896392,1.0,0.251547289804,0.0684794614092,0.00432675729656,-2.46314923481,0.0,0.0,0.0,-1.89208379493,0.0305836738815,0.8199,3.21200527287,-0.781853343552,0.0036171368075,-0.236415885161,10.6745,0.00863183870376,4.0,0.00456168073478,3.10341361297,0.000450666193696,0.00358812184331,0.0288046624227,0.0511553626801,-1.01551773737,-30.8383472896,6.21672016455,0.0270361699355,0.00522833866949,12.4136544519,0.17267478162,1.6256510615,0.135085746645,0.00364027090976,10.9225,9.31024083891,?,9.99999335625,10.6167415929,0.0277758652552,0.314339238468,0.791485266526,0.0104270578694,0.170789947959,74.3794896653,0.198623540901,0.0285489065628,4.76149688943,0.0363549495683,77.0,0.155050489834,2.27888363376,1.94125410789,6.70690811542,0.0,2.37310871889,0.0162148221621,0.00592829280069,10.598958697,0.518532784707,549.053772349,0.0508850946851,-2.27948478943,0.0157492036993,100.0,3.10341361297,4.21993157377,339.079632852,1.58716562981,0.0160822997989,0.0,0.0810666573941,0.0,0.91024159149,0.044098205828,61494.0225031,0.776165416247,0.0648592886482,0.418039633602,0.0576450015052,0.200174800502,0.0,?,-3.09139932117,10.1026,0.0179979905259,1000.0,0.0,0.479730309728,1.0,6.34866251924,2.97646893258,0.0324296443241,0.00389124230739,1.16612954154,0.0162148221621,0.0770772031452,0.161112910606,3.17433125962,99.0,0.0270628825021,0.175092358496,'GCVS:Pulsating:RR:RRAB' +-0.17347501983,0.391222485599,1.90836710898,0.0,0.160087769797,35.7729886549,0.199712927847,0.61412612639,0.114537219455,0.408232904406,-2.53643092293,0.0391149443628,0.56095241646,1.61092595458,99.0,0.379396938047,65.0,0.0025018875526,0.0,0.0536251325472,0.0759213854354,-0.245053063063,4.51546459481,-0.12146784783,0.0,1.37476497533,0.0567017590168,0.0438263121204,3.80215446804,0.00399074041585,3.09923516611,0.300204378263,0.373050973789,0.26695562176,0.00401272566845,-0.24422859012,0.102770223597,0.0,0.0,-2.5569868069,0.106601045133,0.5727,4.08322736066,0.297488539275,0.00389878029195,-0.301848031356,10.2271,0.00132112898401,2.0,0.00325716992275,1.90107723402,0.000456317418047,0.00399874808118,0.0258589261436,0.0148023594838,-0.0215645521289,16.2355970418,6.85380886931,0.0250317465121,0.00405652126866,7.60430893608,0.173855374555,1.91739385248,0.0997043057164,0.00410363395506,10.5669,5.70323170206,?,9.99999335625,10.2606307692,0.0253662420225,0.328942148399,0.554110308708,0.0169335020714,0.160804790676,38.7189189022,0.509413827834,0.0371542439529,1.1736674568,0.0404103989216,19.0,0.144591938363,0.78807512083,2.37623874343,6.70690811538,-0.912750926208,-2.40407029023,0.0665709759491,0.00626278018665,10.2486416788,0.152270546337,172.189247822,0.0564476507637,1.86126602122,0.0258791004329,100.0,1.90107723402,3.85980626537,270.921162624,0.391222485599,0.0266032103321,0.0,0.0698610019476,0.0,0.633995761533,0.0501018760573,11020.1118606,1.56424279639,0.266283903796,3.08266575707,0.0147466593686,0.153072960051,0.0,?,-0.252516249652,9.9942,0.0128149724122,1000.0,0.0,1.75592814469,1.79100819231,1.5648899424,2.1706106407,0.133141951898,0.00475306801182,1.19302460058,0.0665709759491,0.0720325768284,0.136625790401,0.782444971198,99.0,0.0240999289661,-0.736864511255,'GCVS:Pulsating:CEP' +-0.645553363749,0.463693502104,1.60217962999,0.0,0.373489380712,-39.7352420821,0.0251770497915,0.406149164265,0.0937825604797,0.357079056161,1.33613191149,0.0242865504735,2.04305391282,0.333851285406,99.0,0.619622508732,137.0,0.0200675862282,0.0,0.333388589311,0.0741754322552,-0.377069706011,5.67110824634,-0.443234134111,0.0,-1.80661961298,0.0989927557661,0.0275064527891,0.70081088115,0.00705227290047,23.2725071899,1.67036171317,0.352551388507,0.0918655557418,0.00750507956838,-2.05798631896,-0.160543306346,0.0,0.0,-1.07493599636,0.104312522887,1.5235,4.60803972109,0.0968102079876,0.00727256574622,-0.382855229531,12.2812,0.0127898670419,3.0,0.00914597457539,0.350405440575,0.000461138974716,0.00649070403268,0.0440480613226,0.0762180920389,-0.823089784369,-5.25136029391,7.01086157927,0.0448514262926,0.00862847926364,1.4016217623,0.296942231094,1.6120973068,0.262604158355,0.00714105621817,13.1615,1.05121632173,?,9.99999335625,12.2678255474,0.042354599037,0.0479119251259,1.48168711618,0.125582181696,0.377040588631,229.791186638,2.63678128798,0.0196379954113,1.39108050631,0.0595848709994,42.0,0.159152946251,4.30160120646,2.5867296595,6.704210244,-1.12350022341,-1.74105587615,0.00839234993051,0.0168080876674,12.1917968978,0.996373252706,1494.37440682,0.0985820085178,-2.75977969808,0.0757912582281,100.0,0.350405440575,2.84639820824,109.846195688,0.463693502104,0.02063641744,0.0,0.0839548340391,0.0,2.30631221309,0.0740685797313,203234.919327,0.325179783914,0.0335693997221,0.591865576912,0.062352382424,0.102624932469,0.0,?,0.974905766516,11.638,0.027829781904,1000.0,0.0,0.732761156561,5.47856071279,1.85477400842,0.818915515059,0.016784699861,0.00816802740399,-2.38524230003,0.00839234993051,0.125939681325,0.575102964006,0.927387004208,99.0,0.0450386874378,-2.04353789476,'GCVS:Pulsating:CEP' +0.453183532504,0.307488241741,0.838277177346,0.0,0.387230840364,-3.34159038409,10.185844741,0.937739653186,0.135349667442,1.62607843854,1.58351132388,0.0324713977076,0.838000151894,0.630291968149,99.0,0.865617267653,60.0,0.0145109668518,0.0,0.223786051955,0.0,0.0,2.51719517397,0.0,0.0,-0.677014051098,0.121564770063,1.0,1.27678780054,0.00830575687204,0.147263191041,1.18603168909,1.0,0.171449875339,0.00910672583679,-2.32737982134,-0.269038535427,0.0,0.0,0.0,1.62607843854,1.4355,3.25213230819,-0.854673686944,0.00811446263744,0.0,12.0689,0.0159308555574,4.0,0.00880229082099,0.638393900269,0.000460159915878,0.00844815446083,0.0819016186189,0.0522209644717,0.0,11.2448771382,3.93852622459,0.079159900943,0.00860136817049,2.55357560107,0.269783617901,1.0,0.264261980203,0.00865638118704,12.4476,1.91518170081,?,9.99999335625,11.9191,0.0684986216968,0.122006962275,1.61739375657,0.0687807721042,1.0,196.894213901,-2.21195002417,0.204590560302,0.922464725224,1.0,19.0,0.318277780843,0.147263191041,2.7206604837,6.70510929338,-0.722714373308,-1.24944505907,3.39528158033,0.0091958303461,11.8759016055,0.623225952859,1691.58380015,0.121482800795,-1.34706036503,0.103658458854,100.0,0.638393900269,1.0,105.009108161,0.307488241741,0.0276095949527,0.0,0.124693628361,0.0,0.332288685642,0.0703737925425,99803.4442086,0.0194368521215,13.5811263213,0.549068054556,0.0562131445375,0.0787032119505,0.0,?,0.978510148706,11.0121,0.0832927190308,1000.0,0.0,1.30274854557,4.17490233434,1.22995296697,1.11167346237,6.79056316065,0.008396370689,-1.31830282681,3.39528158033,0.214248512687,0.356306706848,0.614976483483,99.0,0.0749427463661,0.995120565091,'GCVS:Pulsating:RR:RRAB' +0.0,0.104421004061,0.325145212436,0.0,0.225756357685,6.71398904757,4.39668386151,1.41426108013,1.0,1.7105635535,-1.38670677938,0.0279851780052,-0.778978241922,0.385570948764,99.0,0.782579974981,70.0,0.00411327383702,0.0,26.5011858602,0.0,0.943459206763,5.26548629954,0.403438550925,0.0,0.0354311009092,0.0230159021541,1.0,0.037734160474,0.0019254782879,0.341166216914,1.0,1.0,0.155464298732,0.00162623315462,2.3264712202,0.0,0.0,0.0,-3.15964794279,0.341342852898,0.6959,4.12055134074,-0.820302191594,0.00174685812826,0.0,7.74575,0.00342124428582,9.0,0.00174335756672,0.018867080237,0.000456218499025,0.00180410260005,0.0284198001282,0.0110042261274,0.0,2.66597265284,10.5529293895,0.0287813610049,0.00168170374875,0.075468320948,0.257478943206,1.0,0.0569855373942,0.00179695788016,7.8616,0.056601240711,?,7.59421520017,7.62898285714,0.0243988122825,0.450787206942,0.283532485736,0.0034824693036,0.486371168197,12.5961637487,0.741722831765,0.0487486298469,0.313263012182,0.0902775390743,24.0,0.119371761794,0.341166216914,1.9860398895,6.70690811525,0.0,-1.78603248064,1.46556128717,0.00106680981793,7.59421520017,0.100687565286,599.172923684,0.0235486728147,-1.16115838748,0.0145000425558,100.0,0.018867080237,2.81275277574,270.79518425,0.104421004061,0.00754557941888,0.0,0.101652497479,0.0,0.532011929834,0.0157881953284,41342.9317342,2.95382637025,5.86224514868,0.439272475158,0.0404389351126,0.1136441799,0.0,?,0.0315144220865,7.1657,0.0830656602226,1000.0,0.0,0.76114576244,1.0,0.417684016243,0.581624944152,2.93112257434,0.00166094282073,2.84926301381,1.46556128717,0.116533923947,26.5011858602,0.208842008121,99.0,0.0249234926174,-2.05157675508,'GCVS:Pulsating:CEP' +0.235482840451,0.152670339162,2.2157758069,0.0,0.202957969828,-62.0911656314,0.150843708235,0.255396323889,0.0182412076678,3.27503038734,-1.90833158346,0.0107019731834,-2.64737349874,0.151511167761,99.0,0.461685466218,114.0,0.00719084518965,0.0,0.14599322062,-0.383215797591,0.0,5.02698313664,0.0,0.0,1.31574963604,0.0169213443994,0.00583966163114,0.228436569615,0.00122606343359,5.15203829943,0.0630920636235,0.0351585143915,0.0407734739057,0.00139254881647,-0.505787513224,-0.107404436173,0.0,0.0,0.0,3.27503038734,0.6814,4.58156322396,0.0897383384128,0.00134654599986,0.460399710907,7.49275,0.0218325656025,2.0,0.00115641616987,0.114218284808,0.000420983030233,0.00115668288051,0.0255415068564,0.0287599276452,-0.946559134904,-14.8928040152,6.60933377952,0.0240938885359,0.00118032110909,0.456873139231,0.173616518009,0.107409735362,0.114982012378,0.00117876887282,7.8542,0.342654854423,?,7.49175087519,7.48614298246,0.026268384046,0.0612507309643,0.752428209659,0.0203774630995,1.0,250.73916877,2.88858894677,0.0541182198565,0.458011017485,1.0,39.0,0.141949595582,0.10759459765,2.65654406432,6.70421024408,-0.951022130274,-2.25209804275,0.0502812360784,0.00477231806889,7.49175087519,0.313365452461,464.368832289,0.0169801794629,2.75246528532,0.0515009564904,35.9,0.114218284808,1.0,116.697096088,0.152670339162,0.0086161072331,0.0,0.0157703221752,0.0,0.476759123094,0.0754103931468,52473.6780487,1.10224287294,0.201124944313,0.0572171827735,0.0374769442206,0.0218555292823,0.0,?,-1.50605489072,7.1728,0.0121530438768,1000.0,0.0,0.612050245449,0.309944573702,0.610681356646,2.62566114072,0.100562472157,0.00120615981744,-1.78758955488,0.0502812360784,0.0743627077299,2.24483384396,0.305340678323,99.0,0.028949907644,-3.01884076517,'GCVS:Pulsating:CEP' +1.11010149269,0.190268047684,0.294303881626,0.0,0.221338046981,-46.3058092079,0.0914521912301,1.1875309726,0.464525202157,1.06685417026,0.347585335307,0.0676562676203,1.85039452393,1.53214888516,99.0,0.839271639122,119.0,0.00327355676915,0.0,5.65159213319,0.0,-0.185082137983,7.08034493559,0.432557425657,0.0,-1.17382762861,0.0691680249501,1.0,0.177873085948,0.00471078992339,16.4020126781,9.69242536649,1.0,0.300742017349,0.00513485296583,-0.319817236887,-0.955308781311,0.0,0.0,-0.231894518745,0.185872366203,0.9711,3.75993512441,-0.789247973651,0.00484327114174,0.0,10.9465,0.00433951525005,10.0,0.0047519331639,0.0889365429742,0.000460422034439,0.00462540935485,0.0211028100232,0.0167253914142,0.0,-8.14580670996,12.3736899686,0.023061224702,0.00575610751337,0.355746171897,0.259381249226,1.0,0.0633992033226,0.00497205818758,11.3019,0.266809628922,?,9.99999335625,10.9055714286,0.0209623200423,0.226851227653,0.455240908481,0.0233274932046,0.348850512392,235.829893415,-2.5074201058,0.0397045231312,0.570804143051,0.0201539389557,105.0,0.083807083209,16.4020126781,0.896754878299,6.70645831935,0.414068652745,2.13690980591,0.0304840637434,0.00411972438824,10.8848033396,0.173468936087,597.838502308,0.0686848942729,-2.887500083,0.0145878731644,100.0,0.0889365429742,1.43582020364,111.326647635,0.190268047684,0.0123610979543,0.0,0.164117552731,0.0,0.54386353475,0.0337678064924,70544.9432723,-0.740884706286,0.121936254973,1.18737993212,0.0729622137927,0.32145269638,0.0,?,-1.43403647981,10.3308,0.0678072592525,1000.0,0.0,0.287004175909,24.7396442371,0.761072190734,-0.286919629524,0.0609681274867,0.00543739732915,-2.51725656539,0.0304840637434,0.0970938139841,2.58033445201,0.380536095367,99.0,0.0218161068423,1.06467014283,'GCVS:Pulsating:CEP' +0.387184721054,0.0330624407382,0.725164616641,0.0,0.371658099501,-51.3224426564,0.39451561957,1.95684213563,0.0511431814808,5.09999688732,-1.34313934366,0.0130522276961,-0.480629683578,0.392829281722,99.0,1.15627082426,162.0,0.00460829537545,0.0,0.200776883879,0.267686225314,0.947660905673,8.54309837465,0.665316415049,0.0,-2.97317711604,0.0247892481112,0.0109149163343,0.524538006845,0.00158815798146,1.77826226987,0.341697331752,0.0562476779686,0.0714834170048,0.00185852817742,1.1212731223,-0.532433756154,0.0,0.0,-3.09086590849,0.577210760618,1.1583,5.46993940856,-0.00413190798751,0.00170315931487,-0.265368548678,8.72455,0.00134830893688,7.0,0.00178275394079,0.262269003422,0.000434466275689,0.00183110794081,0.0341890154918,0.0280303050746,-0.701943249223,-10.3550757962,13.832562304,0.0284830003268,0.00205603855075,1.04907601369,0.404317239662,0.277356908174,0.119436449301,0.00165664940397,9.2673,0.786807010267,?,8.60018053291,8.66317654321,0.0292293814245,0.121557049698,0.979893812103,0.0142040357314,0.341139403026,240.474331976,-1.90093442809,0.109723708389,0.0991873222145,0.0836992900019,132.0,0.0838544150972,0.0851810907424,2.97803279058,6.70690811533,-0.35001303033,-1.88636390943,0.131505206523,0.000957366075134,8.60018053291,0.419646398187,541.482234437,0.0247947786446,-2.77787038095,0.0310746442555,100.0,0.262269003422,1.66924577594,112.621340513,0.0330624407382,0.0535712331539,0.0,0.069227566376,0.0,0.241213902477,0.0233813371075,87178.6397443,-1.91682529125,0.526020826094,1.26488828839,0.0634863108164,0.0537733172294,0.0,?,1.85880705743,8.109,0.0422776812699,1000.0,0.0,0.525733113093,1.25678476575,0.132249762953,-2.79409556812,0.263010413047,0.00192949913899,0.0105800188226,0.131505206523,0.110568251699,0.918349979276,0.0661248814764,99.0,0.0264541289892,1.0695657615,'GCVS:Pulsating:CEP' +0.0,0.819456554442,0.640489575894,0.0,0.288452967024,59.3344919126,4.0960075077,0.281253508624,1.0,0.245539102018,2.56688467712,0.0350679782407,-2.37631289819,0.195126786637,99.0,0.617040801489,120.0,0.0174477297911,0.0,0.161157267696,0.0,0.209740911595,5.25098002543,0.118403843042,0.0,1.42671180227,0.0503429447672,1.0,6.20511885251,0.00344607936204,0.36621026626,1.0,1.0,0.0682769592385,0.00371217698461,-1.93292894811,0.0,0.0,0.0,-0.724708573954,0.0494258522464,1.034,2.02049792848,-0.474016597224,0.00380154879878,0.0,10.7036,0.00339821499267,5.0,0.00365813963363,3.10255942625,0.000423592746954,0.00363374398135,0.0363768541836,0.0544895353597,0.0,46.9874135006,7.08300170708,0.0343009200067,0.00354112537442,12.410237705,0.238647222161,1.0,0.102688512383,0.00380822553914,11.0475,9.30767827876,?,9.99999335625,10.59981,0.0336929499709,0.0891698365381,1.16882716359,0.0391220820337,0.119829079987,129.34024647,0.235996380586,0.050771206002,2.45836966333,0.0154947267611,72.0,0.15945737943,0.36621026626,2.72070914589,6.70600858369,0.0,-2.55435857023,1.3653358359,0.0120801504685,10.589965292,0.552944916326,569.331622473,0.0503848501736,0.59218888534,0.0335197765897,81.6,3.10255942625,1.50740692612,133.337751182,0.819456554442,0.0193972977256,0.0,0.125856757916,0.0,0.688902796366,0.0293607749363,67750.4630743,-2.13408690567,5.4613433436,1.03561064185,0.054718542006,0.10355230137,0.0,?,-1.89954896644,10.0135,0.058061446221,40.8,0.0,0.686903656252,1.0,3.27782621777,-0.0924262480271,2.7306716718,0.00346743278807,-0.660510173378,1.3653358359,0.113089369367,0.161157267696,1.63891310888,99.0,0.0340083776199,2.3112888775,'GCVS:Pulsating:RR:RRAB' +0.0,0.0145610148471,1.61533434913,0.0,0.21195668372,22.7056172276,2.83135089701,0.675138140717,1.0,8.74661267256,-2.05168063583,0.0446479785066,-1.87493620693,2.28658101629,99.0,0.43473929409,93.0,0.00245361700729,0.0,0.271026751237,-0.114017229098,-0.173698486382,4.71460006239,0.045506848411,0.0,-1.80692758228,0.0791133024294,0.0316091526268,3.68967268152,0.00554236479775,0.253380292361,1.0,0.0875417380514,0.223846476054,0.00543573822018,-1.57548754053,0.0,0.0,0.0,-0.561098535327,3.93124758807,0.7019,4.06976811721,-0.825528190885,0.00562804527023,0.127079051492,11.3311,0.0109014288855,4.0,0.00551251389496,1.84483634076,0.000457061336205,0.00503079734477,0.0311232824136,0.026524746162,-0.584626018534,10.2378387287,5.88843315493,0.031603677142,0.0055063289323,7.37934536304,0.177577574632,0.680474946913,0.128112425711,0.00573326977668,11.5066,5.53450902228,?,9.99999335625,11.2604462366,0.0301570162996,0.383482509135,0.877224013558,0.0149958159305,0.292520060439,26.7845011257,-2.62066164561,0.0214642608741,0.0436830445412,0.0463822656188,43.0,0.226019653268,0.03233575836,1.2311306645,6.70510929338,0.0,-1.26019076844,0.943783632338,0.00822185675812,11.2438436961,0.512037216343,1102.96980856,0.0791962493682,3.06779646055,0.00277937984685,100.0,1.84483634076,4.89803133156,271.037041424,0.0145610148471,0.0143621920382,0.0,0.165173586488,0.0,1.76969697289,0.0329271259988,101473.222388,0.0365309595774,3.77513452935,0.591773134588,0.0573026274444,2.08707705575,0.0,?,-0.577536434529,10.8047,0.0231597417688,1000.0,0.0,0.550836596185,1.0,0.0582440593883,1.80596612769,1.88756726468,0.00579239782536,2.32113367983,0.943783632338,0.0961476268989,0.271026751237,0.0291220296942,99.0,0.0367821390723,0.829520392335,'GCVS:Pulsating:CEP' +0.0600387211201,0.136935143777,7.11317298782,0.0,0.21054814651,22.7391448012,3.29071702177,0.767402159869,0.368646847992,3.6513636033,-0.779735165069,0.123464948387,-1.51353173491,3.01981805997,99.0,0.739870168171,86.0,0.00114522664749,0.0,0.820447222026,0.0,0.0,6.43704271124,0.0,0.0,1.01921664417,0.0476764658935,1.0,0.831349314535,0.00317057753943,0.455827708696,0.786978828088,1.0,0.525201212462,0.00332744357044,2.68167975913,0.0149702326324,0.0,0.0,0.0,3.6513636033,0.8104,3.92328012353,-0.668265352067,0.00330989635013,0.0,10.1054,0.00455959458471,2.0,0.00331398091129,0.415674657268,0.000457250736962,0.00394758498583,0.018202223086,0.00725095446116,0.0,-1.85757563664,15.3245250728,0.0192832933985,0.00316769909069,1.66269862907,0.298889303499,1.0,0.0296434274833,0.00371699294478,10.3876,1.2470239718,?,9.99999335625,10.0579988372,0.0195039847616,6.0553042948,0.198712244187,0.000572431990921,1.0,34.0493194762,1.86713064904,0.0288174280213,0.410805431331,1.0,57.0,0.0608516982745,0.455827708696,1.62179500562,6.70690811533,-0.67229919207,1.26459122805,1.09690567392,0.00410991620632,10.033896285,0.108847830344,101.985485656,0.0481847345927,0.805880254856,0.0174264398838,100.0,0.415674657268,1.0,286.32199987,0.136935143777,0.023123073198,0.0,0.225489921691,0.0,0.689762682134,0.0147537802894,8668.76628073,-2.52237470507,4.38762269569,0.675311864538,0.094975413924,0.197390615337,0.0,?,1.7518507169,9.5772,0.00258764529159,1000.0,0.0,0.201627101786,7.94476726345,0.547740575109,-1.06361450361,2.19381134785,0.00344248200562,-1.26915001498,1.09690567392,0.0524926808796,0.565248988314,0.273870287554,99.0,0.0187740498606,2.73203235205,'GCVS:Pulsating:CEP' +0.873405631243,1.04319603973,0.562182934078,0.0,0.3875437192,-36.2181054035,0.0227879909031,0.18784734726,0.094952998924,0.479296298065,-0.510557911488,3.70565420061,-1.29491281999,0.218035342866,4.0,0.660705070116,85.0,0.0304828098173,0.309825010905,0.0349398772006,-2.282082214,0.0,2.56274132331,0.0,0.0,2.27539814918,2.0390177343,0.877958460619,3.61722501136,0.00684931638263,17.9367908814,0.25725766227,0.291324616863,0.0273579082656,0.78207316336,1.76755785557,-0.888509245627,0.0,0.0,0.0,0.479296298065,1.3535,2.63132888113,-1.04037702148,0.00597241441653,0.0425183671191,11.6203,0.06706983757,1.0,0.776939003277,1.80861250568,0.000598320027454,0.00801809341803,0.0620210048364,0.213420941506,-3.21966184923,7.105546003,4.048952627,0.0636754837396,0.655908667994,7.23445002272,0.249270201302,105.894735373,0.203216910214,0.00628798602257,11.9182,5.42583751704,?,9.99999335625,11.4590694118,0.0615641189873,6.95890328191,0.62570967751,0.0900280607976,1.0,235.643266587,-2.31797066471,0.0975882966527,3.1295881192,1.0,28.0,0.25971534213,55.7703474792,2.94310949927,6.7073579717,-1.40175877201,-2.20515597011,0.00759599696769,0.0340000841618,11.4202245279,1.48063158389,1312.51154965,0.0888704109947,0.351364581356,0.0355548953465,100.0,1.80861250568,1.0,126.63124319,1.04319603973,0.00746057702206,0.0,9.58126034362,0.0,0.663757631559,0.078531329161,110250.970171,-1.87330531577,0.0303839878707,0.082252087909,0.0497257647945,17.8227051218,0.0,?,-0.874702311152,10.5647,0.1113975155,1000.0,0.0,1.27131312716,0.362996049094,4.17278415893,-1.73084195925,0.0151919939354,0.639722742149,-2.51993514259,0.00759599696769,0.178487004925,0.235318483987,2.08639207947,99.0,0.0629229193863,-2.90021961182,'GCVS:Pulsating:RR:RRAB' +0.179313934933,0.0585258599678,0.641465773611,0.0,0.368222168934,23.8846967499,0.173829982143,0.221043217529,0.264018868226,8.54323200505,-0.571692098719,0.0311794995632,-2.29396700888,0.520088082162,99.0,1.18885018521,81.0,0.00464331533511,0.0,7.42681525403,-0.0657922120094,0.0,6.05998618778,0.0,0.0,-0.0942266188528,0.032978464101,0.0155068298001,0.057534363783,0.00215711140026,4.31964930874,1.70925482283,0.030561521987,0.142393624806,0.00212142670304,-2.60614400736,0.600362660404,0.0,0.0,0.0,8.54323200505,1.2716,4.88952884565,-0.119532334528,0.00222600533227,0.105087077527,8.8055,0.00379545135117,4.0,0.00230567089824,0.0287671818915,0.000457432364256,0.00198219886256,0.0501910258262,0.0181537377199,-0.873557331341,-1.37770694532,12.3722034895,0.0389025314302,0.00227069399966,0.115068727566,0.444233533938,0.231312623488,0.0919990597947,0.00249254053479,9.3356,0.0863015456745,?,8.72954461133,8.77194074074,0.0359057733179,0.0926265784421,0.511365496057,0.025345058919,1.0,35.1063510774,0.298125467585,0.130566579974,0.175577579903,1.0,8.0,0.0854902402608,0.206097679187,2.82445763871,6.70780788833,-0.713266616409,1.03728405784,0.0579433273809,0.00981435764243,8.72954461133,0.142893028822,596.446805046,0.0328030784272,-1.15000648891,0.0423964283989,100.0,0.0287671818915,1.0,286.523975052,0.0585258599678,0.028070670133,0.0,0.0505289794098,0.0,0.237059515597,0.040158554239,47715.7444037,1.41314518964,0.231773309524,0.775313507389,0.123089462436,0.0621004935324,0.0,?,2.89579524519,8.064,0.0583014808175,1000.0,0.0,0.274429406936,14.1716661448,0.234103439871,1.87532927489,0.115886654762,0.00276759704974,0.623307975911,0.0579433273809,0.116125312985,6.16022542599,0.117051719936,99.0,0.0412553301344,-0.0898063666492,'GCVS:Pulsating:CEP' +-0.0269137905652,0.149602174499,19.599194885,0.0,0.299943679981,-55.7085606483,0.0127335354847,0.0777113363751,0.0378112396545,1.09938540426,-1.56007430675,0.00866072753474,0.0788746234043,0.114748442161,99.0,0.546911791467,128.0,0.0133010387591,0.0,0.0518042412464,-0.33980037426,-0.000326225851159,5.38307313143,-0.19430803845,0.0,-0.0889474904112,0.0226215333884,0.0079618652803,0.955173901636,0.00170443652579,49.9219045735,0.0244114901562,0.0445548554137,0.0352195706806,0.00149179068809,-1.45090907639,0.111032203295,0.0,0.0,-0.278921922279,0.389351519781,0.9837,5.01386619489,-0.435478424576,0.00163483309561,-0.209969967605,8.3168,0.0203024344099,4.0,0.00157261045546,0.477586950818,0.000433492828061,0.0016002545079,0.0418157140946,0.0427707351938,-0.874636804106,-3.55364943064,6.21338473104,0.0407731532439,0.00152986777828,1.91034780327,0.268658649903,0.285086254674,0.189026613985,0.00154400551826,8.6425,1.43276085245,?,8.19762700676,8.21933671875,0.0432386954185,0.0411702094879,1.68276936907,0.0384473818322,0.161557084319,253.083159116,2.42336908915,0.0271099816675,0.448806523496,0.0303036993262,25.0,0.154448188236,2.05434218657,3.06546103802,6.704210244,-1.65966037724,0.0664543195649,0.00424451182823,0.0207534312219,8.19762700676,0.394338719308,594.383922066,0.0222987082295,3.11347837755,0.0634709079653,100.0,0.477586950818,3.65805091882,135.536924427,0.149602174499,0.00431404330918,0.0,0.0248992110735,0.0,1.57195472027,0.063567970537,75486.7581024,-1.49371698924,0.0169780473129,0.0777545879765,0.0492616348136,0.0264715942337,0.0,?,-1.25514326829,7.6588,0.0022349443234,1000.0,0.0,0.801041878819,0.180674279474,0.598408697995,2.30332697986,0.00848902365646,0.00157788340365,-2.02481026673,0.00424451182823,0.121039799659,0.723780255361,0.299204348998,99.0,0.0460823709373,-2.87606895094,'GCVS:Pulsating:CEP' +0.416515495672,0.0242296351325,0.51646082256,0.0,0.361552807903,-53.4858812714,0.243928223187,0.693752902944,0.0820413285749,20.6358864781,-2.14053888809,0.0229239065108,2.82704237465,0.320061622526,99.0,1.16235949596,137.0,0.00345830194162,0.0,0.149202722744,-2.3026287825,0.0,8.37644669164,0.0,0.0,-2.94267704563,0.0154844133094,0.208105434174,1.30321146762,0.00115628910558,6.2018735977,0.94520247797,1.04718751456,0.0709232940321,0.00103090224837,0.387502955184,-0.00471864715994,0.0,0.0,0.0,20.6358864781,1.1594,5.54098510538,0.27634581176,0.00107705235799,1.98452726533,7.1402,0.0023486717349,7.0,0.00110717648711,0.651605733811,0.000421170672862,0.00108763540412,0.0237886897946,0.0147474045098,1.21569633651,-2.30200257017,18.995596714,0.0241856697391,0.00117512442654,2.60642293524,0.436129299177,1.36345522274,0.0454156886132,0.00106399598871,7.802,1.95481720143,?,7.15467092361,7.19313576642,0.0229594945473,0.125903422386,0.43891557117,0.00856166170835,1.0,251.073559977,-2.68601303346,0.015227840034,0.0726889053974,1.0,77.0,0.0614676043232,2.70618188397,3.85087581492,6.70600858365,-0.237938839979,2.94172449805,0.0813094077291,0.00161939940963,7.15467092361,0.136060195909,1624.7737897,0.0154538171934,-2.64285135128,0.0449281341992,100.0,0.651605733811,1.0,134.140230376,0.0242296351325,0.0241680936765,0.0,0.0731736966046,0.0,1.68090163054,0.0148959384529,220969.2354,-1.45215594836,0.325237630916,0.466538593734,0.165543674668,0.0259274226563,0.0,?,-1.48497514746,6.6426,0.0486314762127,1000.0,0.0,0.150064144826,3.89623894074,0.0969185405299,2.98384764628,0.162618815458,0.00109440790371,-1.26984529643,0.0813094077291,0.0934742325136,0.312459341793,0.0484592702649,99.0,0.0244532391131,-2.9257686974,'GCVS:Pulsating:CEP' +0.238390649273,0.375985914968,0.762275667001,0.0,0.231782040064,-14.3021098307,10.8184285101,0.381196986006,0.0916015000568,0.472622656589,-0.47895502984,0.0310763679232,-1.4612799323,0.96354523965,99.0,0.449979594231,84.0,0.00480673380259,0.0,4.56705635557,-1.00830180615,-0.324123454,3.26862530915,0.487330273271,0.0,1.56716824983,0.0650893385121,0.0402806147961,0.0536088893712,0.00598756845766,0.0652616953828,0.873167759806,0.730739966373,0.068424129629,0.00471397216157,-1.52772531184,-0.352258506886,0.0,0.0,-0.0401887299561,0.194224863415,0.7849,2.75077399139,-0.505461832791,0.0046583108549,0.993059586852,10.80825,0.00527549047972,4.0,0.00459059551572,0.0268044446856,0.00063582861433,0.0043882108843,0.0526927737018,0.0578556696485,0.530900399588,-7.58773390708,3.6693998188,0.0532929060426,0.00491428193001,0.107217778742,0.21318790695,1.82798047609,0.139644924585,0.0053722525245,11.0432,0.0804133340569,?,9.99999335625,10.72095,0.0580988492608,0.713997247745,0.96588326254,0.0064041236908,0.756794817869,354.208818883,-2.47699261287,0.0087170178631,1.1279577449,0.052961003322,20.0,0.193385014931,0.0138394315852,2.77184721738,6.70510929338,-0.451367124581,-0.0687365220974,3.60614283669,0.0109129203648,10.6998537864,0.397893367951,625.720970107,0.0652685425775,2.09226168942,0.0267386317668,100.0,0.0268044446856,3.89773877479,270.652328844,0.375985914968,0.0115524437421,0.0,0.145071060314,0.0,4.98140537329,0.0309890742151,51934.8405189,-2.96637811779,14.4245713468,0.93357669001,0.0291634727177,0.16709962266,0.0,?,-2.3005583157,10.2583,0.0565745247863,1000.0,0.0,1.59006050851,5.7284586145,1.50394365987,-1.13401418331,7.21228567338,0.00473154720893,0.445305594885,3.60614283669,0.136284732969,7.03964045997,0.751971829936,99.0,0.0484446401768,-1.66391329178,'GCVS:Pulsating:RR:RRAB' +-0.00303516333801,0.0187411813144,0.586650326276,0.0,0.264577169834,33.0571335565,0.208379000272,0.342940719002,0.139685878265,8.6656233166,2.00214632075,0.0160095650565,1.46726682577,0.484608117332,99.0,0.672372992606,73.0,0.00459438494912,0.0,0.0478975747468,0.0,0.445772123148,5.06726038818,0.325908091467,0.0,2.9917376308,0.0317970302928,1.0,6.93240374965,0.00244037907951,7.19842209649,0.44702864816,1.0,0.127927941419,0.00222449897646,-0.0611142352775,0.55741732138,0.0,0.0,-1.00137692324,2.48630470482,0.7509,4.49267344961,-0.0217166323181,0.00222531440179,0.0,8.3543,0.00440398634995,4.0,0.00218007140579,3.46620187482,0.000467974580744,0.00208976244411,0.046601620387,0.0161300063104,0.0,2.77828697602,8.2095361516,0.0395663927321,0.0022159347121,13.8648074993,0.270959936388,1.0,0.140278362625,0.00227930745199,8.7733,10.3986056245,?,8.40155477708,8.42771506849,0.0330055110769,0.0516102194503,0.974901385377,0.0445579072131,0.213848779199,43.3688186153,-1.43880423597,0.050214360855,0.0562235439433,0.0437616300757,67.0,0.162226164208,7.19842209649,2.13737304938,6.70645831931,-0.907138019292,-3.13467065016,0.0694596667573,0.00651878688042,8.40155477708,0.153387675583,405.390297005,0.0316806224876,1.36966214019,0.00779230731069,100.0,3.46620187482,2.89205829535,287.856656616,0.0187411813144,0.0187569827895,0.0,0.0440710348134,0.0,0.756025654283,0.0591939930008,29188.1013843,-1.86782112141,0.277838667029,0.549188458334,0.0891132180664,0.287157106041,0.0,?,-1.36600268837,8.0224,0.0592018154846,1000.0,0.0,0.43902157586,6.07119658534,0.0749647252577,-3.06222918436,0.138919333515,0.00197813014308,-0.16341395827,0.0694596667573,0.10625341629,0.0582898403165,0.0374823626288,99.0,0.0402181779909,2.71971876379,'GCVS:Pulsating:CEP' +0.545932296231,2.18639130969,0.982500838885,0.0,0.28868206177,83.5531184677,0.0256421892888,0.0977398198609,0.209993685056,0.0683656133232,-0.68617440449,0.0178989587089,-0.912708885345,0.0813347878962,99.0,0.483770009031,116.0,0.0411913798101,0.0,0.0568304901913,0.059178091215,-0.450356333395,3.1608662811,0.223222853495,0.0,2.62575621047,0.0471321791861,0.0116515691292,3.95634446182,0.00320106287889,28.3666414998,0.256849567272,0.0390011417705,0.050031139585,0.00325474205095,1.99424042548,-0.607941881036,0.0,0.0,-0.0490195073689,0.0429781863657,1.1372,4.12344715937,-0.40540952902,0.00321170163704,-0.18634396237,10.40395,0.0133840264508,4.0,0.00321147863704,1.97817223091,0.000433124611449,0.00304226995496,0.0467903420734,0.0676569492894,-0.753026214293,23.4279883005,3.94622124879,0.0440749932832,0.00327918881494,7.91268892365,0.183633199252,0.235444319836,0.185839180659,0.00336148348937,10.8066,5.93451669274,?,9.99999335625,10.338162931,0.0465339340282,0.0826424090393,1.53204666242,0.0407326101953,0.145338293176,95.3739553594,-0.943305270918,0.0609562122856,6.55917392907,0.0969244811824,64.0,0.238073540105,1.27177934588,1.98740650443,6.70690811525,-1.98963082576,0.838357152676,0.00854739642959,0.0330305392491,10.3098606006,0.793721056979,290.711615466,0.046470949696,-2.81820959295,0.0386006473565,100.0,1.97817223091,6.80596548018,351.741044959,2.18639130969,0.0114034504554,0.0,0.110845161071,0.0,0.714306761386,0.0260981323739,33431.8357786,-2.07919451932,0.0341895857184,0.269382075944,0.0614030769739,0.0862776860837,0.0,?,-0.544008451549,9.6694,0.0468670767554,1000.0,0.0,0.731598227842,0.391942089456,8.74556523876,-0.199118943537,0.0170947928592,0.00389690763796,-0.956381585476,0.00854739642959,0.130202990991,0.23763381828,4.37278261938,99.0,0.0458658961081,2.00464423084,'GCVS:Pulsating:RR:RRAB' +0.0,0.114440327674,0.338464879973,0.0,0.202558659166,-75.0858089813,0.74157325815,0.328080067107,1.0,1.49900748561,1.57046601842,0.0115287397587,2.65750398318,0.268574657283,99.0,0.49986669001,105.0,0.0050904998144,0.0,5.78109949327,0.230602928427,-0.0201370487142,5.50485456942,-0.39304142385,0.0,0.848847496616,0.0177147601749,0.0147011625399,0.172977476199,0.00125074273174,0.765387722176,1.0,0.227322027559,0.069407760312,0.00124753163313,3.05084763785,0.0,0.0,0.0,-0.167967533311,0.332218052951,0.6591,4.2361123316,0.394080207419,0.00124767648627,-0.603578276113,7.441,0.00733502220188,4.0,0.00117790163088,0.0864887380995,0.00042285206206,0.00125885305627,0.0249148842568,0.018547585622,-1.06665296603,-15.1403253118,8.39211180233,0.024993494207,0.00134407166005,0.345954952398,0.194865852085,0.849426457339,0.103248904044,0.00149407510608,7.86,0.259466214298,?,7.47806140383,7.49064761905,0.0232201210702,0.0480896583445,0.729538807322,0.0284569797077,0.299334198986,273.469670925,-2.58266140983,0.0345930963638,0.343320983023,0.026689824087,84.0,0.121997849618,0.0682564392967,1.55847156408,6.70510929326,0.0,3.13010203957,0.24719108605,0.00337250067507,7.47806140383,0.215234035552,488.324013489,0.0178448004404,0.981536882171,0.0526786053327,100.0,0.0864887380995,2.14204500093,169.030353915,0.114440327674,0.00589872441774,0.0,0.0665331141136,0.0,0.647419856513,0.0187344613434,50785.6974029,-2.23579228336,0.9887643442,0.171141195213,0.0744128859516,0.0254470514383,0.0,?,1.39845435663,7.2009,0.0640918157687,1000.0,0.0,0.319465540271,1.0,0.457761310697,-0.137162573423,0.4943821721,0.00126625744695,0.123694582776,0.24719108605,0.0648242041937,5.78109949327,0.228880655349,99.0,0.0225400809745,2.62447938699,'GCVS:Pulsating:CEP' +?,?,?,0.0,0.224861952241,32.4283255916,?,?,?,?,?,?,?,?,?,?,68.0,?,?,?,?,?,?,?,0.0,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.609404190038,?,?,7.8314,?,?,?,?,?,?,?,?,?,8.02095135644,?,?,?,?,?,?,?,?,?,?,114.129194248,7.73455895969,7.73337205882,?,?,?,?,?,153.468792768,?,?,?,?,55.0,?,?,?,?,?,?,?,?,7.73455895969,?,484.803501642,?,?,?,100.0,?,?,80.0324923528,?,0.0111420008714,0.0,?,0.0,?,?,32481.83461,?,?,?,?,?,0.0,67.1488239651,?,?,?,1000.0,0.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +?,?,?,?,0.225588905065,61.3233201351,?,?,?,?,?,?,?,?,?,?,92.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0.0,?,?,?,?,?,-0.0195517902604,?,?,10.7157,?,?,?,?,?,?,?,?,?,1.92408072532,?,?,?,?,?,?,?,?,?,?,11.2617685481,9.99999335625,10.7542271739,?,?,?,?,?,89.349628757,?,?,?,?,20.0,?,?,?,?,?,?,?,?,10.729957361,?,687.062937262,?,?,?,100.0,?,?,345.246016598,?,0.00574770127935,?,?,?,?,?,62522.7272908,?,?,?,?,?,?,92.3307763375,?,?,?,1000.0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'GCVS:Pulsating:CEP' +0.1314082774,0.0170348247449,2.23745206582,0.0,0.195821569109,-65.0661159833,0.0439800993644,1.65576885526,0.0277128675795,6.80494100535,-0.0857190397775,0.0126181233952,-2.06301162847,0.802937446626,99.0,0.466513713462,100.0,0.00195062715914,0.0,0.00460214208958,-0.975865757975,-0.699029099145,4.95759750319,0.384696122021,0.0,-0.392463716224,0.0234648121876,0.0211308761504,11.0878092768,0.0016876183655,13.7667417026,0.0638936712198,0.378193319582,0.0691244973057,0.00147741462489,1.6981975233,-0.102165285155,0.0,0.0,5.72561570491,5.20624370113,0.6715,4.18371463704,-0.405027051299,0.00169919499727,0.804962527415,8.20705,0.00890501190588,2.0,0.00161166906126,5.5439046384,0.00044130433073,0.00165728743022,0.027525907356,0.0227452031093,1.26407698254,-8.71220884317,6.97946970109,0.0270293644566,0.00173918397617,22.1756185536,0.180437440581,1.13972746345,0.121738179239,0.00153223099461,8.4839,16.6317139152,?,8.15974765974,8.177179,0.0258526003133,0.0596207630762,0.924319613386,0.0286408239334,0.0585351808416,262.195367934,1.90038773688,0.0473792439338,0.0511044742348,0.045405141,41.0,0.142765873869,1.61930080147,2.45444812715,6.70510929322,-0.980938376665,1.26753564461,0.0146600331215,0.00105504423379,8.15974765974,0.254711776316,291.34182387,0.022978312116,3.33389985344,0.0352912448715,7.0,5.5439046384,3.20475490193,144.943124203,0.0170348247449,0.017094904273,0.0,0.0452990683004,0.0,0.514708548756,0.0321282899802,28842.8405632,1.19251128224,0.0586401324858,0.179322198841,0.0531299088492,0.0537347928667,0.0,?,-0.566096908201,7.8124,0.0111729789475,641.9,0.0,0.491262989133,0.446492636665,0.0681392989797,-2.53299372764,0.0293200662429,0.00191262630715,-1.49306857514,0.0146600331215,0.0727975579454,0.0467855629263,0.0340696494899,99.0,0.0258813157921,1.82569138595,'GCVS:Pulsating:CEP' +0.570179424554,1.50912774324,0.715200788029,0.0,0.149690907717,49.6412383063,3.22137473318,0.223150129153,0.15990801782,0.0976346712872,-3.13640277635,0.0323605052558,0.115421721153,0.171511928079,99.0,0.24898056912,146.0,0.0133246426483,0.0,0.0196777181274,-0.128544586319,-0.62927469867,4.99693482233,-0.706059841174,0.0,2.33438207876,0.0330568412414,0.0147156550177,11.2006663414,0.00242399900544,0.241665509272,1.60314720089,0.0320263359759,0.0845074856457,0.00227158540468,2.37266824715,0.0925288335168,0.0,0.0,-1.27220665057,0.0351664926205,0.5893,4.16917762343,-0.589764737225,0.0024119829231,0.128919902376,9.6729,0.0081851222742,4.0,0.00230105792443,5.6003331707,0.000440984651344,0.00227778899997,0.0176381152116,0.026860941867,-0.878836620518,26.5743806444,5.88487268503,0.0182305573428,0.00232986128085,22.4013326828,0.105521685615,0.224262599008,0.0725759143934,0.00242614439118,9.8463,16.8009995121,?,9.63119312883,9.62643219178,0.0179310056925,0.114732029737,0.6710374013,0.0207295702761,0.423222373421,142.327947625,-1.20496147946,0.00891774444644,4.52738322971,0.146649076526,73.0,0.178761932731,0.0119694654319,2.22960225503,6.70600858361,-0.683433570686,0.0600657380217,1.07379157773,0.0101735518347,9.63119312883,0.370598026432,52.4145759431,0.0329149003856,2.71681905546,0.00958433783225,100.0,5.6003331707,3.53091500195,97.028900939,1.50912774324,0.0493312144706,0.0,0.230148001317,0.0,2.15339795952,0.0106311659605,7600.11351175,0.788189927685,4.2951663109,0.293524895819,0.02996404675,0.251447978641,0.0,?,-1.31377520635,9.257,0.0258767229332,1000.0,0.0,0.589491771799,6.55464239247,6.03651097294,-1.54298707711,2.14758315545,0.00226623507054,0.706874927339,1.07379157773,0.05117354078,0.0329144226478,3.01825548647,99.0,0.019167020001,-1.97720848686,'GCVS:Pulsating:RR:RRAB' +0.0920375830635,1.48100650301,0.9820493331,0.0,0.378100901233,46.6793702455,5.53651660448,0.172008188783,0.0722105880669,0.133613566214,0.132809066746,0.0304881197387,-0.956942815825,0.117857644379,99.0,0.707291485566,103.0,0.0419497521802,0.0,0.019430497193,-0.181715285914,-0.0767611170802,3.84325872677,0.166444717207,0.0,-2.54276604425,0.071242506435,0.0262761089342,7.7369361263,0.00482993725426,0.10885313166,0.237642135083,0.486412684499,0.0702196446419,0.00511550506951,-2.12773926548,0.958502760162,0.0,0.0,-0.521431696008,0.0391421831277,1.2765,2.76598214953,-0.282403975502,0.00512378438344,-0.724401425254,11.1406,0.0477180922413,4.0,0.00483398841697,3.86846806315,0.000458097626834,0.0050686259146,0.0602946668759,0.0748670782301,-1.7152523539,8.69179246207,4.28651568808,0.0659968720225,0.00471671357224,15.4738722526,0.293700989678,1.53324383419,0.178189736221,0.00506552332937,11.6754,11.6054041895,?,9.99999335625,11.0815747573,0.0685174185865,0.0799380412717,1.56292026372,0.0658196872707,0.242340687342,55.9041277902,1.1908469244,0.0129589697757,4.44301950904,0.0174328812042,60.0,0.212690233583,0.0174588398716,1.59707800394,6.70555890834,-0.860480027169,0.585301167277,1.84550553483,0.0291557846316,11.0213136467,1.04450227778,918.389989578,0.0707221161887,1.44915022511,0.0802025745674,100.0,3.86846806315,2.29086102781,290.738505548,1.48100650301,0.00632570927673,0.0,0.0726609199583,0.0,5.53653742902,0.0675751053611,93675.778937,2.35113982322,7.38202213931,0.1050380482,0.0308174771196,0.0625280876134,0.0,?,-0.934313006862,10.3989,0.0664759946889,1000.0,0.0,2.0900244233,2.28812353305,5.92402601205,-0.824390197262,3.69101106965,0.00519700938044,1.79329991095,1.84550553483,0.183558972003,0.0556285240945,2.96201300602,99.0,0.0662041919278,2.07699291124,'GCVS:Pulsating:RR:RRAB' +0.140385134936,0.195811123826,0.581703571169,0.0,0.284154443072,15.5407192944,0.0747132103626,0.874776668397,0.0573370123298,0.701130050198,2.87953687997,0.00962341385684,0.462002099541,0.236046590378,99.0,0.828693080477,82.0,0.00405490411406,0.0,1.71960612197,-0.365556875516,1.04146124091,5.27258915796,0.376671120325,0.0,-2.138604309,0.0147002649758,0.0389786259719,0.0838243386099,0.0013073299274,6.50664455107,0.30450253073,0.225286176657,0.0504307450872,0.00101910020152,2.15874409033,-0.1343111009,0.0,0.0,-0.808932384843,0.217572529718,0.7827,3.37963852037,0.392780589425,0.00113459718605,1.22733143437,6.49475,0.00859506502703,7.0,0.00093222832732,0.041912169305,0.000458848915093,0.00100353549905,0.0332286247891,0.0174250285189,-0.196176123948,-5.53450431186,8.78576096884,0.0369771789842,0.00110860215888,0.16764867722,0.342749761311,0.693851057568,0.100755505115,0.00104449963853,6.9948,0.125736507915,?,6.51183651139,6.54359634146,0.039011960663,0.127610843412,0.805544722232,0.00998243989477,0.0255009032519,27.8377945669,-0.308998493339,0.0484811635165,0.587433371479,0.0808912282643,20.0,0.0833306215082,0.528636755593,2.12777487224,6.70600858377,-0.664520775739,0.616484674122,0.0249044034542,0.00117405362237,6.51183651139,0.202923181266,1580.06557845,0.0146536651361,-0.996441416992,0.0211414672458,100.0,0.041912169305,3.43782862806,285.967955254,0.195811123826,0.0299177550792,0.0,0.0364267326482,0.0,0.660971763958,0.0254290808053,127985.311854,0.503229225939,0.0996176138168,0.130859784933,0.112220818777,0.0492612437149,0.0,?,1.09765222931,6.2121,0.0534308706365,1000.0,0.0,0.345317690967,2.67798267695,0.783244495306,-2.50351612968,0.0498088069084,0.0012500901129,-0.328414044664,0.0249044034542,0.127393644294,4.81906559392,0.391622247653,99.0,0.0294064825953,-2.3515538147,'GCVS:Pulsating:CEP' +0.0,0.042792265752,0.475962567491,0.0,0.34207608861,-65.0697681495,0.127098318924,0.497475373176,1.0,3.43054264498,1.74150379544,0.0244093311285,1.75975224585,0.252402845466,99.0,1.06094411528,119.0,0.00740997093822,0.0,2.96553234624,-0.0216822013427,-0.977859900447,7.67760327308,-0.405026417978,0.0,-1.70402166749,0.0263301866881,0.0292449822511,0.337207584759,0.00194063631674,4.68355701519,1.0,0.155766842189,0.112425049393,0.00166907934013,-1.386115511,0.0,0.0,0.0,-1.51285790355,0.750773624773,1.292,4.61840215566,-0.486885815868,0.00185405424125,0.129944097224,8.5196,0.00242636091602,10.0,0.00168619808647,0.16860379238,0.000432729053462,0.00203040874953,0.0290752786562,0.0159789097929,-0.545558356458,-8.67570549829,16.8086027,0.0256551557925,0.00237002737981,0.674415169519,0.454105150311,1.4505724139,0.064593214073,0.00183972101633,8.9397,0.505811377139,?,8.41908887111,8.49807058824,0.0270162343899,0.0709655800168,0.452018384087,0.0296967286007,0.0418586372537,262.266111364,-2.70720045756,0.0503874533379,0.128376797256,0.0627086802351,64.0,0.0592345747556,0.875468536236,3.49614248018,6.70600858365,0.0,-1.03172374735,0.0423661063081,0.0038451295543,8.41908887111,0.140116472019,613.01338364,0.0263871738538,0.131192191854,0.0169861558458,8.2,0.16860379238,2.40640586228,145.130056471,0.042792265752,0.0101149533865,0.0,0.407292469906,0.0,0.511071022023,0.00478116396241,72335.5792696,1.47769671573,0.169464425233,0.710235839857,0.152731302908,0.125534951017,0.0,?,0.413434753376,7.6477,0.059566972961,751.94,0.0,0.184887823394,1.0,0.171169063008,-2.17280814465,0.0847322126163,0.00178085879161,-2.83742854025,0.0423661063081,0.120072030017,2.96553234624,0.0855845315039,99.0,0.0266909555586,-2.39283598584,'GCVS:Pulsating:CEP' +0.233540065387,0.0216713510974,0.460471879784,0.0,0.243490337203,-64.1296101982,2.58547791712,0.0599974786269,0.0539603586326,9.3391452223,-1.57391206073,0.0111136554821,-0.351210733953,0.0657725269686,99.0,0.533984892427,111.0,0.0249483136463,0.0,0.188600205815,-0.117173533379,-0.209851338615,4.95578675386,-0.199106532865,0.0,-0.670804843523,0.0254615599643,0.00840880040905,0.247296057155,0.00182690800935,0.272303083658,0.295380736594,0.0198867661004,0.0314332070729,0.00182637555486,-0.0239561556661,-2.43388165266,0.0,0.0,-0.881168142974,1.71894315122,0.7975,4.74441007078,-0.192620946081,0.00209976281346,-0.0702149573675,8.5027,0.00628180643092,3.0,0.00188793639631,0.123648028577,0.000432893982593,0.00178755693853,0.040084845258,0.0566926625327,-0.668539082499,-8.11582335471,6.6587939843,0.0336923366858,0.00187371332867,0.49459211431,0.197283360329,0.195210440427,0.156633192651,0.00165842240106,8.8668,0.370944085732,?,8.45434459765,8.47657387387,0.0296274912235,0.0893681329121,1.00804809432,0.0193429670948,0.174504266583,261.356019619,2.40147987204,0.0149815754294,0.0650140532922,0.00899973902049,43.0,0.174965123048,0.00967717678688,3.00915958764,6.70600858377,-7.26250913477,1.3728764378,0.861825972372,0.033249093077,8.45434459765,0.580587517889,332.107967225,0.025554247332,-2.43910525956,0.0408073412419,100.0,0.123648028577,1.3866837428,143.987333,0.0216713510974,0.0215201815653,0.0,0.0368692697071,0.0,1.82420673264,0.0490035950633,36531.8763947,1.56037325072,3.44730388949,0.306116554358,0.0570706466627,0.0436679608305,0.0,?,3.83359077403,8.0693,0.0654001251941,1000.0,0.0,0.558071155533,3.75018629747,0.0866854043897,2.3211890312,1.72365194474,0.00181667774612,2.77838309373,0.861825972372,0.0926494721268,0.856926665644,0.0433427021948,99.0,0.0317162647278,-2.68638950497,'GCVS:Pulsating:CEP' +-0.405248147445,0.17076333662,0.733034462321,0.0,0.198220831473,-67.7792462062,0.787578396076,1.34635289952,0.298723897809,2.9280289897,-1.77296502888,0.0702775719168,-2.6258296695,0.864296994356,99.0,0.664842480885,101.0,0.0031708392878,0.0,3.48335470034,0.109945194373,0.0,6.54070563378,0.0,0.0,-0.956636892515,0.0387224165549,0.0391593334285,0.133388821031,0.00322705158376,0.947569633187,1.36706430353,0.0700924191922,0.350989038869,0.00267593086467,-1.94518869025,0.491313640803,0.0,0.0,0.0,2.9280289897,0.7194,4.72644697887,0.293757655552,0.00277233365702,0.0307082717931,9.803,0.000647237737032,6.0,0.00290163218921,0.0666944105156,0.000472032240784,0.00333813655178,0.0198190433487,0.00774409302342,-0.874985995642,-10.281110149,12.330632049,0.0203766624762,0.00284080344876,0.266777642062,0.235041086806,0.718344833769,0.0382997794065,0.00254775849963,10.2174,0.200083231547,?,9.79206425704,9.80832376238,0.0190615603378,0.199817091588,0.379077230227,0.0131433793217,1.0,265.022126135,0.29740149499,0.0204293729202,0.512290009859,1.0,42.0,0.077952754539,0.139620712513,1.71608837785,6.70690811525,-0.604575626971,2.07636197938,0.262526132025,0.00223116828507,9.79206425704,0.0822121768446,98.1733137364,0.0389059487661,1.00424499841,0.0237792025296,100.0,0.0666944105156,1.0,149.188106578,0.17076333662,0.00993062278234,0.0,0.0714526652153,0.0,0.868723672695,0.0372347561678,9817.33137364,2.75629386862,1.0501045281,3.68399044527,0.101571026555,0.118896641031,0.0,?,-0.199521124452,9.498,0.025077162464,1000.0,0.0,0.172836550098,4.46206515345,0.683053346478,2.8517992135,0.525052264051,0.00294397245849,-2.05643559615,0.262526132025,0.0655943645331,3.89248138199,0.341526673239,99.0,0.0200336041399,-0.978818462064,'GCVS:Pulsating:CEP' +0.0,0.113220852667,1.62273615628,0.0,0.372163812121,-37.6928254625,9.88627842349,0.741252030714,1.0,4.41614762848,-0.0200824805592,0.0509901630365,-0.900583253985,1.03940076071,99.0,0.653083701916,75.0,0.0102951316578,0.0,0.11581527486,0.0,0.0,2.53535754194,0.0,0.0,0.0594429990802,0.152221857804,1.0,8.63443963852,0.0110610911555,0.151725445688,1.0,1.0,0.230573831886,0.0102980074226,1.71757524964,0.0,0.0,0.0,0.0,4.41614762848,1.5542,2.81684795123,-0.0778715848739,0.0107267888402,0.0,12.571,0.0172276592187,2.0,0.0113374244583,4.31721981926,0.000599213434097,0.0110772434868,0.0674697084177,0.04530550934,0.0,-24.7364860366,3.78609536335,0.0782888613615,0.0108623712418,17.268879277,0.238040664357,1.0,0.20755094165,0.0105509308767,13.3653,12.9516594578,?,9.99999335625,12.5514453333,0.0628723372005,0.265990473788,1.85412582091,0.0383154918994,1.0,335.59386325,0.884120193824,0.12940810161,0.339662558001,1.0,34.0,0.282842398443,0.151725445688,0.479252594516,6.70421024408,0.0,2.81279991809,3.29542614116,0.014642861579,12.4622738921,0.905974520207,1462.33474909,0.151598734286,-1.36561029476,0.0687885321396,100.0,4.31721981926,1.0,279.621102812,0.113220852667,0.0108590720197,0.0,0.329103232425,0.0,0.485546652446,0.0330581689775,108212.771432,-1.83643025495,13.1817045646,0.602866627078,0.0919379210292,0.164696652074,0.0,?,-1.69677909886,11.8111,0.0360179926074,1000.0,0.0,0.782038790266,1.0,0.452883410668,-1.12656122291,6.59085228232,0.0105282632483,-0.246957079697,3.29542614116,0.194301370453,0.11581527486,0.226441705334,99.0,0.0603883207888,2.24634650027,'GCVS:Pulsating:RR:RRAB' +0.0,0.0691880153159,0.177003446808,0.0,0.245552341506,51.4893447976,1.7324552182,0.0754299910423,1.0,2.762083123,1.02455494651,0.00837776456392,1.5611383368,0.0999861834172,99.0,0.717194089392,147.0,0.0106042564586,0.0,1.19268312352,-0.16660275402,-0.592967108171,5.73291974016,-0.222091856759,0.0,0.101928485956,0.0142704192765,0.00420548907058,0.838445669496,0.000922340599738,0.447157118284,1.0,0.00955325958843,0.0337563032824,0.00103096942425,0.416442608883,0.0,0.0,0.0,-1.01382702065,0.442412421638,0.8368,4.35931504406,-0.741278171947,0.000961433077053,0.124642708488,7.0929,0.0102035961993,4.0,0.000920611794003,0.419222834748,0.000478298176823,0.000949690805057,0.0236617655161,0.0340867304142,-0.847298643849,10.5909261277,9.34085632727,0.0230681714956,0.00106485368812,1.67689133899,0.21269599495,0.0680363023312,0.114482909963,0.00104660701259,7.3534,1.25766850424,?,7.0118725321,7.02169319728,0.0227705027781,0.0516751348649,1.05678713722,0.0217431003084,0.178009752912,60.5122172973,0.418185498128,0.0454458900846,0.207564045948,0.00488542652348,68.0,0.0981451271513,0.00665218896242,2.61759244797,6.70645831939,0.0,1.73546580542,0.577485072734,0.012936987883,7.0118725321,0.443693873048,790.177889887,0.0142574137951,-0.757745945439,0.0140293891823,100.0,0.419222834748,1.3622973478,292.3476075,0.0691880153159,0.00729023000907,0.0,0.0335588235256,0.0,0.452223419481,0.0298062638528,115365.971923,-2.12905189305,2.30994029093,0.105715950344,0.0835854182641,0.0701913039801,0.0,?,0.916581770291,6.5166,0.119443644335,1000.0,0.0,0.291695077898,1.0,0.276752061263,0.61985875194,1.15497014547,0.00102187685902,0.968964828074,0.577485072734,0.0644526649149,1.19268312352,0.138376030632,99.0,0.0200106648013,-1.07332116822,'GCVS:Pulsating:CEP' +0.23293822136,0.192035530517,0.751746676372,0.0,0.254401742808,45.1953227157,0.0316196140066,0.778129318329,0.129078662098,2.60368484236,2.09593860471,0.0635736204378,2.4287804267,6.52218419197,99.0,0.822972846663,97.0,0.000624271804779,0.0,0.0290617010425,0.0225404727297,0.0,6.20990317694,0.0,0.0,2.91199892511,0.0596739718846,0.0389175220202,7.58108831486,0.00415571358161,22.7391171756,0.378589118564,0.371512601868,0.365492696978,0.00448818657244,1.91400301669,-0.199712628358,0.0,0.0,0.0,2.60368484236,0.8725,4.17985476033,0.358251356027,0.00425395898754,-0.546431694317,10.7058,0.000923634847555,9.0,0.00383374839617,3.79054415743,0.00045953084621,0.00460304946935,0.0286480295732,0.0113921923704,-0.938551293899,7.79536549152,10.3083640908,0.0245101084954,0.00444183129784,15.1621766297,0.268624702084,1.10865096327,0.0617838875129,0.00412755025009,11.2635,11.3716324723,?,9.99999335625,10.7870948454,0.0260589070893,0.423434207977,0.618475862476,0.0110890748926,1.0,54.7076683651,-0.697147286942,0.0557304124086,0.57610659155,1.0,32.0,0.109174912257,3.99227816679,0.716813540184,6.70600858377,-1.04147085159,0.465474997258,0.0105398713355,0.00541154049117,10.7457974844,0.191213819855,741.291606746,0.0587948343126,2.29227510269,0.065188818844,100.0,3.79054415743,1.0,290.820343428,0.192035530517,0.0285712009438,0.0,0.109339349435,0.0,0.480529482862,0.0355956164557,71163.9942476,2.90728101523,0.0421594853421,4.37882307166,0.073331920103,0.0597721109285,0.0,?,-2.20785436141,10.391,0.0384069486555,1000.0,0.0,0.400343811011,1.77592607059,0.768142122066,-1.52836392879,0.021079742671,0.00451090184961,-1.94536915289,0.0105398713355,0.11189190192,0.0709072826623,0.384071061033,99.0,0.0247529409183,-2.94365974443,'GCVS:Pulsating:CEP' +0.243151655434,1.88199336301,1.21674018789,0.0,0.187224047897,26.3535637924,1.68286014609,0.268247827122,0.127924925433,0.0533558065866,1.69681638126,0.0276602172818,-3.02730233051,0.610153986947,99.0,0.339903162913,81.0,0.00548099301963,0.0,0.0242951489525,0.0,0.115747401009,2.74011496645,0.103314087816,0.0,-1.67136069115,0.0497931107465,1.0,11.6568967364,0.0032744434372,0.891339665679,1.14402375795,1.0,0.101328922342,0.00356431608234,-1.28347292266,0.0598322375116,0.0,0.0,-0.196257329869,0.0313750758818,0.7882,2.834652679,-1.11325507893,0.00373218021979,0.0,10.1076,0.0128120186986,3.0,0.00350261769376,5.82844836818,0.000470956596489,0.00363603556655,0.0350141907265,0.0379368814825,0.0,41.131150779,3.83793184745,0.0333112334677,0.00380725493322,23.3137934727,0.126646679265,1.0,0.118813798656,0.00345688322971,10.2742,17.4853451045,?,9.99999335625,10.032737037,0.0329986785328,0.346252502287,0.974486637216,0.010240027809,0.233653430447,176.080376534,2.93855565534,0.0288823481213,5.64598008902,0.0487426055148,74.0,0.274868620243,0.891339665679,1.20503645782,6.70465973855,-1.64744897437,-2.30798243994,0.56095338203,0.0146634307324,10.0193214837,0.671315061047,74.331491494,0.0497445237903,0.687480820834,0.0216055712315,6.1,5.82844836818,6.35338221357,124.230503855,1.88199336301,0.0079122047677,0.0,0.0500721495049,0.0,1.13660271305,0.0744279219694,5946.51931952,0.533195828973,2.24381352812,0.266442855889,0.0581752735106,0.16168751311,0.0,?,-1.73912581737,9.486,0.0284443083346,281.271,0.0,0.592841193674,7.58039317861,7.52797345203,1.21832685972,1.12190676406,0.00334235495237,-2.81100528494,0.56095338203,0.0958639557748,0.0316191059404,3.76398672601,99.0,0.0333339034589,-1.92190777932,'GCVS:Pulsating:RR:RRAB' diff --git a/mltsp/TCP/Software/feature_extract/MLData/normalize_class_size_in_arff.py b/mltsp/TCP/Software/feature_extract/MLData/normalize_class_size_in_arff.py new file mode 100644 index 00000000..7e18d044 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/MLData/normalize_class_size_in_arff.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +""" + v0.1 create duplicate entries for clases with few entries, so that they are as populated as mos populated classes (its 3am). + +NOTE: MUST MAKE SURE THAT INPUT .arff FILE HAS an extra blank line at end of file. +""" +import sys, os + +class_num_rows_dict = {\ + 'Algol (Beta Persei)':518, + 'Beta Lyrae':240, + 'W Ursae Majoris':1011, + 'Binary':55, + 'T Tauri':15, + 'Wolf-Rayet':34, + 'Type Ia Supernovae':52, + 'BL Lac':28, + 'Microlensing Event':590, + 'Semiregular Pulsating Red Giants':14, + 'Semiregular Pulsating Variable':34, + 'Short period (BL Herculis)':14, + 'Population II Cepheid':17, + 'Classical Cepheid':921, + 'Symmetrical':48, + 'Multiple Mode Cepheid':107, + 'RR Lyrae - Asymmetric':31, + 'RR Lyrae, Double Mode':111, + 'RR Lyrae':16, + 'RR Lyrae, Fundamental Mode':291, + 'RR Lyrae - Near Symmetric':15, + 'RR Lyrae, Closely Spaced Modes':13, + 'Pulsating Variable':111, + 'Beta Cephei':33, + 'Gamma Doradus':41, + 'Lambda Bootis Variable':13, + 'Delta Scuti':150, + 'SX Phoenicis':14, + 'Long Period (W Virginis)':34, + 'Mira':113} + +if __name__ == '__main__': + + arff_fpath = "/home/pteluser/scratch/train_output_allclass_14feat_to_have_nrows_scaled.arff" + + out_arff_fpath = "/home/pteluser/scratch/train_output_allclass_14feat_class_scaled.arff" + os.system("rm " + out_arff_fpath) + fp_out = open(out_arff_fpath, 'w') + + class_name_to_arff_lines_list = {} + for class_name in list(class_num_rows_dict.keys()): + class_name_to_arff_lines_list[class_name] = [] + + lines = open(arff_fpath).readlines() + + for i in range(len(lines)): + fp_out.write(lines[i]) + if "@data" in lines[i]: + break + + # KLUDGE : here we make an asumption in parsing that science class names do not have "." in them. (they do have "," though. + for line in lines[i+1:]: + # KLUDGE: (it's 3:35 am): + i_list = [line.rfind('.'), line.rfind('?'), line.rfind('-1')] + i = max(i_list) + line_a = line[i:] + line_class = line_a[line_a.find(',')+1:] + line_class_stripped = line_class.strip().strip("'") + class_name_to_arff_lines_list[line_class_stripped].append(line) + + # now we have a dict with a bunch of lines representing each class. It's a big dict. + + # Next we generate fake rows for every science class, up to max-n-rows. + + max_n_rows = max(class_num_rows_dict.values()) + + for class_name, n_rows in class_num_rows_dict.items(): + if n_rows == max_n_rows: + for line in class_name_to_arff_lines_list[class_name]: + fp_out.write(line) + continue + i = 0 + while i < (max_n_rows - n_rows): + for line in class_name_to_arff_lines_list[class_name]: + #if "0.426,2.410946,0.065327,0.281546,3.092307,5.834638,0.007759,0.060579,0.37931,-0.066667,3.246999,0.818523,50870.251189,'Pulsating Variable'" in line: + # print 'yo' + #print line + fp_out.write(line) + i += 1 + if i >= (max_n_rows - n_rows): + break + + fp_out.close() diff --git a/mltsp/TCP/Software/feature_extract/MLData/rr-cep.arff b/mltsp/TCP/Software/feature_extract/MLData/rr-cep.arff new file mode 100755 index 00000000..29078bb7 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/MLData/rr-cep.arff @@ -0,0 +1,246 @@ +% date = 2008-04-15 12:18:55.777518 +%% +@RELATION ts + +@ATTRIBUTE distance_in_kpc_to_nearest_galaxy NUMERIC +@ATTRIBUTE beyond1std NUMERIC +@ATTRIBUTE ratio21 NUMERIC +@ATTRIBUTE chi2 NUMERIC +@ATTRIBUTE std NUMERIC +@ATTRIBUTE ecpb NUMERIC +@ATTRIBUTE old_dc NUMERIC +@ATTRIBUTE skew NUMERIC +@ATTRIBUTE third NUMERIC +@ATTRIBUTE example NUMERIC +@ATTRIBUTE max_slope NUMERIC +@ATTRIBUTE n_points NUMERIC +@ATTRIBUTE median NUMERIC +@ATTRIBUTE ratio32 NUMERIC +@ATTRIBUTE ratio31 NUMERIC +@ATTRIBUTE weighted_average NUMERIC +@ATTRIBUTE first_freq NUMERIC +@ATTRIBUTE galb NUMERIC +@ATTRIBUTE gall NUMERIC +@ATTRIBUTE chi2_per_deg NUMERIC +@ATTRIBUTE distance_in_arcmin_to_nearest_galaxy NUMERIC +@ATTRIBUTE ecpl NUMERIC +@ATTRIBUTE wei_av_uncertainty NUMERIC +@ATTRIBUTE second NUMERIC +@ATTRIBUTE ratioRUfirst NUMERIC +@ATTRIBUTE dc NUMERIC +@ATTRIBUTE class {'GCVS:Pulsating:CEP:CEP(B)','GCVS:Pulsating:CEP','GCVS:Pulsating:RR:RRC','GCVS:Pulsating:RR:RRAB','GCVS:Pulsating:RR:RR(B)'} + +@data +1000.0,0.0,?,307644.656121,0.365484410574,54.2925862942,6.52047019868,-0.0313813124921,?,150.615869422,107.0,151.0,6.5371,?,?,6.41140171476,0.0611950007867,2.48403899236,72.1499685158,2050.96437414,100.0,315.386038802,85.7632933105,?,?,6.41140171476,'GCVS:Pulsating:CEP' +1000.0,0.0,?,10392.0203422,0.22543966059,32.1183789119,10.0989011236,-0.615697593761,?,88.48133017,18.0,89.0,10.1581,?,?,10.0834412112,0.00895236892057,-9.73786518756,52.442265309,118.091140252,100.0,306.169138786,20.6181315849,?,?,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,?,251753.407218,0.272377863844,47.3126861423,5.8461773913,0.127172769853,?,115.747951243,19.0,115.0,5.8084,?,?,5.82472159461,0.0025094904129,-1.51345905383,65.9947264019,2208.36322121,100.0,311.789613007,218.483722963,?,?,5.82472159461,'GCVS:Pulsating:CEP' +1000.0,0.0,?,81586.9987555,0.208210388883,65.1224411469,10.9984990196,-0.240683470514,?,101.777899751,57.0,102.0,11.0225,?,?,10.9783557557,0.0167240601632,8.63403270513,82.4459045553,807.792066886,100.0,325.545168094,7.01877522372,?,?,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,?,183625.930469,0.283826475601,49.3622975224,11.2304371257,-0.559713901603,?,165.734345452,40.0,167.0,11.3162,?,?,11.2071443693,0.0182595024522,-0.415300310793,67.8765680271,1106.18030403,100.0,312.900741943,3.97211574745,?,?,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,?,15917.6253128,0.273175070998,58.4904303499,10.110977686,0.196761132298,?,121.411603005,76.0,121.0,10.0767,?,?,10.0683711231,0.0494555207669,4.75900243192,76.1486522399,132.646877607,100.0,318.761095514,10.6256375383,?,?,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,?,30297.8946919,0.323864828807,55.8976359977,9.5109575,-0.35062207124,?,118.942103371,96.0,120.0,9.59555,?,?,9.49110723457,0.00198486658743,-2.28794863922,84.3379919803,254.604157075,100.0,338.188625422,16.4779936395,?,?,9.49110723457,'GCVS:Pulsating:CEP' +1000.0,0.0,?,117833.230592,0.439309706187,1.73443459081,11.192777,-0.609612443527,?,99.4356671375,8.0,100.0,11.2563,?,?,11.1428822495,0.0193356810997,-35.2354240014,32.9625525498,1190.23465244,100.0,313.069188484,7.24432950108,?,?,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,?,23134.3631879,0.272386443601,53.5804126777,9.6953162963,0.419992394571,?,137.148993021,99.0,135.0,9.5434,?,?,9.66535568842,0.00653210398472,-4.05041790992,82.3884865414,172.644501402,100.0,336.048116103,13.5459138751,?,?,9.66535568842,'GCVS:Pulsating:CEP' +1000.0,0.0,?,9717.22473776,0.112483107367,62.6771337892,8.1131745098,-0.600018596942,?,101.535379066,81.0,102.0,8.1503,?,?,8.10607603223,0.000951018594714,3.05553935303,90.542920645,96.2101459184,100.0,347.231827509,55.8316118586,?,?,8.10607603223,'GCVS:Pulsating:RR:RRC' +1000.0,0.0,?,62522.7272908,0.225588905065,61.3233201351,10.7542271739,-0.0195517902604,?,92.3307763375,20.0,92.0,10.7157,?,?,10.729957361,0.00574770127935,1.92408072532,89.349628757,687.062937262,100.0,345.246016598,11.2617685481,?,?,9.99999335625,'GCVS:Pulsating:CEP' +4.83,0.0,?,22978.5104534,0.365459271417,-26.8487748877,10.0837738095,-0.641213301316,?,82.5121765898,26.0,84.0,10.2656,?,?,10.032494121,0.0131951939769,-41.2225536783,355.42881065,276.849523535,48.1,304.163101242,20.2482434649,?,?,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,?,11705.6774177,0.205353693855,55.0436205588,9.76260542636,-0.524304834718,?,128.042630851,71.0,129.0,9.8356,?,?,9.74290685031,0.0123676886115,-3.00301293619,83.7918734612,91.4506048258,100.0,337.690908213,11.2640519048,?,?,9.74290685031,'GCVS:Pulsating:CEP' +18.818,0.0,?,82635.2784559,0.401108046197,16.334155567,11.4245517857,-0.975263481226,?,55.0393712981,7.0,56.0,11.62395,?,?,11.3659263703,0.00667168910755,-28.4383017728,49.1426591464,1502.45960829,4.1,317.741508627,12.0930682533,?,?,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,?,12883.0409327,0.0517305212715,51.954970747,5.99716932515,-0.329036536146,?,162.87695153,104.0,163.0,6.0017,?,?,5.99484490166,0.0146905607497,-5.33621240887,81.2036875673,79.524944029,100.0,334.995432611,156.838143036,?,?,5.99484490166,'GCVS:Pulsating:CEP' +1000.0,0.0,?,99398.2931751,0.196519646066,1.76035167294,11.4107626667,-0.118331833945,?,74.9104723224,49.0,75.0,11.4244,?,?,11.399160595,0.0115446082643,-35.4597768061,33.2275065434,1343.22017804,100.0,313.379762531,8.44416297235,?,?,9.99999335625,'GCVS:Pulsating:RR:RRC' +1000.0,0.0,?,89627.6889369,0.411827929451,19.2420705743,11.9152867925,-0.670251728452,?,52.091048568,18.0,53.0,12.1232,?,?,11.8707205284,0.0169258619683,-27.0588969348,52.372014864,1723.60940263,100.0,319.075763163,8.27821422363,?,?,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,?,45541.4898445,0.182014778825,63.2291665228,10.5929009524,0.190011359217,?,104.964337281,3.0,105.0,10.5965,?,?,10.5827050393,0.00688426741927,3.44238834235,91.5062922369,437.898940813,100.0,349.161764284,10.1621885289,?,?,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,?,143655.846528,0.300443472119,39.5502704198,11.281425,-0.31760214468,?,123.081641092,120.0,124.0,11.3656,?,?,11.2544490144,0.0196746952417,-14.3007775703,70.9920393324,1167.93371161,100.0,327.415078249,5.32022430066,?,?,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,?,14520.9408136,0.180423148818,56.0411624839,9.25602442748,-0.991363386564,?,130.281097227,75.0,131.0,9.3071,?,?,9.24040949709,0.0113720811784,-2.40649492349,85.157718218,111.69954472,100.0,339.645017162,15.661952419,?,?,9.24040949709,'GCVS:Pulsating:CEP' +20.77,0.0,?,136256.835736,0.363660477824,-61.0928940456,12.02637,-0.467765148674,?,99.3426372982,50.0,100.0,12.10595,?,?,11.9606720104,0.0183703304351,-30.887345305,309.985392228,1376.3316741,31.0,280.761329667,2.99413747882,?,?,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,?,18807.4218806,0.128162860192,69.4821425008,7.98672393162,-0.629900337676,?,116.379597225,113.0,117.0,8.0293,?,?,7.97518953109,0.0517102017802,9.4022503713,98.6393074268,162.132947247,100.0,6.38281789578,66.0807506773,?,?,7.97518953109,'GCVS:Pulsating:CEP' +3.33,0.0,0.0,46732.5105344,0.361876320519,-22.7831569526,10.4009706422,-0.856749488019,0.0,107.529573564,74.0,109.0,10.5432,0.0,0.0,10.362314761,0.0269677741321,-78.2881545195,40.8022326291,432.708430874,3.7,349.55885827,12.9927500455,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,18802.2415067,0.297267201825,51.3273891153,10.0661953846,-0.415238910595,0.0,129.105989601,41.0,130.0,10.1359,0.0,0.0,10.0081320796,0.025473148699,-3.80205147681,116.354968793,145.753810129,100.0,33.0740023519,7.94091955848,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,13488.8885694,0.292534469723,26.6166243792,9.84455076923,-0.631853763256,0.0,64.4160140128,60.0,65.0,9.9338,0.0,0.0,9.81874038202,0.00952688184806,-32.2244085884,110.089620595,210.763883896,100.0,12.9789127762,33.665499596,0.0,0.0,9.81874038202,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,10630.4106936,0.159817172631,52.6110069739,9.06549708029,0.637518996972,0.0,137.862212503,103.0,137.0,9.0088,0.0,0.0,9.05839417443,0.00267297181867,-2.07213340711,116.823586692,78.1647845121,100.0,35.1042016298,18.9854191981,0.0,0.0,9.05839417443,'GCVS:Pulsating:CEP' +12.328,0.0,0.0,92057.7821592,0.281813649105,-14.4031798263,11.5348553846,-0.498472242865,0.0,64.8373026168,43.0,65.0,11.5638,0.0,0.0,11.5097104248,0.0175631494771,-73.6883388205,75.971820496,1438.40284624,4.3,354.218670782,8.84869614462,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,7208702.96559,0.109348366569,-61.7131029253,18.9751860465,-0.0983797021253,0.0,300.923656481,67.0,301.0,18.98,0.0,0.0,18.9568203057,0.0139120124567,-43.2403576933,307.697744275,24029.0098853,100.0,306.99321482,0.751885917853,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,5987979.27998,0.118434324849,-61.7968684758,19.05901875,0.124069751738,0.0,320.033898305,76.0,320.0,19.057,0.0,0.0,19.0356737979,0.00436961039372,-43.0965219296,307.64045121,18771.0949216,100.0,306.730833544,0.537937793949,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,5456779.35986,0.123480911153,-61.7737924351,19.1319495268,0.146270921299,0.0,316.899780541,69.0,317.0,19.138,0.0,0.0,19.1102347549,0.112816217266,-43.1383315876,307.655321448,17268.2891135,100.0,306.808069403,0.503698659255,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,17306813.7159,0.115281703253,-61.6135788148,16.9922183908,-0.369208437513,0.0,173.915237787,52.0,174.0,17.0005,0.0,0.0,16.9777000772,0.00169429659062,-43.4209071364,307.760859172,100039.385641,100.0,307.32500155,10.4627682392,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,7047450.30324,0.127330339041,-61.8467388528,18.9550219436,-0.236905381105,0.0,318.865791278,70.0,319.0,18.963,0.0,0.0,18.9247364073,0.0554208416319,-43.0043062024,307.608973748,22161.7934064,100.0,306.559500476,0.651022593739,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,16612809.7941,0.0833116663859,-61.8403393615,17.1065325444,-0.394582383337,0.0,168.817751825,52.0,169.0,17.125,0.0,0.0,17.0982982832,0.0536634958062,-43.0215401244,307.610681671,98885.772584,100.0,306.593514064,10.2492620531,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,4832029.73001,0.127052812275,-61.5379120051,19.2355434783,0.0858619880261,0.0,322.009097998,91.0,322.0,19.235,0.0,0.0,19.2090603888,0.0410205291342,-43.5598523784,307.807542269,15053.0521184,100.0,307.579954068,0.407036190402,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,3.0,0.0,4512431.88979,0.133131265667,-61.7435466174,19.2333115265,0.148581701466,0.0,321.138777633,73.0,321.0,19.225,0.0,0.0,19.2049225028,0.0399372098987,-43.200571261,307.671460489,14101.3496556,100.0,306.925687674,0.375931369969,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,13831880.4576,0.0919829058617,-61.9324820317,17.2505906433,-0.678060311395,0.0,170.84738793,71.0,171.0,17.266,0.0,0.0,17.2391152339,0.0950332237736,-42.8653263184,307.545996575,81364.0026915,100.0,306.307577509,7.9645101428,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,6686542.41083,0.110531136372,-61.6224538023,18.9483405573,-0.0295756572921,0.0,323.056954342,73.0,323.0,18.945,0.0,0.0,18.9272893415,0.0127647569759,-43.4200958071,307.748366318,20765.6596609,100.0,307.329327692,0.613306167959,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,2.0,0.0,3205850.44447,0.149080964744,-61.5595895963,19.2170671642,-0.0719913684743,0.0,267.92425543,57.0,268.0,19.2225,0.0,0.0,19.1869108938,0.0555695614157,-43.533944513,307.787877435,12006.9305036,100.0,307.537740331,0.420432869274,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,14914215.9878,0.122609383317,-61.5029904922,17.3056629213,-0.272328640672,0.0,177.755157391,76.0,178.0,17.3295,0.0,0.0,17.2880039133,0.0603953918283,-43.6376624648,307.822618561,84261.107276,100.0,307.727560518,7.53903334514,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,14728386.8167,0.135196485631,-61.6090691249,17.2726277778,-0.425948558321,0.0,179.68923566,75.0,180.0,17.3025,0.0,0.0,17.2543087601,0.0219580948313,-43.4516226689,307.75350484,82281.490596,100.0,307.389884084,7.42445615859,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,2.0,0.0,3274200.09669,0.14709751696,-61.4985076058,19.3117454545,-0.0201649803238,0.0,274.797164442,82.0,275.0,19.326,0.0,0.0,19.2774325673,0.0224617968269,-43.6497610328,307.823565382,11949.6353894,100.0,307.751155466,0.383411031579,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,3.0,0.0,3452465.09101,0.141245091431,-61.4976476756,19.3950064935,-0.250625741405,0.0,308.095414926,119.0,308.0,19.389,0.0,0.0,19.3659248385,0.0250875744526,-43.6560671779,307.821904524,11245.8146287,100.0,307.764487236,0.320521860873,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,11332918.4809,0.110693208963,-61.4918825255,17.438241573,-0.453570199235,0.0,177.793453046,75.0,178.0,17.4585,0.0,0.0,17.4206206903,0.0401863236499,-43.6645435741,307.826387744,64027.7880275,100.0,307.779174645,5.48450080074,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13846127.2493,0.120365194347,-61.7678781967,17.3104101124,-0.589326618843,0.0,177.501757014,77.0,178.0,17.359,0.0,0.0,17.2898844877,0.00168806987583,-43.1782510551,307.64626004,78226.7076231,100.0,306.892696301,6.98631381124,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,5529705.15254,0.112128413783,-61.625920302,19.0954806452,-0.0281865950493,0.0,309.902311337,95.0,310.0,19.1015,0.0,0.0,19.0700117317,0.0158597278078,-43.4324887961,307.737739297,17895.4859305,100.0,307.35916921,0.537255441323,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,5792355.08227,0.102749984934,-61.8755564603,19.0842564935,0.0341630135331,0.0,308.028350583,69.0,308.0,19.0825,0.0,0.0,19.0662711786,0.00350269010158,-42.9894278384,307.57408829,18867.6061312,100.0,306.545771533,0.570549924545,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,8.0,0.0,1704664.68062,0.145552177018,-61.6505989267,19.3532105263,-0.0400707774658,0.0,209.002273549,78.0,209.0,19.353,0.0,0.0,19.3198045113,0.0382357964565,-43.3937364621,307.719492782,8195.50327223,100.0,307.290361298,0.285845938186,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,22183421.8183,0.121223860038,-61.7076479322,16.64,-0.482177335818,0.0,165.890336917,76.0,166.0,16.651,0.0,0.0,16.6239922852,0.116324274192,-43.2929904334,307.682195987,134444.980717,100.0,307.106226781,16.1394448031,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,10.0,0.0,3538075.40259,0.159217501367,-61.7347689828,19.3681233766,-0.0369368910288,0.0,307.88273851,92.0,308.0,19.3755,0.0,0.0,19.3251772704,0.0371937584447,-43.2496046749,307.662375892,11524.6755785,100.0,307.028527854,0.322265137196,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,12649040.6057,0.109344076066,-61.6211031818,17.2919611111,-0.501949207115,0.0,179.698227585,69.0,180.0,17.321,0.0,0.0,17.2780938476,0.118130331617,-43.4524094627,307.735695924,70665.031317,100.0,307.399959916,6.69725077856,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,6244194.51811,0.122941290698,-61.6537916358,18.9548488746,-0.0544810836724,0.0,311.013928458,120.0,311.0,18.954,0.0,0.0,18.9313310718,0.0404578336143,-43.3948144422,307.714382585,20142.5629616,100.0,307.294954794,0.629561567029,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,3915513.39475,0.115339830252,-61.9140935745,18.9524263959,-0.0692731362875,0.0,196.91092242,3.0,197.0,18.961,0.0,0.0,18.9406247318,0.0197915696187,-42.9313613748,307.543958386,19977.1091569,100.0,306.442370394,0.754239391057,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,2436940.2255,0.143141417081,-61.7960494955,19.3112378855,-0.0406939732974,0.0,227.002796334,216.0,227.0,19.311,0.0,0.0,19.2791206883,0.00240198318228,-43.1428856222,307.621284758,10782.9213518,100.0,306.833290165,0.406842604395,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,4365402.38129,0.11843245379,-61.3800389129,19.0559822064,-0.0660772360754,0.0,280.955506585,77.0,281.0,19.059,0.0,0.0,19.032140625,0.00989750199216,-43.876394949,307.890829164,15590.7227903,100.0,308.167853342,0.529041746684,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,5642819.00744,0.129158367386,-61.3927775167,19.1843670886,0.136361264153,0.0,315.94017094,114.0,316.0,19.188,0.0,0.0,19.1557036856,0.0356331788587,-43.8571385777,307.881252299,17913.7111347,100.0,308.134429912,0.505402244592,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,4593021.05748,0.110850373003,-61.7570222289,19.143,0.0597190736448,0.0,308.951582576,110.0,309.0,19.146,0.0,0.0,19.1313239442,0.01798538522,-43.2168465553,307.644825782,14912.4060308,100.0,306.971009202,0.463108327521,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,11543025.6239,0.111349625469,-61.6718055502,17.4800061728,-0.323997338714,0.0,161.842658741,75.0,162.0,17.497,0.0,0.0,17.462860601,0.00194182475537,-43.3686956285,307.700074305,71695.8113286,100.0,307.249483937,6.94444444444,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,9026798.20895,0.0823708181193,-61.5379992978,17.6226257669,-0.56370501143,0.0,162.802539107,52.0,163.0,17.644,0.0,0.0,17.612896012,0.0104544375575,-43.6062425697,307.786119432,55720.9765985,100.0,307.682596219,5.22996140288,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,7976072.49495,0.113454784058,-61.6976790923,18.8957850467,0.0626081001945,0.0,321.013336862,89.0,321.0,18.895,0.0,0.0,18.8735362692,0.00450897754348,-43.3283355412,307.68078199,24925.2265467,100.0,307.17779299,0.743590620645,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,5887095.36976,0.121104487071,-61.7312088253,19.1752770701,-0.183774533503,0.0,313.857224771,74.0,314.0,19.184,0.0,0.0,19.1452414283,0.0938546990014,-43.2705050509,307.658203491,18808.611405,100.0,307.072486257,0.539707057803,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,1.0,0.0,3328901.17808,0.120157838998,-61.525572863,19.1900264901,0.314370103091,0.0,302.094870726,298.0,302.0,19.184,0.0,0.0,19.1712164451,0.0517657584647,-43.6349800367,307.790958753,11059.4723524,100.0,307.737450886,0.345754446575,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,10678029.2409,0.127848788783,-61.8162506675,17.2967625899,-0.439660588608,0.0,138.685394555,60.0,139.0,17.336,0.0,0.0,17.2795960858,0.00497616383508,-43.1242199795,307.600425409,77377.0234847,100.0,306.805528079,9.23096805162,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,15363453.1977,0.104660180241,-61.7317384133,17.311106383,-0.339375310543,0.0,187.832972614,97.0,188.0,17.3265,0.0,0.0,17.2961329392,0.0309687086108,-43.2863624307,307.650354895,82157.5037309,100.0,307.108058425,7.14770737286,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13537049.4056,0.0943426062584,-61.799409396,17.3181428571,-0.299747834064,0.0,188.881585781,100.0,189.0,17.329,0.0,0.0,17.30217703,0.00166410009798,-43.1674712608,307.605598459,72005.5819446,100.0,306.890230798,6.18693196231,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,35645835.5459,0.105796323663,-61.3960365815,16.2192642487,-0.203023687612,0.0,192.907992851,100.0,193.0,16.227,0.0,0.0,16.2103920432,0.0906711886433,-43.8796786402,307.865829913,185655.393468,100.0,308.18648114,21.9283819047,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,12520643.7241,0.0835211723419,-61.5738460888,17.4686391753,-0.27900188035,0.0,193.923836228,68.0,194.0,17.4755,0.0,0.0,17.458509721,0.0398458071559,-43.5689978974,307.751090835,64873.8016794,100.0,307.625255702,5.25947626135,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,25.0,0.0,2796173.70048,0.147085822119,-61.6965530597,19.3371080247,0.00218486080327,0.0,324.026945256,73.0,324.0,19.3355,0.0,0.0,19.3035739901,0.0637964951466,-43.3525720454,307.67151814,8656.8845216,100.0,307.230795766,0.244872012745,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,21115261.186,0.097304153476,-61.7438411031,16.9380259067,-0.498852757765,0.0,192.886417276,68.0,193.0,16.948,0.0,0.0,16.923495105,0.0163407342309,-43.2730072816,307.638842928,109975.318677,100.0,307.086716293,10.4935097642,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13453124.1803,0.104744415417,-61.5062938387,17.4264895833,-0.465543337146,0.0,191.724837407,68.0,192.0,17.4515,0.0,0.0,17.4103487648,0.0185894670478,-43.6922684385,307.792508724,70435.2051325,100.0,307.85059211,5.64413715253,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,22310669.9268,0.0986037112474,-61.7384583657,16.8774145078,-0.591122132177,0.0,192.650875325,91.0,193.0,16.908,0.0,0.0,16.8670318524,0.0950914497448,-43.2853284791,307.641108841,116201.405869,100.0,307.110383399,11.2155402526,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,19467305.515,0.0777383606134,-61.5089162581,17.0006185567,-0.147332943552,0.0,193.950014702,77.0,194.0,17.005,0.0,0.0,16.9971774241,0.00544093687623,-43.6909942986,307.789274961,100866.867953,100.0,307.849623128,9.58607335263,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,10073638.5361,0.0952991339835,-61.7063900102,17.5615078534,-0.220633724413,0.0,190.853371266,99.0,191.0,17.575,0.0,0.0,17.5488581858,0.0029593653845,-43.3433664616,307.661428376,53019.1501901,100.0,307.21715575,4.19762414473,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,17933606.6299,0.109670935814,-61.8071784764,17.0667979275,-0.664301137981,0.0,192.625263158,70.0,193.0,17.1,0.0,0.0,17.0452537373,0.00166344294683,-43.1643322623,307.595794505,93404.2011976,100.0,306.888553392,8.49617672048,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,25168084.5399,0.053560000775,-61.7295281893,16.6380106383,-0.252620364487,0.0,187.954933301,66.0,188.0,16.642,0.0,0.0,16.6355875503,0.0537137894293,-43.3053756325,307.645033852,134588.687379,100.0,307.148760735,14.7329650092,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,41278062.9172,0.0703084129176,-61.3630276359,15.3775307263,-0.0954217258602,0.0,178.971261378,63.0,179.0,15.38,0.0,0.0,15.3767452541,0.00505953072942,-43.948882024,307.88139616,231899.229872,100.0,308.315600175,36.2148263499,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,3.0,0.0,3510974.57551,0.128853883546,-61.6625792203,19.1999723077,-0.0129335073776,0.0,324.948758007,73.0,325.0,19.203,0.0,0.0,19.1678942819,0.0460896405619,-43.425353017,307.687831112,10836.3412824,100.0,307.368753779,0.31202231334,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,20375767.131,0.104636074647,-61.5251934723,16.8465388601,-0.373281698889,0.0,192.640241735,73.0,193.0,16.878,0.0,0.0,16.8312636192,0.0394190830426,-43.6698747493,307.775346765,106123.78714,100.0,307.814375986,10.3134249853,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,9107091.85092,0.105767064485,-61.61504855,17.6099947368,-0.198623450892,0.0,189.816701651,100.0,190.0,17.627,0.0,0.0,17.5956285849,0.147050715959,-43.5121370663,307.717269185,48185.6711689,100.0,307.528088712,3.89468764605,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,12343092.8798,0.117505113994,-61.8133989912,17.389787234,-0.500441157376,0.0,187.496343876,65.0,188.0,17.4365,0.0,0.0,17.3662758909,0.030425886623,-43.1586179589,307.589360698,66005.844277,100.0,306.880090423,5.56436580141,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,8895996.82809,0.107866825903,-61.7968869926,17.5680842105,-0.597046918991,0.0,189.741700773,100.0,190.0,17.592,0.0,0.0,17.5574780004,0.00233149249098,-43.1880320434,307.600129834,47068.7662862,100.0,306.934226605,3.88021015218,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,12454501.8545,0.109135607738,-61.7781158114,17.3989424084,-0.518662387711,0.0,190.615922909,68.0,191.0,17.434,0.0,0.0,17.3837387338,0.00166376851137,-43.223269331,307.611546913,65550.0097608,100.0,306.999718173,5.64904728817,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,35063534.6288,0.106632419872,-61.5921960941,16.1322303665,-0.308470741363,0.0,190.979050452,65.0,191.0,16.134,0.0,0.0,16.1214044569,0.00166376851137,-43.5546769128,307.730981748,184544.919099,100.0,307.606378451,22.5973380336,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,18685216.0112,0.0490087657468,-61.4809822855,16.8957526316,-0.367170414988,0.0,189.912917443,67.0,190.0,16.9035,0.0,0.0,16.8932053997,0.00166393354114,-43.7498600788,307.802598568,98863.5767788,100.0,307.960056722,9.99720078378,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,7214433.96051,0.0871798801066,-61.6908131195,17.7967157895,-0.445262110298,0.0,189.836963845,68.0,190.0,17.812,0.0,0.0,17.7819591585,0.0172249569049,-43.3817532674,307.666664127,38171.6082567,100.0,307.291590389,2.92623545661,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,3668999.04501,0.124948577099,-61.3340665984,19.1161575342,-0.0777425697927,0.0,291.872624121,65.0,292.0,19.1245,0.0,0.0,19.0891906432,0.117565809576,-44.0044924877,307.897382017,12608.2441409,100.0,308.417477032,0.382888410619,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,18517617.8854,0.0970314084311,-61.5784282873,17.2402669903,-0.260991722076,0.0,205.93749094,14.0,206.0,17.2455,0.0,0.0,17.2295872046,0.0190905659195,-43.5824846845,307.738216799,90329.8433437,100.0,307.658332794,7.49934380742,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13486770.3336,0.0846016489243,-61.7075467413,17.3730048544,-0.808810306047,0.0,205.76318059,12.0,206.0,17.393,0.0,0.0,17.3609454689,0.0724641454023,-43.3543832345,307.65479233,65789.1235786,100.0,307.242413203,5.20529691014,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13634306.1478,0.107397649798,-61.380306898,17.3933743842,-0.457238697621,0.0,202.643193297,81.0,203.0,17.424,0.0,0.0,17.3770359614,0.00687860476009,-43.9302306287,307.864910728,67496.5650882,100.0,308.286814732,5.17911986037,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,14304237.3104,0.0949709266092,-61.5262557609,17.3993609756,-0.64878742128,0.0,204.721861907,15.0,205.0,17.423,0.0,0.0,17.387031434,0.0770121870801,-43.679733292,307.76921502,70118.810345,100.0,307.836940241,5.56368471711,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,32924209.6719,0.0803388894574,-61.5902693274,16.4496097561,-0.186025659019,0.0,204.957758464,111.0,205.0,16.453,0.0,0.0,16.444576604,0.00132509748644,-43.5680822351,307.727619516,161393.184666,100.0,307.634728961,17.062808197,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,36243447.5996,0.104238513631,-61.3550770884,16.1856923077,-0.195259836922,0.0,194.924036561,105.0,195.0,16.192,0.0,0.0,16.1790053026,0.0565988384581,-43.9816446205,307.877432556,186821.894843,100.0,308.382175964,22.1946022727,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,5055628.20913,0.105849697164,-61.6870662133,19.1733176471,-0.0621120080915,0.0,339.837247491,14.0,340.0,19.1825,0.0,0.0,19.1569627398,0.0525821015878,-43.3991761557,307.664208535,14913.357549,100.0,307.327664699,0.411445762808,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,10947.9841438,0.191943255014,52.4390922819,10.0997253247,0.00108003810058,0.0,154.172881726,43.0,154.0,10.0884,0.0,0.0,10.0746529049,0.0398879305342,-2.18624918147,116.969905932,71.5554519205,100.0,35.2186371385,7.7328157502,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,24759986.5389,0.088134146887,-61.743191577,16.8208252427,-0.494550533776,0.0,205.795991091,13.0,206.0,16.8375,0.0,0.0,16.8115396476,0.00132499786417,-43.3011332381,307.627186555,120780.422141,100.0,307.148755964,11.2594861171,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,5079696.43521,0.132856064259,-61.6172737822,19.1450264706,-0.132712671449,0.0,339.849583627,13.0,340.0,19.1535,0.0,0.0,19.1165655324,0.0550270747083,-43.5266496607,307.707387372,14984.3552661,100.0,307.561812681,0.411398536985,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,4.0,0.0,4086272.46001,0.153289618877,-61.3561297245,19.3446123077,-0.31022257309,0.0,324.892718723,6.0,325.0,19.351,0.0,0.0,19.3051296617,0.0367286040959,-43.9839657856,307.874774531,12611.9520371,100.0,308.388053226,0.3309879527,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,31482869.3175,0.0733868817029,-61.3938550293,16.4958520408,-0.322514654703,0.0,195.950727273,4.0,196.0,16.5,0.0,0.0,16.4909244999,0.102734112707,-43.9213965547,307.849230394,161450.611884,100.0,308.277012811,17.2202992888,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,5157871.22825,0.122261804554,-61.5400092257,19.1368093842,-0.0708344463245,0.0,340.889724704,11.0,341.0,19.143,0.0,0.0,19.1103471872,0.0097233325584,-43.6670777532,307.755038199,15170.2094948,100.0,307.818632762,0.424276417783,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,20125460.8256,0.140500546749,-61.3592504675,17.0573520408,-0.539657224355,0.0,195.459732819,10.0,196.0,17.1045,0.0,0.0,17.0413314667,0.0812083182319,-43.9816740954,307.871284338,103207.491413,100.0,308.385238985,9.3519124661,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,10846174.4697,0.082486819955,-61.5379007356,17.629795122,-0.341788725449,0.0,204.834958059,2.0,205.0,17.644,0.0,0.0,17.6209266316,0.00132509748644,-43.6716675539,307.755979344,53167.5219103,100.0,307.827305893,3.96053720727,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,31147179.7577,0.0943798052456,-61.4716297114,16.50751,-0.227117059155,0.0,199.975892668,8.0,200.0,16.5095,0.0,0.0,16.5006193403,0.0589770163674,-43.7860169048,307.799313528,156518.491245,100.0,308.033365911,16.6744480758,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,15440741.392,0.099573717987,-61.4534177505,17.284961165,-0.382156113554,0.0,205.749566624,9.0,206.0,17.306,0.0,0.0,17.2698138184,0.00350279676613,-43.8201442271,307.809895829,75320.689717,100.0,308.095859229,6.05304892074,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,21578362.3324,0.0652411324671,-61.6655531241,17.0343186275,-0.449504070663,0.0,203.824329873,12.0,204.0,17.049,0.0,0.0,17.0280039261,0.00262496421098,-43.4490817153,307.672731764,106297.351391,100.0,307.423467954,9.36189334931,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,17762135.5026,0.107865621273,-61.4515246202,17.1510878049,-0.67709975157,0.0,204.619274865,7.0,205.0,17.183,0.0,0.0,17.1358339022,0.0236603955755,-43.825690075,307.810051197,87069.2916793,100.0,308.106769595,7.37098926047,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,8040498.28427,0.10311267216,-61.5835339896,18.8359300292,-0.0981971751109,0.0,342.853109743,0.0,343.0,18.844,0.0,0.0,18.8211183816,0.0263127301033,-43.5946095378,307.725191498,23510.2289014,100.0,307.688778663,0.70602023454,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,11190252.0042,0.0972379780053,-61.8623502037,17.6450048544,-0.629405999903,0.0,205.673683019,111.0,206.0,17.673,0.0,0.0,17.6280650894,0.111348389358,-43.0986769098,307.545339254,54586.5951423,100.0,306.78005982,3.92819263857,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,15919063.1013,0.120125546467,-61.5197880089,17.1955693069,-0.554407452931,0.0,201.643155695,1.0,202.0,17.226,0.0,0.0,17.1780484276,0.0218230958633,-43.7069362919,307.765978835,79199.3189118,100.0,307.892573687,6.66591119673,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,4765535.48998,0.127091586743,-61.5745773231,19.2243730887,0.207328108599,0.0,327.159510799,12.0,327.0,19.215,0.0,0.0,19.1984815007,0.0031427465908,-43.6150699708,307.728775925,14618.2070245,100.0,307.727812648,0.418074008297,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,24132178.462,0.0982672641932,-61.3612447561,16.7975959596,-0.412944462097,0.0,198.018814003,4.0,198.0,16.796,0.0,0.0,16.7898402945,0.0013575382217,-43.9883055025,307.865176811,122498.367828,100.0,308.401306758,12.0566178776,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,5770374.7453,0.129052527803,-61.7627216024,19.1712090909,-0.27713102534,0.0,329.71981759,13.0,330.0,19.1875,0.0,0.0,19.142206078,0.0360997553627,-43.2820970538,307.607499228,17539.1329644,100.0,307.119916092,0.503743062828,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,27596235.9263,0.110057649751,-61.4993096321,16.5346865672,-0.534842780563,0.0,200.850426059,13.0,201.0,16.547,0.0,0.0,16.5256492232,0.00174881202075,-43.7497570853,307.7758626,137981.179631,100.0,307.972820733,14.401751253,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,16291270.5179,0.0910190642729,-61.6626980595,17.3331725888,-0.478256757532,0.0,196.865667339,6.0,197.0,17.345,0.0,0.0,17.3255653806,0.116197405626,-43.4620290682,307.670972883,83118.7271321,100.0,307.450210402,6.95183076463,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,15195586.6468,0.104596135478,-61.3854698927,17.3274293194,-0.337239010645,0.0,190.773518561,7.0,191.0,17.348,0.0,0.0,17.310458045,0.00135844796817,-43.951350227,307.84725857,79976.7718255,100.0,308.337138317,6.7818220043,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,118.0,0.0,2393105.71512,0.230976077255,-61.4214948182,19.6181150442,0.133270487838,0.0,338.967431193,13.0,339.0,19.62,0.0,0.0,19.541271993,0.0049710537046,-43.8892105091,307.823983271,7080.19442344,100.0,308.225707567,0.165375688914,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,14482209.8464,0.105609018823,-61.5375758311,17.297459596,-0.48035672697,0.0,197.810846714,0.0,198.0,17.314,0.0,0.0,17.2808384335,0.0409017571806,-43.6889485479,307.748405591,73513.7555653,100.0,307.865338062,6.17756801502,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,4444425.11068,0.127905876686,-61.5212345822,19.0712380952,-0.0921371435249,0.0,336.057058947,10.0,336.0,19.068,0.0,0.0,19.0454294669,0.0138737050252,-43.7206949461,307.757437678,13266.9406289,100.0,307.924052921,0.383691426146,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,31586717.9106,0.0820776954102,-61.4781268419,16.3648140704,-0.338210012671,0.0,198.93695785,11.0,199.0,16.37,0.0,0.0,16.3602110303,0.0889008641184,-43.7956260717,307.785286452,159528.878336,100.0,308.059238547,17.7522145888,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,17235169.9996,0.102879885525,-61.281574743,17.2501185567,-0.577298775805,0.0,193.737401222,9.0,194.0,17.2735,0.0,0.0,17.2346215749,0.0453386437605,-44.1368331061,307.91084808,89301.3989618,100.0,308.671317868,7.6684764271,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,18993108.5032,0.0948632853979,-61.3177527733,17.1505151515,-0.295129590553,0.0,197.763787782,4.0,198.0,17.171,0.0,0.0,17.1404076716,0.0157192972221,-44.0753974652,307.887275595,96411.7182902,100.0,308.562079494,8.416374899,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,15908719.7429,0.117213921796,-61.6324117076,17.220774359,-0.335375291397,0.0,194.737357922,13.0,195.0,17.244,0.0,0.0,17.2014597931,0.11222824592,-43.5280509956,307.684739629,82003.710015,100.0,307.575521373,7.15676170846,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13973758.9751,0.0946775873174,-61.6650616568,17.4183045685,-0.283185860972,0.0,196.856519993,109.0,197.0,17.431,0.0,0.0,17.4063682241,0.00136306497236,-43.4709912008,307.663450381,71294.6886483,100.0,307.471751916,5.84013222059,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,1.0,0.0,4826080.85217,0.129290236306,-61.3311731276,19.1397774481,0.126511025379,0.0,337.136995609,7.0,337.0,19.132,0.0,0.0,19.1136032247,0.0794240461847,-44.0555563979,307.877087734,14363.3358695,100.0,308.528017208,0.390868987751,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,3.0,0.0,3822285.75071,0.137188205549,-61.7766670459,19.3573107692,-0.155653562639,0.0,324.82063197,13.0,325.0,19.368,0.0,0.0,19.3217887354,0.0450507391892,-43.2719841068,307.591883488,11797.1782429,100.0,307.10704782,0.327681912614,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,10.0,0.0,3766426.03953,0.136889741189,-61.4330416082,19.3323923304,-0.003322012327,0.0,338.901696142,88.0,339.0,19.338,0.0,0.0,19.307328016,0.0326776154547,-43.8809157459,307.810989361,11143.2723063,100.0,308.215640967,0.297010617833,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,27776911.0822,0.0939746009466,-61.6022353366,16.6342864322,-0.138604951242,0.0,198.848020664,1.0,199.0,16.647,0.0,0.0,16.6228018437,0.0868592283451,-43.5849074795,307.702446169,140287.429708,100.0,307.680425126,14.3992627577,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,14491694.8969,0.111561669067,-61.5173341442,17.398905,-0.451805397533,0.0,199.591671685,11.0,200.0,17.4345,0.0,0.0,17.3839692047,0.032325692657,-43.7346756533,307.756590609,72822.5874216,100.0,307.952236172,5.86214577984,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,5353013.90287,0.129501939437,-61.3905835576,19.0099503817,0.137920314729,0.0,261.875335191,56.0,262.0,19.019,0.0,0.0,18.9843064784,0.00370088237631,-43.9588107658,307.836179466,20509.6318118,100.0,308.357289582,0.707650980875,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,6468351.79711,0.108771024597,-61.3947731857,18.9394086379,-0.053341568098,0.0,300.974710945,111.0,301.0,18.941,0.0,0.0,18.9216905584,0.0164774230253,-43.954220745,307.832219825,21561.172657,100.0,308.350163977,0.711956092244,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,14899499.827,0.110893593086,-61.6886833086,17.2271939394,-0.422277930477,0.0,164.686384705,94.0,165.0,17.26,0.0,0.0,17.2121475618,0.0530323575307,-43.4381992503,307.644134483,90850.6087014,100.0,307.415434026,9.2012403272,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,32865504.589,0.103383761655,-61.2475630477,16.1956086957,-0.399773092171,0.0,160.88683902,66.0,161.0,16.207,0.0,0.0,16.1839208759,0.0293605948465,-44.2096495779,307.925569094,205409.403681,100.0,308.807028696,28.9059112589,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,5733786.55464,0.122862817655,-61.3844060664,19.1268191126,0.0649136394013,0.0,293.027869281,63.0,293.0,19.125,0.0,0.0,19.1039767729,0.102237105198,-43.9727803689,307.838568937,19636.2553241,100.0,308.383698899,0.639947165962,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,14992319.9541,0.102636695556,-61.4349092429,17.2111785714,-0.457252114478,0.0,167.728870584,52.0,168.0,17.239,0.0,0.0,17.20044354,0.014909553285,-43.8857551757,307.805950975,89774.3709828,100.0,308.227676277,8.95768390125,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,14920229.0502,0.0957637989263,-61.6802380748,17.1675182927,-0.447251432447,0.0,163.857005674,53.0,164.0,17.1825,0.0,0.0,17.1567039744,0.00169366492247,-43.4550163373,307.648717848,91535.1475473,100.0,307.446886218,9.55748829208,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,22580203.7285,0.118992546717,-61.3528238941,16.6076586826,-0.455554366528,0.0,166.805737656,51.0,167.0,16.627,0.0,0.0,16.5921990863,0.0461465643041,-44.0300008848,307.857531447,136025.323666,100.0,308.487266352,16.5620497193,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,18356489.1636,0.0844783499363,-61.5600452581,16.8978220859,-0.58152997189,0.0,162.83446645,69.0,163.0,16.915,0.0,0.0,16.8902017613,0.0327179372048,-43.6720363815,307.723502312,113311.661504,100.0,307.843777178,12.9595790729,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,12524389.9816,0.123103243489,-61.3016834383,17.2943703704,-0.396714311665,0.0,161.877105301,51.0,162.0,17.3075,0.0,0.0,17.2720417295,0.0226498300901,-44.1244425603,307.887198187,77791.242122,100.0,308.658601772,7.92700810933,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13485301.5947,0.117652036217,-61.2901707767,17.2220666667,-0.476458528143,0.0,164.732811594,54.0,165.0,17.25,0.0,0.0,17.206454816,0.090835336649,-44.1436813376,307.894829896,82227.4487479,100.0,308.692661078,8.68409854715,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,25958006.2988,0.0920299454783,-61.3249126986,16.5250363636,-0.164701694303,0.0,164.910547962,56.0,165.0,16.534,0.0,0.0,16.5159778362,0.112652384431,-44.0867306872,307.871239664,158280.526212,100.0,308.592267472,20.3177699216,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,23635157.2259,0.0981656926687,-61.592305361,16.6221097561,-0.21474100014,0.0,163.872918545,50.0,164.0,16.635,0.0,0.0,16.6070256232,0.0305586909082,-43.6210715331,307.700165417,145000.964576,100.0,307.753613538,17.6603560328,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,5081705.17877,0.117126421851,-61.3997735651,19.0462290076,-0.0622694438191,0.0,261.920638253,76.0,262.0,19.052,0.0,0.0,19.0246547876,0.101616841055,-43.9594261822,307.822381412,19470.1347846,100.0,308.365263288,0.554789637639,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,4624250.37912,0.118560557667,-61.3824604399,19.1731830508,-0.0366952154803,0.0,294.864404129,87.0,295.0,19.182,0.0,0.0,19.1451701994,0.0598173559754,-43.997286456,307.829667737,15728.7427861,100.0,308.436427929,0.492911197612,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,7649344.98891,0.061483426172,-61.332625759,17.802554878,-0.359099394636,0.0,163.922239066,67.0,164.0,17.811,0.0,0.0,17.7998406177,0.0706499100683,-44.0829708988,307.861691778,46928.4968645,100.0,308.589564654,4.14353194663,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,19541591.3801,0.0694404184335,-61.1739118278,16.8549302326,-0.233355245378,0.0,171.932983424,84.0,172.0,16.8615,0.0,0.0,16.8482106422,0.0253364355081,-44.3596996461,307.96067493,114278.312164,100.0,309.08345633,12.6507014814,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,11463773.9385,0.0925844938047,-61.3625997237,17.5453815029,-0.769140914388,0.0,172.639688318,62.0,173.0,17.582,0.0,0.0,17.5356312793,0.0478597610918,-44.036397056,307.840055992,66649.8484799,100.0,308.508458733,5.84521861118,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,25785703.6644,0.0995619456767,-61.3543439458,16.4792993197,-0.164490882176,0.0,146.913518103,56.0,147.0,16.489,0.0,0.0,16.4701892281,0.00173776575953,-44.051948403,307.844703018,176614.40866,100.0,308.536822895,24.6676040356,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13823014.6914,0.110291362067,-61.5554364313,17.2288383234,-0.249795594035,0.0,166.853166319,57.0,167.0,17.244,0.0,0.0,17.2180937839,0.00173294536296,-43.7031894832,307.715678549,83271.17284,100.0,307.909549173,8.52820276655,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,8363155.07368,0.112033458591,-61.6143970925,17.690147929,-0.448729427697,0.0,168.72481517,64.0,169.0,17.719,0.0,0.0,17.673879897,0.00219736547945,-43.6045925879,307.675622544,49780.6849624,100.0,307.732663679,4.28974664756,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,13649878.1599,0.0989247720903,-61.5759460233,17.2863895349,-0.341678927665,0.0,171.979003384,65.0,172.0,17.2885,0.0,0.0,17.2716767046,0.00173189397827,-43.6710392492,307.700766725,79823.8488884,100.0,307.852833993,7.48951467945,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,12639868.6345,0.0873025361764,-61.3061154754,17.3246823529,-0.462230559952,0.0,169.879217858,64.0,170.0,17.337,0.0,0.0,17.3148567528,0.129110228973,-44.1414508627,307.872378739,74792.1220979,100.0,308.69934728,7.24406710904,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,1.0,0.0,2732153.86014,0.135583087333,-61.2142073859,19.3209962406,-0.0556127596978,0.0,266.034371199,83.0,266.0,19.3185,0.0,0.0,19.294705291,0.02363377656,-44.3018574777,307.929576852,10310.0145666,100.0,308.98574187,0.354513757793,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,17746494.2783,0.115939161532,-61.3741801283,16.8271724138,-0.502792208254,0.0,173.728187023,66.0,174.0,16.8535,0.0,0.0,16.8084480488,0.146800555298,-44.026958309,307.827561548,102580.891782,100.0,308.49599344,11.3143930394,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,12669670.2717,0.0959183602724,-61.5263928046,17.338744186,-0.548296287311,0.0,171.705328612,84.0,172.0,17.3685,0.0,0.0,17.3289449437,0.0304043351108,-43.7612481881,307.730868451,74091.6390155,100.0,308.017530202,6.92727058612,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,3656630.44322,0.130694164722,-61.5822942895,19.3574128114,-0.152867353054,0.0,280.991476392,93.0,281.0,19.358,0.0,0.0,19.3267193551,0.0530273435435,-43.6681433434,307.692855321,13059.3944401,100.0,307.850915474,0.394147073616,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +3.435,0.0,0.0,30799499.1097,0.0902349540295,-64.9561731104,16.2299349112,0.000195701391598,0.0,169.020150357,62.0,169.0,16.228,0.0,0.0,16.2220142979,0.012229602284,-44.6118611684,302.027234695,183330.351843,11.8,313.322495496,24.5639891918,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,9595852.01834,0.10428535051,-61.409010088,17.5394269006,-0.531484826095,0.0,170.683018438,81.0,171.0,17.572,0.0,0.0,17.5170751721,0.100016457626,-43.9727486898,307.802416264,56446.1883432,100.0,308.40137112,4.94767830196,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +3.405,1.0,0.0,4182333.23916,0.15700226584,-65.0771137636,19.2582234043,-0.154068284092,0.0,281.769170904,94.0,282.0,19.274,0.0,0.0,19.2154998664,0.0152773567168,-44.3226658801,302.045012651,14883.7481821,11.7,312.699795746,0.451448110103,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +3.3,0.0,0.0,5930759.3695,0.1224843139,-65.061512839,19.1983913043,-0.198788437651,0.0,321.905957092,68.0,322.0,19.204,0.0,0.0,19.1828307844,0.0100560729295,-44.3645616098,302.03968662,18475.8858863,10.1,312.792480949,0.537302494319,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +5.661,0.0,0.0,75728.3913756,0.331483062817,-20.5667296412,11.827478,-0.424777353418,0.0,49.7745485458,45.0,50.0,11.88105,0.0,0.0,11.7787121746,0.00378207929829,-78.6523766549,133.503595016,1545.47737501,8.6,7.30937596295,8.65134225575,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +6.06,0.0,0.0,12014881.3985,0.104131270905,-64.7794333091,17.5134176471,-0.814680700199,0.0,169.727845395,86.0,170.0,17.5415,0.0,0.0,17.4971732697,0.139890097402,-45.033912124,301.99394645,71093.9727723,35.1,314.226632558,6.24629126456,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +4.725,0.0,0.0,5360832.20587,0.11729505956,-64.8604388687,19.1401046154,0.143687164369,0.0,325.001776385,76.0,325.0,19.14,0.0,0.0,19.1205947026,0.0320629849953,-44.8476019344,302.005013948,16545.7784132,24.4,313.831860065,0.463426174588,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +3.21,0.0,0.0,10426057.6485,0.119745573712,-65.0105168234,17.5772261905,-0.529959353854,0.0,167.639738859,78.0,168.0,17.615,0.0,0.0,17.5594312799,0.0266835891203,-44.491287169,302.028983231,62431.4829253,8.3,313.067955543,5.63158191136,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +3.24,0.0,0.0,11843200.0087,0.0950368395422,-65.0330385519,17.4253823529,-0.600832420468,0.0,169.716405511,67.0,170.0,17.4545,0.0,0.0,17.4132452348,0.00628953775662,-44.449287374,302.023773282,70078.1065602,8.5,312.983543089,6.44870058683,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +3.255,0.0,0.0,4985963.67678,0.129379564196,-65.0426121236,19.1670155763,-0.0376067506076,0.0,321.017009287,298.0,321.0,19.166,0.0,0.0,19.1380960316,0.0139005699637,-44.4269077168,302.024789063,15581.1364899,8.8,312.935579499,0.442069060029,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +3.495,0.0,0.0,4845904.10726,0.115435788452,-65.0876375118,19.1905205047,0.0680978119527,0.0,316.893004115,295.0,317.0,19.197,0.0,0.0,19.1681608529,0.00662906789097,-44.3216077709,302.029265148,15335.1395799,12.2,312.709666818,0.435479375697,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +3.78,0.0,0.0,10450067.7509,0.131324606994,-65.116266463,17.5095393939,-0.431183757889,0.0,164.741631978,57.0,165.0,17.537,0.0,0.0,17.489396017,0.0249243144913,-44.2492155068,302.035660194,63719.9253104,15.5,312.551359357,5.95791330045,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +3.6,6.0,0.0,3725183.65579,0.142250898878,-64.9631407313,19.4085294118,-0.0241830230717,0.0,322.859092548,315.0,323.0,19.417,0.0,0.0,19.377593748,0.0730716635988,-44.6261265424,302.005752833,11568.893341,13.0,313.369079376,0.312699443614,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +4.215,0.0,0.0,4885235.37065,0.13783110087,-64.9129779376,19.1661414141,-0.260280722237,0.0,296.800875958,73.0,297.0,19.179,0.0,0.0,19.136435473,0.0242387060242,-44.7508218898,301.993424471,16504.1735495,19.4,313.639374981,0.522270120195,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +3.375,0.0,0.0,12121954.812,0.126678796149,-65.0483986433,17.2695595238,-0.622142799444,0.0,167.530084305,77.0,168.0,17.318,0.0,0.0,17.2469944512,0.0418943236134,-44.444326849,302.003153452,72586.5557607,9.4,312.98903367,7.17087477501,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +1000.0,0.0,0.0,85030.0964352,0.220827607824,49.3946438309,10.8799006944,0.301708030152,0.0,144.508049974,11.0,144.0,10.84165,0.0,0.0,10.8466211083,0.0578553700197,-1.09841028131,123.990669783,594.616058988,100.0,45.4101462986,4.51000996712,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP' +3.69,0.0,0.0,15354665.0772,0.114118377337,-64.978773401,17.1705872093,-0.44817366426,0.0,171.616072985,66.0,172.0,17.209,0.0,0.0,17.1502189109,0.118008284688,-44.6187844603,301.98636151,89793.3630247,13.3,313.368787927,8.70291721785,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +3.615,0.0,0.0,7507797.3384,0.101634593705,-64.9915069508,18.8567186441,0.0429531442963,0.0,294.933036424,71.0,295.0,18.861,0.0,0.0,18.8410356146,0.0432524898236,-44.5898683558,301.98736806,25536.7256408,12.2,313.307368615,0.895869504065,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +4.275,0.0,0.0,9122624.41575,0.106761668156,-64.9278499449,17.3650076336,-0.464367897786,0.0,130.902060076,58.0,131.0,17.378,0.0,0.0,17.3524514358,0.00169402497727,-44.7444114781,301.974510722,70174.0339673,19.4,313.640785554,8.53708509766,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +4.275,0.0,0.0,12515010.8029,0.108526044808,-64.9278389342,17.3335764706,-0.373102809619,0.0,169.868449876,66.0,170.0,17.347,0.0,0.0,17.3227807384,0.00173513622993,-44.7444392044,301.97450765,74053.3183602,19.5,313.640845823,7.16373431142,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +4.05,0.0,0.0,27225843.9974,0.0977008194786,-64.9467558625,16.2640473373,-0.387254962873,0.0,168.855141909,56.0,169.0,16.278,0.0,0.0,16.2577322479,0.00173534681549,-44.6997414742,301.977551204,162058.595222,17.2,313.545108969,21.4790471895,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +4.05,0.0,0.0,22698973.8842,0.0948080052648,-64.9467792898,16.2843428571,-0.301480426993,0.0,139.972862625,56.0,140.0,16.2875,0.0,0.0,16.2773838962,0.0338129683324,-44.6996859411,301.977555041,163301.97039,17.2,313.544989894,25.6937307297,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +3.45,0.0,0.0,13569413.6422,0.111932070467,-65.0617942892,17.2932694611,-0.323551246773,0.0,166.857869193,64.0,167.0,17.308,0.0,0.0,17.2790993385,0.059946804386,-44.4273048677,301.994312125,81743.4556757,10.0,312.959978478,8.2097762015,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +4.425,0.0,0.0,4821856.788,0.138831435683,-64.9188441824,19.3013551724,0.00825445410133,0.0,290.065450588,91.0,290.0,19.297,0.0,0.0,19.2577808307,0.0648105904673,-44.7684014856,301.971006979,16684.625564,20.8,313.693576129,0.494769298971,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +4.545,1.0,0.0,3896448.133,0.146835759532,-64.9160611447,19.3884845361,-0.116750500294,0.0,290.827268041,71.0,291.0,19.4,0.0,0.0,19.357858253,0.00417386883114,-44.7834868045,301.96419554,13436.0280448,21.7,313.730363179,0.404136090404,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +3.615,14.0,0.0,2750049.33,0.148570077242,-65.0959313006,19.5379106529,-0.115621058853,0.0,290.99866926,70.0,291.0,19.538,0.0,0.0,19.5060372535,0.0290609327387,-44.3540642785,301.99313448,9482.92872413,12.0,312.806185011,0.28160113902,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +3.63,0.0,0.0,14681252.2647,0.0978814312543,-65.09921566,17.1234733728,-0.509944737011,0.0,168.797655156,92.0,169.0,17.144,0.0,0.0,17.1124059738,0.00168429479938,-44.3476473444,301.992558895,87388.4063377,12.3,312.793056545,9.23907017998,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP:CEP(B)' +3.93,1.0,0.0,3248872.58765,0.143518680609,-65.1360741176,19.4383024055,-0.0549743278154,0.0,290.91472948,64.0,291.0,19.444,0.0,0.0,19.4105143634,0.00512904578369,-44.2728648439,301.987946854,11203.0089229,15.5,312.638211823,0.341669849891,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RR(B)' +1000.0,0.0,0.0,207789.70438,0.276760176518,48.9240751611,11.5730988889,-0.326295645778,0.0,179.493595847,163.0,180.0,11.60575,0.0,0.0,11.5361627045,0.0114788301954,-1.63770635705,124.064721606,1160.83633732,100.0,44.9916831436,2.39185239401,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,17065.6235892,0.176673813378,16.5009226535,10.248772807,0.135402399655,0.0,114.164001544,67.0,114.0,10.23405,0.0,0.0,10.2385343057,0.022068304281,-38.4049129511,125.698963124,151.023217603,100.0,23.6113373903,12.8340049796,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRC' +1000.0,0.0,0.0,97684.4517861,0.26267044472,52.4017161079,11.0437134454,0.210612265369,0.0,119.247413981,35.0,119.0,11.0208,0.0,0.0,11.0161446756,0.0149741798541,2.74601006591,123.920500308,827.83433717,100.0,49.2123302801,5.6371374616,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,66608.5107902,0.315919032535,29.6825167386,10.8351011765,-0.633243186679,0.0,84.5342365165,8.0,85.0,10.8948,0.0,0.0,10.7991935419,0.0491175135653,-23.8821347578,124.999734194,792.958461788,100.0,30.292847855,11.6266902301,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +122.056,0.0,0.0,129071.511612,0.421428410448,-41.4050149262,11.1886257576,-0.683095116775,0.0,129.863497674,117.0,132.0,11.3727,0.0,0.0,11.1188762568,0.0242571832047,-77.7452143758,293.97440678,985.278714593,3.8,355.117098338,4.65664246765,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,102452.332444,0.15186229413,13.9963499678,11.0827021053,0.315585392729,0.0,95.5179993831,86.0,95.0,11.0226,0.0,0.0,11.0753043889,0.0215378723354,-41.0837824731,125.999211041,1089.91843026,36.4,22.5974217178,9.20810313076,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRC' +1000.0,0.0,0.0,5745.21117443,0.0622618391426,50.7456722743,7.31041158537,0.346983658626,0.0,164.193418061,29.0,164.0,7.3018,0.0,0.0,7.30924240845,0.00315331917238,0.746967352978,124.126158837,35.2466943217,100.0,47.3802478148,46.9219219219,0.0,0.0,7.30924240845,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,28499.3789364,0.356838048556,45.9620243148,9.42631333333,-0.149555346306,0.0,104.259098522,41.0,105.0,9.4933,0.0,0.0,9.39396531926,0.0133679362909,-5.08082776363,124.410299702,274.032489773,100.0,42.3451083457,12.6438234922,0.0,0.0,9.39396531926,'GCVS:Pulsating:CEP' +0.291,0.0,0.0,194188.529955,0.20139911703,-33.574000421,11.4324979452,0.383049810646,0.0,146.669012816,138.0,146.0,11.38035,0.0,0.0,11.4201096175,0.0302303646217,-86.1232946977,262.726405685,1339.23124107,1.4,1.12109282103,4.28181172018,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRC' +1000.0,0.0,0.0,63692.1344444,0.302969029353,47.6595486563,10.8771516484,0.269249486757,0.0,91.703567822,7.0,91.0,10.7937,0.0,0.0,10.841396588,0.0156967722226,-2.94861190907,124.434688895,707.690382715,100.0,44.2309992594,8.18102982803,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,99740.0812622,0.325643900759,33.7687294767,12.39472,-0.390623093881,0.0,59.7268740864,20.0,60.0,12.4514,0.0,0.0,12.3641067368,0.0209626279588,-19.050523897,125.268966427,1690.5098519,100.0,33.3397725752,4.60632079339,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,12452.652672,0.20474628427,42.6341018745,9.52819816514,-0.0852583913178,0.0,109.439888724,42.0,109.0,9.4899,0.0,0.0,9.49951379765,0.0449319378204,-3.22229806208,131.884550828,115.302339556,100.0,52.0305789886,16.1775649529,0.0,0.0,9.49951379765,'GCVS:Pulsating:CEP' +8.734,0.0,0.0,28164.3846315,0.340716493867,-36.3516838766,10.3265482353,-0.725282030946,0.0,84.1359392673,66.0,85.0,10.4326,0.0,0.0,10.2937559953,0.000995918267923,-74.6203579735,215.907083372,335.290293232,1.5,16.6741293506,16.9961078913,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +385.539,0.0,0.0,88934.8299856,0.19696027437,-21.6408104578,11.0350989474,-0.294450786101,0.0,94.6637168941,0.0,95.0,11.0743,0.0,0.0,11.0241070748,0.00857495263234,-66.8805057098,171.339271364,946.115212613,7.7,24.0990803435,8.48730723203,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +242.11,0.0,0.0,2693.39489448,0.0360319433213,39.8290306653,6.42381785714,-0.176944576563,0.0,111.842744662,98.0,112.0,6.43285,0.0,0.0,6.41847742779,0.0382844004575,-6.15005798916,132.851089437,24.2648188692,7.1,50.3317721977,136.98630137,0.0,0.0,6.41847742779,'GCVS:Pulsating:CEP' +195.301,0.0,0.0,104727.098019,0.337081857868,-19.4490079746,11.8966215385,-0.328432633858,0.0,64.7557174559,10.0,65.0,11.9415,0.0,0.0,11.8462184891,0.0106651748835,-64.8942165501,167.818565231,1636.36090655,1.9,25.2720828133,6.38007375365,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,16171.3442978,0.201402379411,-50.6735956903,9.08724054054,-0.147431769928,0.0,111.011489825,63.0,111.0,9.0863,0.0,0.0,9.06959712048,0.0307356549957,-68.5938602492,265.229847687,147.012220889,100.0,6.41978409456,25.6022939655,0.0,0.0,9.06959712048,'GCVS:Pulsating:RR:RRC' +1000.0,0.0,0.0,13620.165784,0.288792087437,-6.36994706833,9.78234285714,-1.53683655914,0.0,55.188132477,36.0,56.0,9.92625,0.0,0.0,9.76610752256,0.0119886372406,-41.0924184656,167.113116193,247.639377892,100.0,45.7354616125,47.1564651514,0.0,0.0,9.76610752256,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,127202.818771,0.231338206902,-50.2979337916,11.2402652174,-0.4532885323,0.0,114.333395248,33.0,115.0,11.3058,0.0,0.0,11.2208799466,0.0375095518636,-60.9522295262,239.003576631,1115.81419975,81.1,27.5039552467,5.64060331893,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +51.496,0.0,0.0,16919.5202992,0.194398872383,39.4159266549,8.78476329114,-0.368927944792,0.0,78.9592231463,72.0,79.0,8.7893,0.0,0.0,8.77787524761,0.00231369000827,0.0767371463655,139.412129855,216.916926913,54.8,62.0595158411,53.3162721263,0.0,0.0,8.77787524761,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,74266.0980959,0.253596606182,37.1779961383,7.8618168,-0.177111881771,0.0,124.518778034,116.0,125.0,7.8922,0.0,0.0,7.81483092103,0.0411291548715,4.3057500683,145.442356284,598.920145935,100.0,70.9994671341,61.413744396,0.0,0.0,7.81483092103,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,59908.1780868,0.289673218451,26.2003195315,10.6260575758,-0.534298342625,0.0,98.3829809122,80.0,99.0,10.6927,0.0,0.0,10.5982040193,0.0206906281807,-4.12229934508,152.91647948,611.307939661,100.0,68.0435907248,12.2481474677,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,11274.2989372,0.232182927355,27.7088674879,9.84476533333,0.118692794592,0.0,75.4118476152,13.0,75.0,9.791,0.0,0.0,9.82968342763,0.011543611424,-2.93308048759,151.915247207,152.355391043,100.0,68.4590977269,36.1742150195,0.0,0.0,9.82968342763,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,29820.1825252,0.283694990284,-35.6763940925,9.81517988506,-0.549849943471,0.0,172.327321161,66.0,174.0,9.91045,0.0,0.0,9.77813493801,0.029479858328,-44.2050544415,208.74025203,172.370997255,100.0,54.7232410665,9.46163307787,0.0,0.0,9.77813493801,'GCVS:Pulsating:RR:RRAB' +12.264,0.0,0.0,126584.39943,0.310873742304,-68.3963763283,11.581675,-0.842249660466,0.0,91.5496298969,19.0,92.0,11.63865,0.0,0.0,11.5659390709,0.0181240994879,-46.9161759511,259.344856496,1391.03735637,43.8,32.9543152929,5.60591536189,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,147716.749904,0.297789053254,-39.2721629177,11.6905064815,-0.894840386172,0.0,106.844380318,33.0,108.0,11.81695,0.0,0.0,11.6664970374,0.0101753096215,-45.4737647678,213.632468341,1380.53037293,100.0,53.662180156,4.1709418821,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,73242.8033646,0.396801689607,-41.0083273863,10.7518880734,-0.900460694044,0.0,106.704403088,3.0,109.0,10.9832,0.0,0.0,10.6989521736,0.0528172180797,-45.9987654177,216.075560882,678.174105228,100.0,53.1248260631,8.14637404891,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' +1000.0,0.0,0.0,32169.7815608,0.215797961044,19.6779643364,10.562630303,0.610496569149,0.0,66.4557015119,39.0,66.0,10.4902,0.0,0.0,10.5395395454,0.00793435424567,-8.69702774826,157.68215496,494.91971632,100.0,67.0696634418,19.7792634202,0.0,0.0,9.99999335625,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,38457.5524275,0.205167908675,17.141083463,7.74067777778,0.408135143518,0.0,81.8680829394,72.0,81.0,7.6586,0.0,0.0,7.71196172292,0.0133605377886,-1.47133335573,165.620852896,480.719405344,100.0,78.0363734482,130.361100248,0.0,0.0,7.71196172292,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,32481.83461,0.224861952241,32.4283255916,7.73337205882,-0.609404190038,0.0,67.1488239651,55.0,68.0,7.8314,0.0,0.0,7.73455895969,0.0111420008714,8.02095135644,153.468792768,484.803501642,100.0,80.0324923528,114.129194248,0.0,0.0,7.73455895969,'GCVS:Pulsating:CEP' +1000.0,0.0,0.0,4794225437.69,0.136765570443,59.1991801239,17.1909957627,0.144686188634,0.0,236.192292018,229.0,236.0,17.177,0.0,0.0,17.1747818565,3.06559647046,11.0101153276,70.1558494208,20400959.3093,100.0,302.115135939,956.022944551,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRC' +1000.0,0.0,0.0,1294043228.11,0.149223063657,59.2414523318,18.344875,-1.15288970908,0.0,143.642750333,119.0,144.0,18.3905,0.0,0.0,18.3547035244,1.73662025588,11.2325653318,70.0140031566,9049253.34345,100.0,301.609062492,495.785820526,0.0,0.0,9.99999335625,'GCVS:Pulsating:RR:RRAB' diff --git a/mltsp/TCP/Software/feature_extract/__init__.py b/mltsp/TCP/Software/feature_extract/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/__init__.py @@ -0,0 +1 @@ + diff --git a/mltsp/TCP/Software/feature_extract/format_csv_getfeats.py b/mltsp/TCP/Software/feature_extract/format_csv_getfeats.py new file mode 100644 index 00000000..aa404985 --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/format_csv_getfeats.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +""" When given a csv lightcurve, generate features. +""" +from __future__ import print_function +from __future__ import absolute_import + +import os, sys +import csv + +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract')) +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract/Code')) +from .Code import * +import db_importer + + +head_str = """ + + + + + + 6930531 + + Best positional information of the source + + + 323.47114731 + -0.79916734036 + + + 0.000277777777778 + 0.000277777777778 + + + + + + MJD + 0.0 + UTC + TOPOCENTER + + + + + + + + + +""" + +tail_str = """ + +
+
+
+
""" + + +if __name__ == '__main__': + + pars = {'csv_fpath':"/home/dstarr/scratch/PTFS1108o.dat", + 'final_vsrcxml_fpath':'/tmp/PTFS1108o.xml', + } + + data_str_list = [] + + rows = csv.reader(open(pars['csv_fpath']), delimiter=' ') + + t_list = [] + m_list = [] + merr_list = [] + for i,row in enumerate(rows): + t = float(row[0]) + m = float(row[1]) + m_err = float(row[2]) + data_str = ' %lf%lf%lf' % \ + (i, t, m, m_err) + data_str_list.append(data_str) + t_list.append(t) + m_list.append(m) + merr_list.append(m_err) + + all_data_str = '\n'.join(data_str_list) + + out_xml = head_str + all_data_str + tail_str + + ####### This part was taken from file: test_feature_algorithms.py: + signals_list = [] + gen = generators_importers.from_xml(signals_list) + gen.generate(xml_handle=out_xml) + gen.sig.add_features_to_xml_string(gen.signals_list) + + feature_added_VOSource_XML_fpath = pars['final_vsrcxml_fpath'] + gen.sig.write_xml(out_xml_fpath=feature_added_VOSource_XML_fpath) + import pprint + pprint.pprint((signals_list[0].properties['data']['v']['features'].keys()).sort()) + print() + print('freq1_harmonics_freq_0 =', signals_list[0].properties['data']['v']['features']['freq1_harmonics_freq_0']) + print() + + #import pdb; pdb.set_trace() diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart100.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart100.png new file mode 100755 index 0000000000000000000000000000000000000000..f745fef1fdeda6f2f916de774fc6c19858aec9e9 GIT binary patch literal 46154 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�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 z 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

pV4zc9m~*D3BOrHQM^w?U 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 KoNKo3{qf(DP5E*F literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.0001_noLU_absoluteexp.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.0001_noLU_absoluteexp.png new file mode 100755 index 0000000000000000000000000000000000000000..ce91ac7d9cc70f2d0bbc4efdabfc31c672ae2fc0 GIT binary patch literal 82441 zcmeFZWmHvd`!9;9Ac~+ENH>UpAV^9mARW>vEl8Ji3eqCdASF^FDcuN2m(oZ{OUD8h z&Az6-@816pXPnPxoUs|h=aD6Au6f`06~DM9LC@sGuU;m;jDdl1RZ>D!5d-6V69xw6 z$t5g!1>dej7yfs_URYB35`4K|G75z6acm?s?BQSakw51?3uT#NU{GR6iat?xPF$UE zat~cRYuy^=y-pK;=Skr8lD)uRb;fHdW_t|EFGKr=?&W=v`ZI7@)2zfXM`6I?TAC_j z_s0hWH@}(>kzePn7kWp^+k-nZ(|r{kCUOlLH+Lw?|a

Ay+Q_MF>loRXg2pI-LEdnUE~61-L_Mk2XZVPWAv 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.001_noLU_absoluteexp.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.001_noLU_absoluteexp.png new file mode 100755 index 0000000000000000000000000000000000000000..8fb7cccee68a3f05b1e7f8346e2f650e2a5d9ac5 GIT binary patch literal 75993 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.01_noLU_absoluteexp.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart5_theta0.01_noLU_absoluteexp.png new file mode 100755 index 0000000000000000000000000000000000000000..e5a1887314a492dce3d62c2740b068eb38edb630 GIT binary patch literal 102618 zcmeFZbx>Aq_%-@~(kUn%2BFg3C7_^$3eqVEN_UrlAcCYKjf#TO-QA6Jcd0Z;*SWU7 zzwetfbLO0X&VT1H^UgcK!;X7j_qx`#*4hR=RJuoiONEORajTz`slNqbG^(bp%(N<~9wBm<8h^lH6P^VG)4D%QIHfQ_xFkm_sEU^T~A z)#v_l4;x92*?r|qyu80qX2*uhJ@u5J4|8oza9=M=wpaMN&$FChp0AaqCiCCdnUU83 z+UtK`t@E;N=$HO|aXrkJ{O=?9?^ucd`{@Nny#IdKDEa??^#5Oh|1Yfox9D%wLa(s% zIt`0j=EsMh?ija4EUdA%~6LrO_0-w;61_MT-ph49|`XX82^tEM+s3azKl z9tB?e_qlJ$-e<8+Yhz-+ITzUPlZnpblC$G8oM36CtA59_O4G0L3ZWI@&#I3!O%PX( zjQ-;qS(w`M?hB)55<`}leDe3rO`EY2YwHT;h?d|;jGofYSe^?H(^YTXR?9r7U0Z04 zxbb8;ctSpzS^mM1sJvFc>HWS)IM7g1V~^^bSdge*VcniTue`(*$9 z@b$|`j7X-FlM^~e?Cs0F%kuyJ{7-CT;g_DMFMOV<3|TRmY8ktau\PEN`SN%>R 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

s^) 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�@+_&LxDIpy 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

NSYQcpV_Z!23(7NMS^)Y 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 UsUy!eZsiqZUcD%M{yOk~0dC=lkN^Mx literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/noisifier_pilot.py b/mltsp/TCP/Software/feature_extract/noisifier_pilot.py new file mode 100644 index 00000000..d492c4bf --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/noisifier_pilot.py @@ -0,0 +1,55 @@ +""" +noisifier_pilot.py + +Pulls the string to noisify signal data. + +NOTE: + - Requires system environment variable: TCP_DIR + - This is the full path of the top directory of TCP project + - In other words, the TCP directory which was svn checked-out + - e.g. .bashrc/execute for bash: + export TCP_DIR=/home/pteluser/src/TCP/ +""" +from __future__ import print_function +from __future__ import absolute_import + +import os, sys + +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract')) +sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract/Code')) + +from .Code import generators_importers, feature_interfaces + +signals_list = [] + +gen = generators_importers.from_xml(signals_list) +gen.generate(xml_handle="../../Data/source_5.xml",register=False) +gen.sig.add_features_to_xml_string(gen.signals_list) + +interface = feature_interfaces.feature_interface +noisify_extr = interface.request_extractor('noisify') # grab the noisifying extractor from the interface + +for i in range(len(signals_list)): + signal = signals_list[i] + signal.register_signal(initialize=False) + +interface.notify(noisify_extr) + +def fetch_noisified(signal, band): + noisified = signal.properties['data'][band]['inter']['noisify'].result + return noisified + +feature_added_VOSource_XML_fpath = '/tmp/test_feature_algorithms.VOSource.xml' +gen.sig.write_xml(out_xml_fpath=feature_added_VOSource_XML_fpath) +print("Wrote VOSource XML (with features) to:", feature_added_VOSource_XML_fpath) + + +def main(): + pass + + +if __name__ == '__main__': + main() + diff --git a/mltsp/TCP/Software/feature_extract/summarize_available_features.py b/mltsp/TCP/Software/feature_extract/summarize_available_features.py new file mode 100644 index 00000000..d67689ee --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/summarize_available_features.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +""" + v0.1 Summarize all feature extractors. + +""" +from __future__ import absolute_import +import os, sys +import copy + +sys.path.append(os.environ.get("TCP_DIR") + '/Software/feature_extract/MLData') +import arffify + +class Summarize_Available_Features: + """ Finds all feature extractors, tries to summarize some info about them, + whether they are currently used, and if they have doc-strings + """ + def __init__(self, pars={}): + self.pars = pars + + + def extract_all_features_from_init(self): + """ Parse __init__.py, get features that are known / avialble + """ + out_feat_dict = {} + + lines = open(self.pars['init_fpath']).readlines() + + import_dict = {} # contains: {:[, , ...] + for line in lines: + if len(line) < 1: + continue # skip this line + if ((line[0] != '#') and ('from' in line)): + sub_str = line[line.find('from') + 5:line.find('import')] + py_filename = sub_str.strip() + sub_str = line[line.find('import')+7:] + a_list = sub_str.split(',') + extractor_list = [] + for elem in a_list: + extractor_list.append(elem.strip()) + import_dict[py_filename] = {'extractor_list':extractor_list, + 'init_line':copy.copy(line)} + + ### Now parse arffify and see which features are actually used. + skipped_features = arffify.skip_features + for extr_dict in import_dict.values(): + for feat_name in extr_dict['extractor_list']: + out_feat_dict[feat_name] = {'used_in_classifications':True, + 'is_extracted':False, + 'doc_str':""} + if feat_name in skipped_features: + out_feat_dict[feat_name]['used_in_classifications'] = False + + + ### Try to get the doc_strings for the feature extractors, if any where created. + # This might be more easily done by genning signals_list ala db_importer.py:1048 + # test_feature_algorithms.py:22 + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract')) + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + \ + 'Software/feature_extract/Code')) + from .Code import * + import db_importer + + signals_list = [] + gen = generators_importers.from_xml(signals_list) + gen.generate(xml_handle="../../Data/vosource_9026.xml") + gen.sig.add_features_to_xml_string(gen.signals_list) + + for filter_name,filt_dict in signals_list[0].properties['data'].items(): + for feat_name,value_object in signals_list[0].properties['data']\ + [filter_name]['features'].items(): + # KLUDGE: some inconsistancy in feature naming for closest_in_light... + # - these seem to be due to various users creating extractors with non conforming names / defintions + # - if everyone named their extractors with a '_extractor' suffix, this would work!!! + if 'closest_light' in feat_name: + feat_name = feat_name.replace('closest_light','closest_in_light') + if feat_name not in out_feat_dict: + feat_name = feat_name + '_extractor' + if feat_name not in out_feat_dict: + feat_name = feat_name.replace('_extractor','extractor') + + if feat_name in skipped_features: + out_feat_dict[feat_name]['used_in_classifications'] = False + + out_feat_dict[feat_name]['is_extracted'] = True + out_feat_dict[feat_name]['doc_str'] = value_object.__doc__ + + + import pprint + pprint.pprint(out_feat_dict) + return out_feat_dict + + +if __name__ == '__main__': + + pars = {'init_fpath':'/home/pteluser/src/TCP/Software/feature_extract/Code/extractors/__init__.py'} + + SummarizeFeatures = Summarize_Available_Features(pars=pars) + SummarizeFeatures.extract_all_features_from_init() + + # parse init file for non # lines + + """ + ### Try to get the doc_strings for the feature extractors, if any where created. + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + 'Software/feature_extract')) + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + 'Software/feature_extract/Code')) + sys.path.append(os.path.abspath(os.environ.get("TCP_DIR") + 'Software/feature_extract/Code/extractors')) + from Code import * + + for extractor_name,extr_dict in import_dict.items(): + exec("sys.path.append(os.path.abspath(os.environ.get('TCP_DIR') + 'Software/feature_extract/Code/extractors'));" + extr_dict['init_line']) + for extr_name in extr_dict['extractor_list']: + print extr_name # TODO: see if __doc__ exists : do an eval() + """ diff --git a/mltsp/TCP/Software/feature_extract/textmate_random_number.tmproj b/mltsp/TCP/Software/feature_extract/textmate_random_number.tmproj new file mode 100755 index 00000000..f7309d6f --- /dev/null +++ b/mltsp/TCP/Software/feature_extract/textmate_random_number.tmproj @@ -0,0 +1,682 @@ + + + + + currentDocument + Code/extractors/lomb_extractor.py + documents + + + expanded + + name + Code + regexFolderFilter + !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$ + sourceDirectory + Code + + + fileHierarchyDrawerWidth + 200 + metaData + + Code/FeatureExtractor.py + + caret + + column + 24 + line + 25 + + firstVisibleColumn + 0 + firstVisibleLine + 4 + + Code/__init__.py + + caret + + column + 21 + line + 12 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/db_importer.py + + caret + + column + 31 + line + 245 + + columnSelection + + firstVisibleColumn + 0 + firstVisibleLine + 214 + selectFrom + + column + 26 + line + 245 + + selectTo + + column + 31 + line + 245 + + + Code/extractors/__init__.py + + caret + + column + 0 + line + 20 + + columnSelection + + firstVisibleColumn + 0 + firstVisibleLine + 0 + selectFrom + + column + 33 + line + 21 + + selectTo + + column + 0 + line + 20 + + + Code/extractors/beyond1std_extractor.py + + caret + + column + 57 + line + 7 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/chi2_per_deg_extractor.py + + caret + + column + 0 + line + 6 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/chi2extractor.py + + caret + + column + 37 + line + 7 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/common_functions/ChiSquare.py + + caret + + column + 13 + line + 21 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/common_functions/__init__.py + + caret + + column + 31 + line + 1 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/common_functions/lomb_scargle.py + + caret + + column + 0 + line + 272 + + columnSelection + + firstVisibleColumn + 0 + firstVisibleLine + 269 + selectFrom + + column + 12 + line + 304 + + selectTo + + column + 0 + line + 272 + + + Code/extractors/dc_extractor.py + + caret + + column + 34 + line + 22 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/dist_from_u_extractor.py + + caret + + column + 28 + line + 16 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/first_freq_extractor.py + + caret + + column + 17 + line + 16 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/first_lomb_extractor.py + + caret + + column + 41 + line + 7 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/fourierextractor.py + + caret + + column + 0 + line + 12 + + columnSelection + + firstVisibleColumn + 0 + firstVisibleLine + 0 + selectFrom + + column + 52 + line + 13 + + selectTo + + column + 0 + line + 12 + + + Code/extractors/linear_extractor.py + + caret + + column + 26 + line + 21 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/lomb_extractor.py + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/max_slope_extractor.py + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/medianextractor.py + + caret + + column + 1 + line + 8 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/old_dcextractor.py + + caret + + column + 1 + line + 8 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/power_spectrum_extractor.py + + caret + + column + 45 + line + 7 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/sine_fit_extractor.py + + caret + + column + 175 + line + 21 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/sine_leastsq_extractor.py + + caret + + column + 40 + line + 15 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/sine_lomb_extractor.py + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/skew_extractor.py + + caret + + column + 13 + line + 13 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/stdextractor.py + + caret + + column + 1 + line + 7 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/stdvs_from_u_extractor.py + + caret + + column + 20 + line + 18 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/wei_av_uncertainty_extractor.py + + caret + + column + 30 + line + 5 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/extractors/weighted_average_extractor.py + + caret + + column + 36 + line + 16 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/feature_interfaces.py + + caret + + column + 34 + line + 82 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/import_vizier.py + + caret + + column + 21 + line + 15 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/jsb_fake_data.py + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/main.py + + caret + + column + 0 + line + 21 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/plotters.py + + caret + + column + 54 + line + 10 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/signal_objects.py + + caret + + column + 33 + line + 42 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/source_5.xml + + caret + + column + 29 + line + 8 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/table.dat + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/table2.dat + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + Code/vo_timeseries.py + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + + openDocuments + + Code/table2.dat + Code/signal_objects.py + Code/plotters.py + Code/vo_timeseries.py + Code/source_5.xml + Code/import_vizier.py + Code/jsb_fake_data.py + Code/table.dat + Code/extractors/weighted_average_extractor.py + Code/feature_interfaces.py + Code/extractors/lomb_extractor.py + Code/extractors/beyond1std_extractor.py + Code/extractors/chi2_per_deg_extractor.py + Code/__init__.py + Code/db_importer.py + Code/main.py + Code/extractors/common_functions/__init__.py + Code/FeatureExtractor.py + Code/extractors/dc_extractor.py + Code/extractors/chi2extractor.py + Code/extractors/dist_from_u_extractor.py + Code/extractors/__init__.py + Code/extractors/first_freq_extractor.py + Code/extractors/fourierextractor.py + Code/extractors/linear_extractor.py + Code/extractors/max_slope_extractor.py + Code/extractors/medianextractor.py + Code/extractors/old_dcextractor.py + Code/extractors/power_spectrum_extractor.py + Code/extractors/sine_fit_extractor.py + Code/extractors/sine_lomb_extractor.py + Code/extractors/first_lomb_extractor.py + Code/extractors/sine_leastsq_extractor.py + Code/extractors/skew_extractor.py + Code/extractors/common_functions/lomb_scargle.py + Code/extractors/stdextractor.py + Code/extractors/stdvs_from_u_extractor.py + Code/extractors/wei_av_uncertainty_extractor.py + Code/extractors/common_functions/ChiSquare.py + + showFileHierarchyDrawer + + windowFrame + {{399, 203}, {1230, 815}} + + diff --git a/mltsp/TCP/Software/ingest_tools/__init__.py b/mltsp/TCP/Software/ingest_tools/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/mltsp/TCP/Software/ingest_tools/__init__.py @@ -0,0 +1 @@ + diff --git a/mltsp/TCP/Software/ingest_tools/feature_extraction_interface.py b/mltsp/TCP/Software/ingest_tools/feature_extraction_interface.py new file mode 100644 index 00000000..21bba6a3 --- /dev/null +++ b/mltsp/TCP/Software/ingest_tools/feature_extraction_interface.py @@ -0,0 +1,1158 @@ +#!/usr/bin/env python +""" +feature_extraction_interface.py + + v0.1 Interface for ingest_tools.py to Maxime's TCP/Software/feature_extract/* + v0.2 Include specific feature definitions. Methods for access and generate. + v0.3 made this self-describing so no need to add new extractors if they are in the right place +PDB Command: + /usr/lib/python2.5/pdb.py test.py +""" +from __future__ import print_function +import sys, os +try: + import pylab +except: + pass +import numpy + + +class GetFeatIdLookupDicts: + """ This class retrieves a couple lookup dicts from disk, and + if they dont exist, they are generated from an RDB query and written to disk. + + NOTE: The referenced file on disk should be deleted whenever new + feature types are added to the RDB feat_lookup table. + """ + + def __init__(self, db_cursor=None): + self.reference_feat_dict_fpath = os.environ.get('TCP_DATA_DIR') + '/reference_feat_dict.pkl' + self.cursor = db_cursor + + + def form_dicts_from_rdb_query(self): + """ SELECT the feature tables, form dicts + Returns : (feature_lookup_dict, filt_lookup_dict) + """ + feature_lookup_dict = {} + filt_lookup_dict = {} + + select_str = "SELECT feat_name, filter_id, feat_id FROM feat_lookup" + self.cursor.execute(select_str) + results = self.cursor.fetchall() + for result in results: + (feat_name, filter_id, feat_id) = result + feature_lookup_dict[(filter_id, feat_name)] = feat_id + if filter_id not in filt_lookup_dict: + filt_lookup_dict[filter_id] = {} + filt_lookup_dict[filter_id][feat_name] = feat_id + + return (feature_lookup_dict, filt_lookup_dict) + + + def write_dicts_to_disk(self, feature_lookup_dict, filt_lookup_dict): + """ Write dicts to dictfile which is generally under $TCP_DATA_DIR. + """ + import cPickle + fp = open(self.reference_feat_dict_fpath, "w") + cPickle.dump((feature_lookup_dict, filt_lookup_dict),fp) + fp.close() + + + def get_dicts(self): + """ + See if dict file is available, if not form from RDB query, write to disk. + + Return (feat dicts). + """ + # 20090817: dstarr disables condition since we are oftenadding new features lately, and it seems this shouldnt be a big issue since ipengines are initialized once with this dict. + #if os.path.exists(self.reference_feat_dict_fpath): + # # The following fills the variables: + # # (feature_lookup_dict, filt_lookup_dict) + # import cPickle + # fp = open(self.reference_feat_dict_fpath) + # (feature_lookup_dict, filt_lookup_dict) = cPickle.load(fp) + # fp.close() + #else: + + (feature_lookup_dict, filt_lookup_dict) = \ + self.form_dicts_from_rdb_query() + #self.write_dicts_to_disk(feature_lookup_dict, filt_lookup_dict) + + self.feature_lookup_dict = feature_lookup_dict + self.filt_lookup_dict = filt_lookup_dict + + +class Final_Features: + """ Class which contains final, extracted (scalar) feature definition + lists and dictionaries. + + I found a list of these in: + signals_list[0].properties['data']['i']['features'] + """ + def __init__(self): + self.ife = Internal_Feature_Extractors() + #self.ife.features_tup_list + + # TODO: to form self.features_dict{} I need to: + # - make mysql-friendly names using replace() for 'table_name' + # - assume FLOAT & INDEX + import copy + + self.string_replace_dict = {'-':'_', + ' ':'', + '.':'_', + '_extractor':'', + 'extractor':''} + self.filter_list = ['u','g','r','i','z','j','h','k','X'] # cooresponds to RDB 'filt' indexes: [SDSS(5), PTEL(3), ] + self.filter_dict = {} + i = 0 + for filt in self.filter_list: + self.filter_dict[filt] = i + i += 1 + + self.features_dict = {} + for (extractor_name,notso_empty_dict) in self.ife.features_tup_list: + #print extractor_name + ext_name_mysql_safe = copy.copy(extractor_name) + for old_str,new_str in self.string_replace_dict.items(): + ext_name_mysql_safe = ext_name_mysql_safe.replace(old_str,new_str) + + self.features_dict[extractor_name] = {\ + 'out_type':'FLOAT', + 'table_name':ext_name_mysql_safe, + 'index_type':'INDEX', + 'internal':notso_empty_dict['internal'], + 'doc':notso_empty_dict['doc']} + """ + self.features_dict = { \ + 'std': {\ + 'out_type':'FLOAT', + 'table_name':'std_dev', + 'index_type':'INDEX'}, + 'third': {\ + 'out_type':'FLOAT', + 'table_name':'third_freq', + 'index_type':'INDEX'}, + 'first_frequency': {\ + 'out_type':'FLOAT', + 'table_name':'first_freq', + 'index_type':'INDEX'}, + 'chi2': {\ + 'out_type':'FLOAT', + 'table_name':'chi2', + 'index_type':'INDEX'}, + 'weighted average': {\ + 'out_type':'FLOAT', + 'table_name':'weighted_avg', + 'index_type':'INDEX'}, + 'median': {\ + 'out_type':'FLOAT', + 'table_name':'feat_median', + 'index_type':'INDEX'}, + 'dc': {\ + 'out_type':'FLOAT', + 'table_name':'feat_dc', + 'index_type':'INDEX'}, + 'max_slope': {\ + 'out_type':'FLOAT', + 'table_name':'max_slope', + 'index_type':'INDEX'}, + 'freq ratio 2-1': {\ + 'out_type':'FLOAT', + 'table_name':'freq_ratio_21', + 'index_type':'INDEX'}, + 'second': {\ + 'out_type':'FLOAT', + 'table_name':'second_freq', + 'index_type':'INDEX'}, + 'old dc': {\ + 'out_type':'FLOAT', + 'table_name':'old_dc', + 'index_type':'INDEX'}, + 'n of pts beyond 1 std from u': {\ + 'out_type':'FLOAT', + 'table_name':'n_pts_by_1_std', + 'index_type':'INDEX'}, + 'freq ratio 3-2': {\ + 'out_type':'FLOAT', + 'table_name':'freq_ratio_32', + 'index_type':'INDEX'}, + 'freq ratio 3-1': {\ + 'out_type':'FLOAT', + 'table_name':'freq_ratio_31', + 'index_type':'INDEX'}, + 'skew': {\ + 'out_type':'FLOAT', + 'table_name':'feat_skew', + 'index_type':'INDEX'}, + 'weighted average uncertainty': {\ + 'out_type':'FLOAT', + 'table_name':'weight_avg_uncert', + 'index_type':'INDEX'}} + """ + #self.features_ordered_list = self.features_dict.keys() + #self.features_ordered_list.sort() + +class Feature_database: + """ Class which contains generation and access methods for + all possible feature extractors. + + # USE: + import feature_extraction_interface + feat_db = feature_extraction_interface.Feature_database() + feat_db.initialize_mysql_connection(rdb_host_ip='192.168.1.45', \ + rdb_user='', rdb_name='') + feat_db.create_feature_tables() + feat_db.insert_srclist_features_into_rdb_tables(self, signals_list) + """ + def __init__(self): + self.final_features = Final_Features() + + def initialize_mysql_connection(self, rdb_host_ip='', rdb_user='', \ + rdb_name='', rdb_port=3306, \ + feat_lookup_tablename='',\ + feat_values_tablename='', \ + db=None): + """ Create connection to feature mysql server. + """ + import MySQLdb + if db is None: + self.db = MySQLdb.connect(host=rdb_host_ip, user=rdb_user, \ + db=rdb_name, port=rdb_port, compress=1) + else: + self.db = db + self.cursor = self.db.cursor() + self.feat_lookup_tablename = feat_lookup_tablename + self.feat_values_tablename = feat_values_tablename + + self.attempt_to_fill_feat_lookup_tablename() + + + def attempt_to_fill_feat_lookup_tablename(self): + """ KLUDGE: Attempt to retrieve self.feat_lookup_tablename values and + populate self.feature_lookup_dict{} + """ + try: + select_str = "SELECT (feat_id, filter_id, feat_name) FROM %s" % (self.feat_lookup_tablename) + self.cursor.execute(select_str) + results = self.cursor.fetchall() + + self.feature_lookup_dict = {} + for result in results: + (feat_id, filt_num, feat_name) = result + self.feature_lookup_dict[(filt_num, feat_name)] = feat_id + except: + pass + + + def drop_feature_tables(self): + """ DROP MySQL tables for all features. + + Tables of form: + src_id (INT UNSIGNED), feat + """ + for feat_name,feat_dict in self.final_features.features_dict.items(): + for filt_name in self.final_features.filter_list: + #create_str = "CREATE TABLE %s_%s (INDEX(src_id), %s(%s))" % (filt_name, feat_name, feat_dict['index_type'], feat_dict['out_type']) + create_str = "DROP TABLE %s_%s" % (filt_name, feat_dict['table_name']) + try: + self.cursor.execute(create_str) + except: + pass + #print 'FAIL:', create_str + + + +class Internal_Feature_Extractors: + """ Class which contains "internal feature" definition lists & dictionaries + """ + + ## modules (instead of classes) will break the test suite. Put these here as appropriate. + ignores = ["min_extractor","max_extractor","third_extractor"] + + def __init__(self): + # XXX ORDER OF FEATURES IS IMPORTANT XXX + + # This needs to retain list ordering, but I figure it'd be useful + # to have potential dictionary attributes associated with + # each internal-feature extractor. + + import ast + with open(os.path.join( + os.path.dirname(__file__), + '../feature_extract/Code/extractors/__init__.py'), 'r') as f: + + init_ast = ast.parse(f.read()) + + features = [] + for a in init_ast.body: + if isinstance(a, ast.ImportFrom): + features.extend([f.name for f in a.names]) + + self.features_tup_list = [(f, {}) for f in features] + + for (feat_name, feat_dict) in self.features_tup_list: + d = {} + from ..feature_extract.Code import extractors + feature = getattr(extractors, feat_name) + doc = getattr(feature, '__doc__', '') + feat_dict['doc'] = doc + + import inspect + + feat_dict['internal'] = 'false' + for member_name, member_val in inspect.getmembers(feature): + if member_name == 'internal_use_only': + if member_val == True: + feat_dict['internal'] = 'true' + break + + # TODO: I'm sure there is an efficient way to form a dictionary + # from the above tuple list, using map(), filter(), etc... + self.feature_dict = {} + self.feature_ordered_keys = [] + for (feat_name,feat_dict) in self.features_tup_list: + self.feature_ordered_keys.append(feat_name) + self.feature_dict[feat_name] = feat_dict + + +class Final_Features: + """ Class which contains final, extracted (scalar) feature definition + lists and dictionaries. + + I found a list of these in: + signals_list[0].properties['data']['i']['features'] + """ + def __init__(self): + self.ife = Internal_Feature_Extractors() + #self.ife.features_tup_list + + # TODO: to form self.features_dict{} I need to: + # - make mysql-friendly names using replace() for 'table_name' + # - assume FLOAT & INDEX + import copy + + self.string_replace_dict = {'-':'_', + ' ':'', + '.':'_', + '_extractor':'', + 'extractor':''} + self.filter_list = ['u','g','r','i','z','j','h','k','X'] # cooresponds to RDB 'filt' indexes: [SDSS(5), PTEL(3), ] + self.filter_dict = {} + i = 0 + for filt in self.filter_list: + self.filter_dict[filt] = i + i += 1 + + self.features_dict = {} + for (extractor_name,notso_empty_dict) in self.ife.features_tup_list: + #print extractor_name + ext_name_mysql_safe = copy.copy(extractor_name) + for old_str,new_str in self.string_replace_dict.items(): + ext_name_mysql_safe = ext_name_mysql_safe.replace(old_str,new_str) + + self.features_dict[extractor_name] = {\ + 'out_type':'FLOAT', + 'table_name':ext_name_mysql_safe, + 'index_type':'INDEX', + 'internal':notso_empty_dict['internal'], + 'doc':notso_empty_dict['doc']} + """ + self.features_dict = { \ + 'std': {\ + 'out_type':'FLOAT', + 'table_name':'std_dev', + 'index_type':'INDEX'}, + 'third': {\ + 'out_type':'FLOAT', + 'table_name':'third_freq', + 'index_type':'INDEX'}, + 'first_frequency': {\ + 'out_type':'FLOAT', + 'table_name':'first_freq', + 'index_type':'INDEX'}, + 'chi2': {\ + 'out_type':'FLOAT', + 'table_name':'chi2', + 'index_type':'INDEX'}, + 'weighted average': {\ + 'out_type':'FLOAT', + 'table_name':'weighted_avg', + 'index_type':'INDEX'}, + 'median': {\ + 'out_type':'FLOAT', + 'table_name':'feat_median', + 'index_type':'INDEX'}, + 'dc': {\ + 'out_type':'FLOAT', + 'table_name':'feat_dc', + 'index_type':'INDEX'}, + 'max_slope': {\ + 'out_type':'FLOAT', + 'table_name':'max_slope', + 'index_type':'INDEX'}, + 'freq ratio 2-1': {\ + 'out_type':'FLOAT', + 'table_name':'freq_ratio_21', + 'index_type':'INDEX'}, + 'second': {\ + 'out_type':'FLOAT', + 'table_name':'second_freq', + 'index_type':'INDEX'}, + 'old dc': {\ + 'out_type':'FLOAT', + 'table_name':'old_dc', + 'index_type':'INDEX'}, + 'n of pts beyond 1 std from u': {\ + 'out_type':'FLOAT', + 'table_name':'n_pts_by_1_std', + 'index_type':'INDEX'}, + 'freq ratio 3-2': {\ + 'out_type':'FLOAT', + 'table_name':'freq_ratio_32', + 'index_type':'INDEX'}, + 'freq ratio 3-1': {\ + 'out_type':'FLOAT', + 'table_name':'freq_ratio_31', + 'index_type':'INDEX'}, + 'skew': {\ + 'out_type':'FLOAT', + 'table_name':'feat_skew', + 'index_type':'INDEX'}, + 'weighted average uncertainty': {\ + 'out_type':'FLOAT', + 'table_name':'weight_avg_uncert', + 'index_type':'INDEX'}} + """ + #self.features_ordered_list = self.features_dict.keys() + #self.features_ordered_list.sort() + +class Feature_database: + """ Class which contains generation and access methods for + all possible feature extractors. + + # USE: + import feature_extraction_interface + feat_db = feature_extraction_interface.Feature_database() + feat_db.initialize_mysql_connection(rdb_host_ip='192.168.1.45', \ + rdb_user='', rdb_name='') + feat_db.create_feature_tables() + feat_db.insert_srclist_features_into_rdb_tables(self, signals_list) + """ + def __init__(self): + self.final_features = Final_Features() + + def initialize_mysql_connection(self, rdb_host_ip='', rdb_user='', \ + rdb_name='', rdb_port=3306, \ + feat_lookup_tablename='',\ + feat_values_tablename='', \ + db=None): + """ Create connection to feature mysql server. + """ + import MySQLdb + if db is None: + self.db = MySQLdb.connect(host=rdb_host_ip, user=rdb_user, \ + db=rdb_name, port=rdb_port, compress=1) + else: + self.db = db + self.cursor = self.db.cursor() + self.feat_lookup_tablename = feat_lookup_tablename + self.feat_values_tablename = feat_values_tablename + + self.attempt_to_fill_feat_lookup_tablename() + + + def attempt_to_fill_feat_lookup_tablename(self): + """ KLUDGE: Attempt to retrieve self.feat_lookup_tablename values and + populate self.feature_lookup_dict{} + """ + try: + select_str = "SELECT (feat_id, filter_id, feat_name) FROM %s" % (self.feat_lookup_tablename) + self.cursor.execute(select_str) + results = self.cursor.fetchall() + + self.feature_lookup_dict = {} + for result in results: + (feat_id, filt_num, feat_name) = result + self.feature_lookup_dict[(filt_num, feat_name)] = feat_id + except: + pass + + + def drop_feature_tables(self): + """ DROP MySQL tables for all features. + + Tables of form: + src_id (INT UNSIGNED), feat + """ + for feat_name,feat_dict in self.final_features.features_dict.items(): + for filt_name in self.final_features.filter_list: + #create_str = "CREATE TABLE %s_%s (INDEX(src_id), %s(%s))" % (filt_name, feat_name, feat_dict['index_type'], feat_dict['out_type']) + create_str = "DROP TABLE %s_%s" % (filt_name, feat_dict['table_name']) + try: + self.cursor.execute(create_str) + except: + pass + #print 'FAIL:', create_str + + + def create_feature_lookup_dict(self): + """ Create dictionary: feature_lookup_dict: + """ + Get_Feat_Id_Lookup_Dicts = GetFeatIdLookupDicts(db_cursor=self.cursor) + Get_Feat_Id_Lookup_Dicts.get_dicts() + + self.feature_lookup_dict = Get_Feat_Id_Lookup_Dicts.feature_lookup_dict + self.filt_lookup_dict = Get_Feat_Id_Lookup_Dicts.filt_lookup_dict + + + # OBSOLETE: + def create_feature_lookup_dict__old(self): + """ Create dictionary: feature_lookup_dict: + """ + self.feature_lookup_dict = {} # New dict, even if exists already + self.filt_lookup_dict = {} + for filt_num in range(len(self.final_features.filter_list)): + self.filt_lookup_dict[filt_num] = {} + i = 0 + #feat_id_partition_groups = [] + for feat_name_internal,feat_dict in self.final_features.features_dict.items(): + feat_name = feat_dict['table_name'] + #feat_id_list = [] + for filt_num in range(len(self.final_features.filter_list)): + self.feature_lookup_dict[(filt_num, feat_name)] = i + self.filt_lookup_dict[filt_num][feat_name] = i + #feat_id_list.append(str(i)) + i += 1 + #feat_id_partition_groups.append(feat_id_list) + + + def create_feature_tables(self): + """ CREATE MySQL tables for all features. + + CREATE TABLE feature_lookup (feat_id SMALLINT UNSIGNED, filter_id TINYINT UNSIGNED, feat_name VARCHAR(120), INDEX(feat_id)) + + CREATE TABLE feature_values (src_id INT UNSIGNED, feat_id SMALLINT UNSIGNED, feat_val FLOAT, feat_weight FLOAT, INDEX(feat_id, feat_val), INDEX(src_id)) PARTITION BY LIST(feat_id) ( + PARTITION p0 VALUES IN (0), + PARTITION p0 VALUES IN (0), + ... + + + NOTE: To update the partition tables of an existing feat_values table: + - su - root, copy /var/lib/mysql/source_test_db to a backup, so you can always copy the table files back if needed. + - Also copy (using a shell script) all the feat_values mysql files to feat_values_orig named files + - see: mysql_feat_values_partition_table_copy.sh for a template of the script + - drop table feat_values; + - then run feature_extraction_interface.py 's create_feature_tables() + - insert into feat_values select * from feat_values_orig; + + """ + # KLUDGE: This is repeated in create_feature_lookup_dict() which + # was probably called earlier. feat_id_partition_groups should + # probably be self. and everything done in mentioned function. + # Then this section can be removed. + self.feature_lookup_dict = {} # New dict, even if exists already + self.filt_lookup_dict = {} + for filt_num in range(len(self.final_features.filter_list)): + self.filt_lookup_dict[filt_num] = {} + i = 0 + feat_id_partition_groups = [] + inter_partition_list = [] + in_partition_count = 0 + + for feat_name_internal,feat_dict in self.final_features.features_dict.items(): + feat_name = feat_dict['table_name'] + + feat_id_list = [] + for filt_num in range(len(self.final_features.filter_list)): + self.feature_lookup_dict[(filt_num, feat_name)] = i + self.filt_lookup_dict[filt_num][feat_name] = i + feat_id_list.append(str(i)) + i += 1 + + in_partition_count += 1 + inter_partition_list.extend(feat_id_list) + # The following clusters 4 features (and their filters) to a partitn + if in_partition_count == 4: + feat_id_partition_groups.append(inter_partition_list) + in_partition_count = 0 + inter_partition_list = [] + + if len(inter_partition_list) > 0: + feat_id_partition_groups.append(inter_partition_list) + #### NOTE: Here I extend the number of partitions / features beyond + # what is currently used, to allow features to be added in future + # without re-populating feature tables. + inter_partition_list = [] + in_partition_count = 0 + # NOTE: it seems we need at leas 50 * (9 filters) extra added at the moment + for i_future_feature in range(1000): + feat_id_list = [] + for filt_num in range(len(self.final_features.filter_list)): + feat_id_list.append(str(i)) + i += 1 + in_partition_count += 1 + inter_partition_list.extend(feat_id_list) + # The following clusters 4 features (and their filters) to a partitn + if in_partition_count == 4: + feat_id_partition_groups.append(inter_partition_list) + in_partition_count = 0 + inter_partition_list = [] + #### + + if 0: + ##### Do this section if you want to re-create the feat_lookup table (which is less likely than updating the partitions of the feat_values table) + ##### NOTE: if you want to add new features to the feat_lookup tabe, see Add_New_fatures.add_new_features_to_featlookup_table() + create_str = "CREATE TABLE %s (feat_id SMALLINT UNSIGNED, filter_id TINYINT UNSIGNED, feat_name VARCHAR(120), doc_str VARCHAR(2000), is_internal BOOLEAN, INDEX(feat_id), INDEX(filter_id,feat_name))" % (self.feat_lookup_tablename) + self.cursor.execute(create_str) + + insert_list = ["INSERT INTO %s (feat_id, filter_id, feat_name, doc_str, is_internal) VALUES " % (self.feat_lookup_tablename)] + for (filt_num,feat_name),i_feat in self.feature_lookup_dict.items(): + # KLUDGY: list structure is not ideal here: + doc_str = '' + #for temp_feat_name,temp_dict in self.final_features.ife.\ + # features_tup_list: + for temp_feat_name,temp_dict in self.final_features.features_dict.\ + items(): + if feat_name == temp_dict['table_name']: + doc_str = temp_dict['doc'][:2000].replace("'","_").replace('"',"_")#.replace("","_") + internal = temp_dict['internal'] + break # get out of loop + insert_list.append('(%d,%d,"%s","%s", %s), ' % \ + (i_feat, filt_num, feat_name, doc_str, internal)) + self.cursor.execute(''.join(insert_list)[:-2]) + + #create_str_list = ["CREATE TABLE %s (src_id INT UNSIGNED, feat_id SMALLINT UNSIGNED, feat_val DOUBLE, feat_weight FLOAT, INDEX(feat_id, feat_val), INDEX(src_id)) PARTITION BY LIST(feat_id) (" % (self.feat_values_tablename)] + create_str_list = ["CREATE TABLE %s (src_id INT UNSIGNED, feat_id SMALLINT UNSIGNED, feat_val DOUBLE, feat_weight FLOAT DEFAULT 1.0, INDEX(feat_id, feat_val), UNIQUE INDEX(src_id, feat_id)) PARTITION BY LIST(feat_id) (" % (self.feat_values_tablename)] + + # TODO: here I need to add additional/future feature-id numbers + i = 0 + for feat_name_assoc_featids_list in feat_id_partition_groups: + id_str = ','.join(feat_name_assoc_featids_list) + create_str_list.append("PARTITION p%d VALUES IN (%s), " %(i,id_str)) + i += 1 + + import pdb; pdb.set_trace() + + + self.cursor.execute(''.join(create_str_list)[:-2] + ")") + + + ############# + + # obsolete: + def create_feature_tables_old(self): + """ CREATE MySQL tables for all features. + + CREATE TABLE feature_lookup (feat_id SMALLINT UNSIGNED, filter_id TINYINT UNSIGNED, feat_name VARCHAR(120), INDEX(feat_id)) + + CREATE TABLE feature_values (src_id INT UNSIGNED, feat_id SMALLINT UNSIGNED, feat_val FLOAT, feat_weight FLOAT, INDEX(feat_id, feat_val), INDEX(src_id)) PARTITION BY LIST(feat_id) ( + PARTITION p0 VALUES IN (0), + PARTITION p0 VALUES IN (0), + ... + """ + # KLUDGE: This is repeated in create_feature_lookup_dict() which + # was probably called earlier. feat_id_partition_groups should + # probably be self. and everything done in mentioned function. + # Then this section can be removed. + self.feature_lookup_dict = {} # New dict, even if exists already + self.filt_lookup_dict = {} + for filt_num in range(len(self.final_features.filter_list)): + self.filt_lookup_dict[filt_num] = {} + i = 0 + feat_id_partition_groups = [] + for feat_name_internal,feat_dict in self.final_features.features_dict.items(): + feat_name = feat_dict['table_name'] + + feat_id_list = [] + for filt_num in range(len(self.final_features.filter_list)): + self.feature_lookup_dict[(filt_num, feat_name)] = i + self.filt_lookup_dict[filt_num][feat_name] = i + feat_id_list.append(str(i)) + i += 1 + feat_id_partition_groups.append(feat_id_list) + create_str = "CREATE TABLE %s (feat_id SMALLINT UNSIGNED, filter_id TINYINT UNSIGNED, feat_name VARCHAR(120), INDEX(feat_id), INDEX(filter_id,feat_name))" % (self.feat_lookup_tablename) + self.cursor.execute(create_str) + + insert_list = ["INSERT INTO %s (feat_id, filter_id, feat_name) VALUES " % (self.feat_lookup_tablename)] + for (filt_num,feat_name),i_feat in self.feature_lookup_dict.items(): + insert_list.append('(%d,%d,"%s"), '% (i_feat, filt_num, feat_name)) + self.cursor.execute(''.join(insert_list)[:-2]) + + create_str_list = ["CREATE TABLE %s (src_id INT UNSIGNED, feat_id SMALLINT UNSIGNED, feat_val DOUBLE, feat_weight FLOAT, INDEX(feat_id, feat_val), INDEX(src_id)) PARTITION BY LIST(feat_id) (" % (self.feat_values_tablename)] + i = 0 + for feat_name_assoc_featids_list in feat_id_partition_groups: + id_str = ','.join(feat_name_assoc_featids_list) + create_str_list.append("PARTITION p%d VALUES IN (%s), " %(i,id_str)) + i += 1 + + self.cursor.execute(''.join(create_str_list)[:-2] + ")") + + + def get_rez_for_featureless_sources(self, orig_rez): + """ Given a xrsio.get_sources_for_radec() outputed 'rez' structure, + query the feat_values table to ensure no src_ids already exist. + + Return the reduced rez structure. + """ + featureless_srcids = [] + reduced_rez = [] + for src_rez in orig_rez: + for temp_rez in src_rez.values(): + if 'src_id' in temp_rez: + src_id = temp_rez['src_id'] + break + select_str ="SELECT TRUE FROM feat_values WHERE src_id=%d LIMIT 1"\ + % (src_id) + self.cursor.execute(select_str) + results = self.cursor.fetchall() + if len(results) == 0: + reduced_rez.append(src_rez) + featureless_srcids.append(src_id) + return (featureless_srcids, reduced_rez) + + + def insert_srclist_features_into_rdb_tables(self,signals_list, srcid_list,\ + do_rdb_insert=True, do_delete_existing_featvals=False): + """ Form lists of values for all features & then for each feature, + insert each src_id & feature-list into their cooresponding table. + """ + insert_dict = {} + for filt_num in range(len(self.final_features.filter_list)): + insert_dict[filt_num] = {} + for feat_name_internal,feat_dict in self.final_features.features_dict.items(): + feat_name = feat_dict['table_name'] + insert_dict[filt_num][feat_name] = [] + + used_filters_list = [] + for i in range(len(signals_list)): + signal_obj = signals_list[i] + src_id = srcid_list[i] + + ### 20100527 dstarr adds a new condition since we have disabled the combo_band, which chooses the filter with the most epochs: + filter_epoch_counts = [] + for filt_name in signal_obj.properties['data'].keys(): + if not filt_name in ['multiband', 'combo_band']: + filter_epoch_counts.append((len(signal_obj.properties['data'][filt_name]['input']['flux_data']), filt_name)) + filter_epoch_counts.sort(reverse=True) + filter_most_sampled = filter_epoch_counts[0][1] + used_filters_list.append(filter_most_sampled) + ### + + for filt_name in signal_obj.properties['data'].keys(): + # 20090617 KLUDGE: + # (in the next 2 lines) I am going to just include the ['multiband', 'combo_band'] and not ['ptf_g', 'ptf_r'] bands since they are combined into ['combo_band']. NOTE: I think ['multiband'] has features like: 'ws_variability_ru', but not other features... so it is complimentary + ### 20100527 dstarr adds a new condition since we have disabled the combo_band, which chooses the filter with the most epochs: + ###if not filt_name in ['multiband', 'combo_band']: + ### continue # skip this band (probably a specific filter) + if not filt_name in ['multiband', 'combo_band', filter_most_sampled]: + continue # skip this band (probably a specific filter) + + + if filt_name in self.final_features.filter_list: + filt_num = self.final_features.filter_list.index(filt_name) + else: + filt_num = len(self.final_features.filter_list) - 1 # Given dummy filter + for feat_name_internal,feat_dict in self.final_features.features_dict.items(): + feat_name = feat_dict['table_name'] + # NOTE: if a certain feature was not generated, we don't INSERT + # it into the RDB. This alleviates lots of NULL feat values. + #if not signal_obj.properties['data'][filt_name]\ + # ['features'].has_key(feat_name): + # feat_val = "NULL" + #if feat_name == 'flux_percentile_ratio_mid50': + # import pdb; pdb.set_trace() + # print 'yo', feat_name, filt_name + if feat_name in signal_obj.properties['data'][filt_name]\ + ['features']: + feat_val = str(signal_obj.properties['data'][filt_name]\ + ['features'][feat_name]) + if ((feat_val == 'Fail') or (feat_val == 'nan') or + (feat_val == 'inf') or (feat_val == 'None')): + feat_val = "NULL" + else: + # KLUDGE we force strings and other feature values to NULL + try: + blah = float(feat_val) + except: + feat_val = "NULL" + # 20090727: dstarr adds this so that NULL features are not INSERTed into RDB. + # - this should be ok since RDB features are just for User queries, not TCP reference. + if feat_val != "NULL": + insert_dict[filt_num][feat_name].append((src_id,feat_val)) + #insert_dict[filt_num][feat_name].append((src_id,feat_val)) + + # Here we INSERT into database for each feature (which cooresponds to + # a unique MySQL Table Partition file): + # # # # # # # # # # + # TODO: ? which is MySQL faster (using partitions): mini INSERT of MEGA + + if do_rdb_insert: + #insert_list = ["INSERT INTO %s (src_id, feat_id, feat_val, feat_weight) VALUES " % (self.feat_values_tablename)] + insert_list = ["INSERT INTO %s (src_id, feat_id, feat_val) VALUES " % (self.feat_values_tablename)] + else: + insert_list = [] + # THIS is pretty KLUDGY since it iterates over all know filters (multiple surveys): And, all ptf is in filter_id=8, even though that includes 2 filter + combo_band: + for filt_num,filt_dict in insert_dict.items(): + for feat_name,val_list in filt_dict.items(): + #if 'flux_percentile_ratio' in feat_name: + #if len(val_list) == 0: + # print 'len()==0', feat_name, filt_num, val_list + + #if (filt_num == 8) and (feat_name == 'flux_percentile_ratio_mid50'): + # import pdb; pdb.set_trace() + # print 'yo', feat_name, filt_num, val_list + + for (src_id,feat_val) in val_list: + # # # # TODO: remove HARDCODE of feat_weight = 1.0 : + #insert_list.append("(%d,%d,%s,1.0), " % (src_id, \ + insert_list.append("(%d,%d,%s), " % (src_id, \ + self.feature_lookup_dict[(filt_num, feat_name)],\ + feat_val)) + if do_rdb_insert and len(insert_list) > 1: + + if do_delete_existing_featvals: + ### This will make things take much longer, so this is normally disabled, although doing this + ### will fill fix a bug in pairwise_classifications.py:get_featcals_for_srcids() + ### feat-val .png distribution plots, where older feat_values were getting plotted. + self.cursor.execute("DELETE FROM %s WHERE src_id=%d" % (self.feat_values_tablename, src_id)) + + #self.cursor.execute(''.join(insert_list)[:-2]) + insert_str = ''.join(insert_list)[:-2] + ' ON DUPLICATE KEY UPDATE feat_val=VALUES(feat_val)' + self.cursor.execute(insert_str) + print('feature RDB INSERTed/UPDATEd %d sources.' % (len(srcid_list))) + + # TODO: lets also insert / update which filter was used for the features, into the RDB. + + return (insert_list, used_filters_list) + + + def do_large_query_of_feature_rdb(self, order_by_feat=''): + """This executes a large query of (many) features in feature RDB tables. + The returned column (and column name?) can then be used for generating + a summary plot. + """ + # NOTE: can assert theres a feature table for all filter_feature combos + + table_names = [] + for filt_name in self.final_features.filter_list: + for feat_name,feat_dict in self.final_features.features_dict.\ + items(): + table_names.append("%s_%s" %(filt_name,feat_dict['table_name'])) + table_names.sort() + + select_col_strs = [] + select_join_strs = [] + + sub_table_names = table_names[:len(table_names)/5] + for table_name in sub_table_names: + select_col_strs.append("%s.feat" % (table_name)) + select_join_strs.append("%s" % (table_name)) # TODO: skip this and just use table_names + + # ... JOIN __some_table__ USING (srcid) JOIN __some_table__ USING (srcid) ... WHERE () + select_str = "SELECT %s FROM %s" % (', '.join(select_col_strs), ' JOIN '.join(select_join_strs)) + self.cursor.execute(select_str) + + results = self.cursor.fetchall() + + out_dict = {} + for i in range(len(table_names)): + table_name = table_names[i] + temp_list = [] # I think this produces a unique pointer + for row in results: + temp_list.append(row[i]) + out_dict[table_name] = temp_list + + return out_dict # e.g.: 'z_std':[4,5,6,7,...] + + + def scp_feat_summary_img_to_webserver(self, \ + summary_img_fpath='',\ + feature_summary_webserver_name='',\ + feature_summary_webserver_user='',\ + feature_summary_webserver_dirpath='',\ + feature_summary_webserver_url_prefix=''): + """ Scp's feature-summary-image to webserver path. + """ + scp_str = "scp -C %s %s@%s:%s/" % (summary_img_fpath,\ + feature_summary_webserver_user, \ + feature_summary_webserver_name, \ + feature_summary_webserver_dirpath) + os.system(scp_str) + fname_root = summary_img_fpath[summary_img_fpath.rfind('/')+1:] + remote_url = "%s%s" %(feature_summary_webserver_url_prefix, fname_root) + return remote_url + +class Plot_Signals: + """ + # TODO: I would like a plot which: + # - input: signals_list[0] + # - contains all sub plots within it. + # - filters are vertical, plot types are horizontal. + # - plots are written to .ps file + # - XML file / RA,dec name is recorded in plot. + """ + + def __init__(self, signals_list, gen): + self.signals_list = signals_list + self.gen = gen # this is just accessed for ra, dec, src_id info + self.pars = {\ + 'excluded_inters':[], + 'subplot_region_limits':{'x_min':0.1,#0.01, + 'x_max':1.0, + 'y_min':0.07, #0.0125, # 0.0 + 'y_max':0.9}, + 'subplot_x_buffer':0.01, + 'subplot_y_buffer':0.02, + 'filters_list':['u', 'g', 'r', 'i', 'z', 'j', 'h', 'k'], + } + + + def get_features_to_plot_list(self, signal_obj): + """ Determine how many feature plots are needed: + NOTE: this covers the possibility that some filters may contain extra features + """ + features_to_plot = [] + for filt in signal_obj.properties['data'].keys(): + for feature_name in signal_obj.properties['data'][filt]['inter'].keys(): + if feature_name not in features_to_plot: + if feature_name not in self.pars['excluded_inters']: + try: + feat_length = len(signal_obj.properties['data'][filt]\ + ['inter'][feature_name][0]) + if feat_length > 0: + print('Added: ', feature_name) + features_to_plot.append(feature_name) + except: + print('Skipped:', feature_name) + features_to_plot.sort() + return features_to_plot + + + def get_feature_plot_pos_dict(self, signal_object, features_to_plot=[], \ + filters_to_plot=[]): + """ Now set up a dict which contains positions constraints + of all plots + """ + n_rows = len(filters_to_plot) + n_cols = len(features_to_plot)# + 1 # include the 'input-data' plot + + subplot_x_size = ((self.pars['subplot_region_limits']['x_max'] - \ + self.pars['subplot_region_limits']['x_min']) - \ + (self.pars['subplot_x_buffer'] * (n_cols - 1))) / \ + (n_cols + 2)#+2 is HACK + subplot_y_size = ((self.pars['subplot_region_limits']['y_max'] - \ + self.pars['subplot_region_limits']['y_min']) - \ + (self.pars['subplot_y_buffer'] * (n_rows - 1))) / \ + n_rows + + x_start_list = [] + for i in range(n_cols): + x_start_list.append(self.pars['subplot_region_limits']['x_min'] + \ + i*(self.pars['subplot_x_buffer'] + subplot_x_size)) + y_start_list = [] + for i in range(n_rows): + y_start_list.append(self.pars['subplot_region_limits']['y_min'] + \ + i*(self.pars['subplot_y_buffer'] + subplot_y_size)) + + feature_plot_positions_dict = {} + for i_filt in range(len(filters_to_plot)): + filt = filters_to_plot[i_filt] + if filt not in feature_plot_positions_dict.keys(): + feature_plot_positions_dict[filt] = {} + for i_feat in range(len(features_to_plot)): + feature = features_to_plot[i_feat] + feature_dict = {'x_low':x_start_list[i_feat], + 'x_high':x_start_list[i_feat] + subplot_x_size, + 'y_low':y_start_list[i_filt], + 'y_high':y_start_list[i_filt] + subplot_y_size} + feature_plot_positions_dict[filt][feature] = feature_dict + return feature_plot_positions_dict + + + def generate_multi_filter_plot(self, signal_obj, ps_fpath='/tmp/blah.ps'): + """ Generate a single plot which summarizes data and feature datae + arrays for all filters. + """ + import pylab + #pylab.rcParams.update({'figure.figsize':[10,10]}) # ??x?? inches + pylab.hold(False) + pylab.hold(True) + features_to_plot = self.get_features_to_plot_list(signal_obj) + features_to_plot.insert(0,'FLUX vs TIME') + filters_to_plot = [] + #20080326 comment out & replace: + #available_filters = signal_obj.properties['data'].keys() + #for filt in self.pars['filters_list']: + # if filt in available_filters: + # filters_to_plot.append(filt) + filters_to_plot = signal_obj.properties['data'].keys() + + feature_plot_positions_dict= self.get_feature_plot_pos_dict(signal_obj,\ + features_to_plot=features_to_plot, \ + filters_to_plot=filters_to_plot) + empty_array = numpy.array([]) + pylab.hold(False) + pylab.clf() + pylab.plot(empty_array, empty_array, 'ro') + pylab.hold(True) + pylab.axis([0.12,0.9,0,0.9]) # This is needed, even with following line + pylab.axis('off') + #pylab.title('$\it{hi}$') + + source_info_str = "src_id=%d, ra=%f~%f, dec=%f~%f" % ( \ + self.gen.sig.x_sdict['src_id'], \ + self.gen.sig.x_sdict['ra'], \ + self.gen.sig.x_sdict['ra_rms'], \ + self.gen.sig.x_sdict['dec'], \ + self.gen.sig.x_sdict['dec_rms']) + pylab.text(0.2, 0.97, source_info_str, horizontalalignment='left', verticalalignment='bottom', rotation=0, size=10) + # Generate feature-plot names which are labeled at the top,left of plot: + for feature in features_to_plot: + x_low = feature_plot_positions_dict[filters_to_plot[0]][feature]['x_low'] + pylab.text(x_low, 0.9, feature, horizontalalignment='left', verticalalignment='bottom', rotation=15, size=7) + for filt in filters_to_plot: + y_low = feature_plot_positions_dict[filt]['FLUX vs TIME']['y_low'] + #x_low = feature_plot_positions_dict[filters_to_plot[0]][feature]['x_low'] + #pylab.text(-0.007, y_low, filt, horizontalalignment='left', verticalalignment='bottom', rotation=0, size=10) + pylab.text(-0.1, y_low, filt, horizontalalignment='left', verticalalignment='bottom', rotation=0, size=10) + + ###### + # Insert feature scalars in-between subplots: + i = 0 + for filt in filters_to_plot: + scalar_features = signal_obj.properties['data'][filt]['features'].keys() + scalar_features.sort() + print_list = ["%3.3s" % (filt)] + for feat in scalar_features: + val = str(signal_obj.properties['data'][filt]['features'][feat]) + try: + #print_list.append('%0.8s=%0.3f' % (feat, float(val))) + print_list.append('%10.10s' % ("%0.3f" % (float(val)))) + except: + #print_list.append('%0.8s=%s' % (feat, val)) + print_list.append('%10.10s' % (val)) + print_str = ' '.join(print_list) + #y_low = feature_plot_positions_dict[filt]['FLUX vs TIME']['y_low'] #- 0.1275#+ subplot_y_size / 2.0 + #pylab.text(0, -0.11 +i*0.012,print_str, horizontalalignment='left',\ + # verticalalignment='bottom', rotation=0, size=6) + pylab.text(0.1, -0.11 +i*0.012,print_str, horizontalalignment='left',\ + verticalalignment='bottom', rotation=0, size=6) + i += 1 + + # Now add a key/title to the scalar features: + scalar_features = signal_obj.properties['data'][filters_to_plot[0]][\ + 'features'].keys() + scalar_features.sort() + print_list = [' '] #["%3.3s" % ('')] + for feat in scalar_features: + print_list.append('%10.10s' % (feat)) + print_str = ' '.join(print_list) + print(print_str) + pylab.text(0.1, -0.11 + i*0.012, print_str, horizontalalignment='left', \ + verticalalignment='bottom', rotation=0, size=6) + ###### + + # Generate sub-plots: + for filt in filters_to_plot: + for feature in features_to_plot: + x_low = feature_plot_positions_dict[filt][feature]['x_low'] + x_high = feature_plot_positions_dict[filt][feature]['x_high'] + y_low = feature_plot_positions_dict[filt][feature]['y_low'] + y_high = feature_plot_positions_dict[filt][feature]['y_high'] + + a = pylab.axes([x_low, y_low, x_high-x_low, y_high-y_low], \ + axisbg ='y' ) + pylab.setp(a , xticks =[] , yticks =[]) + + if feature == 'FLUX vs TIME': + y_data = signal_obj.properties['data'][filt]['input']\ + ['flux_data'] + x_data = signal_obj.properties['data'][filt]['input']\ + ['time_data'] + if ((len(x_data) > 0) and (len(y_data) > 0)): + pylab.plot(x_data, y_data, 'bo', markersize=2) + else: + pylab.plot(numpy.array([]), 'bo', markersize=2) + #print 'NO DATA:', filt, feature,len(x_data),len(y_data) + else: + # 20080123: For some reason this suddenly FAILS: + # it is as if (with SDSS) I was expecting an array + # of arrays: + #y_data = signal_obj.properties['data'][filt]['inter']\ + # [feature][0] + #NOTE: properties...['inter'][feature] might be a single + # array of data, or a 2-elem "list" of two arrays: [1]=t/fq + y_data = signal_obj.properties['data'][filt]['inter'][feature] + try: + if (type(y_data[0]) == type('')): + pylab.plot(numpy.array([]), 'bo', markersize=2) + #print 'NO DATA:', filt, feature, y_data + elif (type(y_data[0]) == type(numpy.array([]))): + # Its a 2-elem list, 1st elem is data array, 2nd: t/fq + pylab.plot(y_data[0], 'bo', markersize=2) + elif (type(y_data) == type(numpy.array([]))): + pylab.plot(y_data, 'bo', markersize=2) + except: + pylab.plot(numpy.array([]), 'bo', markersize=2) + #print 'NO DATA:', filt, feature, y_data + + if os.path.exists(ps_fpath): + os.system('rm ' + ps_fpath) + pylab.savefig(ps_fpath) + #os.system('gv ' + ps_fpath + ' &') + #pylab.show() + pylab.hold(False) + + + def write_multi_filter_ps_files(self, ps_fpath='/tmp/blah.ps'): + for signal_obj in self.signals_list: + # TODO: automatically generate PS filenames? + self.generate_multi_filter_plot(signal_obj, ps_fpath=ps_fpath) + + +class AddNewFeatures: + """ Add some new features to the feat_lookup TABLE without + re-generating, re-indexing this table (rerunning testsuite.py). + """ + def initialize_mysql_connection(self, rdb_host_ip='', rdb_user='', \ + rdb_name='', rdb_port=3306, \ + feat_lookup_tablename='',\ + feat_values_tablename='', \ + db=None): + """ Create connection to feature mysql server. + + NOTE: this is taken from: Feature_database class + + """ + import MySQLdb + if db is None: + self.db = MySQLdb.connect(host=rdb_host_ip, user=rdb_user, \ + db=rdb_name, port=rdb_port, compress=1) + else: + self.db = db + self.cursor = self.db.cursor() + + + def add_new_features_to_featlookup_table(self, new_feat_names=[]): + """ Add some new features to the feat_lookup TABLE without + re-generating, re-indexing this table (rerunning testsuite.py). + """ + select_str = "SELECT max(feat_id), min(filter_id), max(filter_id) from feat_lookup" + + self.cursor.execute(select_str) + results = self.cursor.fetchall() + max_feat_id = results[0][0] + min_filt_id = results[0][1] + max_filt_id = results[0][2] + + insert_list = ["INSERT INTO feat_lookup (feat_id, filter_id, feat_name, doc_str, is_internal) VALUES "] + i_feat = max_feat_id + 1 + for feat_name in new_feat_names: + for filt_id in range(min_filt_id, max_filt_id+1): + insert_list.append('(%d, %d, "%s", "%s", 0), ' % ( \ + i_feat, filt_id, feat_name, feat_name)) + i_feat += 1 + self.cursor.execute(''.join(insert_list)[:-2]) + diff --git a/mltsp/TCP/Software/ingest_tools/generate_science_features.py b/mltsp/TCP/Software/ingest_tools/generate_science_features.py new file mode 100644 index 00000000..2b9b1c20 --- /dev/null +++ b/mltsp/TCP/Software/ingest_tools/generate_science_features.py @@ -0,0 +1,282 @@ +""" +This is to be called by flask script using subprocess.Popen() + +###Calling Flask code should use syntax like: +import subprocess +p = subprocess.Popen(home_str+"/Dropbox/work_etc/mltp/TCP/Software/ingest_tools/generate_science_features.py http://lyra.berkeley.edu:5123/get_lc_data/?filename=dotastro_215153.dat&sep=,", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) +sts = os.waitpid(p.pid, 0) +script_output = p.stdout.readlines() + +### This script can be tested using: +home_str+/Dropbox/work_etc/mltp/TCP/Software/ingest_tools/generate_science_features.py http://lyra.berkeley.edu:5123/get_lc_data/?filename=dotastro_215153.dat&sep=, + +""" +from __future__ import print_function + + +def currently_running_in_docker_container(): + import subprocess + import os + if not os.path.exists("/proc/1/cgroup"): + return False + proc = subprocess.Popen(["cat", "/proc/1/cgroup"],stdout=subprocess.PIPE) + output = proc.stdout.read() + if "/docker/" in str(output): + in_docker_container=True + else: + in_docker_container=False + return in_docker_container + + +import sys, os +import urllib +import io + +from ..feature_extract.Code import * +from ..feature_extract.Code import db_importer +from ..feature_extract.MLData import arffify + + +head_str = """ + + + + + + 6930531 + + Best positional information of the source + + + 323.47114731 + -0.79916734036 + + + 0.000277777777778 + 0.000277777777778 + + + + + + MJD + 0.0 + UTC + TOPOCENTER + + + + + + + + + +""" + +tail_str = """ + +
+
+
+
""" + + +def generate_feature_xml_using_raw_xml(raw_xml_str): + """ Generate an xml string which has features in it. + ####### This part was taken from file: test_feature_algorithms.py: + """ + tmp_stdout = sys.stdout + sys.stdout = open(os.devnull, 'w') + signals_list = [] + gen = generators_importers.from_xml(signals_list) + gen.generate(xml_handle=raw_xml_str) + gen.sig.add_features_to_xml_string(gen.signals_list) + + fp_out = io.StringIO() + gen.sig.write_xml(out_xml_fpath=fp_out) + xml_str = fp_out.getvalue() + sys.stdout.close() + sys.stdout = tmp_stdout + return xml_str + + +def generate_arff_using_raw_xml(xml_str): + """ This generates an arff, which contains features + """ + master_list = [] + master_features_dict = {} + all_class_list = [] + master_classes_dict = {} + + new_srcid = 1 + include_arff_header = True + + ### Generate the features: + tmp_stdout = sys.stdout + sys.stdout = open(os.devnull, 'w') + signals_list = [] + gen = generators_importers.from_xml(signals_list) + gen.generate(xml_handle=xml_str) + gen.sig.add_features_to_xml_string(signals_list) + gen.sig.x_sdict['src_id'] = new_srcid + dbi_src = db_importer.Source(make_dict_if_given_xml=False) + dbi_src.source_dict_to_xml(gen.sig.x_sdict) + sys.stdout.close() + sys.stdout = tmp_stdout + + xml_fpath = dbi_src.xml_string + + a = arffify.Maker(search=[], skip_class=False, local_xmls=True, convert_class_abrvs_to_names=False, flag_retrieve_class_abrvs_from_TUTOR=False, dorun=False) + out_dict = a.generate_arff_line_for_vosourcexml(num=new_srcid, xml_fpath=xml_fpath) + + master_list.append(out_dict) + all_class_list.append(out_dict['class']) + master_classes_dict[out_dict['class']] = 0 + for feat_tup in out_dict['features']: + master_features_dict[feat_tup] = 0 # just make sure there is this key in the dict. 0 is filler + + + master_features = master_features_dict.keys() + master_classes = master_classes_dict.keys() + a = arffify.Maker(search=[], skip_class=True, local_xmls=True, + convert_class_abrvs_to_names=False, + flag_retrieve_class_abrvs_from_TUTOR=False, + dorun=False, add_srcid_to_arff=True) + a.master_features = master_features + a.all_class_list = all_class_list + a.master_classes = master_classes + a.master_list = master_list + + + fp_out = io.StringIO() + a.write_arff(outfile=fp_out, \ + remove_sparse_classes=True, \ + n_sources_needed_for_class_inclusion=1, + include_header=include_arff_header, + use_str_srcid=True)#, classes_arff_str='', remove_sparse_classes=False) + arff_str = fp_out.getvalue() + return arff_str + + + + +def arff_to_dict(arff_str): + out_dict = {} + attributes_list = [] + all_lines = arff_str.split('\n') + line_num=0 + for line in all_lines: + if "@ATTRIBUTE" in line and len(line.split())==3: + attr_name,type_name = line.split()[1:] + attributes_list.append(attr_name) + elif "@ATTRIBUTE" in line and "class" in line: + attributes_list.append("class") + if "@data" in line: + all_vals = all_lines[line_num+1].split(',') + if len(all_vals) != len(attributes_list): + print("ERROR: len(all_vals) != len(attributes_list) !!!!") + print("len(all_vals) =", len(all_vals), " and len(attributes_list) =", len(attributes_list)) + print("attributes_list =", attributes_list) + return out_dict + for i in range(len(all_vals)): + try: + out_dict[attributes_list[i]] = float(all_vals[i]) + except ValueError: + out_dict[attributes_list[i]] = str(all_vals[i]) + + + line_num += 1 + return out_dict + + +def generate(timeseries_url="",path_to_csv=False,ts_data=None): + """ Main function + """ + + t_list = [] + m_list = [] + merr_list = [] + + if path_to_csv: # read csv from local machine: + try: + with open(path_to_csv) as f: + for line in f: + if line.strip() != "": + if len(line.split(",")) >= 3: + t,m,merr = line.strip().split(',')[:3] + t_list.append(float(t)) + m_list.append(float(m)) + merr_list.append(float(merr)) + elif len(line.split(",")) == 2: + t,m = line.strip().split(',') + t_list.append(float(t)) + m_list.append(float(m)) + merr_list.append(1.0) + + except Exception as theError: + print("generate_science_features::generate():", theError, "... Returning {}...") + return {} + elif timeseries_url != "": # a url is provided to return the ts data + + if timeseries_url not in ["","5125"]: + print(timeseries_url) + else: + if len(sys.argv) < 2: + print("lcs_classif.py - len(sys.argv) < 2. Returning...") + return {} + print("lcs_classif.py - sys.argv[1] =", sys.argv[1]) + timeseries_url = sys.argv[1] + + + try: + f = urllib.urlopen(timeseries_url) + ts_str = f.read() + f.close() + ts_list = eval(ts_str) + for tup in ts_list: + t_list.append(float(tup[0])) + m_list.append(float(tup[1])) + merr_list.append(float(tup[2])) + except Exception as theError: + print("generate_science_features::generate():", theError, "... Returning {}...") + return {} + elif ts_data is not None and isinstance(ts_data, list): + t_list, m_list, merr_list = zip(*ts_data) + t_list=list(t_list) + m_list=list(m_list) + merr_list=list(merr_list) + if len(t_list) == 0: + print("t_list = [] !!!!!!!!!!!\nReturning {}...") + return {} + #to see what's been read in: + #print zip(t_list,m_list,merr_list) + + data_str_list = [] + for i, t in enumerate(t_list): + data_str = ' %lf%lf%lf' % \ + (i, t, m_list[i], merr_list[i]) + data_str_list.append(data_str) + all_data_str = '\n'.join(data_str_list) + out_xml = head_str + all_data_str + tail_str + ### This generates a xml which contains features: + #feat_xml_str = generate_feature_xml_using_raw_xml(out_xml) + #print feat_xml_str + #print type(feat_xml_str) + ### This generates an arff, which contains features: + test_arff_str = generate_arff_using_raw_xml(out_xml) + + + #print test_arff_str + #print type(test_arff_str) + + out_dict = arff_to_dict(test_arff_str) + + return out_dict + + +if __name__ == '__main__': + + outdict = generate() + + print(outdict) diff --git a/mltsp/TCP/__init__.py b/mltsp/TCP/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/mltsp/TCP/__init__.py @@ -0,0 +1 @@ + diff --git a/mltsp/TCP/setup.py b/mltsp/TCP/setup.py new file mode 100644 index 00000000..591221a6 --- /dev/null +++ b/mltsp/TCP/setup.py @@ -0,0 +1,13 @@ +def configuration(parent_package='', top_path=None): + from numpy.distutils.misc_util import Configuration + + config = Configuration('TCP', parent_package, top_path) + config.add_subpackage('Software.feature_extract.Code.extractors.common_functions') + config.add_data_dir('tests/data') + return config + +if __name__ == "__main__": + from numpy.distutils.core import setup + + config = configuration(top_path='').todict() + setup(**config) diff --git a/mltsp/TCP/tests/data/asas_training_subset.tar.gz b/mltsp/TCP/tests/data/asas_training_subset.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6c9b80d8f98d34760f0be0e8c3674d3dd0812122 GIT binary patch literal 49604 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

%)s{ft|t5pnL-ufESosGle)42 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/tests/data/asas_training_subset_classes.dat b/mltsp/TCP/tests/data/asas_training_subset_classes.dat new file mode 100644 index 00000000..dfcdcf5f --- /dev/null +++ b/mltsp/TCP/tests/data/asas_training_subset_classes.dat @@ -0,0 +1,11 @@ +filename,class +217801,Mira +219538,Herbig_AEBE +223592,Beta_Lyrae +224635,Classical_Cepheid +232798,Mira +235913,Classical_Cepheid +243412,W_Ursae_Maj +245486,Delta_Scuti +247327,Mira +257141,W_Ursae_Maj diff --git a/mltsp/TCP/tests/data/expected_features.csv b/mltsp/TCP/tests/data/expected_features.csv new file mode 100644 index 00000000..b933ca10 --- /dev/null +++ b/mltsp/TCP/tests/data/expected_features.csv @@ -0,0 +1,4 @@ +amplitude,percent_beyond_1_std,flux_percentile_ratio_mid20,flux_percentile_ratio_mid35,flux_percentile_ratio_mid50,flux_percentile_ratio_mid65,flux_percentile_ratio_mid80,fold2P_slope_10percentile,fold2P_slope_90percentile,freq1_amplitude1,freq1_amplitude2,freq1_amplitude3,freq1_amplitude4,freq1_freq,freq1_rel_phase2,freq1_rel_phase3,freq1_rel_phase4,freq1_lambda,freq2_amplitude1,freq2_amplitude2,freq2_amplitude3,freq2_amplitude4,freq2_freq,freq2_rel_phase2,freq2_rel_phase3,freq2_rel_phase4,freq3_amplitude1,freq3_amplitude2,freq3_amplitude3,freq3_amplitude4,freq3_freq,freq3_rel_phase2,freq3_rel_phase3,freq3_rel_phase4,freq_amplituderatio_21,freq_amplituderatio_31,freq_frequency_ratio_21,freq_frequency_ratio_31,freq_model_max_delta_mags,freq_model_min_delta_mags,freq_model_phi1_phi2,freq_n_alias,freq1_signif,freq_signif_ratio_21,freq_signif_ratio_31,freq_varrat,freq_y_offset,linear_trend,max_slope,median_absolute_deviation,percent_close_to_median,medperc90_2p_p,p2p_scatter_2praw,p2p_scatter_over_mad,p2p_scatter_pfold_over_mad,p2p_ssqr_diff_over_var,percent_amplitude,percent_difference_flux_percentile,qso_log_chi2_qsonu,qso_log_chi2nuNULL_chi2nu,scatter_res_raw,skew,std,stetson_j,stetson_k +2.1945,0.253112033195,0.285772413247,0.485563492638,0.642631914634,0.789740868608,0.923373011981,-0.311705510481,0.292778722405,0.429008103185,1.68494928722,0.146317196391,0.122921688359,0.00143279599859,-0.7604340529,-2.89758356884,2.31426905911,0.0242805022258,0.125242935219,0.0211855054721,0.0184750320716,0.00283892001925,0.999571742982,2.56028049712,1.76768771054,-0.839725070561,0.0955682376551,0.0722449482508,0.0120842338576,0.0094883040135,0.00117920378645,-0.303170516972,-1.90022311693,1.77261473781,0.291936059689,0.222765577026,697.637168142,0.823008849558,0.160965739057,0.903528527299,0.187972881807,1.0,17.872747262,0.585489275584,0.537748734949,0.000362360289748,0.133041279353,-5.56786497429e-05,246.0,1.0895,0.174273858921,2.13909510616,0.62737528001,0.0541532813217,0.0761817347407,0.106454574436,2.77224594185,3.29948222911,3.45391977699,3.33954175839,0.059250519988,0.430177545946,1.27977266695,11.6164598093,0.975115676799 +0.4695,0.0,0.139119169778,0.255495667005,0.393355839888,0.535711347642,0.734599139703,-3.44445315026,3.33079067907,0.101356388872,0.0142452789209,0.000544269338366,0.00107242105339,6.0688970237,-1.81077583522,2.09025278402,1.39950087952,5.49349009063,0.031588622934,0.00182228637781,0.000699527879068,0.000236067604213,2.32500693118,0.157212384313,1.93472746326,1.80814345425,0.0290885372084,0.00095494424806,0.000476951099757,0.000178847144735,9.11422776194,-0.372819871971,2.49939772332,-1.58691692312,0.3116589224,0.286992635908,0.383102056618,1.50179311436,8.52055231926e-11,3.05807826284e-09,0.392710735671,0.0,11.2681277508,0.420849558642,0.403033027668,6.88293697906e-05,-0.00293698251444,2.4986485735e-05,108.0,0.088,0.530526315789,0.963185017921,0.740974922214,1.25568181818,1.03977272727,1.78389839526,0.410613749759,0.414012881456,1.9335536941,0.11275583543,0.710226460445,0.553675530851,0.139236236408,0.18631078005,0.958934476026 +0.365,0.0,0.177346219385,0.311432749237,0.436904048972,0.58829679784,0.767240219219,-1.92175775163,2.02554908086,0.0415961966283,0.000911813785774,0.000511471109915,0.000212247939257,8.38595385133,-1.57223443843,-2.66503221071,-1.8396554581,8.6831998581,0.00933845692313,0.00094041954207,0.000160934485012,3.64872550248e-05,2.14644736632,-1.91736845556,2.02528294451,1.23108961642,0.0108355446285,0.00137037442191,0.000247344688974,0.000108884258677,10.5167443839,-2.23927736456,-2.76721197884,0.903334770169,0.224502663226,0.260493639004,0.255957450324,1.25409041956,2.122405654e-10,8.91044751872e-10,0.355937287392,0.0,12.0229612753,0.327293422988,0.3407100021,1.80627698458e-05,0.00125438619435,1.97883821107e-06,192.0,0.028,0.94,0.954069234919,0.722647412686,1.32142857143,0.821428571429,1.81285820151,0.347170155841,0.113942004588,0.358773050166,0.215195470446,0.570580496785,2.96462375998,0.0554298828792,-0.853192275644,0.787674761859 diff --git a/mltsp/TCP/tests/test_feature_generation.py b/mltsp/TCP/tests/test_feature_generation.py new file mode 100644 index 00000000..882ad165 --- /dev/null +++ b/mltsp/TCP/tests/test_feature_generation.py @@ -0,0 +1,753 @@ +from mltsp import featurize +from mltsp import cfg +from mltsp.TCP.Software.feature_extract.Code import extractors + +import numpy as np +import numpy.testing as npt + +import time +import os +import shutil +import glob + + +## TODO just a list for reference, will eventually remove +#untested_extractors = [ +# 'freq_model_phi1_phi2_extractor', # TODO wrong? +# 'freq_n_alias_extractor', # TODO what is this? +# ] +# +# +## These values are chosen because they lie exactly on the grid of frequencies +## searched by the Lomb Scargle optimization procedure +#WAVE_FREQS = np.array([5.3, 3.3, 2.1]) +## This value is hard-coded in Lomb Scargle algorithm algorithm +#NUM_HARMONICS = 4 +# +# +#def setup(): +# print("Copying data files") +# # copy data files to proper directory: +# shutil.copy(os.path.join(os.path.dirname(__file__), +# "data/asas_training_subset_classes.dat"), +# os.path.join(cfg.UPLOAD_FOLDER)) +# +# shutil.copy(os.path.join(os.path.dirname(__file__), +# "data/asas_training_subset.tar.gz"), +# os.path.join(cfg.UPLOAD_FOLDER)) +# +# +## Random noise generated at irregularly-sampled times +#def irregular_random(seed=0, size=50): +# state = np.random.RandomState(seed) +# times = np.sort(state.uniform(0, 10, size)) +# values = state.normal(1, 1, size) +# errors = state.exponential(0.1, size) +# return times, values, errors +# +# +## Periodic test data sampled at regular intervals: superposition +## of multiple sine waves, each with multiple harmonics +#def regular_periodic(freqs, amplitudes, phase, size=501): +# times = np.linspace(0, 2, size) +# values = np.zeros(size) +# for (i,j), amplitude in np.ndenumerate(amplitudes): +# values += amplitude * np.sin(2*np.pi*times*freqs[i]*(j+1)+phase) +# errors = 1e-4*np.ones(size) +# return times, values, errors +# +# +## Periodic test data sampled at randomly spaced intervals: superposition +## of multiple sine waves, each with multiple harmonics +#def irregular_periodic(freqs, amplitudes, phase, seed=0, size=501): +# state = np.random.RandomState(seed) +# times = np.sort(state.uniform(0, 2, size)) +# values = np.zeros(size) +# for i in range(len(freqs)): +# for j in range(NUM_HARMONICS): +# values += amplitudes[i,j] * np.sin(2*np.pi*times*freqs[i]*(j+1)+phase) +# errors = state.exponential(1e-2, size) +# return times, values, errors +# +# +#def initialize_extractor_from_data(extractor, times, values, errors, **kwargs): +# data_dict = {'time_data': times, 'flux_data': values, 'rms_data': errors, +# 'time_data_unit': None, 'flux_data_unit': 'mag', +# } +# extractor.extr({'data': {'v': {'features': [], 'inter': [], +# 'input': data_dict}}}, band='v') +# +# +## TODO test for few data points +#def test_amplitude_extractor(): +# times, values, errors = irregular_random() +# e = extractors.amplitude_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), +# (max(e.flux_data)-min(e.flux_data))/2.) +# +# e = extractors.percent_amplitude_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# max_scaled = 10**(-0.4*max(e.flux_data)) +# min_scaled = 10**(-0.4*min(e.flux_data)) +# med_scaled = 10**(-0.4*np.median(e.flux_data)) +# peak_from_median = max(abs((max_scaled - med_scaled)/med_scaled), +# abs((min_scaled - med_scaled))/med_scaled) +# npt.assert_allclose(e.extract(), peak_from_median) +# +# e = extractors.percent_difference_flux_percentile_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# band_offset = 13.72 +# w_m2 = 10**(-0.4*(e.flux_data+band_offset)-3) # 1 erg/s/cm^2 = 10^-3 w/m^2 +# npt.assert_allclose(e.extract(), np.diff( +# np.percentile(w_m2, [5, 95])) / np.median(w_m2)) +# +# e = extractors.flux_percentile_ratio_mid20_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), +# np.diff(np.percentile(w_m2, [40, 60])) / +# np.diff(np.percentile(w_m2, [5, 95]))) +# +# e = extractors.flux_percentile_ratio_mid35_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), +# np.diff(np.percentile(w_m2, [32.5, 67.5])) / +# np.diff(np.percentile(w_m2, [5, 95]))) +# +# e = extractors.flux_percentile_ratio_mid50_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), +# np.diff(np.percentile(w_m2, [25, 75])) / +# np.diff(np.percentile(w_m2, [5, 95]))) +# +# e = extractors.flux_percentile_ratio_mid65_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), +# np.diff(np.percentile(w_m2, [17.5, 82.5])) / +# np.diff(np.percentile(w_m2, [5, 95]))) +# +# e = extractors.flux_percentile_ratio_mid80_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), +# np.diff(np.percentile(w_m2, [10, 90])) / +# np.diff(np.percentile(w_m2, [5, 95]))) +# +# +#def test_ar_is_extractor(): +## Uses a long, slow exponential decay +## Even after removing LS fit, an AR model still fits well +# times = np.linspace(0, 500, 201) +# theta = 0.95 +# sigma = 0.0 +# values = theta ** (times/250.) + sigma*np.random.randn(len(times)) +# errors = 1e-4*np.ones(len(times)) +# +# e = extractors.ar_is_theta_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), theta, atol=3e-2) +# +# e = extractors.ar_is_sigma_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), sigma, atol=1e-5) +# +## Hard-coded values from reference data set +# times, values, errors = irregular_random() +# e = extractors.ar_is_theta_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), 5.9608609865491405e-06, rtol=1e-3) +# e = extractors.ar_is_sigma_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), 1.6427095072108497, rtol=1e-3) +# +# +## TODO is there a way to make this test more precise? +#def test_delta_phase_2minima_extractor(): +# times1, values1, errors1 = regular_periodic(np.array([1.0]), np.array(1.0,ndmin=2), 0.0) +# times2, values2, errors2 = regular_periodic(np.array([3.0]), np.array(0.5,ndmin=2), np.pi/8) +# e = extractors.delta_phase_2minima_extractor() +# initialize_extractor_from_data(e, times1, values1+values2, errors1+errors2) +## Closed-form distance between local minima +# npt.assert_allclose(e.extract(), 1 - 0.163143 - 0.351671, atol=5e-2) +# +# +#def test_gskew_extractor(): +# times, values, errors = irregular_random() +# e = extractors.gskew_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# i_3percent = int(round(0.03*len(e.flux_data))) +## TODO use percentile +# npt.assert_allclose(e.extract(), 2*np.median(e.flux_data) - +# np.median(sorted(e.flux_data)[-i_3percent:]) - +# np.median(sorted(e.flux_data)[0:i_3percent])) +# +# +#def test_linear_extractor(): +# from numpy.polynomial.polynomial import polyfit as pfit +# times, values, errors = irregular_random() +# e = extractors.linear_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# error_weights = 1. / (e.rms_data)**2 / ((1./e.rms_data)**2).sum() +# wls_coefs = pfit(e.time_data, e.flux_data, 1, w=error_weights**0.5) +# npt.assert_allclose(e.extract(), np.flipud(wls_coefs), rtol=1e-4) +# +# +## TODO the smoothed model here seems insanely oversmoothed +## In general all these extractors are a complete mess, punting for now +##""" +#def test_lcmodel_extractor(): +# frequencies = np.hstack((1., np.zeros(len(WAVE_FREQS)-1))) +# amplitudes = np.zeros((len(frequencies),4)) +# amplitudes[0,:] = [2,0,0,0] +# phase = 0.0 +# times, values, errors = regular_periodic(frequencies, amplitudes, phase) +# +# e = extractors.lcmodel_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# lc_feats = e.extract() +# +## Median is zero for this data, so crossing median = changing sign +# incr_median_crosses = sum((np.abs(np.diff(np.sign(values))) > 1) & +# (np.diff(values) > 0)) +# npt.assert_allclose(lc_feats['median_n_per_day'], (incr_median_crosses+1) / +# (max(times)-min(times))) +##""" +# +# +## TODO what about very short time scale? could cause problems +#def test_lomb_scargle_regular_single_freq(): +# frequencies = np.hstack((WAVE_FREQS[0], np.zeros(len(WAVE_FREQS)-1))) +# amplitudes = np.zeros((len(frequencies),4)) +# amplitudes[0,:] = [8,4,2,1] +# phase = 0.1 +# times, values, errors = regular_periodic(frequencies, amplitudes, phase) +# +## Only test the first (true) frequency; the rest correspond to noise +# e_name = 'freq1_harmonics_freq_0_extractor' +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(frequencies[0], e.extract()) +# +## Hard-coded value from previous solution +# e_name = 'freq1_lambda_extractor' +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0.001996007984, e.extract(), rtol=1e-7) +# +# for (i,j), amplitude in np.ndenumerate(amplitudes): +# e_name = 'freq{}_harmonics_amplitude_{}_extractor'.format(i+1,j) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(amplitude, e.extract(), rtol=1e-2, atol=1e-2) +# +## Only test the first (true) frequency; the rest correspond to noise +# for j in range(NUM_HARMONICS): +# e_name = 'freq1_harmonics_rel_phase_{}_extractor'.format(j) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +## TODO why is this what 'relative phase' means? +# npt.assert_allclose(phase*j*(-1**j), e.extract(), rtol=1e-2, atol=1e-2) +# +## Frequency ratio not relevant since there is only; only test amplitude/signif +# for i in [1,2]: +# e_name = 'freq_amplitude_ratio_{}1_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=1e-3) +# +## TODO make significance test more precise +# e = extractors.freq_signif_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_array_less(10., e.extract()) +# """ +# e_name = 'freq_signif_ratio_{}1_extractor'.format(i) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=1e-3) +# """ +## Only one frequency, so this should explain basically all the variance +# e = extractors.freq_varrat_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=5e-3) +# +## Exactly periodic, so the same minima/maxima should reoccur +# e = extractors.freq_model_max_delta_mags_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=1e-6) +# e = extractors.freq_model_min_delta_mags_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=1e-6) +# +## Linear trend should be zero since the signal is exactly sinusoidal +# e = extractors.linear_trend_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=1e-4) +# +# folded_times = times % 1./(frequencies[0]/2.) +# sort_indices = np.argsort(folded_times) +# folded_times = folded_times[sort_indices] +# folded_values = values[sort_indices] +# +## Residuals from doubling period should be much higher +# e = extractors.medperc90_2p_p_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_array_less(10., e.extract()) +# +## Slopes should be the same for {un,}folded data; use unfolded for stability +# slopes = np.diff(e.flux_data) / np.diff(e.time_data) +# e = extractors.fold2P_slope_10percentile_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(np.percentile(slopes,10), e.extract(), rtol=1e-2) +# e = extractors.fold2P_slope_90percentile_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(np.percentile(slopes,90), e.extract(), rtol=1e-2) +# +# +#def test_lomb_scargle_irregular_single_freq(): +# frequencies = np.hstack((WAVE_FREQS[0], np.zeros(len(WAVE_FREQS)-1))) +# amplitudes = np.zeros((len(WAVE_FREQS),4)) +# amplitudes[0,:] = [8,4,2,1] +# phase = 0.1 +# times, values, errors = irregular_periodic(frequencies, amplitudes, phase) +# +## Only test the first (true) frequency; the rest correspond to noise +# e_name = 'freq1_harmonics_freq_0_extractor' +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(frequencies[0], e.extract(), rtol=1e-2) +# +## Only test first frequency here; noise gives non-zero amplitudes for residuals +# for j in range(NUM_HARMONICS): +# e_name = 'freq1_harmonics_amplitude_{}_extractor'.format(j) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(amplitudes[0,j], e.extract(), rtol=5e-2, atol=5e-2) +# +# e_name = 'freq1_harmonics_rel_phase_{}_extractor'.format(j) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +## TODO why is this what 'relative phase' means? +# npt.assert_allclose(phase*j*(-1**j), e.extract(), rtol=1e-1, atol=1e-1) +# +## TODO make significance test more precise +# e = extractors.freq_signif_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_array_less(10., e.extract()) +# """ +# e_name = 'freq_signif_ratio_{}1_extractor'.format(i) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=1e-3) +# """ +## Only one frequency, so this should explain basically all the variance +# e = extractors.freq_varrat_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=5e-3) +# +# e = extractors.freq_y_offset_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(-np.mean(values), e.extract(), rtol=5e-2) +## TODO this extractor seems wrong to me; fix then test? +# """ +# e = extractors.freq_model_phi1_phi2_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(-np.mean(values), e.extract(), rtol=5e-2) +# """ +# +# +## Tests for features derived from period-folded data +#def test_lomb_scargle_period_folding(): +# frequencies = np.hstack((WAVE_FREQS[0], np.zeros(len(WAVE_FREQS)-1))) +# amplitudes = np.zeros((len(WAVE_FREQS),4)) +# amplitudes[0,:] = [8,4,2,1] +# phase = 0.1 +# times, values, errors = irregular_periodic(frequencies, amplitudes, phase) +# +## Folding is numerically unstable so we need to use the exact fitted frequency +# e = extractors.freq1_harmonics_freq_0_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# freq_est = e.extract() +## Fold by 1*period +# fold1ed_times = (times-times[0]) % (1./freq_est) +# sort_indices = np.argsort(fold1ed_times) +# fold1ed_times = fold1ed_times[sort_indices] +# fold1ed_values = values[sort_indices] +## Fold by 2*period +# fold2ed_times = (times-times[0]) % (2./freq_est) +# sort_indices = np.argsort(fold2ed_times) +# fold2ed_times = fold2ed_times[sort_indices] +# fold2ed_values = values[sort_indices] +# +# e = extractors.p2p_scatter_2praw_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(np.sum(np.diff(fold2ed_values)**2) / +# np.sum(np.diff(values)**2), e.extract()) +# +# e = extractors.p2p_ssqr_diff_over_var_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(np.sum(np.diff(values)**2) / +# ((len(values) - 1) * np.var(values)), e.extract()) +# +# e = extractors.p2p_scatter_over_mad_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(np.median(np.abs(np.diff(values))) / +# np.median(np.abs(values-np.median(values))), +# e.extract()) +# +# e = extractors.p2p_scatter_pfold_over_mad_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(np.median(np.abs(np.diff(fold1ed_values))) / +# np.median(np.abs(values-np.median(values))), +# e.extract()) +# +# +#def test_lomb_scargle_regular_multi_freq(): +# frequencies = WAVE_FREQS +# amplitudes = np.zeros((len(frequencies),4)) +# amplitudes[:,0] = [4,2,1] +# phase = 0.1 +# times, values, errors = regular_periodic(frequencies, amplitudes, phase) +# +# for i, frequency in enumerate(frequencies): +# e_name = 'freq{}_harmonics_freq_0_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(frequency, e.extract()) +# +# for (i,j), amplitude in np.ndenumerate(amplitudes): +# e_name = 'freq{}_harmonics_amplitude_{}_extractor'.format(i+1,j) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(amplitude, e.extract(), rtol=5e-2, atol=5e-2) +# +## Relative phase is zero for first harmonic +# for i in range(len(frequencies)): +# e_name = 'freq{}_harmonics_rel_phase_0_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), rtol=1e-2, atol=1e-2) +# +# for i in [1,2]: +# e_name = 'freq_amplitude_ratio_{}1_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(amplitudes[i,0]/amplitudes[0,0], e.extract(), atol=2e-2) +# +# e_name = 'freq_frequency_ratio_{}1_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(frequencies[i]/frequencies[0], e.extract(), atol=1e-3) +# +## TODO make significance test more precise +# e = extractors.freq_signif_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_array_less(10., e.extract()) +# """ +# e_name = 'freq_signif_ratio_{}1_extractor'.format(i) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=1e-3) +# """ +# +# +#def test_lomb_scargle_irregular_multi_freq(): +# frequencies = WAVE_FREQS +# amplitudes = np.zeros((len(frequencies),4)) +# amplitudes[:,0] = [4,2,1] +# phase = 0.1 +# times, values, errors = irregular_periodic(frequencies, amplitudes, phase) +# +# for i, frequency in enumerate(frequencies): +# e_name = 'freq{}_harmonics_freq_0_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(frequency, e.extract(), rtol=1e-2) +# +# for (i,j), amplitude in np.ndenumerate(amplitudes): +# e_name = 'freq{}_harmonics_amplitude_{}_extractor'.format(i+1,j) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(amplitude, e.extract(), rtol=1e-1, atol=1e-1) +# +## Relative phase is zero for first harmonic +# for i in range(len(frequencies)): +# e_name = 'freq{}_harmonics_rel_phase_0_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), rtol=1e-2, atol=1e-2) +# +# for i in [1,2]: +# e_name = 'freq_amplitude_ratio_{}1_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(amplitudes[i,0]/amplitudes[0,0], e.extract(), atol=2e-2) +# +# e_name = 'freq_frequency_ratio_{}1_extractor'.format(i+1) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(frequencies[i]/frequencies[0], e.extract(), atol=5e-2) +# +## TODO make significance test more precise +# e = extractors.freq_signif_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_array_less(10., e.extract()) +#""" +# e_name = 'freq_signif_ratio_{}1_extractor'.format(i) +# e = getattr(extractors, e_name)() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(0., e.extract(), atol=1e-3) +#""" +# +#def test_max_extractor(): +# times, values, errors = irregular_random() +# e = extractors.max_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_equal(e.extract(), max(e.flux_data)) +# +# +## TODO this returns the index of the biggest slope...might be wrong +#def test_max_slope_extractor(): +# times, values, errors = irregular_random() +# e = extractors.max_slope_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# slopes = np.diff(e.flux_data) / np.diff(e.time_data) +# npt.assert_allclose(e.extract(), np.argmax(np.abs(slopes))) +# +# +#def test_median_absolute_deviation_extractor(): +# times, values, errors = irregular_random() +# e = extractors.median_absolute_deviation_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), np.median( +# np.abs(e.flux_data - np.median(e.flux_data)))) +# +# +#def test_median_buffer_range_percentage_extractor(): +# times, values, errors = irregular_random() +# e = extractors.median_buffer_range_percentage_extractor() +# initialize_extractor_from_data(e, times, values, errors) +## TODO feature is currently broken; this test is for the broken version, +## should replace with commented version once fixed +# amplitude = (np.abs(max(e.flux_data)) - np.abs(min(e.flux_data))) / 2. +## amplitude = (max(e.flux_data) - min(e.flux_data)) / 2. +# within_buffer = np.abs(e.flux_data - np.median(e.flux_data)) < 0.2*amplitude +# npt.assert_allclose(e.extract(), np.mean(within_buffer)) +# +# +#def test_median_extractor(): +# times, values, errors = irregular_random() +# e = extractors.median_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), np.median(e.flux_data)) +# +# +#def test_min_extractor(): +# times, values, errors = irregular_random() +# e = extractors.min_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_equal(e.extract(), min(e.flux_data)) +# +# +#def test_n_points_extractor(): +# times, values, errors = irregular_random() +# e = extractors.n_points_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_equal(e.extract(), len(e.flux_data)) +# +# +## TODO deprecated? +#def test_old_dc_extractor(): +# times, values, errors = irregular_random() +# e = extractors.old_dc_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), np.mean(e.flux_data)) +# +# +#def test_phase_dispersion_extractor(): +## Frequency chosen to lie on the relevant search grid +# frequencies = np.hstack((5.36, np.zeros(len(WAVE_FREQS)-1))) +# amplitudes = np.zeros((len(frequencies),4)) +# amplitudes[0,:] = [1,0,0,0] +# phase = 0.1 +# times, values, errors = regular_periodic(frequencies, amplitudes, phase) +# e = extractors.phase_dispersion_freq0_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), frequencies[0]) +# +# e = extractors.freq1_harmonics_freq_0_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# lomb_freq = e.extract() +# e = extractors.ratio_PDM_LS_freq0_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), frequencies[0]/lomb_freq) +# +# +## Hard-coded values from previous implementation; not sure of examples with a +## closed-form solution +#def test_qso_extractor(): +# times, values, errors = irregular_random() +# e = extractors.qso_log_chi2_qsonu_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), 6.9844064754) +# +# times, values, errors = irregular_random() +# e = extractors.qso_log_chi2nuNULL_chi2nu_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), -0.456526327522) +# +# +#def test_s_extractor(): +# times, values, errors = irregular_random() +# e = extractors.s_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# x_bar_wt = (e.flux_data / (e.rms_data)**2).sum()/((1/e.rms_data)**2).sum() +# resids = e.flux_data-x_bar_wt +# npt.assert_allclose(e.extract(), +# np.sqrt(sum(resids**2)/(len(e.flux_data)-1))) +# +# +## TODO these seem broken/deprecated, remove? +#""" +#def test_sine_fit_extractor(): +# e = extractors.sine_fit_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), ...) +# +# +#def test_sine_leastsq_extractor(): +# e = extractors.sine_leastsq_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), ...) +#""" +# +#def test_scatter_res_raw_extractor(): +# times, values, errors = irregular_random() +# e = extractors.lomb_scargle_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# lomb_dict = e.extract() +# residuals = values - lomb_dict['freq1_model'] +# resid_mad = np.median(np.abs(residuals-np.median(residuals))) +# value_mad = np.median(np.abs(values-np.median(values))) +# e = extractors.scatter_res_raw_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), resid_mad/value_mad, atol=3e-2) +# +# +#def test_skew_extractor(): +# from scipy import stats +# times, values, errors = irregular_random() +# e = extractors.skew_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), stats.skew(e.flux_data)) +# +# +#def test_std_extractor(): +# times, values, errors = irregular_random() +# e = extractors.std_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), np.std(e.flux_data)) +# +# +## These steps are basically just copied from the Stetson code +#def test_stetson_extractor(): +# times, values, errors = irregular_random(size=201) +# e = extractors.stetson_j_extractor() +# initialize_extractor_from_data(e, times, values, errors) +## Stetson mean approximately equal to standard mean for large inputs +# dists = np.sqrt(float(len(values)) / (len(values) - 1.)) * (values - np.mean(values)) / 0.1 +# npt.assert_allclose(e.extract(), +# np.mean(np.sign(dists**2-1)*np.sqrt(np.abs(dists**2-1))), +# rtol=1e-2) +## Stetson_j should be somewhat close to (scaled) variance for normal data +# npt.assert_allclose(e.extract()*0.1, np.var(values), rtol=2e-1) +## Hard-coded original value +# npt.assert_allclose(e.extract(), 7.591347175195703) +# +# e = extractors.stetson_k_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), 1./0.798 * np.mean(np.abs(dists)) / np.sqrt(np.mean(dists**2)), rtol=5e-4) +## Hard-coded original value +# npt.assert_allclose(e.extract(), 1.0087218792719013) +# +# +## TODO this should be a function not an extractor +#def test_watt_per_m2_flux_extractor(): +# times, values, errors = irregular_random() +# e = extractors.watt_per_m2_flux_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# band_const = 13.72 # from constants dict in watt_per_m2_flux_extractor +## 1 erg/s/cm^2 = 10^-3 w/m^2 +# npt.assert_allclose(e.extract(), 10**(-0.4*(e.flux_data+band_const)-3)) +# +# +## TODO more general name? +#def test_weighted_average_extractor(): +# times, values, errors = irregular_random() +# e = extractors.weighted_average_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# weighted_std_err = 1./sum(e.rms_data**2) +# error_weights = 1./(e.rms_data)**2 / weighted_std_err +# weighted_avg = np.average(e.flux_data, weights=error_weights) +# npt.assert_allclose(e.extract(), weighted_avg) +# +# e = extractors.wei_av_uncertainty_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_allclose(e.extract(), weighted_std_err) +# +# e = extractors.dist_from_u_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# dists_from_weighted_avg = e.flux_data - weighted_avg +# npt.assert_allclose(e.extract(), dists_from_weighted_avg) +# +# e = extractors.stdvs_from_u_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# stds_from_weighted_avg = dists_from_weighted_avg / np.sqrt(weighted_std_err) +# npt.assert_allclose(e.extract(), stds_from_weighted_avg) +# +# e = extractors.beyond1std_extractor() +# initialize_extractor_from_data(e, times, values, errors) +# npt.assert_equal(e.extract(), np.mean(stds_from_weighted_avg > 1.)) +# +# +## TODO compare numbers of features, check for completeness +#def test_feature_generation(): +# for f in glob.glob(os.path.join(cfg.FEATURES_FOLDER, '/*.csv')): +# os.remove(f) +# +# tic = time.time() +# this_dir = os.path.join(os.path.dirname(__file__)) +# +# featurize.featurize( +# os.path.join(cfg.UPLOAD_FOLDER, "asas_training_subset_classes.dat"), +# os.path.join(cfg.UPLOAD_FOLDER, "asas_training_subset.tar.gz"), +# featureset_id="testfeatset", is_test=True, +# features_to_use=cfg.features_list_science +# ) +# +# delta = time.time() - tic +# +# def features_from_csv(filename): +# with open(filename) as f: +# feature_names = f.readline().strip().split(",") +# feature_values = np.loadtxt(f, delimiter=',') +# +# return feature_names, feature_values +# +# features_extracted, values_computed = features_from_csv( +# os.path.join(cfg.FEATURES_FOLDER, "testfeatset_features.csv")) +# +# features_expected, values_expected = features_from_csv( +# os.path.join(this_dir, "data/expected_features.csv")) +# +# os.remove(os.path.join(cfg.FEATURES_FOLDER, "testfeatset_features.csv")) +# os.remove(os.path.join(cfg.FEATURES_FOLDER, +# "testfeatset_classes.npy")) +# npt.assert_equal(features_extracted, features_expected) +# npt.assert_array_almost_equal(values_computed, values_expected) +# +# # Ensure this test takes less than a minute to run +# assert delta < 60 +# +# +#if __name__ == "__main__": +# setup() +# test_feature_generation() diff --git a/mltsp/setup.py b/mltsp/setup.py index 70da53f5..7b13fee5 100644 --- a/mltsp/setup.py +++ b/mltsp/setup.py @@ -2,6 +2,7 @@ def configuration(parent_package='', top_path=None): from numpy.distutils.misc_util import Configuration config = Configuration('mltsp', parent_package, top_path) + config.add_subpackage('TCP') config.add_subpackage('science_features') return config

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 q*c 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%0Aahm>aaK8+PIy=2?9yG9XM!Er8M*56)Vd#!T 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_nothetaLU.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_nothetaLU.png new file mode 100755 index 0000000000000000000000000000000000000000..0b0c7e157ecf4f0b6b8a5a125042f025cb1a2070 GIT binary patch literal 32755 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�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 AE&u=k literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_thetaU10.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_thetaU10.png new file mode 100755 index 0000000000000000000000000000000000000000..d08e69a0f4945de9e2abf3c849c5bfa79f74701d GIT binary patch literal 55089 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_thetaU100.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart100_thetaU100.png new file mode 100755 index 0000000000000000000000000000000000000000..e10aa9e9b7f093315c599248dd99e1135fd1b70c GIT binary patch literal 118364 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 literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart10_thetaU1_absoluteexp.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart10_thetaU1_absoluteexp.png new file mode 100755 index 0000000000000000000000000000000000000000..7806683f2c60d25f1ae9dc4c7f9ea79e77d76854 GIT binary patch literal 104825 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�`mP&c~orjJp7zdnLtMX@L$t5G-Puix3!ti(Y$bp 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 DTvlDu literal 0 HcmV?d00001 diff --git a/mltsp/TCP/Software/feature_extract/gp_orig_randomstart20_thetaU10_absoluteexp.png b/mltsp/TCP/Software/feature_extract/gp_orig_randomstart20_thetaU10_absoluteexp.png new file mode 100755 index 0000000000000000000000000000000000000000..41b61b8df0f0f8f8f2d85174ef594f306f1ed77d GIT binary patch literal 116785 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