// aligfun.h - colors func and some other gen. graph. funcs // for AligraImage() and AlicomImage() // Functions: // //void f_scaleStroke() //int f_1stN() int f_clrGreenBase( gdImagePtr& im, int x, int pMin, int pMax, int *aC ); int f_clrBlueBase ( gdImagePtr& im, int x, int pMin, int pMax, int *aC ); int f_clrRedBase ( gdImagePtr& im, int x, int pMin, int pMax, int *aC ); //string f_clrFF() //int f_clr() //int f_clrGreen() //int f_clrBlue() //int f_colWeightLeg() //void f_outSeqName() // Only for AlicompImage(): // //int f_moveLeg() // Only for AligraImage(): // //void f_setGroupColors() //int f_outGroupColors() //int f_findGroup() //-void f_outColorChar() // void f_outNumLeft( gdImagePtr& im, int n, int iX, int iY, int iC ) { char buf20[20]; sprintf( buf20, "%d\0", n ); gdImageString( im, gdFontSmall, iX - strlen(buf20)*6, iY - 7, (unsigned char*)buf20, iC ); } void f_scaleStroke( gdImagePtr& im, char ty, int iX, int iY, int iL = 2 ) { int black = gdImageColorResolve( im, 0, 0, 0 ); int dY = 0, dX = 0; if( ty == 'd' ) // 'd' - down dY = 1; else if( ty == 'u' ) // 'u' - up dY = -iL; else if( ty == 'l' ) // 'l' - left dX = -iL; else if( ty == 'r' ) // 'r' - right dX = 1; int i; if( ty == 'u' || ty == 'd' ) { for( i = 0; i < iL; ++i ) { gdImageSetPixel(im, iX , iY + dY - i, black ); gdImageSetPixel(im, iX - 1, iY + dY - i, black ); } } else { // left/right for( i = 0; i < iL; ++i ) { gdImageSetPixel(im, iX + dX + i, iY , black ); gdImageSetPixel(im, iX + dX + i, iY + 1, black ); } } } int f_1stN( int iL ) { // iL = seq len; returns: 1st N to plot if( iL <= 20 ) return 1; // 14 24 34 44 54 64 74 84 94 int a[] = { -1, 1, 2, 2, 4, 4, 5, 5, 5, 5 }; int iB = (int)log10( iL ); // 310: 2,... int i, iFactor=1, iR, i1st; for( i = 0; i < iB; i++ ) iFactor *= 10; // 100 i1st = iL / iFactor; // 3 iR = (int)((a[i1st] * iFactor) * 0.1); // 2 * 10 = 20 - 1st N and up to 20 points max return iR; } string f_clrFF( char ty, gdImagePtr& im, int x, int pMin, int pMax ) { int aC[3]; if( toupper(ty) == 'G' ) f_clrGreenBase( im, x, pMin, pMax, aC ); else if( toupper(ty) == 'B' ) f_clrBlueBase( im, x, pMin, pMax, aC ); else //if( toupper(ty) == 'R' ) f_clrRedBase( im, x, pMin, pMax, aC ); // RGB -> FF string FF = "........"; char *s = "0123456789ABCDEF"; int iF1, iF2; iF1 = aC[0] / 16; iF2 = aC[0] % 16; FF[0] = s[iF1]; FF[1] = s[iF2]; //cout << " - iF1 = " << iF1 << ", iF2 = " << iF2 << ", FF = " << FF << endl; //getch(); iF1 = aC[1] / 16; iF2 = aC[1] % 16; FF[3] = s[iF1]; FF[4] = s[iF2]; iF1 = aC[2] / 16; iF2 = aC[2] % 16; FF[6] = s[iF1]; FF[7] = s[iF2]; return FF; } //void f_line( gdImagePtr& im, int iY0, int iY, int iX1, int iX2 ) { int f_clr( gdImagePtr& im, int x, int pMin, int pMax ) { // P1 < x < P2 : min/max int aC[3]; return f_clrRedBase( im, x, pMin, pMax, aC ); } int f_clrRedBase( gdImagePtr& im, int x, int pMin, int pMax, int *aC ) { // P1 < x < P2 : min/max //// Colors: 450 -> 450/4 // Colors: 450 -> 450/9 = 50 int xP; double iR, iG,iB, dP; // Note: Here iR, iG, iB - double ! int ddY; int iC; //dP = 450. / (double)(pMax - pMin); // Colors per power unit //dP = 400. / (double)(pMax - pMin); // Colors per power unit dP = 550. / (double)(pMax - pMin); // Colors per power unit iR=0.; iG=0.; iB =0.; xP = (int)(dP * (x - pMin)); //xP -= (xP % 9 ); // Reduce colors to 450/9 = 50 //xP -= (xP % 8 ); // Reduce colors to 400/8 = 50 xP -= (xP % 11 ); // Reduce colors to 550/11 = 50 ddY = xP; if( ddY < 200 ) { iR = ddY * 0.5; iR+= 155.; if( iR < 0 ) iR = 0.; // ? *** } else { //+if( ddY < 400 ) { iR = 255; // 200 - 250 if( ddY <= 250 ) { //iG = ddY - 200; iG = (ddY - 200) * 2; // 0 - 100 // 250 - 400 } else { iG = 100 + (ddY - 250.) * 0.5; } } iC = gdImageColorResolve( im , (int)iR, (int)iG, (int)iB ); aC[0] = (int)iR; aC[1] = (int)iG; aC[2] = (int)iB; return iC; // ----------------------------------------------------- /** iG = ddY * 0.5; //iG -= 200; if( iG > 255. ) iG = 255.; return gdImageColorAllocate(im , 255, (int)iG, 0); **/ } int f_clrBlue( gdImagePtr& im, int x, int pMin, int pMax ) { // P1 < x < P2 : min/max int aC[3]; return f_clrBlueBase( im, x, pMin, pMax, aC ); } int f_clrBlueBase( gdImagePtr& im, int x, int pMin, int pMax, int *aC ) { // P1 < x <= P2 : min/max // - Colors: 350 -> 350/7 = 50 // Colors: 300 -> 300/6 = 50 int xP; double iR, iG,iB, dP; // Note: Here iR, iG, iB - double ! (multiply) int ddY; int iC; //dP = 350. / (double)(pMax - pMin); // Colors per unit dP = 300. / (double)(pMax - pMin); // Colors per unit iR=0.; iG=0.; iB =0.; xP = (int)(dP * (x - pMin)); //xP -= (xP % 7 ); // Reduce colors to 50 xP -= (xP % 6 ); // Reduce colors to 50 ddY = xP; // <= 240 iR = 100.; // 5 iG = 240. - ddY; // 240 - 160 = 80 iB = 255.; //// > 240 //if( ddY > 240 ) { //if( ddY > 120 && ddY <=180 ) { if( ddY > 160 && ddY <=180 ) { //iG = 120. - (ddY - 120.)*2.; //120 -> 0 iG =80. - (ddY - 160.)*4.; //80 -> 0 } else if( ddY > 180 ) { iG = 0.; //iB = 145. + (350. - (double)ddY); //iB = 135. + (300. - (double)ddY); // 255 -> 135 iB = 75. + (300. - (double)ddY) * 1.5; // 255 -> 135 } iC = gdImageColorResolve( im , (int)iR, (int)iG, (int)iB ); aC[0] = (int)iR; aC[1] = (int)iG; aC[2] = (int)iB; return iC; } int f_clrGreen( gdImagePtr& im, int x, int pMin, int pMax ) { // P1 < x < P2 : min/max int aC[3]; return f_clrGreenBase( im, x, pMin, pMax, aC ); } int f_clrGreenBase( gdImagePtr& im, int x, int pMin, int pMax, int *aC ) { // P1 < x <= P2 : min/max // Colors: 150 -> 150/3 = 50 int xP; double iR, iG,iB, dP; // Note: Here iR, iG, iB - double ! (multiply) int ddY; int iC; dP = 150. / (double)(pMax - pMin); // Colors per unit iR=0.; iG=0.; iB =0.; xP = (int)(dP * (x - pMin)); xP -= (xP % 3 ); // Reduce colors to 50 ddY = xP; // <= 240 iR = 185. - ddY; //*0.5; iG = 240. - ddY; iB = 185. - ddY; //*0.5; /** if( ddY > 120 && ddY <=180 ) { iG = 120. - (ddY - 120.)*2.; } else if( ddY > 180 ) { iG = 0.; iB = 135. + (300. - (double)ddY); } **/ iC = gdImageColorResolve( im , (int)iR, (int)iG, (int)iB ); aC[0] = (int)iR; aC[1] = (int)iG; aC[2] = (int)iB; return iC; } // Moved right/left legends // iWk2 += f_moveLeg( im_out, iWk2, iWk2 + iL*2, iYleg, 'R', 50, sAlgo1, brown, dorange ); // iWk2 += iL; // // ty = 'R' or 'L' or 'B' int f_moveLeg( gdImagePtr& im, int iX1, int iX2, int iYleg, const char ty, int iMax, int iMin, const char *sAlgo1, int brown, int dorange ) { int iL = (int)((double)(iX2 - iX1) * 0.5); int i, j, iC, iWk2 = iX1; if( iMax < 1 ) iMax = 1; if( iMin < 1 ) iMin = 1; //gdImageFilledRectangle(im_out, iWk2 , iYleg+2, iWk2 + iL*2, iYleg + 12, blue ); //gdImageFilledRectangle(im_out, iWk2+iL, iYleg+2, iWk2 + iL*2, iYleg + 12, dblue ); // tst //bool bTest = true; bool bTest = false; if( bTest && ty == 'R' ) iX1 = 65; //double dStep = ((double)iX2 - (double)iX1 + 1.) / (double)iMax; double dStep = ((double)iX2 - (double)iX1 + 1.) / (double)(iMax - iMin + 1); // tst if( bTest && ty == 'L' ) dStep = ( 600. - (double)iX1 + 1.) / (double)(iMax - iMin + 1); //for( i = 0; i < iMax; ++i ) { //for( i = 1; i <= iMax; ++i ) { j = 0; for( i = iMin; i <= iMax; ++i ) { ++j; if( ty == 'R' ) iC = f_clrBlue( im, i, iMin - 1, iMax + 1 ); // + 1 ! *** else iC = f_clrGreen( im, i, iMin - 1, iMax + 1 ); gdImageFilledRectangle(im, iX1 + (double)(j - 1)*dStep , iYleg+2, iX1 + (double)j*dStep - 1, iYleg + 12, iC ); } // Offset number //gdImageString(im, gdFontTiny, iWk2+iL*0.5, iYleg + 12, // (unsigned char*)"1", brown ); //gdImageString(im, gdFontTiny, iWk2+iL*1.5, iYleg + 12, // (unsigned char*)"2", brown ); //double dOff = (double)iL * 2. / ((double)iMax*2.); double dOff = (double)iL / (double)(iMax - iMin + 1); int dOff1 = dOff - 3, dOff2; if( dOff1 < 0 ) dOff1 = 0; char buf10[10]; //dOff2 = iL*2 - (int)(dOff + (double)strlen( buf10 ) * 2.4 ); // * 2.5 if( ty != 'B' ) { sprintf( buf10, "%d\0", iMin ); gdImageString(im, gdFontTiny, iWk2 + dOff1, iYleg + 12, (unsigned char*)buf10, brown ); //(unsigned char*)"1", brown ); sprintf( buf10, "%d\0", iMax ); dOff2 = iL*2 - (int)(dOff + (double)strlen( buf10 ) * 2.4 ); // * 2.5 gdImageString(im, gdFontTiny, iWk2 + dOff2, iYleg + 12, (unsigned char*)buf10, brown ); } iWk2 += (iL*2 + 3); //tst if( bTest && ty == 'L' ) return iWk2; gdImageString(im, gdFontSmall, iWk2, iYleg , (unsigned char*)sAlgo1, dorange ); if( ty != 'B' ) { // Offset 'offset' gdImageString(im, gdFontTiny, iWk2+5, iYleg + 12, (unsigned char*)"offset", brown ); } iWk2 += (strlen(sAlgo1)*6 + 6); if( ty == 'R' ) { gdImageString(im, gdFontSmall, iWk2, iYleg , (unsigned char*)"moved right", brown ); iWk2 += 11*6; // ty = 'L' } else { gdImageString(im, gdFontSmall, iWk2, iYleg , (unsigned char*)"moved left", brown ); iWk2 += 10*6; } return iWk2; } int f_colWeightLeg( gdImagePtr& im, int iX1, int iX2, int iYleg, int iCeil, double dMax, int brown //string& sSy, int brown ) { int iL = (int)((double)(iX2 - iX1) * 0.5); //+int i, iC, iMin = 0, iMax = sSy.length(), iWk2 = iX1; int i, iC, iMin = 0, iMax = iCeil, iWk2 = iX1; if( iMax == 0 ) iMax = 1; //gdImageFilledRectangle(im_out, iWk2 , iYleg+2, iWk2 + iL*2, iYleg + 12, blue ); //gdImageFilledRectangle(im_out, iWk2+iL, iYleg+2, iWk2 + iL*2, iYleg + 12, dblue ); // tst //bool bTest = true; bool bTest = false; if( bTest ) iMax = 50; double dStep = ((double)iX2 - (double)iX1 + 1.) / (double)iMax; // tst if( bTest ) dStep = ( 600. - (double)iX1 + 1.) / (double)iMax; char buf1[2]; buf1[0] = ' '; buf1[1] = 0; for( i = 1; i <= iMax; ++i ) { iC = f_clr( im, iMax - i + 1, 0, iMax + 1 ); // + 1 ! *** gdImageFilledRectangle(im, iX1 + (double)(i - 1)*dStep , iYleg+2, iX1 + (double)i*dStep - 1, iYleg + 12, iC ); if( bTest ) continue; // <---------- //+buf1[0] = sSy[i - 1]; //+gdImageString(im, gdFontTiny, iX1 + (double)(i - 0.5)*dStep - 3, iYleg + 12, // (unsigned char*)buf1, brown ); } // Numbers: char buf10[10]; sprintf( buf10, "%d\0", int(double(iMax) * 0.1) ); gdImageString(im, gdFontTiny, iX1 , iYleg + 12, (unsigned char*)"0", brown ); gdImageString(im, gdFontTiny, iX1 + (double)iMax*dStep - 5*strlen(buf10), iYleg + 12, (unsigned char*)buf10, brown ); iWk2 += (iL*2 + 3); if( bTest ) return iWk2; gdImageString(im, gdFontSmall, iWk2, iYleg , (unsigned char*)"column weight", brown ); sprintf( buf10, " (max %.1f)\0", dMax ); gdImageString(im, gdFontTiny, iWk2, iYleg + 12, (unsigned char*)buf10, brown ); iWk2 += (13*6 + 2) ; //6); return iWk2; } // Display seq name // ty = 0 - std, 1 - tiny, 2 - two cols // name length = 10 (12 - tiny) void f_outSeqName( gdImagePtr& im, int i, string& sName, int dX1, int iY, int ty, int iC, int iC2, int iC3 ) { char buf20[20]; int iWk, iL0 = 10, dX11; string sWk; if( ty > 0 ) iL0 = 12; iWk = sName.length(); if( iWk > iL0 ) { iWk = iL0; sWk = sName.substr(0,iL0); cout << " - name tranc: iL0 = " << iL0 << ", name len = " << sName.length() << endl; } else { sWk = sName; } #ifdef _TRACE cout << " - name len = " << sWk.length() << endl; #endif //sprintf( buf6, "%s\0", (sWk.substr(0,10)).c_str() ); sprintf( buf20, "%s\0", sWk.c_str() ); if( ty < 1 ) { gdImageString(im, gdFontSmall, dX1 - 4 - iWk*6, iY, (unsigned char*)buf20, iC ); } else if( ty < 2 ){ gdImageString(im, gdFontTiny, dX1 - 4 - iWk*5, iY, (unsigned char*)buf20, iC ); // Two cols: } else { //cout << " - i = " << i << endl; dX11 = (dX1 - 4 - 4) / 2 + 1; //+gdImageString(im, gdFontTiny, //+ dX1 - 4 - iWk*5 - (i % 2 == 0 ? 0 : iL0 * 5 + 3), iY - 2 + 1 + (i % 2 == 0 ? 1 : 0), gdImageString(im, gdFontTiny, dX1 - 4 - iWk*5 - (i % 2 == 0 ? 0 : dX11 ), iY - 2 + 1 + (i % 2 == 0 ? 1 : 0), (unsigned char*)buf20, i % 2 == 0 ? iC : iC2 ) ; if( i % 2 != 0 ) { //gdImageDashedLine(im, dX1 - 4 - iL0*5 + 2, iY + 2, dX1 - 4, iY + 2, iC3 ); //gdImageLine(im, dX1 - 4 - iL0*5 + 2, iY + 2 + 1, dX1 - 4, iY + 2 + 1, iC3 ); gdImageLine(im, dX1 - 4 - dX11 + 2, iY + 2 + 1, dX1 - 4, iY + 2 + 1, iC3 ); } } } // f_setGroupColors( aClr, 5, 4, 4 ); // f_outGroupColors( aClr, iWk2, iYleg - 10, iW - dX2, iYleg + 2 ); void f_setGroupColors_( gdImagePtr& im, int *aClr, int iRM, int iGM, int iBM ) // clrs & limits { aClr[0] = f_clrGreen( im, 1, 0, iGM ); aClr[1] = f_clrGreen( im, 2, 0, iGM ); aClr[2] = f_clrGreen( im, 3, 0, iGM ); aClr[3] = f_clrBlue ( im, 1, 0, iBM ); aClr[4] = f_clrBlue ( im, 2, 0, iBM ); aClr[5] = f_clrBlue ( im, 3, 0, iBM ); aClr[6] = f_clr( im, iRM - 1, 0, iRM ); aClr[7] = f_clr( im, iRM - 2, 0, iRM ); aClr[8] = f_clr( im, iRM - 3, 0, iRM ); aClr[9] = f_clr( im, iRM - 4, 0, iRM ); /** aClr[0] = f_clr( im, iRM - 1, 0, iRM ); aClr[3] = f_clr( im, iRM - 2, 0, iRM ); aClr[6] = f_clr( im, iRM - 3, 0, iRM ); aClr[9] = f_clr( im, iRM - 4, 0, iRM ); aClr[1] = f_clrGreen( im, 1, 0, iGM ); aClr[4] = f_clrGreen( im, 2, 0, iGM ); aClr[7] = f_clrGreen( im, 3, 0, iGM ); aClr[2] = f_clrBlue ( im, 1, 0, iBM ); aClr[5] = f_clrBlue ( im, 2, 0, iBM ); aClr[8] = f_clrBlue ( im, 3, 0, iBM ); **/ // *tst #ifdef _TRACE cout << "*** Group colors:" << endl; cout << " -- R: " << f_clrFF( 'R', im, iRM - 1, 0, iRM ) << endl; cout << " -- R: " << f_clrFF( 'R', im, iRM - 2, 0, iRM ) << endl; cout << " -- R: " << f_clrFF( 'R', im, iRM - 3, 0, iRM ) << endl; cout << " -- R: " << f_clrFF( 'R', im, iRM - 4, 0, iRM ) << endl; cout << " -- G: " << f_clrFF( 'G', im, 1, 0, iGM ) << endl; cout << " -- G: " << f_clrFF( 'G', im, 2, 0, iGM ) << endl; cout << " -- G: " << f_clrFF( 'G', im, 3, 0, iGM ) << endl; cout << " -- B: " << f_clrFF( 'B', im, 1, 0, iBM ) << endl; cout << " -- B: " << f_clrFF( 'B', im, 2, 0, iBM ) << endl; cout << " -- B: " << f_clrFF( 'B', im, 3, 0, iBM ) << endl; #endif } int f_outGroupColors( gdImagePtr& im, int *aClr, int numClr, int iX1, int iY1, int iX2, int iY2, int brown ) { //double dX = ((double)(iX2 - iX1 + 1 ) ) / 10.; double dX = ((double)(iX2 - iX1 + 1 ) ) / (double)numClr; int i, iWk2 = iX2; //for( i = 0; i < 10; ++i ) { for( i = 0; i < numClr; ++i ) { gdImageFilledRectangle( im, iX1 + (int)(dX * (double)i) , iY1, iX1 + (int)(dX * (double)(i+1)), iY2, aClr[i] ); } int dOff1 = (int)(dX * 0.5) - 2, dOff2, iYleg = iY1; if( dOff1 < 0 ) dOff1 = 0; char buf10[10]; sprintf( buf10, "%d\0", numClr ); //dOff2 = strlen(buf10)*5; //2*5; //iL*2 - (int)(dOff + (double)strlen( buf10 ) * 2.4 ); // * 2.5 //dOff2 = dOff1 + (double)strlen(buf10)* 2.4; dOff2 = (int)(dX * 0.5) + (double)strlen(buf10)* 2.4; //if( ty != 'B' ) { gdImageString(im, gdFontTiny, iX1 + dOff1, iYleg + 12, (unsigned char*)"1", brown ); gdImageString(im, gdFontTiny, iX2 - dOff2, iYleg + 12, (unsigned char*)buf10, brown ); //(unsigned char*)"10", brown ); //} iWk2 += 4; gdImageString(im, gdFontSmall, iWk2, iYleg , (unsigned char*)"group", brown ); iWk2 += 5*6; return iWk2; } int f_findGroup( char c, const vGroupDef& aG ) { if( c == '-' ) return -2; // -----------> gap int i, iP, iL; iL = aG.size(); for( i = 0; i < iL; ++i ) { iP = aG[i].find( toupper(c) ); if( iP > -1 ) { return i; // ------------> found } } //return -1; // not found return aG.size() - 1; //9; // not found: 9 // *** 13.06.2001 } // Max groups line frame // iYwei - actually iYgroup void f_outFrameGL( gdImagePtr& im, ImageOptions& cfg, int iX1, int iX2, int iYwei, int white, int black, int brown, int dorange, int lgray, int lgray2 ) { //char buf20[21]; //int iWk; gdImageFilledRectangle( im , iX1 +1, iYwei, iX2 - 1, iYwei + cfg.WLwidth - 1, lgray2 ); //+white ); gdImageFilledRectangle( im , iX1 +1, iYwei, iX2 - 1, (double)(iYwei*2 + cfg.WLwidth - 1) *0.5, lgray ); // Black/white frame gdImageLine(im, iX1 - 1, iYwei - 1, iX2, iYwei -1, white ); gdImageLine(im, iX1 - 1, iYwei + cfg.WLwidth - 1, iX2, iYwei + cfg.WLwidth - 1 , black ); gdImageLine(im, iX2, iYwei , iX2, iYwei + cfg.WLwidth - 1 , black ); gdImageLine(im, iX1 - 1, iYwei - 1, iX1 - 1, iYwei + cfg.WLwidth - 1 , white ); // 'max groups' gdImageString(im, gdFontTiny, iX1 - 5*3 - 4, iYwei - 1, // -2 (unsigned char*)"max", dorange ); //brown ); gdImageString(im, gdFontTiny, iX1 - 5*5 - 4, iYwei - 1+8, // -2+10 (unsigned char*)"group", dorange ); //brown ); } void f_outFrameWL( gdImagePtr& im, ImageOptions& cfg, int iX1, int iX2, int iYwei, bool bColOrdered, double wMax, int iFrag, int iLastFrag, int iLastPos, int white, int black, int brown, int dorange ) { char buf20[21]; int iWk; // Black/white frame if( cfg.WLtype == 0 ) { // bottom //gdImageLine(im_out, dX1 - 2, iYwei - 2, iW - dX2, iYwei -2, white ); // -dgray gdImageLine(im, iX1 - 1, iYwei - 1, iX2, iYwei -1, white ); gdImageLine(im, iX1 - 1, iYwei + cfg.WLwidth - 1, iX2, iYwei + cfg.WLwidth - 1 , black ); gdImageLine(im, iX2, iYwei , iX2, iYwei + cfg.WLwidth - 1 , black ); gdImageLine(im, iX1 - 1, iYwei - 1, iX1 - 1, iYwei + cfg.WLwidth - 1 , white ); //gdImageLine(im_out, dX1 - 2, iYwei - 2, dX1 - 2, iYwei + image_cfg.WLwidth - 1 , // white); } // 'column weight' //gdImageString(im_out, gdFontTiny, dX1 - 5*11 - 4, iYwei - 2, // (unsigned char*)"weight line", dorange ); //brown ); if( cfg.WLwidth < 12 ) { gdImageString(im, gdFontTiny, iX1 - 5*6 - 4, iYwei - 2, (unsigned char*)"weight", dorange ); //brown ); } else { gdImageString(im, gdFontTiny, iX1 - 5*6 - 4, iYwei - 1, //2, (unsigned char*)"column", dorange ); //brown ); gdImageString(im, gdFontTiny, iX1 - 5*6 - 4, iYwei - 1+8, //2+10, (unsigned char*)"weight", dorange ); //brown ); } // 'best/worst' //if( image_cfg.type == 12 ) { if( bColOrdered ) { if( iFrag == 1 ) { sprintf( buf20, "best %.1f\0", wMax ); //oAli.WeightLineMax ); gdImageString(im, gdFontTiny, iX1+5, iYwei + cfg.WLwidth , (unsigned char*)buf20, brown ); //(unsigned char*)"best", brown ); } if( iFrag == iLastFrag ) { //gdImageString(im, gdFontTiny, iX2 - 6*5, iYwei + cfg.WLwidth , iWk = iLastPos - 6*5; if( iWk < iX1 ) iWk = iX1; gdImageString(im, gdFontTiny, iWk, iYwei + cfg.WLwidth , (unsigned char*)"worst", brown ); } } } int f_outFragmentWL( gdImagePtr& im, Align& oAli, ImageOptions& cfg, int iX1, int iX2, int iYwei, double dWL, int iWLceil, orSumsDef::iterator& iiSU, int splitOffset, int splitBlockSize ) // multiset< double, greater< double >, alloc >::iterator& iiSU, { //int iWLceil = ceil( (oAli.WeightLineMax) ) * 10 ; vAliDef& vAli = *(oAli.pAli ); // Seq len & num: int iSeqLen = vAli[0].length(); int iFragLen = iSeqLen; //double dWL = ((double)(iX2 - iX1 ) ) / (double)iSeqLen; int iOff = splitOffset; if( iOff < 0 ) iOff = 0; if( splitBlockSize > 0 ) iFragLen = splitBlockSize; int i, i0, iWk, iC; //+for( i = 0; i < iSeqLen; ++i ) { for( i = iOff, i0 = 0; i < (iOff + iFragLen) &&i < iSeqLen; ++i, ++i0 ) { //+if( i >= iSeqLen ) break; // ---------> if( (cfg.type == 12) || (cfg.type == 21) || (cfg.type == 22) ) { //iWk = (*iiSU) * 10.; iWk = ((*iiSU).first) * 10.; // *** 22.08.2001 ++iiSU; } else { iWk = oAli.WeightLineSums[i] * 10.; } iC = f_clr( im, iWLceil - iWk, 0, iWLceil ); gdImageFilledRectangle(im, iX1 + (double)i0 * dWL + 1, iYwei, iX1 + (double)(i0+1.) * dWL, iYwei + cfg.WLwidth - 1, iC ); //dX1 + (double)(i+1.) * dWL, iH - dY2 - 1, iC ); } return iX1 + (double)(i0+1. - 1.) * dWL; // to plot 'worst' } int f_outFragmentWL( gdImagePtr& im, Align& oAli, ImageOptions& cfg, int iX1, int iX2, int iYwei, double dWL, int iWLceil ) { //int iWLceil = ceil( (oAli.WeightLineMax) ) * 10 ; vAliDef& vAli = *(oAli.pAli ); // Seq len & num: int iSeqLen = vAli[0].length(); //double dWL = ((double)(iX2 - iX1 ) ) / (double)iSeqLen; int i, iWk, iC; //+for( i = 0; i < iSeqLen; ++i ) { for( i = 0; i < iSeqLen; ++i ) { //+if( i >= iSeqLen ) break; // ---------> iWk = oAli.WeightLineSums[i] * 10.; iC = f_clr( im, iWLceil - iWk, 0, iWLceil ); gdImageFilledRectangle(im, iX1 + (double)i * dWL + 1, iYwei, iX1 + (double)(i+1.) * dWL, iYwei + cfg.WLwidth - 1, iC ); //dX1 + (double)(i+1.) * dWL, iH - dY2 - 1, iC ); } return iX1 + (double)(i+1.) * dWL; // not used } void f_statGroup( const vAliDef& vAli, const vGroupDef& aG, vColGroupDef& vColGroup, vGroupValueDef& vGroupValue ) { // Alex // vector< long, alloc > vGV ( vGroupValue.size(), 0 ), vCGV( vGroupValue.size(), 0 ) ; vector< long > vGV ( vGroupValue.size(), 0 ), vCGV( vGroupValue.size(), 0 ) ; //vector< int, alloc > ; int i, j, iG, iGmax, iMax, iSeqLen = vAli[0].size(); long iTotal = (vAli[0].size()+1) * (vAli.size()+1); double dWk; for( i = 0; i < iSeqLen; ++i ) { //Clear vCGV for( j = 0; j < vCGV.size(); ++j ) vCGV[j] = 0; for( j = 0; j < vAli.size(); ++j ) { const string *s = &(vAli[j]); //const string *s = &(vAli[j]); //iG = f_findGroup( vAli[j][i], aG ); if( (*s).length() <= i ) continue; // <--------- short seq iG = f_findGroup( (*s)[i], aG ); if( iG > -1 ) { ++vGV[iG]; ++vCGV[iG]; // col value } } // Max in col: iMax = -1; iGmax = - 1; for( j = 0; j < vCGV.size(); ++j ) { if( vCGV[j] > iMax ) { iMax = vCGV[j]; iGmax = j; } } vColGroup[i] = iGmax; } // Set Group Values in percents: for( i = 0; i < vGroupValue.size(); ++i ) { dWk = (double)vGV[i] / iTotal; dWk *= 100.; vGroupValue[i] = dWk; } } //int f_getColorGroups( const string& gFile, vGroupDef& aG, int molType = 0 ) int f_getColorGroups( string gFile, vGroupDef& aG, int molType = 0 ) { string sMsg; if( gFile == "" ) { gFile = "color10.def"; sMsg = "PROTEIN"; if( molType == 1 ) { sMsg = "NUCLEOTIDE"; gFile = "color5.def"; } cout << "\n*** Color group file is undefinite." << endl; cout << " Alignment is found to be " << sMsg << "." << endl; cout << " Trying to use the file " << gFile << endl; } FILE *f = fopen( gFile.c_str(), "rt" ); if( !f ) { if( molType == 1 ) { cout << "\n Can't open group file " << gFile << ". Standard nucleotide group set is being used." << endl; aG.push_back("A"); // 1 aG.push_back("C"); // 2 aG.push_back("G"); // 3 aG.push_back("TU"); // 3 aG.push_back(" "); // 5 return 2; } else { cout << "\n Can't open group file " << gFile << ". Standard protein group set is being used." << endl; aG.push_back("AG"); // 1 aG.push_back("C"); // 2 aG.push_back("DENQBZ"); // 3 aG.push_back("ILMV"); // 4 aG.push_back("FWY"); // 5 aG.push_back("H"); // 6 aG.push_back("KR"); // 7 aG.push_back("P"); // 8 aG.push_back("ST"); // 9 aG.push_back(" "); // 10 U J //getch(); return 2; } } //char *cEndPos; char buf[ _OPTIONS_STR_LEN ]; string s; while( fgets( buf, _OPTIONS_STR_LEN, f ) ) { if( strlen( buf ) < 2 ) continue; // <---------------- char *c = strchr( buf, ':' ); // group index - not used if( c == 0 ) continue; // <---------------- s = ""; while( c = strchr( ++c, ';' ) ) { s += *(c - 1); // get symb before ';' } if( s == "" ) s = " "; //+cout << "*** Gr = " << s << endl; //+getch(); aG.push_back( s ); } fclose(f); return 1; } bool f_findType( vIntDef& vType, int ty ) { vIntDef::iterator ii; //ii = find( vType.begin(), vType.end(), ty ); //if( find( vType.begin(), vType.end(), ty ) == vType.end() ) for( ii = vType.begin(); ii != vType.end(); ++ii ) { if( *ii == ty ) return true; //false; } return false; //true; } //EOF