From 337f52568fcfe2d3bd3b032fabc46056556f6d44 Mon Sep 17 00:00:00 2001 From: cloner174 Date: Mon, 30 Sep 2024 17:58:54 +0330 Subject: [PATCH 1/9] add plt.close and n_row modeified --- data/base/projector.py | 14 ++++++++------ test.txt | 5 +++++ 2 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 test.txt diff --git a/data/base/projector.py b/data/base/projector.py index 8dc5d69..4dfb904 100644 --- a/data/base/projector.py +++ b/data/base/projector.py @@ -5,19 +5,21 @@ def visualize_projections(path, projections, angles, figs_per_row=10): - n_row = len(projections) // figs_per_row + n_row = (len(projections) + figs_per_row - 1) // figs_per_row projections = projections.copy() projections = (projections - projections.min()) / (projections.max() - projections.min()) - + for i in range(len(projections)): angle = int((angles[i] / np.pi) * 180) plt.subplot(n_row, figs_per_row, i + 1) - plt.imshow(projections[i] * 255, cmap='gray', vmin=0, vmax=255) - plt.title(f'{angle}') + plt.imshow(projections[i], cmap='gray', vmin=0, vmax=1) + plt.title(f'{angle}°') plt.axis('off') - + plt.tight_layout(pad=0.3) - plt.savefig(path, dpi=500) + plt.savefig(path, dpi=300) + plt.close() + class ConeGeometry_special(tigre.utilities.geometry.Geometry): diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..1aaf4b9 --- /dev/null +++ b/test.txt @@ -0,0 +1,5 @@ +code +└─ datasets + ├─ base.py + ├─ geometry.py + └─ mixed.py From 4241317cae2dd46771dbe49b7f441fc001e95a1b Mon Sep 17 00:00:00 2001 From: cloner174 Date: Mon, 30 Sep 2024 17:59:20 +0330 Subject: [PATCH 2/9] add plt.close and n_row modeified --- test.txt | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 test.txt diff --git a/test.txt b/test.txt deleted file mode 100644 index 1aaf4b9..0000000 --- a/test.txt +++ /dev/null @@ -1,5 +0,0 @@ -code -└─ datasets - ├─ base.py - ├─ geometry.py - └─ mixed.py From a4b82de46a609b35b9753571fe3bdc2d4fe7ff28 Mon Sep 17 00:00:00 2001 From: cloner174 Date: Mon, 30 Sep 2024 18:00:32 +0330 Subject: [PATCH 3/9] add plt.close and n_row modeified --- .gitignore | 1 + text.txt | 0 2 files changed, 1 insertion(+) create mode 100644 text.txt diff --git a/.gitignore b/.gitignore index 0bcfb13..4e93080 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ __pycache__/ # C extensions *.so +./text.txt # Distribution / packaging .Python build/ diff --git a/text.txt b/text.txt new file mode 100644 index 0000000..e69de29 From 68749d783b7946de7600189d5978591f06f90212 Mon Sep 17 00:00:00 2001 From: cloner174 Date: Mon, 30 Sep 2024 18:55:43 +0330 Subject: [PATCH 4/9] added Docstrings --- data/LUNA16/config.yaml | 48 ++++---- data/LUNA16/dataset.py | 32 +++-- data/LUNA16/main.py | 76 ++++++++---- data/base/dataset.py | 252 +++++++++++++++++++++++++++++++--------- data/base/projector.py | 126 +++++++++++++++----- data/base/saver.py | 106 ++++++++++++----- data/base/utils.py | 50 ++++++-- 7 files changed, 509 insertions(+), 181 deletions(-) diff --git a/data/LUNA16/config.yaml b/data/LUNA16/config.yaml index 98a1f50..2c52351 100644 --- a/data/LUNA16/config.yaml +++ b/data/LUNA16/config.yaml @@ -1,35 +1,35 @@ dataset: - spacing: [1.6, 1.6, 1.6] # [x, y, z], mm - value_range: [-1000, 1024] # [min, max], HU scale - resolution: [256, 256, 256] # [x, y, z] - block_size: [64, 64, 64] # [x, y, z] + spacing: [1.6, 1.6, 1.6] # Desired voxel spacing [x, y, z] in mm + value_range: [-1000, 1024] # Hounsfield Unit (HU) value range for normalization + resolution: [256, 256, 256] # Desired image resolution [x, y, z] + block_size: [64, 64, 64] # Block size for splitting images [x, y, z] projector: - n_porjections: 50 + n_porjections: 50 # Number of projection angles - # system configuration - DSD: 1200 # distance source detector (mm) - DSO: 800 # distance source origin (mm) + # System configuration + DSD: 1200 # Distance from source to detector (mm) + DSO: 800 # Distance from source to origin (mm) - # detector parameters - nDetector: [256, 256] # number of pixels (px) - dDetector: [2.4, 2.4] # size of each pixel (mm) + # Detector parameters + nDetector: [256, 256] # Number of detector pixels [u, v] + dDetector: [2.4, 2.4] # Size of each detector pixel (mm) - # image parameters - nVoxel: [256, 256, 256] # number of voxels (vx) [x, y, z] - dVoxel: [1.6, 1.6, 1.6] # size of each voxel (mm) + # Image parameters + nVoxel: [256, 256, 256] # Number of voxels [x, y, z] + dVoxel: [1.6, 1.6, 1.6] # Size of each voxel (mm) - # offsets - offOrigin: [0, 0, 0] # offset of image from origin (mm) [x, y, z] - offDetector: [0, 0] # offset of detector (only in two direction) (mm) [u, v] + # Offsets + offOrigin: [0, 0, 0] # Image offset from origin (mm) [x, y, z] + offDetector: [0, 0] # Detector offset (mm) [u, v] - # Auxiliary - accuracy: 0.5 # accuracy of FWD proj (vx/sample) + # Auxiliary parameters + accuracy: 0.5 # Accuracy of forward projection (voxels per sample) - # Mode - mode: cone # x-ray source mode parallel/cone - filter: null + # Mode and filter + mode: cone # X-ray source mode ('parallel' or 'cone') + filter: null # Filter type (e.g., 'ram-lak', 'shepp-logan') # Angles - total_angle: 180 # total angle (degree) - start_angle: 0 # start angle (degree) + total_angle: 180 # Total rotation angle (degrees) + start_angle: 0 # Start angle (degrees) diff --git a/data/LUNA16/dataset.py b/data/LUNA16/dataset.py index 78090f7..6d3dc4b 100644 --- a/data/LUNA16/dataset.py +++ b/data/LUNA16/dataset.py @@ -17,13 +17,27 @@ def sitk_load_luna16(path): image = sitk.GetArrayFromImage(itk_img) image = image.transpose(2, 1, 0) # to [x, y, z] image = image.astype(np.float32) + return image, spacing, origin + class Dataset_LUNA16(Dataset): + """ + Dataset class for handling the LUNA16 dataset. + + This class extends the base Dataset class and adds functionality specific to LUNA16, such as loading nodule annotations. + """ + def __init__(self, root_dir, config): super().__init__(config) - + """ + Initialize the LUNA16 dataset. + + Args: + root_dir (str): Root directory of the LUNA16 dataset. + config (dict): Configuration dictionary containing dataset parameters. + """ # root_dir: ./datasets/LUNA16/ self._data_list = [] for sub_id in range(10): @@ -36,7 +50,7 @@ def __init__(self, root_dir, config): 'path': path, 'nodules': [] }) - + with open(os.path.join(root_dir, 'raw/annotations.csv'), 'r') as csvfile: reader = csv.reader(csvfile, delimiter=',') for i, row in enumerate(reader): @@ -45,9 +59,9 @@ def __init__(self, root_dir, config): for k in range(len(self._data_list)): if row[0] == self._data_list[k]['name'].split('_')[-1]: self._data_list[k]['nodules'].append([eval(x) for x in row[1:]]) - + self._return_nodule_mask = False - + def return_nodule_mask(self, flag): self._return_nodule_mask = flag return self @@ -60,7 +74,7 @@ def _make_mask(self, data): for i, nodule in enumerate(data['nodules']): center = np.array(mask.shape) / 2 + nodule[:3] / spacing x, y, z = np.round(center).astype(int) - + r = nodule[-1] / 2 r += 1.5 # additional 1.5 mm to show the tumor more obviously r = np.ceil(r / spacing).astype(int) @@ -74,6 +88,7 @@ def _make_mask(self, data): # NOTE: the key 'mask' is defined in _crop_pad # data['nodule_mask'] = mask + return mask def _load_raw(self, data): @@ -83,17 +98,20 @@ def _load_raw(self, data): nodule = np.array(nodules[i]) nodule[:3] = nodule[:3] - origin - np.array(image.shape) / 2 * spacing nodules[i] = nodule + return { 'name': data['name'], 'image': image, 'spacing': spacing, 'nodules': nodules } - + def __getitem__(self, index): data = super().__getitem__(index) if self._return_nodule_mask: mask = self._make_mask(data) data['nodule_mask'] = mask - + return data + +#cloner174 \ No newline at end of file diff --git a/data/LUNA16/main.py b/data/LUNA16/main.py index 5767579..a06e5bb 100644 --- a/data/LUNA16/main.py +++ b/data/LUNA16/main.py @@ -12,68 +12,96 @@ class Saver_LUNA16(Saver): + """ + Extended Saver class for LUNA16 dataset to include nodule masks. + """ + def __init__(self, root_dir): + """ + Initialize the Saver with paths specific to LUNA16 dataset. + + Args: + root_dir (str): Root directory where data will be saved. + """ path_dict = PATH_DICT.copy() path_dict['nodule_mask'] = 'nodule_masks/{}.nii.gz' + super().__init__(root_dir, path_dict) - + def _save_nodule_mask(self, data): + """ + Save the nodule mask as a medical image file. + + Args: + data (dict): Data dictionary containing 'name', 'nodule_mask', and 'spacing'. + """ sitk_save( self._path_dict['nodule_mask'].format(data['name']), - data['nodule_mask'] / 255., - data['spacing'], - uint8=True - ) # dtype: uint8 - + data['nodule_mask'] / 255.0, # Scale mask to [0, 1] + data['spacing'], + uint8=True # Save as uint8 image + ) + def save(self, data): + """ + Save all data components, including the nodule mask. + + Args: + data (dict): Data dictionary containing all necessary data. + """ super().save(data) + self._save_nodule_mask(data) + if __name__ == '__main__': - parser = argparse.ArgumentParser(description='project') - parser.add_argument('-n', '--name', type=str, default=None) + + parser = argparse.ArgumentParser(description='Process LUNA16 dataset') + parser.add_argument('-n', '--name', type=str, default=None, help='Name of a specific patient to process') + args = parser.parse_args() - + root_dir = './' + processed_dir = os.path.join(root_dir, 'processed/') config_path = os.path.join(root_dir, 'config.yaml') - + saver = Saver_LUNA16(root_dir=processed_dir) - + with open(config_path, 'r') as f: config = yaml.safe_load(f) - - # TODO: check + + # Ensure that projector and dataset configurations are consistent # 1. config.projector.nVoxel == config.dataset.resolution # 2. config.projector.dVoxel == config.dataset.spacing - + dataset = Dataset_LUNA16( - root_dir=root_dir, + root_dir=root_dir, config=config['dataset'] ).return_nodule_mask(True).init_projector( Projector(config=config['projector']) ) - + if args.name is not None: - # NOTE: - # bugs (?) of tigre 2.2.0 (and older): - # the processing will become slower and slower when calling tigre.Ax multiple times + # Process a specific patient (useful for debugging) dataset.filter_names([args.name]) saver.save(dataset[0]) else: + # Process all patients in the dataset for data in tqdm(dataset, ncols=50): saver.save(data) - - # split data and save meta info (in json) + + # Save meta information and data splits info = {} info['dataset_config'] = config_path info.update(saver.path_dict) - + with open(os.path.join(root_dir, 'splits.json'), 'r') as f: splits = json.load(f) info.update(splits) - + with open(os.path.join(root_dir, 'meta_info.json'), 'w') as f: json.dump(info, f, indent=4) - \ No newline at end of file + +#cloner174 \ No newline at end of file diff --git a/data/base/dataset.py b/data/base/dataset.py index df13bb3..c7c23c0 100644 --- a/data/base/dataset.py +++ b/data/base/dataset.py @@ -1,126 +1,213 @@ import scipy import numpy as np from copy import deepcopy - from base.utils import sitk_load - class Dataset: + + """ + Base Dataset class for handling volumetric medical images (e.g., CT scans). + + This class provides methods for: + - Data loading + - Resampling to a consistent spacing + - Cropping or padding to a consistent resolution + - Normalizing voxel intensities + - Splitting the volume into blocks + - Applying a projector to simulate 2D projections + + Attributes: + _data_list (list): List of data items, each containing 'name' and 'path' keys. + _spacing (np.ndarray): Desired voxel spacing for resampling. + _resolution (np.ndarray): Desired image resolution after cropping/padding. + _value_range (np.ndarray): Value range for normalization (e.g., [-1000, 400] for CT HU values). + _block_size (np.ndarray): Size of blocks for splitting the volume. + _block_info (dict or None): Cached block information. + _return_raw (bool): If True, returns raw data without processing. + _projector (callable or None): Projector function to simulate 2D projections. + """ def __init__(self, config): + """ + Initialize the Dataset with configuration parameters. + + Args: + config (dict): Configuration dictionary containing dataset parameters: + - 'spacing' (list or array): Desired voxel spacing for resampling. + - 'resolution' (list or array): Desired image resolution after cropping/padding. + - 'value_range' (list or array): Value range for normalization (e.g., [-1000, 400] for CT HU values). + - 'block_size' (list or array): Size of blocks for splitting the volume (optional). + """ self._data_list = [] - - # processed: consistent spacing, resolution. this means the image also has the consistent size (mm) - # 2 options: specify the spacing, or the image size (mm) self._spacing = np.array(config['spacing']) - - # for cropping/padding - # currently we process all data(sets) to 256^3 self._resolution = np.array(config['resolution']) - - # for data normalization - # generally, the minimum value is set to -1000 (air), - # the maximum value is chosen based on the value range of dataset self._value_range = np.array(config['value_range']) - - # to save volumetric images (CT) as blocks for faster data loading - # not necessary self._block_size = np.array(config['block_size']) self._block_info = None - - # if true, return data without processing (i.e., return raw data) self._return_raw = False - - # projector to simulate 2d projections - # if not None, the projector will be applied to all data in the dataset self._projector = None - + def filter_names(self, names): + """ + Filter the dataset to include only data items with names in the provided list. + + Args: + names (list): List of names to include. + + Returns: + Dataset: Returns self to allow method chaining. + """ new_list = [] for item in self._data_list: if item['name'] in names: new_list.append(item) self._data_list = new_list + return self - + def return_raw(self, flag): + """ + Set whether to return raw data without processing. + + Args: + flag (bool): If True, the dataset will return raw data. + + Returns: + Dataset: Returns self to allow method chaining. + """ self._return_raw = flag + return self def init_projector(self, projector): - # if the projector is initialized here, it will be applied to all data in this dataset. + """ + Initialize a projector to simulate 2D projections for all data items. + + Args: + projector (callable): A projector function that takes an image and returns projections. + + Returns: + Dataset: Returns self to allow method chaining. + """ self._projector = projector + return self def _generate_blocks(self): + """ + Generate block coordinates and indices for splitting the volume into smaller blocks. + + Returns: + dict: A dictionary containing block coordinates and lists. + """ if self._block_info is not None: return self._block_info nx, ny, nz = self._block_size + # Ensure that the resolution is divisible by the block size assert (self._resolution % self._block_size).sum() == 0, \ - f'resolution {self._resolution} is not divisible by block_size {self._block_size}' + f'Resolution {self._resolution} is not divisible by block_size {self._block_size}' + offsets = (self._resolution / self._block_size).astype(int) - - base = np.mgrid[:nx, :ny, :nz] # [3, nx, ny, nz] - base = base.reshape(3, -1).transpose(1, 0) # [*, 3] - base = base * offsets + base = np.mgrid[:nx, :ny, :nz] # Create a grid of indices [3, nx, ny, nz] + base = base.reshape(3, -1).transpose(1, 0) # Reshape to [*, 3] + base = base * offsets # Scale base indices by offsets block_list = [] for x in range(offsets[0]): for y in range(offsets[1]): for z in range(offsets[2]): + # Shift blocks by the offset block = base + np.array([x, y, z]) block_list.append(block) - blocks_coords = np.stack(block_list, axis=0) # [N, *, 3] - blocks_coords = blocks_coords / (self._resolution - 1) # coords starts from 0 + blocks_coords = np.stack(block_list, axis=0) # [N, *, 3] + # Normalize coordinates to [0, 1] + blocks_coords = blocks_coords / (self._resolution - 1) blocks_coords = blocks_coords.astype(np.float32) - + self._block_info = { 'coords': blocks_coords, 'list': block_list } + return self._block_info def _convert_blocks(self, data): + """ + Split the image data into blocks and add block information to the data dictionary. + + Args: + data (dict): Data dictionary containing 'image'. + + Returns: + dict: Updated data dictionary with 'blocks_vals' and 'blocks_coords'. + """ block_info = self._generate_blocks() + # Extract block values from the image blocks_vals = [ data['image'][b[:, 0], b[:, 1], b[:, 2]] for b in block_info['list'] ] data['blocks_vals'] = blocks_vals data['blocks_coords'] = block_info['coords'] + return data def _process(self, data): + """ + Process the raw data through resampling, cropping/padding, and normalization. + + Args: + data (dict): Raw data dictionary. + + Returns: + dict: Processed data dictionary. + """ # data -> resample -> crop/pad -> normalize return self._normalize( self._crop_pad( self._resample(data) ) ) - + def _resample(self, data): - # resample data (spacing) - data['image'] = scipy.ndimage.zoom( - # numerical offsets depending on the value range - # NOTE: normalization first or later will (slightly) affect this - data['image'], - data['spacing'] / self._spacing, - order=3, + """ + Resample the image data to the desired spacing. + Args: + data (dict): Data dictionary containing 'image' and 'spacing'. + Returns: + dict: Updated data dictionary with resampled 'image' and updated 'spacing'. + """ + # Calculate zoom factors for each dimension + zoom_factors = data['spacing'] / self._spacing + # Resample image using cubic interpolation (order=3) + data['image'] = scipy.ndimage.zoom( + data['image'], + zoom=zoom_factors, + order=3, prefilter=False ) + # Update spacing to the desired spacing data['spacing'] = deepcopy(self._spacing) return data - + def _crop_pad(self, data): - # crop or add padding (resolution) - processed = [] - original = [] + """ + Crop or pad the image data to the desired resolution. + + Args: + data (dict): Data dictionary containing 'image'. + + Returns: + dict: Updated data dictionary with cropped/padded 'image'. + """ + processed = [] # Indices for the processed (output) array + original = [] # Indices for the original (input) array shape = data['image'].shape for i in range(3): if shape[i] >= self._resolution[i]: - # center crop + # Center crop processed.append({ 'left': 0, 'right': self._resolution[i] @@ -131,7 +218,7 @@ def _crop_pad(self, data): 'right': offset + self._resolution[i] }) else: - # padding + # Padding offset = (self._resolution[i] - shape[i]) // 2 processed.append({ 'left': offset, @@ -141,8 +228,20 @@ def _crop_pad(self, data): 'left': 0, 'right': shape[i] }) - + def slice_array(a, index_a, b, index_b): + """ + Helper function to copy data from array b to array a using provided indices. + + Args: + a (np.ndarray): Destination array. + index_a (list): Indices for the destination array. + b (np.ndarray): Source array. + index_b (list): Indices for the source array. + + Returns: + np.ndarray: Updated destination array. + """ a[ index_a[0]['left']:index_a[0]['right'], index_a[1]['left']:index_a[1]['right'], @@ -152,56 +251,93 @@ def slice_array(a, index_a, b, index_b): index_b[1]['left']:index_b[1]['right'], index_b[2]['left']:index_b[2]['right'] ] + return a - # NOTE: 'mask' is used for evaluation with masked region, not used currently - data['mask'] = slice_array( + # Create a mask (not currently used) indicating the region of valid data + data['mask'] = slice_array( np.zeros(self._resolution), processed, np.ones_like(data['image']), original ) + # Initialize an array filled with the minimum value (e.g., -1000 HU for air) data['image'] = slice_array( np.full(self._resolution, fill_value=self._value_range[0], dtype=np.float32), processed, data['image'], original ) + return data - + def _normalize(self, data): - # NOTE: CT is measured in HU scale. air: -1000, water: 0 - # we do not convert HU to attenuation, mu = HU / 1000 * (mu_water - mu_air) + mu_water, - # because linear operations will not affect the normalization. + """ + Normalize the image data to the [0, 1] range based on the specified value range. + + Args: + data (dict): Data dictionary containing 'image'. + + Returns: + dict: Updated data dictionary with normalized 'image'. + """ min_value, max_value = self._value_range image = data['image'] + # Clip values to the specified range image = np.clip(image, a_min=min_value, a_max=max_value) + # Normalize to [0, 1] image = (image - min_value) / (max_value - min_value) data['image'] = image + return data def _load_raw(self, data): + """ + Load raw image data using SimpleITK. + + Args: + data (dict): Data item containing 'name' and 'path'. + + Returns: + dict: Data dictionary with loaded 'image' and 'spacing'. + """ image, spacing = sitk_load(data['path']) + return { 'name': data['name'], 'image': image, 'spacing': spacing } - + def __len__(self): + """ + Get the number of data items in the dataset. + + Returns: + int: Length of the dataset. + """ return len(self._data_list) def __getitem__(self, index): + """ + Get a data item by index. + + Args: + index (int): Index of the data item. + + Returns: + dict: Data dictionary containing processed image and additional information. + """ item = self._data_list[index] data = self._load_raw(item) - if not self._return_raw: data = self._process(data) data = self._convert_blocks(data) - if self._projector is not None: - # NOTE: the (case-specific) projector can be defined outside the dataloader (not applied to all data) + # Apply the projector to simulate 2D projections projs = self._projector(data['image']) - data.update(projs) # keys: ['projs', 'angles'] - + data.update(projs) # Add 'projs' and 'angles' to data + return data + +#cloner174 \ No newline at end of file diff --git a/data/base/projector.py b/data/base/projector.py index 4dfb904..5682382 100644 --- a/data/base/projector.py +++ b/data/base/projector.py @@ -5,15 +5,30 @@ def visualize_projections(path, projections, angles, figs_per_row=10): + """ + Visualize and save a grid of projection images. + + Args: + path (str): File path to save the visualization. + projections (np.ndarray): Array of projection images. + angles (np.ndarray): Array of projection angles in radians. + figs_per_row (int): Number of images per row in the grid. + """ + + # Calculate the number of rows needed n_row = (len(projections) + figs_per_row - 1) // figs_per_row + + # Normalize projections to [0, 1] projections = projections.copy() projections = (projections - projections.min()) / (projections.max() - projections.min()) + # Create a figure for the projections + plt.figure(figsize=(figs_per_row * 2, n_row * 2)) for i in range(len(projections)): - angle = int((angles[i] / np.pi) * 180) + angle_deg = int((angles[i] / np.pi) * 180) # Convert angle to degrees plt.subplot(n_row, figs_per_row, i + 1) plt.imshow(projections[i], cmap='gray', vmin=0, vmax=1) - plt.title(f'{angle}°') + plt.title(f'{angle_deg}°') plt.axis('off') plt.tight_layout(pad=0.3) @@ -23,50 +38,99 @@ def visualize_projections(path, projections, angles, figs_per_row=10): class ConeGeometry_special(tigre.utilities.geometry.Geometry): + """ + Custom geometry class for TIGRE to define a cone-beam CT scanner. + + This class sets up the scanner geometry based on the provided configuration. + """ + def __init__(self, config): + """ + Initialize the geometry with the given configuration. + + Args: + config (dict): Configuration dictionary containing geometry parameters. + """ super().__init__() - - self.DSD = config['DSD'] / 1000 # distance of source to detector (m) - self.DSO = config['DSO'] / 1000 # distance of source to origin (m) - # detector parameters - self.nDetector = np.array(config['nDetector']) # number of pixels (px) - self.dDetector = np.array(config['dDetector']) / 1000 # size of each pixel (m) - self.sDetector = self.nDetector * self.dDetector # total size of the detector (m) + # Distances in meters (converted from mm) + self.DSD = config['DSD'] / 1000 # Distance from source to detector + self.DSO = config['DSO'] / 1000 # Distance from source to origin - # image parameters: in the form of [z, y, x] - self.nVoxel = np.array(config['nVoxel'][::-1]) # number of voxels (vx) - self.dVoxel = np.array(config['dVoxel'][::-1]) / 1000 # size of each voxel (m) - self.sVoxel = self.nVoxel * self.dVoxel # total size of the image (m) - - # offsets - self.offOrigin = np.array(config['offOrigin'][::-1]) / 1000 # offset of image from origin (m) + # Detector parameters + self.nDetector = np.array(config['nDetector']) # Number of detector pixels [u, v] + self.dDetector = np.array(config['dDetector']) / 1000 # Size of each detector pixel [u, v] in meters + self.sDetector = self.nDetector * self.dDetector # Total size of the detector [u, v] in meters + + # Image parameters (note the reversal to [z, y, x]) + self.nVoxel = np.array(config['nVoxel'][::-1]) # Number of voxels [z, y, x] + self.dVoxel = np.array(config['dVoxel'][::-1]) / 1000 # Size of each voxel [z, y, x] in meters + self.sVoxel = self.nVoxel * self.dVoxel # Total size of the image [z, y, x] in meters + + # Offsets + self.offOrigin = np.array(config['offOrigin'][::-1]) / 1000 # Image offset [z, y, x] in meters self.offDetector = np.array( - [config['offDetector'][1], config['offDetector'][0], 0]) / 1000 # offset of detector (m) - - # auxiliary - self.accuracy = config['accuracy'] # accuracy of FWD proj (vx/sample) # noqa: E501 + [config['offDetector'][1], config['offDetector'][0], 0]) / 1000 # Detector offset [v, u, 0] in meters + + # Auxiliary parameters + self.accuracy = config['accuracy'] # Accuracy of forward projection (voxels per sample) - # mode - self.mode = config['mode'] # options: parallel/cone - self.filter = config['filter'] + # Mode and filter + self.mode = config['mode'] # 'parallel' or 'cone' + self.filter = config['filter'] # Filter type for reconstruction algorithms + class Projector: + """ + Projector class to simulate 2D projections of 3D images using TIGRE. + + Attributes: + _geo (tigre.utilities.geometry.Geometry): Scanner geometry. + _angles (np.ndarray): Array of projection angles in radians. + """ + def __init__(self, config): + """ + Initialize the projector with the given configuration. + + Args: + config (dict): Configuration dictionary containing projector parameters. + """ self._geo = ConeGeometry_special(config) + + # Generate equally spaced projection angles self._angles = np.linspace( - 0, config['total_angle'] / 180 * np.pi, - config['n_porjections'] + 1 - )[:-1] + config['start_angle'] / 180 * np.pi - + config['start_angle'] / 180 * np.pi, # Start angle in radians + (config['start_angle'] + config['total_angle']) / 180 * np.pi, # End angle in radians + config['n_porjections'], + endpoint=False + ) + def __call__(self, image): + """ + Simulate 2D projections of the given 3D image. + + Args: + image (np.ndarray): 3D image array [x, y, z]. + + Returns: + dict: Dictionary containing 'projs' (projections) and 'angles'. + """ + # Transpose image to [z, y, x] as expected by TIGRE + image_tigre = image.transpose(2, 1, 0).copy() + # Perform forward projection projections = tigre.Ax( - image.transpose(2, 1, 0).copy(), # [z, y, x] - self._geo, + image_tigre, + self._geo, self._angles - )[:, ::-1, :] + ) + # Flip projections vertically to match coordinate system if needed + projections = projections[:, ::-1, :] + return { - 'projs': projections, + 'projs': projections, 'angles': self._angles } + +#cloner174 \ No newline at end of file diff --git a/data/base/saver.py b/data/base/saver.py index 873004a..74594ec 100644 --- a/data/base/saver.py +++ b/data/base/saver.py @@ -2,12 +2,11 @@ import pickle import numpy as np from copy import deepcopy - from base.utils import sitk_save from base.projector import visualize_projections - +# Define default paths for saving data PATH_DICT = { 'image': 'images/{}.nii.gz', 'projs': 'projections/{}.pickle', @@ -17,62 +16,115 @@ } + class Saver: + """ + Class for saving processed data, including images, projections, and blocks. + + Attributes: + _path_dict (dict): Dictionary mapping data types to file paths. + _projs_list (list): List of projection data. + _projs_max (float): Maximum projection value for normalization. + _is_blocks_coords_saved (bool): Flag indicating if block coordinates have been saved. + """ + def __init__(self, root_dir, path_dict): + """ + Initialize the Saver with a root directory and path dictionary. + + Args: + root_dir (str): Root directory where data will be saved. + path_dict (dict): Dictionary mapping data types to relative file paths. + """ self._path_dict = deepcopy(path_dict) for key in self._path_dict.keys(): path = os.path.join(root_dir, self._path_dict[key]) os.makedirs(os.path.dirname(path), exist_ok=True) self._path_dict[key] = path - + self._projs_list = [] - self._projs_max = 0. - + self._projs_max = 0.0 self._is_blocks_coords_saved = False - + @property def path_dict(self): + """ + Get the dictionary of data paths. + + Returns: + dict: Dictionary of data paths. + """ + return self._path_dict - + def _save_CT(self, data): + """ + Save the processed CT image. + + Args: + data (dict): Data dictionary containing 'name', 'image', and 'spacing'. + """ name = data['name'] sitk_save( - self._path_dict['image'].format(name), + self._path_dict['image'].format(name), image=data['image'], spacing=data['spacing'], - uint8=True - ) # dtype: uint8 - + uint8=True # Save as uint8 image + ) + def _save_blocks(self, data): + """ + Save the blocks of image data. + + Args: + data (dict): Data dictionary containing 'name', 'blocks_vals', and 'blocks_coords'. + """ if not self._is_blocks_coords_saved: - np.save(self._path_dict['blocks_coords'], data['blocks_coords']) # dtype: float32 - self._is_block_coords_saved = True - + # Save block coordinates once + np.save(self._path_dict['blocks_coords'], data['blocks_coords']) # dtype: float32 + self._is_blocks_coords_saved = True + for i, block in enumerate(data['blocks_vals']): save_path = self._path_dict['blocks_vals'].format(data['name'], i) - block = (block * 255).astype(np.uint8) - np.save(save_path, block) # dtype: uint8 - + block = (block * 255).astype(np.uint8) # Scale block values to [0, 255] + np.save(save_path, block) + def _save_projs(self, data, projs_vis=True): + """ + Save the projections and optionally generate a visualization. + + Args: + data (dict): Data dictionary containing 'name', 'projs', and 'angles'. + projs_vis (bool): If True, generate a visualization of the projections. + """ projs = data['projs'] + # Normalize projections to [0, 255] projs_max = projs.max() - projs_max = np.ceil(projs_max * 100) / 100 - - projs = (projs / projs_max * 255).astype(np.uint8) + projs_max = np.ceil(projs_max * 100) / 100 # Round up to nearest 0.01 + + projs_scaled = (projs / projs_max * 255).astype(np.uint8) with open(self._path_dict['projs'].format(data['name']), 'wb') as f: pickle.dump({ - 'projs': projs, # uint8 - 'projs_max': projs_max, # float - 'angles': data['angles'] # float + 'projs': projs_scaled, # uint8 projections + 'projs_max': projs_max, # Maximum value before scaling + 'angles': data['angles'] # Projection angles }, f, pickle.HIGHEST_PROTOCOL) - + if projs_vis: + # Generate and save a visualization of the projections visualize_projections( - self._path_dict['projs_vis'].format(data['name']), - data['projs'], data['angles'] + self._path_dict['projs_vis'].format(data['name']), + projs_scaled, + data['angles'] ) - + def save(self, data): + """ + Save all data components for a single data item. + + Args: + data (dict): Data dictionary containing all necessary data. + """ self._save_CT(data) self._save_blocks(data) self._save_projs(data) diff --git a/data/base/utils.py b/data/base/utils.py index 751f40f..da87691 100644 --- a/data/base/utils.py +++ b/data/base/utils.py @@ -2,34 +2,63 @@ import SimpleITK as sitk - def sitk_load(path, uint8=False, spacing_unit='mm'): - # load as float32 + """ + Load a medical image using SimpleITK. + + Args: + path (str): Path to the image file. + uint8 (bool): If True, scales image to [0, 1] assuming it's uint8. + spacing_unit (str): Unit of spacing, 'mm' or 'm'. + + Returns: + tuple: (image array [x, y, z], spacing array [x, y, z]) + """ itk_img = sitk.ReadImage(path) spacing = np.array(itk_img.GetSpacing(), dtype=np.float32) + + # Convert spacing to the desired unit if spacing_unit == 'm': - spacing *= 1000. + spacing *= 1000.0 elif spacing_unit != 'mm': - raise ValueError + raise ValueError("Invalid spacing unit. Must be 'mm' or 'm'.") + + # Get the image array and transpose to [x, y, z] image = sitk.GetArrayFromImage(itk_img) - image = image.transpose(2, 1, 0) # to [x, y, z] + image = image.transpose(2, 1, 0) image = image.astype(np.float32) + if uint8: - # if data is saved as uint8, [0, 255] => [0, 1] - image /= 255. + # If the image is uint8, normalize to [0, 1] + image /= 255.0 + return image, spacing def sitk_save(path, image, spacing=None, uint8=False): - # default: float32 (input) + """ + Save an image array as a medical image file using SimpleITK. + + Args: + path (str): Path to save the image file. + image (np.ndarray): Image array [x, y, z]. + spacing (np.ndarray or None): Spacing array [x, y, z] in mm. + uint8 (bool): If True, scales image to [0, 255] and saves as uint8. + """ image = image.astype(np.float32) + # Transpose image back to [z, y, x] for SimpleITK image = image.transpose(2, 1, 0) + if uint8: - # value range should be [0, 1] + # Scale image to [0, 255] and convert to uint8 image = (image * 255).astype(np.uint8) + out = sitk.GetImageFromArray(image) + if spacing is not None: - out.SetSpacing(spacing.astype(np.float64)) # unit: mm + # Set the image spacing (in mm) + out.SetSpacing(spacing.astype(np.float64)) + sitk.WriteImage(out, path) @@ -51,3 +80,4 @@ def check_range(dataset): size_max = np.max(size_list, axis=0) # TODO: histgram return size_min, size_max +#cloner174 \ No newline at end of file From c48a15efd9f0a36fb6182db1816b07ea5bdf7f4a Mon Sep 17 00:00:00 2001 From: cloner174 Date: Mon, 30 Sep 2024 19:01:13 +0330 Subject: [PATCH 5/9] added Docstrings --- data/base/dataset.py | 12 ++++++++++++ data/base/projector.py | 7 ++++--- data/base/saver.py | 5 +++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/data/base/dataset.py b/data/base/dataset.py index c7c23c0..c5ba5a8 100644 --- a/data/base/dataset.py +++ b/data/base/dataset.py @@ -47,6 +47,7 @@ def __init__(self, config): self._return_raw = False self._projector = None + def filter_names(self, names): """ Filter the dataset to include only data items with names in the provided list. @@ -65,6 +66,7 @@ def filter_names(self, names): return self + def return_raw(self, flag): """ Set whether to return raw data without processing. @@ -79,6 +81,7 @@ def return_raw(self, flag): return self + def init_projector(self, projector): """ Initialize a projector to simulate 2D projections for all data items. @@ -93,6 +96,7 @@ def init_projector(self, projector): return self + def _generate_blocks(self): """ Generate block coordinates and indices for splitting the volume into smaller blocks. @@ -133,6 +137,7 @@ def _generate_blocks(self): return self._block_info + def _convert_blocks(self, data): """ Split the image data into blocks and add block information to the data dictionary. @@ -154,6 +159,7 @@ def _convert_blocks(self, data): return data + def _process(self, data): """ Process the raw data through resampling, cropping/padding, and normalization. @@ -171,6 +177,7 @@ def _process(self, data): ) ) + def _resample(self, data): """ Resample the image data to the desired spacing. @@ -192,6 +199,7 @@ def _resample(self, data): data['spacing'] = deepcopy(self._spacing) return data + def _crop_pad(self, data): """ Crop or pad the image data to the desired resolution. @@ -271,6 +279,7 @@ def slice_array(a, index_a, b, index_b): return data + def _normalize(self, data): """ Normalize the image data to the [0, 1] range based on the specified value range. @@ -291,6 +300,7 @@ def _normalize(self, data): return data + def _load_raw(self, data): """ Load raw image data using SimpleITK. @@ -309,6 +319,7 @@ def _load_raw(self, data): 'spacing': spacing } + def __len__(self): """ Get the number of data items in the dataset. @@ -318,6 +329,7 @@ def __len__(self): """ return len(self._data_list) + def __getitem__(self, index): """ Get a data item by index. diff --git a/data/base/projector.py b/data/base/projector.py index 5682382..9e1b170 100644 --- a/data/base/projector.py +++ b/data/base/projector.py @@ -40,10 +40,10 @@ def visualize_projections(path, projections, angles, figs_per_row=10): class ConeGeometry_special(tigre.utilities.geometry.Geometry): """ Custom geometry class for TIGRE to define a cone-beam CT scanner. - + This class sets up the scanner geometry based on the provided configuration. """ - + def __init__(self, config): """ Initialize the geometry with the given configuration. @@ -107,13 +107,14 @@ def __init__(self, config): endpoint=False ) + def __call__(self, image): """ Simulate 2D projections of the given 3D image. Args: image (np.ndarray): 3D image array [x, y, z]. - + Returns: dict: Dictionary containing 'projs' (projections) and 'angles'. """ diff --git a/data/base/saver.py b/data/base/saver.py index 74594ec..bfeac2e 100644 --- a/data/base/saver.py +++ b/data/base/saver.py @@ -46,6 +46,7 @@ def __init__(self, root_dir, path_dict): self._projs_max = 0.0 self._is_blocks_coords_saved = False + @property def path_dict(self): """ @@ -57,6 +58,7 @@ def path_dict(self): return self._path_dict + def _save_CT(self, data): """ Save the processed CT image. @@ -72,6 +74,7 @@ def _save_CT(self, data): uint8=True # Save as uint8 image ) + def _save_blocks(self, data): """ Save the blocks of image data. @@ -89,6 +92,7 @@ def _save_blocks(self, data): block = (block * 255).astype(np.uint8) # Scale block values to [0, 255] np.save(save_path, block) + def _save_projs(self, data, projs_vis=True): """ Save the projections and optionally generate a visualization. @@ -118,6 +122,7 @@ def _save_projs(self, data, projs_vis=True): data['angles'] ) + def save(self, data): """ Save all data components for a single data item. From df11e7d3e958f596a0e8a98ab124cbc2ada353bd Mon Sep 17 00:00:00 2001 From: cloner174 Date: Mon, 30 Sep 2024 19:02:46 +0330 Subject: [PATCH 6/9] Kept Just Luna16 --- data/Knee/config.yaml | 35 -- data/Knee/dataset.py | 30 -- data/Knee/main.py | 59 ---- data/Knee/raw/names.txt | 614 ----------------------------------- data/Knee/run.sh | 7 - data/Knee/splits.json | 622 ------------------------------------ data/README.md | 3 - data/ToothFairy/config.yaml | 35 -- data/ToothFairy/dataset.py | 29 -- data/ToothFairy/main.py | 59 ---- data/ToothFairy/run.sh | 10 - data/ToothFairy/splits.json | 453 -------------------------- 12 files changed, 1956 deletions(-) delete mode 100644 data/Knee/config.yaml delete mode 100644 data/Knee/dataset.py delete mode 100644 data/Knee/main.py delete mode 100644 data/Knee/raw/names.txt delete mode 100644 data/Knee/run.sh delete mode 100644 data/Knee/splits.json delete mode 100644 data/README.md delete mode 100644 data/ToothFairy/config.yaml delete mode 100644 data/ToothFairy/dataset.py delete mode 100644 data/ToothFairy/main.py delete mode 100644 data/ToothFairy/run.sh delete mode 100644 data/ToothFairy/splits.json diff --git a/data/Knee/config.yaml b/data/Knee/config.yaml deleted file mode 100644 index 2ffaf9d..0000000 --- a/data/Knee/config.yaml +++ /dev/null @@ -1,35 +0,0 @@ -dataset: - spacing: [0.8, 0.8, 0.8] # [x, y, z], mm - value_range: [-1000, 1024] # [min, max], HU scale - resolution: [256, 256, 256] # [x, y, z] - block_size: [64, 64, 64] # [x, y, z] - -projector: - n_porjections: 50 - - # system configuration - DSD: 2000 # distance source detector (mm) - DSO: 1000 # distance source origin (mm) - - # detector parameters - nDetector: [256, 256] # number of pixels (px) - dDetector: [2.0, 2.0] # size of each pixel (mm) - - # image parameters - nVoxel: [256, 256, 256] # number of voxels (vx) [x, y, z] - dVoxel: [0.8, 0.8, 0.8] # size of each voxel (mm) - - # offsets - offOrigin: [0, 0, 0] # offset of image from origin (mm) [x, y, z] - offDetector: [0, 0] # offset of detector (only in two direction) (mm) [u, v] - - # Auxiliary - accuracy: 0.5 # accuracy of FWD proj (vx/sample) - - # Mode - mode: cone # x-ray source mode parallel/cone - filter: null - - # Angles - total_angle: 180 # total angle (degree) - start_angle: 0 # start angle (degree) diff --git a/data/Knee/dataset.py b/data/Knee/dataset.py deleted file mode 100644 index 7c1cee6..0000000 --- a/data/Knee/dataset.py +++ /dev/null @@ -1,30 +0,0 @@ -import os - -from base.dataset import Dataset -from base.utils import sitk_load - - - -class Dataset_Knee(Dataset): - def __init__(self, root_dir, config): - super().__init__(config) - - # root_dir: ./datasets/Knee_zhao/ - with open(os.path.join(root_dir, 'raw/names.txt'), 'r') as f: - names = f.read().splitlines() - - self._data_list = [] - for name in names: - tag, obj_id = name.split('-') - self._data_list.append({ - 'name': name, - 'path': os.path.join(root_dir, 'raw', tag, f'{obj_id}.mhd') - }) - - def _load_raw(self, data): - image, spacing = sitk_load(data['path'], spacing_unit='m') - return { - 'name': data['name'], - 'image': image, - 'spacing': spacing - } diff --git a/data/Knee/main.py b/data/Knee/main.py deleted file mode 100644 index ec712c1..0000000 --- a/data/Knee/main.py +++ /dev/null @@ -1,59 +0,0 @@ -import os -import yaml -import json -import argparse -from tqdm import tqdm - -from dataset import Dataset_Knee -from base.projector import Projector -from base.saver import Saver, PATH_DICT - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='project') - parser.add_argument('-n', '--name', type=str, default=None) - args = parser.parse_args() - - root_dir = './' - processed_dir = os.path.join(root_dir, 'processed/') - config_path = os.path.join(root_dir, 'config.yaml') - - saver = Saver( - root_dir=processed_dir, - path_dict=PATH_DICT - ) - - with open(config_path, 'r') as f: - config = yaml.safe_load(f) - - # TODO: check - # 1. config.projector.nVoxel == config.dataset.resolution - # 2. config.projector.dVoxel == config.dataset.spacing - - dataset = Dataset_Knee( - root_dir=root_dir, - config=config['dataset'] - ).init_projector(Projector(config=config['projector'])) - - if args.name is not None: - # NOTE: - # bugs (?) of tigre 2.2.0 (and older): - # the processing will become slower and slower when calling tigre.Ax multiple times - dataset.filter_names([args.name]) - saver.save(dataset[0]) - else: - for data in tqdm(dataset, ncols=50): - saver.save(data) - - # split data and save meta info (in json) - info = {} - info['dataset_config'] = config_path - info.update(saver.path_dict) - - with open(os.path.join(root_dir, 'splits.json'), 'r') as f: - splits = json.load(f) - info.update(splits) - - with open(os.path.join(root_dir, 'meta_info.json'), 'w') as f: - json.dump(info, f, indent=4) - \ No newline at end of file diff --git a/data/Knee/raw/names.txt b/data/Knee/raw/names.txt deleted file mode 100644 index 1d21323..0000000 --- a/data/Knee/raw/names.txt +++ /dev/null @@ -1,614 +0,0 @@ -FL-140478 -FL-140479 -FL-140559 -FL-140625 -FL-140692 -FL-140728 -FL-140737 -FL-140743 -FL-140777 -FL-140779 -FL-140791 -FL-140910 -FL-140985 -FL-140998 -FL-141035 -FL-141061 -FL-150064 -FL-150090 -FL-150097 -FL-150183 -FL-150198 -FL-150229 -FL-150295 -FL-150421 -FL-150422 -FL-150453 -FL-150481 -FL-150494 -FL-150495 -FL-150518 -FL-150604 -FL-150619 -FL-150646 -FL-150839 -FL-150846 -FL-150907 -FL-150930 -FL-150943 -FL-150960 -FL-150968 -FL-150971 -FL-150976 -FL-150979 -FL-151002 -FL-151017 -FL-151044 -FL-151054 -FL-151072 -FL-151073 -FL-151076 -FL-151086 -FL-151091 -FL-151101 -FL-151102 -FL-151168 -FL-151200 -FL-151238 -FL-151263 -FL-151265 -FL-151274 -FL-151277 -FL-151279 -FL-151299 -FL-151304 -FL-151310 -FL-151314 -FL-151319 -FL-151336 -FL-151341 -FL-151348 -FL-151366 -FL-151371 -FL-151397 -FL-151402 -FL-151406 -FL-151409 -FL-151416 -FL-151430 -FL-151435 -FL-151451 -FL-151456 -FL-151465 -FL-151469 -FL-151474 -FL-151477 -FL-151499 -FL-151501 -FL-151506 -FL-151513 -FL-151548 -FL-151549 -FL-151553 -FL-160002 -FL-160004 -FL-160008 -FL-160012 -FL-160017 -FL-160018 -FL-160020 -FL-160056 -FL-160084 -FL-160085 -FL-160097 -FL-160100 -FL-160106 -FL-160116 -FL-160123 -FL-160132 -FL-160152 -FL-160176 -FL-160183 -FL-160199 -FL-160214 -FL-160232 -FL-160237 -FL-160241 -FL-160248 -FL-160259 -FL-160265 -FL-160271 -FL-160284 -FL-160287 -FL-160292 -FL-160295 -FL-160301 -FL-160304 -FL-160310 -FL-160326 -FL-160338 -FL-160349 -FL-160350 -FL-160357 -FL-160358 -FL-160366 -FL-160381 -FL-160470 -FL-160487 -FL-160514 -FL-160542 -FL-160593 -FL-160649 -FL-160689 -FL-160712 -FR-140369 -FR-140380 -FR-140384 -FR-140385 -FR-140389 -FR-140394 -FR-140404 -FR-140411 -FR-140418 -FR-140458 -FR-140462 -FR-140481 -FR-140497 -FR-140530 -FR-140576 -FR-140606 -FR-140619 -FR-140639 -FR-140649 -FR-140686 -FR-140698 -FR-140734 -FR-140749 -FR-140851 -FR-140853 -FR-140859 -FR-140876 -FR-140882 -FR-140896 -FR-140907 -FR-140913 -FR-140925 -FR-140942 -FR-140986 -FR-140996 -FR-141060 -FR-141064 -FR-150027 -FR-150042 -FR-150105 -FR-150151 -FR-150178 -FR-150189 -FR-150234 -FR-150235 -FR-150238 -FR-150239 -FR-150240 -FR-150298 -FR-150345 -FR-150369 -FR-150374 -FR-150375 -FR-150402 -FR-150415 -FR-150427 -FR-150430 -FR-150431 -FR-150438 -FR-150503 -FR-150520 -FR-150583 -FR-150603 -FR-150615 -FR-150632 -FR-150658 -FR-150659 -FR-150673 -FR-150757 -FR-150759 -FR-150760 -FR-150867 -FR-150882 -FR-150887 -FR-150900 -FR-150925 -FR-150948 -FR-150954 -FR-150973 -FR-150982 -FR-151027 -FR-151043 -FR-151063 -FR-151106 -FR-151155 -FR-151244 -FR-151271 -FR-151363 -FR-151386 -FR-151387 -FR-151433 -FR-151468 -FR-151498 -FR-151518 -FR-151525 -FR-151530 -FR-160044 -FR-160082 -FR-160129 -FR-160141 -FR-160258 -FR-160296 -FR-160385 -FR-160403 -FR-160406 -FR-160449 -FR-160499 -FR-160543 -FR-160548 -FR-160559 -FR-160578 -FR-160620 -FR-160637 -FR-160743 -ML-140386 -ML-140399 -ML-140415 -ML-140461 -ML-140480 -ML-140517 -ML-140525 -ML-140535 -ML-140537 -ML-140541 -ML-140562 -ML-140594 -ML-140624 -ML-140717 -ML-140738 -ML-140746 -ML-140755 -ML-140775 -ML-140776 -ML-140780 -ML-140794 -ML-140801 -ML-140862 -ML-140924 -ML-141024 -ML-141037 -ML-141056 -ML-141058 -ML-150019 -ML-150025 -ML-150041 -ML-150052 -ML-150062 -ML-150126 -ML-150146 -ML-150184 -ML-150185 -ML-150207 -ML-150213 -ML-150230 -ML-150288 -ML-150325 -ML-150338 -ML-150349 -ML-150363 -ML-150405 -ML-150452 -ML-150496 -ML-150517 -ML-150525 -ML-150530 -ML-150546 -ML-150569 -ML-150616 -ML-150654 -ML-150660 -ML-150661 -ML-150817 -ML-150858 -ML-150860 -ML-150936 -ML-150952 -ML-151000 -ML-151018 -ML-151088 -ML-151090 -ML-151094 -ML-151131 -ML-151151 -ML-151174 -ML-151211 -ML-151248 -ML-151250 -ML-151287 -ML-151294 -ML-151320 -ML-151339 -ML-151413 -ML-151425 -ML-151432 -ML-151461 -ML-151470 -ML-151519 -ML-151555 -ML-160043 -ML-160060 -ML-160140 -ML-160162 -ML-160201 -ML-160207 -ML-160213 -ML-160236 -ML-160240 -ML-160252 -ML-160279 -ML-160281 -ML-160297 -ML-160315 -ML-160328 -ML-160347 -ML-160387 -ML-160424 -ML-160464 -ML-160469 -ML-160480 -ML-160488 -ML-160505 -ML-160558 -ML-160619 -MR-140370 -MR-140383 -MR-140403 -MR-140446 -MR-140471 -MR-140484 -MR-140514 -MR-140540 -MR-140551 -MR-140557 -MR-140578 -MR-140590 -MR-140614 -MR-140653 -MR-140664 -MR-140674 -MR-140682 -MR-140687 -MR-140694 -MR-140732 -MR-140736 -MR-140762 -MR-140800 -MR-140856 -MR-140920 -MR-140921 -MR-140933 -MR-140939 -MR-140943 -MR-140988 -MR-140989 -MR-140991 -MR-141011 -MR-141038 -MR-141053 -MR-141085 -MR-150018 -MR-150026 -MR-150044 -MR-150051 -MR-150061 -MR-150070 -MR-150072 -MR-150080 -MR-150094 -MR-150117 -MR-150137 -MR-150138 -MR-150161 -MR-150213 -MR-150226 -MR-150262 -MR-150282 -MR-150294 -MR-150306 -MR-150326 -MR-150340 -MR-150360 -MR-150364 -MR-150411 -MR-150463 -MR-150601 -MR-150639 -MR-150662 -MR-150856 -MR-150933 -MR-150941 -MR-150996 -MR-150999 -MR-151008 -MR-151024 -MR-151140 -MR-151150 -MR-151169 -MR-151208 -MR-151209 -MR-151210 -MR-151261 -MR-151280 -MR-151359 -MR-151460 -MR-151544 -MR-160001 -MR-160057 -MR-160069 -MR-160081 -MR-160164 -MR-160343 -MR-160353 -MR-160368 -MR-160378 -MR-160395 -MR-160435 -MR-160577 -MR-160587 -MR-160599 -MR-160603 -MR-160714 -FL-140518 -FL-140773 -FL-140867 -FL-150187 -FL-150535 -FL-150980 -FL-151025 -FL-151039 -FL-151048 -FL-151176 -FL-151316 -FL-151467 -FL-151505 -FL-160021 -FL-160064 -FL-160182 -FL-160191 -FL-160260 -FR-140376 -FR-140669 -FR-140918 -FR-150107 -FR-150186 -FR-151503 -FR-160131 -ML-140670 -ML-141006 -ML-141070 -ML-150106 -ML-150136 -ML-150269 -ML-150861 -ML-151219 -ML-160062 -ML-160128 -ML-160168 -ML-160274 -MR-140377 -MR-140511 -MR-140623 -MR-140644 -MR-140785 -MR-150093 -MR-150532 -MR-150670 -MR-150838 -MR-151192 -MR-160070 -MR-160096 -MR-160153 -FL-140400 -FL-140426 -FL-140472 -FL-140587 -FL-140690 -FL-141015 -FL-141057 -FL-150410 -FL-150436 -FL-150559 -FL-150939 -FL-150949 -FL-151001 -FL-151032 -FL-151095 -FL-151122 -FL-151143 -FL-151256 -FL-151285 -FL-151324 -FL-151334 -FL-151367 -FL-151374 -FL-151417 -FL-151450 -FL-151478 -FL-151516 -FL-160114 -FL-160133 -FL-160221 -FL-160339 -FL-160394 -FL-160623 -FR-140492 -FR-140554 -FR-140660 -FR-140677 -FR-140756 -FR-140786 -FR-140906 -FR-150028 -FR-150214 -FR-150344 -FR-150397 -FR-150997 -FR-151075 -FR-151153 -FR-151154 -FR-151365 -FR-151396 -FR-151517 -FR-151528 -FR-160130 -FR-160262 -FR-160263 -FR-160533 -FR-160579 -FR-160706 -ML-140716 -ML-150148 -ML-150512 -ML-150666 -ML-150922 -ML-150940 -ML-150955 -ML-151028 -ML-151035 -ML-151037 -ML-151166 -ML-151268 -ML-151423 -ML-151537 -ML-160045 -ML-160108 -ML-160197 -ML-160228 -ML-160402 -ML-160495 -ML-160609 -MR-140465 -MR-140467 -MR-140589 -MR-140838 -MR-140909 -MR-141016 -MR-141017 -MR-141059 -MR-150023 -MR-150215 -MR-150258 -MR-150713 -MR-150765 -MR-150834 -MR-150974 -MR-151087 -MR-151539 -MR-160177 -MR-160282 -MR-160348 -MR-160642 diff --git a/data/Knee/run.sh b/data/Knee/run.sh deleted file mode 100644 index 26998c3..0000000 --- a/data/Knee/run.sh +++ /dev/null @@ -1,7 +0,0 @@ -gpu=0 - -while IFS= read -r name; do - echo $name - CUDA_VISIBLE_DEVICES=$gpu python main.py -n $name - ls -l processed/images/ | grep "^-" | wc -l -done < ./raw/names.txt diff --git a/data/Knee/splits.json b/data/Knee/splits.json deleted file mode 100644 index de551ff..0000000 --- a/data/Knee/splits.json +++ /dev/null @@ -1,622 +0,0 @@ -{ - "train": [ - "FL-140478", - "FL-140479", - "FL-140559", - "FL-140625", - "FL-140692", - "FL-140728", - "FL-140737", - "FL-140743", - "FL-140777", - "FL-140779", - "FL-140791", - "FL-140910", - "FL-140985", - "FL-140998", - "FL-141035", - "FL-141061", - "FL-150064", - "FL-150090", - "FL-150097", - "FL-150183", - "FL-150198", - "FL-150229", - "FL-150295", - "FL-150421", - "FL-150422", - "FL-150453", - "FL-150481", - "FL-150494", - "FL-150495", - "FL-150518", - "FL-150604", - "FL-150619", - "FL-150646", - "FL-150839", - "FL-150846", - "FL-150907", - "FL-150930", - "FL-150943", - "FL-150960", - "FL-150968", - "FL-150971", - "FL-150976", - "FL-150979", - "FL-151002", - "FL-151017", - "FL-151044", - "FL-151054", - "FL-151072", - "FL-151073", - "FL-151076", - "FL-151086", - "FL-151091", - "FL-151101", - "FL-151102", - "FL-151168", - "FL-151200", - "FL-151238", - "FL-151263", - "FL-151265", - "FL-151274", - "FL-151277", - "FL-151279", - "FL-151299", - "FL-151304", - "FL-151310", - "FL-151314", - "FL-151319", - "FL-151336", - "FL-151341", - "FL-151348", - "FL-151366", - "FL-151371", - "FL-151397", - "FL-151402", - "FL-151406", - "FL-151409", - "FL-151416", - "FL-151430", - "FL-151435", - "FL-151451", - "FL-151456", - "FL-151465", - "FL-151469", - "FL-151474", - "FL-151477", - "FL-151499", - "FL-151501", - "FL-151506", - "FL-151513", - "FL-151548", - "FL-151549", - "FL-151553", - "FL-160002", - "FL-160004", - "FL-160008", - "FL-160012", - "FL-160017", - "FL-160018", - "FL-160020", - "FL-160056", - "FL-160084", - "FL-160085", - "FL-160097", - "FL-160100", - "FL-160106", - "FL-160116", - "FL-160123", - "FL-160132", - "FL-160152", - "FL-160176", - "FL-160183", - "FL-160199", - "FL-160214", - "FL-160232", - "FL-160237", - "FL-160241", - "FL-160248", - "FL-160259", - "FL-160265", - "FL-160271", - "FL-160284", - "FL-160287", - "FL-160292", - "FL-160295", - "FL-160301", - "FL-160304", - "FL-160310", - "FL-160326", - "FL-160338", - "FL-160349", - "FL-160350", - "FL-160357", - "FL-160358", - "FL-160366", - "FL-160381", - "FL-160470", - "FL-160487", - "FL-160514", - "FL-160542", - "FL-160593", - "FL-160649", - "FL-160689", - "FL-160712", - "FR-140369", - "FR-140380", - "FR-140384", - "FR-140385", - "FR-140389", - "FR-140394", - "FR-140404", - "FR-140411", - "FR-140418", - "FR-140458", - "FR-140462", - "FR-140481", - "FR-140497", - "FR-140530", - "FR-140576", - "FR-140606", - "FR-140619", - "FR-140639", - "FR-140649", - "FR-140686", - "FR-140698", - "FR-140734", - "FR-140749", - "FR-140851", - "FR-140853", - "FR-140859", - "FR-140876", - "FR-140882", - "FR-140896", - "FR-140907", - "FR-140913", - "FR-140925", - "FR-140942", - "FR-140986", - "FR-140996", - "FR-141060", - "FR-141064", - "FR-150027", - "FR-150042", - "FR-150105", - "FR-150151", - "FR-150178", - "FR-150189", - "FR-150234", - "FR-150235", - "FR-150238", - "FR-150239", - "FR-150240", - "FR-150298", - "FR-150345", - "FR-150369", - "FR-150374", - "FR-150375", - "FR-150402", - "FR-150415", - "FR-150427", - "FR-150430", - "FR-150431", - "FR-150438", - "FR-150503", - "FR-150520", - "FR-150583", - "FR-150603", - "FR-150615", - "FR-150632", - "FR-150658", - "FR-150659", - "FR-150673", - "FR-150757", - "FR-150759", - "FR-150760", - "FR-150867", - "FR-150882", - "FR-150887", - "FR-150900", - "FR-150925", - "FR-150948", - "FR-150954", - "FR-150973", - "FR-150982", - "FR-151027", - "FR-151043", - "FR-151063", - "FR-151106", - "FR-151155", - "FR-151244", - "FR-151271", - "FR-151363", - "FR-151386", - "FR-151387", - "FR-151433", - "FR-151468", - "FR-151498", - "FR-151518", - "FR-151525", - "FR-151530", - "FR-160044", - "FR-160082", - "FR-160129", - "FR-160141", - "FR-160258", - "FR-160296", - "FR-160385", - "FR-160403", - "FR-160406", - "FR-160449", - "FR-160499", - "FR-160543", - "FR-160548", - "FR-160559", - "FR-160578", - "FR-160620", - "FR-160637", - "FR-160743", - "ML-140386", - "ML-140399", - "ML-140415", - "ML-140461", - "ML-140480", - "ML-140517", - "ML-140525", - "ML-140535", - "ML-140537", - "ML-140541", - "ML-140562", - "ML-140594", - "ML-140624", - "ML-140717", - "ML-140738", - "ML-140746", - "ML-140755", - "ML-140775", - "ML-140776", - "ML-140780", - "ML-140794", - "ML-140801", - "ML-140862", - "ML-140924", - "ML-141024", - "ML-141037", - "ML-141056", - "ML-141058", - "ML-150019", - "ML-150025", - "ML-150041", - "ML-150052", - "ML-150062", - "ML-150126", - "ML-150146", - "ML-150184", - "ML-150185", - "ML-150207", - "ML-150213", - "ML-150230", - "ML-150288", - "ML-150325", - "ML-150338", - "ML-150349", - "ML-150363", - "ML-150405", - "ML-150452", - "ML-150496", - "ML-150517", - "ML-150525", - "ML-150530", - "ML-150546", - "ML-150569", - "ML-150616", - "ML-150654", - "ML-150660", - "ML-150661", - "ML-150817", - "ML-150858", - "ML-150860", - "ML-150936", - "ML-150952", - "ML-151000", - "ML-151018", - "ML-151088", - "ML-151090", - "ML-151094", - "ML-151131", - "ML-151151", - "ML-151174", - "ML-151211", - "ML-151248", - "ML-151250", - "ML-151287", - "ML-151294", - "ML-151320", - "ML-151339", - "ML-151413", - "ML-151425", - "ML-151432", - "ML-151461", - "ML-151470", - "ML-151519", - "ML-151555", - "ML-160043", - "ML-160060", - "ML-160140", - "ML-160162", - "ML-160201", - "ML-160207", - "ML-160213", - "ML-160236", - "ML-160240", - "ML-160252", - "ML-160279", - "ML-160281", - "ML-160297", - "ML-160315", - "ML-160328", - "ML-160347", - "ML-160387", - "ML-160424", - "ML-160464", - "ML-160469", - "ML-160480", - "ML-160488", - "ML-160505", - "ML-160558", - "ML-160619", - "MR-140370", - "MR-140383", - "MR-140403", - "MR-140446", - "MR-140471", - "MR-140484", - "MR-140514", - "MR-140540", - "MR-140551", - "MR-140557", - "MR-140578", - "MR-140590", - "MR-140614", - "MR-140653", - "MR-140664", - "MR-140674", - "MR-140682", - "MR-140687", - "MR-140694", - "MR-140732", - "MR-140736", - "MR-140762", - "MR-140800", - "MR-140856", - "MR-140920", - "MR-140921", - "MR-140933", - "MR-140939", - "MR-140943", - "MR-140988", - "MR-140989", - "MR-140991", - "MR-141011", - "MR-141038", - "MR-141053", - "MR-141085", - "MR-150018", - "MR-150026", - "MR-150044", - "MR-150051", - "MR-150061", - "MR-150070", - "MR-150072", - "MR-150080", - "MR-150094", - "MR-150117", - "MR-150137", - "MR-150138", - "MR-150161", - "MR-150213", - "MR-150226", - "MR-150262", - "MR-150282", - "MR-150294", - "MR-150306", - "MR-150326", - "MR-150340", - "MR-150360", - "MR-150364", - "MR-150411", - "MR-150463", - "MR-150601", - "MR-150639", - "MR-150662", - "MR-150856", - "MR-150933", - "MR-150941", - "MR-150996", - "MR-150999", - "MR-151008", - "MR-151024", - "MR-151140", - "MR-151150", - "MR-151169", - "MR-151208", - "MR-151209", - "MR-151210", - "MR-151261", - "MR-151280", - "MR-151359", - "MR-151460", - "MR-151544", - "MR-160001", - "MR-160057", - "MR-160069", - "MR-160081", - "MR-160164", - "MR-160343", - "MR-160353", - "MR-160368", - "MR-160378", - "MR-160395", - "MR-160435", - "MR-160577", - "MR-160587", - "MR-160599", - "MR-160603", - "MR-160714" - ], - "eval": [ - "FL-140518", - "FL-140773", - "FL-140867", - "FL-150187", - "FL-150535", - "FL-150980", - "FL-151025", - "FL-151039", - "FL-151048", - "FL-151176", - "FL-151316", - "FL-151467", - "FL-151505", - "FL-160021", - "FL-160064", - "FL-160182", - "FL-160191", - "FL-160260", - "FR-140376", - "FR-140669", - "FR-140918", - "FR-150107", - "FR-150186", - "FR-151503", - "FR-160131", - "ML-140670", - "ML-141006", - "ML-141070", - "ML-150106", - "ML-150136", - "ML-150269", - "ML-150861", - "ML-151219", - "ML-160062", - "ML-160128", - "ML-160168", - "ML-160274", - "MR-140377", - "MR-140511", - "MR-140623", - "MR-140644", - "MR-140785", - "MR-150093", - "MR-150532", - "MR-150670", - "MR-150838", - "MR-151192", - "MR-160070", - "MR-160096", - "MR-160153" - ], - "test": [ - "FL-140400", - "FL-140426", - "FL-140472", - "FL-140587", - "FL-140690", - "FL-141015", - "FL-141057", - "FL-150410", - "FL-150436", - "FL-150559", - "FL-150939", - "FL-150949", - "FL-151001", - "FL-151032", - "FL-151095", - "FL-151122", - "FL-151143", - "FL-151256", - "FL-151285", - "FL-151324", - "FL-151334", - "FL-151367", - "FL-151374", - "FL-151417", - "FL-151450", - "FL-151478", - "FL-151516", - "FL-160114", - "FL-160133", - "FL-160221", - "FL-160339", - "FL-160394", - "FL-160623", - "FR-140492", - "FR-140554", - "FR-140660", - "FR-140677", - "FR-140756", - "FR-140786", - "FR-140906", - "FR-150028", - "FR-150214", - "FR-150344", - "FR-150397", - "FR-150997", - "FR-151075", - "FR-151153", - "FR-151154", - "FR-151365", - "FR-151396", - "FR-151517", - "FR-151528", - "FR-160130", - "FR-160262", - "FR-160263", - "FR-160533", - "FR-160579", - "FR-160706", - "ML-140716", - "ML-150148", - "ML-150512", - "ML-150666", - "ML-150922", - "ML-150940", - "ML-150955", - "ML-151028", - "ML-151035", - "ML-151037", - "ML-151166", - "ML-151268", - "ML-151423", - "ML-151537", - "ML-160045", - "ML-160108", - "ML-160197", - "ML-160228", - "ML-160402", - "ML-160495", - "ML-160609", - "MR-140465", - "MR-140467", - "MR-140589", - "MR-140838", - "MR-140909", - "MR-141016", - "MR-141017", - "MR-141059", - "MR-150023", - "MR-150215", - "MR-150258", - "MR-150713", - "MR-150765", - "MR-150834", - "MR-150974", - "MR-151087", - "MR-151539", - "MR-160177", - "MR-160282", - "MR-160348", - "MR-160642" - ] -} \ No newline at end of file diff --git a/data/README.md b/data/README.md deleted file mode 100644 index 7c709aa..0000000 --- a/data/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Data Preprocessing - -Will update later, and please refer to `./data/Knee/` and `./data/LUNA16/` first. diff --git a/data/ToothFairy/config.yaml b/data/ToothFairy/config.yaml deleted file mode 100644 index ec7cf68..0000000 --- a/data/ToothFairy/config.yaml +++ /dev/null @@ -1,35 +0,0 @@ -dataset: - spacing: [0.54257813, 0.54257813, 0.20859375] # [x, y, z], mm - value_range: [-1000, 3000] # [min, max], HU scale - resolution: [256, 256, 256] # [x, y, z] - block_size: [64, 64, 64] # [x, y, z] - -projector: - n_porjections: 50 - - # system configuration - DSD: 900 # distance source detector (mm) - DSO: 1000 # distance source origin (mm) - - # detector parameters - nDetector: [256, 256] # number of pixels (px) - dDetector: [0.20859375, 0.54257813] # size of each pixel (mm) - - # image parameters - nVoxel: [256, 256, 256] # number of voxels (vx) [x, y, z] - dVoxel: [0.54257813, 0.54257813, 0.20859375] # size of each voxel (mm) - - # offsets - offOrigin: [0, 0, 0] # offset of image from origin (mm) [x, y, z] - offDetector: [0, 0] # offset of detector (only in two direction) (mm) [u, v] - - # Auxiliary - accuracy: 0.5 # accuracy of FWD proj (vx/sample) - - # Mode - mode: cone # x-ray source mode parallel/cone - filter: null - - # Angles - total_angle: 180 # total angle (degree) - start_angle: 0 # start angle (degree) diff --git a/data/ToothFairy/dataset.py b/data/ToothFairy/dataset.py deleted file mode 100644 index 21201a6..0000000 --- a/data/ToothFairy/dataset.py +++ /dev/null @@ -1,29 +0,0 @@ -import os -import numpy as np - -from base.dataset import Dataset - - - -class Dataset_Tooth(Dataset): - def __init__(self, root_dir, config): - super().__init__(config) - - names = os.listdir(os.path.join(root_dir, 'raw')) - - self._data_list = [] - for name in names: - self._data_list.append({ - 'name': name, - 'path': os.path.join(root_dir, f'raw/{name}/data.npy') - }) - - def _load_raw(self, data): - image = np.load(data['path']) - image = image.transpose(1, 2, 0) - spacing = np.array([0.3, 0.3, 0.3]) - return { - 'name': data['name'], - 'image': image, - 'spacing': spacing - } diff --git a/data/ToothFairy/main.py b/data/ToothFairy/main.py deleted file mode 100644 index ec8f3a2..0000000 --- a/data/ToothFairy/main.py +++ /dev/null @@ -1,59 +0,0 @@ -import os -import yaml -import json -import argparse -from tqdm import tqdm - -from dataset import Dataset_Tooth -from base.projector import Projector -from base.saver import Saver, PATH_DICT - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='project') - parser.add_argument('-n', '--name', type=str, default=None) - args = parser.parse_args() - - root_dir = './' - processed_dir = os.path.join(root_dir, 'processed/') - config_path = os.path.join(root_dir, 'config.yaml') - - saver = Saver( - root_dir=processed_dir, - path_dict=PATH_DICT - ) - - with open(config_path, 'r') as f: - config = yaml.safe_load(f) - - # TODO: check - # 1. config.projector.nVoxel == config.dataset.resolution - # 2. config.projector.dVoxel == config.dataset.spacing - - dataset = Dataset_Tooth( - root_dir=root_dir, - config=config['dataset'] - ).init_projector(Projector(config=config['projector'])) - - if args.name is not None: - # NOTE: - # bugs (?) of tigre 2.2.0 (and older): - # the processing will become slower and slower when calling tigre.Ax multiple times - dataset.filter_names([args.name]) - saver.save(dataset[0]) - else: - for data in tqdm(dataset, ncols=50): - saver.save(data) - - # split data and save meta info (in json) - info = {} - info['dataset_config'] = config_path - info.update(saver.path_dict) - - with open(os.path.join(root_dir, 'splits.json'), 'r') as f: - splits = json.load(f) - info.update(splits) - - with open(os.path.join(root_dir, 'meta_info.json'), 'w') as f: - json.dump(info, f, indent=4) - \ No newline at end of file diff --git a/data/ToothFairy/run.sh b/data/ToothFairy/run.sh deleted file mode 100644 index efa41fc..0000000 --- a/data/ToothFairy/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -gpu=0 - -for file in ./raw/* -do - name=$(basename "$file") - echo $name - CUDA_VISIBLE_DEVICES=$gpu python main.py -n $name - ls -l processed/images/ | grep "^-" | wc -l - break -done \ No newline at end of file diff --git a/data/ToothFairy/splits.json b/data/ToothFairy/splits.json deleted file mode 100644 index 9fcf0c1..0000000 --- a/data/ToothFairy/splits.json +++ /dev/null @@ -1,453 +0,0 @@ -{ - "train": [ - "P1", - "P102", - "P23", - "P104", - "P53", - "P105", - "P106", - "P107", - "P108", - "P111", - "P116", - "P39", - "P114", - "P131", - "P133", - "P134", - "P135", - "P136", - "P19", - "P2", - "P20", - "P22", - "P25", - "P26", - "P27", - "P28", - "P29", - "P31", - "P35", - "P36", - "P40", - "P41", - "P44", - "P46", - "P48", - "P50", - "P51", - "P52", - "P54", - "P55", - "P56", - "P81", - "P82", - "P83", - "P84", - "P85", - "P86", - "P87", - "P89", - "P91", - "P92", - "P99", - "P21", - "P122", - "P119", - "P30", - "P32", - "P33", - "P38", - "P90", - "P120", - "P126", - "P97", - "P152", - "P60", - "P62", - "P73", - "P77", - "P110", - "P118", - "P125", - "P130", - "P150", - "P193", - "P194", - "P195", - "P196", - "P200", - "P202", - "P204", - "P211", - "P213", - "P214", - "P215", - "P216", - "P218", - "P219", - "P222", - "P228", - "P229", - "P230", - "P231", - "P232", - "P234", - "P235", - "P237", - "P242", - "P243", - "P244", - "P245", - "P246", - "P247", - "P248", - "P249", - "P250", - "P350", - "P380", - "P385", - "P392", - "P394", - "P396", - "P397", - "P400", - "P401", - "P408", - "P425", - "P432", - "P439", - "P446", - "P450", - "P455", - "P460", - "P465", - "P475", - "P480", - "P49", - "P504", - "P520", - "P93", - "P96" - ], - "test": [ - "P141", - "P143", - "P149", - "P420", - "P5", - "P61", - "P7", - "P72", - "P76", - "P78", - "P8", - "P139", - "P37", - "P88", - "P94" - ], - "val": [ - "P128", - "P24", - "P42", - "P45", - "P80", - "P95", - "P98", - "P415" - ], - "synthetic": [ - "P10", - "P100", - "P101", - "P103", - "P109", - "P11", - "P112", - "P113", - "P115", - "P117", - "P12", - "P121", - "P123", - "P124", - "P127", - "P129", - "P13", - "P132", - "P137", - "P138", - "P14", - "P140", - "P142", - "P144", - "P145", - "P146", - "P147", - "P148", - "P15", - "P151", - "P16", - "P17", - "P18", - "P188", - "P190", - "P191", - "P192", - "P197", - "P198", - "P199", - "P201", - "P203", - "P205", - "P206", - "P207", - "P208", - "P209", - "P210", - "P212", - "P217", - "P220", - "P221", - "P223", - "P224", - "P225", - "P226", - "P227", - "P233", - "P236", - "P238", - "P239", - "P240", - "P241", - "P251", - "P252", - "P253", - "P254", - "P255", - "P256", - "P257", - "P258", - "P259", - "P260", - "P261", - "P262", - "P263", - "P264", - "P3", - "P321", - "P322", - "P323", - "P324", - "P325", - "P326", - "P327", - "P328", - "P329", - "P330", - "P331", - "P332", - "P333", - "P334", - "P335", - "P336", - "P337", - "P338", - "P339", - "P34", - "P340", - "P341", - "P342", - "P343", - "P344", - "P345", - "P346", - "P347", - "P348", - "P349", - "P351", - "P352", - "P353", - "P354", - "P355", - "P356", - "P357", - "P358", - "P359", - "P360", - "P361", - "P362", - "P363", - "P364", - "P365", - "P366", - "P367", - "P368", - "P369", - "P370", - "P371", - "P372", - "P373", - "P376", - "P377", - "P378", - "P379", - "P381", - "P382", - "P383", - "P384", - "P386", - "P387", - "P388", - "P389", - "P390", - "P391", - "P393", - "P395", - "P398", - "P399", - "P4", - "P402", - "P403", - "P404", - "P405", - "P406", - "P407", - "P409", - "P410", - "P411", - "P412", - "P413", - "P414", - "P416", - "P417", - "P418", - "P419", - "P421", - "P422", - "P423", - "P424", - "P426", - "P427", - "P428", - "P429", - "P430", - "P431", - "P433", - "P434", - "P435", - "P436", - "P437", - "P438", - "P440", - "P442", - "P443", - "P444", - "P445", - "P447", - "P448", - "P449", - "P451", - "P452", - "P453", - "P454", - "P456", - "P458", - "P459", - "P461", - "P462", - "P463", - "P464", - "P466", - "P467", - "P468", - "P47", - "P470", - "P471", - "P472", - "P473", - "P474", - "P476", - "P477", - "P478", - "P479", - "P481", - "P482", - "P485", - "P486", - "P487", - "P488", - "P489", - "P491", - "P492", - "P493", - "P494", - "P496", - "P497", - "P498", - "P499", - "P500", - "P501", - "P502", - "P503", - "P505", - "P506", - "P507", - "P508", - "P509", - "P510", - "P511", - "P512", - "P513", - "P514", - "P516", - "P517", - "P518", - "P519", - "P521", - "P522", - "P523", - "P524", - "P526", - "P527", - "P528", - "P529", - "P530", - "P531", - "P532", - "P533", - "P534", - "P535", - "P536", - "P537", - "P538", - "P539", - "P540", - "P542", - "P543", - "P544", - "P545", - "P546", - "P547", - "P548", - "P57", - "P58", - "P59", - "P6", - "P63", - "P64", - "P65", - "P66", - "P67", - "P68", - "P69", - "P70", - "P71", - "P74", - "P75", - "P79", - "P9" - ] -} From 1ae79ca4c09c5939f7a0233a11bf224c0f87df65 Mon Sep 17 00:00:00 2001 From: cloner174 Date: Tue, 8 Oct 2024 02:18:59 +0330 Subject: [PATCH 7/9] modified: .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4e93080..6974e48 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ __pycache__/ # C extensions *.so - +config.py ./text.txt # Distribution / packaging .Python From 88dcece5229b8859803870909422d8f4ca731e50 Mon Sep 17 00:00:00 2001 From: Hamed <147453648+cloner174@users.noreply.github.com> Date: Tue, 8 Oct 2024 02:22:13 +0330 Subject: [PATCH 8/9] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index aa0a937..247858c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # C^2RV-CBCT +# CVPR 2024, "C^2RV: Cross-Regional and Cross-View Learning for Sparse-View CBCT Reconstruction" + Yiqun Lin, Jiewen Yang, Hualiang Wang, Xinpeng Ding, Wei Zhao, and Xiaomeng Li. "C^2RV: Cross-Regional and Cross-View Learning for Sparse-View CBCT Reconstruction." CVPR 2024. [arXiv](https://arxiv.org/abs/2406.03902) ``` From 01867deac5092a1e112b48c1461855d73a588216 Mon Sep 17 00:00:00 2001 From: cloner174 Date: Fri, 11 Oct 2024 07:17:09 +0330 Subject: [PATCH 9/9] Specialized for LUNA16 --- .gitattributes | 1 + .gitignore | 5 +- README.md | 245 ++++- code/datasets/base.py | 169 ---- code/datasets/geometry.py | 41 - code/datasets/mixed.py | 35 - data/LUNA16/run.sh | 7 - {data => dataset}/LUNA16/README.md | 0 {data => dataset}/LUNA16/config.yaml | 0 {data => dataset}/LUNA16/dataset.py | 9 +- {data => dataset}/LUNA16/main.py | 12 +- dataset/LUNA16/raw/annotations.csv | 1187 ++++++++++++++++++++++++ {data => dataset}/LUNA16/raw/names.txt | 0 dataset/LUNA16/run.sh | 18 + {data => dataset}/LUNA16/splits.json | 0 {data => dataset}/base/dataset.py | 0 {data => dataset}/base/projector.py | 0 {data => dataset}/base/saver.py | 0 {data => dataset}/base/utils.py | 0 requirements.txt | 10 + text.txt | 0 21 files changed, 1468 insertions(+), 271 deletions(-) create mode 100644 .gitattributes delete mode 100644 code/datasets/base.py delete mode 100644 code/datasets/geometry.py delete mode 100644 code/datasets/mixed.py delete mode 100644 data/LUNA16/run.sh rename {data => dataset}/LUNA16/README.md (100%) rename {data => dataset}/LUNA16/config.yaml (100%) rename {data => dataset}/LUNA16/dataset.py (92%) rename {data => dataset}/LUNA16/main.py (88%) create mode 100644 dataset/LUNA16/raw/annotations.csv rename {data => dataset}/LUNA16/raw/names.txt (100%) create mode 100644 dataset/LUNA16/run.sh rename {data => dataset}/LUNA16/splits.json (100%) rename {data => dataset}/base/dataset.py (100%) rename {data => dataset}/base/projector.py (100%) rename {data => dataset}/base/saver.py (100%) rename {data => dataset}/base/utils.py (100%) create mode 100644 requirements.txt delete mode 100644 text.txt diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1e50ce1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.raw filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 6974e48..085e48e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ __pycache__/ *.py[cod] *$py.class +text.txt # C extensions *.so config.py @@ -161,4 +162,6 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ \ No newline at end of file +#.idea/ +index.ipynb +text.txt diff --git a/README.md b/README.md index 247858c..50e5534 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,232 @@ -# C^2RV-CBCT -# CVPR 2024, "C^2RV: Cross-Regional and Cross-View Learning for Sparse-View CBCT Reconstruction" +# The LUNA16 -Yiqun Lin, Jiewen Yang, Hualiang Wang, Xinpeng Ding, Wei Zhao, and Xiaomeng Li. "C^2RV: Cross-Regional and Cross-View Learning for Sparse-View CBCT Reconstruction." CVPR 2024. [arXiv](https://arxiv.org/abs/2406.03902) +## 1. Installation + +```shell +#torch 1.13, cuda 11.6 +pip install -r requirements.txt + +# TIGRE: Needs More try to be installed! + +git clone https://github.com/CERN/TIGRE.git + +cd TIGRE/Python + +python setup.py install +``` + +--- + +## **Overview** +To train a model on the LUNA16 dataset, here are main steps: + +1. **Prepare the Dataset**: + - Process the LUNA16 dataset using existing code. + - Organize the processed data for use with PyTorch. + +2. **Set Up the Environment**: + - Install necessary libraries. + - Clone the Denoising-Diffusion-GAN repository. + ``` + git clone https://github.com/cloner174/Denoising-Diffusion-GAN.git + ``` + +3. **Train the Model**: + - Run the training script and monitor the training process. + +--- + +## **Step 1: Prepare the Dataset** + +### **a. Process the LUNA16 Dataset** + +After processing the LUNA16 dataset using this repo, ensure the following: + +- **Processed Images**: The CT images are saved in `.nii.gz` format in a directory, e.g., `data/LUNA16/processed/images/`. +- **Nodule Masks**: The corresponding nodule masks are saved in `.nii.gz` format, e.g., `data/LUNA16/processed/nodule_masks/`. + +### **b. Organize the Data** + +Ensure your directory structure looks like this: + +``` +C2RV-CBCT +├─ data +│ ├─ LUNA16 +│ ├─ processed +│ ├─ images +│ │ ├─ scan1.nii.gz +│ │ ├─ scan2.nii.gz +│ │ └─ ... +│ ├─ nodule_masks +│ │ ├─ scan1.nii.gz +│ │ ├─ scan2.nii.gz +│ │ └─ ... +│ └─ meta_info.json ``` + +--- + +## **Step 2: Set Up the Environment** + +### **a. Clone the Denoising-Diffusion-GAN Repository** + +```bash +git clone https://github.com/cloner174/Denoising-Diffusion-GAN.git +``` + +Navigate to the cloned repository: + +```bash +cd Denoising-Diffusion-GAN +``` + +### **b. Install Required Libraries** + +Install necessary Python packages: + +```bash +pip install -r requirements.txt +``` + +--- + +## **Step 3: Create a PyTorch Dataset Class** + +Create a new Python script named `luna16_dataset.py` in the project directory: + +```python +import os +import torch +from torch.utils.data import Dataset +import SimpleITK as sitk +import numpy as np + +class LUNA16Dataset(Dataset): + def __init__(self, images_dir, masks_dir, transform=None): + self.images_dir = images_dir + self.masks_dir = masks_dir + self.image_names = sorted(os.listdir(images_dir)) + self.mask_names = sorted(os.listdir(masks_dir)) + self.transform = transform + + # Ensure images and masks are aligned + assert len(self.image_names) == len(self.mask_names), "Number of images and masks do not match." + + def __len__(self): + return len(self.image_names) + + def __getitem__(self, idx): + # Load image + image_path = os.path.join(self.images_dir, self.image_names[idx]) + image = sitk.ReadImage(image_path) + image_array = sitk.GetArrayFromImage(image).astype(np.float32) # Shape: [z, y, x] + + # Load mask + mask_path = os.path.join(self.masks_dir, self.mask_names[idx]) + mask = sitk.ReadImage(mask_path) + mask_array = sitk.GetArrayFromImage(mask).astype(np.float32) + + # Normalize image to [0, 1] + min_value = -1000 # Hounsfield Unit for air + max_value = 400 # Typical upper bound for lung tissue + image_array = np.clip(image_array, min_value, max_value) + image_array = (image_array - min_value) / (max_value - min_value) + + # Convert to torch tensors and add channel dimension + image_tensor = torch.from_numpy(image_array).unsqueeze(0) # Shape: [1, z, y, x] + mask_tensor = torch.from_numpy(mask_array).unsqueeze(0) # Shape: [1, z, y, x] + + # Apply transformations if any + if self.transform: + image_tensor = self.transform(image_tensor) + mask_tensor = self.transform(mask_tensor) + + return image_tensor, mask_tensor +``` + +**Notes**: + +- **Data Alignment**: Ensure that the images and masks are aligned correctly by matching their filenames. +- **Normalization**: Adjust the `min_value` and `max_value` based on dataset's intensity range. +- **Data Types**: Convert arrays to `float32` before converting to tensors. + +--- + +## **Step 4: Modify the Model for 3D Data** + +The Denoising-Diffusion-GAN model supports uses 3D convolutional layers. But, you'll need to adjust the model setting by command line arg or editing the config file. + +--- + +## **Step 5: Training** + +### **a. Define Training Parameters** + +```python +num_epochs = 100 +batch_size = 1 # Adjust based on your GPU! +learning_rate = 1e-4 +# Paths to processed data +images_dir = 'data/LUNA16/processed/images/' +masks_dir = 'data/LUNA16/processed/nodule_masks/' + +#dataset = LUNA16Dataset(images_dir=images_dir, masks_dir=masks_dir) +#dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True, num_workers=4) +``` + +- **Adjust Hyperparameters**: The weight factor for `loss_L1` and other hyperparameters may need tuning. + +### **b. Save Model Checkpoints** + +Add code to save model checkpoints periodically: + +Run the train script always with --save-content + +--- + +## **Step 6: Train the Model** + +### **a. Run the Training Script** + +Execute the training script! + + +### **b. Monitor Training** + +- **Loss Values**: Keep an eye on the discriminator and generator losses. +- **GPU Usage**: Monitor GPU memory usage to prevent out-of-memory errors. +- **Adjust Parameters**: If the model isn't converging, consider adjusting learning rates, loss weights, or other hyperparameters. + +--- + +## **Troubleshooting** + +- **Memory Errors**: If you encounter `CUDA out of memory` errors, reduce the batch size or use patch-based training. + +- **Model Not Converging**: Try different learning rates, optimizers, or loss function weights. + +- **Data Loading Issues**: Double-check file paths and ensure data is correctly loaded. + +- **Model Bugs**: Verify that all layers and operations in your model are compatible with 3D data. + +--- + +## **Additional Resources** + +- **PyTorch Documentation**: [https://pytorch.org/docs/stable/index.html](https://pytorch.org/docs/stable/index.html) + +- **Medical Imaging Libraries**: + - `torchio`: [https://torchio.readthedocs.io/](https://torchio.readthedocs.io/) + - `MONAI`: [https://monai.io/](https://monai.io/) + +- **Denoising Diffusion Models**: + - Research papers and tutorials on diffusion models can provide insights into the training process. + +``` +Yiqun Lin, Jiewen Yang, Hualiang Wang, Xinpeng Ding, Wei Zhao, and Xiaomeng Li. "C^2RV: Cross-Regional and Cross-View Learning for Sparse-View CBCT Reconstruction." CVPR 2024. [arXiv](https://arxiv.org/abs/2406.03902) + @InProceedings{lin2024c2rv, author = {Lin, Yiqun and Yang, Jiewen and Wang, Hualiang and Ding, Xinpeng and Zhao, Wei and Li, Xiaomeng}, title = {C{\textasciicircum}2RV: Cross-Regional and Cross-View Learning for Sparse-View CBCT Reconstruction}, @@ -14,14 +237,12 @@ Yiqun Lin, Jiewen Yang, Hualiang Wang, Xinpeng Ding, Wei Zhao, and Xiaomeng Li. } ``` -## 1. Installation +--- -```shell -torch 1.13, cuda 11.6 -fvcore, SimpleITK, easydict, scikit-image, cython, matplotlib, scipy +## **Final Remarks** -# TIGRE: https://github.com/CERN/TIGRE/blob/master/Frontispiece/python_installation.md -git clone https://github.com/CERN/TIGRE -cd Python -python setup.py install -``` +Training complex models like Denoising-Diffusion-GANs on 3D medical imaging data is a challenging task. It requires careful consideration of data handling, model architecture, and training procedures. + +Don't hesitate to seek help from the community if you encounter issues. Forums like Stack Overflow, PyTorch Forums, and specialized medical imaging communities can be valuable resources. + +Good luck! \ No newline at end of file diff --git a/code/datasets/base.py b/code/datasets/base.py deleted file mode 100644 index c31e7cf..0000000 --- a/code/datasets/base.py +++ /dev/null @@ -1,169 +0,0 @@ -import os -import json -import yaml -import scipy -import pickle -import numpy as np -from torch.utils.data import Dataset - -from data.base.utils import sitk_load -from datasets.geometry import Geometry - - - -class CBCT_dataset(Dataset): - def __init__( - self, - dst_name, - cfg, - split='train', - num_views=10, - npoint=5000, - out_res_scale=1.0, - random_views=False, - view_offset=0, - ): - super().__init__() - if not (0. < out_res_scale and out_res_scale <= 1.): - raise ValueError - - self.cfg = cfg - self.dst_name = dst_name - self.data_root = os.path.join(self.cfg.root_dir, dst_name) - - # load dataset info - with open(os.path.join(self.data_root, 'meta_info.json'), 'r') as f: - self.info = json.load(f) - splits = split.split('+') - name_list = [] - for s in splits: - name_list += self.info[s] - name_list = sorted(name_list) - print('CBCT_dataset (base), name: {}, split: {}, len: {}.'.format(dst_name, split, len(name_list))) - - # load dataset config - with open(os.path.join(self.data_root, self.info['dataset_config']), 'r') as f: - dst_cfg = yaml.safe_load(f) - out_res = np.array(dst_cfg['dataset']['resolution']) - out_res = np.round(out_res * out_res_scale).astype(int) # to align the output shape with 'scipy.ndimage.zoom' - self.geo = Geometry(dst_cfg['projector']) - - # prepare points - if split == 'train': - # load blocks' coordinates [train only] - self.blocks = np.load(os.path.join(self.data_root, self.info['blocks_coords'])) - else: - # prepare sampling points - points = np.mgrid[:out_res[0], :out_res[1], :out_res[2]] # TODO: CT resolution - points = points.astype(np.float32) - points = points.reshape(3, -1) - points = points.transpose(1, 0) # N, 3 - self.points = points / (out_res - 1) - - # other parameters - self.out_res_scale = out_res_scale - self.name_list = name_list - self.npoint = npoint - self.is_train = (split == 'train') - self.num_views = num_views - self.random_views = random_views - self.view_offset = view_offset - - # for acceleration when testing - self.points_proj = None - - def __len__(self): - return len(self.name_list) - - def sample_projections(self, name, n_view=None): - # -- load projections - with open(os.path.join(self.data_root, self.info['projs'].format(name)), 'rb') as f: - data = pickle.load(f) - projs = data['projs'] # uint8: [K, W, H] - projs_max = data['projs_max'] # float - angles = data['angles'] # float: [K,] - - if n_view is None: - n_view = self.num_views - - # -- sample projections - views = np.linspace(0, len(projs), n_view, endpoint=False).astype(int) # endpoint=False as the random_views is True during training, i.e., enabling view offsets. - offset = np.random.randint(len(projs) - views[-1]) if self.random_views else self.view_offset - views += offset - - projs = projs[views].astype(np.float32) / 255. - projs = projs[:, None, ...] - angles = angles[views] - - # -- de-normalization - projs = projs * projs_max / 0.2 - - return projs, angles - - def load_ct(self, name): - image, _ = sitk_load( - os.path.join(self.data_root, self.info['image'].format(name)), - uint8=True - ) # float32 - if self.out_res_scale < 1.: - image = scipy.ndimage.zoom(image, self.out_res_scale, order=3, prefilter=False) - return image - - def load_block(self, name, b_idx): - path = os.path.join(self.data_root, self.info['blocks_vals'].format(name, b_idx)) - block = np.load(path) # uint8 - return block - - def sample_points(self, points, values): - # values [block]: uint8 - choice = np.random.choice(len(points), size=self.npoint, replace=False) - points = points[choice] - values = values[choice] - values = values.astype(np.float32) / 255. - return points, values - - def project_points(self, points, angles): - points_proj = [] - for a in angles: - p = self.geo.project(points, a) - points_proj.append(p) - points_proj = np.stack(points_proj, axis=0) # [M, N, 2] - return points_proj - - def __getitem__(self, index): - name = self.name_list[index] - - # -- load projections - projs, angles = self.sample_projections(name) - - # -- load sampling points - if not self.is_train: - points = self.points - points_gt = self.load_ct(name) - else: - b_idx = np.random.randint(len(self.blocks)) - block_values = self.load_block(name, b_idx) - block_coords = self.blocks[b_idx] # [N, 3] - points, points_gt = self.sample_points(block_coords, block_values) - points_gt = points_gt[None, :] - - # -- project points - if self.is_train or self.points_proj is None: - points_proj = self.project_points(points, angles) # given the same geo cfg - self.points_proj = points_proj - else: - points_proj = self.points_proj - - # -- collect data - ret_dict = { - # M: the number of views - # N: the number of sampled points - 'dst_name': self.dst_name, - 'name': name, - 'angles': angles, # [M,] - 'projs': projs, # [M, 1, W, H], projections - 'points': points, # [N, 3], center xyz of volumes ~[0, 1] - 'points_gt': points_gt, # [1, N] (or [W', H', D'] only when is_train is False) - 'points_proj': points_proj, # [M, N, 2] - } - return ret_dict diff --git a/code/datasets/geometry.py b/code/datasets/geometry.py deleted file mode 100644 index 6022e17..0000000 --- a/code/datasets/geometry.py +++ /dev/null @@ -1,41 +0,0 @@ -import numpy as np -from copy import deepcopy - - - -class Geometry(object): - def __init__(self, config): - self.v_res = config['nVoxel'][0] # ct scan - self.p_res = config['nDetector'][0] # projections - self.v_spacing = np.array(config['dVoxel'])[0] # mm - self.p_spacing = np.array(config['dDetector'])[0] # mm - # NOTE: only (res * spacing) is used - - self.DSO = config['DSO'] # mm, source to origin - self.DSD = config['DSD'] # mm, source to detector - - def project(self, points, angle): - # points: [N, 3] ranging from [0, 1] - # d_points: [N, 2] ranging from [-1, 1] - - d1 = self.DSO - d2 = self.DSD - - points = deepcopy(points).astype(float) - points[:, :2] -= 0.5 # [-0.5, 0.5] - points[:, 2] = 0.5 - points[:, 2] # [-0.5, 0.5] - points *= self.v_res * self.v_spacing # mm - - angle = -1 * angle # inverse direction - rot_M = np.array([ - [np.cos(angle), -np.sin(angle), 0], - [np.sin(angle), np.cos(angle), 0], - [ 0, 0, 1] - ]) - points = points @ rot_M.T - - coeff = (d2) / (d1 - points[:, 0]) # N, - d_points = points[:, [2, 1]] * coeff[:, None] # [N, 2] float - d_points /= (self.p_res * self.p_spacing) - d_points *= 2 # NOTE: some points may fall outside [-1, 1] - return d_points diff --git a/code/datasets/mixed.py b/code/datasets/mixed.py deleted file mode 100644 index e072e63..0000000 --- a/code/datasets/mixed.py +++ /dev/null @@ -1,35 +0,0 @@ -import numpy as np -from torch.utils.data import Dataset - - - -class Mixed_CBCT_dataset(Dataset): - def __init__(self, dst_list, DST_CLASS, **kwargs) -> None: - super().__init__() - - print('mixed_dataset:', dst_list) - self.name_list = dst_list - self.datasets = [] - for dst_name in self.name_list: - self.datasets.append(DST_CLASS(dst_name=dst_name, **kwargs)) - - self.is_train = self.datasets[0].is_train - - def __len__(self): - dst_len = [len(d) for d in self.datasets] - return np.sum(dst_len) - - @property - def num_dst(self): - return len(self.datasets) - - def find_dst(self, index): - for i, dst in enumerate(self.datasets): - if index >= len(dst): - index -= len(dst) - else: - return i, index - - def __getitem__(self, index): - dst_idx, index = self.find_dst(index) - return self.datasets[dst_idx][index] diff --git a/data/LUNA16/run.sh b/data/LUNA16/run.sh deleted file mode 100644 index 26998c3..0000000 --- a/data/LUNA16/run.sh +++ /dev/null @@ -1,7 +0,0 @@ -gpu=0 - -while IFS= read -r name; do - echo $name - CUDA_VISIBLE_DEVICES=$gpu python main.py -n $name - ls -l processed/images/ | grep "^-" | wc -l -done < ./raw/names.txt diff --git a/data/LUNA16/README.md b/dataset/LUNA16/README.md similarity index 100% rename from data/LUNA16/README.md rename to dataset/LUNA16/README.md diff --git a/data/LUNA16/config.yaml b/dataset/LUNA16/config.yaml similarity index 100% rename from data/LUNA16/config.yaml rename to dataset/LUNA16/config.yaml diff --git a/data/LUNA16/dataset.py b/dataset/LUNA16/dataset.py similarity index 92% rename from data/LUNA16/dataset.py rename to dataset/LUNA16/dataset.py index 6d3dc4b..bb11250 100644 --- a/data/LUNA16/dataset.py +++ b/dataset/LUNA16/dataset.py @@ -1,10 +1,13 @@ import os +import sys import csv import numpy as np from glob import glob import SimpleITK as sitk from copy import deepcopy +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + from base.dataset import Dataset @@ -29,7 +32,7 @@ class Dataset_LUNA16(Dataset): This class extends the base Dataset class and adds functionality specific to LUNA16, such as loading nodule annotations. """ - def __init__(self, root_dir, config): + def __init__(self, root_dir, config, data_dir = 'raw'): super().__init__(config) """ Initialize the LUNA16 dataset. @@ -42,7 +45,7 @@ def __init__(self, root_dir, config): self._data_list = [] for sub_id in range(10): tag = f'subset{sub_id}' - for path in glob(os.path.join(root_dir, 'raw', tag, '*.mhd')): + for path in glob(os.path.join(root_dir, data_dir, tag, '*.mhd')): name = path.split('/')[-1].replace('.mhd', '') name = f'{tag}_{name}' self._data_list.append({ @@ -51,7 +54,7 @@ def __init__(self, root_dir, config): 'nodules': [] }) - with open(os.path.join(root_dir, 'raw/annotations.csv'), 'r') as csvfile: + with open(os.path.join(root_dir, f'{data_dir}/annotations.csv'), 'r') as csvfile: reader = csv.reader(csvfile, delimiter=',') for i, row in enumerate(reader): if i == 0: diff --git a/data/LUNA16/main.py b/dataset/LUNA16/main.py similarity index 88% rename from data/LUNA16/main.py rename to dataset/LUNA16/main.py index a06e5bb..0919d98 100644 --- a/data/LUNA16/main.py +++ b/dataset/LUNA16/main.py @@ -1,16 +1,18 @@ import os +import sys import yaml import json import argparse from tqdm import tqdm +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + from dataset import Dataset_LUNA16 from base.utils import sitk_save from base.projector import Projector from base.saver import Saver, PATH_DICT - class Saver_LUNA16(Saver): """ Extended Saver class for LUNA16 dataset to include nodule masks. @@ -58,11 +60,14 @@ def save(self, data): if __name__ == '__main__': parser = argparse.ArgumentParser(description='Process LUNA16 dataset') + parser.add_argument('-n', '--name', type=str, default=None, help='Name of a specific patient to process') + parser.add_argument('-r', '--root_dir', type=str, default='./', help='Root Directory') + parser.add_argument('-d', '--data_dir', type=str, default='raw', help='Name of directory with subsets of Luna') args = parser.parse_args() - root_dir = './' + root_dir = args.root_dir processed_dir = os.path.join(root_dir, 'processed/') config_path = os.path.join(root_dir, 'config.yaml') @@ -78,7 +83,8 @@ def save(self, data): dataset = Dataset_LUNA16( root_dir=root_dir, - config=config['dataset'] + config=config['dataset'], + data_dir= args.data_dir ).return_nodule_mask(True).init_projector( Projector(config=config['projector']) ) diff --git a/dataset/LUNA16/raw/annotations.csv b/dataset/LUNA16/raw/annotations.csv new file mode 100644 index 0000000..6da7bf0 --- /dev/null +++ b/dataset/LUNA16/raw/annotations.csv @@ -0,0 +1,1187 @@ +seriesuid,coordX,coordY,coordZ,diameter_mm +1.3.6.1.4.1.14519.5.2.1.6279.6001.100225287222365663678666836860,-128.6994211,-175.3192718,-298.3875064,5.651470635 +1.3.6.1.4.1.14519.5.2.1.6279.6001.100225287222365663678666836860,103.7836509,-211.9251487,-227.12125,4.224708481 +1.3.6.1.4.1.14519.5.2.1.6279.6001.100398138793540579077826395208,69.63901724,-140.9445859,876.3744957,5.786347814 +1.3.6.1.4.1.14519.5.2.1.6279.6001.100621383016233746780170740405,-24.0138242,192.1024053,-391.0812764,8.143261683 +1.3.6.1.4.1.14519.5.2.1.6279.6001.100621383016233746780170740405,2.441546798,172.4648812,-405.4937318,18.54514997 +1.3.6.1.4.1.14519.5.2.1.6279.6001.100621383016233746780170740405,90.93171321,149.0272657,-426.5447146,18.20857028 +1.3.6.1.4.1.14519.5.2.1.6279.6001.100621383016233746780170740405,89.54076865,196.4051593,-515.0733216,16.38127631 +1.3.6.1.4.1.14519.5.2.1.6279.6001.100953483028192176989979435275,81.50964574,54.9572186,-150.3464233,10.36232088 +1.3.6.1.4.1.14519.5.2.1.6279.6001.102681962408431413578140925249,105.0557924,19.82526014,-91.24725078,21.08961863 +1.3.6.1.4.1.14519.5.2.1.6279.6001.104562737760173137525888934217,-124.8342624,127.2471546,-473.0644785,10.46585391 +1.3.6.1.4.1.14519.5.2.1.6279.6001.105495028985881418176186711228,-106.9013014,21.92298672,-126.9169003,9.745258507 +1.3.6.1.4.1.14519.5.2.1.6279.6001.106164978370116976238911317774,2.263815885,33.52641757,-170.6369497,7.16854239 +1.3.6.1.4.1.14519.5.2.1.6279.6001.106379658920626694402549886949,-70.55088903,66.35948368,-160.9429324,6.642184792 +1.3.6.1.4.1.14519.5.2.1.6279.6001.106379658920626694402549886949,-70.66062844,-29.54777007,-106.9030825,4.543419878 +1.3.6.1.4.1.14519.5.2.1.6279.6001.106630482085576298661469304872,-96.43953415,9.736190398,-175.0375714,6.753816666 +1.3.6.1.4.1.14519.5.2.1.6279.6001.106719103982792863757268101375,-57.08718036,74.25926591,1790.494057,13.69356578 +1.3.6.1.4.1.14519.5.2.1.6279.6001.107109359065300889765026303943,-98.1359775,-72.86779248,-221.822772,18.12790811 +1.3.6.1.4.1.14519.5.2.1.6279.6001.107351566259572521472765997306,122.0789199,-175.8341133,-193.8795594,5.084404982 +1.3.6.1.4.1.14519.5.2.1.6279.6001.107351566259572521472765997306,100.9322734,-179.4539814,-222.7930698,5.64474117 +1.3.6.1.4.1.14519.5.2.1.6279.6001.107351566259572521472765997306,-46.7837286,-66.973694,-207.4908964,4.214452054 +1.3.6.1.4.1.14519.5.2.1.6279.6001.107351566259572521472765997306,-69.12656791,-80.56714288,-189.8066129,8.648009287 +1.3.6.1.4.1.14519.5.2.1.6279.6001.107351566259572521472765997306,-108.0728115,-147.1544803,-186.0432849,7.285341553 +1.3.6.1.4.1.14519.5.2.1.6279.6001.107351566259572521472765997306,82.22918083,-82.37619066,-177.897695,6.140896043 +1.3.6.1.4.1.14519.5.2.1.6279.6001.108197895896446896160048741492,-100.5679445,67.26051683,-231.816619,6.440878725 +1.3.6.1.4.1.14519.5.2.1.6279.6001.108231420525711026834210228428,42.5741545,90.26755201,-84.81106034,5.916173884 +1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059,46.18853869,48.40280596,-108.5786324,13.59647134 +1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059,36.39204443,76.77166265,-123.3219112,4.343199739 +1.3.6.1.4.1.14519.5.2.1.6279.6001.110678335949765929063942738609,-38.09602046,-106.7054337,-139.5484666,13.68374597 +1.3.6.1.4.1.14519.5.2.1.6279.6001.111172165674661221381920536987,136.4340587,117.7655789,-181.9478171,4.681381581 +1.3.6.1.4.1.14519.5.2.1.6279.6001.111258527162678142285870245028,-80.95185933,10.34287843,-28.39915701,9.454440433 +1.3.6.1.4.1.14519.5.2.1.6279.6001.111258527162678142285870245028,-117.0680571,40.04322699,-134.7403426,5.269627504 +1.3.6.1.4.1.14519.5.2.1.6279.6001.111496024928645603833332252962,100.1984998,28.86441794,-212.7880542,5.190273745 +1.3.6.1.4.1.14519.5.2.1.6279.6001.111496024928645603833332252962,98.79046698,9.538892661,-183.2404309,3.857518777 +1.3.6.1.4.1.14519.5.2.1.6279.6001.111496024928645603833332252962,15.76513311,83.8624806,-146.0988221,5.111033559 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112740418331256326754121315800,47.67105722,37.64251989,-99.89039388,30.61040636 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112740418331256326754121315800,-60.76413588,-66.43517038,-100.2050371,16.88290495 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112767175295249119452142211437,-65.87013627,50.73044009,-90.80330387,5.915845183 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112767175295249119452142211437,-105.9171192,-17.6565882,-105.0917524,5.48467872 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112767175295249119452142211437,42.29613347,56.15173475,-84.66166226,6.47796611 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112767175295249119452142211437,-137.5005674,-21.65360391,-152.0366379,4.362886498 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112767175295249119452142211437,-26.86268253,38.52993743,-167.5018886,5.885443068 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112767175295249119452142211437,71.39121262,10.55131442,-85.27847902,5.734744196 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112767175295249119452142211437,59.89735907,41.71051844,-96.24057315,4.3556589 +1.3.6.1.4.1.14519.5.2.1.6279.6001.112767175295249119452142211437,99.37468119,23.94678445,-138.5658318,9.104624209 +1.3.6.1.4.1.14519.5.2.1.6279.6001.113679818447732724990336702075,97.37065917,38.38001233,-64.46956062,4.415940924 +1.3.6.1.4.1.14519.5.2.1.6279.6001.113679818447732724990336702075,91.00973801,75.27136367,-199.8623244,5.519376862 +1.3.6.1.4.1.14519.5.2.1.6279.6001.113679818447732724990336702075,-52.44600494,13.24618228,-100.2137946,5.492123714 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114195693932194925962391697338,107.0091479,63.25134805,-169.9519302,5.165048038 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114218724025049818743426522343,-127.5329894,-29.60790208,-253.6976163,8.269325422 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114218724025049818743426522343,93.13888159,-5.652615166,-213.9106155,6.209760075 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114218724025049818743426522343,75.45450371,7.903213687,-194.3685225,7.6317087 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114249388265341701207347458535,-61.06388101,-9.479044949,-167.2364982,7.025592326 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114249388265341701207347458535,103.0705158,68.40957144,-92.41774522,5.829699739 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114249388265341701207347458535,-26.24101038,79.69154358,-62.01174178,5.241641609 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114914167428485563471327801935,-34.49722741,-9.311874316,-37.44756628,7.360638607 +1.3.6.1.4.1.14519.5.2.1.6279.6001.114914167428485563471327801935,-72.83218702,24.89329087,-51.72437324,4.912791975 +1.3.6.1.4.1.14519.5.2.1.6279.6001.115386642382564804180764325545,86.40287315,50.87510892,-81.3868821,12.73358119 +1.3.6.1.4.1.14519.5.2.1.6279.6001.117040183261056772902616195387,-116.8346004,227.4323404,-565.6218654,4.910652503 +1.3.6.1.4.1.14519.5.2.1.6279.6001.117040183261056772902616195387,-32.66447114,188.3615147,-640.737396,4.468307428 +1.3.6.1.4.1.14519.5.2.1.6279.6001.117040183261056772902616195387,88.25600165,230.5158009,-623.295922,9.011764374 +1.3.6.1.4.1.14519.5.2.1.6279.6001.117040183261056772902616195387,55.71446565,190.7603968,-579.6542959,10.88873794 +1.3.6.1.4.1.14519.5.2.1.6279.6001.117040183261056772902616195387,-121.6502017,216.3673938,-635.5142522,4.355736429 +1.3.6.1.4.1.14519.5.2.1.6279.6001.118140393257625250121502185026,-63.09760599,-56.55503154,-332.9778338,10.33318806 +1.3.6.1.4.1.14519.5.2.1.6279.6001.118140393257625250121502185026,-164.3510309,-136.6619593,-301.5817285,9.220611088 +1.3.6.1.4.1.14519.5.2.1.6279.6001.118140393257625250121502185026,-141.7238666,-124.9488005,-251.3310155,6.054719899 +1.3.6.1.4.1.14519.5.2.1.6279.6001.119209873306155771318545953948,-68.62139433,-84.03463116,-160.5226706,6.334194889 +1.3.6.1.4.1.14519.5.2.1.6279.6001.119209873306155771318545953948,-28.36728411,-82.21130866,-206.4823356,6.607863144 +1.3.6.1.4.1.14519.5.2.1.6279.6001.119304665257760307862874140576,-117.722135,160.4941255,-688.2851649,15.34315352 +1.3.6.1.4.1.14519.5.2.1.6279.6001.119515474430718803379832249911,76.54060313,-104.9008899,-86.21061178,4.84697694 +1.3.6.1.4.1.14519.5.2.1.6279.6001.119806527488108718706404165837,-78.69731043,-95.41409843,-168.680412,6.000997888 +1.3.6.1.4.1.14519.5.2.1.6279.6001.121108220866971173712229588402,-86.89844846,-53.10326995,-130.0891571,5.118825049 +1.3.6.1.4.1.14519.5.2.1.6279.6001.121391737347333465796214915391,49.31293635,-63.21521025,-118.7995619,22.13322034 +1.3.6.1.4.1.14519.5.2.1.6279.6001.121824995088859376862458155637,-103.9504272,-156.4473234,-143.9506516,5.194045747 +1.3.6.1.4.1.14519.5.2.1.6279.6001.121824995088859376862458155637,63.57534973,-130.319172,-125.0296842,4.387576729 +1.3.6.1.4.1.14519.5.2.1.6279.6001.121993590721161347818774929286,-94.29246806,60.22561502,-261.2127762,14.19833109 +1.3.6.1.4.1.14519.5.2.1.6279.6001.121993590721161347818774929286,-54.61763177,59.35238726,-236.0747811,13.9323257 +1.3.6.1.4.1.14519.5.2.1.6279.6001.122621219961396951727742490470,-58.38635605,0.082104855,-247.7679608,14.16396307 +1.3.6.1.4.1.14519.5.2.1.6279.6001.122914038048856168343065566972,-144.2210822,76.8021616,-260.6565506,6.961023634 +1.3.6.1.4.1.14519.5.2.1.6279.6001.122914038048856168343065566972,-96.83727606,-5.571432326,-253.0544355,4.833889744 +1.3.6.1.4.1.14519.5.2.1.6279.6001.122914038048856168343065566972,-144.8248012,71.31022616,-251.0999717,5.050147896 +1.3.6.1.4.1.14519.5.2.1.6279.6001.122914038048856168343065566972,-147.2732369,-16.72239867,-240.7544685,7.196392768 +1.3.6.1.4.1.14519.5.2.1.6279.6001.122914038048856168343065566972,112.7053209,64.8630062,-243.8057686,5.898838135 +1.3.6.1.4.1.14519.5.2.1.6279.6001.122914038048856168343065566972,72.85764176,91.95800608,-225.1181458,5.997708724 +1.3.6.1.4.1.14519.5.2.1.6279.6001.123654356399290048011621921476,-104.5202654,-80.58695572,-206.7105258,4.868289382 +1.3.6.1.4.1.14519.5.2.1.6279.6001.123654356399290048011621921476,73.74147799,20.52463349,-144.2154706,4.859054017 +1.3.6.1.4.1.14519.5.2.1.6279.6001.123697637451437522065941162930,-129.0547255,-12.23855483,-79.4978846,21.82795321 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124154461048929153767743874565,145.967465,-161.1976342,-312.0713474,6.378436317 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124663713663969377020085460568,-86.7371531,50.43512096,-156.612762,9.259814 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124663713663969377020085460568,78.93980901,15.80057403,-95.35623253,14.95279904 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124663713663969377020085460568,-60.61494104,50.42874262,-95.98745681,6.736648953 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124822907934319930841506266464,-61.38042695,-72.80237271,-230.3742024,5.174837024 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124822907934319930841506266464,-55.4650503,-72.1326947,-264.3412335,5.600330272 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124822907934319930841506266464,31.31603013,-141.7597373,-93.9202978,3.393985464 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124822907934319930841506266464,75.17419134,-76.43875411,-262.349883,4.054585195 +1.3.6.1.4.1.14519.5.2.1.6279.6001.124822907934319930841506266464,79.7279097,-236.1324625,-149.6524383,4.732833115 +1.3.6.1.4.1.14519.5.2.1.6279.6001.125124219978170516876304987559,124.370439,-106.0114955,-208.2958333,4.492434135 +1.3.6.1.4.1.14519.5.2.1.6279.6001.125124219978170516876304987559,111.9984909,-148.5527622,-170.1697015,3.916276383 +1.3.6.1.4.1.14519.5.2.1.6279.6001.125124219978170516876304987559,-70.16527375,-144.9379752,-86.54947655,10.96737987 +1.3.6.1.4.1.14519.5.2.1.6279.6001.126264578931778258890371755354,59.1141461,-158.5772534,-118.037336,6.720277435 +1.3.6.1.4.1.14519.5.2.1.6279.6001.126631670596873065041988320084,44.01647614,-7.920203139,-249.6876651,7.60446251 +1.3.6.1.4.1.14519.5.2.1.6279.6001.126631670596873065041988320084,-96.96022013,48.93585032,-68.03842933,16.97755709 +1.3.6.1.4.1.14519.5.2.1.6279.6001.126704785377921920210612476953,104.7694388,-1.720163357,-204.3343503,4.887779405 +1.3.6.1.4.1.14519.5.2.1.6279.6001.127965161564033605177803085629,97.49024191,28.55020986,-160.5336443,8.842809348 +1.3.6.1.4.1.14519.5.2.1.6279.6001.128023902651233986592378348912,33.83282599,88.41158995,-101.7804814,10.4626083 +1.3.6.1.4.1.14519.5.2.1.6279.6001.128059192202504367870633619224,69.52897275,-24.4152887,-137.8211351,7.035809202 +1.3.6.1.4.1.14519.5.2.1.6279.6001.128059192202504367870633619224,87.16989338,16.38497348,-274.2034889,5.85837472 +1.3.6.1.4.1.14519.5.2.1.6279.6001.128881800399702510818644205032,-99.85852187,37.43405102,-170.4566088,12.3192364 +1.3.6.1.4.1.14519.5.2.1.6279.6001.128881800399702510818644205032,-78.66713641,66.42215895,-168.8716784,13.02514237 +1.3.6.1.4.1.14519.5.2.1.6279.6001.129007566048223160327836686225,-79.18515549,93.97389133,-146.3062085,5.317166147 +1.3.6.1.4.1.14519.5.2.1.6279.6001.129007566048223160327836686225,44.14055176,100.3832603,-139.8410947,6.133374031 +1.3.6.1.4.1.14519.5.2.1.6279.6001.129055977637338639741695800950,-96.46930419,-88.12896199,1131.113774,6.800248866 +1.3.6.1.4.1.14519.5.2.1.6279.6001.129567032250534530765928856531,80.77303275,-29.15344675,-85.55027647,3.611869871 +1.3.6.1.4.1.14519.5.2.1.6279.6001.129982010889624423230394257528,-32.10848635,-30.26543546,-219.5786756,4.978982963 +1.3.6.1.4.1.14519.5.2.1.6279.6001.129982010889624423230394257528,-94.29018316,70.67432635,-253.256346,4.843419619 +1.3.6.1.4.1.14519.5.2.1.6279.6001.129982010889624423230394257528,133.983223,16.50243609,-158.8158943,5.674730826 +1.3.6.1.4.1.14519.5.2.1.6279.6001.129982010889624423230394257528,-16.01619076,50.52094748,-137.5903435,4.907212712 +1.3.6.1.4.1.14519.5.2.1.6279.6001.130036599816889919308975074972,-93.52263469,-194.6344428,-191.5919406,6.134569156 +1.3.6.1.4.1.14519.5.2.1.6279.6001.130438550890816550994739120843,88.23145221,32.80911691,-77.98638617,5.05940652 +1.3.6.1.4.1.14519.5.2.1.6279.6001.130765375502800983459674173881,-107.8443234,9.187612266,-230.5331004,4.897802289 +1.3.6.1.4.1.14519.5.2.1.6279.6001.130765375502800983459674173881,93.0086447,14.09192582,-218.2554877,4.720442281 +1.3.6.1.4.1.14519.5.2.1.6279.6001.131939324905446238286154504249,-91.91936643,87.00392719,1453.777585,14.43967916 +1.3.6.1.4.1.14519.5.2.1.6279.6001.131939324905446238286154504249,-59.72321708,84.839226,1368.370353,9.769564126 +1.3.6.1.4.1.14519.5.2.1.6279.6001.132817748896065918417924920957,74.2822796,57.09404849,-122.279633,6.70661454 +1.3.6.1.4.1.14519.5.2.1.6279.6001.133378195429627807109985347209,-33.32584895,50.4405973,-253.8029719,11.3447991 +1.3.6.1.4.1.14519.5.2.1.6279.6001.133378195429627807109985347209,-57.18592317,78.72513926,-133.6241393,13.65181798 +1.3.6.1.4.1.14519.5.2.1.6279.6001.134370886216012873213579659366,-58.2494371,-98.05475684,-227.604282,4.402746921 +1.3.6.1.4.1.14519.5.2.1.6279.6001.134370886216012873213579659366,-61.47472636,-140.3727694,-59.31736202,9.326384983 +1.3.6.1.4.1.14519.5.2.1.6279.6001.134519406153127654901640638633,-119.4330363,-48.7962957,-223.600473,12.03514375 +1.3.6.1.4.1.14519.5.2.1.6279.6001.134519406153127654901640638633,-35.51923634,40.34791487,-72.19348873,7.183794081 +1.3.6.1.4.1.14519.5.2.1.6279.6001.134996872583497382954024478441,-84.04658072,-42.01536028,-146.8074,7.053719722 +1.3.6.1.4.1.14519.5.2.1.6279.6001.134996872583497382954024478441,-70.32309853,56.20438421,-82.47945755,7.888814398 +1.3.6.1.4.1.14519.5.2.1.6279.6001.134996872583497382954024478441,-86.85384308,15.04157401,-72.32680955,9.25825997 +1.3.6.1.4.1.14519.5.2.1.6279.6001.134996872583497382954024478441,99.63448881,-25.73228594,-199.6153564,6.779556482 +1.3.6.1.4.1.14519.5.2.1.6279.6001.135657246677982059395844827629,-109.1369335,-124.5550327,-105.8852679,14.15074869 +1.3.6.1.4.1.14519.5.2.1.6279.6001.137375498893536422914241295628,-41.39469558,-81.30460432,-238.141021,5.739194256 +1.3.6.1.4.1.14519.5.2.1.6279.6001.137763212752154081977261297097,-103.723003,153.3927131,-465.845305,11.13983165 +1.3.6.1.4.1.14519.5.2.1.6279.6001.137763212752154081977261297097,-80.44626828,183.9384127,-467.8757027,17.69382414 +1.3.6.1.4.1.14519.5.2.1.6279.6001.137773550852881583165286615668,88.82472816,-213.341493,168.2571724,17.74608206 +1.3.6.1.4.1.14519.5.2.1.6279.6001.137773550852881583165286615668,57.17854367,-191.0388202,182.1082155,10.07596577 +1.3.6.1.4.1.14519.5.2.1.6279.6001.138080888843357047811238713686,-120.9836813,177.1711523,-530.9680868,6.921521943 +1.3.6.1.4.1.14519.5.2.1.6279.6001.138813197521718693188313387015,53.27674099,66.29703219,-254.5379718,17.37441249 +1.3.6.1.4.1.14519.5.2.1.6279.6001.138904664700896606480369521124,110.2444818,-225.8683112,-184.3440648,4.937409282 +1.3.6.1.4.1.14519.5.2.1.6279.6001.138904664700896606480369521124,-91.21175481,-159.2195004,-181.0273265,6.310673697 +1.3.6.1.4.1.14519.5.2.1.6279.6001.138904664700896606480369521124,-62.9426951,-91.85733781,-154.3643203,11.68644494 +1.3.6.1.4.1.14519.5.2.1.6279.6001.139258777898746693365877042411,-108.127825,-176.5624058,-192.9633399,8.621579517 +1.3.6.1.4.1.14519.5.2.1.6279.6001.140239815496047437552471323962,97.37614851,-102.5986444,-156.3406252,11.2322969 +1.3.6.1.4.1.14519.5.2.1.6279.6001.140253591510022414496468423138,-108.0334716,59.54355435,-256.4077135,8.437996083 +1.3.6.1.4.1.14519.5.2.1.6279.6001.140253591510022414496468423138,106.6044712,-46.41062225,-181.2522845,5.235910569 +1.3.6.1.4.1.14519.5.2.1.6279.6001.140253591510022414496468423138,-72.97101044,49.02652606,-67.08815205,10.91366167 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141069661700670042960678408762,-101.9672788,248.736321,-739.8746836,6.259551508 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141149610914910880857802344415,-101.0050569,24.07044046,-108.7562821,11.62935127 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141345499716190654505508410197,-73.28217211,46.20627483,-185.2274411,6.022565899 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141430002307216644912805017227,-148.0814493,-165.0240818,-289.0138609,4.716992744 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141430002307216644912805017227,156.4947772,-149.3952143,-280.7709302,6.049591287 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141430002307216644912805017227,106.0772829,-209.9599669,-245.5249483,5.471134731 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141511313712034597336182402384,67.92682992,-24.89511697,-78.85797979,16.59533492 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141511313712034597336182402384,14.27208885,94.14615593,-129.5316415,3.904418305 +1.3.6.1.4.1.14519.5.2.1.6279.6001.141511313712034597336182402384,-71.71034314,-51.03435569,-60.04814098,6.288178284 +1.3.6.1.4.1.14519.5.2.1.6279.6001.142154819868944114554521645782,37.0690484,-156.5575996,959.5810338,7.3033558 +1.3.6.1.4.1.14519.5.2.1.6279.6001.142485715518010940961688015191,53.30850981,-93.95190759,-253.6684413,5.202649246 +1.3.6.1.4.1.14519.5.2.1.6279.6001.142485715518010940961688015191,-87.81822242,-240.437239,-153.8057486,5.901320414 +1.3.6.1.4.1.14519.5.2.1.6279.6001.142485715518010940961688015191,-106.0460276,-192.5404675,-155.2066788,3.888635523 +1.3.6.1.4.1.14519.5.2.1.6279.6001.143412474064515942785157561636,104.9934369,69.39425205,-122.7425876,5.686317218 +1.3.6.1.4.1.14519.5.2.1.6279.6001.143622857676008763729469324839,-76.86981076,-149.5342705,-127.5383708,18.79314938 +1.3.6.1.4.1.14519.5.2.1.6279.6001.144883090372691745980459537053,138.4754244,50.1395894,-311.3558523,16.18466141 +1.3.6.1.4.1.14519.5.2.1.6279.6001.144883090372691745980459537053,116.4755427,-19.95043225,-198.9967643,4.536882084 +1.3.6.1.4.1.14519.5.2.1.6279.6001.145759169833745025756371695397,-75.29240495,21.15278462,-199.692606,6.896207561 +1.3.6.1.4.1.14519.5.2.1.6279.6001.146987333806092287055399155268,91.41858153,-21.56714696,-257.7988959,24.77327957 +1.3.6.1.4.1.14519.5.2.1.6279.6001.147250707071097813243473865421,-10.02312089,95.43468299,-115.5338694,5.498132148 +1.3.6.1.4.1.14519.5.2.1.6279.6001.147250707071097813243473865421,84.43809487,41.64011864,-38.62495844,6.45617819 +1.3.6.1.4.1.14519.5.2.1.6279.6001.147325126373007278009743173696,-57.54166864,-23.88712628,-139.3714857,4.372179266 +1.3.6.1.4.1.14519.5.2.1.6279.6001.147325126373007278009743173696,-10.63664132,53.74246081,-60.36283743,4.223936088 +1.3.6.1.4.1.14519.5.2.1.6279.6001.148229375703208214308676934766,150.9859351,-134.5185043,-328.8678433,6.506928243 +1.3.6.1.4.1.14519.5.2.1.6279.6001.148229375703208214308676934766,74.32647971,-152.5691673,-178.2863299,5.851190527 +1.3.6.1.4.1.14519.5.2.1.6279.6001.148447286464082095534651426689,29.43814722,63.4969422,-196.6709143,5.209168076 +1.3.6.1.4.1.14519.5.2.1.6279.6001.148447286464082095534651426689,-100.5097932,29.32101972,-97.17804233,5.062185148 +1.3.6.1.4.1.14519.5.2.1.6279.6001.148447286464082095534651426689,-119.2839541,-23.22368795,-110.8177161,8.679781517 +1.3.6.1.4.1.14519.5.2.1.6279.6001.148447286464082095534651426689,-89.66859279,34.29905922,-128.5602482,23.48374545 +1.3.6.1.4.1.14519.5.2.1.6279.6001.148447286464082095534651426689,-75.73296957,35.285004,-185.380144,4.181187701 +1.3.6.1.4.1.14519.5.2.1.6279.6001.148447286464082095534651426689,-126.1625656,-0.397681495,-213.3227087,4.762202969 +1.3.6.1.4.1.14519.5.2.1.6279.6001.149041668385192796520281592139,58.51266333,75.79401283,-279.2924241,15.99235031 +1.3.6.1.4.1.14519.5.2.1.6279.6001.149463915556499304732434215056,-78.27791848,-61.2505383,-147.0934292,7.065657802 +1.3.6.1.4.1.14519.5.2.1.6279.6001.149893110752986700464921264055,-71.61430842,20.40693879,-22.78358686,17.34721239 +1.3.6.1.4.1.14519.5.2.1.6279.6001.149893110752986700464921264055,-54.48997947,41.59197595,-41.15781303,3.662351465 +1.3.6.1.4.1.14519.5.2.1.6279.6001.150097650621090951325113116280,38.14941728,1.80271657,-70.90735161,7.047024057 +1.3.6.1.4.1.14519.5.2.1.6279.6001.150684298696437181894923266019,-114.0871448,-229.0544486,-171.1804677,6.346289783 +1.3.6.1.4.1.14519.5.2.1.6279.6001.151764021165118974848436095034,118.0918135,196.2840721,-583.8597146,5.147276862 +1.3.6.1.4.1.14519.5.2.1.6279.6001.151764021165118974848436095034,164.7639846,204.6731739,-692.6948336,4.731109238 +1.3.6.1.4.1.14519.5.2.1.6279.6001.151764021165118974848436095034,-50.50497575,124.8450856,-550.3697203,6.867096006 +1.3.6.1.4.1.14519.5.2.1.6279.6001.151764021165118974848436095034,-64.867508,103.6062633,-620.0340436,3.253443196 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153536305742006952753134773630,112.4969508,-43.72684601,-199.0055588,12.8170256 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153536305742006952753134773630,104.3942446,-9.972464082,-183.3350265,9.843747171 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153536305742006952753134773630,77.50052459,-36.4248749,-144.2257551,6.663525037 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153536305742006952753134773630,-61.84947057,15.77948178,-113.5974073,5.758006712 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153536305742006952753134773630,55.39113668,11.93657847,-63.1551208,13.73620925 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153646219551578201092527860224,-88.25023673,-94.62918889,-169.2121709,6.085343495 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153732973534937692357111055819,90.76420042,13.42579202,-161.1894594,6.901543658 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153732973534937692357111055819,-83.56715969,69.86135283,-119.3583556,16.45094344 +1.3.6.1.4.1.14519.5.2.1.6279.6001.153985109349433321657655488650,-32.44901873,49.38239307,-60.31881666,24.28186352 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154677396354641150280013275227,-57.43923954,131.2325201,-520.3592267,15.48525426 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154703816225841204080664115280,-96.03191383,60.03021853,-227.4858932,4.46945041 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154703816225841204080664115280,-97.15553193,-33.52680778,-220.9102515,4.97609166 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154703816225841204080664115280,-60.48501225,95.33178835,-215.8217846,4.617203255 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154837327827713479309898027966,-64.57029576,-64.34905382,-173.5655722,4.963355643 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154837327827713479309898027966,-73.74416699,36.34720067,-146.6572802,7.125812147 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154837327827713479309898027966,-99.82217711,82.20045747,-160.3782252,4.433065629 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154837327827713479309898027966,114.3373054,-52.42864237,-205.2514715,5.612971703 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154837327827713479309898027966,109.954732,67.37798105,-187.9100946,5.072213606 +1.3.6.1.4.1.14519.5.2.1.6279.6001.154837327827713479309898027966,121.5214666,60.77685417,-226.0365872,4.864259951 +1.3.6.1.4.1.14519.5.2.1.6279.6001.156016499715048493339281864474,-118.0353247,-3.2186828,-165.5819859,6.468256072 +1.3.6.1.4.1.14519.5.2.1.6279.6001.156016499715048493339281864474,-106.8106443,27.8632289,-154.8756784,5.509298811 +1.3.6.1.4.1.14519.5.2.1.6279.6001.156016499715048493339281864474,-76.98391685,81.55006658,-73.46885718,5.43507424 +1.3.6.1.4.1.14519.5.2.1.6279.6001.159996104466052855396410079250,-87.63095911,-25.15269986,-119.2177525,11.4755235 +1.3.6.1.4.1.14519.5.2.1.6279.6001.160124400349792614505500125883,-48.73057191,19.90509306,-97.41971618,7.765435432 +1.3.6.1.4.1.14519.5.2.1.6279.6001.160586340600816116143631200450,-58.64456388,29.43795597,-78.8440923,8.742043676 +1.3.6.1.4.1.14519.5.2.1.6279.6001.161067514225109999586362698069,39.29726212,69.52841861,-210.5451848,9.759961201 +1.3.6.1.4.1.14519.5.2.1.6279.6001.161067514225109999586362698069,-90.0716255,63.02506813,-162.4659197,4.290410287 +1.3.6.1.4.1.14519.5.2.1.6279.6001.161067514225109999586362698069,86.66388385,47.59551127,-94.13090031,4.190282988 +1.3.6.1.4.1.14519.5.2.1.6279.6001.161855583909753609742728521805,-105.4187651,250.8183267,-624.2090569,9.359117475 +1.3.6.1.4.1.14519.5.2.1.6279.6001.161855583909753609742728521805,-53.4094697,239.4490175,-635.4941475,9.376296072 +1.3.6.1.4.1.14519.5.2.1.6279.6001.161855583909753609742728521805,57.83232025,268.8908598,-646.4639133,8.15237846 +1.3.6.1.4.1.14519.5.2.1.6279.6001.161855583909753609742728521805,122.4122106,165.6107352,-683.3834284,7.428430647 +1.3.6.1.4.1.14519.5.2.1.6279.6001.161855583909753609742728521805,36.17618311,271.405521,-690.7770874,9.421061711 +1.3.6.1.4.1.14519.5.2.1.6279.6001.162351539386551708034407968929,-56.24973532,-75.22365785,-183.5827055,4.637327615 +1.3.6.1.4.1.14519.5.2.1.6279.6001.162351539386551708034407968929,116.2254123,-173.5753534,-162.7195162,7.318099839 +1.3.6.1.4.1.14519.5.2.1.6279.6001.162718361851587451505896742103,-25.82864181,-91.1680942,-200.1866058,9.587295623 +1.3.6.1.4.1.14519.5.2.1.6279.6001.162845309248822193437735868939,17.29473579,-80.60955607,-181.4152216,9.562175963 +1.3.6.1.4.1.14519.5.2.1.6279.6001.162901839201654862079549658100,76.6376056,-68.3923344,-220.5859873,6.940547015 +1.3.6.1.4.1.14519.5.2.1.6279.6001.163901773171373940247829492387,-62.4632701,40.61731074,-418.8345544,21.25611171 +1.3.6.1.4.1.14519.5.2.1.6279.6001.163994693532965040247348251579,-126.7777701,-9.907025513,-175.0163727,4.991565057 +1.3.6.1.4.1.14519.5.2.1.6279.6001.164988920331211858091402361989,-89.50837321,-219.1764409,-204.1231254,6.908606934 +1.3.6.1.4.1.14519.5.2.1.6279.6001.167237290696350215427953159586,100.6235685,64.75681577,-211.9604224,10.57235285 +1.3.6.1.4.1.14519.5.2.1.6279.6001.167237290696350215427953159586,-87.67439109,-12.69365522,-120.9322012,20.4841094 +1.3.6.1.4.1.14519.5.2.1.6279.6001.167661207884826429102690781600,38.16063294,-132.2282842,-198.8002432,8.833712029 +1.3.6.1.4.1.14519.5.2.1.6279.6001.167661207884826429102690781600,97.89985608,-130.7686347,-156.6501864,12.56457376 +1.3.6.1.4.1.14519.5.2.1.6279.6001.167919147233131417984739058859,-27.95756965,53.79011265,-10.40898875,6.250647306 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168037818448885856452592057286,-109.7517763,-131.6996881,-216.9568763,6.367212147 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168605638657404145360275453085,112.4519283,-57.33842196,-141.2823189,4.775243237 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168737928729363683423228050295,-51.88965008,97.1144842,-115.6104374,16.33256347 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168833925301530155818375859047,-106.0815728,-56.18920866,-179.184765,7.880768174 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168833925301530155818375859047,95.99267245,75.81091807,-193.0071743,4.143870035 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168833925301530155818375859047,-106.6074186,13.30759394,-194.0673055,5.108290964 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168833925301530155818375859047,141.2692664,-4.147874764,-224.0220092,4.66199491 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168833925301530155818375859047,112.662387,-63.4988029,-238.1679455,7.215827227 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168985655485163461062675655739,84.48441941,182.3577437,-554.7284037,6.267755429 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168985655485163461062675655739,-69.63476394,228.9381557,-603.0374367,4.397986174 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168985655485163461062675655739,-94.5953571,177.6498386,-528.0518133,5.670704388 +1.3.6.1.4.1.14519.5.2.1.6279.6001.168985655485163461062675655739,-123.4290726,101.1391192,-548.1391139,3.879687831 +1.3.6.1.4.1.14519.5.2.1.6279.6001.169128136262002764211589185953,52.1565392,12.69280585,-35.912123,21.47561299 +1.3.6.1.4.1.14519.5.2.1.6279.6001.169128136262002764211589185953,126.454255,21.26837852,-130.8084904,6.661547445 +1.3.6.1.4.1.14519.5.2.1.6279.6001.169128136262002764211589185953,-76.00545815,38.00370105,-242.558351,6.463900827 +1.3.6.1.4.1.14519.5.2.1.6279.6001.169128136262002764211589185953,76.83900581,-32.77783779,-80.06591768,5.233376939 +1.3.6.1.4.1.14519.5.2.1.6279.6001.169128136262002764211589185953,-51.47470408,53.59606277,-83.70758676,4.500244204 +1.3.6.1.4.1.14519.5.2.1.6279.6001.169128136262002764211589185953,-27.09350963,30.33615286,-73.99322368,3.813182598 +1.3.6.1.4.1.14519.5.2.1.6279.6001.169128136262002764211589185953,162.1323087,-7.627735827,-214.2993486,4.994599024 +1.3.6.1.4.1.14519.5.2.1.6279.6001.170052181746004939527661217512,-107.4682246,-16.00795837,-124.3814417,3.851212212 +1.3.6.1.4.1.14519.5.2.1.6279.6001.170052181746004939527661217512,-55.79826686,27.52331317,-54.77526251,6.536524171 +1.3.6.1.4.1.14519.5.2.1.6279.6001.170706757615202213033480003264,72.28670656,76.90023946,-190.4589276,21.45372882 +1.3.6.1.4.1.14519.5.2.1.6279.6001.170706757615202213033480003264,23.49083071,-47.63390567,-172.2791417,8.785832848 +1.3.6.1.4.1.14519.5.2.1.6279.6001.170706757615202213033480003264,-47.40284557,-30.171209,-169.6239465,12.82311988 +1.3.6.1.4.1.14519.5.2.1.6279.6001.170921541362033046216100409521,-29.39234236,38.41896008,-51.14223,4.537177872 +1.3.6.1.4.1.14519.5.2.1.6279.6001.170921541362033046216100409521,-33.17172203,24.21759562,-20.51608372,5.983490254 +1.3.6.1.4.1.14519.5.2.1.6279.6001.171177995014336749670107905732,110.4185895,85.06714826,-175.3696326,5.808348361 +1.3.6.1.4.1.14519.5.2.1.6279.6001.171667800241622018839592854574,43.88129782,64.17904949,-232.5899014,5.925757611 +1.3.6.1.4.1.14519.5.2.1.6279.6001.172243743899615313644757844726,-115.7223995,35.61826614,-175.4716358,10.03093365 +1.3.6.1.4.1.14519.5.2.1.6279.6001.172243743899615313644757844726,-136.7078457,62.06070501,-99.27715843,18.38478817 +1.3.6.1.4.1.14519.5.2.1.6279.6001.172573195301625265149778785969,-27.97722814,-83.92404684,-269.020919,6.281626529 +1.3.6.1.4.1.14519.5.2.1.6279.6001.172573195301625265149778785969,155.3413899,-150.8678039,-343.484454,5.229396767 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173101104804533997398137418032,-126.2838871,4.683453379,-155.2960218,4.803214362 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173101104804533997398137418032,104.8509634,69.34115982,-148.9084074,4.326877582 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173101104804533997398137418032,117.5353489,28.71672637,-121.227376,5.235946908 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173106154739244262091404659845,-51.04382869,75.20020777,-101.5526036,14.83693973 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173106154739244262091404659845,-80.27882566,76.47337026,-108.0625,4.844157662 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173106154739244262091404659845,-116.2874457,21.16102581,-124.619925,10.88839157 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173106154739244262091404659845,-111.1930507,-1.264504521,-138.6984478,17.39699158 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173106154739244262091404659845,-92.25910919,-42.63590904,-145.6351351,4.595709259 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173106154739244262091404659845,73.77454834,37.27831567,-118.3077904,8.648347161 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173556680294801532247454313511,50.33716697,63.51366238,-75.98942194,4.064058796 +1.3.6.1.4.1.14519.5.2.1.6279.6001.173931884906244951746140865701,76.49433466,88.15768761,-193.1555684,19.0442187 +1.3.6.1.4.1.14519.5.2.1.6279.6001.174168737938619557573021395302,109.4990234,93.69210525,-269.0638976,5.832577347 +1.3.6.1.4.1.14519.5.2.1.6279.6001.174449669706458092793093760291,104.0876202,25.52198446,-140.171147,16.04323095 +1.3.6.1.4.1.14519.5.2.1.6279.6001.174692377730646477496286081479,-58.95432995,51.94459996,-59.38552081,9.494854536 +1.3.6.1.4.1.14519.5.2.1.6279.6001.174907798609768549012640380786,-43.91205948,-43.24151644,-141.6973546,9.147221174 +1.3.6.1.4.1.14519.5.2.1.6279.6001.174907798609768549012640380786,-36.51308198,-65.21501284,-124.4263249,14.61583872 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,107.981511,-4.36735685,-124.106848,4.672138736 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,71.12211478,103.5762892,-148.4515459,7.04604765 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,49.9464803,39.21748433,-239.8346609,12.38102253 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,72.37076198,83.67370356,-244.3847883,6.33705611 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,-35.36902968,83.72542652,-150.2529177,7.025817316 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,-41.69008438,-7.144610815,-158.7180743,7.670739872 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,-33.72450557,-17.3035396,-103.0529877,4.517226352 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,-10.6098601,61.08200309,-166.5353176,4.84811308 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,-33.0757396,103.021741,-192.6359693,6.450730852 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,-53.33179978,96.45855774,-226.2565169,10.98489943 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,-60.85305037,-38.91766158,-205.682724,4.672156227 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176030616406569931557298712518,109.4598251,-34.52836499,-188.547619,3.939481265 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176638348958425792989125209419,97.58296617,41.96482868,-79.81459274,3.423341719 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176638348958425792989125209419,70.09772041,-23.4790975,-142.6707459,4.216156288 +1.3.6.1.4.1.14519.5.2.1.6279.6001.176869045992276345870480098568,-46.82137782,80.98240214,-109.2275388,5.562150111 +1.3.6.1.4.1.14519.5.2.1.6279.6001.177086402277715068525592995222,-57.06218821,-2.42519767,-35.57766455,8.868454579 +1.3.6.1.4.1.14519.5.2.1.6279.6001.177086402277715068525592995222,-66.47429649,58.43968307,-109.3643906,25.87269662 +1.3.6.1.4.1.14519.5.2.1.6279.6001.177252583002664900748714851615,56.00355828,-42.3898391,-97.24818247,8.811296392 +1.3.6.1.4.1.14519.5.2.1.6279.6001.177685820605315926524514718990,-75.07441798,80.77730228,-125.3339445,8.315884851 +1.3.6.1.4.1.14519.5.2.1.6279.6001.177785764461425908755977367558,-43.54413253,-50.15803892,-146.6903955,3.975397996 +1.3.6.1.4.1.14519.5.2.1.6279.6001.178391668569567816549737454720,94.32108066,-21.41829214,-154.6986815,5.806583725 +1.3.6.1.4.1.14519.5.2.1.6279.6001.178680586845223339579041794709,65.1376641,43.75788979,-236.4710746,8.566001555 +1.3.6.1.4.1.14519.5.2.1.6279.6001.179049373636438705059720603192,56.20840547,86.34341278,-115.8675792,23.35064438 +1.3.6.1.4.1.14519.5.2.1.6279.6001.179162671133894061547290922949,134.4219361,86.57701746,-762.5944358,7.401764599 +1.3.6.1.4.1.14519.5.2.1.6279.6001.179162671133894061547290922949,-127.6916352,110.5885962,-739.9738785,5.744966449 +1.3.6.1.4.1.14519.5.2.1.6279.6001.179162671133894061547290922949,-50.33006209,88.30887267,-677.332466,3.439486702 +1.3.6.1.4.1.14519.5.2.1.6279.6001.179209990684978588019929720099,-78.50974455,-162.584138,-64.40943048,6.929649846 +1.3.6.1.4.1.14519.5.2.1.6279.6001.179209990684978588019929720099,82.60358264,-216.3818316,-151.0002647,5.22596183 +1.3.6.1.4.1.14519.5.2.1.6279.6001.179730018513720561213088132029,-100.6082859,94.59993686,-263.9090942,5.279110868 +1.3.6.1.4.1.14519.5.2.1.6279.6001.179943248049071805421192715219,138.8853876,-36.17927643,-198.6659593,4.895529998 +1.3.6.1.4.1.14519.5.2.1.6279.6001.182192086929819295877506541021,56.58885682,-67.46153204,-77.34666348,3.270466947 +1.3.6.1.4.1.14519.5.2.1.6279.6001.182192086929819295877506541021,38.83601126,104.8736883,-72.04062367,6.409813214 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183184435049555024219115904825,-71.70939018,-47.08972918,-218.4168486,4.506689862 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183184435049555024219115904825,34.65292887,18.54173,-79.08423032,4.812692889 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183843376225716802567192412456,77.43647945,22.21703609,-194.8565238,8.875835636 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183843376225716802567192412456,20.57233382,93.68779093,-181.0413165,6.974134428 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183843376225716802567192412456,53.04979758,5.774405018,-159.5827607,6.49900752 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183843376225716802567192412456,25.46898071,-15.96877128,-116.7001729,7.615286406 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183924380327950237519832859527,-82.49078423,31.00113485,-213.6818417,14.15706867 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183924380327950237519832859527,-36.36744189,-41.8952304,-147.4127015,17.15800497 +1.3.6.1.4.1.14519.5.2.1.6279.6001.183982839679953938397312236359,-46.59430055,64.33901696,-149.7871177,24.78201705 +1.3.6.1.4.1.14519.5.2.1.6279.6001.184412674007117333405073397832,-103.4902087,-63.80000006,-222.2229424,7.35278351 +1.3.6.1.4.1.14519.5.2.1.6279.6001.185154482385982570363528682299,-43.90685095,-74.65024942,-213.2556584,11.04800959 +1.3.6.1.4.1.14519.5.2.1.6279.6001.185154482385982570363528682299,51.89001754,-106.6204144,-180.5559271,5.808811273 +1.3.6.1.4.1.14519.5.2.1.6279.6001.185226274332527104841463955058,115.9854895,9.847305538,-210.8941679,4.450273187 +1.3.6.1.4.1.14519.5.2.1.6279.6001.185226274332527104841463955058,-114.9272123,-40.83007173,-167.9105444,4.049334725 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187108608022306504546286626125,-64.79512505,-35.55654393,-65.40505764,11.47132343 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187108608022306504546286626125,108.2379848,-23.00591217,-75.13184405,9.346613641 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187108608022306504546286626125,-50.87414525,61.48907516,-138.6793414,7.822901747 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187108608022306504546286626125,109.1514742,-27.15936266,-147.1130632,6.265028453 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187108608022306504546286626125,49.1056976,58.58649113,-185.398676,5.072155337 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187451715205085403623595258748,67.19434305,63.99802245,-246.1106238,13.05335657 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187451715205085403623595258748,94.63511683,-17.37205941,-204.3961269,17.75323185 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187694838527128312070807533473,91.8066639,-228.1486839,-206.7306038,15.48070961 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187966156856911682643615997798,70.12569801,-37.51841728,-145.8086969,4.073945715 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187966156856911682643615997798,-74.95237164,46.90988268,-285.5115615,4.277166591 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187966156856911682643615997798,110.1006468,-57.64062374,-243.1164102,5.251013012 +1.3.6.1.4.1.14519.5.2.1.6279.6001.187966156856911682643615997798,-50.86871032,86.60666104,-145.7656656,9.772734741 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188059920088313909273628445208,-110.5020624,84.49831867,1506.369708,5.304621719 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188059920088313909273628445208,-49.20548545,92.92857185,1478.923267,5.719422603 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188209889686363159853715266493,-81.59738505,57.28823522,-133.479575,5.617921172 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188209889686363159853715266493,28.62300902,41.00929115,-155.4889456,5.88395182 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188265424231150847356515802868,-60.49431739,70.54622166,-58.67519437,8.70905255 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188376349804761988217597754952,-55.18838267,174.3893763,-405.7348248,10.93827513 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188376349804761988217597754952,-100.5100772,179.7605127,-498.510449,5.357746933 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188376349804761988217597754952,-87.27597336,163.0151729,-456.4501041,5.26273061 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188376349804761988217597754952,79.03555701,209.8179057,-465.0624392,6.305539247 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188385286346390202873004762827,-103.0536882,-65.26580979,-118.3045242,4.286161529 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188619674701053082195613114069,-95.29757514,189.2305976,-500.4365795,7.794843882 +1.3.6.1.4.1.14519.5.2.1.6279.6001.188619674701053082195613114069,-106.9376643,142.6213881,-553.7500925,11.47520609 +1.3.6.1.4.1.14519.5.2.1.6279.6001.189483585244687808087477024767,-83.12026192,91.61578275,-320.3531873,7.90492271 +1.3.6.1.4.1.14519.5.2.1.6279.6001.189483585244687808087477024767,107.5055367,71.93790105,-278.241906,4.565784214 +1.3.6.1.4.1.14519.5.2.1.6279.6001.190298296009658115773239776160,-47.59725933,38.35581629,-259.5247127,6.704958329 +1.3.6.1.4.1.14519.5.2.1.6279.6001.191266041369462391833537519639,-96.19600129,-96.65249765,-324.2845499,4.502295592 +1.3.6.1.4.1.14519.5.2.1.6279.6001.192256506776434538421891524301,119.4417648,-124.5798429,-183.5276495,5.168489458 +1.3.6.1.4.1.14519.5.2.1.6279.6001.192256506776434538421891524301,-59.74501321,-186.7368963,-117.5250438,5.261510023 +1.3.6.1.4.1.14519.5.2.1.6279.6001.192256506776434538421891524301,99.55427087,-196.7161331,-96.1010188,5.831328901 +1.3.6.1.4.1.14519.5.2.1.6279.6001.192256506776434538421891524301,-29.1700199,-133.1657313,-41.27737383,5.842982096 +1.3.6.1.4.1.14519.5.2.1.6279.6001.192256506776434538421891524301,25.20531741,-125.3875332,-38.98208822,4.538549476 +1.3.6.1.4.1.14519.5.2.1.6279.6001.192419869605596446455526220766,125.72278,-65.38741378,-155.8430296,5.463268111 +1.3.6.1.4.1.14519.5.2.1.6279.6001.193808128386712859512130599234,-47.71460531,-32.47540199,-77.44002704,7.141617843 +1.3.6.1.4.1.14519.5.2.1.6279.6001.193964947698259739624715468431,16.03531414,67.91292767,-31.29420185,3.887997704 +1.3.6.1.4.1.14519.5.2.1.6279.6001.194246472548954252250399902051,-32.75374084,8.777235784,-111.7798254,6.975190342 +1.3.6.1.4.1.14519.5.2.1.6279.6001.194440094986948071643661798326,56.23980222,-92.28982952,-277.0985595,8.982986958 +1.3.6.1.4.1.14519.5.2.1.6279.6001.194488534645348916700259325236,121.1740107,74.57004217,-168.1036947,4.92742239 +1.3.6.1.4.1.14519.5.2.1.6279.6001.194488534645348916700259325236,96.66859593,37.64844408,-58.80225858,5.866256959 +1.3.6.1.4.1.14519.5.2.1.6279.6001.194632613233275988184244485809,-47.89877032,-10.22492024,-96.1136025,20.15998367 +1.3.6.1.4.1.14519.5.2.1.6279.6001.194766721609772924944646251928,-106.8617398,9.048151896,-122.3496855,23.68811013 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,105.0927476,-12.11034538,-163.8563959,6.67566416 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,-65.24188146,-2.009534031,-154.5988093,5.611381537 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,95.50326213,50.83309312,-98.17735226,9.697334131 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,-44.35081815,-2.878997069,-80.20624421,6.734930528 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,-36.79299198,30.7687084,-78.63004564,7.21357337 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,114.1812202,39.58850481,-77.01551257,6.554327379 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,101.203838,25.22046529,-133.8132453,6.269450237 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,99.7584658,42.83369719,-142.7906833,6.39203287 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195557219224169985110295082004,76.62464946,-2.190466163,-170.1541606,5.512269698 +1.3.6.1.4.1.14519.5.2.1.6279.6001.195913706607582347421429908613,-106.3585085,-51.59739866,-166.4583333,4.311583799 +1.3.6.1.4.1.14519.5.2.1.6279.6001.196251645377731223510086726530,70.27851491,-52.13332395,-63.60156718,5.295986982 +1.3.6.1.4.1.14519.5.2.1.6279.6001.197063290812663596858124411210,-96.52133314,-61.02297366,-204.6272521,5.343956496 +1.3.6.1.4.1.14519.5.2.1.6279.6001.197063290812663596858124411210,-114.0292501,36.09563198,-281.6690246,7.754485276 +1.3.6.1.4.1.14519.5.2.1.6279.6001.197063290812663596858124411210,92.36574726,18.31481554,-84.53565705,9.642120967 +1.3.6.1.4.1.14519.5.2.1.6279.6001.197063290812663596858124411210,-71.01906551,-37.76752972,-133.5475427,4.93642793 +1.3.6.1.4.1.14519.5.2.1.6279.6001.197063290812663596858124411210,-85.4417408,-50.32069009,-177.4651732,6.32263359 +1.3.6.1.4.1.14519.5.2.1.6279.6001.198016798894102791158686961192,-147.9529673,-164.1694792,-273.4342411,5.898208305 +1.3.6.1.4.1.14519.5.2.1.6279.6001.198698492013538481395497694975,59.25687577,-34.72292702,-134.8379138,13.13641553 +1.3.6.1.4.1.14519.5.2.1.6279.6001.198698492013538481395497694975,78.29576032,-16.92867765,-163.9475346,19.34841823 +1.3.6.1.4.1.14519.5.2.1.6279.6001.198698492013538481395497694975,64.42984573,70.38559073,-216.6686873,20.52475616 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199171741859530285887752432478,-72.92501601,196.8030244,-528.6920833,5.19625288 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199171741859530285887752432478,101.5197074,172.2746015,-530.7701627,4.93269156 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199220738144407033276946096708,-109.4034773,247.5094285,-743.5538024,4.872378109 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199261544234308780356714831537,-87.98029816,-170.435691,-67.39794153,8.260459929 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199282854229880908602362094937,-47.24454656,-63.24393196,-190.0773363,5.109990357 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199670099218798685977406484591,73.10057831,22.12013499,-219.3862128,8.10334672 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199670099218798685977406484591,-93.90331541,-59.88212568,-215.2837448,3.688042585 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199975006921901879512837687266,-75.16079292,-47.10523005,-72.33869735,7.966642163 +1.3.6.1.4.1.14519.5.2.1.6279.6001.199975006921901879512837687266,54.1798167,-21.12720651,-50.60676129,6.097459329 +1.3.6.1.4.1.14519.5.2.1.6279.6001.200513183558872708878454294671,-80.78132388,-73.57508218,-138.4810135,5.569575919 +1.3.6.1.4.1.14519.5.2.1.6279.6001.200725988589959521302320481687,88.8734675,-97.92722827,-169.2196164,8.181004159 +1.3.6.1.4.1.14519.5.2.1.6279.6001.200725988589959521302320481687,66.31287987,-135.6997369,-42.75815989,8.824039277 +1.3.6.1.4.1.14519.5.2.1.6279.6001.200841000324240313648595016964,-109.1802026,70.15936218,-107.6228042,8.391787919 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,-143.0264631,-23.42697971,-178.5216354,3.431283808 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,-126.8884017,-63.73510063,-197.045997,4.458681116 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,-152.5091001,39.24279023,-264.9237449,4.779476584 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,-148.8501076,-46.2823898,-263.4666085,4.298602389 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,92.34849452,-28.14501624,-98.30724966,4.308746964 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,118.3886326,-42.68235292,-247.8789499,4.207361086 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,122.7403079,-3.364329503,-222.3942635,3.341564099 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,45.14208761,52.2404132,-262.7505741,3.934638255 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202187810895588720702176009630,7.723810414,-21.74870974,-89.81531988,3.744971475 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202283133206014258077705539227,-54.06467496,63.55851124,-170.4688534,15.58144665 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202283133206014258077705539227,-14.59718229,21.69665563,-82.20115147,8.256573426 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202283133206014258077705539227,-110.5195873,13.24881288,-109.2784245,7.086777345 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202283133206014258077705539227,31.29063088,57.77039933,-115.2752891,6.989971578 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202464973819273687476049035824,83.03445343,88.63298054,-232.5065737,5.509268361 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202643836890896697853521610450,-82.98918511,8.840855446,-85.89186517,8.604619037 +1.3.6.1.4.1.14519.5.2.1.6279.6001.202811684116768680758082619196,-83.15808281,-21.67899694,-97.00437642,18.7832325 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204287915902811325371247860532,41.69536625,78.36878482,-127.8408681,5.235615798 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204287915902811325371247860532,15.42130565,59.032951,-209.1954365,5.012771482 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204303454658845815034433453512,-142.3151977,-174.2206828,788.1709415,5.789332994 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204303454658845815034433453512,-130.8896371,-160.5028157,851.7759097,13.16123654 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204303454658845815034433453512,-72.30182365,-283.8343361,850.6550314,5.520606059 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204303454658845815034433453512,-49.26664508,-129.4859131,995.4654562,5.264434857 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204303454658845815034433453512,-42.78758381,-122.6339512,988.0600257,5.896251459 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204566802718283633558802774757,57.42043777,33.20420122,-61.85022853,13.81977981 +1.3.6.1.4.1.14519.5.2.1.6279.6001.204802250386343794613980417281,99.82868773,-146.1245536,-169.5334558,18.82522399 +1.3.6.1.4.1.14519.5.2.1.6279.6001.205523326998654833765855998037,92.68685919,43.57438553,-197.5473589,4.631274716 +1.3.6.1.4.1.14519.5.2.1.6279.6001.205523326998654833765855998037,116.8170346,-12.84537683,-193.306,4.2912149 +1.3.6.1.4.1.14519.5.2.1.6279.6001.205993750485568250373835565680,37.79855693,3.300009869,-41.39558427,14.13656827 +1.3.6.1.4.1.14519.5.2.1.6279.6001.205993750485568250373835565680,36.72219758,43.30048703,-25.14203011,6.259110412 +1.3.6.1.4.1.14519.5.2.1.6279.6001.205993750485568250373835565680,28.63381923,39.2872431,-22.76116367,4.389292516 +1.3.6.1.4.1.14519.5.2.1.6279.6001.206028343897359374907954580114,84.69521504,-95.11232169,-214.6123866,5.233283378 +1.3.6.1.4.1.14519.5.2.1.6279.6001.206028343897359374907954580114,-69.81151619,-69.68184275,-166.6322555,12.6270362 +1.3.6.1.4.1.14519.5.2.1.6279.6001.206028343897359374907954580114,75.71266555,12.58298968,-135.2999907,9.90073721 +1.3.6.1.4.1.14519.5.2.1.6279.6001.206097113343059612247503064658,67.24659457,-122.5524971,-155.5200459,20.41212558 +1.3.6.1.4.1.14519.5.2.1.6279.6001.206539885154775002929031534291,138.6417422,-118.7654544,-60.25410033,7.748454694 +1.3.6.1.4.1.14519.5.2.1.6279.6001.206539885154775002929031534291,145.6040538,-138.2558392,-13.4247001,5.071226824 +1.3.6.1.4.1.14519.5.2.1.6279.6001.207341668080525761926965850679,-98.0171699,-167.4527522,-188.9153442,4.392206805 +1.3.6.1.4.1.14519.5.2.1.6279.6001.208511362832825683639135205368,-74.87296853,35.11080854,-36.54442722,16.2317489 +1.3.6.1.4.1.14519.5.2.1.6279.6001.208511362832825683639135205368,-2.839756137,15.49133911,-42.88411974,11.0165788 +1.3.6.1.4.1.14519.5.2.1.6279.6001.208737629504245244513001631764,-8.993304035,40.54099463,-99.81467502,13.53288259 +1.3.6.1.4.1.14519.5.2.1.6279.6001.208737629504245244513001631764,98.19037939,37.78561001,-70.46713787,14.88143912 +1.3.6.1.4.1.14519.5.2.1.6279.6001.208737629504245244513001631764,-75.66575168,-51.48553141,-93.67729466,10.20083329 +1.3.6.1.4.1.14519.5.2.1.6279.6001.211051626197585058967163339846,33.61792724,-158.8860009,-129.4362152,16.02309072 +1.3.6.1.4.1.14519.5.2.1.6279.6001.211956804948320236390242845468,51.99987168,155.9191741,-554.1126447,8.793209067 +1.3.6.1.4.1.14519.5.2.1.6279.6001.211956804948320236390242845468,47.05520894,170.3943031,-527.5470707,19.84919656 +1.3.6.1.4.1.14519.5.2.1.6279.6001.211956804948320236390242845468,-64.76411531,222.4275025,-520.0442896,10.07288389 +1.3.6.1.4.1.14519.5.2.1.6279.6001.212346425055214308006918165305,68.29342162,71.32670944,-224.2446094,9.002203924 +1.3.6.1.4.1.14519.5.2.1.6279.6001.212608679077007918190529579976,-51.53790763,20.10350979,-85.16298794,4.515921778 +1.3.6.1.4.1.14519.5.2.1.6279.6001.212608679077007918190529579976,-61.83942051,-49.49988002,-178.135775,8.196011407 +1.3.6.1.4.1.14519.5.2.1.6279.6001.213140617640021803112060161074,54.57771668,137.2790888,-626.5921144,13.96263215 +1.3.6.1.4.1.14519.5.2.1.6279.6001.213140617640021803112060161074,109.4341558,229.6163407,-722.0838667,6.401625027 +1.3.6.1.4.1.14519.5.2.1.6279.6001.213140617640021803112060161074,96.37514949,213.0800475,-613.5363606,4.784886899 +1.3.6.1.4.1.14519.5.2.1.6279.6001.213854687290736562463866711534,115.3674027,-179.8695338,-281.6307649,10.63786384 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214252223927572015414741039150,70.30866198,-48.69738576,-147.2003939,7.862425517 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214252223927572015414741039150,114.9945322,36.94296309,-143.6292513,7.841667885 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214252223927572015414741039150,-42.47036236,9.63938615,-67.76005548,11.16379761 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214800939017429618305208626314,82.56241585,-80.96717899,-282.9247385,6.709234609 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214800939017429618305208626314,131.4562868,-162.3474849,-273.1433425,5.275112281 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214800939017429618305208626314,-114.3661632,-92.46651501,-245.4278184,5.860880895 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214800939017429618305208626314,-39.56900888,-71.945242,-218.7775309,6.364695594 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214800939017429618305208626314,-93.71921035,-88.23701668,-211.0024986,4.276776035 +1.3.6.1.4.1.14519.5.2.1.6279.6001.214800939017429618305208626314,-64.9992958,-71.02785858,-185.1208959,7.28852581 +1.3.6.1.4.1.14519.5.2.1.6279.6001.215104063467523905369326175410,-100.8609071,15.28935029,-182.4603409,4.991628467 +1.3.6.1.4.1.14519.5.2.1.6279.6001.215640837032688688030770057224,78.46553368,44.03628787,-86.86858612,5.696771445 +1.3.6.1.4.1.14519.5.2.1.6279.6001.215640837032688688030770057224,96.27646513,-23.55686252,-107.3733613,7.477744916 +1.3.6.1.4.1.14519.5.2.1.6279.6001.215640837032688688030770057224,72.19052901,33.77282956,-115.4497687,6.569503668 +1.3.6.1.4.1.14519.5.2.1.6279.6001.215640837032688688030770057224,63.78794006,-77.60063281,-143.2981373,4.983856442 +1.3.6.1.4.1.14519.5.2.1.6279.6001.215640837032688688030770057224,87.57932392,9.783753119,-100.9324878,9.088191083 +1.3.6.1.4.1.14519.5.2.1.6279.6001.215640837032688688030770057224,-86.83903189,51.57119596,-143.7114972,5.181246583 +1.3.6.1.4.1.14519.5.2.1.6279.6001.215785045378334625097907422785,-24.80602777,185.3534746,-545.8419781,4.355305398 +1.3.6.1.4.1.14519.5.2.1.6279.6001.216252660192313507027754194207,-39.61237465,146.7966702,-538.8806413,4.803859114 +1.3.6.1.4.1.14519.5.2.1.6279.6001.216252660192313507027754194207,-31.09781851,222.3105282,-512.3187294,6.773419875 +1.3.6.1.4.1.14519.5.2.1.6279.6001.216882370221919561230873289517,-86.68832064,-17.11866797,-52.87589103,3.661014906 +1.3.6.1.4.1.14519.5.2.1.6279.6001.216882370221919561230873289517,-89.52725087,-5.104797566,-81.96650621,3.93841182 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217589936421986638139451480826,141.3149273,23.48811579,-242.6787116,6.375976946 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217589936421986638139451480826,144.7977422,62.86369442,-241.1731829,5.305254374 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217589936421986638139451480826,86.35325899,114.6358836,-175.477931,5.961135993 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217589936421986638139451480826,-44.38911733,21.65032772,-36.19094841,6.012013105 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217697417596902141600884006982,-81.21264213,38.50543905,-161.7782189,4.512190166 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217697417596902141600884006982,112.2326686,9.722890567,-197.4920729,3.899770457 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217697417596902141600884006982,76.4070202,7.959447114,-142.9888983,4.096360477 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217754016294471278921686508169,-118.7456191,124.8523546,-568.68286,4.129168997 +1.3.6.1.4.1.14519.5.2.1.6279.6001.217955041973656886482758642958,-44.58942915,56.04434567,-51.61694575,19.91668687 +1.3.6.1.4.1.14519.5.2.1.6279.6001.218476624578721885561483687176,-115.6455979,-38.82732218,-109.6419395,5.738267951 +1.3.6.1.4.1.14519.5.2.1.6279.6001.218476624578721885561483687176,96.88732872,1.546082872,-74.21168209,5.063187041 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219087313261026510628926082729,-65.48553737,197.2581037,-468.5690163,11.10051888 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219087313261026510628926082729,-61.37799447,223.9639647,-633.847977,4.813145858 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219254430927834326484477690403,147.9184452,-139.5398999,-289.3042952,5.371554924 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219254430927834326484477690403,-87.43359068,-127.5413444,-262.5572502,4.82415072 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219349715895470349269596532320,-69.25132002,17.49622889,-201.3042433,10.37870953 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,123.0244827,85.5951695,-215.1788956,12.13515303 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,96.41325044,92.61357881,-224.1152532,7.879370273 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,127.5885954,44.77026048,-188.8742426,6.436398619 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,71.66050173,94.49446209,-180.8208013,5.63626438 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,-7.542193327,60.29166866,-240.9495399,6.01136994 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,-33.96725483,114.1284149,-195.0651902,7.747960481 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,-49.51411518,-13.58231496,-136.2125638,8.244882361 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,66.14617331,36.39801261,-72.80318185,9.698623364 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219428004988664846407984058588,79.179807,73.32770576,-167.728431,6.102801475 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219618492426142913407827034169,-102.3832256,-96.39522474,-138.8622759,25.41540526 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219618492426142913407827034169,52.60612067,51.0756965,-206.5,4.960423434 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219909753224298157409438012179,118.3234759,20.24704104,-155.2786841,13.84883567 +1.3.6.1.4.1.14519.5.2.1.6279.6001.219909753224298157409438012179,99.32939332,66.55314921,-92.09688887,6.673547135 +1.3.6.1.4.1.14519.5.2.1.6279.6001.220596530836092324070084384692,-84.393952,246.9323285,-508.1886279,23.57156231 +1.3.6.1.4.1.14519.5.2.1.6279.6001.221017801605543296514746423389,75.47571744,71.69373908,-97.73229784,7.389997194 +1.3.6.1.4.1.14519.5.2.1.6279.6001.221017801605543296514746423389,56.58729736,69.68454035,-109.1245027,9.025365556 +1.3.6.1.4.1.14519.5.2.1.6279.6001.222052723822248889877676736332,-64.40112214,7.841496444,-75.95221202,10.7221465 +1.3.6.1.4.1.14519.5.2.1.6279.6001.222052723822248889877676736332,51.29471463,12.62769201,-44.86446771,4.761221031 +1.3.6.1.4.1.14519.5.2.1.6279.6001.224465398054769500989828256685,-55.52821414,245.4376219,-758.1325898,13.84309944 +1.3.6.1.4.1.14519.5.2.1.6279.6001.224465398054769500989828256685,-116.4604191,230.1689873,-747.8614134,5.388364876 +1.3.6.1.4.1.14519.5.2.1.6279.6001.224465398054769500989828256685,12.73732548,216.6918398,-790.0747986,6.868316403 +1.3.6.1.4.1.14519.5.2.1.6279.6001.224465398054769500989828256685,-139.713455,186.4162971,-789.1416745,8.743609647 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225154811831720426832024114593,101.948344,-58.63218351,-205.2437531,5.619534834 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225154811831720426832024114593,48.57179203,118.4387376,-249.4687169,6.548067679 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225154811831720426832024114593,75.63291901,111.2621798,-182.1446944,6.279521551 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225227615446398900698431118292,38.17558461,76.65811776,-217.8804577,13.20481203 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225227615446398900698431118292,111.5397212,26.17387565,-216.2738565,4.438915742 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225227615446398900698431118292,97.6759868,59.95440744,-182.4642658,4.586830375 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225227615446398900698431118292,88.64532883,37.12480761,-129.2822334,5.315639734 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225515255547637437801620523312,28.82164325,-67.50284479,-119.4939135,14.74449324 +1.3.6.1.4.1.14519.5.2.1.6279.6001.225515255547637437801620523312,86.34284609,-24.24169612,-116.2560573,6.542124227 +1.3.6.1.4.1.14519.5.2.1.6279.6001.226152078193253087875725735761,-88.87929578,252.9672218,-542.2144094,9.584711922 +1.3.6.1.4.1.14519.5.2.1.6279.6001.226383054119800793308721198594,-91.77607345,193.6749754,-636.6738832,15.67293211 +1.3.6.1.4.1.14519.5.2.1.6279.6001.226456162308124493341905600418,89.75123428,33.49305253,-150.4590146,10.52433762 +1.3.6.1.4.1.14519.5.2.1.6279.6001.226456162308124493341905600418,76.97808959,61.77172767,-133.750295,7.131301409 +1.3.6.1.4.1.14519.5.2.1.6279.6001.226889213794065160713547677129,49.69416659,104.6858466,-297.5292319,5.244468721 +1.3.6.1.4.1.14519.5.2.1.6279.6001.227707494413800460340110762069,-20.26058318,66.58938539,-206.2408307,7.789972805 +1.3.6.1.4.1.14519.5.2.1.6279.6001.227796349777753378641347819780,-90.49973305,-228.203463,-347.1502138,4.83748734 +1.3.6.1.4.1.14519.5.2.1.6279.6001.227796349777753378641347819780,-149.0749233,-156.3745612,-422.1191067,6.587261619 +1.3.6.1.4.1.14519.5.2.1.6279.6001.227796349777753378641347819780,144.3496682,-136.3511163,-435.821845,5.973944221 +1.3.6.1.4.1.14519.5.2.1.6279.6001.227885601428639043345478571594,-79.51333218,120.4823722,-68.3844107,6.313681857 +1.3.6.1.4.1.14519.5.2.1.6279.6001.227962600322799211676960828223,72.88274978,-1.28143171,-56.52006584,17.52596027 +1.3.6.1.4.1.14519.5.2.1.6279.6001.227968442353440630355230778531,-87.39262251,181.7454561,-508.5616381,13.18081087 +1.3.6.1.4.1.14519.5.2.1.6279.6001.228511122591230092662900221600,103.4901351,19.02440919,-227.2106621,9.286445444 +1.3.6.1.4.1.14519.5.2.1.6279.6001.228511122591230092662900221600,97.32696572,38.24556909,-208.1462513,5.963386128 +1.3.6.1.4.1.14519.5.2.1.6279.6001.228511122591230092662900221600,-31.01740011,-25.19581883,-196.2932789,6.2309343 +1.3.6.1.4.1.14519.5.2.1.6279.6001.228934821089041845791238006047,120.4418988,44.41861238,-245.4755968,4.900924695 +1.3.6.1.4.1.14519.5.2.1.6279.6001.229096941293122177107846044795,-90.00339918,-218.9498337,-205.0745819,4.65186366 +1.3.6.1.4.1.14519.5.2.1.6279.6001.229096941293122177107846044795,-86.57914744,-204.7481346,-203.6073358,6.385959004 +1.3.6.1.4.1.14519.5.2.1.6279.6001.229096941293122177107846044795,-68.26080546,-69.21122599,-196.1228776,7.186704876 +1.3.6.1.4.1.14519.5.2.1.6279.6001.229096941293122177107846044795,-73.17249303,-55.92625797,-183.7214311,14.79788128 +1.3.6.1.4.1.14519.5.2.1.6279.6001.229096941293122177107846044795,-73.66370598,-215.809667,-183.9092361,6.489388614 +1.3.6.1.4.1.14519.5.2.1.6279.6001.229860476925100292554329427970,-108.0795881,-70.76676061,-138.1757851,4.341588419 +1.3.6.1.4.1.14519.5.2.1.6279.6001.229860476925100292554329427970,-113.1622011,35.11715185,-166.5081249,4.635624615 +1.3.6.1.4.1.14519.5.2.1.6279.6001.229860476925100292554329427970,-100.2598962,-60.33797935,-135.0709524,3.923712299 +1.3.6.1.4.1.14519.5.2.1.6279.6001.230416590143922549745658357505,-103.1975366,-156.0826648,-199.8792945,6.23861912 +1.3.6.1.4.1.14519.5.2.1.6279.6001.230416590143922549745658357505,-75.85511002,-144.2211893,-61.73576306,4.137877518 +1.3.6.1.4.1.14519.5.2.1.6279.6001.230491296081537726468075344411,97.95579219,28.73484404,-133.4079455,12.1674054 +1.3.6.1.4.1.14519.5.2.1.6279.6001.230491296081537726468075344411,95.35113888,50.21460247,-139.266673,12.07617755 +1.3.6.1.4.1.14519.5.2.1.6279.6001.230675342744370103160629638194,-93.80070346,-42.0638866,-161.4495149,4.402510304 +1.3.6.1.4.1.14519.5.2.1.6279.6001.231002159523969307155990628066,67.29092485,-2.511403926,-97.67385656,7.9202838 +1.3.6.1.4.1.14519.5.2.1.6279.6001.231002159523969307155990628066,52.2639469,1.497597,-106.7882515,4.141481922 +1.3.6.1.4.1.14519.5.2.1.6279.6001.231002159523969307155990628066,-95.13594331,66.11688471,-155.0085322,5.592105263 +1.3.6.1.4.1.14519.5.2.1.6279.6001.232071262560365924176679652948,-61.58176887,203.663079,-406.8238622,10.02702167 +1.3.6.1.4.1.14519.5.2.1.6279.6001.233001470265230594739708503198,-64.82348424,-60.70896428,-192.062522,7.985106486 +1.3.6.1.4.1.14519.5.2.1.6279.6001.233433352108264931671753343044,-103.0650847,-201.9728639,-199.259719,7.824906419 +1.3.6.1.4.1.14519.5.2.1.6279.6001.233433352108264931671753343044,-54.51336914,-97.31184902,-302.9102068,5.728868072 +1.3.6.1.4.1.14519.5.2.1.6279.6001.233433352108264931671753343044,-78.35817417,-112.2362811,-207.9264479,5.0659595 +1.3.6.1.4.1.14519.5.2.1.6279.6001.233652865358649579816568545171,-67.1632622,34.25872475,-138.0189691,5.957179253 +1.3.6.1.4.1.14519.5.2.1.6279.6001.235364978775280910367690540811,64.68198292,32.10248901,-236.2047709,11.60251126 +1.3.6.1.4.1.14519.5.2.1.6279.6001.237215747217294006286437405216,-59.75176891,-45.51209719,-84.77197151,5.52981148 +1.3.6.1.4.1.14519.5.2.1.6279.6001.237428977311365557972720635401,-47.90112947,-52.76024068,-155.8593999,5.498575682 +1.3.6.1.4.1.14519.5.2.1.6279.6001.238019241099704094018548301753,-58.14574208,-55.41029389,-195.8649752,6.006388591 +1.3.6.1.4.1.14519.5.2.1.6279.6001.238855414831158993232534884296,-87.67051321,26.78212237,-68.95236036,5.362783598 +1.3.6.1.4.1.14519.5.2.1.6279.6001.239358021703233250639913775427,67.94312597,-57.5603859,-192.0483809,5.143368003 +1.3.6.1.4.1.14519.5.2.1.6279.6001.239358021703233250639913775427,-89.03608095,-4.521104786,-184.3910257,5.494770376 +1.3.6.1.4.1.14519.5.2.1.6279.6001.239358021703233250639913775427,-50.06071754,84.28251833,-182.0021641,7.016006655 +1.3.6.1.4.1.14519.5.2.1.6279.6001.239358021703233250639913775427,52.03768945,-57.49443854,-179.1694878,6.197677084 +1.3.6.1.4.1.14519.5.2.1.6279.6001.239358021703233250639913775427,-55.35427856,-21.73921101,-170.024255,6.567796504 +1.3.6.1.4.1.14519.5.2.1.6279.6001.239358021703233250639913775427,55.67723378,85.91442717,-184.7025172,5.810350051 +1.3.6.1.4.1.14519.5.2.1.6279.6001.239358021703233250639913775427,45.20399101,82.20492377,-187.3730159,6.104617991 +1.3.6.1.4.1.14519.5.2.1.6279.6001.239358021703233250639913775427,67.70370235,-42.03608191,-177.5220588,4.898202157 +1.3.6.1.4.1.14519.5.2.1.6279.6001.240969450540588211676803094518,-67.89250682,66.62625425,-201.7299033,6.232717756 +1.3.6.1.4.1.14519.5.2.1.6279.6001.240969450540588211676803094518,78.57938299,-32.83961731,-117.1172356,5.981259208 +1.3.6.1.4.1.14519.5.2.1.6279.6001.241083615484551649610616348856,37.2907856,-153.930576,-230.4874106,8.361662881 +1.3.6.1.4.1.14519.5.2.1.6279.6001.241570579760883349458693655367,-124.4281777,127.7209789,1633.223987,5.253525386 +1.3.6.1.4.1.14519.5.2.1.6279.6001.241717018262666382493757419144,31.3515371,49.9935034,-93.09019002,9.953169615 +1.3.6.1.4.1.14519.5.2.1.6279.6001.241717018262666382493757419144,84.46996514,54.58091128,-216.1892685,4.257333181 +1.3.6.1.4.1.14519.5.2.1.6279.6001.242624386080831911167122628616,-70.05203824,-177.2863673,-196.0178473,4.481196844 +1.3.6.1.4.1.14519.5.2.1.6279.6001.242624386080831911167122628616,-105.4904536,-195.789589,-231.9827617,7.340286975 +1.3.6.1.4.1.14519.5.2.1.6279.6001.242761658169703141430370511586,-112.2957484,97.35768343,-324.5095395,10.43124188 +1.3.6.1.4.1.14519.5.2.1.6279.6001.243094273518213382155770295147,36.10138756,56.74686,-225.4606863,15.27003429 +1.3.6.1.4.1.14519.5.2.1.6279.6001.243094273518213382155770295147,88.04700244,82.06805138,-235.1776874,9.514315903 +1.3.6.1.4.1.14519.5.2.1.6279.6001.243094273518213382155770295147,76.8032595,80.64710662,-206.0164263,8.220380612 +1.3.6.1.4.1.14519.5.2.1.6279.6001.243094273518213382155770295147,45.57006602,34.24015941,-140.1768512,12.99686424 +1.3.6.1.4.1.14519.5.2.1.6279.6001.243094273518213382155770295147,62.56152545,73.24041758,-255.6159586,12.13959395 +1.3.6.1.4.1.14519.5.2.1.6279.6001.244204120220889433826451158706,-97.40113449,23.34590944,-151.9773605,7.370224529 +1.3.6.1.4.1.14519.5.2.1.6279.6001.244204120220889433826451158706,34.04035793,29.47635335,-156.4414006,6.018626532 +1.3.6.1.4.1.14519.5.2.1.6279.6001.244442540088515471945035689377,74.06556161,-121.2537719,-208.5776702,6.429381085 +1.3.6.1.4.1.14519.5.2.1.6279.6001.244447966386688625240438849169,-102.5054319,184.7539324,-376.0209821,5.217135106 +1.3.6.1.4.1.14519.5.2.1.6279.6001.244590453955380448651329424024,-53.48738674,-155.8038863,-244.9570362,5.694304171 +1.3.6.1.4.1.14519.5.2.1.6279.6001.244681063194071446501270815660,-54.53295263,-122.3417894,-106.8530672,12.06823325 +1.3.6.1.4.1.14519.5.2.1.6279.6001.245248446973732759194067808002,132.7235076,-2.482715594,-178.7296901,5.676359559 +1.3.6.1.4.1.14519.5.2.1.6279.6001.245391706475696258069508046497,104.3487739,-50.6450938,-178.7102944,5.696507379 +1.3.6.1.4.1.14519.5.2.1.6279.6001.246225645401227472829175288633,85.10312764,68.1231479,1552.672487,6.858527982 +1.3.6.1.4.1.14519.5.2.1.6279.6001.246758220302211646532176593724,102.2399542,65.22379138,1561.838456,3.973281304 +1.3.6.1.4.1.14519.5.2.1.6279.6001.246758220302211646532176593724,79.74714343,43.96384249,1624.371493,4.297245295 +1.3.6.1.4.1.14519.5.2.1.6279.6001.247060297988514823071467295949,130.8516193,88.73648159,-200.0790996,6.009066896 +1.3.6.1.4.1.14519.5.2.1.6279.6001.247769845138587733933485039556,146.8476333,-9.053466102,-165.6777809,5.784239296 +1.3.6.1.4.1.14519.5.2.1.6279.6001.247769845138587733933485039556,-101.1317473,-66.59775552,-149.2552797,6.605182062 +1.3.6.1.4.1.14519.5.2.1.6279.6001.247769845138587733933485039556,-113.1069633,-65.53102431,-141.3337001,3.994313797 +1.3.6.1.4.1.14519.5.2.1.6279.6001.247816269490470394602288565775,-77.92733327,201.3950992,-334.2187716,4.686873877 +1.3.6.1.4.1.14519.5.2.1.6279.6001.247816269490470394602288565775,30.32154661,113.8050094,-401.1255093,12.65708157 +1.3.6.1.4.1.14519.5.2.1.6279.6001.248357157975955379661896491341,93.40756606,32.61451529,-183.9276734,6.405074711 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249032660919473722154870746474,-55.33524393,103.8208322,-99.0727983,4.443753341 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249314567767437206995861966896,29.40142613,79.93102755,-273.0968803,16.77602203 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249314567767437206995861966896,67.01986114,2.845989356,-85.92605423,12.46806721 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249404938669582150398726875826,61.14957634,65.36834984,-282.8838048,8.815802572 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249404938669582150398726875826,-82.50977278,75.76669562,-284.3027222,6.765042258 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249404938669582150398726875826,78.1449453,84.69417166,-181.0381686,8.279651627 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249404938669582150398726875826,129.6606906,32.39491492,-174.1825371,11.36963426 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249450003033735700817635168066,102.5994972,-85.18892956,-274.7995891,5.384158274 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249450003033735700817635168066,102.8516419,-142.9349464,-264.1177375,4.756333837 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249450003033735700817635168066,93.17781319,-61.86571862,-251.1174529,5.118324575 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249450003033735700817635168066,-108.2741578,-128.0277449,-247.6879925,7.070646904 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249530219848512542668813996730,-99.67287454,38.01094057,-117.1044624,4.683570528 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249530219848512542668813996730,145.0481102,33.85318709,-189.8031919,6.242190906 +1.3.6.1.4.1.14519.5.2.1.6279.6001.249530219848512542668813996730,123.6737499,65.76589059,-210.8132276,10.83118822 +1.3.6.1.4.1.14519.5.2.1.6279.6001.250397690690072950000431855143,100.0021827,22.00611876,-147.0757546,8.871621958 +1.3.6.1.4.1.14519.5.2.1.6279.6001.250397690690072950000431855143,-55.31574942,4.042374673,-154.7552924,5.970538617 +1.3.6.1.4.1.14519.5.2.1.6279.6001.250397690690072950000431855143,-25.40860122,136.715217,-181.6943198,11.08601237 +1.3.6.1.4.1.14519.5.2.1.6279.6001.250397690690072950000431855143,127.2115066,44.79847847,-164.7894133,7.72427841 +1.3.6.1.4.1.14519.5.2.1.6279.6001.250397690690072950000431855143,120.2208995,50.312055,-132.1372108,5.251592099 +1.3.6.1.4.1.14519.5.2.1.6279.6001.250397690690072950000431855143,101.082909,-3.953008029,-180.4023007,9.404294354 +1.3.6.1.4.1.14519.5.2.1.6279.6001.250481236093201801255751845296,73.76386971,56.33474997,-111.8408463,4.084912815 +1.3.6.1.4.1.14519.5.2.1.6279.6001.250863365157630276148828903732,-82.01433803,-28.01109961,-153.9073895,10.06186005 +1.3.6.1.4.1.14519.5.2.1.6279.6001.251215764736737018371915284679,-83.90348039,-43.19714842,-275.3149289,14.81279634 +1.3.6.1.4.1.14519.5.2.1.6279.6001.252358625003143649770119512644,-118.1529007,10.0091412,-172.2271819,7.083745614 +1.3.6.1.4.1.14519.5.2.1.6279.6001.252634638822000832774167856951,60.16096443,67.20210777,-97.95107479,19.57555466 +1.3.6.1.4.1.14519.5.2.1.6279.6001.252697338970999211181671881792,-85.06548421,81.6029288,-149.5488028,5.285669845 +1.3.6.1.4.1.14519.5.2.1.6279.6001.252814707117018427472206147014,-107.2159607,-18.51266964,-209.7539105,6.002516297 +1.3.6.1.4.1.14519.5.2.1.6279.6001.252814707117018427472206147014,61.32976859,84.76491799,-250.9065563,5.129855377 +1.3.6.1.4.1.14519.5.2.1.6279.6001.253322967203074795232627653819,78.91931222,28.0701114,-30.64770351,6.145856048 +1.3.6.1.4.1.14519.5.2.1.6279.6001.253322967203074795232627653819,-112.0234972,69.97418001,-99.2558482,4.341383521 +1.3.6.1.4.1.14519.5.2.1.6279.6001.253322967203074795232627653819,-81.57264551,-57.20275617,-167.9608443,4.730361001 +1.3.6.1.4.1.14519.5.2.1.6279.6001.254254303842550572473665729969,-58.69016149,-46.43839771,1449.3662,17.60680854 +1.3.6.1.4.1.14519.5.2.1.6279.6001.254254303842550572473665729969,-36.28894981,37.1796656,1549.254705,12.31597935 +1.3.6.1.4.1.14519.5.2.1.6279.6001.254473943359963613733707320244,76.68553038,79.72250117,-100.1052284,5.978370835 +1.3.6.1.4.1.14519.5.2.1.6279.6001.254473943359963613733707320244,-106.4518389,79.48717995,-194.2562157,3.586891724 +1.3.6.1.4.1.14519.5.2.1.6279.6001.254957696184671649675053562027,-86.96072327,-223.9393033,-156.5318361,5.580524027 +1.3.6.1.4.1.14519.5.2.1.6279.6001.254957696184671649675053562027,94.79861345,-131.0465533,-139.7058976,6.073504253 +1.3.6.1.4.1.14519.5.2.1.6279.6001.255999614855292116767517149228,-115.3501501,-13.63731068,-174.0566414,12.98553245 +1.3.6.1.4.1.14519.5.2.1.6279.6001.257383535269991165447822992959,-11.68147261,69.32037685,-177.9755523,5.146058962 +1.3.6.1.4.1.14519.5.2.1.6279.6001.257383535269991165447822992959,-14.23272252,54.11225209,-168.7037196,18.02111617 +1.3.6.1.4.1.14519.5.2.1.6279.6001.257383535269991165447822992959,-47.10027725,55.21237511,-132.715981,13.80566396 +1.3.6.1.4.1.14519.5.2.1.6279.6001.257383535269991165447822992959,-43.72223094,80.4630221,-116.2138052,8.896326902 +1.3.6.1.4.1.14519.5.2.1.6279.6001.257515388956260258681136624817,-42.79341777,-131.4626408,-226.1803103,12.65179825 +1.3.6.1.4.1.14519.5.2.1.6279.6001.257515388956260258681136624817,86.76513695,-104.194718,-197.5664809,5.436792782 +1.3.6.1.4.1.14519.5.2.1.6279.6001.257840703452266097926250569223,-92.27396082,49.15940214,-179.9056886,6.358950284 +1.3.6.1.4.1.14519.5.2.1.6279.6001.257840703452266097926250569223,102.2669667,60.33818513,-151.4941817,5.520478941 +1.3.6.1.4.1.14519.5.2.1.6279.6001.258220324170977900491673635112,63.26966891,77.36318965,-225.9292676,13.44804609 +1.3.6.1.4.1.14519.5.2.1.6279.6001.258220324170977900491673635112,95.0892826,1.698275943,-126.7249875,4.501806204 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259123825760999546551970425757,-41.61771193,178.4096622,-381.2501196,19.310152 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259123825760999546551970425757,-53.43332809,148.1412784,-393.7043538,4.013764282 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259123825760999546551970425757,-40.57117818,122.6396589,-434.5711893,5.744030221 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259123825760999546551970425757,110.9646084,136.259879,-527.2449875,4.983754092 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259123825760999546551970425757,-49.10667981,117.2006652,-438.8990091,3.589491744 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259124675432205040899951626253,-59.76229837,-62.2617989,-167.156639,4.793159505 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259227883564429312164962953756,-29.1228645,48.5569787,-85.50543462,10.72670328 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259543921154154401875872845498,-56.22044118,-34.51721529,-144.2330617,4.958169738 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259543921154154401875872845498,-62.78408473,-54.35912078,-153.7498201,6.179309944 +1.3.6.1.4.1.14519.5.2.1.6279.6001.259543921154154401875872845498,-56.69302662,-71.39766503,-160.153874,6.024061049 +1.3.6.1.4.1.14519.5.2.1.6279.6001.261700367741314729940340271960,21.13605804,3.015375203,-90.46574675,3.968197931 +1.3.6.1.4.1.14519.5.2.1.6279.6001.262736997975960398949912434623,-101.395296,-125.8650982,-179.2955087,4.570090698 +1.3.6.1.4.1.14519.5.2.1.6279.6001.262736997975960398949912434623,-77.84509313,-185.9564699,-134.911108,3.805906302 +1.3.6.1.4.1.14519.5.2.1.6279.6001.262873069163227096134627700599,36.99117198,75.96897009,-211.922723,7.968882541 +1.3.6.1.4.1.14519.5.2.1.6279.6001.262873069163227096134627700599,-55.69319085,73.99821874,-147.3502844,14.67752407 +1.3.6.1.4.1.14519.5.2.1.6279.6001.264251211689085893915477907261,-96.83638558,24.05696088,-138.4551231,5.406806871 +1.3.6.1.4.1.14519.5.2.1.6279.6001.264251211689085893915477907261,-50.68978766,45.876185,-110.4343429,5.934589046 +1.3.6.1.4.1.14519.5.2.1.6279.6001.264251211689085893915477907261,-72.81004385,-35.14068792,-78.38709823,5.713817831 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265453131727473342790950829556,88.51247939,-68.10352403,-147.9907896,4.720379813 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265453131727473342790950829556,-80.45493331,-84.32187708,-128.7269511,6.111922058 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265453131727473342790950829556,57.60716664,-75.94085727,-109.5389192,7.664341312 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265453131727473342790950829556,84.50307774,-76.27875698,-89.27114991,6.705330851 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265453131727473342790950829556,79.6430395,-114.6833702,-74.70024737,4.858789829 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265775376735520890308424143898,0.378580731,213.6507752,-676.932069,5.866867348 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265775376735520890308424143898,-69.1757411,218.0526254,-668.5012726,4.441200069 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265775376735520890308424143898,81.09750567,241.7018527,-701.3822918,4.227905054 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265780642925621389994857727416,-96.92511861,-19.80447862,-120.1001986,10.60627713 +1.3.6.1.4.1.14519.5.2.1.6279.6001.265960756233787099041040311282,116.3125797,12.94951993,-80.41107871,4.554576075 +1.3.6.1.4.1.14519.5.2.1.6279.6001.267519732763035023633235877753,-85.25444741,-46.79571211,-180.6569421,6.856554178 +1.3.6.1.4.1.14519.5.2.1.6279.6001.267519732763035023633235877753,-90.23807193,-88.54741894,-174.9446668,4.746983627 +1.3.6.1.4.1.14519.5.2.1.6279.6001.267519732763035023633235877753,24.60583341,-33.45402892,-45.67999081,4.680676552 +1.3.6.1.4.1.14519.5.2.1.6279.6001.267957701183569638795986183786,-65.84352891,-77.23814671,354.4514823,4.406865675 +1.3.6.1.4.1.14519.5.2.1.6279.6001.267957701183569638795986183786,-71.45458891,-176.2479812,241.8137726,7.977820653 +1.3.6.1.4.1.14519.5.2.1.6279.6001.267957701183569638795986183786,-97.8083916,-183.2310149,249.2611219,4.198740236 +1.3.6.1.4.1.14519.5.2.1.6279.6001.267957701183569638795986183786,-93.68123544,-176.0318756,213.2126387,23.93362973 +1.3.6.1.4.1.14519.5.2.1.6279.6001.268030488196493755113553009785,73.79496797,69.55764009,-35.17353835,8.158102396 +1.3.6.1.4.1.14519.5.2.1.6279.6001.268992195564407418480563388746,-116.1875069,0.827026319,-238.0362876,5.834911249 +1.3.6.1.4.1.14519.5.2.1.6279.6001.269075535958871753309238331179,-12.41585622,-184.5111396,867.1793966,12.16970693 +1.3.6.1.4.1.14519.5.2.1.6279.6001.269075535958871753309238331179,-24.11055443,-171.5345888,864.1143948,5.54930965 +1.3.6.1.4.1.14519.5.2.1.6279.6001.269075535958871753309238331179,-89.80382595,-68.12701296,873.8383847,5.536440222 +1.3.6.1.4.1.14519.5.2.1.6279.6001.270152671889301412052226973069,-94.17099656,60.22888982,-185.1525725,7.636326684 +1.3.6.1.4.1.14519.5.2.1.6279.6001.270215889102603268207599305185,101.8010914,-28.53858261,-173.2606127,5.582216627 +1.3.6.1.4.1.14519.5.2.1.6279.6001.270390050141765094612147226290,-49.72758728,-19.98555378,-151.9287579,14.31390685 +1.3.6.1.4.1.14519.5.2.1.6279.6001.270390050141765094612147226290,-71.7826853,-64.17026387,-210.6358489,8.22221772 +1.3.6.1.4.1.14519.5.2.1.6279.6001.270390050141765094612147226290,114.0663418,-39.7958665,-161.1772179,4.771826524 +1.3.6.1.4.1.14519.5.2.1.6279.6001.270951128717816232360812849541,71.24730999,68.44187934,-190.2289952,8.489837273 +1.3.6.1.4.1.14519.5.2.1.6279.6001.271220641987745483198036913951,-108.438374,-118.8944651,-221.9638299,10.05662598 +1.3.6.1.4.1.14519.5.2.1.6279.6001.271307051432838466826189754230,123.637574,-5.081129141,-262.4648206,20.38922514 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272042302501586336192628818865,36.84866907,178.6334519,-603.1030289,5.028864971 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272123398257168239653655006815,-36.64395514,-76.5761924,-155.6091206,15.28264973 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272123398257168239653655006815,107.3014973,-1.66826224,-189.204955,20.03584717 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272123398257168239653655006815,129.1442701,35.49501731,-229.6640754,22.13533119 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272190966764020277652079081128,-45.80479316,59.89230782,-200.9927893,8.766657397 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272190966764020277652079081128,-88.56419765,20.20911916,-103.7426809,7.076676777 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272344603176687884771013620823,96.78026471,1.565748925,-113.1028372,22.03891888 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272348349298439120568330857680,-48.52221096,45.38208006,-90.22368433,22.88079244 +1.3.6.1.4.1.14519.5.2.1.6279.6001.272961322147784625028175033640,-101.4017843,87.31094814,-230.908114,6.044864617 +1.3.6.1.4.1.14519.5.2.1.6279.6001.273525289046256012743471155680,102.2324301,210.5837195,-614.3178454,4.335976969 +1.3.6.1.4.1.14519.5.2.1.6279.6001.274052674198758621258447180130,-77.6685505,156.5915805,-517.9735625,6.373118453 +1.3.6.1.4.1.14519.5.2.1.6279.6001.274052674198758621258447180130,-72.80446275,223.427845,-567.1713376,6.031697835 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275007193025729362844652516689,87.89218568,-56.95129309,-142.9535988,4.988818646 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275007193025729362844652516689,-97.01461145,-21.57207523,-127.9731352,14.21146202 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275007193025729362844652516689,-29.74141401,-18.46166759,-134.2459518,17.98864725 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275755514659958628040305922764,-98.39887472,-257.6239438,-242.1180244,5.048067067 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275755514659958628040305922764,-48.06616769,-258.0504359,-250.544875,8.413884666 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275755514659958628040305922764,-90.94045378,-230.2193214,-217.071482,7.663782425 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275755514659958628040305922764,120.8151682,-117.7561585,-258.7667719,6.920897477 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275755514659958628040305922764,-114.4516276,-91.13719415,-264.111843,5.964079886 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275766318636944297772360944907,-75.51553848,-45.34884762,-144.4902038,7.593735846 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275766318636944297772360944907,33.0178907,94.39493036,-251.7982184,8.328291294 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275986221854423197884953496664,-87.72559112,172.6043391,-580.1726871,5.155662025 +1.3.6.1.4.1.14519.5.2.1.6279.6001.275986221854423197884953496664,-60.31452861,135.3053658,-566.8624414,4.520944354 +1.3.6.1.4.1.14519.5.2.1.6279.6001.276556509002726404418399209377,-67.45950309,-247.7442112,-211.0953396,7.744221728 +1.3.6.1.4.1.14519.5.2.1.6279.6001.276556509002726404418399209377,-97.69087642,-134.0680536,-187.0948829,6.690036478 +1.3.6.1.4.1.14519.5.2.1.6279.6001.276710697414087561012670296643,69.52914115,87.03615287,-149.1901128,10.82451529 +1.3.6.1.4.1.14519.5.2.1.6279.6001.277445975068759205899107114231,-57.0819205,-85.17233126,-214.5551686,5.070932612 +1.3.6.1.4.1.14519.5.2.1.6279.6001.277445975068759205899107114231,-48.22664898,-66.08106226,-209.0373634,4.717405126 +1.3.6.1.4.1.14519.5.2.1.6279.6001.277452631455527999380186898011,76.95201463,-27.48605744,-148.58781,5.863401006 +1.3.6.1.4.1.14519.5.2.1.6279.6001.277662902666135640561346462196,106.9705181,8.301864146,-139.5403359,16.10237553 +1.3.6.1.4.1.14519.5.2.1.6279.6001.278010349511857248000260557753,-131.9599469,55.69961281,-165.2127172,6.618630161 +1.3.6.1.4.1.14519.5.2.1.6279.6001.279300249795483097365868125932,51.48901046,9.855025846,-86.83518484,14.86094152 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280072876841890439628529365478,-73.72958121,-50.52444839,-259.1407657,4.533837123 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280072876841890439628529365478,-73.96568646,-92.44533909,-238.6529412,7.185957941 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280072876841890439628529365478,-52.54525764,-195.1320838,-180.130679,8.436595788 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280072876841890439628529365478,-85.9411151,-169.2745879,-128.3546076,7.595614881 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280072876841890439628529365478,32.58870589,-102.4937764,-88.46395383,5.642186103 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280072876841890439628529365478,-73.19462067,-102.8061689,-166.8263298,6.172638207 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280072876841890439628529365478,106.6949197,-126.2271369,-246.3140429,22.77961842 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280125803152924778388346920341,-72.12347451,7.797144105,-217.0274902,6.844315185 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280125803152924778388346920341,5.688584989,77.51244888,-142.6580166,5.905235821 +1.3.6.1.4.1.14519.5.2.1.6279.6001.280125803152924778388346920341,14.6814816,64.49124539,-233.5115248,5.597494358 +1.3.6.1.4.1.14519.5.2.1.6279.6001.281489753704424911132261151767,110.1355596,-32.0169515,-241.1046505,6.005399015 +1.3.6.1.4.1.14519.5.2.1.6279.6001.282512043257574309474415322775,-88.49125714,4.69078919,-184.9336769,18.50978255 +1.3.6.1.4.1.14519.5.2.1.6279.6001.282779922503707013097174625409,82.49968,-81.76246933,-162.3132715,4.206700455 +1.3.6.1.4.1.14519.5.2.1.6279.6001.282779922503707013097174625409,91.76868348,32.4243149,-101.9035024,5.58156934 +1.3.6.1.4.1.14519.5.2.1.6279.6001.283569726884265181140892667131,101.0640749,-2.909610731,-129.7329156,6.417805328 +1.3.6.1.4.1.14519.5.2.1.6279.6001.283569726884265181140892667131,98.17857282,40.23143915,-147.6875423,6.351836743 +1.3.6.1.4.1.14519.5.2.1.6279.6001.283569726884265181140892667131,111.8026601,34.3791455,-156.3357581,6.898836492 +1.3.6.1.4.1.14519.5.2.1.6279.6001.283569726884265181140892667131,54.86650139,83.42134104,-200.5208054,15.9976197 +1.3.6.1.4.1.14519.5.2.1.6279.6001.283733738239331719775105586296,79.24095142,105.0621099,-170.1267748,5.838910273 +1.3.6.1.4.1.14519.5.2.1.6279.6001.286217539434358186648717203667,-57.93049681,-30.77966437,-83.41758578,5.73592519 +1.3.6.1.4.1.14519.5.2.1.6279.6001.286217539434358186648717203667,-66.07883697,27.44178912,-61.40408623,6.862125594 +1.3.6.1.4.1.14519.5.2.1.6279.6001.286217539434358186648717203667,46.81849127,-6.947360373,-20.34015546,4.023705654 +1.3.6.1.4.1.14519.5.2.1.6279.6001.286422846896797433168187085942,-90.94204444,9.422642589,-72.51868585,22.22543938 +1.3.6.1.4.1.14519.5.2.1.6279.6001.287560874054243719452635194040,-66.56658517,-40.61335572,-118.4928899,7.53039924 +1.3.6.1.4.1.14519.5.2.1.6279.6001.287966244644280690737019247886,102.2377292,65.32842988,-240.6955559,18.210145 +1.3.6.1.4.1.14519.5.2.1.6279.6001.287966244644280690737019247886,22.53616818,34.72145001,-117.4375995,10.33971307 +1.3.6.1.4.1.14519.5.2.1.6279.6001.287966244644280690737019247886,60.18947724,-45.04675978,-112.6427797,8.349225392 +1.3.6.1.4.1.14519.5.2.1.6279.6001.287966244644280690737019247886,67.82725575,85.37992457,-109.7467238,32.27003025 +1.3.6.1.4.1.14519.5.2.1.6279.6001.287966244644280690737019247886,114.1058249,-11.85681073,-165.6215278,4.915612527 +1.3.6.1.4.1.14519.5.2.1.6279.6001.288701997968615460794642979503,-23.97628,66.98028611,1569.020052,5.40759858 +1.3.6.1.4.1.14519.5.2.1.6279.6001.288701997968615460794642979503,-107.6908186,82.29497289,1432.633036,5.611908232 +1.3.6.1.4.1.14519.5.2.1.6279.6001.288701997968615460794642979503,146.5013001,33.33503366,1433.047346,4.639346679 +1.3.6.1.4.1.14519.5.2.1.6279.6001.290135156874098366424871975734,-59.39053533,91.29824683,-217.315565,18.99864751 +1.3.6.1.4.1.14519.5.2.1.6279.6001.290135156874098366424871975734,-65.43453788,68.62896143,-282.4272547,13.55294288 +1.3.6.1.4.1.14519.5.2.1.6279.6001.290135156874098366424871975734,80.32564185,58.99865099,-150.4842755,12.71396134 +1.3.6.1.4.1.14519.5.2.1.6279.6001.290135156874098366424871975734,92.70661624,19.69810556,-194.2689681,8.80965529 +1.3.6.1.4.1.14519.5.2.1.6279.6001.290135156874098366424871975734,71.01942171,16.25754185,-196.9970104,6.877252867 +1.3.6.1.4.1.14519.5.2.1.6279.6001.291539125579672469833850180824,129.4752815,-51.57101338,-251.9485797,5.529020275 +1.3.6.1.4.1.14519.5.2.1.6279.6001.292057261351416339496913597985,116.7588076,-180.8050991,-234.5537632,5.106009516 +1.3.6.1.4.1.14519.5.2.1.6279.6001.292057261351416339496913597985,-83.62032739,-95.87788076,-221.5685425,6.216601241 +1.3.6.1.4.1.14519.5.2.1.6279.6001.292057261351416339496913597985,-92.89107114,-208.5061595,-203.2724929,4.251282657 +1.3.6.1.4.1.14519.5.2.1.6279.6001.292057261351416339496913597985,76.66626608,-163.8716684,-147.2499084,15.6929733 +1.3.6.1.4.1.14519.5.2.1.6279.6001.292194861362266467652267941663,44.32326395,82.57803325,-189.3255283,5.56275007 +1.3.6.1.4.1.14519.5.2.1.6279.6001.292994770358625142596171316474,135.3036242,-21.79208926,-239.4086072,4.543071313 +1.3.6.1.4.1.14519.5.2.1.6279.6001.293593766328917170359373773080,-62.19588874,56.10498787,-94.82411775,5.982909574 +1.3.6.1.4.1.14519.5.2.1.6279.6001.293757615532132808762625441831,-68.00720196,-41.02746294,-172.1175757,5.247278653 +1.3.6.1.4.1.14519.5.2.1.6279.6001.293757615532132808762625441831,-86.83682341,44.88428152,-150.5213276,8.103288228 +1.3.6.1.4.1.14519.5.2.1.6279.6001.294120933998772507043263238704,48.93160782,-57.64898774,-73.99981349,5.743023818 +1.3.6.1.4.1.14519.5.2.1.6279.6001.294120933998772507043263238704,91.74344115,1.489122847,-109.3375922,4.950660035 +1.3.6.1.4.1.14519.5.2.1.6279.6001.294120933998772507043263238704,-64.32373023,56.85721717,-168.4427428,6.331569947 +1.3.6.1.4.1.14519.5.2.1.6279.6001.294120933998772507043263238704,-130.2047538,27.56977296,-210.2722058,9.503203598 +1.3.6.1.4.1.14519.5.2.1.6279.6001.294188507421106424248264912111,-84.56144675,53.32378035,-281.9974642,5.556944532 +1.3.6.1.4.1.14519.5.2.1.6279.6001.294188507421106424248264912111,120.7849264,26.79966924,-282.3975687,7.903510371 +1.3.6.1.4.1.14519.5.2.1.6279.6001.294188507421106424248264912111,100.7686809,54.38122979,-256.9953278,5.722280115 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295298571102631191572192562523,-131.3987948,-2.758456139,-221.4306053,5.6734543 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295298571102631191572192562523,60.46365697,6.684682456,-166.2635713,6.275342115 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295420274214095686326263147663,-46.90144291,75.75702229,-160.6226978,7.000523906 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295420274214095686326263147663,-70.85118947,43.23273855,-161.9030791,5.103331958 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295420274214095686326263147663,-65.85355844,81.31080175,-179.9458889,4.09125367 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295420274214095686326263147663,-78.60873551,83.60316733,-180.3313412,3.604122074 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295420274214095686326263147663,-68.57907771,88.63420627,-190.8726177,4.36498067 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295462530340364058116953738925,74.06988329,38.35306684,-64.55323564,4.620478005 +1.3.6.1.4.1.14519.5.2.1.6279.6001.295462530340364058116953738925,92.75491946,28.68047227,-68.42174667,14.01055468 +1.3.6.1.4.1.14519.5.2.1.6279.6001.296738183013079390785739615169,-68.98527379,59.65236221,-93.7862976,12.23861568 +1.3.6.1.4.1.14519.5.2.1.6279.6001.296738183013079390785739615169,69.39410493,2.301055592,-116.9214528,10.15451033 +1.3.6.1.4.1.14519.5.2.1.6279.6001.297433269262659217151107535012,-81.4227151,-72.28037593,-175.2840689,7.803510446 +1.3.6.1.4.1.14519.5.2.1.6279.6001.297433269262659217151107535012,33.10479474,-63.11643351,-108.7255712,10.7593487 +1.3.6.1.4.1.14519.5.2.1.6279.6001.297964221542942838344351735414,-48.25336944,122.9531915,-662.8189689,4.741226698 +1.3.6.1.4.1.14519.5.2.1.6279.6001.297964221542942838344351735414,-79.34409697,174.995213,-675.2716339,9.54755631 +1.3.6.1.4.1.14519.5.2.1.6279.6001.297988578825170426663869669862,50.97022755,-34.22691743,-145.0871207,9.854691375 +1.3.6.1.4.1.14519.5.2.1.6279.6001.297988578825170426663869669862,107.2310959,38.93370431,-202.7540175,5.698508138 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299476369290630280560355838785,-102.6786393,-60.02526548,47.31904974,6.309861737 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299476369290630280560355838785,-128.9519043,51.49699246,-46.08862011,5.12610172 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299767339686526858593516834230,96.62595381,-46.15482266,-88.22943221,6.326436035 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299767339686526858593516834230,-118.326081,-37.39744532,-110.3530583,4.088340903 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299767339686526858593516834230,-72.28799048,-77.48196772,-160.4862542,4.087102079 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299767339686526858593516834230,-57.72551821,73.77949357,-147.4155797,11.80179732 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299767339686526858593516834230,-72.58061805,3.189654663,-124.7859175,7.740811844 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299806338046301317870803017534,76.92845221,42.9591148,-156.1113403,4.359847311 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299806338046301317870803017534,-48.19484987,85.6472109,-106.9277616,6.223836401 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299806338046301317870803017534,-61.79005197,85.7037051,-88.95044821,4.880407071 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299806338046301317870803017534,31.99820076,87.0398605,-87.30499286,5.264823454 +1.3.6.1.4.1.14519.5.2.1.6279.6001.299806338046301317870803017534,69.06378759,-5.20922866,-122.7216281,3.588905452 +1.3.6.1.4.1.14519.5.2.1.6279.6001.300136985030081433029390459071,118.8935973,9.543387329,-223.3917754,22.30485311 +1.3.6.1.4.1.14519.5.2.1.6279.6001.300136985030081433029390459071,-32.57589084,-38.49990256,-195.9028979,9.65159512 +1.3.6.1.4.1.14519.5.2.1.6279.6001.300146276266881736689307479986,-68.44093973,-157.1137025,-176.1858824,4.805890569 +1.3.6.1.4.1.14519.5.2.1.6279.6001.300146276266881736689307479986,-55.10711143,-92.46668464,-105.1251227,6.821386617 +1.3.6.1.4.1.14519.5.2.1.6279.6001.300246184547502297539521283806,-77.1815686,-56.67932785,-210.12595,3.844582048 +1.3.6.1.4.1.14519.5.2.1.6279.6001.300246184547502297539521283806,100.1064082,4.113763028,-93.59102919,4.375706691 +1.3.6.1.4.1.14519.5.2.1.6279.6001.300270516469599170290456821227,-64.08984827,-185.1943695,-176.461318,3.556818181 +1.3.6.1.4.1.14519.5.2.1.6279.6001.300270516469599170290456821227,-112.5257962,-147.0691547,-279.5736221,6.661399227 +1.3.6.1.4.1.14519.5.2.1.6279.6001.301462380687644451483231621986,91.67018342,-140.4872171,1157.979081,13.0575593 +1.3.6.1.4.1.14519.5.2.1.6279.6001.301462380687644451483231621986,73.32391758,-154.0753119,1175.026682,12.76400579 +1.3.6.1.4.1.14519.5.2.1.6279.6001.301462380687644451483231621986,61.57360432,-112.1197753,1206.626262,8.68806614 +1.3.6.1.4.1.14519.5.2.1.6279.6001.301582691063019848479942618641,85.1785161,-36.78139636,-100.6408476,8.623614727 +1.3.6.1.4.1.14519.5.2.1.6279.6001.302403227435841351528721627052,94.08411483,8.592369179,-226.0784745,5.320080577 +1.3.6.1.4.1.14519.5.2.1.6279.6001.302403227435841351528721627052,91.171059,11.67926171,-221.9540872,4.509994543 +1.3.6.1.4.1.14519.5.2.1.6279.6001.302557165094691896097534021075,-35.86499577,50.0903772,-54.97785519,11.73040225 +1.3.6.1.4.1.14519.5.2.1.6279.6001.303421828981831854739626597495,90.69412437,136.8807468,1521.030798,5.060034849 +1.3.6.1.4.1.14519.5.2.1.6279.6001.304700823314998198591652152637,-134.3906237,-122.7636416,-297.6611428,7.068103093 +1.3.6.1.4.1.14519.5.2.1.6279.6001.305858704835252413616501469037,-61.93533913,226.7878603,-379.0557742,6.972916889 +1.3.6.1.4.1.14519.5.2.1.6279.6001.305858704835252413616501469037,22.14091595,196.0980962,-367.3614119,9.253917448 +1.3.6.1.4.1.14519.5.2.1.6279.6001.305887072264491016857673607285,-128.7512557,-1.511218785,-213.3437987,5.62818632 +1.3.6.1.4.1.14519.5.2.1.6279.6001.306948744223170422945185006551,101.2451127,15.80942106,-105.5725817,16.09508736 +1.3.6.1.4.1.14519.5.2.1.6279.6001.306948744223170422945185006551,117.1530633,-1.520032995,-208.7261177,21.67749437 +1.3.6.1.4.1.14519.5.2.1.6279.6001.307835307280028057486413359377,-75.58452659,43.10980417,-128.326338,7.850328152 +1.3.6.1.4.1.14519.5.2.1.6279.6001.308655308958459380153492314021,-46.88603145,-71.47201601,-204.7362163,5.253505195 +1.3.6.1.4.1.14519.5.2.1.6279.6001.308655308958459380153492314021,-85.90557458,-179.9071501,-108.8742678,5.100020792 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309672797925724868457151381131,48.84233801,-79.99347491,-170.1226167,7.747145031 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309901913847714156367981722205,-44.74552511,15.74507375,-199.2057467,11.06629748 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309955999522338651429118207446,108.3539126,17.6636324,-144.3487942,7.19927326 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309955999522338651429118207446,-96.74440568,37.57394502,-138.1604297,9.008401966 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309955999522338651429118207446,81.25238955,-61.95603652,-102.7392007,4.624706443 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309955999522338651429118207446,64.42239176,10.39856954,-97.91300482,6.180360378 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309955999522338651429118207446,87.84093673,-9.774362874,-73.52174071,4.481934217 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309955999522338651429118207446,-61.41380792,86.92191873,-68.29510047,8.748557314 +1.3.6.1.4.1.14519.5.2.1.6279.6001.309955999522338651429118207446,-89.72409213,4.989814421,-36.10094622,4.393756108 +1.3.6.1.4.1.14519.5.2.1.6279.6001.310395752124284049604069960014,-43.17549976,-70.66475672,-149.5314353,8.488955168 +1.3.6.1.4.1.14519.5.2.1.6279.6001.310395752124284049604069960014,-111.5859962,-21.64957873,-70.20646602,5.685267589 +1.3.6.1.4.1.14519.5.2.1.6279.6001.310395752124284049604069960014,-93.51330673,11.06618299,-126.3944134,5.234851716 +1.3.6.1.4.1.14519.5.2.1.6279.6001.310548927038333190233889983845,-46.84173683,58.34921221,-64.06849523,8.364989395 +1.3.6.1.4.1.14519.5.2.1.6279.6001.311476128731958142981941696518,-89.41960826,230.4681484,-614.3390574,7.59997723 +1.3.6.1.4.1.14519.5.2.1.6279.6001.312127933722985204808706697221,-6.607170093,22.55937329,-143.7929641,9.48489034 +1.3.6.1.4.1.14519.5.2.1.6279.6001.312127933722985204808706697221,116.8024039,-1.291850522,-197.5054168,4.666322736 +1.3.6.1.4.1.14519.5.2.1.6279.6001.312127933722985204808706697221,119.2088976,-11.4328236,-208.2932951,6.853377495 +1.3.6.1.4.1.14519.5.2.1.6279.6001.312127933722985204808706697221,111.5336493,-37.25625083,-238.8281758,5.772283337 +1.3.6.1.4.1.14519.5.2.1.6279.6001.312127933722985204808706697221,95.99601184,-23.33441995,-157.7220192,4.835148932 +1.3.6.1.4.1.14519.5.2.1.6279.6001.312704771348460502013249647868,94.35547105,91.59711801,-85.60911893,4.473572199 +1.3.6.1.4.1.14519.5.2.1.6279.6001.312704771348460502013249647868,20.84754253,147.7875736,-123.7256197,4.945821582 +1.3.6.1.4.1.14519.5.2.1.6279.6001.312704771348460502013249647868,102.312989,110.4620141,-170.2480634,6.418972326 +1.3.6.1.4.1.14519.5.2.1.6279.6001.313283554967554803238484128406,-96.15880098,50.98702071,-126.4487451,10.32149081 +1.3.6.1.4.1.14519.5.2.1.6279.6001.313283554967554803238484128406,-129.5582207,43.95116739,-164.9900987,10.417941 +1.3.6.1.4.1.14519.5.2.1.6279.6001.313283554967554803238484128406,-54.40303309,81.75967211,-286.5417517,15.71097733 +1.3.6.1.4.1.14519.5.2.1.6279.6001.313334055029671473836954456733,68.05574564,43.7031034,-266.0215516,12.68580657 +1.3.6.1.4.1.14519.5.2.1.6279.6001.313605260055394498989743099991,-104.7330571,-65.28037827,-153.0965685,5.654138498 +1.3.6.1.4.1.14519.5.2.1.6279.6001.313835996725364342034830119490,-104.132632,5.561806071,-43.86310901,13.14006008 +1.3.6.1.4.1.14519.5.2.1.6279.6001.314789075871001236641548593165,-47.98966389,-118.8036156,-82.10624424,6.853098388 +1.3.6.1.4.1.14519.5.2.1.6279.6001.315187221221054114974341475212,-78.34099522,229.6995557,-700.4896349,4.015559137 +1.3.6.1.4.1.14519.5.2.1.6279.6001.315187221221054114974341475212,-94.11576971,212.0770162,-721.5469281,4.385767296 +1.3.6.1.4.1.14519.5.2.1.6279.6001.315214756157389122376518747372,49.76140034,-30.97057504,-40.7778355,5.937590395 +1.3.6.1.4.1.14519.5.2.1.6279.6001.315770913282450940389971401304,55.84381658,87.20226025,-175.8774794,4.034133192 +1.3.6.1.4.1.14519.5.2.1.6279.6001.316900421002460665752357657094,-97.41069879,-44.65572813,-143.8867224,24.66335961 +1.3.6.1.4.1.14519.5.2.1.6279.6001.316900421002460665752357657094,41.19376183,-3.596828721,-11.48987867,9.067255434 +1.3.6.1.4.1.14519.5.2.1.6279.6001.316911475886263032009840828684,111.3562508,-106.6054694,-118.862537,11.29624596 +1.3.6.1.4.1.14519.5.2.1.6279.6001.317087518531899043292346860596,-87.92743528,-49.5343381,-117.0008151,9.443896197 +1.3.6.1.4.1.14519.5.2.1.6279.6001.319066480138812986026181758474,125.1264993,22.05896161,-185.8029252,4.936242591 +1.3.6.1.4.1.14519.5.2.1.6279.6001.319066480138812986026181758474,-40.79954744,79.7815833,-160.1080585,5.433793389 +1.3.6.1.4.1.14519.5.2.1.6279.6001.320111824803959660037459294083,-77.02533313,89.93861809,-135.120507,5.183339807 +1.3.6.1.4.1.14519.5.2.1.6279.6001.321465552859463184018938648244,-20.72433589,-82.43422239,-163.5191536,9.991058045 +1.3.6.1.4.1.14519.5.2.1.6279.6001.321935195060268166151738328001,74.13268405,-26.75317521,-252.6553875,10.03917434 +1.3.6.1.4.1.14519.5.2.1.6279.6001.321935195060268166151738328001,-47.21141318,95.09026184,-179.9203418,12.79644145 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323302986710576400812869264321,-78.55235498,24.91578897,-107.3639625,7.165672419 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323408652979949774528873200770,72.1887603,-14.4688642,-195.2387769,22.46928325 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323408652979949774528873200770,74.72764672,30.75813083,-101.3115905,18.86783511 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323426705628838942177546503237,82.32330622,-183.4399074,-199.7152718,4.084248678 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323535944958374186208096541480,-50.16716421,27.87502068,-59.55902456,5.521988183 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323541312620128092852212458228,-118.0512328,94.75414104,-230.190551,4.560710413 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323753921818102744511069914832,97.83677666,55.50902909,-280.9785357,21.08245746 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323753921818102744511069914832,88.68803313,29.52753243,-267.9721837,8.515646762 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323859712968543712594665815359,-57.16455992,44.51132063,-79.73793688,6.614419285 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323859712968543712594665815359,-80.95533246,-74.33680027,-115.0576615,5.104384596 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323899724653546164058849558431,94.97968016,77.58891384,-162.3511214,5.134733017 +1.3.6.1.4.1.14519.5.2.1.6279.6001.323899724653546164058849558431,93.02994736,76.85220572,-180.3229252,6.306448592 +1.3.6.1.4.1.14519.5.2.1.6279.6001.324290109423920971676288828329,-107.0930177,-230.4358408,-196.9335875,3.90241061 +1.3.6.1.4.1.14519.5.2.1.6279.6001.324290109423920971676288828329,-34.21742242,-258.2050698,-180.5932222,8.714126601 +1.3.6.1.4.1.14519.5.2.1.6279.6001.324290109423920971676288828329,-89.74386627,-177.920042,-171.969291,11.05222629 +1.3.6.1.4.1.14519.5.2.1.6279.6001.324290109423920971676288828329,81.06879582,-250.9442408,-166.747044,9.330163033 +1.3.6.1.4.1.14519.5.2.1.6279.6001.324567010179873305471925391582,-87.6116254,-12.62484473,-163.8559956,9.82174492 +1.3.6.1.4.1.14519.5.2.1.6279.6001.324567010179873305471925391582,142.588728,-5.403468458,-299.2211503,5.07904476 +1.3.6.1.4.1.14519.5.2.1.6279.6001.324567010179873305471925391582,-35.50220052,12.42447242,-98.52928857,5.208074501 +1.3.6.1.4.1.14519.5.2.1.6279.6001.325164338773720548739146851679,-75.22199506,62.49234348,-96.3478276,12.6058106 +1.3.6.1.4.1.14519.5.2.1.6279.6001.325164338773720548739146851679,-48.04666893,85.21928222,-143.2366224,4.745975018 +1.3.6.1.4.1.14519.5.2.1.6279.6001.326057189095429101398977448288,-50.86292739,-91.99602194,-156.3356188,9.407091622 +1.3.6.1.4.1.14519.5.2.1.6279.6001.326057189095429101398977448288,-13.65835546,-135.5047895,-97.68078459,6.305697229 +1.3.6.1.4.1.14519.5.2.1.6279.6001.326057189095429101398977448288,-45.80083441,-101.6518106,-90.27642107,5.323697876 +1.3.6.1.4.1.14519.5.2.1.6279.6001.326057189095429101398977448288,81.35608846,-134.6072395,-77.74723215,7.702745337 +1.3.6.1.4.1.14519.5.2.1.6279.6001.326057189095429101398977448288,-32.95652305,-165.0205503,-80.42038104,4.225740939 +1.3.6.1.4.1.14519.5.2.1.6279.6001.326057189095429101398977448288,27.35574333,-113.1712109,-118.7382011,6.875805854 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,94.69277052,-58.75126934,-223.1832419,5.902097585 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,92.33199711,0.471155965,-196.1703197,11.4077692 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,76.37260492,-58.7146568,-188.3180962,6.762379039 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,38.18494377,-70.85731384,-177.4034718,7.013205598 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,73.40337941,-79.17103932,-160.465872,7.382823191 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,54.10098991,-74.66241303,-158.289718,6.162501209 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,47.3980366,-92.91586123,-157.6125367,4.696704052 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,-94.14005815,-66.6427403,-243.48921,5.375765996 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328789598898469177563438457842,-72.47324637,52.77800062,-212.0353733,5.116058049 +1.3.6.1.4.1.14519.5.2.1.6279.6001.328944769569002417592093467626,-91.50114978,-5.251185287,-138.9674206,5.41336635 +1.3.6.1.4.1.14519.5.2.1.6279.6001.329404588567903628160652715124,29.80896453,60.46795255,-278.3676965,6.955440317 +1.3.6.1.4.1.14519.5.2.1.6279.6001.329404588567903628160652715124,36.07972135,-29.73608262,-89.48053564,23.04344837 +1.3.6.1.4.1.14519.5.2.1.6279.6001.329624439086643515259182406526,-90.91776955,82.31102136,-186.4472527,6.724954348 +1.3.6.1.4.1.14519.5.2.1.6279.6001.330544495001617450666819906758,-52.41930738,-24.7935206,-176.1642111,16.82893945 +1.3.6.1.4.1.14519.5.2.1.6279.6001.332829333783605240302521201463,-83.91769065,47.09117513,-181.283014,6.862828144 +1.3.6.1.4.1.14519.5.2.1.6279.6001.332829333783605240302521201463,-88.46186388,18.95338468,-176.0384633,4.838097863 +1.3.6.1.4.1.14519.5.2.1.6279.6001.332829333783605240302521201463,-1.495127425,44.84438957,-163.8288849,4.87074364 +1.3.6.1.4.1.14519.5.2.1.6279.6001.332829333783605240302521201463,-12.64801202,100.0271132,-125.3106987,5.264828408 +1.3.6.1.4.1.14519.5.2.1.6279.6001.332829333783605240302521201463,-37.95117393,-30.07284828,-111.6084477,7.736403192 +1.3.6.1.4.1.14519.5.2.1.6279.6001.333145094436144085379032922488,-36.55628288,94.95448429,-231.0861394,8.208342207 +1.3.6.1.4.1.14519.5.2.1.6279.6001.334105754605642100456249422350,-120.8495868,38.33931617,-214.8832613,3.8850462 +1.3.6.1.4.1.14519.5.2.1.6279.6001.334517907433161353885866806005,-90.57045037,207.9808255,-397.6269191,12.57054118 +1.3.6.1.4.1.14519.5.2.1.6279.6001.334517907433161353885866806005,-105.1725776,139.3306893,-448.4343057,7.178922623 +1.3.6.1.4.1.14519.5.2.1.6279.6001.334517907433161353885866806005,-113.0089772,127.6639141,-453.0456329,8.244643239 +1.3.6.1.4.1.14519.5.2.1.6279.6001.336225579776978874775723463327,74.90098389,49.24864607,-272.2131935,6.906358753 +1.3.6.1.4.1.14519.5.2.1.6279.6001.336894364358709782463716339027,119.0033407,-77.2002687,-168.6785433,3.951407423 +1.3.6.1.4.1.14519.5.2.1.6279.6001.337005960787660957389988207064,-76.00397264,-74.92869851,-144.3113557,3.832603383 +1.3.6.1.4.1.14519.5.2.1.6279.6001.337845202462615014431060697507,87.92913193,-5.62348127,-78.69493667,10.26078692 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338104567770715523699587505022,33.41175886,64.8927258,-40.57820167,4.341079966 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338104567770715523699587505022,-90.27970946,74.93542164,-133.8851368,4.237778745 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338114620394879648539943280992,-78.23081813,21.39196957,-185.9204699,11.84107821 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338447145504282422142824032832,133.1840306,25.58478375,-208.4050921,4.12101305 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338875090785618956575597613546,-117.3851233,45.19195728,-257.4459001,5.452780772 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338875090785618956575597613546,-134.1902889,48.08074626,-239.5518182,4.163773675 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338875090785618956575597613546,-132.5650132,18.96298014,-228.7955644,4.568161742 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338875090785618956575597613546,103.1815309,47.86818853,-219.8350623,6.243459504 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338875090785618956575597613546,85.25214188,74.58500169,-205.0377632,3.82131275 +1.3.6.1.4.1.14519.5.2.1.6279.6001.338875090785618956575597613546,-102.1574605,-46.84750906,-174.9138243,5.106805338 +1.3.6.1.4.1.14519.5.2.1.6279.6001.339142594937666268384335506819,108.1375346,-9.028290781,-127.6592922,9.566936036 +1.3.6.1.4.1.14519.5.2.1.6279.6001.339546614783708685476232944897,-59.55816545,9.14828959,-95.45329765,16.63502176 +1.3.6.1.4.1.14519.5.2.1.6279.6001.339882192295517122002429068974,-68.66002474,-222.4854341,721.576668,6.470686725 +1.3.6.1.4.1.14519.5.2.1.6279.6001.340158437895922179455019686521,-107.5159318,-106.6040007,-155.5003217,5.32434611 +1.3.6.1.4.1.14519.5.2.1.6279.6001.346115813056769250958550383763,-91.44763653,-161.6158227,-83.1478899,4.911932277 +1.3.6.1.4.1.14519.5.2.1.6279.6001.362762275895885013176610377950,-66.077863,-80.56168862,-170.6863395,4.889664292 +1.3.6.1.4.1.14519.5.2.1.6279.6001.367204840301639918160517361062,-88.20063783,63.04192832,-106.3064074,7.734742324 +1.3.6.1.4.1.14519.5.2.1.6279.6001.387954549120924524005910602207,41.21933645,-169.5888219,-188.6252342,4.528739349 +1.3.6.1.4.1.14519.5.2.1.6279.6001.387954549120924524005910602207,-92.43802134,-160.7622717,-127.003377,4.945112775 +1.3.6.1.4.1.14519.5.2.1.6279.6001.390513733720659266816639651938,-21.40817655,5.000621102,-43.01868987,5.992452195 +1.3.6.1.4.1.14519.5.2.1.6279.6001.392861216720727557882279374324,-36.77629406,-34.59533297,-60.9137866,6.217909816 +1.3.6.1.4.1.14519.5.2.1.6279.6001.394470743585708729682444806008,42.14750822,-93.64201295,-89.8178088,5.295457654 +1.3.6.1.4.1.14519.5.2.1.6279.6001.395623571499047043765181005112,-64.11832825,-4.887440096,-85.9024469,5.105120807 +1.3.6.1.4.1.14519.5.2.1.6279.6001.397522780537301776672854630421,16.89279224,206.0055517,-53.00858628,11.47644347 +1.3.6.1.4.1.14519.5.2.1.6279.6001.397522780537301776672854630421,-86.9332203,218.2319275,-221.6654195,9.693203437 +1.3.6.1.4.1.14519.5.2.1.6279.6001.401389720232123950202941034290,-82.10323524,-41.63735095,-207.2455405,5.087935069 +1.3.6.1.4.1.14519.5.2.1.6279.6001.404364125369979066736354549484,97.16800868,-79.94056414,-202.9715324,5.063233243 +1.3.6.1.4.1.14519.5.2.1.6279.6001.404457313935200882843898832756,122.1608996,-197.2499255,-159.4693446,12.95113108 +1.3.6.1.4.1.14519.5.2.1.6279.6001.404768898286087278137462774930,82.98012239,225.3061366,-584.6161159,17.15288922 +1.3.6.1.4.1.14519.5.2.1.6279.6001.413896555982844732694353377538,126.6383304,-51.84356121,-199.6021014,4.862136589 +1.3.6.1.4.1.14519.5.2.1.6279.6001.413896555982844732694353377538,-41.46961577,39.41958903,-171.6209897,7.121051509 +1.3.6.1.4.1.14519.5.2.1.6279.6001.416701701108520592702405866796,47.82112531,56.01070133,-73.06979386,6.439255223 +1.3.6.1.4.1.14519.5.2.1.6279.6001.417815314896088956784723476543,-88.08860961,207.7635084,-571.9349406,3.900928245 +1.3.6.1.4.1.14519.5.2.1.6279.6001.419601611032172899567156073142,109.4087162,6.639637027,-191.5459318,3.820577768 +1.3.6.1.4.1.14519.5.2.1.6279.6001.430109407146633213496148200410,-44.935479,-106.3779813,-148.9946026,12.02215382 +1.3.6.1.4.1.14519.5.2.1.6279.6001.430109407146633213496148200410,97.59537431,-97.23526941,-216.3795429,7.418028913 +1.3.6.1.4.1.14519.5.2.1.6279.6001.430109407146633213496148200410,33.2035765,-121.3308637,-109.7314672,4.525236758 +1.3.6.1.4.1.14519.5.2.1.6279.6001.438308540025607517017949816111,-97.07004047,-23.31208254,-166.0109699,10.80320051 +1.3.6.1.4.1.14519.5.2.1.6279.6001.438308540025607517017949816111,-136.5376416,47.45753694,-191.6392867,7.851521411 +1.3.6.1.4.1.14519.5.2.1.6279.6001.439153572396640163898529626096,-106.9061926,-134.471772,-187.213428,7.600976518 +1.3.6.1.4.1.14519.5.2.1.6279.6001.440226700369921575481834344455,-104.3323085,-130.4591242,-81.17828567,12.30437661 +1.3.6.1.4.1.14519.5.2.1.6279.6001.443400977949406454649939526179,-88.50801052,131.345573,-271.1059173,4.510288907 +1.3.6.1.4.1.14519.5.2.1.6279.6001.443400977949406454649939526179,46.50497117,229.8924044,-310.5933997,4.462472935 +1.3.6.1.4.1.14519.5.2.1.6279.6001.450501966058662668272378865145,52.95010295,21.62343136,230.6859795,11.17547004 +1.3.6.1.4.1.14519.5.2.1.6279.6001.450501966058662668272378865145,97.32393157,-33.77077028,128.8311577,4.514863772 +1.3.6.1.4.1.14519.5.2.1.6279.6001.454273545863197752384437758130,1.251885508,77.30842113,-146.9519795,5.330056155 +1.3.6.1.4.1.14519.5.2.1.6279.6001.454273545863197752384437758130,67.93904669,-29.64640439,-125.7321771,6.16795392 +1.3.6.1.4.1.14519.5.2.1.6279.6001.458525794434429386945463560826,-19.66337758,20.48820018,-21.31695749,6.330288195 +1.3.6.1.4.1.14519.5.2.1.6279.6001.461155505515403114280165935891,-94.45393926,29.01531686,-208.9912079,8.128059459 +1.3.6.1.4.1.14519.5.2.1.6279.6001.463214953282361219537913355115,89.71484404,72.84152648,-235.9893669,11.23154253 +1.3.6.1.4.1.14519.5.2.1.6279.6001.466284753932369813717081722101,103.4749192,-182.666071,-102.0404523,3.885893197 +1.3.6.1.4.1.14519.5.2.1.6279.6001.478062284228419671253422844986,-54.71035427,80.77610592,-176.7413443,5.920275846 +1.3.6.1.4.1.14519.5.2.1.6279.6001.479402560265137632920333093071,-152.3569324,-22.28584934,-274.372396,7.88580587 +1.3.6.1.4.1.14519.5.2.1.6279.6001.479402560265137632920333093071,-140.77731,-19.60100137,-205.6472092,6.256102138 +1.3.6.1.4.1.14519.5.2.1.6279.6001.481278873893653517789960724156,-103.1325112,-5.774672551,-206.3554703,27.07544345 +1.3.6.1.4.1.14519.5.2.1.6279.6001.481278873893653517789960724156,32.96069525,35.98248454,-176.7836812,16.92306528 +1.3.6.1.4.1.14519.5.2.1.6279.6001.483655032093002252444764787700,154.4288878,28.97499705,-196.9548398,5.193342015 +1.3.6.1.4.1.14519.5.2.1.6279.6001.486999111981013268988489262668,98.89687283,104.1862012,-208.7759854,8.085638726 +1.3.6.1.4.1.14519.5.2.1.6279.6001.487268565754493433372433148666,119.2087756,11.45037434,-165.0398624,26.83708074 +1.3.6.1.4.1.14519.5.2.1.6279.6001.487268565754493433372433148666,-37.9016173,55.02791191,-80.00260537,17.71872916 +1.3.6.1.4.1.14519.5.2.1.6279.6001.487745546557477250336016826588,48.68312155,-15.3562681,-80.56923419,22.78152704 +1.3.6.1.4.1.14519.5.2.1.6279.6001.503980049263254396021509831276,83.04181413,50.63250635,-155.5115559,7.915780715 +1.3.6.1.4.1.14519.5.2.1.6279.6001.503980049263254396021509831276,-113.6831711,-27.84528163,-82.73840622,12.4582541 +1.3.6.1.4.1.14519.5.2.1.6279.6001.503980049263254396021509831276,-111.201589,37.52576027,-67.13579078,15.39279188 +1.3.6.1.4.1.14519.5.2.1.6279.6001.504845428620607044098514803031,122.0139844,24.02512622,-225.7265261,5.490544909 +1.3.6.1.4.1.14519.5.2.1.6279.6001.504845428620607044098514803031,-88.81651763,-74.16058624,-217.1773728,4.522057979 +1.3.6.1.4.1.14519.5.2.1.6279.6001.504845428620607044098514803031,-101.0307142,-45.9959128,-151.0599558,3.297324878 +1.3.6.1.4.1.14519.5.2.1.6279.6001.511347030803753100045216493273,60.77506053,74.1239696,-214.7823466,25.23320204 +1.3.6.1.4.1.14519.5.2.1.6279.6001.511347030803753100045216493273,-85.42103886,25.26172136,-220.8338299,9.756615445 +1.3.6.1.4.1.14519.5.2.1.6279.6001.511347030803753100045216493273,-108.5275162,-38.82524711,-199.2073071,10.98914009 +1.3.6.1.4.1.14519.5.2.1.6279.6001.513023675145166449943177283490,98.89299547,51.3099692,-80.74183737,7.936007136 +1.3.6.1.4.1.14519.5.2.1.6279.6001.518487185634324801733841260431,100.4478992,-88.72756916,-171.2353199,7.805767837 +1.3.6.1.4.1.14519.5.2.1.6279.6001.525937963993475482158828421281,128.0673817,67.86393899,-90.45140764,11.64560862 +1.3.6.1.4.1.14519.5.2.1.6279.6001.534006575256943390479252771547,-95.03957237,63.78027309,-94.86346155,12.80135622 +1.3.6.1.4.1.14519.5.2.1.6279.6001.534006575256943390479252771547,55.37992901,-25.7577385,-70.43270211,14.62904955 +1.3.6.1.4.1.14519.5.2.1.6279.6001.534006575256943390479252771547,123.6022363,-8.037283428,-208.2595121,7.283782817 +1.3.6.1.4.1.14519.5.2.1.6279.6001.534083630500464995109143618896,113.911431,-36.97202364,-139.1067807,4.315291242 +1.3.6.1.4.1.14519.5.2.1.6279.6001.534083630500464995109143618896,-87.29823867,56.27165698,-112.2906343,5.965579845 +1.3.6.1.4.1.14519.5.2.1.6279.6001.534083630500464995109143618896,-42.90649318,-3.298740043,-115.1038593,5.090964239 +1.3.6.1.4.1.14519.5.2.1.6279.6001.550599855064600241623943717588,-48.64254924,100.9304096,-200.037037,4.890021449 +1.3.6.1.4.1.14519.5.2.1.6279.6001.557875302364105947813979213632,-28.41228581,68.09366695,-217.5060488,7.234065071 +1.3.6.1.4.1.14519.5.2.1.6279.6001.557875302364105947813979213632,-42.9563814,58.59938953,-185.6246292,5.897380231 +1.3.6.1.4.1.14519.5.2.1.6279.6001.557875302364105947813979213632,105.1933092,48.21925187,-129.5645198,6.131649732 +1.3.6.1.4.1.14519.5.2.1.6279.6001.558286136379689377915919180358,-77.77160404,-11.38994533,-58.0353619,16.72146339 +1.3.6.1.4.1.14519.5.2.1.6279.6001.561458563853929400124470098603,-113.5220772,-36.28177026,-185.2756636,6.999823116 +1.3.6.1.4.1.14519.5.2.1.6279.6001.561458563853929400124470098603,59.33099578,-24.99237386,-197.0399122,8.735774018 +1.3.6.1.4.1.14519.5.2.1.6279.6001.566816709786169715745131047975,-124.6694679,21.09709755,-169.6039762,6.731878569 +1.3.6.1.4.1.14519.5.2.1.6279.6001.569096986145782511000054443951,68.58568744,-67.75578772,-143.4967682,5.572904514 +1.3.6.1.4.1.14519.5.2.1.6279.6001.569096986145782511000054443951,-48.13074393,-63.7034127,-63.36622225,5.484694873 +1.3.6.1.4.1.14519.5.2.1.6279.6001.584871944187559733312703328980,71.57549333,73.92373635,-83.81039939,4.653858021 +1.3.6.1.4.1.14519.5.2.1.6279.6001.592821488053137951302246128864,112.2403927,-132.0813274,-179.2208201,10.1269398 +1.3.6.1.4.1.14519.5.2.1.6279.6001.592821488053137951302246128864,69.81421013,-130.6756074,-81.60242179,5.700892679 +1.3.6.1.4.1.14519.5.2.1.6279.6001.603126300703296693942875967838,-31.90828695,27.18117285,-170.1513701,10.16765351 +1.3.6.1.4.1.14519.5.2.1.6279.6001.603126300703296693942875967838,65.99742568,108.8944115,-168.7229948,7.918815315 +1.3.6.1.4.1.14519.5.2.1.6279.6001.603126300703296693942875967838,-126.4570776,46.47158404,-203.9176616,7.023509324 +1.3.6.1.4.1.14519.5.2.1.6279.6001.603126300703296693942875967838,103.1762058,62.99828473,-152.2623412,5.210020858 +1.3.6.1.4.1.14519.5.2.1.6279.6001.603166427542096384265514998412,71.20286623,48.41022668,-148.644687,4.968821175 +1.3.6.1.4.1.14519.5.2.1.6279.6001.613212850444255764524630781782,-25.81676365,22.03533828,-188.047378,22.23698113 +1.3.6.1.4.1.14519.5.2.1.6279.6001.613212850444255764524630781782,-22.96609737,32.46155666,-207.3871693,18.40907555 +1.3.6.1.4.1.14519.5.2.1.6279.6001.614147706162329660656328811671,-43.53528889,61.08229652,-176.67486,12.55350151 +1.3.6.1.4.1.14519.5.2.1.6279.6001.616033753016904899083676284739,-39.56968699,112.6564673,-173.7075034,20.88367551 +1.3.6.1.4.1.14519.5.2.1.6279.6001.616033753016904899083676284739,-59.91906947,-50.47767665,-171.9343744,6.009893707 +1.3.6.1.4.1.14519.5.2.1.6279.6001.616033753016904899083676284739,-12.14726809,80.91852167,-147.9105199,6.872010445 +1.3.6.1.4.1.14519.5.2.1.6279.6001.616033753016904899083676284739,79.1758748,56.23553805,-153.669653,8.222297439 +1.3.6.1.4.1.14519.5.2.1.6279.6001.618434772073433276874225174904,25.20834972,15.69573749,-34.37172704,4.932363969 +1.3.6.1.4.1.14519.5.2.1.6279.6001.621916089407825046337959219998,-96.40444755,43.84058194,-155.3710194,11.48732767 +1.3.6.1.4.1.14519.5.2.1.6279.6001.624425075947752229712087113746,-73.15560515,-61.94144092,-261.6003068,21.57854728 +1.3.6.1.4.1.14519.5.2.1.6279.6001.625270601160880745954773142570,-107.9307848,46.0643806,-143.1468417,21.87973183 +1.3.6.1.4.1.14519.5.2.1.6279.6001.627998298349675613581885874395,127.2929105,-151.0329229,-245.1816979,7.925895827 +1.3.6.1.4.1.14519.5.2.1.6279.6001.631047517458234322522264161877,-82.14636636,96.90948919,-189.7448571,4.825085741 +1.3.6.1.4.1.14519.5.2.1.6279.6001.640729228179368154416184318668,-112.7948634,-227.3130252,-199.2932673,6.21739005 +1.3.6.1.4.1.14519.5.2.1.6279.6001.652347820272212119124022644822,-96.28090411,53.44917319,-196.1767001,17.72422138 +1.3.6.1.4.1.14519.5.2.1.6279.6001.655242448149322898770987310561,-45.91015481,-9.409611049,-306.9524878,20.11629595 +1.3.6.1.4.1.14519.5.2.1.6279.6001.658611160253017715059194304729,-69.16078576,78.75756088,-37.14577011,6.265624249 +1.3.6.1.4.1.14519.5.2.1.6279.6001.658611160253017715059194304729,-79.87794958,57.02653734,-26.88889866,5.754504541 +1.3.6.1.4.1.14519.5.2.1.6279.6001.663019255629770796363333877035,-42.44484442,113.5055583,-553.6117319,4.213062603 +1.3.6.1.4.1.14519.5.2.1.6279.6001.669435869708883155232318480131,-23.13885344,22.15688589,-179.83942,21.15058188 +1.3.6.1.4.1.14519.5.2.1.6279.6001.670107649586205629860363487713,-27.135051,88.96329931,-193.5501301,6.967714598 +1.3.6.1.4.1.14519.5.2.1.6279.6001.674809958213117379592437424616,109.1751121,26.59850287,-76.18,3.831113189 +1.3.6.1.4.1.14519.5.2.1.6279.6001.674809958213117379592437424616,78.89203459,-34.2208228,-87.03257748,4.703046282 +1.3.6.1.4.1.14519.5.2.1.6279.6001.675543413149938600000570588203,-105.5241217,-220.7395969,-229.5932189,4.877679583 +1.3.6.1.4.1.14519.5.2.1.6279.6001.675543413149938600000570588203,105.9839995,-105.1853375,-207.0617303,21.34312682 +1.3.6.1.4.1.14519.5.2.1.6279.6001.690929968028676628605553365896,73.04326903,8.218822771,-54.18659009,15.12543067 +1.3.6.1.4.1.14519.5.2.1.6279.6001.692598144815688523679745963696,-34.8396787,6.548600341,-86.6156801,5.839687338 +1.3.6.1.4.1.14519.5.2.1.6279.6001.692598144815688523679745963696,119.7638134,-20.00968507,-256.6079327,8.101613434 +1.3.6.1.4.1.14519.5.2.1.6279.6001.693480911433291675609148051914,-84.23627067,112.2743681,-617.8992396,5.489049464 +1.3.6.1.4.1.14519.5.2.1.6279.6001.693480911433291675609148051914,-55.76149868,176.2757884,-658.7383274,5.738087494 +1.3.6.1.4.1.14519.5.2.1.6279.6001.712472578497712558367294720243,-93.45976658,60.14386675,1523.530064,7.674509542 +1.3.6.1.4.1.14519.5.2.1.6279.6001.716498695101447665580610403574,-67.81761952,-108.8073081,-97.20666958,8.091312581 +1.3.6.1.4.1.14519.5.2.1.6279.6001.724251104254976962355686318345,93.95958277,182.8100616,-519.1660606,5.525559329 +1.3.6.1.4.1.14519.5.2.1.6279.6001.724251104254976962355686318345,-60.53831978,148.0546371,-648.3714527,7.244054524 +1.3.6.1.4.1.14519.5.2.1.6279.6001.724562063158320418413995627171,-5.325107574,-33.87651995,-217.3421317,9.233993542 +1.3.6.1.4.1.14519.5.2.1.6279.6001.725023183844147505748475581290,-65.27894703,214.8259826,-493.7114427,17.30912384 +1.3.6.1.4.1.14519.5.2.1.6279.6001.725236073737175770730904408416,-115.7646823,41.54110075,-44.56573092,7.57464859 +1.3.6.1.4.1.14519.5.2.1.6279.6001.733642690503782454656013446707,-88.68591428,19.40153987,-150.6757957,5.82215948 +1.3.6.1.4.1.14519.5.2.1.6279.6001.741709061958490690246385302477,-88.09531256,31.8410226,-130.6412308,5.313909599 +1.3.6.1.4.1.14519.5.2.1.6279.6001.741709061958490690246385302477,114.0392079,-22.69021912,-161.1714553,20.91111634 +1.3.6.1.4.1.14519.5.2.1.6279.6001.747803439040091794717626507402,59.49693039,-6.696593702,-135.9209832,14.16781391 +1.3.6.1.4.1.14519.5.2.1.6279.6001.750792629100457382099842515038,-65.36501369,197.6526469,-672.09834,12.449031 +1.3.6.1.4.1.14519.5.2.1.6279.6001.750792629100457382099842515038,35.41588895,217.9560696,-761.0518948,4.928294708 +1.3.6.1.4.1.14519.5.2.1.6279.6001.752756872840730509471096155114,56.39315434,67.68008675,-64.67445255,19.65387738 +1.3.6.1.4.1.14519.5.2.1.6279.6001.756684168227383088294595834066,-100.1410226,-136.6641691,-233.6640856,3.986088287 +1.3.6.1.4.1.14519.5.2.1.6279.6001.765459236550358748053283544075,71.95630178,105.2183743,-534.7339804,7.47852111 +1.3.6.1.4.1.14519.5.2.1.6279.6001.765459236550358748053283544075,35.81885532,171.3443017,-470.1967334,8.727947616 +1.3.6.1.4.1.14519.5.2.1.6279.6001.765930210026773090100532964804,-68.68536654,206.1975285,-685.8740029,17.15613456 +1.3.6.1.4.1.14519.5.2.1.6279.6001.765930210026773090100532964804,59.76390847,195.5534644,-540.4216151,4.25605482 +1.3.6.1.4.1.14519.5.2.1.6279.6001.768276876111112560631432843476,67.69849596,-135.4208561,-167.4867196,6.672413036 +1.3.6.1.4.1.14519.5.2.1.6279.6001.771741891125176943862272696845,97.23149359,-114.9186955,-134.8731105,4.997750194 +1.3.6.1.4.1.14519.5.2.1.6279.6001.771831598853841017505646275338,37.94622827,32.75575024,-37.16949699,17.141662 +1.3.6.1.4.1.14519.5.2.1.6279.6001.774060103415303828812229821954,-103.7436828,26.44662563,-169.0049337,5.687246746 +1.3.6.1.4.1.14519.5.2.1.6279.6001.774060103415303828812229821954,88.80269516,10.87542039,-124.7758984,5.834016122 +1.3.6.1.4.1.14519.5.2.1.6279.6001.776800177074349870648765614630,-84.41936241,5.401025417,-181.75,3.530973761 +1.3.6.1.4.1.14519.5.2.1.6279.6001.779493719385047675154892222907,-71.66642065,-60.40890108,-135.7326014,13.05097889 +1.3.6.1.4.1.14519.5.2.1.6279.6001.779493719385047675154892222907,92.05387089,-11.90929477,-96.7985152,12.97315475 +1.3.6.1.4.1.14519.5.2.1.6279.6001.780558315515979171413904604168,-107.3201535,-96.36995616,-211.97124,15.353919 +1.3.6.1.4.1.14519.5.2.1.6279.6001.792381786708289670758399079830,98.70247953,160.5531927,-418.7378112,13.34340431 +1.3.6.1.4.1.14519.5.2.1.6279.6001.792381786708289670758399079830,110.0184007,156.6589351,-443.8877143,7.199653232 +1.3.6.1.4.1.14519.5.2.1.6279.6001.797637294244261543517154417124,140.9426504,-36.00432282,-249.8855528,4.990997154 +1.3.6.1.4.1.14519.5.2.1.6279.6001.799582546798528864710752164515,-128.3638897,53.10545586,-142.1335065,5.663498473 +1.3.6.1.4.1.14519.5.2.1.6279.6001.801945620899034889998809817499,-75.74263828,37.46097648,-158.6875366,17.2320792 +1.3.6.1.4.1.14519.5.2.1.6279.6001.803987517543436570820681016103,43.1450278,-98.0728056,-137.9507708,5.049919663 +1.3.6.1.4.1.14519.5.2.1.6279.6001.803987517543436570820681016103,-64.18284219,-241.4469848,-232.7504669,4.255683674 +1.3.6.1.4.1.14519.5.2.1.6279.6001.805925269324902055566754756843,-66.69313488,97.04521987,-267.3090047,17.3362496 +1.3.6.1.4.1.14519.5.2.1.6279.6001.822128649427327893802314908658,-28.61357126,84.44425907,-186.5613999,6.545987665 +1.3.6.1.4.1.14519.5.2.1.6279.6001.826812708000318290301835871780,-41.56714983,-53.18554491,-128.3744895,7.98502287 +1.3.6.1.4.1.14519.5.2.1.6279.6001.826812708000318290301835871780,-53.61916799,-51.11956108,-138.5867834,5.313818163 +1.3.6.1.4.1.14519.5.2.1.6279.6001.826829446346820089862659555750,-48.61355881,-4.912857615,-81.28505781,8.349646372 +1.3.6.1.4.1.14519.5.2.1.6279.6001.826829446346820089862659555750,45.60556588,-33.2289356,-141.7458304,12.03275908 +1.3.6.1.4.1.14519.5.2.1.6279.6001.826829446346820089862659555750,56.74074349,-38.92320764,-214.436647,17.60397571 +1.3.6.1.4.1.14519.5.2.1.6279.6001.826829446346820089862659555750,42.18883719,76.001323,-230.0913994,9.883424209 +1.3.6.1.4.1.14519.5.2.1.6279.6001.826829446346820089862659555750,23.6228609,78.54201315,-240.7741212,11.88422357 +1.3.6.1.4.1.14519.5.2.1.6279.6001.826829446346820089862659555750,17.20501649,8.938617838,-256.5635574,8.118983019 +1.3.6.1.4.1.14519.5.2.1.6279.6001.832260670372728970918746541371,-127.5045329,80.97395179,-221.2936606,6.13100107 +1.3.6.1.4.1.14519.5.2.1.6279.6001.832260670372728970918746541371,22.42724374,36.28895442,-86.83608126,6.246461343 +1.3.6.1.4.1.14519.5.2.1.6279.6001.837810280808122125183730411210,-82.8192572,-11.50483317,-154.0991378,9.930839143 +1.3.6.1.4.1.14519.5.2.1.6279.6001.842317928015463083368074520378,-99.09320346,-86.55207171,-212.4084134,4.114597416 +1.3.6.1.4.1.14519.5.2.1.6279.6001.850739282072340578344345230132,-47.53726329,-35.79681529,-137.3325467,13.64151987 +1.3.6.1.4.1.14519.5.2.1.6279.6001.861997885565255340442123234170,49.35261574,119.8406053,-209.6983844,6.943515582 +1.3.6.1.4.1.14519.5.2.1.6279.6001.866845763956586959109892274084,-85.60344693,29.06733423,-107.8464475,7.296371673 +1.3.6.1.4.1.14519.5.2.1.6279.6001.868211851413924881662621747734,-79.93305233,81.93715229,-169.4337204,8.368487089 +1.3.6.1.4.1.14519.5.2.1.6279.6001.868211851413924881662621747734,-7.731399539,58.53652256,-110.5452567,5.127950372 +1.3.6.1.4.1.14519.5.2.1.6279.6001.868211851413924881662621747734,-22.95182604,78.57115637,-136.9010248,6.430802339 +1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474,-56.87789388,169.460217,960.3534978,9.496379061 +1.3.6.1.4.1.14519.5.2.1.6279.6001.882070241245008756731854510592,-98.7927099,25.94084427,-170.220324,5.414311238 +1.3.6.1.4.1.14519.5.2.1.6279.6001.882070241245008756731854510592,132.7190437,16.66471751,-130.3087179,10.43827943 +1.3.6.1.4.1.14519.5.2.1.6279.6001.882070241245008756731854510592,92.92005202,-18.99832369,-120.0190349,6.500934975 +1.3.6.1.4.1.14519.5.2.1.6279.6001.882070241245008756731854510592,83.22331812,36.04473009,-47.98024541,16.9453939 +1.3.6.1.4.1.14519.5.2.1.6279.6001.892375496445736188832556446335,59.08821583,14.43406702,-83.77592126,17.41146394 +1.3.6.1.4.1.14519.5.2.1.6279.6001.897684031374557757145405000951,-106.7733135,143.1341348,-711.1116663,15.13080337 +1.3.6.1.4.1.14519.5.2.1.6279.6001.897684031374557757145405000951,-98.29382039,97.91485939,-707.3089425,10.15782823 +1.3.6.1.4.1.14519.5.2.1.6279.6001.897684031374557757145405000951,47.75090035,187.9528525,-731.3591439,18.15623418 +1.3.6.1.4.1.14519.5.2.1.6279.6001.897684031374557757145405000951,-88.67952396,200.9356022,-729.0906071,5.963289468 +1.3.6.1.4.1.14519.5.2.1.6279.6001.897684031374557757145405000951,-102.6914791,107.6412561,-705.1730059,9.74508123 +1.3.6.1.4.1.14519.5.2.1.6279.6001.898642529028521482602829374444,-42.20067378,92.20715648,-566.5895507,4.678130013 +1.3.6.1.4.1.14519.5.2.1.6279.6001.898642529028521482602829374444,74.39962496,112.6510258,-534.7158811,4.581766613 +1.3.6.1.4.1.14519.5.2.1.6279.6001.900182736599353600185270496549,-91.94884498,18.62246749,-201.7325834,4.349739416 +1.3.6.1.4.1.14519.5.2.1.6279.6001.900182736599353600185270496549,78.101266,27.79925115,-92.87617133,4.790997214 +1.3.6.1.4.1.14519.5.2.1.6279.6001.905371958588660410240398317235,109.1166375,48.58951079,-120.8920582,21.58311204 +1.3.6.1.4.1.14519.5.2.1.6279.6001.908250781706513856628130123235,-59.56249977,-21.60758611,-184.8701107,6.09648564 +1.3.6.1.4.1.14519.5.2.1.6279.6001.908250781706513856628130123235,117.7817616,40.54149725,-69.84620605,8.605650458 +1.3.6.1.4.1.14519.5.2.1.6279.6001.908250781706513856628130123235,-62.21867479,92.28860997,-213.1976422,4.670798042 +1.3.6.1.4.1.14519.5.2.1.6279.6001.910435939545691201820711078950,68.24385029,83.94075118,-296.8924584,7.068564225 +1.3.6.1.4.1.14519.5.2.1.6279.6001.910435939545691201820711078950,53.46933113,86.9585636,-244.2232438,8.70493777 +1.3.6.1.4.1.14519.5.2.1.6279.6001.910435939545691201820711078950,-91.36992413,-6.167829911,-218.8338691,6.162972621 +1.3.6.1.4.1.14519.5.2.1.6279.6001.910435939545691201820711078950,-113.6850973,61.06780576,-204.5110935,6.67785376 +1.3.6.1.4.1.14519.5.2.1.6279.6001.910435939545691201820711078950,30.71558185,-22.25726581,-151.398632,14.22065706 +1.3.6.1.4.1.14519.5.2.1.6279.6001.910435939545691201820711078950,-64.08663525,83.53715541,-148.0483813,7.901903032 +1.3.6.1.4.1.14519.5.2.1.6279.6001.910435939545691201820711078950,16.20270684,-28.68871508,-142.8056088,8.846172298 +1.3.6.1.4.1.14519.5.2.1.6279.6001.910607280658963002048724648683,54.60755313,121.4927286,-272.9701791,4.866308788 +1.3.6.1.4.1.14519.5.2.1.6279.6001.922852847124879997825997808179,-115.2749392,49.69837489,-162.6187699,11.8061039 +1.3.6.1.4.1.14519.5.2.1.6279.6001.922852847124879997825997808179,-52.79779369,-31.54579675,-131.8715489,9.616085612 +1.3.6.1.4.1.14519.5.2.1.6279.6001.931383239747372227838946053237,22.51629581,85.5374487,-195.8574424,6.135102887 +1.3.6.1.4.1.14519.5.2.1.6279.6001.931383239747372227838946053237,-87.92037654,44.6792921,-151.461638,6.380071404 +1.3.6.1.4.1.14519.5.2.1.6279.6001.935683764293840351008008793409,64.13393756,71.91638535,-126.1763207,8.501262355 +1.3.6.1.4.1.14519.5.2.1.6279.6001.935683764293840351008008793409,-74.89196487,64.17743419,-112.3986425,6.267512807 +1.3.6.1.4.1.14519.5.2.1.6279.6001.939152384493874708850321969356,107.4054265,-98.91303831,-221.6180235,5.850666721 +1.3.6.1.4.1.14519.5.2.1.6279.6001.943403138251347598519939390311,-46.94966448,72.63645381,-95.64452131,27.44242293 +1.3.6.1.4.1.14519.5.2.1.6279.6001.944888107209008719031293531091,40.31479504,-80.72430976,-149.9947759,8.687060064 +1.3.6.1.4.1.14519.5.2.1.6279.6001.946129570505893110165820050204,121.9087601,-67.41580071,-158.8001927,9.061649841 +1.3.6.1.4.1.14519.5.2.1.6279.6001.948414623428298219623354433437,-84.15184617,21.81634424,-184.7857155,18.98004463 +1.3.6.1.4.1.14519.5.2.1.6279.6001.948414623428298219623354433437,-42.46522232,-36.85450686,-123.8759754,19.92726356 +1.3.6.1.4.1.14519.5.2.1.6279.6001.952265563663939823135367733681,-48.06213019,-65.09681526,222.2909831,6.529558333 +1.3.6.1.4.1.14519.5.2.1.6279.6001.955688628308192728558382581802,-112.745883,161.7423069,-498.9031461,5.052577951 +1.3.6.1.4.1.14519.5.2.1.6279.6001.955688628308192728558382581802,-40.21106759,238.0640154,-516.3798885,5.221271945 +1.3.6.1.4.1.14519.5.2.1.6279.6001.955688628308192728558382581802,87.07665986,222.2505983,-465.3562053,12.11647614 +1.3.6.1.4.1.14519.5.2.1.6279.6001.955688628308192728558382581802,55.97275588,250.603657,-517.7658827,6.319450365 +1.3.6.1.4.1.14519.5.2.1.6279.6001.955688628308192728558382581802,109.2006745,197.3028445,-595.8870474,4.519029411 +1.3.6.1.4.1.14519.5.2.1.6279.6001.961063442349005937536597225349,-72.86080331,0.731478362,-100.394452,4.521001895 +1.3.6.1.4.1.14519.5.2.1.6279.6001.964952370561266624992539111877,35.1062029,-25.06165086,-90.50125946,8.620604671 +1.3.6.1.4.1.14519.5.2.1.6279.6001.964952370561266624992539111877,56.35066709,52.95163062,-83.7822307,14.91474445 +1.3.6.1.4.1.14519.5.2.1.6279.6001.964952370561266624992539111877,-70.91353508,46.00620624,-78.16403224,5.973405668 +1.3.6.1.4.1.14519.5.2.1.6279.6001.964952370561266624992539111877,-75.55888225,15.94288167,-80.50207913,4.723904059 +1.3.6.1.4.1.14519.5.2.1.6279.6001.970264865033574190975654369557,-109.4285094,59.59670322,-162.9329603,3.841244999 +1.3.6.1.4.1.14519.5.2.1.6279.6001.970428941353693253759289796610,-114.2130699,67.58978532,-136.7936142,18.67552564 +1.3.6.1.4.1.14519.5.2.1.6279.6001.970428941353693253759289796610,-116.037038,-8.478867028,-126.2935495,11.53208237 +1.3.6.1.4.1.14519.5.2.1.6279.6001.975426625618184773401026809852,52.99602068,85.06797975,-105.4608119,8.117918353 +1.3.6.1.4.1.14519.5.2.1.6279.6001.979083010707182900091062408058,-104.4419748,57.83942814,-124.3083633,7.310399552 +1.3.6.1.4.1.14519.5.2.1.6279.6001.994459772950022352718462251777,-160.8562978,-28.56034944,-269.1687276,5.053693982 +1.3.6.1.4.1.14519.5.2.1.6279.6001.994459772950022352718462251777,-102.1895703,-73.86576556,-220.5362409,4.55610095 +1.3.6.1.4.1.14519.5.2.1.6279.6001.994459772950022352718462251777,-37.53540905,64.04194931,-127.6871014,4.3573681 +1.3.6.1.4.1.14519.5.2.1.6279.6001.997611074084993415992563148335,43.19611173,74.4384859,-200.5233136,4.277202539 +1.3.6.1.4.1.14519.5.2.1.6279.6001.997611074084993415992563148335,-21.95847826,33.48609566,-155.2920257,23.80291305 diff --git a/data/LUNA16/raw/names.txt b/dataset/LUNA16/raw/names.txt similarity index 100% rename from data/LUNA16/raw/names.txt rename to dataset/LUNA16/raw/names.txt diff --git a/dataset/LUNA16/run.sh b/dataset/LUNA16/run.sh new file mode 100644 index 0000000..46ff43b --- /dev/null +++ b/dataset/LUNA16/run.sh @@ -0,0 +1,18 @@ +gpu=0 + + +default_root="." +default_subdir="raw" + +# تعیین مسیر روت و دایرکتوری بر اساس ورودی یا استفاده از مسیر پیش‌فرض +root_dir=${1:-$default_root} +sub_dir=${2:-$default_subdir} + +echo "مسیر روت: $root_dir" +echo "مسیر دیتا: $sub_dir" + +while IFS= read -r name; do + echo $name + CUDA_VISIBLE_DEVICES=$gpu python main.py -n $name -r $root_dir -d $sub_dir + ls -l processed/images/ | grep "^-" | wc -l +done < root_dir/sub_dir/names.txt \ No newline at end of file diff --git a/data/LUNA16/splits.json b/dataset/LUNA16/splits.json similarity index 100% rename from data/LUNA16/splits.json rename to dataset/LUNA16/splits.json diff --git a/data/base/dataset.py b/dataset/base/dataset.py similarity index 100% rename from data/base/dataset.py rename to dataset/base/dataset.py diff --git a/data/base/projector.py b/dataset/base/projector.py similarity index 100% rename from data/base/projector.py rename to dataset/base/projector.py diff --git a/data/base/saver.py b/dataset/base/saver.py similarity index 100% rename from data/base/saver.py rename to dataset/base/saver.py diff --git a/data/base/utils.py b/dataset/base/utils.py similarity index 100% rename from data/base/utils.py rename to dataset/base/utils.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d49dd96 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +matplotlib +numpy +PyYAML +scipy +SimpleITK +torch +tqdm +cython +easydict +scikit-image \ No newline at end of file diff --git a/text.txt b/text.txt deleted file mode 100644 index e69de29..0000000