本文整理汇总了C++中Progress类的典型用法代码示例。如果您正苦于以下问题:C++ Progress类的具体用法?C++ Progress怎么用?C++ Progress使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Progress类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lincg
void lincg(PyramidT& pyramid, PyramidT& pC,
const Array2Df& b, Array2Df& x,
const int itmax, const float tol,
Progress &ph)
{
float rdotr_curr;
float rdotr_prev;
float rdotr_best;
float alpha;
float beta;
const size_t rows = pyramid.getRows();
const size_t cols = pyramid.getCols();
const size_t n = rows*cols;
const float tol2 = tol*tol;
Array2Df x_best(cols, rows);
Array2Df r(cols, rows);
Array2Df p(cols, rows);
Array2Df Ap(cols, rows);
// bnrm2 = ||b||
const float bnrm2 = utils::dotProduct(b.data(), n);
// r = b - Ax
multiplyA(pyramid, pC, x, r); // r = A x
utils::vsub(b.data(), r.data(), r.data(), n); // r = b - r
// rdotr = r.r
rdotr_best = rdotr_curr = utils::dotProduct(r.data(), n);
// Setup initial vector
std::copy(r.begin(), r.end(), p.begin()); // p = r
std::copy(x.begin(), x.end(), x_best.begin()); // x_best = x
const float irdotr = rdotr_curr;
const float percent_sf = 100.0f/std::log(tol2*bnrm2/irdotr);
int iter = 0;
int num_backwards = 0;
for (; iter < itmax; ++iter)
{
// TEST
ph.setValue(
static_cast<int>(std::log(rdotr_curr/irdotr)*percent_sf)
);
// User requested abort
if ( ph.canceled() && iter > 0 )
{
break;
}
// Ap = A p
multiplyA(pyramid, pC, p, Ap);
// alpha = r.r / (p . Ap)
alpha = rdotr_curr / utils::dotProduct(p.data(), Ap.data(), n);
// r = r - alpha Ap
utils::vsubs(r.data(), alpha, Ap.data(), r.data(), n);
// rdotr = r.r
rdotr_prev = rdotr_curr;
rdotr_curr = utils::dotProduct(r.data(), n);
// Have we gone unstable?
if (rdotr_curr > rdotr_prev)
{
// Save where we've got to
if (num_backwards == 0 && rdotr_prev < rdotr_best)
{
rdotr_best = rdotr_prev;
std::copy(x.begin(), x.end(), x_best.begin());
}
num_backwards++;
}
else
{
num_backwards = 0;
}
// x = x + alpha * p
utils::vadds(x.data(), alpha, p.data(), x.data(), n);
// Exit if we're done
// fprintf(stderr, "iter:%d err:%f\n", iter+1, sqrtf(rdotr/bnrm2));
if (rdotr_curr/bnrm2 < tol2)
break;
if (num_backwards > NUM_BACKWARDS_CEILING)
{
// Reset
num_backwards = 0;
std::copy(x_best.begin(), x_best.end(), x.begin());
// r = Ax
multiplyA(pyramid, pC, x, r);
// r = b - r
//.........这里部分代码省略.........
示例2: HEXDump_FindCallBack
static int HEXDump_FindCallBack(FindData &fd, HDFDCB_Data *pUserParam)
{
if (!fd.fileMatched)
return 0;
int argc(pUserParam->argc);
TCHAR **argv(pUserParam->argv);
BinaryFind &bf(pUserParam->bf);
FILE *fp = NULL;
_tfopen_s(&fp, fd.fullPath.c_str(), _T("rb"));
if (fp != NULL)
{
int nMatches(0);
bf.SetFindBuffer();
_tprintf(_T("%s\n"), fd.fullPath.c_str());
pUserParam->nFiles++;
Progress prog;
const TCHAR *argStr = FindArgValue(argc, argv, _T("-o="));
if (argStr != NULL) {
long long offset(StringUtils::getLLfromStr(argStr));
_fseeki64(fp, offset, offset >= 0 ? SEEK_SET : SEEK_END);
}
long long fileOffset(_ftelli64(fp));
long long sizeToRead(fd.GetFileSize());
const long long fileSize(sizeToRead);
argStr = FindArgValue(argc, argv, _T("-s="));
if (argStr != NULL) {
long long szRead = StringUtils::getLLfromStr(argStr);
if (fileOffset + szRead > sizeToRead)
sizeToRead = sizeToRead - fileOffset;
else
sizeToRead = szRead;
}
size_t findDumpSize(0), findDumpOffset(-16);
if (bf.HasFindPattern()) {
argStr = FindArgValue(argc, argv, _T("-d"));
if (argStr != NULL) {
if (*argStr == '=') {
findDumpSize = StringUtils::getLLfromStr(argStr + 1);
STR_SKIP_TILL_CHAR(argStr, ';');
if (*argStr)
findDumpOffset = StringUtils::getLLfromStr(argStr + 1);
}
if (findDumpSize <= 0)
findDumpSize = 48;
}
}
prog.SetTask(sizeToRead);
BinaryData buffer(NULL, 4 * 1024 * 1024);
while (sizeToRead > 0)
{
buffer.ReadFromFile(fp);
if (buffer.DataSize() <= 0)
break;
sizeToRead -= buffer.DataSize();
if (bf.HasFindPattern()) {
bf.SetFindBuffer(buffer);
while (true)
{
long long findPos = bf.FindNext();
if (findPos >= 0) {
_tprintf(_T("%08llX=-%08llX\n"), fileOffset + findPos, fileSize - (fileOffset + findPos));
if (findDumpSize > 0) {
const long long curPos(_ftelli64(fp));
long long newPos(fileOffset + findPos + findDumpOffset);
if (newPos < 0)
newPos = 0;
newPos &= ~0xf;
BinaryData bd(NULL, findDumpSize);
bd.ReadFromFile(fp, 0, newPos);
HexDump(bd, newPos);
_fseeki64(fp, curPos, SEEK_SET);
}
++nMatches;
}
else break;
}
}
else
fileOffset = HexDump(buffer, fileOffset);
if (prog.UpdateProgress(prog.GetCurrentDone() + buffer.DataSize()))
_tprintf(_T("\r%02.02f%%\r"), prog.GetCurrentPercentageDone());
}
_tprintf(_T("\r \r"));
fclose(fp);
if (nMatches > 0) {
pUserParam->nFound++;
if (nMatches > pUserParam->nMaxMatchPerFile)
pUserParam->nMaxMatchPerFile = nMatches;
if (nMatches > 1)
_tprintf(_T("%d matches\n"), nMatches);
}
}
return 0;
}
示例3: pStep
bool HIGHPASS::execute(PlugInArgList* pInArgList, PlugInArgList* pOutArgList)
{
StepResource pStep("Tutorial 5", "app", "219F1882-A59F-4835-BE2A-E83C0C8111EB");
if (pInArgList == NULL || pOutArgList == NULL)
{
return false;
}
Progress* pProgress = pInArgList->getPlugInArgValue<Progress>(Executable::ProgressArg());
RasterElement* pCube = pInArgList->getPlugInArgValue<RasterElement>(Executable::DataElementArg());
if (pCube == NULL)
{
std::string msg = "A raster cube must be specified.";
pStep->finalize(Message::Failure, msg);
if (pProgress != NULL)
{
pProgress->updateProgress(msg, 0, ERRORS);
}
return false;
}
RasterDataDescriptor* pDesc = static_cast<RasterDataDescriptor*>(pCube->getDataDescriptor());
VERIFY(pDesc != NULL);
FactoryResource<DataRequest> pRequest;
pRequest->setInterleaveFormat(BSQ);
DataAccessor pSrcAcc = pCube->getDataAccessor(pRequest.release());
ModelResource<RasterElement> pResultCube(RasterUtilities::createRasterElement(pCube->getName() +
"DResult", pDesc->getRowCount(), pDesc->getColumnCount(), pDesc->getDataType()));
if (pResultCube.get() == NULL)
{
std::string msg = "A raster cube could not be created.";
pStep->finalize(Message::Failure, msg);
if (pProgress != NULL)
{
pProgress->updateProgress(msg, 0, ERRORS);
}
return false;
}
FactoryResource<DataRequest> pResultRequest;
pResultRequest->setWritable(true);
DataAccessor pDestAcc = pResultCube->getDataAccessor(pResultRequest.release());
int rowSize= pDesc->getRowCount();
int colSize = pDesc->getColumnCount();
int zero=0;
int prevCol = 0;
int prevRow = 0;
int nextCol = 0;
int nextRow = 0;
int prevCol1 = 0;
int prevRow1= 0;
int nextCol1= 0;
int nextRow1= 0;
for (unsigned int row = 0; row < pDesc->getRowCount(); ++row)
{
if (pProgress != NULL)
{
pProgress->updateProgress("Calculating result", row * 100 / pDesc->getRowCount(), NORMAL);
}
if (isAborted())
{
std::string msg = getName() + " has been aborted.";
pStep->finalize(Message::Abort, msg);
if (pProgress != NULL)
{
pProgress->updateProgress(msg, 0, ABORT);
}
return false;
}
if (!pDestAcc.isValid())
{
std::string msg = "Unable to access the cube data.";
pStep->finalize(Message::Failure, msg);
if (pProgress != NULL)
{
pProgress->updateProgress(msg, 0, ERRORS);
}
return false;
}
for (unsigned int col = 0; col < pDesc->getColumnCount(); ++col)
{
double value=edgeDetection7(pSrcAcc, row, col, pDesc->getRowCount(), pDesc->getColumnCount());
switchOnEncoding(pDesc->getDataType(), conversion, pDestAcc->getColumn(), value);
pDestAcc->nextColumn();
}
pDestAcc->nextRow();
}
if (!isBatch())
{
Service<DesktopServices> pDesktop;
SpatialDataWindow* pWindow = static_cast<SpatialDataWindow*>(pDesktop->createWindow(pResultCube->getName(),
SPATIAL_DATA_WINDOW));
//.........这里部分代码省略.........
示例4: getCurrentDataset
void PreviewWidget::setCurrentDataset(ImportDescriptor* pDataset)
{
ImportDescriptor* pActiveDataset = getCurrentDataset();
if (pDataset == pActiveDataset)
{
return;
}
// Do nothing if the new current data set is not a data set in the current file
if (pDataset != NULL)
{
QMap<QString, vector<ImportDescriptor*> >::const_iterator iter = mDatasets.find(mCurrentFile);
if (iter != mDatasets.end())
{
vector<ImportDescriptor*> fileDatasets = iter.value();
if (std::find(fileDatasets.begin(), fileDatasets.end(), pDataset) == fileDatasets.end())
{
return;
}
}
}
mpCurrentDataset = pDataset;
// Delete the current preview
destroyPreview();
// Activate the label indicating that no data set preview is available
mpDatasetStack->setCurrentIndex(0);
// Check for no active data set
if (mpCurrentDataset == NULL)
{
emit currentDatasetChanged(mpCurrentDataset);
return;
}
// Only show the preview if the widget is visible or if the data set is imported
if ((isVisible() == false) || (mpCurrentDataset->isImported() == false))
{
if (pActiveDataset != NULL)
{
emit currentDatasetChanged(NULL);
}
return;
}
if (mpImporter != NULL)
{
Service<PlugInManagerServices> pManager;
Progress* pProgress = pManager->getProgress(dynamic_cast<PlugIn*>(mpImporter));
if (pProgress != NULL)
{
pProgress->attach(SIGNAL_NAME(Subject, Modified), Slot(this, &PreviewWidget::progressUpdated));
pProgress->updateProgress("Getting preview...", 0, NORMAL);
}
// Activate the progress bar
mpDatasetStack->setCurrentIndex(1);
// Update the data set label
QMap<QString, vector<ImportDescriptor*> >::const_iterator iter = mDatasets.find(mCurrentFile);
VERIFYNRV(iter != mDatasets.end());
vector<ImportDescriptor*> fileDatasets = iter.value();
unsigned int iIndex = 0;
unsigned int numDatasets = fileDatasets.size();
for (iIndex = 0; iIndex < numDatasets; ++iIndex)
{
ImportDescriptor* pCurrentDataset = fileDatasets[iIndex];
if (pCurrentDataset == pDataset)
{
break;
}
}
VERIFYNRV(iIndex < numDatasets);
const DataDescriptor* pDescriptor = mpCurrentDataset->getDataDescriptor();
VERIFYNRV(pDescriptor != NULL);
mpDatasetLabel->setText("<b>Data Set (" + QString::number(iIndex + 1) + " of " +
QString::number(numDatasets) + "):</b> " + QString::fromStdString(pDescriptor->getName()));
// Process events to erase the no preview available page
qApp->processEvents();
// Get the preview from the importer
mpImporterWidget = mpImporter->getPreview(pDescriptor, pProgress);
if (mpImporterWidget != NULL)
{
// Display the preview widget
SpatialDataView* pView = dynamic_cast<SpatialDataView*>(mpImporterWidget);
if (pView != NULL)
{
ChippingWidget* pChippingWidget = new ChippingWidget(pView,
dynamic_cast<const RasterDataDescriptor*>(pDescriptor), mpPreview);
//.........这里部分代码省略.........
示例5: pStep
bool CgmImporter::execute(PlugInArgList* pInArgList, PlugInArgList* pOutArgList)
{
Progress* pProgress = NULL;
DataElement* pElement = NULL;
StepResource pStep("Import cgm element", "app", "8D5522FE-4A89-44cb-9735-6920A3BFC903");
// get input arguments and log some useful info about them
{ // scope the MessageResource
MessageResource pMsg("Input arguments", "app", "A1735AC7-C182-45e6-826F-690DBA15D84A");
pProgress = pInArgList->getPlugInArgValue<Progress>(Executable::ProgressArg());
pMsg->addBooleanProperty("Progress Present", (pProgress != NULL));
pElement = pInArgList->getPlugInArgValue<DataElement>(Importer::ImportElementArg());
if (pElement == NULL)
{
if (pProgress != NULL)
{
pProgress->updateProgress("No data element", 0, ERRORS);
}
pStep->finalize(Message::Failure, "No data element");
return false;
}
pMsg->addProperty("Element name", pElement->getName());
}
if (pProgress != NULL)
{
pProgress->updateProgress((string("Read and parse file ") + pElement->getFilename()), 20, NORMAL);
}
// Create a new annotation layer for a spatial data view or get the layout layer for a product view
if (pProgress != NULL)
{
pProgress->updateProgress("Create a new layer", 30, NORMAL);
}
View* pView = mpDesktop->getCurrentWorkspaceWindowView();
if (pView == NULL)
{
if (pProgress != NULL)
{
pProgress->updateProgress("Could not access the current view.", 0, ERRORS);
}
pStep->finalize(Message::Failure, "Could not access the current view.");
return false;
}
UndoGroup undoGroup(pView, "Import CGM");
AnnotationLayer* pLayer = NULL;
SpatialDataView* pSpatialDataView = dynamic_cast<SpatialDataView*>(pView);
if (pSpatialDataView != NULL)
{
// Set the parent element of the annotation element to the primary raster element
LayerList* pLayerList = pSpatialDataView->getLayerList();
if (pLayerList != NULL)
{
RasterElement* pNewParentElement = pLayerList->getPrimaryRasterElement();
if (pNewParentElement != NULL)
{
Service<ModelServices> pModel;
pModel->setElementParent(pElement, pNewParentElement);
}
}
pLayer = dynamic_cast<AnnotationLayer*>(pSpatialDataView->createLayer(ANNOTATION, pElement));
}
else
{
ProductView* pProductView = dynamic_cast<ProductView*>(mpDesktop->getCurrentWorkspaceWindowView());
if (pProductView != NULL)
{
pLayer = pProductView->getLayoutLayer();
}
}
if (pLayer == NULL)
{
if (pProgress != NULL)
{
pProgress->updateProgress("Unable to get the annotation layer", 0, ERRORS);
}
pStep->finalize(Message::Failure, "Unable to get the annotation layer");
return false;
}
// add the CGM object
if (pProgress != NULL)
{
pProgress->updateProgress("Create the CGM object", 60, NORMAL);
}
CgmObject* pCgmObject = dynamic_cast<CgmObject*>(pLayer->addObject(CGM_OBJECT));
if (pCgmObject == NULL)
{
if (pProgress != NULL)
{
pProgress->updateProgress("Unable to create the CGM object", 0, ERRORS);
}
//.........这里部分代码省略.........
示例6: pStep
bool Segmentation::Ransac_for_buildings(float dem_spacing, double ransac_threshold, cv::Mat original_tiles_merged)
{
StepResource pStep("Computing RANSAC on all the identified buildings", "app", "a2beb9b8-218e-11e4-969b-b2227cce2b54");
ProgressResource pResource("ProgressBar");
Progress *pProgress = pResource.get();
pProgress-> setSettingAutoClose(true);
pProgress->updateProgress("Computing RANSAC on all buildings", 0, NORMAL);
Ransac_buildings = Ransac(Segmentation::path);
cv::Mat roof_image = cv::Mat::zeros(original_tiles_merged.size(), CV_8UC3);
buildingS.resize(blobs.size());
buildingS_inliers.resize(blobs.size());
buildingS_outliers.resize(blobs.size());
buildingS_plane_coefficients.resize(blobs.size());
buldingS_number_inliers.resize(blobs.size());
std::ofstream building_file;
std::ofstream cont_file;
cont_file.open (std::string(path) + "/Results/Number_of_RANSAC_applications.txt");
for(int i = 0; i < blobs.size(); i++)
{// i index is the building (blob) index
pProgress->updateProgress("Computing RANSAC on all buildings\nBuilding "+ StringUtilities::toDisplayString(i) + " on "+ StringUtilities::toDisplayString(blobs.size()), static_cast<double>(static_cast<double>(i)/blobs.size()*100), NORMAL);
building_file.open (std::string(path) + "/Results/Building_" + StringUtilities::toDisplayString(i)+".txt");
building_file << 'i' << '\t' << 'j' << '\t' << 'X' << '\t' << 'Y' << '\t' << 'Z' << '\n';
buildingS[i].setConstant(blobs[i].size(), 3, 0.0);
// the j loop retrieves the X, Y, Z coordinate for each pixel of all the buildings
for(int j = 0; j < blobs[i].size(); j++)
{// j index is the pixel index for the single building
// loop on all the pixel of the SINGLE building
int pixel_column = blobs[i][j].x;
int pixel_row = blobs[i][j].y;
double x_building = pixel_column * dem_spacing;// xMin + pixel_column * dem_spacing // object coordinate
double y_building = pixel_row * dem_spacing;// yMin + pixel_row * dem_spacing // object coordinate
double z_building = original_tiles_merged.at<float>(pixel_row, pixel_column);//object coordinate
buildingS[i](j,0) = x_building;
buildingS[i](j,1) = y_building;
buildingS[i](j,2) = z_building;
building_file << pixel_row+1 << '\t' << pixel_column+1 << '\t' << buildingS[i](j,0) << '\t' << buildingS[i](j,1) << '\t' << buildingS[i](j,2) << '\n'; //+1 on the imae coordinates to verify with opticks' rasters (origin is 1,1)
}
building_file.close();
std::ofstream inliers_file;
std::ofstream parameters_file;
inliers_file.open (std::string(path) + "/Results/Inliers_building_" + StringUtilities::toDisplayString(i)+".txt");
parameters_file.open (std::string(path) + "/Results/plane_parameters_building_" + StringUtilities::toDisplayString(i)+".txt");
//parameters_file << "a\tb\tc\td\tmean_dist\tstd_dist\n";
int cont = 0;
Ransac_buildings.ransac_msg += "\n____________Building number " + StringUtilities::toDisplayString(i) +"____________\n";
Ransac_buildings.ransac_msg += "\nITERATION NUMBER " + StringUtilities::toDisplayString(cont) +"\n";
Ransac_buildings.ComputeModel(buildingS[i], ransac_threshold);
buldingS_number_inliers[i]= Ransac_buildings.n_best_inliers_count;
buildingS_inliers[i] = Ransac_buildings.final_inliers;
buildingS_outliers[i] = Ransac_buildings.final_outliers;
buildingS_plane_coefficients[i] = Ransac_buildings.final_model_coefficients;
double inliers_percentage = static_cast<double>( (Ransac_buildings.n_best_inliers_count) ) / static_cast<double> (buildingS[i].rows());
int inliers_so_far = Ransac_buildings.n_best_inliers_count;
std::vector<int> old_final_outliers = Ransac_buildings.final_outliers;
// DRAWS THE ROOFS yellow
for (int k = 0; k < Ransac_buildings.n_best_inliers_count; k++)
{
int pixel_row = static_cast<int>(buildingS[i](Ransac_buildings.final_inliers[k], 1) / dem_spacing);
int pixel_column = static_cast<int>(buildingS[i](Ransac_buildings.final_inliers[k], 0) / dem_spacing);
unsigned char r = 255;// unsigned char(255 * (rand()/(1.0 + RAND_MAX)));
unsigned char g = 255;// unsigned char(255 * (rand()/(1.0 + RAND_MAX)));
unsigned char b = 0;//unsigned char(255 * (rand()/(1.0 + RAND_MAX)));
roof_image.at<cv::Vec3b>(pixel_row, pixel_column)[0] = b;
roof_image.at<cv::Vec3b>(pixel_row, pixel_column)[1] = g;
roof_image.at<cv::Vec3b>(pixel_row, pixel_column)[2] = r;
}
while (inliers_percentage < 0.90)
{
cont ++;
Ransac_buildings.ransac_msg += "\nITERATION NUMBER " + StringUtilities::toDisplayString(cont) +"\n";
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> building_outliers;
building_outliers.setConstant(buildingS[i].rows() - inliers_so_far, 3, 0.0);
//* forse il metodo va già bene così, perchè riempio la matrice deglio outlier in maniera ordinata,
//* solo che gli indici degli inlier/outlier non sono più indicativi rispetto alla matrice di building originale, ma rispetto alla matrice di innput
//* devo riporatre gli ID degli indici alla loro posizione originale
for (int w = 0; w <building_outliers.rows(); w++)
{
building_outliers(w, 0) = buildingS[i](old_final_outliers[w], 0);
building_outliers(w, 1) = buildingS[i](old_final_outliers[w], 1);
building_outliers(w, 2) = buildingS[i](old_final_outliers[w], 2);
//Ransac_buildings.ransac_msg += "\n" + StringUtilities::toDisplayString(pixel_row+1) + "\t" + StringUtilities::toDisplayString(pixel_column+1) + "\t" + StringUtilities::toDisplayString(final_outliers[w]) + "\t" + StringUtilities::toDisplayString(building_outliers(w, 0))+ "\t"+ StringUtilities::toDisplayString(building_outliers(w, 1)) + "\t" + StringUtilities::toDisplayString(building_outliers(w, 2))+"\n"; // needed for tesing (test passed at first iteration)
}
//.........这里部分代码省略.........
示例7: outWS
void SliceMD::slice(typename MDEventWorkspace<MDE, nd>::sptr ws) {
// Create the ouput workspace
typename MDEventWorkspace<OMDE, ond>::sptr outWS(
new MDEventWorkspace<OMDE, ond>());
for (size_t od = 0; od < m_binDimensions.size(); od++) {
outWS->addDimension(m_binDimensions[od]);
}
outWS->setCoordinateSystem(ws->getSpecialCoordinateSystem());
outWS->initialize();
// Copy settings from the original box controller
BoxController_sptr bc = ws->getBoxController();
// store wrute buffer size for the future
// uint64_t writeBufSize =
// bc->getFileIO()getDiskBuffer().getWriteBufferSize();
// and disable write buffer (if any) for input MD Events for this algorithm
// purposes;
// bc->setCacheParameters(1,0);
BoxController_sptr obc = outWS->getBoxController();
// Use the "number of bins" as the "split into" parameter
for (size_t od = 0; od < m_binDimensions.size(); od++)
obc->setSplitInto(od, m_binDimensions[od]->getNBins());
obc->setSplitThreshold(bc->getSplitThreshold());
bool bTakeDepthFromInputWorkspace =
getProperty("TakeMaxRecursionDepthFromInput");
int tempDepth = getProperty("MaxRecursionDepth");
size_t maxDepth =
bTakeDepthFromInputWorkspace ? bc->getMaxDepth() : size_t(tempDepth);
obc->setMaxDepth(maxDepth);
// size_t outputSize = writeBufSize;
// obc->setCacheParameters(sizeof(OMDE),outputSize);
obc->resetNumBoxes();
// Perform the first box splitting
outWS->splitBox();
size_t lastNumBoxes = obc->getTotalNumMDBoxes();
// --- File back end ? ----------------
std::string filename = getProperty("OutputFilename");
if (!filename.empty()) {
// First save to the NXS file
g_log.notice() << "Running SaveMD to create file back-end" << std::endl;
IAlgorithm_sptr alg = createChildAlgorithm("SaveMD");
alg->setPropertyValue("Filename", filename);
alg->setProperty("InputWorkspace", outWS);
alg->setProperty("MakeFileBacked", true);
alg->executeAsChildAlg();
if (!obc->isFileBacked())
throw std::runtime_error("SliceMD with file-backed output: Can not set "
"up file-backed output workspace ");
auto IOptr = obc->getFileIO();
size_t outBufSize = IOptr->getWriteBufferSize();
// the buffer size for resulting workspace; reasonable size is at least 10
// data chunk sizes (nice to verify)
if (outBufSize < 10 * IOptr->getDataChunk()) {
outBufSize = 10 * IOptr->getDataChunk();
IOptr->setWriteBufferSize(outBufSize);
}
}
// Function defining which events (in the input dimensions) to place in the
// output
MDImplicitFunction *function = this->getImplicitFunctionForChunk(NULL, NULL);
std::vector<API::IMDNode *> boxes;
// Leaf-only; no depth limit; with the implicit function passed to it.
ws->getBox()->getBoxes(boxes, 1000, true, function);
// Sort boxes by file position IF file backed. This reduces seeking time,
// hopefully.
bool fileBackedWS = bc->isFileBacked();
if (fileBackedWS)
API::IMDNode::sortObjByID(boxes);
Progress *prog = new Progress(this, 0.0, 1.0, boxes.size());
// The root of the output workspace
MDBoxBase<OMDE, ond> *outRootBox = outWS->getBox();
// if target workspace has events, we should count them as added
uint64_t totalAdded = outWS->getNEvents();
uint64_t numSinceSplit = 0;
// Go through every box for this chunk.
// PARALLEL_FOR_IF( !bc->isFileBacked() )
for (int i = 0; i < int(boxes.size()); i++) {
MDBox<MDE, nd> *box = dynamic_cast<MDBox<MDE, nd> *>(boxes[i]);
// Perform the binning in this separate method.
if (box) {
// An array to hold the rotated/transformed coordinates
coord_t outCenter[ond];
const std::vector<MDE> &events = box->getConstEvents();
typename std::vector<MDE>::const_iterator it = events.begin();
//.........这里部分代码省略.........
示例8: IsisMain
//.........这里部分代码省略.........
double flines(fcorns.lowerRight.line - fcorns.topLeft.line + 1.0);
double fsamps(fcorns.lowerRight.sample - fcorns.topLeft.sample + 1.0);
// We want to create a grid of control points that is N rows by M columns.
// Get row and column variables, if not entered, default to 1% of the input
// image size
int rows(1), cols(1);
if (ui.WasEntered("ROWS")) {
rows = ui.GetInteger("ROWS");
}
else {
rows = (int)(((flines - 1.0) / ar->SearchChip()->Lines()) + 1);
}
cols = ui.GetInteger("COLUMNS");
if (cols == 0) {
cols = (int)(((fsamps - 1.0) / ar->SearchChip()->Samples()) + 1);
}
// Calculate spacing for the grid of points
double lSpacing = floor(flines / rows);
double sSpacing = floor(fsamps / cols);
#if defined(ISIS_DEBUG)
cout << "# Samples in Overlap: " << fsamps << endl;
cout << "# Lines in Overlap : " << flines << endl;
cout << "# Rows: " << rows << endl;
cout << "# Columns: " << cols << endl;
cout << "Line Spacing: " << lSpacing << endl;
cout << "Sample Spacing: " << sSpacing << endl;
#endif
// Display the progress...10% 20% etc.
Progress prog;
prog.SetMaximumSteps(rows * cols);
prog.CheckStatus();
// Initialize control point network
ControlNet cn;
cn.SetType(ControlNet::ImageToImage);
cn.SetUserName(Application::UserName());
cn.SetCreatedDate(iTime::CurrentLocalTime());
// Get serial numbers for input cubes
string transSN = SerialNumber::Compose(trans, true);
string matchSN = SerialNumber::Compose(match, true);
cn.SetTarget(transSN);
cn.SetDescription("Records s/c jitter between two adjacent HiRISE images");
// Set up results parameter saves
JitterParms jparms;
jparms.fromCorns = fcorns;
jparms.fromJit = trans.GetInfo();
jparms.matchCorns = mcorns;
jparms.matchJit = match.GetInfo();
jparms.regFile = regFile.Expanded();
jparms.cols = cols;
jparms.rows = rows;
jparms.lSpacing = lSpacing;
jparms.sSpacing = sSpacing;
jparms.nSuspects = 0;
// Loop through grid of points and get statistics to compute
// translation values
RegList reglist;
示例9: VERIFY
bool PlugInTester::execute(PlugInArgList* pInArgs, PlugInArgList* pOutArgs)
{
VERIFY(pInArgs != NULL);
Progress* pProgress = NULL;
PlugInArg* pArg = NULL;
if (pInArgs != NULL && pInArgs->getArg(Executable::ProgressArg(), pArg) && pArg != NULL)
{
pProgress = reinterpret_cast<Progress*>(pArg->getActualValue());
}
vector<PlugInDescriptor*> allPlugins = mpPlugMgr->getPlugInDescriptors();
vector<string> testablePlugins;
for (vector<PlugInDescriptor*>::const_iterator it = allPlugins.begin(); it != allPlugins.end(); ++it)
{
PlugInDescriptor* pDescriptor = *it;
if (pDescriptor == NULL)
{
continue;
}
if (pDescriptor->isTestable())
{
testablePlugins.push_back(pDescriptor->getName());
}
}
string msg;
bool bSuccess = false;
PlugInSelectorDlg dlg(mpDesktop->getMainWidget(), testablePlugins);
int stat = dlg.exec();
if (stat == QDialog::Accepted)
{
const vector<string>& pluginsToTest = dlg.getSelectedPlugins();
// TODO: Set up a ProgressTracker for each plug-in to test
vector<string>::const_iterator it;
for (it = pluginsToTest.begin(); it != pluginsToTest.end(); ++it)
{
PlugInResource pPlugIn(*it);
Testable* pTestable = dynamic_cast<Testable*>(pPlugIn.get());
if (pTestable == NULL)
{
msg += "The Plug-In " + *it + " cannot be created!";
if (pProgress != NULL)
{
pProgress->updateProgress(msg, 0, ERRORS);
}
return false;
}
msg += "Testing " + *it + "...";
if (pProgress != NULL)
{
pProgress->updateProgress(msg, 0, NORMAL);
}
stringstream ostr;
bSuccess = pTestable->runAllTests(pProgress, ostr);
msg += "Testing of Plug-In " + *it + " has been completed";
ReportingLevel lvl = NORMAL;
if (!bSuccess)
{
lvl = ERRORS;
msg += " with errors!";
}
else
{
msg += "!";
}
if (ostr.str().size() > 0)
{
msg += "\n" + ostr.str() + "\n";
}
else
{
msg += "\n";
}
if (pProgress != NULL)
{
pProgress->updateProgress(msg, 100, lvl);
}
}
}
return bSuccess;
}
示例10: ScanAreaNodeIds
/**
* Scans all areas. If an areas is of one of the given merge types, index all node ids
* into the given NodeUseMap for all outer rings of the given area.
*/
bool MergeAreasGenerator::ScanAreaNodeIds(Progress& progress,
const TypeConfig& typeConfig,
FileScanner& scanner,
const TypeInfoSet& mergeTypes,
std::unordered_set<Id>& nodeUseMap)
{
uint32_t areaCount=0;
progress.SetAction("Scanning for nodes joining areas from '"+scanner.GetFilename()+"'");
scanner.GotoBegin();
scanner.Read(areaCount);
uint8_t type;
Id id;
Area data;
std::unordered_set<Id> usedOnceSet;
for (uint32_t current=1; current<=areaCount; current++) {
progress.SetProgress(current,areaCount);
scanner.Read(type);
scanner.Read(id);
data.ReadImport(typeConfig,
scanner);
if (!mergeTypes.IsSet(data.GetType())) {
continue;
}
// We insert every node id only once per area, because we want to
// find nodes that are shared by *different* areas.
std::unordered_set<Id> nodeIds;
for (const auto& ring: data.rings) {
if (!ring.IsOuterRing()) {
continue;
}
for (const auto node : ring.nodes) {
Id id=node.GetId();
if (nodeIds.find(id)==nodeIds.end()) {
auto entry=usedOnceSet.find(id);
if (entry!=usedOnceSet.end()) {
nodeUseMap.insert(id);
}
else {
usedOnceSet.insert(id);
}
nodeIds.insert(id);
}
}
}
}
return true;
}
示例11: wsreg_convert_registry
/*
* Converts the specified registry file. The specified file is
* removed if the conversion is successful. If conversion_count
* is not NULL, the total number of Articles converted will be
* passed back.
*/
int
wsreg_convert_registry(const char *filename, int *conversion_count,
Progress_function progress_callback)
{
File_util *futil = _wsreg_fileutil_initialize();
if (initialized == WSREG_NOT_INITIALIZED) {
return (WSREG_NOT_INITIALIZED);
}
if (!futil->exists(filename)) {
/*
* Bad filename.
*/
return (WSREG_FILE_NOT_FOUND);
}
if (futil->can_read(filename) && futil->can_write(filename)) {
/*
* The registry file can be read and removed.
*/
if (wsreg_can_access_registry(O_RDWR)) {
/*
* The conversion permissions are appropriate.
* Perform the conversion.
*/
int result;
int article_count = 0;
Progress *progress =
_wsreg_progress_create(
(Progress_callback)*progress_callback);
int count = 0;
Unz_article_input_stream *ain = NULL;
Conversion *c = NULL;
/*
* The first progress section represents the
* unzipping of the data file.
*/
progress->set_section_bounds(progress, 5, 1);
ain = _wsreg_uzais_open(filename, &result);
progress->finish_section(progress);
if (result != WSREG_SUCCESS) {
/*
* The open failed. Clean up and
* return the error code.
*/
if (ain != NULL) {
ain->close(ain);
}
progress->free(progress);
return (result);
}
c = _wsreg_conversion_create(progress);
/*
* The second progress section represents
* the reading of articles.
*/
article_count = ain->get_article_count(ain);
progress->set_section_bounds(progress, 8,
article_count);
while (ain->has_more_articles(ain)) {
Article *a = ain->get_next_article(ain);
if (a != NULL) {
c->add_article(c, a);
}
progress->increment(progress);
}
progress->finish_section(progress);
ain->close(ain);
/*
* The third progress section represents
* the conversion and registration of the
* resulting components.
*/
progress->set_section_bounds(progress, 100,
article_count);
count = c->register_components(c, NULL, FALSE);
progress->finish_section(progress);
/*
* Pass the count back to the caller.
*/
if (conversion_count != NULL) {
*conversion_count = count;
}
/*
* Remove the old registry file.
*/
futil->remove(filename);
//.........这里部分代码省略.........
示例12: Import
bool MergeAreasGenerator::Import(const TypeConfigRef& typeConfig,
const ImportParameter& parameter,
Progress& progress)
{
TypeInfoSet mergeTypes;
FileScanner scanner;
FileWriter writer;
uint32_t areasWritten=0;
for (const auto& type : typeConfig->GetTypes()) {
if (type->CanBeArea() &&
type->GetMergeAreas()) {
mergeTypes.Set(type);
}
}
std::unordered_set<Id> nodeUseMap;
try {
scanner.Open(AppendFileToDir(parameter.GetDestinationDirectory(),
MergeAreaDataGenerator::AREAS_TMP),
FileScanner::Sequential,
parameter.GetRawWayDataMemoryMaped());
if (!ScanAreaNodeIds(progress,
*typeConfig,
scanner,
mergeTypes,
nodeUseMap)) {
return false;
}
uint32_t nodeCount=nodeUseMap.size();
progress.Info("Found "+NumberToString(nodeCount)+" nodes as possible connection points for areas");
/* ------ */
writer.Open(AppendFileToDir(parameter.GetDestinationDirectory(),
AREAS2_TMP));
writer.Write(areasWritten);
while (true) {
TypeInfoSet loadedTypes;
std::vector<AreaMergeData> mergeJob(typeConfig->GetTypeCount());
//
// Load type data
//
progress.SetAction("Collecting area data by type");
if (!GetAreas(parameter,
progress,
*typeConfig,
mergeTypes,
loadedTypes,
nodeUseMap,
scanner,
writer,
mergeJob,
areasWritten)) {
return false;
}
// Merge
progress.SetAction("Merging areas");
for (const auto& type : loadedTypes) {
if (!mergeJob[type->GetIndex()].areas.empty()) {
progress.Info("Merging areas of type "+type->GetName());
MergeAreas(progress,
nodeUseMap,
mergeJob[type->GetIndex()]);
progress.Info("Reduced areas of '"+type->GetName()+"' from "+NumberToString(mergeJob[type->GetIndex()].areaCount)+" to "+NumberToString(mergeJob[type->GetIndex()].areaCount-mergeJob[type->GetIndex()].mergedAway.size()));
mergeJob[type->GetIndex()].areas.clear();
}
}
// Store back merge result
if (!loadedTypes.Empty()) {
if (!WriteMergeResult(progress,
*typeConfig,
scanner,
writer,
loadedTypes,
mergeJob,
areasWritten)) {
return false;
}
mergeTypes.Remove(loadedTypes);
}
if (mergeTypes.Empty()) {
//.........这里部分代码省略.........
示例13: WriteMergeResult
bool MergeAreasGenerator::WriteMergeResult(Progress& progress,
const TypeConfig& typeConfig,
FileScanner& scanner,
FileWriter& writer,
const TypeInfoSet& loadedTypes,
std::vector<AreaMergeData>& mergeJob,
uint32_t& areasWritten)
{
uint32_t areaCount=0;
std::unordered_map<FileOffset,AreaRef> merges;
std::unordered_set<FileOffset> ignores;
for (const auto& type : loadedTypes) {
for (const auto& area : mergeJob[type->GetIndex()].merges) {
merges[area->GetFileOffset()]=area;
}
ignores.insert(mergeJob[type->GetIndex()].mergedAway.begin(),
mergeJob[type->GetIndex()].mergedAway.end());
}
scanner.GotoBegin();
scanner.Read(areaCount);
for (uint32_t a=1; a<=areaCount; a++) {
uint8_t type;
Id id;
AreaRef area=std::make_shared<Area>();
progress.SetProgress(a,areaCount);
scanner.Read(type);
scanner.Read(id);
area->ReadImport(typeConfig,
scanner);
if (loadedTypes.IsSet(area->GetType())) {
if (ignores.find(area->GetFileOffset())!=ignores.end()) {
continue;
}
writer.Write(type);
writer.Write(id);
const auto& merge=merges.find(area->GetFileOffset()) ;
if (merge!=merges.end()) {
area=merge->second;
}
area->WriteImport(typeConfig,
writer);
areasWritten++;
}
}
return true;
}
示例14: GetAreas
/**
* Load areas which has a one for the types given by types. If at leats one node
* in one of the outer rings of the areas is marked in nodeUseMap as "used at least twice",
* index it into the areas map.
*
* If the number of indexed areas is bigger than parameter.GetRawWayBlockSize() types are
* dropped form areas until the number is again below the lmit.
*/
bool MergeAreasGenerator::GetAreas(const ImportParameter& parameter,
Progress& progress,
const TypeConfig& typeConfig,
const TypeInfoSet& candidateTypes,
TypeInfoSet& loadedTypes,
const std::unordered_set<Id>& nodeUseMap,
FileScanner& scanner,
FileWriter& writer,
std::vector<AreaMergeData>& mergeJob,
uint32_t& areasWritten)
{
bool firstCall=areasWritten==0; // We are called for the first time
uint32_t areaCount=0;
size_t collectedAreasCount=0;
size_t typesWithAreas=0;
for (auto& data : mergeJob) {
data.areaCount=0;
}
loadedTypes=candidateTypes;
scanner.GotoBegin();
scanner.Read(areaCount);
for (uint32_t a=1; a<=areaCount; a++) {
uint8_t type;
Id id;
AreaRef area=std::make_shared<Area>();
progress.SetProgress(a,areaCount);
scanner.Read(type);
scanner.Read(id);
area->ReadImport(typeConfig,
scanner);
mergeJob[area->GetType()->GetIndex()].areaCount++;
// This is an area of a type that does not get merged,
// we directly store it in the target file.
if (!loadedTypes.IsSet(area->GetType())) {
if (firstCall) {
writer.Write(type);
writer.Write(id);
area->WriteImport(typeConfig,
writer);
areasWritten++;
}
continue;
}
bool isMergeCandidate=false;
for (const auto& ring: area->rings) {
if (!ring.IsOuterRing()) {
continue;
}
for (const auto node : ring.nodes) {
if (nodeUseMap.find(node.GetId())!=nodeUseMap.end()) {
isMergeCandidate=true;
break;
}
}
if (isMergeCandidate) {
break;
}
}
if (!isMergeCandidate) {
continue;
}
if (mergeJob[area->GetType()->GetIndex()].areas.empty()) {
typesWithAreas++;
}
mergeJob[area->GetType()->GetIndex()].areas.push_back(area);
collectedAreasCount++;
while (collectedAreasCount>parameter.GetRawWayBlockSize() &&
typesWithAreas>1) {
TypeInfoRef victimType;
//.........这里部分代码省略.........
示例15: catch
/**
* This function deals with the logic necessary for summing a Workspace2D.
* @param localworkspace The input workspace for summing.
* @param outSpec The spectrum for the summed output.
* @param progress The progress indicator.
* @param numSpectra The number of spectra contributed to the sum.
* @param numMasked The spectra dropped from the summations because they are
* masked.
* @param numZeros The number of zero bins in histogram workspace or empty
* spectra for event workspace.
*/
void SumSpectra::doWorkspace2D(MatrixWorkspace_const_sptr localworkspace,
ISpectrum *outSpec, Progress &progress,
size_t &numSpectra, size_t &numMasked,
size_t &numZeros) {
// Get references to the output workspaces's data vectors
MantidVec &YSum = outSpec->dataY();
MantidVec &YError = outSpec->dataE();
MantidVec Weight;
std::vector<size_t> nZeros;
if (m_calculateWeightedSum) {
Weight.assign(YSum.size(), 0);
nZeros.assign(YSum.size(), 0);
}
numSpectra = 0;
numMasked = 0;
numZeros = 0;
// Loop over spectra
std::set<int>::iterator it;
// for (int i = m_minSpec; i <= m_maxSpec; ++i)
for (it = this->m_indices.begin(); it != this->m_indices.end(); ++it) {
int i = *it;
// Don't go outside the range.
if ((i >= this->m_numberOfSpectra) || (i < 0)) {
g_log.error() << "Invalid index " << i
<< " was specified. Sum was aborted.\n";
break;
}
try {
// Get the detector object for this spectrum
Geometry::IDetector_const_sptr det = localworkspace->getDetector(i);
// Skip monitors, if the property is set to do so
if (!m_keepMonitors && det->isMonitor())
continue;
// Skip masked detectors
if (det->isMasked()) {
numMasked++;
continue;
}
} catch (...) {
// if the detector not found just carry on
}
numSpectra++;
// Retrieve the spectrum into a vector
const MantidVec &YValues = localworkspace->readY(i);
const MantidVec &YErrors = localworkspace->readE(i);
if (m_calculateWeightedSum) {
for (int k = 0; k < this->m_yLength; ++k) {
if (YErrors[k] != 0) {
double errsq = YErrors[k] * YErrors[k];
YError[k] += errsq;
Weight[k] += 1. / errsq;
YSum[k] += YValues[k] / errsq;
} else {
nZeros[k]++;
}
}
} else {
for (int k = 0; k < this->m_yLength; ++k) {
YSum[k] += YValues[k];
YError[k] += YErrors[k] * YErrors[k];
}
}
// Map all the detectors onto the spectrum of the output
outSpec->addDetectorIDs(localworkspace->getSpectrum(i)->getDetectorIDs());
progress.report();
}
if (m_calculateWeightedSum) {
numZeros = 0;
for (size_t i = 0; i < Weight.size(); i++) {
if (nZeros[i] == 0)
YSum[i] *= double(numSpectra) / Weight[i];
else
numZeros += nZeros[i];
}
}
}