package org.seqcode.gsebricks.verbs.chipseq;
import java.util.ArrayList;
import java.util.List;
import org.seqcode.genome.Genome;
import org.seqcode.genome.location.Point;
import org.seqcode.genome.location.Region;
public class MACSPeakRegion extends Region{
int summit;
int tags;
double pvalue;
double fold_enrichment;
double fdr;
public MACSPeakRegion(Genome g, String chr, int start, int end,
int summit, int tags, double pvalue, double fold_enrichment, double fdr){
super(g, chr.replaceFirst("chr", ""), start, end);
this.summit = summit;
this.tags = tags;
this.pvalue = pvalue;
this.fold_enrichment = fold_enrichment;
this.fdr = fdr;
}
public int getSummitRel() {
return summit;
}
public int getSummitAbs() {
return super.getStart()+summit;
}
public int getTags() {
return tags;
}
//Convert to Region
public Region getRegion(){
return(new Region(this.getGenome(), this.getChrom(), this.getStart(), this.getEnd()));
}//Convert to Peak (Point)
public Point getPeak(){
return(new Point(this.getGenome(), this.getChrom(), this.getSummitAbs()));
}
/*
* -10*log10(pvalue)
*/
public double getPvalue() {
return pvalue;
}
public double getFold_enrichment() {
return fold_enrichment;
}
/*
* %FDR
*/
public double getFdr() {
return fdr;
}
public void setSummit(int summit) {
this.summit = summit;
}
public void setTags(int tags) {
this.tags = tags;
}
public void setPvalue(double pvalue) {
this.pvalue = pvalue;
}
public void setFold_enrichment(double fold_enrichment) {
this.fold_enrichment = fold_enrichment;
}
public void setFdr(double fdr) {
this.fdr = fdr;
}
public static List<MACSPeakRegion> filterByPValue(List<MACSPeakRegion> peaks, double p_low, double p_high){
List<MACSPeakRegion> peaks_filtered = new ArrayList<MACSPeakRegion>();
for (MACSPeakRegion p:peaks){
if (p.getPvalue()>p_high || p.getPvalue()<p_low){
continue;
}
peaks_filtered.add(p);
}
return peaks_filtered;
}
public static List<MACSPeakRegion> filterByTags(List<MACSPeakRegion> peaks, int tag_low, int tag_high){
List<MACSPeakRegion> peaks_filtered = new ArrayList<MACSPeakRegion>();
for (MACSPeakRegion p:peaks){
if (p.getTags()>tag_high || p.getTags()<tag_low){
continue;
}
peaks_filtered.add(p);
}
return peaks_filtered;
}
public int compareByPValue(Region r) { // descending p-value
MACSPeakRegion macs = (MACSPeakRegion) r;
double diff = pvalue-macs.getPvalue();
return diff==0?0:(diff<0)?1:-1;
}
public static List<MACSPeakRegion> filterByWidth(List<MACSPeakRegion> peaks, int width_low, int width_high){
List<MACSPeakRegion> peaks_filtered = new ArrayList<MACSPeakRegion>();
for (MACSPeakRegion p:peaks){
if (p.getWidth()>width_high || p.getWidth()<width_low){
continue;
}
peaks_filtered.add(p);
}
return peaks_filtered;
}
public String toMACS(){
return getChrom()+"\t"+getStart()+"\t"+getEnd()+"\t"+(getEnd()-getStart())+"\t"+getSummitRel()
+"\t"+getTags()+"\t"+getPvalue()+"\t"+getFold_enrichment()+"\t"+getFdr();
}
}