本文整理汇总了C++中dataobjects::Workspace2D_sptr::getInstrument方法的典型用法代码示例。如果您正苦于以下问题:C++ Workspace2D_sptr::getInstrument方法的具体用法?C++ Workspace2D_sptr::getInstrument怎么用?C++ Workspace2D_sptr::getInstrument使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类dataobjects::Workspace2D_sptr
的用法示例。
在下文中一共展示了Workspace2D_sptr::getInstrument方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: runtime_error
/** Executes the algorithm. Reading in the file and creating and populating
* the output workspace
*
* @throw Exception::NotFoundError Error when saving the PoldiDeadWires Results data to Workspace
* @throw std::runtime_error Error when saving the PoldiDeadWires Results data to Workspace
*/
void PoldiAutoCorrelation5::exec()
{
g_log.information() << "_Poldi start conf -------------- " << std::endl;
/* From localWorkspace three things are used:
* - Count data from POLDI experiment
* - POLDI instrument definition
* - Some data from the "Log" (for example chopper-speed)
*/
DataObjects::Workspace2D_sptr localWorkspace = this->getProperty("InputWorkspace");
g_log.information() << "_Poldi ws loaded -------------- " << std::endl;
double wlen_min = this->getProperty("wlenmin");
double wlen_max = this->getProperty("wlenmax");
double chopperSpeed = 0.0;
try {
chopperSpeed = localWorkspace->run().getPropertyValueAsType<std::vector<double> >("chopperspeed").front();
} catch(std::invalid_argument&) {
throw(std::runtime_error("Chopper speed could not be extracted from Workspace '" + localWorkspace->name() + "'. Aborting."));
}
// Instrument definition
Instrument_const_sptr poldiInstrument = localWorkspace->getInstrument();
// Chopper configuration
PoldiChopperFactory chopperFactory;
boost::shared_ptr<PoldiAbstractChopper> chopper(chopperFactory.createChopper(std::string("default-chopper")));
chopper->loadConfiguration(poldiInstrument);
chopper->setRotationSpeed(chopperSpeed);
g_log.information() << "____________________________________________________ " << std::endl;
g_log.information() << "_Poldi chopper conf ------------------------------ " << std::endl;
g_log.information() << "_Poldi - Chopper speed: " << chopper->rotationSpeed() << " rpm" << std::endl;
g_log.information() << "_Poldi - Number of slits: " << chopper->slitPositions().size() << std::endl;
g_log.information() << "_Poldi - Cycle time: " << chopper->cycleTime() << " µs" << std::endl;
g_log.information() << "_Poldi - Zero offset: " << chopper->zeroOffset() << " µs" << std::endl;
g_log.information() << "_Poldi - Distance: " << chopper->distanceFromSample() << " mm" << std::endl;
if(g_log.is(Poco::Message::PRIO_DEBUG)) {
for(size_t i = 0; i < chopper->slitPositions().size(); ++i) {
g_log.information() << "_Poldi - Slits: " << i
<< ": Position = " << chopper->slitPositions()[i]
<< "\t Time = " << chopper->slitTimes()[i] << " µs" << std::endl;
}
}
// Detector configuration
PoldiDetectorFactory detectorFactory;
boost::shared_ptr<PoldiAbstractDetector> detector(detectorFactory.createDetector(std::string("helium3-detector")));
detector->loadConfiguration(poldiInstrument);
g_log.information() << "_Poldi detector conf ------------------------------ " << std::endl;
g_log.information() << "_Poldi - Element count: " << detector->elementCount() << std::endl;
g_log.information() << "_Poldi - Central element: " << detector->centralElement() << std::endl;
g_log.information() << "_Poldi - 2Theta(central): " << detector->twoTheta(199) / M_PI * 180.0 << "°" << std::endl;
g_log.information() << "_Poldi - Distance(central): " << detector->distanceFromSample(199) << " mm" << std::endl;
boost::shared_ptr<PoldiDeadWireDecorator> cleanDetector(new PoldiDeadWireDecorator(poldiInstrument, detector));
std::set<int> deadWires = cleanDetector->deadWires();
g_log.information() << "_Poldi - Number of dead wires: " << deadWires.size() << std::endl;
g_log.information() << "_Poldi - Wire indices: ";
for(std::set<int>::const_iterator dw = deadWires.begin(); dw != deadWires.end(); ++dw) {
g_log.information() << *dw << " ";
}
g_log.information() << std::endl;
// putting together POLDI instrument for calculations
m_core->setInstrument(cleanDetector, chopper);
m_core->setWavelengthRange(wlen_min, wlen_max);
try
{
Mantid::DataObjects::Workspace2D_sptr outputws = m_core->calculate(localWorkspace);
setProperty("OutputWorkspace",boost::dynamic_pointer_cast<Workspace>(outputws));
}
catch(Mantid::Kernel::Exception::NotFoundError& )
{
throw std::runtime_error("Error when saving the PoldiIPP Results data to Workspace : NotFoundError");
}
catch(std::runtime_error &)
{
throw std::runtime_error("Error when saving the PoldiIPP Results data to Workspace : runtime_error");
}
}
示例2: b_re_sig
//.........这里部分代码省略.........
ws->getAxis(0)->unit() = Kernel::UnitFactory::Instance().create("Wavelength");
ws->setYUnit("");
API::Workspace_sptr workspace = boost::static_pointer_cast<API::Workspace>(ws);
setProperty("OutputWorkspace", workspace);
// Parse out each pixel. Pixels can be separated by white space, a tab, or an end-of-line character
Poco::StringTokenizer pixels(data_str, " \n\t", Poco::StringTokenizer::TOK_TRIM | Poco::StringTokenizer::TOK_IGNORE_EMPTY);
Poco::StringTokenizer::Iterator pixel = pixels.begin();
// Check that we don't keep within the size of the workspace
size_t pixelcount = pixels.count();
if( pixelcount != static_cast<size_t>(numberXPixels*numberYPixels) )
{
throw Kernel::Exception::FileError("Inconsistent data set: "
"There were more data pixels found than declared in the Spice XML meta-data.", fileName);
}
if( numSpectra == 0 )
{
throw Kernel::Exception::FileError("Empty data set: the data file has no pixel data.", fileName);
}
// Go through all detectors/channels
int ipixel = 0;
// Store monitor count
store_value(ws, ipixel++, monitorCounts, monitorCounts>0 ? sqrt(monitorCounts) : 0.0,
wavelength, dwavelength);
// Store counting time
store_value(ws, ipixel++, countingTime, 0.0, wavelength, dwavelength);
// Store detector pixels
while (pixel != pixels.end())
{
//int ix = ipixel%npixelsx;
//int iy = (int)ipixel/npixelsx;
// Get the count value and assign it to the right bin
double count = 0.0;
from_string<double>(count, *pixel, std::dec);
// Data uncertainties, computed according to the HFIR/IGOR reduction code
// The following is what I would suggest instead...
// error = count > 0 ? sqrt((double)count) : 0.0;
double error = sqrt( 0.5 + fabs( count - 0.5 ));
store_value(ws, ipixel, count, error, wavelength, dwavelength);
// Set the spectrum number
ws->getAxis(1)->setValue(ipixel, ipixel);
++pixel;
ipixel++;
}
// run load instrument
runLoadInstrument(instrument, ws);
runLoadMappingTable(ws, numberXPixels, numberYPixels);
// Set the run properties
ws->mutableRun().addProperty("sample-detector-distance", distance, "mm", true);
ws->mutableRun().addProperty("beam-trap-diameter", beam_trap_diam, "mm", true);
ws->mutableRun().addProperty("number-of-guides", nguides, true);
ws->mutableRun().addProperty("source-sample-distance", source_distance, "mm", true);
ws->mutableRun().addProperty("source-aperture-diameter", source_apert, "mm", true);
ws->mutableRun().addProperty("sample-aperture-diameter", sample_apert, "mm", true);
ws->mutableRun().addProperty("sample-thickness", sample_thickness, "cm", true);
ws->mutableRun().addProperty("wavelength", wavelength, "Angstrom", true);
ws->mutableRun().addProperty("wavelength-spread", dwavelength, "Angstrom", true);
ws->mutableRun().addProperty("timer", countingTime, "sec", true);
ws->mutableRun().addProperty("monitor", monitorCounts, "", true);
ws->mutableRun().addProperty("start_time", start_time, "", true);
ws->mutableRun().addProperty("run_start", start_time, "", true);
// Move the detector to the right position
API::IAlgorithm_sptr mover = createChildAlgorithm("MoveInstrumentComponent");
// Finding the name of the detector object.
std::string detID = ws->getInstrument()->getStringParameter("detector-name")[0];
g_log.information("Moving "+detID);
try
{
mover->setProperty<API::MatrixWorkspace_sptr> ("Workspace", ws);
mover->setProperty("ComponentName", detID);
mover->setProperty("Z", distance/1000.0);
mover->execute();
} catch (std::invalid_argument& e)
{
g_log.error("Invalid argument to MoveInstrumentComponent Child Algorithm");
g_log.error(e.what());
} catch (std::runtime_error& e)
{
g_log.error("Unable to successfully run MoveInstrumentComponent Child Algorithm");
g_log.error(e.what());
}
// Release the XML document memory
pDoc->release();
}
示例3: exec
void PoldiAnalyseResiduals::exec() {
DataObjects::Workspace2D_sptr measured = getProperty("MeasuredCountData");
DataObjects::Workspace2D_sptr calculated = getProperty("FittedCountData");
PoldiInstrumentAdapter_sptr poldiInstrument =
boost::make_shared<PoldiInstrumentAdapter>(measured);
// Dead wires need to be taken into account
PoldiAbstractDetector_sptr deadWireDetector =
boost::make_shared<PoldiDeadWireDecorator>(measured->getInstrument(),
poldiInstrument->detector());
// Since the valid workspace indices are required for some calculations, we
// extract and keep them
const std::vector<int> &validWorkspaceIndices =
deadWireDetector->availableElements();
// Subtract calculated from measured to get residuals
DataObjects::Workspace2D_sptr residuals =
calculateResidualWorkspace(measured, calculated);
// Normalize residuals so that they are 0.
normalizeResiduals(residuals, validWorkspaceIndices);
// Residual correlation core which will be used iteratively.
PoldiResidualCorrelationCore core(g_log, 0.1);
core.setInstrument(deadWireDetector, poldiInstrument->chopper());
double lambdaMin = getProperty("LambdaMin");
double lambdaMax = getProperty("LambdaMax");
core.setWavelengthRange(lambdaMin, lambdaMax);
// One iteration is always necessary
DataObjects::Workspace2D_sptr sum = core.calculate(residuals, calculated);
// For keeping track of the relative changes the sum of measured counts is
// required
double sumOfMeasuredCounts = sumCounts(measured, validWorkspaceIndices);
double relativeChange = relativeCountChange(sum, sumOfMeasuredCounts);
int iteration = 1;
logIteration(iteration, relativeChange);
// Iterate until conditions are met, accumulate correlation spectra in sum.
while (nextIterationAllowed(iteration, relativeChange)) {
++iteration;
DataObjects::Workspace2D_sptr corr = core.calculate(residuals, calculated);
relativeChange = relativeCountChange(corr, sumOfMeasuredCounts);
sum = addWorkspaces(sum, corr);
logIteration(iteration, relativeChange);
}
g_log.notice() << "Finished after " << iteration
<< " iterations, final change=" << relativeChange << std::endl;
// Return final correlation spectrum.
setProperty("OutputWorkspace", boost::dynamic_pointer_cast<Workspace>(sum));
}
示例4: exec
/** Executes the algorithm. Reading in the file and creating and populating
* the output workspace
*
* @throw Exception::FileError If the Nexus file cannot be found/opened
* @throw std::invalid_argument If the optional properties are set to invalid values
*/
void PoldiLoadIPP::exec()
{
////////////////////////////////////////////////////////////////////////
// About the workspace
////////////////////////////////////////////////////////////////////////
DataObjects::Workspace2D_sptr localWorkspace = this->getProperty("InputWorkspace");
////////////////////////////////////////////////////////////////////////
// Load the data into the workspace
////////////////////////////////////////////////////////////////////////
try
{
ITableWorkspace_sptr outputws = WorkspaceFactory::Instance().createTable();
outputws->addColumn("str","param");
outputws->addColumn("str","unit");
outputws->addColumn("double","value");
Geometry::Instrument_const_sptr inst = localWorkspace->getInstrument();
double distChopSampl = localWorkspace->getInstrument()->getNumberParameter("dist-chopper-sample")[0];
g_log.debug() << "_poldi : param " << "dist-chopper-sample" << " : " << distChopSampl << std::endl;
TableRow t0 = outputws->appendRow();
t0 << "dist-chopper-sample" << "[mm]" << distChopSampl ;
double distSamplDet = localWorkspace->getInstrument()->getNumberParameter("dist-sample-detector")[0];
g_log.debug() << "_poldi : param " << "dist-sample-detector" << " : " << distSamplDet << std::endl;
TableRow t1 = outputws->appendRow();
t1 << "dist-sample-detector" << "[mm]" << distSamplDet ;
double x0det = localWorkspace->getInstrument()->getNumberParameter("x0det")[0];
g_log.debug() << "_poldi : param " << "x0det" << " : " << x0det << std::endl;
TableRow t2 = outputws->appendRow();
t2 << "x0det" << "[mm]" << x0det ;
double y0det = localWorkspace->getInstrument()->getNumberParameter("y0det")[0];
g_log.debug() << "_poldi : param " << "y0det" << " : " << y0det << std::endl;
TableRow t3 = outputws->appendRow();
t3 << "y0det" << "[mm]" << y0det ;
double twotheta = localWorkspace->getInstrument()->getNumberParameter("twothet")[0];
g_log.debug() << "_poldi : param " << "twothet" << " : " << twotheta << std::endl;
TableRow t4 = outputws->appendRow();
t4 << "twothet" << "[deg]" << twotheta ;
double tps0 = localWorkspace->getInstrument()->getNumberParameter("t0")[0];
g_log.debug() << "_poldi : param " << "t0" << " : " << tps0 << std::endl;
TableRow t5 = outputws->appendRow();
t5 << "t0" << "[mysec]" << tps0 ;
double tcycle = localWorkspace->getInstrument()->getNumberParameter("tconst")[0];
g_log.debug() << "_poldi : param " << "tconst" << " : " << tcycle << std::endl;
TableRow t6 = outputws->appendRow();
t6 << "tconst" << "[mysec]" << tcycle ;
double det_radius = localWorkspace->getInstrument()->getNumberParameter("det_radius")[0];
g_log.debug() << "_poldi : param " << "det_radius" << " : " << det_radius << std::endl;
TableRow t8 = outputws->appendRow();
t8 << "det_radius" << "[mm]" << det_radius ;
double det_nb_channel = localWorkspace->getInstrument()->getNumberParameter("det_nb_channel")[0];
g_log.debug() << "_poldi : param " << "det_nb_channel" << " : " << det_nb_channel << std::endl;
TableRow t9 = outputws->appendRow();
t9 << "det_nb_channel" << "[]" << det_nb_channel ;
double det_channel_resolution = localWorkspace->getInstrument()->getNumberParameter("det_channel_resolution")[0];
g_log.debug() << "_poldi : param " << "det_channel_resolution" << " : " << det_channel_resolution << std::endl;
TableRow t10 = outputws->appendRow();
t10 << "det_channel_resolution" << "[mm]" << det_channel_resolution ;
setProperty("PoldiIPP",outputws);
}
catch(Mantid::Kernel::Exception::NotFoundError& )
{
throw std::runtime_error("Error when saving the PoldiIPP Results data to Workspace : NotFoundError");
}
catch(std::runtime_error &)
{
throw std::runtime_error("Error when saving the PoldiIPP Results data to Workspace : runtime_error");
}
}