Как интегрировать значения достоверности в изображения хроматограммы ДНК?

Я использую biojava для создания хроматограммы.

Хроматограмма - это изображение. Каждый базовый звонок проводится в пределах прямоугольника.

Чтобы получить координату x (слева): gfx.getCallboxBounds(int i).getX();

Чтобы получить ширину: gfx.getCallboxBounds (int i).getX ()

где целое число i представляет прямоугольник в расположении прямоугольников, которые строят хроматограмму.

Чтобы получить значение достоверности данной базы:

(Я создаю массив, называемый доверием) уверенность [i - 1];

где я, опять же, база, о которой идет речь

Значения достоверности указаны между 1 и 70. Высота изображения составляет 240 пикселей.

Я хочу напечатать серые линии толщиной 2 пикселя на высотах родственников вдоль последовательности для ширины каждого базового вызова.

Например, если качество basecall (Rectangle) 60 равно 40, а его ширина равна 20, для его ширины будет нарисована серая линия с 137 пикселями (40 / 70 * 240).

Вот метод, который рисует след:

    ChromatogramFactory chromFactory = new ChromatogramFactory();

    Chromatogram chrom = ChromatogramFactory.create(abi);

    ChromatogramGraphic gfx = new ChromatogramGraphic(chrom);

    BufferedImage bi = new BufferedImage(
            gfx.getWidth(),
            gfx.getHeight(),
            BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = bi.createGraphics();
    g2.setBackground(Color.white);
    g2.clearRect(0, 0, bi.getWidth(), bi.getHeight());
    if (g2.getClip() == null) {
        g2.setClip(new Rectangle(0, 0, bi.getWidth(), bi.getHeight()));
    }
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    gfx.drawTo(g2);

    g2.draw(new java.awt.Rectangle(-10, -10, 5, 5));

РЕДАКТИРОВАТЬ: Кроме того, длина последовательности равна количеству прямоугольников. Каждая буква в последовательности представляет базовый вызов, как и каждый прямоугольник.

1 ответ

Решение

Используя приведенный ниже код, я смог добавить строки в соответствующих местах, чтобы получить достоверные значения:

    int leftBound = 0;
    int rightBound = 0;
    double confVal = 0;
    double heightDouble = 0;
    int height = 0;

    g2.setColor(Color.LIGHT_GRAY);

    for (int i = 0; i < gfx.getCallboxCount(); i++) {
        leftBound = (int) gfx.getCallboxBounds(i).getX();
        rightBound = (int) ((int) leftBound + gfx.getCallboxBounds(i).getWidth());
        confVal = confidence[i] * 2.67;
        heightDouble = 200 - confVal;
        height = (int) heightDouble;
        g2.drawLine(leftBound, height, rightBound, height);
    }
Другие вопросы по тегам