📄 genomeimage.java
字号:
package org.csbl.genome.service;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import javax.imageio.ImageIO;
import org.csbl.genome.model.Feature;
import org.csbl.genome.model.Location;
import org.csbl.genome.model.Range;
import org.csbl.genome.model.Qualifier;
import org.csbl.genome.model.Pathway;
import org.csbl.genome.model.PathwayNode;
import org.csbl.genome.model.Annotation;
public class GenomeImage {
String fileName;
int maxLength = 750;
int intervalLength = 50;
// calculated
double ratio=1.0;
double operonrate = 0.5;//for operon value
public List <Feature> fillFeatures(List <Feature> features)
{
List <Feature> ff = new ArrayList <Feature>();
List <Qualifier> qs1 = new ArrayList <Qualifier>();
List <Qualifier> qs2 = new ArrayList <Qualifier>();
List <Qualifier> qs3 = new ArrayList <Qualifier>();
List <Qualifier> qs4 = new ArrayList <Qualifier>();
List <Qualifier> qs5 = new ArrayList <Qualifier>();
if (features!= null) { // annotated genome
Iterator itr = features.iterator();
Qualifier q1 = new Qualifier();
q1.setName("ofsValue");
q1.setValue("0.8");
qs1.add(q1);
Qualifier q2 = new Qualifier();
q2.setName("ofsValue");
q2.setValue("0.8");
qs2.add(q2);
Qualifier q3 = new Qualifier();
q3.setName("ofsValue");
q3.setValue("0.3");
qs3.add(q3);
Qualifier q4 = new Qualifier();
q4.setName("ofsValue");
q4.setValue("0.8");
qs4.add(q4);
Qualifier q5 = new Qualifier();
q5.setName("ofsValue");
q5.setValue("0");
qs5.add(q5);
//itr.hasNext();
Feature feature1 = (Feature)itr.next();
feature1.setQualifiers(qs1);
Feature feature2 = (Feature)itr.next();
feature2.setQualifiers(qs2);
Feature feature3 = (Feature)itr.next();
feature3.setQualifiers(qs3);
Feature feature4 = (Feature)itr.next();
feature4.setQualifiers(qs4);
Feature feature5 = (Feature)itr.next();
feature5.setQualifiers(qs5);
}
return features;
}
public Pathway fillPathway(String pathwayname,String organismname)
{
Pathway usePathway = new Pathway();
usePathway.setId(1l);
usePathway.setName(pathwayname);
usePathway.setOrganismName(organismname);
List <PathwayNode> tempnodes = new ArrayList<PathwayNode>();
for(int i=1;i<=7;i++)
{
PathwayNode tempNode = new PathwayNode();
tempNode.setId((long)i);
tempNode.setGeneName("geneName"+Integer.toString(i));
tempnodes.add(tempNode);
}
usePathway.setNodes(tempnodes);
return usePathway;
}
public List <Feature> fillFeatures2(List <Feature> features)
{
List <Feature> ff = new ArrayList <Feature>();
List <Qualifier> qs1 = new ArrayList <Qualifier>();
List <Qualifier> qs2 = new ArrayList <Qualifier>();
List <Qualifier> qs3 = new ArrayList <Qualifier>();
List <Qualifier> qs4 = new ArrayList <Qualifier>();
List <Qualifier> qs5 = new ArrayList <Qualifier>();
String wuzhongname = "ecoli";
String pathwayname = "daixie";
if (features!= null) { // annotated genome
Iterator itr = features.iterator();
Qualifier q1 = new Qualifier();
q1.setName("ofsValue");
q1.setValue("0.8");
qs1.add(q1);
Qualifier qq1 = new Qualifier();
qq1.setName("pmap");
qq1.setValue(wuzhongname+":"+pathwayname+":"+"geneName1");
qs1.add(qq1);
Qualifier q2 = new Qualifier();
q2.setName("ofsValue");
q2.setValue("0.8");
qs2.add(q2);
Qualifier qq2 = new Qualifier();
qq2.setName("pmap");
qq2.setValue(wuzhongname+":"+pathwayname+":"+"geneName4");
qs2.add(qq2);
Qualifier q3 = new Qualifier();
q3.setName("ofsValue");
q3.setValue("0.3");
qs3.add(q3);
Qualifier qq3 = new Qualifier();
qq3.setName("pmap");
qq3.setValue(wuzhongname+":"+pathwayname+":"+"geneName3");
qs3.add(qq3);
Qualifier q4 = new Qualifier();
q4.setName("ofsValue");
q4.setValue("0.8");
qs4.add(q4);
Qualifier q5 = new Qualifier();
q5.setName("ofsValue");
q5.setValue("0");
qs5.add(q5);
Qualifier qq5 = new Qualifier();
qq5.setName("pmap");
qq5.setValue(wuzhongname+":"+pathwayname+":"+"geneName2");
qs5.add(qq5);
//itr.hasNext();
Feature feature1 = (Feature)itr.next();
feature1.setQualifiers(qs1);
Feature feature2 = (Feature)itr.next();
feature2.setQualifiers(qs2);
Feature feature3 = (Feature)itr.next();
feature3.setQualifiers(qs3);
Feature feature4 = (Feature)itr.next();
feature4.setQualifiers(qs4);
Feature feature5 = (Feature)itr.next();
feature5.setQualifiers(qs5);
}
return features;
}
public double drawGenome (int positionStart, int positionEnd, List <Feature> features,Pathway pathway, String subString ) {
//features = fillFeatures2(features);
//int numberFeatures = 0;
//System.out.print(positionStart);
//System.out.print(";");
//System.out.print(positionEnd);
//System.out.print(";");
int length = positionEnd - positionStart;
System.out.print(positionStart);
System.out.print(";");
System.out.print(positionEnd);
if (length <= 0) {
throw new RuntimeException ("invalid parameters");
}
ratio = new Double(maxLength).doubleValue() / new Double(length).doubleValue();
if (ratio > 1) {
maxLength = length;
ratio = 1;
int height = 180; // no frames - for frames set it to 220
BufferedImage image =
new BufferedImage(maxLength + 20, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D)image.getGraphics();
g2.setBackground(Color.WHITE);
g2.clearRect(0,0,maxLength + 20, height);
g2.setColor(Color.BLACK);
g2.drawLine(20, 22, maxLength, 22);
putScales (g2, positionStart);
int lengthofstring = subString.length();
int i=0;
for(i=0;i<(int)(lengthofstring/100-1);i++)
{
g2.drawString(subString.substring(i*100,(i+1)*100), 20, 60+20*i);
}
g2.drawString(subString.substring((i+1)*100,lengthofstring), 20, 60+20*(i+1));
File f = new File(fileName);
try {
ImageIO.write(image, "jpg", f);
} catch (Exception e) {
System.out.println ("filename" + fileName);
e.printStackTrace();
}
}
else
{
int height = 180; // no frames - for frames set it to 220
BufferedImage image =
new BufferedImage(maxLength + 20, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D)image.getGraphics();
g2.setBackground(Color.WHITE);
g2.clearRect(0,0,maxLength + 20, height);
g2.setColor(Color.BLACK);
g2.drawLine(20, 22, maxLength, 22); // no frames
// to show genes on frames, put the following and comment out the above line
/* Font fcb24 = new Font("Courier",Font.BOLD,10);
g2.setFont(fcb24);
g2.drawString("+1",2,55);
g2.drawString("+2",2,85);
g2.drawString("+3",2,115);
g2.drawString("-1",2,145);
g2.drawString("-2",2,175);
g2.drawString("-3",2,205);
g2.drawLine(20, 22, maxLength, 22);
g2.drawLine(20, 55, maxLength, 55);
g2.drawLine(20, 85, maxLength, 85);
g2.drawLine(20, 115, maxLength, 115);
g2.drawLine(20, 145, maxLength, 145);
g2.drawLine(20, 175, maxLength, 175);
g2.drawLine(20, 205, maxLength, 205);*/
putScales (g2, positionStart);
// g2.setColor(Color.BLUE);
// g2.drawRect((int)(ratio*280), 35, (int)(2020*ratio), 20);
//Pathway pathway = fillPathway("daixie","ecoli");
if(pathway != null)
{
if(!pathway.getNodes().isEmpty())
{
drawPathway(g2,pathway,20,maxLength);
}
}
if (features!= null)
{ // annotated genome
Iterator itr = features.iterator();
long sstart = 0;
long send = 0;
boolean hasOperon = false;
String pmapvalue = "";
while (itr.hasNext())
{
Feature feature = (Feature)itr.next();
//if((feature.getLocation().getRangeList().get(0).getStart()>positionStart)&&(feature.getLocation().getRangeList().get(0).getEnd()<positionEnd))
int x1 = drawFeature (feature, g2, positionStart, positionEnd);
//System.out.print(x1);
//System.out.print(";");
Iterator itrr = feature.getQualifiers().iterator();
while(itrr.hasNext())
{
Qualifier q = (Qualifier)itrr.next();
if (q.getName().equals("ofsValue"))
{
if(!hasOperon)
{
if(Double.parseDouble(q.getValue())>0.5d)
{
sstart = feature.getLocation().getRangeList().get(0).getStart();
hasOperon = true;
}
}
else
{
if(Double.parseDouble(q.getValue())>0.5d)
{
send=feature.getLocation().getRangeList().get(0).getEnd();
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -