Repository: wright-group/WrightTools

Issue:
data.from_spc130
WrightTools.data.from_spc130(filepath, name=None, verbose=True)

Justification:
Create a data object from the exported .asc data files of  _Becker & Hickl_'s SPCM software for the  _Becker & Hickl_ SPC-130 time correlated single photon counter board used in the UW-Madison Solar Group TRPL and PL Imaging System.




Discussion:

Resolving patch:
diff --git a/WrightTools/data.py b/WrightTools/data.py
--- a/WrightTools/data.py
+++ b/WrightTools/data.py
@@ -10,6 +10,7 @@
 .. _kaiser window: https://en.wikipedia.org/wiki/Kaiser_window
 .. _scipy ndimage:
     http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.interpolation.zoom.html
+.. _spcm: http://www.becker-hickl.com/software/spcm.htm
 """
 
 
@@ -518,6 +519,7 @@ def __init__(self, axes, channels, constants=[],
         self.channels = channels
         self.name = name
         self.source = source
+        self.attrs = {}
         # update
         self._update()
         # reserve a copy of own self at this stage
@@ -2869,6 +2871,82 @@ def from_shimadzu(filepath, name=None, verbose=True):
     return data
 
 
+def from_spcm(filepath, name=None, delimiter=',', format=None, verbose=True):
+    """Create a data object from Becker & Hickl spcm_ software.
+
+    Parameters
+    ----------
+    filepath : string
+        Path to SPC-130 .asc file.
+    name : string (optional)
+        Name to give to the created data object. If None, filename is used.
+        Default is None.
+    delimiter : string (optional)
+        The string used to separate values. Default is ','.
+    format : {'ascii'} (optional)
+        Force file to be interpreted as a specific format. Default is None
+        (autorecognized).
+    verbose : boolean (optional)
+        Toggle talkback. Default is True.
+
+    Returns
+    -------
+    WrightTools.data.Data object
+    """
+    # check filepath
+    if not os.path.isfile(filepath):
+        raise wt_exceptions.FileNotFound(path=filepath)
+    if not filepath.endswith('asc'):
+        w = wt_exceptions.WrongFileTypeWarning.warn(filepath, 'asc')
+        warnings.warn(w)
+    # create headers dictionary
+    headers = collections.OrderedDict()
+    with open(filepath) as f:
+        while True:
+            line = f.readline().strip()
+            if len(line) == 0:
+                break
+            else:
+                key, value = line.split(':', 1)
+                if key.strip() == 'Revision':
+                    headers['resolution'] = int(value.strip(' bits ADC'))
+                else:
+                    headers[key.strip()] = value.strip()
+    # import data
+    # now import file as a local var as comma-delimited .asc file
+    arr = np.genfromtxt(filepath, skip_header=(len(headers) + 2), skip_footer=1,
+                        delimiter=delimiter).T
+    # unexpected delimiter handler
+    if np.any(np.isnan(arr)):
+        # delimiter warning dictionary
+        delim_dict = {',': 'comma',
+                      ' ': 'space',
+                      '\t': 'tab',
+                      ';': 'semicolon',
+                      ':': 'colon'}
+        warnings.warn('file is not %s-delimited! Trying other delimiters.' % delim_dict[delimiter])
+        for delimiter in delim_dict.keys():
+            arr = np.genfromtxt(filepath, skip_header=len(headers) + 2, skip_footer=1,
+                                delimiter=delimiter).T
+            if not np.any(np.isnan(arr)):
+                print('file is %s-delimited.' % delim_dict[delimiter])
+                break
+        else:
+            error = '''Unable to load data file.
+                       Data object not created!
+                       Please check that your file is formatted properly.'''
+            raise RuntimeError(error)
+    # construct data
+    x_axis = Axis(arr[0], 'ns', name='time')
+    signal = Channel(arr[1], 'sig', name='counts', signed=False)
+    data = Data([x_axis], [signal], source='SPC_130', name=name)
+    data.attrs.update(headers)
+    if verbose:
+        print('data object created!')
+    # return
+    return data
+
+
 def from_Tensor27(filepath, name=None, verbose=True):
     """Create a data object from a Tensor27 FTIR file.
 
diff --git a/WrightTools/datasets/__init__.py b/WrightTools/datasets/__init__.py
--- a/WrightTools/datasets/__init__.py
+++ b/WrightTools/datasets/__init__.py
@@ -20,7 +20,7 @@
 
 class DatasetContainer(object):
 
-    def from_files(self, dirname, prefix=''):
+    def _from_files(self, dirname, prefix=''):
         """Add datasets from files in a directory.
 
         Parameters
@@ -35,7 +35,7 @@ def from_files(self, dirname, prefix=''):
             n = prefix + wt_kit.string2identifier(os.path.basename(p).split('.')[0])
             setattr(self, n, p)
 
-    def from_directory(self, dirname, prefix=''):
+    def _from_directory(self, dirname, prefix=''):
         """Add dataset from files in a directory.
 
         Parameters
@@ -53,29 +53,32 @@ def from_directory(self, dirname, prefix=''):
 # --- fill ----------------------------------------------------------------------------------------
 
 
+BrunoldrRaman = DatasetContainer()
+BrunoldrRaman._from_files(os.path.join(here, 'BrunoldrRaman'))
+
+Cary50 = DatasetContainer()
+Cary50._from_files('Cary50')
+
 COLORS = DatasetContainer()
-COLORS.from_files(os.path.join(here, 'COLORS', 'v0.2'), prefix='v0p2_')
-COLORS.from_directory(os.path.join(here, 'COLORS', 'v2.1', 'MoS2 TrEE movie'), prefix='v2p1_')
+COLORS._from_files(os.path.join(here, 'COLORS', 'v0.2'), prefix='v0p2_')
+COLORS._from_directory(os.path.join(here, 'COLORS', 'v2.1', 'MoS2 TrEE movie'), prefix='v2p1_')
 
 JASCO = DatasetContainer()
-JASCO.from_files('JASCO')
+JASCO._from_files('JASCO')
 
 KENT = DatasetContainer()
-KENT.from_directory(os.path.join(here, 'KENT', 'LDS821 TRSF'))
-KENT.from_directory(os.path.join(here, 'KENT', 'PbSe 2D delay A'))
-KENT.from_directory(os.path.join(here, 'KENT', 'PbSe 2D delay B'))
-
-BrunoldrRaman = DatasetContainer()
-BrunoldrRaman.from_files(os.path.join(here, 'BrunoldrRaman'))
+KENT._from_directory(os.path.join(here, 'KENT', 'LDS821 TRSF'))
+KENT._from_directory(os.path.join(here, 'KENT', 'PbSe 2D delay A'))
+KENT._from_directory(os.path.join(here, 'KENT', 'PbSe 2D delay B'))
 
 PyCMDS = DatasetContainer()
-PyCMDS.from_files('PyCMDS')
+PyCMDS._from_files('PyCMDS')
 
-Cary50 = DatasetContainer()
-Cary50.from_files('Cary50')
+spcm = DatasetContainer()
+spcm._from_files('spcm')
 
 Tensor27 = DatasetContainer()
-Tensor27.from_files('Tensor27')
+Tensor27._from_files('Tensor27')
 
 
 # --- pretty namespace ----------------------------------------------------------------------------


Test patch:
diff --git a/WrightTools/datasets/spcm/test_data.asc b/WrightTools/datasets/spcm/test_data.asc
new file mode 100644
--- /dev/null
+++ b/WrightTools/datasets/spcm/test_data.asc
@@ -0,0 +1,1035 @@
+  Title : nd 0.9_001
+  Version : 1 975 M
+  Revision : 10 bits ADC
+  Date : 2017-07-27
+  Time : 13:26:44
+  Author : System
+  Company : Unknown
+  Contents : Autosaved results from multi-step measurement mode
+  
+*BLOCK 1  ( Time[ns]  No_of_photons )
+0.000000 ,    0
+0.003257 ,    0
+0.006515 ,    0
+0.009772 ,    0
+0.013030 ,    0
+0.016287 ,    0
+0.019544 ,    0
+0.022802 ,    0
+0.026059 ,    0
+0.029317 ,    0
+0.032574 ,    0
+0.035831 ,    0
+0.039089 ,    0
+0.042346 ,    0
+0.045604 ,    0
+0.048861 ,    0
+0.052118 ,    0
+0.055376 ,    0
+0.058633 ,    0
+0.061890 ,    0
+0.065148 ,    0
+0.068405 ,    0
+0.071663 ,    0
+0.074920 ,    0
+0.078177 ,    0
+0.081435 ,    0
+0.084692 ,    0
+0.087950 ,    0
+0.091207 ,    0
+0.094464 ,    0
+0.097722 ,    0
+0.100979 ,    0
+0.104237 ,    0
+0.107494 ,    0
+0.110751 ,    0
+0.114009 ,    0
+0.117266 ,   36
+0.120524 ,   72
+0.123781 ,   18
+0.127038 ,   72
+0.130296 ,   72
+0.133553 ,   36
+0.136811 ,   72
+0.140068 ,   81
+0.143325 ,   72
+0.146583 ,   63
+0.149840 ,  108
+0.153098 ,   45
+0.156355 ,   81
+0.159612 ,   63
+0.162870 ,   72
+0.166127 ,   63
+0.169384 ,   63
+0.172642 ,   63
+0.175899 ,   63
+0.179157 ,   81
+0.182414 ,   45
+0.185671 ,   36
+0.188929 ,   72
+0.192186 ,   36
+0.195444 ,   63
+0.198701 ,   27
+0.201958 ,   81
+0.205216 ,   63
+0.208473 ,   81
+0.211731 ,   54
+0.214988 ,   36
+0.218245 ,   54
+0.221503 ,   72
+0.224760 ,   45
+0.228018 ,   27
+0.231275 ,   36
+0.234532 ,   99
+0.237790 ,   72
+0.241047 ,   54
+0.244305 ,   90
+0.247562 ,   45
+0.250819 ,   63
+0.254077 ,   72
+0.257334 ,   72
+0.260592 ,   63
+0.263849 ,   45
+0.267106 ,  117
+0.270364 ,   27
+0.273621 ,   45
+0.276879 ,  117
+0.280136 ,   45
+0.283393 ,   72
+0.286651 ,   81
+0.289908 ,   81
+0.293165 ,   36
+0.296423 ,   36
+0.299680 ,   99
+0.302938 ,   36
+0.306195 ,  126
+0.309452 ,   54
+0.312710 ,   72
+0.315967 ,   81
+0.319225 ,  108
+0.322482 ,   63
+0.325739 ,  108
+0.328997 ,   36
+0.332254 ,   18
+0.335512 ,   63
+0.338769 ,   63
+0.342026 ,   54
+0.345284 ,   72
+0.348541 ,   27
+0.351799 ,   81
+0.355056 ,   18
+0.358313 ,   36
+0.361571 ,  117
+0.364828 ,   36
+0.368086 ,   81
+0.371343 ,   45
+0.374600 ,   81
+0.377858 ,   54
+0.381115 ,   63
+0.384373 ,   36
+0.387630 ,  126
+0.390887 ,   63
+0.394145 ,  189
+0.397402 ,  342
+0.400659 ,  423
+0.403917 ,  540
+0.407174 ,  729
+0.410432 , 1134
+0.413689 , 1962
+0.416946 , 2340
+0.420204 , 3492
+0.423461 , 4131
+0.426719 , 5769
+0.429976 , 7668
+0.433233 ,10233
+0.436491 ,12870
+0.439748 ,15363
+0.443006 ,19332
+0.446263 ,24354
+0.449520 ,29511
+0.452778 ,34281
+0.456035 ,40203
+0.459293 ,47034
+0.462550 ,51912
+0.465807 ,56187
+0.469065 ,59148
+0.472322 ,62370
+0.475580 ,63720
+0.478837 ,63126
+0.482094 ,65529
+0.485352 ,64431
+0.488609 ,61695
+0.491867 ,62784
+0.495124 ,62028
+0.498381 ,59454
+0.501639 ,59094
+0.504896 ,59607
+0.508153 ,58293
+0.511411 ,57006
+0.514668 ,55764
+0.517926 ,54090
+0.521183 ,52794
+0.524440 ,50796
+0.527698 ,49392
+0.530955 ,49122
+0.534213 ,46548
+0.537470 ,44865
+0.540727 ,44352
+0.543985 ,42183
+0.547242 ,40941
+0.550500 ,39393
+0.553757 ,38214
+0.557014 ,37044
+0.560272 ,35631
+0.563529 ,34326
+0.566787 ,32310
+0.570044 ,31104
+0.573301 ,29880
+0.576559 ,29493
+0.579816 ,27918
+0.583074 ,26145
+0.586331 ,26919
+0.589588 ,25083
+0.592846 ,24210
+0.596103 ,23544
+0.599361 ,21573
+0.602618 ,22095
+0.605875 ,20583
+0.609133 ,20889
+0.612390 ,18522
+0.615647 ,18558
+0.618905 ,18594
+0.622162 ,17883
+0.625420 ,17118
+0.628677 ,16641
+0.631934 ,16785
+0.635192 ,16749
+0.638449 ,14895
+0.641707 ,14481
+0.644964 ,14265
+0.648221 ,13500
+0.651479 ,13374
+0.654736 ,12771
+0.657994 ,12672
+0.661251 ,12726
+0.664508 ,12015
+0.667766 ,11979
+0.671023 ,11169
+0.674281 ,10629
+0.677538 ,10566
+0.680795 ,10368
+0.684053 ,10440
+0.687310 , 9540
+0.690568 , 9396
+0.693825 , 9027
+0.697082 , 9360
+0.700340 , 9342
+0.703597 , 8163
+0.706855 , 8298
+0.710112 , 8136
+0.713369 , 8433
+0.716627 , 7830
+0.719884 , 7551
+0.723141 , 7551
+0.726399 , 7506
+0.729656 , 7290
+0.732914 , 7353
+0.736171 , 7110
+0.739428 , 6624
+0.742686 , 6732
+0.745943 , 6471
+0.749201 , 6399
+0.752458 , 6732
+0.755715 , 5760
+0.758973 , 6525
+0.762230 , 5949
+0.765488 , 5823
+0.768745 , 5922
+0.772002 , 5661
+0.775260 , 5760
+0.778517 , 5571
+0.781775 , 5265
+0.785032 , 5094
+0.788289 , 5589
+0.791547 , 5490
+0.794804 , 5148
+0.798062 , 4716
+0.801319 , 5121
+0.804576 , 5031
+0.807834 , 4752
+0.811091 , 4887
+0.814349 , 4437
+0.817606 , 4509
+0.820863 , 4725
+0.824121 , 4383
+0.827378 , 4635
+0.830636 , 4590
+0.833893 , 4626
+0.837150 , 4302
+0.840408 , 4419
+0.843665 , 4167
+0.846922 , 3879
+0.850180 , 4185
+0.853437 , 4176
+0.856695 , 3987
+0.859952 , 3753
+0.863209 , 4131
+0.866467 , 4221
+0.869724 , 3924
+0.872982 , 3798
+0.876239 , 3645
+0.879496 , 3978
+0.882754 , 3726
+0.886011 , 3843
+0.889269 , 3654
+0.892526 , 3933
+0.895783 , 3483
+0.899041 , 3375
+0.902298 , 3537
+0.905556 , 3231
+0.908813 , 3510
+0.912070 , 3303
+0.915328 , 3600
+0.918585 , 3285
+0.921843 , 3735
+0.925100 , 3276
+0.928357 , 3303
+0.931615 , 3546
+0.934872 , 3267
+0.938130 , 3474
+0.941387 , 3348
+0.944644 , 3051
+0.947902 , 3564
+0.951159 , 3312
+0.954416 , 3474
+0.957674 , 3384
+0.960931 , 3312
+0.964189 , 3249
+0.967446 , 3555
+0.970703 , 3123
+0.973961 , 2997
+0.977218 , 3123
+0.980476 , 3267
+0.983733 , 2979
+0.986990 , 2988
+0.990248 , 3015
+0.993505 , 2970
+0.996763 , 2916
+1.000020 , 3051
+1.003277 , 3033
+1.006535 , 3303
+1.009792 , 2943
+1.013050 , 2745
+1.016307 , 3060
+1.019564 , 2754
+1.022822 , 2637
+1.026079 , 2844
+1.029337 , 2637
+1.032594 , 2808
+1.035851 , 2718
+1.039109 , 2979
+1.042366 , 2736
+1.045624 , 2682
+1.048881 , 2889
+1.052138 , 2493
+1.055396 , 2592
+1.058653 , 2529
+1.061910 , 2385
+1.065168 , 2691
+1.068425 , 2601
+1.071683 , 2655
+1.074940 , 2511
+1.078197 , 2430
+1.081455 , 2484
+1.084712 , 2493
+1.087970 , 2313
+1.091227 , 2286
+1.094484 , 2502
+1.097742 , 2736
+1.100999 , 2664
+1.104257 , 2727
+1.107514 , 2376
+1.110771 , 2538
+1.114029 , 2556
+1.117286 , 2439
+1.120544 , 2466
+1.123801 , 2322
+1.127058 , 2331
+1.130316 , 2754
+1.133573 , 2556
+1.136831 , 2475
+1.140088 , 2268
+1.143345 , 2331
+1.146603 , 2475
+1.149860 , 2178
+1.153118 , 2205
+1.156375 , 2052
+1.159632 , 2088
+1.162890 , 2043
+1.166147 , 2475
+1.169404 , 2187
+1.172662 , 2160
+1.175919 , 2106
+1.179177 , 2142
+1.182434 , 2286
+1.185691 , 2358
+1.188949 , 2115
+1.192206 , 1881
+1.195464 , 2043
+1.198721 , 2277
+1.201978 , 2205
+1.205236 , 2034
+1.208493 , 2052
+1.211751 , 2205
+1.215008 , 2025
+1.218265 , 2079
+1.221523 , 2250
+1.224780 , 2169
+1.228038 , 2097
+1.231295 , 2061
+1.234552 , 2178
+1.237810 , 2007
+1.241067 , 1863
+1.244325 , 1773
+1.247582 , 2061
+1.250839 , 1890
+1.254097 , 1845
+1.257354 , 1944
+1.260612 , 1989
+1.263869 , 1899
+1.267126 , 1809
+1.270384 , 1575
+1.273641 , 1728
+1.276898 , 1854
+1.280156 , 1800
+1.283413 , 1917
+1.286671 , 1845
+1.289928 , 1899
+1.293185 , 1674
+1.296443 , 1800
+1.299700 , 1665
+1.302958 , 1971
+1.306215 , 1773
+1.309472 , 1980
+1.312730 , 1980
+1.315987 , 1701
+1.319245 , 1593
+1.322502 , 1647
+1.325759 , 1926
+1.329017 , 1710
+1.332274 , 1935
+1.335532 , 1683
+1.338789 , 1485
+1.342046 , 1863
+1.345304 , 1791
+1.348561 , 1881
+1.351819 , 1827
+1.355076 , 1935
+1.358333 , 1656
+1.361591 , 1620
+1.364848 , 1827
+1.368106 , 1692
+1.371363 , 1629
+1.374620 , 1674
+1.377878 , 1665
+1.381135 , 1638
+1.384393 , 1782
+1.387650 , 1674
+1.390907 , 1449
+1.394165 , 1854
+1.397422 , 1827
+1.400679 , 1737
+1.403937 , 1800
+1.407194 , 1665
+1.410452 , 1584
+1.413709 , 1656
+1.416966 , 1566
+1.420224 , 1656
+1.423481 , 1566
+1.426739 , 1611
+1.429996 , 1539
+1.433253 , 1755
+1.436511 , 1620
+1.439768 , 1521
+1.443026 , 1449
+1.446283 , 1458
+1.449540 , 1620
+1.452798 , 1764
+1.456055 , 1332
+1.459313 , 1530
+1.462570 , 1611
+1.465827 , 1512
+1.469085 , 1296
+1.472342 , 1737
+1.475600 , 1386
+1.478857 , 1629
+1.482114 , 1638
+1.485372 , 1467
+1.488629 , 1269
+1.491887 , 1521
+1.495144 , 1386
+1.498401 , 1710
+1.501659 , 1377
+1.504916 , 1485
+1.508173 , 1305
+1.511431 , 1287
+1.514688 , 1620
+1.517946 , 1440
+1.521203 , 1521
+1.524460 , 1548
+1.527718 , 1458
+1.530975 , 1494
+1.534233 , 1350
+1.537490 , 1305
+1.540747 , 1512
+1.544005 , 1485
+1.547262 , 1485
+1.550520 , 1503
+1.553777 , 1395
+1.557034 , 1404
+1.560292 , 1350
+1.563549 , 1314
+1.566807 , 1305
+1.570064 , 1503
+1.573321 , 1359
+1.576579 , 1476
+1.579836 , 1269
+1.583094 , 1224
+1.586351 , 1467
+1.589608 , 1395
+1.592866 , 1701
+1.596123 , 1404
+1.599381 , 1341
+1.602638 , 1305
+1.605895 , 1341
+1.609153 , 1269
+1.612410 , 1368
+1.615667 , 1197
+1.618925 , 1152
+1.622182 , 1269
+1.625440 , 1206
+1.628697 , 1251
+1.631954 , 1350
+1.635212 , 1368
+1.638469 , 1395
+1.641727 , 1467
+1.644984 , 1215
+1.648241 , 1233
+1.651499 , 1251
+1.654756 , 1395
+1.658014 , 1260
+1.661271 , 1125
+1.664528 , 1152
+1.667786 , 1449
+1.671043 ,  999
+1.674301 , 1161
+1.677558 , 1260
+1.680815 , 1080
+1.684073 , 1152
+1.687330 , 1161
+1.690588 , 1179
+1.693845 , 1332
+1.697102 , 1188
+1.700360 , 1071
+1.703617 , 1287
+1.706875 , 1017
+1.710132 , 1242
+1.713389 , 1260
+1.716647 , 1188
+1.719904 , 1152
+1.723161 , 1152
+1.726419 , 1278
+1.729676 , 1215
+1.732934 , 1188
+1.736191 , 1206
+1.739448 , 1305
+1.742706 , 1341
+1.745963 , 1197
+1.749221 , 1170
+1.752478 , 1044
+1.755735 , 1386
+1.758993 , 1044
+1.762250 , 1233
+1.765508 , 1224
+1.768765 , 1287
+1.772022 , 1071
+1.775280 , 1161
+1.778537 , 1080
+1.781795 , 1089
+1.785052 , 1251
+1.788309 , 1062
+1.791567 , 1080
+1.794824 , 1278
+1.798082 , 1215
+1.801339 , 1134
+1.804596 , 1215
+1.807854 , 1035
+1.811111 ,  999
+1.814369 , 1080
+1.817626 , 1044
+1.820883 , 1233
+1.824141 , 1053
+1.827398 , 1161
+1.830655 , 1116
+1.833913 , 1035
+1.837170 , 1170
+1.840428 , 1008
+1.843685 , 1089
+1.846942 , 1143
+1.850200 ,  963
+1.853457 , 1026
+1.856715 , 1161
+1.859972 , 1017
+1.863229 , 1053
+1.866487 , 1053
+1.869744 ,  972
+1.873002 , 1224
+1.876259 ,  999
+1.879516 , 1080
+1.882774 , 1179
+1.886031 , 1044
+1.889289 , 1017
+1.892546 ,  945
+1.895803 , 1107
+1.899061 ,  990
+1.902318 ,  927
+1.905576 ,  918
+1.908833 ,  999
+1.912090 ,  945
+1.915348 , 1098
+1.918605 , 1008
+1.921863 , 1179
+1.925120 ,  990
+1.928377 , 1026
+1.931635 , 1008
+1.934892 , 1026
+1.938150 , 1035
+1.941407 , 1152
+1.944664 , 1062
+1.947922 ,  936
+1.951179 , 1017
+1.954436 , 1206
+1.957694 ,  972
+1.960951 , 1188
+1.964209 , 1053
+1.967466 ,  981
+1.970723 ,  864
+1.973981 , 1035
+1.977238 ,  945
+1.980496 ,  891
+1.983753 ,  936
+1.987010 ,  810
+1.990268 ,  891
+1.993525 ,  945
+1.996783 , 1071
+2.000040 ,  900
+2.003297 ,  963
+2.006555 ,  873
+2.009812 ,  801
+2.013070 ,  963
+2.016327 ,  882
+2.019584 ,  882
+2.022842 ,  945
+2.026099 , 1098
+2.029357 , 1071
+2.032614 ,  792
+2.035871 ,  954
+2.039129 ,  972
+2.042386 ,  855
+2.045644 ,  918
+2.048901 , 1053
+2.052158 ,  999
+2.055416 , 1053
+2.058673 , 1053
+2.061930 ,  891
+2.065188 ,  945
+2.068445 ,  891
+2.071703 ,  927
+2.074960 ,  774
+2.078217 ,  945
+2.081475 ,  981
+2.084732 ,  864
+2.087990 ,  729
+2.091247 ,  900
+2.094504 ,  747
+2.097762 ,  954
+2.101019 ,  945
+2.104277 ,  693
+2.107534 ,  864
+2.110791 ,  963
+2.114049 ,  864
+2.117306 ,  936
+2.120564 ,  864
+2.123821 ,  864
+2.127078 ,  837
+2.130336 ,  873
+2.133593 ,  900
+2.136851 ,  936
+2.140108 ,  855
+2.143365 ,  963
+2.146623 ,  936
+2.149880 ,  900
+2.153138 ,  774
+2.156395 ,  990
+2.159652 ,  819
+2.162910 ,  738
+2.166167 ,  900
+2.169424 ,  990
+2.172682 ,  873
+2.175939 ,  738
+2.179197 ,  711
+2.182454 ,  891
+2.185711 ,  828
+2.188969 ,  819
+2.192226 ,  882
+2.195484 ,  684
+2.198741 ,  756
+2.201998 ,  990
+2.205256 ,  855
+2.208513 ,  846
+2.211771 ,  693
+2.215028 ,  774
+2.218285 ,  819
+2.221543 ,  756
+2.224800 ,  756
+2.228058 ,  756
+2.231315 ,  918
+2.234572 ,  828
+2.237830 ,  756
+2.241087 ,  810
+2.244345 ,  648
+2.247602 ,  828
+2.250859 ,  846
+2.254117 ,  819
+2.257374 ,  864
+2.260632 ,  828
+2.263889 ,  792
+2.267146 ,  882
+2.270404 ,  792
+2.273661 ,  801
+2.276918 , 1026
+2.280176 ,  693
+2.283433 ,  828
+2.286691 ,  918
+2.289948 ,  765
+2.293205 ,  810
+2.296463 ,  738
+2.299720 ,  918
+2.302978 ,  864
+2.306235 ,  792
+2.309492 ,  657
+2.312750 ,  729
+2.316007 ,  747
+2.319265 ,  729
+2.322522 ,  810
+2.325779 ,  864
+2.329037 ,  783
+2.332294 ,  783
+2.335552 ,  684
+2.338809 ,  900
+2.342066 ,  657
+2.345324 ,  702
+2.348581 ,  846
+2.351839 ,  684
+2.355096 ,  729
+2.358353 ,  756
+2.361611 ,  603
+2.364868 ,  747
+2.368126 ,  675
+2.371383 ,  693
+2.374640 ,  648
+2.377898 ,  765
+2.381155 ,  738
+2.384412 ,  747
+2.387670 ,  648
+2.390927 ,  639
+2.394185 ,  639
+2.397442 ,  720
+2.400699 ,  648
+2.403957 ,  666
+2.407214 ,  702
+2.410472 ,  621
+2.413729 ,  747
+2.416986 ,  801
+2.420244 ,  774
+2.423501 ,  729
+2.426759 ,  648
+2.430016 ,  702
+2.433273 ,  612
+2.436531 ,  729
+2.439788 ,  702
+2.443046 ,  558
+2.446303 ,  612
+2.449560 ,  702
+2.452818 ,  774
+2.456075 ,  648
+2.459333 ,  792
+2.462590 ,  810
+2.465847 ,  648
+2.469105 ,  585
+2.472362 ,  666
+2.475620 ,  504
+2.478877 ,  594
+2.482134 ,  576
+2.485392 ,  693
+2.488649 ,  612
+2.491907 ,  720
+2.495164 ,  756
+2.498421 ,  522
+2.501679 ,  675
+2.504936 ,  666
+2.508193 ,  756
+2.511451 ,  666
+2.514708 ,  576
+2.517966 ,  648
+2.521223 ,  729
+2.524480 ,  585
+2.527738 ,  810
+2.530995 ,  567
+2.534253 ,  657
+2.537510 ,  657
+2.540767 ,  504
+2.544025 ,  675
+2.547282 ,  720
+2.550540 ,  612
+2.553797 ,  711
+2.557054 ,  675
+2.560312 ,  648
+2.563569 ,  531
+2.566827 ,  486
+2.570084 ,  693
+2.573341 ,  702
+2.576599 ,  594
+2.579856 ,  603
+2.583114 ,  648
+2.586371 ,  702
+2.589628 ,  702
+2.592886 ,  522
+2.596143 ,  558
+2.599401 ,  603
+2.602658 ,  558
+2.605915 ,  576
+2.609173 ,  675
+2.612430 ,  612
+2.615687 ,  558
+2.618945 ,  585
+2.622202 ,  675
+2.625460 ,  639
+2.628717 ,  621
+2.631974 ,  684
+2.635232 ,  513
+2.638489 ,  522
+2.641747 ,  441
+2.645004 ,  621
+2.648261 ,  630
+2.651519 ,  576
+2.654776 ,  657
+2.658034 ,  576
+2.661291 ,  504
+2.664548 ,  648
+2.667806 ,  666
+2.671063 ,  522
+2.674321 ,  657
+2.677578 ,  495
+2.680835 ,  513
+2.684093 ,  576
+2.687350 ,  594
+2.690608 ,  594
+2.693865 ,  558
+2.697122 ,  504
+2.700380 ,  639
+2.703637 ,  594
+2.706895 ,  630
+2.710152 ,  603
+2.713409 ,  486
+2.716667 ,  558
+2.719924 ,  594
+2.723181 ,  513
+2.726439 ,  513
+2.729696 ,  504
+2.732954 ,  558
+2.736211 ,  630
+2.739468 ,  486
+2.742726 ,  540
+2.745983 ,  567
+2.749241 ,  522
+2.752498 ,  684
+2.755755 ,  468
+2.759013 ,  486
+2.762270 ,  504
+2.765528 ,  513
+2.768785 ,  486
+2.772042 ,  513
+2.775300 ,  396
+2.778557 ,  666
+2.781815 ,  630
+2.785072 ,  585
+2.788329 ,  414
+2.791587 ,  711
+2.794844 ,  531
+2.798102 ,  504
+2.801359 ,  387
+2.804616 ,  522
+2.807874 ,  531
+2.811131 ,  504
+2.814389 ,  603
+2.817646 ,  585
+2.820903 ,  540
+2.824161 ,  486
+2.827418 ,  495
+2.830675 ,  504
+2.833933 ,  423
+2.837190 ,  540
+2.840448 ,  504
+2.843705 ,  414
+2.846962 ,  549
+2.850220 ,  450
+2.853477 ,  504
+2.856735 ,  639
+2.859992 ,  468
+2.863249 ,  441
+2.866507 ,  486
+2.869764 ,  441
+2.873022 ,  630
+2.876279 ,  450
+2.879536 ,  423
+2.882794 ,  477
+2.886051 ,  432
+2.889309 ,  630
+2.892566 ,  558
+2.895823 ,  549
+2.899081 ,  504
+2.902338 ,  486
+2.905596 ,  315
+2.908853 ,  486
+2.912110 ,  396
+2.915368 ,  414
+2.918625 ,  621
+2.921883 ,  414
+2.925140 ,  495
+2.928397 ,  396
+2.931655 ,  549
+2.934912 ,  396
+2.938169 ,  351
+2.941427 ,  468
+2.944684 ,  423
+2.947942 ,  333
+2.951199 ,  477
+2.954456 ,  441
+2.957714 ,  522
+2.960971 ,  639
+2.964229 ,  486
+2.967486 ,  504
+2.970743 ,  432
+2.974001 ,  396
+2.977258 ,  441
+2.980516 ,  441
+2.983773 ,  450
+2.987030 ,  468
+2.990288 ,  540
+2.993545 ,  468
+2.996803 ,  378
+3.000060 ,  522
+3.003317 ,  450
+3.006575 ,  351
+3.009832 ,  396
+3.013090 ,  504
+3.016347 ,  351
+3.019604 ,  387
+3.022862 ,  396
+3.026119 ,  513
+3.029377 ,  414
+3.032634 ,  540
+3.035891 ,  513
+3.039149 ,  531
+3.042406 ,  378
+3.045664 ,  432
+3.048921 ,  333
+3.052178 ,  504
+3.055436 ,  567
+3.058693 ,  468
+3.061950 ,  405
+3.065208 ,  513
+3.068465 ,  477
+3.071723 ,  441
+3.074980 ,  450
+3.078237 ,  261
+3.081495 ,  504
+3.084752 ,  504
+3.088010 ,  369
+3.091267 ,  459
+3.094524 ,  288
+3.097782 ,  378
+3.101039 ,  513
+3.104297 ,  432
+3.107554 ,  414
+3.110811 ,  423
+3.114069 ,  468
+3.117326 ,  450
+3.120584 ,  558
+3.123841 ,  477
+3.127098 ,  432
+3.130356 ,  450
+3.133613 ,  405
+3.136871 ,  342
+3.140128 ,  486
+3.143385 ,  324
+3.146643 ,  495
+3.149900 ,  405
+3.153158 ,  351
+3.156415 ,  279
+3.159672 ,  396
+3.162930 ,  423
+3.166187 ,  594
+3.169444 ,  450
+3.172702 ,  450
+3.175959 ,  405
+3.179217 ,  513
+3.182474 ,  396
+3.185731 ,  423
+3.188989 ,  477
+3.192246 ,  306
+3.195504 ,  423
+3.198761 ,  360
+3.202018 ,  324
+3.205276 ,  387
+3.208533 ,  369
+3.211791 ,  396
+3.215048 ,  369
+3.218305 ,    0
+3.221563 ,    0
+3.224820 ,    0
+3.228078 ,    0
+3.231335 ,    0
+3.234592 ,    0
+3.237850 ,    0
+3.241107 ,    0
+3.244365 ,    0
+3.247622 ,    0
+3.250879 ,    0
+3.254137 ,    0
+3.257394 ,    0
+3.260652 ,    0
+3.263909 ,    0
+3.267166 ,    0
+3.270424 ,    0
+3.273681 ,    0
+3.276938 ,    0
+3.280196 ,    0
+3.283453 ,    0
+3.286711 ,    0
+3.289968 ,    0
+3.293225 ,    0
+3.296483 ,    0
+3.299740 ,    0
+3.302998 ,    0
+3.306255 ,    0
+3.309512 ,    0
+3.312770 ,    0
+3.316027 ,    0
+3.319285 ,    0
+3.322542 ,    0
+3.325799 ,    0
+3.329057 ,    0
+3.332314 ,    0
+*END