Exemple #1
0
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);
}
Exemple #2
0
///////////////////////////////////////////////////////////////////////////////
// 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;
}
Exemple #3
0
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();
}