Skip to content

Commit

Permalink
refs #8992. Utilise coord trans to original.
Browse files Browse the repository at this point in the history
This has been prevented thus far, because use of coord transforms has been based on the presence of original workspaces. Original workspaces will not be present upon a reload.

I've also exposed the new getters on MDGeometry to python.
  • Loading branch information
OwenArnold authored and RussellTaylor committed Feb 26, 2014
1 parent e44872e commit 8926416
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 7 deletions.
3 changes: 3 additions & 0 deletions Code/Mantid/Framework/API/inc/MantidAPI/MDGeometry.h
Expand Up @@ -92,6 +92,9 @@ namespace API

void transformDimensions(std::vector<double> & scaling, std::vector<double> & offset);

size_t getNumberTransformsToOriginal() const;
size_t getNumberTransformsFromOriginal() const;

// --------------------------------------------------------------------------------------------
///@return the vector of the origin (in the original workspace) that corresponds to 0,0,0... in this workspace
Mantid::Kernel::VMD & getOrigin()
Expand Down
18 changes: 18 additions & 0 deletions Code/Mantid/Framework/API/src/MDGeometry.cpp
Expand Up @@ -512,6 +512,24 @@ namespace API
return xmlBuilder.create();
}

/**
* Get the number of transforms defined to the original coordinate system.
* @return The number of transforms.
*/
size_t MDGeometry::getNumberTransformsToOriginal() const
{
return m_transforms_ToOriginal.size();
}

/**
* Get the number of transforms defined from the original coordinate system.
* @return The number of transforms.
*/
size_t MDGeometry::getNumberTransformsFromOriginal() const
{
return m_transforms_FromOriginal.size();
}


} // namespace Mantid
} // namespace API
Expand Down
14 changes: 14 additions & 0 deletions Code/Mantid/Framework/API/test/MDGeometryTest.h
Expand Up @@ -207,8 +207,22 @@ class MDGeometryTest : public CxxTest::TestSuite
AnalysisDataService::Instance().remove("MDGeometryTest_originalWS");
TSM_ASSERT("Original workspace reference was deleted.", !g.hasOriginalWorkspace());
TSM_ASSERT("Original workspace reference is cleared.", !g.getOriginalWorkspace());
}

void test_transforms_to_original()
{
MDGeometry g;
g.setTransformFromOriginal(new NullCoordTransform, 0);
g.setTransformFromOriginal(new NullCoordTransform, 1);
TSM_ASSERT_EQUALS("Wrong number of transforms from original reported.", 2, g.getNumberTransformsFromOriginal());
}

void test_transforms_from_original()
{
MDGeometry g;
g.setTransformToOriginal(new NullCoordTransform, 0);
g.setTransformToOriginal(new NullCoordTransform, 1);
TSM_ASSERT_EQUALS("Wrong number of transforms to original reported.", 2, g.getNumberTransformsToOriginal());
}


Expand Down
2 changes: 1 addition & 1 deletion Code/Mantid/Framework/MDEvents/src/QueryMDWorkspace.cpp
Expand Up @@ -264,7 +264,7 @@ namespace MDEvents
output->cell<double>(rowCounter, cellIndex++) = it->getNormalizedError();
output->cell<int>(rowCounter, cellIndex++) = int(it->getNumEvents());
VMD center = it->getCenter();
const size_t numberOriginal = input->numOriginalWorkspaces();
const size_t numberOriginal = input->getNumberTransformsToOriginal();
if(numberOriginal > 0)
{
const size_t index = numberOriginal -1;
Expand Down
Expand Up @@ -90,6 +90,13 @@ void export_MDGeometry()
.def("getOrigin", (const Mantid::Kernel::VMD & (MDGeometry::*)() const)&MDGeometry::getOrigin,
return_value_policy<copy_const_reference>(),
"Returns the vector of the origin (in the original workspace) that corresponds to 0,0,0... in this workspace")

.def("getNumberTransformsFromOriginal", &MDGeometry::getNumberTransformsFromOriginal,
"Returns the number of transformations from original workspace coordinate systems")

.def("getNumberTransformsToOriginal", &MDGeometry::getNumberTransformsToOriginal,
"Returns the number of transformations to original workspace coordinate systems")

;
}

23 changes: 17 additions & 6 deletions Code/Mantid/MantidQt/API/src/MantidQwtIMDWorkspaceData.cpp
Expand Up @@ -325,21 +325,32 @@ void MantidQwtIMDWorkspaceData::setPreviewMode(bool preview)
{
m_preview = preview;
// If the workspace has no original, then we MUST be in preview mode.
if (preview || (m_workspace->numOriginalWorkspaces() == 0))
const size_t nOriginalWorkspaces = m_workspace->numOriginalWorkspaces();
if (preview || (nOriginalWorkspaces == 0))
{
// Preview mode. No transformation.
m_originalWorkspace = m_workspace;
m_transform = new NullCoordTransform(m_workspace->getNumDims());
}
else
{
// Refer to the last workspace = the intermediate in the case of MDHisto binning
size_t index = m_workspace->numOriginalWorkspaces()-1;
m_originalWorkspace = boost::dynamic_pointer_cast<IMDWorkspace>(m_workspace->getOriginalWorkspace(index));
CoordTransform * temp = m_workspace->getTransformToOriginal(index);
const size_t indexOfWS = nOriginalWorkspaces-1; // Get the last workspace
m_originalWorkspace = boost::dynamic_pointer_cast<IMDWorkspace>(m_workspace->getOriginalWorkspace(indexOfWS));
}

const size_t nTransformsToOriginal = m_workspace->getNumberTransformsToOriginal();
if (preview || (nTransformsToOriginal == 0))
{
m_transform = new NullCoordTransform(m_workspace->getNumDims());
}
else
{
const size_t indexOfTransform = nTransformsToOriginal-1; // Get the last transform
CoordTransform * temp = m_workspace->getTransformToOriginal(indexOfTransform);
if (temp)
m_transform = temp->clone();
m_transform = temp->clone();
}

this->choosePlotAxis();
}

Expand Down

0 comments on commit 8926416

Please sign in to comment.