QString AMScanAxisRegion::toString(const QString &units) const
{
	return QString("Start:\t%1 %4\tStep: %2 %4End:\t%3 %4\tTime: %5 s\n")
			.arg(double(regionStart()))
			.arg(double(regionStep()))
			.arg(double(regionEnd()))
			.arg(units)
			.arg(double(regionTime()));
}
QString VESPERSEXAFSScanConfiguration::headerText() const
{
	QString header("Configuration of the Scan\n\n");

	header.append("Scanned Edge:\t" + edge() + "\n");
	header.append(fluorescenceHeaderString(fluorescenceDetector()));
	header.append(incomingChoiceHeaderString(incomingChoice()));
	header.append(transmissionChoiceHeaderString(transmissionChoice()));

	header.append(QString("Automatically moved to a specific location (used when setting up the workflow)?\t%1").arg(goToPosition() ? "Yes\n" : "No\n\n"));

	if (goToPosition()){

		header.append(QString("Horizontal Position:\t%1 mm\n").arg(x()));
		header.append(QString("Vertical Position:\t%1 mm\n\n").arg(y()));
	}

	header.append(regionOfInterestHeaderString(roiList()));
	header.append("\n");
	header.append("Regions Scanned\n");

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

		if (exafsRegions()->type(i) == AMEXAFSRegion::kSpace && useFixedTime())
			header.append(QString("Start: %1 eV\tDelta: %2 k\tEnd: %3 k\tTime: %4 s\n")
						  .arg(exafsRegions()->startByType(i, AMEXAFSRegion::Energy))
						  .arg(exafsRegions()->delta(i))
						  .arg(exafsRegions()->endByType(i, AMEXAFSRegion::kSpace))
						  .arg(regions_->time(i)));

		else if (exafsRegions()->type(i) == AMEXAFSRegion::kSpace && !useFixedTime())
			header.append(QString("Start: %1 eV\tDelta: %2 k\tEnd: %3 k\tMaximum time (used with variable integration time): %4 s\n")
						  .arg(exafsRegions()->startByType(i, AMEXAFSRegion::Energy))
						  .arg(exafsRegions()->delta(i))
						  .arg(exafsRegions()->endByType(i, AMEXAFSRegion::kSpace))
						  .arg(exafsRegions()->time(i)));

		else
			header.append(QString("Start: %1 eV\tDelta: %2 eV\tEnd: %3 eV\tTime: %4 s\n")
						  .arg(regionStart(i))
						  .arg(regionDelta(i))
						  .arg(regionEnd(i))
						  .arg(regionTime(i)));
	}

	return header;
}
QString AMEXAFSScanConfiguration::dbReadRegions() const{

	QStringList rv;

	// Stores the following information from the region in the following order:
	/*
	 1) Type (either Energy space or kSpace)
	 2) Edge energy (in the units given by region units)
	 3) Whether the energy is relative or absolute (true = relative, false = absolute).
	 4) Region starting point in energy space.
	 5) Region delta between points.
	 6) Region ending point in energy space.
	 7) Whether the region uses elastic starting points.
	 8) Whether the region uses elastic ending points.
	 9) The time spent on each point in the region.
	 10) The units for the scanned element of the region.  This is the units of energy space even if the region is itself in kSpace.
	 11) The units of time spent on each point.
	  */
	for(int x = 0; x < regions_->count(); x++){

		rv << QString("exafsVersion1.0,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11")
			  .arg(regionType(x) == AMEXAFSRegion::Energy ? "Energy" : "kSpace")
			  .arg(exafsRegions()->defaultEdgeEnergy())
			  .arg(exafsRegions()->defaultIsRelative() == true ? 1 : 0)
			  .arg(regionStartByType(x, AMEXAFSRegion::Energy))
			  .arg(regionDelta(x))
			  .arg(regionEndByType(x, AMEXAFSRegion::Energy))
			  .arg(regionElasticStart(x) == true ? 1 : 0)
			  .arg(regionElasticEnd(x) == true ? 1 : 0)
			  .arg(regionTime(x))
			  .arg(regionEnergyUnits(x))
			  .arg(regionTimeUnits(x));
	}
	if(rv.isEmpty())
		return QString("");
	return rv.join("\n");
}
double AMScanAxisRegion::timePerRegion() const
{
	return numberOfPoints()*double(regionTime());
}