当前位置: 首页>>代码示例>>C++>>正文


C++ EventWorkspace_sptr::doneAddingEventLists方法代码示例

本文整理汇总了C++中EventWorkspace_sptr::doneAddingEventLists方法的典型用法代码示例。如果您正苦于以下问题:C++ EventWorkspace_sptr::doneAddingEventLists方法的具体用法?C++ EventWorkspace_sptr::doneAddingEventLists怎么用?C++ EventWorkspace_sptr::doneAddingEventLists使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在EventWorkspace_sptr的用法示例。


在下文中一共展示了EventWorkspace_sptr::doneAddingEventLists方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: execEvent

/** Executes the algorithm
 *@param localworkspace :: the input workspace
 *@param indices :: set of indices to sum up
 */
void SumSpectra::execEvent(EventWorkspace_const_sptr localworkspace, std::set<int> &indices)
{
  //Make a brand new EventWorkspace
  EventWorkspace_sptr outputWorkspace = boost::dynamic_pointer_cast<EventWorkspace>(
      API::WorkspaceFactory::Instance().create("EventWorkspace", 1, 2, 1));
  //Copy geometry over.
  API::WorkspaceFactory::Instance().initializeFromParent(localworkspace, outputWorkspace, true);

  Progress progress(this,0,1, indices.size());

  //Get the pointer to the output event list
  EventList & outEL = outputWorkspace->getEventList(0);
  outEL.setSpectrumNo(m_outSpecId);
  outEL.clearDetectorIDs();

  // Loop over spectra
  std::set<int>::iterator it;
  size_t numSpectra(0);
  size_t numMasked(0);
  size_t numZeros(0);
  //for (int i = m_MinSpec; i <= m_MaxSpec; ++i)
  for (it = indices.begin(); it != indices.end(); ++it)
  {
    int i =  *it;
    //Don't go outside the range.
    if ((i >= numberOfSpectra) || (i < 0))
    {
      g_log.error() << "Invalid index " << i << " was specified. Sum was aborted.\n";
      break;
    }

    try
    {
      // Get the detector object for this spectrum
      Geometry::IDetector_const_sptr det = localworkspace->getDetector(i);
      // Skip monitors, if the property is set to do so
      if ( !keepMonitors && det->isMonitor() ) continue;
      // Skip masked detectors
      if ( det->isMasked() )
      {
        numMasked++;
        continue;
      }
    }
    catch(...)
    {
      // if the detector not found just carry on
    }
    numSpectra++;

    //Add the event lists with the operator
    const EventList & tOutEL = localworkspace->getEventList(i);
    if(tOutEL.empty())
      numZeros++;
    else
      outEL += tOutEL;

    progress.report();
  }

  //Finalize spectra map etc.
  outputWorkspace->doneAddingEventLists();

  //Set all X bins on the output
  cow_ptr<MantidVec> XValues;
  XValues.access() = localworkspace->readX(0);
  outputWorkspace->setAllX(XValues);

  outputWorkspace->mutableRun().addProperty("NumAllSpectra",int(numSpectra),"",true);
  outputWorkspace->mutableRun().addProperty("NumMaskSpectra",int(numMasked),"",true);
  outputWorkspace->mutableRun().addProperty("NumZeroSpectra",int(numZeros),"",true);

  // Assign it to the output workspace property
  setProperty("OutputWorkspace",boost::dynamic_pointer_cast<MatrixWorkspace>(outputWorkspace));

}
开发者ID:trnielsen,项目名称:mantid,代码行数:80,代码来源:SumSpectra.cpp


注:本文中的EventWorkspace_sptr::doneAddingEventLists方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。