Merge branch 'optimizations' of joel/RandomSurvivalForests into master

This commit is contained in:
Joel Therrien 2019-01-14 19:08:14 +00:00 committed by Gitea
commit 7a5a8ab0fc
58 changed files with 2361 additions and 671 deletions

93
pmd-rules.xml Normal file
View file

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<ruleset name="Default Maven PMD Plugin Ruleset"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description>
The default ruleset used by the Maven PMD Plugin, when no other ruleset is specified.
It contains the rules of the old (pre PMD 6.0.0) rulesets java-basic, java-empty, java-imports,
java-unnecessary, java-unusedcode.
This ruleset might be used as a starting point for an own customized ruleset [0].
[0] https://pmd.github.io/latest/pmd_userdocs_understanding_rulesets.html
</description>
<rule ref="category/java/bestpractices.xml/AvoidUsingHardCodedIP" />
<rule ref="category/java/bestpractices.xml/CheckResultSet" />
<rule ref="category/java/bestpractices.xml/UnusedImports" />
<rule ref="category/java/bestpractices.xml/UnusedFormalParameter" />
<rule ref="category/java/bestpractices.xml/UnusedLocalVariable" />
<rule ref="category/java/bestpractices.xml/UnusedPrivateField" />
<rule ref="category/java/bestpractices.xml/UnusedPrivateMethod" />
<rule ref="category/java/codestyle.xml/DontImportJavaLang" />
<rule ref="category/java/codestyle.xml/DuplicateImports" />
<rule ref="category/java/codestyle.xml/ExtendsObject" />
<rule ref="category/java/codestyle.xml/ForLoopShouldBeWhileLoop" />
<rule ref="category/java/codestyle.xml/TooManyStaticImports" />
<rule ref="category/java/codestyle.xml/UnnecessaryFullyQualifiedName" />
<rule ref="category/java/codestyle.xml/UnnecessaryModifier" />
<rule ref="category/java/codestyle.xml/UnnecessaryReturn" />
<!--<rule ref="category/java/codestyle.xml/UselessParentheses" /> Sometimes parentheses are used for human eyes -->
<rule ref="category/java/codestyle.xml/UselessQualifiedThis" />
<rule ref="category/java/design.xml/CollapsibleIfStatements" />
<rule ref="category/java/design.xml/SimplifiedTernary" />
<rule ref="category/java/design.xml/UselessOverridingMethod" />
<rule ref="category/java/errorprone.xml/AvoidBranchingStatementAsLastInLoop" />
<rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
<rule ref="category/java/errorprone.xml/AvoidMultipleUnaryOperators" />
<rule ref="category/java/errorprone.xml/AvoidUsingOctalValues" />
<rule ref="category/java/errorprone.xml/BrokenNullCheck" />
<rule ref="category/java/errorprone.xml/CheckSkipResult" />
<rule ref="category/java/errorprone.xml/ClassCastExceptionWithToArray" />
<rule ref="category/java/errorprone.xml/DontUseFloatTypeForLoopIndices" />
<rule ref="category/java/errorprone.xml/EmptyCatchBlock" />
<rule ref="category/java/errorprone.xml/EmptyFinallyBlock" />
<rule ref="category/java/errorprone.xml/EmptyIfStmt" />
<rule ref="category/java/errorprone.xml/EmptyInitializer" />
<rule ref="category/java/errorprone.xml/EmptyStatementBlock" />
<rule ref="category/java/errorprone.xml/EmptyStatementNotInLoop" />
<rule ref="category/java/errorprone.xml/EmptySwitchStatements" />
<rule ref="category/java/errorprone.xml/EmptySynchronizedBlock" />
<rule ref="category/java/errorprone.xml/EmptyTryBlock" />
<rule ref="category/java/errorprone.xml/EmptyWhileStmt" />
<rule ref="category/java/errorprone.xml/ImportFromSamePackage" />
<rule ref="category/java/errorprone.xml/JumbledIncrementer" />
<rule ref="category/java/errorprone.xml/MisplacedNullCheck" />
<rule ref="category/java/errorprone.xml/OverrideBothEqualsAndHashcode" />
<rule ref="category/java/errorprone.xml/ReturnFromFinallyBlock" />
<rule ref="category/java/errorprone.xml/UnconditionalIfStatement" />
<rule ref="category/java/errorprone.xml/UnnecessaryConversionTemporary" />
<rule ref="category/java/errorprone.xml/UnusedNullCheckInEquals" />
<rule ref="category/java/errorprone.xml/UselessOperationOnImmutable" />
<rule ref="category/java/multithreading.xml/AvoidThreadGroup" />
<rule ref="category/java/multithreading.xml/DontCallThreadRun" />
<rule ref="category/java/multithreading.xml/DoubleCheckedLocking" />
<rule ref="category/java/performance.xml/BigIntegerInstantiation" />
<rule ref="category/java/performance.xml/BooleanInstantiation" />
</ruleset>

23
pom.xml
View file

@ -13,6 +13,9 @@
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<jackson.version>2.9.6</jackson.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
@ -89,9 +92,27 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.11.0</version>
<executions>
<execution>
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<rulesets>
<!-- Custom local file system rule set -->
<ruleset>${project.basedir}/pmd-rules.xml</ruleset>
</rulesets>
</configuration>
</plugin>
</plugins>
</build>
</project>

View file

@ -4,20 +4,20 @@ import lombok.RequiredArgsConstructor;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.util.Random;
@RequiredArgsConstructor
public class Bootstrapper<T> {
final private List<T> originalData;
public List<T> bootstrap(){
public List<T> bootstrap(Random random){
final int n = originalData.size();
final List<T> newList = new ArrayList<>(n);
for(int i=0; i<n; i++){
final int index = ThreadLocalRandom.current().nextInt(n);
final int index = random.nextInt(n);
newList.add(originalData.get(index));
}

View file

@ -17,7 +17,7 @@ public class CovariateRow implements Serializable {
@Getter
private final int id;
public Covariate.Value<?> getCovariateValue(Covariate covariate){
public <V> Covariate.Value<V> getCovariateValue(Covariate<V> covariate){
return valueArray[covariate.getIndex()];
}

View file

@ -58,7 +58,7 @@ public class DataLoader {
throw new IllegalArgumentException("Tree directory must be a directory!");
}
final File[] treeFiles = folder.listFiles(((file, s) -> s.endsWith(".tree")));
final File[] treeFiles = folder.listFiles((file, s) -> s.endsWith(".tree"));
final List<File> treeFileList = Arrays.asList(treeFiles);
Collections.sort(treeFileList, Comparator.comparing(File::getName));

View file

@ -1,9 +1,9 @@
package ca.joeltherrien.randomforest;
import ca.joeltherrien.randomforest.covariates.BooleanCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.BooleanCovariateSettings;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.covariates.FactorCovariateSettings;
import ca.joeltherrien.randomforest.covariates.NumericCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.FactorCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.NumericCovariateSettings;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskErrorRateCalculator;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskFunctions;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;

View file

@ -17,6 +17,8 @@ public class Row<Y> extends CovariateRow {
}
public Y getResponse() {
return this.response;
}

View file

@ -1,7 +1,7 @@
package ca.joeltherrien.randomforest;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.covariates.CovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.CovariateSettings;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponseWithCensorTime;
import ca.joeltherrien.randomforest.responses.competingrisk.combiner.CompetingRiskFunctionCombiner;
@ -10,7 +10,6 @@ import ca.joeltherrien.randomforest.responses.competingrisk.differentiator.GrayL
import ca.joeltherrien.randomforest.responses.competingrisk.differentiator.GrayLogRankSingleGroupDifferentiator;
import ca.joeltherrien.randomforest.responses.competingrisk.differentiator.LogRankMultipleGroupDifferentiator;
import ca.joeltherrien.randomforest.responses.competingrisk.differentiator.LogRankSingleGroupDifferentiator;
import ca.joeltherrien.randomforest.responses.regression.MeanGroupDifferentiator;
import ca.joeltherrien.randomforest.responses.regression.MeanResponseCombiner;
import ca.joeltherrien.randomforest.responses.regression.WeightedVarianceGroupDifferentiator;
import ca.joeltherrien.randomforest.tree.GroupDifferentiator;
@ -68,9 +67,6 @@ public class Settings {
GROUP_DIFFERENTIATOR_MAP.put(name.toLowerCase(), groupDifferentiatorConstructor);
}
static{
registerGroupDifferentiatorConstructor("MeanGroupDifferentiator",
(node) -> new MeanGroupDifferentiator()
);
registerGroupDifferentiatorConstructor("WeightedVarianceGroupDifferentiator",
(node) -> new WeightedVarianceGroupDifferentiator()
);

View file

@ -1,11 +1,12 @@
package ca.joeltherrien.randomforest.covariates;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.tree.Split;
import ca.joeltherrien.randomforest.utils.SingletonIterator;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
@RequiredArgsConstructor
public final class BooleanCovariate implements Covariate<Boolean> {
@ -16,11 +17,13 @@ public final class BooleanCovariate implements Covariate<Boolean>{
@Getter
private final int index;
private boolean hasNAs = false;
private final BooleanSplitRule splitRule = new BooleanSplitRule(); // there's only one possible rule for BooleanCovariates.
@Override
public Collection<BooleanSplitRule> generateSplitRules(List<Value<Boolean>> data, int number) {
return Collections.singleton(splitRule);
public <Y> Iterator<Split<Y, Boolean>> generateSplitRuleUpdater(List<Row<Y>> data, int number, Random random) {
return new SingletonIterator<>(this.splitRule.applyRule(data));
}
@Override
@ -31,6 +34,7 @@ public final class BooleanCovariate implements Covariate<Boolean>{
@Override
public Value<Boolean> createValue(String value) {
if(value == null || value.equalsIgnoreCase("na")){
hasNAs = true;
return createValue( (Boolean) null);
}
@ -45,6 +49,11 @@ public final class BooleanCovariate implements Covariate<Boolean>{
}
}
@Override
public boolean hasNAs() {
return hasNAs;
}
@Override
public String toString(){
return "BooleanCovariate(name=" + name + ")";
@ -74,6 +83,7 @@ public final class BooleanCovariate implements Covariate<Boolean>{
}
}
public class BooleanSplitRule implements SplitRule<Boolean>{
@Override

View file

@ -5,10 +5,7 @@ import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.tree.Split;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
public interface Covariate<V> extends Serializable {
@ -17,7 +14,7 @@ public interface Covariate<V> extends Serializable {
int getIndex();
Collection<? extends SplitRule<V>> generateSplitRules(final List<Value<V>> data, final int number);
<Y> Iterator<Split<Y, V>> generateSplitRuleUpdater(final List<Row<Y>> data, final int number, final Random random);
Value<V> createValue(V value);
@ -29,6 +26,8 @@ public interface Covariate<V> extends Serializable {
*/
Value<V> createValue(String value);
boolean hasNAs();
interface Value<V> extends Serializable{
Covariate<V> getParent();
@ -39,6 +38,17 @@ public interface Covariate<V> extends Serializable {
}
interface SplitRuleUpdater<Y, V> extends Iterator<Split<Y, V>>{
Split<Y, V> currentSplit();
boolean currentSplitValid();
SplitUpdate<Y, V> nextUpdate();
}
interface SplitUpdate<Y, V> {
SplitRule<V> getSplitRule();
Collection<Row<Y>> rowsMovedToLeftHand();
}
interface SplitRule<V> extends Serializable{
Covariate<V> getParent();
@ -51,7 +61,7 @@ public interface Covariate<V> extends Serializable {
* @param <Y>
* @return
*/
default <Y> Split<Y> applyRule(List<Row<Y>> rows) {
default <Y> Split<Y, V> applyRule(List<Row<Y>> rows) {
final List<Row<Y>> leftHand = new LinkedList<>();
final List<Row<Y>> rightHand = new LinkedList<>();
@ -59,7 +69,7 @@ public interface Covariate<V> extends Serializable {
for(final Row<Y> row : rows) {
final Value<V> value = (Value<V>) row.getCovariateValue(getParent());
final Value<V> value = row.getCovariateValue(getParent());
if(value.isNA()){
missingValueRows.add(row);
@ -77,11 +87,11 @@ public interface Covariate<V> extends Serializable {
}
return new Split<>(leftHand, rightHand, missingValueRows);
return new Split<>(this, leftHand, rightHand, missingValueRows);
}
default boolean isLeftHand(CovariateRow row, final double probabilityNaLeftHand){
final Value<V> value = (Value<V>) row.getCovariateValue(getParent());
final Value<V> value = row.getCovariateValue(getParent());
if(value.isNA()){
return ThreadLocalRandom.current().nextDouble() <= probabilityNaLeftHand;

View file

@ -1,10 +1,11 @@
package ca.joeltherrien.randomforest.covariates;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.tree.Split;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
public final class FactorCovariate implements Covariate<String>{
@ -18,6 +19,8 @@ public final class FactorCovariate implements Covariate<String>{
private final FactorValue naValue;
private final int numberOfPossiblePairings;
private boolean hasNAs;
public FactorCovariate(final String name, final int index, List<String> levels){
this.name = name;
@ -42,17 +45,14 @@ public final class FactorCovariate implements Covariate<String>{
@Override
public Set<FactorSplitRule> generateSplitRules(List<Value<String>> data, int number) {
final Set<FactorSplitRule> splitRules = new HashSet<>();
public <Y> Iterator<Split<Y, String>> generateSplitRuleUpdater(List<Row<Y>> data, int number, Random random) {
final Set<Split<Y, String>> splits = new HashSet<>();
// This is to ensure we don't get stuck in an infinite loop for small factors
number = Math.min(number, numberOfPossiblePairings);
final Random random = ThreadLocalRandom.current();
final List<FactorValue> levels = new ArrayList<>(factorLevels.values());
while(splitRules.size() < number){
while(splits.size() < number){
Collections.shuffle(levels, random);
final Set<FactorValue> leftSideValues = new HashSet<>();
leftSideValues.add(levels.get(0));
@ -63,16 +63,18 @@ public final class FactorCovariate implements Covariate<String>{
}
}
splitRules.add(new FactorSplitRule(leftSideValues));
splits.add(new FactorSplitRule(leftSideValues).applyRule(data));
}
return splitRules;
return splits.iterator();
}
@Override
public FactorValue createValue(String value) {
if(value == null || value.equalsIgnoreCase("na")){
this.hasNAs = true;
return this.naValue;
}
@ -85,6 +87,12 @@ public final class FactorCovariate implements Covariate<String>{
return factorValue;
}
@Override
public boolean hasNAs() {
return hasNAs;
}
@Override
public String toString(){
return "FactorCovariate(name=" + name + ")";

View file

@ -1,13 +1,18 @@
package ca.joeltherrien.randomforest.covariates;
package ca.joeltherrien.randomforest.covariates.numeric;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.utils.IndexedIterator;
import ca.joeltherrien.randomforest.utils.UniqueSubsetValueIterator;
import ca.joeltherrien.randomforest.utils.UniqueValueIterator;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@RequiredArgsConstructor
@ToString
@ -19,42 +24,51 @@ public final class NumericCovariate implements Covariate<Double>{
@Getter
private final int index;
private boolean hasNAs = false;
@Override
public Collection<NumericSplitRule> generateSplitRules(List<Value<Double>> data, int number) {
public <Y> NumericSplitRuleUpdater<Y> generateSplitRuleUpdater(List<Row<Y>> data, int number, Random random) {
Stream<Row<Y>> stream = data.stream();
final Random random = ThreadLocalRandom.current();
// only work with non-NA values
data = data.stream().filter(value -> !value.isNA()).collect(Collectors.toList());
//data = data.stream().filter(value -> !value.isNA()).distinct().collect(Collectors.toList()); // TODO which to use?
// for this implementation we need to shuffle the data
final List<Value<Double>> shuffledData;
if(number >= data.size()){
shuffledData = new ArrayList<>(data);
Collections.shuffle(shuffledData, random);
if(hasNAs()){
stream = stream.filter(row -> !row.getCovariateValue(this).isNA());
}
else{ // only need the top number entries
shuffledData = new ArrayList<>(number);
final Set<Integer> indexesToUse = new HashSet<>();
//final List<Integer> indexesToUse = new ArrayList<>(); // TODO which to use?
while(indexesToUse.size() < number){
final int index = random.nextInt(data.size());
data = stream
.sorted((r1, r2) -> {
Double d1 = r1.getCovariateValue(this).getValue();
Double d2 = r2.getCovariateValue(this).getValue();
if(indexesToUse.add(index)){
shuffledData.add(data.get(index));
return d1.compareTo(d2);
})
.collect(Collectors.toList());
Iterator<Double> sortedDataIterator = data.stream()
.map(row -> row.getCovariateValue(this).getValue())
.iterator();
final IndexedIterator<Double> dataIterator;
if(number == 0){
dataIterator = new UniqueValueIterator<>(sortedDataIterator);
}
else{
final TreeSet<Integer> indexSet = new TreeSet<>();
final int maxIndex = data.size();
for(int i=0; i<number; i++){
indexSet.add(random.nextInt(maxIndex));
}
dataIterator = new UniqueSubsetValueIterator<>(
new UniqueValueIterator<>(sortedDataIterator),
indexSet.toArray(new Integer[indexSet.size()])
);
}
return shuffledData.stream()
.mapToDouble(v -> v.getValue())
.mapToObj(threshold -> new NumericSplitRule(threshold))
.collect(Collectors.toSet());
// by returning a set we'll make everything far more efficient as a lot of rules can repeat due to bootstrapping
return new NumericSplitRuleUpdater<>(this, data, dataIterator);
}
@ -66,12 +80,19 @@ public final class NumericCovariate implements Covariate<Double>{
@Override
public NumericValue createValue(String value) {
if(value == null || value.equalsIgnoreCase("na")){
this.hasNAs = true;
return createValue((Double) null);
}
return createValue(Double.parseDouble(value));
}
@Override
public boolean hasNAs() {
return hasNAs;
}
@EqualsAndHashCode
public class NumericValue implements Covariate.Value<Double>{
@ -102,7 +123,7 @@ public final class NumericCovariate implements Covariate<Double>{
private final double threshold;
private NumericSplitRule(final double threshold){
NumericSplitRule(final double threshold){
this.threshold = threshold;
}

View file

@ -0,0 +1,84 @@
package ca.joeltherrien.randomforest.covariates.numeric;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.tree.Split;
import ca.joeltherrien.randomforest.utils.IndexedIterator;
import java.util.Collections;
import java.util.List;
public class NumericSplitRuleUpdater<Y> implements Covariate.SplitRuleUpdater<Y, Double> {
private final NumericCovariate covariate;
private final List<Row<Y>> orderedData;
private final IndexedIterator<Double> dataIterator;
private Split<Y, Double> currentSplit;
public NumericSplitRuleUpdater(final NumericCovariate covariate, final List<Row<Y>> orderedData, final IndexedIterator<Double> iterator){
this.covariate = covariate;
this.orderedData = orderedData;
this.dataIterator = iterator;
final List<Row<Y>> leftHandList = Collections.emptyList();
final List<Row<Y>> rightHandList = orderedData;
this.currentSplit = new Split<>(
covariate.new NumericSplitRule(Double.MIN_VALUE),
leftHandList,
rightHandList,
Collections.emptyList());
}
@Override
public Split<Y, Double> currentSplit() {
return this.currentSplit;
}
@Override
public boolean currentSplitValid() {
return currentSplit.getLeftHand().size() > 0 && currentSplit.getRightHand().size() > 0;
}
@Override
public NumericSplitUpdate<Y> nextUpdate() {
if(hasNext()){
final int currentPosition = dataIterator.getIndex();
final Double splitValue = dataIterator.next();
final int newPosition = dataIterator.getIndex();
final List<Row<Y>> rowsMoved = orderedData.subList(currentPosition, newPosition);
final NumericCovariate.NumericSplitRule splitRule = covariate.new NumericSplitRule(splitValue);
// Update current split
this.currentSplit = new Split<>(
splitRule,
Collections.unmodifiableList(orderedData.subList(0, newPosition)),
Collections.unmodifiableList(orderedData.subList(newPosition, orderedData.size())),
Collections.emptyList());
return new NumericSplitUpdate<>(splitRule, rowsMoved);
}
return null;
}
@Override
public boolean hasNext() {
return dataIterator.hasNext();
}
@Override
public Split<Y, Double> next() {
if(hasNext()){
nextUpdate();
}
return this.currentSplit();
}
}

View file

@ -0,0 +1,24 @@
package ca.joeltherrien.randomforest.covariates.numeric;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.covariates.Covariate;
import lombok.AllArgsConstructor;
import java.util.Collection;
@AllArgsConstructor
public class NumericSplitUpdate<Y> implements Covariate.SplitUpdate<Y, Double> {
private final NumericCovariate.NumericSplitRule numericSplitRule;
private final Collection<Row<Y>> rowsMoved;
@Override
public NumericCovariate.NumericSplitRule getSplitRule() {
return numericSplitRule;
}
@Override
public Collection<Row<Y>> rowsMovedToLeftHand() {
return rowsMoved;
}
}

View file

@ -1,5 +1,6 @@
package ca.joeltherrien.randomforest.covariates;
package ca.joeltherrien.randomforest.covariates.settings;
import ca.joeltherrien.randomforest.covariates.BooleanCovariate;
import lombok.Data;
import lombok.NoArgsConstructor;

View file

@ -1,5 +1,6 @@
package ca.joeltherrien.randomforest.covariates;
package ca.joeltherrien.randomforest.covariates.settings;
import ca.joeltherrien.randomforest.covariates.Covariate;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Getter;

View file

@ -1,5 +1,6 @@
package ca.joeltherrien.randomforest.covariates;
package ca.joeltherrien.randomforest.covariates.settings;
import ca.joeltherrien.randomforest.covariates.FactorCovariate;
import lombok.Data;
import lombok.NoArgsConstructor;

View file

@ -1,5 +1,6 @@
package ca.joeltherrien.randomforest.covariates;
package ca.joeltherrien.randomforest.covariates.settings;
import ca.joeltherrien.randomforest.covariates.numeric.NumericCovariate;
import lombok.Data;
import lombok.NoArgsConstructor;

View file

@ -1,37 +1,77 @@
package ca.joeltherrien.randomforest.responses.competingrisk;
import ca.joeltherrien.randomforest.utils.MathFunction;
import lombok.Builder;
import lombok.Getter;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class CompetingRiskGraySetsImpl implements CompetingRiskSets<CompetingRiskResponseWithCensorTime> {
/**
* Represents a response from CompetingRiskUtils#calculateGraySetsEfficiently
*
*/
@Builder
@Getter
public class CompetingRiskGraySetsImpl implements CompetingRiskSets{
final double[] times; // length m array
int[][] riskSetLeft; // J x m array
final int[][] riskSetTotal; // J x m array
int[][] numberOfEventsLeft; // J+1 x m array
final int[][] numberOfEventsTotal; // J+1 x m array
private final List<Double> eventTimes;
private final MathFunction[] riskSet;
private final Map<Double, int[]> numberOfEvents;
@Override
public MathFunction getRiskSet(int event){
return(riskSet[event-1]);
public CompetingRiskGraySetsImpl(double[] times, int[][] riskSetLeft, int[][] riskSetTotal, int[][] numberOfEventsLeft, int[][] numberOfEventsTotal) {
this.times = times;
this.riskSetLeft = riskSetLeft;
this.riskSetTotal = riskSetTotal;
this.numberOfEventsLeft = numberOfEventsLeft;
this.numberOfEventsTotal = numberOfEventsTotal;
}
@Override
public int getNumberOfEvents(Double time, int event){
if(numberOfEvents.containsKey(time)){
return numberOfEvents.get(time)[event];
public double[] getDistinctTimes() {
return times;
}
return 0;
@Override
public int getRiskSetLeft(int timeIndex, int event) {
return riskSetLeft[event-1][timeIndex];
}
@Override
public int getRiskSetTotal(int timeIndex, int event) {
return riskSetTotal[event-1][timeIndex];
}
@Override
public int getNumberOfEventsLeft(int timeIndex, int event) {
return numberOfEventsLeft[event][timeIndex];
}
@Override
public int getNumberOfEventsTotal(int timeIndex, int event) {
return numberOfEventsTotal[event][timeIndex];
}
@Override
public void update(CompetingRiskResponseWithCensorTime rowMovedToLeft) {
final double time = rowMovedToLeft.getU();
final int k = Arrays.binarySearch(times, time);
final int delta_m_1 = rowMovedToLeft.getDelta() - 1;
final double censorTime = rowMovedToLeft.getC();
for(int j=0; j<riskSetLeft.length; j++){
final int[] riskSetLeftJ = riskSetLeft[j];
// first iteration; perform normal increment as if Y is normal
// corresponds to the first part, U_i >= t, in I(...)
for(int i=0; i<=k; i++){
riskSetLeftJ[i]++;
}
// second iteration; only if delta-1 != j
// corresponds to the second part, U_i < t & delta_i != j & C_i > t
if(delta_m_1 != j && !rowMovedToLeft.isCensored()){
int i = k+1;
while(i < times.length && times[i] < censorTime){
riskSetLeftJ[i]++;
i++;
}
}
}
numberOfEventsLeft[rowMovedToLeft.getDelta()][k]++;
}
}

View file

@ -1,13 +1,13 @@
package ca.joeltherrien.randomforest.responses.competingrisk;
import ca.joeltherrien.randomforest.utils.MathFunction;
public interface CompetingRiskSets<T extends CompetingRiskResponse> {
import java.util.List;
double[] getDistinctTimes();
int getRiskSetLeft(int timeIndex, int event);
int getRiskSetTotal(int timeIndex, int event);
int getNumberOfEventsLeft(int timeIndex, int event);
int getNumberOfEventsTotal(int timeIndex, int event);
public interface CompetingRiskSets {
MathFunction getRiskSet(int event);
int getNumberOfEvents(Double time, int event);
List<Double> getEventTimes();
void update(T rowMovedToLeft);
}

View file

@ -1,36 +1,59 @@
package ca.joeltherrien.randomforest.responses.competingrisk;
import ca.joeltherrien.randomforest.utils.MathFunction;
import lombok.Builder;
import lombok.Getter;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class CompetingRiskSetsImpl implements CompetingRiskSets<CompetingRiskResponse> {
/**
* Represents a response from CompetingRiskUtils#calculateSetsEfficiently
*
*/
@Builder
@Getter
public class CompetingRiskSetsImpl implements CompetingRiskSets{
final double[] times; // length m array
int[] riskSetLeft; // length m array
final int[] riskSetTotal; // length m array
int[][] numberOfEventsLeft; // J+1 x m array
final int[][] numberOfEventsTotal; // J+1 x m array
private final List<Double> eventTimes;
private final MathFunction riskSet;
private final Map<Double, int[]> numberOfEvents;
@Override
public MathFunction getRiskSet(int event){
return riskSet;
public CompetingRiskSetsImpl(double[] times, int[] riskSetLeft, int[] riskSetTotal, int[][] numberOfEventsLeft, int[][] numberOfEventsTotal) {
this.times = times;
this.riskSetLeft = riskSetLeft;
this.riskSetTotal = riskSetTotal;
this.numberOfEventsLeft = numberOfEventsLeft;
this.numberOfEventsTotal = numberOfEventsTotal;
}
@Override
public int getNumberOfEvents(Double time, int event){
if(numberOfEvents.containsKey(time)){
return numberOfEvents.get(time)[event];
public double[] getDistinctTimes() {
return times;
}
return 0;
@Override
public int getRiskSetLeft(int timeIndex, int event) {
return riskSetLeft[timeIndex];
}
@Override
public int getRiskSetTotal(int timeIndex, int event) {
return riskSetTotal[timeIndex];
}
@Override
public int getNumberOfEventsLeft(int timeIndex, int event) {
return numberOfEventsLeft[event][timeIndex];
}
@Override
public int getNumberOfEventsTotal(int timeIndex, int event) {
return numberOfEventsTotal[event][timeIndex];
}
@Override
public void update(CompetingRiskResponse rowMovedToLeft) {
final double time = rowMovedToLeft.getU();
final int k = Arrays.binarySearch(times, time);
for(int i=0; i<=k; i++){
riskSetLeft[i]++;
}
numberOfEventsLeft[rowMovedToLeft.getDelta()][k]++;
}
}

View file

@ -1,11 +1,9 @@
package ca.joeltherrien.randomforest.responses.competingrisk;
import ca.joeltherrien.randomforest.utils.LeftContinuousStepFunction;
import ca.joeltherrien.randomforest.utils.StepFunction;
import ca.joeltherrien.randomforest.utils.VeryDiscontinuousStepFunction;
import java.util.*;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;
public class CompetingRiskUtils {
@ -102,18 +100,30 @@ public class CompetingRiskUtils {
}
public static CompetingRiskSetsImpl calculateSetsEfficiently(final List<CompetingRiskResponse> responses, int[] eventsOfFocus){
final int n = responses.size();
int[] numberOfCurrentEvents = new int[eventsOfFocus.length+1];
final Map<Double, int[]> numberOfEvents = new HashMap<>();
public static CompetingRiskSetsImpl calculateSetsEfficiently(final List<CompetingRiskResponse> initialLeftHand,
final List<CompetingRiskResponse> initialRightHand,
int[] eventsOfFocus,
boolean calculateRiskSets){
final List<Double> eventTimes = new ArrayList<>(n);
final List<Double> eventAndCensorTimes = new ArrayList<>(n);
final List<Integer> riskSetNumberList = new ArrayList<>(n);
final double[] distinctEventTimes = Stream.concat(
initialLeftHand.stream(),
initialRightHand.stream())
//.filter(y -> !y.isCensored())
.map(CompetingRiskResponse::getU)
.mapToDouble(Double::doubleValue)
.sorted()
.distinct()
.toArray();
final int m = distinctEventTimes.length;
final int[][] numberOfCurrentEventsTotal = new int[eventsOfFocus.length+1][m];
// Left Hand First
// need to first sort responses
Collections.sort(responses, (y1, y2) -> {
Collections.sort(initialLeftHand, (y1, y2) -> {
if(y1.getU() < y2.getU()){
return -1;
}
@ -125,127 +135,191 @@ public class CompetingRiskUtils {
}
});
final int nLeft = initialLeftHand.size();
final int nRight = initialRightHand.size();
final int[][] numberOfCurrentEventsLeft = new int[eventsOfFocus.length+1][m];
final int[] riskSetArrayLeft = new int[m];
final int[] riskSetArrayTotal = new int[m];
for(int i=0; i<n; i++){
final CompetingRiskResponse currentResponse = responses.get(i);
final boolean lastOfTime = (i+1)==n || responses.get(i+1).getU() > currentResponse.getU();
numberOfCurrentEvents[currentResponse.getDelta()]++;
for(int k=0; k<m; k++){
riskSetArrayLeft[k] = nLeft;
riskSetArrayTotal[k] = nLeft + nRight;
}
// Left Hand
for(int i=0; i<nLeft; i++){
final CompetingRiskResponse currentResponse = initialLeftHand.get(i);
final boolean lastOfTime = (i+1)==nLeft || initialLeftHand.get(i+1).getU() > currentResponse.getU();
final int k = Arrays.binarySearch(distinctEventTimes, currentResponse.getU());
numberOfCurrentEventsLeft[currentResponse.getDelta()][k]++;
numberOfCurrentEventsTotal[currentResponse.getDelta()][k]++;
if(lastOfTime){
int totalNumberOfCurrentEvents = 0;
for(int e = 1; e < numberOfCurrentEvents.length; e++){ // exclude censored events
totalNumberOfCurrentEvents += numberOfCurrentEvents[e];
for(int e = 1; e < eventsOfFocus.length+1; e++){ // exclude censored events
totalNumberOfCurrentEvents += numberOfCurrentEventsLeft[e][k];
}
final double currentTime = currentResponse.getU();
// Calculate risk set values
// Note that we only decrease values in the *future*
if(calculateRiskSets){
final int decreaseBy = totalNumberOfCurrentEvents + numberOfCurrentEventsLeft[0][k];
for(int j=k+1; j<m; j++){
riskSetArrayLeft[j] = riskSetArrayLeft[j] - decreaseBy;
riskSetArrayTotal[j] = riskSetArrayTotal[j] - decreaseBy;
if(totalNumberOfCurrentEvents > 0){ // add numberOfCurrentEvents
// Add point
eventTimes.add(currentTime);
numberOfEvents.put(currentTime, numberOfCurrentEvents);
}
}
// Always do risk set
// remember that the LeftContinuousFunction takes into account that at this currentTime the risk value is the previous value
final int riskSet = n - (i+1);
riskSetNumberList.add(riskSet);
eventAndCensorTimes.add(currentTime);
// reset counters
numberOfCurrentEvents = new int[eventsOfFocus.length+1];
}
}
final double[] riskSetArray = new double[eventAndCensorTimes.size()];
final double[] timesArray = new double[eventAndCensorTimes.size()];
for(int i=0; i<riskSetArray.length; i++){
timesArray[i] = eventAndCensorTimes.get(i);
riskSetArray[i] = riskSetNumberList.get(i);
}
final LeftContinuousStepFunction riskSetFunction = new LeftContinuousStepFunction(timesArray, riskSetArray, n);
return CompetingRiskSetsImpl.builder()
.numberOfEvents(numberOfEvents)
.riskSet(riskSetFunction)
.eventTimes(eventTimes)
.build();
}
public static CompetingRiskGraySetsImpl calculateGraySetsEfficiently(final List<CompetingRiskResponseWithCensorTime> responses, int[] eventsOfFocus){
final List sillyList = responses; // annoying Java generic work-around
final CompetingRiskSetsImpl originalSets = calculateSetsEfficiently(sillyList, eventsOfFocus);
final double[] allTimes = DoubleStream.concat(
responses.stream()
.mapToDouble(CompetingRiskResponseWithCensorTime::getC),
responses.stream()
.mapToDouble(CompetingRiskResponseWithCensorTime::getU)
).sorted().distinct().toArray();
final VeryDiscontinuousStepFunction[] riskSets = new VeryDiscontinuousStepFunction[eventsOfFocus.length];
for(final int event : eventsOfFocus){
final double[] yAt = new double[allTimes.length];
final double[] yRight = new double[allTimes.length];
for(final CompetingRiskResponseWithCensorTime response : responses){
if(response.getDelta() == event){
// traditional case only; increment on time t when I(t <= Ui)
final double time = response.getU();
final int index = Arrays.binarySearch(allTimes, time);
if(index < 0){ // TODO remove once code is stable
throw new IllegalStateException("Index shouldn't be negative!");
}
// All yAts up to and including index are incremented;
// All yRights up to index are incremented
yAt[index]++;
for(int i=0; i<index; i++){
yAt[i]++;
yRight[i]++;
// Right Hand Next. Note that we only need to keep track of the Left Hand and the Total
// need to first sort responses
Collections.sort(initialRightHand, (y1, y2) -> {
if(y1.getU() < y2.getU()){
return -1;
}
else if(y1.getU() > y2.getU()){
return 1;
}
else{
// need to increment on time t on following conditions; I(t <= Ui | t < Ci)
// Fact: Ci >= Ui.
return 0;
}
});
// increment yAt up to Ci. If Ui==Ci, increment yAt at Ci.
final double time = response.getC();
final int index = Arrays.binarySearch(allTimes, time);
// Right Hand
int[] currentEventsRight = new int[eventsOfFocus.length+1];
for(int i=0; i<nRight; i++){
final CompetingRiskResponse currentResponse = initialRightHand.get(i);
final boolean lastOfTime = (i+1)==nRight || initialRightHand.get(i+1).getU() > currentResponse.getU();
if(index < 0){ // TODO remove once code is stable
throw new IllegalStateException("Index shouldn't be negative!");
}
for(int i=0; i<index; i++){
yAt[i]++;
yRight[i]++;
}
if(response.getU() == response.getC()){
yAt[index]++;
final int k = Arrays.binarySearch(distinctEventTimes, currentResponse.getU());
currentEventsRight[currentResponse.getDelta()]++;
numberOfCurrentEventsTotal[currentResponse.getDelta()][k]++;
if(lastOfTime){
int totalNumberOfCurrentEvents = 0;
for(int e = 1; e < eventsOfFocus.length+1; e++){ // exclude censored events
totalNumberOfCurrentEvents += currentEventsRight[e];
}
// Calculate risk set values
// Note that we only decrease values in the *future*
if(calculateRiskSets){
final int decreaseBy = totalNumberOfCurrentEvents + currentEventsRight[0];
for(int j=k+1; j<m; j++){
riskSetArrayTotal[j] = riskSetArrayTotal[j] - decreaseBy;
}
}
riskSets[event-1] = new VeryDiscontinuousStepFunction(allTimes, yAt, yRight, responses.size());
// Reset
currentEventsRight = new int[eventsOfFocus.length+1];
}
return CompetingRiskGraySetsImpl.builder()
.numberOfEvents(originalSets.getNumberOfEvents())
.eventTimes(originalSets.getEventTimes())
.riskSet(riskSets)
.build();
}
return new CompetingRiskSetsImpl(distinctEventTimes, riskSetArrayLeft, riskSetArrayTotal, numberOfCurrentEventsLeft, numberOfCurrentEventsTotal);
}
public static CompetingRiskGraySetsImpl calculateGraySetsEfficiently(final List<CompetingRiskResponseWithCensorTime> initialLeftHand,
final List<CompetingRiskResponseWithCensorTime> initialRightHand,
int[] eventsOfFocus){
final List leftHandGenericsSuck = initialLeftHand;
final List rightHandGenericsSuck = initialRightHand;
final CompetingRiskSetsImpl normalSets = calculateSetsEfficiently(
leftHandGenericsSuck,
rightHandGenericsSuck,
eventsOfFocus, false);
final double[] times = normalSets.times;
final int[][] numberOfEventsLeft = normalSets.numberOfEventsLeft;
final int[][] numberOfEventsTotal = normalSets.numberOfEventsTotal;
// FYI; initialLeftHand and initialRightHand have both now been sorted
// Time to calculate the Gray modified risk sets
final int[][] riskSetsLeft = new int[eventsOfFocus.length][times.length];
final int[][] riskSetsTotal = new int[eventsOfFocus.length][times.length];
// Left hand first
for(final CompetingRiskResponseWithCensorTime response : initialLeftHand){
final double time = response.getU();
final int k = Arrays.binarySearch(times, time);
final int delta_m_1 = response.getDelta() - 1;
final double censorTime = response.getC();
for(int j=0; j<eventsOfFocus.length; j++){
final int[] riskSetLeftJ = riskSetsLeft[j];
final int[] riskSetTotalJ = riskSetsTotal[j];
// first iteration; perform normal increment as if Y is normal
// corresponds to the first part, U_i >= t, in I(...)
for(int i=0; i<=k; i++){
riskSetLeftJ[i]++;
riskSetTotalJ[i]++;
}
// second iteration; only if delta-1 != j
// corresponds to the second part, U_i < t & delta_i != j & C_i > t
if(delta_m_1 != j && !response.isCensored()){
int i = k+1;
while(i < times.length && times[i] < censorTime){
riskSetLeftJ[i]++;
riskSetTotalJ[i]++;
i++;
}
}
}
}
// Repeat for right hand
for(final CompetingRiskResponseWithCensorTime response : initialRightHand){
final double time = response.getU();
final int k = Arrays.binarySearch(times, time);
final int delta_m_1 = response.getDelta() - 1;
final double censorTime = response.getC();
for(int j=0; j<eventsOfFocus.length; j++){
final int[] riskSetTotalJ = riskSetsTotal[j];
// first iteration; perform normal increment as if Y is normal
// corresponds to the first part, U_i >= t, in I(...)
for(int i=0; i<=k; i++){
riskSetTotalJ[i]++;
}
// second iteration; only if delta-1 != j
// corresponds to the second part, U_i < t & delta_i != j & C_i > t
if(delta_m_1 != j && !response.isCensored()){
int i = k+1;
while(i < times.length && times[i] < censorTime){
riskSetTotalJ[i]++;
i++;
}
}
}
}
return new CompetingRiskGraySetsImpl(times, riskSetsLeft, riskSetsTotal, numberOfEventsLeft, numberOfEventsTotal);
}

View file

@ -1,13 +1,18 @@
package ca.joeltherrien.randomforest.responses.competingrisk.differentiator;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskSets;
import ca.joeltherrien.randomforest.tree.GroupDifferentiator;
import ca.joeltherrien.randomforest.tree.Split;
import ca.joeltherrien.randomforest.tree.SplitAndScore;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
import java.util.stream.Collectors;
/**
* See page 761 of Random survival forests for competing risks by Ishwaran et al. The class is abstract as Gray's test
@ -16,45 +21,112 @@ import java.util.stream.Stream;
*/
public abstract class CompetingRiskGroupDifferentiator<Y extends CompetingRiskResponse> implements GroupDifferentiator<Y> {
@Override
public abstract Double differentiate(List<Y> leftHand, List<Y> rightHand);
abstract protected CompetingRiskSets<Y> createCompetingRiskSets(List<Y> leftHand, List<Y> rightHand);
abstract protected Double getScore(final CompetingRiskSets<Y> competingRiskSets);
@Override
public SplitAndScore<Y, ?> differentiate(Iterator<Split<Y, ?>> splitIterator) {
if(splitIterator instanceof Covariate.SplitRuleUpdater){
return differentiateWithSplitUpdater((Covariate.SplitRuleUpdater) splitIterator);
}
else{
return differentiateWithBasicIterator(splitIterator);
}
}
private SplitAndScore<Y, ?> differentiateWithBasicIterator(Iterator<Split<Y, ?>> splitIterator){
Double bestScore = null;
Split<Y, ?> bestSplit = null;
while(splitIterator.hasNext()){
final Split<Y, ?> candidateSplit = splitIterator.next();
final List<Y> leftHand = candidateSplit.getLeftHand().stream().map(Row::getResponse).collect(Collectors.toList());
final List<Y> rightHand = candidateSplit.getRightHand().stream().map(Row::getResponse).collect(Collectors.toList());
if(leftHand.isEmpty() || rightHand.isEmpty()){
continue;
}
final CompetingRiskSets<Y> competingRiskSets = createCompetingRiskSets(leftHand, rightHand);
final Double score = getScore(competingRiskSets);
if(Double.isFinite(score) && (bestScore == null || score > bestScore)){
bestScore = score;
bestSplit = candidateSplit;
}
}
if(bestSplit == null){
return null;
}
return new SplitAndScore<>(bestSplit, bestScore);
}
private SplitAndScore<Y, ?> differentiateWithSplitUpdater(Covariate.SplitRuleUpdater<Y, ?> splitRuleUpdater) {
final List<Y> leftInitialSplit = splitRuleUpdater.currentSplit().getLeftHand()
.stream().map(Row::getResponse).collect(Collectors.toList());
final List<Y> rightInitialSplit = splitRuleUpdater.currentSplit().getRightHand()
.stream().map(Row::getResponse).collect(Collectors.toList());
final CompetingRiskSets<Y> competingRiskSets = createCompetingRiskSets(leftInitialSplit, rightInitialSplit);
Double bestScore = null;
Split<Y, ?> bestSplit = null;
while(splitRuleUpdater.hasNext()){
for(Row<Y> rowMoved : splitRuleUpdater.nextUpdate().rowsMovedToLeftHand()){
competingRiskSets.update(rowMoved.getResponse());
}
final Double score = getScore(competingRiskSets);
if(Double.isFinite(score) && (bestScore == null || score > bestScore)){
bestScore = score;
bestSplit = splitRuleUpdater.currentSplit();
}
}
if(bestSplit == null){
return null;
}
return new SplitAndScore<>(bestSplit, bestScore);
}
/**
* Calculates the log rank value (or the Gray's test value) for a *specific* event cause.
*
* @param eventOfFocus
* @param competingRiskSetsLeft A summary of the different sets used in the calculation for the left side
* @param competingRiskSetsRight A summary of the different sets used in the calculation for the right side
* @param competingRiskSets A summary of the different sets used in the calculation
* @return
*/
LogRankValue specificLogRankValue(final int eventOfFocus, final CompetingRiskSets competingRiskSetsLeft, final CompetingRiskSets competingRiskSetsRight){
final double[] distinctEventTimes = Stream.concat(
competingRiskSetsLeft.getEventTimes().stream(),
competingRiskSetsRight.getEventTimes().stream())
.mapToDouble(Double::doubleValue)
.sorted()
.distinct()
.toArray();
LogRankValue specificLogRankValue(final int eventOfFocus, final CompetingRiskSets<Y> competingRiskSets){
double summation = 0.0;
double variance = 0.0;
for(final double time_k : distinctEventTimes){
final double[] distinctTimes = competingRiskSets.getDistinctTimes();
for(int k = 0; k<distinctTimes.length; k++){
final double time_k = distinctTimes[k];
final double weight = weight(time_k); // W_j(t_k)
final double numberEventsAtTimeDaughterLeft = competingRiskSetsLeft.getNumberOfEvents(time_k, eventOfFocus); // // d_{j,l}(t_k)
final double numberEventsAtTimeDaughterRight = competingRiskSetsRight.getNumberOfEvents(time_k, eventOfFocus); // d_{j,r}(t_k)
final double numberOfEventsAtTime = numberEventsAtTimeDaughterLeft + numberEventsAtTimeDaughterRight; // d_j(t_k)
final double numberEventsAtTimeDaughterLeft = competingRiskSets.getNumberOfEventsLeft(k, eventOfFocus); // // d_{j,l}(t_k)
final double numberEventsAtTimeDaughterTotal = competingRiskSets.getNumberOfEventsTotal(k, eventOfFocus); // d_j(t_k)
final double individualsAtRiskDaughterLeft = competingRiskSetsLeft.getRiskSet(eventOfFocus).evaluate(time_k); // Y_l(t_k)
final double individualsAtRiskDaughterRight = competingRiskSetsRight.getRiskSet(eventOfFocus).evaluate(time_k); // Y_r(t_k)
final double individualsAtRisk = individualsAtRiskDaughterLeft + individualsAtRiskDaughterRight; // Y(t_k)
final double individualsAtRiskDaughterLeft = competingRiskSets.getRiskSetLeft(k, eventOfFocus); // Y_l(t_k)
final double individualsAtRiskDaughterTotal = competingRiskSets.getRiskSetTotal(k, eventOfFocus); // Y(t_k)
final double deltaSummation = weight*(numberEventsAtTimeDaughterLeft - numberOfEventsAtTime*individualsAtRiskDaughterLeft/individualsAtRisk);
final double deltaVariance = weight*weight*numberOfEventsAtTime*individualsAtRiskDaughterLeft/individualsAtRisk
* (1.0 - individualsAtRiskDaughterLeft / individualsAtRisk)
* ((individualsAtRisk - numberOfEventsAtTime) / (individualsAtRisk - 1.0));
final double deltaSummation = weight*(numberEventsAtTimeDaughterLeft - numberEventsAtTimeDaughterTotal*individualsAtRiskDaughterLeft/individualsAtRiskDaughterTotal);
final double deltaVariance = weight*weight*numberEventsAtTimeDaughterTotal*individualsAtRiskDaughterLeft/individualsAtRiskDaughterTotal
* (1.0 - individualsAtRiskDaughterLeft / individualsAtRiskDaughterTotal)
* ((individualsAtRiskDaughterTotal - numberEventsAtTimeDaughterTotal) / (individualsAtRiskDaughterTotal - 1.0));
// Note - notation differs slightly with what is found in STAT 855 notes, but they are equivalent.
// Note - if individualsAtRisk == 1 then variance will be NaN.
@ -62,10 +134,6 @@ public abstract class CompetingRiskGroupDifferentiator<Y extends CompetingRiskRe
summation += deltaSummation;
variance += deltaVariance;
}
else{
// Do nothing; else statement left for breakpoints.
}
}
return new LogRankValue(summation, variance);

View file

@ -1,7 +1,7 @@
package ca.joeltherrien.randomforest.responses.competingrisk.differentiator;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskGraySetsImpl;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponseWithCensorTime;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskSets;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskUtils;
import lombok.RequiredArgsConstructor;
@ -17,19 +17,17 @@ public class GrayLogRankMultipleGroupDifferentiator extends CompetingRiskGroupDi
private final int[] events;
@Override
public Double differentiate(List<CompetingRiskResponseWithCensorTime> leftHand, List<CompetingRiskResponseWithCensorTime> rightHand) {
if(leftHand.size() == 0 || rightHand.size() == 0){
return null;
protected CompetingRiskSets<CompetingRiskResponseWithCensorTime> createCompetingRiskSets(List<CompetingRiskResponseWithCensorTime> leftHand, List<CompetingRiskResponseWithCensorTime> rightHand){
return CompetingRiskUtils.calculateGraySetsEfficiently(leftHand, rightHand, events);
}
final CompetingRiskGraySetsImpl competingRiskSetsLeft = CompetingRiskUtils.calculateGraySetsEfficiently(leftHand, events);
final CompetingRiskGraySetsImpl competingRiskSetsRight = CompetingRiskUtils.calculateGraySetsEfficiently(rightHand, events);
@Override
protected Double getScore(final CompetingRiskSets<CompetingRiskResponseWithCensorTime> competingRiskSets){
double numerator = 0.0;
double denominatorSquared = 0.0;
for(final int eventOfFocus : events){
final LogRankValue valueOfInterest = specificLogRankValue(eventOfFocus, competingRiskSetsLeft, competingRiskSetsRight);
final LogRankValue valueOfInterest = specificLogRankValue(eventOfFocus, competingRiskSets);
numerator += valueOfInterest.getNumerator()*valueOfInterest.getVarianceSqrt();
denominatorSquared += valueOfInterest.getVariance();
@ -37,7 +35,6 @@ public class GrayLogRankMultipleGroupDifferentiator extends CompetingRiskGroupDi
}
return Math.abs(numerator / Math.sqrt(denominatorSquared));
}

View file

@ -1,7 +1,7 @@
package ca.joeltherrien.randomforest.responses.competingrisk.differentiator;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskGraySetsImpl;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponseWithCensorTime;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskSets;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskUtils;
import lombok.RequiredArgsConstructor;
@ -18,18 +18,14 @@ public class GrayLogRankSingleGroupDifferentiator extends CompetingRiskGroupDiff
private final int[] events;
@Override
public Double differentiate(List<CompetingRiskResponseWithCensorTime> leftHand, List<CompetingRiskResponseWithCensorTime> rightHand) {
if(leftHand.size() == 0 || rightHand.size() == 0){
return null;
protected CompetingRiskSets<CompetingRiskResponseWithCensorTime> createCompetingRiskSets(List<CompetingRiskResponseWithCensorTime> leftHand, List<CompetingRiskResponseWithCensorTime> rightHand){
return CompetingRiskUtils.calculateGraySetsEfficiently(leftHand, rightHand, events);
}
final CompetingRiskGraySetsImpl competingRiskSetsLeft = CompetingRiskUtils.calculateGraySetsEfficiently(leftHand, events);
final CompetingRiskGraySetsImpl competingRiskSetsRight = CompetingRiskUtils.calculateGraySetsEfficiently(rightHand, events);
final LogRankValue valueOfInterest = specificLogRankValue(eventOfFocus, competingRiskSetsLeft, competingRiskSetsRight);
@Override
protected Double getScore(final CompetingRiskSets<CompetingRiskResponseWithCensorTime> competingRiskSets){
final LogRankValue valueOfInterest = specificLogRankValue(eventOfFocus, competingRiskSets);
return Math.abs(valueOfInterest.getNumerator() / valueOfInterest.getVarianceSqrt());
}
}

View file

@ -1,7 +1,7 @@
package ca.joeltherrien.randomforest.responses.competingrisk.differentiator;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskSetsImpl;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskSets;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskUtils;
import lombok.RequiredArgsConstructor;
@ -17,19 +17,17 @@ public class LogRankMultipleGroupDifferentiator extends CompetingRiskGroupDiffer
private final int[] events;
@Override
public Double differentiate(List<CompetingRiskResponse> leftHand, List<CompetingRiskResponse> rightHand) {
if(leftHand.size() == 0 || rightHand.size() == 0){
return null;
protected CompetingRiskSets<CompetingRiskResponse> createCompetingRiskSets(List<CompetingRiskResponse> leftHand, List<CompetingRiskResponse> rightHand){
return CompetingRiskUtils.calculateSetsEfficiently(leftHand, rightHand, events, true);
}
final CompetingRiskSetsImpl competingRiskSetsLeft = CompetingRiskUtils.calculateSetsEfficiently(leftHand, events);
final CompetingRiskSetsImpl competingRiskSetsRight = CompetingRiskUtils.calculateSetsEfficiently(rightHand, events);
@Override
protected Double getScore(final CompetingRiskSets<CompetingRiskResponse> competingRiskSets){
double numerator = 0.0;
double denominatorSquared = 0.0;
for(final int eventOfFocus : events){
final LogRankValue valueOfInterest = specificLogRankValue(eventOfFocus, competingRiskSetsLeft, competingRiskSetsRight);
final LogRankValue valueOfInterest = specificLogRankValue(eventOfFocus, competingRiskSets);
numerator += valueOfInterest.getNumerator()*valueOfInterest.getVarianceSqrt();
denominatorSquared += valueOfInterest.getVariance();
@ -37,7 +35,7 @@ public class LogRankMultipleGroupDifferentiator extends CompetingRiskGroupDiffer
}
return Math.abs(numerator / Math.sqrt(denominatorSquared));
}
}

View file

@ -1,7 +1,7 @@
package ca.joeltherrien.randomforest.responses.competingrisk.differentiator;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskSetsImpl;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskSets;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskUtils;
import lombok.RequiredArgsConstructor;
@ -18,18 +18,14 @@ public class LogRankSingleGroupDifferentiator extends CompetingRiskGroupDifferen
private final int[] events;
@Override
public Double differentiate(List<CompetingRiskResponse> leftHand, List<CompetingRiskResponse> rightHand) {
if(leftHand.size() == 0 || rightHand.size() == 0){
return null;
protected CompetingRiskSets<CompetingRiskResponse> createCompetingRiskSets(List<CompetingRiskResponse> leftHand, List<CompetingRiskResponse> rightHand){
return CompetingRiskUtils.calculateSetsEfficiently(leftHand, rightHand, events, true);
}
final CompetingRiskSetsImpl competingRiskSetsLeft = CompetingRiskUtils.calculateSetsEfficiently(leftHand, events);
final CompetingRiskSetsImpl competingRiskSetsRight = CompetingRiskUtils.calculateSetsEfficiently(rightHand, events);
final LogRankValue valueOfInterest = specificLogRankValue(eventOfFocus, competingRiskSetsLeft, competingRiskSetsRight);
@Override
protected Double getScore(final CompetingRiskSets<CompetingRiskResponse> competingRiskSets){
final LogRankValue valueOfInterest = specificLogRankValue(eventOfFocus, competingRiskSets);
return Math.abs(valueOfInterest.getNumerator() / valueOfInterest.getVarianceSqrt());
}
}

View file

@ -1,26 +0,0 @@
package ca.joeltherrien.randomforest.responses.regression;
import ca.joeltherrien.randomforest.tree.GroupDifferentiator;
import java.util.List;
public class MeanGroupDifferentiator implements GroupDifferentiator<Double> {
@Override
public Double differentiate(List<Double> leftHand, List<Double> rightHand) {
double leftHandSize = leftHand.size();
double rightHandSize = rightHand.size();
if(leftHandSize == 0 || rightHandSize == 0){
return null;
}
double leftHandMean = leftHand.stream().mapToDouble(db -> db/leftHandSize).sum();
double rightHandMean = rightHand.stream().mapToDouble(db -> db/rightHandSize).sum();
return Math.abs(leftHandMean - rightHandMean);
}
}

View file

@ -1,13 +1,13 @@
package ca.joeltherrien.randomforest.responses.regression;
import ca.joeltherrien.randomforest.tree.GroupDifferentiator;
import ca.joeltherrien.randomforest.tree.SimpleGroupDifferentiator;
import java.util.List;
public class WeightedVarianceGroupDifferentiator implements GroupDifferentiator<Double> {
public class WeightedVarianceGroupDifferentiator extends SimpleGroupDifferentiator<Double> {
@Override
public Double differentiate(List<Double> leftHand, List<Double> rightHand) {
public Double getScore(List<Double> leftHand, List<Double> rightHand) {
final double leftHandSize = leftHand.size();
final double rightHandSize = rightHand.size();

View file

@ -14,8 +14,10 @@ import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -45,17 +47,17 @@ public class ForestTrainer<Y, TO, FO> {
this.covariates = covariates;
this.treeResponseCombiner = settings.getTreeCombiner();
this.treeTrainer = new TreeTrainer<>(settings, covariates);
}
public Forest<TO, FO> trainSerial(){
final List<Tree<TO>> trees = new ArrayList<>(ntree);
final Bootstrapper<Row<Y>> bootstrapper = new Bootstrapper<>(data);
final Random random = new Random();
for(int j=0; j<ntree; j++){
trees.add(trainTree(bootstrapper));
trees.add(trainTree(bootstrapper, random));
if(displayProgress){
if(j==0) {
@ -130,7 +132,7 @@ public class ForestTrainer<Y, TO, FO> {
}
final File[] treeFiles = folder.listFiles(((file, s) -> s.endsWith(".tree")));
final File[] treeFiles = folder.listFiles((file, s) -> s.endsWith(".tree"));
final ExecutorService executorService = Executors.newFixedThreadPool(threads);
final AtomicInteger treeCount = new AtomicInteger(treeFiles.length); // tracks how many trees are finished
@ -162,9 +164,9 @@ public class ForestTrainer<Y, TO, FO> {
}
private Tree<TO> trainTree(final Bootstrapper<Row<Y>> bootstrapper){
final List<Row<Y>> bootstrappedData = bootstrapper.bootstrap();
return treeTrainer.growTree(bootstrappedData);
private Tree<TO> trainTree(final Bootstrapper<Row<Y>> bootstrapper, Random random){
final List<Row<Y>> bootstrappedData = bootstrapper.bootstrap(random);
return treeTrainer.growTree(bootstrappedData, random);
}
public void saveTree(final Tree<TO> tree, String name) throws IOException {
@ -193,7 +195,8 @@ public class ForestTrainer<Y, TO, FO> {
@Override
public void run() {
final Tree<TO> tree = trainTree(bootstrapper);
// ThreadLocalRandom should make sure we don't duplicate seeds
final Tree<TO> tree = trainTree(bootstrapper, ThreadLocalRandom.current());
// should be okay as the list structure isn't changing
treeList.set(treeIndex, tree);
@ -216,7 +219,8 @@ public class ForestTrainer<Y, TO, FO> {
@Override
public void run() {
final Tree<TO> tree = trainTree(bootstrapper);
// ThreadLocalRandom should make sure we don't duplicate seeds
final Tree<TO> tree = trainTree(bootstrapper, ThreadLocalRandom.current());
try {
saveTree(tree, filename);

View file

@ -1,15 +1,17 @@
package ca.joeltherrien.randomforest.tree;
import java.util.List;
import java.util.Iterator;
/**
* When choosing an optimal node to split on, we choose the split that maximizes the difference between the two groups.
* The GroupDifferentiator has one method that outputs a score to show how different groups are. The larger the score,
* the greater the difference.
* The GroupDifferentiator has one method that cycles through an iterator of Splits (FYI; check if the iterator is an
* instance of Covariate.SplitRuleUpdater; in which case you get access to the rows that change between splits)
*
* If you want to implement a very trivial GroupDifferentiator that just takes two Lists as arguments, try extending
* SimpleGroupDifferentiator.
*/
public interface GroupDifferentiator<Y> {
Double differentiate(List<Y> leftHand, List<Y> rightHand);
SplitAndScore<Y, ?> differentiate(Iterator<Split<Y, ?>> splitIterator);
}

View file

@ -0,0 +1,50 @@
package ca.joeltherrien.randomforest.tree;
import ca.joeltherrien.randomforest.Row;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
public abstract class SimpleGroupDifferentiator<Y> implements GroupDifferentiator<Y> {
@Override
public SplitAndScore<Y, ?> differentiate(Iterator<Split<Y, ?>> splitIterator) {
Double bestScore = null;
Split<Y, ?> bestSplit = null;
while(splitIterator.hasNext()){
final Split<Y, ?> candidateSplit = splitIterator.next();
final List<Y> leftHand = candidateSplit.getLeftHand().stream().map(Row::getResponse).collect(Collectors.toList());
final List<Y> rightHand = candidateSplit.getRightHand().stream().map(Row::getResponse).collect(Collectors.toList());
if(leftHand.isEmpty() || rightHand.isEmpty()){
continue;
}
final Double score = getScore(leftHand, rightHand);
if(score != null && (bestScore == null || score > bestScore)){
bestScore = score;
bestSplit = candidateSplit;
}
}
if(bestSplit == null){
return null;
}
return new SplitAndScore<>(bestSplit, bestScore);
}
/**
* Return a score; higher is better.
*
* @param leftHand
* @param rightHand
* @return
*/
public abstract Double getScore(List<Y> leftHand, List<Y> rightHand);
}

View file

@ -1,19 +1,21 @@
package ca.joeltherrien.randomforest.tree;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.covariates.Covariate;
import lombok.Data;
import java.util.List;
/**
* Very simple class that contains three lists; it's essentially a thruple.
* Very simple class that contains three lists and a SplitRule.
*
* @author joel
*
*/
@Data
public class Split<Y> {
public final class Split<Y, V> {
public final Covariate.SplitRule<V> splitRule;
public final List<Row<Y>> leftHand;
public final List<Row<Y>> rightHand;
public final List<Row<Y>> naHand;

View file

@ -0,0 +1,15 @@
package ca.joeltherrien.randomforest.tree;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
public class SplitAndScore<Y, V> {
@Getter
private final Split<Y, V> split;
@Getter
private final Double score;
}

View file

@ -3,8 +3,10 @@ package ca.joeltherrien.randomforest.tree;
import ca.joeltherrien.randomforest.CovariateRow;
import ca.joeltherrien.randomforest.covariates.Covariate;
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class SplitNode<Y> implements Node<Y> {
private final Node<Y> leftHand;

View file

@ -2,8 +2,10 @@ package ca.joeltherrien.randomforest.tree;
import ca.joeltherrien.randomforest.CovariateRow;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
@RequiredArgsConstructor
@ToString
public class TerminalNode<Y> implements Node<Y> {
private final Y responseValue;
@ -14,6 +16,4 @@ public class TerminalNode<Y> implements Node<Y> {
}
}

View file

@ -29,4 +29,8 @@ public class Tree<Y> implements Node<Y> {
return Arrays.binarySearch(this.bootstrapRowIds, id) >= 0;
}
@Override
public String toString(){
return rootNode.toString();
}
}

View file

@ -8,7 +8,6 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;
@Builder
@ -47,20 +46,21 @@ public class TreeTrainer<Y, O> {
this.covariates = covariates;
}
public Tree<O> growTree(List<Row<Y>> data){
public Tree<O> growTree(List<Row<Y>> data, Random random){
final Node<O> rootNode = growNode(data, 0);
final Node<O> rootNode = growNode(data, 0, random);
return new Tree<>(rootNode, data.stream().mapToInt(Row::getId).toArray());
}
private Node<O> growNode(List<Row<Y>> data, int depth){
private Node<O> growNode(List<Row<Y>> data, int depth, Random random){
// See https://kogalur.github.io/randomForestSRC/theory.html#section3.1 (near bottom)
if(data.size() >= 2*nodeSize && depth < maxNodeDepth && !nodeIsPure(data)){
final List<Covariate> covariatesToTry = selectCovariates(this.mtry);
final SplitRuleAndSplit bestSplitRuleAndSplit = findBestSplitRule(data, covariatesToTry);
final List<Covariate> covariatesToTry = selectCovariates(this.mtry, random);
final Split<Y,?> bestSplit = findBestSplitRule(data, covariatesToTry, random);
if(bestSplitRuleAndSplit.splitRule == null){
if(bestSplit == null){
return new TerminalNode<>(
responseCombiner.combine(
@ -71,14 +71,34 @@ public class TreeTrainer<Y, O> {
}
final Split<Y> split = bestSplitRuleAndSplit.split;
// Note that NAs have already been handled
// Now that we have the best split; we need to handle any NAs that were dropped off
final double probabilityLeftHand = (double) bestSplit.leftHand.size() /
(double) (bestSplit.leftHand.size() + bestSplit.rightHand.size());
// Assign missing values to the split if necessary
if(bestSplit.getSplitRule().getParent().hasNAs()){
for(Row<Y> row : data) {
if(row.getCovariateValue(bestSplit.getSplitRule().getParent()).isNA()) {
final boolean randomDecision = random.nextDouble() <= probabilityLeftHand;
if(randomDecision){
bestSplit.getLeftHand().add(row);
}
else{
bestSplit.getRightHand().add(row);
}
}
}
}
final Node<O> leftNode = growNode(split.leftHand, depth+1);
final Node<O> rightNode = growNode(split.rightHand, depth+1);
return new SplitNode<>(leftNode, rightNode, bestSplitRuleAndSplit.splitRule, bestSplitRuleAndSplit.probabilityLeftHand);
final Node<O> leftNode = growNode(bestSplit.leftHand, depth+1, random);
final Node<O> rightNode = growNode(bestSplit.rightHand, depth+1, random);
return new SplitNode<>(leftNode, rightNode, bestSplit.getSplitRule(), probabilityLeftHand);
}
else{
@ -92,13 +112,13 @@ public class TreeTrainer<Y, O> {
}
private List<Covariate> selectCovariates(int mtry){
private List<Covariate> selectCovariates(int mtry, Random random){
if(mtry >= covariates.size()){
return covariates;
}
final List<Covariate> splitCovariates = new ArrayList<>(covariates);
Collections.shuffle(splitCovariates, ThreadLocalRandom.current());
Collections.shuffle(splitCovariates, random);
if (splitCovariates.size() > mtry) {
splitCovariates.subList(mtry, splitCovariates.size()).clear();
@ -107,63 +127,28 @@ public class TreeTrainer<Y, O> {
return splitCovariates;
}
private SplitRuleAndSplit findBestSplitRule(List<Row<Y>> data, List<Covariate> covariatesToTry){
SplitRuleAndSplit bestSplitRuleAndSplit = new SplitRuleAndSplit();
double bestSplitScore = 0.0;
boolean first = true;
private Split<Y, ?> findBestSplitRule(List<Row<Y>> data, List<Covariate> covariatesToTry, Random random){
SplitAndScore<Y, ?> bestSplitAndScore = null;
final GroupDifferentiator noGenericDifferentiator = groupDifferentiator; // cause Java generics suck
for(final Covariate covariate : covariatesToTry) {
final Iterator<Split> iterator = covariate.generateSplitRuleUpdater(data, this.numberOfSplits, random);
final int numberToTry = numberOfSplits==0 ? data.size() : numberOfSplits;
final SplitAndScore<Y, ?> candidateSplitAndScore = noGenericDifferentiator.differentiate(iterator);
final Collection<Covariate.SplitRule> splitRulesToTry = covariate
.generateSplitRules(
data
.stream()
.map(row -> row.getCovariateValue(covariate))
.collect(Collectors.toList())
, numberToTry);
for(final Covariate.SplitRule possibleRule : splitRulesToTry){
final Split<Y> possibleSplit = possibleRule.applyRule(data);
// We have to handle any NAs
if(possibleSplit.leftHand.size() == 0 && possibleSplit.rightHand.size() == 0 && possibleSplit.naHand.size() > 0){
throw new IllegalArgumentException("Can't apply " + this + " when there are rows with missing data and no non-missing value rows");
}
final double probabilityLeftHand = (double) possibleSplit.leftHand.size() / (double) (possibleSplit.leftHand.size() + possibleSplit.rightHand.size());
final Random random = ThreadLocalRandom.current();
for(final Row<Y> missingValueRow : possibleSplit.naHand){
final boolean randomDecision = random.nextDouble() <= probabilityLeftHand;
if(randomDecision){
possibleSplit.leftHand.add(missingValueRow);
}
else{
possibleSplit.rightHand.add(missingValueRow);
}
}
final Double score = groupDifferentiator.differentiate(
possibleSplit.leftHand.stream().map(row -> row.getResponse()).collect(Collectors.toList()),
possibleSplit.rightHand.stream().map(row -> row.getResponse()).collect(Collectors.toList())
);
if(score != null && !Double.isNaN(score) && (score > bestSplitScore || first)){
bestSplitRuleAndSplit.splitRule = possibleRule;
bestSplitRuleAndSplit.split = possibleSplit;
bestSplitRuleAndSplit.probabilityLeftHand = probabilityLeftHand;
bestSplitScore = score;
first = false;
}
if(candidateSplitAndScore != null && (bestSplitAndScore == null ||
candidateSplitAndScore.getScore() > bestSplitAndScore.getScore())) {
bestSplitAndScore = candidateSplitAndScore;
}
}
return bestSplitRuleAndSplit;
if(bestSplitAndScore == null){
return null;
}
return bestSplitAndScore.getSplit();
}
@ -186,10 +171,4 @@ public class TreeTrainer<Y, O> {
return true;
}
private class SplitRuleAndSplit{
private Covariate.SplitRule splitRule = null;
private Split<Y> split = null;
private double probabilityLeftHand;
}
}

View file

@ -0,0 +1,9 @@
package ca.joeltherrien.randomforest.utils;
import java.util.Iterator;
public interface IndexedIterator<E> extends Iterator<E> {
int getIndex();
}

View file

@ -0,0 +1,29 @@
package ca.joeltherrien.randomforest.utils;
import lombok.RequiredArgsConstructor;
import java.util.Iterator;
@RequiredArgsConstructor
public class SingletonIterator<E> implements Iterator<E> {
private final E value;
private boolean beenCalled = false;
@Override
public boolean hasNext() {
return !beenCalled;
}
@Override
public E next() {
if(!beenCalled){
beenCalled = true;
return value;
}
return null;
}
}

View file

@ -0,0 +1,61 @@
package ca.joeltherrien.randomforest.utils;
/**
* Iterator that wraps around a UniqueValueIterator. It continues to iterate until it gets to one of the prespecified indexes,
* and then proceeds just past that to the end of the existing values it's at.
*
* The wrapped iterator must be from a sorted collection of some sort such that equal values are clumped together.
* I.e. "b b c c c d d a a" is okay but "a b b c c a" is not as 'a' appears twice at different locations
*
* @param <E>
*/
public class UniqueSubsetValueIterator<E> implements IndexedIterator<E> {
private final UniqueValueIterator<E> iterator;
private final Integer[] indexValues;
private int currentIndexSpot = 0;
public UniqueSubsetValueIterator(final UniqueValueIterator<E> iterator, final Integer[] indexValues){
this.iterator = iterator;
this.indexValues = indexValues;
}
@Override
public boolean hasNext() {
return iterator.hasNext() && iterator.getIndex() <= indexValues[indexValues.length-1];
}
@Override
public E next() {
if(hasNext()){
final int indexToStopBy = indexValues[currentIndexSpot];
while(iterator.getIndex() <= indexToStopBy){
iterator.next();
}
for(int i = currentIndexSpot + 1; i < indexValues.length; i++){
if(iterator.getIndex() <= indexValues[i]){
currentIndexSpot = i;
break;
}
}
return iterator.getCurrentValue();
}
return null;
}
@Override
public int getIndex(){
return iterator.getIndex();
}
}

View file

@ -0,0 +1,71 @@
package ca.joeltherrien.randomforest.utils;
import lombok.Getter;
import java.util.Iterator;
/**
* Iterator that wraps around another iterator. It continues to iterate until it gets to the *end* of a sequence of identical values.
* It also tracks the current index in the original iterator.
*
* The wrapped iterator must be from a sorted collection of some sort such that equal values are clumped together.
* I.e. "b b c c c d d a a" is okay but "a b b c c a" is not as 'a' appears twice at different locations
*
* @param <E>
*/
public class UniqueValueIterator<E> implements IndexedIterator<E> {
private final Iterator<E> wrappedIterator;
@Getter private E currentValue = null;
@Getter private E nextValue;
public UniqueValueIterator(final Iterator<E> wrappedIterator){
this.wrappedIterator = wrappedIterator;
this.nextValue = wrappedIterator.next();
}
// Count must return the index of the last value of the sequence returned by next()
@Getter
private int index = 0;
@Override
public boolean hasNext() {
return nextValue != null;
}
@Override
public E next() {
int count = 1;
while(wrappedIterator.hasNext()){
final E currentIteratorValue = wrappedIterator.next();
if(currentIteratorValue.equals(nextValue)){
count++;
}
else{
index +=count;
currentValue = nextValue;
nextValue = currentIteratorValue;
return currentValue;
}
}
if(nextValue != null){
index += count;
currentValue = nextValue;
nextValue = null;
return currentValue;
}
else{
return null;
}
}
}

View file

@ -1,8 +1,8 @@
package ca.joeltherrien.randomforest;
import ca.joeltherrien.randomforest.covariates.BooleanCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.BooleanCovariateSettings;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.covariates.NumericCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.NumericCovariateSettings;
import ca.joeltherrien.randomforest.responses.competingrisk.combiner.CompetingRiskFunctionCombiner;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskFunctions;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;

View file

@ -1,214 +0,0 @@
package ca.joeltherrien.randomforest.competingrisk;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskGraySetsImpl;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponseWithCensorTime;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskSetsImpl;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskUtils;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class TestCalculatingCompetingRiskSets {
public List<CompetingRiskResponseWithCensorTime> generateData(){
final List<CompetingRiskResponseWithCensorTime> data = new ArrayList<>();
data.add(new CompetingRiskResponseWithCensorTime(1, 1, 3));
data.add(new CompetingRiskResponseWithCensorTime(1, 1, 3));
data.add(new CompetingRiskResponseWithCensorTime(0, 1, 1));
data.add(new CompetingRiskResponseWithCensorTime(1, 2, 2.5));
data.add(new CompetingRiskResponseWithCensorTime(2, 3, 4));
data.add(new CompetingRiskResponseWithCensorTime(0, 3, 3));
data.add(new CompetingRiskResponseWithCensorTime(1, 4, 4));
data.add(new CompetingRiskResponseWithCensorTime(0, 5, 5));
data.add(new CompetingRiskResponseWithCensorTime(2, 6, 7));
return data;
}
@Test
public void testCalculatingSets(){
final List data = generateData();
final CompetingRiskSetsImpl sets = CompetingRiskUtils.calculateSetsEfficiently(data, new int[]{1,2});
final List<Double> times = sets.getEventTimes();
assertEquals(5, times.size());
// Times
assertEquals(1.0, times.get(0).doubleValue());
assertEquals(2.0, times.get(1).doubleValue());
assertEquals(3.0, times.get(2).doubleValue());
assertEquals(4.0, times.get(3).doubleValue());
assertEquals(6.0, times.get(4).doubleValue());
// Number of Events
assertEquals(2, sets.getNumberOfEvents(1.0, 1));
assertEquals(0, sets.getNumberOfEvents(1.0, 2));
assertEquals(1, sets.getNumberOfEvents(2.0, 1));
assertEquals(0, sets.getNumberOfEvents(2.0, 2));
assertEquals(0, sets.getNumberOfEvents(3.0, 1));
assertEquals(1, sets.getNumberOfEvents(3.0, 2));
assertEquals(1, sets.getNumberOfEvents(4.0, 1));
assertEquals(0, sets.getNumberOfEvents(4.0, 2));
assertEquals(0, sets.getNumberOfEvents(6.0, 1));
assertEquals(1, sets.getNumberOfEvents(6.0, 2));
// Make sure it doesn't break for other times
assertEquals(0, sets.getNumberOfEvents(5.5, 1));
assertEquals(0, sets.getNumberOfEvents(5.5, 2));
// Risk set
assertEquals(9, sets.getRiskSet(1).evaluate(0.5));
assertEquals(9, sets.getRiskSet(2).evaluate(0.5));
assertEquals(9, sets.getRiskSet(1).evaluate(1.0));
assertEquals(9, sets.getRiskSet(2).evaluate(1.0));
assertEquals(6, sets.getRiskSet(1).evaluate(1.5));
assertEquals(6, sets.getRiskSet(2).evaluate(1.5));
assertEquals(6, sets.getRiskSet(1).evaluate(2.0));
assertEquals(6, sets.getRiskSet(2).evaluate(2.0));
assertEquals(5, sets.getRiskSet(1).evaluate(2.3));
assertEquals(5, sets.getRiskSet(2).evaluate(2.3));
assertEquals(5, sets.getRiskSet(1).evaluate(2.5));
assertEquals(5, sets.getRiskSet(2).evaluate(2.5));
assertEquals(5, sets.getRiskSet(1).evaluate(2.7));
assertEquals(5, sets.getRiskSet(2).evaluate(2.7));
assertEquals(5, sets.getRiskSet(1).evaluate(3.0));
assertEquals(5, sets.getRiskSet(2).evaluate(3.0));
assertEquals(3, sets.getRiskSet(1).evaluate(3.5));
assertEquals(3, sets.getRiskSet(2).evaluate(3.5));
assertEquals(3, sets.getRiskSet(1).evaluate(4.0));
assertEquals(3, sets.getRiskSet(2).evaluate(4.0));
assertEquals(2, sets.getRiskSet(1).evaluate(4.5));
assertEquals(2, sets.getRiskSet(2).evaluate(4.5));
assertEquals(2, sets.getRiskSet(1).evaluate(5.0));
assertEquals(2, sets.getRiskSet(2).evaluate(5.0));
assertEquals(1, sets.getRiskSet(1).evaluate(5.5));
assertEquals(1, sets.getRiskSet(2).evaluate(5.5));
assertEquals(1, sets.getRiskSet(1).evaluate(6.0));
assertEquals(1, sets.getRiskSet(2).evaluate(6.0));
assertEquals(0, sets.getRiskSet(1).evaluate(6.5));
assertEquals(0, sets.getRiskSet(2).evaluate(6.5));
assertEquals(0, sets.getRiskSet(1).evaluate(7.0));
assertEquals(0, sets.getRiskSet(2).evaluate(7.0));
assertEquals(0, sets.getRiskSet(1).evaluate(7.5));
assertEquals(0, sets.getRiskSet(2).evaluate(7.5));
}
@Test
public void testCalculatingGraySets(){
final List<CompetingRiskResponseWithCensorTime> data = generateData();
final CompetingRiskGraySetsImpl sets = CompetingRiskUtils.calculateGraySetsEfficiently(data, new int[]{1,2});
final List<Double> times = sets.getEventTimes();
assertEquals(5, times.size());
// Times
assertEquals(1.0, times.get(0).doubleValue());
assertEquals(2.0, times.get(1).doubleValue());
assertEquals(3.0, times.get(2).doubleValue());
assertEquals(4.0, times.get(3).doubleValue());
assertEquals(6.0, times.get(4).doubleValue());
// Number of Events
assertEquals(2, sets.getNumberOfEvents(1.0, 1));
assertEquals(0, sets.getNumberOfEvents(1.0, 2));
assertEquals(1, sets.getNumberOfEvents(2.0, 1));
assertEquals(0, sets.getNumberOfEvents(2.0, 2));
assertEquals(0, sets.getNumberOfEvents(3.0, 1));
assertEquals(1, sets.getNumberOfEvents(3.0, 2));
assertEquals(1, sets.getNumberOfEvents(4.0, 1));
assertEquals(0, sets.getNumberOfEvents(4.0, 2));
assertEquals(0, sets.getNumberOfEvents(6.0, 1));
assertEquals(1, sets.getNumberOfEvents(6.0, 2));
// Make sure it doesn't break for other times
assertEquals(0, sets.getNumberOfEvents(5.5, 1));
assertEquals(0, sets.getNumberOfEvents(5.5, 2));
// Risk set
assertEquals(9, sets.getRiskSet(1).evaluate(0.5));
assertEquals(9, sets.getRiskSet(2).evaluate(0.5));
assertEquals(9, sets.getRiskSet(1).evaluate(1.0));
assertEquals(9, sets.getRiskSet(2).evaluate(1.0));
assertEquals(6, sets.getRiskSet(1).evaluate(1.5));
assertEquals(8, sets.getRiskSet(2).evaluate(1.5));
assertEquals(6, sets.getRiskSet(1).evaluate(2.0));
assertEquals(8, sets.getRiskSet(2).evaluate(2.0));
assertEquals(5, sets.getRiskSet(1).evaluate(2.3));
assertEquals(8, sets.getRiskSet(2).evaluate(2.3));
assertEquals(5, sets.getRiskSet(1).evaluate(2.5));
assertEquals(7, sets.getRiskSet(2).evaluate(2.5));
assertEquals(5, sets.getRiskSet(1).evaluate(2.7));
assertEquals(7, sets.getRiskSet(2).evaluate(2.7));
assertEquals(5, sets.getRiskSet(1).evaluate(3.0));
assertEquals(5, sets.getRiskSet(2).evaluate(3.0));
assertEquals(4, sets.getRiskSet(1).evaluate(3.5));
assertEquals(3, sets.getRiskSet(2).evaluate(3.5));
assertEquals(3, sets.getRiskSet(1).evaluate(4.0));
assertEquals(3, sets.getRiskSet(2).evaluate(4.0));
assertEquals(2, sets.getRiskSet(1).evaluate(4.5));
assertEquals(2, sets.getRiskSet(2).evaluate(4.5));
assertEquals(2, sets.getRiskSet(1).evaluate(5.0));
assertEquals(2, sets.getRiskSet(2).evaluate(5.0));
assertEquals(1, sets.getRiskSet(1).evaluate(5.5));
assertEquals(1, sets.getRiskSet(2).evaluate(5.5));
assertEquals(1, sets.getRiskSet(1).evaluate(6.0));
assertEquals(1, sets.getRiskSet(2).evaluate(6.0));
assertEquals(1, sets.getRiskSet(1).evaluate(6.5));
assertEquals(0, sets.getRiskSet(2).evaluate(6.5));
assertEquals(0, sets.getRiskSet(1).evaluate(7.0));
assertEquals(0, sets.getRiskSet(2).evaluate(7.0));
assertEquals(0, sets.getRiskSet(1).evaluate(7.5));
assertEquals(0, sets.getRiskSet(2).evaluate(7.5));
}
}

View file

@ -1,8 +1,15 @@
package ca.joeltherrien.randomforest.competingrisk;
import ca.joeltherrien.randomforest.*;
import ca.joeltherrien.randomforest.covariates.*;
import ca.joeltherrien.randomforest.responses.competingrisk.*;
import ca.joeltherrien.randomforest.CovariateRow;
import ca.joeltherrien.randomforest.DataLoader;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.Settings;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.covariates.settings.BooleanCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.NumericCovariateSettings;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskErrorRateCalculator;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskFunctions;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;
import ca.joeltherrien.randomforest.tree.Forest;
import ca.joeltherrien.randomforest.tree.ForestTrainer;
import ca.joeltherrien.randomforest.tree.Node;
@ -12,12 +19,14 @@ import ca.joeltherrien.randomforest.utils.Utils;
import com.fasterxml.jackson.databind.node.*;
import org.junit.jupiter.api.Test;
import static ca.joeltherrien.randomforest.TestUtils.assertCumulativeFunction;
import static ca.joeltherrien.randomforest.TestUtils.closeEnough;
import static org.junit.jupiter.api.Assertions.*;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import static ca.joeltherrien.randomforest.TestUtils.assertCumulativeFunction;
import static ca.joeltherrien.randomforest.TestUtils.closeEnough;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class TestCompetingRisk {
@ -104,7 +113,7 @@ public class TestCompetingRisk {
final List<Row<CompetingRiskResponse>> dataset = DataLoader.loadData(covariates, settings.getResponseLoader(), settings.getTrainingDataLocation());
final TreeTrainer<CompetingRiskResponse, CompetingRiskFunctions> treeTrainer = new TreeTrainer<>(settings, covariates);
final Node<CompetingRiskFunctions> node = treeTrainer.growTree(dataset);
final Node<CompetingRiskFunctions> node = treeTrainer.growTree(dataset, new Random());
final CovariateRow newRow = getPredictionRow(covariates);
@ -157,7 +166,7 @@ public class TestCompetingRisk {
final List<Row<CompetingRiskResponse>> dataset = DataLoader.loadData(covariates, settings.getResponseLoader(), settings.getTrainingDataLocation());
final TreeTrainer<CompetingRiskResponse, CompetingRiskFunctions> treeTrainer = new TreeTrainer<>(settings, covariates);
final Node<CompetingRiskFunctions> node = treeTrainer.growTree(dataset);
final Node<CompetingRiskFunctions> node = treeTrainer.growTree(dataset, new Random());
final CovariateRow newRow = getPredictionRow(covariates);
@ -281,6 +290,34 @@ public class TestCompetingRisk {
assertEquals(359, countEventTwo);
}
/**
* Used to time how long the algorithm takes
*
* @param args Not used.
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// timing
final TestCompetingRisk tcr = new TestCompetingRisk();
final Settings settings = tcr.getSettings();
settings.setNtree(300); // results are too variable at 100
final List<Covariate> covariates = settings.getCovariates();
final List<Row<CompetingRiskResponse>> dataset = DataLoader.loadData(covariates, settings.getResponseLoader(),
settings.getTrainingDataLocation());
final ForestTrainer<CompetingRiskResponse, CompetingRiskFunctions, CompetingRiskFunctions> forestTrainer = new ForestTrainer<>(settings, dataset, covariates);
final long startTime = System.currentTimeMillis();
for(int i=0; i<50; i++){
forestTrainer.trainSerial();
}
final long endTime = System.currentTimeMillis();
final double diffTime = endTime - startTime;
System.out.println(diffTime / 1000.0 / 50.0);
}
@Test
public void testLogRankSingleGroupDifferentiatorAllCovariates() throws IOException {

View file

@ -0,0 +1,89 @@
package ca.joeltherrien.randomforest.competingrisk;
import ca.joeltherrien.randomforest.DataLoader;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.Settings;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.covariates.settings.NumericCovariateSettings;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;
import ca.joeltherrien.randomforest.responses.competingrisk.differentiator.LogRankMultipleGroupDifferentiator;
import ca.joeltherrien.randomforest.tree.Split;
import ca.joeltherrien.randomforest.utils.SingletonIterator;
import ca.joeltherrien.randomforest.utils.Utils;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.node.TextNode;
import lombok.AllArgsConstructor;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class TestLogRankMultipleGroupDifferentiator {
private Iterator<Split<CompetingRiskResponse, ?>> turnIntoSplitIterator(List<Row<CompetingRiskResponse>> leftList,
List<Row<CompetingRiskResponse>> rightList){
return new SingletonIterator<Split<CompetingRiskResponse, ?>>(new Split(null, leftList, rightList, Collections.emptyList()));
}
public static Data<CompetingRiskResponse> loadData(String filename) throws IOException {
final ObjectNode yVarSettings = new ObjectNode(JsonNodeFactory.instance);
yVarSettings.set("type", new TextNode("CompetingRiskResponse"));
yVarSettings.set("delta", new TextNode("delta"));
yVarSettings.set("u", new TextNode("u"));
final Settings settings = Settings.builder()
.trainingDataLocation(filename)
.covariateSettings(
Utils.easyList(new NumericCovariateSettings("x2"))
)
.yVarSettings(yVarSettings)
.build();
final List<Covariate> covariates = settings.getCovariates();
final DataLoader.ResponseLoader loader = settings.getResponseLoader();
final List<Row<CompetingRiskResponse>> rows = DataLoader.loadData(covariates, loader, settings.getTrainingDataLocation());
return new Data<>(rows, covariates);
}
@Test
public void testSplitRule() throws IOException {
final LogRankMultipleGroupDifferentiator groupDifferentiator = new LogRankMultipleGroupDifferentiator(new int[]{1,2});
final List<Row<CompetingRiskResponse>> data = loadData("src/test/resources/test_split_data.csv").getRows();
final List<Row<CompetingRiskResponse>> group1Bad = data.subList(0, 196);
final List<Row<CompetingRiskResponse>> group2Bad = data.subList(196, data.size());
final double scoreBad = groupDifferentiator.differentiate(turnIntoSplitIterator(group1Bad, group2Bad)).getScore();
final List<Row<CompetingRiskResponse>> group1Good = data.subList(0, 199);
final List<Row<CompetingRiskResponse>> group2Good= data.subList(199, data.size());
final double scoreGood = groupDifferentiator.differentiate(turnIntoSplitIterator(group1Good, group2Good)).getScore();
// expected results calculated manually using survival::survdiff in R; see issue #10 in Gitea
closeEnough(71.41135, scoreBad, 0.00001);
closeEnough(71.5354, scoreGood, 0.00001);
}
private void closeEnough(double expected, double actual, double margin){
assertTrue(Math.abs(expected - actual) < margin, "Expected " + expected + " but saw " + actual);
}
@lombok.Data
@AllArgsConstructor
public static class Data<Y> {
private List<Row<Y>> rows;
private List<Covariate> covariateList;
}
}

View file

@ -1,52 +1,74 @@
package ca.joeltherrien.randomforest.competingrisk;
import ca.joeltherrien.randomforest.responses.competingrisk.*;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.responses.competingrisk.CompetingRiskResponse;
import ca.joeltherrien.randomforest.responses.competingrisk.differentiator.LogRankSingleGroupDifferentiator;
import ca.joeltherrien.randomforest.tree.GroupDifferentiator;
import ca.joeltherrien.randomforest.tree.Split;
import ca.joeltherrien.randomforest.utils.SingletonIterator;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class TestLogRankSingleGroupDifferentiator {
private List<CompetingRiskResponse> generateData1(){
final List<CompetingRiskResponse> data = new ArrayList<>();
private double getScore(final GroupDifferentiator<CompetingRiskResponse> groupDifferentiator, List<Row<CompetingRiskResponse>> left, List<Row<CompetingRiskResponse>> right){
final Iterator<Split<CompetingRiskResponse, ?>> iterator = new SingletonIterator<>(
new Split<>(null, left, right, Collections.emptyList()));
data.add(new CompetingRiskResponse(1, 1.0));
data.add(new CompetingRiskResponse(1, 1.0));
data.add(new CompetingRiskResponse(1, 2.0));
data.add(new CompetingRiskResponse(1, 1.5));
data.add(new CompetingRiskResponse(0, 2.0));
data.add(new CompetingRiskResponse(0, 1.5));
data.add(new CompetingRiskResponse(0, 2.5));
return groupDifferentiator.differentiate(iterator).getScore();
}
int count = 1;
private <Y> Row<Y> createRow(Y response){
return new Row<>(null, count++, response);
}
private List<Row<CompetingRiskResponse>> generateData1(){
final List<Row<CompetingRiskResponse>> data = new ArrayList<>();
data.add(createRow(new CompetingRiskResponse(1, 1.0)));
data.add(createRow(new CompetingRiskResponse(1, 1.0)));
data.add(createRow(new CompetingRiskResponse(1, 2.0)));
data.add(createRow(new CompetingRiskResponse(1, 1.5)));
data.add(createRow(new CompetingRiskResponse(0, 2.0)));
data.add(createRow(new CompetingRiskResponse(0, 1.5)));
data.add(createRow(new CompetingRiskResponse(0, 2.5)));
return data;
}
private List<CompetingRiskResponse> generateData2(){
final List<CompetingRiskResponse> data = new ArrayList<>();
private List<Row<CompetingRiskResponse>> generateData2(){
final List<Row<CompetingRiskResponse>> data = new ArrayList<>();
data.add(new CompetingRiskResponse(1, 2.0));
data.add(new CompetingRiskResponse(1, 2.0));
data.add(new CompetingRiskResponse(1, 4.0));
data.add(new CompetingRiskResponse(1, 3.0));
data.add(new CompetingRiskResponse(0, 4.0));
data.add(new CompetingRiskResponse(0, 3.0));
data.add(new CompetingRiskResponse(0, 5.0));
data.add(createRow(new CompetingRiskResponse(1, 2.0)));
data.add(createRow(new CompetingRiskResponse(1, 2.0)));
data.add(createRow(new CompetingRiskResponse(1, 4.0)));
data.add(createRow(new CompetingRiskResponse(1, 3.0)));
data.add(createRow(new CompetingRiskResponse(0, 4.0)));
data.add(createRow(new CompetingRiskResponse(0, 3.0)));
data.add(createRow(new CompetingRiskResponse(0, 5.0)));
return data;
}
@Test
public void testCompetingRiskResponseCombiner(){
final List<CompetingRiskResponse> data1 = generateData1();
final List<CompetingRiskResponse> data2 = generateData2();
final List<Row<CompetingRiskResponse>> data1 = generateData1();
final List<Row<CompetingRiskResponse>> data2 = generateData2();
final LogRankSingleGroupDifferentiator differentiator = new LogRankSingleGroupDifferentiator(1, new int[]{1});
final double score = differentiator.differentiate(data1, data2);
final double score = getScore(differentiator, data1, data2);
final double margin = 0.000001;
// Tested using 855 method
@ -55,6 +77,28 @@ public class TestLogRankSingleGroupDifferentiator {
}
@Test
public void testCorrectSplit() throws IOException {
final LogRankSingleGroupDifferentiator groupDifferentiator =
new LogRankSingleGroupDifferentiator(1, new int[]{1,2});
final List<Row<CompetingRiskResponse>> data = TestLogRankMultipleGroupDifferentiator.
loadData("src/test/resources/test_single_split.csv").getRows();
final List<Row<CompetingRiskResponse>> group1Good = data.subList(0, 221);
final List<Row<CompetingRiskResponse>> group2Good = data.subList(221, data.size());
final double scoreGood = getScore(groupDifferentiator, group1Good, group2Good);
final List<Row<CompetingRiskResponse>> group1Bad = data.subList(0, 222);
final List<Row<CompetingRiskResponse>> group2Bad = data.subList(222, data.size());
final double scoreBad = getScore(groupDifferentiator, group1Bad, group2Bad);
// Apparently not all groups are unique when splitting
assertEquals(scoreGood, scoreBad);
}
private void closeEnough(double expected, double actual, double margin){
assertTrue(Math.abs(expected - actual) < margin, "Expected " + expected + " but saw " + actual);
}

View file

@ -5,8 +5,9 @@ import ca.joeltherrien.randomforest.utils.Utils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import java.util.Collection;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import static org.junit.jupiter.api.Assertions.*;
@ -46,7 +47,10 @@ public class FactorCovariateTest {
void testAllSubsets(){
final FactorCovariate petCovariate = createTestCovariate();
final Collection<FactorCovariate.FactorSplitRule> splitRules = petCovariate.generateSplitRules(null, 100);
final List<Covariate.SplitRule<String>> splitRules = new ArrayList<>();
petCovariate.generateSplitRuleUpdater(null, 100, new Random())
.forEachRemaining(split -> splitRules.add(split.getSplitRule()));
assertEquals(splitRules.size(), 3);

View file

@ -3,10 +3,10 @@ package ca.joeltherrien.randomforest.csv;
import ca.joeltherrien.randomforest.DataLoader;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.Settings;
import ca.joeltherrien.randomforest.covariates.BooleanCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.BooleanCovariateSettings;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.covariates.FactorCovariateSettings;
import ca.joeltherrien.randomforest.covariates.NumericCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.FactorCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.NumericCovariateSettings;
import ca.joeltherrien.randomforest.utils.Utils;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
@ -15,7 +15,6 @@ import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

View file

@ -3,7 +3,9 @@ package ca.joeltherrien.randomforest.settings;
import ca.joeltherrien.randomforest.Settings;
import static org.junit.jupiter.api.Assertions.assertEquals;
import ca.joeltherrien.randomforest.covariates.*;
import ca.joeltherrien.randomforest.covariates.settings.BooleanCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.FactorCovariateSettings;
import ca.joeltherrien.randomforest.covariates.settings.NumericCovariateSettings;
import ca.joeltherrien.randomforest.utils.Utils;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;

View file

@ -0,0 +1,25 @@
package ca.joeltherrien.randomforest.utils;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class TestSingletonIterator {
@Test
public void verifyBehaviour(){
final Integer element = 5;
final SingletonIterator<Integer> iterator = new SingletonIterator<>(element);
assertTrue(iterator.hasNext());
assertTrue(iterator.hasNext());
assertEquals(Integer.valueOf(5), iterator.next());
assertFalse(iterator.hasNext());
assertNull(iterator.next());
}
}

View file

@ -0,0 +1,68 @@
package ca.joeltherrien.randomforest.utils;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
public class TestUniqueSubsetValueIterator {
@Test
public void testIterator1(){
final List<Integer> testData = Arrays.asList(
1,1,2,3,5,5,5,6,7,7
);
final Integer[] indexes = new Integer[]{2,3,4,5};
final UniqueValueIterator<Integer> uniqueValueIterator = new UniqueValueIterator<>(testData.iterator());
final UniqueSubsetValueIterator<Integer> iterator = new UniqueSubsetValueIterator<>(uniqueValueIterator, indexes);
// we expect to get 2, 3, and 5 back. 5 should happen only once
assertEquals(iterator.getIndex(), 0);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 2);
assertEquals(iterator.getIndex(), 3);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 3);
assertEquals(iterator.getIndex(), 4);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 5);
assertEquals(iterator.getIndex(), 7);
assertFalse(iterator.hasNext());
}
@Test
public void testIterator2(){
final List<Integer> testData = Arrays.asList(
1,1,2,3,5,5,5,6,7,7
);
final Integer[] indexes = new Integer[]{1,8};
final UniqueValueIterator<Integer> uniqueValueIterator = new UniqueValueIterator<>(testData.iterator());
final UniqueSubsetValueIterator<Integer> iterator = new UniqueSubsetValueIterator<>(uniqueValueIterator, indexes);
assertEquals(iterator.getIndex(), 0);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 1);
assertEquals(iterator.getIndex(), 2);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 7);
assertEquals(iterator.getIndex(), 10);
assertFalse(iterator.hasNext());
}
}

View file

@ -0,0 +1,112 @@
package ca.joeltherrien.randomforest.utils;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
public class TestUniqueValueIterator {
@Test
public void testIterator1(){
final List<Integer> testData = Arrays.asList(
1,1,2,3,5,5,5,6,7,7
);
final UniqueValueIterator<Integer> iterator = new UniqueValueIterator<>(testData.iterator());
assertEquals(iterator.getIndex(), 0);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 1);
assertEquals(iterator.getIndex(), 2);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 2);
assertEquals(iterator.getIndex(), 3);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 3);
assertEquals(iterator.getIndex(), 4);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 5);
assertEquals(iterator.getIndex(), 7);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 6);
assertEquals(iterator.getIndex(), 8);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 7);
assertEquals(iterator.getIndex(), 10);
assertTrue(!iterator.hasNext());
}
@Test
public void testIterator2(){
final List<Integer> testData = Arrays.asList(
1,2,3,5,5,5,6,7 // same numbers; but 1 and 7 only appear once each
);
final UniqueValueIterator<Integer> iterator = new UniqueValueIterator<>(testData.iterator());
assertEquals(iterator.getIndex(), 0);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 1);
assertEquals(iterator.getIndex(), 1);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 2);
assertEquals(iterator.getIndex(), 2);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 3);
assertEquals(iterator.getIndex(), 3);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 5);
assertEquals(iterator.getIndex(), 6);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 6);
assertEquals(iterator.getIndex(), 7);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 7);
assertEquals(iterator.getIndex(), 8);
assertFalse(iterator.hasNext());
}
@Test
public void testIterator3(){
final List<Integer> testData = Arrays.asList(
1,1,1,1,1,1,1,2,2,2,2,2,3
);
final UniqueValueIterator<Integer> iterator = new UniqueValueIterator<>(testData.iterator());
assertEquals(iterator.getIndex(), 0);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 1);
assertEquals(iterator.getIndex(), 7);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 2);
assertEquals(iterator.getIndex(), 12);
assertTrue(iterator.hasNext());
assertEquals(iterator.next().intValue(), 3);
assertEquals(iterator.getIndex(), 13);
assertFalse(iterator.hasNext());
}
}

View file

@ -2,7 +2,7 @@ package ca.joeltherrien.randomforest.workshop;
import ca.joeltherrien.randomforest.*;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.covariates.NumericCovariate;
import ca.joeltherrien.randomforest.covariates.numeric.NumericCovariate;
import ca.joeltherrien.randomforest.responses.regression.MeanResponseCombiner;
import ca.joeltherrien.randomforest.responses.regression.WeightedVarianceGroupDifferentiator;
import ca.joeltherrien.randomforest.tree.ForestTrainer;

View file

@ -3,7 +3,7 @@ package ca.joeltherrien.randomforest.workshop;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.CovariateRow;
import ca.joeltherrien.randomforest.covariates.NumericCovariate;
import ca.joeltherrien.randomforest.covariates.numeric.NumericCovariate;
import ca.joeltherrien.randomforest.Row;
import ca.joeltherrien.randomforest.responses.regression.MeanResponseCombiner;
import ca.joeltherrien.randomforest.responses.regression.WeightedVarianceGroupDifferentiator;
@ -54,13 +54,14 @@ public class TrainSingleTree {
.covariates(covariateNames)
.responseCombiner(new MeanResponseCombiner())
.maxNodeDepth(30)
.mtry(2)
.nodeSize(5)
.numberOfSplits(0)
.build();
final long startTime = System.currentTimeMillis();
final Node<Double> baseNode = treeTrainer.growTree(trainingSet);
final Node<Double> baseNode = treeTrainer.growTree(trainingSet, new Random());
final long endTime = System.currentTimeMillis();
System.out.println(((double)(endTime - startTime))/1000.0);

View file

@ -4,7 +4,7 @@ package ca.joeltherrien.randomforest.workshop;
import ca.joeltherrien.randomforest.*;
import ca.joeltherrien.randomforest.covariates.Covariate;
import ca.joeltherrien.randomforest.covariates.FactorCovariate;
import ca.joeltherrien.randomforest.covariates.NumericCovariate;
import ca.joeltherrien.randomforest.covariates.numeric.NumericCovariate;
import ca.joeltherrien.randomforest.responses.regression.MeanResponseCombiner;
import ca.joeltherrien.randomforest.responses.regression.WeightedVarianceGroupDifferentiator;
import ca.joeltherrien.randomforest.tree.Node;
@ -13,7 +13,6 @@ import ca.joeltherrien.randomforest.utils.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
@ -21,8 +20,6 @@ import java.util.stream.DoubleStream;
public class TrainSingleTreeFactor {
public static void main(String[] args) {
System.out.println("Hello world!");
final Random random = new Random(123);
final int n = 10000;
@ -84,7 +81,7 @@ public class TrainSingleTreeFactor {
final long startTime = System.currentTimeMillis();
final Node<Double> baseNode = treeTrainer.growTree(trainingSet);
final Node<Double> baseNode = treeTrainer.growTree(trainingSet, random);
final long endTime = System.currentTimeMillis();
System.out.println(((double)(endTime - startTime))/1000.0);

View file

@ -0,0 +1,437 @@
"T","J","x1","x2","x3","set","C","u","delta"
2.36878896318231,2,-0.940736926269951,-2.74741651651697,-0.664166655908226,"d1",5.29132863866294,2.36878896318231,2
0.0400548702796549,2,-0.22357985281977,-2.6784315261127,-1.45393397969899,"d1",24.0450198381188,0.0400548702796549,2
6.07273173432729,1,-0.541321943849921,-2.61982060211246,-0.313865486168637,"d1",73.2294178857516,6.07273173432729,1
0.0586427948437631,2,-4.08384650953597,-2.57905490896322,-1.94148492991394,"d1",29.575672428309,0.0586427948437631,2
1.12241411577435,2,-0.343115442654736,-2.5261239240197,-0.568482592792157,"d1",10.7716199103743,1.12241411577435,2
7.17758750180007,1,-0.0549158329059284,-2.49595311098652,0.777187867970255,"d1",0.770628582686186,0.770628582686186,0
5.87972604899089,1,-0.417519608027854,-2.32569598105725,-1.23410968014014,"d1",21.7603224188032,5.87972604899089,1
6.09850069496217,1,-0.624229581484001,-2.20950230906333,0.847654716653119,"d1",47.9509777923055,6.09850069496217,1
5.24709419887559,1,-0.494413435039913,-2.1881842156793,-0.530500950041165,"d1",9.29604623673615,5.24709419887559,1
5.49139738108154,1,-0.399023904593903,-2.17411513837698,-0.886241025366943,"d1",4.66279121115804,4.66279121115804,0
7.49679934937549,1,-1.503172816431,-2.11416482594655,-0.784022459577515,"d1",38.599446339715,7.49679934937549,1
0.120167720597237,2,-0.0111153155803973,-2.07922849793458,-0.0864173413157577,"d1",8.30861929266284,0.120167720597237,2
0.0120866466313601,2,-1.13246179303068,-2.07388986542802,-0.108705951800557,"d1",74.5770950200868,0.0120866466313601,2
1.93336439869347,2,-0.953063484590791,-2.06875275630198,0.391474935780971,"d1",8.68413874879479,1.93336439869347,2
0.193771776743233,2,-2.09780872632678,-2.06600379672067,0.481439459620942,"d1",11.4459616225213,0.193771776743233,2
0.684051165357232,2,-1.2506320380666,-2.05742095431252,0.254373142408372,"d1",27.2641535281184,0.684051165357232,2
2.67318147171264,1,-0.895097422928461,-2.04228406320874,0.880998661569412,"d1",7.24411055445671,2.67318147171264,1
6.28834176835203,1,-0.78864447554692,-1.96217525934728,-0.163789285265814,"d1",27.6986681102755,6.28834176835203,1
4.62668493336862,1,-0.381536878928848,-1.92665388805734,-0.290580353016676,"d1",7.24744734354317,4.62668493336862,1
0.0195419555529952,2,-0.453640870109268,-1.9241779608709,-0.458499569719527,"d1",0.790413445705888,0.0195419555529952,2
5.52686329920565,1,-1.35281077656466,-1.92380314891533,0.00358885830164929,"d1",34.5150513185148,5.52686329920565,1
0.0338792934082568,2,-0.137226420194861,-1.92177375675587,0.303819485323308,"d1",4.49422365985811,0.0338792934082568,2
0.489470157306641,2,-0.00443898833912055,-1.91738220316821,0.325411778513068,"d1",7.40209592506289,0.489470157306641,2
2.46352284875266,1,-0.343935987670365,-1.91503628904925,0.263891018343932,"d1",5.46459940262139,2.46352284875266,1
1.91431453212664,1,-0.646938145621328,-1.8443918568905,0.198442464738305,"d1",6.95764179200271,1.91431453212664,1
3.34306721665146,2,-0.521888135986598,-1.81633085792332,0.140235064973441,"d1",13.305580355227,3.34306721665146,2
2.25421412226762,2,-0.237135702707983,-1.8035308340996,-0.0273032797726184,"d1",4.4884777849039,2.25421412226762,2
5.32683386651568,1,-0.383757190847992,-1.78869536882293,-0.500253710429788,"d1",13.8389095757157,5.32683386651568,1
0.389743744395673,2,-1.02671802816671,-1.76818749571248,-0.25956459070352,"d1",6.89092403936742,0.389743744395673,2
5.71650745526166,1,-0.377604179930099,-1.76584618649961,-0.158829141188165,"d1",16.4490152316151,5.71650745526166,1
1.67705107844415,2,-1.14700688399577,-1.75637277902045,0.655267799539731,"d1",48.0127680363638,1.67705107844415,2
0.592473545577377,2,-1.11326150693183,-1.7527097359872,-1.13722476306219,"d1",7.56208908218571,0.592473545577377,2
0.93774029515208,2,-0.549454171154571,-1.71226440732097,-0.339685392053216,"d1",1.84914546087384,0.93774029515208,2
0.40062484703958,2,-0.104855806316002,-1.67335276942983,-0.426138874612545,"d1",6.27608065493405,0.40062484703958,2
0.159861234016716,2,-0.931567097747794,-1.67219451475428,-0.870460505814775,"d1",3.55606431638744,0.159861234016716,2
5.8492162264662,1,-1.87452364236991,-1.66159908881996,-1.38113124744767,"d1",4.04938737861812,4.04938737861812,0
5.70065559417847,1,-3.14276614908329,-1.65611164142717,0.352264508089579,"d1",3.77463447861373,3.77463447861373,0
0.224718576839926,2,-0.226827411558332,-1.62539155314324,-0.505322271031184,"d1",6.61533754318953,0.224718576839926,2
0.0435942329366584,2,-0.875238415727581,-1.61399017351239,0.577880520091048,"d1",1.98178011927421,0.0435942329366584,2
0.872705549891007,2,-0.178995556137531,-1.57936046676629,0.108625526623102,"d1",22.7864865764024,0.872705549891007,2
6.36851677387452,1,-0.367724579424765,-1.57738544236245,-0.626225591399495,"d1",17.2717156252804,6.36851677387452,1
2.43392219195578,2,-0.707116976325429,-1.56335701495115,0.965751242534558,"d1",14.4206041461768,2.43392219195578,2
0.330720949053871,2,-0.445553502838385,-1.56202621765436,-0.249510097888011,"d1",7.44351300329184,0.330720949053871,2
5.93261099061297,1,-1.81658308280611,-1.5514135530076,0.362911703061769,"d1",20.9917188054862,5.93261099061297,1
2.21842301810596,2,-0.942928659225199,-1.49327481765058,0.838989993453762,"d1",1.62975564390585,1.62975564390585,0
6.17321580899134,1,-0.846667767066977,-1.4929371315781,-1.55721907237787,"d1",1.9526223000139,1.9526223000139,0
0.058051934465766,2,-0.0398973838021135,-1.49119700174392,0.095087134856549,"d1",42.142936350546,0.058051934465766,2
6.08617126479093,1,-1.39762186112439,-1.48412697347617,-0.270011324155031,"d1",11.1088740918785,6.08617126479093,1
3.18876150978689,2,-2.13842961471416,-1.47309707638112,-0.755451309039423,"d1",36.4314661530738,3.18876150978689,2
0.0172548928457301,2,-0.174059321462742,-1.41845535076939,0.363575496287814,"d1",20.7911967105212,0.0172548928457301,2
1.33514567274125,2,-0.66874948622225,-1.37014049288289,0.15420576439085,"d1",3.69772279635072,1.33514567274125,2
6.70443202813046,1,-0.274400088040043,-1.36283138996168,-0.203087231534127,"d1",15.5954272850397,6.70443202813046,1
5.48304553044083,1,-0.0184418688789402,-1.35412193807632,-0.265115429781722,"d1",6.22560746967793,5.48304553044083,1
3.98201646621768,1,-1.3201407272101,-1.34604086981472,0.85419508410079,"d1",12.3219889681786,3.98201646621768,1
1.10954519196367,2,-1.2942947236508,-1.30241257662124,-0.0737564121156477,"d1",3.75448394108866,1.10954519196367,2
0.333034928888083,2,-0.0361982109653429,-1.2962650039174,0.800292309814105,"d1",5.89722495526075,0.333034928888083,2
5.5067986823978,1,-1.81526927963113,-1.29369838086625,-0.716845568650473,"d1",33.3969767747407,5.5067986823978,1
0.236702047288418,2,-0.174192985316702,-1.29045902266205,0.710109174264196,"d1",35.659496791079,0.236702047288418,2
0.00543433148413897,2,-1.49217629504083,-1.27755373020195,-0.153009947789431,"d1",15.6081267240572,0.00543433148413897,2
0.392974628135562,2,-0.672731030589471,-1.27711238763253,0.259632568995488,"d1",0.989711219444871,0.392974628135562,2
3.33453140390997,2,-0.28231681794934,-1.27615970205156,0.580553117107873,"d1",13.8484762236476,3.33453140390997,2
0.745801116086655,2,-0.814855584673265,-1.26261618297827,0.532327960608554,"d1",26.3732809192481,0.745801116086655,2
1.93039115696194,2,-0.523752466176473,-1.25308854838447,-0.779166441487765,"d1",16.4774892664736,1.93039115696194,2
3.46145374880599,1,-0.104575175258664,-1.25222662675546,0.730793621250424,"d1",11.2728726584464,3.46145374880599,1
0.622301510402748,2,-0.799354312298097,-1.20712709767553,0.82915949311628,"d1",31.7985615907917,0.622301510402748,2
4.36399552071179,1,-0.377585614252292,-1.20262382265337,-1.05942486854663,"d1",9.88032352179289,4.36399552071179,1
0.315932573628431,2,-1.54614147291695,-1.19736350592567,-0.282221806464306,"d1",12.5319989770651,0.315932573628431,2
6.30066548295561,1,-0.217638413548828,-1.17871899318606,0.57224481822844,"d1",15.5058489656678,6.30066548295561,1
0.134716821071798,2,-0.289929666166654,-1.14709612408807,-0.438929712319987,"d1",93.6292425492659,0.134716821071798,2
2.07553452617469,2,-0.871246560563739,-1.13599352100253,-1.54798197797058,"d1",5.40198363363743,2.07553452617469,2
0.397368354257196,2,-0.464944141245776,-1.11689431557799,-0.153395631317365,"d1",16.4783747618805,0.397368354257196,2
5.99384605375399,1,-1.01390645601822,-1.11564616812347,-0.950790366577052,"d1",10.201620683074,5.99384605375399,1
5.95161350419295,1,-1.00207112709375,-1.10335537016156,0.0280083965309446,"d1",1.14143405233437,1.14143405233437,0
6.33303235415056,1,-2.19297968581012,-1.10132320061089,0.555145710586123,"d1",8.98656466975808,6.33303235415056,1
0.172320284880698,2,-1.32364156638484,-1.09928045326075,-0.0198070388067981,"d1",0.764144429684099,0.172320284880698,2
0.0204675737768412,2,-1.64183103554089,-1.07929942510633,-0.445163795267712,"d1",35.097954085279,0.0204675737768412,2
5.71120658667394,1,-0.706142520192073,-1.07327991315842,-1.32929693533771,"d1",10.5845972150564,5.71120658667394,1
0.44132914301008,2,-1.60463558024696,-1.07041582836413,0.179801609496641,"d1",14.7133602007272,0.44132914301008,2
0.0221813134849072,2,-0.454605537530624,-1.06572328986086,-0.685320659922523,"d1",4.51061540283263,0.0221813134849072,2
1.81137038013878,2,-0.634982565171419,-1.06273841001991,0.099763296921695,"d1",5.77572761103511,1.81137038013878,2
6.26432244579951,1,-0.0273481508097327,-1.04825639026013,-1.60892311094708,"d1",6.82882342448108,6.26432244579951,1
6.04862054714964,1,-0.738613856144511,-1.0342835781739,-0.59498556050642,"d1",15.9343750580194,6.04862054714964,1
7.48636650652995,1,-0.326223712666721,-1.03354050308388,0.348234778700151,"d1",0.758487256614161,0.758487256614161,0
5.55062340284452,1,-0.400885490811939,-1.02535023183075,0.400246834043774,"d1",17.0179952128796,5.55062340284452,1
0.518573008943349,2,-0.0273083549434431,-1.01262506134754,-0.930184572213555,"d1",2.10150590812186,0.518573008943349,2
3.46053574217444,2,-0.794177329449999,-0.999008445323631,-0.658993837250615,"d1",14.0706040959429,3.46053574217444,2
0.486459741623382,2,-0.0869982635676569,-0.997759562698134,-1.14920595721707,"d1",4.59333625883186,0.486459741623382,2
0.315952830302968,2,-1.61520106845425,-0.974002982411684,0.432369032532503,"d1",15.566208568786,0.315952830302968,2
3.12192197551741,1,-1.30407322958316,-0.966557165502383,0.51673530990843,"d1",38.3739643836897,3.12192197551741,1
0.166353042138176,2,-1.25189433042384,-0.95349718228182,0.173527003414866,"d1",1.78076698444784,0.166353042138176,2
5.14947918722961,1,-0.348134398501211,-0.949771064641547,0.842167145501435,"d1",10.0344473868608,5.14947918722961,1
0.61755093701298,2,-1.20220733855003,-0.940807269422338,0.669507751445202,"d1",81.1423001768899,0.61755093701298,2
0.774340918245626,2,-1.79386239234471,-0.936480765229449,-0.386657715263962,"d1",10.2844402287155,0.774340918245626,2
1.18503246731581,2,-1.62566462366753,-0.924943886647788,-1.09544735384729,"d1",27.3488828345182,1.18503246731581,2
5.81430168938689,1,-1.36562690447452,-0.911173236644446,-1.09133594052886,"d1",23.086135415659,5.81430168938689,1
0.0582360443007296,2,-0.334693872287563,-0.908885279255003,0.894420816860302,"d1",19.8876115931426,0.0582360443007296,2
6.67562862428162,1,-0.320758358348144,-0.906136581293013,-0.62204490108631,"d1",3.95447020418942,3.95447020418942,0
5.62609493242318,1,-0.342004151583766,-0.904463968233442,0.93567149953094,"d1",16.6209467678311,5.62609493242318,1
0.224124095402658,2,-1.80489989908745,-0.897620346487348,-1.14866233536842,"d1",10.9962219744921,0.224124095402658,2
5.07161450929288,1,-1.04719234274716,-0.882424518189252,-0.679290525085992,"d1",69.6467088082248,5.07161450929288,1
0.536435312125832,2,-0.425266035641447,-0.880708384373669,-0.605260699678918,"d1",51.3515850934174,0.536435312125832,2
0.712225435259652,2,-1.01317907039129,-0.880364756492861,0.799448704038158,"d1",7.95205843634903,0.712225435259652,2
2.20243284019238,1,-0.0612420173925512,-0.867470410367046,0.359002148193652,"d1",9.25134299322963,2.20243284019238,1
0.605893896427006,2,-1.04822994915312,-0.846173148741664,-0.901844342725123,"d1",19.4895937285366,0.605893896427006,2
6.46572696633957,1,-0.395668788335314,-0.84271443456443,-0.550602798752161,"d1",0.209037251770496,0.209037251770496,0
0.487000552937388,2,-1.46401306735521,-0.836512183168418,0.173597441595392,"d1",6.77927704167621,0.487000552937388,2
1.51509302101078,2,-0.0412407968604744,-0.834982086349831,0.525673645724282,"d1",34.5675922540908,1.51509302101078,2
6.02731790506686,1,-0.882989817626795,-0.834798925439948,-0.834803917000752,"d1",5.93346848471039,5.93346848471039,0
0.381546576756047,2,-0.131390142151624,-0.832849601899911,-0.120359877783258,"d1",1.41744351014495,0.381546576756047,2
0.00760392192751169,2,-0.383924028857785,-0.828126721930831,-0.0587775279070268,"d1",26.4171911395135,0.00760392192751169,2
6.85879283492523,1,-1.49318471777496,-0.820526788889496,-0.374675059074199,"d1",2.85277323708454,2.85277323708454,0
0.0342933693900704,2,-0.823077108668868,-0.815970182520681,-0.715242420590766,"d1",28.5419499857311,0.0342933693900704,2
0.617406914941967,2,-0.781115112888234,-0.800445475005252,-1.28039807314278,"d1",11.6443356871605,0.617406914941967,2
3.74171116644939,1,-0.0684740865411551,-0.780325173540396,-1.30117863747707,"d1",29.2131662351971,3.74171116644939,1
2.12804690328918,2,-1.05479508853852,-0.769838765813365,0.403812256923429,"d1",16.0360205043719,2.12804690328918,2
4.09780351235117,1,-0.0193241721415964,-0.768715647254528,0.0748831382783931,"d1",9.43803951144218,4.09780351235117,1
0.0217920186910804,2,-0.559239535829182,-0.73934495429406,0.353443306116614,"d1",5.2491182461381,0.0217920186910804,2
0.394180545583367,2,-0.0118641769292016,-0.738198607201708,-0.688623668491378,"d1",2.26109574536297,0.394180545583367,2
1.32289936389298,2,-0.0387650901849373,-0.728247447556326,0.0674068712586103,"d1",2.98578164101508,1.32289936389298,2
0.302159678656608,2,-1.44186893732442,-0.72744919444054,-1.06860676120492,"d1",4.14901913143694,0.302159678656608,2
0.708418690834115,2,-0.285741501654332,-0.726075872408598,-0.507188183920061,"d1",16.6256199040427,0.708418690834115,2
0.0241285795345902,2,-0.0260930090449579,-0.717564843944006,-0.374181116030244,"d1",34.6676181985025,0.0241285795345902,2
0.870312893721175,2,-0.000363395655838854,-0.711398171424794,0.351965732858065,"d1",20.0971285967741,0.870312893721175,2
5.28564457229326,1,-0.614476643770374,-0.708606987497861,-1.37559225313687,"d1",1.81252158246934,1.81252158246934,0
0.941750313113344,2,-1.03720924392128,-0.70592154760638,0.0282725230040198,"d1",46.611236940243,0.941750313113344,2
2.44006958777521,2,-0.809699231995388,-0.704070374217583,-0.0566796527137429,"d1",20.2155850074234,2.44006958777521,2
0.246147812767859,2,-1.39286438513178,-0.696916600582024,0.723455131796638,"d1",10.4792898520827,0.246147812767859,2
6.46105088284385,1,-0.0584333542653784,-0.677443901317481,-0.347832512964975,"d1",11.2590421535523,6.46105088284385,1
0.830613736952555,2,-0.472779134493958,-0.666382796158839,0.106316605714906,"d1",10.7149247918278,0.830613736952555,2
1.27080103285135,2,-0.943014149166745,-0.660182675036647,-0.296569752660686,"d1",10.2358338516206,1.27080103285135,2
1.6344318868214,2,-1.15851492740154,-0.659363022297778,-0.519761238348733,"d1",24.3289563610199,1.6344318868214,2
3.41197561381413,1,-0.114318963624616,-0.65618260348354,-0.167158679317667,"d1",1.2596212202486,1.2596212202486,0
5.83460786148936,1,-0.0303705017867669,-0.655140358879648,-0.705817680811048,"d1",10.3931054691499,5.83460786148936,1
0.589666957966983,2,-1.59057886445477,-0.654263401747602,0.637993715185194,"d1",5.51040226593614,0.589666957966983,2
4.54696150229568,1,-1.86139470133512,-0.651617617594723,0.392269058987265,"d1",2.98995271325111,2.98995271325111,0
7.26930846394147,1,-0.0308394170638917,-0.638362034477254,0.250417060256469,"d1",7.80484799608692,7.26930846394147,1
0.406479293480515,2,-0.997250721445793,-0.634435430455023,0.314635955402795,"d1",10.8758389414521,0.406479293480515,2
6.20537110173297,1,-1.34447668217377,-0.628064331449498,0.275705167937989,"d1",0.913132007038143,0.913132007038143,0
1.1413343520415,2,-0.541319960936245,-0.610769730062258,-0.837394943418138,"d1",25.6323812334778,1.1413343520415,2
6.5012017255228,1,-1.76555624350856,-0.605580811571845,-0.535693414416799,"d1",2.81374442207194,2.81374442207194,0
0.320266132708639,2,-1.58757047236722,-0.600017897571358,0.737238047653923,"d1",2.60571850154193,0.320266132708639,2
6.60670570162074,1,-1.77995131860148,-0.587362519071825,-0.399805463971556,"d1",15.09625551091,6.60670570162074,1
0.494166820775717,2,-1.42328395128162,-0.583983730286862,0.445604883307791,"d1",15.4901144016316,0.494166820775717,2
1.2916429349481,2,-0.0136814571187584,-0.561248827441379,-0.679609559979761,"d1",31.1157296575536,1.2916429349481,2
6.84719911605157,1,-0.991333253080982,-0.536840302369252,-0.329207585539367,"d1",31.3672893105035,6.84719911605157,1
3.33573240393048,1,-0.232024208356925,-0.52957313175545,0.3297707960891,"d1",3.84123377395356,3.33573240393048,1
0.293787405826151,2,-1.57869348984733,-0.52290224046694,-0.858451414496243,"d1",13.5298108309507,0.293787405826151,2
2.59829062769625,2,-1.03413272510194,-0.520306220041396,-0.0947103549299787,"d1",24.2958168304505,2.59829062769625,2
1.15069140396537,2,-0.7692543960691,-0.514917254695601,-0.0498114216751121,"d1",15.06683004936,1.15069140396537,2
0.546846426587379,2,-1.08590377397733,-0.51073540461372,0.559865391230521,"d1",6.54946511611342,0.546846426587379,2
5.06505271674886,1,-0.667965724979494,-0.506722121641543,-0.477852765839133,"d1",10.645618988201,5.06505271674886,1
4.5711114569665,1,-1.27769811178029,-0.500479722824924,0.674078243067952,"d1",29.9835772795563,4.5711114569665,1
0.9548158202933,2,-0.0243746767241474,-0.5000677377122,-0.140677704414042,"d1",25.8506448185983,0.9548158202933,2
0.303704824764282,2,-0.57875083356825,-0.499882058039656,-0.103959338458585,"d1",17.4203944570365,0.303704824764282,2
0.568540091544093,2,-0.244519612797395,-0.494741102467464,-0.896176056492635,"d1",13.2353435084224,0.568540091544093,2
0.210479910019785,2,-1.51738850112856,-0.492184841665298,-0.86024334169026,"d1",52.87170368926,0.210479910019785,2
3.88505572785084,1,-0.495911543972495,-0.492149973041001,0.612775086639207,"d1",3.92974231392145,3.88505572785084,1
6.60548957054962,1,-1.00258266755843,-0.491774081169479,-1.78593148360063,"d1",14.8081099713895,6.60548957054962,1
1.39085324275344,2,-1.62677928324155,-0.489806966081124,-0.753648276656162,"d1",1.49955506421369,1.39085324275344,2
0.227768044192674,2,-0.589333520820825,-0.489183660065085,-0.728407316512854,"d1",47.03465077774,0.227768044192674,2
6.11630072080504,1,-0.626318140514488,-0.487935904504218,-0.605005623202529,"d1",11.6748199984431,6.11630072080504,1
0.0783678251318634,2,-1.8345771286241,-0.48469296452704,-1.19122687804207,"d1",97.106801004787,0.0783678251318634,2
0.0753125636838377,2,-0.438810514105078,-0.466849872263636,-0.639803324919198,"d1",13.7100772652775,0.0753125636838377,2
1.30011751591684,2,-1.71754032358037,-0.459453147067006,-1.72050403507059,"d1",85.162896984439,1.30011751591684,2
4.80113809032709,1,-0.370922305602338,-0.455289890327413,0.461100688628078,"d1",4.69688176482536,4.69688176482536,0
5.90888620164702,1,-1.30813817903797,-0.455234944124943,-1.7766120289902,"d1",11.7342197801918,5.90888620164702,1
0.372085412365962,2,-1.33242203676526,-0.444675568969578,0.61659731035441,"d1",48.2229322542377,0.372085412365962,2
4.89059350679706,1,-0.725492522106697,-0.443060772439573,0.762229718534035,"d1",39.5469368604903,4.89059350679706,1
2.04659481151941,2,-0.777806586832909,-0.440025014389601,-0.872890458444863,"d1",50.4553057600684,2.04659481151941,2
2.03897058582845,2,-0.0378012490430374,-0.429027012368145,-1.31597708285001,"d1",15.4083807848072,2.03897058582845,2
1.01758827078612,2,-1.28016548673871,-0.425688468851661,0.699129138140606,"d1",4.60447026416659,1.01758827078612,2
6.25879912495179,1,-0.583077192951759,-0.422108191588108,0.0475003603155665,"d1",31.2591543404346,6.25879912495179,1
7.25336918043015,1,-0.565741103403003,-0.419714741743597,-0.734974041468522,"d1",2.90408703498542,2.90408703498542,0
2.14003248551437,1,-0.170888399904471,-0.416478265204679,0.0800414014582476,"d1",0.441465461626649,0.441465461626649,0
0.545938095077872,2,-0.341691685411867,-0.414544246005865,0.550218488360563,"d1",34.5256463656698,0.545938095077872,2
6.22629632259517,1,-0.950085098058274,-0.414444964650831,-0.819619600597609,"d1",21.263416352773,6.22629632259517,1
1.08605028219045,2,-0.927645636285453,-0.410109974720035,-0.990394906860903,"d1",20.0148759773912,1.08605028219045,2
1.41585406466367,2,-0.478110211767677,-0.387844311940163,0.185119111369212,"d1",2.43890167762988,1.41585406466367,2
5.12777096471775,1,-2.52723629897812,-0.383344167234604,0.325516175397701,"d1",23.3256739742103,5.12777096471775,1
0.560892237350345,2,-1.55213972791835,-0.364768126745658,-0.374599489635217,"d1",18.5055401726606,0.560892237350345,2
4.00012938074326,1,-0.625444758007576,-0.36449594663103,0.504193738683109,"d1",17.2802503896699,4.00012938074326,1
4.8660578734478,1,-0.0571390786270154,-0.362794779999219,-0.74444704195158,"d1",12.4678146466613,4.8660578734478,1
0.870262232567084,2,-0.740357105365835,-0.362352634774993,-0.021975758077144,"d1",21.0608527614715,0.870262232567084,2
5.85748684824363,1,-0.73430371198211,-0.354218553154874,-0.360712942308638,"d1",26.2455050811864,5.85748684824363,1
1.71520997575464,2,-1.28384066134343,-0.353137962846624,0.267434135957981,"d1",8.44167739699644,1.71520997575464,2
2.99897972238633,1,-0.0370489535228247,-0.352019527608096,-0.733369800107882,"d1",2.39286359521427,2.39286359521427,0
3.79124856532967,2,-0.497280459282847,-0.333511238390777,-0.513272422071774,"d1",13.5526807513088,3.79124856532967,2
5.68305890342214,1,-0.0915648931614195,-0.332238948153213,-0.716289045784358,"d1",9.98184344731271,5.68305890342214,1
4.67288406222034,1,-0.162736049870991,-0.32731702562614,0.286540429366584,"d1",48.898998906178,4.67288406222034,1
0.635374410077929,2,-0.231344174018691,-0.324751888155364,0.7514928121089,"d1",4.75083186220402,0.635374410077929,2
4.82523018536497,1,-2.25382843672391,-0.308134050996533,0.684642990800304,"d1",4.97351374477148,4.82523018536497,1
0.698897804944637,2,-2.04417478061325,-0.30742952185735,-0.350541787161071,"d1",19.5704999176368,0.698897804944637,2
2.69758547643635,2,-2.17762152778411,-0.296597035145938,0.63151026534109,"d1",12.4046426918358,2.69758547643635,2
1.22892010114611,2,-1.60339015367895,-0.293990862525308,-0.558091874929821,"d1",34.6282499525166,1.22892010114611,2
5.17046629766408,1,-1.38546889263298,-0.293741661899216,0.194112993041771,"d1",1.4586137261771,1.4586137261771,0
0.420978290494531,2,-1.16909774876107,-0.289663519938945,0.418149566145471,"d1",54.4853870172925,0.420978290494531,2
4.36868775149244,1,-0.932978190119501,-0.282577723978344,-0.910276634414815,"d1",31.9927606997422,4.36868775149244,1
7.98445943237803,1,-0.423099155479472,-0.277331403953082,-1.59328207832002,"d1",34.372527336884,7.98445943237803,1
0.0872131232172251,2,-0.589209970904944,-0.272921114164637,-1.24812214185219,"d1",6.92712775431573,0.0872131232172251,2
4.89948574837939,2,-2.04558968393088,-0.269720647129868,0.665740327363631,"d1",14.1824684656205,4.89948574837939,2
0.452674105763435,2,-1.14175469878091,-0.262297372865071,0.596613949892108,"d1",0.90421103645153,0.452674105763435,2
4.49393515009568,1,-1.33606342511923,-0.259031929327579,-0.0240266628567508,"d1",72.6530231120897,4.49393515009568,1
2.7628836519612,1,-0.922372422702525,-0.256039761288398,-0.326428713900489,"d1",17.6612464702668,2.7628836519612,1
0.128867549875937,2,-0.841653846919651,-0.251973298435469,-0.0799318923553138,"d1",16.679678968245,0.128867549875937,2
1.09437750124167,2,-0.83093371183565,-0.235645864139423,-0.751775005953434,"d1",6.07498504221439,1.09437750124167,2
5.01430296947328,1,-2.31349204180314,-0.231648585854677,-1.00880720255202,"d1",39.3432762084489,5.01430296947328,1
8.10443498337973,1,-1.29712825475968,-0.229235800240512,0.0655517475838227,"d1",21.7556364639642,8.10443498337973,1
0.0699868539383135,2,-0.0775446833230767,-0.226729881265217,0.962019154924424,"d1",14.4438741218377,0.0699868539383135,2
6.17862852256154,1,-0.0437558320017703,-0.211729615346597,0.108223052099617,"d1",12.0335108236263,6.17862852256154,1
0.87984413928808,2,-0.431918978299504,-0.211129919507911,-0.558881138696703,"d1",0.467277266673554,0.467277266673554,0
0.136477382321468,2,-0.44259561928884,-0.198995073599147,-1.81001753413273,"d1",25.1430924228373,0.136477382321468,2
0.977906032200701,2,-1.91458642581036,-0.190101004082374,-0.783724251066022,"d1",10.3735212993588,0.977906032200701,2
0.0720774149522185,2,-0.263432080404804,-0.186467676597087,0.140427611838382,"d1",22.6656837753,0.0720774149522185,2
1.16731388689374,2,-0.243812528656655,-0.182162330076107,0.447931079110005,"d1",5.82658766768873,1.16731388689374,2
0.375108917243779,2,-0.229425474699161,-0.17298351083161,0.292388790440601,"d1",10.6790307722986,0.375108917243779,2
5.58316209072442,1,-0.196080429024872,-0.170424347180835,-0.801611899427801,"d1",3.96324042230844,3.96324042230844,0
6.69155498878302,1,-0.584458516026767,-0.16833753232526,-0.670005276166808,"d1",13.5679189302027,6.69155498878302,1
8.28377197077854,2,-0.048537177420854,-0.163910167801201,0.933283811856958,"d1",1.63224523127975,1.63224523127975,0
5.72401086676987,1,-1.17331821101943,-0.135615460917648,0.29467876727236,"d1",13.5379760805517,5.72401086676987,1
6.40072929629242,1,-0.657938217886743,-0.128783794648646,0.104509569527309,"d1",8.35762904956937,6.40072929629242,1
0.977889570354316,2,-1.61841161764785,-0.12853204245501,0.491784950848769,"d1",11.085272654891,0.977889570354316,2
0.0578334999240497,2,-0.334673532830905,-0.125322416424141,-0.624928518199846,"d1",9.53996538184583,0.0578334999240497,2
4.34135326556701,1,-0.260852933223967,-0.118588526399068,-0.218453117494544,"d1",7.51603904180229,4.34135326556701,1
0.60686046956107,2,-0.492588130860743,-0.10889271737476,0.817522611788629,"d1",18.0379314898493,0.60686046956107,2
0.162941626273096,2,-1.81114375836125,-0.105321508415227,-1.42738056875459,"d1",24.5070006317439,0.162941626273096,2
3.31173850579147,2,-0.529985392228882,-0.101173798699334,-1.11157256769151,"d1",36.3182022405748,3.31173850579147,2
5.66346344762411,1,-0.748746237356739,-0.096601414474617,-0.405850222686152,"d1",15.9121074033094,5.66346344762411,1
4.68899200271863,1,-0.598564386203868,-0.0928716906862502,0.347963982991107,"d1",7.61127825020251,4.68899200271863,1
1.20244742832602,2,-0.0297087580471651,-0.0903532182607695,-0.266418055024767,"d1",0.150110619901013,0.150110619901013,0
3.34570996598837,1,-1.5687628201419,-0.089816493570453,-0.241909417700233,"d1",1.18506729434209,1.18506729434209,0
6.10817109996549,1,-0.301572559674886,-0.0868356202056287,0.995789936662304,"d1",2.33373955823481,2.33373955823481,0
2.91461278767682,2,-0.514369184862923,-0.0810713462712984,-0.46285159058721,"d1",21.4213166750016,2.91461278767682,2
5.30071527233756,1,-1.81190949172934,-0.0716856549395218,-0.421014009560247,"d1",10.7334928680211,5.30071527233756,1
4.7089065139189,1,-0.628743853942056,-0.0693777239428382,-0.471650853606041,"d1",49.3702662338443,4.7089065139189,1
2.03937177165392,2,-1.39676836507781,-0.0608927217245306,0.368449894786603,"d1",2.66825927421451,2.03937177165392,2
0.207571438979357,2,-0.51684155611588,-0.0607293782301824,0.894313299593346,"d1",10.689409840852,0.207571438979357,2
0.851749686482263,2,-0.691115109166931,-0.0544992133306127,-0.0484490250175027,"d1",1.82849034667015,0.851749686482263,2
0.232213203795254,2,-1.29182474066886,-0.053047642486113,-0.813036486192363,"d1",19.8839293445704,0.232213203795254,2
5.01115417838178,1,-0.117918599350613,-0.0500544949888002,-0.55616354221462,"d1",51.9530932977507,5.01115417838178,1
0.181447059847414,2,-2.56453984926282,-0.039613173225119,-0.397859153781527,"d1",2.48961834236979,0.181447059847414,2
0.11701835406542,2,-1.04679555121175,-0.0244555289561008,-0.155387309205149,"d1",2.42753457278013,0.11701835406542,2
5.7707601293299,1,-1.27312188020529,-0.0238995320970482,-0.638483028102753,"d1",11.136468835175,5.7707601293299,1
1.31091332338275,2,-2.35647965467172,-0.0227612809714379,0.100033755184394,"d1",16.8639056003633,1.31091332338275,2
0.921248114973047,2,-0.980831488883218,-0.0165767330976238,-0.112567090295151,"d1",14.6494188083282,0.921248114973047,2
2.67004715221394,1,-0.434219991663494,-0.0156170697794335,-0.709188205273621,"d1",18.9970961018446,2.67004715221394,1
1.74592395490947,2,-1.68412440582249,-0.00576934686426262,-0.987227990286872,"d1",28.6467378942256,1.74592395490947,2
2.64318511808727,2,-0.526162593331332,-0.0015792334045885,0.0702184048673455,"d1",5.30908570624888,2.64318511808727,2
1.98613662450554,2,-0.439327093923725,-0.00117076714454385,0.894166171770393,"d1",1.9642498344183,1.9642498344183,0
0.0156997491587898,2,-0.324590600340434,0.0085674899950346,0.278632113218294,"d2",23.0319896518233,0.0156997491587898,2
1.02483786078651,2,-0.705483652281766,0.0123037075553583,0.686753165145983,"d2",17.788258821517,1.02483786078651,2
0.190481021691876,2,-1.48053579157808,0.0329377319464771,0.95860980835632,"d2",39.1881406611171,0.190481021691876,2
0.406864898728095,2,-0.66287821842055,0.0343209962054567,-1.02405850677521,"d2",30.9564450397899,0.406864898728095,2
1.24682781383287,2,-0.206994907568211,0.0394609839921361,-0.413993603720292,"d2",1.21858393183652,1.21858393183652,0
0.0343753263940729,2,-0.734767522424756,0.0524276443319716,0.0135826138541787,"d2",1.46569629199803,0.0343753263940729,2
4.16808855185547,1,-0.766143951110549,0.0547849675128103,-1.18134679661031,"d2",20.3632338602493,4.16808855185547,1
0.929139493129326,2,-1.80933914217456,0.0592599023808696,-0.9718829610288,"d2",49.7898622164546,0.929139493129326,2
0.448792203907764,2,-0.346966559951587,0.065908035853716,-0.387931926801275,"d2",8.50533039257842,0.448792203907764,2
1.5034935817504,2,-1.1326643150283,0.0810871170507968,0.251651137168998,"d2",26.1456839918139,1.5034935817504,2
1.15272829468786,2,-1.73341990854013,0.0921999410787411,0.0638680919173616,"d2",14.6578028417172,1.15272829468786,2
0.0640956317643552,2,-0.176244976288114,0.0977731862145538,-0.597952944635792,"d2",14.4380191146376,0.0640956317643552,2
1.10818157401867,2,-0.550046668781957,0.10209917568942,0.561809431951072,"d2",1.80839700967214,1.10818157401867,2
0.711445530043703,2,-0.894750424865124,0.104539115832322,0.215282952133479,"d2",11.0349307954311,0.711445530043703,2
0.227361694532769,1,-0.586925365791681,0.111569516315137,0.256833226759068,"d2",4.03843670386761,0.227361694532769,1
1.02353190359486,2,-1.53488769798728,0.113666164888074,-0.559846386629048,"d2",12.8939849883318,1.02353190359486,2
0.201588912102931,2,-2.14778624209232,0.114402728772923,-0.869975831946883,"d2",6.32016687653959,0.201588912102931,2
0.35892161067405,2,-0.206584750678768,0.120368830434315,0.0340683721764806,"d2",47.696836327476,0.35892161067405,2
0.142049523157072,2,-0.0546562841688546,0.12379343786166,-0.166814616349012,"d2",18.971409536058,0.142049523157072,2
0.0202328132171846,2,-0.0790216575399896,0.124846142340095,-1.30144562018104,"d2",5.14249449595809,0.0202328132171846,2
0.407534678143771,2,-0.412896572881849,0.126644980736647,0.415595320080395,"d2",3.21758340112865,0.407534678143771,2
0.503944600689501,2,-0.0132964259727509,0.130083715217701,0.0561063708308658,"d2",14.7065426789384,0.503944600689501,2
0.927551671647512,2,-2.04323446243185,0.135941565014185,0.689818777626378,"d2",14.0821513338926,0.927551671647512,2
1.45185523215195,2,-0.623455432968406,0.138238064444506,-0.409104872416987,"d2",65.6392365660439,1.45185523215195,2
0.872874716691619,2,-0.93717363941917,0.138404754662287,-1.23231212029417,"d2",15.6777038540441,0.872874716691619,2
1.49423749793154,2,-1.00636013357011,0.14659161786089,0.230327121134075,"d2",20.0820929362419,1.49423749793154,2
0.238842260978686,2,-0.25195440151874,0.175367442963731,-0.337792925110212,"d2",15.6895111792501,0.238842260978686,2
0.0692366053041504,2,-0.128961112845409,0.181704124470178,0.397332015907095,"d2",8.93658963384632,0.0692366053041504,2
0.779855987136579,2,-1.36487007647493,0.187464799776689,0.261358415505223,"d2",4.31801372207701,0.779855987136579,2
0.699886751185329,1,-0.751978562314961,0.191547491011504,-1.30215930354653,"d2",4.30929420515895,0.699886751185329,1
0.734088949033802,2,-0.664306453699544,0.193185283365211,0.235430697829153,"d2",3.21511986450921,0.734088949033802,2
0.223446971225934,2,-1.06169195170276,0.195643307666265,0.988882724739337,"d2",7.6680544577539,0.223446971225934,2
0.132826782517244,2,-0.736732250144602,0.204531663956041,-1.07696093866452,"d2",65.4219031300316,0.132826782517244,2
0.457251724424565,2,-0.975335617397184,0.204746526181366,-0.876693515212773,"d2",13.5662342328578,0.457251724424565,2
1.15717776080299,1,-0.315316175860469,0.253997160756786,-1.84999130643452,"d2",6.5199363976717,1.15717776080299,1
0.0304567135613987,2,-0.860899337097807,0.254397215310231,-0.870147075426326,"d2",19.1963952771368,0.0304567135613987,2
1.2713881665644,2,-0.416275629227561,0.26218061260624,0.685245699185711,"d2",23.0228867373409,1.2713881665644,2
0.88070006990238,2,-1.30851193899984,0.263458810762776,-0.0200957553850963,"d2",7.9112268704921,0.88070006990238,2
1.05395862039481,2,-1.75884886146508,0.267056776137007,0.843915107919986,"d2",21.4724540888312,1.05395862039481,2
0.380675969003663,2,-0.303811899969935,0.272658089169541,0.797759579087635,"d2",13.3209120389074,0.380675969003663,2
2.42948952352086,1,-1.07489880765383,0.278702417226384,-1.51295156544464,"d2",12.1582691092044,2.42948952352086,1
0.600418660031393,2,-0.640588994825643,0.282065591061298,-0.348353787473505,"d2",12.9015555977821,0.600418660031393,2
0.302928842308858,2,-1.43287992077704,0.28779517855791,0.711478037662267,"d2",17.7399990878334,0.302928842308858,2
1.50431569009576,2,-0.312502673028209,0.29918817355219,-0.99296592194076,"d2",4.01419310030979,1.50431569009576,2
1.65858306569878,2,-0.369034800692599,0.301640587484432,-1.01351122577763,"d2",10.9375634603202,1.65858306569878,2
1.19819218608353,2,-2.67584023613399,0.301768818579558,0.898785945271837,"d2",3.1764625114323,1.19819218608353,2
0.150994675234743,2,-1.95949443521336,0.308011223386714,0.504335995167867,"d2",14.9881349495592,0.150994675234743,2
0.822017495316411,2,-1.47769926070047,0.309661202184633,0.497002444263502,"d2",39.1943697987084,0.822017495316411,2
0.94527422272349,2,-0.00461325103619969,0.309896009945637,-2.98645501125237,"d2",5.78721852227098,0.94527422272349,2
0.199807342913703,2,-0.38620419743011,0.311196357510849,0.312436682894612,"d2",4.6801216353283,0.199807342913703,2
0.889043862681067,2,-0.695602530522189,0.312830266026359,0.169754562008535,"d2",23.4441302850879,0.889043862681067,2
0.192823870936713,2,-1.85439904536673,0.319086571126395,0.943369152308209,"d2",50.2285562513391,0.192823870936713,2
0.0825401463738917,2,-1.03142898609927,0.332938918764079,-0.228717865898126,"d2",63.5443845357666,0.0825401463738917,2
1.09116313524583,2,-1.07825759111025,0.345784561650072,-0.328082878852172,"d2",3.14877358994821,1.09116313524583,2
0.0801036016237605,2,-0.148250669113573,0.358363550071329,-1.37053623644768,"d2",53.5321588416524,0.0801036016237605,2
1.51637719348801,2,-0.410000676134566,0.364165154422149,0.245043498851267,"d2",2.02786128204309,1.51637719348801,2
0.223112276888441,2,-0.065270207612493,0.372946842014624,-0.767952406889159,"d2",18.6229881264173,0.223112276888441,2
0.892192278669641,2,-2.00757599196328,0.387486731073923,-0.856864656243337,"d2",6.50838260538876,0.892192278669641,2
0.841689597409288,2,-0.32653792839894,0.395922892941343,-1.345570225377,"d2",35.9126912435451,0.841689597409288,2
2.64520937247143,2,-0.195331899221975,0.427539014250251,-0.159010111031083,"d2",17.8068248732927,2.64520937247143,2
0.678166794441409,2,-1.14664983983835,0.429946619589537,-0.917289119688311,"d2",2.95270613575119,0.678166794441409,2
0.0242340336581891,2,-1.86512651123246,0.433931575881324,-1.31937198712435,"d2",9.62859936058521,0.0242340336581891,2
0.225544889552071,2,-1.81349649204381,0.446273358425133,-0.97893475725148,"d2",9.11545751616359,0.225544889552071,2
1.32126555703243,2,-2.17562202579492,0.446777621989057,-0.927371331077784,"d2",3.64970873109996,1.32126555703243,2
1.09788825524287,2,-0.473616603308054,0.452614065184748,-1.70286783824426,"d2",14.2008710665683,1.09788825524287,2
0.0407427016024968,2,-0.383157587000771,0.459439996351849,-0.301669993217876,"d2",1.06110211082059,0.0407427016024968,2
0.410326504864281,2,-1.54590745690689,0.461490341834014,-0.747675595773206,"d2",60.5675432052384,0.410326504864281,2
0.983796912832362,2,-0.703903202384028,0.4748015562724,0.0498484937143415,"d2",16.860832440758,0.983796912832362,2
1.28876403124804,2,-1.54624787871463,0.476270185954688,0.0346778838074355,"d2",7.07456577307847,1.28876403124804,2
0.11062920823862,2,-0.46230787319003,0.478347594082418,0.927534138368758,"d2",46.2824380000062,0.11062920823862,2
0.372899983721366,1,-0.613960890713074,0.480142446457778,-0.312547409750764,"d2",59.4584211673508,0.372899983721366,1
1.68192675816703,2,-0.916665744977255,0.484894451696334,-1.26991668174902,"d2",10.9923213627189,1.68192675816703,2
0.363768025567915,2,-0.452810033897698,0.492260284434662,-1.22144399605841,"d2",3.893798654899,0.363768025567915,2
0.770954940607939,2,-0.146013150710654,0.496694842550797,-1.1847484984477,"d2",3.93110281787813,0.770954940607939,2
0.702569675001579,2,-1.74262306266049,0.497365116238882,-0.0708118818763832,"d2",13.7317931372672,0.702569675001579,2
0.552321837103311,2,-1.46551912536993,0.517918254055016,0.842656893998976,"d2",25.4166308782044,0.552321837103311,2
1.51943766857141,2,-0.0324994758301393,0.521687294088326,-0.695674316562543,"d2",8.95308271485998,1.51943766857141,2
0.0143793687926801,2,-0.489300704678702,0.549156338240166,0.68485755666067,"d2",30.7497045008426,0.0143793687926801,2
0.196925432688972,2,-0.776115740427093,0.575435440108272,-0.104856856920984,"d2",18.9580009496751,0.196925432688972,2
0.397994932841351,2,-2.30148415329675,0.592726656812008,0.528916524898275,"d2",20.9906420289519,0.397994932841351,2
0.443605839368832,2,-0.442879615439267,0.60317081486281,-0.493556135862726,"d2",31.9349645061379,0.443605839368832,2
0.595047413773727,2,-0.041421786784315,0.613222349631286,0.942855179621111,"d2",113.545362644627,0.595047413773727,2
0.851778335536802,2,-0.692551688779352,0.618840767936134,-0.280481561963061,"d2",67.584654089428,0.851778335536802,2
0.0850131563678969,2,-0.351087533933564,0.63115172337206,-1.08703450937858,"d2",23.3850651598516,0.0850131563678969,2
0.546620696062235,2,-1.20797835030583,0.632977991529251,0.687097616289009,"d2",24.9407819942911,0.546620696062235,2
0.651966739701176,2,-0.155676646156619,0.633973940877502,-0.195116434787854,"d2",9.50914178974926,0.651966739701176,2
0.706971230359489,2,-0.291607673458914,0.672999338279278,-0.611676752142638,"d2",29.2759011296516,0.706971230359489,2
0.0946099703987008,2,-0.828390769734915,0.673022992266887,-0.0807462778117569,"d2",43.4866768469043,0.0946099703987008,2
1.23917359298254,2,-0.217083476563538,0.68117387507849,-2.27419916140393,"d2",9.65838972479105,1.23917359298254,2
1.39318028148559,2,-1.42331170158666,0.68321407696828,0.415548254106349,"d2",39.4098542986398,1.39318028148559,2
0.2887412686546,2,-0.216293134212122,0.684669076031555,0.54324012070439,"d2",36.7100610194688,0.2887412686546,2
0.747401769988024,2,-0.994934380543088,0.685217633998772,-0.553592904982075,"d2",2.55605911309923,0.747401769988024,2
1.55450392733402,2,-1.64317677850932,0.689216356610522,0.953505009843059,"d2",11.8831441458315,1.55450392733402,2
0.278926110328084,2,-0.509682189786163,0.727075361174734,-0.00517616250699605,"d2",41.3761439902668,0.278926110328084,2
0.558099948956484,2,-0.801257294848326,0.733410908527555,0.901317289352153,"d2",24.7530005863848,0.558099948956484,2
0.217691863979412,2,-0.0780556663003881,0.734820990980883,-7.74213028044464e-05,"d2",4.25654166378081,0.217691863979412,2
0.168765739088355,2,-0.524476363949861,0.737472157084385,-0.967529722246776,"d2",74.1931508066964,0.168765739088355,2
0.491175473306273,2,-0.338410953642002,0.746192491683312,-1.20939846483088,"d2",18.2602968819883,0.491175473306273,2
0.570280873077232,2,-0.82496807991851,0.755100400895145,-2.47165452825858,"d2",47.8723819156118,0.570280873077232,2
1.18847230144455,2,-2.44815755626931,0.771050378387112,0.349725998603989,"d2",8.68409346789122,1.18847230144455,2
2.08675113026237,2,-0.555687847563078,0.773575162368019,-2.55538526793035,"d2",3.62196432426572,2.08675113026237,2
1.64358284619001,2,-0.57106547169757,0.775276024082534,0.567090265161285,"d2",17.3387034539534,1.64358284619001,2
1.16387882660293,2,-0.6632811005556,0.778534449256291,-0.902621057209603,"d2",12.5933971069753,1.16387882660293,2
0.486642608119449,2,-1.26675938425176,0.785257053606859,-0.0887537463864184,"d2",24.870695619935,0.486642608119449,2
0.368862796531493,2,-0.0157734526113872,0.794597993716167,-1.54681819490358,"d2",48.0052247245736,0.368862796531493,2
0.955473331135381,2,-0.137800750340034,0.797004524974926,-0.378617176416411,"d2",32.9089857993608,0.955473331135381,2
3.12676574071716,2,-1.06368645492879,0.821687817198826,-0.0407811990387977,"d2",3.61957159824669,3.12676574071716,2
0.306348220749424,2,-0.147516803016227,0.841656293816402,-0.191520760863928,"d2",114.886943989231,0.306348220749424,2
0.905700703697593,2,-0.54143339886706,0.854324899126672,0.179139127594265,"d2",15.1024301341715,0.905700703697593,2
0.840685973234864,1,-0.303020462384095,0.882585070758093,0.289440144014759,"d2",11.4592190645635,0.840685973234864,1
0.073732312038499,2,-0.0717389572445063,0.888796858018411,-0.00118514725515559,"d2",31.3144977983426,0.073732312038499,2
0.714105402914262,1,-1.26727360969057,0.902324548233499,-0.206786821001746,"d2",37.532997984839,0.714105402914262,1
0.361447165457703,1,-0.308342680111544,0.914316291620421,-0.93039023459829,"d2",1.28684038296342,0.361447165457703,1
0.353413267947933,2,-0.617883410116297,0.920869361254689,-0.0852879281172563,"d2",7.88297220425304,0.353413267947933,2
0.742702086148416,2,-0.215443146498359,0.942205130591864,0.0981486648503957,"d2",1.74852036355542,0.742702086148416,2
0.932685261116003,2,-0.604698915349817,0.959656990846885,0.740922119652381,"d2",49.9165404935308,0.932685261116003,2
1.17763442513466,2,-0.122413893812872,0.965895507983667,0.258230824925122,"d2",8.1961564719677,1.17763442513466,2
2.401912919796,2,-0.849189313239924,0.969385765833604,-0.93281592514594,"d2",16.0375468238237,2.401912919796,2
0.587283215181692,2,-0.810493531629883,0.979673331930529,-0.598449061117795,"d2",12.9091547522694,0.587283215181692,2
2.41779795430406,1,-0.105147401862829,0.993446936499585,-1.65275149300319,"d2",4.58744315430522,2.41779795430406,1
1.29595096677794,2,-1.01243925750055,0.995408451418187,-1.33106394220616,"d2",9.05835108831525,1.29595096677794,2
0.0470700442629491,2,-0.209557800735267,1.00872627071948,-0.698056690769953,"d2",15.2551715716842,0.0470700442629491,2
1.16996056595139,2,-0.823512228938982,1.01258569626263,-1.01554090362161,"d2",6.35657354823829,1.16996056595139,2
1.57326372446757,2,-1.34150088324194,1.02887539791865,0.306288469753485,"d2",17.8610146037283,1.57326372446757,2
1.30043000087772,2,-0.705141749468459,1.03975340016813,0.251567713615197,"d2",6.52474461614365,1.30043000087772,2
1.14779420432604,2,-0.398892092007413,1.04179100519446,-1.83243497532061,"d2",2.10324127227068,1.14779420432604,2
0.505076958616528,2,-0.718370901724561,1.0421866506265,-0.246372073902359,"d2",5.0625859759748,0.505076958616528,2
0.925537763632789,2,-1.89987394421315,1.05397987352466,-0.563189170153506,"d2",26.255743074322,0.925537763632789,2
0.563820722455024,2,-0.938740016875237,1.06440807794544,0.62455787714372,"d2",18.7673846251311,0.563820722455024,2
1.85860266904046,2,-2.38644796518593,1.07517319771127,-0.460895461291849,"d2",10.3336658608168,1.85860266904046,2
0.555464183436573,2,-0.366945396154961,1.07963410980129,0.213645079959669,"d2",4.5025734912216,0.555464183436573,2
0.377637671893438,2,-0.77056335491118,1.08078074730182,0.379244608337682,"d2",13.3972088620067,0.377637671893438,2
0.773916903893329,2,-1.18062114223285,1.09078221998766,-0.781635129946549,"d2",26.3333267710152,0.773916903893329,2
0.331737034780138,2,-0.160422114606273,1.09520677325215,0.160559358901957,"d2",4.12589312531054,0.331737034780138,2
0.485487492784924,2,-0.291266012182764,1.12717653577567,0.539864617309839,"d2",47.509861027164,0.485487492784924,2
0.567644769068142,2,-1.87254604275478,1.13325607246989,0.0826067085001744,"d2",2.37201266922057,0.567644769068142,2
0.128928408406694,2,-1.16872646419766,1.14497886458327,0.765159746122596,"d2",60.4491259901709,0.128928408406694,2
0.214665382817188,2,-0.854540099210319,1.14705135091975,0.524188467815794,"d2",15.3455503796344,0.214665382817188,2
0.158244769503046,2,-0.888209644538255,1.14773768082969,-1.72163007302602,"d2",11.9385945331305,0.158244769503046,2
0.820958648049928,2,-0.0742931937039507,1.15221222139056,-0.477004924723435,"d2",3.22380216148211,0.820958648049928,2
0.0157959223057368,2,-0.764405046898142,1.16096745917705,-1.0106418628181,"d2",29.397890230823,0.0157959223057368,2
0.290203856103889,2,-3.04151467751598,1.19973111490997,-0.712247439601491,"d2",4.80517659336329,0.290203856103889,2
0.593791993901823,2,-0.330438750032875,1.21666360785384,0.43062865240794,"d2",4.83499114401639,0.593791993901823,2
0.164843803074047,2,-1.81192343134569,1.22559435231621,-2.72334725048105,"d2",10.9742081258446,0.164843803074047,2
11.9055269684581,1,-0.665960725671452,1.23627006640145,-0.419590161182336,"d2",40.9294332547073,11.9055269684581,1
0.671221861686162,2,-0.188346464217139,1.24489674668011,0.120267590757923,"d2",21.7115019562509,0.671221861686162,2
0.0942544131064994,2,-0.194634894363973,1.26346005224947,-0.76423468210315,"d2",19.021411601182,0.0942544131064994,2
0.615549209477342,2,-1.30356479689051,1.27806596638121,0.0640178772196265,"d2",21.8324093325975,0.615549209477342,2
0.0822799006980319,2,-1.67752507912405,1.28565827077808,0.519919803005842,"d2",24.2950110687854,0.0822799006980319,2
1.20406221344319,2,-0.000881577351194493,1.29095413317533,0.433991471288344,"d2",24.5576635001074,1.20406221344319,2
1.98874620101502,2,-0.644968559624807,1.32777721569994,-0.292529718561191,"d2",34.2133376358037,1.98874620101502,2
0.341627149662264,2,-0.934673636743636,1.34125496553996,-1.28162167614483,"d2",8.69551958147219,0.341627149662264,2
0.0168732562030819,2,-0.210832477089006,1.36284677624668,-0.453173609985677,"d2",2.57886065170169,0.0168732562030819,2
0.682544737920231,2,-0.358420115001672,1.36413038692697,0.786961394842606,"d2",67.8731216456661,0.682544737920231,2
0.194210974722535,2,-1.21395407363839,1.37247900322005,-1.57965792628652,"d2",16.7389732590857,0.194210974722535,2
0.01067929878569,2,-0.711737659603335,1.44367806227615,0.494679511609896,"d2",6.50548443823837,0.01067929878569,2
2.59280701155528,2,-0.346289734374787,1.46877736894458,-2.12354851451589,"d2",9.08401713706553,2.59280701155528,2
0.393467740871632,2,-0.210868519696887,1.48825220794357,-0.631635204679698,"d2",8.3222406450659,0.393467740871632,2
1.42224337449556,2,-0.826462920995468,1.50577479114554,0.826902277304424,"d2",5.40322990307394,1.42224337449556,2
1.33433690652175,2,-0.60950954295317,1.5242736002613,0.33221624648781,"d2",77.9066298487497,1.33433690652175,2
0.675625026289235,1,-0.104581864758384,1.56402723058933,-0.4456494141151,"d2",5.37353254369528,0.675625026289235,1
1.18800689892756,2,-0.290691809048107,1.59737990139469,-0.731489984714945,"d2",5.13775296509266,1.18800689892756,2
0.5610430217052,2,-0.121951712549261,1.5989351907612,-0.700489895929108,"d2",45.7034039099641,0.5610430217052,2
0.111499842106917,2,-0.760578628109173,1.61891116180103,-0.250533988404267,"d2",110.892675848384,0.111499842106917,2
1.28394211109323,2,-0.644905975513065,1.65165972345351,-0.277973230483964,"d2",0.271660890430212,0.271660890430212,0
0.36046102215795,2,-2.32017185740586,1.65353387790046,-0.501632803317992,"d2",70.4052646043611,0.36046102215795,2
0.575273370031256,2,-0.157124890997325,1.71599907279609,-1.11580353751111,"d2",132.810415878781,0.575273370031256,2
1.29121478953708,2,-1.97627600833374,1.73179518934575,-2.19550526142741,"d2",32.2724051756744,1.29121478953708,2
0.989072998401391,2,-0.215092388017547,1.73640052621478,-1.50678176080062,"d2",29.9476638033679,0.989072998401391,2
1.81867962127306,2,-0.382786696918515,1.77220325772621,0.41090714894628,"d2",15.2582436605337,1.81867962127306,2
0.424640509247266,2,-0.215550700328914,1.79151276909653,0.441547365758035,"d2",0.867104083299637,0.424640509247266,2
0.580463302371877,2,-0.421522579181269,1.84948662280667,-0.107403839804066,"d2",2.88768693425267,0.580463302371877,2
0.502226830768129,2,-0.184369339246996,1.85961621310361,0.62023606747576,"d2",35.8524207008963,0.502226830768129,2
0.651407346396547,2,-0.660513075272549,1.87386755678387,-0.621004930445427,"d2",46.1402620675145,0.651407346396547,2
0.0394596677280844,2,-0.26993942506916,1.87959315129064,-0.252190317127652,"d2",9.79061218909919,0.0394596677280844,2
0.970595889828562,2,-1.04510802337548,1.92602217715534,0.0902929063065855,"d2",74.9303023102594,0.970595889828562,2
0.338564266144649,2,-1.44714357951978,1.94423463188431,0.529239935450155,"d2",2.5988173019141,0.338564266144649,2
0.712761910235137,2,-0.739306835285532,1.97934994466332,0.26138571303491,"d2",119.479093246891,0.712761910235137,2
1.50524800791071,2,-0.420983335208244,2.07430232771404,-0.689347335029629,"d2",29.0102935411009,1.50524800791071,2
5.41910071472478,1,-0.298425154173344,2.10023557915584,-1.42893867631025,"d2",3.66633635014296,3.66633635014296,0
1.46110213895148,2,-1.21522178800769,2.12465840393492,0.127826188208986,"d2",18.0288890368285,1.46110213895148,2
0.349740831339943,2,-1.31635776880358,2.19888709961714,-0.665520965123348,"d2",2.49173296399998,0.349740831339943,2
0.109654119891548,2,-1.94336977065312,2.28885287387926,-0.0227376072732241,"d2",66.2348312105904,0.109654119891548,2
0.32694707880959,2,-0.33070420771385,2.35284611368282,-0.332760456709095,"d2",27.993805320824,0.32694707880959,2
0.455847657299084,2,-1.1613741180384,2.39631298153787,-0.337671586008395,"d2",14.6055440523148,0.455847657299084,2
0.805503301057283,2,-0.749292679007588,2.76291539134761,0.0700291458091432,"d2",6.93319054320455,0.805503301057283,2
0.559331617555047,2,-1.37332226052715,2.80201217822241,0.783135997663391,"d2",26.3137999541106,0.559331617555047,2
1.06530495836604,2,-1.11764024237778,3.2926528297212,0.020510640396302,"d2",6.90590973407556,1.06530495836604,2
1 T J x1 x2 x3 set C u delta
2 2.36878896318231 2 -0.940736926269951 -2.74741651651697 -0.664166655908226 d1 5.29132863866294 2.36878896318231 2
3 0.0400548702796549 2 -0.22357985281977 -2.6784315261127 -1.45393397969899 d1 24.0450198381188 0.0400548702796549 2
4 6.07273173432729 1 -0.541321943849921 -2.61982060211246 -0.313865486168637 d1 73.2294178857516 6.07273173432729 1
5 0.0586427948437631 2 -4.08384650953597 -2.57905490896322 -1.94148492991394 d1 29.575672428309 0.0586427948437631 2
6 1.12241411577435 2 -0.343115442654736 -2.5261239240197 -0.568482592792157 d1 10.7716199103743 1.12241411577435 2
7 7.17758750180007 1 -0.0549158329059284 -2.49595311098652 0.777187867970255 d1 0.770628582686186 0.770628582686186 0
8 5.87972604899089 1 -0.417519608027854 -2.32569598105725 -1.23410968014014 d1 21.7603224188032 5.87972604899089 1
9 6.09850069496217 1 -0.624229581484001 -2.20950230906333 0.847654716653119 d1 47.9509777923055 6.09850069496217 1
10 5.24709419887559 1 -0.494413435039913 -2.1881842156793 -0.530500950041165 d1 9.29604623673615 5.24709419887559 1
11 5.49139738108154 1 -0.399023904593903 -2.17411513837698 -0.886241025366943 d1 4.66279121115804 4.66279121115804 0
12 7.49679934937549 1 -1.503172816431 -2.11416482594655 -0.784022459577515 d1 38.599446339715 7.49679934937549 1
13 0.120167720597237 2 -0.0111153155803973 -2.07922849793458 -0.0864173413157577 d1 8.30861929266284 0.120167720597237 2
14 0.0120866466313601 2 -1.13246179303068 -2.07388986542802 -0.108705951800557 d1 74.5770950200868 0.0120866466313601 2
15 1.93336439869347 2 -0.953063484590791 -2.06875275630198 0.391474935780971 d1 8.68413874879479 1.93336439869347 2
16 0.193771776743233 2 -2.09780872632678 -2.06600379672067 0.481439459620942 d1 11.4459616225213 0.193771776743233 2
17 0.684051165357232 2 -1.2506320380666 -2.05742095431252 0.254373142408372 d1 27.2641535281184 0.684051165357232 2
18 2.67318147171264 1 -0.895097422928461 -2.04228406320874 0.880998661569412 d1 7.24411055445671 2.67318147171264 1
19 6.28834176835203 1 -0.78864447554692 -1.96217525934728 -0.163789285265814 d1 27.6986681102755 6.28834176835203 1
20 4.62668493336862 1 -0.381536878928848 -1.92665388805734 -0.290580353016676 d1 7.24744734354317 4.62668493336862 1
21 0.0195419555529952 2 -0.453640870109268 -1.9241779608709 -0.458499569719527 d1 0.790413445705888 0.0195419555529952 2
22 5.52686329920565 1 -1.35281077656466 -1.92380314891533 0.00358885830164929 d1 34.5150513185148 5.52686329920565 1
23 0.0338792934082568 2 -0.137226420194861 -1.92177375675587 0.303819485323308 d1 4.49422365985811 0.0338792934082568 2
24 0.489470157306641 2 -0.00443898833912055 -1.91738220316821 0.325411778513068 d1 7.40209592506289 0.489470157306641 2
25 2.46352284875266 1 -0.343935987670365 -1.91503628904925 0.263891018343932 d1 5.46459940262139 2.46352284875266 1
26 1.91431453212664 1 -0.646938145621328 -1.8443918568905 0.198442464738305 d1 6.95764179200271 1.91431453212664 1
27 3.34306721665146 2 -0.521888135986598 -1.81633085792332 0.140235064973441 d1 13.305580355227 3.34306721665146 2
28 2.25421412226762 2 -0.237135702707983 -1.8035308340996 -0.0273032797726184 d1 4.4884777849039 2.25421412226762 2
29 5.32683386651568 1 -0.383757190847992 -1.78869536882293 -0.500253710429788 d1 13.8389095757157 5.32683386651568 1
30 0.389743744395673 2 -1.02671802816671 -1.76818749571248 -0.25956459070352 d1 6.89092403936742 0.389743744395673 2
31 5.71650745526166 1 -0.377604179930099 -1.76584618649961 -0.158829141188165 d1 16.4490152316151 5.71650745526166 1
32 1.67705107844415 2 -1.14700688399577 -1.75637277902045 0.655267799539731 d1 48.0127680363638 1.67705107844415 2
33 0.592473545577377 2 -1.11326150693183 -1.7527097359872 -1.13722476306219 d1 7.56208908218571 0.592473545577377 2
34 0.93774029515208 2 -0.549454171154571 -1.71226440732097 -0.339685392053216 d1 1.84914546087384 0.93774029515208 2
35 0.40062484703958 2 -0.104855806316002 -1.67335276942983 -0.426138874612545 d1 6.27608065493405 0.40062484703958 2
36 0.159861234016716 2 -0.931567097747794 -1.67219451475428 -0.870460505814775 d1 3.55606431638744 0.159861234016716 2
37 5.8492162264662 1 -1.87452364236991 -1.66159908881996 -1.38113124744767 d1 4.04938737861812 4.04938737861812 0
38 5.70065559417847 1 -3.14276614908329 -1.65611164142717 0.352264508089579 d1 3.77463447861373 3.77463447861373 0
39 0.224718576839926 2 -0.226827411558332 -1.62539155314324 -0.505322271031184 d1 6.61533754318953 0.224718576839926 2
40 0.0435942329366584 2 -0.875238415727581 -1.61399017351239 0.577880520091048 d1 1.98178011927421 0.0435942329366584 2
41 0.872705549891007 2 -0.178995556137531 -1.57936046676629 0.108625526623102 d1 22.7864865764024 0.872705549891007 2
42 6.36851677387452 1 -0.367724579424765 -1.57738544236245 -0.626225591399495 d1 17.2717156252804 6.36851677387452 1
43 2.43392219195578 2 -0.707116976325429 -1.56335701495115 0.965751242534558 d1 14.4206041461768 2.43392219195578 2
44 0.330720949053871 2 -0.445553502838385 -1.56202621765436 -0.249510097888011 d1 7.44351300329184 0.330720949053871 2
45 5.93261099061297 1 -1.81658308280611 -1.5514135530076 0.362911703061769 d1 20.9917188054862 5.93261099061297 1
46 2.21842301810596 2 -0.942928659225199 -1.49327481765058 0.838989993453762 d1 1.62975564390585 1.62975564390585 0
47 6.17321580899134 1 -0.846667767066977 -1.4929371315781 -1.55721907237787 d1 1.9526223000139 1.9526223000139 0
48 0.058051934465766 2 -0.0398973838021135 -1.49119700174392 0.095087134856549 d1 42.142936350546 0.058051934465766 2
49 6.08617126479093 1 -1.39762186112439 -1.48412697347617 -0.270011324155031 d1 11.1088740918785 6.08617126479093 1
50 3.18876150978689 2 -2.13842961471416 -1.47309707638112 -0.755451309039423 d1 36.4314661530738 3.18876150978689 2
51 0.0172548928457301 2 -0.174059321462742 -1.41845535076939 0.363575496287814 d1 20.7911967105212 0.0172548928457301 2
52 1.33514567274125 2 -0.66874948622225 -1.37014049288289 0.15420576439085 d1 3.69772279635072 1.33514567274125 2
53 6.70443202813046 1 -0.274400088040043 -1.36283138996168 -0.203087231534127 d1 15.5954272850397 6.70443202813046 1
54 5.48304553044083 1 -0.0184418688789402 -1.35412193807632 -0.265115429781722 d1 6.22560746967793 5.48304553044083 1
55 3.98201646621768 1 -1.3201407272101 -1.34604086981472 0.85419508410079 d1 12.3219889681786 3.98201646621768 1
56 1.10954519196367 2 -1.2942947236508 -1.30241257662124 -0.0737564121156477 d1 3.75448394108866 1.10954519196367 2
57 0.333034928888083 2 -0.0361982109653429 -1.2962650039174 0.800292309814105 d1 5.89722495526075 0.333034928888083 2
58 5.5067986823978 1 -1.81526927963113 -1.29369838086625 -0.716845568650473 d1 33.3969767747407 5.5067986823978 1
59 0.236702047288418 2 -0.174192985316702 -1.29045902266205 0.710109174264196 d1 35.659496791079 0.236702047288418 2
60 0.00543433148413897 2 -1.49217629504083 -1.27755373020195 -0.153009947789431 d1 15.6081267240572 0.00543433148413897 2
61 0.392974628135562 2 -0.672731030589471 -1.27711238763253 0.259632568995488 d1 0.989711219444871 0.392974628135562 2
62 3.33453140390997 2 -0.28231681794934 -1.27615970205156 0.580553117107873 d1 13.8484762236476 3.33453140390997 2
63 0.745801116086655 2 -0.814855584673265 -1.26261618297827 0.532327960608554 d1 26.3732809192481 0.745801116086655 2
64 1.93039115696194 2 -0.523752466176473 -1.25308854838447 -0.779166441487765 d1 16.4774892664736 1.93039115696194 2
65 3.46145374880599 1 -0.104575175258664 -1.25222662675546 0.730793621250424 d1 11.2728726584464 3.46145374880599 1
66 0.622301510402748 2 -0.799354312298097 -1.20712709767553 0.82915949311628 d1 31.7985615907917 0.622301510402748 2
67 4.36399552071179 1 -0.377585614252292 -1.20262382265337 -1.05942486854663 d1 9.88032352179289 4.36399552071179 1
68 0.315932573628431 2 -1.54614147291695 -1.19736350592567 -0.282221806464306 d1 12.5319989770651 0.315932573628431 2
69 6.30066548295561 1 -0.217638413548828 -1.17871899318606 0.57224481822844 d1 15.5058489656678 6.30066548295561 1
70 0.134716821071798 2 -0.289929666166654 -1.14709612408807 -0.438929712319987 d1 93.6292425492659 0.134716821071798 2
71 2.07553452617469 2 -0.871246560563739 -1.13599352100253 -1.54798197797058 d1 5.40198363363743 2.07553452617469 2
72 0.397368354257196 2 -0.464944141245776 -1.11689431557799 -0.153395631317365 d1 16.4783747618805 0.397368354257196 2
73 5.99384605375399 1 -1.01390645601822 -1.11564616812347 -0.950790366577052 d1 10.201620683074 5.99384605375399 1
74 5.95161350419295 1 -1.00207112709375 -1.10335537016156 0.0280083965309446 d1 1.14143405233437 1.14143405233437 0
75 6.33303235415056 1 -2.19297968581012 -1.10132320061089 0.555145710586123 d1 8.98656466975808 6.33303235415056 1
76 0.172320284880698 2 -1.32364156638484 -1.09928045326075 -0.0198070388067981 d1 0.764144429684099 0.172320284880698 2
77 0.0204675737768412 2 -1.64183103554089 -1.07929942510633 -0.445163795267712 d1 35.097954085279 0.0204675737768412 2
78 5.71120658667394 1 -0.706142520192073 -1.07327991315842 -1.32929693533771 d1 10.5845972150564 5.71120658667394 1
79 0.44132914301008 2 -1.60463558024696 -1.07041582836413 0.179801609496641 d1 14.7133602007272 0.44132914301008 2
80 0.0221813134849072 2 -0.454605537530624 -1.06572328986086 -0.685320659922523 d1 4.51061540283263 0.0221813134849072 2
81 1.81137038013878 2 -0.634982565171419 -1.06273841001991 0.099763296921695 d1 5.77572761103511 1.81137038013878 2
82 6.26432244579951 1 -0.0273481508097327 -1.04825639026013 -1.60892311094708 d1 6.82882342448108 6.26432244579951 1
83 6.04862054714964 1 -0.738613856144511 -1.0342835781739 -0.59498556050642 d1 15.9343750580194 6.04862054714964 1
84 7.48636650652995 1 -0.326223712666721 -1.03354050308388 0.348234778700151 d1 0.758487256614161 0.758487256614161 0
85 5.55062340284452 1 -0.400885490811939 -1.02535023183075 0.400246834043774 d1 17.0179952128796 5.55062340284452 1
86 0.518573008943349 2 -0.0273083549434431 -1.01262506134754 -0.930184572213555 d1 2.10150590812186 0.518573008943349 2
87 3.46053574217444 2 -0.794177329449999 -0.999008445323631 -0.658993837250615 d1 14.0706040959429 3.46053574217444 2
88 0.486459741623382 2 -0.0869982635676569 -0.997759562698134 -1.14920595721707 d1 4.59333625883186 0.486459741623382 2
89 0.315952830302968 2 -1.61520106845425 -0.974002982411684 0.432369032532503 d1 15.566208568786 0.315952830302968 2
90 3.12192197551741 1 -1.30407322958316 -0.966557165502383 0.51673530990843 d1 38.3739643836897 3.12192197551741 1
91 0.166353042138176 2 -1.25189433042384 -0.95349718228182 0.173527003414866 d1 1.78076698444784 0.166353042138176 2
92 5.14947918722961 1 -0.348134398501211 -0.949771064641547 0.842167145501435 d1 10.0344473868608 5.14947918722961 1
93 0.61755093701298 2 -1.20220733855003 -0.940807269422338 0.669507751445202 d1 81.1423001768899 0.61755093701298 2
94 0.774340918245626 2 -1.79386239234471 -0.936480765229449 -0.386657715263962 d1 10.2844402287155 0.774340918245626 2
95 1.18503246731581 2 -1.62566462366753 -0.924943886647788 -1.09544735384729 d1 27.3488828345182 1.18503246731581 2
96 5.81430168938689 1 -1.36562690447452 -0.911173236644446 -1.09133594052886 d1 23.086135415659 5.81430168938689 1
97 0.0582360443007296 2 -0.334693872287563 -0.908885279255003 0.894420816860302 d1 19.8876115931426 0.0582360443007296 2
98 6.67562862428162 1 -0.320758358348144 -0.906136581293013 -0.62204490108631 d1 3.95447020418942 3.95447020418942 0
99 5.62609493242318 1 -0.342004151583766 -0.904463968233442 0.93567149953094 d1 16.6209467678311 5.62609493242318 1
100 0.224124095402658 2 -1.80489989908745 -0.897620346487348 -1.14866233536842 d1 10.9962219744921 0.224124095402658 2
101 5.07161450929288 1 -1.04719234274716 -0.882424518189252 -0.679290525085992 d1 69.6467088082248 5.07161450929288 1
102 0.536435312125832 2 -0.425266035641447 -0.880708384373669 -0.605260699678918 d1 51.3515850934174 0.536435312125832 2
103 0.712225435259652 2 -1.01317907039129 -0.880364756492861 0.799448704038158 d1 7.95205843634903 0.712225435259652 2
104 2.20243284019238 1 -0.0612420173925512 -0.867470410367046 0.359002148193652 d1 9.25134299322963 2.20243284019238 1
105 0.605893896427006 2 -1.04822994915312 -0.846173148741664 -0.901844342725123 d1 19.4895937285366 0.605893896427006 2
106 6.46572696633957 1 -0.395668788335314 -0.84271443456443 -0.550602798752161 d1 0.209037251770496 0.209037251770496 0
107 0.487000552937388 2 -1.46401306735521 -0.836512183168418 0.173597441595392 d1 6.77927704167621 0.487000552937388 2
108 1.51509302101078 2 -0.0412407968604744 -0.834982086349831 0.525673645724282 d1 34.5675922540908 1.51509302101078 2
109 6.02731790506686 1 -0.882989817626795 -0.834798925439948 -0.834803917000752 d1 5.93346848471039 5.93346848471039 0
110 0.381546576756047 2 -0.131390142151624 -0.832849601899911 -0.120359877783258 d1 1.41744351014495 0.381546576756047 2
111 0.00760392192751169 2 -0.383924028857785 -0.828126721930831 -0.0587775279070268 d1 26.4171911395135 0.00760392192751169 2
112 6.85879283492523 1 -1.49318471777496 -0.820526788889496 -0.374675059074199 d1 2.85277323708454 2.85277323708454 0
113 0.0342933693900704 2 -0.823077108668868 -0.815970182520681 -0.715242420590766 d1 28.5419499857311 0.0342933693900704 2
114 0.617406914941967 2 -0.781115112888234 -0.800445475005252 -1.28039807314278 d1 11.6443356871605 0.617406914941967 2
115 3.74171116644939 1 -0.0684740865411551 -0.780325173540396 -1.30117863747707 d1 29.2131662351971 3.74171116644939 1
116 2.12804690328918 2 -1.05479508853852 -0.769838765813365 0.403812256923429 d1 16.0360205043719 2.12804690328918 2
117 4.09780351235117 1 -0.0193241721415964 -0.768715647254528 0.0748831382783931 d1 9.43803951144218 4.09780351235117 1
118 0.0217920186910804 2 -0.559239535829182 -0.73934495429406 0.353443306116614 d1 5.2491182461381 0.0217920186910804 2
119 0.394180545583367 2 -0.0118641769292016 -0.738198607201708 -0.688623668491378 d1 2.26109574536297 0.394180545583367 2
120 1.32289936389298 2 -0.0387650901849373 -0.728247447556326 0.0674068712586103 d1 2.98578164101508 1.32289936389298 2
121 0.302159678656608 2 -1.44186893732442 -0.72744919444054 -1.06860676120492 d1 4.14901913143694 0.302159678656608 2
122 0.708418690834115 2 -0.285741501654332 -0.726075872408598 -0.507188183920061 d1 16.6256199040427 0.708418690834115 2
123 0.0241285795345902 2 -0.0260930090449579 -0.717564843944006 -0.374181116030244 d1 34.6676181985025 0.0241285795345902 2
124 0.870312893721175 2 -0.000363395655838854 -0.711398171424794 0.351965732858065 d1 20.0971285967741 0.870312893721175 2
125 5.28564457229326 1 -0.614476643770374 -0.708606987497861 -1.37559225313687 d1 1.81252158246934 1.81252158246934 0
126 0.941750313113344 2 -1.03720924392128 -0.70592154760638 0.0282725230040198 d1 46.611236940243 0.941750313113344 2
127 2.44006958777521 2 -0.809699231995388 -0.704070374217583 -0.0566796527137429 d1 20.2155850074234 2.44006958777521 2
128 0.246147812767859 2 -1.39286438513178 -0.696916600582024 0.723455131796638 d1 10.4792898520827 0.246147812767859 2
129 6.46105088284385 1 -0.0584333542653784 -0.677443901317481 -0.347832512964975 d1 11.2590421535523 6.46105088284385 1
130 0.830613736952555 2 -0.472779134493958 -0.666382796158839 0.106316605714906 d1 10.7149247918278 0.830613736952555 2
131 1.27080103285135 2 -0.943014149166745 -0.660182675036647 -0.296569752660686 d1 10.2358338516206 1.27080103285135 2
132 1.6344318868214 2 -1.15851492740154 -0.659363022297778 -0.519761238348733 d1 24.3289563610199 1.6344318868214 2
133 3.41197561381413 1 -0.114318963624616 -0.65618260348354 -0.167158679317667 d1 1.2596212202486 1.2596212202486 0
134 5.83460786148936 1 -0.0303705017867669 -0.655140358879648 -0.705817680811048 d1 10.3931054691499 5.83460786148936 1
135 0.589666957966983 2 -1.59057886445477 -0.654263401747602 0.637993715185194 d1 5.51040226593614 0.589666957966983 2
136 4.54696150229568 1 -1.86139470133512 -0.651617617594723 0.392269058987265 d1 2.98995271325111 2.98995271325111 0
137 7.26930846394147 1 -0.0308394170638917 -0.638362034477254 0.250417060256469 d1 7.80484799608692 7.26930846394147 1
138 0.406479293480515 2 -0.997250721445793 -0.634435430455023 0.314635955402795 d1 10.8758389414521 0.406479293480515 2
139 6.20537110173297 1 -1.34447668217377 -0.628064331449498 0.275705167937989 d1 0.913132007038143 0.913132007038143 0
140 1.1413343520415 2 -0.541319960936245 -0.610769730062258 -0.837394943418138 d1 25.6323812334778 1.1413343520415 2
141 6.5012017255228 1 -1.76555624350856 -0.605580811571845 -0.535693414416799 d1 2.81374442207194 2.81374442207194 0
142 0.320266132708639 2 -1.58757047236722 -0.600017897571358 0.737238047653923 d1 2.60571850154193 0.320266132708639 2
143 6.60670570162074 1 -1.77995131860148 -0.587362519071825 -0.399805463971556 d1 15.09625551091 6.60670570162074 1
144 0.494166820775717 2 -1.42328395128162 -0.583983730286862 0.445604883307791 d1 15.4901144016316 0.494166820775717 2
145 1.2916429349481 2 -0.0136814571187584 -0.561248827441379 -0.679609559979761 d1 31.1157296575536 1.2916429349481 2
146 6.84719911605157 1 -0.991333253080982 -0.536840302369252 -0.329207585539367 d1 31.3672893105035 6.84719911605157 1
147 3.33573240393048 1 -0.232024208356925 -0.52957313175545 0.3297707960891 d1 3.84123377395356 3.33573240393048 1
148 0.293787405826151 2 -1.57869348984733 -0.52290224046694 -0.858451414496243 d1 13.5298108309507 0.293787405826151 2
149 2.59829062769625 2 -1.03413272510194 -0.520306220041396 -0.0947103549299787 d1 24.2958168304505 2.59829062769625 2
150 1.15069140396537 2 -0.7692543960691 -0.514917254695601 -0.0498114216751121 d1 15.06683004936 1.15069140396537 2
151 0.546846426587379 2 -1.08590377397733 -0.51073540461372 0.559865391230521 d1 6.54946511611342 0.546846426587379 2
152 5.06505271674886 1 -0.667965724979494 -0.506722121641543 -0.477852765839133 d1 10.645618988201 5.06505271674886 1
153 4.5711114569665 1 -1.27769811178029 -0.500479722824924 0.674078243067952 d1 29.9835772795563 4.5711114569665 1
154 0.9548158202933 2 -0.0243746767241474 -0.5000677377122 -0.140677704414042 d1 25.8506448185983 0.9548158202933 2
155 0.303704824764282 2 -0.57875083356825 -0.499882058039656 -0.103959338458585 d1 17.4203944570365 0.303704824764282 2
156 0.568540091544093 2 -0.244519612797395 -0.494741102467464 -0.896176056492635 d1 13.2353435084224 0.568540091544093 2
157 0.210479910019785 2 -1.51738850112856 -0.492184841665298 -0.86024334169026 d1 52.87170368926 0.210479910019785 2
158 3.88505572785084 1 -0.495911543972495 -0.492149973041001 0.612775086639207 d1 3.92974231392145 3.88505572785084 1
159 6.60548957054962 1 -1.00258266755843 -0.491774081169479 -1.78593148360063 d1 14.8081099713895 6.60548957054962 1
160 1.39085324275344 2 -1.62677928324155 -0.489806966081124 -0.753648276656162 d1 1.49955506421369 1.39085324275344 2
161 0.227768044192674 2 -0.589333520820825 -0.489183660065085 -0.728407316512854 d1 47.03465077774 0.227768044192674 2
162 6.11630072080504 1 -0.626318140514488 -0.487935904504218 -0.605005623202529 d1 11.6748199984431 6.11630072080504 1
163 0.0783678251318634 2 -1.8345771286241 -0.48469296452704 -1.19122687804207 d1 97.106801004787 0.0783678251318634 2
164 0.0753125636838377 2 -0.438810514105078 -0.466849872263636 -0.639803324919198 d1 13.7100772652775 0.0753125636838377 2
165 1.30011751591684 2 -1.71754032358037 -0.459453147067006 -1.72050403507059 d1 85.162896984439 1.30011751591684 2
166 4.80113809032709 1 -0.370922305602338 -0.455289890327413 0.461100688628078 d1 4.69688176482536 4.69688176482536 0
167 5.90888620164702 1 -1.30813817903797 -0.455234944124943 -1.7766120289902 d1 11.7342197801918 5.90888620164702 1
168 0.372085412365962 2 -1.33242203676526 -0.444675568969578 0.61659731035441 d1 48.2229322542377 0.372085412365962 2
169 4.89059350679706 1 -0.725492522106697 -0.443060772439573 0.762229718534035 d1 39.5469368604903 4.89059350679706 1
170 2.04659481151941 2 -0.777806586832909 -0.440025014389601 -0.872890458444863 d1 50.4553057600684 2.04659481151941 2
171 2.03897058582845 2 -0.0378012490430374 -0.429027012368145 -1.31597708285001 d1 15.4083807848072 2.03897058582845 2
172 1.01758827078612 2 -1.28016548673871 -0.425688468851661 0.699129138140606 d1 4.60447026416659 1.01758827078612 2
173 6.25879912495179 1 -0.583077192951759 -0.422108191588108 0.0475003603155665 d1 31.2591543404346 6.25879912495179 1
174 7.25336918043015 1 -0.565741103403003 -0.419714741743597 -0.734974041468522 d1 2.90408703498542 2.90408703498542 0
175 2.14003248551437 1 -0.170888399904471 -0.416478265204679 0.0800414014582476 d1 0.441465461626649 0.441465461626649 0
176 0.545938095077872 2 -0.341691685411867 -0.414544246005865 0.550218488360563 d1 34.5256463656698 0.545938095077872 2
177 6.22629632259517 1 -0.950085098058274 -0.414444964650831 -0.819619600597609 d1 21.263416352773 6.22629632259517 1
178 1.08605028219045 2 -0.927645636285453 -0.410109974720035 -0.990394906860903 d1 20.0148759773912 1.08605028219045 2
179 1.41585406466367 2 -0.478110211767677 -0.387844311940163 0.185119111369212 d1 2.43890167762988 1.41585406466367 2
180 5.12777096471775 1 -2.52723629897812 -0.383344167234604 0.325516175397701 d1 23.3256739742103 5.12777096471775 1
181 0.560892237350345 2 -1.55213972791835 -0.364768126745658 -0.374599489635217 d1 18.5055401726606 0.560892237350345 2
182 4.00012938074326 1 -0.625444758007576 -0.36449594663103 0.504193738683109 d1 17.2802503896699 4.00012938074326 1
183 4.8660578734478 1 -0.0571390786270154 -0.362794779999219 -0.74444704195158 d1 12.4678146466613 4.8660578734478 1
184 0.870262232567084 2 -0.740357105365835 -0.362352634774993 -0.021975758077144 d1 21.0608527614715 0.870262232567084 2
185 5.85748684824363 1 -0.73430371198211 -0.354218553154874 -0.360712942308638 d1 26.2455050811864 5.85748684824363 1
186 1.71520997575464 2 -1.28384066134343 -0.353137962846624 0.267434135957981 d1 8.44167739699644 1.71520997575464 2
187 2.99897972238633 1 -0.0370489535228247 -0.352019527608096 -0.733369800107882 d1 2.39286359521427 2.39286359521427 0
188 3.79124856532967 2 -0.497280459282847 -0.333511238390777 -0.513272422071774 d1 13.5526807513088 3.79124856532967 2
189 5.68305890342214 1 -0.0915648931614195 -0.332238948153213 -0.716289045784358 d1 9.98184344731271 5.68305890342214 1
190 4.67288406222034 1 -0.162736049870991 -0.32731702562614 0.286540429366584 d1 48.898998906178 4.67288406222034 1
191 0.635374410077929 2 -0.231344174018691 -0.324751888155364 0.7514928121089 d1 4.75083186220402 0.635374410077929 2
192 4.82523018536497 1 -2.25382843672391 -0.308134050996533 0.684642990800304 d1 4.97351374477148 4.82523018536497 1
193 0.698897804944637 2 -2.04417478061325 -0.30742952185735 -0.350541787161071 d1 19.5704999176368 0.698897804944637 2
194 2.69758547643635 2 -2.17762152778411 -0.296597035145938 0.63151026534109 d1 12.4046426918358 2.69758547643635 2
195 1.22892010114611 2 -1.60339015367895 -0.293990862525308 -0.558091874929821 d1 34.6282499525166 1.22892010114611 2
196 5.17046629766408 1 -1.38546889263298 -0.293741661899216 0.194112993041771 d1 1.4586137261771 1.4586137261771 0
197 0.420978290494531 2 -1.16909774876107 -0.289663519938945 0.418149566145471 d1 54.4853870172925 0.420978290494531 2
198 4.36868775149244 1 -0.932978190119501 -0.282577723978344 -0.910276634414815 d1 31.9927606997422 4.36868775149244 1
199 7.98445943237803 1 -0.423099155479472 -0.277331403953082 -1.59328207832002 d1 34.372527336884 7.98445943237803 1
200 0.0872131232172251 2 -0.589209970904944 -0.272921114164637 -1.24812214185219 d1 6.92712775431573 0.0872131232172251 2
201 4.89948574837939 2 -2.04558968393088 -0.269720647129868 0.665740327363631 d1 14.1824684656205 4.89948574837939 2
202 0.452674105763435 2 -1.14175469878091 -0.262297372865071 0.596613949892108 d1 0.90421103645153 0.452674105763435 2
203 4.49393515009568 1 -1.33606342511923 -0.259031929327579 -0.0240266628567508 d1 72.6530231120897 4.49393515009568 1
204 2.7628836519612 1 -0.922372422702525 -0.256039761288398 -0.326428713900489 d1 17.6612464702668 2.7628836519612 1
205 0.128867549875937 2 -0.841653846919651 -0.251973298435469 -0.0799318923553138 d1 16.679678968245 0.128867549875937 2
206 1.09437750124167 2 -0.83093371183565 -0.235645864139423 -0.751775005953434 d1 6.07498504221439 1.09437750124167 2
207 5.01430296947328 1 -2.31349204180314 -0.231648585854677 -1.00880720255202 d1 39.3432762084489 5.01430296947328 1
208 8.10443498337973 1 -1.29712825475968 -0.229235800240512 0.0655517475838227 d1 21.7556364639642 8.10443498337973 1
209 0.0699868539383135 2 -0.0775446833230767 -0.226729881265217 0.962019154924424 d1 14.4438741218377 0.0699868539383135 2
210 6.17862852256154 1 -0.0437558320017703 -0.211729615346597 0.108223052099617 d1 12.0335108236263 6.17862852256154 1
211 0.87984413928808 2 -0.431918978299504 -0.211129919507911 -0.558881138696703 d1 0.467277266673554 0.467277266673554 0
212 0.136477382321468 2 -0.44259561928884 -0.198995073599147 -1.81001753413273 d1 25.1430924228373 0.136477382321468 2
213 0.977906032200701 2 -1.91458642581036 -0.190101004082374 -0.783724251066022 d1 10.3735212993588 0.977906032200701 2
214 0.0720774149522185 2 -0.263432080404804 -0.186467676597087 0.140427611838382 d1 22.6656837753 0.0720774149522185 2
215 1.16731388689374 2 -0.243812528656655 -0.182162330076107 0.447931079110005 d1 5.82658766768873 1.16731388689374 2
216 0.375108917243779 2 -0.229425474699161 -0.17298351083161 0.292388790440601 d1 10.6790307722986 0.375108917243779 2
217 5.58316209072442 1 -0.196080429024872 -0.170424347180835 -0.801611899427801 d1 3.96324042230844 3.96324042230844 0
218 6.69155498878302 1 -0.584458516026767 -0.16833753232526 -0.670005276166808 d1 13.5679189302027 6.69155498878302 1
219 8.28377197077854 2 -0.048537177420854 -0.163910167801201 0.933283811856958 d1 1.63224523127975 1.63224523127975 0
220 5.72401086676987 1 -1.17331821101943 -0.135615460917648 0.29467876727236 d1 13.5379760805517 5.72401086676987 1
221 6.40072929629242 1 -0.657938217886743 -0.128783794648646 0.104509569527309 d1 8.35762904956937 6.40072929629242 1
222 0.977889570354316 2 -1.61841161764785 -0.12853204245501 0.491784950848769 d1 11.085272654891 0.977889570354316 2
223 0.0578334999240497 2 -0.334673532830905 -0.125322416424141 -0.624928518199846 d1 9.53996538184583 0.0578334999240497 2
224 4.34135326556701 1 -0.260852933223967 -0.118588526399068 -0.218453117494544 d1 7.51603904180229 4.34135326556701 1
225 0.60686046956107 2 -0.492588130860743 -0.10889271737476 0.817522611788629 d1 18.0379314898493 0.60686046956107 2
226 0.162941626273096 2 -1.81114375836125 -0.105321508415227 -1.42738056875459 d1 24.5070006317439 0.162941626273096 2
227 3.31173850579147 2 -0.529985392228882 -0.101173798699334 -1.11157256769151 d1 36.3182022405748 3.31173850579147 2
228 5.66346344762411 1 -0.748746237356739 -0.096601414474617 -0.405850222686152 d1 15.9121074033094 5.66346344762411 1
229 4.68899200271863 1 -0.598564386203868 -0.0928716906862502 0.347963982991107 d1 7.61127825020251 4.68899200271863 1
230 1.20244742832602 2 -0.0297087580471651 -0.0903532182607695 -0.266418055024767 d1 0.150110619901013 0.150110619901013 0
231 3.34570996598837 1 -1.5687628201419 -0.089816493570453 -0.241909417700233 d1 1.18506729434209 1.18506729434209 0
232 6.10817109996549 1 -0.301572559674886 -0.0868356202056287 0.995789936662304 d1 2.33373955823481 2.33373955823481 0
233 2.91461278767682 2 -0.514369184862923 -0.0810713462712984 -0.46285159058721 d1 21.4213166750016 2.91461278767682 2
234 5.30071527233756 1 -1.81190949172934 -0.0716856549395218 -0.421014009560247 d1 10.7334928680211 5.30071527233756 1
235 4.7089065139189 1 -0.628743853942056 -0.0693777239428382 -0.471650853606041 d1 49.3702662338443 4.7089065139189 1
236 2.03937177165392 2 -1.39676836507781 -0.0608927217245306 0.368449894786603 d1 2.66825927421451 2.03937177165392 2
237 0.207571438979357 2 -0.51684155611588 -0.0607293782301824 0.894313299593346 d1 10.689409840852 0.207571438979357 2
238 0.851749686482263 2 -0.691115109166931 -0.0544992133306127 -0.0484490250175027 d1 1.82849034667015 0.851749686482263 2
239 0.232213203795254 2 -1.29182474066886 -0.053047642486113 -0.813036486192363 d1 19.8839293445704 0.232213203795254 2
240 5.01115417838178 1 -0.117918599350613 -0.0500544949888002 -0.55616354221462 d1 51.9530932977507 5.01115417838178 1
241 0.181447059847414 2 -2.56453984926282 -0.039613173225119 -0.397859153781527 d1 2.48961834236979 0.181447059847414 2
242 0.11701835406542 2 -1.04679555121175 -0.0244555289561008 -0.155387309205149 d1 2.42753457278013 0.11701835406542 2
243 5.7707601293299 1 -1.27312188020529 -0.0238995320970482 -0.638483028102753 d1 11.136468835175 5.7707601293299 1
244 1.31091332338275 2 -2.35647965467172 -0.0227612809714379 0.100033755184394 d1 16.8639056003633 1.31091332338275 2
245 0.921248114973047 2 -0.980831488883218 -0.0165767330976238 -0.112567090295151 d1 14.6494188083282 0.921248114973047 2
246 2.67004715221394 1 -0.434219991663494 -0.0156170697794335 -0.709188205273621 d1 18.9970961018446 2.67004715221394 1
247 1.74592395490947 2 -1.68412440582249 -0.00576934686426262 -0.987227990286872 d1 28.6467378942256 1.74592395490947 2
248 2.64318511808727 2 -0.526162593331332 -0.0015792334045885 0.0702184048673455 d1 5.30908570624888 2.64318511808727 2
249 1.98613662450554 2 -0.439327093923725 -0.00117076714454385 0.894166171770393 d1 1.9642498344183 1.9642498344183 0
250 0.0156997491587898 2 -0.324590600340434 0.0085674899950346 0.278632113218294 d2 23.0319896518233 0.0156997491587898 2
251 1.02483786078651 2 -0.705483652281766 0.0123037075553583 0.686753165145983 d2 17.788258821517 1.02483786078651 2
252 0.190481021691876 2 -1.48053579157808 0.0329377319464771 0.95860980835632 d2 39.1881406611171 0.190481021691876 2
253 0.406864898728095 2 -0.66287821842055 0.0343209962054567 -1.02405850677521 d2 30.9564450397899 0.406864898728095 2
254 1.24682781383287 2 -0.206994907568211 0.0394609839921361 -0.413993603720292 d2 1.21858393183652 1.21858393183652 0
255 0.0343753263940729 2 -0.734767522424756 0.0524276443319716 0.0135826138541787 d2 1.46569629199803 0.0343753263940729 2
256 4.16808855185547 1 -0.766143951110549 0.0547849675128103 -1.18134679661031 d2 20.3632338602493 4.16808855185547 1
257 0.929139493129326 2 -1.80933914217456 0.0592599023808696 -0.9718829610288 d2 49.7898622164546 0.929139493129326 2
258 0.448792203907764 2 -0.346966559951587 0.065908035853716 -0.387931926801275 d2 8.50533039257842 0.448792203907764 2
259 1.5034935817504 2 -1.1326643150283 0.0810871170507968 0.251651137168998 d2 26.1456839918139 1.5034935817504 2
260 1.15272829468786 2 -1.73341990854013 0.0921999410787411 0.0638680919173616 d2 14.6578028417172 1.15272829468786 2
261 0.0640956317643552 2 -0.176244976288114 0.0977731862145538 -0.597952944635792 d2 14.4380191146376 0.0640956317643552 2
262 1.10818157401867 2 -0.550046668781957 0.10209917568942 0.561809431951072 d2 1.80839700967214 1.10818157401867 2
263 0.711445530043703 2 -0.894750424865124 0.104539115832322 0.215282952133479 d2 11.0349307954311 0.711445530043703 2
264 0.227361694532769 1 -0.586925365791681 0.111569516315137 0.256833226759068 d2 4.03843670386761 0.227361694532769 1
265 1.02353190359486 2 -1.53488769798728 0.113666164888074 -0.559846386629048 d2 12.8939849883318 1.02353190359486 2
266 0.201588912102931 2 -2.14778624209232 0.114402728772923 -0.869975831946883 d2 6.32016687653959 0.201588912102931 2
267 0.35892161067405 2 -0.206584750678768 0.120368830434315 0.0340683721764806 d2 47.696836327476 0.35892161067405 2
268 0.142049523157072 2 -0.0546562841688546 0.12379343786166 -0.166814616349012 d2 18.971409536058 0.142049523157072 2
269 0.0202328132171846 2 -0.0790216575399896 0.124846142340095 -1.30144562018104 d2 5.14249449595809 0.0202328132171846 2
270 0.407534678143771 2 -0.412896572881849 0.126644980736647 0.415595320080395 d2 3.21758340112865 0.407534678143771 2
271 0.503944600689501 2 -0.0132964259727509 0.130083715217701 0.0561063708308658 d2 14.7065426789384 0.503944600689501 2
272 0.927551671647512 2 -2.04323446243185 0.135941565014185 0.689818777626378 d2 14.0821513338926 0.927551671647512 2
273 1.45185523215195 2 -0.623455432968406 0.138238064444506 -0.409104872416987 d2 65.6392365660439 1.45185523215195 2
274 0.872874716691619 2 -0.93717363941917 0.138404754662287 -1.23231212029417 d2 15.6777038540441 0.872874716691619 2
275 1.49423749793154 2 -1.00636013357011 0.14659161786089 0.230327121134075 d2 20.0820929362419 1.49423749793154 2
276 0.238842260978686 2 -0.25195440151874 0.175367442963731 -0.337792925110212 d2 15.6895111792501 0.238842260978686 2
277 0.0692366053041504 2 -0.128961112845409 0.181704124470178 0.397332015907095 d2 8.93658963384632 0.0692366053041504 2
278 0.779855987136579 2 -1.36487007647493 0.187464799776689 0.261358415505223 d2 4.31801372207701 0.779855987136579 2
279 0.699886751185329 1 -0.751978562314961 0.191547491011504 -1.30215930354653 d2 4.30929420515895 0.699886751185329 1
280 0.734088949033802 2 -0.664306453699544 0.193185283365211 0.235430697829153 d2 3.21511986450921 0.734088949033802 2
281 0.223446971225934 2 -1.06169195170276 0.195643307666265 0.988882724739337 d2 7.6680544577539 0.223446971225934 2
282 0.132826782517244 2 -0.736732250144602 0.204531663956041 -1.07696093866452 d2 65.4219031300316 0.132826782517244 2
283 0.457251724424565 2 -0.975335617397184 0.204746526181366 -0.876693515212773 d2 13.5662342328578 0.457251724424565 2
284 1.15717776080299 1 -0.315316175860469 0.253997160756786 -1.84999130643452 d2 6.5199363976717 1.15717776080299 1
285 0.0304567135613987 2 -0.860899337097807 0.254397215310231 -0.870147075426326 d2 19.1963952771368 0.0304567135613987 2
286 1.2713881665644 2 -0.416275629227561 0.26218061260624 0.685245699185711 d2 23.0228867373409 1.2713881665644 2
287 0.88070006990238 2 -1.30851193899984 0.263458810762776 -0.0200957553850963 d2 7.9112268704921 0.88070006990238 2
288 1.05395862039481 2 -1.75884886146508 0.267056776137007 0.843915107919986 d2 21.4724540888312 1.05395862039481 2
289 0.380675969003663 2 -0.303811899969935 0.272658089169541 0.797759579087635 d2 13.3209120389074 0.380675969003663 2
290 2.42948952352086 1 -1.07489880765383 0.278702417226384 -1.51295156544464 d2 12.1582691092044 2.42948952352086 1
291 0.600418660031393 2 -0.640588994825643 0.282065591061298 -0.348353787473505 d2 12.9015555977821 0.600418660031393 2
292 0.302928842308858 2 -1.43287992077704 0.28779517855791 0.711478037662267 d2 17.7399990878334 0.302928842308858 2
293 1.50431569009576 2 -0.312502673028209 0.29918817355219 -0.99296592194076 d2 4.01419310030979 1.50431569009576 2
294 1.65858306569878 2 -0.369034800692599 0.301640587484432 -1.01351122577763 d2 10.9375634603202 1.65858306569878 2
295 1.19819218608353 2 -2.67584023613399 0.301768818579558 0.898785945271837 d2 3.1764625114323 1.19819218608353 2
296 0.150994675234743 2 -1.95949443521336 0.308011223386714 0.504335995167867 d2 14.9881349495592 0.150994675234743 2
297 0.822017495316411 2 -1.47769926070047 0.309661202184633 0.497002444263502 d2 39.1943697987084 0.822017495316411 2
298 0.94527422272349 2 -0.00461325103619969 0.309896009945637 -2.98645501125237 d2 5.78721852227098 0.94527422272349 2
299 0.199807342913703 2 -0.38620419743011 0.311196357510849 0.312436682894612 d2 4.6801216353283 0.199807342913703 2
300 0.889043862681067 2 -0.695602530522189 0.312830266026359 0.169754562008535 d2 23.4441302850879 0.889043862681067 2
301 0.192823870936713 2 -1.85439904536673 0.319086571126395 0.943369152308209 d2 50.2285562513391 0.192823870936713 2
302 0.0825401463738917 2 -1.03142898609927 0.332938918764079 -0.228717865898126 d2 63.5443845357666 0.0825401463738917 2
303 1.09116313524583 2 -1.07825759111025 0.345784561650072 -0.328082878852172 d2 3.14877358994821 1.09116313524583 2
304 0.0801036016237605 2 -0.148250669113573 0.358363550071329 -1.37053623644768 d2 53.5321588416524 0.0801036016237605 2
305 1.51637719348801 2 -0.410000676134566 0.364165154422149 0.245043498851267 d2 2.02786128204309 1.51637719348801 2
306 0.223112276888441 2 -0.065270207612493 0.372946842014624 -0.767952406889159 d2 18.6229881264173 0.223112276888441 2
307 0.892192278669641 2 -2.00757599196328 0.387486731073923 -0.856864656243337 d2 6.50838260538876 0.892192278669641 2
308 0.841689597409288 2 -0.32653792839894 0.395922892941343 -1.345570225377 d2 35.9126912435451 0.841689597409288 2
309 2.64520937247143 2 -0.195331899221975 0.427539014250251 -0.159010111031083 d2 17.8068248732927 2.64520937247143 2
310 0.678166794441409 2 -1.14664983983835 0.429946619589537 -0.917289119688311 d2 2.95270613575119 0.678166794441409 2
311 0.0242340336581891 2 -1.86512651123246 0.433931575881324 -1.31937198712435 d2 9.62859936058521 0.0242340336581891 2
312 0.225544889552071 2 -1.81349649204381 0.446273358425133 -0.97893475725148 d2 9.11545751616359 0.225544889552071 2
313 1.32126555703243 2 -2.17562202579492 0.446777621989057 -0.927371331077784 d2 3.64970873109996 1.32126555703243 2
314 1.09788825524287 2 -0.473616603308054 0.452614065184748 -1.70286783824426 d2 14.2008710665683 1.09788825524287 2
315 0.0407427016024968 2 -0.383157587000771 0.459439996351849 -0.301669993217876 d2 1.06110211082059 0.0407427016024968 2
316 0.410326504864281 2 -1.54590745690689 0.461490341834014 -0.747675595773206 d2 60.5675432052384 0.410326504864281 2
317 0.983796912832362 2 -0.703903202384028 0.4748015562724 0.0498484937143415 d2 16.860832440758 0.983796912832362 2
318 1.28876403124804 2 -1.54624787871463 0.476270185954688 0.0346778838074355 d2 7.07456577307847 1.28876403124804 2
319 0.11062920823862 2 -0.46230787319003 0.478347594082418 0.927534138368758 d2 46.2824380000062 0.11062920823862 2
320 0.372899983721366 1 -0.613960890713074 0.480142446457778 -0.312547409750764 d2 59.4584211673508 0.372899983721366 1
321 1.68192675816703 2 -0.916665744977255 0.484894451696334 -1.26991668174902 d2 10.9923213627189 1.68192675816703 2
322 0.363768025567915 2 -0.452810033897698 0.492260284434662 -1.22144399605841 d2 3.893798654899 0.363768025567915 2
323 0.770954940607939 2 -0.146013150710654 0.496694842550797 -1.1847484984477 d2 3.93110281787813 0.770954940607939 2
324 0.702569675001579 2 -1.74262306266049 0.497365116238882 -0.0708118818763832 d2 13.7317931372672 0.702569675001579 2
325 0.552321837103311 2 -1.46551912536993 0.517918254055016 0.842656893998976 d2 25.4166308782044 0.552321837103311 2
326 1.51943766857141 2 -0.0324994758301393 0.521687294088326 -0.695674316562543 d2 8.95308271485998 1.51943766857141 2
327 0.0143793687926801 2 -0.489300704678702 0.549156338240166 0.68485755666067 d2 30.7497045008426 0.0143793687926801 2
328 0.196925432688972 2 -0.776115740427093 0.575435440108272 -0.104856856920984 d2 18.9580009496751 0.196925432688972 2
329 0.397994932841351 2 -2.30148415329675 0.592726656812008 0.528916524898275 d2 20.9906420289519 0.397994932841351 2
330 0.443605839368832 2 -0.442879615439267 0.60317081486281 -0.493556135862726 d2 31.9349645061379 0.443605839368832 2
331 0.595047413773727 2 -0.041421786784315 0.613222349631286 0.942855179621111 d2 113.545362644627 0.595047413773727 2
332 0.851778335536802 2 -0.692551688779352 0.618840767936134 -0.280481561963061 d2 67.584654089428 0.851778335536802 2
333 0.0850131563678969 2 -0.351087533933564 0.63115172337206 -1.08703450937858 d2 23.3850651598516 0.0850131563678969 2
334 0.546620696062235 2 -1.20797835030583 0.632977991529251 0.687097616289009 d2 24.9407819942911 0.546620696062235 2
335 0.651966739701176 2 -0.155676646156619 0.633973940877502 -0.195116434787854 d2 9.50914178974926 0.651966739701176 2
336 0.706971230359489 2 -0.291607673458914 0.672999338279278 -0.611676752142638 d2 29.2759011296516 0.706971230359489 2
337 0.0946099703987008 2 -0.828390769734915 0.673022992266887 -0.0807462778117569 d2 43.4866768469043 0.0946099703987008 2
338 1.23917359298254 2 -0.217083476563538 0.68117387507849 -2.27419916140393 d2 9.65838972479105 1.23917359298254 2
339 1.39318028148559 2 -1.42331170158666 0.68321407696828 0.415548254106349 d2 39.4098542986398 1.39318028148559 2
340 0.2887412686546 2 -0.216293134212122 0.684669076031555 0.54324012070439 d2 36.7100610194688 0.2887412686546 2
341 0.747401769988024 2 -0.994934380543088 0.685217633998772 -0.553592904982075 d2 2.55605911309923 0.747401769988024 2
342 1.55450392733402 2 -1.64317677850932 0.689216356610522 0.953505009843059 d2 11.8831441458315 1.55450392733402 2
343 0.278926110328084 2 -0.509682189786163 0.727075361174734 -0.00517616250699605 d2 41.3761439902668 0.278926110328084 2
344 0.558099948956484 2 -0.801257294848326 0.733410908527555 0.901317289352153 d2 24.7530005863848 0.558099948956484 2
345 0.217691863979412 2 -0.0780556663003881 0.734820990980883 -7.74213028044464e-05 d2 4.25654166378081 0.217691863979412 2
346 0.168765739088355 2 -0.524476363949861 0.737472157084385 -0.967529722246776 d2 74.1931508066964 0.168765739088355 2
347 0.491175473306273 2 -0.338410953642002 0.746192491683312 -1.20939846483088 d2 18.2602968819883 0.491175473306273 2
348 0.570280873077232 2 -0.82496807991851 0.755100400895145 -2.47165452825858 d2 47.8723819156118 0.570280873077232 2
349 1.18847230144455 2 -2.44815755626931 0.771050378387112 0.349725998603989 d2 8.68409346789122 1.18847230144455 2
350 2.08675113026237 2 -0.555687847563078 0.773575162368019 -2.55538526793035 d2 3.62196432426572 2.08675113026237 2
351 1.64358284619001 2 -0.57106547169757 0.775276024082534 0.567090265161285 d2 17.3387034539534 1.64358284619001 2
352 1.16387882660293 2 -0.6632811005556 0.778534449256291 -0.902621057209603 d2 12.5933971069753 1.16387882660293 2
353 0.486642608119449 2 -1.26675938425176 0.785257053606859 -0.0887537463864184 d2 24.870695619935 0.486642608119449 2
354 0.368862796531493 2 -0.0157734526113872 0.794597993716167 -1.54681819490358 d2 48.0052247245736 0.368862796531493 2
355 0.955473331135381 2 -0.137800750340034 0.797004524974926 -0.378617176416411 d2 32.9089857993608 0.955473331135381 2
356 3.12676574071716 2 -1.06368645492879 0.821687817198826 -0.0407811990387977 d2 3.61957159824669 3.12676574071716 2
357 0.306348220749424 2 -0.147516803016227 0.841656293816402 -0.191520760863928 d2 114.886943989231 0.306348220749424 2
358 0.905700703697593 2 -0.54143339886706 0.854324899126672 0.179139127594265 d2 15.1024301341715 0.905700703697593 2
359 0.840685973234864 1 -0.303020462384095 0.882585070758093 0.289440144014759 d2 11.4592190645635 0.840685973234864 1
360 0.073732312038499 2 -0.0717389572445063 0.888796858018411 -0.00118514725515559 d2 31.3144977983426 0.073732312038499 2
361 0.714105402914262 1 -1.26727360969057 0.902324548233499 -0.206786821001746 d2 37.532997984839 0.714105402914262 1
362 0.361447165457703 1 -0.308342680111544 0.914316291620421 -0.93039023459829 d2 1.28684038296342 0.361447165457703 1
363 0.353413267947933 2 -0.617883410116297 0.920869361254689 -0.0852879281172563 d2 7.88297220425304 0.353413267947933 2
364 0.742702086148416 2 -0.215443146498359 0.942205130591864 0.0981486648503957 d2 1.74852036355542 0.742702086148416 2
365 0.932685261116003 2 -0.604698915349817 0.959656990846885 0.740922119652381 d2 49.9165404935308 0.932685261116003 2
366 1.17763442513466 2 -0.122413893812872 0.965895507983667 0.258230824925122 d2 8.1961564719677 1.17763442513466 2
367 2.401912919796 2 -0.849189313239924 0.969385765833604 -0.93281592514594 d2 16.0375468238237 2.401912919796 2
368 0.587283215181692 2 -0.810493531629883 0.979673331930529 -0.598449061117795 d2 12.9091547522694 0.587283215181692 2
369 2.41779795430406 1 -0.105147401862829 0.993446936499585 -1.65275149300319 d2 4.58744315430522 2.41779795430406 1
370 1.29595096677794 2 -1.01243925750055 0.995408451418187 -1.33106394220616 d2 9.05835108831525 1.29595096677794 2
371 0.0470700442629491 2 -0.209557800735267 1.00872627071948 -0.698056690769953 d2 15.2551715716842 0.0470700442629491 2
372 1.16996056595139 2 -0.823512228938982 1.01258569626263 -1.01554090362161 d2 6.35657354823829 1.16996056595139 2
373 1.57326372446757 2 -1.34150088324194 1.02887539791865 0.306288469753485 d2 17.8610146037283 1.57326372446757 2
374 1.30043000087772 2 -0.705141749468459 1.03975340016813 0.251567713615197 d2 6.52474461614365 1.30043000087772 2
375 1.14779420432604 2 -0.398892092007413 1.04179100519446 -1.83243497532061 d2 2.10324127227068 1.14779420432604 2
376 0.505076958616528 2 -0.718370901724561 1.0421866506265 -0.246372073902359 d2 5.0625859759748 0.505076958616528 2
377 0.925537763632789 2 -1.89987394421315 1.05397987352466 -0.563189170153506 d2 26.255743074322 0.925537763632789 2
378 0.563820722455024 2 -0.938740016875237 1.06440807794544 0.62455787714372 d2 18.7673846251311 0.563820722455024 2
379 1.85860266904046 2 -2.38644796518593 1.07517319771127 -0.460895461291849 d2 10.3336658608168 1.85860266904046 2
380 0.555464183436573 2 -0.366945396154961 1.07963410980129 0.213645079959669 d2 4.5025734912216 0.555464183436573 2
381 0.377637671893438 2 -0.77056335491118 1.08078074730182 0.379244608337682 d2 13.3972088620067 0.377637671893438 2
382 0.773916903893329 2 -1.18062114223285 1.09078221998766 -0.781635129946549 d2 26.3333267710152 0.773916903893329 2
383 0.331737034780138 2 -0.160422114606273 1.09520677325215 0.160559358901957 d2 4.12589312531054 0.331737034780138 2
384 0.485487492784924 2 -0.291266012182764 1.12717653577567 0.539864617309839 d2 47.509861027164 0.485487492784924 2
385 0.567644769068142 2 -1.87254604275478 1.13325607246989 0.0826067085001744 d2 2.37201266922057 0.567644769068142 2
386 0.128928408406694 2 -1.16872646419766 1.14497886458327 0.765159746122596 d2 60.4491259901709 0.128928408406694 2
387 0.214665382817188 2 -0.854540099210319 1.14705135091975 0.524188467815794 d2 15.3455503796344 0.214665382817188 2
388 0.158244769503046 2 -0.888209644538255 1.14773768082969 -1.72163007302602 d2 11.9385945331305 0.158244769503046 2
389 0.820958648049928 2 -0.0742931937039507 1.15221222139056 -0.477004924723435 d2 3.22380216148211 0.820958648049928 2
390 0.0157959223057368 2 -0.764405046898142 1.16096745917705 -1.0106418628181 d2 29.397890230823 0.0157959223057368 2
391 0.290203856103889 2 -3.04151467751598 1.19973111490997 -0.712247439601491 d2 4.80517659336329 0.290203856103889 2
392 0.593791993901823 2 -0.330438750032875 1.21666360785384 0.43062865240794 d2 4.83499114401639 0.593791993901823 2
393 0.164843803074047 2 -1.81192343134569 1.22559435231621 -2.72334725048105 d2 10.9742081258446 0.164843803074047 2
394 11.9055269684581 1 -0.665960725671452 1.23627006640145 -0.419590161182336 d2 40.9294332547073 11.9055269684581 1
395 0.671221861686162 2 -0.188346464217139 1.24489674668011 0.120267590757923 d2 21.7115019562509 0.671221861686162 2
396 0.0942544131064994 2 -0.194634894363973 1.26346005224947 -0.76423468210315 d2 19.021411601182 0.0942544131064994 2
397 0.615549209477342 2 -1.30356479689051 1.27806596638121 0.0640178772196265 d2 21.8324093325975 0.615549209477342 2
398 0.0822799006980319 2 -1.67752507912405 1.28565827077808 0.519919803005842 d2 24.2950110687854 0.0822799006980319 2
399 1.20406221344319 2 -0.000881577351194493 1.29095413317533 0.433991471288344 d2 24.5576635001074 1.20406221344319 2
400 1.98874620101502 2 -0.644968559624807 1.32777721569994 -0.292529718561191 d2 34.2133376358037 1.98874620101502 2
401 0.341627149662264 2 -0.934673636743636 1.34125496553996 -1.28162167614483 d2 8.69551958147219 0.341627149662264 2
402 0.0168732562030819 2 -0.210832477089006 1.36284677624668 -0.453173609985677 d2 2.57886065170169 0.0168732562030819 2
403 0.682544737920231 2 -0.358420115001672 1.36413038692697 0.786961394842606 d2 67.8731216456661 0.682544737920231 2
404 0.194210974722535 2 -1.21395407363839 1.37247900322005 -1.57965792628652 d2 16.7389732590857 0.194210974722535 2
405 0.01067929878569 2 -0.711737659603335 1.44367806227615 0.494679511609896 d2 6.50548443823837 0.01067929878569 2
406 2.59280701155528 2 -0.346289734374787 1.46877736894458 -2.12354851451589 d2 9.08401713706553 2.59280701155528 2
407 0.393467740871632 2 -0.210868519696887 1.48825220794357 -0.631635204679698 d2 8.3222406450659 0.393467740871632 2
408 1.42224337449556 2 -0.826462920995468 1.50577479114554 0.826902277304424 d2 5.40322990307394 1.42224337449556 2
409 1.33433690652175 2 -0.60950954295317 1.5242736002613 0.33221624648781 d2 77.9066298487497 1.33433690652175 2
410 0.675625026289235 1 -0.104581864758384 1.56402723058933 -0.4456494141151 d2 5.37353254369528 0.675625026289235 1
411 1.18800689892756 2 -0.290691809048107 1.59737990139469 -0.731489984714945 d2 5.13775296509266 1.18800689892756 2
412 0.5610430217052 2 -0.121951712549261 1.5989351907612 -0.700489895929108 d2 45.7034039099641 0.5610430217052 2
413 0.111499842106917 2 -0.760578628109173 1.61891116180103 -0.250533988404267 d2 110.892675848384 0.111499842106917 2
414 1.28394211109323 2 -0.644905975513065 1.65165972345351 -0.277973230483964 d2 0.271660890430212 0.271660890430212 0
415 0.36046102215795 2 -2.32017185740586 1.65353387790046 -0.501632803317992 d2 70.4052646043611 0.36046102215795 2
416 0.575273370031256 2 -0.157124890997325 1.71599907279609 -1.11580353751111 d2 132.810415878781 0.575273370031256 2
417 1.29121478953708 2 -1.97627600833374 1.73179518934575 -2.19550526142741 d2 32.2724051756744 1.29121478953708 2
418 0.989072998401391 2 -0.215092388017547 1.73640052621478 -1.50678176080062 d2 29.9476638033679 0.989072998401391 2
419 1.81867962127306 2 -0.382786696918515 1.77220325772621 0.41090714894628 d2 15.2582436605337 1.81867962127306 2
420 0.424640509247266 2 -0.215550700328914 1.79151276909653 0.441547365758035 d2 0.867104083299637 0.424640509247266 2
421 0.580463302371877 2 -0.421522579181269 1.84948662280667 -0.107403839804066 d2 2.88768693425267 0.580463302371877 2
422 0.502226830768129 2 -0.184369339246996 1.85961621310361 0.62023606747576 d2 35.8524207008963 0.502226830768129 2
423 0.651407346396547 2 -0.660513075272549 1.87386755678387 -0.621004930445427 d2 46.1402620675145 0.651407346396547 2
424 0.0394596677280844 2 -0.26993942506916 1.87959315129064 -0.252190317127652 d2 9.79061218909919 0.0394596677280844 2
425 0.970595889828562 2 -1.04510802337548 1.92602217715534 0.0902929063065855 d2 74.9303023102594 0.970595889828562 2
426 0.338564266144649 2 -1.44714357951978 1.94423463188431 0.529239935450155 d2 2.5988173019141 0.338564266144649 2
427 0.712761910235137 2 -0.739306835285532 1.97934994466332 0.26138571303491 d2 119.479093246891 0.712761910235137 2
428 1.50524800791071 2 -0.420983335208244 2.07430232771404 -0.689347335029629 d2 29.0102935411009 1.50524800791071 2
429 5.41910071472478 1 -0.298425154173344 2.10023557915584 -1.42893867631025 d2 3.66633635014296 3.66633635014296 0
430 1.46110213895148 2 -1.21522178800769 2.12465840393492 0.127826188208986 d2 18.0288890368285 1.46110213895148 2
431 0.349740831339943 2 -1.31635776880358 2.19888709961714 -0.665520965123348 d2 2.49173296399998 0.349740831339943 2
432 0.109654119891548 2 -1.94336977065312 2.28885287387926 -0.0227376072732241 d2 66.2348312105904 0.109654119891548 2
433 0.32694707880959 2 -0.33070420771385 2.35284611368282 -0.332760456709095 d2 27.993805320824 0.32694707880959 2
434 0.455847657299084 2 -1.1613741180384 2.39631298153787 -0.337671586008395 d2 14.6055440523148 0.455847657299084 2
435 0.805503301057283 2 -0.749292679007588 2.76291539134761 0.0700291458091432 d2 6.93319054320455 0.805503301057283 2
436 0.559331617555047 2 -1.37332226052715 2.80201217822241 0.783135997663391 d2 26.3137999541106 0.559331617555047 2
437 1.06530495836604 2 -1.11764024237778 3.2926528297212 0.020510640396302 d2 6.90590973407556 1.06530495836604 2

View file

@ -0,0 +1,422 @@
"T","J","x1","x2","x3","set","C","u","delta"
0.499867362999948,2,-1.95019832240832,-2.60627899155475,0.263872418621638,"d1",78.1147597315622,0.499867362999948,2
0.411483192351542,2,-0.335587884128994,-2.59271420987147,-1.13466609937628,"d1",17.0940970062258,0.411483192351542,2
6.26589199230665,1,-1.54140235787167,-2.30006437514968,0.233748690841754,"d1",25.4117258257213,6.26589199230665,1
5.51302082790179,1,-2.14735528739845,-2.20493452952125,-0.00149264459250339,"d1",21.1466883780434,5.51302082790179,1
0.589132356923074,2,-0.504171648695752,-2.12406874197516,0.966489874835643,"d1",63.6942574348221,0.589132356923074,2
0.100430077962303,2,-0.690743614142311,-2.11417284528098,-0.462855490815159,"d1",1.99340037070215,0.100430077962303,2
2.78052458150272,2,-0.551926772252824,-2.09000455633969,-0.177623152985041,"d1",30.9898108972197,2.78052458150272,2
0.362287234184209,2,-0.115697384278896,-2.07978204758821,-0.637623319390929,"d1",39.3571070564871,0.362287234184209,2
0.0379365109838545,2,-2.35088503668122,-2.06709410300666,0.829087459518316,"d1",19.5599143943729,0.0379365109838545,2
0.030014815274626,2,-0.158798650966454,-2.05890835303292,-0.462039828875565,"d1",1.57979466716853,0.030014815274626,2
5.47108585297847,1,-0.62692030358575,-2.02055602810388,0.444819057512709,"d1",10.4432902485132,5.47108585297847,1
3.19113383128197,1,-1.00870532301789,-1.99366184170529,0.36597640035569,"d1",6.42029091715813,3.19113383128197,1
7.01919485280539,1,-1.43655112723172,-1.95287956158818,-0.74781769436591,"d1",29.2763396335726,7.01919485280539,1
5.6207995602991,1,-1.72940999679298,-1.880860671279,0.865723067991154,"d1",7.21366209874041,5.6207995602991,1
2.35006319160078,2,-1.56730398966994,-1.87987513761127,-0.100405585728897,"d1",103.798832333753,2.35006319160078,2
0.655913021415472,2,-0.381072772266333,-1.83726471030277,-1.91183811668422,"d1",47.9379538793988,0.655913021415472,2
4.60259209920592,2,-0.447638765302678,-1.78988532702524,0.609071625258388,"d1",2.60597240030185,2.60597240030185,0
5.82985093311453,1,-0.454478759553709,-1.77988775292904,-0.951380467801523,"d1",11.8871257267892,5.82985093311453,1
4.00551166178143,2,-0.169952711026236,-1.77577954156175,-0.0743184050913884,"d1",4.01423139072942,4.00551166178143,2
0.770518803927016,2,-0.217358259412447,-1.76478931337377,0.925995782542218,"d1",27.4441876254025,0.770518803927016,2
1.464766157707,2,-0.907513823100056,-1.75462814010361,0.0618782092551372,"d1",7.28319086134434,1.464766157707,2
5.85581386372292,1,-0.408218830092499,-1.7351551622775,-1.30565834762586,"d1",20.3997039211172,5.85581386372292,1
0.627003119327128,2,-0.490915399276648,-1.7130888915695,-0.701850720754584,"d1",0.0501011684536934,0.0501011684536934,0
5.28130548623981,1,-0.44820545440036,-1.67845567328654,-0.352553421039791,"d1",11.5045715961605,5.28130548623981,1
1.07525985218109,2,-1.19338720662916,-1.66337144479934,0.796645773274118,"d1",59.376008582585,1.07525985218109,2
6.54756452824936,1,-1.16617815904908,-1.63820855004219,-1.157168326241,"d1",53.0357338090367,6.54756452824936,1
0.111345880643449,2,-0.78711928337837,-1.60644550943024,-2.24275122811157,"d1",3.74917807608269,0.111345880643449,2
0.451999953016639,2,-0.812418624513425,-1.55229147176324,-0.349728885283845,"d1",20.7824087638621,0.451999953016639,2
0.66187332617119,2,-0.508034279805,-1.53046688766278,-0.125548243031678,"d1",1.05018629103254,0.66187332617119,2
0.615669948980212,2,-0.883736989422782,-1.5182885181224,-2.17546487280826,"d1",2.50971530564129,0.615669948980212,2
4.59409849090741,1,-0.463742158823814,-1.51482036685259,-0.128794669558068,"d1",5.21418055519462,4.59409849090741,1
1.70998832202497,2,-0.435222341947856,-1.46629935512921,0.366128738801027,"d1",22.9905674225631,1.70998832202497,2
0.16477278387174,2,-0.158962000535981,-1.42734602325756,0.7814198196256,"d1",2.67401527323018,0.16477278387174,2
2.69938570062134,2,-1.32872703004022,-1.42130869029821,0.348507166757712,"d1",8.26423623237792,2.69938570062134,2
0.36591454860851,2,-0.272697388869142,-1.41996949576558,-1.09564014616258,"d1",6.61146112717688,0.36591454860851,2
0.353021066088114,2,-0.705605038212206,-1.40316187616988,0.765560773782534,"d1",8.0167396645993,0.353021066088114,2
6.06766719635048,1,-1.55037485195067,-1.34567809527089,-0.760841361837919,"d1",1.09786237904911,1.09786237904911,0
0.644815232139081,2,-1.15963532979715,-1.31896146330714,-0.549007768600895,"d1",31.0450109077578,0.644815232139081,2
1.07542936220289,2,-0.778554847469194,-1.30054996528693,-1.04023868273514,"d1",25.8691836140099,1.07542936220289,2
0.25507666592619,2,-2.10743065316308,-1.28781900130437,-1.16449794284244,"d1",2.4481005128473,0.25507666592619,2
4.22979112319602,1,-0.846428182531737,-1.27060985892563,-1.08205947085447,"d1",40.1862035302405,4.22979112319602,1
1.54102904713693,2,-0.548921604883928,-1.26747682520373,0.269373223479816,"d1",7.15302918106318,1.54102904713693,2
5.69764774521504,1,-0.334010020049075,-1.25874497163495,-0.0938705365567017,"d1",34.0617424678587,5.69764774521504,1
3.6253245340717,1,-2.06010942376809,-1.25629035083821,0.064109659520042,"d1",4.88388891331851,3.6253245340717,1
4.26293430757702,2,-1.32110118545274,-1.23852335684901,0.60335439407922,"d1",8.21151600219309,4.26293430757702,2
5.71672319925689,1,-0.263168026690344,-1.22173402907403,-1.71587984337502,"d1",16.940669081265,5.71672319925689,1
5.55431417646415,1,-0.447206372965553,-1.21303905186392,0.115815130048467,"d1",15.2463490135016,5.55431417646415,1
1.2009382713166,2,-1.14899977428392,-1.20463083041379,-1.14429497936915,"d1",23.6061829878929,1.2009382713166,2
6.79536680010782,1,-0.0111679873537602,-1.19546465375587,0.309993712292912,"d1",66.1284001137982,6.79536680010782,1
2.46331876317475,2,-0.482701087662075,-1.1481795630697,-1.41455158117126,"d1",12.5331542361528,2.46331876317475,2
4.07894908429539,2,-1.45510635149798,-1.14384314965535,0.808902319926509,"d1",1.44096298856773,1.44096298856773,0
0.261695730034262,2,-0.943270301982324,-1.13748423127889,0.158355281672531,"d1",43.8340519384141,0.261695730034262,2
4.81273439537871,1,-2.88793714208826,-1.13647240113562,0.0733609481714206,"d1",36.9158127142077,4.81273439537871,1
0.230829819571227,2,-0.993323732615054,-1.13619235403737,0.63867136636673,"d1",24.4872925794663,0.230829819571227,2
6.73293879458427,1,-0.296846101197127,-1.1340541598207,0.844698804524038,"d1",7.46175810694695,6.73293879458427,1
0.168945440556854,2,-0.380773376847431,-1.13128996081587,0.900395196575448,"d1",2.01092992909253,0.168945440556854,2
5.98011658047727,1,-0.318535890192892,-1.12903745621652,-0.449817470400936,"d1",3.46174228005111,3.46174228005111,0
1.22577496986361,2,-1.7200511170872,-1.12831840181859,-0.273148385437603,"d1",33.532725049365,1.22577496986361,2
0.0767893493175507,2,-0.461947633140275,-1.12825500347247,-0.558084112128901,"d1",13.0636250879616,0.0767893493175507,2
1.39937541069556,2,-0.110885121668419,-1.11643165391362,0.364029349051793,"d1",1.39057802201063,1.39057802201063,0
0.588528974447399,2,-1.00125994464178,-1.11548212705522,0.649809263983229,"d1",21.9685837335854,0.588528974447399,2
2.602702756643,1,-0.220756378655706,-1.10142892192176,-0.178398683362156,"d1",15.1814339860323,2.602702756643,1
0.107345493510365,2,-0.136424653945802,-1.08620427671388,-1.26310084972045,"d1",2.84996530041099,0.107345493510365,2
4.84797774579147,1,-2.640037363721,-1.07718527449055,0.126706475783981,"d1",12.4836507998407,4.84797774579147,1
0.400475817371724,2,-0.108508550893446,-1.07292122840034,0.00148134837676338,"d1",8.04725838098943,0.400475817371724,2
7.87069047922983,1,-1.07958210533537,-1.06862747193719,-0.662154443222777,"d1",84.0155980685606,7.87069047922983,1
5.16738377891322,1,-1.43866435150085,-1.05722321366436,-0.674634964462416,"d1",13.1439987290651,5.16738377891322,1
0.312620884738863,2,-0.54002631314478,-1.03355420146742,-0.927435593761941,"d1",16.1636680881684,0.312620884738863,2
0.594797343946993,2,-0.523630694310136,-1.032829845164,-0.3600040754558,"d1",6.55719876289368,0.594797343946993,2
1.58756684689763,2,-0.708585547888652,-1.0275777802401,-0.0560092163149688,"d1",2.03709915644662,1.58756684689763,2
0.157633140797128,2,-0.46463235612396,-1.01851485235356,-0.38464297772038,"d1",1.12309886419443,0.157633140797128,2
0.430044363252819,2,-0.365832672904036,-1.0139697548521,-0.198040491088858,"d1",33.4787387384062,0.430044363252819,2
6.3440347051184,1,-1.17668749863083,-1.00058075158278,-0.0651331410262753,"d1",23.426931534525,6.3440347051184,1
4.03709980150802,1,-0.248227727286613,-0.973934607681733,-1.12630658813714,"d1",9.87860122695565,4.03709980150802,1
0.896409576158602,2,-0.127588856767946,-0.972359927470434,-1.22561091633034,"d1",50.4587066978119,0.896409576158602,2
5.04397998161953,1,-1.74108063837017,-0.957323822479406,0.745863098569719,"d1",10.5295320414007,5.04397998161953,1
3.85294361146361,1,-1.26750294431399,-0.94789344647265,0.831736527945425,"d1",10.9185821376741,3.85294361146361,1
0.442006511877013,2,-0.354036914659923,-0.942780627326355,-0.363831505743131,"d1",43.415603150887,0.442006511877013,2
0.232622205279768,2,-1.66241321442347,-0.924117138889276,-0.814930976394094,"d1",1.5546501009788,0.232622205279768,2
0.747469336683762,2,-0.831949103513653,-0.914532892677964,-0.123845288295496,"d1",4.54467300325632,0.747469336683762,2
4.1848791638863,1,-2.14543063227577,-0.911795115892639,0.916083249608967,"d1",30.2966161302086,4.1848791638863,1
1.66416368167374,1,-0.145463778274721,-0.90074686050758,-0.564459630306043,"d1",6.34306907272518,1.66416368167374,1
6.72130595897616,1,-0.763857738580545,-0.872310481790421,0.28360030698429,"d1",6.98184758424759,6.72130595897616,1
0.421556759160012,2,-1.02907312310893,-0.868297987116183,-2.04164832864124,"d1",22.1035440443995,0.421556759160012,2
0.415698179975152,2,-0.565088432517738,-0.865971805743903,0.489298810095688,"d1",24.2157815015855,0.415698179975152,2
6.04006984027352,1,-1.80378631546711,-0.865947701381903,-2.45143317065972,"d1",12.7496245224029,6.04006984027352,1
4.43406675993612,1,-1.10530784304803,-0.855162013689037,0.825965077039436,"d1",12.3575822915882,4.43406675993612,1
6.60455671871596,1,-0.753543782190729,-0.853065417847988,0.911528068965907,"d1",55.8949446644554,6.60455671871596,1
5.86430583830404,1,-0.119270069843969,-0.832012305781867,-0.123396917106593,"d1",2.04369612969458,2.04369612969458,0
0.765395824861464,2,-0.756590051392957,-0.825870681405957,-1.09459501923616,"d1",7.56691016256809,0.765395824861464,2
6.13062823509473,1,-0.404367354122395,-0.794123265422334,0.519397084421048,"d1",6.57340552657843,6.13062823509473,1
1.36763089332254,2,-1.26507040921231,-0.785245756841697,-0.791402036345245,"d1",3.11886790208519,1.36763089332254,2
2.42700778147439,2,-0.487188196151172,-0.766669594197886,0.410330957888797,"d1",5.85054755210876,2.42700778147439,2
6.73991273889714,1,-0.184761116886234,-0.761522374617492,-0.532248648464166,"d1",12.2256078850478,6.73991273889714,1
4.36141455710945,1,-0.105471206029084,-0.754424978552752,-0.956983188268582,"d1",44.0004703749843,4.36141455710945,1
0.0148825589567423,2,-0.832577791659755,-0.750814042922674,0.594368798149314,"d1",10.2718881517649,0.0148825589567423,2
2.03035983248594,2,-1.35008072739753,-0.739254017411324,-0.934537708298102,"d1",6.93155937828124,2.03035983248594,2
0.323219427368838,2,-3.30164481425116,-0.737413330682173,0.158535050544275,"d1",6.21096261776984,0.323219427368838,2
4.56057912025861,1,-1.74103151571216,-0.736136753174071,0.288649407044573,"d1",62.3897792365322,4.56057912025861,1
5.1935752095808,1,-1.29643082121738,-0.735905168742066,-0.935752993561474,"d1",5.09524474851787,5.09524474851787,0
3.86531025709069,2,-0.0636095105971832,-0.732886515689508,-0.814307779468899,"d1",8.85476755909622,3.86531025709069,2
0.634098547976464,2,-0.170986777740401,-0.732247546425096,-0.246855951431236,"d1",30.9612841089789,0.634098547976464,2
4.87612400835413,1,-0.102394565999977,-0.677771864546318,0.0275786348531762,"d1",36.7549219137475,4.87612400835413,1
1.06079483773084,2,-0.0561619275905622,-0.662931426871597,0.730700839291824,"d1",13.5279788542539,1.06079483773084,2
6.60489732026799,1,-0.679722503289936,-0.646491972989746,-0.294445508374441,"d1",11.0387820657343,6.60489732026799,1
3.73370052556696,1,-1.33588231931319,-0.626542518485307,0.976264181983691,"d1",34.0810245631223,3.73370052556696,1
0.215206013061106,2,-0.487402140919274,-0.622077838675401,-0.985499563550701,"d1",12.1548983175308,0.215206013061106,2
0.0742700085614745,2,-2.14895712262163,-0.621501276239038,0.136788117565418,"d1",8.04026352241635,0.0742700085614745,2
7.1008527322065,1,-0.440348488037497,-0.615830025512935,-2.19194484398512,"d1",8.89550268650055,7.1008527322065,1
6.7471566122746,1,-0.481224832366081,-0.600951099333045,-0.480762211269973,"d1",38.7437415106182,6.7471566122746,1
2.24482986132119,2,-0.217731228444547,-0.600578883093281,0.940056160419262,"d1",20.6535042255166,2.24482986132119,2
7.50474685696234,1,-1.10367757209531,-0.577843231260005,-0.0138303662264709,"d1",13.2619685679674,7.50474685696234,1
0.713865732194423,2,-1.21517626693504,-0.575358915832213,-0.728181360609758,"d1",42.7921076222811,0.713865732194423,2
5.33264101467657,1,-0.0724806947018318,-0.563523809200885,-0.204717134353468,"d1",0.187731010444536,0.187731010444536,0
6.8586275618804,1,-1.46591798681562,-0.540729342476426,-0.754580363544986,"d1",20.3525460335558,6.8586275618804,1
5.81992253219201,1,-0.444983494178246,-0.531714523661177,-0.277171929560516,"d1",6.38694288624484,5.81992253219201,1
3.7151160815995,1,-0.237257721084836,-0.527018720350226,0.642959786423278,"d1",2.24223504598635,2.24223504598635,0
1.22530156649174,2,-0.635791390940521,-0.526483309231819,-2.1949047574972,"d1",44.1750103582568,1.22530156649174,2
7.00373084336256,1,-0.20081259124862,-0.525865240188069,0.99733337346096,"d1",9.77560072205961,7.00373084336256,1
7.46638813745472,1,-0.613414594619111,-0.522864801860655,-1.70505864369456,"d1",1.32270062773303,1.32270062773303,0
0.0770264104939997,2,-0.170624607385686,-0.521560426585595,0.284753182059407,"d1",3.57309073262642,0.0770264104939997,2
0.141067513730377,2,-0.81252818099109,-0.520882451714799,-1.02508871215029,"d1",22.2968422240558,0.141067513730377,2
8.08000240358258,1,-0.0589302051711418,-0.520026414725689,-1.21999195799251,"d1",6.38638902273251,6.38638902273251,0
0.65961842937395,2,-1.38673148781067,-0.513633600019186,0.85706365337255,"d1",34.38266120683,0.65961842937395,2
0.32432593498379,2,-1.35781650273435,-0.512039227314512,-0.204715271838212,"d1",13.1133704725653,0.32432593498379,2
0.576963331084698,2,-0.0457498417621635,-0.501686863705973,0.174835042489924,"d1",31.1563714439857,0.576963331084698,2
4.75434525966485,1,-0.599919349345153,-0.495367089666113,0.604377261065303,"d1",24.0383815979422,4.75434525966485,1
0.818759842712206,2,-0.0952013785990633,-0.494432211818882,-1.46694803898337,"d1",16.0198312097289,0.818759842712206,2
4.90561182719959,1,-1.81492443726033,-0.487671608873654,-1.97555745670925,"d1",33.5309124327051,4.90561182719959,1
3.63952218537657,2,-0.927798420893534,-0.481793161685171,0.270857399145853,"d1",40.5118284730201,3.63952218537657,2
1.00702644694121,2,-0.739796432115704,-0.465562602228936,0.0793119855033039,"d1",30.9101264396234,1.00702644694121,2
6.76971502879328,1,-0.638730432059152,-0.465503594160261,0.331249150958679,"d1",20.2612976162674,6.76971502879328,1
6.59249465181477,1,-0.142211253824736,-0.461603677722249,-0.752128672509869,"d1",26.7710029139164,6.59249465181477,1
2.805273024192,1,-0.133514709139844,-0.459588211605541,0.222501548058442,"d1",1.4710845425725,1.4710845425725,0
1.24453746150703,2,-1.67404168511301,-0.457658559466724,-2.94999228204974,"d1",0.0318882730873944,0.0318882730873944,0
0.502410726577924,2,-0.198465011915808,-0.44726347609141,-1.01351429027039,"d1",19.663324690515,0.502410726577924,2
6.25768367946802,1,-0.499300428082239,-0.433624573557182,0.772259655809996,"d1",16.2063858835938,6.25768367946802,1
4.45243678390236,1,-2.27994890407291,-0.432600267100338,-0.192874202113765,"d1",16.1783087803962,4.45243678390236,1
5.3456110942715,1,-0.0728341072992885,-0.426744213461414,-2.00347070619136,"d1",23.6349859825316,5.3456110942715,1
6.13261237074062,1,-0.699906551948259,-0.412362816369978,-0.00380865176602626,"d1",11.5768774040043,6.13261237074062,1
3.68682961056151,1,-0.0838928805075599,-0.411622202650781,0.568031700168796,"d1",22.4474866121056,3.68682961056151,1
0.76100954706631,2,-0.878828901403943,-0.407136319659784,-0.422550777633684,"d1",8.09349642135203,0.76100954706631,2
3.6396768946298,1,-0.493970497537286,-0.380437653626171,0.544980332189823,"d1",24.2342771767619,3.6396768946298,1
0.226093608306023,2,-0.802450798273513,-0.379668398780153,-0.353597623913161,"d1",10.9755174070597,0.226093608306023,2
7.14217677187447,1,-0.532156059460212,-0.377947838991342,0.865326864053416,"d1",83.4494295553544,7.14217677187447,1
1.023792038258,2,-0.234775191661309,-0.377922510014183,0.491050706319866,"d1",13.4517656546086,1.023792038258,2
0.325230990536511,2,-0.921853465743566,-0.376532243381352,-0.315304498057206,"d1",10.009858366102,0.325230990536511,2
1.21214290052177,2,-1.01754659517164,-0.372131176422376,0.721744258141993,"d1",15.1669203109088,1.21214290052177,2
1.05932499277861,2,-0.172861497329901,-0.368173871392029,-0.415327623237047,"d1",11.0319846123457,1.05932499277861,2
1.15900027747722,2,-1.06357604916444,-0.355727286601868,-0.83295066853112,"d1",11.026405999437,1.15900027747722,2
1.40432675174418,2,-2.00392240233422,-0.354311938693627,0.545223722435314,"d1",4.14780305698514,1.40432675174418,2
5.24546520517952,1,-0.697060984902235,-0.352340824558248,-0.167827672286475,"d1",13.1773237604648,5.24546520517952,1
2.20974060321662,2,-0.44644890041726,-0.341316173238382,-1.17368307746107,"d1",12.000501928851,2.20974060321662,2
1.10313763608864,2,-1.01741977972463,-0.301238997620582,0.795809665949982,"d1",1.13211940973997,1.10313763608864,2
0.0549348615779616,2,-0.638941905808089,-0.282836701929551,-0.222573540488648,"d1",18.5490127270171,0.0549348615779616,2
6.19019369816236,1,-0.630025466535802,-0.278803767694466,0.363569772143073,"d1",14.0355504109504,6.19019369816236,1
5.854815371233,1,-0.70528626965295,-0.27642123739972,0.755367666130202,"d1",0.0763031522171913,0.0763031522171913,0
0.915718387383339,2,-0.599049699293295,-0.250802227183038,0.638905768770242,"d1",7.72378107532859,0.915718387383339,2
0.408360831827446,2,-0.373723206001262,-0.250303662643863,-1.34600874310538,"d1",1.42498890869319,0.408360831827446,2
0.207730723278592,2,-1.1498063304207,-0.242127769602012,0.187896014934178,"d1",18.3369519749022,0.207730723278592,2
5.98386667120984,1,-1.02659650747139,-0.236076301428279,-0.221062460615409,"d1",37.3994422083372,5.98386667120984,1
1.08100279043884,2,-1.94479416850934,-0.233685865260032,-1.95828191574904,"d1",12.4608694948256,1.08100279043884,2
0.0099718258716166,2,-1.51095925832907,-0.226883732267773,0.538896410656343,"d1",1.69574242813753,0.0099718258716166,2
0.654205780476332,2,-1.4121280129534,-0.224646176343045,0.992025433629389,"d1",13.1169978715479,0.654205780476332,2
4.54793027405606,1,-0.828960039105809,-0.21371393692546,-1.56541454696946,"d1",11.5059393732247,4.54793027405606,1
3.38249082101469,2,-0.304769221959177,-0.211731030982286,0.556224447936644,"d1",3.39749668724835,3.38249082101469,2
3.96991475732246,1,-0.0883548658769718,-0.209627983367337,0.941399989549762,"d1",0.838029654696584,0.838029654696584,0
6.59189400563318,1,-0.424866029345544,-0.201990758460719,-0.0530650487711301,"d1",14.3362023462337,6.59189400563318,1
4.33577255715891,1,-0.733916490468392,-0.197969023048747,0.746621269395464,"d1",0.883020637944007,0.883020637944007,0
0.101469402055628,2,-0.82052056082922,-0.190251451264261,-0.0639685408845276,"d1",13.7223364040256,0.101469402055628,2
0.770054679736931,2,-0.214052821196357,-0.186398037836426,-1.21330515191523,"d1",43.0222481836505,0.770054679736931,2
0.00398647907686216,2,-0.738955336683205,-0.18140384913684,-0.322614676260016,"d1",9.5018079970032,0.00398647907686216,2
6.25516042635959,1,-0.605307676670324,-0.150378047353032,0.345014721638011,"d1",30.7541495917325,6.25516042635959,1
8.1048077865766,1,-1.01710519216245,-0.149800375609999,-0.0364766720553888,"d1",0.944741234214027,0.944741234214027,0
6.2812328382367,1,-0.6418689198448,-0.143668219208823,0.169791544958343,"d1",4.39846734516323,4.39846734516323,0
6.92405921593974,1,-0.726680950407423,-0.135676733596106,0.25111223999711,"d1",1.39894222840667,1.39894222840667,0
1.15639470513434,2,-0.375659527184283,-0.133457241096729,-0.720537460818236,"d1",4.6384328158824,1.15639470513434,2
0.0127057878088691,2,-0.584704699337587,-0.129682557224926,0.714226452339785,"d1",11.5945034567267,0.0127057878088691,2
1.02857265573186,2,-0.326048256016773,-0.129438718205001,-1.23355723518009,"d1",35.4771690426354,1.02857265573186,2
0.0205982001498342,2,-0.359779776182028,-0.119297861520966,0.591992900562482,"d1",8.94692211411893,0.0205982001498342,2
1.40970702545298,2,-0.213891739055617,-0.119294621033348,-0.182478549861398,"d1",12.1665546670556,1.40970702545298,2
0.0254313736222684,2,-1.24521542217279,-0.119287220034298,0.625913797060942,"d1",3.49854445963949,0.0254313736222684,2
5.83808202434836,1,-0.578403832247115,-0.112888224067282,0.262708993216398,"d1",13.8795710072452,5.83808202434836,1
6.60082031797962,1,-1.46939977515696,-0.104406161639182,0.338158444800253,"d1",17.2645219841198,6.60082031797962,1
0.117790273856372,2,-0.261344257340527,-0.0993180765045312,-1.18610183706866,"d1",17.3415739927542,0.117790273856372,2
2.16273942540821,1,-0.721897078426956,-0.0746452491488003,-1.12270409405886,"d1",14.0247517622476,2.16273942540821,1
0.0374332187223255,2,-0.492348529899591,-0.0740207812561484,-1.43891317872365,"d1",26.6852392061594,0.0374332187223255,2
5.0002440073125,1,-1.17422958458737,-0.0611967996743354,0.924747957649965,"d1",15.1820505589439,5.0002440073125,1
0.571775167714804,2,-1.71005056102592,-0.050562582643229,-1.27945291216992,"d1",12.6607749331743,0.571775167714804,2
6.65550057687453,1,-0.405884732342281,-0.0456498072713263,-0.357571968752414,"d1",3.69402457028627,3.69402457028627,0
0.857566208536637,2,-0.597174831778963,-0.0448578636565208,0.69300706154143,"d1",0.551790578173197,0.551790578173197,0
6.59222101830647,1,-0.274371806644722,-0.0359840523969918,-0.00026315814818347,"d1",17.4641290572546,6.59222101830647,1
0.67841577809304,2,-1.0772074617867,-0.0337208917027876,-0.403450657463133,"d1",35.4620265198832,0.67841577809304,2
0.668002340011299,2,-1.08545723440476,-0.0251063950207619,0.939654469893472,"d1",8.34927806630731,0.668002340011299,2
5.74339111739383,1,-0.04460856554122,-0.00835023844905028,-0.748071090622482,"d1",51.6425802160926,5.74339111739383,1
1.82126400425079,2,-0.0177826697978964,-0.00525648348828892,0.960240386660172,"d1",6.33178289048374,1.82126400425079,2
0.630121590569615,2,-0.374380456657173,-0.00283109908242781,-0.460421882711496,"d1",31.515871056219,0.630121590569615,2
1.62263065547043,2,-0.578858002631244,0.0217249885551602,-1.96126361796654,"d2",11.4491322916001,1.62263065547043,2
1.28221844159756,1,-0.393114588906499,0.0225499335063258,0.434198009477631,"d2",8.08907632716,1.28221844159756,1
0.0710073061028453,2,-0.361240550986893,0.0247397479896548,0.284171178928202,"d2",42.1896167036723,0.0710073061028453,2
2.1523897035229,2,-0.764435758530165,0.0272912914605349,-1.28327374747751,"d2",10.2206419493408,2.1523897035229,2
0.753091441865533,2,-1.19613901592276,0.0276235791587881,0.835647672647747,"d2",2.74232354527797,0.753091441865533,2
0.535127593551222,1,-0.576473388106182,0.035000668205451,-0.017356071098809,"d2",13.2582863140851,0.535127593551222,1
1.59197683363992,2,-0.625362092530586,0.0370275041807405,0.126384613081724,"d2",37.5318089128632,1.59197683363992,2
0.26349567654236,2,-0.290374267961153,0.0371321598830519,-0.513697391403867,"d2",2.80140158938636,0.26349567654236,2
0.867308566107245,2,-1.95768667669643,0.0375659571563162,-0.634722892905126,"d2",24.0328325322809,0.867308566107245,2
1.30410956147476,2,-0.762471841684381,0.0398737320545291,-0.872482297755538,"d2",22.1617450311126,1.30410956147476,2
1.4835222529382,2,-1.0358066572848,0.0501944975859606,-0.735009056303785,"d2",15.6004232159796,1.4835222529382,2
0.424044434532835,2,-0.476967266017635,0.050464990999201,-1.72141260365734,"d2",3.48480642773211,0.424044434532835,2
0.0915709753815865,2,-0.49692692996925,0.0573151067167399,-0.497970169498318,"d2",65.3296588327656,0.0915709753815865,2
1.51596810999106,2,-0.0770707331255256,0.0595677398533348,-1.92136075269802,"d2",79.3569109919381,1.51596810999106,2
0.398533509233927,1,-0.826839943477568,0.0682015537417207,-0.882775820710363,"d2",7.15256387429906,0.398533509233927,1
1.62587438911195,2,-0.245452415145027,0.068904786126836,-0.958155584397777,"d2",37.1642307547813,1.62587438911195,2
0.634364937897617,2,-1.50830408406202,0.0754547310552607,0.0973234366406274,"d2",5.67512247152905,0.634364937897617,2
0.711386162395278,2,-1.37503355669522,0.0770248811196285,-0.903993925010862,"d2",13.2279564812779,0.711386162395278,2
0.747886747492562,2,-0.283476358868049,0.0790833893495843,0.867533784826467,"d2",4.36639625579119,0.747886747492562,2
0.633273537163958,2,-0.866793185278675,0.0795548841871984,-0.800219422194315,"d2",3.86477720923722,0.633273537163958,2
0.0204741884312118,2,-0.023090344746053,0.0816820451255088,0.865940404164304,"d2",0.800363280481217,0.0204741884312118,2
0.809896258124635,2,-1.48811573495461,0.0868639459183109,-0.900670183447792,"d2",5.32053390517831,0.809896258124635,2
0.224963228745801,2,-0.615143621366165,0.104343235385161,-0.528253178308493,"d2",0.781445745378733,0.224963228745801,2
0.603945789213362,2,-0.902504927566528,0.108878805887301,-0.391791898161784,"d2",34.4152825247088,0.603945789213362,2
1.06525917474196,2,-0.407066520246661,0.109326641421494,-0.557445394177184,"d2",32.2371522580046,1.06525917474196,2
0.155089284692544,2,-0.420606469294957,0.109782326184036,-0.122495113916219,"d2",34.4508593512659,0.155089284692544,2
0.35317332376549,2,-2.5323142576937,0.120387488663856,0.636340699537245,"d2",5.94721422530711,0.35317332376549,2
1.50856900470565,1,-1.22695139353891,0.121946013509368,-0.408218272762679,"d2",18.801272283851,1.50856900470565,1
0.237881308813816,2,-1.07670556129965,0.145063596669344,0.261855912282463,"d2",0.747899413108826,0.237881308813816,2
0.416807783338289,2,-0.559334776653761,0.147863506690623,0.392412738069171,"d2",63.3123658563862,0.416807783338289,2
0.426968297199823,2,-0.979582410026887,0.152162838490286,-0.414045614621551,"d2",2.62846374884248,0.426968297199823,2
2.76032244439042,2,-0.154477550097877,0.152392990038237,-0.788371202318248,"d2",3.65458440035582,2.76032244439042,2
1.11870077438705,1,-0.599146592866972,0.157556834575242,-0.352337371318032,"d2",13.7063298560679,1.11870077438705,1
1.11279250104927,2,-2.09809697365531,0.158074370023265,-0.719280435970664,"d2",42.6600379420564,1.11279250104927,2
0.0776825762644314,2,-0.480261572212739,0.161272558399741,0.968965684973622,"d2",2.59143915743156,0.0776825762644314,2
0.489987619280431,1,-0.635686551578909,0.161944781152408,0.895820975927653,"d2",17.5853631297135,0.489987619280431,1
1.04343064643425,2,-0.149356505562529,0.164850514714938,0.297633428264352,"d2",10.1497511658818,1.04343064643425,2
0.376671124199688,2,-0.576339205353266,0.16794217688026,-0.449781393949157,"d2",5.56738465093076,0.376671124199688,2
0.19522811809624,2,-0.269372430183501,0.168369369174143,0.538178217480167,"d2",11.3334511779249,0.19522811809624,2
0.00393730867293355,2,-1.13342959760482,0.17212553858774,0.254573300555983,"d2",25.736616141254,0.00393730867293355,2
0.00487037384654395,2,-1.66001341838688,0.174606749949963,0.073886191607426,"d2",34.9265615252738,0.00487037384654395,2
1.80695842176759,1,-0.283551262821809,0.175514455770042,0.949342246098602,"d2",11.5669766161591,1.80695842176759,1
0.455824922091771,2,-0.144645421275756,0.178097522229174,-0.521022563712938,"d2",16.1112212165667,0.455824922091771,2
0.0746160078578386,2,-0.501953053166294,0.178353709926701,0.410891145994807,"d2",21.1762206434252,0.0746160078578386,2
0.542051810065195,2,-0.574392137684709,0.207877118164282,-1.02410290164159,"d2",28.1358632801061,0.542051810065195,2
0.667051993378265,2,-1.01160555863319,0.212807815139801,-0.66732415300705,"d2",23.3078352507629,0.667051993378265,2
0.464077745170919,2,-1.22191628806067,0.217151436734035,0.542117095355253,"d2",1.25699988387794,0.464077745170919,2
0.188328571210729,2,-1.24833410531118,0.217843836439306,-0.418763900432543,"d2",26.9082405037227,0.188328571210729,2
0.109984107801926,2,-1.12971146599918,0.232712244585027,-0.654627515184759,"d2",12.7776817884296,0.109984107801926,2
0.684764363403859,2,-0.491011598609,0.244209731015568,0.302834972546819,"d2",17.4576880215647,0.684764363403859,2
0.158563602787365,2,-0.165604515383408,0.249030026190664,-0.127773547814587,"d2",33.2413780299907,0.158563602787365,2
0.0219640541592192,2,-1.3067579864696,0.249909196820699,-0.433446637034466,"d2",10.5031970422715,0.0219640541592192,2
0.50925306111601,2,-0.61955970532787,0.254657080408966,-1.61635114653478,"d2",6.01476361975074,0.50925306111601,2
1.50096565631731,2,-0.711114087116904,0.257327019177981,-0.773550689281178,"d2",5.95401277152274,1.50096565631731,2
1.36486072091309,2,-1.46404140252043,0.263358662945559,-3.1438059305269,"d2",21.8958537830951,1.36486072091309,2
0.390309073876718,2,-0.840746132854337,0.263728700596104,0.562366476526802,"d2",68.2684893872509,0.390309073876718,2
0.679795922646958,2,-0.236776446532667,0.278518245851649,-1.49230330163869,"d2",3.9876926317811,0.679795922646958,2
0.724527445958358,2,-1.14697584689703,0.282593193012178,-0.885124173023745,"d2",3.45512878149748,0.724527445958358,2
0.770066255889734,2,-1.21732980536083,0.284787357143001,0.255004208623053,"d2",36.792803405035,0.770066255889734,2
0.46613123849456,2,-0.119226561525818,0.289592872297724,0.167523195535134,"d2",0.358355776726436,0.358355776726436,0
2.22814567740949,2,-1.01775117085296,0.322546787489202,-0.106281524616066,"d2",61.7748028006325,2.22814567740949,2
0.0844876296513269,2,-0.408227089927771,0.323994820815029,0.355693406349296,"d2",58.4905307409627,0.0844876296513269,2
0.975371115075574,2,-0.970005476960108,0.327344824748461,-0.381834780102756,"d2",3.19861772006316,0.975371115075574,2
1.27420084308242,2,-1.163148737653,0.327346149098577,-0.502271963277872,"d2",8.52371971277834,1.27420084308242,2
1.11351881283745,2,-0.636724652658768,0.335991410094823,0.500814112962396,"d2",10.5844404920936,1.11351881283745,2
0.643438751809849,2,-0.543988665190268,0.350366972506996,-0.691758619519765,"d2",5.08866863325238,0.643438751809849,2
0.0822662131233913,2,-0.894686363777382,0.354365713414602,-0.279153989865185,"d2",1.81503525003791,0.0822662131233913,2
2.02889611975621,2,-0.570161716639006,0.358293933194602,-0.550076376216918,"d2",22.8790422706845,2.02889611975621,2
0.392365154875429,2,-0.342008685772426,0.359569267678778,-0.271785377711678,"d2",20.7963954927341,0.392365154875429,2
1.31887461603156,1,-1.16347118158703,0.360191579747997,-0.0722309406630147,"d2",21.2704490178422,1.31887461603156,1
1.50905049448219,2,-0.659341916939053,0.362644409133353,0.684459952719281,"d2",13.9709756388736,1.50905049448219,2
3.15747903836754,2,-1.73840648591533,0.366406670280074,-0.298575326171553,"d2",37.2580288333778,3.15747903836754,2
1.39137796913695,2,-0.412864641872336,0.378992297378,0.445693849903093,"d2",12.6039244420826,1.39137796913695,2
1.00970436849354,2,-0.395082096738527,0.382010262648326,-1.28852719898889,"d2",17.5538274264874,1.00970436849354,2
1.70669165340187,2,-0.270190960772896,0.391282234678308,0.930805801930924,"d2",5.77591234548557,1.70669165340187,2
0.521773378678778,2,-0.126036476956779,0.39614040521448,0.665443358318428,"d2",27.6069133161547,0.521773378678778,2
0.606416514476558,2,-1.025136908893,0.396581238292746,-1.67451392995307,"d2",11.6030932001657,0.606416514476558,2
0.490568188109911,2,-0.749298579102425,0.411480978576853,-0.205434450059756,"d2",155.825299797651,0.490568188109911,2
0.140466598799784,2,-1.26281148323805,0.414323993148583,0.388015149194928,"d2",24.8703219360652,0.140466598799784,2
1.63550901332397,2,-0.806779130243142,0.417115948593644,-0.0658789043484457,"d2",23.8971231124344,1.63550901332397,2
0.75374593547446,2,-0.567522013121231,0.417594817175236,0.188837679351814,"d2",16.54752952894,0.75374593547446,2
0.152153590227425,2,-0.765818787426703,0.418522708402147,0.00731752166317815,"d2",6.28146065399051,0.152153590227425,2
1.15987459540589,2,-0.121346489868558,0.424349849151581,0.240793818846837,"d2",58.639344271637,1.15987459540589,2
1.49188357490541,2,-0.251981116796632,0.426723153204208,0.37391096516771,"d2",17.2055481662561,1.49188357490541,2
0.465849839327852,2,-0.505358915271077,0.426868714871196,-0.0839968519859277,"d2",11.1470808833838,0.465849839327852,2
0.514377606102378,2,-1.48435944511628,0.43823921711183,-0.270398122330151,"d2",2.83134931698442,0.514377606102378,2
1.37083819437581,2,-0.942850848323754,0.43845089029677,-0.640576204026827,"d2",6.56377174891531,1.37083819437581,2
0.604730482549567,2,-0.342686014810829,0.440428555800003,-0.585647349713446,"d2",58.1326644088993,0.604730482549567,2
2.38162830860741,2,-0.0509251423442782,0.449250562133414,0.0153383773617419,"d2",5.86805497296154,2.38162830860741,2
0.936987707937162,1,-1.27016523546516,0.451870143183855,0.6288446859123,"d2",29.1486597440213,0.936987707937162,1
1.3514202925692,2,-0.231514029465654,0.472412528112696,0.864892542845737,"d2",13.3516124635935,1.3514202925692,2
0.44545424739223,2,-0.537603264715137,0.485484972481348,-1.37162073165871,"d2",16.7040145016255,0.44545424739223,2
0.37038505214194,2,-1.33992208021174,0.499363224209327,-2.22822062828528,"d2",31.4321481792216,0.37038505214194,2
0.00743040960429768,2,-0.827233773203637,0.501657410834819,0.600360386941691,"d2",4.68624860048294,0.00743040960429768,2
1.06928769540851,2,-1.79826966860824,0.511859081350625,-1.61509343921743,"d2",12.4147091992199,1.06928769540851,2
0.398101279346337,2,-1.10775714804814,0.529026255873108,-0.181986138084938,"d2",13.129425290972,0.398101279346337,2
1.14000506048611,2,-1.79765382194691,0.529220720193775,0.830035376518184,"d2",37.8915428725963,1.14000506048611,2
1.10912364066992,2,-1.04433825797855,0.539416179060379,-2.05046671465067,"d2",12.9112015850842,1.10912364066992,2
0.218780244008344,2,-0.608675711931701,0.548163722585798,-2.47352322276342,"d2",8.54718699119985,0.218780244008344,2
0.850581004469453,1,-0.447511052245895,0.564801210678692,-1.81442820691436,"d2",2.26566986408528,0.850581004469453,1
0.855666513631384,2,-2.13818244511402,0.62622330607782,-0.388154860024151,"d2",12.8540292102844,0.855666513631384,2
2.1856308540942,2,-0.78196374129668,0.643926759205068,-2.26966417409628,"d2",12.1851485967636,2.1856308540942,2
2.21783935658177,2,-0.651277743851512,0.64437711493386,-0.0628370633467478,"d2",4.7361337672919,2.21783935658177,2
2.66605038493913,1,-0.90754497972906,0.644821644027934,-1.79315275911764,"d2",15.0149627067721,2.66605038493913,1
0.602170499269422,2,-2.08283603059158,0.653338636167427,-0.0559950805249862,"d2",88.3255479434386,0.602170499269422,2
0.505554509814011,2,-0.6209353607903,0.653553876086565,-1.46860814520335,"d2",28.7516077591066,0.505554509814011,2
0.0686638595708569,2,-0.735071648729763,0.658458711046142,-0.902171510168721,"d2",20.3378800666871,0.0686638595708569,2
1.23363737636628,2,-0.229141299074559,0.667769735492015,0.44426138711264,"d2",9.60924427956343,1.23363737636628,2
0.734908695593717,2,-1.41643377648938,0.669102178169292,-0.363069784243584,"d2",1.13766871584323,0.734908695593717,2
0.785797862992444,2,-0.707289099921422,0.670700320212791,-1.84705478809774,"d2",17.5849492839518,0.785797862992444,2
0.0647379571435017,1,-1.46772218558662,0.676996341328256,0.423122436127203,"d2",20.9062523386421,0.0647379571435017,1
0.68067476095048,2,-0.144366524893493,0.681225512127279,0.185094647980252,"d2",2.83637944067913,0.68067476095048,2
0.496110307056098,2,-1.73561627917223,0.686181929261749,-0.896920673717545,"d2",27.1116044177654,0.496110307056098,2
0.828971303610886,2,-0.0481468628741855,0.686343525508891,-1.3065311825373,"d2",11.7226412612945,0.828971303610886,2
0.728124357404708,1,-1.40907499558226,0.688215933035988,-0.13602418646648,"d2",6.16357510909438,0.728124357404708,1
1.74627794500434,1,-0.519287834824023,0.696344750633333,-1.16053542404109,"d2",3.98310596621714,1.74627794500434,1
0.860169175773096,2,-1.12966715232129,0.707692044116363,0.449294456826711,"d2",16.1259185886922,0.860169175773096,2
1.74960246903603,2,-1.15241420864627,0.708376912244165,0.0945302458165274,"d2",9.05113011598587,1.74960246903603,2
0.620163383728912,2,-1.14485810944178,0.720578241579318,0.298376377809392,"d2",14.7201306232412,0.620163383728912,2
0.599121518218681,2,-0.491805256281995,0.720845357405082,0.170067978878183,"d2",2.1413634903729,0.599121518218681,2
0.258023886584911,2,-1.02468964249271,0.721904053264548,0.379341452116645,"d2",18.6108343853595,0.258023886584911,2
0.713235444755807,2,-1.85268576462046,0.754783125581337,0.229541809119566,"d2",52.7147463311381,0.713235444755807,2
1.3715883817522,2,-0.00951542871598267,0.755490788646641,-0.541187999043309,"d2",9.76649975404143,1.3715883817522,2
0.139136541050377,2,-0.750398305804971,0.763985280222561,-0.905800470925745,"d2",7.22360649158305,0.139136541050377,2
1.17117458340716,2,-1.86969806844165,0.779844507943365,-0.531280066778365,"d2",44.2495981951184,1.17117458340716,2
0.528802586233419,2,-0.638218227996248,0.78095837107841,0.71170837351234,"d2",4.09247838892043,0.528802586233419,2
15.9859128030783,1,-1.2749751848768,0.78885308243751,-2.37102557429026,"d2",33.3947736008053,15.9859128030783,1
0.947866507167075,2,-0.377359616856185,0.790658665799771,-0.334371628832217,"d2",9.29856486618519,0.947866507167075,2
0.645793883967361,2,-0.79224673672974,0.806751269297997,0.976406365543615,"d2",3.24837939813733,0.645793883967361,2
0.310585423733822,2,-1.70916007971169,0.816935090855232,-1.36958432701944,"d2",27.4510624065044,0.310585423733822,2
0.15098664696988,2,-0.621545910178871,0.828175732552656,-0.120092052906879,"d2",3.77097046934068,0.15098664696988,2
1.39545865987322,2,-0.747841520418587,0.828358539607091,-0.121822404009773,"d2",6.38166908174753,1.39545865987322,2
1.00432200867913,1,-1.07312835757515,0.84246881482389,0.6658920107911,"d2",12.654183935374,1.00432200867913,1
0.376164471434408,2,-2.25749718255237,0.84686090594898,0.266513619424984,"d2",11.8262910097837,0.376164471434408,2
0.92439962637748,2,-1.44275553582813,0.849469933628588,-0.799393627980222,"d2",25.2566761887612,0.92439962637748,2
1.13734706267193,2,-0.214552486616779,0.86043447751587,-0.788632070223352,"d2",96.7150012353316,1.13734706267193,2
0.417856744430816,2,-1.36994217513601,0.87504929650462,-0.072642473860285,"d2",19.9988145375184,0.417856744430816,2
3.06296380306078,1,-0.907777416890521,0.879349192041277,-1.85621448262524,"d2",31.4180718567303,3.06296380306078,1
0.609549967783587,2,-0.353895924710764,0.879649581240305,-2.43899018491939,"d2",37.7075326700159,0.609549967783587,2
0.391106392937812,2,-0.00929502924538058,0.880112808863805,0.3641208320035,"d2",33.2838974755602,0.391106392937812,2
0.0391002649473239,2,-0.119265636313351,0.903543923361854,-0.753988528524269,"d2",0.074649417946016,0.0391002649473239,2
0.217673076954315,2,-0.991402236503461,0.927085095261113,-0.890088923311745,"d2",4.94580941274762,0.217673076954315,2
0.912286231172002,2,-0.651751020375463,0.927563064724242,-0.255980255052049,"d2",26.9876665241065,0.912286231172002,2
1.26422408098703,2,-1.59316198562629,0.955864860410794,-2.37511039436268,"d2",35.97322165798,1.26422408098703,2
1.63798303075128,2,-0.944833506303253,0.957101283177756,0.107430927154945,"d2",8.76808514818549,1.63798303075128,2
0.520085684978681,2,-1.93689648029229,0.960343687869681,-0.946446488528295,"d2",5.41821549126738,0.520085684978681,2
0.0333522793002843,2,-0.406190415949957,0.974426310386208,-1.53532871882733,"d2",58.581854101635,0.0333522793002843,2
0.52810010882123,2,-0.90366523639987,0.974877895389415,-0.0109691290904899,"d2",13.2324086781591,0.52810010882123,2
0.175571716815793,2,-0.176394854786988,0.980980607940724,-0.0489264288249495,"d2",31.9512213749771,0.175571716815793,2
0.529129727523435,2,-0.460396849812602,1.00094544353244,0.0662567586728054,"d2",1.88688070816757,0.529129727523435,2
0.635567780011985,2,-0.76378882780698,1.00548327862127,0.423635270489904,"d2",42.4910559852548,0.635567780011985,2
0.724904238278035,2,-0.907731768318047,1.00997063287553,0.538120581968774,"d2",36.0503575561528,0.724904238278035,2
0.427629964225869,2,-1.56216126296095,1.01814611378071,-0.406674803306843,"d2",4.87516235560179,0.427629964225869,2
0.161767293068696,2,-0.759473242254803,1.03657414400826,-0.977169880121158,"d2",48.7263685067124,0.161767293068696,2
0.962126138834229,2,-0.56522171831491,1.05103830138578,-1.28735495414437,"d2",24.6044033012333,0.962126138834229,2
0.448703828522713,2,-1.18508690906293,1.05794340357344,0.209893612875558,"d2",3.6171385717943,0.448703828522713,2
2.29539588387135,2,-0.809591453713195,1.06264984735446,0.708970715100883,"d2",26.6586700818482,2.29539588387135,2
0.690530526497498,2,-0.0267186723123176,1.0874311425292,-2.2279377944802,"d2",9.77258295752108,0.690530526497498,2
0.472309753498816,1,-0.359882797031715,1.09786284055163,-0.288753197637377,"d2",81.2945778253389,0.472309753498816,1
2.45214804477456,2,-0.21394029294774,1.13245244560219,0.514170048915875,"d2",24.8033722109141,2.45214804477456,2
1.51453100008048,2,-0.376904852999008,1.137094128323,-0.769574027523774,"d2",31.9085638580804,1.51453100008048,2
0.066087403612231,2,-1.01366783097158,1.14325704429475,0.0122662871490449,"d2",12.2102071903646,0.066087403612231,2
2.27292557190558,2,-0.0613559687217213,1.15519370818209,0.206926829454031,"d2",13.3934736810625,2.27292557190558,2
1.06101613204515,2,-1.08125475011268,1.15700722981978,-0.834547675087852,"d2",20.7887781775537,1.06101613204515,2
1.29171527471949,2,-0.258163275873147,1.1571947075309,-0.343581741444281,"d2",13.2905606180429,1.29171527471949,2
0.483420974791873,2,-0.247429099416824,1.18148342053382,0.666408548662519,"d2",27.3468879788163,0.483420974791873,2
1.65322850434042,2,-0.618187508699168,1.20227668160115,-1.06876108987557,"d2",20.4747169642689,1.65322850434042,2
1.25885674652328,2,-1.62801150855676,1.21660132215862,-1.27052258001484,"d2",0.0653019081801176,0.0653019081801176,0
1.38317749248244,2,-0.412779168242635,1.2257839632566,-0.471509027445123,"d2",14.3918521018565,1.38317749248244,2
0.29090056781615,2,-0.941711982878097,1.2452650785948,-1.13282683720939,"d2",33.3252260397076,0.29090056781615,2
0.774384089212772,2,-0.821733976245432,1.24763858736497,0.215567163048395,"d2",15.7909392505371,0.774384089212772,2
0.426550949391251,2,-0.613863471405316,1.26633615701241,-1.21869528367914,"d2",1.34932232089341,0.426550949391251,2
2.16897273189479,2,-0.595914050488664,1.27706728920149,-1.74397046871294,"d2",7.73399090394378,2.16897273189479,2
0.60714584775794,2,-0.732737873358977,1.27761478426247,0.00948414982453159,"d2",6.53633067384362,0.60714584775794,2
0.928060938574253,2,-0.0593950423195912,1.30184730656887,0.269582930706893,"d2",16.8946285537424,0.928060938574253,2
0.0652448540805098,2,-0.376171738015478,1.30902526364196,-2.2509856641888,"d2",34.4706994940756,0.0652448540805098,2
0.290682706395645,2,-0.748192811516037,1.32500142107158,0.733254357772467,"d2",99.2230615333514,0.290682706395645,2
0.099562649791565,2,-0.0646000063702595,1.33398179591883,0.271531892777113,"d2",1.23980532934852,0.099562649791565,2
0.21834724290433,2,-1.63793111804505,1.33912858503736,-0.43680375689659,"d2",31.7336872575765,0.21834724290433,2
0.355890267642353,2,-0.423946587126264,1.3856925052704,-0.276827203788486,"d2",7.60781746505117,0.355890267642353,2
0.640673603062046,2,-0.186450402973362,1.39835032773893,-0.173427024327545,"d2",47.3483018924422,0.640673603062046,2
1.48656976140796,2,-0.91541184985219,1.39989832103014,-0.992620752809943,"d2",7.52968023531139,1.48656976140796,2
1.65555322752278,1,-0.485881634025376,1.41117763150536,-0.726434134251611,"d2",65.2425061132679,1.65555322752278,1
1.19084622251781,2,-0.41575087352391,1.41304076324206,-0.89595965520797,"d2",35.4190194217448,1.19084622251781,2
0.743826687228459,2,-0.486520668561888,1.41541061022267,0.0601947005008747,"d2",25.9400983705165,0.743826687228459,2
0.80674393638146,2,-0.0583341820790928,1.42216295944444,0.0544646255026132,"d2",49.9927782614656,0.80674393638146,2
0.531679737743372,2,-0.276771009359284,1.43140802191472,0.316807326856949,"d2",31.8341349421029,0.531679737743372,2
0.946712639709247,1,-0.751586796242839,1.44325281817539,-0.228361206575733,"d2",0.967175701785795,0.946712639709247,1
0.0102507216148591,2,-0.697153420063897,1.45011924808629,-0.1735760078557,"d2",50.4439213474221,0.0102507216148591,2
0.97816637578579,2,-0.623542054555381,1.45326936864526,-1.04309452819424,"d2",0.221857391297817,0.221857391297817,0
1.55592279163702,2,-0.176217002127984,1.49113258501544,-1.56410714129628,"d2",8.67591893300414,1.55592279163702,2
0.436696810447691,2,-0.30260459699746,1.5548796741216,0.26223027233537,"d2",2.5096242376164,0.436696810447691,2
1.56011947543939,2,-0.171702067200568,1.55615864606286,-0.00103340896897324,"d2",28.8497183082585,1.56011947543939,2
0.041023977490151,2,-0.213494343986504,1.56225642569261,-0.367845350238968,"d2",10.8403069991618,0.041023977490151,2
0.592072764055101,2,-0.143230072021797,1.56526082666509,-0.438323140711413,"d2",4.36732348054647,0.592072764055101,2
1.29752014338006,2,-0.181245337921119,1.56600498772284,0.0982090925685866,"d2",8.29938241280615,1.29752014338006,2
0.769091140462859,2,-1.04979902287923,1.652798333173,0.598218868632103,"d2",18.5340986682841,0.769091140462859,2
0.614095462763319,2,-0.129243968919267,1.66882377416187,-0.553767152997795,"d2",9.75808587856591,0.614095462763319,2
0.677081263269833,2,-0.461186220906231,1.68233756841276,-0.108397961050149,"d2",24.5852781451287,0.677081263269833,2
0.167651205068143,2,-0.215571372145331,1.68370200482687,0.905971152345377,"d2",28.9677151275759,0.167651205068143,2
0.760640574623506,2,-0.185659053672513,1.74441351026884,-0.290411394614044,"d2",3.6788512673229,0.760640574623506,2
1.57059571330668,2,-0.00378045852779645,1.75199514594482,0.37518745697901,"d2",36.5044529346709,1.57059571330668,2
1.22039732425317,2,-0.0409784974877476,1.8128663242746,0.518983973724044,"d2",8.14542844891548,1.22039732425317,2
0.357746726203608,2,-1.13221511533544,1.82140525789747,-1.12823713903409,"d2",2.84647900611162,0.357746726203608,2
0.506598376895596,2,-1.58623419714671,1.84630386483031,-0.871164001707083,"d2",7.05219495933504,0.506598376895596,2
0.555298311726655,2,-0.653122290105271,1.87980904893923,0.601692658871586,"d2",10.4217884922989,0.555298311726655,2
0.0497472713166745,2,-0.803414420619709,1.92869213509968,0.566759572983138,"d2",46.8863080789275,0.0497472713166745,2
0.63588913711856,2,-1.55312674896571,1.9812307225371,-0.394362125613719,"d2",59.6746130358048,0.63588913711856,2
0.344136944209492,2,-1.55011818795769,2.01308796757131,-1.10441392716533,"d2",3.32158831130657,0.344136944209492,2
0.209930101087071,1,-0.17610319662441,2.04536354395301,-1.78388719927807,"d2",8.9971761777997,0.209930101087071,1
1.96273178822442,2,-0.265413985422845,2.06717373344592,-1.5328302296829,"d2",6.70106924138963,1.96273178822442,2
2.04208174814171,1,-1.20512563890975,2.17895259106906,0.463208094098719,"d2",24.6128874616159,2.04208174814171,1
0.45294046876816,2,-0.220655663734128,2.18192023375661,0.0811841371808765,"d2",6.26351648010314,0.45294046876816,2
1.68808336321915,2,-1.22492300639913,2.23292584390155,-0.69860353230613,"d2",79.5212812307191,1.68808336321915,2
0.0830509647238433,2,-1.14387765956049,2.25144851755798,-0.782665324462104,"d2",4.72283883020282,0.0830509647238433,2
0.392520671541139,2,-1.2204528537223,2.36374387346593,-1.79745435930711,"d2",0.827889424914617,0.392520671541139,2
0.0423196883561676,2,-0.0824960908690546,2.46865766977258,-0.275587719866787,"d2",10.8342845924199,0.0423196883561676,2
1.15467347169962,2,-1.61238280333006,2.53930227266609,-0.214709061234683,"d2",5.75399165041745,1.15467347169962,2
1.29154389139611,2,-1.05643444903253,2.55910612622809,-0.505822986209181,"d2",3.11781542375684,1.29154389139611,2
1.84823913917143,2,-1.32857310285023,2.62141379782439,-0.935292083483808,"d2",11.9421542808414,1.84823913917143,2
1.82018302820833,2,-0.79030173881793,2.68172397486784,0.733114954575729,"d2",1.74682558514178,1.74682558514178,0
0.531491206830686,2,-0.680665424931255,2.78232400978012,0.646038105645267,"d2",16.607096281721,0.531491206830686,2
1.24968905194214,2,-1.14050466415036,3.00307107062192,0.253293764911859,"d2",2.94403710469961,1.24968905194214,2
0.263627831636059,1,-1.58535429653281,3.10991648674058,0.688555636490684,"d2",10.3094351757318,0.263627831636059,1
1 T J x1 x2 x3 set C u delta
2 0.499867362999948 2 -1.95019832240832 -2.60627899155475 0.263872418621638 d1 78.1147597315622 0.499867362999948 2
3 0.411483192351542 2 -0.335587884128994 -2.59271420987147 -1.13466609937628 d1 17.0940970062258 0.411483192351542 2
4 6.26589199230665 1 -1.54140235787167 -2.30006437514968 0.233748690841754 d1 25.4117258257213 6.26589199230665 1
5 5.51302082790179 1 -2.14735528739845 -2.20493452952125 -0.00149264459250339 d1 21.1466883780434 5.51302082790179 1
6 0.589132356923074 2 -0.504171648695752 -2.12406874197516 0.966489874835643 d1 63.6942574348221 0.589132356923074 2
7 0.100430077962303 2 -0.690743614142311 -2.11417284528098 -0.462855490815159 d1 1.99340037070215 0.100430077962303 2
8 2.78052458150272 2 -0.551926772252824 -2.09000455633969 -0.177623152985041 d1 30.9898108972197 2.78052458150272 2
9 0.362287234184209 2 -0.115697384278896 -2.07978204758821 -0.637623319390929 d1 39.3571070564871 0.362287234184209 2
10 0.0379365109838545 2 -2.35088503668122 -2.06709410300666 0.829087459518316 d1 19.5599143943729 0.0379365109838545 2
11 0.030014815274626 2 -0.158798650966454 -2.05890835303292 -0.462039828875565 d1 1.57979466716853 0.030014815274626 2
12 5.47108585297847 1 -0.62692030358575 -2.02055602810388 0.444819057512709 d1 10.4432902485132 5.47108585297847 1
13 3.19113383128197 1 -1.00870532301789 -1.99366184170529 0.36597640035569 d1 6.42029091715813 3.19113383128197 1
14 7.01919485280539 1 -1.43655112723172 -1.95287956158818 -0.74781769436591 d1 29.2763396335726 7.01919485280539 1
15 5.6207995602991 1 -1.72940999679298 -1.880860671279 0.865723067991154 d1 7.21366209874041 5.6207995602991 1
16 2.35006319160078 2 -1.56730398966994 -1.87987513761127 -0.100405585728897 d1 103.798832333753 2.35006319160078 2
17 0.655913021415472 2 -0.381072772266333 -1.83726471030277 -1.91183811668422 d1 47.9379538793988 0.655913021415472 2
18 4.60259209920592 2 -0.447638765302678 -1.78988532702524 0.609071625258388 d1 2.60597240030185 2.60597240030185 0
19 5.82985093311453 1 -0.454478759553709 -1.77988775292904 -0.951380467801523 d1 11.8871257267892 5.82985093311453 1
20 4.00551166178143 2 -0.169952711026236 -1.77577954156175 -0.0743184050913884 d1 4.01423139072942 4.00551166178143 2
21 0.770518803927016 2 -0.217358259412447 -1.76478931337377 0.925995782542218 d1 27.4441876254025 0.770518803927016 2
22 1.464766157707 2 -0.907513823100056 -1.75462814010361 0.0618782092551372 d1 7.28319086134434 1.464766157707 2
23 5.85581386372292 1 -0.408218830092499 -1.7351551622775 -1.30565834762586 d1 20.3997039211172 5.85581386372292 1
24 0.627003119327128 2 -0.490915399276648 -1.7130888915695 -0.701850720754584 d1 0.0501011684536934 0.0501011684536934 0
25 5.28130548623981 1 -0.44820545440036 -1.67845567328654 -0.352553421039791 d1 11.5045715961605 5.28130548623981 1
26 1.07525985218109 2 -1.19338720662916 -1.66337144479934 0.796645773274118 d1 59.376008582585 1.07525985218109 2
27 6.54756452824936 1 -1.16617815904908 -1.63820855004219 -1.157168326241 d1 53.0357338090367 6.54756452824936 1
28 0.111345880643449 2 -0.78711928337837 -1.60644550943024 -2.24275122811157 d1 3.74917807608269 0.111345880643449 2
29 0.451999953016639 2 -0.812418624513425 -1.55229147176324 -0.349728885283845 d1 20.7824087638621 0.451999953016639 2
30 0.66187332617119 2 -0.508034279805 -1.53046688766278 -0.125548243031678 d1 1.05018629103254 0.66187332617119 2
31 0.615669948980212 2 -0.883736989422782 -1.5182885181224 -2.17546487280826 d1 2.50971530564129 0.615669948980212 2
32 4.59409849090741 1 -0.463742158823814 -1.51482036685259 -0.128794669558068 d1 5.21418055519462 4.59409849090741 1
33 1.70998832202497 2 -0.435222341947856 -1.46629935512921 0.366128738801027 d1 22.9905674225631 1.70998832202497 2
34 0.16477278387174 2 -0.158962000535981 -1.42734602325756 0.7814198196256 d1 2.67401527323018 0.16477278387174 2
35 2.69938570062134 2 -1.32872703004022 -1.42130869029821 0.348507166757712 d1 8.26423623237792 2.69938570062134 2
36 0.36591454860851 2 -0.272697388869142 -1.41996949576558 -1.09564014616258 d1 6.61146112717688 0.36591454860851 2
37 0.353021066088114 2 -0.705605038212206 -1.40316187616988 0.765560773782534 d1 8.0167396645993 0.353021066088114 2
38 6.06766719635048 1 -1.55037485195067 -1.34567809527089 -0.760841361837919 d1 1.09786237904911 1.09786237904911 0
39 0.644815232139081 2 -1.15963532979715 -1.31896146330714 -0.549007768600895 d1 31.0450109077578 0.644815232139081 2
40 1.07542936220289 2 -0.778554847469194 -1.30054996528693 -1.04023868273514 d1 25.8691836140099 1.07542936220289 2
41 0.25507666592619 2 -2.10743065316308 -1.28781900130437 -1.16449794284244 d1 2.4481005128473 0.25507666592619 2
42 4.22979112319602 1 -0.846428182531737 -1.27060985892563 -1.08205947085447 d1 40.1862035302405 4.22979112319602 1
43 1.54102904713693 2 -0.548921604883928 -1.26747682520373 0.269373223479816 d1 7.15302918106318 1.54102904713693 2
44 5.69764774521504 1 -0.334010020049075 -1.25874497163495 -0.0938705365567017 d1 34.0617424678587 5.69764774521504 1
45 3.6253245340717 1 -2.06010942376809 -1.25629035083821 0.064109659520042 d1 4.88388891331851 3.6253245340717 1
46 4.26293430757702 2 -1.32110118545274 -1.23852335684901 0.60335439407922 d1 8.21151600219309 4.26293430757702 2
47 5.71672319925689 1 -0.263168026690344 -1.22173402907403 -1.71587984337502 d1 16.940669081265 5.71672319925689 1
48 5.55431417646415 1 -0.447206372965553 -1.21303905186392 0.115815130048467 d1 15.2463490135016 5.55431417646415 1
49 1.2009382713166 2 -1.14899977428392 -1.20463083041379 -1.14429497936915 d1 23.6061829878929 1.2009382713166 2
50 6.79536680010782 1 -0.0111679873537602 -1.19546465375587 0.309993712292912 d1 66.1284001137982 6.79536680010782 1
51 2.46331876317475 2 -0.482701087662075 -1.1481795630697 -1.41455158117126 d1 12.5331542361528 2.46331876317475 2
52 4.07894908429539 2 -1.45510635149798 -1.14384314965535 0.808902319926509 d1 1.44096298856773 1.44096298856773 0
53 0.261695730034262 2 -0.943270301982324 -1.13748423127889 0.158355281672531 d1 43.8340519384141 0.261695730034262 2
54 4.81273439537871 1 -2.88793714208826 -1.13647240113562 0.0733609481714206 d1 36.9158127142077 4.81273439537871 1
55 0.230829819571227 2 -0.993323732615054 -1.13619235403737 0.63867136636673 d1 24.4872925794663 0.230829819571227 2
56 6.73293879458427 1 -0.296846101197127 -1.1340541598207 0.844698804524038 d1 7.46175810694695 6.73293879458427 1
57 0.168945440556854 2 -0.380773376847431 -1.13128996081587 0.900395196575448 d1 2.01092992909253 0.168945440556854 2
58 5.98011658047727 1 -0.318535890192892 -1.12903745621652 -0.449817470400936 d1 3.46174228005111 3.46174228005111 0
59 1.22577496986361 2 -1.7200511170872 -1.12831840181859 -0.273148385437603 d1 33.532725049365 1.22577496986361 2
60 0.0767893493175507 2 -0.461947633140275 -1.12825500347247 -0.558084112128901 d1 13.0636250879616 0.0767893493175507 2
61 1.39937541069556 2 -0.110885121668419 -1.11643165391362 0.364029349051793 d1 1.39057802201063 1.39057802201063 0
62 0.588528974447399 2 -1.00125994464178 -1.11548212705522 0.649809263983229 d1 21.9685837335854 0.588528974447399 2
63 2.602702756643 1 -0.220756378655706 -1.10142892192176 -0.178398683362156 d1 15.1814339860323 2.602702756643 1
64 0.107345493510365 2 -0.136424653945802 -1.08620427671388 -1.26310084972045 d1 2.84996530041099 0.107345493510365 2
65 4.84797774579147 1 -2.640037363721 -1.07718527449055 0.126706475783981 d1 12.4836507998407 4.84797774579147 1
66 0.400475817371724 2 -0.108508550893446 -1.07292122840034 0.00148134837676338 d1 8.04725838098943 0.400475817371724 2
67 7.87069047922983 1 -1.07958210533537 -1.06862747193719 -0.662154443222777 d1 84.0155980685606 7.87069047922983 1
68 5.16738377891322 1 -1.43866435150085 -1.05722321366436 -0.674634964462416 d1 13.1439987290651 5.16738377891322 1
69 0.312620884738863 2 -0.54002631314478 -1.03355420146742 -0.927435593761941 d1 16.1636680881684 0.312620884738863 2
70 0.594797343946993 2 -0.523630694310136 -1.032829845164 -0.3600040754558 d1 6.55719876289368 0.594797343946993 2
71 1.58756684689763 2 -0.708585547888652 -1.0275777802401 -0.0560092163149688 d1 2.03709915644662 1.58756684689763 2
72 0.157633140797128 2 -0.46463235612396 -1.01851485235356 -0.38464297772038 d1 1.12309886419443 0.157633140797128 2
73 0.430044363252819 2 -0.365832672904036 -1.0139697548521 -0.198040491088858 d1 33.4787387384062 0.430044363252819 2
74 6.3440347051184 1 -1.17668749863083 -1.00058075158278 -0.0651331410262753 d1 23.426931534525 6.3440347051184 1
75 4.03709980150802 1 -0.248227727286613 -0.973934607681733 -1.12630658813714 d1 9.87860122695565 4.03709980150802 1
76 0.896409576158602 2 -0.127588856767946 -0.972359927470434 -1.22561091633034 d1 50.4587066978119 0.896409576158602 2
77 5.04397998161953 1 -1.74108063837017 -0.957323822479406 0.745863098569719 d1 10.5295320414007 5.04397998161953 1
78 3.85294361146361 1 -1.26750294431399 -0.94789344647265 0.831736527945425 d1 10.9185821376741 3.85294361146361 1
79 0.442006511877013 2 -0.354036914659923 -0.942780627326355 -0.363831505743131 d1 43.415603150887 0.442006511877013 2
80 0.232622205279768 2 -1.66241321442347 -0.924117138889276 -0.814930976394094 d1 1.5546501009788 0.232622205279768 2
81 0.747469336683762 2 -0.831949103513653 -0.914532892677964 -0.123845288295496 d1 4.54467300325632 0.747469336683762 2
82 4.1848791638863 1 -2.14543063227577 -0.911795115892639 0.916083249608967 d1 30.2966161302086 4.1848791638863 1
83 1.66416368167374 1 -0.145463778274721 -0.90074686050758 -0.564459630306043 d1 6.34306907272518 1.66416368167374 1
84 6.72130595897616 1 -0.763857738580545 -0.872310481790421 0.28360030698429 d1 6.98184758424759 6.72130595897616 1
85 0.421556759160012 2 -1.02907312310893 -0.868297987116183 -2.04164832864124 d1 22.1035440443995 0.421556759160012 2
86 0.415698179975152 2 -0.565088432517738 -0.865971805743903 0.489298810095688 d1 24.2157815015855 0.415698179975152 2
87 6.04006984027352 1 -1.80378631546711 -0.865947701381903 -2.45143317065972 d1 12.7496245224029 6.04006984027352 1
88 4.43406675993612 1 -1.10530784304803 -0.855162013689037 0.825965077039436 d1 12.3575822915882 4.43406675993612 1
89 6.60455671871596 1 -0.753543782190729 -0.853065417847988 0.911528068965907 d1 55.8949446644554 6.60455671871596 1
90 5.86430583830404 1 -0.119270069843969 -0.832012305781867 -0.123396917106593 d1 2.04369612969458 2.04369612969458 0
91 0.765395824861464 2 -0.756590051392957 -0.825870681405957 -1.09459501923616 d1 7.56691016256809 0.765395824861464 2
92 6.13062823509473 1 -0.404367354122395 -0.794123265422334 0.519397084421048 d1 6.57340552657843 6.13062823509473 1
93 1.36763089332254 2 -1.26507040921231 -0.785245756841697 -0.791402036345245 d1 3.11886790208519 1.36763089332254 2
94 2.42700778147439 2 -0.487188196151172 -0.766669594197886 0.410330957888797 d1 5.85054755210876 2.42700778147439 2
95 6.73991273889714 1 -0.184761116886234 -0.761522374617492 -0.532248648464166 d1 12.2256078850478 6.73991273889714 1
96 4.36141455710945 1 -0.105471206029084 -0.754424978552752 -0.956983188268582 d1 44.0004703749843 4.36141455710945 1
97 0.0148825589567423 2 -0.832577791659755 -0.750814042922674 0.594368798149314 d1 10.2718881517649 0.0148825589567423 2
98 2.03035983248594 2 -1.35008072739753 -0.739254017411324 -0.934537708298102 d1 6.93155937828124 2.03035983248594 2
99 0.323219427368838 2 -3.30164481425116 -0.737413330682173 0.158535050544275 d1 6.21096261776984 0.323219427368838 2
100 4.56057912025861 1 -1.74103151571216 -0.736136753174071 0.288649407044573 d1 62.3897792365322 4.56057912025861 1
101 5.1935752095808 1 -1.29643082121738 -0.735905168742066 -0.935752993561474 d1 5.09524474851787 5.09524474851787 0
102 3.86531025709069 2 -0.0636095105971832 -0.732886515689508 -0.814307779468899 d1 8.85476755909622 3.86531025709069 2
103 0.634098547976464 2 -0.170986777740401 -0.732247546425096 -0.246855951431236 d1 30.9612841089789 0.634098547976464 2
104 4.87612400835413 1 -0.102394565999977 -0.677771864546318 0.0275786348531762 d1 36.7549219137475 4.87612400835413 1
105 1.06079483773084 2 -0.0561619275905622 -0.662931426871597 0.730700839291824 d1 13.5279788542539 1.06079483773084 2
106 6.60489732026799 1 -0.679722503289936 -0.646491972989746 -0.294445508374441 d1 11.0387820657343 6.60489732026799 1
107 3.73370052556696 1 -1.33588231931319 -0.626542518485307 0.976264181983691 d1 34.0810245631223 3.73370052556696 1
108 0.215206013061106 2 -0.487402140919274 -0.622077838675401 -0.985499563550701 d1 12.1548983175308 0.215206013061106 2
109 0.0742700085614745 2 -2.14895712262163 -0.621501276239038 0.136788117565418 d1 8.04026352241635 0.0742700085614745 2
110 7.1008527322065 1 -0.440348488037497 -0.615830025512935 -2.19194484398512 d1 8.89550268650055 7.1008527322065 1
111 6.7471566122746 1 -0.481224832366081 -0.600951099333045 -0.480762211269973 d1 38.7437415106182 6.7471566122746 1
112 2.24482986132119 2 -0.217731228444547 -0.600578883093281 0.940056160419262 d1 20.6535042255166 2.24482986132119 2
113 7.50474685696234 1 -1.10367757209531 -0.577843231260005 -0.0138303662264709 d1 13.2619685679674 7.50474685696234 1
114 0.713865732194423 2 -1.21517626693504 -0.575358915832213 -0.728181360609758 d1 42.7921076222811 0.713865732194423 2
115 5.33264101467657 1 -0.0724806947018318 -0.563523809200885 -0.204717134353468 d1 0.187731010444536 0.187731010444536 0
116 6.8586275618804 1 -1.46591798681562 -0.540729342476426 -0.754580363544986 d1 20.3525460335558 6.8586275618804 1
117 5.81992253219201 1 -0.444983494178246 -0.531714523661177 -0.277171929560516 d1 6.38694288624484 5.81992253219201 1
118 3.7151160815995 1 -0.237257721084836 -0.527018720350226 0.642959786423278 d1 2.24223504598635 2.24223504598635 0
119 1.22530156649174 2 -0.635791390940521 -0.526483309231819 -2.1949047574972 d1 44.1750103582568 1.22530156649174 2
120 7.00373084336256 1 -0.20081259124862 -0.525865240188069 0.99733337346096 d1 9.77560072205961 7.00373084336256 1
121 7.46638813745472 1 -0.613414594619111 -0.522864801860655 -1.70505864369456 d1 1.32270062773303 1.32270062773303 0
122 0.0770264104939997 2 -0.170624607385686 -0.521560426585595 0.284753182059407 d1 3.57309073262642 0.0770264104939997 2
123 0.141067513730377 2 -0.81252818099109 -0.520882451714799 -1.02508871215029 d1 22.2968422240558 0.141067513730377 2
124 8.08000240358258 1 -0.0589302051711418 -0.520026414725689 -1.21999195799251 d1 6.38638902273251 6.38638902273251 0
125 0.65961842937395 2 -1.38673148781067 -0.513633600019186 0.85706365337255 d1 34.38266120683 0.65961842937395 2
126 0.32432593498379 2 -1.35781650273435 -0.512039227314512 -0.204715271838212 d1 13.1133704725653 0.32432593498379 2
127 0.576963331084698 2 -0.0457498417621635 -0.501686863705973 0.174835042489924 d1 31.1563714439857 0.576963331084698 2
128 4.75434525966485 1 -0.599919349345153 -0.495367089666113 0.604377261065303 d1 24.0383815979422 4.75434525966485 1
129 0.818759842712206 2 -0.0952013785990633 -0.494432211818882 -1.46694803898337 d1 16.0198312097289 0.818759842712206 2
130 4.90561182719959 1 -1.81492443726033 -0.487671608873654 -1.97555745670925 d1 33.5309124327051 4.90561182719959 1
131 3.63952218537657 2 -0.927798420893534 -0.481793161685171 0.270857399145853 d1 40.5118284730201 3.63952218537657 2
132 1.00702644694121 2 -0.739796432115704 -0.465562602228936 0.0793119855033039 d1 30.9101264396234 1.00702644694121 2
133 6.76971502879328 1 -0.638730432059152 -0.465503594160261 0.331249150958679 d1 20.2612976162674 6.76971502879328 1
134 6.59249465181477 1 -0.142211253824736 -0.461603677722249 -0.752128672509869 d1 26.7710029139164 6.59249465181477 1
135 2.805273024192 1 -0.133514709139844 -0.459588211605541 0.222501548058442 d1 1.4710845425725 1.4710845425725 0
136 1.24453746150703 2 -1.67404168511301 -0.457658559466724 -2.94999228204974 d1 0.0318882730873944 0.0318882730873944 0
137 0.502410726577924 2 -0.198465011915808 -0.44726347609141 -1.01351429027039 d1 19.663324690515 0.502410726577924 2
138 6.25768367946802 1 -0.499300428082239 -0.433624573557182 0.772259655809996 d1 16.2063858835938 6.25768367946802 1
139 4.45243678390236 1 -2.27994890407291 -0.432600267100338 -0.192874202113765 d1 16.1783087803962 4.45243678390236 1
140 5.3456110942715 1 -0.0728341072992885 -0.426744213461414 -2.00347070619136 d1 23.6349859825316 5.3456110942715 1
141 6.13261237074062 1 -0.699906551948259 -0.412362816369978 -0.00380865176602626 d1 11.5768774040043 6.13261237074062 1
142 3.68682961056151 1 -0.0838928805075599 -0.411622202650781 0.568031700168796 d1 22.4474866121056 3.68682961056151 1
143 0.76100954706631 2 -0.878828901403943 -0.407136319659784 -0.422550777633684 d1 8.09349642135203 0.76100954706631 2
144 3.6396768946298 1 -0.493970497537286 -0.380437653626171 0.544980332189823 d1 24.2342771767619 3.6396768946298 1
145 0.226093608306023 2 -0.802450798273513 -0.379668398780153 -0.353597623913161 d1 10.9755174070597 0.226093608306023 2
146 7.14217677187447 1 -0.532156059460212 -0.377947838991342 0.865326864053416 d1 83.4494295553544 7.14217677187447 1
147 1.023792038258 2 -0.234775191661309 -0.377922510014183 0.491050706319866 d1 13.4517656546086 1.023792038258 2
148 0.325230990536511 2 -0.921853465743566 -0.376532243381352 -0.315304498057206 d1 10.009858366102 0.325230990536511 2
149 1.21214290052177 2 -1.01754659517164 -0.372131176422376 0.721744258141993 d1 15.1669203109088 1.21214290052177 2
150 1.05932499277861 2 -0.172861497329901 -0.368173871392029 -0.415327623237047 d1 11.0319846123457 1.05932499277861 2
151 1.15900027747722 2 -1.06357604916444 -0.355727286601868 -0.83295066853112 d1 11.026405999437 1.15900027747722 2
152 1.40432675174418 2 -2.00392240233422 -0.354311938693627 0.545223722435314 d1 4.14780305698514 1.40432675174418 2
153 5.24546520517952 1 -0.697060984902235 -0.352340824558248 -0.167827672286475 d1 13.1773237604648 5.24546520517952 1
154 2.20974060321662 2 -0.44644890041726 -0.341316173238382 -1.17368307746107 d1 12.000501928851 2.20974060321662 2
155 1.10313763608864 2 -1.01741977972463 -0.301238997620582 0.795809665949982 d1 1.13211940973997 1.10313763608864 2
156 0.0549348615779616 2 -0.638941905808089 -0.282836701929551 -0.222573540488648 d1 18.5490127270171 0.0549348615779616 2
157 6.19019369816236 1 -0.630025466535802 -0.278803767694466 0.363569772143073 d1 14.0355504109504 6.19019369816236 1
158 5.854815371233 1 -0.70528626965295 -0.27642123739972 0.755367666130202 d1 0.0763031522171913 0.0763031522171913 0
159 0.915718387383339 2 -0.599049699293295 -0.250802227183038 0.638905768770242 d1 7.72378107532859 0.915718387383339 2
160 0.408360831827446 2 -0.373723206001262 -0.250303662643863 -1.34600874310538 d1 1.42498890869319 0.408360831827446 2
161 0.207730723278592 2 -1.1498063304207 -0.242127769602012 0.187896014934178 d1 18.3369519749022 0.207730723278592 2
162 5.98386667120984 1 -1.02659650747139 -0.236076301428279 -0.221062460615409 d1 37.3994422083372 5.98386667120984 1
163 1.08100279043884 2 -1.94479416850934 -0.233685865260032 -1.95828191574904 d1 12.4608694948256 1.08100279043884 2
164 0.0099718258716166 2 -1.51095925832907 -0.226883732267773 0.538896410656343 d1 1.69574242813753 0.0099718258716166 2
165 0.654205780476332 2 -1.4121280129534 -0.224646176343045 0.992025433629389 d1 13.1169978715479 0.654205780476332 2
166 4.54793027405606 1 -0.828960039105809 -0.21371393692546 -1.56541454696946 d1 11.5059393732247 4.54793027405606 1
167 3.38249082101469 2 -0.304769221959177 -0.211731030982286 0.556224447936644 d1 3.39749668724835 3.38249082101469 2
168 3.96991475732246 1 -0.0883548658769718 -0.209627983367337 0.941399989549762 d1 0.838029654696584 0.838029654696584 0
169 6.59189400563318 1 -0.424866029345544 -0.201990758460719 -0.0530650487711301 d1 14.3362023462337 6.59189400563318 1
170 4.33577255715891 1 -0.733916490468392 -0.197969023048747 0.746621269395464 d1 0.883020637944007 0.883020637944007 0
171 0.101469402055628 2 -0.82052056082922 -0.190251451264261 -0.0639685408845276 d1 13.7223364040256 0.101469402055628 2
172 0.770054679736931 2 -0.214052821196357 -0.186398037836426 -1.21330515191523 d1 43.0222481836505 0.770054679736931 2
173 0.00398647907686216 2 -0.738955336683205 -0.18140384913684 -0.322614676260016 d1 9.5018079970032 0.00398647907686216 2
174 6.25516042635959 1 -0.605307676670324 -0.150378047353032 0.345014721638011 d1 30.7541495917325 6.25516042635959 1
175 8.1048077865766 1 -1.01710519216245 -0.149800375609999 -0.0364766720553888 d1 0.944741234214027 0.944741234214027 0
176 6.2812328382367 1 -0.6418689198448 -0.143668219208823 0.169791544958343 d1 4.39846734516323 4.39846734516323 0
177 6.92405921593974 1 -0.726680950407423 -0.135676733596106 0.25111223999711 d1 1.39894222840667 1.39894222840667 0
178 1.15639470513434 2 -0.375659527184283 -0.133457241096729 -0.720537460818236 d1 4.6384328158824 1.15639470513434 2
179 0.0127057878088691 2 -0.584704699337587 -0.129682557224926 0.714226452339785 d1 11.5945034567267 0.0127057878088691 2
180 1.02857265573186 2 -0.326048256016773 -0.129438718205001 -1.23355723518009 d1 35.4771690426354 1.02857265573186 2
181 0.0205982001498342 2 -0.359779776182028 -0.119297861520966 0.591992900562482 d1 8.94692211411893 0.0205982001498342 2
182 1.40970702545298 2 -0.213891739055617 -0.119294621033348 -0.182478549861398 d1 12.1665546670556 1.40970702545298 2
183 0.0254313736222684 2 -1.24521542217279 -0.119287220034298 0.625913797060942 d1 3.49854445963949 0.0254313736222684 2
184 5.83808202434836 1 -0.578403832247115 -0.112888224067282 0.262708993216398 d1 13.8795710072452 5.83808202434836 1
185 6.60082031797962 1 -1.46939977515696 -0.104406161639182 0.338158444800253 d1 17.2645219841198 6.60082031797962 1
186 0.117790273856372 2 -0.261344257340527 -0.0993180765045312 -1.18610183706866 d1 17.3415739927542 0.117790273856372 2
187 2.16273942540821 1 -0.721897078426956 -0.0746452491488003 -1.12270409405886 d1 14.0247517622476 2.16273942540821 1
188 0.0374332187223255 2 -0.492348529899591 -0.0740207812561484 -1.43891317872365 d1 26.6852392061594 0.0374332187223255 2
189 5.0002440073125 1 -1.17422958458737 -0.0611967996743354 0.924747957649965 d1 15.1820505589439 5.0002440073125 1
190 0.571775167714804 2 -1.71005056102592 -0.050562582643229 -1.27945291216992 d1 12.6607749331743 0.571775167714804 2
191 6.65550057687453 1 -0.405884732342281 -0.0456498072713263 -0.357571968752414 d1 3.69402457028627 3.69402457028627 0
192 0.857566208536637 2 -0.597174831778963 -0.0448578636565208 0.69300706154143 d1 0.551790578173197 0.551790578173197 0
193 6.59222101830647 1 -0.274371806644722 -0.0359840523969918 -0.00026315814818347 d1 17.4641290572546 6.59222101830647 1
194 0.67841577809304 2 -1.0772074617867 -0.0337208917027876 -0.403450657463133 d1 35.4620265198832 0.67841577809304 2
195 0.668002340011299 2 -1.08545723440476 -0.0251063950207619 0.939654469893472 d1 8.34927806630731 0.668002340011299 2
196 5.74339111739383 1 -0.04460856554122 -0.00835023844905028 -0.748071090622482 d1 51.6425802160926 5.74339111739383 1
197 1.82126400425079 2 -0.0177826697978964 -0.00525648348828892 0.960240386660172 d1 6.33178289048374 1.82126400425079 2
198 0.630121590569615 2 -0.374380456657173 -0.00283109908242781 -0.460421882711496 d1 31.515871056219 0.630121590569615 2
199 1.62263065547043 2 -0.578858002631244 0.0217249885551602 -1.96126361796654 d2 11.4491322916001 1.62263065547043 2
200 1.28221844159756 1 -0.393114588906499 0.0225499335063258 0.434198009477631 d2 8.08907632716 1.28221844159756 1
201 0.0710073061028453 2 -0.361240550986893 0.0247397479896548 0.284171178928202 d2 42.1896167036723 0.0710073061028453 2
202 2.1523897035229 2 -0.764435758530165 0.0272912914605349 -1.28327374747751 d2 10.2206419493408 2.1523897035229 2
203 0.753091441865533 2 -1.19613901592276 0.0276235791587881 0.835647672647747 d2 2.74232354527797 0.753091441865533 2
204 0.535127593551222 1 -0.576473388106182 0.035000668205451 -0.017356071098809 d2 13.2582863140851 0.535127593551222 1
205 1.59197683363992 2 -0.625362092530586 0.0370275041807405 0.126384613081724 d2 37.5318089128632 1.59197683363992 2
206 0.26349567654236 2 -0.290374267961153 0.0371321598830519 -0.513697391403867 d2 2.80140158938636 0.26349567654236 2
207 0.867308566107245 2 -1.95768667669643 0.0375659571563162 -0.634722892905126 d2 24.0328325322809 0.867308566107245 2
208 1.30410956147476 2 -0.762471841684381 0.0398737320545291 -0.872482297755538 d2 22.1617450311126 1.30410956147476 2
209 1.4835222529382 2 -1.0358066572848 0.0501944975859606 -0.735009056303785 d2 15.6004232159796 1.4835222529382 2
210 0.424044434532835 2 -0.476967266017635 0.050464990999201 -1.72141260365734 d2 3.48480642773211 0.424044434532835 2
211 0.0915709753815865 2 -0.49692692996925 0.0573151067167399 -0.497970169498318 d2 65.3296588327656 0.0915709753815865 2
212 1.51596810999106 2 -0.0770707331255256 0.0595677398533348 -1.92136075269802 d2 79.3569109919381 1.51596810999106 2
213 0.398533509233927 1 -0.826839943477568 0.0682015537417207 -0.882775820710363 d2 7.15256387429906 0.398533509233927 1
214 1.62587438911195 2 -0.245452415145027 0.068904786126836 -0.958155584397777 d2 37.1642307547813 1.62587438911195 2
215 0.634364937897617 2 -1.50830408406202 0.0754547310552607 0.0973234366406274 d2 5.67512247152905 0.634364937897617 2
216 0.711386162395278 2 -1.37503355669522 0.0770248811196285 -0.903993925010862 d2 13.2279564812779 0.711386162395278 2
217 0.747886747492562 2 -0.283476358868049 0.0790833893495843 0.867533784826467 d2 4.36639625579119 0.747886747492562 2
218 0.633273537163958 2 -0.866793185278675 0.0795548841871984 -0.800219422194315 d2 3.86477720923722 0.633273537163958 2
219 0.0204741884312118 2 -0.023090344746053 0.0816820451255088 0.865940404164304 d2 0.800363280481217 0.0204741884312118 2
220 0.809896258124635 2 -1.48811573495461 0.0868639459183109 -0.900670183447792 d2 5.32053390517831 0.809896258124635 2
221 0.224963228745801 2 -0.615143621366165 0.104343235385161 -0.528253178308493 d2 0.781445745378733 0.224963228745801 2
222 0.603945789213362 2 -0.902504927566528 0.108878805887301 -0.391791898161784 d2 34.4152825247088 0.603945789213362 2
223 1.06525917474196 2 -0.407066520246661 0.109326641421494 -0.557445394177184 d2 32.2371522580046 1.06525917474196 2
224 0.155089284692544 2 -0.420606469294957 0.109782326184036 -0.122495113916219 d2 34.4508593512659 0.155089284692544 2
225 0.35317332376549 2 -2.5323142576937 0.120387488663856 0.636340699537245 d2 5.94721422530711 0.35317332376549 2
226 1.50856900470565 1 -1.22695139353891 0.121946013509368 -0.408218272762679 d2 18.801272283851 1.50856900470565 1
227 0.237881308813816 2 -1.07670556129965 0.145063596669344 0.261855912282463 d2 0.747899413108826 0.237881308813816 2
228 0.416807783338289 2 -0.559334776653761 0.147863506690623 0.392412738069171 d2 63.3123658563862 0.416807783338289 2
229 0.426968297199823 2 -0.979582410026887 0.152162838490286 -0.414045614621551 d2 2.62846374884248 0.426968297199823 2
230 2.76032244439042 2 -0.154477550097877 0.152392990038237 -0.788371202318248 d2 3.65458440035582 2.76032244439042 2
231 1.11870077438705 1 -0.599146592866972 0.157556834575242 -0.352337371318032 d2 13.7063298560679 1.11870077438705 1
232 1.11279250104927 2 -2.09809697365531 0.158074370023265 -0.719280435970664 d2 42.6600379420564 1.11279250104927 2
233 0.0776825762644314 2 -0.480261572212739 0.161272558399741 0.968965684973622 d2 2.59143915743156 0.0776825762644314 2
234 0.489987619280431 1 -0.635686551578909 0.161944781152408 0.895820975927653 d2 17.5853631297135 0.489987619280431 1
235 1.04343064643425 2 -0.149356505562529 0.164850514714938 0.297633428264352 d2 10.1497511658818 1.04343064643425 2
236 0.376671124199688 2 -0.576339205353266 0.16794217688026 -0.449781393949157 d2 5.56738465093076 0.376671124199688 2
237 0.19522811809624 2 -0.269372430183501 0.168369369174143 0.538178217480167 d2 11.3334511779249 0.19522811809624 2
238 0.00393730867293355 2 -1.13342959760482 0.17212553858774 0.254573300555983 d2 25.736616141254 0.00393730867293355 2
239 0.00487037384654395 2 -1.66001341838688 0.174606749949963 0.073886191607426 d2 34.9265615252738 0.00487037384654395 2
240 1.80695842176759 1 -0.283551262821809 0.175514455770042 0.949342246098602 d2 11.5669766161591 1.80695842176759 1
241 0.455824922091771 2 -0.144645421275756 0.178097522229174 -0.521022563712938 d2 16.1112212165667 0.455824922091771 2
242 0.0746160078578386 2 -0.501953053166294 0.178353709926701 0.410891145994807 d2 21.1762206434252 0.0746160078578386 2
243 0.542051810065195 2 -0.574392137684709 0.207877118164282 -1.02410290164159 d2 28.1358632801061 0.542051810065195 2
244 0.667051993378265 2 -1.01160555863319 0.212807815139801 -0.66732415300705 d2 23.3078352507629 0.667051993378265 2
245 0.464077745170919 2 -1.22191628806067 0.217151436734035 0.542117095355253 d2 1.25699988387794 0.464077745170919 2
246 0.188328571210729 2 -1.24833410531118 0.217843836439306 -0.418763900432543 d2 26.9082405037227 0.188328571210729 2
247 0.109984107801926 2 -1.12971146599918 0.232712244585027 -0.654627515184759 d2 12.7776817884296 0.109984107801926 2
248 0.684764363403859 2 -0.491011598609 0.244209731015568 0.302834972546819 d2 17.4576880215647 0.684764363403859 2
249 0.158563602787365 2 -0.165604515383408 0.249030026190664 -0.127773547814587 d2 33.2413780299907 0.158563602787365 2
250 0.0219640541592192 2 -1.3067579864696 0.249909196820699 -0.433446637034466 d2 10.5031970422715 0.0219640541592192 2
251 0.50925306111601 2 -0.61955970532787 0.254657080408966 -1.61635114653478 d2 6.01476361975074 0.50925306111601 2
252 1.50096565631731 2 -0.711114087116904 0.257327019177981 -0.773550689281178 d2 5.95401277152274 1.50096565631731 2
253 1.36486072091309 2 -1.46404140252043 0.263358662945559 -3.1438059305269 d2 21.8958537830951 1.36486072091309 2
254 0.390309073876718 2 -0.840746132854337 0.263728700596104 0.562366476526802 d2 68.2684893872509 0.390309073876718 2
255 0.679795922646958 2 -0.236776446532667 0.278518245851649 -1.49230330163869 d2 3.9876926317811 0.679795922646958 2
256 0.724527445958358 2 -1.14697584689703 0.282593193012178 -0.885124173023745 d2 3.45512878149748 0.724527445958358 2
257 0.770066255889734 2 -1.21732980536083 0.284787357143001 0.255004208623053 d2 36.792803405035 0.770066255889734 2
258 0.46613123849456 2 -0.119226561525818 0.289592872297724 0.167523195535134 d2 0.358355776726436 0.358355776726436 0
259 2.22814567740949 2 -1.01775117085296 0.322546787489202 -0.106281524616066 d2 61.7748028006325 2.22814567740949 2
260 0.0844876296513269 2 -0.408227089927771 0.323994820815029 0.355693406349296 d2 58.4905307409627 0.0844876296513269 2
261 0.975371115075574 2 -0.970005476960108 0.327344824748461 -0.381834780102756 d2 3.19861772006316 0.975371115075574 2
262 1.27420084308242 2 -1.163148737653 0.327346149098577 -0.502271963277872 d2 8.52371971277834 1.27420084308242 2
263 1.11351881283745 2 -0.636724652658768 0.335991410094823 0.500814112962396 d2 10.5844404920936 1.11351881283745 2
264 0.643438751809849 2 -0.543988665190268 0.350366972506996 -0.691758619519765 d2 5.08866863325238 0.643438751809849 2
265 0.0822662131233913 2 -0.894686363777382 0.354365713414602 -0.279153989865185 d2 1.81503525003791 0.0822662131233913 2
266 2.02889611975621 2 -0.570161716639006 0.358293933194602 -0.550076376216918 d2 22.8790422706845 2.02889611975621 2
267 0.392365154875429 2 -0.342008685772426 0.359569267678778 -0.271785377711678 d2 20.7963954927341 0.392365154875429 2
268 1.31887461603156 1 -1.16347118158703 0.360191579747997 -0.0722309406630147 d2 21.2704490178422 1.31887461603156 1
269 1.50905049448219 2 -0.659341916939053 0.362644409133353 0.684459952719281 d2 13.9709756388736 1.50905049448219 2
270 3.15747903836754 2 -1.73840648591533 0.366406670280074 -0.298575326171553 d2 37.2580288333778 3.15747903836754 2
271 1.39137796913695 2 -0.412864641872336 0.378992297378 0.445693849903093 d2 12.6039244420826 1.39137796913695 2
272 1.00970436849354 2 -0.395082096738527 0.382010262648326 -1.28852719898889 d2 17.5538274264874 1.00970436849354 2
273 1.70669165340187 2 -0.270190960772896 0.391282234678308 0.930805801930924 d2 5.77591234548557 1.70669165340187 2
274 0.521773378678778 2 -0.126036476956779 0.39614040521448 0.665443358318428 d2 27.6069133161547 0.521773378678778 2
275 0.606416514476558 2 -1.025136908893 0.396581238292746 -1.67451392995307 d2 11.6030932001657 0.606416514476558 2
276 0.490568188109911 2 -0.749298579102425 0.411480978576853 -0.205434450059756 d2 155.825299797651 0.490568188109911 2
277 0.140466598799784 2 -1.26281148323805 0.414323993148583 0.388015149194928 d2 24.8703219360652 0.140466598799784 2
278 1.63550901332397 2 -0.806779130243142 0.417115948593644 -0.0658789043484457 d2 23.8971231124344 1.63550901332397 2
279 0.75374593547446 2 -0.567522013121231 0.417594817175236 0.188837679351814 d2 16.54752952894 0.75374593547446 2
280 0.152153590227425 2 -0.765818787426703 0.418522708402147 0.00731752166317815 d2 6.28146065399051 0.152153590227425 2
281 1.15987459540589 2 -0.121346489868558 0.424349849151581 0.240793818846837 d2 58.639344271637 1.15987459540589 2
282 1.49188357490541 2 -0.251981116796632 0.426723153204208 0.37391096516771 d2 17.2055481662561 1.49188357490541 2
283 0.465849839327852 2 -0.505358915271077 0.426868714871196 -0.0839968519859277 d2 11.1470808833838 0.465849839327852 2
284 0.514377606102378 2 -1.48435944511628 0.43823921711183 -0.270398122330151 d2 2.83134931698442 0.514377606102378 2
285 1.37083819437581 2 -0.942850848323754 0.43845089029677 -0.640576204026827 d2 6.56377174891531 1.37083819437581 2
286 0.604730482549567 2 -0.342686014810829 0.440428555800003 -0.585647349713446 d2 58.1326644088993 0.604730482549567 2
287 2.38162830860741 2 -0.0509251423442782 0.449250562133414 0.0153383773617419 d2 5.86805497296154 2.38162830860741 2
288 0.936987707937162 1 -1.27016523546516 0.451870143183855 0.6288446859123 d2 29.1486597440213 0.936987707937162 1
289 1.3514202925692 2 -0.231514029465654 0.472412528112696 0.864892542845737 d2 13.3516124635935 1.3514202925692 2
290 0.44545424739223 2 -0.537603264715137 0.485484972481348 -1.37162073165871 d2 16.7040145016255 0.44545424739223 2
291 0.37038505214194 2 -1.33992208021174 0.499363224209327 -2.22822062828528 d2 31.4321481792216 0.37038505214194 2
292 0.00743040960429768 2 -0.827233773203637 0.501657410834819 0.600360386941691 d2 4.68624860048294 0.00743040960429768 2
293 1.06928769540851 2 -1.79826966860824 0.511859081350625 -1.61509343921743 d2 12.4147091992199 1.06928769540851 2
294 0.398101279346337 2 -1.10775714804814 0.529026255873108 -0.181986138084938 d2 13.129425290972 0.398101279346337 2
295 1.14000506048611 2 -1.79765382194691 0.529220720193775 0.830035376518184 d2 37.8915428725963 1.14000506048611 2
296 1.10912364066992 2 -1.04433825797855 0.539416179060379 -2.05046671465067 d2 12.9112015850842 1.10912364066992 2
297 0.218780244008344 2 -0.608675711931701 0.548163722585798 -2.47352322276342 d2 8.54718699119985 0.218780244008344 2
298 0.850581004469453 1 -0.447511052245895 0.564801210678692 -1.81442820691436 d2 2.26566986408528 0.850581004469453 1
299 0.855666513631384 2 -2.13818244511402 0.62622330607782 -0.388154860024151 d2 12.8540292102844 0.855666513631384 2
300 2.1856308540942 2 -0.78196374129668 0.643926759205068 -2.26966417409628 d2 12.1851485967636 2.1856308540942 2
301 2.21783935658177 2 -0.651277743851512 0.64437711493386 -0.0628370633467478 d2 4.7361337672919 2.21783935658177 2
302 2.66605038493913 1 -0.90754497972906 0.644821644027934 -1.79315275911764 d2 15.0149627067721 2.66605038493913 1
303 0.602170499269422 2 -2.08283603059158 0.653338636167427 -0.0559950805249862 d2 88.3255479434386 0.602170499269422 2
304 0.505554509814011 2 -0.6209353607903 0.653553876086565 -1.46860814520335 d2 28.7516077591066 0.505554509814011 2
305 0.0686638595708569 2 -0.735071648729763 0.658458711046142 -0.902171510168721 d2 20.3378800666871 0.0686638595708569 2
306 1.23363737636628 2 -0.229141299074559 0.667769735492015 0.44426138711264 d2 9.60924427956343 1.23363737636628 2
307 0.734908695593717 2 -1.41643377648938 0.669102178169292 -0.363069784243584 d2 1.13766871584323 0.734908695593717 2
308 0.785797862992444 2 -0.707289099921422 0.670700320212791 -1.84705478809774 d2 17.5849492839518 0.785797862992444 2
309 0.0647379571435017 1 -1.46772218558662 0.676996341328256 0.423122436127203 d2 20.9062523386421 0.0647379571435017 1
310 0.68067476095048 2 -0.144366524893493 0.681225512127279 0.185094647980252 d2 2.83637944067913 0.68067476095048 2
311 0.496110307056098 2 -1.73561627917223 0.686181929261749 -0.896920673717545 d2 27.1116044177654 0.496110307056098 2
312 0.828971303610886 2 -0.0481468628741855 0.686343525508891 -1.3065311825373 d2 11.7226412612945 0.828971303610886 2
313 0.728124357404708 1 -1.40907499558226 0.688215933035988 -0.13602418646648 d2 6.16357510909438 0.728124357404708 1
314 1.74627794500434 1 -0.519287834824023 0.696344750633333 -1.16053542404109 d2 3.98310596621714 1.74627794500434 1
315 0.860169175773096 2 -1.12966715232129 0.707692044116363 0.449294456826711 d2 16.1259185886922 0.860169175773096 2
316 1.74960246903603 2 -1.15241420864627 0.708376912244165 0.0945302458165274 d2 9.05113011598587 1.74960246903603 2
317 0.620163383728912 2 -1.14485810944178 0.720578241579318 0.298376377809392 d2 14.7201306232412 0.620163383728912 2
318 0.599121518218681 2 -0.491805256281995 0.720845357405082 0.170067978878183 d2 2.1413634903729 0.599121518218681 2
319 0.258023886584911 2 -1.02468964249271 0.721904053264548 0.379341452116645 d2 18.6108343853595 0.258023886584911 2
320 0.713235444755807 2 -1.85268576462046 0.754783125581337 0.229541809119566 d2 52.7147463311381 0.713235444755807 2
321 1.3715883817522 2 -0.00951542871598267 0.755490788646641 -0.541187999043309 d2 9.76649975404143 1.3715883817522 2
322 0.139136541050377 2 -0.750398305804971 0.763985280222561 -0.905800470925745 d2 7.22360649158305 0.139136541050377 2
323 1.17117458340716 2 -1.86969806844165 0.779844507943365 -0.531280066778365 d2 44.2495981951184 1.17117458340716 2
324 0.528802586233419 2 -0.638218227996248 0.78095837107841 0.71170837351234 d2 4.09247838892043 0.528802586233419 2
325 15.9859128030783 1 -1.2749751848768 0.78885308243751 -2.37102557429026 d2 33.3947736008053 15.9859128030783 1
326 0.947866507167075 2 -0.377359616856185 0.790658665799771 -0.334371628832217 d2 9.29856486618519 0.947866507167075 2
327 0.645793883967361 2 -0.79224673672974 0.806751269297997 0.976406365543615 d2 3.24837939813733 0.645793883967361 2
328 0.310585423733822 2 -1.70916007971169 0.816935090855232 -1.36958432701944 d2 27.4510624065044 0.310585423733822 2
329 0.15098664696988 2 -0.621545910178871 0.828175732552656 -0.120092052906879 d2 3.77097046934068 0.15098664696988 2
330 1.39545865987322 2 -0.747841520418587 0.828358539607091 -0.121822404009773 d2 6.38166908174753 1.39545865987322 2
331 1.00432200867913 1 -1.07312835757515 0.84246881482389 0.6658920107911 d2 12.654183935374 1.00432200867913 1
332 0.376164471434408 2 -2.25749718255237 0.84686090594898 0.266513619424984 d2 11.8262910097837 0.376164471434408 2
333 0.92439962637748 2 -1.44275553582813 0.849469933628588 -0.799393627980222 d2 25.2566761887612 0.92439962637748 2
334 1.13734706267193 2 -0.214552486616779 0.86043447751587 -0.788632070223352 d2 96.7150012353316 1.13734706267193 2
335 0.417856744430816 2 -1.36994217513601 0.87504929650462 -0.072642473860285 d2 19.9988145375184 0.417856744430816 2
336 3.06296380306078 1 -0.907777416890521 0.879349192041277 -1.85621448262524 d2 31.4180718567303 3.06296380306078 1
337 0.609549967783587 2 -0.353895924710764 0.879649581240305 -2.43899018491939 d2 37.7075326700159 0.609549967783587 2
338 0.391106392937812 2 -0.00929502924538058 0.880112808863805 0.3641208320035 d2 33.2838974755602 0.391106392937812 2
339 0.0391002649473239 2 -0.119265636313351 0.903543923361854 -0.753988528524269 d2 0.074649417946016 0.0391002649473239 2
340 0.217673076954315 2 -0.991402236503461 0.927085095261113 -0.890088923311745 d2 4.94580941274762 0.217673076954315 2
341 0.912286231172002 2 -0.651751020375463 0.927563064724242 -0.255980255052049 d2 26.9876665241065 0.912286231172002 2
342 1.26422408098703 2 -1.59316198562629 0.955864860410794 -2.37511039436268 d2 35.97322165798 1.26422408098703 2
343 1.63798303075128 2 -0.944833506303253 0.957101283177756 0.107430927154945 d2 8.76808514818549 1.63798303075128 2
344 0.520085684978681 2 -1.93689648029229 0.960343687869681 -0.946446488528295 d2 5.41821549126738 0.520085684978681 2
345 0.0333522793002843 2 -0.406190415949957 0.974426310386208 -1.53532871882733 d2 58.581854101635 0.0333522793002843 2
346 0.52810010882123 2 -0.90366523639987 0.974877895389415 -0.0109691290904899 d2 13.2324086781591 0.52810010882123 2
347 0.175571716815793 2 -0.176394854786988 0.980980607940724 -0.0489264288249495 d2 31.9512213749771 0.175571716815793 2
348 0.529129727523435 2 -0.460396849812602 1.00094544353244 0.0662567586728054 d2 1.88688070816757 0.529129727523435 2
349 0.635567780011985 2 -0.76378882780698 1.00548327862127 0.423635270489904 d2 42.4910559852548 0.635567780011985 2
350 0.724904238278035 2 -0.907731768318047 1.00997063287553 0.538120581968774 d2 36.0503575561528 0.724904238278035 2
351 0.427629964225869 2 -1.56216126296095 1.01814611378071 -0.406674803306843 d2 4.87516235560179 0.427629964225869 2
352 0.161767293068696 2 -0.759473242254803 1.03657414400826 -0.977169880121158 d2 48.7263685067124 0.161767293068696 2
353 0.962126138834229 2 -0.56522171831491 1.05103830138578 -1.28735495414437 d2 24.6044033012333 0.962126138834229 2
354 0.448703828522713 2 -1.18508690906293 1.05794340357344 0.209893612875558 d2 3.6171385717943 0.448703828522713 2
355 2.29539588387135 2 -0.809591453713195 1.06264984735446 0.708970715100883 d2 26.6586700818482 2.29539588387135 2
356 0.690530526497498 2 -0.0267186723123176 1.0874311425292 -2.2279377944802 d2 9.77258295752108 0.690530526497498 2
357 0.472309753498816 1 -0.359882797031715 1.09786284055163 -0.288753197637377 d2 81.2945778253389 0.472309753498816 1
358 2.45214804477456 2 -0.21394029294774 1.13245244560219 0.514170048915875 d2 24.8033722109141 2.45214804477456 2
359 1.51453100008048 2 -0.376904852999008 1.137094128323 -0.769574027523774 d2 31.9085638580804 1.51453100008048 2
360 0.066087403612231 2 -1.01366783097158 1.14325704429475 0.0122662871490449 d2 12.2102071903646 0.066087403612231 2
361 2.27292557190558 2 -0.0613559687217213 1.15519370818209 0.206926829454031 d2 13.3934736810625 2.27292557190558 2
362 1.06101613204515 2 -1.08125475011268 1.15700722981978 -0.834547675087852 d2 20.7887781775537 1.06101613204515 2
363 1.29171527471949 2 -0.258163275873147 1.1571947075309 -0.343581741444281 d2 13.2905606180429 1.29171527471949 2
364 0.483420974791873 2 -0.247429099416824 1.18148342053382 0.666408548662519 d2 27.3468879788163 0.483420974791873 2
365 1.65322850434042 2 -0.618187508699168 1.20227668160115 -1.06876108987557 d2 20.4747169642689 1.65322850434042 2
366 1.25885674652328 2 -1.62801150855676 1.21660132215862 -1.27052258001484 d2 0.0653019081801176 0.0653019081801176 0
367 1.38317749248244 2 -0.412779168242635 1.2257839632566 -0.471509027445123 d2 14.3918521018565 1.38317749248244 2
368 0.29090056781615 2 -0.941711982878097 1.2452650785948 -1.13282683720939 d2 33.3252260397076 0.29090056781615 2
369 0.774384089212772 2 -0.821733976245432 1.24763858736497 0.215567163048395 d2 15.7909392505371 0.774384089212772 2
370 0.426550949391251 2 -0.613863471405316 1.26633615701241 -1.21869528367914 d2 1.34932232089341 0.426550949391251 2
371 2.16897273189479 2 -0.595914050488664 1.27706728920149 -1.74397046871294 d2 7.73399090394378 2.16897273189479 2
372 0.60714584775794 2 -0.732737873358977 1.27761478426247 0.00948414982453159 d2 6.53633067384362 0.60714584775794 2
373 0.928060938574253 2 -0.0593950423195912 1.30184730656887 0.269582930706893 d2 16.8946285537424 0.928060938574253 2
374 0.0652448540805098 2 -0.376171738015478 1.30902526364196 -2.2509856641888 d2 34.4706994940756 0.0652448540805098 2
375 0.290682706395645 2 -0.748192811516037 1.32500142107158 0.733254357772467 d2 99.2230615333514 0.290682706395645 2
376 0.099562649791565 2 -0.0646000063702595 1.33398179591883 0.271531892777113 d2 1.23980532934852 0.099562649791565 2
377 0.21834724290433 2 -1.63793111804505 1.33912858503736 -0.43680375689659 d2 31.7336872575765 0.21834724290433 2
378 0.355890267642353 2 -0.423946587126264 1.3856925052704 -0.276827203788486 d2 7.60781746505117 0.355890267642353 2
379 0.640673603062046 2 -0.186450402973362 1.39835032773893 -0.173427024327545 d2 47.3483018924422 0.640673603062046 2
380 1.48656976140796 2 -0.91541184985219 1.39989832103014 -0.992620752809943 d2 7.52968023531139 1.48656976140796 2
381 1.65555322752278 1 -0.485881634025376 1.41117763150536 -0.726434134251611 d2 65.2425061132679 1.65555322752278 1
382 1.19084622251781 2 -0.41575087352391 1.41304076324206 -0.89595965520797 d2 35.4190194217448 1.19084622251781 2
383 0.743826687228459 2 -0.486520668561888 1.41541061022267 0.0601947005008747 d2 25.9400983705165 0.743826687228459 2
384 0.80674393638146 2 -0.0583341820790928 1.42216295944444 0.0544646255026132 d2 49.9927782614656 0.80674393638146 2
385 0.531679737743372 2 -0.276771009359284 1.43140802191472 0.316807326856949 d2 31.8341349421029 0.531679737743372 2
386 0.946712639709247 1 -0.751586796242839 1.44325281817539 -0.228361206575733 d2 0.967175701785795 0.946712639709247 1
387 0.0102507216148591 2 -0.697153420063897 1.45011924808629 -0.1735760078557 d2 50.4439213474221 0.0102507216148591 2
388 0.97816637578579 2 -0.623542054555381 1.45326936864526 -1.04309452819424 d2 0.221857391297817 0.221857391297817 0
389 1.55592279163702 2 -0.176217002127984 1.49113258501544 -1.56410714129628 d2 8.67591893300414 1.55592279163702 2
390 0.436696810447691 2 -0.30260459699746 1.5548796741216 0.26223027233537 d2 2.5096242376164 0.436696810447691 2
391 1.56011947543939 2 -0.171702067200568 1.55615864606286 -0.00103340896897324 d2 28.8497183082585 1.56011947543939 2
392 0.041023977490151 2 -0.213494343986504 1.56225642569261 -0.367845350238968 d2 10.8403069991618 0.041023977490151 2
393 0.592072764055101 2 -0.143230072021797 1.56526082666509 -0.438323140711413 d2 4.36732348054647 0.592072764055101 2
394 1.29752014338006 2 -0.181245337921119 1.56600498772284 0.0982090925685866 d2 8.29938241280615 1.29752014338006 2
395 0.769091140462859 2 -1.04979902287923 1.652798333173 0.598218868632103 d2 18.5340986682841 0.769091140462859 2
396 0.614095462763319 2 -0.129243968919267 1.66882377416187 -0.553767152997795 d2 9.75808587856591 0.614095462763319 2
397 0.677081263269833 2 -0.461186220906231 1.68233756841276 -0.108397961050149 d2 24.5852781451287 0.677081263269833 2
398 0.167651205068143 2 -0.215571372145331 1.68370200482687 0.905971152345377 d2 28.9677151275759 0.167651205068143 2
399 0.760640574623506 2 -0.185659053672513 1.74441351026884 -0.290411394614044 d2 3.6788512673229 0.760640574623506 2
400 1.57059571330668 2 -0.00378045852779645 1.75199514594482 0.37518745697901 d2 36.5044529346709 1.57059571330668 2
401 1.22039732425317 2 -0.0409784974877476 1.8128663242746 0.518983973724044 d2 8.14542844891548 1.22039732425317 2
402 0.357746726203608 2 -1.13221511533544 1.82140525789747 -1.12823713903409 d2 2.84647900611162 0.357746726203608 2
403 0.506598376895596 2 -1.58623419714671 1.84630386483031 -0.871164001707083 d2 7.05219495933504 0.506598376895596 2
404 0.555298311726655 2 -0.653122290105271 1.87980904893923 0.601692658871586 d2 10.4217884922989 0.555298311726655 2
405 0.0497472713166745 2 -0.803414420619709 1.92869213509968 0.566759572983138 d2 46.8863080789275 0.0497472713166745 2
406 0.63588913711856 2 -1.55312674896571 1.9812307225371 -0.394362125613719 d2 59.6746130358048 0.63588913711856 2
407 0.344136944209492 2 -1.55011818795769 2.01308796757131 -1.10441392716533 d2 3.32158831130657 0.344136944209492 2
408 0.209930101087071 1 -0.17610319662441 2.04536354395301 -1.78388719927807 d2 8.9971761777997 0.209930101087071 1
409 1.96273178822442 2 -0.265413985422845 2.06717373344592 -1.5328302296829 d2 6.70106924138963 1.96273178822442 2
410 2.04208174814171 1 -1.20512563890975 2.17895259106906 0.463208094098719 d2 24.6128874616159 2.04208174814171 1
411 0.45294046876816 2 -0.220655663734128 2.18192023375661 0.0811841371808765 d2 6.26351648010314 0.45294046876816 2
412 1.68808336321915 2 -1.22492300639913 2.23292584390155 -0.69860353230613 d2 79.5212812307191 1.68808336321915 2
413 0.0830509647238433 2 -1.14387765956049 2.25144851755798 -0.782665324462104 d2 4.72283883020282 0.0830509647238433 2
414 0.392520671541139 2 -1.2204528537223 2.36374387346593 -1.79745435930711 d2 0.827889424914617 0.392520671541139 2
415 0.0423196883561676 2 -0.0824960908690546 2.46865766977258 -0.275587719866787 d2 10.8342845924199 0.0423196883561676 2
416 1.15467347169962 2 -1.61238280333006 2.53930227266609 -0.214709061234683 d2 5.75399165041745 1.15467347169962 2
417 1.29154389139611 2 -1.05643444903253 2.55910612622809 -0.505822986209181 d2 3.11781542375684 1.29154389139611 2
418 1.84823913917143 2 -1.32857310285023 2.62141379782439 -0.935292083483808 d2 11.9421542808414 1.84823913917143 2
419 1.82018302820833 2 -0.79030173881793 2.68172397486784 0.733114954575729 d2 1.74682558514178 1.74682558514178 0
420 0.531491206830686 2 -0.680665424931255 2.78232400978012 0.646038105645267 d2 16.607096281721 0.531491206830686 2
421 1.24968905194214 2 -1.14050466415036 3.00307107062192 0.253293764911859 d2 2.94403710469961 1.24968905194214 2
422 0.263627831636059 1 -1.58535429653281 3.10991648674058 0.688555636490684 d2 10.3094351757318 0.263627831636059 1