예제 #1
0
bool AMExporter2DAscii::writeSeparateFiles(const QString &destinationFolderPath)
{
	if (option_->higherDimensionsInRows()){

		for (int s = 0, sSize = separateFileDataSources_.size(); s < sSize; s++) {

			setCurrentDataSource(separateFileDataSources_.at(s));	// sets currentDataSourceIndex_
			AMDataSource* source = currentScan_->dataSourceAt(currentDataSourceIndex_);

			QFile output;
			QString separateFileName = parseKeywordString( destinationFolderPath % "/" % option_->separateSectionFileName() );
			separateFileName = removeNonPrintableCharacters(separateFileName);

			if(!openFile(&output, separateFileName)) {
				AMErrorMon::report(AMErrorReport(this, AMErrorReport::Alert, -4, "Export failed (partially): You selected to create separate files for certain data sets. Could not open the file '" % separateFileName % "' for writing.  Check that you have permission to save files there, and that a file with that name doesn't already exists."));
				return false;
			}

			int spectraSize = source->size(2);
			QString columnDelimiter = option_->columnDelimiter();
			QString newLineDelimiter = option_->newlineDelimiter();
			QTextStream out(&output);
			int yRange = yRange_ == -1 ? currentScan_->scanSize(1) : (yRange_-1);
			int xRange = currentScan_->scanSize(0);

			for (int y = 0; y < yRange; y++){

				for (int x = 0; x < xRange; x++){

					QVector<double> data(spectraSize);
					source->values(AMnDIndex(x, y, 0), AMnDIndex(x, y, spectraSize-1), data.data());

					for (int i = 0; i < spectraSize; i++)
						out << data.at(i) << columnDelimiter;

					out << newLineDelimiter;
				}
			}

			if (yRange_ != -1 && xIndex_ != -1){

				for (int i = 0; i < xIndex_; i++){

					QVector<double> data(spectraSize);
					source->values(AMnDIndex(i, yRange_-1, 0), AMnDIndex(i, yRange_-1, spectraSize-1), data.data());

					for (int i = 0; i < spectraSize; i++)
						out << data.at(i) << columnDelimiter;

					out << newLineDelimiter;
				}

				out << newLineDelimiter;
			}

			output.close();
		}
	}

	else{

		for (int s = 0, sSize = separateFileDataSources_.size(); s < sSize; s++) {

			setCurrentDataSource(separateFileDataSources_.at(s));	// sets currentDataSourceIndex_
			AMDataSource* source = currentScan_->dataSourceAt(currentDataSourceIndex_);

			QFile output;
			QString separateFileName = parseKeywordString( destinationFolderPath % "/" % option_->separateSectionFileName() );
			separateFileName = removeNonPrintableCharacters(separateFileName);

			if(!openFile(&output, separateFileName)) {
				AMErrorMon::report(AMErrorReport(this, AMErrorReport::Alert, -4, "Export failed (partially): You selected to create separate files for certain data sets. Could not open the file '" % separateFileName % "' for writing.  Check that you have permission to save files there, and that a file with that name doesn't already exists."));
				return false;
			}

			int spectraSize = source->size(2);
			QString columnDelimiter = option_->columnDelimiter();
			QString newLineDelimiter = option_->newlineDelimiter();
			QTextStream out(&output);
			int yRange = yRange_ == -1 ? currentScan_->scanSize(1) : (yRange_-1);
			int xRange = currentScan_->scanSize(0);

			for (int i = 0; i < spectraSize; i++){

				for (int y = 0; y < yRange; y++)
					for (int x = 0; x < xRange; x++)
						out << double(source->value(AMnDIndex(x, y, i))) << columnDelimiter;

				if (yRange_ != -1 && xIndex_ != -1){

					for (int x = 0; x < xIndex_; x++)
						out << double(source->value(AMnDIndex(x, yRange_-1, i))) << columnDelimiter;
				}

				out << newLineDelimiter;
			}

			output.close();
		}
	}

	return true;
}
예제 #2
0
void AM4DBinningABEditor::updateSeriesData()
{
	AMDataSource *source = analysisBlock_->inputDataSourceAt(0);

	if (source){

		int sumAxis = analysisBlock_->sumAxis();
		int sumAxisSize = source->size(sumAxis);
		QVector<double> xAxis(sumAxisSize);
		QVector<double> yAxis(sumAxisSize, 0);

		for (int i = 0; i < sumAxisSize; i++)
			xAxis[i] = double(source->axisValue(sumAxis, i));

		switch (sumAxis){

		case 0:{

			for (int i = 0, iSize = analysisBlock_->size(0); i < iSize; i++){

				for (int j = 0, jSize = analysisBlock_->size(1); j < jSize; j++){

					for (int k = 0, kSize = analysisBlock_->size(2); k < kSize; k++){

						QVector<double> temp(sumAxisSize);
						source->values(AMnDIndex(0, i, j, k), AMnDIndex(sumAxisSize-1, i, j, k), temp.data());

						for (int l = 0; l < sumAxisSize; l++)
							yAxis[l] += temp.at(l);
					}
				}
			}

			break;
		}

		case 1:{

			for (int i = 0, iSize = analysisBlock_->size(0); i < iSize; i++){

				for (int j = 0, jSize = analysisBlock_->size(1); j < jSize; j++){

					for (int k = 0, kSize = analysisBlock_->size(2); k < kSize; k++){

						QVector<double> temp(sumAxisSize);
						source->values(AMnDIndex(i, 0, j, k), AMnDIndex(i, sumAxisSize-1, j, k), temp.data());

						for (int l = 0; l < sumAxisSize; l++)
							yAxis[l] += temp.at(l);
					}
				}
			}

			break;
		}

		case 2:{

			for (int i = 0, iSize = analysisBlock_->size(0); i < iSize; i++){

				for (int j = 0, jSize = analysisBlock_->size(1); j < jSize; j++){

					for (int k = 0, kSize = analysisBlock_->size(2); k < kSize; k++){

						QVector<double> temp(sumAxisSize);
						source->values(AMnDIndex(i, j, 0, k), AMnDIndex(i, j, sumAxisSize-1, k), temp.data());

						for (int l = 0; l < sumAxisSize; l++)
							yAxis[l] += temp.at(l);
					}
				}
			}

			break;
		}

		case 3:{

			for (int i = 0, iSize = analysisBlock_->size(0); i < iSize; i++){

				for (int j = 0, jSize = analysisBlock_->size(1); j < jSize; j++){

					for (int k = 0, kSize = analysisBlock_->size(2); k < kSize; k++){

						QVector<double> temp(sumAxisSize);
						source->values(AMnDIndex(i, j, k, 0), AMnDIndex(i, j, k, sumAxisSize-1), temp.data());

						for (int l = 0; l < sumAxisSize; l++)
							yAxis[l] += temp.at(l);
					}
				}
			}

			break;
		}
		}

		seriesData_->setValues(xAxis, yAxis);
	}
}