/*
* 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.
*/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.broad.igv.feature.dranger;
import org.broad.igv.feature.AbstractFeature;
import org.broad.igv.feature.LocusScore;
import org.broad.igv.feature.Strand;
import org.broad.igv.track.WindowFunction;
import org.broad.igv.ui.color.ColorUtilities;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;
/**
* @author jrobinso
*/
public class DRangerFeature extends AbstractFeature {
// //num chr1 str1 pos1 chr2 str2 pos2 tumreads normreads class span site1 site2 quality score
private int index;
String chr2;
int pos2;
Strand str2;
private int tumreads;
private int normreads;
private String featureClass;
private int span;
private String site1;
private String site2;
private int quality;
private int score;
public DRangerFeature() {
}
/**
* Construct a new dRanger feature. Arbitrarily sized at 10 bases so they are easier to see
*
* @param chr
* @param pos1
* @param strand1
* @param chr2
* @param pos2
* @param str2
*/
public DRangerFeature(String chr, int pos1, Strand strand1, String chr2, int pos2, Strand str2) {
super(chr, pos1 - 5, pos1 + 5, strand1);
this.chr2 = chr2;
this.pos2 = pos2;
this.str2 = str2;
}
public String getURL() {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
// Score calibrated to = ~ 1,000 if 1/2 the reads support the rearrangment
@Override
public float getScore() {
return score;
}
public LocusScore copy() {
DRangerFeature newFeat = new DRangerFeature();
newFeat.setChr(getChr());
newFeat.setStart(getStart());
newFeat.setEnd(getEnd());
newFeat.chr2 = chr2;
newFeat.pos2 = pos2;
newFeat.str2 = str2;
newFeat.tumreads = tumreads;
newFeat.normreads = normreads;
newFeat.featureClass = featureClass;
newFeat.span = span;
newFeat.site1 = site1;
newFeat.site2 = site2;
newFeat.quality = quality;
newFeat.score = score;
return newFeat;
}
public void setSite1(String site1) {
this.site1 = site1;
}
public void setIndex(int index) {
this.index = index;
}
public void setTumreads(int tumreads) {
this.tumreads = tumreads;
}
public void setNormreads(int normreads) {
this.normreads = normreads;
}
public void setFeatureClass(String featureClass) {
this.featureClass = featureClass;
}
public void setSpan(int span) {
this.span = span;
//setEnd(getStart() + span);
}
public void setQuality(int quality) {
this.quality = quality;
}
public void setScore(int score) {
this.score = score;
}
Color defaultColor = Color.blue;
static Map<String, Color> colorMap;
static {
colorMap = new HashMap();
colorMap.put("deletion", Color.red);
colorMap.put("inter_chr", Color.blue);
colorMap.put("inversion", Color.green);
colorMap.put("long_range", Color.MAGENTA);
colorMap.put("tandem_dup", Color.cyan);
}
@Override
public Color getColor() {
Color baseColor = defaultColor;
if(featureClass != null && colorMap.containsKey(featureClass)) {
baseColor = colorMap.get(featureClass);
}
float alpha = Math.min(1.0f, Math.max(0.15f, .15f + (.85f / 3) * score));
return ColorUtilities.getCompositeColor(baseColor, alpha);
}
/*
int index;
int tumorReads;
int normalReads;
private String featureClass;
private int span;
private String site = "";
int quality;
int score;
*/
//num chr1 str1 pos1 chr2 str2 pos2 tumreads normreads class span
// site1 site2 quality score
public String getValueString(double position, int mouseX, WindowFunction windowFunction) {
StringBuffer buf = new StringBuffer();
if (index > 0) {
buf.append("Index: " + index + "<br>");
}
if (site1 != null) {
buf.append("Site1: " + site1 + "<br>");
}
if (site2 != null) {
buf.append("Site2: " + site2 + "<br>");
}
if (tumreads > 0) {
buf.append("T reads: " + tumreads + "<br>");
}
if (normreads > 0) {
buf.append("N reads: " + normreads + "<br>");
}
if (featureClass != null) {
buf.append("Class: " + featureClass + "<br>");
}
if (span > 0) {
buf.append("Span: " + span + "<br>");
}
if (quality > 0) {
buf.append("Quality: " + quality + "<br>");
}
if (score > 0) {
buf.append("Score: " + score);
}
return buf.toString();
}
public void setSite2(String site2) {
this.site2 = site2;
}
}