File: paramcons.cpp

package info (click to toggle)
clonalorigin 1.0-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,800 kB
  • sloc: cpp: 10,488; perl: 349; xml: 130; makefile: 48; sh: 33
file content (87 lines) | stat: -rw-r--r-- 3,404 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "paramcons.h"
//
ParamCons::ParamCons(  ) 
{
	isCons=true;
	isSet=false;
	dp=NULL;
	dm=NULL;
	its=0;
}
//

ParamCons::~ParamCons()
{
}

void ParamCons::reset() 
{
	isSet=false;
	delete(dp);
	dp=NULL;
	delete(dm);
	dm=NULL;
	its=0;
}

void ParamCons::account(int id,bool getto)
{
	its++;
	if(!displayset|| displaytree==NULL) displaytree=rectree;
	if (dp==NULL) {dp=new DensityOnTree(displaytree,timeScale);}else dp->setTree(displaytree);
	if (dm==NULL) {dm=new DensityOnTree(displaytree,timeScale);}else dm->setTree(displaytree);
	for (int i=0;i<rectree->numRecEdge();i++)
	{
		if (gene>=0 && ((int)rectree->getRecEdge(i)->getStart()>=data->getBlocks()->at(gene) || (int)rectree->getRecEdge(i)->getEnd()<=data->getBlocks()->at(gene-1))) continue;
		if (id>=0 && getto && rectree->getRecEdge(i)->getEdgeTo()!=id) continue;
		else if(id>=0 && !getto && rectree->getRecEdge(i)->getEdgeFrom()!=id) continue;
		dp->add2(rectree,i,true);
		dm->add2(rectree,i,false);
	}
}

void ParamCons::accountrelative(int id,bool getto)
{
	its++;
	if(!displayset|| displaytree==NULL) displaytree=rectree;
	if (dp==NULL) dp=new DensityOnTree(displaytree,timeScale);else dp->setTree(displaytree);
	if (dm==NULL) dm=new DensityOnTree(displaytree,timeScale);else dm->setTree(displaytree);
	for (int i=0;i<rectree->numRecEdge();i++)
	{
		if (gene>=0 && ((int)rectree->getRecEdge(i)->getStart()>=data->getBlocks()->at(gene) || (int)rectree->getRecEdge(i)->getEnd()<=data->getBlocks()->at(gene-1))) continue;
		if (id>=0 && getto && rectree->getRecEdge(i)->getEdgeTo()!=id) continue;
		else if(id>=0 && !getto && rectree->getRecEdge(i)->getEdgeFrom()!=id) continue;

		dp->add2(rectree,i,true,rectree->getEdgeTreeTime(i));
		dm->add2(rectree,i,false,rectree->getEdgeTreeTime(i));
	}
}

void ParamCons::display(QPaintDevice * qpd) {
  if(!displayset|| displaytree==NULL) displaytree=rectree;
  if (rectree==NULL) return;
  vector<double>*x,*y;
  getXY(&x,&y);
  QPainter painter(qpd);
  for (int i=0;i<displaytree->getN();i++)
    painter.drawText(QPointF(qpd->width()/10.0+x->at(i)*qpd->width()*0.7+3,qpd->height()/5.0+y->at(i)*qpd->height()*0.7+2),isolateName(i));
  if (timeScale<2.0) painter.drawText(qpd->width()*(0.45-0.05),qpd->height()*0.88,qpd->width()*0.1,qpd->height()*0.1,Qt::AlignCenter,QString::number(0.1));
  else painter.drawText(qpd->width()*(0.45-0.05),qpd->height()*0.875,qpd->width()*0.1,qpd->height()*0.1,Qt::AlignCenter,QString::number(1));
  double h=rateScale/displaytree->getN()/timeScale*0.005*displaytree->getNode(displaytree->getN()*2-2)->getAge();
  double mult=1.0;
  while (h*mult<0.0001) mult*=10.0;
  while (h*mult>0.001) mult/=10.0;
  painter.drawText(qpd->width()*0.11,qpd->height()*0.714,qpd->width()*0.1,qpd->height()*0.1,Qt::AlignCenter,QString::number(mult));
  painter.translate(qpd->width()/10.0,qpd->height()/5.0);
  painter.scale(qpd->width()*0.7,qpd->height()*0.7);
  double m=pow(h*mult,0.5);
  painter.fillRect(QRectF(0.05-m*0.5,0.8-m*0.5,m,m),QBrush(Qt::black));
  if (timeScale<2.0) {QLineF lin(0.5-0.05/timeScale,1.0,0.5+0.05/timeScale,1.0);painter.drawLine(lin);} else {QLineF lin(0.5-0.5/timeScale,1.0,0.5+0.5/timeScale,1.0);painter.drawLine(lin);}
  
  if (dp!=NULL && dm!=NULL && isSet) {
  dp->display(&painter,x,y, rateScale/its,QBrush(Qt::red ));
  dm->display(&painter,x,y,-rateScale/its,QBrush(Qt::blue));}
  displayTree(&painter,x,y);
  delete(x);
  delete(y);
}