void IsisMain() { ProcessByLine p; Cube *icube = p.SetInputCube("FROM"); p.SetOutputCube("TO"); double gsigma = Isis::Application::GetUserInterface().GetDouble("GSIGMA"); for(int i = 0; i < icube->bandCount(); i++) { Histogram hist = *(icube->histogram(i + 1)); double mean = (hist.Maximum() + hist.Minimum()) / 2.0; double stdev = (hist.Maximum() - hist.Minimum()) / (2.0 * gsigma); stretch.push_back(new GaussianStretch(hist, mean, stdev)); } p.StartProcess(gauss); for(int i = 0; i < icube->bandCount(); i++) delete stretch[i]; stretch.clear(); p.EndProcess(); }
void IsisMain() { UserInterface &ui = Application::GetUserInterface(); Process p; // Get the histogram Cube *icube = p.SetInputCube("FROM"); double validMin = Isis::ValidMinimum; double validMax = Isis::ValidMaximum; if(ui.WasEntered("VALIDMIN")) { validMin = ui.GetDouble("VALIDMIN"); } if(ui.WasEntered("VALIDMAX")) { validMax = ui.GetDouble("VALIDMAX"); } // Set a global Pvl for storing results Pvl mainpvl; // Get the number of bands to process int bandcount = icube->bandCount(); for (int i = 1; i <= bandcount; i++) { Histogram *stats = icube->histogram(i, validMin, validMax); // Construct a label with the results PvlGroup results("Results"); results += PvlKeyword("From", icube->fileName()); results += PvlKeyword("Band", toString(icube->physicalBand(i))); if(stats->ValidPixels() != 0) { results += PvlKeyword("Average", toString(stats->Average())); results += PvlKeyword("StandardDeviation", toString(stats->StandardDeviation())); results += PvlKeyword("Variance", toString(stats->Variance())); // These statistics only worked on a histogram results += PvlKeyword("Median", toString(stats->Median())); results += PvlKeyword("Mode", toString(stats->Mode())); results += PvlKeyword("Skew", toString(stats->Skew())); results += PvlKeyword("Minimum", toString(stats->Minimum())); results += PvlKeyword("Maximum", toString(stats->Maximum())); results += PvlKeyword("Sum", toString(stats->Sum())); } results += PvlKeyword("TotalPixels", toString(stats->TotalPixels())); results += PvlKeyword("ValidPixels", toString(stats->ValidPixels())); results += PvlKeyword("OverValidMaximumPixels", toString(stats->OverRangePixels())); results += PvlKeyword("UnderValidMinimumPixels", toString(stats->UnderRangePixels())); results += PvlKeyword("NullPixels", toString(stats->NullPixels())); results += PvlKeyword("LisPixels", toString(stats->LisPixels())); results += PvlKeyword("LrsPixels", toString(stats->LrsPixels())); results += PvlKeyword("HisPixels", toString(stats->HisPixels())); results += PvlKeyword("HrsPixels", toString(stats->HrsPixels())); mainpvl.addGroup(results); delete stats; // Write the results to the log Application::Log(results); } // Write the results to the output file if the user specified one if(ui.WasEntered("TO")) { QString outFile = FileName(ui.GetFileName("TO")).expanded(); bool exists = FileName(outFile).fileExists(); bool append = ui.GetBoolean("APPEND"); ofstream os; bool writeHeader = false; //write the results in the requested format. if(ui.GetString("FORMAT") == "PVL") { if(append) { mainpvl.append(outFile); } else { mainpvl.write(outFile); } } else { //if the format was not PVL, write out a flat file. if(append) { os.open(outFile.toAscii().data(), ios::app); if(!exists) { writeHeader = true; } } else { os.open(outFile.toAscii().data(), ios::out); writeHeader = true; } if(writeHeader) { for(int i = 0; i < mainpvl.group(0).keywords(); i++) { os << mainpvl.group(0)[i].name(); if( i < mainpvl.group(0).keywords() - 1 ) { os << ","; } } os << endl; } for(int i = 0; i < mainpvl.groups(); i++) { for (int j = 0; j < mainpvl.group(i).keywords(); j++) { os << (QString)mainpvl.group(i)[j]; if(j < mainpvl.group(i).keywords() - 1) { os << ","; } } os << endl; } } } }
/** * ScatterPlotDataConstructor * * @param xCube The x-axis cube * @param xCubeBand The x-axis cube's band to get DN values from * @param xBinCount The resolution of the x-axis * @param yCube The y-axis cube * @param yCubeBand The y-axis cube's band to get DN values from * @param yBinCount The resolution of the y-axis * @param sampleRange The sample range to gather the histogram from, this is * the same for the x cube and y cube. * @param lineRange The line range to gather the histogram from, this is * the same for the x cube and y cube. */ ScatterPlotData::ScatterPlotData( Cube *xCube, int xCubeBand, int xBinCount, Cube *yCube, int yCubeBand, int yBinCount, QwtInterval sampleRange, QwtInterval lineRange) : QwtRasterData(), m_xDnToBinStretch(new Stretch), m_yDnToBinStretch(new Stretch), m_counts( new QVector< QVector<int> >(yBinCount, QVector<int>(xBinCount))), m_alarmedBins(new QMap<int, bool>) { int startLine = qRound(lineRange.minValue()); int endLine = qRound(lineRange.maxValue()); ASSERT(xCube->lineCount() == yCube->lineCount()); Histogram *xCubeHist = new Histogram(*xCube, xCubeBand, NULL, sampleRange.minValue(), lineRange.minValue(), sampleRange.maxValue(), lineRange.maxValue(), xBinCount, true); m_xCubeMin = xCubeHist->Minimum(); m_xCubeMax = xCubeHist->Maximum(); Histogram *yCubeHist = new Histogram(*yCube, yCubeBand, NULL, sampleRange.minValue(), lineRange.minValue(), sampleRange.maxValue(), lineRange.maxValue(), yBinCount, true); m_yCubeMin = yCubeHist->Minimum(); m_yCubeMax = yCubeHist->Maximum(); m_xDnToBinStretch->AddPair(m_xCubeMin, 0); m_xDnToBinStretch->AddPair(m_xCubeMax, xBinCount - 1); m_yDnToBinStretch->AddPair(m_yCubeMin, 0); m_yDnToBinStretch->AddPair(m_yCubeMax, yBinCount - 1); m_maxCount = 0; Brick brick1((int)(sampleRange.maxValue() - sampleRange.minValue() + 1), 1, 1, xCube->pixelType()); Brick brick2((int)(sampleRange.maxValue() - sampleRange.minValue() + 1), 1, 1, yCube->pixelType()); ASSERT(xCube->sampleCount() == yCube->sampleCount()); ASSERT(brick1.size() == brick2.size()); for (int line = startLine; line <= endLine; line++) { brick1.SetBasePosition(qRound(sampleRange.minValue()), line, xCubeBand); xCube->read(brick1); brick2.SetBasePosition(qRound(sampleRange.minValue()), line, yCubeBand); yCube->read(brick2); for (int i = 0; i < brick1.size(); i++) { double xDn = brick1[i]; double yDn = brick2[i]; if (!IsSpecial(xDn) && !IsSpecial(yDn)) { double x = m_xDnToBinStretch->Map(xDn); double y = m_yDnToBinStretch->Map(yDn); if (!IsSpecial(x) && !IsSpecial(y)) { int roundedX = qRound(x); int roundedY = qRound(y); if (roundedX >= 0 && roundedX < xBinCount && roundedY >= 0 && roundedY < yBinCount) { int value = (*m_counts)[roundedY][roundedX] + 1; (*m_counts)[roundedY][roundedX] = value; m_maxCount = qMax(m_maxCount, value); } } } } } setInterval(Qt::XAxis, QwtInterval(m_xCubeMin, m_xCubeMax)); setInterval(Qt::YAxis, QwtInterval(m_yCubeMin, m_yCubeMax)); setInterval(Qt::ZAxis, QwtInterval(0, m_maxCount)); }