void StepScan::generateCurve( const QString & var ) { // Create a matrix workspace out of the variable that's asked for IAlgorithm_sptr alg = AlgorithmManager::Instance().create("ConvertTableToMatrixWorkspace"); alg->setLogging(false); // Don't log this algorithm alg->setPropertyValue("InputWorkspace", m_tableWSName); m_plotWSName = "__plot_" + m_tableWSName; alg->setPropertyValue("OutputWorkspace", m_plotWSName); alg->setPropertyValue("ColumnX", var.toStdString() ); alg->setPropertyValue("ColumnY", "Counts" ); alg->execute(); // Now create one for the normalisation, if required if ( m_uiForm.normalization->currentIndex() != 0 ) { IAlgorithm_sptr norm = AlgorithmManager::Instance().create("ConvertTableToMatrixWorkspace"); norm->setChild(true); norm->setLogging(false); // Don't log this algorithm norm->setPropertyValue("InputWorkspace", m_tableWSName); norm->setPropertyValue("OutputWorkspace", "dummyName"); norm->setPropertyValue("ColumnX", var.toStdString() ); // TODO: Protect against column being missing (e.g. if monitor not found in data) norm->setPropertyValue("ColumnY", m_uiForm.normalization->currentText().toStdString() ); norm->execute(); MatrixWorkspace_sptr top = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(m_plotWSName); MatrixWorkspace_sptr bottom = norm->getProperty("OutputWorkspace"); top /= bottom; } plotCurve(); }
// display results using OpenGL (called by GLUT) void display() { sdkStartTimer(&timer); // map PBO to get CUDA device pointer uchar4 *d_output; checkCudaErrors(cudaGraphicsMapResources(1, &cuda_pbo_resource, 0)); size_t num_bytes; checkCudaErrors(cudaGraphicsResourceGetMappedPointer((void **)&d_output, &num_bytes, cuda_pbo_resource)); render(imageWidth, imageHeight, tx, ty, scale, cx, cy, blockSize, gridSize, g_FilterMode, d_output); checkCudaErrors(cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0)); // Common display path { // display results glClear(GL_COLOR_BUFFER_BIT); #if USE_BUFFER_TEX // display using buffer texture glBindTexture(GL_TEXTURE_BUFFER_EXT, bufferTex); glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, fprog); glEnable(GL_FRAGMENT_PROGRAM_ARB); glProgramLocalParameterI4iNV(GL_FRAGMENT_PROGRAM_ARB, 0, width, 0, 0, 0); #else // download image from PBO to OpenGL texture glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBindTexture(GL_TEXTURE_TYPE, displayTex); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexSubImage2D(GL_TEXTURE_TYPE, 0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, 0); glEnable(GL_TEXTURE_TYPE); #endif // draw textured quad glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); glTexCoord2f(0.0f , (GLfloat)height); glVertex2f(0.0f, 0.0f); glTexCoord2f((GLfloat)width, (GLfloat)height); glVertex2f(1.0f, 0.0f); glTexCoord2f((GLfloat)width, 0.0f); glVertex2f(1.0f, 1.0f); glTexCoord2f(0.0f , 0.0f); glVertex2f(0.0f, 1.0f); glEnd(); glDisable(GL_TEXTURE_TYPE); glDisable(GL_FRAGMENT_PROGRAM_ARB); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); if (drawCurves) { // draw spline curves glPushMatrix(); glScalef(0.25, 0.25, 1.0); glTranslatef(0.0, 2.0, 0.0); glColor3f(1.0, 0.0, 0.0); plotCurve(bspline_w3); glTranslatef(1.0, 0.0, 0.0); glColor3f(0.0, 1.0, 0.0); plotCurve(bspline_w2); glTranslatef(1.0, 0.0, 0.0); glColor3f(0.0, 0.0, 1.0); plotCurve(bspline_w1); glTranslatef(1.0, 0.0, 0.0); glColor3f(1.0, 0.0, 1.0); plotCurve(bspline_w0); glPopMatrix(); glColor3f(1.0, 1.0, 1.0); } } glutSwapBuffers(); glutReportErrors(); sdkStopTimer(&timer); computeFPS(); }