Skip to content
Snippets Groups Projects
Normalization.cpp 2.22 KiB
Newer Older
#include "MantidVatesAPI/Normalization.h"
#include "MantidAPI/IMDNode.h"
#include "MantidAPI/IMDEventWorkspace.h"
#include "MantidAPI/IMDIterator.h"

namespace Mantid {
namespace VATES {

/**
Choose and return the pointer to the member function for IMDNode to perform the
requested normalisation.
This is used for visualisation of IMDEventWorkspaces.
@param normalizationOption : Visual Normalization option desired
@param ws : workspace to fetch defaults from if needed
@return member function to use on IMDNodes
*/
NormFuncIMDNodePtr makeMDEventNormalizationFunction(
    VisualNormalization normalizationOption,
    Mantid::API::IMDEventWorkspace const *const ws) {

  using namespace Mantid::API;

  // Fetch the default and continue
  if (normalizationOption == AutoSelect) {
    // enum to enum.
    normalizationOption =
        static_cast<VisualNormalization>(ws->displayNormalization());
  }

  NormFuncIMDNodePtr normalizationFunction;

  if (normalizationOption == Mantid::VATES::NumEventsNormalization) {
    normalizationFunction = &IMDNode::getSignalByNEvents;
  } else if (normalizationOption == Mantid::VATES::NoNormalization) {
    normalizationFunction = &IMDNode::getSignal;
    normalizationFunction = &IMDNode::getSignalNormalized;
  }

  return normalizationFunction;
}

/**
Create iterators with correct normalization normalization to an IMDIterator.
@param normalizationOption : Visual Normalization option desired
@param ws : workspace to fetch defaults from if needed
@return new IMDIterator
*/
DLLExport Mantid::API::IMDIterator *
createIteratorWithNormalization(const VisualNormalization normalizationOption,
                                Mantid::API::IMDWorkspace const *const ws) {

  using namespace Mantid::API;

  MDNormalization targetNormalization;
  // Fetch the default and continue
  if (normalizationOption == AutoSelect) {
    // enum to enum.
    targetNormalization =
        static_cast<MDNormalization>(ws->displayNormalization());
  } else {
    targetNormalization = static_cast<MDNormalization>(normalizationOption);
  }

  // Create the iterator
  IMDIterator *iterator = ws->createIterator();
  // Set normalization
  iterator->setNormalization(targetNormalization);
  // Return it
  return iterator;
}
}