/* dpAlign_Local_DNA_PhilGreen compares a DNA sequence profile with a DNA sequence and return the optimal local alignment score. */ int dpAlign_Local_DNA_PhilGreen(dpAlign_SequenceProfile * sp, char * seq2) { int i; int N; struct swstr * ss; int score; unsigned char * s2; if (seq2 == NULL) dpAlign_fatal("Sequence 2 is a NULL pointer!\n"); N = strlen(seq2); s2 = (unsigned char *) malloc(N*sizeof(unsigned char)); if (s2 == NULL) dpAlign_fatal("Cannot allocate memory for encoded sequence 2!\n"); for (i = 0; i < N; ++i) { if (seq2[i] >= 'a' && seq2[i] <= 'z') seq2[i] -= 0x20; s2[i] = dna_encode(seq2[i]); } ss = (struct swstr *) malloc(sizeof(struct swstr)*(sp->len+1)); if (ss == NULL) dpAlign_fatal("Cannot allocate memory for ss array!\n"); score = pgreen(sp->waa, sp->len, s2, N, sp->gap, sp->ext, ss); free(ss); free(s2); return score; }
void ScanWiew::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { QColor cred(255,0,0); QColor cgreen(0,100,0); QColor cgreen2(0,150,0); QColor cblue(0,0,255); QPen pred(cred); QPen pgreen(cgreen); QPen pgreen2(cgreen2); QPen pblue(cblue); painter->setPen(pgreen); //QFont fcnew("Coruier new", 10, QFont::Normal); QFontMetrics fm(painter->font()); int pixelsHeight = fm.height(); int lineCnt = laserRangeInMeter/arcDistanceInMeter; for(int i = 1; i <= lineCnt; i++) { QRectF rectangle(-(i*arcDistanceInPixels), -(i*arcDistanceInPixels), i*2*arcDistanceInPixels,i*2*arcDistanceInPixels); int spanAngle = endAngle - startAngle+5; painter->drawArc(rectangle, ((int)startAngle+90-5)*16, (spanAngle+5)*16); int x = -::sin((startAngle-5)*TwoPi/360)*(i*arcDistanceInPixels); int y = -::cos((startAngle-5)*TwoPi/360)*(i*arcDistanceInPixels); char str[100]; sprintf(str,"%d",i*(int)arcDistanceInMeter); int pixelsWide = fm.width(str); QPoint ptl(x-pixelsWide,y); QPoint pbr(x,y+pixelsHeight); QRect rt(ptl,pbr); painter->drawText(rt, Qt::AlignCenter, (QString)(str)); x = -::sin((endAngle+5)*TwoPi/360)*(i*arcDistanceInPixels); y = -::cos((endAngle+5)*TwoPi/360)*(i*arcDistanceInPixels); QPoint ptl1(x,y); QPoint pbr1(x+pixelsWide,y+pixelsHeight); QRect rt1(ptl1,pbr1); painter->drawText(rt1, Qt::AlignCenter, (QString)(str)); } lineCnt = (endAngle - startAngle)/angleDelta; double ang = startAngle; int distance = (laserRangeInMeter/arcDistanceInMeter)*arcDistanceInPixels; for(int i = 0; i <= lineCnt ; i++) { painter->setPen(pgreen); int x = -::sin(ang*TwoPi/360)*(distance+5); int y = -::cos(ang*TwoPi/360)*(distance+5); painter->drawLine(0,0,x,y); char str[100]; sprintf(str,"%d",(int)ang); int pixelsWide = fm.width(str); x = -::sin(ang*TwoPi/360)*(distance+20); y = -::cos(ang*TwoPi/360)*(distance+20); QPoint ptl(x-pixelsWide/2,y - pixelsHeight/2); QPoint pbr(x+pixelsWide/2,y+pixelsHeight/2); QRect rt(ptl,pbr); painter->drawText(rt, Qt::AlignCenter, (QString)(str)); ang += angleDelta; } double olcek = arcDistanceInPixels/arcDistanceInMeter; //printf("olcek: %f\n",olcek); pgreen.setWidth(pgreen.width()+2); painter->setPen(pgreen2); for(int i = 0; i < pointCnt; i++) { painter->drawLine(0,0,-plist[i].y*olcek,-plist[i].x*olcek); } painter->setPen(pred); plinel_t *root = g_line_map.first; while(root != NULL) { if(root->line.length > 0.05 && root->point_cnt > 3 )//MIN_LENGTH_LINE_TO_SEND) { painter->drawLine(-root->line.sp.y*olcek,-root->line.sp.x*olcek,-root->line.ep.y*olcek,-root->line.ep.x*olcek); } root = root->next; } }