StatsWrapper::StatsWrapper(int deckId) { mDeckId = deckId; char buffer[512]; sprintf(buffer, "stats/player_deck%i.txt", deckId); string deckstats = options.profileFile(buffer); initStatistics(deckstats); }
QgsRasterBandStats QgsGrassRasterProvider::bandStatistics( int bandNo, int stats, const QgsRectangle &boundingBox, int sampleSize, QgsRasterBlockFeedback * ) { QgsDebugMsg( QString( "theBandNo = %1 sampleSize = %2" ).arg( bandNo ).arg( sampleSize ) ); QgsRasterBandStats myRasterBandStats; initStatistics( myRasterBandStats, bandNo, stats, boundingBox, sampleSize ); const auto constMStatistics = mStatistics; for ( const QgsRasterBandStats &stats : constMStatistics ) { if ( stats.contains( myRasterBandStats ) ) { QgsDebugMsg( "Using cached statistics." ); return stats; } } QgsRectangle extent = myRasterBandStats.extent; int sampleRows = myRasterBandStats.height; int sampleCols = myRasterBandStats.width; // With stats we have to be careful about timeout, empirical value, // 0.001 / cell should be sufficient using 0.005 to be sure + constant (ms) int timeout = 30000 + 0.005 * xSize() * ySize(); QString error; QHash<QString, QString> info = QgsGrass::info( mGisdbase, mLocation, mMapset, mMapName, QgsGrassObject::Raster, QStringLiteral( "stats" ), extent, sampleRows, sampleCols, timeout, error ); if ( info.isEmpty() || !error.isEmpty() ) { return myRasterBandStats; } myRasterBandStats.sum = info[QStringLiteral( "SUM" )].toDouble(); myRasterBandStats.elementCount = info[QStringLiteral( "COUNT" )].toInt(); myRasterBandStats.minimumValue = info[QStringLiteral( "MIN" )].toDouble(); myRasterBandStats.maximumValue = info[QStringLiteral( "MAX" )].toDouble(); myRasterBandStats.range = myRasterBandStats.maximumValue - myRasterBandStats.minimumValue; myRasterBandStats.sumOfSquares = info[QStringLiteral( "SQSUM" )].toDouble(); myRasterBandStats.mean = info[QStringLiteral( "MEAN" )].toDouble(); myRasterBandStats.stdDev = info[QStringLiteral( "STDEV" )].toDouble(); QgsDebugMsg( QString( "min = %1" ).arg( myRasterBandStats.minimumValue ) ); QgsDebugMsg( QString( "max = %1" ).arg( myRasterBandStats.maximumValue ) ); QgsDebugMsg( QString( "count = %1" ).arg( myRasterBandStats.elementCount ) ); QgsDebugMsg( QString( "stdev = %1" ).arg( myRasterBandStats.stdDev ) ); myRasterBandStats.statsGathered = QgsRasterBandStats::Min | QgsRasterBandStats::Max | QgsRasterBandStats::Range | QgsRasterBandStats::Mean | QgsRasterBandStats::Sum | QgsRasterBandStats::SumOfSquares | QgsRasterBandStats::StdDev; mStatistics.append( myRasterBandStats ); return myRasterBandStats; }
QgsRasterBandStats QgsGrassRasterProvider::bandStatistics( int theBandNo, int theStats, const QgsRectangle & theExtent, int theSampleSize ) { QgsDebugMsg( QString( "theBandNo = %1 theSampleSize = %2" ).arg( theBandNo ).arg( theSampleSize ) ); QgsRasterBandStats myRasterBandStats; initStatistics( myRasterBandStats, theBandNo, theStats, theExtent, theSampleSize ); foreach ( QgsRasterBandStats stats, mStatistics ) { if ( stats.contains( myRasterBandStats ) ) { QgsDebugMsg( "Using cached statistics." ); return stats; } } QgsRectangle extent = myRasterBandStats.extent; int sampleRows = myRasterBandStats.height; int sampleCols = myRasterBandStats.width; // With stats we have to be careful about timeout, empirical value, // 0.001 / cell should be sufficient using 0.005 to be sure + constant (ms) int timeout = 30000 + 0.005 * xSize() * ySize(); QHash<QString, QString> info = QgsGrass::info( mGisdbase, mLocation, mMapset, mMapName, QgsGrass::Raster, "stats", extent, sampleRows, sampleCols, timeout ); if ( info.isEmpty() ) { return myRasterBandStats; } myRasterBandStats.sum = info["SUM"].toDouble(); myRasterBandStats.elementCount = info["COUNT"].toInt(); myRasterBandStats.minimumValue = info["MIN"].toDouble(); myRasterBandStats.maximumValue = info["MAX"].toDouble(); myRasterBandStats.range = myRasterBandStats.maximumValue - myRasterBandStats.minimumValue; myRasterBandStats.sumOfSquares = info["SQSUM"].toDouble(); myRasterBandStats.mean = info["MEAN"].toDouble(); myRasterBandStats.stdDev = info["STDEV"].toDouble(); QgsDebugMsg( QString( "min = %1" ).arg( myRasterBandStats.minimumValue ) ); QgsDebugMsg( QString( "max = %1" ).arg( myRasterBandStats.maximumValue ) ); QgsDebugMsg( QString( "count = %1" ).arg( myRasterBandStats.elementCount ) ); QgsDebugMsg( QString( "stdev = %1" ).arg( myRasterBandStats.stdDev ) ); myRasterBandStats.statsGathered = QgsRasterBandStats::Min | QgsRasterBandStats::Max | QgsRasterBandStats::Range | QgsRasterBandStats::Mean | QgsRasterBandStats::Sum | QgsRasterBandStats::SumOfSquares | QgsRasterBandStats::StdDev; mStatistics.append( myRasterBandStats ); return myRasterBandStats; }
bool QgsRasterInterface::hasStatistics( int theBandNo, int theStats, const QgsRectangle & theExtent, int theSampleSize ) { QgsDebugMsg( QString( "theBandNo = %1 theStats = %2 theSampleSize = %3" ).arg( theBandNo ).arg( theStats ).arg( theSampleSize ) ); if ( mStatistics.size() == 0 ) return false; QgsRasterBandStats myRasterBandStats; initStatistics( myRasterBandStats, theBandNo, theStats, theExtent, theSampleSize ); foreach ( QgsRasterBandStats stats, mStatistics ) { if ( stats.contains( myRasterBandStats ) ) { QgsDebugMsg( "Has cached statistics." ); return true; } } return false; }
bool QgsRasterInterface::hasStatistics( int bandNo, int stats, const QgsRectangle &extent, int sampleSize ) { QgsDebugMsgLevel( QString( "theBandNo = %1 stats = %2 sampleSize = %3" ).arg( bandNo ).arg( stats ).arg( sampleSize ), 4 ); if ( mStatistics.isEmpty() ) return false; QgsRasterBandStats myRasterBandStats; initStatistics( myRasterBandStats, bandNo, stats, extent, sampleSize ); Q_FOREACH ( const QgsRasterBandStats &stats, mStatistics ) { if ( stats.contains( myRasterBandStats ) ) { QgsDebugMsgLevel( "Has cached statistics.", 4 ); return true; } } return false; }
//FIXME: why no demuxer will not get an eof if replaying by seek(0)? void AVPlayer::play() { if (isPlaying()) stop(); /* * avoid load mutiple times when replaying the same seekable file * TODO: force load unseekable stream? avio.seekable. currently you * must setFile() agian to reload an unseekable stream */ //FIXME: seek(0) for audio without video crashes, why? //TODO: no eof if replay by seek(0) if (true || !isLoaded() || !vCodecCtx) { //if (!isLoaded() && !load()) if (!load()) { mStatistics.reset(); return; } else { initStatistics(); } } else { qDebug("seek(0)"); demuxer.seek(0); //FIXME: now assume it is seekable. for unseekable, setFile() again } Q_ASSERT(clock != 0); clock->reset(); if (vCodecCtx && video_thread) { qDebug("Starting video thread..."); video_thread->start(); } if (aCodecCtx && audio_thread) { qDebug("Starting audio thread..."); audio_thread->start(); } demuxer_thread->start(); //blockSignals(false); emit started(); }
StatsWrapper::StatsWrapper(string deckstats) { initStatistics(deckstats); }
QgsRasterBandStats QgsRasterInterface::bandStatistics( int theBandNo, int theStats, const QgsRectangle & theExtent, int theSampleSize ) { QgsDebugMsg( QString( "theBandNo = %1 theStats = %2 theSampleSize = %3" ).arg( theBandNo ).arg( theStats ).arg( theSampleSize ) ); // TODO: null values set on raster layer!!! QgsRasterBandStats myRasterBandStats; initStatistics( myRasterBandStats, theBandNo, theStats, theExtent, theSampleSize ); foreach ( QgsRasterBandStats stats, mStatistics ) { if ( stats.contains( myRasterBandStats ) ) { QgsDebugMsg( "Using cached statistics." ); return stats; } } QgsRectangle myExtent = myRasterBandStats.extent; int myWidth = myRasterBandStats.width; int myHeight = myRasterBandStats.height; //int myDataType = dataType( theBandNo ); int myXBlockSize = xBlockSize(); int myYBlockSize = yBlockSize(); if ( myXBlockSize == 0 ) // should not happen, but happens { myXBlockSize = 500; } if ( myYBlockSize == 0 ) // should not happen, but happens { myYBlockSize = 500; } int myNXBlocks = ( myWidth + myXBlockSize - 1 ) / myXBlockSize; int myNYBlocks = ( myHeight + myYBlockSize - 1 ) / myYBlockSize; double myXRes = myExtent.width() / myWidth; double myYRes = myExtent.height() / myHeight; // TODO: progress signals // used by single pass stdev double myMean = 0; double mySumOfSquares = 0; bool myFirstIterationFlag = true; for ( int myYBlock = 0; myYBlock < myNYBlocks; myYBlock++ ) { for ( int myXBlock = 0; myXBlock < myNXBlocks; myXBlock++ ) { QgsDebugMsg( QString( "myYBlock = %1 myXBlock = %2" ).arg( myYBlock ).arg( myXBlock ) ); int myBlockWidth = qMin( myXBlockSize, myWidth - myXBlock * myXBlockSize ); int myBlockHeight = qMin( myYBlockSize, myHeight - myYBlock * myYBlockSize ); double xmin = myExtent.xMinimum() + myXBlock * myXBlockSize * myXRes; double xmax = xmin + myBlockWidth * myXRes; double ymin = myExtent.yMaximum() - myYBlock * myYBlockSize * myYRes; double ymax = ymin - myBlockHeight * myYRes; QgsRectangle myPartExtent( xmin, ymin, xmax, ymax ); QgsRasterBlock* blk = block( theBandNo, myPartExtent, myBlockWidth, myBlockHeight ); // Collect the histogram counts. for ( qgssize i = 0; i < (( qgssize ) myBlockHeight ) * myBlockWidth; i++ ) { if ( blk->isNoData( i ) ) continue; // NULL double myValue = blk->value( i ); myRasterBandStats.sum += myValue; myRasterBandStats.elementCount++; if ( myFirstIterationFlag ) { myFirstIterationFlag = false; myRasterBandStats.minimumValue = myValue; myRasterBandStats.maximumValue = myValue; } else { if ( myValue < myRasterBandStats.minimumValue ) { myRasterBandStats.minimumValue = myValue; } if ( myValue > myRasterBandStats.maximumValue ) { myRasterBandStats.maximumValue = myValue; } } // Single pass stdev double myDelta = myValue - myMean; myMean += myDelta / myRasterBandStats.elementCount; mySumOfSquares += myDelta * ( myValue - myMean ); } delete blk; } } myRasterBandStats.range = myRasterBandStats.maximumValue - myRasterBandStats.minimumValue; myRasterBandStats.mean = myRasterBandStats.sum / myRasterBandStats.elementCount; myRasterBandStats.sumOfSquares = mySumOfSquares; // OK with single pass? // stdDev may differ from GDAL stats, because GDAL is using naive single pass // algorithm which is more error prone (because of rounding errors) // Divide result by sample size - 1 and get square root to get stdev myRasterBandStats.stdDev = sqrt( mySumOfSquares / ( myRasterBandStats.elementCount - 1 ) ); QgsDebugMsg( "************ STATS **************" ); QgsDebugMsg( QString( "MIN %1" ).arg( myRasterBandStats.minimumValue ) ); QgsDebugMsg( QString( "MAX %1" ).arg( myRasterBandStats.maximumValue ) ); QgsDebugMsg( QString( "RANGE %1" ).arg( myRasterBandStats.range ) ); QgsDebugMsg( QString( "MEAN %1" ).arg( myRasterBandStats.mean ) ); QgsDebugMsg( QString( "STDDEV %1" ).arg( myRasterBandStats.stdDev ) ); myRasterBandStats.statsGathered = QgsRasterBandStats::All; mStatistics.append( myRasterBandStats ); return myRasterBandStats; }
int main(int argc,char** argv) { int i,j; time_t t; rfbScreenInfoPtr server; rfbClientLog=rfbTestLog; rfbClientErr=rfbTestLog; /* Initialize server */ server=rfbGetScreen(&argc,argv,width,height,8,3,4); server->frameBuffer=malloc(400*300*4); server->cursor=NULL; for(j=0;j<400*300*4;j++) server->frameBuffer[j]=j; rfbInitServer(server); rfbProcessEvents(server,0); initStatistics(); #ifndef ALL_AT_ONCE for(i=0;i<NUMBER_OF_ENCODINGS_TO_TEST;i++) { #else /* Initialize clients */ for(i=0;i<NUMBER_OF_ENCODINGS_TO_TEST;i++) #endif startClient(i,server); t=time(NULL); /* test 20 seconds */ while(time(NULL)-t<20) { idle(server); rfbProcessEvents(server,1); } rfbLog("%d failed, %d received\n",totalFailed,totalCount); #ifndef ALL_AT_ONCE { rfbClientPtr cl; rfbClientIteratorPtr iter=rfbGetClientIterator(server); while((cl=rfbClientIteratorNext(iter))) rfbCloseClient(cl); rfbReleaseClientIterator(iter); } } #endif rfbScreenCleanup(server); for(i=0;i<thread_counter;i++) pthread_join(all_threads[i], NULL); free(server->frameBuffer); rfbLog("Statistics:\n"); for(i=0;i<NUMBER_OF_ENCODINGS_TO_TEST;i++) rfbLog("%s encoding: %d failed, %d received\n", testEncodings[i].str,statistics[1][i],statistics[0][i]); if(totalFailed) return 1; return(0); }
//Here we parse the gocde void parseGCode(HWND hWnd, HINSTANCE g_hInst, char *filePath) { std::string line; std::ifstream gcodeFile; gcodeFile.open(filePath); //Get number of lines in the file //int numLines = std::count(std::istreambuf_iterator<char>(gcodeFile), // std::istreambuf_iterator<char>(), '\n'); //wchar_t szMessage[300]; //StringCchPrintf(szMessage, ARRAYSIZE(szMessage), L"%d lines", numLines); //MessageBox(hWnd, szMessage, L"Error", MB_OK); //Reset cursor file position //gcodeFile.seekg(0, ios::beg); CSplash splash1(TEXT(""), RGB(128, 128, 128), g_hInst); splash1.ShowSplash(); if (hWnd) { if (gcodeFile.is_open()) { //MessageBox(hWnd, L"File Opened !", L"Error", MB_OK); } } else { printf("File Opened\n"); } printf("Parsing GCode File\n"); initStatistics(); vector3D cornerLow(0.f, 0.f, 0.f); vector3D cornerHigh(0.f, 0.f, 0.f); float extrusionWidth = 0.f; vector3D currentLocation(0.f,0.f,0.f); vector3D highCorner(-FLT_MAX,-FLT_MAX,-FLT_MAX); vector3D lowCorner(FLT_MAX,FLT_MAX,FLT_MAX); while (getline(gcodeFile, line)) { float oldZ = currentLocation.z; //std::istringstream *iss = new std::istringstream(line.c_str()); std::istringstream iss(line.c_str()); // Is this a new Layer ? if (isNewLayer(iss, ¤tLocation)) { statistics.layersCount++; // If height has not been found yet if (statistics.layerHeight == 0.0){ float theoreticalHeight = floor((currentLocation.z - oldZ)*100)/100; if (theoreticalHeight > 0 && theoreticalHeight < 1){ // We assume that a layer is less than 1mm thick statistics.layerHeight = theoreticalHeight; } } } else { iss = std::istringstream(line.c_str()); } std::string s; iss >> s; std::string command; bool commandFound = scanCharactersFromSet(s, "GMT0123456789", command); if (!commandFound) { continue; } if(command == "M104" || command == "M109" || command == "G10") { //printf("M104 M109 G10\n"); // M104: Set Extruder Temperature // Set the temperature of the current extruder and return control to the host immediately // (i.e. before that temperature has been reached by the extruder). See also M109 that does the same but waits. // /!\ This is deprecated because temperatures should be set using the G10 and T commands. // G10 // Example: G10 P3 X17.8 Y-19.3 Z0.0 R140 S205 // This sets the offset for extrude head 3 (from the P3) to the X and Y values specified. // The R value is the standby temperature in oC that will be used for the tool, and the S value is its operating temperature. // Makerware puts the temperature first, skip it iss >> s; if (scanString(s, "S", NULL)) { scanInt(s, "S"); } // Extract the tool index iss >> s; if (scanString(s, "P", NULL) || scanString(s, "T", NULL)) { int toolIndex; if (scanString(s, "P", NULL)) toolIndex = scanInt(s, "P"); else toolIndex = scanInt(s, "T"); bool previouslyUsingToolB = statistics.usingToolB; statistics.usingToolB = (toolIndex >= 1); if (statistics.usingToolB == !previouslyUsingToolB) { statistics.dualExtrusion = true; } } } else if(command == "G1") {