/* * The MIT License (MIT) * * Copyright (c) 2007-2015 Broad Institute * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* * ExpressionDataset.java * * Created on October 18, 2007, 2:20 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package org.broad.igv.data.expression; import org.broad.igv.Globals; import org.broad.igv.data.Dataset; import org.broad.igv.feature.genome.Genome; import org.broad.igv.track.TrackProperties; import org.broad.igv.track.TrackType; import org.broad.igv.util.ParsingUtils; import java.util.HashMap; import java.util.Map; /** * @author jrobinso */ public class ExpressionDataset implements Dataset { private String name; private TrackType type = TrackType.GENE_EXPRESSION; private Genome genome; private String[] columnHeadings; private boolean normalized = false; private boolean logValues = false; /** * Map colum heading -> index for effecient reverse lookup */ private Map<String, Integer> headingIndexMap = new HashMap(); Map<String, int[]> startLocationMap = new HashMap(); Map<String, int[]> endLocationMap = new HashMap(); private Map<String, Integer> longestFeatureMap; /** * Map of chromosome -> array of data values */ Map<String, Map<String, float[]>> dataMap = new HashMap(); /** * Map of chromosome -> array of feature names */ Map<String, String[]> featureNameMap = new HashMap(); private TrackProperties trackProperties = new TrackProperties(); /** * Creates a new instance of ExpressionDataset */ public ExpressionDataset(Genome genome) { this.genome = genome; } // Todo -- implement public float getDataMin() { return -3f; } public float getDataMax() { return 3f; } public void setColumnHeadings(String[] columnHeadings) { this.columnHeadings = columnHeadings; for (int i = 0; i < columnHeadings.length; i++) { headingIndexMap.put(columnHeadings[i], i); } } public String[] getTrackNames() { return columnHeadings; } public String getName() { return name; } public void setType(TrackType type) { this.type = type; } public TrackType getType() { return type; } public boolean isEmpty() { return startLocationMap.isEmpty(); } public String[] getChromosomes() { return startLocationMap.keySet().toArray(new String[0]); } public void setFeatureNames(String chr, String[] names) { this.featureNameMap.put(chr, names); } public String[] getFeatureNames(String chr) { return featureNameMap.get(chr); } public void setStartLocations(String chr, int[] startLocations) { this.startLocationMap.put(chr, startLocations); } public int[] getStartLocations(String chr) { return startLocationMap.get(chr); } public void setEndLocations(String chr, int[] endLocations) { this.endLocationMap.put(chr, endLocations); } public int[] getEndLocations(String chr) { if (chr.equals(Globals.CHR_ALL)) { return null; } return endLocationMap.get(chr); } public boolean isLogNormalized() { return normalized; } public void setData(String heading, String chr, float[] data) { Map<String, float[]> tmp = dataMap.get(heading); if (tmp == null) { tmp = new HashMap(); dataMap.put(heading, tmp); } tmp.put(chr, data); } public float[] getData(String heading, String chr) { Map<String, float[]> tmp = dataMap.get(heading); if (tmp != null) { return tmp.get(chr); } return null; } public void setName(String name) { this.name = name; } public boolean isLogValues() { return logValues; } public void setLogValues(boolean logValues) { this.logValues = logValues; } public void setNormalized(boolean normalized) { this.normalized = normalized; } public TrackProperties getTrackProperties() { return trackProperties; } public void setTrackLine(String trackLine) { ParsingUtils.parseTrackLine(trackLine, trackProperties); } public Integer getLongestFeature(String chr) { return longestFeatureMap == null ? 1000 : longestFeatureMap.containsKey(chr) ? longestFeatureMap.get(chr) : 1; } public void setLongestFeatureMap(Map<String, Integer> longestFeatureMap) { this.longestFeatureMap = longestFeatureMap; } }