Plot::Plot( QWidget *parent ): QwtPlot( parent ) { setObjectName( "FriedbergPlot" ); setTitle( "Temperature of Friedberg/Germany" ); setAxisTitle( QwtPlot::xBottom, "2007" ); setAxisScaleDiv( QwtPlot::xBottom, yearScaleDiv() ); setAxisScaleDraw( QwtPlot::xBottom, new YearScaleDraw() ); setAxisTitle( QwtPlot::yLeft, QString( "Temperature [%1C]" ).arg( QChar( 0x00B0 ) ) ); // grid QwtPlotGrid *grid = new Grid; grid->attach( this ); insertLegend( new QwtLegend(), QwtPlot::RightLegend ); const int numDays = 365; QVector<QPointF> averageData( numDays ); QVector<QwtIntervalSample> rangeData( numDays ); for ( int i = 0; i < numDays; i++ ) { const Temperature &t = friedberg2007[i]; averageData[i] = QPointF( double( i ), t.averageValue ); rangeData[i] = QwtIntervalSample( double( i ), QwtInterval( t.minValue, t.maxValue ) ); } insertCurve( "Average", averageData, Qt::black ); insertErrorBars( "Range", rangeData, Qt::blue ); // LeftButton for the zooming // MidButton for the panning // RightButton: zoom out by 1 // Ctrl+RighButton: zoom out to full size QwtPlotZoomer* zoomer = new QwtPlotZoomer( canvas() ); zoomer->setRubberBandPen( QColor( Qt::black ) ); zoomer->setTrackerPen( QColor( Qt::black ) ); zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier ); zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::RightButton ); QwtPlotPanner *panner = new QwtPlotPanner( canvas() ); panner->setMouseButton( Qt::MidButton ); canvas()->setPalette( Qt::darkGray ); canvas()->setBorderRadius( 10 ); }
bool DataVar::initFromEscript(escript::Data& escriptData, const_DomainChunk_ptr dom) { #ifndef VISIT_PLUGIN cleanup(); if (!escriptData.isConstant() && !escriptData.actsExpanded()) { cerr << "WARNING: Weipa only supports constant & expanded data, " << "not initializing " << varName << endl; return false; } domain = dom; rank = escriptData.getDataPointRank(); ptsPerSample = escriptData.getNumDataPointsPerSample(); shape = escriptData.getDataPointShape(); funcSpace = escriptData.getFunctionSpace().getTypeCode(); numSamples = escriptData.getNumSamples(); centering = domain->getCenteringForFunctionSpace(funcSpace); #ifdef _DEBUG cout << varName << ":\t" << numSamples << " samples, " << ptsPerSample << " pts/s, rank: " << rank << endl; #endif NodeData_ptr nodes = domain->getMeshForFunctionSpace(funcSpace); if (nodes == NULL) return false; meshName = nodes->getName(); siloMeshName = nodes->getFullSiloName(); initialized = true; // no samples? Nothing more to do. if (numSamples == 0) return true; const escript::DataTypes::dim_t* iPtr = escriptData.getFunctionSpace().borrowSampleReferenceIDs(); sampleID.insert(sampleID.end(), numSamples, 0); copy(iPtr, iPtr+numSamples, sampleID.begin()); size_t dimSize = 1; if (rank > 0) dimSize *= shape[0]; if (rank > 1) dimSize *= shape[1]; if (rank > 2) { cerr << "WARNING: Rank " << rank << " data is not supported!\n"; initialized = false; } // special case: shape=(1,) or shape=(1,1) -> convert to scalar if (dimSize==1 && rank>0) { rank=0; shape.clear(); } if (initialized) { size_t dataSize = dimSize * ptsPerSample; float* tempData = new float[dataSize*numSamples]; float* destPtr = tempData; if (escriptData.isConstant()) { const escript::DataTypes::real_t* values = escriptData.getDataRO(); for (int pointNo=0; pointNo<numSamples*ptsPerSample; pointNo++) { copy(values, values+dimSize, destPtr); destPtr += dimSize; } } else { for (int sampleNo=0; sampleNo<numSamples; sampleNo++) { const escript::DataTypes::real_t* values = escriptData.getSampleDataRO(sampleNo); copy(values, values+dataSize, destPtr); destPtr += dataSize; } } const float* srcPtr = tempData; for (size_t i=0; i < dimSize; i++, srcPtr++) { float* c = averageData(srcPtr, dimSize); dataArray.push_back(c); } delete[] tempData; initialized = reorderSamples(); } return initialized; #else // VISIT_PLUGIN return false; #endif }
// // Reads variable data from dump file // bool DataVar::initFromFile(const string& filename, const_DomainChunk_ptr dom) { cleanup(); #if ESYS_HAVE_NETCDF NcError ncerr(NcError::silent_nonfatal); NcFile* input = new NcFile(filename.c_str()); if (!input->is_valid()) { cerr << "Could not open input file " << filename << "." << endl; delete input; return false; } NcDim* dim; NcAtt* att; att = input->get_att("type_id"); int typeID = att->as_int(0); if (typeID != 2) { cerr << "WARNING: Only expanded data supported!" << endl; delete input; return false; } att = input->get_att("rank"); rank = att->as_int(0); dim = input->get_dim("num_data_points_per_sample"); ptsPerSample = dim->size(); att = input->get_att("function_space_type"); funcSpace = att->as_int(0); centering = dom->getCenteringForFunctionSpace(funcSpace); dim = input->get_dim("num_samples"); numSamples = dim->size(); #ifdef _DEBUG cout << varName << ":\t" << numSamples << " samples, " << ptsPerSample << " pts/s, rank: " << rank << endl; #endif domain = dom; NodeData_ptr nodes = domain->getMeshForFunctionSpace(funcSpace); if (nodes == NULL) { delete input; return false; } meshName = nodes->getName(); siloMeshName = nodes->getFullSiloName(); initialized = true; size_t dimSize = 1; vector<long> counts; if (rank > 0) { dim = input->get_dim("d0"); int d = dim->size(); shape.push_back(d); counts.push_back(d); dimSize *= d; } if (rank > 1) { dim = input->get_dim("d1"); int d = dim->size(); shape.push_back(d); counts.push_back(d); dimSize *= d; } if (rank > 2) { cerr << "WARNING: Rank " << rank << " data is not supported!\n"; initialized = false; } if (initialized && numSamples > 0) { sampleID.insert(sampleID.end(), numSamples, 0); NcVar* var = input->get_var("id"); var->get(&sampleID[0], numSamples); size_t dataSize = dimSize*numSamples*ptsPerSample; counts.push_back(ptsPerSample); counts.push_back(numSamples); float* tempData = new float[dataSize]; var = input->get_var("data"); var->get(tempData, &counts[0]); const float* srcPtr = tempData; for (size_t i=0; i < dimSize; i++, srcPtr++) { float* c = averageData(srcPtr, dimSize); dataArray.push_back(c); } delete[] tempData; initialized = reorderSamples(); } delete input; #endif // ESYS_HAVE_NETCDF return initialized; }