void PlotContig::initializeGraph(void) { // local lookups const unsigned font_height = 12; const unsigned font_width = font_height * 2 / 3; // number of contigs const unsigned nps = m_stars.size(); // calculate image size double nzoom = m_rendererImage.zoom; double nx = m_rendererImage.imageSizeX; double ny = m_rendererImage.imageSizeY; // pixel width double npw = 1.0 / nx; // pixel height double nph = 1.0 / ny; // x axis size nxs = 1.0 - 8.0 * font_width * npw / nzoom - 3.0 * font_width * npw / nzoom; // y axis size nys = 1.0 - 12.0 * font_height * nph / nzoom - 2.0 * font_height * nph / nzoom; // x axis position nxp = 8.0 * font_width * npw / nzoom; // y axis position nyp = 2.0 * font_height * nph / nzoom; // top margin position ntp = 1.0 - 12.0 * font_height * nph / nzoom; if(m_rendererImage.imageStretchLimitY != -2) { // (1.8 is the spacing factor) float spacingFactor = 1.8; // stretch graph (Y axis) if (nps * font_height * spacingFactor / ny > nys) { // calc new image size ny = nps * font_height * spacingFactor + nyp / nph + (1.0 - ntp) / nph; // check limit. if(m_rendererImage.imageStretchLimitY != -1) if(ny > m_rendererImage.imageStretchLimitY) ny = m_rendererImage.imageStretchLimitY; // pixel height nph = 1.0 / ny; // y axis size nys = 1.0 - 12.0 * font_height * nph / nzoom - 2.0 * font_height * nph / nzoom; // y axis position nyp = 2.0 * font_height * nph / nzoom; // top margin position ntp = 1.0 - 12.0 * font_height * nph / nzoom; //set the new image size m_rendererImage.imageSizeY = (int)ny; // set the new pixel heigth m_rendererImage.pixelHeight = nph; // Init draw object setDrawProperties(); } } if(m_rendererImage.imageStretchLimitX != -2) { // (0.25 is the spacing factor) double spacingFactorX = 0.25; // stretch graph (X axis) if (m_mzUpperLimit * spacingFactorX / nx > nxs) { // calc new image size nx = m_mzUpperLimit * spacingFactorX + nxp / npw; // check limit. if(m_rendererImage.imageStretchLimitX != -1) if(nx > m_rendererImage.imageStretchLimitX / spacingFactorX) { nx = m_rendererImage.imageStretchLimitX / spacingFactorX; m_allDots = true; } // pixel width npw = 1.0 / nx; // x axis size nxs = 1.0 - 8.0 * font_width * npw / nzoom - 3.0 * font_width * npw / nzoom; // x axis position nxp = 8.0 * font_width * npw / nzoom; //set the new image size m_rendererImage.imageSizeX = (int)nx; // set the new pixel width m_rendererImage.pixelWidth = npw; // Init draw object setDrawProperties(); } } m_rendererImage.pixelHeight = nph; m_rendererImage.imageSizeY = (int)ny; // Calculate the margins float marginLeft, marginRight, marginTop, marginBottom; marginLeft = 9.0; marginRight = 3.0; marginTop = 12.0; marginBottom = 2.0; // Set the margins m_rendererObject->setMarginLeft(marginLeft); m_rendererObject->setMarginRight(marginRight); m_rendererObject->setMarginTop(marginTop); m_rendererObject->setMarginBottom(marginBottom); // set graph size in pixels //graphSizePixelsX = m_rendererImage.imageSizeX - (int)(marginLeft - marginRight); //graphSizePixelsY = m_rendererImage.imageSizeY - (int)(marginTop - marginBottom); // Calculate intervals double msdX = m_rendererObject->calculateInterval(m_mzUpperLimit - m_mzLowerLimit, 7.0, m_rendererImage.zoom); // Set intervals m_rendererObject->setXinterval(msdX); // Border m_rendererObject->setBorder(3); // y axis double one = m_intensityLimit / (double)m_stars.size(); double half = one / 2.0; // m_rendererObject->setXintervalOut(); // Y tics are spectra IDs vector<pair<string,string> > ytics; // Cycle thru all the spectra for(int i = 0 ; i < m_offsets.size() ; i++) { int loc = m_offsets.size() - 1 - i; ytics.push_back(make_pair<string,string>(parseInt(m_offsets[i].id + 1), parseFloat(one * loc + half, 2))); } m_rendererObject->setYinterval(ytics); // Graph coverage m_rendererObject->setXrange(m_mzLowerLimit, m_mzUpperLimit); m_rendererObject->setYrange(0, m_intensityLimit); }
/////////////////////////////////////////////////////////////////////////////// // Draw Exec /////////////////////////////////////////////////////////////////////////////// int PlotContig::drawExec(void) { // Check for spectrum if( (m_star == NULL) || (m_abinfo == NULL) ) return ERROR; // Check the sequences //AAJumps jumps(1); // if a amino acids file was specified, use it if(m_aminoAcidsFile.length()) { string aux = m_aminoAcidsFileDirectory; aux += '/'; aux += m_aminoAcidsFile; jumps->loadJumps(aux.c_str(), true); } if(!jumps->checkSequence(m_reference)) { cerr << "Invalid sequence: " << m_reference << endl; return ERROR; } if(!jumps->checkSequence(m_reference)) { cerr << "Invalid sequence: " << m_reference << endl; return ERROR; } if(!jumps->checkSequence(m_reference)) { cerr << "Invalid sequence: " << m_reference << endl; return ERROR; } if(!jumps->checkSequence(m_user)) { cerr << "Invalid sequence: " << m_user << endl; return ERROR; } //dump_abruijn(cout, m_abinfo); ///////////////////////////////////////////////////////////////////////////// // set locations // Set the renderer location m_rendererObject->setRendererLocation(m_rendererLocation); // set the font files location m_rendererObject->setFontLocation(m_fontLocation); // set output file name if(m_fileOutDir.length() > 0) { // Set output directory, if defined m_rendererImage.outputFileName = m_fileOutDir; if(m_fileOutDir[m_fileOutDir.length()-1] != '/') m_rendererImage.outputFileName += '/'; } // Add the filename m_rendererImage.outputFileName += m_fileName; // reverse contig, if needed if(m_reverse) getReversedAbruijn(); else getDirectAbruijn(); // Init draw object setDrawProperties(); // Draw procedure plotContig(); // Do the drawing m_rendererObject->execute(); return OK; }
Slider::Slider(QWidget *parent,Tokeniser *t) : QWidget(NULL) { bool rangeGot = false; bool always = false; bool vertical = false; immediate = false; renderer = NULL; char outVar[64]; //!< name of the variable to write to title[0]=0; inverse = ConfigManager::inverse; ConfigRect pos = ConfigManager::parseRect(); bool done = false; t->getnextcheck(T_OCURLY); initSet=false; DataBuffer<float> *buf=NULL; outVar[0]=0; epsilon = 0.001f; isInteger=false; while(!done){ switch(t->getnext()){ case T_EXPR: // optional, provides a 'feedback' value case T_VAR: t->rewind(); buf = ConfigManager::parseFloatSource(); break; case T_EPSILON: epsilon = t->getnextfloat(); break; case T_INTEGER: isInteger=true; break; case T_OUT: t->getnextident(outVar); break; case T_INITIAL: initial = t->getnextfloat(); initSet=true; break; case T_HORIZONTAL: // dummy since it's the default break; case T_VERTICAL: vertical = true; break; case T_RANGE: minVal = t->getnextfloat(); t->getnextcheck(T_TO); maxVal = t->getnextfloat(); rangeGot=true; break; case T_TITLE: t->getnextstring(title); break; case T_ALWAYS: always=true; break; case T_IMMEDIATE: immediate=true; break; case T_CCURLY: done=true; break; default: throw Exception(t->getline()).set("Unexpected '%s'",t->getstring()); } } if(!outVar[0]) throw Exception("no output name given for slider",t->getline()); if(!rangeGot) throw Exception("no range given for slider",t->getline()); if(!initSet)initial=minVal; // create a new outvar out = new OutValue(outVar,0,always); out->listener=this; // so we know when our var was sent UDPClient::getInstance()->add(out); if(!title[0]) strcpy(title,outVar); renderer = buf ? new DataRenderer(this,buf) : NULL; connect(&timer,SIGNAL(timeout()),this,SLOT(timerTick())); try{ ConfigManager::registerNudgeable(outVar,this); }catch(Exception& e){ throw Exception(e,t->getline()); } QVBoxLayout *layout; layout = new QVBoxLayout(this); layout->setSpacing(0); slider = new InternalSlider(vertical?Qt::Vertical:Qt::Horizontal,this); slider->setMaximum(100); slider->setMinimum(0); layout->setAlignment(Qt::AlignCenter); label = new QLabel(title); label->setAlignment(Qt::AlignCenter); label->setMaximumSize(10000,30); layout->addWidget(slider); layout->addWidget(label); setLayout(layout); slider->setStyleSheet(defaultStyle); connect(slider,SIGNAL(sliderPressed()),this,SLOT(pressed())); connect(slider,SIGNAL(sliderReleased()),this,SLOT(released())); QGridLayout *l = (QGridLayout*)parent->layout(); l->addWidget(this,pos.y,pos.x,pos.h,pos.w); setMinimumSize(100,100); timer.start(200); machine.start(initState,this); setDrawProperties(); }