package org.seqcode.deepseq.events; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.TreeSet; import org.seqcode.gseutils.Args; import org.seqcode.gseutils.Pair; import org.seqcode.math.stats.StatUtil; /** * A BindingModel defines a (probabilistic) model of read occurrences around a binding event. * The probability is directional (i.e. stranded). * Given a signed distance from the event, the BindingModel should return * a relative probability of seeing a read at that distance. * * @author shaunmahony * */ public class BindingModel { public final static int SMOOTHING_STEPSIZE = 30; public final static int SMOOTHING_AVG_PTS = 30; protected final double LOG2 = Math.log(2); protected int min, max; // the start and end position protected int summit; // the position of highest prob point protected double[] data; protected double[] probs; protected double[] logProbs; protected double bgProb, logBgProb; protected int influenceRange; //95% probability range (over both strands) protected String fileName; protected List<Pair<Integer, Double>> empiricalDistribution; protected BindingModel(){}; public BindingModel(File f, int minDist, int maxDist){ min=0; max=0; fileName = f.getName(); try { empiricalDistribution = new LinkedList<Pair<Integer,Double>>(); BufferedReader reader = new BufferedReader(new FileReader(f)); String line; while ((line = reader.readLine()) != null) { line = line.trim(); String[] words = line.split("\\s+"); if(words.length>=2){ Integer dist = new Integer(words[0]); //make sure the current data point is within the specified range if ((dist.intValue() >= minDist) && (dist.intValue() <= maxDist)) { Pair<Integer,Double> p = new Pair<Integer,Double>(dist, new Double(words[1])); if (p.cdr().doubleValue()>=0) // should be non-negative value empiricalDistribution.add(p); else { System.err.println("\nRead distribution file contains negative probability(count) value!"); System.exit(1); } } } } loadData(empiricalDistribution); makeProbabilities(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public BindingModel(File f) { this(f, Integer.MIN_VALUE, Integer.MAX_VALUE); } public BindingModel(List<Pair<Integer, Double>> bindingDist){ min=0; max=0; empiricalDistribution=bindingDist; loadData(bindingDist); makeProbabilities(); } //Accessors public int getMin(){return min;} public int getMax(){return max;} public int getSummit(){return summit;} public int getInfluenceRange(){return influenceRange;} public double[] getProbabilities(){ return probs.clone();} public double[] getLogProbabilities() { return logProbs.clone();} public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } //Return a pair of distances corresponding to the central probability interval provided //Can be used to provide hit extension lengths protected Pair<Integer,Integer> probIntervalDistances(double prob){ double ends=(1-prob)/2; double probSum=0; boolean firstFound=false, secondFound=false; int first=min, second=max; for(int i=min; i<=max; i++){ probSum+=probability(i); if(!firstFound && probSum>ends){ firstFound=true; first=i; }else if(!secondFound && probSum>(1-ends)){ secondFound=true; second=i; } } Pair<Integer,Integer> intervalDists = new Pair<Integer, Integer>(first, second); return intervalDists; } //Update the influence range protected void updateInfluenceRange(){ Pair<Integer,Integer> intervals = probIntervalDistances(0.95); int longest = Math.max(Math.abs(intervals.car()), Math.abs(intervals.cdr())); influenceRange = longest*2; } //Load data protected void loadData(List<Pair<Integer, Double>> bindingDist){ //Assumes the list is sorted// //Find max, min values first for(Pair<Integer, Double> p : bindingDist){ if(p.car()<min) min=p.car(); if(p.car()>max) max=p.car(); } //Initialize arrays data = new double[(max-min)+1]; probs = new double[(max-min)+1]; logProbs = new double[(max-min)+1]; for(int i=0; i<=(max-min); i++){ data[i]=0; probs[i]=0; logProbs[i] = Double.NEGATIVE_INFINITY; } //Populate the data array (assumes sorted) int last=min-1; for(Pair<Integer, Double> p : bindingDist){ int index = p.car(); double val = p.cdr(); //if list is not properly sorted (need to make this into an exception) if(index-last<0){ System.err.println("Incorrectly sorted binding read distribution data!"); System.exit(1); } //if unevenly spaced, smooth linearly between values if(index-last>1){ double lastVal=dataVal(last); double step = (val-lastVal)/(double)(index-last); for(int i=1; i<(index-last); i++){ data[(last+i)-min]=lastVal+(step*(double)i); } } data[index-min]=val; last = p.car(); } } //Set a probability landscape according to the data. protected void makeProbabilities(){ double totalVal=0, minProb=Double.MAX_VALUE; for(int i=min; i<=max; i++){ totalVal+=dataVal(i); } for(int i=min; i<=max; i++){ probs[i-min] = dataVal(i)/totalVal; logProbs[i-min] = Math.log(probs[i-min])/LOG2; if(probs[i-min]<minProb) minProb = probs[i-min]; } Pair<Double, TreeSet<Integer>> sorted = StatUtil.findMax(probs); summit = sorted.cdr().first()+min; // update empiricalDistribution with normalized probability List<Pair<Integer, Double>> newDist = new ArrayList<Pair<Integer, Double>> (); for(int i=min; i<=max; i++){ newDist.add(new Pair<Integer, Double>(i, probability(i))); } empiricalDistribution=newDist; bgProb = minProb/1000; logBgProb = Math.log(bgProb)/LOG2; updateInfluenceRange(); } protected void smooth(int splineStepSize, int avgStepSize){ probs=StatUtil.cubicSpline(probs, splineStepSize, avgStepSize); Pair<Double, TreeSet<Integer>> sorted = StatUtil.findMax(probs); summit = sorted.cdr().first()+min; } protected void smoothGaussian (int kernelWidth){ probs=StatUtil.gaussianSmoother(probs, kernelWidth); Pair<Double, TreeSet<Integer>> sorted = StatUtil.findMax(probs); summit = sorted.cdr().first()+min; } //Look up the probability corresponding to a distance // Distance should be defined as (Read position - Peak position) public double probability(int distance){ if(distance<min || distance>max){ return(bgProb); }else{ return(probs[distance-min]); } } public double logProbability(int distance) { if(distance<min || distance>max){ return(logBgProb); }else{ return(logProbs[distance-min]); } } //Look up the data corresponding to a distance protected double dataVal(int distance){ if(distance<min || distance>max){ return(0.0); }else{ return(data[distance-min]); } } //Print probs to a file public void printToFile(String filename){ try { FileWriter fout = new FileWriter(filename); for(int i=min; i<=max; i++){ fout.write(i+"\t"+probability(i)+"\n"); } fout.close(); } catch (IOException e) { e.printStackTrace(); } } /** * Command-line interface to load a BindingModel from a file * Example running: <br> * <tt> * --in oct4.shear.ext.txt --out out_oct4.txt --out_smooth out_oct4_smooth.txt * </tt> */ public static void main(String[] args){ if(Args.parseArgs(args).contains("in")){ String infile = Args.parseString(args, "in", null); String outfile = Args.parseString(args, "out", "out.model"); String outfile_smooth = Args.parseString(args, "out_smooth", "out_smooth.model"); File pFile = new File(infile); if(!pFile.isFile()){ System.err.println("Invalid file name"); System.exit(1); } //File loaded, make a BindingModel BindingModel model = new BindingModel(pFile); model.printToFile(outfile); model.smooth(SMOOTHING_STEPSIZE, SMOOTHING_AVG_PTS); model.printToFile(outfile_smooth); }else{ System.out.println("Usage: BindingModel --in GPSfileName --out outfile"); } } public List<Pair<Integer, Double>> getEmpiricalDistribution() { List<Pair<Integer, Double>> newDist = new ArrayList<Pair<Integer, Double>> (); for (Pair<Integer, Double> p: empiricalDistribution) newDist.add(p); return newDist; } /** * Estimate a better read profile ranges * @param minLeft minimum range on the left side * @param minRight minimum range on the right side * @return The estimated profile ranges <left, right> */ public Pair<Integer, Integer> getNewEnds(int minLeft, int minRight){ double halfHeight = probability(summit)*0.5; int leftHalfHeightEnd = 0; int rightHalfHeightEnd = 0; for (int i=min; i<=max; i++){ if (probability(i)>=halfHeight){ leftHalfHeightEnd = i; break; } } for (int i=max; i<=min; i--){ if (probability(i)>=halfHeight){ rightHalfHeightEnd = i; break; } } int left=Math.max(minLeft, Math.abs(summit-(summit-leftHalfHeightEnd)*4)); int right=Math.max(minRight, Math.abs(summit+(rightHalfHeightEnd-summit)*3)); return new Pair<Integer, Integer>(left, right); } // shift two array elements to give best KL-divergence // it will mutate the two input arrays. // assume a and b have same length public static int minKL_Shift (double[] a, double[] b){ if (a.length!=b.length) return 0; int length = a.length; int range=20; double minKL=Double.MAX_VALUE; int shift=0; double[] a_new = new double[length]; double[] b_new = new double[length]; double[] a1 = new double[length]; double[] b1 = new double[length]; for (int i=-range;i<range;i++){ if (i<0){ //a shift forward, b shift backward System.arraycopy(a, 0, a1, -i, length+i); System.arraycopy(a, length+i, a1, 0, -i); System.arraycopy(b, -i, b1, 0, length+i); System.arraycopy(b, 0, b1, length+i, -i); } else if (i>0){ //a shift backward, b shift forward System.arraycopy(a, i, a1, 0, length-i); System.arraycopy(a, 0, a1, length-i, i); System.arraycopy(b, 0, b1, i, length-i); System.arraycopy(b, length-i, b1, 0, i); } else{ System.arraycopy(a, 0, a1, 0, length); System.arraycopy(b, 0, b1, 0, length); } double kl = StatUtil.log_KL_Divergence(a1, b1); if (kl<minKL){ minKL=kl; shift=i; System.arraycopy(a1, 0, a_new, 0, length); System.arraycopy(b1, 0, b_new, 0, length); } } System.arraycopy(a_new, 0, a, 0, length); System.arraycopy(b_new, 0, b, 0, length); return shift; } @SuppressWarnings("unchecked") public static final List<Pair<Integer, Double>> defaultChipSeqEmpiricalDistribution = Arrays.asList(new Pair<Integer,Double>(-250, 2.1453194893774935E-4), new Pair<Integer,Double>(-249, 2.152548879235857E-4), new Pair<Integer,Double>(-248, 2.1598911849088055E-4), new Pair<Integer,Double>(-247, 2.167459322210923E-4), new Pair<Integer,Double>(-246, 2.1753662069567956E-4), new Pair<Integer,Double>(-245, 2.1837247549610073E-4), new Pair<Integer,Double>(-244, 2.1926478820381436E-4), new Pair<Integer,Double>(-243, 2.2022485040027885E-4), new Pair<Integer,Double>(-242, 2.2126395366695278E-4), new Pair<Integer,Double>(-241, 2.223933895852946E-4), new Pair<Integer,Double>(-240, 2.2362444973676274E-4), new Pair<Integer,Double>(-239, 2.2496842570281572E-4), new Pair<Integer,Double>(-238, 2.2643660906491208E-4), new Pair<Integer,Double>(-237, 2.280402914045103E-4), new Pair<Integer,Double>(-236, 2.2979076430306873E-4), new Pair<Integer,Double>(-235, 2.31699319342046E-4), new Pair<Integer,Double>(-234, 2.337772481029006E-4), new Pair<Integer,Double>(-233, 2.360358421670909E-4), new Pair<Integer,Double>(-232, 2.3848639311607544E-4), new Pair<Integer,Double>(-231, 2.4114019253131268E-4), new Pair<Integer,Double>(-230, 2.440085319942612E-4), new Pair<Integer,Double>(-229, 2.4710270308637945E-4), new Pair<Integer,Double>(-228, 2.504339973891258E-4), new Pair<Integer,Double>(-227, 2.5401370648395883E-4), new Pair<Integer,Double>(-226, 2.5785312195233717E-4), new Pair<Integer,Double>(-225, 2.6196353537571906E-4), new Pair<Integer,Double>(-224, 2.6635623833556296E-4), new Pair<Integer,Double>(-223, 2.710425224133276E-4), new Pair<Integer,Double>(-222, 2.760336791904713E-4), new Pair<Integer,Double>(-221, 2.8134100024845263E-4), new Pair<Integer,Double>(-220, 2.8697577716872995E-4), new Pair<Integer,Double>(-219, 2.929493015327619E-4), new Pair<Integer,Double>(-218, 2.9927286492200685E-4), new Pair<Integer,Double>(-217, 3.059577589179232E-4), new Pair<Integer,Double>(-216, 3.130152751019698E-4), new Pair<Integer,Double>(-215, 3.2045670505560477E-4), new Pair<Integer,Double>(-214, 3.282933403602868E-4), new Pair<Integer,Double>(-213, 3.3653647259747414E-4), new Pair<Integer,Double>(-212, 3.4519739334862553E-4), new Pair<Integer,Double>(-211, 3.542873941951994E-4), new Pair<Integer,Double>(-210, 3.6381776671865406E-4), new Pair<Integer,Double>(-209, 3.737998025004482E-4), new Pair<Integer,Double>(-208, 3.842447931220402E-4), new Pair<Integer,Double>(-207, 3.9516403016488875E-4), new Pair<Integer,Double>(-206, 4.0656880521045186E-4), new Pair<Integer,Double>(-205, 4.184704098401885E-4), new Pair<Integer,Double>(-204, 4.3087821722982814E-4), new Pair<Integer,Double>(-203, 4.4379392693218514E-4), new Pair<Integer,Double>(-202, 4.5721732009434523E-4), new Pair<Integer,Double>(-201, 4.7114817786339373E-4), new Pair<Integer,Double>(-200, 4.8558628138641643E-4), new Pair<Integer,Double>(-199, 5.005314118104988E-4), new Pair<Integer,Double>(-198, 5.159833502827266E-4), new Pair<Integer,Double>(-197, 5.319418779501851E-4), new Pair<Integer,Double>(-196, 5.484067759599599E-4), new Pair<Integer,Double>(-195, 5.653778254591369E-4), new Pair<Integer,Double>(-194, 5.828548075948015E-4), new Pair<Integer,Double>(-193, 6.008375035140394E-4), new Pair<Integer,Double>(-192, 6.193256943639358E-4), new Pair<Integer,Double>(-191, 6.383191612915764E-4), new Pair<Integer,Double>(-190, 6.578176854440472E-4), new Pair<Integer,Double>(-189, 6.778210479684333E-4), new Pair<Integer,Double>(-188, 6.983290300118204E-4), new Pair<Integer,Double>(-187, 7.193414127212942E-4), new Pair<Integer,Double>(-186, 7.4085797724394E-4), new Pair<Integer,Double>(-185, 7.628785047268438E-4), new Pair<Integer,Double>(-184, 7.854027763170908E-4), new Pair<Integer,Double>(-183, 8.084305731617667E-4), new Pair<Integer,Double>(-182, 8.319616764079573E-4), new Pair<Integer,Double>(-181, 8.559958672027479E-4), new Pair<Integer,Double>(-180, 8.80532926693224E-4), new Pair<Integer,Double>(-179, 9.055726360264715E-4), new Pair<Integer,Double>(-178, 9.311147763495754E-4), new Pair<Integer,Double>(-177, 9.57159128809622E-4), new Pair<Integer,Double>(-176, 9.837054745536963E-4), new Pair<Integer,Double>(-175, 0.0010107535947288845), new Pair<Integer,Double>(-174, 0.0010383052420264377), new Pair<Integer,Double>(-173, 0.0010663700553142743), new Pair<Integer,Double>(-172, 0.0010949596450044764), new Pair<Integer,Double>(-171, 0.001124085621509129), new Pair<Integer,Double>(-170, 0.0011537595952403152), new Pair<Integer,Double>(-169, 0.0011839931766101186), new Pair<Integer,Double>(-168, 0.0012147979760306227), new Pair<Integer,Double>(-167, 0.0012461856039139116), new Pair<Integer,Double>(-166, 0.0012781676706720686), new Pair<Integer,Double>(-165, 0.0013107557867171776), new Pair<Integer,Double>(-164, 0.0013439615624613215), new Pair<Integer,Double>(-163, 0.0013777966083165852), new Pair<Integer,Double>(-162, 0.001412272534695051), new Pair<Integer,Double>(-161, 0.0014474009520088038), new Pair<Integer,Double>(-160, 0.001483193470669926), new Pair<Integer,Double>(-159, 0.001519661701090502), new Pair<Integer,Double>(-158, 0.0015568172536826151), new Pair<Integer,Double>(-157, 0.0015946717388583497), new Pair<Integer,Double>(-156, 0.0016332367670297881), new Pair<Integer,Double>(-155, 0.0016725239486090147), new Pair<Integer,Double>(-154, 0.0017125448940081137), new Pair<Integer,Double>(-153, 0.0017533112136391678), new Pair<Integer,Double>(-152, 0.0017948345179142613), new Pair<Integer,Double>(-151, 0.0018371264172454772), new Pair<Integer,Double>(-150, 0.001880198522044899), new Pair<Integer,Double>(-149, 0.0019240624427246116), new Pair<Integer,Double>(-148, 0.001968729789696697), new Pair<Integer,Double>(-147, 0.0020142121733732407), new Pair<Integer,Double>(-146, 0.002060521204166324), new Pair<Integer,Double>(-145, 0.0021076684924880326), new Pair<Integer,Double>(-144, 0.00215566144256165), new Pair<Integer,Double>(-143, 0.002204490633855266), new Pair<Integer,Double>(-142, 0.00225414243964817), new Pair<Integer,Double>(-141, 0.0023046032332196516), new Pair<Integer,Double>(-140, 0.0023558593878490013), new Pair<Integer,Double>(-139, 0.002407897276815508), new Pair<Integer,Double>(-138, 0.0024607032733984626), new Pair<Integer,Double>(-137, 0.002514263750877155), new Pair<Integer,Double>(-136, 0.002568565082530874), new Pair<Integer,Double>(-135, 0.002623593641638911), new Pair<Integer,Double>(-134, 0.002679335801480555), new Pair<Integer,Double>(-133, 0.0027357779353350967), new Pair<Integer,Double>(-132, 0.002792906416481825), new Pair<Integer,Double>(-131, 0.00285070761820003), new Pair<Integer,Double>(-130, 0.0029091679137690026), new Pair<Integer,Double>(-129, 0.002968273676468031), new Pair<Integer,Double>(-128, 0.003028011279576406), new Pair<Integer,Double>(-127, 0.0030883670963734186), new Pair<Integer,Double>(-126, 0.003149327500138357), new Pair<Integer,Double>(-125, 0.003210878864150512), new Pair<Integer,Double>(-124, 0.0032730075616891736), new Pair<Integer,Double>(-123, 0.0033356999660336304), new Pair<Integer,Double>(-122, 0.0033989424504631744), new Pair<Integer,Double>(-121, 0.003462721388257094), new Pair<Integer,Double>(-120, 0.0035270231526946796), new Pair<Integer,Double>(-119, 0.0035918341170552213), new Pair<Integer,Double>(-118, 0.0036571406546180084), new Pair<Integer,Double>(-117, 0.0037229291386623306), new Pair<Integer,Double>(-116, 0.003789185942467479), new Pair<Integer,Double>(-115, 0.003855897439312743), new Pair<Integer,Double>(-114, 0.003923043602622363), new Pair<Integer,Double>(-113, 0.003990578806400385), new Pair<Integer,Double>(-112, 0.004058451024795804), new Pair<Integer,Double>(-111, 0.0041266082319576175), new Pair<Integer,Double>(-110, 0.00419499840203482), new Pair<Integer,Double>(-109, 0.0042635695091764085), new Pair<Integer,Double>(-108, 0.004332269527531378), new Pair<Integer,Double>(-107, 0.004401046431248725), new Pair<Integer,Double>(-106, 0.004469848194477447), new Pair<Integer,Double>(-105, 0.004538622791366541), new Pair<Integer,Double>(-104, 0.004607318196064999), new Pair<Integer,Double>(-103, 0.0046758823827218205), new Pair<Integer,Double>(-102, 0.004744263325486001), new Pair<Integer,Double>(-101, 0.004812408998506535), new Pair<Integer,Double>(-100, 0.004880267375932421), new Pair<Integer,Double>(-99, 0.004947786431912652), new Pair<Integer,Double>(-98, 0.005014914140596227), new Pair<Integer,Double>(-97, 0.00508159847613214), new Pair<Integer,Double>(-96, 0.005147787412669388), new Pair<Integer,Double>(-95, 0.005213428924356968), new Pair<Integer,Double>(-94, 0.0052784709853438755), new Pair<Integer,Double>(-93, 0.005342861569779106), new Pair<Integer,Double>(-92, 0.005406548651811655), new Pair<Integer,Double>(-91, 0.00546948020559052), new Pair<Integer,Double>(-90, 0.0055316042052646975), new Pair<Integer,Double>(-89, 0.0055928686249831815), new Pair<Integer,Double>(-88, 0.00565322143889497), new Pair<Integer,Double>(-87, 0.005712610621149058), new Pair<Integer,Double>(-86, 0.005770984145894442), new Pair<Integer,Double>(-85, 0.005828289987280117), new Pair<Integer,Double>(-84, 0.005884484079524634), new Pair<Integer,Double>(-83, 0.0059395541971247485), new Pair<Integer,Double>(-82, 0.005993496074646772), new Pair<Integer,Double>(-81, 0.006046305446657014), new Pair<Integer,Double>(-80, 0.006097978047721785), new Pair<Integer,Double>(-79, 0.006148509612407397), new Pair<Integer,Double>(-78, 0.0061978958752801575), new Pair<Integer,Double>(-77, 0.0062461325709063775), new Pair<Integer,Double>(-76, 0.006293215433852369), new Pair<Integer,Double>(-75, 0.0063391401986844405), new Pair<Integer,Double>(-74, 0.006383902599968901), new Pair<Integer,Double>(-73, 0.006427498372272066), new Pair<Integer,Double>(-72, 0.00646992325016024), new Pair<Integer,Double>(-71, 0.0065111729681997365), new Pair<Integer,Double>(-70, 0.006551243260956864), new Pair<Integer,Double>(-69, 0.006590129862997933), new Pair<Integer,Double>(-68, 0.006627828508889254), new Pair<Integer,Double>(-67, 0.006664334933197137), new Pair<Integer,Double>(-66, 0.006699644870487895), new Pair<Integer,Double>(-65, 0.006733754055327833), new Pair<Integer,Double>(-64, 0.006766658222283267), new Pair<Integer,Double>(-63, 0.006798353105920504), new Pair<Integer,Double>(-62, 0.006828834440805855), new Pair<Integer,Double>(-61, 0.00685809796150563), new Pair<Integer,Double>(-60, 0.006886139402586138), new Pair<Integer,Double>(-59, 0.006912954498613692), new Pair<Integer,Double>(-58, 0.0069385389841546), new Pair<Integer,Double>(-57, 0.0069628885937751735), new Pair<Integer,Double>(-56, 0.006985999062041721), new Pair<Integer,Double>(-55, 0.0070078661235205555), new Pair<Integer,Double>(-54, 0.007028467255690983), new Pair<Integer,Double>(-53, 0.007047706907684303), new Pair<Integer,Double>(-52, 0.007065471271544807), new Pair<Integer,Double>(-51, 0.007081646539316792), new Pair<Integer,Double>(-50, 0.007096118903044555), new Pair<Integer,Double>(-49, 0.00710877455477239), new Pair<Integer,Double>(-48, 0.007119499686544591), new Pair<Integer,Double>(-47, 0.007128180490405454), new Pair<Integer,Double>(-46, 0.007134703158399274), new Pair<Integer,Double>(-45, 0.007138953882570347), new Pair<Integer,Double>(-44, 0.007140818854962967), new Pair<Integer,Double>(-43, 0.00714018426762143), new Pair<Integer,Double>(-42, 0.007136936312590032), new Pair<Integer,Double>(-41, 0.007130961181913066), new Pair<Integer,Double>(-40, 0.007122145067634828), new Pair<Integer,Double>(-39, 0.007110374161799614), new Pair<Integer,Double>(-38, 0.007095534656451718), new Pair<Integer,Double>(-37, 0.007077512743635436), new Pair<Integer,Double>(-36, 0.007056194615395063), new Pair<Integer,Double>(-35, 0.0070314664637748945), new Pair<Integer,Double>(-34, 0.0070032144808192245), new Pair<Integer,Double>(-33, 0.0069713248585723505), new Pair<Integer,Double>(-32, 0.006935683789078565), new Pair<Integer,Double>(-31, 0.006896177464382165), new Pair<Integer,Double>(-30, 0.006852692076527444), new Pair<Integer,Double>(-29, 0.0068051138175586985), new Pair<Integer,Double>(-28, 0.006753328879520223), new Pair<Integer,Double>(-27, 0.006697223454456314), new Pair<Integer,Double>(-26, 0.006636683734411266), new Pair<Integer,Double>(-25, 0.006571595911429373), new Pair<Integer,Double>(-24, 0.006501901865600835), new Pair<Integer,Double>(-23, 0.006427766229199461), new Pair<Integer,Double>(-22, 0.006349409322544967), new Pair<Integer,Double>(-21, 0.006267051465957067), new Pair<Integer,Double>(-20, 0.006180912979755476), new Pair<Integer,Double>(-19, 0.006091214184259908), new Pair<Integer,Double>(-18, 0.005998175399790077), new Pair<Integer,Double>(-17, 0.005902016946665696), new Pair<Integer,Double>(-16, 0.005802959145206481), new Pair<Integer,Double>(-15, 0.005701222315732148), new Pair<Integer,Double>(-14, 0.005597026778562408), new Pair<Integer,Double>(-13, 0.005490592854016977), new Pair<Integer,Double>(-12, 0.005382140862415569), new Pair<Integer,Double>(-11, 0.005271891124077898), new Pair<Integer,Double>(-10, 0.00516006395932368), new Pair<Integer,Double>(-9, 0.005046879688472627), new Pair<Integer,Double>(-8, 0.004932558631844455), new Pair<Integer,Double>(-7, 0.004817321109758877), new Pair<Integer,Double>(-6, 0.004701387442535608), new Pair<Integer,Double>(-5, 0.0045849779504943625), new Pair<Integer,Double>(-4, 0.004468312953954856), new Pair<Integer,Double>(-3, 0.0043516127732368005), new Pair<Integer,Double>(-2, 0.004235097728659913), new Pair<Integer,Double>(-1, 0.004118988140543906), new Pair<Integer,Double>(0, 0.004003504329208493), new Pair<Integer,Double>(1, 0.0038888666149733894), new Pair<Integer,Double>(2, 0.00377529531815831), new Pair<Integer,Double>(3, 0.0036630107590829688), new Pair<Integer,Double>(4, 0.00355223325806708), new Pair<Integer,Double>(5, 0.003443183135430358), new Pair<Integer,Double>(6, 0.003336044668723669), new Pair<Integer,Double>(7, 0.0032308579644224874), new Pair<Integer,Double>(8, 0.003127627086233437), new Pair<Integer,Double>(9, 0.0030263560978631447), new Pair<Integer,Double>(10, 0.0029270490630182357), new Pair<Integer,Double>(11, 0.002829710045405335), new Pair<Integer,Double>(12, 0.002734343108731069), new Pair<Integer,Double>(13, 0.0026409523167020615), new Pair<Integer,Double>(14, 0.0025495417330249396), new Pair<Integer,Double>(15, 0.002460115421406328), new Pair<Integer,Double>(16, 0.0023726774455528534), new Pair<Integer,Double>(17, 0.0022872318691711394), new Pair<Integer,Double>(18, 0.002203782755967813), new Pair<Integer,Double>(19, 0.0021223341696494998), new Pair<Integer,Double>(20, 0.002042890173922824), new Pair<Integer,Double>(21, 0.0019654548324944117), new Pair<Integer,Double>(22, 0.0018900322090708885), new Pair<Integer,Double>(23, 0.00181662636735888), new Pair<Integer,Double>(24, 0.0017452413710650112), new Pair<Integer,Double>(25, 0.001675881283895908), new Pair<Integer,Double>(26, 0.001608550169558196), new Pair<Integer,Double>(27, 0.0015432520917585007), new Pair<Integer,Double>(28, 0.0014799911142034472), new Pair<Integer,Double>(29, 0.0014187713005996614), new Pair<Integer,Double>(30, 0.001359596714653768), new Pair<Integer,Double>(31, 0.0013024714200723937), new Pair<Integer,Double>(32, 0.0012473994805621634), new Pair<Integer,Double>(33, 0.0011943849598297022), new Pair<Integer,Double>(34, 0.001143431921581636), new Pair<Integer,Double>(35, 0.0010945444295245902), new Pair<Integer,Double>(36, 0.0010477178032926953), new Pair<Integer,Double>(37, 0.0010029123862301005), new Pair<Integer,Double>(38, 9.600797776084589E-4), new Pair<Integer,Double>(39, 9.191715766994251E-4), new Pair<Integer,Double>(40, 8.801393827746526E-4), new Pair<Integer,Double>(41, 8.429347951057955E-4), new Pair<Integer,Double>(42, 8.075094129645075E-4), new Pair<Integer,Double>(43, 7.738148356224423E-4), new Pair<Integer,Double>(44, 7.418026623512542E-4), new Pair<Integer,Double>(45, 7.114244924225969E-4), new Pair<Integer,Double>(46, 6.826319251081241E-4), new Pair<Integer,Double>(47, 6.5537655967949E-4), new Pair<Integer,Double>(48, 6.296099954083481E-4), new Pair<Integer,Double>(49, 6.052838315663525E-4), new Pair<Integer,Double>(50, 5.823496674251568E-4), new Pair<Integer,Double>(51, 5.607591022564153E-4), new Pair<Integer,Double>(52, 5.404637353317815E-4), new Pair<Integer,Double>(53, 5.214151659229095E-4), new Pair<Integer,Double>(54, 5.035649933014529E-4), new Pair<Integer,Double>(55, 4.8686481673906575E-4), new Pair<Integer,Double>(56, 4.7126623550740196E-4), new Pair<Integer,Double>(57, 4.567208488781154E-4), new Pair<Integer,Double>(58, 4.431802561228598E-4), new Pair<Integer,Double>(59, 4.30596056513289E-4), new Pair<Integer,Double>(60, 4.189198493210571E-4), new Pair<Integer,Double>(61, 4.081032338178178E-4), new Pair<Integer,Double>(62, 3.9809780927522494E-4), new Pair<Integer,Double>(63, 3.888551749649324E-4), new Pair<Integer,Double>(64, 3.803269301585942E-4), new Pair<Integer,Double>(65, 3.7246467412786397E-4), new Pair<Integer,Double>(66, 3.6522384180415175E-4), new Pair<Integer,Double>(67, 3.585752107578902E-4), new Pair<Integer,Double>(68, 3.524933942192684E-4), new Pair<Integer,Double>(69, 3.4695300541847507E-4), new Pair<Integer,Double>(70, 3.4192865758569924E-4), new Pair<Integer,Double>(71, 3.3739496395112967E-4), new Pair<Integer,Double>(72, 3.3332653774495517E-4), new Pair<Integer,Double>(73, 3.296979921973647E-4), new Pair<Integer,Double>(74, 3.2648394053854714E-4), new Pair<Integer,Double>(75, 3.2365899599869134E-4), new Pair<Integer,Double>(76, 3.2119777180798613E-4), new Pair<Integer,Double>(77, 3.190748811966203E-4), new Pair<Integer,Double>(78, 3.1726493739478293E-4), new Pair<Integer,Double>(79, 3.1574255363266265E-4), new Pair<Integer,Double>(80, 3.1448234314044844E-4), new Pair<Integer,Double>(81, 3.1345891914832914E-4), new Pair<Integer,Double>(82, 3.126468948864936E-4), new Pair<Integer,Double>(83, 3.120208835851308E-4), new Pair<Integer,Double>(84, 3.115554984744293E-4), new Pair<Integer,Double>(85, 3.112253527845783E-4), new Pair<Integer,Double>(86, 3.1100505974576654E-4), new Pair<Integer,Double>(87, 3.1086923258818284E-4), new Pair<Integer,Double>(88, 3.1079248454201605E-4), new Pair<Integer,Double>(89, 3.1074942883745516E-4), new Pair<Integer,Double>(90, 3.1071467870468893E-4), new Pair<Integer,Double>(91, 3.1066284737390625E-4), new Pair<Integer,Double>(92, 3.105685480752959E-4), new Pair<Integer,Double>(93, 3.104063940390469E-4), new Pair<Integer,Double>(94, 3.1015099849534807E-4), new Pair<Integer,Double>(95, 3.097769746743882E-4), new Pair<Integer,Double>(96, 3.092643687909541E-4), new Pair<Integer,Double>(97, 3.086149589982245E-4), new Pair<Integer,Double>(98, 3.078359564339763E-4), new Pair<Integer,Double>(99, 3.069345722359859E-4), new Pair<Integer,Double>(100, 3.059180175420301E-4), new Pair<Integer,Double>(101, 3.047935034898855E-4), new Pair<Integer,Double>(102, 3.0356824121732887E-4), new Pair<Integer,Double>(103, 3.022494418621368E-4), new Pair<Integer,Double>(104, 3.008443165620861E-4), new Pair<Integer,Double>(105, 2.993600764549533E-4), new Pair<Integer,Double>(106, 2.9780393267851517E-4), new Pair<Integer,Double>(107, 2.9618309637054847E-4), new Pair<Integer,Double>(108, 2.945047786688296E-4), new Pair<Integer,Double>(109, 2.9277619071113554E-4), new Pair<Integer,Double>(110, 2.910045436352428E-4), new Pair<Integer,Double>(111, 2.8919704857892814E-4), new Pair<Integer,Double>(112, 2.8736091667996817E-4), new Pair<Integer,Double>(113, 2.8550335907613953E-4), new Pair<Integer,Double>(114, 2.83631586905219E-4), new Pair<Integer,Double>(115, 2.817528113049833E-4), new Pair<Integer,Double>(116, 2.7987424341320897E-4), new Pair<Integer,Double>(117, 2.780030943676727E-4), new Pair<Integer,Double>(118, 2.7614657530615136E-4), new Pair<Integer,Double>(119, 2.7431189736642136E-4), new Pair<Integer,Double>(120, 2.725062716862596E-4), new Pair<Integer,Double>(121, 2.707369094034427E-4), new Pair<Integer,Double>(122, 2.6901102165574717E-4), new Pair<Integer,Double>(123, 2.6733581958095E-4), new Pair<Integer,Double>(124, 2.6571851431682754E-4), new Pair<Integer,Double>(125, 2.641663170011567E-4), new Pair<Integer,Double>(126, 2.6268485293332744E-4), new Pair<Integer,Double>(127, 2.612734040591833E-4), new Pair<Integer,Double>(128, 2.5992966648618145E-4), new Pair<Integer,Double>(129, 2.586513363217787E-4), new Pair<Integer,Double>(130, 2.574361096734321E-4), new Pair<Integer,Double>(131, 2.5628168264859853E-4), new Pair<Integer,Double>(132, 2.551857513547352E-4), new Pair<Integer,Double>(133, 2.5414601189929884E-4), new Pair<Integer,Double>(134, 2.5316016038974656E-4), new Pair<Integer,Double>(135, 2.5222589293353524E-4), new Pair<Integer,Double>(136, 2.5134090563812197E-4), new Pair<Integer,Double>(137, 2.5050289461096365E-4), new Pair<Integer,Double>(138, 2.4970955595951733E-4), new Pair<Integer,Double>(139, 2.4895858579123987E-4), new Pair<Integer,Double>(140, 2.4824768021358836E-4), new Pair<Integer,Double>(141, 2.475745353340198E-4), new Pair<Integer,Double>(142, 2.4693684725999107E-4), new Pair<Integer,Double>(143, 2.463323120989591E-4), new Pair<Integer,Double>(144, 2.45758625958381E-4), new Pair<Integer,Double>(145, 2.452134849457137E-4), new Pair<Integer,Double>(146, 2.446945851684142E-4), new Pair<Integer,Double>(147, 2.441996227339394E-4), new Pair<Integer,Double>(148, 2.4372629374974647E-4), new Pair<Integer,Double>(149, 2.4327229432329214E-4), new Pair<Integer,Double>(150, 2.4283532056203352E-4), new Pair<Integer,Double>(151, 2.4241306857342756E-4), new Pair<Integer,Double>(152, 2.4200323446493127E-4), new Pair<Integer,Double>(153, 2.4160351434400154E-4), new Pair<Integer,Double>(154, 2.4121160431809548E-4), new Pair<Integer,Double>(155, 2.4082520049466992E-4), new Pair<Integer,Double>(156, 2.4044231832542033E-4), new Pair<Integer,Double>(157, 2.4006225063899538E-4), new Pair<Integer,Double>(158, 2.3968460960828208E-4), new Pair<Integer,Double>(159, 2.3930900740616758E-4), new Pair<Integer,Double>(160, 2.389350562055389E-4), new Pair<Integer,Double>(161, 2.3856236817928317E-4), new Pair<Integer,Double>(162, 2.3819055550028742E-4), new Pair<Integer,Double>(163, 2.378192303414387E-4), new Pair<Integer,Double>(164, 2.3744800487562412E-4), new Pair<Integer,Double>(165, 2.3707649127573078E-4), new Pair<Integer,Double>(166, 2.367043017146457E-4), new Pair<Integer,Double>(167, 2.3633104836525597E-4), new Pair<Integer,Double>(168, 2.3595634340044865E-4), new Pair<Integer,Double>(169, 2.3557979899311085E-4), new Pair<Integer,Double>(170, 2.3520102731612954E-4), new Pair<Integer,Double>(171, 2.3481964054239196E-4), new Pair<Integer,Double>(172, 2.3443525084478504E-4), new Pair<Integer,Double>(173, 2.3404747039619593E-4), new Pair<Integer,Double>(174, 2.3365591136951164E-4), new Pair<Integer,Double>(175, 2.3326018593761925E-4), new Pair<Integer,Double>(176, 2.328599062734059E-4), new Pair<Integer,Double>(177, 2.3245468454975861E-4), new Pair<Integer,Double>(178, 2.320441329395645E-4), new Pair<Integer,Double>(179, 2.3162786361571058E-4), new Pair<Integer,Double>(180, 2.3120548875108394E-4), new Pair<Integer,Double>(181, 2.3077662051857164E-4), new Pair<Integer,Double>(182, 2.303408710910608E-4), new Pair<Integer,Double>(183, 2.298978526414384E-4), new Pair<Integer,Double>(184, 2.2944717734259162E-4), new Pair<Integer,Double>(185, 2.289884573674075E-4), new Pair<Integer,Double>(186, 2.2852139114842897E-4), new Pair<Integer,Double>(187, 2.2804602215682244E-4), new Pair<Integer,Double>(188, 2.2756248012341024E-4), new Pair<Integer,Double>(189, 2.270708947790147E-4), new Pair<Integer,Double>(190, 2.265713958544582E-4), new Pair<Integer,Double>(191, 2.260641130805629E-4), new Pair<Integer,Double>(192, 2.2554917618815122E-4), new Pair<Integer,Double>(193, 2.250267149080454E-4), new Pair<Integer,Double>(194, 2.2449685897106786E-4), new Pair<Integer,Double>(195, 2.239597381080408E-4), new Pair<Integer,Double>(196, 2.234154820497866E-4), new Pair<Integer,Double>(197, 2.2286422052712754E-4), new Pair<Integer,Double>(198, 2.2230608327088595E-4), new Pair<Integer,Double>(199, 2.217412000118841E-4), new Pair<Integer,Double>(200, 2.2116970048094436E-4), new Pair<Integer,Double>(201, 2.2059171440888905E-4), new Pair<Integer,Double>(202, 2.2000737152654044E-4), new Pair<Integer,Double>(203, 2.1941680156472082E-4), new Pair<Integer,Double>(204, 2.1882013425425254E-4), new Pair<Integer,Double>(205, 2.1821749932595793E-4), new Pair<Integer,Double>(206, 2.1760902651065926E-4), new Pair<Integer,Double>(207, 2.1699484553917882E-4), new Pair<Integer,Double>(208, 2.1637508614233904E-4), new Pair<Integer,Double>(209, 2.157498780509621E-4), new Pair<Integer,Double>(210, 2.1511935099587041E-4), new Pair<Integer,Double>(211, 2.1448363470788622E-4), new Pair<Integer,Double>(212, 2.1384285891783188E-4), new Pair<Integer,Double>(213, 2.1319715335652964E-4), new Pair<Integer,Double>(214, 2.125466477548019E-4), new Pair<Integer,Double>(215, 2.1189147184347087E-4), new Pair<Integer,Double>(216, 2.1123175535335897E-4), new Pair<Integer,Double>(217, 2.1056762801528845E-4), new Pair<Integer,Double>(218, 2.098992195600816E-4), new Pair<Integer,Double>(219, 2.092266597185608E-4), new Pair<Integer,Double>(220, 2.085500782215483E-4), new Pair<Integer,Double>(221, 2.0786960479986648E-4), new Pair<Integer,Double>(222, 2.071853691843376E-4), new Pair<Integer,Double>(223, 2.0649750110578397E-4), new Pair<Integer,Double>(224, 2.0580613029502791E-4), new Pair<Integer,Double>(225, 2.0511138648289176E-4), new Pair<Integer,Double>(226, 2.0441339940019778E-4), new Pair<Integer,Double>(227, 2.0371229877776833E-4), new Pair<Integer,Double>(228, 2.0300821434642566E-4), new Pair<Integer,Double>(229, 2.023012758369922E-4), new Pair<Integer,Double>(230, 2.0159161298029013E-4), new Pair<Integer,Double>(231, 2.0087935550714187E-4), new Pair<Integer,Double>(232, 2.0016463314836963E-4), new Pair<Integer,Double>(233, 1.9944757563479577E-4), new Pair<Integer,Double>(234, 1.9872831269724265E-4), new Pair<Integer,Double>(235, 1.980069740665325E-4), new Pair<Integer,Double>(236, 1.972836894734877E-4), new Pair<Integer,Double>(237, 1.9655858864893051E-4), new Pair<Integer,Double>(238, 1.9583180132368323E-4), new Pair<Integer,Double>(239, 1.9510345722856829E-4), new Pair<Integer,Double>(240, 1.9437368609440787E-4), new Pair<Integer,Double>(241, 1.9364261765202433E-4), new Pair<Integer,Double>(242, 1.9291038163224E-4), new Pair<Integer,Double>(243, 1.9217710776587714E-4), new Pair<Integer,Double>(244, 1.914429257837581E-4), new Pair<Integer,Double>(245, 1.907079654167052E-4), new Pair<Integer,Double>(246, 1.8997235639554077E-4), new Pair<Integer,Double>(247, 1.8923622845108706E-4), new Pair<Integer,Double>(248, 1.8849971131416638E-4), new Pair<Integer,Double>(249, 1.8776293471560115E-4), new Pair<Integer,Double>(250, 1.8702602838621354E-4)); @SuppressWarnings("unchecked") public static final List<Pair<Integer, Double>> defaultChipExoEmpiricalDistribution = Arrays.asList(new Pair<Integer,Double>(-200,9.95E-05), new Pair<Integer,Double>(-199,1.06E-04), new Pair<Integer,Double>(-198,1.12E-04), new Pair<Integer,Double>(-197,1.17E-04), new Pair<Integer,Double>(-196,1.21E-04), new Pair<Integer,Double>(-195,1.25E-04), new Pair<Integer,Double>(-194,1.29E-04), new Pair<Integer,Double>(-193,1.34E-04), new Pair<Integer,Double>(-192,1.41E-04), new Pair<Integer,Double>(-191,1.49E-04), new Pair<Integer,Double>(-190,1.55E-04), new Pair<Integer,Double>(-189,1.58E-04), new Pair<Integer,Double>(-188,1.57E-04), new Pair<Integer,Double>(-187,1.51E-04), new Pair<Integer,Double>(-186,1.42E-04), new Pair<Integer,Double>(-185,1.31E-04), new Pair<Integer,Double>(-184,1.22E-04), new Pair<Integer,Double>(-183,1.17E-04), new Pair<Integer,Double>(-182,1.17E-04), new Pair<Integer,Double>(-181,1.22E-04), new Pair<Integer,Double>(-180,1.30E-04), new Pair<Integer,Double>(-179,1.41E-04), new Pair<Integer,Double>(-178,1.53E-04), new Pair<Integer,Double>(-177,1.65E-04), new Pair<Integer,Double>(-176,1.75E-04), new Pair<Integer,Double>(-175,1.82E-04), new Pair<Integer,Double>(-174,1.85E-04), new Pair<Integer,Double>(-173,1.82E-04), new Pair<Integer,Double>(-172,1.73E-04), new Pair<Integer,Double>(-171,1.61E-04), new Pair<Integer,Double>(-170,1.49E-04), new Pair<Integer,Double>(-169,1.40E-04), new Pair<Integer,Double>(-168,1.39E-04), new Pair<Integer,Double>(-167,1.47E-04), new Pair<Integer,Double>(-166,1.61E-04), new Pair<Integer,Double>(-165,1.77E-04), new Pair<Integer,Double>(-164,1.90E-04), new Pair<Integer,Double>(-163,1.96E-04), new Pair<Integer,Double>(-162,1.91E-04), new Pair<Integer,Double>(-161,1.79E-04), new Pair<Integer,Double>(-160,1.63E-04), new Pair<Integer,Double>(-159,1.47E-04), new Pair<Integer,Double>(-158,1.35E-04), new Pair<Integer,Double>(-157,1.30E-04), new Pair<Integer,Double>(-156,1.31E-04), new Pair<Integer,Double>(-155,1.35E-04), new Pair<Integer,Double>(-154,1.40E-04), new Pair<Integer,Double>(-153,1.44E-04), new Pair<Integer,Double>(-152,1.44E-04), new Pair<Integer,Double>(-151,1.44E-04), new Pair<Integer,Double>(-150,1.43E-04), new Pair<Integer,Double>(-149,1.46E-04), new Pair<Integer,Double>(-148,1.55E-04), new Pair<Integer,Double>(-147,1.70E-04), new Pair<Integer,Double>(-146,1.90E-04), new Pair<Integer,Double>(-145,2.10E-04), new Pair<Integer,Double>(-144,2.28E-04), new Pair<Integer,Double>(-143,2.41E-04), new Pair<Integer,Double>(-142,2.45E-04), new Pair<Integer,Double>(-141,2.43E-04), new Pair<Integer,Double>(-140,2.36E-04), new Pair<Integer,Double>(-139,2.28E-04), new Pair<Integer,Double>(-138,2.21E-04), new Pair<Integer,Double>(-137,2.16E-04), new Pair<Integer,Double>(-136,2.14E-04), new Pair<Integer,Double>(-135,2.13E-04), new Pair<Integer,Double>(-134,2.13E-04), new Pair<Integer,Double>(-133,2.12E-04), new Pair<Integer,Double>(-132,2.09E-04), new Pair<Integer,Double>(-131,2.06E-04), new Pair<Integer,Double>(-130,2.04E-04), new Pair<Integer,Double>(-129,2.02E-04), new Pair<Integer,Double>(-128,2.03E-04), new Pair<Integer,Double>(-127,2.07E-04), new Pair<Integer,Double>(-126,2.12E-04), new Pair<Integer,Double>(-125,2.16E-04), new Pair<Integer,Double>(-124,2.18E-04), new Pair<Integer,Double>(-123,2.16E-04), new Pair<Integer,Double>(-122,2.07E-04), new Pair<Integer,Double>(-121,1.96E-04), new Pair<Integer,Double>(-120,1.84E-04), new Pair<Integer,Double>(-119,1.74E-04), new Pair<Integer,Double>(-118,1.71E-04), new Pair<Integer,Double>(-117,1.76E-04), new Pair<Integer,Double>(-116,1.85E-04), new Pair<Integer,Double>(-115,1.96E-04), new Pair<Integer,Double>(-114,2.05E-04), new Pair<Integer,Double>(-113,2.08E-04), new Pair<Integer,Double>(-112,2.03E-04), new Pair<Integer,Double>(-111,1.94E-04), new Pair<Integer,Double>(-110,1.89E-04), new Pair<Integer,Double>(-109,1.94E-04), new Pair<Integer,Double>(-108,2.15E-04), new Pair<Integer,Double>(-107,2.57E-04), new Pair<Integer,Double>(-106,3.10E-04), new Pair<Integer,Double>(-105,3.64E-04), new Pair<Integer,Double>(-104,4.09E-04), new Pair<Integer,Double>(-103,4.33E-04), new Pair<Integer,Double>(-102,4.29E-04), new Pair<Integer,Double>(-101,4.04E-04), new Pair<Integer,Double>(-100,3.69E-04), new Pair<Integer,Double>(-99,3.35E-04), new Pair<Integer,Double>(-98,3.12E-04), new Pair<Integer,Double>(-97,3.09E-04), new Pair<Integer,Double>(-96,3.22E-04), new Pair<Integer,Double>(-95,3.46E-04), new Pair<Integer,Double>(-94,3.76E-04), new Pair<Integer,Double>(-93,4.07E-04), new Pair<Integer,Double>(-92,4.33E-04), new Pair<Integer,Double>(-91,4.56E-04), new Pair<Integer,Double>(-90,4.76E-04), new Pair<Integer,Double>(-89,4.93E-04), new Pair<Integer,Double>(-88,5.08E-04), new Pair<Integer,Double>(-87,5.23E-04), new Pair<Integer,Double>(-86,5.34E-04), new Pair<Integer,Double>(-85,5.40E-04), new Pair<Integer,Double>(-84,5.37E-04), new Pair<Integer,Double>(-83,5.23E-04), new Pair<Integer,Double>(-82,4.96E-04), new Pair<Integer,Double>(-81,4.64E-04), new Pair<Integer,Double>(-80,4.34E-04), new Pair<Integer,Double>(-79,4.13E-04), new Pair<Integer,Double>(-78,4.10E-04), new Pair<Integer,Double>(-77,4.30E-04), new Pair<Integer,Double>(-76,4.67E-04), new Pair<Integer,Double>(-75,5.13E-04), new Pair<Integer,Double>(-74,5.59E-04), new Pair<Integer,Double>(-73,5.98E-04), new Pair<Integer,Double>(-72,6.22E-04), new Pair<Integer,Double>(-71,6.36E-04), new Pair<Integer,Double>(-70,6.42E-04), new Pair<Integer,Double>(-69,6.46E-04), new Pair<Integer,Double>(-68,6.52E-04), new Pair<Integer,Double>(-67,6.64E-04), new Pair<Integer,Double>(-66,6.83E-04), new Pair<Integer,Double>(-65,7.08E-04), new Pair<Integer,Double>(-64,7.39E-04), new Pair<Integer,Double>(-63,7.76E-04), new Pair<Integer,Double>(-62,8.19E-04), new Pair<Integer,Double>(-61,8.67E-04), new Pair<Integer,Double>(-60,9.20E-04), new Pair<Integer,Double>(-59,9.77E-04), new Pair<Integer,Double>(-58,0.001037507), new Pair<Integer,Double>(-57,0.001101733), new Pair<Integer,Double>(-56,0.001167547), new Pair<Integer,Double>(-55,0.00123299), new Pair<Integer,Double>(-54,0.001296101), new Pair<Integer,Double>(-53,0.001354923), new Pair<Integer,Double>(-52,0.001409824), new Pair<Integer,Double>(-51,0.00147049), new Pair<Integer,Double>(-50,0.001548934), new Pair<Integer,Double>(-49,0.00165717), new Pair<Integer,Double>(-48,0.001807211), new Pair<Integer,Double>(-47,0.00200444), new Pair<Integer,Double>(-46,0.002227721), new Pair<Integer,Double>(-45,0.002449285), new Pair<Integer,Double>(-44,0.002641363), new Pair<Integer,Double>(-43,0.002776188), new Pair<Integer,Double>(-42,0.002836351), new Pair<Integer,Double>(-41,0.002845881), new Pair<Integer,Double>(-40,0.002839165), new Pair<Integer,Double>(-39,0.00285059), new Pair<Integer,Double>(-38,0.002914546), new Pair<Integer,Double>(-37,0.003054999), new Pair<Integer,Double>(-36,0.003254242), new Pair<Integer,Double>(-35,0.003484147), new Pair<Integer,Double>(-34,0.003716585), new Pair<Integer,Double>(-33,0.003923427), new Pair<Integer,Double>(-32,0.004091559), new Pair<Integer,Double>(-31,0.004267904), new Pair<Integer,Double>(-30,0.004514403), new Pair<Integer,Double>(-29,0.004892992), new Pair<Integer,Double>(-28,0.005465608), new Pair<Integer,Double>(-27,0.006242892), new Pair<Integer,Double>(-26,0.007030288), new Pair<Integer,Double>(-25,0.00758194), new Pair<Integer,Double>(-24,0.007651997), new Pair<Integer,Double>(-23,0.006994602), new Pair<Integer,Double>(-22,0.00556114), new Pair<Integer,Double>(-21,0.00409194), new Pair<Integer,Double>(-20,0.003524569), new Pair<Integer,Double>(-19,0.004796593), new Pair<Integer,Double>(-18,0.008845579), new Pair<Integer,Double>(-17,0.016163108), new Pair<Integer,Double>(-16,0.025456817), new Pair<Integer,Double>(-15,0.03498836), new Pair<Integer,Double>(-14,0.043019388), new Pair<Integer,Double>(-13,0.047811552), new Pair<Integer,Double>(-12,0.0481366), new Pair<Integer,Double>(-11,0.044806657), new Pair<Integer,Double>(-10,0.039143942), new Pair<Integer,Double>(-9,0.032470674), new Pair<Integer,Double>(-8,0.026109074), new Pair<Integer,Double>(-7,0.021118333), new Pair<Integer,Double>(-6,0.017505534), new Pair<Integer,Double>(-5,0.015014735), new Pair<Integer,Double>(-4,0.013389992), new Pair<Integer,Double>(-3,0.012375362), new Pair<Integer,Double>(-2,0.011749289), new Pair<Integer,Double>(-1,0.011427777), new Pair<Integer,Double>(0,0.011361217), new Pair<Integer,Double>(1,0.011500002), new Pair<Integer,Double>(2,0.011794522), new Pair<Integer,Double>(3,0.012179967), new Pair<Integer,Double>(4,0.012530715), new Pair<Integer,Double>(5,0.012705942), new Pair<Integer,Double>(6,0.012564825), new Pair<Integer,Double>(7,0.011966538), new Pair<Integer,Double>(8,0.01083288), new Pair<Integer,Double>(9,0.009336146), new Pair<Integer,Double>(10,0.007711249), new Pair<Integer,Double>(11,0.006193107), new Pair<Integer,Double>(12,0.005016636), new Pair<Integer,Double>(13,0.004352368), new Pair<Integer,Double>(14,0.004113302), new Pair<Integer,Double>(15,0.004148055), new Pair<Integer,Double>(16,0.00430524), new Pair<Integer,Double>(17,0.004433475), new Pair<Integer,Double>(18,0.004414343), new Pair<Integer,Double>(19,0.0042613), new Pair<Integer,Double>(20,0.004020769), new Pair<Integer,Double>(21,0.003739175), new Pair<Integer,Double>(22,0.003462941), new Pair<Integer,Double>(23,0.003229225), new Pair<Integer,Double>(24,0.003038117), new Pair<Integer,Double>(25,0.002880441), new Pair<Integer,Double>(26,0.002747021), new Pair<Integer,Double>(27,0.002628682), new Pair<Integer,Double>(28,0.002518595), new Pair<Integer,Double>(29,0.002419323), new Pair<Integer,Double>(30,0.002335776), new Pair<Integer,Double>(31,0.002272864), new Pair<Integer,Double>(32,0.002235498), new Pair<Integer,Double>(33,0.002224965), new Pair<Integer,Double>(34,0.002228061), new Pair<Integer,Double>(35,0.002227957), new Pair<Integer,Double>(36,0.002207828), new Pair<Integer,Double>(37,0.002150845), new Pair<Integer,Double>(38,0.002046654), new Pair<Integer,Double>(39,0.001910799), new Pair<Integer,Double>(40,0.001765296), new Pair<Integer,Double>(41,0.001632161), new Pair<Integer,Double>(42,0.00153341), new Pair<Integer,Double>(43,0.001484774), new Pair<Integer,Double>(44,0.001476834), new Pair<Integer,Double>(45,0.001493884), new Pair<Integer,Double>(46,0.001520219), new Pair<Integer,Double>(47,0.001540134), new Pair<Integer,Double>(48,0.00154093), new Pair<Integer,Double>(49,0.001521934), new Pair<Integer,Double>(50,0.001485484), new Pair<Integer,Double>(51,0.001433913), new Pair<Integer,Double>(52,0.001369557), new Pair<Integer,Double>(53,0.001295693), new Pair<Integer,Double>(54,0.001219368), new Pair<Integer,Double>(55,0.00114857), new Pair<Integer,Double>(56,0.001091287), new Pair<Integer,Double>(57,0.001055508), new Pair<Integer,Double>(58,0.001046496), new Pair<Integer,Double>(59,0.001058612), new Pair<Integer,Double>(60,0.001083493), new Pair<Integer,Double>(61,0.001112776), new Pair<Integer,Double>(62,0.001138096), new Pair<Integer,Double>(63,0.001153112), new Pair<Integer,Double>(64,0.001159573), new Pair<Integer,Double>(65,0.00116125), new Pair<Integer,Double>(66,0.001161914), new Pair<Integer,Double>(67,0.001165335), new Pair<Integer,Double>(68,0.001173884), new Pair<Integer,Double>(69,0.001184332), new Pair<Integer,Double>(70,0.001192047), new Pair<Integer,Double>(71,0.0011924), new Pair<Integer,Double>(72,0.00118076), new Pair<Integer,Double>(73,0.001154242), new Pair<Integer,Double>(74,0.001116945), new Pair<Integer,Double>(75,0.001074714), new Pair<Integer,Double>(76,0.001033392), new Pair<Integer,Double>(77,9.99E-04), new Pair<Integer,Double>(78,9.75E-04), new Pair<Integer,Double>(79,9.60E-04), new Pair<Integer,Double>(80,9.48E-04), new Pair<Integer,Double>(81,9.37E-04), new Pair<Integer,Double>(82,9.21E-04), new Pair<Integer,Double>(83,8.97E-04), new Pair<Integer,Double>(84,8.67E-04), new Pair<Integer,Double>(85,8.35E-04), new Pair<Integer,Double>(86,8.03E-04), new Pair<Integer,Double>(87,7.75E-04), new Pair<Integer,Double>(88,7.53E-04), new Pair<Integer,Double>(89,7.37E-04), new Pair<Integer,Double>(90,7.25E-04), new Pair<Integer,Double>(91,7.15E-04), new Pair<Integer,Double>(92,7.07E-04), new Pair<Integer,Double>(93,6.99E-04), new Pair<Integer,Double>(94,6.90E-04), new Pair<Integer,Double>(95,6.76E-04), new Pair<Integer,Double>(96,6.57E-04), new Pair<Integer,Double>(97,6.31E-04), new Pair<Integer,Double>(98,5.96E-04), new Pair<Integer,Double>(99,5.59E-04), new Pair<Integer,Double>(100,5.26E-04), new Pair<Integer,Double>(101,5.04E-04), new Pair<Integer,Double>(102,5.00E-04), new Pair<Integer,Double>(103,5.17E-04), new Pair<Integer,Double>(104,5.50E-04), new Pair<Integer,Double>(105,5.87E-04), new Pair<Integer,Double>(106,6.20E-04), new Pair<Integer,Double>(107,6.38E-04), new Pair<Integer,Double>(108,6.35E-04), new Pair<Integer,Double>(109,6.15E-04), new Pair<Integer,Double>(110,5.85E-04), new Pair<Integer,Double>(111,5.53E-04), new Pair<Integer,Double>(112,5.25E-04), new Pair<Integer,Double>(113,5.08E-04), new Pair<Integer,Double>(114,5.01E-04), new Pair<Integer,Double>(115,5.03E-04), new Pair<Integer,Double>(116,5.13E-04), new Pair<Integer,Double>(117,5.30E-04), new Pair<Integer,Double>(118,5.52E-04), new Pair<Integer,Double>(119,5.78E-04), new Pair<Integer,Double>(120,6.07E-04), new Pair<Integer,Double>(121,6.37E-04), new Pair<Integer,Double>(122,6.69E-04), new Pair<Integer,Double>(123,6.99E-04), new Pair<Integer,Double>(124,7.24E-04), new Pair<Integer,Double>(125,7.39E-04), new Pair<Integer,Double>(126,7.39E-04), new Pair<Integer,Double>(127,7.21E-04), new Pair<Integer,Double>(128,6.81E-04), new Pair<Integer,Double>(129,6.29E-04), new Pair<Integer,Double>(130,5.77E-04), new Pair<Integer,Double>(131,5.34E-04), new Pair<Integer,Double>(132,5.13E-04), new Pair<Integer,Double>(133,5.21E-04), new Pair<Integer,Double>(134,5.47E-04), new Pair<Integer,Double>(135,5.78E-04), new Pair<Integer,Double>(136,6.00E-04), new Pair<Integer,Double>(137,5.99E-04), new Pair<Integer,Double>(138,5.65E-04), new Pair<Integer,Double>(139,5.08E-04), new Pair<Integer,Double>(140,4.42E-04), new Pair<Integer,Double>(141,3.81E-04), new Pair<Integer,Double>(142,3.39E-04), new Pair<Integer,Double>(143,3.27E-04), new Pair<Integer,Double>(144,3.39E-04), new Pair<Integer,Double>(145,3.64E-04), new Pair<Integer,Double>(146,3.93E-04), new Pair<Integer,Double>(147,4.16E-04), new Pair<Integer,Double>(148,4.25E-04), new Pair<Integer,Double>(149,4.23E-04), new Pair<Integer,Double>(150,4.15E-04), new Pair<Integer,Double>(151,4.04E-04), new Pair<Integer,Double>(152,3.97E-04), new Pair<Integer,Double>(153,3.96E-04), new Pair<Integer,Double>(154,3.99E-04), new Pair<Integer,Double>(155,4.02E-04), new Pair<Integer,Double>(156,4.02E-04), new Pair<Integer,Double>(157,3.94E-04), new Pair<Integer,Double>(158,3.76E-04), new Pair<Integer,Double>(159,3.53E-04), new Pair<Integer,Double>(160,3.31E-04), new Pair<Integer,Double>(161,3.15E-04), new Pair<Integer,Double>(162,3.11E-04), new Pair<Integer,Double>(163,3.23E-04), new Pair<Integer,Double>(164,3.45E-04), new Pair<Integer,Double>(165,3.69E-04), new Pair<Integer,Double>(166,3.88E-04), new Pair<Integer,Double>(167,3.94E-04), new Pair<Integer,Double>(168,3.80E-04), new Pair<Integer,Double>(169,3.53E-04), new Pair<Integer,Double>(170,3.18E-04), new Pair<Integer,Double>(171,2.83E-04), new Pair<Integer,Double>(172,2.54E-04), new Pair<Integer,Double>(173,2.38E-04), new Pair<Integer,Double>(174,2.33E-04), new Pair<Integer,Double>(175,2.38E-04), new Pair<Integer,Double>(176,2.50E-04), new Pair<Integer,Double>(177,2.68E-04), new Pair<Integer,Double>(178,2.90E-04), new Pair<Integer,Double>(179,3.11E-04), new Pair<Integer,Double>(180,3.28E-04), new Pair<Integer,Double>(181,3.37E-04), new Pair<Integer,Double>(182,3.34E-04), new Pair<Integer,Double>(183,3.16E-04), new Pair<Integer,Double>(184,2.87E-04), new Pair<Integer,Double>(185,2.54E-04), new Pair<Integer,Double>(186,2.20E-04), new Pair<Integer,Double>(187,1.92E-04), new Pair<Integer,Double>(188,1.74E-04), new Pair<Integer,Double>(189,1.65E-04), new Pair<Integer,Double>(190,1.64E-04), new Pair<Integer,Double>(191,1.70E-04), new Pair<Integer,Double>(192,1.81E-04), new Pair<Integer,Double>(193,1.96E-04), new Pair<Integer,Double>(194,2.13E-04), new Pair<Integer,Double>(195,2.33E-04), new Pair<Integer,Double>(196,2.54E-04), new Pair<Integer,Double>(197,2.75E-04), new Pair<Integer,Double>(198,2.96E-04), new Pair<Integer,Double>(199,3.14E-04), new Pair<Integer,Double>(200,3.28E-04)); }