⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genomeimage.java

📁 实现了基因组的显示功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -