/*
* 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.
*/
package org.broad.igv.data.rnai;
//~--- non-JDK imports --------------------------------------------------------
import org.broad.igv.Globals;
import org.broad.igv.data.DataSource;
import org.broad.igv.feature.FeatureUtils;
import org.broad.igv.feature.genome.Genome;
import org.broad.igv.feature.LocusScore;
import org.broad.igv.track.TrackType;
import org.broad.igv.track.WindowFunction;
import java.util.*;
/**
* @author jrobinso
*/
public class RNAIDataSource implements DataSource {
/**
* The screen name (or batch id)
*/
private String screen;
/**
* The screen "condition". This value can be null.
*/
private String condition;
private String displayName;
private boolean scoresAreSorted = false;
private Genome genome;
/**
* Map of chr -> sorted list of data points. Data is sorted by increasing
* start location.
*/
Map<String, List<LocusScore>> dataMap;
/**
* Constructs ...
*
* @param screen
* @param condition
*/
public RNAIDataSource(String screen, String condition, Genome genome) {
this.genome = genome;
this.screen = screen;
this.condition = condition;
this.displayName = screen;
if (condition != null && condition.length() > 0) {
displayName += " (" + condition + " )";
}
dataMap = new HashMap();
}
/**
* Method description
*
* @param dpt
*/
public void addGeneScore(RNAIGeneScore dpt) {
String chr = dpt.getGene().getChr();
List<LocusScore> chrDataPoints = dataMap.get(chr);
if (chrDataPoints == null) {
chrDataPoints = new ArrayList(500);
dataMap.put(chr, chrDataPoints);
}
chrDataPoints.add(dpt);
// Also add the score to the "All" chromosome.
List<LocusScore> chrAllScores = dataMap.get(Globals.CHR_ALL);
if (chrAllScores == null) {
chrAllScores = new ArrayList(500);
dataMap.put(Globals.CHR_ALL, chrAllScores);
}
// If a genome is supplied update the "whole genome view"
if (genome != null) {
RNAIGeneScore genomeScore = new RNAIGeneScore(dpt);
int genomeStart = genome.getGenomeCoordinate(dpt.getGene().getChr(), dpt.getStart());
int genomeEnd = genome.getGenomeCoordinate(dpt.getGene().getChr(), dpt.getEnd());
genomeScore.setStart(genomeStart);
genomeScore.setEnd(genomeEnd);
chrAllScores.add(genomeScore);
}
}
/**
* Sort gene scores by ascending start position. This should be called after all gene scores
* have been added.
*/
private void sortScores() {
for (List<LocusScore> scores : dataMap.values()) {
FeatureUtils.sortFeatureList(scores);
}
}
public double getDataMax() {
return 3;
}
public double getDataMin() {
return -3;
}
public List<LocusScore> getSummaryScoresForRange(String chr, int startLocation, int endLocation, int zoom) {
if (!scoresAreSorted) {
sortScores();
}
return dataMap.get(chr);
}
/**
* Method description
*
* @return
*/
public TrackType getTrackType() {
return TrackType.RNAI;
}
/**
* Method description
*
* @param statType
*/
public void setWindowFunction(WindowFunction statType) {
// Ignored
}
/**
* Method description
*
* @return
*/
public boolean isLogNormalized() {
return true;
}
/**
* Method description
*
* @param timestamp
*/
public void refreshData(long timestamp) {
// Ignored
}
/**
* The screen name (or batch id)
*
* @return
*/
public String getScreen() {
return screen;
}
/**
* The screen "condition". This value can be null.
*
* @return
*/
public String getCondition() {
return condition;
}
public String getName() {
return displayName;
}
/**
* RNAi data is not windowed
*/
public WindowFunction getWindowFunction() {
return null;
}
static List<WindowFunction> emptyList = new ArrayList();
public Collection<WindowFunction> getAvailableWindowFunctions() {
return emptyList;
}
@Override
public void dispose() {
}
}