001 /* The Broad Institute SOFTWARE COPYRIGHT NOTICE AGREEMENT
002 This software and its documentation are copyright 2003 by the Broad Institute/Massachusetts Institute of Technology. All rights are reserved.
003 This software is supplied without any warranty or guaranteed support whatsoever. Neither the Broad Institute nor MIT can be responsible for its use, misuse, or functionality.
004 */
005 package calhoun.util;
006
007 import java.io.ByteArrayInputStream;
008 import java.io.ByteArrayOutputStream;
009 import java.io.ObjectInputStream;
010 import java.io.ObjectOutputStream;
011 import java.util.ArrayList;
012 import java.util.Collection;
013 import java.util.Iterator;
014 import java.util.List;
015
016 public class Util {
017
018 /** Static helpers. Do not instantiate */
019 private Util() {
020 super();
021 }
022
023 public static<T> void addAll(Collection<T> coll, Iterator<? extends T> iter) {
024 while(iter.hasNext()) {
025 coll.add(iter.next());
026 }
027 }
028
029 public static void normalizeWeights(float[] weights) {
030 float total = 0.0f;
031 for(int i=0; i<weights.length; ++i) {
032 total += weights[i];
033 }
034 for(int i=0; i<weights.length; ++i) {
035 weights[i] = weights[i]/total;
036 }
037 }
038
039 public static int[] convertIntList(List<Integer> list) {
040 int[] labelArray = new int[list.size()];
041 for(int j=0; j<labelArray.length; ++j) {
042 labelArray[j] = list.get(j);
043 }
044 return labelArray;
045 }
046
047 public static float[] convertFloatList(List<Float> list) {
048 float[] labelArray = new float[list.size()];
049 for(int j=0; j<labelArray.length; ++j) {
050 labelArray[j] = list.get(j);
051 }
052 return labelArray;
053 }
054
055 public static List<Double> convertDoubleArray(double[] list) {
056 List<Double> labelArray = new ArrayList<Double>(list.length);
057 for(int j=0; j<list.length; ++j) {
058 labelArray.add(list[j]);
059 }
060 return labelArray;
061 }
062
063 static public boolean safeEquals(Object x, Object y) {
064 if(x == null)
065 return y == null;
066 else
067 return x.equals(y);
068 }
069
070 /** make a copy of any serializable object graph */
071 static public Object deepClone(Object o) {
072 try {
073 Object copy;
074
075 ByteArrayOutputStream baos = new ByteArrayOutputStream();
076 ObjectOutputStream oos = new ObjectOutputStream(baos);
077 oos.writeObject(o);
078 oos.close();
079 ByteArrayInputStream bios = new ByteArrayInputStream(baos.toByteArray());
080 ObjectInputStream ois = new ObjectInputStream(bios);
081 copy = ois.readObject();
082
083 return copy;
084 } catch (Exception ex) {
085 throw new ErrorException("Could not copy object "+o.toString(), ex);
086 }
087 }
088 }