From 3a1e2a63a7cd1b0f7feaa9b033e56c1be73c1078 Mon Sep 17 00:00:00 2001 From: Wenduo Zhou Date: Wed, 16 Apr 2014 22:01:59 -0400 Subject: [PATCH 01/86] Added show hide to properties. Refs #6999. --- .../Algorithms/src/GenerateEventsFilter.cpp | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp b/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp index 8da0697a4830..6bf4de2af6bf 100644 --- a/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp @@ -67,6 +67,7 @@ and thus the first splitter will start from the first log time. #include "MantidAPI/WorkspaceFactory.h" #include "MantidAPI/WorkspaceProperty.h" #include "MantidAPI/Column.h" +#include "MantidKernel/VisibleWhenProperty.h" using namespace Mantid; using namespace Mantid::Kernel; @@ -134,6 +135,8 @@ namespace Algorithms // Split by time (only) in steps declareProperty("TimeInterval", -1.0, "Length of the time splices if filtered in time only."); + setPropertySettings("TimeInterval", + new VisibleWhenProperty("LogName", IS_EQUAL_TO, "")); std::vector timeoptions; timeoptions.push_back("Seconds"); @@ -150,12 +153,18 @@ namespace Algorithms "For example, the pulse charge is recorded in 'ProtonCharge'."); declareProperty("MinimumLogValue", EMPTY_DBL(), "Minimum log value for which to keep events."); + setPropertySettings("MinimumLogValue", + new VisibleWhenProperty("LogName", IS_NOT_EQUAL_TO, "")); declareProperty("MaximumLogValue", EMPTY_DBL(), "Maximum log value for which to keep events."); + setPropertySettings("MaximumLogValue", + new VisibleWhenProperty("LogName", IS_NOT_EQUAL_TO, "")); declareProperty("LogValueInterval", EMPTY_DBL(), "Delta of log value to be sliced into from min log value and max log value.\n" "If not given, then only value "); + setPropertySettings("LogValueInterval", + new VisibleWhenProperty("LogName", IS_NOT_EQUAL_TO, "")); std::vector filteroptions; filteroptions.push_back("Both"); @@ -164,10 +173,14 @@ namespace Algorithms declareProperty("FilterLogValueByChangingDirection", "Both", boost::make_shared(filteroptions), "d(log value)/dt can be positive and negative. They can be put to different splitters."); + setPropertySettings("FilterLogValueByChangingDirection", + new VisibleWhenProperty("LogName", IS_NOT_EQUAL_TO, "")); declareProperty("TimeTolerance", 0.0, "Tolerance in time for the event times to keep. " "It is used in the case to filter by single value."); + setPropertySettings("TimeTolerance", + new VisibleWhenProperty("LogName", IS_NOT_EQUAL_TO, "")); vector logboundoptions; logboundoptions.push_back("Centre"); @@ -176,12 +189,13 @@ namespace Algorithms auto logvalidator = boost::make_shared(logboundoptions); declareProperty("LogBoundary", "Centre", logvalidator, "How to treat log values as being measured in the centre of time."); + setPropertySettings("LogBoundary", + new VisibleWhenProperty("LogName", IS_NOT_EQUAL_TO, "")); declareProperty("LogValueTolerance", EMPTY_DBL(), "Tolerance of the log value to be included in filter. It is used in the case to filter by multiple values."); - - declareProperty("LogValueTimeSections", 1, - "In one log value interval, it can be further divided into sections in even time slice."); + setPropertySettings("LogValueTolerance", + new VisibleWhenProperty("LogName", IS_NOT_EQUAL_TO, "")); // Output workspaces' title and name declareProperty("TitleOfSplitters", "", From 5ee366d160901d6b88d40f8e2e68fc233600d91f Mon Sep 17 00:00:00 2001 From: Alex Buts Date: Thu, 24 Apr 2014 17:22:36 +0100 Subject: [PATCH 02/86] refs #9364 Performance test --- .../test/CopyInstrumentParametersTest.h | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/Code/Mantid/Framework/Algorithms/test/CopyInstrumentParametersTest.h b/Code/Mantid/Framework/Algorithms/test/CopyInstrumentParametersTest.h index f010f9fb8bec..98dff9ef48f4 100644 --- a/Code/Mantid/Framework/Algorithms/test/CopyInstrumentParametersTest.h +++ b/Code/Mantid/Framework/Algorithms/test/CopyInstrumentParametersTest.h @@ -191,6 +191,105 @@ class CopyInstrumentParametersTest : public CxxTest::TestSuite CopyInstrumentParameters copyInstParam; +}; + + +class CopyInstrumentParametersTestPerformance : public CxxTest::TestSuite +{ +public: + // This pair of boilerplate methods prevent the suite being created statically + // This means the constructor isn't called when running other tests + static CopyInstrumentParametersTestPerformance *createSuite() { return new CopyInstrumentParametersTestPerformance(); } + static void destroySuite( CopyInstrumentParametersTestPerformance *suite ) { delete suite; } + + + CopyInstrumentParametersTestPerformance(): + m_SourceWSName("SourceWS"),m_TargetWSName("TargWS") + { + size_t n_detectors=44327; + size_t n_Parameters=200; + // Create input workspace with parameterized instrument and put into data store + MatrixWorkspace_sptr ws1 = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(n_detectors+2, 10, true,false,true,"Instr_calibrated"); + AnalysisDataServiceImpl & dataStore = AnalysisDataService::Instance(); + dataStore.add(m_SourceWSName, ws1); + + + Geometry::Instrument_const_sptr instrument = ws1->getInstrument(); + Geometry::ParameterMap *pmap; + pmap = &(ws1->instrumentParameters()); + for(size_t i=0;iaddDouble(instrument.get(),"Param-"+boost::lexical_cast(i),static_cast(i*10)); + } + // calibrate detectors; + for(size_t i=0;igetDetector(1); + Geometry::ComponentHelper::moveComponent(*det, *pmap, V3D(sin(3.1415926*double(i)),cos(3.1415926*double(i/500)),7), Absolute ); + } + + // Create output workspace with another parameterized instrument and put into data store + MatrixWorkspace_sptr ws2 = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(n_detectors, 10, true,false,true,"Instr_base"); + dataStore.add(m_TargetWSName, ws2); + + + copyInstParam.initialize(); + + } + +public: + + void test_copy_performance() + { + // Set properties + TS_ASSERT_THROWS_NOTHING(copyInstParam.setPropertyValue("InputWorkspace", m_SourceWSName )); + TS_ASSERT_THROWS_NOTHING(copyInstParam.setPropertyValue("OutputWorkspace", m_TargetWSName )); + + // Execute Algorithm, should warn but proceed + copyInstParam.setRethrows(true); + TS_ASSERT(copyInstParam.execute()); + TS_ASSERT( copyInstParam.isExecuted() ); + TS_ASSERT(copyInstParam.isInstrumentDifferent()); + + MatrixWorkspace_sptr ws2 =copyInstParam.getProperty("OutputWorkspace"); + auto instr2=ws2->getInstrument(); + + + std::set param_names = instr2->getParameterNames(); + + for(auto it =param_names.begin(); it!=param_names.end();it++) + { + auto name = *it; + double num = boost::lexical_cast(name.substr(6,name.size()-6)); + double val = instr2->getNumberParameter(name)[0]; + TS_ASSERT_DELTA(num,val,1.e-8); + } + + // new detector allocation applied + size_t nDetectors = ws2->getNumberHistograms(); + for(size_t i=0;igetDetector(i); + int id = deto1->getID(); + V3D newPos1 = deto1->getPos(); + TS_ASSERT_EQUALS( id, i+1); + TS_ASSERT_DELTA( newPos1.X() ,sin(3.1415926*double(id)), 0.0001); + TS_ASSERT_DELTA( newPos1.Y() ,cos(3.1415926*double(i/500)), 0.0001); + TS_ASSERT_DELTA( newPos1.Z() , 7, 1.e-6); + + } + + AnalysisDataServiceImpl & dataStore = AnalysisDataService::Instance(); + dataStore.remove(m_SourceWSName); + dataStore.remove(m_TargetWSName); + + } +private: + CopyInstrumentParameters copyInstParam; + const std::string m_SourceWSName,m_TargetWSName; + + }; #endif /*COPYINSTRUMENTPARAMETERSTEST_H_*/ From d7d614ed1027f5ff9e2357f49273018baf2c24af Mon Sep 17 00:00:00 2001 From: Alex Buts Date: Thu, 24 Apr 2014 18:43:45 +0100 Subject: [PATCH 03/86] refs #9364 Working performance test --- .../test/CopyInstrumentParametersTest.h | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/Code/Mantid/Framework/Algorithms/test/CopyInstrumentParametersTest.h b/Code/Mantid/Framework/Algorithms/test/CopyInstrumentParametersTest.h index 98dff9ef48f4..6ba3a32b5df3 100644 --- a/Code/Mantid/Framework/Algorithms/test/CopyInstrumentParametersTest.h +++ b/Code/Mantid/Framework/Algorithms/test/CopyInstrumentParametersTest.h @@ -21,6 +21,7 @@ #include "MantidGeometry/Instrument/ComponentHelper.h" #include + using namespace Mantid::Algorithms; using namespace Mantid::API; using namespace Mantid::Kernel; @@ -209,7 +210,7 @@ class CopyInstrumentParametersTestPerformance : public CxxTest::TestSuite size_t n_detectors=44327; size_t n_Parameters=200; // Create input workspace with parameterized instrument and put into data store - MatrixWorkspace_sptr ws1 = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(n_detectors+2, 10, true,false,true,"Instr_calibrated"); + MatrixWorkspace_sptr ws1 = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(static_cast(n_detectors+2), 10, true,false,true,"Instr_calibrated"); AnalysisDataServiceImpl & dataStore = AnalysisDataService::Instance(); dataStore.add(m_SourceWSName, ws1); @@ -225,12 +226,12 @@ class CopyInstrumentParametersTestPerformance : public CxxTest::TestSuite // calibrate detectors; for(size_t i=0;igetDetector(1); + IComponent_const_sptr det =instrument->getDetector(static_cast(i+1)); Geometry::ComponentHelper::moveComponent(*det, *pmap, V3D(sin(3.1415926*double(i)),cos(3.1415926*double(i/500)),7), Absolute ); } // Create output workspace with another parameterized instrument and put into data store - MatrixWorkspace_sptr ws2 = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(n_detectors, 10, true,false,true,"Instr_base"); + MatrixWorkspace_sptr ws2 = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(static_cast(n_detectors), 10, true,false,true,"Instr_base"); dataStore.add(m_TargetWSName, ws2); @@ -242,17 +243,27 @@ class CopyInstrumentParametersTestPerformance : public CxxTest::TestSuite void test_copy_performance() { + // Set properties TS_ASSERT_THROWS_NOTHING(copyInstParam.setPropertyValue("InputWorkspace", m_SourceWSName )); TS_ASSERT_THROWS_NOTHING(copyInstParam.setPropertyValue("OutputWorkspace", m_TargetWSName )); + // Execute Algorithm, should warn but proceed copyInstParam.setRethrows(true); + + clock_t t_start = clock(); TS_ASSERT(copyInstParam.execute()); + clock_t t_end = clock(); + + double seconds=static_cast(t_end-t_start)/static_cast(CLOCKS_PER_SEC); + std::cout<<" Time to copy all parameters is: "<(m_TargetWSName); auto instr2=ws2->getInstrument(); @@ -263,7 +274,7 @@ class CopyInstrumentParametersTestPerformance : public CxxTest::TestSuite auto name = *it; double num = boost::lexical_cast(name.substr(6,name.size()-6)); double val = instr2->getNumberParameter(name)[0]; - TS_ASSERT_DELTA(num,val,1.e-8); + TS_ASSERT_DELTA(num*10,val,1.e-8); } // new detector allocation applied @@ -274,13 +285,12 @@ class CopyInstrumentParametersTestPerformance : public CxxTest::TestSuite int id = deto1->getID(); V3D newPos1 = deto1->getPos(); TS_ASSERT_EQUALS( id, i+1); - TS_ASSERT_DELTA( newPos1.X() ,sin(3.1415926*double(id)), 0.0001); + TS_ASSERT_DELTA( newPos1.X() ,sin(3.1415926*double(i)), 0.0001); TS_ASSERT_DELTA( newPos1.Y() ,cos(3.1415926*double(i/500)), 0.0001); TS_ASSERT_DELTA( newPos1.Z() , 7, 1.e-6); } - AnalysisDataServiceImpl & dataStore = AnalysisDataService::Instance(); dataStore.remove(m_SourceWSName); dataStore.remove(m_TargetWSName); From ae9556712b19e228518a579702259742375ee74d Mon Sep 17 00:00:00 2001 From: Alex Buts Date: Fri, 25 Apr 2014 16:18:07 +0100 Subject: [PATCH 04/86] refs #9364 Add parameter through pointer implemented and deployed within CopyInstrumentParameters. The map is now copy of itself ? (clear way to introduce cow_ptr to map) --- .../src/CopyInstrumentParameters.cpp | 17 +--- .../MantidGeometry/Instrument/ParameterMap.h | 17 ++++ .../Geometry/src/Instrument/ParameterMap.cpp | 92 +++++++++++++++++-- .../Geometry/test/ParameterMapTest.h | 52 ++++++++--- 4 files changed, 142 insertions(+), 36 deletions(-) diff --git a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp index ff4be2b61c60..a5f73a2b50f2 100644 --- a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp @@ -83,19 +83,6 @@ void CopyInstrumentParameters::exec() Geometry::ParameterMap targMap; - //// vector of all components contained in the target instrument - //std::vector targComponents; - //// flattens instrument definition tree - //inst2->getChildren(targComponents,true); - //// multimap of existing instrument parameters - //std::multimap existingComponents; - //for(size_t i=0;i(targComponents[i].get())) - // continue; - // existingComponents.insert(std::pair(targComponents[i]->getFullName(),targComponents[i].get())); - //} - auto it = givParams.begin(); for(;it!= givParams.end(); it++) { @@ -130,8 +117,8 @@ void CopyInstrumentParameters::exec() targComp = spTargComp->getBaseComponent(); } // merge maps for existing target component - auto param = it->second.get(); - targMap.add(param->type(),targComp,param->name(),param->asString()); + auto param = it->second; //.get(); + targMap.add(targComp, param); } diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h index 4d5f68c48a92..87c8082c403f 100644 --- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h +++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h @@ -59,6 +59,16 @@ namespace Geometry File change history is stored at: . Code Documentation is available at: */ +#ifndef HAS_UNORDERED_MAP_H + /// Parameter map iterator typedef + typedef std::multimap >::iterator component_map_it; + typedef std::multimap >::const_iterator component_map_cit; +#else + /// Parameter map iterator typedef + typedef std::tr1::unordered_multimap >::iterator component_map_it; + typedef std::tr1::unordered_multimap >::const_iterator component_map_cit; +#endif + class MANTID_GEOMETRY_DLL ParameterMap { public: @@ -148,6 +158,8 @@ namespace Geometry } } } + /// Method for adding a parameter providing shared pointer to it. The class stores share pointer and increment ref count to it + void add(const IComponent* comp,const boost::shared_ptr ¶m); /** @name Helper methods for adding and updating parameter types */ /// Create or adjust "pos" parameter for a component void addPositionCoordinate(const IComponent* comp,const std::string& name, const double value); @@ -285,6 +297,11 @@ namespace Geometry /// Retrieve a parameter by either creating a new one of getting an existing one Parameter_sptr retrieveParameter(bool &created, const std::string & type, const IComponent* comp, const std::string & name); + /// internal function to get position of the parameter in the parameter map + component_map_it getMapPlace(const IComponent* comp,const char *name, const char * type); + ///const version of the internal function to get position of the parameter in the parameter map + component_map_cit getMapPlace(const IComponent* comp,const char *name, const char * type)const; + /// internal parameter map instance pmap m_map; diff --git a/Code/Mantid/Framework/Geometry/src/Instrument/ParameterMap.cpp b/Code/Mantid/Framework/Geometry/src/Instrument/ParameterMap.cpp index 7544be861f05..baa2d7fbbbe3 100644 --- a/Code/Mantid/Framework/Geometry/src/Instrument/ParameterMap.cpp +++ b/Code/Mantid/Framework/Geometry/src/Instrument/ParameterMap.cpp @@ -247,6 +247,30 @@ namespace Mantid } } + /** Method for adding a parameter providing shared pointer to it. + * @param comp :: A pointer to the component that this parameter is attached to + * @param par :: a shared pointer to existing parameter. The ParameterMap stores share pointer and increment ref count to it + */ + void ParameterMap::add(const IComponent* comp,const boost::shared_ptr &par) + { + // can not add null pointer + if(!par)return; + + PARALLEL_CRITICAL(parameter_add) + { + auto existing_par = getMapPlace(comp,par->name().c_str(),""); + if (existing_par != m_map.end()) + { + existing_par->second = par; + } + else + { + m_map.insert(std::make_pair(comp->getComponentID(),par)); + } + } + + } + /** Create or adjust "pos" parameter for a component * Assumed that name either equals "x", "y" or "z" otherwise this * method will not add or modify "pos" parameter @@ -571,11 +595,62 @@ namespace Mantid { Parameter_sptr result; if(!comp) return result; - const bool anytype = (strlen(type) == 0); + PARALLEL_CRITICAL(ParameterMap_get) { - if( !m_map.empty() ) - { + auto itr = getMapPlace(comp,name, type); + if (itr != m_map.end()) + result = itr->second; + } + return result; + } + + /**Return an iterator pointing to a named parameter of a given type. + * @param comp :: Component to which parameter is related + * @param name :: Parameter name + * @param type :: An optional type string. If empty, any type is returned + * @returns The iterator parameter of the given type if it exists or a NULL shared pointer if not + */ + component_map_it ParameterMap::getMapPlace(const IComponent* comp,const char *name, const char * type) + { + pmap_it result = m_map.end(); + if(!comp) return result; + const bool anytype = (strlen(type) == 0); + if( !m_map.empty() ) + { + const ComponentID id = comp->getComponentID(); + pmap_it it_found = m_map.find(id); + if (it_found != m_map.end()) + { + pmap_it itr = m_map.lower_bound(id); + pmap_it itr_end = m_map.upper_bound(id); + for( ; itr != itr_end; ++itr ) + { + Parameter_sptr param = itr->second; + if( boost::iequals(param->nameAsCString(), name) && (anytype || param->type() == type) ) + { + result = itr; + break; + } + } + } + } + return result; + } + + /**Return a const iterator pointing to a named parameter of a given type. + * @param comp :: Component to which parameter is related + * @param name :: Parameter name + * @param type :: An optional type string. If empty, any type is returned + * @returns The iterator parameter of the given type if it exists or a NULL shared pointer if not + */ + component_map_cit ParameterMap::getMapPlace(const IComponent* comp,const char *name, const char * type)const + { + pmap_cit result = m_map.end(); + if(!comp) return result; + const bool anytype = (strlen(type) == 0); + if( !m_map.empty() ) + { const ComponentID id = comp->getComponentID(); pmap_cit it_found = m_map.find(id); if (it_found != m_map.end()) @@ -587,16 +662,17 @@ namespace Mantid Parameter_sptr param = itr->second; if( boost::iequals(param->nameAsCString(), name) && (anytype || param->type() == type) ) { - result = param; + result = itr; break; } } } - } - } + } return result; } + + /** Look for a parameter in the given component by the type of the parameter. * @param comp :: Component to which parameter is related * @param type :: Parameter type @@ -784,7 +860,7 @@ namespace Mantid } } - ///Attempts to retreive a location from the location cache + ///Attempts to retrieve a location from the location cache /// @param comp :: The Component to find the location of /// @param location :: If the location is found it's value will be set here /// @returns true if the location is in the map, otherwise false @@ -810,7 +886,7 @@ namespace Mantid } } - ///Attempts to retreive a rotation from the rotation cache + ///Attempts to retrieve a rotation from the rotation cache /// @param comp :: The Component to find the rotation of /// @param rotation :: If the rotation is found it's value will be set here /// @returns true if the rotation is in the map, otherwise false diff --git a/Code/Mantid/Framework/Geometry/test/ParameterMapTest.h b/Code/Mantid/Framework/Geometry/test/ParameterMapTest.h index c77797d8c161..f9e6f49ef599 100644 --- a/Code/Mantid/Framework/Geometry/test/ParameterMapTest.h +++ b/Code/Mantid/Framework/Geometry/test/ParameterMapTest.h @@ -61,6 +61,7 @@ class ParameterMapTest : public CxxTest::TestSuite ParameterMap pmapA; ParameterMap pmapB; + ParameterMap pmapG; // Empty TS_ASSERT_EQUALS(pmapA,pmapB); @@ -69,36 +70,61 @@ class ParameterMapTest : public CxxTest::TestSuite TS_ASSERT_EQUALS(pmapA,pmapA); // Differs from other TS_ASSERT_DIFFERS(pmapA,pmapB); + TS_ASSERT_DIFFERS(pmapA,pmapG); + + auto par= pmapA.getRecursive(m_testInstrument.get(),name); + pmapG.add(m_testInstrument.get(),par); + TS_ASSERT_EQUALS(pmapA,pmapG); // Same name/value/component pmapB.addDouble(m_testInstrument.get(), name, value); // Now equal TS_ASSERT_EQUALS(pmapA,pmapB); + TS_ASSERT_EQUALS(pmapA,pmapG); - ParameterMap pmapC; + //--- C + ParameterMap pmapC,pmapC1; // Same name/value different component IComponent_sptr comp = m_testInstrument->getChild(0); pmapC.addDouble(comp.get(), name, value); + auto par1=pmapC.getRecursive(comp.get(),name); + pmapC1.add(comp.get(), par1); // Differs from other TS_ASSERT_DIFFERS(pmapA,pmapC); + // Equal + TS_ASSERT_EQUALS(pmapC,pmapC1); + + //--- D // Same name/component different value ParameterMap pmapD; pmapD.addDouble(m_testInstrument.get(), name, value + 1.0); // Differs from other TS_ASSERT_DIFFERS(pmapA,pmapD); + // Adding the same replaces the same par + pmapD.add(m_testInstrument.get(), par1); + // Equal + TS_ASSERT_EQUALS(pmapA,pmapD); + + //--- E // Same value/component different name ParameterMap pmapE; pmapE.addDouble(m_testInstrument.get(), name + "_differ", value); // Differs from other TS_ASSERT_DIFFERS(pmapA,pmapE); + //--- F //Different type ParameterMap pmapF; pmapF.addInt(m_testInstrument.get(), name, 5); // Differs from other TS_ASSERT_DIFFERS(pmapA,pmapF); + // Adding the same replaces the same par regardless of type + pmapF.add(m_testInstrument.get(), par1); + // Equal + TS_ASSERT_EQUALS(pmapA,pmapF); + } void testAdding_A_Parameter_That_Is_Not_Present_Puts_The_Parameter_In() @@ -343,24 +369,24 @@ class ParameterMapTest : public CxxTest::TestSuite void test_copy_from_old_pmap_to_new_pmap_with_new_component(){ - IComponent_sptr oldComp = m_testInstrument->getChild(0); - IComponent_sptr newComp = m_testInstrument->getChild(1); + IComponent_sptr oldComp = m_testInstrument->getChild(0); + IComponent_sptr newComp = m_testInstrument->getChild(1); - ParameterMap oldPMap; - oldPMap.addBool(oldComp.get(), "A", false); - oldPMap.addDouble(oldComp.get(), "B", 1.2); + ParameterMap oldPMap; + oldPMap.addBool(oldComp.get(), "A", false); + oldPMap.addDouble(oldComp.get(), "B", 1.2); - ParameterMap newPMap; + ParameterMap newPMap; - TS_ASSERT_DIFFERS(oldPMap,newPMap); + TS_ASSERT_DIFFERS(oldPMap,newPMap); - newPMap.copyFromParameterMap(oldComp.get(),newComp.get(), &oldPMap); + newPMap.copyFromParameterMap(oldComp.get(),newComp.get(), &oldPMap); - TS_ASSERT_EQUALS(newPMap.contains(newComp.get(), "A", ParameterMap::pBool()), true); - TS_ASSERT_EQUALS(newPMap.contains(newComp.get(), "B", ParameterMap::pDouble()), true); + TS_ASSERT_EQUALS(newPMap.contains(newComp.get(), "A", ParameterMap::pBool()), true); + TS_ASSERT_EQUALS(newPMap.contains(newComp.get(), "B", ParameterMap::pDouble()), true); - Parameter_sptr a = newPMap.get(newComp.get(), "A"); - TS_ASSERT_EQUALS( a->value(), false); + Parameter_sptr a = newPMap.get(newComp.get(), "A"); + TS_ASSERT_EQUALS( a->value(), false); } From a46f4cd242591995c50c36b0c0751cc214940450 Mon Sep 17 00:00:00 2001 From: Alex Buts Date: Fri, 25 Apr 2014 17:19:56 +0100 Subject: [PATCH 05/86] refs #9364 clone method on Parameter and test for it. --- .../inc/MantidGeometry/Instrument/Parameter.h | 5 ++++ .../Geometry/test/ParameterMapTest.h | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/Parameter.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/Parameter.h index 9f0b69f8ffda..bb86e91fb6b5 100644 --- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/Parameter.h +++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/Parameter.h @@ -79,6 +79,9 @@ namespace Mantid const std::string& name() const { return m_name; } /// Parameter name const char* nameAsCString() const{ return m_name.c_str(); } + + /// type-independent clone method; + virtual Parameter * clone()const=0; /// Returns the value of the property as a string virtual std::string asString() const{return m_str_value;} @@ -135,6 +138,8 @@ namespace Mantid /// Get the value of the parameter inline const Type& operator()()const{ return m_value; } + Parameter * clone()const + { return new ParameterType(*this);} private: friend class ParameterMap; friend class Parameter; diff --git a/Code/Mantid/Framework/Geometry/test/ParameterMapTest.h b/Code/Mantid/Framework/Geometry/test/ParameterMapTest.h index f9e6f49ef599..269e86e733ce 100644 --- a/Code/Mantid/Framework/Geometry/test/ParameterMapTest.h +++ b/Code/Mantid/Framework/Geometry/test/ParameterMapTest.h @@ -1,9 +1,11 @@ #ifndef PARAMETERMAPTEST_H_ #define PARAMETERMAPTEST_H_ +#include "MantidGeometry/Instrument/Parameter.h" #include "MantidGeometry/Instrument/ParameterMap.h" #include "MantidGeometry/Instrument/Detector.h" #include "MantidTestHelpers/ComponentCreationHelper.h" +#include "MantidKernel/V3D.h" #include #include @@ -127,6 +129,31 @@ class ParameterMapTest : public CxxTest::TestSuite } + void testClone() + { + const double value(5.1); + + ParameterMap pmapA,pmapB; + + pmapA.addDouble(m_testInstrument.get(), "testDouble", value); + pmapA.addV3D(m_testInstrument.get(), "testV3D", Mantid::Kernel::V3D(1,2,3)); + + auto parD= pmapA.getRecursive(m_testInstrument.get(),"testDouble"); + auto parV3= pmapA.getRecursive(m_testInstrument.get(),"testV3D"); + + Mantid::Geometry::Parameter *pParD = parD->clone(); + Mantid::Geometry::Parameter *pParV = parV3->clone(); + + TS_ASSERT_EQUALS(pParD->asString(),parD->asString()) + TS_ASSERT_EQUALS(pParV->asString(),parV3->asString()) + + pmapB.add(m_testInstrument.get(),Parameter_sptr(pParD)); + pmapB.add(m_testInstrument.get(),Parameter_sptr(pParV)); + + TS_ASSERT_EQUALS(pmapA,pmapB); + } + + void testAdding_A_Parameter_That_Is_Not_Present_Puts_The_Parameter_In() { // Add a parameter for the first component of the instrument From 9e500a45ec039458a48a087d9d71a1ac023c0408 Mon Sep 17 00:00:00 2001 From: Alex Buts Date: Fri, 25 Apr 2014 17:35:27 +0100 Subject: [PATCH 06/86] refs #9364 CopyInstrumentParameters clones parameters rather then recreates it through strings --- .../Framework/Algorithms/src/CopyInstrumentParameters.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp index a5f73a2b50f2..abb063df08a0 100644 --- a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp @@ -116,8 +116,10 @@ void CopyInstrumentParameters::exec() } targComp = spTargComp->getBaseComponent(); } - // merge maps for existing target component - auto param = it->second; //.get(); + + // create shared pointer to independent copy of original parameter. Would be easy and nice to have cow_pointer instead of shared_ptr in the parameter map. + auto param = Parameter_sptr(it->second->clone()); + // add new parameter to the maps for existing target component targMap.add(targComp, param); } From a8ac6eed0f2ff83aba782bb866bc8ce979218954 Mon Sep 17 00:00:00 2001 From: Alex Buts Date: Fri, 25 Apr 2014 18:00:42 +0100 Subject: [PATCH 07/86] refs #9364 Avoid copying second parameter map. swap contents of new map with contents of old map instead. --- .../Framework/API/inc/MantidAPI/ExperimentInfo.h | 2 ++ Code/Mantid/Framework/API/src/ExperimentInfo.cpp | 10 ++++++++++ .../Algorithms/src/CopyInstrumentParameters.cpp | 2 +- .../inc/MantidGeometry/Instrument/ParameterMap.h | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/ExperimentInfo.h b/Code/Mantid/Framework/API/inc/MantidAPI/ExperimentInfo.h index 41e5e65a0a5f..ddf8051b4304 100644 --- a/Code/Mantid/Framework/API/inc/MantidAPI/ExperimentInfo.h +++ b/Code/Mantid/Framework/API/inc/MantidAPI/ExperimentInfo.h @@ -73,6 +73,8 @@ namespace API /// Replaces current parameter map with copy of given map void replaceInstrumentParameters(const Geometry::ParameterMap & pmap); + /// exchange contents of current parameter map with contents of other map) + void swapInstrumentParameters(Geometry::ParameterMap & pmap); /// Cache a lookup of grouped detIDs to member IDs void cacheDetectorGroupings(const det2group_map & mapping); diff --git a/Code/Mantid/Framework/API/src/ExperimentInfo.cpp b/Code/Mantid/Framework/API/src/ExperimentInfo.cpp index e5b056cbe020..8da1f2679ab8 100644 --- a/Code/Mantid/Framework/API/src/ExperimentInfo.cpp +++ b/Code/Mantid/Framework/API/src/ExperimentInfo.cpp @@ -316,6 +316,16 @@ namespace API { this->m_parmap.reset(new ParameterMap(pmap)); } + //--------------------------------------------------------------------------------------- + /** + * exchanges contents of current parameter map with contents of other map) + * @ pmap reference to parameter map which would exchange its contents with current map + */ + void ExperimentInfo::swapInstrumentParameters(Geometry::ParameterMap & pmap) + { + this->m_parmap->swap(pmap); + } + //--------------------------------------------------------------------------------------- /** diff --git a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp index abb063df08a0..97473749b4e7 100644 --- a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp @@ -125,7 +125,7 @@ void CopyInstrumentParameters::exec() } // changed parameters - m_receivingWorkspace->replaceInstrumentParameters( targMap ); + m_receivingWorkspace->swapInstrumentParameters(targMap); } else diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h index 87c8082c403f..d638377223be 100644 --- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h +++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h @@ -120,6 +120,12 @@ namespace Geometry m_map.clear(); clearPositionSensitiveCaches(); } + /// method swaps two parameter maps contents each other. All caches contents is nullified (TO DO: it can be efficiently swapped too) + void swap(ParameterMap &other) + { + m_map.swap(other.m_map); + clearPositionSensitiveCaches(); + } /// Clear any parameters with the given name void clearParametersByName(const std::string & name); From 275e70994ccf8c7c0c58a8db6737339c9f952352 Mon Sep 17 00:00:00 2001 From: Alex Buts Date: Fri, 25 Apr 2014 18:08:41 +0100 Subject: [PATCH 08/86] refs #9364 Comments bla bla --- .../Algorithms/src/CopyInstrumentParameters.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp index 97473749b4e7..049166b41377 100644 --- a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp @@ -1,11 +1,12 @@ /*WIKI* -Transfer an instrument from a giving workspace to a receiving workspace for the same instrument. +Transfer an instrument parameters from a giving workspace to a receiving workspace. -The instrument in of the receiving workspace is replaced by a copy of the instrument in the giving workspace -and so gains any manipulations such as calibration done to the instrument in the giving workspace. -The two workspaces can have spectra allocated to their detectors differently. +The instrument parameters in the receiving workspace are REPLACED (despite you can assume from the name of the algorithm) +by a copy of the instrument parameters in the giving workspace +so gaining any manipulations such as calibration done to the instrument in the giving workspace. +Does not work on workspaces with grouped detectors if some of the detectors were calibrated. *WIKI*/ //---------------------------------------------------------------------- From a8b2aea6ac369c224ae17719c89fa1bdf12166c0 Mon Sep 17 00:00:00 2001 From: Arturs Bekasovs Date: Tue, 20 May 2014 12:43:54 +0100 Subject: [PATCH 09/86] Refs #9494. Store the current label instead of a pointer to ws group The label gets updated when new data is loaded and is used for workspace naming and grouping. This seems to be more robust than storing a shared pointer and fixed the problem. --- .../Muon/MuonAnalysis.h | 10 +--- .../Muon/MuonAnalysisFitDataTab.h | 4 +- .../Muon/MuonAnalysisHelper.h | 4 ++ .../src/Muon/MuonAnalysis.cpp | 58 +++++-------------- .../src/Muon/MuonAnalysisFitDataTab.cpp | 48 +++++---------- .../src/Muon/MuonAnalysisHelper.cpp | 21 +++++++ 6 files changed, 57 insertions(+), 88 deletions(-) diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.h index 753820aadcbd..dffd9fe4a6f5 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.h @@ -297,8 +297,7 @@ private slots: PlotType parsePlotType(QComboBox* selector); /// Finds a name for new analysis workspace - std::string getNewAnalysisWSName(const std::string& runLabel, ItemType itemType, int tableRow, - PlotType plotType); + std::string getNewAnalysisWSName(ItemType itemType, int tableRow, PlotType plotType); /// Selects a workspace from the group according to what is selected on the interface for the period MatrixWorkspace_sptr getPeriodWorkspace(PeriodType periodType, WorkspaceGroup_sptr group); @@ -492,9 +491,6 @@ private slots: /// When data loaded set various buttons etc to active void nowDataAvailable(); - /// Updates m_currentGroup given the new loaded label - void updateCurrentGroup(const std::string& newGroupName); - /// handles option tab work MantidQt::CustomInterfaces::Muon::MuonAnalysisOptionTab* m_optionTab; /// handles fit data work @@ -508,8 +504,8 @@ private slots: /// First Good Data time as loaded from Data file double m_dataFirstGoodData; - /// The group we should add new plot workspaces to - WorkspaceGroup_sptr m_currentGroup; + /// The label to use for naming / grouping all the new workspaces + std::string m_currentLabel; /// Default widget values static const QString TIME_ZERO_DEFAULT; diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataTab.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataTab.h index 0ee04f30ee48..adbfb3f4c280 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataTab.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataTab.h @@ -60,8 +60,6 @@ class MuonAnalysisFitDataTab : MantidQt::API::UserSubWindow void init(); /// Copy the given raw workspace and keep for later. void makeRawWorkspace(const std::string & wsName); - /// Group the list of workspaces given to the workspace name given. - void groupWorkspaces(const std::vector & inputWorkspaces, const std::string & groupName); signals: @@ -83,4 +81,4 @@ private slots: } } -#endif //MANTIDQTCUSTOMINTERFACES_MUONANALYSISFITDATATAB_H_ \ No newline at end of file +#endif //MANTIDQTCUSTOMINTERFACES_MUONANALYSISFITDATATAB_H_ diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h index cd0635df7537..881d4caa929a 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h @@ -48,6 +48,10 @@ MANTIDQT_CUSTOMINTERFACES_DLL Workspace_sptr sumWorkspaces(const std::vector inputWorkspaces); + /** * A class which deals with auto-saving the widget values. Widgets are registered and then on any * change, their value is stored using QSettings. diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysis.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysis.cpp index 745b1a0211dc..793bcecab7a3 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysis.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysis.cpp @@ -34,7 +34,9 @@ #include #include #include + #include +#include #include @@ -98,7 +100,8 @@ MuonAnalysis::MuonAnalysis(QWidget *parent) : m_updating(false), m_updatingGrouping(false), m_loaded(false), m_deadTimesChanged(false), m_textToDisplay(""), m_optionTab(NULL), m_fitDataTab(NULL), m_resultTableTab(NULL), // Will be created in initLayout() - m_dataTimeZero(0.0), m_dataFirstGoodData(0.0) + m_dataTimeZero(0.0), m_dataFirstGoodData(0.0), + m_currentLabel("NoLabelSet") {} /** @@ -376,21 +379,17 @@ void MuonAnalysis::plotItem(ItemType itemType, int tableRow, PlotType plotType) MatrixWorkspace_sptr wsRaw = createAnalysisWorkspace(itemType, tableRow, plotType, true); // Find names for new workspaces - const std::string wsName = getNewAnalysisWSName(m_currentGroup->getName(), itemType, tableRow, - plotType); + const std::string wsName = getNewAnalysisWSName(itemType, tableRow, plotType); const std::string wsRawName = wsName + "_Raw"; - // Make sure they are in the current group - if ( ! m_currentGroup->contains(wsName) ) - { - m_currentGroup->addWorkspace(ws); - m_currentGroup->addWorkspace(wsRaw); - } - // Make sure they end up in the ADS ads.addOrReplace(wsName, ws); ads.addOrReplace(wsRawName, wsRaw); + // Make sure they are grouped + std::vector wsNames = boost::assign::list_of(wsName)(wsRawName); + MuonAnalysisHelper::groupWorkspaces(m_currentLabel, wsNames); + QString wsNameQ = QString::fromStdString(wsName); // Plot the workspace @@ -409,14 +408,12 @@ void MuonAnalysis::plotItem(ItemType itemType, int tableRow, PlotType plotType) /** * Finds a name for new analysis workspace. - * @param runLabel :: String describing the run we are working with * @param itemType :: Whether it's a group or pair * @param tableRow :: Row in the group/pair table which contains the item * @param plotType :: What kind of plot we want to analyse * @return New name */ -std::string MuonAnalysis::getNewAnalysisWSName(const std::string& runLabel, ItemType itemType, int tableRow, - PlotType plotType) +std::string MuonAnalysis::getNewAnalysisWSName(ItemType itemType, int tableRow, PlotType plotType) { std::string plotTypeName; @@ -444,7 +441,8 @@ std::string MuonAnalysis::getNewAnalysisWSName(const std::string& runLabel, Item itemName = m_uiForm.groupTable->item(tableRow,0)->text().toStdString(); } - const std::string firstPart = runLabel + "; " + itemTypeName + "; " + itemName + "; " + plotTypeName + "; #"; + const std::string firstPart = (m_currentLabel + "; " + itemTypeName + "; " + itemName + "; " + + plotTypeName + "; #"); std::string newName; @@ -1661,8 +1659,7 @@ void MuonAnalysis::inputFileChanged(const QStringList& files) // Make the options available nowDataAvailable(); - // Use label as a name for the group we will place plots to - updateCurrentGroup(loadResult->label); + m_currentLabel = loadResult->label; if(m_uiForm.frontPlotButton->isEnabled()) plotSelectedItem(); @@ -2565,7 +2562,7 @@ void MuonAnalysis::changeRun(int amountToChange) if (currentFile.contains("auto") || currentFile.contains("argus0000000")) { separateMuonFile(filePath, currentFile, run, runSize); - currentFile = filePath + QString::fromStdString(m_currentGroup->getName()) + ".nxs"; + currentFile = filePath + QString::fromStdString(m_currentLabel) + ".nxs"; } separateMuonFile(filePath, currentFile, run, runSize); @@ -3326,33 +3323,6 @@ void MuonAnalysis::nowDataAvailable() m_uiForm.guessAlphaButton->setEnabled(true); } -/** - * Updates the m_currentGroup given the name of the new group we want to store plot workspace to. - * @param newGroupName :: Name of the group m_currentGroup should have - */ -void MuonAnalysis::updateCurrentGroup(const std::string& newGroupName) -{ - if ( AnalysisDataService::Instance().doesExist(newGroupName) ) - { - auto existingGroup = AnalysisDataService::Instance().retrieveWS(newGroupName); - - if (existingGroup) - { - m_currentGroup = existingGroup; - return; - } - else - { - g_log.warning() << "Workspace with name '" << newGroupName << "' "; - g_log.warning() << "was replaced with the group used by MuonAnalysis." << "\n"; - } - } - - m_currentGroup = boost::make_shared(); - AnalysisDataService::Instance().addOrReplace(newGroupName, m_currentGroup); -} - - void MuonAnalysis::openDirectoryDialog() { MantidQt::API::ManageUserDirectories *ad = new MantidQt::API::ManageUserDirectories(this); diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp index 83c59a1bd6b4..7da5bb45e314 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp @@ -6,6 +6,8 @@ #include "MantidAPI/Algorithm.h" #include "MantidAPI/AlgorithmManager.h" +#include "MantidQtCustomInterfaces/MuonAnalysisHelper.h" + #include #include @@ -53,23 +55,6 @@ void MuonAnalysisFitDataTab::makeRawWorkspace(const std::string& wsName) duplicate->execute(); } - -/** -* Groups the given workspace group with the raw workspace that is associated with -* the workspace name which is also given. -* -* @param inputWorkspaces :: The name of the workspace the raw file is associated to. -* @param groupName :: The name of the workspaceGroup to join with and what to call the output. -*/ -void MuonAnalysisFitDataTab::groupWorkspaces(const std::vector & inputWorkspaces, const std::string & groupName) -{ - Mantid::API::IAlgorithm_sptr groupingAlg = Mantid::API::AlgorithmManager::Instance().create("GroupWorkspaces"); - groupingAlg->setProperty("InputWorkspaces", inputWorkspaces); - groupingAlg->setPropertyValue("OutputWorkspace", groupName); - groupingAlg->execute(); -} - - /** * Group the fitted workspaces that are created from the 'fit' algorithm * @@ -77,33 +62,28 @@ void MuonAnalysisFitDataTab::groupWorkspaces(const std::vector & in */ void MuonAnalysisFitDataTab::groupFittedWorkspaces(QString workspaceName) { - std::string groupName = workspaceName.left(workspaceName.find(';')).toStdString(); std::string wsNormalised = workspaceName.toStdString() + "_NormalisedCovarianceMatrix"; std::string wsParameters = workspaceName.toStdString() + "_Parameters"; std::string wsWorkspace = workspaceName.toStdString() + "_Workspace"; std::vector inputWorkspaces; - if ( Mantid::API::AnalysisDataService::Instance().doesExist(groupName) ) + if ( Mantid::API::AnalysisDataService::Instance().doesExist(wsNormalised) ) { - inputWorkspaces.push_back(groupName); - - if ( Mantid::API::AnalysisDataService::Instance().doesExist(wsNormalised) ) - { - inputWorkspaces.push_back(wsNormalised); - } - if ( Mantid::API::AnalysisDataService::Instance().doesExist(wsParameters) ) - { - inputWorkspaces.push_back(wsParameters); - } - if ( Mantid::API::AnalysisDataService::Instance().doesExist(wsWorkspace) ) - { - inputWorkspaces.push_back(wsWorkspace); - } + inputWorkspaces.push_back(wsNormalised); + } + if ( Mantid::API::AnalysisDataService::Instance().doesExist(wsParameters) ) + { + inputWorkspaces.push_back(wsParameters); + } + if ( Mantid::API::AnalysisDataService::Instance().doesExist(wsWorkspace) ) + { + inputWorkspaces.push_back(wsWorkspace); } if (inputWorkspaces.size() > 1) { - groupWorkspaces(inputWorkspaces, groupName); + std::string groupName = workspaceName.left(workspaceName.find(';')).toStdString(); + MuonAnalysisHelper::groupWorkspaces(groupName, inputWorkspaces); } } diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisHelper.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisHelper.cpp index ae9ab13184ac..dac3bbf074c7 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisHelper.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisHelper.cpp @@ -497,6 +497,27 @@ bool compareByRunNumber(Workspace_sptr ws1, Workspace_sptr ws2) return firstPeriod(ws1)->getRunNumber() < firstPeriod(ws2)->getRunNumber(); } +/** + * Makes sure the specified workspaces are in specified group. If ws under the given group name + * exists already - it (or its children if it's a group) end up in the new group as well. + * @param groupName :: Name of the group workspaces should be in + * @param inputWorkspaces :: Names of the workspaces to group + */ +void groupWorkspaces(const std::string& groupName, std::vector inputWorkspaces) +{ + if (AnalysisDataService::Instance().doesExist(groupName)) + { + // If ws exists under the group name, add it to the list, so it (or its children if a group) end + // up in the new group + inputWorkspaces.push_back(groupName); + } + + IAlgorithm_sptr groupingAlg = AlgorithmManager::Instance().create("GroupWorkspaces"); + groupingAlg->setProperty("InputWorkspaces", inputWorkspaces); + groupingAlg->setPropertyValue("OutputWorkspace", groupName); + groupingAlg->execute(); +} + } // namespace MuonAnalysisHelper } // namespace CustomInterfaces } // namespace Mantid From f314dbdd4b2436b220307fba28ddd406fc6cb18f Mon Sep 17 00:00:00 2001 From: Arturs Bekasovs Date: Tue, 20 May 2014 15:38:31 +0100 Subject: [PATCH 10/86] Refs #9494. Make the grouping function add to group if it exists It makes it potentially faster and we can check for duplicates to avoid endless warnings. --- .../Muon/MuonAnalysisHelper.h | 2 +- .../src/Muon/MuonAnalysisHelper.cpp | 39 +++++++++++++------ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h index 881d4caa929a..01e629b101e6 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h @@ -50,7 +50,7 @@ MANTIDQT_CUSTOMINTERFACES_DLL bool compareByRunNumber(Workspace_sptr ws1, Worksp /// Makes sure the specified workspaces are in specified group MANTIDQT_CUSTOMINTERFACES_DLL void groupWorkspaces(const std::string& groupName, - std::vector inputWorkspaces); + const std::vector& inputWorkspaces); /** * A class which deals with auto-saving the widget values. Widgets are registered and then on any diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisHelper.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisHelper.cpp index dac3bbf074c7..c3bcb5898535 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisHelper.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisHelper.cpp @@ -498,24 +498,41 @@ bool compareByRunNumber(Workspace_sptr ws1, Workspace_sptr ws2) } /** - * Makes sure the specified workspaces are in specified group. If ws under the given group name - * exists already - it (or its children if it's a group) end up in the new group as well. + * Makes sure the specified workspaces are in specified group. If group exists already - missing + * workspaces are added to it, otherwise new group is created. If ws exists in ADS under groupName, + * and it is not a group - it's overwritten. * @param groupName :: Name of the group workspaces should be in * @param inputWorkspaces :: Names of the workspaces to group */ -void groupWorkspaces(const std::string& groupName, std::vector inputWorkspaces) +void groupWorkspaces(const std::string& groupName, const std::vector& inputWorkspaces) { - if (AnalysisDataService::Instance().doesExist(groupName)) + auto& ads = AnalysisDataService::Instance(); + + WorkspaceGroup_sptr group; + if (ads.doesExist(groupName)) { - // If ws exists under the group name, add it to the list, so it (or its children if a group) end - // up in the new group - inputWorkspaces.push_back(groupName); + group = ads.retrieveWS(groupName); } - IAlgorithm_sptr groupingAlg = AlgorithmManager::Instance().create("GroupWorkspaces"); - groupingAlg->setProperty("InputWorkspaces", inputWorkspaces); - groupingAlg->setPropertyValue("OutputWorkspace", groupName); - groupingAlg->execute(); + if(group) + { + // Exists and is a group -> add missing workspaces to it + for (auto it = inputWorkspaces.begin(); it != inputWorkspaces.end(); ++it) + { + if (!group->contains(*it)) + { + group->add(*it); + } + } + } + else + { + // Doesn't exist or isn't a group -> create/overwrite + IAlgorithm_sptr groupingAlg = AlgorithmManager::Instance().create("GroupWorkspaces"); + groupingAlg->setProperty("InputWorkspaces", inputWorkspaces); + groupingAlg->setPropertyValue("OutputWorkspace", groupName); + groupingAlg->execute(); + } } } // namespace MuonAnalysisHelper From 1d2bd53d51c3e87a1120a97141a2d3a15bf27a6b Mon Sep 17 00:00:00 2001 From: Arturs Bekasovs Date: Wed, 21 May 2014 12:33:47 +0100 Subject: [PATCH 11/86] Refs #9494. Set the correct include path Forgot to fix that when rebased the ticket onto the master --- .../CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp index 7da5bb45e314..725099dc5cc5 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataTab.cpp @@ -6,7 +6,7 @@ #include "MantidAPI/Algorithm.h" #include "MantidAPI/AlgorithmManager.h" -#include "MantidQtCustomInterfaces/MuonAnalysisHelper.h" +#include "MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h" #include From 36e8f20aa30e1aa8adb0caea01eee973145d5aac Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Fri, 23 May 2014 10:18:58 +0100 Subject: [PATCH 12/86] Add working set of Sphinx extensions. Refs #9521 --- .../docs/sphinxext/mantiddoc/__init__.py | 0 .../mantiddoc/directives/__init__.py | 0 .../mantiddoc/directives/algorithm.py | 54 ++++++ .../sphinxext/mantiddoc/directives/aliases.py | 32 ++++ .../sphinxext/mantiddoc/directives/base.py | 54 ++++++ .../mantiddoc/directives/categories.py | 42 +++++ .../mantiddoc/directives/properties.py | 159 ++++++++++++++++++ .../sphinxext/mantiddoc/directives/summary.py | 32 ++++ 8 files changed, 373 insertions(+) create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/__init__.py create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/__init__.py b/Code/Mantid/docs/sphinxext/mantiddoc/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py new file mode 100644 index 000000000000..a2bf960c5941 --- /dev/null +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -0,0 +1,54 @@ +from base import BaseDirective + + +class AlgorithmDirective(BaseDirective): + + """ + Adds a referenceable link for a given algorithm, a title, + and a screenshot of the algorithm to an rst file. + """ + + required_arguments, optional_arguments = 1, 0 + + def run(self): + """ + Called by Sphinx when the ..algorithm:: directive is encountered + """ + algorithm_name = str(self.arguments[0]) + + # Seperate methods for each unique piece of functionality. + reference = self._make_reference_link(algorithm_name) + title = self._make_header(algorithm_name, True) + screenshot = self._get_algorithm_screenshot(algorithm_name) + + return self._insert_rest(reference + title + screenshot) + + def _make_reference_link(self, algorithm_name): + """ + Outputs a reference to the top of the algorithm's rst file. + + Args: + algorithm_name (str): The name of the algorithm to reference. + + Returns: + str: A ReST formatted reference. + """ + return ".. _" + algorithm_name.title() + ":" + "\n" + + def _get_algorithm_screenshot(self, algorithm_name): + """ + Obtains the location of the screenshot for a given algorithm. + + Args: + algorithm_name (str): The name of the algorithm. + + Returns: + str: The location of the screenshot for the given algorithm. + """ + images_dir = self.state.document.settings.env.config["mantid_images"] + return ".. image:: " + images_dir + algorithm_name + ".png" + + +def setup(app): + app.add_config_value('mantid_images', 'mantid_images', 'env') + app.add_directive('algorithm', AlgorithmDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py new file mode 100644 index 000000000000..55895f5ead34 --- /dev/null +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py @@ -0,0 +1,32 @@ +from base import BaseDirective + + +class AliasesDirective(BaseDirective): + + """ + Obtains the aliases for a given algorithm based on it's name. + """ + + required_arguments, optional_arguments = 1, 0 + + def run(self): + """ + Called by Sphinx when the ..aliases:: directive is encountered. + """ + title = self._make_header(__name__.title()) + alias = self._get_alias(str(self.arguments[0])) + return self._insert_rest(title + alias) + + def _get_alias(self, algorithm_name): + """ + Return the alias for the named algorithm. + + Args: + algorithm_name (str): The name of the algorithm to get the alias for. + """ + alg = self._create_mantid_algorithm(algorithm_name) + return "This algorithm is also known as: " + "**" + alg.alias() + "**" + + +def setup(app): + app.add_directive('aliases', AliasesDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py new file mode 100644 index 000000000000..ac76ddcfeb6f --- /dev/null +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py @@ -0,0 +1,54 @@ +from docutils import statemachine +from docutils.parsers.rst import Directive + + +class BaseDirective(Directive): + + """ + Contains shared functionality for Mantid custom directives. + """ + + def _make_header(self, name, title=False): + """ + Makes a ReStructuredText title from the algorithm's name. + + Args: + algorithm_name (str): The name of the algorithm to use for the title. + title (bool): If True, line is inserted above & below algorithm name. + + Returns: + str: ReST formatted header with algorithm_name as content. + """ + line = "\n" + "-" * len(name) + "\n" + if title: + return line + name + line + else: + return name + line + + def _insert_rest(self, text): + """ + Inserts ReStructuredText into the algorithm file. + + Args: + text (str): Inserts ReStructuredText into the algorithm file. + + Returns: + list: Empty list. This is required by the inherited run method. + """ + self.state_machine.insert_input(statemachine.string2lines(text), "") + return [] + + def _create_mantid_algorithm(self, algorithm_name): + """ + Create and initializes a Mantid algorithm. + + Args: + algorithm_name (str): The name of the algorithm to use for the title. + + Returns: + algorithm: An instance of a Mantid algorithm. + """ + from mantid.api import AlgorithmManager + alg = AlgorithmManager.createUnmanaged(algorithm_name) + alg.initialize() + return alg diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py new file mode 100644 index 000000000000..c51a145b5f77 --- /dev/null +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -0,0 +1,42 @@ +from base import BaseDirective + + +class CategoriesDirective(BaseDirective): + + """ + Obtains the categories for a given algorithm based on it's name. + """ + + required_arguments, optional_arguments = 1, 0 + + def run(self): + """ + Called by Sphinx when the ..categories:: directive is encountered. + """ + title = self._make_header(__name__.title()) + categories = self._get_categories(str(self.arguments[0])) + return self._insert_rest(title + categories) + + def _get_categories(self, algorithm_name): + """ + Return the categories for the named algorithm. + + Args: + algorithm_name (str): The name of the algorithm. + """ + alg = self._create_mantid_algorithm(algorithm_name) + + # Create a list containing each category. + categories = alg.category().split("\\") + + if len(categories) >= 2: + # Add a cross reference for each catagory. + links = (":ref:`%s` | " * len(categories)) % tuple(categories) + # Remove last three characters to remove last | + return ("`Categories: `_ " + links)[:-3] + else: + return "`Category: `_ :ref:`%s`" % (categories) + + +def setup(app): + app.add_directive('categories', CategoriesDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py new file mode 100644 index 000000000000..64d5de49c748 --- /dev/null +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py @@ -0,0 +1,159 @@ +from base import BaseDirective + + +class PropertiesDirective(BaseDirective): + + """ + Outputs the given algorithm's properties into a ReST formatted table. + """ + # Accept one required argument and no optional arguments. + required_arguments, optional_arguments = 1, 0 + + def run(self): + """ + Called by Sphinx when the ..properties:: directive is encountered. + """ + alg_name = str(self.arguments[0]) + title = self._make_header(__name__.title()) + properties_table = self._populate_properties_table(alg_name) + return self._insert_rest(title + properties_table) + + def _populate_properties_table(self, algorithm_name): + """ + Populates the ReST table with algorithm properties. + + Args: + algorithm_name (str): The name of the algorithm. + """ + alg = self._create_mantid_algorithm(algorithm_name) + alg_properties = alg.getProperties() + + # Stores each property of the algorithm in a tuple. + properties = [] + + # Used to obtain the name for the direction property rather than an + # int. + direction_string = ["Input", "Output", "InOut", "None"] + + for prop in alg_properties: + # Append a tuple of properties to the list. + properties.append(( + str(prop.name), + str(direction_string[prop.direction]), + str(prop.type), + str(self._get_default_prop(prop)), + str(prop.documentation) + )) + + # Build and add the properties to the ReST table. + return self._build_table(properties) + + def _build_table(self, table_content): + """ + Build the ReST format + + Args: + table_content (list of tuples): Each tuple (row) container + property values for a unique property of that algorithm. + + Returns: + str: ReST formatted table containing algorithm properties. + """ + # Default values for the table headers. + header_content = ( + 'Name', 'Direction', 'Type', 'Default', 'Description') + # The width of the columns. Multiply row length by 10 to ensure small + # properties format correctly. + col_sizes = [max(len(row[i] * 10) for row in table_content) + for i in range(len(header_content))] + # Use the column widths as a means to formatting columns. + formatter = ' '.join('{:<%d}' % col for col in col_sizes) + # Add whitespace to each column. This depends on the values returned by + # col_sizes. + table_content_formatted = [ + formatter.format(*item) for item in table_content] + # Create a seperator for each column + seperator = formatter.format(*['=' * col for col in col_sizes]) + # Build the table. + header = '\n' + seperator + '\n' + formatter.format(*header_content) + '\n' + content = seperator + '\n' + \ + '\n'.join(table_content_formatted) + '\n' + seperator + # Join the header and footer. + return header + content + + def _get_default_prop(self, prop): + """ + Converts the default value of the property to a more use-friendly one. + + Args: + prop (str): The algorithm property to use. + + Returns: + str: The default value of the property. + """ + from mantid.api import IWorkspaceProperty + + # Used to obtain the name for the direction property rather than + # outputting an int. + direction_string = ["Input", "Output", "InOut", "None"] + + # Nothing to show under the default section for an output properties + # that are not workspace properties. + if (direction_string[prop.direction] == "Output") and \ + (not isinstance(prop, IWorkspaceProperty)): + default_prop = "" + elif (prop.isValid == ""): + default_prop = self._create_property_default_string(prop) + else: + default_prop = "Mandatory" + return default_prop + + def _create_property_default_string(self, prop): + """ + Converts the default value of the property to a more use-friendly one. + + Args: + prop. The property to find the default value of. + + Returns: + str: The string to add to the property table default section. + """ + + default = prop.getDefault + defaultstr = "" + + # Convert to int, then float, then any string + try: + val = int(default) + if (val >= 2147483647): + defaultstr = "Optional" + else: + defaultstr = str(val) + except: + try: + val = float(default) + if (val >= 1e+307): + defaultstr = "Optional" + else: + defaultstr = str(val) + except: + # Fall-back default for anything + defaultstr = str(default) + + # Replace the ugly default values with "Optional" + if (defaultstr == "8.9884656743115785e+307") or \ + (defaultstr == "1.7976931348623157e+308") or \ + (defaultstr == "2147483647"): + defaultstr = "Optional" + + if str(prop.type) == "boolean": + if defaultstr == "1": + defaultstr = "True" + else: + defaultstr = "False" + + return defaultstr + + +def setup(app): + app.add_directive('properties', PropertiesDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py new file mode 100644 index 000000000000..c66fc706a064 --- /dev/null +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py @@ -0,0 +1,32 @@ +from base import BaseDirective + + +class SummaryDirective(BaseDirective): + + """ + Obtains the summary for a given algorithm based on it's name. + """ + + required_arguments, optional_arguments = 1, 0 + + def run(self): + """ + Called by Sphinx when the ..summary:: directive is encountered. + """ + title = self._make_header(__name__.title()) + summary = self._get_summary(str(self.arguments[0])) + return self._insert_rest(title + summary) + + def _get_summary(self, algorithm_name): + """ + Return the summary for the named algorithm. + + Args: + algorithm_name (str): The name of the algorithm. + """ + alg = self._create_mantid_algorithm(algorithm_name) + return alg.getWikiSummary() + + +def setup(app): + app.add_directive('summary', SummaryDirective) From 5cd6fe34979badbf9535cafa1fbd0acc2c280603 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Fri, 23 May 2014 10:21:42 +0100 Subject: [PATCH 13/86] Add README and initial start on style guide text. Refs #9521 --- Code/Mantid/docs/DocumentationStyleGuide.md | 10 ++++++++++ Code/Mantid/docs/README.md | 5 +++++ 2 files changed, 15 insertions(+) create mode 100644 Code/Mantid/docs/DocumentationStyleGuide.md create mode 100644 Code/Mantid/docs/README.md diff --git a/Code/Mantid/docs/DocumentationStyleGuide.md b/Code/Mantid/docs/DocumentationStyleGuide.md new file mode 100644 index 000000000000..75a0ac64a70c --- /dev/null +++ b/Code/Mantid/docs/DocumentationStyleGuide.md @@ -0,0 +1,10 @@ +Documentation Style Guide +========================= + +This guide describes the formatting that should be followed when documenting Mantid functionality. The documentation is built using [Sphinx](http://sphinx.pocoo.org/) and when using Sphinx most of what you type is reStructuredText. For more information on reStructeredText see: + +* https://pythonhosted.org/an_example_pypi_project/sphinx.html +* http://docutils.sourceforge.net/rst.html +* http://docutils.sourceforge.net/docs/user/rst/quickref.html +* http://docutils.sourceforge.net/docs/user/rst/cheatsheet.txt + diff --git a/Code/Mantid/docs/README.md b/Code/Mantid/docs/README.md new file mode 100644 index 000000000000..12654d178542 --- /dev/null +++ b/Code/Mantid/docs/README.md @@ -0,0 +1,5 @@ +The Mantid documentation is written in [reStructuredText](http://docutils.sourceforge.net/rst.html) and processed using [Sphinx](http://sphinx.pocoo.org/). To install Sphinx type + + easy_install -U Sphinx + +CMake produces a `doc-html` target that is used to build the documentation. The output files will appear in a `html` sub directory of the main `build/docs` directory. \ No newline at end of file From 7e598c2cfaa0f64e96b916001ef48b40c2b133a5 Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Fri, 23 May 2014 11:47:14 +0100 Subject: [PATCH 14/86] Update screenshot method to add CSS class to image. Refs #9521. - This is required to easily style the image, e.g. alignment. --- Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index a2bf960c5941..3f7b33fe2eab 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -46,7 +46,8 @@ def _get_algorithm_screenshot(self, algorithm_name): str: The location of the screenshot for the given algorithm. """ images_dir = self.state.document.settings.env.config["mantid_images"] - return ".. image:: " + images_dir + algorithm_name + ".png" + screenshot = images_dir + algorithm_name + ".png" + return ".. image:: " + screenshot + "\n" + " :class: screenshot" def setup(app): From c57778437f19f50c81890a6032b65dfcb3b2a3c0 Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Fri, 23 May 2014 16:01:51 +0100 Subject: [PATCH 15/86] Removed title from categories. Refs #9521. --- Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py index c51a145b5f77..f53b98a090bd 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -13,9 +13,8 @@ def run(self): """ Called by Sphinx when the ..categories:: directive is encountered. """ - title = self._make_header(__name__.title()) categories = self._get_categories(str(self.arguments[0])) - return self._insert_rest(title + categories) + return self._insert_rest(categories) def _get_categories(self, algorithm_name): """ From a7c12f3fdb4117ef8925c8191876abafde8094b8 Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Fri, 23 May 2014 16:02:55 +0100 Subject: [PATCH 16/86] Added local table of content to algorithm. Refs #9521. --- .../Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index 3f7b33fe2eab..4af0b912d0b7 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -19,9 +19,10 @@ def run(self): # Seperate methods for each unique piece of functionality. reference = self._make_reference_link(algorithm_name) title = self._make_header(algorithm_name, True) + toc = self._make_local_toc() screenshot = self._get_algorithm_screenshot(algorithm_name) - return self._insert_rest(reference + title + screenshot) + return self._insert_rest(reference + title + screenshot + toc) def _make_reference_link(self, algorithm_name): """ @@ -35,6 +36,9 @@ def _make_reference_link(self, algorithm_name): """ return ".. _" + algorithm_name.title() + ":" + "\n" + def _make_local_toc(self): + return ".. contents:: Table of Contents\n :local:\n" + def _get_algorithm_screenshot(self, algorithm_name): """ Obtains the location of the screenshot for a given algorithm. From 48610385b4b9f53d157ee007421039eeb01b4e0a Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Fri, 23 May 2014 16:03:40 +0100 Subject: [PATCH 17/86] Use figure rather than image. Refs #9521. - This allows a caption to be added that contains the algorithms name, to make the screenshot's purpose clearer. --- Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index 4af0b912d0b7..1f0de157bf66 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -51,7 +51,8 @@ def _get_algorithm_screenshot(self, algorithm_name): """ images_dir = self.state.document.settings.env.config["mantid_images"] screenshot = images_dir + algorithm_name + ".png" - return ".. image:: " + screenshot + "\n" + " :class: screenshot" + caption = "A screenshot of the **" + algorithm_name + "** dialog." + return ".. figure:: " + screenshot + "\n" + " :class: screenshot\n\n " + caption + "\n" def setup(app): From b6b077513881c40c06730f474395c23653ca61bb Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Fri, 23 May 2014 11:59:36 +0100 Subject: [PATCH 18/86] Hard code section header names rather than using the module titles It's clearer where the section names come from and avoids any unwanted module qualifications when the directives become part of a package. Refs #9521 --- .../mantiddoc/directives/__init__.py | 23 +++++++++++++++++++ .../mantiddoc/directives/algorithm.py | 7 +++++- .../sphinxext/mantiddoc/directives/aliases.py | 8 ++++++- .../mantiddoc/directives/categories.py | 8 ++++++- .../mantiddoc/directives/properties.py | 8 ++++++- .../sphinxext/mantiddoc/directives/summary.py | 8 ++++++- 6 files changed, 57 insertions(+), 5 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py index e69de29bb2d1..10dcf75288c5 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py @@ -0,0 +1,23 @@ +""" + Defines custom directives for Mantid documentation + + Each directive should be defined in a different module and have its own + setup(app) function. The setup function defined here is used to tie them + all together in the case where all directives are required, allowing + 'mantiddoc.directives' to be added to the Sphinx extensions configuration. +""" + +import algorithm, aliases, categories, properties, summary + +def setup(app): + """ + Setup the directives when the extension is activated + + Args: + app: The main Sphinx application object + """ + algorithm.setup(app) + aliases.setup(app) + categories.setup(app) + properties.setup(app) + summary.setup(app) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index 1f0de157bf66..e07eb9ce853b 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -1,6 +1,5 @@ from base import BaseDirective - class AlgorithmDirective(BaseDirective): """ @@ -56,5 +55,11 @@ def _get_algorithm_screenshot(self, algorithm_name): def setup(app): + """ + Setup the directives when the extension is activated + + Args: + app: The main Sphinx application object + """ app.add_config_value('mantid_images', 'mantid_images', 'env') app.add_directive('algorithm', AlgorithmDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py index 55895f5ead34..fed689708822 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py @@ -13,7 +13,7 @@ def run(self): """ Called by Sphinx when the ..aliases:: directive is encountered. """ - title = self._make_header(__name__.title()) + title = self._make_header("Aliases") alias = self._get_alias(str(self.arguments[0])) return self._insert_rest(title + alias) @@ -29,4 +29,10 @@ def _get_alias(self, algorithm_name): def setup(app): + """ + Setup the directives when the extension is activated + + Args: + app: The main Sphinx application object + """ app.add_directive('aliases', AliasesDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py index f53b98a090bd..0a4d147a5e43 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -14,7 +14,7 @@ def run(self): Called by Sphinx when the ..categories:: directive is encountered. """ categories = self._get_categories(str(self.arguments[0])) - return self._insert_rest(categories) + return self._insert_rest("\n" + categories) def _get_categories(self, algorithm_name): """ @@ -38,4 +38,10 @@ def _get_categories(self, algorithm_name): def setup(app): + """ + Setup the directives when the extension is activated + + Args: + app: The main Sphinx application object + """ app.add_directive('categories', CategoriesDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py index 64d5de49c748..2e3b67a92e3c 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py @@ -14,7 +14,7 @@ def run(self): Called by Sphinx when the ..properties:: directive is encountered. """ alg_name = str(self.arguments[0]) - title = self._make_header(__name__.title()) + title = self._make_header("Properties") properties_table = self._populate_properties_table(alg_name) return self._insert_rest(title + properties_table) @@ -156,4 +156,10 @@ def _create_property_default_string(self, prop): def setup(app): + """ + Setup the directives when the extension is activated + + Args: + app: The main Sphinx application object + """ app.add_directive('properties', PropertiesDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py index c66fc706a064..22a8f73c695d 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py @@ -13,7 +13,7 @@ def run(self): """ Called by Sphinx when the ..summary:: directive is encountered. """ - title = self._make_header(__name__.title()) + title = self._make_header("Summary") summary = self._get_summary(str(self.arguments[0])) return self._insert_rest(title + summary) @@ -29,4 +29,10 @@ def _get_summary(self, algorithm_name): def setup(app): + """ + Setup the directives when the extension is activated + + Args: + app: The main Sphinx application object + """ app.add_directive('summary', SummaryDirective) From 844db760888c7851322ace3eed1d4bd84ca02b33 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Fri, 23 May 2014 17:46:43 +0100 Subject: [PATCH 19/86] Add supporting code to generate screenshot in algorithm directive Refs #9521 --- Code/Mantid/MantidPlot/mantidplot.py | 8 +- .../mantiddoc/directives/algorithm.py | 76 ++++++++++++++++--- .../sphinxext/mantiddoc/directives/base.py | 3 + .../sphinxext/mantiddoc/tools/__init__.py | 3 + .../sphinxext/mantiddoc/tools/screenshot.py | 38 ++++++++++ 5 files changed, 116 insertions(+), 12 deletions(-) create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/tools/__init__.py create mode 100644 Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py diff --git a/Code/Mantid/MantidPlot/mantidplot.py b/Code/Mantid/MantidPlot/mantidplot.py index 3468089e37f7..663ac35bd24f 100644 --- a/Code/Mantid/MantidPlot/mantidplot.py +++ b/Code/Mantid/MantidPlot/mantidplot.py @@ -915,13 +915,17 @@ def screenshot_to_dir(widget, filename, screenshot_dir): @param filename :: Destination filename for that image @param screenshot_dir :: Directory to put the screenshots into. """ - # Find the widget if handled with a proxy + # Find the widget if handled with a proxy if hasattr(widget, "_getHeldObject"): widget = widget._getHeldObject() if widget is not None: camera = Screenshot() - threadsafe_call(camera.take_picture, widget, os.path.join(screenshot_dir, filename+".png")) + imgpath = os.path.join(screenshot_dir, filename) + threadsafe_call(camera.take_picture, widget, imgpath) + return imgpath + else: + raise RuntimeError("Unable to retrieve widget. Has it been deleted?") #============================================================================= diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index e07eb9ce853b..50382f959978 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -1,4 +1,5 @@ from base import BaseDirective +import os class AlgorithmDirective(BaseDirective): @@ -19,13 +20,15 @@ def run(self): reference = self._make_reference_link(algorithm_name) title = self._make_header(algorithm_name, True) toc = self._make_local_toc() - screenshot = self._get_algorithm_screenshot(algorithm_name) + imgpath = self._create_screenshot(algorithm_name) + screenshot = self._make_screenshot_link(algorithm_name, imgpath) return self._insert_rest(reference + title + screenshot + toc) def _make_reference_link(self, algorithm_name): """ - Outputs a reference to the top of the algorithm's rst file. + Outputs a reference to the top of the algorithm's rst + of the form .. _AlgorithmName: Args: algorithm_name (str): The name of the algorithm to reference. @@ -33,26 +36,80 @@ def _make_reference_link(self, algorithm_name): Returns: str: A ReST formatted reference. """ - return ".. _" + algorithm_name.title() + ":" + "\n" + return ".. _%s:\n" % algorithm_name def _make_local_toc(self): return ".. contents:: Table of Contents\n :local:\n" - def _get_algorithm_screenshot(self, algorithm_name): + def _create_screenshot(self, algorithm_name): """ - Obtains the location of the screenshot for a given algorithm. + Creates a screenshot for the named algorithm in an "images/screenshots" + subdirectory of the currently processed document + + The file will be named "algorithmname_dlg.png", e.g. Rebin_dlg.png Args: algorithm_name (str): The name of the algorithm. Returns: - str: The location of the screenshot for the given algorithm. + str: The full path to the created image + """ + from mantiddoc.tools.screenshot import algorithm_screenshot + + env = self.state.document.settings.env + screenshots_dir = self._screenshot_directory(env) + if not os.path.exists(screenshots_dir): + os.makedirs(screenshots_dir) + + try: + imgpath = algorithm_screenshot(algorithm_name, screenshots_dir) + except Exception, exc: + env.warn(env.docname, "Unable to generate screenshot for '%s' - %s" % (algorithm_name, str(exc))) + imgpath = os.path.join(screenshots_dir, "failed_dialog.png") + + return imgpath + + def _make_screenshot_link(self, algorithm_name, img_path): """ - images_dir = self.state.document.settings.env.config["mantid_images"] - screenshot = images_dir + algorithm_name + ".png" + Outputs an image link with a custom :class: style. The filename is + extracted from the path given and then a link to /images/screenshots/filename.png + is created. Sphinx handles copying the files over to the build directory + and reformatting the links + + Args: + algorithm_name (str): The name of the algorithm that the screenshot represents + img_path (str): The full path as on the filesystem to the image + + Returns: + str: A ReST formatted reference. + """ + format_str = ".. figure:: %s\n"\ + " :class: screenshot\n\n"\ + " %s\n" + + filename = os.path.split(img_path)[1] + path = "/images/screenshots/" + filename caption = "A screenshot of the **" + algorithm_name + "** dialog." - return ".. figure:: " + screenshot + "\n" + " :class: screenshot\n\n " + caption + "\n" + return format_str % (path, caption) + + def _screenshot_directory(self, env): + """ + Returns a full path where the screenshots should be generated. They are + put in a screenshots subdirectory of the main images directory in the source + tree. Sphinx then handles copying them to the final location + + Arguments: + env (BuildEnvironment): Allows access to find the source directory + + Returns: + str: A string containing a path to where the screenshots should be created. This will + be a filesystem path + """ + cfg_dir = env.app.srcdir + return os.path.join(cfg_dir, "images", "screenshots") + +############################################################################################################ def setup(app): """ @@ -61,5 +118,4 @@ def setup(app): Args: app: The main Sphinx application object """ - app.add_config_value('mantid_images', 'mantid_images', 'env') app.add_directive('algorithm', AlgorithmDirective) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py index ac76ddcfeb6f..d3e911ed8b7e 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py @@ -8,6 +8,9 @@ class BaseDirective(Directive): Contains shared functionality for Mantid custom directives. """ + has_content = True + final_argument_whitespace = True + def _make_header(self, name, title=False): """ Makes a ReStructuredText title from the algorithm's name. diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/tools/__init__.py b/Code/Mantid/docs/sphinxext/mantiddoc/tools/__init__.py new file mode 100644 index 000000000000..f5c662ab970a --- /dev/null +++ b/Code/Mantid/docs/sphinxext/mantiddoc/tools/__init__.py @@ -0,0 +1,3 @@ +""" + Subpackage containing tools to help in constructing the documentation +""" diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py b/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py new file mode 100644 index 000000000000..692517d62ec9 --- /dev/null +++ b/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py @@ -0,0 +1,38 @@ +""" + mantiddoc.tools.screenshot + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Provides functions to take a screenshot of a QWidgets. + + It currently assumes that the functions are called within the + MantidPlot Python environment + + :copyright: Copyright 2014 + ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory +""" + +def algorithm_screenshot(name, directory, ext=".png"): + """ + Takes a snapshot of an algorithm dialog and saves it as an image + named "name_dlg.png" + + Args: + name (str): The name of the algorithm + directory (str): An directory path where the image should be saved + ext (str): An optional extension (including the period). Default=.png + + Returns: + str: A full path to the image file + """ + import mantidqtpython as mantidqt + from mantidplot import screenshot_to_dir, threadsafe_call + + iface_mgr = mantidqt.MantidQt.API.InterfaceManager() + # threadsafe_call required for MantidPlot + dlg = threadsafe_call(iface_mgr.createDialogFromName, name, True) + + filename = name + "_dlg" + ext + img_path = screenshot_to_dir(widget=dlg, filename=filename, screenshot_dir=directory) + threadsafe_call(dlg.close) + + return img_path From 67a2c8a142cf1c0cef19674bdc378991a06641e7 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Fri, 23 May 2014 18:02:10 +0100 Subject: [PATCH 20/86] Add gitignore & README for images directory. Refs #9521 --- Code/Mantid/docs/source/images/.gitignore | 1 + Code/Mantid/docs/source/images/README.md | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Code/Mantid/docs/source/images/.gitignore create mode 100644 Code/Mantid/docs/source/images/README.md diff --git a/Code/Mantid/docs/source/images/.gitignore b/Code/Mantid/docs/source/images/.gitignore new file mode 100644 index 000000000000..b15bc0b3837d --- /dev/null +++ b/Code/Mantid/docs/source/images/.gitignore @@ -0,0 +1 @@ +screenshots/* diff --git a/Code/Mantid/docs/source/images/README.md b/Code/Mantid/docs/source/images/README.md new file mode 100644 index 000000000000..74c28ac24b79 --- /dev/null +++ b/Code/Mantid/docs/source/images/README.md @@ -0,0 +1,3 @@ +Contains images for the documentation + +The algorithm screenshots are automatically generated into a `screenshots` subdirectory and this subdirectory has been added to the `.gitignore` in this directory From 22ad91bb4eec29e18f84356bc7c4908a4d52c059 Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Tue, 27 May 2014 09:36:40 +0100 Subject: [PATCH 21/86] Add initial config file. Refs #9521. --- Code/Mantid/docs/conf.py | 116 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 Code/Mantid/docs/conf.py diff --git a/Code/Mantid/docs/conf.py b/Code/Mantid/docs/conf.py new file mode 100644 index 000000000000..d60b94a6d2c7 --- /dev/null +++ b/Code/Mantid/docs/conf.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import sphinx_bootstrap_theme + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +sys.path.insert(0, os.path.abspath('sphinxext/mantiddoc/directives')) + +# -- General configuration ------------------------------------------------ + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.pngmath', + 'sphinx.ext.autodoc', + 'sphinx.ext.intersphinx', + 'summary', + 'aliases', + 'properties', + 'categories', + 'algorithm' +] + +# The location of the root of the Mantid images folder. +mantid_images = "/" + os.path.abspath('_static/images') + "/" + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'MantidProject' +copyright = u'2014, Mantid' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.01' +# The full version, including alpha/beta/rc tags. +release = '0.01' + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'bootstrap' + +# Theme-specific options to customize the look and feel of a theme. +# We config the bootstrap settings here, and apply CSS changes in +# custom.css rather than here. +html_theme_options = { + # Navigation bar title. + 'navbar_title': "mantidproject", + # Tab name for entire site. + 'navbar_site_name': "Mantid", + # Add links to the nav bar. Second param of tuple is true to create absolute url. + 'navbar_links': [ + ("Home", "/"), + ("Download", "http://download.mantidproject.org", True), + ("Documentation", "/documentation"), + ("Contact Us", "/contact-us"), + ], + # Do not show the "Show source" button. + 'source_link_position': "no", + # Remove the local TOC from the nav bar + 'navbar_pagenav': False, + # Hide the next/previous in the nav bar. + 'navbar_sidebarrel': False, + # Use the latest version. + 'bootstrap_version': "3", + # Ensure the nav bar always stays on top of page. + 'navbar_fixed_top': "true", +} + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +html_use_smartypants = True + +# Hide the Sphinx usage as we reference it on github instead. +html_show_sphinx = False + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +html_show_copyright = True From 447cfb33636868a16cf55893373bc4e694ee7f28 Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Tue, 27 May 2014 09:37:22 +0100 Subject: [PATCH 22/86] Add custom styles to sphinx-bootstrap theme. Refs #9521. --- Code/Mantid/docs/_static/custom.css | 85 +++++++++++++++++++++++++ Code/Mantid/docs/_templates/layout.html | 3 + 2 files changed, 88 insertions(+) create mode 100644 Code/Mantid/docs/_static/custom.css create mode 100644 Code/Mantid/docs/_templates/layout.html diff --git a/Code/Mantid/docs/_static/custom.css b/Code/Mantid/docs/_static/custom.css new file mode 100644 index 000000000000..b21258686d13 --- /dev/null +++ b/Code/Mantid/docs/_static/custom.css @@ -0,0 +1,85 @@ +/*-------------------- $GENERAL --------------------*/ + +#table-of-contents { border: none; } + +/*-------------------- $NAV --------------------*/ + +.navbar-version { display: none; } + +/*-------------------- $LINKS --------------------*/ + +a { + color: #009933; + text-decoration: none; +} + +a:hover { + color: #009933; + text-decoration: underline; +} + +/*-------------------- $SPACING --------------------*/ + +body { font-size: 1.6em; } /* 16px */ +dl dd { margin: .5em 0 .5em 1.6em; } +h1,h2 { margin-bottom: .5em; } + +/*-------------------- $IMAGES --------------------*/ + +.figure { + border: 1px solid #CCC; + padding: 10px 10px 0 10px; + background-color: whiteSmoke; + text-align: center; + width: 300px; + float: right; +} + +.screenshot { + height: 240px; + padding-bottom: 1em; +} + +.figure { margin: 0; } + +/*-------------------- $TABLES --------------------*/ + +table { + width: 100%; + border-collapse: collapse; + margin: 1.6em 0; +} + +/* Zebra striping */ +tr:nth-of-type(odd) { background: white; } + +tr:hover { background-color: whiteSmoke; } + +th { + background: #E0DFDE; + font-size: 1.3em; +} + +td, th { + padding: .75em; + border: 1px solid #CCC; + text-align: left; +} + +/*-------------------- $MEDIA-QUERIES --------------------*/ + +@media (min-width: 1200px) { + #table-of-contents { + width: auto; + max-width: 40%; + } +} + +/* - Hide the screenshot image as it does not have a relevant header. TOC should be first. + * - Hide the properties table as it's contents are too large for mobile display. + * - Hide properties title since the table is also hidden. */ +@media (max-width: 767px) { + .figure, .table, #properties { + display: none; + } +} diff --git a/Code/Mantid/docs/_templates/layout.html b/Code/Mantid/docs/_templates/layout.html new file mode 100644 index 000000000000..e4f5bcfc89aa --- /dev/null +++ b/Code/Mantid/docs/_templates/layout.html @@ -0,0 +1,3 @@ +{% extends "!layout.html" %} +{# Custom CSS overrides #} +{% set bootswatch_css_custom = ['_static/custom.css'] %} From d8c9f62fffe483b422b21a9032e27a5984cc82be Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Tue, 27 May 2014 09:37:44 +0100 Subject: [PATCH 23/86] Create empty globaltoc template to remove button in nav. Refs #9521. --- Code/Mantid/docs/_templates/globaltoc.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Code/Mantid/docs/_templates/globaltoc.html diff --git a/Code/Mantid/docs/_templates/globaltoc.html b/Code/Mantid/docs/_templates/globaltoc.html new file mode 100644 index 000000000000..e69de29bb2d1 From 98c9929576b2190928e93f68414bb0a8e6f310c1 Mon Sep 17 00:00:00 2001 From: Jay Rainey Date: Tue, 27 May 2014 09:40:13 +0100 Subject: [PATCH 24/86] Moved static and template folder to source. Refs #9521. --- Code/Mantid/docs/{ => source}/_static/custom.css | 0 Code/Mantid/docs/{ => source}/_templates/globaltoc.html | 0 Code/Mantid/docs/{ => source}/_templates/layout.html | 0 Code/Mantid/docs/{ => source}/conf.py | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) rename Code/Mantid/docs/{ => source}/_static/custom.css (100%) rename Code/Mantid/docs/{ => source}/_templates/globaltoc.html (100%) rename Code/Mantid/docs/{ => source}/_templates/layout.html (100%) rename Code/Mantid/docs/{ => source}/conf.py (98%) diff --git a/Code/Mantid/docs/_static/custom.css b/Code/Mantid/docs/source/_static/custom.css similarity index 100% rename from Code/Mantid/docs/_static/custom.css rename to Code/Mantid/docs/source/_static/custom.css diff --git a/Code/Mantid/docs/_templates/globaltoc.html b/Code/Mantid/docs/source/_templates/globaltoc.html similarity index 100% rename from Code/Mantid/docs/_templates/globaltoc.html rename to Code/Mantid/docs/source/_templates/globaltoc.html diff --git a/Code/Mantid/docs/_templates/layout.html b/Code/Mantid/docs/source/_templates/layout.html similarity index 100% rename from Code/Mantid/docs/_templates/layout.html rename to Code/Mantid/docs/source/_templates/layout.html diff --git a/Code/Mantid/docs/conf.py b/Code/Mantid/docs/source/conf.py similarity index 98% rename from Code/Mantid/docs/conf.py rename to Code/Mantid/docs/source/conf.py index d60b94a6d2c7..18bc986720b8 100644 --- a/Code/Mantid/docs/conf.py +++ b/Code/Mantid/docs/source/conf.py @@ -9,7 +9,7 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('sphinxext/mantiddoc/directives')) +sys.path.insert(0, os.path.abspath('../sphinxext/mantiddoc/directives')) # -- General configuration ------------------------------------------------ From 8af1ffe4b1df31b2bf21333223b428e0745a08d0 Mon Sep 17 00:00:00 2001 From: Wenduo Zhou Date: Tue, 27 May 2014 10:08:16 -0400 Subject: [PATCH 25/86] Modifed default value of properties. Refs #6999. --- .../MantidAlgorithms/GenerateEventsFilter.h | 4 ++-- .../Algorithms/src/GenerateEventsFilter.cpp | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/GenerateEventsFilter.h b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/GenerateEventsFilter.h index 7b12d7f23dfa..62ab4f661566 100644 --- a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/GenerateEventsFilter.h +++ b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/GenerateEventsFilter.h @@ -89,8 +89,8 @@ namespace Algorithms void processSingleValueFilter(double minvalue, double maxvalue, bool filterincrease, bool filterdecrease); - void processMultipleValueFilters(double minvalue, double maxvalue, - bool filterincrease, bool filterdecrease); + void processMultipleValueFilters(double minvalue, double valueinterval, double maxvalue, + bool filterincrease, bool filterdecrease); void makeFilterByValue(Kernel::TimeSplitterType& split, double min, double max, double TimeTolerance, bool centre, bool filterIncrease, bool filterDecrease, Kernel::DateAndTime startTime, Kernel::DateAndTime stopTime, diff --git a/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp b/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp index 6bf4de2af6bf..f41d4cc5035c 100644 --- a/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp @@ -133,8 +133,8 @@ namespace Algorithms "Events at or after this time are filtered out."); // Split by time (only) in steps - declareProperty("TimeInterval", -1.0, - "Length of the time splices if filtered in time only."); + declareProperty("TimeInterval", EMPTY_DBL(), + "Length of the time splices if filtered in time only."); setPropertySettings("TimeInterval", new VisibleWhenProperty("LogName", IS_EQUAL_TO, "")); @@ -440,20 +440,26 @@ namespace Algorithms { double timeinterval = this->getProperty("TimeInterval"); + bool singleslot = false; + if (timeinterval == EMPTY_DBL()) singleslot = true; + // Progress int64_t totaltime = m_stopTime.totalNanoseconds()-m_startTime.totalNanoseconds(); - int64_t timeslot = 0; - if (timeinterval <= 0.0) + if (singleslot) { int wsindex = 0; + // Default and thus just one interval std::stringstream ss; ss << "Time Interval From " << m_startTime << " to " << m_stopTime; + addNewTimeFilterSplitter(m_startTime, m_stopTime, wsindex, ss.str()); } else { + int64_t timeslot = 0; + // Explicitly N time intervals int64_t deltatime_ns = static_cast(timeinterval*m_timeUnitConvertFactorToNS); @@ -590,7 +596,7 @@ namespace Algorithms else { // Generate filters for a series of log value - processMultipleValueFilters(minvalue, maxvalue, filterIncrease, filterDecrease); + processMultipleValueFilters(minvalue, deltaValue, maxvalue, filterIncrease, filterDecrease); } } else @@ -699,12 +705,11 @@ namespace Algorithms * @param filterincrease :: if true, log value in the increasing curve should be included; * @param filterdecrease :: if true, log value in the decreasing curve should be included; */ - void GenerateEventsFilter::processMultipleValueFilters(double minvalue, double maxvalue, + void GenerateEventsFilter::processMultipleValueFilters(double minvalue, double valueinterval, double maxvalue, bool filterincrease, bool filterdecrease) { // Read more input - double valueinterval = this->getProperty("LogValueInterval"); if (valueinterval <= 0) throw std::invalid_argument("Multiple values filter must have LogValueInterval larger than ZERO."); double valuetolerance = this->getProperty("LogValueTolerance"); From a2c37bbd947a00ce414e7f005e4d2fd3cb11a04c Mon Sep 17 00:00:00 2001 From: Wenduo Zhou Date: Tue, 27 May 2014 10:20:01 -0400 Subject: [PATCH 26/86] Fixed doxygen error. Refs #6999. --- Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp b/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp index f41d4cc5035c..50330ee08222 100644 --- a/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GenerateEventsFilter.cpp @@ -701,6 +701,7 @@ namespace Algorithms //---------------------------------------------------------------------------------------------- /** Generate filters from multiple values * @param minvalue :: minimum value of the allowed log value; + * @param valueinterval :: step of the log value for a series of filter * @param maxvalue :: maximum value of the allowed log value; * @param filterincrease :: if true, log value in the increasing curve should be included; * @param filterdecrease :: if true, log value in the decreasing curve should be included; From dfae6838887624deca01b217b8ef14bb32f240ca Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 27 May 2014 17:48:50 +0100 Subject: [PATCH 27/86] Add in html logo and tweak css Refs #9521 --- Code/Mantid/docs/source/_static/custom.css | 5 +++++ Code/Mantid/docs/source/conf.py | 16 +++++----------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Code/Mantid/docs/source/_static/custom.css b/Code/Mantid/docs/source/_static/custom.css index b21258686d13..1ca764fa6eab 100644 --- a/Code/Mantid/docs/source/_static/custom.css +++ b/Code/Mantid/docs/source/_static/custom.css @@ -5,6 +5,11 @@ /*-------------------- $NAV --------------------*/ .navbar-version { display: none; } +.navbar-brand { + margin-bottom: 15px; + width: 190px; + height: 100px; +} /*-------------------- $LINKS --------------------*/ diff --git a/Code/Mantid/docs/source/conf.py b/Code/Mantid/docs/source/conf.py index 18bc986720b8..dc8828ce39c6 100644 --- a/Code/Mantid/docs/source/conf.py +++ b/Code/Mantid/docs/source/conf.py @@ -9,7 +9,7 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('../sphinxext/mantiddoc/directives')) +sys.path.insert(0, os.path.abspath('../sphinxext')) # -- General configuration ------------------------------------------------ @@ -20,16 +20,10 @@ 'sphinx.ext.pngmath', 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', - 'summary', - 'aliases', - 'properties', - 'categories', - 'algorithm' + 'sphinx.ext.doctest', + 'mantiddoc.directives' ] -# The location of the root of the Mantid images folder. -mantid_images = "/" + os.path.abspath('_static/images') + "/" - # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -66,7 +60,7 @@ # custom.css rather than here. html_theme_options = { # Navigation bar title. - 'navbar_title': "mantidproject", + 'navbar_title': " ", # Tab name for entire site. 'navbar_site_name': "Mantid", # Add links to the nav bar. Second param of tuple is true to create absolute url. @@ -93,7 +87,7 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. -#html_logo = None +html_logo = os.path.relpath('../../Images/Mantid_Logo_Transparent.png') # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, From ca642c60af0897107d209556799f34e4744a067d Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 27 May 2014 17:50:25 +0100 Subject: [PATCH 28/86] Require versioned algorithm files Implements a test for a simple redirect system to the highest version Refs #9521 --- .../mantiddoc/directives/algorithm.py | 35 ++- .../sphinxext/mantiddoc/directives/aliases.py | 9 +- .../sphinxext/mantiddoc/directives/base.py | 34 ++- .../mantiddoc/directives/categories.py | 279 ++++++++++++++++-- .../mantiddoc/directives/properties.py | 14 +- .../sphinxext/mantiddoc/directives/summary.py | 9 +- .../sphinxext/mantiddoc/tools/screenshot.py | 9 +- 7 files changed, 333 insertions(+), 56 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index 50382f959978..26726079b1b3 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -1,6 +1,8 @@ from base import BaseDirective import os +REDIRECT_TEMPLATE = "redirect.html" + class AlgorithmDirective(BaseDirective): """ @@ -8,19 +10,19 @@ class AlgorithmDirective(BaseDirective): and a screenshot of the algorithm to an rst file. """ - required_arguments, optional_arguments = 1, 0 + required_arguments, optional_arguments = 0, 0 def run(self): """ Called by Sphinx when the ..algorithm:: directive is encountered """ - algorithm_name = str(self.arguments[0]) + algorithm_name, version = self._algorithm_name_and_version() # Seperate methods for each unique piece of functionality. reference = self._make_reference_link(algorithm_name) title = self._make_header(algorithm_name, True) toc = self._make_local_toc() - imgpath = self._create_screenshot(algorithm_name) + imgpath = self._create_screenshot(algorithm_name, version) screenshot = self._make_screenshot_link(algorithm_name, imgpath) return self._insert_rest(reference + title + screenshot + toc) @@ -36,20 +38,21 @@ def _make_reference_link(self, algorithm_name): Returns: str: A ReST formatted reference. """ - return ".. _%s:\n" % algorithm_name + return ".. _algorithm|%s:\n" % algorithm_name def _make_local_toc(self): return ".. contents:: Table of Contents\n :local:\n" - def _create_screenshot(self, algorithm_name): + def _create_screenshot(self, algorithm_name, version): """ Creates a screenshot for the named algorithm in an "images/screenshots" subdirectory of the currently processed document - The file will be named "algorithmname_dlg.png", e.g. Rebin_dlg.png + The file will be named "algorithmname-vX_dlg.png", e.g. Rebin-v1_dlg.png Args: algorithm_name (str): The name of the algorithm. + version (int): The version of the algorithm Returns: str: The full path to the created image @@ -62,7 +65,7 @@ def _create_screenshot(self, algorithm_name): os.makedirs(screenshots_dir) try: - imgpath = algorithm_screenshot(algorithm_name, screenshots_dir) + imgpath = algorithm_screenshot(algorithm_name, screenshots_dir, version=version) except Exception, exc: env.warn(env.docname, "Unable to generate screenshot for '%s' - %s" % (algorithm_name, str(exc))) imgpath = os.path.join(screenshots_dir, "failed_dialog.png") @@ -85,7 +88,7 @@ def _make_screenshot_link(self, algorithm_name, img_path): """ format_str = ".. figure:: %s\n"\ " :class: screenshot\n\n"\ - " %s\n" + " %s\n\n" filename = os.path.split(img_path)[1] path = "/images/screenshots/" + filename @@ -111,6 +114,18 @@ def _screenshot_directory(self, env): ############################################################################################################ +def html_collect_pages(app): + """ + Write out unversioned algorithm pages that redirect to the highest version of the algorithm + """ + name = "algorithms/Rebin" + context = {"name" : "Rebin", "target" : "Rebin-v1.html"} + template = REDIRECT_TEMPLATE + + return [(name, context, template)] + +############################################################################################################ + def setup(app): """ Setup the directives when the extension is activated @@ -119,3 +134,7 @@ def setup(app): app: The main Sphinx application object """ app.add_directive('algorithm', AlgorithmDirective) + + # connect event html collection to handler + app.connect("html-collect-pages", html_collect_pages) + diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py index fed689708822..494181945a7c 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py @@ -7,24 +7,25 @@ class AliasesDirective(BaseDirective): Obtains the aliases for a given algorithm based on it's name. """ - required_arguments, optional_arguments = 1, 0 + required_arguments, optional_arguments = 0, 0 def run(self): """ Called by Sphinx when the ..aliases:: directive is encountered. """ title = self._make_header("Aliases") - alias = self._get_alias(str(self.arguments[0])) + alias = self._get_alias() return self._insert_rest(title + alias) - def _get_alias(self, algorithm_name): + def _get_alias(self): """ Return the alias for the named algorithm. Args: algorithm_name (str): The name of the algorithm to get the alias for. """ - alg = self._create_mantid_algorithm(algorithm_name) + name, version = self._algorithm_name_and_version() + alg = self._create_mantid_algorithm(name, version) return "This algorithm is also known as: " + "**" + alg.alias() + "**" diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py index d3e911ed8b7e..349b1fede17b 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py @@ -1,6 +1,6 @@ from docutils import statemachine from docutils.parsers.rst import Directive - +import re class BaseDirective(Directive): @@ -11,21 +11,40 @@ class BaseDirective(Directive): has_content = True final_argument_whitespace = True - def _make_header(self, name, title=False): + alg_docname_re = re.compile(r'^([A-Z][a-zA-Z0-9]+)-v([0-9][0-9]*)$') + + def _algorithm_name_and_version(self): + """ + Returns the name and version of an algorithm based on the name of the + document. The expected name of the document is "AlgorithmName-v?", which + is the name of the file with the extension removed + """ + env = self.state.document.settings.env + # env.docname includes path, using forward slashes, from root of documentation directory + docname = env.docname.split("/")[-1] + match = self.alg_docname_re.match(docname) + if not match or len(match.groups()) != 2: + raise RuntimeError("Document filename '%s.rst' does not match the expected format: AlgorithmName-vX.rst" % docname) + + grps = match.groups() + return (str(grps[0]), int(grps[1])) + + def _make_header(self, name, pagetitle=False): """ Makes a ReStructuredText title from the algorithm's name. Args: algorithm_name (str): The name of the algorithm to use for the title. - title (bool): If True, line is inserted above & below algorithm name. + pagetitle (bool): If True, line is inserted above & below algorithm name. Returns: str: ReST formatted header with algorithm_name as content. """ - line = "\n" + "-" * len(name) + "\n" - if title: + if pagetitle: + line = "\n" + "=" * len(name) + "\n" return line + name + line else: + line = "\n" + "-" * len(name) + "\n" return name + line def _insert_rest(self, text): @@ -41,17 +60,18 @@ def _insert_rest(self, text): self.state_machine.insert_input(statemachine.string2lines(text), "") return [] - def _create_mantid_algorithm(self, algorithm_name): + def _create_mantid_algorithm(self, algorithm_name, version): """ Create and initializes a Mantid algorithm. Args: algorithm_name (str): The name of the algorithm to use for the title. + version (int): Version of the algorithm to create Returns: algorithm: An instance of a Mantid algorithm. """ from mantid.api import AlgorithmManager - alg = AlgorithmManager.createUnmanaged(algorithm_name) + alg = AlgorithmManager.createUnmanaged(algorithm_name, version) alg.initialize() return alg diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py index 0a4d147a5e43..30deab430ec8 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -1,47 +1,282 @@ +""" + Provides directives for dealing with category pages. + + While parsing the directives a list of the categories and associated pages/subcategories + is tracked. When the final set of html pages is collected, a processing function + creates "index" pages that lists the contents of each category. The display of each + "index" page is controlled by a jinja2 template. +""" from base import BaseDirective +CATEGORY_INDEX_TEMPLATE = "category.html" +# relative to the "root" directory +CATEGORIES_HTML_DIR = "categories" -class CategoriesDirective(BaseDirective): +class LinkItem(object): + """ + Defines a linkable item with a name and html reference + """ + # Name displayed on listing page + name = None + # html link + link = None + + def __init__(self, name, env): + """ + Arguments: + env (Sphinx.BuildEnvironment): The current environment processing object + """ + self.name = str(name) + + rel_path = env.docname # no suffix + # Assumes the link is for the current document and that the + # page that will use this reference is in a single + # subdirectory from root + self.link = "../%s.html" % rel_path + + def __eq__(self, other): + """ + Define comparison for two objects as the comparison of their names + + Arguments: + other (PageRef): Another PageRef object to compare + """ + return self.name == other.name + + def __hash__(self): + return hash(self.name) + + def __repr__(self): + return self.name + + def html_link(self): + """ + Returns a link for use as a href to refer to this document from a + categories page. It assumes that the category pages are in a subdirectory + of the root and that the item to be referenced is in the algorithms directory + under the root. + + Returns: + str: A string containing the link + """ + return self.link +# endclass +class PageRef(LinkItem): """ - Obtains the categories for a given algorithm based on it's name. + Store details of a single page reference """ - required_arguments, optional_arguments = 1, 0 + def __init__(self, name, env): + super(PageRef, self).__init__(name, env) + +#endclass + +class Category(LinkItem): + """ + Store information about a single category + """ + # Collection of PageRef objects that link to members of the category + pages = None + # Collection of PageRef objects that form subcategories of this category + subcategories = None + + def __init__(self, name, env): + super(Category, self).__init__(name, env) + + # override default link + self.link = "../categories/%s.html" % name + self.pages = set([]) + self.subcategories = set([]) + +#endclass + +class CategoriesDirective(BaseDirective): + """ + Records the page as part of the given categories. Index pages for each + category are then automatically created after all pages are collected + together. + + Subcategories can be given using the "\\" separator, e.g. Algorithms\\Transforms + """ + + # requires at least 1 category + required_arguments = 1 + # it can be in many categories and we put an arbitrary upper limit here + optional_arguments = 25 def run(self): """ - Called by Sphinx when the ..categories:: directive is encountered. + Called by Sphinx when the defined directive is encountered. """ - categories = self._get_categories(str(self.arguments[0])) - return self._insert_rest("\n" + categories) + categories = self._get_categories_list() + display_name = self._get_display_name() + links = self._create_links_and_track(display_name, categories) + + return self._insert_rest("\n" + links) - def _get_categories(self, algorithm_name): + def _get_categories_list(self): """ - Return the categories for the named algorithm. + Returns a list of the category strings + + Returns: + list: A list of strings containing the required categories + """ + # Simply return all of the arguments as strings + return self.arguments + + def _get_display_name(self): + """ + Returns the name of the item as it should appear in the category + """ + env = self.state.document.settings.env + # env.docname returns relative path from doc root. Use name after last "/" separator + return env.docname.split("/")[-1] + + def _create_links_and_track(self, page_name, category_list): + """ + Return the reST text required to link to the given + categories. As the categories are parsed they are + stored within the current environment for use in the + "html_collect_pages" function. Args: - algorithm_name (str): The name of the algorithm. + page_name (str): Name to use to refer to this page on the category index page + category_list (list): List of category strings + + Returns: + str: A string of reST that will define the links """ - alg = self._create_mantid_algorithm(algorithm_name) + env = self.state.document.settings.env + if not hasattr(env, "categories"): + env.categories = {} + + link_rst = "" + ncategs = 0 + for item in category_list: + if r"\\" in item: + categs = item.split(r"\\") + else: + categs = [item] + # endif - # Create a list containing each category. - categories = alg.category().split("\\") + parent = None + for index, categ_name in enumerate(categs): + if categ_name not in env.categories: + category = Category(categ_name, env) + env.categories[categ_name] = category + else: + category = env.categories[categ_name] + #endif - if len(categories) >= 2: - # Add a cross reference for each catagory. - links = (":ref:`%s` | " * len(categories)) % tuple(categories) - # Remove last three characters to remove last | - return ("`Categories: `_ " + links)[:-3] + category.pages.add(PageRef(page_name, env)) + if index > 0: # first is never a child + parent.subcategories.add(Category(categ_name, env)) + #endif + + link_rst += "`%s <../%s/%s.html>`_ | " % (categ_name, CATEGORIES_HTML_DIR, categ_name) + ncategs += 1 + parent = category + # endfor + # endfor + + link_rst = "**%s**: " + link_rst.rstrip(" | ") # remove final separator + if ncategs == 1: + link_rst = link_rst % "Category" else: - return "`Category: `_ :ref:`%s`" % (categories) + link_rst = link_rst % "Categories" + #endif + return link_rst + #end def -def setup(app): +#--------------------------------------------------------------------------------- + +class AlgorithmCategoryDirective(CategoriesDirective): """ - Setup the directives when the extension is activated + Supports the "algm_categories" directive that takes a single + argument and pulls the categories from an algorithm object. - Args: - app: The main Sphinx application object + In addition to adding the named page to the requested category, it + also appends it to the "Algorithms" category """ + # requires at least 1 argument + required_arguments = 0 + # no other arguments + optional_arguments = 0 + + def _get_categories_list(self): + """ + Returns a list of the category strings + + Returns: + list: A list of strings containing the required categories + """ + category_list = ["Algorithms"] + algname, version = self._algorithm_name_and_version() + alg_cats = self._create_mantid_algorithm(algname, version).categories() + for cat in alg_cats: + # double up the category separators so they are not treated as escape characters + category_list.append(cat.replace("\\", "\\\\")) + + return category_list + + def _get_display_name(self): + """ + Returns the name of the item as it should appear in the category + """ + return self._algorithm_name_and_version()[0] + +#--------------------------------------------------------------------------------- + +def html_collect_pages(app): + """ + Callback for the 'html-collect-pages' Sphinx event. Adds category + pages + a global Categories.html page that lists the pages included. + + Function returns an iterable (pagename, context, html_template), + where context is a dictionary defining the content that will fill the template + + Arguments: + app: A Sphinx application object + """ + if not hasattr(app.builder.env, "categories"): + return # nothing to do + + for name, context, template in create_category_pages(app): + yield (name, context, template) +# enddef + +def create_category_pages(app): + """ + Returns an iterable of (category_name, context, "category.html") + + Arguments: + app: A Sphinx application object + """ + env = app.builder.env + + # jinja2 html template + template = CATEGORY_INDEX_TEMPLATE + + categories = env.categories + for name, category in categories.iteritems(): + context = {} + context["title"] = category.name + # sort subcategories & pages by first letter + context["subcategories"] = sorted(category.subcategories, key = lambda x: x.name[0]) + context["pages"] = sorted(category.pages, key = lambda x: x.name[0]) + + yield (CATEGORIES_HTML_DIR + "/" + name, context, template) +# enddef + +#------------------------------------------------------------------------------ +def setup(app): + # Add categories directive app.add_directive('categories', CategoriesDirective) + # Add algm_categories directive + app.add_directive('algm_categories', AlgorithmCategoryDirective) + + # connect event html collection to handler + app.connect("html-collect-pages", html_collect_pages) + diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py index 2e3b67a92e3c..440e11d4bd7a 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py @@ -7,25 +7,23 @@ class PropertiesDirective(BaseDirective): Outputs the given algorithm's properties into a ReST formatted table. """ # Accept one required argument and no optional arguments. - required_arguments, optional_arguments = 1, 0 + required_arguments, optional_arguments = 0, 0 def run(self): """ Called by Sphinx when the ..properties:: directive is encountered. """ - alg_name = str(self.arguments[0]) title = self._make_header("Properties") - properties_table = self._populate_properties_table(alg_name) + properties_table = self._populate_properties_table() return self._insert_rest(title + properties_table) - def _populate_properties_table(self, algorithm_name): + def _populate_properties_table(self): """ Populates the ReST table with algorithm properties. - - Args: - algorithm_name (str): The name of the algorithm. """ - alg = self._create_mantid_algorithm(algorithm_name) + name, version = self._algorithm_name_and_version() + + alg = self._create_mantid_algorithm(name, version) alg_properties = alg.getProperties() # Stores each property of the algorithm in a tuple. diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py index 22a8f73c695d..2432a2fc4076 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py @@ -7,24 +7,25 @@ class SummaryDirective(BaseDirective): Obtains the summary for a given algorithm based on it's name. """ - required_arguments, optional_arguments = 1, 0 + required_arguments, optional_arguments = 0, 0 def run(self): """ Called by Sphinx when the ..summary:: directive is encountered. """ title = self._make_header("Summary") - summary = self._get_summary(str(self.arguments[0])) + summary = self._get_summary() return self._insert_rest(title + summary) - def _get_summary(self, algorithm_name): + def _get_summary(self): """ Return the summary for the named algorithm. Args: algorithm_name (str): The name of the algorithm. """ - alg = self._create_mantid_algorithm(algorithm_name) + name, version = self._algorithm_name_and_version() + alg = self._create_mantid_algorithm(name, version) return alg.getWikiSummary() diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py b/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py index 692517d62ec9..67dd69a47775 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py @@ -11,7 +11,7 @@ ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory """ -def algorithm_screenshot(name, directory, ext=".png"): +def algorithm_screenshot(name, directory, version = -1, ext = ".png"): """ Takes a snapshot of an algorithm dialog and saves it as an image named "name_dlg.png" @@ -19,6 +19,7 @@ def algorithm_screenshot(name, directory, ext=".png"): Args: name (str): The name of the algorithm directory (str): An directory path where the image should be saved + version (str): A version of the algorithm to use (default=latest) ext (str): An optional extension (including the period). Default=.png Returns: @@ -29,9 +30,11 @@ def algorithm_screenshot(name, directory, ext=".png"): iface_mgr = mantidqt.MantidQt.API.InterfaceManager() # threadsafe_call required for MantidPlot - dlg = threadsafe_call(iface_mgr.createDialogFromName, name, True) + dlg = threadsafe_call(iface_mgr.createDialogFromName, name, True, None) + + suffix = ("-v%d" % version) if version != -1 else "" + filename = "%s%s_dlg%s" % (name, suffix, ext) - filename = name + "_dlg" + ext img_path = screenshot_to_dir(widget=dlg, filename=filename, screenshot_dir=directory) threadsafe_call(dlg.close) From db26bfe12078e0fad461cb7e0b9e3702223f3879 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 27 May 2014 17:54:28 +0100 Subject: [PATCH 29/86] Protect screenshot capture if the GUI is not present. Refs #9521 --- Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py b/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py index 67dd69a47775..8d57701f19aa 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/tools/screenshot.py @@ -25,6 +25,10 @@ def algorithm_screenshot(name, directory, version = -1, ext = ".png"): Returns: str: A full path to the image file """ + import mantid + if not mantid.__gui__: + return "NoGUI-ImageNotGenerated.png" + import mantidqtpython as mantidqt from mantidplot import screenshot_to_dir, threadsafe_call From 72808a0405c0eb370d1bd6f58810e3978c7d0a6d Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 27 May 2014 21:16:59 +0100 Subject: [PATCH 30/86] Forget to add category & redirect templates Refs #9521 --- .../docs/source/_templates/category.html | 42 +++++++++++++++++++ .../docs/source/_templates/redirect.html | 15 +++++++ 2 files changed, 57 insertions(+) create mode 100644 Code/Mantid/docs/source/_templates/category.html create mode 100644 Code/Mantid/docs/source/_templates/redirect.html diff --git a/Code/Mantid/docs/source/_templates/category.html b/Code/Mantid/docs/source/_templates/category.html new file mode 100644 index 000000000000..c78f7644003b --- /dev/null +++ b/Code/Mantid/docs/source/_templates/category.html @@ -0,0 +1,42 @@ +{# Import the theme's layout. #} +{% extends "!layout.html" %} + +{% macro split_to_three_columns(item_list) -%} +{# Split list into 3 columns #} +{# Uses bootstrap col-md-4 for each column along with slice(3) to divide input list #} +{# It currently assumes the items in the list are mantiddoc.directives.categories.PageRef classes #} +
+ {%- for column in item_list|slice(3) %} +
+ {%- set first = True %} + {%- for item in column %} + {%- if (item.name[0] != section or first) %} + {%- set section = item.name[0] %} + {%- if first != true %} + + {%- endif %} +

{{ section }}

+
    + {%- endif %} +
  • {{ item.name }}
  • + {%- set first = False -%} + {%- endfor -%} +
+
+ {%- endfor -%} +
+{%- endmacro %} + +{%- block body -%} +

Category: {{ title }}

+ {% if subcategories %} +
+

Subcategories

+ {{ split_to_three_columns(subcategories) }} +
+ {% endif %} + +

Pages

+ {{ split_to_three_columns(pages) }} + +{%- endblock -%} \ No newline at end of file diff --git a/Code/Mantid/docs/source/_templates/redirect.html b/Code/Mantid/docs/source/_templates/redirect.html new file mode 100644 index 000000000000..e73ecf33d325 --- /dev/null +++ b/Code/Mantid/docs/source/_templates/redirect.html @@ -0,0 +1,15 @@ + + + + + + + Page Redirection + + + + If you are not redirected automatically, follow the link to {{ name }} + + \ No newline at end of file From a082fb2675541f88b2d77051c72291136fcc6260 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 27 May 2014 21:33:55 +0100 Subject: [PATCH 31/86] Track highest versions of algorithms encountered Redirect pages are created that point from a page using the plain name to the highest version page Refs #9521 --- .../mantiddoc/directives/algorithm.py | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index 26726079b1b3..c29a49b32775 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -17,6 +17,7 @@ def run(self): Called by Sphinx when the ..algorithm:: directive is encountered """ algorithm_name, version = self._algorithm_name_and_version() + self._track_algorithm(algorithm_name, version) # Seperate methods for each unique piece of functionality. reference = self._make_reference_link(algorithm_name) @@ -27,6 +28,26 @@ def run(self): return self._insert_rest(reference + title + screenshot + toc) + def _track_algorithm(self, name, version): + """ + Keep a track of the highest versions of algorithms encountered + + Arguments: + name (str): Name of the algorithm + version (int): Integer version number + """ + env = self.state.document.settings.env + if not hasattr(env, "algorithm"): + env.algorithms = {} + #endif + algorithms = env.algorithms + if name in algorithms: + prev_version = algorithms[name][1] + if version > prev_version: + algorithms[name][1] = version + else: + algorithms[name] = (name, version) + def _make_reference_link(self, algorithm_name): """ Outputs a reference to the top of the algorithm's rst @@ -118,11 +139,18 @@ def html_collect_pages(app): """ Write out unversioned algorithm pages that redirect to the highest version of the algorithm """ - name = "algorithms/Rebin" - context = {"name" : "Rebin", "target" : "Rebin-v1.html"} + env = app.builder.env + if not hasattr(env, "algorithms"): + return # nothing to do + template = REDIRECT_TEMPLATE - return [(name, context, template)] + algorithms = env.algorithms + for name, highest_version in algorithms.itervalues(): + redirect_pagename = "algorithms/%s" % name + target = "%s-v%d.html" % (name, highest_version) + context = {"name" : name, "target" : target} + yield (redirect_pagename, context, template) ############################################################################################################ From 26b4db4ce226983487b3f878eee3ea1b92a2b0c5 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 09:21:18 +0100 Subject: [PATCH 32/86] Purge category information before parsing document. Refs #9521 --- .../sphinxext/mantiddoc/directives/base.py | 36 ++++++++++---- .../mantiddoc/directives/categories.py | 49 +++++++++++++++---- 2 files changed, 65 insertions(+), 20 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py index 349b1fede17b..c080f4aeb4fa 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py @@ -2,6 +2,31 @@ from docutils.parsers.rst import Directive import re +ALG_DOCNAME_RE = re.compile(r'^([A-Z][a-zA-Z0-9]+)-v([0-9][0-9]*)$') + +#---------------------------------------------------------------------------------------- +def algorithm_name_and_version(docname): + """ + Returns the name and version of an algorithm based on the name of the + document supplied. The expected name of the document is "AlgorithmName-v?", which + is the name of the file with the extension removed + + Arguments: + docname (str): The name of the document as supplied by docutils. Can contain slashes to indicate a path + + Returns: + tuple: A tuple containing two elements (name, version) + """ + # docname includes path, using forward slashes, from root of documentation directory + docname = docname.split("/")[-1] + match = ALG_DOCNAME_RE.match(docname) + if not match or len(match.groups()) != 2: + raise RuntimeError("Document filename '%s.rst' does not match the expected format: AlgorithmName-vX.rst" % docname) + + grps = match.groups() + return (str(grps[0]), int(grps[1])) + +#---------------------------------------------------------------------------------------- class BaseDirective(Directive): """ @@ -11,8 +36,6 @@ class BaseDirective(Directive): has_content = True final_argument_whitespace = True - alg_docname_re = re.compile(r'^([A-Z][a-zA-Z0-9]+)-v([0-9][0-9]*)$') - def _algorithm_name_and_version(self): """ Returns the name and version of an algorithm based on the name of the @@ -20,14 +43,7 @@ def _algorithm_name_and_version(self): is the name of the file with the extension removed """ env = self.state.document.settings.env - # env.docname includes path, using forward slashes, from root of documentation directory - docname = env.docname.split("/")[-1] - match = self.alg_docname_re.match(docname) - if not match or len(match.groups()) != 2: - raise RuntimeError("Document filename '%s.rst' does not match the expected format: AlgorithmName-vX.rst" % docname) - - grps = match.groups() - return (str(grps[0]), int(grps[1])) + return algorithm_name_and_version(env.docname) def _make_header(self, name, pagetitle=False): """ diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py index 30deab430ec8..ec76149057cb 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -6,7 +6,7 @@ creates "index" pages that lists the contents of each category. The display of each "index" page is controlled by a jinja2 template. """ -from base import BaseDirective +from base import BaseDirective, algorithm_name_and_version CATEGORY_INDEX_TEMPLATE = "category.html" # relative to the "root" directory @@ -21,14 +21,15 @@ class LinkItem(object): # html link link = None - def __init__(self, name, env): + def __init__(self, name, docname): """ Arguments: - env (Sphinx.BuildEnvironment): The current environment processing object + name (str): Display name of document + docname (str): Name of document as referred to by docutils (can contain directory separators) """ self.name = str(name) - rel_path = env.docname # no suffix + rel_path = docname # no suffix # Assumes the link is for the current document and that the # page that will use this reference is in a single # subdirectory from root @@ -67,8 +68,8 @@ class PageRef(LinkItem): Store details of a single page reference """ - def __init__(self, name, env): - super(PageRef, self).__init__(name, env) + def __init__(self, name, docname): + super(PageRef, self).__init__(name, docname) #endclass @@ -81,8 +82,8 @@ class Category(LinkItem): # Collection of PageRef objects that form subcategories of this category subcategories = None - def __init__(self, name, env): - super(Category, self).__init__(name, env) + def __init__(self, name, docname): + super(Category, self).__init__(name, docname) # override default link self.link = "../categories/%s.html" % name @@ -169,9 +170,9 @@ def _create_links_and_track(self, page_name, category_list): category = env.categories[categ_name] #endif - category.pages.add(PageRef(page_name, env)) + category.pages.add(PageRef(page_name, env.docname)) if index > 0: # first is never a child - parent.subcategories.add(Category(categ_name, env)) + parent.subcategories.add(Category(categ_name, env.docname)) #endif link_rst += "`%s <../%s/%s.html>`_ | " % (categ_name, CATEGORIES_HTML_DIR, categ_name) @@ -270,6 +271,32 @@ def create_category_pages(app): yield (CATEGORIES_HTML_DIR + "/" + name, context, template) # enddef +#----------------------------------------------------------------------------------------------------------- + +def purge_categories(app, env, docname): + """ + Purge information about the given document name from the tracked algorithms + + Arguments: + app (Sphinx.application): Application object + env (Sphinx.BuildEnvironment): + docname (str): Name of the document + """ + if not hasattr(env, "categories"): + return # nothing to do + + categories = env.categories + try: + name, version = algorithm_name_and_version(docname) + except RuntimeError: # not an algorithm page + return + + deadref = PageRef(name, docname) + for category in categories.itervalues(): + pages = category.pages + if deadref in pages: + pages.remove(deadref) + #------------------------------------------------------------------------------ def setup(app): # Add categories directive @@ -280,3 +307,5 @@ def setup(app): # connect event html collection to handler app.connect("html-collect-pages", html_collect_pages) + # connect document clean up to purge information about this page + app.connect('env-purge-doc', purge_categories) \ No newline at end of file From 3d92c9a1b0d8d5ec36c86156c74a5350dd7f6577 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 09:54:18 +0100 Subject: [PATCH 33/86] Only insert alias section if one exists. Refs #9521 --- .../docs/sphinxext/mantiddoc/directives/aliases.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py index 494181945a7c..b44255753ae2 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py @@ -13,8 +13,11 @@ def run(self): """ Called by Sphinx when the ..aliases:: directive is encountered. """ - title = self._make_header("Aliases") alias = self._get_alias() + if len(alias) == 0: + return [] + + title = self._make_header("Aliases") return self._insert_rest(title + alias) def _get_alias(self): @@ -26,8 +29,11 @@ def _get_alias(self): """ name, version = self._algorithm_name_and_version() alg = self._create_mantid_algorithm(name, version) - return "This algorithm is also known as: " + "**" + alg.alias() + "**" - + alias_name = alg.alias() + if len(alias_name) == 0: + return "" + else: + return "This algorithm is also known as: " + "**" + alias_name + "**" def setup(app): """ From dd2043aaf2f08730fa7581ae7b38525020d05a63 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 13:38:51 +0100 Subject: [PATCH 34/86] Add deprecation message if neccesary Also regorganised to base to give easier access to algorithm name/version. Refs #9521 --- .../mantiddoc/directives/algorithm.py | 109 +++++++++++------- .../sphinxext/mantiddoc/directives/aliases.py | 3 +- .../sphinxext/mantiddoc/directives/base.py | 47 +++++++- .../mantiddoc/directives/categories.py | 5 +- .../mantiddoc/directives/properties.py | 4 +- .../sphinxext/mantiddoc/directives/summary.py | 3 +- 6 files changed, 118 insertions(+), 53 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index c29a49b32775..ac80154a4f72 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -1,13 +1,28 @@ from base import BaseDirective +from docutils import nodes +from sphinx.locale import _ +from sphinx.util.compat import make_admonition import os +import re REDIRECT_TEMPLATE = "redirect.html" +DEPRECATE_USE_ALG_RE = re.compile(r'Use\s([A-Z][a-zA-Z0-9]+)\sinstead') + +#-------------------------------------------------------------------------- class AlgorithmDirective(BaseDirective): """ - Adds a referenceable link for a given algorithm, a title, - and a screenshot of the algorithm to an rst file. + Inserts details of an algorithm by querying Mantid + + Adds: + - A referenceable link for use with Sphinx ":ref:`` tags", if this is + the highest version of the algorithm being processed + - A title + - A screenshot of the algorithm + - Table of contents + + If the algorithms is deprecated then a warning is inserted. """ required_arguments, optional_arguments = 0, 0 @@ -16,30 +31,30 @@ def run(self): """ Called by Sphinx when the ..algorithm:: directive is encountered """ - algorithm_name, version = self._algorithm_name_and_version() - self._track_algorithm(algorithm_name, version) + self._track_algorithm() - # Seperate methods for each unique piece of functionality. - reference = self._make_reference_link(algorithm_name) - title = self._make_header(algorithm_name, True) - toc = self._make_local_toc() - imgpath = self._create_screenshot(algorithm_name, version) - screenshot = self._make_screenshot_link(algorithm_name, imgpath) + self._insert_reference_link() + self._insert_pagetitle() + imgpath = self._create_screenshot() + self._insert_screenshot_link(imgpath) + self._insert_toc() + self._insert_deprecation_warning() - return self._insert_rest(reference + title + screenshot + toc) + self.commit_rst() + return [] - def _track_algorithm(self, name, version): + def _track_algorithm(self): """ - Keep a track of the highest versions of algorithms encountered - - Arguments: - name (str): Name of the algorithm - version (int): Integer version number + Keep a track of the highest versions of algorithms encountered. + The algorithm name and version are retrieved from the document name. + See BaseDirective::set_algorithm_and_version() """ env = self.state.document.settings.env if not hasattr(env, "algorithm"): env.algorithms = {} #endif + + name, version = self.algorithm_name(), self.algorithm_version() algorithms = env.algorithms if name in algorithms: prev_version = algorithms[name][1] @@ -48,33 +63,32 @@ def _track_algorithm(self, name, version): else: algorithms[name] = (name, version) - def _make_reference_link(self, algorithm_name): + def _insert_reference_link(self): """ Outputs a reference to the top of the algorithm's rst of the form .. _AlgorithmName: + """ + self.add_rst(".. _algorithm|%s:\n" % self.algorithm_name()) - Args: - algorithm_name (str): The name of the algorithm to reference. - - Returns: - str: A ReST formatted reference. + def _insert_pagetitle(self): """ - return ".. _algorithm|%s:\n" % algorithm_name + Outputs a title for the page + """ + self.add_rst(self._make_header(self.algorithm_name(), True)) - def _make_local_toc(self): - return ".. contents:: Table of Contents\n :local:\n" + def _insert_toc(self): + """ + Outputs a title for the page + """ + self.add_rst(".. contents:: Table of Contents\n :local:\n") - def _create_screenshot(self, algorithm_name, version): + def _create_screenshot(self): """ Creates a screenshot for the named algorithm in an "images/screenshots" subdirectory of the currently processed document The file will be named "algorithmname-vX_dlg.png", e.g. Rebin-v1_dlg.png - Args: - algorithm_name (str): The name of the algorithm. - version (int): The version of the algorithm - Returns: str: The full path to the created image """ @@ -86,14 +100,14 @@ def _create_screenshot(self, algorithm_name, version): os.makedirs(screenshots_dir) try: - imgpath = algorithm_screenshot(algorithm_name, screenshots_dir, version=version) + imgpath = algorithm_screenshot(self.algorithm_name(), screenshots_dir, version=self.algorithm_version()) except Exception, exc: env.warn(env.docname, "Unable to generate screenshot for '%s' - %s" % (algorithm_name, str(exc))) imgpath = os.path.join(screenshots_dir, "failed_dialog.png") return imgpath - def _make_screenshot_link(self, algorithm_name, img_path): + def _insert_screenshot_link(self, img_path): """ Outputs an image link with a custom :class: style. The filename is extracted from the path given and then a link to /images/screenshots/filename.png @@ -101,11 +115,7 @@ def _make_screenshot_link(self, algorithm_name, img_path): and reformatting the links Args: - algorithm_name (str): The name of the algorithm that the screenshot represents img_path (str): The full path as on the filesystem to the image - - Returns: - str: A ReST formatted reference. """ format_str = ".. figure:: %s\n"\ " :class: screenshot\n\n"\ @@ -113,9 +123,9 @@ def _make_screenshot_link(self, algorithm_name, img_path): filename = os.path.split(img_path)[1] path = "/images/screenshots/" + filename - caption = "A screenshot of the **" + algorithm_name + "** dialog." + caption = "A screenshot of the **" + self.algorithm_name() + "** dialog." - return format_str % (path, caption) + self.add_rst(format_str % (path, caption)) def _screenshot_directory(self, env): """ @@ -133,6 +143,27 @@ def _screenshot_directory(self, env): cfg_dir = env.app.srcdir return os.path.join(cfg_dir, "images", "screenshots") + def _insert_deprecation_warning(self): + """ + If the algorithm version is deprecated then construct a warning message + """ + from mantid.api import DeprecatedAlgorithmChecker + + checker = DeprecatedAlgorithmChecker(self.algorithm_name(), self.algorithm_version()) + msg = checker.isDeprecated() + if len(msg) == 0: + return + + # Check for message to use another algorithm an insert a link + match = DEPRECATE_USE_ALG_RE.search(msg) + print "TESTING",msg + print "TESTING",match,match.groups() + if match is not None and len(match.groups()) == 1: + name = match.group(0) + msg = DEPRECATE_USE_ALG_RE.sub(r"Use :ref:`algorithm|\1` instead.", msg) + print "TESTING",msg + self.add_rst(".. warning:: %s" % msg) + ############################################################################################################ def html_collect_pages(app): diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py index b44255753ae2..9ee58c7fe807 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py @@ -27,8 +27,7 @@ def _get_alias(self): Args: algorithm_name (str): The name of the algorithm to get the alias for. """ - name, version = self._algorithm_name_and_version() - alg = self._create_mantid_algorithm(name, version) + alg = self._create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) alias_name = alg.alias() if len(alias_name) == 0: return "" diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py index c080f4aeb4fa..b6980693d7be 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py @@ -32,18 +32,57 @@ class BaseDirective(Directive): """ Contains shared functionality for Mantid custom directives. """ - - has_content = True + has_content = False final_argument_whitespace = True - def _algorithm_name_and_version(self): + algm_name = None + algm_version = None + rst_lines = None + + def algorithm_name(self): + """ + Returns the algorithm name as parsed from the document name + """ + if self.algm_name is None: + self._set_algorithm_name_and_version() + return self.algm_name + + def algorithm_version(self): + """ + Returns the algorithm version as parsed from the document name + """ + if self.algm_version is None: + self._set_algorithm_name_and_version() + return self.algm_version + + def _set_algorithm_name_and_version(self): """ Returns the name and version of an algorithm based on the name of the document. The expected name of the document is "AlgorithmName-v?", which is the name of the file with the extension removed """ env = self.state.document.settings.env - return algorithm_name_and_version(env.docname) + self.algm_name, self.algm_version = algorithm_name_and_version(env.docname) + + def add_rst(self, text): + """ + Appends given reST into a managed list. It is NOT inserted into the + document until commit_rst() is called + + Args: + text (str): reST to track + """ + if self.rst_lines is None: + self.rst_lines = [] + + self.rst_lines.extend(statemachine.string2lines(text)) + + def commit_rst(self): + """ + Inserts the currently tracked rst lines into the state_machine + """ + self.state_machine.insert_input(self.rst_lines, "") + self.rst_lines = [] def _make_header(self, name, pagetitle=False): """ diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py index ec76149057cb..4c829f8680cb 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -214,8 +214,7 @@ def _get_categories_list(self): list: A list of strings containing the required categories """ category_list = ["Algorithms"] - algname, version = self._algorithm_name_and_version() - alg_cats = self._create_mantid_algorithm(algname, version).categories() + alg_cats = self._create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()).categories() for cat in alg_cats: # double up the category separators so they are not treated as escape characters category_list.append(cat.replace("\\", "\\\\")) @@ -226,7 +225,7 @@ def _get_display_name(self): """ Returns the name of the item as it should appear in the category """ - return self._algorithm_name_and_version()[0] + return self.algorithm_name() #--------------------------------------------------------------------------------- diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py index 440e11d4bd7a..35455462ed9d 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py @@ -21,9 +21,7 @@ def _populate_properties_table(self): """ Populates the ReST table with algorithm properties. """ - name, version = self._algorithm_name_and_version() - - alg = self._create_mantid_algorithm(name, version) + alg = self._create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) alg_properties = alg.getProperties() # Stores each property of the algorithm in a tuple. diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py index 2432a2fc4076..6b3bdb4ec9ba 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py @@ -24,8 +24,7 @@ def _get_summary(self): Args: algorithm_name (str): The name of the algorithm. """ - name, version = self._algorithm_name_and_version() - alg = self._create_mantid_algorithm(name, version) + alg = self._create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) return alg.getWikiSummary() From 8727d697ed4694ad07006900e907e58700a94f6b Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 13:50:49 +0100 Subject: [PATCH 35/86] Update style of directives to be more similar to each other. Refs #9521 --- .../mantiddoc/directives/algorithm.py | 6 ++--- .../sphinxext/mantiddoc/directives/aliases.py | 23 ++++++------------- .../sphinxext/mantiddoc/directives/base.py | 17 ++------------ .../mantiddoc/directives/categories.py | 6 +++-- .../mantiddoc/directives/properties.py | 10 ++++---- .../sphinxext/mantiddoc/directives/summary.py | 18 ++++----------- 6 files changed, 26 insertions(+), 54 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index ac80154a4f72..c159c06398a4 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -74,7 +74,7 @@ def _insert_pagetitle(self): """ Outputs a title for the page """ - self.add_rst(self._make_header(self.algorithm_name(), True)) + self.add_rst(self.make_header(self.algorithm_name(), True)) def _insert_toc(self): """ @@ -156,12 +156,10 @@ def _insert_deprecation_warning(self): # Check for message to use another algorithm an insert a link match = DEPRECATE_USE_ALG_RE.search(msg) - print "TESTING",msg - print "TESTING",match,match.groups() if match is not None and len(match.groups()) == 1: name = match.group(0) msg = DEPRECATE_USE_ALG_RE.sub(r"Use :ref:`algorithm|\1` instead.", msg) - print "TESTING",msg + self.add_rst(".. warning:: %s" % msg) ############################################################################################################ diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py index 9ee58c7fe807..2481e4ca734f 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py @@ -13,26 +13,17 @@ def run(self): """ Called by Sphinx when the ..aliases:: directive is encountered. """ - alias = self._get_alias() + alg = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) + alias = alg.alias() if len(alias) == 0: return [] - title = self._make_header("Aliases") - return self._insert_rest(title + alias) + self.add_rst(self.make_header("Aliases")) + format_str = "This algorithm is also known as: **%s**" + self.add_rst(format_str % alias) + self.commit_rst() - def _get_alias(self): - """ - Return the alias for the named algorithm. - - Args: - algorithm_name (str): The name of the algorithm to get the alias for. - """ - alg = self._create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) - alias_name = alg.alias() - if len(alias_name) == 0: - return "" - else: - return "This algorithm is also known as: " + "**" + alias_name + "**" + return [] def setup(app): """ diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py index b6980693d7be..f52f4c635420 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py @@ -84,7 +84,7 @@ def commit_rst(self): self.state_machine.insert_input(self.rst_lines, "") self.rst_lines = [] - def _make_header(self, name, pagetitle=False): + def make_header(self, name, pagetitle=False): """ Makes a ReStructuredText title from the algorithm's name. @@ -102,20 +102,7 @@ def _make_header(self, name, pagetitle=False): line = "\n" + "-" * len(name) + "\n" return name + line - def _insert_rest(self, text): - """ - Inserts ReStructuredText into the algorithm file. - - Args: - text (str): Inserts ReStructuredText into the algorithm file. - - Returns: - list: Empty list. This is required by the inherited run method. - """ - self.state_machine.insert_input(statemachine.string2lines(text), "") - return [] - - def _create_mantid_algorithm(self, algorithm_name, version): + def create_mantid_algorithm(self, algorithm_name, version): """ Create and initializes a Mantid algorithm. diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py index 4c829f8680cb..c0ce2864e709 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -114,7 +114,9 @@ def run(self): display_name = self._get_display_name() links = self._create_links_and_track(display_name, categories) - return self._insert_rest("\n" + links) + self.add_rst("\n" + links) + self.commit_rst() + return [] def _get_categories_list(self): """ @@ -214,7 +216,7 @@ def _get_categories_list(self): list: A list of strings containing the required categories """ category_list = ["Algorithms"] - alg_cats = self._create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()).categories() + alg_cats = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()).categories() for cat in alg_cats: # double up the category separators so they are not treated as escape characters category_list.append(cat.replace("\\", "\\\\")) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py index 35455462ed9d..3eb955bffc7b 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py @@ -13,15 +13,17 @@ def run(self): """ Called by Sphinx when the ..properties:: directive is encountered. """ - title = self._make_header("Properties") - properties_table = self._populate_properties_table() - return self._insert_rest(title + properties_table) + self.add_rst(self.make_header("Properties")) + self.add_rst(self._populate_properties_table()) + self.commit_rst() + + return [] def _populate_properties_table(self): """ Populates the ReST table with algorithm properties. """ - alg = self._create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) + alg = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) alg_properties = alg.getProperties() # Stores each property of the algorithm in a tuple. diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py index 6b3bdb4ec9ba..3d92a9071bd8 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py @@ -13,20 +13,12 @@ def run(self): """ Called by Sphinx when the ..summary:: directive is encountered. """ - title = self._make_header("Summary") - summary = self._get_summary() - return self._insert_rest(title + summary) - - def _get_summary(self): - """ - Return the summary for the named algorithm. - - Args: - algorithm_name (str): The name of the algorithm. - """ - alg = self._create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) - return alg.getWikiSummary() + self.add_rst(self.make_header("Summary")) + alg = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) + self.add_rst(alg.getWikiSummary()) + self.commit_rst() + return [] def setup(app): """ From 920a2dbb90b5ee9e150b9e3ac83b1b553d477b36 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 14:25:23 +0100 Subject: [PATCH 36/86] Add highestVersion() method to AlgorithmFactory It provides easy access to the highest version of an algorithm currently registered. Refs #9521 --- .../API/inc/MantidAPI/AlgorithmFactory.h | 3 +++ .../Framework/API/src/AlgorithmFactory.cpp | 15 +++++++++++++++ .../Framework/API/test/AlgorithmFactoryTest.h | 19 ++++++++++++++++++- .../api/src/Exports/AlgorithmFactory.cpp | 3 ++- 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/AlgorithmFactory.h b/Code/Mantid/Framework/API/inc/MantidAPI/AlgorithmFactory.h index 2a9d43cbe57e..9762c2995a48 100644 --- a/Code/Mantid/Framework/API/inc/MantidAPI/AlgorithmFactory.h +++ b/Code/Mantid/Framework/API/inc/MantidAPI/AlgorithmFactory.h @@ -125,6 +125,9 @@ class MANTID_API_DLL AlgorithmFactoryImpl : public Kernel::DynamicFactory getKeys() const; const std::vector getKeys(bool includeHidden) const; + + /// Returns the highest version of the algorithm currently registered + int highestVersion(const std::string & algorithmName) const; ///Get the algorithm categories const std::set getCategories(bool includeHidden=false) const; diff --git a/Code/Mantid/Framework/API/src/AlgorithmFactory.cpp b/Code/Mantid/Framework/API/src/AlgorithmFactory.cpp index 152a3215f422..79b39269797f 100644 --- a/Code/Mantid/Framework/API/src/AlgorithmFactory.cpp +++ b/Code/Mantid/Framework/API/src/AlgorithmFactory.cpp @@ -227,6 +227,21 @@ namespace Mantid } } + /** + * @param algorithmName The name of an algorithm registered with the factory + * @return An integer corresponding to the highest version registered + * @throw std::invalid_argument if the algorithm cannot be found + */ + int AlgorithmFactoryImpl::highestVersion(const std::string &algorithmName) const + { + VersionMap::const_iterator viter = m_vmap.find(algorithmName); + if(viter != m_vmap.end()) return viter->second; + else + { + throw std::invalid_argument("AlgorithmFactory::highestVersion() - Unknown algorithm '" + algorithmName + "'"); + } + } + /** * Return the categories of the algorithms. This includes those within the Factory itself and * any cleanly constructed algorithms stored here. diff --git a/Code/Mantid/Framework/API/test/AlgorithmFactoryTest.h b/Code/Mantid/Framework/API/test/AlgorithmFactoryTest.h index 34806408aee4..1314ee8fc8fa 100644 --- a/Code/Mantid/Framework/API/test/AlgorithmFactoryTest.h +++ b/Code/Mantid/Framework/API/test/AlgorithmFactoryTest.h @@ -106,6 +106,23 @@ class AlgorithmFactoryTest : public CxxTest::TestSuite TS_ASSERT_THROWS_NOTHING(keys = AlgorithmFactory::Instance().getKeys()); TS_ASSERT_EQUALS(noOfAlgs - 1, keys.size()); } + + void test_HighestVersion() + { + auto & factory = AlgorithmFactory::Instance(); + + TS_ASSERT_THROWS(factory.highestVersion("ToyAlgorithm"), std::invalid_argument); + + AlgorithmFactory::Instance().subscribe(); + TS_ASSERT_EQUALS(1, factory.highestVersion("ToyAlgorithm")); + + Mantid::Kernel::Instantiator* newTwo = new Mantid::Kernel::Instantiator; + AlgorithmFactory::Instance().subscribe(newTwo); + TS_ASSERT_EQUALS(2, factory.highestVersion("ToyAlgorithm")); + + AlgorithmFactory::Instance().unsubscribe("ToyAlgorithm",1); + AlgorithmFactory::Instance().unsubscribe("ToyAlgorithm",2); + } void testCreate() { @@ -201,4 +218,4 @@ class AlgorithmFactoryTest : public CxxTest::TestSuite }; -#endif \ No newline at end of file +#endif diff --git a/Code/Mantid/Framework/PythonInterface/mantid/api/src/Exports/AlgorithmFactory.cpp b/Code/Mantid/Framework/PythonInterface/mantid/api/src/Exports/AlgorithmFactory.cpp index 4b9b34ab283c..12bfc84afbc6 100644 --- a/Code/Mantid/Framework/PythonInterface/mantid/api/src/Exports/AlgorithmFactory.cpp +++ b/Code/Mantid/Framework/PythonInterface/mantid/api/src/Exports/AlgorithmFactory.cpp @@ -112,7 +112,8 @@ void export_AlgorithmFactory() "Returns true if the given algorithm exists with an option to specify the version")) .def("getRegisteredAlgorithms", &getRegisteredAlgorithms, "Returns a Python dictionary of currently registered algorithms") - + .def("highestVersion", &AlgorithmFactoryImpl::highestVersion, + "Returns the highest version of the named algorithm. Throws ValueError if no algorithm can be found") .def("subscribe", &subscribe, "Register a Python class derived from PythonAlgorithm into the factory") .def("Instance", &AlgorithmFactory::Instance, return_value_policy(), From 20815b842504b9436c1a8c0b2ccc60c677d2ec14 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 14:26:12 +0100 Subject: [PATCH 37/86] Only add Sphinx ref link if algorithm is highest version Refs #9521 --- .../docs/sphinxext/mantiddoc/directives/algorithm.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index c159c06398a4..ebe179bb3142 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -66,15 +66,20 @@ def _track_algorithm(self): def _insert_reference_link(self): """ Outputs a reference to the top of the algorithm's rst - of the form .. _AlgorithmName: + of the form .. _AlgorithmName: if this is the highest version """ - self.add_rst(".. _algorithm|%s:\n" % self.algorithm_name()) + from mantid.api import AlgorithmFactory + + alg_name = self.algorithm_name() + if AlgorithmFactory.highestVersion(alg_name) == self.algorithm_version(): + self.add_rst(".. _algorithm|%s:\n" % alg_name) def _insert_pagetitle(self): """ Outputs a title for the page """ - self.add_rst(self.make_header(self.algorithm_name(), True)) + title = "%s v%d" % (self.algorithm_name(), self.algorithm_version()) + self.add_rst(self.make_header(title, True)) def _insert_toc(self): """ From 152593258835669b696fd677539b83033686d7a2 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 15:05:39 +0100 Subject: [PATCH 38/86] Fix bootstrap navbar size issue. Also replace logo with cropped version to take up less space. Refs #9521 --- Code/Mantid/docs/source/_static/custom.css | 5 ----- Code/Mantid/docs/source/_templates/layout.html | 1 + Code/Mantid/docs/source/_templates/navbar.html | 8 ++++++++ Code/Mantid/docs/source/conf.py | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 Code/Mantid/docs/source/_templates/navbar.html diff --git a/Code/Mantid/docs/source/_static/custom.css b/Code/Mantid/docs/source/_static/custom.css index 1ca764fa6eab..b21258686d13 100644 --- a/Code/Mantid/docs/source/_static/custom.css +++ b/Code/Mantid/docs/source/_static/custom.css @@ -5,11 +5,6 @@ /*-------------------- $NAV --------------------*/ .navbar-version { display: none; } -.navbar-brand { - margin-bottom: 15px; - width: 190px; - height: 100px; -} /*-------------------- $LINKS --------------------*/ diff --git a/Code/Mantid/docs/source/_templates/layout.html b/Code/Mantid/docs/source/_templates/layout.html index e4f5bcfc89aa..6f66bf7ba4d5 100644 --- a/Code/Mantid/docs/source/_templates/layout.html +++ b/Code/Mantid/docs/source/_templates/layout.html @@ -1,3 +1,4 @@ {% extends "!layout.html" %} + {# Custom CSS overrides #} {% set bootswatch_css_custom = ['_static/custom.css'] %} diff --git a/Code/Mantid/docs/source/_templates/navbar.html b/Code/Mantid/docs/source/_templates/navbar.html new file mode 100644 index 000000000000..bf3b51f08e01 --- /dev/null +++ b/Code/Mantid/docs/source/_templates/navbar.html @@ -0,0 +1,8 @@ +{% extends "!navbar.html" %} + +{%- block sidebarlogo %} +{%- if logo -%} + +{%- endif %} +{%- endblock -%} + diff --git a/Code/Mantid/docs/source/conf.py b/Code/Mantid/docs/source/conf.py index dc8828ce39c6..ea20dcc36f4a 100644 --- a/Code/Mantid/docs/source/conf.py +++ b/Code/Mantid/docs/source/conf.py @@ -60,7 +60,7 @@ # custom.css rather than here. html_theme_options = { # Navigation bar title. - 'navbar_title': " ", + 'navbar_title': " ", # deliberate single space so it's not visible # Tab name for entire site. 'navbar_site_name': "Mantid", # Add links to the nav bar. Second param of tuple is true to create absolute url. @@ -87,7 +87,7 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = os.path.relpath('../../Images/Mantid_Logo_Transparent.png') +html_logo = os.path.relpath('../../Images/Mantid_Logo_Transparent_Cropped.png') # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, From 8373eb4d8a8076c202fd62962b9e5409f908d95f Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 15:34:26 +0100 Subject: [PATCH 39/86] Extend our layout class in category not the default. Refs #9521 --- Code/Mantid/docs/source/_templates/category.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/Mantid/docs/source/_templates/category.html b/Code/Mantid/docs/source/_templates/category.html index c78f7644003b..0d9249d9b59b 100644 --- a/Code/Mantid/docs/source/_templates/category.html +++ b/Code/Mantid/docs/source/_templates/category.html @@ -1,5 +1,6 @@ -{# Import the theme's layout. #} -{% extends "!layout.html" %} +{# Generates a better view for category pages #} + +{% extends "layout.html" %} {% macro split_to_three_columns(item_list) -%} {# Split list into 3 columns #} From afbdb0365f51a5ad8d7cfe7636b403e1f80f03b3 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 15:35:12 +0100 Subject: [PATCH 40/86] Add docs-html target to CMake Only added if Sphinx can be found. Refs #9521 --- Code/Mantid/docs/CMakeLists.txt | 28 ++++++++++++++++++++++++++++ Code/Mantid/docs/runsphinx.py.in | 21 +++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 Code/Mantid/docs/runsphinx.py.in diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index 6bb594dc56c8..b6a1bed99409 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -1,3 +1,31 @@ +############################################################################### +# Sphinx documentation +############################################################################### +find_package ( Sphinx ) + +if ( SPHINX_FOUND ) + # Fill in the config file and autogen file with build information + + # We generate a target per build type, i.e docs-html + set ( SPHINX_BUILD ${CMAKE_BINARY_DIR}/docs ) + set ( BUILDER html ) + configure_file ( runsphinx.py.in runsphinx_html.py @ONLY ) + + # targets + set ( TARGET_PREFIX docs) + + # HTML target + add_custom_target ( ${TARGET_PREFIX}-html + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MantidPlot -xq runsphinx_html.py + COMMENT "Build Sphinx html documentation" + ) + +endif () + + +############################################################################### +# QtAssistant +############################################################################### if ( APPLE ) set ( ENABLE_QTASSISTANT False CACHE BOOL "Build qt-assistant documentation" ) else () diff --git a/Code/Mantid/docs/runsphinx.py.in b/Code/Mantid/docs/runsphinx.py.in new file mode 100644 index 000000000000..d675706b9819 --- /dev/null +++ b/Code/Mantid/docs/runsphinx.py.in @@ -0,0 +1,21 @@ +"""We need to run Sphinx inside MantidPlot to document the internal + module. This script calls the sphinx entry point with the necessary + arguments +""" + +__requires__ = 'Sphinx' +import sys +import os +from pkg_resources import load_entry_point + +mantidplot = "@CMAKE_RUNTIME_OUTPUT_DIRECTORY@/MantidPlot" +builder = "@BUILDER@" +src_dir = "@CMAKE_CURRENT_SOURCE_DIR@/source" +output_dir = os.path.join("@SPHINX_BUILD@", builder) +argv = [mantidplot,'-b', builder, src_dir, output_dir] + +if __name__ == '__main__': + sys.exit( + load_entry_point(__requires__, 'console_scripts', 'sphinx-build')(argv) + ) + From 0f669bf033552a1a0bf4afe4c504b6445b1075e4 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 15:40:57 +0100 Subject: [PATCH 41/86] Update docs README to include package requirements Refs #9521 --- Code/Mantid/docs/README.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Code/Mantid/docs/README.md b/Code/Mantid/docs/README.md index 12654d178542..393d032b3b2a 100644 --- a/Code/Mantid/docs/README.md +++ b/Code/Mantid/docs/README.md @@ -1,5 +1,16 @@ -The Mantid documentation is written in [reStructuredText](http://docutils.sourceforge.net/rst.html) and processed using [Sphinx](http://sphinx.pocoo.org/). To install Sphinx type +The Mantid documentation is written in [reStructuredText](http://docutils.sourceforge.net/rst.html) and processed using [Sphinx](http://sphinx.pocoo.org/). It uses a custom +boostrap theme for Sphinx and both are required to build the documentation. + +To install Sphinx and the bootstrap theme use `easy_install`: easy_install -U Sphinx + easy_install -U sphinx-bootstrap-theme + +or `pip`: + + pip install Sphinx + pip install sphinx-bootstrap-theme + +This may require admin privileges on some environments. -CMake produces a `doc-html` target that is used to build the documentation. The output files will appear in a `html` sub directory of the main `build/docs` directory. \ No newline at end of file +CMake produces a `docs-html` target that is used to build the documentation. The output files will appear in a `html` sub directory of the main `build/docs` directory. \ No newline at end of file From be9f0c2cee84281d66953653b4991ede6305ca4e Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 15:43:08 +0100 Subject: [PATCH 42/86] Use reST for the style guide. Refs #9521 --- ...{DocumentationStyleGuide.md => DocumentationStyleGuide.rst} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename Code/Mantid/docs/{DocumentationStyleGuide.md => DocumentationStyleGuide.rst} (70%) diff --git a/Code/Mantid/docs/DocumentationStyleGuide.md b/Code/Mantid/docs/DocumentationStyleGuide.rst similarity index 70% rename from Code/Mantid/docs/DocumentationStyleGuide.md rename to Code/Mantid/docs/DocumentationStyleGuide.rst index 75a0ac64a70c..7d171234020f 100644 --- a/Code/Mantid/docs/DocumentationStyleGuide.md +++ b/Code/Mantid/docs/DocumentationStyleGuide.rst @@ -1,7 +1,8 @@ +========================= Documentation Style Guide ========================= -This guide describes the formatting that should be followed when documenting Mantid functionality. The documentation is built using [Sphinx](http://sphinx.pocoo.org/) and when using Sphinx most of what you type is reStructuredText. For more information on reStructeredText see: +This guide describes the formatting that should be followed when documenting Mantid functionality. The documentation is built using `Sphinx ` and when using Sphinx most of what you type is reStructuredText. For more information on reStructeredText see: * https://pythonhosted.org/an_example_pypi_project/sphinx.html * http://docutils.sourceforge.net/rst.html From edcf7fd044367b356bc82300e93f67fc90bb05b6 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 16:06:51 +0100 Subject: [PATCH 43/86] Delete all screenshot images that were generated in the source dir Sphinx requires them in the source tree to build properly but we don't want them around all of the time. Refs #9521 --- .../mantiddoc/directives/algorithm.py | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index ebe179bb3142..bb20442d8382 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -100,7 +100,7 @@ def _create_screenshot(self): from mantiddoc.tools.screenshot import algorithm_screenshot env = self.state.document.settings.env - screenshots_dir = self._screenshot_directory(env) + screenshots_dir = self._screenshot_directory() if not os.path.exists(screenshots_dir): os.makedirs(screenshots_dir) @@ -132,7 +132,7 @@ def _insert_screenshot_link(self, img_path): self.add_rst(format_str % (path, caption)) - def _screenshot_directory(self, env): + def _screenshot_directory(self): """ Returns a full path where the screenshots should be generated. They are put in a screenshots subdirectory of the main images directory in the source @@ -145,8 +145,7 @@ def _screenshot_directory(self, env): str: A string containing a path to where the screenshots should be created. This will be a filesystem path """ - cfg_dir = env.app.srcdir - return os.path.join(cfg_dir, "images", "screenshots") + return screenshot_directory(self.state.document.settings.env.app) def _insert_deprecation_warning(self): """ @@ -167,7 +166,26 @@ def _insert_deprecation_warning(self): self.add_rst(".. warning:: %s" % msg) -############################################################################################################ + +#------------------------------------------------------------------------------------------------------------ + +def screenshot_directory(app): + """ + Returns a full path where the screenshots should be generated. They are + put in a screenshots subdirectory of the main images directory in the source + tree. Sphinx then handles copying them to the final location + + Arguments: + app (Sphinx.Application): A reference to the application object + + Returns: + str: A string containing a path to where the screenshots should be created. This will + be a filesystem path + """ + cfg_dir = app.srcdir + return os.path.join(cfg_dir, "images", "screenshots") + +#------------------------------------------------------------------------------------------------------------ def html_collect_pages(app): """ @@ -186,7 +204,28 @@ def html_collect_pages(app): context = {"name" : name, "target" : target} yield (redirect_pagename, context, template) -############################################################################################################ +#------------------------------------------------------------------------------------------------------------ + +def purge_screenshots(app, exception): + """ + Remove all screenshots images that were generated in the source directory during the build + + Arguments: + app (Sphinx.Application): A reference to the application object + exception (Exception): If an exception was raised this is a reference to the exception object, else None + """ + import os + + screenshot_dir = screenshot_directory(app) + for filename in os.listdir(screenshot_dir): + filepath = os.path.join(screenshot_dir, filename) + try: + if os.path.isfile(filepath): + os.remove(filepath) + except Exception, e: + app.warn(str(e)) + +#------------------------------------------------------------------------------------------------------------ def setup(app): """ @@ -200,3 +239,6 @@ def setup(app): # connect event html collection to handler app.connect("html-collect-pages", html_collect_pages) + # Remove all generated screenshots from the source directory when finished + # so that they don't become stale + app.connect("build-finished", purge_screenshots) \ No newline at end of file From cfd54fee23b2b9d997b10113b93ce113519dbd47 Mon Sep 17 00:00:00 2001 From: Roman Tolchenov Date: Wed, 28 May 2014 16:27:00 +0100 Subject: [PATCH 44/86] Re #9535. Added an option to output only parameters from Fit --- .../Mantid/Framework/CurveFitting/src/Fit.cpp | 20 ++++--- .../Framework/CurveFitting/test/FitMWTest.h | 53 +++++++++++++++++++ 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/Code/Mantid/Framework/CurveFitting/src/Fit.cpp b/Code/Mantid/Framework/CurveFitting/src/Fit.cpp index d3bc29a51895..8fe24f94170f 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Fit.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Fit.cpp @@ -562,6 +562,9 @@ namespace CurveFitting declareProperty(new Kernel::PropertyWithValue("ConvolveMembers", false), "If true and OutputCompositeMembers is true members of any Convolution are output convolved\n" "with corresponding resolution"); + declareProperty("OutputParametersOnly", false, + "Set to true to output only the parameters and not workspace(s) with the calculated values\n" + "(default is false, ignored if CreateOutput is false and Output is an empty string)." ); } /** Executes the algorithm @@ -797,14 +800,19 @@ namespace CurveFitting setProperty("OutputParameters",result); - const bool unrollComposites = getProperty("OutputCompositeMembers"); - bool convolveMembers = existsProperty("ConvolveMembers"); - if ( convolveMembers ) + bool outputParametersOnly = getProperty("OutputParametersOnly"); + + if ( !outputParametersOnly ) { - convolveMembers = getProperty("ConvolveMembers"); + const bool unrollComposites = getProperty("OutputCompositeMembers"); + bool convolveMembers = existsProperty("ConvolveMembers"); + if ( convolveMembers ) + { + convolveMembers = getProperty("ConvolveMembers"); + } + m_domainCreator->separateCompositeMembersInOutput(unrollComposites,convolveMembers); + m_domainCreator->createOutputWorkspace(baseName,m_function,domain,values); } - m_domainCreator->separateCompositeMembersInOutput(unrollComposites,convolveMembers); - m_domainCreator->createOutputWorkspace(baseName,m_function,domain,values); } diff --git a/Code/Mantid/Framework/CurveFitting/test/FitMWTest.h b/Code/Mantid/Framework/CurveFitting/test/FitMWTest.h index 81629ea7ad51..345b93c8a1d1 100644 --- a/Code/Mantid/Framework/CurveFitting/test/FitMWTest.h +++ b/Code/Mantid/Framework/CurveFitting/test/FitMWTest.h @@ -227,6 +227,59 @@ class FitMWTest : public CxxTest::TestSuite } + void test_all_output() + { + auto ws2 = createTestWorkspace(true); + + API::IFunction_sptr fun(new Polynomial); + fun->setAttributeValue("n",1); + + Fit fit; + fit.initialize(); + + fit.setProperty("Function",fun); + fit.setProperty("InputWorkspace",ws2); + fit.setProperty("WorkspaceIndex",0); + fit.setProperty("Output","out"); + + fit.execute(); + + TS_ASSERT(fit.isExecuted()); + + TS_ASSERT( Mantid::API::AnalysisDataService::Instance().doesExist( "out_Workspace" ) ); + TS_ASSERT( Mantid::API::AnalysisDataService::Instance().doesExist( "out_Parameters" ) ); + + Mantid::API::AnalysisDataService::Instance().clear(); + + } + + void test_output_parameters_only() + { + auto ws2 = createTestWorkspace(true); + + API::IFunction_sptr fun(new Polynomial); + fun->setAttributeValue("n",1); + + Fit fit; + fit.initialize(); + + fit.setProperty("Function",fun); + fit.setProperty("InputWorkspace",ws2); + fit.setProperty("WorkspaceIndex",0); + fit.setProperty("Output","out"); + fit.setProperty("OutputParametersOnly",true); + + fit.execute(); + + TS_ASSERT(fit.isExecuted()); + + TS_ASSERT( ! Mantid::API::AnalysisDataService::Instance().doesExist( "out_Workspace" ) ); + TS_ASSERT( Mantid::API::AnalysisDataService::Instance().doesExist( "out_Parameters" ) ); + + Mantid::API::AnalysisDataService::Instance().clear(); + + } + void test_createDomain_creates_FunctionDomain1DSpectrum() { MatrixWorkspace_sptr ws2 = createTestWorkspace(true); From ce0d5734c322493776ad838adf65a8e8b054bf80 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 16:55:11 +0100 Subject: [PATCH 45/86] Fix property descriptions that span multiple lines Simply replaces the new line with a space and lets the output formatter take care of displaying it. Refs #9521 --- Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py index 3eb955bffc7b..0f6177b0ed26 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py @@ -40,7 +40,7 @@ def _populate_properties_table(self): str(direction_string[prop.direction]), str(prop.type), str(self._get_default_prop(prop)), - str(prop.documentation) + str(prop.documentation.replace("\n", " ")) )) # Build and add the properties to the ReST table. From d48a5a621ce3817fdb9e8370efc26c5695dea13f Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 16:55:48 +0100 Subject: [PATCH 46/86] Re-enable content for mobile devices It may not look the best at the moment but it's better than not being able to see it at all. Refs #9521 --- Code/Mantid/docs/source/_static/custom.css | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Code/Mantid/docs/source/_static/custom.css b/Code/Mantid/docs/source/_static/custom.css index b21258686d13..e7fe0571614f 100644 --- a/Code/Mantid/docs/source/_static/custom.css +++ b/Code/Mantid/docs/source/_static/custom.css @@ -74,12 +74,3 @@ td, th { max-width: 40%; } } - -/* - Hide the screenshot image as it does not have a relevant header. TOC should be first. - * - Hide the properties table as it's contents are too large for mobile display. - * - Hide properties title since the table is also hidden. */ -@media (max-width: 767px) { - .figure, .table, #properties { - display: none; - } -} From 396c2ad714fed2c0d39e829a0eee032906faa0d7 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Wed, 28 May 2014 17:46:49 +0100 Subject: [PATCH 47/86] Fix MantidPlot screenshot test. The extension is now expected as part of the filename. Refs #5321 --- .../Mantid/MantidPlot/test/MantidPlotAlgorithmDialogTest.py | 6 +++--- Code/Mantid/scripts/WikiMaker/ScreenshotAlgDialogs.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Code/Mantid/MantidPlot/test/MantidPlotAlgorithmDialogTest.py b/Code/Mantid/MantidPlot/test/MantidPlotAlgorithmDialogTest.py index 4d612a3407af..3bb0da5fca89 100644 --- a/Code/Mantid/MantidPlot/test/MantidPlotAlgorithmDialogTest.py +++ b/Code/Mantid/MantidPlot/test/MantidPlotAlgorithmDialogTest.py @@ -23,10 +23,10 @@ def test_ScreenShotDialog(self): interface_manager = mantidqtpython.MantidQt.API.InterfaceManager() dialog = threadsafe_call( interface_manager.createDialogFromName, self.__target_algorithm__, self.__clean_properties__) screenshotdir = tempfile.gettempdir(); - file = "CreateMDWorkspace_screenshot" - screenshot_to_dir(widget=dialog, filename=file, screenshot_dir=screenshotdir) + filename = "CreateMDWorkspace_screenshot.png" + screenshot_to_dir(widget=dialog, filename=filename, screenshot_dir=screenshotdir) threadsafe_call(dialog.close) - file_abs = os.path.join(screenshotdir, file + ".png") + file_abs = os.path.join(screenshotdir, filename) file_exists = os.path.isfile(file_abs) self.assertEquals(file_exists, True, "Screenshot was not written out as expected.") if file_exists: diff --git a/Code/Mantid/scripts/WikiMaker/ScreenshotAlgDialogs.py b/Code/Mantid/scripts/WikiMaker/ScreenshotAlgDialogs.py index 2017cf855904..ff9be6948c72 100644 --- a/Code/Mantid/scripts/WikiMaker/ScreenshotAlgDialogs.py +++ b/Code/Mantid/scripts/WikiMaker/ScreenshotAlgDialogs.py @@ -14,10 +14,10 @@ def screenShotAlgorithm(alg_name): interface_manager = mantidqtpython.MantidQt.API.InterfaceManager() dlg = threadsafe_call( interface_manager.createDialogFromName, alg_name, True) - file = alg_name + "_dlg" - screenshot_to_dir(widget=dlg, filename=file, screenshot_dir=screenshotdir) + filename = alg_name + "_dlg.png" + screenshot_to_dir(widget=dlg, filename=filename, screenshot_dir=screenshotdir) threadsafe_call(dlg.close) - file_abs = os.path.join(screenshotdir, file + ".png") + file_abs = os.path.join(screenshotdir, filename) """ Screenshot all registered algorithms. From 206afa4a34e7ff0858ff43050c6fb68e47869635 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Fri, 30 May 2014 11:18:17 +0100 Subject: [PATCH 48/86] Remove unrequired algm_categories directive. The standard 'categories' one can now be used in both cases. Refs #9521 --- .../mantiddoc/directives/categories.py | 80 ++++++++----------- 1 file changed, 34 insertions(+), 46 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py index c0ce2864e709..c5b7f51bcb75 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -94,15 +94,17 @@ def __init__(self, name, docname): class CategoriesDirective(BaseDirective): """ - Records the page as part of the given categories. Index pages for each + Records the page as part of given categories. Index pages for each category are then automatically created after all pages are collected together. Subcategories can be given using the "\\" separator, e.g. Algorithms\\Transforms + + If the argument list is empty then the the file is assumed to be an algorithm file + and the lists is pulled from the algoritm object """ - # requires at least 1 category - required_arguments = 1 + required_arguments = 0 # it can be in many categories and we put an arbitrary upper limit here optional_arguments = 25 @@ -125,16 +127,40 @@ def _get_categories_list(self): Returns: list: A list of strings containing the required categories """ - # Simply return all of the arguments as strings - return self.arguments + # if the argument list is empty then assume this is in an algorithm file + args = self.arguments + if len(args) > 0: + return args + else: + return self._get_algorithm_categories_list() + + def _get_algorithm_categories_list(self): + """ + Returns a list of the category strings + + Returns: + list: A list of strings containing the required categories + """ + category_list = ["Algorithms"] + alg_cats = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()).categories() + for cat in alg_cats: + # double up the category separators so they are not treated as escape characters + category_list.append(cat.replace("\\", "\\\\")) + + return category_list def _get_display_name(self): """ Returns the name of the item as it should appear in the category """ - env = self.state.document.settings.env - # env.docname returns relative path from doc root. Use name after last "/" separator - return env.docname.split("/")[-1] + # If there are no arguments then take the name directly from the document name, else + # assume it is an algorithm and use its name + if len(self.arguments) > 0: + env = self.state.document.settings.env + # env.docname returns relative path from doc root. Use name after last "/" separator + return env.docname.split("/")[-1] + else: + return self.algorithm_name() def _create_links_and_track(self, page_name, category_list): """ @@ -195,42 +221,6 @@ def _create_links_and_track(self, page_name, category_list): #--------------------------------------------------------------------------------- -class AlgorithmCategoryDirective(CategoriesDirective): - """ - Supports the "algm_categories" directive that takes a single - argument and pulls the categories from an algorithm object. - - In addition to adding the named page to the requested category, it - also appends it to the "Algorithms" category - """ - # requires at least 1 argument - required_arguments = 0 - # no other arguments - optional_arguments = 0 - - def _get_categories_list(self): - """ - Returns a list of the category strings - - Returns: - list: A list of strings containing the required categories - """ - category_list = ["Algorithms"] - alg_cats = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()).categories() - for cat in alg_cats: - # double up the category separators so they are not treated as escape characters - category_list.append(cat.replace("\\", "\\\\")) - - return category_list - - def _get_display_name(self): - """ - Returns the name of the item as it should appear in the category - """ - return self.algorithm_name() - -#--------------------------------------------------------------------------------- - def html_collect_pages(app): """ Callback for the 'html-collect-pages' Sphinx event. Adds category @@ -302,8 +292,6 @@ def purge_categories(app, env, docname): def setup(app): # Add categories directive app.add_directive('categories', CategoriesDirective) - # Add algm_categories directive - app.add_directive('algm_categories', AlgorithmCategoryDirective) # connect event html collection to handler app.connect("html-collect-pages", html_collect_pages) From 84e983f996d5ccd78563dbaaa5af092f431dff3e Mon Sep 17 00:00:00 2001 From: Vickie Lynch Date: Fri, 30 May 2014 10:35:27 -0400 Subject: [PATCH 49/86] Refs #9546 option for AllowPermutations with default of true --- .../Crystal/src/SelectCellOfType.cpp | 6 ++- .../Crystal/src/SelectCellWithForm.cpp | 2 +- .../Crystal/src/ShowPossibleCells.cpp | 2 +- .../inc/MantidQtCustomInterfaces/MantidEV.ui | 48 +++++++++++++++---- .../MantidQtCustomInterfaces/MantidEVWorker.h | 3 +- .../CustomInterfaces/src/MantidEV.cpp | 7 ++- .../CustomInterfaces/src/MantidEVWorker.cpp | 7 ++- .../scripts/SCD_Reduction/ReduceSCD.config | 3 +- .../scripts/SCD_Reduction/ReduceSCD_OneRun.py | 2 + .../SCD_Reduction/ReduceSCD_Parallel.py | 3 +- 10 files changed, 66 insertions(+), 17 deletions(-) diff --git a/Code/Mantid/Framework/Crystal/src/SelectCellOfType.cpp b/Code/Mantid/Framework/Crystal/src/SelectCellOfType.cpp index 3d734c0ea0fe..be760fd25532 100644 --- a/Code/Mantid/Framework/Crystal/src/SelectCellOfType.cpp +++ b/Code/Mantid/Framework/Crystal/src/SelectCellOfType.cpp @@ -114,6 +114,9 @@ namespace Crystal this->declareProperty(new PropertyWithValue( "AverageError", 0.0, Direction::Output), "The average HKL indexing error if apply==true."); + + this->declareProperty( "AllowPermutations", true, + "Allow permutations of conventional cells" ); } //-------------------------------------------------------------------------- @@ -143,9 +146,10 @@ namespace Crystal std::string centering = this->getProperty("Centering"); bool apply = this->getProperty("Apply"); double tolerance = this->getProperty("Tolerance"); + bool allowPermutations = this->getProperty("AllowPermutations"); std::vector list = - ScalarUtils::GetCells( UB, cell_type, centering ); + ScalarUtils::GetCells( UB, cell_type, centering, allowPermutations ); ConventionalCell info = ScalarUtils::GetCellBestError( list, true ); diff --git a/Code/Mantid/Framework/Crystal/src/SelectCellWithForm.cpp b/Code/Mantid/Framework/Crystal/src/SelectCellWithForm.cpp index 8cbfaf38c1eb..6927b8854ae9 100644 --- a/Code/Mantid/Framework/Crystal/src/SelectCellWithForm.cpp +++ b/Code/Mantid/Framework/Crystal/src/SelectCellWithForm.cpp @@ -97,7 +97,7 @@ namespace Crystal this->declareProperty(new PropertyWithValue( "AverageError", 0.0, Direction::Output), "The average HKL indexing error if apply==true."); - this->declareProperty( "AllowPermutations", false, + this->declareProperty( "AllowPermutations", true, "Allow permutations of conventional cells" ); } diff --git a/Code/Mantid/Framework/Crystal/src/ShowPossibleCells.cpp b/Code/Mantid/Framework/Crystal/src/ShowPossibleCells.cpp index 1910f2b4bd74..b8102ebe3261 100644 --- a/Code/Mantid/Framework/Crystal/src/ShowPossibleCells.cpp +++ b/Code/Mantid/Framework/Crystal/src/ShowPossibleCells.cpp @@ -87,7 +87,7 @@ namespace Crystal new PropertyWithValue( "NumberOfCells", 0, Direction::Output), "Gets set with the number of possible cells."); - this->declareProperty( "AllowPermutations", false, + this->declareProperty( "AllowPermutations", true, "Allow permutations of conventional cells" ); } diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/MantidEV.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/MantidEV.ui index b522cd7f8cce..6bfc0442db09 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/MantidEV.ui +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/MantidEV.ui @@ -57,7 +57,7 @@ - 0 + 3 @@ -616,8 +616,8 @@ 0 0 - 372 - 330 + 903 + 708 @@ -1823,8 +1823,8 @@ 0 0 - 345 - 280 + 903 + 708 @@ -1924,6 +1924,36 @@ + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 15 + 0 + + + + + + + + Allow permutations of conventional cells. + + + Allow Permutations + + + + + @@ -2378,8 +2408,8 @@ 0 0 - 389 - 188 + 903 + 708 @@ -2632,8 +2662,8 @@ 0 0 - 606 - 635 + 903 + 708 diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/MantidEVWorker.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/MantidEVWorker.h index 3aab0ab919ce..af3a2a596b9f 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/MantidEVWorker.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/MantidEVWorker.h @@ -129,7 +129,8 @@ class DLLExport MantidEVWorker /// Show the possible conventional cells for a Niggli cell bool showCells( const std::string & peaks_ws_name, double max_scalar_error, - bool best_only ); + bool best_only, + bool allow_perm); /// Select conventional cell using the cell type and centering bool selectCellOfType( const std::string & peaks_ws_name, diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/MantidEV.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/MantidEV.cpp index 160385ddb29f..12e730113c93 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/MantidEV.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/MantidEV.cpp @@ -476,6 +476,7 @@ void MantidEV::setDefaultState_slot() m_uiForm.ShowPossibleCells_rbtn->setChecked(true); m_uiForm.MaxScalarError_ledt->setText("0.2"); m_uiForm.BestCellOnly_ckbx->setChecked(true); + m_uiForm.AllowPermutations_ckbx->setChecked(true); m_uiForm.SelectCellOfType_rbtn->setChecked(false); m_uiForm.CellType_cmbx->setCurrentIndex(0); m_uiForm.CellCentering_cmbx->setCurrentIndex(0); @@ -1029,10 +1030,11 @@ void MantidEV::chooseCell_slot() if ( show_cells ) { bool best_only = m_uiForm.BestCellOnly_ckbx->isChecked(); + bool allow_perm = m_uiForm.AllowPermutations_ckbx->isChecked(); double max_scalar_error = 0; if ( !getPositiveDouble( m_uiForm.MaxScalarError_ledt, max_scalar_error ) ) return; - if ( !worker->showCells( peaks_ws_name, max_scalar_error, best_only ) ) + if ( !worker->showCells( peaks_ws_name, max_scalar_error, best_only, allow_perm ) ) { errorMessage("Failed to Show Conventional Cells"); } @@ -1727,6 +1729,7 @@ void MantidEV::setEnabledShowCellsParams_slot( bool on ) m_uiForm.MaxScalarError_lbl->setEnabled( on ); m_uiForm.MaxScalarError_ledt->setEnabled( on ); m_uiForm.BestCellOnly_ckbx->setEnabled( on ); + m_uiForm.AllowPermutations_ckbx->setEnabled( on ); } @@ -2078,6 +2081,7 @@ void MantidEV::saveSettings( const std::string & filename ) state->setValue("ShowPossibleCells_rbtn",m_uiForm.ShowPossibleCells_rbtn->isChecked()); state->setValue("MaxScalarError_ledt",m_uiForm.MaxScalarError_ledt->text()); state->setValue("BestCellOnly_ckbx",m_uiForm.BestCellOnly_ckbx->isChecked()); + state->setValue("BestCellOnly_ckbx",m_uiForm.AllowPermutations_ckbx->isChecked()); state->setValue("SelectCellOfType_rbtn",m_uiForm.SelectCellOfType_rbtn->isChecked()); state->setValue("CellType_cmbx",m_uiForm.CellType_cmbx->currentIndex()); state->setValue("CellCentering_cmbx",m_uiForm.CellCentering_cmbx->currentIndex()); @@ -2190,6 +2194,7 @@ void MantidEV::loadSettings( const std::string & filename ) restore( state, "ShowPossibleCells_rbtn", m_uiForm.ShowPossibleCells_rbtn ); restore( state, "MaxScalarError_ledt", m_uiForm.MaxScalarError_ledt ); restore( state, "BestCellOnly_ckbx", m_uiForm.BestCellOnly_ckbx ); + restore( state, "AllowPermutations_ckbx", m_uiForm.AllowPermutations_ckbx ); restore( state, "SelectCellOfType_rbtn", m_uiForm.SelectCellOfType_rbtn ); restore( state, "CellType_cmbx", m_uiForm.CellType_cmbx ); restore( state, "CellCentering_cmbx", m_uiForm.CellCentering_cmbx ); diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/MantidEVWorker.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/MantidEVWorker.cpp index 8119135550aa..0cba832b97f1 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/MantidEVWorker.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/MantidEVWorker.cpp @@ -614,12 +614,16 @@ bool MantidEVWorker::indexPeaksWithUB( const std::string & peaks_ws_name, * is allowed for a possible cell to be listed. * @param best_only If true, only the best fitting cell of any * particular type will be displayed. + * @param allow_perm If true, permutations are used to find the + * best fitting cell of any + * particular type. * * @return true if the ShowPossibleCells algorithm completes successfully. */ bool MantidEVWorker::showCells( const std::string & peaks_ws_name, double max_scalar_error, - bool best_only ) + bool best_only, + bool allow_perm) { if ( !isPeaksWorkspace( peaks_ws_name ) ) return false; @@ -628,6 +632,7 @@ bool MantidEVWorker::showCells( const std::string & peaks_ws_name, alg->setProperty("PeaksWorkspace",peaks_ws_name); alg->setProperty("MaxScalarError",max_scalar_error); alg->setProperty("BestOnly",best_only); + alg->setProperty("AllowPermutations",allow_perm); if ( alg->execute() ) return true; diff --git a/Code/Mantid/scripts/SCD_Reduction/ReduceSCD.config b/Code/Mantid/scripts/SCD_Reduction/ReduceSCD.config index 7f3d6a0b3437..67b5014828af 100644 --- a/Code/Mantid/scripts/SCD_Reduction/ReduceSCD.config +++ b/Code/Mantid/scripts/SCD_Reduction/ReduceSCD.config @@ -90,11 +90,12 @@ UseFirstLattice True # .integrate file, and will combine, re-index and convert to a conventional # cell, so these can usually be left as None. # -# Cell trnasformation is not applied to cylindrical profiles, +# Cell transformation is not applied to cylindrical profiles, # i.e. use None if cylindrical integration is used! # cell_type None centering None +allow_perm True # # Number of peaks to find, per run, both for getting the UB matrix, diff --git a/Code/Mantid/scripts/SCD_Reduction/ReduceSCD_OneRun.py b/Code/Mantid/scripts/SCD_Reduction/ReduceSCD_OneRun.py index fb1aae072322..dc3686a284a4 100644 --- a/Code/Mantid/scripts/SCD_Reduction/ReduceSCD_OneRun.py +++ b/Code/Mantid/scripts/SCD_Reduction/ReduceSCD_OneRun.py @@ -79,6 +79,7 @@ monitor_index = params_dictionary[ "monitor_index" ] cell_type = params_dictionary[ "cell_type" ] centering = params_dictionary[ "centering" ] +allow_perm = params_dictionary[ "allow_perm" ] num_peaks_to_find = params_dictionary[ "num_peaks_to_find" ] min_d = params_dictionary[ "min_d" ] max_d = params_dictionary[ "max_d" ] @@ -344,6 +345,7 @@ cell_type + "_" + centering + ".integrate" SelectCellOfType( PeaksWorkspace=peaks_ws, CellType=cell_type, Centering=centering, + AllowPermutations=allow_perm, Apply=True, Tolerance=tolerance ) SaveIsawPeaks( InputWorkspace=peaks_ws, AppendFile=False, Filename=run_conventional_integrate_file ) diff --git a/Code/Mantid/scripts/SCD_Reduction/ReduceSCD_Parallel.py b/Code/Mantid/scripts/SCD_Reduction/ReduceSCD_Parallel.py index 44116ccddbf4..68572b5974d8 100644 --- a/Code/Mantid/scripts/SCD_Reduction/ReduceSCD_Parallel.py +++ b/Code/Mantid/scripts/SCD_Reduction/ReduceSCD_Parallel.py @@ -91,6 +91,7 @@ def run ( self ): tolerance = params_dictionary[ "tolerance" ] cell_type = params_dictionary[ "cell_type" ] centering = params_dictionary[ "centering" ] +allow_perm = params_dictionary[ "allow_perm" ] run_nums = params_dictionary[ "run_nums" ] use_cylindrical_integration = params_dictionary[ "use_cylindrical_integration" ] @@ -218,7 +219,7 @@ def run ( self ): conventional_matrix_file = conv_name + ".mat" SelectCellOfType( PeaksWorkspace=peaks_ws, CellType=cell_type, Centering=centering, - Apply=True, Tolerance=tolerance ) + AllowPermutations=allow_perm, Apply=True, Tolerance=tolerance ) SaveIsawPeaks( InputWorkspace=peaks_ws, AppendFile=False, Filename=conventional_integrate_file ) SaveIsawUB( InputWorkspace=peaks_ws, Filename=conventional_matrix_file ) From f3180eff4ca65942e34073d4db3c79b3d15c836f Mon Sep 17 00:00:00 2001 From: Vickie Lynch Date: Fri, 30 May 2014 11:39:12 -0400 Subject: [PATCH 50/86] Refs #9546 only write ls files when PerRun is checked --- .../src/OptimizeLatticeForCellType.cpp | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/Code/Mantid/Framework/Crystal/src/OptimizeLatticeForCellType.cpp b/Code/Mantid/Framework/Crystal/src/OptimizeLatticeForCellType.cpp index 84a2f33eaa96..f5432b83209f 100644 --- a/Code/Mantid/Framework/Crystal/src/OptimizeLatticeForCellType.cpp +++ b/Code/Mantid/Framework/Crystal/src/OptimizeLatticeForCellType.cpp @@ -108,9 +108,7 @@ namespace Mantid int edge = this->getProperty("EdgePixels"); std::string cell_type = getProperty("CellType"); DataObjects::PeaksWorkspace_sptr ws = getProperty("PeaksWorkspace"); - std::string outputdir = getProperty("OutputDirectory"); - if (outputdir[outputdir.size()-1] != '/') - outputdir += "/"; + std::vector runWS; for (int i= int(ws->getNumberPeaks())-1; i>=0; --i) @@ -316,19 +314,25 @@ namespace Mantid alg->executeAsChildAlg(); } AnalysisDataService::Instance().remove("_peaks"); - // Save Peaks - Mantid::API::IAlgorithm_sptr savePks_alg = createChildAlgorithm("SaveIsawPeaks"); - savePks_alg->setPropertyValue("InputWorkspace", runWS[i_run]->getName()); - savePks_alg->setProperty("Filename", outputdir + "ls"+runWS[i_run]->getName()+".integrate"); - savePks_alg->executeAsChildAlg(); - g_log.notice() <<"See output file: " << outputdir + "ls"+runWS[i_run]->getName()+".integrate" << "\n"; - // Save UB - Mantid::API::IAlgorithm_sptr saveUB_alg = createChildAlgorithm("SaveIsawUB"); - saveUB_alg->setPropertyValue("InputWorkspace", runWS[i_run]->getName()); - saveUB_alg->setProperty("Filename", outputdir + "ls"+runWS[i_run]->getName()+".mat"); - saveUB_alg->executeAsChildAlg(); - // Show the names of files written - g_log.notice() <<"See output file: " << outputdir + "ls"+runWS[i_run]->getName()+".mat" << "\n"; + if ( perRun) + { + std::string outputdir = getProperty("OutputDirectory"); + if (outputdir[outputdir.size()-1] != '/') + outputdir += "/"; + // Save Peaks + Mantid::API::IAlgorithm_sptr savePks_alg = createChildAlgorithm("SaveIsawPeaks"); + savePks_alg->setPropertyValue("InputWorkspace", runWS[i_run]->getName()); + savePks_alg->setProperty("Filename", outputdir + "ls"+runWS[i_run]->getName()+".integrate"); + savePks_alg->executeAsChildAlg(); + g_log.notice() <<"See output file: " << outputdir + "ls"+runWS[i_run]->getName()+".integrate" << "\n"; + // Save UB + Mantid::API::IAlgorithm_sptr saveUB_alg = createChildAlgorithm("SaveIsawUB"); + saveUB_alg->setPropertyValue("InputWorkspace", runWS[i_run]->getName()); + saveUB_alg->setProperty("Filename", outputdir + "ls"+runWS[i_run]->getName()+".mat"); + saveUB_alg->executeAsChildAlg(); + // Show the names of files written + g_log.notice() <<"See output file: " << outputdir + "ls"+runWS[i_run]->getName()+".mat" << "\n"; + } } } //----------------------------------------------------------------------------------------- From f3d39a1988d3ddd75939725c401e078d2aaca0d3 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Fri, 30 May 2014 17:27:41 +0100 Subject: [PATCH 51/86] Simplify creating the screenshots. They are no created in a directory specified by an environment variable so that they don't have to touch the source directory. Refs #9521 --- Code/Mantid/docs/CMakeLists.txt | 5 +- Code/Mantid/docs/runsphinx.py.in | 6 +- .../mantiddoc/directives/algorithm.py | 77 +++++++------------ 3 files changed, 34 insertions(+), 54 deletions(-) diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index b6a1bed99409..16da0325eb8d 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -8,6 +8,7 @@ if ( SPHINX_FOUND ) # We generate a target per build type, i.e docs-html set ( SPHINX_BUILD ${CMAKE_BINARY_DIR}/docs ) + set ( SCREENSHOTS_DIR ${SPHINX_BUILD}/screenshots ) set ( BUILDER html ) configure_file ( runsphinx.py.in runsphinx_html.py @ONLY ) @@ -15,9 +16,9 @@ if ( SPHINX_FOUND ) set ( TARGET_PREFIX docs) # HTML target - add_custom_target ( ${TARGET_PREFIX}-html + add_custom_target ( ${TARGET_PREFIX}-html COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MantidPlot -xq runsphinx_html.py - COMMENT "Build Sphinx html documentation" + COMMENT "Building html documentation" ) endif () diff --git a/Code/Mantid/docs/runsphinx.py.in b/Code/Mantid/docs/runsphinx.py.in index d675706b9819..8d1011908dd0 100644 --- a/Code/Mantid/docs/runsphinx.py.in +++ b/Code/Mantid/docs/runsphinx.py.in @@ -11,9 +11,13 @@ from pkg_resources import load_entry_point mantidplot = "@CMAKE_RUNTIME_OUTPUT_DIRECTORY@/MantidPlot" builder = "@BUILDER@" src_dir = "@CMAKE_CURRENT_SOURCE_DIR@/source" +screenshots_dir = "@SCREENSHOTS_DIR@" output_dir = os.path.join("@SPHINX_BUILD@", builder) -argv = [mantidplot,'-b', builder, src_dir, output_dir] +# set environment +os.environ["SCREENSHOTS_DIR"] = screenshots_dir +# fake the sys args +argv = [mantidplot,'-b', builder, src_dir, output_dir] if __name__ == '__main__': sys.exit( load_entry_point(__requires__, 'console_scripts', 'sphinx-build')(argv) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index bb20442d8382..af161d0fa331 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -23,6 +23,10 @@ class AlgorithmDirective(BaseDirective): - Table of contents If the algorithms is deprecated then a warning is inserted. + + It requires a SCREENSHOTS_DIR environment variable to be set to the + directory where a screenshot should be generated. If it is not set then + a RuntimeError occurs """ required_arguments, optional_arguments = 0, 0 @@ -89,8 +93,8 @@ def _insert_toc(self): def _create_screenshot(self): """ - Creates a screenshot for the named algorithm in an "images/screenshots" - subdirectory of the currently processed document + Creates a screenshot for the named algorithm in the "images/screenshots" + subdirectory. The file will be named "algorithmname-vX_dlg.png", e.g. Rebin-v1_dlg.png @@ -115,21 +119,32 @@ def _create_screenshot(self): def _insert_screenshot_link(self, img_path): """ Outputs an image link with a custom :class: style. The filename is - extracted from the path given and then a link to /images/screenshots/filename.png - is created. Sphinx handles copying the files over to the build directory - and reformatting the links + extracted from the path given and then a relative link to the + directory specified by the SCREENSHOTS_DIR environment variable from + the root source directory is formed. Args: img_path (str): The full path as on the filesystem to the image """ + env = self.state.document.settings.env format_str = ".. figure:: %s\n"\ " :class: screenshot\n\n"\ " %s\n\n" + # Sphinx assumes that an absolute path is actually relative to the directory containing the + # conf.py file and a relative path is relative to the directory where the current rst file + # is located. + filename = os.path.split(img_path)[1] - path = "/images/screenshots/" + filename - caption = "A screenshot of the **" + self.algorithm_name() + "** dialog." + cfgdir = env.srcdir + screenshots_dir = self._screenshot_directory() + rel_path = os.path.relpath(screenshots_dir, cfgdir) + # This is a href link so is expected to be in unix style + rel_path = rel_path.replace("\\","/") + # stick a "/" as the first character so Sphinx computes relative location from source directory + path = "/" + rel_path + "/" + filename + caption = "A screenshot of the **" + self.algorithm_name() + "** dialog." self.add_rst(format_str % (path, caption)) def _screenshot_directory(self): @@ -145,7 +160,10 @@ def _screenshot_directory(self): str: A string containing a path to where the screenshots should be created. This will be a filesystem path """ - return screenshot_directory(self.state.document.settings.env.app) + try: + return os.environ["SCREENSHOTS_DIR"] + except: + raise RuntimeError("The '.. algorithm::' directive requires a SCREENSHOTS_DIR environment variable to be set.") def _insert_deprecation_warning(self): """ @@ -169,24 +187,6 @@ def _insert_deprecation_warning(self): #------------------------------------------------------------------------------------------------------------ -def screenshot_directory(app): - """ - Returns a full path where the screenshots should be generated. They are - put in a screenshots subdirectory of the main images directory in the source - tree. Sphinx then handles copying them to the final location - - Arguments: - app (Sphinx.Application): A reference to the application object - - Returns: - str: A string containing a path to where the screenshots should be created. This will - be a filesystem path - """ - cfg_dir = app.srcdir - return os.path.join(cfg_dir, "images", "screenshots") - -#------------------------------------------------------------------------------------------------------------ - def html_collect_pages(app): """ Write out unversioned algorithm pages that redirect to the highest version of the algorithm @@ -206,27 +206,6 @@ def html_collect_pages(app): #------------------------------------------------------------------------------------------------------------ -def purge_screenshots(app, exception): - """ - Remove all screenshots images that were generated in the source directory during the build - - Arguments: - app (Sphinx.Application): A reference to the application object - exception (Exception): If an exception was raised this is a reference to the exception object, else None - """ - import os - - screenshot_dir = screenshot_directory(app) - for filename in os.listdir(screenshot_dir): - filepath = os.path.join(screenshot_dir, filename) - try: - if os.path.isfile(filepath): - os.remove(filepath) - except Exception, e: - app.warn(str(e)) - -#------------------------------------------------------------------------------------------------------------ - def setup(app): """ Setup the directives when the extension is activated @@ -238,7 +217,3 @@ def setup(app): # connect event html collection to handler app.connect("html-collect-pages", html_collect_pages) - - # Remove all generated screenshots from the source directory when finished - # so that they don't become stale - app.connect("build-finished", purge_screenshots) \ No newline at end of file From 6aa58fbd775f3b325b520e9e5988c3c81aa59996 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Sun, 1 Jun 2014 20:16:54 +0100 Subject: [PATCH 52/86] Allow older versions of algorithms to be referenced Refs #9521 --- .../sphinxext/mantiddoc/directives/algorithm.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index af161d0fa331..ec14e58566f4 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -16,8 +16,9 @@ class AlgorithmDirective(BaseDirective): Inserts details of an algorithm by querying Mantid Adds: - - A referenceable link for use with Sphinx ":ref:`` tags", if this is - the highest version of the algorithm being processed + - A referenceable link for use with Sphinx ":ref:`` tags". If this is + the highest version of the algorithm being processed then a both + a versioned link is created and a non-versioned link - A title - A screenshot of the algorithm - Table of contents @@ -70,13 +71,19 @@ def _track_algorithm(self): def _insert_reference_link(self): """ Outputs a reference to the top of the algorithm's rst - of the form .. _AlgorithmName: if this is the highest version + of the form ".. _algm-AlgorithmName-vVersion:", so that + the page can be referenced using + :ref:`algm-AlgorithmName-version`. If this is the highest + version then it also outputs a reference ".. _algm-AlgorithmName: """ from mantid.api import AlgorithmFactory alg_name = self.algorithm_name() - if AlgorithmFactory.highestVersion(alg_name) == self.algorithm_version(): - self.add_rst(".. _algorithm|%s:\n" % alg_name) + version = self.algorithm_version() + self.add_rst(".. _algm-%s-v%d:\n" % (alg_name, version)) + + if AlgorithmFactory.highestVersion(alg_name) == version: + self.add_rst(".. _algm-%s:\n" % alg_name) def _insert_pagetitle(self): """ From c5db858279a5efa8e7febcaffe02f63a6f027146 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Sun, 1 Jun 2014 20:26:25 +0100 Subject: [PATCH 53/86] Add docs-test target to run sphinx doctests Refs #9521 --- Code/Mantid/docs/CMakeLists.txt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index 16da0325eb8d..4f19643c5862 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -9,18 +9,26 @@ if ( SPHINX_FOUND ) # We generate a target per build type, i.e docs-html set ( SPHINX_BUILD ${CMAKE_BINARY_DIR}/docs ) set ( SCREENSHOTS_DIR ${SPHINX_BUILD}/screenshots ) - set ( BUILDER html ) - configure_file ( runsphinx.py.in runsphinx_html.py @ONLY ) # targets set ( TARGET_PREFIX docs) # HTML target + set ( BUILDER html ) + configure_file ( runsphinx.py.in runsphinx_html.py @ONLY ) add_custom_target ( ${TARGET_PREFIX}-html COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MantidPlot -xq runsphinx_html.py COMMENT "Building html documentation" ) + # doctest target + set ( BUILDER doctest ) + configure_file ( runsphinx.py.in runsphinx_doctest.py @ONLY ) + add_custom_target ( ${TARGET_PREFIX}-test + COMMAND ${PYTHON_EXECUTABLE} runsphinx_doctest.py + COMMENT "Running documentation tests" + ) + endif () From f02531e224fb248793c7e1062472292a7624187e Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 08:13:47 +0100 Subject: [PATCH 54/86] Use cmake variable to set MantidPlot used for docs build This will allow us to use a package rather than a fresh build if necessary. Refs #9521 --- Code/Mantid/docs/CMakeLists.txt | 15 ++++++++------- Code/Mantid/docs/runsphinx.py.in | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index 4f19643c5862..e9dac87df73b 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -4,20 +4,21 @@ find_package ( Sphinx ) if ( SPHINX_FOUND ) - # Fill in the config file and autogen file with build information - - # We generate a target per build type, i.e docs-html - set ( SPHINX_BUILD ${CMAKE_BINARY_DIR}/docs ) - set ( SCREENSHOTS_DIR ${SPHINX_BUILD}/screenshots ) + # We generate a target per build type, i.e docs-html, docs-test + set ( SPHINX_BUILD_DIR ${CMAKE_BINARY_DIR}/docs ) + set ( SCREENSHOTS_DIR ${SPHINX_BUILD_DIR}/screenshots ) # targets set ( TARGET_PREFIX docs) + # runner - default=current build + set ( DOCS_RUNNER_EXE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/MantidPlot CACHE FILEPATH + "MantidPlot executable to use to build the documentation" ) # HTML target set ( BUILDER html ) configure_file ( runsphinx.py.in runsphinx_html.py @ONLY ) add_custom_target ( ${TARGET_PREFIX}-html - COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MantidPlot -xq runsphinx_html.py + COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_html.py COMMENT "Building html documentation" ) @@ -25,7 +26,7 @@ if ( SPHINX_FOUND ) set ( BUILDER doctest ) configure_file ( runsphinx.py.in runsphinx_doctest.py @ONLY ) add_custom_target ( ${TARGET_PREFIX}-test - COMMAND ${PYTHON_EXECUTABLE} runsphinx_doctest.py + COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_doctest.py COMMENT "Running documentation tests" ) diff --git a/Code/Mantid/docs/runsphinx.py.in b/Code/Mantid/docs/runsphinx.py.in index 8d1011908dd0..45724dc86fe3 100644 --- a/Code/Mantid/docs/runsphinx.py.in +++ b/Code/Mantid/docs/runsphinx.py.in @@ -12,7 +12,7 @@ mantidplot = "@CMAKE_RUNTIME_OUTPUT_DIRECTORY@/MantidPlot" builder = "@BUILDER@" src_dir = "@CMAKE_CURRENT_SOURCE_DIR@/source" screenshots_dir = "@SCREENSHOTS_DIR@" -output_dir = os.path.join("@SPHINX_BUILD@", builder) +output_dir = os.path.join("@SPHINX_BUILD_DIR@", builder) # set environment os.environ["SCREENSHOTS_DIR"] = screenshots_dir From 893e11b45c29368910ec476ec713101d153850b7 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 10:43:49 +0100 Subject: [PATCH 55/86] Add search path for CMake to find Sphinx on Windows. Refs #9559 --- Code/Mantid/Build/CMake/FindSphinx.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Mantid/Build/CMake/FindSphinx.cmake b/Code/Mantid/Build/CMake/FindSphinx.cmake index 42b53237fff2..99727469870f 100644 --- a/Code/Mantid/Build/CMake/FindSphinx.cmake +++ b/Code/Mantid/Build/CMake/FindSphinx.cmake @@ -8,6 +8,7 @@ # SPHINX_EXECUTABLE find_program( SPHINX_EXECUTABLE NAME sphinx-build + PATHS ${CMAKE_LIBRARY_PATH}/Python27/Scripts PATH_SUFFIXES bin DOC "Sphinx documentation generator" ) From 8fac852114a841ed1ccff506a7292aacae3b7b6c Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 10:44:42 +0100 Subject: [PATCH 56/86] Simplify Sphinx runner script. It just calls the sphinx.main() function directly without the need to go through pkg_resources. Refs #9559 --- Code/Mantid/docs/runsphinx.py.in | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/Code/Mantid/docs/runsphinx.py.in b/Code/Mantid/docs/runsphinx.py.in index 45724dc86fe3..02316f03b62b 100644 --- a/Code/Mantid/docs/runsphinx.py.in +++ b/Code/Mantid/docs/runsphinx.py.in @@ -2,24 +2,18 @@ module. This script calls the sphinx entry point with the necessary arguments """ - -__requires__ = 'Sphinx' -import sys import os -from pkg_resources import load_entry_point +import sys + +# set environment +os.environ["SCREENSHOTS_DIR"] = "@SCREENSHOTS_DIR@" -mantidplot = "@CMAKE_RUNTIME_OUTPUT_DIRECTORY@/MantidPlot" builder = "@BUILDER@" src_dir = "@CMAKE_CURRENT_SOURCE_DIR@/source" -screenshots_dir = "@SCREENSHOTS_DIR@" output_dir = os.path.join("@SPHINX_BUILD_DIR@", builder) -# set environment -os.environ["SCREENSHOTS_DIR"] = screenshots_dir -# fake the sys args -argv = [mantidplot,'-b', builder, src_dir, output_dir] -if __name__ == '__main__': - sys.exit( - load_entry_point(__requires__, 'console_scripts', 'sphinx-build')(argv) - ) +if __name__ == "__main__": + from sphinx import main + argv = [sys.executable, "-b", builder, src_dir, output_dir] + sys.exit(main(argv)) From 95be1d53d7b983934194b4cbed996281b1d12509 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 10:51:46 +0100 Subject: [PATCH 57/86] Group the documentation targets in Visual Studio. Refs #9559 --- Code/Mantid/MantidPlot/docs/python/CMakeLists.txt | 3 +++ Code/Mantid/docs/CMakeLists.txt | 3 +++ Code/Mantid/docs/qtassistant/CMakeLists.txt | 1 + 3 files changed, 7 insertions(+) diff --git a/Code/Mantid/MantidPlot/docs/python/CMakeLists.txt b/Code/Mantid/MantidPlot/docs/python/CMakeLists.txt index b31900a21e74..8f761161f7f2 100644 --- a/Code/Mantid/MantidPlot/docs/python/CMakeLists.txt +++ b/Code/Mantid/MantidPlot/docs/python/CMakeLists.txt @@ -60,6 +60,7 @@ if ( SPHINX_FOUND ) DEPENDS ${SPHINX_CONF_FILES} COMMENT "Generating Python API for sphinx" ) + set_property ( TARGET ${TARGET_NAME}-generateapi PROPERTY FOLDER "Documentation/python" ) # HTML target set ( SPHINX_HTML_BUILD ${SPHINX_BUILD}/html ) @@ -67,6 +68,7 @@ if ( SPHINX_FOUND ) COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MantidPlot -xq runsphinx_html.py COMMENT "Build Sphinx html documentation" ) + set_property ( TARGET ${TARGET_NAME}-html PROPERTY FOLDER "Documentation/python" ) add_dependencies( ${TARGET_NAME}-html ${TARGET_NAME}-generateapi ) # Latex target @@ -75,6 +77,7 @@ if ( SPHINX_FOUND ) COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MantidPlot -xq runsphinx_latex.py COMMENT "Build Python Sphinx latex documentation" ) + set_property ( TARGET ${TARGET_NAME}-latex PROPERTY FOLDER "Documentation/python" ) add_dependencies( ${TARGET_NAME}-latex ${TARGET_NAME}-generateapi ) diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index e9dac87df73b..0fc353a6d9c1 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -21,6 +21,8 @@ if ( SPHINX_FOUND ) COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_html.py COMMENT "Building html documentation" ) + # Group within VS + set_property ( TARGET ${TARGET_PREFIX}-html PROPERTY FOLDER "Documentation" ) # doctest target set ( BUILDER doctest ) @@ -29,6 +31,7 @@ if ( SPHINX_FOUND ) COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_doctest.py COMMENT "Running documentation tests" ) + set_property ( TARGET ${TARGET_PREFIX}-test PROPERTY FOLDER "documentation" ) endif () diff --git a/Code/Mantid/docs/qtassistant/CMakeLists.txt b/Code/Mantid/docs/qtassistant/CMakeLists.txt index 496ebec13402..c9abcef608f7 100644 --- a/Code/Mantid/docs/qtassistant/CMakeLists.txt +++ b/Code/Mantid/docs/qtassistant/CMakeLists.txt @@ -167,6 +167,7 @@ find_program ( DVIPNG_EXE dvipng ) POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory ${HELP_OUT_DIR} ${HELP_BIN_OUT_DIR} ) + set_property ( TARGET ${TARGET_PREFIX}-test PROPERTY FOLDER "Documentation" ) ########################################################################################### # Installation settings From b9c991e774490d73f4f5af9dad8d2a8c3625e09c Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 11:07:08 +0100 Subject: [PATCH 58/86] Use .summary() instead of deprecated .getWikiSummary() Refs #9559 --- Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py index 3d92a9071bd8..23fde38832eb 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/summary.py @@ -15,7 +15,7 @@ def run(self): """ self.add_rst(self.make_header("Summary")) alg = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) - self.add_rst(alg.getWikiSummary()) + self.add_rst(alg.summary()) self.commit_rst() return [] From 334175b9ca254322c5405534a590198f07129b40 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 12:19:02 +0100 Subject: [PATCH 59/86] Ensure MantidPlot exits with 0 status code on script success. Refs #9559 --- Code/Mantid/MantidPlot/src/ApplicationWindow.cpp | 13 +++++++++++++ Code/Mantid/MantidPlot/src/ApplicationWindow.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp b/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp index 2b4b38256c9c..071663e8c05a 100644 --- a/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp +++ b/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp @@ -16438,6 +16438,7 @@ void ApplicationWindow::executeScriptFile(const QString & filename, const Script code += in.readLine() + "\n"; } Script *runner = scriptingEnv()->newScript(filename, this, Script::NonInteractive); + connect(runner, SIGNAL(finished(const QString &)), this, SLOT(onScriptExecuteSuccess(const QString &))); connect(runner, SIGNAL(error(const QString &, const QString &, int)), this, SLOT(onScriptExecuteError(const QString &, const QString &, int))); runner->redirectStdOut(false); scriptingEnv()->redirectStdOut(false); @@ -16459,6 +16460,18 @@ void ApplicationWindow::executeScriptFile(const QString & filename, const Script delete runner; } +/** + * This is the slot for handing script exits when it returns successfully + * + * @param lineNumber The line number in the script that caused the error. + */ +void ApplicationWindow::onScriptExecuteSuccess(const QString & message) +{ + g_log.notice() << message.toStdString() << "\n"; + this->setExitCode(0); + this->exitWithPresetCode(); +} + /** * This is the slot for handing script execution errors. It is only * attached by ::executeScriptFile which is only done in the '-xq' diff --git a/Code/Mantid/MantidPlot/src/ApplicationWindow.h b/Code/Mantid/MantidPlot/src/ApplicationWindow.h index 4e1a157ec32f..c575f6fb3d60 100644 --- a/Code/Mantid/MantidPlot/src/ApplicationWindow.h +++ b/Code/Mantid/MantidPlot/src/ApplicationWindow.h @@ -230,6 +230,8 @@ public slots: ApplicationWindow * loadScript(const QString& fn); /// Runs a script from a file. Mainly useful for automatically running scripts void executeScriptFile(const QString & filename, const Script::ExecutionMode execMode); + /// Slot to connect the script execution success + void onScriptExecuteSuccess(const QString & message); /// Slot to connect the script execution errors to void onScriptExecuteError(const QString & message, const QString & scriptName, int lineNumber); /// Runs an arbitrary lump of python code, return true/false on success/failure. From 315b453bda2fecab8b9333de2eab15f5bc39de1a Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 12:31:37 +0100 Subject: [PATCH 60/86] Correction for CMake folder target. Refs #9559 --- Code/Mantid/docs/qtassistant/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Mantid/docs/qtassistant/CMakeLists.txt b/Code/Mantid/docs/qtassistant/CMakeLists.txt index c9abcef608f7..c6d6592cb7ca 100644 --- a/Code/Mantid/docs/qtassistant/CMakeLists.txt +++ b/Code/Mantid/docs/qtassistant/CMakeLists.txt @@ -167,7 +167,7 @@ find_program ( DVIPNG_EXE dvipng ) POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory ${HELP_OUT_DIR} ${HELP_BIN_OUT_DIR} ) - set_property ( TARGET ${TARGET_PREFIX}-test PROPERTY FOLDER "Documentation" ) + set_property ( TARGET qtassistant PROPERTY FOLDER "Documentation" ) ########################################################################################### # Installation settings From 538904dc35dda4022f983fda22b5bc613c838d48 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 12:38:16 +0100 Subject: [PATCH 61/86] Fix case of VS folder name Refs #9559 --- Code/Mantid/docs/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index 0fc353a6d9c1..31c6e117b4f4 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -31,7 +31,7 @@ if ( SPHINX_FOUND ) COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_doctest.py COMMENT "Running documentation tests" ) - set_property ( TARGET ${TARGET_PREFIX}-test PROPERTY FOLDER "documentation" ) + set_property ( TARGET ${TARGET_PREFIX}-test PROPERTY FOLDER "Documentation" ) endif () From c3b0fe09a69528e007f0e6c9601a275ad8ec253c Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 13:26:57 +0100 Subject: [PATCH 62/86] Exclude the sphinx docs by default from VS build Refs #9559 --- .../MantidPlot/docs/python/CMakeLists.txt | 24 +++++++------------ Code/Mantid/docs/CMakeLists.txt | 12 ++++++---- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/Code/Mantid/MantidPlot/docs/python/CMakeLists.txt b/Code/Mantid/MantidPlot/docs/python/CMakeLists.txt index 8f761161f7f2..250885f4435f 100644 --- a/Code/Mantid/MantidPlot/docs/python/CMakeLists.txt +++ b/Code/Mantid/MantidPlot/docs/python/CMakeLists.txt @@ -60,26 +60,20 @@ if ( SPHINX_FOUND ) DEPENDS ${SPHINX_CONF_FILES} COMMENT "Generating Python API for sphinx" ) - set_property ( TARGET ${TARGET_NAME}-generateapi PROPERTY FOLDER "Documentation/python" ) + # Group within VS and exclude from whole build + set_target_properties ( ${TARGET_NAME}-generateapi PROPERTIES FOLDER "Documentation/python" + EXCLUDE_FROM_DEFAULT_BUILD 1 + EXCLUDE_FROM_ALL 1) + # HTML target set ( SPHINX_HTML_BUILD ${SPHINX_BUILD}/html ) add_custom_target ( ${TARGET_NAME}-html COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MantidPlot -xq runsphinx_html.py COMMENT "Build Sphinx html documentation" ) - set_property ( TARGET ${TARGET_NAME}-html PROPERTY FOLDER "Documentation/python" ) - add_dependencies( ${TARGET_NAME}-html ${TARGET_NAME}-generateapi ) - - # Latex target - set ( SPHINX_LATEX_BUILD ${SPHINX_BUILD}/latex ) - add_custom_target ( ${TARGET_NAME}-latex - COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MantidPlot -xq runsphinx_latex.py - COMMENT "Build Python Sphinx latex documentation" - ) - set_property ( TARGET ${TARGET_NAME}-latex PROPERTY FOLDER "Documentation/python" ) - add_dependencies( ${TARGET_NAME}-latex ${TARGET_NAME}-generateapi ) - - - + # Group within VS and exclude from whole build + set_target_properties ( ${TARGET_NAME}-html PROPERTIES FOLDER "Documentation/python" + EXCLUDE_FROM_DEFAULT_BUILD 1 + EXCLUDE_FROM_ALL 1) endif () diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index 31c6e117b4f4..953974978a30 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -21,8 +21,10 @@ if ( SPHINX_FOUND ) COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_html.py COMMENT "Building html documentation" ) - # Group within VS - set_property ( TARGET ${TARGET_PREFIX}-html PROPERTY FOLDER "Documentation" ) + # Group within VS and exclude from whole build + set_target_properties ( ${TARGET_PREFIX}-html PROPERTIES FOLDER "Documentation" + EXCLUDE_FROM_DEFAULT_BUILD 1 + EXCLUDE_FROM_ALL 1) # doctest target set ( BUILDER doctest ) @@ -31,8 +33,10 @@ if ( SPHINX_FOUND ) COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_doctest.py COMMENT "Running documentation tests" ) - set_property ( TARGET ${TARGET_PREFIX}-test PROPERTY FOLDER "Documentation" ) - + # Group within VS and exclude from whole build + set_target_properties ( ${TARGET_PREFIX}-test PROPERTIES FOLDER "Documentation" + EXCLUDE_FROM_DEFAULT_BUILD 1 + EXCLUDE_FROM_ALL 1) endif () From 28995a15eea34edafcb15c996fd27072c7822189 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 18:21:36 +0100 Subject: [PATCH 63/86] Skip properties directive if there are no properties Refs #9562 --- .../sphinxext/mantiddoc/directives/properties.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py index 0f6177b0ed26..f8219d681902 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/properties.py @@ -13,18 +13,19 @@ def run(self): """ Called by Sphinx when the ..properties:: directive is encountered. """ - self.add_rst(self.make_header("Properties")) - self.add_rst(self._populate_properties_table()) - self.commit_rst() + if self._create_properties_table(): + self.commit_rst() return [] - def _populate_properties_table(self): + def _create_properties_table(self): """ Populates the ReST table with algorithm properties. """ alg = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) alg_properties = alg.getProperties() + if len(alg_properties) == 0: + return False # Stores each property of the algorithm in a tuple. properties = [] @@ -43,8 +44,9 @@ def _populate_properties_table(self): str(prop.documentation.replace("\n", " ")) )) - # Build and add the properties to the ReST table. - return self._build_table(properties) + self.add_rst(self.make_header("Properties")) + self.add_rst(self._build_table(properties)) + return True def _build_table(self, table_content): """ From 04bc795be6436089be5c9a521788289bb99a1288 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 18:22:07 +0100 Subject: [PATCH 64/86] Add an empty index file as Sphinx needs one to run successfully. Refs #9562 --- Code/Mantid/docs/source/index.rst | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Code/Mantid/docs/source/index.rst diff --git a/Code/Mantid/docs/source/index.rst b/Code/Mantid/docs/source/index.rst new file mode 100644 index 000000000000..e69de29bb2d1 From d482ab19967ae093feef4a5f1b7aec4e24d37cc3 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Mon, 2 Jun 2014 18:38:06 +0100 Subject: [PATCH 65/86] Fix deprecated algorithm reference link. Refs #9562 --- Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index ec14e58566f4..d2dfb14d1073 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -187,7 +187,7 @@ def _insert_deprecation_warning(self): match = DEPRECATE_USE_ALG_RE.search(msg) if match is not None and len(match.groups()) == 1: name = match.group(0) - msg = DEPRECATE_USE_ALG_RE.sub(r"Use :ref:`algorithm|\1` instead.", msg) + msg = DEPRECATE_USE_ALG_RE.sub(r"Use :ref:`algm-\1` instead.", msg) self.add_rst(".. warning:: %s" % msg) From 2d45e5df66ed796fd3ea3f5a9e27b2fba11d85e5 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 08:44:49 +0100 Subject: [PATCH 66/86] Disable QtAssistant for documentation transition Refs #9562 --- Code/Mantid/Build/Jenkins/buildscript | 3 +-- Code/Mantid/Build/Jenkins/buildscript.bat | 6 +----- Code/Mantid/docs/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/Code/Mantid/Build/Jenkins/buildscript b/Code/Mantid/Build/Jenkins/buildscript index 48eae4106aef..39b746cee5c8 100755 --- a/Code/Mantid/Build/Jenkins/buildscript +++ b/Code/Mantid/Build/Jenkins/buildscript @@ -35,7 +35,7 @@ if [[ ${JOB_NAME} == *clean* ]]; then # Set some variables relating to the linux packages created from clean builds if [[ $(uname) != 'Darwin' ]]; then if [[ ${JOB_NAME} == *master* ]]; then - PACKAGINGVARS="-DENVVARS_ON_INSTALL=False -DCMAKE_INSTALL_PREFIX=/opt/mantidnightly -DCPACK_PACKAGE_SUFFIX=nightly -DCPACK_SET_DESTDIR=OFF -DQT_ASSISTANT_FETCH_IMAGES=ON" + PACKAGINGVARS="-DENVVARS_ON_INSTALL=False -DCMAKE_INSTALL_PREFIX=/opt/mantidnightly -DCPACK_PACKAGE_SUFFIX=nightly -DCPACK_SET_DESTDIR=OFF" elif [[ ${JOB_NAME} == *develop* ]]; then PACKAGINGVARS="-DENVVARS_ON_INSTALL=False -DCMAKE_INSTALL_PREFIX=/opt/mantidunstable -DCPACK_PACKAGE_SUFFIX=unstable -DCPACK_SET_DESTDIR=OFF" fi @@ -84,7 +84,6 @@ $SCL_ON_RHEL6 "ctest --output-on-failure -R MantidPlot" rm -f *.dmg *.rpm *.deb *.tar.gz # Always build a package on linux if [[ $(uname) != 'Darwin' ]]; then - $SCL_ON_RHEL6 "make -j$BUILD_THREADS qtassistant" $SCL_ON_RHEL6 "cpack" fi diff --git a/Code/Mantid/Build/Jenkins/buildscript.bat b/Code/Mantid/Build/Jenkins/buildscript.bat index d3407080b94a..40f6b1f8462d 100755 --- a/Code/Mantid/Build/Jenkins/buildscript.bat +++ b/Code/Mantid/Build/Jenkins/buildscript.bat @@ -25,9 +25,6 @@ if "%JOB_NAME%"=="%JOB_NAME:clean=%" ( ) else ( set CLEANBUILD=yes rmdir /S /Q build - if NOT "%JOB_NAME%"=="%JOB_NAME:master=%" ( - set DOC_IMAGES=-DQT_ASSISTANT_FETCH_IMAGES=ON - ) ) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: @@ -39,7 +36,7 @@ cd %WORKSPACE%\build ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: CMake configuration ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -"C:\Program Files (x86)\CMake 2.8\bin\cmake.exe" -G "Visual Studio 11 Win64" -DCONSOLE=OFF -DENABLE_CPACK=ON -DMAKE_VATES=ON -DParaView_DIR=%PARAVIEW_DIR% -DUSE_PRECOMPILED_HEADERS=ON %DOC_IMAGES% ..\Code\Mantid +"C:\Program Files (x86)\CMake 2.8\bin\cmake.exe" -G "Visual Studio 11 Win64" -DCONSOLE=OFF -DENABLE_CPACK=ON -DMAKE_VATES=ON -DParaView_DIR=%PARAVIEW_DIR% -DUSE_PRECOMPILED_HEADERS=ON ..\Code\Mantid if ERRORLEVEL 1 exit /B %ERRORLEVEL% ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: @@ -61,7 +58,6 @@ if ERRORLEVEL 1 exit /B %ERRORLEVEL% :: Create the install kit if this is a clean build ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if "%CLEANBUILD%" EQU "yes" ( - msbuild /nologo /m:%BUILD_THREADS% /nr:false /p:Configuration=Release docs/qtassistant/qtassistant.vcxproj if ERRORLEVEL 1 exit /B %ERRORLEVEL% cpack -C Release --config CPackConfig.cmake ) diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index 953974978a30..7b9dc0f3d82f 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -46,7 +46,7 @@ endif () if ( APPLE ) set ( ENABLE_QTASSISTANT False CACHE BOOL "Build qt-assistant documentation" ) else () - set ( ENABLE_QTASSISTANT True CACHE BOOL "Build qt-assistant documentation" ) + set ( ENABLE_QTASSISTANT False CACHE BOOL "Build qt-assistant documentation" FORCE ) endif ( APPLE ) if (ENABLE_QTASSISTANT) From 3c3a13e64d4a14619b7c37f99bf0af0467ff88e1 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 09:03:07 +0100 Subject: [PATCH 67/86] Update README regarding images. Refs #9562 --- Code/Mantid/docs/source/images/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Mantid/docs/source/images/README.md b/Code/Mantid/docs/source/images/README.md index 74c28ac24b79..252b3596b8a3 100644 --- a/Code/Mantid/docs/source/images/README.md +++ b/Code/Mantid/docs/source/images/README.md @@ -1,3 +1,3 @@ Contains images for the documentation -The algorithm screenshots are automatically generated into a `screenshots` subdirectory and this subdirectory has been added to the `.gitignore` in this directory +The path to an image can be referenced in an `rst` file using an absolute path `/images/myimage.png"` as Sphinx treats absolute paths as relative to the root source directory, i.e the directory containing conf.py. \ No newline at end of file From b6b04dc26a56e6179134679dff555d34c641693d Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 09:07:05 +0100 Subject: [PATCH 68/86] Use ImageNotFound.png when no image available. Refs #9562 --- Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index d2dfb14d1073..6bdd47891cfb 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -119,7 +119,7 @@ def _create_screenshot(self): imgpath = algorithm_screenshot(self.algorithm_name(), screenshots_dir, version=self.algorithm_version()) except Exception, exc: env.warn(env.docname, "Unable to generate screenshot for '%s' - %s" % (algorithm_name, str(exc))) - imgpath = os.path.join(screenshots_dir, "failed_dialog.png") + imgpath = os.path.join(screenshots_dir, "ImageNotFound.png") return imgpath From a173e6632027dca16a540663dbf46aa65326689d Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 10:22:47 +0100 Subject: [PATCH 69/86] Fix categories output to allow a namespace. Refs #9562 --- .../mantiddoc/directives/categories.py | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py index c5b7f51bcb75..3c7f777fcebe 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py @@ -9,8 +9,8 @@ from base import BaseDirective, algorithm_name_and_version CATEGORY_INDEX_TEMPLATE = "category.html" -# relative to the "root" directory -CATEGORIES_HTML_DIR = "categories" +# relative to the directory containing the source file +CATEGORIES_HTML_ROOT = "categories" class LinkItem(object): """ @@ -81,14 +81,17 @@ class Category(LinkItem): pages = None # Collection of PageRef objects that form subcategories of this category subcategories = None + # Set to non-empty string to indicate a subdirectory for the final output + namespace = "" - def __init__(self, name, docname): + def __init__(self, name, docname, namespace): super(Category, self).__init__(name, docname) # override default link self.link = "../categories/%s.html" % name self.pages = set([]) self.subcategories = set([]) + self.namespace = namespace #endclass @@ -180,6 +183,12 @@ def _create_links_and_track(self, page_name, category_list): if not hasattr(env, "categories"): env.categories = {} + # If no arguments currently assume algorithm + if len(self.arguments) == 0: + namespace = "algorithms" + else: + namespace = "" + link_rst = "" ncategs = 0 for item in category_list: @@ -192,7 +201,7 @@ def _create_links_and_track(self, page_name, category_list): parent = None for index, categ_name in enumerate(categs): if categ_name not in env.categories: - category = Category(categ_name, env) + category = Category(categ_name, env, namespace) env.categories[categ_name] = category else: category = env.categories[categ_name] @@ -200,10 +209,13 @@ def _create_links_and_track(self, page_name, category_list): category.pages.add(PageRef(page_name, env.docname)) if index > 0: # first is never a child - parent.subcategories.add(Category(categ_name, env.docname)) + parent.subcategories.add(Category(categ_name, env.docname, namespace)) #endif - link_rst += "`%s <../%s/%s.html>`_ | " % (categ_name, CATEGORIES_HTML_DIR, categ_name) + category_dir = CATEGORIES_HTML_ROOT + if namespace != "": + category_dir += "/" + namespace + link_rst += "`%s <../%s/%s.html>`_ | " % (categ_name, category_dir, categ_name) ncategs += 1 parent = category # endfor @@ -246,8 +258,9 @@ def create_category_pages(app): Arguments: app: A Sphinx application object """ - env = app.builder.env + import os.path + env = app.builder.env # jinja2 html template template = CATEGORY_INDEX_TEMPLATE @@ -259,7 +272,10 @@ def create_category_pages(app): context["subcategories"] = sorted(category.subcategories, key = lambda x: x.name[0]) context["pages"] = sorted(category.pages, key = lambda x: x.name[0]) - yield (CATEGORIES_HTML_DIR + "/" + name, context, template) + outdir = CATEGORIES_HTML_ROOT + "/" + if category.namespace != "": + outdir += category.namespace + "/" + yield (outdir + name, context, template) # enddef #----------------------------------------------------------------------------------------------------------- From f0e39c9ad836a3a63cccc55ff1d08c88a12bcf86 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 12:02:07 +0100 Subject: [PATCH 70/86] Pull out wiki sections from cpp files and convert them to reST The converted text is stored in separate .rst files in the docs directory. Refs #9562 --- .../Framework/API/src/CompositeFunction.cpp | 31 -- .../Algorithms/src/AbsorptionCorrection.cpp | 21 -- .../Algorithms/src/AddLogDerivative.cpp | 15 - .../Framework/Algorithms/src/AddPeak.cpp | 7 - .../Framework/Algorithms/src/AddSampleLog.cpp | 7 - .../Algorithms/src/AddTimeSeriesLog.cpp | 20 -- .../Algorithms/src/AlignDetectors.cpp | 16 -- .../Framework/Algorithms/src/AlphaCalc.cpp | 11 - .../Algorithms/src/AppendSpectra.cpp | 35 --- .../Algorithms/src/ApplyCalibration.cpp | 5 - .../Algorithms/src/ApplyDeadTimeCorr.cpp | 16 -- .../Algorithms/src/ApplyDetailedBalance.cpp | 17 -- .../src/ApplyTransmissionCorrection.cpp | 10 - .../Algorithms/src/AsymmetryCalc.cpp | 32 --- .../Algorithms/src/AverageLogData.cpp | 8 - .../Algorithms/src/BinaryOperateMasks.cpp | 12 - .../Algorithms/src/CalMuonDeadTime.cpp | 22 -- .../Algorithms/src/CalculateEfficiency.cpp | 6 - .../src/CalculateFlatBackground.cpp | 13 - .../Algorithms/src/CalculateTransmission.cpp | 20 -- .../src/CalculateTransmissionBeamSpreader.cpp | 6 - .../Algorithms/src/CalculateZscore.cpp | 6 - .../Algorithms/src/ChangeBinOffset.cpp | 12 - .../Algorithms/src/ChangeLogTime.cpp | 4 - .../Algorithms/src/ChangePulsetime.cpp | 8 - .../Algorithms/src/CheckWorkspacesMatch.cpp | 12 - .../Framework/Algorithms/src/ChopData.cpp | 17 -- .../Algorithms/src/ClearMaskFlag.cpp | 4 - .../Algorithms/src/CloneWorkspace.cpp | 9 - .../Algorithms/src/ConjoinWorkspaces.cpp | 17 -- .../Algorithms/src/ConvertAxisByFormula.cpp | 29 -- .../src/ConvertFromDistribution.cpp | 9 - .../src/ConvertMDHistoToMatrixWorkspace.cpp | 6 - .../Algorithms/src/ConvertSpectrumAxis.cpp | 12 - .../Algorithms/src/ConvertSpectrumAxis2.cpp | 9 - .../src/ConvertTableToMatrixWorkspace.cpp | 7 - .../Algorithms/src/ConvertToDistribution.cpp | 9 - .../src/ConvertToEventWorkspace.cpp | 18 -- .../Algorithms/src/ConvertToHistogram.cpp | 8 - .../src/ConvertToMatrixWorkspace.cpp | 8 - .../Algorithms/src/ConvertToPointData.cpp | 6 - .../Framework/Algorithms/src/ConvertUnits.cpp | 21 -- .../src/CopyInstrumentParameters.cpp | 11 - .../Framework/Algorithms/src/CopyLogs.cpp | 10 - .../Framework/Algorithms/src/CopySample.cpp | 15 - .../Algorithms/src/CorrectFlightPaths.cpp | 9 - .../Framework/Algorithms/src/CorrectKiKf.cpp | 9 - .../Algorithms/src/CorrectToFile.cpp | 8 - .../Algorithms/src/CreateCalFileByNames.cpp | 33 --- .../Algorithms/src/CreateDummyCalFile.cpp | 22 -- .../src/CreateFlatEventWorkspace.cpp | 4 - .../src/CreateGroupingWorkspace.cpp | 16 -- .../Algorithms/src/CreateLogPropertyTable.cpp | 26 -- .../src/CreateLogTimeCorrection.cpp | 14 - .../Algorithms/src/CreatePSDBleedMask.cpp | 11 - .../Algorithms/src/CreatePeaksWorkspace.cpp | 10 - .../Algorithms/src/CreateSampleWorkspace.cpp | 18 +- .../src/CreateSingleValuedWorkspace.cpp | 11 - .../src/CreateTransmissionWorkspace.cpp | 5 - .../Algorithms/src/CreateWorkspace.cpp | 17 -- .../Algorithms/src/CropWorkspace.cpp | 13 - .../Algorithms/src/CrossCorrelate.cpp | 14 - .../src/CuboidGaugeVolumeAbsorption.cpp | 14 - .../Algorithms/src/CylinderAbsorption.cpp | 20 -- .../Framework/Algorithms/src/DeleteLog.cpp | 4 - .../Algorithms/src/DeleteWorkspace.cpp | 6 - .../Algorithms/src/DetectorDiagnostic.cpp | 14 - .../Algorithms/src/DetectorEfficiencyCor.cpp | 18 -- .../src/DetectorEfficiencyCorUser.cpp | 15 - .../src/DetectorEfficiencyVariation.cpp | 18 -- .../DiffractionEventCalibrateDetectors.cpp | 18 -- .../Algorithms/src/DiffractionFocussing.cpp | 35 --- .../Algorithms/src/DiffractionFocussing2.cpp | 28 -- .../Framework/Algorithms/src/Divide.cpp | 22 -- .../Algorithms/src/EQSANSResolution.cpp | 5 - .../Algorithms/src/EQSANSTofStructure.cpp | 7 - .../Algorithms/src/EditInstrumentGeometry.cpp | 32 --- .../Algorithms/src/ElasticWindow.cpp | 10 - .../src/EstimatePDDetectorResolution.cpp | 33 --- .../Framework/Algorithms/src/Exponential.cpp | 10 - .../Algorithms/src/ExponentialCorrection.cpp | 12 - .../Algorithms/src/ExportTimeSeriesLog.cpp | 14 - .../Algorithms/src/ExtractFFTSpectrum.cpp | 46 --- .../Framework/Algorithms/src/ExtractMask.cpp | 11 - .../Algorithms/src/ExtractMaskToTable.cpp | 19 -- .../Algorithms/src/ExtractSingleSpectrum.cpp | 8 - Code/Mantid/Framework/Algorithms/src/FFT.cpp | 122 -------- .../Algorithms/src/FFTDerivative.cpp | 6 - .../Framework/Algorithms/src/FFTSmooth.cpp | 22 -- .../Framework/Algorithms/src/FFTSmooth2.cpp | 24 -- .../Algorithms/src/FilterBadPulses.cpp | 5 - .../Algorithms/src/FilterByLogValue.cpp | 40 --- .../Framework/Algorithms/src/FilterByTime.cpp | 15 - .../Algorithms/src/FilterByXValue.cpp | 4 - .../Framework/Algorithms/src/FilterEvents.cpp | 36 --- .../src/FindCenterOfMassPosition.cpp | 9 - .../src/FindCenterOfMassPosition2.cpp | 9 - .../Algorithms/src/FindDeadDetectors.cpp | 11 - .../src/FindDetectorsOutsideLimits.cpp | 12 - .../Algorithms/src/FindPeakBackground.cpp | 20 -- .../Framework/Algorithms/src/FindPeaks.cpp | 41 --- .../Framework/Algorithms/src/FitPeak.cpp | 28 -- .../Algorithms/src/FixGSASInstrumentFile.cpp | 9 - .../Algorithms/src/FlatPlateAbsorption.cpp | 12 - .../src/GeneralisedSecondDifference.cpp | 8 - .../Algorithms/src/GenerateEventsFilter.cpp | 58 ---- .../Algorithms/src/GeneratePeaks.cpp | 29 -- .../Algorithms/src/GeneratePythonScript.cpp | 27 -- .../src/GetDetOffsetsMultiPeaks.cpp | 108 ------- .../Algorithms/src/GetDetectorOffsets.cpp | 16 -- .../Mantid/Framework/Algorithms/src/GetEi.cpp | 21 -- .../Framework/Algorithms/src/GetEi2.cpp | 21 -- .../src/GetTimeSeriesLogInformation.cpp | 33 --- .../Algorithms/src/GroupWorkspaces.cpp | 3 - .../Algorithms/src/HRPDSlabCanAbsorption.cpp | 18 -- .../Algorithms/src/He3TubeEfficiency.cpp | 19 -- .../Framework/Algorithms/src/IQTransform.cpp | 39 --- .../Algorithms/src/IdentifyNoisyDetectors.cpp | 21 -- .../Algorithms/src/IntegrateByComponent.cpp | 8 - .../Framework/Algorithms/src/Integration.cpp | 15 - .../Algorithms/src/InterpolatingRebin.cpp | 25 -- .../Framework/Algorithms/src/InvertMask.cpp | 11 - .../Framework/Algorithms/src/Logarithm.cpp | 9 - .../Framework/Algorithms/src/MaskBins.cpp | 23 -- .../Algorithms/src/MaskBinsFromTable.cpp | 43 --- .../Algorithms/src/MaskDetectorsIf.cpp | 7 - Code/Mantid/Framework/Algorithms/src/Max.cpp | 6 - .../Framework/Algorithms/src/MaxMin.cpp | 8 - .../Algorithms/src/MedianDetectorTest.cpp | 17 -- .../Framework/Algorithms/src/MergeRuns.cpp | 33 --- Code/Mantid/Framework/Algorithms/src/Min.cpp | 6 - .../Mantid/Framework/Algorithms/src/Minus.cpp | 19 -- .../Algorithms/src/ModeratorTzero.cpp | 46 --- .../Algorithms/src/ModeratorTzeroLinear.cpp | 42 --- .../Algorithms/src/MonteCarloAbsorption.cpp | 21 -- .../MultipleScatteringCylinderAbsorption.cpp | 6 - .../Framework/Algorithms/src/Multiply.cpp | 19 -- .../Algorithms/src/MultiplyRange.cpp | 7 - .../Algorithms/src/MuonGroupDetectors.cpp | 8 - .../Algorithms/src/NormaliseByCurrent.cpp | 11 - .../Algorithms/src/NormaliseByDetector.cpp | 102 ------- .../Algorithms/src/NormaliseToMonitor.cpp | 31 -- .../Algorithms/src/NormaliseToUnity.cpp | 7 - .../Algorithms/src/OneMinusExponentialCor.cpp | 16 -- .../Algorithms/src/PDFFourierTransform.cpp | 47 --- .../Mantid/Framework/Algorithms/src/Pause.cpp | 10 - .../Algorithms/src/PerformIndexOperations.cpp | 61 ---- .../src/PlotAsymmetryByLogValue.cpp | 37 --- Code/Mantid/Framework/Algorithms/src/Plus.cpp | 20 -- .../src/PointByPointVCorrection.cpp | 20 -- .../Algorithms/src/PoissonErrors.cpp | 8 - .../Algorithms/src/PolynomialCorrection.cpp | 11 - .../Mantid/Framework/Algorithms/src/Power.cpp | 18 -- .../Algorithms/src/PowerLawCorrection.cpp | 11 - Code/Mantid/Framework/Algorithms/src/Q1D2.cpp | 125 -------- .../Framework/Algorithms/src/Q1DWeighted.cpp | 10 - Code/Mantid/Framework/Algorithms/src/Qxy.cpp | 7 - .../Framework/Algorithms/src/RadiusSum.cpp | 24 -- .../Algorithms/src/RayTracerTester.cpp | 9 - .../Algorithms/src/ReadGroupsFromFile.cpp | 10 - .../Framework/Algorithms/src/RealFFT.cpp | 9 - .../Mantid/Framework/Algorithms/src/Rebin.cpp | 43 --- .../Framework/Algorithms/src/Rebin2D.cpp | 10 - .../Algorithms/src/RebinByPulseTimes.cpp | 19 -- .../Algorithms/src/RebinToWorkspace.cpp | 6 - .../Framework/Algorithms/src/Rebunch.cpp | 10 - .../Algorithms/src/RecordPythonScript.cpp | 4 - .../src/ReflectometryReductionOne.cpp | 26 -- .../Framework/Algorithms/src/Regroup.cpp | 12 - .../Framework/Algorithms/src/RemoveBins.cpp | 34 --- .../Algorithms/src/RemoveExpDecay.cpp | 19 -- .../Algorithms/src/RemoveLowResTOF.cpp | 4 - .../Algorithms/src/RemovePromptPulse.cpp | 5 - .../Algorithms/src/RenameWorkspace.cpp | 9 - .../Algorithms/src/RenameWorkspaces.cpp | 14 - .../Algorithms/src/ReplaceSpecialValues.cpp | 9 - .../Framework/Algorithms/src/ResampleX.cpp | 8 - .../Algorithms/src/ResetNegatives.cpp | 8 - .../src/ResizeRectangularDetector.cpp | 20 -- .../Framework/Algorithms/src/RingProfile.cpp | 37 --- .../Algorithms/src/SANSDirectBeamScaling.cpp | 5 - .../Framework/Algorithms/src/SassenaFFT.cpp | 24 -- .../Algorithms/src/SaveGSASInstrumentFile.cpp | 39 --- .../Mantid/Framework/Algorithms/src/Scale.cpp | 7 - .../Framework/Algorithms/src/ScaleX.cpp | 12 - .../Algorithms/src/SetInstrumentParameter.cpp | 11 - .../Algorithms/src/SetUncertainties.cpp | 5 - .../Framework/Algorithms/src/ShiftLogTime.cpp | 5 - .../Algorithms/src/SignalOverError.cpp | 6 - .../Framework/Algorithms/src/SmoothData.cpp | 8 - .../Algorithms/src/SmoothNeighbours.cpp | 95 ------ .../Mantid/Framework/Algorithms/src/SofQW.cpp | 12 - .../Framework/Algorithms/src/SofQW2.cpp | 5 - .../Framework/Algorithms/src/SofQW3.cpp | 17 -- .../Framework/Algorithms/src/SolidAngle.cpp | 13 - .../Framework/Algorithms/src/SortEvents.cpp | 12 - .../Algorithms/src/SpatialGrouping.cpp | 18 -- .../src/SpecularReflectionCalculateTheta.cpp | 14 - .../src/SpecularReflectionPositionCorrect.cpp | 16 -- .../Algorithms/src/SphericalAbsorption.cpp | 6 - .../Framework/Algorithms/src/StripPeaks.cpp | 10 - .../Algorithms/src/StripVanadiumPeaks.cpp | 12 - .../Algorithms/src/StripVanadiumPeaks2.cpp | 11 - .../Algorithms/src/SumEventsByLogValue.cpp | 23 -- .../Algorithms/src/SumNeighbours.cpp | 9 - .../Framework/Algorithms/src/SumRowColumn.cpp | 16 -- .../Framework/Algorithms/src/SumSpectra.cpp | 35 --- .../Algorithms/src/TOFSANSResolution.cpp | 4 - .../Framework/Algorithms/src/Transpose.cpp | 10 - .../Algorithms/src/UnGroupWorkspace.cpp | 6 - .../Algorithms/src/UnwrapMonitor.cpp | 43 --- .../Framework/Algorithms/src/UnwrapSNS.cpp | 17 -- .../Algorithms/src/UpdateScriptRepository.cpp | 5 - .../Framework/Algorithms/src/WeightedMean.cpp | 9 - .../src/WeightedMeanOfWorkspace.cpp | 15 - .../Crystal/src/AnvredCorrection.cpp | 37 --- .../Crystal/src/CalculatePeaksHKL.cpp | 9 - .../Crystal/src/CalculateUMatrix.cpp | 108 ------- .../Framework/Crystal/src/CentroidPeaks.cpp | 7 - Code/Mantid/Framework/Crystal/src/ClearUB.cpp | 6 - .../Crystal/src/CombinePeaksWorkspaces.cpp | 10 - .../Crystal/src/DiffPeaksWorkspaces.cpp | 4 - .../Framework/Crystal/src/FilterPeaks.cpp | 4 - .../Crystal/src/FindClusterFaces.cpp | 14 - .../Framework/Crystal/src/FindSXPeaks.cpp | 12 - .../Framework/Crystal/src/FindUBUsingFFT.cpp | 18 -- .../Crystal/src/FindUBUsingIndexedPeaks.cpp | 8 - .../src/FindUBUsingLatticeParameters.cpp | 28 -- .../Crystal/src/FindUBUsingMinMaxD.cpp | 8 - .../src/GoniometerAnglesFromPhiRotation.cpp | 11 - Code/Mantid/Framework/Crystal/src/HasUB.cpp | 5 - .../Framework/Crystal/src/IndexPeaks.cpp | 18 -- .../Framework/Crystal/src/IndexSXPeaks.cpp | 11 - .../Crystal/src/IntegratePeakTimeSlices.cpp | 27 -- .../src/IntegratePeaksUsingClusters.cpp | 45 --- .../Framework/Crystal/src/LatticeErrors.cpp | 5 - Code/Mantid/Framework/Crystal/src/LoadHKL.cpp | 35 --- .../Framework/Crystal/src/LoadIsawPeaks.cpp | 11 - .../Crystal/src/LoadIsawSpectrum.cpp | 6 - .../Framework/Crystal/src/LoadIsawUB.cpp | 15 - .../Crystal/src/MaskPeaksWorkspace.cpp | 6 - .../Crystal/src/NormaliseVanadium.cpp | 4 - .../Crystal/src/OptimizeCrystalPlacement.cpp | 27 -- .../src/OptimizeExtinctionParameters.cpp | 4 - .../src/OptimizeLatticeForCellType.cpp | 12 - .../Framework/Crystal/src/PeakHKLErrors.cpp | 36 --- .../Framework/Crystal/src/PeakIntegration.cpp | 7 - .../Crystal/src/PeakIntensityVsRadius.cpp | 51 ---- .../Framework/Crystal/src/PeaksInRegion.cpp | 5 - .../Framework/Crystal/src/PeaksOnSurface.cpp | 6 +- .../Crystal/src/PredictFractionalPeaks.cpp | 23 -- .../Framework/Crystal/src/PredictPeaks.cpp | 29 -- .../Crystal/src/SCDCalibratePanels.cpp | 69 ----- .../Framework/Crystal/src/SCDPanelErrors.cpp | 65 ----- Code/Mantid/Framework/Crystal/src/SaveHKL.cpp | 35 --- .../Framework/Crystal/src/SaveIsawPeaks.cpp | 9 - .../Framework/Crystal/src/SaveIsawUB.cpp | 14 - .../Crystal/src/SelectCellOfType.cpp | 23 -- .../Crystal/src/SelectCellWithForm.cpp | 23 -- .../Framework/Crystal/src/SetGoniometer.cpp | 19 -- .../Crystal/src/SetSpecialCoordinates.cpp | 6 - Code/Mantid/Framework/Crystal/src/SetUB.cpp | 7 - .../Crystal/src/ShowPeakHKLOffsets.cpp | 10 - .../Crystal/src/ShowPossibleCells.cpp | 20 -- Code/Mantid/Framework/Crystal/src/SortHKL.cpp | 5 - .../Crystal/src/SortPeaksWorkspace.cpp | 14 - .../Framework/Crystal/src/TOFExtinction.cpp | 23 -- .../Framework/Crystal/src/TransformHKL.cpp | 8 - .../Framework/CurveFitting/src/Abragam.cpp | 4 - .../Framework/CurveFitting/src/BSpline.cpp | 11 - .../src/BackToBackExponential.cpp | 26 -- .../CurveFitting/src/BivariateNormal.cpp | 40 --- .../src/CalculateGammaBackground.cpp | 10 - .../Framework/CurveFitting/src/Chebyshev.cpp | 26 -- .../CurveFitting/src/ConvertToYSpace.cpp | 11 - .../CurveFitting/src/Convolution.cpp | 19 -- .../CurveFitting/src/ConvolveWorkspaces.cpp | 7 - .../CurveFitting/src/CubicSpline.cpp | 11 - .../src/DiffRotDiscreteCircle.cpp | 60 ---- .../Framework/CurveFitting/src/DiffSphere.cpp | 47 --- .../Framework/CurveFitting/src/ExpDecay.cpp | 5 - .../CurveFitting/src/ExpDecayMuon.cpp | 4 - .../CurveFitting/src/ExpDecayOsc.cpp | 5 - .../Mantid/Framework/CurveFitting/src/Fit.cpp | 225 --------------- .../CurveFitting/src/FitPowderDiffPeaks.cpp | 66 ----- .../CurveFitting/src/FlatBackground.cpp | 6 - .../Framework/CurveFitting/src/GausDecay.cpp | 4 - .../Framework/CurveFitting/src/GausOsc.cpp | 4 - .../Framework/CurveFitting/src/Gaussian.cpp | 19 -- .../CurveFitting/src/IkedaCarpenterPV.cpp | 28 -- .../Framework/CurveFitting/src/LeBailFit.cpp | 37 --- .../CurveFitting/src/LeBailFunction.cpp | 9 - .../CurveFitting/src/LinearBackground.cpp | 9 - .../Framework/CurveFitting/src/LogNormal.cpp | 4 - .../Framework/CurveFitting/src/Lorentzian.cpp | 18 -- .../CurveFitting/src/Lorentzian1D.cpp | 23 -- .../CurveFitting/src/MuonFInteraction.cpp | 9 - .../src/NeutronBk2BkExpConvPVoigt.cpp | 107 ------- .../CurveFitting/src/NormaliseByPeakArea.cpp | 14 - .../CurveFitting/src/PlotPeakByLogValue.cpp | 27 -- .../CurveFitting/src/ProcessBackground.cpp | 65 ----- .../CurveFitting/src/ProductFunction.cpp | 7 - .../CurveFitting/src/ProductLinearExp.cpp | 10 - .../CurveFitting/src/ProductQuadraticExp.cpp | 11 - .../Framework/CurveFitting/src/Quadratic.cpp | 14 - .../src/RefinePowderInstrumentParameters3.cpp | 37 --- .../CurveFitting/src/SplineBackground.cpp | 7 - .../CurveFitting/src/SplineInterpolation.cpp | 17 -- .../CurveFitting/src/SplineSmoothing.cpp | 11 - .../CurveFitting/src/StaticKuboToyabe.cpp | 4 - .../src/StaticKuboToyabeTimesExpDecay.cpp | 7 +- .../src/StaticKuboToyabeTimesGausDecay.cpp | 7 +- .../Framework/CurveFitting/src/StretchExp.cpp | 5 - .../CurveFitting/src/StretchExpMuon.cpp | 6 - .../src/ThermalNeutronBk2BkExpConvPVoigt.cpp | 107 ------- .../CurveFitting/src/UserFunction.cpp | 10 - .../CurveFitting/src/UserFunction1D.cpp | 71 ----- .../Framework/CurveFitting/src/Voigt.cpp | 18 -- .../src/AppendGeometryToSNSNexus.cpp | 10 - .../DataHandling/src/CompressEvents.cpp | 18 -- .../DataHandling/src/CreateChopperModel.cpp | 15 - .../DataHandling/src/CreateModeratorModel.cpp | 11 - .../DataHandling/src/CreateSampleShape.cpp | 5 - .../src/CreateSimulationWorkspace.cpp | 6 - .../DataHandling/src/DefineGaugeVolume.cpp | 11 - .../DataHandling/src/DeleteTableRows.cpp | 6 - .../DataHandling/src/DetermineChunking.cpp | 5 - .../src/FilterEventsByLogValuePreNexus.cpp | 16 -- .../DataHandling/src/FindDetectorsInShape.cpp | 4 - .../DataHandling/src/FindDetectorsPar.cpp | 31 -- .../src/GenerateGroupingPowder.cpp | 8 - .../DataHandling/src/GroupDetectors.cpp | 63 ---- .../DataHandling/src/GroupDetectors2.cpp | 68 ----- .../Framework/DataHandling/src/Load.cpp | 30 -- .../Framework/DataHandling/src/LoadAscii.cpp | 19 -- .../Framework/DataHandling/src/LoadAscii2.cpp | 26 -- .../DataHandling/src/LoadCalFile.cpp | 18 -- .../DataHandling/src/LoadCanSAS1D.cpp | 9 - .../DataHandling/src/LoadCanSAS1D2.cpp | 9 - .../DataHandling/src/LoadDaveGrp.cpp | 7 - .../DataHandling/src/LoadDetectorInfo.cpp | 264 ----------------- .../src/LoadDetectorsGroupingFile.cpp | 100 ------- .../DataHandling/src/LoadDspacemap.cpp | 12 - .../DataHandling/src/LoadEmptyInstrument.cpp | 7 - .../DataHandling/src/LoadEventNexus.cpp | 26 -- .../DataHandling/src/LoadEventPreNexus.cpp | 16 -- .../DataHandling/src/LoadEventPreNexus2.cpp | 16 -- .../src/LoadFullprofResolution.cpp | 51 ---- .../src/LoadGSASInstrumentFile.cpp | 46 --- .../Framework/DataHandling/src/LoadGSS.cpp | 11 - .../DataHandling/src/LoadIDFFromNexus.cpp | 6 - .../Framework/DataHandling/src/LoadILL.cpp | 12 - .../DataHandling/src/LoadILLIndirect.cpp | 4 - .../DataHandling/src/LoadILLSANS.cpp | 6 - .../DataHandling/src/LoadISISNexus2.cpp | 5 - .../DataHandling/src/LoadInstrument.cpp | 9 - .../src/LoadInstrumentFromNexus.cpp | 10 - .../src/LoadInstrumentFromRaw.cpp | 4 - .../DataHandling/src/LoadIsawDetCal.cpp | 15 - .../Framework/DataHandling/src/LoadLLB.cpp | 10 - .../src/LoadLOQDistancesFromRaw.cpp | 6 - .../Framework/DataHandling/src/LoadLog.cpp | 30 -- .../src/LoadLogsForSNSPulsedMagnet.cpp | 5 - .../DataHandling/src/LoadMappingTable.cpp | 8 - .../Framework/DataHandling/src/LoadMask.cpp | 50 ---- .../Framework/DataHandling/src/LoadMcStas.cpp | 40 --- .../DataHandling/src/LoadMcStasNexus.cpp | 8 - .../DataHandling/src/LoadMuonLog.cpp | 10 - .../DataHandling/src/LoadMuonNexus1.cpp | 45 --- .../DataHandling/src/LoadMuonNexus2.cpp | 46 --- .../Framework/DataHandling/src/LoadNXSPE.cpp | 10 - .../Framework/DataHandling/src/LoadNexus.cpp | 15 - .../DataHandling/src/LoadNexusLogs.cpp | 10 - .../DataHandling/src/LoadNexusMonitors.cpp | 7 - .../DataHandling/src/LoadNexusProcessed.cpp | 29 -- .../DataHandling/src/LoadPDFgetNFile.cpp | 47 --- .../DataHandling/src/LoadParameterFile.cpp | 17 -- .../DataHandling/src/LoadPreNexus.cpp | 4 - .../DataHandling/src/LoadPreNexusMonitors.cpp | 8 - .../Framework/DataHandling/src/LoadQKK.cpp | 4 - .../Framework/DataHandling/src/LoadRKH.cpp | 6 - .../Framework/DataHandling/src/LoadRaw3.cpp | 22 -- .../DataHandling/src/LoadRawBin0.cpp | 6 - .../DataHandling/src/LoadRawSpectrum0.cpp | 7 - .../DataHandling/src/LoadReflTBL.cpp | 12 - .../DataHandling/src/LoadSINQFocus.cpp | 8 - .../DataHandling/src/LoadSNSspec.cpp | 58 ---- .../Framework/DataHandling/src/LoadSPE.cpp | 7 - .../src/LoadSampleDetailsFromRaw.cpp | 28 -- .../DataHandling/src/LoadSassena.cpp | 26 -- .../Framework/DataHandling/src/LoadSpec.cpp | 58 ---- .../DataHandling/src/LoadSpice2D.cpp | 5 - .../DataHandling/src/LoadTOFRawNexus.cpp | 20 -- .../DataHandling/src/MaskDetectors.cpp | 53 ---- .../DataHandling/src/MaskDetectorsInShape.cpp | 15 - .../Framework/DataHandling/src/MergeLogs.cpp | 8 - .../src/ModifyDetectorDotDatFile.cpp | 24 -- .../src/MoveInstrumentComponent.cpp | 10 - .../DataHandling/src/NexusTester.cpp | 17 -- .../src/PDLoadCharacterizations.cpp | 7 - .../DataHandling/src/ProcessDasNexusLog.cpp | 5 - .../DataHandling/src/RawFileInfo.cpp | 5 - .../Framework/DataHandling/src/RemoveLogs.cpp | 8 - .../Framework/DataHandling/src/RenameLog.cpp | 5 - .../src/RotateInstrumentComponent.cpp | 7 - .../DataHandling/src/SaveANSTOAscii.cpp | 5 - .../Framework/DataHandling/src/SaveAscii.cpp | 8 - .../Framework/DataHandling/src/SaveAscii2.cpp | 8 - .../Framework/DataHandling/src/SaveCSV.cpp | 33 --- .../DataHandling/src/SaveCalFile.cpp | 16 -- .../DataHandling/src/SaveCanSAS1D.cpp | 7 - .../DataHandling/src/SaveCanSAS1D2.cpp | 20 -- .../DataHandling/src/SaveDaveGrp.cpp | 5 - .../src/SaveDetectorsGrouping.cpp | 27 -- .../DataHandling/src/SaveDspacemap.cpp | 10 - .../DataHandling/src/SaveFocusedXYE.cpp | 16 -- .../src/SaveFullprofResolution.cpp | 30 -- .../Framework/DataHandling/src/SaveGSS.cpp | 12 - .../DataHandling/src/SaveILLCosmosAscii.cpp | 5 - .../DataHandling/src/SaveISISNexus.cpp | 4 - .../DataHandling/src/SaveIsawDetCal.cpp | 12 - .../Framework/DataHandling/src/SaveMask.cpp | 36 --- .../DataHandling/src/SaveNISTDAT.cpp | 6 - .../Framework/DataHandling/src/SaveNXSPE.cpp | 15 - .../Framework/DataHandling/src/SaveNexus.cpp | 32 --- .../DataHandling/src/SaveNexusProcessed.cpp | 34 --- .../Framework/DataHandling/src/SavePAR.cpp | 25 -- .../Framework/DataHandling/src/SavePHX.cpp | 25 -- .../Framework/DataHandling/src/SaveRKH.cpp | 7 - .../DataHandling/src/SaveReflTBL.cpp | 18 -- .../Framework/DataHandling/src/SaveSPE.cpp | 11 - .../src/SaveToSNSHistogramNexus.cpp | 9 - .../Framework/DataHandling/src/SaveVTK.cpp | 7 - .../DataHandling/src/SetSampleMaterial.cpp | 32 --- .../DataHandling/src/SetScalingPSD.cpp | 51 ---- .../src/UpdateInstrumentFromFile.cpp | 36 --- .../ICat/src/CatalogDownloadDataFiles.cpp | 7 - .../ICat/src/CatalogGetDataFiles.cpp | 6 - .../Framework/ICat/src/CatalogGetDataSets.cpp | 5 - .../Framework/ICat/src/CatalogKeepAlive.cpp | 7 - .../ICat/src/CatalogListInstruments.cpp | 7 - .../src/CatalogListInvestigationTypes.cpp | 6 - .../Framework/ICat/src/CatalogLogin.cpp | 7 - .../Framework/ICat/src/CatalogLogout.cpp | 6 - .../ICat/src/CatalogMyDataSearch.cpp | 6 - .../Framework/ICat/src/CatalogPublish.cpp | 14 - .../Framework/ICat/src/CatalogSearch.cpp | 7 - .../ISISLiveData/src/FakeISISEventDAE.cpp | 7 - .../LiveData/src/FakeISISHistoDAE.cpp | 6 - .../Framework/LiveData/src/LoadLiveData.cpp | 57 ---- .../LiveData/src/MonitorLiveData.cpp | 13 - .../Framework/LiveData/src/StartLiveData.cpp | 96 ------- .../Framework/MDAlgorithms/src/AndMD.cpp | 16 -- .../Framework/MDAlgorithms/src/BinMD.cpp | 75 ----- .../MDAlgorithms/src/BinaryOperationMD.cpp | 4 - .../MDAlgorithms/src/CentroidPeaksMD.cpp | 8 - .../MDAlgorithms/src/CentroidPeaksMD2.cpp | 8 - .../MDAlgorithms/src/CloneMDWorkspace.cpp | 15 - .../MDAlgorithms/src/CompareMDWorkspaces.cpp | 14 - .../src/ConvertToDetectorFaceMD.cpp | 36 --- .../src/ConvertToDiffractionMDWorkspace.cpp | 60 ---- .../src/ConvertToDiffractionMDWorkspace2.cpp | 60 ---- .../MDAlgorithms/src/ConvertToMD.cpp | 139 --------- .../src/ConvertToMDMinMaxGlobal.cpp | 14 - .../src/ConvertToMDMinMaxLocal.cpp | 18 -- .../src/CreateMDHistoWorkspace.cpp | 30 -- .../MDAlgorithms/src/CreateMDWorkspace.cpp | 18 -- .../Framework/MDAlgorithms/src/DivideMD.cpp | 25 -- .../Framework/MDAlgorithms/src/EqualToMD.cpp | 13 - .../MDAlgorithms/src/ExponentialMD.cpp | 12 - .../MDAlgorithms/src/FakeMDEventData.cpp | 11 - .../MDAlgorithms/src/FindPeaksMD.cpp | 23 -- .../MDAlgorithms/src/GreaterThanMD.cpp | 19 -- .../MDAlgorithms/src/IntegratePeaksMD.cpp | 68 ----- .../MDAlgorithms/src/IntegratePeaksMD2.cpp | 68 ----- .../Framework/MDAlgorithms/src/LessThanMD.cpp | 18 -- .../Framework/MDAlgorithms/src/LoadMD.cpp | 21 -- .../Framework/MDAlgorithms/src/LoadSQW.cpp | 143 --------- .../MDAlgorithms/src/LogarithmMD.cpp | 12 - .../Framework/MDAlgorithms/src/MaskMD.cpp | 23 -- .../Framework/MDAlgorithms/src/MergeMD.cpp | 15 - .../MDAlgorithms/src/MergeMDFiles.cpp | 19 -- .../Framework/MDAlgorithms/src/MinusMD.cpp | 24 -- .../Framework/MDAlgorithms/src/MultiplyMD.cpp | 22 -- .../Framework/MDAlgorithms/src/NotMD.cpp | 16 -- .../Framework/MDAlgorithms/src/OrMD.cpp | 13 - .../Framework/MDAlgorithms/src/PlusMD.cpp | 35 --- .../Framework/MDAlgorithms/src/PowerMD.cpp | 12 - .../src/PreprocessDetectorsToMD.cpp | 98 ------- .../FitResolutionConvolvedModel.cpp | 4 - .../SimulateResolutionConvolvedModel.cpp | 5 - .../Framework/MDAlgorithms/src/SaveMD.cpp | 12 - .../Framework/MDAlgorithms/src/SaveZODS.cpp | 32 --- .../MDAlgorithms/src/SetMDUsingMask.cpp | 22 -- .../Framework/MDAlgorithms/src/SliceMD.cpp | 46 --- .../Framework/MDAlgorithms/src/Stitch1DMD.cpp | 8 - .../MDAlgorithms/src/ThresholdMD.cpp | 6 - .../MDAlgorithms/src/TransformMD.cpp | 33 --- .../MDAlgorithms/src/WeightedMeanMD.cpp | 43 +-- .../Framework/MDAlgorithms/src/XorMD.cpp | 15 - .../MDEvents/src/ConvertToReflectometryQ.cpp | 30 -- .../MDEvents/src/ImportMDEventWorkspace.cpp | 92 ------ .../MDEvents/src/ImportMDHistoWorkspace.cpp | 37 --- .../src/ImportMDHistoWorkspaceBase.cpp | 6 +- .../MDEvents/src/IntegrateEllipsoids.cpp | 86 ------ .../Framework/MDEvents/src/OneStepMDEW.cpp | 12 - .../MDEvents/src/QueryMDWorkspace.cpp | 13 - .../MDEvents/src/SaveIsawQvector.cpp | 4 - .../MPIAlgorithms/src/GatherWorkspaces.cpp | 7 - .../api/src/Algorithms/RunPythonScript.cpp | 9 - .../plugins/algorithms/BASISReduction.py | 15 - .../CalibrateRectangularDetectors.py | 38 --- .../plugins/algorithms/CheckForSampleLogs.py | 4 - .../plugins/algorithms/ConjoinFiles.py | 6 - .../plugins/algorithms/ConjoinSpectra.py | 7 - .../algorithms/ConvertSnsRoiFileToMask.py | 12 - .../plugins/algorithms/CorrectLogTimes.py | 5 - .../algorithms/CreateEmptyTableWorkspace.py | 7 - .../algorithms/CreateLeBailFitInput.py | 27 -- .../CreateTransmissionWorkspaceAuto.py | 10 - .../plugins/algorithms/DSFinterp.py | 126 -------- .../plugins/algorithms/DakotaChiSquared.py | 4 - .../algorithms/ExaminePowderDiffProfile.py | 5 - .../plugins/algorithms/Examples/Squares.py | 5 - .../plugins/algorithms/ExportExperimentLog.py | 44 --- .../algorithms/ExportSampleLogsToCSVFile.py | 14 - .../plugins/algorithms/FilterLogByTime.py | 12 - .../algorithms/FindReflectometryLines.py | 7 - .../GenerateGroupingSNSInelastic.py | 10 - .../plugins/algorithms/GetEiMonDet.py | 6 - .../plugins/algorithms/GetEiT0atSNS.py | 8 - .../plugins/algorithms/LoadFullprofFile.py | 26 -- .../algorithms/LoadLogPropertyTable.py | 17 -- .../plugins/algorithms/LoadMultipleGSS.py | 5 - .../plugins/algorithms/LoadSINQ.py | 9 - .../plugins/algorithms/LoadSINQFile.py | 8 - .../plugins/algorithms/LoadVesuvio.py | 6 - .../plugins/algorithms/MaskAngle.py | 6 - .../plugins/algorithms/MaskBTP.py | 17 -- .../algorithms/MaskWorkspaceToCalFile.py | 36 --- .../plugins/algorithms/Mean.py | 3 - .../plugins/algorithms/MergeCalFiles.py | 6 - .../PDDetermineCharacterizations.py | 4 - .../plugins/algorithms/PearlMCAbsorption.py | 10 - .../plugins/algorithms/PoldiMerge.py | 12 - .../plugins/algorithms/PoldiProjectAddDir.py | 9 - .../plugins/algorithms/PoldiProjectAddFile.py | 9 - .../plugins/algorithms/PoldiProjectRun.py | 212 -------------- .../plugins/algorithms/RefLReduction.py | 7 - .../algorithms/RefinePowderDiffProfileSeq.py | 61 ---- .../ReflectometryReductionOneAuto.py | 10 - .../plugins/algorithms/RetrieveRunInfo.py | 14 - .../plugins/algorithms/SANSSubtract.py | 17 -- .../algorithms/SANSWideAngleCorrection.py | 111 +------ .../plugins/algorithms/SNSPowderReduction.py | 12 - .../algorithms/SelectPowderDiffPeaks.py | 7 - .../plugins/algorithms/SortByQVectors.py | 7 - .../plugins/algorithms/SortDetectors.py | 4 - .../plugins/algorithms/SortXAxis.py | 8 - .../plugins/algorithms/Stitch1D.py | 8 - .../plugins/algorithms/Stitch1DMany.py | 10 - .../plugins/algorithms/SuggestTibCNCS.py | 5 - .../plugins/algorithms/SuggestTibHYSPEC.py | 4 - .../algorithms/TestWorkspaceGroupProperty.py | 5 - .../plugins/algorithms/USANSSimulation.py | 13 - .../UpdatePeakParameterTableValue.py | 23 -- .../plugins/algorithms/ViewBOA.py | 8 - .../WorkflowAlgorithms/DensityOfStates.py | 6 - .../EQSANSAzimuthalAverage1D.py | 3 - .../EQSANSDirectBeamTransmission.py | 3 - .../WorkflowAlgorithms/EQSANSNormalise.py | 6 - .../WorkflowAlgorithms/FuryFitMultiple.py | 6 - .../WorkflowAlgorithms/HFIRSANSReduction.py | 5 - .../IndirectTransmission.py | 7 - .../WorkflowAlgorithms/MuscatData.py | 10 - .../WorkflowAlgorithms/MuscatFunc.py | 10 - .../NormaliseByThickness.py | 6 - .../OSIRISDiffractionReduction.py | 8 - .../algorithms/WorkflowAlgorithms/QLines.py | 15 - .../algorithms/WorkflowAlgorithms/Quest.py | 8 - .../WorkflowAlgorithms/REFLReprocess.py | 7 - .../ReactorSANSResolution.py | 7 - .../algorithms/WorkflowAlgorithms/ResNorm.py | 9 - .../WorkflowAlgorithms/SANSAbsoluteScale.py | 5 - .../SANSAzimuthalAverage1D.py | 3 - .../SANSBeamSpreaderTransmission.py | 3 - .../SANSDirectBeamTransmission.py | 3 - .../algorithms/WorkflowAlgorithms/SANSMask.py | 6 - .../WorkflowAlgorithms/SANSReduction.py | 5 - .../WorkflowAlgorithms/SavePlot1D.py | 11 - .../WorkflowAlgorithms/SofQWMoments.py | 5 - .../WorkflowAlgorithms/Symmetrise.py | 7 - .../RemoteAlgorithms/src/AbortRemoteJob.cpp | 8 - .../RemoteAlgorithms/src/Authenticate.cpp | 9 - .../src/DownloadRemoteFile.cpp | 8 - .../src/QueryAllRemoteJobs.cpp | 9 - .../RemoteAlgorithms/src/QueryRemoteFile.cpp | 9 - .../RemoteAlgorithms/src/QueryRemoteJob.cpp | 8 - .../src/StartRemoteTransaction.cpp | 8 - .../src/StopRemoteTransaction.cpp | 8 - .../RemoteAlgorithms/src/SubmitRemoteJob.cpp | 8 - .../RemoteAlgorithms/src/UploadRemoteFile.cpp | 9 - .../Mantid/Framework/SINQ/src/InvertMDDim.cpp | 9 - .../Framework/SINQ/src/LoadFlexiNexus.cpp | 35 --- .../SINQ/src/MDHistoToWorkspace2D.cpp | 11 - .../SINQ/src/PoldiAutoCorrelation5.cpp | 14 - .../Framework/SINQ/src/PoldiFitPeaks1D.cpp | 11 - .../SINQ/src/PoldiLoadChopperSlits.cpp | 10 - .../Framework/SINQ/src/PoldiLoadIPP.cpp | 9 - .../Framework/SINQ/src/PoldiLoadLog.cpp | 9 - .../Framework/SINQ/src/PoldiLoadSpectra.cpp | 10 - .../SINQ/src/PoldiPeakDetection2.cpp | 10 - .../Framework/SINQ/src/PoldiPeakSearch.cpp | 26 -- .../SINQ/src/PoldiRemoveDeadWires.cpp | 10 - Code/Mantid/Framework/SINQ/src/ProjectMD.cpp | 22 -- .../Framework/SINQ/src/SINQTranspose3D.cpp | 17 -- .../src/AlignAndFocusPowder.cpp | 21 -- .../src/ComputeSensitivity.cpp | 12 - .../src/DgsAbsoluteUnitsReduction.cpp | 58 ---- .../src/DgsConvertToEnergyTransfer.cpp | 35 --- .../WorkflowAlgorithms/src/DgsDiagnose.cpp | 88 ------ .../src/DgsPreprocessData.cpp | 30 -- .../src/DgsProcessDetectorVanadium.cpp | 30 -- .../WorkflowAlgorithms/src/DgsReduction.cpp | 16 -- .../WorkflowAlgorithms/src/DgsRemap.cpp | 10 - .../src/EQSANSDarkCurrentSubtraction.cpp | 14 - .../WorkflowAlgorithms/src/EQSANSLoad.cpp | 18 -- .../src/EQSANSMonitorTOF.cpp | 6 - .../src/EQSANSPatchSensitivity.cpp | 5 - .../WorkflowAlgorithms/src/EQSANSQ2D.cpp | 7 - .../src/HFIRDarkCurrentSubtraction.cpp | 15 - .../WorkflowAlgorithms/src/HFIRLoad.cpp | 15 - .../src/HFIRSANSNormalise.cpp | 6 - .../src/MuonCalculateAsymmetry.cpp | 11 - .../WorkflowAlgorithms/src/MuonLoad.cpp | 16 -- .../WorkflowAlgorithms/src/RefReduction.cpp | 5 - .../WorkflowAlgorithms/src/RefRoi.cpp | 5 - .../WorkflowAlgorithms/src/SANSBeamFinder.cpp | 7 - .../src/SANSBeamFluxCorrection.cpp | 14 - .../src/SANSSensitivityCorrection.cpp | 16 -- .../src/SANSSolidAngleCorrection.cpp | 9 - .../src/SetupEQSANSReduction.cpp | 8 - .../src/SetupHFIRReduction.cpp | 8 - .../src/SetupILLD33Reduction.cpp | 8 - .../WorkflowAlgorithms/src/StepScan.cpp | 11 - .../source/algorithms/AbortRemoteJob-v1.rst | 17 ++ .../algorithms/AbsorptionCorrection-v1.rst | 72 +++++ .../source/algorithms/AddLogDerivative-v1.rst | 26 ++ .../docs/source/algorithms/AddPeak-v1.rst | 14 + .../source/algorithms/AddSampleLog-v1.rst | 24 ++ .../source/algorithms/AddTimeSeriesLog-v1.rst | 22 ++ .../algorithms/AlignAndFocusPowder-v1.rst | 35 +++ .../source/algorithms/AlignDetectors-v1.rst | 32 +++ .../docs/source/algorithms/AlphaCalc-v1.rst | 19 ++ .../docs/source/algorithms/AndMD-v1.rst | 16 ++ .../source/algorithms/AnvredCorrection-v1.rst | 45 +++ .../AppendGeometryToSNSNexus-v1.rst | 21 ++ .../source/algorithms/AppendSpectra-v1.rst | 50 ++++ .../source/algorithms/ApplyCalibration-v1.rst | 21 ++ .../algorithms/ApplyDeadTimeCorr-v1.rst | 26 ++ .../algorithms/ApplyDetailedBalance-v1.rst | 31 ++ .../ApplyTransmissionCorrection-v1.rst | 19 ++ .../source/algorithms/AsymmetryCalc-v1.rst | 31 ++ .../source/algorithms/Authenticate-v1.rst | 18 ++ .../source/algorithms/AverageLogData-v1.rst | 21 ++ .../source/algorithms/BASISReduction-v1.rst | 21 ++ .../docs/source/algorithms/BinMD-v1.rst | 112 ++++++++ .../algorithms/BinaryOperateMasks-v1.rst | 29 ++ .../source/algorithms/CalMuonDeadTime-v1.rst | 33 +++ .../algorithms/CalculateEfficiency-v1.rst | 16 ++ .../algorithms/CalculateFlatBackground-v1.rst | 37 +++ .../CalculateGammaBackground-v1.rst | 26 ++ .../algorithms/CalculatePeaksHKL-v1.rst | 22 ++ .../algorithms/CalculateTransmission-v1.rst | 42 +++ .../CalculateTransmissionBeamSpreader-v1.rst | 16 ++ .../source/algorithms/CalculateUMatrix-v1.rst | 145 ++++++++++ .../source/algorithms/CalculateZscore-v1.rst | 14 + .../CalibrateRectangularDetectors-v1.rst | 62 ++++ .../CatalogDownloadDataFiles-v1.rst | 16 ++ .../algorithms/CatalogGetDataFiles-v1.rst | 16 ++ .../algorithms/CatalogGetDataSets-v1.rst | 16 ++ .../source/algorithms/CatalogKeepAlive-v1.rst | 15 + .../algorithms/CatalogListInstruments-v1.rst | 15 + .../CatalogListInvestigationTypes-v1.rst | 15 + .../source/algorithms/CatalogLogin-v1.rst | 14 + .../source/algorithms/CatalogLogout-v1.rst | 15 + .../algorithms/CatalogMyDataSearch-v1.rst | 15 + .../source/algorithms/CatalogPublish-v1.rst | 28 ++ .../source/algorithms/CatalogSearch-v1.rst | 15 + .../source/algorithms/CentroidPeaks-v1.rst | 18 ++ .../source/algorithms/CentroidPeaksMD-v1.rst | 18 ++ .../source/algorithms/CentroidPeaksMD-v2.rst | 18 ++ .../source/algorithms/ChangeBinOffset-v1.rst | 23 ++ .../source/algorithms/ChangeLogTime-v1.rst | 14 + .../source/algorithms/ChangePulsetime-v1.rst | 16 ++ .../algorithms/CheckForSampleLogs-v1.rst | 14 + .../algorithms/CheckWorkspacesMatch-v1.rst | 24 ++ .../docs/source/algorithms/ChopData-v1.rst | 47 +++ .../source/algorithms/ClearMaskFlag-v1.rst | 15 + .../docs/source/algorithms/ClearUB-v1.rst | 16 ++ .../source/algorithms/CloneMDWorkspace-v1.rst | 27 ++ .../source/algorithms/CloneWorkspace-v1.rst | 19 ++ .../algorithms/CombinePeaksWorkspaces-v1.rst | 22 ++ .../algorithms/CompareMDWorkspaces-v1.rst | 23 ++ .../source/algorithms/CompressEvents-v1.rst | 34 +++ .../algorithms/ComputeSensitivity-v1.rst | 22 ++ .../source/algorithms/ConjoinFiles-v1.rst | 15 + .../source/algorithms/ConjoinSpectra-v1.rst | 20 ++ .../algorithms/ConjoinWorkspaces-v1.rst | 50 ++++ .../algorithms/ConvertAxisByFormula-v1.rst | 32 +++ .../algorithms/ConvertFromDistribution-v1.rst | 21 ++ .../ConvertMDHistoToMatrixWorkspace-v1.rst | 15 + .../algorithms/ConvertSnsRoiFileToMask-v1.rst | 18 ++ .../algorithms/ConvertSpectrumAxis-v1.rst | 26 ++ .../algorithms/ConvertSpectrumAxis-v2.rst | 22 ++ .../ConvertTableToMatrixWorkspace-v1.rst | 17 ++ .../algorithms/ConvertToDetectorFaceMD-v1.rst | 53 ++++ .../ConvertToDiffractionMDWorkspace-v1.rst | 90 ++++++ .../ConvertToDiffractionMDWorkspace-v2.rst | 90 ++++++ .../algorithms/ConvertToDistribution-v1.rst | 21 ++ .../algorithms/ConvertToEventWorkspace-v1.rst | 30 ++ .../algorithms/ConvertToHistogram-v1.rst | 17 ++ .../docs/source/algorithms/ConvertToMD-v1.rst | 186 ++++++++++++ .../algorithms/ConvertToMDMinMaxGlobal-v1.rst | 44 +++ .../algorithms/ConvertToMDMinMaxLocal-v1.rst | 33 +++ .../ConvertToMatrixWorkspace-v1.rst | 15 + .../algorithms/ConvertToPointData-v1.rst | 16 ++ .../algorithms/ConvertToReflectometryQ-v1.rst | 58 ++++ .../source/algorithms/ConvertToYSpace-v1.rst | 36 +++ .../source/algorithms/ConvertUnits-v1.rst | 51 ++++ .../algorithms/ConvolveWorkspaces-v1.rst | 15 + .../CopyInstrumentParameters-v1.rst | 24 ++ .../docs/source/algorithms/CopyLogs-v1.rst | 28 ++ .../docs/source/algorithms/CopySample-v1.rst | 28 ++ .../algorithms/CorrectFlightPaths-v1.rst | 20 ++ .../docs/source/algorithms/CorrectKiKf-v1.rst | 22 ++ .../source/algorithms/CorrectLogTimes-v1.rst | 17 ++ .../source/algorithms/CorrectToFile-v1.rst | 24 ++ .../algorithms/CreateCalFileByNames-v1.rst | 34 +++ .../algorithms/CreateChopperModel-v1.rst | 32 +++ .../algorithms/CreateDummyCalFile-v1.rst | 26 ++ .../CreateEmptyTableWorkspace-v1.rst | 15 + .../CreateFlatEventWorkspace-v1.rst | 16 ++ .../algorithms/CreateGroupingWorkspace-v1.rst | 27 ++ .../algorithms/CreateLeBailFitInput-v1.rst | 46 +++ .../algorithms/CreateLogPropertyTable-v1.rst | 59 ++++ .../algorithms/CreateLogTimeCorrection-v1.rst | 17 ++ .../algorithms/CreateMDHistoWorkspace-v1.rst | 40 +++ .../algorithms/CreateMDWorkspace-v1.rst | 29 ++ .../algorithms/CreateModeratorModel-v1.rst | 25 ++ .../algorithms/CreatePSDBleedMask-v1.rst | 24 ++ .../algorithms/CreatePeaksWorkspace-v1.rst | 20 ++ .../algorithms/CreateSampleShape-v1.rst | 16 ++ .../algorithms/CreateSampleWorkspace-v1.rst | 33 +++ .../CreateSimulationWorkspace-v1.rst | 23 ++ .../CreateSingleValuedWorkspace-v1.rst | 16 ++ .../CreateTransmissionWorkspace-v1.rst | 18 ++ .../CreateTransmissionWorkspaceAuto-v1.rst | 21 ++ .../source/algorithms/CreateWorkspace-v1.rst | 24 ++ .../source/algorithms/CropWorkspace-v1.rst | 29 ++ .../source/algorithms/CrossCorrelate-v1.rst | 24 ++ .../CuboidGaugeVolumeAbsorption-v1.rst | 43 +++ .../algorithms/CylinderAbsorption-v1.rst | 55 ++++ .../source/algorithms/DakotaChiSquared-v1.rst | 15 + .../algorithms/DefineGaugeVolume-v1.rst | 25 ++ .../docs/source/algorithms/DeleteLog-v1.rst | 16 ++ .../source/algorithms/DeleteTableRows-v1.rst | 15 + .../source/algorithms/DeleteWorkspace-v1.rst | 14 + .../source/algorithms/DensityOfStates-v1.rst | 15 + .../algorithms/DetectorDiagnostic-v1.rst | 26 ++ .../algorithms/DetectorEfficiencyCor-v1.rst | 42 +++ .../DetectorEfficiencyCorUser-v1.rst | 29 ++ .../DetectorEfficiencyVariation-v1.rst | 38 +++ .../algorithms/DetermineChunking-v1.rst | 15 + .../DgsAbsoluteUnitsReduction-v1.rst | 72 +++++ .../DgsConvertToEnergyTransfer-v1.rst | 48 ++++ .../docs/source/algorithms/DgsDiagnose-v1.rst | 14 + .../algorithms/DgsPreprocessData-v1.rst | 42 +++ .../DgsProcessDetectorVanadium-v1.rst | 44 +++ .../source/algorithms/DgsReduction-v1.rst | 30 ++ .../docs/source/algorithms/DgsRemap-v1.rst | 24 ++ .../algorithms/DiffPeaksWorkspaces-v1.rst | 20 ++ .../DiffractionEventCalibrateDetectors-v1.rst | 16 ++ .../algorithms/DiffractionFocussing-v1.rst | 55 ++++ .../algorithms/DiffractionFocussing-v2.rst | 64 +++++ .../docs/source/algorithms/Divide-v1.rst | 20 ++ .../docs/source/algorithms/DivideMD-v1.rst | 35 +++ .../algorithms/DownloadRemoteFile-v1.rst | 17 ++ .../EQSANSAzimuthalAverage1D-v1.rst | 14 + .../EQSANSDarkCurrentSubtraction-v1.rst | 25 ++ .../EQSANSDirectBeamTransmission-v1.rst | 14 + .../docs/source/algorithms/EQSANSLoad-v1.rst | 30 ++ .../source/algorithms/EQSANSMonitorTOF-v1.rst | 15 + .../source/algorithms/EQSANSNormalise-v1.rst | 14 + .../algorithms/EQSANSPatchSensitivity-v1.rst | 15 + .../docs/source/algorithms/EQSANSQ2D-v1.rst | 19 ++ .../source/algorithms/EQSANSResolution-v1.rst | 14 + .../algorithms/EQSANSTofStructure-v1.rst | 14 + .../algorithms/EditInstrumentGeometry-v1.rst | 58 ++++ .../source/algorithms/ElasticWindow-v1.rst | 18 ++ .../docs/source/algorithms/EqualToMD-v1.rst | 22 ++ .../EstimatePDDetectorResolution-v1.rst | 57 ++++ .../ExaminePowderDiffProfile-v1.rst | 15 + .../docs/source/algorithms/Exponential-v1.rst | 18 ++ .../algorithms/ExponentialCorrection-v1.rst | 20 ++ .../source/algorithms/ExponentialMD-v1.rst | 23 ++ .../algorithms/ExportExperimentLog-v1.rst | 75 +++++ .../ExportSampleLogsToCSVFile-v1.rst | 28 ++ .../algorithms/ExportTimeSeriesLog-v1.rst | 14 + .../algorithms/ExtractFFTSpectrum-v1.rst | 52 ++++ .../docs/source/algorithms/ExtractMask-v1.rst | 21 ++ .../algorithms/ExtractMaskToTable-v1.rst | 35 +++ .../algorithms/ExtractSingleSpectrum-v1.rst | 15 + Code/Mantid/docs/source/algorithms/FFT-v1.rst | 176 ++++++++++++ .../source/algorithms/FFTDerivative-v1.rst | 14 + .../docs/source/algorithms/FFTSmooth-v1.rst | 48 ++++ .../docs/source/algorithms/FFTSmooth-v2.rst | 57 ++++ .../source/algorithms/FakeISISEventDAE-v1.rst | 16 ++ .../source/algorithms/FakeISISHistoDAE-v1.rst | 15 + .../source/algorithms/FakeMDEventData-v1.rst | 16 ++ .../source/algorithms/FilterBadPulses-v1.rst | 18 ++ .../source/algorithms/FilterByLogValue-v1.rst | 71 +++++ .../source/algorithms/FilterByTime-v1.rst | 33 +++ .../source/algorithms/FilterByXValue-v1.rst | 21 ++ .../source/algorithms/FilterEvents-v1.rst | 69 +++++ .../FilterEventsByLogValuePreNexus-v2.rst | 33 +++ .../source/algorithms/FilterLogByTime-v1.rst | 27 ++ .../docs/source/algorithms/FilterPeaks-v1.rst | 15 + .../FindCenterOfMassPosition-v1.rst | 20 ++ .../FindCenterOfMassPosition-v2.rst | 20 ++ .../source/algorithms/FindClusterFaces-v1.rst | 32 +++ .../algorithms/FindDeadDetectors-v1.rst | 24 ++ .../algorithms/FindDetectorsInShape-v1.rst | 17 ++ .../FindDetectorsOutsideLimits-v1.rst | 25 ++ .../source/algorithms/FindDetectorsPar-v1.rst | 62 ++++ .../algorithms/FindPeakBackground-v1.rst | 29 ++ .../docs/source/algorithms/FindPeaks-v1.rst | 93 ++++++ .../docs/source/algorithms/FindPeaksMD-v1.rst | 47 +++ .../algorithms/FindReflectometryLines-v1.rst | 21 ++ .../docs/source/algorithms/FindSXPeaks-v1.rst | 25 ++ .../source/algorithms/FindUBUsingFFT-v1.rst | 41 +++ .../algorithms/FindUBUsingIndexedPeaks-v1.rst | 22 ++ .../FindUBUsingLatticeParameters-v1.rst | 44 +++ .../algorithms/FindUBUsingMinMaxD-v1.rst | 29 ++ Code/Mantid/docs/source/algorithms/Fit-v1.rst | 271 ++++++++++++++++++ .../docs/source/algorithms/FitPeak-v1.rst | 64 +++++ .../algorithms/FitPowderDiffPeaks-v1.rst | 111 +++++++ .../FitResolutionConvolvedModel-v1.rst | 15 + .../algorithms/FixGSASInstrumentFile-v1.rst | 18 ++ .../algorithms/FlatPlateAbsorption-v1.rst | 33 +++ .../source/algorithms/FuryFitMultiple-v1.rst | 20 ++ .../GeneralisedSecondDifference-v1.rst | 19 ++ .../algorithms/GenerateEventsFilter-v1.rst | 130 +++++++++ .../algorithms/GenerateGroupingPowder-v1.rst | 22 ++ .../GenerateGroupingSNSInelastic-v1.rst | 18 ++ .../source/algorithms/GeneratePeaks-v1.rst | 44 +++ .../algorithms/GeneratePythonScript-v1.rst | 39 +++ .../algorithms/GetDetOffsetsMultiPeaks-v1.rst | 191 ++++++++++++ .../algorithms/GetDetectorOffsets-v1.rst | 33 +++ .../docs/source/algorithms/GetEi-v1.rst | 47 +++ .../docs/source/algorithms/GetEi-v2.rst | 50 ++++ .../docs/source/algorithms/GetEiMonDet-v1.rst | 19 ++ .../source/algorithms/GetEiT0atSNS-v1.rst | 22 ++ .../GetTimeSeriesLogInformation-v1.rst | 14 + .../GoniometerAnglesFromPhiRotation-v1.rst | 20 ++ .../source/algorithms/GreaterThanMD-v1.rst | 22 ++ .../source/algorithms/GroupDetectors-v1.rst | 91 ++++++ .../source/algorithms/GroupDetectors-v2.rst | 106 +++++++ .../source/algorithms/GroupWorkspaces-v1.rst | 15 + .../HFIRDarkCurrentSubtraction-v1.rst | 25 ++ .../docs/source/algorithms/HFIRLoad-v1.rst | 25 ++ .../algorithms/HFIRSANSNormalise-v1.rst | 14 + .../algorithms/HFIRSANSReduction-v1.rst | 14 + .../algorithms/HRPDSlabCanAbsorption-v1.rst | 46 +++ .../docs/source/algorithms/HasUB-v1.rst | 16 ++ .../algorithms/He3TubeEfficiency-v1.rst | 41 +++ .../docs/source/algorithms/IQTransform-v1.rst | 54 ++++ .../algorithms/IdentifyNoisyDetectors-v1.rst | 36 +++ .../algorithms/ImportMDEventWorkspace-v1.rst | 60 ++++ .../algorithms/ImportMDHistoWorkspace-v1.rst | 45 +++ .../docs/source/algorithms/IndexPeaks-v1.rst | 28 ++ .../source/algorithms/IndexSXPeaks-v1.rst | 24 ++ .../algorithms/IndirectTransmission-v1.rst | 20 ++ .../algorithms/IntegrateByComponent-v1.rst | 23 ++ .../algorithms/IntegrateEllipsoids-v1.rst | 152 ++++++++++ .../algorithms/IntegratePeakTimeSlices-v1.rst | 48 ++++ .../source/algorithms/IntegratePeaksMD-v1.rst | 104 +++++++ .../source/algorithms/IntegratePeaksMD-v2.rst | 104 +++++++ .../IntegratePeaksUsingClusters-v1.rst | 94 ++++++ .../docs/source/algorithms/Integration-v1.rst | 45 +++ .../algorithms/InterpolatingRebin-v1.rst | 53 ++++ .../docs/source/algorithms/InvertMDDim-v1.rst | 19 ++ .../docs/source/algorithms/InvertMask-v1.rst | 21 ++ .../docs/source/algorithms/LeBailFit-v1.rst | 66 +++++ .../docs/source/algorithms/LessThanMD-v1.rst | 22 ++ .../Mantid/docs/source/algorithms/Load-v1.rst | 29 ++ .../docs/source/algorithms/LoadAscii-v1.rst | 40 +++ .../docs/source/algorithms/LoadAscii-v2.rst | 42 +++ .../docs/source/algorithms/LoadCalFile-v1.rst | 23 ++ .../source/algorithms/LoadCanSAS1D-v1.rst | 22 ++ .../source/algorithms/LoadCanSAS1D-v2.rst | 22 ++ .../docs/source/algorithms/LoadDaveGrp-v1.rst | 16 ++ .../source/algorithms/LoadDetectorInfo-v1.rst | 14 + .../LoadDetectorsGroupingFile-v1.rst | 139 +++++++++ .../source/algorithms/LoadDspacemap-v1.rst | 18 ++ .../algorithms/LoadEmptyInstrument-v1.rst | 19 ++ .../source/algorithms/LoadEventNexus-v1.rst | 53 ++++ .../algorithms/LoadEventPreNexus-v1.rst | 26 ++ .../algorithms/LoadEventPreNexus-v2.rst | 33 +++ .../source/algorithms/LoadFlexiNexus-v1.rst | 60 ++++ .../source/algorithms/LoadFullprofFile-v1.rst | 46 +++ .../algorithms/LoadFullprofResolution-v1.rst | 31 ++ .../algorithms/LoadGSASInstrumentFile-v1.rst | 20 ++ .../docs/source/algorithms/LoadGSS-v1.rst | 19 ++ .../docs/source/algorithms/LoadHKL-v1.rst | 47 +++ .../source/algorithms/LoadIDFFromNexus-v1.rst | 17 ++ .../docs/source/algorithms/LoadILL-v1.rst | 24 ++ .../source/algorithms/LoadILLIndirect-v1.rst | 16 ++ .../docs/source/algorithms/LoadILLSANS-v1.rst | 15 + .../source/algorithms/LoadISISNexus-v2.rst | 14 + .../source/algorithms/LoadInstrument-v1.rst | 29 ++ .../algorithms/LoadInstrumentFromNexus-v1.rst | 22 ++ .../algorithms/LoadInstrumentFromRaw-v1.rst | 14 + .../source/algorithms/LoadIsawDetCal-v1.rst | 15 + .../source/algorithms/LoadIsawPeaks-v1.rst | 20 ++ .../source/algorithms/LoadIsawSpectrum-v1.rst | 16 ++ .../docs/source/algorithms/LoadIsawUB-v1.rst | 27 ++ .../docs/source/algorithms/LoadLLB-v1.rst | 19 ++ .../algorithms/LoadLOQDistancesFromRaw-v1.rst | 20 ++ .../source/algorithms/LoadLiveData-v1.rst | 96 +++++++ .../docs/source/algorithms/LoadLog-v1.rst | 56 ++++ .../algorithms/LoadLogPropertyTable-v1.rst | 36 +++ .../LoadLogsForSNSPulsedMagnet-v1.rst | 14 + .../docs/source/algorithms/LoadMD-v1.rst | 31 ++ .../source/algorithms/LoadMappingTable-v1.rst | 27 ++ .../docs/source/algorithms/LoadMask-v1.rst | 72 +++++ .../docs/source/algorithms/LoadMcStas-v1.rst | 50 ++++ .../source/algorithms/LoadMcStasNexus-v1.rst | 23 ++ .../source/algorithms/LoadMultipleGSS-v1.rst | 15 + .../docs/source/algorithms/LoadMuonLog-v1.rst | 22 ++ .../source/algorithms/LoadMuonNexus-v1.rst | 81 ++++++ .../source/algorithms/LoadMuonNexus-v2.rst | 83 ++++++ .../docs/source/algorithms/LoadNXSPE-v1.rst | 19 ++ .../docs/source/algorithms/LoadNexus-v1.rst | 27 ++ .../source/algorithms/LoadNexusLogs-v1.rst | 20 ++ .../algorithms/LoadNexusMonitors-v1.rst | 20 ++ .../algorithms/LoadNexusProcessed-v1.rst | 44 +++ .../source/algorithms/LoadPDFgetNFile-v1.rst | 28 ++ .../algorithms/LoadParameterFile-v1.rst | 30 ++ .../source/algorithms/LoadPreNexus-v1.rst | 14 + .../algorithms/LoadPreNexusMonitors-v1.rst | 17 ++ .../docs/source/algorithms/LoadQKK-v1.rst | 14 + .../docs/source/algorithms/LoadRKH-v1.rst | 19 ++ .../docs/source/algorithms/LoadRaw-v3.rst | 70 +++++ .../docs/source/algorithms/LoadRawBin0-v1.rst | 15 + .../source/algorithms/LoadRawSpectrum0-v1.rst | 15 + .../docs/source/algorithms/LoadReflTBL-v1.rst | 24 ++ .../docs/source/algorithms/LoadSINQ-v1.rst | 24 ++ .../source/algorithms/LoadSINQFile-v1.rst | 18 ++ .../source/algorithms/LoadSINQFocus-v1.rst | 17 ++ .../docs/source/algorithms/LoadSNSspec-v1.rst | 76 +++++ .../docs/source/algorithms/LoadSPE-v1.rst | 20 ++ .../docs/source/algorithms/LoadSQW-v1.rst | 164 +++++++++++ .../LoadSampleDetailsFromRaw-v1.rst | 45 +++ .../docs/source/algorithms/LoadSassena-v1.rst | 50 ++++ .../docs/source/algorithms/LoadSpec-v1.rst | 76 +++++ .../docs/source/algorithms/LoadSpice2D-v1.rst | 14 + .../source/algorithms/LoadTOFRawNexus-v1.rst | 32 +++ .../docs/source/algorithms/LoadVesuvio-v1.rst | 15 + .../docs/source/algorithms/Logarithm-v1.rst | 29 ++ .../docs/source/algorithms/LogarithmMD-v1.rst | 23 ++ .../source/algorithms/Lorentzian1D-v1.rst | 39 +++ .../algorithms/MDHistoToWorkspace2D-v1.rst | 22 ++ .../docs/source/algorithms/MaskAngle-v1.rst | 17 ++ .../docs/source/algorithms/MaskBTP-v1.rst | 34 +++ .../docs/source/algorithms/MaskBins-v1.rst | 47 +++ .../algorithms/MaskBinsFromTable-v1.rst | 31 ++ .../source/algorithms/MaskDetectors-v1.rst | 103 +++++++ .../source/algorithms/MaskDetectorsIf-v1.rst | 17 ++ .../algorithms/MaskDetectorsInShape-v1.rst | 29 ++ .../docs/source/algorithms/MaskMD-v1.rst | 43 +++ .../algorithms/MaskPeaksWorkspace-v1.rst | 17 ++ .../algorithms/MaskWorkspaceToCalFile-v1.rst | 17 ++ Code/Mantid/docs/source/algorithms/Max-v1.rst | 14 + .../docs/source/algorithms/MaxMin-v1.rst | 21 ++ .../Mantid/docs/source/algorithms/Mean-v1.rst | 15 + .../algorithms/MedianDetectorTest-v1.rst | 46 +++ .../source/algorithms/MergeCalFiles-v1.rst | 17 ++ .../docs/source/algorithms/MergeLogs-v1.rst | 20 ++ .../docs/source/algorithms/MergeMD-v1.rst | 27 ++ .../source/algorithms/MergeMDFiles-v1.rst | 39 +++ .../docs/source/algorithms/MergeRuns-v1.rst | 66 +++++ Code/Mantid/docs/source/algorithms/Min-v1.rst | 14 + .../docs/source/algorithms/Minus-v1.rst | 20 ++ .../docs/source/algorithms/MinusMD-v1.rst | 41 +++ .../source/algorithms/ModeratorTzero-v1.rst | 75 +++++ .../algorithms/ModeratorTzeroLinear-v1.rst | 64 +++++ .../ModifyDetectorDotDatFile-v1.rst | 37 +++ .../source/algorithms/MonitorLiveData-v1.rst | 24 ++ .../algorithms/MonteCarloAbsorption-v1.rst | 44 +++ .../algorithms/MoveInstrumentComponent-v1.rst | 23 ++ ...ultipleScatteringCylinderAbsorption-v1.rst | 19 ++ .../docs/source/algorithms/Multiply-v1.rst | 16 ++ .../docs/source/algorithms/MultiplyMD-v1.rst | 31 ++ .../source/algorithms/MultiplyRange-v1.rst | 14 + .../algorithms/MuonCalculateAsymmetry-v1.rst | 27 ++ .../algorithms/MuonGroupDetectors-v1.rst | 25 ++ .../docs/source/algorithms/MuonLoad-v1.rst | 34 +++ .../docs/source/algorithms/MuscatData-v1.rst | 23 ++ .../docs/source/algorithms/MuscatFunc-v1.rst | 24 ++ .../docs/source/algorithms/NexusTester-v1.rst | 26 ++ .../algorithms/NormaliseByCurrent-v1.rst | 37 +++ .../algorithms/NormaliseByDetector-v1.rst | 158 ++++++++++ .../algorithms/NormaliseByPeakArea-v1.rst | 29 ++ .../algorithms/NormaliseByThickness-v1.rst | 14 + .../algorithms/NormaliseToMonitor-v1.rst | 65 +++++ .../source/algorithms/NormaliseToUnity-v1.rst | 20 ++ .../algorithms/NormaliseVanadium-v1.rst | 15 + .../docs/source/algorithms/NotMD-v1.rst | 17 ++ .../OSIRISDiffractionReduction-v1.rst | 21 ++ .../algorithms/OneMinusExponentialCor-v1.rst | 26 ++ .../docs/source/algorithms/OneStepMDEW-v1.rst | 25 ++ .../OptimizeCrystalPlacement-v1.rst | 47 +++ .../OptimizeLatticeForCellType-v1.rst | 23 ++ .../Mantid/docs/source/algorithms/OrMD-v1.rst | 16 ++ .../PDDetermineCharacterizations-v1.rst | 14 + .../algorithms/PDFFourierTransform-v1.rst | 61 ++++ .../algorithms/PDLoadCharacterizations-v1.rst | 19 ++ .../docs/source/algorithms/Pause-v1.rst | 18 ++ .../source/algorithms/PeakIntegration-v1.rst | 16 ++ .../algorithms/PeakIntensityVsRadius-v1.rst | 73 +++++ .../source/algorithms/PeaksInRegion-v1.rst | 15 + .../source/algorithms/PeaksOnSurface-v1.rst | 17 ++ .../algorithms/PearlMCAbsorption-v1.rst | 25 ++ .../algorithms/PerformIndexOperations-v1.rst | 14 + .../algorithms/PlotAsymmetryByLogValue-v1.rst | 40 +++ .../algorithms/PlotPeakByLogValue-v1.rst | 66 +++++ .../Mantid/docs/source/algorithms/Plus-v1.rst | 32 +++ .../docs/source/algorithms/PlusMD-v1.rst | 54 ++++ .../algorithms/PointByPointVCorrection-v1.rst | 43 +++ .../source/algorithms/PoissonErrors-v1.rst | 17 ++ .../algorithms/PoldiAutoCorrelation-v5.rst | 28 ++ .../source/algorithms/PoldiFitPeaks1D-v1.rst | 25 ++ .../algorithms/PoldiLoadChopperSlits-v1.rst | 19 ++ .../source/algorithms/PoldiLoadIPP-v1.rst | 19 ++ .../source/algorithms/PoldiLoadLog-v1.rst | 19 ++ .../source/algorithms/PoldiLoadSpectra-v1.rst | 19 ++ .../docs/source/algorithms/PoldiMerge-v1.rst | 28 ++ .../algorithms/PoldiPeakDetection-v2.rst | 19 ++ .../source/algorithms/PoldiPeakSearch-v1.rst | 61 ++++ .../algorithms/PoldiProjectAddDir-v1.rst | 19 ++ .../algorithms/PoldiProjectAddFile-v1.rst | 19 ++ .../source/algorithms/PoldiProjectRun-v1.rst | 227 +++++++++++++++ .../algorithms/PoldiRemoveDeadWires-v1.rst | 19 ++ .../algorithms/PolynomialCorrection-v1.rst | 23 ++ .../docs/source/algorithms/Power-v1.rst | 24 ++ .../algorithms/PowerLawCorrection-v1.rst | 18 ++ .../docs/source/algorithms/PowerMD-v1.rst | 22 ++ .../algorithms/PredictFractionalPeaks-v1.rst | 37 +++ .../source/algorithms/PredictPeaks-v1.rst | 49 ++++ .../algorithms/PreprocessDetectorsToMD-v1.rst | 14 + .../algorithms/ProcessBackground-v1.rst | 55 ++++ .../algorithms/ProcessDasNexusLog-v1.rst | 19 ++ .../docs/source/algorithms/ProjectMD-v1.rst | 35 +++ Code/Mantid/docs/source/algorithms/Q1D-v2.rst | 208 ++++++++++++++ .../docs/source/algorithms/Q1DWeighted-v1.rst | 27 ++ .../docs/source/algorithms/QLines-v1.rst | 41 +++ .../algorithms/QueryAllRemoteJobs-v1.rst | 19 ++ .../source/algorithms/QueryMDWorkspace-v1.rst | 24 ++ .../source/algorithms/QueryRemoteFile-v1.rst | 18 ++ .../source/algorithms/QueryRemoteJob-v1.rst | 18 ++ .../docs/source/algorithms/Quest-v1.rst | 19 ++ Code/Mantid/docs/source/algorithms/Qxy-v1.rst | 18 ++ .../source/algorithms/REFLReprocess-v1.rst | 14 + .../docs/source/algorithms/RadiusSum-v1.rst | 53 ++++ .../docs/source/algorithms/RawFileInfo-v1.rst | 18 ++ .../source/algorithms/RayTracerTester-v1.rst | 15 + .../algorithms/ReactorSANSResolution-v1.rst | 18 ++ .../algorithms/ReadGroupsFromFile-v1.rst | 22 ++ .../docs/source/algorithms/RealFFT-v1.rst | 25 ++ .../docs/source/algorithms/Rebin-v1.rst | 83 ++++++ .../docs/source/algorithms/Rebin2D-v1.rst | 27 ++ .../algorithms/RebinByPulseTimes-v1.rst | 47 +++ .../source/algorithms/RebinToWorkspace-v1.rst | 17 ++ .../docs/source/algorithms/Rebunch-v1.rst | 14 + .../algorithms/RecordPythonScript-v1.rst | 14 + .../source/algorithms/RefLReduction-v1.rst | 14 + .../source/algorithms/RefReduction-v1.rst | 16 ++ .../docs/source/algorithms/RefRoi-v1.rst | 14 + .../RefinePowderDiffProfileSeq-v1.rst | 76 +++++ .../RefinePowderInstrumentParameters-v3.rst | 64 +++++ .../ReflectometryReductionOne-v1.rst | 49 ++++ .../ReflectometryReductionOneAuto-v1.rst | 20 ++ .../docs/source/algorithms/Regroup-v1.rst | 27 ++ .../docs/source/algorithms/RemoveBins-v1.rst | 59 ++++ .../source/algorithms/RemoveExpDecay-v1.rst | 22 ++ .../docs/source/algorithms/RemoveLogs-v1.rst | 14 + .../source/algorithms/RemoveLowResTOF-v1.rst | 14 + .../algorithms/RemovePromptPulse-v1.rst | 14 + .../docs/source/algorithms/RenameLog-v1.rst | 15 + .../source/algorithms/RenameWorkspace-v1.rst | 23 ++ .../source/algorithms/RenameWorkspaces-v1.rst | 28 ++ .../algorithms/ReplaceSpecialValues-v1.rst | 23 ++ .../docs/source/algorithms/ResNorm-v1.rst | 20 ++ .../docs/source/algorithms/ResampleX-v1.rst | 20 ++ .../source/algorithms/ResetNegatives-v1.rst | 19 ++ .../ResizeRectangularDetector-v1.rst | 37 +++ .../source/algorithms/RetrieveRunInfo-v1.rst | 33 +++ .../docs/source/algorithms/RingProfile-v1.rst | 65 +++++ .../RotateInstrumentComponent-v1.rst | 17 ++ .../source/algorithms/RunPythonScript-v1.rst | 18 ++ .../algorithms/SANSAbsoluteScale-v1.rst | 14 + .../algorithms/SANSAzimuthalAverage1D-v1.rst | 14 + .../source/algorithms/SANSBeamFinder-v1.rst | 18 ++ .../algorithms/SANSBeamFluxCorrection-v1.rst | 22 ++ .../SANSBeamSpreaderTransmission-v1.rst | 14 + .../algorithms/SANSDirectBeamScaling-v1.rst | 14 + .../SANSDirectBeamTransmission-v1.rst | 14 + .../docs/source/algorithms/SANSMask-v1.rst | 14 + .../source/algorithms/SANSReduction-v1.rst | 14 + .../SANSSensitivityCorrection-v1.rst | 25 ++ .../SANSSolidAngleCorrection-v1.rst | 18 ++ .../source/algorithms/SANSSubtract-v1.rst | 30 ++ .../algorithms/SANSWideAngleCorrection-v1.rst | 137 +++++++++ .../algorithms/SCDCalibratePanels-v1.rst | 98 +++++++ .../algorithms/SNSPowderReduction-v1.rst | 22 ++ .../docs/source/algorithms/SassenaFFT-v1.rst | 63 ++++ .../source/algorithms/SaveANSTOAscii-v1.rst | 23 ++ .../docs/source/algorithms/SaveAscii-v1.rst | 24 ++ .../docs/source/algorithms/SaveAscii-v2.rst | 24 ++ .../docs/source/algorithms/SaveCSV-v1.rst | 40 +++ .../docs/source/algorithms/SaveCalFile-v1.rst | 23 ++ .../source/algorithms/SaveCanSAS1D-v1.rst | 21 ++ .../source/algorithms/SaveCanSAS1D-v2.rst | 37 +++ .../docs/source/algorithms/SaveDaveGrp-v1.rst | 16 ++ .../algorithms/SaveDetectorsGrouping-v1.rst | 46 +++ .../source/algorithms/SaveDspacemap-v1.rst | 15 + .../source/algorithms/SaveFocusedXYE-v1.rst | 31 ++ .../algorithms/SaveFullprofResolution-v1.rst | 60 ++++ .../algorithms/SaveGSASInstrumentFile-v1.rst | 71 +++++ .../docs/source/algorithms/SaveGSS-v1.rst | 40 +++ .../docs/source/algorithms/SaveHKL-v1.rst | 44 +++ .../algorithms/SaveILLCosmosAscii-v1.rst | 23 ++ .../source/algorithms/SaveISISNexus-v1.rst | 14 + .../source/algorithms/SaveIsawDetCal-v1.rst | 18 ++ .../source/algorithms/SaveIsawPeaks-v1.rst | 14 + .../source/algorithms/SaveIsawQvector-v1.rst | 15 + .../docs/source/algorithms/SaveIsawUB-v1.rst | 23 ++ .../docs/source/algorithms/SaveMD-v1.rst | 23 ++ .../docs/source/algorithms/SaveMask-v1.rst | 58 ++++ .../docs/source/algorithms/SaveNISTDAT-v1.rst | 18 ++ .../docs/source/algorithms/SaveNXSPE-v1.rst | 27 ++ .../docs/source/algorithms/SaveNexus-v1.rst | 41 +++ .../algorithms/SaveNexusProcessed-v1.rst | 48 ++++ .../docs/source/algorithms/SavePAR-v1.rst | 36 +++ .../docs/source/algorithms/SavePHX-v1.rst | 38 +++ .../docs/source/algorithms/SavePlot1D-v1.rst | 21 ++ .../docs/source/algorithms/SaveRKH-v1.rst | 21 ++ .../docs/source/algorithms/SaveReflTBL-v1.rst | 37 +++ .../docs/source/algorithms/SaveSPE-v1.rst | 26 ++ .../algorithms/SaveToSNSHistogramNexus-v1.rst | 22 ++ .../docs/source/algorithms/SaveVTK-v1.rst | 18 ++ .../docs/source/algorithms/SaveZODS-v1.rst | 73 +++++ .../docs/source/algorithms/Scale-v1.rst | 17 ++ .../docs/source/algorithms/ScaleX-v1.rst | 20 ++ .../source/algorithms/SelectCellOfType-v1.rst | 31 ++ .../algorithms/SelectCellWithForm-v1.rst | 31 ++ .../algorithms/SelectPowderDiffPeaks-v1.rst | 14 + .../source/algorithms/SetGoniometer-v1.rst | 40 +++ .../algorithms/SetInstrumentParameter-v1.rst | 26 ++ .../source/algorithms/SetMDUsingMask-v1.rst | 36 +++ .../algorithms/SetSampleMaterial-v1.rst | 25 ++ .../source/algorithms/SetScalingPSD-v1.rst | 75 +++++ .../algorithms/SetSpecialCoordinates-v1.rst | 32 +++ .../docs/source/algorithms/SetUB-v1.rst | 24 ++ .../source/algorithms/SetUncertainties-v1.rst | 14 + .../algorithms/SetupEQSANSReduction-v1.rst | 20 ++ .../algorithms/SetupHFIRReduction-v1.rst | 20 ++ .../algorithms/SetupILLD33Reduction-v1.rst | 20 ++ .../source/algorithms/ShiftLogTime-v1.rst | 14 + .../algorithms/ShowPeakHKLOffsets-v1.rst | 20 ++ .../algorithms/ShowPossibleCells-v1.rst | 28 ++ .../source/algorithms/SignalOverError-v1.rst | 15 + .../SimulateResolutionConvolvedModel-v1.rst | 14 + .../docs/source/algorithms/SliceMD-v1.rst | 64 +++++ .../docs/source/algorithms/SmoothData-v1.rst | 22 ++ .../source/algorithms/SmoothNeighbours-v1.rst | 159 ++++++++++ .../docs/source/algorithms/SofQW-v1.rst | 29 ++ .../docs/source/algorithms/SofQW2-v1.rst | 16 ++ .../docs/source/algorithms/SofQW3-v1.rst | 29 ++ .../source/algorithms/SofQWMoments-v1.rst | 16 ++ .../docs/source/algorithms/SolidAngle-v1.rst | 28 ++ .../source/algorithms/SortByQVectors-v1.rst | 16 ++ .../source/algorithms/SortDetectors-v1.rst | 15 + .../docs/source/algorithms/SortEvents-v1.rst | 20 ++ .../docs/source/algorithms/SortHKL-v1.rst | 17 ++ .../algorithms/SortPeaksWorkspace-v1.rst | 18 ++ .../docs/source/algorithms/SortXAxis-v1.rst | 22 ++ .../source/algorithms/SpatialGrouping-v1.rst | 25 ++ .../SpecularReflectionCalculateTheta-v1.rst | 22 ++ .../SpecularReflectionPositionCorrect-v1.rst | 24 ++ .../algorithms/SphericalAbsorption-v1.rst | 17 ++ .../source/algorithms/SplineBackground-v1.rst | 17 ++ .../algorithms/SplineInterpolation-v1.rst | 40 +++ .../source/algorithms/SplineSmoothing-v1.rst | 28 ++ .../docs/source/algorithms/Squares-v1.rst | 16 ++ .../source/algorithms/StartLiveData-v1.rst | 77 +++++ .../algorithms/StartRemoteTransaction-v1.rst | 17 ++ .../docs/source/algorithms/StepScan-v1.rst | 26 ++ .../docs/source/algorithms/Stitch1D-v3.rst | 25 ++ .../docs/source/algorithms/Stitch1DMD-v1.rst | 23 ++ .../source/algorithms/Stitch1DMany-v1.rst | 26 ++ .../algorithms/StopRemoteTransaction-v1.rst | 17 ++ .../docs/source/algorithms/StripPeaks-v1.rst | 21 ++ .../algorithms/StripVanadiumPeaks-v1.rst | 30 ++ .../algorithms/StripVanadiumPeaks-v2.rst | 22 ++ .../source/algorithms/SubmitRemoteJob-v1.rst | 17 ++ .../source/algorithms/SuggestTibCNCS-v1.rst | 19 ++ .../source/algorithms/SuggestTibHYSPEC-v1.rst | 15 + .../algorithms/SumEventsByLogValue-v1.rst | 51 ++++ .../source/algorithms/SumNeighbours-v1.rst | 19 ++ .../source/algorithms/SumRowColumn-v1.rst | 25 ++ .../docs/source/algorithms/SumSpectra-v1.rst | 49 ++++ .../docs/source/algorithms/Symmetrise-v1.rst | 17 ++ .../algorithms/TOFSANSResolution-v1.rst | 14 + .../TestWorkspaceGroupProperty-v1.rst | 14 + .../docs/source/algorithms/ThresholdMD-v1.rst | 15 + .../source/algorithms/TransformHKL-v1.rst | 23 ++ .../docs/source/algorithms/TransformMD-v1.rst | 53 ++++ .../docs/source/algorithms/Transpose-v1.rst | 23 ++ .../source/algorithms/USANSSimulation-v1.rst | 26 ++ .../source/algorithms/UnGroupWorkspace-v1.rst | 16 ++ .../source/algorithms/UnwrapMonitor-v1.rst | 90 ++++++ .../docs/source/algorithms/UnwrapSNS-v1.rst | 47 +++ .../UpdateInstrumentFromFile-v1.rst | 64 +++++ .../UpdatePeakParameterTableValue-v1.rst | 53 ++++ .../algorithms/UpdateScriptRepository-v1.rst | 16 ++ .../source/algorithms/UploadRemoteFile-v1.rst | 19 ++ .../source/algorithms/UserFunction1D-v1.rst | 99 +++++++ .../docs/source/algorithms/ViewBOA-v1.rst | 17 ++ .../source/algorithms/WeightedMean-v1.rst | 22 ++ .../source/algorithms/WeightedMeanMD-v1.rst | 17 ++ .../algorithms/WeightedMeanOfWorkspace-v1.rst | 23 ++ .../docs/source/algorithms/XorMD-v1.rst | 16 ++ Code/Mantid/docs/source/functions/Abragam.rst | 11 + Code/Mantid/docs/source/functions/BSpline.rst | 19 ++ .../functions/BackToBackExponential.rst | 47 +++ .../docs/source/functions/BivariateNormal.rst | 62 ++++ .../docs/source/functions/Chebyshev.rst | 33 +++ .../source/functions/CompositeFunction.rst | 63 ++++ .../docs/source/functions/Convolution.rst | 39 +++ .../docs/source/functions/CubicSpline.rst | 19 ++ .../functions/DiffRotDiscreteCircle.rst | 131 +++++++++ .../docs/source/functions/DiffSphere.rst | 65 +++++ .../Mantid/docs/source/functions/ExpDecay.rst | 11 + .../docs/source/functions/ExpDecayMuon.rst | 11 + .../docs/source/functions/ExpDecayOsc.rst | 11 + .../docs/source/functions/FlatBackground.rst | 11 + .../docs/source/functions/GausDecay.rst | 11 + Code/Mantid/docs/source/functions/GausOsc.rst | 11 + .../Mantid/docs/source/functions/Gaussian.rst | 29 ++ .../source/functions/IkedaCarpenterPV.rst | 69 +++++ .../docs/source/functions/LatticeErrors.rst | 9 + .../source/functions/LinearBackground.rst | 14 + .../docs/source/functions/LogNormal.rst | 11 + .../docs/source/functions/Lorentzian.rst | 36 +++ .../source/functions/MuonFInteraction.rst | 28 ++ .../functions/NeutronBk2BkExpConvPVoigt.rst | 170 +++++++++++ .../docs/source/functions/PeakHKLErrors.rst | 55 ++++ .../docs/source/functions/ProductFunction.rst | 13 + .../source/functions/ProductLinearExp.rst | 18 ++ .../source/functions/ProductQuadraticExp.rst | 18 ++ .../docs/source/functions/Quadratic.rst | 17 ++ .../docs/source/functions/SCDPanelErrors.rst | 115 ++++++++ .../source/functions/StaticKuboToyabe.rst | 12 + .../StaticKuboToyabeTimesExpDecay.rst | 11 + .../StaticKuboToyabeTimesGausDecay.rst | 11 + .../docs/source/functions/StretchExp.rst | 11 + .../docs/source/functions/StretchExpMuon.rst | 11 + .../ThermalNeutronBk2BkExpConvPVoigt.rst | 170 +++++++++++ .../docs/source/functions/UserFunction.rst | 16 ++ Code/Mantid/docs/source/functions/Voigt.rst | 33 +++ 1282 files changed, 21386 insertions(+), 12734 deletions(-) create mode 100644 Code/Mantid/docs/source/algorithms/AbortRemoteJob-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AddLogDerivative-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AddPeak-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AddSampleLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AddTimeSeriesLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AlignAndFocusPowder-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AlignDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AlphaCalc-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AndMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AnvredCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AppendGeometryToSNSNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ApplyCalibration-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ApplyDeadTimeCorr-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ApplyDetailedBalance-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ApplyTransmissionCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AsymmetryCalc-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Authenticate-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/AverageLogData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/BASISReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/BinMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/BinaryOperateMasks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalMuonDeadTime-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalculateEfficiency-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalculateFlatBackground-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalculateGammaBackground-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalculatePeaksHKL-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalculateTransmission-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalculateTransmissionBeamSpreader-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalculateUMatrix-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalculateZscore-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CalibrateRectangularDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogDownloadDataFiles-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogGetDataFiles-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogGetDataSets-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogKeepAlive-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogListInstruments-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogListInvestigationTypes-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogLogin-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogLogout-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogMyDataSearch-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogPublish-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CatalogSearch-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CentroidPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CentroidPeaksMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CentroidPeaksMD-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/ChangeBinOffset-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ChangeLogTime-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ChangePulsetime-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CheckForSampleLogs-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CheckWorkspacesMatch-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ChopData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ClearMaskFlag-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ClearUB-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CloneMDWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CloneWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CombinePeaksWorkspaces-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CompareMDWorkspaces-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CompressEvents-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ComputeSensitivity-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConjoinFiles-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConjoinSpectra-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConjoinWorkspaces-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertAxisByFormula-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertFromDistribution-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertMDHistoToMatrixWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertSnsRoiFileToMask-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertTableToMatrixWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToDistribution-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToEventWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToHistogram-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToMDMinMaxGlobal-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToMDMinMaxLocal-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToMatrixWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToPointData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertToYSpace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvertUnits-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ConvolveWorkspaces-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CopyInstrumentParameters-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CopyLogs-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CopySample-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CorrectFlightPaths-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CorrectKiKf-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CorrectLogTimes-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CorrectToFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateCalFileByNames-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateChopperModel-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateDummyCalFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateEmptyTableWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateFlatEventWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateGroupingWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateLeBailFitInput-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateLogPropertyTable-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateLogTimeCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateMDHistoWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateMDWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateModeratorModel-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreatePSDBleedMask-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreatePeaksWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateSampleShape-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateSampleWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateSimulationWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateSingleValuedWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspaceAuto-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CropWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CrossCorrelate-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/CylinderAbsorption-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DakotaChiSquared-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DefineGaugeVolume-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DeleteLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DeleteTableRows-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DeleteWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DensityOfStates-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DetectorDiagnostic-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DetectorEfficiencyCor-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DetectorEfficiencyCorUser-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DetermineChunking-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DgsConvertToEnergyTransfer-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DgsDiagnose-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DgsPreprocessData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DgsProcessDetectorVanadium-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DgsReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DgsRemap-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DiffPeaksWorkspaces-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DiffractionEventCalibrateDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/Divide-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DivideMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/DownloadRemoteFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSAzimuthalAverage1D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSDarkCurrentSubtraction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSDirectBeamTransmission-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSLoad-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSMonitorTOF-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSNormalise-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSPatchSensitivity-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSQ2D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSResolution-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EQSANSTofStructure-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EditInstrumentGeometry-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ElasticWindow-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EqualToMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/EstimatePDDetectorResolution-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExaminePowderDiffProfile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Exponential-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExponentialCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExponentialMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExportExperimentLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExportSampleLogsToCSVFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExportTimeSeriesLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExtractFFTSpectrum-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExtractMask-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExtractMaskToTable-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ExtractSingleSpectrum-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FFT-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FFTDerivative-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FFTSmooth-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FFTSmooth-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/FakeISISEventDAE-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FakeISISHistoDAE-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FakeMDEventData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FilterBadPulses-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FilterByLogValue-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FilterByTime-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FilterByXValue-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FilterEvents-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FilterEventsByLogValuePreNexus-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/FilterLogByTime-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FilterPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindCenterOfMassPosition-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindCenterOfMassPosition-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindClusterFaces-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindDetectorsInShape-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindDetectorsPar-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindPeakBackground-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindPeaksMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindReflectometryLines-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindSXPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindUBUsingFFT-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindUBUsingIndexedPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindUBUsingLatticeParameters-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FindUBUsingMinMaxD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Fit-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FitPeak-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FitResolutionConvolvedModel-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FixGSASInstrumentFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FlatPlateAbsorption-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/FuryFitMultiple-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GeneralisedSecondDifference-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GenerateGroupingPowder-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GenerateGroupingSNSInelastic-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GeneratePeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GetDetectorOffsets-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GetEi-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GetEi-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/GetEiMonDet-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GetEiT0atSNS-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GetTimeSeriesLogInformation-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GoniometerAnglesFromPhiRotation-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GreaterThanMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/GroupWorkspaces-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/HFIRDarkCurrentSubtraction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/HFIRLoad-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/HFIRSANSNormalise-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/HFIRSANSReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/HasUB-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/He3TubeEfficiency-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IQTransform-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IdentifyNoisyDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ImportMDEventWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IndexPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IndexSXPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IndirectTransmission-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IntegrateByComponent-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IntegrateEllipsoids-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IntegratePeakTimeSlices-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Integration-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/InvertMDDim-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/InvertMask-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LeBailFit-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LessThanMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Load-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadAscii-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadAscii-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadCalFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadCanSAS1D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadCanSAS1D-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadDaveGrp-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadDetectorInfo-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadDetectorsGroupingFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadDspacemap-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadEmptyInstrument-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadFlexiNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadFullprofResolution-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadGSASInstrumentFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadHKL-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadIDFFromNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadILL-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadILLIndirect-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadILLSANS-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadISISNexus-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadInstrument-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadInstrumentFromNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadInstrumentFromRaw-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadIsawDetCal-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadIsawPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadIsawSpectrum-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadIsawUB-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadLLB-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadLOQDistancesFromRaw-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadLogPropertyTable-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadLogsForSNSPulsedMagnet-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMappingTable-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMask-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMcStas-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMcStasNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMultipleGSS-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMuonNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadMuonNexus-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadNXSPE-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadNexusLogs-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadNexusMonitors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadPDFgetNFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadPreNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadPreNexusMonitors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadQKK-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadRKH-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadRawBin0-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadRawSpectrum0-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadReflTBL-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSINQ-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSINQFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSINQFocus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSNSspec-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSPE-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSampleDetailsFromRaw-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSassena-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSpec-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadSpice2D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadTOFRawNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LoadVesuvio-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Logarithm-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/LogarithmMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Lorentzian1D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MDHistoToWorkspace2D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskAngle-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskBTP-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskBins-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskDetectorsIf-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskPeaksWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaskWorkspaceToCalFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Max-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MaxMin-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Mean-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MergeCalFiles-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MergeLogs-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MergeMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MergeMDFiles-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Min-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Minus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MinusMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ModeratorTzero-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ModeratorTzeroLinear-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ModifyDetectorDotDatFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MonitorLiveData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MonteCarloAbsorption-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MoveInstrumentComponent-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MultipleScatteringCylinderAbsorption-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Multiply-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MultiplyMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MultiplyRange-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MuonCalculateAsymmetry-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MuonGroupDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MuscatData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/MuscatFunc-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NexusTester-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NormaliseByPeakArea-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NormaliseByThickness-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NormaliseToUnity-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NormaliseVanadium-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/NotMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/OSIRISDiffractionReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/OneMinusExponentialCor-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/OneStepMDEW-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/OptimizeCrystalPlacement-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/OptimizeLatticeForCellType-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/OrMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PDDetermineCharacterizations-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PDFFourierTransform-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PDLoadCharacterizations-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Pause-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PeakIntegration-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PeaksInRegion-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PeaksOnSurface-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PearlMCAbsorption-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PerformIndexOperations-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PlotAsymmetryByLogValue-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Plus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PlusMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoissonErrors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiAutoCorrelation-v5.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiFitPeaks1D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiLoadChopperSlits-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiLoadIPP-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiLoadLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiLoadSpectra-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiMerge-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiPeakDetection-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiPeakSearch-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiProjectAddDir-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiProjectAddFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PoldiRemoveDeadWires-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PolynomialCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Power-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PowerLawCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PowerMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PredictFractionalPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/PreprocessDetectorsToMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ProcessBackground-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ProcessDasNexusLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ProjectMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Q1D-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/Q1DWeighted-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/QLines-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/QueryAllRemoteJobs-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/QueryMDWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/QueryRemoteFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/QueryRemoteJob-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Quest-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Qxy-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/REFLReprocess-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RadiusSum-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RawFileInfo-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RayTracerTester-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ReactorSANSResolution-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RealFFT-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Rebin-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Rebin2D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RebinByPulseTimes-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RebinToWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Rebunch-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RecordPythonScript-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RefLReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RefReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RefRoi-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RefinePowderDiffProfileSeq-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst create mode 100644 Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ReflectometryReductionOneAuto-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Regroup-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RemoveExpDecay-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RemoveLogs-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RemoveLowResTOF-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RemovePromptPulse-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RenameLog-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RenameWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RenameWorkspaces-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ReplaceSpecialValues-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ResNorm-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ResampleX-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ResetNegatives-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ResizeRectangularDetector-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RetrieveRunInfo-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RingProfile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RotateInstrumentComponent-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/RunPythonScript-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSAbsoluteScale-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSAzimuthalAverage1D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSBeamFinder-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSBeamFluxCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSBeamSpreaderTransmission-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSDirectBeamScaling-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSDirectBeamTransmission-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSMask-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSSensitivityCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSSolidAngleCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSSubtract-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SCDCalibratePanels-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SNSPowderReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveANSTOAscii-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveAscii-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveCSV-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveCalFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveCanSAS1D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveCanSAS1D-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveDaveGrp-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveDetectorsGrouping-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveDspacemap-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveFocusedXYE-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveFullprofResolution-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveGSASInstrumentFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveGSS-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveHKL-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveILLCosmosAscii-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveISISNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveIsawDetCal-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveIsawPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveIsawQvector-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveIsawUB-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveMask-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveNISTDAT-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SavePAR-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SavePHX-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SavePlot1D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveRKH-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveReflTBL-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveSPE-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveToSNSHistogramNexus-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveVTK-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SaveZODS-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Scale-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ScaleX-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SelectCellOfType-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SelectCellWithForm-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SelectPowderDiffPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetGoniometer-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetInstrumentParameter-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetMDUsingMask-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetSampleMaterial-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetScalingPSD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetSpecialCoordinates-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetUB-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetUncertainties-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetupEQSANSReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetupHFIRReduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SetupILLD33Reduction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ShiftLogTime-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ShowPeakHKLOffsets-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ShowPossibleCells-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SignalOverError-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SimulateResolutionConvolvedModel-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SliceMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SmoothData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SmoothNeighbours-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SofQW-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SofQW2-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SofQW3-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SofQWMoments-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SolidAngle-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SortByQVectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SortDetectors-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SortEvents-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SortHKL-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SortPeaksWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SortXAxis-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SpecularReflectionCalculateTheta-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SpecularReflectionPositionCorrect-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SphericalAbsorption-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SplineBackground-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SplineInterpolation-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SplineSmoothing-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Squares-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/StartRemoteTransaction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/StepScan-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Stitch1D-v3.rst create mode 100644 Code/Mantid/docs/source/algorithms/Stitch1DMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Stitch1DMany-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/StopRemoteTransaction-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/StripVanadiumPeaks-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/StripVanadiumPeaks-v2.rst create mode 100644 Code/Mantid/docs/source/algorithms/SubmitRemoteJob-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SuggestTibCNCS-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SuggestTibHYSPEC-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SumNeighbours-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/SumSpectra-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Symmetrise-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/TOFSANSResolution-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/TestWorkspaceGroupProperty-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ThresholdMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/TransformHKL-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/TransformMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/Transpose-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/USANSSimulation-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/UnGroupWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/UnwrapMonitor-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/UpdateInstrumentFromFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/UpdatePeakParameterTableValue-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/UpdateScriptRepository-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/UploadRemoteFile-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/UserFunction1D-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/ViewBOA-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/WeightedMean-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/WeightedMeanMD-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/WeightedMeanOfWorkspace-v1.rst create mode 100644 Code/Mantid/docs/source/algorithms/XorMD-v1.rst create mode 100644 Code/Mantid/docs/source/functions/Abragam.rst create mode 100644 Code/Mantid/docs/source/functions/BSpline.rst create mode 100644 Code/Mantid/docs/source/functions/BackToBackExponential.rst create mode 100644 Code/Mantid/docs/source/functions/BivariateNormal.rst create mode 100644 Code/Mantid/docs/source/functions/Chebyshev.rst create mode 100644 Code/Mantid/docs/source/functions/CompositeFunction.rst create mode 100644 Code/Mantid/docs/source/functions/Convolution.rst create mode 100644 Code/Mantid/docs/source/functions/CubicSpline.rst create mode 100644 Code/Mantid/docs/source/functions/DiffRotDiscreteCircle.rst create mode 100644 Code/Mantid/docs/source/functions/DiffSphere.rst create mode 100644 Code/Mantid/docs/source/functions/ExpDecay.rst create mode 100644 Code/Mantid/docs/source/functions/ExpDecayMuon.rst create mode 100644 Code/Mantid/docs/source/functions/ExpDecayOsc.rst create mode 100644 Code/Mantid/docs/source/functions/FlatBackground.rst create mode 100644 Code/Mantid/docs/source/functions/GausDecay.rst create mode 100644 Code/Mantid/docs/source/functions/GausOsc.rst create mode 100644 Code/Mantid/docs/source/functions/Gaussian.rst create mode 100644 Code/Mantid/docs/source/functions/IkedaCarpenterPV.rst create mode 100644 Code/Mantid/docs/source/functions/LatticeErrors.rst create mode 100644 Code/Mantid/docs/source/functions/LinearBackground.rst create mode 100644 Code/Mantid/docs/source/functions/LogNormal.rst create mode 100644 Code/Mantid/docs/source/functions/Lorentzian.rst create mode 100644 Code/Mantid/docs/source/functions/MuonFInteraction.rst create mode 100644 Code/Mantid/docs/source/functions/NeutronBk2BkExpConvPVoigt.rst create mode 100644 Code/Mantid/docs/source/functions/PeakHKLErrors.rst create mode 100644 Code/Mantid/docs/source/functions/ProductFunction.rst create mode 100644 Code/Mantid/docs/source/functions/ProductLinearExp.rst create mode 100644 Code/Mantid/docs/source/functions/ProductQuadraticExp.rst create mode 100644 Code/Mantid/docs/source/functions/Quadratic.rst create mode 100644 Code/Mantid/docs/source/functions/SCDPanelErrors.rst create mode 100644 Code/Mantid/docs/source/functions/StaticKuboToyabe.rst create mode 100644 Code/Mantid/docs/source/functions/StaticKuboToyabeTimesExpDecay.rst create mode 100644 Code/Mantid/docs/source/functions/StaticKuboToyabeTimesGausDecay.rst create mode 100644 Code/Mantid/docs/source/functions/StretchExp.rst create mode 100644 Code/Mantid/docs/source/functions/StretchExpMuon.rst create mode 100644 Code/Mantid/docs/source/functions/ThermalNeutronBk2BkExpConvPVoigt.rst create mode 100644 Code/Mantid/docs/source/functions/UserFunction.rst create mode 100644 Code/Mantid/docs/source/functions/Voigt.rst diff --git a/Code/Mantid/Framework/API/src/CompositeFunction.cpp b/Code/Mantid/Framework/API/src/CompositeFunction.cpp index bc10f9f67d34..7ef010f4ea9a 100644 --- a/Code/Mantid/Framework/API/src/CompositeFunction.cpp +++ b/Code/Mantid/Framework/API/src/CompositeFunction.cpp @@ -1,34 +1,3 @@ -/*WIKI* -A composite function is a function containing other functions. It combines the values calculated by the member functions by adding them. The members are indexed from 0 to the number of functions minus 1. The indices are defined by the order in which the functions were added. Composite functions do not have their own parameters, instead they use parameters of the member functions. Parameter names are formed from the member function's index and its parameter name: f[index].[name]. For example, name "f0.Sigma" would be given to the "Sigma" parameter of a Gaussian added first to the composite function. If a member function is a composite function itself the same principle applies: 'f[index].' is prepended to a name, e.g. "f0.f1.Sigma". - -The input string to the Fit algorithm for a CompositeFunction is constructed by joining the inputs of the member functions using the semicolon ';' as a separator. For example, the string for two [[Gaussian]]s with tied sigma parameters may look like the following: - - name=Gaussian,PeakCentre=0,Height=1,Sigma=0.1,constraints=(0 \mathrm{\AA}^{-3} - -== Choosing an absorption correction algorithm == - -This flow chart is given as a way of selecting the most appropriate of the absorption correction algorithms. It also shows the algorithms that must be run first in each case. Note that this does not cover the following absorption correction algorithms: [[MonteCarloAbsorption]] (correction factors for a generic sample using a Monte Carlo instead of a numerical integration method), [[MultipleScatteringCylinderAbsorption]] & [[AnvredCorrection]] (corrections in a spherical sample, using a method imported from ISAW). Also, HRPD users can use the [[HRPDSlabCanAbsorption]] to add rudimentary calculations of the effects of the sample holder. -[[File:AbsorptionFlow.png]] - - -==== Assumptions ==== -This algorithm assumes that the (parallel) beam illuminates the entire sample '''unless''' a 'gauge volume' has been defined using the [[DefineGaugeVolume]] algorithm (or by otherwise adding a valid XML string [[HowToDefineGeometricShape | defining a shape]] to a [[Run]] property called "GaugeVolume"). In this latter case only scattering within this volume (and the sample) is integrated, because this is all the detector can 'see'. The full sample is still used for the neutron paths. ('''N.B.''' If your gauge volume is of axis-aligned cuboid shape and fully enclosed by the sample then you will get a more accurate result from the [[CuboidGaugeVolumeAbsorption]] algorithm.) - -==== Restrictions on the input workspace ==== -The input workspace must have units of wavelength. The [[instrument]] associated with the workspace must be fully defined because detector, source & sample position are needed. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/AddLogDerivative.cpp b/Code/Mantid/Framework/Algorithms/src/AddLogDerivative.cpp index f92f89231d4c..2ddc0436d32e 100644 --- a/Code/Mantid/Framework/Algorithms/src/AddLogDerivative.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AddLogDerivative.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -This algorithm performs a simple numerical derivative of the values in a sample log. - -The 1st order derivative is simply: dy = (y1-y0) / (t1-t0), which is placed in the log at t=(t0+t1)/2 - -Higher order derivatives are obtained by performing the equation above N times. -Since this is a simple numerical derivative, you can expect the result to quickly -get noisy at higher derivatives. - -If any of the times in the logs are repeated, then those repeated time values will be skipped, -and the output derivative log will have fewer points than the input. - -*WIKI*/ #include "MantidAlgorithms/AddLogDerivative.h" #include "MantidKernel/System.h" #include "MantidKernel/TimeSeriesProperty.h" @@ -163,4 +149,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/AddPeak.cpp b/Code/Mantid/Framework/Algorithms/src/AddPeak.cpp index dc9d797c4901..4546738db930 100644 --- a/Code/Mantid/Framework/Algorithms/src/AddPeak.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AddPeak.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Adds a [[IPeak]] to a [[PeaksWorkspace]]. - -*WIKI*/ - #include "MantidAlgorithms/AddPeak.h" #include "MantidKernel/System.h" #include "MantidAPI/IPeaksWorkspace.h" @@ -148,4 +142,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/AddSampleLog.cpp b/Code/Mantid/Framework/Algorithms/src/AddSampleLog.cpp index 3848301de11d..7f0e0763d64f 100644 --- a/Code/Mantid/Framework/Algorithms/src/AddSampleLog.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AddSampleLog.cpp @@ -1,10 +1,3 @@ -/*WIKI* -Workspaces contain information in logs. Often these detail what happened to the sample during the experiment. This algorithm allows one named log to be entered. - -The log can be either a String, a Number, or a Number Series. If you select Number Series, the workspace start time will be used as the time of the log entry, and the number in the text used as the (only) value. - -If the LogText contains a numeric value, the created log will be of integer type if an integer is passed and floating point (double) otherwise. This applies to both the Number & Number Series options. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/AddTimeSeriesLog.cpp b/Code/Mantid/Framework/Algorithms/src/AddTimeSeriesLog.cpp index 47dc3d09fdde..6049f918eaea 100644 --- a/Code/Mantid/Framework/Algorithms/src/AddTimeSeriesLog.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AddTimeSeriesLog.cpp @@ -1,23 +1,3 @@ -/*WIKI* -Creates/updates a time-series log entry on a chosen workspace. The given timestamp & value are appended to the -named log entry. If the named entry does not exist then a new log is created. A time stamp must be given in -ISO8601 format, e.g. 2010-09-14T04:20:12. - -By default, the given value is interpreted as a double and a double series is either created or expected. However, -if the "Type" is set to "int" then the value is interpreted as an integer and an integer is either created -or expected. -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - import datetime as dt - - # Add an entry for the current time - log_name = "temperature" - log_value = 21.5 - AddTimeSeriesLog(inOutWS, Name=log_name, Time=dt.datetime.utcnow().isoformat(), Value=log_value) - -*WIKI_USAGE*/ - #include "MantidAlgorithms/AddTimeSeriesLog.h" #include "MantidKernel/DateTimeValidator.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/AlignDetectors.cpp b/Code/Mantid/Framework/Algorithms/src/AlignDetectors.cpp index cccf45562de6..7e6ffed84822 100644 --- a/Code/Mantid/Framework/Algorithms/src/AlignDetectors.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AlignDetectors.cpp @@ -1,19 +1,3 @@ -/*WIKI* - - -The offsets are a correction to the dSpacing values and are applied during the conversion from time-of-flight to dSpacing as follows: - -: d = \frac{h}{2m_N} \frac{t.o.f.}{L_{tot} sin \theta} (1+ \rm{offset}) - -The detector offsets can be obtained from either: an [[OffsetsWorkspace]] where each pixel has one value, the offset; or a .cal file (in the form created by the ARIEL software). - -'''Note:''' the workspace that this algorithms outputs is a [[Ragged Workspace]]. - -==== Restrictions on the input workspace ==== -The input workspace must contain histogram or event data where the X unit is time-of-flight and the Y data is raw counts. The [[instrument]] associated with the workspace must be fully defined because detector, source & sample position are needed. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/AlphaCalc.cpp b/Code/Mantid/Framework/Algorithms/src/AlphaCalc.cpp index 708c304f8ecf..9942166592a8 100644 --- a/Code/Mantid/Framework/Algorithms/src/AlphaCalc.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AlphaCalc.cpp @@ -1,12 +1,3 @@ -/*WIKI* - - -Returns the relative efficiency of the forward detector group compared to the backward detector group. If Alpha is larger than 1 more counts has been collected in the forward group. - -This algorithm leave the input workspace unchanged. To group detectors in a workspace use [[GroupDetectors]]. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -156,5 +147,3 @@ void AlphaCalc::exec() } // namespace Algorithm } // namespace Mantid - - diff --git a/Code/Mantid/Framework/Algorithms/src/AppendSpectra.cpp b/Code/Mantid/Framework/Algorithms/src/AppendSpectra.cpp index d9e8a8addfac..b2626551d426 100644 --- a/Code/Mantid/Framework/Algorithms/src/AppendSpectra.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AppendSpectra.cpp @@ -1,38 +1,3 @@ -/*WIKI* - -This algorithm appends the spectra of two workspaces together. - -The output workspace from this algorithm will be a copy of the first -input workspace, to which the data from the second input workspace -will be appended. - -Workspace data members other than the data (e.g. instrument etc.) will be copied -from the first input workspace (but if they're not identical anyway, -then you probably shouldn't be using this algorithm!). - -==== Restrictions on the input workspace ==== - -For [[EventWorkspace]]s, there are no restrictions on the input workspaces if ValidateInputs=false. - -For [[Workspace2D]]s, the number of bins must be the same in both inputs. - -If ValidateInputs is selected, then the input workspaces must also: -* Come from the same instrument -* Have common units -* Have common bin boundaries - -==== Spectrum Numbers ==== - -If there is an overlap in the spectrum numbers of both inputs, then the output -workspace will have its spectrum numbers reset starting at 0 and increasing by -1 for each spectrum. - -==== See Also ==== - -* [[ConjoinWorkspaces]] for joining parts of the same workspace. - -*WIKI*/ - #include "MantidAlgorithms/AppendSpectra.h" #include "MantidKernel/System.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ApplyCalibration.cpp b/Code/Mantid/Framework/Algorithms/src/ApplyCalibration.cpp index 2aa9bd552b73..a0e439168d0b 100644 --- a/Code/Mantid/Framework/Algorithms/src/ApplyCalibration.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ApplyCalibration.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Update detector positions from input table workspace. The positions are updated as absolute positions and so this update can be repeated. - -The PositionTable must have columns ''Detector ID'' and ''Detector Position''. The entries of the ''Detector ID'' column are integer referring to the Detector ID and the enties of the ''Detector Position'' are [[V3D]]s referring to the position of the detector whose ID is in same row. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ApplyDeadTimeCorr.cpp b/Code/Mantid/Framework/Algorithms/src/ApplyDeadTimeCorr.cpp index b194e159ce62..2110830f3bac 100644 --- a/Code/Mantid/Framework/Algorithms/src/ApplyDeadTimeCorr.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ApplyDeadTimeCorr.cpp @@ -1,19 +1,3 @@ -/*WIKI* -Apply deadtime correction to each spectra of a workspace. Define: - - {\displaystyle{N}} = true count - {\displaystyle{M}} = measured count - {\displaystyle{t_{dead}}} = dead-time - {\displaystyle{t_{bin}}} = time bin width - {\displaystyle{F}} = Number of good frames - -Then this algorithm assumes that the InputWorkspace contains measured counts as a -function of TOF and returns a workspace containing true counts as a function of the -same TOF binning according to - -: N = \frac{M}{(1-M*(\frac{t_{dead}}{t_{bin}*F}))} -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ApplyDetailedBalance.cpp b/Code/Mantid/Framework/Algorithms/src/ApplyDetailedBalance.cpp index 93dd39550350..0e5a1dd9d1e1 100644 --- a/Code/Mantid/Framework/Algorithms/src/ApplyDetailedBalance.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ApplyDetailedBalance.cpp @@ -1,19 +1,3 @@ -/*WIKI* -The fluctuation dissipation theorem [1,2] relates the dynamic susceptibility to the scattering function - -\left(1-e^{-\frac{E}{k_B T}}\right) S(\mathbf{q}, E) = \frac{1}{\pi} \chi'' (\mathbf{q}, E) - -where E is the energy transfer to the system. The algorithm assumes that the y axis of the -input workspace contains the scattering function S. The y axis of the output workspace will -contain the dynamic susceptibility. The temperature is extracted from a log attached to the workspace, as the mean -value. Alternatively, the temperature can be directly specified. The algorithm will fail if neither option is -valid. - -[1] S. W. Lovesey - Theory of Neutron Scattering from Condensed Matter, vol 1 - -[2] I. A. Zaliznyak and S. H. Lee - Magnetic Neutron Scattering in "Modern techniques for characterizing magnetic materials" - -*WIKI*/ #include "MantidAlgorithms/ApplyDetailedBalance.h" #include "MantidKernel/System.h" #include "MantidKernel/TimeSeriesProperty.h" @@ -114,4 +98,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/ApplyTransmissionCorrection.cpp b/Code/Mantid/Framework/Algorithms/src/ApplyTransmissionCorrection.cpp index f4fb3ff6d574..3ef7aee596d5 100644 --- a/Code/Mantid/Framework/Algorithms/src/ApplyTransmissionCorrection.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ApplyTransmissionCorrection.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -The transmission can be given as a MatrixWorkspace or given directly as numbers. One or the other method must be used. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -145,4 +136,3 @@ void ApplyTransmissionCorrection::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/AsymmetryCalc.cpp b/Code/Mantid/Framework/Algorithms/src/AsymmetryCalc.cpp index 8963b6590660..322d6a3bb44c 100644 --- a/Code/Mantid/Framework/Algorithms/src/AsymmetryCalc.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AsymmetryCalc.cpp @@ -1,33 +1,3 @@ -/*WIKI* -This algorithm is used to calculate the asymmetry for a muon workspace. The asymmetry is given by: - -: Asymmetry = \frac{F-\alpha B}{F+\alpha B} - -where F is the front spectra, B is the back spectra and a is alpha. - -The errors in F-aB and F+aB are calculated by adding the errors in F and B in quadrature; any errors in alpha are ignored. The errors for the asymmetry are then calculated using the fractional error method with the values for the errors in F-aB and F+aB. - -The output workspace contains one set of data for the time of flight, the asymmetry and the asymmetry errors. - -Note: this algorithm does not perform any grouping; the grouping must be done via the GroupDetectors algorithm or when the NeXus file is loaded auto_group must be set to true. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - OutWS = AsymmetryCalc("EmuData","1.0","0,1,2,3,4","16,17,18,19,20") - -'''C++''' - IAlgorithm* alg = FrameworkManager::Instance().createAlgorithm("AsymmetryCalc"); - alg->setPropertyValue("InputWorkspace", "EmuData"); - alg->setPropertyValue("OutputWorkspace", "OutWS"); - alg->setPropertyValue("Alpha", "1.0"); - alg->setPropertyValue("ForwardSpectra", "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"); - alg->setPropertyValue("BackwardSpectra", "16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31"); - alg->execute(); - Workspace* ws = FrameworkManager::Instance().getWorkspace("OutWS"); - -*WIKI_USAGE*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -170,5 +140,3 @@ void AsymmetryCalc::exec() } // namespace Algorithm } // namespace Mantid - - diff --git a/Code/Mantid/Framework/Algorithms/src/AverageLogData.cpp b/Code/Mantid/Framework/Algorithms/src/AverageLogData.cpp index 4354c72ee79d..d4a55c25a4c1 100644 --- a/Code/Mantid/Framework/Algorithms/src/AverageLogData.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AverageLogData.cpp @@ -1,11 +1,3 @@ -/*WIKI* -The algorithm will calculate a proton_charge weighted average and standard deviation of any log value of numeric series type. -All proton charges earlier than the first data are ignored. Any proton pulse is counted for the log value on the right. This -means that if all proton pulses happen before the first value, and FixZero is false, the average and standard deviations are NANs. -If all the proton pulses occur after the last value, and FixZero is false, the average is equal to the last value, and the -standard deviation is zero. -*WIKI*/ - #include "MantidAlgorithms/AverageLogData.h" #include "MantidKernel/TimeSeriesProperty.h" using namespace Mantid::Kernel; diff --git a/Code/Mantid/Framework/Algorithms/src/BinaryOperateMasks.cpp b/Code/Mantid/Framework/Algorithms/src/BinaryOperateMasks.cpp index 652892c55b21..4b251417e688 100644 --- a/Code/Mantid/Framework/Algorithms/src/BinaryOperateMasks.cpp +++ b/Code/Mantid/Framework/Algorithms/src/BinaryOperateMasks.cpp @@ -1,14 +1,3 @@ -/*WIKI* -A binary operation will be conducted on two SpecialWorkspace2D (i.e., masking workspace). The binary operations supported include AND, OR and XOR (exclusive or). The operation is done between the corresponding spectra of these two input workspaces, i.e., -: spec_i^{output} = spec_i^{in 1} \times spec_i^{in 2} -: spec_i^{output} = spec_i^{in 1} + spec_i^{in 2} -: spec_i^{output} = spec_i^{in 1} \oplus spec_i^{in 2} - - -==Output== -A SpecialWorkspace2D with the same dimension and geometry as the input two SpecialWorkspace2D. - -*WIKI*/ #include "MantidAlgorithms/BinaryOperateMasks.h" #include "MantidKernel/System.h" #include "MantidDataObjects/MaskWorkspace.h" @@ -114,4 +103,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/CalMuonDeadTime.cpp b/Code/Mantid/Framework/Algorithms/src/CalMuonDeadTime.cpp index 7b61c947dce8..f3cbed91c424 100644 --- a/Code/Mantid/Framework/Algorithms/src/CalMuonDeadTime.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CalMuonDeadTime.cpp @@ -1,23 +1,3 @@ -/*WIKI* -Calculate Muon deadtime for each spectra in a workspace. - -Define: - - {\displaystyle{N}} = true count - {\displaystyle{N_0}} = true count at time zero - {\displaystyle{M}} = measured count - {\displaystyle{t_{dead}}} = dead-time - {\displaystyle{t_{bin}}} = time bin width - {\displaystyle{t_{\mu}}} = Muon decay constant - {\displaystyle{F}} = Number of good frames - -The formula used to calculate the deadtime for each spectra: - -:M\exp \left( \frac{t}{t_{\mu}} \right)=N_0 - M*N_0*(\frac{t_{dead}}{t_{bin}*F}) - -where \displaystyle{M\exp ( t/t_{\mu})} as a function of {\displaystyle{M}} is a straight line with an intercept of {\displaystyle{N_0}} and a slope of {\displaystyle{N_0*(\frac{t_{dead}}{t_{bin}*F})}}. -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -258,5 +238,3 @@ void CalMuonDeadTime::exec() } // namespace Algorithm } // namespace Mantid - - diff --git a/Code/Mantid/Framework/Algorithms/src/CalculateEfficiency.cpp b/Code/Mantid/Framework/Algorithms/src/CalculateEfficiency.cpp index f4e245a947cc..640694de23ba 100644 --- a/Code/Mantid/Framework/Algorithms/src/CalculateEfficiency.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CalculateEfficiency.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for calculation details. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CalculateFlatBackground.cpp b/Code/Mantid/Framework/Algorithms/src/CalculateFlatBackground.cpp index 404c74ff4968..b6c55263b437 100644 --- a/Code/Mantid/Framework/Algorithms/src/CalculateFlatBackground.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CalculateFlatBackground.cpp @@ -1,16 +1,3 @@ -/*WIKI* - -This algorithm takes a list of spectra and for each spectrum calculates an average count rate in the given region, usually a region when there are only background neutrons. This count rate is then subtracted from the counts in all the spectrum's bins. However, no bin will take a negative value as bins with count rates less than the background are set to zero (and their error is set to the backgound value). - -The average background count rate is estimated in one of two ways. When Mode is set to 'Mean' it is the sum of the values in the bins in the background region divided by the width of the X range. Selecting 'Linear Fit' sets the background value to the height in the centre of the background region of a line of best fit through that region. - -The error on the background value is only calculated when 'Mean' is used. It is the errors in all the bins in the background region summed in quadrature divided by the number of bins. This background error value is added in quadrature to the errors in each bin. - -====ChildAlgorithms used==== -The [[Linear]] algorithm is used when the Mode = Linear Fit. From the resulting line of best fit a constant value taken as the value of the line at the centre of the fitted range. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CalculateTransmission.cpp b/Code/Mantid/Framework/Algorithms/src/CalculateTransmission.cpp index 94607af21ef5..f3d3bb45201d 100644 --- a/Code/Mantid/Framework/Algorithms/src/CalculateTransmission.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CalculateTransmission.cpp @@ -1,23 +1,3 @@ -/*WIKI* - -Calculates the probability of a neutron being transmitted through the sample using detected counts from two monitors, one in front and one behind the sample. A data workspace can be corrected for transmission by [[Divide|dividing]] by the output of this algorithm. - -Because the detection efficiency of the monitors can be different the transmission calculation is done using two runs, one run with the sample (represented by S below) and a direct run without it(D). The fraction transmitted through the sample f is calculated from this formula: -
-
- p = \frac{S_T}{D_T}\frac{D_I}{S_I} -
-
-where S_I is the number of counts from the monitor in front of the sample (the incident beam monitor), S_T is the transmission monitor after the sample, etc. - -The resulting fraction as a function of wavelength is created as the OutputUnfittedData workspace. However, because of statistical variations it is recommended to use the OutputWorkspace, which is the evaluation of a fit to those transmission fractions. The unfitted data is not affected by the RebinParams or Fitmethod properties but these can be used to refine the fitted data. The RebinParams method is useful when the range of wavelengths passed to CalculateTransmission is different from that of the data to be corrected. - -=== ChildAlgorithms used === - -Uses the algorithm [[linear]] to fit to the calculated transmission fraction. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CalculateTransmissionBeamSpreader.cpp b/Code/Mantid/Framework/Algorithms/src/CalculateTransmissionBeamSpreader.cpp index f07da6116cac..148de248e829 100644 --- a/Code/Mantid/Framework/Algorithms/src/CalculateTransmissionBeamSpreader.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CalculateTransmissionBeamSpreader.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CalculateZscore.cpp b/Code/Mantid/Framework/Algorithms/src/CalculateZscore.cpp index 79c86b24b582..90d270646194 100644 --- a/Code/Mantid/Framework/Algorithms/src/CalculateZscore.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CalculateZscore.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Calculate Z-score of a spectrum in a given workspace. - -*WIKI*/ - #include "MantidAlgorithms/CalculateZscore.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ChangeBinOffset.cpp b/Code/Mantid/Framework/Algorithms/src/ChangeBinOffset.cpp index b1fc03f51237..9fcf82cddac0 100644 --- a/Code/Mantid/Framework/Algorithms/src/ChangeBinOffset.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ChangeBinOffset.cpp @@ -1,15 +1,3 @@ -/*WIKI* - - -This algorithm can be used to change the time-of-flight bins of a workspace by a specified amount (defined above as the Offset). A possible use of this algorithm is to correct time bins that have been recorded incorrectly. - -Optionally, the range of spectra can be selected to apply this offset selectively using the IndexMin and IndexMax properties. - -The output workspace will be an exact copy of the input workspace except for the changed time bins. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ChangeLogTime.cpp b/Code/Mantid/Framework/Algorithms/src/ChangeLogTime.cpp index ca1dae338d5e..0731abf74adc 100644 --- a/Code/Mantid/Framework/Algorithms/src/ChangeLogTime.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ChangeLogTime.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ #include "MantidAlgorithms/ChangeLogTime.h" #include "MantidDataObjects/EventWorkspace.h" #include "MantidKernel/TimeSeriesProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ChangePulsetime.cpp b/Code/Mantid/Framework/Algorithms/src/ChangePulsetime.cpp index 938b3dfde664..b878238786f9 100644 --- a/Code/Mantid/Framework/Algorithms/src/ChangePulsetime.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ChangePulsetime.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -Modifies the pulse time (wall-clock time) of all the events in the specified spectra of an EventWorkspace, by adding the given number of seconds. - - -*WIKI*/ #include "MantidAlgorithms/ChangePulsetime.h" #include "MantidKernel/System.h" #include "MantidKernel/ArrayProperty.h" @@ -103,4 +96,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/CheckWorkspacesMatch.cpp b/Code/Mantid/Framework/Algorithms/src/CheckWorkspacesMatch.cpp index c2662303a8b8..7a9f50f24910 100644 --- a/Code/Mantid/Framework/Algorithms/src/CheckWorkspacesMatch.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CheckWorkspacesMatch.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - -Compares two workspaces for equality. This algorithm is mainly intended for use by Mantid developers as part of the testing process. - -The data values (X,Y and error) are always checked. The algorithm can also optionally check the axes (this includes the units), the spectra-detector map, the instrument (the name and parameter map) and any bin masking. - -In the case of [[EventWorkspace]]s, they are checked to hold identical event lists. Comparisons between an EventList and a Workspace2D always fail. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -1166,4 +1155,3 @@ void CheckWorkspacesMatch::doMDComparison(Workspace_sptr w1, Workspace_sptr w2) } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ChopData.cpp b/Code/Mantid/Framework/Algorithms/src/ChopData.cpp index 7b06e87da219..fdce5a4d62ac 100644 --- a/Code/Mantid/Framework/Algorithms/src/ChopData.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ChopData.cpp @@ -1,20 +1,3 @@ -/*WIKI* - -This algorithm will chop the input workspace into equally sized workspaces, and adjust the X-values given so that they all begin from the same point. This is useful if your raw files contain multiple frames. - -=== Identifying Extended Frames === -[[File:ChopDataIntegrationExplanation.png|frame|Figure 1: Example Monitor Spectrum with Extended Frames]] - -If the parameters ''IntegrationRangeLower'', ''IntegrationRangeUpper'' and ''MonitorWorkspaceIndex'' are provided to the algorithm, then it will attempt to identify where in the workspace the frames have been extended. - -For example: looking at Figure 1 which shows an input workspace covering 100000 microseconds, we can see that the first frame covers forty thousand, and the other three cover twenty thousand each. - -In order for Mantid to determine this programatically, it integrates over a range (defined by IntegrationRangeLower and IntegrationRangeUpper) for each "chop" of the data. If the relative values for this integration fall within certain bounds, then the chop is deemed to be a continuation of the previous one rather than a separate frame. If this happens, then they will be placed in the same workspace within the result group. - -The algorithm will only look at the workspace given in ''MonitorWorkspaceIndex'' property to determine this. Though it is expected and recommended that you use a monitor spectrum for this purpose, it is not enforced so you may use a regular detector if you have cause to do so. - - -*WIKI*/ #include "MantidAlgorithms/ChopData.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidKernel/MultiThreaded.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ClearMaskFlag.cpp b/Code/Mantid/Framework/Algorithms/src/ClearMaskFlag.cpp index fd50b04502be..e9c01171e81c 100644 --- a/Code/Mantid/Framework/Algorithms/src/ClearMaskFlag.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ClearMaskFlag.cpp @@ -1,7 +1,3 @@ -/*WIKI* -This algorithm clears the mask flag/bit on all spectra of a workspace. It does not restore masked data. -*WIKI*/ - #include "MantidAlgorithms/ClearMaskFlag.h" namespace Mantid diff --git a/Code/Mantid/Framework/Algorithms/src/CloneWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CloneWorkspace.cpp index 83e4fb57eba5..b2c2e2aa2378 100644 --- a/Code/Mantid/Framework/Algorithms/src/CloneWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CloneWorkspace.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -This algorithm performs a deep copy of all of the information in the workspace. It maintains events if the input is an [[EventWorkspace]]. -It will call CloneMDWorkspace for a [[MDEventWorkspace]] or a [[MDHistoWorkspace]]. -It can also clone a [[PeaksWorkspace]]. - -*WIKI*/ - #include "MantidAlgorithms/CloneWorkspace.h" #include "MantidAPI/IMDEventWorkspace.h" #include "MantidDataObjects/EventWorkspace.h" @@ -114,4 +106,3 @@ void CloneWorkspace::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ConjoinWorkspaces.cpp b/Code/Mantid/Framework/Algorithms/src/ConjoinWorkspaces.cpp index 61cc909183c4..e5414dc0c2e0 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConjoinWorkspaces.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConjoinWorkspaces.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -This algorithm can be useful when working with large datasets. It enables the raw file to be loaded in two parts (not necessarily of equal size), the data processed in turn and the results joined back together into a single dataset. This can help avoid memory problems either because intermediate workspaces will be smaller and/or because the data will be much reduced after processing. - -The output of the algorithm, in which the data from the second input workspace will be appended to the first, will be stored under the name of the first input workspace. Workspace data members other than the data (e.g. instrument etc.) will be copied from the first input workspace (but if they're not identical anyway, then you probably shouldn't be using this algorithm!). Both input workspaces will be deleted. - -==== Conflict Spectrum IDs ==== -The algorithm adds the spectra from the first workspace and then the second workspace. -* The original spectrum IDs will be respected if there is no conflict of spectrum IDs between the first workspace and the second. -* If there are conflict in spectrum IDs, such that some spectrum IDs appear in both workspace1 and workspace2, then it will be resolved such that the spectrum IDs of spectra coming from workspace2 will be reset to some integer numbers larger than the largest spectrum ID of the spectra from workspace1. Assuming that the largest spectrum ID of workspace1 is S, then for any spectrum of workspace wi in workspace2, its spectrum ID is equal to (S+1)+wi+offset, where offset is a non-negative integer. - -==== Restrictions on the input workspace ==== - -The input workspaces must come from the same instrument, have common units and bins and no detectors that contribute to spectra should overlap. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertAxisByFormula.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertAxisByFormula.cpp index f16d9ed45646..5337cfdf546a 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertAxisByFormula.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertAxisByFormula.cpp @@ -1,32 +1,3 @@ -/*WIKI* -This algorithm allows users to adjust the axes of a workspace by a user defined math formula. -It will NOT adjust or rearrange the data values (other than in one case the X values) of a workspace. -Therefore alterations that will rearrange the order of the axes are not recommended. -This only works for MatrixWorkspaces, so will not work on Multi Dimensional Workspaces or Table Workspaces. -Like the [[ConvertSpectrumAxis]] algorithm the result of this algorithm will have custom units defined for the axis you have altered, and as such may not work in all other algorithms. - -The algorithm can operate on the X or Y axis, but cannot alter the values of a spectrum axis (the axis used as the Y axis on newly loaded Raw data). If you wish to alter this axis use he [[ConvertSpectrumAxis]] algorithm first. - -The formula is defined in a simple math syntax, please look at the usage examples to some ideas of what is possible, -a full list of the functions available can be found at the muparser website [http://muparser.beltoforion.de/mup_features.html#idDef2]. -*WIKI*/ -/*WIKI_USAGE* -Squaring the X axis (assuming it is in Q) -result = ConvertAxisByFormula(InputsWorkspace="input", Axis="X", Formula="x*x",AxisTitle="QSquared",AxisUnit="Q2") - -Other examples of the Math format are as follows: -* Squaring - x^2 -* Square root - sqrt(x) -* Cubing - x^3 -* Basic addition - y + 3 -* Brackets - (y+1)/20 -* Natural Log - ln(x) -* Log 10 - log(x) -* exponent - exp(y) -* round to nearest integer - rint(y/10) -* absolute value - abs(y-100) -Use can use x or y interchangeably to refer to the current axis value. -*WIKI_USAGE*/ #include "MantidAlgorithms/ConvertAxisByFormula.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidKernel/ListValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertFromDistribution.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertFromDistribution.cpp index bcaa0993fb6a..938b2750ee71 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertFromDistribution.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertFromDistribution.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Converts a histogram workspace from a distribution i.e. multiplies by the bin width to take out the bin width dependency. - -==== Restrictions on the input workspace ==== -The workspace to convert must contain histogram data which is flagged as being a distribution. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertMDHistoToMatrixWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertMDHistoToMatrixWorkspace.cpp index 466bca427d6e..83e311fc1beb 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertMDHistoToMatrixWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertMDHistoToMatrixWorkspace.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Creates a single spectrum Workspace2D with X,Y, and E copied from an first non-integrated dimension of a IMDHistoWorkspace. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -159,4 +154,3 @@ void ConvertMDHistoToMatrixWorkspace::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertSpectrumAxis.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertSpectrumAxis.cpp index 8dcc64f8e7b6..15fe07ab9574 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertSpectrumAxis.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertSpectrumAxis.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - -Converts the representation of the vertical axis (the one up the side of a matrix in MantidPlot) of a Workspace2D from its default of holding the spectrum number to the target unit given. - -The spectra will be reordered in increasing order by the new unit and duplicates will not be aggregated. Any spectrum for which a detector is not found (i.e. if the instrument definition is incomplete) will not appear in the output workspace. - -For units other than \theta, the value placed in the axis is generated by using the [[ConvertUnits]] methods to translate the values of the first and last bin for the current X-data unit into the target unit, then taking the mid-point of these. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -227,4 +216,3 @@ namespace Algorithms } } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertSpectrumAxis2.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertSpectrumAxis2.cpp index 6f0ad8c57ff8..19693393a1fd 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertSpectrumAxis2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertSpectrumAxis2.cpp @@ -1,12 +1,3 @@ -/*WIKI* - - -Converts the representation of the vertical axis (the one up the side of a matrix in MantidPlot) of a Workspace2D from its default of holding the spectrum number to the target unit given - theta, elastic Q and elastic Q^2. - -The spectra will be reordered in increasing order by the new unit and duplicates will not be aggregated. Any spectrum for which a detector is not found (i.e. if the instrument definition is incomplete) will not appear in the output workspace. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertTableToMatrixWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertTableToMatrixWorkspace.cpp index 4062bcb119ae..0726b1d5ab7b 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertTableToMatrixWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertTableToMatrixWorkspace.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Creates a single spectrum Workspace2D with X,Y, and E copied from columns ColumnX, ColumnY, and ColumnE respectively. -If ColumnE is not set the E vector will be filled with 1s. The type of the columns must be convertible to C++ double. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -77,4 +71,3 @@ void ConvertTableToMatrixWorkspace::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertToDistribution.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertToDistribution.cpp index 358d46aa56d0..d630d22829cc 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertToDistribution.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertToDistribution.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Makes a histogram workspace a distribution i.e. divides by the bin width. - -==== Restrictions on the input workspace ==== -The workspace to convert must contain histogram data which is not already flagged as a distribution. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertToEventWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertToEventWorkspace.cpp index 5b6bd176d6a8..f10c3d8c4d0f 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertToEventWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertToEventWorkspace.cpp @@ -1,20 +1,3 @@ -/*WIKI* - -This algorithm takes a Workspace2D with any binning or units as its input. -An event is created for each bin of each histogram, except if the bin count is 0.0 (unless ''GenerateZeros'' is true). -Infinity and NAN (not-a-number) values are always skipped. - -Each event is created with an X position (typically time-of-flight) equal to the **center** of the bin. -The weight and error of the event are taken from the histogram value. - -If the ''GenerateMultipleEvents'' option is set, then instead of a single event per bin, -a certain number of events evenly distributed along the X bin are generated. -The number of events generated in each bin is calculated by N = (Y/E)^2. -However, it is limited to a max of ''MaxEventsPerBin'' and a minimum of 1 event per bin. - -Note that using ''GenerateZeros'' or ''GenerateMultipleEvents'' may use a lot of memory! - -*WIKI*/ #include "MantidAlgorithms/ConvertToEventWorkspace.h" #include "MantidKernel/System.h" #include "MantidDataObjects/Workspace2D.h" @@ -121,4 +104,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertToHistogram.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertToHistogram.cpp index f41cb3afff89..22fbfcc4b53e 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertToHistogram.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertToHistogram.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -The input workspace must contain point data. - -Once executed, the OutputWorkspace will contain histogram data where the bin width is guessed from the spacing between the input X points. - - -*WIKI*/ //------------------------------------------------------------------------------ // Includes //------------------------------------------------------------------------------ diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertToMatrixWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertToMatrixWorkspace.cpp index 23763f470871..b2991053551d 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertToMatrixWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertToMatrixWorkspace.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -This can also be performed using the [[Rebin]] algorithm and having the "PreserveEvents" parameter set to false. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -80,4 +73,3 @@ void ConvertToMatrixWorkspace::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertToPointData.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertToPointData.cpp index 484cef7f69a6..e70c250e1a4d 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertToPointData.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertToPointData.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -The input workspace must contain histogram data. Once executed the OutputWorkspace will contain point data, where the X values are simply the centre points of the input bins. - - -*WIKI*/ //------------------------------------------------------------------------------ // Includes //------------------------------------------------------------------------------ diff --git a/Code/Mantid/Framework/Algorithms/src/ConvertUnits.cpp b/Code/Mantid/Framework/Algorithms/src/ConvertUnits.cpp index 861913b7004c..a961eae84596 100644 --- a/Code/Mantid/Framework/Algorithms/src/ConvertUnits.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ConvertUnits.cpp @@ -1,24 +1,3 @@ -/*WIKI* - - -Changes the units in which the X values of a [[workspace]] are represented. The available units are those registered with the [[Unit Factory]]. If the Y data is 'dimensioned' (i.e. has been divided by the bin width), then this will be correctly handled, but at present nothing else is done to the Y data. -If the sample-detector distance cannot be calculated then the affected spectrum will be zeroed, and a warning message will be output on the [[logging]] service. - -If AlignBins is false or left at the default the output workspace may be a [[Ragged Workspace]]. If it is set to true then the data is automatically [[Rebin|rebinned]] to a regular grid so that the maximum and minimum X values will be maintained. It uses the same number of bins as the input data, and divides them linearly equally between the minimum and maximum values. - -If converting to \Delta E any bins which correspond to a physically inaccessible will be removed, leading to an output workspace than is smaller than the input one. If the geometry is indirect then the value of EFixed will be taken, if available, from the instrument definition file. - -==== Restrictions on the input workspace ==== -* Naturally, the X values must have a unit set, and that unit must be known to the [[Unit Factory]]. -* Only histograms, not point data, can be handled at present. -* The algorithm will also fail if the source-sample distance cannot be calculated (i.e. the [[instrument]] has not been properly defined). - -== Available units == - -The units currently available to this algorithm are listed [[Unit Factory|here]], along with equations specifying exactly how the conversions are done. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp index 053621049629..f86455a204b2 100644 --- a/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CopyInstrumentParameters.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -Transfer an instrument parameters from a giving workspace to a receiving workspace. - -The instrument parameters in the receiving workspace are REPLACED (despite you can assume from the name of the algorithm) -by a copy of the instrument parameters in the giving workspace -so gaining any manipulations such as calibration done to the instrument in the giving workspace. - -Does not work on workspaces with grouped detectors if some of the detectors were calibrated. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CopyLogs.cpp b/Code/Mantid/Framework/Algorithms/src/CopyLogs.cpp index 8d853f391596..a12958516fc0 100644 --- a/Code/Mantid/Framework/Algorithms/src/CopyLogs.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CopyLogs.cpp @@ -1,13 +1,3 @@ -/*WIKI* -The algorithm will copy the sample logs in the input workspace to the the output workspace using one of three merge strategies. - -*MergeReplaceExisting: Default option. Copy logs from the input workspace to the output workspace and replace any existing logs with the same name. -*MergeKeepExisting: Keep the existing logs in the output workspace and don't modify them, but append any new ones from the input workspace. -Note that this will not concatenate values or ranges. The algorithm will choose to keep the value of any the log already present in the output workspace, leaving it untouched. -*WipeExisting: Dump any logs that are in the output workspace and replace them with the logs from the input workspace. - -*WIKI*/ - #include "MantidAlgorithms/CopyLogs.h" #include "MantidKernel/ListValidator.h" #include "MantidKernel/Property.h" diff --git a/Code/Mantid/Framework/Algorithms/src/CopySample.cpp b/Code/Mantid/Framework/Algorithms/src/CopySample.cpp index e139a31422d2..9a9c40a7d68e 100644 --- a/Code/Mantid/Framework/Algorithms/src/CopySample.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CopySample.cpp @@ -1,17 +1,3 @@ -/*WIKI* - - -The algorithm copies some/all the sample information from one workspace to another.For MD workspaces, if no input sample number is specified, or not found, it will copy the first sample. For MD workspaces, if no output sample number is specified (or negative), it will copy to all samples. -The following information can be copied: -* Name -* Material -* Sample environment -* Shape -* Oriented lattice - -One can copy the orientation matrix only. To do this, select both CopyLattice and CopyOrientationOnly. If only CopyOrientationOnly is true, the algorithm will throw an error. - -*WIKI*/ #include "MantidAlgorithms/CopySample.h" #include "MantidKernel/System.h" #include "MantidAPI/IMDEventWorkspace.h" @@ -178,4 +164,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/CorrectFlightPaths.cpp b/Code/Mantid/Framework/Algorithms/src/CorrectFlightPaths.cpp index 59d72ea68b3d..f21ed5e1eca4 100644 --- a/Code/Mantid/Framework/Algorithms/src/CorrectFlightPaths.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CorrectFlightPaths.cpp @@ -1,12 +1,3 @@ -/*WIKI* -Corrects the flight paths of a flat detector. -Both TOF sample-detector and distance sample-detector are corrected to constant values, i.e., this algorithm make the detector spherical rather than flat. - -detector_distance must exist in the _Parameters.xml: - -So far this has only be tested on ILL IN5. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CorrectKiKf.cpp b/Code/Mantid/Framework/Algorithms/src/CorrectKiKf.cpp index 81d06d2db6a9..4c7b9c61dbc7 100644 --- a/Code/Mantid/Framework/Algorithms/src/CorrectKiKf.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CorrectKiKf.cpp @@ -1,12 +1,3 @@ -/*WIKI* -Performs ki / kf multiplication, in order to transform differential scattering cross section into dynamic -structure factor. Both Ei and Ef must be positive. However, if this requirement is not met, it will give an error -only if the data is not 0. This allows applying the algorithms to rebinned data, where one can rebin in -Direct EMode to energies higher than EFixed. If no value is defined for EFixed, the algorithm will try -to find Ei in the workspace properties for direct geometry spectrometry, or in the instrument definition, -for indirect geometry spectrometry. Algorithm is event aware. TOF events will be changed to weighted events. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CorrectToFile.cpp b/Code/Mantid/Framework/Algorithms/src/CorrectToFile.cpp index ee68937dbaf0..b39a28c9f060 100644 --- a/Code/Mantid/Framework/Algorithms/src/CorrectToFile.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CorrectToFile.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Use data from the supplied file, written in the RKH format, to correct the input data. The operations allowed for the correction are [[multiply]] and [[divide]]. - -Allowed correction files may contain one spectrum with many bins or many spectra each with one bin. If the are many bins then the FirstColumnValue must match the [[Unit_Factory|units]] of the (X-values on the) workspace on the InputWorkspace. When there are many spectra (e.g. flood correction files) FirstColumnValue must be set to "SpectrumNumber" and the number of spectra in the file and workspace must match. - - -*WIKI*/ //----------------------------- // Includes //---------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CreateCalFileByNames.cpp b/Code/Mantid/Framework/Algorithms/src/CreateCalFileByNames.cpp index fe6920030761..568f90689643 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateCalFileByNames.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateCalFileByNames.cpp @@ -1,36 +1,3 @@ -/*WIKI* - -[[Image:InstrumentTree.jpg|450px|right|Instrument Tree]] - -Create a [[CalFile|calibration file]] for diffraction focusing based on list of names of the instrument tree. - -If a new file name is specified then offsets in the file are all sets to zero and all detectors are selected. -If a valid calibration file already exists at the location specified by the [[CalFile|GroupingFileName]] -then any existing offsets and selection values will be maintained and only the grouping values changed. - -Detectors not assigned to any group will appear as group 0, i.e. not included when using AlignDetector or DiffractionFocussing algorithms. - -The group number is assigned based on a descent in the instrument tree assembly. -If two assemblies are parented, say Bank1 and module1, and both assembly names -are given in the GroupNames, they will get assigned different grouping numbers. -This allows to isolate a particular sub-assembly of a particular leaf of the tree. -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - GEM = LoadEmptyInstrument(Filename="GEM_Definition.xml") # Create test workspace. Normally just use reduced one - CreateCalFileByNames("GEM","output.cal","Bank1,Bank2,Module1") - -'''C++''' - IAlgorithm* alg = FrameworkManager::Instance().createAlgorithm("LoadEmptyInstrument"); - alg.setPropertyValue("Filename", "GEM_Definition.xml") - alg.execute() - IAlgorithm* alg = FrameworkManager::Instance().createAlgorithm("CreateCalFileByNames"); - alg->setPropertyValue("InstrumentName", "GEM"); - alg->setPropertyValue("GroupingFileName", "output.cal"); - alg->setPropertyValue("GroupNames", "Bank1,Bank2,Module1"); - alg->execute(); -*WIKI_USAGE*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CreateDummyCalFile.cpp b/Code/Mantid/Framework/Algorithms/src/CreateDummyCalFile.cpp index 7b36f2042182..fc259f007669 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateDummyCalFile.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateDummyCalFile.cpp @@ -1,25 +1,3 @@ -/*WIKI* - -[[Image:InstrumentTree.jpg|450px|right|Instrument Tree]] - -Create a dummy [[CalFile|calibration file]] for diffraction focusing with one group. - -Offsets in the file are all sets to zero and all detectors are selected. Overwrites a calibration file that already exists at the location specified. - -Detectors will be assigned to group one when using AlignDetector or DiffractionFocussing algorithms. - - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - CreateDummyCalFile("SNAP_4111","output.cal") - -'''C++''' - IAlgorithm* alg = FrameworkManager::Instance().createAlgorithm("CreateCalFileByNames"); - alg->setPropertyValue("InputWorkspace", "SNAP_4111"); - alg->setPropertyValue("CalFilename", "output.cal"); - alg->execute(); -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CreateFlatEventWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CreateFlatEventWorkspace.cpp index fe85dbd163d9..798ed189b95a 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateFlatEventWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateFlatEventWorkspace.cpp @@ -1,7 +1,3 @@ -/*WIKI* -TODO: Enter a full wiki-markup description of your algorithm here. You can then use the Build/wiki_maker.py script to generate your full wiki page. -*WIKI*/ - #include "MantidAlgorithms/CreateFlatEventWorkspace.h" diff --git a/Code/Mantid/Framework/Algorithms/src/CreateGroupingWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CreateGroupingWorkspace.cpp index 18a2c0a05210..e3ff69f76350 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateGroupingWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateGroupingWorkspace.cpp @@ -1,18 +1,3 @@ -/*WIKI* - - - -A [[GroupingWorkspace]] is a simple workspace with one value per detector pixel; this value corresponds to the group number that will be used when focussing or summing another workspace. - -This algorithm creates a blank GroupingWorkspace. It uses the InputWorkspace, InstrumentName, OR InstrumentFilename parameterto determine which Instrument to create. - -If the OldCalFilename parameter is given, the .cal ASCII file will be loaded to fill the group data. - -If the GroupNames parameter is given, the names of banks matching the comma-separated strings in the parameter will be used to sequentially number the groups in the output. - - - -*WIKI*/ #include "MantidAlgorithms/CreateGroupingWorkspace.h" #include "MantidAPI/MatrixWorkspace.h" #include "MantidDataObjects/GroupingWorkspace.h" @@ -412,4 +397,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/CreateLogPropertyTable.cpp b/Code/Mantid/Framework/Algorithms/src/CreateLogPropertyTable.cpp index 5cfc42ac819b..5f5053daaebf 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateLogPropertyTable.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateLogPropertyTable.cpp @@ -1,29 +1,3 @@ -/*WIKI* - -Data is loaded into Mantid workspaces along with various log properties. This algorithm enables a user to easily compile a TableWorkspace of values for each of the specified properties, for each of the specified workspaces. - -=== LogPropertyNames === - -The list of log property names provided must consist of properties that actually appear in the workspace(s). You can check which properties are loaded with workspaces by right-clicking the workspace and navigating to the "Sample Logs..." dialog window. All acceptable properties have names that appear in the "Name" column of the dialog table. - -=== GroupPolicy === - -GroupWorkspaces can be handled in various ways, depending on the GroupPolicy input: - -==== "All" ==== - -All children of any GroupWorkspaces will be included in the table. This should be used when each child workspace contains different data. - -==== "First" ==== - -Only the first child of any GroupWorkspaces will be included in the table. This is useful for instruments that produce groups of workspaces for a single run, and specifying "All" would populate the table with duplicate data. - -==== "None" ==== - -Excludes GroupWorkspaces altogether. - -[[File:ConvertToEnergyInfoTable.png|350px|center|frame|Output workspace generated by loading TOSCA runs 12218-12229, and feeding the resuling workspace names into the algorithm, along with the property names "inst_abrv", "run_number", "user_name", "run_title" and "hd_dur".]] -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CreateLogTimeCorrection.cpp b/Code/Mantid/Framework/Algorithms/src/CreateLogTimeCorrection.cpp index 508374c7ae13..522f9dd34c5e 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateLogTimeCorrection.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateLogTimeCorrection.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -For fast fequency sample logs, the time-of-flight of each neutron is recorded at detector. As the sample log time is recorded at sample, each neutron's flight time must be corrected to sample to be filtered correctly by log value. - -*WIKI*/ - #include "MantidAlgorithms/CreateLogTimeCorrection.h" #include "MantidAPI/WorkspaceProperty.h" #include "MantidAPI/FileProperty.h" @@ -214,11 +208,3 @@ namespace Algorithms } // namespace Algorithms } // namespace Mantid - - - - - - - - diff --git a/Code/Mantid/Framework/Algorithms/src/CreatePSDBleedMask.cpp b/Code/Mantid/Framework/Algorithms/src/CreatePSDBleedMask.cpp index 82fac8cdfa75..3a7dda75ec33 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreatePSDBleedMask.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreatePSDBleedMask.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -The diagnostic test attempts to find all tubes within the instrument attached to the workspace. If successful, each tube is tested for saturation above the level defined by the 'MaxTubeFramerate' property. -If any pixel, not including those marked to be ignored around the equatorial region, are counting above this threshold then the entire tube is masked. - -==== Restrictions on the input workspace ==== -* The workspace must contain either raw counts or counts/us. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -277,4 +267,3 @@ namespace Mantid } } - diff --git a/Code/Mantid/Framework/Algorithms/src/CreatePeaksWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CreatePeaksWorkspace.cpp index ca43358881cb..5fe4ca80adbc 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreatePeaksWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreatePeaksWorkspace.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Create an empty [[PeaksWorkspace]]. Use [[LoadIsawPeaks]] or [[FindPeaksMD]] to create a peaks workspace with peaks. - -This workspace can serve as a starting point for modifying the [[PeaksWorkspace]], using the GUI or -python scripting, for example. - -*WIKI*/ - #include "MantidAlgorithms/CreatePeaksWorkspace.h" #include "MantidKernel/System.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -80,4 +71,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/CreateSampleWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CreateSampleWorkspace.cpp index 730a1395c05d..1437f59a379a 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateSampleWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateSampleWorkspace.cpp @@ -1,19 +1,3 @@ -/*WIKI* -Creates sample workspaces for usage examples and other situations. - -You can select a predefined function for the data or enter your own by selecting User Defined in the drop down. - -The data will be the same for each spectrum, and is defined by the function selected, and a little noise if Random is selected. All values are taken converted to absolute values at present so negative values will become positive. -For event workspaces the intensity of the graph will be affected by the number of events selected. - -Here is an example of a user defined formula containing two peaks and a background. - name=LinearBackground, A0=0.5;name=Gaussian, PeakCentre=10000, Height=50, Sigma=0.5;name=Gaussian, PeakCentre=1000, Height=80, Sigma=0.5 - -Random also affects the distribution of events within bins for event workspaces. -If Random is selected the results will differ between runs of the algorithm and will not be comparable. -If comparing the output is important set Random to false or uncheck the box. -*WIKI*/ - #include "MantidAlgorithms/CreateSampleWorkspace.h" #include "MantidDataObjects/Workspace2D.h" #include "MantidDataObjects/EventWorkspace.h" @@ -454,4 +438,4 @@ namespace Algorithms } } // namespace Algorithms -} // namespace Mantid \ No newline at end of file +} // namespace Mantid diff --git a/Code/Mantid/Framework/Algorithms/src/CreateSingleValuedWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CreateSingleValuedWorkspace.cpp index b8e14859f666..e1bffd2f7bec 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateSingleValuedWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateSingleValuedWorkspace.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -Creates a 2D workspace that contains a single value and an optional error value. This is useful if, for example, there is a need to multiply (or divide etc) a workspace by a single value. - -*WIKI*/ -/*WIKI_USAGE* - LoadRaw("C:/Data/testfile.raw","rawspace") - CreateSingleValuedWorkspace("scalar", "3") - Multiply("rawspace", "scalar", "rawspace") -*WIKI_USAGE*/ //------------------------ //Includes //------------------------ @@ -55,4 +45,3 @@ void CreateSingleValuedWorkspace::exec() setProperty("OutputWorkspace", singleValued); //Done :) } - diff --git a/Code/Mantid/Framework/Algorithms/src/CreateTransmissionWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CreateTransmissionWorkspace.cpp index 334a1fade493..5c8da9f90993 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateTransmissionWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateTransmissionWorkspace.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Creates a transmission run workspace given one or more TOF workspaces and the original run Workspace. If two workspaces are provided, then -the workspaces are stitched together using [[Stitch1D]]. InputWorkspaces must be in TOF. A single output workspace is generated with x-units of Wavlength in angstroms. - *WIKI*/ - #include "MantidAlgorithms/CreateTransmissionWorkspace.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/Framework/Algorithms/src/CreateWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CreateWorkspace.cpp index 5cc14a5508ad..d83cf177af0f 100644 --- a/Code/Mantid/Framework/Algorithms/src/CreateWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CreateWorkspace.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -Example of use in Python for create a simple histogram workspace and automatically populating the VerticalAxis with SpectraNumber values. - -
- - dataX = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] - dataY = [1,2,3,4,5,6,7,8,9,10,11,12] - dataE = [1,2,3,4,5,6,7,8,9,10,11,12] - - # The workspace will be named "dataWS" - dataWS = CreateWorkspace(DataX=dataX, DataY=dataY, DataE=dataE, NSpec=4,UnitX="Wavelength") -
- - -*WIKI*/ #include "MantidAlgorithms/CreateWorkspace.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/CropWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/CropWorkspace.cpp index 1c1d1adea870..1b20c6005fde 100644 --- a/Code/Mantid/Framework/Algorithms/src/CropWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CropWorkspace.cpp @@ -1,16 +1,3 @@ -/*WIKI* - - -Extracts a 'block' from a workspace and places it in a new workspace (or, to look at it another way, lops bins or spectra off a workspace). - -CropWorkspace works on workspaces with common X arrays/bin boundaries or on so-called [[Ragged Workspace|ragged workspaces]]. If the input workspace has common bin boundaries/X values then cropping in X will lead to an output workspace with fewer bins than the input one. If the boundaries are not common then the output workspace will have the same number of bins as the input one, but with data values outside the X range given set to zero. - -If an X value given for XMin/XMax does not match a bin boundary (within a small tolerance to account for rounding errors), then the closest bin boundary within the range will be used. -Note that if none of the optional properties are given, then the output workspace will be -a copy of the input one. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CrossCorrelate.cpp b/Code/Mantid/Framework/Algorithms/src/CrossCorrelate.cpp index cedcec2b360d..5254293c4214 100644 --- a/Code/Mantid/Framework/Algorithms/src/CrossCorrelate.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CrossCorrelate.cpp @@ -1,17 +1,3 @@ -/*WIKI* - - -Compute the cross correlation function for a range of spectra with respect to a reference spectrum. - -This is use in powder diffraction experiments when trying to estimate the offset of one spectra with respect to another one. The spectra are converted in d-spacing and then interpolate on the X-axis of the reference. The cross correlation function is computed in the range [-N/2,N/2] where N is the number of points. - -More details can be found [http://en.wikipedia.org/wiki/Cross-correlation here.] - -*WIKI*/ -/*WIKI_USAGE* - '''Python''' - OutputW = CrossCorrelate("InputW",2,3,75,1.6,2.2) -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CuboidGaugeVolumeAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/CuboidGaugeVolumeAbsorption.cpp index 5c4ead7dcdfb..db2ad6c509cd 100644 --- a/Code/Mantid/Framework/Algorithms/src/CuboidGaugeVolumeAbsorption.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CuboidGaugeVolumeAbsorption.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -This algorithm uses a numerical integration method to calculate attenuation factors resulting from absorption and single scattering within a cuboid region of a sample with the dimensions and material properties given. '''The gauge volume generated will be an axis-aligned cuboid centred on the sample (centre) position. The sample must fully enclose this cuboid. If this does not meet your needs you can instead use the general [[AbsorptionCorrection]] algorithm in conjunction with [[DefineGaugeVolume]].''' - -Factors are calculated for each spectrum (i.e. detector position) and wavelength point, as defined by the input workspace. The sample is divided up into cuboids having sides of as close to the size given in the ElementSize property as the sample dimensions will allow. Thus the calculation speed depends linearly on the total number of bins in the workspace and goes as \rm{ElementSize}^{-3}. - -Path lengths through the sample are then calculated for the centre-point of each element and a numerical integration is carried out using these path lengths over the volume elements. - -==== Restrictions on the input workspace ==== -The input workspace must have units of wavelength. The [[instrument]] associated with the workspace must be fully defined because detector, source & sample position are needed. A sample shape must have been defined using, e.g., [[CreateSampleShape]] and the gauge volume must be fully within the sample. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/CylinderAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/CylinderAbsorption.cpp index d67883d151b0..d101e84f6fe2 100644 --- a/Code/Mantid/Framework/Algorithms/src/CylinderAbsorption.cpp +++ b/Code/Mantid/Framework/Algorithms/src/CylinderAbsorption.cpp @@ -1,23 +1,3 @@ -/*WIKI* - -This algorithm uses a numerical integration method to calculate attenuation factors resulting from absorption and single scattering in a cylindrical sample with the dimensions and material properties given. Factors are calculated for each spectrum (i.e. detector position) and wavelength point, as defined by the input workspace. The sample is divided up into a stack of slices, which are then divided into annuli (rings). These annuli are further divided (see Ref. [2], Appendix A) to give the full set of elements for which a calculation will be carried out. Thus the calculation speed depends linearly on the total number of bins in the workspace and on the number of slices. The dependence on the number of annuli is stronger, going as 3n ( n+1 ) . - -Path lengths through the sample are then calculated for the centre-point of each element and a numerical integration is carried out using these path lengths over the volume elements. - -==== Assumptions ==== - -Although no assumptions are made about the beam direction or the sample position, the cylinder will be constructed with its centre at the sample position and it's axis along the y axis (which in the case of most instruments is the vertical). - -==== Restrictions on the input workspace ==== -The input workspace must have units of wavelength. The [[instrument]] associated with the workspace must be fully defined because detector, source & sample position are needed. - -==== References ==== -The method used here is based upon work presented in the following two papers, although it does not yet fully implement all aspects discussed there (e.g. there's no multiple scattering and no concentric cylinders). -# I.A. Blech & B.L. Averbach, ''Multiple Scattering of Neutrons in Vanadium and Copper'', Phys. Rev. '''137 4A''' (1965) A1113. -# A.K. Soper & P.A. Egelstaff, ''Multiple Scattering and Attenuation of Neutrons in Concentric Cylinders'', NIM '''178''' (1980) 415. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/DeleteLog.cpp b/Code/Mantid/Framework/Algorithms/src/DeleteLog.cpp index a9e7f5a22001..2b09a482f918 100644 --- a/Code/Mantid/Framework/Algorithms/src/DeleteLog.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DeleteLog.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Removes a named log from the run attached to the input workspace. If the log does not exist then the algorithm simply -emits a warning and does not fail. -*WIKI*/ #include "MantidAlgorithms/DeleteLog.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/DeleteWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/DeleteWorkspace.cpp index 4de2b0349cd5..2ef67bf5fea0 100644 --- a/Code/Mantid/Framework/Algorithms/src/DeleteWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DeleteWorkspace.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -If the input workspace exists then it is removed from Mantid. - - -*WIKI*/ //-------------------------------------------------------------------------- // Includes //-------------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/DetectorDiagnostic.cpp b/Code/Mantid/Framework/Algorithms/src/DetectorDiagnostic.cpp index a46420349cf9..7b7a55c37132 100644 --- a/Code/Mantid/Framework/Algorithms/src/DetectorDiagnostic.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DetectorDiagnostic.cpp @@ -1,17 +1,3 @@ -/*WIKI* -This algorithm is a C++ replacement for the Python diagnostics.diagnose -function located in the scripts/inelastic directory. The algorithm expects -processed workspaces as input just as the other function did. The main -functionality of the algorithm is to determine issues with detector vanadium -runs and mask out bad pixels. The algorithms that are run on the detector -vanadium are FindDetectorsOutsideLimits and MedianDetectorTest. It also performs -a second set of diagnostics on another detector vanadium run and -DetectorEfficiencyVariation on the two. The algorithm also checks processed -sample workspaces (total counts and background) for bad pixels as well. The total -counts workspace is tested with FindDetectorsOutsideLimits. The background -workspace is run through MedianDetector test. A processed sample workspace can -be given to perform and CreatePSDBleedMask will be run on it. -*WIKI*/ //-------------------------------------------------------------------------- // Includes //-------------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyCor.cpp b/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyCor.cpp index 458f6b804dc8..45ff26930558 100644 --- a/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyCor.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyCor.cpp @@ -1,21 +1,3 @@ -/*WIKI* - - -The probability of neutron detection by each detector in the [[workspace]] is calculated from the neutrons' kinetic energy, angle between their path and the detector axis, detector gas pressure, radius and wall thickness. The detectors must be cylindrical and their 3He partial pressure, wall thickness and radius stored in the input workspace, the first in atmospheres and the last two in metres. That workspace then needs to be converted so that its X-values are in [[Unit_Factory|units]] of energy transfer, e.g. using the [[ConvertUnits|ConvertUnits]] algorithm. - -To estimate the true number of neutrons that entered the detector the counts in each bin are divided by the detector efficiency of that detector at that energy. - -The numbers of counts are then multiplied by the value of k_i/k_f for each bin. In that formula k_i is the wavenumber a neutron leaving the source (the same for all neutrons) and k_f is the wavenumber on hitting the detector (dependent on the detector and energy bin). They're calculated, in angstrom-1, as - k_i = \sqrt{\frac{E_i}{2.07212466}} - - k_f = \sqrt{\frac{E_i - \Delta E}{2.07212466}} - -where E_i and \Delta E are energies in meV, the inital neutron kinetic energy and the energy lost to the sample respectively. - -Note: it is not possible to use this [[algorithm]] to correct for the detector efficiency alone. One solution to this is to divide the output algorithm by k_i/k_f calculated as above. - - -*WIKI*/ #include "MantidAlgorithms/DetectorEfficiencyCor.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidKernel/Exception.h" diff --git a/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyCorUser.cpp b/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyCorUser.cpp index d63c4e66def0..eda47c8403ed 100644 --- a/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyCorUser.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyCorUser.cpp @@ -1,18 +1,3 @@ -/*WIKI* -This algorithm will correct detector efficiency according to the ILL INX program for time-of-flight data reduction. - -A formula named "formula_eff" must be defined in the instrument parameters file. -The input workspace must be in DeltaE units. - -The output data will be corrected as: - y = \frac{y}{eff} -where eff is - eff = \frac{f(Ei - \Delta E)}{f(E_i)} - -The function f is defined as "formula_eff" in the IDF. To date this has been implemented at the ILL for ILL IN4, IN5 and IN6. - - *WIKI*/ - #include "MantidAlgorithms/DetectorEfficiencyCorUser.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidKernel/BoundedValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyVariation.cpp b/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyVariation.cpp index cb7be2e4e3e1..55fcca13defd 100644 --- a/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyVariation.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DetectorEfficiencyVariation.cpp @@ -1,21 +1,3 @@ -/*WIKI* - - -It is intended that the input white beam vanadium workspaces are from the same instrument and were collected before and after an experimental run of interest. First the ratios of the total number of counts in corresponding histograms from each input workspace are calculated and then the median ratio is calculated. Each ratio is compared to the median and a histogram will fail when any of the following conditions are true: -
    -
  • (sum1/sum2)/median(sum1/sum2) > Variation
  • -
  • (sum1/sum2)/median(sum1/sum2) < 1/Variation
  • -
-where sum1 is the sum of the counts in a histogram in the workspace WhiteBeamBase and sum2 is the sum of the counts in the equivalent histogram in WhiteBeamCompare. The above equations only make sense for identifying bad detectors if Variation > 1. If a value of less than one is given for Variation then Variation will be set to the reciprocal. - -The output workspace contains a MaskWorkspace where those spectra that fail the tests are masked and those that pass them are assigned a single positive value. - -====Child algorithms used==== - -Uses the [[Integration]] algorithm to sum the spectra. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/DiffractionEventCalibrateDetectors.cpp b/Code/Mantid/Framework/Algorithms/src/DiffractionEventCalibrateDetectors.cpp index 54f9f94c3de9..038f5ad2f921 100644 --- a/Code/Mantid/Framework/Algorithms/src/DiffractionEventCalibrateDetectors.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DiffractionEventCalibrateDetectors.cpp @@ -1,21 +1,3 @@ -/*WIKI* - -Moves the detectors in an instrument to optimize the maximum intensity of each detector using gsl_multimin_fminimizer_nmsimplex. Only bin data close to peak you wish to maximize. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - DiffractionEventCalibrateDetectors(InputWorkspace=SNAP_4307, Params="1.9308,0.0002,2.1308", LocationOfPeakToOptimize=2.0308, MaxIterations=100, DetCalFilename="./SNAP_4307.DetCal") - -'''C++''' - IAlgorithm* alg = FrameworkManager::Instance().createAlgorithm("DiffractionEventCalibrateDetectors"); - alg->setPropertyValue("InputWorkspace", "SNAP_4111"); - alg->setPropertyValue("Params", "1.9308,0.0002,2.1308"); - alg->setPropertyValue("LocationOfPeakToOptimize","2.0308"); - alg->setPropertyValue("MaxIterations", "100"); - alg->setPropertyValue("DetCalFilename", "./SNAP_4307.DetCal"); - alg->execute(); -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/DiffractionFocussing.cpp b/Code/Mantid/Framework/Algorithms/src/DiffractionFocussing.cpp index 75279cbc7f22..c9d3985ac7c7 100644 --- a/Code/Mantid/Framework/Algorithms/src/DiffractionFocussing.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DiffractionFocussing.cpp @@ -1,38 +1,3 @@ -/*WIKI* - -[[Image:GEM_Focused.png|200px|thumb|right|Example of RAW GEM data focused across the 5 detector banks]] -Given an InputWorkspace and a Grouping filename, the algorithm performs the following: -# The calibration file is read and a map of corresponding udet-group is created. -# The algorithm determine the X boundaries for each group as the upper and lower limits of all contributing detectors to this group and determine a logarithmic step that will ensure preserving the number of bins in the initial workspace. -# All histograms are read and rebinned to the new grid for their group. -# A new workspace with N histograms is created. - -Within the [[CalFile]] any detectors with the 'select' flag can be set to zero or with a group number of 0 or -ve groups are not included in the analysis. - -Since the new X boundaries depend on the group and not the entire workspace, -this focusing algorithm does not create overestimated X ranges for multi-group instruments. -However it is important to remember that this means that this algorithm outputs a [[Ragged_Workspace|ragged workspace]]. Some 2D and 3D plots will not display the data correctly. - -The DiffractionFocussing algorithm uses GroupDetectors algorithm to combine data from several spectra according to GroupingFileName file which is a [[CalFile]]. - -===For EventWorkspaces=== - -The algorithm can be used with an [[EventWorkspace]] input, and will create an EventWorkspace output if a different workspace is specified. - -The main difference vs. using a Workspace2D is that the event lists from all the incoming pixels are simply appended in the grouped spectra; this means that you can rebin the resulting spectra to finer bins with no loss of data. In fact, it is unnecessary to bin your incoming data at all; binning can be performed as the very last step. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - OutWS = DiffractionFocussing("InWS","filename") -'''C++''' - IAlgorithm* alg = FrameworkManager::Instance().createAlgorithm("DiffractionFocussing"); - alg->setPropertyValue("InputWorkspace", "InWS"); - alg->setPropertyValue("OutputWorkspace", "OutWS"); - alg->setPropertyValue("GroupingFileName", "filename"); - alg->execute(); - Workspace* ws = FrameworkManager::Instance().getWorkspace("OutWS"); -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/DiffractionFocussing2.cpp b/Code/Mantid/Framework/Algorithms/src/DiffractionFocussing2.cpp index 26c22d389a7b..4ced3516bfb1 100644 --- a/Code/Mantid/Framework/Algorithms/src/DiffractionFocussing2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/DiffractionFocussing2.cpp @@ -1,31 +1,3 @@ -/*WIKI* - -[[Image:GEM_Focused.png|200px|thumb|right|Example of RAW GEM data focused across the 5 detector banks]] -Given an InputWorkspace and a Grouping filename, the algorithm performs the following: -# The calibration file is read and a map of corresponding udet-group is created. -# The algorithm determine the X boundaries for each group as the upper and lower limits of all contributing detectors to this group and determine a logarithmic step that will ensure preserving the number of bins in the initial workspace. -# All histograms are read and rebinned to the new grid for their group. -# A new workspace with N histograms is created. - -Within the [[CalFile]] any detectors with the 'select' flag can be set to zero or with a group number of 0 or -ve groups are not included in the analysis. - -Since the new X boundaries depend on the group and not the entire workspace, -this focusing algorithm does not create overestimated X ranges for multi-group instruments. -However it is important to remember that this means that this algorithm outputs a [[Ragged_Workspace|ragged workspace]]. Some 2D and 3D plots will not display the data correctly. - -The DiffractionFocussing algorithm uses GroupDetectors algorithm to combine data from several spectra according to GroupingFileName file which is a [[CalFile]]. - -===For EventWorkspaces=== - -The algorithm can be used with an [[EventWorkspace]] input, and will create an EventWorkspace output if a different workspace is specified. - -The main difference vs. using a Workspace2D is that the event lists from all the incoming pixels are simply appended in the grouped spectra; this means that you can rebin the resulting spectra to finer bins with no loss of data. In fact, it is unnecessary to bin your incoming data at all; binning can be performed as the very last step. - -==Previous Versions== -===Version 1=== -Version 1 did not support the use of workspaces to carry grouping workspaces and only worked with CalFiles. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Divide.cpp b/Code/Mantid/Framework/Algorithms/src/Divide.cpp index 857ee184aaeb..c7d3091c060e 100644 --- a/Code/Mantid/Framework/Algorithms/src/Divide.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Divide.cpp @@ -1,25 +1,3 @@ -/*WIKI* - -{{BinaryOperation|verb=divided|prep=by|symbol=\div}} -{{BinaryOperationFooterMultiply|verb=divided|prep=by|symbol=\div}} - - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - output = Divide("w1","w2") - w3 = w1 / w2 - w1 /= w2 # Perform "in-place" - # Using a scalar - w3 = w1 / 2.5 - w1 /= 2.5 # Perform "in-place" - -'''C++ Within an Algorithm'''
-The usage of basic workspace mathematical operations has been specially simplified for use within algorithms - - //w1 and w2 are workspaces - workspace_sptr output = w1 / w2; -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/EQSANSResolution.cpp b/Code/Mantid/Framework/Algorithms/src/EQSANSResolution.cpp index 20ee0f4fba96..effb0aba7064 100644 --- a/Code/Mantid/Framework/Algorithms/src/EQSANSResolution.cpp +++ b/Code/Mantid/Framework/Algorithms/src/EQSANSResolution.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -39,4 +35,3 @@ double EQSANSResolution::getTOFResolution(double wl) } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/EQSANSTofStructure.cpp b/Code/Mantid/Framework/Algorithms/src/EQSANSTofStructure.cpp index 0f3c71e88882..b5d7843ce609 100644 --- a/Code/Mantid/Framework/Algorithms/src/EQSANSTofStructure.cpp +++ b/Code/Mantid/Framework/Algorithms/src/EQSANSTofStructure.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Documentation to come. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -406,4 +400,3 @@ double EQSANSTofStructure::getTofOffset(EventWorkspace_const_sptr inputWS, bool } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/EditInstrumentGeometry.cpp b/Code/Mantid/Framework/Algorithms/src/EditInstrumentGeometry.cpp index 78eb8a112217..58c88f2d4dec 100644 --- a/Code/Mantid/Framework/Algorithms/src/EditInstrumentGeometry.cpp +++ b/Code/Mantid/Framework/Algorithms/src/EditInstrumentGeometry.cpp @@ -1,34 +1,3 @@ -/*WIKI* -This algorithm can - 1. add an Instrument to a Workspace without any real instrument associated with, or - 2. replace a Workspace's Instrument with a new Instrument, or - 3. edit all detectors' parameters of the instrument associated with a Workspace (partial instrument editing is not supported). - -== Requirements on input properties == -1. PrimaryFightPath (L1): If it is not given, L1 will be the distance between source and sample in the original instrument. Otherwise, L1 is read from input. The source position of the modified instrument is (0, 0, -L1); - -2. SpectrumIDs: If not specified (empty list), then SpectrumIDs will be set up to any array such that SpectrumIDs[wsindex] is the spectrum ID of workspace index 'wsindex'; - -3. L2 and Polar cannot be empty list; - -4. SpectrumIDs[i], L2[i], Polar[i], Azimuthal[i] and optional DetectorIDs[i] correspond to the detector of a same spectrum. - -==Limitations== -There are some limitations of this algorithm. - -1. The key to locate the detector is via spectrum ID; - -2. For each spectrum, there is only one and only one new detector. Thus, if one spectrum is associated with a group of detectors previously, the replacement (new) detector is the one which is (diffraction) focused on after this algorithm is called. - -==Instruction== -1. For powder diffractomer with 3 spectra, user can input - SpectrumIDs = "1, 3, 2" - L2 = "3.1, 3.2, 3.3" - Polar = "90.01, 90.02, 90.03" - Azimuthal = "0.1,0.2,0.3" - to set up the focused detectors' parameters for spectrum 1, 3 and 2. -*WIKI*/ - #include "MantidAlgorithms/EditInstrumentGeometry.h" #include "MantidGeometry/Instrument/Detector.h" #include "MantidAPI/ISpectrum.h" @@ -393,4 +362,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp b/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp index 8af6a0ffe252..7ca3cd780b56 100644 --- a/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp @@ -1,12 +1,3 @@ -/*WIKI* - - -This algorithm Integrates over the range specified, converts the spectrum axis into units of Q and Q^2 and Transposes the result workspaces. - -There are two output workspaces. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -150,4 +141,3 @@ void ElasticWindow::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/EstimatePDDetectorResolution.cpp b/Code/Mantid/Framework/Algorithms/src/EstimatePDDetectorResolution.cpp index fdea0216ccb9..79ac5f982c3d 100644 --- a/Code/Mantid/Framework/Algorithms/src/EstimatePDDetectorResolution.cpp +++ b/Code/Mantid/Framework/Algorithms/src/EstimatePDDetectorResolution.cpp @@ -1,36 +1,3 @@ -/*WIKI* - -== Instrument resolution == -Resolution of a detector in d-spacing is defined as \frac{\Delta d}{d}, -which is constant for an individual detector. - -Starting from the Bragg equation for T.O.F. diffractometer, -:d = \frac{t}{252.777\cdot L\cdot2\sin\theta} - -as -:\Delta d = \sqrt{(\Delta T)^2 + (\Delta L)^2 + (\Delta\theta)^2} - -and thus -:\frac{\Delta d}{d} = \sqrt{(\frac{\Delta T}{T})^2 + (\frac{\Delta L}{L})^2 + (\Delta\theta\cdot\cot(\theta))^2} - -where, -* \Delta T is the time resolution from modulator; -* \Delta\theta is the coverage of the detector, and can be approximated from the square root of the solid angle of the detector to sample; -* L is the flight path of the neutron from source to detector. - -== Factor Sheet == -=== NOMAD === -Detector size -* vertical: 1 meter / 128 pixel -* Horizontal: half inch or 1 inch - -=== POWGEN === -Detector size: 0.005 x 0.0543 - -Range of \Delta\theta\cot\theta: (0.00170783, 0.0167497) - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Exponential.cpp b/Code/Mantid/Framework/Algorithms/src/Exponential.cpp index aa5c9d841e50..e42607976570 100644 --- a/Code/Mantid/Framework/Algorithms/src/Exponential.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Exponential.cpp @@ -1,13 +1,3 @@ -/*WIKI* -The algorithm will apply the exponential function (i.e. e^y) to the data and associated errors from a workspaces. -The units of the workspace are not updated, so the user must take care in the use of such output workspaces. -When acting on an event workspace, the output will be a Workspace2D, with the default binning from the original workspace. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - output = Exponential("input") -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ExponentialCorrection.cpp b/Code/Mantid/Framework/Algorithms/src/ExponentialCorrection.cpp index 0015d8befc39..bebc12e2ea53 100644 --- a/Code/Mantid/Framework/Algorithms/src/ExponentialCorrection.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ExponentialCorrection.cpp @@ -1,15 +1,3 @@ -/*WIKI* - - -This algorithm corrects the data and error values on a workspace by the value of an exponential function -of the form {\rm C0} e^{-{\rm C1} x} . -This formula is calculated for each data point, with the value of ''x'' -being the mid-point of the bin in the case of histogram data. -The data and error values are either divided or multiplied by the value of this function, according to the -setting of the Operation property. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ExportTimeSeriesLog.cpp b/Code/Mantid/Framework/Algorithms/src/ExportTimeSeriesLog.cpp index 7940a815c6ef..3045c845c126 100644 --- a/Code/Mantid/Framework/Algorithms/src/ExportTimeSeriesLog.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ExportTimeSeriesLog.cpp @@ -1,17 +1,3 @@ -/*WIKI* - - - - - -Export TimeSeriesProperty log in a Workspace to a MatrixWorkspace - - - - - - -*WIKI*/ #include "MantidAlgorithms/ExportTimeSeriesLog.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ExtractFFTSpectrum.cpp b/Code/Mantid/Framework/Algorithms/src/ExtractFFTSpectrum.cpp index 4885db48a818..007cbc977702 100644 --- a/Code/Mantid/Framework/Algorithms/src/ExtractFFTSpectrum.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ExtractFFTSpectrum.cpp @@ -1,49 +1,3 @@ -/*WIKI* - -This algorithm iterates the [[FFT]] algorithm on each spectrum of InputWorkspace, computing the Fourier Transform and storing the transformed spectrum in OutputWorkspace. If InputImagWorkspace is also passed, then the pair spectrum ''i'' of InputWorkspace (real) and spectrum ''i'' of InputImagWorkspace (real) are taken together as spectrum ''i'' of a complex workspace, on which [[FFT]] is applied. - -The FFTPart parameter specifies which transform is selected from the output of the [[FFT]] algorithm: - -For the case of input containing real and imaginary workspaces: -{| border="1" cellpadding="5" cellspacing="0" -!FFTPart -!Description -|- -|0 -|Complete real part -|- -|1 -|Complete imaginary part -|- -|2 -|Complete transform modulus -|} - -For the case of input containing no imaginary workspace: -{| border="1" cellpadding="5" cellspacing="0" -!FFTPart -!Description -|- -|0 -|Real part, positive frequencies -|- -|1 -|Imaginary part, positive frequencies -|- -|2 -|Modulus, positive frequencies -|- -|3 -|Complete real part -|- -|4 -|Complete imaginary part -|- -|5 -|Complete transform modulus -|} - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ExtractMask.cpp b/Code/Mantid/Framework/Algorithms/src/ExtractMask.cpp index ebb280a5c7e2..430b8f561e1f 100644 --- a/Code/Mantid/Framework/Algorithms/src/ExtractMask.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ExtractMask.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -The masking from the InputWorkspace property is extracted by creating a new MatrixWorkspace with a single X bin where: -* 0 = masked; -* 1 = unmasked. - -The spectra containing 0 are also marked as masked and the instrument link is preserved so that the instrument view functions correctly. - - -*WIKI*/ //------------------------------------------------------------------------------ // Includes //------------------------------------------------------------------------------ @@ -146,4 +136,3 @@ namespace Mantid } } - diff --git a/Code/Mantid/Framework/Algorithms/src/ExtractMaskToTable.cpp b/Code/Mantid/Framework/Algorithms/src/ExtractMaskToTable.cpp index b8eeed1b0530..dbff3b8b2967 100644 --- a/Code/Mantid/Framework/Algorithms/src/ExtractMaskToTable.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ExtractMaskToTable.cpp @@ -1,22 +1,3 @@ -/*WIKI* - -==== InputWorskpace ==== -It can be either a MaskWorkspace, containing the masking information, or a Data workspace (EventWorkspace or Workspace2D), having -detectors masked. - -==== Optional MaskTableWorkspace ==== -If the optional input 'MaskTableWorkspace' is given, it must be a table workspace having the -same format as output TableWorkspace such that it contains 3 columns, XMin, XMax and DetectorIDsList. - -The contents in this mask table workspace will be copied to output workspace. - -If a detector is masked in this input 'MaskTableWorkspace', and it is also masked in input MaskWorkspace or data workspace, -the setup (Xmin and Xmax) in MaskTableWorkspace has higher priority, i.e., in the output mask table workspace, -the masked detector will be recorded in the row copied from input MaskTableWrokspace. - - -*WIKI*/ - #include "MantidAlgorithms/ExtractMaskToTable.h" #include "MantidAPI/WorkspaceProperty.h" #include "MantidAPI/TableRow.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ExtractSingleSpectrum.cpp b/Code/Mantid/Framework/Algorithms/src/ExtractSingleSpectrum.cpp index 88ba5f682a4b..056179812e26 100644 --- a/Code/Mantid/Framework/Algorithms/src/ExtractSingleSpectrum.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ExtractSingleSpectrum.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -Extracts a single spectrum from a [[Workspace2D]] and stores it in a new workspace. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -57,4 +50,3 @@ void ExtractSingleSpectrum::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/FFT.cpp b/Code/Mantid/Framework/Algorithms/src/FFT.cpp index 1df430e7449f..37481483e8ad 100644 --- a/Code/Mantid/Framework/Algorithms/src/FFT.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FFT.cpp @@ -1,125 +1,3 @@ -/*WIKI* - - -The FFT algorithm performs discrete Fourier transform of complex data using the Fast Fourier Transform algorithm. It uses the GSL Fourier transform functions to do the calculations. Due to the nature of the fast fourier transform the input spectra must have linear x axes. If the imaginary part is not set the data is considered real. The "Transform" property defines the direction of the transform: direct ("Forward") or inverse ("Backward"). - -Note that the input data is shifted before the transform along the x axis to place the origin in the middle of the x-value range. It means that for the data defined on an interval [A,B] the output F(\xi_k) must be multiplied by e^{-2\pi ix_0\xi_k} , where x_0=\tfrac{1}{2}(A+B), \xi_k is the frequency. - -==Details== - -The Fourier transform of a complex function f(x) is defined by equation: - -:F(\xi)=\int_{-\infty}^\infty f(x)e^{-2\pi ix\xi} dx - -For discrete data with equally spaced x_n and only non-zero on an interval [A,B] the integral can be approximated by a sum: - -:F(\xi)=\Delta x\sum_{n=0}^{N-1}f(x_n)e^{-2\pi ix_n\xi} - -Here \Delta x is the bin width, x_n=A+\Delta xn. If we are looking for values of the transformed function F at discrete frequencies \xi_k=\Delta\xi k with - -:\Delta\xi=\frac{1}{B-A}=\frac{1}{L}=\frac{1}{N\Delta x} - -the equation can be rewritten: - -:F_k=e^{-2\pi iA\xi_k}\Delta x\sum_{n=0}^{N-1}f_ne^{-\tfrac{2\pi i}{N}nk} - -Here f_n=f(x_n) and F_k=F(\xi_k). The formula - -:\tilde{F}_k=\Delta x\sum_{n=0}^{N-1}f_ne^{-\tfrac{2\pi i}{N}nk} - -is the Discrete Fourier Transform (DFT) and can be efficiently evaluated using the Fast Fourier Transform algorithm. The DFT formula calculates the Fourier transform of data on the interval [0,L]. It should be noted that it is periodic in k with period N. If we also assume that f_n is also periodic with period N the DFT can be used to transform data on the interval [-L/2,L/2]. To do this we swap the two halves of the data array f_n. If we denote the modified array as \bar{f}_n, its transform will be - -:\bar{F}_k=\Delta x\sum_{n=0}^{N-1}\bar{f}_ne^{-\tfrac{2\pi i}{N}nk} - -The Mantid FFT algorithm returns the complex array \bar{F}_K as Y values of two spectra in the output workspace, one for the real and the other for the imaginary part of the transform. The X values are set to the transform frequencies and have the range approximately equal to [-N/L,N/L]. The actual limits depend sllightly on whether N is even or odd and whether the input spectra are histograms or point data. The variations are of the order of \Delta\xi. The zero frequency is always in the bin with index k=int(N/2). - -===Example 1=== - -In this example the input data were calculated using function \exp(-(x-1)^2) in the range [-5,5]. - -[[Image:FFTGaussian1.png|Gaussian]] - -[[Image:FFTGaussian1FFT.png|FFT of a Gaussian]] - -Because the x=0 is in the middle of the data array the transform shown is the exact DFT of the input data. - -===Example 2=== - -In this example the input data were calculated using function \exp(-x^2) in the range [-6,4]. - -[[Image:FFTGaussian2.png|Gaussian]] - -[[Image:FFTGaussian1FFT.png|FFT of a Gaussian]] - -Because the x=0 is not in the middle of the data array the transform shown includes a shifting factor of \exp(2\pi i\xi). To remove it the output must be mulitplied by \exp(-2\pi i\xi). The corrected transform will be: - -[[Image:FFTGaussian2FFT.png|FFT of a Gaussian]] - -It should be noted that in a case like this, i.e. when the input is a real positive even function, the correction can be done by finding the transform's modulus (Re^2+Im^2)^{1/2}. The output workspace includes the modulus of the transform. - -==Output== - -The output workspace for a direct ("Forward") transform contains either three or six spectra, depending on whether the input function is complex or purely real. If the input function has an imaginary part, the transform is written to three spectra with indexes 0, 1, and 2. Indexes 0 and 1 are the real and imaginary parts, while index 2 contains the modulus \sqrt{Re^2+Im^2} . If the input function does not contain an spectrum for the imaginary part (purely real function), the actual transform is written to spectra with indexes 3 and 4 which are the real and imaginary parts, respectively. The last spectrum (index 5) has the modulus of the transform. The spectra from 0 to 2 repeat these results for positive frequencies only. - -Output for the case of input function containing imaginary part: - -{| border="1" cellpadding="5" cellspacing="0" -!Workspace index -!Description -|- -|0 -|Complete real part -|- -|1 -|Complete imaginary part -|- -|2 -|Complete transform modulus -|} - -Output for the case of input function containing no imaginary part: - -{| border="1" cellpadding="5" cellspacing="0" -!Workspace index -!Description -|- -|0 -|Real part, positive frequencies -|- -|1 -|Imaginary part, positive frequencies -|- -|2 -|Modulus, positive frequencies -|- -|3 -|Complete real part -|- -|4 -|Complete imaginary part -|- -|5 -|Complete transform modulus -|} - -The output workspace for an inverse ("Backward") transform has 3 spectra for the real (0), imaginary (1) parts, and the modulus (2). - -{| border="1" cellpadding="5" cellspacing="0" -!Workspace index -!Description -|- -|0 -|Real part -|- -|1 -|Imaginary part -|- -|2 -|Modulus -|} - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FFTDerivative.cpp b/Code/Mantid/Framework/Algorithms/src/FFTDerivative.cpp index e9d69c141d9a..9ef30bef7a5e 100644 --- a/Code/Mantid/Framework/Algorithms/src/FFTDerivative.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FFTDerivative.cpp @@ -1,8 +1,3 @@ -/*WIKI* - - - -*WIKI*/ #include "MantidAlgorithms/FFTDerivative.h" #include @@ -316,4 +311,3 @@ void FFTDerivative::execRealFFT() } // Algorithms } // Mandid - diff --git a/Code/Mantid/Framework/Algorithms/src/FFTSmooth.cpp b/Code/Mantid/Framework/Algorithms/src/FFTSmooth.cpp index d1a33cd198f0..d34ad008c266 100644 --- a/Code/Mantid/Framework/Algorithms/src/FFTSmooth.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FFTSmooth.cpp @@ -1,25 +1,3 @@ -/*WIKI* - -FFTSmooth uses the FFT algorithm to create a Fourier transform of a spectrum, applies a filter to it and transforms it back. The filters remove higher frequencies from the spectrum which reduces the noise. - -The second version of the FFTSmooth algorithm has two filters: - -===Zeroing=== -* Filter: "Zeroing" -* Params: "n" - an integer greater than 1 meaning that the Fourier coefficients with frequencies outside the 1/n of the original range will be set to zero. - -===Butterworth=== -* Filter: "Butterworth" -* Params: A string containing two positive integer parameters separated by a comma, such as 20,2. - -"n"- the first integer, specifies the cutoff frequency for the filter, in the same way as for the "Zeroing" filter. That is, the cutoff is at m/n where m is the original range. "n" is required to be strictly more than 1. - -"order"- the second integer, specifies the order of the filter. For low order values, such as 1 or 2, the Butterworth filter will smooth the data without the strong "ringing" artifacts produced by the abrupt cutoff of the "Zeroing" filter. As the order parameter is increased, the action of the "Butterworth" filter will approach the action of the "Zeroing" filter. - -For both filter types, the resulting spectrum has the same size as the original one. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FFTSmooth2.cpp b/Code/Mantid/Framework/Algorithms/src/FFTSmooth2.cpp index 1b4b07a8028c..2e6b30f2b320 100644 --- a/Code/Mantid/Framework/Algorithms/src/FFTSmooth2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FFTSmooth2.cpp @@ -1,27 +1,3 @@ -/*WIKI* - -FFTSmooth uses the FFT algorithm to create a Fourier transform of a spectrum, applies a filter to it and transforms it back. The filters remove higher frequencies from the spectrum which reduces the noise. - -The second version of the FFTSmooth algorithm has two filters: - -===Zeroing=== -* Filter: "Zeroing" -* Params: "n" - an integer greater than 1 meaning that the Fourier coefficients with frequencies outside the 1/n of the original range will be set to zero. - -===Butterworth=== -* Filter: "Butterworth" -* Params: A string containing two positive integer parameters separated by a comma, such as 20,2. - -"n"- the first integer, specifies the cutoff frequency for the filter, in the same way as for the "Zeroing" filter. That is, the cutoff is at m/n where m is the original range. "n" is required to be strictly more than 1. - -"order"- the second integer, specifies the order of the filter. For low order values, such as 1 or 2, the Butterworth filter will smooth the data without the strong "ringing" artifacts produced by the abrupt cutoff of the "Zeroing" filter. As the order parameter is increased, the action of the "Butterworth" filter will approach the action of the "Zeroing" filter. - -For both filter types, the resulting spectrum has the same size as the original one. - -==Previous Versions== -===Version 1=== -Version 1 did not support the Butterworth Filter and did not offer the options to ignore X bins or smooth all spectra. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FilterBadPulses.cpp b/Code/Mantid/Framework/Algorithms/src/FilterBadPulses.cpp index c18e15cb72b2..7e94ec667603 100644 --- a/Code/Mantid/Framework/Algorithms/src/FilterBadPulses.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FilterBadPulses.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -The algorithm looks at sample logs ("proton_charge"), finds the mean, and rejects any events that occurred during a pulse that was below a certain percentage of that mean. This effectively removes neutrons from the background that were measured while the accelerator was not actually producing neutrons, reducing background noise. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FilterByLogValue.cpp b/Code/Mantid/Framework/Algorithms/src/FilterByLogValue.cpp index 30805893c3b3..464673b57699 100644 --- a/Code/Mantid/Framework/Algorithms/src/FilterByLogValue.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FilterByLogValue.cpp @@ -1,43 +1,3 @@ -/*WIKI* - - - - -Filters out events using the entries in the Sample Logs. - -Sample logs consist of a series of pairs. The first step in filtering is to generate a list of start-stop time intervals that will be kept, using those logs. -* Each log value is compared to the min/max value filters to determine whether it is "good" or not. -** For a single log value that satisfies the criteria at time T, all events between T+-Tolerance (LogBoundary=Centre), or T and T+Tolerance (LogBoundary=Left) are kept. -** If there are several consecutive log values matching the filter, events between T1-Tolerance and T2+Tolerance, where T2 is the last "good" value (LogBoundary=Centre), or T1 and T2, where T2 is the first "bad" value (LogBoundary=Left) are kept. -* The filter is then applied to all events in all spectra. Any events with pulse times outside of any "good" time ranges are removed. - -There is no interpolation of log values between the discrete sample log times at this time. -However, the log value is assumed to be constant at times before its first point and after its last. For example, if the first temperature measurement was at time=10 seconds and a temperature within the acceptable range, then all events between 0 and 10 seconds will be included also. If a log has a single point in time, then that log value is assumed to be constant for all time and if it falls within the range, then all events will be kept. - -==== PulseFilter (e.g. for Veto Pulses) ==== - -If you select PulseFilter, then events will be filtered OUT in notches around each -time in the selected sample log, and the MinValue/MaxValue parameters are ignored. -For example: - -* If you have 3 entries at times: -** 10, 20, 30 seconds. -** A TimeTolerance of 1 second. -* Then the events at the following times will be EXCLUDED from the output: -** 9-11; 19-21; 29-30 seconds. - -The typical use for this is to filter out "veto" pulses from a SNS event nexus file. -Some of these files have a sample log called "veto_pulse_time" that only contains -times of the pulses to be rejected. For example, this call will filter out veto -pulses: - - FilterByLogValue(InputWorkspace="ws", OutputWorkspace="ws", LogName="veto_pulse_time", PulseFilter="1") - -=== Comparing with other event filtering algorithms === -Wiki page [[EventFiltering]] has a detailed introduction on event filtering in MantidPlot. - -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FilterByTime.cpp b/Code/Mantid/Framework/Algorithms/src/FilterByTime.cpp index 87885e08d68e..2e03990c7cdc 100644 --- a/Code/Mantid/Framework/Algorithms/src/FilterByTime.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FilterByTime.cpp @@ -1,18 +1,3 @@ -/*WIKI* - -Goes through all events in all EventLists and takes out any events with a PulseTime value not within the range specified. -* Sample logs consisting of [[TimeSeriesProperty]]'s are also filtered out according to the same time. -* The integrated proton charge of the run is also re-calculated according to the filtered out ProtonCharge pulse log. - -You must specify: -* Both StartTime and Stop time, or -* Both AbsoluteStartTime and AbsoluteStop time. -* But not another combination of the four, or the algorithm will abort. - -=== Comparing with other event filtering algorithms === -Wiki page [[EventFiltering]] has a detailed introduction on event filtering in MantidPlot. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FilterByXValue.cpp b/Code/Mantid/Framework/Algorithms/src/FilterByXValue.cpp index 03d2da2ef4e5..17218fb05a03 100644 --- a/Code/Mantid/Framework/Algorithms/src/FilterByXValue.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FilterByXValue.cpp @@ -1,7 +1,3 @@ -/*WIKI* -This algorithm filters events outside of the given values (in whatever units the workspace possesses). This can be a one or two-sided filter depending on which of xmin & xmax are given. This algorithm pays no attention whatsoever to any binning that has been set on the input workspace (though it will be carried over to the output). If you need to affect the bin boundaries as well, or want to remove some spectra/pixels, consider using [[CropWorkspace]] instead. -*WIKI*/ - #include "MantidAlgorithms/FilterByXValue.h" #include "MantidDataObjects/EventWorkspace.h" diff --git a/Code/Mantid/Framework/Algorithms/src/FilterEvents.cpp b/Code/Mantid/Framework/Algorithms/src/FilterEvents.cpp index aa44fc688b0e..dde78c7c4d0b 100644 --- a/Code/Mantid/Framework/Algorithms/src/FilterEvents.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FilterEvents.cpp @@ -1,39 +1,3 @@ -/*WIKI* -This algorithm filters events from an [[EventWorkspace]] to one or multiple [[EventWorkspace]]s according to an input [[SplittersWorkspace]] containing a series of splitters (i.e., [[SplittingInterval]]s). - -==== Output ==== -The output will be one or multiple workspaces according to the number of index in splitters. The output workspace name is the combination of parameter OutputWorkspaceBaseName and the index in splitter. - -==== Calibration File ==== -The calibration, or say correction, from the detector to sample must be consider in fast log. Thus a calibration file is required. The math is - TOF_calibrated = TOF_raw * correction(detector ID). - -The calibration is in column data format. - -A reasonable approximation of the correction is - correction(detector_ID) = L1/(L1+L2(detector_ID)) - -==== Unfiltered Events ==== -Some events are not inside any splitters. They are put to a workspace name ended with '_unfiltered'. - -If input property 'OutputWorkspaceIndexedFrom1' is set to True, then this workspace shall not be outputed. - -==== Difference from FilterByLogValue ==== -In FilterByLogValue(), EventList.splitByTime() is used. - -In FilterEvents(), if FilterByPulse is selected true, EventList.SplitByTime is called; -otherwise, EventList.SplitByFullTime() is called instead. - -The difference between splitByTime and splitByFullTime is that splitByTime filters events by pulse time, -and splitByFullTime considers both pulse time and TOF. - -Therefore, FilterByLogValue is not suitable for fast log filtering. - -=== Comparing with other event filtering algorithms === -Wiki page [[EventFiltering]] has a detailed introduction on event filtering in MantidPlot. - -*WIKI*/ - #include "MantidAlgorithms/FilterEvents.h" #include "MantidKernel/System.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/FindCenterOfMassPosition.cpp b/Code/Mantid/Framework/Algorithms/src/FindCenterOfMassPosition.cpp index 8bb2b9574983..93da41ee6a8b 100644 --- a/Code/Mantid/Framework/Algorithms/src/FindCenterOfMassPosition.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FindCenterOfMassPosition.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -If the ''Output'' property is set, the beam center will be placed in a table workspace. Otherwise, the result is placed in an ArrayProperty named ''CenterOfMass''. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FindCenterOfMassPosition2.cpp b/Code/Mantid/Framework/Algorithms/src/FindCenterOfMassPosition2.cpp index fd8333fa8beb..b96917b328c9 100644 --- a/Code/Mantid/Framework/Algorithms/src/FindCenterOfMassPosition2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FindCenterOfMassPosition2.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -If the ''Output'' property is set, the beam centre will be placed in a table workspace. Otherwise, the result is placed in an ArrayProperty named ''CenterOfMass''. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FindDeadDetectors.cpp b/Code/Mantid/Framework/Algorithms/src/FindDeadDetectors.cpp index e4d9c37ddb0d..004df50950ae 100644 --- a/Code/Mantid/Framework/Algorithms/src/FindDeadDetectors.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FindDeadDetectors.cpp @@ -1,14 +1,3 @@ -/*WIKI* -This is then used to mark all 'dead' detectors with a 'dead' marker value, while all spectra from live detectors are given a 'live' marker value. - -This algorithm is primarily used to ease identification using the instrument visualization tools. - -====ChildAlgorithms used==== - -Uses the [[Integration]] algorithm to sum the spectra. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FindDetectorsOutsideLimits.cpp b/Code/Mantid/Framework/Algorithms/src/FindDetectorsOutsideLimits.cpp index 28886200b856..44c01f50ee8e 100644 --- a/Code/Mantid/Framework/Algorithms/src/FindDetectorsOutsideLimits.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FindDetectorsOutsideLimits.cpp @@ -1,15 +1,3 @@ -/*WIKI* - - -This is intended to identify detectors that are grossly over or under counting. It reads the input workspace and identifies all histograms with numbers of counts outside the user defined upper and lower limits. Each spectra that fails has its spectra masked on the output workspace. Spectra that pass the test have their data set to a positive value, 1.0. The output workspace can be fed to [[MaskDetectors]] to mask the same spectra on another workspace. - - -====ChildAlgorithms used==== - -Uses the [[Integration]] algorithm to sum the spectra. - - -*WIKI*/ #include "MantidAlgorithms/FindDetectorsOutsideLimits.h" #include "MantidAPI/FileProperty.h" #include "MantidDataObjects/EventWorkspace.h" diff --git a/Code/Mantid/Framework/Algorithms/src/FindPeakBackground.cpp b/Code/Mantid/Framework/Algorithms/src/FindPeakBackground.cpp index 0b20723442bf..1b436061cd24 100644 --- a/Code/Mantid/Framework/Algorithms/src/FindPeakBackground.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FindPeakBackground.cpp @@ -1,23 +1,3 @@ -/*WIKI* - - -Algorithm written using this paper: -J. Appl. Cryst. (2013). 46, 663-671 - -Objective algorithm to separate signal from noise in a Poisson-distributed pixel data set - -T. Straaso/, D. Mueter, H. O. So/rensen and J. Als-Nielsen - -Synopsis: A method is described for the estimation of background level and separation -of background pixels from signal pixels in a Poisson-distributed data set by statistical analysis. -For each iteration, the pixel with the highest intensity value is eliminated from the -data set and the sample mean and the unbiased variance estimator are calculated. Convergence is reached when the -absolute difference between the sample mean and the sample variance of the data set is within k standard deviations of the -variance, the default value of k being 1. The k value is called SigmaConstant in the algorithm input. - - -*WIKI*/ - #include "MantidAlgorithms/FindPeakBackground.h" #include "MantidAlgorithms/FindPeaks.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/FindPeaks.cpp b/Code/Mantid/Framework/Algorithms/src/FindPeaks.cpp index 7275f14711db..3546df4bf671 100644 --- a/Code/Mantid/Framework/Algorithms/src/FindPeaks.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FindPeaks.cpp @@ -1,44 +1,3 @@ -/*WIKI* -This algorithm searches the specified spectra in a workspace for peaks, returning a list of the found and successfully fitted peaks. The search algorithm is described in full in reference [1]. In summary: the second difference of each spectrum is computed and smoothed. This smoothed data is then searched for patterns consistent with the presence of a peak. The list of candidate peaks found is passed to a fitting routine and those that are successfully fitted are kept and returned in the output workspace (and logged at information level). -The output [[TableWorkspace]] contains the following columns, which reflect the fact that the peak has been fitted to a Gaussian atop a linear background: spectrum, centre, width, height, backgroundintercept & backgroundslope. - -=== Subalgorithms used === -FindPeaks uses the [[SmoothData]] algorithm to, well, smooth the data - a necessary step to identify peaks in statistically fluctuating data. The [[Fit]] algorithm is used to fit candidate peaks. - -=== Treating weak peaks vs. high background === -FindPeaks uses a more complicated approach to fit peaks if '''HighBackground''' is flagged. In this case, FindPeak will fit the background first, and then do a Gaussian fit the peak with the fitted background removed. This procedure will be repeated for a couple of times with different guessed peak widths. And the parameters of the best result is selected. The last step is to fit the peak with a combo function including background and Gaussian by using the previously recorded best background and peak parameters as the starting values. - -=== Criteria To Validate Peaks Found === -FindPeaks finds peaks by fitting a Guassian with background to a certain range in the input histogram. [[Fit]] may not give a correct result even if chi^2 is used as criteria alone. Thus some other criteria are provided as options to validate the result -# Peak position. If peak positions are given, and trustful, then the fitted peak position must be within a short distance to the give one. -# Peak height. In the certain number of trial, peak height can be used to select the best fit among various starting sigma values. - -=== Fit Window === -If FitWindows is defined, then a peak's range to fit (i.e., x-min and x-max) is confined by this window. - -If FitWindows is defined, starting peak centres are NOT user's input, but found by highest value within peak window. (Is this correct???) - -==== References ==== -# M.A.Mariscotti, ''A method for automatic identification of peaks in the presence of background and its application to spectrum analysis'', NIM '''50''' (1967) 309. - - ==== Estimation of peak's background and range ==== - If FindPeaksBackground fails, then it is necessary to estimate a rough peak range and background according to - observed data. - 1. Assume the local background (within the given fitting window) is close to linear; - 2. Take the first 3 and last 3 data points to calcualte the linear background; - 3. Remove background (rougly) and calcualte peak's height, width, and centre; - 4. If the peak centre (starting value) uses observed value, then set peakcentre to that value. Otherwise, set it to given value; - 5. Get the bin indexes of xmin, xmax and peakcentre; - 6. Calcualte peak range, i.e., left and right boundary; - 7. If any peak boundary exceeds or too close to the boundary, there will be 2 methods to solve this issue; - 7.1 If peak centre is restricted to given value, then the peak range will be from 1/6 to 5/6 of the given data points; - 7.2 If peak centre is set to observed value, then the 3 leftmost data points will be used for background. - - - ==== References ==== - # M.A.Mariscotti, ''A method for automatic identification of peaks in the presence of background and its application to spectrum analysis'', NIM '''50''' (1967) 309. - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FitPeak.cpp b/Code/Mantid/Framework/Algorithms/src/FitPeak.cpp index 45d89097136d..4d64b5671a7e 100644 --- a/Code/Mantid/Framework/Algorithms/src/FitPeak.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FitPeak.cpp @@ -1,31 +1,3 @@ -/*WIKI* -This algorithm is used to fit a single peak with some checking mechanism to ensure its fitting result -is physical. - -The output [[TableWorkspace]] contains the following columns... - -==== Subalgorithms used ==== -* Fit - -==== Treating weak peaks vs. high background ==== -FindPeaks uses a more complicated approach to fit peaks if '''HighBackground''' is flagged. In this case, FindPeak will fit the background first, and then do a Gaussian fit the peak with the fitted background removed. This procedure will be repeated for a couple of times with different guessed peak widths. And the parameters of the best result is selected. The last step is to fit the peak with a combo function including background and Gaussian by using the previously recorded best background and peak parameters as the starting values. - -==== Criteria To Validate Peaks Found ==== -FindPeaks finds peaks by fitting a Guassian with background to a certain range in the input histogram. [[Fit]] may not give a correct result even if chi^2 is used as criteria alone. Thus some other criteria are provided as options to validate the result - -1. Peak position. If peak positions are given, and trustful, then the fitted peak position must be within a short distance to the give one. - -2. Peak height. In the certain number of trial, peak height can be used to select the best fit among various starting sigma values. - -==== Fit Window and Peak Range ==== -If FitWindows is defined, then a peak's range to fit (i.e., x-min and x-max) is confined by this window. - -If PeakRange is defined and starting peak centre given by user is not within this range, then the situation is considered illegal. -In future, FitPeak might be able to estimate the peak centre in this situation by locating the X-value whose corresponding Y-value is largest within user-defined peak range. - -== What's new == - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/FixGSASInstrumentFile.cpp b/Code/Mantid/Framework/Algorithms/src/FixGSASInstrumentFile.cpp index da0a14b98e63..2fc24df2608b 100644 --- a/Code/Mantid/Framework/Algorithms/src/FixGSASInstrumentFile.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FixGSASInstrumentFile.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -GSAS instrument is required to have exact 80 characters each line. -FixGSASInstrument will check the input GSAS instrument file whether each line of it will -have 80 characters. If any line contains fewer than 80 characters, this algorithm will fill -the line with space to 80 characters. - -*WIKI*/ - #include "MantidAlgorithms/FixGSASInstrumentFile.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/FlatPlateAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/FlatPlateAbsorption.cpp index 9886e8d5af2e..c817046fc64a 100644 --- a/Code/Mantid/Framework/Algorithms/src/FlatPlateAbsorption.cpp +++ b/Code/Mantid/Framework/Algorithms/src/FlatPlateAbsorption.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -This algorithm uses a numerical integration method to calculate attenuation factors resulting from absorption and single scattering in a flat plate (slab) sample with the dimensions and material properties given. Factors are calculated for each spectrum (i.e. detector position) and wavelength point, as defined by the input workspace. The sample is divided up into cuboids having sides of as close to the size given in the ElementSize property as the sample dimensions will allow. Thus the calculation speed depends linearly on the total number of bins in the workspace and goes as \rm{ElementSize}^{-3}. - -Path lengths through the sample are then calculated for the centre-point of each element and a numerical integration is carried out using these path lengths over the volume elements. - -==== Restrictions on the input workspace ==== -The input workspace must have units of wavelength. The [[instrument]] associated with the workspace must be fully defined because detector, source & sample position are needed. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/GeneralisedSecondDifference.cpp b/Code/Mantid/Framework/Algorithms/src/GeneralisedSecondDifference.cpp index 7fabe9e3eddb..11a7b65d37ad 100644 --- a/Code/Mantid/Framework/Algorithms/src/GeneralisedSecondDifference.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GeneralisedSecondDifference.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Compute the generalised second difference of a spectrum or several spectra based on the method -described by M.A. Mariscotti., Nuclear Instruments and Methods 50, 309 (1967). Given a spectrum with value yi (0<=i - - # Optional: Store the contents of the workspace to a file to your desktop. - GeneratePythonScript("MUSR00022725", "/home/userName/Desktop/MUSR00022725.py") - - # Store the contents of the workspace history into the hist variable - wsHistory = GeneratePythonScript("MUSR00022725") - - # Output the contents of the hist variable. - print wsHistory - - ###################################################################### - #Python Script Generated by GeneratePythonScript Algorithm - ###################################################################### - Load(Filename=r'/home/userName/workspace/mantid/Test/AutoTestData/MUSR00022725.nxs',OutputWorkspace='MUSR00022725') - RenameWorkspace(InputWorkspace='MUSR00022725',OutputWorkspace='test') - - -{{AlgorithmLinks|GeneratePythonScript}} - -*WIKI*/ #include "MantidAlgorithms/GeneratePythonScript.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/GetDetOffsetsMultiPeaks.cpp b/Code/Mantid/Framework/Algorithms/src/GetDetOffsetsMultiPeaks.cpp index 1c1ce7a8727a..3957da5b6906 100644 --- a/Code/Mantid/Framework/Algorithms/src/GetDetOffsetsMultiPeaks.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GetDetOffsetsMultiPeaks.cpp @@ -1,111 +1,3 @@ -/*WIKI* - -== Description == - -This algorithm requires a workspace that is both in d-spacing, but has also been preprocessed by the [[CrossCorrelate]] algorithm. In this first step you select one spectrum to be the reference spectrum and all of the other spectrum are cross correlated against it. Each output spectrum then contains a peak whose location defines the offset from the reference spectrum. - -The algorithm iterates over each spectrum in the workspace and fits a [[Gaussian]] function to the reference peak. The fit is used to calculate the centre of the fitted peak, and the offset is then calculated as: - -This is then written into a [[CalFile|.cal file]] for every detector that contributes to that spectrum. All of the entries in the cal file are initially set to both be included, but also to all group into a single group on [[DiffractionFocussing]]. The [[CreateCalFileByNames]] algorithm can be used to alter the grouping in the cal file. - -=== Fit for peak offset === -The algorithm to calculate offset of peaks' positions is to -minimize a cost function as -: \sum_{p} |X_{0, p} - (1+offset)\cdot X_{0, p}|/\chi^2_{p} -, which p is the index of a peak whose position is within MinD and MaxD. - -==== Spectra to mask ==== -* Empty spectrum marked as "empty det" - -* Spectrum with counts less than 1.0E^-3 in defined d-range as "dead det" - -* Calculated offset exceeds the user-defined maximum offset. - -==== Criteria on peaks ==== -The (fitted) peak must meet a series of criteria to be used to fit spectrum's offset. - -A peak will not be used if -* its centre is out of pre-defined d-range, i.e., MinD and MaxD; -* its centre is out of fitting window if it is defined; -* its \chi^2 of peak fitting is larger than pre-defined maximum value; -* its height is lower than pre-defined lowest peak height; -* its signal/noise ratio is less than 5 H\cdot FWHM\_To\_SIGMA/width < 5; -* its height is not outside of error bars of background H < \sqrt{H + B}/2 ; -* its z-value on \frac{\delta d}{d} is larger than 2.0. - -=== Generate fit window === -* Required parameter: maxWidth. If it is not given, i.e., less or equal to zero, then there won't be any window defined; -* Definition of fit window for peaks indexed from 0 to N-1 -** Peak 0: window = Min((X0_0-dmin), maxWidth), Min((X0_1-X0_0)/2, maxWidth) -** Peak i (0 < i < N-1): window = Min((X0_i-X0_{i-1})/2, maxWidth), Min((X0_1-X0_0)/2, maxWidth) -** Peak N-1: window = Min((X0_i-X0_{i-1})/2, maxWidth), Min((dmax-X0_i), maxWidth) -where X0_i is the centre of i-th peak. - - -== Fitting Quality == -GetDetOffsetsMultiPeaks have 2 levels of fitting. First it will call FindPeaks to fit Bragg peaks within d-range. -Then it will fit offsets from the peak positions obtained in the previous step. -Therefore, the performance of FindPeaks is critical to this algorithm. -It is necessary to output values reflecting the goodness of fitting of this algorithm to users. - -=== Number of spectra that are NOT masked === -A spectrum will be masked if it is a dead pixel, has an empty detector or has no peak that can be fit with given peak positions. -The performance of ''FindPeaks'' affects the third criteria. -A better algorithm to find and fit peaks may save some spectrum with relatively much fewer events received, i.e., poorer signal. - -=== \chi^2 of the offset fitting function === -The goodness of fit, \chi^2_{iws}, of the offset fitting function -: \sum_{p} |X_{0, p} - (1+offset)X_{0, p}|\cdot H^2_{p} -is an important measure of fitting quality on each spectrum (indexed as iws). - -=== Deviation of highest peaks === -We observed that in some situation, the calibrated peaks' positions of some spectra are far off to the targeted peak positions, -while goodness of fit such as \chi^2 are still good. -It is usally caused by the bad fit of one or two peaks in that spectrum, -which feeds some erroreous peak positions to peak offset fitting function. - -This type of bad fitting is very easily identified by visualization, -because the shift of peaks from the correct positions is significant in fill plot. - -Therefore, deviation of highest peak if spectrum i, D_{i} is defined as: -: D_{i} = |X^{(o)}\cdots(1+offset) - X^{(c)}| -where X^{(o)} is the fitted centre of the highest peak of spectrum i, -and X^{(c)} is the theoretical centre of this peak. - -=== Collective quantities to illustrate goodness of fitting (still in developement) === -Be noticed that the idea of this section is still under development and has not been implemented yet. - -On the other hand, since GetDetOffsetsMultiPeaks always operates on an EventWorkspace with thousands -or several ten thousands of spectra, -it is very hard to tell the quality of fitting by looking at \chi^2_{iws} of all spectra. -Hence, Here are two other parameters are defined for comparison of results. - -: g_1 = \frac{\sum_{s}D_{s}^2}{N_{nm}} -, where s is the index of any unmasked spectrum and N_{mn} is the number of unmasked spectra; - -: g_2 = \frac{\sum_{s}D_{s}^2\cdot H_{s}^2}{N_{nm}}, -where H_{s} is the height of highest peak of spectrum s. - -=== Standard error on offset === -The offset in unit of d-spacing differs is proportional to peak's position by definition: -: X_0^{(f)} = X_0^{(o)} * (1+offset) -where X_0^{(f)} is the focussed peak position, and X_0^{(o)} is the observed peak position by fitting. - -As different spectrum covers different d-space range, the highest peak differs. -Therefore, the error of offset should be normalized by the peak's position. -: E = (X_0^{(f)} - X_0^{(o)}*(1+offset))/X_0^{(f)} = 1 - \frac{X_0^{(o)}}{X_0^{(f)}}\cdot(1+offset) -And it is unitless. - -By this mean, the error of all peaks should be close if they are fitted correctly. - - -== Usage == -'''Python''' - -OutputW,NumberPeaksFitted,Mask = GetDetOffsetsMultiPeaks("InputW",0.01,2.0,1.8,2.2,"output.cal") - - -*WIKI*/ #include "MantidAlgorithms/GetDetOffsetsMultiPeaks.h" #include "MantidAlgorithms/GSLFunctions.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/GetDetectorOffsets.cpp b/Code/Mantid/Framework/Algorithms/src/GetDetectorOffsets.cpp index c979a7d1f046..c43525ee4148 100644 --- a/Code/Mantid/Framework/Algorithms/src/GetDetectorOffsets.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GetDetectorOffsets.cpp @@ -1,19 +1,3 @@ -/*WIKI* - -This algorithm requires a workspace that is both in d-spacing, but has also been preprocessed by the [[CrossCorrelate]] algorithm. In this first step you select one spectrum to be the reference spectrum and all of the other spectrum are cross correlated against it. Each output spectrum then contains a peak whose location defines the offset from the reference spectrum. - -The algorithm iterates over each spectrum in the workspace and fits a [[Gaussian]] function to the reference peaks. The fit is used to calculate the centre of the fitted peak, and the offset is then calculated as: - --peakCentre*step/(dreference+PeakCentre*step) - -This is then written into a [[CalFile|.cal file]] for every detector that contributes to that spectrum. All of the entries in the cal file are initially set to both be included, but also to all group into a single group on [[DiffractionFocussing]]. The [[CreateCalFileByNames]] algorithm can be used to alter the grouping in the cal file. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - - offsets,mask = GetDetOffsetsMultiPeaks("InputW",0.01,2.0,1.8,2.2,"output.cal") -*WIKI_USAGE*/ #include "MantidAlgorithms/GetDetectorOffsets.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/FunctionFactory.h" diff --git a/Code/Mantid/Framework/Algorithms/src/GetEi.cpp b/Code/Mantid/Framework/Algorithms/src/GetEi.cpp index 23a3bb2644da..3322a5a74c9f 100644 --- a/Code/Mantid/Framework/Algorithms/src/GetEi.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GetEi.cpp @@ -1,24 +1,3 @@ -/*WIKI* - -Uses E= (1/2)mv^2 to calculate the energy of neutrons leaving the source. The velocity is calculated from the time it takes for the neutron pulse to travel between the two monitors whose spectra were specified. - -An initial energy guess is required for the algorithm to find the correct peak. The analysis will be done on the highest peak that is within 8% of the estimated TOF given by the estimate. - -Not all neutrons arrive at the monitors at the same time because their kinetic energies, and therefore velocities, are all different. The time of arrival of the neutron pulse is taken to be the mean of the two half peak height locations. The half height points are found as follows: -# the peak height is the largest number of counts above the background in any bin in the window -# the half height is half the above number -# examine bins to the left of the bin with the highest number of counts looking for a bin with less than half that number above background -# interpolate between this point bin and the one immediately previous to find the first half height location -# repeat the steps 3 and 4 looking to the right of the highest point to get the second half height point -# the mean of the X-values of the two half height points is the TOF arrival time of the neutrons - -The above process is illustrated on a peak is shown below in the image below -[[File:Monitorspect_getei.jpg|Monitor Peak|centre|618px]] - -The distances between the monitors are read from the instrument definition file. It is assumed that the source and the monitors all lie on one line and that the monitors have the same delay time. - -*WIKI*/ - #include "MantidAlgorithms/GetEi.h" #include "MantidKernel/ArrayProperty.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/GetEi2.cpp b/Code/Mantid/Framework/Algorithms/src/GetEi2.cpp index 02c190a0bd5a..397351b11e45 100644 --- a/Code/Mantid/Framework/Algorithms/src/GetEi2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GetEi2.cpp @@ -1,24 +1,3 @@ -/*WIKI* - -Uses E= (1/2)mv^2 to calculate the energy of neutrons leaving the source. The velocity is calculated from the time it takes for the neutron pulse to travel between the two monitors whose spectra were specified. If no spectra are specified, the algorithm will use the defaults for the instrument. - -An initial energy guess is required for the algorithm to find the correct peak. The analysis will be done on the highest peak that is within 8% of the estimated TOF given by the estimate. If no initial guess is given, the algorithm will try to get it from the workspace, from a sample log variable called "EnergyRequest". - -Not all neutrons arrive at the monitors at the same time because their kinetic energies, and therefore velocities, are all different. The time of arrival of the neutron pulse is taken to be the mean of the two half peak height locations. The half height points are found as follows: -# the peak height is the largest number of counts above the background in any bin in the window -# the half height is half the above number -# examine bins to the left of the bin with the highest number of counts looking for a bin with less than half that number above background -# interpolate between this point bin and the one immediately previous to find the first half height location -# repeat the steps 3 and 4 looking to the right of the highest point to get the second half height point -# the mean of the X-values of the two half height points is the TOF arrival time of the neutrons - -The above process is illustrated on a peak is shown below in the image below -[[File:Monitorspect_getei.jpg|Monitor Peak|centre|618px]] - -The distances between the monitors are read from the instrument definition file. It is assumed that the source and the monitors all lie on one line and that the monitors have the same delay time. - -*WIKI*/ - #include "MantidAlgorithms/GetEi2.h" #include "MantidKernel/PhysicalConstants.h" diff --git a/Code/Mantid/Framework/Algorithms/src/GetTimeSeriesLogInformation.cpp b/Code/Mantid/Framework/Algorithms/src/GetTimeSeriesLogInformation.cpp index 7b5a797d2da4..7f375f023ec5 100644 --- a/Code/Mantid/Framework/Algorithms/src/GetTimeSeriesLogInformation.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GetTimeSeriesLogInformation.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Get information from a TimeSeriesProperty log. - -*WIKI*/ #include "MantidAlgorithms/GetTimeSeriesLogInformation.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" @@ -588,31 +583,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Code/Mantid/Framework/Algorithms/src/GroupWorkspaces.cpp b/Code/Mantid/Framework/Algorithms/src/GroupWorkspaces.cpp index 163c8d6e5b75..f66c6e7af9a4 100644 --- a/Code/Mantid/Framework/Algorithms/src/GroupWorkspaces.cpp +++ b/Code/Mantid/Framework/Algorithms/src/GroupWorkspaces.cpp @@ -1,6 +1,3 @@ -/*WIKI* -This algorithm takes two or more workspaces as input and creates an output workspace group. - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/HRPDSlabCanAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/HRPDSlabCanAbsorption.cpp index 721751c6baf5..dc64b2a511ce 100644 --- a/Code/Mantid/Framework/Algorithms/src/HRPDSlabCanAbsorption.cpp +++ b/Code/Mantid/Framework/Algorithms/src/HRPDSlabCanAbsorption.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -This algorithm is a refinement of the [[FlatPlateAbsorption]] algorithm for the specific case of an HRPD 'slab can' sample holder. It uses the aforementioned generic algorithm to calculate the correction due to the sample itself, using numerical integration. This is done using the standard height x width dimensions of an HRPD sample holder of 23 x 18 mm. Valid values of the thickness are 2,5,10 & 15 mm, although this is not currently enforced. - -Further corrections are then carried out to account for the 0.125mm Vanadium windows at the front and rear of the sample, and for the aluminium of the holder itself (which is traversed by neutrons en route to the 90 degree bank). This is carried out using an analytical approximation for a flat plate, the correction factor being calculated as - \rm{exp} \left( \frac{- \rho \left( \sigma_a \frac{ \lambda} {1.798} + \sigma_s \right) t}{\rm{cos} \, \theta} \right) , where \lambda is the wavelength, \theta the angle between the detector and the normal to the plate and the other symbols are as given in the property list above. The assumption is that the neutron enters the plate along the normal. - -==== Restrictions on the input workspace ==== -The input workspace must have units of wavelength. The [[instrument]] associated with the workspace must be fully defined because detector, source & sample position are needed. - -===ChildAlgorithms used=== -The [[FlatPlateAbsorption]] algorithm is used to calculate the correction due to the sample itself. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -216,4 +199,3 @@ API::MatrixWorkspace_sptr HRPDSlabCanAbsorption::runFlatPlateAbsorption() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/He3TubeEfficiency.cpp b/Code/Mantid/Framework/Algorithms/src/He3TubeEfficiency.cpp index 9beae1985a0e..fd0a4739594f 100644 --- a/Code/Mantid/Framework/Algorithms/src/He3TubeEfficiency.cpp +++ b/Code/Mantid/Framework/Algorithms/src/He3TubeEfficiency.cpp @@ -1,22 +1,3 @@ -/*WIKI* - - -This algorithm corrects the detection efficiency of He3 tubes using an exponential function and certain detector properties. The correction scheme is given by the following: - -\epsilon = \frac{A}{1-e^{\frac{-\alpha P (L - 2W) \lambda}{T sin(\theta)}}} - -where ''A'' is a dimensionless scaling factor, \alpha is a constant with units ''(Kelvin / (metres \AA atm))'', ''P'' is pressure in units of ''atm'', ''L'' is the tube diameter in units of ''metres'', ''W'' is the tube thickness in units of ''metres'', ''T'' is the temperature in units of ''Kelvin'', ''sin(\theta)'' is the angle of the neutron trajectory with respect to the long axis of the He3 tube and \lambda is in units of \AA. - -The Optional properties that are of num list type can be used in the following manner. If no input value is given, the detector parameter is pulled from the detector itself. If a single value is used as input, that value is applied to all detectors. If an array of values is used, that array ''must'' be the same size as the number of spectra in the workspace. If it is not, the spectra indicies that do not have values will be zeroed in the output workspace. - -=== Restrictions on Input Workspace === - -The input workspace must be in units of wavelength. - -The input workspace must be histogram data. - - -*WIKI*/ #include "MantidAlgorithms/He3TubeEfficiency.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidDataObjects/EventWorkspace.h" diff --git a/Code/Mantid/Framework/Algorithms/src/IQTransform.cpp b/Code/Mantid/Framework/Algorithms/src/IQTransform.cpp index 79cfb86f5d56..07e16cb2d43f 100644 --- a/Code/Mantid/Framework/Algorithms/src/IQTransform.cpp +++ b/Code/Mantid/Framework/Algorithms/src/IQTransform.cpp @@ -1,42 +1,3 @@ -/*WIKI* - - -This algorithm is intended to take the output of a SANS reduction and apply a transformation to the data in an attempt to linearise the curve. Optionally, a background can be subtracted from the input data prior to transformation. This can be either a constant value, another workspace or both. Note that this expects a single spectrum input; if the input workspace contains multiple spectra, only the first will be transformed and appear in the output workspace. - -A SANS reduction results in data in the form I(Q) vs Q, where Q is Momentum Transfer and I denotes intensity (the actual unit on the Y axis is 1/cm). These abbreviations are used in the descriptions of the transformations which follow. If the input is a histogram, the mid-point of the X (i.e. Q) bins will be taken. The output of this algorithm is always point data. - -{| border="1" cellpadding="5" cellspacing="0" -!Transformation Name -!Y -!X -|- -| Guinier (spheres) || align="center"|\ln (I) || align="center"|Q^2 -|- -| Guinier (rods) || align="center"|\ln (IQ) || align="center"|Q^2 -|- -| Guinier (sheets) || align="center"|\ln (IQ^2) || align="center"|Q^2 -|- -| Zimm || align="center"|\frac{1}{I} || align="center"|Q^2 -|- -| Debye-Bueche || align="center"|\frac{1}{\sqrt{I}} || align="center"|Q^2 -|- -| Holtzer || align="center"|I \times Q || align="center"|Q -|- -| Kratky || align="center"|I \times Q^2 || align="center"|Q -|- -| Porod || align="center"|I \times Q^4 || align="center"|Q -|- -| Log-Log || align="center"|\ln(I) || align="center"|\ln(Q) -|- -|General * -|Q^{C_1} \times I^{C_2} \times \ln{\left( Q^{C_3} \times I^{C_4} \times C_5 \right)} -|Q^{C_6} \times I^{C_7} \times \ln{\left( Q^{C_8} \times I^{C_9} \times C_{10} \right)} -|} -* The constants C_1 - C_{10} are, in subscript order, the ten constants passed to the GeneralFunctionConstants property. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/IdentifyNoisyDetectors.cpp b/Code/Mantid/Framework/Algorithms/src/IdentifyNoisyDetectors.cpp index 67b0bb5c11f2..a04345b9393b 100644 --- a/Code/Mantid/Framework/Algorithms/src/IdentifyNoisyDetectors.cpp +++ b/Code/Mantid/Framework/Algorithms/src/IdentifyNoisyDetectors.cpp @@ -1,24 +1,3 @@ -/*WIKI* - -The process for this algorithm is: -* The standard deviation for each pixel within the pre-set range is calculated. -* The mean value and standard deviation of these standard deviation values is calculated. -* Any detector/pixel for which it's standard deviation value satisfied the following conditions: -** sdev(pixel) < mean(sdevs) - 3 * sdev(sdevs) -** sdev(pixel) > mean(sdevs) + 3 * sdev(sdevs) -** sdev(pixel) < mean(sdevs) * 0.0001 -* (cont) is considered to be "noisy". - -This is repeated three times from the second step. - -This uses the [[Integration]], [[Power]] and [[Divide]] algorithms for the first step. - -The lower bound for the integration is currently fixed to 2000. - -The upper bound for the integration is currently fixed to 19000. - - -*WIKI*/ #include "MantidAlgorithms/IdentifyNoisyDetectors.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/Framework/Algorithms/src/IntegrateByComponent.cpp b/Code/Mantid/Framework/Algorithms/src/IntegrateByComponent.cpp index be7c3c00e229..2d0c589ee9ac 100644 --- a/Code/Mantid/Framework/Algorithms/src/IntegrateByComponent.cpp +++ b/Code/Mantid/Framework/Algorithms/src/IntegrateByComponent.cpp @@ -1,11 +1,3 @@ -/*WIKI* -The algorithm integrates up the instrument hierarchy, and each pixel will contain the average value for the component. For example, -assuming that for a particular instrument on workspace w1 a "tube" is made out of "pixels", w=IntegrateByComponent(w1,1) will integrate values of w1, -calculate the average along the tube (LevelsUp=1) (for non-masked pixels), and replace the value of each spectrum in a tube with the average value for that tube. - -Note that if the detectors are grouped before, this algorithm won't run except with LevelsUp=0 (integrate over all detectors). -*WIKI*/ - #include "MantidAlgorithms/IntegrateByComponent.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidKernel/BoundedValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/Integration.cpp b/Code/Mantid/Framework/Algorithms/src/Integration.cpp index 657b288e966b..bba82e39b3fc 100644 --- a/Code/Mantid/Framework/Algorithms/src/Integration.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Integration.cpp @@ -1,18 +1,3 @@ -/*WIKI* - -Integration sums up spectra in a [[Workspace]] and outputs a [[Workspace]] that contains only 1 value per spectrum (i.e. the sum). The associated errors are added in quadrature. -The two X values per spectrum are set to the limits of the range over which the spectrum has been integrated. By default, the entire range is integrated and all spectra are included. - -=== Optional properties === -If only a portion of the workspace should be integrated then the optional parameters may be used to restrict the range. StartWorkspaceIndex & EndWorkspaceIndex may be used to select a contiguous range of spectra in the workspace (note that these parameters refer to the workspace index value rather than spectrum numbers as taken from the raw file). -If only a certain range of each spectrum should be summed (which must be the same for all spectra being integrated) then the Range_lower and Range_upper properties should be used. No rebinning takes place as part of this algorithm: if the values given do not coincide with a bin boundary then the first bin boundary within the range is used. If a value is given that is beyond the limit covered by the spectrum then it will be integrated up to its limit. -The data that falls outside any values set will not contribute to the output workspace. - -=== EventWorkspaces === -If an [[EventWorkspace]] is used as the input, the output will be a [[MatrixWorkspace]]. [[Rebin]] is recommended if you want to keep the workspace as an EventWorkspace. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/InterpolatingRebin.cpp b/Code/Mantid/Framework/Algorithms/src/InterpolatingRebin.cpp index 22b44ca33660..21675dc1b381 100644 --- a/Code/Mantid/Framework/Algorithms/src/InterpolatingRebin.cpp +++ b/Code/Mantid/Framework/Algorithms/src/InterpolatingRebin.cpp @@ -1,28 +1,3 @@ -/*WIKI* - -This algorithms is useful for increasing the time resolution of spectra whose bins have large numbers of counts which vary smoothly e.g. monitor spectra. - -The "params" property defines the new bin boundaries using the same syntax as in [[Rebin]]. That is, the first number is the first bin boundary and the second number is the width of the bins. Bins are created until the third number would be exceeded, the third number is the x-value of the last bin. There can be further pairs of numbers, the first in the pair will be the bin width and the last number the last bin boundary. - -The bin immediately before the specified boundaries x_2, x_3, ... x_i is likely to have a different width from its neighbors because there can be no gaps between bins. Rebin ensures that any of these space filling bins cannot be less than 25% or more than 125% of the width that was specified. - -To calculate the y-values the input spectra are approximated with a time series where the value at the center of each bin mean is the mean count rate over the bin. This series is interpolated by calculating cubic splines that fit this series and evaluating the splines at the centers of the requested bin. The splines have natural boundary conditions and zero second derivative at the end points, they are calculated using the [http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html gsl]. - -The errors on the count rates are estimated as a weighted mean of the errors values for the nearest input bin centers. These weights are inversely proportional to the distance of the output bin center to the respective input bin data points. - -=== Example Rebin param strings === -The same syntax as for [[Rebin]] -;0,100,20000 -:From 0 rebin in constant size bins of 100 up to 20,000 -;0,100,10000,200,20000 -:From 0 rebin in steps of 100 to 10,000 then steps of 200 to 20,000 - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - OutWS = InterpolatingRebin("InWS2","x1,dx1,x2") - -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/InvertMask.cpp b/Code/Mantid/Framework/Algorithms/src/InvertMask.cpp index 1596616cb38c..7a61a1f182f6 100644 --- a/Code/Mantid/Framework/Algorithms/src/InvertMask.cpp +++ b/Code/Mantid/Framework/Algorithms/src/InvertMask.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - -A NOT operation will be conducted on the input masking workspace (SpecialWorkspace2D) - - -==Output== -A SpecialWorkspace2D with the same dimension and geometry as the input two SpecialWorkspace2D. - -*WIKI*/ - #include "MantidAlgorithms/InvertMask.h" #include "MantidKernel/System.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/Logarithm.cpp b/Code/Mantid/Framework/Algorithms/src/Logarithm.cpp index dbeca463675f..f79cd37ee709 100644 --- a/Code/Mantid/Framework/Algorithms/src/Logarithm.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Logarithm.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -''Logarithm'' function calculates the logarithm of the data, held in a workspace and tries to estimate the errors of this data, by calculating logarithmic transformation of the errors. The errors are assumed to be small and Gaussian so they are calculated on the basis of Tailor decomposition e.g. if S and Err are the signal and errors for the initial signal, the logarithm would provide S_{ln}=ln(S) and Err_{ln}=Err/S accordingly. If the base 10 logarithm is used the errors are calculated as Err_{log10}=0.434Err/S - -Some values in a workspace can normally be equal to zero. Logarithm is not calculated for values which are less or equal to 0, but the value of ''Filler'' is used instead. The errors for such cells set to zeros - -When acting on an event workspace, the output will be a Workspace2D, with the default binning from the original workspace. - -*WIKI*/ #include "MantidAlgorithms/Logarithm.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/MaskBins.cpp b/Code/Mantid/Framework/Algorithms/src/MaskBins.cpp index 9c14f51f1b4e..f85fd6dd99c1 100644 --- a/Code/Mantid/Framework/Algorithms/src/MaskBins.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MaskBins.cpp @@ -1,25 +1,3 @@ -/*WIKI* - -Masks bins in a workspace. Masked bins should properly be regarded as having been completely removed from the workspace. -Bins falling within the range given (even partially) are masked, i.e. their data and error values are set to zero and the bin is added to the list of masked bins. -This range is masked for all spectra in the workspace (though the workspace does not have to have common X values in all spectra). - -At present, although the zeroing of data will obviously be 'seen' by all downstream algorithms. -Only [[DiffractionFocussing]] (version 2) and [[Q1D]] have been modified to take account of masking. -Several algorithms (e.g. [[Rebin]], [[CropWorkspace]]) have been modified to properly propagate the masking. - -==Related Algorithms== -===RemoveBins=== -[[RemoveBins]] can work in several ways, if the bins are at the edges of the workspace they will be removed, and that will in many ways act like Masking the bins. -If the bins are in the middle of the workspace then the effect depends on the type of interpolation, -but importantly these bins will continue to influence future algorithms as opposed to masked bins. -For example, with no interpolation [[RemoveBins]] sets the bin values to 0. This 0 values will be included in the summing performed in DiffractionFocussing, -pushing down the values in that region. MaskBins is more clever. -While if you look at the data, it will appear that it has simply set the values to 0. -It has also set a series of flags inside that mark those bins to not be included in further claculations. -This means that when you Focus the data these values are simply missed out of the summing that is performed. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -271,4 +249,3 @@ void MaskBins::findIndices(const MantidVec& X, MantidVec::difference_type& start } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/MaskBinsFromTable.cpp b/Code/Mantid/Framework/Algorithms/src/MaskBinsFromTable.cpp index aa02975aa17d..c008586311fa 100644 --- a/Code/Mantid/Framework/Algorithms/src/MaskBinsFromTable.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MaskBinsFromTable.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -Masks bins in a workspace. The user specified masking parameters, including spectra, xmin and xmax are given via a TableWorkspace. - -It calls algorithm MaskBins underneath. - -==Related Algorithms== -===MaskBins=== -[[MaskBins]] masks bins in a workspace. Masked bins should properly be regarded as having been completely removed from the workspace. -Bins falling within the range given (even partially) are masked, i.e. their data and error values are set to zero and the bin is added to the list of masked bins. -This range is masked for all spectra in the workspace (though the workspace does not have to have common X values in all spectra). - -*WIKI*/ - #include "MantidAlgorithms/MaskBinsFromTable.h" #include "MantidKernel/System.h" #include "MantidAPI/WorkspaceProperty.h" @@ -323,32 +309,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Code/Mantid/Framework/Algorithms/src/MaskDetectorsIf.cpp b/Code/Mantid/Framework/Algorithms/src/MaskDetectorsIf.cpp index 02c86a6bd0ee..614906f73ea5 100644 --- a/Code/Mantid/Framework/Algorithms/src/MaskDetectorsIf.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MaskDetectorsIf.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -Iterates over the input workspace evaluating the test for each single value spectrum. -If the detectors should be masked it deselects all of the contributing detectors in the output calfile. -All other aspects of the InputCalFile are copied over to the OutputCalFile. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Max.cpp b/Code/Mantid/Framework/Algorithms/src/Max.cpp index 35f3af46cae5..2661e3c1f3c2 100644 --- a/Code/Mantid/Framework/Algorithms/src/Max.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Max.cpp @@ -1,9 +1,3 @@ -/*WIKI* - - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/MaxMin.cpp b/Code/Mantid/Framework/Algorithms/src/MaxMin.cpp index fb15de75c44c..a89b169f73e9 100644 --- a/Code/Mantid/Framework/Algorithms/src/MaxMin.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MaxMin.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -The algorithm creates a new 2D workspace containing the first maxima (minima) for each spectrum, as well as their X boundaries and error. -This is used in particular for single crystal as a quick way to find strong peaks. By default, the algorithm returns the maxima. - -The [[Max]] and [[Min]] algorithms are just calls to the [[MaxMin]] algorithm, with the ShowMin flag set to true/false respectively. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/MedianDetectorTest.cpp b/Code/Mantid/Framework/Algorithms/src/MedianDetectorTest.cpp index f3737fd09872..e83ea6b48234 100644 --- a/Code/Mantid/Framework/Algorithms/src/MedianDetectorTest.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MedianDetectorTest.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -If instrument geometry information is available the [[SolidAngle]] algorithm is used to calculate the number of counts per unit solid angle, otherwise numbers of counts are used without correction. First the median number of counts in all the bins is calculated. Then the ratio of the total number of counts and the median number is calculated for each histogram. This ratio is compared against the user defined upper and lower thresholds and if the ratio is outside the limits the statistical significance test is done. - -In the statistical significance test the difference between the number of counts in each spectrum and the median number is compared to the spectrum's error value. Any spectra where the ratio of the its deviation from the mean and the its error is less than the value of the property SignificanceTest will not be labelled bad. This test is particularly important when the number of counts is low, for example when examining the low count "background" parts of spectra. - -Optionally, some might want to do median on a tube, or a bank. Fot that, use the LevelsUp input. For example, in the CNCS instrument, the detector is called a pixel. The parent of a pixel is a tube, while an eightpack contains 8 tubes. To calculate the median of a tube, use LevelsUp=1, for an eightpack use LevelsUp=2. LevelsUp=0 will calculate the median over the whole instrument. - -The output workspace contains a MaskWorkspace where those spectra that fail the tests are masked and those that pass them are assigned a single positive value. - -===ChildAlgorithms used=== - -Uses the [[SolidAngle]], [[Integration]] and [[ConvertToDistribution]] algorithms. - - -*WIKI*/ #include "MantidAlgorithms/MedianDetectorTest.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidKernel/Exception.h" diff --git a/Code/Mantid/Framework/Algorithms/src/MergeRuns.cpp b/Code/Mantid/Framework/Algorithms/src/MergeRuns.cpp index 08d422a9da0c..ba01b7913149 100644 --- a/Code/Mantid/Framework/Algorithms/src/MergeRuns.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MergeRuns.cpp @@ -1,36 +1,3 @@ -/*WIKI* - -Combines the data contained in an arbitrary number of input workspaces. If the input workspaces do not have common binning, the bins in the output workspace will cover the entire range of all the input workspaces, with the largest bin widths used in regions of overlap. - -==== Restrictions on the input workspace ==== - -The input workspaces must contain histogram data with the same number of spectra and matching units and instrument name in order for the algorithm to succeed. - -'''For [[Workspace2D]]s''': Each input workspace must have common binning for all its spectra. - -'''For [[EventWorkspace]]s''': This algorithm is Event-aware; it will append event lists from common spectra. Binning parameters need not be compatible; the output workspace will use the first workspaces' X bin boundaries. - -'''For [[WorkspaceGroup]]s''': Each nested has to be one of the above. - -Other than this it is currently left to the user to ensure that the combination of the workspaces is a valid operation. - -=== Processing Group Workspaces === - -==== Multi-period Group Workspaces ==== - -Group workspaces will be merged respecting the periods within each group. For example if you have two multiperiod group workspaces A and B and an output workspace C. A contains matrix workspaces A_1 and A_2, and B contains matrix workspaces B_1 and B2. Since this -is multiperiod data, A_1 and B_1 share the same period, as do A_2 and B_2. So merging must be with respect to workspaces of equivalent periods. Therefore, -merging is conducted such that A_1 + B_1 = C_1 and A_2 + B_2 = C_2. - -==== Group Workspaces that are not multiperiod ==== -If group workspaces are provided that are not multi-period, this algorithm will merge across all nested workspaces, to give a singe output matrix workspace. - -==== ChildAlgorithms used ==== - -The [[Rebin]] algorithm is used, if neccessary, to put all the input workspaces onto a common binning. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Min.cpp b/Code/Mantid/Framework/Algorithms/src/Min.cpp index 221e656977dc..8c4cb16aac4a 100644 --- a/Code/Mantid/Framework/Algorithms/src/Min.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Min.cpp @@ -1,9 +1,3 @@ -/*WIKI* - - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Minus.cpp b/Code/Mantid/Framework/Algorithms/src/Minus.cpp index bd10c65f9d5e..2ac18ada7377 100644 --- a/Code/Mantid/Framework/Algorithms/src/Minus.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Minus.cpp @@ -1,22 +1,3 @@ -/*WIKI* -{{BinaryOperation|verb=subtracted|prep=from|symbol=-}} - -The Minus algorithm will subtract the data values and calculate the corresponding [[Error Values|error values]] for two compatible workspaces. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - output = Minus("w1","w2") - w3 = w1 - w2 - w2 -= w1 # Perform "in-place" - -'''C++ Within an Algorithm'''
-The usage of basic workspace mathematical operations has been specially simplified for use within algorithms - - //w1 and w2 are workspaces - Workspace output = w1 - w2; - -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ModeratorTzero.cpp b/Code/Mantid/Framework/Algorithms/src/ModeratorTzero.cpp index a9b7e404ab36..5a92a4c0b86b 100644 --- a/Code/Mantid/Framework/Algorithms/src/ModeratorTzero.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ModeratorTzero.cpp @@ -1,48 +1,3 @@ -/*WIKI* -Corrects the time of flight (TOF) by a time offset that is dependent on the energy of the neutron after passing through the moderator. -A heuristic formula for the correction is stored in the instrument definition file. Below is shown the entry in the instrument file for the VISION beamline:
- - - -
- -The recorded TOF = t_0 + t_i + t_f with
-t_0: emission time from the moderator
-t_1: time from moderator to sample or monitor
-t_2: time from sample to detector
-This algorithm will replace TOF with TOF^* = TOF-t_0 = t_i+t_f
- - -For a direct geometry instrument, the incident energy E_1 is the same for all neutrons. Hence, the moderator emission time is the same for all neutrons. -For an indirect geometry instrument, E_1 is different for each neutron and is not known. However, the final energy E_2 selected by the analyzers is known.
-t_0 = func(E_1) , a function of the incident energy
-t_1 = L_1/v_1 with L_1 the distance from moderator to sample, and v_1 the initial unknown velocity ( E_1=1/2*m*v_1^2)
-t_2 = L_2/v_2 with L_2 the distance from sample to detector, and v_2 is the final fixed velocity ( E_2=1/2*m*v_2^2)
- - -'''Note:''' We obtain TOF^* as an iterative process, taking into account the fact that the correction t_0 is much smaller than t_i+t_f. Thus
-TOF-t_0^{(n)} = L_1/v_1^{(n)} + L_2/v_2 , n=0, 1, 2,..
-Set t_0^{(0)}=0 and obtain v_1^{(0)} from the previous formula. From v_1^{(0)} we obtain E_1^{(0)}
-Set t_0^{(1)}=func( E_1^{(0)} ) and repeat the steps until |t_0^{(n+1)} - t_0^{(n+1)}| < tolTOF. With tolTOF=0.1microsecond, only one iteration is needed for convergence. - - -Here's the result of applying ModeratorTzero to both the event list and the histogrammed data of a run in the VISION beamline. The transformation of either events or histograms shifts the curve to smaller TOF's. -The transformed curves are not supposed to be identical, but similar and differenciated from the original curve. - -{| class="wikitable" -|- -! Sumed Histogram !! Elastic Line !! Inelastic Peaks -|- -| [[File:ModeratorTzero_Fig.1.jpeg|200px||center|]] || [[File:ModeratorTzero_Fig.2.jpeg|200px||center|]] || [[File:ModeratorTzero_Fig.3.jpeg|200px||center|]] -|} - - -For indirect instruments featuring an incoming neutron flux having a sufficiently narrow distribution of energies, a linear relationship between t_0 and -the wavelength of the incoming neutron can be established. This relation allows for coding of an algorithm with -faster execution times. For indirect instruments that comply with these conditions, use of [[ModeratorTzeroLinear]] is preferred. - -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -381,4 +336,3 @@ double ModeratorTzero::gett1min() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ModeratorTzeroLinear.cpp b/Code/Mantid/Framework/Algorithms/src/ModeratorTzeroLinear.cpp index ff6de9ccf5a3..1963bc5b752b 100644 --- a/Code/Mantid/Framework/Algorithms/src/ModeratorTzeroLinear.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ModeratorTzeroLinear.cpp @@ -1,44 +1,3 @@ -/*WIKI* - -This algorithm Corrects the time of flight (TOF) of an indirect geometry instrument by substracting a time offset t_0 -linearly dependent on the wavelenght of the neutron when emitted through the moderator. This algorithm is suitable to data reduction -of indirect instruments featuring a neutron flux with a narrow distribution of wavelenghts. -A heuristic formula for the correction, stored in the instrument definition file, is taken as linear on the initial -neutron wavelength \lambda_i: -t_0 = a * \lambda_i + b, [a]=microsec/Angstrom and [b]=microsec. -Below is the example XML code included in BASIS beamline parameters file. - -
-
-
-    
-
-
-    
-
-
- -The recorded TOF: TOF = t_0 + t_i + t_f, with -* t_0: emission time from the moderator -* t_i: time from moderator to sample -* t_f: time from sample to detector - -This algorithm will replace TOF with TOF' = TOF-t_0 = t_i + t_f - -For an indirect geometry instrument, \lambda_i is not known but the final energy, E_f, -selected by the analyzers is known. For this geometry: -* t_f = L_f/v_f, with L_f: distance from sample to detector, v_f: final velocity derived from E_f -* t_i = L_i/v_i, with L_i: distance from moderator to sample, v_i: initial velocity unknown -* t_0 = a'/v_i+b', with a' and b' constants derived from the aforementioned heuristic formula a' = a \cdot 3.956 \cdot 10^{-3} with [a']=meter, -and b' = b with [b']=microsec - -Putting all together: TOF' = \frac{L_i}{L_i+a'} \cdot (TOF-t_f-b') + t_f, with [TOF']=microsec - -If the detector is a monitor, then we can treat it as both sample and detector. Thus, we use the previous formula inserting the time from sample -to detector t_f = 0 and with the initial fligh path L_i as the distance from source to monitor. - -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -310,4 +269,3 @@ void ModeratorTzeroLinear::calculateTfLi(MatrixWorkspace_const_sptr inputWS, siz } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/MonteCarloAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/MonteCarloAbsorption.cpp index 671571712e73..08025459c243 100644 --- a/Code/Mantid/Framework/Algorithms/src/MonteCarloAbsorption.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MonteCarloAbsorption.cpp @@ -1,24 +1,3 @@ -/*WIKI* - - -This algorithm performs a Monte Carlo simulation to calculate the attenuation factor of a given sample for an arbitrary arrangement of sample + container shapes. The algorithm proceeds as follows for each spectra in turn: -* A random point within the sample+container set up is selected and chosen as a scattering point; -* This point then defines an incoming vector from the source position and an outgoing vector to the final detector; -* The total attenuation factor for this path is then calculated as the product of the factor for each defined material of the sample/container that the track passes through. - -== Known limitations == -* Only elastic scattering is implemented at the moment. - -* The object's bounding box is used as a starting point for selecting a random point. If the shape of the object is peculiar enough not to occupy much of the bounding box then the generation of the initial scatter point will fail. - - -==== Restrictions on the input workspace ==== -The input workspace must have units of wavelength. The [[instrument]] associated with the workspace must be fully defined because detector, source & sample position are needed. - -At a minimum, the input workspace must have a sample shape defined. - - -*WIKI*/ //------------------------------------------------------------------------------ // Includes //------------------------------------------------------------------------------ diff --git a/Code/Mantid/Framework/Algorithms/src/MultipleScatteringCylinderAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/MultipleScatteringCylinderAbsorption.cpp index 3ca2311db099..7dcf1d1cf188 100644 --- a/Code/Mantid/Framework/Algorithms/src/MultipleScatteringCylinderAbsorption.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MultipleScatteringCylinderAbsorption.cpp @@ -1,9 +1,3 @@ -/*WIKI* -This algorithm is a port to C++ of a multiple scattering absorption correction, used to -correct the vanadium spectrum for the GPPD instrument at the IPNS. The correction calculation was -originally worked out by Jack Carpenter and Asfia Huq and implmented in Java by Alok Chatterjee. -The java code was translated to C++ in Mantid by Dennis Mikkelson. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Multiply.cpp b/Code/Mantid/Framework/Algorithms/src/Multiply.cpp index a0cbe875dc94..71850f1a5bca 100644 --- a/Code/Mantid/Framework/Algorithms/src/Multiply.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Multiply.cpp @@ -1,22 +1,3 @@ -/*WIKI* - {{BinaryOperation|verb=multiplied|prep=by|symbol=\times}} - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - output = Multiply("w1","w2") - w3 = w1 * w2 - w1 *= w2 # Perform "in-place" - # Using a scalar - w3 = w1 * 2.5 - w1 *= 2.5 # Perform "in-place" - -'''C++ Within an Algorithm'''
-The usage of basic workspace mathematical operations has been specially simplified for use within algorithms - - //w1 and w2 are workspaces - Workspace output = w1 * w2; -*WIKI_USAGE*/ // Includes //---------------------------------------------------------------------- //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/MultiplyRange.cpp b/Code/Mantid/Framework/Algorithms/src/MultiplyRange.cpp index 5f4d6adc931d..39c01bbce9d8 100644 --- a/Code/Mantid/Framework/Algorithms/src/MultiplyRange.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MultiplyRange.cpp @@ -1,9 +1,3 @@ -/*WIKI* - - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -103,4 +97,3 @@ void MultiplyRange::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/MuonGroupDetectors.cpp b/Code/Mantid/Framework/Algorithms/src/MuonGroupDetectors.cpp index d10bea6a7b79..a38bb053c917 100644 --- a/Code/Mantid/Framework/Algorithms/src/MuonGroupDetectors.cpp +++ b/Code/Mantid/Framework/Algorithms/src/MuonGroupDetectors.cpp @@ -1,11 +1,3 @@ -/*WIKI* -Applies detector grouping to a workspace. (Muon version). - -Expect the DetectorGroupingTable to contain one column only. It should be of type vector_int (std::vector). Every row corresponds to a group, and the values in the only column are IDs (not indices!) of the detectors which spectra should be contained in the group. Name of the column is not used. - -One detector might be in more than one group. Empty groups are ignored. std::invalid_argument exceptions are thrown if table format is not correct, there are no non-empty groups or one of the detector IDs does not exist in the workspace. -*WIKI*/ - #include "MantidAlgorithms/MuonGroupDetectors.h" #include "MantidAPI/WorkspaceFactory.h" #include "MantidDataObjects/TableWorkspace.h" diff --git a/Code/Mantid/Framework/Algorithms/src/NormaliseByCurrent.cpp b/Code/Mantid/Framework/Algorithms/src/NormaliseByCurrent.cpp index 27b6b469e550..c8f35097de85 100644 --- a/Code/Mantid/Framework/Algorithms/src/NormaliseByCurrent.cpp +++ b/Code/Mantid/Framework/Algorithms/src/NormaliseByCurrent.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -Normalises a workspace according to the good proton charge figure taken from the Input Workspace log data, which is stored in the workspace's [[Sample]] object). Every data point (and its error) is divided by that number. - -== ISIS Calculation Details == -The good proton charge '''gd_ptrn_chrg''' is an summed value that applies across all periods. It is therefore suitable to run NormaliseByProtonCharge for single-period workspaces, but gives incorrect normalisation for multi-period workspaces. If the algorithm detects the presences of a multi-period workspace, it calculates the normalisation slightly differently. It uses the '''current_period''' log property to index into the '''proton_charge_by_period''' log data array property. - -=== EventWorkspaces === -If the input workspace is an [[EventWorkspace]], then the output will be as well. Weighted events are used to scale by the current (see the [[Divide]] algorithm, which is a child algorithm being used). - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/NormaliseByDetector.cpp b/Code/Mantid/Framework/Algorithms/src/NormaliseByDetector.cpp index 925a33f2321b..9d0a8eff32bd 100644 --- a/Code/Mantid/Framework/Algorithms/src/NormaliseByDetector.cpp +++ b/Code/Mantid/Framework/Algorithms/src/NormaliseByDetector.cpp @@ -1,105 +1,3 @@ -/*WIKI* - -This algorithm is designed to normalise a workspace via detector efficiency functions. '''For this algorithm to work, the Instrument Defintion File [[IDF]] must have fitting functions on the component tree'''. The setup information for this, as well as some examples, are provided below. - -At a high-level, the algorithm does this: - -# Extract a detector efficiency function e = f(\lambda) -# Using the bin boundaries on the input workspace, calculate efficiency Y and E values and generate a new workspace from the results -# Divide the input workspace by the efficiency workspace -== Prerequisites == - -=== The Input Workspace === -# The input workspace must be a MatrixWorkspace -# The input workspace must have X-units of Wavelength, run [[ConvertUnits]] on your input workspace if it is not already in Wavelength. -# The input workspace must be a histogram workspace run [[ConvertToHistogram]] on your input workspace if it is not already histogrammed. - -=== The Instrument Definition File === -==== Background ==== -In brief, the components in the IDF file form a tree structure. Detectors and Instruments are both types of component. Detectors are ultimately children of Instruments in the tree structure. For a more complete description see [[IDF]]. The tree structure of the components, mean that fitting functions do not necessarily have to be assigned on a detector-by-detector basis. Applying a fit function to the instrument, will ensure that all subcomponents (including detectors), pick-up that function. However, functions assigned to lower-level components (such as detectors) take precidence over and exising functions that might exist on parent components (such as the instrument). You can even, have some parameters for a function provided against the detector, and pick up defaults from the bank, or instrument if they have been specified there. -==== Recommended Working ==== - -The IDF is intended to be a definitive description of the components in the instrument at any time. This should be the most generic form of the instrument setup possible. To complement this, you may provide additional Instrument Parameter files, which can be used to overload settings in the IDF for purposes of configuration and calibration. '''We strongly recommend that fitting functions are provided via Instrument Parameter Files rather than directly in the IDF'''. This will give you more flexibility to change your fitting functions without the problems of synchronising the IDF across Mantid, and possible corruption resulting from ad-hoc changes. - -Instrument Parameter Files that take the form {InstrumentName}_Parameters.xml and live in the Instrument directory of Mantid are automatically loaded along with the IDF when a workspace is loaded into Mantid. However, you can apply any number of additional parameter files over the top of an existing workspace using [[LoadParameterFile]]. - -==== Examples ==== - -Applying a LinearFunction to the whole instrument, hard-coded with A1=2 and A0=1. Fictional instrument is called basic_rect. - -
- - - - - - - - - - - - - -
- -Applying the same LinearFunction to two different detectors, with different coefficients is shown below: - -
- - - - - - - - - - - - - - - - - - - - - - - -
- -In the following the LinearFunction A0 coefficient is set globally for all detectors at the instrument level, while the -A1 coefficient is provided for each detector. In this way the Algorithm sees a complete definition for the Linear function (both A1 and A0) from two incomplete definitions on different components in the tree. - -
- - - - - - - - - - - - - - - - - - - - - -
- -*WIKI*/ - #include "MantidAlgorithms/NormaliseByDetector.h" #include "MantidKernel/System.h" #include "MantidKernel/UnitFactory.h" diff --git a/Code/Mantid/Framework/Algorithms/src/NormaliseToMonitor.cpp b/Code/Mantid/Framework/Algorithms/src/NormaliseToMonitor.cpp index 25a53909cd7f..8f715aa371b5 100644 --- a/Code/Mantid/Framework/Algorithms/src/NormaliseToMonitor.cpp +++ b/Code/Mantid/Framework/Algorithms/src/NormaliseToMonitor.cpp @@ -1,34 +1,3 @@ -/*WIKI* - -===Bin-by-bin mode=== -In this, the default scenario, each spectrum in the workspace is normalised on a bin-by-bin basis by the monitor spectrum given. The error on the monitor spectrum is taken into account. -The normalisation scheme used is: - -(s_i)_{Norm}=(\frac{s_i}{m_i})*\Delta w_i*\frac{\sum_i{m_i}}{\sum_i(\Delta w_i)} - -where s_i is the signal in a bin, m_i the count in the corresponding monitor bin, \Delta w_i the bin width, \sum_i{m_i} the integrated monitor count and \sum_i{\Delta w_i} the sum of the monitor bin widths. -In words, this means that after normalisation each bin is multiplied by the bin width and the total monitor count integrated over the entire frame, and then divided by the total frame width. This leads to a normalised histogram which has unit of counts, as before. - -If the workspace does not have common binning, then the monitor spectrum is rebinned internally to match each data spectrum prior to doing the normalisation. - -===Normalisation by integrated count mode=== -This mode is used if one or both of the relevant 'IntegrationRange' optional parameters are set. If either is set to a value outside the workspace range, then it will be reset to the frame minimum or maximum, as appropriate. - -The error on the integrated monitor spectrum is taken into account in the normalisation. No adjustment of the overall normalisation takes place, meaning that the output values in the output workspace are technically dimensionless. - -=== Restrictions on the input workspace === - -The data must be histogram, non-distribution data. - -===Child Algorithms used=== - -The [[ExtractSingleSpectrum]] algorithm is used to pull out the monitor spectrum if it's part of the InputWorkspace or MonitorWorkspace. -For the 'integrated range' option, the [[Integration]] algorithm is used to integrate the monitor spectrum. - -In both cases, the [[Divide]] algorithm is used to perform the normalisation. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/NormaliseToUnity.cpp b/Code/Mantid/Framework/Algorithms/src/NormaliseToUnity.cpp index c54803b1a248..152598fdc023 100644 --- a/Code/Mantid/Framework/Algorithms/src/NormaliseToUnity.cpp +++ b/Code/Mantid/Framework/Algorithms/src/NormaliseToUnity.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -NormaliseToUnity uses [[Integration]] to sum up all the X bins, then sums up the resulting spectra using [[SumSpectra]]. Each bin of the input workspace is then divided by the total sum, regardless of whether a bin was included in the sum or not. It is thus possible to normalize a workspace so that a range of X bins and spectra sums to 1. In that case the sum of the whole workspace will likely not be equal to 1. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/OneMinusExponentialCor.cpp b/Code/Mantid/Framework/Algorithms/src/OneMinusExponentialCor.cpp index 8ab0b589b578..5ee64ca2bd0b 100644 --- a/Code/Mantid/Framework/Algorithms/src/OneMinusExponentialCor.cpp +++ b/Code/Mantid/Framework/Algorithms/src/OneMinusExponentialCor.cpp @@ -1,19 +1,3 @@ -/*WIKI* - - -This algorithm corrects the data and error values on a workspace by the value of one minus an exponential function -of the form \rm C1(1 - e^{-{\rm C} x}) . -This formula is calculated for each data point, with the value of ''x'' -being the mid-point of the bin in the case of histogram data. -The data and error values are either divided or multiplied by the value of this function, according to the -setting of the Operation property. - -This algorithm is now event aware. - -This correction is applied to a copy of the input workpace and put into output workspace. -If the input and output workspaces have the same name, the operation is applied to the workspace of that name. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/PDFFourierTransform.cpp b/Code/Mantid/Framework/Algorithms/src/PDFFourierTransform.cpp index 06e34e10dddf..e6cd709bc76f 100644 --- a/Code/Mantid/Framework/Algorithms/src/PDFFourierTransform.cpp +++ b/Code/Mantid/Framework/Algorithms/src/PDFFourierTransform.cpp @@ -1,49 +1,3 @@ -/*WIKI* - -The algorithm PDFFourierTransform transforms S(Q), S(Q)-1, or Q[S(Q)-1] -(as a fuction of MomentumTransfer or dSpacing) to a PDF (pair distribution function) as described below. - -The input Workspace can have the unit in d-space of Q-space. The algorithm itself is able to identify -the unit. The allowed unit are MomentumTransfer and d-spacing. - -'''Note:''' All other forms are calculated by transforming G(r). - -==== Output Options ==== - -=====G(r)===== - - G(r) = 4\pi r[\rho(r)-\rho_0] = \frac{2}{\pi} \int_{0}^{\infty} Q[S(Q)-1]\sin(Qr)dQ - -and in this algorithm, it is implemented as - - G(r) = \frac{2}{\pi} \sum_{Q_{min}}^{Q_{max}} Q[S(Q)-1]\sin(Qr) M(Q,Q_{max}) \Delta Q - -where M(Q,Q_{max}) is an optional filter function. If Filter property is set (true) then - -M(Q,Q_{max}) = \frac{\sin(\pi Q/Q_{max})}{\pi Q/Q_{max}} - -otherwise - -M(Q,Q_{max}) = 1\, - -=====g(r)===== - -G(r) = 4 \pi \rho_0 r [g(r)-1] - -transforms to - -g(r) = \frac{G(r)}{4 \pi \rho_0 r} + 1 - -=====RDF(r)===== - -RDF(r) = 4 \pi \rho_0 r^2 g(r) - -transforms to - -RDF(r) = r G(r) + 4 \pi \rho_0 r^2 - -*WIKI*/ - #include "MantidAlgorithms/PDFFourierTransform.h" #include "MantidKernel/System.h" #include "MantidAPI/WorkspaceValidators.h" @@ -428,4 +382,3 @@ namespace Mantid } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/Pause.cpp b/Code/Mantid/Framework/Algorithms/src/Pause.cpp index a18cf4b220b2..b6d89c2148f9 100644 --- a/Code/Mantid/Framework/Algorithms/src/Pause.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Pause.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -This is a very simple algorithm that does nothing -for a given number of seconds. - -This can be used during debugging, for example, -to slow down the execution of a fast script. - -*WIKI*/ - #include "MantidAlgorithms/Pause.h" #include "MantidAPI/Algorithm.h" diff --git a/Code/Mantid/Framework/Algorithms/src/PerformIndexOperations.cpp b/Code/Mantid/Framework/Algorithms/src/PerformIndexOperations.cpp index cbc4b000133d..63ff0862dc9a 100644 --- a/Code/Mantid/Framework/Algorithms/src/PerformIndexOperations.cpp +++ b/Code/Mantid/Framework/Algorithms/src/PerformIndexOperations.cpp @@ -1,64 +1,3 @@ -/*WIKI* - -Performs index operations on a workspace which involve cropping out spectra and summing spectra together. See [[MultiFileLoading]] for similar syntax used during loading, though operations -using step sizes are not supported here. - -== Basic Instructions == - - {| class="wikitable" - !rowspan="2" |Name - !width=200 rowspan="2" |Usage - !rowspan="2" |Description - !colspan="2" |Example - |- - !Input - !Result - |- - !align="center" |List - |align="center" |, - |Used to list workspace_indexes to keep. - |0,1,2 - |Keeps spectrum with workspace indexes 0,1,2 others are cropped out. - |- - !align="center" |Plus - |align="center" |+ - |Used to specify which spectrum are to be summed together via [[SumSpectra]]. For summing ranges use ''Added Range'' - |1+2 - |Sum spectrum with workspace indexes 1, 2 together. - |- - !align="center" |Range - |align="center" |: - |Used to specify a range of N spectrum to keep. - |0:4 - |Keeps spectrum with workspace indexes between 0 and 4. - |- - !align="center" |Added Range - |align="center" |- - |Used to specify a range of spectrum that are to be summed together via [[SumSpectra]]. This is an alternative to the binary ''Plus'' operator. - |1-4 - |Sum spectra corresponding to the workspace indexes between 1 and 4. - |- - |} - -== Complex Instructions == - -The basic instructions listed above can be used in combination because ''', can be used to separate out sets of instructions as well as indexes to keep'''. -For example, ''0-2, 3:6'' will add -spectrum with workspace indexes 0-2 together into a single spectrum and then append spectra that correspond to -workspace indexes 3-6 from the original workspace (you will have 4 spectra -in the output workspace). - -== Limitations == - -* The ''+'' operator is binary only and works like 0+1, but cannot be used like 0+1+2. Use the Add Range operator ''-'' in these scenarios. - -== Order of operations == -The spectra will appear in the output workspace in the same order that they are defined in the instructions. -For example ''1+2, 0'' will have the results of 1+2 as workspace index 0 in the output -workspace and index 0 in the original workspace will be mapped to workspace index 1 in the output workspace. - - *WIKI*/ - #include "MantidAlgorithms/PerformIndexOperations.h" #include "MantidAPI/MatrixWorkspace.h" #include "MantidAPI/AlgorithmManager.h" diff --git a/Code/Mantid/Framework/Algorithms/src/PlotAsymmetryByLogValue.cpp b/Code/Mantid/Framework/Algorithms/src/PlotAsymmetryByLogValue.cpp index 014bf153744f..dfa1e2ba5d20 100644 --- a/Code/Mantid/Framework/Algorithms/src/PlotAsymmetryByLogValue.cpp +++ b/Code/Mantid/Framework/Algorithms/src/PlotAsymmetryByLogValue.cpp @@ -1,36 +1,3 @@ -/*WIKI* - - -This algorithm calculates asymmetry for a series of muon workspaces. The input workspaces must be in Muon Nexus files which names follow the rule: the filename must begin with at least 1 letter and followed by a number. The input property FirstRun must be set to the file name with the smalest number and the LastRun to the one with the highest number. If the "Green" property is not set the output workspace will contain a single spectrum with asymmetry values. If the "Green" is set the output workspace will contain four spectra with asymmetries: - -{| border="1" cellpadding="5" cellspacing="0" -!Workspace Index -!Spectrum -!Asymmetry -|- -|0 -|1 -|Difference of Red and Green -|- -|1 -|2 -|Red only -|- -|2 -|3 -|Green only -|- -|3 -|4 -|Sum of red and green asymmetries -|} - -If ForwardSpectra and BackwardSpectra are set the muon workspaces will be grouped according to the user input, otherwise the Autogroup option of LoadMuonNexus will be used for grouping. - -There is a python script PlotAsymmetryByLogValue.py which if called in MantidPlot runs the algorithm and plots the results. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -621,7 +588,3 @@ namespace Mantid } } // namespace Algorithm } // namespace Mantid - - - - diff --git a/Code/Mantid/Framework/Algorithms/src/Plus.cpp b/Code/Mantid/Framework/Algorithms/src/Plus.cpp index ab624c938d31..34b92421a5db 100644 --- a/Code/Mantid/Framework/Algorithms/src/Plus.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Plus.cpp @@ -1,23 +1,3 @@ -/*WIKI* -{{BinaryOperation|verb=added|prep=to|symbol=+}} - -===EventWorkspace note=== -For [[EventWorkspace]]s, the event lists at each workspace index are concatenated to create the output event list at the same workspace index. Note that in some (rare*) cases, these event lists might be from different detectors; this is not checked against and the event lists will be concatenated anyway. This may or may not be your desired behavior. If you wish to merge different EventWorkspaces while matching their detectors together, use the [[MergeRuns]] algorithm. - -* This could happen, for example, if the workspace operands have not both been processed in an identical fashion and the detectors have somehow been grouped differently. -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - output = Plus("w1","w2") - w3 = w1 + w2 - w1 += w2 # Perform "in-place" - -'''C++ Within an Algorithm'''
-The usage of basic workspace mathematical operations has been specially simplified for use within algorithms - - //w1 and w2 are workspaces - Workspace output = w1 + w2; -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/PointByPointVCorrection.cpp b/Code/Mantid/Framework/Algorithms/src/PointByPointVCorrection.cpp index 1b4c42893cdc..21850601194e 100644 --- a/Code/Mantid/Framework/Algorithms/src/PointByPointVCorrection.cpp +++ b/Code/Mantid/Framework/Algorithms/src/PointByPointVCorrection.cpp @@ -1,23 +1,3 @@ -/*WIKI* - -Divides the data spectra by the matching vanadium spectra according to the following formula: - -(y_i)_{Norm}=(\frac{y_i}{v_i})*\Delta w_i*\frac{\sum_i{y_i}}{\sum_i((\frac{y_i}{v_i})\Delta w_i)} - -where y_i is the signal in the sample workspace, v_i the count in the corresponding vanadium bin, \Delta w_i the bin width, \sum_i{y_i} the integrated data count and \sum_i((\frac{y_i}{v_i})\Delta w_i) the sum of the sample counts divided by the vanadium counts multiplied by the bin width. - -This leads to a normalised histogram which has unit of counts, as before. - -In order to minimise sudden jumps in the data caused by 0 counts in the corresponding vanadium spectrum it is worth considering smoothing the Vanadium spectrum using [[SmoothData]] prior to using it in this algorithm. - -=== Valid input workspaces === -The input workspaces have to have the following in order to be valid inputs for this algorithm. -* The same number of spectra -* Matching spectra numbers -This is normally not a problem unless the setup of the instrument has been changed between recording the Vanadium and the sample datasets. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/PoissonErrors.cpp b/Code/Mantid/Framework/Algorithms/src/PoissonErrors.cpp index 5be821f3b932..6d1132cc616c 100644 --- a/Code/Mantid/Framework/Algorithms/src/PoissonErrors.cpp +++ b/Code/Mantid/Framework/Algorithms/src/PoissonErrors.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Takes a Data workspace and an original counts workspace input and updates the -error values in the data workspace to be the same fractionally as the counts workspace. -The number of histograms, the binning and units of the two workspaces must match. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/PolynomialCorrection.cpp b/Code/Mantid/Framework/Algorithms/src/PolynomialCorrection.cpp index ef0b02624af6..e674b6b101ed 100644 --- a/Code/Mantid/Framework/Algorithms/src/PolynomialCorrection.cpp +++ b/Code/Mantid/Framework/Algorithms/src/PolynomialCorrection.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - -Corrects the data and error values on a workspace by the value of a polynomial function: -: {\rm C0} + {\rm C1} x + {\rm C2} x^2 + ... -which is evaluated at the ''x'' value of each data point (using the mid-point of the bin as the ''x'' value for -histogram data. The data and error values are multiplied or divided by the value of this function. -The order of the polynomial is determined by the length of the Coefficients property, which can be of any length. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Power.cpp b/Code/Mantid/Framework/Algorithms/src/Power.cpp index 8916fbcd59e1..095f19c79efa 100644 --- a/Code/Mantid/Framework/Algorithms/src/Power.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Power.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -The algorithm will raise the InputWorkspace to the power of the Exponent. -When acting on an event workspace, the output will be a Workspace2D, with the default binning from the original workspace. - -== Errors == - -Defining the power algorithm as: y = \left ( a^b \right ) , we can describe the error as: -s_{y} = by\left ( s_{a}/a \right ), where s_{y} is the error in the result ''y'' and s_{a} is the error in the input ''a''. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - outputW = Power("inputW",3) - -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -66,4 +49,3 @@ inline double Power::calculatePower(const double base, const double exponent) } } - diff --git a/Code/Mantid/Framework/Algorithms/src/PowerLawCorrection.cpp b/Code/Mantid/Framework/Algorithms/src/PowerLawCorrection.cpp index f23a0e3d6460..f7e2ebaa0d94 100644 --- a/Code/Mantid/Framework/Algorithms/src/PowerLawCorrection.cpp +++ b/Code/Mantid/Framework/Algorithms/src/PowerLawCorrection.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - -This algorithm corrects the data and error values on a workspace by the value of an function -of the form C0 \times x^{C1} . -This formula is calculated for each data point, with the value of ''x'' -being the mid-point of the bin in the case of histogram data. -The data and error values are multiplied by the value of this function. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Q1D2.cpp b/Code/Mantid/Framework/Algorithms/src/Q1D2.cpp index f2c1b899dfe9..7bae5bd807d6 100644 --- a/Code/Mantid/Framework/Algorithms/src/Q1D2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Q1D2.cpp @@ -1,127 +1,3 @@ -/*WIKI* - -===Q Unit Conversion=== -The equation for Q as function of wavelength, \lambda, and neglecting gravity, is -:Q = \frac{4\pi}{\lambda} sin(\theta) -where 2 \theta is the particle's angle of deflection. If a particle's measured deflection over the sample to the detector (pixel) distance, L_2, is x along the x-axis and y along the y-axis then \theta is - -:\theta = \frac{1}{2} arcsin\left (\frac{\sqrt{x^2+y^2}}{L_2} \right ) - -Including gravity adds another term to this equation which becomes: -:\theta = \frac{1}{2} arcsin\left (\frac{ \sqrt{x^2+\left (y+\frac{gm^2}{2h^2} \lambda^2 L_2^2 \right)^2}}{L_2} \right ) -where m is the particle's mass, g is the acceleration due to gravity and h is [http://en.wikipedia.org/wiki/Planks_constant plank's constant] (this assumes neutrons are all travelling in horizontal at sample, and that x=y=0 would be beam centre at \lambda = 0). - -===Normalized Intensity=== -This [[Algorithm|algorithm]] takes a workspace of number of neutron counts against [[Units|wavelength]] and creates a workspace of cross section against Q. The output Q bins boundaries are defined by setting the property OutputBinning. - -Below is the formula used to calculate the cross section, P_I(Q), for one bin in the output workspace whose bin number is denoted by I, when the input workspace has just one detector. Each bin is calculated from the sum of all input wavelength bins, n, that evaluate to the same Q using the formula for Q at the top of this page. In equations this relationship between the input bins and the output bins is represented by n \supset I and an example of a set of two bins is shown diagrammatically below. -[[File:Wav_Q_bins.png|Each Q bin contains the sum of many, one, or no wavelength bins|centre]] - -In the equation the number of counts in the input spectrum number is denoted by S(n), N(n) is the wavelength dependent correction and \Omega is the [[SolidAngle|solid angle]] of the detector - -:P_I(Q) = \frac{ \sum_{n \supset I} S(n)}{\Omega\sum_{n \supset I}N(n)} - -The wavelength dependent correction is supplied to the algorithm through the WavelengthAdj property and this workspace must have the same wavelength binning as the input workspace and should be equal to the following: - -:N(n) = M(n)\eta(n)T(n) - -where M, \eta and T are the monitor counts, detector efficiency and transmission fraction respectively. - -Normally there will be many spectra each from a different pixel with a row number i and column number j. Because the value of \theta varies between pixels corresponding input bins (n) from different input spectra can contribute to different output bins (I) i.e. n \supset I will be different for different pixels. For multiple spectra the sum for each output bin will be over the set of input bins in each pixel that have the correct Q, that is \{i, j, n\} \supset \{I\} while \Omega_{i j} is detector dependent: - -:P_I(Q) = \frac{\sum_{\{i, j, n\} \supset \{I\}} S(i,j,n)}{\sum_{\{i, j, n\} \supset \{I\}}M(n)\eta(n)T(n)\Omega_{i j}F_{i j}} - -where F is the detector dependent (e.g. flood) scaling specified by the PixelAdj property, and where a \lambda bin n spans more than one Q bin I, it is split assuming a uniform distribution of the counts in \lambda. The normalization takes any [[MaskBins|bin masking]] into account. - -Although the units on the y-axis of the output workspace space are quoted in 1/cm note that conversion to a cross section requires scaling by an [[instrument]] dependent absolute units constant. - -===Resolution and Cutoffs=== -There are two sources of uncertainty in the intensity: the statistical (counting) error and the finite size of the bins, i.e. both time bins and the spatial extent of the detectors (pixels). The first error is reducible by increasing the length of the experiment or bin sizes while the second reduces with smaller bin sizes. The first is represented by the errors on the output workspace but the second is not included in the error calculation although it increases uncertainties and degrades the effective resolution of the data none the less. This algorithm allows the resolution to be improved by removing the bins with the worst resolution. - -Normally the bins that give the worst resolution are those near the beam center and with short wavelengths. When the optional properties RadiusCut and WaveCut are set bins from this region of the input workspace are removed from the intensity calculation (both from the numerator and denominator). For a pixel at distance R from the beam center the wavelength cutoff, W_{low}, is defined by the input properties RadiusCut and WaveCut as: - -:W_{low} = \frac{WaveCut (RadiusCut-R)}{RadiusCut} - -The bin that contains the wavelength W_{low} and all lower indices are excluded from the summations for that detector pixel. - -From the equation it is possible to see that for pixels in R > RadiusCut all (positive) wavelengths are included. Also substituting WaveCut = W_{low} we have that R = 0 and hence all detectors contribute at wavelengths above WaveCut. - -''Practically, it is more likely to be necessary to implement RadiusCut and WaveCut in situations where the scattering near to the beamstop is weak and 'contaminated' by short wavelength scatter. This might arise, for example, when running at long sample-detector distances, or at short sample-detector distances with large diameter beams, or where the sample generates Bragg peaks at low-Q. The best recourse is to check the wavelength overlap. If it is not too bad it may be possible to improve the data presentation simply by altering Q{min} and the binning scheme.'' - -'''References''' - -[http://scripts.iucr.org/cgi-bin/paper?gk0158 R.P. Hjelm Jr. ''J. Appl. Cryst.'' (1988), 21, 618-628]. - -[http://scripts.iucr.org/cgi-bin/paper?gk0573 P.A. Seeger & R.P. Hjelm Jr. ''J. Appl. Cryst.'' (1991), 24, 467-478]. - -===Variations on applying the normalization=== -It is possible to divide the input workspace by the WavelenghAdj and PixelAdj workspaces prior to calling this algorithm. The results will be same as if these workspaces were passed to Q1D instead when there are high numbers of particle counts. However, in this scheme the probabilities tend to converge on the true high count probabablities more slowly with increasing number of counts and so the result is less accuate. - -Depending on the input and output bins there could be a significant difference in CPU time required by these two methods. - -===References=== -Calculation of Q is from Seeger, P. A. and Hjelm, R. P. Jr, "Small-Angle Neutron Scattering at Pulsed Spallation Sources" (1991) J. Appl '''24''' 467-478 - -==Previous Versions== - -===Version 1=== -Before July 2011 the intensity was calculated with an equation like the following: -:P_I(Q) = \frac{ \sum_{\{i, j, n\} \supset \{I\}}G(i,j,n) }{ \sum_{\{i, j, n\} \supset \{I\}} \Omega_{i j} } -where G is the input workspace normally related to the raw counts workspace as: -:G(i,j,n) = S(i,j,n)/(M(n)\eta(n)T(n)F_{i j}) -That is the normalization was performed before the Q calculation which gives the same probilities at high numbers of particles counts but weighted noisy, low count data too highly, giving more noise in P_I(Q). - -The error was calculation did not include the errors due the normalization or any corrections. - -==== Properties ==== - -{| border="1" cellpadding="5" cellspacing="0" -!Order -!Name -!Direction -!Type -!Default -!Description -|- -|1 -|InputWorkspace -|Input -|MatrixWorkspace -|Mandatory -|The (partly) corrected data in units of wavelength. -|- -|2 -|InputForErrors -|Input -|MatrixWorkspace -|Mandatory -|The workspace containing the counts to use for the error calculation. Must also be in units of wavelength and have matching bins to the InputWorkspace. -|- -|3 -|OutputWorkspace -|Output -|MatrixWorkspace -|Mandatory -|The workspace name under which to store the result histogram. -|- -|4 -|OutputBinning -|Input -|String -|Mandatory -|The bin parameters to use for the final result (in the format used by the [[Rebin]] algorithm). -|- -|5 -|AccountForGravity -|Input -|Boolean -|False -|Whether to correct for the effects of gravity. -|} - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -646,4 +522,3 @@ void Q1D2::normalize(const MantidVec & normSum, const MantidVec & normError2, Ma } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/Q1DWeighted.cpp b/Code/Mantid/Framework/Algorithms/src/Q1DWeighted.cpp index 17da18887c34..64253c7d6e32 100644 --- a/Code/Mantid/Framework/Algorithms/src/Q1DWeighted.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Q1DWeighted.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -Performs azimuthal averaging for a 2D SANS data set by going through each detector pixel, determining its Q-value, and adding its amplitude I to the appropriate Q bin. For greater precision, each detector pixel can be sub-divided in sub-pixels by setting the ''NPixelDivision'' parameters. Each pixel has a weight of 1 by default, but the weight of each pixel can be set to 1/\Delta I^2 by setting the ''ErrorWeighting'' parameter to True. - - -See the [http://www.mantidproject.org/Rebin Rebin] documentation for details about choosing the ''OutputBinning'' parameter. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for calculation details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Qxy.cpp b/Code/Mantid/Framework/Algorithms/src/Qxy.cpp index a9aeb597aaf8..769d8295e514 100644 --- a/Code/Mantid/Framework/Algorithms/src/Qxy.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Qxy.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -This algorithm rebins a 2D workspace in units of wavelength into 2D Q. The reduction it performs is the same as that executed by the [[Q1D]] algorithm, expect performed in 2D instead of 1D. Hence, for further documentation on how this algorithm works please see [[Q1D]]. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/RadiusSum.cpp b/Code/Mantid/Framework/Algorithms/src/RadiusSum.cpp index 7bcdda25573a..57dc00ac4bed 100644 --- a/Code/Mantid/Framework/Algorithms/src/RadiusSum.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RadiusSum.cpp @@ -1,27 +1,3 @@ -/*WIKI* -RadiusSum sums the counts in rings against radius. - -Below, there is an example of the execution of the RadiusSum to a Workspace2D where the position of the pixels are not associated to detector positions, but it is derived from the Axes. - -[[File:ExecuteRadiusSum.png | 800px]] - -The image below shows a visual interpretation for the inputs of the algorithm - -[[File:RadiusSumInputs.png | 300px]] - - -The Algorithm create '''NumBins''' rings around the '''Centre''' point each one with width = BinSize for BinSize=\frac{MaxRadius-MinRadius}{NumBins}. - -The algorithm applies a rudimentary calculation to define the bin for each that each pixel or detector in the [[Workspace2D]], but taking its center point. If the center point belongs to one bin, it is considered that the whole pixel belongs to the bin. The picture below, shows what does this means. An ideal solution for RadiusSum is the left image, while the right image is what is current implemented. - -[[File:RadiusSumSolutions.png | 300px]] - -Although the images were applied to an image [[Workspace2D]], the image below shows that it is possible to apply this algorithm to Workspaces attached to instruments. - -[[File:RadiusSumInstrument.png | 800 px]] -*WIKI*/ - - #include "MantidAlgorithms/RadiusSum.h" #include "MantidKernel/VisibleWhenProperty.h" #include "MantidKernel/ArrayLengthValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/RayTracerTester.cpp b/Code/Mantid/Framework/Algorithms/src/RayTracerTester.cpp index bfb704a2c619..b10e56fb642c 100644 --- a/Code/Mantid/Framework/Algorithms/src/RayTracerTester.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RayTracerTester.cpp @@ -1,11 +1,3 @@ -/*WIKI* - - -Algorithm to test ray tracer by spraying evenly spaced rays around. Only for debugging / testing. - - - -*WIKI*/ #include "MantidAlgorithms/RayTracerTester.h" #include "MantidAPI/FileProperty.h" #include "MantidDataObjects/Workspace2D.h" @@ -109,4 +101,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/ReadGroupsFromFile.cpp b/Code/Mantid/Framework/Algorithms/src/ReadGroupsFromFile.cpp index 2efe210955aa..b045f98e20cc 100644 --- a/Code/Mantid/Framework/Algorithms/src/ReadGroupsFromFile.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ReadGroupsFromFile.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -[[Image:ReadFromFile-Grouping.png|thumb|Instrument view of grouping using ReadFromFile with ShowUnselected=True]] -All of the detectors in each group are given the a value equal to that of the group number. Unselected detectors are given a value of 0 if ShowUnselected is true. - -The instrumentView is the best way to visualize the grouping using the "show Instrument" context menu option on the output workspace. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/RealFFT.cpp b/Code/Mantid/Framework/Algorithms/src/RealFFT.cpp index 0ae432ca5e5f..39ec70176ffd 100644 --- a/Code/Mantid/Framework/Algorithms/src/RealFFT.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RealFFT.cpp @@ -1,12 +1,3 @@ -/*WIKI* - - -This is an algorithm for Fourier transfom of real data. It uses the GSL routines gsl_fft_real_transform and gsl_fft_halfcomplex_inverse. The result of a forward transform is a two-spectra workspace with the real and imaginary parts of the transform in position 0 and 1 correspondingly. Only positive frequencies are given and as a result the output spectra are twice as short as the input one. - -An input workspace for backward transform must have the form of the output workspace of the forward algorithm, i.e. have two spectra with the real part in the first spectrum and the imaginary part in the second one. The output workspace contains a single spectrum with the real inverse transform. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Rebin.cpp b/Code/Mantid/Framework/Algorithms/src/Rebin.cpp index 4ce9ac175fa2..fc7a94340404 100644 --- a/Code/Mantid/Framework/Algorithms/src/Rebin.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Rebin.cpp @@ -1,46 +1,3 @@ -/*WIKI* - -The algorithm rebins data with new bin boundaries. The 'params' property defines new boundaries in intervals x_i-x_{i+1}\,. Positive \Delta x_i\, make constant width bins, whilst negative ones create logarithmic binning using the formula x(j+1)=x(j)(1+|\Delta x_i|)\, - -This algorithms is useful both in data reduction, but also in remapping [[Ragged Workspace|ragged workspaces]] to a regular set of bin boundaries. - -Unless the FullBinsOnly option is enabled, the bin immediately before the specified boundaries x_2, x_3, ... x_i is likely to have a different width from its neighbours because there can be no gaps between bins. Rebin ensures that any of these space filling bins cannot be less than 25% or more than 125% of the width that was specified. - -=== Example Rebin param strings === -;-0.0001 -:From min(TOF) to max(TOF) among all events in Logarithmic bins of 0.0001 -;0,100,20000 -:From 0 rebin in constant size bins of 100 up to 20,000 -;2,-0.035,10 -:From 10 rebin in Logarithmic bins of 0.035 up to 10 -;0,100,10000,200,20000 -:From 0 rebin in steps of 100 to 10,000 then steps of 200 to 20,000 - -=== For EventWorkspaces === - -If the input is an [[EventWorkspace]] and the "Preserve Events" property is True, the rebinning is performed in place, and only the X axes of the workspace are set. The actual Y histogram data will only be requested as needed, for example, when plotting or displaying the data. - -If "Preserve Events" is false., then the output workspace will be created as a [[Workspace2D]], with fixed histogram bins, and all Y data will be computed immediately. All event-specific data is lost at that point. - -=== For Data-Point Workspaces === - -If the input workspace contains data points, rather than histograms, then Rebin will automatically use the [[ConvertToHistogram]] and [[ConvertToPointData]] algorithms before and after the rebinning has taken place. - -=== FullBinsOnly option === - -If FullBinsOnly option is enabled, each range will only contain bins of the size equal to the step specified. In other words, the will be no space filling bins which are bigger or smaller than the other ones. - -This, however, means that specified bin boundaries might get amended in the process of binning. For example, if rebin ''Param'' string is specified as "0, 2, 4.5, 3, 11" and FullBinsOnly is enabled, the following will happen: -* From 0 rebin in bins of size 2 '''up to 4'''. 4.5 is ignored, because otherwise we would need to create a filling bin of size 0.5. -* '''From 4''' rebin in bins of size 3 '''up to 10'''. -Hence the actual ''Param'' string used is "0, 2, 4, 3, 10". - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - outputW = Rebin("inputW","x1,dx1,x2") - -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/Rebin2D.cpp b/Code/Mantid/Framework/Algorithms/src/Rebin2D.cpp index 1d7d0423a275..ede659574d68 100644 --- a/Code/Mantid/Framework/Algorithms/src/Rebin2D.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Rebin2D.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -The bin parameters are used to form an output grid. A positive \Delta x_i\, makes constant width bins, whilst negative ones create logarithmic binning using the formula x(j+1)=x(j)(1+|\Delta x_i|)\,. -The overlap of the polygons formed from the old and new grids is tested to compute the required signal weight for the each of the new bins on the workspace. The errors are summed in quadrature. - -==Requirements== -The algorithms currently requires the second axis on the workspace to be a numerical axis so [[ConvertSpectrumAxis]] may need to run first. - -*WIKI*/ //------------------------------------------------------------------------------ // Includes //------------------------------------------------------------------------------ @@ -420,4 +411,3 @@ namespace Mantid } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/RebinByPulseTimes.cpp b/Code/Mantid/Framework/Algorithms/src/RebinByPulseTimes.cpp index a97b941e1d70..3720ed4230ac 100644 --- a/Code/Mantid/Framework/Algorithms/src/RebinByPulseTimes.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RebinByPulseTimes.cpp @@ -1,22 +1,3 @@ -/*WIKI* -Rebins an EventWorkspace according to the pulse times of each event rather than the time of flight [[Rebin]]. The Params inputs may be expressed in an identical manner to the [[Rebin]] algorithm. -Users may either provide a single value, which is interpreted as the ''step'' (in seconds), or three comma separated values ''start'', ''step'', ''end'', where all units are in seconds, and start and end are relative to the start of the run. - -The x-axis is expressed in relative time to the start of the run in seconds. - -This algorithm may be used to diagnose problems with the electronics or data collection. Typically, detectors should see a uniform distribution of the events -generated between the start and end of the run. This algorithm allows anomalies to be detected. - -== Example of Use == - -This diagnostic algorithm is particularly useful when coupled with the Instrument View. In the example below is a real-world usage example where we were able to highlight issues with data collection on the ISIS WISH instrument. Some blocks of tubes, where tubes are arranged vertically, are missing neutrons within large block of pulse time as a result of data-buffering. After running RebinByPulseTime, we were able to find both, which banks were affected, as well as the missing pulse times for each bank. The horizontal slider in the instrument view allows us to easily integrate over a section of pulse time and see the results as a colour map. - - -[[File:RebinByPulseTime.png]] - - -*WIKI*/ - #include "MantidAlgorithms/RebinByPulseTimes.h" #include "MantidDataObjects/EventWorkspace.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/RebinToWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/RebinToWorkspace.cpp index c0d575d491d8..22ad20f7e1e7 100644 --- a/Code/Mantid/Framework/Algorithms/src/RebinToWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RebinToWorkspace.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Takes an input workspace and alters the binning so that all it's spectra match that of the '''first spectrum''' of the second workspace. This algorithm simply builds a parameter list that is passed to the [[Rebin]] algorithm, which actually does the work. - - -*WIKI*/ //-------------------------------- // Includes //------------------------------ diff --git a/Code/Mantid/Framework/Algorithms/src/Rebunch.cpp b/Code/Mantid/Framework/Algorithms/src/Rebunch.cpp index 731e1244d389..9ba74ac9c5e5 100644 --- a/Code/Mantid/Framework/Algorithms/src/Rebunch.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Rebunch.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -The algorithm rebins data by adding together ''n_bunch'' successive bins. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - outputW = Rebunch("inputW, "3") -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -300,4 +291,3 @@ namespace Mantid } // namespace Algorithm } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/RecordPythonScript.cpp b/Code/Mantid/Framework/Algorithms/src/RecordPythonScript.cpp index 522dc9b27ff6..a8c168957215 100644 --- a/Code/Mantid/Framework/Algorithms/src/RecordPythonScript.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RecordPythonScript.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ #include "MantidAlgorithms/RecordPythonScript.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ReflectometryReductionOne.cpp b/Code/Mantid/Framework/Algorithms/src/ReflectometryReductionOne.cpp index 869fb37b30be..56fecd6c8b53 100644 --- a/Code/Mantid/Framework/Algorithms/src/ReflectometryReductionOne.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ReflectometryReductionOne.cpp @@ -1,29 +1,3 @@ -/*WIKI* -Reduces a single TOF reflectometry run into a mod Q vs I/I0 workspace. Performs transmission corrections. Handles both point detector and multidetector cases. -The algorithm can correct detector locations based on an input theta value. - -Historically the work performed by this algorithm was known as the Quick script. - -=== Analysis Modes === - -The default analysis mode is ''PointDetectorAnalysis''. Only this mode supports Transmission corrections (see below). For PointAnalysisMode -the analysis can be roughly reduced to IvsLam = DetectorWS / sum(I0) / TransmissionWS / sum(I0). The normalization by tranmission run(s) is optional. -Input workspaces are converted to ''Wavelength'' first via [[ConvertUnits]]. - -IvsQ is calculated via [[ConvertUnits]] into units of ''MomentumTransfer''. -Corrections may be applied prior to the transformation to ensure that the detectors are in the correct location according to the input Theta value. -Corrections are only enabled when a Theta input value has been provided. - -=== Transmission Runs === -Transmission correction is a normalization step, which may be applied to ''PointDetectorAnalysis'' reduction. - -Transmission runs are expected to be in TOF. The spectra numbers in the Transmission run workspaces must be the same as those in the Input Run workspace. -If two Transmission runs are provided then the Stitching parameters associated with the transmission runs will also be required. -If a single Transmission run is provided, then no stitching -parameters will be needed. - - *WIKI*/ - #include "MantidAlgorithms/ReflectometryReductionOne.h" #include "MantidGeometry/Instrument/ReferenceFrame.h" #include "MantidAPI/MatrixWorkspace.h" diff --git a/Code/Mantid/Framework/Algorithms/src/Regroup.cpp b/Code/Mantid/Framework/Algorithms/src/Regroup.cpp index 8aa56fcccdd8..47fabe66d6c4 100644 --- a/Code/Mantid/Framework/Algorithms/src/Regroup.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Regroup.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -Regroups data with new bin boundaries to ensure that bins have minimum width determined by the parameter \Delta x_i\,, but ensuring the bin boundaries are always coincident with original bin boundaries. The 'params' property defines new boundaries in intervals x_i-x_{i+1}\,. Positive \Delta x_i\, define constant minimum bin width, whilst negative ones create logarithmic binning x(j+1)=x(j)(1+|\Delta x_i|)\, - -The difference between Rebin and Regroup is that in the former the data in the original bins may be divided by the new bin boundaries. In the latter case, new bins are created only by combining whole bins. This is true also for the ends of the regrouped array: if the bin boundaries are 990,1010,1030,1050,...,1210, then "params" = "1000,25,1200" yields a workspace with bin boundaries 1010,1050,1090,1130,1170. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - outputW = Regroup("inputW","x1,dx1,x2") - -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/RemoveBins.cpp b/Code/Mantid/Framework/Algorithms/src/RemoveBins.cpp index 3bd03e34c0e9..4e62182cc035 100644 --- a/Code/Mantid/Framework/Algorithms/src/RemoveBins.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RemoveBins.cpp @@ -1,37 +1,3 @@ -/*WIKI* - - -This algorithm removes bins from a workspace. A minimum and maximum X value to be removed needs to be provided. -This can be in a different unit to the workspace, in which case it is transformed internally. - -The treatment of the removed bins is slightly different, depending on where in the spectrum the bins to be removed lie: - -==== Bins at either end of spectrum ==== - -If the workspaces has common X binning for all spectra, then the [[CropWorkspace]] algorithm will be called as a child algorithm. -This will result in the affected bins (which includes the bin in which the boundary - XMin or XMax - lies) being removed completely, -leading to the output workspace having fewer bins than the input one. -In the case where the X binning varies from spectrum to spectrum, the bin values will be set to zero regardless of the setting of the Interpolation property. - -==== Bins in the middle of a spectrum ==== - -The Interpolation property is applicable to this situation. -If it is set to "Linear" then the bins are set to values calculated from the values of the bins on either side of the range. -If set to "None" then bins entirely within the range given are set to zero whilst the bins in which the boundary fall have their values scaled -in proportion to the percentage of the bin's width which falls outside XMin or XMax as appropriate. - -==== Restrictions on the input workspace ==== - -* The input workspace must have a unit set -* The input workspace must contain histogram data - -==Related Algorithms== -===MaskBins=== -[[MaskBins]] will set the data in the desired bins to 0 and importantly also marks those bins as masked, -so that further algorithms should not include this data in their grouping calculations. -This is particularly used for Diffraction Focussing. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/RemoveExpDecay.cpp b/Code/Mantid/Framework/Algorithms/src/RemoveExpDecay.cpp index 17538acd69e5..fed9f4e43d06 100644 --- a/Code/Mantid/Framework/Algorithms/src/RemoveExpDecay.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RemoveExpDecay.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - - -This algorithm removes the exponential time decay from a specified muon spectra. By default, all the spectra in a workspace will be corrected. - -The formula for removing the exponential decay is given by: - -: NewData = (OldData\times{e^\frac{t}{\tau}})/N_0 - 1.0 - -where Ï„ is the muon lifetime (2.197019e-6 seconds). N_0 is a fitted normalisation constant. - - - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -287,5 +270,3 @@ double MuonRemoveExpDecay::calNormalisationConst(API::MatrixWorkspace_sptr ws, i } // namespace Algorithm } // namespace Mantid - - diff --git a/Code/Mantid/Framework/Algorithms/src/RemoveLowResTOF.cpp b/Code/Mantid/Framework/Algorithms/src/RemoveLowResTOF.cpp index f191c2535cad..11d124ae2665 100644 --- a/Code/Mantid/Framework/Algorithms/src/RemoveLowResTOF.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RemoveLowResTOF.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ #include "MantidAlgorithms/AlignDetectors.h" #include "MantidAlgorithms/RemoveLowResTOF.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/Framework/Algorithms/src/RemovePromptPulse.cpp b/Code/Mantid/Framework/Algorithms/src/RemovePromptPulse.cpp index db43a3689ed8..8c570691fb45 100644 --- a/Code/Mantid/Framework/Algorithms/src/RemovePromptPulse.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RemovePromptPulse.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ #include "MantidAlgorithms/RemovePromptPulse.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidDataObjects/EventWorkspace.h" @@ -214,4 +210,3 @@ namespace { // anonymous namespace begin } } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/RenameWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/RenameWorkspace.cpp index f2ec76ea0d86..5460a55ca7d5 100644 --- a/Code/Mantid/Framework/Algorithms/src/RenameWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RenameWorkspace.cpp @@ -1,11 +1,3 @@ -/*WIKI* - - -Renames a workspace to a different name in the data service. If the same name is provided for input and output then the algorithm will fail with an error. The Renaming is implemented as a removal of the original workspace from the data service and re-addition under the new name. - -If run on a group workspace, the members of the group will be renamed if their names follow the pattern groupName_1, groupName_2, etc. (they will be renamed to newName_1, newname_2, etc.). Otherwise, only the group itself will be renamed - the members will keep their previous names. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -119,4 +111,3 @@ bool RenameWorkspace::processGroups() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/RenameWorkspaces.cpp b/Code/Mantid/Framework/Algorithms/src/RenameWorkspaces.cpp index 6651306ca58e..b31a455f740b 100644 --- a/Code/Mantid/Framework/Algorithms/src/RenameWorkspaces.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RenameWorkspaces.cpp @@ -1,16 +1,3 @@ -/*WIKI* - -Renames a list of workspaces in the data service. -This renaming is done by either replacing with new names in a list or adding a prefix, suffix or both prefix and suffix. -The Renaming is implemented by calling RenameWorkspace as a child algorithm having defined the output workspace appropriately. - -If run on a group workspace, the members of the group will be renamed in the same manner as done by RemameWorkspace. - -The new names can be either explicitly defined by a comma separated list or by adding a prefix, suffix or both a prefix and suffix. - -'''Warning:''' No new name can be the same as any existing workspace, even if that existing workspace is also being renamed. Duplicate names may cause the loss of a workspace. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -125,4 +112,3 @@ void RenameWorkspaces::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ReplaceSpecialValues.cpp b/Code/Mantid/Framework/Algorithms/src/ReplaceSpecialValues.cpp index fb36e09113ad..f1f9b8a44481 100644 --- a/Code/Mantid/Framework/Algorithms/src/ReplaceSpecialValues.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ReplaceSpecialValues.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -The algorithm searches over all of the values in a workspace and if it finds a value set to NaN (not a number), infinity or larger than the 'big' threshold given then that value and the associated error is replaced by the user provided values. - -If no value is provided for either NaNValue, InfinityValue or BigValueThreshold then the algorithm will exit with an error, as in this case it would not be checking anything. - -Algorithm is now event aware. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/ResampleX.cpp b/Code/Mantid/Framework/Algorithms/src/ResampleX.cpp index b91bc1f1c273..51e64ddeb7eb 100644 --- a/Code/Mantid/Framework/Algorithms/src/ResampleX.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ResampleX.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -This method will resample the x-axis with the number of specified bins. If the XMin and XMax parameters are supplied it will use those as the range, they can be supplied as a comma delimited list or as a single value. - -The LogBinning option calculates constant delta-X/X binning and rebins using that. - -*WIKI*/ - #include #include "MantidAlgorithms/ResampleX.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ResetNegatives.cpp b/Code/Mantid/Framework/Algorithms/src/ResetNegatives.cpp index 1c3ae281f9f7..f77b39369634 100644 --- a/Code/Mantid/Framework/Algorithms/src/ResetNegatives.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ResetNegatives.cpp @@ -1,11 +1,3 @@ -/*WIKI* -This algorithm will search through the input workspace for values less than zero -and make them positive according to the properties. If "AddMinimum" is "true" then -all values will have -1*min for the spectrum added to them if the minimum is less -than zero. Otherwise all values that are less than zero will be set to "ResetValue" -which has a default of 0. -*WIKI*/ - #include "MantidAlgorithms/ResetNegatives.h" #include "MantidDataObjects/EventWorkspace.h" #include "MantidKernel/EnabledWhenProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/ResizeRectangularDetector.cpp b/Code/Mantid/Framework/Algorithms/src/ResizeRectangularDetector.cpp index 64f97387f56c..0b5b4824abc4 100644 --- a/Code/Mantid/Framework/Algorithms/src/ResizeRectangularDetector.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ResizeRectangularDetector.cpp @@ -1,23 +1,3 @@ -/*WIKI* - -This algorithm will resize a [[RectangularDetector]] by applying X and Y scaling factors. -Each pixel's position will be modifed relative to the 0,0 point of the detector by these factors. -Typically, a RectangularDetector is constructed around its center, so this would scale the detector around its center. - -This only works on [[RectangularDetector]]s. Banks formed by e.g. tubes cannot be scaled in this way. - -Internally, this sets the "scalex" and "scaley" parameters on the [[RectangularDetector]]. -Note that the scaling is relative to the original size, and is not cumulative: that is, -if you Resize * 2 and again * 3, your final detector is 3 times larger than the original, not 6 times. - -Note: As of this writing, the algorithm does NOT modify the shape of individual pixels. This means -that algorithms based on solid angle calculations might be off. -Ray-tracing (e.g. peak finding) are unaffected. - -See also [[MoveInstrumentComponent]] and [[RotateInstrumentComponent]] for other ways to move components. - -*WIKI*/ - #include "MantidAlgorithms/ResizeRectangularDetector.h" #include "MantidKernel/System.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/Algorithms/src/RingProfile.cpp b/Code/Mantid/Framework/Algorithms/src/RingProfile.cpp index bbd294833512..b6cfaec7f1b8 100644 --- a/Code/Mantid/Framework/Algorithms/src/RingProfile.cpp +++ b/Code/Mantid/Framework/Algorithms/src/RingProfile.cpp @@ -1,40 +1,3 @@ -/*WIKI* -RingProfile sums the counts against a ring. - -Below, there is an example of the execution of the RingProfile to a [[Workspace2D]] where the position of the pixels are not associated -to detector positions, but it is derived from the [[Interacting_with_Matrix_Workspaces#Axes | Axes]]. - -[[File:ExecuteRingProfile.png | 800px]] - -The image below shows a visual interpretation for the inputs of the algorithm - -[[File:RingProfileInputsView.png]] - -The algorithm goes through each pixel and find its distance from the center. If it relies inside the defined ring, it checks the angle -between the pixel position and the center and uses this information to define the bin where to put the count for that pixel. - -The RingProfile is also defined for Workspace2D which has the positions based on the detectors, as you can see in the picture below. - -[[File:RingProfileInstrument.png | 800px ]] - -In this case, the inputs of the algorithm is like the image below - -[[File:Ringprofileinstrument.png]] - -The algorithm does to each spectrum, get the associated detector from which it get the positions. From the positions it work out if it belongs or not to the ring and in which bin it must be placed. It finally accumulate all the spectrum values inside the target bin. - -It is possible to setup the ''StartAngle'' from where to starting the Ring as well as the Sense, if in clockwise direction or anti-clockwise direction. But, -the resulting workspace will always place the bins in a relative angle position from the start. Which means that for anti-clockwise sense, the real 3D angle -is: - -RealAngle = StartAngle + Angle - -While for clockwise sense, the real 3D angle is: - -RealAngle = StartAngle - Angle - -*WIKI*/ - #include "MantidAlgorithms/RingProfile.h" #include "MantidKernel/ArrayProperty.h" #include "MantidKernel/ArrayBoundedValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/SANSDirectBeamScaling.cpp b/Code/Mantid/Framework/Algorithms/src/SANSDirectBeamScaling.cpp index 9c102419118d..88c4ce546574 100644 --- a/Code/Mantid/Framework/Algorithms/src/SANSDirectBeamScaling.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SANSDirectBeamScaling.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -164,4 +160,3 @@ void SANSDirectBeamScaling::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/SassenaFFT.cpp b/Code/Mantid/Framework/Algorithms/src/SassenaFFT.cpp index f97087a3b189..24f1aa382daa 100644 --- a/Code/Mantid/Framework/Algorithms/src/SassenaFFT.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SassenaFFT.cpp @@ -1,27 +1,3 @@ -/*WIKI* - -The Sassena application [http://sassena.org] generates intermediate scattering factors from molecular dynamics trajectories. This algorithm reads Sassena output and stores all data in workspaces of type [[Workspace2D]], grouped under a single [[WorkspaceGroup]]. It is implied that the time unit is one '''picosecond'''. - -Sassena ouput files are in HDF5 format [http://www.hdfgroup.org/HDF5], and can be made up of the following datasets: ''qvectors'', ''fq'', ''fq0'', ''fq2'', and ''fqt'' - -The group workspace should contain workspaces '''_fqt.Re''' and '''_fqt.Im''' containing the real and imaginary parts of the intermediate structure factor, respectively. This algorithm will take both and perform [[FFT]], storing the real part of the transform in workspace '''_fqw''' and placing this workspace under the input group workspace. Assuming the time unit to be one picosecond, the resulting energies will be in units of one '''micro-eV'''. - -The Schofield correction (P. Schofield, ''Phys. Rev. Letters'' '''4'''(5), 239 (1960)) is optionally applied to the resulting dynamic structure factor to reinstate the detailed balance condition -S(Q,\omega)=e^{\beta \hbar \omega}S(-Q,-\omega). - -== Details == - -=== Parameter FFTonlyRealPart === - -Setting parameter FFTonlyRealPart to true will produce a transform on only the real part of I(Q,t). This is convenient if we know that I(Q,t) should be real but a residual imaginary part was left in a Sassena calculation due to finite orientational average in Q-space. - - -Below are plots after application of SassenaFFT to I(Q,t) = e^{-t^2/(2\sigma^2)} + i\cdot t \cdot e^{-t^2/(2\sigma^2)} with \sigma=1ps. Real an imaginary parts are shown in panels (a) and (b). Note that I(Q,t)*=I(Q,-t). If only Re[I(Q,t)] is transformed, the result is another Gaussian: \sqrt{2\pi}\cdot e^{-E^2/(2\sigma'^2)} with \sigma'=4,136/(2\pi \sigma) in units of \mueV (panel (c)). If I(Q,t) is transformed, the result is a modulated Gaussian: (1+\sigma' E)\sqrt{2\pi}\cdot e^{-E^2/(2\sigma'^2)}(panel (d)). - -[[Image:SassenaFFTexample.jpg|center|x800px|alt=Application of SassenaFFT to a I(Q,t)]] - - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/SaveGSASInstrumentFile.cpp b/Code/Mantid/Framework/Algorithms/src/SaveGSASInstrumentFile.cpp index bea91a599f81..ea78a38b8abc 100644 --- a/Code/Mantid/Framework/Algorithms/src/SaveGSASInstrumentFile.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SaveGSASInstrumentFile.cpp @@ -1,40 +1,3 @@ -/*WIKI* - -Convert Fullprof's instrument resolution file (.irf) to GSAS's instrument file (.iparm/.prm). - -==== Supported peak profiles ==== -* Time-of-flight back-to-back exponential convoluted with pseudo-voigt (planned) -** Fullprof: Profile 9; -** GSAS: Type 3 TOF profile. - -* Thermal neutron time-of-flight back-to-back exponential convoluted with pseudo-voigt (implemented) -** Fullprof: Profile 10; -** GSAS: tabulated peak profile. - -==== Supported input Fullprof file ==== -There can be several types of Fullprof files as the input file -* resolution file .irf (implemented) -* configuration file .pcr (planned) - -==== Set up 2\theta ==== -There are several places in this algorithm that can set the value of 2\theta. From the highest priority, here is the list how 2\theta is set up. - 1. Algorithms' input property ''2Theta''; - 2. Either input TableWorkspace or input Fullprof resolution (.irf) file; - 3. Hard coded default 2\theta of a certain instrument. - -==== Set up L_1 ==== -There are 2 places in this algorithm that can set the value of L_1. From the highest priority, here is the list how 2\theta is set up. - 1. Algorithms' input property ''L1''; - 2. Hard coded default 2\theta of a certain instrument. - -==== Calculation of L2 ==== -* If 2Theta (2\theta) is given, L2 will be calculated from given 2Theta and L1 by DIFC = 252.816\cdot2sin(\theta)\sqrt{L1+L2}. Notice that 2\theta given in input .irf file may have subtle difference to "2Theta", which is input by user in order to calculate L2. - -* If "2Theta" (2\theta) is not given, L2 will be read from user input. - - -*WIKI*/ - #include "MantidAlgorithms/SaveGSASInstrumentFile.h" #include "MantidAPI/FrameworkManager.h" #include "MantidAPI/FileProperty.h" @@ -1191,5 +1154,3 @@ ChopperConfiguration::ChopperConfiguration(const int freq, const std::string& ba } // namespace Algorithms } // namespace Mantid - - diff --git a/Code/Mantid/Framework/Algorithms/src/Scale.cpp b/Code/Mantid/Framework/Algorithms/src/Scale.cpp index 94a4509f5ce6..26d7cb1e7572 100644 --- a/Code/Mantid/Framework/Algorithms/src/Scale.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Scale.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Uses the binary operation algorithms [[Multiply]] or [[Plus]] to scale the input workspace by the amount requested. This algorithm is provided as a simple, but less powerful, alternative to the python [[Workspace_Algebra|workspace algebra]] functionality. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -58,4 +52,3 @@ void Scale::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ScaleX.cpp b/Code/Mantid/Framework/Algorithms/src/ScaleX.cpp index d53241803580..e95a0f3d6709 100644 --- a/Code/Mantid/Framework/Algorithms/src/ScaleX.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ScaleX.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Scales the X axis and everty unique X-coordinate of a histogram or every event of the input workspace by the amount requested. -* The amount can be specified either as: -* an absolute numerical value via the "Factor" argument or -* an detector parameter name whose value is retrieved from the instrument. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -287,7 +279,3 @@ double ScaleX::getScaleFactor(const API::MatrixWorkspace_const_sptr & inputWS, c } // namespace Algorithm } // namespace Mantid - - - - diff --git a/Code/Mantid/Framework/Algorithms/src/SetInstrumentParameter.cpp b/Code/Mantid/Framework/Algorithms/src/SetInstrumentParameter.cpp index 67a7641407be..9b6af27c8b1b 100644 --- a/Code/Mantid/Framework/Algorithms/src/SetInstrumentParameter.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SetInstrumentParameter.cpp @@ -1,14 +1,3 @@ -/*WIKI* -This algorithm adds or replaces an parameter attached to an instrument component, or the entire instrument. -Instrument parameters are specific to a workspace, they will get carried on to output workspaces created from an input workspace to an algorithm, -but will not appear one unrelated workspaces that happen to have been recorded on the same instrument. - -The workspace must have a instrument already defined, and will be altered in place. -If the name of the instrument component to attach the parameter is not specified it will be attached to the whole instrument. - -At present this algorithm only supports simple instrument parameters, NOT fitting parameters. -*WIKI*/ - #include "MantidAlgorithms/SetInstrumentParameter.h" #include "MantidKernel/ArrayProperty.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/SetUncertainties.cpp b/Code/Mantid/Framework/Algorithms/src/SetUncertainties.cpp index be70e2a4be3e..7e20700bd317 100644 --- a/Code/Mantid/Framework/Algorithms/src/SetUncertainties.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SetUncertainties.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -96,4 +92,3 @@ void SetUncertainties::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/ShiftLogTime.cpp b/Code/Mantid/Framework/Algorithms/src/ShiftLogTime.cpp index 017fcfe9ade2..c97dd6bbd01c 100644 --- a/Code/Mantid/Framework/Algorithms/src/ShiftLogTime.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ShiftLogTime.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ #include "MantidAlgorithms/ShiftLogTime.h" #include "MantidKernel/System.h" #include "MantidKernel/TimeSeriesProperty.h" @@ -143,4 +139,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/SignalOverError.cpp b/Code/Mantid/Framework/Algorithms/src/SignalOverError.cpp index 79624c4bb03c..4ca237c874fb 100644 --- a/Code/Mantid/Framework/Algorithms/src/SignalOverError.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SignalOverError.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Take a [[MatrixWorkspace]] as input, and replaces the Y values by Y/E (signal divided by error) - -*WIKI*/ - #include "MantidAlgorithms/SignalOverError.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/Algorithms/src/SmoothData.cpp b/Code/Mantid/Framework/Algorithms/src/SmoothData.cpp index b8175dc94d35..248aa98b8430 100644 --- a/Code/Mantid/Framework/Algorithms/src/SmoothData.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SmoothData.cpp @@ -1,11 +1,3 @@ -/*WIKI* - - -Smooths out statistical jitter in a workspace's data by making each point the mean average of itself and -one or more points lying symmetrically either side of it. The statistical error on each point will be reduced by sqrt(npts) because more data is now contributing to it. For points at the end of each spectrum, a reduced number of smoothing points will be used. For example, if NPoints is 5 the first value in the spectrum will be smoothed by making it the average of the first 3 values, the next will use the first 4 and then the third and onwards will use the full 5 points in the averaging. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/SmoothNeighbours.cpp b/Code/Mantid/Framework/Algorithms/src/SmoothNeighbours.cpp index d9f1c1ff24ea..b3e456cc6150 100644 --- a/Code/Mantid/Framework/Algorithms/src/SmoothNeighbours.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SmoothNeighbours.cpp @@ -1,98 +1,3 @@ -/*WIKI* - -This algorithm performs a moving-average smoothing of data by summing spectra of nearest neighbours over the face of detectors. -The output workspace has the same number of spectra as the input workspace. -This works on both [[EventWorkspace]]s and [[Workspace2D]]'s. -It has two main modes of operation. - -=== Processing Either Generically or Assuming Rectangular Detectors === - -You may either specify properties for the Rectangular Detector Group, or the Non-uniform Detector Group, but not both. If you provide inputs for the Rectangular Detector group, -then the algorithm execution will assume that this is your desired processing route. - -=== For All Instruments === - -Going through the input workspace pixel-by-pixel, Mantid finds the nearest-neighbours with the given Radius of each -pixel. The spectra are then summed together, and normalizing to unity (see the weighting section below). - -=== For Instruments With Rectangular Detectors === - -The algorithm looks through the [[Instrument]] to find all the [[RectangularDetector]]s defined. -For each pixel in each detector, the AdjX*AdjY neighboring spectra are summed together and saved in the output workspace. - -=== WeightedSum parameter === - -A weighting strategy can be applied to control how the weights are calculated. This defaults to a flat weighting strategy. Weights are summed and scaled so that they add up to 1. - -==== Flat Weighting ==== - -All weights are 1. This is completely position in-senitive. - -==== Linear Weighting ==== - -Weights are calculated according to w = 1 - r/R, where w is the weighting factor, r is the distance from the detector and R is the cut-off radius. - -==== Parabolic Weighting ==== -For rectangular detectors it may be used as follows: The radius must be zero and a AdjX and AdjY parameter must be provided. w = AdjX - abs(x) + AdjY - abs(y) + 1 - -For non-rectangular detectors, the cut-off radius is used in the calculation. w = R - abs(x) + R - abs(y) + 1 - -==== Gaussian Weighting ==== -This weighting is calculated from the Gaussian distribution - -w = e^{-r^2/(2\sigma^2)} - -where r^2 = x^2 + y^2 + z^2 -and \sigma is the number of standard deviations controlling the width of the distribution curve - -Important notes about this algorithm are that: -* Distances are normalised by the radius cut-off to make them dimensionless and scaled to 1 at the boundaries. - -=== For EventWorkspaces === - -Both methods of smoothing will '''significantly''' increase the memory usage of -the workspace. For example, if AdjX=AdjY=1, the algorithm will sum 9 nearest neighbours in most cases. -This increases the memory used by a factor of 9. - -=== For Workspace2D's === - -You can use PreserveEvents = false to avoid the memory issues with an EventWorkspace input. -Please note that the algorithm '''does not check''' that the bin X boundaries match. - -=== Neighbour Searching === - -File:NNSearchByRadius.jpg|''Fig. 1''. -File:NNSearchIrregularGrid.jpg|''Fig. 2''. -File:NNSearchLimitByRadius.jpg|''Fig. 3'' -File:NNSearchLimitByNNs.jpg|''Fig. 4'' -File:NNSearchXY.jpg|''Fig. 5'' - - -==== Property Values of Examples ==== - -''Fig. 1'' : Requesting NumberOfNeighbours=36, Radius=3. Algorithm looks for 36 nearest neighbours with a cut-off of 3 detector widths.
-''Fig. 2'' : Requesting NumberOfNeighbours=46, Radius=2. Algorithm looks for 46 nearest neighbours with a cut-off of 2 detector widths.
-''Fig. 3'' : Requesting NumberOfNeighbours=56, Radius=3. Algorithm looks for 56 nearest neighbours with a cut-off of 3 detector widths.
-''Fig. 4'' : Requesting NumberOfNeighbours=8, Radius=3. Algorithm looks for 8 nearest neighbours with a cut-off of 3 detector widths.
-''Fig. 5'' : Requesting AdjX=4, AdjY=2, Radius=0. Algorithm fetches neighbours in the specified pattern. - -==== How it Works ==== - -The algorithm will fetch neigbours using the intesection of those inside the radius cut-off and those less than the NumberOfNeighbours specified. ''Fig. 1'' illustrates this process. Searching is relative to the central detector, those constrained by both specified number of neighbours have been highlighted. In this case the radius cut-off and the number of neighbours constrain the same number of detectors. - -Searching via the number of neighbours will not necessarily return the neighbours in a grid with the same number of detectors in each axis. ''Fig. 2'' shows how neighbours might be returned if distances are non-uniform. If RectangularDetectors are available, you may force the searching to occur in rectangular manner (described below). - -The SmoothingNeighbours algorithm will only take those neighbours which are in the intersection between those constrained by the cut-off and those constrained by the specified number of neighbours. If the radius cut-off is the limiting factor, then those neighbours outside will not be considered. This is illustrated in ''Fig. 3'' where the blue detectors will not be considered, but will not with this radius cut-off, while the green ones will. Likewise, in ''Fig. 4'' the effect of reducing the NumberOfNeighbours property can be seen. - -If the radius is set to 0, the instrument is treated as though it has rectangular detectors. AdjX and AdjY can then be used to control the number of neighbours independently in x and y using the AdjX and AdjY properties. ''Fig. 5'' Shows the effect of this type of searching. - -=== Ignore Masks === - -The algorithm will ignore masked detectors if this flag is set. - -*WIKI*/ - - #include "MantidAlgorithms/SmoothNeighbours.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidDataObjects/EventList.h" diff --git a/Code/Mantid/Framework/Algorithms/src/SofQW.cpp b/Code/Mantid/Framework/Algorithms/src/SofQW.cpp index b7d213b5339d..7dcac862d269 100644 --- a/Code/Mantid/Framework/Algorithms/src/SofQW.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SofQW.cpp @@ -1,15 +1,3 @@ -/*WIKI* - - -This algorithm is for use by inelastic instruments and takes as its input a workspace where the data's been reduced to be in units of energy transfer against spectrum number (which can be seen as equivalent to angle, with the angle being taken from the detector(s) to which the spectrum pertains). -For each bin the value of momentum transfer (q) is calculated, and the counts for that bin are assigned to the appropriate q bin. - -The energy binning will not be changed by this algorithm, so the input workspace should already have the desired bins (though this axis can be rebinned afterwards if desired). The EMode and EFixed parameters are required for the calculation of q. - -If the input workspace is a distribution (i.e. counts / meV ) then the output workspace will similarly be divided by the bin width in both directions (i.e. will contain counts / meV / (1/Angstrom) ). - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/SofQW2.cpp b/Code/Mantid/Framework/Algorithms/src/SofQW2.cpp index 7bdf91e8aa34..6ae7b906fd65 100755 --- a/Code/Mantid/Framework/Algorithms/src/SofQW2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SofQW2.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Converts a 2D workspace from units of spectrum number/energy transfer to the intensity as a function of momentum transfer and energy. The rebinning is done as a weighted sum of overlapping polygons. - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -241,4 +237,3 @@ namespace Mantid } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/SofQW3.cpp b/Code/Mantid/Framework/Algorithms/src/SofQW3.cpp index fa6342042ea8..2a9f3511214c 100644 --- a/Code/Mantid/Framework/Algorithms/src/SofQW3.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SofQW3.cpp @@ -1,19 +1,3 @@ -/*WIKI* -Converts a 2D workspace from units of spectrum number, energy transfer to the -intensity as a function of momentum transfer and energy. The rebinning is done -as a weighted sum of overlapping polygons with fractional area tracking. The -result is stored in a new workspace type: '''RebinnedOutput'''. The new workspace -presents the data as the fractional counts divided by the fractional area. -The biggest consequence of this method is that in places where there are no -counts and no acceptance (no fractional areas), '''nan'''s will result. - -The algorithm operates in non-PSD mode by default. This means that all azimuthal -angles and widths are forced to zero. PSD mode will determine the azimuthal -angles and widths from the instrument geometry. This mode is activated by -placing the following named parameter in a Parameter file: ''detector-neighbour-offset''. -The integer value of this parameter should be the number of pixels that separates -two pixels at the same vertical position in adjacent tubes. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -433,4 +417,3 @@ namespace Algorithms } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/SolidAngle.cpp b/Code/Mantid/Framework/Algorithms/src/SolidAngle.cpp index 38a628f235dd..d4ca224daae9 100644 --- a/Code/Mantid/Framework/Algorithms/src/SolidAngle.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SolidAngle.cpp @@ -1,16 +1,3 @@ -/*WIKI* - - -The algorithm calculates solid angles from the sample position of the input workspace for all of the spectra selected. If several detectors have been mapped to the same spectrum then the solid angles of this detectors will be summed to provide the solid angle for the spectrum. -The solid angle of a detector that has been masked or marked as dead is considered to be 0 steradians. - -This algorithms can happily accept [[Ragged Workspace|ragged workspaces]] as an input workspace. The result would be a ragged output workspace whose X axis values match the lowest and highest of each the input spectra. - -Note: The Solid angle calculation assumes that the path between the sample and detector is unobstructed by another other instrument components. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/SortEvents.cpp b/Code/Mantid/Framework/Algorithms/src/SortEvents.cpp index 6ffba16bc675..d8184c3f904e 100644 --- a/Code/Mantid/Framework/Algorithms/src/SortEvents.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SortEvents.cpp @@ -1,15 +1,3 @@ -/*WIKI* - - - - -In an [[EventWorkspace]], event binning is performed on the fly. The algorithm for binning requires a list of events sorted by time of flight, so it will perform a sort (once) on each pixel - however, this is done on request and without using multiple CPUs). To speed up the calculation, the Sort algorithm pre-sorts by Time of Flight, using multiple CPUs. Using this algorithm is completely optional. - - - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/SpatialGrouping.cpp b/Code/Mantid/Framework/Algorithms/src/SpatialGrouping.cpp index 7461e26141e2..c253e1cfc23c 100644 --- a/Code/Mantid/Framework/Algorithms/src/SpatialGrouping.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SpatialGrouping.cpp @@ -1,21 +1,3 @@ -/*WIKI* - - -This algorithm creates an XML Grouping file of the form: - -
- - - - - - -
- -Based on information retrieved from the [[Nearest Neighbours]] class in Mantid Geometry. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/SpecularReflectionCalculateTheta.cpp b/Code/Mantid/Framework/Algorithms/src/SpecularReflectionCalculateTheta.cpp index 009708a3e3d3..b6972db48196 100644 --- a/Code/Mantid/Framework/Algorithms/src/SpecularReflectionCalculateTheta.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SpecularReflectionCalculateTheta.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -Uses the Specular reflection condition ThetaIn == ThetaOut to calculate and return a corrected ThetaIn. - - -2*ThetaOut = tan^{-1}\frac{UpOffset}{BeamOffset} - - -The calculated theta value in degrees is returned by the algorithm. - -Also see [[SpecularReflectionPositionCorrect]] - -*WIKI*/ - #include "MantidAlgorithms/SpecularReflectionCalculateTheta.h" #include "MantidKernel/PropertyWithValue.h" #include "MantidGeometry/IComponent.h" diff --git a/Code/Mantid/Framework/Algorithms/src/SpecularReflectionPositionCorrect.cpp b/Code/Mantid/Framework/Algorithms/src/SpecularReflectionPositionCorrect.cpp index d7d273d4caf1..7824160677e8 100644 --- a/Code/Mantid/Framework/Algorithms/src/SpecularReflectionPositionCorrect.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SpecularReflectionPositionCorrect.cpp @@ -1,19 +1,3 @@ -/*WIKI* - -Uses the specular reflection condition along with a supplied theta value to vertically shift the detectors into a corrected location. - -ThetaIn == ThetaOut - -and - - - 2*ThetaOut = tan^{-1}\frac{UpOffset}{BeamOffset} - - -For LineDetectors and MultiDetectors, the algorithm uses an average of grouped detector locations to determine the detector position. - -*WIKI*/ - #include "MantidAlgorithms/SpecularReflectionPositionCorrect.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidKernel/BoundedValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/SphericalAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/SphericalAbsorption.cpp index 29b6593a9ee6..cd34c0f4708c 100644 --- a/Code/Mantid/Framework/Algorithms/src/SphericalAbsorption.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SphericalAbsorption.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Calculates bin-by-bin correction factors for attenuation due to absorption and scattering in a '''spherical''' sample. Sample data must be divided by these corrections. -Algorithm calls [[AnvredCorrection]]. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/StripPeaks.cpp b/Code/Mantid/Framework/Algorithms/src/StripPeaks.cpp index c42e3bb94f79..115d9e4d06d4 100644 --- a/Code/Mantid/Framework/Algorithms/src/StripPeaks.cpp +++ b/Code/Mantid/Framework/Algorithms/src/StripPeaks.cpp @@ -1,13 +1,3 @@ -/*WIKI* - - -This algorithm is intended to automatically find all the peaks in a dataset and subtract them, leaving just the residual 'background'. - -====ChildAlgorithms used==== -The [[FindPeaks]] algorithm is used to identify the peaks in the data. - - -*WIKI*/ #include "MantidAlgorithms/StripPeaks.h" #include "MantidKernel/ArrayProperty.h" #include "MantidKernel/PhysicalConstants.h" diff --git a/Code/Mantid/Framework/Algorithms/src/StripVanadiumPeaks.cpp b/Code/Mantid/Framework/Algorithms/src/StripVanadiumPeaks.cpp index 8765d406c01f..0cc002c7cb9b 100644 --- a/Code/Mantid/Framework/Algorithms/src/StripVanadiumPeaks.cpp +++ b/Code/Mantid/Framework/Algorithms/src/StripVanadiumPeaks.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -* A list of vanadium peak positions in d-spacing is used for the central peak positions: 0.5044,0.5191,0.5350,0.5526,0.5936,0.6178,0.6453,0.6768,0.7134,0.7566,0.8089,0.8737,0.9571,1.0701,1.2356,1.5133,2.1401 -** You can specify AlternativePeakPositions to use other value (e.g. in other units). - -* The PeakWidthPercent value is used to estimate the width of the peak (as a percentage of the d-spacing value). -* The algorithm performs a simple linear fit of the background exluding the peak. -** It uses two use averaging regions of 1/2 width, centered at +- width/2 from the center, and interpolates the linear background from it. -** The values between the average regions are replaced with the interpolated linear background drawn as a straight line. - -*WIKI*/ - #include "MantidAlgorithms/StripVanadiumPeaks.h" #include "MantidKernel/PhysicalConstants.h" #include "MantidDataObjects/EventWorkspace.h" diff --git a/Code/Mantid/Framework/Algorithms/src/StripVanadiumPeaks2.cpp b/Code/Mantid/Framework/Algorithms/src/StripVanadiumPeaks2.cpp index 88321b6fda4d..27366fa44781 100644 --- a/Code/Mantid/Framework/Algorithms/src/StripVanadiumPeaks2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/StripVanadiumPeaks2.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -* A list of vanadium peak positions in d-spacing is used for the central peak positions: 0.5044,0.5191,0.5350,0.5526,0.5936,0.6178,0.6453,0.6768,0.7134,0.7566,0.8089,0.8737,0.9571,1.0701,1.2356,1.5133,2.1401 - -* StripPeaks is called by providing the list of vanadium peak positions. - -* The vanadium peaks are fit to a function combined from Gaussian and linear/quadratic background. - -*WIKI*/ - #include "MantidAlgorithms/StripVanadiumPeaks2.h" #include "MantidKernel/System.h" #include "MantidKernel/BoundedValidator.h" @@ -139,4 +129,3 @@ DECLARE_ALGORITHM(StripVanadiumPeaks2) } // namespace Mantid } // namespace Algorithms - diff --git a/Code/Mantid/Framework/Algorithms/src/SumEventsByLogValue.cpp b/Code/Mantid/Framework/Algorithms/src/SumEventsByLogValue.cpp index 678da2e38a94..21335f0bf8ec 100644 --- a/Code/Mantid/Framework/Algorithms/src/SumEventsByLogValue.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SumEventsByLogValue.cpp @@ -1,26 +1,3 @@ -/*WIKI* - -This algorithm counts up the events in a workspace against the values of a log within the workspace. It will most commonly be used as a sub-algorithm of the [[RockingCurve]] algorithm. - -The algorithm has two modes: - -==== Table output ==== - -This option can be used for integer-typed logs and will produce a table with a row for each integer value between the minimum and maximum contained in the log, and a further column containing the total events for which the log had each value. -Further columns will be added for: -* Monitors, if any - this requires an event workspace with the same name as the input workspace plus a '_monitors' suffix (this is what [[LoadEventNexus]] will give). -* The total time duration, in seconds, during which the log had each value. -* The integrated proton charge during the period(s) for which the log had each value. -* The time-weighted average value of any other number-series logs which had more than a single value during the run. - -'''Warning:''' This mode is intended for logs with a small range (e.g. scan index, period number, status). Be aware that if it is used for a log with a large range, it will create a table row for every integer value between the minimum and maximum log value. This might take a long time! - -==== Single-spectrum option ==== - -This option can be used for integer or floating point type logs and requires that the OutputBinning property is specified. It will produce a single spectrum workspace where the X values are derived from the OutputBinning property and the Y values are the total counts in each bin of the log value. - - -*WIKI*/ #include "MantidAlgorithms/SumEventsByLogValue.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidKernel/RebinParamsValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/SumNeighbours.cpp b/Code/Mantid/Framework/Algorithms/src/SumNeighbours.cpp index a388385b4a0d..6e4193bedcfd 100644 --- a/Code/Mantid/Framework/Algorithms/src/SumNeighbours.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SumNeighbours.cpp @@ -1,12 +1,3 @@ -/*WIKI* - - - - -The algorithm looks through the [[Instrument]] to find all the [[RectangularDetector]]s defined. For each detector, the SumX*SumY neighboring event lists are summed together and saved in the output workspace as a single spectrum. Therefore, the output workspace will have 1/(SumX*SumY) * the original number of spectra. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/SumRowColumn.cpp b/Code/Mantid/Framework/Algorithms/src/SumRowColumn.cpp index a008d3f777a3..347f50435ad0 100644 --- a/Code/Mantid/Framework/Algorithms/src/SumRowColumn.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SumRowColumn.cpp @@ -1,19 +1,3 @@ -/*WIKI* - - -This algorithm is the equivalent of the COLETTE "DISPLAY H/V" command. -It firsts integrates the input workspace, which must contain all the spectra from -the detector of interest - no more and no less (so 128x128 or 192x192), -between the X values given. Then each row or column is summed between the H/V_Min/Max -values, if given, and the result is a single spectrum of row or column number against -total counts. - -==== ChildAlgorithms used ==== - -The [[Integration]] algorithm is used to sum up each spectrum between XMin & XMax. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/SumSpectra.cpp b/Code/Mantid/Framework/Algorithms/src/SumSpectra.cpp index 174855a851bd..85b2030a53b7 100644 --- a/Code/Mantid/Framework/Algorithms/src/SumSpectra.cpp +++ b/Code/Mantid/Framework/Algorithms/src/SumSpectra.cpp @@ -1,38 +1,3 @@ -/*WIKI* - -Takes a workspace as input and sums all of the spectra within it maintaining the existing bin structure and units. Any masked spectra are ignored. -The result is stored as a new workspace containing a single spectra. - -The algorithm adds to the '''OutputWorkspace''' three additional properties (Log values). The properties (Log) names are: '''"NumAllSpectra"''', -'''"NumMaskSpectra"''' and '''"NumZeroSpectra"''', where: - - NumAllSpectra -- is the number of spectra contributed to the sum - NumMaskSpectra -- the spectra dropped from the summations because they are masked. - If monitors ('''IncludeMonitors'''=false) are not included in the summation, - they are not counted here. - NumZeroSpectra -- number of zero bins in histogram workspace or empty spectra for event workspace. - These spectra are dropped from the summation of histogram workspace - when '''WeightedSum''' property is set to True. - -Assuming '''pWS''' is the output workspace handle, from Python these properties can be accessed by the code: - - nSpectra = pWS.getRun().getLogData("NumAllSpectra").value - nMaskedSpectra = pWS.getRun().getLogData("NumMaskSpectra").value - nZeroSpectra = pWS.getRun().getLogData("NumZeroSpectra").value - -It is also available in stats property obtained by qtiGenie function avrg_spectra - - (avrg,stats) = avrg_spectra(Input_workspace) - stats==[nSpectra,nMaskedSpectra,nZeroSpectra] - - -From C++ they can be reached as strings by the code: - - std::string rez=pWS->run().getLogData("NumAllSpectra")->value(); - std::string rez=pWS->run().getLogData("NumMaskSpectra")->value(); - std::string rez=pWS->run().getLogData("NumZeroSpectra")->value(); - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/TOFSANSResolution.cpp b/Code/Mantid/Framework/Algorithms/src/TOFSANSResolution.cpp index fd84c2ec02be..ce699d557fb5 100755 --- a/Code/Mantid/Framework/Algorithms/src/TOFSANSResolution.cpp +++ b/Code/Mantid/Framework/Algorithms/src/TOFSANSResolution.cpp @@ -1,6 +1,3 @@ -/*WIKI* -Compute the Q resolution for a given I(Q) for a TOF SANS instrument. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -213,4 +210,3 @@ void TOFSANSResolution::exec() } } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/Transpose.cpp b/Code/Mantid/Framework/Algorithms/src/Transpose.cpp index c57444335fde..9e349cc5df6d 100644 --- a/Code/Mantid/Framework/Algorithms/src/Transpose.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Transpose.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -This algorithm transposes a workspace, so that an N1 x N2 workspace becomes N2 x N1. - -The X-vector-values for the new workspace are taken from the axis value of the old workspace, which is generaly the spectra number but can be other values, if say the workspace has gone through ConvertSpectrumAxis. - -The new axis values are taken from the previous X-vector-values for the first specrum in the workspace. For this reason, use with ragged workspaces is undefined. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -160,4 +151,3 @@ namespace Mantid } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/Algorithms/src/UnGroupWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/UnGroupWorkspace.cpp index b7455665de16..868becab8092 100644 --- a/Code/Mantid/Framework/Algorithms/src/UnGroupWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/UnGroupWorkspace.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Takes a [[WorkspaceGroup]] as input and ungroups it into several workspaces. -You can perform this from the MantidPlot GUI by selecting the WorkspaceGroup and clicking "Ungroup". - -*WIKI*/ #include "MantidAlgorithms/UnGroupWorkspace.h" #include "MantidKernel/ListValidator.h" diff --git a/Code/Mantid/Framework/Algorithms/src/UnwrapMonitor.cpp b/Code/Mantid/Framework/Algorithms/src/UnwrapMonitor.cpp index ed253f39f1e5..a2c85646b2d0 100644 --- a/Code/Mantid/Framework/Algorithms/src/UnwrapMonitor.cpp +++ b/Code/Mantid/Framework/Algorithms/src/UnwrapMonitor.cpp @@ -1,46 +1,3 @@ -/*WIKI* - -This algorithm is for use with white-beam instruments with choppers. The chopper cuts the range of wavelengths, so all detectors (including monitors) should be reduced to the same wavelength range. This is done using a "reference" flightpath, L_{ref}, which is (usually, see below) the flightpath of the farthest detectors. - -If T_{min} and T_{max} are the beginning and end of the frame, for each detector D at total flightpath L_d the following times are defined: - -: T_1 = T_{max} - \left ( T_{min} \times \left ( 1 - \frac{L_d}{L_{ref}} \right ) \right ) - -: T_2 = T_{max} \times \left ( \frac{L_d}{L_{ref}} \right ) - -Thus if L_d < L_{ref} then T_1 > T_2 - -Neutron velocities (and hence wavelengths) for the detector D are calculated in the following way: - -* For T_{min} < T < T_2, velocities are calculated in the usual way, i.e. v = \frac{L_d}{T} - -* Data in the range T_2 < T < T_1 are ignored (i.e. they are not used in the wavelength-converted histograms) - -* For T_1 < T < T_{max}, velocities are calculated using the formula v = \frac{L_d}{T - T_{max} + T_{min}} - - -Note that the minimum and maximum velocities for the points that are actually ''used'' are: - -: v_{max} = \frac{L_d}{T - T_{max} + T_{min}} = \frac{L_{ref}}{T_{min}} and v_{min} = \frac{L_d}{T_2} = \frac{L_{ref}}{T_{max}} - -In other words, these velocities are the same for all detectors, so the wavelength range in the transformed histogram will correspondingly be the same and this algorithm rebins the data into common bins in this range. - -Occasionally, it may be that some detectors (typically downstream monitors) may be at a *longer* flightpath than L_{ref}. This depends entirely on the chopper aperture/setting. These detectors are "frame-overlapped" - in other words, there is an ambiguity in the definition of the wavelength for certain points, which should therefore be excluded. These points are at the very beginning and at the very end of the frame for a range Dt (equal on both sides) given by - -:D_t = (T_{max} - T_{min}) \times \left (1 - \frac{L_{ref}}{L_d} \right) - -In other words, points between T_{min} and T_{min} + D_t and between T_{max} - D_t and T_{max} should be excluded. For all other points, velocities and wavelengths are calculated in the normal way. - -Note that since we are dealing with histogrammed data, the cut-off values above will almost certainly not fall exactly on a bin boundary. The approach taken by this algorithm is that if any part of a bin has a value that should be excluded, then the entire bin is excluded. What this means in practice is that the edge bins will possibly have a reduced number of counts. - -==== Restrictions on the input workspace ==== -The input workspace must contain histogram data where the X unit is time-of-flight and the Y data is raw counts. The [[instrument]] associated with the workspace must be fully defined because detector, source & sample position are needed. - -====Child algorithms used==== -If the input workspace contains more than a single spectrum, Unwrap makes use of the [[rebin]] algorithm to set the bins on the output workspace to common values which cover the maximum theoretically accessible wavelength range. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/UnwrapSNS.cpp b/Code/Mantid/Framework/Algorithms/src/UnwrapSNS.cpp index 191440785235..42eb4eb2d8e0 100644 --- a/Code/Mantid/Framework/Algorithms/src/UnwrapSNS.cpp +++ b/Code/Mantid/Framework/Algorithms/src/UnwrapSNS.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -Slow moving (low energy and long wavelength neutrons) maybe detected after the end of the frame in which they entered the experimental apparatus. A schematic example of this is shown below where the neutrons are marked as circles. -
-[[File:UnwrapSNS_inst.png|Schematic diagram of neutrons entering an instrument and being detected|centre|]] -
-The two neutons on the right of the diagram were actually produced in frame 1 but will be recorded in frame 2 at low time of flight (TOF) and a straight [[ConvertUnits]] will bin them at high energy and short wavelength! [[UnwrapSNS]] moves those particles to the end of the spectrum by increasing their time of flight by the duration of a frame multiplied by the number (one or more) of frames they were "late" by. - -To assess if it is impossible for a particle to have arrived in the same frame it was detected a maximum speed for particles is calculated based on LRef and Tmin. The algorithm then calculates the mean speed of all detected particles and corrects those whose speed was greater than the maximum. - -Normally LRef is the total length of the flight path from the source (particle location when t=0) to a detector. For event data, if the detector with the shortest flight path was chosen it maybe possible to leave the Tmin empty and so that a first particle arrival time is used. Otherwise the Tmin should be set to < the arrival time of the fastest neutron at the given detector. - -If Tmin was set either Tmax or DataFrameWidth must be set to ensure the frame duration calculated correctly. If Tmax was set the frame width is the difference between Tmax and Tmin. DataFrameWidth overrides this and the width is the difference between the longest and shortest TOFs in the data. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Algorithms/src/UpdateScriptRepository.cpp b/Code/Mantid/Framework/Algorithms/src/UpdateScriptRepository.cpp index 638a869844e0..e76cf53b11db 100644 --- a/Code/Mantid/Framework/Algorithms/src/UpdateScriptRepository.cpp +++ b/Code/Mantid/Framework/Algorithms/src/UpdateScriptRepository.cpp @@ -1,8 +1,3 @@ -/*WIKI* -It updates the [[ScriptRepository]]. It checkout the information of the central repository -and download all the files marked for AutoUpdate. -*WIKI*/ - #include "MantidAlgorithms/UpdateScriptRepository.h" #include "MantidAPI/ScriptRepositoryFactory.h" #include "MantidAPI/ScriptRepository.h" diff --git a/Code/Mantid/Framework/Algorithms/src/WeightedMean.cpp b/Code/Mantid/Framework/Algorithms/src/WeightedMean.cpp index 287035f01ab7..6313e0b4e6ad 100644 --- a/Code/Mantid/Framework/Algorithms/src/WeightedMean.cpp +++ b/Code/Mantid/Framework/Algorithms/src/WeightedMean.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -The algorithm calculates the weighted mean of two workspaces. This is useful when working with distributions rather than histograms, particularly when counting statistics are poor and it is possible that the value of one data set is statistically insignificant but differs greatly from the other. In such a case simply calculating the average of the two data sets would produce a spurious result. This algorithm will eventually be modified to take a list of workspaces as an input. - -\displaystyle y=\frac{\sum\frac{x_i}{\sigma^{2}_i}}{\sum\frac{1}{\sigma^{2}_i}} - - - -*WIKI*/ #include "MantidAlgorithms/WeightedMean.h" namespace Mantid diff --git a/Code/Mantid/Framework/Algorithms/src/WeightedMeanOfWorkspace.cpp b/Code/Mantid/Framework/Algorithms/src/WeightedMeanOfWorkspace.cpp index 969dd747097e..700d16c9cb85 100644 --- a/Code/Mantid/Framework/Algorithms/src/WeightedMeanOfWorkspace.cpp +++ b/Code/Mantid/Framework/Algorithms/src/WeightedMeanOfWorkspace.cpp @@ -1,18 +1,3 @@ -/*WIKI* - -This algorithm calculates the weighted mean from all the spectra in a given -workspace. Monitors and masked spectra are ignored. Also, individual bins with -IEEE values will be excluded from the result. The weighted mean calculated by -the following: - -\displaystyle y=\frac{\sum\frac{x_i}{\sigma^{2}_i}}{\sum\frac{1}{\sigma^{2}_i}} - -and the variance is calculated by: - -\displaystyle \sigma^{2}_y=\frac{1}{\sum\frac{1}{\sigma^{2}_i}} - -*WIKI*/ - #include "MantidAlgorithms/WeightedMeanOfWorkspace.h" #include "MantidDataObjects/EventWorkspace.h" #include "MantidGeometry/Instrument.h" diff --git a/Code/Mantid/Framework/Crystal/src/AnvredCorrection.cpp b/Code/Mantid/Framework/Crystal/src/AnvredCorrection.cpp index 003c9a72c436..54189edf4ea6 100644 --- a/Code/Mantid/Framework/Crystal/src/AnvredCorrection.cpp +++ b/Code/Mantid/Framework/Crystal/src/AnvredCorrection.cpp @@ -1,40 +1,3 @@ -/*WIKI* - -Following A.J.Schultz's anvred, the weight factors should be: - sin^2(theta) / (lamda^4 * spec * eff * trans) -where -* theta = scattering_angle/2 -* lamda = wavelength (in angstroms?) -* spec = incident spectrum correction -* eff = pixel efficiency -* trans = absorption correction -The quantity: -sin^2(theta) / eff -depends only on the pixel and can be pre-calculated -for each pixel. It could be saved in array pix_weight[]. - -For now, pix_weight[] is calculated by the method: -BuildPixWeights() and just holds the sin^2(theta) values. -The wavelength dependent portion of the correction is saved in -the array lamda_weight[]. - -The time-of-flight is converted to wave length by multiplying -by tof_to_lamda[id], then (int)STEPS_PER_ANGSTROM * lamda -gives an index into the table lamda_weight[]. -The lamda_weight[] array contains values like: -1/(lamda^power * spec(lamda)) -which are pre-calculated for each lamda. These values are -saved in the array lamda_weight[]. The optimal value to use -for the power should be determined when a good incident spectrum -has been determined. Currently, power=3 when used with an -incident spectrum and power=2.4 when used without an incident -spectrum. - -The pixel efficiency and incident spectrum correction are NOT CURRENTLY USED. -The absorption correction, trans, depends on both lamda and the pixel, -Which is a fairly expensive calulation when done for each event. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Crystal/src/CalculatePeaksHKL.cpp b/Code/Mantid/Framework/Crystal/src/CalculatePeaksHKL.cpp index a5ce7fdd218f..f5601c6deff7 100644 --- a/Code/Mantid/Framework/Crystal/src/CalculatePeaksHKL.cpp +++ b/Code/Mantid/Framework/Crystal/src/CalculatePeaksHKL.cpp @@ -1,12 +1,3 @@ -/*WIKI* -Uses the UB matrix on the sample to calculate the Miller indices for all peaks in the peaks workspace. -Unlike [[IndexPeaks]] this algorithm does not perform any mandatory optimization. This algorithm does not -round the Miller indices to the nearest integer. - -== Alternatives == -[[IndexPeaks]] -*WIKI*/ - #include "MantidCrystal/CalculatePeaksHKL.h" #include "MantidGeometry/Crystal/IndexingUtils.h" #include "MantidDataObjects/PeaksWorkspace.h" diff --git a/Code/Mantid/Framework/Crystal/src/CalculateUMatrix.cpp b/Code/Mantid/Framework/Crystal/src/CalculateUMatrix.cpp index 2a751c10c2c2..c232580cd4b1 100644 --- a/Code/Mantid/Framework/Crystal/src/CalculateUMatrix.cpp +++ b/Code/Mantid/Framework/Crystal/src/CalculateUMatrix.cpp @@ -1,110 +1,3 @@ -/*WIKI* - -Given a set of peaks (Q in the goniometer frame, HKL values), and given lattice parameters (a,b,c,\alpha,\beta,\gamma), it will try to find the U matrix, using least squares approach and quaternions [http://www.cs.iastate.edu/~cs577/handouts/quaternion.pdf]. -Units of length are in in \rm \AA, angles are in degrees. - -The algorithm calculates first the B matrix according to Busing and Levi. - -Given a set of peaks in the reference frame of the inner axis of the goniometer, \rm Q_{gon}, indexed by (h_i, k_i, l_i), we want to find the U matrix that maps peaks in the reciprocal space of the sample to the peaks in the goniometer frame - - \rm U \rm B \left( - - \begin{array}{c} - - h_i \\ - - k_i \\ - - l_i \\ - - \end{array} - - \right) = \rm Q_{gon,i} (1) - -For simplicity, we define - -\rm Q_{hkl,i} = \rm B \left( - - \begin{array}{c} - - h_i \\ - - k_i \\ - - l_i \\ - - \end{array} - - \right) (2) - -In the real world, such a matrix is not always possible to find. Therefore we just try minimize the difference between the two sets of p - -\sum_i |\rm U \rm Q_{hkl,i} - \rm Q_{gon,i}|^2 = \sum_i \left(|\rm U \rm Q_{hkl,i}|^2 + |\rm Q_{gon,i}|^2 -2 \rm U \rm Q_{hkl,i} \cdot \rm Q_{gon,i}\right) (3) - -In equation (3) \left|\rm U \rm Q_{hkl,i}\right|^2 = |\rm Q_{hkl,i}|^2, so the first two terms on the left side are U independent. Therefore we want to maximize - -\sum_i \left(\rm U \rm Q_{hkl,i} \cdot \rm Q_{gon,i}\right) (4) - -We are going to write the scalar product of the vectors in terms of quaternions[http://en.wikipedia.org/wiki/Quaternion]. We define -q_{hkl,i} = \left(0, Q_{hkl,i}\right), q_{gon,i} = \left(0, Q_{gon,i}\right) and the rotation U is described by quaternion u = \left(w,x,y,z\right) - -Then equation (4) will be written as - -\sum_i \left(\rm U \rm Q_{hkl,i} \cdot \rm Q_{gon,i}\right) = 0.5 \cdot \left(u q_{hkl,i} u^*\right) q_{gon,i}\ + 0.5 \cdot q_{gon,i} \left(u q_{hkl,i} u^*\right) (5) - -We define matrices H_i= \left(\begin{array}{cccc} -0 & -q_{hkl,i,x} & -q_{hkl,i,y} & -q_{hkl,i,z} \\ -q_{hkl,i,x} & 0 & q_{hkl,i,z} & -q_{hkl,i,y} \\ -q_{hkl,i,y} & -q_{hkl,i,z} & 0 & q_{hkl,i,x} \\ -q_{hkl,i,z} & q_{hkl,i,y} & -q_{hkl,i,x} & 0 -\end{array} \right) (6) - -and - S_i= \left(\begin{array}{cccc} -0 & -q_{gonl,i,x} & -q_{gon,i,y} & -q_{gon,i,z} \\ -q_{gon,i,x} & 0 & -q_{gon,i,z} & q_{gon,i,y} \\ -q_{gon,i,y} & q_{gon,i,z} & 0 & -q_{gon,i,x} \\ -q_{gon,i,z} & -q_{gon,i,y} & q_{gon,i,x} & 0 -\end{array} \right) (7) - -Then, we can rewrite equation (5) using matrices[http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Pairs_of_unit_quaternions_as_rotations_in_4D_space],[http://www.cs.iastate.edu/~cs577/handouts/quaternion.pdf]: - -\sum_i \left(\rm U \rm Q_{hkl,i} \cdot \rm Q_{gon,i}\right) = \left(\begin{array}{cccc} -w & x & y & z\end{array} \right) \sum_i H_i S_i \left( - \begin{array}{c} - w \\ - x \\ - y \\ -z - \end{array} - - \right) (8) - -The problem of finding \left(w,x,y,z\right) that maximizes the sum can now be rewritten in terms of eigenvectors of HS= \sum_i \left(H_i S_i\right) . -Let \epsilon_j and \nu_j be the eigenvalues and corresponding eigenvectors of HS, with \epsilon_0 > \epsilon_1 > \epsilon_2 > \epsilon_3 . We can write any vector (w,x,y,z) as a linear combination of the eigenvectors of HS: - -\left(w,x,y,z\right) = \delta_0 \nu_0 +\delta_1 \nu_1 +\delta_2 \nu_2 +\delta_3 \nu_3 (9) - -\left(\begin{array}{cccc} -w & x & y & z\end{array} \right) HS \left( - \begin{array}{c} - w \\ - x \\ - y \\ -z - \end{array} - - \right) = \delta_0^2 \nu_0 HS \nu_0 + \delta_1^2 \nu_1 HS \nu_1 +\delta_2^2 \nu_2 HS \nu_2 +\delta_3 \nu_3 HS \nu_3 (10) - - = \delta_0^2 \epsilon_0 + \delta_1^2 \epsilon_1 +\delta_2^2 \epsilon_2 +\delta_3 ^2 \epsilon_3 (11) - -u is a unit quaternion, \delta_0^2 + \delta_1^2 +\delta_2^2 +\delta_3 ^2=1 (12) - -Then the sum in equation (11) is maximized for \epsilon_0 =1, \epsilon_1 =0, \epsilon_2 =0 \epsilon_3 =0 (13) - -Therefore U is the rotation represented by the quaternion u, which is the eigenvector corresponding to the largest eigenvalue of HS. - -*WIKI*/ #include "MantidCrystal/CalculateUMatrix.h" #include "MantidDataObjects/PeaksWorkspace.h" #include "MantidDataObjects/Peak.h" @@ -239,4 +132,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/CentroidPeaks.cpp b/Code/Mantid/Framework/Crystal/src/CentroidPeaks.cpp index 0852c655b94d..77c0a804bb0d 100644 --- a/Code/Mantid/Framework/Crystal/src/CentroidPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/CentroidPeaks.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -This algorithm starts with a PeaksWorkspace containing the expected positions of peaks in detector space. -It calculates the centroid of the peak by calculating the average of the coordinates of all events within a given radius of the peak, weighted by the weight (signal) of the event for event workspaces or the intensity for histogrammed workspaces. - -*WIKI*/ - #include "MantidDataObjects/PeaksWorkspace.h" #include "MantidKernel/System.h" #include "MantidCrystal/CentroidPeaks.h" diff --git a/Code/Mantid/Framework/Crystal/src/ClearUB.cpp b/Code/Mantid/Framework/Crystal/src/ClearUB.cpp index 6f500e43f7e5..f55ebb46c1f0 100644 --- a/Code/Mantid/Framework/Crystal/src/ClearUB.cpp +++ b/Code/Mantid/Framework/Crystal/src/ClearUB.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Clears the OrientedLattice of each ExperimentInfo attached to the intput [[Workspace]]. Works with both single ExperimentInfos and MultipleExperimentInfo instances. - - *WIKI*/ - #include "MantidCrystal/ClearUB.h" #include "MantidAPI/MultipleExperimentInfos.h" diff --git a/Code/Mantid/Framework/Crystal/src/CombinePeaksWorkspaces.cpp b/Code/Mantid/Framework/Crystal/src/CombinePeaksWorkspaces.cpp index 0098e8867846..1d7dff32912f 100644 --- a/Code/Mantid/Framework/Crystal/src/CombinePeaksWorkspaces.cpp +++ b/Code/Mantid/Framework/Crystal/src/CombinePeaksWorkspaces.cpp @@ -1,13 +1,3 @@ -/*WIKI* -This algorithm can be used to combine lists of single crystal peaks, -possibly obtained by different methods, in to a single list (contained in a PeaksWorkspace). -With the default options, this will simply append the lists of peaks. If CombineMatchingPeaks is -selected then an attempt will be made to identify identical peaks by matching them in Q within the specified tolerance. -The peaks in each workspace are traversed in the order they are found in the workspace (RHSWorkspace first) and -if a match is found (the search stops at the first match for each RHSWorkspace peak) then the peak in the -LHSWorkspace is retained. -*WIKI*/ - #include "MantidCrystal/CombinePeaksWorkspaces.h" #include "MantidKernel/BoundedValidator.h" #include "MantidKernel/EnabledWhenProperty.h" diff --git a/Code/Mantid/Framework/Crystal/src/DiffPeaksWorkspaces.cpp b/Code/Mantid/Framework/Crystal/src/DiffPeaksWorkspaces.cpp index 859eb09d0219..6ae37cb7c9c9 100644 --- a/Code/Mantid/Framework/Crystal/src/DiffPeaksWorkspaces.cpp +++ b/Code/Mantid/Framework/Crystal/src/DiffPeaksWorkspaces.cpp @@ -1,7 +1,3 @@ -/*WIKI* -This algorithm takes an input workspace (the LHSWorkspace) and removes from it's list of peaks any that are also found in a second workspace (the RHSWorkspace) in the same position in Q space within the specified tolerance. Each peak in the RHSWorkspace is taken in turn and compared to each peak in the LHSWorkspace in turn. The first match encountered is used, and the matching peak removed from the output before moving onto the next RHSWorkspace peak. -*WIKI*/ - #include "MantidCrystal/DiffPeaksWorkspaces.h" #include "MantidKernel/BoundedValidator.h" #include "MantidDataObjects/PeaksWorkspace.h" diff --git a/Code/Mantid/Framework/Crystal/src/FilterPeaks.cpp b/Code/Mantid/Framework/Crystal/src/FilterPeaks.cpp index f5a0ae7f140a..b37c32d939e3 100644 --- a/Code/Mantid/Framework/Crystal/src/FilterPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/FilterPeaks.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Filters a [[PeaksWorkspace]] using a set number of queries. Outputs a filtered PeaksWorkspace. -*WIKI*/ - #include "MantidCrystal/FilterPeaks.h" #include "MantidKernel/ListValidator.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/Crystal/src/FindClusterFaces.cpp b/Code/Mantid/Framework/Crystal/src/FindClusterFaces.cpp index 25b79298abb9..6259f9d767e6 100644 --- a/Code/Mantid/Framework/Crystal/src/FindClusterFaces.cpp +++ b/Code/Mantid/Framework/Crystal/src/FindClusterFaces.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -Algorithm takes an image workspace (a.k.a [[IMDHistoWorkspace]]) and determines the faces of the clusters contained within the image. -The image is expected to be a labeled image workspace outputted from [[IntegratePeaksUsingClusters]]. The algorithm generates a -[[TableWorkspace]] as output, which contains all the cluster edge faces required to draw the outer edge of all clusters within the workspace. - -You may optionally provide a FilterWorkspace, which is a [[PeaksWorkspace]]. If provided, the Peak locations are projected onto the InputWorkspace -and the center locations are used to restrict the output to only include the clusters that are the union between the peak locations and the image clusters. - -If LimitRows is set to True (default), then you may specify a maximum number of rows to report. If the algorithm generates more rows that the -MaximumRows that you set, then it will emit a warning, and also, set the TruncatedOutput output property to false. - -*WIKI*/ - #include "MantidCrystal/FindClusterFaces.h" #include "MantidKernel/BoundedValidator.h" diff --git a/Code/Mantid/Framework/Crystal/src/FindSXPeaks.cpp b/Code/Mantid/Framework/Crystal/src/FindSXPeaks.cpp index 27fd9e19dea2..cba64cd2f5fb 100644 --- a/Code/Mantid/Framework/Crystal/src/FindSXPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/FindSXPeaks.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -Detector-space, single crystal peak finding. Finds peaks by searching through each spectra and looking for high intensity bins. If a bin has high intensity it is a candidate for a peak. - -Notable points: - -* The highest intensity bin is taken to be the peak, so only finds one peak per spectra -* Peaks that are not above the background are culled. The background is calculated as the average of the start and end intensity multiplied by the provided SignalBackground parameter. -* Calculated Qlab follows the Busy, Levy 1967 convention. - -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Crystal/src/FindUBUsingFFT.cpp b/Code/Mantid/Framework/Crystal/src/FindUBUsingFFT.cpp index 13759c851e47..6a6666406185 100644 --- a/Code/Mantid/Framework/Crystal/src/FindUBUsingFFT.cpp +++ b/Code/Mantid/Framework/Crystal/src/FindUBUsingFFT.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -Given a set of peaks, and given a range of possible a,b,c values, this algorithm will attempt to find a UB matrix, corresponding to the Niggli reduced cell, that fits the data. -The algorithm projects the peaks on many possible direction vectors and calculates a Fast Fourier Transform of the projections to identify regular patterns in the collection of peaks. -Based on the calcuated FFTs, a list of directions corresponding to possible real space unit cell edge vectors is formed. -The directions and lengths of the vectors in this list are optimized (using a least squares approach) to index the maximum number of peaks, after which the list is sorted in order of increasing length and duplicate vectors are removed from the list. - -The algorithm then chooses three of the remaining vectors with the shortest lengths that are linearly independent, form a unit cell with at least a minimum volume and for which the corresponding UB matrix indexes at least 80% of the maximum number of indexed using any set of three vectors chosen from the list. - -A UB matrix is formed using these three vectors and the resulting UB matrix is again optimized using a least squares method. Finally, starting from this matrix, -a matrix corresponding to the Niggli reduced cell is calculated and returned as the UB matrix. -If the specified peaks are accurate and belong to a single crystal, this method should produce the UB matrix corresponding to the Niggli reduced cell. However, other software will usually be needed to adjust this UB to match a desired conventional cell. -While this algorithm will occasionally work for as few as four peaks, it works quite consistently with at least ten peaks, and in general works best with a larger number of peaks. - - -*WIKI*/ #include "MantidCrystal/FindUBUsingFFT.h" #include "MantidDataObjects/PeaksWorkspace.h" #include "MantidDataObjects/Peak.h" @@ -154,4 +137,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/FindUBUsingIndexedPeaks.cpp b/Code/Mantid/Framework/Crystal/src/FindUBUsingIndexedPeaks.cpp index ec2a5d8523e4..03ebb5794105 100644 --- a/Code/Mantid/Framework/Crystal/src/FindUBUsingIndexedPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/FindUBUsingIndexedPeaks.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -Given a set of peaks at least three of which have been assigned Miller indices, this algorithm will find the UB matrix, that best maps the integer (h,k,l) values to the corresponding Q vectors. The set of indexed peaks must include three linearly independent Q vectors. The (h,k,l) values from the peaks are first rounded to form integer (h,k,l) values. The algorithm then forms a possibly over-determined linear system of equations representing the mapping from (h,k,l) to Q for each indexed peak. The system of linear equations is then solved in the least squares sense, using QR factorization. - - -*WIKI*/ #include "MantidCrystal/FindUBUsingIndexedPeaks.h" #include "MantidDataObjects/Peak.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -156,4 +149,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/FindUBUsingLatticeParameters.cpp b/Code/Mantid/Framework/Crystal/src/FindUBUsingLatticeParameters.cpp index 315e619a957c..cb86702db3c8 100644 --- a/Code/Mantid/Framework/Crystal/src/FindUBUsingLatticeParameters.cpp +++ b/Code/Mantid/Framework/Crystal/src/FindUBUsingLatticeParameters.cpp @@ -1,30 +1,3 @@ -/*WIKI* - -Given a set of peaks, and given lattice parameters (a,b,c,alpha,beta,gamma), this algorithm -will find the UB matrix, that best fits the data. The algorithm searches over a large range of possible -orientations for the orientation for which the rotated B matrix best fits the data. The search for the -best orientation involves several steps. - -During the first step, a reduced set of peaks typically at lower |Q| are used, since it is easier -to index peaks at low |Q|. Specifically, if there are at least 5 peaks, the peaks are shifted to -be centered at the strongest peaks and then sorted in order of increasing distance from the -strongest peak. If there are fewer than 5 peaks the list is just sorted in order of increasing |Q|. -Only peaks from the initial portion of this sorted list are used in the first step. The number of -peaks from this list to be used initially is specified by the user with the parameter NumInitial. -The search first finds a list of possible orientations for which the UB matrix will index the -maximum number of peaks from the initial set of peaks to within the specified tolerance on h,k,l values. -Subsequently, only the UB matrix that indexes that maximum number of peaks with the minimum distance -between the calculated h,k,l values and integers is kept and passed on to the second step. - -During the second step, additional peaks are gradually added to the initial list of peaks. Each time -peaks are added to the list, the subset of peaks from the new list that are indexed within the specified -tolerance on k,k,l are used in a least squares calculation to optimize the UB matrix to best index those -peaks. The process of gradually adding more peaks from the sorted list and optimizing the -UB based on the peaks that are indexed, continues until all peaks have been added to the list. -Finally, one last optimization of the UB matrix is carried out using the full list of peaks. - - -*WIKI*/ #include "MantidCrystal/FindUBUsingLatticeParameters.h" #include "MantidDataObjects/PeaksWorkspace.h" #include "MantidDataObjects/Peak.h" @@ -197,4 +170,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/FindUBUsingMinMaxD.cpp b/Code/Mantid/Framework/Crystal/src/FindUBUsingMinMaxD.cpp index 9b556b3b1cc7..2e17531f604d 100644 --- a/Code/Mantid/Framework/Crystal/src/FindUBUsingMinMaxD.cpp +++ b/Code/Mantid/Framework/Crystal/src/FindUBUsingMinMaxD.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -Given a set of peaks, and given a range of possible a,b,c values, this algorithm will attempt to find a UB matrix, corresponding to the [http://nvlpubs.nist.gov/nistpubs/sp958-lide/188-190.pdf Niggli reduced cell], that fits the data. The algorithm searches over a range of possible directions and unit cell lengths for directions and lengths that match plane normals and plane spacings in reciprocal space. It then chooses three of these vectors with the shortest lengths that are linearly independent and that are separated by at least a minimum angle. An initial UB matrix is formed using these three vectors and the resulting UB matrix is optimized using a least squares method. Finally, starting from this matrix, a matrix corresponding to the Niggli reduced cell is calculated and returned as the UB matrix. If the specified peaks are accurate and belong to a single crystal, this method should produce some UB matrix that indexes the peaks. However, other software will usually be needed to adjust this UB to match a desired conventional cell. - - - -*WIKI*/ #include "MantidCrystal/FindUBUsingMinMaxD.h" #include "MantidKernel/BoundedValidator.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -183,4 +176,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/GoniometerAnglesFromPhiRotation.cpp b/Code/Mantid/Framework/Crystal/src/GoniometerAnglesFromPhiRotation.cpp index 70e4abadd18a..8faa4dd50e01 100644 --- a/Code/Mantid/Framework/Crystal/src/GoniometerAnglesFromPhiRotation.cpp +++ b/Code/Mantid/Framework/Crystal/src/GoniometerAnglesFromPhiRotation.cpp @@ -1,14 +1,3 @@ - -/*WIKI* - -This algorithm is used for finding Goniometer angles when instrument readings are basically unknown. -The inputs are two PeaksWorkspaces corresponding to sample orientations of the SAME crystal -that differ only in their phi rotation. - -If the phi angles are known, this algorithm attempts to find the common chi and omega rotations. - - *WIKI*/ - #include "MantidAPI/Algorithm.h" #include "MantidAPI/FrameworkManager.h" #include "MantidAPI/IAlgorithm.h" diff --git a/Code/Mantid/Framework/Crystal/src/HasUB.cpp b/Code/Mantid/Framework/Crystal/src/HasUB.cpp index 3d9ec91267d8..82eda5532e53 100644 --- a/Code/Mantid/Framework/Crystal/src/HasUB.cpp +++ b/Code/Mantid/Framework/Crystal/src/HasUB.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Determine if a workspace has a UB matrix on any of it's samples. Returns True if one is found. Returns false if none can be found, or if the -workspace type is incompatible. -*WIKI*/ - #include "MantidCrystal/HasUB.h" using namespace Mantid::API; diff --git a/Code/Mantid/Framework/Crystal/src/IndexPeaks.cpp b/Code/Mantid/Framework/Crystal/src/IndexPeaks.cpp index b7fedb7627a3..2800dfd652d0 100644 --- a/Code/Mantid/Framework/Crystal/src/IndexPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/IndexPeaks.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -Given a PeaksWorkspace with a UB matrix stored with the sample, this algorithm will use UB inverse -to index the peaks. If there are peaks from multiple runs in the workspace, the stored UB will be -used to get an initial indexing for the peaks from each individual run. Subsequently, a temporary -UB will be optimzed for the peaks from each individual run, and used to index the peaks from that -run. In this way, a consistent indexing of the peaks from multiple runs will be obtained, which -indexes the largest number of peaks, although one UB may not produce exactly that indexing for -all peaks, within the specified tolerance. - -Any peak with any Miller index more than the specified tolerance away from an integer will have its -(h,k,l) set to (0,0,0). The calculated Miller indices can either be rounded to the nearest integer -value, or can be left as decimal fractions. - - -*WIKI*/ #include "MantidCrystal/IndexPeaks.h" #include "MantidDataObjects/PeaksWorkspace.h" #include "MantidDataObjects/Peak.h" @@ -242,4 +225,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/IndexSXPeaks.cpp b/Code/Mantid/Framework/Crystal/src/IndexSXPeaks.cpp index 500ef98c47bc..5e3dea0b0fa8 100644 --- a/Code/Mantid/Framework/Crystal/src/IndexSXPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/IndexSXPeaks.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -Given a PeaksWorkspace and a set of lattice parameters, attempts to tag each peak with a HKL value -by comparing d-spacings between potential HKL matches and the peaks as well as angles between Q vectors. - -==Usage Notes== -This algorithm does not generate a UB Matrix, it will only index peaks. Run CalculateUMatrix algorithm after executing this algorithm in order -to attach a UB Matrix onto the sample. The CopySample algorithm will allow this UB Matrix to be transfered between workspaces. - -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Crystal/src/IntegratePeakTimeSlices.cpp b/Code/Mantid/Framework/Crystal/src/IntegratePeakTimeSlices.cpp index f24bc7fde36a..21fe4e2c7a4d 100644 --- a/Code/Mantid/Framework/Crystal/src/IntegratePeakTimeSlices.cpp +++ b/Code/Mantid/Framework/Crystal/src/IntegratePeakTimeSlices.cpp @@ -1,30 +1,3 @@ -/*WIKI* - - -This algorithm fits a bivariate normal distribution( plus background) to the data on each time slice. The Fit program uses [[BivariateNormal]] for the Fit Function. - -The area used for the fitting is calculated based on the dQ parameter. A good value for dQ is 1/largest unit cell length. This parameter dictates the size of the area used to approximate the intensity of the peak. The estimate .1667/ max(a,b,c) assumes |Q|=1/d. - -The result is returned in this algorithm's output "Intensity" and "SigmaIntensity" properties. The peak object is NOT CHANGED. - - -The table workspace is also a result. Each line contains information on the fit for each good time slice. The column names( and information) in the table are: - Time, Channel, Background, Intensity, Mcol, Mrow, SScol,SSrow, SSrc, NCells, - ChiSqrOverDOF, TotIntensity, BackgroundError, FitIntensityError, ISAWIntensity, - ISAWIntensityError,TotalBoundary, NBoundaryCells, Start Row, End Row,Start Col, and End Col. - The last column has a comma separated List of sepctral ID's used in the time slice. - - -The final Peak intensity is the sum of the IsawIntensity for each time slice. The error is the square root of the sum of squares of the IsawIntensityError values. - -The columns whose names are Background, Intensity, Mcol, Mrow, SScol, SSrow, and SSrc correspond to the parameters for the BivariateNormal curve fitting function. - -This algorithm has been carefully tweaked to give good results for interior peaks only. Peaks close to the edge of the detector may not give good results. - -This Algorithm is also used by the [[PeakIntegration]] algorithm when the Fit tag is selected. - -*WIKI*/ - /* * IntegratePeakTimeSlices.cpp * diff --git a/Code/Mantid/Framework/Crystal/src/IntegratePeaksUsingClusters.cpp b/Code/Mantid/Framework/Crystal/src/IntegratePeaksUsingClusters.cpp index 05d9a290efa6..2185f1b5c4a5 100644 --- a/Code/Mantid/Framework/Crystal/src/IntegratePeaksUsingClusters.cpp +++ b/Code/Mantid/Framework/Crystal/src/IntegratePeaksUsingClusters.cpp @@ -1,48 +1,3 @@ -/*WIKI* -Integrates arbitary shaped single crystal peaks defined on an [[MDHistoWorkspace]] using connected component analysis to determine -regions of interest around each peak of the [[PeaksWorkspace]]. The output is an integrated [[PeaksWorkspace]] as well as an image -containing the labels assigned to each cluster for diagnostic and visualisation purposes. - -'''The algorithm makes no assmptions about Peak shape or size''' and can therfore be used where integration over defined shapes -[[IntegratePeaksMD]] and [[IntegrateEllipsoids]], for example, will not work. - -[[File:ClusterImage.png|400px]] - -''Cluster Label region displayed in the [[SliceViewer]]. Peak centre is marked with an X. The green circle illustrates the integration region used by [[IntegratePeaksMD]]'' - -A threshold for the Peak should be defined below which, parts of the image are treated as background. The normalization method in combination with the -threshold may both be used to define a background. We suggest keeping the default of VolumeNormalization so that changes in the effective bin size -do not affect the background filtering. - -This algorithm uses an imaging technique, and it is therefore important that the MDHistoWorkspace you are using is binned to a sufficient -resolution via [[BinMD]]. You can overlay the intergrated peaks workspace in the [[MantidPlot:_SliceViewer#Viewing_Peaks_Workspaces|Slice Viewer]] over -the generated Cluster Labeled OutputWorkspaceMD to see what the interation region used for each peak amounts to. - -== Notes for running == - -It is suggested that you '''initially run the algorithm on a coarse image'''. This will help you tune the Threshold parameters. The algorithm generates -a large memory footprint, so it is suggested that you keep the initial image small, and run on hardware with sufficient memory to store multiple workspace -of equal size to the input MDWorkspace (generated as part of the connected component analysis). - -== Warnings and Logging == -The algorithm will generate warning. There are three main warning to know about. -=== Off the Image Edge === -The algorithm will warn about unreachable peaks (off the image). This may be because the peaks detected were off -the edge of the detector, or because the image was cropped in BinMD in such a way that that part of the detector/TOF space is no -longer accessible. -=== No Cluster Corresponding to Peak === -This is because the input [[PeaksWorkspace]] has peaks that do not align with peaks in the image. The error could either -be on the side of the input PeaksWorkspace (spurious peaks), or of the [[MDHistoWorkspace]] generated as part of processing. One thing to verify -is that the combination of Threshold and Normalization input parameters are not so low that they are treating genuine peaks in the image -as background. -=== Multiple Peaks Assigned to the same Cluster === -This means overlapping peaks in the image. This is a problem because both peaks will be given an integrated value that is the sum -of the entire cluster. You may need to increase the Threshold parameter to resolve this problem. - -For more in-depth analysis, the algorithm will produce debug log messages. - - *WIKI*/ - #include "MantidCrystal/IntegratePeaksUsingClusters.h" #include "MantidCrystal/ICluster.h" #include "MantidCrystal/ConnectedComponentLabeling.h" diff --git a/Code/Mantid/Framework/Crystal/src/LatticeErrors.cpp b/Code/Mantid/Framework/Crystal/src/LatticeErrors.cpp index 24d16d83813f..6e934281c00b 100644 --- a/Code/Mantid/Framework/Crystal/src/LatticeErrors.cpp +++ b/Code/Mantid/Framework/Crystal/src/LatticeErrors.cpp @@ -1,8 +1,3 @@ -/*WIKI* - - -*WIKI*/ - /* * LatticeErrors.cpp * diff --git a/Code/Mantid/Framework/Crystal/src/LoadHKL.cpp b/Code/Mantid/Framework/Crystal/src/LoadHKL.cpp index 94daa9872d18..82cfb1317096 100644 --- a/Code/Mantid/Framework/Crystal/src/LoadHKL.cpp +++ b/Code/Mantid/Framework/Crystal/src/LoadHKL.cpp @@ -1,37 +1,3 @@ -/*WIKI* -Loads an ASCII .hkl file to a PeaksWorkspace. - -File has same format that works successfully in GSAS and SHELX from ISAW: - -hklFile.write('%4d%4d%4d%8.2f%8.2f%4d%8.4f%7.4f%7d%7d%7.4f%4d%9.5f%9.4f\n'% (H, K, L, FSQ, SIGFSQ, hstnum, WL, TBAR, CURHST, SEQNUM, TRANSMISSION, DN, TWOTH, DSP)) - -HKL is flipped by -1 due to different q convention in ISAW vs Mantid. - -FSQ = integrated intensity of peak (scaled) - -SIGFSQ = sigma from integrating peak - -hstnum = number of sample orientation (starting at 1) - -WL = wavelength of peak - -TBAR = output of absorption correction (-log(transmission)/mu) - -CURHST = run number of sample - -SEQNUM = peak number (unique number for each peak in file) - -TRANSMISSION = output of absorption correction (exp(-mu*tbar)) - -DN = detector bank number - -TWOTH = two-theta scattering angle - -DSP = d-Spacing of peak (Angstroms)/TR - -Last line must have all 0's - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidCrystal/LoadHKL.h" @@ -205,4 +171,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/LoadIsawPeaks.cpp b/Code/Mantid/Framework/Crystal/src/LoadIsawPeaks.cpp index c1563b7e2990..c707c8147c88 100644 --- a/Code/Mantid/Framework/Crystal/src/LoadIsawPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/LoadIsawPeaks.cpp @@ -1,13 +1,3 @@ -/*WIKI* - - - -Reads an ISAW-style .peaks or .integrate file into a PeaksWorkspace. Any detector calibration information is ignored. - -NOTE: The instrument used is determined by reading the 'Instrument:' and 'Date:' tags at the start of the file.If the date is not present, the latest [[Instrument Definition File]] is used. - - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/RegisterFileLoader.h" #include "MantidCrystal/LoadIsawPeaks.h" @@ -649,4 +639,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/LoadIsawSpectrum.cpp b/Code/Mantid/Framework/Crystal/src/LoadIsawSpectrum.cpp index f1b8b68626ad..ebd86e7ca671 100644 --- a/Code/Mantid/Framework/Crystal/src/LoadIsawSpectrum.cpp +++ b/Code/Mantid/Framework/Crystal/src/LoadIsawSpectrum.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Load incident spectrum and detector efficiency correction file containing spectra for each detector. -The spectra are created by "TOPAZ_spectrum.py" from files of vanadium or TiZr and background. - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidCrystal/LoadIsawSpectrum.h" @@ -339,4 +334,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/LoadIsawUB.cpp b/Code/Mantid/Framework/Crystal/src/LoadIsawUB.cpp index 313c52a3fa4f..867c3e32833e 100644 --- a/Code/Mantid/Framework/Crystal/src/LoadIsawUB.cpp +++ b/Code/Mantid/Framework/Crystal/src/LoadIsawUB.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -Loads the UB matrix into a workspace from an ISAW-style UB matrix ASCII file. - -You can use the [[SaveIsawUB]] algorithm to save to this format. - -The matrix in the file is the transpose of the UB Matrix. -The UB matrix maps the column vector (h,k,l ) to the column vector (q'x,q'y,q'z). -|Q'|=1/dspacing and its coordinates are a right-hand coordinate system where x -is the beam direction and z is vertically upward. (IPNS convention) - -Note: for an MDEventWorkspace, all experimentInfo objects will contain teh oriented lattice loaded from the IsawUB file - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidCrystal/LoadIsawUB.h" #include "MantidKernel/Matrix.h" @@ -174,4 +160,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/MaskPeaksWorkspace.cpp b/Code/Mantid/Framework/Crystal/src/MaskPeaksWorkspace.cpp index 91f87e9c2f1a..247f48b89f03 100644 --- a/Code/Mantid/Framework/Crystal/src/MaskPeaksWorkspace.cpp +++ b/Code/Mantid/Framework/Crystal/src/MaskPeaksWorkspace.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Mask pixels in an Workspace close to peak positions from a PeaksWorkspace. -Peaks could come from ISAW diamond stripping routine for SNAP data. Only works on Workspaces and for instruments with RectangularDetector's. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Crystal/src/NormaliseVanadium.cpp b/Code/Mantid/Framework/Crystal/src/NormaliseVanadium.cpp index 87b85e1d8926..71b5189ad8f6 100644 --- a/Code/Mantid/Framework/Crystal/src/NormaliseVanadium.cpp +++ b/Code/Mantid/Framework/Crystal/src/NormaliseVanadium.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Normalises all spectra of workspace to a specified wavelength. Following A.J.Schultz's anvred, scales the vanadium spectra. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Crystal/src/OptimizeCrystalPlacement.cpp b/Code/Mantid/Framework/Crystal/src/OptimizeCrystalPlacement.cpp index f5a7a0dee61c..ab4ab575525b 100644 --- a/Code/Mantid/Framework/Crystal/src/OptimizeCrystalPlacement.cpp +++ b/Code/Mantid/Framework/Crystal/src/OptimizeCrystalPlacement.cpp @@ -1,30 +1,3 @@ -/*WIKI* - -This algorithm basically optimizes h,k, and l offsets from an integer by varying the parameters sample positions, sample orientations -( chi,phi, and omega), and/or the tilt of the goniometer for an experiment. - --If the crystal orientation matrix, UB, was created from one run, that run may not need to have its goniometer -settings optimized. There is a property to list the run numbers to NOT have their goniometer settings changed. This -entry is IGNORED if the tilt or sample positions are included in the optimization. In this case NONE of the goniometer angles, -relative to any tilt, will be changed. - --The goniometer angles displayed are relative to the tilt,i,e, phi is the rotation around the axis perpendicular to the tilted -plane. The resultant PeaksWorkspace has the goniometer angles relative to the Y and Z axes at that time. - --The crystal orientation matrix, UB, from the PeaksWorkspace should index all the runs "very well". Otherwise iterations -that slowly build a UB with corrected sample orientations may be needed. - --The parameters for the tilt are GonRotx, GonRoty, and GonRotz in degrees. The usage for this information is as follows: - rotate('x',GonRotx)*rotate('y',GonRoty)*rotate('z',GonRotz)* SampleOrientation( i.e. omegaRot*chiRot*phiRot)). - --Note: To optimize by the tilt in the goniometer and then by the angles or by the sample position, it is possible to -run with one optimization, then using the resultant PeaksWorkspace for input, run another optimization. - -Rerunning the same optimization with the result is also a good idea. If the first guess is very close, the optimize algorithm -does try cases far away and may not get back to the best value. Check the chisquared values. If they increase, that optimization -should probably not be used. - - *WIKI*/ /* * OptimizeCrystalPlacement.cpp * diff --git a/Code/Mantid/Framework/Crystal/src/OptimizeExtinctionParameters.cpp b/Code/Mantid/Framework/Crystal/src/OptimizeExtinctionParameters.cpp index 28e7ac009c2f..622ccdfa3aa1 100644 --- a/Code/Mantid/Framework/Crystal/src/OptimizeExtinctionParameters.cpp +++ b/Code/Mantid/Framework/Crystal/src/OptimizeExtinctionParameters.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ #include "MantidCrystal/OptimizeExtinctionParameters.h" #include "MantidCrystal/GSLFunctions.h" #include "MantidDataObjects/PeaksWorkspace.h" diff --git a/Code/Mantid/Framework/Crystal/src/OptimizeLatticeForCellType.cpp b/Code/Mantid/Framework/Crystal/src/OptimizeLatticeForCellType.cpp index 434eefbeb1e6..baf4ba6183d6 100644 --- a/Code/Mantid/Framework/Crystal/src/OptimizeLatticeForCellType.cpp +++ b/Code/Mantid/Framework/Crystal/src/OptimizeLatticeForCellType.cpp @@ -1,15 +1,3 @@ -/*WIKI* -This does a least squares fit between indexed peaks and Q values -for a set of runs producing an overall leastSquare orientation matrix. - -Get estimates of the standard deviations of the parameters, by -approximating chisq by a quadratic polynomial through three points -and finding the change in the parameter that would cause a change -of 1 in chisq. (See Bevington, 2nd ed., pg 147, eqn: 8.13 ) -In this version, we calculate a sequence of approximations for -each parameter, with delta ranging over 10 orders of magnitude -and keep the value in the sequence with the smallest relative change. -*WIKI*/ #include "MantidCrystal/OptimizeLatticeForCellType.h" #include "MantidCrystal/GSLFunctions.h" #include "MantidDataObjects/PeaksWorkspace.h" diff --git a/Code/Mantid/Framework/Crystal/src/PeakHKLErrors.cpp b/Code/Mantid/Framework/Crystal/src/PeakHKLErrors.cpp index 28ade44086e0..6a3eb3f0ffa3 100644 --- a/Code/Mantid/Framework/Crystal/src/PeakHKLErrors.cpp +++ b/Code/Mantid/Framework/Crystal/src/PeakHKLErrors.cpp @@ -1,39 +1,3 @@ -/*WIKI* - == - This function calculates, for each peak, its h,k,and l offsets from an integer using goniometer settings and/or tilt and sample offsets from the parameters. - -The original PeaksWorkspace is unchanged. - -===Attributes=== - -# OptRuns : a list of run numbers whose sample orientations are to be optimized. The list is separated by "/". -# PeakWorkspaceName : The name of the PeaksWorkspace in the AnalysisDataService - - -===Parameters=== - -#SampleXOffset- XOffset of Goniometer center from instrument center in meters -#SampleYOffset- YOffset of Goniometer center from instrument center in meters -#SampleZOffset- YOffset of Goniometer center from instrument center in meters - -#GonRotx- For Goniometer tilt. Rotation about x-axis in degrees where Tilt = Rotx(GonRotx)*Roty(GonRoty)*Rotz(GonRotz) -#GonRoty- For Goniometer tilt. Rotation about y-axis -#GonRotz- For Goniometer tilt. Rotation about z-axis( done 1st AFTER phi-chi-omega rotations) - -#chixxx - xxx is a run number from OptRuns. This is the chi angle in degrees that will be used for that run( before tilting) -#phixxx - xxx is a run number from OptRuns. This is the phi angle in degrees that will be used for that run -#omegaxxx - xxx is a run number from OptRuns. This is the omega angle in degrees that will be used for that run - -NOTE:When used in fitting, some or all of the first 6 parameters could be tied to zero. - -===Outputs=== -The PeaksWorkspace is NOT changed. - -The argument out in function1D has ,for each peak, the h,k, and l offsets from an integer using the current parameter values. - - -*WIKI*/ - /* * PeakHKLErrors.cpp * diff --git a/Code/Mantid/Framework/Crystal/src/PeakIntegration.cpp b/Code/Mantid/Framework/Crystal/src/PeakIntegration.cpp index ff5f5e15e0b8..ae8150c3be1e 100644 --- a/Code/Mantid/Framework/Crystal/src/PeakIntegration.cpp +++ b/Code/Mantid/Framework/Crystal/src/PeakIntegration.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -Integrate and calculate error of integration of each peak from single crystal data and place results into peak workspace. Uses IkedaCarpenter function to fit TOF. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/Crystal/src/PeakIntensityVsRadius.cpp b/Code/Mantid/Framework/Crystal/src/PeakIntensityVsRadius.cpp index 1c4ed093085a..adf046672310 100644 --- a/Code/Mantid/Framework/Crystal/src/PeakIntensityVsRadius.cpp +++ b/Code/Mantid/Framework/Crystal/src/PeakIntensityVsRadius.cpp @@ -1,54 +1,3 @@ -/*WIKI* - -Integrates SCD peaks with a range of radii, in order to plot graphs of the integrated intensity vs radius. This can be useful to determine the correct integration radius for each peak. - -[[File:PeakIntensityVsRadius_fig.png|center|350px|{Integrated peak intensity vs integration radius for 3 SCD peaks}]] - -The algorithm requires a [[MDWorkspace]] of SCD data in reciprocal space; generated by e.g. [[ConvertToDiffractionMDWorkspace]]. -Also, you will need a [[PeaksWorkspace]] as the list of peaks to integrate. This can be generated using [[FindPeaksMD]], for example. - -The output will be -a [[Workspace2D]] with one spectrum per peak, where: -* X = peak radius -* Y/E = integrated intensity and error for the corresponding radius. -* Each peak is labeled with a string with "H K L". Use [[IndexPeaks]] to automatically find HKL values for peaks. - -This algorithm calls [[IntegratePeaksMD]] repeatedly, with the following -parameters filled in: -* '''PeakRadius''' = the radius, ranging from RadiusStart to RadiusEnd in NumSteps steps. -* '''BackgroundInnerRadius''' = radius * BackgroundInnerFactor ''OR'' BackgroundInnerRadius -* '''BackgroundOuterRadius''' = radius * BackgroundOuterFactor ''OR'' BackgroundOuterRadius - -=== Sample Usage === - - -# Load a SCD data set and find the peaks -LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') -ConvertToDiffractionMDWorkspace(InputWorkspace='TOPAZ_3131_nxs',OutputWorkspace='TOPAZ_3131_md',LorentzCorrection='1') -FindPeaksMD(InputWorkspace='TOPAZ_3131_md',PeakDistanceThreshold='0.15',MaxPeaks='100',OutputWorkspace='peaks') -FindUBUsingFFT(PeaksWorkspace='peaks',MinD='2',MaxD='16') -IndexPeaks(PeaksWorkspace='peaks') - -# Run the PeakIntensityVsRadius algorithm, where the background shell scales with the PeakRadius -PeakIntensityVsRadius(InputWorkspace='TOPAZ_3131_md',PeaksWorkspace='peaks', - RadiusStart=0.00, RadiusEnd=0.15, NumSteps=51, - BackgroundInnerFactor=1.5,BackgroundOuterFactor=2, - OutputWorkspace='peak_vs_rad') - -# Run the PeakIntensityVsRadius algorithm, with fixed background shell radius -PeakIntensityVsRadius(InputWorkspace='TOPAZ_3131_md',PeaksWorkspace='peaks', - RadiusStart=0.00, RadiusEnd=0.15, NumSteps=51, - BackgroundInnerRadius=0.15,BackgroundOuterRadius=0.2, - OutputWorkspace='peak_vs_rad_fixed') - -# Plot a few of the peaks -plotSpectrum('peak_vs_rad', [0,2,3], error_bars=True) - - - - -*WIKI*/ - #include "MantidCrystal/PeakIntensityVsRadius.h" #include "MantidKernel/Strings.h" #include "MantidDataObjects/PeaksWorkspace.h" diff --git a/Code/Mantid/Framework/Crystal/src/PeaksInRegion.cpp b/Code/Mantid/Framework/Crystal/src/PeaksInRegion.cpp index 55d8f40bee32..1906528a4b00 100644 --- a/Code/Mantid/Framework/Crystal/src/PeaksInRegion.cpp +++ b/Code/Mantid/Framework/Crystal/src/PeaksInRegion.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Determines which peaks intersect a defined box region in either QLab, QSample or HKL space. Similar to [[PeaksOnSurface]]. -*WIKI*/ - - #include "MantidCrystal/PeaksInRegion.h" #include "MantidKernel/ArrayProperty.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/Crystal/src/PeaksOnSurface.cpp b/Code/Mantid/Framework/Crystal/src/PeaksOnSurface.cpp index a991049136eb..09b737250a20 100644 --- a/Code/Mantid/Framework/Crystal/src/PeaksOnSurface.cpp +++ b/Code/Mantid/Framework/Crystal/src/PeaksOnSurface.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Determine whether a peak intersects a surface. Similar to [[PeaksInRegion]]. The vertexes of the surface must be provided. The vertexes must be provided in clockwise ordering starting at the lower left. -*WIKI*/ - #include "MantidCrystal/PeaksOnSurface.h" #include "MantidKernel/ArrayProperty.h" #include "MantidKernel/MandatoryValidator.h" @@ -240,4 +236,4 @@ namespace Crystal } // namespace Crystal -} // namespace Mantid \ No newline at end of file +} // namespace Mantid diff --git a/Code/Mantid/Framework/Crystal/src/PredictFractionalPeaks.cpp b/Code/Mantid/Framework/Crystal/src/PredictFractionalPeaks.cpp index 2a00b4238ce0..d330bcd872cb 100644 --- a/Code/Mantid/Framework/Crystal/src/PredictFractionalPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/PredictFractionalPeaks.cpp @@ -1,26 +1,3 @@ -/*WIKI* -This Algorithm creates a PeaksWorkspace with peaks occurring at specific fractional offsets from -h,k,or l values. - -There are options to create Peaks offset from peaks from the input PeaksWorkspace, or to create peaks -offset from h,k, and l values in a range. Zero offsets are allowed if some or all integer h,k, or -l values are desired - -The input PeaksWorkspace must contain an orientation matrix and have been INDEXED by THIS MATRIX -when the new peaks are not created from a range of h ,k, and l values - -=== Example usage === - -from mantidsimple import * -PeaksWrkSpace=mtd["PeaksQa"] -#Can be created via PredictPeaks( then do NOT use next line) -FindUBUsingFFT(PeaksWrkSpace,3,15,.12) -IndexPeaks(PeaksWrkSpace,.12,1) -PredictFractionalPeaks(PeaksWrkSpace,"FracPeaks","-.5,0,.5","-.5,.5","0") -#NOTE: There are editing options on PeaksWorkspaces, like combining 2 PeaksWorkspaces. - - -*WIKI*/ /* * PredictFractionalPeaks.cpp * diff --git a/Code/Mantid/Framework/Crystal/src/PredictPeaks.cpp b/Code/Mantid/Framework/Crystal/src/PredictPeaks.cpp index 76036ad8261b..afce20ffdb8f 100644 --- a/Code/Mantid/Framework/Crystal/src/PredictPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/PredictPeaks.cpp @@ -1,31 +1,3 @@ -/*WIKI* - -This algorithm will predict the position of single-crystal diffraction peaks (both in detector position/TOF and Q-space) and -create an output [[PeaksWorkspace]] containing the result. - -This algorithm uses the InputWorkspace to determine the instrument in use, as well as the UB Matrix and Unit Cell of the sample used. -You can use the [[CopySample]] algorithm (with CopyLattice=1) to copy a UB matrix from -a PeaksWorkspace to another workspace. - -The algorithm operates by calculating the scattering direction (given the UB matrix) for a particular HKL, and determining whether that hits a detector. -The Max/MinDSpacing parameters are used to determine what HKL's to try. - -The parameters of WavelengthMin/WavelengthMax also limit the peaks attempted to those that can be detected/produced by your instrument. - -=== Using HKLPeaksWorkspace === - -If you specify the HKLPeaksWorkspace parameter, then the algorithm will use the list of HKL in that workspace as the -starting point of HKLs, instead of doing all HKLs within range of Max/MinDSpacing and WavelengthMin/WavelengthMax. - -A typical use case for this method is to use [[FindPeaksMD]] followed by [[IndexPeaks]] to find the HKL of each peak. -The HKLs found will be floats, so specify RoundHKL=True in PredictPeaks to predict the position at the exact integer HKL. -This may help locate the center of peaks. - -Another way to use this algorithm is to use [[CreatePeaksWorkspace]] to create a workspace with the desired number of peaks. -Use python or the GUI to enter the desired HKLs. If these are fraction (e.g. magnetic peaks) then make sure RoundHKL=False. - -*WIKI*/ - #include "MantidCrystal/PredictPeaks.h" #include "MantidDataObjects/Peak.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -374,4 +346,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/SCDCalibratePanels.cpp b/Code/Mantid/Framework/Crystal/src/SCDCalibratePanels.cpp index de3741beca44..eb88525e2174 100644 --- a/Code/Mantid/Framework/Crystal/src/SCDCalibratePanels.cpp +++ b/Code/Mantid/Framework/Crystal/src/SCDCalibratePanels.cpp @@ -1,72 +1,3 @@ -/*WIKI* - - -This algorithm calibrates sets of Rectangular Detectors in one instrument. -The initial path, time offset,panel widths, panel heights, panel locations and orientation are all -adjusted so the error in q positions from the theoretical q positions is minimized. Also, there -are optimize options that take into account sample position and the need for rigid rotations. - -Some features: - -1) Panels can be grouped. - All panels in a group will move the same way and rotate the same way. If rigid rotations are - used, each panel is rotated about the center of the instrument, along with panel pixels rotating - around the panel's center. The height and widths of the panels in a group will - all change by the same factor - -2) The user can select which quantities to keep fixed during the optimization. - -3) The results can be saved to an ISAW-like DetCal file or in an xml file that can be used with the LoadParameter algorithm. - -4) Results from a previous optimization can be applied before another optimization is done. - The Levenberg-Marquardt optimization algorithm is used. Later iterations may have too small of changes for the parameters to - get to another optimum value. Restarting allows for the consideration of parameter values further away and also can change - constraints for the parameter values. This is also useful when fine tuning parameters that do not influence the errors as - much as other parameters. - -5) There are several output tables indicating the results of the fit - A) ResultWorkspace contains the results from fitting. - -t0 is in microseconds - -L0 is in meters - -*Xoffset,*Yoffset,and *Zoffset are in meters - -*Xrot,*Yrot, and *Zrot are in degrees. Note that Zrot is done first, then Yrot , the Xrot. - - B)QErrorWorkspace contains the Error in Q values for each peak, along with other associated information about the peak - - C)CovarianceInfo contains the "correlations"(*100) between each of the parameters - - 6) Maximum changes in the quantities that are altered during optimization are now settable. - -== "A" Workflow == - -Optimizing all variables at once may not be the best option. The errors become too large, so optimization in several stages -subsets of the variables are optimized at each stage. - -First: NOTE that the input PeaksWorkspace does NOT CHANGE. This means you should be able to keep trying different sets of -variables until things look good. - -To work on another set of variables with the optimized first round of optimized values - -#Use Preprocessinstrument to apply the previous DetCal or xml file before optimizing AND - -#Change the name of the target DetCal file, in case the choice of variables is not good. Then you will not clobber the good -DetCal file. AND - -#Change the name of the ResultWorkspace in the properties list. This means you will have a copy of the results from the -previous trial(s)( along with chiSq values) to compare results. - -Do check the chiSquared values. If they do not decrease, you were close to a minimum and the optimization could not get back -to that minimum. It makes a large jump at the beginning. - - -== After Calibration == - -After calibration, you can save the workspace to Nexus (or Nexus processed) and get it back by loading in a later Mantid session. -You can copy the calibration to another workspace using the same instrument by means of the [[CopyInstrumentParameters]] algorithm. -To do so select the workspace, which you have calibrated as the InputWorkspace and the workspace you want to copy the calibration to, the OutputWorkspace. - -*WIKI*/ - #include "MantidCrystal/SCDCalibratePanels.h" #include "MantidAPI/Algorithm.h" #include "MantidAPI/ConstraintFactory.h" diff --git a/Code/Mantid/Framework/Crystal/src/SCDPanelErrors.cpp b/Code/Mantid/Framework/Crystal/src/SCDPanelErrors.cpp index 47cf04900827..93b045be3300 100644 --- a/Code/Mantid/Framework/Crystal/src/SCDPanelErrors.cpp +++ b/Code/Mantid/Framework/Crystal/src/SCDPanelErrors.cpp @@ -1,68 +1,3 @@ -/*WIKI* - *This fit function is used for calibrating RectangularDetectors by adjusting L0, time offset, panel width, -panel height, panel center, panel orientation, and allow for the sample being offset from the instrument center. - - -===Attributes=== -This fit function is used for calibrating RectangularDetectors by adjusting L0, time offset, panel width, -panel height, panel center, panel orientation, and allow for the sample being offset from the instrument center. - - -===Attributes=== -* a -The lattice parameter a -* b -The lattice parameter b -* c -The lattice parameter c -* alpha -The lattice parameter alpha in degrees -* beta -The lattice parameter beta in degrees -* gamma -The lattice parameter gamma in degrees -* PeakWorkspaceName-The name of the PeaksWorkspace in the Analysis Data Service. -:This peak must be indexed by a UB matrix whose lattice parameters are CLOSE to the above -:lattice paramters -* NGroups-The number of grouping of banks to be considered -* BankNames-a list of banknames separated by "/" or a "!" if the next bank is in a different group. -:Bank names from the same group belong together("Requirement" for use with the Fit algorithm) -* startX- -1 or starting position in the workspace( see below) to start calculating the outputs -* endX- -1 or 1+ ending position in the workspace( see below) to start calculating the outputs -* RotateCenters-Boolean. If false Rotations are only about the center of the banks. Otherwise rotations are ALSO -:around center of the instrument( For groups of banks, this will result in a rotation about the center of all pixels.) -* SampleOffsets-Boolean. A sample being off from the center of the goniometer can result in larger errors. - -===Workspace=== - -A Workspace2D with 1 spectra. The xvalues of the spectra are for each peak, the peak index repeated 3 times. The -y values are all zero and the errors are all 1.0 - -This spectra may have to be copied 3 times because of requirements from the fitting system. - -===Parameters=== -* l0- the initial Flight path in units from Peak.getL1 -* t0-Time offset in the same units returned with Peak.getTOF) -* SampleX-Sample x offset in the same units returned with Peak.getDetPos().norm() -* SampleY-Sample y offset in the same units returned with Peak.getDetPos().norm() -* SampleZ-Sample z offset in the same units returned with Peak.getDetPos().norm() -* f*_detWidthScale-panel Width for Group* in the same units returned with Peak.getDetPos().norm() -* f*_detHeightScale-panel Height for Group* in the same units returned with Peak.getDetPos().norm() -* f*_Xoffset-Panel Center x offsets for Group* banks in the same units returned with Peak.getDetPos().norm() -* f*_Yoffset-Panel Center y offsets for Group* banks in the same units returned with Peak.getDetPos().norm() -* f*_Zoffset-Panel Center z offsets for Group* banks in the same units returned with Peak.getDetPos().norm() -* f*_Xrot-Rotations(degrees) for Group* banks around "Center" in x axis direction -* f*_Yrot-Rotations(degrees) for Group* banks around "Center" in y axis direction -* f*_Zrot-Rotations(degrees) for Group* banks around "Center" in z axis direction -* SampleX -sample X offset in meters(Really Goniometer X offset) -* SampleY- sample Y offset in meters -* SampleZ- sample Z offset in meters - -The order of rotations correspond to the order used in all of Mantid. - -===Output=== -The argument out from function1D ,for each peak, gives the error in qx, qy, and qz. -The theoretical values for the qx, qy and qz are found as follows: -* Calculating the best fitting UB for the given indexing and parameter values -* Find U -* The theoretical UB is then U*B0 where B0 is formed from the supplied lattice parameters -* The theoretical qx,qy,and qz can be obtained by multiplying the hkl for the peak by this matrix(/2π) - - *WIKI*/ #include "MantidCrystal/SCDPanelErrors.h" #include "MantidCrystal/SCDCalibratePanels.h" #include "MantidAPI/WorkspaceFactory.h" diff --git a/Code/Mantid/Framework/Crystal/src/SaveHKL.cpp b/Code/Mantid/Framework/Crystal/src/SaveHKL.cpp index b11cc8805646..1eacba2ab53f 100644 --- a/Code/Mantid/Framework/Crystal/src/SaveHKL.cpp +++ b/Code/Mantid/Framework/Crystal/src/SaveHKL.cpp @@ -1,37 +1,3 @@ -/*WIKI* -Used same format that works successfully in GSAS and SHELX from ISAW: - -hklFile.write('%4d%4d%4d%8.2f%8.2f%4d%8.4f%7.4f%7d%7d%7.4f%4d%9.5f%9.4f\n'% (H, K, L, FSQ, SIGFSQ, hstnum, WL, TBAR, CURHST, SEQNUM, TRANSMISSION, DN, TWOTH, DSP)) - -HKL is flipped by -1 due to different q convention in ISAW vs Mantid. - -FSQ = integrated intensity of peak (scaled) - -SIGFSQ = sigma from integrating peak - -hstnum = number of sample orientation (starting at 1) - -WL = wavelength of peak - -TBAR = output of absorption correction (-log(transmission)/mu) - -CURHST = run number of sample - -SEQNUM = peak number (unique number for each peak in file) - -TRANSMISSION = output of absorption correction (exp(-mu*tbar)) - -DN = detector bank number - -TWOTH = two-theta scattering angle - -DSP = d-Spacing of peak (Angstroms)/TR - -Last line must have all 0's - - - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidCrystal/SaveHKL.h" @@ -572,4 +538,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/SaveIsawPeaks.cpp b/Code/Mantid/Framework/Crystal/src/SaveIsawPeaks.cpp index 197fac0b50f4..86b384c22a61 100644 --- a/Code/Mantid/Framework/Crystal/src/SaveIsawPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/SaveIsawPeaks.cpp @@ -1,12 +1,3 @@ -/*WIKI* - - - -Save a PeaksWorkspace to a ISAW-style ASCII .peaks file. - - - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidCrystal/SaveIsawPeaks.h" diff --git a/Code/Mantid/Framework/Crystal/src/SaveIsawUB.cpp b/Code/Mantid/Framework/Crystal/src/SaveIsawUB.cpp index 54e8e3aea902..b60282afa10b 100644 --- a/Code/Mantid/Framework/Crystal/src/SaveIsawUB.cpp +++ b/Code/Mantid/Framework/Crystal/src/SaveIsawUB.cpp @@ -1,16 +1,3 @@ -/*WIKI* - -This saves a workspace's UB matrix to an ISAW-style UB matrix text file. - -The resulting file can be loaded again into another workspace by using the [[LoadIsawUB]] algorithm. - -The matrix saved is the transpose of the UB Matrix. -The UB matrix maps the column vector (h,k,l ) to the column vector (q'x,q'y,q'z). -|Q'|=1/dspacing and its coordinates are a right-hand coordinate system where x -is the beam direction and z is vertically upward. (IPNS convention) - - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidCrystal/SaveIsawUB.h" #include "MantidKernel/Matrix.h" @@ -203,4 +190,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/SelectCellOfType.cpp b/Code/Mantid/Framework/Crystal/src/SelectCellOfType.cpp index b39113de7629..317d8c4d3bc8 100644 --- a/Code/Mantid/Framework/Crystal/src/SelectCellOfType.cpp +++ b/Code/Mantid/Framework/Crystal/src/SelectCellOfType.cpp @@ -1,25 +1,3 @@ -/*WIKI* - - -Given a PeaksWorkspace with a UB matrix corresponding to a Niggli reduced cell, -this algorithm will allow the user to select a conventional cell with a -specified cell type and centering. If the apply flag is not set, the -information about the selected cell will just be displayed. If the apply -flag is set, the UB matrix associated with the sample in the PeaksWorkspace -will be updated to a UB corresponding to the selected cell AND the peaks will -be re-indexed using the new UB matrix. NOTE: The possible conventional cells, -together with the corresponding errors in the cell scalars can be seen by -running the ShowPossibleCells algorithm, provided the stored UB matrix -corresponds to a Niggli reduced cell. - -This algorithm is based on the paper: "Lattice Symmetry and Identification --- The Fundamental Role of Reduced Cells in Materials Characterization", -Alan D. Mighell, Vol. 106, Number 6, Nov-Dec 2001, Journal of Research of -the National Institute of Standards and Technology, available from: -nvlpubs.nist.gov/nistpubs/jres/106/6/j66mig.pdf. - - -*WIKI*/ #include "MantidCrystal/SelectCellOfType.h" #include "MantidCrystal/IndexPeaks.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -197,4 +175,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/SelectCellWithForm.cpp b/Code/Mantid/Framework/Crystal/src/SelectCellWithForm.cpp index 8332b9d49b5f..f790dd0fe805 100644 --- a/Code/Mantid/Framework/Crystal/src/SelectCellWithForm.cpp +++ b/Code/Mantid/Framework/Crystal/src/SelectCellWithForm.cpp @@ -1,25 +1,3 @@ -/*WIKI* - - -Given a PeaksWorkspace with a UB matrix corresponding to a Niggli reduced cell, -this algorithm will allow the user to select a conventional cell corresponding -to a specific form number from the Mighell paper. If the apply flag is not set, -the information about the selected cell will just be displayed. If the apply -flag is set, the UB matrix associated with the sample in the PeaksWorkspace -will be updated to a UB corresponding to the selected cell AND the peaks will -be re-indexed using the new UB matrix. NOTE: The possible conventional cells, -together with the corresponding errors in the cell scalars can be seen by -running the ShowPossibleCells algorithm, provided the stored UB matrix -corresponds to a Niggli reduced cell. - -This algorithm is based on the paper: "Lattice Symmetry and Identification --- The Fundamental Role of Reduced Cells in Materials Characterization", -Alan D. Mighell, Vol. 106, Number 6, Nov-Dec 2001, Journal of Research of -the National Institute of Standards and Technology, available from: -nvlpubs.nist.gov/nistpubs/jres/106/6/j66mig.pdf. - - -*WIKI*/ #include "MantidCrystal/SelectCellWithForm.h" #include "MantidCrystal/IndexPeaks.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -235,4 +213,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/SetGoniometer.cpp b/Code/Mantid/Framework/Crystal/src/SetGoniometer.cpp index ca2ce08e888d..5a2fd9ef5625 100644 --- a/Code/Mantid/Framework/Crystal/src/SetGoniometer.cpp +++ b/Code/Mantid/Framework/Crystal/src/SetGoniometer.cpp @@ -1,21 +1,3 @@ -/*WIKI* - - - -Use this algorithm to define your goniometer. Enter each axis in the order of rotation, starting with the one farthest from the sample. - -You may enter up to 6 axes, for which you must define (separated by commas): -* The name of the axis, which MUST match the name in your sample logs. You can specify a number, and a log value will be created (GoniometerAxis?_FixedValue, where ? is the axis number) -* The X, Y, Z components of the vector of the axis of rotation. Right-handed coordinates with +Z=beam direction; +Y=Vertically up (against gravity); +X to the left. -* The sense of rotation as 1 or -1: 1 for counter-clockwise, -1 for clockwise rotation. - -The run's sample logs will be used in order to determine the actual angles of rotation: for example, if you have an axis called 'phi', then the first value of the log called 'phi' will be used as the rotation angle. Units are assumed to be degrees. - -The "Universal" goniometer at SNS is equivalent to Axis0 tied to the "omega" log pointing vertically upward, Axis1 tied to "chi" log, pointing along the beam, and Axis2 tied to "phi", pointing vertically upward. - -SetGoniometer(w,"Universal") is the same as SetGoniometer(w,Axis0="omega,0,1,0,1",Axis1="chi,0,0,1,1",Axis1="phi,0,1,0,1") - -*WIKI*/ #include "MantidCrystal/SetGoniometer.h" #include "MantidKernel/System.h" #include @@ -172,4 +154,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/SetSpecialCoordinates.cpp b/Code/Mantid/Framework/Crystal/src/SetSpecialCoordinates.cpp index 642a1d660415..7cd4ddb6a080 100644 --- a/Code/Mantid/Framework/Crystal/src/SetSpecialCoordinates.cpp +++ b/Code/Mantid/Framework/Crystal/src/SetSpecialCoordinates.cpp @@ -1,9 +1,3 @@ -/*WIKI* -[[MDEventWorkspace]]s and [[MDHistoWorkspace]]s can be used with any type of coordinate system. On the other hand [[PeaksWorkspace]]s may be plotted either in QLab, QSample or HKL. There is an inherent link between a PeaksWorkspace and a MDWorkspace in that an MDWorkspace may utilise the same coordinate systems as the PeaksWorkspaces. For example, workspaces created via [[ConvertToMD]] or [[ConvertToDiffractionMDWorkspace]] may be generated in a special set of V3D coordinates, which are the same as those for the PeaksWorkspace (QLab, QSample, HKL). Amongst other usages, in order to be able to simultaneously plot MDWorkspaces and PeaksWorkspaces, it is necessary to be able to determine what (if any) special coordinates the Workspaces were created in, or are currently using. - -This algorithm is for backwards compatibility. The special coordinates flags are new, and legacy workspaces will need to be corrected in order for them to work as expected with the Mantid tools. -*WIKI*/ - #include "MantidCrystal/SetSpecialCoordinates.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidAPI/IMDWorkspace.h" diff --git a/Code/Mantid/Framework/Crystal/src/SetUB.cpp b/Code/Mantid/Framework/Crystal/src/SetUB.cpp index e0f24543014b..9e862a781f16 100644 --- a/Code/Mantid/Framework/Crystal/src/SetUB.cpp +++ b/Code/Mantid/Framework/Crystal/src/SetUB.cpp @@ -1,10 +1,3 @@ -/*WIKI* -The algorithms will attach an OrientedLattice object to a sample in the workspace. For MD workspaces, you can select to which sample to attach it. If nothing entered, it will attach to all. If bad number is enetered, it will attach to first sample. - -If UB matrix elements are entered, lattice parameters and orientation vectors are ignored. The algorithm will throw an exception if the determinant is 0. -If the UB matrix is all zeros (default), it will calculate it from lattice parameters and orientation vectors. The algorithm will throw an exception if u and v are collinear, or one of them is very small in magnitude. -*WIKI*/ - #include "MantidCrystal/SetUB.h" #include "MantidKernel/System.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/Crystal/src/ShowPeakHKLOffsets.cpp b/Code/Mantid/Framework/Crystal/src/ShowPeakHKLOffsets.cpp index 6e2cb82b4d0c..f6e949d6fe86 100644 --- a/Code/Mantid/Framework/Crystal/src/ShowPeakHKLOffsets.cpp +++ b/Code/Mantid/Framework/Crystal/src/ShowPeakHKLOffsets.cpp @@ -1,11 +1,3 @@ -/*WIKI* -Creates a TableWorkspace with offsets of h,k,and l from an integer along with bank and run number. - -The maximum of these offsets is also included. - -Histograms, scatterplots, etc. of this data can be used to detect problems. - -*WIKI*/ #include "MantidDataObjects/PeaksWorkspace.h" #include "MantidAPI/WorkspaceProperty.h" #include "MantidKernel/Property.h" @@ -135,5 +127,3 @@ namespace Mantid } //namespace Crystal } //namespace Mantid - - diff --git a/Code/Mantid/Framework/Crystal/src/ShowPossibleCells.cpp b/Code/Mantid/Framework/Crystal/src/ShowPossibleCells.cpp index 0fc69e18ba6f..b4d678d40502 100644 --- a/Code/Mantid/Framework/Crystal/src/ShowPossibleCells.cpp +++ b/Code/Mantid/Framework/Crystal/src/ShowPossibleCells.cpp @@ -1,22 +1,3 @@ -/*WIKI* - - -Given a PeaksWorkspace with a UB matrix corresponding to a Niggli reduced cell, -this algorithm will display a list of possible conventional cells. The -max scalar error property sets a limit on the maximum allowed error in the -cell scalars, to restrict the list to possible cells that are a good match -for the current reduced cell. The list can also be forced to contain only -the best fitting conventional cell for each Bravais lattice type, by setting -the best only property to true. - -This algorithm is based on the paper: "Lattice Symmetry and Identification --- The Fundamental Role of Reduced Cells in Materials Characterization", -Alan D. Mighell, Vol. 106, Number 6, Nov-Dec 2001, Journal of Research of -the National Institute of Standards and Technology, available from: -nvlpubs.nist.gov/nistpubs/jres/106/6/j66mig.pdf. - - -*WIKI*/ #include "MantidCrystal/ShowPossibleCells.h" #include "MantidDataObjects/PeaksWorkspace.h" #include "MantidDataObjects/Peak.h" @@ -129,4 +110,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/SortHKL.cpp b/Code/Mantid/Framework/Crystal/src/SortHKL.cpp index 7a8071990565..53b3a2939827 100644 --- a/Code/Mantid/Framework/Crystal/src/SortHKL.cpp +++ b/Code/Mantid/Framework/Crystal/src/SortHKL.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Peaks are sorted first by H, then K, and then L. For equivalent HKL in the point group, the intensity is averaged and all the equivalent HKLs have the same average intensity. Outliers with zscore > 3 from each group of equivalent HKLs are not included in the average. - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidCrystal/SortHKL.h" @@ -241,4 +237,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/SortPeaksWorkspace.cpp b/Code/Mantid/Framework/Crystal/src/SortPeaksWorkspace.cpp index 5adddec7d1b8..ec49f14cb27e 100644 --- a/Code/Mantid/Framework/Crystal/src/SortPeaksWorkspace.cpp +++ b/Code/Mantid/Framework/Crystal/src/SortPeaksWorkspace.cpp @@ -1,17 +1,3 @@ -/*WIKI* -Sort a peaks workspace by a single column. Sorting of that PeaksWorkspace by that column can either happen in an ascending or descending fashion. The algorithm can either be used to generate a new OutputWorkspace, which is sorted as requested, or to perform an in-place sort of the InputWorkspace. - - *WIKI*/ -/*WIKI_USAGE* -The following show some python usage examples. - -1. Sorting to form a newly sorted copy of the input workspace. - sorted_workspace = SortPeaksWorkspace(InputWorkspace=workspace_to_sort, ColumnNameToSortBy='k') - -2. Sorting performed in-place. - workspace_to_sort_inplace = SortPeaksWorkspace(InputWorkspace = workspace_to_sort_inplace, ColumnNameToSortBy='l') - -*WIKI_USAGE*/ #include "MantidCrystal/SortPeaksWorkspace.h" #include "MantidKernel/PropertyWithValue.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/Crystal/src/TOFExtinction.cpp b/Code/Mantid/Framework/Crystal/src/TOFExtinction.cpp index e955f20a76c8..a8c6ddd99929 100644 --- a/Code/Mantid/Framework/Crystal/src/TOFExtinction.cpp +++ b/Code/Mantid/Framework/Crystal/src/TOFExtinction.cpp @@ -1,25 +1,3 @@ -/*WIKI* - Extinction Correction Program - The program is to apply extinction correction for single crystal diffraction - intensity data measured at the TOPAZ beam line, Spallation Neutron Source, - Oak Ridge National Laboratory. The Zachariasen (1967) and Becker & Coppens -(1974) methods, initially developed for monochromatic-source, have been adopted - for time-of-flight neutron-beam diffraction. The TOF formulation is necessary - for correcting the nominal variations in crystal mosaic distributions with changes - in neutron wavelength, Tomiyoshi et.al(1980). - - Input is Fsq's saved in peaks workspace - The extinction coefficients are obtained from measured Fo_squared through - an interation process,Maslen & Spadaccini(1993). - Output is Fsq's corrected for extinction. - - Xiaoping Wang, January, 2012 - - Zachariasen, W. H. (1967). Acta Cryst. A23, 558. - Becker, P. J. & Coppens, P. (1974). Acta Cryst. A30, 129. - S. Tomiyoshi, M. Yamada and H. Watanabe, Acta Cryst. (1980). A36, 600. - Maslen, E. N. & Spadaccini, N. Acta Cryst. (1993). A49, 661. -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidCrystal/TOFExtinction.h" @@ -444,4 +422,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/Crystal/src/TransformHKL.cpp b/Code/Mantid/Framework/Crystal/src/TransformHKL.cpp index 05cba9379cf0..8b43af9f5d34 100644 --- a/Code/Mantid/Framework/Crystal/src/TransformHKL.cpp +++ b/Code/Mantid/Framework/Crystal/src/TransformHKL.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -Given a PeaksWorkspace with a UB matrix stored with the sample, this algoritm will accept a 3x3 transformation matrix M, change UB to UB*M-inverse and map each (HKL) vector to M*(HKL). For example, the transformation with elements 0,1,0,1,0,0,0,0,-1 will interchange the H and K values and negate L. This algorithm should allow the usr to perform any required transformation of the Miller indicies, provided that transformation has a positive determinant. If a transformation with a negative or zero determinant is entered, the algorithm with throw an exception. The 9 elements of the transformation must be specified as a comma separated list of numbers. - - -*WIKI*/ #include "MantidCrystal/TransformHKL.h" #include "MantidKernel/System.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -200,4 +193,3 @@ namespace Crystal } // namespace Mantid } // namespace Crystal - diff --git a/Code/Mantid/Framework/CurveFitting/src/Abragam.cpp b/Code/Mantid/Framework/CurveFitting/src/Abragam.cpp index b2a101e99bd4..4075b582a6eb 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Abragam.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Abragam.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Abragam fitting function for use by Muon scientists defined by -: \mbox{A}\times cos( 2 \pi \times {Omega} \times {x} + {Phi} ) \times \exp(-{Sigma}^2 \times Tau^2 \times {x}^2 \times ( exp ( {x} / Tau ) - 1 + {x} / Tau ) ) - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/BSpline.cpp b/Code/Mantid/Framework/CurveFitting/src/BSpline.cpp index 3b5c9cdc61ee..c1ffb8492db9 100644 --- a/Code/Mantid/Framework/CurveFitting/src/BSpline.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/BSpline.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -This function creates spline using the set of points and interpolates the input between them. - -First and second derivatives from the spline can be calculated by using the derivative1D function. - -BSpline function takes a set of attributes and a set of parameters. The first attrbiute is 'n' which has integer type and sets the number of interpolation points. -The parameter names have the form 'yi' where 'y' is letter 'y' and 'i' is the parameter's index starting from 0 and have the type double. Likewise, the attribute names have the form 'xi'. - - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/BackToBackExponential.cpp b/Code/Mantid/Framework/CurveFitting/src/BackToBackExponential.cpp index a51f84c1ff7c..7b2ce9d87ffa 100644 --- a/Code/Mantid/Framework/CurveFitting/src/BackToBackExponential.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/BackToBackExponential.cpp @@ -1,29 +1,3 @@ -/*WIKI* -A back-to-back exponential peakshape function is defined as: - -: I\frac{AB}{2(A+B)}\left[ \exp \left( \frac{A[AS^2+2(x-X0)]}{2}\right) \mbox{erfc}\left( \frac{AS^2+(x-X0)}{S\sqrt{2}} \right) + \exp \left( \frac{B[BS^2-2(x-X0)]}{2} \right) \mbox{erfc} \left( \frac{[BS^2-(x-X0)]}{S\sqrt{2}} \right) \right]. - -This peakshape function represent the convolution of back-to-back exponentials and a gaussian function and is designed to -be used for the data analysis of time-of-flight neutron powder diffraction data, see Ref. 1. - -The parameters A and B represent the absolute value of the exponential rise and decay constants (modelling the neutron pulse coming from the moderator) -and S represent the standard deviation of the gaussian. The parameter X0 is the location of the peak; more specifically it represent -the point where the exponentially modelled neutron pulse goes from being exponentially rising to exponentially decaying. I is the integrated intensity. - -For information about how to convert Fullprof back-to-back exponential parameters into those used for this function see [[CreateBackToBackParameters]]. - -References - -1. R.B. Von Dreele, J.D. Jorgensen & C.G. Windsor, J. Appl. Cryst., 15, 581-589, 1982 - -The figure below illustrate this peakshape function fitted to a TOF peak: - -[[Image:BackToBackExponentialWithConstBackground.png]] - -== Properties == - -''Note the initial default guesses for in particular A and B are only based on fitting a couple of peaks in a dataset collected on the ISIS's HRPD instrument.'' - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/BivariateNormal.cpp b/Code/Mantid/Framework/CurveFitting/src/BivariateNormal.cpp index 78160984500a..d804ee1c3528 100644 --- a/Code/Mantid/Framework/CurveFitting/src/BivariateNormal.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/BivariateNormal.cpp @@ -1,43 +1,3 @@ -/*WIKI* - - Provides a peak shape function interface for a peak on one time slice of a Rectangular detector. - -Formula: V=Background+Intensity*Normal( μx, μy, σx, σy) - -The Normal(..) is the Normal probability density function. Its integral over all x(col) and y(row) values is one. This means that Intensity is the total intensity with background removed. - - -===Attributes=== - -There is only one Attribute: '''CalcVariances'''. This attribute is boolean. - -If true, the variances are calculated from the data, given the means, variances and covariance. -Otherwise they will become parameters and fit. - -CalcVariances = true gives better/more stable results for peaks interior to the Rectangular Detector. For peaks close to the edge, CalcVariances should be false. - -===Parameters=== - -# Background - The background of the peak -# Intensity - The intensity of data for the peak on this time slice -# Mcol - The col(x) of the center of the peak -# Mrow - The row(y) of the center of the peak on this slice -# ------- If CalcVariances is false, the following 3 parameters are also fit--------- -# SScol -The variance of the column(x) values in the peak for this time slice -# SSrow - The variance of the row(y) values in the peak for this time slice -# SSrc - The covariance of the row(x) and column(y) values in the peak for this time slice - -===Usage=== -The workspace can be "any" MatrixWorkspace where -# dataY(1) is the column(x) values for the pixels to be considered -# dataY(2) is the row(y) values for the pixels to be considered -# dataY(0)is the experimental data at the corresponding row and column for a panel and time slice( or merged time slices or...) - -The data can have missing row and column values and need not represent a square or contiguous subregion of a panel - -The values for out in function1D are, for each pixel, the difference of V(see formula) and dataY(0). - - *WIKI*/ #include "MantidCurveFitting/BivariateNormal.h" #include "MantidCurveFitting/BoundaryConstraint.h" #include "MantidAPI/MatrixWorkspace.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/CalculateGammaBackground.cpp b/Code/Mantid/Framework/CurveFitting/src/CalculateGammaBackground.cpp index c1329b14d724..3724b8cd5bf5 100644 --- a/Code/Mantid/Framework/CurveFitting/src/CalculateGammaBackground.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/CalculateGammaBackground.cpp @@ -1,13 +1,3 @@ -/*WIKI* -This algorithm is currently used by the Vesuvio spectrometer at ISIS to correct for background produced by photons -that are produced when the neutrons are absorbed by the shielding on the instrument. It only corrects the forward scattering -detector banks. - -Two workspaces are produced: the calculated background and a corrected workspace where the input workspace has been -corrected by the background. The background is computed by a simple simulation of the expected count across all of the foils. The -corrected workspace counts are computed by calculating a ratio of the expected counts at the detector to the integrated foil counts (\beta) -and then the final corrected count rate \displaystyle c_f is defined as \displaystyle c_f = c_i - \beta c_b. -*WIKI*/ #include "MantidCurveFitting/CalculateGammaBackground.h" #include "MantidCurveFitting/ComptonProfile.h" #include "MantidCurveFitting/ConvertToYSpace.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/Chebyshev.cpp b/Code/Mantid/Framework/CurveFitting/src/Chebyshev.cpp index af3115f51c71..3f912f80818f 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Chebyshev.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Chebyshev.cpp @@ -1,29 +1,3 @@ -/*WIKI* -This function calculates a partial Chebyshev expansion - -: \sum_{n=0}^N a_n T_n(a+bx) - -where a_n are the expansion coefficients and T_n(x) are -Chebyshev polynomials of the first kind defined by the reccurence relation - -:T_0(x)=1 \,\! - -:T_1(x)=x \,\! - -:T_{n+1}(x)= 2xT_n(x)-T_{n-1}(x) \,\! - -Coefficients a and b are defined to map the fitting interval -into [-1,1] interval. - -Chebyshev function has tree attributes (non-fitting parameters). First is 'n' which has -integer type and sets the expansion order and creates n+1 expansion coefficients (fitting -parameters). The parameter names have the form 'Ai' where 'A' is letter 'A' and 'i' is the -parameter's index starting from 0. - -The other two attributes are doubles 'StartX' and 'EndX' which define the expansion (fitting) interval. - - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp b/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp index 26583fcf430c..0c615888a88a 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp @@ -1,14 +1,3 @@ -/*WIKI* -The final unit of the x-axis is changed to momentum (Y) space as defined by -
Y = 0.2393\frac{M}{\epsilon_i^{0.1}}(\omega - \frac{q^2}{2M})
-where M is the mass in atomic mass units, \displaystyle\epsilon is the incident energy, \displaystyle\omega -is the energy change and q is defined as -\sqrt{(k_0^2 + k_1^2 - 2k_0k_1\cos(\theta))}. - -The TOF is used to calculate \displaystyle\epsilon_i and the \displaystyle1/\epsilon dependence causes an increasing set of TOF values to be mapped -to a decreasing set of \displaystyle Y values. As a result the final Y-space values are reversed to give a workspace with monotonically increasing Y values. -*WIKI*/ - #include "MantidCurveFitting/ConvertToYSpace.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/Convolution.cpp b/Code/Mantid/Framework/CurveFitting/src/Convolution.cpp index db17dd1d44b8..a3ef49747fdc 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Convolution.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Convolution.cpp @@ -1,21 +1,3 @@ -/*WIKI* -Convolution is an extension of [[CompositeFunction]] which performs convolution of its members using Fast Fourier Transform. - -: f(x)=\int\limits_{A}^{B}R(x-\xi)F(\xi)\mbox{d}\xi - -Here R is the first member function and F is the second member. A Convolution must have exactly two member functions. The members can be composite if necessary. Interval [A,B] is the fitting interval. The function is evaluated by first transforming R and F to the Fourier domain, multiplying the transforms, then transforming back to the original domain. The GSL FFT routines are used to do the actual transformations. - -It should be noted that the two functions (R and F) are evaluated on different intervals. F is computed on [A,B] while R is computed on [-\Delta/2, \Delta/2], where \Delta=B-A. - -In the following example a [[Gaussian]] is convolved with a box function: - -[[Image:Convolution.png]] - -Note that the box function is defined on interval [-5, 5]: - -[[Image:Box.png]] - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -335,4 +317,3 @@ void Convolution::refreshResolution()const } // namespace CurveFitting } // namespace Mantid - diff --git a/Code/Mantid/Framework/CurveFitting/src/ConvolveWorkspaces.cpp b/Code/Mantid/Framework/CurveFitting/src/ConvolveWorkspaces.cpp index d30ae52af163..f51404e7da63 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ConvolveWorkspaces.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ConvolveWorkspaces.cpp @@ -1,9 +1,3 @@ -/*WIKI* - - -Convolution of two workspaces using [[Convolution]] from CurveFitting. Workspaces must have the same number of spectra. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -113,4 +107,3 @@ void ConvolveWorkspaces::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/CurveFitting/src/CubicSpline.cpp b/Code/Mantid/Framework/CurveFitting/src/CubicSpline.cpp index 9d81fd3f148f..36e9c7af9616 100644 --- a/Code/Mantid/Framework/CurveFitting/src/CubicSpline.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/CubicSpline.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -This function creates spline using the set of points and interpolates the input between them. - -First and second derivatives from the spline can be calculated by using the derivative1D function. - -CubicSpline function takes a set of attributes and a set of parameters. The first attrbiute is 'n' which has integer type and sets the number of interpolation points. -The parameter names have the form 'yi' where 'y' is letter 'y' and 'i' is the parameter's index starting from 0 and have the type double. Likewise, the attribute names have the form 'xi'. - - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/DiffRotDiscreteCircle.cpp b/Code/Mantid/Framework/CurveFitting/src/DiffRotDiscreteCircle.cpp index f5f3a6344cc2..62d7380dac2a 100644 --- a/Code/Mantid/Framework/CurveFitting/src/DiffRotDiscreteCircle.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/DiffRotDiscreteCircle.cpp @@ -1,63 +1,3 @@ -/*WIKI* -== Summary == - -This fitting function models the dynamics structure factor of a particle undergoing discrete jumps on N-sites -evenly distributed in a circle. The particle can only jump to neighboring sites. -This is the most common type of discrete rotational diffusion in a circle. - -Markov model for jumps between neighboring sites: - -
\frac{d}{dt} p_j(t) = \frac{1}{\tau} [p_{j-1}(t) -2 p_j(t) + p_{j+1}(t)]
- -The Decay fitting parameter \tau is the inverse of the transition rate. This, along with the circle radius r, conform the two fundamental fitting parameters of the structure factor S(Q,E): - -
S(Q,E) \equiv = \int e^{-iEt/\hbar} I(Q,t) dt = A_0(Q,r) \delta (E) + \frac{1}{\pi} \sum_{l=1}^{N-1} A_l (Q,r) \frac{\hbar \tau_l^{-1}}{(\hbar \tau_l^{-1})^2+E^2}
- -
A_l(Q,r) = \frac{1}{N} \sum_{k=1}^{N} j_0( 2 Q r sin(\frac{\pi k}{N}) ) cos(\frac{2\pi lk}{N})
- -
\tau_l^{-1} = 4 \tau^{-1} sin^2(\frac{\pi l}{N})
- -The transition rate, expressed in units of energy is h\tau^{-1}, with h = 4.135665616 meV THz. - -== Example: Methyl Rotations == -Methyl Rotations can be modelled setting N=3. In this case, the inelastic part reduces to a single Lorentzian: - -
S(Q,E) = A_0(Q,r) \delta (E) + \frac{2}{\pi} A_1 (Q,r) \frac{3 \hbar \tau^{-1}}{(3 \hbar \tau^{-1})^2+E^2}
- -If, alternatively, one models these dynamics using the [[Lorentzian]] function provided in Mantid: - -
S(Q,E) = A \delta (\omega) + \frac{B}{\pi} \left( \frac{\frac{\Gamma}{2}}{(\frac{\Gamma}{2})^2 + (\hbar\omega)^2}\right)
-Then: -
B = \frac{1}{\pi}h A_1
-
\Gamma = \frac{3}{\pi} h\tau^{-1} = 3.949269754 meV\cdot THz\cdot \tau^{-1}
- -== Properties == - -{| border="1" cellpadding="5" cellspacing="0" -!Order -!Name -!Default -!Description -|- -|1 -|Intensity -|1.0 -|Intensity of the peak [arbitrary units] -|- -|2 -|Radius -|1.0 -|Circle radius [Angstroms] -|- -|3 -|Decay -|1.0 -|inverse of the transition rate (ps if energy in meV; ns if energy in \mueV) -|} - -[[Category:Fit_functions]] -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/DiffSphere.cpp b/Code/Mantid/Framework/CurveFitting/src/DiffSphere.cpp index 29d81b65ca08..e817179a9d3f 100644 --- a/Code/Mantid/Framework/CurveFitting/src/DiffSphere.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/DiffSphere.cpp @@ -1,50 +1,3 @@ -/*WIKI* -== Summary == - -This fitting function models the dynamics structure factor of a particle undergoing continuous diffusion but confined to a spherical volume. According to Volino and Dianoux -[http://apps.webofknowledge.com/InboundService.do?SID=4Bayo9ujffV3CUc9Qx8&product=WOS&UT=A1980KQ74800002&SrcApp=EndNote&DestFail=http%3A%2F%2Fwww.webofknowledge.com&Init=Yes&action=retrieve&Func=Frame&customersID=ResearchSoft&SrcAuth=ResearchSoft&IsProductCode=Yes&mode=FullRecord], - -
-S(Q,E\equiv \hbar \omega) = A_{0,0}(Q\cdot R) \delta (\omega) + \frac{1}{\pi} \sum_{l=1}^{N-1} (2l+1) A_{n,l} (Q\cdot R) \frac{x_{n,l}^2 D/R^2}{[x_{n,l}^2 D/R^2]^21+\omega^2}, - -A_{n,l} = \frac{6x_{n,l}^2}{x_{n,l}^2-l(l+1)} [\frac{QRj_{l+1}(QR) - lj_l(QR)}{(QR)^2 - x_{n,l}^2}]^2 -
- -Because of the spherical symmetry of the problem, the structure factor is expressed in terms of the j_l(z) spherical Bessel functions. Furthermore, the requirement that no particle flux can escape the sphere leads to the following boundary condition[http://apps.webofknowledge.com/InboundService.do?SID=4Bayo9ujffV3CUc9Qx8&product=WOS&UT=A1980KQ74800002&SrcApp=EndNote&DestFail=http%3A%2F%2Fwww.webofknowledge.com&Init=Yes&action=retrieve&Func=Frame&customersID=ResearchSoft&SrcAuth=ResearchSoft&IsProductCode=Yes&mode=FullRecord]: - -
\frac{d}{dr}j_l(rx_{n,l}/R)|_{r=R}=0 \,\,\,\, \forall l
- -The roots of this set of equations are the numerical coefficients x_{n,l} . - -The fit function DiffSphere has an elastic part, modelled by fitting function ElasticDiffSphere and an inelastic part, modelled by InelasticDiffSphere. - -== Properties == - -{| border="1" cellpadding="5" cellspacing="0" -!Order -!Name -!Default -!Description -|- -|1 -|Intensity -|1.0 -|Intensity of the peak [arbitrary units] -|- -|2 -|Radius -|2.0 -|Sphere radius [Ã…] -|- -|3 -|Diffusion -|0.05 -|Diffusion constant [Ã…{}^2/ps \equiv 10 \cdot (10^{-5} cm^2/s)] -|} - -[[Category:Fit_functions]] -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/ExpDecay.cpp b/Code/Mantid/Framework/CurveFitting/src/ExpDecay.cpp index b5faeaeffbb3..2bb260c28274 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ExpDecay.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ExpDecay.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Exponential decay function is defined by -: \mbox{Height}\times \exp(-\frac{x}{\mbox{Lifetime}}) - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/ExpDecayMuon.cpp b/Code/Mantid/Framework/CurveFitting/src/ExpDecayMuon.cpp index c8c09e51d64f..c99e42431ea9 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ExpDecayMuon.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ExpDecayMuon.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Exponential decay for use by Muon scientists defined by -: \mbox{A}\times \exp(-{Lambda} \times {x}) - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/ExpDecayOsc.cpp b/Code/Mantid/Framework/CurveFitting/src/ExpDecayOsc.cpp index a6f24553a6b2..91c85dff1a94 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ExpDecayOsc.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ExpDecayOsc.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Oscillation exponential decay function is defined by -: \mbox{A}\times \exp(-{Lambda} \times {x}) \times cos( 2 \pi \times {Frequency} \times {x} + {Phi} ) - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/Fit.cpp b/Code/Mantid/Framework/CurveFitting/src/Fit.cpp index 44ae684114fd..8fff51ac0216 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Fit.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Fit.cpp @@ -1,228 +1,3 @@ -/*WIKI* - -=== Additional properties for a 1D function and a MatrixWorkspace === -If Function defines a one-dimensional function and InputWorkspace is a [[MatrixWorkspace]] -the algorithm will have these additional properties: - -{| border="1" cellpadding="5" cellspacing="0" -!Name -!Direction -!Type -!Default -!Description -|- -|WorkspaceIndex -|Input -|integer -|0 -|The spectrum to fit, using the workspace numbering of the spectra -|- -|StartX -|Input -|double -|Start of the spectrum -|An X value in the first bin to be included in the fit -|- -|EndX -|Input -|double -|End of the spectrum -|An X value in the last bin to be included in the fit -|} - -=== Overview === - -This is a generic algorithm for fitting data in a Workspace with a function. -The workspace must have the type supported by the algorithm. Currently supported -types are: [[MatrixWorkspace]] for fitting with a [[IFunction1D]] and -[[IMDWorkspace]] for fitting with [[IFunctionMD]]. After Function and InputWorkspace -properties are set the algorithm may decide that it needs more information from -the caller to locate the fitting data. For example, if a spectrum in a MatrixWorkspace -is to be fit with a 1D function it will need to know at least the index of that spectrum. -To request this information Fit dynamically creates relevant properties which the caller -can set. Note that the dynamic properties depend both on the workspace and the function. -For example, the data in a MatrixWorkspace can be fit with a 2D function. In this case all -spectra will be used in the fit and no additional properties will be declared. The Function -property must be set before any other. - -The function and the initial values for its parameters are set with the Function property. -A function can be simple or composite. A [[:Category:Fit_functions|simple function]] has a -name registered with Mantid framework. The Fit algorithm creates an instance of a function -by this name. A composite function is an arithmetic sum of two or more functions (simple or -composite). Each function has a number of named parameters, the names are case sensitive. -All function parameters will be used in the fit unless some of them are tied. Parameters -can be tied by setting the Ties property. A tie is a mathematical expression which is used -to calculate the value of a (dependent) parameter. Only the parameter names of the same -function can be used as variables in this expression. - -Using the Minimizer property, Fit can be set to use different algorithms to perform the -minimization. By default if the function's derivatives can be evaluated then Fit uses the -GSL Levenberg-Marquardt minimizer. - -In Mantidplot this algorithm can be run from the [[MantidPlot:_Data Analysis and Curve -Fitting#Simple Peak Fitting with the Fit Wizard|Fit Property Browser]] which allows all -the settings to be specified via its graphical user interface. - -===Setting a simple function=== - -To use a simple function for a fit set its name and initial parameter values using the -Function property. This property is a comma separated list of name=value pairs. The name -of the first name=value pairs must be "name" and it must be set equal to the name of one -of a [[:Category:Fit_functions|simple function]]. This name=value pair is followed by -name=value pairs specifying values for the parameters of this function. If a parameter -is not set in Function it will be given its default value defined by the function. All -names are case sensitive. For example for fitting a Gaussian the Function property might -look like this: - - Function: "name=Gaussian, PeakCentre=4.6, Height=10, Sigma=0.5" - -Some functions have attributes. An attribute is a non-fitting parameter and can be of -one of the following types: text string, integer, or double. Attributes are set just -like the parameters using name=value pairs. For example: - - Function: "name=UserFunction, Formula=a+b*x, a=1, b=2" - -In this example Formula is the name of a string attribute which defines an expression -for the user UserFunction. The fitting parameters a and b are created when the Formula -attribute is set. It is important that Formula is defined before initializing the parameters. - -A list of the available simple functions can be found [[:Category:Fit_functions|here]]. - -===Setting a composite function=== - -A composite function is a sum of simple functions. It does not have a name. To define a -composite function set a number of simple functions in the Function property. Each simple -function definition must be separated by a semicolon ';'. For example fitting two Gaussians -on a linear background might look like this: - - Function: "name=LinearBackground, A0=0.3; - name=Gaussian, PeakCentre=4.6, Height=10, Sigma=0.5; - name=Gaussian, PeakCentre=7.6, Height=8, Sigma=0.5" - -===Setting ties=== - -Parameters can be tied to other parameters or to a constant. In this case they do not take -part in the fitting but are evaluated using the tying expressions. Use Ties property to set -any ties. In case of a simple function the parameter names are used as variables in the -tying expressions. For example - - Ties: "a=2*b+1, c=2" - -This ties parameter "a" to parameter "b" and fixes "c" to the constant 2. - -In case of a composite function the variable name must refer to both the parameter name and -the simple function it belongs to. It is done by writing the variable name in the following format: - f. -The format consists of two parts separated by a period '.'. The first part defines the -function by its index in the composite function (starting at 0). The index corresponds -to the order in which the functions are defined in the Function property. For example: - - Ties: "f1.Sigma=f0.Sigma,f2.Sigma=f0.Sigma" - -This ties parameter "Sigma" of functions 1 and 2 to the "Sigma" of function 0. Of course -all three functions must have a parameter called "Sigma" for this to work. The last example -can also be written - - Ties: "f1.Sigma=f2.Sigma=f0.Sigma" - -===Setting constraints=== - -Parameters can be constrained to be above a lower boundary and/or below an upper boundary. -If a constraint is violated a penalty to the fit is applied which should result the parameters -satisfying the constraint. The penalty applied is described in more detail [[FitConstraint|here]]. -Use Constraints property to set any constraints. In case of a simple function the parameter names -are used as variables in the constraint expressions. For example - - Constraints: "4.0 < c < 4.2" - -Constraint the parameter "c" to be with the range 4.0 to 4.2, whereas - - Constraints: "c > 4.0" - -means "c" is constrained to be above the lower value 4.0 and - - Constraints: "c < 4.2" - -means "c" is constrained to be below the upper value 4.2. - -In case of a composite function the same notation is used for constraints and for ties. For example - - Constraints: "f1.c < 4.2" - -constrain the parameter "c" of function 1. - -===Fitting to data in a MatrixWorkspace=== - -The error values in the input workspace are used to weight the data in the fit. Zero error values -are not allowed and are replaced with ones. - -===Output=== - -Setting the Output property defines the names of the two output workspaces. One of them is a -[[TableWorkspace]] with the fitted parameter values. The other is a [[Workspace2D]] which -compares the fit with the original data. It has three spectra. The first (index 0) contains -the original data, the second one the data simulated with the fitting function and the third -spectrum is the difference between the first two. For example, if the Output was set to "MyResults" -the parameter TableWorkspace will have name "MyResults_Parameters" and the Workspace2D will be named -"MyResults_Workspace". If the function's derivatives can be evaluated an additional TableWorkspace is -returned. When the Output is set to "MyResults" this TableWorkspace will have the name -"MyResults_NormalisedCovarianceMatrix" and it returns a calculated correlation matrix. -Denote this matrix C and its elements Cij then the diagonal elements are listed as 1.0 -and the off diagnonal elements as percentages of correlation between parameter i and j equal to 100*Cij/sqrt(Cii*Cjj). - -==Examples== - -This example shows a simple fit to a Gaussian function. The algorithm properties are: - - InputWorkspace: Test - WorkspaceIndex: 0 - Function: name=Gaussian, PeakCentre=4, Height=1.3, Sigma=0.5 - Output: res - -[[Image:GaussianFit.jpg]] - ----- - -The next example shows a fit of the same data but with a tie. - - InputWorkspace: Test - WorkspaceIndex: 0 - Function: name=Gaussian, PeakCentre=4, Height=1.3, Sigma=0.5 - Ties: Sigma=Height/2 - Output: res - -[[Image:GaussianFit_Ties.jpg]] - ----- - -This example shows a fit of two overlapping Gaussians on a linear background. Here we create -a composite function with a LinearBackground and two Gaussians: - - InputWorkspace: Test - WorkspaceIndex: 0 - Function: name=LinearBackground,A0=1; - name=Gaussian,PeakCentre=4,Height=1.5, Sigma=0.5; - name=Gaussian,PeakCentre=6,Height=4, Sigma=0.5 - Output: res - -[[Image:Gaussian2Fit.jpg]] - ----- - -This example repeats the previous one but with the Sigmas of the two Gaussians tied: - - InputWorkspace: Test - WorkspaceIndex: 0 - Function: name=LinearBackground,A0=1; - name=Gaussian,PeakCentre=4,Height=1.5, Sigma=0.5; - name=Gaussian,PeakCentre=6,Height=4, Sigma=0.5 - Ties: f2.Sigma = f1.Sigma - Output: res - -[[Image:Gaussian2Fit_Ties.jpg]] - -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/FitPowderDiffPeaks.cpp b/Code/Mantid/Framework/CurveFitting/src/FitPowderDiffPeaks.cpp index 2bfbcbc367c4..fb01f1297cb3 100644 --- a/Code/Mantid/Framework/CurveFitting/src/FitPowderDiffPeaks.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/FitPowderDiffPeaks.cpp @@ -1,69 +1,3 @@ -/*WIKI* -This algorithm fits a certain set of single peaks in a powder diffraction pattern. - -It serves as the first step to fit/refine instrumental parameters that will be -introduced in [[Le Bail Fit]]. -The second step is realized by algorithm RefinePowderInstrumentParameters. - -==== Version ==== -Current implementation of FitPowderDiffPeaks is version 2. - -== Peak Fitting Algorithms == - -==== Peak Fitting Mode ==== -Fitting mode determines the approach (or algorithm) to fit diffraction peaks. - -1. Robust - -2. Confident: User is confident on the input peak parameters. Thus the fitting will be a one-step minimizer by Levenberg-Marquardt. - -==== Starting Values of Peaks' Parameters ==== -1. "(HKL) & Calculation": the starting values are calculated from each peak's miller index and thermal neutron peak profile formula; - -2. "From Bragg Peak Table": the starting values come from the Bragg Peak Parameter table. - -==== Peak-fitting sequence ==== -Peaks are fitted from high d-spacing, i.e., lowest possible Miller index, to low d-spacing values. -If MinimumHKL is specified, then peak will be fitted from maximum d-spacing/TOF, -to the peak with Miller index as MinimumHKL. - -==== Correlated peak profile parameters ==== -If peaks profile parameters are correlated by analytical functions, -then the starting values of one peak will be the fitted peak profile parameters of -its right neighbour. - -== Use Cases == -Several use cases are listed below about how to use this algorithm. - -==== Use case 1: robust fitting ==== - 1. User wants to use the starting values of peaks parameters from input thermal neutron peak parameters such as Alph0, Alph1, and etc. - 2. User specifies the right most peak range and its Miller index - 3. ''FitPowderDiffPeaks'' calculates Alpha, Beta and Sigma for each peak from parameter values from InstrumentParameterTable; - 4. ''FitPowderDiffPeaks'' fit peak parameters of each peak from high TOF to low TOF; - -==== Use Case 2: Confident fitting ==== - 1. - 2. - -==== Use Case 3: Fitting Peak Parameters From Scratch ==== -This is the extreme case such that - 1. Input instrumental geometry parameters, including Dtt1, Dtt1t, Dtt2t, Zero, Zerot, Tcross and Width, have roughly-guessed values; - 2. There is no pre-knowledge for each peak's peak parameters, including Alpha, Beta, and Sigma. - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in the wiki page of [[LeBailFit]]. - -==== Example of Working With Other Algorithms ==== -''FitPowderDiffPeaks'' is designed to work with other algorithms, such ''RefinePowderInstrumentParameters'', -and ''LeBailFit''. See [[Le Bail Fit]] for full list of such algorithms. - -A common scenario is that the starting values of instrumental geometry related parameters (Dtt1, Dtt1t, and etc) -are enough far from the real values. - - 1. ''FitPowderDiffPeaks'' fits the single peaks from high TOF region in robust mode; - 2. ''RefinePowderInstrumentParameters'' refines the instrumental geometry related parameters by using the d-TOF function; - 3. Repeat step 1 and 2 for more single peaks incrementally. The predicted peak positions are more accurate in this step. - *WIKI*/ #include "MantidCurveFitting/FitPowderDiffPeaks.h" #include "MantidKernel/ListValidator.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/FlatBackground.cpp b/Code/Mantid/Framework/CurveFitting/src/FlatBackground.cpp index 3b1e25096579..d1e8a9ab724b 100644 --- a/Code/Mantid/Framework/CurveFitting/src/FlatBackground.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/FlatBackground.cpp @@ -1,9 +1,3 @@ -/*WIKI* -A Flat background function is defined as: - -y = A_0 -*WIKI*/ - #include "MantidCurveFitting/FlatBackground.h" #include "MantidAPI/FunctionFactory.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/GausDecay.cpp b/Code/Mantid/Framework/CurveFitting/src/GausDecay.cpp index 96d6af37290b..8b1985a46627 100644 --- a/Code/Mantid/Framework/CurveFitting/src/GausDecay.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/GausDecay.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Gaussian decay for use by Muon scientists defined by -: \mbox{A}\times \exp(-{Sigma}^2 \times {x}^2 ) - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/GausOsc.cpp b/Code/Mantid/Framework/CurveFitting/src/GausOsc.cpp index 5013e0cc64de..d5014c87917c 100644 --- a/Code/Mantid/Framework/CurveFitting/src/GausOsc.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/GausOsc.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Oscillating Gaussian decay for use by Muon scientists defined by -: \mbox{A}\times \exp(-{Sigma}^2 \times {x}^2) \times cos( 2 \pi \times {Frequency} \times {x} + {Phi} ) - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/Gaussian.cpp b/Code/Mantid/Framework/CurveFitting/src/Gaussian.cpp index 7eb0e9c72d99..1fedbfbd72d7 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Gaussian.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Gaussian.cpp @@ -1,22 +1,3 @@ -/*WIKI* -A Gaussian function (also referred to as a normal distribution) is defined as: - -: \mbox{Height}*\exp \left( -0.5*\frac{(x-\mbox{PeakCentre})^2}{\mbox{Sigma}^2} \right) - -where - -
    -
  • Height - height of peak
  • -
  • PeakCentre - centre of peak
  • -
  • Sigma - Gaussian width parameter
  • -
- -Note that the FWHM (Full Width Half Maximum) of a Gaussian equals 2\sqrt{2\ln 2}*\mbox{Sigma} . - -The figure below illustrate this symmetric peakshape function fitted to a TOF peak: - -[[Image:GaussianWithConstBackground.png]] - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/IkedaCarpenterPV.cpp b/Code/Mantid/Framework/CurveFitting/src/IkedaCarpenterPV.cpp index ee9e394f368f..7e20f7ee8669 100644 --- a/Code/Mantid/Framework/CurveFitting/src/IkedaCarpenterPV.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/IkedaCarpenterPV.cpp @@ -1,31 +1,3 @@ -/*WIKI* -This peakshape function is designed to be used to fit time-of-flight peaks. In particular this function is the convolution of the Ikeda-Carpender function, which aims to model the neutron pulse shape from a moderator, and a pseudo-Voigt that model any broading to the peak due to sample properties etc. - -The Ikeda-Carpender function is (Ref [1]) - -: \frac{\alpha}{2} \left\{ (1-R)*(\alpha t)^2e^{-\alpha t} + 2R\frac{\alpha^2\beta}{(\alpha-\beta)^3} \right\} - -where \alpha and \beta are the fast and slow neutron decay constants respectively, R a maxing coefficient that relates to the moderator temperature and t is time. \alpha and R are further modelled to depend on wavelength and using the notation in the Fullprof manual (Ref [2]) the refineable Ikeda-Carpender parameters are Alpha0, Alpha1, Beta0 and Kappa and these are defined as -:\alpha=1/(\mbox{Alpha0}+\lambda*\mbox{Alpha1}) -:\beta = 1/\mbox{Beta0} -:R = \exp (-81.799/(\mbox{Kappa}*\lambda^2)) , -where \lambda is the neutron wavelength. ''In general when fitting a single peak it is not recommended to refine both Alpha0 and Alpha1 at the same time since these two parameters will effectively be 100% correlated because the wavelength over a single peak is likely effectively constant''. - -The pseudo-Voigt function is defined as a linear combination of a Lorentzian and Gaussian and is a computational efficient way of calculation a Voigt function. The Voigt parameters are related to the pseudo-Voigt parameters through a relation (see Fullprof manual eq. (3.16) which in revision July2001 is missing a power 1/5). It is the two Voigt parameters which you can refine with this peakshape function: SigmaSquared (for the Gaussian part) and Gamma (for the Lorentzian part). Notice the Voigt Gaussian FWHM=SigmaSquared*8*ln(2) and the Voigt Lorentzian FWHM=Gamma. - -For information about how to create instrument specific values for the parameters of this fitting function see [[CreateIkedaCarpenterParameters]]. - -The implementation of the IkedaCarpenterPV peakshape function here follows the analytical expression for this function as presented in the Fullprof manual, see Ref[2]. - -References: -# S. Ikeda and J. M. Carpenter, Nuclear Inst. and Meth. in Phys. Res. A239, 536 (1985) -# Fullprof manual, see http://www.ill.eu/sites/fullprof/ - -The figure below illustrate this peakshape function fitted to a TOF peak: - -[[Image:IkedaCarpenterPVwithBackground.png]] - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/LeBailFit.cpp b/Code/Mantid/Framework/CurveFitting/src/LeBailFit.cpp index b9cbfce907e1..daf084fcf81e 100644 --- a/Code/Mantid/Framework/CurveFitting/src/LeBailFit.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/LeBailFit.cpp @@ -1,40 +1,3 @@ -/*WIKI* - -This algorithm performs [[Le Bail Fit]] to powder diffraction data, and also supports pattern calculation. -This algorithm will refine a specified set of the powder instrumental profile parameters with a previous refined background model. - -=== Peak profile function for fit === - -==== Back to back exponential convoluted with pseudo-voigt ==== -Here is the list of the peak profile function supported by this algorithm. -* Thermal neutron back-to-back exponential convoluted with pseudo-voigt -** geometry-related parameters: Dtt1, Dtt2, Zero -** back-to-back exponential parameters: Alph0, Alph1, Beta0, Beta1 -** pseudo-voigt parameters: Sig0, Sig1, Sig2, Gam0, Gam1, Gam2 - -==== Thermal neutron back to back exponential convoluted with pseudo-voigt ==== -Here is the list of the peak profile function supported by this algorithm. -* Thermal neutron back-to-back exponential convoluted with pseudo-voigt -** geometry-related parameters: Dtt1, Zero, Dtt1t, Dtt2t, Width, Tcross -** back-to-back exponential parameters: Alph0, Alph1, Beta0, Beta1, Alph0t, Alph1t, Beta0t, Beta1t -** pseudo-voigt parameters: Sig0, Sig1, Sig2, Gam0, Gam1, Gam2 - -=== Optimization === -''LeBailFit'' supports a tailored simulated annealing optimizer (using Monte Carlo random walk algorithm). -In future, regular minimizes in GSL library might be supported. - -=== Supported functionalities === - * LeBailFit: fit profile parameters by Le bail algorithm; - * Calculation: pattern calculation by Le bail algorithm; - * MonteCarlo: fit profile parameters by Le bail algorithm with Monte Carlo random wal; - * RefineBackground: refine background parameters - - -=== Further Information === -See [[Le Bail Fit]]. - -*WIKI*/ - /* COMMIT NOTES * 1. Rename calculateDiffractionPatternMC to calculateDiffractionPattern 2. diff --git a/Code/Mantid/Framework/CurveFitting/src/LeBailFunction.cpp b/Code/Mantid/Framework/CurveFitting/src/LeBailFunction.cpp index 7cdec70dbc51..a40bdc5c908b 100644 --- a/Code/Mantid/Framework/CurveFitting/src/LeBailFunction.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/LeBailFunction.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -==== Set parameters to Le Bail Function ==== -The public method to set parameters values to Le Bail function is "setProfileParameterValues" -The ultimate destination to set peak profile parameters is each peak function. -Set up a new peak parameter value does not necessarily trigger each peak to calculate profile value - -*WIKI*/ - #include "MantidAPI/Algorithm.h" #include "MantidCurveFitting/LeBailFunction.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/LinearBackground.cpp b/Code/Mantid/Framework/CurveFitting/src/LinearBackground.cpp index 0890efc6aca1..4f2d23402d50 100644 --- a/Code/Mantid/Framework/CurveFitting/src/LinearBackground.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/LinearBackground.cpp @@ -1,12 +1,3 @@ -/*WIKI* -A linear background function is defined as: - -y = A_0 + A_1 \times x - -Note this function is currently named LinearBackground and is likely to -be renamed to Linear in the not too distance future. -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/LogNormal.cpp b/Code/Mantid/Framework/CurveFitting/src/LogNormal.cpp index 3d4f139a6698..5a4ce880a872 100644 --- a/Code/Mantid/Framework/CurveFitting/src/LogNormal.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/LogNormal.cpp @@ -1,7 +1,3 @@ -/*WIKI* -The LogNormal fit function is defined by -: \frac{Height}{x} \cdot exp^{-\frac{ln(x)-Location}{2 \times Scale^2}} - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/Lorentzian.cpp b/Code/Mantid/Framework/CurveFitting/src/Lorentzian.cpp index bc0d5828f13a..29ce00069f8e 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Lorentzian.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Lorentzian.cpp @@ -1,21 +1,3 @@ -/*WIKI* -A Lorentzian function is defined as: - -
\frac{A}{\pi} \left( \frac{\frac{\Gamma}{2}}{(x-x_0)^2 + (\frac{\Gamma}{2})^2}\right)
- -where: -
    -
  • A (Amplitude) - Intensity scaling
  • -
  • x_0 (PeakCentre) - centre of peak
  • -
  • \Gamma/2 (HWHM) - half-width at half-maximum
  • -
- -Note that the FWHM (Full Width Half Maximum) equals two times HWHM, and the integral over the Lorentzian equals the intensity scaling A. - -The figure below illustrate this symmetric peakshape function fitted to a TOF peak: - -[[Image:LorentzianWithConstBackground.png]] - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/Lorentzian1D.cpp b/Code/Mantid/Framework/CurveFitting/src/Lorentzian1D.cpp index 3bd716ee07ac..11cb546c5d91 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Lorentzian1D.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Lorentzian1D.cpp @@ -1,26 +1,3 @@ -/*WIKI* - -Takes a histogram in a 2D workspace and fit it to a Lorentzian function, i.e. to the function: - -: \mbox{BG0}+\mbox{BG1}*x+\mbox{Height}* \left( \frac{\mbox{HWHM}^2}{(x-\mbox{PeakCentre})^2+\mbox{HWHM}^2} \right) - -where - -
    -
  • BG0 - constant background value
  • -
  • BG1 - constant background value
  • -
  • Height - height of peak (at maximum)
  • -
  • PeakCentre - centre of peak
  • -
  • HWHM - half-width at half-maximum
  • -
- -Note that the FWHM (Full Width Half Maximum) equals two times HWHM, and the integral over the Lorentzian equals \mbox{Height} * \pi * \mbox{HWHM} (ignoring the linear background). In the literature you may also often see the notation \gamma = HWHM. - -The figure below illustrate this symmetric peakshape function fitted to a TOF peak: - -[[Image:LorentzianWithConstBackground.png]] - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/MuonFInteraction.cpp b/Code/Mantid/Framework/CurveFitting/src/MuonFInteraction.cpp index eb50256b8847..bbbc9b5f704a 100644 --- a/Code/Mantid/Framework/CurveFitting/src/MuonFInteraction.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/MuonFInteraction.cpp @@ -1,12 +1,3 @@ -/*WIKI* -Muon F interaction function defined by -: \exp((-{Lambda} \times {x})^{Beta} ) \times \frac {A} {6} \times -( 3 + B + C + D ) -where -: B = \cos( \sqrt 3 \times Omega \times x) ) , -: C = (1 - \frac{1}{\sqrt{3}} ) \times \cos ( ( ( 3 - \sqrt{3} ) / 2 ) \times Omega \times x ) and -: D = (1 + \frac{1}{\sqrt{3}} ) \times \cos ( ( ( 3 + \sqrt{3} ) / 2 ) \times Omega \times x ) . - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/NeutronBk2BkExpConvPVoigt.cpp b/Code/Mantid/Framework/CurveFitting/src/NeutronBk2BkExpConvPVoigt.cpp index 0ec9b4288d15..1b3420f5ea3b 100644 --- a/Code/Mantid/Framework/CurveFitting/src/NeutronBk2BkExpConvPVoigt.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/NeutronBk2BkExpConvPVoigt.cpp @@ -1,110 +1,3 @@ -/*WIKI* -== Notice == -1. This is not an algorithm. However this fit function is a used through the [[Fit]] algorithm. - -2. It is renamed from ThermalNeutronBk2BkExpConvPV. - -3. ThermalNeutronBk2BkExpConvPVoigt is not a regular peak function to fit individual peaks. It is not allowed to set FWHM or peak centre to this peak function. - -== Summary == -A thermal neutron back-to-back exponential convoluted with pseuduo-voigt peakshape function is indeed a back-to-back exponential convoluted with pseuduo-voigt peakshape function, -while the parameters :\alpha, :\beta and :\sigma are not directly given, but calculated from a set of parameters that are universal to all peaks in powder diffraction data. - -The purpose to implement this peak shape is to perform Le Bail Fit and other data analysis on time-of-flight powder diffractometers' data in Mantid. It is the peak shape No. 10 in Fullprof. See Refs. 1. - -== Description == -Thermal neutron back to back exponential convoluted with psuedo voigt peak function is a back to back exponential convoluted with psuedo voigt peak function. -Its difference to a regular back to back exponential convoluted with psuedo voigt peak functiont is that it is a function for all peaks in a TOF powder diffraction pattern, -but not a single peak. - -Furthermore, the purpose to implement this function in Mantid is to refine multiple parameters including crystal sample's unit cell parameters. -Therefore, unit cell lattice parameters are also included in this function. - -==== Methods are not supported ==== -1. setFWHM() -2. setCentre() : peak centre is determined by a set of parameters including lattice parameter, Dtt1, Dtt1t, Zero, Zerot, Dtt2t, Width and Tcross. Therefore, -it is not allowed to set peak centre to this peak function. - -==== Back-to-back exponential convoluted with pseuduo-voigt peakshape function ==== - -A back-to-back exponential convoluted with pseuduo-voigt peakshape function for is defined as - -: \Omega(X_0) = \int_{\infty}^{\infty}pV(X_0-t)E(t)dt - -For back-to-back exponential: -: E(d, t) = 2Ne^{\alpha(d) t} (t \leq 0) -: E(d, t) = 2Ne^{-\beta(d) t} (t \geq 0) -: N(d) = \frac{\alpha(d)\beta(d)}{2(\alpha(d)+\beta(d))} - -For psuedo-voigt -: pV(x) = \eta L'(x) + (1-\eta)G'(x) - -The parameters /alpha and /beta represent the absolute value of the exponential rise and decay constants (modelling the neutron pulse coming from the moderator) -, L'(x) stands for Lorentzian part and G'(x) stands for Gaussian part. The parameter X_0 is the location of the peak; more specifically it represent -the point where the exponentially modelled neutron pulse goes from being exponentially rising to exponentially decaying. - -References - -1. Fullprof manual - -The figure below illustrate this peakshape function fitted to a TOF peak: - -[[Image:BackToBackExponentialWithConstBackground.png]] - -==== Formula for converting unit from d-spacing to TOF ==== -Parameters of back-to-back exponential convoluted psuedo-voigt function are calculated from a set of parameters universal to all peaks in a diffraction pattern. -Therefore, they are functions of peak position, d. - - n_{cross} = \frac{1}{2} erfc(Width(xcross\cdot d^{-1})) - - TOF_e = Zero + Dtt1\cdot d - - TOF_t = Zerot + Dtt1t\cdot d - Dtt2t \cdot d^{-1} - -Final Time-of-flight is calculated as: - TOF = n_{cross} TOF_e + (1-n_{cross}) TOF_t - -==== Formular for calculating A(d), B(d), \sigma(d) and \gamma(d) ==== - -* \alpha(d) - \alpha^e(d) = \alpha_0^e + \alpha_1^e d_h - \alpha^t(d) = \alpha_0^t - \frac{\alpha_1^t}{d_h} - \alpha(d) = \frac{1}{n\alpha^e + (1-n)\alpha^t} - -* \beta(d) - \beta^e(d) = \beta_0^e + \beta_1^e d_h - \beta^t(d) = \beta_0^t - \frac{\beta_1^t}{d_h} - \beta(d) = \frac{1}{n\alpha^e + (1-n)\beta^t} - -* For \sigma_G and \gamma_L, which represent the standard deviation for pseudo-voigt - \sigma_G^2(d_h) = \sigma_0^2 + (\sigma_1^2 + DST2(1-\zeta)^2)d_h^2 + (\sigma_2^2 + Gsize)d_h^4 - - \gamma_L(d_h) = \gamma_0 + (\gamma_1 + \zeta\sqrt{8\ln2DST2})d_h + (\gamma_2+F(SZ))d_h^2 - \end{eqnarray} - -* The analysis formula for the convoluted peak at d_h - \Omega(TOF(d_h)) = - (1-\eta(d_h))N\{e^uerfc(y)+e^verfc(z)\} - \frac{2N\eta}{\pi}\{\Im[e^pE_1(p)]+\Im[e^qE_1(q)]\} -where - erfc(x) = 1-erf(x) = 1-\frac{2}{\sqrt{\pi}}\int_0^xe^{-u^2}du - - E_1(z) = \int_z^{\infty}\frac{e^{-t}}{t}dt - - u = \frac{1}{2}\alpha(d_h)(\alpha(d_h)\sigma^2(d_h)+2x) - - y = \frac{\alpha(d_h)\sigma^2(d_h)+x}{\sqrt{2\sigma^2(d_h)}} - - p = \alpha(d_h)x + \frac{i\alpha(d_h)H(d_h)}{2} - - v = \frac{1}{2}\beta(d_h)(\beta(d_h)\sigma^2(d_h)-2x) - - z = \frac{\beta(d_h)\sigma^2(d_h)-x}{\sqrt{2\sigma^2(d_h)}} - - q = -\beta(d_h)x + \frac{i\beta(d_h)H(d_h)}{2} - -erfc(x) and E_1(z) will be calculated numerically. - *WIKI*/ - #include "MantidCurveFitting/NeutronBk2BkExpConvPVoigt.h" #include "MantidAPI/FunctionFactory.h" #include "MantidAPI/ParamFunction.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/NormaliseByPeakArea.cpp b/Code/Mantid/Framework/CurveFitting/src/NormaliseByPeakArea.cpp index 5442ca6b65dc..6a1d1ccddab8 100644 --- a/Code/Mantid/Framework/CurveFitting/src/NormaliseByPeakArea.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/NormaliseByPeakArea.cpp @@ -1,17 +1,3 @@ -/*WIKI* -Takes an input TOF spectrum and converts it to Y-space using the [[ConvertToYSpace]] algorithm. The result is -then fitted using the ComptonPeakProfile function using the given mass to produce an estimate of the peak area. The input data is -normalised by this value. - -The algorithm has 4 outputs: -* the input data normalised by the fitted peak area; -* the input data (without normalisation) converted Y-space; -* the fitted peak in Y-space; -* the input data converted to Y and then symmetrised about Y=0. - -If the sum option is requested then all input spectra are rebinned, in steps of 0.5 A^-1, to a common Y grid and then summed to give a single spectrum. -*WIKI*/ - #include "MantidCurveFitting/NormaliseByPeakArea.h" #include "MantidAPI/IFunction.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/PlotPeakByLogValue.cpp b/Code/Mantid/Framework/CurveFitting/src/PlotPeakByLogValue.cpp index 28d460063336..4931ceb715fd 100644 --- a/Code/Mantid/Framework/CurveFitting/src/PlotPeakByLogValue.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/PlotPeakByLogValue.cpp @@ -1,26 +1,3 @@ -/*WIKI* - - -This algorithm fits a series of spectra with the same function. Each spectrum is fit independently and the result is a table of fitting parameters unique for each spectrum. The sources for the spectra are defined in the Input property. The Input property expects a list of spectra identifiers separated by semicolons (;). An identifier is itself a comma-separated list of values. The first value is the name of the source. It can be either a workspace name or a name of a file (RAW or Nexus). If it is a name of a [[WorkspaceGroup]] all its members will be included in the fit. The second value selects a spectrum within the workspace or file. It is an integer number with a prefix defining the meaning of the number: "sp" for a spectrum number, "i" for a workspace index, or "v" for a range of values on the numeric axis associated with the workspace index. For example, sp12, i125, v0.5:2.3. If the data source is a file only the spectrum number option is accepted. The third value of the spectrum identifier is optional period number. It is used if the input file contains multiperiod data. In case of workspaces this third parameter is ignored. This are examples of Input property - - "test1,i2; MUSR00015189.nxs,sp3; MUSR00015190.nxs,sp3; MUSR00015191.nxs,sp3" - "test2,v1.1:3.2" - "test3,v" - fit all spectra in workspace test3 - -Internally PlotPeakByLogValue uses [[Fit]] algorithm to perform fitting and the following properties have the same meaning as in [[Fit]]: Function, StartX, EndX, Minimizer, CostFunction. Property FitType defines the way of setting initial values. If it is set to "Sequential" every next fit starts with parameters returned by the previous fit. If set to "Individual" each fit starts with the same initial values defined in the Function property. - -LogValue property specifies a log value to be included into the output. If this property is empty the values of axis 1 will be used instead. Setting this property to "SourceName" makes the first column of the output table contain the names of the data sources (files or workspaces). - -===Output workspace format=== - -The output workspace is a table in which rows correspond to the spectra in the order they (spectra) appear in the Input property. The first column of the table has the log values. It is followed by pairs of columns with parameter values and fitting errors. If a parameter was fixed or tied the error will be zero. Here is an example of the output workspace: - -[[File:PlotPeakByLogValue_Output.png]] - -In this example a group of three Matrix workspaces were fitted with a [[Gaussian]] on a linear background. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -615,7 +592,3 @@ namespace Mantid } // namespace CurveFitting } // namespace Mantid - - - - diff --git a/Code/Mantid/Framework/CurveFitting/src/ProcessBackground.cpp b/Code/Mantid/Framework/CurveFitting/src/ProcessBackground.cpp index 8341a2c1a687..fb6969d13c88 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ProcessBackground.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ProcessBackground.cpp @@ -1,37 +1,3 @@ -/*WIKI* - -The algorithm ProcessBackground() provides several functions for user to process background to prepare Le Bail Fit. - -==== Simple Remove Peaks ==== -This algorithm is designed for refining the background based on the assumption that the all peaks have been fitted reasonably well. Then by removing the peaks by function 'X0 +/- n*FWHM', the rest data points are background in a very high probability. - -An arbitrary background function can be fitted against this background by standard optimizer. - -==== Automatic Background Points Selection ==== -This feature is designed to select many background points with user's simple input. -User is required to select only a few background points in the middle of two adjacent peaks. -Algorithm will fit these few points (''BackgroundPoints'') to a background function of specified type. - - -== Examples == - -==== Selecting background ==== -Here is a good example to select background points from a powder diffraction pattern by calling ProcessBackground() in a self-consistent manner. - - 1. Select a set of background points (X values only), which can roughly describes the background, manually; - 2. Call ProcessBackground with Option='SelectBackgroundPoints' and SelectionMode='UserSpecifyBackground'. - A good choice for background function to enter is 6-th order polynomial; - 3. Plot spectra 2 to 4 in UserBackgroundWorkspace to check whether 'Tolerance' is proper or not. - If not then reset the tolerance and run ProcessBackground again with previous setup; - 4. Fit OutputWorkspace (the selected background) with a background function; - 5. Call ProcessBackground with Option='SelectBackgroundPoints' and SelectionMode='UserFunction'. - Set the background parameter workspace as the output parameter table workspace obtained in the last step; - 6. Repeat step 4 and 5 for a few times until the background plot by fitted background function - from selected background points is close enough to real background. - - - -*WIKI*/ #include "MantidCurveFitting/ProcessBackground.h" #include "MantidAPI/WorkspaceProperty.h" #include "MantidKernel/Property.h" @@ -1215,34 +1181,3 @@ DECLARE_ALGORITHM(ProcessBackground) } // namespace CurveFitting } // namespace Mantid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Code/Mantid/Framework/CurveFitting/src/ProductFunction.cpp b/Code/Mantid/Framework/CurveFitting/src/ProductFunction.cpp index f3a82c408b9e..bffbbf76f497 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ProductFunction.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ProductFunction.cpp @@ -1,10 +1,3 @@ -/*WIKI* -A ProductFunction is an extension of the [[CompositeFunction]] which -multiplies its member functions to produce the output. Use this function -to construct a product of two or more fitting functions defined in -Mantid. A member of a ProductFunction can be a composite function itself. - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/ProductLinearExp.cpp b/Code/Mantid/Framework/CurveFitting/src/ProductLinearExp.cpp index 4ad8978111ef..1316faa1805f 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ProductLinearExp.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ProductLinearExp.cpp @@ -1,13 +1,3 @@ -/*WIKI* -This fit function computes the product of a linear and exponential function. See [[ExpDecay]] -and [[LinearBackground]] for details on the component functions. - - (\mbox{A0}+\mbox{A1}\times x) \times \mbox{Height}\times \exp(-\frac{x}{\mbox{Lifetime}}) - -This function may be used with the [[Fit]] algorithm. However, it was originally added to -Mantid as a named function for the purposes of detector efficiency calibration. - *WIKI*/ - #include "MantidCurveFitting/ProductLinearExp.h" #include "MantidCurveFitting/ExpDecay.h" #include "MantidCurveFitting/LinearBackground.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/ProductQuadraticExp.cpp b/Code/Mantid/Framework/CurveFitting/src/ProductQuadraticExp.cpp index ef7957ef9fc5..1d460a1b1b8a 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ProductQuadraticExp.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ProductQuadraticExp.cpp @@ -1,14 +1,3 @@ -/*WIKI* -This fit function computes the product of a linear and exponential function. -See [[ExpDecay]] and QuadraticBackground for details on the component functions. - - (\mbox{A0}+\mbox{A1}\times x+\mbox{A2}\times x^2) \times \mbox{Height}\times \exp(-\frac{x}{\mbox{Lifetime}}) - -This function may be used with the [[Fit]] algorithm. However, it was originally -added to Mantid as a named function for the purposes of detector efficiency calibration. -Also see [[ProductLinearExp]]. - *WIKI*/ - #include "MantidCurveFitting/ProductQuadraticExp.h" #include "MantidCurveFitting/ExpDecay.h" #include "MantidCurveFitting/Quadratic.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/Quadratic.cpp b/Code/Mantid/Framework/CurveFitting/src/Quadratic.cpp index 07dbe42effc3..b003a207806f 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Quadratic.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Quadratic.cpp @@ -1,17 +1,3 @@ -/*WIKI* -A quadratic background function is defined as: - -: \mbox{A0}+\mbox{A1}*x+\mbox{A2}*x^2 - -where - -
    -
  • A0 - coefficient for constant term
  • -
  • A1 - coefficient for linear term
  • -
  • A2 - coefficient for quadratic term
  • -
- *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/RefinePowderInstrumentParameters3.cpp b/Code/Mantid/Framework/CurveFitting/src/RefinePowderInstrumentParameters3.cpp index 22f0f65b1bb7..155553a08b5b 100644 --- a/Code/Mantid/Framework/CurveFitting/src/RefinePowderInstrumentParameters3.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/RefinePowderInstrumentParameters3.cpp @@ -1,40 +1,3 @@ -/*WIKI* -This algorithm refines the instrumental geometry parameters for powder diffractomers. -The parameters that can be refined are Dtt1, Zero, Dtt1t, Dtt2t, Zerot, Width and Tcross. - -It serves as the second step to fit/refine instrumental parameters that will be -introduced in Le Bail Fit. -It uses the outcome from algorithm FitPowderDiffPeaks(). - -== Mathematics == -The function to fit is - -TOF_h = n(Zero + Dtt1*d) + (1-n)(Zerot + Dtt1t*d + Dtt2t/d) -n = 1/2 erfc(W*(1-Tcross/d)) - -The coefficients in this function are strongly correlated to each other. - -== Refinement Algorithm == -Two refinement algorithms, DirectFit and MonteCarlo, are provided. - -==== DirectFit ==== -This is a simple one step fitting. -If there is one parameter to fit, Levenberg Marquart minimizer is chosen. -As its coefficients are strongly correlated to each other, Simplex minimizer is used if there are more than 1 parameter to fit. - -==== MonteCarlo ==== -This adopts the concept of Monte Carlo random walk in the parameter space. -In each MC step, one parameter will be chosen, and a new value is proposed for it. -A constraint fitting by Simplex minimizer is used to fit the coefficients in new configuration. - -Simulated annealing will be tried as soon as it is implemented in Mantid. - -==== Constraint ==== - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in the wiki page of [[LeBailFit]]. - -*WIKI*/ #include "MantidCurveFitting/RefinePowderInstrumentParameters3.h" #include "MantidAPI/Axis.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/SplineBackground.cpp b/Code/Mantid/Framework/CurveFitting/src/SplineBackground.cpp index 125fa34f52e2..f1f2a4a9546f 100644 --- a/Code/Mantid/Framework/CurveFitting/src/SplineBackground.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/SplineBackground.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -SplineBackground uses GSL b-spline and fitting functions to fit a spectrum. Masked bins are excluded from the fit making it possible to fit only the background signal. The output workspace has one spectrum of calculated values and the fitting errors. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/SplineInterpolation.cpp b/Code/Mantid/Framework/CurveFitting/src/SplineInterpolation.cpp index b9f0c346e379..83246395d450 100644 --- a/Code/Mantid/Framework/CurveFitting/src/SplineInterpolation.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/SplineInterpolation.cpp @@ -1,20 +1,3 @@ -/*WIKI* - -The algorithm performs interpolation of points onto a cubic spline. The algorithm takes two input workspaces: one that is used to define the spline and one that contains a number of spectra to be interpolated onto the spline. - -If multiple spectra are defined in the WorkspaceToInterpolate workspace, they will all be interpolated against the first spectra in WorkspaceToMatch. - -Optionally, this algorithm can also calculate the first and second derivatives of each of the interpolated points as a side product. Setting the DerivOrder property to zero will force the algorithm to calculate no derivatives. - -=== For Histogram Workspaces === - -If the input workspace contains histograms, rather than data points, then SplineInterpolation will automatically convert the input to point data. The output returned with be in the same format as the input. - -Histogram workspaces being interpolated will show a warning when the range of the data is equal to the size of the workspace to match, but has finer bin boundaries. This is because histogram data is converted to point data using the average -of the bin boundaries. This will cause some values to fall outside of the range of the spline when fine bin boundaries are used. - - *WIKI*/ - #include "MantidAPI/TextAxis.h" #include "MantidAPI/Progress.h" #include "MantidKernel/BoundedValidator.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/SplineSmoothing.cpp b/Code/Mantid/Framework/CurveFitting/src/SplineSmoothing.cpp index 148c35abdde0..d6b28d684d70 100644 --- a/Code/Mantid/Framework/CurveFitting/src/SplineSmoothing.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/SplineSmoothing.cpp @@ -1,14 +1,3 @@ -/*WIKI* -The algorithm performs a smoothing of the input data using a cubic spline. The algorithm takes a 2D workspace and generates a spline for each of the spectra to approximate a fit of the data. - -Optionally, this algorithm can also calculate the first and second derivatives of each of the interpolated points as a side product. Setting the DerivOrder property to zero will force the algorithm to calculate no derivatives. - -=== For Histogram Workspaces === - -If the input workspace contains histograms, rather than data points, then SplineInterpolation will automatically convert the input to point data. The output returned with be in the same format as the input. - -*WIKI*/ - #include "MantidAPI/IFunction1D.h" #include "MantidAPI/FunctionFactory.h" #include "MantidAPI/Progress.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabe.cpp b/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabe.cpp index 9b9544e6e1b4..bc67d9486a36 100644 --- a/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabe.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabe.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Static Kubo Toyabe fitting function for use by Muon scientists defined by -: \mbox{A}\times ( \exp(-{Delta}^2 \times {x}^2 / 2 ) \times ( 1 - ( {Delta}^2 \times {x}^2 ) ) \times \frac 2 3 + \frac 1 3 ) - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabeTimesExpDecay.cpp b/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabeTimesExpDecay.cpp index af3bd32a519d..0f6773c638aa 100644 --- a/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabeTimesExpDecay.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabeTimesExpDecay.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Fitting function for use by Muon scientists defined by: - - \mbox{A}\times ( \exp(-{Delta}^2 \times {x}^2 / 2 ) \times ( 1 - ( {Delta}^2 \times {x}^2 ) ) \times \frac 2 3 + \frac 1 3 ) \times \exp(-{Lambda} \times {x}) - *WIKI*/ #include "MantidCurveFitting/StaticKuboToyabeTimesExpDecay.h" #include "MantidAPI/FunctionFactory.h" #include @@ -42,4 +37,4 @@ void StaticKuboToyabeTimesExpDecay::function1D(double* out, const double* xValue } } // namespace CurveFitting -} // namespace Mantid \ No newline at end of file +} // namespace Mantid diff --git a/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabeTimesGausDecay.cpp b/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabeTimesGausDecay.cpp index 060704ddf83a..c621d3bb436a 100644 --- a/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabeTimesGausDecay.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/StaticKuboToyabeTimesGausDecay.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Fitting function for use by Muon scientists defined by: - - \mbox{A}\times ( \exp(-{Delta}^2 \times {x}^2 / 2 ) \times ( 1 - ( {Delta}^2 \times {x}^2 ) ) \times \frac 2 3 + \frac 1 3 ) \times \exp(-{Sigma}^2 \times {x}^2 ) - *WIKI*/ #include "MantidCurveFitting/StaticKuboToyabeTimesGausDecay.h" #include "MantidAPI/FunctionFactory.h" #include @@ -44,4 +39,4 @@ namespace CurveFitting } } // namespace CurveFitting -} // namespace Mantid \ No newline at end of file +} // namespace Mantid diff --git a/Code/Mantid/Framework/CurveFitting/src/StretchExp.cpp b/Code/Mantid/Framework/CurveFitting/src/StretchExp.cpp index e02f08c5fe83..8524e3304a37 100644 --- a/Code/Mantid/Framework/CurveFitting/src/StretchExp.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/StretchExp.cpp @@ -1,8 +1,3 @@ -/*WIKI* -The Stretched exponential fit function is defined by -: Height \cdot e^{-(\frac{x}{Lifetime})^{Stretching} } - *WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/StretchExpMuon.cpp b/Code/Mantid/Framework/CurveFitting/src/StretchExpMuon.cpp index 05a49a030d28..74c408b335a4 100644 --- a/Code/Mantid/Framework/CurveFitting/src/StretchExpMuon.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/StretchExpMuon.cpp @@ -1,7 +1,3 @@ -/*WIKI* -The Stretched exponential fit function is defined by -: A \cdot e^{ (-{Lambda} \times {x}) ^{Beta} } - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -41,5 +37,3 @@ void StretchExpMuon::function1D(double* out, const double* xValues, const size_t } // namespace CurveFitting } // namespace Mantid - - diff --git a/Code/Mantid/Framework/CurveFitting/src/ThermalNeutronBk2BkExpConvPVoigt.cpp b/Code/Mantid/Framework/CurveFitting/src/ThermalNeutronBk2BkExpConvPVoigt.cpp index 4c8d9cce6dde..fc704e9709b9 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ThermalNeutronBk2BkExpConvPVoigt.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ThermalNeutronBk2BkExpConvPVoigt.cpp @@ -1,110 +1,3 @@ -/*WIKI* -== Notice == -1. This is not an algorithm. However this fit function is a used through the [[Fit]] algorithm. - -2. It is renamed from ThermalNeutronBk2BkExpConvPV. - -3. ThermalNeutronBk2BkExpConvPVoigt is not a regular peak function to fit individual peaks. It is not allowed to set FWHM or peak centre to this peak function. - -== Summary == -A thermal neutron back-to-back exponential convoluted with pseuduo-voigt peakshape function is indeed a back-to-back exponential convoluted with pseuduo-voigt peakshape function, -while the parameters :\alpha, :\beta and :\sigma are not directly given, but calculated from a set of parameters that are universal to all peaks in powder diffraction data. - -The purpose to implement this peak shape is to perform Le Bail Fit and other data analysis on time-of-flight powder diffractometers' data in Mantid. It is the peak shape No. 10 in Fullprof. See Refs. 1. - -== Description == -Thermal neutron back to back exponential convoluted with psuedo voigt peak function is a back to back exponential convoluted with psuedo voigt peak function. -Its difference to a regular back to back exponential convoluted with psuedo voigt peak functiont is that it is a function for all peaks in a TOF powder diffraction pattern, -but not a single peak. - -Furthermore, the purpose to implement this function in Mantid is to refine multiple parameters including crystal sample's unit cell parameters. -Therefore, unit cell lattice parameters are also included in this function. - -==== Methods are not supported ==== -1. setFWHM() -2. setCentre() : peak centre is determined by a set of parameters including lattice parameter, Dtt1, Dtt1t, Zero, Zerot, Dtt2t, Width and Tcross. Therefore, -it is not allowed to set peak centre to this peak function. - -==== Back-to-back exponential convoluted with pseuduo-voigt peakshape function ==== - -A back-to-back exponential convoluted with pseuduo-voigt peakshape function for is defined as - -: \Omega(X_0) = \int_{\infty}^{\infty}pV(X_0-t)E(t)dt - -For back-to-back exponential: -: E(d, t) = 2Ne^{\alpha(d) t} (t \leq 0) -: E(d, t) = 2Ne^{-\beta(d) t} (t \geq 0) -: N(d) = \frac{\alpha(d)\beta(d)}{2(\alpha(d)+\beta(d))} - -For psuedo-voigt -: pV(x) = \eta L'(x) + (1-\eta)G'(x) - -The parameters /alpha and /beta represent the absolute value of the exponential rise and decay constants (modelling the neutron pulse coming from the moderator) -, L'(x) stands for Lorentzian part and G'(x) stands for Gaussian part. The parameter X_0 is the location of the peak; more specifically it represent -the point where the exponentially modelled neutron pulse goes from being exponentially rising to exponentially decaying. - -References - -1. Fullprof manual - -The figure below illustrate this peakshape function fitted to a TOF peak: - -[[Image:BackToBackExponentialWithConstBackground.png]] - -==== Formula for converting unit from d-spacing to TOF ==== -Parameters of back-to-back exponential convoluted psuedo-voigt function are calculated from a set of parameters universal to all peaks in a diffraction pattern. -Therefore, they are functions of peak position, d. - - n_{cross} = \frac{1}{2} erfc(Width(xcross\cdot d^{-1})) - - TOF_e = Zero + Dtt1\cdot d - - TOF_t = Zerot + Dtt1t\cdot d - Dtt2t \cdot d^{-1} - -Final Time-of-flight is calculated as: - TOF = n_{cross} TOF_e + (1-n_{cross}) TOF_t - -==== Formular for calculating A(d), B(d), \sigma(d) and \gamma(d) ==== - -* \alpha(d) - \alpha^e(d) = \alpha_0^e + \alpha_1^e d_h - \alpha^t(d) = \alpha_0^t - \frac{\alpha_1^t}{d_h} - \alpha(d) = \frac{1}{n\alpha^e + (1-n)\alpha^t} - -* \beta(d) - \beta^e(d) = \beta_0^e + \beta_1^e d_h - \beta^t(d) = \beta_0^t - \frac{\beta_1^t}{d_h} - \beta(d) = \frac{1}{n\alpha^e + (1-n)\beta^t} - -* For \sigma_G and \gamma_L, which represent the standard deviation for pseudo-voigt - \sigma_G^2(d_h) = \sigma_0^2 + (\sigma_1^2 + DST2(1-\zeta)^2)d_h^2 + (\sigma_2^2 + Gsize)d_h^4 - - \gamma_L(d_h) = \gamma_0 + (\gamma_1 + \zeta\sqrt{8\ln2DST2})d_h + (\gamma_2+F(SZ))d_h^2 - \end{eqnarray} - -* The analysis formula for the convoluted peak at d_h - \Omega(TOF(d_h)) = - (1-\eta(d_h))N\{e^uerfc(y)+e^verfc(z)\} - \frac{2N\eta}{\pi}\{\Im[e^pE_1(p)]+\Im[e^qE_1(q)]\} -where - erfc(x) = 1-erf(x) = 1-\frac{2}{\sqrt{\pi}}\int_0^xe^{-u^2}du - - E_1(z) = \int_z^{\infty}\frac{e^{-t}}{t}dt - - u = \frac{1}{2}\alpha(d_h)(\alpha(d_h)\sigma^2(d_h)+2x) - - y = \frac{\alpha(d_h)\sigma^2(d_h)+x}{\sqrt{2\sigma^2(d_h)}} - - p = \alpha(d_h)x + \frac{i\alpha(d_h)H(d_h)}{2} - - v = \frac{1}{2}\beta(d_h)(\beta(d_h)\sigma^2(d_h)-2x) - - z = \frac{\beta(d_h)\sigma^2(d_h)-x}{\sqrt{2\sigma^2(d_h)}} - - q = -\beta(d_h)x + \frac{i\beta(d_h)H(d_h)}{2} - -erfc(x) and E_1(z) will be calculated numerically. - *WIKI*/ - #include "MantidCurveFitting/ThermalNeutronBk2BkExpConvPVoigt.h" #include "MantidAPI/FunctionFactory.h" #include "MantidAPI/ParamFunction.h" diff --git a/Code/Mantid/Framework/CurveFitting/src/UserFunction.cpp b/Code/Mantid/Framework/CurveFitting/src/UserFunction.cpp index c6ef9d98b650..d69c09bd8ce1 100644 --- a/Code/Mantid/Framework/CurveFitting/src/UserFunction.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/UserFunction.cpp @@ -1,13 +1,3 @@ -/*WIKI* -A UserFunction is defined by a string formula. The formula is -assigned by setting string attribute Formula: - - "name=UserFunction, Formula = h*sin(a*x), h=2, a=1" - -Formula must use 'x' for the x-values. The fitting parameters -become defined only after the Formula attribute is set that is -why Formula must go first in UserFunction definition. - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/UserFunction1D.cpp b/Code/Mantid/Framework/CurveFitting/src/UserFunction1D.cpp index 0462a0fa21ce..874d46371d84 100644 --- a/Code/Mantid/Framework/CurveFitting/src/UserFunction1D.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/UserFunction1D.cpp @@ -1,74 +1,3 @@ -/*WIKI* - -This algorithm fits a spectrum to a user defined function. The function is supplied to the algorithm as a text string. The function here is a mathematical expression using numbers, variable names and internal function names. Symbols '+', '-', '*', '/', and '^' can be used for arithmetic operations. Names can contain only letters, digits, and the underscore symbol '_'. The internal functions are: -{| -!Name -!Argc. -!Explanation -|- -|sin || 1 || sine function -|- -|cos || 1 || cosine function -|- -|tan || 1 || tangens function -|- -|asin || 1 || arcus sine function -|- -|acos || 1 || arcus cosine function -|- -|atan || 1 || arcus tangens function -|- -|sinh || 1 || hyperbolic sine function -|- -|cosh || 1 || hyperbolic cosine -|- -|tanh || 1 || hyperbolic tangens function -|- -|asinh || 1 || hyperbolic arcus sine function -|- -|acosh || 1 || hyperbolic arcus tangens function -|- -|atanh || 1 || hyperbolic arcur tangens function -|- -|log2 || 1 || logarithm to the base 2 -|- -|log10 || 1 || logarithm to the base 10 -|- -|log || 1 || logarithm to the base 10 -|- -|ln || 1 || logarithm to base e (2.71828...) -|- -|exp || 1 || e raised to the power of x -|- -|sqrt || 1 || square root of a value -|- -|sign || 1 || sign function -1 if x<0; 1 if x>0 -|- -|rint || 1 || round to nearest integer -|- -|abs || 1 || absolute value -|- -|if || 3 || if ... then ... else ... -|- -|min || var. || min of all arguments -|- -|max || var. || max of all arguments -|- -|sum || var. || sum of all arguments -|- -|avg || var. || mean value of all arguments -|} - -An example of ''Function'' property is "a + b*x + c*x^2". Valiable ''x'' is used to represent the values of the X-vector of the input spectrum. All other variable names are treated as fitting parameters. A parameter can be given an initial value in the ''InitialParameters'' property. For example, "b=1, c=0.2". The order in which the variables are listed is not important. If a variable is not given a value, it is initialized with 0.0. If some of the parameters should be fixed in the fit list them in the ''Fix'' property in any order, e.g. "a,c". - -The resulting parameters are returned in a [[TableWorkspace]] set in ''OutputParameters'' property. Also for displaying purposes ''OutputWorkspace'' is returned. It contains the initial spectrum, the fitted spectrum and their difference. - -== Example == -[[Image:UserFunction1D.gif]] - -In this example the fitting function is a*exp(-(x-c)^2*s). The parameter ''s'' is fixed. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/CurveFitting/src/Voigt.cpp b/Code/Mantid/Framework/CurveFitting/src/Voigt.cpp index 3d574d2554a7..e6accddaf3d1 100644 --- a/Code/Mantid/Framework/CurveFitting/src/Voigt.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/Voigt.cpp @@ -1,21 +1,3 @@ -/*WIKI* -A Voigt function is a convolution between a Lorentzian and Gaussian and is defined as: - -: V(X,Y) = \frac{Y}{\pi}\int_{-\infty}^{+\infty}dz\frac{exp^{-z^2}}{Y^2 + (X - z)^2} - -where - -* X - Normalized line separation width; -* Y - Normalized collision separation width. - -Generally, the Voigt function involves a numerical integral and is therefore a computational -intensive task. However, several approximations to the Voigt function exist making it palatable -for fitting in a least-squares algorithm. The approximation used here is described in - -* A.B. McLean, C.E.J. Mitchell, D.M. Swanston, Implementation of an efficient analytical approximation to the Voigt function for photoemission lineshape analysis, Journal of Electron Spectroscopy and Related Phenomena, Volume 69, Issue 2, 29 September 1994, Pages 125-132, ISSN 0368-2048, 10.1016/0368-2048(94)02189-7.(http://www.sciencedirect.com/science/article/pii/0368204894021897) - -The approximation uses a combination of 4 Lorentzians in two variables to generate good approximation to the true function. - *WIKI*/ //---------------------------------------------------------------------------------------------- // Includes //---------------------------------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/AppendGeometryToSNSNexus.cpp b/Code/Mantid/Framework/DataHandling/src/AppendGeometryToSNSNexus.cpp index e97b2f7adc30..7aa1858a7a73 100644 --- a/Code/Mantid/Framework/DataHandling/src/AppendGeometryToSNSNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/AppendGeometryToSNSNexus.cpp @@ -1,13 +1,3 @@ -/*WIKI* -This algorithm is intended to append the geometry information into a raw NeXus file. -It is initially for use only at the SNS, as it is needed for the currently upgrade program. -But there is nothing preventing it being used elsewhere. - -The algorithm takes the geometry information in the IDF togther with the log values in a given NeXus file -and calculates the resolved positions of all the detectors and then writes this into the NeXus file specified. - -*WIKI*/ - #include "MantidDataHandling/AppendGeometryToSNSNexus.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/CompressEvents.cpp b/Code/Mantid/Framework/DataHandling/src/CompressEvents.cpp index 2b6790562dad..50ee3af38413 100644 --- a/Code/Mantid/Framework/DataHandling/src/CompressEvents.cpp +++ b/Code/Mantid/Framework/DataHandling/src/CompressEvents.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - - - -This algorithm starts by sorting the event lists by TOF; therefore you may gain speed by calling [[SortEvents]] beforehand. Starting from the smallest TOF, all events within Tolerance are considered to be identical. Pulse times are ignored. A weighted event without time information is created; its TOF is the average value of the summed events; its weight is the sum of the weights of the input events; its error is the sum of the square of the errors of the input events. - -Note that using CompressEvents may introduce errors if you use too large of a tolerance. Rebinning an event workspace still uses an all-or-nothing view: if the TOF of the event is in the bin, then the counts of the bin is increased by the event's weight. If your tolerance is large enough that the compound event spans more than one bin, then you will get small differences in the final histogram. - -If you are working from the raw events with TOF resolution of 0.100 microseconds, then you can safely use a tolerance of, e.g., 0.05 microseconds to group events together. In this case, histograms with/without compression are identical. If your workspace has undergone changes to its X values (unit conversion for example), you have to use your best judgement for the Tolerance value. - - - - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -148,4 +131,3 @@ void CompressEvents::exec() } // namespace DataHandling } // namespace Mantid - diff --git a/Code/Mantid/Framework/DataHandling/src/CreateChopperModel.cpp b/Code/Mantid/Framework/DataHandling/src/CreateChopperModel.cpp index 614087fdbbd9..40984519af42 100644 --- a/Code/Mantid/Framework/DataHandling/src/CreateChopperModel.cpp +++ b/Code/Mantid/Framework/DataHandling/src/CreateChopperModel.cpp @@ -1,18 +1,3 @@ -/*WIKI* -Creates a model for a chopper using the given parameters. The parameters are given as a string to allow flexibility for each chopper model having different parameterisation. - -The chopper point is an index that can be used for multi-chopper instruments. The indices start from zero, with this being closest to moderator. - -Available models with parameter names: -* FermiChopper - -** AngularVelocity - The angular velocity value or log name -** ChopperRadius - The radius, in metres, of the whole chopper -** SlitThickness - The thickness, in metres, of the slit -** SlitRadius - The radius of curvature, in metres, of the slit -** JitterSigma - The FWHH value for the jitter calculation in microseconds -** Ei - The Ei for this run as a value or log name -*WIKI*/ - #include "MantidDataHandling/CreateChopperModel.h" #include "MantidAPI/FermiChopperModel.h" #include "MantidKernel/BoundedValidator.h" diff --git a/Code/Mantid/Framework/DataHandling/src/CreateModeratorModel.cpp b/Code/Mantid/Framework/DataHandling/src/CreateModeratorModel.cpp index 1257579216be..ecfe1a896cc3 100644 --- a/Code/Mantid/Framework/DataHandling/src/CreateModeratorModel.cpp +++ b/Code/Mantid/Framework/DataHandling/src/CreateModeratorModel.cpp @@ -1,14 +1,3 @@ -/*WIKI* -Creates a model of a moderator using the given parameters. The parameters are given as a string to allow flexibility for each moderator model having different parameterisation. - -Available models with parameter names: -* IkedaCarpenterModerator - -** TiltAngle - The tilt angle in degrees; -** TauF - The fast decay coefficient in microseconds -** TauS - The slow decay coefficient in microseconds -** R - The mixing coefficient -*WIKI*/ - #include "MantidDataHandling/CreateModeratorModel.h" #include "MantidAPI/IkedaCarpenterModerator.h" diff --git a/Code/Mantid/Framework/DataHandling/src/CreateSampleShape.cpp b/Code/Mantid/Framework/DataHandling/src/CreateSampleShape.cpp index ad4159e0fd76..f26faec8106d 100644 --- a/Code/Mantid/Framework/DataHandling/src/CreateSampleShape.cpp +++ b/Code/Mantid/Framework/DataHandling/src/CreateSampleShape.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Creates a shape object that defines the sample and sets the sample for the given -workspace. Shapes are defined using XML descriptions that can be found -[[HowToDefineGeometricShape|here]]. -*WIKI*/ //-------------------------------- // Includes //-------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/CreateSimulationWorkspace.cpp b/Code/Mantid/Framework/DataHandling/src/CreateSimulationWorkspace.cpp index 4be691c07479..8cf9af2dd2e3 100644 --- a/Code/Mantid/Framework/DataHandling/src/CreateSimulationWorkspace.cpp +++ b/Code/Mantid/Framework/DataHandling/src/CreateSimulationWorkspace.cpp @@ -1,9 +1,3 @@ -/*WIKI* -Creates a blank workspace for a given instrument with the option of pulling in detector tables from a RAW/NeXus data file. The histogram sizes are given by binning parameters, see [[Rebin]], rather than explicit data arrays. -There is also an option to set the X axis unit. - -If the DetectorTableFilename property is blank then it is assumed that a 1:1 spectra-mapping is required and the workspace will have the same number of histograms as detectors in the instrument (not including monitors) -*WIKI*/ #include "MantidDataHandling/CreateSimulationWorkspace.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/DefineGaugeVolume.cpp b/Code/Mantid/Framework/DataHandling/src/DefineGaugeVolume.cpp index 90ae0511a310..e6ed05e2fa9e 100644 --- a/Code/Mantid/Framework/DataHandling/src/DefineGaugeVolume.cpp +++ b/Code/Mantid/Framework/DataHandling/src/DefineGaugeVolume.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - -Intended for use on data from engineering beamlines, this algorithm creates a shape object for use as the 'gauge volume' (i.e. the portion of the sample that is visible -to the detectors in a given run) of a larger sample in the -[[AbsorptionCorrection]] algorithm. The sample shape will also need to be defined using, e.g., the [[CreateSampleShape]] algorithm. Shapes are defined using XML descriptions that can be found [[HowToDefineGeometricShape|here]]. - -Internally, this works by attaching the XML string (after validating it) to a property called "GaugeVolume" on the workspace's [[Run]] object. - - -*WIKI*/ //-------------------------------- // Includes //-------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/DeleteTableRows.cpp b/Code/Mantid/Framework/DataHandling/src/DeleteTableRows.cpp index 565ca8ea3c34..2a438b5efbbf 100644 --- a/Code/Mantid/Framework/DataHandling/src/DeleteTableRows.cpp +++ b/Code/Mantid/Framework/DataHandling/src/DeleteTableRows.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -If the specified rows exist they will be deleted form the workspace. If the row list is empty the algorithm does nothing. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/DetermineChunking.cpp b/Code/Mantid/Framework/DataHandling/src/DetermineChunking.cpp index 7e5deceeaa5e..aac8feb9a0ae 100644 --- a/Code/Mantid/Framework/DataHandling/src/DetermineChunking.cpp +++ b/Code/Mantid/Framework/DataHandling/src/DetermineChunking.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Workflow algorithm to determine chunking strategy -for event nexus, runinfo.xml, raw, or histo nexus files -*WIKI*/ - #include #include #include diff --git a/Code/Mantid/Framework/DataHandling/src/FilterEventsByLogValuePreNexus.cpp b/Code/Mantid/Framework/DataHandling/src/FilterEventsByLogValuePreNexus.cpp index fea2f0ddee25..8b6e0191209f 100644 --- a/Code/Mantid/Framework/DataHandling/src/FilterEventsByLogValuePreNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/FilterEventsByLogValuePreNexus.cpp @@ -1,19 +1,3 @@ -/*WIKI* - - - - -The LoadEventPreNeXus algorithm stores data from the pre-nexus neutron event data file in an [[EventWorkspace]]. The default histogram bin boundaries consist of a single bin able to hold all events (in all pixels), and will have their [[units]] set to time-of-flight. Since it is an [[EventWorkspace]], it can be rebinned to finer bins with no loss of data. - -=== Optional properties === -Specific pulse ID and mapping files can be specified if needed; these are guessed at automatically from the neutron filename, if not specified. - -A specific list of pixel ids can be specified, in which case only events relating to these pixels will appear in the output. - -The ChunkNumber and TotalChunks properties can be used to load only a section of the file; e.g. if these are 1 and 10 respectively only the first 10% of the events will be loaded. - -*WIKI*/ - #include "MantidDataHandling/FilterEventsByLogValuePreNexus.h" #include #include diff --git a/Code/Mantid/Framework/DataHandling/src/FindDetectorsInShape.cpp b/Code/Mantid/Framework/DataHandling/src/FindDetectorsInShape.cpp index 4bc3b774ed28..1cd5eba88f55 100644 --- a/Code/Mantid/Framework/DataHandling/src/FindDetectorsInShape.cpp +++ b/Code/Mantid/Framework/DataHandling/src/FindDetectorsInShape.cpp @@ -1,6 +1,3 @@ -/*WIKI* -The algorithm places the user defined geometric shape within the virtual instrument and reports back the detector id of every detector that in contained within it. A detector is considered to be contained it its central location point is contained within the shape. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -116,4 +113,3 @@ namespace Mantid } // namespace DataHandling } // namespace Mantid - diff --git a/Code/Mantid/Framework/DataHandling/src/FindDetectorsPar.cpp b/Code/Mantid/Framework/DataHandling/src/FindDetectorsPar.cpp index e3b01b97a8e7..ffd4b63010f8 100644 --- a/Code/Mantid/Framework/DataHandling/src/FindDetectorsPar.cpp +++ b/Code/Mantid/Framework/DataHandling/src/FindDetectorsPar.cpp @@ -1,34 +1,3 @@ -/*WIKI* - -Identifies geometrical parameters of detectors and groups of detectors after the workspaces were grouped using ASCII or XML map file. -Located in DataHangdling\Instrument\Detectors group and intended to be used as Child Algorithm of saveNXSPE algorithm, though can be deployed independently. Dynamic casting from iAlgorithm and accessors functions return calculated parameters to saveNXSPE when FindDetectorsPar used as the Child Algorithm of saveNXSPE procedure; - - -Internal Child Algorithm identifies the group topology, namely if a group of detectors is arranged into a rectangular shape or in a ring. The algorithm calculates the geometrical centre of the detectors group and 6 points, located within +-1/4 width of the first detector of the group. If the centre or any of these points belong to the group of the detectors itself, the group assumed to have a rectangular topology, and if not -- the cylindrical one (ring). - -Single detector defined to have the rectangular shape. - -After identifying the topology, the parameters are calculated using formulas for angles in Cartesian or Cylindrical coordinate systems accordingly - -== [[SavePAR|par]] and [[SavePHX|phx]] files == - -These files are ascii files which are used to describe the combined detectors geometry defined by map files. There are no reasons for you to use it unless this Mantid algorithm is working unsatisfactory for you. In this case you can quickly modify and use par file until this algorithm is modified. It is your responsibility then to assure the correspondence between mapped detectors and parameters in the par file. - -The par files are simple ASCII files with the following columns: - - 1st column sample-detector distance (m) - 2nd " scattering angle (deg) - 3rd " azimuthal angle (deg) (west bank = 0 deg, north bank = -90 deg etc.) (Note the reversed sign convention cf .phx files) - 4th " width (m) - 5th " height (m) - - -When processed by this algorithm, 4th and 5th column are transformed into angular values. - -[[SavePHX|Phx]] files are Mslice phx files, which do not contain secondary flight path. This path is calculated by the algorithm from the data in the instrument description and the angular values are calculated as in nxspe file. There are no reason to use phx files to build nxspe files at the moment unless you already have one and need to repeat your previous results with Mantid. - - -*WIKI*/ #include "MantidDataHandling/FindDetectorsPar.h" #include "MantidGeometry/Objects/BoundingBox.h" #include "MantidKernel/Logger.h" diff --git a/Code/Mantid/Framework/DataHandling/src/GenerateGroupingPowder.cpp b/Code/Mantid/Framework/DataHandling/src/GenerateGroupingPowder.cpp index d3db3d8abd5f..3571f4932b6f 100644 --- a/Code/Mantid/Framework/DataHandling/src/GenerateGroupingPowder.cpp +++ b/Code/Mantid/Framework/DataHandling/src/GenerateGroupingPowder.cpp @@ -1,11 +1,3 @@ -/*WIKI* -For powder samples, with no texture, the scattering consists only of rings. This algorithm reads a workspace and -an angle step, then generates a grouping file (.xml) and a par file (.par), by grouping detectors in intervals -i*step to (i+1)*step. The par file is required for saving in the NXSPE format, since Mantid does not correctly calculates -the correct angles for detector groups. It will contain average distances to the detector groups, and average scattering angles. -The x and y extents in the par file are radians(step)*distance and 0.01, and are not supposed to be accurate. -*WIKI*/ - #include "MantidDataHandling/GenerateGroupingPowder.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/GroupDetectors.cpp b/Code/Mantid/Framework/DataHandling/src/GroupDetectors.cpp index f1876e2fe68c..f31f228a78af 100644 --- a/Code/Mantid/Framework/DataHandling/src/GroupDetectors.cpp +++ b/Code/Mantid/Framework/DataHandling/src/GroupDetectors.cpp @@ -1,65 +1,3 @@ -/*WIKI* - - -This algorithm sums, bin-by-bin, multiple spectra into a single spectra. The errors are summed in quadrature and the algorithm checks that the bin boundaries in X are the same. The new summed spectra are created at the start of the output workspace and have spectra index numbers that start at zero and increase in the order the groups are specified. Each new group takes the spectra numbers from the first input spectrum specified for that group. All detectors from the grouped spectra will be moved to belong to the new spectrum. - -Not all spectra in the input workspace have to be copied to a group. If KeepUngroupedSpectra is set to true any spectra not listed will be copied to the output workspace after the groups in order. If KeepUngroupedSpectra is set to false only the spectra selected to be in a group will be used. - -To create a single group the list of spectra can be identified using a list of either spectrum numbers, detector IDs or workspace indices. The list should be set against the appropriate property. - -An input file allows the specification of many groups. The file must have the following format* (extra space and comments starting with # are allowed) : - - "unused number1" - "unused number2" - "number_of_input_spectra1" - "input spec1" "input spec2" "input spec3" "input spec4" - "input spec5 input spec6" - ** - "unused number2" - "number_of_input_spectra2" - "input spec1" "input spec2" "input spec3" "input spec4" - -* each phrase in "" is replaced by a single integer - -** the section of the file that follows is repeated once for each group - -Some programs require that "unused number1" is the number of groups specified in the file but Mantid ignores that number and all groups contained in the file are read regardless. "unused number2" is in other implementations the group's spectrum number but in this algorithm it is is ignored and can be any integer (not necessarily the same integer) - - An example of an input file follows: - 2 - 1 - 64 - 1 2 3 4 5 6 7 8 9 10 - 11 12 13 14 15 16 17 18 19 20 - 21 22 23 24 25 26 27 28 29 30 - 31 32 33 34 35 36 37 38 39 40 - 41 42 43 44 45 46 47 48 49 50 - 51 52 53 54 55 56 57 58 59 60 - 61 62 63 64 - 2 - 60 - 65 66 67 68 69 70 71 72 73 74 - 75 76 77 78 79 80 81 82 83 84 - 85 86 87 88 89 90 91 92 93 94 - 95 96 97 98 99 100 101 102 103 104 - 105 106 107 108 109 110 111 112 113 114 - 115 116 117 118 119 120 121 122 123 124 - -In addition the following XML grouping format is also supported -
- - - - - - - - - -
-where is used to specify spectra IDs and detector IDs. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -194,4 +132,3 @@ void GroupDetectors::exec() } // namespace DataHandling } // namespace Mantid - diff --git a/Code/Mantid/Framework/DataHandling/src/GroupDetectors2.cpp b/Code/Mantid/Framework/DataHandling/src/GroupDetectors2.cpp index 265ad2e62ba9..3818feceee72 100644 --- a/Code/Mantid/Framework/DataHandling/src/GroupDetectors2.cpp +++ b/Code/Mantid/Framework/DataHandling/src/GroupDetectors2.cpp @@ -1,71 +1,3 @@ -/*WIKI* - - -This algorithm sums, bin-by-bin, multiple spectra into a single spectra. The errors are summed in quadrature and the algorithm checks that the bin boundaries in X are the same. The new summed spectra are created at the start of the output workspace and have spectra index numbers that start at zero and increase in the order the groups are specified. Each new group takes the spectra numbers from the first input spectrum specified for that group. All detectors from the grouped spectra will be moved to belong to the new spectrum. - -Not all spectra in the input workspace have to be copied to a group. If KeepUngroupedSpectra is set to true any spectra not listed will be copied to the output workspace after the groups in order. If KeepUngroupedSpectra is set to false only the spectra selected to be in a group will be used. - -To create a single group the list of spectra can be identified using a list of either spectrum numbers, detector IDs or workspace indices. The list should be set against the appropriate property. - -An input file allows the specification of many groups. The file must have the following format* (extra space and comments starting with # are allowed) : - - "unused number1" - "unused number2" - "number_of_input_spectra1" - "input spec1" "input spec2" "input spec3" "input spec4" - "input spec5 input spec6" - ** - "unused number2" - "number_of_input_spectra2" - "input spec1" "input spec2" "input spec3" "input spec4" - -* each phrase in "" is replaced by a single integer - -** the section of the file that follows is repeated once for each group - -Some programs require that "unused number1" is the number of groups specified in the file but Mantid ignores that number and all groups contained in the file are read regardless. "unused number2" is in other implementations the group's spectrum number but in this algorithm it is is ignored and can be any integer (not necessarily the same integer) - - An example of an input file follows: - 2 - 1 - 64 - 1 2 3 4 5 6 7 8 9 10 - 11 12 13 14 15 16 17 18 19 20 - 21 22 23 24 25 26 27 28 29 30 - 31 32 33 34 35 36 37 38 39 40 - 41 42 43 44 45 46 47 48 49 50 - 51 52 53 54 55 56 57 58 59 60 - 61 62 63 64 - 2 - 60 - 65 66 67 68 69 70 71 72 73 74 - 75 76 77 78 79 80 81 82 83 84 - 85 86 87 88 89 90 91 92 93 94 - 95 96 97 98 99 100 101 102 103 104 - 105 106 107 108 109 110 111 112 113 114 - 115 116 117 118 119 120 121 122 123 124 - -In addition the following XML grouping format is also supported -
- - - - - - - - - -
-where is used to specify spectra IDs and detector IDs. - -== Previous Versions == - -=== Version 1 === -The set of spectra to be grouped can be given as a list of either spectrum numbers, detector IDs or workspace indices. The new, summed spectrum will appear in the workspace at the first workspace index of the pre-grouped spectra (which will be given by the ResultIndex property after execution). The detectors for all the grouped spectra will be moved to belong to the first spectrum. ''A technical note: the workspace indices previously occupied by summed spectra will have their data zeroed and their spectrum number set to a value of -1.'' - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/Load.cpp b/Code/Mantid/Framework/DataHandling/src/Load.cpp index b5a333190876..3e9be9923491 100644 --- a/Code/Mantid/Framework/DataHandling/src/Load.cpp +++ b/Code/Mantid/Framework/DataHandling/src/Load.cpp @@ -1,33 +1,3 @@ -/*WIKI* - -The Load algorithm is a more intelligent algorithm than most other load algorithms. When passed a filename it attempts to search the existing load [[:Category:Algorithms|algorithms]] and find the most appropriate to load the given file. The specific load algorithm is then run as a child algorithm with the exception that it logs messages to the Mantid logger. - -==== Specific Load Algorithm Properties ==== - -Each specific loader will have its own properties that are appropriate to it: SpectrumMin and SpectrumMax for ISIS RAW/NeXuS, FilterByTof_Min and FilterByTof_Max for Event data. The Load algorithm cannot know about these properties until it has been told the filename and found the correct loader. Once this has happened the properties of the specific Load algorithm are redeclared on to that copy of Load. - -*WIKI*/ -/*WIKI_USAGE_NO_SIGNATURE* -==== Python ==== -Given the variable number and types of possible arguments that Load can take, its simple Python function cannot just list the properties as arguments like the others do. Instead the Python function Load can handle any number of arguments. The OutputWorkspace and Filename arguments are the exceptions in that they are always checked for. A snippet regarding usage from the help(Load) is shown below -
- -# Simple usage, ISIS NeXus file -Load('INSTR00001000.nxs', OutputWorkspace='run_ws') - -# ISIS NeXus with SpectrumMin and SpectrumMax = 1 -Load('INSTR00001000.nxs', OutputWorkspace='run_ws', SpectrumMin=1, SpectrumMax=1) - -# SNS Event NeXus with precount on -Load('INSTR_1000_event.nxs', OutputWorkspace='event_ws', Precount=True) - -# A mix of keyword and non-keyword is also possible -Load(OutputWorkspace='event_ws', Filename='INSTR_1000_event.nxs', Precount=True) -
-==== Loading Multiple Files ==== - -Loading multiple files is also possible with Load, as well as workspace addition. For more information, see [[MultiFileLoading]]. -*WIKI_USAGE_NO_SIGNATURE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadAscii.cpp b/Code/Mantid/Framework/DataHandling/src/LoadAscii.cpp index 61bb049bb96d..e0c998a3e989 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadAscii.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadAscii.cpp @@ -1,22 +1,3 @@ -/*WIKI* - -The LoadAscii algorithm reads in spectra data from a text file and stores it in a [[Workspace2D]] as data points. The data in the file must be organized in columns separated by commas, tabs, spaces, colons or semicolons. Only one separator type can be used throughout the file; use the "Separator" property to tell the algorithm which to use. The algorithm [[SaveAscii]] is normally able to produce such a file. - -By default the algorithm attempts to guess which lines are header lines by trying to see where a contiguous block of numbers starts. This can be turned off by specifying the "SkipNumLines" property, which will then tell the algorithm to simply use that as the the number of header lines. - -The format can be one of: -* Two columns: 1st column=X, 2nd column=Y, E=0 -* For a workspace of ''n'' spectra, 2''n''+1 columns: 1''st'' column=X, 2i''th'' column=Y, 2i+1''th'' column =E -* Four columns: 1st column=X, 2nd column=Y, 3rd column=E, 4th column=DX (X error) - -The number of bins is defined by the number of rows. - -The resulting workspace will have common X binning for all spectra. - -This algorithm cannot load a file created by [[SaveAscii]] if it has X errors written and several spectra. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadAscii2.cpp b/Code/Mantid/Framework/DataHandling/src/LoadAscii2.cpp index 508d47828847..46339e1a670d 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadAscii2.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadAscii2.cpp @@ -1,29 +1,3 @@ -/*WIKI* - -The LoadAscii2 algorithm reads in spectra data from a text file and stores it in a [[Workspace2D]] as data points. The data in the file must be organized in columns separated by commas, tabs, spaces, colons or semicolons. Only one separator type can be used throughout the file; use the "Separator" property to tell the algorithm which to use. The algorithm [[SaveAscii2]] is normally able to produce such a file. - -The format must be: -* A single integer or blank line to denote a new spectra -* For each bin, between two and four columns of delimted data in the following order: 1st column=X, 2nd column=Y, 3rd column=E, 4th column=DX (X error) -* Comments can be included by prefixing the line with a non-numerical character which must be consistant throughout the file and specified when you load the file. Defaults to "#" -* The number of bins is defined by the number of rows and must be identical for each spectra - -The following is an example valid file of 4 spectra of 2 bins each with no X error -# X , Y , E -1 -2.00000000,2.00000000,1.00000000 -4.00000000,1.00000000,1.00000000 -2 -2.00000000,5.00000000,2.00000000 -4.00000000,4.00000000,2.00000000 -3 -2.00000000,3.00000000,1.00000000 -4.00000000,0.00000000,0.00000000 -4 -2.00000000,0.00000000,0.00000000 -4.00000000,0.00000000,0.00000000 - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadCalFile.cpp b/Code/Mantid/Framework/DataHandling/src/LoadCalFile.cpp index 83c04194c809..f71414b2048d 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadCalFile.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadCalFile.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - - -This algorithm loads an ARIEL-style 5-column ASCII .cal file into up to 3 workspaces: a GroupingWorkspace, OffsetsWorkspace and/or MaskWorkspace. - -The format is -* Number: ignored.* UDET: detector ID.* Offset: calibration offset. Goes to the OffsetsWorkspace. -* Select: 1 if selected (not masked out). Goes to the MaskWorkspace. -* Group: group number. Goes to the GroupingWorkspace. - - - - - - -*WIKI*/ #include "MantidAPI/Algorithm.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/MatrixWorkspace.h" @@ -336,4 +319,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadCanSAS1D.cpp b/Code/Mantid/Framework/DataHandling/src/LoadCanSAS1D.cpp index a5f4705bb5aa..8bece26ae3c4 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadCanSAS1D.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadCanSAS1D.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Loads the given file, which should be in the CanSAS1d format specified by canSAS 1D Data Formats Working -Group schema http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd and creates output workspace. -CANSAS has a Wiki page at http://www.smallangles.net/wgwiki/index.php/canSAS_Working_Groups - -If the file contains mulitple SASentry elements a workspace group will be created and each SASentry will be one workspace in the group. Loading multiple SASdata elements is not supported. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadCanSAS1D2.cpp b/Code/Mantid/Framework/DataHandling/src/LoadCanSAS1D2.cpp index 48d74460d8a8..7fd998678000 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadCanSAS1D2.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadCanSAS1D2.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Loads the given file, which should be in the CanSAS1d format specified by canSAS 1D Data Formats Working -Group schema http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd and creates output workspace. -CANSAS has a Wiki page at http://www.smallangles.net/wgwiki/index.php/canSAS_Working_Groups - -If the file contains mulitple SASentry elements a workspace group will be created and each SASentry will be one workspace in the group. Loading multiple SASdata elements is not supported. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadDaveGrp.cpp b/Code/Mantid/Framework/DataHandling/src/LoadDaveGrp.cpp index 753315dfba4c..95901797de75 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadDaveGrp.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadDaveGrp.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -This algorithm loads data from a DAVE grouped ASCII file. These have been generated at the SNS for all the inelastic beamlines, hence the choice in the defaults for the axis units. - - -*WIKI*/ #include "MantidDataHandling/LoadDaveGrp.h" #include "MantidDataObjects/Workspace2D.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadDetectorInfo.cpp b/Code/Mantid/Framework/DataHandling/src/LoadDetectorInfo.cpp index efe0fb1005e7..6233c5c39719 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadDetectorInfo.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadDetectorInfo.cpp @@ -1,266 +1,3 @@ -/*WIKI* - -The detection time delay for each detector is subtracted from the time of flight bin boundaries in the spectrum associated with that detector. It is required that all the monitors have the same time delay and if this is non-zero the delay time is added to all TOF values. It is important that the units of the input workspace are TOF in microseconds, that [[GroupDetectors]] has not been run and this algorithm is only applied once to a workspace. - -Values for the partial pressure of 3He and wall thickness are added into the parameter map for each detector in a form that can be read by [[DetectorEfficiencyCor]]. That is, the values are assumed to be in atmosheres and meters, respectively, and the properties are stored internally in the workspace parameter map as "3He(atm)" and "wallT(m)". The values are likely to be read from the same RAW file that the workspace was loaded from or a DAT file that corrosponds to the same run or series of experimental runs. - -Spectra whose associated detector data are not found in the input DAT or RAW file will not have their time of flight bin boundaries adjusted. Similarly nothing will be written to the parameter map for those detectors, the algorithm will continue to process data as normal but a warning will be written to the log. Detectors that are listed in the input file but do not exist in the instrument definition file will be ignored and details will be written to the log. - -If all the time offsets are the same and the file ''appears'' to contain enough data for all detectors all detector spectra will use same bin boundaries, where possible. This will make the algorithm run much more quickly and use less memory. - -When using a RAW file the time offset for each detector is read from the "hold off" table in the file's header while pressure and wall thickness data must be present in the user table array. The format for .DAT files is specified in the document "DETECTOR.DAT format" written by Prof G Toby Perring ("detector format.doc") - -If the RelocateDets option is set to true, it is false by default, then the detectors are moved to the corresponding positions specified in the data file provided. - -=== Detectors.dat data format === - -The the detector data can be stored as ASCII or [http://download.nexusformat.org/ NeXus] data file. The description of the ASCII DETECTOR.dat file is provided in the table below. Nexus file format can come in two flavours. The first one is completely equivalent to the ASCII 19 column data format and introduced to increase the speed of accessing these data in binary format, where the second one left for compatibility with Libisis. It has meaningful data corresponding to the columns 1-6, 17&18 below, but does not support multiple tube pressures and wall thickness. - -The [[LoadDetectorInfo]] algorithm currently reads and interprets rows 1-6,17&18 of the table, provided below (or columns of det.dat file) or correspondent data blocks from the NeXus file. It also does not understand the short (15 columns) MARI detector.dat ASCII file format (see '''ISIS detector.dat files''' below). - -==== Co-ordinate frames ==== - -For the purposes of the detector table we choose a right handed set of axes fixed in the spectrometer: - - x-axis -- horizontal - y-axis -- vertical - z-axis -- parallel to ki - -Centres of each detector element are defined in spherical polar co-ordinates as seen from the sample position: - - THETA Polar angle measured from the z-axis [what we would normally call the scattering angle PHI]. Note that 0< THETA <180 - PHI Azimuthal angle measured from the x-axis in a right handed sense [what TGP, CDF and RD01 call -BETA]. - For example, the West Bank of HET has PHI=0, the North Bank has PHI=90, the South Bank has PHI=270. - -To specify the orientation of a detector, define axes x', y', z' as follows: - - x'-axis increasing THETA - y'-axis increasing PHI - z'-axis parallel to the line joining sample and detector - -The natural coordinate frame for the detector, xd, yd, zd, may not coincide with x', y', z'. For example, the natural frame for a gas tube is with zd along the axis of the tube, and the direction of xd chosen to be perpendicular to the line joining the detector with the sample. The characteristic dimensions of the detector, W_x, W_y, W_z, are given in the frame xd, yd, zd. - -The detector coordinate axes xd, yd, zd are related to x', y', z' by a rotation. The transformation is be expressed by a three-component vector αx, αy, αz, where the magnitude of the vector gives the angle of rotation in a right-hand sense, and the normalised elements give the components along x', y', z' of the unit vector about which the rotation takes place. The magnitude of the vector is in degrees. - - e.g. non-PSD gas tube on the Debye-Scherrer cone: - αx = -900, αy = αz = 00; Wx = Wy = 0.0254, Wz = 0.300 - - e.g. Davidson bead monitor filling the HET beam at the monitor_2 position: - αx = αy = αz = 00; Wx = Wy = 0.045, Wz = 0.00025 - -Note that for PSD detectors the angles and dimensions refer to the pixel, not the whole tube. For HET, Wz = 0.914/64 = 0.01428. - -==== File format ==== -The file consists of number of ASCII columns, separated by spaces. All distances are in meters, and all angles in degrees. -{| border="1" cellpadding="5" cellspacing="0" -!Column Number -!Column Name -!Column Type -!Column Description -|- -| 1 -|DET_NO -|integer -|Detector index number as in SPECTRA.DAT -|- -| 2 -|DELTA -|real -|Electronics delay time (us). The origin is up to you. HOMER uses the peak in monitor_2 as the origin of time, so the only thing that really matters is the difference in the delay time between the detectors and the monitors. -|- -| 3 -|L2 -|real -|Sample - detector distance (m) -|- -| 4 -|CODE -|integer -|Code number that describes the detector type. Up to now this column has been redundant so the old files can contain unity for all detectors. Proper detectors should now follow the scheme: - 0 Dummy detector entry (see later) - 1 Davidson scintillator bead monitor (or just monitor) - 2 non-PSD gas tube - 3 PSD gas tube -|- -| 5 -|THETA -|real -|Scattering angle (deg) -|- -| 6 -|PHI -|real -|Azimuthal angle (deg). Origin and rotation sense defined above -|- -| 7 -|W_x -|real -|True detector dimensions (m) in the frame xd’ -|- -| 8 -|W_y -|real -|True detector dimensions (m) in the frame yd’ -|- -| 9 -|W_z -|real -|True detector dimensions (m) in the frame zd’ -|- -| 10 -|F_x -|real -| False detector dimensions (m) in the frame xd' to avoid gaps between detectors -|- -| 11 -|F_y -|real -|False detector dimensions (m) in the frame yd' to avoid gaps between detectors -|- -| 12 -|F_z -|real -|False detector dimensions (m) in the frame zd' to avoid gaps between detectors -|- -| 13 -|αx -|real -| x-coordinate of the vector describing orientation of detector in the co-ordinate frame defined above. -|- -| 14 -|αy -|real -| y-coordinate of the vector describing orientation of detector in the co-ordinate frame defined above. -|- -| 15 -|αz -|real -| z-coordinate of the vector describing orientation of detector in the co-ordinate frame defined above. -|- -|COLSPAN='4' |The columns with numbers higher then those described above contain information about the detectors that is dependent on the detector type: -|- -|COLSPAN='4' |CODE = 0 (Dummy detector entry) : -|- -|- -| 16 -| det_1 -| real -|Frequently, some of the inputs to the data acquisition electronics do not have any detectors plugged into them. To ensure that any noise on these inputs is safely directed to a ‘dust-bin’ spectrum, they are given detector numbers which are associated with spectrum 0 in SPECTRA.DAT. Dummy entries in DETECTOR.DAT are required for each of these dummy detectors. These entries should be given detector CODE = 0, which will be used to indicate that the other entries in DETECTOR.DAT can be ignored. For the sake of clarity, set all DELTA, L2...DET_4 to zero for dummy detectors. -|- -| 17 -| det_2 -| real -| The same as 16 -|- -| 18 -| det_3 -| real -| The same as 16 -|- -| 19 -| det_4 -| real -| The same as 16 -|- -|- -|COLSPAN='4' |CODE = 1 (monitor) : -|- -| 16 -| det_1 -| real -| Dead time (us). Important for old detectors and high counting rate. -|- -| 17 -| det_2 -| real -|Macroscopic absorption cross-section Σ(m-1meV-0.5). For our monitors this is for Li scintillator glass. [I think I know what Σ is approximately, but we don’t at present use it anywhere, so set to zero] -|- -| 18 -| det_3 -| real -| Ignored. Set to zero -|- -| 19 -| det_4 -| real -| Ignored. Set to zero -|- -|- -|COLSPAN='4' |CODE = 2 (non-PSD gas tube) : -|- -| 16 -| det_1 -| real -| Dead time (us). Important for old detectors and high counting rate. -|- -| 17 -| det_2 -| real -|Gas tube detector 3He partial pressure (atms) -|- -| 18 -| det_3 -| real -| Gas tube wall thickness (m) [0.00080] -|- -| 19 -| det_4 -| real -| Ignored. Set to zero -|- -|- -|COLSPAN='4' |CODE = 3 (PSD gas tube) : -|- -| 16 -| det_1 -| real -| Dead time (us). Important for old detectors and high counting rate. -|- -| 17 -| det_2 -| real -|Gas tube detector 3He partial pressure (atms) [10.0 or 6.4] -|- -| 18 -| det_3 -| real -| Gas tube wall thickness (m) [0.00080] -|- -| 19 -| det_4 -| real -|Index of tube to which the pixel belongs. Each PSD gas tube must be given a unique identifier. This enables programs that use DETECTOR.DAT to recognise that pixels have come from the same PSD tube. -|- - -|} - -==== ISIS DETECTOR.DAT files ==== - -The ISIS raw files seem to have two possible entries - MARI is non-standard for some reason - - nuse=14 nuse=10 - (ncol=19) (ncol=15) - det_no spec spec - delta delt delt - l2 len2 len2 - code code code - theta tthe tthe - phi ut1 ut1 - W_x ut2 ut2 - W_y ut3 ut3 - W_z ut4 ut4 - F_x ut5 - F_y ut6 - F_z ut7 - αx ut8 ut5 - αy ut9 ut6 - αz ut10 ut7 - det_1 ut11 - det_2 ut12 ut8 - det_3 ut13 ut9 - det_4 ut14 ut10 - - *WIKI*/ #include "MantidDataHandling/LoadDetectorInfo.h" #include "MantidAPI/FileProperty.h" #include "MantidKernel/Exception.h" @@ -709,4 +446,3 @@ namespace Mantid } } - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadDetectorsGroupingFile.cpp b/Code/Mantid/Framework/DataHandling/src/LoadDetectorsGroupingFile.cpp index 052935b23060..62dd18df5e96 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadDetectorsGroupingFile.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadDetectorsGroupingFile.cpp @@ -1,103 +1,3 @@ -/*WIKI* - -This algorithm is used to generate a GroupingWorkspace from an XML or Map file containing detectors' grouping information. - -== XML File Format == - -Extension: .xml - -=== Parameters === -* "instrument": optional attribute of node 'detector-grouping'. It must be valid instrument name. If "instrument" is not defined, only tag "ids" can be used in this XML file. -* "ID": optional attribute of node 'group'. It must be an integer, and the key to denote group. If "ID" is not given, algorithm will use default group ID for each group in the same order as in XML file. The automatic group ID starts from 1. -* "detids": a node to define grouping by detectors' ID. Its value must be a list of integers separated by ','. A '-' is used between 2 integers to define a range of detectors. -* "component": a node to define that all detectors belonged to a component in the instrument are to be in a same group. Its value should be a valid component name. -* "ids": a node to define that all detectors of the spectrum whose ID 's defined by "ids" will be grouped together. - -Example 1: - - - - - 3,34-44,47 - bank21 - - bank26 - - - -Example 2: - - - - - 3,34-44,47 - bank21 - - bank26 - - - -Example 3: - - - - - 3,34-44,47 - - 26 - 27,28 - - - -== Map File Format == - -Extension: .map - -The file must have the following format* (extra space and comments starting with # are allowed) : - - "unused number1" - "unused number2" - "number_of_input_spectra1" - "input spec1" "input spec2" "input spec3" "input spec4" - "input spec5 input spec6" - ** - "unused number2" - "number_of_input_spectra2" - "input spec1" "input spec2" "input spec3" "input spec4" - -* each phrase in "" is replaced by a single integer - -** the section of the file that follows is repeated once for each group - -Some programs require that "unused number1" is the number of groups specified in the file but Mantid ignores that number and all groups contained in the file are read regardless. "unused number2" is in other implementations the group's spectrum number but in this algorithm it is is ignored and can be any integer (not necessarily the same integer) - -An example of an input file follows: - - 3 - 1 - 64 - 1 2 3 4 5 6 7 8 9 10 - 11 12 13 14 15 16 17 18 19 20 - 21 22 23 24 25 26 27 28 29 30 - 31 32 33 34 35 36 37 38 39 40 - 41 42 43 44 45 46 47 48 49 50 - 51 52 53 54 55 56 57 58 59 60 - 61 62 63 64 - 2 - 60 - 65 66 67 68 69 70 71 72 73 74 - 75 76 77 78 79 80 81 82 83 84 - 85 86 87 88 89 90 91 92 93 94 - 95 96 97 98 99 100 101 102 103 104 - 105 106 107 108 109 110 111 112 113 114 - 115 116 117 118 119 120 121 122 123 124 - 3 - 60 - 125 126 127 - 180 181 182 183 184 - -== - -*WIKI*/ #include "MantidDataHandling/LoadDetectorsGroupingFile.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadDspacemap.cpp b/Code/Mantid/Framework/DataHandling/src/LoadDspacemap.cpp index 34442dfdd139..53435dfa74e8 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadDspacemap.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadDspacemap.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - - -Loads a Dspacemap file (POWGEN binary, VULCAN binary or ascii format) into an OffsetsWorkspace. - -The resulting workspace can then be used with, e.g. [[AlignDetectors]] to perform calibration. - - - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidDataHandling/LoadCalFile.h" @@ -417,4 +406,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadEmptyInstrument.cpp b/Code/Mantid/Framework/DataHandling/src/LoadEmptyInstrument.cpp index b150101e8005..dcd7fe435f65 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadEmptyInstrument.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadEmptyInstrument.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -This algorithm is to enable you to look at an instrument without having to load a full data file. -Instead of loading a data file, it loads the [[InstrumentDefinitionFile]] for the instrument, which has information about the instrument. -The instrument is referred to as being empty because there is no data associated with it. - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidDataHandling/LoadEmptyInstrument.h" #include "MantidDataObjects/EventWorkspace.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp index 7a729169d2c5..5f3234d0e913 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp @@ -1,29 +1,3 @@ -/*WIKI* - -The LoadEventNeXus algorithm loads data from an EventNexus file into an [[EventWorkspace]]. The default histogram bin boundaries consist of a single bin able to hold all events (in all pixels), and will have their [[units]] set to time-of-flight. Since it is an [[EventWorkspace]], it can be rebinned to finer bins with no loss of data. - -Sample logs, such as motor positions or e.g. temperature vs time, are also loaded using the [[LoadNexusLogs]] child algorithm. - -=== Optional properties === - -If desired, you can filter out the events at the time of loading, by specifying minimum and maximum time-of-flight values. This can speed up loading and reduce memory requirements if you are only interested in a narrow range of the times-of-flight of your data. - -You may also filter out events by providing the start and stop times, in seconds, relative to the first pulse (the start of the run). - -If you wish to load only a single bank, you may enter its name and no events from other banks will be loaded. - -The Precount option will count the number of events in each pixel before allocating the memory for each event list. Without this option, because of the way vectors grow and are re-allocated, it is possible for up to 2x too much memory to be allocated for a given event list, meaning that your EventWorkspace may occupy nearly twice as much memory as needed. The pre-counting step takes some time but that is normally compensated by the speed-up in avoid re-allocating, so the net result is smaller memory footprint and approximately the same loading time. - -==== Veto Pulses ==== - -Veto pulses can be filtered out in a separate step using [[FilterByLogValue]]: - - FilterByLogValue(InputWorkspace="ws", OutputWorkspace="ws", LogName="veto_pulse_time", PulseFilter="1") - - -*WIKI*/ - - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadEventPreNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadEventPreNexus.cpp index f25f0f29278a..38ddbbada0e4 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadEventPreNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadEventPreNexus.cpp @@ -1,19 +1,3 @@ -/*WIKI* - - - - -The LoadEventPreNeXus algorithm stores data from the pre-nexus neutron event data file in an [[EventWorkspace]]. The default histogram bin boundaries consist of a single bin able to hold all events (in all pixels), and will have their [[units]] set to time-of-flight. Since it is an [[EventWorkspace]], it can be rebinned to finer bins with no loss of data. - -=== Optional properties === -Specific pulse ID and mapping files can be specified if needed; these are guessed at automatically from the neutron filename, if not specified. - - - - - -*WIKI*/ - #include "MantidDataHandling/LoadEventPreNexus.h" #include "MantidAPI/FileFinder.h" #include "MantidAPI/RegisterFileLoader.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadEventPreNexus2.cpp b/Code/Mantid/Framework/DataHandling/src/LoadEventPreNexus2.cpp index ba415777de65..dbba0b074515 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadEventPreNexus2.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadEventPreNexus2.cpp @@ -1,19 +1,3 @@ -/*WIKI* - - - - -The LoadEventPreNeXus algorithm stores data from the pre-nexus neutron event data file in an [[EventWorkspace]]. The default histogram bin boundaries consist of a single bin able to hold all events (in all pixels), and will have their [[units]] set to time-of-flight. Since it is an [[EventWorkspace]], it can be rebinned to finer bins with no loss of data. - -=== Optional properties === -Specific pulse ID and mapping files can be specified if needed; these are guessed at automatically from the neutron filename, if not specified. - -A specific list of pixel ids can be specified, in which case only events relating to these pixels will appear in the output. - -The ChunkNumber and TotalChunks properties can be used to load only a section of the file; e.g. if these are 1 and 10 respectively only the first 10% of the events will be loaded. - -*WIKI*/ - #include "MantidDataHandling/LoadEventPreNexus2.h" #include #include diff --git a/Code/Mantid/Framework/DataHandling/src/LoadFullprofResolution.cpp b/Code/Mantid/Framework/DataHandling/src/LoadFullprofResolution.cpp index 91845fd6cbd9..52dcec9ac8dd 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadFullprofResolution.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadFullprofResolution.cpp @@ -1,18 +1,3 @@ -/*WIKI* - -Load Fullprof resolution (.irf) file to TableWorkspace(s) and optionally into the instruments of matrix workspaces with one workspace per bank of the .irf file. -Either or both of the Tableworkspace(s) and matrix workspace must be set. - -Where a Workspace is specified the support for translating Fullprof resolution parameters into the workspace for subsequent -fitting is limitted to Fullprof: - -* NPROF=13, Ikeda-Carpender pseudo-Voigt translated into [[IkedaCarpenterPV]] according to [[CreateIkedaCarpenterParameters]] -* NPROF=9, back-to-back-exponential pseudo-Voigt translated into [[BackToBackExponential]] according to [[CreateBackToBackParameters]] - -Note for NPROF=9 the translation is currently ignoring the Lorentzian part of the pseudo-Voigt. - -*WIKI*/ - #include "MantidDataHandling/LoadFullprofResolution.h" #include "MantidAPI/FileProperty.h" #include "MantidKernel/ArrayProperty.h" @@ -1096,39 +1081,3 @@ namespace DataHandling } // namespace DataHandling } // namespace Mantid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadGSASInstrumentFile.cpp b/Code/Mantid/Framework/DataHandling/src/LoadGSASInstrumentFile.cpp index d8402f88d5be..0bbcc86380d0 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadGSASInstrumentFile.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadGSASInstrumentFile.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -Load parameters from a GSAS instrument file into a table workspace - -Later developments of this algorithm will enable these parameters to be put into the instrument of a wotrkspace -for either Ikeda-Carpender pseudo-Voigt translated into [[IkedaCarpenterPV]] or -back-to-back-exponential pseudo-Voigt translated into [[BackToBackExponential]]. - -*WIKI*/ - #include "MantidDataHandling/LoadGSASInstrumentFile.h" #include "MantidAPI/FileProperty.h" #include "MantidKernel/ArrayProperty.h" @@ -451,39 +441,3 @@ namespace DataHandling } // namespace DataHandling } // namespace Mantid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadGSS.cpp b/Code/Mantid/Framework/DataHandling/src/LoadGSS.cpp index 818934c9b1b8..967f362fdc28 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadGSS.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadGSS.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -Loads a GSS file such as that saved by [[SaveGSS]]. - -Two types of GSAS files are supported - * RALF - * SLOG - - - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadIDFFromNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadIDFFromNexus.cpp index 416a256691af..bfe3e598db9e 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadIDFFromNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadIDFFromNexus.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Some Nexus files contain an instrument definition. This algorithm loads the instrument from this definition. -You may need to tell this algorithm where in the Nexus file to find the Instrument folder, which contains the instrument definition. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadILL.cpp b/Code/Mantid/Framework/DataHandling/src/LoadILL.cpp index 37fea8632be8..23d5d434482e 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadILL.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadILL.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -Loads an ILL TOF NeXus file into a [[Workspace2D]] with the given name. - -This loader calculates the elastic peak position (EPP) on the fly. -In cases where the dispersion peak might be higher than the EPP, it is good practice to load a Vanadium file. - -The property FilenameVanadium is optional. If it is present the EPP will be loaded from the Vanadium data. - -To date this algorithm only supports: IN4, IN5 and IN6 - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadILLIndirect.cpp b/Code/Mantid/Framework/DataHandling/src/LoadILLIndirect.cpp index 17e32784426f..7628fb320a2d 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadILLIndirect.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadILLIndirect.cpp @@ -1,7 +1,3 @@ -/*WIKI* - TODO: Enter a full wiki-markup description of your algorithm here. You can then use the Build/wiki_maker.py script to generate your full wiki page. - *WIKI*/ - #include "MantidDataHandling/LoadILLIndirect.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/RegisterFileLoader.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadILLSANS.cpp b/Code/Mantid/Framework/DataHandling/src/LoadILLSANS.cpp index 1a034b1fa3f0..6b1cd3eabe63 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadILLSANS.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadILLSANS.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Loads an ILL D33 nexus file into a [[Workspace2D]] with the given name. - - *WIKI*/ - #include "MantidDataHandling/LoadILLSANS.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/RegisterFileLoader.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp b/Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp index 4177d9eb459a..e6023d388d54 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Loads a Nexus file created from an ISIS instrument. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadInstrument.cpp b/Code/Mantid/Framework/DataHandling/src/LoadInstrument.cpp index b42e910096a2..43cc021af90d 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadInstrument.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadInstrument.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Loads an instrument definition file ([[InstrumentDefinitionFile|IDF]]) into a workspace, which contains information about detector positions, their geometric shape, slit properties, links between values stored in ISIS log-files and components of the instrument and so on. For more on IDFs see: [[InstrumentDefinitionFile]]. - -By default the algorithm will write a 1:1 map between the spectrum number and detector ID. Any custom loading algorithm that calls this as a Child Algorithm will therefore get this 1:1 map be default. If the custom loader is to write its own map then it is advised to set RewriteSpectraMap to false to avoid extra work. - -The instrument to load can be specified by either the InstrumentXML, Filename and InstrumentName properties (given here in order of precedence if more than one is set). At present, if the InstrumentXML is used the InstrumentName property should also be set. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadInstrumentFromNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadInstrumentFromNexus.cpp index 9a695be04bc1..232870a02c17 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadInstrumentFromNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadInstrumentFromNexus.cpp @@ -1,13 +1,3 @@ -/*WIKI* -Attempts to load information about the instrument from a ISIS NeXus file. In particular attempt to -read L2 and 2-theta detector position values and add detectors which are positioned relative -to the sample in spherical coordinates as (r,theta,phi)=(L2,2-theta,0.0). Also adds dummy source -and samplepos components to instrument. - -LoadInstrumentFromNexus is intended to be used as a child algorithm of -other Loadxxx algorithms, rather than being used directly. -It is used by LoadMuonNexus version 1. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadInstrumentFromRaw.cpp b/Code/Mantid/Framework/DataHandling/src/LoadInstrumentFromRaw.cpp index c86e506e3073..5fb69983ba1c 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadInstrumentFromRaw.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadInstrumentFromRaw.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadIsawDetCal.cpp b/Code/Mantid/Framework/DataHandling/src/LoadIsawDetCal.cpp index 10eccedd47e0..a1f8452dadee 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadIsawDetCal.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadIsawDetCal.cpp @@ -1,18 +1,3 @@ -/*WIKI* - -Moves the detectors in an instrument using the origin and 2 vectors of the rotated plane from an ISAW DetCal file. - -*WIKI*/ -/*WIKI_USAGE* -'''Python''' - LoadIsawDetCal("SNAP_4111","SNAP.DetCal") - -'''C++''' - IAlgorithm* alg = FrameworkManager::Instance().createAlgorithm("LoadIsawDetCal"); - alg->setPropertyValue("InputWorkspace", "SNAP_4111"); - alg->setPropertyValue("Filename", "SNAP.DetCal"); - alg->execute(); -*WIKI_USAGE*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadLLB.cpp b/Code/Mantid/Framework/DataHandling/src/LoadLLB.cpp index 6ae0bf9876d3..d465eb369a3a 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadLLB.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadLLB.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -Loads an LLB MIBEMOL TOF NeXus file into a [[Workspace2D]] with the given name. - -This loader calculates the elastic peak position (EPP) on the fly. - -To date this algorithm only supports the MIBEMOL instrument. - -*WIKI*/ - #include "MantidDataHandling/LoadLLB.h" #include "MantidAPI/FileProperty.h" #include "MantidKernel/UnitFactory.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadLOQDistancesFromRaw.cpp b/Code/Mantid/Framework/DataHandling/src/LoadLOQDistancesFromRaw.cpp index 650d0e43b9a4..d8ca7f74485f 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadLOQDistancesFromRaw.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadLOQDistancesFromRaw.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -The ISIS TS1 instrument [http://www.isis.stfc.ac.uk/instruments/loq/ LOQ] writes values for the moderator-sample and sample-detector distances to the RAW data file. These distances are required for correct data reduction. This algorithm extracts the information from the i_l1 and i_sddist variables of the IVPB struct respectively and moves the appropriate components so that the Mantid instrument satisfies these values. - - -*WIKI*/ //------------------------------------------------------- // Includes //------------------------------------------------------ diff --git a/Code/Mantid/Framework/DataHandling/src/LoadLog.cpp b/Code/Mantid/Framework/DataHandling/src/LoadLog.cpp index 06ffdc666413..374984166ba0 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadLog.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadLog.cpp @@ -1,33 +1,3 @@ -/*WIKI* - -'''Parameters Note:''' Note that it is possible to use both of the optional 'spectrum' properties (i.e. a range and a list) together if so desired. - -===Load ISIS log file(s)=== -Assumes that a log file originates from a PC (not VMS) environment, i.e. the log files to be loaded are assumed to have the extension .txt. Its filename is assumed to starts with the raw data file identifier followed by the character '_', and a log file is assumed to have a format of two columns, where the first column consists of data-time strings of the ISO 8601 form and the second column consists of either numbers or strings that may contain spaces. - -===Parent algorithm=== -LoadLog is also a child algorithm of [[LoadRaw]], i.e. it gets called whenever LoadRaw is executed. - -===Load SNS text log file=== -If the file is determined to be a SNS text log file it should be of the form - - 655747325.450625 0.000000 24.000000 26.000000 0.000000 - 655747325.716250 0.296875 24.000000 26.000000 0.000000 - 655747325.997500 0.593750 24.000000 26.000000 0.000000 - 655747326.263125 0.906250 24.000000 26.000000 0.000000 - 655747326.544375 1.093750 24.000000 26.000000 0.000000 - 655747326.825625 1.406250 24.000000 26.000000 0.000000 - 655747327.091250 1.703125 24.000000 26.000000 0.000000 - 655747327.372500 2.000000 24.000000 26.000000 0.000000 - 655747327.638125 2.203125 24.000000 26.000000 0.000000 - 655747327.919375 2.500000 24.000000 26.000000 0.000000 - 655747328.200625 2.796875 24.000000 26.000000 0.000000 - 655747328.466250 3.093750 24.000000 26.000000 0.000000 - -The first column is the number of seconds since January 1, 1990, then the other columns (space delimited) are the log values. For this mode the ''name'' and ''units'' parameters must be specified. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadLogsForSNSPulsedMagnet.cpp b/Code/Mantid/Framework/DataHandling/src/LoadLogsForSNSPulsedMagnet.cpp index 703c392f5791..c7bf66e96e29 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadLogsForSNSPulsedMagnet.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadLogsForSNSPulsedMagnet.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ #include "MantidDataHandling/LoadLogsForSNSPulsedMagnet.h" #include "MantidKernel/BinaryFile.h" #include "MantidKernel/System.h" @@ -252,4 +248,3 @@ struct Pulse } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadMappingTable.cpp b/Code/Mantid/Framework/DataHandling/src/LoadMappingTable.cpp index edf5b63579d1..39f4a5acbb0d 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadMappingTable.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadMappingTable.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Loads the mapping table between spectra and [[IDetector]] from a RAW file. It fills the [[SpectraToDetectorMap]] object contained in a [[workspace]]. This algorithm will fail if the [[workspace]] does not already point to a full [[instrument]] [[geometry]] (which usually means it must be run after [[LoadInstrument]]/[[LoadInstrumentFromRaw]]). - -The association is one to many, i.e. a spectrum can have one or many detectors contributing to it. Alternatively the same spectrum can contribute to different spectra (for example in DAE2 (Data Aquisition Electronic) when a spectra containing electronically focussed data is created simultaneously with individual spectra). - - -*WIKI*/ #include "MantidDataHandling/LoadMappingTable.h" #include "LoadRaw/isisraw2.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadMask.cpp b/Code/Mantid/Framework/DataHandling/src/LoadMask.cpp index a79699dc70bc..c2d0621e8f30 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadMask.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadMask.cpp @@ -1,52 +1,3 @@ -/*WIKI* - -This algorithm is used to load a masking file, which can be in XML format (defined later in this page) or old-styled -calibration file. - -== Definition of Mask == - * If a pixel is masked, it means that the data from this pixel won't be used. - In the masking workspace (i.e., [[SpecialWorkspace2D]]), the corresponding value is 1. - * If a pixel is NOT masked, it means that the data from this pixel will be used. - In the masking workspace (i.e., [[SpecialWorkspace2D]]), the corresponding value is 0. - -== File Format == - -==== XML File Format ==== -Example 1: - - - - - 3,34-44,47 - bank123 - bank124 - - - -==== ISIS File Format ==== -Example 2: - - 1-3 62-64 - 65-67 126-128 - 129-131 190-192 - 193-195 254-256 - 257-259 318-320 - 321-323 382-384 - 385 387 446 448 - ... ... - -All the integers in file of this format are spectrum IDs to mask. Two spectrum IDs with "-" in between indicate a continuous range of spectra to mask. It does not matter if there is any space between integer number and "-". There is no restriction on how the line is structured. Be noticed that any line starting with a non-digit character, except space, will be treated as a comment line. - -This algorithm loads masking file to a SpecialWorkspace2D/MaskWorkspace. - -Supporting - * Component ID --> Detector IDs --> Workspace Indexes - * Detector ID --> Workspace Indexes - * Spectrum ID --> Workspace Indexes - - -*WIKI*/ - #include "MantidDataHandling/LoadMask.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" @@ -945,4 +896,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadMcStas.cpp b/Code/Mantid/Framework/DataHandling/src/LoadMcStas.cpp index 35bd430330dc..550ff7518d6a 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadMcStas.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadMcStas.cpp @@ -1,43 +1,3 @@ -/*WIKI* - -Reads a McStas Nexus file into a Mantid WorkspaceGroup with a user-supplied name. Data generated by McStas monitor components are stored in workspaces of type Workspace2D or Event. - - -LoadMcStas replaces LoadMcStasEventNexus. -LoadMcStas can be used for reading McStas 2.1 histogram and event data. -LoadMcStasNexus can be used for reading McStas 2.0 histogram data. - - - -McStas 2.1 event data are generated as follows. The McStas component monitor_nD must be called with the argument: options ="mantid square x limits=[-0.2 0.2] bins=128 y limits=[-0.2 0.2] bins=128, neutron pixel t, list all neutrons". Number of bins and limits can be chosen freely. - -To generate McStas 2.1 event data and the corresponding IDF for Mantid run the following commands from an xterm: - -* export MCSTAS_CFLAGS="-g -lm -O2 -DUSE_NEXUS -lNeXus" - -* mcrun -c templateSANS.instr --format=NeXus -n0 - -* mcdisplay templateSANS.instr -n0 --format=Mantid - -* cp templateSANS.out.xml IDF.xml - -* mcrun templateSANS --format=NeXus - - - -The new features added to McStas has been tested on the following platforms: - -* Linux - -* Mac - use either the Intel or gcc 4.8 compiler. Simulations using Nexus format and event data does not work using the Clang compiler. - - - -For more information about McStas and its general usage for simulating neutron scattering instruments and experiments visit the McStas homepage http://www.mcstas.org. - -*WIKI*/ - - #include "MantidDataHandling/LoadMcStas.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/WorkspaceFactory.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadMcStasNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadMcStasNexus.cpp index c83ec76572bf..f550ed49ce0f 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadMcStasNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadMcStasNexus.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Reads a McStas NeXus file into a Mantid WorkspaceGroup with a user-supplied name. Data generated by McStas monitor components are stored in workspaces of type [[Workspace2D]]. All data sets are numbered and nested within the WorkspaceGroup. -This algorithm is under development. To date it has been tested with the following instrument files from the McStas 2.0 instrument suite: templateDIFF, templateLaue, templateTAS, Reflectometer, Test_Pol_TripleAxis, TestSANS and Tomography. -For more information about McStas and its general usage for simulating neutron scattering instruments and experiments visit the McStas homepage http://www.mcstas.org. - -*WIKI*/ - #include "MantidDataHandling/LoadMcStasNexus.h" #include "MantidAPI/NumericAxis.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadMuonLog.cpp b/Code/Mantid/Framework/DataHandling/src/LoadMuonLog.cpp index 5c617b5fa04f..2dbb9e2c06e8 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadMuonLog.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadMuonLog.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -The Algorithm is very similar to [[LoadLog]] except that the source of the data is a Muon Nexus file. - -===Parent algorithm=== -LoadMuonLog is also a child algorithm of [[LoadMuonNexus]], i.e. it gets called whenever LoadMuonNexus is executed. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadMuonNexus1.cpp b/Code/Mantid/Framework/DataHandling/src/LoadMuonNexus1.cpp index ca4e9b75c794..739067b2d1af 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadMuonNexus1.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadMuonNexus1.cpp @@ -1,48 +1,3 @@ -/*WIKI* - - -The algorithm LoadMuonNexus will read a Muon Nexus data file (original format) and place the data -into the named workspace. -The file name can be an absolute or relative path and should have the extension -.nxs or .NXS. -If the file contains data for more than one period, a separate workspace will be generated for each. -After the first period the workspace names will have "_2", "_3", and so on, appended to the given workspace name. -For single period data, the optional parameters can be used to control which spectra are loaded into the workspace. -If spectrum_min and spectrum_max are given, then only that range to data will be loaded. -If a spectrum_list is given than those values will be loaded. -* TODO get XML descriptions of Muon instruments. This data is not in existing Muon Nexus files. -* TODO load the spectra detector mapping. This may be very simple for Muon instruments. - -===Time series data=== -The log data in the Nexus file (NX_LOG sections) will be loaded as TimeSeriesProperty data within the workspace. -Time is stored as seconds from the Unix epoch. - -===Errors=== - -The error for each histogram count is set as the square root of the number of counts. - -===Time bin data=== - -The ''corrected_times'' field of the Nexus file is used to provide time bin data and the bin edge values are calculated from these -bin centre times. - -===Multiperiod data=== - -To determine if a file contains data from more than one period the field ''switching_states'' is read from the Nexus file. -If this value is greater than one it is taken to be the number of periods, N_p of the data. -In this case the N_s spectra in the ''histogram_data'' field are split with N_s/N_p assigned to each period. - -===Dead times and detector grouping=== -Muon Nexus v1 files might contain dead time and detector grouping informationl. These are loaded as TableWorkspaces of the format accepted by ApplyDeadTimeCorr and MuonGroupDetectors accordingly. These are returned if and only if names are specified for the properties. For multi-period data workspace groups might be returned, if information in the Nexus files contains this information for each period. - -===ChildAlgorithms used=== - -The ChildAlgorithms used by LoadMuonNexus are: -* LoadMuonLog - this reads log information from the Nexus file and uses it to create TimeSeriesProperty entries in the workspace. -* LoadInstrument - this algorithm looks for an XML description of the instrument and if found reads it. -* LoadIntstrumentFromNexus - this is called if the normal LoadInstrument fails. As the Nexus file has limited instrument data, this only populates a few fields. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadMuonNexus2.cpp b/Code/Mantid/Framework/DataHandling/src/LoadMuonNexus2.cpp index f3ad552aceb1..2ae1fa99abe7 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadMuonNexus2.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadMuonNexus2.cpp @@ -1,49 +1,3 @@ -/*WIKI* - - -The algorithm LoadMuonNexus will read a Muon Nexus data file (original format) and place the data -into the named workspace. -The file name can be an absolute or relative path and should have the extension -.nxs or .NXS. -If the file contains data for more than one period, a separate workspace will be generated for each. -After the first period the workspace names will have "_2", "_3", and so on, appended to the given workspace name. -For single period data, the optional parameters can be used to control which spectra are loaded into the workspace. -If spectrum_min and spectrum_max are given, then only that range to data will be loaded. -If a spectrum_list is given than those values will be loaded. -* TODO get XML descriptions of Muon instruments. This data is not in existing Muon Nexus files. -* TODO load the spectra detector mapping. This may be very simple for Muon instruments. - -===Time series data=== -The log data in the Nexus file (NX_LOG sections) will be loaded as TimeSeriesProperty data within the workspace. -Time is stored as seconds from the Unix epoch. - -===Errors=== - -The error for each histogram count is set as the square root of the number of counts. - -===Time bin data=== - -The ''corrected_times'' field of the Nexus file is used to provide time bin data and the bin edge values are calculated from these -bin centre times. - -===Multiperiod data=== - -To determine if a file contains data from more than one period the field ''switching_states'' is read from the Nexus file. -If this value is greater than one it is taken to be the number of periods, N_p of the data. -In this case the N_s spectra in the ''histogram_data'' field are split with N_s/N_p assigned to each period. - -===ChildAlgorithms used=== - -The ChildAlgorithms used by LoadMuonNexus are: -* LoadMuonLog - this reads log information from the Nexus file and uses it to create TimeSeriesProperty entries in the workspace. -* LoadInstrument - this algorithm looks for an XML description of the instrument and if found reads it. -* LoadIntstrumentFromNexus - this is called if the normal LoadInstrument fails. As the Nexus file has limited instrument data, this only populates a few fields. - -==Previous Versions== -===Version 1=== -Version 1 supports the loading version 1.0 of the muon nexus format. This is still in active use, if the current version of LoadMuonNexus detects that it has been asked to load a previous version muon nexus file it will call the previous version of the algorithm to perform the task. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp b/Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp index 85e5e78a5114..c8605ec72e57 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Algorithm to load an NXSPE file into a workspace2D. It will create a new instrument, that can be overwritten later by the LoadInstrument algorithm. - -'''NOTE:''' In the current implementation, the rendering of the NXSPE instrument is VERY memory intensive. - - -*WIKI*/ #include "MantidDataHandling/LoadNXSPE.h" #include "MantidKernel/UnitFactory.h" #include "MantidAPI/FileProperty.h" @@ -392,5 +384,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadNexus.cpp index 495e67319d09..614170e51f07 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadNexus.cpp @@ -1,18 +1,3 @@ -/*WIKI* - - -The algorithm LoadNexus will read the given Nexus file and try to identify its type so that it can be read into a workspace. -The file name can be an absolute or relative path and should have the extension -.nxs or .nx5. -Currently only Nexus Muon Version 1 files are recognised, but this will be extended as other types are supported such as [[LoadNexusProcessed]]. - -If the file contains data for more than one period, a separate workspace will be generated for each. -After the first period the workspace names will have "_2", "_3", and so on, appended to the given workspace name. -For single period data, the optional parameters can be used to control which spectra are loaded into the workspace. -If spectrum_min and spectrum_max are given, then only that range to data will be loaded. -If a spectrum_list is given than those values will be loaded. - -*WIKI*/ // LoadNexus // @author Freddie Akeroyd, STFC ISIS Faility // @author Ronald Fowler, e_Science - updated to be wrapper to either LoadMuonNeuxs or LoadNexusProcessed diff --git a/Code/Mantid/Framework/DataHandling/src/LoadNexusLogs.cpp b/Code/Mantid/Framework/DataHandling/src/LoadNexusLogs.cpp index 833e462d3f17..46ab95cf255a 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadNexusLogs.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadNexusLogs.cpp @@ -1,13 +1,3 @@ -/*WIKI* - - -The LoadNexusLogs algorithm loads the sample logs from the given nexus file. The logs are visible from MantidPlot if you right-click on a workspace and select "Sample Logs...". - -If you use [[LoadEventNexus]] or [[LoadISISNexus]], calling this algorithm is not necessary, since it called as a child algorithm. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp b/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp index 4770f218869e..ac2ba31962ee 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -This algorithm loads all monitors found in a NeXus file into a single [[Workspace2D]]. The algorithm assumes that all of the monitors are histograms and have the same bin boundaries. '''NOTE:''' The entry is assumed to be in SNS format, so the loader is currently not generically applicable. It is also written for single entry files and will need tweaking to handle period data where the monitors are different. - - -*WIKI*/ #include "MantidDataHandling/LoadNexusMonitors.h" #include "MantidDataHandling/LoadEventNexus.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadNexusProcessed.cpp b/Code/Mantid/Framework/DataHandling/src/LoadNexusProcessed.cpp index 1ccf8de979a6..55a620bd91e7 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadNexusProcessed.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadNexusProcessed.cpp @@ -1,32 +1,3 @@ -/*WIKI* - - -The algorithm LoadNexusProcessed will read a Nexus data file created by [[SaveNexusProcessed]] and place the data -into the named workspace. -The file name can be an absolute or relative path and should have the extension -.nxs, .nx5 or .xml. -Warning - using XML format can be extremely slow for large data sets and generate very large files. -The optional parameters can be used to control which spectra are loaded into the workspace (not yet implemented). -If spectrum_min and spectrum_max are given, then only that range to data will be loaded. - -A Mantid Nexus file may contain several workspace entries each labelled with an integer starting at 1. -By default the highest number workspace is read, earlier ones can be accessed by setting the EntryNumber. - -If the saved data has a reference to an XML file defining instrument geometry this will be read. - - -===Time series data=== -The log data in the Nexus file (NX_LOG sections) is loaded as TimeSeriesProperty data within the workspace. -Time is stored as seconds from the Unix epoch. -Only floating point logs are stored and loaded at present. - -===Child algorithms used=== - -The Child Algorithms used by LoadMuonNexus are: -* LoadInstrument - this algorithm looks for an XML description of the instrument and if found reads it. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadPDFgetNFile.cpp b/Code/Mantid/Framework/DataHandling/src/LoadPDFgetNFile.cpp index b7f9d5215960..9f8dcd6064ff 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadPDFgetNFile.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadPDFgetNFile.cpp @@ -1,20 +1,3 @@ -/*WIKI* - - -Loads a PDFgetN file such as that saved by PDFgetN. - -PDFgetN generates many types of files for the final result and communication among different executables at internal steps. This algorithm is designed to recognize and load all the ASCII based files created by PDFgetN. - -The file types include - * .ain - * .braw - * .bsmo - * .sq - * .sqa - * .gr - - -*WIKI*/ #include "MantidDataHandling/LoadPDFgetNFile.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/RegisterFileLoader.h" @@ -477,33 +460,3 @@ namespace DataHandling } // namespace DataHandling } // namespace Mantid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadParameterFile.cpp b/Code/Mantid/Framework/DataHandling/src/LoadParameterFile.cpp index 59919e9867b4..f1c89407d6b4 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadParameterFile.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadParameterFile.cpp @@ -1,20 +1,3 @@ -/*WIKI* - -This algorithm allows instrument parameters to be specified in a separate file from the [[InstrumentDefinitionFile|IDF]]. The required format for this file is identical to that used for defining parameters through s in an IDF. Below is an example of how to define a parameter named 'test' to be associated with a component named 'bank_90degnew' defined in the IDF of the HRPD instrument: -
- - - - - - - - - -
- - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadPreNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadPreNexus.cpp index 666451222973..f72ef3019ace 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadPreNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadPreNexus.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Workflow algorithm to load all of the preNeXus files. -*WIKI*/ - #include #include #include diff --git a/Code/Mantid/Framework/DataHandling/src/LoadPreNexusMonitors.cpp b/Code/Mantid/Framework/DataHandling/src/LoadPreNexusMonitors.cpp index e5f48bbbd65d..3fdee009eb78 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadPreNexusMonitors.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadPreNexusMonitors.cpp @@ -1,11 +1,3 @@ -/*WIKI* - - -It reads that filenames of the monitors from the runinfo file. It will only work with histogram monitors and assumes that all monitors are on the same time axis. -It also assumes that the beam monitor files are in the same directory as the runinfo.xml file. - - -*WIKI*/ #include "MantidDataHandling/LoadPreNexusMonitors.h" #include "MantidAPI/FileProperty.h" #include "MantidKernel/ConfigService.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadQKK.cpp b/Code/Mantid/Framework/DataHandling/src/LoadQKK.cpp index 6e919d11680a..c46716a48355 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadQKK.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadQKK.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadRKH.cpp b/Code/Mantid/Framework/DataHandling/src/LoadRKH.cpp index 7776c385fd87..2bf1da31909b 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadRKH.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadRKH.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Loads the given file in the RKH text format, which can be a file with three columns of numbers. If the FirstColumnValue is a recognised [[Unit_Factory|Mantid unit]] the workspace is created with just one spectrum. Alteratively if FirstColumnValue is set to 'SpectrumNumber' then the workspace can have many spectra with the spectrum ID's equal to the first column in the file. - - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadRaw3.cpp b/Code/Mantid/Framework/DataHandling/src/LoadRaw3.cpp index 2b3b84b83371..591fd93bbe16 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadRaw3.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadRaw3.cpp @@ -1,25 +1,3 @@ -/*WIKI* - -The LoadRaw algorithm stores data from the [[RAW_File | RAW]] file in a [[Workspace2D]], which will naturally contain histogram data with each spectrum going into a separate histogram. The time bin boundaries (X values) will be common to all histograms and will have their [[units]] set to time-of-flight. The Y values will contain the counts and will be unit-less (i.e. no division by bin width or normalisation of any kind). The errors, currently assumed Gaussian, will be set to be the square root of the number of counts in the bin. - -=== Optional properties === -If only a portion of the data in the [[RAW_File | RAW]] file is required, then the optional 'spectrum' properties can be set before execution of the algorithm. Prior to loading of the data the values provided are checked and the algorithm will fail if they are found to be outside the limits of the dataset. - -=== Multiperiod data === -If the RAW file contains multiple periods of data this will be detected and the different periods will be output as separate workspaces, which after the first one will have the period number appended (e.g. OutputWorkspace_period). -Each workspace will share the same [[Instrument]], SpectraToDetectorMap and [[Sample]] objects. -If the optional 'spectrum' properties are set for a multiperiod dataset, then they will ignored. - -===Subalgorithms used=== -LoadRaw runs the following algorithms as child algorithms to populate aspects of the output [[Workspace]]: -* [[LoadInstrument]] - Looks for an instrument definition file named XXX_Definition.xml, where XXX is the 3 letter instrument prefix on the RAW filename, in the directory specified by the "instrumentDefinition.directory" property given in the config file (or, if not provided, in the relative path ../Instrument/). If the instrument definition file is not found then the [[LoadInstrumentFromRaw]] algorithm will be run instead. -* [[LoadMappingTable]] - To build up the mapping between the spectrum numbers and the Detectors of the attached [[Instrument]]. -* [[LoadLog]] - Will look for any log files in the same directory as the RAW file and load their data into the workspace's [[Sample]] object. - -==Previous Versions== -LoadRaw version 1 and 2 are no longer available in Mantid. Version 3 has been validated and in active use for several years, if you really need a previous version of this algorithm you will need to use an earlier version of Mantid. -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadRawBin0.cpp b/Code/Mantid/Framework/DataHandling/src/LoadRawBin0.cpp index 490debf3909c..16dbd26b35e1 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadRawBin0.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadRawBin0.cpp @@ -1,9 +1,3 @@ -/*WIKI* - - -The LoadRawBin0 algorithm stores bin 0 data from the selected [[RAW_File | RAW]] file in a [[Workspace2D]]. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadRawSpectrum0.cpp b/Code/Mantid/Framework/DataHandling/src/LoadRawSpectrum0.cpp index b43fd06a5313..97bc25201a60 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadRawSpectrum0.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadRawSpectrum0.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -The LoadRawSpectrum0 algorithm stores spectrum zero data from the selected [[RAW_File | RAW]] file in a [[Workspace2D]]. - -*WIKI*/ - //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadReflTBL.cpp b/Code/Mantid/Framework/DataHandling/src/LoadReflTBL.cpp index f96d4a7ddc16..54322897ba86 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadReflTBL.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadReflTBL.cpp @@ -1,15 +1,3 @@ -/*WIKI* -LoadReflTBl is loads ascii files in Reflectometry TBL format into a tableworkspace. Format accepted is strict to only allow 17 columns of data. - -The 17 columns are split up into rows of 8, so a single row in the TBL file would be split into 3 colums like so: (Where Z is the newly created stitch group index) -A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q - -becomes - -A, B, C, D, E, P, Q, Z -F, G, H, I, J, P, Q, Z -K, L, M, N, O, P, Q, Z -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadSINQFocus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadSINQFocus.cpp index 5ccee5c4703a..f9dc74c991c7 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadSINQFocus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadSINQFocus.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Loads a SINQ (PSI) nexus file into a [[Workspace2D]] with the given name. - -To date this algorithm only supports: FOCUS - - *WIKI*/ - #include "MantidDataHandling/LoadSINQFocus.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/Progress.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadSNSspec.cpp b/Code/Mantid/Framework/DataHandling/src/LoadSNSspec.cpp index be5df65b7f6f..034c67adefd1 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadSNSspec.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadSNSspec.cpp @@ -1,61 +1,3 @@ -/*WIKI* - -The LoadSNSspec algorithm reads in spectra data from a text file and stores it in a Workspace2D as data points. The data in the file must be organized by set of 3 columns (separated by any number of spaces). The first column has to be the X values, the second column the Y values and the third column the error values. - -Here are two examples of such text files that can be loaded with LoadSNSspec: - -''Example 1:'' -
-#F norm: REF_M_2000.nxs
-#F data: REF_M_2001.nxs
-#E 1234567.80
-...
-#C SCL Version - 1.4.1
-
-#S 1 Spectrum ID ('bank1',(0,127))
-#L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A)
-0.0   0.0   0.0
-1.0   5.0   2.0
-2.0   10.0  3.0
-3.0   15.0  2.0
-4.0   20.0  2.5
-5.0   25.0  3.2
-6.0   30.0  4.2
-
-This will create a Workspace2D with 1 spectrum. - -''Example 2:'' -
-#F norm: REF_M_2000.nxs
-#F data: REF_M_2001.nxs
-#E 1234567.80
-...
-#C SCL Version - 1.4.1
-
-#S 1 Spectrum ID ('bank1',(0,127))
-#L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A)
-0.0   0.0   0.0
-1.0   5.0   2.0
-2.0   10.0  3.0
-3.0   15.0  4.0
-
-#S 1 Spectrum ID ('bank1',(1,127))
-#L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A)
-0.0   10.0   0.0
-1.0   15.0   2.0
-2.0   110.0  3.0
-3.0   115.0  4.0
-
-#S 1 Spectrum ID ('bank1',(3,127))
-#L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A)
-0.0   20.0   0.0
-1.0   25.0   2.0
-2.0   210.0  3.0
-3.0   215.0  4.0
-
-This text file will create a Workspace2D with 3 spectra. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadSPE.cpp b/Code/Mantid/Framework/DataHandling/src/LoadSPE.cpp index 72c23733cea7..9ba83d277a8e 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadSPE.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadSPE.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -Loads the file given into a [[Workspace2D]] with the given name. The file should be in the SPE format, which is described [[Media:Spe_file_format.pdf|here]]. -The workspace will have X units of [[Unit_Factory|Energy transfer]]. The other axis will be binned and have units of either [[Unit_Factory|Momentum transfer / Q]] or degrees, depending on the label in the input file. The workspace will be flagged as a distribution. - - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadSampleDetailsFromRaw.cpp b/Code/Mantid/Framework/DataHandling/src/LoadSampleDetailsFromRaw.cpp index 1a7283f18eec..40cb0d93debe 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadSampleDetailsFromRaw.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadSampleDetailsFromRaw.cpp @@ -1,31 +1,3 @@ -/*WIKI* - -The SPB struct within an ISIS raw file defines 4 fields that describe the basic geometry of the sample: -* e_geom; -* e_thick; -* e_height; -* e_width. - -The meaning of the last three are dependent on the flag value ''e_geom'', which defines the sample shape as one of 4 basic shapes: -* 1 = cylinder: radius = e_thick = e_width, height = e_height; -* 2 = flat plate: as named; -* 3 = disc: radius = e_width, thickness = e_thick; -* 4 = single crystal. - -The values are stored on the [http://doxygen.mantidproject.org/classMantid_1_1API_1_1Sample.html#a07df5ce7be639c3cb67f33f5e1c7493f sample] object. - -== Access in Python == -To access these values in Python: - sampleInfo = wksp.getSampleInfo() - print sampleInfo.getGeometryFlag() - print sampleInfo.getThickness() - print sampleInfo.getHeight() - print sampleInfo.getWidth() - -where wksp is a handle to a Mantid workspace. - - -*WIKI*/ //------------------------------------------------------- // Includes //------------------------------------------------------ diff --git a/Code/Mantid/Framework/DataHandling/src/LoadSassena.cpp b/Code/Mantid/Framework/DataHandling/src/LoadSassena.cpp index bdcaea04aee8..1364073f9d70 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadSassena.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadSassena.cpp @@ -1,29 +1,3 @@ -/*WIKI* - -The Sassena application [http://sassena.org] generates intermediate scattering factors from molecular dynamics trajectories. This algorithm reads Sassena output and stores all data in workspaces of type [[Workspace2D]], grouped under a single [[WorkspaceGroup]]. - -Sassena ouput files are in HDF5 format [http://www.hdfgroup.org/HDF5], and can be made up of the following datasets: ''qvectors'', ''fq'', ''fq0'', ''fq2'', and ''fqt'' - -Time units: -Current Sassena version does not specify the time unit, thus the user is required to enter the time in between consecutive data points. Enter the number of picoseconds separating consecutive datapoints. - -The workspace for '''qvectors''': -* X-values for the origin of the vector, default: (0,0,0) -* Y-values for the tip of the vector -* one spectra with three bins for each q-vector, one bin per vector component. If orientational average was performed by Sassena, then only the first component is non-zero. - -The workspaces for '''fq''', '''fq0''', and '''fq2''' contains two spectra: -* First spectrum is the real part, second spectrum is the imaginary part -* X-values contain the moduli of the q vector -* Y-values contain the structure factors - -Dataset '''fqt''' is split into two workspaces, one for the real part and the other for the imaginary part. The structure of these two workspaces is the same: -* X-values contain the time variable -* Y-values contain the structure factors -* one spectra for each q-vector - -*WIKI*/ - #include "MantidDataHandling/LoadSassena.h" #include "MantidAPI/Axis.h" #include "MantidAPI/AnalysisDataService.h" diff --git a/Code/Mantid/Framework/DataHandling/src/LoadSpec.cpp b/Code/Mantid/Framework/DataHandling/src/LoadSpec.cpp index 68160662b0e8..b2e80357f249 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadSpec.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadSpec.cpp @@ -1,61 +1,3 @@ -/*WIKI* - -The LoadSpec algorithm reads in spectra data from a text file and stores it in a Workspace2D as data points. The data in the file must be organized by set of 3 columns (separated by any number of spaces). The first column has to be the X values, the second column the Y values and the third column the error values. - -Here are two examples of such text files that can be loaded with LoadSpec: - -''Example 1:'' -
-#F norm: REF_M_2000.nxs
-#F data: REF_M_2001.nxs
-#E 1234567.80
-...
-#C SCL Version - 1.4.1
-
-#S 1 Spectrum ID ('bank1',(0,127))
-#L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A)
-0.0   0.0   0.0
-1.0   5.0   2.0
-2.0   10.0  3.0
-3.0   15.0  2.0
-4.0   20.0  2.5
-5.0   25.0  3.2
-6.0   30.0  4.2
-
-This will create a Workspace2D with 1 spectrum. - -''Example 2:'' -
-#F norm: REF_M_2000.nxs
-#F data: REF_M_2001.nxs
-#E 1234567.80
-...
-#C SCL Version - 1.4.1
-
-#S 1 Spectrum ID ('bank1',(0,127))
-#L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A)
-0.0   0.0   0.0
-1.0   5.0   2.0
-2.0   10.0  3.0
-3.0   15.0  4.0
-
-#S 1 Spectrum ID ('bank1',(1,127))
-#L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A)
-0.0   10.0   0.0
-1.0   15.0   2.0
-2.0   110.0  3.0
-3.0   115.0  4.0
-
-#S 1 Spectrum ID ('bank1',(3,127))
-#L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A)
-0.0   20.0   0.0
-1.0   25.0   2.0
-2.0   210.0  3.0
-3.0   215.0  4.0
-
-This text file will create a Workspace2D with 3 spectra. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadSpice2D.cpp b/Code/Mantid/Framework/DataHandling/src/LoadSpice2D.cpp index 3044861c0fab..e72fcf39ae76 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadSpice2D.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadSpice2D.cpp @@ -1,8 +1,3 @@ -/*WIKI* - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/LoadTOFRawNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadTOFRawNexus.cpp index 9aa53cafef71..79295f7a8786 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadTOFRawNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadTOFRawNexus.cpp @@ -1,22 +1,3 @@ -/*WIKI* - -This algorithm loads a NeXus file that conforms to the TOFRaw format and stores -it in a 2D workspace. The TOFRaw format is used at SNS and consists of a histogram -representation with common bin boundaries. - -Some NXS files have multiple data fields giving binning in other units -(e.g. d-spacing or momentum). You can choose which binning to use by entering -the '''Signal''' parameter. The default value is 1, which normally will -correspond to TOF. The "Y" units will still be in ''counts''. - -The typical meanings of Signal are as follows (note that these may change!): - -* Signal 1: Time of flight. The data field containing the bin boundaries is ''time_of_flight'' -* Signal 5: q. The data field containing the bin boundaries is ''momentum_transfer'' -* Signal 6: d-spacing. The data field containing the bin boundaries is ''dspacing'' - -*WIKI*/ - #include "MantidAPI/FileProperty.h" #include "MantidAPI/MatrixWorkspace.h" #include "MantidAPI/RegisterFileLoader.h" @@ -597,4 +578,3 @@ void LoadTOFRawNexus::exec() } // namespace DataHandling } // namespace Mantid - diff --git a/Code/Mantid/Framework/DataHandling/src/MaskDetectors.cpp b/Code/Mantid/Framework/DataHandling/src/MaskDetectors.cpp index aefce62eff4e..a4c89e56b4ec 100644 --- a/Code/Mantid/Framework/DataHandling/src/MaskDetectors.cpp +++ b/Code/Mantid/Framework/DataHandling/src/MaskDetectors.cpp @@ -1,56 +1,3 @@ -/*WIKI* -This algorithm will flag the detectors listed as masked([[IDetector]] isMasked() method) and will zero the data in the spectra related to those detectors. - -All but the first property are optional and at least one of the must be set. If several are set, the first will be used. - -The set of detectors to be masked can be given as a list of either spectrum numbers, detector IDs or workspace indices. The list should be set against the appropriate property. - -==== Mask Detectors According To Instrument ==== -If the input MaskedWorkspace is not a SpecialWorkspace2D object, this algorithm will check every detectors in input MaskedWorkspace's Instrument. -If the detector is masked, then the corresponding detector will be masked in Workspace. - -==== Mask Detectors According to Masking Workspace ==== -If the input MaskedWorkspace is a [[MaskWorkspace]] object, i.e., masking workspace, then the algorithm will mask Workspace's detector according to the histogram data of the SpecialWorkspace2D object - -=== Definition of Mask === -* If a pixel is masked, it means that the data from this pixel won't be used. In the masking workspace (i.e., [[SpecialWorkspace2D]]), the corresponding value is 1. -* If a pixel is NOT masked, it means that the data from this pixel will be used. In the masking workspace (i.e., [[SpecialWorkspace2D]]), the corresponding value is 0. - -=== About Input Parameters === -[[MaskDetectors]] supports various format of input to mask detectors, including -* Workspace indices -* Spectra -* Detectors -* [[MaskWorkspace]] -* General [[MatrixWorkspace]] other than [[MaskWorkspace]] (In this case, the mask will be extracted from this workspace) - -==== Rules ==== -Here are the rules for input information for masking - 1. At least one of the inputs must be specified. - 2. Workspace indices and Spectra cannot be given at the same time. - 3. [[MaskWorkspace]] and general [[MatrixWorkspace]] cannot be given at the same time. - 4. When a general [[MatrixWorkspace]] is specified, then all detectors in a spectrum are treated as masked if the effective detector of that spectrum is masked. - 5. The masks specified from - a) workspace indices/spectra - b) detectors - c) [[MaskWorkspace]]/general [[MatrixWorkspace]] - will be combined by the ''plus'' operation. - -=== Operations Involved in Masking === -There are 2 operations to mask a detector and thus spectrum related - 1. Set the detector in workspace's instrument's ''parameter map'' to ''masked''; - 2. Clear the data associated with the spectrum with detectors that are masked; - -=== Implementation === -In the plan, the workflow to mask detectors should be - 1. Convert input detectors, workspace indices or spectra, and general [[MatrixWorkspace]] to a [[MaskWorkspace]]; - 2. Mask detectors according to [[MaskWorkspace]]; - 3. Clear data on all spectra, which have at least one detector that is masked. - -=== Concern === -* Speed! - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/MaskDetectorsInShape.cpp b/Code/Mantid/Framework/DataHandling/src/MaskDetectorsInShape.cpp index 7956a4d773cd..ae62add23511 100644 --- a/Code/Mantid/Framework/DataHandling/src/MaskDetectorsInShape.cpp +++ b/Code/Mantid/Framework/DataHandling/src/MaskDetectorsInShape.cpp @@ -1,17 +1,3 @@ -/*WIKI* -Masks detectors that are contained within a user defined 3 dimensional shape within the instrument. - -The algorithm places the user defined geometric shape within the virtual instrument and masks any detector detectors that in contained within it. -A detector is considered to be contained it its central location point is contained within the shape. - -===ChildAlgorithms used=== -MaskDetectorsInShape runs the following algorithms as child algorithms: -* [[FindDetectorsInShape]] - To determine the detectors that are contained in the user defined shape. -* [[MaskDetectors]] - To mask the detectors found. - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -114,4 +100,3 @@ void MaskDetectorsInShape::runMaskDetectors(API::MatrixWorkspace_sptr workspace, } // namespace DataHandling } // namespace Mantid - diff --git a/Code/Mantid/Framework/DataHandling/src/MergeLogs.cpp b/Code/Mantid/Framework/DataHandling/src/MergeLogs.cpp index 955e721901f2..884355aca13c 100644 --- a/Code/Mantid/Framework/DataHandling/src/MergeLogs.cpp +++ b/Code/Mantid/Framework/DataHandling/src/MergeLogs.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Two [[TimeSeriesProperty]] logs are merged together by the time stamps. - -==Output== -A MatrixWorkspace. - -*WIKI*/ #include "MantidDataHandling/MergeLogs.h" #include "MantidKernel/System.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/ModifyDetectorDotDatFile.cpp b/Code/Mantid/Framework/DataHandling/src/ModifyDetectorDotDatFile.cpp index 6425a2a6e8f6..a23a9955be60 100644 --- a/Code/Mantid/Framework/DataHandling/src/ModifyDetectorDotDatFile.cpp +++ b/Code/Mantid/Framework/DataHandling/src/ModifyDetectorDotDatFile.cpp @@ -1,26 +1,3 @@ -/*WIKI* - - -Modifies an ISIS detector dot data file, so that the detector positions are as in the given workspace. This algorithm can be used to transfer a calibration done via the [[ApplyCalibration]] algorithm to an ISIS detector dot dat file by selecting a workspace that has been modified by ApplyCalibration. - -A typical ISIS dot data file has a format like this: - - DETECTOR.DAT generated by CREATE_DETECTOR_FILE - 286729 14 - det no. offset l2 code theta phi w_x w_y w_z f_x ... - 11 0.000 -3.25800 1 180.00000 0.00000 0.00000 0.00000 0.00000 0.00000 ... - 21 0.000 -1.50400 1 180.00000 0.00000 0.00000 0.00000 0.00000 0.00000 ... - .... - 1110001 5.300 2.88936 3 52.28653 -140.67224 0.02540 0.02540 0.00283 0.02750 ... - 1110002 5.300 2.88794 3 52.26477 -140.72720 0.02540 0.02540 0.00283 0.02750 ... - .... - - -Each row corresponds to a detector whose type is indicated in the code column. -The algorithm will only modify values in colums l2, theta and phi and only if the value in the code column is 3, which indicates a PSD gas tube. -For more details about the detector dot data file see [[LoadDetectorInfo#File_format]]. - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/MatrixWorkspace.h" #include "MantidDataHandling/ModifyDetectorDotDatFile.h" @@ -208,4 +185,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/MoveInstrumentComponent.cpp b/Code/Mantid/Framework/DataHandling/src/MoveInstrumentComponent.cpp index f545c43e9c7d..e1bc75f37056 100644 --- a/Code/Mantid/Framework/DataHandling/src/MoveInstrumentComponent.cpp +++ b/Code/Mantid/Framework/DataHandling/src/MoveInstrumentComponent.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -This moves an instrument component, e.g. a bank or a pixel. - -You can specify a pathname as the name of a non-unique component (e.g. "WISH/panel03/WISHpanel03/tube005") and one can skip parts not needed for uniqueness (e.g. "panel03/tube005"). For a unique component, you can just specify the name (e.g. "panel03"). - -You can either specify an absolute position or a relative position. -The relative position will be applied to the current position, so applying this twice will move the detector twice. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/NexusTester.cpp b/Code/Mantid/Framework/DataHandling/src/NexusTester.cpp index 8f3b667ddde1..dc3fc17a6c1c 100644 --- a/Code/Mantid/Framework/DataHandling/src/NexusTester.cpp +++ b/Code/Mantid/Framework/DataHandling/src/NexusTester.cpp @@ -1,20 +1,3 @@ -/*WIKI* - -'''This algorithm is meant for developers only!''' - -This algorithm is used for performance testing and debugging of nexus saving and loading. - -If you specify SaveFilename (optional), then the algorithm will save a file with the -given number of chunks of the given size. - -If you specify LoadFilename (optional), then the algorithm will load back a file -created with this algorithm. - -The ''SaveSpeed'' and ''LoadSpeed'' output properties are set to the -saving and loading rates, in MB per second. - -*WIKI*/ - #include "MantidDataHandling/NexusTester.h" #include "MantidAPI/FileProperty.h" #include "MantidKernel/CPUTimer.h" diff --git a/Code/Mantid/Framework/DataHandling/src/PDLoadCharacterizations.cpp b/Code/Mantid/Framework/DataHandling/src/PDLoadCharacterizations.cpp index 4ed12c2da54c..0f56d2143c84 100644 --- a/Code/Mantid/Framework/DataHandling/src/PDLoadCharacterizations.cpp +++ b/Code/Mantid/Framework/DataHandling/src/PDLoadCharacterizations.cpp @@ -1,10 +1,3 @@ -/*WIKI* -This algorithm loads information into a [[TableWorkspace]] for the characterization -information and a collection of output parameters for the focus positions to be used -in [[EditInstrumentGeometry]]. If a section is missing then those parameters will be -empty. This includes an empty table (zero rows) if that information is missing. -*WIKI*/ - #include "MantidDataHandling/PDLoadCharacterizations.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/TableRow.h" diff --git a/Code/Mantid/Framework/DataHandling/src/ProcessDasNexusLog.cpp b/Code/Mantid/Framework/DataHandling/src/ProcessDasNexusLog.cpp index e24a93371f38..da2aa1e73e2a 100644 --- a/Code/Mantid/Framework/DataHandling/src/ProcessDasNexusLog.cpp +++ b/Code/Mantid/Framework/DataHandling/src/ProcessDasNexusLog.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Some sample logs from DAS are written in the format such that the time stamps are the pulse times and the values are time-of-flight. They are usually used to record some mono-value sample log such as turning on or off of a sample environment device. This algorithm will convert sample logs of this time such that the new log will have the time stamp as the absolute time, i.e., sum of pulse time and time-of-flight. - -*WIKI*/ #include "MantidDataHandling/ProcessDasNexusLog.h" #include "MantidKernel/System.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/DataHandling/src/RawFileInfo.cpp b/Code/Mantid/Framework/DataHandling/src/RawFileInfo.cpp index 1c957869cf8e..a2da3291cfaa 100644 --- a/Code/Mantid/Framework/DataHandling/src/RawFileInfo.cpp +++ b/Code/Mantid/Framework/DataHandling/src/RawFileInfo.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Extracts run parameters from the [[RAW_File | RAW]] file given as an input property. If the ''GetRunParameters'' argument is ''True'' then a TableWorkspace is created that contains a column for each value of the RPB_STRUCT, i.e. column names such as r_dur, r_goodfrm etc. This is Mantid's version of the '''Get''' routine in Open Genie. - -*WIKI*/ //---------------------------- // Includes //---------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/RemoveLogs.cpp b/Code/Mantid/Framework/DataHandling/src/RemoveLogs.cpp index 702f53eed341..f2bb5d0e7769 100644 --- a/Code/Mantid/Framework/DataHandling/src/RemoveLogs.cpp +++ b/Code/Mantid/Framework/DataHandling/src/RemoveLogs.cpp @@ -1,11 +1,3 @@ -/*WIKI* - - -Removes all logs from workspace, except those that are specified - - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/RenameLog.cpp b/Code/Mantid/Framework/DataHandling/src/RenameLog.cpp index 07b2639863e1..e78178b45c77 100644 --- a/Code/Mantid/Framework/DataHandling/src/RenameLog.cpp +++ b/Code/Mantid/Framework/DataHandling/src/RenameLog.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Rename a specified sample log of type TimeSeriesProperty in a given Workspace. - -*WIKI*/ #include "MantidDataHandling/RenameLog.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidKernel/TimeSeriesProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/RotateInstrumentComponent.cpp b/Code/Mantid/Framework/DataHandling/src/RotateInstrumentComponent.cpp index b01258a7fefe..0e56e45c5e0f 100644 --- a/Code/Mantid/Framework/DataHandling/src/RotateInstrumentComponent.cpp +++ b/Code/Mantid/Framework/DataHandling/src/RotateInstrumentComponent.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -RotateInstrumentComponent rotates a component around an axis of rotation by an angle given in degrees. Rotation by 0 degrees does not change the component's orientation. The rotation axis (X,Y,Z) must be given in the co-ordinate system attached to the component and rotates with it. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveANSTOAscii.cpp b/Code/Mantid/Framework/DataHandling/src/SaveANSTOAscii.cpp index c9e02c4bca6c..6accb75e105f 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveANSTOAscii.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveANSTOAscii.cpp @@ -1,8 +1,3 @@ -/*WIKI* -SaveANSTOAscii is an export-only Ascii-based save format with no associated loader. It is based on a python script by Maximilian Skoda, written for the ISIS Reflectometry GUI -==== Limitations ==== -While Files saved with SaveANSTOAscii can be loaded back into mantid using LoadAscii, the resulting workspaces won't be usful as the data written by SaveANSTOAscii is not in the normal X,Y,E,DX format. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveAscii.cpp b/Code/Mantid/Framework/DataHandling/src/SaveAscii.cpp index 40cf0faa783e..0874bac65b43 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveAscii.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveAscii.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -The workspace data are stored in the file in columns: the first column contains the X-values, followed by pairs of Y and E values. Columns are separated by commas. The resulting file can normally be loaded into a workspace by the [[LoadAscii]] algorithm. - -==== Limitations ==== -The algorithm assumes that the workspace has common X values for all spectra (i.e. is not a [[Ragged Workspace|ragged workspace]]). Only the X values from the first spectrum in the workspace are saved out. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveAscii2.cpp b/Code/Mantid/Framework/DataHandling/src/SaveAscii2.cpp index e8355279513d..234e695a0077 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveAscii2.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveAscii2.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -The workspace data are stored in the file in columns: the first column contains the X-values, followed by pairs of Y and E values. Columns are separated by commas. The resulting file can normally be loaded into a workspace by the [[LoadAscii2]] algorithm. - -==== Limitations ==== -The algorithm assumes that the workspace has common X values for all spectra (i.e. is not a [[Ragged Workspace|ragged workspace]]). Only the X values from the first spectrum in the workspace are saved out. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveCSV.cpp b/Code/Mantid/Framework/DataHandling/src/SaveCSV.cpp index 767407c725c6..c198a048d2e0 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveCSV.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveCSV.cpp @@ -1,36 +1,3 @@ -/*WIKI* - -The format of the saved ascii CSV file for a 1D worksspace consists of three -columns where the numbers of each row are seperated by the Seperator and each -line by the LineSeperator. - -The format of the saved CSV file for a 2D workspace is as follows: - - A 0, 200, 400, 600, ..., 50000
- 0 10, 4, 234, 35, ..., 32
- 1 4, 234, 4, 9, ..., 12
- A 0, 100, 200, 300, ..., 25000
- 2 34, 0, 0, 0, ..., 23 - - ERRORS
- 0 0.1, 3.4, 2.4, 3.5, ..., 2
- 1 3.1, 3.3, 2.5, 3.5, ..., 2
- 2 1.1, 3.3, 2.4, 5, ..., 2.4 - -where for the matrix above the ERRORS line the first column -shows the content of the numbers on the of the same line; i.e. -'A' is followed by x-axis values (e.g. TOF values) and any number -(e.g. '2') followed by y-axis values (e.g. neutron counts). Multiple -'A' may be present to allow for the a-axis to change. So in -the example above the saved 2D workspace consists of three histograms -(y-axes) where the first two have the same x-axis but the third -histogram has a different x-axis. - -The matrix following the ERRORS line lists the errors as recorded -for each histogram. - - -*WIKI*/ /* Copyright © 2007 STFC Rutherford Appleton Laboratories diff --git a/Code/Mantid/Framework/DataHandling/src/SaveCalFile.cpp b/Code/Mantid/Framework/DataHandling/src/SaveCalFile.cpp index 6044805b6837..fa3ecb96a9f8 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveCalFile.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveCalFile.cpp @@ -1,18 +1,3 @@ -/*WIKI* - - -This algorithm saves an ARIEL-style 5-column ASCII .cal file. - -The format is -* Number: ignored.* UDET: detector ID.* Offset: calibration offset. Comes from the OffsetsWorkspace, or 0.0 if none is given. -* Select: 1 if selected (not masked out). Comes from the MaskWorkspace, or 1 if none is given. -* Group: group number. Comes from the GroupingWorkspace, or 1 if none is given. - - - - - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidDataHandling/SaveCalFile.h" #include "MantidKernel/System.h" @@ -154,4 +139,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/SaveCanSAS1D.cpp b/Code/Mantid/Framework/DataHandling/src/SaveCanSAS1D.cpp index 06d8f79b9347..b9ae8941653c 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveCanSAS1D.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveCanSAS1D.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -Saves the given workspace to a file which will be in canSAS 1-D format specified by canSAS 1-D Data Formats Working Group schema http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd. CANSAS has a Wiki page at http://www.smallangles.net/wgwiki/index.php/canSAS_Working_Groups - -Workspace group members and appended workspaces are stored in separate SASentry [http://en.wikipedia.org/wiki/Xml xml] elements. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveCanSAS1D2.cpp b/Code/Mantid/Framework/DataHandling/src/SaveCanSAS1D2.cpp index 6c600662ecb8..e8d620027c4c 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveCanSAS1D2.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveCanSAS1D2.cpp @@ -1,23 +1,3 @@ -/*WIKI* - -Saves the given workspace to a file which will be in canSAS 1-D format specified by canSAS 1-D Data Formats Working Group schema http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd. CANSAS has a Wiki page at http://www.smallangles.net/wgwiki/index.php/canSAS_Working_Groups. - -The second version is compatible with canSAS - 1D - Version 1.1. If you need to save to the version 1.0 please -use the first version of this algorithm. You can see it at: [SaveCanSAS1D_1.0]. - -Workspace group members and appended workspaces are stored in separate SASentry [http://en.wikipedia.org/wiki/Xml xml] elements. - -This algorithm saves workspace into CanSAS1d format. This is an xml format except -the , tags and all data in between must be one line, which necesitates -the files be written iostream functions outside xml libraries. - -The second version of CanSAS1D implements the version 1.1, whose schema is found at -http://www.cansas.org/formats/1.1/cansas1d.xsd. See the tutorial for more infomation -about: http://www.cansas.org/svn/1dwg/trunk/doc/cansas-1d-1_1-manual.pdf. - -The structure of CanSAS1d xml is defined at the links above. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveDaveGrp.cpp b/Code/Mantid/Framework/DataHandling/src/SaveDaveGrp.cpp index 52ea1f41d5d2..9c02edee6268 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveDaveGrp.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveDaveGrp.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Saves a workspace to a DAVE grp file. A description of the DAVE grouped data format can be found at [http://www.ncnr.nist.gov/dave/documentation/ascii_help.pdf http://www.ncnr.nist.gov/dave/documentation/ascii_help.pdf]. - -*WIKI*/ #include "MantidDataHandling/SaveDaveGrp.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" @@ -138,4 +134,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/SaveDetectorsGrouping.cpp b/Code/Mantid/Framework/DataHandling/src/SaveDetectorsGrouping.cpp index a7406a2e10d7..95da6f6086f4 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveDetectorsGrouping.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveDetectorsGrouping.cpp @@ -1,30 +1,3 @@ -/*WIKI* - -This algorithm is used to save a GroupingWorkspace to a file in XML format. - - -== XML File Format == - -=== Parameters === -* "instrument": mandatory attribute of node 'detector-grouping'. It must be valid instrument name. -* "ID": mandatory attribute of node 'group'. It must be valid group name, and the key to denote group. -* "detids": a node to define grouping by detectors' ID. Its value must be a list of integers separated by ','. A '-' is used between 2 integers to define a range of detectors. -* "component": a node to define that all detectors belonged to a component in the instrument are to be in a same group. Its value should be a valid component name. - -Example 1: - - - - - - 1-30,34-44,47-100 - - 103-304,344-444,474-5000 - - - -*WIKI*/ - #include "MantidDataHandling/SaveDetectorsGrouping.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/SaveDspacemap.cpp b/Code/Mantid/Framework/DataHandling/src/SaveDspacemap.cpp index e5bf035aa2e3..1cecbfeec258 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveDspacemap.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveDspacemap.cpp @@ -1,12 +1,3 @@ -/*WIKI* - - - -The POWGEN d-space map file format is a binary list of the conversion. It needs to be a minimum size, determined by the PadDetID parameter. - - - -*WIKI*/ #include "MantidDataHandling/SaveDspacemap.h" #include "MantidDataObjects/OffsetsWorkspace.h" #include "MantidKernel/System.h" @@ -137,4 +128,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/SaveFocusedXYE.cpp b/Code/Mantid/Framework/DataHandling/src/SaveFocusedXYE.cpp index 71ca330884ae..e6d736d1212d 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveFocusedXYE.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveFocusedXYE.cpp @@ -1,18 +1,3 @@ -/*WIKI* - -This algorithm outputs the data in ASCII as a 3 column X, Y ,E format for use in subsequent analysis by other programs. -The output files can be read for example into FullProf with format instrument=10. - -For data where the focusing routine has generated several spectra (for example, multi-bank instruments), -the option is provided for saving all spectra into a single file, separated by headers, or into -several files that will be named "workspaceName-"+spectra_number - -== Current Issues == -Fullprof expects the data to be in TOF, however at present the [[DiffractionFocussing]] algorithm in Mantid leaves the data in d-spacing. - -If the written file is to be loaded into TOPAS, then headers should be omitted (set the IncludeHeader property to false); - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- @@ -338,4 +323,3 @@ void SaveFocusedXYE::getFocusedPos(Mantid::API::MatrixWorkspace_const_sptr wksp, l2 = det->getDistance(*sample); tth = wksp->detectorTwoTheta(det) * 180. / M_PI; } - diff --git a/Code/Mantid/Framework/DataHandling/src/SaveFullprofResolution.cpp b/Code/Mantid/Framework/DataHandling/src/SaveFullprofResolution.cpp index d2c31f5a4879..1d9af9673774 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveFullprofResolution.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveFullprofResolution.cpp @@ -1,33 +1,3 @@ -/*WIKI* - -A Fullprof's resolution file contains the peak profile parameters and some powder diffractometer's geometry related parameters in a certain format. -This algorithm reads a TableWorkspace containing all the information required by Fullprof's resolution file, and -write out a text file conforming to that resolution file's format. - -== Peak Profile Supported == -Here is the list of peak profile supported by this algorithm: -* Back-to-back Exponential Convoluted with Pseudo-voigt peak profile (profile 9). -* Thermal Neutron Back-to-back Exponential Convoluted with Pseudo-voigt peak profile (profile 10). - -== Instrument Profile Parameter TableWorkspace == -TableWorkspace as the input of this algorithm can be generated from ''CreateLeBailFitInput'', ''RefinePowderInstrumentParameters'' or ''LeBailFit''. -To be noticed that the TableWorkspace output from ''RefinePowderInstrumentParameters'' is usually an intermediate product. - -Input TableWorkspace must have two columns, "Name" and "Value", as column 0 and 1. There is no restriction on other columns. - -For a multiple bank instrument, from the second column, the name of the columns should be Value_1, Value_2 and so on. A row with parameter name 'BANK' should be there to indicate the bank ID of a specific row of parameters corresponding to. - -== How to use algorithm with other algorithms == - -==== Le Bail Fit ==== -This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in [[Le Bail Fit]]. - -==== Save For Multiple-Bank Resolution File ==== -As SaveFullprofResolution can save 1 bank a time, in order to make a multiple-bank .irf file, user should execute this algorithm a few times. Except the first time, property 'Append' should be marked as 'True'. - - -*WIKI*/ - #include "MantidDataHandling/SaveFullprofResolution.h" #include "MantidAPI/WorkspaceProperty.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/SaveGSS.cpp b/Code/Mantid/Framework/DataHandling/src/SaveGSS.cpp index 623ef2199ac5..ddc5f771c597 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveGSS.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveGSS.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -Saves a focused data set into a three column GSAS format containing X_i, Y_i*step, and E_I*step. Exclusively for the crystallography package [http://www.ccp14.ac.uk/solution/gsas/index.html GSAS] and data needs to be in time-of-flight. For data where the focusing routine has generated several spectra (for example, multi-bank instruments), the option is provided for saving all spectra into a single file, separated by headers, or into several files that will be named "workspaceName_"+workspace_index_number. - -From the GSAS manual a description of the format options: -* If BINTYP is 'SLOG' then the neutron TOF data was collected in constant ∆T/T steps. BCOEF(1) is the initial TOF in μsec, and BCOEF(3) is the value of ∆T/T used in the data collection. BCOEF(2) is a maximum TOF for the data set. BCOEF(4) is zero and ignored. -* If BINTYP equals 'RALF' then the data was collected at one of the TOF neutron diffractometers at the ISIS Facility, Rutherford-Appleton Laboratory. The width of the time bins is constant for a section of the data at small values of TOF and then varies (irregularly) in pseudoconstant ∆T/T steps. In this case BCOEF(1) is the starting TOF in μsec*32, BCOEF(2) is the width of the first step in μsec*32, BCOEF(3) is the start of the log scaled step portion of the data in μsec*32 and BCOEF(4) is the resolution to be used in approximating the size of each step beyond BCOEF(3). - -The format is limited to saving 99 spectra in total. Trying to save more will generate an error. - - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveILLCosmosAscii.cpp b/Code/Mantid/Framework/DataHandling/src/SaveILLCosmosAscii.cpp index 3a08ccf963aa..582063c89214 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveILLCosmosAscii.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveILLCosmosAscii.cpp @@ -1,8 +1,3 @@ -/*WIKI* -SaveILLCosmosAscii is an export-only Ascii-based save format with no associated loader. It is based on a python script by Maximilian Skoda, written for the ISIS Reflectometry GUI -==== Limitations ==== -While Files saved with SaveILLCosmosAscii can be loaded back into mantid using LoadAscii, the resulting workspaces won't be usful as the data written by SaveILLCosmosAscii is not in the normal X,Y,E,DX format. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveISISNexus.cpp b/Code/Mantid/Framework/DataHandling/src/SaveISISNexus.cpp index c69bdc09dd3e..44c543aaf8f7 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveISISNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveISISNexus.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ // SaveISISNexus // @author Freddie Akeroyd, STFC ISIS Faility // @author Ronald Fowler, STFC eScience. Modified to fit with SaveISISNexusProcessed diff --git a/Code/Mantid/Framework/DataHandling/src/SaveIsawDetCal.cpp b/Code/Mantid/Framework/DataHandling/src/SaveIsawDetCal.cpp index 955e743b8f97..999839fdbdbd 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveIsawDetCal.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveIsawDetCal.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - -Saves an instrument with RectangularDetectors to an ISAW .DetCal file. - -This algorithm will fail on instruments without RectangularDetectors. Additionally, the banks should be named "bankXX" where XX is the bank index. -Other names will fail or create an invalid .DetCal file. - - - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/MatrixWorkspace.h" #include "MantidDataHandling/SaveIsawDetCal.h" @@ -173,4 +162,3 @@ namespace DataHandling } // namespace Mantid } // namespace DataHandling - diff --git a/Code/Mantid/Framework/DataHandling/src/SaveMask.cpp b/Code/Mantid/Framework/DataHandling/src/SaveMask.cpp index d0f29e39d398..f9d97b3b58d2 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveMask.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveMask.cpp @@ -1,39 +1,3 @@ -/*WIKI* - -This algorithm is used to save the masking from a workspace to an XML file. -This algorithm has previously been renamed from [[SaveDetectorMasks]]. - -== 2 Types of Mask Workspace == -There are two types of mask workspace that can serve as input. - -==== 1. [[MaskWorkspace]] ==== -In this case, [[SaveMask]] will read Y values to determine which detectors are masked; - -==== 2. A non-[[MaskWorkspace]] [[MatrixWorkspace]] containing [[Instrument]] ==== -In this case, [[SaveMask]] will scan through all detectors to determine which are masked. - -== Definition of Mask == - * If a pixel is masked, it means that the data from this pixel won't be used. - In the masking workspace (i.e., [[SpecialWorkspace2D]]), the corresponding value is 1. - * If a pixel is NOT masked, it means that the data from this pixel will be used. - In the masking workspace (i.e., [[SpecialWorkspace2D]]), the corresponding value is 0. - -== XML File Format == -Example 1: - - - - - 3,34-44,47 - bank123 - bank124 - - - - - -*WIKI*/ - #include "MantidDataHandling/SaveMask.h" #include "MantidKernel/System.h" #include "MantidDataObjects/SpecialWorkspace2D.h" diff --git a/Code/Mantid/Framework/DataHandling/src/SaveNISTDAT.cpp b/Code/Mantid/Framework/DataHandling/src/SaveNISTDAT.cpp index 975c9838476c..097ed2a97b47 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveNISTDAT.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveNISTDAT.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Qxy rebins a 2D workspace in units of wavelength into 2D Q. It also normalises to the solid angle of each detector pixel. The result is stored in a 2D workspace which two numeric axes, both in units of Q. SaveNISTDAT save the output of Qxy to an ASCII file that can be read by NIST software. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveNXSPE.cpp b/Code/Mantid/Framework/DataHandling/src/SaveNXSPE.cpp index 8369b45ff771..23006101fbc2 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveNXSPE.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveNXSPE.cpp @@ -1,18 +1,3 @@ -/*WIKI* - - -Saves the data in a workspace into a file in the NeXus based 'NXSPE' format. - -==== Restrictions on the input workspace ==== - -The input workspace must have units of Momentum Transfer ('DeltaE') and contain histogram data with common binning on all spectra. - -==== Child Algorithms used ==== - -[[FindDetectorsPar]] algorithm is used to calculate detectors parameters from the instrument description. - - -*WIKI*/ #include "MantidDataHandling/SaveNXSPE.h" #include "MantidAPI/FileProperty.h" #include "MantidKernel/ConfigService.h" diff --git a/Code/Mantid/Framework/DataHandling/src/SaveNexus.cpp b/Code/Mantid/Framework/DataHandling/src/SaveNexus.cpp index 3fc6986ccec9..fbe9f56db35b 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveNexus.cpp @@ -1,35 +1,3 @@ -/*WIKI* - - -The algorithm SaveNexus will write a Nexus data file from the named workspace. -The file name can be an absolute or relative path and should have the extension -.nxs, .nx5 or .xml. -Warning - using XML format can be extremely slow for large data sets and generate very large files. -Both the extensions nxs and nx5 will generate HDF5 files. - -The optional parameters can be used to control which spectra are saved into the file (not yet implemented). -If spectrum_min and spectrum_max are given, then only that range to data will be loaded. - -A Mantid Nexus file may contain several workspace entries each labelled with an integer starting at 1. -If the file already contains n workspaces, the new one will be labelled n+1. - -In the future it may be possible to write other Nexus file types than the one supported by SaveNexusProcessed. - - -===Time series data=== -TimeSeriesProperty data within the workspace will be saved as NXlog sections in the Nexus file. -Only floating point logs are stored and loaded at present. - -===Child Algorithms used=== - -[[SaveNexusProcessed]] - - - - - - -*WIKI*/ // SaveNeXus // @author Freddie Akeroyd, STFC ISIS Faility // @author Ronald Fowler, STFC eScience. Modified to fit with SaveNexusProcessed diff --git a/Code/Mantid/Framework/DataHandling/src/SaveNexusProcessed.cpp b/Code/Mantid/Framework/DataHandling/src/SaveNexusProcessed.cpp index aac006a04900..9aa2ed26cf3a 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveNexusProcessed.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveNexusProcessed.cpp @@ -1,37 +1,3 @@ -/*WIKI* - -The algorithm SaveNexusProcessed will write a Nexus data file from the named workspace. -This can later be loaded using [[LoadNexusProcessed]]. - -The file name can be an absolute or relative path and should have the extension -.nxs, .nx5 or .xml. Warning - using XML format can be extremely slow for large data sets and generate very large files. -Both the extensions nxs and nx5 will generate HDF5 files. - -The optional parameters can be used to control which spectra are saved into the file. -If WorkspaceIndexMin and WorkspaceIndexMax are given, then only that range to data will be loaded. - -A Mantid Nexus file may contain several workspace entries each labelled with an integer starting at 1. -If the file already contains n workspaces, the new one will be labelled n+1. - -=== Time series data === - -TimeSeriesProperty data within the workspace will be saved as NXlog sections in the Nexus file. -Only floating point logs are stored and loaded at present. - -=== EventWorkspaces === - -This algorithm will save [[EventWorkspace]]s with full event data, unless -you uncheck ''PreserveEvents'', in which case the histogram version of -the workspace is saved. - -Optionally, you can check ''CompressNexus'', which will compress the event -data. '''Warning!''' This can be ''very'' slow, and only gives approx. 40% compression -because event data is typically denser than histogram data. ''CompressNexus'' is -off by default. - -*WIKI*/ - - // SaveNexusProcessed // @author Ronald Fowler, based on SaveNexus #include "MantidAPI/EnabledWhenWorkspaceIsType.h" diff --git a/Code/Mantid/Framework/DataHandling/src/SavePAR.cpp b/Code/Mantid/Framework/DataHandling/src/SavePAR.cpp index 3bc0b9338482..911831ac63fd 100644 --- a/Code/Mantid/Framework/DataHandling/src/SavePAR.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SavePAR.cpp @@ -1,28 +1,3 @@ -/*WIKI* - - -Saves the geometry information of the detectors in a workspace into a PAR format ASCII file. The angular positions and linear sizes of the detectors are calculated using [[FindDetectorsPar]] algorithm. - -Tobyfit PAR file is an ASCII file consisting of the header and 5 or 6 text columns. Mantid generates 6-column files. Header contains the number of the rows in the phx file excluding the header. (number of detectors). The column has the following information about a detector: - - * - * 1st column sample-detector distance (secondary flight path) - * 2nd " scattering angle (deg) - * 3rd " azimuthal angle (deg) - * (west bank = 0 deg, north bank = -90 deg etc.) - * (Note the reversed sign convention cf [[SavePHX|.phx]] files) - * 4th " width (m) - * 5th " height (m) - * 6th " detector ID -- Mantid specific. - *--- - - -You should expect to find column 6 to be the detector ID in Mantid-generated par files only. - - - - -*WIKI*/ #include "MantidDataHandling/SavePAR.h" #include "MantidDataHandling/FindDetectorsPar.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/SavePHX.cpp b/Code/Mantid/Framework/DataHandling/src/SavePHX.cpp index 1cb79c55b19b..df1573b92dd5 100644 --- a/Code/Mantid/Framework/DataHandling/src/SavePHX.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SavePHX.cpp @@ -1,28 +1,3 @@ -/*WIKI* - - -Saves the geometry information of the detectors in a workspace into a PHX format ASCII file. The angular positions and angular sizes of the detectors are calculated using [[FindDetectorsPar]] algorithm. - -Mantid generated PHX file is an ASCII file consisting of the header and 7 text columns. Header contains the number of the rows in the phx file excluding the header. (number of detectors). The column has the following information about a detector: - - * 1st column secondary flightpath,e.g. sample to detector distance (m) -- Mantid specific - * 2nt " 0 - * 3rd " scattering angle (deg) - * 4th " azimuthal angle (deg) - * (west bank = 0 deg, north bank = 90 deg etc.) - * (Note the reversed sign convention wrt [[SavePAR|.par]] files) - * 5th " angular width e.g. delta scattered angle (deg) - * 6th " angular height e.g. delta azimuthal angle (deg) - * 7th " detector ID -- Mantid specific. - *--- - - -In standard phx file only the columns 3,4,5 and 6 contain useful information. You can expect to find column 1 to be the secondary flightpath and the column 7 -- the detector ID in Mantid-generated phx files only. - - - - -*WIKI*/ #include "MantidDataHandling/SavePHX.h" #include "MantidDataHandling/FindDetectorsPar.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/DataHandling/src/SaveRKH.cpp b/Code/Mantid/Framework/DataHandling/src/SaveRKH.cpp index 1efdccd7883e..6367c20b181a 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveRKH.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveRKH.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -Saves the the given workspace to a file which will be formatted in one of the LOQ data formats (see [http://www.isis.rl.ac.uk/archive/LargeScale/LOQ/other/formats.htm here]). -1D or 2D workspaces may be saved. If a 1D workspace is 'horizontal' (a single spectrum) then the first column in the three column output will contain the X values of the spectrum (giving the bin centre if histogram data). For a 'vertical' (single column) 1D workspace, the first column of the file will contain the spectrum number. - - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveReflTBL.cpp b/Code/Mantid/Framework/DataHandling/src/SaveReflTBL.cpp index 97a75264f2e1..5b623ef210e4 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveReflTBL.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveReflTBL.cpp @@ -1,21 +1,3 @@ -/*WIKI* -Saves a TableWorkspace at least 8 colunms wide into an ascii file in 17-column Reflectometry TBL format compatible with the old ISIS reflectometry Interface. - -The 8 columns are grouped into rows of 17 according to stitch index, so up to 3 rows int he table would become a single row in the TBL file like so: -(Where Z is an identical stitch group index, and - is ignored as only the first instance of P and Q are used in the file) - -A, B, C, D, E, P, Q, Z -F, G, H, I, J, -, -, Z -K, L, M, N, O, -, -, Z - -becomes - -A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q -==== Limitations ==== -The Algorithm will fail if any stitch index appears more than 3 times, as the old interface does not support more than 3 runs per row. - -Stitch groups of index 0 are treated as non-grouped, and will not be grouped with one another (and by extension can be larger than 3 members). They will however be moved to the end of the file -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveSPE.cpp b/Code/Mantid/Framework/DataHandling/src/SaveSPE.cpp index c574f42e3457..348d66e37474 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveSPE.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveSPE.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -Saves the data in a workspace into a file in the ASCII 'SPE' format (as described [[Media:Spe_file_format.pdf|here]]). - -The units used for saving will match those of the input workspace, such that if you have the units Momentum Transfer ('DeltaE') then you will get a traditional SPE file, you could choose to have the units in mod Q and then it will save to an SPQ file variant. - -==== Restrictions on the input workspace ==== - -The input workspace must contain histogram data with common binning on all spectra. - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SaveToSNSHistogramNexus.cpp b/Code/Mantid/Framework/DataHandling/src/SaveToSNSHistogramNexus.cpp index ab239dbc34de..2a9817118510 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveToSNSHistogramNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveToSNSHistogramNexus.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -The algorithm essentially copies the InputFilename into OutputFilename, except that it replaces the data field with whatever the specified workspace contains. -The histograms do not need to be the same size (in number of bins), but the number of pixels needs to be the same. - -In addition, this only works for instruments that use [[RectangularDetector]]s (SNAP, TOPAZ, POWGEN, for example); in addition, -the name in the instrument definition file must match the name in the NXS file. - -*WIKI*/ // SaveToSNSHistogramNexus // @author Freddie Akeroyd, STFC ISIS Faility // @author Ronald Fowler, STFC eScience. Modified to fit with SaveToSNSHistogramNexusProcessed diff --git a/Code/Mantid/Framework/DataHandling/src/SaveVTK.cpp b/Code/Mantid/Framework/DataHandling/src/SaveVTK.cpp index 301df0948805..ff4b8f91f451 100644 --- a/Code/Mantid/Framework/DataHandling/src/SaveVTK.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SaveVTK.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -Saves a workspace out to a VTK file that can be loaded with Paraview or any other software supporting the VTK file format. -This is a very basic algorithm that simple creates a 3D view of the data as a series of histograms. -It should only be used for relatively small data sets as the resulting file can become quite large relatively quickly. - -*WIKI*/ //--------------------------------------------------- // Includes //--------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SetSampleMaterial.cpp b/Code/Mantid/Framework/DataHandling/src/SetSampleMaterial.cpp index 98a3b4e76adf..17577614ddb1 100644 --- a/Code/Mantid/Framework/DataHandling/src/SetSampleMaterial.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SetSampleMaterial.cpp @@ -1,35 +1,3 @@ -/*WIKI* - -Sets the neutrons information in the sample. You can either enter details about the chemical formula or atomic number, -or you can provide specific values for the attenuation and scattering cross sections and the sample number density. -If you decide to provide specific values you must give values for all three (attenuation and scattering cross sections and the sample number density), and any formula information will be ignored. -If you miss any of the three specific values then the other will be ignored. - -Neutron scattering lengths and cross sections of the elements and their isotopes have been taken from [http://www.ncnr.nist.gov/resources/n-lengths/list.html]. -*WIKI*/ -/*WIKI_USAGE* -=====Setting the sample by simple formula===== -SetSampleMaterial(InputWorkspace='IRS26173',ChemicalFormula='Fe') - -=====Setting the sample by a more complex formula===== -SetSampleMaterial(InputWorkspace='IRS26173',ChemicalFormula='Al2-O3', UnitCellVolume='253.54', ZParameter='6') - -=====Setting the sample by specific values===== -SetSampleMaterial(InputWorkspace='IRS26173',AtomicNumber=26,AttenuationXSection=2.56,ScatteringXSection=11.62,SampleNumberDensity=0.0849106) - -=====Extracting the set values out by python===== -sam = ws.sample() -mat = sam.getMaterial() -print mat.absorbXSection() -1.3374 -print mat.cohScatterXSection() -339.1712 -print mat.name() -C2 H4 -print mat.totalScatterXSection() -339.1712 - -*WIKI_USAGE*/ //-------------------------------- // Includes //-------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/SetScalingPSD.cpp b/Code/Mantid/Framework/DataHandling/src/SetScalingPSD.cpp index d8e8d19ced07..849d5477db41 100644 --- a/Code/Mantid/Framework/DataHandling/src/SetScalingPSD.cpp +++ b/Code/Mantid/Framework/DataHandling/src/SetScalingPSD.cpp @@ -1,54 +1,3 @@ -/*WIKI* - - -This algorithm was developed for the Merlin instrument but may be used with other instruments if appropriate scaling data is available. -The scaling data should give the true centre point location of each pixel detector in the instrument. -This may be obtained by a calibration run and post-processing of the results. -Since the calibration data may vary with time, it is not convenient to store it in the instrument XML definition file. -Instead it can be stored as an ACSII file with the extension ".sca" or within the ".raw" file associated with the data, as data on the -position of each detector (r,theta,phi). - -A scaling file (extension .sca) is expected to be an ASCII file with three header lines. -Of these, only the second line is actual read and the first item on this line should -give the number of detectors described by the file as an integer value. -Each subsequent line after the first three will give the information for one detector with at least the five -ordered values detector_ID, detector_offset, l2, code, theta and phi. -Of these values only the detector_ID and the new position (l2, theta, phi) are used. -The latter three values are taken as defining the true position of the detector -in spherical polar coordinates relative to the origin (sample position). -If a raw file is given the true positions are taken from this instead. - -This algorithm creates a parameter map for the instrument that applies a shift to each -detector so that is at the correct position. -Monitors are not moved. -Because the shift of detector locations can alter the effective width of the pixel -it is necessary to apply a scaling factor. -While each shift can have components in all three primary axes (X,Y,Z), it is assumed that a single PSD will maintain the co-linear nature of pixel centres. -The width scaling factor for a pixel i is approximated as average of the left and right side scalings cased by the change -in relative spacings with respect to neighbour pixels. -End of detector pixels only have one scaling value to use. -It is assumed that the scaling is both small and smooth so that the approximate scaling is reasonable. - -Scaling and position correction will be reflected in properties of the detector objects including values such as the solid -angle, bounding box, etc. -The detector numbering in Merlin uses sequential numbers for pixels within a PSD and non-sequential jumps between PSDs. -This algorithm uses these jumps to identify individual PSDs. - -To apply this algorithm to instruments other than Merlin it may be necessary to modify the code depending on the type of detectors -present and how they are numbered. - -If the tube detector performance enhancement is used the results of the algorithm will not be visible in the instrument view in MantidPlot, at the same time all calclations will be performed correctly. - -=== Optional properties === -ScalingOpt - this integer value controls the way in which the scaling is calculated for pixels that have both left and right values for the scaling. -The default is to just average the two together. -Setting this to 1 causes the maximum scaling to be used and setting it to 2 uses the maximum scaling plus 5% to be used. - -===ChildAlgorithms used=== -None - - -*WIKI*/ // SetScalingPSD // @author Ronald Fowler //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/DataHandling/src/UpdateInstrumentFromFile.cpp b/Code/Mantid/Framework/DataHandling/src/UpdateInstrumentFromFile.cpp index c8e1bbe6be61..e44ab757883e 100644 --- a/Code/Mantid/Framework/DataHandling/src/UpdateInstrumentFromFile.cpp +++ b/Code/Mantid/Framework/DataHandling/src/UpdateInstrumentFromFile.cpp @@ -1,39 +1,3 @@ -/*WIKI* - -Some instrument definition file ([[InstrumentDefinitionFile|IDF]]) positions are only approximately correct and the true positions are located within data files. -This algorithm reads the detector positioning from the supplied file and updates the instrument accordingly. It currently supports ISIS Raw, ISIS NeXus files and ASCII files. - -It is assumed that the positions specified in the file are all with respect to the a coordinate system defined with its origin at the sample position. Note that this algorithm -moves the detectors without subsequent rotation, hence this means that detectors may not for example face the sample perfectly after this algorithm has been applied. - -==== Additional Detector Parameters Using ASCII File ==== -The ASCII format allows a multi-column text file to provide new positions along with additional parameters for each detector. If a text file is used then -the AsciiHeader parameter is required as it identifies each column in the file as header information in the file is always ignored. There is a minor restriction -in that the first column is expected to specify either a detector ID or a spectrum number and will never be interpreted as anything else. - -The keywords recognised by the algorithm to pick out detector position values & spectrum/ID values are: spectrum, ID, R,theta, phi. The spectrum/ID keywords -can only be used in the first column. A dash (-) is used to ignore a column. - -As an example the following header: -
-spectrum,theta,t0,-,R
-
-and the following text file: -
-    1   0.0000  -4.2508  11.0550  -2.4594
-    2   0.0000   0.0000  11.0550   2.3800
-    3 130.4653  -0.4157  11.0050   0.6708
-    4 131.9319  -0.5338  11.0050   0.6545
-    5 133.0559  -0.3362  11.0050   0.6345
-
-would tell the algorithm to interpret the columns as: -# Spectrum number -# Theta position value -# A new instrument parameter called t0 -# This column would be ignored -# R position value - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/ICat/src/CatalogDownloadDataFiles.cpp b/Code/Mantid/Framework/ICat/src/CatalogDownloadDataFiles.cpp index bb841a9eac98..cd7143f9702a 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogDownloadDataFiles.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogDownloadDataFiles.cpp @@ -1,10 +1,3 @@ -/*WIKI* - -This algorithm gets the location strings for the selected files from the data archive; -if the data archive is not accessible, it downloads the files from the data server. - -*WIKI*/ - #include "MantidAPI/CatalogManager.h" #include "MantidAPI/ICatalogInfoService.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/ICat/src/CatalogGetDataFiles.cpp b/Code/Mantid/Framework/ICat/src/CatalogGetDataFiles.cpp index 31d4900c21b3..bfb3a9bfff00 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogGetDataFiles.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogGetDataFiles.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -This algorithm retrieves the files associated to selected investigation from the information catalog and saves the file search results to mantid workspace. - -*WIKI*/ - #include "MantidICat/CatalogGetDataFiles.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidAPI/CatalogManager.h" diff --git a/Code/Mantid/Framework/ICat/src/CatalogGetDataSets.cpp b/Code/Mantid/Framework/ICat/src/CatalogGetDataSets.cpp index cae8a0c1fc00..c5159572eeb7 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogGetDataSets.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogGetDataSets.cpp @@ -1,8 +1,3 @@ -/*WIKI* -This algorithm retrieves the datasets associated to the selected investigation -from the information catalog and saves the search results to mantid workspace. -*WIKI*/ - #include "MantidICat/CatalogGetDataSets.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidAPI/CatalogManager.h" diff --git a/Code/Mantid/Framework/ICat/src/CatalogKeepAlive.cpp b/Code/Mantid/Framework/ICat/src/CatalogKeepAlive.cpp index 56fd8ee1a7d8..473606e062e4 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogKeepAlive.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogKeepAlive.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -This algorithm refreshes the current session to the maximum amount provided by the catalog API. - -*WIKI*/ - #include "MantidICat/CatalogKeepAlive.h" #include "MantidAPI/CatalogManager.h" @@ -50,4 +44,3 @@ namespace Mantid } } - diff --git a/Code/Mantid/Framework/ICat/src/CatalogListInstruments.cpp b/Code/Mantid/Framework/ICat/src/CatalogListInstruments.cpp index 6fcd1b35b46d..ae9420401ca6 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogListInstruments.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogListInstruments.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -This algorithm retrieves the instrument names from a catalog and stores them in a vector. - -*WIKI*/ - #include "MantidICat/CatalogListInstruments.h" #include "MantidAPI/CatalogManager.h" #include "MantidKernel/ArrayProperty.h" @@ -33,4 +27,3 @@ namespace Mantid } } - diff --git a/Code/Mantid/Framework/ICat/src/CatalogListInvestigationTypes.cpp b/Code/Mantid/Framework/ICat/src/CatalogListInvestigationTypes.cpp index 191cdc13b4db..57b74bf5857a 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogListInvestigationTypes.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogListInvestigationTypes.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -This algorithm is responsible for obtaining a list of investigation types from the catalog. - -*WIKI*/ - #include "MantidICat/CatalogListInvestigationTypes.h" #include "MantidAPI/CatalogManager.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/ICat/src/CatalogLogin.cpp b/Code/Mantid/Framework/ICat/src/CatalogLogin.cpp index d0660173e756..713353610637 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogLogin.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogLogin.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -This algorithm connects the logged in user to the information catalog. - -*WIKI*/ - #include "MantidICat/CatalogLogin.h" #include "MantidAPI/AlgorithmManager.h" #include "MantidAPI/CatalogManager.h" @@ -68,4 +62,3 @@ namespace Mantid } } - diff --git a/Code/Mantid/Framework/ICat/src/CatalogLogout.cpp b/Code/Mantid/Framework/ICat/src/CatalogLogout.cpp index 2c76aeeebeca..9e0dd1dc3ea8 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogLogout.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogLogout.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -This algorithm disconnects the logged in user from a specific catalog using the session information provided. - -*WIKI*/ - #include "MantidICat/CatalogLogout.h" #include "MantidAPI/CatalogManager.h" #include "MantidAPI/AlgorithmManager.h" diff --git a/Code/Mantid/Framework/ICat/src/CatalogMyDataSearch.cpp b/Code/Mantid/Framework/ICat/src/CatalogMyDataSearch.cpp index cdf64f20d64a..b48b8ac7688a 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogMyDataSearch.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogMyDataSearch.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -This algorithm retrieves logged in users investigations data from the information catalog and stores it in mantid workspace. - -*WIKI*/ - #include "MantidICat/CatalogMyDataSearch.h" #include "MantidAPI/CatalogManager.h" diff --git a/Code/Mantid/Framework/ICat/src/CatalogPublish.cpp b/Code/Mantid/Framework/ICat/src/CatalogPublish.cpp index 72efd80a16e8..5671d093e157 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogPublish.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogPublish.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -This algorithm allows a user (who is logged into the information catalog) to publish -datafiles or workspaces to investigations of which they are an investigator. - -Datafiles and workspaces that are published are automatically made private. This means only investigators of that investigation can view them. - -'''Parameters Note''' - -* A file or workspace can be published, but not both at the same time. -* When uploading a workspace, it is saved to the default save directory as a nexus file. The history of of the workspace is generated and saved into a Python script, which is also uploaded alongside the datafile of the workspace. - -*WIKI*/ - #include "MantidICat/CatalogPublish.h" #include "MantidICat/CatalogAlgorithmHelper.h" diff --git a/Code/Mantid/Framework/ICat/src/CatalogSearch.cpp b/Code/Mantid/Framework/ICat/src/CatalogSearch.cpp index 240f17647d7b..ca3f251b9c40 100644 --- a/Code/Mantid/Framework/ICat/src/CatalogSearch.cpp +++ b/Code/Mantid/Framework/ICat/src/CatalogSearch.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -This algorithm searches for the investigations and stores the search results in a table workspace. - -*WIKI*/ - #if GCC_VERSION >= 40800 // 4.8.0 GCC_DIAG_OFF(literal-suffix) #endif @@ -154,4 +148,3 @@ namespace Mantid } } - diff --git a/Code/Mantid/Framework/ISISLiveData/src/FakeISISEventDAE.cpp b/Code/Mantid/Framework/ISISLiveData/src/FakeISISEventDAE.cpp index c62bcf1d9cb3..6c5b12fbdb97 100644 --- a/Code/Mantid/Framework/ISISLiveData/src/FakeISISEventDAE.cpp +++ b/Code/Mantid/Framework/ISISLiveData/src/FakeISISEventDAE.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Simulates ISIS event DAE. It runs continuously until canceled and listens to port 10000 for connection. -When connected starts sending event packets. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -208,4 +202,3 @@ void FakeISISEventDAE::exec() } // namespace LiveData } // namespace Mantid - diff --git a/Code/Mantid/Framework/LiveData/src/FakeISISHistoDAE.cpp b/Code/Mantid/Framework/LiveData/src/FakeISISHistoDAE.cpp index ed6113c9135e..60aa58c2b6e1 100644 --- a/Code/Mantid/Framework/LiveData/src/FakeISISHistoDAE.cpp +++ b/Code/Mantid/Framework/LiveData/src/FakeISISHistoDAE.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Simulates ISIS histogram DAE. It runs continuously until canceled and listens to port 6789 for ISIS DAE commands. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -399,4 +394,3 @@ void FakeISISHistoDAE::exec() } // namespace LiveData } // namespace Mantid - diff --git a/Code/Mantid/Framework/LiveData/src/LoadLiveData.cpp b/Code/Mantid/Framework/LiveData/src/LoadLiveData.cpp index 8141279d7ab1..088a8f6f3fa7 100644 --- a/Code/Mantid/Framework/LiveData/src/LoadLiveData.cpp +++ b/Code/Mantid/Framework/LiveData/src/LoadLiveData.cpp @@ -1,60 +1,3 @@ -/*WIKI* - -This algorithm is called on a regular interval -by the [[MonitorLiveData]] algorithm. -'''It should not be necessary to call LoadLiveData directly.''' - -[[File:LoadLiveData_flow.png]] - -=== Data Processing === - -* Each time LoadLiveData is called, a chunk of data is loaded from the [[LiveListener]]. -** This consists of all the data collected since the previous call. -** The data is saved in a temporary [[workspace]]. -* You have two options on how to process this workspace: - -==== Processing with an Algorithm ==== - -* Specify the name of the algorithm in the ''ProcessingAlgorithm'' property. -** This could be, e.g. a [[Python Algorithm]] written for this purpose. -** The algorithm ''must'' have at least 2 properties: ''InputWorkspace'' and ''OutputWorkspace''. -** Any other properties are set from the string in ''ProcessingProperties''. -** The algorithm is then run, and its OutputWorkspace is saved. - -==== Processing with a Python Script ==== - -* Specify a python script in the ''ProcessingScript'' property. -** This can have several lines. -** Two variables have special meaning: -*** ''input'' is the input workspace. -*** ''output'' is the name of the processed, output workspace. -** Otherwise, your script can contain any legal python code including calls to other Mantid algorithms. -** If you create temporary workspaces, you should delete them in the script. - -=== Data Accumulation === - -* The ''AccumulationMethod'' property specifies what to do with each chunk. -** If you select 'Add', the chunks of processed data will be added using [[Plus]] or [[PlusMD]]. -** If you select 'Replace', then the output workspace will always be equal to the latest processed chunk. -** If you select 'Append', then the spectra from each chunk will be appended to the output workspace. - -
-==== A Warning About Events ==== - -Beware! If you select ''PreserveEvents'' and your processing keeps the data as [[EventWorkspace]]s, you may end -up creating '''very large''' EventWorkspaces in long runs. Most plots require re-sorting the events, -which is an operation that gets much slower as the list gets bigger (Order of N*log(N)). -This could cause Mantid to run very slowly or to crash due to lack of memory. -
- -=== Post-Processing Step === - -* Optionally, you can specify some processing to perform ''after'' accumulation. -** You then need to specify the ''AccumulationWorkspace'' property. -* Using either the ''PostProcessingAlgorithm'' or the ''PostProcessingScript'' (same way as above), the ''AccumulationWorkspace'' is processed into the ''OutputWorkspace'' - -*WIKI*/ - #include "MantidLiveData/LoadLiveData.h" #include "MantidLiveData/Exception.h" #include "MantidKernel/WriteLock.h" diff --git a/Code/Mantid/Framework/LiveData/src/MonitorLiveData.cpp b/Code/Mantid/Framework/LiveData/src/MonitorLiveData.cpp index 8194ef86c277..0d03495b03e1 100644 --- a/Code/Mantid/Framework/LiveData/src/MonitorLiveData.cpp +++ b/Code/Mantid/Framework/LiveData/src/MonitorLiveData.cpp @@ -1,16 +1,3 @@ -/*WIKI* - -The MonitorLiveData algorithm is started in the background -by [[StartLiveData]] and repeatedly calls [[LoadLiveData]]. -'''It should not be necessary to call MonitorLiveData directly.''' - -This algorithm simply calls [[LoadLiveData]] at the given ''UpdateFrequency''. -For more details, see [[StartLiveData]]. - -For details on the way to specify the data processing steps, see: [[LoadLiveData#Description|LoadLiveData]]. - -*WIKI*/ - #include "MantidLiveData/MonitorLiveData.h" #include "MantidKernel/System.h" #include "MantidLiveData/LoadLiveData.h" diff --git a/Code/Mantid/Framework/LiveData/src/StartLiveData.cpp b/Code/Mantid/Framework/LiveData/src/StartLiveData.cpp index 5157a2b79c78..3f8d80b25133 100644 --- a/Code/Mantid/Framework/LiveData/src/StartLiveData.cpp +++ b/Code/Mantid/Framework/LiveData/src/StartLiveData.cpp @@ -1,99 +1,3 @@ -/*WIKI* - -The StartLiveData algorithm launches a background job that monitors and processes live data. - -The background algorithm started is [[MonitorLiveData]], which simply calls [[LoadLiveData]] at a fixed interval. - -For details on the way to specify the data processing steps, see: [[LoadLiveData#Description|LoadLiveData]]. - -=== Live Plots === - -Once live data monitoring has started, you can open a plot in MantidPlot. For example, you can right-click a workspace and choose "Plot Spectra". - -As the data is acquired, this plot updates automatically. - -Another way to start plots is to use [[MantidPlot:_Help#Python_Scripting_in_MantidPlot|python MantidPlot commands]]. -The StartLiveData algorithm returns after the first chunk of data has been loaded and processed. -This makes it simple to write a script that will open a live plot. For example: - - -StartLiveData(UpdateEvery='1.0',Instrument='FakeEventDataListener', - ProcessingAlgorithm='Rebin',ProcessingProperties='Params=10e3,1000,60e3;PreserveEvents=1', - OutputWorkspace='live') -plotSpectrum('live', [0,1]) - - -=== Run Transition Behavior === - -* When the experimenter starts and stops a run, the Live Data Listener receives this as a signal. -* The ''RunTransitionBehavior'' property specifies what to do at these run transitions. -** Restart: the accumulated data (from the previous run if a run has just ended or from the time between runs a if a run has just started) is discarded as soon as the next chunk of data arrives. -** Stop: live data monitoring ends. It will have to be restarted manually. -** Rename: the previous workspaces are renamed, and monitoring continues with cleared ones. The run number, if found, is used to rename the old workspaces. -*** There is a check for available memory before renaming; if there is not enough memory, the old data is discarded. -* Note that LiveData continues monitoring even if outside of a run (i.e. before a run begins you will still receive live data). - -=== Multiple Live Data Sessions === - -It is possible to have multiple live data sessions running at the same time. -Simply call StartLiveData more than once, but make sure to specify unique -names for the ''OutputWorkspace''. - -Please note that you may be limited in how much simultaneous processing you -can do by your available memory and CPUs. - -*WIKI*/ -/*WIKI_USAGE_NO_SIGNATURE* -Here are some examples of usage of StartLiveData, most use the FakeEventDataListener so they will always work, but this can be swapped for any instrument such as OFFSPEC, GEM, HYSPEC etc. - -Note: After running each of these you will need to cancel the ongoing data loading by cancelling the MonitorLiveData algorithm. -You will find this by clicking the details button in the bottom left corner of Mantidplot. - -====Just Live Event Data==== - -StartLiveData(UpdateEvery='1.0',Instrument='FakeEventDataListener', - OutputWorkspace='live') - - -====Live Event Rebin using an algorithm and plotting==== - -StartLiveData(UpdateEvery='1.0',Instrument='FakeEventDataListener', - ProcessingAlgorithm='Rebin',ProcessingProperties='Params=10e3,1000,60e3;PreserveEvents=1', - OutputWorkspace='live') -plotSpectrum('live', [0,1]) - - -====Live Event Rebin using a python script==== -The script can be as simple or complicated as you want, -you have to call the input workspace input, and the output workspace at the end output. - -script='Rebin(InputWorkspace=input,OutputWorkspace=output,Params="40000,100,50000")' -StartLiveData(UpdateEvery='1.0',Instrument='FakeEventDataListener', - ProcessingScript=script,ProcessingProperties='Params=10e3,1000,60e3;PreserveEvents=1', - OutputWorkspace='live') -plotSpectrum('live', [0,1]) - - -====Live Event Pre and post processing==== -This uses rebin to select a region of time of flight, and then after -the data is accumulated it uses SumSpectra to sum all of the data into a single spectrum. -When using post processing you have to give the accumulation workspace a name. - -StartLiveData(UpdateEvery='1.0',Instrument='FakeEventDataListener', - ProcessingAlgorithm='Rebin',ProcessingProperties='Params=10e3,1000,60e3;PreserveEvents=1', - OutputWorkspace='live', AccumulationWorkspace="accumulation", - PostProcessingAlgorithm="SumSpectra",PostProcessingProperties="") -plotSpectrum('live', 0) - - -====Live Histogram Data and plotting==== -For Histogram data the accumulationMethod needs to be set to Replace, you will get a warning otherwise. - -StartLiveData(UpdateEvery='1.0',Instrument='OFFSPEC', - AccumulationMethod="Replace", OutputWorkspace='live') -plotSpectrum('live', [0,1]) - -*WIKI_USAGE_NO_SIGNATURE*/ #include "MantidLiveData/StartLiveData.h" #include "MantidKernel/System.h" #include "MantidLiveData/LoadLiveData.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/AndMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/AndMD.cpp index f6eb61077e80..6899c89e1c6d 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/AndMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/AndMD.cpp @@ -1,19 +1,3 @@ -/*WIKI* - -Perform the And boolean operation on two MDHistoWorkspaces. -The & operation is performed element-by-element. -A signal of 0.0 means "false" and any non-zero signal is "true". - -*WIKI*/ -/*WIKI_USAGE* - - C = A & B - A &= B - -See [[MDHistoWorkspace#Boolean_Operations|this page]] for examples on using boolean operations. - -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/AndMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/BinMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/BinMD.cpp index e2b97f7f3183..48425eb9dbab 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/BinMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/BinMD.cpp @@ -1,78 +1,3 @@ -/*WIKI* - -This algorithm performs dense binning of the events in multiple dimensions of an input -[[MDEventWorkspace]] and places them into a dense MDHistoWorkspace with 1-4 dimensions. - -The input MDEventWorkspace may have more dimensions than the number of output dimensions. -The names of the dimensions in the DimX, etc. parameters are used to find the corresponding -dimensions that will be created in the output. - -An ImplicitFunction can be defined using the ImplicitFunctionXML parameter; -any points NOT belonging inside of the ImplicitFunction will be set as NaN (not-a-number). - -=== Axis-Aligned Binning === - -This is binning where the output axes are aligned with the original workspace. -Specify each of the AlignedDim0, etc. parameters with these values, separated by commas: -* First, the name of the dimension in the original workspace -* Next, the start and end position along that dimension -* Finally, the number of bins to use in that dimensions. - -If you specify fewer output dimensions, then events in the remaining dimensions -will be integrated along all space. If you wish to integrate only within a range, -then specify the start and end points, with only 1 bin. - -=== Non-Axis Aligned Binning === - -This allows rebinning to a new arbitrary space, with rotations, translations, -or skewing. This is given by a set of basis vectors and other parameters - -The '''BasisVector0...''' parameters allow you to specify the basis vectors -relating the input coordinates to the output coordinates. -They are string with these parameters, separated by commas: 'name, units, x,y,z,..,': -* Name: of the new dimension -* Units: string giving the units -* x, y, z, etc.: a vector, matching the number of dimensions, giving the direction of the basis vector - -The '''Translation''' parameter defines the translation between the spaces. -The coordinates are given in the input space dimensions, and they -correspond to 0,0,0 in the output space. - -The '''OutputExtents''' parameter specifies the min/max coordinates -''in the output coordinate'' space. For example, if you the output X to range -from -5 to 5, and output Y to go from 0 to 10, you would have: "-5,5, 0,10". - -The '''OutputBins''' parameter specifies how many bins to use in the output -workspace for each dimension. For example, "10,20,30" will make -10 bins in X, 20 bins in Y and 30 bins in Z. - -If the '''NormalizeBasisVectors''' parameter is '''True''', then the distances -in the ''input'' space are the same as in the ''output'' space (no scaling). -* For example, if BasisVector0=(1,1), a point at (1,1) transforms to x=\sqrt{2}, which is the same as the distance in the input dimension. - -If the '''NormalizeBasisVectors''' parameter is '''False''', then the algorithm -will take into account the ''length'' of each basis vector. -* For example, if BasisVector0=(1,1), a point at (1,1) transforms to x=1. The distance was scaled by 1/\sqrt{2} - -Finally, the '''ForceOrthogonal''' parameter will modify your basis vectors -if needed to make them orthogonal to each other. Only works in 3 dimensions! - -=== Binning a MDHistoWorkspace === - -It is possible to rebin a [[MDHistoWorkspace]]. -Each MDHistoWorkspace holds a reference to the [[MDEventWorkspace]] that created it, -as well as the coordinate transformation that was used. In this case, the rebinning is actually performed on the original MDEventWorkspace, -after suitably transforming the basis vectors. - -Only the non-axis aligned binning method can be performed on a MDHistoWorkspace! -Of course, your basis vectors can be aligned with the dimensions, which is equivalent. - -For more details on the coordinate transformations applied in this case, please see [[BinMD Coordinate Transformations]]. - -[[File:BinMD_Coordinate_Transforms_withLine.png]] - -*WIKI*/ - #include "MantidAPI/ImplicitFunctionFactory.h" #include "MantidGeometry/MDGeometry/MDBoxImplicitFunction.h" #include "MantidGeometry/MDGeometry/MDHistoDimension.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/BinaryOperationMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/BinaryOperationMD.cpp index c462cd3f8389..8305bb9c08e0 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/BinaryOperationMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/BinaryOperationMD.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Base class for other algorithms. -*WIKI*/ - #include "MantidMDAlgorithms/BinaryOperationMD.h" #include "MantidKernel/System.h" #include "MantidAPI/IMDWorkspace.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/CentroidPeaksMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/CentroidPeaksMD.cpp index 1ef00b3af260..f2d7b4ee8240 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/CentroidPeaksMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/CentroidPeaksMD.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -This algorithm starts with a PeaksWorkspace containing the expected positions of peaks in reciprocal space. It calculates the centroid of the peak by calculating the average of the coordinates of all events within a given radius of the peak, weighted by the weight (signal) of the event. - - -*WIKI*/ #include "MantidKernel/System.h" #include "MantidKernel/ListValidator.h" #include "MantidAPI/IMDEventWorkspace.h" @@ -195,4 +188,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/CentroidPeaksMD2.cpp b/Code/Mantid/Framework/MDAlgorithms/src/CentroidPeaksMD2.cpp index 6b956ae81894..13d7cef67254 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/CentroidPeaksMD2.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/CentroidPeaksMD2.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -This algorithm starts with a PeaksWorkspace containing the expected positions of peaks in reciprocal space. It calculates the centroid of the peak by calculating the average of the coordinates of all events within a given radius of the peak, weighted by the weight (signal) of the event. - - -*WIKI*/ #include "MantidKernel/System.h" #include "MantidKernel/ListValidator.h" #include "MantidAPI/IMDEventWorkspace.h" @@ -185,4 +178,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/CloneMDWorkspace.cpp b/Code/Mantid/Framework/MDAlgorithms/src/CloneMDWorkspace.cpp index ba496eea8fb7..ce86bde09e1a 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/CloneMDWorkspace.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/CloneMDWorkspace.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -This algorithm will clones an existing [[MDEventWorkspace]] or [[MDHistoWorkspace]] into a new one. - -If the InputWorkspace is a file-backed MDEventWorkspace, then the algorithm -will copy the original file into a new one with the suffix '_clone' added to its filename, in the same directory. -Before the clone operation, the file back-end will be updated using [[SaveMD]] with UpdateFileBackEnd=True. -This may delay the operation. - -If you wish to clone a file-backed MDEventWorkspace to an in-memory MDEventWorkspace, we -recommend that you first call [[SaveMD]] with UpdateFileBackEnd=True (if necessary), -followed by a simple LoadMD call to the file in question. - -*WIKI*/ #include "MantidAPI/IMDEventWorkspace.h" #include "MantidKernel/System.h" #include "MantidMDEvents/MDEventFactory.h" @@ -164,4 +150,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/CompareMDWorkspaces.cpp b/Code/Mantid/Framework/MDAlgorithms/src/CompareMDWorkspaces.cpp index 06b923139b8a..949e16e0408b 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/CompareMDWorkspaces.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/CompareMDWorkspaces.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -Compare two MDWorkspaces ([[MDEventWorkspace]] or [[MDHistoWorkspace]]) to see -if they are the same. This is mostly meant for testing/debugging use by -developers. - -'''What is compared''': The dimensions, as well as the signal and error for each -bin of each workspace will be compared. - -'''[[MDEventWorkspace]]''': the events in each box will be compared if the ''CheckEvents'' -option is checked. The events would need to be in the same order to match. - -*WIKI*/ - #include "MantidAPI/IMDEventWorkspace.h" #include "MantidAPI/IMDWorkspace.h" #include "MantidKernel/Strings.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDetectorFaceMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDetectorFaceMD.cpp index 2edf51f61985..c04944cbefb6 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDetectorFaceMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDetectorFaceMD.cpp @@ -1,39 +1,3 @@ -/*WIKI* - -This algorithm takes a a [[MatrixWorkspace]] and converts it into -a [[MDEventWorkspace]] that can be viewed in the [[SliceViewer]]. - -The algorithm currently only works for instruments with [[RectangularDetectors]]. -The coordinates of the output workspace are: - -* Pixel X coordinate (integer starting at 0) -* Pixel Y coordinate (integer starting at 0) -* The center of the bin of the spectrum in that pixel (e.g. time-of-flight) - -Each MDEvent created has a weight given by the number of counts in that bin. -Zero bins are not converted to events (saving memory). - -Once created, the [[MDEventWorkspace]] can be viewed in the [[SliceViewer]]. -It can also be rebinned with different parameters using [[BinMD]]. -This allows you to view the data in detector-space. For example, -you might use this feature to look at your detector's sensitivity as a function -of position, as well as a function of TOF. -You can also do line plots of the data. -See this screenshot for example: - -[[File:SliceViewer-DetectorFace.png|500px]] - -==== BankNumbers Parameter ==== - -If your instrument has several [[RectangularDetectors]], you can use the ''BankNumbers'' property -to specify which one(s) to convert. The algorithm looks for RectangularDetectors with the name 'bankXX' -where XX is the bank number. - -If you specify more than one bank number, then the algorithm will create a 4D MDEventWorkspace. -The fourth dimension will be equal to the bank number, allowing you to easily pick a bank to view. - -*WIKI*/ - #include "MantidMDAlgorithms/ConvertToDetectorFaceMD.h" #include "MantidKernel/System.h" #include "MantidAPI/IMDEventWorkspace.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDiffractionMDWorkspace.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDiffractionMDWorkspace.cpp index b96b3fd151cf..08555533f1cc 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDiffractionMDWorkspace.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDiffractionMDWorkspace.cpp @@ -1,62 +1,3 @@ -/*WIKI* - -This algorithm converts from a [[MatrixWorkspace]] (in detector/time-of-flight space) to a -[[MDEventWorkspace]] containing events in reciprocal space. - -The calculations apply only to elastic diffraction experiments. -The conversion can be done either to Q-space in the lab or sample frame, or to HKL of the crystal. - -If the OutputWorkspace does NOT already exist, a default one is created. -In order to define more precisely the parameters of the [[MDEventWorkspace]], -use the [[CreateMDWorkspace]] algorithm first. - -==== Types of Conversion ==== - -* '''Q (lab frame)''': this calculates the momentum transfer (ki-kf) for each event is calculated in the experimental lab frame. -* '''Q (sample frame)''': the goniometer rotation of the sample is taken out, to give Q in the frame of the sample. See [[SetGoniometer]] to specify the goniometer used in the experiment. -* '''HKL''': uses the UB matrix (see [[SetUB]], [[FindUBUsingFFT]] and others) to calculate the HKL Miller indices of each event. - -==== Lorentz Correction ==== - -If selected, the following Lorentz correction factor is applied on each event -by multiplying its weight by L: - -L = \frac{ sin(\theta)^2 } { \lambda^{4} } - -Where \theta is ''half'' of the neutron scattering angle (conventionally called 2\theta). -\lambda is the neutron wavelength in ''Angstroms''. - -This correction is also done by the [[AnvredCorrection]] algorithm, and will be set to false if -that algorithm has been run on the input workspace. - -==== OneEventPerBin option ==== - -If you specify ''OneEventPerBin'', then the '''histogram''' representation of the input workspace is used, -with one MDEvent generated for each bin of the workspace, '''including zeros'''. - -This can be useful in cases where the experimental coverage needs to be tracked. With one MDEvent for each -bin, you can count which regions in Q-space have been measured. The [[SliceViewer]] has an option -to view normalized by number of events. This means that, for example, areas with overlap from two runs -will appear scaled down. - -A significant drawback to this is that the output MDEventWorkspace will be ''significantly'' larger than the -events alone would be. It currently must be created in physical memory (it cannot yet be cached to disk). -One way to limit the memory used is to limit the OutputExtents to a smaller region and only convert -part of the space. - -Also, the [[FindPeaksMD]] algorithm may not work optimally because it depends partly on higher density of -events causing more finely split boxes. - -If your input is a [[Workspace2D]] and you do NOT check ''OneEventPerBin'', then the workspace is converted -to an [[EventWorkspace]] but with no events for empty bins. - -==== Performance Notes ==== - -* 8-core Intel Xeon 3.2 GHz computer: measured between 4 and 5.5 million events per second (100-200 million event workspace). -* 32-core AMD Opteron 2.7 GHz computer: measured between 8 and 9 million events per second (400-1000 million event workspaces). - -*WIKI*/ - #include "MantidAPI/IMDEventWorkspace.h" #include "MantidAPI/Progress.h" #include "MantidAPI/WorkspaceValidators.h" @@ -632,4 +573,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDiffractionMDWorkspace2.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDiffractionMDWorkspace2.cpp index 048595244533..2435c2245352 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDiffractionMDWorkspace2.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToDiffractionMDWorkspace2.cpp @@ -1,62 +1,3 @@ -/*WIKI* - -This algorithm converts from a [[MatrixWorkspace]] (in detector/time-of-flight space) to a -[[MDEventWorkspace]] containing events in reciprocal space. - -The calculations apply only to elastic diffraction experiments. -The conversion can be done either to Q-space in the lab or sample frame, or to HKL of the crystal. - -If the OutputWorkspace does NOT already exist, a default one is created. -In order to define more precisely the parameters of the [[MDEventWorkspace]], -use the [[CreateMDWorkspace]] algorithm first. - -==== Types of Conversion ==== - -* '''Q (lab frame)''': this calculates the momentum transfer (ki-kf) for each event is calculated in the experimental lab frame. -* '''Q (sample frame)''': the goniometer rotation of the sample is taken out, to give Q in the frame of the sample. See [[SetGoniometer]] to specify the goniometer used in the experiment. -* '''HKL''': uses the UB matrix (see [[SetUB]], [[FindUBUsingFFT]] and others) to calculate the HKL Miller indices of each event. - -==== Lorentz Correction ==== - -If selected, the following Lorentz correction factor is applied on each event -by multiplying its weight by L: - -L = \frac{ sin(\theta)^2 } { \lambda^{4} } - -Where \theta is ''half'' of the neutron scattering angle (conventionally called 2\theta). -\lambda is the neutron wavelength in ''Angstroms''. - -This correction is also done by the [[AnvredCorrection]] algorithm, and will be set to false if -that algorithm has been run on the input workspace. - -==== OneEventPerBin option ==== - -If you specify ''OneEventPerBin'', then the '''histogram''' representation of the input workspace is used, -with one MDEvent generated for each bin of the workspace, '''including zeros'''. - -This can be useful in cases where the experimental coverage needs to be tracked. With one MDEvent for each -bin, you can count which regions in Q-space have been measured. The [[SliceViewer]] has an option -to view normalized by number of events. This means that, for example, areas with overlap from two runs -will appear scaled down. - -A significant drawback to this is that the output MDEventWorkspace will be ''significantly'' larger than the -events alone would be. It currently must be created in physical memory (it cannot yet be cached to disk). -One way to limit the memory used is to limit the OutputExtents to a smaller region and only convert -part of the space. - -Also, the [[FindPeaksMD]] algorithm may not work optimally because it depends partly on higher density of -events causing more finely split boxes. - -If your input is a [[Workspace2D]] and you do NOT check ''OneEventPerBin'', then the workspace is converted -to an [[EventWorkspace]] but with no events for empty bins. - -==== Performance Notes ==== - -* 8-core Intel Xeon 3.2 GHz computer: measured between 4 and 5.5 million events per second (100-200 million event workspace). -* 32-core AMD Opteron 2.7 GHz computer: measured between 8 and 9 million events per second (400-1000 million event workspaces). - -*WIKI*/ - #include "MantidMDAlgorithms/ConvertToDiffractionMDWorkspace2.h" #include "MantidAPI/Algorithm.h" @@ -297,4 +238,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMD.cpp index 4a1c42fddd01..da2708b33962 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMD.cpp @@ -1,140 +1,3 @@ -/*WIKI* - -== Used Subalgorithms == - -The algorithm uses [[Unit_Factory|Unit Factory ]] and existing unit conversion procedures from input Workspace Units to the Units, necessary for transformation into correspondent MD Event workspace. It also uses [[PreprocessDetectorsToMD]] algorithm to help with transformation to reciprocal space. - -If min, max or both lists of values (properties 12 and 13) for the algorithm are not specified, [[ConvertToMDMinMaxLocal]] is used to estimate missing min-max values. This algorithm is also used to calculate min-max values if specified min-max values are deemed incorrect (e.g. less values then dimensions or some min values are bigger then max values) -== Notes == -
    -
  1. For elastic analysis ( dEAnalysisMode=Elastic) the target [[units|unit]] is momentum k. -
  2. For no analysis (CopyToMD) mode, the units remain the one, previously defined along the workspace's axes. -
  3. When units of input Matrix 2D workspace (Histogram workspace) are not Momentums for Elastic or EnergyTransfer for inelastic mode, the algorithm uses internal unit conversion of input X-values based on central average of a bin ranges. Namely, value X_c = 0.5*(X_i+X_{i+1}) is calculated and converted to Momentum or EnergyTransfer correspondingly. This can give slightly different result from the case, when input workspace has been converted into correspondent units before converting to MDEvents. -
  4. Confusing message "Error in execution of algorithm ConvertToMD: emode must be equal to 1 or 2 for energy transfer calculation" is generated when one tries to process the results of inelastic scattering experiment in elastic mode. This message is generated by units conversion routine, which finds out that one of the workspace axis is in [[units|unit]] of DeltaE. These units can not be directly converted into momentum or energy, necessary for elastic mode. Select Direct or Indirect mode and integrate over whole energy transfer range to obtain MD workspace, which would correspond to an Elastic mode. -
  5. A good guess on the limits can be obtained from the [[ConvertToMDMinMaxLocal]] algorithm. -
- - -== How to write custom ConvertToMD plugin == - -This information intended for developers who have at least basic knowledge of C++ and needs to write its own [[Writing custom ConvertTo MD transformation |convertToMD plugin]]. - -== Usage examples == -The examples below demonstrate the usages of the algorithm in most common situations. They work with the data files which already used by Mantid for different testing tasks. - -=== Convert re-binned MARI 2D workspace to 3D MD workspace for further analysis/merging with data at different temperatures === - -
- - -Load(Filename='MAR11001.nxspe',OutputWorkspace='MAR11001') -SofQW3(InputWorkspace='MAR11001',OutputWorkspace='MAR11001Qe2',QAxisBinning='0,0.1,7',EMode='Direct') -AddSampleLog(Workspace='MAR11001Qe2',LogName='T',LogText='100.0',LogType='Number Series') - -ConvertToMD(InputWorkspace='MAR11001Qe2',OutputWorkspace='MD3',QDimensions='CopyToMD',OtherDimensions='T',\ -MinValues='-10,0,0',MaxValues='10,6,500',SplitInto='50,50,5') - - -
-Output '''MD3''' workspace can be viewed in slice-viewer as 3D workspace with T-axis having single value. - -=== Convert Set of Event Workspaces (Horace scan) to 4D MD workspace, direct mode: === - -This example is based on CNCS_7860_event.nxs file, available in Mantid test folder. The same script without any changes would produce similar MD workspace given histogram data obtained from inelastic instruments and stored in nxspe files. - -
- -# let's load test event workspace, which has been already preprocessed and available in Mantid Test folder -WS_Name='CNCS_7860_event' -Load(Filename=WS_Name,OutputWorkspace=WS_Name) -# this workspace has been obtained from an inelastic experiment with input energy Ei = 3. -# Usually this energy is stored in workspace -# but if it is not, we have to provide it for inelastic conversion to work. -AddSampleLog(Workspace=WS_Name,LogName='Ei',LogText='3.0',LogType='Number') -# -# set up target ws name and remove target workspace with the same name which can occasionally exist. -RezWS = 'WS_4D' -try: -DeleteWorkspace(RezWS) -except ValueError: -print "Target ws ",RezWS," not found in analysis data service\n" -# -#---> Start loop over contributing files -for i in range(0,20,5): -# the following operations simulate different workspaces, obtained from experiment using rotating crystal; -# For real experiment we usually just load these workspaces from nxspe files with proper Psi values defined there -# and have to set up ub matrix -SourceWS = 'SourcePart'+str(i) -# it should be : -# Load(Filename=SourceWS_fileName,OutputWorkspace=WS_SourceWS) -# here, but the test does not have these data so we emulate the data by the following rows: -# ws emulation begin ----> -CloneWorkspace(InputWorkspace=WS_Name,OutputWorkspace=SourceWS) -# using scattering on a crystal with cubic lattice and 1,0,0 direction along the beam. -SetUB(Workspace=SourceWS,a='1.4165',b='1.4165',c='1.4165',u='1,0,0',v='0,1,0') -# rotated by proper number of degrees around axis Y -AddSampleLog(Workspace=SourceWS,LogName='Psi',LogText=str(i),LogType='Number Series') -SetGoniometer(Workspace=SourceWS,Axis0='Psi,0,1,0,1') -# ws emulation, end --------------------------------------------------------------------------------------- - -ConvertToMD(InputWorkspace=SourceWS,OutputWorkspace=RezWS,QDimensions='Q3D',QConversionScales='HKL',\ -OverwriteExisting=0,\ -dEAnalysisMode='Direct',MinValues='-3,-3,-3,-1',MaxValues='3,3,3,3',\ -SplitInto="20,20,1,1") -# delete source workspace from memory; -DeleteWorkspace(SourceWS) -#---> End loop -# plot results using sliceviewer -plotSlice(RezWS, xydim=["[H,0,0]","[0,K,0]"], slicepoint=[0,0] ) - -
- -=== Convert set of inelastic results obtained in Powder mode (direct) as function of temperature to a 3D workspace: === - -The test example is based on MAR1011.nxspe data file, obtained by reducing test data from the MARI experiment. The data for the experiment can be located in [http://github.com/mantidproject/systemtests Mantid system test] folder. The text will produce 3-dimensional dataset, with temperature axis. The image does not change with temperature, as we have just cloned initial workspace without any changes to the experimental data. - -
- -# let's load test event workspace, which has been already preprocessed and availible in Mantid Test folder -WS_Name='MAR11001.nxspe' -Load(Filename=WS_Name,OutputWorkspace=WS_Name) -# this workspace has been obtained from an inelastic experiment with input energy -# nxspe file has input energy stored in it so no need to add energy artificially -#AddSampleLog(Workspace=WS_Name,LogName='Ei',LogText='3.0',LogType='Number') - -# set up target ws name and remove target workspace with the same name which can occasionally exist. -RezWS = 'WS_3D' -try: -DeleteWorkspace(RezWS) -except ValueError: -print "Target ws ",RezWS," not found in analysis data service\n" -i=0 -# let's assume this is the temperature range obtained in experiments and -# each data file is obtained for particular temperature. -T = [1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0] -for i in range(0,len(T),1): -# EMULATE LOAD OF DIFFERENT results obtained for different temperatures. ------> -SourceWS = 'SourcePart'+str(i) -# Load(Filename=WS_Name,OutputWorkspace=WS_Name) -CloneWorkspace(InputWorkspace=WS_Name,OutputWorkspace=SourceWS) -# Each workspace has the temperature from the list above associated with it through the correspondent log file -AddSampleLog(Workspace=SourceWS,LogName='T',LogText=str(T[i]),LogType='Number Series') -# END EMULATION --------------------------------------------------------------------- - -ConvertToMD(InputWorkspace=SourceWS,OutputWorkspace=RezWS,QDimensions='|Q|',OverwriteExisting=0,\ -dEAnalysisMode='Direct',OtherDimensions='T',PreprocDetectorsWS='DetWS', -MinValues='0,-10,0',MaxValues='12,10,10',SplitInto="100,100,20") -# delete source workspace from memory; -DeleteWorkspace(SourceWS) - -plotSlice(RezWS, xydim=["|Q|","DeltaE"], slicepoint=[0,0] ) - - -
- - -*WIKI*/ - #include "MantidMDAlgorithms/ConvertToMD.h" #include "MantidKernel/PhysicalConstants.h" @@ -663,5 +526,3 @@ namespace Mantid } // namespace Mantid } // namespace MDAlgorithms - - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDMinMaxGlobal.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDMinMaxGlobal.cpp index 7e96177db826..d639e1220f37 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDMinMaxGlobal.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDMinMaxGlobal.cpp @@ -1,17 +1,3 @@ -/*WIKI* -The algorithm will try to calculate the MinValues and MaxValues limits that are required in the ConvertToMD algorithm, using the following procedure: - -* If QDimensions is CopyToMD the first value in MinValues is going to be the workspace minimum X coordinate, and the first value in MaxValues is going to be the maximum X coordinate -* If QDimensions is |Q| or Q3D, first we calculate the maximum momentum transfer, Qmax. If dEAnalysisMode is Elastic, we convert to Momentum units, find the maximum value, and multiply by 2, since the maximum momentum transfer occurs when the incident beam and the scattered beam are anti-parallel. -* If dEAnalysisMode is Direct or Indirect, we convert to DeltaE units, find the minimum and maximum (dEmin, dEmax), calculate to ki and kf. The maximum momentum transfer is ki+kf. -* If QDimensions is |Q|, the first value of the MinValues is 0, and the first value of MaxValues is Qmax -* If QDimensions is Q3D, and Q3DFrames is Q the first three values of the MinValues are -Qmax, -Qmax, -Qmax, and the first three values of MaxValues are Qmax, Qmax, Qmax -* If QDimensions is Q3D, and Q3DFrames is HKL the first three values of the MinValues are -Qmax*a/(2*pi), -Qmax*b/(2*pi), -Qmax*c/(2*pi), and the first three values of MaxValues are Qmax*a/(2*pi), Qmax*b/(2*pi), Qmax*c/(2*pi). Note: for HKL mode one needs to have an OrientedLattice attached to the sample. -* If QDimensions is |Q| or Q3D, and dEAnalysisMode is Elastic or Inelastic, the next value in MinValues is dEmin, and the next value in MaxValues is dEmax -* If any OtherDimensions are added, the last values in MinValues (MaxValues) are the minimum (maximum) of each of the sample log values selected - -*WIKI*/ - #include "MantidMDAlgorithms/ConvertToMDMinMaxGlobal.h" #include "MantidAPI/WorkspaceValidators.h" #include "MantidKernel/ListValidator.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDMinMaxLocal.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDMinMaxLocal.cpp index 95e161f4707c..a4e4124c9a6c 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDMinMaxLocal.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDMinMaxLocal.cpp @@ -1,21 +1,3 @@ -/*WIKI* -Helper algorithm to calculate min-max input values for ConvertToMD algorithm, using ConvertToMD algorithm factory. - -Initiates the same as ConvertToMD algorithm transformation from the ConvertToMD factory and uses this transformation to evaluate all points where -the transformation can achieve extrema for each workspace spectra. Then goes through all extrema points, calculates min/max values for each spectra -and select global min-max values for the whole workspace. - -For example, given input workspace in the units of energy transfer and requesting |Q| inelastic transformation, the algorithm looks through -all spectra of the input workspace and identifies minimal, maximal and an extremal* energy transfer for the input spectra. -Then it runs |Q| dE conversion for these energy transfer points and loops through all spectra of the workspace to identify |Q|_min, |Q|_max -and dE_min and dE_max values. - -*extremal energy transfer for |Q| transformation occurs at some energy transfer where momentum transfer is maximal. It depends on polar - - -*WIKI*/ - - #include "MantidMDAlgorithms/ConvertToMDMinMaxLocal.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/CreateMDHistoWorkspace.cpp b/Code/Mantid/Framework/MDAlgorithms/src/CreateMDHistoWorkspace.cpp index 65e95cabf177..d087d29d6b12 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/CreateMDHistoWorkspace.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/CreateMDHistoWorkspace.cpp @@ -1,33 +1,3 @@ -/*WIKI* -Takes two arrays of signal and error values, as well as information describing the dimensionality and extents, and creates a MDHistoWorkspace (histogrammed multi-dimensional workspace). The ''SignalInput'' and ''ErrorInput'' arrays must be of equal length and have a length that is equal to the product of all the comma separated arguments provided to '''NumberOfBins'''. The order in which the arguments are specified to each of the properties (for those taking multiple arguments) is important, as they are assumed to match by the order they are declared. For example, specifying '''Names'''='A,B' and '''Units'''='U1,U2' will generate two dimensions, the first with a name of ''A'' and units of ''U1'' and the second with a name of ''B'' and units of ''U2''. The same logic applies to the '''Extents''' inputs. Signal and Error inputs are read in such that, the first entries in the file will be entered across the first dimension specified, and the zeroth index in the other dimensions. The second set of entries will be entered across the first dimension and the 1st index in the second dimension, and the zeroth index in the others. - -== Alternatives == -A very similar algorithm to this is [[ImportMDHistoWorkspace]], which takes it's input signal and error values from a text file rather than from arrays. Another alternative is to use [[ConvertToMD]] which works on MatrixWorkspaces, and allows log values to be included in the dimensionality. - -*WIKI*/ -/*WIKI_USAGE* -The following example creates a 2D MDHistoWorkspace called ''demo'' with 3 bins in each dimension and and extents spanning from -1 to 1 in each dimension. The first dimension is called A, and has units of U, the second is called B and has units of T. - - CreateMDHistoWorkspace(SignalInput='1,2,3,4,5,6,7,8,9',ErrorInput='1,1,1,1,1,1,1,1,1',Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins='3,3',Names='A,B',Units='U,T',OutputWorkspace='demo') - -The following example creates a 1D sine function - - import math - - signals=[] - errors=[] - pi = 3.14159 - extents = [-2*pi,2*pi] - nbins = [100] - dimensionality = 1 - step = float((extents[1] - extents[0])/nbins[0]) - for i in range(0, nbins[0]): - x = i*step; - signals.append(math.sin(x)) - errors.append(math.cos(x)) - CreateMDHistoWorkspace(SignalInput=signals,ErrorInput=errors,Dimensionality=dimensionality,Extents=extents,NumberOfBins=nbins,Names='x',Units='dimensionless',OutputWorkspace='demo') -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/CreateMDHistoWorkspace.h" #include "MantidKernel/ArrayProperty.h" #include diff --git a/Code/Mantid/Framework/MDAlgorithms/src/CreateMDWorkspace.cpp b/Code/Mantid/Framework/MDAlgorithms/src/CreateMDWorkspace.cpp index f20b77b1182e..46cbae765502 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/CreateMDWorkspace.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/CreateMDWorkspace.cpp @@ -1,20 +1,3 @@ -/*WIKI* - -This algorithm creates an empty MDEventWorkspace from scratch. The workspace can have any number of dimensions (up to ~20). -Each dimension must have its name, units, extents specified as comma-spearated string. - -The SplitInto parameter determines how splitting of dense boxes will be performed. -For example, if SplitInto=5 and the number of dimensions is 3, then each box will get split into 5x5x5 sub-boxes. - -The SplitThreshold parameter determines how many events to keep in a box before splitting it into sub-boxes. -This value can significantly affect performance/memory use! -Too many events per box will mean unnecessary iteration and a slowdown in general. -Too few events per box will waste memory with the overhead of boxes. - -You can create a file-backed MDEventWorkspace by specifying the Filename and Memory parameters. - -*WIKI*/ - #include "MantidAPI/FileProperty.h" #include "MantidAPI/IMDEventWorkspace.h" #include "MantidGeometry/MDGeometry/MDHistoDimension.h" @@ -203,4 +186,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/DivideMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/DivideMD.cpp index 7b887fcb90f6..92b385ab29fa 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/DivideMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/DivideMD.cpp @@ -1,28 +1,3 @@ -/*WIKI* -Divide two [[MDHistoWorkspace]]'s or a MDHistoWorkspace and a scalar. - -The error of f = a / b is propagated with df^2 = f^2 * (da^2 / a^2 + db^2 / b^2) - -* '''MDHistoWorkspace / MDHistoWorkspace''' -** The operation is performed element-by-element. -* '''MDHistoWorkspace / Scalar''' -** Every element of the MDHistoWorkspace is divided by the scalar. -* '''Scalar / MDHistoWorkspace''' -** This is not allowed. -* '''[[MDEventWorkspace]]'s''' -** This operation is not supported, as it is not clear what its meaning would be. - -*WIKI*/ -/*WIKI_USAGE* - - C = A / B - C = A / 123.4 - A /= B - A /= 123.4 - -See [[MDHistoWorkspace#Arithmetic_Operations|this page]] for examples on using arithmetic operations. -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/DivideMD.h" #include "MantidKernel/System.h" #include "MantidMDEvents/MDEventFactory.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/EqualToMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/EqualToMD.cpp index ab239e9289e5..a27ca7d6f1bb 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/EqualToMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/EqualToMD.cpp @@ -1,16 +1,3 @@ -/*WIKI* - -Perform the == (equals to) boolean operation on two MDHistoWorkspaces or a MDHistoWorkspace and a scalar. -The output workspace has a signal of 0.0 to mean "false" and a signal of 1.0 to mean "true". Errors are 0. - -For two MDHistoWorkspaces, the operation is performed element-by-element. Only the signal is compared. - -For a MDHistoWorkspace and a scalar, the operation is performed on each element of the output. - -*WIKI*/ -/*WIKI_USAGE* -See [[MDHistoWorkspace#Boolean_Operations|this page]] for examples on using boolean operations. -*WIKI_USAGE*/ #include "MantidMDAlgorithms/EqualToMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ExponentialMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ExponentialMD.cpp index e12a28616fdf..18b15eb5bac1 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ExponentialMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ExponentialMD.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -This executes the exponential function on a MDHistoWorkspace. - -The signal a becomes f = e^a - -The error da becomes df^2 = f^2 * da^2 - -This algorithm cannot be run on a [[MDEventWorkspace]]. Its equivalent on a [[MatrixWorkspace]] is called [[Exponential]]. - -*WIKI*/ - #include "MantidMDAlgorithms/ExponentialMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/FakeMDEventData.cpp b/Code/Mantid/Framework/MDAlgorithms/src/FakeMDEventData.cpp index 4a1a4985e29f..9ea9dfc19e49 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/FakeMDEventData.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/FakeMDEventData.cpp @@ -1,13 +1,3 @@ -/*WIKI* - - - -For testing MDEventWorkspaces, this algorithm either creates a uniform, random distribution of events, -or generate regular events placed in boxes, or fills peaks around given points with a given number of events. - - - -*WIKI*/ #include "MantidKernel/ArrayProperty.h" #include "MantidKernel/System.h" #include "MantidMDAlgorithms/FakeMDEventData.h" @@ -466,4 +456,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/FindPeaksMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/FindPeaksMD.cpp index bd3b61e35932..91dfc1f4fbba 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/FindPeaksMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/FindPeaksMD.cpp @@ -1,25 +1,3 @@ -/*WIKI* - - -This algorithm is used to find single-crystal peaks in a multi-dimensional workspace ([[MDEventWorkspace]] or [[MDHistoWorkspace]]). -It looks for high signal density areas, and is based on an algorithm designed by Dennis Mikkelson for ISAW. - -The algorithm proceeds in this way: -* Sorts all the boxes in the workspace by decreasing order of signal density (total weighted event sum divided by box volume). -** It will skip any boxes with a density below a threshold. The threshold is TotalSignal / TotalVolume * DensityThresholdFactor. -* The centroid of the strongest box is considered a peak. -* The centroid of the next strongest box is calculated. -** We look through all the peaks that have already been found. If the box is too close to an existing peak, it is rejected. This distance is PeakDistanceThreshold. -* This is repeated until we find up to MaxPeaks peaks. - -Each peak created is placed in the output [[PeaksWorkspace]], which can be a new workspace or replace the old one. - -This algorithm works on a [[MDHistoWorkspace]] resulting from the [[BinMD]] algorithm also. -It works in the same way, except that the center of each bin is used since the centroid is not accessible. -It may give better results on [[Workspace2D]]'s that were converted to [[MDWorkspace]]s. - -*WIKI*/ - #include "MantidDataObjects/PeaksWorkspace.h" #include "MantidKernel/System.h" #include "MantidMDAlgorithms/FindPeaksMD.h" @@ -656,4 +634,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/GreaterThanMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/GreaterThanMD.cpp index bca81b5e339c..011cca654355 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/GreaterThanMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/GreaterThanMD.cpp @@ -1,22 +1,3 @@ -/*WIKI* - -Perform the > (greater-than) boolean operation on two MDHistoWorkspaces or a MDHistoWorkspace and a scalar. -The output workspace has a signal of 0.0 to mean "false" and a signal of 1.0 to mean "true". Errors are 0. - -For two MDHistoWorkspaces, the operation is performed element-by-element. - -For a MDHistoWorkspace and a scalar, the operation is performed on each element of the output. - -*WIKI*/ -/*WIKI_USAGE* - # Compare two workspaces, element-by-element - C = A < B - # Compare a workspace and a number, element-by-element - C = A < 123.4 - -See [[MDHistoWorkspace#Boolean_Operations|this page]] for examples on using boolean operations. -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/GreaterThanMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD.cpp index e99d4bc98631..57ea935fb928 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD.cpp @@ -1,70 +1,3 @@ -/*WIKI* - -This algorithm performs integration of single-crystal peaks within a radius (with optional background subtraction) in reciprocal space. - -=== Inputs === - -The algorithms takes two input workspaces: - -* A MDEventWorkspace containing the events in multi-dimensional space. This would be the output of [[ConvertToDiffractionMDWorkspace]]. -* As well as a PeaksWorkspace containing single-crystal peak locations. This could be the output of [[FindPeaksMD]] -* The OutputWorkspace will contain a copy of the input PeaksWorkspace, with the integrated intensity and error found being filled in. - -=== Calculations === - -Integration is performed by summing the weights of each MDEvent within the provided radii. Errors are also summed in quadrature. - -[[File:IntegratePeaksMD_graph1.png]] - -* All the Radii are specified in \AA^{-1} -* A sphere of radius '''PeakRadius''' is integrated around the center of each peak. -** This gives the summed intensity I_{peak} and the summed squared error \sigma I_{peak}^2. -** The volume of integration is V_{peak}. -* If '''BackgroundOuterRadius''' is specified, then a shell, with radius r where '''BackgroundInnerRadius''' < r < '''BackgroundOuterRadius''', is integrated. -** This gives the summed intensity I_{shell} and the summed squared error \sigma I_{shell}^2. -** The volume of integration is V_{shell}. -** '''BackgroundInnerRadius''' allows you to give some space between the peak and the background area. - -==== Background Subtraction ==== - -The background signal within PeakRadius is calculated by scaling the background signal density in the shell to the volume of the peak: - -I_{bg} = I_{shell} \frac{V_{peak}}{V_{shell}} - -with the error squared on that value: - -\sigma I_{bg}^2 = \frac{V_{peak}}{V_{shell}} \sigma I_{shell}^2 - -This is applied to the integrated peak intensity I_{peak} to give the corrected intensity I_{corr}: - -I_{corr} = I_{peak} - I_{bg} - -with the errors summed in quadrature: - -\sigma I_{corr}^2 = \sigma I_{peak}^2 + \sigma I_{bg}^2 - -=== If BackgroundInnerRadius is Omitted === - -If BackgroundInnerRadius is left blank, then '''BackgroundInnerRadius''' = '''PeakRadius''', and the integration is as follows: - -[[File:IntegratePeaksMD_graph2.png]] - -=== Sample Usage === - - -# Load a SCD data set and find the peaks -LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') -ConvertToDiffractionMDWorkspace(InputWorkspace='TOPAZ_3131_nxs',OutputWorkspace='TOPAZ_3131_md',LorentzCorrection='1') -FindPeaksMD(InputWorkspace='TOPAZ_3131_md',PeakDistanceThreshold='0.15',MaxPeaks='100',OutputWorkspace='peaks') -FindUBUsingFFT(PeaksWorkspace='peaks',MinD='2',MaxD='16') - -# Perform the peak integration, in-place in the 'peaks' workspace. -IntegratePeaksMD(InputWorkspace='TOPAZ_3131_md', PeaksWorkspace='peaks', - PeakRadius=0.12, BackgroundOuterRadius=0.2, BackgroundInnerRadius=0.16, - OutputWorkspace='peaks') - - -*WIKI*/ #include "MantidAPI/IMDEventWorkspace.h" #include "MantidMDAlgorithms/GSLFunctions.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -704,4 +637,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp b/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp index 0cd01c12e4e2..8034eed7ff1c 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp @@ -1,70 +1,3 @@ -/*WIKI* - -This algorithm performs integration of single-crystal peaks within a radius (with optional background subtraction) in reciprocal space. - -=== Inputs === - -The algorithms takes two input workspaces: - -* A MDEventWorkspace containing the events in multi-dimensional space. This would be the output of [[ConvertToDiffractionMDWorkspace]]. -* As well as a PeaksWorkspace containing single-crystal peak locations. This could be the output of [[FindPeaksMD]] -* The OutputWorkspace will contain a copy of the input PeaksWorkspace, with the integrated intensity and error found being filled in. - -=== Calculations === - -Integration is performed by summing the weights of each MDEvent within the provided radii. Errors are also summed in quadrature. - -[[File:IntegratePeaksMD_graph1.png]] - -* All the Radii are specified in \AA^{-1} -* A sphere of radius '''PeakRadius''' is integrated around the center of each peak. -** This gives the summed intensity I_{peak} and the summed squared error \sigma I_{peak}^2. -** The volume of integration is V_{peak}. -* If '''BackgroundOuterRadius''' is specified, then a shell, with radius r where '''BackgroundInnerRadius''' < r < '''BackgroundOuterRadius''', is integrated. -** This gives the summed intensity I_{shell} and the summed squared error \sigma I_{shell}^2. -** The volume of integration is V_{shell}. -** '''BackgroundInnerRadius''' allows you to give some space between the peak and the background area. - -==== Background Subtraction ==== - -The background signal within PeakRadius is calculated by scaling the background signal density in the shell to the volume of the peak: - -I_{bg} = I_{shell} \frac{V_{peak}}{V_{shell}} - -with the error squared on that value: - -\sigma I_{bg}^2 = \frac{V_{peak}}{V_{shell}} \sigma I_{shell}^2 - -This is applied to the integrated peak intensity I_{peak} to give the corrected intensity I_{corr}: - -I_{corr} = I_{peak} - I_{bg} - -with the errors summed in quadrature: - -\sigma I_{corr}^2 = \sigma I_{peak}^2 + \sigma I_{bg}^2 - -=== If BackgroundInnerRadius is Omitted === - -If BackgroundInnerRadius is left blank, then '''BackgroundInnerRadius''' = '''PeakRadius''', and the integration is as follows: - -[[File:IntegratePeaksMD_graph2.png]] - -=== Sample Usage === - - -# Load a SCD data set and find the peaks -LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') -ConvertToDiffractionMDWorkspace(InputWorkspace='TOPAZ_3131_nxs',OutputWorkspace='TOPAZ_3131_md',LorentzCorrection='1') -FindPeaksMD(InputWorkspace='TOPAZ_3131_md',PeakDistanceThreshold='0.15',MaxPeaks='100',OutputWorkspace='peaks') -FindUBUsingFFT(PeaksWorkspace='peaks',MinD='2',MaxD='16') - -# Perform the peak integration, in-place in the 'peaks' workspace. -IntegratePeaksMD(InputWorkspace='TOPAZ_3131_md', PeaksWorkspace='peaks', - PeakRadius=0.12, BackgroundOuterRadius=0.2, BackgroundInnerRadius=0.16, - OutputWorkspace='peaks') - - -*WIKI*/ #include "MantidAPI/IMDEventWorkspace.h" #include "MantidMDAlgorithms/GSLFunctions.h" #include "MantidDataObjects/PeaksWorkspace.h" @@ -736,4 +669,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/LessThanMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/LessThanMD.cpp index 2b95bcad912d..a0b45c420805 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/LessThanMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/LessThanMD.cpp @@ -1,21 +1,3 @@ -/*WIKI* - -Perform the < (less-than) boolean operation on two MDHistoWorkspaces or a MDHistoWorkspace and a scalar. -The output workspace has a signal of 0.0 to mean "false" and a signal of 1.0 to mean "true". Errors are 0. - -For two MDHistoWorkspaces, the operation is performed element-by-element. - -For a MDHistoWorkspace and a scalar, the operation is performed on each element of the output. -*WIKI*/ -/*WIKI_USAGE* - # Compare two workspaces, element-by-element - C = A > B - # Compare a workspace and a number, element-by-element - C = A > 123.4 - -See [[MDHistoWorkspace#Boolean_Operations|this page]] for examples on using boolean operations. -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/LessThanMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/LoadMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/LoadMD.cpp index badda8feba3b..e9057798c501 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/LoadMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/LoadMD.cpp @@ -1,23 +1,3 @@ -/*WIKI* - -This algorithm loads a [[MDEventWorkspace]] that was previously -saved using the [[SaveMD]] algorithm to a .nxs file format. - -If the workspace is too large to fit into memory, -You can load the workspace as a [[MDWorkspace#File-Backed MDWorkspaces|file-backed MDWorkspace]] -by checking the FileBackEnd option. This will load the box structure -(allowing for some visualization with no speed penalty) but leave the -events on disk until requested. Processing file-backed MDWorkspaces -is significantly slower than in-memory workspaces due to frequency file access! - -For file-backed workspaces, the Memory option allows you to specify a cache -size, in MB, to keep events in memory before caching to disk. - -Finally, the BoxStructureOnly and MetadataOnly options are for special situations -and used by other algorithms, they should not be needed in daily use. - -*WIKI*/ - #include "MantidAPI/ExperimentInfo.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/IMDEventWorkspace.h" @@ -466,4 +446,3 @@ namespace Mantid } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/LoadSQW.cpp b/Code/Mantid/Framework/MDAlgorithms/src/LoadSQW.cpp index a280282c6fde..1879d759e5e8 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/LoadSQW.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/LoadSQW.cpp @@ -1,146 +1,3 @@ -/*WIKI* - -The algorithm takes every pixel defined in the SQW horace file and converts it into an event. - -Only top level binning information is currently taken from DND/Image data. All DND image information is currently ignored and the resulting MDEvent workspace is in the units of Q^{-1} (SQW dimensions, recalculated to the Crystal? frame, without HKL transformation). - -U matrix is set to unity but the B-matrix is read from the SQW and attached to the workspace which may confuse the algorithms which work with [[MDEventWorkspace]] produced by Mantid algorithms. - - -=== Notes on Horace SQW files === -Sqw objects comes in two flavours: - -- sqw-type - -- dnd-type - -The former has the four main fields fully filled. The fields description is given below. -The latter has: - -- '''main_header''', '''header''', '''detpar''' as empty structures (0x0 struct array with no fields) - -- data.urange and data.pix do not exist. - -The dnd-type is created from d0d, d1d,... objects for most algorithms so as to use private methods of sqw objects. - -DND-type object can not be currently read or understood by Mantid. - -=== Structure of sqw class with remarks on what is currently used and what is ignored === -String started by: - % -- ignored - * -- used - - '''Main_header''': - % main_headerfilename Name of sqw file that is being read, excluding path - % main_headerfilepath Path to sqw file that is being read, including terminating file separator - % main_headertitle Title of sqw data structure - % main_headernfiles Number of spe files that contribute to the sqw object - - '''Header''': (scalar structure, or cellarray of scalar structures if more than one spe file) - % header{i}.filename Name of sqw file excluding path - % header{i}.filepath Path to sqw file including terminating file separator - % header{i}.efix Fixed energy (ei or ef depending on emode) - % header{i}.emode Emode=1 direct geometry, =2 indirect geometry, =0 if diffraction ''' Only emode 1 have ever been tried ''' - % header{i}.alatt Lattice parameters (Angstroms) - % header{i}.angdeg Lattice angles (deg) - % header{i}.cu First vector defining scattering plane (r.l.u.) - % header{i}.cv Second vector defining scattering plane (r.l.u.) - % header{i}.psi Orientation angle (rad) - % header{i}.omega --| - % header{i}.dpsi | Crystal misorientation description (rad) - % header{i}.gl | (See notes elsewhere e.g. Tobyfit manual - % header{i}.gs --| - % header{i}.en Energy bin boundaries (meV) in the input spe file [column vector] - % header{i}.uoffset Offset of origin of pixel projection axes in r.l.u. and energy i.e. [h; k; l; en] [column vector] - % header{i}.u_to_rlu Matrix (4x4) of pixel projection axes in hkle representation - % u(:,1) first vector - u(1:3,1) r.l.u., u(4,1) energy etc. - % header{i}.ulen Length of pixel projection axes vectors in Ang^-1 or meV [row vector] - % header{i}.ulabel Labels of the pixel projection axes [1x4 cell array of character strings] - -The pixel projection axes, u1, u2, u3 are the orthonormal vectors of the crystal Cartesian coordinate frame i.e. u1 || a*, u2 in plane of a*, and b*, and u3 || a* x b*. -They form the coordinate frame in which the pixel coordinates are stored in data.pix. -The pixel projection axes must necessarily be identical for all contributing spe files. - - - '''Detpar''': - % detpar.filename Name of file excluding path - % detpar.filepath Path to file including terminating file separator - % detpar.group Row vector of detector group number - % detpar.x2 Row vector of secondary flightpaths (m) - % detpar.phi Row vector of scattering angles (deg) - % detpar.azim Row vector of azimuthal angles (deg) - % (West bank=0 deg, North bank=90 deg etc.) - % detpar.width Row vector of detector widths (m) - % detpar.height Row vector of detector heights (m) - - '''Data''': - % data.filename Name of sqw file that is being read, excluding path - % data.filepath Path to sqw file that is being read, including terminating file separator - % data.title Title of sqw data structure - * data.alatt Lattice parameters for data field (Ang^-1) - * data.angdeg Lattice angles for data field (degrees) - % data.uoffset Offset of origin of projection axes in r.l.u. and energy ie. [h; k; l; en] [column vector] - % data.u_to_rlu Matrix (4x4) of projection axes in hkle representation - % u(:,1) first vector - u(1:3,1) r.l.u., u(4,1) energy etc. - % data.ulen Length of projection axes vectors in Ang^-1 or meV [row vector] - % data.ulabel Labels of the projection axes [1x4 cell array of character strings] - % data.iax Index of integration axes into the projection axes [row vector] - % Always in increasing numerical order - % e.g. if data is 2D, data.iax=[1,3] means summation has been performed along u1 and u3 axes - % data.iint Integration range along each of the integration axes. [iint(2,length(iax))] - % e.g. in 2D case above, is the matrix vector [u1_lo, u3_lo; u1_hi, u3_hi] - % data.pax Index of plot axes into the projection axes [row vector] - % Always in increasing numerical order - % e.g. if data is 3D, data.pax=[1,2,4] means u1, u2, u4 axes are x,y,z in any plotting - % 2D, data.pax=[2,4] " u2, u4, axes are x,y in any plotting - % data.p Call array containing bin boundaries along the plot axes [column vectors] - % i.e. row cell array {data.p{1}, data.p{2} ...} (for as many axes as length of data.pax) - % data.dax Index into data.pax of the axes for display purposes. For example we may have - % data.pax=[1,3,4] and data.dax=[3,1,2] This means that the first display axis is data.pax(3)=4, - % the second is data.pax(1)=1, the third is data.pax(2)=3. The reason for data.dax is to allow - % the display axes to be permuted but without the contents of the fields p, s,..pix needing to - % be reordered [row vector] - -----> Large data fields, data for MD image - % data.s Cumulative signal. [size(data.s)=(length(data.p1)-1, length(data.p2)-1, ...)] - % data.e Cumulative variance [size(data.e)=(length(data.p1)-1, length(data.p2)-1, ...)] - % data.npix No. contributing pixels to each bin of the plot axes. - % [size(data.pix)=(length(data.p1)-1, length(data.p2)-1, ...)] - -----> - * data.urange True range of the data along each axis [urange(2,4)] - ----> Pixels or events data - * data.pix Array containing data for each pixel: - * If npixtot=sum(npix), then pix(9,npixtot) contains: - * u1 -| - * u2 | Coordinates of pixel in the pixel projection axes - * u3 | - * u4 -| - * irun Run index in the header block from which pixel came - * idet Detector group number in the detector listing for the pixel - * ien Energy bin number for the pixel in the array in the (irun)th header - * signal Signal array - * err Error array (variance i.e. error bar squared) - - -data.s is normalized by the number of pixels, as is the variance data.e. -For those elements where data.npix==0, data.s=0 and data.e=0 - -=== General notes about SQW file assumptions === - -Parts of the code were written with the idea of generalising functionality at a later stage. However, we can now assume that: - - - the lattice parameters are all the same for all contributing spe files - - the energy offset is zero in cuts - - Requires that all sqw files that are to be combined have - (1) each been created from only one spe file - (2) the same lattice parameters and pixel projection axes as held in the header block - (3) the same projection axes and offsets, as held in the data block - (4) the same plot and integration axes, with same bins and integration ranges - The display axes will be taken from the first sqw object in the list to be combined ` - - - -*WIKI*/ #include "MantidAPI/FileProperty.h" #include "MantidAPI/IMDEventWorkspace.h" #include "MantidAPI/MemoryManager.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/LogarithmMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/LogarithmMD.cpp index 6b0cf123a51b..06eace150682 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/LogarithmMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/LogarithmMD.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -This executes the natural logarithm operation on a MDHistoWorkspace. - -The signal a becomes f = log(a) - -The error da becomes df^2 = a^2 / da^2 - -This algorithm cannot be run on a [[MDEventWorkspace]]. Its equivalent on a [[MatrixWorkspace]] is called [[Logarithm]]. - -*WIKI*/ - #include "MantidMDAlgorithms/LogarithmMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/MaskMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/MaskMD.cpp index 0a2f9d32af69..b3bb0b61fc3d 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/MaskMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/MaskMD.cpp @@ -1,26 +1,3 @@ -/*WIKI* - -This algorithm masks a [[MDWorkspace]] in-situ. - -This algorithm will first clear-out any existing masking and then apply the new masking. - -== Simple Example == -Mask as single box region in a 3D workspace with Dimension ids X, Y, Z. Suppose that the dimensions exented from -2 to 2 in each dimension and you want to mask the central region. - - MaskMD("Workspace"=workspace,Dimensions="X,Y,Z",Exents="-1,1,-1,1,-1,1") - -== Complex Example == - -Mask two box regions in a 3D workspace, where the input workspace is the same as above. Here we attempt to mask two opposite corners of the 3D workspace. - - MaskMD("Workspace"=workspace,Dimensions="X,Y,Z,X,Y,Z",Extents="-2,-1,-2,-1,-2,-1,+1,+2,+1,+2,+1,+2") - -In this example, because the dimensionality is 3 and because 6 dimension ids have been provided, the algorithm treats {X,Y,Z} as one masking region and the -following {X,Y,Z} as another. Likewise of the 12, Extents inputs provided, the first 6 entries {-2,-1,-2,-1,-2,-1} are min, max values for the first {X,Y,Z} and the -latter 6 {+1,+2,+1,+2,+1,+2} relate to the last {X,Y,Z}. Applying this maksing will result in two completely separate areas masked in a single call to the algorithm. - -*WIKI*/ - #include "MantidMDAlgorithms/MaskMD.h" #include "MantidGeometry/MDGeometry/MDBoxImplicitFunction.h" #include "MantidAPI/IMDWorkspace.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/MergeMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/MergeMD.cpp index 187ea41aed0e..a72b2ff38ace 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/MergeMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/MergeMD.cpp @@ -1,18 +1,3 @@ -/*WIKI* - -This algorithm merges several [[MDWorkspace]]s together into one by adding their events together. - -The algorithm starts by going through the list of [[MDWorkspace]]s to find the extents -that fully encompass all input workspaces in each dimension. -The number and names of dimensions must match for all input workspaces. - -The output workspace is created with these dimensions and the box parameters specified above. Then the events -from each input workspace are appended to the output. - -See also: [[MergeMDFiles]], for merging when system memory is too small to keep the entire workspace in memory. - -*WIKI*/ - #include "MantidMDAlgorithms/MergeMD.h" #include "MantidKernel/Strings.h" #include "MantidGeometry/MDGeometry/IMDDimension.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/MergeMDFiles.cpp b/Code/Mantid/Framework/MDAlgorithms/src/MergeMDFiles.cpp index 27db1b038f36..e8f107bc7295 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/MergeMDFiles.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/MergeMDFiles.cpp @@ -1,21 +1,3 @@ -/*WIKI* - -This algorithm is meant to merge a large number of large MDEventWorkspaces together into one file-backed MDEventWorkspace, without exceeding available memory. - -First, you will need to generate a MDEventWorkspaces NXS file for each run with a fixed box structure: -* You can call [[CreateMDWorkspace]] with MinRecursionDepth = MaxRecursionDepth. -** This will make the box structure identical. The number of boxes will be equal to SplitInto ^ (NumDims * MaxRecursionDepth). -** Aim for the boxes to be small enough for all events contained to fit in memory; without there being so many boxes as to slow down too much. -* This can be done immediately after acquiring each run so that less processing has to be done at once. - -Then, enter the path to all of the files created previously. The algorithm avoids excessive memory use by only -keeping the events from ONE box from ALL the files in memory at once to further process and refine it. -This is why it requires a common box structure. - -See also: [[MergeMD]], for merging any MDWorkspaces in system memory (faster, but needs more memory). - -*WIKI*/ - #include "MantidAPI/FileProperty.h" #include "MantidAPI/MultipleFileProperty.h" #include "MantidKernel/CPUTimer.h" @@ -423,4 +405,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDAlgorithms - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/MinusMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/MinusMD.cpp index 77a43a30da88..fb7497403988 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/MinusMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/MinusMD.cpp @@ -1,27 +1,3 @@ -/*WIKI* -Subtract two [[MDHistoWorkspace]]'s or a MDHistoWorkspace and a scalar. - -* '''MDHistoWorkspace - MDHistoWorkspace''' -** The operation is performed element-by-element. -* '''MDHistoWorkspace - Scalar ''' -** The scalar is subtracted from every element of the MDHistoWorkspace. The squares of errors are summed. -* '''Scalar - MDHistoWorkspace''' -** This is not allowed. -* '''[[MDEventWorkspace]] - [[MDEventWorkspace]]''' -** The signal of each event on the right-hand-side is multiplied by -1 before the events are summed. -** The number of events in the output MDEventWorkspace is that of the LHS and RHS workspaces put together. -* '''[[MDEventWorkspace]] - Scalar or MDHistoWorkspace''' -** This is not possible. -*WIKI*/ -/*WIKI_USAGE* - C = A - B - C = A - 123.4 - A -= B - A -= 123.4 - -See [[MDHistoWorkspace#Arithmetic_Operations|this page]] for examples on using arithmetic operations. -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/MinusMD.h" #include "MantidKernel/System.h" #include "MantidMDEvents/MDEventFactory.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/MultiplyMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/MultiplyMD.cpp index 9f9e50992594..96dc128fee74 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/MultiplyMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/MultiplyMD.cpp @@ -1,25 +1,3 @@ -/*WIKI* -Multiply two [[MDHistoWorkspace]]'s or a MDHistoWorkspace and a scalar. - -The error of f = a * b is propagated with df^2 = f^2 * (da^2 / a^2 + db^2 / b^2) - -* '''MDHistoWorkspace * MDHistoWorkspace''' -** The operation is performed element-by-element. -* '''MDHistoWorkspace * Scalar''' or '''Scalar * MDHistoWorkspace''' -** Every element of the MDHistoWorkspace is multiplied by the scalar. -* '''[[MDEventWorkspace]]'s''' -** This operation is not supported, as it is not clear what its meaning would be. -*WIKI*/ -/*WIKI_USAGE* - C = A * B - C = A * 123.4 - A *= B - A *= 123.4 - -See [[MDHistoWorkspace#Arithmetic_Operations|this page]] for examples on using arithmetic operations. - -*WIKI_USAGE*/ - #include "MantidKernel/System.h" #include "MantidMDAlgorithms/MultiplyMD.h" #include "MantidMDEvents/MDBoxBase.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/NotMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/NotMD.cpp index 15d95490545c..c273cde63a31 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/NotMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/NotMD.cpp @@ -1,19 +1,3 @@ -/*WIKI* - -Perform the Not (negation) boolean operation on a [[MDHistoWorkspace]]. -The not operation is performed element-by-element. -Any 0.0 signal is changed to 1.0 (meaning true). -Any non-zero signal is changed to 0.0 (meaning false). - -*WIKI*/ -/*WIKI_USAGE* - B = ~A - A = ~A - -See [[MDHistoWorkspace#Boolean_Operations|this page]] for examples on using boolean operations. - -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/NotMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/OrMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/OrMD.cpp index bfdc0d683c40..f55ef19fe87c 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/OrMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/OrMD.cpp @@ -1,16 +1,3 @@ -/*WIKI* - -Perform the Or boolean operation on two MDHistoWorkspaces. -The || operation is performed element-by-element. -A signal of 0.0 means "false" and any non-zero signal is "true". -*WIKI*/ -/*WIKI_USAGE* - C = A | B - A |= B - -See [[MDHistoWorkspace#Boolean_Operations|this page]] for examples on using boolean operations. - -*WIKI_USAGE*/ #include "MantidMDAlgorithms/OrMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/PlusMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/PlusMD.cpp index 9d15b6e3667e..5c65e9c7f265 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/PlusMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/PlusMD.cpp @@ -1,38 +1,3 @@ -/*WIKI* - -This algorithm sums two [[MDHistoWorkspace]]s or merges two [[MDEventWorkspace]]s together. - -=== MDHistoWorkspaces === - -* '''MDHistoWorkspace + MDHistoWorkspace''' -** The operation is performed element-by-element. -* '''MDHistoWorkspace + Scalar''' or '''Scalar + MDHistoWorkspace''' -** The scalar is subtracted from every element of the MDHistoWorkspace. The squares of errors are summed. - -=== MDEventWorkspaces === - -This algorithm operates similary to calling Plus on two [[EventWorkspace]]s: it combines the events from the two workspaces together to form one large workspace. - -==== Note for file-backed workspaces ==== - -The algorithm uses [[CloneMDWorkspace]] to create the output workspace, except when adding in place (e.g. A = A + B ). -See [[CloneMDWorkspace]] for details, but note that a file-backed [[MDEventWorkspace]] will have its file copied. - -* If A is in memory and B is file-backed, the operation C = A + B will clone the B file-backed workspace and add A to it. -* However, the operation A = A + B will clone the A workspace and add B into memory (which might be too big!) - -Also, be aware that events added to a MDEventWorkspace are currently added '''in memory''' and are not cached to file until [[SaveMD]] -or another algorithm requiring it is called. The workspace is marked as 'requiring file update'. -*WIKI*/ -/*WIKI_USAGE* - C = A + B - C = A + 123.4 - A += B - A += 123.4 - -See [[MDHistoWorkspace#Arithmetic_Operations|this page]] for examples on using arithmetic operations. -*WIKI_USAGE*/ - #include "MantidAPI/IMDEventWorkspace.h" #include "MantidKernel/System.h" #include "MantidMDEvents/MDBoxBase.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/PowerMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/PowerMD.cpp index 69be4eaf9a3f..bc42a95d023d 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/PowerMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/PowerMD.cpp @@ -1,15 +1,3 @@ -/*WIKI* - -This executes the power function on a MDHistoWorkspace. - -The signal a becomes f = a^b - -The error da becomes df^2 = f^2 * b^2 * (da^2 / a^2) - -This algorithm cannot be run on a [[MDEventWorkspace]]. Its equivalent on a [[MatrixWorkspace]] is called [[Power]]. - -*WIKI*/ - #include "MantidMDAlgorithms/PowerMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/PreprocessDetectorsToMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/PreprocessDetectorsToMD.cpp index 9ae726296677..a90304ba00d1 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/PreprocessDetectorsToMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/PreprocessDetectorsToMD.cpp @@ -1,101 +1,3 @@ -/*WIKI* -PreprocessDetectorsToMD is helper algorithm, used to make general part of transformation from real to reciprocal space. -It is used by ConvertToMD algorithm to save time on this transformation when the algorithm used multiple times for the same instrument. -It is also should be used to calculate limits of transformation in Q-space and the detectors trajectories in Q-space. - -The result of this algorithm do in fact define an "ideal instrument", which is used to convert experimental data into the reciprocal space. -Additional purpose of '''PreprocessDetectorsToMD''' is to return these data in the form, which can be easy extracted, observed and modified -to see and check all corrections done to the real instrument before starting transformation from the experiment's(instrument) space to the -target physical space. - -== Output Table Workspace Description == - -Table workspace obtained from the algorithm is the table workspace with properties, containing the following information: - - -{| border="1" cellpadding="5" cellspacing="0" -!Column Name -!Type -!Present -!Description -|- -|DetDirections -|V3D -|Always -|Unit vectors pointing from sample to detector's positions -|- -|L2 -|double -|Always -|Sample-detector distances -|- -|TwoTheta -|double -|Always -|Sampe-detector polar angle (2''θ'', diffraction angle) -|- -|Azimuthal -|double -|Always -|Sampe-detector azimuthal angle -|- -|DetectorID -|int32_t -|Always -|The unique ID specific to the detector or group of detectors. -|- -|detIDMap -|size_t -|Always -|Spectra index which corresponds to a valid detector index. ''detIDMap[liveDetectorsCount]= WorkspaceIndex''; -|- -|spec2detMap -|size_t -|Always -|The detector's index corresponding to the workspace index. It is the value used to match the spectra obtained from the workspace to the values of detector's parameters defined in this table. ''spec2detMap[WorkspaceIndex]= liveDetectorsCount''; -|- -|detMask -|int -|if GetMaskState==true -|The vector containing 1 for masked spectra and 0 for not masked. This is temporary solution necessary until Mantid masks signal by 0 rather then NaN -|- -|eFixed -|float -|if GetEFixed==true -|Input energy on a detector from Indirect instrument, copied value of '''Ei''' or '''eFixed''' property on other instruments or NaN if nothing is defined -|} - - -The workspace also has the following properties attached to it: -{| border="1" cellpadding="5" cellspacing="0" -!Property Name -!Type -!Description -|- -|InstrumentName -|string -|The name which should uniquely identify current instrument -|- -|L1 -|double -|L1 is the source to sample distance -|- -|Ei -|double -|Incident energy for Direct or Crystal-Analyser energy for Indirect instruments copied from '''Ei''' (first) or '''eFixed''' (if '''Ei''' is undefined) property of the input workspace. '''NaN''' if no energy property is found. -|- -|ActualDetectorsNum -|uint32_t -|The actual number of detectors receiving signal (This is the number of instrument's detectors minus monitors and masked detectors) -|- -|FakeDetectors -|bool. -|Usually false and specifies if the detectors were actually processed for real instrument or generated for some fake one when the detector information has been lost. The detector information considered lost when the input matrix workspace has numeric Y-axis. -|- -|} - - -*WIKI*/ #include "MantidMDAlgorithms/PreprocessDetectorsToMD.h" #include "MantidKernel/CompositeValidator.h" #include "MantidKernel/PropertyWithValue.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/Quantification/FitResolutionConvolvedModel.cpp b/Code/Mantid/Framework/MDAlgorithms/src/Quantification/FitResolutionConvolvedModel.cpp index e7fe3f2325c7..177bcdc62809 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/Quantification/FitResolutionConvolvedModel.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/Quantification/FitResolutionConvolvedModel.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Fits a dataset using a resolution function convolved with a foreground model -*WIKI*/ - #include "MantidMDAlgorithms/Quantification/FitResolutionConvolvedModel.h" #include "MantidAPI/IMDEventWorkspace.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/Quantification/SimulateResolutionConvolvedModel.cpp b/Code/Mantid/Framework/MDAlgorithms/src/Quantification/SimulateResolutionConvolvedModel.cpp index 2f0f643fa623..cb720f0d99ce 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/Quantification/SimulateResolutionConvolvedModel.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/Quantification/SimulateResolutionConvolvedModel.cpp @@ -1,8 +1,3 @@ -/*WIKI* -Runs a simulation of a model with a selected resolution function. - -*WIKI*/ - #include "MantidMDAlgorithms/Quantification/SimulateResolutionConvolvedModel.h" #include "MantidAPI/IMDEventWorkspace.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/SaveMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/SaveMD.cpp index f1e6bbb4a68f..606baa9cca6c 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/SaveMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/SaveMD.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -Save a [[MDEventWorkspace]] to a .nxs file. The workspace's current box structure and entire list of events is preserved. -The resulting file can be loaded via [[LoadMD]]. - -If you specify MakeFileBacked, then this will turn an in-memory workspace to a file-backed one. Memory will be released as it is written to disk. - -If you specify UpdateFileBackEnd, then any changes (e.g. events added using the PlusMD algorithm) will be saved to the file back-end. - -*WIKI*/ - #include "MantidAPI/CoordTransform.h" #include "MantidAPI/FileProperty.h" #include "MantidAPI/IMDEventWorkspace.h" @@ -329,4 +318,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/SaveZODS.cpp b/Code/Mantid/Framework/MDAlgorithms/src/SaveZODS.cpp index cac4e2f46298..886396c4ce5f 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/SaveZODS.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/SaveZODS.cpp @@ -1,35 +1,3 @@ -/*WIKI* - -Saves a HDF5 file to the ZODS (Zurich Oak Ridge Disorder Simulation program) format. -This format consists of a slice of a [[MDHistoWorkspace]] and some information about its location. - -'''You must be in HKL space for the output of this algorithm to make sense!''' - -From http://www.crystal.mat.ethz.ch/research/DiffuseXrayScattering: -* In the frame of an international cooperation between our group, the University of Zurich and Oak Ridge National Laboratories, we are further developing Monte Carlo simulation techniques for modeling disordered crystal structures. A major goal of this project is to develop the Monte Carlo simulation computer program ZODS (Zurich Oak Ridge Disorder Simulation program), which is designed to be not only user friendly, but also fast and flexible. Special focus is on the efficient use of modern super-computer architectures and of multi-core desktop computers to take full advantage of current trends in computing technologies. - -==== Summary of data format ==== - -In general it contains collection of grids with intensities and each grid is described by specifying origin, size of grid (in each direction) and grid base vectors (a1,a2,a3) so a point at node (i,j,k) of grid has coordinates r = origin+i*a1+j*a2+k*a3. - -Please contact Michal Chodkiewicz (michal.chodkiewicz@gmail.com); Vickie Lynch (vel@ornl.gov) for more details. - -==== Description of data fields ==== - -* The CoordinateSystem data object has the attribute "isLocal". -** If '''isLocal'''=1, then we are in HKL space: -*** The '''direction_1''' vector (0.04,0,0) represents a step of 0.04 in the (1,0,0) direction (a*) in reciprocal space. -*** '''This is currently the only mode in which SaveZODS saves'''. -** If '''isLocal'''=0, then we are in Q-space. -*** The '''direction_1''' vector (0.04,0,0) represents a step of 0.04 Angstrom^(-1) in X direction of Cartesian coordinate system (with X colinear with a and Z with c*) -*** In this case CoordinateSystem has additional attribute UnitCell, which is a vector with 6 components (a,b,c,alpha,beta,gamma) a,b,c in angstroms and angles in degrees. -* The '''origin''' field gives the origin of the center of the (0,0,0) cell; in HKL space for our case of isLocal=1. -* The '''size''' field gives the number of bins in each direction. -* The '''data''' field contains the actual intensity at each bin. -** The grid of points (r = origin+i*a1+j*a2+k*a3) specifies the centers of histogram, not the corners. - -*WIKI*/ - #include "MantidAPI/FileProperty.h" #include "MantidAPI/IMDHistoWorkspace.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/SetMDUsingMask.cpp b/Code/Mantid/Framework/MDAlgorithms/src/SetMDUsingMask.cpp index f141c351d541..25365e92b9bb 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/SetMDUsingMask.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/SetMDUsingMask.cpp @@ -1,25 +1,3 @@ -/*WIKI* - -This algorithm is used to replace values in a [[MDHistoWorkspace]] but only at particular points. - -A mask MDHistoWorkspace is provided, where non-zero values indicate 'true'. -At these points, the corresponding value in the ValueWorkspace will be set. -Any 'false' points in the MaskWorkspace are skipped. - -If ValueWorkspace is not specified, the you must specify Value, which is a a simple number to set. - -In matlab, the equivalent function call would be WS[mask] = OtherWS[mask] - -See [[MDHistoWorkspace#Boolean_Operations| this page on boolean operations]] for examples of how to create a mask. - -== Usage (Python) == - - # This will zero-out any values below the threshold of 123 - MaskWS = WS < 123 - ModifiedWS = SetMDUsingMask(InputWorkspace=WS, Value="0", MaskWorkspace=MaskWS) - -*WIKI*/ - #include "MantidMDAlgorithms/SetMDUsingMask.h" #include "MantidKernel/System.h" #include "MantidAPI/IMDWorkspace.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/SliceMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/SliceMD.cpp index aa912daec1db..10f8a2415c9a 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/SliceMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/SliceMD.cpp @@ -1,48 +1,3 @@ -/*WIKI* -Algorithm that can take a slice out of an original [[MDEventWorkspace]] while preserving all the events contained therein. - -It uses the same parameters as [[BinMD]] to determine a transformation to make from input->output workspace. -The difference is that [[BinMD]] sums events in a regular grid whereas SliceMD moves the events into the output workspace, -which boxes itself. - -Please see [[BinMD]] for a detailed description of the parameters. - -=== Axis-Aligned Slice === - -Events outside the range of the slice are dropped. The new output -MDEventWorkspace's dimensions only extend as far as the limit specified. - -=== Non-Axis-Aligned Slice === - -The coordinates of each event are transformed according to the new basis vectors, -and placed in the output MDEventWorkspace. The dimensions of the output workspace -are along the basis vectors specified. - -=== Splitting Parameters === - -The '''OutputBins''' parameter is interpreted as the "SplitInto" parameter for each dimension. -For instance, if you want the output workspace to split in 2x2x2, -you would specify OutputBins="2,2,2". - -For 1D slices, it may make sense to specify a SplitInto parameter of 1 in every other dimension - that way, boxes -will only be split along the 1D direction. - -=== Slicing a MDHistoWorkspace === - -It is possible to slice a [[MDHistoWorkspace]]. -Each MDHistoWorkspace holds a reference to the [[MDEventWorkspace]] that created it, -as well as the coordinate transformation that was used. - -In this case, the algorithm is executed on the original MDEventWorkspace, in the -proper coordinates. Perhaps surprisingly, the output of SliceMD on a MDHistoWorkspace is a -MDEventWorkspace! - -Only the non-axis aligned slice method can be performed on a MDHistoWorkspace! -Of course, your basis vectors can be aligned with the dimensions, which is equivalent. - - -*WIKI*/ - #include "MantidAPI/IMDEventWorkspace.h" #include "MantidKernel/System.h" #include "MantidMDEvents/MDEventFactory.h" @@ -380,4 +335,3 @@ namespace MDAlgorithms } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDAlgorithms/src/Stitch1DMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/Stitch1DMD.cpp index f4368e62d44a..d4facda66b47 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/Stitch1DMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/Stitch1DMD.cpp @@ -1,11 +1,3 @@ -/*WIKI* -Performs 1D stitching of Reflectometry 2D MDHistoWorkspaces. Based on the Quick script developed at ISIS. This only works on 1D Histogrammed MD Workspaces. - -Scales either the LHS or RHS workspace by some scale factor which, can be manually specified, or calculated from the overlap. - -Calculates the weighted mean values in the overlap region and then combines the overlap region with the difference of the LHS and RHS workspaces -*WIKI*/ - #include "MantidMDAlgorithms/Stitch1DMD.h" #include "MantidAPI/WorkspaceProperty.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ThresholdMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ThresholdMD.cpp index 2b6005952938..c990fb71d22a 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ThresholdMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ThresholdMD.cpp @@ -1,9 +1,3 @@ -/*WIKI* - -Threshold an MDHistoWorkspace to overwrite values below or above the defined threshold. - -*WIKI*/ - #include "MantidMDAlgorithms/ThresholdMD.h" #include "MantidAPI/WorkspaceProperty.h" #include "MantidMDEvents/MDHistoWorkspace.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/TransformMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/TransformMD.cpp index 16c3a1a3087e..52cd3aedf0c8 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/TransformMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/TransformMD.cpp @@ -1,36 +1,3 @@ -/*WIKI* - -This algorithm applies a simple linear transformation to a [[MDWorkspace]] or [[MDHistoWorkspace]]. -This could be used, for example, to scale the Energy dimension to different units. - -Each coordinate is tranformed so that - x'_d = (x_d * s_d) + o_d -where: -* d : index of the dimension, from 0 to the number of dimensions -* s : value of the Scaling parameter -* o : value of the Offset parameter. - -You can specify either a single value for Scaling and Offset, in which case the -same m_scaling or m_offset are applied to each dimension; or you can specify a list -with one entry for each dimension. - -==== Notes ==== - -The relationship between the workspace and the original [[MDWorkspace]], -for example when the MDHistoWorkspace is the result of [[BinMD]], is lost. -This means that you cannot re-bin a transformed [[MDHistoWorkspace]]. - -No units are not modified by this algorithm. - -==== Performance Notes ==== - -* Performing the operation in-place (input=output) is always faster because the first step of the algorithm if NOT in-place is to clone the original workspace. -* For [[MDHistoWorkspace]]s done in-place, TransformMD is very quick (no data is modified, just the coordinates). -* For [[MDWorkspace]]s, every event's coordinates gets modified, so this may take a while for large workspaces. -* For file-backed [[MDWorkspace]]s, you will find much better performance if you perform the change in-place (input=output), because the data gets written out to disk twice otherwise. - -*WIKI*/ - #include "MantidMDAlgorithms/TransformMD.h" #include "MantidKernel/System.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/MDAlgorithms/src/WeightedMeanMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/WeightedMeanMD.cpp index 0e567cee2de3..85f6ee8eebf9 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/WeightedMeanMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/WeightedMeanMD.cpp @@ -1,44 +1,3 @@ -/*WIKI* - -Takes two MDHistoWorkspaces and calculates the weighted mean for each bin. See [[WeightedMean]] for more details on the algorithm workings. Both inputs must be MDHistoWorkspaces, the algorithm will not run with MDEventWorkspaces. - -*WIKI*/ -/*WIKI_USAGE* -The following utilises [[WeightedMean]] and [[WeightedMeanMD]] to inspect the same data. - - import math - - # Create some input arrays data - pi = 3.14 - s1 = [] - e1 = [] - s2 = [] - e2 = [] - extents = [0,40] - x = range(extents[0], extents[1]) - theta_shift=0.4 - for i in x : - theta = 0.02 * i * pi - s1.append(math.sin(theta)) - e1.append(math.sin(theta)) - s2.append(math.sin(theta+theta_shift)) - e2.append(math.sin(theta+theta_shift)) - - # Create Matrix workspaces from input arrrays - matrix_1 =CreateWorkspace(DataX=x, DataE=e1, NSpec=1,DataY=s1) - matrix_2 =CreateWorkspace(DataX=x, DataE=e2, NSpec=1,DataY=s2) - # Create MD workspaces from input arrays - md_1 =CreateMDHistoWorkspace(Dimensionality=1,SignalInput=s1,ErrorInput=e1,NumberOfBins=[len(x)],Extents=extents,Names="v",Units="t") - md_2 =CreateMDHistoWorkspace(Dimensionality=1,SignalInput=s2,ErrorInput=e2,NumberOfBins=[len(x)],Extents=extents,Names="v",Units="t") - - # Produce the weighted mean as a matrix workspace. - mean = WeightedMean(InputWorkspace1=matrix_1, InputWorkspace2=matrix_2) - - # Produce the weithed mean as a 1D MD workspace. Contents sould be identical to the output created above. - mean_md = WeightedMeanMD(LHSWorkspace=md_1,RHSWorkspace=md_2) - -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/WeightedMeanMD.h" #include "MantidMDEvents/MDHistoWorkspaceIterator.h" #include "MantidKernel/System.h" @@ -145,4 +104,4 @@ namespace MDAlgorithms } // namespace Mantid -} // namespace MDAlgorithms \ No newline at end of file +} // namespace MDAlgorithms diff --git a/Code/Mantid/Framework/MDAlgorithms/src/XorMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/XorMD.cpp index e86070f00774..c4eb9afe7cc2 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/XorMD.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/XorMD.cpp @@ -1,18 +1,3 @@ -/*WIKI* - -Perform the Xor (exclusive-or) boolean operation on two MDHistoWorkspaces. -The xor operation is performed element-by-element. -A signal of 0.0 means "false" and any non-zero signal is "true". - -*WIKI*/ -/*WIKI_USAGE* - C = A ^ B - A ^= B - -See [[MDHistoWorkspace#Boolean_Operations|this page]] for examples on using boolean operations. - -*WIKI_USAGE*/ - #include "MantidMDAlgorithms/XorMD.h" #include "MantidKernel/System.h" diff --git a/Code/Mantid/Framework/MDEvents/src/ConvertToReflectometryQ.cpp b/Code/Mantid/Framework/MDEvents/src/ConvertToReflectometryQ.cpp index 6d4b4d978f47..c8b590ec073a 100644 --- a/Code/Mantid/Framework/MDEvents/src/ConvertToReflectometryQ.cpp +++ b/Code/Mantid/Framework/MDEvents/src/ConvertToReflectometryQ.cpp @@ -1,33 +1,3 @@ -/*WIKI* -=== Prerequisites === - -The workspace spectrum axis should be converted to signed_theta using [[ConvertSpectrumAxis]] and the x axis should be converted to Wavelength using [[ConvertUnits]] before running this algorithm. Histogram input workspaces are expected. - -The algorithm will looks for a specific log value called ''stheta'', which contains the incident theta angle theta_i. If the input workspace does not contain this value, or if you wish to override this value you can do so by providing your own ''IncidentTheta'' property and enabling ''OverrideIncidentTheta''. - -=== Transformations === -Output workspaces are always 2D MD Histogram workspaces, but the algorithm will perform one of three possible transformations. - -* Convert to Q_x, Q_z -* Convert to K_i, K_f -* Convert to P_i-P_f, P_i+P_f. Note that P and K are interchangeable. - -where - -Q_x = \frac{2\pi}{\lambda}(sin\theta_f + sin\theta_i) - -Q_z = \frac{2\pi}{\lambda}(cos\theta_f - cos\theta_i) - -K_i = \frac{2\pi}{\lambda}sin\theta_i - -K_f = \frac{2\pi}{\lambda}sin\theta_f - -{{AlgorithmLinks|ConvertToReflectometryQ}} - -=== After Transformation === -You will usually want to rebin using [[BinMD]] or [[SliceMD]] after transformation because the output workspaces are not regularly binned. -*WIKI*/ - #include "MantidAPI/WorkspaceValidators.h" #include "MantidMDEvents/ConvertToReflectometryQ.h" #include "MantidDataObjects/EventWorkspace.h" diff --git a/Code/Mantid/Framework/MDEvents/src/ImportMDEventWorkspace.cpp b/Code/Mantid/Framework/MDEvents/src/ImportMDEventWorkspace.cpp index ced64e6ece54..fe008e9f07cc 100644 --- a/Code/Mantid/Framework/MDEvents/src/ImportMDEventWorkspace.cpp +++ b/Code/Mantid/Framework/MDEvents/src/ImportMDEventWorkspace.cpp @@ -1,95 +1,3 @@ -/*WIKI* -Creates an MDEventWorkspace from a plain ASCII file. Uses a simple format for the file described below. This algorithm is suitable for importing small volumes of data only. This algorithm does not scale well for large input workspaces. The purpose of this algorithm is to allow users to quickly import data from existing applications for purposes of comparison. - -== Format == - -The file must contain a '''DIMENSIONS''' section listing the dimensionality of the workspace. Each input line is taken as a new dimension after the '''DIMENSIONS''' flag, and before the '''MDEVENTS''' flag. Input arguments must be separated by a space or tab. They are provided in the order Name, ID, Units, NumberOfBins. See the Usage examples below. - -The file must contain a '''MDEVENTS''' flag after the '''DIMENSIONS''' flag. Again, inputs are separated by a space or tab, each line represents a unique MDEvent. There must be either NDims + 2 or NDims + 4 columns in this section. If there are NDims + 2, columns, then ''Lean'' MDEvents will be used (Signal, Error and Dimensionality only). If there are NDims + 4 columns, then ''Full'' MDEvents will be used (Signal, Error, RunNo, DetectorId and Dimensionality). If you have provided NDims + 2 columns, then each row is interpreted as follows: - - Signal Error {Dimensionality} - -where the Dimensionality is an array of coordinates in each of the dimensions listed in the '''DIMENSIONS''' section, and in that order. IF there are NDims + 4 columns, then ''Full'' MDEvents will be used. Each row is interpreted as follows: - - Signal Error RunNumber DetectorId {Dimensionality} - -The usage example below shows demo files with both of these formats. - -Comments are denoted by lines starting with '''#'''. There is no multi-line comment. - -== Alternatives == -Other alternatives to importing/creating MDWorkspaces are [[ImportMDHistoWorkspace]], [[CreateMDHistoWorkspace]] and [[CreateMDWorkspace]] - - -*WIKI*/ -/*WIKI_USAGE* -The following example creates a 2D MDEventWorkspace called ''demo'' with 10 * 2 bins. - - - ImportMDEventWorkspace(Filename=r'demo.txt',OutputWorkspace='demo') - -demo.txt looks like: - - # MANDATORY BLOCK. Dimensions are written in the format Id, Name, Units, number of bins - DIMENSIONS - a A U 10 - b B U 2 - # MANDATORY BLOCK. Events are written in the format Signal, Error, DetectorId, RunId, coord1, coord2, ... to end of coords - # or Signal, Error, coord1, coord2, ... to end of coords - MDEVENTS - 1.0 2.90 -1.0 -1 - 1.1 2.80 -0.9 -1 - 1.2 2.70 -0.8 -1 - 1.3 2.60 -0.7 -1 - 1.4 2.50 -0.6 -1 - 1.5 2.40 -0.5 -1 - 1.6 2.30 -0.4 -1 - 1.7 2.20 -0.3 -1 - 1.8 2.10 -0.2 -1 - 1.9 2.00 -0.1 -1 - 2.0 1.80 -1.0 1 - 2.1 1.70 -0.9 1 - 2.2 1.60 -0.8 1 - 2.3 1.50 -0.7 1 - 2.4 1.40 -0.6 1 - 2.5 1.30 -0.5 1 - 2.6 1.20 -0.4 1 - 2.7 1.10 -0.3 1 - 2.8 1.00 -0.2 1 - 2.9 0.90 -0.1 1 - -The equivalent with run numbers and detector ids specified is: - - - # MANDATORY BLOCK. Dimensions are written in the format Id, Name, Units, number of bins - DIMENSIONS - a A U 10 - b B U 2 - # MANDATORY BLOCK. Events are written in the format Signal, Error, DetectorId, RunId, coord1, coord2, ... to end of coords - # or Signal, Error, RunNumber, DetectorId, coord1, coord2, ... to end of coords - MDEVENTS - 1.0 2.90 1 1 -1.0 -1 - 1.1 2.80 1 2 -0.9 -1 - 1.2 2.70 1 3 -0.8 -1 - 1.3 2.60 1 4 -0.7 -1 - 1.4 2.50 1 5 -0.6 -1 - 1.5 2.40 1 6 -0.5 -1 - 1.6 2.30 1 7 -0.4 -1 - 1.7 2.20 1 8 -0.3 -1 - 1.8 2.10 1 9 -0.2 -1 - 1.9 2.00 1 10 -0.1 -1 - 2.0 1.80 1 12 -1.0 1 - 2.1 1.70 1 13 -0.9 1 - 2.2 1.60 1 14 -0.8 1 - 2.3 1.50 1 15 -0.7 1 - 2.4 1.40 1 16 -0.6 1 - 2.5 1.30 1 17 -0.5 1 - 2.6 1.20 1 18 -0.4 1 - 2.7 1.10 1 19 -0.3 1 - 2.8 1.00 1 20 -0.2 1 - 2.9 0.90 1 20 -0.1 1 -*WIKI_USAGE*/ - #include "MantidMDEvents/ImportMDEventWorkspace.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/MDEvents/src/ImportMDHistoWorkspace.cpp b/Code/Mantid/Framework/MDEvents/src/ImportMDHistoWorkspace.cpp index cf24e090740f..53d0175bed5b 100644 --- a/Code/Mantid/Framework/MDEvents/src/ImportMDHistoWorkspace.cpp +++ b/Code/Mantid/Framework/MDEvents/src/ImportMDHistoWorkspace.cpp @@ -1,40 +1,3 @@ -/*WIKI* - - -This algorithm takes a text file (.txt extension) containing two columns and converts it into an MDHistoWorkspace. - -=== Details === - -The columns are in the order '''signal''' then '''error'''. The file must only contain two columns, these may be separated by any whitespace character. The algorithm expects there to be 2*product(nbins in each dimension) entries in this file. So if you have set the dimensionality to be ''4,4,4'' then you will need to provide 64 rows of data, in 2 columns or 124 floating point entries. - -The Names, Units, Extents and NumberOfBins inputs are all linked by the order they are provided in. For example, if you provide Names ''A, B, C'' and Units ''U1, U2, U3'' then the dimension ''A'' will have units ''U1''. - -Signal and Error inputs are read in such that, the first entries in the file will be entered across the first dimension specified, and the zeroth index in the other dimensions. The second set of entries will be entered across the first dimension and the 1st index in the second dimension, and the zeroth index in the others. - -== Alternatives == -A very similar algorithm to this is [[CreateMDHistoWorkspace]], which takes it's input signal and error values from arrays rather than a text file. Another alternative is to use [[ConvertToMD]] which works on MatrixWorkspaces, and allows log values to be included in the dimensionality. - - -*WIKI*/ -/*WIKI_USAGE* -The following call will create an MDHistoWorkspace called ''demo'' with 3 dimensions with 2 bins in each dimension. Each dimension will -span from -1 to 1 in units of T. - - ImportMDHistoWorkspace(Filename='demo.txt',Dimensionality='3',Extents='-1,1,-1,1,-1,1',NumberOfBins='2,2,2',Names='A,B,C',Units='T,T,T',OutputWorkspace='demo') - - -And here's the corresponding contents of ''demo.txt'': - - 1 1.1 - 2 2.1 - 3 3.1 - 4 4.1 - 5 5.1 - 6 6.1 - 7 7.1 - 8 8.1 -*WIKI_USAGE*/ - #include "MantidMDEvents/ImportMDHistoWorkspace.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/MDEvents/src/ImportMDHistoWorkspaceBase.cpp b/Code/Mantid/Framework/MDEvents/src/ImportMDHistoWorkspaceBase.cpp index c6c8a3e22d35..dcd0dc6f4843 100644 --- a/Code/Mantid/Framework/MDEvents/src/ImportMDHistoWorkspaceBase.cpp +++ b/Code/Mantid/Framework/MDEvents/src/ImportMDHistoWorkspaceBase.cpp @@ -1,7 +1,3 @@ -/*WIKI* -TODO: Enter a full wiki-markup description of your algorithm here. You can then use the Build/wiki_maker.py script to generate your full wiki page. -*WIKI*/ - #include "MantidMDEvents/ImportMDHistoWorkspaceBase.h" #include "MantidMDEvents/MDHistoWorkspace.h" #include "MantidKernel/CompositeValidator.h" @@ -120,4 +116,4 @@ namespace MDEvents } // namespace Mantid -} // namespace MDEvents \ No newline at end of file +} // namespace MDEvents diff --git a/Code/Mantid/Framework/MDEvents/src/IntegrateEllipsoids.cpp b/Code/Mantid/Framework/MDEvents/src/IntegrateEllipsoids.cpp index 767ccda0085c..47a7733c3841 100644 --- a/Code/Mantid/Framework/MDEvents/src/IntegrateEllipsoids.cpp +++ b/Code/Mantid/Framework/MDEvents/src/IntegrateEllipsoids.cpp @@ -1,89 +1,3 @@ -/*WIKI* - -=== Overview === - -This algorithm will integrate disjoint single crystal Bragg peaks by summing the number -of raw events in a 3D ellipsoidal peak region in reciprocal space and subtracting an -estimate of the background obtained from an ellipsoidal shell. In some ways it is -similar to the IntegratePeaksMD algorithm, and it would be useful to also see the -documentation for that algorithm. In particular the size parameters to this algorithm -are also specified in inverse Angstroms and the background subtraction is done in -the same way for both the intensity and the estimated standard deviations. However, -this algorithm differs from IntegratePeaksMD in several critical ways. - -* This algorithm counts raw, un-weighted events while IntegratePeaksMD uses weighted events. -* This algorithm uses 3D ellipsoidal regions with aspect ratios that are adapted to the set of events that are near the peak center, while IntegratePeaksMD uses spherical regions. -* This algorithm includes an option to automatically choose the size of the ellipsoidal regions based on the statistics of the set of events near the peak. -* This algorithm only applies to peaks with integral HKL values and as currently implemented it cannot be used to integrate ellipsoidal regions at other locations in reciprocal space. - -The algorithm calculates the three principal axes of the events near a peak, and -uses the standard deviations in the directions of the principal axes to determine -the aspect ratio of ellipsoids used for the peak and background regions. - -=== Explanation of Inputs === - -* The event data to be integrated is obtained from an ordinary EventWorkspace with an X-axis in time-of-flight, as loaded from a NeXus event file. This algorithm maps the events to reciprocal space. - -* The peaks to be integrated are obtained from a PeaksWorkspace. The peaks must be indexed, and any peaks indexed as (0,0,0) will be ignored. The HKL values for valid peaks should all be integers, to make this check for unindexed peaks reliable. - -* Only events that are near a peak are considered when constructing the ellipsoids. The RegionRadius specifies the maximum distance from the peak center to an event in reciprocal space, for that event to used. See the figure below. Also, each event will be counted for at most one peak, the one with the nearest HKL value. The RegionRadius should be specified to be just slightly larger than the expected peak region to avoid overlap with other peaks, and to avoid including excessive background. As the size of the RegionRadius increases, the ellipsoids will become more spherical and less well adapted to the actual shape of the peak. - -[[File:IntegrateEllipsoids.png]] - -* If the SpecifySize option is selected, then the user MUST specify the PeakSize, BackgroundInnerSize and BackgroundOuterSize. In this mode, the algorithm is similar to the IntegratePeaksMD algorithm. As shown in the figure, these values determine the length of the major axis for the ellipsoidal peak region, and of the inner and outer ellipsoids bounding the background region. The same major axis lengths are used for all peaks, but the lengths of the other two axes of the ellipsoids are adjusted based on the standard deviations of the events in those directions. If SpecifySize is false, then the major axis length for each peak will be set to include a range of plus or minus three times the standard deviation of the events in that direction. That is, PeakSize is set to three times the standard deviation in the direction of the first principal axis. Also, in this case the BackgroundInnerSize is set to the PeakSize and the BackgroundOuterSize is set so that the background ellipsoidal shell has the same volume as the peak ellipsoidal region. If specified by the user, these parameters must be ordered correctly with: 0 < PeakSize \leq BackgroundInnerSize < BackgroundOuterSize \leq RegionRadius - -* The integrated intensities will be set in the specified OutputWorkspace. If this is different from the input PeaksWorkspace, the input peaks workspace will be copied to the OutputWorkspace before setting the integrated intensities. - -=== Detailed Algorithm Description === - -This algorithm will integrate a list of indexed single-crystal diffraction peaks from a -PeaksWorkspace, using events from an EventWorkspace. The indexed peaks are first -used to determine a UB matrix. The inverse of that UB matrix is then used to form -lists of events that are close to peaks in reciprocal space. An event will be added -to the list of events for a peak provided that the fractional h,k,l value of that -event (obtained by applying UB-inverse to the Q-vector) is closer to the h,k,l of that -peak, than to the h,k,l of any other peak AND the Q-vector for that event is within -the specified radius of the Q-vector for that peak. - -When the lists of events near the peaks have been built, the three principal axes of -the set of events near each peak are found, and the standard deviations of the -projections of the events on each of the three principal axes are calculated. The -principal axes and standard deviations for the events around a peak in the directions -of the principal axes are used to determine an ellipsoidal region for the peak and an -ellipsoidal shell region for the background. The number of events in the peak -ellipsoid and background ellipsoidal shell are counted and used to determine the net -integrated intensity of the peak. - -The ellipsoidal regions used for the peak and background can be obtained in two ways. -First, the user may specify the size of the peak ellipsoid and the inner and outer -size of the background ellipsoid. If these are specified, the values will be used -for half the length of the major axis of an ellipsoid centered on the peak. The -major axis is in the direction of the principal axis for which the standard deviation -in that direction is largest. The other two axes for the ellipsoid are in the -direction of the other two principal axes and are scaled relative to the major axes -in proportion to their standard deviations. For example if the standard deviations -in the direction of the other two princial axes are .8 and .7 times the standard -deviation in the direction of the major axis, then the ellipse will extend only .8 -and .7 times as far in the direction of those axes, as in the direction of the major -axis. Overall, the user specified sizes for the PeakSize, BackgroundInnerSize and -BackgroundOuterSize are similar to the PeakRadius, BackgroundInnerRadius and -BackgrounOuterRadius for the IntegratePeaksMD algorithm. The difference is that -the regions used in this algorithm are not spherical, but are ellipsoidal with axis -directions obtained from the principal axes of the events near a peak and the -ellipsoid shape (relative axis lengths) is determined by the standard deviations in -the directions of the principal axes. - -Second, if the user does not specifiy the size of the peak and background ellipsoids, -then the three axes of the peak ellipsoid are again set to the principal axes of the -set of nearby events but in this case their axis lengths are set to cover a range of -plus or minus three standard deviations in the axis directions. In this case, the -background ellipsoidal shell is chosen to have the same volume as the peak ellipsoid -and it's inner surface is the outer surface of the peak ellipsoid. The outer surface -of the background ellipsoidal shell is an ellipsoidal surface with the same relative -axis lengths as the inner surface. - -*WIKI*/ - #include #include #include diff --git a/Code/Mantid/Framework/MDEvents/src/OneStepMDEW.cpp b/Code/Mantid/Framework/MDEvents/src/OneStepMDEW.cpp index c0a45f377244..1f6eab79cd1a 100644 --- a/Code/Mantid/Framework/MDEvents/src/OneStepMDEW.cpp +++ b/Code/Mantid/Framework/MDEvents/src/OneStepMDEW.cpp @@ -1,14 +1,3 @@ -/*WIKI* - - -This algorithm is used in the Paraview event nexus loader to both load an event nexus file and convert it into a [[MDEventWorkspace]] for use in visualization. - -The [[LoadEventNexus]] algorithm is called with default parameters to load into an [[EventWorkspace]]. - -After, the [[MakeDiffractionMDEventWorkspace]] algorithm is called with the new EventWorkspace as input. The parameters are set to convert to Q in the lab frame, with Lorentz correction, and default size/splitting behavior parameters. - - -*WIKI*/ #include "MantidMDEvents/OneStepMDEW.h" #include "MantidKernel/System.h" #include "MantidAPI/FileProperty.h" @@ -90,4 +79,3 @@ namespace Mantid } // namespace Mantid } // namespace MDEvents - diff --git a/Code/Mantid/Framework/MDEvents/src/QueryMDWorkspace.cpp b/Code/Mantid/Framework/MDEvents/src/QueryMDWorkspace.cpp index 7de863ea016b..27cb859a277a 100644 --- a/Code/Mantid/Framework/MDEvents/src/QueryMDWorkspace.cpp +++ b/Code/Mantid/Framework/MDEvents/src/QueryMDWorkspace.cpp @@ -1,16 +1,3 @@ -/*WIKI* - -This algorithm outputs a table workspace containing summary data about each box within an IMDWorkspace. -The table workspace can be used as a basis for plotting within MantidPlot. - -== Format == -* Column 1: Signal (double) -* Column 2: Error (double) -* Column 3: Number of Events (integer) -* Column 4: Coords of box center (string) - -*WIKI*/ - #include "MantidMDEvents/QueryMDWorkspace.h" #include "MantidKernel/System.h" #include "MantidAPI/IMDEventWorkspace.h" diff --git a/Code/Mantid/Framework/MDEvents/src/SaveIsawQvector.cpp b/Code/Mantid/Framework/MDEvents/src/SaveIsawQvector.cpp index 81074b923d69..eb2cdca329a9 100644 --- a/Code/Mantid/Framework/MDEvents/src/SaveIsawQvector.cpp +++ b/Code/Mantid/Framework/MDEvents/src/SaveIsawQvector.cpp @@ -1,7 +1,3 @@ -/*WIKI* -This takes an unprocessed event workspace and writes out a file where each event has the (Q_x, Q_y, Q_z) as a set of 32-bit floats. -*WIKI*/ - #include #include #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/MPIAlgorithms/src/GatherWorkspaces.cpp b/Code/Mantid/Framework/MPIAlgorithms/src/GatherWorkspaces.cpp index fa98f75bb076..d4b80364b5c8 100644 --- a/Code/Mantid/Framework/MPIAlgorithms/src/GatherWorkspaces.cpp +++ b/Code/Mantid/Framework/MPIAlgorithms/src/GatherWorkspaces.cpp @@ -1,10 +1,3 @@ -/*WIKI* - - -Gathers workspaces from all processors of MPI run. Add or append workspaces to processor 0. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/PythonInterface/mantid/api/src/Algorithms/RunPythonScript.cpp b/Code/Mantid/Framework/PythonInterface/mantid/api/src/Algorithms/RunPythonScript.cpp index 3ae065d092ff..c15bd4e9b70e 100644 --- a/Code/Mantid/Framework/PythonInterface/mantid/api/src/Algorithms/RunPythonScript.cpp +++ b/Code/Mantid/Framework/PythonInterface/mantid/api/src/Algorithms/RunPythonScript.cpp @@ -1,12 +1,3 @@ -/*WIKI* -Algorithm that will run a snippet of python code. -This is meant to be used by [[LoadLiveData]] to perform some processing. - -The input & output workspaces can be accessed from the Python code using the variable -names 'input' & 'output' respectively. - -*WIKI*/ - #include "MantidPythonInterface/api/Algorithms/RunPythonScript.h" #include "MantidPythonInterface/kernel/Environment/ErrorHandling.h" #include "MantidPythonInterface/kernel/Environment/Threading.h" diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/BASISReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/BASISReduction.py index 7e5a7512a811..0ae72a8d6730 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/BASISReduction.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/BASISReduction.py @@ -1,17 +1,3 @@ -"""*WIKI* - -This algorithm is meant to temporarily deal with letting BASIS reduce lots -of files via Mantid. The syntax for the run number designation will allow -groups of runs to be joined. Examples: - -1. 2144-2147,2149,2156 -2. 2144-2147;2149;2156 - -Example 1 will be summed into a single run -Example 2 will have three run groups - -*WIKI*""" - import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * @@ -261,4 +247,3 @@ def _calibData(self, sam_ws, mon_ws): # Register algorithm with Mantid. AlgorithmFactory.subscribe(BASISReduction) - diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CalibrateRectangularDetectors.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CalibrateRectangularDetectors.py index efca382ed7d6..5842e460e1a5 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CalibrateRectangularDetectors.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CalibrateRectangularDetectors.py @@ -1,41 +1,3 @@ -"""*WIKI* - -Here are examples of input and output from PG3 and SNAP: - -[[Image:PG3_Calibrate.png]] - -[[Image:SNAP_Calibrate.png]] - --The purpose of this algorithm is to calibrate the detector pixels and write a calibration file. -The calibration file name contains the instrument, run number, and date of calibration. -A binary Dspacemap file that converts from TOF to d-space including the calculated offsets is -also an output option. For CrossCorrelation option: If one peak is not in the spectra of all -the detectors, you can specify the first n detectors to be calibrated with one peak and the -next n detectors to be calibrated with the second peak. If a color fill plot of the calibrated -workspace does not look good, do a color fill plot of the workspace that ends in cc to see if -the CrossCorrelationPoints and/or PeakHalfWidth should be increased or decreased. -Also plot the reference spectra from the cc workspace. - -== Features to improve performance of peak finding == - -=== Define peak fit-window === -There are two exclusive approaches to define peak's fit-window. - -1. ''PeakWindowMax'': All peaks will use this value to define their fitting range. - -2. ''FitwindowTableWorkspace'': This is a table workspace by which each peak will have its individual fit window defined. - -=== Define accepted range of peak's width === -Optional input property ''DetectorResolutionWorkspace'' is a matrix workspace containing the detector resolution -\Delta(d)/d for each spectrum. -Combining with property ''AllowedResRange'', it defines the lower and upper limit for accepted fitted peak width. - -Let c_l = AllowedResRange[0] , c_h = AllowedResRange[1] and fwhm as the peak's fitted width. -Then, -: c_l\times\frac{\Delta(d)}{d} < fwhm < c_h\times\frac{\Delta(d)}{d} - - -*WIKI*""" from mantid.api import * from mantid.kernel import * from mantid.simpleapi import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CheckForSampleLogs.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CheckForSampleLogs.py index d74879f0e594..f4af31cc2900 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CheckForSampleLogs.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CheckForSampleLogs.py @@ -1,7 +1,3 @@ -"""*WIKI* -Check if the workspace has some given sample logs -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory, WorkspaceProperty import mantid.simpleapi from mantid.kernel import Direction, logger diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConjoinFiles.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConjoinFiles.py index 9a65f7a1ccd5..03248eb07c83 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConjoinFiles.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConjoinFiles.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Conjoin two workspaces, which are file based. Uses [[ConjoinWorkspaces]] to do the heavy-lifting. - -*WIKI*""" - from mantid.api import * from mantid.kernel import * from mantid.simpleapi import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConjoinSpectra.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConjoinSpectra.py index 981597bbfbd2..842d7b42d32c 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConjoinSpectra.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConjoinSpectra.py @@ -1,10 +1,3 @@ -"""*WIKI* - -This algorithm allows a single spectrum to be extracted from a range of workspaces and placed into a single workspace for comparison and plotting. The LabelUsing property allows you to control what the end labels applied to each spectra will be. The default is to use the source workspace name, but you can specify the name of a log value to use as the label, e.g. Temp_Sample. the LabelValue property allows control of how a single value is extracted from time series logs. - -*WIKI*""" - - from mantid.api import * from mantid.kernel import * from mantid.simpleapi import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConvertSnsRoiFileToMask.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConvertSnsRoiFileToMask.py index 5f16406ebce8..e54df907acfd 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConvertSnsRoiFileToMask.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ConvertSnsRoiFileToMask.py @@ -1,15 +1,3 @@ -"""*WIKI* - -This algorithm reads in an old SNS reduction ROI file and converts it into -a Mantid mask workspace. It will save that mask to a Mantid mask file. - -The file format of the ROI file looks like: -bank1_0_0 -bank1_0_1 -... - -*WIKI*""" - import mantid.simpleapi as msapi import mantid.api as api import mantid.kernel as kernel diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CorrectLogTimes.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CorrectLogTimes.py index 280c98bd5b86..a1976b61c4d0 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CorrectLogTimes.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CorrectLogTimes.py @@ -1,8 +1,3 @@ -"""*WIKI* -Sometimes the clocks controlling different sample environments or other experimental log values are not synchronized. -This algorithm attempts to make all (some) time series property logs start at the same time as the first time in the proton charge log. -*WIKI*""" - import mantid.simpleapi import mantid.api import mantid.kernel diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateEmptyTableWorkspace.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateEmptyTableWorkspace.py index 9c61971d1df5..c61685dd6f41 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateEmptyTableWorkspace.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateEmptyTableWorkspace.py @@ -1,9 +1,3 @@ -"""*WIKI* - -This algorithm creates an empty table workspace and puts it in the data service to make it available to python. - -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory, ITableWorkspaceProperty, WorkspaceFactory from mantid.kernel import Direction @@ -24,4 +18,3 @@ def PyExec(self): # Register algorithm with Mantid AlgorithmFactory.subscribe(CreateEmptyTableWorkspace) - diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateLeBailFitInput.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateLeBailFitInput.py index 232075d518ac..fb50454c149d 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateLeBailFitInput.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateLeBailFitInput.py @@ -1,29 +1,3 @@ -"""*WIKI* - -This algorithm is to import Fullprof .irf file (peak parameters) and .hkl file (reflections) and -record the information to TableWorkspaces, which serve as the inputs for algorithm LeBailFit. - -==== Format of Instrument parameter TableWorkspace ==== -Instrument parameter TableWorkspace contains all the peak profile parameters imported from Fullprof .irf file. - -Presently these are the peak profiles supported - * Thermal neutron back to back exponential convoluted with pseudo-voigt (profile No. 10 in Fullprof) - -Each row in TableWorkspace corresponds to one profile parameter. - -Columns include Name, Value, FitOrTie, Min, Max and StepSize. - - -==== Format of reflection TableWorkspace ==== -Each row of this workspace corresponds to one diffraction peak. -The information contains the peak's Miller index and (local) peak profile parameters of this peak. -For instance of a back-to-back exponential convoluted with Gaussian peak, -the peak profile parameters include Alpha, Beta, Sigma, centre and height. - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in the wiki page of [[Le Bail Fit]]. - -*WIKI*""" #from mantid.api import PythonAlgorithm, AlgorithmFactory, ITableWorkspaceProperty, WorkspaceFactory, FileProperty, FileAction #from mantid.kernel import Direction, StringListValidator, FloatBoundedValidator @@ -224,4 +198,3 @@ def generateBraggReflections(self, hklmax): # Register algorithm with Mantid AlgorithmFactory.subscribe(CreateLeBailFitInput) - diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateTransmissionWorkspaceAuto.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateTransmissionWorkspaceAuto.py index 25587ba07e15..4d9874c5b485 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateTransmissionWorkspaceAuto.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/CreateTransmissionWorkspaceAuto.py @@ -1,13 +1,3 @@ -"""*WIKI* - -Facade over [[CreateTransmissionWorkspace]]. Pull numeric parameters out of the instrument parameters where possible. You can override any of these automatically -applied defaults by providing your own value for the input. - -See [[CreateTransmissionWorkspace]] for more information on the wrapped algorithm. - -*WIKI*""" - - import sys from mantid.simpleapi import CreateTransmissionWorkspace from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/DSFinterp.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/DSFinterp.py index 566032e2e0b9..44d2166ffe7e 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/DSFinterp.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/DSFinterp.py @@ -1,129 +1,3 @@ -"""*WIKI* - -== Usage == - -DSFinterp(Workspaces,OutputWorkspaces,[LoadErrors],[ParameterValues], - [LocalRegression],[RegressionWindow],[RegressionType],[TargetParameters], - [Version]) - -
- -== Properties == - -{| border="1" cellpadding="5" cellspacing="0" -!Order -!Name -!Direction -!Type -!Default -!Description -|- -|colspan=6 align=center|'''Input''' -|- -|1 -|Workspaces -|Input -|str list -|Mandatory -|list of input workspaces -|- -|2 -|LoadErrors -|Input -|boolean -| True -|Do we load error data contained in the workspaces? -|- -|3 -|ParameterValues -|Input -|dbl list -|Mandatory -|list of input parameter values -|- -|colspan=6 align=center|'''Running Local Regression Options''' -|- -|4 -|LocalRegression -|Input -|boolean -| True -|Perform running local-regression? -|- -|5 -|RegressionWindow -|Input -|number -| 6 -|window size for the running local-regression -|- -|6 -|RegressionType -|Input -|string -| quadratic -|type of local-regression; linear and quadratic are available -|- -|colspan=6 align=center|'''Output''' -|- -|7 -|TargetParameters -|Output -|dbl list -|Mandatory -|Parameters to interpolate the structure factor -|- -|8 -|OutputWorkspaces -|Output -|str list -|Mandatory -|list of output workspaces to save the interpolated structure factors -|- -|} - -== Required == - -This algorithm requires python package [https://github.com/camm-sns/dsfinterp dsfinterp], available at the [https://pypi.python.org/pypi/dsfinterp python package index]. if the package is not present, this algorithm will not be available. To install: - sudo pip install dsfinterp - -== Details == - -For every "dynamical channel" defined by one particular (Q,E) pair, the sequence of scalars -{{S_i \equiv S(Q,E,T_i)}} ordered by increasing value of T is interpolated with a cubic spline, which then can be invoked to obtain -S(Q,E,T) at any T value. - -Errors in the structure factor are incorporated when constructing the spline, so that the spline need not neccessarily pass trough the (T_i, S_i) points. This has the desirable effect of producing smooth spline curves when the variation of the structure factors versus T contains significant noise. For more details on the construction of the spline, see [http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.UnivariateSpline.html UnivariateSpline]. - -[[Image:DSFinterp_local_regression.png|thumb|300px|Local quadratic regression of windowsize w=7 starting at index n=2]] - -If the structure factors have no associated errors, an scenario typical of structure factors derived from simulations, then error estimation can be implemented with the running, local regression option. A local regression of windowsize w starting at index n performs a linear squares minimization F on the set of points (T_n,S_n),..,(T_{n+w},S_{n+w}). After the minimization is done, we record the expected value and error at T_{n+w/2}: - -value: S_{n+w/2}^' = F(T_{n+w/2}) - -error: e_{n+w/2} = \sqrt(\frac{1}{w}\sum_{j=n}^{n+w}(S_j-F(T_j))^2) - -As we slide the window along the T-axis, we obtain values and errors at every T_i. We use the {F(T_i)} values and {e_i} errors to produce a smooth spline, as well as expected errors at any T value. - -== Example == - -Our example system is a simulation of a small crystal of octa-methyl [http://www.en.wikipedia.org/wiki/Silsesquioxane silsesqioxane] molecules. A total of 26 molecular dynamics simulations were performed under different values of the energy barrier to methyl rotations, K. Dynamics structure factors S(Q,E) were derived from each simulation. - -[[Image:DSFinterp_fig3.png|thumb|center|600px|Interpolated spline (solid line) with associated errors at one (Q,E) dynamical channel. Red dots are values from the simulation used to construct the spline.]] - -There are as many splines as dynamical channels. The algorithm gathers the interpolations for each channel and aggregates them into an interpolated structure factor. - -[[Image:DSFinterp_fig4.png|thumb|center|600px|Interpolated structure factor S(K,E|Q), in logarithm scaling, at fixed Q=0.9A^{-1}.]] - -[[Category:Algorithms]] -[[Category:Utility]] -[[Category:PythonAlgorithms]] -[[Category:Transforms]] -[[Category:Smoothing]] -{{AlgorithmLinks|DSFinterp}} - -*WIKI*""" - from mantid.api import PythonAlgorithm, MatrixWorkspaceProperty, AlgorithmFactory from mantid.simpleapi import CloneWorkspace, mtd from mantid.kernel import StringListValidator, FloatArrayProperty, FloatArrayLengthValidator, FloatArrayMandatoryValidator, StringArrayProperty, StringArrayMandatoryValidator, Direction, FloatBoundedValidator, logger, EnabledWhenProperty, PropertyCriterion diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/DakotaChiSquared.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/DakotaChiSquared.py index 6f3653fb61f2..7a671ccb7066 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/DakotaChiSquared.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/DakotaChiSquared.py @@ -1,7 +1,3 @@ -"""*WIKI* -Compare two nexus files containing matrix workspaces and output chi squared into a file -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory,MatrixWorkspaceProperty,PropertyMode from mantid.kernel import Direction,IntBoundedValidator,FloatBoundedValidator import mantid.simpleapi diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExaminePowderDiffProfile.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExaminePowderDiffProfile.py index 824510e98bef..adae35841742 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExaminePowderDiffProfile.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExaminePowderDiffProfile.py @@ -1,8 +1,3 @@ -"""*WIKI* - -This algorithm is to examine peak profile values for powder diffractometry by LeBailFit. - -*WIKI*""" # from mantid.api import PythonAlgorithm, AlgorithmFactory, ITableWorkspaceProperty, WorkspaceFactory, FileProperty, FileAction, MatrixWorkspaceProperty, WorkspaceProperty, PropertyMode # from mantid.kernel import Direction, StringListValidator diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Examples/Squares.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Examples/Squares.py index 75c5f78cfe68..62242a5c74db 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Examples/Squares.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Examples/Squares.py @@ -1,8 +1,3 @@ -"""*WIKI* -An example algorithm. - -The wiki description of the algorithm should go here. -*WIKI*""" from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py index d2718f1eed10..687bdfcf1036 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py @@ -1,47 +1,3 @@ -"""*WIKI* - -Algorithm ExportExperimentLog obtains run information, sample information and -sample log information from a MatrixWorkspace and write them to a csv file. - -== File Mode == -There are 3 modes to write the experiment log file. - -1. "new": A new file will be created with header line; - -2. "appendfast": A line of experiment log information will be appended to an existing file; -* It is assumed that the log names given are exactly same as those in the file, as well as their order; -* Input property ''SampleLogTitles'' will be ignored in this option; - -3. "append": A line of experiment log information will be appended to an existing file; -* The algorithm will check whether the specified log file names, titles and their orders are exactly same as those in the file to append to; -* If any difference is deteced, the old file will be renamed in the same directory. And a new file will be generated. - - -== Missing Sample Logs == -If there is any sample log specified in the properites but does not exist in the workspace, -a zero float value will be put to the experiment log information line, -as the preference of instrument scientist. - -== Sample Log Operation == -If the type of a sample log is TimeSeriesProperty, it must be one of the following 5 types. -* "min": minimum TimeSeriesProperty's values; -* "max": maximum TimeSeriesProperty's values; -* "average": average of TimeSeriesProperty's values; -* "sum": summation of TimeSeriesProperty's values; -* "0": first value of TimeSeriesProperty's value. - -If the type of a sample log is string and in fact it is a string for time, then there will an option as -* "localtime": convert the time from UTC (default) to local time - -Otherwise, there is no operation required. For example, log 'duration' or 'run_number' does not have any operation on its value. An empty string will serve for them in property 'SampleLogOperation'. - -== File format == -There are two types of output file formats that are supported. -They are csv (comma seperated) file and tsv (tab separated) file. -The csv file must have an extension as ".csv". If a user gives the name of a log file, which is in csv format, -does not have an extension as .csv, the algorithm will correct it automatically. - -*WIKI*""" import mantid.simpleapi as api import mantid from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportSampleLogsToCSVFile.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportSampleLogsToCSVFile.py index 35f6599c22c2..15c9b8a97ce7 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportSampleLogsToCSVFile.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportSampleLogsToCSVFile.py @@ -1,17 +1,3 @@ -"""*WIKI* - -== Header file == -* Line 0: Test date: [Test date in string] -* Line 1: Test description: [Description of this log file] -* Line 2: Header content given by user via input property ''Header''. Usually it is the column names in the .csv file - -== CSV File format == -* Column 0: Absolute time in second -* Column 1: Relative to first log entry's time -* Column 2 to (2 + n) - 1: log values in the order determined by input ''SampleLogNames'' - -*WIKI*""" - import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/FilterLogByTime.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/FilterLogByTime.py index 32426cf67bb5..c3780ef2f5ab 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/FilterLogByTime.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/FilterLogByTime.py @@ -1,15 +1,3 @@ -"""*WIKI* -Filters out logs that do not sit between StartTime and EndTime. The algorithm also applied a 'Method' to those filtered results and returns the statistic. -A workspace must be provided containing logs. The log name provided must refer to a FloatTimeSeries log. - -Unless specified, StartTime is taken to be run_start. StartTime and EndTime filtering is inclusive of the limits provided. - -The Method allows you to create quick statistics on the filtered array returned in the FilteredResult output argument. Therefore the return value from Method=mean is equivalent to running numpy.mean -on the output from the FilteredResult property. All the Method options map directly to python numpy functions with the same name. These are documented -[http://docs.scipy.org/doc/numpy/reference/routines.statistics.html here] - -*WIKI*""" - from mantid.simpleapi import * from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/FindReflectometryLines.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/FindReflectometryLines.py index 6cdc3d0c6a4e..47697c5f49b2 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/FindReflectometryLines.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/FindReflectometryLines.py @@ -1,10 +1,3 @@ -"""*WIKI* - -Finds spectrum numbers corresponding to reflected and transmission lines in a line detector Reflectometry dataset. - -Expects two or one, reflectometry peaks, will fail if there are more or less than this number of peaks. The first peak is taken to be from the reflected line, the second is taken to be from the transmission line. This algorithm outputs a TableWorkspace containing the spectrum number of interest. -*WIKI*""" - from mantid.api import * from mantid.kernel import * import numpy as np diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GenerateGroupingSNSInelastic.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GenerateGroupingSNSInelastic.py index 0714d0f03d89..5aaaec332e00 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GenerateGroupingSNSInelastic.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GenerateGroupingSNSInelastic.py @@ -1,12 +1,3 @@ -"""*WIKI* -Generate grouping files for ARCS, CNCS, HYSPEC, and SEQUOIA, by grouping py pixels along a tube and px tubes. -py is 1, 2, 4, 8, 16, 32, 64, or 128. -px is 1, 2, 4, or 8. - -Author: A. Savici - -*WIKI*""" - import mantid import mantid.api import mantid.simpleapi @@ -104,4 +95,3 @@ def PyExec(self): return mantid.api.AlgorithmFactory.subscribe(GenerateGroupingSNSInelastic) - diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GetEiMonDet.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GetEiMonDet.py index abcb1c5789df..d665ea3afb62 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GetEiMonDet.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GetEiMonDet.py @@ -1,9 +1,3 @@ -"""*WIKI* -Get incident energy from one monitor and some detectors. If the minimum distance from the sample to detectors is dmin, -one will select detectors in the range dmin to dmin*MaximumDistanceFraction. These are grouped together, appended to -a copy of the monitor workspace, then fed to GetEi algorithm. The output of this algorithm is identical to that of [[GetEi]]. -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory,WorkspaceProperty from mantid.kernel import Direction,IntBoundedValidator,FloatBoundedValidator import mantid.simpleapi diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GetEiT0atSNS.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GetEiT0atSNS.py index db75ced6c066..4910607fe0b3 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GetEiT0atSNS.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/GetEiT0atSNS.py @@ -1,11 +1,3 @@ -"""*WIKI* -Get Ei and T0 on ARCS and SEQUOIA instruments. It accounts for the following: -* in the ADARA framework, the monitors are in the first frame. -* SEQUOIA has event based monitors. -* some data aquisition errors will create unphysical monitor IDs. This will be ignored -* when vChTrans is 2, on ARCS and SEQUOIA there is no chopper in the beam (white beam). Will return not a number for both Ei and T0 -*WIKI*""" - import mantid import numpy diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadFullprofFile.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadFullprofFile.py index 38202e23ff2d..5350f7b32c00 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadFullprofFile.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadFullprofFile.py @@ -1,29 +1,3 @@ -"""*WIKI* - -This algorithm is to import Fullprof .irf file (peak parameters) and .hkl file (reflections) and -record the information to TableWorkspaces, which serve as the inputs for algorithm LeBailFit. - -==== Format of Instrument parameter TableWorkspace ==== -Instrument parameter TableWorkspace contains all the peak profile parameters imported from Fullprof .irf file. - -Presently these are the peak profiles supported - * Thermal neutron back to back exponential convoluted with pseudo-voigt (profile No. 10 in Fullprof) - -Each row in TableWorkspace corresponds to one profile parameter. - -Columns include Name, Value, FitOrTie, Min, Max and StepSize. - - -==== Format of reflection TableWorkspace ==== -Each row of this workspace corresponds to one diffraction peak. -The information contains the peak's Miller index and (local) peak profile parameters of this peak. -For instance of a back-to-back exponential convoluted with Gaussian peak, -the peak profile parameters include Alpha, Beta, Sigma, centre and height. - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in the wiki page of [[LeBailFit]]. - -*WIKI*""" from mantid.api import PythonAlgorithm, AlgorithmFactory, ITableWorkspaceProperty, WorkspaceFactory, FileProperty, FileAction, MatrixWorkspaceProperty, WorkspaceProperty from mantid.kernel import Direction, StringListValidator diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadLogPropertyTable.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadLogPropertyTable.py index 6ad9816c758c..a900f79723e2 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadLogPropertyTable.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadLogPropertyTable.py @@ -1,20 +1,3 @@ -"""*WIKI* -Creates a table workspace of the average values of log values against the run number. - -There are special cases for: -* beamlog_(counts, frames, etc): last few points end up in next run's log. Find Maximum. -* comment (separate function) -* time series, take average for t>0 (if available) - -It should: -# Load any file type that [[Load]] can handle. -# Not crash with multiperiod data - although values will be from period 1 -# Handle gaps in the file structure (although this can be slow over a network if you choose a range of 100s) -# Load only a single spectra of the data (if the file loader supports this). -# Print out the list of acceptable log names if one is entered incorrectly. -# Use a hidden workspace for the temporary loaded workspaces, and clean up after itself. -*WIKI*""" - import time import datetime import numbers diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadMultipleGSS.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadMultipleGSS.py index 42e76d296c34..525e22c57bbb 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadMultipleGSS.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadMultipleGSS.py @@ -1,8 +1,3 @@ -"""*WIKI* -This algorithm loads multiple gsas files from a single directory -into mantid. -*WIKI*""" - from mantid.api import * from mantid.simpleapi import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadSINQ.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadSINQ.py index 829786560b74..295ac4944268 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadSINQ.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadSINQ.py @@ -1,12 +1,3 @@ -"""*WIKI* -== Description == - -LoadSINQ loads SINQ NeXus files. The algorithm calculates the file name from the instrument, year and numor and tries to locate the file. Both at SINQ standard paths as well as the data directories configured for Mantid. Then it calls LoadSINQFile for the located data file. - -The Mantid standard Load algorithm selects based on file extensions. The file extensions used at SINQ, mainly .hdf and .h5, were already taken. Thus the need for a separate loader. - - -*WIKI*""" #-------------------------------------------------------------- # Algorithm which loads a SINQ file. # This algorithm calculates the filename from instrument diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadSINQFile.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadSINQFile.py index 28b3cbc9d71d..b0acec0f8bb5 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadSINQFile.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadSINQFile.py @@ -1,11 +1,3 @@ -"""*WIKI* - -LoadSINQFile is a wrapper algorithm around LoadFlexiNexus. -It locates a suitable dictionary file for the instrument in question and then goes away to call LoadFlexiNexus with the right arguments. -It also performs any other magic which might be required to get the data in the right shape for further processing in Mantid. - -*WIKI*""" - #-------------------------------------------------------------- # Algorithm which loads a SINQ file. It matches the instrument # and the right dictionary file and then goes away and calls diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadVesuvio.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadVesuvio.py index ba0d64aa8de3..291c6f35b331 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadVesuvio.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/LoadVesuvio.py @@ -1,9 +1,3 @@ -"""*WIKI* - -A Workflow algorithm to load the data from the VESUVIO instrument at ISIS. - -*WIKI*""" - from mantid.kernel import * from mantid.api import * from mantid.simpleapi import (CropWorkspace, LoadEmptyInstrument, LoadRaw, Plus, diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskAngle.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskAngle.py index 2fea29a58b73..1d8908d12aad 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskAngle.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskAngle.py @@ -1,9 +1,3 @@ -"""*WIKI* -Algorithm to mask detectors with scattering angles in a given interval (in degrees) -By default MinAngle=0, MaxAngle=180, so if no keywords are set, all detectors are going to be masked -Returns a list of detectors that were masked -*WIKI*""" - import mantid.simpleapi import mantid.kernel import mantid.api diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskBTP.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskBTP.py index e34ae4bc0c1f..09944e9deb9c 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskBTP.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskBTP.py @@ -1,20 +1,3 @@ -"""*WIKI* -Algorithm to mask detectors in particular banks, tube, or pixels. It applies to the following instruments only: ARCS, CNCS, HYSPEC, NOMAD, POWGEN, SEQUOIA, SNAP, TOPAZ. For instruments with rectangular position sensitive detectors (POWGEN, SNAP, TOPAZ), the tube is -corresponding to the x coordinate, and pixel to the y coordinate. For example, on SNAP Bank="1", Tube="3" corresponds to -'SNAP/East/Column1/bank1/bank1(x=3)', and Bank="1", Tube="3", Pixel="5" is 'SNAP/East/Column1/bank1/bank1(x=3)/bank1(3,5)'. - - -If one of Bank, Tube, Pixel entries is left blank, it will apply to all elements of that type. For example: - -MaskBTP(w,Bank = "1") will completely mask all tubes and pixels in bank 1. -MaskBTP(w,Pixel = "1,2") will mask all pixels 1 and 2, in all tubes, in all banks. - -The algorithm allows ranged inputs: Pixel = "1-8,121-128" is equivalent to Pixel = "1,2,3,4,5,6,7,8,121,122,123,124,125,126,127,128" - -'''Note: '''Either the input workspace or the instrument must be set. If the workspace is set, the instrument is ignored. - -*WIKI*""" - import mantid.simpleapi import mantid.api import mantid.kernel diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskWorkspaceToCalFile.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskWorkspaceToCalFile.py index 57f77d2d3b6f..1624b058a4e7 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskWorkspaceToCalFile.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskWorkspaceToCalFile.py @@ -1,39 +1,3 @@ -"""*WIKI* -This algorithms writes a cal file with the selection column set to the masking status of the workspaces provided. The offsets and grouping details of the cal file are not completed, so you would normally use MargeCalFiles afterwards to import these values from another file. - -*WIKI*""" -"""*WIKI_USAGE* -Example: - #Load up two workspaces and mask some data - ws1=Load("GEM38370") - MaskDetectors(ws1,"100-200") - - ws2=Load("GEM38370") - MaskDetectors(ws2,"300-400") - - # Extract the masks to Mask Workspaces - #this drops the data and just reatains the mask informantion - #You can still visualize these using the instrument view - #Note: ExtractMasking outputs two items you need to catch them seperately - mw1,detList1=ExtractMasking(ws1) - mw2,detList2=ExtractMasking(ws2) - - #combine the masks - #Two ways to do this - #either - combinedMask = mw1+mw2 - #or - MaskDetectors(Workspace=mw1,MaskedWorkspace=mw2) - - #Extract the Mask to a cal file - dataDir = "C:/MantidInstall/data/" - MaskWorkspaceToCalFile(combinedMask,dataDir+"mask.cal") - - #Merge this with another cal file to pick up offsets and groups - MergeCalFiles(UpdateFile = dataDir+"mask.cal", MasterFile=dataDir+"offsets_2006_cycle064.cal", \ - OutputFile=dataDir+"resultCal.cal", MergeOffsets=False, MergeSelections=True,MergeGroups=False) - -*WIKI_USAGE*""" import sys from mantid.kernel import * from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Mean.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Mean.py index 84ada79a0db8..16342108b3a0 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Mean.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Mean.py @@ -1,6 +1,3 @@ -"""*WIKI* -Calculates the mean of the workspaces provided. Output workspace is identical in shape to the input workspaces. -*WIKI*""" from mantid.simpleapi import * from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MergeCalFiles.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MergeCalFiles.py index 8877d42a3fe7..63ac11749107 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MergeCalFiles.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MergeCalFiles.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Combines the data contained in two cal files, based on the selections offsets, selections and groups can be merged. The matching rows are determined by UDET. Any unmatched records are added at the end of the file. - -*WIKI*""" - from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py index 8b902e6102d6..0874ae7e01ea 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py @@ -1,7 +1,3 @@ -"""*WIKI* - -*WIKI*""" - import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PearlMCAbsorption.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PearlMCAbsorption.py index cc0ef924aea2..1820366bbc39 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PearlMCAbsorption.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PearlMCAbsorption.py @@ -1,13 +1,3 @@ -"""*WIKI* - -Loads an existing file of pre-calculated or measured absorption coefficients for the PEARL instrument. - -If the file contains "t=" on the first line then the number following this is assumed to be the thickness in mm. The values in the second column are assumed to be \alpha(t). Upon reading the file the \alpha values for transformed into attenuation coefficients via \frac{I}{I_0} = exp(-\alpha * t). - -If the file does not contain "t=" on the top line then the values are assumed to be calculated \frac{I}{I_0} values and are simply read in verbatim. - -*WIKI*""" - from mantid.kernel import * from mantid.api import * from mantid.simpleapi import LoadAscii diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py index b4b1a2b002d8..6c19116f6395 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py @@ -1,15 +1,3 @@ -"""*WIKI* -PoldiMerge takes a list of workspace names and adds the counts, resulting in a new workspace. The difference to Plus is that it performs some POLDI-specific tests -that determine whether merging those files is sensible or not. The following requirements have to be fulfilled: - -* The time-binning (x-data) of all workspaces must match (offset as well as width of time bins) -* These quantities from the sample log: -** Position of the sample table (x, y and z) -** Rotation speed of the chopper - -The algorithm does not perform partial summation - if any of the workspaces does not fulfill the criteria, the intermediate result is discarded. -*WIKI*""" - from mantid.kernel import StringArrayProperty, Direction from mantid.simpleapi import * from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectAddDir.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectAddDir.py index 1dcf3921a4a5..3e5b982ecccc 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectAddDir.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectAddDir.py @@ -1,12 +1,3 @@ -"""*WIKI* - - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - -*WIKI*""" from mantid.api import (PythonAlgorithm, AlgorithmFactory) from mantid.api import (FileProperty, diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectAddFile.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectAddFile.py index 8d17347c6f67..159428180f19 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectAddFile.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectAddFile.py @@ -1,12 +1,3 @@ -"""*WIKI* - - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - -*WIKI*""" from mantid.api import * from mantid.kernel import Direction diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectRun.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectRun.py index d12e511d3527..ff695fb30262 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectRun.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiProjectRun.py @@ -1,215 +1,3 @@ -"""*WIKI* - - - -PoldiProjectRun algorithm is used to analyze a bunch of POLDI raw data -files, following a standard POLDI analysis process. This algorithm -take as parameter a tableMatrix with a list of the sample to analyze, -and for each sample a bunch of setup information for the different -algorithms (such as the data file path, etc...). - -This tableWorkspace can be built easily using the -two algorithms [[PoldiProjectAddFile]] and [[PoldiProjectAddDir]], -which will create and/or fill properly a targeted tableWorkspace. -The needed columns and there content are describe in the -following [[PoldiProjectRun#Data Manager|Data Manager]] paragraph. - - -*WIKI_USAGE* -The algorithm is used the classical way. Only one parameter is compulsory. - OutputWorkspace = PoldiProjectRun(InputWorkspace=sample_manager_ws) - -*WIKI_USAGE* - - - - -Data are processed alone, or grouped together. For each -acquisition file, setup information have to be loaded. During -the data treatment process, transitional workspace are created. - -In a close future, it will possible to share different workspace -between data-file: for example when one knows that some -acquisitions should be strictly the same, auto-correlation -and peak detection could be done only one for all the data. - -=== Data manager === - - -A MatrixWorkspace is created to store all the information -about data-files and the future workspace needed during the analysis. -The stored information are: -
    -
  • spl Name - name of the sample, extract from the sample - file name, without the extension
  • -
  • year - year of the acquisition
  • -
  • number - id number of the acquisition
  • -
  • data file - full path of the data file
  • -
  • spl log - name of the MatrixWorkspace where the data log are loaded
  • -
  • spl corr - name of the MatrixWorkspace where the - correlated spectra is loaded
  • -
  • spl dead wires - name of the MatrixWorkspace where the - dead wires are loaded
  • -
  • spl peak - name of the MatrixWorkspace where the - detected peak information are stored
  • -
- - - - -=== POLDI setup manager === - -For each acquisition file, the IDF are loaded: -
    -
  • Instrument Definition files - The POLDI instrument geometry.
  • -
  • Instrument Parameters files - The setup parameters - for the data, at t he time of the acquisition.
  • -
- -The POLDI setup informations can be shared between -acquisition obtained during the same beam-time. -While loading each instrument files, the different POLDI -configurations used are stored in a MatrixWorkspace (most -often, there is only one per year), with an example of -data. The needed POLDI setup informations will then be -extracted from the IDF of each of these example sample. - -Therefore each POLDI setup are loaded only once and shared -between the different data files. - - - -=== Analysis steps === - -==== Loading the data ==== -Each data-file is loaded on a 2DWorkspace. The associated -log and setup information are loaded in dedicated workspace -as specified in the sample-manager TableWorkspace. - - -:[[LoadSINQFile]] - -The raw data are loaded in a 2DWorkspace, using the generic -file-loader for SINQ data, given the instrument name ''POLDI'' as parameter. - LoadSINQFile(Instrument = "POLDI", - Filename = sample_file_path, - OutputWorkspace = sample_name) - -:[[PoldiLoadLog]] - -The associated ''logs'' informations are extracted from -the ''hdf'' raw data file, an store in a dedicated MatrixWorkspace. -A dictionary file contains the set of key/path to extract -and store all the needed information. -More specifically, the acquisition starting time is extracted -and store in the sample WS to initialize the ''run_start'' variable. - PoldiLoadLog(InputWorkspace = sample_output_ws, - Filename = sample_file_path, - Dictionary = poldi_dictionnary_file_path, - PoldiLog = sample_log_ws) - -:[[LoadInstrument]] - -For each raw data WS, the corresponding IDF is loaded, based -on the acquisition starting time. - LoadInstrument(Workspace = sample_output_ws, - InstrumentName = "Poldi", - RewriteSpectraMap = True) - -:[[PoldiRemoveDeadWires]] - -Some wires are permanently dead and should not be taken into -account. They are listed in the IDF of a given setup (IPP). -Some others wires should not be used, because they seem -untrustable (dead wires, hot wires, random behavior,...). These -wires are detected by successive comparison with there neighbors: -intensity from two successive wires should not differ more -than ''BadWiresThreshold''(*100)%. One by one, the most deviant -wires are checks and removed until they all fit the condition. - PoldiRemoveDeadWires(InputWorkspace = sample_output_ws, - RemoveExcludedWires = True, - AutoRemoveBadWires = True, - BadWiresThreshold = BadWiresThreshold, - PoldiDeadWires = sample_dead_wires_ws) - -==== Loading POLDI parameters ==== -While loading the data, the different needed setup have been -store in a dedicated workspace. - -they are now all extracted, using an example sample for each of them. - - -:[[PoldiLoadChopperSlits]] - -The chopper configuration is loaded in a dedicated Workspace, -one per ''Poldi IPP'' setup detected. - PoldiLoadChopperSlits(InputWorkspace = ex_of_sample_ws, - PoldiChopperSlits = ipp_chopper_slits) - -:[[PoldiLoadSpectra]] - -The characteristic Poldi spectra (''Intensity=f(wavelength)'') is -extracted from each IDF. - PoldiLoadSpectra(InputWorkspace = ex_of_sample_ws, - PoldiSpectra = ipp_Poldi_spectra) - -:[[PoldiLoadIPP]] - -Local setup information (such as the detector position, chopper -offset, etc...) are extracted and stores in a dedicated workspace. - PoldiLoadIPP(InputWorkspace = ex_of_sample_ws, - PoldiIPP = ipp_ipp_data) - -==== Pre-analyzing data ==== -In order to setup the 2D fit to analyze the data, some -information need to be extracted from the file, such as an -idea of the peaks position. This is done using an autocorrelation -function, following by a peak detection algorithm. - -The process has been cut in different algorithm in order to give -the possibility to change/improve/modify each steps. For example, -the peak detection process can be based on some previous results -to not start from scratch, or given the sample crystal -structure/symetries/space group... - - -:[[PoldiAutoCorrelation]] - -Almost all the previous loaded workspace are used by this algorithm. -From the sample manager workspace, and the Poldi setup workspace, all -the targeted workspace can be found and given as parameters to the -algorithm. The auto-correlated graph is store in a dedicated -workspace, on row (0). - PoldiAutoCorrelation(InputWorkspace = sample_output_ws, - PoldiSampleLogs = sample_log_ws, - PoldiDeadWires = sample_dead_wires_ws, - PoldiChopperSlits = ipp_chopper_slits, - PoldiSpectra = ipp_Poldi_spectra, - PoldiIPP = ipp_ipp_data, - wlenmin = wlen_min, - wlenmax = wlen_max, - OutputWorkspace = sample_correlated_ws) - -:[[PoldiPeakDetection]] - -The previous autocorrelation function is analyzed to detected -possible peaks. The found peak are stored in a dedicated workspace, -and added to the previously created ''sample_correlated_ws'': -on row (1) the detected peak, on row (2) the fitted peak. - PoldiPeakDetection(InputWorkspace = sample_correlated_ws, - PeakDetectionThreshold = PeakDetectionThreshold, - OutputWorkspace = sample_peak_ws) - - - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - - -*WIKI*""" - from mantid.api import PythonAlgorithm from mantid.api import ITableWorkspaceProperty from mantid.api import AlgorithmFactory, WorkspaceFactory diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py index c43ae5e27fd8..6a2b537f06e4 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Liquids Reflectometer (REFL) reduction - -*WIKI*""" - from mantid.api import * from mantid.simpleapi import * from numpy import zeros, shape, arange @@ -378,4 +372,3 @@ def PyExec(self): AlgorithmFactory.subscribe(RefLReduction) - diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefinePowderDiffProfileSeq.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefinePowderDiffProfileSeq.py index 2a027b190f87..f5c9e563d270 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefinePowderDiffProfileSeq.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefinePowderDiffProfileSeq.py @@ -1,64 +1,3 @@ -"""*WIKI* - - - -The purpose of this algorithm is to provide users a tool to control the workflow -to refine powder diffractometer's peak profile. -For Time-Of-Flight powder diffractometers in SNS, back-to-back exponential convoluted with pseudo-voigt -profile functions are used. The function is complicated with strong correlated parameters. -Thus, the refinement on these parameters contains multiple steps, within each of which only a subset of -profile parameters are refined. - -In order to control the workflow, there are four major functions supported by this algorithm - * ''Setup'' : set up a few workspaces that will be used to refine profile parameters in multiple steps; - * ''Refine'' : select a subset of peak parameters and do Le Bail fit on them; - * ''Save'' : save the current refinement status and refinement history to a project file; - * ''Load'' : set up a few workspaces used for refining by loading them from a previously created project file. - - -==== Input and output workspaces ==== - * InputWorkspace : data workspace containing the diffraction pattern to refine profile parameters with; - * SeqControlInfoWorkspace : table workspace used to track refinement; Below is the introduction on the fields/columns of this workspace. - * "Step" : refinement step. User can start a refinement from the result of any previous '''Step'''; - * "OutProfile" : name of the table workspace containing refined profile parameters; - * "OutReflection": name of the table workspace containing Bragg peaks' peak parameters calculated from refined parameters' value; - * "OutBackgroud": name of the table workspace containing the output background parameters' value; - * "OutBckgroundParam": name of the output background parameters; - * "Refine": profile parameters that are refined in this step; - * "RwpOut": output Rwp from refinement; - * "LastStep": last step where this step is based on; - * "RwpIn": input Rwp - * "InProfile": input profile parameter workspace's name; - * "InReflection": input Bragg peak parameters workspace' name; - * "InBackgroud": input background workspace; - * "InBckgroundParam": input background parameters. - * InputProfileWorkspace : table workspace contraining starting values of profile parameters; - * InputBraggPeaksWorkspace : table workspace containing the Bragg peaks' information for Le Bail fit; - * InputBackgroundParameterWorkspace : table workspace containing the background parameters' value - -==== Supported peak profiles ==== - * Neutron Back-to-back exponential convoluted with pseudo-voigt : Fullprof profile 9 and GSAS TOF profile 3; - * Thermal neutron Back-to-back exponential convoluted with pseudo-voigt: Fullprof profile 10 (a.k.a. Jason Hodges function). - -==== Supported background types ==== - * Polynomial - * Chebyshev - * FullprofPolynomial - - -== Hint for using == -This is just a brief description for how to use this algorithm. - 1. ''Setup''; - 2. ''Refine'': refine ''Dtt1'' and ''Zero'' from step 0; - 3. ''Refine'': reifne ''Alph0'' and ''Beta0'' from step 1; - 4. ''Refine'': refine ''Alph1'' from step 1 with failure; - 5. ''Refine'': refine ''Beta1'' from step 1 because step 2 fails; - 6. ''Refine'': refine ''Sig-1'' from last step; - 7. ''Save'': save current work and history to a Nexus file. - - -*WIKI*""" - from mantid.api import * import mantid.simpleapi as api from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ReflectometryReductionOneAuto.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ReflectometryReductionOneAuto.py index dffd2a8ed089..b8223baea07e 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ReflectometryReductionOneAuto.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ReflectometryReductionOneAuto.py @@ -1,13 +1,3 @@ -"""*WIKI* - -Facade over [[ReflectometryReductionOne]]. Pulls numeric parameters out of the instrument parameters where possible. You can override any of these automatically -applied defaults by providing your own value for the input. - -See [[ReflectometryReductionOne]] for more information on the wrapped algorithm. - -*WIKI*""" - - import sys from mantid.simpleapi import ReflectometryReductionOne from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RetrieveRunInfo.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RetrieveRunInfo.py index 5f0cf7466859..495e71bcedad 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RetrieveRunInfo.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RetrieveRunInfo.py @@ -1,17 +1,3 @@ -"""*WIKI* - -Strips the log property values of "inst_abrv", "run_number", "user_name", "run_title" and "hd_dur" from the specified run files, and compiles a TableWorkspace of the result. - -Uses multiple calls to [[CreateLogPropertyTable]] create the final result table. - -[[File:ConvertToEnergyInfoTable.png|350px|center|frame|Output workspace generated by inspecting runs 12218-12229 and having the default instrument set to TOSCA.]] - -== Limitations == - -Currently, only ISIS instruments with runs that have the ''full'' list of log properties are supported. [[CreateLogPropertyTable]] is available to those users who wish to "brew their own" version of this algorithm. - -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory, ITableWorkspaceProperty from mantid.simpleapi import * from mantid.kernel import StringMandatoryValidator, Direction diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SANSSubtract.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SANSSubtract.py index 53a256d951dc..16f9c41207f5 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SANSSubtract.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SANSSubtract.py @@ -1,20 +1,3 @@ -"""*WIKI* -Subtract background from an I(Q) distribution. - -The DataDistribution and Background properties can either be the name of a workspace or a file path. -If a file path is provided, it will be loaded and assumed to be in units of Q. - -The output workspace will be equal to: - - Output = DataDistribution - ScaleFactor * Background + Constant - -The Dq values are propagated from the DataDistribution workspace to the output workspace as-is. - -If the OutputDirectory property is filled, the output workspace will be written to disk. -Two files will be produced, a 4 column ASCII file and a CanSAS XML file. - -*WIKI*""" - from mantid.api import * from mantid.kernel import Direction, FloatBoundedValidator import mantid.simpleapi diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SANSWideAngleCorrection.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SANSWideAngleCorrection.py index f70ae4743b1d..b60f8374b666 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SANSWideAngleCorrection.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SANSWideAngleCorrection.py @@ -1,111 +1,3 @@ -"""*WIKI* -== Algorithm Reference Discussion == - -Looking at [https://kur.web.psi.ch/sans1/manuals/sas_manual.pdf Computing guide for Small Angle Scattering Experiments] by Ghosh, Egelhaaf & Rennie, we see that for scattering at larger angles the transmission should be modified due to the longer path length after the scattering event. - -The longer path length after scattering will also slightly increase the probability of a second scattering event, but this is not dealt with here. - -If our on-axis transmission is T_0 through a sample of thickness d, then the transmission at some other thickness x is \exp(-\mu x) where attenuation coefficient \mu = -\ln( \frac{T_0}{d}). - - -If a neutron scatters at angle 2\theta at distance x into the sample, its total transmission is then: - - - -T^{''} = \exp(-\mu x) \exp( \frac{-\mu(d-x)}{\cos(2\theta)}) - - - -T^{''} should be integrated and averaged between x = 0 and x = d. - - -Hammouda, gives an approximate result for the integral, see page 208 of [[http://www.ncnr.nist.gov/staff/hammouda/the_SANS_toolbox.pdf SANS toolbox]]: - - -T^{'} = \frac{T_0(T_0^A - 1)}{A \ln(T_0)} - - -For: - - -A = \frac{1}{\cos(2\theta)} - 1 - - -For example if T_0 = 0.2 and 2\theta = 40 then T^{'} = 0.158, a shift of ~20% of the SANS curve. Note that the result is independent of sample thickness. - -T_0 is a function of neutron wavelength, whilst A is a function of detector pixel location. - -The output of this algorithm is: - -OutputWorkspace = \frac{T^'}{T_0} - -=== Error Propagation === - -The error propagation follows this formula: - - OutputWorkspace_{error} = \frac{T_{0E} ^A - 1}{A\ln(T_0E)} - -Which means, that we do not consider the error in the definition of the 2\theta (the parameter A) - - -== Enabling Wide Angle Correction for Reduction of SANS ISIS == - -To enable the Wide Angle correction use the User File settings: - - SAMPLE/PATH/ON - -More information on: [[SANS_User_File_Commands#SAMPLE]] - -== SANS ISIS Reduction == - -The output of SANSWideAngleCorrection is used as WavePixelAdj parameter at [[Q1D]]. - -== Wide Angle Correction and the SANS Reduction == - -The equation for the reduction is (see [[Q1D]]) - -P_I(Q) = \frac{\sum_{\{i, j, n\} \supset \{I\}} S(i,j,n)}{\sum_{\{i, j, n\} \supset \{I\}}M(n)\eta(n)T(n)\Omega_{i j}F_{i j}} - -But, T(n) is not really T(n), because of the wide angles, it is now T(n,theta) or T(n,i,j). - -So, we decided to have a new factor that changes this equation to: - -P_I(Q) = \frac{\sum_{\{i, j, n\} \supset \{I\}} S(i,j,n)}{\sum_{\{i, j, n\} \supset \{I\}}M(n)\eta(n)T(n)\Omega_{i j}F_{i j}Corr(i,j,n)} - -Where Corr (Correction factor) in this case will be: - - -Corr = \frac{T_0^A - 1}{A \ln(T_0)} - - -Which is the OutputWorkspace of SANSWideAngleCorrection. - -This parameter enters inside [[Q1D]] as WavePixelAdj. But, this is all done for you inside the Reduction Script. - -== Comparison with Wide Angle Correction at SNS == - -The transmission correction applied at SNS is described [http://www.mantidproject.org/HFIR_SANS#Transmission_correction here], and it is applied through the [[ApplyTransmissionCorrection]] algorithm. The correction applied there is an approximation for the same equations described here. The picture above compare their results - -[[File:SNS_ISIS_WideAngleCorrections.png]] - -Note a difference among them is when they are applied. At SNS, the correction is applied before averaging the counters per bin inside [[Q1D]] algorithm, while at ISIS, it is used after, inside the [[Q1D]] algorithm, for the division of the counters per bin normalized by the transmission counters. - - -== References == - -Annie Brulet et al. - Improvement of data treatment in SANS - J. Appl. Cryst. (2007). 40 - -Ghosh, Egelhaaf & Rennie - Computing guide for Small Angle Scattering Experiments - -*WIKI*""" - -"""*WIKI_USAGE* - -'''NB''': This algorithm is not intended to be called and used as a standalone Mantid algorithm because actual transmission values are not passed to the reduction algorithm [[Q1D]]. - -*WIKI_USAGE*""" - - from mantid.api import * from mantid.kernel import * import os @@ -188,5 +80,4 @@ def PyExec(self): self.setProperty("OutputWorkspace", trans_wc) ############################################################################################# -AlgorithmFactory.subscribe(SANSWideAngleCorrection) - +AlgorithmFactory.subscribe(SANSWideAngleCorrection) diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SNSPowderReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SNSPowderReduction.py index 17f401d11c3c..f1271e18ef26 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SNSPowderReduction.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SNSPowderReduction.py @@ -1,15 +1,3 @@ -"""*WIKI* - -==== About Filter Wall ==== -Time filter wall is used in _loadData to load data in a certain range of time. -Here is how the filter is used: - 1. There is NO filter if filter wall is NONE - 2. There is NO lower boundary of the filter wall if wall[0] is ZERO; - 3. There is NO upper boundary of the filter wall if wall[1] is ZERO; - - -*WIKI*""" - import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SelectPowderDiffPeaks.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SelectPowderDiffPeaks.py index 8c156c611dcb..6b98f8ca25ae 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SelectPowderDiffPeaks.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SelectPowderDiffPeaks.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Select the powder diffraction peaks for [[Le Bail Fit]] - -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory, ITableWorkspaceProperty, WorkspaceFactory, FileProperty, FileAction from mantid.kernel import Direction, StringListValidator @@ -230,4 +224,3 @@ def parseZscoreFilter(self, zscorefilterstr): # Register algorithm with Mantid AlgorithmFactory.subscribe(SelectPowderDiffPeaks) - diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortByQVectors.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortByQVectors.py index 3742d39a90e6..491d91ce171a 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortByQVectors.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortByQVectors.py @@ -1,10 +1,3 @@ -"""*WIKI* - -This algorithm sorts a group workspace by the qvectors found in the qvectors file. Workspaces will be tranformed if the qvectors dimension is in the bins. - -*WIKI*""" - - from mantid.kernel import * from mantid.api import * from mantid.simpleapi import (DeleteWorkspace, ExtractSingleSpectrum, RenameWorkspace, ConjoinWorkspaces, Transpose) diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortDetectors.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortDetectors.py index 9ad6d8f05452..117856dd2aa5 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortDetectors.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortDetectors.py @@ -1,7 +1,3 @@ -"""*WIKI* -Algorithm to sort detectors by distance. Will return arrays for upstream (downstrem) spectrum number and detector distances, ordered by distance. -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory,WorkspaceProperty,PropertyMode from mantid.kernel import Direction,IntArrayProperty, FloatArrayProperty import mantid,math,numpy diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortXAxis.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortXAxis.py index cfec374da192..515eea2a45b6 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortXAxis.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SortXAxis.py @@ -1,11 +1,3 @@ -"""*WIKI* - -Clones the input [[MatrixWorkspace|Matrix Workspaces]] and orders the x-axis in an ascending fashion. Ensures that the y-axis and error data is sorted in a consistent way with the x-axis. -All x-values of the input workspace MUST be in either a descending or ascending fashion before passing to this algorithm. - -This algorithm is for use with small workspaces loaded. It is particularly suitable for reformatting workspaces loaded via [[LoadASCII]]. Input workspaces must be a distribution. - -*WIKI*""" import mantid.simpleapi as api from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Stitch1D.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Stitch1D.py index 503703c0c84a..e90d44e0cd08 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Stitch1D.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Stitch1D.py @@ -1,11 +1,3 @@ -"""*WIKI* - -Stitches single histogram [[MatrixWorkspace|Matrix Workspaces]] together outputting a stitched Matrix Workspace. Either the right-hand-side or left-hand-side workspace can be chosen to be scaled. Users -must provide a Param step (single value), but the binning start and end are calculated from the input workspaces if not provided. Likewise, StartOverlap and EndOverlap are optional. If the StartOverlap or EndOverlap -are not provided, then these are taken to be the region of x-axis intersection. - -The workspaces must be histogrammed. Use [[ConvertToHistogram]] on workspaces prior to passing them to this algorithm. -*WIKI*""" from mantid.simpleapi import * from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Stitch1DMany.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Stitch1DMany.py index c015cbe6b38b..2919633b9556 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Stitch1DMany.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Stitch1DMany.py @@ -1,13 +1,3 @@ -"""*WIKI* - -Stitches single histogram [[MatrixWorkspace|Matrix Workspaces]] together outputting a stitched Matrix Workspace. This algorithm is a wrapper over [[Stitch1D]]. - -The algorithm expects pairs of StartOverlaps and EndOverlaps values. The order in which these are provided determines the pairing. -There should be N entries in each of these StartOverlaps and EndOverlaps lists, where N = 1 -(No of workspaces to stitch). -StartOverlaps and EndOverlaps are in the same units as the X-axis for the workspace and are optional. - -The workspaces must be histogrammed. Use [[ConvertToHistogram]] on workspaces prior to passing them to this algorithm. -*WIKI*""" #from mantid.simpleapi import * from mantid.simpleapi import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SuggestTibCNCS.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SuggestTibCNCS.py index 1bf6821e90bf..7826e2e346bd 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SuggestTibCNCS.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SuggestTibCNCS.py @@ -1,8 +1,3 @@ -"""*WIKI* -Suggest possible time independent background range for CNCS. It works for incident energy range from 0.5 to 50 meV. By default TibMax is 500 microseconds before the neutrons arrive at the sample, and TibMin is 3400 microseconds before Tibmax. -This range is moved around if a prompt pulse is in this interval, or it goes below the TOF frame minimum, or it can be reduced to 2400 microseconds. -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory import mantid.simpleapi from mantid.kernel import FloatBoundedValidator,Direction diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SuggestTibHYSPEC.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SuggestTibHYSPEC.py index 24947fc8e2fe..a2cbd258c09b 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SuggestTibHYSPEC.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/SuggestTibHYSPEC.py @@ -1,7 +1,3 @@ -"""*WIKI* -Suggest possible time independent background range for HYSPEC. It works for incident energy range from 3 to 100 meV. -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory import mantid.simpleapi from mantid.kernel import FloatBoundedValidator,Direction,logger diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/TestWorkspaceGroupProperty.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/TestWorkspaceGroupProperty.py index 5f47889d3cb0..20e54646632b 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/TestWorkspaceGroupProperty.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/TestWorkspaceGroupProperty.py @@ -1,8 +1,3 @@ -"""*WIKI* -This algorithm is only used for testing. -*WIKI*""" - - from mantid.kernel import * from mantid.api import * import numpy as np diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/USANSSimulation.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/USANSSimulation.py index 1c7373a0d620..d955e23f16d3 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/USANSSimulation.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/USANSSimulation.py @@ -1,16 +1,3 @@ -"""*WIKI* -Simulate a USANS workspace. - -A matrix workspace is created for a given analyzer angle. A list of wavelength peaks coming out -of the monochromator can be specified. The width of those peaks can also be specified. - -Both the main detector and the transmission detector are filled with compatible signals -according to a dummy transmission curve. - -The amplitude of the signal in the main detector is given by a sphere model. - -A monitor workspace is created with a fake beam profile. -*WIKI*""" from mantid.simpleapi import * from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/UpdatePeakParameterTableValue.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/UpdatePeakParameterTableValue.py index a44d119d9943..af0198911700 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/UpdatePeakParameterTableValue.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/UpdatePeakParameterTableValue.py @@ -1,26 +1,3 @@ -"""*WIKI* - -In algorithms related to [[Le Bail Fit]] and powder diffractomer instrument profile calibration, -TableWorkspace containing the peak profile parameters' information are used as input and output. -''UpdatePeakParameterTableValue'' gives user the method to change the value of parameters' information, -including its status to fit, value, minimum/maximum value (for boundary contrains) and step size (for Monte Carlo optimizer). - -== Format of TableWorkspace == -TableWorkspace containing peak profile parameters must have 2 columns, "Name" and "Value". It can have but not be limited to the following columns, "Min", "Max", "Stepsize" and "FitOrTie". - -== Specify A Cell or Cells == -The cell to have value updated can be specified by its row and column index. -* Column index is determined by property "Column". -* Row index can be specified by property "Row", which requires a list of row indexes, or property "ParameterNames", which requires a list of strings. If "ParameterNames" is used as the input of row indexes, the algorithm will go through each row to match the string value of cell "Name" (i.e., parameter name) to each input parameter name. -* If neither "Row" nor "ParameterNames" is given by user, then all cells in the column will have the value updated to a same value from either "NewFloatValue" or "NewStringValue" according to the type of the cell. -* If multiple row indexes are specified, then all the cells of the specified column and rows are updated to same value from either "NewFloatValue" or "NewStringValue". - -== How to use algorithm with other algorithms == -This algorithm is designed to work with [[Le Bail Fit|other algorithms]] to do Le Bail fit. - - -*WIKI*""" - import mantid import mantid.api import mantid.kernel diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ViewBOA.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ViewBOA.py index a82123b6c01d..130efe38615a 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ViewBOA.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ViewBOA.py @@ -1,11 +1,3 @@ -"""*WIKI* - -Algorithm which loads a BOA file and creates the 3 BOA plots of Uwe Filges desire - -Mark Koennecke, July 2013 - -*WIKI*""" - from mantid.api import AlgorithmFactory from mantid.api import PythonAlgorithm, WorkspaceFactory, FileProperty, FileAction, WorkspaceProperty from mantid.kernel import Direction, StringListValidator, ConfigServiceImpl diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/DensityOfStates.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/DensityOfStates.py index fc9887102b15..3db3edf981c3 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/DensityOfStates.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/DensityOfStates.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Calculates phonon densities of states, Raman and IR spectrum from the output of CASTEP code obtained in the form of .phonon and .castep files. - -*WIKI*""" - from mantid.kernel import * from mantid.api import * from mantid.simpleapi import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSAzimuthalAverage1D.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSAzimuthalAverage1D.py index 18cdd767187b..ad4c2ba65a16 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSAzimuthalAverage1D.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSAzimuthalAverage1D.py @@ -1,6 +1,3 @@ -"""*WIKI* -Compute I(q) for reduced EQSANS data -*WIKI*""" from mantid.api import * from mantid.kernel import * from mantid.simpleapi import Scale diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSDirectBeamTransmission.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSDirectBeamTransmission.py index 511d858e9a95..b44b7942741f 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSDirectBeamTransmission.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSDirectBeamTransmission.py @@ -1,6 +1,3 @@ -"""*WIKI* -Compute the transmission using the direct beam method on EQSANS -*WIKI*""" from mantid.api import * from mantid.kernel import * import mantid.simpleapi as api diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSNormalise.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSNormalise.py index 6640964f3751..0e4b7cdb8746 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSNormalise.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSNormalise.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Normalise detector counts by accelerator current and beam spectrum. - -*WIKI*""" - from mantid.api import * from mantid.kernel import * from reduction_workflow.find_data import find_file diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/FuryFitMultiple.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/FuryFitMultiple.py index d3b52df089fc..68c5fa00d195 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/FuryFitMultiple.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/FuryFitMultiple.py @@ -1,9 +1,3 @@ -"""*WIKI* -Fits and *_iqt file generated by Fury using one of the specified functions. -The functions available are either one or two exponentials (Intensity \times exp[-(x/\tau)]), a stretched exponential (Intensity \times exp[-(x/\tau)]\beta) or a combination of both an exponential and stretched exponential. - -This routine was originally part of the MODES package. -*WIKI*""" from mantid import config, logger, mtd, AlgorithmFactory from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/HFIRSANSReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/HFIRSANSReduction.py index c7c4b738fa15..6c706973f673 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/HFIRSANSReduction.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/HFIRSANSReduction.py @@ -1,8 +1,3 @@ -"""*WIKI* - -HFIR SANS reduction workflow - -*WIKI*""" import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectTransmission.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectTransmission.py index 89e257751bf4..f4449d8b8c6b 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectTransmission.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectTransmission.py @@ -1,10 +1,3 @@ -"""*WIKI* - -Calculates the scattering & transmission for Indirect Geometry spectrometers. The sample chemical formula is input for the SetSampleMaterial algorithm to calculate the cross-sections. -The instrument analyser reflection is selected to obtain the wavelength to calculate the absorption cross-section. The sample number density & thickness is input to then calculate the percentage scattering & transmission. - -*WIKI*""" - from mantid.simpleapi import * from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatData.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatData.py index ef00b8259049..f3612a9205fb 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatData.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatData.py @@ -1,13 +1,3 @@ -"""*WIKI* - -Calculates Multiple Scattering based on the Monte Carlo program MINUS. It takes a sample S(Q,w) from an input sqw workspace and supports both -Flat and Cylindrical geometries. More information on the multiple scattering can be procedure can be found in the [http://www.isis.stfc.ac.uk/instruments/iris/data-analysis/modes-v3-user-guide-6962.pdf modes manual]. - -==== References ==== -# M W Johnson, AERE Report R7682 (1974) - -*WIKI*""" - # Algorithm to start Bayes programs from mantid.api import PythonAlgorithm, AlgorithmFactory from mantid.kernel import StringListValidator, StringMandatoryValidator, logger diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatFunc.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatFunc.py index 9b70b81a06df..e31a54e5417f 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatFunc.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatFunc.py @@ -1,13 +1,3 @@ -"""*WIKI* - -Calculates Multiple Scattering based on the Monte Carlo program MINUS. It calculates S(Q,w) from specified functions (such as those used in JumpFit) and supports both -Flat and Cylindrical geometries. More information on the multiple scattering can be procedure can be found in the [http://www.isis.stfc.ac.uk/instruments/iris/data-analysis/modes-v3-user-guide-6962.pdf modes manual]. - -==== References ==== -# M W Johnson, AERE Report R7682 (1974) - -*WIKI*""" - # Algorithm to start Bayes programs from mantid.kernel import StringListValidator, StringMandatoryValidator from mantid.api import PythonAlgorithm, AlgorithmFactory diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/NormaliseByThickness.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/NormaliseByThickness.py index 77b157fa5d4c..94683ebec69b 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/NormaliseByThickness.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/NormaliseByThickness.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Normalise detector counts by the sample thickness - -*WIKI*""" - import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/OSIRISDiffractionReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/OSIRISDiffractionReduction.py index 32ed81cfbb46..252834a073b8 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/OSIRISDiffractionReduction.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/OSIRISDiffractionReduction.py @@ -1,11 +1,3 @@ -"""*WIKI* - -== Source Code == -The source code for the Python Algorithm may be viewed at: [http://trac.mantidproject.org/mantid/browser/trunk/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/OSIRISDiffractionReduction.py OSIRISDiffractionReduction.py] - -The source code for the reducer class which is used may be viewed at: [http://trac.mantidproject.org/mantid/browser/trunk/Code/Mantid/scripts/Inelastic/osiris_diffraction_reducer.py osiris_diffraction_reducer.py] - -*WIKI*""" from mantid.kernel import * from mantid.api import * from mantid.simpleapi import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/QLines.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/QLines.py index 471e3a785f43..935077d15b87 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/QLines.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/QLines.py @@ -1,18 +1,3 @@ -"""*WIKI* - -The model that is being fitted is that of a δ-function (elastic component) of amplitude A(0) and Lorentzians of amplitude A(j) and HWHM W(j) where j=1,2,3. The whole function is then convolved with the resolution function. The -function and Lorentzians are intrinsically -normalised to unity so that the amplitudes represent their integrated areas. - -For a Lorentzian, the Fourier transform does the conversion: 1/(x^{2}+\delta^{2}) \Leftrightarrow exp[-2\pi(\delta k)]. -If x is identified with energy E and 2\pi k with t/\hbar where t is time then: 1/[E^{2}+(\hbar / \tau )^{2}] \Leftrightarrow exp[-t /\tau] and \sigma is identified with \hbar / \tau . -The program estimates the quasielastic components of each of the groups of spectra and requires the resolution file and optionally the normalisation file created by ResNorm. - -For a Stretched Exponential, the choice of several Lorentzians is replaced with a single function with the shape : \psi\beta(x) \Leftrightarrow exp[-2\pi(\sigma k)\beta]. This, in the energy to time FT transformation, is \psi\beta(E) \Leftrightarrow exp[-(t/\tau)\beta]. So \sigma is identified with (2\pi)\beta\hbar/\tau. -The model that is fitted is that of an elastic component and the stretched exponential and the program gives the best estimate for the \beta parameter and the width for each group of spectra. - -This routine was originally part of the MODES package. -*WIKI*""" - from mantid.simpleapi import * from mantid.kernel import StringListValidator, StringMandatoryValidator from mantid.api import PythonAlgorithm, AlgorithmFactory diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Quest.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Quest.py index 2a21f387d7f0..00a43ec9bf66 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Quest.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Quest.py @@ -1,11 +1,3 @@ -"""*WIKI* - -This is a variation of the stretched exponential option of [[IndirectBayes:Quasi|Quasi]]. For each spectrum a fit is performed for a grid of β and σ values. -The distribution of goodness of fit values is plotted. - -This routine was originally part of the MODES package. -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory from mantid.kernel import StringListValidator, StringMandatoryValidator from mantid.simpleapi import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/REFLReprocess.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/REFLReprocess.py index 78368a60e765..f2fa0d3eb9fa 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/REFLReprocess.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/REFLReprocess.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Re-reduce REFL data for an entire experiment using saved parameters - -*WIKI*""" - from mantid.api import * from mantid.kernel import * from mantid.simpleapi import * @@ -228,4 +222,3 @@ def _average_y_of_same_x_(q_min, q_step, q_max=2): ############################################################################################# AlgorithmFactory.subscribe(REFLReprocess) - diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ReactorSANSResolution.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ReactorSANSResolution.py index 2a03380e4ae9..66fad484c7e8 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ReactorSANSResolution.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ReactorSANSResolution.py @@ -1,10 +1,3 @@ -"""*WIKI* - -Compute the resolution in Q according to Mildner-Carpenter. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*""" import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ResNorm.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ResNorm.py index 6f1d1eb6eea9..9c1f229fde07 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ResNorm.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ResNorm.py @@ -1,12 +1,3 @@ -"""*WIKI* - -The routine varies the width of the resolution file to give a 'stretch factor' and the area provides an intensity normalisation factor. The fitted parameters are in the group workspace with suffix _ResNorm with additional suffices of Intensity & Stretch. -The fitted data are in the workspace ending in _ResNorm_Fit. - -This routine was originally part of the MODES package. - -*WIKI*""" - from mantid.api import PythonAlgorithm, AlgorithmFactory from mantid.kernel import StringListValidator, StringMandatoryValidator from mantid.simpleapi import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSAbsoluteScale.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSAbsoluteScale.py index 41ea80c89f43..acd880538e07 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSAbsoluteScale.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSAbsoluteScale.py @@ -1,8 +1,3 @@ -"""*WIKI* - -Calculate and apply absolute scale correction for SANS data - -*WIKI*""" import os import mantid.simpleapi as api from mantid.api import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSAzimuthalAverage1D.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSAzimuthalAverage1D.py index 10ace1c5377e..b6b4045e7a51 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSAzimuthalAverage1D.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSAzimuthalAverage1D.py @@ -1,6 +1,3 @@ -"""*WIKI* -Compute I(q) for reduced SANS data -*WIKI*""" from mantid.api import * from mantid.kernel import * import math diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSBeamSpreaderTransmission.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSBeamSpreaderTransmission.py index 21edcecd4d66..627a88773eb5 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSBeamSpreaderTransmission.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSBeamSpreaderTransmission.py @@ -1,6 +1,3 @@ -"""*WIKI* -Compute transmission using the beam spreader method -*WIKI*""" import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSDirectBeamTransmission.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSDirectBeamTransmission.py index 3e43f5d5cec8..962fe0f581f1 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSDirectBeamTransmission.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSDirectBeamTransmission.py @@ -1,6 +1,3 @@ -"""*WIKI* -Compute transmission using the direct beam method -*WIKI*""" import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSMask.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSMask.py index 4c694680e50a..d4789c2b3f4e 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSMask.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSMask.py @@ -1,9 +1,3 @@ -"""*WIKI* - -Apply mask to SANS detector - -*WIKI*""" - import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSReduction.py index 25d5ca0f3d90..9eb5e7272ae3 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSReduction.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSReduction.py @@ -1,8 +1,3 @@ -"""*WIKI* - -Basic SANS reduction workflow - -*WIKI*""" import mantid.simpleapi as api from mantid.api import * from mantid.kernel import * diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SavePlot1D.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SavePlot1D.py index 3d6eca7754c2..a840902f6f52 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SavePlot1D.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SavePlot1D.py @@ -1,13 +1,3 @@ -"""*WIKI* - -Save 1D plots to a png file, as part of autoreduction. Multiple spectra in the same workspace will be represented by curves on the same plot. Groupped workspaces will be shown as subplots. -If the workspace has more than one spectra, but less or equal to ten, labels will be shown. - -Note: the figures contain lines between points, no error bars. - -Note: Requires matplotlib version>= 1.2.0 - -*WIKI*""" import mantid,sys class SavePlot1D(mantid.api.PythonAlgorithm): @@ -106,4 +96,3 @@ def DoPlot(self,ws): mantid.api.AlgorithmFactory.subscribe(SavePlot1D) - diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SofQWMoments.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SofQWMoments.py index 92661916a943..60751de32f8d 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SofQWMoments.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SofQWMoments.py @@ -1,8 +1,3 @@ -"""*WIKI* - -Calculates the n^{th} moment M_n of y(Q,w) where M_n is the integral of w^n*y(Q,w) over all w for n=0 to 4. - -*WIKI*""" # Algorithm to start Bayes programs from mantid.simpleapi import * from mantid.api import PythonAlgorithm, AlgorithmFactory, MatrixWorkspaceProperty, WorkspaceGroupProperty diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Symmetrise.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Symmetrise.py index bfef49e385d6..9d794de0ac13 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Symmetrise.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Symmetrise.py @@ -1,10 +1,3 @@ -"""*WIKI* - -Symmetrise takes an asymmetric S(Q,w) - i.e. one in which the moduli of xmin & xmax are different. Typically xmax is > mod(xmin). -A negative value of x is chosen (Xcut) so that the curve for mod(Xcut) to xmax is reflected and inserted for x less than the Xcut. - -*WIKI*""" - # Algorithm to start Symmetrise from mantid.api import PythonAlgorithm, AlgorithmFactory from mantid.kernel import StringListValidator, StringMandatoryValidator diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/AbortRemoteJob.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/AbortRemoteJob.cpp index 55e35bb7c133..40c1e74755f3 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/AbortRemoteJob.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/AbortRemoteJob.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Abort a job that has been submitted to a remote compute resource. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/AbortRemoteJob.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidKernel/NullValidator.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/Authenticate.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/Authenticate.cpp index 35d4a4e8f93a..6e52c49a5de9 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/Authenticate.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/Authenticate.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Authenticate to the remote compute resource. This must be executed before calling any -other remote algorithms. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/Authenticate.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidKernel/FacilityInfo.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/DownloadRemoteFile.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/DownloadRemoteFile.cpp index 166cb67a5d95..bc24cf4cc0fd 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/DownloadRemoteFile.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/DownloadRemoteFile.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Download a file from a remote compute resource. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/DownloadRemoteFile.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidKernel/FacilityInfo.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/QueryAllRemoteJobs.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/QueryAllRemoteJobs.cpp index 2eaf5071717f..c0fad063911d 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/QueryAllRemoteJobs.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/QueryAllRemoteJobs.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Query a remote compute resource for all jobs the user has submitted. -Note that the output properties are all arrays. There will be one element for each job that was found. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/QueryAllRemoteJobs.h" #include "MantidKernel/NullValidator.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/QueryRemoteFile.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/QueryRemoteFile.cpp index d836fe433134..11a758b16eaf 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/QueryRemoteFile.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/QueryRemoteFile.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Retrieve a list of the files associated with the specified transaction from a remote -compute resource. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/QueryRemoteFile.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/QueryRemoteJob.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/QueryRemoteJob.cpp index dbc6432f598a..90f7aa2864ce 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/QueryRemoteJob.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/QueryRemoteJob.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Query a remote compute resource for a specific job the user has submitted. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/QueryRemoteJob.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidKernel/NullValidator.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/StartRemoteTransaction.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/StartRemoteTransaction.cpp index db14ba25fd01..ff706224f0c2 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/StartRemoteTransaction.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/StartRemoteTransaction.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Start a job transaction on a remote compute resource. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/StartRemoteTransaction.h" #include "MantidRemoteAlgorithms/SimpleJSON.h" #include "MantidKernel/FacilityInfo.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/StopRemoteTransaction.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/StopRemoteTransaction.cpp index eb545aac01e5..782f12f3032c 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/StopRemoteTransaction.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/StopRemoteTransaction.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Stop a job transaction on a remote compute resource. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/StopRemoteTransaction.h" #include "MantidRemoteAlgorithms/SimpleJSON.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/SubmitRemoteJob.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/SubmitRemoteJob.cpp index 9ead38384dbd..059757fa0f07 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/SubmitRemoteJob.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/SubmitRemoteJob.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Submit a job to be executed on the specified remote compute resource. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/SubmitRemoteJob.h" #include "MantidKernel/BoundedValidator.h" #include "MantidKernel/MandatoryValidator.h" diff --git a/Code/Mantid/Framework/RemoteAlgorithms/src/UploadRemoteFile.cpp b/Code/Mantid/Framework/RemoteAlgorithms/src/UploadRemoteFile.cpp index 9c275aaf5577..d0010b3aeb8d 100644 --- a/Code/Mantid/Framework/RemoteAlgorithms/src/UploadRemoteFile.cpp +++ b/Code/Mantid/Framework/RemoteAlgorithms/src/UploadRemoteFile.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -Uploads a file to the specified compute resource. Presumably, the file is a python script -or input data necessary to run a Mantid algorithm on the remote compute resource. - -For more details, see the [[Remote_Job_Submission_API|remote job submission API docs]]. - -*WIKI*/ - #include "MantidRemoteAlgorithms/UploadRemoteFile.h" #include "MantidKernel/MandatoryValidator.h" #include "MantidKernel/FacilityInfo.h" diff --git a/Code/Mantid/Framework/SINQ/src/InvertMDDim.cpp b/Code/Mantid/Framework/SINQ/src/InvertMDDim.cpp index 900da9f43dd8..2f71c9b7c8d3 100644 --- a/Code/Mantid/Framework/SINQ/src/InvertMDDim.cpp +++ b/Code/Mantid/Framework/SINQ/src/InvertMDDim.cpp @@ -1,12 +1,3 @@ -/*WIKI* -== Description == - -InvertMDDim inverts the dimensions of a MDHistoWorkspace. It copies the data around to -match the new dimensions. This algorithm is useful when dealing with storage order -issues. - - *WIKI*/ - /** * This Algorithms inverts the dimensions of a MD data set. The * application area is when fixing up MD workspaces which had to have the diff --git a/Code/Mantid/Framework/SINQ/src/LoadFlexiNexus.cpp b/Code/Mantid/Framework/SINQ/src/LoadFlexiNexus.cpp index f6eba25f9cca..d43d385aa087 100644 --- a/Code/Mantid/Framework/SINQ/src/LoadFlexiNexus.cpp +++ b/Code/Mantid/Framework/SINQ/src/LoadFlexiNexus.cpp @@ -1,38 +1,3 @@ -/*WIKI* - -== Description == -This algorithm is a flexible NeXus file loader. Data loading is -driven by a dictionary. Correspondingly the algorithm takes as -arguments: a filename, a path to a dictionary file and an output -workspace name. - -The dictionary itself is a list of key=value pairs, one per line. -Normally dictionary entries take the form key-path-into-Nexus-file. -The default action is to store the data found at path-into-NeXus-file -under key key in the Run information of the result workspace. But some -keys are interpreted specially: -;data=path-into-nexus-file -: This is a required entry. path-into-nexus-file is the path in the NeXus file to the data which is the main bulk workspace data. Usually the counts. From the dimensionality of this data the type of result workspace is determined. If the rank is <= 2, then a Workspace2D is created, else a MDHistoWorkspace. -;x-axis=path-into-nexus-file -: The data found under the path into the NeXus file will be used as axis 0 on the dataset -;x-axis-name=text -: The text specified will become the name of the axis 0 -;y-axis=path-into-nexus-file -: The data found under the path into the NeXus file will be used as axis 1 on the dataset -;y-axis-name=text -: The text specified will become the name of the axis 1 -;z-axis=path-into-nexus-file -: The data found under the path into the NeXus file will be used as axis 2 on the dataset -;z-axis-name=text -: The text specified will become the name of the axis 0 -;title=path-into-nexus-file or text -: If the value contains a / then it is interpreted as a path into the NeXus file, the value of which will be stored as workspace title. Else the text value will be stored as the title name directly. -;sample=path-into-nexus-file or text -: If the value contains a / then it is interpreted as a path into the NeXus file, the value of which will be stored as workspace sample. Else the text value will be stored as the sample name directly. - -Please note that the dimensions on the MDHistoWorkspace are inverted when compared with the ones in the NeXus file. This is a fix which allows to efficiently transfer the NeXus data in C storage order into the MDHistoWorkspace which has fortran storage order. - -*WIKI*/ #include "MantidSINQ/LoadFlexiNexus.h" #include "MantidAPI/FileProperty.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/SINQ/src/MDHistoToWorkspace2D.cpp b/Code/Mantid/Framework/SINQ/src/MDHistoToWorkspace2D.cpp index 8dcdf3a54ecf..1c4c4420117d 100644 --- a/Code/Mantid/Framework/SINQ/src/MDHistoToWorkspace2D.cpp +++ b/Code/Mantid/Framework/SINQ/src/MDHistoToWorkspace2D.cpp @@ -1,14 +1,3 @@ -/*WIKI* - -MDHistoToWorkspace2D flattens a MDHistoWorkspace into a Workspace2D. It can process MDHistoWorkspaces of any dimensionality. -The last dimension of the MDHistoWorkspace becomes -the spectra length. Flattening happens such that the first dimension of the MDHistoWorkspace -is the slowest varying, the second the second slowest varying and so on. - -This tool is useful as many algorithms in Mantid only apply to Workspace2D. After -conversion with MDHistoToWorkspace2D such algorithms can also be applied to MD data. -*WIKI*/ - /** * This algorithm flattens a MDHistoWorkspace to a Workspace2D. Mantid has far more tools * to deal with W2D then for MD ones. diff --git a/Code/Mantid/Framework/SINQ/src/PoldiAutoCorrelation5.cpp b/Code/Mantid/Framework/SINQ/src/PoldiAutoCorrelation5.cpp index 1137b62adfc4..c08670ba78f1 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiAutoCorrelation5.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiAutoCorrelation5.cpp @@ -1,17 +1,3 @@ -/*WIKI* -PoldiAutoCorrelation belongs to the family of algorithms used to analyze POLDI data. It performs -the auto-correlation method described in the POLDI concept paper. - -It's possible to apply it to a workspace containing raw data from a single run or a workspace with merged data -from several measurements. The only requirement is that a correctly configured POLDI instrument is present -in the workspace and that its parameters (detector definition, chopper parameters, etc.) are in accordance with -data dimensions. - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/SINQ/src/PoldiFitPeaks1D.cpp b/Code/Mantid/Framework/SINQ/src/PoldiFitPeaks1D.cpp index 4dd5cd75c5df..2d3cc7a7d620 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiFitPeaks1D.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiFitPeaks1D.cpp @@ -1,14 +1,3 @@ -/*WIKI* -PoldiFitPeaks1D takes a TableWorkspace with peaks (for example from [[ PoldiPeakSearch ]]) and a spectrum from -[[ PoldiAutoCorrelation ]] and tries to fit a Gaussian peak profile to the spectrum for each peak. Usually, the -peaks are accompanied by a quadratic background, so this is fitted as well. - -The implementation is very close to the original POLDI analysis software (using the same profile function). One -point where this routine differs is error calculation. In the original program the parameter errors were adjusted -by averaging \chi^2-values, but this does not work properly if there is an outlier caused by a bad -fit for one of the peaks. -*WIKI*/ - #include "MantidAPI/WorkspaceProperty.h" #include "MantidAPI/WorkspaceFactory.h" #include "MantidAPI/WorkspaceGroup.h" diff --git a/Code/Mantid/Framework/SINQ/src/PoldiLoadChopperSlits.cpp b/Code/Mantid/Framework/SINQ/src/PoldiLoadChopperSlits.cpp index 5fc5a60aa5e9..fa6c8512f86e 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiLoadChopperSlits.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiLoadChopperSlits.cpp @@ -1,13 +1,3 @@ -/*WIKI* - - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/SINQ/src/PoldiLoadIPP.cpp b/Code/Mantid/Framework/SINQ/src/PoldiLoadIPP.cpp index b8ded546396d..1cad561b7903 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiLoadIPP.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiLoadIPP.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/SINQ/src/PoldiLoadLog.cpp b/Code/Mantid/Framework/SINQ/src/PoldiLoadLog.cpp index fcdb82e1ab50..d8a943b3f1fd 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiLoadLog.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiLoadLog.cpp @@ -1,12 +1,3 @@ -/*WIKI* - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/SINQ/src/PoldiLoadSpectra.cpp b/Code/Mantid/Framework/SINQ/src/PoldiLoadSpectra.cpp index a090f7151918..8fa0d488bdd9 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiLoadSpectra.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiLoadSpectra.cpp @@ -1,13 +1,3 @@ -/*WIKI* - - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/SINQ/src/PoldiPeakDetection2.cpp b/Code/Mantid/Framework/SINQ/src/PoldiPeakDetection2.cpp index f6d8165ae853..43f758861fa4 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiPeakDetection2.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiPeakDetection2.cpp @@ -1,13 +1,3 @@ -/*WIKI* - - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/SINQ/src/PoldiPeakSearch.cpp b/Code/Mantid/Framework/SINQ/src/PoldiPeakSearch.cpp index d9c4e91d3f67..1999ec737e5b 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiPeakSearch.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiPeakSearch.cpp @@ -1,29 +1,3 @@ -/*WIKI* -PoldiPeakSearch is a peak-finding routine for POLDI auto-correlation data. The algorithm is implemented according -to the original data analysis software and their results match closely. - -The algorithm performs the following steps: -# Map each point of the spectrum y, except the first and the last to the sum of its value and its neighbor's values: - y'_i = y_{i-1} + y_{i} + y_{i+1} - The new spectrum y' contains n-2 points when y contains n. -# Identify peak positions in y', which is done with a recursive algorithm, consisting of these steps: -## Find the position of the maximum, i_{max} in the list, store in peak-list. -## Split the list in two parts, [i_{0} + \Delta, i_{max} - \Delta) and (i_{max} + \Delta, i_{n} - \Delta], -where \Delta is the mininum number of data points between two peaks. -## If ranges are valid, perform algorithm on each of the sublists, append returned lists to peak-list. -## Return peak-list. -# Sort list by value in descending order, keep the first N_{max} items of the list. -# Map peak positions from y' back to y -# Perform background and fluctuation estimation: -## Extract all points from y (except the first and the last) that are further than \Delta elements away from any peak position -## Calculate median of these points as location estimate (\bar{b}) -## Calculate Sn as scale estimator (\bar(s)) -# Estimate peak intensity as y_{i} -# If a minimum peak height is set, discard all peaks that are smaller than this, if not, discard all peaks that are lower than 3\cdot\bar{s} + \bar{b} - -The peaks are stored in a new table workspace. -*WIKI*/ - #include "MantidSINQ/PoldiPeakSearch.h" #include "MantidAPI/WorkspaceProperty.h" diff --git a/Code/Mantid/Framework/SINQ/src/PoldiRemoveDeadWires.cpp b/Code/Mantid/Framework/SINQ/src/PoldiRemoveDeadWires.cpp index 00070b15a08d..5f578b678862 100644 --- a/Code/Mantid/Framework/SINQ/src/PoldiRemoveDeadWires.cpp +++ b/Code/Mantid/Framework/SINQ/src/PoldiRemoveDeadWires.cpp @@ -1,13 +1,3 @@ -/*WIKI* - - -== How to use algorithm with other algorithms == -This algorithm is designed to work with other algorithms to -proceed POLDI data. The introductions can be found in the -wiki page of [[PoldiProjectRun]]. - - - *WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/SINQ/src/ProjectMD.cpp b/Code/Mantid/Framework/SINQ/src/ProjectMD.cpp index 3d0db88157b9..f7b58433fd46 100644 --- a/Code/Mantid/Framework/SINQ/src/ProjectMD.cpp +++ b/Code/Mantid/Framework/SINQ/src/ProjectMD.cpp @@ -1,25 +1,3 @@ -/*WIKI* -== Description == - -ProjectMD reduces the dimensionality of a MHDistoWorkspace by summing it along a -specified dimension. Example: you have a 3D MDHistoWorkspace with X,Y,TOF. -You sum along Z (TOF) and the result is a 2D workspace X,Y which gives you a -detector image. - -Besides the obvious input and output workspaces you have to specify the dimension -along which you wish to sum. The following code is used: -;X -: Dimension 0 -;Y -: Dimension 1 -;Z -: Dimension 2 -;K -: Dimension 3 -The summation range also has to be specified. This is in indices into the -appropriate axis. -*WIKI*/ - #include "MantidSINQ/ProjectMD.h" #include "MantidKernel/ListValidator.h" #include "MantidGeometry/MDGeometry/MDTypes.h" diff --git a/Code/Mantid/Framework/SINQ/src/SINQTranspose3D.cpp b/Code/Mantid/Framework/SINQ/src/SINQTranspose3D.cpp index c2d70951e4e9..761905a3573f 100644 --- a/Code/Mantid/Framework/SINQ/src/SINQTranspose3D.cpp +++ b/Code/Mantid/Framework/SINQ/src/SINQTranspose3D.cpp @@ -1,20 +1,3 @@ -/*WIKI* -== Description == - -SINQTranspose3D is an algorithm which fixes some problems with SINQ data. -This algorithm is probably not generally useful. It basically reorders -the data in a 3D MDHistoWorkspace. The following reordering options are -available: -;Y,X,Z -: Swaps X and Y in the data -;X,Z,Y -: Swaps Y and Z in the data -;TRICS -: Swaps from C to Fortran storage order -;AMOR -: Converts storage order and swaps X and Y - - *WIKI*/ #include "MantidSINQ/SINQTranspose3D.h" #include "MantidKernel/ListValidator.h" #include "MantidGeometry/MDGeometry/MDTypes.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/AlignAndFocusPowder.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/AlignAndFocusPowder.cpp index dfa6f92b3da6..3c7db0291b17 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/AlignAndFocusPowder.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/AlignAndFocusPowder.cpp @@ -1,24 +1,3 @@ -/*WIKI* - -This is a workflow algorithm that does the bulk of the work for time focusing diffraction data. This is done by executing several sub-algorithms as listed below. - -# [[RemovePromptPulse]] (event workspace only) -# [[CompressEvents]] (event workspace only) -# [[CropWorkspace]] -# [[MaskDetectors]] -# [[Rebin]] or [[ResampleX]] if not d-space binning -# [[AlignDetectors]] -# If LRef, minwl, or DIFCref are specified: -## [[ConvertUnits]] to time-of-flight -## [[UnwrapSNS]] -## [[RemoveLowResTOF]] -## [[ConvertUnits]] to d-spacing -# [[Rebin]] if d-space binning -# [[DiffractionFocussing]] -# [[SortEvents]] (event workspace only) -# [[EditInstrumentGeometry]] (if appropriate) -# [[ConvertUnits]] to time-of-f -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/ComputeSensitivity.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/ComputeSensitivity.cpp index 609069a8adde..c965ca48fdaa 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/ComputeSensitivity.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/ComputeSensitivity.cpp @@ -1,14 +1,3 @@ -/*WIKI* -Calculate the EQSANS detector sensitivity. This workflow algorithm uses the -reduction parameters found in the property manager object passed as the -ReductionProperties parameter to load the given data file, apply all the -necessary corrections to it and compute the sensitivity correction. - -Setting the PatchWorkspace property allows you to patch areas of the -detector. All masked pixels in the patch workspace will be patched. -The value assigned to a patched pixel is the average of all unmasked -pixels in this patched pixel's tube. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -105,4 +94,3 @@ void ComputeSensitivity::exec() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsAbsoluteUnitsReduction.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsAbsoluteUnitsReduction.cpp index d7f0b0d179e8..8a116679ad30 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsAbsoluteUnitsReduction.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsAbsoluteUnitsReduction.cpp @@ -1,61 +1,3 @@ -/*WIKI* - -This algorithm is responsible for taking an absolute units sample and -converting it to an integrated value (one value for entire workspace) for that -sample. A corresponding detector vanadium can be used in conjunction with the -data reduction. The diagram below shows the workflow. The -AbsUnitsIncidentEnergy parameter needs to be passed via a property manager -since the absolute units sample may have been measured at an energy different -from the sample of interest. Parameters in italics are controlled by the -[[InstrumentParameterFile | instrument parameter file (IPF)]] unless provided -to the algorithm via a property manager. The mappings are given below. - -{| class="wikitable" -|- -! Parameter !! IPF Mapping -|- -| VanadiumMass || vanadium-mass -|- -| AbsUnitsMinimumEnergy || monovan-integr-min -|- -| AbsUnitsMaximumEnergy || monovan-integr-max -|} - -The last two parameters are used to create a single bin for the ''Rebin'' -algorithm. The dashed oval parameter, VanadiumRmm, is taken from the atomic -information for the molecular mass of Vanadium. The open circle represents -detector diagnostic parameters and they are detailed in the table below. - -{| class="wikitable" -|- -! Parameter !! IPF Mapping !! [[DetectorDiagnostic]] Mapping -|- -| HighCounts || diag_huge || HighThreshold -|- -| LowCounts || diag_tiny || LowThreshold -|- -| AbsUnitsLowOutlier || monovan_lo_bound || LowOutlier -|- -| AbsUnitsHighOutlier || monovan_hi_bound || HighOutlier -|- -| AbsUnitsMedianTestLow || monovan_lo_frac || LowThresholdFraction -|- -| AbsUnitsMedianTestHigh || monovan_hi_frac || HighThresholdFraction -|- -| AbsUnitsErrorBarCriterion || diag_samp_sig || SignificanceTest -|} - -If a detector vanadium is used, the processed sample workspace is multiplied -by a factor containing the sample mass (SampleMass), sample molecular mass -(SampleRmm) and the cross-section (Scattering XSec) given by: -\frac{(\sigma^{V}_{incoherent}+\sigma^{V}_{coherent})\times10^{3}}{4\pi} -with the cross-section units of millibarns/steradian. - -=== Workflow === -[[File:DgsAbsoluteUnitsReductionWorkflow.png]] - -*WIKI*/ - #include "MantidWorkflowAlgorithms/DgsAbsoluteUnitsReduction.h" #include "MantidAPI/PropertyManagerDataService.h" #include "MantidKernel/Atom.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsConvertToEnergyTransfer.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsConvertToEnergyTransfer.cpp index 845048876c80..d0b578cec3d4 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsConvertToEnergyTransfer.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsConvertToEnergyTransfer.cpp @@ -1,38 +1,3 @@ -/*WIKI* - -This algorithm is responsible for making the conversion from time-of-flight to -energy transfer for direct geometry spectrometers. The diagram below shows the -workflow for the algorithm. The SNS instruments have a log called EnergyRequest -which allows the IncidentEnergyGuess parameter to be left blank. Also, SNS -instruments need to pass a monitor workspace to ''GetEi'' since they are -separate from the sample workspace. Parameters in italics are controlled by the -[[InstrumentParameterFile|instrument parameter file (IPF)]] unless provided to -the algorithm via a property manager. The mappings are given below. - -{| class="wikitable" -|- -! Parameter !! IPF Mapping -|- -| TibTofRangeStart || bkgd-range-min -|- -| TibTofRangeEnd || bkgd-range-max -|} - -Parameters in italics with dashed perimeters are only controllable by the IPF -name given. All underlined parameters are fixed and not controllable. -The EnergyTransferRange parameter takes the canonical Mantid notation of -(start, step, stop). However, it can be left blank and the following values -will be used -(-0.5E^{Guess}_{i}, 0.01E^{Guess}_{i}, 0.99E^{Guess}_{i}). - -The use of the SofPhiEIsDistribution parameter in the last Rebin call is used -to set the ''Rebin'' algorithm parameter PreserveEvents. - -=== Workflow === -[[File:DgsConvertToEnergyTransferWorkflow.png]] - -*WIKI*/ - #include "MantidWorkflowAlgorithms/DgsConvertToEnergyTransfer.h" #include "MantidAPI/PropertyManagerDataService.h" #include "MantidAPI/WorkspaceHistory.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsDiagnose.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsDiagnose.cpp index e4a26ec2f53f..46828139043d 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsDiagnose.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsDiagnose.cpp @@ -1,91 +1,3 @@ -/*WIKI* - -This algorithm is responsible for setting up the necessary workspaces to -hand off to the [[DetectorDiagnostic]] algorithm. The diagram below shows the -manipulations done by this algorithm. Workspaces that have dashed lines are -optional. Parameters in italics are retrieved from the -[[InstrumentParameterFile|instrument parameter file (IPF)]] unless they are -provided to the algorithm via a property manager. The mappings for these -parameters are shown below. - -{| class="wikitable" -|- -! Parameter !! IPF Mapping !! [[DetectorDiagnostic]] Mapping -|- -| RejectZeroBackground || diag_samp_zero || - -|- -| BackgroundCheck || check_background || - -|- -| PsdBleed || diag_bleed_test || - -|- -| BackgroundTofStart || bkgd-range-min || - -|- -| BackgroundTofEnd || bkgd-range-max || - -|- -| DetVanRatioVariation || diag_variation || DetVanRatioVariation -|} - -The open circles represent groups of parameters. They are detailed in the tables -below. All parameters given here act like italicized parameters. - -====Detectors Outside Limits Parameters==== -{| class="wikitable" -|- -! Parameter !! IPF Mapping !! [[DetectorDiagnostic]] Mapping -|- -| HighCounts || diag_huge || HighThreshold -|- -| LowCounts || diag_tiny || LowThreshold -|- -|} - -====Median Detector Test Parameters==== -{| class="wikitable" -|- -! Parameter !! IPF Mapping !! [[DetectorDiagnostic]] Mapping -|- -| HighOutlier || diag_van_out_hi || HighOutlier -|- -| LowOutlier || diag_van_out_lo || LowOutlier -|- -| MedianTestHigh || diag_van_hi || HighThresholdFraction -|- -| MedianTestLow || diag_van_lo || LowThresholdFraction -|- -| ErrorBarCriterion || diag_van_sig || SignificanceTest -|- -| MeanTestLevelsUp || diag_van_levels || LevelsUp -|- -| MedianTestCorrectForSolidAngle || diag_correct_solid_angle || CorrectForSolidAngle -|} - -====Sample Background Parameters==== -{| class="wikitable" -|- -! Parameter !! IPF Mapping !! [[DetectorDiagnostic]] Mapping -|- -| SamBkgMedianTestHigh || diag_samp_hi || SampleBkgHighAcceptanceFactor -|- -| SamBkgMedianTestLow || diag_samp_lo || SampleBkgLowAcceptanceFactor -|- -| SamBkgErrorBarCriterion || diag_samp_sig || SampleBkgSignificanceTest -|} - -====PsdBleed Parameters==== -{| class="wikitable" -|- -! Parameter !! IPF Mapping !! [[DetectorDiagnostic]] Mapping -|- -| MaxFramerate || diag_bleed_maxrate || MaxTubeFramerate -|- -| IgnoredPixels || diag_bleed_pixels || NIgnoredCentralPixels -|} - -=== Workflow === -[[File:DgsDiagnoseWorkflow.png]] - -*WIKI*/ - #include "MantidWorkflowAlgorithms/DgsDiagnose.h" #include "MantidAPI/PropertyManagerDataService.h" #include "MantidDataObjects/MaskWorkspace.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsPreprocessData.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsPreprocessData.cpp index 0c9da40c4a19..9357a2192636 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsPreprocessData.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsPreprocessData.cpp @@ -1,33 +1,3 @@ -/*WIKI* - -This algorithm is responsible for normalising data via a given incident beam -parameter. This parameter, IncidentBeamNormalisation, is controlled from the -reduction property manager. It can have the values ''None'', ''ByCurrent'' or -''ByMonitor''. For SNS, monitor workspaces need to be passed. Parameters in -italics are controlled by the -[[InstrumentParameterFile | instrument parameter file (IPF)]] unless provided to -the algorithm via a property manager. The mappings are given below. - -{| class="wikitable" -|- -! Parameter !! IPF Mapping -|- -| MonitorIntRangeLow || norm-mon1-min -|- -| MonitorIntRangeHigh || norm-mon1-max -|} - -Parameters in italics with dashed perimeters are only controllable by the IPF -name given. All underlined parameters are fixed via other input method. If -normalisation is performed, a sample log called -DirectInelasticReductionNormalisedBy is added to the resulting workspace with -the normalisation procedure used. - -=== Workflow === -[[File:DgsPreprocessDataWorkflow.png]] - -*WIKI*/ - #include "MantidWorkflowAlgorithms/DgsPreprocessData.h" #include "MantidAPI/AlgorithmManager.h" #include "MantidAPI/AlgorithmProperty.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsProcessDetectorVanadium.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsProcessDetectorVanadium.cpp index add6c8b607ef..04301571c252 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsProcessDetectorVanadium.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsProcessDetectorVanadium.cpp @@ -1,33 +1,3 @@ -/*WIKI* - -This algorithm is responsible for processing the detector vanadium in the form -required for the sample data normalisation in the convert to energy transfer -process. Parameters in italics are controlled by the -[[InstrumentParameterFile|instrument parameter file (IPF)]] unless provided -to the algorithm via a property manager. The mappings are given below. - -{| class="wikitable" -|- -! Parameter !! IPF Mapping -|- -| DetVanIntRangeLow || wb-integr-min -|- -| DetVanIntRangeHigh || wb-integr-max -|} - -Parameters in italics with dashed perimeters are only controllable by the IPF -name given. All underlined parameters are fixed and not controllable. -If the input detector vanadium is in TOF units and that is the -requested units for integration, the ''ConvertUnits'' algorithm does not run. -The range parameters feeding into ''Rebin'' are used to make a single bin. -The resulting integrated vanadium workspace can be saved to a file using the -reduction property manager with the boolean property SaveProcessedDetVan. - -=== Workflow === -[[File:DgsProcessDetectorVanadiumWorkflow.png]] - -*WIKI*/ - #include "MantidWorkflowAlgorithms/DgsProcessDetectorVanadium.h" #include "MantidAPI/PropertyManagerDataService.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsReduction.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsReduction.cpp index 5af5380ec3f2..d567fce4e1ed 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsReduction.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsReduction.cpp @@ -1,19 +1,3 @@ -/*WIKI* - -This is the top-level workflow algorithm for direct geometry spectrometer -data reduction. This algorithm is responsible for gathering the necessary -parameters and generating calls to other workflow or standard algorithms. - -=== Workflow === -Parameters for the child algorithms are not shown due to sheer number. They -will be detailed in the child algorithm diagrams. Items in parallelograms are -output workspaces from their respective algorithms. Not all output workspaces -are subsequently used by other algorithms. - -[[File:DgsReductionWorkflow.png]] - - *WIKI*/ - #include "MantidWorkflowAlgorithms/DgsReduction.h" #include "MantidAPI/FileProperty.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsRemap.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsRemap.cpp index e3d6e0ee1712..d6e1d6fc3722 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsRemap.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/DgsRemap.cpp @@ -1,13 +1,3 @@ -/*WIKI* - -This algorithm is responsible for masking and grouping the given input workspace. -One can use the ExecuteOppositeOrder to do grouping first then masking. - -=== Workflow === -[[File:DgsRemapWorkflow.png]] - -*WIKI*/ - #include "MantidWorkflowAlgorithms/DgsRemap.h" #include "MantidAPI/FileProperty.h" #include "MantidDataObjects/GroupingWorkspace.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSDarkCurrentSubtraction.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSDarkCurrentSubtraction.cpp index aed0e4532158..ca1fa933b469 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSDarkCurrentSubtraction.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSDarkCurrentSubtraction.cpp @@ -1,16 +1,3 @@ -/*WIKI* -Subtract the dark current from an EQSANS data set. -This workflow algorithm will: - -- Properly load the dark current data set - -- Normalize the dark current to the data taking period - -- Subtract the dark current from the input workspace - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -208,4 +195,3 @@ void EQSANSDarkCurrentSubtraction::exec() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSLoad.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSLoad.cpp index d8fdfb62d90f..fdfc3ed55708 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSLoad.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSLoad.cpp @@ -1,20 +1,3 @@ -/*WIKI* -Workflow algorithm that loads EQSANS event data and applies basic corrections -to the workspace. Those include: - -- Moving the detector at its proper position in Z - -- Moving the detector according to the beam center - -- Correcting the TOF - -- Applying TOF cuts - -- Gathering meta-data information such as configuration mask and moderator position - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -746,4 +729,3 @@ void EQSANSLoad::exec() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSMonitorTOF.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSMonitorTOF.cpp index b412a374fc1d..740cb1824b9c 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSMonitorTOF.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSMonitorTOF.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Converts the TOF into a wavelength for the beam monitor. This algorithm needs to be run once on every data set. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -399,4 +394,3 @@ double EQSANSMonitorTOF::getTofOffset(MatrixWorkspace_const_sptr inputWS, bool f } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSPatchSensitivity.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSPatchSensitivity.cpp index 684cbe83adc2..798e2c91e330 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSPatchSensitivity.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSPatchSensitivity.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Calculate the detector sensitivity and patch the pixels that are masked in -a second workspace. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -156,4 +152,3 @@ void EQSANSPatchSensitivity::exec() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSQ2D.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSQ2D.cpp index 48af8be0a8d7..93aa95441efc 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSQ2D.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/EQSANSQ2D.cpp @@ -1,9 +1,3 @@ -/*WIKI* -Computes I(Qx,Qy) for EQSANS data using Qxy to each frame, as appropriate. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -207,4 +201,3 @@ void EQSANSQ2D::exec() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRDarkCurrentSubtraction.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRDarkCurrentSubtraction.cpp index f0dd03e31a62..219a5ec7675f 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRDarkCurrentSubtraction.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRDarkCurrentSubtraction.cpp @@ -1,17 +1,3 @@ -/*WIKI* -Subtract the dark current from a HFIR SANS data set. -This workflow algorithm will: - -- Properly load the dark current data set - -- Normalize the dark current to the data taking period - -- Subtract the dark current from the input workspace - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -187,4 +173,3 @@ double HFIRDarkCurrentSubtraction::getCountingTime(MatrixWorkspace_sptr inputWS) } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRLoad.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRLoad.cpp index 0405f6cc6efe..387bfb186001 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRLoad.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRLoad.cpp @@ -1,17 +1,3 @@ -/*WIKI* - -Workflow algorithm that loads HFIR SANS data and applies basic corrections -to the workspace. Those include: - -- Moving the detector at its proper position in Z - -- Moving the detector according to the beam center - -- Gathering meta-data - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -265,4 +251,3 @@ void HFIRLoad::exec() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRSANSNormalise.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRSANSNormalise.cpp index 910fcb8c7d86..7bd61f31a9e8 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRSANSNormalise.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/HFIRSANSNormalise.cpp @@ -1,8 +1,3 @@ -/*WIKI* - -Performs data normalisation for HFIR SANS. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -75,4 +70,3 @@ void HFIRSANSNormalise::exec() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/MuonCalculateAsymmetry.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/MuonCalculateAsymmetry.cpp index 56a8305468da..90cf83cc8cf9 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/MuonCalculateAsymmetry.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/MuonCalculateAsymmetry.cpp @@ -1,14 +1,3 @@ -/*WIKI* -Converts loaded/prepared Muon data to a data suitable for analysis. - -Supports three modes: -* PairAsymmetry - asymmetry is calculated for a given pair of groups, using the alpha value provided. -* GroupAsymmetry - asymmetry between given group and Muon exponential decay is calculated. -* GroupCount - '''no asymmetry is calculated''', pure counts of the specified group are used. - -For every mode, either one or two data acquisition period workspaces can be provided. PeriodOperation determines in which way period data will be merged at the end. -*WIKI*/ - #include "MantidWorkflowAlgorithms/MuonCalculateAsymmetry.h" #include "MantidKernel/ListValidator.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/MuonLoad.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/MuonLoad.cpp index 802169f12551..a806af981ee9 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/MuonLoad.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/MuonLoad.cpp @@ -1,19 +1,3 @@ -/*WIKI* -The algorithm replicates the sequence of actions undertaken by MuonAnalysis in order to produce a Muon workspace ready for fitting. - -Specifically: -# Load the specified filename -# Apply dead time correction -# Group the workspace -# Offset, crop and rebin the workspace -# If the loaded data is multi-period - apply the specified operation to specified periods to get a single data set. -# Use [[MuonCalculateAsymmetry]] to get the resulting workspace. - -=== Workflow === -[[File:MuonWorkflow.png]] - -*WIKI*/ - #include "MantidWorkflowAlgorithms/MuonLoad.h" #include "MantidKernel/ArrayProperty.h" diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/RefReduction.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/RefReduction.cpp index 68fffc91dd24..7ce5e003c084 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/RefReduction.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/RefReduction.cpp @@ -1,7 +1,3 @@ -/*WIKI* -Reflectivity reduction workflow. This workflow algorithm computes the -specular and off-specular reflectivity for both REFM and REFL instruments. -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -763,4 +759,3 @@ MatrixWorkspace_sptr RefReduction::subtractBackground(MatrixWorkspace_sptr dataW } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/RefRoi.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/RefRoi.cpp index 947983a59ab0..26d8b4ef5dfc 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/RefRoi.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/RefRoi.cpp @@ -1,7 +1,3 @@ -/*WIKI* - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -201,4 +197,3 @@ void RefRoi::extract2D() } // namespace Algorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSBeamFinder.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSBeamFinder.cpp index 32fbf4f520ac..bba08898a50d 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSBeamFinder.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSBeamFinder.cpp @@ -1,9 +1,3 @@ -/*WIKI* -Beam finder workflow algorithm for SANS instruments. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -296,4 +290,3 @@ void SANSBeamFinder::maskEdges(MatrixWorkspace_sptr beamCenterWS, int high, int } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSBeamFluxCorrection.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSBeamFluxCorrection.cpp index b447873e4cd4..d667a0e3af3c 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSBeamFluxCorrection.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSBeamFluxCorrection.cpp @@ -1,16 +1,3 @@ -/*WIKI* - -Performs beam flux correction for TOF SANS data. - -The correction goes as follows: - -:::I({\lambda}) = I_0({\lambda}) / \Phi_{sample} - -where - -:::\Phi_{sample} = \frac{M_{sample}}{M_{ref}} \Phi_{ref} - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -153,4 +140,3 @@ MatrixWorkspace_sptr SANSBeamFluxCorrection::loadReference() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSSensitivityCorrection.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSSensitivityCorrection.cpp index 030dba8869ab..001867686777 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSSensitivityCorrection.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSSensitivityCorrection.cpp @@ -1,18 +1,3 @@ -/*WIKI* -This SANS workflow algorithm will compute the sensitivity correction -from a given flood field data set. It will apply the proper corrections -to the data according the the input property manager object. Those -corrections may include dark current subtraction, moving the beam center, -the solid angle correction, and applying a patch. - -If an input workspace is given, the computed correction will be applied -to that workspace. - -A Nexus file containing a pre-calculated sensitivity correction can also -be supplied for the case where we simply want to apply the correction to -an input workspace. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -359,4 +344,3 @@ void SANSSensitivityCorrection::exec() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSSolidAngleCorrection.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSSolidAngleCorrection.cpp index ae5146e1bd7f..ad8991225bf5 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSSolidAngleCorrection.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/SANSSolidAngleCorrection.cpp @@ -1,11 +1,3 @@ -/*WIKI* - -Performs a solid angle correction on all detector (non-monitor) spectra. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -234,4 +226,3 @@ void SANSSolidAngleCorrection::execEvent() } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupEQSANSReduction.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupEQSANSReduction.cpp index 80fdee8e7cda..66853e3ac392 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupEQSANSReduction.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupEQSANSReduction.cpp @@ -1,10 +1,3 @@ -/*WIKI* -Create a PropertyManager object setting the reduction options for EQSANS. -The property manager object is then added to the PropertyManagerDataService. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -984,4 +977,3 @@ void SetupEQSANSReduction::setupBackground(boost::shared_ptr re } } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupHFIRReduction.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupHFIRReduction.cpp index de840ffa1ae9..bd188967e515 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupHFIRReduction.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupHFIRReduction.cpp @@ -1,10 +1,3 @@ -/*WIKI* -Create a PropertyManager object setting the reduction options for HFIR SANS. -The property manager object is then added to the PropertyManagerDataService. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -1001,4 +994,3 @@ void SetupHFIRReduction::setupTransmission(boost::shared_ptr re } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupILLD33Reduction.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupILLD33Reduction.cpp index a4a9faccf323..49a8d509d7b9 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupILLD33Reduction.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/SetupILLD33Reduction.cpp @@ -1,10 +1,3 @@ -/*WIKI* -Create a PropertyManager object setting the reduction options for ILL D33 SANS TOF instrument. -The property manager object is then added to the PropertyManagerDataService. - -See [http://www.mantidproject.org/Reduction_for_HFIR_SANS SANS Reduction] documentation for details. - -*WIKI*/ //---------------------------------------------------------------------- // Includes //---------------------------------------------------------------------- @@ -862,4 +855,3 @@ void SetupILLD33Reduction::setupBackground(boost::shared_ptr re } } // namespace WorkflowAlgorithms } // namespace Mantid - diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/StepScan.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/StepScan.cpp index 6976177df9d0..52be7c7d02f8 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/StepScan.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/StepScan.cpp @@ -1,14 +1,3 @@ -/*WIKI* -This algorithm is for producing rocking curves from alignment scan runs. It is for use only with ADARA-style SNS datasets as it requires the 'scan_index' log variable. - -The algorithm optionally uses the [[MaskDetectors]] and/or [[FilterByXValue]] algorithms to restrict the region of data included. -'''N.B. If these options are used, then this algorithm will modify the input workspace.''' - -The [[SumEventsByLogValue]] algorithm is then called, with 'scan_index' as the log to sum against. -The row of the resulting table pertaining to scan_index=0 (which indicates 'not a scan point') is then removed. - -*WIKI*/ - #include "MantidWorkflowAlgorithms/StepScan.h" #include "MantidAPI/ITableWorkspace.h" #include "MantidAPI/WorkspaceValidators.h" diff --git a/Code/Mantid/docs/source/algorithms/AbortRemoteJob-v1.rst b/Code/Mantid/docs/source/algorithms/AbortRemoteJob-v1.rst new file mode 100644 index 000000000000..093496d0937d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AbortRemoteJob-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Abort a job that has been submitted to a remote compute resource. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst new file mode 100644 index 000000000000..8a2c49810f7b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst @@ -0,0 +1,72 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm uses a numerical integration method to calculate +attenuation factors resulting from absorption and single scattering in a +sample with the material properties given. Factors are calculated for +each spectrum (i.e. detector position) and wavelength point, as defined +by the input workspace. The sample is first bounded by a cuboid, which +is divided up into small cubes. The cubes whose centres lie within the +sample make up the set of integration elements (so you have a kind of +'Lego' model of the sample) and path lengths through the sample are +calculated for the centre-point of each element, and a numerical +integration is carried out using these path lengths over the volume +elements. + +Note that the duration of this algorithm is strongly dependent on the +element size chosen, and that too small an element size can cause the +algorithm to fail because of insufficient memory. + +Note that The number density of the sample is in +:math:`\mathrm{\AA}^{-3}` + +Choosing an absorption correction algorithm +------------------------------------------- + +This flow chart is given as a way of selecting the most appropriate of +the absorption correction algorithms. It also shows the algorithms that +must be run first in each case. Note that this does not cover the +following absorption correction algorithms: +:ref:`_algm-MonteCarloAbsorption` (correction factors for +a generic sample using a Monte Carlo instead of a numerical integration +method), +:ref:`_algm-MultipleScatteringCylinderAbsorption` +& :ref:`_algm-AnvredCorrection` (corrections in a spherical +sample, using a method imported from ISAW). Also, HRPD users can use the +:ref:`_algm-HRPDSlabCanAbsorption` to add rudimentary +calculations of the effects of the sample holder. |AbsorptionFlow.png| + +Assumptions +^^^^^^^^^^^ + +This algorithm assumes that the (parallel) beam illuminates the entire +sample **unless** a 'gauge volume' has been defined using the +:ref:`_algm-DefineGaugeVolume` algorithm (or by otherwise +adding a valid XML string `defining a +shape `__ to a `Run `__ property called +"GaugeVolume"). In this latter case only scattering within this volume +(and the sample) is integrated, because this is all the detector can +'see'. The full sample is still used for the neutron paths. (**N.B.** If +your gauge volume is of axis-aligned cuboid shape and fully enclosed by +the sample then you will get a more accurate result from the +:ref:`_algm-CuboidGaugeVolumeAbsorption` +algorithm.) + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must have units of wavelength. The +`instrument `__ associated with the workspace must be fully +defined because detector, source & sample position are needed. + +.. |AbsorptionFlow.png| image:: AbsorptionFlow.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AddLogDerivative-v1.rst b/Code/Mantid/docs/source/algorithms/AddLogDerivative-v1.rst new file mode 100644 index 000000000000..0d2611f33012 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AddLogDerivative-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm performs a simple numerical derivative of the values in a +sample log. + +The 1st order derivative is simply: dy = (y1-y0) / (t1-t0), which is +placed in the log at t=(t0+t1)/2 + +Higher order derivatives are obtained by performing the equation above N +times. Since this is a simple numerical derivative, you can expect the +result to quickly get noisy at higher derivatives. + +If any of the times in the logs are repeated, then those repeated time +values will be skipped, and the output derivative log will have fewer +points than the input. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AddPeak-v1.rst b/Code/Mantid/docs/source/algorithms/AddPeak-v1.rst new file mode 100644 index 000000000000..4560257b6bb3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AddPeak-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Adds a `IPeak `__ to a `PeaksWorkspace `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AddSampleLog-v1.rst b/Code/Mantid/docs/source/algorithms/AddSampleLog-v1.rst new file mode 100644 index 000000000000..023fafba3a51 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AddSampleLog-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Workspaces contain information in logs. Often these detail what happened +to the sample during the experiment. This algorithm allows one named log +to be entered. + +The log can be either a String, a Number, or a Number Series. If you +select Number Series, the workspace start time will be used as the time +of the log entry, and the number in the text used as the (only) value. + +If the LogText contains a numeric value, the created log will be of +integer type if an integer is passed and floating point (double) +otherwise. This applies to both the Number & Number Series options. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AddTimeSeriesLog-v1.rst b/Code/Mantid/docs/source/algorithms/AddTimeSeriesLog-v1.rst new file mode 100644 index 000000000000..754c0459972f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AddTimeSeriesLog-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates/updates a time-series log entry on a chosen workspace. The given +timestamp & value are appended to the named log entry. If the named +entry does not exist then a new log is created. A time stamp must be +given in ISO8601 format, e.g. 2010-09-14T04:20:12. + +By default, the given value is interpreted as a double and a double +series is either created or expected. However, if the "Type" is set to +"int" then the value is interpreted as an integer and an integer is +either created or expected. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AlignAndFocusPowder-v1.rst b/Code/Mantid/docs/source/algorithms/AlignAndFocusPowder-v1.rst new file mode 100644 index 000000000000..79541547fe98 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AlignAndFocusPowder-v1.rst @@ -0,0 +1,35 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This is a workflow algorithm that does the bulk of the work for time +focusing diffraction data. This is done by executing several +sub-algorithms as listed below. + +#. :ref:`_algm-RemovePromptPulse` (event workspace only) +#. :ref:`_algm-CompressEvents` (event workspace only) +#. :ref:`_algm-CropWorkspace` +#. :ref:`_algm-MaskDetectors` +#. :ref:`_algm-Rebin` or :ref:`_algm-ResampleX` if not d-space binning +#. :ref:`_algm-AlignDetectors` +#. If LRef, minwl, or DIFCref are specified: + + #. :ref:`_algm-ConvertUnits` to time-of-flight + #. :ref:`_algm-UnwrapSNS` + #. :ref:`_algm-RemoveLowResTOF` + #. :ref:`_algm-ConvertUnits` to d-spacing + +#. :ref:`_algm-Rebin` if d-space binning +#. :ref:`_algm-DiffractionFocussing` +#. :ref:`_algm-SortEvents` (event workspace only) +#. :ref:`_algm-EditInstrumentGeometry` (if appropriate) +#. :ref:`_algm-ConvertUnits` to time-of-f + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AlignDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/AlignDetectors-v1.rst new file mode 100644 index 000000000000..186201b370e9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AlignDetectors-v1.rst @@ -0,0 +1,32 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The offsets are a correction to the dSpacing values and are applied +during the conversion from time-of-flight to dSpacing as follows: + +.. math:: d = \frac{h}{2m_N} \frac{t.o.f.}{L_{tot} sin \theta} (1+ \rm{offset}) + +The detector offsets can be obtained from either: an +`OffsetsWorkspace `__ where each pixel has one value, +the offset; or a .cal file (in the form created by the ARIEL software). + +**Note:** the workspace that this algorithms outputs is a `Ragged +Workspace `__. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must contain histogram or event data where the X +unit is time-of-flight and the Y data is raw counts. The +`instrument `__ associated with the workspace must be fully +defined because detector, source & sample position are needed. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AlphaCalc-v1.rst b/Code/Mantid/docs/source/algorithms/AlphaCalc-v1.rst new file mode 100644 index 000000000000..59064e463f34 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AlphaCalc-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Returns the relative efficiency of the forward detector group compared +to the backward detector group. If Alpha is larger than 1 more counts +has been collected in the forward group. + +This algorithm leave the input workspace unchanged. To group detectors +in a workspace use :ref:`_algm-GroupDetectors`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AndMD-v1.rst b/Code/Mantid/docs/source/algorithms/AndMD-v1.rst new file mode 100644 index 000000000000..4f2cc14f282e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AndMD-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Perform the And boolean operation on two MDHistoWorkspaces. The & +operation is performed element-by-element. A signal of 0.0 means "false" +and any non-zero signal is "true". + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AnvredCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/AnvredCorrection-v1.rst new file mode 100644 index 000000000000..1310ccaa08f1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AnvredCorrection-v1.rst @@ -0,0 +1,45 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Following A.J.Schultz's anvred, the weight factors should be: + +``sin^2(theta) / (lamda^4 * spec * eff * trans)`` + +where + +- theta = scattering\_angle/2 +- lamda = wavelength (in angstroms?) +- spec = incident spectrum correction +- eff = pixel efficiency +- trans = absorption correction + +The quantity: sin^2(theta) / eff depends only on the pixel and can be +pre-calculated for each pixel. It could be saved in array pix\_weight[]. + +For now, pix\_weight[] is calculated by the method: BuildPixWeights() +and just holds the sin^2(theta) values. The wavelength dependent portion +of the correction is saved in the array lamda\_weight[]. + +The time-of-flight is converted to wave length by multiplying by +tof\_to\_lamda[id], then (int)STEPS\_PER\_ANGSTROM \* lamda gives an +index into the table lamda\_weight[]. The lamda\_weight[] array contains +values like: 1/(lamda^power \* spec(lamda)) which are pre-calculated for +each lamda. These values are saved in the array lamda\_weight[]. The +optimal value to use for the power should be determined when a good +incident spectrum has been determined. Currently, power=3 when used with +an incident spectrum and power=2.4 when used without an incident +spectrum. + +The pixel efficiency and incident spectrum correction are NOT CURRENTLY +USED. The absorption correction, trans, depends on both lamda and the +pixel, Which is a fairly expensive calulation when done for each event. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AppendGeometryToSNSNexus-v1.rst b/Code/Mantid/docs/source/algorithms/AppendGeometryToSNSNexus-v1.rst new file mode 100644 index 000000000000..f09bd6968434 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AppendGeometryToSNSNexus-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is intended to append the geometry information into a raw +NeXus file. It is initially for use only at the SNS, as it is needed for +the currently upgrade program. But there is nothing preventing it being +used elsewhere. + +The algorithm takes the geometry information in the IDF togther with the +log values in a given NeXus file and calculates the resolved positions +of all the detectors and then writes this into the NeXus file specified. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst b/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst new file mode 100644 index 000000000000..b5bbdafd59b3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst @@ -0,0 +1,50 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm appends the spectra of two workspaces together. + +The output workspace from this algorithm will be a copy of the first +input workspace, to which the data from the second input workspace will +be appended. + +Workspace data members other than the data (e.g. instrument etc.) will +be copied from the first input workspace (but if they're not identical +anyway, then you probably shouldn't be using this algorithm!). + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For `EventWorkspaces `__, there are no restrictions on +the input workspaces if ValidateInputs=false. + +For `Workspace2Ds `__, the number of bins must be the same +in both inputs. + +If ValidateInputs is selected, then the input workspaces must also: + +- Come from the same instrument +- Have common units +- Have common bin boundaries + +Spectrum Numbers +^^^^^^^^^^^^^^^^ + +If there is an overlap in the spectrum numbers of both inputs, then the +output workspace will have its spectrum numbers reset starting at 0 and +increasing by 1 for each spectrum. + +See Also +^^^^^^^^ + +- :ref:`_algm-ConjoinWorkspaces` for joining parts of the + same workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ApplyCalibration-v1.rst b/Code/Mantid/docs/source/algorithms/ApplyCalibration-v1.rst new file mode 100644 index 000000000000..9a7fd3a15e7f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ApplyCalibration-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Update detector positions from input table workspace. The positions are +updated as absolute positions and so this update can be repeated. + +The PositionTable must have columns *Detector ID* and *Detector +Position*. The entries of the *Detector ID* column are integer referring +to the Detector ID and the enties of the *Detector Position* are +`V3Ds `__ referring to the position of the detector whose ID is in +same row. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ApplyDeadTimeCorr-v1.rst b/Code/Mantid/docs/source/algorithms/ApplyDeadTimeCorr-v1.rst new file mode 100644 index 000000000000..566974857eb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ApplyDeadTimeCorr-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Apply deadtime correction to each spectra of a workspace. Define: + +| `` ``\ :math:`{\displaystyle{N}}`\ `` = true count`` +| `` ``\ :math:`{\displaystyle{M}}`\ `` = measured count`` +| `` ``\ :math:`{\displaystyle{t_{dead}}}`\ `` = dead-time`` +| `` ``\ :math:`{\displaystyle{t_{bin}}}`\ `` = time bin width`` +| `` ``\ :math:`{\displaystyle{F}}`\ `` = Number of good frames`` + +Then this algorithm assumes that the InputWorkspace contains measured +counts as a function of TOF and returns a workspace containing true +counts as a function of the same TOF binning according to + +.. math:: N = \frac{M}{(1-M*(\frac{t_{dead}}{t_{bin}*F}))} + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ApplyDetailedBalance-v1.rst b/Code/Mantid/docs/source/algorithms/ApplyDetailedBalance-v1.rst new file mode 100644 index 000000000000..a00c218fb887 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ApplyDetailedBalance-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The fluctuation dissipation theorem [1,2] relates the dynamic +susceptibility to the scattering function + +:math:`\left(1-e^{-\frac{E}{k_B T}}\right) S(\mathbf{q}, E) = \frac{1}{\pi} \chi'' (\mathbf{q}, E)` + +where :math:`E` is the energy transfer to the system. The algorithm +assumes that the y axis of the input workspace contains the scattering +function :math:`S`. The y axis of the output workspace will contain the +dynamic susceptibility. The temperature is extracted from a log attached +to the workspace, as the mean value. Alternatively, the temperature can +be directly specified. The algorithm will fail if neither option is +valid. + +[1] S. W. Lovesey - Theory of Neutron Scattering from Condensed Matter, +vol 1 + +[2] I. A. Zaliznyak and S. H. Lee - Magnetic Neutron Scattering in +"Modern techniques for characterizing magnetic materials" + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ApplyTransmissionCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/ApplyTransmissionCorrection-v1.rst new file mode 100644 index 000000000000..6fc47cd42e38 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ApplyTransmissionCorrection-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The transmission can be given as a MatrixWorkspace or given directly as +numbers. One or the other method must be used. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AsymmetryCalc-v1.rst b/Code/Mantid/docs/source/algorithms/AsymmetryCalc-v1.rst new file mode 100644 index 000000000000..1ef76c89838b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AsymmetryCalc-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used to calculate the asymmetry for a muon workspace. +The asymmetry is given by: + +.. math:: Asymmetry = \frac{F-\alpha B}{F+\alpha B} + +where F is the front spectra, B is the back spectra and a is alpha. + +The errors in F-aB and F+aB are calculated by adding the errors in F and +B in quadrature; any errors in alpha are ignored. The errors for the +asymmetry are then calculated using the fractional error method with the +values for the errors in F-aB and F+aB. + +The output workspace contains one set of data for the time of flight, +the asymmetry and the asymmetry errors. + +Note: this algorithm does not perform any grouping; the grouping must be +done via the GroupDetectors algorithm or when the NeXus file is loaded +auto\_group must be set to true. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Authenticate-v1.rst b/Code/Mantid/docs/source/algorithms/Authenticate-v1.rst new file mode 100644 index 000000000000..a010f4b95f0b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Authenticate-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Authenticate to the remote compute resource. This must be executed +before calling any other remote algorithms. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AverageLogData-v1.rst b/Code/Mantid/docs/source/algorithms/AverageLogData-v1.rst new file mode 100644 index 000000000000..e1ff0b18e297 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/AverageLogData-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm will calculate a proton\_charge weighted average and +standard deviation of any log value of numeric series type. All proton +charges earlier than the first data are ignored. Any proton pulse is +counted for the log value on the right. This means that if all proton +pulses happen before the first value, and FixZero is false, the average +and standard deviations are NANs. If all the proton pulses occur after +the last value, and FixZero is false, the average is equal to the last +value, and the standard deviation is zero. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/BASISReduction-v1.rst b/Code/Mantid/docs/source/algorithms/BASISReduction-v1.rst new file mode 100644 index 000000000000..7d91f94dda2e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/BASISReduction-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is meant to temporarily deal with letting BASIS reduce +lots of files via Mantid. The syntax for the run number designation will +allow groups of runs to be joined. Examples: + +1. 2144-2147,2149,2156 2. 2144-2147;2149;2156 + +Example 1 will be summed into a single run Example 2 will have three run +groups + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/BinMD-v1.rst b/Code/Mantid/docs/source/algorithms/BinMD-v1.rst new file mode 100644 index 000000000000..f70ab9ab5c71 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/BinMD-v1.rst @@ -0,0 +1,112 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm performs dense binning of the events in multiple +dimensions of an input `MDEventWorkspace `__ and +places them into a dense MDHistoWorkspace with 1-4 dimensions. + +The input MDEventWorkspace may have more dimensions than the number of +output dimensions. The names of the dimensions in the DimX, etc. +parameters are used to find the corresponding dimensions that will be +created in the output. + +An ImplicitFunction can be defined using the ImplicitFunctionXML +parameter; any points NOT belonging inside of the ImplicitFunction will +be set as NaN (not-a-number). + +Axis-Aligned Binning +~~~~~~~~~~~~~~~~~~~~ + +This is binning where the output axes are aligned with the original +workspace. Specify each of the AlignedDim0, etc. parameters with these +values, separated by commas: + +- First, the name of the dimension in the original workspace +- Next, the start and end position along that dimension +- Finally, the number of bins to use in that dimensions. + +If you specify fewer output dimensions, then events in the remaining +dimensions will be integrated along all space. If you wish to integrate +only within a range, then specify the start and end points, with only 1 +bin. + +Non-Axis Aligned Binning +~~~~~~~~~~~~~~~~~~~~~~~~ + +This allows rebinning to a new arbitrary space, with rotations, +translations, or skewing. This is given by a set of basis vectors and +other parameters + +The **BasisVector0...** parameters allow you to specify the basis +vectors relating the input coordinates to the output coordinates. They +are string with these parameters, separated by commas: 'name, units, +x,y,z,..,': + +- Name: of the new dimension +- Units: string giving the units +- x, y, z, etc.: a vector, matching the number of dimensions, giving + the direction of the basis vector + +The **Translation** parameter defines the translation between the +spaces. The coordinates are given in the input space dimensions, and +they correspond to 0,0,0 in the output space. + +The **OutputExtents** parameter specifies the min/max coordinates *in +the output coordinate* space. For example, if you the output X to range +from -5 to 5, and output Y to go from 0 to 10, you would have: "-5,5, +0,10". + +The **OutputBins** parameter specifies how many bins to use in the +output workspace for each dimension. For example, "10,20,30" will make +10 bins in X, 20 bins in Y and 30 bins in Z. + +If the **NormalizeBasisVectors** parameter is **True**, then the +distances in the *input* space are the same as in the *output* space (no +scaling). + +- For example, if BasisVector0=(1,1), a point at (1,1) transforms to + :math:`x=\sqrt{2}`, which is the same as the distance in the input + dimension. + +If the **NormalizeBasisVectors** parameter is **False**, then the +algorithm will take into account the *length* of each basis vector. + +- For example, if BasisVector0=(1,1), a point at (1,1) transforms to + :math:`x=1`. The distance was scaled by :math:`1/\sqrt{2}` + +Finally, the **ForceOrthogonal** parameter will modify your basis +vectors if needed to make them orthogonal to each other. Only works in 3 +dimensions! + +Binning a MDHistoWorkspace +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is possible to rebin a `MDHistoWorkspace `__. Each +MDHistoWorkspace holds a reference to the +`MDEventWorkspace `__ that created it, as well as the +coordinate transformation that was used. In this case, the rebinning is +actually performed on the original MDEventWorkspace, after suitably +transforming the basis vectors. + +Only the non-axis aligned binning method can be performed on a +MDHistoWorkspace! Of course, your basis vectors can be aligned with the +dimensions, which is equivalent. + +For more details on the coordinate transformations applied in this case, +please see `BinMD Coordinate +Transformations `__. + +.. figure:: /images/BinMD_Coordinate_Transforms_withLine.png + :alt: BinMD_Coordinate_Transforms_withLine.png + + BinMD\_Coordinate\_Transforms\_withLine.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/BinaryOperateMasks-v1.rst b/Code/Mantid/docs/source/algorithms/BinaryOperateMasks-v1.rst new file mode 100644 index 000000000000..55e09f71f70b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/BinaryOperateMasks-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +A binary operation will be conducted on two SpecialWorkspace2D (i.e., +masking workspace). The binary operations supported include AND, OR and +XOR (exclusive or). The operation is done between the corresponding +spectra of these two input workspaces, i.e., + +.. math:: spec_i^{output} = spec_i^{in 1} \times spec_i^{in 2} + +.. math:: spec_i^{output} = spec_i^{in 1} + spec_i^{in 2} + +.. math:: spec_i^{output} = spec_i^{in 1} \oplus spec_i^{in 2} + +Output +------ + +A SpecialWorkspace2D with the same dimension and geometry as the input +two SpecialWorkspace2D. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalMuonDeadTime-v1.rst b/Code/Mantid/docs/source/algorithms/CalMuonDeadTime-v1.rst new file mode 100644 index 000000000000..c440c44917fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalMuonDeadTime-v1.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculate Muon deadtime for each spectra in a workspace. + +Define: + +| `` ``\ :math:`{\displaystyle{N}}`\ `` = true count`` +| `` ``\ :math:`{\displaystyle{N_0}}`\ `` = true count at time zero`` +| `` ``\ :math:`{\displaystyle{M}}`\ `` = measured count`` +| `` ``\ :math:`{\displaystyle{t_{dead}}}`\ `` = dead-time`` +| `` ``\ :math:`{\displaystyle{t_{bin}}}`\ `` = time bin width`` +| `` ``\ :math:`{\displaystyle{t_{\mu}}}`\ `` = Muon decay constant`` +| `` ``\ :math:`{\displaystyle{F}}`\ `` = Number of good frames`` + +The formula used to calculate the deadtime for each spectra: + +.. math:: M\exp \left( \frac{t}{t_{\mu}} \right)=N_0 - M*N_0*(\frac{t_{dead}}{t_{bin}*F}) + +where :math:`\displaystyle{M\exp ( t/t_{\mu})}` as a function of +:math:`{\displaystyle{M}}` is a straight line with an intercept of +:math:`{\displaystyle{N_0}}` and a slope of +:math:`{\displaystyle{N_0*(\frac{t_{dead}}{t_{bin}*F})}}`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculateEfficiency-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateEfficiency-v1.rst new file mode 100644 index 000000000000..5cd48673394b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculateEfficiency-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +See `SANS +Reduction `__ +documentation for calculation details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculateFlatBackground-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateFlatBackground-v1.rst new file mode 100644 index 000000000000..dd29c99d9363 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculateFlatBackground-v1.rst @@ -0,0 +1,37 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm takes a list of spectra and for each spectrum calculates +an average count rate in the given region, usually a region when there +are only background neutrons. This count rate is then subtracted from +the counts in all the spectrum's bins. However, no bin will take a +negative value as bins with count rates less than the background are set +to zero (and their error is set to the backgound value). + +The average background count rate is estimated in one of two ways. When +Mode is set to 'Mean' it is the sum of the values in the bins in the +background region divided by the width of the X range. Selecting 'Linear +Fit' sets the background value to the height in the centre of the +background region of a line of best fit through that region. + +The error on the background value is only calculated when 'Mean' is +used. It is the errors in all the bins in the background region summed +in quadrature divided by the number of bins. This background error value +is added in quadrature to the errors in each bin. + +ChildAlgorithms used +^^^^^^^^^^^^^^^^^^^^ + +The `Linear `__ algorithm is used when the Mode = Linear Fit. +From the resulting line of best fit a constant value taken as the value +of the line at the centre of the fitted range. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculateGammaBackground-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateGammaBackground-v1.rst new file mode 100644 index 000000000000..332effe383e1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculateGammaBackground-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is currently used by the Vesuvio spectrometer at ISIS to +correct for background produced by photons that are produced when the +neutrons are absorbed by the shielding on the instrument. It only +corrects the forward scattering detector banks. + +Two workspaces are produced: the calculated background and a corrected +workspace where the input workspace has been corrected by the +background. The background is computed by a simple simulation of the +expected count across all of the foils. The corrected workspace counts +are computed by calculating a ratio of the expected counts at the +detector to the integrated foil counts (:math:`\beta`) and then the +final corrected count rate :math:`\displaystyle c_f` is defined as +:math:`\displaystyle c_f = c_i - \beta c_b`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculatePeaksHKL-v1.rst b/Code/Mantid/docs/source/algorithms/CalculatePeaksHKL-v1.rst new file mode 100644 index 000000000000..7b7676e11ecd --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculatePeaksHKL-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Uses the UB matrix on the sample to calculate the Miller indices for all +peaks in the peaks workspace. Unlike :ref:`_algm-IndexPeaks` this +algorithm does not perform any mandatory optimization. This algorithm +does not round the Miller indices to the nearest integer. + +Alternatives +------------ + +:ref:`_algm-IndexPeaks` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculateTransmission-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateTransmission-v1.rst new file mode 100644 index 000000000000..b10d60d1ff0e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculateTransmission-v1.rst @@ -0,0 +1,42 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates the probability of a neutron being transmitted through the +sample using detected counts from two monitors, one in front and one +behind the sample. A data workspace can be corrected for transmission by +`dividing `__ by the output of this algorithm. + +| Because the detection efficiency of the monitors can be different the +transmission calculation is done using two runs, one run with the sample +(represented by :math:`S` below) and a direct run without +it(\ :math:`D`). The fraction transmitted through the sample :math:`f` +is calculated from this formula: +| :math:`p = \frac{S_T}{D_T}\frac{D_I}{S_I}` +| where :math:`S_I` is the number of counts from the monitor in front of +the sample (the incident beam monitor), :math:`S_T` is the transmission +monitor after the sample, etc. + +The resulting fraction as a function of wavelength is created as the +OutputUnfittedData workspace. However, because of statistical variations +it is recommended to use the OutputWorkspace, which is the evaluation of +a fit to those transmission fractions. The unfitted data is not affected +by the RebinParams or Fitmethod properties but these can be used to +refine the fitted data. The RebinParams method is useful when the range +of wavelengths passed to CalculateTransmission is different from that of +the data to be corrected. + +ChildAlgorithms used +~~~~~~~~~~~~~~~~~~~~ + +Uses the algorithm `linear `__ to fit to the calculated +transmission fraction. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculateTransmissionBeamSpreader-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateTransmissionBeamSpreader-v1.rst new file mode 100644 index 000000000000..81e717458026 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculateTransmissionBeamSpreader-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculateUMatrix-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateUMatrix-v1.rst new file mode 100644 index 000000000000..63aab89c20bb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculateUMatrix-v1.rst @@ -0,0 +1,145 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a set of peaks (Q in the goniometer frame, HKL values), and given +lattice parameters :math:`(a,b,c,\alpha,\beta,\gamma)`, it will try to +find the U matrix, using least squares approach and quaternions +`1 `__. Units +of length are in in :math:`\rm \AA`, angles are in degrees. + +The algorithm calculates first the B matrix according to Busing and +Levi. + +Given a set of peaks in the reference frame of the inner axis of the +goniometer, :math:`\rm Q_{gon}`, indexed by :math:`(h_i, k_i, l_i)`, we +want to find the U matrix that maps peaks in the reciprocal space of the +sample to the peaks in the goniometer frame + +:math:`\rm U \rm B \left( + + \begin{array}{c} + + h_i \\ + + k_i \\ + + l_i \\ + + \end{array} + + \right) = \rm Q_{gon,i}` (1) + +For simplicity, we define + +:math:`\rm Q_{hkl,i} = \rm B \left( + + \begin{array}{c} + + h_i \\ + + k_i \\ + + l_i \\ + + \end{array} + + \right)` (2) + +In the real world, such a matrix is not always possible to find. +Therefore we just try minimize the difference between the two sets of p + +:math:`\sum_i |\rm U \rm Q_{hkl,i} - \rm Q_{gon,i}|^2 = \sum_i \left(|\rm U \rm Q_{hkl,i}|^2 + |\rm Q_{gon,i}|^2 -2 \rm U \rm Q_{hkl,i} \cdot \rm Q_{gon,i}\right)` +(3) + +In equation (3) +:math:`\left|\rm U \rm Q_{hkl,i}\right|^2 = |\rm Q_{hkl,i}|^2`, so the +first two terms on the left side are U independent. Therefore we want to +maximize + +:math:`\sum_i \left(\rm U \rm Q_{hkl,i} \cdot \rm Q_{gon,i}\right)` (4) + +We are going to write the scalar product of the vectors in terms of +quaternions\ `2 `__. We define +:math:`q_{hkl,i} = \left(0, Q_{hkl,i}\right)`, +:math:`q_{gon,i} = \left(0, Q_{gon,i}\right)` and the rotation U is +described by quaternion :math:`u = \left(w,x,y,z\right)` + +Then equation (4) will be written as + +:math:`\sum_i \left(\rm U \rm Q_{hkl,i} \cdot \rm Q_{gon,i}\right) = 0.5 \cdot \left(u q_{hkl,i} u^*\right) q_{gon,i}\ + 0.5 \cdot q_{gon,i} \left(u q_{hkl,i} u^*\right)` +(5) + +We define matrices :math:`H_i= \left(\begin{array}{cccc} +0 & -q_{hkl,i,x} & -q_{hkl,i,y} & -q_{hkl,i,z} \\ +q_{hkl,i,x} & 0 & q_{hkl,i,z} & -q_{hkl,i,y} \\ +q_{hkl,i,y} & -q_{hkl,i,z} & 0 & q_{hkl,i,x} \\ +q_{hkl,i,z} & q_{hkl,i,y} & -q_{hkl,i,x} & 0 +\end{array} \right)` (6) + +and :math:`S_i= \left(\begin{array}{cccc} +0 & -q_{gonl,i,x} & -q_{gon,i,y} & -q_{gon,i,z} \\ +q_{gon,i,x} & 0 & -q_{gon,i,z} & q_{gon,i,y} \\ +q_{gon,i,y} & q_{gon,i,z} & 0 & -q_{gon,i,x} \\ +q_{gon,i,z} & -q_{gon,i,y} & q_{gon,i,x} & 0 +\end{array} \right)` (7) + +Then, we can rewrite equation (5) using +matrices\ `3 `__,\ `4 `__: + +:math:`\sum_i \left(\rm U \rm Q_{hkl,i} \cdot \rm Q_{gon,i}\right) = \left(\begin{array}{cccc} +w & x & y & z\end{array} \right) \sum_i H_i S_i \left( + \begin{array}{c} + w \\ + x \\ + y \\ +z + \end{array} + + \right)` (8) + +The problem of finding :math:`\left(w,x,y,z\right)` that maximizes the +sum can now be rewritten in terms of eigenvectors of +:math:`HS= \sum_i \left(H_i S_i\right)` . Let :math:`\epsilon_j` and +:math:`\nu_j` be the eigenvalues and corresponding eigenvectors of +:math:`HS`, with +:math:`\epsilon_0 > \epsilon_1 > \epsilon_2 > \epsilon_3`. We can write +any vector :math:`(w,x,y,z)` as a linear combination of the eigenvectors +of :math:`HS`: + +:math:`\left(w,x,y,z\right) = \delta_0 \nu_0 +\delta_1 \nu_1 +\delta_2 \nu_2 +\delta_3 \nu_3` +(9) + +:math:`\left(\begin{array}{cccc} +w & x & y & z\end{array} \right) HS \left( + \begin{array}{c} + w \\ + x \\ + y \\ +z + \end{array} + + \right) = \delta_0^2 \nu_0 HS \nu_0 + \delta_1^2 \nu_1 HS \nu_1 +\delta_2^2 \nu_2 HS \nu_2 +\delta_3 \nu_3 HS \nu_3` +(10) + +:math:`= \delta_0^2 \epsilon_0 + \delta_1^2 \epsilon_1 +\delta_2^2 \epsilon_2 +\delta_3 ^2 \epsilon_3` +(11) + +:math:`u` is a unit quaternion, +:math:`\delta_0^2 + \delta_1^2 +\delta_2^2 +\delta_3 ^2=1` (12) + +Then the sum in equation (11) is maximized for +:math:`\epsilon_0 =1, \epsilon_1 =0, \epsilon_2 =0 \epsilon_3 =0` (13) + +Therefore U is the rotation represented by the quaternion :math:`u`, +which is the eigenvector corresponding to the largest eigenvalue of +:math:`HS`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculateZscore-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateZscore-v1.rst new file mode 100644 index 000000000000..ca9b174e545b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculateZscore-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculate Z-score of a spectrum in a given workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalibrateRectangularDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/CalibrateRectangularDetectors-v1.rst new file mode 100644 index 000000000000..6ccfe2b3995e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalibrateRectangularDetectors-v1.rst @@ -0,0 +1,62 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Here are examples of input and output from PG3 and SNAP: + +.. figure:: /images/PG3_Calibrate.png + :alt: PG3_Calibrate.png + + PG3\_Calibrate.png +.. figure:: /images/SNAP_Calibrate.png + :alt: SNAP_Calibrate.png + + SNAP\_Calibrate.png +-The purpose of this algorithm is to calibrate the detector pixels and +write a calibration file. The calibration file name contains the +instrument, run number, and date of calibration. A binary Dspacemap file +that converts from TOF to d-space including the calculated offsets is +also an output option. For CrossCorrelation option: If one peak is not +in the spectra of all the detectors, you can specify the first n +detectors to be calibrated with one peak and the next n detectors to be +calibrated with the second peak. If a color fill plot of the calibrated +workspace does not look good, do a color fill plot of the workspace that +ends in cc to see if the CrossCorrelationPoints and/or PeakHalfWidth +should be increased or decreased. Also plot the reference spectra from +the cc workspace. + +Features to improve performance of peak finding +----------------------------------------------- + +Define peak fit-window +~~~~~~~~~~~~~~~~~~~~~~ + +There are two exclusive approaches to define peak's fit-window. + +1. *PeakWindowMax*: All peaks will use this value to define their +fitting range. + +2. *FitwindowTableWorkspace*: This is a table workspace by which each +peak will have its individual fit window defined. + +Define accepted range of peak's width +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Optional input property *DetectorResolutionWorkspace* is a matrix +workspace containing the detector resolution :math:`\Delta(d)/d` for +each spectrum. Combining with property *AllowedResRange*, it defines the +lower and upper limit for accepted fitted peak width. + +Let :math:`c_l = AllowedResRange[0]`, :math:`c_h = AllowedResRange[1]` +and :math:`fwhm` as the peak's fitted width. Then, + +.. math:: c_l\times\frac{\Delta(d)}{d} < fwhm < c_h\times\frac{\Delta(d)}{d} + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogDownloadDataFiles-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogDownloadDataFiles-v1.rst new file mode 100644 index 000000000000..2ec4c0387cce --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogDownloadDataFiles-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm gets the location strings for the selected files from the +data archive; if the data archive is not accessible, it downloads the +files from the data server. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogGetDataFiles-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogGetDataFiles-v1.rst new file mode 100644 index 000000000000..ea7b63444f3d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogGetDataFiles-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm retrieves the files associated to selected investigation +from the information catalog and saves the file search results to mantid +workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogGetDataSets-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogGetDataSets-v1.rst new file mode 100644 index 000000000000..9c41d505f01e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogGetDataSets-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm retrieves the datasets associated to the selected +investigation from the information catalog and saves the search results +to mantid workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogKeepAlive-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogKeepAlive-v1.rst new file mode 100644 index 000000000000..8951fc3fbe19 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogKeepAlive-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm refreshes the current session to the maximum amount +provided by the catalog API. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogListInstruments-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogListInstruments-v1.rst new file mode 100644 index 000000000000..82ab0138c7c4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogListInstruments-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm retrieves the instrument names from a catalog and stores +them in a vector. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogListInvestigationTypes-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogListInvestigationTypes-v1.rst new file mode 100644 index 000000000000..d1eea9316e58 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogListInvestigationTypes-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is responsible for obtaining a list of investigation +types from the catalog. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogLogin-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogLogin-v1.rst new file mode 100644 index 000000000000..a271676f87ac --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogLogin-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm connects the logged in user to the information catalog. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogLogout-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogLogout-v1.rst new file mode 100644 index 000000000000..3d6d03323856 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogLogout-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm disconnects the logged in user from a specific catalog +using the session information provided. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogMyDataSearch-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogMyDataSearch-v1.rst new file mode 100644 index 000000000000..8d11aa81386c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogMyDataSearch-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm retrieves logged in users investigations data from the +information catalog and stores it in mantid workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogPublish-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogPublish-v1.rst new file mode 100644 index 000000000000..83043571cde5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogPublish-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm allows a user (who is logged into the information +catalog) to publish datafiles or workspaces to investigations of which +they are an investigator. + +Datafiles and workspaces that are published are automatically made +private. This means only investigators of that investigation can view +them. + +**Parameters Note** + +- A file or workspace can be published, but not both at the same time. +- When uploading a workspace, it is saved to the default save directory + as a nexus file. The history of of the workspace is generated and + saved into a Python script, which is also uploaded alongside the + datafile of the workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CatalogSearch-v1.rst b/Code/Mantid/docs/source/algorithms/CatalogSearch-v1.rst new file mode 100644 index 000000000000..e1bd742e97a5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CatalogSearch-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm searches for the investigations and stores the search +results in a table workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CentroidPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/CentroidPeaks-v1.rst new file mode 100644 index 000000000000..1a503610dbfe --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CentroidPeaks-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm starts with a PeaksWorkspace containing the expected +positions of peaks in detector space. It calculates the centroid of the +peak by calculating the average of the coordinates of all events within +a given radius of the peak, weighted by the weight (signal) of the event +for event workspaces or the intensity for histogrammed workspaces. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CentroidPeaksMD-v1.rst b/Code/Mantid/docs/source/algorithms/CentroidPeaksMD-v1.rst new file mode 100644 index 000000000000..490b0f51a627 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CentroidPeaksMD-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm starts with a PeaksWorkspace containing the expected +positions of peaks in reciprocal space. It calculates the centroid of +the peak by calculating the average of the coordinates of all events +within a given radius of the peak, weighted by the weight (signal) of +the event. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CentroidPeaksMD-v2.rst b/Code/Mantid/docs/source/algorithms/CentroidPeaksMD-v2.rst new file mode 100644 index 000000000000..490b0f51a627 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CentroidPeaksMD-v2.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm starts with a PeaksWorkspace containing the expected +positions of peaks in reciprocal space. It calculates the centroid of +the peak by calculating the average of the coordinates of all events +within a given radius of the peak, weighted by the weight (signal) of +the event. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ChangeBinOffset-v1.rst b/Code/Mantid/docs/source/algorithms/ChangeBinOffset-v1.rst new file mode 100644 index 000000000000..5a15eddb1561 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ChangeBinOffset-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm can be used to change the time-of-flight bins of a +workspace by a specified amount (defined above as the Offset). A +possible use of this algorithm is to correct time bins that have been +recorded incorrectly. + +Optionally, the range of spectra can be selected to apply this offset +selectively using the IndexMin and IndexMax properties. + +The output workspace will be an exact copy of the input workspace except +for the changed time bins. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ChangeLogTime-v1.rst b/Code/Mantid/docs/source/algorithms/ChangeLogTime-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ChangeLogTime-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ChangePulsetime-v1.rst b/Code/Mantid/docs/source/algorithms/ChangePulsetime-v1.rst new file mode 100644 index 000000000000..0dc7705f6c05 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ChangePulsetime-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Modifies the pulse time (wall-clock time) of all the events in the +specified spectra of an EventWorkspace, by adding the given number of +seconds. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CheckForSampleLogs-v1.rst b/Code/Mantid/docs/source/algorithms/CheckForSampleLogs-v1.rst new file mode 100644 index 000000000000..9b9fbaf1708f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CheckForSampleLogs-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Check if the workspace has some given sample logs + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CheckWorkspacesMatch-v1.rst b/Code/Mantid/docs/source/algorithms/CheckWorkspacesMatch-v1.rst new file mode 100644 index 000000000000..05725ed7cb24 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CheckWorkspacesMatch-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compares two workspaces for equality. This algorithm is mainly intended +for use by Mantid developers as part of the testing process. + +The data values (X,Y and error) are always checked. The algorithm can +also optionally check the axes (this includes the units), the +spectra-detector map, the instrument (the name and parameter map) and +any bin masking. + +In the case of `EventWorkspaces `__, they are checked to +hold identical event lists. Comparisons between an EventList and a +Workspace2D always fail. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ChopData-v1.rst b/Code/Mantid/docs/source/algorithms/ChopData-v1.rst new file mode 100644 index 000000000000..bd1a64e29e7b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ChopData-v1.rst @@ -0,0 +1,47 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm will chop the input workspace into equally sized +workspaces, and adjust the X-values given so that they all begin from +the same point. This is useful if your raw files contain multiple +frames. + +Identifying Extended Frames +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. figure:: /images/ChopDataIntegrationExplanation.png + :alt: Figure 1: Example Monitor Spectrum with Extended Frames + + Figure 1: Example Monitor Spectrum with Extended Frames +If the parameters *IntegrationRangeLower*, *IntegrationRangeUpper* and +*MonitorWorkspaceIndex* are provided to the algorithm, then it will +attempt to identify where in the workspace the frames have been +extended. + +For example: looking at Figure 1 which shows an input workspace covering +100000 microseconds, we can see that the first frame covers forty +thousand, and the other three cover twenty thousand each. + +In order for Mantid to determine this programatically, it integrates +over a range (defined by IntegrationRangeLower and +IntegrationRangeUpper) for each "chop" of the data. If the relative +values for this integration fall within certain bounds, then the chop is +deemed to be a continuation of the previous one rather than a separate +frame. If this happens, then they will be placed in the same workspace +within the result group. + +The algorithm will only look at the workspace given in +*MonitorWorkspaceIndex* property to determine this. Though it is +expected and recommended that you use a monitor spectrum for this +purpose, it is not enforced so you may use a regular detector if you +have cause to do so. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ClearMaskFlag-v1.rst b/Code/Mantid/docs/source/algorithms/ClearMaskFlag-v1.rst new file mode 100644 index 000000000000..cf4a124935c5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ClearMaskFlag-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm clears the mask flag/bit on all spectra of a workspace. +It does not restore masked data. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ClearUB-v1.rst b/Code/Mantid/docs/source/algorithms/ClearUB-v1.rst new file mode 100644 index 000000000000..ec6ac6f10e03 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ClearUB-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Clears the OrientedLattice of each ExperimentInfo attached to the intput +`Workspace `__. Works with both single ExperimentInfos and +MultipleExperimentInfo instances. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CloneMDWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CloneMDWorkspace-v1.rst new file mode 100644 index 000000000000..de68b47f6c7d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CloneMDWorkspace-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm will clones an existing +`MDEventWorkspace `__ or +`MDHistoWorkspace `__ into a new one. + +If the InputWorkspace is a file-backed MDEventWorkspace, then the +algorithm will copy the original file into a new one with the suffix +'\_clone' added to its filename, in the same directory. Before the clone +operation, the file back-end will be updated using :ref:`_algm-SaveMD` +with UpdateFileBackEnd=True. This may delay the operation. + +If you wish to clone a file-backed MDEventWorkspace to an in-memory +MDEventWorkspace, we recommend that you first call :ref:`_algm-SaveMD` +with UpdateFileBackEnd=True (if necessary), followed by a simple LoadMD +call to the file in question. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CloneWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CloneWorkspace-v1.rst new file mode 100644 index 000000000000..8751a4e2008e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CloneWorkspace-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm performs a deep copy of all of the information in the +workspace. It maintains events if the input is an +`EventWorkspace `__. It will call CloneMDWorkspace for a +`MDEventWorkspace `__ or a +`MDHistoWorkspace `__. It can also clone a +`PeaksWorkspace `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CombinePeaksWorkspaces-v1.rst b/Code/Mantid/docs/source/algorithms/CombinePeaksWorkspaces-v1.rst new file mode 100644 index 000000000000..a4d55d5366d6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CombinePeaksWorkspaces-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm can be used to combine lists of single crystal peaks, +possibly obtained by different methods, in to a single list (contained +in a PeaksWorkspace). With the default options, this will simply append +the lists of peaks. If CombineMatchingPeaks is selected then an attempt +will be made to identify identical peaks by matching them in Q within +the specified tolerance. The peaks in each workspace are traversed in +the order they are found in the workspace (RHSWorkspace first) and if a +match is found (the search stops at the first match for each +RHSWorkspace peak) then the peak in the LHSWorkspace is retained. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CompareMDWorkspaces-v1.rst b/Code/Mantid/docs/source/algorithms/CompareMDWorkspaces-v1.rst new file mode 100644 index 000000000000..71767070b6ec --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CompareMDWorkspaces-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compare two MDWorkspaces (`MDEventWorkspace `__ or +`MDHistoWorkspace `__) to see if they are the same. +This is mostly meant for testing/debugging use by developers. + +**What is compared**: The dimensions, as well as the signal and error +for each bin of each workspace will be compared. + +**`MDEventWorkspace `__**: the events in each box will +be compared if the *CheckEvents* option is checked. The events would +need to be in the same order to match. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CompressEvents-v1.rst b/Code/Mantid/docs/source/algorithms/CompressEvents-v1.rst new file mode 100644 index 000000000000..f6642775a74d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CompressEvents-v1.rst @@ -0,0 +1,34 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm starts by sorting the event lists by TOF; therefore you +may gain speed by calling :ref:`_algm-SortEvents` beforehand. +Starting from the smallest TOF, all events within Tolerance are +considered to be identical. Pulse times are ignored. A weighted event +without time information is created; its TOF is the average value of the +summed events; its weight is the sum of the weights of the input events; +its error is the sum of the square of the errors of the input events. + +Note that using CompressEvents may introduce errors if you use too large +of a tolerance. Rebinning an event workspace still uses an +all-or-nothing view: if the TOF of the event is in the bin, then the +counts of the bin is increased by the event's weight. If your tolerance +is large enough that the compound event spans more than one bin, then +you will get small differences in the final histogram. + +If you are working from the raw events with TOF resolution of 0.100 +microseconds, then you can safely use a tolerance of, e.g., 0.05 +microseconds to group events together. In this case, histograms +with/without compression are identical. If your workspace has undergone +changes to its X values (unit conversion for example), you have to use +your best judgement for the Tolerance value. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ComputeSensitivity-v1.rst b/Code/Mantid/docs/source/algorithms/ComputeSensitivity-v1.rst new file mode 100644 index 000000000000..91646ebe0b1e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ComputeSensitivity-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculate the EQSANS detector sensitivity. This workflow algorithm uses +the reduction parameters found in the property manager object passed as +the ReductionProperties parameter to load the given data file, apply all +the necessary corrections to it and compute the sensitivity correction. + +Setting the PatchWorkspace property allows you to patch areas of the +detector. All masked pixels in the patch workspace will be patched. The +value assigned to a patched pixel is the average of all unmasked pixels +in this patched pixel's tube. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConjoinFiles-v1.rst b/Code/Mantid/docs/source/algorithms/ConjoinFiles-v1.rst new file mode 100644 index 000000000000..baa13f1757a3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConjoinFiles-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Conjoin two workspaces, which are file based. Uses +:ref:`_algm-ConjoinWorkspaces` to do the heavy-lifting. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConjoinSpectra-v1.rst b/Code/Mantid/docs/source/algorithms/ConjoinSpectra-v1.rst new file mode 100644 index 000000000000..6b2b6e2a8c0a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConjoinSpectra-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm allows a single spectrum to be extracted from a range of +workspaces and placed into a single workspace for comparison and +plotting. The LabelUsing property allows you to control what the end +labels applied to each spectra will be. The default is to use the source +workspace name, but you can specify the name of a log value to use as +the label, e.g. Temp\_Sample. the LabelValue property allows control of +how a single value is extracted from time series logs. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConjoinWorkspaces-v1.rst b/Code/Mantid/docs/source/algorithms/ConjoinWorkspaces-v1.rst new file mode 100644 index 000000000000..fe25a3574842 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConjoinWorkspaces-v1.rst @@ -0,0 +1,50 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm can be useful when working with large datasets. It +enables the raw file to be loaded in two parts (not necessarily of equal +size), the data processed in turn and the results joined back together +into a single dataset. This can help avoid memory problems either +because intermediate workspaces will be smaller and/or because the data +will be much reduced after processing. + +The output of the algorithm, in which the data from the second input +workspace will be appended to the first, will be stored under the name +of the first input workspace. Workspace data members other than the data +(e.g. instrument etc.) will be copied from the first input workspace +(but if they're not identical anyway, then you probably shouldn't be +using this algorithm!). Both input workspaces will be deleted. + +Conflict Spectrum IDs +^^^^^^^^^^^^^^^^^^^^^ + +The algorithm adds the spectra from the first workspace and then the +second workspace. + +- The original spectrum IDs will be respected if there is no conflict + of spectrum IDs between the first workspace and the second. +- If there are conflict in spectrum IDs, such that some spectrum IDs + appear in both workspace1 and workspace2, then it will be resolved + such that the spectrum IDs of spectra coming from workspace2 will be + reset to some integer numbers larger than the largest spectrum ID of + the spectra from workspace1. Assuming that the largest spectrum ID of + workspace1 is S, then for any spectrum of workspace wi in workspace2, + its spectrum ID is equal to (S+1)+wi+offset, where offset is a + non-negative integer. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspaces must come from the same instrument, have common +units and bins and no detectors that contribute to spectra should +overlap. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertAxisByFormula-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertAxisByFormula-v1.rst new file mode 100644 index 000000000000..41d08b2bdf07 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertAxisByFormula-v1.rst @@ -0,0 +1,32 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm allows users to adjust the axes of a workspace by a user +defined math formula. It will NOT adjust or rearrange the data values +(other than in one case the X values) of a workspace. Therefore +alterations that will rearrange the order of the axes are not +recommended. This only works for MatrixWorkspaces, so will not work on +Multi Dimensional Workspaces or Table Workspaces. Like the +:ref:`_algm-ConvertSpectrumAxis` algorithm the result of +this algorithm will have custom units defined for the axis you have +altered, and as such may not work in all other algorithms. + +The algorithm can operate on the X or Y axis, but cannot alter the +values of a spectrum axis (the axis used as the Y axis on newly loaded +Raw data). If you wish to alter this axis use he +:ref:`_algm-ConvertSpectrumAxis` algorithm first. + +The formula is defined in a simple math syntax, please look at the usage +examples to some ideas of what is possible, a full list of the functions +available can be found at the muparser website +`1 `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertFromDistribution-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertFromDistribution-v1.rst new file mode 100644 index 000000000000..663a003ec7c8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertFromDistribution-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Converts a histogram workspace from a distribution i.e. multiplies by +the bin width to take out the bin width dependency. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The workspace to convert must contain histogram data which is flagged as +being a distribution. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertMDHistoToMatrixWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertMDHistoToMatrixWorkspace-v1.rst new file mode 100644 index 000000000000..cfea15f5d601 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertMDHistoToMatrixWorkspace-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a single spectrum Workspace2D with X,Y, and E copied from an +first non-integrated dimension of a IMDHistoWorkspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertSnsRoiFileToMask-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertSnsRoiFileToMask-v1.rst new file mode 100644 index 000000000000..2d40b684f818 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertSnsRoiFileToMask-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm reads in an old SNS reduction ROI file and converts it +into a Mantid mask workspace. It will save that mask to a Mantid mask +file. + +The file format of the ROI file looks like: bank1\_0\_0 bank1\_0\_1 ... + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v1.rst new file mode 100644 index 000000000000..a40cc1906df8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Converts the representation of the vertical axis (the one up the side of +a matrix in MantidPlot) of a Workspace2D from its default of holding the +spectrum number to the target unit given. + +The spectra will be reordered in increasing order by the new unit and +duplicates will not be aggregated. Any spectrum for which a detector is +not found (i.e. if the instrument definition is incomplete) will not +appear in the output workspace. + +For units other than :math:`\theta`, the value placed in the axis is +generated by using the :ref:`_algm-ConvertUnits` methods to +translate the values of the first and last bin for the current X-data +unit into the target unit, then taking the mid-point of these. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v2.rst b/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v2.rst new file mode 100644 index 000000000000..40605ff58055 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v2.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Converts the representation of the vertical axis (the one up the side of +a matrix in MantidPlot) of a Workspace2D from its default of holding the +spectrum number to the target unit given - theta, elastic Q and elastic +Q^2. + +The spectra will be reordered in increasing order by the new unit and +duplicates will not be aggregated. Any spectrum for which a detector is +not found (i.e. if the instrument definition is incomplete) will not +appear in the output workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertTableToMatrixWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertTableToMatrixWorkspace-v1.rst new file mode 100644 index 000000000000..890bfd777a80 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertTableToMatrixWorkspace-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a single spectrum Workspace2D with X,Y, and E copied from +columns ColumnX, ColumnY, and ColumnE respectively. If ColumnE is not +set the E vector will be filled with 1s. The type of the columns must be +convertible to C++ double. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst new file mode 100644 index 000000000000..eece5d7cdf35 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst @@ -0,0 +1,53 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm takes a a `MatrixWorkspace `__ and +converts it into a `MDEventWorkspace `__ that can be +viewed in the `SliceViewer `__. + +The algorithm currently only works for instruments with +`RectangularDetectors `__. The coordinates of the +output workspace are: + +- Pixel X coordinate (integer starting at 0) +- Pixel Y coordinate (integer starting at 0) +- The center of the bin of the spectrum in that pixel (e.g. + time-of-flight) + +Each MDEvent created has a weight given by the number of counts in that +bin. Zero bins are not converted to events (saving memory). + +Once created, the `MDEventWorkspace `__ can be viewed +in the `SliceViewer `__. It can also be rebinned with +different parameters using :ref:`_algm-BinMD`. This allows you to view +the data in detector-space. For example, you might use this feature to +look at your detector's sensitivity as a function of position, as well +as a function of TOF. You can also do line plots of the data. See this +screenshot for example: + +.. figure:: /images/SliceViewer-DetectorFace.png + :alt: SliceViewer-DetectorFace.png + + SliceViewer-DetectorFace.png +BankNumbers Parameter +^^^^^^^^^^^^^^^^^^^^^ + +If your instrument has several +`RectangularDetectors `__, you can use the +*BankNumbers* property to specify which one(s) to convert. The algorithm +looks for RectangularDetectors with the name 'bankXX' where XX is the +bank number. + +If you specify more than one bank number, then the algorithm will create +a 4D MDEventWorkspace. The fourth dimension will be equal to the bank +number, allowing you to easily pick a bank to view. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst new file mode 100644 index 000000000000..4a4d7b7593e3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst @@ -0,0 +1,90 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm converts from a `MatrixWorkspace `__ (in +detector/time-of-flight space) to a +`MDEventWorkspace `__ containing events in reciprocal +space. + +The calculations apply only to elastic diffraction experiments. The +conversion can be done either to Q-space in the lab or sample frame, or +to HKL of the crystal. + +If the OutputWorkspace does NOT already exist, a default one is created. +In order to define more precisely the parameters of the +`MDEventWorkspace `__, use the +:ref:`_algm-CreateMDWorkspace` algorithm first. + +Types of Conversion +^^^^^^^^^^^^^^^^^^^ + +- **Q (lab frame)**: this calculates the momentum transfer (ki-kf) for + each event is calculated in the experimental lab frame. +- **Q (sample frame)**: the goniometer rotation of the sample is taken + out, to give Q in the frame of the sample. See + :ref:`_algm-SetGoniometer` to specify the goniometer used in + the experiment. +- **HKL**: uses the UB matrix (see :ref:`_algm-SetUB`, + :ref:`_algm-FindUBUsingFFT` and others) to calculate the HKL + Miller indices of each event. + +Lorentz Correction +^^^^^^^^^^^^^^^^^^ + +If selected, the following Lorentz correction factor is applied on each +event by multiplying its weight by L: + +:math:`L = \frac{ sin(\theta)^2 } { \lambda^{4} }` + +Where :math:`\theta` is *half* of the neutron scattering angle +(conventionally called :math:`2\theta`). :math:`\lambda` is the neutron +wavelength in *Angstroms*. + +This correction is also done by the +:ref:`_algm-AnvredCorrection` algorithm, and will be set to +false if that algorithm has been run on the input workspace. + +OneEventPerBin option +^^^^^^^^^^^^^^^^^^^^^ + +If you specify *OneEventPerBin*, then the **histogram** representation +of the input workspace is used, with one MDEvent generated for each bin +of the workspace, **including zeros**. + +This can be useful in cases where the experimental coverage needs to be +tracked. With one MDEvent for each bin, you can count which regions in +Q-space have been measured. The `SliceViewer `__ has an +option to view normalized by number of events. This means that, for +example, areas with overlap from two runs will appear scaled down. + +A significant drawback to this is that the output MDEventWorkspace will +be *significantly* larger than the events alone would be. It currently +must be created in physical memory (it cannot yet be cached to disk). +One way to limit the memory used is to limit the OutputExtents to a +smaller region and only convert part of the space. + +Also, the :ref:`_algm-FindPeaksMD` algorithm may not work optimally +because it depends partly on higher density of events causing more +finely split boxes. + +If your input is a `Workspace2D `__ and you do NOT check +*OneEventPerBin*, then the workspace is converted to an +`EventWorkspace `__ but with no events for empty bins. + +Performance Notes +^^^^^^^^^^^^^^^^^ + +- 8-core Intel Xeon 3.2 GHz computer: measured between 4 and 5.5 + million events per second (100-200 million event workspace). +- 32-core AMD Opteron 2.7 GHz computer: measured between 8 and 9 + million events per second (400-1000 million event workspaces). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst new file mode 100644 index 000000000000..4a4d7b7593e3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst @@ -0,0 +1,90 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm converts from a `MatrixWorkspace `__ (in +detector/time-of-flight space) to a +`MDEventWorkspace `__ containing events in reciprocal +space. + +The calculations apply only to elastic diffraction experiments. The +conversion can be done either to Q-space in the lab or sample frame, or +to HKL of the crystal. + +If the OutputWorkspace does NOT already exist, a default one is created. +In order to define more precisely the parameters of the +`MDEventWorkspace `__, use the +:ref:`_algm-CreateMDWorkspace` algorithm first. + +Types of Conversion +^^^^^^^^^^^^^^^^^^^ + +- **Q (lab frame)**: this calculates the momentum transfer (ki-kf) for + each event is calculated in the experimental lab frame. +- **Q (sample frame)**: the goniometer rotation of the sample is taken + out, to give Q in the frame of the sample. See + :ref:`_algm-SetGoniometer` to specify the goniometer used in + the experiment. +- **HKL**: uses the UB matrix (see :ref:`_algm-SetUB`, + :ref:`_algm-FindUBUsingFFT` and others) to calculate the HKL + Miller indices of each event. + +Lorentz Correction +^^^^^^^^^^^^^^^^^^ + +If selected, the following Lorentz correction factor is applied on each +event by multiplying its weight by L: + +:math:`L = \frac{ sin(\theta)^2 } { \lambda^{4} }` + +Where :math:`\theta` is *half* of the neutron scattering angle +(conventionally called :math:`2\theta`). :math:`\lambda` is the neutron +wavelength in *Angstroms*. + +This correction is also done by the +:ref:`_algm-AnvredCorrection` algorithm, and will be set to +false if that algorithm has been run on the input workspace. + +OneEventPerBin option +^^^^^^^^^^^^^^^^^^^^^ + +If you specify *OneEventPerBin*, then the **histogram** representation +of the input workspace is used, with one MDEvent generated for each bin +of the workspace, **including zeros**. + +This can be useful in cases where the experimental coverage needs to be +tracked. With one MDEvent for each bin, you can count which regions in +Q-space have been measured. The `SliceViewer `__ has an +option to view normalized by number of events. This means that, for +example, areas with overlap from two runs will appear scaled down. + +A significant drawback to this is that the output MDEventWorkspace will +be *significantly* larger than the events alone would be. It currently +must be created in physical memory (it cannot yet be cached to disk). +One way to limit the memory used is to limit the OutputExtents to a +smaller region and only convert part of the space. + +Also, the :ref:`_algm-FindPeaksMD` algorithm may not work optimally +because it depends partly on higher density of events causing more +finely split boxes. + +If your input is a `Workspace2D `__ and you do NOT check +*OneEventPerBin*, then the workspace is converted to an +`EventWorkspace `__ but with no events for empty bins. + +Performance Notes +^^^^^^^^^^^^^^^^^ + +- 8-core Intel Xeon 3.2 GHz computer: measured between 4 and 5.5 + million events per second (100-200 million event workspace). +- 32-core AMD Opteron 2.7 GHz computer: measured between 8 and 9 + million events per second (400-1000 million event workspaces). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDistribution-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDistribution-v1.rst new file mode 100644 index 000000000000..e6b2b90363c2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToDistribution-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Makes a histogram workspace a distribution i.e. divides by the bin +width. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The workspace to convert must contain histogram data which is not +already flagged as a distribution. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToEventWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToEventWorkspace-v1.rst new file mode 100644 index 000000000000..9e31553460f8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToEventWorkspace-v1.rst @@ -0,0 +1,30 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm takes a Workspace2D with any binning or units as its +input. An event is created for each bin of each histogram, except if the +bin count is 0.0 (unless *GenerateZeros* is true). Infinity and NAN +(not-a-number) values are always skipped. + +Each event is created with an X position (typically time-of-flight) +equal to the \*\*center\*\* of the bin. The weight and error of the +event are taken from the histogram value. + +If the *GenerateMultipleEvents* option is set, then instead of a single +event per bin, a certain number of events evenly distributed along the X +bin are generated. The number of events generated in each bin is +calculated by N = (Y/E)^2. However, it is limited to a max of +*MaxEventsPerBin* and a minimum of 1 event per bin. + +Note that using *GenerateZeros* or *GenerateMultipleEvents* may use a +lot of memory! + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToHistogram-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToHistogram-v1.rst new file mode 100644 index 000000000000..4d0d3769185c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToHistogram-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The input workspace must contain point data. + +Once executed, the OutputWorkspace will contain histogram data where the +bin width is guessed from the spacing between the input X points. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst new file mode 100644 index 000000000000..a91ed28e3ba4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst @@ -0,0 +1,186 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Used Subalgorithms +------------------ + +The algorithm uses `Unit Factory `__ and existing unit +conversion procedures from input Workspace Units to the Units, necessary +for transformation into correspondent MD Event workspace. It also uses +:ref:`_algm-PreprocessDetectorsToMD` algorithm to help +with transformation to reciprocal space. + +If min, max or both lists of values (properties 12 and 13) for the +algorithm are not specified, +:ref:`_algm-ConvertToMDMinMaxLocal` is used to estimate +missing min-max values. This algorithm is also used to calculate min-max +values if specified min-max values are deemed incorrect (e.g. less +values then dimensions or some min values are bigger then max values) + +Notes +----- + +#. For elastic analysis (:math:`dEAnalysisMode=Elastic`) the target + `unit `__ is momentum :math:`k`. +#. For no analysis (CopyToMD) mode, the units remain the one, previously + defined along the workspace's axes. +#. When units of input Matrix 2D workspace (Histogram workspace) are not + Momentums for Elastic or EnergyTransfer for inelastic mode, the + algorithm uses internal unit conversion of input X-values based on + central average of a bin ranges. Namely, value + :math:`X_c = 0.5*(X_i+X_{i+1})` is calculated and converted to + Momentum or EnergyTransfer correspondingly. This can give slightly + different result from the case, when input workspace has been + converted into correspondent units before converting to MDEvents. +#. Confusing message "Error in execution of algorithm ConvertToMD: emode + must be equal to 1 or 2 for energy transfer calculation" is generated + when one tries to process the results of inelastic scattering + experiment in elastic mode. This message is generated by units + conversion routine, which finds out that one of the workspace axis is + in `unit `__ of DeltaE. These units can not be directly + converted into momentum or energy, necessary for elastic mode. Select + Direct or Indirect mode and integrate over whole energy transfer + range to obtain MD workspace, which would correspond to an Elastic + mode. +#. A good guess on the limits can be obtained from the + :ref:`_algm-ConvertToMDMinMaxLocal` algorithm. + +How to write custom ConvertToMD plugin +-------------------------------------- + +This information intended for developers who have at least basic +knowledge of C++ and needs to write its own `convertToMD +plugin `__. + +Usage examples +-------------- + +The examples below demonstrate the usages of the algorithm in most +common situations. They work with the data files which already used by +Mantid for different testing tasks. + +Convert re-binned MARI 2D workspace to 3D MD workspace for further analysis/merging with data at different temperatures +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code:: python + + + Load(Filename='MAR11001.nxspe',OutputWorkspace='MAR11001') + SofQW3(InputWorkspace='MAR11001',OutputWorkspace='MAR11001Qe2',QAxisBinning='0,0.1,7',EMode='Direct') + AddSampleLog(Workspace='MAR11001Qe2',LogName='T',LogText='100.0',LogType='Number Series') + + ConvertToMD(InputWorkspace='MAR11001Qe2',OutputWorkspace='MD3',QDimensions='CopyToMD',OtherDimensions='T',\ + MinValues='-10,0,0',MaxValues='10,6,500',SplitInto='50,50,5') + +Output **MD3** workspace can be viewed in slice-viewer as 3D workspace +with T-axis having single value. + +Convert Set of Event Workspaces (Horace scan) to 4D MD workspace, direct mode: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This example is based on CNCS\_7860\_event.nxs file, available in Mantid +test folder. The same script without any changes would produce similar +MD workspace given histogram data obtained from inelastic instruments +and stored in nxspe files. + +.. code:: python + + # let's load test event workspace, which has been already preprocessed and available in Mantid Test folder + WS_Name='CNCS_7860_event' + Load(Filename=WS_Name,OutputWorkspace=WS_Name) + # this workspace has been obtained from an inelastic experiment with input energy Ei = 3. + # Usually this energy is stored in workspace + # but if it is not, we have to provide it for inelastic conversion to work. + AddSampleLog(Workspace=WS_Name,LogName='Ei',LogText='3.0',LogType='Number') + # + # set up target ws name and remove target workspace with the same name which can occasionally exist. + RezWS = 'WS_4D' + try: + DeleteWorkspace(RezWS) + except ValueError: + print "Target ws ",RezWS," not found in analysis data service\n" + # + #---> Start loop over contributing files + for i in range(0,20,5): + # the following operations simulate different workspaces, obtained from experiment using rotating crystal; + # For real experiment we usually just load these workspaces from nxspe files with proper Psi values defined there + # and have to set up ub matrix + SourceWS = 'SourcePart'+str(i) + # it should be : + # Load(Filename=SourceWS_fileName,OutputWorkspace=WS_SourceWS) + # here, but the test does not have these data so we emulate the data by the following rows: + # ws emulation begin ----> + CloneWorkspace(InputWorkspace=WS_Name,OutputWorkspace=SourceWS) + # using scattering on a crystal with cubic lattice and 1,0,0 direction along the beam. + SetUB(Workspace=SourceWS,a='1.4165',b='1.4165',c='1.4165',u='1,0,0',v='0,1,0') + # rotated by proper number of degrees around axis Y + AddSampleLog(Workspace=SourceWS,LogName='Psi',LogText=str(i),LogType='Number Series') + SetGoniometer(Workspace=SourceWS,Axis0='Psi,0,1,0,1') + # ws emulation, end --------------------------------------------------------------------------------------- + + ConvertToMD(InputWorkspace=SourceWS,OutputWorkspace=RezWS,QDimensions='Q3D',QConversionScales='HKL',\ + OverwriteExisting=0,\ + dEAnalysisMode='Direct',MinValues='-3,-3,-3,-1',MaxValues='3,3,3,3',\ + SplitInto="20,20,1,1") + # delete source workspace from memory; + DeleteWorkspace(SourceWS) + #---> End loop + # plot results using sliceviewer + plotSlice(RezWS, xydim=["[H,0,0]","[0,K,0]"], slicepoint=[0,0] ) + +Convert set of inelastic results obtained in Powder mode (direct) as function of temperature to a 3D workspace: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The test example is based on MAR1011.nxspe data file, obtained by +reducing test data from the MARI experiment. The data for the experiment +can be located in `Mantid system +test `__ folder. The text +will produce 3-dimensional dataset, with temperature axis. The image +does not change with temperature, as we have just cloned initial +workspace without any changes to the experimental data. + +.. code:: python + + # let's load test event workspace, which has been already preprocessed and availible in Mantid Test folder + WS_Name='MAR11001.nxspe' + Load(Filename=WS_Name,OutputWorkspace=WS_Name) + # this workspace has been obtained from an inelastic experiment with input energy + # nxspe file has input energy stored in it so no need to add energy artificially + #AddSampleLog(Workspace=WS_Name,LogName='Ei',LogText='3.0',LogType='Number') + + # set up target ws name and remove target workspace with the same name which can occasionally exist. + RezWS = 'WS_3D' + try: + DeleteWorkspace(RezWS) + except ValueError: + print "Target ws ",RezWS," not found in analysis data service\n" + i=0 + # let's assume this is the temperature range obtained in experiments and + # each data file is obtained for particular temperature. + T = [1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0] + for i in range(0,len(T),1): + # EMULATE LOAD OF DIFFERENT results obtained for different temperatures. ------> + SourceWS = 'SourcePart'+str(i) + # Load(Filename=WS_Name,OutputWorkspace=WS_Name) + CloneWorkspace(InputWorkspace=WS_Name,OutputWorkspace=SourceWS) + # Each workspace has the temperature from the list above associated with it through the correspondent log file + AddSampleLog(Workspace=SourceWS,LogName='T',LogText=str(T[i]),LogType='Number Series') + # END EMULATION --------------------------------------------------------------------- + + ConvertToMD(InputWorkspace=SourceWS,OutputWorkspace=RezWS,QDimensions='|Q|',OverwriteExisting=0,\ + dEAnalysisMode='Direct',OtherDimensions='T',PreprocDetectorsWS='DetWS', + MinValues='0,-10,0',MaxValues='12,10,10',SplitInto="100,100,20") + # delete source workspace from memory; + DeleteWorkspace(SourceWS) + + plotSlice(RezWS, xydim=["|Q|","DeltaE"], slicepoint=[0,0] ) + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToMDMinMaxGlobal-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToMDMinMaxGlobal-v1.rst new file mode 100644 index 000000000000..213bb061f2d6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToMDMinMaxGlobal-v1.rst @@ -0,0 +1,44 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm will try to calculate the MinValues and MaxValues limits +that are required in the ConvertToMD algorithm, using the following +procedure: + +- If QDimensions is CopyToMD the first value in MinValues is going to + be the workspace minimum X coordinate, and the first value in + MaxValues is going to be the maximum X coordinate +- If QDimensions is \|Q\| or Q3D, first we calculate the maximum + momentum transfer, Qmax. If dEAnalysisMode is Elastic, we convert to + Momentum units, find the maximum value, and multiply by 2, since the + maximum momentum transfer occurs when the incident beam and the + scattered beam are anti-parallel. +- If dEAnalysisMode is Direct or Indirect, we convert to DeltaE units, + find the minimum and maximum (dEmin, dEmax), calculate to ki and kf. + The maximum momentum transfer is ki+kf. +- If QDimensions is \|Q\|, the first value of the MinValues is 0, and + the first value of MaxValues is Qmax +- If QDimensions is Q3D, and Q3DFrames is Q the first three values of + the MinValues are -Qmax, -Qmax, -Qmax, and the first three values of + MaxValues are Qmax, Qmax, Qmax +- If QDimensions is Q3D, and Q3DFrames is HKL the first three values of + the MinValues are -Qmax\*a/(2\*pi), -Qmax\*b/(2\*pi), + -Qmax\*c/(2\*pi), and the first three values of MaxValues are + Qmax\*a/(2\*pi), Qmax\*b/(2\*pi), Qmax\*c/(2\*pi). Note: for HKL mode + one needs to have an OrientedLattice attached to the sample. +- If QDimensions is \|Q\| or Q3D, and dEAnalysisMode is Elastic or + Inelastic, the next value in MinValues is dEmin, and the next value + in MaxValues is dEmax +- If any OtherDimensions are added, the last values in MinValues + (MaxValues) are the minimum (maximum) of each of the sample log + values selected + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToMDMinMaxLocal-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToMDMinMaxLocal-v1.rst new file mode 100644 index 000000000000..8ad9cbe7a332 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToMDMinMaxLocal-v1.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Helper algorithm to calculate min-max input values for ConvertToMD +algorithm, using ConvertToMD algorithm factory. + +Initiates the same as ConvertToMD algorithm transformation from the +ConvertToMD factory and uses this transformation to evaluate all points +where the transformation can achieve extrema for each workspace spectra. +Then goes through all extrema points, calculates min/max values for each +spectra and select global min-max values for the whole workspace. + +For example, given input workspace in the units of energy transfer and +requesting \|Q\| inelastic transformation, the algorithm looks through +all spectra of the input workspace and identifies minimal, maximal and +an extremal\* energy transfer for the input spectra. Then it runs \|Q\| +dE conversion for these energy transfer points and loops through all +spectra of the workspace to identify \|Q\|\_min, \|Q\|\_max and dE\_min +and dE\_max values. + +- extremal energy transfer for \|Q\| transformation occurs at some + energy transfer where momentum transfer is maximal. It depends on + polar + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToMatrixWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToMatrixWorkspace-v1.rst new file mode 100644 index 000000000000..d8e9d2946595 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToMatrixWorkspace-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This can also be performed using the :ref:`_algm-Rebin` algorithm and +having the "PreserveEvents" parameter set to false. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToPointData-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToPointData-v1.rst new file mode 100644 index 000000000000..ef8eea1b3986 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToPointData-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The input workspace must contain histogram data. Once executed the +OutputWorkspace will contain point data, where the X values are simply +the centre points of the input bins. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst new file mode 100644 index 000000000000..4b327ab9f804 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst @@ -0,0 +1,58 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Prerequisites +~~~~~~~~~~~~~ + +The workspace spectrum axis should be converted to signed\_theta using +:ref:`_algm-ConvertSpectrumAxis` and the x axis should be +converted to Wavelength using :ref:`_algm-ConvertUnits` before +running this algorithm. Histogram input workspaces are expected. + +The algorithm will looks for a specific log value called *stheta*, which +contains the incident theta angle :math:`theta_i`. If the input +workspace does not contain this value, or if you wish to override this +value you can do so by providing your own *IncidentTheta* property and +enabling *OverrideIncidentTheta*. + +Transformations +~~~~~~~~~~~~~~~ + +Output workspaces are always 2D MD Histogram workspaces, but the +algorithm will perform one of three possible transformations. + +- Convert to :math:`Q_x`, :math:`Q_z` +- Convert to :math:`K_i`, :math:`K_f` +- Convert to :math:`P_i-P_f`, :math:`P_i+P_f`. Note that P and K are + interchangeable. + +where + +:math:`Q_x = \frac{2\pi}{\lambda}(sin\theta_f + sin\theta_i)` + +:math:`Q_z = \frac{2\pi}{\lambda}(cos\theta_f - cos\theta_i)` + +:math:`K_i = \frac{2\pi}{\lambda}sin\theta_i` + +:math:`K_f = \frac{2\pi}{\lambda}sin\theta_f` + +.. raw:: mediawiki + + {{AlgorithmLinks|ConvertToReflectometryQ}} + +After Transformation +~~~~~~~~~~~~~~~~~~~~ + +You will usually want to rebin using :ref:`_algm-BinMD` or +:ref:`_algm-SliceMD` after transformation because the output workspaces +are not regularly binned. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToYSpace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToYSpace-v1.rst new file mode 100644 index 000000000000..b96cf76f8b2b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertToYSpace-v1.rst @@ -0,0 +1,36 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The final unit of the x-axis is changed to momentum (Y) space as defined +by + +.. raw:: html + +
+ +:math:`Y = 0.2393\frac{M}{\epsilon_i^{0.1}}(\omega - \frac{q^2}{2M})` + +.. raw:: html + +
+ +where :math:`M` is the mass in atomic mass units, +:math:`\displaystyle\epsilon` is the incident energy, +:math:`\displaystyle\omega` is the energy change and :math:`q` is +defined as :math:`\sqrt{(k_0^2 + k_1^2 - 2k_0k_1\cos(\theta))}`. + +The TOF is used to calculate :math:`\displaystyle\epsilon_i` and the +:math:`\displaystyle1/\epsilon` dependence causes an increasing set of +TOF values to be mapped to a decreasing set of :math:`\displaystyle Y` +values. As a result the final :math:`Y`-space values are reversed to +give a workspace with monotonically increasing :math:`Y` values. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertUnits-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertUnits-v1.rst new file mode 100644 index 000000000000..9652166f23df --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvertUnits-v1.rst @@ -0,0 +1,51 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Changes the units in which the X values of a `workspace `__ +are represented. The available units are those registered with the `Unit +Factory `__. If the Y data is 'dimensioned' (i.e. has been +divided by the bin width), then this will be correctly handled, but at +present nothing else is done to the Y data. If the sample-detector +distance cannot be calculated then the affected spectrum will be zeroed, +and a warning message will be output on the `logging `__ +service. + +If AlignBins is false or left at the default the output workspace may be +a `Ragged Workspace `__. If it is set to true then the +data is automatically `rebinned `__ to a regular grid so that the +maximum and minimum X values will be maintained. It uses the same number +of bins as the input data, and divides them linearly equally between the +minimum and maximum values. + +If converting to :math:`\Delta E` any bins which correspond to a +physically inaccessible will be removed, leading to an output workspace +than is smaller than the input one. If the geometry is indirect then the +value of EFixed will be taken, if available, from the instrument +definition file. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Naturally, the X values must have a unit set, and that unit must be + known to the `Unit Factory `__. +- Only histograms, not point data, can be handled at present. +- The algorithm will also fail if the source-sample distance cannot be + calculated (i.e. the `instrument `__ has not been + properly defined). + +Available units +--------------- + +The units currently available to this algorithm are listed +`here `__, along with equations specifying exactly how the +conversions are done. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvolveWorkspaces-v1.rst b/Code/Mantid/docs/source/algorithms/ConvolveWorkspaces-v1.rst new file mode 100644 index 000000000000..0bb8db23e788 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ConvolveWorkspaces-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Convolution of two workspaces using `Convolution `__ from +CurveFitting. Workspaces must have the same number of spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CopyInstrumentParameters-v1.rst b/Code/Mantid/docs/source/algorithms/CopyInstrumentParameters-v1.rst new file mode 100644 index 000000000000..ef54a8244889 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CopyInstrumentParameters-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Transfer an instrument parameters from a giving workspace to a receiving +workspace. + +The instrument parameters in the receiving workspace are REPLACED +(despite you can assume from the name of the algorithm) by a copy of the +instrument parameters in the giving workspace so gaining any +manipulations such as calibration done to the instrument in the giving +workspace. + +Does not work on workspaces with grouped detectors if some of the +detectors were calibrated. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CopyLogs-v1.rst b/Code/Mantid/docs/source/algorithms/CopyLogs-v1.rst new file mode 100644 index 000000000000..dadd158570fe --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CopyLogs-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm will copy the sample logs in the input workspace to the +the output workspace using one of three merge strategies. + +- MergeReplaceExisting: Default option. Copy logs from the input + workspace to the output workspace and replace any existing logs with + the same name. +- MergeKeepExisting: Keep the existing logs in the output workspace and + don't modify them, but append any new ones from the input workspace. + +Note that this will not concatenate values or ranges. The algorithm will +choose to keep the value of any the log already present in the output +workspace, leaving it untouched. + +- WipeExisting: Dump any logs that are in the output workspace and + replace them with the logs from the input workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CopySample-v1.rst b/Code/Mantid/docs/source/algorithms/CopySample-v1.rst new file mode 100644 index 000000000000..f0b42fe099e3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CopySample-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm copies some/all the sample information from one workspace +to another.For MD workspaces, if no input sample number is specified, or +not found, it will copy the first sample. For MD workspaces, if no +output sample number is specified (or negative), it will copy to all +samples. The following information can be copied: + +- Name +- Material +- Sample environment +- Shape +- Oriented lattice + +One can copy the orientation matrix only. To do this, select both +CopyLattice and CopyOrientationOnly. If only CopyOrientationOnly is +true, the algorithm will throw an error. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CorrectFlightPaths-v1.rst b/Code/Mantid/docs/source/algorithms/CorrectFlightPaths-v1.rst new file mode 100644 index 000000000000..78cf17a37173 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CorrectFlightPaths-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Corrects the flight paths of a flat detector. Both TOF sample-detector +and distance sample-detector are corrected to constant values, i.e., +this algorithm make the detector spherical rather than flat. + +detector\_distance must exist in the \_Parameters.xml: + +So far this has only be tested on ILL IN5. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CorrectKiKf-v1.rst b/Code/Mantid/docs/source/algorithms/CorrectKiKf-v1.rst new file mode 100644 index 000000000000..bf6d4541cb95 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CorrectKiKf-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Performs ki / kf multiplication, in order to transform differential +scattering cross section into dynamic structure factor. Both Ei and Ef +must be positive. However, if this requirement is not met, it will give +an error only if the data is not 0. This allows applying the algorithms +to rebinned data, where one can rebin in Direct EMode to energies higher +than EFixed. If no value is defined for EFixed, the algorithm will try +to find Ei in the workspace properties for direct geometry spectrometry, +or in the instrument definition, for indirect geometry spectrometry. +Algorithm is event aware. TOF events will be changed to weighted events. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CorrectLogTimes-v1.rst b/Code/Mantid/docs/source/algorithms/CorrectLogTimes-v1.rst new file mode 100644 index 000000000000..b9baccaf5dbd --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CorrectLogTimes-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Sometimes the clocks controlling different sample environments or other +experimental log values are not synchronized. This algorithm attempts to +make all (some) time series property logs start at the same time as the +first time in the proton charge log. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CorrectToFile-v1.rst b/Code/Mantid/docs/source/algorithms/CorrectToFile-v1.rst new file mode 100644 index 000000000000..a8eee956a0e6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CorrectToFile-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Use data from the supplied file, written in the RKH format, to correct +the input data. The operations allowed for the correction are +`multiply `__ and `divide `__. + +Allowed correction files may contain one spectrum with many bins or many +spectra each with one bin. If the are many bins then the +FirstColumnValue must match the `units `__ of the +(X-values on the) workspace on the InputWorkspace. When there are many +spectra (e.g. flood correction files) FirstColumnValue must be set to +"SpectrumNumber" and the number of spectra in the file and workspace +must match. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateCalFileByNames-v1.rst b/Code/Mantid/docs/source/algorithms/CreateCalFileByNames-v1.rst new file mode 100644 index 000000000000..593936fa0ed8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateCalFileByNames-v1.rst @@ -0,0 +1,34 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +.. figure:: /images/InstrumentTree.jpg + :alt: Instrument Tree + + Instrument Tree +Create a `calibration file `__ for diffraction focusing based +on list of names of the instrument tree. + +If a new file name is specified then offsets in the file are all sets to +zero and all detectors are selected. If a valid calibration file already +exists at the location specified by the `GroupingFileName `__ +then any existing offsets and selection values will be maintained and +only the grouping values changed. + +Detectors not assigned to any group will appear as group 0, i.e. not +included when using AlignDetector or DiffractionFocussing algorithms. + +The group number is assigned based on a descent in the instrument tree +assembly. If two assemblies are parented, say Bank1 and module1, and +both assembly names are given in the GroupNames, they will get assigned +different grouping numbers. This allows to isolate a particular +sub-assembly of a particular leaf of the tree. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateChopperModel-v1.rst b/Code/Mantid/docs/source/algorithms/CreateChopperModel-v1.rst new file mode 100644 index 000000000000..05eb314dc5f5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateChopperModel-v1.rst @@ -0,0 +1,32 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a model for a chopper using the given parameters. The parameters +are given as a string to allow flexibility for each chopper model having +different parameterisation. + +The chopper point is an index that can be used for multi-chopper +instruments. The indices start from zero, with this being closest to +moderator. + +Available models with parameter names: + +- FermiChopper - + + - AngularVelocity - The angular velocity value or log name + - ChopperRadius - The radius, in metres, of the whole chopper + - SlitThickness - The thickness, in metres, of the slit + - SlitRadius - The radius of curvature, in metres, of the slit + - JitterSigma - The FWHH value for the jitter calculation in + microseconds + - Ei - The Ei for this run as a value or log name + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateDummyCalFile-v1.rst b/Code/Mantid/docs/source/algorithms/CreateDummyCalFile-v1.rst new file mode 100644 index 000000000000..5d346bcb070e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateDummyCalFile-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +.. figure:: /images/InstrumentTree.jpg + :alt: Instrument Tree + + Instrument Tree +Create a dummy `calibration file `__ for diffraction focusing +with one group. + +Offsets in the file are all sets to zero and all detectors are selected. +Overwrites a calibration file that already exists at the location +specified. + +Detectors will be assigned to group one when using AlignDetector or +DiffractionFocussing algorithms. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateEmptyTableWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateEmptyTableWorkspace-v1.rst new file mode 100644 index 000000000000..afd74b52207e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateEmptyTableWorkspace-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm creates an empty table workspace and puts it in the data +service to make it available to python. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateFlatEventWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateFlatEventWorkspace-v1.rst new file mode 100644 index 000000000000..ce683e022ceb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateFlatEventWorkspace-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +TODO: Enter a full wiki-markup description of your algorithm here. You +can then use the Build/wiki\_maker.py script to generate your full wiki +page. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateGroupingWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateGroupingWorkspace-v1.rst new file mode 100644 index 000000000000..c2c2fe864e19 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateGroupingWorkspace-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +A `GroupingWorkspace `__ is a simple workspace with +one value per detector pixel; this value corresponds to the group number +that will be used when focussing or summing another workspace. + +This algorithm creates a blank GroupingWorkspace. It uses the +InputWorkspace, InstrumentName, OR InstrumentFilename parameterto +determine which Instrument to create. + +If the OldCalFilename parameter is given, the .cal ASCII file will be +loaded to fill the group data. + +If the GroupNames parameter is given, the names of banks matching the +comma-separated strings in the parameter will be used to sequentially +number the groups in the output. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateLeBailFitInput-v1.rst b/Code/Mantid/docs/source/algorithms/CreateLeBailFitInput-v1.rst new file mode 100644 index 000000000000..468c4d07bed2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateLeBailFitInput-v1.rst @@ -0,0 +1,46 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is to import Fullprof .irf file (peak parameters) and +.hkl file (reflections) and record the information to TableWorkspaces, +which serve as the inputs for algorithm LeBailFit. + +Format of Instrument parameter TableWorkspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Instrument parameter TableWorkspace contains all the peak profile +parameters imported from Fullprof .irf file. + +Presently these are the peak profiles supported + +``* Thermal neutron back to back exponential convoluted with pseudo-voigt (profile No. 10 in Fullprof)`` + +Each row in TableWorkspace corresponds to one profile parameter. + +Columns include Name, Value, FitOrTie, Min, Max and StepSize. + +Format of reflection TableWorkspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Each row of this workspace corresponds to one diffraction peak. The +information contains the peak's Miller index and (local) peak profile +parameters of this peak. For instance of a back-to-back exponential +convoluted with Gaussian peak, the peak profile parameters include +Alpha, Beta, Sigma, centre and height. + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to do Le Bail +fit. The introduction can be found in the wiki page of `Le Bail +Fit `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateLogPropertyTable-v1.rst b/Code/Mantid/docs/source/algorithms/CreateLogPropertyTable-v1.rst new file mode 100644 index 000000000000..2b2e8148c87c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateLogPropertyTable-v1.rst @@ -0,0 +1,59 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Data is loaded into Mantid workspaces along with various log properties. +This algorithm enables a user to easily compile a TableWorkspace of +values for each of the specified properties, for each of the specified +workspaces. + +LogPropertyNames +~~~~~~~~~~~~~~~~ + +The list of log property names provided must consist of properties that +actually appear in the workspace(s). You can check which properties are +loaded with workspaces by right-clicking the workspace and navigating to +the "Sample Logs..." dialog window. All acceptable properties have names +that appear in the "Name" column of the dialog table. + +GroupPolicy +~~~~~~~~~~~ + +GroupWorkspaces can be handled in various ways, depending on the +GroupPolicy input: + +"All" +^^^^^ + +All children of any GroupWorkspaces will be included in the table. This +should be used when each child workspace contains different data. + +"First" +^^^^^^^ + +Only the first child of any GroupWorkspaces will be included in the +table. This is useful for instruments that produce groups of workspaces +for a single run, and specifying "All" would populate the table with +duplicate data. + +"None" +^^^^^^ + +Excludes GroupWorkspaces altogether. + +.. figure:: /images/ConvertToEnergyInfoTable.png + :alt: Output workspace generated by loading TOSCA runs 12218-12229, and feeding the resuling workspace names into the algorithm, along with the property names "inst_abrv", "run_number", "user_name", "run_title" and "hd_dur". + + Output workspace generated by loading TOSCA runs 12218-12229, and + feeding the resuling workspace names into the algorithm, along with + the property names "inst\_abrv", "run\_number", "user\_name", + "run\_title" and "hd\_dur". + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateLogTimeCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/CreateLogTimeCorrection-v1.rst new file mode 100644 index 000000000000..f7fd2419f6fb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateLogTimeCorrection-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +For fast fequency sample logs, the time-of-flight of each neutron is +recorded at detector. As the sample log time is recorded at sample, each +neutron's flight time must be corrected to sample to be filtered +correctly by log value. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateMDHistoWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateMDHistoWorkspace-v1.rst new file mode 100644 index 000000000000..824910086e9e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateMDHistoWorkspace-v1.rst @@ -0,0 +1,40 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Takes two arrays of signal and error values, as well as information +describing the dimensionality and extents, and creates a +MDHistoWorkspace (histogrammed multi-dimensional workspace). The +*SignalInput* and *ErrorInput* arrays must be of equal length and have a +length that is equal to the product of all the comma separated arguments +provided to **NumberOfBins**. The order in which the arguments are +specified to each of the properties (for those taking multiple +arguments) is important, as they are assumed to match by the order they +are declared. For example, specifying **Names**\ ='A,B' and +**Units**\ ='U1,U2' will generate two dimensions, the first with a name +of *A* and units of *U1* and the second with a name of *B* and units of +*U2*. The same logic applies to the **Extents** inputs. Signal and Error +inputs are read in such that, the first entries in the file will be +entered across the first dimension specified, and the zeroth index in +the other dimensions. The second set of entries will be entered across +the first dimension and the 1st index in the second dimension, and the +zeroth index in the others. + +Alternatives +------------ + +A very similar algorithm to this is +:ref:`_algm-ImportMDHistoWorkspace`, which takes it's +input signal and error values from a text file rather than from arrays. +Another alternative is to use :ref:`_algm-ConvertToMD` which works +on MatrixWorkspaces, and allows log values to be included in the +dimensionality. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateMDWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateMDWorkspace-v1.rst new file mode 100644 index 000000000000..d7681ea0e6fe --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateMDWorkspace-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm creates an empty MDEventWorkspace from scratch. The +workspace can have any number of dimensions (up to ~20). Each dimension +must have its name, units, extents specified as comma-spearated string. + +The SplitInto parameter determines how splitting of dense boxes will be +performed. For example, if SplitInto=5 and the number of dimensions is +3, then each box will get split into 5x5x5 sub-boxes. + +The SplitThreshold parameter determines how many events to keep in a box +before splitting it into sub-boxes. This value can significantly affect +performance/memory use! Too many events per box will mean unnecessary +iteration and a slowdown in general. Too few events per box will waste +memory with the overhead of boxes. + +You can create a file-backed MDEventWorkspace by specifying the Filename +and Memory parameters. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateModeratorModel-v1.rst b/Code/Mantid/docs/source/algorithms/CreateModeratorModel-v1.rst new file mode 100644 index 000000000000..f0d7439f60c5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateModeratorModel-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a model of a moderator using the given parameters. The +parameters are given as a string to allow flexibility for each moderator +model having different parameterisation. + +Available models with parameter names: + +- IkedaCarpenterModerator - + + - TiltAngle - The tilt angle in degrees; + - TauF - The fast decay coefficient in microseconds + - TauS - The slow decay coefficient in microseconds + - R - The mixing coefficient + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreatePSDBleedMask-v1.rst b/Code/Mantid/docs/source/algorithms/CreatePSDBleedMask-v1.rst new file mode 100644 index 000000000000..9de005a92dcb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreatePSDBleedMask-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The diagnostic test attempts to find all tubes within the instrument +attached to the workspace. If successful, each tube is tested for +saturation above the level defined by the 'MaxTubeFramerate' property. +If any pixel, not including those marked to be ignored around the +equatorial region, are counting above this threshold then the entire +tube is masked. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- The workspace must contain either raw counts or counts/us. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreatePeaksWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreatePeaksWorkspace-v1.rst new file mode 100644 index 000000000000..f4cd4a7a77d9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreatePeaksWorkspace-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Create an empty `PeaksWorkspace `__. Use +:ref:`_algm-LoadIsawPeaks` or :ref:`_algm-FindPeaksMD` to +create a peaks workspace with peaks. + +This workspace can serve as a starting point for modifying the +`PeaksWorkspace `__, using the GUI or python scripting, +for example. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateSampleShape-v1.rst b/Code/Mantid/docs/source/algorithms/CreateSampleShape-v1.rst new file mode 100644 index 000000000000..dedd7610c68a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateSampleShape-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a shape object that defines the sample and sets the sample for +the given workspace. Shapes are defined using XML descriptions that can +be found `here `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateSampleWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateSampleWorkspace-v1.rst new file mode 100644 index 000000000000..e65a833a0ba1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateSampleWorkspace-v1.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates sample workspaces for usage examples and other situations. + +You can select a predefined function for the data or enter your own by +selecting User Defined in the drop down. + +The data will be the same for each spectrum, and is defined by the +function selected, and a little noise if Random is selected. All values +are taken converted to absolute values at present so negative values +will become positive. For event workspaces the intensity of the graph +will be affected by the number of events selected. + +Here is an example of a user defined formula containing two peaks and a +background. + +``name=LinearBackground, A0=0.5;name=Gaussian, PeakCentre=10000, Height=50, Sigma=0.5;name=Gaussian, PeakCentre=1000, Height=80, Sigma=0.5`` + +Random also affects the distribution of events within bins for event +workspaces. If Random is selected the results will differ between runs +of the algorithm and will not be comparable. If comparing the output is +important set Random to false or uncheck the box. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateSimulationWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateSimulationWorkspace-v1.rst new file mode 100644 index 000000000000..c78b95659c76 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateSimulationWorkspace-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a blank workspace for a given instrument with the option of +pulling in detector tables from a RAW/NeXus data file. The histogram +sizes are given by binning parameters, see :ref:`_algm-Rebin`, rather +than explicit data arrays. There is also an option to set the X axis +unit. + +If the DetectorTableFilename property is blank then it is assumed that a +1:1 spectra-mapping is required and the workspace will have the same +number of histograms as detectors in the instrument (not including +monitors) + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateSingleValuedWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateSingleValuedWorkspace-v1.rst new file mode 100644 index 000000000000..ba3f4d5fbd0a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateSingleValuedWorkspace-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a 2D workspace that contains a single value and an optional +error value. This is useful if, for example, there is a need to multiply +(or divide etc) a workspace by a single value. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspace-v1.rst new file mode 100644 index 000000000000..0f317f479140 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspace-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a transmission run workspace given one or more TOF workspaces +and the original run Workspace. If two workspaces are provided, then the +workspaces are stitched together using :ref:`_algm-Stitch1D`. +InputWorkspaces must be in TOF. A single output workspace is generated +with x-units of Wavlength in angstroms. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspaceAuto-v1.rst b/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspaceAuto-v1.rst new file mode 100644 index 000000000000..e426227ecff5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspaceAuto-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Facade over +:ref:`_algm-CreateTransmissionWorkspace`. Pull +numeric parameters out of the instrument parameters where possible. You +can override any of these automatically applied defaults by providing +your own value for the input. + +See :ref:`_algm-CreateTransmissionWorkspace` for +more information on the wrapped algorithm. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst new file mode 100644 index 000000000000..2ca96f5f5139 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Example of use in Python for create a simple histogram workspace and +automatically populating the VerticalAxis with SpectraNumber values. + +.. code:: python + + dataX = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] + dataY = [1,2,3,4,5,6,7,8,9,10,11,12] + dataE = [1,2,3,4,5,6,7,8,9,10,11,12] + + # The workspace will be named "dataWS" + dataWS = CreateWorkspace(DataX=dataX, DataY=dataY, DataE=dataE, NSpec=4,UnitX="Wavelength") + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CropWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CropWorkspace-v1.rst new file mode 100644 index 000000000000..97f6e52a66c9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CropWorkspace-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Extracts a 'block' from a workspace and places it in a new workspace +(or, to look at it another way, lops bins or spectra off a workspace). + +CropWorkspace works on workspaces with common X arrays/bin boundaries or +on so-called `ragged workspaces `__. If the input +workspace has common bin boundaries/X values then cropping in X will +lead to an output workspace with fewer bins than the input one. If the +boundaries are not common then the output workspace will have the same +number of bins as the input one, but with data values outside the X +range given set to zero. + +If an X value given for XMin/XMax does not match a bin boundary (within +a small tolerance to account for rounding errors), then the closest bin +boundary within the range will be used. Note that if none of the +optional properties are given, then the output workspace will be a copy +of the input one. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CrossCorrelate-v1.rst b/Code/Mantid/docs/source/algorithms/CrossCorrelate-v1.rst new file mode 100644 index 000000000000..f45942485686 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CrossCorrelate-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute the cross correlation function for a range of spectra with +respect to a reference spectrum. + +This is use in powder diffraction experiments when trying to estimate +the offset of one spectra with respect to another one. The spectra are +converted in d-spacing and then interpolate on the X-axis of the +reference. The cross correlation function is computed in the range +[-N/2,N/2] where N is the number of points. + +More details can be found +`here. `__ + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst new file mode 100644 index 000000000000..8a11bfe527b3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst @@ -0,0 +1,43 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm uses a numerical integration method to calculate +attenuation factors resulting from absorption and single scattering +within a cuboid region of a sample with the dimensions and material +properties given. **The gauge volume generated will be an axis-aligned +cuboid centred on the sample (centre) position. The sample must fully +enclose this cuboid. If this does not meet your needs you can instead +use the general :ref:`_algm-AbsorptionCorrection` +algorithm in conjunction with +:ref:`_algm-DefineGaugeVolume`.** + +Factors are calculated for each spectrum (i.e. detector position) and +wavelength point, as defined by the input workspace. The sample is +divided up into cuboids having sides of as close to the size given in +the ElementSize property as the sample dimensions will allow. Thus the +calculation speed depends linearly on the total number of bins in the +workspace and goes as :math:`\rm{ElementSize}^{-3}`. + +Path lengths through the sample are then calculated for the centre-point +of each element and a numerical integration is carried out using these +path lengths over the volume elements. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must have units of wavelength. The +`instrument `__ associated with the workspace must be fully +defined because detector, source & sample position are needed. A sample +shape must have been defined using, e.g., +:ref:`_algm-CreateSampleShape` and the gauge volume must be +fully within the sample. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CylinderAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/CylinderAbsorption-v1.rst new file mode 100644 index 000000000000..74048e9136f5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CylinderAbsorption-v1.rst @@ -0,0 +1,55 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm uses a numerical integration method to calculate +attenuation factors resulting from absorption and single scattering in a +cylindrical sample with the dimensions and material properties given. +Factors are calculated for each spectrum (i.e. detector position) and +wavelength point, as defined by the input workspace. The sample is +divided up into a stack of slices, which are then divided into annuli +(rings). These annuli are further divided (see Ref. [2], Appendix A) to +give the full set of elements for which a calculation will be carried +out. Thus the calculation speed depends linearly on the total number of +bins in the workspace and on the number of slices. The dependence on the +number of annuli is stronger, going as :math:`3n ( n+1 )`. + +Path lengths through the sample are then calculated for the centre-point +of each element and a numerical integration is carried out using these +path lengths over the volume elements. + +Assumptions +^^^^^^^^^^^ + +Although no assumptions are made about the beam direction or the sample +position, the cylinder will be constructed with its centre at the sample +position and it's axis along the y axis (which in the case of most +instruments is the vertical). + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must have units of wavelength. The +`instrument `__ associated with the workspace must be fully +defined because detector, source & sample position are needed. + +References +^^^^^^^^^^ + +The method used here is based upon work presented in the following two +papers, although it does not yet fully implement all aspects discussed +there (e.g. there's no multiple scattering and no concentric cylinders). + +#. I.A. Blech & B.L. Averbach, *Multiple Scattering of Neutrons in + Vanadium and Copper*, Phys. Rev. **137 4A** (1965) A1113. +#. A.K. Soper & P.A. Egelstaff, *Multiple Scattering and Attenuation of + Neutrons in Concentric Cylinders*, NIM **178** (1980) 415. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DakotaChiSquared-v1.rst b/Code/Mantid/docs/source/algorithms/DakotaChiSquared-v1.rst new file mode 100644 index 000000000000..9b8e001a176b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DakotaChiSquared-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compare two nexus files containing matrix workspaces and output chi +squared into a file + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DefineGaugeVolume-v1.rst b/Code/Mantid/docs/source/algorithms/DefineGaugeVolume-v1.rst new file mode 100644 index 000000000000..fe77bff5ccc9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DefineGaugeVolume-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Intended for use on data from engineering beamlines, this algorithm +creates a shape object for use as the 'gauge volume' (i.e. the portion +of the sample that is visible to the detectors in a given run) of a +larger sample in the :ref:`_algm-AbsorptionCorrection` +algorithm. The sample shape will also need to be defined using, e.g., +the :ref:`_algm-CreateSampleShape` algorithm. Shapes are +defined using XML descriptions that can be found +`here `__. + +Internally, this works by attaching the XML string (after validating it) +to a property called "GaugeVolume" on the workspace's `Run `__ +object. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DeleteLog-v1.rst b/Code/Mantid/docs/source/algorithms/DeleteLog-v1.rst new file mode 100644 index 000000000000..495f5bd2763e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DeleteLog-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Removes a named log from the run attached to the input workspace. If the +log does not exist then the algorithm simply emits a warning and does +not fail. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DeleteTableRows-v1.rst b/Code/Mantid/docs/source/algorithms/DeleteTableRows-v1.rst new file mode 100644 index 000000000000..78c19a53c249 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DeleteTableRows-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +If the specified rows exist they will be deleted form the workspace. If +the row list is empty the algorithm does nothing. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DeleteWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/DeleteWorkspace-v1.rst new file mode 100644 index 000000000000..77eb47ce3fd6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DeleteWorkspace-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +If the input workspace exists then it is removed from Mantid. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DensityOfStates-v1.rst b/Code/Mantid/docs/source/algorithms/DensityOfStates-v1.rst new file mode 100644 index 000000000000..180eb7c00024 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DensityOfStates-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates phonon densities of states, Raman and IR spectrum from the +output of CASTEP code obtained in the form of .phonon and .castep files. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DetectorDiagnostic-v1.rst b/Code/Mantid/docs/source/algorithms/DetectorDiagnostic-v1.rst new file mode 100644 index 000000000000..f9d3bbe0b708 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DetectorDiagnostic-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is a C++ replacement for the Python diagnostics.diagnose +function located in the scripts/inelastic directory. The algorithm +expects processed workspaces as input just as the other function did. +The main functionality of the algorithm is to determine issues with +detector vanadium runs and mask out bad pixels. The algorithms that are +run on the detector vanadium are FindDetectorsOutsideLimits and +MedianDetectorTest. It also performs a second set of diagnostics on +another detector vanadium run and DetectorEfficiencyVariation on the +two. The algorithm also checks processed sample workspaces (total counts +and background) for bad pixels as well. The total counts workspace is +tested with FindDetectorsOutsideLimits. The background workspace is run +through MedianDetector test. A processed sample workspace can be given +to perform and CreatePSDBleedMask will be run on it. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCor-v1.rst b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCor-v1.rst new file mode 100644 index 000000000000..32c6090e03ed --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCor-v1.rst @@ -0,0 +1,42 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The probability of neutron detection by each detector in the +`workspace `__ is calculated from the neutrons' kinetic +energy, angle between their path and the detector axis, detector gas +pressure, radius and wall thickness. The detectors must be cylindrical +and their :sup:`3`\ He partial pressure, wall thickness and radius +stored in the input workspace, the first in atmospheres and the last two +in metres. That workspace then needs to be converted so that its +X-values are in `units `__ of energy transfer, e.g. using +the :ref:`_algm-ConvertUnits` algorithm. + +To estimate the true number of neutrons that entered the detector the +counts in each bin are divided by the detector efficiency of that +detector at that energy. + +The numbers of counts are then multiplied by the value of +:math:`k_i/k_f` for each bin. In that formula :math:`k_i` is the +wavenumber a neutron leaving the source (the same for all neutrons) and +:math:`k_f` is the wavenumber on hitting the detector (dependent on the +detector and energy bin). They're calculated, in angstrom\ :sup:`-1`, as + +| :math:`k_i = \sqrt{\frac{E_i}{2.07212466}}` +| :math:`k_f = \sqrt{\frac{E_i - \Delta E}{2.07212466}}` + +where :math:`E_i` and :math:`\Delta E` are energies in meV, the inital +neutron kinetic energy and the energy lost to the sample respectively. + +Note: it is not possible to use this `algorithm `__ to +correct for the detector efficiency alone. One solution to this is to +divide the output algorithm by :math:`k_i/k_f` calculated as above. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCorUser-v1.rst b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCorUser-v1.rst new file mode 100644 index 000000000000..4ead7cffc84a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCorUser-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm will correct detector efficiency according to the ILL INX +program for time-of-flight data reduction. + +A formula named "formula\_eff" must be defined in the instrument +parameters file. The input workspace must be in DeltaE units. + +The output data will be corrected as: + +:math:`y = \frac{y}{eff}` + +where :math:`eff` is + +:math:`eff = \frac{f(Ei - \Delta E)}{f(E_i)}` + +The function :math:`f` is defined as "formula\_eff" in the IDF. To date +this has been implemented at the ILL for ILL IN4, IN5 and IN6. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst new file mode 100644 index 000000000000..695a8a3cd7d6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst @@ -0,0 +1,38 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +It is intended that the input white beam vanadium workspaces are from +the same instrument and were collected before and after an experimental +run of interest. First the ratios of the total number of counts in +corresponding histograms from each input workspace are calculated and +then the median ratio is calculated. Each ratio is compared to the +median and a histogram will fail when any of the following conditions +are true: + +- (sum1/sum2)/median(sum1/sum2) > Variation +- (sum1/sum2)/median(sum1/sum2) < 1/Variation + +where sum1 is the sum of the counts in a histogram in the workspace +WhiteBeamBase and sum2 is the sum of the counts in the equivalent +histogram in WhiteBeamCompare. The above equations only make sense for +identifying bad detectors if Variation > 1. If a value of less than one +is given for Variation then Variation will be set to the reciprocal. + +The output workspace contains a MaskWorkspace where those spectra that +fail the tests are masked and those that pass them are assigned a single +positive value. + +Child algorithms used +^^^^^^^^^^^^^^^^^^^^^ + +Uses the :ref:`_algm-Integration` algorithm to sum the spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DetermineChunking-v1.rst b/Code/Mantid/docs/source/algorithms/DetermineChunking-v1.rst new file mode 100644 index 000000000000..d8ec898381ae --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DetermineChunking-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Workflow algorithm to determine chunking strategy for event nexus, +runinfo.xml, raw, or histo nexus files + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst b/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst new file mode 100644 index 000000000000..df1159fdf190 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst @@ -0,0 +1,72 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is responsible for taking an absolute units sample and +converting it to an integrated value (one value for entire workspace) +for that sample. A corresponding detector vanadium can be used in +conjunction with the data reduction. The diagram below shows the +workflow. The AbsUnitsIncidentEnergy parameter needs to be passed via a +property manager since the absolute units sample may have been measured +at an energy different from the sample of interest. Parameters in +italics are controlled by the `instrument parameter file +(IPF) `__ unless provided to the algorithm via +a property manager. The mappings are given below. + ++-------------------------+----------------------+ +| Parameter | IPF Mapping | ++=========================+======================+ +| VanadiumMass | vanadium-mass | ++-------------------------+----------------------+ +| AbsUnitsMinimumEnergy | monovan-integr-min | ++-------------------------+----------------------+ +| AbsUnitsMaximumEnergy | monovan-integr-max | ++-------------------------+----------------------+ + +The last two parameters are used to create a single bin for the *Rebin* +algorithm. The dashed oval parameter, VanadiumRmm, is taken from the +atomic information for the molecular mass of Vanadium. The open circle +represents detector diagnostic parameters and they are detailed in the +table below. + ++-----------------------------+----------------------+-------------------------------------------------------+ +| Parameter | IPF Mapping | :ref:`_algm-DetectorDiagnostic` Mapping | ++=============================+======================+=======================================================+ +| HighCounts | diag\_huge | HighThreshold | ++-----------------------------+----------------------+-------------------------------------------------------+ +| LowCounts | diag\_tiny | LowThreshold | ++-----------------------------+----------------------+-------------------------------------------------------+ +| AbsUnitsLowOutlier | monovan\_lo\_bound | LowOutlier | ++-----------------------------+----------------------+-------------------------------------------------------+ +| AbsUnitsHighOutlier | monovan\_hi\_bound | HighOutlier | ++-----------------------------+----------------------+-------------------------------------------------------+ +| AbsUnitsMedianTestLow | monovan\_lo\_frac | LowThresholdFraction | ++-----------------------------+----------------------+-------------------------------------------------------+ +| AbsUnitsMedianTestHigh | monovan\_hi\_frac | HighThresholdFraction | ++-----------------------------+----------------------+-------------------------------------------------------+ +| AbsUnitsErrorBarCriterion | diag\_samp\_sig | SignificanceTest | ++-----------------------------+----------------------+-------------------------------------------------------+ + +If a detector vanadium is used, the processed sample workspace is +multiplied by a factor containing the sample mass (SampleMass), sample +molecular mass (SampleRmm) and the cross-section (Scattering XSec) given +by: +:math:`\frac{(\sigma^{V}_{incoherent}+\sigma^{V}_{coherent})\times10^{3}}{4\pi}` +with the cross-section units of :math:`millibarns/steradian`. + +Workflow +~~~~~~~~ + +.. figure:: /images/DgsAbsoluteUnitsReductionWorkflow.png + :alt: DgsAbsoluteUnitsReductionWorkflow.png + + DgsAbsoluteUnitsReductionWorkflow.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DgsConvertToEnergyTransfer-v1.rst b/Code/Mantid/docs/source/algorithms/DgsConvertToEnergyTransfer-v1.rst new file mode 100644 index 000000000000..b95a4c84e78a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DgsConvertToEnergyTransfer-v1.rst @@ -0,0 +1,48 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is responsible for making the conversion from +time-of-flight to energy transfer for direct geometry spectrometers. The +diagram below shows the workflow for the algorithm. The SNS instruments +have a log called EnergyRequest which allows the IncidentEnergyGuess +parameter to be left blank. Also, SNS instruments need to pass a monitor +workspace to *GetEi* since they are separate from the sample workspace. +Parameters in italics are controlled by the `instrument parameter file +(IPF) `__ unless provided to the algorithm via +a property manager. The mappings are given below. + ++--------------------+------------------+ +| Parameter | IPF Mapping | ++====================+==================+ +| TibTofRangeStart | bkgd-range-min | ++--------------------+------------------+ +| TibTofRangeEnd | bkgd-range-max | ++--------------------+------------------+ + +Parameters in italics with dashed perimeters are only controllable by +the IPF name given. All underlined parameters are fixed and not +controllable. The EnergyTransferRange parameter takes the canonical +Mantid notation of (start, step, stop). However, it can be left blank +and the following values will be used +:math:`(-0.5E^{Guess}_{i}, 0.01E^{Guess}_{i}, 0.99E^{Guess}_{i})`. + +The use of the SofPhiEIsDistribution parameter in the last Rebin call is +used to set the *Rebin* algorithm parameter PreserveEvents. + +Workflow +~~~~~~~~ + +.. figure:: /images/DgsConvertToEnergyTransferWorkflow.png + :alt: DgsConvertToEnergyTransferWorkflow.png + + DgsConvertToEnergyTransferWorkflow.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DgsDiagnose-v1.rst b/Code/Mantid/docs/source/algorithms/DgsDiagnose-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DgsDiagnose-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DgsPreprocessData-v1.rst b/Code/Mantid/docs/source/algorithms/DgsPreprocessData-v1.rst new file mode 100644 index 000000000000..7623a1e8ef4b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DgsPreprocessData-v1.rst @@ -0,0 +1,42 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is responsible for normalising data via a given incident +beam parameter. This parameter, IncidentBeamNormalisation, is controlled +from the reduction property manager. It can have the values *None*, +*ByCurrent* or *ByMonitor*. For SNS, monitor workspaces need to be +passed. Parameters in italics are controlled by the `instrument +parameter file (IPF) `__ unless provided to the +algorithm via a property manager. The mappings are given below. + ++-----------------------+-----------------+ +| Parameter | IPF Mapping | ++=======================+=================+ +| MonitorIntRangeLow | norm-mon1-min | ++-----------------------+-----------------+ +| MonitorIntRangeHigh | norm-mon1-max | ++-----------------------+-----------------+ + +Parameters in italics with dashed perimeters are only controllable by +the IPF name given. All underlined parameters are fixed via other input +method. If normalisation is performed, a sample log called +DirectInelasticReductionNormalisedBy is added to the resulting workspace +with the normalisation procedure used. + +Workflow +~~~~~~~~ + +.. figure:: /images/DgsPreprocessDataWorkflow.png + :alt: DgsPreprocessDataWorkflow.png + + DgsPreprocessDataWorkflow.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DgsProcessDetectorVanadium-v1.rst b/Code/Mantid/docs/source/algorithms/DgsProcessDetectorVanadium-v1.rst new file mode 100644 index 000000000000..1d564af42f4f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DgsProcessDetectorVanadium-v1.rst @@ -0,0 +1,44 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is responsible for processing the detector vanadium in +the form required for the sample data normalisation in the convert to +energy transfer process. Parameters in italics are controlled by the +`instrument parameter file (IPF) `__ unless +provided to the algorithm via a property manager. The mappings are given +below. + ++----------------------+-----------------+ +| Parameter | IPF Mapping | ++======================+=================+ +| DetVanIntRangeLow | wb-integr-min | ++----------------------+-----------------+ +| DetVanIntRangeHigh | wb-integr-max | ++----------------------+-----------------+ + +Parameters in italics with dashed perimeters are only controllable by +the IPF name given. All underlined parameters are fixed and not +controllable. If the input detector vanadium is in TOF units and that is +the requested units for integration, the *ConvertUnits* algorithm does +not run. The range parameters feeding into *Rebin* are used to make a +single bin. The resulting integrated vanadium workspace can be saved to +a file using the reduction property manager with the boolean property +SaveProcessedDetVan. + +Workflow +~~~~~~~~ + +.. figure:: /images/DgsProcessDetectorVanadiumWorkflow.png + :alt: DgsProcessDetectorVanadiumWorkflow.png + + DgsProcessDetectorVanadiumWorkflow.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DgsReduction-v1.rst b/Code/Mantid/docs/source/algorithms/DgsReduction-v1.rst new file mode 100644 index 000000000000..18e1663976b6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DgsReduction-v1.rst @@ -0,0 +1,30 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This is the top-level workflow algorithm for direct geometry +spectrometer data reduction. This algorithm is responsible for gathering +the necessary parameters and generating calls to other workflow or +standard algorithms. + +Workflow +~~~~~~~~ + +Parameters for the child algorithms are not shown due to sheer number. +They will be detailed in the child algorithm diagrams. Items in +parallelograms are output workspaces from their respective algorithms. +Not all output workspaces are subsequently used by other algorithms. + +.. figure:: /images/DgsReductionWorkflow.png + :alt: DgsReductionWorkflow.png + + DgsReductionWorkflow.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DgsRemap-v1.rst b/Code/Mantid/docs/source/algorithms/DgsRemap-v1.rst new file mode 100644 index 000000000000..270849d7ca6a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DgsRemap-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is responsible for masking and grouping the given input +workspace. One can use the ExecuteOppositeOrder to do grouping first +then masking. + +Workflow +~~~~~~~~ + +.. figure:: /images/DgsRemapWorkflow.png + :alt: DgsRemapWorkflow.png + + DgsRemapWorkflow.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DiffPeaksWorkspaces-v1.rst b/Code/Mantid/docs/source/algorithms/DiffPeaksWorkspaces-v1.rst new file mode 100644 index 000000000000..067937d7325e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DiffPeaksWorkspaces-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm takes an input workspace (the LHSWorkspace) and removes +from it's list of peaks any that are also found in a second workspace +(the RHSWorkspace) in the same position in Q space within the specified +tolerance. Each peak in the RHSWorkspace is taken in turn and compared +to each peak in the LHSWorkspace in turn. The first match encountered is +used, and the matching peak removed from the output before moving onto +the next RHSWorkspace peak. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DiffractionEventCalibrateDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/DiffractionEventCalibrateDetectors-v1.rst new file mode 100644 index 000000000000..834a9ac43b3c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DiffractionEventCalibrateDetectors-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Moves the detectors in an instrument to optimize the maximum intensity +of each detector using gsl\_multimin\_fminimizer\_nmsimplex. Only bin +data close to peak you wish to maximize. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst new file mode 100644 index 000000000000..126746bda8bf --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst @@ -0,0 +1,55 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +|Example of RAW GEM data focused across the 5 detector banks| Given an +InputWorkspace and a Grouping filename, the algorithm performs the +following: + +#. The calibration file is read and a map of corresponding udet-group is + created. +#. The algorithm determine the X boundaries for each group as the upper + and lower limits of all contributing detectors to this group and + determine a logarithmic step that will ensure preserving the number + of bins in the initial workspace. +#. All histograms are read and rebinned to the new grid for their group. +#. A new workspace with N histograms is created. + +Within the `CalFile `__ any detectors with the 'select' flag +can be set to zero or with a group number of 0 or -ve groups are not +included in the analysis. + +Since the new X boundaries depend on the group and not the entire +workspace, this focusing algorithm does not create overestimated X +ranges for multi-group instruments. However it is important to remember +that this means that this algorithm outputs a `ragged +workspace `__. Some 2D and 3D plots will not display +the data correctly. + +The DiffractionFocussing algorithm uses GroupDetectors algorithm to +combine data from several spectra according to GroupingFileName file +which is a `CalFile `__. + +For EventWorkspaces +~~~~~~~~~~~~~~~~~~~ + +The algorithm can be used with an `EventWorkspace `__ +input, and will create an EventWorkspace output if a different workspace +is specified. + +The main difference vs. using a Workspace2D is that the event lists from +all the incoming pixels are simply appended in the grouped spectra; this +means that you can rebin the resulting spectra to finer bins with no +loss of data. In fact, it is unnecessary to bin your incoming data at +all; binning can be performed as the very last step. + +.. |Example of RAW GEM data focused across the 5 detector banks| image:: GEM_Focused.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst new file mode 100644 index 000000000000..d1ec74014374 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst @@ -0,0 +1,64 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +|Example of RAW GEM data focused across the 5 detector banks| Given an +InputWorkspace and a Grouping filename, the algorithm performs the +following: + +#. The calibration file is read and a map of corresponding udet-group is + created. +#. The algorithm determine the X boundaries for each group as the upper + and lower limits of all contributing detectors to this group and + determine a logarithmic step that will ensure preserving the number + of bins in the initial workspace. +#. All histograms are read and rebinned to the new grid for their group. +#. A new workspace with N histograms is created. + +Within the `CalFile `__ any detectors with the 'select' flag +can be set to zero or with a group number of 0 or -ve groups are not +included in the analysis. + +Since the new X boundaries depend on the group and not the entire +workspace, this focusing algorithm does not create overestimated X +ranges for multi-group instruments. However it is important to remember +that this means that this algorithm outputs a `ragged +workspace `__. Some 2D and 3D plots will not display +the data correctly. + +The DiffractionFocussing algorithm uses GroupDetectors algorithm to +combine data from several spectra according to GroupingFileName file +which is a `CalFile `__. + +For EventWorkspaces +~~~~~~~~~~~~~~~~~~~ + +The algorithm can be used with an `EventWorkspace `__ +input, and will create an EventWorkspace output if a different workspace +is specified. + +The main difference vs. using a Workspace2D is that the event lists from +all the incoming pixels are simply appended in the grouped spectra; this +means that you can rebin the resulting spectra to finer bins with no +loss of data. In fact, it is unnecessary to bin your incoming data at +all; binning can be performed as the very last step. + +Previous Versions +----------------- + +Version 1 +~~~~~~~~~ + +Version 1 did not support the use of workspaces to carry grouping +workspaces and only worked with CalFiles. + +.. |Example of RAW GEM data focused across the 5 detector banks| image:: GEM_Focused.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Divide-v1.rst b/Code/Mantid/docs/source/algorithms/Divide-v1.rst new file mode 100644 index 000000000000..260c74b8d8b1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Divide-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +.. raw:: mediawiki + + {{BinaryOperation|verb=divided|prep=by|symbol=\div}} + +.. raw:: mediawiki + + {{BinaryOperationFooterMultiply|verb=divided|prep=by|symbol=\div}} + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DivideMD-v1.rst b/Code/Mantid/docs/source/algorithms/DivideMD-v1.rst new file mode 100644 index 000000000000..239425dd5319 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DivideMD-v1.rst @@ -0,0 +1,35 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Divide two `MDHistoWorkspace `__'s or a +MDHistoWorkspace and a scalar. + +The error of :math:`f = a / b` is propagated with +:math:`df^2 = f^2 * (da^2 / a^2 + db^2 / b^2)` + +- **MDHistoWorkspace / MDHistoWorkspace** + + - The operation is performed element-by-element. + +- **MDHistoWorkspace / Scalar** + + - Every element of the MDHistoWorkspace is divided by the scalar. + +- **Scalar / MDHistoWorkspace** + + - This is not allowed. + +- **`MDEventWorkspace `__'s** + + - This operation is not supported, as it is not clear what its + meaning would be. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DownloadRemoteFile-v1.rst b/Code/Mantid/docs/source/algorithms/DownloadRemoteFile-v1.rst new file mode 100644 index 000000000000..225acbacec0c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/DownloadRemoteFile-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Download a file from a remote compute resource. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSAzimuthalAverage1D-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSAzimuthalAverage1D-v1.rst new file mode 100644 index 000000000000..f56990d29dfb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSAzimuthalAverage1D-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute I(q) for reduced EQSANS data + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSDarkCurrentSubtraction-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSDarkCurrentSubtraction-v1.rst new file mode 100644 index 000000000000..a0679948053b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSDarkCurrentSubtraction-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Subtract the dark current from an EQSANS data set. This workflow +algorithm will: + +- Properly load the dark current data set + +- Normalize the dark current to the data taking period + +- Subtract the dark current from the input workspace + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSDirectBeamTransmission-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSDirectBeamTransmission-v1.rst new file mode 100644 index 000000000000..f5b16b90926d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSDirectBeamTransmission-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute the transmission using the direct beam method on EQSANS + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSLoad-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSLoad-v1.rst new file mode 100644 index 000000000000..dfc6c0bdd4ad --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSLoad-v1.rst @@ -0,0 +1,30 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Workflow algorithm that loads EQSANS event data and applies basic +corrections to the workspace. Those include: + +- Moving the detector at its proper position in Z + +- Moving the detector according to the beam center + +- Correcting the TOF + +- Applying TOF cuts + +- Gathering meta-data information such as configuration mask and +moderator position + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSMonitorTOF-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSMonitorTOF-v1.rst new file mode 100644 index 000000000000..0c1144624b94 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSMonitorTOF-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Converts the TOF into a wavelength for the beam monitor. This algorithm +needs to be run once on every data set. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSNormalise-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSNormalise-v1.rst new file mode 100644 index 000000000000..a97c1fc3a5c5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSNormalise-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Normalise detector counts by accelerator current and beam spectrum. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSPatchSensitivity-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSPatchSensitivity-v1.rst new file mode 100644 index 000000000000..69a681774293 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSPatchSensitivity-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculate the detector sensitivity and patch the pixels that are masked +in a second workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSQ2D-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSQ2D-v1.rst new file mode 100644 index 000000000000..f21360b5d7a6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSQ2D-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Computes I(Qx,Qy) for EQSANS data using Qxy to each frame, as +appropriate. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSResolution-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSResolution-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSResolution-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EQSANSTofStructure-v1.rst b/Code/Mantid/docs/source/algorithms/EQSANSTofStructure-v1.rst new file mode 100644 index 000000000000..ad5dd28420b3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EQSANSTofStructure-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Documentation to come. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EditInstrumentGeometry-v1.rst b/Code/Mantid/docs/source/algorithms/EditInstrumentGeometry-v1.rst new file mode 100644 index 000000000000..c8c2f6b9f5f7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EditInstrumentGeometry-v1.rst @@ -0,0 +1,58 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm can + +| ``1. add an Instrument to a Workspace without any real instrument associated with, or`` +| ``2. replace a Workspace's Instrument with a new Instrument, or`` +| ``3. edit all detectors' parameters of the instrument associated with a Workspace (partial instrument editing is not supported). `` + +Requirements on input properties +-------------------------------- + +1. PrimaryFightPath (L1): If it is not given, L1 will be the distance +between source and sample in the original instrument. Otherwise, L1 is +read from input. The source position of the modified instrument is (0, +0, -L1); + +2. SpectrumIDs: If not specified (empty list), then SpectrumIDs will be +set up to any array such that SpectrumIDs[wsindex] is the spectrum ID of +workspace index 'wsindex'; + +3. L2 and Polar cannot be empty list; + +4. SpectrumIDs[i], L2[i], Polar[i], Azimuthal[i] and optional +DetectorIDs[i] correspond to the detector of a same spectrum. + +Limitations +----------- + +There are some limitations of this algorithm. + +1. The key to locate the detector is via spectrum ID; + +2. For each spectrum, there is only one and only one new detector. Thus, +if one spectrum is associated with a group of detectors previously, the +replacement (new) detector is the one which is (diffraction) focused on +after this algorithm is called. + +Instruction +----------- + +1. For powder diffractomer with 3 spectra, user can input + +| ``  SpectrumIDs = "1, 3, 2"`` +| ``  L2 = "3.1, 3.2, 3.3"`` +| ``  Polar = "90.01, 90.02, 90.03"`` +| ``  Azimuthal = "0.1,0.2,0.3"`` +| ``  to set up the focused detectors' parameters for spectrum 1, 3 and 2.`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ElasticWindow-v1.rst b/Code/Mantid/docs/source/algorithms/ElasticWindow-v1.rst new file mode 100644 index 000000000000..233eefa0c4a4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ElasticWindow-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm Integrates over the range specified, converts the +spectrum axis into units of Q and Q^2 and Transposes the result +workspaces. + +There are two output workspaces. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EqualToMD-v1.rst b/Code/Mantid/docs/source/algorithms/EqualToMD-v1.rst new file mode 100644 index 000000000000..2b9a464fb982 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EqualToMD-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Perform the == (equals to) boolean operation on two MDHistoWorkspaces or +a MDHistoWorkspace and a scalar. The output workspace has a signal of +0.0 to mean "false" and a signal of 1.0 to mean "true". Errors are 0. + +For two MDHistoWorkspaces, the operation is performed +element-by-element. Only the signal is compared. + +For a MDHistoWorkspace and a scalar, the operation is performed on each +element of the output. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/EstimatePDDetectorResolution-v1.rst b/Code/Mantid/docs/source/algorithms/EstimatePDDetectorResolution-v1.rst new file mode 100644 index 000000000000..b4fa0227b0b5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/EstimatePDDetectorResolution-v1.rst @@ -0,0 +1,57 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Instrument resolution +--------------------- + +Resolution of a detector in d-spacing is defined as +:math:`\frac{\Delta d}{d}`, which is constant for an individual +detector. + +Starting from the Bragg equation for T.O.F. diffractometer, + +.. math:: d = \frac{t}{252.777\cdot L\cdot2\sin\theta} + +as + +.. math:: \Delta d = \sqrt{(\Delta T)^2 + (\Delta L)^2 + (\Delta\theta)^2} + +and thus + +.. math:: \frac{\Delta d}{d} = \sqrt{(\frac{\Delta T}{T})^2 + (\frac{\Delta L}{L})^2 + (\Delta\theta\cdot\cot(\theta))^2} + +where, + +- :math:`\Delta T` is the time resolution from modulator; +- :math:`\Delta\theta` is the coverage of the detector, and can be + approximated from the square root of the solid angle of the detector + to sample; +- :math:`L` is the flight path of the neutron from source to detector. + +Factor Sheet +------------ + +NOMAD +~~~~~ + +Detector size + +- vertical: 1 meter / 128 pixel +- Horizontal: half inch or 1 inch + +POWGEN +~~~~~~ + +Detector size: 0.005 x 0.0543 + +Range of :math:`\Delta\theta\cot\theta`: :math:`(0.00170783, 0.0167497)` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExaminePowderDiffProfile-v1.rst b/Code/Mantid/docs/source/algorithms/ExaminePowderDiffProfile-v1.rst new file mode 100644 index 000000000000..b8c7b8ea13e9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExaminePowderDiffProfile-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is to examine peak profile values for powder +diffractometry by LeBailFit. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Exponential-v1.rst b/Code/Mantid/docs/source/algorithms/Exponential-v1.rst new file mode 100644 index 000000000000..5ac0d499056c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Exponential-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm will apply the exponential function (i.e. :math:`e^y`) to +the data and associated errors from a workspaces. The units of the +workspace are not updated, so the user must take care in the use of such +output workspaces. When acting on an event workspace, the output will be +a Workspace2D, with the default binning from the original workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExponentialCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/ExponentialCorrection-v1.rst new file mode 100644 index 000000000000..c064a7e9f580 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExponentialCorrection-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm corrects the data and error values on a workspace by the +value of an exponential function of the form +:math:`{\rm C0} e^{-{\rm C1} x}`. This formula is calculated for each +data point, with the value of *x* being the mid-point of the bin in the +case of histogram data. The data and error values are either divided or +multiplied by the value of this function, according to the setting of +the Operation property. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExponentialMD-v1.rst b/Code/Mantid/docs/source/algorithms/ExponentialMD-v1.rst new file mode 100644 index 000000000000..afa3421bfc56 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExponentialMD-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This executes the exponential function on a MDHistoWorkspace. + +The signal :math:`a` becomes :math:`f = e^a` + +The error :math:`da` becomes :math:`df^2 = f^2 * da^2` + +This algorithm cannot be run on a +`MDEventWorkspace `__. Its equivalent on a +`MatrixWorkspace `__ is called +:ref:`_algm-Exponential`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExportExperimentLog-v1.rst b/Code/Mantid/docs/source/algorithms/ExportExperimentLog-v1.rst new file mode 100644 index 000000000000..a2f66971b71e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExportExperimentLog-v1.rst @@ -0,0 +1,75 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm ExportExperimentLog obtains run information, sample +information and sample log information from a MatrixWorkspace and write +them to a csv file. + +File Mode +--------- + +There are 3 modes to write the experiment log file. + +1. "new": A new file will be created with header line; + +2. "appendfast": A line of experiment log information will be appended +to an existing file; + +- It is assumed that the log names given are exactly same as those in + the file, as well as their order; +- Input property *SampleLogTitles* will be ignored in this option; + +3. "append": A line of experiment log information will be appended to an +existing file; + +- The algorithm will check whether the specified log file names, titles + and their orders are exactly same as those in the file to append to; +- If any difference is deteced, the old file will be renamed in the + same directory. And a new file will be generated. + +Missing Sample Logs +------------------- + +If there is any sample log specified in the properites but does not +exist in the workspace, a zero float value will be put to the experiment +log information line, as the preference of instrument scientist. + +Sample Log Operation +-------------------- + +If the type of a sample log is TimeSeriesProperty, it must be one of the +following 5 types. + +- "min": minimum TimeSeriesProperty's values; +- "max": maximum TimeSeriesProperty's values; +- "average": average of TimeSeriesProperty's values; +- "sum": summation of TimeSeriesProperty's values; +- "0": first value of TimeSeriesProperty's value. + +If the type of a sample log is string and in fact it is a string for +time, then there will an option as + +- "localtime": convert the time from UTC (default) to local time + +Otherwise, there is no operation required. For example, log 'duration' +or 'run\_number' does not have any operation on its value. An empty +string will serve for them in property 'SampleLogOperation'. + +File format +----------- + +There are two types of output file formats that are supported. They are +csv (comma seperated) file and tsv (tab separated) file. The csv file +must have an extension as ".csv". If a user gives the name of a log +file, which is in csv format, does not have an extension as .csv, the +algorithm will correct it automatically. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExportSampleLogsToCSVFile-v1.rst b/Code/Mantid/docs/source/algorithms/ExportSampleLogsToCSVFile-v1.rst new file mode 100644 index 000000000000..714f040b6f68 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExportSampleLogsToCSVFile-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Header file +----------- + +- Line 0: Test date: [Test date in string] +- Line 1: Test description: [Description of this log file] +- Line 2: Header content given by user via input property *Header*. + Usually it is the column names in the .csv file + +CSV File format +--------------- + +- Column 0: Absolute time in second +- Column 1: Relative to first log entry's time +- Column 2 to (2 + n) - 1: log values in the order determined by input + *SampleLogNames* + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExportTimeSeriesLog-v1.rst b/Code/Mantid/docs/source/algorithms/ExportTimeSeriesLog-v1.rst new file mode 100644 index 000000000000..af687f45e434 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExportTimeSeriesLog-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Export TimeSeriesProperty log in a Workspace to a MatrixWorkspace + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExtractFFTSpectrum-v1.rst b/Code/Mantid/docs/source/algorithms/ExtractFFTSpectrum-v1.rst new file mode 100644 index 000000000000..51a293e300c8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExtractFFTSpectrum-v1.rst @@ -0,0 +1,52 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm iterates the :ref:`_algm-FFT` algorithm on each spectrum of +InputWorkspace, computing the Fourier Transform and storing the +transformed spectrum in OutputWorkspace. If InputImagWorkspace is also +passed, then the pair spectrum *i* of InputWorkspace (real) and spectrum +*i* of InputImagWorkspace (real) are taken together as spectrum *i* of a +complex workspace, on which :ref:`_algm-FFT` is applied. + +The FFTPart parameter specifies which transform is selected from the +output of the :ref:`_algm-FFT` algorithm: + +For the case of input containing real and imaginary workspaces: + ++-----------+------------------------------+ +| FFTPart | Description | ++===========+==============================+ +| 0 | Complete real part | ++-----------+------------------------------+ +| 1 | Complete imaginary part | ++-----------+------------------------------+ +| 2 | Complete transform modulus | ++-----------+------------------------------+ + +For the case of input containing no imaginary workspace: + ++-----------+----------------------------------------+ +| FFTPart | Description | ++===========+========================================+ +| 0 | Real part, positive frequencies | ++-----------+----------------------------------------+ +| 1 | Imaginary part, positive frequencies | ++-----------+----------------------------------------+ +| 2 | Modulus, positive frequencies | ++-----------+----------------------------------------+ +| 3 | Complete real part | ++-----------+----------------------------------------+ +| 4 | Complete imaginary part | ++-----------+----------------------------------------+ +| 5 | Complete transform modulus | ++-----------+----------------------------------------+ + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExtractMask-v1.rst b/Code/Mantid/docs/source/algorithms/ExtractMask-v1.rst new file mode 100644 index 000000000000..fe97bd17207e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExtractMask-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The masking from the InputWorkspace property is extracted by creating a +new MatrixWorkspace with a single X bin where: + +- 0 = masked; +- 1 = unmasked. + +The spectra containing 0 are also marked as masked and the instrument +link is preserved so that the instrument view functions correctly. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExtractMaskToTable-v1.rst b/Code/Mantid/docs/source/algorithms/ExtractMaskToTable-v1.rst new file mode 100644 index 000000000000..663b31cdd3d2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExtractMaskToTable-v1.rst @@ -0,0 +1,35 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +InputWorskpace +^^^^^^^^^^^^^^ + +It can be either a MaskWorkspace, containing the masking information, or +a Data workspace (EventWorkspace or Workspace2D), having detectors +masked. + +Optional MaskTableWorkspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the optional input 'MaskTableWorkspace' is given, it must be a table +workspace having the same format as output TableWorkspace such that it +contains 3 columns, XMin, XMax and DetectorIDsList. + +The contents in this mask table workspace will be copied to output +workspace. + +If a detector is masked in this input 'MaskTableWorkspace', and it is +also masked in input MaskWorkspace or data workspace, the setup (Xmin +and Xmax) in MaskTableWorkspace has higher priority, i.e., in the output +mask table workspace, the masked detector will be recorded in the row +copied from input MaskTableWrokspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExtractSingleSpectrum-v1.rst b/Code/Mantid/docs/source/algorithms/ExtractSingleSpectrum-v1.rst new file mode 100644 index 000000000000..5f18410add74 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ExtractSingleSpectrum-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Extracts a single spectrum from a `Workspace2D `__ and +stores it in a new workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FFT-v1.rst b/Code/Mantid/docs/source/algorithms/FFT-v1.rst new file mode 100644 index 000000000000..a949bdd54e7a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FFT-v1.rst @@ -0,0 +1,176 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The FFT algorithm performs discrete Fourier transform of complex data +using the Fast Fourier Transform algorithm. It uses the GSL Fourier +transform functions to do the calculations. Due to the nature of the +fast fourier transform the input spectra must have linear x axes. If the +imaginary part is not set the data is considered real. The "Transform" +property defines the direction of the transform: direct ("Forward") or +inverse ("Backward"). + +Note that the input data is shifted before the transform along the x +axis to place the origin in the middle of the x-value range. It means +that for the data defined on an interval [A,B] the output +:math:`F(\xi_k)` must be multiplied by :math:`e^{-2\pi ix_0\xi_k}`, +where :math:`x_0=\tfrac{1}{2}(A+B)`, :math:`\xi_k` is the frequency. + +Details +------- + +The Fourier transform of a complex function :math:`f(x)` is defined by +equation: + +.. math:: F(\xi)=\int_{-\infty}^\infty f(x)e^{-2\pi ix\xi} dx + +For discrete data with equally spaced :math:`x_n` and only non-zero on +an interval :math:`[A,B]` the integral can be approximated by a sum: + +.. math:: F(\xi)=\Delta x\sum_{n=0}^{N-1}f(x_n)e^{-2\pi ix_n\xi} + +Here :math:`\Delta x` is the bin width, :math:`x_n=A+\Delta xn`. If we +are looking for values of the transformed function :math:`F` at discrete +frequencies :math:`\xi_k=\Delta\xi k` with + +.. math:: \Delta\xi=\frac{1}{B-A}=\frac{1}{L}=\frac{1}{N\Delta x} + +the equation can be rewritten: + +.. math:: F_k=e^{-2\pi iA\xi_k}\Delta x\sum_{n=0}^{N-1}f_ne^{-\tfrac{2\pi i}{N}nk} + +Here :math:`f_n=f(x_n)` and :math:`F_k=F(\xi_k)`. The formula + +.. math:: \tilde{F}_k=\Delta x\sum_{n=0}^{N-1}f_ne^{-\tfrac{2\pi i}{N}nk} + +is the Discrete Fourier Transform (DFT) and can be efficiently evaluated +using the Fast Fourier Transform algorithm. The DFT formula calculates +the Fourier transform of data on the interval :math:`[0,L]`. It should +be noted that it is periodic in :math:`k` with period :math:`N`. If we +also assume that :math:`f_n` is also periodic with period :math:`N` the +DFT can be used to transform data on the interval :math:`[-L/2,L/2]`. To +do this we swap the two halves of the data array :math:`f_n`. If we +denote the modified array as :math:`\bar{f}_n`, its transform will be + +.. math:: \bar{F}_k=\Delta x\sum_{n=0}^{N-1}\bar{f}_ne^{-\tfrac{2\pi i}{N}nk} + +The Mantid FFT algorithm returns the complex array :math:`\bar{F}_K` as +Y values of two spectra in the output workspace, one for the real and +the other for the imaginary part of the transform. The X values are set +to the transform frequencies and have the range approximately equal to +:math:`[-N/L,N/L]`. The actual limits depend sllightly on whether +:math:`N` is even or odd and whether the input spectra are histograms or +point data. The variations are of the order of :math:`\Delta\xi`. The +zero frequency is always in the bin with index :math:`k=int(N/2)`. + +Example 1 +~~~~~~~~~ + +In this example the input data were calculated using function +:math:`\exp(-(x-1)^2)` in the range [-5,5]. + +.. figure:: /images/FFTGaussian1.png + :alt: Gaussian + + Gaussian +.. figure:: /images/FFTGaussian1FFT.png + :alt: FFT of a Gaussian + + FFT of a Gaussian +Because the :math:`x=0` is in the middle of the data array the transform +shown is the exact DFT of the input data. + +Example 2 +~~~~~~~~~ + +In this example the input data were calculated using function +:math:`\exp(-x^2)` in the range [-6,4]. + +.. figure:: /images/FFTGaussian2.png + :alt: Gaussian + + Gaussian +.. figure:: /images/FFTGaussian1FFT.png + :alt: FFT of a Gaussian + + FFT of a Gaussian +Because the :math:`x=0` is not in the middle of the data array the +transform shown includes a shifting factor of :math:`\exp(2\pi i\xi)`. +To remove it the output must be mulitplied by :math:`\exp(-2\pi i\xi)`. +The corrected transform will be: + +.. figure:: /images/FFTGaussian2FFT.png + :alt: FFT of a Gaussian + + FFT of a Gaussian +It should be noted that in a case like this, i.e. when the input is a +real positive even function, the correction can be done by finding the +transform's modulus :math:`(Re^2+Im^2)^{1/2}`. The output workspace +includes the modulus of the transform. + +Output +------ + +The output workspace for a direct ("Forward") transform contains either +three or six spectra, depending on whether the input function is complex +or purely real. If the input function has an imaginary part, the +transform is written to three spectra with indexes 0, 1, and 2. Indexes +0 and 1 are the real and imaginary parts, while index 2 contains the +modulus :math:`\sqrt{Re^2+Im^2}`. If the input function does not contain +an spectrum for the imaginary part (purely real function), the actual +transform is written to spectra with indexes 3 and 4 which are the real +and imaginary parts, respectively. The last spectrum (index 5) has the +modulus of the transform. The spectra from 0 to 2 repeat these results +for positive frequencies only. + +Output for the case of input function containing imaginary part: + ++-------------------+------------------------------+ +| Workspace index | Description | ++===================+==============================+ +| 0 | Complete real part | ++-------------------+------------------------------+ +| 1 | Complete imaginary part | ++-------------------+------------------------------+ +| 2 | Complete transform modulus | ++-------------------+------------------------------+ + +Output for the case of input function containing no imaginary part: + ++-------------------+----------------------------------------+ +| Workspace index | Description | ++===================+========================================+ +| 0 | Real part, positive frequencies | ++-------------------+----------------------------------------+ +| 1 | Imaginary part, positive frequencies | ++-------------------+----------------------------------------+ +| 2 | Modulus, positive frequencies | ++-------------------+----------------------------------------+ +| 3 | Complete real part | ++-------------------+----------------------------------------+ +| 4 | Complete imaginary part | ++-------------------+----------------------------------------+ +| 5 | Complete transform modulus | ++-------------------+----------------------------------------+ + +The output workspace for an inverse ("Backward") transform has 3 spectra +for the real (0), imaginary (1) parts, and the modulus (2). + ++-------------------+------------------+ +| Workspace index | Description | ++===================+==================+ +| 0 | Real part | ++-------------------+------------------+ +| 1 | Imaginary part | ++-------------------+------------------+ +| 2 | Modulus | ++-------------------+------------------+ + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FFTDerivative-v1.rst b/Code/Mantid/docs/source/algorithms/FFTDerivative-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FFTDerivative-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FFTSmooth-v1.rst b/Code/Mantid/docs/source/algorithms/FFTSmooth-v1.rst new file mode 100644 index 000000000000..b764f84e64e1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FFTSmooth-v1.rst @@ -0,0 +1,48 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +FFTSmooth uses the FFT algorithm to create a Fourier transform of a +spectrum, applies a filter to it and transforms it back. The filters +remove higher frequencies from the spectrum which reduces the noise. + +The second version of the FFTSmooth algorithm has two filters: + +Zeroing +~~~~~~~ + +- Filter: "Zeroing" +- Params: "n" - an integer greater than 1 meaning that the Fourier + coefficients with frequencies outside the 1/n of the original range + will be set to zero. + +Butterworth +~~~~~~~~~~~ + +- Filter: "Butterworth" +- Params: A string containing two positive integer parameters separated + by a comma, such as 20,2. + +"n"- the first integer, specifies the cutoff frequency for the filter, +in the same way as for the "Zeroing" filter. That is, the cutoff is at +m/n where m is the original range. "n" is required to be strictly more +than 1. + +"order"- the second integer, specifies the order of the filter. For low +order values, such as 1 or 2, the Butterworth filter will smooth the +data without the strong "ringing" artifacts produced by the abrupt +cutoff of the "Zeroing" filter. As the order parameter is increased, the +action of the "Butterworth" filter will approach the action of the +"Zeroing" filter. + +For both filter types, the resulting spectrum has the same size as the +original one. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FFTSmooth-v2.rst b/Code/Mantid/docs/source/algorithms/FFTSmooth-v2.rst new file mode 100644 index 000000000000..3edc015e2eac --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FFTSmooth-v2.rst @@ -0,0 +1,57 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +FFTSmooth uses the FFT algorithm to create a Fourier transform of a +spectrum, applies a filter to it and transforms it back. The filters +remove higher frequencies from the spectrum which reduces the noise. + +The second version of the FFTSmooth algorithm has two filters: + +Zeroing +~~~~~~~ + +- Filter: "Zeroing" +- Params: "n" - an integer greater than 1 meaning that the Fourier + coefficients with frequencies outside the 1/n of the original range + will be set to zero. + +Butterworth +~~~~~~~~~~~ + +- Filter: "Butterworth" +- Params: A string containing two positive integer parameters separated + by a comma, such as 20,2. + +"n"- the first integer, specifies the cutoff frequency for the filter, +in the same way as for the "Zeroing" filter. That is, the cutoff is at +m/n where m is the original range. "n" is required to be strictly more +than 1. + +"order"- the second integer, specifies the order of the filter. For low +order values, such as 1 or 2, the Butterworth filter will smooth the +data without the strong "ringing" artifacts produced by the abrupt +cutoff of the "Zeroing" filter. As the order parameter is increased, the +action of the "Butterworth" filter will approach the action of the +"Zeroing" filter. + +For both filter types, the resulting spectrum has the same size as the +original one. + +Previous Versions +----------------- + +Version 1 +~~~~~~~~~ + +Version 1 did not support the Butterworth Filter and did not offer the +options to ignore X bins or smooth all spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FakeISISEventDAE-v1.rst b/Code/Mantid/docs/source/algorithms/FakeISISEventDAE-v1.rst new file mode 100644 index 000000000000..1936cd532c8a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FakeISISEventDAE-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Simulates ISIS event DAE. It runs continuously until canceled and +listens to port 10000 for connection. When connected starts sending +event packets. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FakeISISHistoDAE-v1.rst b/Code/Mantid/docs/source/algorithms/FakeISISHistoDAE-v1.rst new file mode 100644 index 000000000000..eb1b42f3e5eb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FakeISISHistoDAE-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Simulates ISIS histogram DAE. It runs continuously until canceled and +listens to port 6789 for ISIS DAE commands. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FakeMDEventData-v1.rst b/Code/Mantid/docs/source/algorithms/FakeMDEventData-v1.rst new file mode 100644 index 000000000000..ed428847103f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FakeMDEventData-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +For testing MDEventWorkspaces, this algorithm either creates a uniform, +random distribution of events, or generate regular events placed in +boxes, or fills peaks around given points with a given number of events. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FilterBadPulses-v1.rst b/Code/Mantid/docs/source/algorithms/FilterBadPulses-v1.rst new file mode 100644 index 000000000000..9ec4106b6001 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FilterBadPulses-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm looks at sample logs ("proton\_charge"), finds the mean, +and rejects any events that occurred during a pulse that was below a +certain percentage of that mean. This effectively removes neutrons from +the background that were measured while the accelerator was not actually +producing neutrons, reducing background noise. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FilterByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/FilterByLogValue-v1.rst new file mode 100644 index 000000000000..ef033ffe295f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FilterByLogValue-v1.rst @@ -0,0 +1,71 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Filters out events using the entries in the Sample Logs. + +Sample logs consist of a series of pairs. The first step in filtering is +to generate a list of start-stop time intervals that will be kept, using +those logs. + +- Each log value is compared to the min/max value filters to determine + whether it is "good" or not. + + - For a single log value that satisfies the criteria at time T, all + events between T+-Tolerance (LogBoundary=Centre), or T and + T+Tolerance (LogBoundary=Left) are kept. + - If there are several consecutive log values matching the filter, + events between T1-Tolerance and T2+Tolerance, where T2 is the last + "good" value (LogBoundary=Centre), or T1 and T2, where T2 is the + first "bad" value (LogBoundary=Left) are kept. + +- The filter is then applied to all events in all spectra. Any events + with pulse times outside of any "good" time ranges are removed. + +There is no interpolation of log values between the discrete sample log +times at this time. However, the log value is assumed to be constant at +times before its first point and after its last. For example, if the +first temperature measurement was at time=10 seconds and a temperature +within the acceptable range, then all events between 0 and 10 seconds +will be included also. If a log has a single point in time, then that +log value is assumed to be constant for all time and if it falls within +the range, then all events will be kept. + +PulseFilter (e.g. for Veto Pulses) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you select PulseFilter, then events will be filtered OUT in notches +around each time in the selected sample log, and the MinValue/MaxValue +parameters are ignored. For example: + +- If you have 3 entries at times: + + - 10, 20, 30 seconds. + - A TimeTolerance of 1 second. + +- Then the events at the following times will be EXCLUDED from the + output: + + - 9-11; 19-21; 29-30 seconds. + +The typical use for this is to filter out "veto" pulses from a SNS event +nexus file. Some of these files have a sample log called +"veto\_pulse\_time" that only contains times of the pulses to be +rejected. For example, this call will filter out veto pulses: + +``FilterByLogValue(InputWorkspace="ws", OutputWorkspace="ws", LogName="veto_pulse_time", PulseFilter="1")`` + +Comparing with other event filtering algorithms +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Wiki page `EventFiltering `__ has a detailed +introduction on event filtering in MantidPlot. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FilterByTime-v1.rst b/Code/Mantid/docs/source/algorithms/FilterByTime-v1.rst new file mode 100644 index 000000000000..c8d1dcc3fd29 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FilterByTime-v1.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Goes through all events in all EventLists and takes out any events with +a PulseTime value not within the range specified. + +- Sample logs consisting of + `TimeSeriesProperty `__'s are also filtered out + according to the same time. +- The integrated proton charge of the run is also re-calculated + according to the filtered out ProtonCharge pulse log. + +You must specify: + +- Both StartTime and Stop time, or +- Both AbsoluteStartTime and AbsoluteStop time. +- But not another combination of the four, or the algorithm will abort. + +Comparing with other event filtering algorithms +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Wiki page `EventFiltering `__ has a detailed +introduction on event filtering in MantidPlot. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FilterByXValue-v1.rst b/Code/Mantid/docs/source/algorithms/FilterByXValue-v1.rst new file mode 100644 index 000000000000..baa6588fde06 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FilterByXValue-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm filters events outside of the given values (in whatever +units the workspace possesses). This can be a one or two-sided filter +depending on which of xmin & xmax are given. This algorithm pays no +attention whatsoever to any binning that has been set on the input +workspace (though it will be carried over to the output). If you need to +affect the bin boundaries as well, or want to remove some +spectra/pixels, consider using :ref:`_algm-CropWorkspace` +instead. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FilterEvents-v1.rst b/Code/Mantid/docs/source/algorithms/FilterEvents-v1.rst new file mode 100644 index 000000000000..2ccd9cb3d9ae --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FilterEvents-v1.rst @@ -0,0 +1,69 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm filters events from an +`EventWorkspace `__ to one or multiple +`EventWorkspaces `__ according to an input +`SplittersWorkspace `__ containing a series of +splitters (i.e., `SplittingIntervals `__). + +Output +^^^^^^ + +The output will be one or multiple workspaces according to the number of +index in splitters. The output workspace name is the combination of +parameter OutputWorkspaceBaseName and the index in splitter. + +Calibration File +^^^^^^^^^^^^^^^^ + +The calibration, or say correction, from the detector to sample must be +consider in fast log. Thus a calibration file is required. The math is + +``TOF_calibrated = TOF_raw * correction(detector ID).`` + +The calibration is in column data format. + +A reasonable approximation of the correction is + +``correction(detector_ID) = L1/(L1+L2(detector_ID))`` + +Unfiltered Events +^^^^^^^^^^^^^^^^^ + +Some events are not inside any splitters. They are put to a workspace +name ended with '\_unfiltered'. + +If input property 'OutputWorkspaceIndexedFrom1' is set to True, then +this workspace shall not be outputed. + +Difference from FilterByLogValue +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In FilterByLogValue(), EventList.splitByTime() is used. + +In FilterEvents(), if FilterByPulse is selected true, +EventList.SplitByTime is called; otherwise, EventList.SplitByFullTime() +is called instead. + +The difference between splitByTime and splitByFullTime is that +splitByTime filters events by pulse time, and splitByFullTime considers +both pulse time and TOF. + +Therefore, FilterByLogValue is not suitable for fast log filtering. + +Comparing with other event filtering algorithms +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Wiki page `EventFiltering `__ has a detailed +introduction on event filtering in MantidPlot. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FilterEventsByLogValuePreNexus-v2.rst b/Code/Mantid/docs/source/algorithms/FilterEventsByLogValuePreNexus-v2.rst new file mode 100644 index 000000000000..2c698d89c792 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FilterEventsByLogValuePreNexus-v2.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadEventPreNeXus algorithm stores data from the pre-nexus neutron +event data file in an `EventWorkspace `__. The default +histogram bin boundaries consist of a single bin able to hold all events +(in all pixels), and will have their `units `__ set to +time-of-flight. Since it is an `EventWorkspace `__, it +can be rebinned to finer bins with no loss of data. + +Optional properties +~~~~~~~~~~~~~~~~~~~ + +Specific pulse ID and mapping files can be specified if needed; these +are guessed at automatically from the neutron filename, if not +specified. + +A specific list of pixel ids can be specified, in which case only events +relating to these pixels will appear in the output. + +The ChunkNumber and TotalChunks properties can be used to load only a +section of the file; e.g. if these are 1 and 10 respectively only the +first 10% of the events will be loaded. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FilterLogByTime-v1.rst b/Code/Mantid/docs/source/algorithms/FilterLogByTime-v1.rst new file mode 100644 index 000000000000..4ca29741803b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FilterLogByTime-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Filters out logs that do not sit between StartTime and EndTime. The +algorithm also applied a 'Method' to those filtered results and returns +the statistic. A workspace must be provided containing logs. The log +name provided must refer to a FloatTimeSeries log. + +Unless specified, StartTime is taken to be run\_start. StartTime and +EndTime filtering is inclusive of the limits provided. + +The Method allows you to create quick statistics on the filtered array +returned in the FilteredResult output argument. Therefore the return +value from Method=mean is equivalent to running numpy.mean on the output +from the FilteredResult property. All the Method options map directly to +python numpy functions with the same name. These are documented +`here `__ + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FilterPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FilterPeaks-v1.rst new file mode 100644 index 000000000000..2a7108b40284 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FilterPeaks-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Filters a `PeaksWorkspace `__ using a set number of +queries. Outputs a filtered PeaksWorkspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindCenterOfMassPosition-v1.rst b/Code/Mantid/docs/source/algorithms/FindCenterOfMassPosition-v1.rst new file mode 100644 index 000000000000..44c6fdcbcbf5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindCenterOfMassPosition-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +If the *Output* property is set, the beam center will be placed in a +table workspace. Otherwise, the result is placed in an ArrayProperty +named *CenterOfMass*. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindCenterOfMassPosition-v2.rst b/Code/Mantid/docs/source/algorithms/FindCenterOfMassPosition-v2.rst new file mode 100644 index 000000000000..79a21e2bd0c1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindCenterOfMassPosition-v2.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +If the *Output* property is set, the beam centre will be placed in a +table workspace. Otherwise, the result is placed in an ArrayProperty +named *CenterOfMass*. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindClusterFaces-v1.rst b/Code/Mantid/docs/source/algorithms/FindClusterFaces-v1.rst new file mode 100644 index 000000000000..c994a0129353 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindClusterFaces-v1.rst @@ -0,0 +1,32 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm takes an image workspace (a.k.a +`IMDHistoWorkspace `__) and determines the faces of +the clusters contained within the image. The image is expected to be a +labeled image workspace outputted from +:ref:`_algm-IntegratePeaksUsingClusters`. The +algorithm generates a `TableWorkspace `__ as output, +which contains all the cluster edge faces required to draw the outer +edge of all clusters within the workspace. + +You may optionally provide a FilterWorkspace, which is a +`PeaksWorkspace `__. If provided, the Peak locations are +projected onto the InputWorkspace and the center locations are used to +restrict the output to only include the clusters that are the union +between the peak locations and the image clusters. + +If LimitRows is set to True (default), then you may specify a maximum +number of rows to report. If the algorithm generates more rows that the +MaximumRows that you set, then it will emit a warning, and also, set the +TruncatedOutput output property to false. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst new file mode 100644 index 000000000000..0dc7a64353cb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This is then used to mark all 'dead' detectors with a 'dead' marker +value, while all spectra from live detectors are given a 'live' marker +value. + +This algorithm is primarily used to ease identification using the +instrument visualization tools. + +ChildAlgorithms used +^^^^^^^^^^^^^^^^^^^^ + +Uses the :ref:`_algm-Integration` algorithm to sum the spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindDetectorsInShape-v1.rst b/Code/Mantid/docs/source/algorithms/FindDetectorsInShape-v1.rst new file mode 100644 index 000000000000..304bd029192e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindDetectorsInShape-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm places the user defined geometric shape within the virtual +instrument and reports back the detector id of every detector that in +contained within it. A detector is considered to be contained it its +central location point is contained within the shape. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst b/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst new file mode 100644 index 000000000000..a3013814e344 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This is intended to identify detectors that are grossly over or under +counting. It reads the input workspace and identifies all histograms +with numbers of counts outside the user defined upper and lower limits. +Each spectra that fails has its spectra masked on the output workspace. +Spectra that pass the test have their data set to a positive value, 1.0. +The output workspace can be fed to :ref:`_algm-MaskDetectors` to +mask the same spectra on another workspace. + +ChildAlgorithms used +^^^^^^^^^^^^^^^^^^^^ + +Uses the :ref:`_algm-Integration` algorithm to sum the spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindDetectorsPar-v1.rst b/Code/Mantid/docs/source/algorithms/FindDetectorsPar-v1.rst new file mode 100644 index 000000000000..140fcbb87c0d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindDetectorsPar-v1.rst @@ -0,0 +1,62 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Identifies geometrical parameters of detectors and groups of detectors +after the workspaces were grouped using ASCII or XML map file. Located +in DataHangdling\\Instrument\\Detectors group and intended to be used as +Child Algorithm of saveNXSPE algorithm, though can be deployed +independently. Dynamic casting from iAlgorithm and accessors functions +return calculated parameters to saveNXSPE when FindDetectorsPar used as +the Child Algorithm of saveNXSPE procedure; + +Internal Child Algorithm identifies the group topology, namely if a +group of detectors is arranged into a rectangular shape or in a ring. +The algorithm calculates the geometrical centre of the detectors group +and 6 points, located within +-1/4 width of the first detector of the +group. If the centre or any of these points belong to the group of the +detectors itself, the group assumed to have a rectangular topology, and +if not -- the cylindrical one (ring). + +Single detector defined to have the rectangular shape. + +After identifying the topology, the parameters are calculated using +formulas for angles in Cartesian or Cylindrical coordinate systems +accordingly + +`par `__ and `phx `__ files +--------------------------------------------- + +These files are ascii files which are used to describe the combined +detectors geometry defined by map files. There are no reasons for you to +use it unless this Mantid algorithm is working unsatisfactory for you. +In this case you can quickly modify and use par file until this +algorithm is modified. It is your responsibility then to assure the +correspondence between mapped detectors and parameters in the par file. + +The par files are simple ASCII files with the following columns: + +| ``       1st column      sample-detector distance (m)`` +| ``       2nd  "          scattering angle (deg)`` +| ``       3rd  "          azimuthal angle (deg)   (west bank = 0 deg, north bank = -90 deg etc.)   (Note the reversed sign convention cf .phx files)`` +| ``       4th  "          width  (m)`` +| ``       5th  "          height (m)`` + +When processed by this algorithm, 4th and 5th column are transformed +into angular values. + +`Phx `__ files are Mslice phx files, which do not contain +secondary flight path. This path is calculated by the algorithm from the +data in the instrument description and the angular values are calculated +as in nxspe file. There are no reason to use phx files to build nxspe +files at the moment unless you already have one and need to repeat your +previous results with Mantid. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindPeakBackground-v1.rst b/Code/Mantid/docs/source/algorithms/FindPeakBackground-v1.rst new file mode 100644 index 000000000000..7c2ad4d752de --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindPeakBackground-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm written using this paper: J. Appl. Cryst. (2013). 46, 663-671 + +Objective algorithm to separate signal from noise in a +Poisson-distributed pixel data set + +T. Straaso/, D. Mueter, H. O. So/rensen and J. Als-Nielsen + +Synopsis: A method is described for the estimation of background level +and separation of background pixels from signal pixels in a +Poisson-distributed data set by statistical analysis. For each +iteration, the pixel with the highest intensity value is eliminated from +the data set and the sample mean and the unbiased variance estimator are +calculated. Convergence is reached when the absolute difference between +the sample mean and the sample variance of the data set is within k +standard deviations of the variance, the default value of k being 1. The +k value is called SigmaConstant in the algorithm input. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst new file mode 100644 index 000000000000..325b2d7be7df --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst @@ -0,0 +1,93 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm searches the specified spectra in a workspace for peaks, +returning a list of the found and successfully fitted peaks. The search +algorithm is described in full in reference [1]. In summary: the second +difference of each spectrum is computed and smoothed. This smoothed data +is then searched for patterns consistent with the presence of a peak. +The list of candidate peaks found is passed to a fitting routine and +those that are successfully fitted are kept and returned in the output +workspace (and logged at information level). The output +`TableWorkspace `__ contains the following columns, +which reflect the fact that the peak has been fitted to a Gaussian atop +a linear background: spectrum, centre, width, height, +backgroundintercept & backgroundslope. + +Subalgorithms used +~~~~~~~~~~~~~~~~~~ + +FindPeaks uses the :ref:`_algm-SmoothData` algorithm to, well, +smooth the data - a necessary step to identify peaks in statistically +fluctuating data. The :ref:`_algm-Fit` algorithm is used to fit candidate +peaks. + +Treating weak peaks vs. high background +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +FindPeaks uses a more complicated approach to fit peaks if +**HighBackground** is flagged. In this case, FindPeak will fit the +background first, and then do a Gaussian fit the peak with the fitted +background removed. This procedure will be repeated for a couple of +times with different guessed peak widths. And the parameters of the best +result is selected. The last step is to fit the peak with a combo +function including background and Gaussian by using the previously +recorded best background and peak parameters as the starting values. + +Criteria To Validate Peaks Found +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +FindPeaks finds peaks by fitting a Guassian with background to a certain +range in the input histogram. :ref:`_algm-Fit` may not give a correct +result even if chi^2 is used as criteria alone. Thus some other criteria +are provided as options to validate the result + +#. Peak position. If peak positions are given, and trustful, then the + fitted peak position must be within a short distance to the give one. +#. Peak height. In the certain number of trial, peak height can be used + to select the best fit among various starting sigma values. + +Fit Window +~~~~~~~~~~ + +If FitWindows is defined, then a peak's range to fit (i.e., x-min and +x-max) is confined by this window. + +If FitWindows is defined, starting peak centres are NOT user's input, +but found by highest value within peak window. (Is this correct???) + +References +^^^^^^^^^^ + +#. M.A.Mariscotti, *A method for automatic identification of peaks in + the presence of background and its application to spectrum analysis*, + NIM **50** (1967) 309. + +| ``==== Estimation of peak's background and range ====`` +| ``If FindPeaksBackground fails, then it is necessary to estimate a rough peak range and background according to`` +| ``observed data.`` +| ``1. Assume the local background (within the given fitting window) is close to linear;`` +| ``2. Take the first 3 and last 3 data points to calcualte the linear background;`` +| ``3. Remove background (rougly) and calcualte peak's height, width, and centre;`` +| ``4. If the peak centre (starting value) uses observed value, then set peakcentre to that value.  Otherwise, set it to given value;`` +| ``5. Get the bin indexes of xmin, xmax and peakcentre;`` +| ``6. Calcualte peak range, i.e., left and right boundary;`` +| ``7. If any peak boundary exceeds or too close to the boundary, there will be 2 methods to solve this issue;`` +| ``7.1 If peak centre is restricted to given value, then the peak range will be from 1/6 to 5/6 of the given data points;`` +| ``7.2 If peak centre is set to observed value, then the 3 leftmost data points will be used for background.`` + +| ``==== References ====`` +| ``# M.A.Mariscotti, ``\ *``A`` ``method`` ``for`` ``automatic`` +``identification`` ``of`` ``peaks`` ``in`` ``the`` ``presence`` ``of`` +``background`` ``and`` ``its`` ``application`` ``to`` ``spectrum`` +``analysis``*\ ``, NIM ``\ **``50``**\ `` (1967) 309.`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindPeaksMD-v1.rst b/Code/Mantid/docs/source/algorithms/FindPeaksMD-v1.rst new file mode 100644 index 000000000000..6925ec48f11c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindPeaksMD-v1.rst @@ -0,0 +1,47 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used to find single-crystal peaks in a +multi-dimensional workspace (`MDEventWorkspace `__ or +`MDHistoWorkspace `__). It looks for high signal +density areas, and is based on an algorithm designed by Dennis Mikkelson +for ISAW. + +The algorithm proceeds in this way: + +- Sorts all the boxes in the workspace by decreasing order of signal + density (total weighted event sum divided by box volume). + + - It will skip any boxes with a density below a threshold. The + threshold is + :math:`TotalSignal / TotalVolume * DensityThresholdFactor`. + +- The centroid of the strongest box is considered a peak. +- The centroid of the next strongest box is calculated. + + - We look through all the peaks that have already been found. If the + box is too close to an existing peak, it is rejected. This + distance is PeakDistanceThreshold. + +- This is repeated until we find up to MaxPeaks peaks. + +Each peak created is placed in the output +`PeaksWorkspace `__, which can be a new workspace or +replace the old one. + +This algorithm works on a `MDHistoWorkspace `__ +resulting from the :ref:`_algm-BinMD` algorithm also. It works in the +same way, except that the center of each bin is used since the centroid +is not accessible. It may give better results on +`Workspace2D `__'s that were converted to +`MDWorkspaces `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindReflectometryLines-v1.rst b/Code/Mantid/docs/source/algorithms/FindReflectometryLines-v1.rst new file mode 100644 index 000000000000..b428dd2b4981 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindReflectometryLines-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Finds spectrum numbers corresponding to reflected and transmission lines +in a line detector Reflectometry dataset. + +Expects two or one, reflectometry peaks, will fail if there are more or +less than this number of peaks. The first peak is taken to be from the +reflected line, the second is taken to be from the transmission line. +This algorithm outputs a TableWorkspace containing the spectrum number +of interest. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindSXPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FindSXPeaks-v1.rst new file mode 100644 index 000000000000..5787b096ec22 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindSXPeaks-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Detector-space, single crystal peak finding. Finds peaks by searching +through each spectra and looking for high intensity bins. If a bin has +high intensity it is a candidate for a peak. + +Notable points: + +- The highest intensity bin is taken to be the peak, so only finds one + peak per spectra +- Peaks that are not above the background are culled. The background is + calculated as the average of the start and end intensity multiplied + by the provided SignalBackground parameter. +- Calculated Qlab follows the Busy, Levy 1967 convention. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindUBUsingFFT-v1.rst b/Code/Mantid/docs/source/algorithms/FindUBUsingFFT-v1.rst new file mode 100644 index 000000000000..d1e9ef460844 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindUBUsingFFT-v1.rst @@ -0,0 +1,41 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a set of peaks, and given a range of possible a,b,c values, this +algorithm will attempt to find a UB matrix, corresponding to the Niggli +reduced cell, that fits the data. The algorithm projects the peaks on +many possible direction vectors and calculates a Fast Fourier Transform +of the projections to identify regular patterns in the collection of +peaks. Based on the calcuated FFTs, a list of directions corresponding +to possible real space unit cell edge vectors is formed. The directions +and lengths of the vectors in this list are optimized (using a least +squares approach) to index the maximum number of peaks, after which the +list is sorted in order of increasing length and duplicate vectors are +removed from the list. + +The algorithm then chooses three of the remaining vectors with the +shortest lengths that are linearly independent, form a unit cell with at +least a minimum volume and for which the corresponding UB matrix indexes +at least 80% of the maximum number of indexed using any set of three +vectors chosen from the list. + +A UB matrix is formed using these three vectors and the resulting UB +matrix is again optimized using a least squares method. Finally, +starting from this matrix, a matrix corresponding to the Niggli reduced +cell is calculated and returned as the UB matrix. If the specified peaks +are accurate and belong to a single crystal, this method should produce +the UB matrix corresponding to the Niggli reduced cell. However, other +software will usually be needed to adjust this UB to match a desired +conventional cell. While this algorithm will occasionally work for as +few as four peaks, it works quite consistently with at least ten peaks, +and in general works best with a larger number of peaks. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindUBUsingIndexedPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FindUBUsingIndexedPeaks-v1.rst new file mode 100644 index 000000000000..ae6522a2909a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindUBUsingIndexedPeaks-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a set of peaks at least three of which have been assigned Miller +indices, this algorithm will find the UB matrix, that best maps the +integer (h,k,l) values to the corresponding Q vectors. The set of +indexed peaks must include three linearly independent Q vectors. The +(h,k,l) values from the peaks are first rounded to form integer (h,k,l) +values. The algorithm then forms a possibly over-determined linear +system of equations representing the mapping from (h,k,l) to Q for each +indexed peak. The system of linear equations is then solved in the least +squares sense, using QR factorization. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindUBUsingLatticeParameters-v1.rst b/Code/Mantid/docs/source/algorithms/FindUBUsingLatticeParameters-v1.rst new file mode 100644 index 000000000000..8ed28debc7e0 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindUBUsingLatticeParameters-v1.rst @@ -0,0 +1,44 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a set of peaks, and given lattice parameters +(:math:`a,b,c,alpha,beta,gamma`), this algorithm will find the UB +matrix, that best fits the data. The algorithm searches over a large +range of possible orientations for the orientation for which the rotated +B matrix best fits the data. The search for the best orientation +involves several steps. + +During the first step, a reduced set of peaks typically at lower \|Q\| +are used, since it is easier to index peaks at low \|Q\|. Specifically, +if there are at least 5 peaks, the peaks are shifted to be centered at +the strongest peaks and then sorted in order of increasing distance from +the strongest peak. If there are fewer than 5 peaks the list is just +sorted in order of increasing \|Q\|. Only peaks from the initial portion +of this sorted list are used in the first step. The number of peaks from +this list to be used initially is specified by the user with the +parameter NumInitial. The search first finds a list of possible +orientations for which the UB matrix will index the maximum number of +peaks from the initial set of peaks to within the specified tolerance on +h,k,l values. Subsequently, only the UB matrix that indexes that maximum +number of peaks with the minimum distance between the calculated h,k,l +values and integers is kept and passed on to the second step. + +During the second step, additional peaks are gradually added to the +initial list of peaks. Each time peaks are added to the list, the subset +of peaks from the new list that are indexed within the specified +tolerance on k,k,l are used in a least squares calculation to optimize +the UB matrix to best index those peaks. The process of gradually adding +more peaks from the sorted list and optimizing the UB based on the peaks +that are indexed, continues until all peaks have been added to the list. +Finally, one last optimization of the UB matrix is carried out using the +full list of peaks. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindUBUsingMinMaxD-v1.rst b/Code/Mantid/docs/source/algorithms/FindUBUsingMinMaxD-v1.rst new file mode 100644 index 000000000000..a7283eb52ffe --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FindUBUsingMinMaxD-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a set of peaks, and given a range of possible a,b,c values, this +algorithm will attempt to find a UB matrix, corresponding to the `Niggli +reduced +cell `__, that +fits the data. The algorithm searches over a range of possible +directions and unit cell lengths for directions and lengths that match +plane normals and plane spacings in reciprocal space. It then chooses +three of these vectors with the shortest lengths that are linearly +independent and that are separated by at least a minimum angle. An +initial UB matrix is formed using these three vectors and the resulting +UB matrix is optimized using a least squares method. Finally, starting +from this matrix, a matrix corresponding to the Niggli reduced cell is +calculated and returned as the UB matrix. If the specified peaks are +accurate and belong to a single crystal, this method should produce some +UB matrix that indexes the peaks. However, other software will usually +be needed to adjust this UB to match a desired conventional cell. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Fit-v1.rst b/Code/Mantid/docs/source/algorithms/Fit-v1.rst new file mode 100644 index 000000000000..029b345a815c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Fit-v1.rst @@ -0,0 +1,271 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Additional properties for a 1D function and a MatrixWorkspace +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If Function defines a one-dimensional function and InputWorkspace is a +`MatrixWorkspace `__ the algorithm will have these +additional properties: + ++------------------+-------------+-----------+-------------------------+---------------------------------------------------------------------+ +| Name | Direction | Type | Default | Description | ++==================+=============+===========+=========================+=====================================================================+ +| WorkspaceIndex | Input | integer | 0 | The spectrum to fit, using the workspace numbering of the spectra | ++------------------+-------------+-----------+-------------------------+---------------------------------------------------------------------+ +| StartX | Input | double | Start of the spectrum | An X value in the first bin to be included in the fit | ++------------------+-------------+-----------+-------------------------+---------------------------------------------------------------------+ +| EndX | Input | double | End of the spectrum | An X value in the last bin to be included in the fit | ++------------------+-------------+-----------+-------------------------+---------------------------------------------------------------------+ + +Overview +~~~~~~~~ + +This is a generic algorithm for fitting data in a Workspace with a +function. The workspace must have the type supported by the algorithm. +Currently supported types are: `MatrixWorkspace `__ for +fitting with a `IFunction1D `__ and +`IMDWorkspace `__ for fitting with +`IFunctionMD `__. After Function and InputWorkspace +properties are set the algorithm may decide that it needs more +information from the caller to locate the fitting data. For example, if +a spectrum in a MatrixWorkspace is to be fit with a 1D function it will +need to know at least the index of that spectrum. To request this +information Fit dynamically creates relevant properties which the caller +can set. Note that the dynamic properties depend both on the workspace +and the function. For example, the data in a MatrixWorkspace can be fit +with a 2D function. In this case all spectra will be used in the fit and +no additional properties will be declared. The Function property must be +set before any other. + +The function and the initial values for its parameters are set with the +Function property. A function can be simple or composite. A `simple +function <:Category:Fit_functions>`__ has a name registered with Mantid +framework. The Fit algorithm creates an instance of a function by this +name. A composite function is an arithmetic sum of two or more functions +(simple or composite). Each function has a number of named parameters, +the names are case sensitive. All function parameters will be used in +the fit unless some of them are tied. Parameters can be tied by setting +the Ties property. A tie is a mathematical expression which is used to +calculate the value of a (dependent) parameter. Only the parameter names +of the same function can be used as variables in this expression. + +Using the Minimizer property, Fit can be set to use different algorithms +to perform the minimization. By default if the function's derivatives +can be evaluated then Fit uses the GSL Levenberg-Marquardt minimizer. + +In Mantidplot this algorithm can be run from the `Fit Property +Browser `__ +which allows all the settings to be specified via its graphical user +interface. + +Setting a simple function +~~~~~~~~~~~~~~~~~~~~~~~~~ + +To use a simple function for a fit set its name and initial parameter +values using the Function property. This property is a comma separated +list of name=value pairs. The name of the first name=value pairs must be +"name" and it must be set equal to the name of one of a `simple +function <:Category:Fit_functions>`__. This name=value pair is followed +by name=value pairs specifying values for the parameters of this +function. If a parameter is not set in Function it will be given its +default value defined by the function. All names are case sensitive. For +example for fitting a Gaussian the Function property might look like +this: + +``Function: "name=Gaussian, PeakCentre=4.6, Height=10, Sigma=0.5"`` + +Some functions have attributes. An attribute is a non-fitting parameter +and can be of one of the following types: text string, integer, or +double. Attributes are set just like the parameters using name=value +pairs. For example: + +``Function: "name=UserFunction, Formula=a+b*x, a=1, b=2"`` + +In this example Formula is the name of a string attribute which defines +an expression for the user UserFunction. The fitting parameters a and b +are created when the Formula attribute is set. It is important that +Formula is defined before initializing the parameters. + +A list of the available simple functions can be found +`here <:Category:Fit_functions>`__. + +Setting a composite function +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A composite function is a sum of simple functions. It does not have a +name. To define a composite function set a number of simple functions in +the Function property. Each simple function definition must be separated +by a semicolon ';'. For example fitting two Gaussians on a linear +background might look like this: + +| ``Function: "name=LinearBackground, A0=0.3; `` +| ``           name=Gaussian, PeakCentre=4.6, Height=10, Sigma=0.5;`` +| ``           name=Gaussian, PeakCentre=7.6, Height=8, Sigma=0.5"`` + +Setting ties +~~~~~~~~~~~~ + +Parameters can be tied to other parameters or to a constant. In this +case they do not take part in the fitting but are evaluated using the +tying expressions. Use Ties property to set any ties. In case of a +simple function the parameter names are used as variables in the tying +expressions. For example + +``Ties: "a=2*b+1, c=2"`` + +This ties parameter "a" to parameter "b" and fixes "c" to the constant +2. + +In case of a composite function the variable name must refer to both the +parameter name and the simple function it belongs to. It is done by +writing the variable name in the following format: + +``f``\ \ ``.``\ + +The format consists of two parts separated by a period '.'. The first +part defines the function by its index in the composite function +(starting at 0). The index corresponds to the order in which the +functions are defined in the Function property. For example: + +``Ties: "f1.Sigma=f0.Sigma,f2.Sigma=f0.Sigma"`` + +This ties parameter "Sigma" of functions 1 and 2 to the "Sigma" of +function 0. Of course all three functions must have a parameter called +"Sigma" for this to work. The last example can also be written + +``Ties: "f1.Sigma=f2.Sigma=f0.Sigma"`` + +Setting constraints +~~~~~~~~~~~~~~~~~~~ + +Parameters can be constrained to be above a lower boundary and/or below +an upper boundary. If a constraint is violated a penalty to the fit is +applied which should result the parameters satisfying the constraint. +The penalty applied is described in more detail +`here `__. Use Constraints property to set any +constraints. In case of a simple function the parameter names are used +as variables in the constraint expressions. For example + +``Constraints: "4.0 < c < 4.2"`` + +Constraint the parameter "c" to be with the range 4.0 to 4.2, whereas + +``Constraints: "c > 4.0"`` + +means "c" is constrained to be above the lower value 4.0 and + +``Constraints: "c < 4.2"`` + +means "c" is constrained to be below the upper value 4.2. + +In case of a composite function the same notation is used for +constraints and for ties. For example + +``Constraints: "f1.c < 4.2"`` + +constrain the parameter "c" of function 1. + +Fitting to data in a MatrixWorkspace +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The error values in the input workspace are used to weight the data in +the fit. Zero error values are not allowed and are replaced with ones. + +Output +~~~~~~ + +Setting the Output property defines the names of the two output +workspaces. One of them is a `TableWorkspace `__ with +the fitted parameter values. The other is a +`Workspace2D `__ which compares the fit with the original +data. It has three spectra. The first (index 0) contains the original +data, the second one the data simulated with the fitting function and +the third spectrum is the difference between the first two. For example, +if the Output was set to "MyResults" the parameter TableWorkspace will +have name "MyResults\_Parameters" and the Workspace2D will be named +"MyResults\_Workspace". If the function's derivatives can be evaluated +an additional TableWorkspace is returned. When the Output is set to +"MyResults" this TableWorkspace will have the name +"MyResults\_NormalisedCovarianceMatrix" and it returns a calculated +correlation matrix. Denote this matrix C and its elements Cij then the +diagonal elements are listed as 1.0 and the off diagnonal elements as +percentages of correlation between parameter i and j equal to +100\*Cij/sqrt(Cii\*Cjj). + +Examples +-------- + +This example shows a simple fit to a Gaussian function. The algorithm +properties are: + +| ``InputWorkspace:  Test`` +| ``WorkspaceIndex:  0`` +| ``Function:        name=Gaussian, PeakCentre=4, Height=1.3, Sigma=0.5`` +| ``Output:          res`` + +.. figure:: /images/GaussianFit.jpg + :alt: GaussianFit.jpg + + GaussianFit.jpg + +-------------- + +The next example shows a fit of the same data but with a tie. + +| ``InputWorkspace:  Test`` +| ``WorkspaceIndex:  0`` +| ``Function:        name=Gaussian, PeakCentre=4, Height=1.3, Sigma=0.5`` +| ``Ties:            Sigma=Height/2`` +| ``Output:          res`` + +.. figure:: /images/GaussianFit_Ties.jpg + :alt: GaussianFit_Ties.jpg + + GaussianFit\_Ties.jpg + +-------------- + +This example shows a fit of two overlapping Gaussians on a linear +background. Here we create a composite function with a LinearBackground +and two Gaussians: + +| ``InputWorkspace:  Test`` +| ``WorkspaceIndex:  0`` +| ``Function:        name=LinearBackground,A0=1;`` +| ``                 name=Gaussian,PeakCentre=4,Height=1.5, Sigma=0.5;`` +| ``                 name=Gaussian,PeakCentre=6,Height=4, Sigma=0.5 `` +| ``Output:          res`` + +.. figure:: /images/Gaussian2Fit.jpg + :alt: Gaussian2Fit.jpg + + Gaussian2Fit.jpg + +-------------- + +This example repeats the previous one but with the Sigmas of the two +Gaussians tied: + +| ``InputWorkspace:  Test`` +| ``WorkspaceIndex:  0`` +| ``Function:        name=LinearBackground,A0=1;`` +| ``                 name=Gaussian,PeakCentre=4,Height=1.5, Sigma=0.5;`` +| ``                 name=Gaussian,PeakCentre=6,Height=4, Sigma=0.5 `` +| ``Ties:            f2.Sigma = f1.Sigma`` +| ``Output:          res`` + +.. figure:: /images/Gaussian2Fit_Ties.jpg + :alt: Gaussian2Fit_Ties.jpg + + Gaussian2Fit\_Ties.jpg + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst b/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst new file mode 100644 index 000000000000..e81b5a515942 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst @@ -0,0 +1,64 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used to fit a single peak with some checking mechanism +to ensure its fitting result is physical. + +The output `TableWorkspace `__ contains the following +columns... + +Subalgorithms used +^^^^^^^^^^^^^^^^^^ + +- Fit + +Treating weak peaks vs. high background +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FindPeaks uses a more complicated approach to fit peaks if +**HighBackground** is flagged. In this case, FindPeak will fit the +background first, and then do a Gaussian fit the peak with the fitted +background removed. This procedure will be repeated for a couple of +times with different guessed peak widths. And the parameters of the best +result is selected. The last step is to fit the peak with a combo +function including background and Gaussian by using the previously +recorded best background and peak parameters as the starting values. + +Criteria To Validate Peaks Found +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FindPeaks finds peaks by fitting a Guassian with background to a certain +range in the input histogram. :ref:`_algm-Fit` may not give a correct +result even if chi^2 is used as criteria alone. Thus some other criteria +are provided as options to validate the result + +1. Peak position. If peak positions are given, and trustful, then the +fitted peak position must be within a short distance to the give one. + +2. Peak height. In the certain number of trial, peak height can be used +to select the best fit among various starting sigma values. + +Fit Window and Peak Range +^^^^^^^^^^^^^^^^^^^^^^^^^ + +If FitWindows is defined, then a peak's range to fit (i.e., x-min and +x-max) is confined by this window. + +If PeakRange is defined and starting peak centre given by user is not +within this range, then the situation is considered illegal. In future, +FitPeak might be able to estimate the peak centre in this situation by +locating the X-value whose corresponding Y-value is largest within +user-defined peak range. + +What's new +---------- + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst new file mode 100644 index 000000000000..1c978aa7511b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst @@ -0,0 +1,111 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm fits a certain set of single peaks in a powder +diffraction pattern. + +It serves as the first step to fit/refine instrumental parameters that +will be introduced in `Le Bail Fit `__. The second step is +realized by algorithm RefinePowderInstrumentParameters. + +Version +^^^^^^^ + +Current implementation of FitPowderDiffPeaks is version 2. + +Peak Fitting Algorithms +----------------------- + +Peak Fitting Mode +^^^^^^^^^^^^^^^^^ + +Fitting mode determines the approach (or algorithm) to fit diffraction +peaks. + +1. Robust + +2. Confident: User is confident on the input peak parameters. Thus the +fitting will be a one-step minimizer by Levenberg-Marquardt. + +Starting Values of Peaks' Parameters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. "(HKL) & Calculation": the starting values are calculated from each +peak's miller index and thermal neutron peak profile formula; + +2. "From Bragg Peak Table": the starting values come from the Bragg Peak +Parameter table. + +Peak-fitting sequence +^^^^^^^^^^^^^^^^^^^^^ + +Peaks are fitted from high d-spacing, i.e., lowest possible Miller +index, to low d-spacing values. If MinimumHKL is specified, then peak +will be fitted from maximum d-spacing/TOF, to the peak with Miller index +as MinimumHKL. + +Correlated peak profile parameters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If peaks profile parameters are correlated by analytical functions, then +the starting values of one peak will be the fitted peak profile +parameters of its right neighbour. + +Use Cases +--------- + +Several use cases are listed below about how to use this algorithm. + +Use case 1: robust fitting +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +| ``1. User wants to use the starting values of peaks parameters from input thermal neutron peak parameters such as Alph0, Alph1, and etc. `` +| ``2. User specifies the right most peak range and its Miller index`` +| ``3. ``\ *``FitPowderDiffPeaks``*\ `` calculates Alpha, Beta and Sigma for each peak from parameter values from InstrumentParameterTable;`` +| ``4. ``\ *``FitPowderDiffPeaks``*\ `` fit peak parameters of each peak from high TOF to low TOF;`` + +Use Case 2: Confident fitting +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +| ``1. `` +| ``2. `` + +Use Case 3: Fitting Peak Parameters From Scratch +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This is the extreme case such that + +| ``1. Input instrumental geometry parameters, including Dtt1, Dtt1t, Dtt2t, Zero, Zerot, Tcross and Width, have roughly-guessed values;`` +| ``2. There is no pre-knowledge for each peak's peak parameters, including Alpha, Beta, and Sigma. `` + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to do Le Bail +fit. The introduction can be found in the wiki page of +:ref:`_algm-LeBailFit`. + +Example of Working With Other Algorithms +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +*FitPowderDiffPeaks* is designed to work with other algorithms, such +*RefinePowderInstrumentParameters*, and *LeBailFit*. See `Le Bail +Fit `__ for full list of such algorithms. + +A common scenario is that the starting values of instrumental geometry +related parameters (Dtt1, Dtt1t, and etc) are enough far from the real +values. + +| ``1. ``\ *``FitPowderDiffPeaks``*\ `` fits the single peaks from high TOF region in robust mode;`` +| ``2. ``\ *``RefinePowderInstrumentParameters``*\ `` refines the instrumental geometry related parameters by using the d-TOF function;`` +| ``3. Repeat step 1 and 2 for  more single peaks incrementally. The predicted peak positions are more accurate in this step.`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FitResolutionConvolvedModel-v1.rst b/Code/Mantid/docs/source/algorithms/FitResolutionConvolvedModel-v1.rst new file mode 100644 index 000000000000..d126844d6577 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FitResolutionConvolvedModel-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Fits a dataset using a resolution function convolved with a foreground +model + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FixGSASInstrumentFile-v1.rst b/Code/Mantid/docs/source/algorithms/FixGSASInstrumentFile-v1.rst new file mode 100644 index 000000000000..f9761399a8f7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FixGSASInstrumentFile-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +GSAS instrument is required to have exact 80 characters each line. +FixGSASInstrument will check the input GSAS instrument file whether each +line of it will have 80 characters. If any line contains fewer than 80 +characters, this algorithm will fill the line with space to 80 +characters. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FlatPlateAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/FlatPlateAbsorption-v1.rst new file mode 100644 index 000000000000..5a26141e7c31 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FlatPlateAbsorption-v1.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm uses a numerical integration method to calculate +attenuation factors resulting from absorption and single scattering in a +flat plate (slab) sample with the dimensions and material properties +given. Factors are calculated for each spectrum (i.e. detector position) +and wavelength point, as defined by the input workspace. The sample is +divided up into cuboids having sides of as close to the size given in +the ElementSize property as the sample dimensions will allow. Thus the +calculation speed depends linearly on the total number of bins in the +workspace and goes as :math:`\rm{ElementSize}^{-3}`. + +Path lengths through the sample are then calculated for the centre-point +of each element and a numerical integration is carried out using these +path lengths over the volume elements. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must have units of wavelength. The +`instrument `__ associated with the workspace must be fully +defined because detector, source & sample position are needed. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FuryFitMultiple-v1.rst b/Code/Mantid/docs/source/algorithms/FuryFitMultiple-v1.rst new file mode 100644 index 000000000000..a767c7b83c1b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/FuryFitMultiple-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Fits and \*\_iqt file generated by Fury using one of the specified +functions. The functions available are either one or two exponentials +(:math:`Intensity \times exp[-(x/\tau)]`), a stretched exponential +(:math:`Intensity \times exp[-(x/\tau)]\beta`) or a combination of both +an exponential and stretched exponential. + +This routine was originally part of the MODES package. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GeneralisedSecondDifference-v1.rst b/Code/Mantid/docs/source/algorithms/GeneralisedSecondDifference-v1.rst new file mode 100644 index 000000000000..37011608dfbb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GeneralisedSecondDifference-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute the generalised second difference of a spectrum or several +spectra based on the method described by M.A. Mariscotti., Nuclear +Instruments and Methods 50, 309 (1967). Given a spectrum with value yi +(0<=i`__ or a +`MatrixWorkspace `__. Both of them will be used by +algorithm :ref:`_algm-FilterEvents` to filter events from an +`EventWorkspace `__. + +This algorithm is designed as a general-purposed event splitter +generator. Combined with :ref:`_algm-FilterEvents`, it will +replace + +- :ref:`_algm-FilterByTime` +- :ref:`_algm-FilterByLogValue` + +Moreover, the time resolution of these two algorithms is microseconds, +i.e., the wall time of an (neutron) event. While the original +:ref:`_algm-FilterByTime` and +:ref:`_algm-FilterByLogValue` are of the resolution of pulse +time. It is also enhanced to process the fast frequency sample logs, +which can be even faster than chopper frequencies. + +Workspace to store event splitters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +An event splitter used in Mantid contains start time, stop time and +target workspace. Any data structure that has the above 3 properties can +serve as event splitter. There are 2 types of output workspaces storing +event splitters that are supported by this algorithm. + +- `SplittersWorkspace `__: It is a + `TableWorskpace `__ that has 3 columns for start + time, stop time and target workspace for events within start time and + stop time. This type of workspace is appropriate for the case that + the amount of generated event splitters are not huge; +- `MatrixWorkspace `__: It uses X-axis to store time + stamp in total nanoseconds and Y-axis to store target workspace. For + example, x\_i, x\_i+1 and y\_i construct an event filter as start + time is x\_i, stop time is x\_i+i, and target workspace is y\_i-th + workspace. If y\_i is less than 0, then it means that all events + between time x\_i and x\_i+1 will be discarded. This type of + workspace is appropriate for the case that the amount of generated + event splitters are huge, because processing a + `MatrixWorkspace `__ is way faster than a + `TableWorkspace `__ in Mantid. + +Functionalities +~~~~~~~~~~~~~~~ + +Here are the types of event filters (i.e., +`SplittersWorkspace `__) that can be generated by +this algorithm: + +- A filter for one time interval. + +- A series of filters for multiple continuous time intervals, which + have the same length of period. Each of them has an individual + workspace index associated. These workspace indices are incremented + by 1 from 0 along with their orders in time. + +- A filter containing one or multiple time intervals according to a + specified log value. Any log value of the time that falls into the + selected time intervals is equal or within the tolerance of a user + specified value. + +- A series filters containing one or multiple time intervals according + to specified log values incremented by a constant value. Any log + value of the time that falls into the selected time intervals is + equal or within the tolerance of the log value as v\_0 + n x delta\_v + +/- tolerance\_v. + +Parameter: *Centre* +^^^^^^^^^^^^^^^^^^^ + +The input Boolean parameter *centre* is for filtering by log value(s). +If option *centre* is taken, then for each interval, + +- starting time = log\_time - tolerance\_time; +- stopping time = log\_time - tolerance\_time; + +It is a shift to left. + +Parameter: *LogValueTolerance* and *LogValueInterval* +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +These two parameters are used to determine the log value intervals for +filtering events. + +Let user-specified minimum log value to be 'min', LogValueTolerance to +be 'tol', and LogValueInterval to be 'delta', then the log value +intervals are (min-tol, min-tol+delta), (min-tol+delta, min-tol+2delta), +... + +The default value of LogValueTolerance is LogValueInterval devided by 2. + +About how log value is recorded +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +SNS DAS records log values upon its changing. The frequency of log +sampling is significantly faster than change of the log, i.e., sample +environment devices. Therefore, it is reasonable to assume that all the +log value changes as step functions. + +The option to do interpolation is not supported at this moment. + +Comparison to FilterByLogValue +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. If the first log value is within the specified range and the first +log time is after run star time, FilterByLogValue assumes that the log +value before the first recorded log time is also within range, and thus +the first splitter starts from the run star time, while +GenerateEventFilter tends to be more conservative, and thus the first +splitter will start from the first log time. + +2. FilterByLogValue only filters events at the resolution of pulse time, +while :ref:`_algm-GenerateEventsFilter` can improve the +resolution to 1 micro second. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GenerateGroupingPowder-v1.rst b/Code/Mantid/docs/source/algorithms/GenerateGroupingPowder-v1.rst new file mode 100644 index 000000000000..454e74eff5cc --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GenerateGroupingPowder-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +For powder samples, with no texture, the scattering consists only of +rings. This algorithm reads a workspace and an angle step, then +generates a grouping file (.xml) and a par file (.par), by grouping +detectors in intervals i\*step to (i+1)\*step. The par file is required +for saving in the NXSPE format, since Mantid does not correctly +calculates the correct angles for detector groups. It will contain +average distances to the detector groups, and average scattering angles. +The x and y extents in the par file are radians(step)\*distance and +0.01, and are not supposed to be accurate. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GenerateGroupingSNSInelastic-v1.rst b/Code/Mantid/docs/source/algorithms/GenerateGroupingSNSInelastic-v1.rst new file mode 100644 index 000000000000..c2429c9ee76b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GenerateGroupingSNSInelastic-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Generate grouping files for ARCS, CNCS, HYSPEC, and SEQUOIA, by grouping +py pixels along a tube and px tubes. py is 1, 2, 4, 8, 16, 32, 64, or +128. px is 1, 2, 4, or 8. + +Author: A. Savici + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GeneratePeaks-v1.rst b/Code/Mantid/docs/source/algorithms/GeneratePeaks-v1.rst new file mode 100644 index 000000000000..658d25dbac76 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GeneratePeaks-v1.rst @@ -0,0 +1,44 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Generate a workspace by summing over the peak functions. The peaks' +parameters are given in a `TableWorkspace `__. + +Peak Parameters +^^^^^^^^^^^^^^^ + +Peak parameters must have the following parameters, which are case +sensitive in input `TableWorkspace `__ + +| ``1. spectrum`` +| ``2. centre`` +| ``3. height`` +| ``4. width (FWHM)`` +| ``5. backgroundintercept (a0)`` +| ``6. backgroundslope (a1)`` +| ``7. A2`` +| ``8. chi2`` + +Output +^^^^^^ + +| ``Output will include`` +| ``1. pure peak`` +| ``2. pure background (with specified range of FWHM (int))`` +| ``3. peak + background`` + +.. raw:: mediawiki + + {{AlgorithmLinks|GeneratePeaks}} + +Category:Algorithms + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst b/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst new file mode 100644 index 000000000000..01240671ee0a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst @@ -0,0 +1,39 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Retrieves the algorithm history of the workspace and saves it to a +Python script file or Python variable. + +Example usage: +~~~~~~~~~~~~~~ + +.. code:: python + + # Optional: Store the contents of the workspace to a file to your desktop. + GeneratePythonScript("MUSR00022725", "/home/userName/Desktop/MUSR00022725.py") + + # Store the contents of the workspace history into the hist variable + wsHistory = GeneratePythonScript("MUSR00022725") + + # Output the contents of the hist variable. + print wsHistory + + ###################################################################### + #Python Script Generated by GeneratePythonScript Algorithm + ###################################################################### + Load(Filename=r'/home/userName/workspace/mantid/Test/AutoTestData/MUSR00022725.nxs',OutputWorkspace='MUSR00022725') + RenameWorkspace(InputWorkspace='MUSR00022725',OutputWorkspace='test') + +.. raw:: mediawiki + + {{AlgorithmLinks|GeneratePythonScript}} + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst new file mode 100644 index 000000000000..430109f10ef9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst @@ -0,0 +1,191 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Description +----------- + +This algorithm requires a workspace that is both in d-spacing, but has +also been preprocessed by the :ref:`_algm-CrossCorrelate` +algorithm. In this first step you select one spectrum to be the +reference spectrum and all of the other spectrum are cross correlated +against it. Each output spectrum then contains a peak whose location +defines the offset from the reference spectrum. + +The algorithm iterates over each spectrum in the workspace and fits a +`Gaussian `__ function to the reference peak. The fit is used +to calculate the centre of the fitted peak, and the offset is then +calculated as: + +This is then written into a `.cal file `__ for every detector +that contributes to that spectrum. All of the entries in the cal file +are initially set to both be included, but also to all group into a +single group on :ref:`_algm-DiffractionFocussing`. The +:ref:`_algm-CreateCalFileByNames` algorithm can be used to +alter the grouping in the cal file. + +Fit for peak offset +~~~~~~~~~~~~~~~~~~~ + +The algorithm to calculate offset of peaks' positions is to minimize a +cost function as + +.. math:: \sum_{p} |X_{0, p} - (1+offset)\cdot X_{0, p}|/\chi^2_{p} + +, which p is the index of a peak whose position is within MinD and MaxD. + +Spectra to mask +^^^^^^^^^^^^^^^ + +- Empty spectrum marked as "empty det" + +- Spectrum with counts less than 1.0E^-3 in defined d-range as "dead + det" + +- Calculated offset exceeds the user-defined maximum offset. + +Criteria on peaks +^^^^^^^^^^^^^^^^^ + +The (fitted) peak must meet a series of criteria to be used to fit +spectrum's offset. + +A peak will not be used if + +- its centre is out of pre-defined d-range, i.e., MinD and MaxD; +- its centre is out of fitting window if it is defined; +- its :math:`\chi^2` of peak fitting is larger than pre-defined maximum + value; +- its height is lower than pre-defined lowest peak height; +- its signal/noise ratio is less than 5 + :math:`H\cdot FWHM\_To\_SIGMA/width < 5`; +- its height is not outside of error bars of background + :math:`H < \sqrt{H + B}/2`; +- its z-value on :math:`\frac{\delta d}{d}` is larger than 2.0. + +Generate fit window +~~~~~~~~~~~~~~~~~~~ + +- Required parameter: maxWidth. If it is not given, i.e., less or equal + to zero, then there won't be any window defined; +- Definition of fit window for peaks indexed from 0 to N-1 + + - Peak 0: window = Min((X0\_0-dmin), maxWidth), Min((X0\_1-X0\_0)/2, + maxWidth) + - Peak i (0 < i < N-1): window = Min((X0\_i-X0\_{i-1})/2, maxWidth), + Min((X0\_1-X0\_0)/2, maxWidth) + - Peak N-1: window = Min((X0\_i-X0\_{i-1})/2, maxWidth), + Min((dmax-X0\_i), maxWidth) + +where X0\_i is the centre of i-th peak. + +Fitting Quality +--------------- + +GetDetOffsetsMultiPeaks have 2 levels of fitting. First it will call +FindPeaks to fit Bragg peaks within d-range. Then it will fit offsets +from the peak positions obtained in the previous step. Therefore, the +performance of FindPeaks is critical to this algorithm. It is necessary +to output values reflecting the goodness of fitting of this algorithm to +users. + +Number of spectra that are NOT masked +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A spectrum will be masked if it is a dead pixel, has an empty detector +or has no peak that can be fit with given peak positions. The +performance of *FindPeaks* affects the third criteria. A better +algorithm to find and fit peaks may save some spectrum with relatively +much fewer events received, i.e., poorer signal. + +:math:`\chi^2` of the offset fitting function +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The goodness of fit, :math:`\chi^2_{iws}`, of the offset fitting +function + +.. math:: \sum_{p} |X_{0, p} - (1+offset)X_{0, p}|\cdot H^2_{p} + +is an important measure of fitting quality on each spectrum (indexed as +iws). + +Deviation of highest peaks +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +We observed that in some situation, the calibrated peaks' positions of +some spectra are far off to the targeted peak positions, while goodness +of fit such as :math:`\chi^2` are still good. It is usally caused by the +bad fit of one or two peaks in that spectrum, which feeds some erroreous +peak positions to peak offset fitting function. + +This type of bad fitting is very easily identified by visualization, +because the shift of peaks from the correct positions is significant in +fill plot. + +Therefore, deviation of highest peak if spectrum i, :math:`D_{i}` is +defined as: + +.. math:: D_{i} = |X^{(o)}\cdots(1+offset) - X^{(c)}| + +where :math:`X^{(o)}` is the fitted centre of the highest peak of +spectrum i, and :math:`X^{(c)}` is the theoretical centre of this peak. + +Collective quantities to illustrate goodness of fitting (still in developement) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Be noticed that the idea of this section is still under development and +has not been implemented yet. + +On the other hand, since GetDetOffsetsMultiPeaks always operates on an +EventWorkspace with thousands or several ten thousands of spectra, it is +very hard to tell the quality of fitting by looking at +:math:`\chi^2_{iws}` of all spectra. Hence, Here are two other +parameters are defined for comparison of results. + + :math:`g_1 = \frac{\sum_{s}D_{s}^2}{N_{nm}}` + +, where s is the index of any unmasked spectrum and :math:`N_{mn}` is +the number of unmasked spectra; + + :math:`g_2 = \frac{\sum_{s}D_{s}^2\cdot H_{s}^2}{N_{nm}}`, + +where :math:`H_{s}` is the height of highest peak of spectrum s. + +Standard error on offset +~~~~~~~~~~~~~~~~~~~~~~~~ + +The offset in unit of d-spacing differs is proportional to peak's +position by definition: + +.. math:: X_0^{(f)} = X_0^{(o)} * (1+offset) + +where :math:`X_0^{(f)}` is the focussed peak position, and +:math:`X_0^{(o)}` is the observed peak position by fitting. + +As different spectrum covers different d-space range, the highest peak +differs. Therefore, the error of offset should be normalized by the +peak's position. + +.. math:: E = (X_0^{(f)} - X_0^{(o)}*(1+offset))/X_0^{(f)} = 1 - \frac{X_0^{(o)}}{X_0^{(f)}}\cdot(1+offset) + +And it is unitless. + +By this mean, the error of all peaks should be close if they are fitted +correctly. + +Usage +----- + +**Python** + +OutputW,NumberPeaksFitted,Mask = +GetDetOffsetsMultiPeaks("InputW",0.01,2.0,1.8,2.2,"output.cal") + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetDetectorOffsets-v1.rst b/Code/Mantid/docs/source/algorithms/GetDetectorOffsets-v1.rst new file mode 100644 index 000000000000..c9d4e71ed7f2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GetDetectorOffsets-v1.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm requires a workspace that is both in d-spacing, but has +also been preprocessed by the :ref:`_algm-CrossCorrelate` +algorithm. In this first step you select one spectrum to be the +reference spectrum and all of the other spectrum are cross correlated +against it. Each output spectrum then contains a peak whose location +defines the offset from the reference spectrum. + +The algorithm iterates over each spectrum in the workspace and fits a +`Gaussian `__ function to the reference peaks. The fit is used +to calculate the centre of the fitted peak, and the offset is then +calculated as: + +:math:`-peakCentre*step/(dreference+PeakCentre*step)` + +This is then written into a `.cal file `__ for every detector +that contributes to that spectrum. All of the entries in the cal file +are initially set to both be included, but also to all group into a +single group on :ref:`_algm-DiffractionFocussing`. The +:ref:`_algm-CreateCalFileByNames` algorithm can be used to +alter the grouping in the cal file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetEi-v1.rst b/Code/Mantid/docs/source/algorithms/GetEi-v1.rst new file mode 100644 index 000000000000..b01d54a99ee2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GetEi-v1.rst @@ -0,0 +1,47 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Uses E= (1/2)mv^2 to calculate the energy of neutrons leaving the +source. The velocity is calculated from the time it takes for the +neutron pulse to travel between the two monitors whose spectra were +specified. + +An initial energy guess is required for the algorithm to find the +correct peak. The analysis will be done on the highest peak that is +within 8% of the estimated TOF given by the estimate. + +Not all neutrons arrive at the monitors at the same time because their +kinetic energies, and therefore velocities, are all different. The time +of arrival of the neutron pulse is taken to be the mean of the two half +peak height locations. The half height points are found as follows: + +#. the peak height is the largest number of counts above the background + in any bin in the window +#. the half height is half the above number +#. examine bins to the left of the bin with the highest number of counts + looking for a bin with less than half that number above background +#. interpolate between this point bin and the one immediately previous + to find the first half height location +#. repeat the steps 3 and 4 looking to the right of the highest point to + get the second half height point +#. the mean of the X-values of the two half height points is the TOF + arrival time of the neutrons + +The above process is illustrated on a peak is shown below in the image +below |Monitor Peak\|centre\|618px| + +The distances between the monitors are read from the instrument +definition file. It is assumed that the source and the monitors all lie +on one line and that the monitors have the same delay time. + +.. |Monitor Peak\|centre\|618px| image:: Monitorspect_getei.jpg + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetEi-v2.rst b/Code/Mantid/docs/source/algorithms/GetEi-v2.rst new file mode 100644 index 000000000000..fed368f40bd5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GetEi-v2.rst @@ -0,0 +1,50 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Uses E= (1/2)mv^2 to calculate the energy of neutrons leaving the +source. The velocity is calculated from the time it takes for the +neutron pulse to travel between the two monitors whose spectra were +specified. If no spectra are specified, the algorithm will use the +defaults for the instrument. + +An initial energy guess is required for the algorithm to find the +correct peak. The analysis will be done on the highest peak that is +within 8% of the estimated TOF given by the estimate. If no initial +guess is given, the algorithm will try to get it from the workspace, +from a sample log variable called "EnergyRequest". + +Not all neutrons arrive at the monitors at the same time because their +kinetic energies, and therefore velocities, are all different. The time +of arrival of the neutron pulse is taken to be the mean of the two half +peak height locations. The half height points are found as follows: + +#. the peak height is the largest number of counts above the background + in any bin in the window +#. the half height is half the above number +#. examine bins to the left of the bin with the highest number of counts + looking for a bin with less than half that number above background +#. interpolate between this point bin and the one immediately previous + to find the first half height location +#. repeat the steps 3 and 4 looking to the right of the highest point to + get the second half height point +#. the mean of the X-values of the two half height points is the TOF + arrival time of the neutrons + +The above process is illustrated on a peak is shown below in the image +below |Monitor Peak\|centre\|618px| + +The distances between the monitors are read from the instrument +definition file. It is assumed that the source and the monitors all lie +on one line and that the monitors have the same delay time. + +.. |Monitor Peak\|centre\|618px| image:: Monitorspect_getei.jpg + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetEiMonDet-v1.rst b/Code/Mantid/docs/source/algorithms/GetEiMonDet-v1.rst new file mode 100644 index 000000000000..10a8a79e3a60 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GetEiMonDet-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Get incident energy from one monitor and some detectors. If the minimum +distance from the sample to detectors is dmin, one will select detectors +in the range dmin to dmin\*MaximumDistanceFraction. These are grouped +together, appended to a copy of the monitor workspace, then fed to GetEi +algorithm. The output of this algorithm is identical to that of +:ref:`_algm-GetEi`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetEiT0atSNS-v1.rst b/Code/Mantid/docs/source/algorithms/GetEiT0atSNS-v1.rst new file mode 100644 index 000000000000..eaa31aa64b1c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GetEiT0atSNS-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Get Ei and T0 on ARCS and SEQUOIA instruments. It accounts for the +following: + +- in the ADARA framework, the monitors are in the first frame. +- SEQUOIA has event based monitors. +- some data aquisition errors will create unphysical monitor IDs. This + will be ignored +- when vChTrans is 2, on ARCS and SEQUOIA there is no chopper in the + beam (white beam). Will return not a number for both Ei and T0 + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetTimeSeriesLogInformation-v1.rst b/Code/Mantid/docs/source/algorithms/GetTimeSeriesLogInformation-v1.rst new file mode 100644 index 000000000000..a75627ed86d0 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GetTimeSeriesLogInformation-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Get information from a TimeSeriesProperty log. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GoniometerAnglesFromPhiRotation-v1.rst b/Code/Mantid/docs/source/algorithms/GoniometerAnglesFromPhiRotation-v1.rst new file mode 100644 index 000000000000..1a17ffce4ad0 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GoniometerAnglesFromPhiRotation-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used for finding Goniometer angles when instrument +readings are basically unknown. The inputs are two PeaksWorkspaces +corresponding to sample orientations of the SAME crystal that differ +only in their phi rotation. + +If the phi angles are known, this algorithm attempts to find the common +chi and omega rotations. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GreaterThanMD-v1.rst b/Code/Mantid/docs/source/algorithms/GreaterThanMD-v1.rst new file mode 100644 index 000000000000..6a85b8ec8c72 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GreaterThanMD-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Perform the > (greater-than) boolean operation on two MDHistoWorkspaces +or a MDHistoWorkspace and a scalar. The output workspace has a signal of +0.0 to mean "false" and a signal of 1.0 to mean "true". Errors are 0. + +For two MDHistoWorkspaces, the operation is performed +element-by-element. + +For a MDHistoWorkspace and a scalar, the operation is performed on each +element of the output. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst new file mode 100644 index 000000000000..ecd76106ff22 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst @@ -0,0 +1,91 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm sums, bin-by-bin, multiple spectra into a single spectra. +The errors are summed in quadrature and the algorithm checks that the +bin boundaries in X are the same. The new summed spectra are created at +the start of the output workspace and have spectra index numbers that +start at zero and increase in the order the groups are specified. Each +new group takes the spectra numbers from the first input spectrum +specified for that group. All detectors from the grouped spectra will be +moved to belong to the new spectrum. + +Not all spectra in the input workspace have to be copied to a group. If +KeepUngroupedSpectra is set to true any spectra not listed will be +copied to the output workspace after the groups in order. If +KeepUngroupedSpectra is set to false only the spectra selected to be in +a group will be used. + +To create a single group the list of spectra can be identified using a +list of either spectrum numbers, detector IDs or workspace indices. The +list should be set against the appropriate property. + +An input file allows the specification of many groups. The file must +have the following format\* (extra space and comments starting with # +are allowed) : + +| ``"unused number1"             `` +| ``"unused number2"`` +| ``"number_of_input_spectra1"`` +| ``"input spec1" "input spec2" "input spec3" "input spec4"`` +| ``"input spec5 input spec6"`` +| ``**    `` +| ``"unused number2" `` +| ``"number_of_input_spectra2"`` +| ``"input spec1" "input spec2" "input spec3" "input spec4"`` + +\* each phrase in "" is replaced by a single integer + +\*\* the section of the file that follows is repeated once for each +group + +Some programs require that "unused number1" is the number of groups +specified in the file but Mantid ignores that number and all groups +contained in the file are read regardless. "unused number2" is in other +implementations the group's spectrum number but in this algorithm it is +is ignored and can be any integer (not necessarily the same integer) + +| ``An example of an input file follows:`` +| ``2  `` +| ``1  `` +| ``64  `` +| ``1 2 3 4 5 6 7 8 9 10  `` +| ``11 12 13 14 15 16 17 18 19 20  `` +| ``21 22 23 24 25 26 27 28 29 30  `` +| ``31 32 33 34 35 36 37 38 39 40  `` +| ``41 42 43 44 45 46 47 48 49 50  `` +| ``51 52 53 54 55 56 57 58 59 60  `` +| ``61 62 63 64  `` +| ``2  `` +| ``60`` +| ``65 66 67 68 69 70 71 72 73 74  `` +| ``75 76 77 78 79 80 81 82 83 84  `` +| ``85 86 87 88 89 90 91 92 93 94  `` +| ``95 96 97 98 99 100 101 102 103 104  `` +| ``105 106 107 108 109 110 111 112 113 114  `` +| ``115 116 117 118 119 120 121 122 123 124`` + +In addition the following XML grouping format is also supported + +.. code:: xml + + + + + + + + + + +where is used to specify spectra IDs and detector IDs. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst b/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst new file mode 100644 index 000000000000..0eddfff0b887 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst @@ -0,0 +1,106 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm sums, bin-by-bin, multiple spectra into a single spectra. +The errors are summed in quadrature and the algorithm checks that the +bin boundaries in X are the same. The new summed spectra are created at +the start of the output workspace and have spectra index numbers that +start at zero and increase in the order the groups are specified. Each +new group takes the spectra numbers from the first input spectrum +specified for that group. All detectors from the grouped spectra will be +moved to belong to the new spectrum. + +Not all spectra in the input workspace have to be copied to a group. If +KeepUngroupedSpectra is set to true any spectra not listed will be +copied to the output workspace after the groups in order. If +KeepUngroupedSpectra is set to false only the spectra selected to be in +a group will be used. + +To create a single group the list of spectra can be identified using a +list of either spectrum numbers, detector IDs or workspace indices. The +list should be set against the appropriate property. + +An input file allows the specification of many groups. The file must +have the following format\* (extra space and comments starting with # +are allowed) : + +| ``"unused number1"             `` +| ``"unused number2"`` +| ``"number_of_input_spectra1"`` +| ``"input spec1" "input spec2" "input spec3" "input spec4"`` +| ``"input spec5 input spec6"`` +| ``**    `` +| ``"unused number2" `` +| ``"number_of_input_spectra2"`` +| ``"input spec1" "input spec2" "input spec3" "input spec4"`` + +\* each phrase in "" is replaced by a single integer + +\*\* the section of the file that follows is repeated once for each +group + +Some programs require that "unused number1" is the number of groups +specified in the file but Mantid ignores that number and all groups +contained in the file are read regardless. "unused number2" is in other +implementations the group's spectrum number but in this algorithm it is +is ignored and can be any integer (not necessarily the same integer) + +| ``An example of an input file follows:`` +| ``2  `` +| ``1  `` +| ``64  `` +| ``1 2 3 4 5 6 7 8 9 10  `` +| ``11 12 13 14 15 16 17 18 19 20  `` +| ``21 22 23 24 25 26 27 28 29 30  `` +| ``31 32 33 34 35 36 37 38 39 40  `` +| ``41 42 43 44 45 46 47 48 49 50  `` +| ``51 52 53 54 55 56 57 58 59 60  `` +| ``61 62 63 64  `` +| ``2  `` +| ``60`` +| ``65 66 67 68 69 70 71 72 73 74  `` +| ``75 76 77 78 79 80 81 82 83 84  `` +| ``85 86 87 88 89 90 91 92 93 94  `` +| ``95 96 97 98 99 100 101 102 103 104  `` +| ``105 106 107 108 109 110 111 112 113 114  `` +| ``115 116 117 118 119 120 121 122 123 124`` + +In addition the following XML grouping format is also supported + +.. code:: xml + + + + + + + + + + +where is used to specify spectra IDs and detector IDs. + +Previous Versions +----------------- + +Version 1 +~~~~~~~~~ + +The set of spectra to be grouped can be given as a list of either +spectrum numbers, detector IDs or workspace indices. The new, summed +spectrum will appear in the workspace at the first workspace index of +the pre-grouped spectra (which will be given by the ResultIndex property +after execution). The detectors for all the grouped spectra will be +moved to belong to the first spectrum. *A technical note: the workspace +indices previously occupied by summed spectra will have their data +zeroed and their spectrum number set to a value of -1.* + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GroupWorkspaces-v1.rst b/Code/Mantid/docs/source/algorithms/GroupWorkspaces-v1.rst new file mode 100644 index 000000000000..35dae89dbf9a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/GroupWorkspaces-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm takes two or more workspaces as input and creates an +output workspace group. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/HFIRDarkCurrentSubtraction-v1.rst b/Code/Mantid/docs/source/algorithms/HFIRDarkCurrentSubtraction-v1.rst new file mode 100644 index 000000000000..a8c3b27f1919 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/HFIRDarkCurrentSubtraction-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Subtract the dark current from a HFIR SANS data set. This workflow +algorithm will: + +- Properly load the dark current data set + +- Normalize the dark current to the data taking period + +- Subtract the dark current from the input workspace + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/HFIRLoad-v1.rst b/Code/Mantid/docs/source/algorithms/HFIRLoad-v1.rst new file mode 100644 index 000000000000..19d1898d683e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/HFIRLoad-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Workflow algorithm that loads HFIR SANS data and applies basic +corrections to the workspace. Those include: + +- Moving the detector at its proper position in Z + +- Moving the detector according to the beam center + +- Gathering meta-data + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/HFIRSANSNormalise-v1.rst b/Code/Mantid/docs/source/algorithms/HFIRSANSNormalise-v1.rst new file mode 100644 index 000000000000..fcd284da51f7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/HFIRSANSNormalise-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Performs data normalisation for HFIR SANS. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/HFIRSANSReduction-v1.rst b/Code/Mantid/docs/source/algorithms/HFIRSANSReduction-v1.rst new file mode 100644 index 000000000000..fe646d6aa6e1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/HFIRSANSReduction-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +HFIR SANS reduction workflow + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst new file mode 100644 index 000000000000..109354237b58 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst @@ -0,0 +1,46 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is a refinement of the +:ref:`_algm-FlatPlateAbsorption` algorithm for the specific +case of an HRPD 'slab can' sample holder. It uses the aforementioned +generic algorithm to calculate the correction due to the sample itself, +using numerical integration. This is done using the standard height x +width dimensions of an HRPD sample holder of 23 x 18 mm. Valid values of +the thickness are 2,5,10 & 15 mm, although this is not currently +enforced. + +Further corrections are then carried out to account for the 0.125mm +Vanadium windows at the front and rear of the sample, and for the +aluminium of the holder itself (which is traversed by neutrons en route +to the 90 degree bank). This is carried out using an analytical +approximation for a flat plate, the correction factor being calculated +as +:math:`\rm{exp} \left( \frac{- \rho \left( \sigma_a \frac{ \lambda} {1.798} + \sigma_s \right) t}{\rm{cos} \, \theta} \right)`, +where :math:`\lambda` is the wavelength, :math:`\theta` the angle +between the detector and the normal to the plate and the other symbols +are as given in the property list above. The assumption is that the +neutron enters the plate along the normal. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must have units of wavelength. The +`instrument `__ associated with the workspace must be fully +defined because detector, source & sample position are needed. + +ChildAlgorithms used +~~~~~~~~~~~~~~~~~~~~ + +The :ref:`_algm-FlatPlateAbsorption` algorithm is used to +calculate the correction due to the sample itself. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/HasUB-v1.rst b/Code/Mantid/docs/source/algorithms/HasUB-v1.rst new file mode 100644 index 000000000000..e7938fa58059 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/HasUB-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Determine if a workspace has a UB matrix on any of it's samples. Returns +True if one is found. Returns false if none can be found, or if the +workspace type is incompatible. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/He3TubeEfficiency-v1.rst b/Code/Mantid/docs/source/algorithms/He3TubeEfficiency-v1.rst new file mode 100644 index 000000000000..3c2cd455c6fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/He3TubeEfficiency-v1.rst @@ -0,0 +1,41 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm corrects the detection efficiency of He3 tubes using an +exponential function and certain detector properties. The correction +scheme is given by the following: + +:math:`\epsilon = \frac{A}{1-e^{\frac{-\alpha P (L - 2W) \lambda}{T sin(\theta)}}}` + +where *A* is a dimensionless scaling factor, :math:`\alpha` is a +constant with units *(Kelvin / (metres :math:`\AA` atm))*, *P* is +pressure in units of *atm*, *L* is the tube diameter in units of +*metres*, *W* is the tube thickness in units of *metres*, *T* is the +temperature in units of *Kelvin*, *sin(\ :math:`\theta`)* is the angle +of the neutron trajectory with respect to the long axis of the He3 tube +and :math:`\lambda` is in units of :math:`\AA`. + +The Optional properties that are of num list type can be used in the +following manner. If no input value is given, the detector parameter is +pulled from the detector itself. If a single value is used as input, +that value is applied to all detectors. If an array of values is used, +that array *must* be the same size as the number of spectra in the +workspace. If it is not, the spectra indicies that do not have values +will be zeroed in the output workspace. + +Restrictions on Input Workspace +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The input workspace must be in units of wavelength. + +The input workspace must be histogram data. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IQTransform-v1.rst b/Code/Mantid/docs/source/algorithms/IQTransform-v1.rst new file mode 100644 index 000000000000..d777a7c597a4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IQTransform-v1.rst @@ -0,0 +1,54 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is intended to take the output of a SANS reduction and +apply a transformation to the data in an attempt to linearise the curve. +Optionally, a background can be subtracted from the input data prior to +transformation. This can be either a constant value, another workspace +or both. Note that this expects a single spectrum input; if the input +workspace contains multiple spectra, only the first will be transformed +and appear in the output workspace. + +A SANS reduction results in data in the form I(Q) vs Q, where Q is +Momentum Transfer and I denotes intensity (the actual unit on the Y axis +is 1/cm). These abbreviations are used in the descriptions of the +transformations which follow. If the input is a histogram, the mid-point +of the X (i.e. Q) bins will be taken. The output of this algorithm is +always point data. + ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Transformation Name | Y | X | ++=======================+===============================================================================================+==================================================================================================+ +| Guinier (spheres) | :math:`\ln (I)` | :math:`Q^2` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Guinier (rods) | :math:`\ln (IQ)` | :math:`Q^2` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Guinier (sheets) | :math:`\ln (IQ^2)` | :math:`Q^2` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Zimm | :math:`\frac{1}{I}` | :math:`Q^2` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Debye-Bueche | :math:`\frac{1}{\sqrt{I}}` | :math:`Q^2` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Holtzer | :math:`I \times Q` | :math:`Q` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Kratky | :math:`I \times Q^2` | :math:`Q` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Porod | :math:`I \times Q^4` | :math:`Q` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Log-Log | :math:`\ln(I)` | :math:`\ln(Q)` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ +| General \* | :math:`Q^{C_1} \times I^{C_2} \times \ln{\left( Q^{C_3} \times I^{C_4} \times C_5 \right)}` | :math:`Q^{C_6} \times I^{C_7} \times \ln{\left( Q^{C_8} \times I^{C_9} \times C_{10} \right)}` | ++-----------------------+-----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + +\* The constants :math:`C_1 - C_{10}` are, in subscript order, the ten +constants passed to the GeneralFunctionConstants property. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IdentifyNoisyDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/IdentifyNoisyDetectors-v1.rst new file mode 100644 index 000000000000..d375513104c7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IdentifyNoisyDetectors-v1.rst @@ -0,0 +1,36 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The process for this algorithm is: + +- The standard deviation for each pixel within the pre-set range is + calculated. +- The mean value and standard deviation of these standard deviation + values is calculated. +- Any detector/pixel for which it's standard deviation value satisfied + the following conditions: + + - sdev(pixel) < mean(sdevs) - 3 \* sdev(sdevs) + - sdev(pixel) > mean(sdevs) + 3 \* sdev(sdevs) + - sdev(pixel) < mean(sdevs) \* 0.0001 + +- (cont) is considered to be "noisy". + +This is repeated three times from the second step. + +This uses the :ref:`_algm-Integration`, :ref:`_algm-Power` and +:ref:`_algm-Divide` algorithms for the first step. + +The lower bound for the integration is currently fixed to 2000. + +The upper bound for the integration is currently fixed to 19000. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ImportMDEventWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ImportMDEventWorkspace-v1.rst new file mode 100644 index 000000000000..b0edaddc91b3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ImportMDEventWorkspace-v1.rst @@ -0,0 +1,60 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates an MDEventWorkspace from a plain ASCII file. Uses a simple +format for the file described below. This algorithm is suitable for +importing small volumes of data only. This algorithm does not scale well +for large input workspaces. The purpose of this algorithm is to allow +users to quickly import data from existing applications for purposes of +comparison. + +Format +------ + +The file must contain a **DIMENSIONS** section listing the +dimensionality of the workspace. Each input line is taken as a new +dimension after the **DIMENSIONS** flag, and before the **MDEVENTS** +flag. Input arguments must be separated by a space or tab. They are +provided in the order Name, ID, Units, NumberOfBins. See the Usage +examples below. + +The file must contain a **MDEVENTS** flag after the **DIMENSIONS** flag. +Again, inputs are separated by a space or tab, each line represents a +unique MDEvent. There must be either NDims + 2 or NDims + 4 columns in +this section. If there are NDims + 2, columns, then *Lean* MDEvents will +be used (Signal, Error and Dimensionality only). If there are NDims + 4 +columns, then *Full* MDEvents will be used (Signal, Error, RunNo, +DetectorId and Dimensionality). If you have provided NDims + 2 columns, +then each row is interpreted as follows: + +``Signal Error {Dimensionality}`` + +where the Dimensionality is an array of coordinates in each of the +dimensions listed in the **DIMENSIONS** section, and in that order. IF +there are NDims + 4 columns, then *Full* MDEvents will be used. Each row +is interpreted as follows: + +``Signal Error RunNumber DetectorId {Dimensionality}`` + +The usage example below shows demo files with both of these formats. + +Comments are denoted by lines starting with **#**. There is no +multi-line comment. + +Alternatives +------------ + +Other alternatives to importing/creating MDWorkspaces are +:ref:`_algm-ImportMDHistoWorkspace`, +:ref:`_algm-CreateMDHistoWorkspace` and +:ref:`_algm-CreateMDWorkspace` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst new file mode 100644 index 000000000000..27ad4cbf89be --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst @@ -0,0 +1,45 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm takes a text file (.txt extension) containing two columns +and converts it into an MDHistoWorkspace. + +Details +~~~~~~~ + +The columns are in the order **signal** then **error**. The file must +only contain two columns, these may be separated by any whitespace +character. The algorithm expects there to be 2\*product(nbins in each +dimension) entries in this file. So if you have set the dimensionality +to be *4,4,4* then you will need to provide 64 rows of data, in 2 +columns or 124 floating point entries. + +The Names, Units, Extents and NumberOfBins inputs are all linked by the +order they are provided in. For example, if you provide Names *A, B, C* +and Units *U1, U2, U3* then the dimension *A* will have units *U1*. + +Signal and Error inputs are read in such that, the first entries in the +file will be entered across the first dimension specified, and the +zeroth index in the other dimensions. The second set of entries will be +entered across the first dimension and the 1st index in the second +dimension, and the zeroth index in the others. + +Alternatives +------------ + +A very similar algorithm to this is +:ref:`_algm-CreateMDHistoWorkspace`, which takes it's +input signal and error values from arrays rather than a text file. +Another alternative is to use :ref:`_algm-ConvertToMD` which works +on MatrixWorkspaces, and allows log values to be included in the +dimensionality. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IndexPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/IndexPeaks-v1.rst new file mode 100644 index 000000000000..8f7f901158a2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IndexPeaks-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a PeaksWorkspace with a UB matrix stored with the sample, this +algorithm will use UB inverse to index the peaks. If there are peaks +from multiple runs in the workspace, the stored UB will be used to get +an initial indexing for the peaks from each individual run. +Subsequently, a temporary UB will be optimzed for the peaks from each +individual run, and used to index the peaks from that run. In this way, +a consistent indexing of the peaks from multiple runs will be obtained, +which indexes the largest number of peaks, although one UB may not +produce exactly that indexing for all peaks, within the specified +tolerance. + +Any peak with any Miller index more than the specified tolerance away +from an integer will have its (h,k,l) set to (0,0,0). The calculated +Miller indices can either be rounded to the nearest integer value, or +can be left as decimal fractions. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IndexSXPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/IndexSXPeaks-v1.rst new file mode 100644 index 000000000000..1bf0ed7661d9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IndexSXPeaks-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a PeaksWorkspace and a set of lattice parameters, attempts to tag +each peak with a HKL value by comparing d-spacings between potential HKL +matches and the peaks as well as angles between Q vectors. + +Usage Notes +----------- + +This algorithm does not generate a UB Matrix, it will only index peaks. +Run CalculateUMatrix algorithm after executing this algorithm in order +to attach a UB Matrix onto the sample. The CopySample algorithm will +allow this UB Matrix to be transfered between workspaces. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IndirectTransmission-v1.rst b/Code/Mantid/docs/source/algorithms/IndirectTransmission-v1.rst new file mode 100644 index 000000000000..7556c22414f8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IndirectTransmission-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates the scattering & transmission for Indirect Geometry +spectrometers. The sample chemical formula is input for the +SetSampleMaterial algorithm to calculate the cross-sections. The +instrument analyser reflection is selected to obtain the wavelength to +calculate the absorption cross-section. The sample number density & +thickness is input to then calculate the percentage scattering & +transmission. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IntegrateByComponent-v1.rst b/Code/Mantid/docs/source/algorithms/IntegrateByComponent-v1.rst new file mode 100644 index 000000000000..59c7c1b226a4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IntegrateByComponent-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm integrates up the instrument hierarchy, and each pixel +will contain the average value for the component. For example, assuming +that for a particular instrument on workspace w1 a "tube" is made out of +"pixels", w=IntegrateByComponent(w1,1) will integrate values of w1, +calculate the average along the tube (LevelsUp=1) (for non-masked +pixels), and replace the value of each spectrum in a tube with the +average value for that tube. + +Note that if the detectors are grouped before, this algorithm won't run +except with LevelsUp=0 (integrate over all detectors). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IntegrateEllipsoids-v1.rst b/Code/Mantid/docs/source/algorithms/IntegrateEllipsoids-v1.rst new file mode 100644 index 000000000000..2011f130e085 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IntegrateEllipsoids-v1.rst @@ -0,0 +1,152 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Overview +~~~~~~~~ + +This algorithm will integrate disjoint single crystal Bragg peaks by +summing the number of raw events in a 3D ellipsoidal peak region in +reciprocal space and subtracting an estimate of the background obtained +from an ellipsoidal shell. In some ways it is similar to the +IntegratePeaksMD algorithm, and it would be useful to also see the +documentation for that algorithm. In particular the size parameters to +this algorithm are also specified in inverse Angstroms and the +background subtraction is done in the same way for both the intensity +and the estimated standard deviations. However, this algorithm differs +from IntegratePeaksMD in several critical ways. + +- This algorithm counts raw, un-weighted events while IntegratePeaksMD + uses weighted events. +- This algorithm uses 3D ellipsoidal regions with aspect ratios that + are adapted to the set of events that are near the peak center, while + IntegratePeaksMD uses spherical regions. +- This algorithm includes an option to automatically choose the size of + the ellipsoidal regions based on the statistics of the set of events + near the peak. +- This algorithm only applies to peaks with integral HKL values and as + currently implemented it cannot be used to integrate ellipsoidal + regions at other locations in reciprocal space. + +The algorithm calculates the three principal axes of the events near a +peak, and uses the standard deviations in the directions of the +principal axes to determine the aspect ratio of ellipsoids used for the +peak and background regions. + +Explanation of Inputs +~~~~~~~~~~~~~~~~~~~~~ + +- The event data to be integrated is obtained from an ordinary + EventWorkspace with an X-axis in time-of-flight, as loaded from a + NeXus event file. This algorithm maps the events to reciprocal space. + +- The peaks to be integrated are obtained from a PeaksWorkspace. The + peaks must be indexed, and any peaks indexed as (0,0,0) will be + ignored. The HKL values for valid peaks should all be integers, to + make this check for unindexed peaks reliable. + +- Only events that are near a peak are considered when constructing the + ellipsoids. The RegionRadius specifies the maximum distance from the + peak center to an event in reciprocal space, for that event to used. + See the figure below. Also, each event will be counted for at most + one peak, the one with the nearest HKL value. The RegionRadius should + be specified to be just slightly larger than the expected peak region + to avoid overlap with other peaks, and to avoid including excessive + background. As the size of the RegionRadius increases, the ellipsoids + will become more spherical and less well adapted to the actual shape + of the peak. + +.. figure:: /images/IntegrateEllipsoids.png + :alt: IntegrateEllipsoids.png + + IntegrateEllipsoids.png + +- If the SpecifySize option is selected, then the user MUST specify the + PeakSize, BackgroundInnerSize and BackgroundOuterSize. In this mode, + the algorithm is similar to the IntegratePeaksMD algorithm. As shown + in the figure, these values determine the length of the major axis + for the ellipsoidal peak region, and of the inner and outer + ellipsoids bounding the background region. The same major axis + lengths are used for all peaks, but the lengths of the other two axes + of the ellipsoids are adjusted based on the standard deviations of + the events in those directions. If SpecifySize is false, then the + major axis length for each peak will be set to include a range of + plus or minus three times the standard deviation of the events in + that direction. That is, PeakSize is set to three times the standard + deviation in the direction of the first principal axis. Also, in this + case the BackgroundInnerSize is set to the PeakSize and the + BackgroundOuterSize is set so that the background ellipsoidal shell + has the same volume as the peak ellipsoidal region. If specified by + the user, these parameters must be ordered correctly with: + :math:`0 < PeakSize \leq BackgroundInnerSize < BackgroundOuterSize \leq RegionRadius` + +- The integrated intensities will be set in the specified + OutputWorkspace. If this is different from the input PeaksWorkspace, + the input peaks workspace will be copied to the OutputWorkspace + before setting the integrated intensities. + +Detailed Algorithm Description +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This algorithm will integrate a list of indexed single-crystal +diffraction peaks from a PeaksWorkspace, using events from an +EventWorkspace. The indexed peaks are first used to determine a UB +matrix. The inverse of that UB matrix is then used to form lists of +events that are close to peaks in reciprocal space. An event will be +added to the list of events for a peak provided that the fractional +h,k,l value of that event (obtained by applying UB-inverse to the +Q-vector) is closer to the h,k,l of that peak, than to the h,k,l of any +other peak AND the Q-vector for that event is within the specified +radius of the Q-vector for that peak. + +When the lists of events near the peaks have been built, the three +principal axes of the set of events near each peak are found, and the +standard deviations of the projections of the events on each of the +three principal axes are calculated. The principal axes and standard +deviations for the events around a peak in the directions of the +principal axes are used to determine an ellipsoidal region for the peak +and an ellipsoidal shell region for the background. The number of events +in the peak ellipsoid and background ellipsoidal shell are counted and +used to determine the net integrated intensity of the peak. + +The ellipsoidal regions used for the peak and background can be obtained +in two ways. First, the user may specify the size of the peak ellipsoid +and the inner and outer size of the background ellipsoid. If these are +specified, the values will be used for half the length of the major axis +of an ellipsoid centered on the peak. The major axis is in the direction +of the principal axis for which the standard deviation in that direction +is largest. The other two axes for the ellipsoid are in the direction of +the other two principal axes and are scaled relative to the major axes +in proportion to their standard deviations. For example if the standard +deviations in the direction of the other two princial axes are .8 and .7 +times the standard deviation in the direction of the major axis, then +the ellipse will extend only .8 and .7 times as far in the direction of +those axes, as in the direction of the major axis. Overall, the user +specified sizes for the PeakSize, BackgroundInnerSize and +BackgroundOuterSize are similar to the PeakRadius, BackgroundInnerRadius +and BackgrounOuterRadius for the IntegratePeaksMD algorithm. The +difference is that the regions used in this algorithm are not spherical, +but are ellipsoidal with axis directions obtained from the principal +axes of the events near a peak and the ellipsoid shape (relative axis +lengths) is determined by the standard deviations in the directions of +the principal axes. + +Second, if the user does not specifiy the size of the peak and +background ellipsoids, then the three axes of the peak ellipsoid are +again set to the principal axes of the set of nearby events but in this +case their axis lengths are set to cover a range of plus or minus three +standard deviations in the axis directions. In this case, the background +ellipsoidal shell is chosen to have the same volume as the peak +ellipsoid and it's inner surface is the outer surface of the peak +ellipsoid. The outer surface of the background ellipsoidal shell is an +ellipsoidal surface with the same relative axis lengths as the inner +surface. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeakTimeSlices-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeakTimeSlices-v1.rst new file mode 100644 index 000000000000..f2f27ba8d280 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IntegratePeakTimeSlices-v1.rst @@ -0,0 +1,48 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm fits a bivariate normal distribution( plus background) to +the data on each time slice. The Fit program uses +`BivariateNormal `__ for the Fit Function. + +The area used for the fitting is calculated based on the dQ parameter. A +good value for dQ is 1/largest unit cell length. This parameter dictates +the size of the area used to approximate the intensity of the peak. The +estimate .1667/ max(a,b,c) assumes \|Q\|=1/d. + +The result is returned in this algorithm's output "Intensity" and +"SigmaIntensity" properties. The peak object is NOT CHANGED. + +The table workspace is also a result. Each line contains information on +the fit for each good time slice. The column names( and information) in +the table are: + +| `` Time, Channel, Background, Intensity, Mcol, Mrow, SScol,SSrow, SSrc, NCells,`` +| `` ChiSqrOverDOF, TotIntensity, BackgroundError, FitIntensityError, ISAWIntensity,`` +| ``  ISAWIntensityError,TotalBoundary, NBoundaryCells, Start Row, End Row,Start Col, and End Col.`` +| ``  The last column has a comma separated List of sepctral ID's used in the time slice.`` + +The final Peak intensity is the sum of the IsawIntensity for each time +slice. The error is the square root of the sum of squares of the +IsawIntensityError values. + +The columns whose names are Background, Intensity, Mcol, Mrow, SScol, +SSrow, and SSrc correspond to the parameters for the BivariateNormal +curve fitting function. + +This algorithm has been carefully tweaked to give good results for +interior peaks only. Peaks close to the edge of the detector may not +give good results. + +This Algorithm is also used by the :ref:`_algm-PeakIntegration` +algorithm when the Fit tag is selected. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst new file mode 100644 index 000000000000..251330537377 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst @@ -0,0 +1,104 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm performs integration of single-crystal peaks within a +radius (with optional background subtraction) in reciprocal space. + +Inputs +~~~~~~ + +The algorithms takes two input workspaces: + +- A MDEventWorkspace containing the events in multi-dimensional space. + This would be the output of + :ref:`_algm-ConvertToDiffractionMDWorkspace`. +- As well as a PeaksWorkspace containing single-crystal peak locations. + This could be the output of :ref:`_algm-FindPeaksMD` +- The OutputWorkspace will contain a copy of the input PeaksWorkspace, + with the integrated intensity and error found being filled in. + +Calculations +~~~~~~~~~~~~ + +Integration is performed by summing the weights of each MDEvent within +the provided radii. Errors are also summed in quadrature. + +.. figure:: /images/IntegratePeaksMD_graph1.png + :alt: IntegratePeaksMD_graph1.png + + IntegratePeaksMD\_graph1.png + +- All the Radii are specified in :math:`\AA^{-1}` +- A sphere of radius **PeakRadius** is integrated around the center of + each peak. + + - This gives the summed intensity :math:`I_{peak}` and the summed + squared error :math:`\sigma I_{peak}^2`. + - The volume of integration is :math:`V_{peak}`. + +- If **BackgroundOuterRadius** is specified, then a shell, with radius + r where **BackgroundInnerRadius** < r < **BackgroundOuterRadius**, is + integrated. + + - This gives the summed intensity :math:`I_{shell}` and the summed + squared error :math:`\sigma I_{shell}^2`. + - The volume of integration is :math:`V_{shell}`. + - **BackgroundInnerRadius** allows you to give some space between + the peak and the background area. + +Background Subtraction +^^^^^^^^^^^^^^^^^^^^^^ + +The background signal within PeakRadius is calculated by scaling the +background signal density in the shell to the volume of the peak: + +:math:`I_{bg} = I_{shell} \frac{V_{peak}}{V_{shell}}` + +with the error squared on that value: + +:math:`\sigma I_{bg}^2 = \frac{V_{peak}}{V_{shell}} \sigma I_{shell}^2` + +This is applied to the integrated peak intensity :math:`I_{peak}` to +give the corrected intensity :math:`I_{corr}`: + +:math:`I_{corr} = I_{peak} - I_{bg}` + +with the errors summed in quadrature: + +:math:`\sigma I_{corr}^2 = \sigma I_{peak}^2 + \sigma I_{bg}^2` + +If BackgroundInnerRadius is Omitted +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If BackgroundInnerRadius is left blank, then **BackgroundInnerRadius** = +**PeakRadius**, and the integration is as follows: + +.. figure:: /images/IntegratePeaksMD_graph2.png + :alt: IntegratePeaksMD_graph2.png + + IntegratePeaksMD\_graph2.png +Sample Usage +~~~~~~~~~~~~ + +.. code:: python + + # Load a SCD data set and find the peaks + LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') + ConvertToDiffractionMDWorkspace(InputWorkspace='TOPAZ_3131_nxs',OutputWorkspace='TOPAZ_3131_md',LorentzCorrection='1') + FindPeaksMD(InputWorkspace='TOPAZ_3131_md',PeakDistanceThreshold='0.15',MaxPeaks='100',OutputWorkspace='peaks') + FindUBUsingFFT(PeaksWorkspace='peaks',MinD='2',MaxD='16') + + # Perform the peak integration, in-place in the 'peaks' workspace. + IntegratePeaksMD(InputWorkspace='TOPAZ_3131_md', PeaksWorkspace='peaks', + PeakRadius=0.12, BackgroundOuterRadius=0.2, BackgroundInnerRadius=0.16, + OutputWorkspace='peaks') + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst new file mode 100644 index 000000000000..251330537377 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst @@ -0,0 +1,104 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm performs integration of single-crystal peaks within a +radius (with optional background subtraction) in reciprocal space. + +Inputs +~~~~~~ + +The algorithms takes two input workspaces: + +- A MDEventWorkspace containing the events in multi-dimensional space. + This would be the output of + :ref:`_algm-ConvertToDiffractionMDWorkspace`. +- As well as a PeaksWorkspace containing single-crystal peak locations. + This could be the output of :ref:`_algm-FindPeaksMD` +- The OutputWorkspace will contain a copy of the input PeaksWorkspace, + with the integrated intensity and error found being filled in. + +Calculations +~~~~~~~~~~~~ + +Integration is performed by summing the weights of each MDEvent within +the provided radii. Errors are also summed in quadrature. + +.. figure:: /images/IntegratePeaksMD_graph1.png + :alt: IntegratePeaksMD_graph1.png + + IntegratePeaksMD\_graph1.png + +- All the Radii are specified in :math:`\AA^{-1}` +- A sphere of radius **PeakRadius** is integrated around the center of + each peak. + + - This gives the summed intensity :math:`I_{peak}` and the summed + squared error :math:`\sigma I_{peak}^2`. + - The volume of integration is :math:`V_{peak}`. + +- If **BackgroundOuterRadius** is specified, then a shell, with radius + r where **BackgroundInnerRadius** < r < **BackgroundOuterRadius**, is + integrated. + + - This gives the summed intensity :math:`I_{shell}` and the summed + squared error :math:`\sigma I_{shell}^2`. + - The volume of integration is :math:`V_{shell}`. + - **BackgroundInnerRadius** allows you to give some space between + the peak and the background area. + +Background Subtraction +^^^^^^^^^^^^^^^^^^^^^^ + +The background signal within PeakRadius is calculated by scaling the +background signal density in the shell to the volume of the peak: + +:math:`I_{bg} = I_{shell} \frac{V_{peak}}{V_{shell}}` + +with the error squared on that value: + +:math:`\sigma I_{bg}^2 = \frac{V_{peak}}{V_{shell}} \sigma I_{shell}^2` + +This is applied to the integrated peak intensity :math:`I_{peak}` to +give the corrected intensity :math:`I_{corr}`: + +:math:`I_{corr} = I_{peak} - I_{bg}` + +with the errors summed in quadrature: + +:math:`\sigma I_{corr}^2 = \sigma I_{peak}^2 + \sigma I_{bg}^2` + +If BackgroundInnerRadius is Omitted +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If BackgroundInnerRadius is left blank, then **BackgroundInnerRadius** = +**PeakRadius**, and the integration is as follows: + +.. figure:: /images/IntegratePeaksMD_graph2.png + :alt: IntegratePeaksMD_graph2.png + + IntegratePeaksMD\_graph2.png +Sample Usage +~~~~~~~~~~~~ + +.. code:: python + + # Load a SCD data set and find the peaks + LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') + ConvertToDiffractionMDWorkspace(InputWorkspace='TOPAZ_3131_nxs',OutputWorkspace='TOPAZ_3131_md',LorentzCorrection='1') + FindPeaksMD(InputWorkspace='TOPAZ_3131_md',PeakDistanceThreshold='0.15',MaxPeaks='100',OutputWorkspace='peaks') + FindUBUsingFFT(PeaksWorkspace='peaks',MinD='2',MaxD='16') + + # Perform the peak integration, in-place in the 'peaks' workspace. + IntegratePeaksMD(InputWorkspace='TOPAZ_3131_md', PeaksWorkspace='peaks', + PeakRadius=0.12, BackgroundOuterRadius=0.2, BackgroundInnerRadius=0.16, + OutputWorkspace='peaks') + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst new file mode 100644 index 000000000000..c55037a4c955 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst @@ -0,0 +1,94 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Integrates arbitary shaped single crystal peaks defined on an +`MDHistoWorkspace `__ using connected component +analysis to determine regions of interest around each peak of the +`PeaksWorkspace `__. The output is an integrated +`PeaksWorkspace `__ as well as an image containing the +labels assigned to each cluster for diagnostic and visualisation +purposes. + +**The algorithm makes no assmptions about Peak shape or size** and can +therfore be used where integration over defined shapes +:ref:`_algm-IntegratePeaksMD` and +:ref:`_algm-IntegrateEllipsoids`, for example, will not +work. + +.. figure:: /images/ClusterImage.png + :alt: ClusterImage.png + + ClusterImage.png +*Cluster Label region displayed in the `SliceViewer `__. +Peak centre is marked with an X. The green circle illustrates the +integration region used by :ref:`_algm-IntegratePeaksMD`* + +A threshold for the Peak should be defined below which, parts of the +image are treated as background. The normalization method in combination +with the threshold may both be used to define a background. We suggest +keeping the default of VolumeNormalization so that changes in the +effective bin size do not affect the background filtering. + +This algorithm uses an imaging technique, and it is therefore important +that the MDHistoWorkspace you are using is binned to a sufficient +resolution via :ref:`_algm-BinMD`. You can overlay the intergrated peaks +workspace in the `Slice +Viewer `__ over the +generated Cluster Labeled OutputWorkspaceMD to see what the interation +region used for each peak amounts to. + +Notes for running +----------------- + +It is suggested that you **initially run the algorithm on a coarse +image**. This will help you tune the Threshold parameters. The algorithm +generates a large memory footprint, so it is suggested that you keep the +initial image small, and run on hardware with sufficient memory to store +multiple workspace of equal size to the input MDWorkspace (generated as +part of the connected component analysis). + +Warnings and Logging +-------------------- + +The algorithm will generate warning. There are three main warning to +know about. + +Off the Image Edge +~~~~~~~~~~~~~~~~~~ + +The algorithm will warn about unreachable peaks (off the image). This +may be because the peaks detected were off the edge of the detector, or +because the image was cropped in BinMD in such a way that that part of +the detector/TOF space is no longer accessible. + +No Cluster Corresponding to Peak +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This is because the input `PeaksWorkspace `__ has peaks +that do not align with peaks in the image. The error could either be on +the side of the input PeaksWorkspace (spurious peaks), or of the +`MDHistoWorkspace `__ generated as part of processing. +One thing to verify is that the combination of Threshold and +Normalization input parameters are not so low that they are treating +genuine peaks in the image as background. + +Multiple Peaks Assigned to the same Cluster +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This means overlapping peaks in the image. This is a problem because +both peaks will be given an integrated value that is the sum of the +entire cluster. You may need to increase the Threshold parameter to +resolve this problem. + +For more in-depth analysis, the algorithm will produce debug log +messages. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Integration-v1.rst b/Code/Mantid/docs/source/algorithms/Integration-v1.rst new file mode 100644 index 000000000000..0b5dd93b0531 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Integration-v1.rst @@ -0,0 +1,45 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Integration sums up spectra in a `Workspace `__ and outputs a +`Workspace `__ that contains only 1 value per spectrum (i.e. +the sum). The associated errors are added in quadrature. The two X +values per spectrum are set to the limits of the range over which the +spectrum has been integrated. By default, the entire range is integrated +and all spectra are included. + +Optional properties +~~~~~~~~~~~~~~~~~~~ + +If only a portion of the workspace should be integrated then the +optional parameters may be used to restrict the range. +StartWorkspaceIndex & EndWorkspaceIndex may be used to select a +contiguous range of spectra in the workspace (note that these parameters +refer to the workspace index value rather than spectrum numbers as taken +from the raw file). If only a certain range of each spectrum should be +summed (which must be the same for all spectra being integrated) then +the Range\_lower and Range\_upper properties should be used. No +rebinning takes place as part of this algorithm: if the values given do +not coincide with a bin boundary then the first bin boundary within the +range is used. If a value is given that is beyond the limit covered by +the spectrum then it will be integrated up to its limit. The data that +falls outside any values set will not contribute to the output +workspace. + +EventWorkspaces +~~~~~~~~~~~~~~~ + +If an `EventWorkspace `__ is used as the input, the +output will be a `MatrixWorkspace `__. +:ref:`_algm-Rebin` is recommended if you want to keep the workspace as an +EventWorkspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst b/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst new file mode 100644 index 000000000000..f75438544d74 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst @@ -0,0 +1,53 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithms is useful for increasing the time resolution of spectra +whose bins have large numbers of counts which vary smoothly e.g. monitor +spectra. + +The "params" property defines the new bin boundaries using the same +syntax as in :ref:`_algm-Rebin`. That is, the first number is the first +bin boundary and the second number is the width of the bins. Bins are +created until the third number would be exceeded, the third number is +the x-value of the last bin. There can be further pairs of numbers, the +first in the pair will be the bin width and the last number the last bin +boundary. + +The bin immediately before the specified boundaries :math:`x_2`, +:math:`x_3`, ... :math:`x_i` is likely to have a different width from +its neighbors because there can be no gaps between bins. Rebin ensures +that any of these space filling bins cannot be less than 25% or more +than 125% of the width that was specified. + +To calculate the y-values the input spectra are approximated with a time +series where the value at the center of each bin mean is the mean count +rate over the bin. This series is interpolated by calculating cubic +splines that fit this series and evaluating the splines at the centers +of the requested bin. The splines have natural boundary conditions and +zero second derivative at the end points, they are calculated using the +`gsl `__. + +The errors on the count rates are estimated as a weighted mean of the +errors values for the nearest input bin centers. These weights are +inversely proportional to the distance of the output bin center to the +respective input bin data points. + +Example Rebin param strings +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The same syntax as for :ref:`_algm-Rebin` + +0,100,20000 + From 0 rebin in constant size bins of 100 up to 20,000 +0,100,10000,200,20000 + From 0 rebin in steps of 100 to 10,000 then steps of 200 to 20,000 + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/InvertMDDim-v1.rst b/Code/Mantid/docs/source/algorithms/InvertMDDim-v1.rst new file mode 100644 index 000000000000..e0a9a9eb1435 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/InvertMDDim-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Description +----------- + +InvertMDDim inverts the dimensions of a MDHistoWorkspace. It copies the +data around to match the new dimensions. This algorithm is useful when +dealing with storage order issues. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/InvertMask-v1.rst b/Code/Mantid/docs/source/algorithms/InvertMask-v1.rst new file mode 100644 index 000000000000..24ce88c75e1e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/InvertMask-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +A NOT operation will be conducted on the input masking workspace +(SpecialWorkspace2D) + +Output +------ + +A SpecialWorkspace2D with the same dimension and geometry as the input +two SpecialWorkspace2D. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LeBailFit-v1.rst b/Code/Mantid/docs/source/algorithms/LeBailFit-v1.rst new file mode 100644 index 000000000000..236699d46b65 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LeBailFit-v1.rst @@ -0,0 +1,66 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm performs `Le Bail Fit `__ to powder +diffraction data, and also supports pattern calculation. This algorithm +will refine a specified set of the powder instrumental profile +parameters with a previous refined background model. + +Peak profile function for fit +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Back to back exponential convoluted with pseudo-voigt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Here is the list of the peak profile function supported by this +algorithm. + +- Thermal neutron back-to-back exponential convoluted with pseudo-voigt + + - geometry-related parameters: Dtt1, Dtt2, Zero + - back-to-back exponential parameters: Alph0, Alph1, Beta0, Beta1 + - pseudo-voigt parameters: Sig0, Sig1, Sig2, Gam0, Gam1, Gam2 + +Thermal neutron back to back exponential convoluted with pseudo-voigt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Here is the list of the peak profile function supported by this +algorithm. + +- Thermal neutron back-to-back exponential convoluted with pseudo-voigt + + - geometry-related parameters: Dtt1, Zero, Dtt1t, Dtt2t, Width, + Tcross + - back-to-back exponential parameters: Alph0, Alph1, Beta0, Beta1, + Alph0t, Alph1t, Beta0t, Beta1t + - pseudo-voigt parameters: Sig0, Sig1, Sig2, Gam0, Gam1, Gam2 + +Optimization +~~~~~~~~~~~~ + +*LeBailFit* supports a tailored simulated annealing optimizer (using +Monte Carlo random walk algorithm). In future, regular minimizes in GSL +library might be supported. + +Supported functionalities +~~~~~~~~~~~~~~~~~~~~~~~~~ + +| ``* LeBailFit: fit profile parameters by Le bail algorithm; `` +| ``* Calculation: pattern calculation by Le bail algorithm; `` +| ``* MonteCarlo: fit profile parameters by Le bail algorithm with Monte Carlo random wal; `` +| ``* RefineBackground: refine background parameters`` + +Further Information +~~~~~~~~~~~~~~~~~~~ + +See `Le Bail Fit `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LessThanMD-v1.rst b/Code/Mantid/docs/source/algorithms/LessThanMD-v1.rst new file mode 100644 index 000000000000..1f0afec3d42a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LessThanMD-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Perform the < (less-than) boolean operation on two MDHistoWorkspaces or +a MDHistoWorkspace and a scalar. The output workspace has a signal of +0.0 to mean "false" and a signal of 1.0 to mean "true". Errors are 0. + +For two MDHistoWorkspaces, the operation is performed +element-by-element. + +For a MDHistoWorkspace and a scalar, the operation is performed on each +element of the output. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Load-v1.rst b/Code/Mantid/docs/source/algorithms/Load-v1.rst new file mode 100644 index 000000000000..1f2774d0144e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Load-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The Load algorithm is a more intelligent algorithm than most other load +algorithms. When passed a filename it attempts to search the existing +load `algorithms <:Category:Algorithms>`__ and find the most appropriate +to load the given file. The specific load algorithm is then run as a +child algorithm with the exception that it logs messages to the Mantid +logger. + +Specific Load Algorithm Properties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Each specific loader will have its own properties that are appropriate +to it: SpectrumMin and SpectrumMax for ISIS RAW/NeXuS, FilterByTof\_Min +and FilterByTof\_Max for Event data. The Load algorithm cannot know +about these properties until it has been told the filename and found the +correct loader. Once this has happened the properties of the specific +Load algorithm are redeclared on to that copy of Load. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadAscii-v1.rst b/Code/Mantid/docs/source/algorithms/LoadAscii-v1.rst new file mode 100644 index 000000000000..d0f8e1d0eb74 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadAscii-v1.rst @@ -0,0 +1,40 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadAscii algorithm reads in spectra data from a text file and +stores it in a `Workspace2D `__ as data points. The data in +the file must be organized in columns separated by commas, tabs, spaces, +colons or semicolons. Only one separator type can be used throughout the +file; use the "Separator" property to tell the algorithm which to use. +The algorithm :ref:`_algm-SaveAscii` is normally able to produce such +a file. + +By default the algorithm attempts to guess which lines are header lines +by trying to see where a contiguous block of numbers starts. This can be +turned off by specifying the "SkipNumLines" property, which will then +tell the algorithm to simply use that as the the number of header lines. + +The format can be one of: + +- Two columns: 1st column=X, 2nd column=Y, E=0 +- For a workspace of *n* spectra, 2\ *n*\ +1 columns: 1\ *st* column=X, + 2i\ *th* column=Y, 2i+1\ *th* column =E +- Four columns: 1st column=X, 2nd column=Y, 3rd column=E, 4th column=DX + (X error) + +The number of bins is defined by the number of rows. + +The resulting workspace will have common X binning for all spectra. + +This algorithm cannot load a file created by :ref:`_algm-SaveAscii` +if it has X errors written and several spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadAscii-v2.rst b/Code/Mantid/docs/source/algorithms/LoadAscii-v2.rst new file mode 100644 index 000000000000..6e3e98ecd187 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadAscii-v2.rst @@ -0,0 +1,42 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadAscii2 algorithm reads in spectra data from a text file and +stores it in a `Workspace2D `__ as data points. The data in +the file must be organized in columns separated by commas, tabs, spaces, +colons or semicolons. Only one separator type can be used throughout the +file; use the "Separator" property to tell the algorithm which to use. +The algorithm `SaveAscii2 `__ is normally able to produce +such a file. + +The format must be: + +- A single integer or blank line to denote a new spectra +- For each bin, between two and four columns of delimted data in the + following order: 1st column=X, 2nd column=Y, 3rd column=E, 4th + column=DX (X error) +- Comments can be included by prefixing the line with a non-numerical + character which must be consistant throughout the file and specified + when you load the file. Defaults to "#" +- The number of bins is defined by the number of rows and must be + identical for each spectra + +The following is an example valid file of 4 spectra of 2 bins each with +no X error + +#. X , Y , E + +1 2.00000000,2.00000000,1.00000000 4.00000000,1.00000000,1.00000000 2 +2.00000000,5.00000000,2.00000000 4.00000000,4.00000000,2.00000000 3 +2.00000000,3.00000000,1.00000000 4.00000000,0.00000000,0.00000000 4 +2.00000000,0.00000000,0.00000000 4.00000000,0.00000000,0.00000000 + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadCalFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadCalFile-v1.rst new file mode 100644 index 000000000000..74c031c5beca --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadCalFile-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm loads an ARIEL-style 5-column ASCII .cal file into up to +3 workspaces: a GroupingWorkspace, OffsetsWorkspace and/or +MaskWorkspace. + +The format is + +- Number: ignored.\* UDET: detector ID.\* Offset: calibration offset. + Goes to the OffsetsWorkspace. +- Select: 1 if selected (not masked out). Goes to the MaskWorkspace. +- Group: group number. Goes to the GroupingWorkspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadCanSAS1D-v1.rst b/Code/Mantid/docs/source/algorithms/LoadCanSAS1D-v1.rst new file mode 100644 index 000000000000..6d30bde4113c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadCanSAS1D-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads the given file, which should be in the CanSAS1d format specified +by canSAS 1D Data Formats Working Group schema +http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd and +creates output workspace. CANSAS has a Wiki page at +http://www.smallangles.net/wgwiki/index.php/canSAS_Working_Groups + +If the file contains mulitple SASentry elements a workspace group will +be created and each SASentry will be one workspace in the group. Loading +multiple SASdata elements is not supported. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadCanSAS1D-v2.rst b/Code/Mantid/docs/source/algorithms/LoadCanSAS1D-v2.rst new file mode 100644 index 000000000000..6d30bde4113c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadCanSAS1D-v2.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads the given file, which should be in the CanSAS1d format specified +by canSAS 1D Data Formats Working Group schema +http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd and +creates output workspace. CANSAS has a Wiki page at +http://www.smallangles.net/wgwiki/index.php/canSAS_Working_Groups + +If the file contains mulitple SASentry elements a workspace group will +be created and each SASentry will be one workspace in the group. Loading +multiple SASdata elements is not supported. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadDaveGrp-v1.rst b/Code/Mantid/docs/source/algorithms/LoadDaveGrp-v1.rst new file mode 100644 index 000000000000..58ed70c3eb10 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadDaveGrp-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm loads data from a DAVE grouped ASCII file. These have +been generated at the SNS for all the inelastic beamlines, hence the +choice in the defaults for the axis units. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadDetectorInfo-v1.rst b/Code/Mantid/docs/source/algorithms/LoadDetectorInfo-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadDetectorInfo-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadDetectorsGroupingFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadDetectorsGroupingFile-v1.rst new file mode 100644 index 000000000000..89bf056bd018 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadDetectorsGroupingFile-v1.rst @@ -0,0 +1,139 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used to generate a GroupingWorkspace from an XML or +Map file containing detectors' grouping information. + +XML File Format +--------------- + +Extension: .xml + +Parameters +~~~~~~~~~~ + +- "instrument": optional attribute of node 'detector-grouping'. It must + be valid instrument name. If "instrument" is not defined, only tag + "ids" can be used in this XML file. +- "ID": optional attribute of node 'group'. It must be an integer, and + the key to denote group. If "ID" is not given, algorithm will use + default group ID for each group in the same order as in XML file. The + automatic group ID starts from 1. +- "detids": a node to define grouping by detectors' ID. Its value must + be a list of integers separated by ','. A '-' is used between 2 + integers to define a range of detectors. +- "component": a node to define that all detectors belonged to a + component in the instrument are to be in a same group. Its value + should be a valid component name. +- "ids": a node to define that all detectors of the spectrum whose ID + 's defined by "ids" will be grouped together. + +Example 1: + +.. raw:: html + + + +| `` ``\ +| ``  ``\ +| ``   ``\ \ ``3,34-44,47``\ +| ``   ``\ \ ``bank21``\ +| ``  ``\ +| ``   ``\ \ ``bank26``\ +| ``  ``\ +| `` ``\ + +Example 2: + +.. raw:: html + + + +| `` ``\ +| ``  ``\ +| ``   ``\ \ ``3,34-44,47``\ +| ``   ``\ \ ``bank21``\ +| ``  ``\ +| ``   ``\ \ ``bank26``\ +| ``  ``\ +| `` ``\ + +Example 3: + +.. raw:: html + + + +| `` ``\ +| ``  ``\ +| ``   ``\ \ ``3,34-44,47``\ +| ``  ``\ +| ``   ``\ \ ``26``\ +| ``   ``\ \ ``27,28``\ +| ``  ``\ +| `` ``\ + +Map File Format +--------------- + +Extension: .map + +The file must have the following format\* (extra space and comments +starting with # are allowed) : + +| `` "unused number1"             `` +| `` "unused number2"`` +| `` "number_of_input_spectra1"`` +| `` "input spec1" "input spec2" "input spec3" "input spec4"`` +| `` "input spec5 input spec6"`` +| `` **    `` +| `` "unused number2" `` +| `` "number_of_input_spectra2"`` +| `` "input spec1" "input spec2" "input spec3" "input spec4"`` + +\* each phrase in "" is replaced by a single integer + +\*\* the section of the file that follows is repeated once for each +group + +Some programs require that "unused number1" is the number of groups +specified in the file but Mantid ignores that number and all groups +contained in the file are read regardless. "unused number2" is in other +implementations the group's spectrum number but in this algorithm it is +is ignored and can be any integer (not necessarily the same integer) + +An example of an input file follows: + +| `` 3  `` +| `` 1  `` +| `` 64  `` +| `` 1 2 3 4 5 6 7 8 9 10  `` +| `` 11 12 13 14 15 16 17 18 19 20  `` +| `` 21 22 23 24 25 26 27 28 29 30  `` +| `` 31 32 33 34 35 36 37 38 39 40  `` +| `` 41 42 43 44 45 46 47 48 49 50  `` +| `` 51 52 53 54 55 56 57 58 59 60  `` +| `` 61 62 63 64  `` +| `` 2  `` +| `` 60`` +| `` 65 66 67 68 69 70 71 72 73 74  `` +| `` 75 76 77 78 79 80 81 82 83 84  `` +| `` 85 86 87 88 89 90 91 92 93 94  `` +| `` 95 96 97 98 99 100 101 102 103 104  `` +| `` 105 106 107 108 109 110 111 112 113 114  `` +| `` 115 116 117 118 119 120 121 122 123 124`` +| `` 3`` +| `` 60`` +| `` 125 126 127 - 180 181 182 183 184`` + +== + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadDspacemap-v1.rst b/Code/Mantid/docs/source/algorithms/LoadDspacemap-v1.rst new file mode 100644 index 000000000000..eadcf8f041b1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadDspacemap-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads a Dspacemap file (POWGEN binary, VULCAN binary or ascii format) +into an OffsetsWorkspace. + +The resulting workspace can then be used with, e.g. +:ref:`_algm-AlignDetectors` to perform calibration. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadEmptyInstrument-v1.rst b/Code/Mantid/docs/source/algorithms/LoadEmptyInstrument-v1.rst new file mode 100644 index 000000000000..f4e0fd145c89 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadEmptyInstrument-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is to enable you to look at an instrument without having +to load a full data file. Instead of loading a data file, it loads the +`InstrumentDefinitionFile `__ for the +instrument, which has information about the instrument. The instrument +is referred to as being empty because there is no data associated with +it. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst new file mode 100644 index 000000000000..752708f9c551 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst @@ -0,0 +1,53 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadEventNeXus algorithm loads data from an EventNexus file into an +`EventWorkspace `__. The default histogram bin +boundaries consist of a single bin able to hold all events (in all +pixels), and will have their `units `__ set to time-of-flight. +Since it is an `EventWorkspace `__, it can be rebinned +to finer bins with no loss of data. + +Sample logs, such as motor positions or e.g. temperature vs time, are +also loaded using the :ref:`_algm-LoadNexusLogs` child algorithm. + +Optional properties +~~~~~~~~~~~~~~~~~~~ + +If desired, you can filter out the events at the time of loading, by +specifying minimum and maximum time-of-flight values. This can speed up +loading and reduce memory requirements if you are only interested in a +narrow range of the times-of-flight of your data. + +You may also filter out events by providing the start and stop times, in +seconds, relative to the first pulse (the start of the run). + +If you wish to load only a single bank, you may enter its name and no +events from other banks will be loaded. + +The Precount option will count the number of events in each pixel before +allocating the memory for each event list. Without this option, because +of the way vectors grow and are re-allocated, it is possible for up to +2x too much memory to be allocated for a given event list, meaning that +your EventWorkspace may occupy nearly twice as much memory as needed. +The pre-counting step takes some time but that is normally compensated +by the speed-up in avoid re-allocating, so the net result is smaller +memory footprint and approximately the same loading time. + +Veto Pulses +^^^^^^^^^^^ + +Veto pulses can be filtered out in a separate step using +:ref:`_algm-FilterByLogValue`: + +``FilterByLogValue(InputWorkspace="ws", OutputWorkspace="ws", LogName="veto_pulse_time", PulseFilter="1")`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v1.rst new file mode 100644 index 000000000000..e4e0c916f351 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadEventPreNeXus algorithm stores data from the pre-nexus neutron +event data file in an `EventWorkspace `__. The default +histogram bin boundaries consist of a single bin able to hold all events +(in all pixels), and will have their `units `__ set to +time-of-flight. Since it is an `EventWorkspace `__, it +can be rebinned to finer bins with no loss of data. + +Optional properties +~~~~~~~~~~~~~~~~~~~ + +Specific pulse ID and mapping files can be specified if needed; these +are guessed at automatically from the neutron filename, if not +specified. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v2.rst b/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v2.rst new file mode 100644 index 000000000000..2c698d89c792 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v2.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadEventPreNeXus algorithm stores data from the pre-nexus neutron +event data file in an `EventWorkspace `__. The default +histogram bin boundaries consist of a single bin able to hold all events +(in all pixels), and will have their `units `__ set to +time-of-flight. Since it is an `EventWorkspace `__, it +can be rebinned to finer bins with no loss of data. + +Optional properties +~~~~~~~~~~~~~~~~~~~ + +Specific pulse ID and mapping files can be specified if needed; these +are guessed at automatically from the neutron filename, if not +specified. + +A specific list of pixel ids can be specified, in which case only events +relating to these pixels will appear in the output. + +The ChunkNumber and TotalChunks properties can be used to load only a +section of the file; e.g. if these are 1 and 10 respectively only the +first 10% of the events will be loaded. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadFlexiNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadFlexiNexus-v1.rst new file mode 100644 index 000000000000..6843345b5193 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadFlexiNexus-v1.rst @@ -0,0 +1,60 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Description +----------- + +This algorithm is a flexible NeXus file loader. Data loading is driven +by a dictionary. Correspondingly the algorithm takes as arguments: a +filename, a path to a dictionary file and an output workspace name. + +The dictionary itself is a list of key=value pairs, one per line. +Normally dictionary entries take the form key-path-into-Nexus-file. The +default action is to store the data found at path-into-NeXus-file under +key key in the Run information of the result workspace. But some keys +are interpreted specially: + +data=path-into-nexus-file + This is a required entry. path-into-nexus-file is the path in the + NeXus file to the data which is the main bulk workspace data. + Usually the counts. From the dimensionality of this data the type of + result workspace is determined. If the rank is <= 2, then a + Workspace2D is created, else a MDHistoWorkspace. +x-axis=path-into-nexus-file + The data found under the path into the NeXus file will be used as + axis 0 on the dataset +x-axis-name=text + The text specified will become the name of the axis 0 +y-axis=path-into-nexus-file + The data found under the path into the NeXus file will be used as + axis 1 on the dataset +y-axis-name=text + The text specified will become the name of the axis 1 +z-axis=path-into-nexus-file + The data found under the path into the NeXus file will be used as + axis 2 on the dataset +z-axis-name=text + The text specified will become the name of the axis 0 +title=path-into-nexus-file or text + If the value contains a / then it is interpreted as a path into the + NeXus file, the value of which will be stored as workspace title. + Else the text value will be stored as the title name directly. +sample=path-into-nexus-file or text + If the value contains a / then it is interpreted as a path into the + NeXus file, the value of which will be stored as workspace sample. + Else the text value will be stored as the sample name directly. + +Please note that the dimensions on the MDHistoWorkspace are inverted +when compared with the ones in the NeXus file. This is a fix which +allows to efficiently transfer the NeXus data in C storage order into +the MDHistoWorkspace which has fortran storage order. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst new file mode 100644 index 000000000000..565442f9c3d1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst @@ -0,0 +1,46 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is to import Fullprof .irf file (peak parameters) and +.hkl file (reflections) and record the information to TableWorkspaces, +which serve as the inputs for algorithm LeBailFit. + +Format of Instrument parameter TableWorkspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Instrument parameter TableWorkspace contains all the peak profile +parameters imported from Fullprof .irf file. + +Presently these are the peak profiles supported + +``* Thermal neutron back to back exponential convoluted with pseudo-voigt (profile No. 10 in Fullprof)`` + +Each row in TableWorkspace corresponds to one profile parameter. + +Columns include Name, Value, FitOrTie, Min, Max and StepSize. + +Format of reflection TableWorkspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Each row of this workspace corresponds to one diffraction peak. The +information contains the peak's Miller index and (local) peak profile +parameters of this peak. For instance of a back-to-back exponential +convoluted with Gaussian peak, the peak profile parameters include +Alpha, Beta, Sigma, centre and height. + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to do Le Bail +fit. The introduction can be found in the wiki page of +:ref:`_algm-LeBailFit`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadFullprofResolution-v1.rst b/Code/Mantid/docs/source/algorithms/LoadFullprofResolution-v1.rst new file mode 100644 index 000000000000..597fbaf168f8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadFullprofResolution-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Load Fullprof resolution (.irf) file to TableWorkspace(s) and optionally +into the instruments of matrix workspaces with one workspace per bank of +the .irf file. Either or both of the Tableworkspace(s) and matrix +workspace must be set. + +Where a Workspace is specified the support for translating Fullprof +resolution parameters into the workspace for subsequent fitting is +limitted to Fullprof: + +- NPROF=13, Ikeda-Carpender pseudo-Voigt translated into + `IkedaCarpenterPV `__ according to + `CreateIkedaCarpenterParameters `__ +- NPROF=9, back-to-back-exponential pseudo-Voigt translated into + `BackToBackExponential `__ according to + `CreateBackToBackParameters `__ + +Note for NPROF=9 the translation is currently ignoring the Lorentzian +part of the pseudo-Voigt. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadGSASInstrumentFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadGSASInstrumentFile-v1.rst new file mode 100644 index 000000000000..ef735d1c318d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadGSASInstrumentFile-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Load parameters from a GSAS instrument file into a table workspace + +Later developments of this algorithm will enable these parameters to be +put into the instrument of a wotrkspace for either Ikeda-Carpender +pseudo-Voigt translated into `IkedaCarpenterPV `__ or +back-to-back-exponential pseudo-Voigt translated into +`BackToBackExponential `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst b/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst new file mode 100644 index 000000000000..3c084b27db93 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads a GSS file such as that saved by :ref:`_algm-SaveGSS`. + +Two types of GSAS files are supported + +| ``* RALF`` +| ``* SLOG`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadHKL-v1.rst b/Code/Mantid/docs/source/algorithms/LoadHKL-v1.rst new file mode 100644 index 000000000000..e048a605f90d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadHKL-v1.rst @@ -0,0 +1,47 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads an ASCII .hkl file to a PeaksWorkspace. + +File has same format that works successfully in GSAS and SHELX from +ISAW: + +hklFile.write('%4d%4d%4d%8.2f%8.2f%4d%8.4f%7.4f%7d%7d%7.4f%4d%9.5f%9.4f\\n'% +(H, K, L, FSQ, SIGFSQ, hstnum, WL, TBAR, CURHST, SEQNUM, TRANSMISSION, +DN, TWOTH, DSP)) + +HKL is flipped by -1 due to different q convention in ISAW vs Mantid. + +FSQ = integrated intensity of peak (scaled) + +SIGFSQ = sigma from integrating peak + +hstnum = number of sample orientation (starting at 1) + +WL = wavelength of peak + +TBAR = output of absorption correction (-log(transmission)/mu) + +CURHST = run number of sample + +SEQNUM = peak number (unique number for each peak in file) + +TRANSMISSION = output of absorption correction (exp(-mu\*tbar)) + +DN = detector bank number + +TWOTH = two-theta scattering angle + +DSP = d-Spacing of peak (Angstroms)/TR + +Last line must have all 0's + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadIDFFromNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadIDFFromNexus-v1.rst new file mode 100644 index 000000000000..d8447543d5c1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadIDFFromNexus-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Some Nexus files contain an instrument definition. This algorithm loads +the instrument from this definition. You may need to tell this algorithm +where in the Nexus file to find the Instrument folder, which contains +the instrument definition. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadILL-v1.rst b/Code/Mantid/docs/source/algorithms/LoadILL-v1.rst new file mode 100644 index 000000000000..5c354cafcd9a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadILL-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads an ILL TOF NeXus file into a `Workspace2D `__ with +the given name. + +This loader calculates the elastic peak position (EPP) on the fly. In +cases where the dispersion peak might be higher than the EPP, it is good +practice to load a Vanadium file. + +The property FilenameVanadium is optional. If it is present the EPP will +be loaded from the Vanadium data. + +To date this algorithm only supports: IN4, IN5 and IN6 + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadILLIndirect-v1.rst b/Code/Mantid/docs/source/algorithms/LoadILLIndirect-v1.rst new file mode 100644 index 000000000000..ce683e022ceb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadILLIndirect-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +TODO: Enter a full wiki-markup description of your algorithm here. You +can then use the Build/wiki\_maker.py script to generate your full wiki +page. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadILLSANS-v1.rst b/Code/Mantid/docs/source/algorithms/LoadILLSANS-v1.rst new file mode 100644 index 000000000000..0e4f7ffd17b9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadILLSANS-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads an ILL D33 nexus file into a `Workspace2D `__ with +the given name. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadISISNexus-v2.rst b/Code/Mantid/docs/source/algorithms/LoadISISNexus-v2.rst new file mode 100644 index 000000000000..9f4fde83c6fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadISISNexus-v2.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads a Nexus file created from an ISIS instrument. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadInstrument-v1.rst b/Code/Mantid/docs/source/algorithms/LoadInstrument-v1.rst new file mode 100644 index 000000000000..9ff225c18d65 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadInstrument-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads an instrument definition file (`IDF `__) +into a workspace, which contains information about detector positions, +their geometric shape, slit properties, links between values stored in +ISIS log-files and components of the instrument and so on. For more on +IDFs see: `InstrumentDefinitionFile `__. + +By default the algorithm will write a 1:1 map between the spectrum +number and detector ID. Any custom loading algorithm that calls this as +a Child Algorithm will therefore get this 1:1 map be default. If the +custom loader is to write its own map then it is advised to set +``RewriteSpectraMap`` to false to avoid extra work. + +The instrument to load can be specified by either the InstrumentXML, +Filename and InstrumentName properties (given here in order of +precedence if more than one is set). At present, if the InstrumentXML is +used the InstrumentName property should also be set. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadInstrumentFromNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadInstrumentFromNexus-v1.rst new file mode 100644 index 000000000000..f57adee2ba3f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadInstrumentFromNexus-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Attempts to load information about the instrument from a ISIS NeXus +file. In particular attempt to read L2 and 2-theta detector position +values and add detectors which are positioned relative to the sample in +spherical coordinates as (r,theta,phi)=(L2,2-theta,0.0). Also adds dummy +source and samplepos components to instrument. + +LoadInstrumentFromNexus is intended to be used as a child algorithm of +other Loadxxx algorithms, rather than being used directly. It is used by +LoadMuonNexus version 1. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadInstrumentFromRaw-v1.rst b/Code/Mantid/docs/source/algorithms/LoadInstrumentFromRaw-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadInstrumentFromRaw-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadIsawDetCal-v1.rst b/Code/Mantid/docs/source/algorithms/LoadIsawDetCal-v1.rst new file mode 100644 index 000000000000..1fe322da1457 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadIsawDetCal-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Moves the detectors in an instrument using the origin and 2 vectors of +the rotated plane from an ISAW DetCal file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadIsawPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/LoadIsawPeaks-v1.rst new file mode 100644 index 000000000000..181842fcfbb3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadIsawPeaks-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Reads an ISAW-style .peaks or .integrate file into a PeaksWorkspace. Any +detector calibration information is ignored. + +NOTE: The instrument used is determined by reading the 'Instrument:' and +'Date:' tags at the start of the file.If the date is not present, the +latest `Instrument Definition File `__ is +used. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadIsawSpectrum-v1.rst b/Code/Mantid/docs/source/algorithms/LoadIsawSpectrum-v1.rst new file mode 100644 index 000000000000..57b5d2381620 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadIsawSpectrum-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Load incident spectrum and detector efficiency correction file +containing spectra for each detector. The spectra are created by +"TOPAZ\_spectrum.py" from files of vanadium or TiZr and background. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadIsawUB-v1.rst b/Code/Mantid/docs/source/algorithms/LoadIsawUB-v1.rst new file mode 100644 index 000000000000..24a271eaf923 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadIsawUB-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads the UB matrix into a workspace from an ISAW-style UB matrix ASCII +file. + +You can use the :ref:`_algm-SaveIsawUB` algorithm to save to this +format. + +The matrix in the file is the transpose of the UB Matrix. The UB matrix +maps the column vector (h,k,l ) to the column vector (q'x,q'y,q'z). +\|Q'\|=1/dspacing and its coordinates are a right-hand coordinate system +where x is the beam direction and z is vertically upward. (IPNS +convention) + +Note: for an MDEventWorkspace, all experimentInfo objects will contain +teh oriented lattice loaded from the IsawUB file + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadLLB-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLLB-v1.rst new file mode 100644 index 000000000000..b637d49353d5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadLLB-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads an LLB MIBEMOL TOF NeXus file into a `Workspace2D `__ +with the given name. + +This loader calculates the elastic peak position (EPP) on the fly. + +To date this algorithm only supports the MIBEMOL instrument. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadLOQDistancesFromRaw-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLOQDistancesFromRaw-v1.rst new file mode 100644 index 000000000000..2ad2744e3a98 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadLOQDistancesFromRaw-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The ISIS TS1 instrument +`LOQ `__ writes values for +the moderator-sample and sample-detector distances to the RAW data file. +These distances are required for correct data reduction. This algorithm +extracts the information from the ``i_l1`` and ``i_sddist`` variables of +the IVPB struct respectively and moves the appropriate components so +that the Mantid instrument satisfies these values. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst new file mode 100644 index 000000000000..e3e64cc63f99 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst @@ -0,0 +1,96 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is called on a regular interval by the +:ref:`_algm-MonitorLiveData` algorithm. **It should not be +necessary to call LoadLiveData directly.** + +.. figure:: /images/LoadLiveData_flow.png + :alt: LoadLiveData_flow.png + + LoadLiveData\_flow.png +Data Processing +~~~~~~~~~~~~~~~ + +- Each time LoadLiveData is called, a chunk of data is loaded from the + `LiveListener `__. + + - This consists of all the data collected since the previous call. + - The data is saved in a temporary `workspace `__. + +- You have two options on how to process this workspace: + +Processing with an Algorithm +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Specify the name of the algorithm in the *ProcessingAlgorithm* + property. + + - This could be, e.g. a `Python Algorithm `__ + written for this purpose. + - The algorithm *must* have at least 2 properties: *InputWorkspace* + and *OutputWorkspace*. + - Any other properties are set from the string in + *ProcessingProperties*. + - The algorithm is then run, and its OutputWorkspace is saved. + +Processing with a Python Script +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Specify a python script in the *ProcessingScript* property. + + - This can have several lines. + - Two variables have special meaning: + + - *input* is the input workspace. + - *output* is the name of the processed, output workspace. + + - Otherwise, your script can contain any legal python code including + calls to other Mantid algorithms. + - If you create temporary workspaces, you should delete them in the + script. + +Data Accumulation +~~~~~~~~~~~~~~~~~ + +- The *AccumulationMethod* property specifies what to do with each + chunk. + + - If you select 'Add', the chunks of processed data will be added + using :ref:`_algm-Plus` or :ref:`_algm-PlusMD`. + - If you select 'Replace', then the output workspace will always be + equal to the latest processed chunk. + - If you select 'Append', then the spectra from each chunk will be + appended to the output workspace. + +A Warning About Events +^^^^^^^^^^^^^^^^^^^^^^ + +Beware! If you select *PreserveEvents* and your processing keeps the +data as `EventWorkspaces `__, you may end up creating +**very large** EventWorkspaces in long runs. Most plots require +re-sorting the events, which is an operation that gets much slower as +the list gets bigger (Order of N\*log(N)). This could cause Mantid to +run very slowly or to crash due to lack of memory. + +Post-Processing Step +~~~~~~~~~~~~~~~~~~~~ + +- Optionally, you can specify some processing to perform *after* + accumulation. + + - You then need to specify the *AccumulationWorkspace* property. + +- Using either the *PostProcessingAlgorithm* or the + *PostProcessingScript* (same way as above), the + *AccumulationWorkspace* is processed into the *OutputWorkspace* + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst new file mode 100644 index 000000000000..59118c0a744e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst @@ -0,0 +1,56 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +**Parameters Note:** Note that it is possible to use both of the +optional 'spectrum' properties (i.e. a range and a list) together if so +desired. + +Load ISIS log file(s) +~~~~~~~~~~~~~~~~~~~~~ + +Assumes that a log file originates from a PC (not VMS) environment, i.e. +the log files to be loaded are assumed to have the extension .txt. Its +filename is assumed to starts with the raw data file identifier followed +by the character '\_', and a log file is assumed to have a format of two +columns, where the first column consists of data-time strings of the ISO +8601 form and the second column consists of either numbers or strings +that may contain spaces. + +Parent algorithm +~~~~~~~~~~~~~~~~ + +LoadLog is also a child algorithm of :ref:`_algm-LoadRaw`, i.e. it gets +called whenever LoadRaw is executed. + +Load SNS text log file +~~~~~~~~~~~~~~~~~~~~~~ + +If the file is determined to be a SNS text log file it should be of the +form + +| ``655747325.450625   0.000000    24.000000   26.000000   0.000000`` +| ``655747325.716250   0.296875    24.000000   26.000000   0.000000`` +| ``655747325.997500   0.593750    24.000000   26.000000   0.000000`` +| ``655747326.263125   0.906250    24.000000   26.000000   0.000000`` +| ``655747326.544375   1.093750    24.000000   26.000000   0.000000`` +| ``655747326.825625   1.406250    24.000000   26.000000   0.000000`` +| ``655747327.091250   1.703125    24.000000   26.000000   0.000000`` +| ``655747327.372500   2.000000    24.000000   26.000000   0.000000`` +| ``655747327.638125   2.203125    24.000000   26.000000   0.000000`` +| ``655747327.919375   2.500000    24.000000   26.000000   0.000000`` +| ``655747328.200625   2.796875    24.000000   26.000000   0.000000`` +| ``655747328.466250   3.093750    24.000000   26.000000   0.000000`` + +The first column is the number of seconds since January 1, 1990, then +the other columns (space delimited) are the log values. For this mode +the *name* and *units* parameters must be specified. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadLogPropertyTable-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLogPropertyTable-v1.rst new file mode 100644 index 000000000000..345d62ee2c2b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadLogPropertyTable-v1.rst @@ -0,0 +1,36 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a table workspace of the average values of log values against +the run number. + +There are special cases for: + +- beamlog\_(counts, frames, etc): last few points end up in next run's + log. Find Maximum. +- comment (separate function) +- time series, take average for t>0 (if available) + +It should: + +#. Load any file type that :ref:`_algm-Load` can handle. +#. Not crash with multiperiod data - although values will be from period + 1 +#. Handle gaps in the file structure (although this can be slow over a + network if you choose a range of 100s) +#. Load only a single spectra of the data (if the file loader supports + this). +#. Print out the list of acceptable log names if one is entered + incorrectly. +#. Use a hidden workspace for the temporary loaded workspaces, and clean + up after itself. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadLogsForSNSPulsedMagnet-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLogsForSNSPulsedMagnet-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadLogsForSNSPulsedMagnet-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst new file mode 100644 index 000000000000..6552d360256f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm loads a `MDEventWorkspace `__ that was +previously saved using the :ref:`_algm-SaveMD` algorithm to a .nxs file +format. + +If the workspace is too large to fit into memory, You can load the +workspace as a `file-backed +MDWorkspace `__ by checking the +FileBackEnd option. This will load the box structure (allowing for some +visualization with no speed penalty) but leave the events on disk until +requested. Processing file-backed MDWorkspaces is significantly slower +than in-memory workspaces due to frequency file access! + +For file-backed workspaces, the Memory option allows you to specify a +cache size, in MB, to keep events in memory before caching to disk. + +Finally, the BoxStructureOnly and MetadataOnly options are for special +situations and used by other algorithms, they should not be needed in +daily use. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMappingTable-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMappingTable-v1.rst new file mode 100644 index 000000000000..7a31b68f6cf5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMappingTable-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads the mapping table between spectra and `IDetector `__ +from a RAW file. It fills the +`SpectraToDetectorMap `__ object contained in a +`workspace `__. This algorithm will fail if the +`workspace `__ does not already point to a full +`instrument `__ `geometry `__ (which usually means +it must be run after +:ref:`_algm-LoadInstrument`/:ref:`_algm-LoadInstrumentFromRaw`). + +The association is one to many, i.e. a spectrum can have one or many +detectors contributing to it. Alternatively the same spectrum can +contribute to different spectra (for example in DAE2 (Data Aquisition +Electronic) when a spectra containing electronically focussed data is +created simultaneously with individual spectra). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMask-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMask-v1.rst new file mode 100644 index 000000000000..139d968f74fe --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMask-v1.rst @@ -0,0 +1,72 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used to load a masking file, which can be in XML +format (defined later in this page) or old-styled calibration file. + +Definition of Mask +------------------ + +| ``* If a pixel is masked, it means that the data from this pixel won't be used.  `` +| ``  In the masking workspace (i.e., ``\ ```SpecialWorkspace2D`` `__\ ``), the corresponding value is 1. `` +| ``* If a pixel is NOT masked, it means that the data from this pixel will be used.  `` +| ``  In the masking workspace (i.e., ``\ ```SpecialWorkspace2D`` `__\ ``), the corresponding value is 0.`` + +File Format +----------- + +XML File Format +^^^^^^^^^^^^^^^ + +Example 1: + +.. raw:: html + + + +| `` ``\ +| ``  ``\ +| ``   ``\ \ ``3,34-44,47``\ +| ``   ``\ \ ``bank123``\ +| ``   ``\ \ ``bank124``\ +| ``  ``\ +| `` ``\ + +ISIS File Format +^^^^^^^^^^^^^^^^ + +Example 2: + +| `` 1-3 62-64`` +| `` 65-67 126-128`` +| `` 129-131 190-192`` +| `` 193-195 254-256`` +| `` 257-259 318-320`` +| `` 321-323 382-384`` +| `` 385 387 446 448`` +| `` ... ...`` + +All the integers in file of this format are spectrum IDs to mask. Two +spectrum IDs with "-" in between indicate a continuous range of spectra +to mask. It does not matter if there is any space between integer number +and "-". There is no restriction on how the line is structured. Be +noticed that any line starting with a non-digit character, except space, +will be treated as a comment line. + +This algorithm loads masking file to a SpecialWorkspace2D/MaskWorkspace. + +Supporting + +| ``* Component ID --> Detector IDs --> Workspace Indexes`` +| ``* Detector ID --> Workspace Indexes`` +| ``* Spectrum ID --> Workspace Indexes`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMcStas-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMcStas-v1.rst new file mode 100644 index 000000000000..072086c498fb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMcStas-v1.rst @@ -0,0 +1,50 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Reads a McStas Nexus file into a Mantid WorkspaceGroup with a +user-supplied name. Data generated by McStas monitor components are +stored in workspaces of type Workspace2D or Event. + +LoadMcStas replaces LoadMcStasEventNexus. LoadMcStas can be used for +reading McStas 2.1 histogram and event data. LoadMcStasNexus can be used +for reading McStas 2.0 histogram data. + +McStas 2.1 event data are generated as follows. The McStas component +monitor\_nD must be called with the argument: options ="mantid square x +limits=[-0.2 0.2] bins=128 y limits=[-0.2 0.2] bins=128, neutron pixel +t, list all neutrons". Number of bins and limits can be chosen freely. + +To generate McStas 2.1 event data and the corresponding IDF for Mantid +run the following commands from an xterm: + +- export MCSTAS\_CFLAGS="-g -lm -O2 -DUSE\_NEXUS -lNeXus" + +- mcrun -c templateSANS.instr --format=NeXus -n0 + +- mcdisplay templateSANS.instr -n0 --format=Mantid + +- cp templateSANS.out.xml IDF.xml + +- mcrun templateSANS --format=NeXus + +The new features added to McStas has been tested on the following +platforms: + +- Linux + +- Mac - use either the Intel or gcc 4.8 compiler. Simulations using + Nexus format and event data does not work using the Clang compiler. + +For more information about McStas and its general usage for simulating +neutron scattering instruments and experiments visit the McStas homepage +http://www.mcstas.org. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMcStasNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMcStasNexus-v1.rst new file mode 100644 index 000000000000..45d70d7017a4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMcStasNexus-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Reads a McStas NeXus file into a Mantid WorkspaceGroup with a +user-supplied name. Data generated by McStas monitor components are +stored in workspaces of type `Workspace2D `__. All data +sets are numbered and nested within the WorkspaceGroup. This algorithm +is under development. To date it has been tested with the following +instrument files from the McStas 2.0 instrument suite: templateDIFF, +templateLaue, templateTAS, Reflectometer, Test\_Pol\_TripleAxis, +TestSANS and Tomography. For more information about McStas and its +general usage for simulating neutron scattering instruments and +experiments visit the McStas homepage http://www.mcstas.org. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMultipleGSS-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMultipleGSS-v1.rst new file mode 100644 index 000000000000..b8dd342c7b3e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMultipleGSS-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm loads multiple gsas files from a single directory into +mantid. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst new file mode 100644 index 000000000000..823bd2ac0edb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The Algorithm is very similar to :ref:`_algm-LoadLog` except that the +source of the data is a Muon Nexus file. + +Parent algorithm +~~~~~~~~~~~~~~~~ + +LoadMuonLog is also a child algorithm of +:ref:`_algm-LoadMuonNexus`, i.e. it gets called whenever +LoadMuonNexus is executed. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v1.rst new file mode 100644 index 000000000000..f1d542bead72 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v1.rst @@ -0,0 +1,81 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm LoadMuonNexus will read a Muon Nexus data file (original +format) and place the data into the named workspace. The file name can +be an absolute or relative path and should have the extension .nxs or +.NXS. If the file contains data for more than one period, a separate +workspace will be generated for each. After the first period the +workspace names will have "\_2", "\_3", and so on, appended to the given +workspace name. For single period data, the optional parameters can be +used to control which spectra are loaded into the workspace. If +spectrum\_min and spectrum\_max are given, then only that range to data +will be loaded. If a spectrum\_list is given than those values will be +loaded. + +- TODO get XML descriptions of Muon instruments. This data is not in + existing Muon Nexus files. +- TODO load the spectra detector mapping. This may be very simple for + Muon instruments. + +Time series data +~~~~~~~~~~~~~~~~ + +The log data in the Nexus file (NX\_LOG sections) will be loaded as +TimeSeriesProperty data within the workspace. Time is stored as seconds +from the Unix epoch. + +Errors +~~~~~~ + +The error for each histogram count is set as the square root of the +number of counts. + +Time bin data +~~~~~~~~~~~~~ + +The *corrected\_times* field of the Nexus file is used to provide time +bin data and the bin edge values are calculated from these bin centre +times. + +Multiperiod data +~~~~~~~~~~~~~~~~ + +To determine if a file contains data from more than one period the field +*switching\_states* is read from the Nexus file. If this value is +greater than one it is taken to be the number of periods, :math:`N_p` of +the data. In this case the :math:`N_s` spectra in the *histogram\_data* +field are split with :math:`N_s/N_p` assigned to each period. + +Dead times and detector grouping +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Muon Nexus v1 files might contain dead time and detector grouping +informationl. These are loaded as TableWorkspaces of the format accepted +by ApplyDeadTimeCorr and MuonGroupDetectors accordingly. These are +returned if and only if names are specified for the properties. For +multi-period data workspace groups might be returned, if information in +the Nexus files contains this information for each period. + +ChildAlgorithms used +~~~~~~~~~~~~~~~~~~~~ + +The ChildAlgorithms used by LoadMuonNexus are: + +- LoadMuonLog - this reads log information from the Nexus file and uses + it to create TimeSeriesProperty entries in the workspace. +- LoadInstrument - this algorithm looks for an XML description of the + instrument and if found reads it. +- LoadIntstrumentFromNexus - this is called if the normal + LoadInstrument fails. As the Nexus file has limited instrument data, + this only populates a few fields. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v2.rst b/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v2.rst new file mode 100644 index 000000000000..078ed70130f7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v2.rst @@ -0,0 +1,83 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm LoadMuonNexus will read a Muon Nexus data file (original +format) and place the data into the named workspace. The file name can +be an absolute or relative path and should have the extension .nxs or +.NXS. If the file contains data for more than one period, a separate +workspace will be generated for each. After the first period the +workspace names will have "\_2", "\_3", and so on, appended to the given +workspace name. For single period data, the optional parameters can be +used to control which spectra are loaded into the workspace. If +spectrum\_min and spectrum\_max are given, then only that range to data +will be loaded. If a spectrum\_list is given than those values will be +loaded. + +- TODO get XML descriptions of Muon instruments. This data is not in + existing Muon Nexus files. +- TODO load the spectra detector mapping. This may be very simple for + Muon instruments. + +Time series data +~~~~~~~~~~~~~~~~ + +The log data in the Nexus file (NX\_LOG sections) will be loaded as +TimeSeriesProperty data within the workspace. Time is stored as seconds +from the Unix epoch. + +Errors +~~~~~~ + +The error for each histogram count is set as the square root of the +number of counts. + +Time bin data +~~~~~~~~~~~~~ + +The *corrected\_times* field of the Nexus file is used to provide time +bin data and the bin edge values are calculated from these bin centre +times. + +Multiperiod data +~~~~~~~~~~~~~~~~ + +To determine if a file contains data from more than one period the field +*switching\_states* is read from the Nexus file. If this value is +greater than one it is taken to be the number of periods, :math:`N_p` of +the data. In this case the :math:`N_s` spectra in the *histogram\_data* +field are split with :math:`N_s/N_p` assigned to each period. + +ChildAlgorithms used +~~~~~~~~~~~~~~~~~~~~ + +The ChildAlgorithms used by LoadMuonNexus are: + +- LoadMuonLog - this reads log information from the Nexus file and uses + it to create TimeSeriesProperty entries in the workspace. +- LoadInstrument - this algorithm looks for an XML description of the + instrument and if found reads it. +- LoadIntstrumentFromNexus - this is called if the normal + LoadInstrument fails. As the Nexus file has limited instrument data, + this only populates a few fields. + +Previous Versions +----------------- + +Version 1 +~~~~~~~~~ + +Version 1 supports the loading version 1.0 of the muon nexus format. +This is still in active use, if the current version of LoadMuonNexus +detects that it has been asked to load a previous version muon nexus +file it will call the previous version of the algorithm to perform the +task. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadNXSPE-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNXSPE-v1.rst new file mode 100644 index 000000000000..b6731fd3578d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadNXSPE-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm to load an NXSPE file into a workspace2D. It will create a new +instrument, that can be overwritten later by the LoadInstrument +algorithm. + +**NOTE:** In the current implementation, the rendering of the NXSPE +instrument is VERY memory intensive. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst new file mode 100644 index 000000000000..67014ee0a982 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm LoadNexus will read the given Nexus file and try to +identify its type so that it can be read into a workspace. The file name +can be an absolute or relative path and should have the extension .nxs +or .nx5. Currently only Nexus Muon Version 1 files are recognised, but +this will be extended as other types are supported such as +:ref:`_algm-LoadNexusProcessed`. + +If the file contains data for more than one period, a separate workspace +will be generated for each. After the first period the workspace names +will have "\_2", "\_3", and so on, appended to the given workspace name. +For single period data, the optional parameters can be used to control +which spectra are loaded into the workspace. If spectrum\_min and +spectrum\_max are given, then only that range to data will be loaded. If +a spectrum\_list is given than those values will be loaded. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadNexusLogs-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexusLogs-v1.rst new file mode 100644 index 000000000000..6b34f9dcb808 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadNexusLogs-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadNexusLogs algorithm loads the sample logs from the given nexus +file. The logs are visible from MantidPlot if you right-click on a +workspace and select "Sample Logs...". + +If you use :ref:`_algm-LoadEventNexus` or +:ref:`_algm-LoadISISNexus`, calling this algorithm is not +necessary, since it called as a child algorithm. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadNexusMonitors-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexusMonitors-v1.rst new file mode 100644 index 000000000000..61aa52398b31 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadNexusMonitors-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm loads all monitors found in a NeXus file into a single +`Workspace2D `__. The algorithm assumes that all of the +monitors are histograms and have the same bin boundaries. **NOTE:** The +entry is assumed to be in SNS format, so the loader is currently not +generically applicable. It is also written for single entry files and +will need tweaking to handle period data where the monitors are +different. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst new file mode 100644 index 000000000000..d03cb66f9f4d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst @@ -0,0 +1,44 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm LoadNexusProcessed will read a Nexus data file created by +:ref:`_algm-SaveNexusProcessed` and place the data into the +named workspace. The file name can be an absolute or relative path and +should have the extension .nxs, .nx5 or .xml. Warning - using XML format +can be extremely slow for large data sets and generate very large files. +The optional parameters can be used to control which spectra are loaded +into the workspace (not yet implemented). If spectrum\_min and +spectrum\_max are given, then only that range to data will be loaded. + +A Mantid Nexus file may contain several workspace entries each labelled +with an integer starting at 1. By default the highest number workspace +is read, earlier ones can be accessed by setting the EntryNumber. + +If the saved data has a reference to an XML file defining instrument +geometry this will be read. + +Time series data +~~~~~~~~~~~~~~~~ + +The log data in the Nexus file (NX\_LOG sections) is loaded as +TimeSeriesProperty data within the workspace. Time is stored as seconds +from the Unix epoch. Only floating point logs are stored and loaded at +present. + +Child algorithms used +~~~~~~~~~~~~~~~~~~~~~ + +The Child Algorithms used by LoadMuonNexus are: + +- LoadInstrument - this algorithm looks for an XML description of the + instrument and if found reads it. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadPDFgetNFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadPDFgetNFile-v1.rst new file mode 100644 index 000000000000..72ecdcdb9cd4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadPDFgetNFile-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads a PDFgetN file such as that saved by PDFgetN. + +PDFgetN generates many types of files for the final result and +communication among different executables at internal steps. This +algorithm is designed to recognize and load all the ASCII based files +created by PDFgetN. + +The file types include + +| `` * .ain`` +| `` * .braw`` +| `` * .bsmo`` +| `` * .sq`` +| `` * .sqa`` +| `` * .gr`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst new file mode 100644 index 000000000000..58a566295219 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst @@ -0,0 +1,30 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm allows instrument parameters to be specified in a +separate file from the `IDF `__. The required +format for this file is identical to that used for defining parameters +through s in an IDF. Below is an example of how to define a parameter +named 'test' to be associated with a component named 'bank\_90degnew' +defined in the IDF of the HRPD instrument: + +.. code:: xml + + + + + + + + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadPreNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadPreNexus-v1.rst new file mode 100644 index 000000000000..5b1e575e2ff5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadPreNexus-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Workflow algorithm to load all of the preNeXus files. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadPreNexusMonitors-v1.rst b/Code/Mantid/docs/source/algorithms/LoadPreNexusMonitors-v1.rst new file mode 100644 index 000000000000..3466711a0080 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadPreNexusMonitors-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +It reads that filenames of the monitors from the runinfo file. It will +only work with histogram monitors and assumes that all monitors are on +the same time axis. It also assumes that the beam monitor files are in +the same directory as the runinfo.xml file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadQKK-v1.rst b/Code/Mantid/docs/source/algorithms/LoadQKK-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadQKK-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadRKH-v1.rst b/Code/Mantid/docs/source/algorithms/LoadRKH-v1.rst new file mode 100644 index 000000000000..e90a82b8f76d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadRKH-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads the given file in the RKH text format, which can be a file with +three columns of numbers. If the FirstColumnValue is a recognised +`Mantid unit `__ the workspace is created with just one +spectrum. Alteratively if FirstColumnValue is set to 'SpectrumNumber' +then the workspace can have many spectra with the spectrum ID's equal to +the first column in the file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst b/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst new file mode 100644 index 000000000000..35dd2db394a1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst @@ -0,0 +1,70 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadRaw algorithm stores data from the `RAW `__ file in a +`Workspace2D `__, which will naturally contain histogram +data with each spectrum going into a separate histogram. The time bin +boundaries (X values) will be common to all histograms and will have +their `units `__ set to time-of-flight. The Y values will contain +the counts and will be unit-less (i.e. no division by bin width or +normalisation of any kind). The errors, currently assumed Gaussian, will +be set to be the square root of the number of counts in the bin. + +Optional properties +~~~~~~~~~~~~~~~~~~~ + +If only a portion of the data in the `RAW `__ file is +required, then the optional 'spectrum' properties can be set before +execution of the algorithm. Prior to loading of the data the values +provided are checked and the algorithm will fail if they are found to be +outside the limits of the dataset. + +Multiperiod data +~~~~~~~~~~~~~~~~ + +If the RAW file contains multiple periods of data this will be detected +and the different periods will be output as separate workspaces, which +after the first one will have the period number appended (e.g. +OutputWorkspace\_period). Each workspace will share the same +`Instrument `__, SpectraToDetectorMap and +`Sample `__ objects. If the optional 'spectrum' properties are +set for a multiperiod dataset, then they will ignored. + +Subalgorithms used +~~~~~~~~~~~~~~~~~~ + +LoadRaw runs the following algorithms as child algorithms to populate +aspects of the output `Workspace `__: + +- :ref:`_algm-LoadInstrument` - Looks for an instrument + definition file named XXX\_Definition.xml, where XXX is the 3 letter + instrument prefix on the RAW filename, in the directory specified by + the "instrumentDefinition.directory" property given in the config + file (or, if not provided, in the relative path ../Instrument/). If + the instrument definition file is not found then the + :ref:`_algm-LoadInstrumentFromRaw` algorithm will be + run instead. +- :ref:`_algm-LoadMappingTable` - To build up the mapping + between the spectrum numbers and the Detectors of the attached + `Instrument `__. +- :ref:`_algm-LoadLog` - Will look for any log files in the same + directory as the RAW file and load their data into the workspace's + `Sample `__ object. + +Previous Versions +----------------- + +LoadRaw version 1 and 2 are no longer available in Mantid. Version 3 has +been validated and in active use for several years, if you really need a +previous version of this algorithm you will need to use an earlier +version of Mantid. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadRawBin0-v1.rst b/Code/Mantid/docs/source/algorithms/LoadRawBin0-v1.rst new file mode 100644 index 000000000000..e345c3ebb2ae --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadRawBin0-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadRawBin0 algorithm stores bin 0 data from the selected +`RAW `__ file in a `Workspace2D `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadRawSpectrum0-v1.rst b/Code/Mantid/docs/source/algorithms/LoadRawSpectrum0-v1.rst new file mode 100644 index 000000000000..a11c7d645cff --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadRawSpectrum0-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadRawSpectrum0 algorithm stores spectrum zero data from the +selected `RAW `__ file in a `Workspace2D `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadReflTBL-v1.rst b/Code/Mantid/docs/source/algorithms/LoadReflTBL-v1.rst new file mode 100644 index 000000000000..d26a5169ce35 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadReflTBL-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +LoadReflTBl is loads ascii files in Reflectometry TBL format into a +tableworkspace. Format accepted is strict to only allow 17 columns of +data. + +The 17 columns are split up into rows of 8, so a single row in the TBL +file would be split into 3 colums like so: (Where Z is the newly created +stitch group index) A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q + +becomes + +A, B, C, D, E, P, Q, Z F, G, H, I, J, P, Q, Z K, L, M, N, O, P, Q, Z + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSINQ-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSINQ-v1.rst new file mode 100644 index 000000000000..11f3d0d548bc --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSINQ-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Description +----------- + +LoadSINQ loads SINQ NeXus files. The algorithm calculates the file name +from the instrument, year and numor and tries to locate the file. Both +at SINQ standard paths as well as the data directories configured for +Mantid. Then it calls LoadSINQFile for the located data file. + +The Mantid standard Load algorithm selects based on file extensions. The +file extensions used at SINQ, mainly .hdf and .h5, were already taken. +Thus the need for a separate loader. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSINQFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSINQFile-v1.rst new file mode 100644 index 000000000000..6f47500e16d3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSINQFile-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +LoadSINQFile is a wrapper algorithm around LoadFlexiNexus. It locates a +suitable dictionary file for the instrument in question and then goes +away to call LoadFlexiNexus with the right arguments. It also performs +any other magic which might be required to get the data in the right +shape for further processing in Mantid. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSINQFocus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSINQFocus-v1.rst new file mode 100644 index 000000000000..27273535d56b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSINQFocus-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads a SINQ (PSI) nexus file into a `Workspace2D `__ with +the given name. + +To date this algorithm only supports: FOCUS + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSNSspec-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSNSspec-v1.rst new file mode 100644 index 000000000000..fa214d965026 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSNSspec-v1.rst @@ -0,0 +1,76 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadSNSspec algorithm reads in spectra data from a text file and +stores it in a Workspace2D as data points. The data in the file must be +organized by set of 3 columns (separated by any number of spaces). The +first column has to be the X values, the second column the Y values and +the third column the error values. + +Here are two examples of such text files that can be loaded with +LoadSNSspec: + +*Example 1:* + +:: + + #F norm: REF_M_2000.nxs + #F data: REF_M_2001.nxs + #E 1234567.80 + ... + #C SCL Version - 1.4.1 + + #S 1 Spectrum ID ('bank1',(0,127)) + #L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A) + 0.0 0.0 0.0 + 1.0 5.0 2.0 + 2.0 10.0 3.0 + 3.0 15.0 2.0 + 4.0 20.0 2.5 + 5.0 25.0 3.2 + 6.0 30.0 4.2 + +This will create a Workspace2D with 1 spectrum. + +*Example 2:* + +:: + + #F norm: REF_M_2000.nxs + #F data: REF_M_2001.nxs + #E 1234567.80 + ... + #C SCL Version - 1.4.1 + + #S 1 Spectrum ID ('bank1',(0,127)) + #L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A) + 0.0 0.0 0.0 + 1.0 5.0 2.0 + 2.0 10.0 3.0 + 3.0 15.0 4.0 + + #S 1 Spectrum ID ('bank1',(1,127)) + #L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A) + 0.0 10.0 0.0 + 1.0 15.0 2.0 + 2.0 110.0 3.0 + 3.0 115.0 4.0 + + #S 1 Spectrum ID ('bank1',(3,127)) + #L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A) + 0.0 20.0 0.0 + 1.0 25.0 2.0 + 2.0 210.0 3.0 + 3.0 215.0 4.0 + +This text file will create a Workspace2D with 3 spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSPE-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSPE-v1.rst new file mode 100644 index 000000000000..273fc39baedd --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSPE-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads the file given into a `Workspace2D `__ with the given +name. The file should be in the SPE format, which is described +`here `__. The workspace will have X units of +`Energy transfer `__. The other axis will be binned and +have units of either `Momentum transfer / Q `__ or +degrees, depending on the label in the input file. The workspace will be +flagged as a distribution. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst new file mode 100644 index 000000000000..da017999781a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst @@ -0,0 +1,164 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm takes every pixel defined in the SQW horace file and +converts it into an event. + +Only top level binning information is currently taken from DND/Image +data. All DND image information is currently ignored and the resulting +MDEvent workspace is in the units of :math:`Q^{-1}` (SQW dimensions, +recalculated to the Crystal? frame, without HKL transformation). + +U matrix is set to unity but the B-matrix is read from the SQW and +attached to the workspace which may confuse the algorithms which work +with `MDEventWorkspace `__ produced by Mantid +algorithms. + +Notes on Horace SQW files +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Sqw objects comes in two flavours: + +- sqw-type + +- dnd-type + +The former has the four main fields fully filled. The fields description +is given below. The latter has: + +- **main\_header**, **header**, **detpar** as empty structures (0x0 +struct array with no fields) + +- data.urange and data.pix do not exist. + +The dnd-type is created from d0d, d1d,... objects for most algorithms so +as to use private methods of sqw objects. + +DND-type object can not be currently read or understood by Mantid. + +Structure of sqw class with remarks on what is currently used and what is ignored +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +String started by: + +| ``% -- ignored`` +| ``* -- used`` + +| `` ``\ **``Main_header``**\ ``:`` +| `` %   main_headerfilename   Name of sqw file that is being read, excluding path`` +| `` %   main_headerfilepath   Path to sqw file that is being read, including terminating file separator`` +| `` %   main_headertitle      Title of sqw data structure`` +| `` %   main_headernfiles     Number of spe files that contribute to the sqw object`` + +| `` ``\ **``Header``**\ ``: (scalar structure, or cellarray of scalar structures if more than one spe file)`` +| `` %   header{i}.filename   Name of sqw file excluding path`` +| `` %   header{i}.filepath   Path to sqw file including terminating file separator`` +| `` %   header{i}.efix       Fixed energy (ei or ef depending on emode)`` +| `` %   header{i}.emode      Emode=1 direct geometry, =2 indirect geometry, =0 if diffraction ''' Only emode 1 have ever been tried '''`` +| `` %   header{i}.alatt      Lattice parameters (Angstroms)`` +| `` %   header{i}.angdeg     Lattice angles (deg)`` +| `` %   header{i}.cu         First vector defining scattering plane (r.l.u.)`` +| `` %   header{i}.cv         Second vector defining scattering plane (r.l.u.)`` +| `` %   header{i}.psi        Orientation angle (rad)`` +| `` %   header{i}.omega      --|`` +| `` %   header{i}.dpsi         |  Crystal misorientation description (rad)`` +| `` %   header{i}.gl           |  (See notes elsewhere e.g. Tobyfit manual`` +| `` %   header{i}.gs         --|`` +| `` %   header{i}.en         Energy bin boundaries (meV) in the input spe file [column vector]`` +| `` %   header{i}.uoffset    Offset of origin of pixel projection axes in r.l.u. and energy i.e. [h; k; l; en] [column vector]`` +| `` %   header{i}.u_to_rlu   Matrix (4x4) of pixel projection axes in hkle representation`` +| `` %                      u(:,1) first vector - u(1:3,1) r.l.u., u(4,1) energy etc.`` +| `` %   header{i}.ulen       Length of pixel projection axes vectors in Ang^-1 or meV [row vector]`` +| `` %   header{i}.ulabel     Labels of the pixel projection axes [1x4 cell array of character strings]`` + +The pixel projection axes, u1, u2, u3 are the orthonormal vectors of the +crystal Cartesian coordinate frame i.e. u1 \|\| a\*, u2 in plane of a\*, +and b\*, and u3 \|\| a\* x b\*. They form the coordinate frame in which +the pixel coordinates are stored in data.pix. The pixel projection axes +must necessarily be identical for all contributing spe files. + +| `` ``\ **``Detpar``**\ ``:`` +| `` %   detpar.filename    Name of file excluding path`` +| `` %   detpar.filepath    Path to file including terminating file separator`` +| `` %   detpar.group       Row vector of detector group number`` +| `` %   detpar.x2          Row vector of secondary flightpaths (m)`` +| `` %   detpar.phi         Row vector of scattering angles (deg)`` +| `` %   detpar.azim        Row vector of azimuthal angles (deg)`` +| `` %                  (West bank=0 deg, North bank=90 deg etc.)`` +| `` %   detpar.width       Row vector of detector widths (m)`` +| `` %   detpar.height      Row vector of detector heights (m)`` + +| `` ``\ **``Data``**\ ``:`` +| `` %   data.filename   Name of sqw file that is being read, excluding path`` +| `` %   data.filepath   Path to sqw file that is being read, including terminating file separator`` +| `` %   data.title      Title of sqw data structure`` +| `` *   data.alatt      Lattice parameters for data field (Ang^-1)`` +| `` *   data.angdeg     Lattice angles for data field (degrees)`` +| `` %   data.uoffset    Offset of origin of projection axes in r.l.u. and energy ie. [h; k; l; en] [column vector]`` +| `` %   data.u_to_rlu   Matrix (4x4) of projection axes in hkle representation`` +| `` %                      u(:,1) first vector - u(1:3,1) r.l.u., u(4,1) energy etc.`` +| `` %   data.ulen       Length of projection axes vectors in Ang^-1 or meV [row vector]`` +| `` %   data.ulabel     Labels of the projection axes [1x4 cell array of character strings]`` +| `` %   data.iax        Index of integration axes into the projection axes  [row vector]`` +| `` %                  Always in increasing numerical order`` +| `` %                       e.g. if data is 2D, data.iax=[1,3] means summation has been performed along u1 and u3 axes`` +| `` %   data.iint       Integration range along each of the integration axes. [iint(2,length(iax))]`` +| `` %                       e.g. in 2D case above, is the matrix vector [u1_lo, u3_lo; u1_hi, u3_hi]`` +| `` %   data.pax        Index of plot axes into the projection axes  [row vector]`` +| `` %                  Always in increasing numerical order`` +| `` %                       e.g. if data is 3D, data.pax=[1,2,4] means u1, u2, u4 axes are x,y,z in any plotting`` +| `` %                                       2D, data.pax=[2,4]     "   u2, u4,    axes are x,y   in any plotting`` +| `` %   data.p          Call array containing bin boundaries along the plot axes [column vectors]`` +| `` %                       i.e. row cell array {data.p{1}, data.p{2} ...} (for as many axes as length of data.pax)`` +| `` %   data.dax        Index into data.pax of the axes for display purposes. For example we may have `` +| `` %                  data.pax=[1,3,4] and data.dax=[3,1,2] This means that the first display axis is data.pax(3)=4,`` +| `` %                  the second is data.pax(1)=1, the third is data.pax(2)=3. The reason for data.dax is to allow`` +| `` %                  the display axes to be permuted but without the contents of the fields p, s,..pix needing to`` +| `` %                  be reordered [row vector]`` +| `` -----> Large data fields, data for MD image`` +| `` %   data.s          Cumulative signal.  [size(data.s)=(length(data.p1)-1, length(data.p2)-1, ...)]`` +| `` %   data.e          Cumulative variance [size(data.e)=(length(data.p1)-1, length(data.p2)-1, ...)]`` +| `` %   data.npix       No. contributing pixels to each bin of the plot axes.`` +| `` %                  [size(data.pix)=(length(data.p1)-1, length(data.p2)-1, ...)]`` +| `` -----> `` +| `` *   data.urange     True range of the data along each axis [urange(2,4)] `` +| `` ----> Pixels or events data `` +| `` *   data.pix        Array containing data for each pixel:`` +| `` *                  If npixtot=sum(npix), then pix(9,npixtot) contains:`` +| `` *                   u1      -|`` +| `` *                   u2       |  Coordinates of pixel in the pixel projection axes`` +| `` *                   u3       |`` +| `` *                   u4      -|`` +| `` *                   irun        Run index in the header block from which pixel came`` +| `` *                   idet        Detector group number in the detector listing for the pixel`` +| `` *                   ien         Energy bin number for the pixel in the array in the (irun)th header`` +| `` *                   signal      Signal array`` +| `` *                   err         Error array (variance i.e. error bar squared)`` + +data.s is normalized by the number of pixels, as is the variance data.e. +For those elements where data.npix==0, data.s=0 and data.e=0 + +General notes about SQW file assumptions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Parts of the code were written with the idea of generalising +functionality at a later stage. However, we can now assume that: + +| `` - the lattice parameters are all the same for all contributing spe files`` +| `` - the energy offset is zero in cuts`` +| `` Requires that all sqw files that are to be combined have`` +| `` (1)   each been created from only one spe file`` +| `` (2)   the same lattice parameters and pixel projection axes as held in the header block`` +| `` (3)   the same projection axes and offsets, as held in the data block`` +| `` (4)   the same plot and integration axes, with same bins and integration ranges`` +| `` The display axes will be taken from the first sqw object in the list to be combined   ``` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSampleDetailsFromRaw-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSampleDetailsFromRaw-v1.rst new file mode 100644 index 000000000000..4ffa408b901d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSampleDetailsFromRaw-v1.rst @@ -0,0 +1,45 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The SPB struct within an ISIS raw file defines 4 fields that describe +the basic geometry of the sample: + +- e\_geom; +- e\_thick; +- e\_height; +- e\_width. + +The meaning of the last three are dependent on the flag value *e\_geom*, +which defines the sample shape as one of 4 basic shapes: + +- 1 = cylinder: radius = e\_thick = e\_width, height = e\_height; +- 2 = flat plate: as named; +- 3 = disc: radius = e\_width, thickness = e\_thick; +- 4 = single crystal. + +The values are stored on the +`sample `__ +object. + +Access in Python +---------------- + +To access these values in Python: + +| ``sampleInfo = wksp.getSampleInfo()`` +| ``print sampleInfo.getGeometryFlag()`` +| ``print sampleInfo.getThickness()`` +| ``print sampleInfo.getHeight()`` +| ``print sampleInfo.getWidth()`` + +where wksp is a handle to a Mantid workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSassena-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSassena-v1.rst new file mode 100644 index 000000000000..bdd66208a94e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSassena-v1.rst @@ -0,0 +1,50 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The Sassena application `1 `__ generates +intermediate scattering factors from molecular dynamics trajectories. +This algorithm reads Sassena output and stores all data in workspaces of +type `Workspace2D `__, grouped under a single +`WorkspaceGroup `__. + +Sassena ouput files are in HDF5 format +`2 `__, and can be made up of the +following datasets: *qvectors*, *fq*, *fq0*, *fq2*, and *fqt* + +Time units: Current Sassena version does not specify the time unit, thus +the user is required to enter the time in between consecutive data +points. Enter the number of picoseconds separating consecutive +datapoints. + +The workspace for **qvectors**: + +- X-values for the origin of the vector, default: (0,0,0) +- Y-values for the tip of the vector +- one spectra with three bins for each q-vector, one bin per vector + component. If orientational average was performed by Sassena, then + only the first component is non-zero. + +The workspaces for **fq**, **fq0**, and **fq2** contains two spectra: + +- First spectrum is the real part, second spectrum is the imaginary + part +- X-values contain the moduli of the q vector +- Y-values contain the structure factors + +Dataset **fqt** is split into two workspaces, one for the real part and +the other for the imaginary part. The structure of these two workspaces +is the same: + +- X-values contain the time variable +- Y-values contain the structure factors +- one spectra for each q-vector + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSpec-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSpec-v1.rst new file mode 100644 index 000000000000..69fc7c308deb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSpec-v1.rst @@ -0,0 +1,76 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The LoadSpec algorithm reads in spectra data from a text file and stores +it in a Workspace2D as data points. The data in the file must be +organized by set of 3 columns (separated by any number of spaces). The +first column has to be the X values, the second column the Y values and +the third column the error values. + +Here are two examples of such text files that can be loaded with +LoadSpec: + +*Example 1:* + +:: + + #F norm: REF_M_2000.nxs + #F data: REF_M_2001.nxs + #E 1234567.80 + ... + #C SCL Version - 1.4.1 + + #S 1 Spectrum ID ('bank1',(0,127)) + #L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A) + 0.0 0.0 0.0 + 1.0 5.0 2.0 + 2.0 10.0 3.0 + 3.0 15.0 2.0 + 4.0 20.0 2.5 + 5.0 25.0 3.2 + 6.0 30.0 4.2 + +This will create a Workspace2D with 1 spectrum. + +*Example 2:* + +:: + + #F norm: REF_M_2000.nxs + #F data: REF_M_2001.nxs + #E 1234567.80 + ... + #C SCL Version - 1.4.1 + + #S 1 Spectrum ID ('bank1',(0,127)) + #L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A) + 0.0 0.0 0.0 + 1.0 5.0 2.0 + 2.0 10.0 3.0 + 3.0 15.0 4.0 + + #S 1 Spectrum ID ('bank1',(1,127)) + #L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A) + 0.0 10.0 0.0 + 1.0 15.0 2.0 + 2.0 110.0 3.0 + 3.0 115.0 4.0 + + #S 1 Spectrum ID ('bank1',(3,127)) + #L Lambda_T(Angstroms) Intensity(Counts/A) Sigma(Counts/A) + 0.0 20.0 0.0 + 1.0 25.0 2.0 + 2.0 210.0 3.0 + 3.0 215.0 4.0 + +This text file will create a Workspace2D with 3 spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadSpice2D-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSpice2D-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadSpice2D-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadTOFRawNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadTOFRawNexus-v1.rst new file mode 100644 index 000000000000..2dd2e346f612 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadTOFRawNexus-v1.rst @@ -0,0 +1,32 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm loads a NeXus file that conforms to the TOFRaw format and +stores it in a 2D workspace. The TOFRaw format is used at SNS and +consists of a histogram representation with common bin boundaries. + +Some NXS files have multiple data fields giving binning in other units +(e.g. d-spacing or momentum). You can choose which binning to use by +entering the **Signal** parameter. The default value is 1, which +normally will correspond to TOF. The "Y" units will still be in +*counts*. + +The typical meanings of Signal are as follows (note that these may +change!): + +- Signal 1: Time of flight. The data field containing the bin + boundaries is *time\_of\_flight* +- Signal 5: q. The data field containing the bin boundaries is + *momentum\_transfer* +- Signal 6: d-spacing. The data field containing the bin boundaries is + *dspacing* + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadVesuvio-v1.rst b/Code/Mantid/docs/source/algorithms/LoadVesuvio-v1.rst new file mode 100644 index 000000000000..b9464cc30c65 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LoadVesuvio-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +A Workflow algorithm to load the data from the VESUVIO instrument at +ISIS. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Logarithm-v1.rst b/Code/Mantid/docs/source/algorithms/Logarithm-v1.rst new file mode 100644 index 000000000000..74c3f05e9612 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Logarithm-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +*Logarithm* function calculates the logarithm of the data, held in a +workspace and tries to estimate the errors of this data, by calculating +logarithmic transformation of the errors. The errors are assumed to be +small and Gaussian so they are calculated on the basis of Tailor +decomposition e.g. if :math:`S` and :math:`Err` are the signal and +errors for the initial signal, the logarithm would provide +:math:`S_{ln}=ln(S)` and :math:`Err_{ln}=Err/S` accordingly. If the base +10 logarithm is used the errors are calculated as +:math:`Err_{log10}=0.434Err/S` + +Some values in a workspace can normally be equal to zero. Logarithm is +not calculated for values which are less or equal to 0, but the value of +*Filler* is used instead. The errors for such cells set to zeros + +When acting on an event workspace, the output will be a Workspace2D, +with the default binning from the original workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LogarithmMD-v1.rst b/Code/Mantid/docs/source/algorithms/LogarithmMD-v1.rst new file mode 100644 index 000000000000..6ed18bc7304c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/LogarithmMD-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This executes the natural logarithm operation on a MDHistoWorkspace. + +The signal :math:`a` becomes :math:`f = log(a)` + +The error :math:`da` becomes :math:`df^2 = a^2 / da^2` + +This algorithm cannot be run on a +`MDEventWorkspace `__. Its equivalent on a +`MatrixWorkspace `__ is called +:ref:`_algm-Logarithm`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Lorentzian1D-v1.rst b/Code/Mantid/docs/source/algorithms/Lorentzian1D-v1.rst new file mode 100644 index 000000000000..3152104e01c0 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Lorentzian1D-v1.rst @@ -0,0 +1,39 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Takes a histogram in a 2D workspace and fit it to a Lorentzian function, +i.e. to the function: + +.. math:: \mbox{BG0}+\mbox{BG1}*x+\mbox{Height}* \left( \frac{\mbox{HWHM}^2}{(x-\mbox{PeakCentre})^2+\mbox{HWHM}^2} \right) + +where + +- BG0 - constant background value +- BG1 - constant background value +- Height - height of peak (at maximum) +- PeakCentre - centre of peak +- HWHM - half-width at half-maximum + +Note that the FWHM (Full Width Half Maximum) equals two times HWHM, and +the integral over the Lorentzian equals +:math:`\mbox{Height} * \pi * \mbox{HWHM}` (ignoring the linear +background). In the literature you may also often see the notation +:math:`\gamma` = HWHM. + +The figure below illustrate this symmetric peakshape function fitted to +a TOF peak: + +.. figure:: /images/LorentzianWithConstBackground.png + :alt: LorentzianWithConstBackground.png + + LorentzianWithConstBackground.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MDHistoToWorkspace2D-v1.rst b/Code/Mantid/docs/source/algorithms/MDHistoToWorkspace2D-v1.rst new file mode 100644 index 000000000000..121113f45560 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MDHistoToWorkspace2D-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +MDHistoToWorkspace2D flattens a MDHistoWorkspace into a Workspace2D. It +can process MDHistoWorkspaces of any dimensionality. The last dimension +of the MDHistoWorkspace becomes the spectra length. Flattening happens +such that the first dimension of the MDHistoWorkspace is the slowest +varying, the second the second slowest varying and so on. + +This tool is useful as many algorithms in Mantid only apply to +Workspace2D. After conversion with MDHistoToWorkspace2D such algorithms +can also be applied to MD data. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskAngle-v1.rst b/Code/Mantid/docs/source/algorithms/MaskAngle-v1.rst new file mode 100644 index 000000000000..b94304eadf8b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskAngle-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm to mask detectors with scattering angles in a given interval +(in degrees) By default MinAngle=0, MaxAngle=180, so if no keywords are +set, all detectors are going to be masked Returns a list of detectors +that were masked + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskBTP-v1.rst b/Code/Mantid/docs/source/algorithms/MaskBTP-v1.rst new file mode 100644 index 000000000000..8c3a5a413b72 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskBTP-v1.rst @@ -0,0 +1,34 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm to mask detectors in particular banks, tube, or pixels. It +applies to the following instruments only: ARCS, CNCS, HYSPEC, NOMAD, +POWGEN, SEQUOIA, SNAP, TOPAZ. For instruments with rectangular position +sensitive detectors (POWGEN, SNAP, TOPAZ), the tube is corresponding to +the x coordinate, and pixel to the y coordinate. For example, on SNAP +Bank="1", Tube="3" corresponds to 'SNAP/East/Column1/bank1/bank1(x=3)', +and Bank="1", Tube="3", Pixel="5" is +'SNAP/East/Column1/bank1/bank1(x=3)/bank1(3,5)'. + +If one of Bank, Tube, Pixel entries is left blank, it will apply to all +elements of that type. For example: + +MaskBTP(w,Bank = "1") will completely mask all tubes and pixels in bank +1. MaskBTP(w,Pixel = "1,2") will mask all pixels 1 and 2, in all tubes, +in all banks. + +The algorithm allows ranged inputs: Pixel = "1-8,121-128" is equivalent +to Pixel = "1,2,3,4,5,6,7,8,121,122,123,124,125,126,127,128" + +'''Note: '''Either the input workspace or the instrument must be set. If +the workspace is set, the instrument is ignored. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst b/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst new file mode 100644 index 000000000000..edf014eefb6a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst @@ -0,0 +1,47 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Masks bins in a workspace. Masked bins should properly be regarded as +having been completely removed from the workspace. Bins falling within +the range given (even partially) are masked, i.e. their data and error +values are set to zero and the bin is added to the list of masked bins. +This range is masked for all spectra in the workspace (though the +workspace does not have to have common X values in all spectra). + +At present, although the zeroing of data will obviously be 'seen' by all +downstream algorithms. Only +:ref:`_algm-DiffractionFocussing` (version 2) and +:ref:`_algm-Q1D` have been modified to take account of masking. Several +algorithms (e.g. :ref:`_algm-Rebin`, :ref:`_algm-CropWorkspace`) +have been modified to properly propagate the masking. + +Related Algorithms +------------------ + +RemoveBins +~~~~~~~~~~ + +:ref:`_algm-RemoveBins` can work in several ways, if the bins are at +the edges of the workspace they will be removed, and that will in many +ways act like Masking the bins. If the bins are in the middle of the +workspace then the effect depends on the type of interpolation, but +importantly these bins will continue to influence future algorithms as +opposed to masked bins. For example, with no interpolation +:ref:`_algm-RemoveBins` sets the bin values to 0. This 0 values will +be included in the summing performed in DiffractionFocussing, pushing +down the values in that region. MaskBins is more clever. While if you +look at the data, it will appear that it has simply set the values to 0. +It has also set a series of flags inside that mark those bins to not be +included in further claculations. This means that when you Focus the +data these values are simply missed out of the summing that is +performed. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst b/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst new file mode 100644 index 000000000000..335f7daa95e5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Masks bins in a workspace. The user specified masking parameters, +including spectra, xmin and xmax are given via a TableWorkspace. + +It calls algorithm MaskBins underneath. + +Related Algorithms +------------------ + +MaskBins +~~~~~~~~ + +:ref:`_algm-MaskBins` masks bins in a workspace. Masked bins should +properly be regarded as having been completely removed from the +workspace. Bins falling within the range given (even partially) are +masked, i.e. their data and error values are set to zero and the bin is +added to the list of masked bins. This range is masked for all spectra +in the workspace (though the workspace does not have to have common X +values in all spectra). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst new file mode 100644 index 000000000000..ab4096a56ce7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst @@ -0,0 +1,103 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm will flag the detectors listed as +masked(\ `IDetector `__ isMasked() method) and will zero the +data in the spectra related to those detectors. + +All but the first property are optional and at least one of the must be +set. If several are set, the first will be used. + +The set of detectors to be masked can be given as a list of either +spectrum numbers, detector IDs or workspace indices. The list should be +set against the appropriate property. + +Mask Detectors According To Instrument +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the input MaskedWorkspace is not a SpecialWorkspace2D object, this +algorithm will check every detectors in input MaskedWorkspace's +Instrument. If the detector is masked, then the corresponding detector +will be masked in Workspace. + +Mask Detectors According to Masking Workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the input MaskedWorkspace is a `MaskWorkspace `__ +object, i.e., masking workspace, then the algorithm will mask +Workspace's detector according to the histogram data of the +SpecialWorkspace2D object + +Definition of Mask +~~~~~~~~~~~~~~~~~~ + +- If a pixel is masked, it means that the data from this pixel won't be + used. In the masking workspace (i.e., + `SpecialWorkspace2D `__), the corresponding value + is 1. +- If a pixel is NOT masked, it means that the data from this pixel will + be used. In the masking workspace (i.e., + `SpecialWorkspace2D `__), the corresponding value + is 0. + +About Input Parameters +~~~~~~~~~~~~~~~~~~~~~~ + +:ref:`_algm-MaskDetectors` supports various format of input to +mask detectors, including + +- Workspace indices +- Spectra +- Detectors +- `MaskWorkspace `__ +- General `MatrixWorkspace `__ other than + `MaskWorkspace `__ (In this case, the mask will be + extracted from this workspace) + +Rules +^^^^^ + +Here are the rules for input information for masking + +| ``1. At least one of the inputs must be specified.   `` +| ``2. Workspace indices and Spectra cannot be given at the same time. `` +| ``3. ``\ ```MaskWorkspace`` `__\ `` and general ``\ ```MatrixWorkspace`` `__\ `` cannot be given at the same time. `` +| ``4. When a general ``\ ```MatrixWorkspace`` `__\ `` is specified, then all detectors in a spectrum are treated as masked if the effective detector of that spectrum is masked. `` +| ``5. The masks specified from `` +| ``  a) workspace indices/spectra`` +| ``  b) detectors`` +| ``  c) ``\ ```MaskWorkspace`` `__\ ``/general ``\ ```MatrixWorkspace`` `__ +| ``  will be combined by the ``\ *``plus``*\ `` operation.`` + +Operations Involved in Masking +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There are 2 operations to mask a detector and thus spectrum related + +| ``1. Set the detector in workspace's instrument's ``\ *``parameter`` +``map``*\ `` to ``\ *``masked``*\ ``;`` +| ``2. Clear the data associated with the spectrum with detectors that are masked;`` + +Implementation +~~~~~~~~~~~~~~ + +In the plan, the workflow to mask detectors should be + +| ``1. Convert input detectors, workspace indices or spectra, and general ``\ ```MatrixWorkspace`` `__\ `` to a ``\ ```MaskWorkspace`` `__\ ``;`` +| ``2. Mask detectors according to ``\ ```MaskWorkspace`` `__\ ``;`` +| ``3. Clear data on all spectra, which have at least one detector that is masked.`` + +Concern +~~~~~~~ + +- Speed! + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskDetectorsIf-v1.rst b/Code/Mantid/docs/source/algorithms/MaskDetectorsIf-v1.rst new file mode 100644 index 000000000000..1ea448e0dae0 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskDetectorsIf-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Iterates over the input workspace evaluating the test for each single +value spectrum. If the detectors should be masked it deselects all of +the contributing detectors in the output calfile. All other aspects of +the InputCalFile are copied over to the OutputCalFile. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst b/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst new file mode 100644 index 000000000000..ee790963b387 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Masks detectors that are contained within a user defined 3 dimensional +shape within the instrument. + +The algorithm places the user defined geometric shape within the virtual +instrument and masks any detector detectors that in contained within it. +A detector is considered to be contained it its central location point +is contained within the shape. + +ChildAlgorithms used +~~~~~~~~~~~~~~~~~~~~ + +MaskDetectorsInShape runs the following algorithms as child algorithms: + +- :ref:`_algm-FindDetectorsInShape` - To determine the + detectors that are contained in the user defined shape. +- :ref:`_algm-MaskDetectors` - To mask the detectors found. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskMD-v1.rst b/Code/Mantid/docs/source/algorithms/MaskMD-v1.rst new file mode 100644 index 000000000000..b38159bc810a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskMD-v1.rst @@ -0,0 +1,43 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm masks a `MDWorkspace `__ in-situ. + +This algorithm will first clear-out any existing masking and then apply +the new masking. + +Simple Example +-------------- + +Mask as single box region in a 3D workspace with Dimension ids X, Y, Z. +Suppose that the dimensions exented from -2 to 2 in each dimension and +you want to mask the central region. + +``MaskMD("Workspace"=workspace,Dimensions="X,Y,Z",Exents="-1,1,-1,1,-1,1")`` + +Complex Example +--------------- + +Mask two box regions in a 3D workspace, where the input workspace is the +same as above. Here we attempt to mask two opposite corners of the 3D +workspace. + +``MaskMD("Workspace"=workspace,Dimensions="X,Y,Z,X,Y,Z",Extents="-2,-1,-2,-1,-2,-1,+1,+2,+1,+2,+1,+2")`` + +In this example, because the dimensionality is 3 and because 6 dimension +ids have been provided, the algorithm treats {X,Y,Z} as one masking +region and the following {X,Y,Z} as another. Likewise of the 12, Extents +inputs provided, the first 6 entries {-2,-1,-2,-1,-2,-1} are min, max +values for the first {X,Y,Z} and the latter 6 {+1,+2,+1,+2,+1,+2} relate +to the last {X,Y,Z}. Applying this maksing will result in two completely +separate areas masked in a single call to the algorithm. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskPeaksWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/MaskPeaksWorkspace-v1.rst new file mode 100644 index 000000000000..5e97f56e7ad1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskPeaksWorkspace-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Mask pixels in an Workspace close to peak positions from a +PeaksWorkspace. Peaks could come from ISAW diamond stripping routine for +SNAP data. Only works on Workspaces and for instruments with +RectangularDetector's. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskWorkspaceToCalFile-v1.rst b/Code/Mantid/docs/source/algorithms/MaskWorkspaceToCalFile-v1.rst new file mode 100644 index 000000000000..bf41aea1de92 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaskWorkspaceToCalFile-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithms writes a cal file with the selection column set to the +masking status of the workspaces provided. The offsets and grouping +details of the cal file are not completed, so you would normally use +MargeCalFiles afterwards to import these values from another file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Max-v1.rst b/Code/Mantid/docs/source/algorithms/Max-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Max-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaxMin-v1.rst b/Code/Mantid/docs/source/algorithms/MaxMin-v1.rst new file mode 100644 index 000000000000..3bdb88daac72 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MaxMin-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm creates a new 2D workspace containing the first maxima +(minima) for each spectrum, as well as their X boundaries and error. +This is used in particular for single crystal as a quick way to find +strong peaks. By default, the algorithm returns the maxima. + +The :ref:`_algm-Max` and :ref:`_algm-Min` algorithms are just calls to the +:ref:`_algm-MaxMin` algorithm, with the ShowMin flag set to true/false +respectively. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Mean-v1.rst b/Code/Mantid/docs/source/algorithms/Mean-v1.rst new file mode 100644 index 000000000000..2630326a79f5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Mean-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates the mean of the workspaces provided. Output workspace is +identical in shape to the input workspaces. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst b/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst new file mode 100644 index 000000000000..9297d82cacdb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst @@ -0,0 +1,46 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +If instrument geometry information is available the +:ref:`_algm-SolidAngle` algorithm is used to calculate the number of +counts per unit solid angle, otherwise numbers of counts are used +without correction. First the median number of counts in all the bins is +calculated. Then the ratio of the total number of counts and the median +number is calculated for each histogram. This ratio is compared against +the user defined upper and lower thresholds and if the ratio is outside +the limits the statistical significance test is done. + +In the statistical significance test the difference between the number +of counts in each spectrum and the median number is compared to the +spectrum's error value. Any spectra where the ratio of the its deviation +from the mean and the its error is less than the value of the property +SignificanceTest will not be labelled bad. This test is particularly +important when the number of counts is low, for example when examining +the low count "background" parts of spectra. + +Optionally, some might want to do median on a tube, or a bank. Fot that, +use the LevelsUp input. For example, in the CNCS instrument, the +detector is called a pixel. The parent of a pixel is a tube, while an +eightpack contains 8 tubes. To calculate the median of a tube, use +LevelsUp=1, for an eightpack use LevelsUp=2. LevelsUp=0 will calculate +the median over the whole instrument. + +The output workspace contains a MaskWorkspace where those spectra that +fail the tests are masked and those that pass them are assigned a single +positive value. + +ChildAlgorithms used +~~~~~~~~~~~~~~~~~~~~ + +Uses the :ref:`_algm-SolidAngle`, :ref:`_algm-Integration` and +:ref:`_algm-ConvertToDistribution` algorithms. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeCalFiles-v1.rst b/Code/Mantid/docs/source/algorithms/MergeCalFiles-v1.rst new file mode 100644 index 000000000000..cd9f8995b21c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MergeCalFiles-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Combines the data contained in two cal files, based on the selections +offsets, selections and groups can be merged. The matching rows are +determined by UDET. Any unmatched records are added at the end of the +file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeLogs-v1.rst b/Code/Mantid/docs/source/algorithms/MergeLogs-v1.rst new file mode 100644 index 000000000000..174ba1563bbc --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MergeLogs-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Two `TimeSeriesProperty `__ logs are merged together +by the time stamps. + +Output +------ + +A MatrixWorkspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst b/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst new file mode 100644 index 000000000000..a0969ff52c30 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm merges several `MDWorkspaces `__ together +into one by adding their events together. + +The algorithm starts by going through the list of +`MDWorkspaces `__ to find the extents that fully encompass +all input workspaces in each dimension. The number and names of +dimensions must match for all input workspaces. + +The output workspace is created with these dimensions and the box +parameters specified above. Then the events from each input workspace +are appended to the output. + +See also: :ref:`_algm-MergeMDFiles`, for merging when system +memory is too small to keep the entire workspace in memory. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeMDFiles-v1.rst b/Code/Mantid/docs/source/algorithms/MergeMDFiles-v1.rst new file mode 100644 index 000000000000..21ffeabe927a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MergeMDFiles-v1.rst @@ -0,0 +1,39 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is meant to merge a large number of large +MDEventWorkspaces together into one file-backed MDEventWorkspace, +without exceeding available memory. + +First, you will need to generate a MDEventWorkspaces NXS file for each +run with a fixed box structure: + +- You can call :ref:`_algm-CreateMDWorkspace` with + MinRecursionDepth = MaxRecursionDepth. + + - This will make the box structure identical. The number of boxes + will be equal to SplitInto ^ (NumDims \* MaxRecursionDepth). + - Aim for the boxes to be small enough for all events contained to + fit in memory; without there being so many boxes as to slow down + too much. + +- This can be done immediately after acquiring each run so that less + processing has to be done at once. + +Then, enter the path to all of the files created previously. The +algorithm avoids excessive memory use by only keeping the events from +ONE box from ALL the files in memory at once to further process and +refine it. This is why it requires a common box structure. + +See also: :ref:`_algm-MergeMD`, for merging any MDWorkspaces in system +memory (faster, but needs more memory). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst b/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst new file mode 100644 index 000000000000..0f7c9fb39480 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst @@ -0,0 +1,66 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Combines the data contained in an arbitrary number of input workspaces. +If the input workspaces do not have common binning, the bins in the +output workspace will cover the entire range of all the input +workspaces, with the largest bin widths used in regions of overlap. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspaces must contain histogram data with the same number of +spectra and matching units and instrument name in order for the +algorithm to succeed. + +**For `Workspace2Ds `__**: Each input workspace must have +common binning for all its spectra. + +**For `EventWorkspaces `__**: This algorithm is +Event-aware; it will append event lists from common spectra. Binning +parameters need not be compatible; the output workspace will use the +first workspaces' X bin boundaries. + +**For `WorkspaceGroups `__**: Each nested has to be one +of the above. + +Other than this it is currently left to the user to ensure that the +combination of the workspaces is a valid operation. + +Processing Group Workspaces +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Multi-period Group Workspaces +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Group workspaces will be merged respecting the periods within each +group. For example if you have two multiperiod group workspaces A and B +and an output workspace C. A contains matrix workspaces A\_1 and A\_2, +and B contains matrix workspaces B\_1 and B2. Since this is multiperiod +data, A\_1 and B\_1 share the same period, as do A\_2 and B\_2. So +merging must be with respect to workspaces of equivalent periods. +Therefore, merging is conducted such that A\_1 + B\_1 = C\_1 and A\_2 + +B\_2 = C\_2. + +Group Workspaces that are not multiperiod +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If group workspaces are provided that are not multi-period, this +algorithm will merge across all nested workspaces, to give a singe +output matrix workspace. + +ChildAlgorithms used +^^^^^^^^^^^^^^^^^^^^ + +The :ref:`_algm-Rebin` algorithm is used, if neccessary, to put all the +input workspaces onto a common binning. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Min-v1.rst b/Code/Mantid/docs/source/algorithms/Min-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Min-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Minus-v1.rst b/Code/Mantid/docs/source/algorithms/Minus-v1.rst new file mode 100644 index 000000000000..45cd88165bac --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Minus-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +.. raw:: mediawiki + + {{BinaryOperation|verb=subtracted|prep=from|symbol=-}} + +The Minus algorithm will subtract the data values and calculate the +corresponding `error values `__ for two compatible +workspaces. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MinusMD-v1.rst b/Code/Mantid/docs/source/algorithms/MinusMD-v1.rst new file mode 100644 index 000000000000..df7ffb08a342 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MinusMD-v1.rst @@ -0,0 +1,41 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Subtract two `MDHistoWorkspace `__'s or a +MDHistoWorkspace and a scalar. + +- **MDHistoWorkspace - MDHistoWorkspace** + + - The operation is performed element-by-element. + +- '''MDHistoWorkspace - Scalar ''' + + - The scalar is subtracted from every element of the + MDHistoWorkspace. The squares of errors are summed. + +- **Scalar - MDHistoWorkspace** + + - This is not allowed. + +- **`MDEventWorkspace `__ - + `MDEventWorkspace `__** + + - The signal of each event on the right-hand-side is multiplied by + -1 before the events are summed. + - The number of events in the output MDEventWorkspace is that of the + LHS and RHS workspaces put together. + +- **`MDEventWorkspace `__ - Scalar or + MDHistoWorkspace** + + - This is not possible. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ModeratorTzero-v1.rst b/Code/Mantid/docs/source/algorithms/ModeratorTzero-v1.rst new file mode 100644 index 000000000000..7b986840a812 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ModeratorTzero-v1.rst @@ -0,0 +1,75 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +| Corrects the time of flight (TOF) by a time offset that is dependent +on the energy of the neutron after passing through the moderator. A +heuristic formula for the correction is stored in the instrument +definition file. Below is shown the entry in the instrument file for the +VISION beamline: +| + +| `` `` +| ``  `` +| ``
`` + +| The recorded :math:`TOF = t_0 + t_i + t_f` with +| :math:`t_0`: emission time from the moderator +| :math:`t_1`: time from moderator to sample or monitor +| :math:`t_2`: time from sample to detector +| This algorithm will replace :math:`TOF` with +:math:`TOF^* = TOF-t_0 = t_i+t_f` + +| For a direct geometry instrument, the incident energy :math:`E_1` is +the same for all neutrons. Hence, the moderator emission time is the +same for all neutrons. For an indirect geometry instrument, :math:`E_1` +is different for each neutron and is not known. However, the final +energy :math:`E_2` selected by the analyzers is known. +| :math:`t_0 = func(E_1)` , a function of the incident energy +| :math:`t_1 = L_1/v_1` with :math:`L_1` the distance from moderator to +sample, and :math:`v_1` the initial unknown velocity ( +:math:`E_1=1/2*m*v_1^2`) +| :math:`t_2 = L_2/v_2` with :math:`L_2` the distance from sample to +detector, and :math:`v_2` is the final fixed velocity ( +:math:`E_2=1/2*m*v_2^2`) + +| **Note:** We obtain :math:`TOF^*` as an iterative process, taking into +account the fact that the correction :math:`t_0` is much smaller than +:math:`t_i+t_f`. Thus +| :math:`TOF-t_0^{(n)} = L_1/v_1^{(n)} + L_2/v_2` , n=0, 1, 2,.. +| Set :math:`t_0^{(0)}=0` and obtain :math:`v_1^{(0)}` from the previous +formula. From :math:`v_1^{(0)}` we obtain :math:`E_1^{(0)}` +| Set :math:`t_0^{(1)}=func( E_1^{(0)} )` and repeat the steps until +:math:`|t_0^{(n+1)} - t_0^{(n+1)}| < tolTOF`. With +tolTOF=0.1microsecond, only one iteration is needed for convergence. + +Here's the result of applying ModeratorTzero to both the event list and +the histogrammed data of a run in the VISION beamline. The +transformation of either events or histograms shifts the curve to +smaller TOF's. The transformed curves are not supposed to be identical, +but similar and differenciated from the original curve. + ++---------------------------------------------------------------------------------------+----------------+---------------------------------------------------------------------------------------+--------------+---------------------------------------------------------------------------------------+--------------+ +| Sumed Histogram | Elastic Line | Inelastic Peaks | ++=======================================================================================+================+=======================================================================================+==============+=======================================================================================+==============+ +| [[`File:ModeratorTzero\_Fig.1.jpeg\|200px `__ | center\|]] | [[`File:ModeratorTzero\_Fig.2.jpeg\|200px `__ | center\|]] | [[`File:ModeratorTzero\_Fig.3.jpeg\|200px `__ | center\|]] | ++---------------------------------------------------------------------------------------+----------------+---------------------------------------------------------------------------------------+--------------+---------------------------------------------------------------------------------------+--------------+ + +For indirect instruments featuring an incoming neutron flux having a +sufficiently narrow distribution of energies, a linear relationship +between t\_0 and the wavelength of the incoming neutron can be +established. This relation allows for coding of an algorithm with faster +execution times. For indirect instruments that comply with these +conditions, use of :ref:`_algm-ModeratorTzeroLinear` is +preferred. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ModeratorTzeroLinear-v1.rst b/Code/Mantid/docs/source/algorithms/ModeratorTzeroLinear-v1.rst new file mode 100644 index 000000000000..fb9c8acc2164 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ModeratorTzeroLinear-v1.rst @@ -0,0 +1,64 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm Corrects the time of flight (TOF) of an indirect geometry +instrument by substracting a time offset :math:`t_0` linearly dependent +on the wavelenght of the neutron when emitted through the moderator. +This algorithm is suitable to data reduction of indirect instruments +featuring a neutron flux with a narrow distribution of wavelenghts. A +heuristic formula for the correction, stored in the instrument +definition file, is taken as linear on the initial neutron wavelength +:math:`\lambda_i`: :math:`t_0 = a * \lambda_i + b`, +[a]=microsec/Angstrom and [b]=microsec. Below is the example XML code +included in BASIS beamline parameters file. + +:: + + + + + + + + + +The recorded TOF: :math:`TOF = t_0 + t_i + t_f`, with + +- :math:`t_0`: emission time from the moderator +- :math:`t_i`: time from moderator to sample +- :math:`t_f`: time from sample to detector + +This algorithm will replace TOF with :math:`TOF' = TOF-t_0 = t_i + t_f` + +For an indirect geometry instrument, :math:`\lambda_i` is not known but +the final energy, :math:`E_f`, selected by the analyzers is known. For +this geometry: + +- :math:`t_f = L_f/v_f`, with :math:`L_f`: distance from sample to + detector, :math:`v_f`: final velocity derived from :math:`E_f` +- :math:`t_i = L_i/v_i`, with :math:`L_i`: distance from moderator to + sample, :math:`v_i`: initial velocity unknown +- :math:`t_0 = a'/v_i+b'`, with a' and b' constants derived from the + aforementioned heuristic formula + :math:`a' = a \cdot 3.956 \cdot 10^{-3}` with [a']=meter, + +and :math:`b' = b` with [b']=microsec + +Putting all together: +:math:`TOF' = \frac{L_i}{L_i+a'} \cdot (TOF-t_f-b') + t_f`, with +[TOF']=microsec + +If the detector is a monitor, then we can treat it as both sample and +detector. Thus, we use the previous formula inserting the time from +sample to detector :math:`t_f = 0` and with the initial fligh path +:math:`L_i` as the distance from source to monitor. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ModifyDetectorDotDatFile-v1.rst b/Code/Mantid/docs/source/algorithms/ModifyDetectorDotDatFile-v1.rst new file mode 100644 index 000000000000..240dfd4409bf --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ModifyDetectorDotDatFile-v1.rst @@ -0,0 +1,37 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Modifies an ISIS detector dot data file, so that the detector positions +are as in the given workspace. This algorithm can be used to transfer a +calibration done via the :ref:`_algm-ApplyCalibration` +algorithm to an ISIS detector dot dat file by selecting a workspace that +has been modified by ApplyCalibration. + +A typical ISIS dot data file has a format like this: + +| ``DETECTOR.DAT generated by CREATE_DETECTOR_FILE`` +| `` 286729      14`` +| `` det no.  offset    l2     code     theta        phi         w_x         w_y         w_z         f_x       ...       `` +| ``     11   0.000  -3.25800     1   180.00000     0.00000     0.00000     0.00000     0.00000     0.00000    ... `` +| ``     21   0.000  -1.50400     1   180.00000     0.00000     0.00000     0.00000     0.00000     0.00000    ...`` +| ``   ....`` +| ``1110001   5.300   2.88936     3    52.28653  -140.67224     0.02540     0.02540     0.00283     0.02750   ... `` +| ``1110002   5.300   2.88794     3    52.26477  -140.72720     0.02540     0.02540     0.00283     0.02750   ...`` +| ``   ....`` + +Each row corresponds to a detector whose type is indicated in the +``code`` column. The algorithm will only modify values in colums ``l2``, +``theta`` and ``phi`` and only if the value in the ``code`` column is 3, +which indicates a PSD gas tube. For more details about the detector dot +data file see +`LoadDetectorInfo#File\_format `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MonitorLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/MonitorLiveData-v1.rst new file mode 100644 index 000000000000..b516dab792ba --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MonitorLiveData-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The MonitorLiveData algorithm is started in the background by +:ref:`_algm-StartLiveData` and repeatedly calls +:ref:`_algm-LoadLiveData`. **It should not be necessary to call +MonitorLiveData directly.** + +This algorithm simply calls :ref:`_algm-LoadLiveData` at the given +*UpdateFrequency*. For more details, see +:ref:`_algm-StartLiveData`. + +For details on the way to specify the data processing steps, see: +`LoadLiveData `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MonteCarloAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/MonteCarloAbsorption-v1.rst new file mode 100644 index 000000000000..e1ac15078473 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MonteCarloAbsorption-v1.rst @@ -0,0 +1,44 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm performs a Monte Carlo simulation to calculate the +attenuation factor of a given sample for an arbitrary arrangement of +sample + container shapes. The algorithm proceeds as follows for each +spectra in turn: + +- A random point within the sample+container set up is selected and + chosen as a scattering point; +- This point then defines an incoming vector from the source position + and an outgoing vector to the final detector; +- The total attenuation factor for this path is then calculated as the + product of the factor for each defined material of the + sample/container that the track passes through. + +Known limitations +----------------- + +- Only elastic scattering is implemented at the moment. + +- The object's bounding box is used as a starting point for selecting a + random point. If the shape of the object is peculiar enough not to + occupy much of the bounding box then the generation of the initial + scatter point will fail. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must have units of wavelength. The +`instrument `__ associated with the workspace must be fully +defined because detector, source & sample position are needed. + +At a minimum, the input workspace must have a sample shape defined. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MoveInstrumentComponent-v1.rst b/Code/Mantid/docs/source/algorithms/MoveInstrumentComponent-v1.rst new file mode 100644 index 000000000000..b98a61f07ece --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MoveInstrumentComponent-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This moves an instrument component, e.g. a bank or a pixel. + +You can specify a pathname as the name of a non-unique component (e.g. +"WISH/panel03/WISHpanel03/tube005") and one can skip parts not needed +for uniqueness (e.g. "panel03/tube005"). For a unique component, you can +just specify the name (e.g. "panel03"). + +You can either specify an absolute position or a relative position. The +relative position will be applied to the current position, so applying +this twice will move the detector twice. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MultipleScatteringCylinderAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/MultipleScatteringCylinderAbsorption-v1.rst new file mode 100644 index 000000000000..dfe49e98345b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MultipleScatteringCylinderAbsorption-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is a port to C++ of a multiple scattering absorption +correction, used to correct the vanadium spectrum for the GPPD +instrument at the IPNS. The correction calculation was originally worked +out by Jack Carpenter and Asfia Huq and implmented in Java by Alok +Chatterjee. The java code was translated to C++ in Mantid by Dennis +Mikkelson. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Multiply-v1.rst b/Code/Mantid/docs/source/algorithms/Multiply-v1.rst new file mode 100644 index 000000000000..68e7310999dc --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Multiply-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +.. raw:: mediawiki + + {{BinaryOperation|verb=multiplied|prep=by|symbol=\times}} + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MultiplyMD-v1.rst b/Code/Mantid/docs/source/algorithms/MultiplyMD-v1.rst new file mode 100644 index 000000000000..87ca39b550c4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MultiplyMD-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Multiply two `MDHistoWorkspace `__'s or a +MDHistoWorkspace and a scalar. + +The error of :math:`f = a * b` is propagated with +:math:`df^2 = f^2 * (da^2 / a^2 + db^2 / b^2)` + +- **MDHistoWorkspace \* MDHistoWorkspace** + + - The operation is performed element-by-element. + +- **MDHistoWorkspace \* Scalar** or **Scalar \* MDHistoWorkspace** + + - Every element of the MDHistoWorkspace is multiplied by the scalar. + +- **`MDEventWorkspace `__'s** + + - This operation is not supported, as it is not clear what its + meaning would be. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MultiplyRange-v1.rst b/Code/Mantid/docs/source/algorithms/MultiplyRange-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MultiplyRange-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MuonCalculateAsymmetry-v1.rst b/Code/Mantid/docs/source/algorithms/MuonCalculateAsymmetry-v1.rst new file mode 100644 index 000000000000..a0b012ed9934 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MuonCalculateAsymmetry-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Converts loaded/prepared Muon data to a data suitable for analysis. + +Supports three modes: + +- PairAsymmetry - asymmetry is calculated for a given pair of groups, + using the alpha value provided. +- GroupAsymmetry - asymmetry between given group and Muon exponential + decay is calculated. +- GroupCount - **no asymmetry is calculated**, pure counts of the + specified group are used. + +For every mode, either one or two data acquisition period workspaces can +be provided. PeriodOperation determines in which way period data will be +merged at the end. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MuonGroupDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/MuonGroupDetectors-v1.rst new file mode 100644 index 000000000000..31d970669074 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MuonGroupDetectors-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Applies detector grouping to a workspace. (Muon version). + +Expect the DetectorGroupingTable to contain one column only. It should +be of type vector\_int (std::vector). Every row corresponds to a group, +and the values in the only column are IDs (not indices!) of the +detectors which spectra should be contained in the group. Name of the +column is not used. + +One detector might be in more than one group. Empty groups are ignored. +std::invalid\_argument exceptions are thrown if table format is not +correct, there are no non-empty groups or one of the detector IDs does +not exist in the workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst b/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst new file mode 100644 index 000000000000..f758a266720d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst @@ -0,0 +1,34 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm replicates the sequence of actions undertaken by +MuonAnalysis in order to produce a Muon workspace ready for fitting. + +Specifically: + +#. Load the specified filename +#. Apply dead time correction +#. Group the workspace +#. Offset, crop and rebin the workspace +#. If the loaded data is multi-period - apply the specified operation to + specified periods to get a single data set. +#. Use :ref:`_algm-MuonCalculateAsymmetry` to get the + resulting workspace. + +Workflow +~~~~~~~~ + +.. figure:: /images/MuonWorkflow.png + :alt: MuonWorkflow.png + + MuonWorkflow.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MuscatData-v1.rst b/Code/Mantid/docs/source/algorithms/MuscatData-v1.rst new file mode 100644 index 000000000000..294620d9fbe2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MuscatData-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates Multiple Scattering based on the Monte Carlo program MINUS. +It takes a sample :math:`S(Q,w)` from an input sqw workspace and +supports both Flat and Cylindrical geometries. More information on the +multiple scattering can be procedure can be found in the `modes +manual `__. + +References +^^^^^^^^^^ + +#. M W Johnson, AERE Report R7682 (1974) + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MuscatFunc-v1.rst b/Code/Mantid/docs/source/algorithms/MuscatFunc-v1.rst new file mode 100644 index 000000000000..d58fbb05a99d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/MuscatFunc-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates Multiple Scattering based on the Monte Carlo program MINUS. +It calculates :math:`S(Q,w)` from specified functions (such as those +used in JumpFit) and supports both Flat and Cylindrical geometries. More +information on the multiple scattering can be procedure can be found in +the `modes +manual `__. + +References +^^^^^^^^^^ + +#. M W Johnson, AERE Report R7682 (1974) + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NexusTester-v1.rst b/Code/Mantid/docs/source/algorithms/NexusTester-v1.rst new file mode 100644 index 000000000000..42651f7428c5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NexusTester-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +**This algorithm is meant for developers only!** + +This algorithm is used for performance testing and debugging of nexus +saving and loading. + +If you specify SaveFilename (optional), then the algorithm will save a +file with the given number of chunks of the given size. + +If you specify LoadFilename (optional), then the algorithm will load +back a file created with this algorithm. + +The *SaveSpeed* and *LoadSpeed* output properties are set to the saving +and loading rates, in MB per second. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst new file mode 100644 index 000000000000..281eed682217 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst @@ -0,0 +1,37 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Normalises a workspace according to the good proton charge figure taken +from the Input Workspace log data, which is stored in the workspace's +`Sample `__ object). Every data point (and its error) is divided +by that number. + +ISIS Calculation Details +------------------------ + +The good proton charge **gd\_ptrn\_chrg** is an summed value that +applies across all periods. It is therefore suitable to run +NormaliseByProtonCharge for single-period workspaces, but gives +incorrect normalisation for multi-period workspaces. If the algorithm +detects the presences of a multi-period workspace, it calculates the +normalisation slightly differently. It uses the **current\_period** log +property to index into the **proton\_charge\_by\_period** log data array +property. + +EventWorkspaces +~~~~~~~~~~~~~~~ + +If the input workspace is an `EventWorkspace `__, then +the output will be as well. Weighted events are used to scale by the +current (see the :ref:`_algm-Divide` algorithm, which is a child +algorithm being used). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst new file mode 100644 index 000000000000..de5e3e1a559e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst @@ -0,0 +1,158 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is designed to normalise a workspace via detector +efficiency functions. **For this algorithm to work, the Instrument +Defintion File `IDF `__ must have fitting functions on the +component tree**. The setup information for this, as well as some +examples, are provided below. + +At a high-level, the algorithm does this: + +#. Extract a detector efficiency function :math:`e = f(\lambda)` +#. Using the bin boundaries on the input workspace, calculate efficiency + Y and E values and generate a new workspace from the results +#. Divide the input workspace by the efficiency workspace + +Prerequisites +------------- + +The Input Workspace +~~~~~~~~~~~~~~~~~~~ + +#. The input workspace must be a MatrixWorkspace +#. The input workspace must have X-units of Wavelength, run + :ref:`_algm-ConvertUnits` on your input workspace if it is not + already in Wavelength. +#. The input workspace must be a histogram workspace run + :ref:`_algm-ConvertToHistogram` on your input workspace + if it is not already histogrammed. + +The Instrument Definition File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Background +^^^^^^^^^^ + +In brief, the components in the IDF file form a tree structure. +Detectors and Instruments are both types of component. Detectors are +ultimately children of Instruments in the tree structure. For a more +complete description see `IDF `__. The tree structure of the +components, mean that fitting functions do not necessarily have to be +assigned on a detector-by-detector basis. Applying a fit function to the +instrument, will ensure that all subcomponents (including detectors), +pick-up that function. However, functions assigned to lower-level +components (such as detectors) take precidence over and exising +functions that might exist on parent components (such as the +instrument). You can even, have some parameters for a function provided +against the detector, and pick up defaults from the bank, or instrument +if they have been specified there. + +Recommended Working +^^^^^^^^^^^^^^^^^^^ + +The IDF is intended to be a definitive description of the components in +the instrument at any time. This should be the most generic form of the +instrument setup possible. To complement this, you may provide +additional Instrument Parameter files, which can be used to overload +settings in the IDF for purposes of configuration and calibration. **We +strongly recommend that fitting functions are provided via Instrument +Parameter Files rather than directly in the IDF**. This will give you +more flexibility to change your fitting functions without the problems +of synchronising the IDF across Mantid, and possible corruption +resulting from ad-hoc changes. + +Instrument Parameter Files that take the form +{InstrumentName}\_Parameters.xml and live in the Instrument directory of +Mantid are automatically loaded along with the IDF when a workspace is +loaded into Mantid. However, you can apply any number of additional +parameter files over the top of an existing workspace using +:ref:`_algm-LoadParameterFile`. + +Examples +^^^^^^^^ + +Applying a LinearFunction to the whole instrument, hard-coded with A1=2 +and A0=1. Fictional instrument is called basic\_rect. + +.. code:: xml + + + + + + + + + + + + + + +Applying the same LinearFunction to two different detectors, with +different coefficients is shown below: + +.. code:: xml + + + + + + + + + + + + + + + + + + + + + + + + +In the following the LinearFunction A0 coefficient is set globally for +all detectors at the instrument level, while the A1 coefficient is +provided for each detector. In this way the Algorithm sees a complete +definition for the Linear function (both A1 and A0) from two incomplete +definitions on different components in the tree. + +.. code:: xml + + + + + + + + + + + + + + + + + + + + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByPeakArea-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByPeakArea-v1.rst new file mode 100644 index 000000000000..279a04ff5b78 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NormaliseByPeakArea-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Takes an input TOF spectrum and converts it to Y-space using the +:ref:`_algm-ConvertToYSpace` algorithm. The result is then +fitted using the ComptonPeakProfile function using the given mass to +produce an estimate of the peak area. The input data is normalised by +this value. + +The algorithm has 4 outputs: + +- the input data normalised by the fitted peak area; +- the input data (without normalisation) converted Y-space; +- the fitted peak in Y-space; +- the input data converted to Y and then symmetrised about Y=0. + +If the sum option is requested then all input spectra are rebinned, in +steps of 0.5 :math:`A^-1`, to a common Y grid and then summed to give a +single spectrum. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByThickness-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByThickness-v1.rst new file mode 100644 index 000000000000..85d5b85681e5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NormaliseByThickness-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Normalise detector counts by the sample thickness + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst new file mode 100644 index 000000000000..008cd4d41d2c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst @@ -0,0 +1,65 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Bin-by-bin mode +~~~~~~~~~~~~~~~ + +In this, the default scenario, each spectrum in the workspace is +normalised on a bin-by-bin basis by the monitor spectrum given. The +error on the monitor spectrum is taken into account. The normalisation +scheme used is: + +:math:`(s_i)_{Norm}=(\frac{s_i}{m_i})*\Delta w_i*\frac{\sum_i{m_i}}{\sum_i(\Delta w_i)}` + +where :math:`s_i` is the signal in a bin, :math:`m_i` the count in the +corresponding monitor bin, :math:`\Delta w_i` the bin width, +:math:`\sum_i{m_i}` the integrated monitor count and +:math:`\sum_i{\Delta w_i}` the sum of the monitor bin widths. In words, +this means that after normalisation each bin is multiplied by the bin +width and the total monitor count integrated over the entire frame, and +then divided by the total frame width. This leads to a normalised +histogram which has unit of counts, as before. + +If the workspace does not have common binning, then the monitor spectrum +is rebinned internally to match each data spectrum prior to doing the +normalisation. + +Normalisation by integrated count mode +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This mode is used if one or both of the relevant 'IntegrationRange' +optional parameters are set. If either is set to a value outside the +workspace range, then it will be reset to the frame minimum or maximum, +as appropriate. + +The error on the integrated monitor spectrum is taken into account in +the normalisation. No adjustment of the overall normalisation takes +place, meaning that the output values in the output workspace are +technically dimensionless. + +Restrictions on the input workspace +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The data must be histogram, non-distribution data. + +Child Algorithms used +~~~~~~~~~~~~~~~~~~~~~ + +The :ref:`_algm-ExtractSingleSpectrum` algorithm is used +to pull out the monitor spectrum if it's part of the InputWorkspace or +MonitorWorkspace. For the 'integrated range' option, the +:ref:`_algm-Integration` algorithm is used to integrate the monitor +spectrum. + +In both cases, the :ref:`_algm-Divide` algorithm is used to perform the +normalisation. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseToUnity-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseToUnity-v1.rst new file mode 100644 index 000000000000..10842e30e07f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NormaliseToUnity-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +NormaliseToUnity uses :ref:`_algm-Integration` to sum up all the X +bins, then sums up the resulting spectra using +:ref:`_algm-SumSpectra`. Each bin of the input workspace is then +divided by the total sum, regardless of whether a bin was included in +the sum or not. It is thus possible to normalize a workspace so that a +range of X bins and spectra sums to 1. In that case the sum of the whole +workspace will likely not be equal to 1. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseVanadium-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseVanadium-v1.rst new file mode 100644 index 000000000000..53accad8c9ba --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NormaliseVanadium-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Normalises all spectra of workspace to a specified wavelength. Following +A.J.Schultz's anvred, scales the vanadium spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NotMD-v1.rst b/Code/Mantid/docs/source/algorithms/NotMD-v1.rst new file mode 100644 index 000000000000..0fdb33fced7d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/NotMD-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Perform the Not (negation) boolean operation on a +`MDHistoWorkspace `__. The not operation is performed +element-by-element. Any 0.0 signal is changed to 1.0 (meaning true). Any +non-zero signal is changed to 0.0 (meaning false). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/OSIRISDiffractionReduction-v1.rst b/Code/Mantid/docs/source/algorithms/OSIRISDiffractionReduction-v1.rst new file mode 100644 index 000000000000..f78fde538714 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/OSIRISDiffractionReduction-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Source Code +----------- + +The source code for the Python Algorithm may be viewed at: +`OSIRISDiffractionReduction.py `__ + +The source code for the reducer class which is used may be viewed at: +`osiris\_diffraction\_reducer.py `__ + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/OneMinusExponentialCor-v1.rst b/Code/Mantid/docs/source/algorithms/OneMinusExponentialCor-v1.rst new file mode 100644 index 000000000000..90b9d52be27f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/OneMinusExponentialCor-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm corrects the data and error values on a workspace by the +value of one minus an exponential function of the form +:math:`\rm C1(1 - e^{-{\rm C} x})`. This formula is calculated for each +data point, with the value of *x* being the mid-point of the bin in the +case of histogram data. The data and error values are either divided or +multiplied by the value of this function, according to the setting of +the Operation property. + +This algorithm is now event aware. + +This correction is applied to a copy of the input workpace and put into +output workspace. If the input and output workspaces have the same name, +the operation is applied to the workspace of that name. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/OneStepMDEW-v1.rst b/Code/Mantid/docs/source/algorithms/OneStepMDEW-v1.rst new file mode 100644 index 000000000000..915f1e71e2c2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/OneStepMDEW-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used in the Paraview event nexus loader to both load +an event nexus file and convert it into a +`MDEventWorkspace `__ for use in visualization. + +The :ref:`_algm-LoadEventNexus` algorithm is called with default +parameters to load into an `EventWorkspace `__. + +After, the +`MakeDiffractionMDEventWorkspace `__ +algorithm is called with the new EventWorkspace as input. The parameters +are set to convert to Q in the lab frame, with Lorentz correction, and +default size/splitting behavior parameters. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/OptimizeCrystalPlacement-v1.rst b/Code/Mantid/docs/source/algorithms/OptimizeCrystalPlacement-v1.rst new file mode 100644 index 000000000000..ed60a816ee40 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/OptimizeCrystalPlacement-v1.rst @@ -0,0 +1,47 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm basically optimizes h,k, and l offsets from an integer by +varying the parameters sample positions, sample orientations ( chi,phi, +and omega), and/or the tilt of the goniometer for an experiment. + +-If the crystal orientation matrix, UB, was created from one run, that +run may not need to have its goniometer settings optimized. There is a +property to list the run numbers to NOT have their goniometer settings +changed. This entry is IGNORED if the tilt or sample positions are +included in the optimization. In this case NONE of the goniometer +angles, relative to any tilt, will be changed. + +-The goniometer angles displayed are relative to the tilt,i,e, phi is +the rotation around the axis perpendicular to the tilted plane. The +resultant PeaksWorkspace has the goniometer angles relative to the Y and +Z axes at that time. + +-The crystal orientation matrix, UB, from the PeaksWorkspace should +index all the runs "very well". Otherwise iterations that slowly build a +UB with corrected sample orientations may be needed. + +-The parameters for the tilt are GonRotx, GonRoty, and GonRotz in +degrees. The usage for this information is as follows: + +``    rotate('x',GonRotx)*rotate('y',GonRoty)*rotate('z',GonRotz)* SampleOrientation( i.e. omegaRot*chiRot*phiRot)).`` + +-Note: To optimize by the tilt in the goniometer and then by the angles +or by the sample position, it is possible to run with one optimization, +then using the resultant PeaksWorkspace for input, run another +optimization. + +Rerunning the same optimization with the result is also a good idea. If +the first guess is very close, the optimize algorithm does try cases far +away and may not get back to the best value. Check the chisquared +values. If they increase, that optimization should probably not be used. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/OptimizeLatticeForCellType-v1.rst b/Code/Mantid/docs/source/algorithms/OptimizeLatticeForCellType-v1.rst new file mode 100644 index 000000000000..a55ed9f92d48 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/OptimizeLatticeForCellType-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This does a least squares fit between indexed peaks and Q values for a +set of runs producing an overall leastSquare orientation matrix. + +Get estimates of the standard deviations of the parameters, by +approximating chisq by a quadratic polynomial through three points and +finding the change in the parameter that would cause a change of 1 in +chisq. (See Bevington, 2nd ed., pg 147, eqn: 8.13 ) In this version, we +calculate a sequence of approximations for each parameter, with delta +ranging over 10 orders of magnitude and keep the value in the sequence +with the smallest relative change. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/OrMD-v1.rst b/Code/Mantid/docs/source/algorithms/OrMD-v1.rst new file mode 100644 index 000000000000..fc9d2e3488cd --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/OrMD-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Perform the Or boolean operation on two MDHistoWorkspaces. The \|\| +operation is performed element-by-element. A signal of 0.0 means "false" +and any non-zero signal is "true". + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PDDetermineCharacterizations-v1.rst b/Code/Mantid/docs/source/algorithms/PDDetermineCharacterizations-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PDDetermineCharacterizations-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PDFFourierTransform-v1.rst b/Code/Mantid/docs/source/algorithms/PDFFourierTransform-v1.rst new file mode 100644 index 000000000000..b00a31d4eb6b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PDFFourierTransform-v1.rst @@ -0,0 +1,61 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm PDFFourierTransform transforms :math:`S(Q)`, +:math:`S(Q)-1`, or :math:`Q[S(Q)-1]` (as a fuction of MomentumTransfer +or dSpacing) to a PDF (pair distribution function) as described below. + +The input Workspace can have the unit in d-space of Q-space. The +algorithm itself is able to identify the unit. The allowed unit are +MomentumTransfer and d-spacing. + +**Note:** All other forms are calculated by transforming :math:`G(r)`. + +Output Options +^^^^^^^^^^^^^^ + +G(r) +'''' + +:math:`G(r) = 4\pi r[\rho(r)-\rho_0] = \frac{2}{\pi} \int_{0}^{\infty} Q[S(Q)-1]\sin(Qr)dQ` + +and in this algorithm, it is implemented as + +:math:`G(r) = \frac{2}{\pi} \sum_{Q_{min}}^{Q_{max}} Q[S(Q)-1]\sin(Qr) M(Q,Q_{max}) \Delta Q` + +where :math:`M(Q,Q_{max})` is an optional filter function. If Filter +property is set (true) then + +:math:`M(Q,Q_{max}) = \frac{\sin(\pi Q/Q_{max})}{\pi Q/Q_{max}}` + +otherwise + +:math:`M(Q,Q_{max}) = 1\,` + +g(r) +'''' + +:math:`G(r) = 4 \pi \rho_0 r [g(r)-1]` + +transforms to + +:math:`g(r) = \frac{G(r)}{4 \pi \rho_0 r} + 1` + +RDF(r) +'''''' + +:math:`RDF(r) = 4 \pi \rho_0 r^2 g(r)` + +transforms to + +:math:`RDF(r) = r G(r) + 4 \pi \rho_0 r^2` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PDLoadCharacterizations-v1.rst b/Code/Mantid/docs/source/algorithms/PDLoadCharacterizations-v1.rst new file mode 100644 index 000000000000..94e49229201c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PDLoadCharacterizations-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm loads information into a +`TableWorkspace `__ for the characterization information +and a collection of output parameters for the focus positions to be used +in :ref:`_algm-EditInstrumentGeometry`. If a section is +missing then those parameters will be empty. This includes an empty +table (zero rows) if that information is missing. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Pause-v1.rst b/Code/Mantid/docs/source/algorithms/Pause-v1.rst new file mode 100644 index 000000000000..14cbc7cde9f0 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Pause-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This is a very simple algorithm that does nothing for a given number of +seconds. + +This can be used during debugging, for example, to slow down the +execution of a fast script. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PeakIntegration-v1.rst b/Code/Mantid/docs/source/algorithms/PeakIntegration-v1.rst new file mode 100644 index 000000000000..c3d7e1cdd3a1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PeakIntegration-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Integrate and calculate error of integration of each peak from single +crystal data and place results into peak workspace. Uses IkedaCarpenter +function to fit TOF. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst b/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst new file mode 100644 index 000000000000..5a8b4da13abb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst @@ -0,0 +1,73 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Integrates SCD peaks with a range of radii, in order to plot graphs of +the integrated intensity vs radius. This can be useful to determine the +correct integration radius for each peak. + +.. figure:: /images/PeakIntensityVsRadius_fig.png + :alt: {Integrated peak intensity vs integration radius for 3 SCD peaks} + + {Integrated peak intensity vs integration radius for 3 SCD peaks} +The algorithm requires a `MDWorkspace `__ of SCD data in +reciprocal space; generated by e.g. +:ref:`_algm-ConvertToDiffractionMDWorkspace`. +Also, you will need a `PeaksWorkspace `__ as the list of +peaks to integrate. This can be generated using +:ref:`_algm-FindPeaksMD`, for example. + +The output will be a `Workspace2D `__ with one spectrum per +peak, where: + +- X = peak radius +- Y/E = integrated intensity and error for the corresponding radius. +- Each peak is labeled with a string with "H K L". Use + :ref:`_algm-IndexPeaks` to automatically find HKL values for + peaks. + +This algorithm calls :ref:`_algm-IntegratePeaksMD` repeatedly, +with the following parameters filled in: + +- **PeakRadius** = the radius, ranging from RadiusStart to RadiusEnd in + NumSteps steps. +- **BackgroundInnerRadius** = radius \* BackgroundInnerFactor *OR* + BackgroundInnerRadius +- **BackgroundOuterRadius** = radius \* BackgroundOuterFactor *OR* + BackgroundOuterRadius + +Sample Usage +~~~~~~~~~~~~ + +.. code:: python + + # Load a SCD data set and find the peaks + LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') + ConvertToDiffractionMDWorkspace(InputWorkspace='TOPAZ_3131_nxs',OutputWorkspace='TOPAZ_3131_md',LorentzCorrection='1') + FindPeaksMD(InputWorkspace='TOPAZ_3131_md',PeakDistanceThreshold='0.15',MaxPeaks='100',OutputWorkspace='peaks') + FindUBUsingFFT(PeaksWorkspace='peaks',MinD='2',MaxD='16') + IndexPeaks(PeaksWorkspace='peaks') + + # Run the PeakIntensityVsRadius algorithm, where the background shell scales with the PeakRadius + PeakIntensityVsRadius(InputWorkspace='TOPAZ_3131_md',PeaksWorkspace='peaks', + RadiusStart=0.00, RadiusEnd=0.15, NumSteps=51, + BackgroundInnerFactor=1.5,BackgroundOuterFactor=2, + OutputWorkspace='peak_vs_rad') + + # Run the PeakIntensityVsRadius algorithm, with fixed background shell radius + PeakIntensityVsRadius(InputWorkspace='TOPAZ_3131_md',PeaksWorkspace='peaks', + RadiusStart=0.00, RadiusEnd=0.15, NumSteps=51, + BackgroundInnerRadius=0.15,BackgroundOuterRadius=0.2, + OutputWorkspace='peak_vs_rad_fixed') + + # Plot a few of the peaks + plotSpectrum('peak_vs_rad', [0,2,3], error_bars=True) + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PeaksInRegion-v1.rst b/Code/Mantid/docs/source/algorithms/PeaksInRegion-v1.rst new file mode 100644 index 000000000000..fd3a35c6c096 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PeaksInRegion-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Determines which peaks intersect a defined box region in either QLab, +QSample or HKL space. Similar to :ref:`_algm-PeaksOnSurface`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PeaksOnSurface-v1.rst b/Code/Mantid/docs/source/algorithms/PeaksOnSurface-v1.rst new file mode 100644 index 000000000000..0db52c292a94 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PeaksOnSurface-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Determine whether a peak intersects a surface. Similar to +:ref:`_algm-PeaksInRegion`. The vertexes of the surface must be +provided. The vertexes must be provided in clockwise ordering starting +at the lower left. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PearlMCAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/PearlMCAbsorption-v1.rst new file mode 100644 index 000000000000..c97dcd6695a8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PearlMCAbsorption-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Loads an existing file of pre-calculated or measured absorption +coefficients for the PEARL instrument. + +If the file contains "t=" on the first line then the number following +this is assumed to be the thickness in mm. The values in the second +column are assumed to be :math:`\alpha(t)`. Upon reading the file the +:math:`\alpha` values for transformed into attenuation coefficients via +:math:`\frac{I}{I_0} = exp(-\alpha * t)`. + +If the file does not contain "t=" on the top line then the values are +assumed to be calculated :math:`\frac{I}{I_0}` values and are simply +read in verbatim. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PerformIndexOperations-v1.rst b/Code/Mantid/docs/source/algorithms/PerformIndexOperations-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PerformIndexOperations-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PlotAsymmetryByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/PlotAsymmetryByLogValue-v1.rst new file mode 100644 index 000000000000..b83c50c07f50 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PlotAsymmetryByLogValue-v1.rst @@ -0,0 +1,40 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm calculates asymmetry for a series of muon workspaces. The +input workspaces must be in Muon Nexus files which names follow the +rule: the filename must begin with at least 1 letter and followed by a +number. The input property FirstRun must be set to the file name with +the smalest number and the LastRun to the one with the highest number. +If the "Green" property is not set the output workspace will contain a +single spectrum with asymmetry values. If the "Green" is set the output +workspace will contain four spectra with asymmetries: + ++-------------------+------------+------------------------------------+ +| Workspace Index | Spectrum | Asymmetry | ++===================+============+====================================+ +| 0 | 1 | Difference of Red and Green | ++-------------------+------------+------------------------------------+ +| 1 | 2 | Red only | ++-------------------+------------+------------------------------------+ +| 2 | 3 | Green only | ++-------------------+------------+------------------------------------+ +| 3 | 4 | Sum of red and green asymmetries | ++-------------------+------------+------------------------------------+ + +If ForwardSpectra and BackwardSpectra are set the muon workspaces will +be grouped according to the user input, otherwise the Autogroup option +of LoadMuonNexus will be used for grouping. + +There is a python script PlotAsymmetryByLogValue.py which if called in +MantidPlot runs the algorithm and plots the results. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst new file mode 100644 index 000000000000..202bcfe09d7c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst @@ -0,0 +1,66 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm fits a series of spectra with the same function. Each +spectrum is fit independently and the result is a table of fitting +parameters unique for each spectrum. The sources for the spectra are +defined in the Input property. The Input property expects a list of +spectra identifiers separated by semicolons (;). An identifier is itself +a comma-separated list of values. The first value is the name of the +source. It can be either a workspace name or a name of a file (RAW or +Nexus). If it is a name of a `WorkspaceGroup `__ all its +members will be included in the fit. The second value selects a spectrum +within the workspace or file. It is an integer number with a prefix +defining the meaning of the number: "sp" for a spectrum number, "i" for +a workspace index, or "v" for a range of values on the numeric axis +associated with the workspace index. For example, sp12, i125, v0.5:2.3. +If the data source is a file only the spectrum number option is +accepted. The third value of the spectrum identifier is optional period +number. It is used if the input file contains multiperiod data. In case +of workspaces this third parameter is ignored. This are examples of +Input property + +| `` "test1,i2; MUSR00015189.nxs,sp3; MUSR00015190.nxs,sp3; MUSR00015191.nxs,sp3"`` +| `` "test2,v1.1:3.2"`` +| `` "test3,v" - fit all spectra in workspace test3`` + +Internally PlotPeakByLogValue uses :ref:`_algm-Fit` algorithm to perform +fitting and the following properties have the same meaning as in +:ref:`_algm-Fit`: Function, StartX, EndX, Minimizer, CostFunction. Property +FitType defines the way of setting initial values. If it is set to +"Sequential" every next fit starts with parameters returned by the +previous fit. If set to "Individual" each fit starts with the same +initial values defined in the Function property. + +LogValue property specifies a log value to be included into the output. +If this property is empty the values of axis 1 will be used instead. +Setting this property to "SourceName" makes the first column of the +output table contain the names of the data sources (files or +workspaces). + +Output workspace format +~~~~~~~~~~~~~~~~~~~~~~~ + +The output workspace is a table in which rows correspond to the spectra +in the order they (spectra) appear in the Input property. The first +column of the table has the log values. It is followed by pairs of +columns with parameter values and fitting errors. If a parameter was +fixed or tied the error will be zero. Here is an example of the output +workspace: + +.. figure:: /images/PlotPeakByLogValue_Output.png + :alt: PlotPeakByLogValue_Output.png + + PlotPeakByLogValue\_Output.png +In this example a group of three Matrix workspaces were fitted with a +`Gaussian `__ on a linear background. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Plus-v1.rst b/Code/Mantid/docs/source/algorithms/Plus-v1.rst new file mode 100644 index 000000000000..ea3399c82612 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Plus-v1.rst @@ -0,0 +1,32 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +.. raw:: mediawiki + + {{BinaryOperation|verb=added|prep=to|symbol=+}} + +EventWorkspace note +~~~~~~~~~~~~~~~~~~~ + +For `EventWorkspaces `__, the event lists at each +workspace index are concatenated to create the output event list at the +same workspace index. Note that in some (rare:sup:`\*`) cases, these +event lists might be from different detectors; this is not checked +against and the event lists will be concatenated anyway. This may or may +not be your desired behavior. If you wish to merge different +EventWorkspaces while matching their detectors together, use the +:ref:`_algm-MergeRuns` algorithm. + +:sup:`\*` This could happen, for example, if the workspace operands have +not both been processed in an identical fashion and the detectors have +somehow been grouped differently. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst b/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst new file mode 100644 index 000000000000..83ea1ffdcac6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst @@ -0,0 +1,54 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm sums two `MDHistoWorkspaces `__ or +merges two `MDEventWorkspaces `__ together. + +MDHistoWorkspaces +~~~~~~~~~~~~~~~~~ + +- **MDHistoWorkspace + MDHistoWorkspace** + + - The operation is performed element-by-element. + +- **MDHistoWorkspace + Scalar** or **Scalar + MDHistoWorkspace** + + - The scalar is subtracted from every element of the + MDHistoWorkspace. The squares of errors are summed. + +MDEventWorkspaces +~~~~~~~~~~~~~~~~~ + +This algorithm operates similary to calling Plus on two +`EventWorkspaces `__: it combines the events from the +two workspaces together to form one large workspace. + +Note for file-backed workspaces +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The algorithm uses :ref:`_algm-CloneMDWorkspace` to create the +output workspace, except when adding in place (e.g. :math:`A = A + B` ). +See :ref:`_algm-CloneMDWorkspace` for details, but note that a +file-backed `MDEventWorkspace `__ will have its file +copied. + +- If A is in memory and B is file-backed, the operation + :math:`C = A + B` will clone the B file-backed workspace and add A to + it. +- However, the operation :math:`A = A + B` will clone the A workspace + and add B into memory (which might be too big!) + +Also, be aware that events added to a MDEventWorkspace are currently +added **in memory** and are not cached to file until :ref:`_algm-SaveMD` +or another algorithm requiring it is called. The workspace is marked as +'requiring file update'. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst new file mode 100644 index 000000000000..b9c0853dc378 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst @@ -0,0 +1,43 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Divides the data spectra by the matching vanadium spectra according to +the following formula: + +:math:`(y_i)_{Norm}=(\frac{y_i}{v_i})*\Delta w_i*\frac{\sum_i{y_i}}{\sum_i((\frac{y_i}{v_i})\Delta w_i)}` + +where :math:`y_i` is the signal in the sample workspace, :math:`v_i` the +count in the corresponding vanadium bin, :math:`\Delta w_i` the bin +width, :math:`\sum_i{y_i}` the integrated data count and +:math:`\sum_i((\frac{y_i}{v_i})\Delta w_i)` the sum of the sample counts +divided by the vanadium counts multiplied by the bin width. + +This leads to a normalised histogram which has unit of counts, as +before. + +In order to minimise sudden jumps in the data caused by 0 counts in the +corresponding vanadium spectrum it is worth considering smoothing the +Vanadium spectrum using :ref:`_algm-SmoothData` prior to using it in +this algorithm. + +Valid input workspaces +~~~~~~~~~~~~~~~~~~~~~~ + +The input workspaces have to have the following in order to be valid +inputs for this algorithm. + +- The same number of spectra +- Matching spectra numbers + +This is normally not a problem unless the setup of the instrument has +been changed between recording the Vanadium and the sample datasets. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoissonErrors-v1.rst b/Code/Mantid/docs/source/algorithms/PoissonErrors-v1.rst new file mode 100644 index 000000000000..d7fb43fe6e15 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoissonErrors-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Takes a Data workspace and an original counts workspace input and +updates the error values in the data workspace to be the same +fractionally as the counts workspace. The number of histograms, the +binning and units of the two workspaces must match. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiAutoCorrelation-v5.rst b/Code/Mantid/docs/source/algorithms/PoldiAutoCorrelation-v5.rst new file mode 100644 index 000000000000..40e9e719123c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiAutoCorrelation-v5.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +PoldiAutoCorrelation belongs to the family of algorithms used to analyze +POLDI data. It performs the auto-correlation method described in the +POLDI concept paper. + +It's possible to apply it to a workspace containing raw data from a +single run or a workspace with merged data from several measurements. +The only requirement is that a correctly configured POLDI instrument is +present in the workspace and that its parameters (detector definition, +chopper parameters, etc.) are in accordance with data dimensions. + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiFitPeaks1D-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiFitPeaks1D-v1.rst new file mode 100644 index 000000000000..e64550d5c16b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiFitPeaks1D-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +PoldiFitPeaks1D takes a TableWorkspace with peaks (for example from +:ref:`_algm-PoldiPeakSearch`) and a spectrum from +:ref:`_algm-PoldiAutoCorrelation` and tries to fit a +Gaussian peak profile to the spectrum for each peak. Usually, the peaks +are accompanied by a quadratic background, so this is fitted as well. + +The implementation is very close to the original POLDI analysis software +(using the same profile function). One point where this routine differs +is error calculation. In the original program the parameter errors were +adjusted by averaging :math:`\chi^2`-values, but this does not work +properly if there is an outlier caused by a bad fit for one of the +peaks. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiLoadChopperSlits-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiLoadChopperSlits-v1.rst new file mode 100644 index 000000000000..2de439a3c5fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiLoadChopperSlits-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiLoadIPP-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiLoadIPP-v1.rst new file mode 100644 index 000000000000..2de439a3c5fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiLoadIPP-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiLoadLog-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiLoadLog-v1.rst new file mode 100644 index 000000000000..2de439a3c5fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiLoadLog-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiLoadSpectra-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiLoadSpectra-v1.rst new file mode 100644 index 000000000000..2de439a3c5fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiLoadSpectra-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiMerge-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiMerge-v1.rst new file mode 100644 index 000000000000..95fadd7adea6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiMerge-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +PoldiMerge takes a list of workspace names and adds the counts, +resulting in a new workspace. The difference to Plus is that it performs +some POLDI-specific tests that determine whether merging those files is +sensible or not. The following requirements have to be fulfilled: + +- The time-binning (x-data) of all workspaces must match (offset as + well as width of time bins) +- These quantities from the sample log: + + - Position of the sample table (x, y and z) + - Rotation speed of the chopper + +The algorithm does not perform partial summation - if any of the +workspaces does not fulfill the criteria, the intermediate result is +discarded. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiPeakDetection-v2.rst b/Code/Mantid/docs/source/algorithms/PoldiPeakDetection-v2.rst new file mode 100644 index 000000000000..2de439a3c5fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiPeakDetection-v2.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiPeakSearch-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiPeakSearch-v1.rst new file mode 100644 index 000000000000..929792eaecd2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiPeakSearch-v1.rst @@ -0,0 +1,61 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +PoldiPeakSearch is a peak-finding routine for POLDI auto-correlation +data. The algorithm is implemented according to the original data +analysis software and their results match closely. + +The algorithm performs the following steps: + +#. Map each point of the spectrum :math:`y`, except the first and the + last to the sum of its value and its neighbor's values: + +| ``   ``\ :math:`y'_i = y_{i-1} + y_{i} + y_{i+1}` +| `` The new spectrum ``\ :math:`y'`\ `` contains ``\ :math:`n-2`\ `` points when ``\ :math:`y`\ `` contains ``\ :math:`n`\ ``.`` + +#. Identify peak positions in :math:`y'`, which is done with a recursive + algorithm, consisting of these steps: + + #. Find the position of the maximum, :math:`i_{max}` in the list, + store in peak-list. + #. Split the list in two parts, + :math:`[i_{0} + \Delta, i_{max} - \Delta)` and + :math:`(i_{max} + \Delta, i_{n} - \Delta]`, + +where :math:`\Delta` is the mininum number of data points between two +peaks. + +#. + + #. If ranges are valid, perform algorithm on each of the sublists, + append returned lists to peak-list. + #. Return peak-list. + +#. Sort list by value in descending order, keep the first + :math:`N_{max}` items of the list. +#. Map peak positions from :math:`y'` back to :math:`y` +#. Perform background and fluctuation estimation: + + #. Extract all points from :math:`y` (except the first and the last) + that are further than :math:`\Delta` elements away from any peak + position + #. Calculate median of these points as location estimate + (:math:`\bar{b}`) + #. Calculate Sn as scale estimator (:math:`\bar(s)`) + +#. Estimate peak intensity as :math:`y_{i}` +#. If a minimum peak height is set, discard all peaks that are smaller + than this, if not, discard all peaks that are lower than + :math:`3\cdot\bar{s} + \bar{b}` + +The peaks are stored in a new table workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiProjectAddDir-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiProjectAddDir-v1.rst new file mode 100644 index 000000000000..2de439a3c5fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiProjectAddDir-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiProjectAddFile-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiProjectAddFile-v1.rst new file mode 100644 index 000000000000..2de439a3c5fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiProjectAddFile-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst new file mode 100644 index 000000000000..310220e2b07a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst @@ -0,0 +1,227 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +PoldiProjectRun algorithm is used to analyze a bunch of POLDI raw data +files, following a standard POLDI analysis process. This algorithm take +as parameter a tableMatrix with a list of the sample to analyze, and for +each sample a bunch of setup information for the different algorithms +(such as the data file path, etc...). + +This tableWorkspace can be built easily using the two algorithms +:ref:`_algm-PoldiProjectAddFile` and +:ref:`_algm-PoldiProjectAddDir`, which will create and/or +fill properly a targeted tableWorkspace. The needed columns and there +content are describe in the following `Data +Manager `__ paragraph. + +- WIKI\_USAGE\* + +The algorithm is used the classical way. Only one parameter is +compulsory. + +``OutputWorkspace = PoldiProjectRun(InputWorkspace=sample_manager_ws)`` + +- WIKI\_USAGE\* + +Data are processed alone, or grouped together. For each acquisition +file, setup information have to be loaded. During the data treatment +process, transitional workspace are created. + +In a close future, it will possible to share different workspace between +data-file: for example when one knows that some acquisitions should be +strictly the same, auto-correlation and peak detection could be done +only one for all the data. + +Data manager +~~~~~~~~~~~~ + +A MatrixWorkspace is created to store all the information about +data-files and the future workspace needed during the analysis. The +stored information are: + +- spl Name - name of the sample, extract from the sample + ``file name, without the extension `` + +- year - year of the acquisition +- number - id number of the acquisition +- data file - full path of the data file +- spl log - name of the MatrixWorkspace where the data log are loaded +- spl corr - name of the MatrixWorkspace where the + ``correlated spectra is loaded`` + +- spl dead wires - name of the MatrixWorkspace where the + ``dead wires are loaded `` + +- spl peak - name of the MatrixWorkspace where the + ``detected peak information are stored `` + +POLDI setup manager +~~~~~~~~~~~~~~~~~~~ + +For each acquisition file, the IDF are loaded: + +- Instrument Definition files - The POLDI instrument geometry. +- Instrument Parameters files - The setup parameters + ``for the data, at t he time of the acquisition. `` + +The POLDI setup informations can be shared between acquisition obtained +during the same beam-time. While loading each instrument files, the +different POLDI configurations used are stored in a MatrixWorkspace +(most often, there is only one per year), with an example of data. The +needed POLDI setup informations will then be extracted from the IDF of +each of these example sample. + +Therefore each POLDI setup are loaded only once and shared between the +different data files. + +Analysis steps +~~~~~~~~~~~~~~ + +Loading the data +^^^^^^^^^^^^^^^^ + +Each data-file is loaded on a 2DWorkspace. The associated log and setup +information are loaded in dedicated workspace as specified in the +sample-manager TableWorkspace. + + :ref:`_algm-LoadSINQFile` + +The raw data are loaded in a 2DWorkspace, using the generic file-loader +for SINQ data, given the instrument name *POLDI* as parameter. + +| ``LoadSINQFile(Instrument      = "POLDI", `` +| ``             Filename        = sample_file_path, `` +| ``             OutputWorkspace = sample_name)`` + + :ref:`_algm-PoldiLoadLog` + +The associated *logs* informations are extracted from the *hdf* raw data +file, an store in a dedicated MatrixWorkspace. A dictionary file +contains the set of key/path to extract and store all the needed +information. More specifically, the acquisition starting time is +extracted and store in the sample WS to initialize the *run\_start* +variable. + +| ``PoldiLoadLog(InputWorkspace = sample_output_ws, `` +| ``             Filename       = sample_file_path, `` +| ``             Dictionary     = poldi_dictionnary_file_path, `` +| ``             PoldiLog       = sample_log_ws)`` + + :ref:`_algm-LoadInstrument` + +For each raw data WS, the corresponding IDF is loaded, based on the +acquisition starting time. + +| ``LoadInstrument(Workspace         = sample_output_ws, `` +| ``               InstrumentName    = "Poldi", `` +| ``               RewriteSpectraMap = True)`` + + :ref:`_algm-PoldiRemoveDeadWires` + +Some wires are permanently dead and should not be taken into account. +They are listed in the IDF of a given setup (IPP). Some others wires +should not be used, because they seem untrustable (dead wires, hot +wires, random behavior,...). These wires are detected by successive +comparison with there neighbors: intensity from two successive wires +should not differ more than *BadWiresThreshold*\ (\*100)%. One by one, +the most deviant wires are checks and removed until they all fit the +condition. + +| ``PoldiRemoveDeadWires(InputWorkspace      = sample_output_ws, `` +| ``                     RemoveExcludedWires = True, `` +| ``                     AutoRemoveBadWires  = True, `` +| ``                     BadWiresThreshold   = BadWiresThreshold, `` +| ``                     PoldiDeadWires      = sample_dead_wires_ws)`` + +Loading POLDI parameters +^^^^^^^^^^^^^^^^^^^^^^^^ + +While loading the data, the different needed setup have been store in a +dedicated workspace. + +they are now all extracted, using an example sample for each of them. + + :ref:`_algm-PoldiLoadChopperSlits` + +The chopper configuration is loaded in a dedicated Workspace, one per +*Poldi IPP* setup detected. + +| ``PoldiLoadChopperSlits(InputWorkspace    = ex_of_sample_ws, `` +| ``                      PoldiChopperSlits = ipp_chopper_slits)`` + + :ref:`_algm-PoldiLoadSpectra` + +The characteristic Poldi spectra (*Intensity=f(wavelength)*) is +extracted from each IDF. + +| ``PoldiLoadSpectra(InputWorkspace = ex_of_sample_ws, `` +| ``                 PoldiSpectra   = ipp_Poldi_spectra)`` + + :ref:`_algm-PoldiLoadIPP` + +Local setup information (such as the detector position, chopper offset, +etc...) are extracted and stores in a dedicated workspace. + +| ``PoldiLoadIPP(InputWorkspace = ex_of_sample_ws, `` +| ``             PoldiIPP       = ipp_ipp_data)`` + +Pre-analyzing data +^^^^^^^^^^^^^^^^^^ + +In order to setup the 2D fit to analyze the data, some information need +to be extracted from the file, such as an idea of the peaks position. +This is done using an autocorrelation function, following by a peak +detection algorithm. + +The process has been cut in different algorithm in order to give the +possibility to change/improve/modify each steps. For example, the peak +detection process can be based on some previous results to not start +from scratch, or given the sample crystal structure/symetries/space +group... + + :ref:`_algm-PoldiAutoCorrelation` + +Almost all the previous loaded workspace are used by this algorithm. +From the sample manager workspace, and the Poldi setup workspace, all +the targeted workspace can be found and given as parameters to the +algorithm. The auto-correlated graph is store in a dedicated workspace, +on row (0). + +| ``PoldiAutoCorrelation(InputWorkspace    = sample_output_ws, `` +| ``                     PoldiSampleLogs   = sample_log_ws, `` +| ``                     PoldiDeadWires    = sample_dead_wires_ws, `` +| ``                     PoldiChopperSlits = ipp_chopper_slits, `` +| ``                     PoldiSpectra      = ipp_Poldi_spectra, `` +| ``                     PoldiIPP          = ipp_ipp_data, `` +| ``                     wlenmin           = wlen_min,`` +| ``                     wlenmax           = wlen_max, `` +| ``                     OutputWorkspace   = sample_correlated_ws)`` +| ``                 `` + + :ref:`_algm-PoldiPeakDetection` + +The previous autocorrelation function is analyzed to detected possible +peaks. The found peak are stored in a dedicated workspace, and added to +the previously created *sample\_correlated\_ws*: on row (1) the detected +peak, on row (2) the fitted peak. + +| ``PoldiPeakDetection(InputWorkspace         = sample_correlated_ws,`` +| ``                   PeakDetectionThreshold = PeakDetectionThreshold,`` +| ``                   OutputWorkspace        = sample_peak_ws)`` + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiRemoveDeadWires-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiRemoveDeadWires-v1.rst new file mode 100644 index 000000000000..2de439a3c5fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PoldiRemoveDeadWires-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to proceed +POLDI data. The introductions can be found in the wiki page of +:ref:`_algm-PoldiProjectRun`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PolynomialCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/PolynomialCorrection-v1.rst new file mode 100644 index 000000000000..aac10373bfe8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PolynomialCorrection-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Corrects the data and error values on a workspace by the value of a +polynomial function: + +.. math:: {\rm C0} + {\rm C1} x + {\rm C2} x^2 + ... + +which is evaluated at the *x* value of each data point (using the +mid-point of the bin as the *x* value for histogram data. The data and +error values are multiplied or divided by the value of this function. +The order of the polynomial is determined by the length of the +Coefficients property, which can be of any length. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Power-v1.rst b/Code/Mantid/docs/source/algorithms/Power-v1.rst new file mode 100644 index 000000000000..aae191874f7f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Power-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm will raise the InputWorkspace to the power of the +Exponent. When acting on an event workspace, the output will be a +Workspace2D, with the default binning from the original workspace. + +Errors +------ + +Defining the power algorithm as: :math:`y = \left ( a^b \right )`, we +can describe the error as: :math:`s_{y} = by\left ( s_{a}/a \right )`, +where :math:`s_{y}` is the error in the result *y* and :math:`s_{a}` is +the error in the input *a*. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PowerLawCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/PowerLawCorrection-v1.rst new file mode 100644 index 000000000000..e3feaf67b8eb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PowerLawCorrection-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm corrects the data and error values on a workspace by the +value of an function of the form :math:`C0 \times x^{C1}`. This formula +is calculated for each data point, with the value of *x* being the +mid-point of the bin in the case of histogram data. The data and error +values are multiplied by the value of this function. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PowerMD-v1.rst b/Code/Mantid/docs/source/algorithms/PowerMD-v1.rst new file mode 100644 index 000000000000..7cac5e4b553f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PowerMD-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This executes the power function on a MDHistoWorkspace. + +The signal :math:`a` becomes :math:`f = a^b` + +The error :math:`da` becomes :math:`df^2 = f^2 * b^2 * (da^2 / a^2)` + +This algorithm cannot be run on a +`MDEventWorkspace `__. Its equivalent on a +`MatrixWorkspace `__ is called :ref:`_algm-Power`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PredictFractionalPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/PredictFractionalPeaks-v1.rst new file mode 100644 index 000000000000..2690ec39b4da --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PredictFractionalPeaks-v1.rst @@ -0,0 +1,37 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This Algorithm creates a PeaksWorkspace with peaks occurring at specific +fractional offsets from h,k,or l values. + +There are options to create Peaks offset from peaks from the input +PeaksWorkspace, or to create peaks offset from h,k, and l values in a +range. Zero offsets are allowed if some or all integer h,k, or l values +are desired + +The input PeaksWorkspace must contain an orientation matrix and have +been INDEXED by THIS MATRIX when the new peaks are not created from a +range of h ,k, and l values + +Example usage +~~~~~~~~~~~~~ + +from mantidsimple import \* PeaksWrkSpace=mtd["PeaksQa"] + +#. Can be created via PredictPeaks( then do NOT use next line) + +FindUBUsingFFT(PeaksWrkSpace,3,15,.12) IndexPeaks(PeaksWrkSpace,.12,1) +PredictFractionalPeaks(PeaksWrkSpace,"FracPeaks","-.5,0,.5","-.5,.5","0") + +#. NOTE: There are editing options on PeaksWorkspaces, like combining 2 + PeaksWorkspaces. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst new file mode 100644 index 000000000000..9cc4b010a6f8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst @@ -0,0 +1,49 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm will predict the position of single-crystal diffraction +peaks (both in detector position/TOF and Q-space) and create an output +`PeaksWorkspace `__ containing the result. + +This algorithm uses the InputWorkspace to determine the instrument in +use, as well as the UB Matrix and Unit Cell of the sample used. You can +use the :ref:`_algm-CopySample` algorithm (with CopyLattice=1) to +copy a UB matrix from a PeaksWorkspace to another workspace. + +The algorithm operates by calculating the scattering direction (given +the UB matrix) for a particular HKL, and determining whether that hits a +detector. The Max/MinDSpacing parameters are used to determine what +HKL's to try. + +The parameters of WavelengthMin/WavelengthMax also limit the peaks +attempted to those that can be detected/produced by your instrument. + +Using HKLPeaksWorkspace +~~~~~~~~~~~~~~~~~~~~~~~ + +If you specify the HKLPeaksWorkspace parameter, then the algorithm will +use the list of HKL in that workspace as the starting point of HKLs, +instead of doing all HKLs within range of Max/MinDSpacing and +WavelengthMin/WavelengthMax. + +A typical use case for this method is to use +:ref:`_algm-FindPeaksMD` followed by :ref:`_algm-IndexPeaks` to +find the HKL of each peak. The HKLs found will be floats, so specify +RoundHKL=True in PredictPeaks to predict the position at the exact +integer HKL. This may help locate the center of peaks. + +Another way to use this algorithm is to use +:ref:`_algm-CreatePeaksWorkspace` to create a workspace +with the desired number of peaks. Use python or the GUI to enter the +desired HKLs. If these are fraction (e.g. magnetic peaks) then make sure +RoundHKL=False. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PreprocessDetectorsToMD-v1.rst b/Code/Mantid/docs/source/algorithms/PreprocessDetectorsToMD-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/PreprocessDetectorsToMD-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ProcessBackground-v1.rst b/Code/Mantid/docs/source/algorithms/ProcessBackground-v1.rst new file mode 100644 index 000000000000..3148a929baf1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ProcessBackground-v1.rst @@ -0,0 +1,55 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm ProcessBackground() provides several functions for user to +process background to prepare Le Bail Fit. + +Simple Remove Peaks +^^^^^^^^^^^^^^^^^^^ + +This algorithm is designed for refining the background based on the +assumption that the all peaks have been fitted reasonably well. Then by +removing the peaks by function 'X0 +/- n\*FWHM', the rest data points +are background in a very high probability. + +An arbitrary background function can be fitted against this background +by standard optimizer. + +Automatic Background Points Selection +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This feature is designed to select many background points with user's +simple input. User is required to select only a few background points in +the middle of two adjacent peaks. Algorithm will fit these few points +(*BackgroundPoints*) to a background function of specified type. + +Examples +-------- + +Selecting background +^^^^^^^^^^^^^^^^^^^^ + +Here is a good example to select background points from a powder +diffraction pattern by calling ProcessBackground() in a self-consistent +manner. + +| ``1. Select a set of background points (X values only), which can roughly describes the background, manually;`` +| ``2. Call ProcessBackground with Option='SelectBackgroundPoints' and SelectionMode='UserSpecifyBackground'.`` +| ``   A good choice for background function to enter is 6-th order polynomial;`` +| ``3. Plot spectra 2 to 4 in UserBackgroundWorkspace to check whether 'Tolerance' is proper or not.`` +| ``   If not then reset the tolerance and run ProcessBackground again with previous setup;`` +| ``4. Fit OutputWorkspace (the selected background) with a background function;`` +| ``5. Call ProcessBackground with Option='SelectBackgroundPoints' and SelectionMode='UserFunction'.`` +| ``   Set the background parameter workspace as the output parameter table workspace obtained in the last step;`` +| ``6. Repeat step 4 and 5 for a few times until the background plot by fitted background function`` +| ``   from selected background points is close enough to real background.`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ProcessDasNexusLog-v1.rst b/Code/Mantid/docs/source/algorithms/ProcessDasNexusLog-v1.rst new file mode 100644 index 000000000000..fc6f245fafb9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ProcessDasNexusLog-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Some sample logs from DAS are written in the format such that the time +stamps are the pulse times and the values are time-of-flight. They are +usually used to record some mono-value sample log such as turning on or +off of a sample environment device. This algorithm will convert sample +logs of this time such that the new log will have the time stamp as the +absolute time, i.e., sum of pulse time and time-of-flight. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ProjectMD-v1.rst b/Code/Mantid/docs/source/algorithms/ProjectMD-v1.rst new file mode 100644 index 000000000000..736f3df53fee --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ProjectMD-v1.rst @@ -0,0 +1,35 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Description +----------- + +ProjectMD reduces the dimensionality of a MHDistoWorkspace by summing it +along a specified dimension. Example: you have a 3D MDHistoWorkspace +with X,Y,TOF. You sum along Z (TOF) and the result is a 2D workspace X,Y +which gives you a detector image. + +Besides the obvious input and output workspaces you have to specify the +dimension along which you wish to sum. The following code is used: + +X + Dimension 0 +Y + Dimension 1 +Z + Dimension 2 +K + Dimension 3 + +The summation range also has to be specified. This is in indices into +the appropriate axis. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Q1D-v2.rst b/Code/Mantid/docs/source/algorithms/Q1D-v2.rst new file mode 100644 index 000000000000..cc7549a14b6d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Q1D-v2.rst @@ -0,0 +1,208 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Q Unit Conversion +~~~~~~~~~~~~~~~~~ + +The equation for :math:`Q` as function of wavelength, :math:`\lambda`, +and neglecting gravity, is + +.. math:: Q = \frac{4\pi}{\lambda} sin(\theta) + +where :math:`2 \theta` is the particle's angle of deflection. If a +particle's measured deflection over the sample to the detector (pixel) +distance, :math:`L_2`, is :math:`x` along the x-axis and :math:`y` along +the y-axis then :math:`\theta` is + +.. math:: \theta = \frac{1}{2} arcsin\left (\frac{\sqrt{x^2+y^2}}{L_2} \right ) + +Including gravity adds another term to this equation which becomes: + +.. math:: \theta = \frac{1}{2} arcsin\left (\frac{ \sqrt{x^2+\left (y+\frac{gm^2}{2h^2} \lambda^2 L_2^2 \right)^2}}{L_2} \right ) + +where :math:`m` is the particle's mass, :math:`g` is the acceleration +due to gravity and :math:`h` is `plank's +constant `__ (this assumes +neutrons are all travelling in horizontal at sample, and that +:math:`x=y=0` would be beam centre at :math:`\lambda = 0`). + +Normalized Intensity +~~~~~~~~~~~~~~~~~~~~ + +This `algorithm `__ takes a workspace of number of neutron +counts against `wavelength `__ and creates a workspace of cross +section against Q. The output Q bins boundaries are defined by setting +the property OutputBinning. + +Below is the formula used to calculate the cross section, +:math:`P_I(Q)`, for one bin in the output workspace whose bin number is +denoted by I, when the input workspace has just one detector. Each bin +is calculated from the sum of all input wavelength bins, n, that +evaluate to the same Q using the formula for Q at the top of this page. +In equations this relationship between the input bins and the output +bins is represented by :math:`n \supset I` and an example of a set of +two bins is shown diagrammatically below. |Each Q bin contains the sum +of many, one, or no wavelength bins\|centre| + +In the equation the number of counts in the input spectrum number is +denoted by :math:`S(n)`, :math:`N(n)` is the wavelength dependent +correction and :math:`\Omega` is the `solid angle `__ of the +detector + +.. math:: P_I(Q) = \frac{ \sum_{n \supset I} S(n)}{\Omega\sum_{n \supset I}N(n)} + +The wavelength dependent correction is supplied to the algorithm through +the WavelengthAdj property and this workspace must have the same +wavelength binning as the input workspace and should be equal to the +following: + +.. math:: N(n) = M(n)\eta(n)T(n) + +where :math:`M`, :math:`\eta` and :math:`T` are the monitor counts, +detector efficiency and transmission fraction respectively. + +Normally there will be many spectra each from a different pixel with a +row number :math:`i` and column number :math:`j`. Because the value of +:math:`\theta` varies between pixels corresponding input bins (n) from +different input spectra can contribute to different output bins (I) i.e. +:math:`n \supset I` will be different for different pixels. For multiple +spectra the sum for each output bin will be over the set of input bins +in each pixel that have the correct Q, that is +:math:`\{i, j, n\} \supset \{I\}` while :math:`\Omega_{i j}` is detector +dependent: + +.. math:: P_I(Q) = \frac{\sum_{\{i, j, n\} \supset \{I\}} S(i,j,n)}{\sum_{\{i, j, n\} \supset \{I\}}M(n)\eta(n)T(n)\Omega_{i j}F_{i j}} + +where :math:`F` is the detector dependent (e.g. flood) scaling specified +by the PixelAdj property, and where a :math:`\lambda` bin :math:`n` +spans more than one :math:`Q` bin :math:`I`, it is split assuming a +uniform distribution of the counts in :math:`\lambda`. The normalization +takes any `bin masking `__ into account. + +Although the units on the y-axis of the output workspace space are +quoted in 1/cm note that conversion to a cross section requires scaling +by an `instrument `__ dependent absolute units constant. + +Resolution and Cutoffs +~~~~~~~~~~~~~~~~~~~~~~ + +There are two sources of uncertainty in the intensity: the statistical +(counting) error and the finite size of the bins, i.e. both time bins +and the spatial extent of the detectors (pixels). The first error is +reducible by increasing the length of the experiment or bin sizes while +the second reduces with smaller bin sizes. The first is represented by +the errors on the output workspace but the second is not included in the +error calculation although it increases uncertainties and degrades the +effective resolution of the data none the less. This algorithm allows +the resolution to be improved by removing the bins with the worst +resolution. + +Normally the bins that give the worst resolution are those near the beam +center and with short wavelengths. When the optional properties +:math:`RadiusCut` and :math:`WaveCut` are set bins from this region of +the input workspace are removed from the intensity calculation (both +from the numerator and denominator). For a pixel at distance R from the +beam center the wavelength cutoff, :math:`W_{low}`, is defined by the +input properties :math:`RadiusCut` and :math:`WaveCut` as: + +.. math:: W_{low} = \frac{WaveCut (RadiusCut-R)}{RadiusCut} + +The bin that contains the wavelength :math:`W_{low}` and all lower +indices are excluded from the summations for that detector pixel. + +From the equation it is possible to see that for pixels in +:math:`R > RadiusCut` all (positive) wavelengths are included. Also +substituting :math:`WaveCut = W_{low}` we have that :math:`R = 0` and +hence all detectors contribute at wavelengths above :math:`WaveCut`. + +*Practically, it is more likely to be necessary to implement +:math:`RadiusCut` and :math:`WaveCut` in situations where the scattering +near to the beamstop is weak and 'contaminated' by short wavelength +scatter. This might arise, for example, when running at long +sample-detector distances, or at short sample-detector distances with +large diameter beams, or where the sample generates Bragg peaks at +low-Q. The best recourse is to check the wavelength overlap. If it is +not too bad it may be possible to improve the data presentation simply +by altering :math:`Q{min}` and the binning scheme.* + +**References** + +`R.P. Hjelm Jr. *J. Appl. Cryst.* (1988), 21, +618-628 `__. + +`P.A. Seeger & R.P. Hjelm Jr. *J. Appl. Cryst.* (1991), 24, +467-478 `__. + +Variations on applying the normalization +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is possible to divide the input workspace by the WavelenghAdj and +PixelAdj workspaces prior to calling this algorithm. The results will be +same as if these workspaces were passed to Q1D instead when there are +high numbers of particle counts. However, in this scheme the +probabilities tend to converge on the true high count probabablities +more slowly with increasing number of counts and so the result is less +accuate. + +Depending on the input and output bins there could be a significant +difference in CPU time required by these two methods. + +References +~~~~~~~~~~ + +Calculation of Q is from Seeger, P. A. and Hjelm, R. P. Jr, "Small-Angle +Neutron Scattering at Pulsed Spallation Sources" (1991) J. Appl **24** +467-478 + +Previous Versions +----------------- + +Version 1 +~~~~~~~~~ + +Before July 2011 the intensity was calculated with an equation like the +following: + +.. math:: P_I(Q) = \frac{ \sum_{\{i, j, n\} \supset \{I\}}G(i,j,n) }{ \sum_{\{i, j, n\} \supset \{I\}} \Omega_{i j} } + +where G is the input workspace normally related to the raw counts +workspace as: + +.. math:: G(i,j,n) = S(i,j,n)/(M(n)\eta(n)T(n)F_{i j}) + +That is the normalization was performed before the Q calculation which +gives the same probilities at high numbers of particles counts but +weighted noisy, low count data too highly, giving more noise in +:math:`P_I(Q)`. + +The error was calculation did not include the errors due the +normalization or any corrections. + +Properties +^^^^^^^^^^ + ++---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Order | Name | Direction | Type | Default | Description | ++=========+=====================+=============+===================+=============+===========================================================================================================================================================+ +| 1 | InputWorkspace | Input | MatrixWorkspace | Mandatory | The (partly) corrected data in units of wavelength. | ++---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 2 | InputForErrors | Input | MatrixWorkspace | Mandatory | The workspace containing the counts to use for the error calculation. Must also be in units of wavelength and have matching bins to the InputWorkspace. | ++---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 3 | OutputWorkspace | Output | MatrixWorkspace | Mandatory | The workspace name under which to store the result histogram. | ++---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 4 | OutputBinning | Input | String | Mandatory | The bin parameters to use for the final result (in the format used by the :ref:`_algm-Rebin` algorithm). | ++---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 5 | AccountForGravity | Input | Boolean | False | Whether to correct for the effects of gravity. | ++---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. |Each Q bin contains the sum of many, one, or no wavelength bins\|centre| image:: Wav_Q_bins.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Q1DWeighted-v1.rst b/Code/Mantid/docs/source/algorithms/Q1DWeighted-v1.rst new file mode 100644 index 000000000000..2f830564ebe9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Q1DWeighted-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Performs azimuthal averaging for a 2D SANS data set by going through +each detector pixel, determining its Q-value, and adding its amplitude +:math:`I` to the appropriate Q bin. For greater precision, each detector +pixel can be sub-divided in sub-pixels by setting the *NPixelDivision* +parameters. Each pixel has a weight of 1 by default, but the weight of +each pixel can be set to :math:`1/\Delta I^2` by setting the +*ErrorWeighting* parameter to True. + +See the `Rebin `__ documentation for +details about choosing the *OutputBinning* parameter. + +See `SANS +Reduction `__ +documentation for calculation details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/QLines-v1.rst b/Code/Mantid/docs/source/algorithms/QLines-v1.rst new file mode 100644 index 000000000000..c1227e68f415 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/QLines-v1.rst @@ -0,0 +1,41 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The model that is being fitted is that of a δ-function (elastic +component) of amplitude :math:`A(0)` and Lorentzians of amplitude +:math:`A(j)` and HWHM :math:`W(j)` where :math:`j=1,2,3`. The whole +function is then convolved with the resolution function. The -function +and Lorentzians are intrinsically normalised to unity so that the +amplitudes represent their integrated areas. + +For a Lorentzian, the Fourier transform does the conversion: +:math:`1/(x^{2}+\delta^{2}) \Leftrightarrow exp[-2\pi(\delta k)]`. If +:math:`x` is identified with energy :math:`E` and :math:`2\pi k` with +:math:`t/\hbar` where t is time then: +:math:`1/[E^{2}+(\hbar / \tau )^{2}] \Leftrightarrow exp[-t /\tau]` and +:math:`\sigma` is identified with :math:`\hbar / \tau`. The program +estimates the quasielastic components of each of the groups of spectra +and requires the resolution file and optionally the normalisation file +created by ResNorm. + +For a Stretched Exponential, the choice of several Lorentzians is +replaced with a single function with the shape : +:math:`\psi\beta(x) \Leftrightarrow exp[-2\pi(\sigma k)\beta]`. This, in +the energy to time FT transformation, is +:math:`\psi\beta(E) \Leftrightarrow exp[-(t/\tau)\beta]`. So \\sigma is +identified with :math:`(2\pi)\beta\hbar/\tau`. The model that is fitted +is that of an elastic component and the stretched exponential and the +program gives the best estimate for the :math:`\beta` parameter and the +width for each group of spectra. + +This routine was originally part of the MODES package. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/QueryAllRemoteJobs-v1.rst b/Code/Mantid/docs/source/algorithms/QueryAllRemoteJobs-v1.rst new file mode 100644 index 000000000000..36aac90dc056 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/QueryAllRemoteJobs-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Query a remote compute resource for all jobs the user has submitted. +Note that the output properties are all arrays. There will be one +element for each job that was found. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/QueryMDWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/QueryMDWorkspace-v1.rst new file mode 100644 index 000000000000..7e35bd496f38 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/QueryMDWorkspace-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm outputs a table workspace containing summary data about +each box within an IMDWorkspace. The table workspace can be used as a +basis for plotting within MantidPlot. + +Format +------ + +- Column 1: Signal (double) +- Column 2: Error (double) +- Column 3: Number of Events (integer) +- Column 4: Coords of box center (string) + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/QueryRemoteFile-v1.rst b/Code/Mantid/docs/source/algorithms/QueryRemoteFile-v1.rst new file mode 100644 index 000000000000..dd59d0696e7d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/QueryRemoteFile-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Retrieve a list of the files associated with the specified transaction +from a remote compute resource. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/QueryRemoteJob-v1.rst b/Code/Mantid/docs/source/algorithms/QueryRemoteJob-v1.rst new file mode 100644 index 000000000000..1b6af39b801a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/QueryRemoteJob-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Query a remote compute resource for a specific job the user has +submitted. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Quest-v1.rst b/Code/Mantid/docs/source/algorithms/Quest-v1.rst new file mode 100644 index 000000000000..c509268a3b48 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Quest-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This is a variation of the stretched exponential option of +`Quasi `__. For each spectrum a fit is performed +for a grid of β and σ values. The distribution of goodness of fit values +is plotted. + +This routine was originally part of the MODES package. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Qxy-v1.rst b/Code/Mantid/docs/source/algorithms/Qxy-v1.rst new file mode 100644 index 000000000000..a67aafa2806f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Qxy-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm rebins a 2D workspace in units of wavelength into 2D Q. +The reduction it performs is the same as that executed by the +:ref:`_algm-Q1D` algorithm, expect performed in 2D instead of 1D. Hence, +for further documentation on how this algorithm works please see +:ref:`_algm-Q1D`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/REFLReprocess-v1.rst b/Code/Mantid/docs/source/algorithms/REFLReprocess-v1.rst new file mode 100644 index 000000000000..c493271a23fa --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/REFLReprocess-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Re-reduce REFL data for an entire experiment using saved parameters + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RadiusSum-v1.rst b/Code/Mantid/docs/source/algorithms/RadiusSum-v1.rst new file mode 100644 index 000000000000..50cd71ab9f46 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RadiusSum-v1.rst @@ -0,0 +1,53 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +RadiusSum sums the counts in rings against radius. + +Below, there is an example of the execution of the RadiusSum to a +Workspace2D where the position of the pixels are not associated to +detector positions, but it is derived from the Axes. + +.. figure:: /images/ExecuteRadiusSum.png + :alt: 800px + + 800px +The image below shows a visual interpretation for the inputs of the +algorithm + +.. figure:: /images/RadiusSumInputs.png + :alt: 300px + + 300px +The Algorithm create **NumBins** rings around the **Centre** point each +one with :math:`width = BinSize` for +:math:`BinSize=\frac{MaxRadius-MinRadius}{NumBins}`. + +The algorithm applies a rudimentary calculation to define the bin for +each that each pixel or detector in the `Workspace2D `__, +but taking its center point. If the center point belongs to one bin, it +is considered that the whole pixel belongs to the bin. The picture +below, shows what does this means. An ideal solution for RadiusSum is +the left image, while the right image is what is current implemented. + +.. figure:: /images/RadiusSumSolutions.png + :alt: 300px + + 300px +Although the images were applied to an image +`Workspace2D `__, the image below shows that it is possible +to apply this algorithm to Workspaces attached to instruments. + +.. figure:: /images/RadiusSumInstrument.png + :alt: 800 px + + 800 px + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RawFileInfo-v1.rst b/Code/Mantid/docs/source/algorithms/RawFileInfo-v1.rst new file mode 100644 index 000000000000..0f6b172689ea --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RawFileInfo-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Extracts run parameters from the `RAW `__ file given as an +input property. If the *GetRunParameters* argument is *True* then a +TableWorkspace is created that contains a column for each value of the +RPB\_STRUCT, i.e. column names such as r\_dur, r\_goodfrm etc. This is +Mantid's version of the **Get** routine in Open Genie. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RayTracerTester-v1.rst b/Code/Mantid/docs/source/algorithms/RayTracerTester-v1.rst new file mode 100644 index 000000000000..8fbc106a6f83 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RayTracerTester-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm to test ray tracer by spraying evenly spaced rays around. Only +for debugging / testing. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ReactorSANSResolution-v1.rst b/Code/Mantid/docs/source/algorithms/ReactorSANSResolution-v1.rst new file mode 100644 index 000000000000..39aa1e3bfaf5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ReactorSANSResolution-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute the resolution in Q according to Mildner-Carpenter. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst b/Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst new file mode 100644 index 000000000000..f246e408b513 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +|Instrument view of grouping using ReadFromFile with +ShowUnselected=True| All of the detectors in each group are given the a +value equal to that of the group number. Unselected detectors are given +a value of 0 if ShowUnselected is true. + +The instrumentView is the best way to visualize the grouping using the +"show Instrument" context menu option on the output workspace. + +.. |Instrument view of grouping using ReadFromFile with ShowUnselected=True| image:: ReadFromFile-Grouping.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RealFFT-v1.rst b/Code/Mantid/docs/source/algorithms/RealFFT-v1.rst new file mode 100644 index 000000000000..62a532dbd6e1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RealFFT-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This is an algorithm for Fourier transfom of real data. It uses the GSL +routines gsl\_fft\_real\_transform and gsl\_fft\_halfcomplex\_inverse. +The result of a forward transform is a two-spectra workspace with the +real and imaginary parts of the transform in position 0 and 1 +correspondingly. Only positive frequencies are given and as a result the +output spectra are twice as short as the input one. + +An input workspace for backward transform must have the form of the +output workspace of the forward algorithm, i.e. have two spectra with +the real part in the first spectrum and the imaginary part in the second +one. The output workspace contains a single spectrum with the real +inverse transform. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Rebin-v1.rst b/Code/Mantid/docs/source/algorithms/Rebin-v1.rst new file mode 100644 index 000000000000..6acb798b2106 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Rebin-v1.rst @@ -0,0 +1,83 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm rebins data with new bin boundaries. The 'params' property +defines new boundaries in intervals :math:`x_i-x_{i+1}\,`. Positive +:math:`\Delta x_i\,` make constant width bins, whilst negative ones +create logarithmic binning using the formula +:math:`x(j+1)=x(j)(1+|\Delta x_i|)\,` + +This algorithms is useful both in data reduction, but also in remapping +`ragged workspaces `__ to a regular set of bin +boundaries. + +Unless the FullBinsOnly option is enabled, the bin immediately before +the specified boundaries :math:`x_2`, :math:`x_3`, ... :math:`x_i` is +likely to have a different width from its neighbours because there can +be no gaps between bins. Rebin ensures that any of these space filling +bins cannot be less than 25% or more than 125% of the width that was +specified. + +Example Rebin param strings +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +-0.0001 + From min(TOF) to max(TOF) among all events in Logarithmic bins of + 0.0001 +0,100,20000 + From 0 rebin in constant size bins of 100 up to 20,000 +2,-0.035,10 + From 10 rebin in Logarithmic bins of 0.035 up to 10 +0,100,10000,200,20000 + From 0 rebin in steps of 100 to 10,000 then steps of 200 to 20,000 + +For EventWorkspaces +~~~~~~~~~~~~~~~~~~~ + +If the input is an `EventWorkspace `__ and the "Preserve +Events" property is True, the rebinning is performed in place, and only +the X axes of the workspace are set. The actual Y histogram data will +only be requested as needed, for example, when plotting or displaying +the data. + +If "Preserve Events" is false., then the output workspace will be +created as a `Workspace2D `__, with fixed histogram bins, +and all Y data will be computed immediately. All event-specific data is +lost at that point. + +For Data-Point Workspaces +~~~~~~~~~~~~~~~~~~~~~~~~~ + +If the input workspace contains data points, rather than histograms, +then Rebin will automatically use the +:ref:`_algm-ConvertToHistogram` and +:ref:`_algm-ConvertToPointData` algorithms before and after +the rebinning has taken place. + +FullBinsOnly option +~~~~~~~~~~~~~~~~~~~ + +If FullBinsOnly option is enabled, each range will only contain bins of +the size equal to the step specified. In other words, the will be no +space filling bins which are bigger or smaller than the other ones. + +This, however, means that specified bin boundaries might get amended in +the process of binning. For example, if rebin *Param* string is +specified as "0, 2, 4.5, 3, 11" and FullBinsOnly is enabled, the +following will happen: + +- From 0 rebin in bins of size 2 **up to 4**. 4.5 is ignored, because + otherwise we would need to create a filling bin of size 0.5. +- **From 4** rebin in bins of size 3 **up to 10**. + +Hence the actual *Param* string used is "0, 2, 4, 3, 10". + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Rebin2D-v1.rst b/Code/Mantid/docs/source/algorithms/Rebin2D-v1.rst new file mode 100644 index 000000000000..0075776556b1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Rebin2D-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The bin parameters are used to form an output grid. A positive +:math:`\Delta x_i\,` makes constant width bins, whilst negative ones +create logarithmic binning using the formula +:math:`x(j+1)=x(j)(1+|\Delta x_i|)\,`. The overlap of the polygons +formed from the old and new grids is tested to compute the required +signal weight for the each of the new bins on the workspace. The errors +are summed in quadrature. + +Requirements +------------ + +The algorithms currently requires the second axis on the workspace to be +a numerical axis so :ref:`_algm-ConvertSpectrumAxis` may +need to run first. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RebinByPulseTimes-v1.rst b/Code/Mantid/docs/source/algorithms/RebinByPulseTimes-v1.rst new file mode 100644 index 000000000000..0e151a850bab --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RebinByPulseTimes-v1.rst @@ -0,0 +1,47 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Rebins an EventWorkspace according to the pulse times of each event +rather than the time of flight :ref:`_algm-Rebin`. The Params inputs may +be expressed in an identical manner to the :ref:`_algm-Rebin` algorithm. +Users may either provide a single value, which is interpreted as the +*step* (in seconds), or three comma separated values *start*, *step*, +*end*, where all units are in seconds, and start and end are relative to +the start of the run. + +The x-axis is expressed in relative time to the start of the run in +seconds. + +This algorithm may be used to diagnose problems with the electronics or +data collection. Typically, detectors should see a uniform distribution +of the events generated between the start and end of the run. This +algorithm allows anomalies to be detected. + +Example of Use +-------------- + +This diagnostic algorithm is particularly useful when coupled with the +Instrument View. In the example below is a real-world usage example +where we were able to highlight issues with data collection on the ISIS +WISH instrument. Some blocks of tubes, where tubes are arranged +vertically, are missing neutrons within large block of pulse time as a +result of data-buffering. After running RebinByPulseTime, we were able +to find both, which banks were affected, as well as the missing pulse +times for each bank. The horizontal slider in the instrument view allows +us to easily integrate over a section of pulse time and see the results +as a colour map. + +.. figure:: /images/RebinByPulseTime.png + :alt: RebinByPulseTime.png + + RebinByPulseTime.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RebinToWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/RebinToWorkspace-v1.rst new file mode 100644 index 000000000000..4214b8d9b7f2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RebinToWorkspace-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Takes an input workspace and alters the binning so that all it's spectra +match that of the **first spectrum** of the second workspace. This +algorithm simply builds a parameter list that is passed to the +:ref:`_algm-Rebin` algorithm, which actually does the work. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Rebunch-v1.rst b/Code/Mantid/docs/source/algorithms/Rebunch-v1.rst new file mode 100644 index 000000000000..4d972c3b79e1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Rebunch-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm rebins data by adding together *n\_bunch* successive bins. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RecordPythonScript-v1.rst b/Code/Mantid/docs/source/algorithms/RecordPythonScript-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RecordPythonScript-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RefLReduction-v1.rst b/Code/Mantid/docs/source/algorithms/RefLReduction-v1.rst new file mode 100644 index 000000000000..c9b6fb88e1da --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RefLReduction-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Liquids Reflectometer (REFL) reduction + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RefReduction-v1.rst b/Code/Mantid/docs/source/algorithms/RefReduction-v1.rst new file mode 100644 index 000000000000..f336fc3d7eb3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RefReduction-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Reflectivity reduction workflow. This workflow algorithm computes the +specular and off-specular reflectivity for both REFM and REFL +instruments. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RefRoi-v1.rst b/Code/Mantid/docs/source/algorithms/RefRoi-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RefRoi-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RefinePowderDiffProfileSeq-v1.rst b/Code/Mantid/docs/source/algorithms/RefinePowderDiffProfileSeq-v1.rst new file mode 100644 index 000000000000..e48da55b5148 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RefinePowderDiffProfileSeq-v1.rst @@ -0,0 +1,76 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The purpose of this algorithm is to provide users a tool to control the +workflow to refine powder diffractometer's peak profile. For +Time-Of-Flight powder diffractometers in SNS, back-to-back exponential +convoluted with pseudo-voigt profile functions are used. The function is +complicated with strong correlated parameters. Thus, the refinement on +these parameters contains multiple steps, within each of which only a +subset of profile parameters are refined. + +In order to control the workflow, there are four major functions +supported by this algorithm + +| ``* ``\ *``Setup``*\ `` : set up a few workspaces that will be used to refine profile parameters in multiple steps;`` +| ``* ``\ *``Refine``*\ `` : select a subset of peak parameters and do Le Bail fit on them;`` +| ``* ``\ *``Save``*\ `` : save the current refinement status and refinement history to a project file;`` +| ``* ``\ *``Load``*\ `` : set up a few workspaces used for refining by loading them from a previously created project file. `` + +Input and output workspaces +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +| ``* InputWorkspace : data workspace containing the diffraction pattern to refine profile parameters with;`` +| ``* SeqControlInfoWorkspace : table workspace used to track refinement; Below is the introduction on the fields/columns of this workspace. `` +| ``    *  "Step" : refinement step.  User can start a refinement from the result of any previous ``\ **``Step``**\ ``; `` +| ``    *  "OutProfile" : name of the table workspace containing refined profile parameters;`` +| ``    *  "OutReflection": name of the table workspace containing Bragg peaks' peak parameters calculated from refined parameters' value; `` +| ``    *  "OutBackgroud": name of the table workspace containing the output background parameters' value; `` +| ``    *  "OutBckgroundParam": name of the output background parameters;`` +| ``    *  "Refine": profile parameters that are refined in this step;`` +| ``    *  "RwpOut": output Rwp from refinement; `` +| ``    *  "LastStep": last step where this step is based on; `` +| ``    *  "RwpIn": input Rwp`` +| ``    *  "InProfile": input profile parameter workspace's name;`` +| ``    *  "InReflection": input Bragg peak parameters workspace' name;`` +| ``    *  "InBackgroud": input background workspace; `` +| ``    *  "InBckgroundParam": input background parameters. `` +| ``* InputProfileWorkspace : table workspace contraining starting values of profile parameters;`` +| ``* InputBraggPeaksWorkspace : table workspace containing the Bragg peaks' information for Le Bail fit;`` +| ``* InputBackgroundParameterWorkspace : table workspace containing the background parameters' value`` + +Supported peak profiles +^^^^^^^^^^^^^^^^^^^^^^^ + +| ``* Neutron Back-to-back exponential convoluted with pseudo-voigt : Fullprof profile 9 and GSAS TOF profile 3;`` +| ``* Thermal neutron Back-to-back exponential convoluted with pseudo-voigt: Fullprof profile 10 (a.k.a. Jason Hodges function). `` + +Supported background types +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +| ``* Polynomial`` +| ``* Chebyshev`` +| ``* FullprofPolynomial`` + +Hint for using +-------------- + +This is just a brief description for how to use this algorithm. + +| ``1. ``\ *``Setup``*\ ``;`` +| ``2. ``\ *``Refine``*\ ``: refine ``\ *``Dtt1``*\ `` and ``\ *``Zero``*\ `` from step 0;`` +| ``3. ``\ *``Refine``*\ ``: reifne ``\ *``Alph0``*\ `` and ``\ *``Beta0``*\ `` from step 1;`` +| ``4. ``\ *``Refine``*\ ``: refine ``\ *``Alph1``*\ `` from step 1 with failure;`` +| ``5. ``\ *``Refine``*\ ``: refine ``\ *``Beta1``*\ `` from step 1 because step 2 fails; `` +| ``6. ``\ *``Refine``*\ ``: refine ``\ *``Sig-1``*\ `` from last step;`` +| ``7. ``\ *``Save``*\ ``: save current work and history to a Nexus file.`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst b/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst new file mode 100644 index 000000000000..cb9b6854a7ce --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst @@ -0,0 +1,64 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm refines the instrumental geometry parameters for powder +diffractomers. The parameters that can be refined are Dtt1, Zero, Dtt1t, +Dtt2t, Zerot, Width and Tcross. + +It serves as the second step to fit/refine instrumental parameters that +will be introduced in Le Bail Fit. It uses the outcome from algorithm +FitPowderDiffPeaks(). + +Mathematics +----------- + +The function to fit is + +TOF\_h = n(Zero + Dtt1\*d) + (1-n)(Zerot + Dtt1t\*d + Dtt2t/d) n = 1/2 +erfc(W\*(1-Tcross/d)) + +The coefficients in this function are strongly correlated to each other. + +Refinement Algorithm +-------------------- + +Two refinement algorithms, DirectFit and MonteCarlo, are provided. + +DirectFit +^^^^^^^^^ + +This is a simple one step fitting. If there is one parameter to fit, +Levenberg Marquart minimizer is chosen. As its coefficients are strongly +correlated to each other, Simplex minimizer is used if there are more +than 1 parameter to fit. + +MonteCarlo +^^^^^^^^^^ + +This adopts the concept of Monte Carlo random walk in the parameter +space. In each MC step, one parameter will be chosen, and a new value is +proposed for it. A constraint fitting by Simplex minimizer is used to +fit the coefficients in new configuration. + +Simulated annealing will be tried as soon as it is implemented in +Mantid. + +Constraint +^^^^^^^^^^ + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with other algorithms to do Le Bail +fit. The introduction can be found in the wiki page of +:ref:`_algm-LeBailFit`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst new file mode 100644 index 000000000000..c2383a1b997d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst @@ -0,0 +1,49 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Reduces a single TOF reflectometry run into a mod Q vs I/I0 workspace. +Performs transmission corrections. Handles both point detector and +multidetector cases. The algorithm can correct detector locations based +on an input theta value. + +Historically the work performed by this algorithm was known as the Quick +script. + +Analysis Modes +~~~~~~~~~~~~~~ + +The default analysis mode is *PointDetectorAnalysis*. Only this mode +supports Transmission corrections (see below). For PointAnalysisMode the +analysis can be roughly reduced to IvsLam = DetectorWS / sum(I0) / +TransmissionWS / sum(I0). The normalization by tranmission run(s) is +optional. Input workspaces are converted to *Wavelength* first via +:ref:`_algm-ConvertUnits`. + +IvsQ is calculated via :ref:`_algm-ConvertUnits` into units of +*MomentumTransfer*. Corrections may be applied prior to the +transformation to ensure that the detectors are in the correct location +according to the input Theta value. Corrections are only enabled when a +Theta input value has been provided. + +Transmission Runs +~~~~~~~~~~~~~~~~~ + +Transmission correction is a normalization step, which may be applied to +*PointDetectorAnalysis* reduction. + +Transmission runs are expected to be in TOF. The spectra numbers in the +Transmission run workspaces must be the same as those in the Input Run +workspace. If two Transmission runs are provided then the Stitching +parameters associated with the transmission runs will also be required. +If a single Transmission run is provided, then no stitching parameters +will be needed. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ReflectometryReductionOneAuto-v1.rst b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOneAuto-v1.rst new file mode 100644 index 000000000000..8f61d06d41a4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOneAuto-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Facade over :ref:`_algm-ReflectometryReductionOne`. +Pulls numeric parameters out of the instrument parameters where +possible. You can override any of these automatically applied defaults +by providing your own value for the input. + +See :ref:`_algm-ReflectometryReductionOne` for more +information on the wrapped algorithm. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Regroup-v1.rst b/Code/Mantid/docs/source/algorithms/Regroup-v1.rst new file mode 100644 index 000000000000..6ba8035d9db6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Regroup-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Regroups data with new bin boundaries to ensure that bins have minimum +width determined by the parameter :math:`\Delta x_i\,`, but ensuring the +bin boundaries are always coincident with original bin boundaries. The +'params' property defines new boundaries in intervals +:math:`x_i-x_{i+1}\,`. Positive :math:`\Delta x_i\,` define constant +minimum bin width, whilst negative ones create logarithmic binning +:math:`x(j+1)=x(j)(1+|\Delta x_i|)\,` + +The difference between Rebin and Regroup is that in the former the data +in the original bins may be divided by the new bin boundaries. In the +latter case, new bins are created only by combining whole bins. This is +true also for the ends of the regrouped array: if the bin boundaries are +990,1010,1030,1050,...,1210, then "params" = "1000,25,1200" yields a +workspace with bin boundaries 1010,1050,1090,1130,1170. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst b/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst new file mode 100644 index 000000000000..dd0c3ba2eeb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst @@ -0,0 +1,59 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm removes bins from a workspace. A minimum and maximum X +value to be removed needs to be provided. This can be in a different +unit to the workspace, in which case it is transformed internally. + +The treatment of the removed bins is slightly different, depending on +where in the spectrum the bins to be removed lie: + +Bins at either end of spectrum +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the workspaces has common X binning for all spectra, then the +:ref:`_algm-CropWorkspace` algorithm will be called as a child +algorithm. This will result in the affected bins (which includes the bin +in which the boundary - XMin or XMax - lies) being removed completely, +leading to the output workspace having fewer bins than the input one. In +the case where the X binning varies from spectrum to spectrum, the bin +values will be set to zero regardless of the setting of the +Interpolation property. + +Bins in the middle of a spectrum +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Interpolation property is applicable to this situation. If it is set +to "Linear" then the bins are set to values calculated from the values +of the bins on either side of the range. If set to "None" then bins +entirely within the range given are set to zero whilst the bins in which +the boundary fall have their values scaled in proportion to the +percentage of the bin's width which falls outside XMin or XMax as +appropriate. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- The input workspace must have a unit set +- The input workspace must contain histogram data + +Related Algorithms +------------------ + +MaskBins +~~~~~~~~ + +:ref:`_algm-MaskBins` will set the data in the desired bins to 0 and +importantly also marks those bins as masked, so that further algorithms +should not include this data in their grouping calculations. This is +particularly used for Diffraction Focussing. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RemoveExpDecay-v1.rst b/Code/Mantid/docs/source/algorithms/RemoveExpDecay-v1.rst new file mode 100644 index 000000000000..749c0255c773 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RemoveExpDecay-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm removes the exponential time decay from a specified muon +spectra. By default, all the spectra in a workspace will be corrected. + +The formula for removing the exponential decay is given by: + +.. math:: NewData = (OldData\times{e^\frac{t}{\tau}})/N_0 - 1.0 + +where τ is the muon lifetime (2.197019e-6 seconds). :math:`N_0` is a +fitted normalisation constant. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RemoveLogs-v1.rst b/Code/Mantid/docs/source/algorithms/RemoveLogs-v1.rst new file mode 100644 index 000000000000..55221d731234 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RemoveLogs-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Removes all logs from workspace, except those that are specified + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RemoveLowResTOF-v1.rst b/Code/Mantid/docs/source/algorithms/RemoveLowResTOF-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RemoveLowResTOF-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RemovePromptPulse-v1.rst b/Code/Mantid/docs/source/algorithms/RemovePromptPulse-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RemovePromptPulse-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RenameLog-v1.rst b/Code/Mantid/docs/source/algorithms/RenameLog-v1.rst new file mode 100644 index 000000000000..1acd5234c47e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RenameLog-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Rename a specified sample log of type TimeSeriesProperty in a given +Workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RenameWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/RenameWorkspace-v1.rst new file mode 100644 index 000000000000..318009e79acb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RenameWorkspace-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Renames a workspace to a different name in the data service. If the same +name is provided for input and output then the algorithm will fail with +an error. The Renaming is implemented as a removal of the original +workspace from the data service and re-addition under the new name. + +If run on a group workspace, the members of the group will be renamed if +their names follow the pattern groupName\_1, groupName\_2, etc. (they +will be renamed to newName\_1, newname\_2, etc.). Otherwise, only the +group itself will be renamed - the members will keep their previous +names. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RenameWorkspaces-v1.rst b/Code/Mantid/docs/source/algorithms/RenameWorkspaces-v1.rst new file mode 100644 index 000000000000..c04dd708d579 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RenameWorkspaces-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Renames a list of workspaces in the data service. This renaming is done +by either replacing with new names in a list or adding a prefix, suffix +or both prefix and suffix. The Renaming is implemented by calling +RenameWorkspace as a child algorithm having defined the output workspace +appropriately. + +If run on a group workspace, the members of the group will be renamed in +the same manner as done by RemameWorkspace. + +The new names can be either explicitly defined by a comma separated list +or by adding a prefix, suffix or both a prefix and suffix. + +**Warning:** No new name can be the same as any existing workspace, even +if that existing workspace is also being renamed. Duplicate names may +cause the loss of a workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ReplaceSpecialValues-v1.rst b/Code/Mantid/docs/source/algorithms/ReplaceSpecialValues-v1.rst new file mode 100644 index 000000000000..f36a51fd4170 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ReplaceSpecialValues-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm searches over all of the values in a workspace and if it +finds a value set to NaN (not a number), infinity or larger than the +'big' threshold given then that value and the associated error is +replaced by the user provided values. + +If no value is provided for either NaNValue, InfinityValue or +BigValueThreshold then the algorithm will exit with an error, as in this +case it would not be checking anything. + +Algorithm is now event aware. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ResNorm-v1.rst b/Code/Mantid/docs/source/algorithms/ResNorm-v1.rst new file mode 100644 index 000000000000..098b16024105 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ResNorm-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The routine varies the width of the resolution file to give a 'stretch +factor' and the area provides an intensity normalisation factor. The +fitted parameters are in the group workspace with suffix \_ResNorm with +additional suffices of Intensity & Stretch. The fitted data are in the +workspace ending in \_ResNorm\_Fit. + +This routine was originally part of the MODES package. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ResampleX-v1.rst b/Code/Mantid/docs/source/algorithms/ResampleX-v1.rst new file mode 100644 index 000000000000..138543dce3db --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ResampleX-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This method will resample the x-axis with the number of specified bins. +If the XMin and XMax parameters are supplied it will use those as the +range, they can be supplied as a comma delimited list or as a single +value. + +The LogBinning option calculates constant delta-X/X binning and rebins +using that. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ResetNegatives-v1.rst b/Code/Mantid/docs/source/algorithms/ResetNegatives-v1.rst new file mode 100644 index 000000000000..6dd56bd93df2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ResetNegatives-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm will search through the input workspace for values less +than zero and make them positive according to the properties. If +"AddMinimum" is "true" then all values will have -1\*min for the +spectrum added to them if the minimum is less than zero. Otherwise all +values that are less than zero will be set to "ResetValue" which has a +default of 0. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ResizeRectangularDetector-v1.rst b/Code/Mantid/docs/source/algorithms/ResizeRectangularDetector-v1.rst new file mode 100644 index 000000000000..bd7753235103 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ResizeRectangularDetector-v1.rst @@ -0,0 +1,37 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm will resize a +`RectangularDetector `__ by applying X and Y +scaling factors. Each pixel's position will be modifed relative to the +0,0 point of the detector by these factors. Typically, a +RectangularDetector is constructed around its center, so this would +scale the detector around its center. + +This only works on `RectangularDetectors `__. Banks +formed by e.g. tubes cannot be scaled in this way. + +Internally, this sets the "scalex" and "scaley" parameters on the +`RectangularDetector `__. Note that the scaling is +relative to the original size, and is not cumulative: that is, if you +Resize \* 2 and again \* 3, your final detector is 3 times larger than +the original, not 6 times. + +Note: As of this writing, the algorithm does NOT modify the shape of +individual pixels. This means that algorithms based on solid angle +calculations might be off. Ray-tracing (e.g. peak finding) are +unaffected. + +See also :ref:`_algm-MoveInstrumentComponent` and +:ref:`_algm-RotateInstrumentComponent` for other ways +to move components. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RetrieveRunInfo-v1.rst b/Code/Mantid/docs/source/algorithms/RetrieveRunInfo-v1.rst new file mode 100644 index 000000000000..4e79a8296d6e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RetrieveRunInfo-v1.rst @@ -0,0 +1,33 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Strips the log property values of "inst\_abrv", "run\_number", +"user\_name", "run\_title" and "hd\_dur" from the specified run files, +and compiles a TableWorkspace of the result. + +Uses multiple calls to +:ref:`_algm-CreateLogPropertyTable` create the final +result table. + +.. figure:: /images/ConvertToEnergyInfoTable.png + :alt: Output workspace generated by inspecting runs 12218-12229 and having the default instrument set to TOSCA. + + Output workspace generated by inspecting runs 12218-12229 and having + the default instrument set to TOSCA. +Limitations +----------- + +Currently, only ISIS instruments with runs that have the *full* list of +log properties are supported. +:ref:`_algm-CreateLogPropertyTable` is available to +those users who wish to "brew their own" version of this algorithm. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RingProfile-v1.rst b/Code/Mantid/docs/source/algorithms/RingProfile-v1.rst new file mode 100644 index 000000000000..c9c1a98f803c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RingProfile-v1.rst @@ -0,0 +1,65 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +RingProfile sums the counts against a ring. + +Below, there is an example of the execution of the RingProfile to a +`Workspace2D `__ where the position of the pixels are not +associated to detector positions, but it is derived from the +`Axes `__. + +.. figure:: /images/ExecuteRingProfile.png + :alt: 800px + + 800px +The image below shows a visual interpretation for the inputs of the +algorithm + +.. figure:: /images/RingProfileInputsView.png + :alt: RingProfileInputsView.png + + RingProfileInputsView.png +The algorithm goes through each pixel and find its distance from the +center. If it relies inside the defined ring, it checks the angle +between the pixel position and the center and uses this information to +define the bin where to put the count for that pixel. + +The RingProfile is also defined for Workspace2D which has the positions +based on the detectors, as you can see in the picture below. + +.. figure:: /images/RingProfileInstrument.png + :alt: 800px + + 800px +In this case, the inputs of the algorithm is like the image below + +.. figure:: /images/Ringprofileinstrument.png + :alt: Ringprofileinstrument.png + + Ringprofileinstrument.png +The algorithm does to each spectrum, get the associated detector from +which it get the positions. From the positions it work out if it belongs +or not to the ring and in which bin it must be placed. It finally +accumulate all the spectrum values inside the target bin. + +It is possible to setup the *StartAngle* from where to starting the Ring +as well as the Sense, if in clockwise direction or anti-clockwise +direction. But, the resulting workspace will always place the bins in a +relative angle position from the start. Which means that for +anti-clockwise sense, the real 3D angle is: + +RealAngle = StartAngle + Angle + +While for clockwise sense, the real 3D angle is: + +RealAngle = StartAngle - Angle + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RotateInstrumentComponent-v1.rst b/Code/Mantid/docs/source/algorithms/RotateInstrumentComponent-v1.rst new file mode 100644 index 000000000000..04224c2265df --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RotateInstrumentComponent-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +RotateInstrumentComponent rotates a component around an axis of rotation +by an angle given in degrees. Rotation by 0 degrees does not change the +component's orientation. The rotation axis (X,Y,Z) must be given in the +co-ordinate system attached to the component and rotates with it. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RunPythonScript-v1.rst b/Code/Mantid/docs/source/algorithms/RunPythonScript-v1.rst new file mode 100644 index 000000000000..7b67c3200820 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/RunPythonScript-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm that will run a snippet of python code. This is meant to be +used by :ref:`_algm-LoadLiveData` to perform some processing. + +The input & output workspaces can be accessed from the Python code using +the variable names 'input' & 'output' respectively. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSAbsoluteScale-v1.rst b/Code/Mantid/docs/source/algorithms/SANSAbsoluteScale-v1.rst new file mode 100644 index 000000000000..74534a07bf9f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSAbsoluteScale-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculate and apply absolute scale correction for SANS data + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSAzimuthalAverage1D-v1.rst b/Code/Mantid/docs/source/algorithms/SANSAzimuthalAverage1D-v1.rst new file mode 100644 index 000000000000..3d906dd20cd8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSAzimuthalAverage1D-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute I(q) for reduced SANS data + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSBeamFinder-v1.rst b/Code/Mantid/docs/source/algorithms/SANSBeamFinder-v1.rst new file mode 100644 index 000000000000..c4486b48581e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSBeamFinder-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Beam finder workflow algorithm for SANS instruments. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSBeamFluxCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/SANSBeamFluxCorrection-v1.rst new file mode 100644 index 000000000000..bca2c39436d7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSBeamFluxCorrection-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Performs beam flux correction for TOF SANS data. + +The correction goes as follows: + + :math:`I({\lambda}) = I_0({\lambda}) / \Phi_{sample}` + +where + + :math:`\Phi_{sample} = \frac{M_{sample}}{M_{ref}} \Phi_{ref}` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSBeamSpreaderTransmission-v1.rst b/Code/Mantid/docs/source/algorithms/SANSBeamSpreaderTransmission-v1.rst new file mode 100644 index 000000000000..41aa9d5ca429 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSBeamSpreaderTransmission-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute transmission using the beam spreader method + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSDirectBeamScaling-v1.rst b/Code/Mantid/docs/source/algorithms/SANSDirectBeamScaling-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSDirectBeamScaling-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSDirectBeamTransmission-v1.rst b/Code/Mantid/docs/source/algorithms/SANSDirectBeamTransmission-v1.rst new file mode 100644 index 000000000000..4dbe7df9f395 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSDirectBeamTransmission-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute transmission using the direct beam method + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSMask-v1.rst b/Code/Mantid/docs/source/algorithms/SANSMask-v1.rst new file mode 100644 index 000000000000..a0106f94e63e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSMask-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Apply mask to SANS detector + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSReduction-v1.rst b/Code/Mantid/docs/source/algorithms/SANSReduction-v1.rst new file mode 100644 index 000000000000..30a06b3a059e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSReduction-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Basic SANS reduction workflow + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSSensitivityCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/SANSSensitivityCorrection-v1.rst new file mode 100644 index 000000000000..e9cbe09d4a6b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSSensitivityCorrection-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This SANS workflow algorithm will compute the sensitivity correction +from a given flood field data set. It will apply the proper corrections +to the data according the the input property manager object. Those +corrections may include dark current subtraction, moving the beam +center, the solid angle correction, and applying a patch. + +If an input workspace is given, the computed correction will be applied +to that workspace. + +A Nexus file containing a pre-calculated sensitivity correction can also +be supplied for the case where we simply want to apply the correction to +an input workspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSSolidAngleCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/SANSSolidAngleCorrection-v1.rst new file mode 100644 index 000000000000..5cdc28538af7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSSolidAngleCorrection-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Performs a solid angle correction on all detector (non-monitor) spectra. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSSubtract-v1.rst b/Code/Mantid/docs/source/algorithms/SANSSubtract-v1.rst new file mode 100644 index 000000000000..2a5cd8e13d34 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSSubtract-v1.rst @@ -0,0 +1,30 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Subtract background from an I(Q) distribution. + +The DataDistribution and Background properties can either be the name of +a workspace or a file path. If a file path is provided, it will be +loaded and assumed to be in units of Q. + +The output workspace will be equal to: + +| `` Output = DataDistribution - ScaleFactor * Background + Constant`` +| `` `` + +The Dq values are propagated from the DataDistribution workspace to the +output workspace as-is. + +If the OutputDirectory property is filled, the output workspace will be +written to disk. Two files will be produced, a 4 column ASCII file and a +CanSAS XML file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst new file mode 100644 index 000000000000..d751e4f1e626 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst @@ -0,0 +1,137 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm Reference Discussion +------------------------------ + +Looking at `Computing guide for Small Angle Scattering +Experiments `__ by +Ghosh, Egelhaaf & Rennie, we see that for scattering at larger angles +the transmission should be modified due to the longer path length after +the scattering event. + +The longer path length after scattering will also slightly increase the +probability of a second scattering event, but this is not dealt with +here. + +If our on-axis transmission is :math:`T_0` through a sample of thickness +:math:`d`, then the transmission at some other thickness :math:`x` is +:math:`\exp(-\mu x)` where attenuation coefficient +:math:`\mu = -\ln( \frac{T_0}{d})`. + +If a neutron scatters at angle :math:`2\theta` at distance :math:`x` +into the sample, its total transmission is then: + +:math:`T^{''} = \exp(-\mu x) \exp( \frac{-\mu(d-x)}{\cos(2\theta)})` + +:math:`T^{''}` should be integrated and averaged between :math:`x = 0` +and :math:`x = d`. + +Hammouda, gives an approximate result for the integral, see page 208 of +`http://www.ncnr.nist.gov/staff/hammouda/the\_SANS\_toolbox.pdf SANS +toolbox `__: + +:math:`T^{'} = \frac{T_0(T_0^A - 1)}{A \ln(T_0)}` + +For: + +:math:`A = \frac{1}{\cos(2\theta)} - 1` + +For example if :math:`T_0 = 0.2` and :math:`2\theta = 40` then +:math:`T^{'} = 0.158`, a shift of :math:`~20`\ % of the SANS curve. Note +that the result is independent of sample thickness. + +:math:`T_0` is a function of neutron wavelength, whilst :math:`A` is a +function of detector pixel location. + +The output of this algorithm is: + +:math:`OutputWorkspace = \frac{T^'}{T_0}` + +Error Propagation +~~~~~~~~~~~~~~~~~ + +The error propagation follows this formula: + +`` ``\ :math:`OutputWorkspace_{error} = \frac{T_{0E} ^A - 1}{A\ln(T_0E)}` + +Which means, that we do not consider the error in the definition of the +:math:`2\theta` (the parameter A) + +Enabling Wide Angle Correction for Reduction of SANS ISIS +--------------------------------------------------------- + +To enable the Wide Angle correction use the User File settings: + +``SAMPLE/PATH/ON`` + +More information on: +`SANS\_User\_File\_Commands#SAMPLE `__ + +SANS ISIS Reduction +------------------- + +The output of SANSWideAngleCorrection is used as WavePixelAdj parameter +at :ref:`_algm-Q1D`. + +Wide Angle Correction and the SANS Reduction +-------------------------------------------- + +The equation for the reduction is (see :ref:`_algm-Q1D`) + +:math:`P_I(Q) = \frac{\sum_{\{i, j, n\} \supset \{I\}} S(i,j,n)}{\sum_{\{i, j, n\} \supset \{I\}}M(n)\eta(n)T(n)\Omega_{i j}F_{i j}}` + +But, :math:`T(n)` is not really :math:`T(n)`, because of the wide +angles, it is now :math:`T(n,theta)` or :math:`T(n,i,j)`. + +So, we decided to have a new factor that changes this equation to: + +:math:`P_I(Q) = \frac{\sum_{\{i, j, n\} \supset \{I\}} S(i,j,n)}{\sum_{\{i, j, n\} \supset \{I\}}M(n)\eta(n)T(n)\Omega_{i j}F_{i j}Corr(i,j,n)}` + +Where Corr (Correction factor) in this case will be: + +:math:`Corr = \frac{T_0^A - 1}{A \ln(T_0)}` + +Which is the OutputWorkspace of SANSWideAngleCorrection. + +This parameter enters inside :ref:`_algm-Q1D` as WavePixelAdj. But, this is +all done for you inside the Reduction Script. + +Comparison with Wide Angle Correction at SNS +-------------------------------------------- + +The transmission correction applied at SNS is described +`here `__, +and it is applied through the +:ref:`_algm-ApplyTransmissionCorrection` algorithm. +The correction applied there is an approximation for the same equations +described here. The picture above compare their results + +.. figure:: /images/SNS_ISIS_WideAngleCorrections.png + :alt: SNS_ISIS_WideAngleCorrections.png + + SNS\_ISIS\_WideAngleCorrections.png +Note a difference among them is when they are applied. At SNS, the +correction is applied before averaging the counters per bin inside +:ref:`_algm-Q1D` algorithm, while at ISIS, it is used after, inside the +:ref:`_algm-Q1D` algorithm, for the division of the counters per bin +normalized by the transmission counters. + +References +---------- + +Annie Brulet et al. - Improvement of data treatment in SANS - J. Appl. +Cryst. (2007). 40 + +Ghosh, Egelhaaf & Rennie - Computing guide for Small Angle Scattering +Experiments + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SCDCalibratePanels-v1.rst b/Code/Mantid/docs/source/algorithms/SCDCalibratePanels-v1.rst new file mode 100644 index 000000000000..b7adfb5fede5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SCDCalibratePanels-v1.rst @@ -0,0 +1,98 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm calibrates sets of Rectangular Detectors in one +instrument. The initial path, time offset,panel widths, panel heights, +panel locations and orientation are all adjusted so the error in q +positions from the theoretical q positions is minimized. Also, there are +optimize options that take into account sample position and the need for +rigid rotations. + +Some features: + +1) Panels can be grouped. + +| ``  All panels in a group will move the same way and rotate the same way.  If rigid rotations are`` +| ``   used, each panel is rotated about the center of the instrument, along with panel pixels rotating`` +| ``   around the panel's center. The height and  widths of the panels in a group will`` +| ``    all change by the same factor`` + +2) The user can select which quantities to keep fixed during the +optimization. + +3) The results can be saved to an ISAW-like DetCal file or in an xml +file that can be used with the LoadParameter algorithm. + +4) Results from a previous optimization can be applied before another +optimization is done. + +| ``  The Levenberg-Marquardt optimization algorithm is used. Later iterations may have too small of changes for the parameters to`` +| ``  get to another optimum value.  Restarting allows for the consideration of parameter values further away and also can change`` +| ``  constraints for the parameter values. This is also useful when fine tuning parameters that do not influence the errors as`` +| ``  much as other parameters.`` + +5) There are several output tables indicating the results of the fit + +| ``  A) ResultWorkspace contains the results from fitting.`` +| ``    -t0 is in microseconds`` +| ``    -L0 is in meters`` +| ``    -*Xoffset,*Yoffset,and *Zoffset are in meters`` +| ``    -*Xrot,*Yrot, and *Zrot are in degrees. Note that Zrot is done first, then Yrot , the Xrot.`` + +``  B)QErrorWorkspace contains the Error in Q values for each peak, along with other associated information about the peak`` + +``  C)CovarianceInfo contains the "correlations"(*100) between each of the parameters`` + +``6) Maximum changes in the quantities that are altered during optimization are now settable.`` + +"A" Workflow +------------ + +Optimizing all variables at once may not be the best option. The errors +become too large, so optimization in several stages subsets of the +variables are optimized at each stage. + +First: NOTE that the input PeaksWorkspace does NOT CHANGE. This means +you should be able to keep trying different sets of variables until +things look good. + +To work on another set of variables with the optimized first round of +optimized values + +#. Use Preprocessinstrument to apply the previous DetCal or xml file + before optimizing AND + +#. Change the name of the target DetCal file, in case the choice of + variables is not good. Then you will not clobber the good + +DetCal file. AND + +#. Change the name of the ResultWorkspace in the properties list. This + means you will have a copy of the results from the + +previous trial(s)( along with chiSq values) to compare results. + +Do check the chiSquared values. If they do not decrease, you were close +to a minimum and the optimization could not get back to that minimum. It +makes a large jump at the beginning. + +After Calibration +----------------- + +After calibration, you can save the workspace to Nexus (or Nexus +processed) and get it back by loading in a later Mantid session. You can +copy the calibration to another workspace using the same instrument by +means of the :ref:`_algm-CopyInstrumentParameters` +algorithm. To do so select the workspace, which you have calibrated as +the InputWorkspace and the workspace you want to copy the calibration +to, the OutputWorkspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SNSPowderReduction-v1.rst b/Code/Mantid/docs/source/algorithms/SNSPowderReduction-v1.rst new file mode 100644 index 000000000000..8ae03dbdc257 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SNSPowderReduction-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +About Filter Wall +^^^^^^^^^^^^^^^^^ + +Time filter wall is used in \_loadData to load data in a certain range +of time. Here is how the filter is used: + +| ``   1. There is NO filter if filter wall is NONE`` +| ``   2. There is NO lower boundary of the filter wall if wall[0] is ZERO;`` +| ``   3. There is NO upper boundary of the filter wall if wall[1] is ZERO;`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst b/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst new file mode 100644 index 000000000000..3083783a14d6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst @@ -0,0 +1,63 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The Sassena application `1 `__ generates +intermediate scattering factors from molecular dynamics trajectories. +This algorithm reads Sassena output and stores all data in workspaces of +type `Workspace2D `__, grouped under a single +`WorkspaceGroup `__. It is implied that the time unit is +one **picosecond**. + +Sassena ouput files are in HDF5 format +`2 `__, and can be made up of the +following datasets: *qvectors*, *fq*, *fq0*, *fq2*, and *fqt* + +The group workspace should contain workspaces **\_fqt.Re** and +**\_fqt.Im** containing the real and imaginary parts of the intermediate +structure factor, respectively. This algorithm will take both and +perform :ref:`_algm-FFT`, storing the real part of the transform in +workspace **\_fqw** and placing this workspace under the input group +workspace. Assuming the time unit to be one picosecond, the resulting +energies will be in units of one **micro-eV**. + +The Schofield correction (P. Schofield, *Phys. Rev. Letters* **4**\ (5), +239 (1960)) is optionally applied to the resulting dynamic structure +factor to reinstate the detailed balance condition +:math:`S(Q,\omega)=e^{\beta \hbar \omega}S(-Q,-\omega)`. + +Details +------- + +Parameter FFTonlyRealPart +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Setting parameter FFTonlyRealPart to true will produce a transform on +only the real part of I(Q,t). This is convenient if we know that I(Q,t) +should be real but a residual imaginary part was left in a Sassena +calculation due to finite orientational average in Q-space. + +Below are plots after application of SassenaFFT to +:math:`I(Q,t) = e^{-t^2/(2\sigma^2)} + i\cdot t \cdot e^{-t^2/(2\sigma^2)}` +with :math:`\sigma=1ps`. Real an imaginary parts are shown in panels (a) +and (b). Note that :math:`I(Q,t)*=I(Q,-t)`. If only :math:`Re[I(Q,t)]` +is transformed, the result is another Gaussian: +:math:`\sqrt{2\pi}\cdot e^{-E^2/(2\sigma'^2)}` with +:math:`\sigma'=4,136/(2\pi \sigma)` in units of :math:`\mu`\ eV (panel +(c)). If I(Q,t) is transformed, the result is a modulated Gaussian: +:math:`(1+\sigma' E)\sqrt{2\pi}\cdot e^{-E^2/(2\sigma'^2)}`\ (panel +(d)). + +.. figure:: /images/SassenaFFTexample.jpg + :alt: SassenaFFTexample.jpg + + SassenaFFTexample.jpg + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveANSTOAscii-v1.rst b/Code/Mantid/docs/source/algorithms/SaveANSTOAscii-v1.rst new file mode 100644 index 000000000000..a32bab199e63 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveANSTOAscii-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +SaveANSTOAscii is an export-only Ascii-based save format with no +associated loader. It is based on a python script by Maximilian Skoda, +written for the ISIS Reflectometry GUI + +Limitations +^^^^^^^^^^^ + +While Files saved with SaveANSTOAscii can be loaded back into mantid +using LoadAscii, the resulting workspaces won't be usful as the data +written by SaveANSTOAscii is not in the normal X,Y,E,DX format. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst b/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst new file mode 100644 index 000000000000..116465ce46d9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The workspace data are stored in the file in columns: the first column +contains the X-values, followed by pairs of Y and E values. Columns are +separated by commas. The resulting file can normally be loaded into a +workspace by the :ref:`_algm-LoadAscii` algorithm. + +Limitations +^^^^^^^^^^^ + +The algorithm assumes that the workspace has common X values for all +spectra (i.e. is not a `ragged workspace `__). Only +the X values from the first spectrum in the workspace are saved out. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveAscii-v2.rst b/Code/Mantid/docs/source/algorithms/SaveAscii-v2.rst new file mode 100644 index 000000000000..40373dd6299a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveAscii-v2.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The workspace data are stored in the file in columns: the first column +contains the X-values, followed by pairs of Y and E values. Columns are +separated by commas. The resulting file can normally be loaded into a +workspace by the `LoadAscii2 `__ algorithm. + +Limitations +^^^^^^^^^^^ + +The algorithm assumes that the workspace has common X values for all +spectra (i.e. is not a `ragged workspace `__). Only +the X values from the first spectrum in the workspace are saved out. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveCSV-v1.rst b/Code/Mantid/docs/source/algorithms/SaveCSV-v1.rst new file mode 100644 index 000000000000..e9285359a36b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveCSV-v1.rst @@ -0,0 +1,40 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The format of the saved ascii CSV file for a 1D worksspace consists of +three columns where the numbers of each row are seperated by the +Seperator and each line by the LineSeperator. + +The format of the saved CSV file for a 2D workspace is as follows: + +| ``   A      0, 200, 400, 600, ..., 50000 `` +| ``    0     10,   4, 234,  35, ...,    32 `` +| ``    1      4, 234,   4,   9, ...,    12 `` +| ``    A      0, 100, 200, 300, ..., 25000 `` +| ``    2     34,   0,   0,   0, ...,    23`` + +| ``   ERRORS`` +| ``    0    0.1, 3.4, 2.4, 3.5, ...,     2 `` +| ``    1    3.1, 3.3, 2.5, 3.5, ...,     2 `` +| ``    2    1.1, 3.3, 2.4,   5, ...,   2.4`` + +where for the matrix above the ERRORS line the first column shows the +content of the numbers on the of the same line; i.e. 'A' is followed by +x-axis values (e.g. TOF values) and any number (e.g. '2') followed by +y-axis values (e.g. neutron counts). Multiple 'A' may be present to +allow for the a-axis to change. So in the example above the saved 2D +workspace consists of three histograms (y-axes) where the first two have +the same x-axis but the third histogram has a different x-axis. + +The matrix following the ERRORS line lists the errors as recorded for +each histogram. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveCalFile-v1.rst b/Code/Mantid/docs/source/algorithms/SaveCalFile-v1.rst new file mode 100644 index 000000000000..acd9d8cb8e44 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveCalFile-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm saves an ARIEL-style 5-column ASCII .cal file. + +The format is + +- Number: ignored.\* UDET: detector ID.\* Offset: calibration offset. + Comes from the OffsetsWorkspace, or 0.0 if none is given. +- Select: 1 if selected (not masked out). Comes from the MaskWorkspace, + or 1 if none is given. +- Group: group number. Comes from the GroupingWorkspace, or 1 if none + is given. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveCanSAS1D-v1.rst b/Code/Mantid/docs/source/algorithms/SaveCanSAS1D-v1.rst new file mode 100644 index 000000000000..07f50e203485 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveCanSAS1D-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves the given workspace to a file which will be in canSAS 1-D format +specified by canSAS 1-D Data Formats Working Group schema +http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd. CANSAS +has a Wiki page at +http://www.smallangles.net/wgwiki/index.php/canSAS_Working_Groups + +Workspace group members and appended workspaces are stored in separate +SASentry `xml `__ elements. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveCanSAS1D-v2.rst b/Code/Mantid/docs/source/algorithms/SaveCanSAS1D-v2.rst new file mode 100644 index 000000000000..110e9a01e215 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveCanSAS1D-v2.rst @@ -0,0 +1,37 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves the given workspace to a file which will be in canSAS 1-D format +specified by canSAS 1-D Data Formats Working Group schema +http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd. CANSAS +has a Wiki page at +http://www.smallangles.net/wgwiki/index.php/canSAS_Working_Groups. + +The second version is compatible with canSAS - 1D - Version 1.1. If you +need to save to the version 1.0 please use the first version of this +algorithm. You can see it at: [SaveCanSAS1D\_1.0]. + +Workspace group members and appended workspaces are stored in separate +SASentry `xml `__ elements. + +This algorithm saves workspace into CanSAS1d format. This is an xml +format except the , tags and all data in between must be one line, which +necesitates the files be written iostream functions outside xml +libraries. + +The second version of CanSAS1D implements the version 1.1, whose schema +is found at http://www.cansas.org/formats/1.1/cansas1d.xsd. See the +tutorial for more infomation about: +http://www.cansas.org/svn/1dwg/trunk/doc/cansas-1d-1_1-manual.pdf. + +The structure of CanSAS1d xml is defined at the links above. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveDaveGrp-v1.rst b/Code/Mantid/docs/source/algorithms/SaveDaveGrp-v1.rst new file mode 100644 index 000000000000..8f03e315820b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveDaveGrp-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves a workspace to a DAVE grp file. A description of the DAVE grouped +data format can be found at +`http://www.ncnr.nist.gov/dave/documentation/ascii_help.pdf `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveDetectorsGrouping-v1.rst b/Code/Mantid/docs/source/algorithms/SaveDetectorsGrouping-v1.rst new file mode 100644 index 000000000000..08219db1a41e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveDetectorsGrouping-v1.rst @@ -0,0 +1,46 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used to save a GroupingWorkspace to a file in XML +format. + +XML File Format +--------------- + +Parameters +~~~~~~~~~~ + +- "instrument": mandatory attribute of node 'detector-grouping'. It + must be valid instrument name. +- "ID": mandatory attribute of node 'group'. It must be valid group + name, and the key to denote group. +- "detids": a node to define grouping by detectors' ID. Its value must + be a list of integers separated by ','. A '-' is used between 2 + integers to define a range of detectors. +- "component": a node to define that all detectors belonged to a + component in the instrument are to be in a same group. Its value + should be a valid component name. + +Example 1: + +.. raw:: html + + + +| `` ``\ +| ``  ``\ +| ``   ``\ \ ``1-30,34-44,47-100``\ +| ``  ``\ +| ``   ``\ \ ``103-304,344-444,474-5000``\ +| ``  ``\ +| `` ``\ + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveDspacemap-v1.rst b/Code/Mantid/docs/source/algorithms/SaveDspacemap-v1.rst new file mode 100644 index 000000000000..9ccc01ddeda2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveDspacemap-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The POWGEN d-space map file format is a binary list of the conversion. +It needs to be a minimum size, determined by the PadDetID parameter. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveFocusedXYE-v1.rst b/Code/Mantid/docs/source/algorithms/SaveFocusedXYE-v1.rst new file mode 100644 index 000000000000..b27cce639697 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveFocusedXYE-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm outputs the data in ASCII as a 3 column X, Y ,E format +for use in subsequent analysis by other programs. The output files can +be read for example into FullProf with format instrument=10. + +For data where the focusing routine has generated several spectra (for +example, multi-bank instruments), the option is provided for saving all +spectra into a single file, separated by headers, or into several files +that will be named "workspaceName-"+spectra\_number + +Current Issues +-------------- + +Fullprof expects the data to be in TOF, however at present the +:ref:`_algm-DiffractionFocussing` algorithm in Mantid +leaves the data in d-spacing. + +If the written file is to be loaded into TOPAS, then headers should be +omitted (set the IncludeHeader property to false); + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveFullprofResolution-v1.rst b/Code/Mantid/docs/source/algorithms/SaveFullprofResolution-v1.rst new file mode 100644 index 000000000000..2c03f4c03529 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveFullprofResolution-v1.rst @@ -0,0 +1,60 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +A Fullprof's resolution file contains the peak profile parameters and +some powder diffractometer's geometry related parameters in a certain +format. This algorithm reads a TableWorkspace containing all the +information required by Fullprof's resolution file, and write out a text +file conforming to that resolution file's format. + +Peak Profile Supported +---------------------- + +Here is the list of peak profile supported by this algorithm: + +- Back-to-back Exponential Convoluted with Pseudo-voigt peak profile + (profile 9). +- Thermal Neutron Back-to-back Exponential Convoluted with Pseudo-voigt + peak profile (profile 10). + +Instrument Profile Parameter TableWorkspace +------------------------------------------- + +TableWorkspace as the input of this algorithm can be generated from +*CreateLeBailFitInput*, *RefinePowderInstrumentParameters* or +*LeBailFit*. To be noticed that the TableWorkspace output from +*RefinePowderInstrumentParameters* is usually an intermediate product. + +Input TableWorkspace must have two columns, "Name" and "Value", as +column 0 and 1. There is no restriction on other columns. + +For a multiple bank instrument, from the second column, the name of the +columns should be Value\_1, Value\_2 and so on. A row with parameter +name 'BANK' should be there to indicate the bank ID of a specific row of +parameters corresponding to. + +How to use algorithm with other algorithms +------------------------------------------ + +Le Bail Fit +^^^^^^^^^^^ + +This algorithm is designed to work with other algorithms to do Le Bail +fit. The introduction can be found in `Le Bail Fit `__. + +Save For Multiple-Bank Resolution File +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As SaveFullprofResolution can save 1 bank a time, in order to make a +multiple-bank .irf file, user should execute this algorithm a few times. +Except the first time, property 'Append' should be marked as 'True'. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveGSASInstrumentFile-v1.rst b/Code/Mantid/docs/source/algorithms/SaveGSASInstrumentFile-v1.rst new file mode 100644 index 000000000000..83c24af7fdd1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveGSASInstrumentFile-v1.rst @@ -0,0 +1,71 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Convert Fullprof's instrument resolution file (.irf) to GSAS's +instrument file (.iparm/.prm). + +Supported peak profiles +^^^^^^^^^^^^^^^^^^^^^^^ + +- Time-of-flight back-to-back exponential convoluted with pseudo-voigt + (planned) + + - Fullprof: Profile 9; + - GSAS: Type 3 TOF profile. + +- Thermal neutron time-of-flight back-to-back exponential convoluted + with pseudo-voigt (implemented) + + - Fullprof: Profile 10; + - GSAS: tabulated peak profile. + +Supported input Fullprof file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +There can be several types of Fullprof files as the input file + +- resolution file .irf (implemented) +- configuration file .pcr (planned) + +Set up :math:`2\theta` +^^^^^^^^^^^^^^^^^^^^^^ + +There are several places in this algorithm that can set the value of +:math:`2\theta`. From the highest priority, here is the list how +:math:`2\theta` is set up. + +| ``1. Algorithms' input property ``\ *``2Theta``*\ ``;`` +| ``2. Either input TableWorkspace or input Fullprof resolution (.irf) file;`` +| ``3. Hard coded default  ``\ :math:`2\theta`\ `` of a certain instrument.`` + +Set up :math:`L_1` +^^^^^^^^^^^^^^^^^^ + +There are 2 places in this algorithm that can set the value of +:math:`L_1`. From the highest priority, here is the list how +:math:`2\theta` is set up. + +| ``1. Algorithms' input property ``\ *``L1``*\ ``;`` +| ``2. Hard coded default  ``\ :math:`2\theta`\ `` of a certain instrument.`` + +Calculation of L2 +^^^^^^^^^^^^^^^^^ + +- If 2Theta (:math:`2\theta`) is given, L2 will be calculated from + given 2Theta and L1 by + :math:`DIFC = 252.816\cdot2sin(\theta)\sqrt{L1+L2}`. Notice that + :math:`2\theta` given in input .irf file may have subtle difference + to "2Theta", which is input by user in order to calculate L2. + +- If "2Theta" (:math:`2\theta`) is not given, L2 will be read from user + input. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveGSS-v1.rst b/Code/Mantid/docs/source/algorithms/SaveGSS-v1.rst new file mode 100644 index 000000000000..d111bea3993d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveGSS-v1.rst @@ -0,0 +1,40 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves a focused data set into a three column GSAS format containing +X\_i, Y\_i\*step, and E\_I\*step. Exclusively for the crystallography +package `GSAS `__ and +data needs to be in time-of-flight. For data where the focusing routine +has generated several spectra (for example, multi-bank instruments), the +option is provided for saving all spectra into a single file, separated +by headers, or into several files that will be named +"workspaceName\_"+workspace\_index\_number. + +From the GSAS manual a description of the format options: + +- If BINTYP is 'SLOG' then the neutron TOF data was collected in + constant ∆T/T steps. BCOEF(1) is the initial TOF in μsec, and + BCOEF(3) is the value of ∆T/T used in the data collection. BCOEF(2) + is a maximum TOF for the data set. BCOEF(4) is zero and ignored. +- If BINTYP equals 'RALF' then the data was collected at one of the TOF + neutron diffractometers at the ISIS Facility, Rutherford-Appleton + Laboratory. The width of the time bins is constant for a section of + the data at small values of TOF and then varies (irregularly) in + pseudoconstant ∆T/T steps. In this case BCOEF(1) is the starting TOF + in μsec\*32, BCOEF(2) is the width of the first step in μsec\*32, + BCOEF(3) is the start of the log scaled step portion of the data in + μsec\*32 and BCOEF(4) is the resolution to be used in approximating + the size of each step beyond BCOEF(3). + +The format is limited to saving 99 spectra in total. Trying to save more +will generate an error. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveHKL-v1.rst b/Code/Mantid/docs/source/algorithms/SaveHKL-v1.rst new file mode 100644 index 000000000000..f3cfe853d926 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveHKL-v1.rst @@ -0,0 +1,44 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Used same format that works successfully in GSAS and SHELX from ISAW: + +hklFile.write('%4d%4d%4d%8.2f%8.2f%4d%8.4f%7.4f%7d%7d%7.4f%4d%9.5f%9.4f\\n'% +(H, K, L, FSQ, SIGFSQ, hstnum, WL, TBAR, CURHST, SEQNUM, TRANSMISSION, +DN, TWOTH, DSP)) + +HKL is flipped by -1 due to different q convention in ISAW vs Mantid. + +FSQ = integrated intensity of peak (scaled) + +SIGFSQ = sigma from integrating peak + +hstnum = number of sample orientation (starting at 1) + +WL = wavelength of peak + +TBAR = output of absorption correction (-log(transmission)/mu) + +CURHST = run number of sample + +SEQNUM = peak number (unique number for each peak in file) + +TRANSMISSION = output of absorption correction (exp(-mu\*tbar)) + +DN = detector bank number + +TWOTH = two-theta scattering angle + +DSP = d-Spacing of peak (Angstroms)/TR + +Last line must have all 0's + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveILLCosmosAscii-v1.rst b/Code/Mantid/docs/source/algorithms/SaveILLCosmosAscii-v1.rst new file mode 100644 index 000000000000..f0cd8339722e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveILLCosmosAscii-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +SaveILLCosmosAscii is an export-only Ascii-based save format with no +associated loader. It is based on a python script by Maximilian Skoda, +written for the ISIS Reflectometry GUI + +Limitations +^^^^^^^^^^^ + +While Files saved with SaveILLCosmosAscii can be loaded back into mantid +using LoadAscii, the resulting workspaces won't be usful as the data +written by SaveILLCosmosAscii is not in the normal X,Y,E,DX format. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveISISNexus-v1.rst b/Code/Mantid/docs/source/algorithms/SaveISISNexus-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveISISNexus-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveIsawDetCal-v1.rst b/Code/Mantid/docs/source/algorithms/SaveIsawDetCal-v1.rst new file mode 100644 index 000000000000..53cbb12d104f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveIsawDetCal-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves an instrument with RectangularDetectors to an ISAW .DetCal file. + +This algorithm will fail on instruments without RectangularDetectors. +Additionally, the banks should be named "bankXX" where XX is the bank +index. Other names will fail or create an invalid .DetCal file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveIsawPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/SaveIsawPeaks-v1.rst new file mode 100644 index 000000000000..30ecfca86d27 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveIsawPeaks-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Save a PeaksWorkspace to a ISAW-style ASCII .peaks file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveIsawQvector-v1.rst b/Code/Mantid/docs/source/algorithms/SaveIsawQvector-v1.rst new file mode 100644 index 000000000000..3ab04f1a5cec --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveIsawQvector-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This takes an unprocessed event workspace and writes out a file where +each event has the :math:`(Q_x, Q_y, Q_z)` as a set of 32-bit floats. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveIsawUB-v1.rst b/Code/Mantid/docs/source/algorithms/SaveIsawUB-v1.rst new file mode 100644 index 000000000000..394a0617cca2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveIsawUB-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This saves a workspace's UB matrix to an ISAW-style UB matrix text file. + +The resulting file can be loaded again into another workspace by using +the :ref:`_algm-LoadIsawUB` algorithm. + +The matrix saved is the transpose of the UB Matrix. The UB matrix maps +the column vector (h,k,l ) to the column vector (q'x,q'y,q'z). +\|Q'\|=1/dspacing and its coordinates are a right-hand coordinate system +where x is the beam direction and z is vertically upward. (IPNS +convention) + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveMD-v1.rst b/Code/Mantid/docs/source/algorithms/SaveMD-v1.rst new file mode 100644 index 000000000000..4dea0d80e680 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveMD-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Save a `MDEventWorkspace `__ to a .nxs file. The +workspace's current box structure and entire list of events is +preserved. The resulting file can be loaded via :ref:`_algm-LoadMD`. + +If you specify MakeFileBacked, then this will turn an in-memory +workspace to a file-backed one. Memory will be released as it is written +to disk. + +If you specify UpdateFileBackEnd, then any changes (e.g. events added +using the PlusMD algorithm) will be saved to the file back-end. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst b/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst new file mode 100644 index 000000000000..e950749912bf --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst @@ -0,0 +1,58 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used to save the masking from a workspace to an XML +file. This algorithm has previously been renamed from +`SaveDetectorMasks `__. + +2 Types of Mask Workspace +------------------------- + +There are two types of mask workspace that can serve as input. + +1. `MaskWorkspace `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this case, :ref:`_algm-SaveMask` will read Y values to determine +which detectors are masked; + +2. A non-\ `MaskWorkspace `__ `MatrixWorkspace `__ containing `Instrument `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this case, :ref:`_algm-SaveMask` will scan through all detectors to +determine which are masked. + +Definition of Mask +------------------ + +| ``* If a pixel is masked, it means that the data from this pixel won't be used.  `` +| ``  In the masking workspace (i.e., ``\ ```SpecialWorkspace2D`` `__\ ``), the corresponding value is 1. `` +| ``* If a pixel is NOT masked, it means that the data from this pixel will be used.  `` +| ``  In the masking workspace (i.e., ``\ ```SpecialWorkspace2D`` `__\ ``), the corresponding value is 0.`` + +XML File Format +--------------- + +Example 1: + +.. raw:: html + + + +| `` ``\ +| ``  ``\ +| ``   ``\ \ ``3,34-44,47``\ +| ``   ``\ \ ``bank123``\ +| ``   ``\ \ ``bank124``\ +| ``  ``\ +| `` ``\ + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveNISTDAT-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNISTDAT-v1.rst new file mode 100644 index 000000000000..d6ee5af2d787 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveNISTDAT-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Qxy rebins a 2D workspace in units of wavelength into 2D Q. It also +normalises to the solid angle of each detector pixel. The result is +stored in a 2D workspace which two numeric axes, both in units of Q. +SaveNISTDAT save the output of Qxy to an ASCII file that can be read by +NIST software. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst new file mode 100644 index 000000000000..42854e547555 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst @@ -0,0 +1,27 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves the data in a workspace into a file in the NeXus based 'NXSPE' +format. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must have units of Momentum Transfer ('DeltaE') and +contain histogram data with common binning on all spectra. + +Child Algorithms used +^^^^^^^^^^^^^^^^^^^^^ + +:ref:`_algm-FindDetectorsPar` algorithm is used to calculate +detectors parameters from the instrument description. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst new file mode 100644 index 000000000000..58289efc7a4a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst @@ -0,0 +1,41 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm SaveNexus will write a Nexus data file from the named +workspace. The file name can be an absolute or relative path and should +have the extension .nxs, .nx5 or .xml. Warning - using XML format can be +extremely slow for large data sets and generate very large files. Both +the extensions nxs and nx5 will generate HDF5 files. + +The optional parameters can be used to control which spectra are saved +into the file (not yet implemented). If spectrum\_min and spectrum\_max +are given, then only that range to data will be loaded. + +A Mantid Nexus file may contain several workspace entries each labelled +with an integer starting at 1. If the file already contains n +workspaces, the new one will be labelled n+1. + +In the future it may be possible to write other Nexus file types than +the one supported by SaveNexusProcessed. + +Time series data +~~~~~~~~~~~~~~~~ + +TimeSeriesProperty data within the workspace will be saved as NXlog +sections in the Nexus file. Only floating point logs are stored and +loaded at present. + +Child Algorithms used +~~~~~~~~~~~~~~~~~~~~~ + +:ref:`_algm-SaveNexusProcessed` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst new file mode 100644 index 000000000000..ccc8680ac396 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst @@ -0,0 +1,48 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm SaveNexusProcessed will write a Nexus data file from the +named workspace. This can later be loaded using +:ref:`_algm-LoadNexusProcessed`. + +The file name can be an absolute or relative path and should have the +extension .nxs, .nx5 or .xml. Warning - using XML format can be +extremely slow for large data sets and generate very large files. Both +the extensions nxs and nx5 will generate HDF5 files. + +The optional parameters can be used to control which spectra are saved +into the file. If WorkspaceIndexMin and WorkspaceIndexMax are given, +then only that range to data will be loaded. + +A Mantid Nexus file may contain several workspace entries each labelled +with an integer starting at 1. If the file already contains n +workspaces, the new one will be labelled n+1. + +Time series data +~~~~~~~~~~~~~~~~ + +TimeSeriesProperty data within the workspace will be saved as NXlog +sections in the Nexus file. Only floating point logs are stored and +loaded at present. + +EventWorkspaces +~~~~~~~~~~~~~~~ + +This algorithm will save `EventWorkspaces `__ with full +event data, unless you uncheck *PreserveEvents*, in which case the +histogram version of the workspace is saved. + +Optionally, you can check *CompressNexus*, which will compress the event +data. **Warning!** This can be *very* slow, and only gives approx. 40% +compression because event data is typically denser than histogram data. +*CompressNexus* is off by default. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SavePAR-v1.rst b/Code/Mantid/docs/source/algorithms/SavePAR-v1.rst new file mode 100644 index 000000000000..4234acc7cbde --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SavePAR-v1.rst @@ -0,0 +1,36 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves the geometry information of the detectors in a workspace into a +PAR format ASCII file. The angular positions and linear sizes of the +detectors are calculated using :ref:`_algm-FindDetectorsPar` +algorithm. + +Tobyfit PAR file is an ASCII file consisting of the header and 5 or 6 +text columns. Mantid generates 6-column files. Header contains the +number of the rows in the phx file excluding the header. (number of +detectors). The column has the following information about a detector: + +| `` *`` +| `` *         1st column      sample-detector distance (secondary flight path)`` +| `` *         2nd  "          scattering angle (deg)`` +| `` *         3rd  "          azimuthal angle (deg)`` +| `` *                         (west bank = 0 deg, north bank = -90 deg etc.)`` +| `` *                         (Note the reversed sign convention cf ``\ ```.phx`` `__\ `` files)`` +| `` *         4th  "          width (m)`` +| `` *         5th  "          height (m)`` +| `` *         6th  "          detector ID    -- Mantid specific. `` +| `` *---`` + +You should expect to find column 6 to be the detector ID in +Mantid-generated par files only. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SavePHX-v1.rst b/Code/Mantid/docs/source/algorithms/SavePHX-v1.rst new file mode 100644 index 000000000000..deaa706d399f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SavePHX-v1.rst @@ -0,0 +1,38 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves the geometry information of the detectors in a workspace into a +PHX format ASCII file. The angular positions and angular sizes of the +detectors are calculated using :ref:`_algm-FindDetectorsPar` +algorithm. + +Mantid generated PHX file is an ASCII file consisting of the header and +7 text columns. Header contains the number of the rows in the phx file +excluding the header. (number of detectors). The column has the +following information about a detector: + +| `` *         1st column      secondary flightpath,e.g. sample to detector distance (m) -- Mantid specific`` +| `` *         2nt  "          0`` +| `` *         3rd  "          scattering angle (deg)`` +| `` *         4th  "          azimuthal angle (deg)`` +| `` *                        (west bank = 0 deg, north bank = 90 deg etc.)`` +| `` *                        (Note the reversed sign convention wrt ``\ ```.par`` `__\ `` files)`` +| `` *         5th  "          angular width e.g. delta scattered angle (deg) `` +| `` *         6th  "          angular height e.g. delta azimuthal angle (deg)`` +| `` *         7th  "          detector ID    -- Mantid specific. `` +| `` *---`` + +In standard phx file only the columns 3,4,5 and 6 contain useful +information. You can expect to find column 1 to be the secondary +flightpath and the column 7 -- the detector ID in Mantid-generated phx +files only. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SavePlot1D-v1.rst b/Code/Mantid/docs/source/algorithms/SavePlot1D-v1.rst new file mode 100644 index 000000000000..366ac9b8a3ab --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SavePlot1D-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Save 1D plots to a png file, as part of autoreduction. Multiple spectra +in the same workspace will be represented by curves on the same plot. +Groupped workspaces will be shown as subplots. If the workspace has more +than one spectra, but less or equal to ten, labels will be shown. + +Note: the figures contain lines between points, no error bars. + +Note: Requires matplotlib version>= 1.2.0 + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveRKH-v1.rst b/Code/Mantid/docs/source/algorithms/SaveRKH-v1.rst new file mode 100644 index 000000000000..91b78619070a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveRKH-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves the the given workspace to a file which will be formatted in one +of the LOQ data formats (see +`here `__). +1D or 2D workspaces may be saved. If a 1D workspace is 'horizontal' (a +single spectrum) then the first column in the three column output will +contain the X values of the spectrum (giving the bin centre if histogram +data). For a 'vertical' (single column) 1D workspace, the first column +of the file will contain the spectrum number. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveReflTBL-v1.rst b/Code/Mantid/docs/source/algorithms/SaveReflTBL-v1.rst new file mode 100644 index 000000000000..9fc8ca916485 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveReflTBL-v1.rst @@ -0,0 +1,37 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves a TableWorkspace at least 8 colunms wide into an ascii file in +17-column Reflectometry TBL format compatible with the old ISIS +reflectometry Interface. + +The 8 columns are grouped into rows of 17 according to stitch index, so +up to 3 rows int he table would become a single row in the TBL file like +so: (Where Z is an identical stitch group index, and - is ignored as +only the first instance of P and Q are used in the file) + +A, B, C, D, E, P, Q, Z F, G, H, I, J, -, -, Z K, L, M, N, O, -, -, Z + +becomes + +A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q + +Limitations +^^^^^^^^^^^ + +The Algorithm will fail if any stitch index appears more than 3 times, +as the old interface does not support more than 3 runs per row. + +Stitch groups of index 0 are treated as non-grouped, and will not be +grouped with one another (and by extension can be larger than 3 +members). They will however be moved to the end of the file + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveSPE-v1.rst b/Code/Mantid/docs/source/algorithms/SaveSPE-v1.rst new file mode 100644 index 000000000000..d55fcdc88cdb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveSPE-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves the data in a workspace into a file in the ASCII 'SPE' format (as +described `here `__). + +The units used for saving will match those of the input workspace, such +that if you have the units Momentum Transfer ('DeltaE') then you will +get a traditional SPE file, you could choose to have the units in mod Q +and then it will save to an SPQ file variant. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must contain histogram data with common binning on +all spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveToSNSHistogramNexus-v1.rst b/Code/Mantid/docs/source/algorithms/SaveToSNSHistogramNexus-v1.rst new file mode 100644 index 000000000000..70465158ff4a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveToSNSHistogramNexus-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm essentially copies the InputFilename into OutputFilename, +except that it replaces the data field with whatever the specified +workspace contains. The histograms do not need to be the same size (in +number of bins), but the number of pixels needs to be the same. + +In addition, this only works for instruments that use +`RectangularDetectors `__ (SNAP, TOPAZ, POWGEN, for +example); in addition, the name in the instrument definition file must +match the name in the NXS file. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveVTK-v1.rst b/Code/Mantid/docs/source/algorithms/SaveVTK-v1.rst new file mode 100644 index 000000000000..e8331b8be8e9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveVTK-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves a workspace out to a VTK file that can be loaded with Paraview or +any other software supporting the VTK file format. This is a very basic +algorithm that simple creates a 3D view of the data as a series of +histograms. It should only be used for relatively small data sets as the +resulting file can become quite large relatively quickly. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveZODS-v1.rst b/Code/Mantid/docs/source/algorithms/SaveZODS-v1.rst new file mode 100644 index 000000000000..2b76528dd9ad --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SaveZODS-v1.rst @@ -0,0 +1,73 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Saves a HDF5 file to the ZODS (Zurich Oak Ridge Disorder Simulation +program) format. This format consists of a slice of a +`MDHistoWorkspace `__ and some information about its +location. + +**You must be in HKL space for the output of this algorithm to make +sense!** + +From http://www.crystal.mat.ethz.ch/research/DiffuseXrayScattering: + +- In the frame of an international cooperation between our group, the + University of Zurich and Oak Ridge National Laboratories, we are + further developing Monte Carlo simulation techniques for modeling + disordered crystal structures. A major goal of this project is to + develop the Monte Carlo simulation computer program ZODS (Zurich Oak + Ridge Disorder Simulation program), which is designed to be not only + user friendly, but also fast and flexible. Special focus is on the + efficient use of modern super-computer architectures and of + multi-core desktop computers to take full advantage of current trends + in computing technologies. + +Summary of data format +^^^^^^^^^^^^^^^^^^^^^^ + +In general it contains collection of grids with intensities and each +grid is described by specifying origin, size of grid (in each direction) +and grid base vectors (a1,a2,a3) so a point at node (i,j,k) of grid has +coordinates r = origin+i\*a1+j\*a2+k\*a3. + +Please contact Michal Chodkiewicz (michal.chodkiewicz@gmail.com); Vickie +Lynch (vel@ornl.gov) for more details. + +Description of data fields +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- The CoordinateSystem data object has the attribute "isLocal". + + - If **isLocal**\ =1, then we are in HKL space: + + - The **direction\_1** vector (0.04,0,0) represents a step of + 0.04 in the (1,0,0) direction (a\*) in reciprocal space. + - **This is currently the only mode in which SaveZODS saves**. + + - If **isLocal**\ =0, then we are in Q-space. + + - The **direction\_1** vector (0.04,0,0) represents a step of + 0.04 Angstrom^(-1) in X direction of Cartesian coordinate + system (with X colinear with a and Z with c\*) + - In this case CoordinateSystem has additional attribute + UnitCell, which is a vector with 6 components + (a,b,c,alpha,beta,gamma) a,b,c in angstroms and angles in + degrees. + +- The **origin** field gives the origin of the center of the (0,0,0) + cell; in HKL space for our case of isLocal=1. +- The **size** field gives the number of bins in each direction. +- The **data** field contains the actual intensity at each bin. + + - The grid of points (r = origin+i\*a1+j\*a2+k\*a3) specifies the + centers of histogram, not the corners. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Scale-v1.rst b/Code/Mantid/docs/source/algorithms/Scale-v1.rst new file mode 100644 index 000000000000..c71cd75ffbd7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Scale-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Uses the binary operation algorithms :ref:`_algm-Multiply` or +:ref:`_algm-Plus` to scale the input workspace by the amount requested. +This algorithm is provided as a simple, but less powerful, alternative +to the python `workspace algebra `__ functionality. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ScaleX-v1.rst b/Code/Mantid/docs/source/algorithms/ScaleX-v1.rst new file mode 100644 index 000000000000..ebf3d6489f35 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ScaleX-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Scales the X axis and everty unique X-coordinate of a histogram or every +event of the input workspace by the amount requested. + +- The amount can be specified either as: +- an absolute numerical value via the "Factor" argument or +- an detector parameter name whose value is retrieved from the + instrument. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SelectCellOfType-v1.rst b/Code/Mantid/docs/source/algorithms/SelectCellOfType-v1.rst new file mode 100644 index 000000000000..c044712dda9b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SelectCellOfType-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a PeaksWorkspace with a UB matrix corresponding to a Niggli +reduced cell, this algorithm will allow the user to select a +conventional cell with a specified cell type and centering. If the apply +flag is not set, the information about the selected cell will just be +displayed. If the apply flag is set, the UB matrix associated with the +sample in the PeaksWorkspace will be updated to a UB corresponding to +the selected cell AND the peaks will be re-indexed using the new UB +matrix. NOTE: The possible conventional cells, together with the +corresponding errors in the cell scalars can be seen by running the +ShowPossibleCells algorithm, provided the stored UB matrix corresponds +to a Niggli reduced cell. + +This algorithm is based on the paper: "Lattice Symmetry and +Identification -- The Fundamental Role of Reduced Cells in Materials +Characterization", Alan D. Mighell, Vol. 106, Number 6, Nov-Dec 2001, +Journal of Research of the National Institute of Standards and +Technology, available from: +nvlpubs.nist.gov/nistpubs/jres/106/6/j66mig.pdf. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SelectCellWithForm-v1.rst b/Code/Mantid/docs/source/algorithms/SelectCellWithForm-v1.rst new file mode 100644 index 000000000000..7a72f99ac0f9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SelectCellWithForm-v1.rst @@ -0,0 +1,31 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a PeaksWorkspace with a UB matrix corresponding to a Niggli +reduced cell, this algorithm will allow the user to select a +conventional cell corresponding to a specific form number from the +Mighell paper. If the apply flag is not set, the information about the +selected cell will just be displayed. If the apply flag is set, the UB +matrix associated with the sample in the PeaksWorkspace will be updated +to a UB corresponding to the selected cell AND the peaks will be +re-indexed using the new UB matrix. NOTE: The possible conventional +cells, together with the corresponding errors in the cell scalars can be +seen by running the ShowPossibleCells algorithm, provided the stored UB +matrix corresponds to a Niggli reduced cell. + +This algorithm is based on the paper: "Lattice Symmetry and +Identification -- The Fundamental Role of Reduced Cells in Materials +Characterization", Alan D. Mighell, Vol. 106, Number 6, Nov-Dec 2001, +Journal of Research of the National Institute of Standards and +Technology, available from: +nvlpubs.nist.gov/nistpubs/jres/106/6/j66mig.pdf. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SelectPowderDiffPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/SelectPowderDiffPeaks-v1.rst new file mode 100644 index 000000000000..d5f2fc12118c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SelectPowderDiffPeaks-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Select the powder diffraction peaks for `Le Bail Fit `__ + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetGoniometer-v1.rst b/Code/Mantid/docs/source/algorithms/SetGoniometer-v1.rst new file mode 100644 index 000000000000..6c01230f16cd --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetGoniometer-v1.rst @@ -0,0 +1,40 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Use this algorithm to define your goniometer. Enter each axis in the +order of rotation, starting with the one farthest from the sample. + +You may enter up to 6 axes, for which you must define (separated by +commas): + +- The name of the axis, which MUST match the name in your sample logs. + You can specify a number, and a log value will be created + (GoniometerAxis?\_FixedValue, where ? is the axis number) +- The X, Y, Z components of the vector of the axis of rotation. + Right-handed coordinates with +Z=beam direction; +Y=Vertically up + (against gravity); +X to the left. +- The sense of rotation as 1 or -1: 1 for counter-clockwise, -1 for + clockwise rotation. + +The run's sample logs will be used in order to determine the actual +angles of rotation: for example, if you have an axis called 'phi', then +the first value of the log called 'phi' will be used as the rotation +angle. Units are assumed to be degrees. + +The "Universal" goniometer at SNS is equivalent to Axis0 tied to the +"omega" log pointing vertically upward, Axis1 tied to "chi" log, +pointing along the beam, and Axis2 tied to "phi", pointing vertically +upward. + +SetGoniometer(w,"Universal") is the same as +SetGoniometer(w,Axis0="omega,0,1,0,1",Axis1="chi,0,0,1,1",Axis1="phi,0,1,0,1") + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetInstrumentParameter-v1.rst b/Code/Mantid/docs/source/algorithms/SetInstrumentParameter-v1.rst new file mode 100644 index 000000000000..da42d57d8a42 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetInstrumentParameter-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm adds or replaces an parameter attached to an instrument +component, or the entire instrument. Instrument parameters are specific +to a workspace, they will get carried on to output workspaces created +from an input workspace to an algorithm, but will not appear one +unrelated workspaces that happen to have been recorded on the same +instrument. + +The workspace must have a instrument already defined, and will be +altered in place. If the name of the instrument component to attach the +parameter is not specified it will be attached to the whole instrument. + +At present this algorithm only supports simple instrument parameters, +NOT fitting parameters. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetMDUsingMask-v1.rst b/Code/Mantid/docs/source/algorithms/SetMDUsingMask-v1.rst new file mode 100644 index 000000000000..770a2efc4ffe --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetMDUsingMask-v1.rst @@ -0,0 +1,36 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is used to replace values in a +`MDHistoWorkspace `__ but only at particular points. + +A mask MDHistoWorkspace is provided, where non-zero values indicate +'true'. At these points, the corresponding value in the ValueWorkspace +will be set. Any 'false' points in the MaskWorkspace are skipped. + +If ValueWorkspace is not specified, the you must specify Value, which is +a a simple number to set. + +In matlab, the equivalent function call would be WS[mask] = +OtherWS[mask] + +See `this page on boolean +operations `__ for examples of how +to create a mask. + +Usage (Python) +-------------- + +| ``# This will zero-out any values below the threshold of 123`` +| ``MaskWS = WS < 123`` +| ``ModifiedWS = SetMDUsingMask(InputWorkspace=WS, Value="0", MaskWorkspace=MaskWS)`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetSampleMaterial-v1.rst b/Code/Mantid/docs/source/algorithms/SetSampleMaterial-v1.rst new file mode 100644 index 000000000000..b3650adeabfc --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetSampleMaterial-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Sets the neutrons information in the sample. You can either enter +details about the chemical formula or atomic number, or you can provide +specific values for the attenuation and scattering cross sections and +the sample number density. If you decide to provide specific values you +must give values for all three (attenuation and scattering cross +sections and the sample number density), and any formula information +will be ignored. If you miss any of the three specific values then the +other will be ignored. + +Neutron scattering lengths and cross sections of the elements and their +isotopes have been taken from +`1 `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetScalingPSD-v1.rst b/Code/Mantid/docs/source/algorithms/SetScalingPSD-v1.rst new file mode 100644 index 000000000000..b908755781bd --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetScalingPSD-v1.rst @@ -0,0 +1,75 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm was developed for the Merlin instrument but may be used +with other instruments if appropriate scaling data is available. The +scaling data should give the true centre point location of each pixel +detector in the instrument. This may be obtained by a calibration run +and post-processing of the results. Since the calibration data may vary +with time, it is not convenient to store it in the instrument XML +definition file. Instead it can be stored as an ACSII file with the +extension ".sca" or within the ".raw" file associated with the data, as +data on the position of each detector (r,theta,phi). + +A scaling file (extension .sca) is expected to be an ASCII file with +three header lines. Of these, only the second line is actual read and +the first item on this line should give the number of detectors +described by the file as an integer value. Each subsequent line after +the first three will give the information for one detector with at least +the five ordered values detector\_ID, detector\_offset, l2, code, theta +and phi. Of these values only the detector\_ID and the new position (l2, +theta, phi) are used. The latter three values are taken as defining the +true position of the detector in spherical polar coordinates relative to +the origin (sample position). If a raw file is given the true positions +are taken from this instead. + +This algorithm creates a parameter map for the instrument that applies a +shift to each detector so that is at the correct position. Monitors are +not moved. Because the shift of detector locations can alter the +effective width of the pixel it is necessary to apply a scaling factor. +While each shift can have components in all three primary axes (X,Y,Z), +it is assumed that a single PSD will maintain the co-linear nature of +pixel centres. The width scaling factor for a pixel i is approximated as +average of the left and right side scalings cased by the change in +relative spacings with respect to neighbour pixels. End of detector +pixels only have one scaling value to use. It is assumed that the +scaling is both small and smooth so that the approximate scaling is +reasonable. + +Scaling and position correction will be reflected in properties of the +detector objects including values such as the solid angle, bounding box, +etc. The detector numbering in Merlin uses sequential numbers for pixels +within a PSD and non-sequential jumps between PSDs. This algorithm uses +these jumps to identify individual PSDs. + +To apply this algorithm to instruments other than Merlin it may be +necessary to modify the code depending on the type of detectors present +and how they are numbered. + +If the tube detector performance enhancement is used the results of the +algorithm will not be visible in the instrument view in MantidPlot, at +the same time all calclations will be performed correctly. + +Optional properties +~~~~~~~~~~~~~~~~~~~ + +ScalingOpt - this integer value controls the way in which the scaling is +calculated for pixels that have both left and right values for the +scaling. The default is to just average the two together. Setting this +to 1 causes the maximum scaling to be used and setting it to 2 uses the +maximum scaling plus 5% to be used. + +ChildAlgorithms used +~~~~~~~~~~~~~~~~~~~~ + +None + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetSpecialCoordinates-v1.rst b/Code/Mantid/docs/source/algorithms/SetSpecialCoordinates-v1.rst new file mode 100644 index 000000000000..02f11d7fe9b7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetSpecialCoordinates-v1.rst @@ -0,0 +1,32 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +`MDEventWorkspaces `__ and +`MDHistoWorkspaces `__ can be used with any type of +coordinate system. On the other hand +`PeaksWorkspaces `__ may be plotted either in QLab, +QSample or HKL. There is an inherent link between a PeaksWorkspace and a +MDWorkspace in that an MDWorkspace may utilise the same coordinate +systems as the PeaksWorkspaces. For example, workspaces created via +:ref:`_algm-ConvertToMD` or +:ref:`_algm-ConvertToDiffractionMDWorkspace` +may be generated in a special set of V3D coordinates, which are the same +as those for the PeaksWorkspace (QLab, QSample, HKL). Amongst other +usages, in order to be able to simultaneously plot MDWorkspaces and +PeaksWorkspaces, it is necessary to be able to determine what (if any) +special coordinates the Workspaces were created in, or are currently +using. + +This algorithm is for backwards compatibility. The special coordinates +flags are new, and legacy workspaces will need to be corrected in order +for them to work as expected with the Mantid tools. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetUB-v1.rst b/Code/Mantid/docs/source/algorithms/SetUB-v1.rst new file mode 100644 index 000000000000..8dd3ff88b08c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetUB-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithms will attach an OrientedLattice object to a sample in the +workspace. For MD workspaces, you can select to which sample to attach +it. If nothing entered, it will attach to all. If bad number is +enetered, it will attach to first sample. + +If UB matrix elements are entered, lattice parameters and orientation +vectors are ignored. The algorithm will throw an exception if the +determinant is 0. If the UB matrix is all zeros (default), it will +calculate it from lattice parameters and orientation vectors. The +algorithm will throw an exception if u and v are collinear, or one of +them is very small in magnitude. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetUncertainties-v1.rst b/Code/Mantid/docs/source/algorithms/SetUncertainties-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetUncertainties-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetupEQSANSReduction-v1.rst b/Code/Mantid/docs/source/algorithms/SetupEQSANSReduction-v1.rst new file mode 100644 index 000000000000..0dbb0bbb7933 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetupEQSANSReduction-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Create a PropertyManager object setting the reduction options for +EQSANS. The property manager object is then added to the +PropertyManagerDataService. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetupHFIRReduction-v1.rst b/Code/Mantid/docs/source/algorithms/SetupHFIRReduction-v1.rst new file mode 100644 index 000000000000..a5e63b63bfa5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetupHFIRReduction-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Create a PropertyManager object setting the reduction options for HFIR +SANS. The property manager object is then added to the +PropertyManagerDataService. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SetupILLD33Reduction-v1.rst b/Code/Mantid/docs/source/algorithms/SetupILLD33Reduction-v1.rst new file mode 100644 index 000000000000..d345100f24ea --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SetupILLD33Reduction-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Create a PropertyManager object setting the reduction options for ILL +D33 SANS TOF instrument. The property manager object is then added to +the PropertyManagerDataService. + +See `SANS +Reduction `__ +documentation for details. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ShiftLogTime-v1.rst b/Code/Mantid/docs/source/algorithms/ShiftLogTime-v1.rst new file mode 100644 index 000000000000..c4554e52ebb2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ShiftLogTime-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ShowPeakHKLOffsets-v1.rst b/Code/Mantid/docs/source/algorithms/ShowPeakHKLOffsets-v1.rst new file mode 100644 index 000000000000..733e88cfe39e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ShowPeakHKLOffsets-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Creates a TableWorkspace with offsets of h,k,and l from an integer along +with bank and run number. + +The maximum of these offsets is also included. + +Histograms, scatterplots, etc. of this data can be used to detect +problems. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ShowPossibleCells-v1.rst b/Code/Mantid/docs/source/algorithms/ShowPossibleCells-v1.rst new file mode 100644 index 000000000000..6bfbd635650c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ShowPossibleCells-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a PeaksWorkspace with a UB matrix corresponding to a Niggli +reduced cell, this algorithm will display a list of possible +conventional cells. The max scalar error property sets a limit on the +maximum allowed error in the cell scalars, to restrict the list to +possible cells that are a good match for the current reduced cell. The +list can also be forced to contain only the best fitting conventional +cell for each Bravais lattice type, by setting the best only property to +true. + +This algorithm is based on the paper: "Lattice Symmetry and +Identification -- The Fundamental Role of Reduced Cells in Materials +Characterization", Alan D. Mighell, Vol. 106, Number 6, Nov-Dec 2001, +Journal of Research of the National Institute of Standards and +Technology, available from: +nvlpubs.nist.gov/nistpubs/jres/106/6/j66mig.pdf. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SignalOverError-v1.rst b/Code/Mantid/docs/source/algorithms/SignalOverError-v1.rst new file mode 100644 index 000000000000..b4beb756eef2 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SignalOverError-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Take a `MatrixWorkspace `__ as input, and replaces the +Y values by Y/E (signal divided by error) + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SimulateResolutionConvolvedModel-v1.rst b/Code/Mantid/docs/source/algorithms/SimulateResolutionConvolvedModel-v1.rst new file mode 100644 index 000000000000..a5f1546193ff --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SimulateResolutionConvolvedModel-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Runs a simulation of a model with a selected resolution function. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst b/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst new file mode 100644 index 000000000000..d05e42fccb4d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst @@ -0,0 +1,64 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm that can take a slice out of an original +`MDEventWorkspace `__ while preserving all the events +contained therein. + +It uses the same parameters as :ref:`_algm-BinMD` to determine a +transformation to make from input->output workspace. The difference is +that :ref:`_algm-BinMD` sums events in a regular grid whereas SliceMD +moves the events into the output workspace, which boxes itself. + +Please see :ref:`_algm-BinMD` for a detailed description of the +parameters. + +Axis-Aligned Slice +~~~~~~~~~~~~~~~~~~ + +Events outside the range of the slice are dropped. The new output +MDEventWorkspace's dimensions only extend as far as the limit specified. + +Non-Axis-Aligned Slice +~~~~~~~~~~~~~~~~~~~~~~ + +The coordinates of each event are transformed according to the new basis +vectors, and placed in the output MDEventWorkspace. The dimensions of +the output workspace are along the basis vectors specified. + +Splitting Parameters +~~~~~~~~~~~~~~~~~~~~ + +The **OutputBins** parameter is interpreted as the "SplitInto" parameter +for each dimension. For instance, if you want the output workspace to +split in 2x2x2, you would specify OutputBins="2,2,2". + +For 1D slices, it may make sense to specify a SplitInto parameter of 1 +in every other dimension - that way, boxes will only be split along the +1D direction. + +Slicing a MDHistoWorkspace +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is possible to slice a `MDHistoWorkspace `__. Each +MDHistoWorkspace holds a reference to the +`MDEventWorkspace `__ that created it, as well as the +coordinate transformation that was used. + +In this case, the algorithm is executed on the original +MDEventWorkspace, in the proper coordinates. Perhaps surprisingly, the +output of SliceMD on a MDHistoWorkspace is a MDEventWorkspace! + +Only the non-axis aligned slice method can be performed on a +MDHistoWorkspace! Of course, your basis vectors can be aligned with the +dimensions, which is equivalent. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SmoothData-v1.rst b/Code/Mantid/docs/source/algorithms/SmoothData-v1.rst new file mode 100644 index 000000000000..3fd5922ebb67 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SmoothData-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Smooths out statistical jitter in a workspace's data by making each +point the mean average of itself and one or more points lying +symmetrically either side of it. The statistical error on each point +will be reduced by sqrt(npts) because more data is now contributing to +it. For points at the end of each spectrum, a reduced number of +smoothing points will be used. For example, if NPoints is 5 the first +value in the spectrum will be smoothed by making it the average of the +first 3 values, the next will use the first 4 and then the third and +onwards will use the full 5 points in the averaging. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SmoothNeighbours-v1.rst b/Code/Mantid/docs/source/algorithms/SmoothNeighbours-v1.rst new file mode 100644 index 000000000000..c6dfcabac850 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SmoothNeighbours-v1.rst @@ -0,0 +1,159 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm performs a moving-average smoothing of data by summing +spectra of nearest neighbours over the face of detectors. The output +workspace has the same number of spectra as the input workspace. This +works on both `EventWorkspaces `__ and +`Workspace2D `__'s. It has two main modes of operation. + +Processing Either Generically or Assuming Rectangular Detectors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You may either specify properties for the Rectangular Detector Group, or +the Non-uniform Detector Group, but not both. If you provide inputs for +the Rectangular Detector group, then the algorithm execution will assume +that this is your desired processing route. + +For All Instruments +~~~~~~~~~~~~~~~~~~~ + +Going through the input workspace pixel-by-pixel, Mantid finds the +nearest-neighbours with the given Radius of each pixel. The spectra are +then summed together, and normalizing to unity (see the weighting +section below). + +For Instruments With Rectangular Detectors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The algorithm looks through the `Instrument `__ to find all +the `RectangularDetectors `__ defined. For each +pixel in each detector, the AdjX\*AdjY neighboring spectra are summed +together and saved in the output workspace. + +WeightedSum parameter +~~~~~~~~~~~~~~~~~~~~~ + +A weighting strategy can be applied to control how the weights are +calculated. This defaults to a flat weighting strategy. Weights are +summed and scaled so that they add up to 1. + +Flat Weighting +^^^^^^^^^^^^^^ + +All weights are 1. This is completely position in-senitive. + +Linear Weighting +^^^^^^^^^^^^^^^^ + +Weights are calculated according to :math:`w = 1 - r/R`, where w is the +weighting factor, r is the distance from the detector and R is the +cut-off radius. + +Parabolic Weighting +^^^^^^^^^^^^^^^^^^^ + +For rectangular detectors it may be used as follows: The radius must be +zero and a AdjX and AdjY parameter must be provided. +:math:`w = AdjX - abs(x) + AdjY - abs(y) + 1` + +For non-rectangular detectors, the cut-off radius is used in the +calculation. :math:`w = R - abs(x) + R - abs(y) + 1` + +Gaussian Weighting +^^^^^^^^^^^^^^^^^^ + +This weighting is calculated from the Gaussian distribution + +:math:`w = e^{-r^2/(2\sigma^2)}` + +where :math:`r^2 = x^2 + y^2 + z^2` and :math:`\sigma` is the number of +standard deviations controlling the width of the distribution curve + +Important notes about this algorithm are that: + +- Distances are normalised by the radius cut-off to make them + dimensionless and scaled to 1 at the boundaries. + +For EventWorkspaces +~~~~~~~~~~~~~~~~~~~ + +Both methods of smoothing will **significantly** increase the memory +usage of the workspace. For example, if AdjX=AdjY=1, the algorithm will +sum 9 nearest neighbours in most cases. This increases the memory used +by a factor of 9. + +For Workspace2D's +~~~~~~~~~~~~~~~~~ + +You can use PreserveEvents = false to avoid the memory issues with an +EventWorkspace input. Please note that the algorithm **does not check** +that the bin X boundaries match. + +Neighbour Searching +~~~~~~~~~~~~~~~~~~~ + +File:NNSearchByRadius.jpg\ \|\ *Fig. 1*. +File:NNSearchIrregularGrid.jpg\ \|\ *Fig. 2*. +File:NNSearchLimitByRadius.jpg\ \|\ *Fig. 3* +File:NNSearchLimitByNNs.jpg\ \|\ *Fig. 4* File:NNSearchXY.jpg\ \|\ *Fig. +5* + +Property Values of Examples +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +| *Fig. 1* : Requesting NumberOfNeighbours=36, Radius=3. Algorithm looks +for 36 nearest neighbours with a cut-off of 3 detector widths. +| *Fig. 2* : Requesting NumberOfNeighbours=46, Radius=2. Algorithm looks +for 46 nearest neighbours with a cut-off of 2 detector widths. +| *Fig. 3* : Requesting NumberOfNeighbours=56, Radius=3. Algorithm looks +for 56 nearest neighbours with a cut-off of 3 detector widths. +| *Fig. 4* : Requesting NumberOfNeighbours=8, Radius=3. Algorithm looks +for 8 nearest neighbours with a cut-off of 3 detector widths. +| *Fig. 5* : Requesting AdjX=4, AdjY=2, Radius=0. Algorithm fetches +neighbours in the specified pattern. + +How it Works +^^^^^^^^^^^^ + +The algorithm will fetch neigbours using the intesection of those inside +the radius cut-off and those less than the NumberOfNeighbours specified. +*Fig. 1* illustrates this process. Searching is relative to the central +detector, those constrained by both specified number of neighbours have +been highlighted. In this case the radius cut-off and the number of +neighbours constrain the same number of detectors. + +Searching via the number of neighbours will not necessarily return the +neighbours in a grid with the same number of detectors in each axis. +*Fig. 2* shows how neighbours might be returned if distances are +non-uniform. If RectangularDetectors are available, you may force the +searching to occur in rectangular manner (described below). + +The SmoothingNeighbours algorithm will only take those neighbours which +are in the intersection between those constrained by the cut-off and +those constrained by the specified number of neighbours. If the radius +cut-off is the limiting factor, then those neighbours outside will not +be considered. This is illustrated in *Fig. 3* where the blue detectors +will not be considered, but will not with this radius cut-off, while the +green ones will. Likewise, in *Fig. 4* the effect of reducing the +NumberOfNeighbours property can be seen. + +If the radius is set to 0, the instrument is treated as though it has +rectangular detectors. AdjX and AdjY can then be used to control the +number of neighbours independently in x and y using the AdjX and AdjY +properties. *Fig. 5* Shows the effect of this type of searching. + +Ignore Masks +~~~~~~~~~~~~ + +The algorithm will ignore masked detectors if this flag is set. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SofQW-v1.rst b/Code/Mantid/docs/source/algorithms/SofQW-v1.rst new file mode 100644 index 000000000000..826d72298c51 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SofQW-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is for use by inelastic instruments and takes as its +input a workspace where the data's been reduced to be in units of energy +transfer against spectrum number (which can be seen as equivalent to +angle, with the angle being taken from the detector(s) to which the +spectrum pertains). For each bin the value of momentum transfer +(:math:`q`) is calculated, and the counts for that bin are assigned to +the appropriate :math:`q` bin. + +The energy binning will not be changed by this algorithm, so the input +workspace should already have the desired bins (though this axis can be +rebinned afterwards if desired). The EMode and EFixed parameters are +required for the calculation of :math:`q`. + +If the input workspace is a distribution (i.e. counts / meV ) then the +output workspace will similarly be divided by the bin width in both +directions (i.e. will contain counts / meV / (1/Angstrom) ). + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SofQW2-v1.rst b/Code/Mantid/docs/source/algorithms/SofQW2-v1.rst new file mode 100644 index 000000000000..941b7c5b956f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SofQW2-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Converts a 2D workspace from units of spectrum number/energy transfer to +the intensity as a function of momentum transfer and energy. The +rebinning is done as a weighted sum of overlapping polygons. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SofQW3-v1.rst b/Code/Mantid/docs/source/algorithms/SofQW3-v1.rst new file mode 100644 index 000000000000..2f02ca9d0f37 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SofQW3-v1.rst @@ -0,0 +1,29 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Converts a 2D workspace from units of spectrum number, energy transfer +to the intensity as a function of momentum transfer and energy. The +rebinning is done as a weighted sum of overlapping polygons with +fractional area tracking. The result is stored in a new workspace type: +**RebinnedOutput**. The new workspace presents the data as the +fractional counts divided by the fractional area. The biggest +consequence of this method is that in places where there are no counts +and no acceptance (no fractional areas), **nan**\ s will result. + +The algorithm operates in non-PSD mode by default. This means that all +azimuthal angles and widths are forced to zero. PSD mode will determine +the azimuthal angles and widths from the instrument geometry. This mode +is activated by placing the following named parameter in a Parameter +file: *detector-neighbour-offset*. The integer value of this parameter +should be the number of pixels that separates two pixels at the same +vertical position in adjacent tubes. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SofQWMoments-v1.rst b/Code/Mantid/docs/source/algorithms/SofQWMoments-v1.rst new file mode 100644 index 000000000000..e21f57f1a111 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SofQWMoments-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates the :math:`n^{th}` moment :math:`M_n` of :math:`y(Q,w)` where +:math:`M_n` is the integral of :math:`w^n*y(Q,w)` over all w for +:math:`n=0` to 4. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SolidAngle-v1.rst b/Code/Mantid/docs/source/algorithms/SolidAngle-v1.rst new file mode 100644 index 000000000000..18a3ab1edb50 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SolidAngle-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm calculates solid angles from the sample position of the +input workspace for all of the spectra selected. If several detectors +have been mapped to the same spectrum then the solid angles of this +detectors will be summed to provide the solid angle for the spectrum. +The solid angle of a detector that has been masked or marked as dead is +considered to be 0 steradians. + +This algorithms can happily accept `ragged +workspaces `__ as an input workspace. The result would +be a ragged output workspace whose X axis values match the lowest and +highest of each the input spectra. + +Note: The Solid angle calculation assumes that the path between the +sample and detector is unobstructed by another other instrument +components. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SortByQVectors-v1.rst b/Code/Mantid/docs/source/algorithms/SortByQVectors-v1.rst new file mode 100644 index 000000000000..d64fa352346d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SortByQVectors-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm sorts a group workspace by the qvectors found in the +qvectors file. Workspaces will be tranformed if the qvectors dimension +is in the bins. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SortDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/SortDetectors-v1.rst new file mode 100644 index 000000000000..5188ea3acac4 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SortDetectors-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm to sort detectors by distance. Will return arrays for upstream +(downstrem) spectrum number and detector distances, ordered by distance. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SortEvents-v1.rst b/Code/Mantid/docs/source/algorithms/SortEvents-v1.rst new file mode 100644 index 000000000000..845f7e73f9db --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SortEvents-v1.rst @@ -0,0 +1,20 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +In an `EventWorkspace `__, event binning is performed on +the fly. The algorithm for binning requires a list of events sorted by +time of flight, so it will perform a sort (once) on each pixel - +however, this is done on request and without using multiple CPUs). To +speed up the calculation, the Sort algorithm pre-sorts by Time of +Flight, using multiple CPUs. Using this algorithm is completely +optional. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SortHKL-v1.rst b/Code/Mantid/docs/source/algorithms/SortHKL-v1.rst new file mode 100644 index 000000000000..dbabfdf96fa8 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SortHKL-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Peaks are sorted first by H, then K, and then L. For equivalent HKL in +the point group, the intensity is averaged and all the equivalent HKLs +have the same average intensity. Outliers with zscore > 3 from each +group of equivalent HKLs are not included in the average. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SortPeaksWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/SortPeaksWorkspace-v1.rst new file mode 100644 index 000000000000..68897c21bd5e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SortPeaksWorkspace-v1.rst @@ -0,0 +1,18 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Sort a peaks workspace by a single column. Sorting of that +PeaksWorkspace by that column can either happen in an ascending or +descending fashion. The algorithm can either be used to generate a new +OutputWorkspace, which is sorted as requested, or to perform an in-place +sort of the InputWorkspace. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SortXAxis-v1.rst b/Code/Mantid/docs/source/algorithms/SortXAxis-v1.rst new file mode 100644 index 000000000000..003e8e33124e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SortXAxis-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Clones the input `Matrix Workspaces `__ and orders the +x-axis in an ascending fashion. Ensures that the y-axis and error data +is sorted in a consistent way with the x-axis. All x-values of the input +workspace MUST be in either a descending or ascending fashion before +passing to this algorithm. + +This algorithm is for use with small workspaces loaded. It is +particularly suitable for reformatting workspaces loaded via +`LoadASCII `__. Input workspaces must be a distribution. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst b/Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst new file mode 100644 index 000000000000..41fa57e1c8c9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm creates an XML Grouping file of the form: + +.. code:: xml + + + + + + + +Based on information retrieved from the `Nearest +Neighbours `__ class in Mantid Geometry. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SpecularReflectionCalculateTheta-v1.rst b/Code/Mantid/docs/source/algorithms/SpecularReflectionCalculateTheta-v1.rst new file mode 100644 index 000000000000..aef2ebe5139f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SpecularReflectionCalculateTheta-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Uses the Specular reflection condition ThetaIn == ThetaOut to calculate +and return a corrected ThetaIn. + +:math:`2*ThetaOut = tan^{-1}\frac{UpOffset}{BeamOffset}` + +The calculated theta value in degrees is returned by the algorithm. + +Also see +:ref:`_algm-SpecularReflectionPositionCorrect` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SpecularReflectionPositionCorrect-v1.rst b/Code/Mantid/docs/source/algorithms/SpecularReflectionPositionCorrect-v1.rst new file mode 100644 index 000000000000..13a051fc367a --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SpecularReflectionPositionCorrect-v1.rst @@ -0,0 +1,24 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Uses the specular reflection condition along with a supplied theta value +to vertically shift the detectors into a corrected location. + +ThetaIn == ThetaOut + +and + +:math:`2*ThetaOut = tan^{-1}\frac{UpOffset}{BeamOffset}` + +For LineDetectors and MultiDetectors, the algorithm uses an average of +grouped detector locations to determine the detector position. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SphericalAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/SphericalAbsorption-v1.rst new file mode 100644 index 000000000000..0eec80e12bc3 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SphericalAbsorption-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates bin-by-bin correction factors for attenuation due to +absorption and scattering in a **spherical** sample. Sample data must be +divided by these corrections. Algorithm calls +:ref:`_algm-AnvredCorrection`. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SplineBackground-v1.rst b/Code/Mantid/docs/source/algorithms/SplineBackground-v1.rst new file mode 100644 index 000000000000..79437bde4c8c --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SplineBackground-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +SplineBackground uses GSL b-spline and fitting functions to fit a +spectrum. Masked bins are excluded from the fit making it possible to +fit only the background signal. The output workspace has one spectrum of +calculated values and the fitting errors. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SplineInterpolation-v1.rst b/Code/Mantid/docs/source/algorithms/SplineInterpolation-v1.rst new file mode 100644 index 000000000000..c6340ebd9894 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SplineInterpolation-v1.rst @@ -0,0 +1,40 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm performs interpolation of points onto a cubic spline. The +algorithm takes two input workspaces: one that is used to define the +spline and one that contains a number of spectra to be interpolated onto +the spline. + +If multiple spectra are defined in the WorkspaceToInterpolate workspace, +they will all be interpolated against the first spectra in +WorkspaceToMatch. + +Optionally, this algorithm can also calculate the first and second +derivatives of each of the interpolated points as a side product. +Setting the DerivOrder property to zero will force the algorithm to +calculate no derivatives. + +For Histogram Workspaces +~~~~~~~~~~~~~~~~~~~~~~~~ + +If the input workspace contains histograms, rather than data points, +then SplineInterpolation will automatically convert the input to point +data. The output returned with be in the same format as the input. + +Histogram workspaces being interpolated will show a warning when the +range of the data is equal to the size of the workspace to match, but +has finer bin boundaries. This is because histogram data is converted to +point data using the average of the bin boundaries. This will cause some +values to fall outside of the range of the spline when fine bin +boundaries are used. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SplineSmoothing-v1.rst b/Code/Mantid/docs/source/algorithms/SplineSmoothing-v1.rst new file mode 100644 index 000000000000..45000dfdc58b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SplineSmoothing-v1.rst @@ -0,0 +1,28 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm performs a smoothing of the input data using a cubic +spline. The algorithm takes a 2D workspace and generates a spline for +each of the spectra to approximate a fit of the data. + +Optionally, this algorithm can also calculate the first and second +derivatives of each of the interpolated points as a side product. +Setting the DerivOrder property to zero will force the algorithm to +calculate no derivatives. + +For Histogram Workspaces +~~~~~~~~~~~~~~~~~~~~~~~~ + +If the input workspace contains histograms, rather than data points, +then SplineInterpolation will automatically convert the input to point +data. The output returned with be in the same format as the input. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Squares-v1.rst b/Code/Mantid/docs/source/algorithms/Squares-v1.rst new file mode 100644 index 000000000000..a3a21f78b01d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Squares-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +An example algorithm. + +The wiki description of the algorithm should go here. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst new file mode 100644 index 000000000000..0b7152e03bef --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst @@ -0,0 +1,77 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The StartLiveData algorithm launches a background job that monitors and +processes live data. + +The background algorithm started is +:ref:`_algm-MonitorLiveData`, which simply calls +:ref:`_algm-LoadLiveData` at a fixed interval. + +For details on the way to specify the data processing steps, see: +`LoadLiveData `__. + +Live Plots +~~~~~~~~~~ + +Once live data monitoring has started, you can open a plot in +MantidPlot. For example, you can right-click a workspace and choose +"Plot Spectra". + +As the data is acquired, this plot updates automatically. + +Another way to start plots is to use `python MantidPlot +commands `__. The +StartLiveData algorithm returns after the first chunk of data has been +loaded and processed. This makes it simple to write a script that will +open a live plot. For example: + +.. code:: python + + StartLiveData(UpdateEvery='1.0',Instrument='FakeEventDataListener', + ProcessingAlgorithm='Rebin',ProcessingProperties='Params=10e3,1000,60e3;PreserveEvents=1', + OutputWorkspace='live') + plotSpectrum('live', [0,1]) + +Run Transition Behavior +~~~~~~~~~~~~~~~~~~~~~~~ + +- When the experimenter starts and stops a run, the Live Data Listener + receives this as a signal. +- The *RunTransitionBehavior* property specifies what to do at these + run transitions. + + - Restart: the accumulated data (from the previous run if a run has + just ended or from the time between runs a if a run has just + started) is discarded as soon as the next chunk of data arrives. + - Stop: live data monitoring ends. It will have to be restarted + manually. + - Rename: the previous workspaces are renamed, and monitoring + continues with cleared ones. The run number, if found, is used to + rename the old workspaces. + + - There is a check for available memory before renaming; if there + is not enough memory, the old data is discarded. + +- Note that LiveData continues monitoring even if outside of a run + (i.e. before a run begins you will still receive live data). + +Multiple Live Data Sessions +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is possible to have multiple live data sessions running at the same +time. Simply call StartLiveData more than once, but make sure to specify +unique names for the *OutputWorkspace*. + +Please note that you may be limited in how much simultaneous processing +you can do by your available memory and CPUs. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StartRemoteTransaction-v1.rst b/Code/Mantid/docs/source/algorithms/StartRemoteTransaction-v1.rst new file mode 100644 index 000000000000..9b38917f4148 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/StartRemoteTransaction-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Start a job transaction on a remote compute resource. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StepScan-v1.rst b/Code/Mantid/docs/source/algorithms/StepScan-v1.rst new file mode 100644 index 000000000000..2a1349787b30 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/StepScan-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is for producing rocking curves from alignment scan runs. +It is for use only with ADARA-style SNS datasets as it requires the +'scan\_index' log variable. + +The algorithm optionally uses the :ref:`_algm-MaskDetectors` +and/or :ref:`_algm-FilterByXValue` algorithms to restrict the +region of data included. **N.B. If these options are used, then this +algorithm will modify the input workspace.** + +The :ref:`_algm-SumEventsByLogValue` algorithm is then +called, with 'scan\_index' as the log to sum against. The row of the +resulting table pertaining to scan\_index=0 (which indicates 'not a scan +point') is then removed. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Stitch1D-v3.rst b/Code/Mantid/docs/source/algorithms/Stitch1D-v3.rst new file mode 100644 index 000000000000..2a36386ec956 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Stitch1D-v3.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Stitches single histogram `Matrix Workspaces `__ +together outputting a stitched Matrix Workspace. Either the +right-hand-side or left-hand-side workspace can be chosen to be scaled. +Users must provide a Param step (single value), but the binning start +and end are calculated from the input workspaces if not provided. +Likewise, StartOverlap and EndOverlap are optional. If the StartOverlap +or EndOverlap are not provided, then these are taken to be the region of +x-axis intersection. + +The workspaces must be histogrammed. Use +:ref:`_algm-ConvertToHistogram` on workspaces prior to +passing them to this algorithm. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Stitch1DMD-v1.rst b/Code/Mantid/docs/source/algorithms/Stitch1DMD-v1.rst new file mode 100644 index 000000000000..3a31d45e604b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Stitch1DMD-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Performs 1D stitching of Reflectometry 2D MDHistoWorkspaces. Based on +the Quick script developed at ISIS. This only works on 1D Histogrammed +MD Workspaces. + +Scales either the LHS or RHS workspace by some scale factor which, can +be manually specified, or calculated from the overlap. + +Calculates the weighted mean values in the overlap region and then +combines the overlap region with the difference of the LHS and RHS +workspaces + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Stitch1DMany-v1.rst b/Code/Mantid/docs/source/algorithms/Stitch1DMany-v1.rst new file mode 100644 index 000000000000..8509e724e0df --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Stitch1DMany-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Stitches single histogram `Matrix Workspaces `__ +together outputting a stitched Matrix Workspace. This algorithm is a +wrapper over :ref:`_algm-Stitch1D`. + +The algorithm expects pairs of StartOverlaps and EndOverlaps values. The +order in which these are provided determines the pairing. There should +be N entries in each of these StartOverlaps and EndOverlaps lists, where +N = 1 -(No of workspaces to stitch). StartOverlaps and EndOverlaps are +in the same units as the X-axis for the workspace and are optional. + +The workspaces must be histogrammed. Use +:ref:`_algm-ConvertToHistogram` on workspaces prior to +passing them to this algorithm. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StopRemoteTransaction-v1.rst b/Code/Mantid/docs/source/algorithms/StopRemoteTransaction-v1.rst new file mode 100644 index 000000000000..3ca2ef82bd32 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/StopRemoteTransaction-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Stop a job transaction on a remote compute resource. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst new file mode 100644 index 000000000000..0f7ba5473451 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst @@ -0,0 +1,21 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is intended to automatically find all the peaks in a +dataset and subtract them, leaving just the residual 'background'. + +ChildAlgorithms used +^^^^^^^^^^^^^^^^^^^^ + +The :ref:`_algm-FindPeaks` algorithm is used to identify the peaks in +the data. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StripVanadiumPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/StripVanadiumPeaks-v1.rst new file mode 100644 index 000000000000..4b86d445c9af --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/StripVanadiumPeaks-v1.rst @@ -0,0 +1,30 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +- A list of vanadium peak positions in d-spacing is used for the + central peak positions: + 0.5044,0.5191,0.5350,0.5526,0.5936,0.6178,0.6453,0.6768,0.7134,0.7566,0.8089,0.8737,0.9571,1.0701,1.2356,1.5133,2.1401 + + - You can specify AlternativePeakPositions to use other value (e.g. + in other units). + +- The PeakWidthPercent value is used to estimate the width of the peak + (as a percentage of the d-spacing value). +- The algorithm performs a simple linear fit of the background exluding + the peak. + + - It uses two use averaging regions of 1/2 width, centered at +- + width/2 from the center, and interpolates the linear background + from it. + - The values between the average regions are replaced with the + interpolated linear background drawn as a straight line. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StripVanadiumPeaks-v2.rst b/Code/Mantid/docs/source/algorithms/StripVanadiumPeaks-v2.rst new file mode 100644 index 000000000000..30930afa4bb5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/StripVanadiumPeaks-v2.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +- A list of vanadium peak positions in d-spacing is used for the + central peak positions: + 0.5044,0.5191,0.5350,0.5526,0.5936,0.6178,0.6453,0.6768,0.7134,0.7566,0.8089,0.8737,0.9571,1.0701,1.2356,1.5133,2.1401 + +- StripPeaks is called by providing the list of vanadium peak + positions. + +- The vanadium peaks are fit to a function combined from Gaussian and + linear/quadratic background. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SubmitRemoteJob-v1.rst b/Code/Mantid/docs/source/algorithms/SubmitRemoteJob-v1.rst new file mode 100644 index 000000000000..8647b662d196 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SubmitRemoteJob-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Submit a job to be executed on the specified remote compute resource. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SuggestTibCNCS-v1.rst b/Code/Mantid/docs/source/algorithms/SuggestTibCNCS-v1.rst new file mode 100644 index 000000000000..64457f3df458 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SuggestTibCNCS-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Suggest possible time independent background range for CNCS. It works +for incident energy range from 0.5 to 50 meV. By default TibMax is 500 +microseconds before the neutrons arrive at the sample, and TibMin is +3400 microseconds before Tibmax. This range is moved around if a prompt +pulse is in this interval, or it goes below the TOF frame minimum, or it +can be reduced to 2400 microseconds. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SuggestTibHYSPEC-v1.rst b/Code/Mantid/docs/source/algorithms/SuggestTibHYSPEC-v1.rst new file mode 100644 index 000000000000..6e786eb8d786 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SuggestTibHYSPEC-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Suggest possible time independent background range for HYSPEC. It works +for incident energy range from 3 to 100 meV. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst new file mode 100644 index 000000000000..7c78fe67e37d --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst @@ -0,0 +1,51 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm counts up the events in a workspace against the values of +a log within the workspace. It will most commonly be used as a +sub-algorithm of the `RockingCurve `__ algorithm. + +The algorithm has two modes: + +Table output +^^^^^^^^^^^^ + +This option can be used for integer-typed logs and will produce a table +with a row for each integer value between the minimum and maximum +contained in the log, and a further column containing the total events +for which the log had each value. Further columns will be added for: + +- Monitors, if any - this requires an event workspace with the same + name as the input workspace plus a '\_monitors' suffix (this is what + :ref:`_algm-LoadEventNexus` will give). +- The total time duration, in seconds, during which the log had each + value. +- The integrated proton charge during the period(s) for which the log + had each value. +- The time-weighted average value of any other number-series logs which + had more than a single value during the run. + +**Warning:** This mode is intended for logs with a small range (e.g. +scan index, period number, status). Be aware that if it is used for a +log with a large range, it will create a table row for every integer +value between the minimum and maximum log value. This might take a long +time! + +Single-spectrum option +^^^^^^^^^^^^^^^^^^^^^^ + +This option can be used for integer or floating point type logs and +requires that the OutputBinning property is specified. It will produce a +single spectrum workspace where the X values are derived from the +OutputBinning property and the Y values are the total counts in each bin +of the log value. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SumNeighbours-v1.rst b/Code/Mantid/docs/source/algorithms/SumNeighbours-v1.rst new file mode 100644 index 000000000000..5e16ed93e037 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SumNeighbours-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm looks through the `Instrument `__ to find all +the `RectangularDetectors `__ defined. For each +detector, the SumX\*SumY neighboring event lists are summed together and +saved in the output workspace as a single spectrum. Therefore, the +output workspace will have 1/(SumX\*SumY) \* the original number of +spectra. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst b/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst new file mode 100644 index 000000000000..fe2af8153910 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst @@ -0,0 +1,25 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is the equivalent of the COLETTE "DISPLAY H/V" command. +It firsts integrates the input workspace, which must contain all the +spectra from the detector of interest - no more and no less (so 128x128 +or 192x192), between the X values given. Then each row or column is +summed between the H/V\_Min/Max values, if given, and the result is a +single spectrum of row or column number against total counts. + +ChildAlgorithms used +^^^^^^^^^^^^^^^^^^^^ + +The :ref:`_algm-Integration` algorithm is used to sum up each +spectrum between XMin & XMax. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SumSpectra-v1.rst b/Code/Mantid/docs/source/algorithms/SumSpectra-v1.rst new file mode 100644 index 000000000000..01479e9d8ee0 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SumSpectra-v1.rst @@ -0,0 +1,49 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Takes a workspace as input and sums all of the spectra within it +maintaining the existing bin structure and units. Any masked spectra are +ignored. The result is stored as a new workspace containing a single +spectra. + +The algorithm adds to the **OutputWorkspace** three additional +properties (Log values). The properties (Log) names are: +**"NumAllSpectra"**, **"NumMaskSpectra"** and **"NumZeroSpectra"**, +where: + +| ``  NumAllSpectra  -- is the number of spectra contributed to the sum`` +| ``  NumMaskSpectra -- the spectra dropped from the summations because they are masked. `` +| ``                    If monitors (``\ **``IncludeMonitors``**\ ``=false) are not included in the summation,`` +| ``                    they are not counted here. `` +| ``  NumZeroSpectra -- number of zero bins in histogram workspace or empty spectra for event workspace. `` +| ``                    These spectra are dropped from the summation of histogram workspace `` +| ``                    when ``\ **``WeightedSum``**\ `` property is set to True.`` + +Assuming **pWS** is the output workspace handle, from Python these +properties can be accessed by the code: + +| ``   nSpectra       = pWS.getRun().getLogData("NumAllSpectra").value`` +| ``   nMaskedSpectra = pWS.getRun().getLogData("NumMaskSpectra").value `` +| ``   nZeroSpectra   = pWS.getRun().getLogData("NumZeroSpectra").value`` + +It is also available in stats property obtained by qtiGenie function +avrg\_spectra + +| ``  (avrg,stats) = avrg_spectra(Input_workspace)`` +| ``   stats==[nSpectra,nMaskedSpectra,nZeroSpectra]`` + +From C++ they can be reached as strings by the code: + +| ``     std::string rez=pWS->run().getLogData("NumAllSpectra")->value();`` +| ``     std::string rez=pWS->run().getLogData("NumMaskSpectra")->value();`` +| ``     std::string rez=pWS->run().getLogData("NumZeroSpectra")->value();`` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Symmetrise-v1.rst b/Code/Mantid/docs/source/algorithms/Symmetrise-v1.rst new file mode 100644 index 000000000000..a4c4e02c66e1 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Symmetrise-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Symmetrise takes an asymmetric :math:`S(Q,w)` - i.e. one in which the +moduli of xmin & xmax are different. Typically xmax is > mod(xmin). A +negative value of x is chosen (Xcut) so that the curve for mod(Xcut) to +xmax is reflected and inserted for x less than the Xcut. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/TOFSANSResolution-v1.rst b/Code/Mantid/docs/source/algorithms/TOFSANSResolution-v1.rst new file mode 100644 index 000000000000..31e726d96923 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/TOFSANSResolution-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Compute the Q resolution for a given I(Q) for a TOF SANS instrument. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/TestWorkspaceGroupProperty-v1.rst b/Code/Mantid/docs/source/algorithms/TestWorkspaceGroupProperty-v1.rst new file mode 100644 index 000000000000..4bbdfd734ae0 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/TestWorkspaceGroupProperty-v1.rst @@ -0,0 +1,14 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is only used for testing. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ThresholdMD-v1.rst b/Code/Mantid/docs/source/algorithms/ThresholdMD-v1.rst new file mode 100644 index 000000000000..71042e4a8fa5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ThresholdMD-v1.rst @@ -0,0 +1,15 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Threshold an MDHistoWorkspace to overwrite values below or above the +defined threshold. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/TransformHKL-v1.rst b/Code/Mantid/docs/source/algorithms/TransformHKL-v1.rst new file mode 100644 index 000000000000..3079f3f2433f --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/TransformHKL-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Given a PeaksWorkspace with a UB matrix stored with the sample, this +algoritm will accept a 3x3 transformation matrix M, change UB to +UB\*M-inverse and map each (HKL) vector to M\*(HKL). For example, the +transformation with elements 0,1,0,1,0,0,0,0,-1 will interchange the H +and K values and negate L. This algorithm should allow the usr to +perform any required transformation of the Miller indicies, provided +that transformation has a positive determinant. If a transformation with +a negative or zero determinant is entered, the algorithm with throw an +exception. The 9 elements of the transformation must be specified as a +comma separated list of numbers. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst b/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst new file mode 100644 index 000000000000..de0b064e08cb --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst @@ -0,0 +1,53 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm applies a simple linear transformation to a +`MDWorkspace `__ or +`MDHistoWorkspace `__. This could be used, for +example, to scale the Energy dimension to different units. + +Each coordinate is tranformed so that :math:`x'_d = (x_d * s_d) + o_d` +where: + +- d : index of the dimension, from 0 to the number of dimensions +- s : value of the Scaling parameter +- o : value of the Offset parameter. + +You can specify either a single value for Scaling and Offset, in which +case the same m\_scaling or m\_offset are applied to each dimension; or +you can specify a list with one entry for each dimension. + +Notes +^^^^^ + +The relationship between the workspace and the original +`MDWorkspace `__, for example when the MDHistoWorkspace is +the result of :ref:`_algm-BinMD`, is lost. This means that you cannot +re-bin a transformed `MDHistoWorkspace `__. + +No units are not modified by this algorithm. + +Performance Notes +^^^^^^^^^^^^^^^^^ + +- Performing the operation in-place (input=output) is always faster + because the first step of the algorithm if NOT in-place is to clone + the original workspace. +- For `MDHistoWorkspaces `__ done in-place, + TransformMD is very quick (no data is modified, just the + coordinates). +- For `MDWorkspaces `__, every event's coordinates gets + modified, so this may take a while for large workspaces. +- For file-backed `MDWorkspaces `__, you will find much + better performance if you perform the change in-place (input=output), + because the data gets written out to disk twice otherwise. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Transpose-v1.rst b/Code/Mantid/docs/source/algorithms/Transpose-v1.rst new file mode 100644 index 000000000000..8887a6eefb16 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/Transpose-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm transposes a workspace, so that an N1 x N2 workspace +becomes N2 x N1. + +The X-vector-values for the new workspace are taken from the axis value +of the old workspace, which is generaly the spectra number but can be +other values, if say the workspace has gone through ConvertSpectrumAxis. + +The new axis values are taken from the previous X-vector-values for the +first specrum in the workspace. For this reason, use with ragged +workspaces is undefined. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/USANSSimulation-v1.rst b/Code/Mantid/docs/source/algorithms/USANSSimulation-v1.rst new file mode 100644 index 000000000000..79e03ab08a11 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/USANSSimulation-v1.rst @@ -0,0 +1,26 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Simulate a USANS workspace. + +A matrix workspace is created for a given analyzer angle. A list of +wavelength peaks coming out of the monochromator can be specified. The +width of those peaks can also be specified. + +Both the main detector and the transmission detector are filled with +compatible signals according to a dummy transmission curve. + +The amplitude of the signal in the main detector is given by a sphere +model. + +A monitor workspace is created with a fake beam profile. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UnGroupWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/UnGroupWorkspace-v1.rst new file mode 100644 index 000000000000..cfd043303dc9 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/UnGroupWorkspace-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Takes a `WorkspaceGroup `__ as input and ungroups it +into several workspaces. You can perform this from the MantidPlot GUI by +selecting the WorkspaceGroup and clicking "Ungroup". + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UnwrapMonitor-v1.rst b/Code/Mantid/docs/source/algorithms/UnwrapMonitor-v1.rst new file mode 100644 index 000000000000..94da5808c3f7 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/UnwrapMonitor-v1.rst @@ -0,0 +1,90 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm is for use with white-beam instruments with choppers. The +chopper cuts the range of wavelengths, so all detectors (including +monitors) should be reduced to the same wavelength range. This is done +using a "reference" flightpath, :math:`L_{ref}`, which is (usually, see +below) the flightpath of the farthest detectors. + +If :math:`T_{min}` and :math:`T_{max}` are the beginning and end of the +frame, for each detector :math:`D` at total flightpath :math:`L_d` the +following times are defined: + +.. math:: T_1 = T_{max} - \left ( T_{min} \times \left ( 1 - \frac{L_d}{L_{ref}} \right ) \right ) + +.. math:: T_2 = T_{max} \times \left ( \frac{L_d}{L_{ref}} \right ) + +Thus if :math:`L_d < L_{ref}` then :math:`T_1 > T_2` + +Neutron velocities (and hence wavelengths) for the detector :math:`D` +are calculated in the following way: + +- For :math:`T_{min} < T < T_2`, velocities are calculated in the usual + way, i.e. :math:`v = \frac{L_d}{T}` + +- Data in the range :math:`T_2 < T < T_1` are ignored (i.e. they are + not used in the wavelength-converted histograms) + +- For :math:`T_1 < T < T_{max}`, velocities are calculated using the + formula :math:`v = \frac{L_d}{T - T_{max} + T_{min}}` + +Note that the minimum and maximum velocities for the points that are +actually *used* are: + +.. math:: v_{max} = \frac{L_d}{T - T_{max} + T_{min}} = \frac{L_{ref}}{T_{min}} + +and :math:`v_{min} = \frac{L_d}{T_2} = \frac{L_{ref}}{T_{max}}` + +In other words, these velocities are the same for all detectors, so the +wavelength range in the transformed histogram will correspondingly be +the same and this algorithm rebins the data into common bins in this +range. + +Occasionally, it may be that some detectors (typically downstream +monitors) may be at a \*longer\* flightpath than :math:`L_{ref}`. This +depends entirely on the chopper aperture/setting. These detectors are +"frame-overlapped" - in other words, there is an ambiguity in the +definition of the wavelength for certain points, which should therefore +be excluded. These points are at the very beginning and at the very end +of the frame for a range :math:`Dt` (equal on both sides) given by + +.. math:: D_t = (T_{max} - T_{min}) \times \left (1 - \frac{L_{ref}}{L_d} \right) + +In other words, points between :math:`T_{min}` and :math:`T_{min} + D_t` +and between :math:`T_{max} - D_t` and :math:`T_{max}` should be +excluded. For all other points, velocities and wavelengths are +calculated in the normal way. + +Note that since we are dealing with histogrammed data, the cut-off +values above will almost certainly not fall exactly on a bin boundary. +The approach taken by this algorithm is that if any part of a bin has a +value that should be excluded, then the entire bin is excluded. What +this means in practice is that the edge bins will possibly have a +reduced number of counts. + +Restrictions on the input workspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The input workspace must contain histogram data where the X unit is +time-of-flight and the Y data is raw counts. The +`instrument `__ associated with the workspace must be fully +defined because detector, source & sample position are needed. + +Child algorithms used +^^^^^^^^^^^^^^^^^^^^^ + +If the input workspace contains more than a single spectrum, Unwrap +makes use of the `rebin `__ algorithm to set the bins on the +output workspace to common values which cover the maximum theoretically +accessible wavelength range. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst b/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst new file mode 100644 index 000000000000..9c8c540896a6 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst @@ -0,0 +1,47 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +| Slow moving (low energy and long wavelength neutrons) maybe detected +after the end of the frame in which they entered the experimental +apparatus. A schematic example of this is shown below where the neutrons +are marked as circles. +| |Schematic diagram of neutrons entering an instrument and being +detected\|centre\|| +| The two neutons on the right of the diagram were actually produced in +frame 1 but will be recorded in frame 2 at low time of flight (TOF) and +a straight :ref:`_algm-ConvertUnits` will bin them at high energy +and short wavelength! :ref:`_algm-UnwrapSNS` moves those particles to +the end of the spectrum by increasing their time of flight by the +duration of a frame multiplied by the number (one or more) of frames +they were "late" by. + +To assess if it is impossible for a particle to have arrived in the same +frame it was detected a maximum speed for particles is calculated based +on LRef and Tmin. The algorithm then calculates the mean speed of all +detected particles and corrects those whose speed was greater than the +maximum. + +Normally LRef is the total length of the flight path from the source +(particle location when t=0) to a detector. For event data, if the +detector with the shortest flight path was chosen it maybe possible to +leave the Tmin empty and so that a first particle arrival time is used. +Otherwise the Tmin should be set to < the arrival time of the fastest +neutron at the given detector. + +If Tmin was set either Tmax or DataFrameWidth must be set to ensure the +frame duration calculated correctly. If Tmax was set the frame width is +the difference between Tmax and Tmin. DataFrameWidth overrides this and +the width is the difference between the longest and shortest TOFs in the +data. + +.. |Schematic diagram of neutrons entering an instrument and being detected\|centre\|| image:: UnwrapSNS_inst.png + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UpdateInstrumentFromFile-v1.rst b/Code/Mantid/docs/source/algorithms/UpdateInstrumentFromFile-v1.rst new file mode 100644 index 000000000000..1ac084a9668b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/UpdateInstrumentFromFile-v1.rst @@ -0,0 +1,64 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Some instrument definition file (`IDF `__) +positions are only approximately correct and the true positions are +located within data files. This algorithm reads the detector positioning +from the supplied file and updates the instrument accordingly. It +currently supports ISIS Raw, ISIS NeXus files and ASCII files. + +It is assumed that the positions specified in the file are all with +respect to the a coordinate system defined with its origin at the sample +position. Note that this algorithm moves the detectors without +subsequent rotation, hence this means that detectors may not for example +face the sample perfectly after this algorithm has been applied. + +Additional Detector Parameters Using ASCII File +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ASCII format allows a multi-column text file to provide new +positions along with additional parameters for each detector. If a text +file is used then the ``AsciiHeader`` parameter is required as it +identifies each column in the file as header information in the file is +always ignored. There is a minor restriction in that the first column is +expected to specify either a detector ID or a spectrum number and will +never be interpreted as anything else. + +The keywords recognised by the algorithm to pick out detector position +values & spectrum/ID values are: spectrum, ID, R,theta, phi. The +spectrum/ID keywords can only be used in the first column. A dash (-) is +used to ignore a column. + +As an example the following header: + +:: + + spectrum,theta,t0,-,R + +and the following text file: + +:: + + 1 0.0000 -4.2508 11.0550 -2.4594 + 2 0.0000 0.0000 11.0550 2.3800 + 3 130.4653 -0.4157 11.0050 0.6708 + 4 131.9319 -0.5338 11.0050 0.6545 + 5 133.0559 -0.3362 11.0050 0.6345 + +would tell the algorithm to interpret the columns as: + +#. Spectrum number +#. Theta position value +#. A new instrument parameter called t0 +#. This column would be ignored +#. R position value + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UpdatePeakParameterTableValue-v1.rst b/Code/Mantid/docs/source/algorithms/UpdatePeakParameterTableValue-v1.rst new file mode 100644 index 000000000000..0796934d0ad5 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/UpdatePeakParameterTableValue-v1.rst @@ -0,0 +1,53 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +In algorithms related to `Le Bail Fit `__ and powder +diffractomer instrument profile calibration, TableWorkspace containing +the peak profile parameters' information are used as input and output. +*UpdatePeakParameterTableValue* gives user the method to change the +value of parameters' information, including its status to fit, value, +minimum/maximum value (for boundary contrains) and step size (for Monte +Carlo optimizer). + +Format of TableWorkspace +------------------------ + +TableWorkspace containing peak profile parameters must have 2 columns, +"Name" and "Value". It can have but not be limited to the following +columns, "Min", "Max", "Stepsize" and "FitOrTie". + +Specify A Cell or Cells +----------------------- + +The cell to have value updated can be specified by its row and column +index. + +- Column index is determined by property "Column". +- Row index can be specified by property "Row", which requires a list + of row indexes, or property "ParameterNames", which requires a list + of strings. If "ParameterNames" is used as the input of row indexes, + the algorithm will go through each row to match the string value of + cell "Name" (i.e., parameter name) to each input parameter name. +- If neither "Row" nor "ParameterNames" is given by user, then all + cells in the column will have the value updated to a same value from + either "NewFloatValue" or "NewStringValue" according to the type of + the cell. +- If multiple row indexes are specified, then all the cells of the + specified column and rows are updated to same value from either + "NewFloatValue" or "NewStringValue". + +How to use algorithm with other algorithms +------------------------------------------ + +This algorithm is designed to work with `other +algorithms `__ to do Le Bail fit. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UpdateScriptRepository-v1.rst b/Code/Mantid/docs/source/algorithms/UpdateScriptRepository-v1.rst new file mode 100644 index 000000000000..6d47c2860e21 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/UpdateScriptRepository-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +It updates the `ScriptRepository `__. It checkout the +information of the central repository and download all the files marked +for AutoUpdate. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UploadRemoteFile-v1.rst b/Code/Mantid/docs/source/algorithms/UploadRemoteFile-v1.rst new file mode 100644 index 000000000000..4c2e7e101186 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/UploadRemoteFile-v1.rst @@ -0,0 +1,19 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Uploads a file to the specified compute resource. Presumably, the file +is a python script or input data necessary to run a Mantid algorithm on +the remote compute resource. + +For more details, see the `remote job submission API +docs `__. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UserFunction1D-v1.rst b/Code/Mantid/docs/source/algorithms/UserFunction1D-v1.rst new file mode 100644 index 000000000000..16c5b23c5b53 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/UserFunction1D-v1.rst @@ -0,0 +1,99 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm fits a spectrum to a user defined function. The function +is supplied to the algorithm as a text string. The function here is a +mathematical expression using numbers, variable names and internal +function names. Symbols '+', '-', '\*', '/', and '^' can be used for +arithmetic operations. Names can contain only letters, digits, and the +underscore symbol '\_'. The internal functions are: + ++---------+---------+-------------------------------------+ +| Name | Argc. | Explanation | ++=========+=========+=====================================+ +| sin | 1 | sine function | ++---------+---------+-------------------------------------+ +| cos | 1 | cosine function | ++---------+---------+-------------------------------------+ +| tan | 1 | tangens function | ++---------+---------+-------------------------------------+ +| asin | 1 | arcus sine function | ++---------+---------+-------------------------------------+ +| acos | 1 | arcus cosine function | ++---------+---------+-------------------------------------+ +| atan | 1 | arcus tangens function | ++---------+---------+-------------------------------------+ +| sinh | 1 | hyperbolic sine function | ++---------+---------+-------------------------------------+ +| cosh | 1 | hyperbolic cosine | ++---------+---------+-------------------------------------+ +| tanh | 1 | hyperbolic tangens function | ++---------+---------+-------------------------------------+ +| asinh | 1 | hyperbolic arcus sine function | ++---------+---------+-------------------------------------+ +| acosh | 1 | hyperbolic arcus tangens function | ++---------+---------+-------------------------------------+ +| atanh | 1 | hyperbolic arcur tangens function | ++---------+---------+-------------------------------------+ +| log2 | 1 | logarithm to the base 2 | ++---------+---------+-------------------------------------+ +| log10 | 1 | logarithm to the base 10 | ++---------+---------+-------------------------------------+ +| log | 1 | logarithm to the base 10 | ++---------+---------+-------------------------------------+ +| ln | 1 | logarithm to base e (2.71828...) | ++---------+---------+-------------------------------------+ +| exp | 1 | e raised to the power of x | ++---------+---------+-------------------------------------+ +| sqrt | 1 | square root of a value | ++---------+---------+-------------------------------------+ +| sign | 1 | sign function -1 if x<0; 1 if x>0 | ++---------+---------+-------------------------------------+ +| rint | 1 | round to nearest integer | ++---------+---------+-------------------------------------+ +| abs | 1 | absolute value | ++---------+---------+-------------------------------------+ +| if | 3 | if ... then ... else ... | ++---------+---------+-------------------------------------+ +| min | var. | min of all arguments | ++---------+---------+-------------------------------------+ +| max | var. | max of all arguments | ++---------+---------+-------------------------------------+ +| sum | var. | sum of all arguments | ++---------+---------+-------------------------------------+ +| avg | var. | mean value of all arguments | ++---------+---------+-------------------------------------+ + +An example of *Function* property is "a + b\*x + c\*x^2". Valiable *x* +is used to represent the values of the X-vector of the input spectrum. +All other variable names are treated as fitting parameters. A parameter +can be given an initial value in the *InitialParameters* property. For +example, "b=1, c=0.2". The order in which the variables are listed is +not important. If a variable is not given a value, it is initialized +with 0.0. If some of the parameters should be fixed in the fit list them +in the *Fix* property in any order, e.g. "a,c". + +The resulting parameters are returned in a +`TableWorkspace `__ set in *OutputParameters* property. +Also for displaying purposes *OutputWorkspace* is returned. It contains +the initial spectrum, the fitted spectrum and their difference. + +Example +------- + +.. figure:: /images/UserFunction1D.gif + :alt: UserFunction1D.gif + + UserFunction1D.gif +In this example the fitting function is a\*exp(-(x-c)^2\*s). The +parameter *s* is fixed. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ViewBOA-v1.rst b/Code/Mantid/docs/source/algorithms/ViewBOA-v1.rst new file mode 100644 index 000000000000..5b1209ade617 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/ViewBOA-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Algorithm which loads a BOA file and creates the 3 BOA plots of Uwe +Filges desire + +Mark Koennecke, July 2013 + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/WeightedMean-v1.rst b/Code/Mantid/docs/source/algorithms/WeightedMean-v1.rst new file mode 100644 index 000000000000..1a80f06ae513 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/WeightedMean-v1.rst @@ -0,0 +1,22 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +The algorithm calculates the weighted mean of two workspaces. This is +useful when working with distributions rather than histograms, +particularly when counting statistics are poor and it is possible that +the value of one data set is statistically insignificant but differs +greatly from the other. In such a case simply calculating the average of +the two data sets would produce a spurious result. This algorithm will +eventually be modified to take a list of workspaces as an input. + +:math:`\displaystyle y=\frac{\sum\frac{x_i}{\sigma^{2}_i}}{\sum\frac{1}{\sigma^{2}_i}}` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/WeightedMeanMD-v1.rst b/Code/Mantid/docs/source/algorithms/WeightedMeanMD-v1.rst new file mode 100644 index 000000000000..8d5594affd79 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/WeightedMeanMD-v1.rst @@ -0,0 +1,17 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Takes two MDHistoWorkspaces and calculates the weighted mean for each +bin. See :ref:`_algm-WeightedMean` for more details on the +algorithm workings. Both inputs must be MDHistoWorkspaces, the algorithm +will not run with MDEventWorkspaces. + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/WeightedMeanOfWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/WeightedMeanOfWorkspace-v1.rst new file mode 100644 index 000000000000..4a2a2e59825b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/WeightedMeanOfWorkspace-v1.rst @@ -0,0 +1,23 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm calculates the weighted mean from all the spectra in a +given workspace. Monitors and masked spectra are ignored. Also, +individual bins with IEEE values will be excluded from the result. The +weighted mean calculated by the following: + +:math:`\displaystyle y=\frac{\sum\frac{x_i}{\sigma^{2}_i}}{\sum\frac{1}{\sigma^{2}_i}}` + +and the variance is calculated by: + +:math:`\displaystyle \sigma^{2}_y=\frac{1}{\sum\frac{1}{\sigma^{2}_i}}` + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/XorMD-v1.rst b/Code/Mantid/docs/source/algorithms/XorMD-v1.rst new file mode 100644 index 000000000000..ca969f338285 --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/XorMD-v1.rst @@ -0,0 +1,16 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Perform the Xor (exclusive-or) boolean operation on two +MDHistoWorkspaces. The xor operation is performed element-by-element. A +signal of 0.0 means "false" and any non-zero signal is "true". + +.. categories:: diff --git a/Code/Mantid/docs/source/functions/Abragam.rst b/Code/Mantid/docs/source/functions/Abragam.rst new file mode 100644 index 000000000000..27fbe711d6d8 --- /dev/null +++ b/Code/Mantid/docs/source/functions/Abragam.rst @@ -0,0 +1,11 @@ +======= +Abragam +======= + + +Description +----------- + +Abragam fitting function for use by Muon scientists defined by + +.. math:: \mbox{A}\times cos( 2 \pi \times {Omega} \times {x} + {Phi} ) \times \exp(-{Sigma}^2 \times Tau^2 \times {x}^2 \times ( exp ( {x} / Tau ) - 1 + {x} / Tau ) ) diff --git a/Code/Mantid/docs/source/functions/BSpline.rst b/Code/Mantid/docs/source/functions/BSpline.rst new file mode 100644 index 000000000000..574ed8c1b345 --- /dev/null +++ b/Code/Mantid/docs/source/functions/BSpline.rst @@ -0,0 +1,19 @@ +======= +BSpline +======= + + +Description +----------- + +This function creates spline using the set of points and interpolates +the input between them. + +First and second derivatives from the spline can be calculated by using +the derivative1D function. + +BSpline function takes a set of attributes and a set of parameters. The +first attrbiute is 'n' which has integer type and sets the number of +interpolation points. The parameter names have the form 'yi' where 'y' +is letter 'y' and 'i' is the parameter's index starting from 0 and have +the type double. Likewise, the attribute names have the form 'xi'. diff --git a/Code/Mantid/docs/source/functions/BackToBackExponential.rst b/Code/Mantid/docs/source/functions/BackToBackExponential.rst new file mode 100644 index 000000000000..acc8c36e60c9 --- /dev/null +++ b/Code/Mantid/docs/source/functions/BackToBackExponential.rst @@ -0,0 +1,47 @@ +===================== +BackToBackExponential +===================== + + +Description +----------- + +A back-to-back exponential peakshape function is defined as: + +.. math:: I\frac{AB}{2(A+B)}\left[ \exp \left( \frac{A[AS^2+2(x-X0)]}{2}\right) \mbox{erfc}\left( \frac{AS^2+(x-X0)}{S\sqrt{2}} \right) + \exp \left( \frac{B[BS^2-2(x-X0)]}{2} \right) \mbox{erfc} \left( \frac{[BS^2-(x-X0)]}{S\sqrt{2}} \right) \right]. + +This peakshape function represent the convolution of back-to-back +exponentials and a gaussian function and is designed to be used for the +data analysis of time-of-flight neutron powder diffraction data, see +Ref. 1. + +The parameters :math:`A` and :math:`B` represent the absolute value of +the exponential rise and decay constants (modelling the neutron pulse +coming from the moderator) and :math:`S` represent the standard +deviation of the gaussian. The parameter :math:`X0` is the location of +the peak; more specifically it represent the point where the +exponentially modelled neutron pulse goes from being exponentially +rising to exponentially decaying. :math:`I` is the integrated intensity. + +For information about how to convert Fullprof back-to-back exponential +parameters into those used for this function see +`CreateBackToBackParameters `__. + +References + +1. R.B. Von Dreele, J.D. Jorgensen & C.G. Windsor, J. Appl. Cryst., 15, +581-589, 1982 + +The figure below illustrate this peakshape function fitted to a TOF +peak: + +.. figure:: /images/BackToBackExponentialWithConstBackground.png + :alt: BackToBackExponentialWithConstBackground.png + + BackToBackExponentialWithConstBackground.png +Properties +---------- + +*Note the initial default guesses for in particular A and B are only +based on fitting a couple of peaks in a dataset collected on the ISIS's +HRPD instrument.* diff --git a/Code/Mantid/docs/source/functions/BivariateNormal.rst b/Code/Mantid/docs/source/functions/BivariateNormal.rst new file mode 100644 index 000000000000..510da7c53bff --- /dev/null +++ b/Code/Mantid/docs/source/functions/BivariateNormal.rst @@ -0,0 +1,62 @@ +=============== +BivariateNormal +=============== + + +Description +----------- + +Provides a peak shape function interface for a peak on one time slice of +a Rectangular detector. + +Formula: V=Background+Intensity\*Normal( μ\ :sub:`x`, μ\ :sub:`y`, +σ\ :sub:`x`, σ\ :sub:`y`) + +The Normal(..) is the Normal probability density function. Its integral +over all x(col) and y(row) values is one. This means that Intensity is +the total intensity with background removed. + +Attributes +~~~~~~~~~~ + +There is only one Attribute: **CalcVariances**. This attribute is +boolean. + +If true, the variances are calculated from the data, given the means, +variances and covariance. Otherwise they will become parameters and fit. + +CalcVariances = true gives better/more stable results for peaks interior +to the Rectangular Detector. For peaks close to the edge, CalcVariances +should be false. + +Parameters +~~~~~~~~~~ + +#. Background - The background of the peak +#. Intensity - The intensity of data for the peak on this time slice +#. Mcol - The col(x) of the center of the peak +#. Mrow - The row(y) of the center of the peak on this slice +#. ------- If CalcVariances is false, the following 3 parameters are + also fit--------- +#. SScol -The variance of the column(x) values in the peak for this time + slice +#. SSrow - The variance of the row(y) values in the peak for this time + slice +#. SSrc - The covariance of the row(x) and column(y) values in the peak + for this time slice + +Usage +~~~~~ + +The workspace can be "any" MatrixWorkspace where + +#. dataY(1) is the column(x) values for the pixels to be considered +#. dataY(2) is the row(y) values for the pixels to be considered +#. dataY(0)is the experimental data at the corresponding row and column + for a panel and time slice( or merged time slices or...) + +The data can have missing row and column values and need not represent a +square or contiguous subregion of a panel + +The values for out in function1D are, for each pixel, the difference of +V(see formula) and dataY(0). diff --git a/Code/Mantid/docs/source/functions/Chebyshev.rst b/Code/Mantid/docs/source/functions/Chebyshev.rst new file mode 100644 index 000000000000..1dcd59d76527 --- /dev/null +++ b/Code/Mantid/docs/source/functions/Chebyshev.rst @@ -0,0 +1,33 @@ +========= +Chebyshev +========= + + +Description +----------- + +This function calculates a partial Chebyshev expansion + +.. math:: \sum_{n=0}^N a_n T_n(a+bx) + +where :math:`a_n` are the expansion coefficients and :math:`T_n(x)` are +Chebyshev polynomials of the first kind defined by the reccurence +relation + +.. math:: T_0(x)=1 \,\! + +.. math:: T_1(x)=x \,\! + +.. math:: T_{n+1}(x)= 2xT_n(x)-T_{n-1}(x) \,\! + +Coefficients :math:`a` and :math:`b` are defined to map the fitting +interval into [-1,1] interval. + +Chebyshev function has tree attributes (non-fitting parameters). First +is 'n' which has integer type and sets the expansion order and creates +n+1 expansion coefficients (fitting parameters). The parameter names +have the form 'Ai' where 'A' is letter 'A' and 'i' is the parameter's +index starting from 0. + +The other two attributes are doubles 'StartX' and 'EndX' which define +the expansion (fitting) interval. diff --git a/Code/Mantid/docs/source/functions/CompositeFunction.rst b/Code/Mantid/docs/source/functions/CompositeFunction.rst new file mode 100644 index 000000000000..bdd5cfddc999 --- /dev/null +++ b/Code/Mantid/docs/source/functions/CompositeFunction.rst @@ -0,0 +1,63 @@ +================= +CompositeFunction +================= + + +Description +----------- + +A composite function is a function containing other functions. It +combines the values calculated by the member functions by adding them. +The members are indexed from 0 to the number of functions minus 1. The +indices are defined by the order in which the functions were added. +Composite functions do not have their own parameters, instead they use +parameters of the member functions. Parameter names are formed from the +member function's index and its parameter name: f[index].[name]. For +example, name "f0.Sigma" would be given to the "Sigma" parameter of a +Gaussian added first to the composite function. If a member function is +a composite function itself the same principle applies: 'f[index].' is +prepended to a name, e.g. "f0.f1.Sigma". + +The input string to the Fit algorithm for a CompositeFunction is +constructed by joining the inputs of the member functions using the +semicolon ';' as a separator. For example, the string for two +`Gaussians `__ with tied sigma parameters may look like the +following: + +``name=Gaussian,PeakCentre=0,Height=1,Sigma=0.1,constraints=(0`__ and `Convolution `__. +Everything said about parameters of the CompositeFunction applies to +these functions. + +Input strings of an extended composite function must start with +"composite=FunctionName;" and followed by the definitions of its members +as described for CompositeFunction. For example, + +``composite=ProductFunction;name=LinearBackground;name=ExpDecay`` + +To define a composite function inside a composite function enclose the +inner one in brackets: + +``name=LinearBackground;(composite=Convolution;name=Resolution;name=Lorentzian)`` diff --git a/Code/Mantid/docs/source/functions/Convolution.rst b/Code/Mantid/docs/source/functions/Convolution.rst new file mode 100644 index 000000000000..bf0c51b776e8 --- /dev/null +++ b/Code/Mantid/docs/source/functions/Convolution.rst @@ -0,0 +1,39 @@ +=========== +Convolution +=========== + + +Description +----------- + +Convolution is an extension of `CompositeFunction `__ +which performs convolution of its members using Fast Fourier Transform. + +.. math:: f(x)=\int\limits_{A}^{B}R(x-\xi)F(\xi)\mbox{d}\xi + +Here :math:`R` is the first member function and :math:`F` is the second +member. A Convolution must have exactly two member functions. The +members can be composite if necessary. Interval :math:`[A,B]` is the +fitting interval. The function is evaluated by first transforming +:math:`R` and :math:`F` to the Fourier domain, multiplying the +transforms, then transforming back to the original domain. The GSL FFT +routines are used to do the actual transformations. + +It should be noted that the two functions (:math:`R` and :math:`F`) are +evaluated on different intervals. :math:`F` is computed on :math:`[A,B]` +while :math:`R` is computed on :math:`[-\Delta/2, \Delta/2]`, where +:math:`\Delta=B-A`. + +In the following example a `Gaussian `__ is convolved with a +box function: + +.. figure:: /images/Convolution.png + :alt: Convolution.png + + Convolution.png +Note that the box function is defined on interval [-5, 5]: + +.. figure:: /images/Box.png + :alt: Box.png + + Box.png diff --git a/Code/Mantid/docs/source/functions/CubicSpline.rst b/Code/Mantid/docs/source/functions/CubicSpline.rst new file mode 100644 index 000000000000..8a8b9f584f0c --- /dev/null +++ b/Code/Mantid/docs/source/functions/CubicSpline.rst @@ -0,0 +1,19 @@ +=========== +CubicSpline +=========== + + +Description +----------- + +This function creates spline using the set of points and interpolates +the input between them. + +First and second derivatives from the spline can be calculated by using +the derivative1D function. + +CubicSpline function takes a set of attributes and a set of parameters. +The first attrbiute is 'n' which has integer type and sets the number of +interpolation points. The parameter names have the form 'yi' where 'y' +is letter 'y' and 'i' is the parameter's index starting from 0 and have +the type double. Likewise, the attribute names have the form 'xi'. diff --git a/Code/Mantid/docs/source/functions/DiffRotDiscreteCircle.rst b/Code/Mantid/docs/source/functions/DiffRotDiscreteCircle.rst new file mode 100644 index 000000000000..d8561f28d290 --- /dev/null +++ b/Code/Mantid/docs/source/functions/DiffRotDiscreteCircle.rst @@ -0,0 +1,131 @@ +===================== +DiffRotDiscreteCircle +===================== + + +Description +----------- + +Summary +------- + +This fitting function models the dynamics structure factor of a particle +undergoing discrete jumps on N-sites evenly distributed in a circle. The +particle can only jump to neighboring sites. This is the most common +type of discrete rotational diffusion in a circle. + +Markov model for jumps between neighboring sites: + +.. raw:: html + +
+ +:math:`\frac{d}{dt} p_j(t) = \frac{1}{\tau} [p_{j-1}(t) -2 p_j(t) + p_{j+1}(t)]` + +.. raw:: html + +
+ +The Decay fitting parameter :math:`\tau` is the inverse of the +transition rate. This, along with the circle radius :math:`r`, conform +the two fundamental fitting parameters of the structure factor +:math:`S(Q,E)`: + +.. raw:: html + +
+ +:math:`S(Q,E) \equiv = \int e^{-iEt/\hbar} I(Q,t) dt = A_0(Q,r) \delta (E) + \frac{1}{\pi} \sum_{l=1}^{N-1} A_l (Q,r) \frac{\hbar \tau_l^{-1}}{(\hbar \tau_l^{-1})^2+E^2}` + +.. raw:: html + +
+ +.. raw:: html + +
+ +:math:`A_l(Q,r) = \frac{1}{N} \sum_{k=1}^{N} j_0( 2 Q r sin(\frac{\pi k}{N}) ) cos(\frac{2\pi lk}{N})` + +.. raw:: html + +
+ +.. raw:: html + +
+ +:math:`\tau_l^{-1} = 4 \tau^{-1} sin^2(\frac{\pi l}{N})` + +.. raw:: html + +
+ +The transition rate, expressed in units of energy is :math:`h\tau^{-1}`, +with h = 4.135665616 meV THz. + +Example: Methyl Rotations +------------------------- + +Methyl Rotations can be modelled setting N=3. In this case, the +inelastic part reduces to a single Lorentzian: + +.. raw:: html + +
+ +:math:`S(Q,E) = A_0(Q,r) \delta (E) + \frac{2}{\pi} A_1 (Q,r) \frac{3 \hbar \tau^{-1}}{(3 \hbar \tau^{-1})^2+E^2}` + +.. raw:: html + +
+ +If, alternatively, one models these dynamics using the +`Lorentzian `__ function provided in Mantid: + +.. raw:: html + +
+ +:math:`S(Q,E) = A \delta (\omega) + \frac{B}{\pi} \left( \frac{\frac{\Gamma}{2}}{(\frac{\Gamma}{2})^2 + (\hbar\omega)^2}\right)` + +.. raw:: html + +
+ +Then: + +.. raw:: html + +
+ +:math:`B = \frac{1}{\pi}h A_1` + +.. raw:: html + +
+ +.. raw:: html + +
+ +:math:`\Gamma = \frac{3}{\pi} h\tau^{-1} = 3.949269754 meV\cdot THz\cdot \tau^{-1}` + +.. raw:: html + +
+ +Properties +---------- + ++---------+-------------+-----------+-----------------------------------------------------------------------------------------+ +| Order | Name | Default | Description | ++=========+=============+===========+=========================================================================================+ +| 1 | Intensity | 1.0 | Intensity of the peak [arbitrary units] | ++---------+-------------+-----------+-----------------------------------------------------------------------------------------+ +| 2 | Radius | 1.0 | Circle radius [Angstroms] | ++---------+-------------+-----------+-----------------------------------------------------------------------------------------+ +| 3 | Decay | 1.0 | inverse of the transition rate (ps if energy in meV; ns if energy in :math:`\mu`\ eV) | ++---------+-------------+-----------+-----------------------------------------------------------------------------------------+ + +Category:Fit_functions diff --git a/Code/Mantid/docs/source/functions/DiffSphere.rst b/Code/Mantid/docs/source/functions/DiffSphere.rst new file mode 100644 index 000000000000..34042a873bad --- /dev/null +++ b/Code/Mantid/docs/source/functions/DiffSphere.rst @@ -0,0 +1,65 @@ +========== +DiffSphere +========== + + +Description +----------- + +Summary +------- + +This fitting function models the dynamics structure factor of a particle +undergoing continuous diffusion but confined to a spherical volume. +According to Volino and Dianoux +`1 `__, + +.. raw:: html + +
+ +:math:`S(Q,E\equiv \hbar \omega) = A_{0,0}(Q\cdot R) \delta (\omega) + \frac{1}{\pi} \sum_{l=1}^{N-1} (2l+1) A_{n,l} (Q\cdot R) \frac{x_{n,l}^2 D/R^2}{[x_{n,l}^2 D/R^2]^21+\omega^2}`, + +:math:`A_{n,l} = \frac{6x_{n,l}^2}{x_{n,l}^2-l(l+1)} [\frac{QRj_{l+1}(QR) - lj_l(QR)}{(QR)^2 - x_{n,l}^2}]^2` + +.. raw:: html + +
+ +Because of the spherical symmetry of the problem, the structure factor +is expressed in terms of the :math:`j_l(z)` spherical Bessel functions. +Furthermore, the requirement that no particle flux can escape the sphere +leads to the following boundary +condition\ `2 `__: + +.. raw:: html + +
+ +:math:`\frac{d}{dr}j_l(rx_{n,l}/R)|_{r=R}=0 \,\,\,\, \forall l` + +.. raw:: html + +
+ +The roots of this set of equations are the numerical coefficients +:math:`x_{n,l}`. + +The fit function DiffSphere has an elastic part, modelled by fitting +function ElasticDiffSphere and an inelastic part, modelled by +InelasticDiffSphere. + +Properties +---------- + ++---------+-------------+-----------+----------------------------------------------------------------------------+ +| Order | Name | Default | Description | ++=========+=============+===========+============================================================================+ +| 1 | Intensity | 1.0 | Intensity of the peak [arbitrary units] | ++---------+-------------+-----------+----------------------------------------------------------------------------+ +| 2 | Radius | 2.0 | Sphere radius [Ã…] | ++---------+-------------+-----------+----------------------------------------------------------------------------+ +| 3 | Diffusion | 0.05 | Diffusion constant [Ã…\ :math:`{}^2/ps \equiv 10 \cdot (10^{-5} cm^2/s)`] | ++---------+-------------+-----------+----------------------------------------------------------------------------+ + +Category:Fit_functions diff --git a/Code/Mantid/docs/source/functions/ExpDecay.rst b/Code/Mantid/docs/source/functions/ExpDecay.rst new file mode 100644 index 000000000000..17e6a4a42c7e --- /dev/null +++ b/Code/Mantid/docs/source/functions/ExpDecay.rst @@ -0,0 +1,11 @@ +======== +ExpDecay +======== + + +Description +----------- + +Exponential decay function is defined by + +.. math:: \mbox{Height}\times \exp(-\frac{x}{\mbox{Lifetime}}) diff --git a/Code/Mantid/docs/source/functions/ExpDecayMuon.rst b/Code/Mantid/docs/source/functions/ExpDecayMuon.rst new file mode 100644 index 000000000000..aebefd4053a8 --- /dev/null +++ b/Code/Mantid/docs/source/functions/ExpDecayMuon.rst @@ -0,0 +1,11 @@ +============ +ExpDecayMuon +============ + + +Description +----------- + +Exponential decay for use by Muon scientists defined by + +.. math:: \mbox{A}\times \exp(-{Lambda} \times {x}) diff --git a/Code/Mantid/docs/source/functions/ExpDecayOsc.rst b/Code/Mantid/docs/source/functions/ExpDecayOsc.rst new file mode 100644 index 000000000000..cfe437df603c --- /dev/null +++ b/Code/Mantid/docs/source/functions/ExpDecayOsc.rst @@ -0,0 +1,11 @@ +=========== +ExpDecayOsc +=========== + + +Description +----------- + +Oscillation exponential decay function is defined by + +.. math:: \mbox{A}\times \exp(-{Lambda} \times {x}) \times cos( 2 \pi \times {Frequency} \times {x} + {Phi} ) diff --git a/Code/Mantid/docs/source/functions/FlatBackground.rst b/Code/Mantid/docs/source/functions/FlatBackground.rst new file mode 100644 index 000000000000..052f78ad5775 --- /dev/null +++ b/Code/Mantid/docs/source/functions/FlatBackground.rst @@ -0,0 +1,11 @@ +============== +FlatBackground +============== + + +Description +----------- + +A Flat background function is defined as: + +:math:`y = A_0` diff --git a/Code/Mantid/docs/source/functions/GausDecay.rst b/Code/Mantid/docs/source/functions/GausDecay.rst new file mode 100644 index 000000000000..f67d8c284a66 --- /dev/null +++ b/Code/Mantid/docs/source/functions/GausDecay.rst @@ -0,0 +1,11 @@ +========= +GausDecay +========= + + +Description +----------- + +Gaussian decay for use by Muon scientists defined by + +.. math:: \mbox{A}\times \exp(-{Sigma}^2 \times {x}^2 ) diff --git a/Code/Mantid/docs/source/functions/GausOsc.rst b/Code/Mantid/docs/source/functions/GausOsc.rst new file mode 100644 index 000000000000..91f5497303de --- /dev/null +++ b/Code/Mantid/docs/source/functions/GausOsc.rst @@ -0,0 +1,11 @@ +======= +GausOsc +======= + + +Description +----------- + +Oscillating Gaussian decay for use by Muon scientists defined by + +.. math:: \mbox{A}\times \exp(-{Sigma}^2 \times {x}^2) \times cos( 2 \pi \times {Frequency} \times {x} + {Phi} ) diff --git a/Code/Mantid/docs/source/functions/Gaussian.rst b/Code/Mantid/docs/source/functions/Gaussian.rst new file mode 100644 index 000000000000..7323496f3099 --- /dev/null +++ b/Code/Mantid/docs/source/functions/Gaussian.rst @@ -0,0 +1,29 @@ +======== +Gaussian +======== + + +Description +----------- + +A Gaussian function (also referred to as a normal distribution) is +defined as: + +.. math:: \mbox{Height}*\exp \left( -0.5*\frac{(x-\mbox{PeakCentre})^2}{\mbox{Sigma}^2} \right) + +where + +- Height - height of peak +- PeakCentre - centre of peak +- Sigma - Gaussian width parameter + +Note that the FWHM (Full Width Half Maximum) of a Gaussian equals +:math:`2\sqrt{2\ln 2}*\mbox{Sigma}`. + +The figure below illustrate this symmetric peakshape function fitted to +a TOF peak: + +.. figure:: /images/GaussianWithConstBackground.png + :alt: GaussianWithConstBackground.png + + GaussianWithConstBackground.png diff --git a/Code/Mantid/docs/source/functions/IkedaCarpenterPV.rst b/Code/Mantid/docs/source/functions/IkedaCarpenterPV.rst new file mode 100644 index 000000000000..e7b24626d2bb --- /dev/null +++ b/Code/Mantid/docs/source/functions/IkedaCarpenterPV.rst @@ -0,0 +1,69 @@ +================ +IkedaCarpenterPV +================ + + +Description +----------- + +This peakshape function is designed to be used to fit time-of-flight +peaks. In particular this function is the convolution of the +Ikeda-Carpender function, which aims to model the neutron pulse shape +from a moderator, and a pseudo-Voigt that model any broading to the peak +due to sample properties etc. + +The Ikeda-Carpender function is (Ref [1]) + +.. math:: \frac{\alpha}{2} \left\{ (1-R)*(\alpha t)^2e^{-\alpha t} + 2R\frac{\alpha^2\beta}{(\alpha-\beta)^3} \right\} + +where :math:`\alpha` and :math:`\beta` are the fast and slow neutron +decay constants respectively, :math:`R` a maxing coefficient that +relates to the moderator temperature and :math:`t` is time. +:math:`\alpha` and :math:`R` are further modelled to depend on +wavelength and using the notation in the Fullprof manual (Ref [2]) the +refineable Ikeda-Carpender parameters are Alpha0, Alpha1, Beta0 and +Kappa and these are defined as + +.. math:: \alpha=1/(\mbox{Alpha0}+\lambda*\mbox{Alpha1}) + +.. math:: \beta = 1/\mbox{Beta0} + +.. math:: R = \exp (-81.799/(\mbox{Kappa}*\lambda^2)) + +, where :math:`\lambda` is the neutron wavelength. *In general when +fitting a single peak it is not recommended to refine both Alpha0 and +Alpha1 at the same time since these two parameters will effectively be +100% correlated because the wavelength over a single peak is likely +effectively constant*. + +The pseudo-Voigt function is defined as a linear combination of a +Lorentzian and Gaussian and is a computational efficient way of +calculation a Voigt function. The Voigt parameters are related to the +pseudo-Voigt parameters through a relation (see Fullprof manual eq. +(3.16) which in revision July2001 is missing a power 1/5). It is the two +Voigt parameters which you can refine with this peakshape function: +SigmaSquared (for the Gaussian part) and Gamma (for the Lorentzian +part). Notice the Voigt Gaussian FWHM=SigmaSquared\*8\*ln(2) and the +Voigt Lorentzian FWHM=Gamma. + +For information about how to create instrument specific values for the +parameters of this fitting function see +`CreateIkedaCarpenterParameters `__. + +The implementation of the IkedaCarpenterPV peakshape function here +follows the analytical expression for this function as presented in the +Fullprof manual, see Ref[2]. + +References: + +#. S. Ikeda and J. M. Carpenter, Nuclear Inst. and Meth. in Phys. Res. + A239, 536 (1985) +#. Fullprof manual, see http://www.ill.eu/sites/fullprof/ + +The figure below illustrate this peakshape function fitted to a TOF +peak: + +.. figure:: /images/IkedaCarpenterPVwithBackground.png + :alt: IkedaCarpenterPVwithBackground.png + + IkedaCarpenterPVwithBackground.png diff --git a/Code/Mantid/docs/source/functions/LatticeErrors.rst b/Code/Mantid/docs/source/functions/LatticeErrors.rst new file mode 100644 index 000000000000..02a0faefd6c0 --- /dev/null +++ b/Code/Mantid/docs/source/functions/LatticeErrors.rst @@ -0,0 +1,9 @@ +============= +LatticeErrors +============= + + +Description +----------- + + diff --git a/Code/Mantid/docs/source/functions/LinearBackground.rst b/Code/Mantid/docs/source/functions/LinearBackground.rst new file mode 100644 index 000000000000..72babd634efd --- /dev/null +++ b/Code/Mantid/docs/source/functions/LinearBackground.rst @@ -0,0 +1,14 @@ +================ +LinearBackground +================ + + +Description +----------- + +A linear background function is defined as: + +:math:`y = A_0 + A_1 \times x` + +Note this function is currently named LinearBackground and is likely to +be renamed to Linear in the not too distance future. diff --git a/Code/Mantid/docs/source/functions/LogNormal.rst b/Code/Mantid/docs/source/functions/LogNormal.rst new file mode 100644 index 000000000000..3b8a6cbd43b8 --- /dev/null +++ b/Code/Mantid/docs/source/functions/LogNormal.rst @@ -0,0 +1,11 @@ +========= +LogNormal +========= + + +Description +----------- + +The LogNormal fit function is defined by + +.. math:: \frac{Height}{x} \cdot exp^{-\frac{ln(x)-Location}{2 \times Scale^2}} diff --git a/Code/Mantid/docs/source/functions/Lorentzian.rst b/Code/Mantid/docs/source/functions/Lorentzian.rst new file mode 100644 index 000000000000..c003bab9c116 --- /dev/null +++ b/Code/Mantid/docs/source/functions/Lorentzian.rst @@ -0,0 +1,36 @@ +========== +Lorentzian +========== + + +Description +----------- + +A Lorentzian function is defined as: + +.. raw:: html + +
+ +:math:`\frac{A}{\pi} \left( \frac{\frac{\Gamma}{2}}{(x-x_0)^2 + (\frac{\Gamma}{2})^2}\right)` + +.. raw:: html + +
+ +where: + +- A (Amplitude) - Intensity scaling +- :math:`x_0` (PeakCentre) - centre of peak +- :math:`\Gamma/2` (HWHM) - half-width at half-maximum + +Note that the FWHM (Full Width Half Maximum) equals two times HWHM, and +the integral over the Lorentzian equals the intensity scaling A. + +The figure below illustrate this symmetric peakshape function fitted to +a TOF peak: + +.. figure:: /images/LorentzianWithConstBackground.png + :alt: LorentzianWithConstBackground.png + + LorentzianWithConstBackground.png diff --git a/Code/Mantid/docs/source/functions/MuonFInteraction.rst b/Code/Mantid/docs/source/functions/MuonFInteraction.rst new file mode 100644 index 000000000000..843913cc1fa2 --- /dev/null +++ b/Code/Mantid/docs/source/functions/MuonFInteraction.rst @@ -0,0 +1,28 @@ +================ +MuonFInteraction +================ + + +Description +----------- + +Muon F interaction function defined by + +.. math:: + + \exp((-{Lambda} \times {x})^{Beta} ) \times \frac {A} {6} \times + ( 3 + B + C + D ) + +where + +.. math:: B = \cos( \sqrt 3 \times Omega \times x) ) + +, + +.. math:: C = (1 - \frac{1}{\sqrt{3}} ) \times \cos ( ( ( 3 - \sqrt{3} ) / 2 ) \times Omega \times x ) + +and + +.. math:: D = (1 + \frac{1}{\sqrt{3}} ) \times \cos ( ( ( 3 + \sqrt{3} ) / 2 ) \times Omega \times x ) + +. diff --git a/Code/Mantid/docs/source/functions/NeutronBk2BkExpConvPVoigt.rst b/Code/Mantid/docs/source/functions/NeutronBk2BkExpConvPVoigt.rst new file mode 100644 index 000000000000..646e29fe1b6e --- /dev/null +++ b/Code/Mantid/docs/source/functions/NeutronBk2BkExpConvPVoigt.rst @@ -0,0 +1,170 @@ +========================= +NeutronBk2BkExpConvPVoigt +========================= + + +Description +----------- + +Notice +------ + +1. This is not an algorithm. However this fit function is a used through +the :ref:`_algm-Fit` algorithm. + +2. It is renamed from ThermalNeutronBk2BkExpConvPV. + +3. ThermalNeutronBk2BkExpConvPVoigt is not a regular peak function to +fit individual peaks. It is not allowed to set FWHM or peak centre to +this peak function. + +Summary +------- + +A thermal neutron back-to-back exponential convoluted with pseuduo-voigt +peakshape function is indeed a back-to-back exponential convoluted with +pseuduo-voigt peakshape function, while the parameters + +.. math:: \alpha + +, + +.. math:: \beta + + and + +.. math:: \sigma + + are not directly given, but calculated from a set of parameters that +are universal to all peaks in powder diffraction data. + +The purpose to implement this peak shape is to perform Le Bail Fit and +other data analysis on time-of-flight powder diffractometers' data in +Mantid. It is the peak shape No. 10 in Fullprof. See Refs. 1. + +Description +----------- + +Thermal neutron back to back exponential convoluted with psuedo voigt +peak function is a back to back exponential convoluted with psuedo voigt +peak function. Its difference to a regular back to back exponential +convoluted with psuedo voigt peak functiont is that it is a function for +all peaks in a TOF powder diffraction pattern, but not a single peak. + +Furthermore, the purpose to implement this function in Mantid is to +refine multiple parameters including crystal sample's unit cell +parameters. Therefore, unit cell lattice parameters are also included in +this function. + +Methods are not supported +^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. setFWHM() 2. setCentre() : peak centre is determined by a set of +parameters including lattice parameter, Dtt1, Dtt1t, Zero, Zerot, Dtt2t, +Width and Tcross. Therefore, it is not allowed to set peak centre to +this peak function. + +Back-to-back exponential convoluted with pseuduo-voigt peakshape function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A back-to-back exponential convoluted with pseuduo-voigt peakshape +function for is defined as + +.. math:: \Omega(X_0) = \int_{\infty}^{\infty}pV(X_0-t)E(t)dt + +For back-to-back exponential: + +.. math:: E(d, t) = 2Ne^{\alpha(d) t} (t \leq 0) + +.. math:: E(d, t) = 2Ne^{-\beta(d) t} (t \geq 0) + +.. math:: N(d) = \frac{\alpha(d)\beta(d)}{2(\alpha(d)+\beta(d))} + +For psuedo-voigt + +.. math:: pV(x) = \eta L'(x) + (1-\eta)G'(x) + +The parameters :math:`/alpha` and :math:`/beta` represent the absolute +value of the exponential rise and decay constants (modelling the neutron +pulse coming from the moderator) , L'(x) stands for Lorentzian part and +G'(x) stands for Gaussian part. The parameter :math:`X_0` is the +location of the peak; more specifically it represent the point where the +exponentially modelled neutron pulse goes from being exponentially +rising to exponentially decaying. + +References + +1. Fullprof manual + +The figure below illustrate this peakshape function fitted to a TOF +peak: + +.. figure:: /images/BackToBackExponentialWithConstBackground.png + :alt: BackToBackExponentialWithConstBackground.png + + BackToBackExponentialWithConstBackground.png +Formula for converting unit from d-spacing to TOF +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Parameters of back-to-back exponential convoluted psuedo-voigt function +are calculated from a set of parameters universal to all peaks in a +diffraction pattern. Therefore, they are functions of peak position, +:math:`d`. + +`` ``\ :math:`n_{cross} = \frac{1}{2} erfc(Width(xcross\cdot d^{-1}))` + +`` ``\ :math:`TOF_e = Zero + Dtt1\cdot d` + +`` ``\ :math:`TOF_t = Zerot + Dtt1t\cdot d - Dtt2t \cdot d^{-1}` + +Final Time-of-flight is calculated as: + +`` ``\ :math:`TOF = n_{cross} TOF_e + (1-n_{cross}) TOF_t` + +Formular for calculating :math:`A(d)`, :math:`B(d)`, :math:`\sigma(d)` and :math:`\gamma(d)` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- :math:`\alpha(d)` + +| `` ``\ :math:`\alpha^e(d) = \alpha_0^e + \alpha_1^e d_h` +| `` ``\ :math:`\alpha^t(d) = \alpha_0^t - \frac{\alpha_1^t}{d_h}` +| `` ``\ :math:`\alpha(d) = \frac{1}{n\alpha^e + (1-n)\alpha^t}` + +- :math:`\beta(d)` + +| ``  ``\ :math:`\beta^e(d) = \beta_0^e + \beta_1^e d_h` +| ``  ``\ :math:`\beta^t(d) = \beta_0^t - \frac{\beta_1^t}{d_h}` +| ``  ``\ :math:`\beta(d) = \frac{1}{n\alpha^e + (1-n)\beta^t}` + +- For :math:`\sigma_G` and :math:`\gamma_L`, which represent the + standard deviation for pseudo-voigt + +``   ``\ :math:`\sigma_G^2(d_h) = \sigma_0^2 + (\sigma_1^2 + DST2(1-\zeta)^2)d_h^2 + (\sigma_2^2 + Gsize)d_h^4` + +| ``   ``\ :math:`\gamma_L(d_h) = \gamma_0 + (\gamma_1 + \zeta\sqrt{8\ln2DST2})d_h + (\gamma_2+F(SZ))d_h^2` +| ``   \end{eqnarray}`` + +- The analysis formula for the convoluted peak at :math:`d_h` + +``   ``\ :math:`\Omega(TOF(d_h)) = + (1-\eta(d_h))N\{e^uerfc(y)+e^verfc(z)\} - \frac{2N\eta}{\pi}\{\Im[e^pE_1(p)]+\Im[e^qE_1(q)]\}` + +where + +``   ``\ :math:`erfc(x) = 1-erf(x) = 1-\frac{2}{\sqrt{\pi}}\int_0^xe^{-u^2}du` + +``   ``\ :math:`E_1(z) = \int_z^{\infty}\frac{e^{-t}}{t}dt` + +``   ``\ :math:`u = \frac{1}{2}\alpha(d_h)(\alpha(d_h)\sigma^2(d_h)+2x)` + +``   ``\ :math:`y = \frac{\alpha(d_h)\sigma^2(d_h)+x}{\sqrt{2\sigma^2(d_h)}}` + +``   ``\ :math:`p = \alpha(d_h)x + \frac{i\alpha(d_h)H(d_h)}{2}` + +``   ``\ :math:`v = \frac{1}{2}\beta(d_h)(\beta(d_h)\sigma^2(d_h)-2x)` + +``   ``\ :math:`z = \frac{\beta(d_h)\sigma^2(d_h)-x}{\sqrt{2\sigma^2(d_h)}}` + +``   ``\ :math:`q = -\beta(d_h)x + \frac{i\beta(d_h)H(d_h)}{2}` + +:math:`erfc(x)` and :math:`E_1(z)` will be calculated numerically. diff --git a/Code/Mantid/docs/source/functions/PeakHKLErrors.rst b/Code/Mantid/docs/source/functions/PeakHKLErrors.rst new file mode 100644 index 000000000000..f0116d5bd6ba --- /dev/null +++ b/Code/Mantid/docs/source/functions/PeakHKLErrors.rst @@ -0,0 +1,55 @@ +============= +PeakHKLErrors +============= + + +Description +----------- + +== + +``This function calculates, for each peak, its h,k,and l offsets from an integer using goniometer settings and/or tilt and sample offsets from the parameters.`` + +The original PeaksWorkspace is unchanged. + +Attributes +~~~~~~~~~~ + +#. OptRuns : a list of run numbers whose sample orientations are to be + optimized. The list is separated by "/". +#. PeakWorkspaceName : The name of the PeaksWorkspace in the + AnalysisDataService + +Parameters +~~~~~~~~~~ + +#. SampleXOffset- XOffset of Goniometer center from instrument center in + meters +#. SampleYOffset- YOffset of Goniometer center from instrument center in + meters +#. SampleZOffset- YOffset of Goniometer center from instrument center in + meters + +#. GonRotx- For Goniometer tilt. Rotation about x-axis in degrees where + Tilt = Rotx(GonRotx)\*Roty(GonRoty)\*Rotz(GonRotz) +#. GonRoty- For Goniometer tilt. Rotation about y-axis +#. GonRotz- For Goniometer tilt. Rotation about z-axis( done 1st AFTER + phi-chi-omega rotations) + +#. chixxx - xxx is a run number from OptRuns. This is the chi angle in + degrees that will be used for that run( before tilting) +#. phixxx - xxx is a run number from OptRuns. This is the phi angle in + degrees that will be used for that run +#. omegaxxx - xxx is a run number from OptRuns. This is the omega angle + in degrees that will be used for that run + +NOTE:When used in fitting, some or all of the first 6 parameters could +be tied to zero. + +Outputs +~~~~~~~ + +The PeaksWorkspace is NOT changed. + +The argument out in function1D has ,for each peak, the h,k, and l +offsets from an integer using the current parameter values. diff --git a/Code/Mantid/docs/source/functions/ProductFunction.rst b/Code/Mantid/docs/source/functions/ProductFunction.rst new file mode 100644 index 000000000000..6ca9ae014306 --- /dev/null +++ b/Code/Mantid/docs/source/functions/ProductFunction.rst @@ -0,0 +1,13 @@ +=============== +ProductFunction +=============== + + +Description +----------- + +A ProductFunction is an extension of the +`CompositeFunction `__ which multiplies its member +functions to produce the output. Use this function to construct a +product of two or more fitting functions defined in Mantid. A member of +a ProductFunction can be a composite function itself. diff --git a/Code/Mantid/docs/source/functions/ProductLinearExp.rst b/Code/Mantid/docs/source/functions/ProductLinearExp.rst new file mode 100644 index 000000000000..55a41464780c --- /dev/null +++ b/Code/Mantid/docs/source/functions/ProductLinearExp.rst @@ -0,0 +1,18 @@ +================ +ProductLinearExp +================ + + +Description +----------- + +This fit function computes the product of a linear and exponential +function. See `ExpDecay `__ and +`LinearBackground `__ for details on the component +functions. + +:math:`(\mbox{A0}+\mbox{A1}\times x) \times \mbox{Height}\times \exp(-\frac{x}{\mbox{Lifetime}})` + +This function may be used with the :ref:`_algm-Fit` algorithm. However, it +was originally added to Mantid as a named function for the purposes of +detector efficiency calibration. diff --git a/Code/Mantid/docs/source/functions/ProductQuadraticExp.rst b/Code/Mantid/docs/source/functions/ProductQuadraticExp.rst new file mode 100644 index 000000000000..45255a42f59d --- /dev/null +++ b/Code/Mantid/docs/source/functions/ProductQuadraticExp.rst @@ -0,0 +1,18 @@ +=================== +ProductQuadraticExp +=================== + + +Description +----------- + +This fit function computes the product of a linear and exponential +function. See `ExpDecay `__ and QuadraticBackground for +details on the component functions. + +:math:`(\mbox{A0}+\mbox{A1}\times x+\mbox{A2}\times x^2) \times \mbox{Height}\times \exp(-\frac{x}{\mbox{Lifetime}})` + +This function may be used with the :ref:`_algm-Fit` algorithm. However, it +was originally added to Mantid as a named function for the purposes of +detector efficiency calibration. Also see +`ProductLinearExp `__. diff --git a/Code/Mantid/docs/source/functions/Quadratic.rst b/Code/Mantid/docs/source/functions/Quadratic.rst new file mode 100644 index 000000000000..3e90f911f300 --- /dev/null +++ b/Code/Mantid/docs/source/functions/Quadratic.rst @@ -0,0 +1,17 @@ +========= +Quadratic +========= + + +Description +----------- + +A quadratic background function is defined as: + +.. math:: \mbox{A0}+\mbox{A1}*x+\mbox{A2}*x^2 + +where + +- A0 - coefficient for constant term +- A1 - coefficient for linear term +- A2 - coefficient for quadratic term diff --git a/Code/Mantid/docs/source/functions/SCDPanelErrors.rst b/Code/Mantid/docs/source/functions/SCDPanelErrors.rst new file mode 100644 index 000000000000..6ee30c9c11c3 --- /dev/null +++ b/Code/Mantid/docs/source/functions/SCDPanelErrors.rst @@ -0,0 +1,115 @@ +============== +SCDPanelErrors +============== + + +Description +----------- + +- This fit function is used for calibrating RectangularDetectors by + adjusting L0, time offset, panel width, + +panel height, panel center, panel orientation, and allow for the sample +being offset from the instrument center. + +Attributes +~~~~~~~~~~ + +This fit function is used for calibrating RectangularDetectors by +adjusting L0, time offset, panel width, panel height, panel center, +panel orientation, and allow for the sample being offset from the +instrument center. + +Attributes +~~~~~~~~~~ + +- a -The lattice parameter a +- b -The lattice parameter b +- c -The lattice parameter c +- alpha -The lattice parameter alpha in degrees +- beta -The lattice parameter beta in degrees +- gamma -The lattice parameter gamma in degrees +- PeakWorkspaceName-The name of the PeaksWorkspace in the Analysis Data + Service. + + This peak must be indexed by a UB matrix whose lattice parameters + are CLOSE to the above + lattice paramters + +- NGroups-The number of grouping of banks to be considered +- BankNames-a list of banknames separated by "/" or a "!" if the next + bank is in a different group. + + Bank names from the same group belong together("Requirement" for use + with the Fit algorithm) + +- startX- -1 or starting position in the workspace( see below) to start + calculating the outputs +- endX- -1 or 1+ ending position in the workspace( see below) to start + calculating the outputs +- RotateCenters-Boolean. If false Rotations are only about the center + of the banks. Otherwise rotations are ALSO + + around center of the instrument( For groups of banks, this will + result in a rotation about the center of all pixels.) + +- SampleOffsets-Boolean. A sample being off from the center of the + goniometer can result in larger errors. + +Workspace +~~~~~~~~~ + +A Workspace2D with 1 spectra. The xvalues of the spectra are for each +peak, the peak index repeated 3 times. The y values are all zero and the +errors are all 1.0 + +This spectra may have to be copied 3 times because of requirements from +the fitting system. + +Parameters +~~~~~~~~~~ + +- l0- the initial Flight path in units from Peak.getL1 +- t0-Time offset in the same units returned with Peak.getTOF) +- SampleX-Sample x offset in the same units returned with + Peak.getDetPos().norm() +- SampleY-Sample y offset in the same units returned with + Peak.getDetPos().norm() +- SampleZ-Sample z offset in the same units returned with + Peak.getDetPos().norm() +- f\*\_detWidthScale-panel Width for Group\* in the same units returned + with Peak.getDetPos().norm() +- f\*\_detHeightScale-panel Height for Group\* in the same units + returned with Peak.getDetPos().norm() +- f\*\_Xoffset-Panel Center x offsets for Group\* banks in the same + units returned with Peak.getDetPos().norm() +- f\*\_Yoffset-Panel Center y offsets for Group\* banks in the same + units returned with Peak.getDetPos().norm() +- f\*\_Zoffset-Panel Center z offsets for Group\* banks in the same + units returned with Peak.getDetPos().norm() +- f\*\_Xrot-Rotations(degrees) for Group\* banks around "Center" in x + axis direction +- f\*\_Yrot-Rotations(degrees) for Group\* banks around "Center" in y + axis direction +- f\*\_Zrot-Rotations(degrees) for Group\* banks around "Center" in z + axis direction +- SampleX -sample X offset in meters(Really Goniometer X offset) +- SampleY- sample Y offset in meters +- SampleZ- sample Z offset in meters + +The order of rotations correspond to the order used in all of Mantid. + +Output +~~~~~~ + +The argument out from function1D ,for each peak, gives the error in qx, +qy, and qz. The theoretical values for the qx, qy and qz are found as +follows: + +- Calculating the best fitting UB for the given indexing and parameter + values +- Find U +- The theoretical UB is then U\*B\ :sub:`0` where B\ :sub:`0` is formed + from the supplied lattice parameters +- The theoretical qx,qy,and qz can be obtained by multiplying the hkl + for the peak by this matrix(/2Ï€) diff --git a/Code/Mantid/docs/source/functions/StaticKuboToyabe.rst b/Code/Mantid/docs/source/functions/StaticKuboToyabe.rst new file mode 100644 index 000000000000..c392940cb5e8 --- /dev/null +++ b/Code/Mantid/docs/source/functions/StaticKuboToyabe.rst @@ -0,0 +1,12 @@ +================ +StaticKuboToyabe +================ + + +Description +----------- + +Static Kubo Toyabe fitting function for use by Muon scientists defined +by + +.. math:: \mbox{A}\times ( \exp(-{Delta}^2 \times {x}^2 / 2 ) \times ( 1 - ( {Delta}^2 \times {x}^2 ) ) \times \frac 2 3 + \frac 1 3 ) diff --git a/Code/Mantid/docs/source/functions/StaticKuboToyabeTimesExpDecay.rst b/Code/Mantid/docs/source/functions/StaticKuboToyabeTimesExpDecay.rst new file mode 100644 index 000000000000..c86ddcb6727b --- /dev/null +++ b/Code/Mantid/docs/source/functions/StaticKuboToyabeTimesExpDecay.rst @@ -0,0 +1,11 @@ +============================= +StaticKuboToyabeTimesExpDecay +============================= + + +Description +----------- + +Fitting function for use by Muon scientists defined by: + +:math:`\mbox{A}\times ( \exp(-{Delta}^2 \times {x}^2 / 2 ) \times ( 1 - ( {Delta}^2 \times {x}^2 ) ) \times \frac 2 3 + \frac 1 3 ) \times \exp(-{Lambda} \times {x})` diff --git a/Code/Mantid/docs/source/functions/StaticKuboToyabeTimesGausDecay.rst b/Code/Mantid/docs/source/functions/StaticKuboToyabeTimesGausDecay.rst new file mode 100644 index 000000000000..d05eb79a7415 --- /dev/null +++ b/Code/Mantid/docs/source/functions/StaticKuboToyabeTimesGausDecay.rst @@ -0,0 +1,11 @@ +============================== +StaticKuboToyabeTimesGausDecay +============================== + + +Description +----------- + +Fitting function for use by Muon scientists defined by: + +:math:`\mbox{A}\times ( \exp(-{Delta}^2 \times {x}^2 / 2 ) \times ( 1 - ( {Delta}^2 \times {x}^2 ) ) \times \frac 2 3 + \frac 1 3 ) \times \exp(-{Sigma}^2 \times {x}^2 )` diff --git a/Code/Mantid/docs/source/functions/StretchExp.rst b/Code/Mantid/docs/source/functions/StretchExp.rst new file mode 100644 index 000000000000..91f41793c6f8 --- /dev/null +++ b/Code/Mantid/docs/source/functions/StretchExp.rst @@ -0,0 +1,11 @@ +========== +StretchExp +========== + + +Description +----------- + +The Stretched exponential fit function is defined by + +.. math:: Height \cdot e^{-(\frac{x}{Lifetime})^{Stretching} } diff --git a/Code/Mantid/docs/source/functions/StretchExpMuon.rst b/Code/Mantid/docs/source/functions/StretchExpMuon.rst new file mode 100644 index 000000000000..096e4a5c3075 --- /dev/null +++ b/Code/Mantid/docs/source/functions/StretchExpMuon.rst @@ -0,0 +1,11 @@ +============== +StretchExpMuon +============== + + +Description +----------- + +The Stretched exponential fit function is defined by + +.. math:: A \cdot e^{ (-{Lambda} \times {x}) ^{Beta} } diff --git a/Code/Mantid/docs/source/functions/ThermalNeutronBk2BkExpConvPVoigt.rst b/Code/Mantid/docs/source/functions/ThermalNeutronBk2BkExpConvPVoigt.rst new file mode 100644 index 000000000000..7f53b3f312b2 --- /dev/null +++ b/Code/Mantid/docs/source/functions/ThermalNeutronBk2BkExpConvPVoigt.rst @@ -0,0 +1,170 @@ +================================ +ThermalNeutronBk2BkExpConvPVoigt +================================ + + +Description +----------- + +Notice +------ + +1. This is not an algorithm. However this fit function is a used through +the :ref:`_algm-Fit` algorithm. + +2. It is renamed from ThermalNeutronBk2BkExpConvPV. + +3. ThermalNeutronBk2BkExpConvPVoigt is not a regular peak function to +fit individual peaks. It is not allowed to set FWHM or peak centre to +this peak function. + +Summary +------- + +A thermal neutron back-to-back exponential convoluted with pseuduo-voigt +peakshape function is indeed a back-to-back exponential convoluted with +pseuduo-voigt peakshape function, while the parameters + +.. math:: \alpha + +, + +.. math:: \beta + + and + +.. math:: \sigma + + are not directly given, but calculated from a set of parameters that +are universal to all peaks in powder diffraction data. + +The purpose to implement this peak shape is to perform Le Bail Fit and +other data analysis on time-of-flight powder diffractometers' data in +Mantid. It is the peak shape No. 10 in Fullprof. See Refs. 1. + +Description +----------- + +Thermal neutron back to back exponential convoluted with psuedo voigt +peak function is a back to back exponential convoluted with psuedo voigt +peak function. Its difference to a regular back to back exponential +convoluted with psuedo voigt peak functiont is that it is a function for +all peaks in a TOF powder diffraction pattern, but not a single peak. + +Furthermore, the purpose to implement this function in Mantid is to +refine multiple parameters including crystal sample's unit cell +parameters. Therefore, unit cell lattice parameters are also included in +this function. + +Methods are not supported +^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. setFWHM() 2. setCentre() : peak centre is determined by a set of +parameters including lattice parameter, Dtt1, Dtt1t, Zero, Zerot, Dtt2t, +Width and Tcross. Therefore, it is not allowed to set peak centre to +this peak function. + +Back-to-back exponential convoluted with pseuduo-voigt peakshape function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A back-to-back exponential convoluted with pseuduo-voigt peakshape +function for is defined as + +.. math:: \Omega(X_0) = \int_{\infty}^{\infty}pV(X_0-t)E(t)dt + +For back-to-back exponential: + +.. math:: E(d, t) = 2Ne^{\alpha(d) t} (t \leq 0) + +.. math:: E(d, t) = 2Ne^{-\beta(d) t} (t \geq 0) + +.. math:: N(d) = \frac{\alpha(d)\beta(d)}{2(\alpha(d)+\beta(d))} + +For psuedo-voigt + +.. math:: pV(x) = \eta L'(x) + (1-\eta)G'(x) + +The parameters :math:`/alpha` and :math:`/beta` represent the absolute +value of the exponential rise and decay constants (modelling the neutron +pulse coming from the moderator) , L'(x) stands for Lorentzian part and +G'(x) stands for Gaussian part. The parameter :math:`X_0` is the +location of the peak; more specifically it represent the point where the +exponentially modelled neutron pulse goes from being exponentially +rising to exponentially decaying. + +References + +1. Fullprof manual + +The figure below illustrate this peakshape function fitted to a TOF +peak: + +.. figure:: /images/BackToBackExponentialWithConstBackground.png + :alt: BackToBackExponentialWithConstBackground.png + + BackToBackExponentialWithConstBackground.png +Formula for converting unit from d-spacing to TOF +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Parameters of back-to-back exponential convoluted psuedo-voigt function +are calculated from a set of parameters universal to all peaks in a +diffraction pattern. Therefore, they are functions of peak position, +:math:`d`. + +`` ``\ :math:`n_{cross} = \frac{1}{2} erfc(Width(xcross\cdot d^{-1}))` + +`` ``\ :math:`TOF_e = Zero + Dtt1\cdot d` + +`` ``\ :math:`TOF_t = Zerot + Dtt1t\cdot d - Dtt2t \cdot d^{-1}` + +Final Time-of-flight is calculated as: + +`` ``\ :math:`TOF = n_{cross} TOF_e + (1-n_{cross}) TOF_t` + +Formular for calculating :math:`A(d)`, :math:`B(d)`, :math:`\sigma(d)` and :math:`\gamma(d)` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- :math:`\alpha(d)` + +| `` ``\ :math:`\alpha^e(d) = \alpha_0^e + \alpha_1^e d_h` +| `` ``\ :math:`\alpha^t(d) = \alpha_0^t - \frac{\alpha_1^t}{d_h}` +| `` ``\ :math:`\alpha(d) = \frac{1}{n\alpha^e + (1-n)\alpha^t}` + +- :math:`\beta(d)` + +| ``  ``\ :math:`\beta^e(d) = \beta_0^e + \beta_1^e d_h` +| ``  ``\ :math:`\beta^t(d) = \beta_0^t - \frac{\beta_1^t}{d_h}` +| ``  ``\ :math:`\beta(d) = \frac{1}{n\alpha^e + (1-n)\beta^t}` + +- For :math:`\sigma_G` and :math:`\gamma_L`, which represent the + standard deviation for pseudo-voigt + +``   ``\ :math:`\sigma_G^2(d_h) = \sigma_0^2 + (\sigma_1^2 + DST2(1-\zeta)^2)d_h^2 + (\sigma_2^2 + Gsize)d_h^4` + +| ``   ``\ :math:`\gamma_L(d_h) = \gamma_0 + (\gamma_1 + \zeta\sqrt{8\ln2DST2})d_h + (\gamma_2+F(SZ))d_h^2` +| ``   \end{eqnarray}`` + +- The analysis formula for the convoluted peak at :math:`d_h` + +``   ``\ :math:`\Omega(TOF(d_h)) = + (1-\eta(d_h))N\{e^uerfc(y)+e^verfc(z)\} - \frac{2N\eta}{\pi}\{\Im[e^pE_1(p)]+\Im[e^qE_1(q)]\}` + +where + +``   ``\ :math:`erfc(x) = 1-erf(x) = 1-\frac{2}{\sqrt{\pi}}\int_0^xe^{-u^2}du` + +``   ``\ :math:`E_1(z) = \int_z^{\infty}\frac{e^{-t}}{t}dt` + +``   ``\ :math:`u = \frac{1}{2}\alpha(d_h)(\alpha(d_h)\sigma^2(d_h)+2x)` + +``   ``\ :math:`y = \frac{\alpha(d_h)\sigma^2(d_h)+x}{\sqrt{2\sigma^2(d_h)}}` + +``   ``\ :math:`p = \alpha(d_h)x + \frac{i\alpha(d_h)H(d_h)}{2}` + +``   ``\ :math:`v = \frac{1}{2}\beta(d_h)(\beta(d_h)\sigma^2(d_h)-2x)` + +``   ``\ :math:`z = \frac{\beta(d_h)\sigma^2(d_h)-x}{\sqrt{2\sigma^2(d_h)}}` + +``   ``\ :math:`q = -\beta(d_h)x + \frac{i\beta(d_h)H(d_h)}{2}` + +:math:`erfc(x)` and :math:`E_1(z)` will be calculated numerically. diff --git a/Code/Mantid/docs/source/functions/UserFunction.rst b/Code/Mantid/docs/source/functions/UserFunction.rst new file mode 100644 index 000000000000..834f23fb212d --- /dev/null +++ b/Code/Mantid/docs/source/functions/UserFunction.rst @@ -0,0 +1,16 @@ +============ +UserFunction +============ + + +Description +----------- + +A UserFunction is defined by a string formula. The formula is assigned +by setting string attribute Formula: + +`` "name=UserFunction, Formula = h*sin(a*x), h=2, a=1"`` + +Formula must use 'x' for the x-values. The fitting parameters become +defined only after the Formula attribute is set that is why Formula must +go first in UserFunction definition. diff --git a/Code/Mantid/docs/source/functions/Voigt.rst b/Code/Mantid/docs/source/functions/Voigt.rst new file mode 100644 index 000000000000..20b648e4f7f9 --- /dev/null +++ b/Code/Mantid/docs/source/functions/Voigt.rst @@ -0,0 +1,33 @@ +===== +Voigt +===== + + +Description +----------- + +A Voigt function is a convolution between a Lorentzian and Gaussian and +is defined as: + +.. math:: V(X,Y) = \frac{Y}{\pi}\int_{-\infty}^{+\infty}dz\frac{exp^{-z^2}}{Y^2 + (X - z)^2} + +where + +- X - Normalized line separation width; +- Y - Normalized collision separation width. + +Generally, the Voigt function involves a numerical integral and is +therefore a computational intensive task. However, several +approximations to the Voigt function exist making it palatable for +fitting in a least-squares algorithm. The approximation used here is +described in + +- A.B. McLean, C.E.J. Mitchell, D.M. Swanston, Implementation of an + efficient analytical approximation to the Voigt function for + photoemission lineshape analysis, Journal of Electron Spectroscopy + and Related Phenomena, Volume 69, Issue 2, 29 September 1994, Pages + 125-132, ISSN 0368-2048, + 10.1016/0368-2048(94)02189-7.(http://www.sciencedirect.com/science/article/pii/0368204894021897) + +The approximation uses a combination of 4 Lorentzians in two variables +to generate good approximation to the true function. From b9fe7a427900ce7702908e6c4c514b8eb7528ac7 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 12:29:08 +0100 Subject: [PATCH 71/86] Move images from qtassistant directory to Sphinx source directory. Refs #9562 --- Code/Mantid/docs/qtassistant/CMakeLists.txt | 2 +- .../docs/qtassistant/images/Convolution.png | Bin 1090378 -> 0 bytes .../images/AbsorptionFlow.png | Bin ...ckToBackExponentialWithConstBackground.png | Bin .../BinMD_Coordinate_Transforms_withLine.png | Bin .../{qtassistant => source}/images/Box.png | Bin .../images/ChopDataIntegrationExplanation.png | Bin .../images/ConvertToEnergyInfoTable.png | Bin .../Mantid/docs/source/images/Convolution.png | Bin 0 -> 5284 bytes .../images/FFTGaussian1.png | Bin .../images/FFTGaussian1FFT.png | Bin .../images/FFTGaussian2.png | Bin .../images/FFTGaussian2FFT.png | Bin .../images/GEM_Focused.png | Bin .../images/Gaussian2Fit.jpg | Bin .../images/Gaussian2Fit_Ties.jpg | Bin .../images/GaussianFit.jpg | Bin .../images/GaussianFit_Ties.jpg | Bin .../images/GaussianWithConstBackground.png | Bin .../images/IkedaCarpenterPVwithBackground.png | Bin .../images/ImageNotFound.png | Bin .../images/InstrumentTree.jpg | Bin .../images/IntegrateEllipsoids.png | Bin .../images/IntegratePeaksMD_graph1.png | Bin .../images/IntegratePeaksMD_graph2.png | Bin .../images/LorentzianWithConstBackground.png | Bin .../images/Monitorspect_getei.jpg | Bin .../images/PeakIntensityVsRadius_fig.png | Bin .../images/PlotPeakByLogValue_Output.png | Bin .../images/ReadFromFile-Grouping.png | Bin .../images/RebinByPulseTime.png | Bin .../images/SassenaFFTexample.jpg | Bin .../images/SliceViewer-DetectorFace.png | Bin .../images/UnwrapSNS_inst.png | Bin .../images/UserFunction1D.gif | Bin .../images/Wav_Q_bins.png | Bin 36 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 Code/Mantid/docs/qtassistant/images/Convolution.png rename Code/Mantid/docs/{qtassistant => source}/images/AbsorptionFlow.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/BackToBackExponentialWithConstBackground.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/BinMD_Coordinate_Transforms_withLine.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/Box.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/ChopDataIntegrationExplanation.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/ConvertToEnergyInfoTable.png (100%) create mode 100644 Code/Mantid/docs/source/images/Convolution.png rename Code/Mantid/docs/{qtassistant => source}/images/FFTGaussian1.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/FFTGaussian1FFT.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/FFTGaussian2.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/FFTGaussian2FFT.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/GEM_Focused.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/Gaussian2Fit.jpg (100%) rename Code/Mantid/docs/{qtassistant => source}/images/Gaussian2Fit_Ties.jpg (100%) rename Code/Mantid/docs/{qtassistant => source}/images/GaussianFit.jpg (100%) rename Code/Mantid/docs/{qtassistant => source}/images/GaussianFit_Ties.jpg (100%) rename Code/Mantid/docs/{qtassistant => source}/images/GaussianWithConstBackground.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/IkedaCarpenterPVwithBackground.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/ImageNotFound.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/InstrumentTree.jpg (100%) rename Code/Mantid/docs/{qtassistant => source}/images/IntegrateEllipsoids.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/IntegratePeaksMD_graph1.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/IntegratePeaksMD_graph2.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/LorentzianWithConstBackground.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/Monitorspect_getei.jpg (100%) rename Code/Mantid/docs/{qtassistant => source}/images/PeakIntensityVsRadius_fig.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/PlotPeakByLogValue_Output.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/ReadFromFile-Grouping.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/RebinByPulseTime.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/SassenaFFTexample.jpg (100%) rename Code/Mantid/docs/{qtassistant => source}/images/SliceViewer-DetectorFace.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/UnwrapSNS_inst.png (100%) rename Code/Mantid/docs/{qtassistant => source}/images/UserFunction1D.gif (100%) rename Code/Mantid/docs/{qtassistant => source}/images/Wav_Q_bins.png (100%) diff --git a/Code/Mantid/docs/qtassistant/CMakeLists.txt b/Code/Mantid/docs/qtassistant/CMakeLists.txt index c6d6592cb7ca..02ea3023599c 100644 --- a/Code/Mantid/docs/qtassistant/CMakeLists.txt +++ b/Code/Mantid/docs/qtassistant/CMakeLists.txt @@ -77,7 +77,7 @@ find_program ( DVIPNG_EXE dvipng ) Wav_Q_bins.png ) #message ( "QTASSISTANT_IMAGES ${IMAGES}") - copy_python_files_to_dir("${IMAGES}" "${CMAKE_CURRENT_SOURCE_DIR}/images" ${HELP_HTML_IMG_DIR} INSTALL_IMAGES) + copy_python_files_to_dir("${IMAGES}" "${CMAKE_CURRENT_SOURCE_DIR}/../source/images" ${HELP_HTML_IMG_DIR} INSTALL_IMAGES) # copy the other generic stuff add_custom_command( OUTPUT ${HELP_IMG_DIR}/Mantid_Logo_Transparent.png diff --git a/Code/Mantid/docs/qtassistant/images/Convolution.png b/Code/Mantid/docs/qtassistant/images/Convolution.png deleted file mode 100644 index 08dbcd007106fdcb07a2bd5eba72a0c8d9a5cbb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1090378 zcmeI*4REY`T_5mWJmLihw4ioG3Rsg+58*nXNSoXl=ECJAIS6N%>)}P=piYw_&=a`5 zXw9Wq2o>kzkko=EDso$#GKUsY>rJj5U=VvUBM3-MkK`mE2o3`R*S^T;T2R^ZtA?aL;DU%dFdXFu$rk9ugOQhC_ib8dSzhZ@S~@bGP4g(@p!IfBxsfw+~r*&WrD;R384{>;JF5{Rt2Mo=W9$ zmATt)z5Qpam8q4zAV7eC6n6{|AV7csfxHSx@w`^9W8BaCd;j?v)&g{(_?7?x0%a1A=w+(5 zxe_2ifIzVXq`Fu5s>JksM&`A0RjXFWI;fRXQ2wlK!5-N0t7}8km94L*@plD0t5(TK|qRUp$f)8 zphMuVUVH0ntp(^n@ht%YX9!HK>@AD+Gmtz?fB*pk1Trfi#WPzP10z6y009DL2uSfW zfILiq009C7GAkg(Gg}%1BT#68SKRu_r&tS6=n|V;;sO#qadI6JAV7csfrtd8ctntz zAwYlt0Ro8&#FXOOi?eG7iBCp{1PBlyK%i6t(Wm&q+HAEtzfmehlO;faKzD&xJ^5AZ z)&g|5ac|TD(I@)Em20*A)tRUVsyzY(2oNAZphF<~6z}N3w*&|fAV7dXOakX(YPV~% z)oQit{mnaTwOXG?Jw$*20RjXFbOVg{|89+(6BQ^YX|?GEm1hB0zuu0Rp)d z$Vzrf@!TFl23|mcj%U04gYU zKV)|;fal2jl+Hs02oNAZAlm{{D|^eLJli!gIsya;5FpT7K#KRa@dyC|1PBnwwty7R zc72SFK;i-𝔜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 diff --git a/Code/Mantid/docs/qtassistant/images/AbsorptionFlow.png b/Code/Mantid/docs/source/images/AbsorptionFlow.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/AbsorptionFlow.png rename to Code/Mantid/docs/source/images/AbsorptionFlow.png diff --git a/Code/Mantid/docs/qtassistant/images/BackToBackExponentialWithConstBackground.png b/Code/Mantid/docs/source/images/BackToBackExponentialWithConstBackground.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/BackToBackExponentialWithConstBackground.png rename to Code/Mantid/docs/source/images/BackToBackExponentialWithConstBackground.png diff --git a/Code/Mantid/docs/qtassistant/images/BinMD_Coordinate_Transforms_withLine.png b/Code/Mantid/docs/source/images/BinMD_Coordinate_Transforms_withLine.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/BinMD_Coordinate_Transforms_withLine.png rename to Code/Mantid/docs/source/images/BinMD_Coordinate_Transforms_withLine.png diff --git a/Code/Mantid/docs/qtassistant/images/Box.png b/Code/Mantid/docs/source/images/Box.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/Box.png rename to Code/Mantid/docs/source/images/Box.png diff --git a/Code/Mantid/docs/qtassistant/images/ChopDataIntegrationExplanation.png b/Code/Mantid/docs/source/images/ChopDataIntegrationExplanation.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/ChopDataIntegrationExplanation.png rename to Code/Mantid/docs/source/images/ChopDataIntegrationExplanation.png diff --git a/Code/Mantid/docs/qtassistant/images/ConvertToEnergyInfoTable.png b/Code/Mantid/docs/source/images/ConvertToEnergyInfoTable.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/ConvertToEnergyInfoTable.png rename to Code/Mantid/docs/source/images/ConvertToEnergyInfoTable.png diff --git a/Code/Mantid/docs/source/images/Convolution.png b/Code/Mantid/docs/source/images/Convolution.png new file mode 100644 index 0000000000000000000000000000000000000000..91a5e7a4d9daa9cf627923c9d5d438d621472f71 GIT binary patch literal 5284 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 bh5t5tB_B<=m3qw#NG literal 0 HcmV?d00001 diff --git a/Code/Mantid/docs/qtassistant/images/FFTGaussian1.png b/Code/Mantid/docs/source/images/FFTGaussian1.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/FFTGaussian1.png rename to Code/Mantid/docs/source/images/FFTGaussian1.png diff --git a/Code/Mantid/docs/qtassistant/images/FFTGaussian1FFT.png b/Code/Mantid/docs/source/images/FFTGaussian1FFT.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/FFTGaussian1FFT.png rename to Code/Mantid/docs/source/images/FFTGaussian1FFT.png diff --git a/Code/Mantid/docs/qtassistant/images/FFTGaussian2.png b/Code/Mantid/docs/source/images/FFTGaussian2.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/FFTGaussian2.png rename to Code/Mantid/docs/source/images/FFTGaussian2.png diff --git a/Code/Mantid/docs/qtassistant/images/FFTGaussian2FFT.png b/Code/Mantid/docs/source/images/FFTGaussian2FFT.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/FFTGaussian2FFT.png rename to Code/Mantid/docs/source/images/FFTGaussian2FFT.png diff --git a/Code/Mantid/docs/qtassistant/images/GEM_Focused.png b/Code/Mantid/docs/source/images/GEM_Focused.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/GEM_Focused.png rename to Code/Mantid/docs/source/images/GEM_Focused.png diff --git a/Code/Mantid/docs/qtassistant/images/Gaussian2Fit.jpg b/Code/Mantid/docs/source/images/Gaussian2Fit.jpg similarity index 100% rename from Code/Mantid/docs/qtassistant/images/Gaussian2Fit.jpg rename to Code/Mantid/docs/source/images/Gaussian2Fit.jpg diff --git a/Code/Mantid/docs/qtassistant/images/Gaussian2Fit_Ties.jpg b/Code/Mantid/docs/source/images/Gaussian2Fit_Ties.jpg similarity index 100% rename from Code/Mantid/docs/qtassistant/images/Gaussian2Fit_Ties.jpg rename to Code/Mantid/docs/source/images/Gaussian2Fit_Ties.jpg diff --git a/Code/Mantid/docs/qtassistant/images/GaussianFit.jpg b/Code/Mantid/docs/source/images/GaussianFit.jpg similarity index 100% rename from Code/Mantid/docs/qtassistant/images/GaussianFit.jpg rename to Code/Mantid/docs/source/images/GaussianFit.jpg diff --git a/Code/Mantid/docs/qtassistant/images/GaussianFit_Ties.jpg b/Code/Mantid/docs/source/images/GaussianFit_Ties.jpg similarity index 100% rename from Code/Mantid/docs/qtassistant/images/GaussianFit_Ties.jpg rename to Code/Mantid/docs/source/images/GaussianFit_Ties.jpg diff --git a/Code/Mantid/docs/qtassistant/images/GaussianWithConstBackground.png b/Code/Mantid/docs/source/images/GaussianWithConstBackground.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/GaussianWithConstBackground.png rename to Code/Mantid/docs/source/images/GaussianWithConstBackground.png diff --git a/Code/Mantid/docs/qtassistant/images/IkedaCarpenterPVwithBackground.png b/Code/Mantid/docs/source/images/IkedaCarpenterPVwithBackground.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/IkedaCarpenterPVwithBackground.png rename to Code/Mantid/docs/source/images/IkedaCarpenterPVwithBackground.png diff --git a/Code/Mantid/docs/qtassistant/images/ImageNotFound.png b/Code/Mantid/docs/source/images/ImageNotFound.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/ImageNotFound.png rename to Code/Mantid/docs/source/images/ImageNotFound.png diff --git a/Code/Mantid/docs/qtassistant/images/InstrumentTree.jpg b/Code/Mantid/docs/source/images/InstrumentTree.jpg similarity index 100% rename from Code/Mantid/docs/qtassistant/images/InstrumentTree.jpg rename to Code/Mantid/docs/source/images/InstrumentTree.jpg diff --git a/Code/Mantid/docs/qtassistant/images/IntegrateEllipsoids.png b/Code/Mantid/docs/source/images/IntegrateEllipsoids.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/IntegrateEllipsoids.png rename to Code/Mantid/docs/source/images/IntegrateEllipsoids.png diff --git a/Code/Mantid/docs/qtassistant/images/IntegratePeaksMD_graph1.png b/Code/Mantid/docs/source/images/IntegratePeaksMD_graph1.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/IntegratePeaksMD_graph1.png rename to Code/Mantid/docs/source/images/IntegratePeaksMD_graph1.png diff --git a/Code/Mantid/docs/qtassistant/images/IntegratePeaksMD_graph2.png b/Code/Mantid/docs/source/images/IntegratePeaksMD_graph2.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/IntegratePeaksMD_graph2.png rename to Code/Mantid/docs/source/images/IntegratePeaksMD_graph2.png diff --git a/Code/Mantid/docs/qtassistant/images/LorentzianWithConstBackground.png b/Code/Mantid/docs/source/images/LorentzianWithConstBackground.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/LorentzianWithConstBackground.png rename to Code/Mantid/docs/source/images/LorentzianWithConstBackground.png diff --git a/Code/Mantid/docs/qtassistant/images/Monitorspect_getei.jpg b/Code/Mantid/docs/source/images/Monitorspect_getei.jpg similarity index 100% rename from Code/Mantid/docs/qtassistant/images/Monitorspect_getei.jpg rename to Code/Mantid/docs/source/images/Monitorspect_getei.jpg diff --git a/Code/Mantid/docs/qtassistant/images/PeakIntensityVsRadius_fig.png b/Code/Mantid/docs/source/images/PeakIntensityVsRadius_fig.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/PeakIntensityVsRadius_fig.png rename to Code/Mantid/docs/source/images/PeakIntensityVsRadius_fig.png diff --git a/Code/Mantid/docs/qtassistant/images/PlotPeakByLogValue_Output.png b/Code/Mantid/docs/source/images/PlotPeakByLogValue_Output.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/PlotPeakByLogValue_Output.png rename to Code/Mantid/docs/source/images/PlotPeakByLogValue_Output.png diff --git a/Code/Mantid/docs/qtassistant/images/ReadFromFile-Grouping.png b/Code/Mantid/docs/source/images/ReadFromFile-Grouping.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/ReadFromFile-Grouping.png rename to Code/Mantid/docs/source/images/ReadFromFile-Grouping.png diff --git a/Code/Mantid/docs/qtassistant/images/RebinByPulseTime.png b/Code/Mantid/docs/source/images/RebinByPulseTime.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/RebinByPulseTime.png rename to Code/Mantid/docs/source/images/RebinByPulseTime.png diff --git a/Code/Mantid/docs/qtassistant/images/SassenaFFTexample.jpg b/Code/Mantid/docs/source/images/SassenaFFTexample.jpg similarity index 100% rename from Code/Mantid/docs/qtassistant/images/SassenaFFTexample.jpg rename to Code/Mantid/docs/source/images/SassenaFFTexample.jpg diff --git a/Code/Mantid/docs/qtassistant/images/SliceViewer-DetectorFace.png b/Code/Mantid/docs/source/images/SliceViewer-DetectorFace.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/SliceViewer-DetectorFace.png rename to Code/Mantid/docs/source/images/SliceViewer-DetectorFace.png diff --git a/Code/Mantid/docs/qtassistant/images/UnwrapSNS_inst.png b/Code/Mantid/docs/source/images/UnwrapSNS_inst.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/UnwrapSNS_inst.png rename to Code/Mantid/docs/source/images/UnwrapSNS_inst.png diff --git a/Code/Mantid/docs/qtassistant/images/UserFunction1D.gif b/Code/Mantid/docs/source/images/UserFunction1D.gif similarity index 100% rename from Code/Mantid/docs/qtassistant/images/UserFunction1D.gif rename to Code/Mantid/docs/source/images/UserFunction1D.gif diff --git a/Code/Mantid/docs/qtassistant/images/Wav_Q_bins.png b/Code/Mantid/docs/source/images/Wav_Q_bins.png similarity index 100% rename from Code/Mantid/docs/qtassistant/images/Wav_Q_bins.png rename to Code/Mantid/docs/source/images/Wav_Q_bins.png From 53d50fb66103e2ca1fe801c700d64d88d4146c55 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 12:46:30 +0100 Subject: [PATCH 72/86] Rename aliases directive to alias Refs #9562 --- .../mantiddoc/directives/{aliases.py => alias.py} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename Code/Mantid/docs/sphinxext/mantiddoc/directives/{aliases.py => alias.py} (68%) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/alias.py similarity index 68% rename from Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py rename to Code/Mantid/docs/sphinxext/mantiddoc/directives/alias.py index 2481e4ca734f..829c25ee8b78 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/aliases.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/alias.py @@ -1,24 +1,24 @@ from base import BaseDirective -class AliasesDirective(BaseDirective): +class AliasDirective(BaseDirective): """ - Obtains the aliases for a given algorithm based on it's name. + Obtains the alias for a given algorithm based on it's name. """ required_arguments, optional_arguments = 0, 0 def run(self): """ - Called by Sphinx when the ..aliases:: directive is encountered. + Called by Sphinx when the ..alias:: directive is encountered. """ alg = self.create_mantid_algorithm(self.algorithm_name(), self.algorithm_version()) alias = alg.alias() if len(alias) == 0: return [] - self.add_rst(self.make_header("Aliases")) + self.add_rst(self.make_header("Alias")) format_str = "This algorithm is also known as: **%s**" self.add_rst(format_str % alias) self.commit_rst() @@ -32,4 +32,4 @@ def setup(app): Args: app: The main Sphinx application object """ - app.add_directive('aliases', AliasesDirective) + app.add_directive('alias', AliasDirective) From 00e2d3746d867bd4a5f4a46f7aeec083d59360b0 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 12:47:03 +0100 Subject: [PATCH 73/86] Fix image links in some rst files Refs #9562 --- Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst | 2 +- Code/Mantid/docs/source/algorithms/GetEi-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/GetEi-v2.rst | 2 +- Code/Mantid/docs/source/algorithms/Q1D-v2.rst | 2 +- Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst index 8a2c49810f7b..60cdf1a5cfb6 100644 --- a/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst +++ b/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst @@ -67,6 +67,6 @@ The input workspace must have units of wavelength. The `instrument `__ associated with the workspace must be fully defined because detector, source & sample position are needed. -.. |AbsorptionFlow.png| image:: AbsorptionFlow.png +.. |AbsorptionFlow.png| image:: /images/AbsorptionFlow.png .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst index 126746bda8bf..0d5d8dae7158 100644 --- a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst @@ -50,6 +50,6 @@ means that you can rebin the resulting spectra to finer bins with no loss of data. In fact, it is unnecessary to bin your incoming data at all; binning can be performed as the very last step. -.. |Example of RAW GEM data focused across the 5 detector banks| image:: GEM_Focused.png +.. |Example of RAW GEM data focused across the 5 detector banks| image:: /images/GEM_Focused.png .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst index d1ec74014374..82809f83fe58 100644 --- a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst +++ b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst @@ -59,6 +59,6 @@ Version 1 Version 1 did not support the use of workspaces to carry grouping workspaces and only worked with CalFiles. -.. |Example of RAW GEM data focused across the 5 detector banks| image:: GEM_Focused.png +.. |Example of RAW GEM data focused across the 5 detector banks| image:: /images/GEM_Focused.png .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetEi-v1.rst b/Code/Mantid/docs/source/algorithms/GetEi-v1.rst index b01d54a99ee2..dead31615e9a 100644 --- a/Code/Mantid/docs/source/algorithms/GetEi-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GetEi-v1.rst @@ -42,6 +42,6 @@ The distances between the monitors are read from the instrument definition file. It is assumed that the source and the monitors all lie on one line and that the monitors have the same delay time. -.. |Monitor Peak\|centre\|618px| image:: Monitorspect_getei.jpg +.. |Monitor Peak\|centre\|618px| image:: /images/Monitorspect_getei.jpg .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetEi-v2.rst b/Code/Mantid/docs/source/algorithms/GetEi-v2.rst index fed368f40bd5..b15f0c5ad981 100644 --- a/Code/Mantid/docs/source/algorithms/GetEi-v2.rst +++ b/Code/Mantid/docs/source/algorithms/GetEi-v2.rst @@ -45,6 +45,6 @@ The distances between the monitors are read from the instrument definition file. It is assumed that the source and the monitors all lie on one line and that the monitors have the same delay time. -.. |Monitor Peak\|centre\|618px| image:: Monitorspect_getei.jpg +.. |Monitor Peak\|centre\|618px| image:: /images/Monitorspect_getei.jpg .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Q1D-v2.rst b/Code/Mantid/docs/source/algorithms/Q1D-v2.rst index cc7549a14b6d..737da30783f8 100644 --- a/Code/Mantid/docs/source/algorithms/Q1D-v2.rst +++ b/Code/Mantid/docs/source/algorithms/Q1D-v2.rst @@ -203,6 +203,6 @@ Properties | 5 | AccountForGravity | Input | Boolean | False | Whether to correct for the effects of gravity. | +---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ -.. |Each Q bin contains the sum of many, one, or no wavelength bins\|centre| image:: Wav_Q_bins.png +.. |Each Q bin contains the sum of many, one, or no wavelength bins\|centre| image:: /images/Wav_Q_bins.png .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst b/Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst index f246e408b513..61156ff91109 100644 --- a/Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ReadGroupsFromFile-v1.rst @@ -17,6 +17,6 @@ a value of 0 if ShowUnselected is true. The instrumentView is the best way to visualize the grouping using the "show Instrument" context menu option on the output workspace. -.. |Instrument view of grouping using ReadFromFile with ShowUnselected=True| image:: ReadFromFile-Grouping.png +.. |Instrument view of grouping using ReadFromFile with ShowUnselected=True| image:: /images/ReadFromFile-Grouping.png .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst b/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst index 9c8c540896a6..5b7acde6316d 100644 --- a/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst +++ b/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst @@ -42,6 +42,6 @@ the difference between Tmax and Tmin. DataFrameWidth overrides this and the width is the difference between the longest and shortest TOFs in the data. -.. |Schematic diagram of neutrons entering an instrument and being detected\|centre\|| image:: UnwrapSNS_inst.png +.. |Schematic diagram of neutrons entering an instrument and being detected\|centre\|| image:: /images/UnwrapSNS_inst.png .. categories:: From 99ea59ff98793c1963e478e5743920720eede761 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 13:26:56 +0100 Subject: [PATCH 74/86] Standardize heading characters Uses # to denote a html h3 heading. Refs #9562 --- .../algorithms/AbsorptionCorrection-v1.rst | 4 +-- .../source/algorithms/AlignDetectors-v1.rst | 2 +- .../source/algorithms/AppendSpectra-v1.rst | 6 ++-- .../docs/source/algorithms/BinMD-v1.rst | 6 ++-- .../algorithms/CalculateFlatBackground-v1.rst | 2 +- .../algorithms/CalculateTransmission-v1.rst | 2 +- .../CalibrateRectangularDetectors-v1.rst | 4 +-- .../docs/source/algorithms/ChopData-v1.rst | 2 +- .../algorithms/ConjoinWorkspaces-v1.rst | 4 +-- .../algorithms/ConvertFromDistribution-v1.rst | 2 +- .../algorithms/ConvertToDetectorFaceMD-v1.rst | 2 +- .../ConvertToDiffractionMDWorkspace-v1.rst | 8 +++--- .../ConvertToDiffractionMDWorkspace-v2.rst | 8 +++--- .../algorithms/ConvertToDistribution-v1.rst | 2 +- .../docs/source/algorithms/ConvertToMD-v1.rst | 6 ++-- .../algorithms/ConvertToReflectometryQ-v1.rst | 6 ++-- .../source/algorithms/ConvertUnits-v1.rst | 2 +- .../algorithms/CreateLeBailFitInput-v1.rst | 4 +-- .../algorithms/CreateLogPropertyTable-v1.rst | 10 +++---- .../algorithms/CreatePSDBleedMask-v1.rst | 2 +- .../CuboidGaugeVolumeAbsorption-v1.rst | 2 +- .../algorithms/CylinderAbsorption-v1.rst | 6 ++-- .../DetectorEfficiencyVariation-v1.rst | 2 +- .../DgsAbsoluteUnitsReduction-v1.rst | 2 +- .../DgsConvertToEnergyTransfer-v1.rst | 2 +- .../algorithms/DgsPreprocessData-v1.rst | 2 +- .../DgsProcessDetectorVanadium-v1.rst | 2 +- .../source/algorithms/DgsReduction-v1.rst | 2 +- .../docs/source/algorithms/DgsRemap-v1.rst | 2 +- .../algorithms/DiffractionFocussing-v1.rst | 2 +- .../algorithms/DiffractionFocussing-v2.rst | 4 +-- .../EstimatePDDetectorResolution-v1.rst | 4 +-- .../algorithms/ExtractMaskToTable-v1.rst | 4 +-- Code/Mantid/docs/source/algorithms/FFT-v1.rst | 4 +-- .../docs/source/algorithms/FFTSmooth-v1.rst | 4 +-- .../docs/source/algorithms/FFTSmooth-v2.rst | 6 ++-- .../source/algorithms/FilterByLogValue-v1.rst | 4 +-- .../source/algorithms/FilterByTime-v1.rst | 2 +- .../source/algorithms/FilterEvents-v1.rst | 10 +++---- .../FilterEventsByLogValuePreNexus-v2.rst | 2 +- .../algorithms/FindDeadDetectors-v1.rst | 2 +- .../FindDetectorsOutsideLimits-v1.rst | 2 +- .../docs/source/algorithms/FindPeaks-v1.rst | 10 +++---- Code/Mantid/docs/source/algorithms/Fit-v1.rst | 16 +++++------ .../docs/source/algorithms/FitPeak-v1.rst | 8 +++--- .../algorithms/FitPowderDiffPeaks-v1.rst | 18 ++++++------ .../algorithms/FlatPlateAbsorption-v1.rst | 2 +- .../algorithms/GenerateEventsFilter-v1.rst | 12 ++++---- .../source/algorithms/GeneratePeaks-v1.rst | 4 +-- .../algorithms/GeneratePythonScript-v1.rst | 2 +- .../algorithms/GetDetOffsetsMultiPeaks-v1.rst | 18 ++++++------ .../source/algorithms/GroupDetectors-v2.rst | 2 +- .../algorithms/HRPDSlabCanAbsorption-v1.rst | 4 +-- .../algorithms/He3TubeEfficiency-v1.rst | 2 +- .../algorithms/ImportMDHistoWorkspace-v1.rst | 2 +- .../algorithms/IntegrateEllipsoids-v1.rst | 6 ++-- .../source/algorithms/IntegratePeaksMD-v1.rst | 10 +++---- .../source/algorithms/IntegratePeaksMD-v2.rst | 10 +++---- .../IntegratePeaksUsingClusters-v1.rst | 6 ++-- .../docs/source/algorithms/Integration-v1.rst | 4 +-- .../algorithms/InterpolatingRebin-v1.rst | 2 +- .../docs/source/algorithms/LeBailFit-v1.rst | 12 ++++---- .../Mantid/docs/source/algorithms/Load-v1.rst | 2 +- .../LoadDetectorsGroupingFile-v1.rst | 2 +- .../source/algorithms/LoadEventNexus-v1.rst | 4 +-- .../algorithms/LoadEventPreNexus-v1.rst | 2 +- .../algorithms/LoadEventPreNexus-v2.rst | 2 +- .../source/algorithms/LoadFullprofFile-v1.rst | 4 +-- .../source/algorithms/LoadLiveData-v1.rst | 12 ++++---- .../docs/source/algorithms/LoadLog-v1.rst | 6 ++-- .../docs/source/algorithms/LoadMask-v1.rst | 4 +-- .../docs/source/algorithms/LoadMuonLog-v1.rst | 2 +- .../source/algorithms/LoadMuonNexus-v1.rst | 12 ++++---- .../source/algorithms/LoadMuonNexus-v2.rst | 12 ++++---- .../algorithms/LoadNexusProcessed-v1.rst | 4 +-- .../docs/source/algorithms/LoadRaw-v3.rst | 6 ++-- .../docs/source/algorithms/LoadSQW-v1.rst | 6 ++-- .../docs/source/algorithms/MaskBins-v1.rst | 2 +- .../algorithms/MaskBinsFromTable-v1.rst | 2 +- .../source/algorithms/MaskDetectors-v1.rst | 16 +++++------ .../algorithms/MaskDetectorsInShape-v1.rst | 2 +- .../algorithms/MedianDetectorTest-v1.rst | 2 +- .../docs/source/algorithms/MergeRuns-v1.rst | 10 +++---- .../algorithms/MonteCarloAbsorption-v1.rst | 2 +- .../docs/source/algorithms/MuonLoad-v1.rst | 2 +- .../docs/source/algorithms/MuscatData-v1.rst | 2 +- .../docs/source/algorithms/MuscatFunc-v1.rst | 2 +- .../algorithms/NormaliseByCurrent-v1.rst | 2 +- .../algorithms/NormaliseByDetector-v1.rst | 10 +++---- .../algorithms/NormaliseToMonitor-v1.rst | 8 +++--- .../algorithms/PDFFourierTransform-v1.rst | 2 +- .../algorithms/PeakIntensityVsRadius-v1.rst | 2 +- .../algorithms/PlotPeakByLogValue-v1.rst | 2 +- .../Mantid/docs/source/algorithms/Plus-v1.rst | 2 +- .../docs/source/algorithms/PlusMD-v1.rst | 6 ++-- .../algorithms/PointByPointVCorrection-v1.rst | 2 +- .../source/algorithms/PoldiProjectRun-v1.rst | 12 ++++---- .../algorithms/PredictFractionalPeaks-v1.rst | 2 +- .../source/algorithms/PredictPeaks-v1.rst | 2 +- .../algorithms/ProcessBackground-v1.rst | 6 ++-- Code/Mantid/docs/source/algorithms/Q1D-v2.rst | 14 +++++----- .../docs/source/algorithms/Rebin-v1.rst | 8 +++--- .../RefinePowderDiffProfileSeq-v1.rst | 6 ++-- .../RefinePowderInstrumentParameters-v3.rst | 6 ++-- .../ReflectometryReductionOne-v1.rst | 4 +-- .../docs/source/algorithms/RemoveBins-v1.rst | 8 +++--- .../algorithms/SANSWideAngleCorrection-v1.rst | 2 +- .../algorithms/SNSPowderReduction-v1.rst | 2 +- .../docs/source/algorithms/SassenaFFT-v1.rst | 2 +- .../source/algorithms/SaveANSTOAscii-v1.rst | 2 +- .../docs/source/algorithms/SaveAscii-v1.rst | 2 +- .../docs/source/algorithms/SaveAscii-v2.rst | 2 +- .../algorithms/SaveDetectorsGrouping-v1.rst | 2 +- .../algorithms/SaveFullprofResolution-v1.rst | 4 +-- .../algorithms/SaveGSASInstrumentFile-v1.rst | 10 +++---- .../algorithms/SaveILLCosmosAscii-v1.rst | 2 +- .../docs/source/algorithms/SaveMask-v1.rst | 4 +-- .../docs/source/algorithms/SaveNXSPE-v1.rst | 4 +-- .../docs/source/algorithms/SaveNexus-v1.rst | 4 +-- .../algorithms/SaveNexusProcessed-v1.rst | 4 +-- .../docs/source/algorithms/SaveReflTBL-v1.rst | 2 +- .../docs/source/algorithms/SaveSPE-v1.rst | 2 +- .../docs/source/algorithms/SaveZODS-v1.rst | 4 +-- .../source/algorithms/SetScalingPSD-v1.rst | 4 +-- .../docs/source/algorithms/SliceMD-v1.rst | 8 +++--- .../source/algorithms/SmoothNeighbours-v1.rst | 28 +++++++++---------- .../algorithms/SplineInterpolation-v1.rst | 2 +- .../source/algorithms/SplineSmoothing-v1.rst | 2 +- .../source/algorithms/StartLiveData-v1.rst | 6 ++-- .../docs/source/algorithms/StripPeaks-v1.rst | 2 +- .../algorithms/SumEventsByLogValue-v1.rst | 4 +-- .../source/algorithms/SumRowColumn-v1.rst | 2 +- .../docs/source/algorithms/TransformMD-v1.rst | 4 +-- .../source/algorithms/UnwrapMonitor-v1.rst | 4 +-- .../UpdateInstrumentFromFile-v1.rst | 2 +- 135 files changed, 327 insertions(+), 327 deletions(-) diff --git a/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst index 60cdf1a5cfb6..cb971f0ab59b 100644 --- a/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst +++ b/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst @@ -45,7 +45,7 @@ sample, using a method imported from ISAW). Also, HRPD users can use the calculations of the effects of the sample holder. |AbsorptionFlow.png| Assumptions -^^^^^^^^^^^ +########### This algorithm assumes that the (parallel) beam illuminates the entire sample **unless** a 'gauge volume' has been defined using the @@ -61,7 +61,7 @@ the sample then you will get a more accurate result from the algorithm.) Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must have units of wavelength. The `instrument `__ associated with the workspace must be fully diff --git a/Code/Mantid/docs/source/algorithms/AlignDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/AlignDetectors-v1.rst index 186201b370e9..256c5e597f6b 100644 --- a/Code/Mantid/docs/source/algorithms/AlignDetectors-v1.rst +++ b/Code/Mantid/docs/source/algorithms/AlignDetectors-v1.rst @@ -22,7 +22,7 @@ the offset; or a .cal file (in the form created by the ARIEL software). Workspace `__. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must contain histogram or event data where the X unit is time-of-flight and the Y data is raw counts. The diff --git a/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst b/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst index b5bbdafd59b3..66e561428adc 100644 --- a/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst +++ b/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst @@ -20,7 +20,7 @@ be copied from the first input workspace (but if they're not identical anyway, then you probably shouldn't be using this algorithm!). Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### For `EventWorkspaces `__, there are no restrictions on the input workspaces if ValidateInputs=false. @@ -35,14 +35,14 @@ If ValidateInputs is selected, then the input workspaces must also: - Have common bin boundaries Spectrum Numbers -^^^^^^^^^^^^^^^^ +################ If there is an overlap in the spectrum numbers of both inputs, then the output workspace will have its spectrum numbers reset starting at 0 and increasing by 1 for each spectrum. See Also -^^^^^^^^ +######## - :ref:`_algm-ConjoinWorkspaces` for joining parts of the same workspace. diff --git a/Code/Mantid/docs/source/algorithms/BinMD-v1.rst b/Code/Mantid/docs/source/algorithms/BinMD-v1.rst index f70ab9ab5c71..d22abfbead4b 100644 --- a/Code/Mantid/docs/source/algorithms/BinMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/BinMD-v1.rst @@ -23,7 +23,7 @@ parameter; any points NOT belonging inside of the ImplicitFunction will be set as NaN (not-a-number). Axis-Aligned Binning -~~~~~~~~~~~~~~~~~~~~ +#################### This is binning where the output axes are aligned with the original workspace. Specify each of the AlignedDim0, etc. parameters with these @@ -39,7 +39,7 @@ only within a range, then specify the start and end points, with only 1 bin. Non-Axis Aligned Binning -~~~~~~~~~~~~~~~~~~~~~~~~ +######################## This allows rebinning to a new arbitrary space, with rotations, translations, or skewing. This is given by a set of basis vectors and @@ -87,7 +87,7 @@ vectors if needed to make them orthogonal to each other. Only works in 3 dimensions! Binning a MDHistoWorkspace -~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################## It is possible to rebin a `MDHistoWorkspace `__. Each MDHistoWorkspace holds a reference to the diff --git a/Code/Mantid/docs/source/algorithms/CalculateFlatBackground-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateFlatBackground-v1.rst index dd29c99d9363..d382f3bb9765 100644 --- a/Code/Mantid/docs/source/algorithms/CalculateFlatBackground-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CalculateFlatBackground-v1.rst @@ -28,7 +28,7 @@ in quadrature divided by the number of bins. This background error value is added in quadrature to the errors in each bin. ChildAlgorithms used -^^^^^^^^^^^^^^^^^^^^ +#################### The `Linear `__ algorithm is used when the Mode = Linear Fit. From the resulting line of best fit a constant value taken as the value diff --git a/Code/Mantid/docs/source/algorithms/CalculateTransmission-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateTransmission-v1.rst index b10d60d1ff0e..e3a40212b0c4 100644 --- a/Code/Mantid/docs/source/algorithms/CalculateTransmission-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CalculateTransmission-v1.rst @@ -34,7 +34,7 @@ of wavelengths passed to CalculateTransmission is different from that of the data to be corrected. ChildAlgorithms used -~~~~~~~~~~~~~~~~~~~~ +#################### Uses the algorithm `linear `__ to fit to the calculated transmission fraction. diff --git a/Code/Mantid/docs/source/algorithms/CalibrateRectangularDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/CalibrateRectangularDetectors-v1.rst index 6ccfe2b3995e..e7b2852c4ba4 100644 --- a/Code/Mantid/docs/source/algorithms/CalibrateRectangularDetectors-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CalibrateRectangularDetectors-v1.rst @@ -36,7 +36,7 @@ Features to improve performance of peak finding ----------------------------------------------- Define peak fit-window -~~~~~~~~~~~~~~~~~~~~~~ +###################### There are two exclusive approaches to define peak's fit-window. @@ -47,7 +47,7 @@ fitting range. peak will have its individual fit window defined. Define accepted range of peak's width -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +##################################### Optional input property *DetectorResolutionWorkspace* is a matrix workspace containing the detector resolution :math:`\Delta(d)/d` for diff --git a/Code/Mantid/docs/source/algorithms/ChopData-v1.rst b/Code/Mantid/docs/source/algorithms/ChopData-v1.rst index bd1a64e29e7b..6f3dd09ff5c0 100644 --- a/Code/Mantid/docs/source/algorithms/ChopData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ChopData-v1.rst @@ -15,7 +15,7 @@ the same point. This is useful if your raw files contain multiple frames. Identifying Extended Frames -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################### .. figure:: /images/ChopDataIntegrationExplanation.png :alt: Figure 1: Example Monitor Spectrum with Extended Frames diff --git a/Code/Mantid/docs/source/algorithms/ConjoinWorkspaces-v1.rst b/Code/Mantid/docs/source/algorithms/ConjoinWorkspaces-v1.rst index fe25a3574842..a35b276a77f1 100644 --- a/Code/Mantid/docs/source/algorithms/ConjoinWorkspaces-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConjoinWorkspaces-v1.rst @@ -24,7 +24,7 @@ of the first input workspace. Workspace data members other than the data using this algorithm!). Both input workspaces will be deleted. Conflict Spectrum IDs -^^^^^^^^^^^^^^^^^^^^^ +##################### The algorithm adds the spectra from the first workspace and then the second workspace. @@ -41,7 +41,7 @@ second workspace. non-negative integer. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspaces must come from the same instrument, have common units and bins and no detectors that contribute to spectra should diff --git a/Code/Mantid/docs/source/algorithms/ConvertFromDistribution-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertFromDistribution-v1.rst index 663a003ec7c8..3a588b23ce6a 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertFromDistribution-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertFromDistribution-v1.rst @@ -13,7 +13,7 @@ Converts a histogram workspace from a distribution i.e. multiplies by the bin width to take out the bin width dependency. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The workspace to convert must contain histogram data which is flagged as being a distribution. diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst index eece5d7cdf35..c2fc1d5f1368 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst @@ -38,7 +38,7 @@ screenshot for example: SliceViewer-DetectorFace.png BankNumbers Parameter -^^^^^^^^^^^^^^^^^^^^^ +##################### If your instrument has several `RectangularDetectors `__, you can use the diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst index 4a4d7b7593e3..cd75eb1b9bd3 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst @@ -24,7 +24,7 @@ In order to define more precisely the parameters of the :ref:`_algm-CreateMDWorkspace` algorithm first. Types of Conversion -^^^^^^^^^^^^^^^^^^^ +################### - **Q (lab frame)**: this calculates the momentum transfer (ki-kf) for each event is calculated in the experimental lab frame. @@ -37,7 +37,7 @@ Types of Conversion Miller indices of each event. Lorentz Correction -^^^^^^^^^^^^^^^^^^ +################## If selected, the following Lorentz correction factor is applied on each event by multiplying its weight by L: @@ -53,7 +53,7 @@ This correction is also done by the false if that algorithm has been run on the input workspace. OneEventPerBin option -^^^^^^^^^^^^^^^^^^^^^ +##################### If you specify *OneEventPerBin*, then the **histogram** representation of the input workspace is used, with one MDEvent generated for each bin @@ -80,7 +80,7 @@ If your input is a `Workspace2D `__ and you do NOT check `EventWorkspace `__ but with no events for empty bins. Performance Notes -^^^^^^^^^^^^^^^^^ +################# - 8-core Intel Xeon 3.2 GHz computer: measured between 4 and 5.5 million events per second (100-200 million event workspace). diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst index 4a4d7b7593e3..cd75eb1b9bd3 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst @@ -24,7 +24,7 @@ In order to define more precisely the parameters of the :ref:`_algm-CreateMDWorkspace` algorithm first. Types of Conversion -^^^^^^^^^^^^^^^^^^^ +################### - **Q (lab frame)**: this calculates the momentum transfer (ki-kf) for each event is calculated in the experimental lab frame. @@ -37,7 +37,7 @@ Types of Conversion Miller indices of each event. Lorentz Correction -^^^^^^^^^^^^^^^^^^ +################## If selected, the following Lorentz correction factor is applied on each event by multiplying its weight by L: @@ -53,7 +53,7 @@ This correction is also done by the false if that algorithm has been run on the input workspace. OneEventPerBin option -^^^^^^^^^^^^^^^^^^^^^ +##################### If you specify *OneEventPerBin*, then the **histogram** representation of the input workspace is used, with one MDEvent generated for each bin @@ -80,7 +80,7 @@ If your input is a `Workspace2D `__ and you do NOT check `EventWorkspace `__ but with no events for empty bins. Performance Notes -^^^^^^^^^^^^^^^^^ +################# - 8-core Intel Xeon 3.2 GHz computer: measured between 4 and 5.5 million events per second (100-200 million event workspace). diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDistribution-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDistribution-v1.rst index e6b2b90363c2..8b0240074ae4 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToDistribution-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToDistribution-v1.rst @@ -13,7 +13,7 @@ Makes a histogram workspace a distribution i.e. divides by the bin width. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The workspace to convert must contain histogram data which is not already flagged as a distribution. diff --git a/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst index a91ed28e3ba4..0d423a5f6600 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst @@ -68,7 +68,7 @@ common situations. They work with the data files which already used by Mantid for different testing tasks. Convert re-binned MARI 2D workspace to 3D MD workspace for further analysis/merging with data at different temperatures -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +####################################################################################################################### .. code:: python @@ -84,7 +84,7 @@ Output **MD3** workspace can be viewed in slice-viewer as 3D workspace with T-axis having single value. Convert Set of Event Workspaces (Horace scan) to 4D MD workspace, direct mode: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################################################## This example is based on CNCS\_7860\_event.nxs file, available in Mantid test folder. The same script without any changes would produce similar @@ -137,7 +137,7 @@ and stored in nxspe files. plotSlice(RezWS, xydim=["[H,0,0]","[0,K,0]"], slicepoint=[0,0] ) Convert set of inelastic results obtained in Powder mode (direct) as function of temperature to a 3D workspace: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################################################################################### The test example is based on MAR1011.nxspe data file, obtained by reducing test data from the MARI experiment. The data for the experiment diff --git a/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst index 4b327ab9f804..0fde7b507bfc 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst @@ -10,7 +10,7 @@ Description ----------- Prerequisites -~~~~~~~~~~~~~ +############# The workspace spectrum axis should be converted to signed\_theta using :ref:`_algm-ConvertSpectrumAxis` and the x axis should be @@ -24,7 +24,7 @@ value you can do so by providing your own *IncidentTheta* property and enabling *OverrideIncidentTheta*. Transformations -~~~~~~~~~~~~~~~ +############### Output workspaces are always 2D MD Histogram workspaces, but the algorithm will perform one of three possible transformations. @@ -49,7 +49,7 @@ where {{AlgorithmLinks|ConvertToReflectometryQ}} After Transformation -~~~~~~~~~~~~~~~~~~~~ +#################### You will usually want to rebin using :ref:`_algm-BinMD` or :ref:`_algm-SliceMD` after transformation because the output workspaces diff --git a/Code/Mantid/docs/source/algorithms/ConvertUnits-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertUnits-v1.rst index 9652166f23df..24f1ddcb3b81 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertUnits-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertUnits-v1.rst @@ -32,7 +32,7 @@ value of EFixed will be taken, if available, from the instrument definition file. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### - Naturally, the X values must have a unit set, and that unit must be known to the `Unit Factory `__. diff --git a/Code/Mantid/docs/source/algorithms/CreateLeBailFitInput-v1.rst b/Code/Mantid/docs/source/algorithms/CreateLeBailFitInput-v1.rst index 468c4d07bed2..2e3c4b59728d 100644 --- a/Code/Mantid/docs/source/algorithms/CreateLeBailFitInput-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreateLeBailFitInput-v1.rst @@ -14,7 +14,7 @@ This algorithm is to import Fullprof .irf file (peak parameters) and which serve as the inputs for algorithm LeBailFit. Format of Instrument parameter TableWorkspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################################# Instrument parameter TableWorkspace contains all the peak profile parameters imported from Fullprof .irf file. @@ -28,7 +28,7 @@ Each row in TableWorkspace corresponds to one profile parameter. Columns include Name, Value, FitOrTie, Min, Max and StepSize. Format of reflection TableWorkspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### Each row of this workspace corresponds to one diffraction peak. The information contains the peak's Miller index and (local) peak profile diff --git a/Code/Mantid/docs/source/algorithms/CreateLogPropertyTable-v1.rst b/Code/Mantid/docs/source/algorithms/CreateLogPropertyTable-v1.rst index 2b2e8148c87c..42b95fda60f9 100644 --- a/Code/Mantid/docs/source/algorithms/CreateLogPropertyTable-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreateLogPropertyTable-v1.rst @@ -15,7 +15,7 @@ values for each of the specified properties, for each of the specified workspaces. LogPropertyNames -~~~~~~~~~~~~~~~~ +################ The list of log property names provided must consist of properties that actually appear in the workspace(s). You can check which properties are @@ -24,19 +24,19 @@ the "Sample Logs..." dialog window. All acceptable properties have names that appear in the "Name" column of the dialog table. GroupPolicy -~~~~~~~~~~~ +########### GroupWorkspaces can be handled in various ways, depending on the GroupPolicy input: "All" -^^^^^ +##### All children of any GroupWorkspaces will be included in the table. This should be used when each child workspace contains different data. "First" -^^^^^^^ +####### Only the first child of any GroupWorkspaces will be included in the table. This is useful for instruments that produce groups of workspaces @@ -44,7 +44,7 @@ for a single run, and specifying "All" would populate the table with duplicate data. "None" -^^^^^^ +###### Excludes GroupWorkspaces altogether. diff --git a/Code/Mantid/docs/source/algorithms/CreatePSDBleedMask-v1.rst b/Code/Mantid/docs/source/algorithms/CreatePSDBleedMask-v1.rst index 9de005a92dcb..1293efe89f4d 100644 --- a/Code/Mantid/docs/source/algorithms/CreatePSDBleedMask-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreatePSDBleedMask-v1.rst @@ -17,7 +17,7 @@ equatorial region, are counting above this threshold then the entire tube is masked. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### - The workspace must contain either raw counts or counts/us. diff --git a/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst index 8a11bfe527b3..9e4b6e55f9c3 100644 --- a/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst @@ -31,7 +31,7 @@ of each element and a numerical integration is carried out using these path lengths over the volume elements. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must have units of wavelength. The `instrument `__ associated with the workspace must be fully diff --git a/Code/Mantid/docs/source/algorithms/CylinderAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/CylinderAbsorption-v1.rst index 74048e9136f5..e810914d0523 100644 --- a/Code/Mantid/docs/source/algorithms/CylinderAbsorption-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CylinderAbsorption-v1.rst @@ -26,7 +26,7 @@ of each element and a numerical integration is carried out using these path lengths over the volume elements. Assumptions -^^^^^^^^^^^ +########### Although no assumptions are made about the beam direction or the sample position, the cylinder will be constructed with its centre at the sample @@ -34,14 +34,14 @@ position and it's axis along the y axis (which in the case of most instruments is the vertical). Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must have units of wavelength. The `instrument `__ associated with the workspace must be fully defined because detector, source & sample position are needed. References -^^^^^^^^^^ +########## The method used here is based upon work presented in the following two papers, although it does not yet fully implement all aspects discussed diff --git a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst index 695a8a3cd7d6..3aae9e9b6665 100644 --- a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst @@ -31,7 +31,7 @@ fail the tests are masked and those that pass them are assigned a single positive value. Child algorithms used -^^^^^^^^^^^^^^^^^^^^^ +##################### Uses the :ref:`_algm-Integration` algorithm to sum the spectra. diff --git a/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst b/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst index df1159fdf190..987e6527bc73 100644 --- a/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst @@ -62,7 +62,7 @@ by: with the cross-section units of :math:`millibarns/steradian`. Workflow -~~~~~~~~ +######## .. figure:: /images/DgsAbsoluteUnitsReductionWorkflow.png :alt: DgsAbsoluteUnitsReductionWorkflow.png diff --git a/Code/Mantid/docs/source/algorithms/DgsConvertToEnergyTransfer-v1.rst b/Code/Mantid/docs/source/algorithms/DgsConvertToEnergyTransfer-v1.rst index b95a4c84e78a..9c51af325455 100644 --- a/Code/Mantid/docs/source/algorithms/DgsConvertToEnergyTransfer-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DgsConvertToEnergyTransfer-v1.rst @@ -38,7 +38,7 @@ The use of the SofPhiEIsDistribution parameter in the last Rebin call is used to set the *Rebin* algorithm parameter PreserveEvents. Workflow -~~~~~~~~ +######## .. figure:: /images/DgsConvertToEnergyTransferWorkflow.png :alt: DgsConvertToEnergyTransferWorkflow.png diff --git a/Code/Mantid/docs/source/algorithms/DgsPreprocessData-v1.rst b/Code/Mantid/docs/source/algorithms/DgsPreprocessData-v1.rst index 7623a1e8ef4b..d6e9fc2e3c3c 100644 --- a/Code/Mantid/docs/source/algorithms/DgsPreprocessData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DgsPreprocessData-v1.rst @@ -32,7 +32,7 @@ DirectInelasticReductionNormalisedBy is added to the resulting workspace with the normalisation procedure used. Workflow -~~~~~~~~ +######## .. figure:: /images/DgsPreprocessDataWorkflow.png :alt: DgsPreprocessDataWorkflow.png diff --git a/Code/Mantid/docs/source/algorithms/DgsProcessDetectorVanadium-v1.rst b/Code/Mantid/docs/source/algorithms/DgsProcessDetectorVanadium-v1.rst index 1d564af42f4f..47058060b8d6 100644 --- a/Code/Mantid/docs/source/algorithms/DgsProcessDetectorVanadium-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DgsProcessDetectorVanadium-v1.rst @@ -34,7 +34,7 @@ a file using the reduction property manager with the boolean property SaveProcessedDetVan. Workflow -~~~~~~~~ +######## .. figure:: /images/DgsProcessDetectorVanadiumWorkflow.png :alt: DgsProcessDetectorVanadiumWorkflow.png diff --git a/Code/Mantid/docs/source/algorithms/DgsReduction-v1.rst b/Code/Mantid/docs/source/algorithms/DgsReduction-v1.rst index 18e1663976b6..1d29e6294229 100644 --- a/Code/Mantid/docs/source/algorithms/DgsReduction-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DgsReduction-v1.rst @@ -15,7 +15,7 @@ the necessary parameters and generating calls to other workflow or standard algorithms. Workflow -~~~~~~~~ +######## Parameters for the child algorithms are not shown due to sheer number. They will be detailed in the child algorithm diagrams. Items in diff --git a/Code/Mantid/docs/source/algorithms/DgsRemap-v1.rst b/Code/Mantid/docs/source/algorithms/DgsRemap-v1.rst index 270849d7ca6a..06c0c79aec2c 100644 --- a/Code/Mantid/docs/source/algorithms/DgsRemap-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DgsRemap-v1.rst @@ -14,7 +14,7 @@ workspace. One can use the ExecuteOppositeOrder to do grouping first then masking. Workflow -~~~~~~~~ +######## .. figure:: /images/DgsRemapWorkflow.png :alt: DgsRemapWorkflow.png diff --git a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst index 0d5d8dae7158..21000ca82361 100644 --- a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v1.rst @@ -38,7 +38,7 @@ combine data from several spectra according to GroupingFileName file which is a `CalFile `__. For EventWorkspaces -~~~~~~~~~~~~~~~~~~~ +################### The algorithm can be used with an `EventWorkspace `__ input, and will create an EventWorkspace output if a different workspace diff --git a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst index 82809f83fe58..dfa15b287e05 100644 --- a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst +++ b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst @@ -38,7 +38,7 @@ combine data from several spectra according to GroupingFileName file which is a `CalFile `__. For EventWorkspaces -~~~~~~~~~~~~~~~~~~~ +################### The algorithm can be used with an `EventWorkspace `__ input, and will create an EventWorkspace output if a different workspace @@ -54,7 +54,7 @@ Previous Versions ----------------- Version 1 -~~~~~~~~~ +######### Version 1 did not support the use of workspaces to carry grouping workspaces and only worked with CalFiles. diff --git a/Code/Mantid/docs/source/algorithms/EstimatePDDetectorResolution-v1.rst b/Code/Mantid/docs/source/algorithms/EstimatePDDetectorResolution-v1.rst index b4fa0227b0b5..bedbb93a559a 100644 --- a/Code/Mantid/docs/source/algorithms/EstimatePDDetectorResolution-v1.rst +++ b/Code/Mantid/docs/source/algorithms/EstimatePDDetectorResolution-v1.rst @@ -40,7 +40,7 @@ Factor Sheet ------------ NOMAD -~~~~~ +##### Detector size @@ -48,7 +48,7 @@ Detector size - Horizontal: half inch or 1 inch POWGEN -~~~~~~ +###### Detector size: 0.005 x 0.0543 diff --git a/Code/Mantid/docs/source/algorithms/ExtractMaskToTable-v1.rst b/Code/Mantid/docs/source/algorithms/ExtractMaskToTable-v1.rst index 663b31cdd3d2..cfe25fcd3b5e 100644 --- a/Code/Mantid/docs/source/algorithms/ExtractMaskToTable-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ExtractMaskToTable-v1.rst @@ -10,14 +10,14 @@ Description ----------- InputWorskpace -^^^^^^^^^^^^^^ +############## It can be either a MaskWorkspace, containing the masking information, or a Data workspace (EventWorkspace or Workspace2D), having detectors masked. Optional MaskTableWorkspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +########################### If the optional input 'MaskTableWorkspace' is given, it must be a table workspace having the same format as output TableWorkspace such that it diff --git a/Code/Mantid/docs/source/algorithms/FFT-v1.rst b/Code/Mantid/docs/source/algorithms/FFT-v1.rst index a949bdd54e7a..7debf3991362 100644 --- a/Code/Mantid/docs/source/algorithms/FFT-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FFT-v1.rst @@ -71,7 +71,7 @@ point data. The variations are of the order of :math:`\Delta\xi`. The zero frequency is always in the bin with index :math:`k=int(N/2)`. Example 1 -~~~~~~~~~ +######### In this example the input data were calculated using function :math:`\exp(-(x-1)^2)` in the range [-5,5]. @@ -88,7 +88,7 @@ Because the :math:`x=0` is in the middle of the data array the transform shown is the exact DFT of the input data. Example 2 -~~~~~~~~~ +######### In this example the input data were calculated using function :math:`\exp(-x^2)` in the range [-6,4]. diff --git a/Code/Mantid/docs/source/algorithms/FFTSmooth-v1.rst b/Code/Mantid/docs/source/algorithms/FFTSmooth-v1.rst index b764f84e64e1..2a7b99a7b967 100644 --- a/Code/Mantid/docs/source/algorithms/FFTSmooth-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FFTSmooth-v1.rst @@ -16,7 +16,7 @@ remove higher frequencies from the spectrum which reduces the noise. The second version of the FFTSmooth algorithm has two filters: Zeroing -~~~~~~~ +####### - Filter: "Zeroing" - Params: "n" - an integer greater than 1 meaning that the Fourier @@ -24,7 +24,7 @@ Zeroing will be set to zero. Butterworth -~~~~~~~~~~~ +########### - Filter: "Butterworth" - Params: A string containing two positive integer parameters separated diff --git a/Code/Mantid/docs/source/algorithms/FFTSmooth-v2.rst b/Code/Mantid/docs/source/algorithms/FFTSmooth-v2.rst index 3edc015e2eac..ab872833662f 100644 --- a/Code/Mantid/docs/source/algorithms/FFTSmooth-v2.rst +++ b/Code/Mantid/docs/source/algorithms/FFTSmooth-v2.rst @@ -16,7 +16,7 @@ remove higher frequencies from the spectrum which reduces the noise. The second version of the FFTSmooth algorithm has two filters: Zeroing -~~~~~~~ +####### - Filter: "Zeroing" - Params: "n" - an integer greater than 1 meaning that the Fourier @@ -24,7 +24,7 @@ Zeroing will be set to zero. Butterworth -~~~~~~~~~~~ +########### - Filter: "Butterworth" - Params: A string containing two positive integer parameters separated @@ -49,7 +49,7 @@ Previous Versions ----------------- Version 1 -~~~~~~~~~ +######### Version 1 did not support the Butterworth Filter and did not offer the options to ignore X bins or smooth all spectra. diff --git a/Code/Mantid/docs/source/algorithms/FilterByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/FilterByLogValue-v1.rst index ef033ffe295f..d495d7886ba3 100644 --- a/Code/Mantid/docs/source/algorithms/FilterByLogValue-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FilterByLogValue-v1.rst @@ -39,7 +39,7 @@ log value is assumed to be constant for all time and if it falls within the range, then all events will be kept. PulseFilter (e.g. for Veto Pulses) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################## If you select PulseFilter, then events will be filtered OUT in notches around each time in the selected sample log, and the MinValue/MaxValue @@ -63,7 +63,7 @@ rejected. For example, this call will filter out veto pulses: ``FilterByLogValue(InputWorkspace="ws", OutputWorkspace="ws", LogName="veto_pulse_time", PulseFilter="1")`` Comparing with other event filtering algorithms -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################### Wiki page `EventFiltering `__ has a detailed introduction on event filtering in MantidPlot. diff --git a/Code/Mantid/docs/source/algorithms/FilterByTime-v1.rst b/Code/Mantid/docs/source/algorithms/FilterByTime-v1.rst index c8d1dcc3fd29..d73f85390c3e 100644 --- a/Code/Mantid/docs/source/algorithms/FilterByTime-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FilterByTime-v1.rst @@ -25,7 +25,7 @@ You must specify: - But not another combination of the four, or the algorithm will abort. Comparing with other event filtering algorithms -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################### Wiki page `EventFiltering `__ has a detailed introduction on event filtering in MantidPlot. diff --git a/Code/Mantid/docs/source/algorithms/FilterEvents-v1.rst b/Code/Mantid/docs/source/algorithms/FilterEvents-v1.rst index 2ccd9cb3d9ae..1069c2625902 100644 --- a/Code/Mantid/docs/source/algorithms/FilterEvents-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FilterEvents-v1.rst @@ -16,14 +16,14 @@ This algorithm filters events from an splitters (i.e., `SplittingIntervals `__). Output -^^^^^^ +###### The output will be one or multiple workspaces according to the number of index in splitters. The output workspace name is the combination of parameter OutputWorkspaceBaseName and the index in splitter. Calibration File -^^^^^^^^^^^^^^^^ +################ The calibration, or say correction, from the detector to sample must be consider in fast log. Thus a calibration file is required. The math is @@ -37,7 +37,7 @@ A reasonable approximation of the correction is ``correction(detector_ID) = L1/(L1+L2(detector_ID))`` Unfiltered Events -^^^^^^^^^^^^^^^^^ +################# Some events are not inside any splitters. They are put to a workspace name ended with '\_unfiltered'. @@ -46,7 +46,7 @@ If input property 'OutputWorkspaceIndexedFrom1' is set to True, then this workspace shall not be outputed. Difference from FilterByLogValue -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################ In FilterByLogValue(), EventList.splitByTime() is used. @@ -61,7 +61,7 @@ both pulse time and TOF. Therefore, FilterByLogValue is not suitable for fast log filtering. Comparing with other event filtering algorithms -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################### Wiki page `EventFiltering `__ has a detailed introduction on event filtering in MantidPlot. diff --git a/Code/Mantid/docs/source/algorithms/FilterEventsByLogValuePreNexus-v2.rst b/Code/Mantid/docs/source/algorithms/FilterEventsByLogValuePreNexus-v2.rst index 2c698d89c792..ce91f92202a1 100644 --- a/Code/Mantid/docs/source/algorithms/FilterEventsByLogValuePreNexus-v2.rst +++ b/Code/Mantid/docs/source/algorithms/FilterEventsByLogValuePreNexus-v2.rst @@ -17,7 +17,7 @@ time-of-flight. Since it is an `EventWorkspace `__, it can be rebinned to finer bins with no loss of data. Optional properties -~~~~~~~~~~~~~~~~~~~ +################### Specific pulse ID and mapping files can be specified if needed; these are guessed at automatically from the neutron filename, if not diff --git a/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst index 0dc7a64353cb..177d79595ad2 100644 --- a/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst @@ -17,7 +17,7 @@ This algorithm is primarily used to ease identification using the instrument visualization tools. ChildAlgorithms used -^^^^^^^^^^^^^^^^^^^^ +#################### Uses the :ref:`_algm-Integration` algorithm to sum the spectra. diff --git a/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst b/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst index a3013814e344..cae8dba016e2 100644 --- a/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst @@ -18,7 +18,7 @@ The output workspace can be fed to :ref:`_algm-MaskDetectors` to mask the same spectra on another workspace. ChildAlgorithms used -^^^^^^^^^^^^^^^^^^^^ +#################### Uses the :ref:`_algm-Integration` algorithm to sum the spectra. diff --git a/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst index 325b2d7be7df..c547cae179a7 100644 --- a/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst @@ -23,7 +23,7 @@ a linear background: spectrum, centre, width, height, backgroundintercept & backgroundslope. Subalgorithms used -~~~~~~~~~~~~~~~~~~ +################## FindPeaks uses the :ref:`_algm-SmoothData` algorithm to, well, smooth the data - a necessary step to identify peaks in statistically @@ -31,7 +31,7 @@ fluctuating data. The :ref:`_algm-Fit` algorithm is used to fit candidate peaks. Treating weak peaks vs. high background -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +####################################### FindPeaks uses a more complicated approach to fit peaks if **HighBackground** is flagged. In this case, FindPeak will fit the @@ -43,7 +43,7 @@ function including background and Gaussian by using the previously recorded best background and peak parameters as the starting values. Criteria To Validate Peaks Found -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +################################ FindPeaks finds peaks by fitting a Guassian with background to a certain range in the input histogram. :ref:`_algm-Fit` may not give a correct @@ -56,7 +56,7 @@ are provided as options to validate the result to select the best fit among various starting sigma values. Fit Window -~~~~~~~~~~ +########## If FitWindows is defined, then a peak's range to fit (i.e., x-min and x-max) is confined by this window. @@ -65,7 +65,7 @@ If FitWindows is defined, starting peak centres are NOT user's input, but found by highest value within peak window. (Is this correct???) References -^^^^^^^^^^ +########## #. M.A.Mariscotti, *A method for automatic identification of peaks in the presence of background and its application to spectrum analysis*, diff --git a/Code/Mantid/docs/source/algorithms/Fit-v1.rst b/Code/Mantid/docs/source/algorithms/Fit-v1.rst index 029b345a815c..c4fd9e80cc7d 100644 --- a/Code/Mantid/docs/source/algorithms/Fit-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Fit-v1.rst @@ -10,7 +10,7 @@ Description ----------- Additional properties for a 1D function and a MatrixWorkspace -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################################# If Function defines a one-dimensional function and InputWorkspace is a `MatrixWorkspace `__ the algorithm will have these @@ -27,7 +27,7 @@ additional properties: +------------------+-------------+-----------+-------------------------+---------------------------------------------------------------------+ Overview -~~~~~~~~ +######## This is a generic algorithm for fitting data in a Workspace with a function. The workspace must have the type supported by the algorithm. @@ -68,7 +68,7 @@ which allows all the settings to be specified via its graphical user interface. Setting a simple function -~~~~~~~~~~~~~~~~~~~~~~~~~ +######################### To use a simple function for a fit set its name and initial parameter values using the Function property. This property is a comma separated @@ -99,7 +99,7 @@ A list of the available simple functions can be found `here <:Category:Fit_functions>`__. Setting a composite function -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################ A composite function is a sum of simple functions. It does not have a name. To define a composite function set a number of simple functions in @@ -112,7 +112,7 @@ background might look like this: | ``           name=Gaussian, PeakCentre=7.6, Height=8, Sigma=0.5"`` Setting ties -~~~~~~~~~~~~ +############ Parameters can be tied to other parameters or to a constant. In this case they do not take part in the fitting but are evaluated using the @@ -145,7 +145,7 @@ function 0. Of course all three functions must have a parameter called ``Ties: "f1.Sigma=f2.Sigma=f0.Sigma"`` Setting constraints -~~~~~~~~~~~~~~~~~~~ +################### Parameters can be constrained to be above a lower boundary and/or below an upper boundary. If a constraint is violated a penalty to the fit is @@ -175,13 +175,13 @@ constraints and for ties. For example constrain the parameter "c" of function 1. Fitting to data in a MatrixWorkspace -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#################################### The error values in the input workspace are used to weight the data in the fit. Zero error values are not allowed and are replaced with ones. Output -~~~~~~ +###### Setting the Output property defines the names of the two output workspaces. One of them is a `TableWorkspace `__ with diff --git a/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst b/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst index e81b5a515942..40c7d39e1ccb 100644 --- a/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst @@ -16,12 +16,12 @@ The output `TableWorkspace `__ contains the following columns... Subalgorithms used -^^^^^^^^^^^^^^^^^^ +################## - Fit Treating weak peaks vs. high background -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +####################################### FindPeaks uses a more complicated approach to fit peaks if **HighBackground** is flagged. In this case, FindPeak will fit the @@ -33,7 +33,7 @@ function including background and Gaussian by using the previously recorded best background and peak parameters as the starting values. Criteria To Validate Peaks Found -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################ FindPeaks finds peaks by fitting a Guassian with background to a certain range in the input histogram. :ref:`_algm-Fit` may not give a correct @@ -47,7 +47,7 @@ fitted peak position must be within a short distance to the give one. to select the best fit among various starting sigma values. Fit Window and Peak Range -^^^^^^^^^^^^^^^^^^^^^^^^^ +######################### If FitWindows is defined, then a peak's range to fit (i.e., x-min and x-max) is confined by this window. diff --git a/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst index 1c978aa7511b..6100fcff3fa4 100644 --- a/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst @@ -17,7 +17,7 @@ will be introduced in `Le Bail Fit `__. The second step is realized by algorithm RefinePowderInstrumentParameters. Version -^^^^^^^ +####### Current implementation of FitPowderDiffPeaks is version 2. @@ -25,7 +25,7 @@ Peak Fitting Algorithms ----------------------- Peak Fitting Mode -^^^^^^^^^^^^^^^^^ +################# Fitting mode determines the approach (or algorithm) to fit diffraction peaks. @@ -36,7 +36,7 @@ peaks. fitting will be a one-step minimizer by Levenberg-Marquardt. Starting Values of Peaks' Parameters -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +#################################### 1. "(HKL) & Calculation": the starting values are calculated from each peak's miller index and thermal neutron peak profile formula; @@ -45,7 +45,7 @@ peak's miller index and thermal neutron peak profile formula; Parameter table. Peak-fitting sequence -^^^^^^^^^^^^^^^^^^^^^ +##################### Peaks are fitted from high d-spacing, i.e., lowest possible Miller index, to low d-spacing values. If MinimumHKL is specified, then peak @@ -53,7 +53,7 @@ will be fitted from maximum d-spacing/TOF, to the peak with Miller index as MinimumHKL. Correlated peak profile parameters -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################## If peaks profile parameters are correlated by analytical functions, then the starting values of one peak will be the fitted peak profile @@ -65,7 +65,7 @@ Use Cases Several use cases are listed below about how to use this algorithm. Use case 1: robust fitting -^^^^^^^^^^^^^^^^^^^^^^^^^^ +########################## | ``1. User wants to use the starting values of peaks parameters from input thermal neutron peak parameters such as Alph0, Alph1, and etc. `` | ``2. User specifies the right most peak range and its Miller index`` @@ -73,13 +73,13 @@ Use case 1: robust fitting | ``4. ``\ *``FitPowderDiffPeaks``*\ `` fit peak parameters of each peak from high TOF to low TOF;`` Use Case 2: Confident fitting -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################# | ``1. `` | ``2. `` Use Case 3: Fitting Peak Parameters From Scratch -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################################ This is the extreme case such that @@ -94,7 +94,7 @@ fit. The introduction can be found in the wiki page of :ref:`_algm-LeBailFit`. Example of Working With Other Algorithms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +######################################## *FitPowderDiffPeaks* is designed to work with other algorithms, such *RefinePowderInstrumentParameters*, and *LeBailFit*. See `Le Bail diff --git a/Code/Mantid/docs/source/algorithms/FlatPlateAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/FlatPlateAbsorption-v1.rst index 5a26141e7c31..def365a10756 100644 --- a/Code/Mantid/docs/source/algorithms/FlatPlateAbsorption-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FlatPlateAbsorption-v1.rst @@ -24,7 +24,7 @@ of each element and a numerical integration is carried out using these path lengths over the volume elements. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must have units of wavelength. The `instrument `__ associated with the workspace must be fully diff --git a/Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst b/Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst index 0b37c67f8e6f..feea2a9ed0e3 100644 --- a/Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst @@ -31,7 +31,7 @@ time. It is also enhanced to process the fast frequency sample logs, which can be even faster than chopper frequencies. Workspace to store event splitters -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +################################## An event splitter used in Mantid contains start time, stop time and target workspace. Any data structure that has the above 3 properties can @@ -55,7 +55,7 @@ event splitters that are supported by this algorithm. `TableWorkspace `__ in Mantid. Functionalities -~~~~~~~~~~~~~~~ +############### Here are the types of event filters (i.e., `SplittersWorkspace `__) that can be generated by @@ -80,7 +80,7 @@ this algorithm: +/- tolerance\_v. Parameter: *Centre* -^^^^^^^^^^^^^^^^^^^ +################### The input Boolean parameter *centre* is for filtering by log value(s). If option *centre* is taken, then for each interval, @@ -91,7 +91,7 @@ If option *centre* is taken, then for each interval, It is a shift to left. Parameter: *LogValueTolerance* and *LogValueInterval* -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +##################################################### These two parameters are used to determine the log value intervals for filtering events. @@ -104,7 +104,7 @@ intervals are (min-tol, min-tol+delta), (min-tol+delta, min-tol+2delta), The default value of LogValueTolerance is LogValueInterval devided by 2. About how log value is recorded -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################### SNS DAS records log values upon its changing. The frequency of log sampling is significantly faster than change of the log, i.e., sample @@ -114,7 +114,7 @@ log value changes as step functions. The option to do interpolation is not supported at this moment. Comparison to FilterByLogValue -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################## 1. If the first log value is within the specified range and the first log time is after run star time, FilterByLogValue assumes that the log diff --git a/Code/Mantid/docs/source/algorithms/GeneratePeaks-v1.rst b/Code/Mantid/docs/source/algorithms/GeneratePeaks-v1.rst index 658d25dbac76..a2ae001cd752 100644 --- a/Code/Mantid/docs/source/algorithms/GeneratePeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GeneratePeaks-v1.rst @@ -13,7 +13,7 @@ Generate a workspace by summing over the peak functions. The peaks' parameters are given in a `TableWorkspace `__. Peak Parameters -^^^^^^^^^^^^^^^ +############### Peak parameters must have the following parameters, which are case sensitive in input `TableWorkspace `__ @@ -28,7 +28,7 @@ sensitive in input `TableWorkspace `__ | ``8. chi2`` Output -^^^^^^ +###### | ``Output will include`` | ``1. pure peak`` diff --git a/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst b/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst index 01240671ee0a..37b67d2fd53b 100644 --- a/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst @@ -13,7 +13,7 @@ Retrieves the algorithm history of the workspace and saves it to a Python script file or Python variable. Example usage: -~~~~~~~~~~~~~~ +############## .. code:: python diff --git a/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst index 430109f10ef9..85f41e11bbe4 100644 --- a/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst @@ -32,7 +32,7 @@ single group on :ref:`_algm-DiffractionFocussing`. The alter the grouping in the cal file. Fit for peak offset -~~~~~~~~~~~~~~~~~~~ +################### The algorithm to calculate offset of peaks' positions is to minimize a cost function as @@ -42,7 +42,7 @@ cost function as , which p is the index of a peak whose position is within MinD and MaxD. Spectra to mask -^^^^^^^^^^^^^^^ +############### - Empty spectrum marked as "empty det" @@ -52,7 +52,7 @@ Spectra to mask - Calculated offset exceeds the user-defined maximum offset. Criteria on peaks -^^^^^^^^^^^^^^^^^ +################# The (fitted) peak must meet a series of criteria to be used to fit spectrum's offset. @@ -71,7 +71,7 @@ A peak will not be used if - its z-value on :math:`\frac{\delta d}{d}` is larger than 2.0. Generate fit window -~~~~~~~~~~~~~~~~~~~ +################### - Required parameter: maxWidth. If it is not given, i.e., less or equal to zero, then there won't be any window defined; @@ -97,7 +97,7 @@ to output values reflecting the goodness of fitting of this algorithm to users. Number of spectra that are NOT masked -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +##################################### A spectrum will be masked if it is a dead pixel, has an empty detector or has no peak that can be fit with given peak positions. The @@ -106,7 +106,7 @@ algorithm to find and fit peaks may save some spectrum with relatively much fewer events received, i.e., poorer signal. :math:`\chi^2` of the offset fitting function -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################# The goodness of fit, :math:`\chi^2_{iws}`, of the offset fitting function @@ -117,7 +117,7 @@ is an important measure of fitting quality on each spectrum (indexed as iws). Deviation of highest peaks -~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################## We observed that in some situation, the calibrated peaks' positions of some spectra are far off to the targeted peak positions, while goodness @@ -138,7 +138,7 @@ where :math:`X^{(o)}` is the fitted centre of the highest peak of spectrum i, and :math:`X^{(c)}` is the theoretical centre of this peak. Collective quantities to illustrate goodness of fitting (still in developement) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################################################### Be noticed that the idea of this section is still under development and has not been implemented yet. @@ -159,7 +159,7 @@ the number of unmasked spectra; where :math:`H_{s}` is the height of highest peak of spectrum s. Standard error on offset -~~~~~~~~~~~~~~~~~~~~~~~~ +######################## The offset in unit of d-spacing differs is proportional to peak's position by definition: diff --git a/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst b/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst index 0eddfff0b887..5a9fb01d8f3c 100644 --- a/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst +++ b/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst @@ -92,7 +92,7 @@ Previous Versions ----------------- Version 1 -~~~~~~~~~ +######### The set of spectra to be grouped can be given as a list of either spectrum numbers, detector IDs or workspace indices. The new, summed diff --git a/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst index 109354237b58..3dcb51cca2c0 100644 --- a/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst +++ b/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst @@ -31,14 +31,14 @@ are as given in the property list above. The assumption is that the neutron enters the plate along the normal. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must have units of wavelength. The `instrument `__ associated with the workspace must be fully defined because detector, source & sample position are needed. ChildAlgorithms used -~~~~~~~~~~~~~~~~~~~~ +#################### The :ref:`_algm-FlatPlateAbsorption` algorithm is used to calculate the correction due to the sample itself. diff --git a/Code/Mantid/docs/source/algorithms/He3TubeEfficiency-v1.rst b/Code/Mantid/docs/source/algorithms/He3TubeEfficiency-v1.rst index 3c2cd455c6fa..0d80ebaa050f 100644 --- a/Code/Mantid/docs/source/algorithms/He3TubeEfficiency-v1.rst +++ b/Code/Mantid/docs/source/algorithms/He3TubeEfficiency-v1.rst @@ -32,7 +32,7 @@ workspace. If it is not, the spectra indicies that do not have values will be zeroed in the output workspace. Restrictions on Input Workspace -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################### The input workspace must be in units of wavelength. diff --git a/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst index 27ad4cbf89be..13342980d868 100644 --- a/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst @@ -13,7 +13,7 @@ This algorithm takes a text file (.txt extension) containing two columns and converts it into an MDHistoWorkspace. Details -~~~~~~~ +####### The columns are in the order **signal** then **error**. The file must only contain two columns, these may be separated by any whitespace diff --git a/Code/Mantid/docs/source/algorithms/IntegrateEllipsoids-v1.rst b/Code/Mantid/docs/source/algorithms/IntegrateEllipsoids-v1.rst index 2011f130e085..6bb8840a44b5 100644 --- a/Code/Mantid/docs/source/algorithms/IntegrateEllipsoids-v1.rst +++ b/Code/Mantid/docs/source/algorithms/IntegrateEllipsoids-v1.rst @@ -10,7 +10,7 @@ Description ----------- Overview -~~~~~~~~ +######## This algorithm will integrate disjoint single crystal Bragg peaks by summing the number of raw events in a 3D ellipsoidal peak region in @@ -41,7 +41,7 @@ principal axes to determine the aspect ratio of ellipsoids used for the peak and background regions. Explanation of Inputs -~~~~~~~~~~~~~~~~~~~~~ +##################### - The event data to be integrated is obtained from an ordinary EventWorkspace with an X-axis in time-of-flight, as loaded from a @@ -93,7 +93,7 @@ Explanation of Inputs before setting the integrated intensities. Detailed Algorithm Description -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################## This algorithm will integrate a list of indexed single-crystal diffraction peaks from a PeaksWorkspace, using events from an diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst index 251330537377..6b3dfe3fb0a7 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst @@ -13,7 +13,7 @@ This algorithm performs integration of single-crystal peaks within a radius (with optional background subtraction) in reciprocal space. Inputs -~~~~~~ +###### The algorithms takes two input workspaces: @@ -26,7 +26,7 @@ The algorithms takes two input workspaces: with the integrated intensity and error found being filled in. Calculations -~~~~~~~~~~~~ +############ Integration is performed by summing the weights of each MDEvent within the provided radii. Errors are also summed in quadrature. @@ -55,7 +55,7 @@ the provided radii. Errors are also summed in quadrature. the peak and the background area. Background Subtraction -^^^^^^^^^^^^^^^^^^^^^^ +###################### The background signal within PeakRadius is calculated by scaling the background signal density in the shell to the volume of the peak: @@ -76,7 +76,7 @@ with the errors summed in quadrature: :math:`\sigma I_{corr}^2 = \sigma I_{peak}^2 + \sigma I_{bg}^2` If BackgroundInnerRadius is Omitted -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +################################### If BackgroundInnerRadius is left blank, then **BackgroundInnerRadius** = **PeakRadius**, and the integration is as follows: @@ -86,7 +86,7 @@ If BackgroundInnerRadius is left blank, then **BackgroundInnerRadius** = IntegratePeaksMD\_graph2.png Sample Usage -~~~~~~~~~~~~ +############ .. code:: python diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst index 251330537377..6b3dfe3fb0a7 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst @@ -13,7 +13,7 @@ This algorithm performs integration of single-crystal peaks within a radius (with optional background subtraction) in reciprocal space. Inputs -~~~~~~ +###### The algorithms takes two input workspaces: @@ -26,7 +26,7 @@ The algorithms takes two input workspaces: with the integrated intensity and error found being filled in. Calculations -~~~~~~~~~~~~ +############ Integration is performed by summing the weights of each MDEvent within the provided radii. Errors are also summed in quadrature. @@ -55,7 +55,7 @@ the provided radii. Errors are also summed in quadrature. the peak and the background area. Background Subtraction -^^^^^^^^^^^^^^^^^^^^^^ +###################### The background signal within PeakRadius is calculated by scaling the background signal density in the shell to the volume of the peak: @@ -76,7 +76,7 @@ with the errors summed in quadrature: :math:`\sigma I_{corr}^2 = \sigma I_{peak}^2 + \sigma I_{bg}^2` If BackgroundInnerRadius is Omitted -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +################################### If BackgroundInnerRadius is left blank, then **BackgroundInnerRadius** = **PeakRadius**, and the integration is as follows: @@ -86,7 +86,7 @@ If BackgroundInnerRadius is left blank, then **BackgroundInnerRadius** = IntegratePeaksMD\_graph2.png Sample Usage -~~~~~~~~~~~~ +############ .. code:: python diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst index c55037a4c955..6b1c63ed8ff6 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst @@ -62,7 +62,7 @@ The algorithm will generate warning. There are three main warning to know about. Off the Image Edge -~~~~~~~~~~~~~~~~~~ +################## The algorithm will warn about unreachable peaks (off the image). This may be because the peaks detected were off the edge of the detector, or @@ -70,7 +70,7 @@ because the image was cropped in BinMD in such a way that that part of the detector/TOF space is no longer accessible. No Cluster Corresponding to Peak -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +################################ This is because the input `PeaksWorkspace `__ has peaks that do not align with peaks in the image. The error could either be on @@ -81,7 +81,7 @@ Normalization input parameters are not so low that they are treating genuine peaks in the image as background. Multiple Peaks Assigned to the same Cluster -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################################### This means overlapping peaks in the image. This is a problem because both peaks will be given an integrated value that is the sum of the diff --git a/Code/Mantid/docs/source/algorithms/Integration-v1.rst b/Code/Mantid/docs/source/algorithms/Integration-v1.rst index 0b5dd93b0531..e618c65e9715 100644 --- a/Code/Mantid/docs/source/algorithms/Integration-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Integration-v1.rst @@ -17,7 +17,7 @@ spectrum has been integrated. By default, the entire range is integrated and all spectra are included. Optional properties -~~~~~~~~~~~~~~~~~~~ +################### If only a portion of the workspace should be integrated then the optional parameters may be used to restrict the range. @@ -35,7 +35,7 @@ falls outside any values set will not contribute to the output workspace. EventWorkspaces -~~~~~~~~~~~~~~~ +############### If an `EventWorkspace `__ is used as the input, the output will be a `MatrixWorkspace `__. diff --git a/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst b/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst index f75438544d74..0c748d976e97 100644 --- a/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst +++ b/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst @@ -41,7 +41,7 @@ inversely proportional to the distance of the output bin center to the respective input bin data points. Example Rebin param strings -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################### The same syntax as for :ref:`_algm-Rebin` diff --git a/Code/Mantid/docs/source/algorithms/LeBailFit-v1.rst b/Code/Mantid/docs/source/algorithms/LeBailFit-v1.rst index 236699d46b65..3d0945b19056 100644 --- a/Code/Mantid/docs/source/algorithms/LeBailFit-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LeBailFit-v1.rst @@ -15,10 +15,10 @@ will refine a specified set of the powder instrumental profile parameters with a previous refined background model. Peak profile function for fit -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################# Back to back exponential convoluted with pseudo-voigt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +##################################################### Here is the list of the peak profile function supported by this algorithm. @@ -30,7 +30,7 @@ algorithm. - pseudo-voigt parameters: Sig0, Sig1, Sig2, Gam0, Gam1, Gam2 Thermal neutron back to back exponential convoluted with pseudo-voigt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +##################################################################### Here is the list of the peak profile function supported by this algorithm. @@ -44,14 +44,14 @@ algorithm. - pseudo-voigt parameters: Sig0, Sig1, Sig2, Gam0, Gam1, Gam2 Optimization -~~~~~~~~~~~~ +############ *LeBailFit* supports a tailored simulated annealing optimizer (using Monte Carlo random walk algorithm). In future, regular minimizes in GSL library might be supported. Supported functionalities -~~~~~~~~~~~~~~~~~~~~~~~~~ +######################### | ``* LeBailFit: fit profile parameters by Le bail algorithm; `` | ``* Calculation: pattern calculation by Le bail algorithm; `` @@ -59,7 +59,7 @@ Supported functionalities | ``* RefineBackground: refine background parameters`` Further Information -~~~~~~~~~~~~~~~~~~~ +################### See `Le Bail Fit `__. diff --git a/Code/Mantid/docs/source/algorithms/Load-v1.rst b/Code/Mantid/docs/source/algorithms/Load-v1.rst index 1f2774d0144e..5f45da409026 100644 --- a/Code/Mantid/docs/source/algorithms/Load-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Load-v1.rst @@ -17,7 +17,7 @@ child algorithm with the exception that it logs messages to the Mantid logger. Specific Load Algorithm Properties -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################## Each specific loader will have its own properties that are appropriate to it: SpectrumMin and SpectrumMax for ISIS RAW/NeXuS, FilterByTof\_Min diff --git a/Code/Mantid/docs/source/algorithms/LoadDetectorsGroupingFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadDetectorsGroupingFile-v1.rst index 89bf056bd018..e1956d832cc3 100644 --- a/Code/Mantid/docs/source/algorithms/LoadDetectorsGroupingFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadDetectorsGroupingFile-v1.rst @@ -18,7 +18,7 @@ XML File Format Extension: .xml Parameters -~~~~~~~~~~ +########## - "instrument": optional attribute of node 'detector-grouping'. It must be valid instrument name. If "instrument" is not defined, only tag diff --git a/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst index 752708f9c551..0fd7e1165ece 100644 --- a/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst @@ -20,7 +20,7 @@ Sample logs, such as motor positions or e.g. temperature vs time, are also loaded using the :ref:`_algm-LoadNexusLogs` child algorithm. Optional properties -~~~~~~~~~~~~~~~~~~~ +################### If desired, you can filter out the events at the time of loading, by specifying minimum and maximum time-of-flight values. This can speed up @@ -43,7 +43,7 @@ by the speed-up in avoid re-allocating, so the net result is smaller memory footprint and approximately the same loading time. Veto Pulses -^^^^^^^^^^^ +########### Veto pulses can be filtered out in a separate step using :ref:`_algm-FilterByLogValue`: diff --git a/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v1.rst index e4e0c916f351..097ff5b2d003 100644 --- a/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v1.rst @@ -17,7 +17,7 @@ time-of-flight. Since it is an `EventWorkspace `__, it can be rebinned to finer bins with no loss of data. Optional properties -~~~~~~~~~~~~~~~~~~~ +################### Specific pulse ID and mapping files can be specified if needed; these are guessed at automatically from the neutron filename, if not diff --git a/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v2.rst b/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v2.rst index 2c698d89c792..ce91f92202a1 100644 --- a/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v2.rst +++ b/Code/Mantid/docs/source/algorithms/LoadEventPreNexus-v2.rst @@ -17,7 +17,7 @@ time-of-flight. Since it is an `EventWorkspace `__, it can be rebinned to finer bins with no loss of data. Optional properties -~~~~~~~~~~~~~~~~~~~ +################### Specific pulse ID and mapping files can be specified if needed; these are guessed at automatically from the neutron filename, if not diff --git a/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst index 565442f9c3d1..9da459786379 100644 --- a/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst @@ -14,7 +14,7 @@ This algorithm is to import Fullprof .irf file (peak parameters) and which serve as the inputs for algorithm LeBailFit. Format of Instrument parameter TableWorkspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################################# Instrument parameter TableWorkspace contains all the peak profile parameters imported from Fullprof .irf file. @@ -28,7 +28,7 @@ Each row in TableWorkspace corresponds to one profile parameter. Columns include Name, Value, FitOrTie, Min, Max and StepSize. Format of reflection TableWorkspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### Each row of this workspace corresponds to one diffraction peak. The information contains the peak's Miller index and (local) peak profile diff --git a/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst index e3e64cc63f99..8cad6eaa038f 100644 --- a/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst @@ -18,7 +18,7 @@ necessary to call LoadLiveData directly.** LoadLiveData\_flow.png Data Processing -~~~~~~~~~~~~~~~ +############### - Each time LoadLiveData is called, a chunk of data is loaded from the `LiveListener `__. @@ -29,7 +29,7 @@ Data Processing - You have two options on how to process this workspace: Processing with an Algorithm -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################ - Specify the name of the algorithm in the *ProcessingAlgorithm* property. @@ -43,7 +43,7 @@ Processing with an Algorithm - The algorithm is then run, and its OutputWorkspace is saved. Processing with a Python Script -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################### - Specify a python script in the *ProcessingScript* property. @@ -59,7 +59,7 @@ Processing with a Python Script script. Data Accumulation -~~~~~~~~~~~~~~~~~ +################# - The *AccumulationMethod* property specifies what to do with each chunk. @@ -72,7 +72,7 @@ Data Accumulation appended to the output workspace. A Warning About Events -^^^^^^^^^^^^^^^^^^^^^^ +###################### Beware! If you select *PreserveEvents* and your processing keeps the data as `EventWorkspaces `__, you may end up creating @@ -82,7 +82,7 @@ the list gets bigger (Order of N\*log(N)). This could cause Mantid to run very slowly or to crash due to lack of memory. Post-Processing Step -~~~~~~~~~~~~~~~~~~~~ +#################### - Optionally, you can specify some processing to perform *after* accumulation. diff --git a/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst index 59118c0a744e..575313746ce7 100644 --- a/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst @@ -14,7 +14,7 @@ optional 'spectrum' properties (i.e. a range and a list) together if so desired. Load ISIS log file(s) -~~~~~~~~~~~~~~~~~~~~~ +##################### Assumes that a log file originates from a PC (not VMS) environment, i.e. the log files to be loaded are assumed to have the extension .txt. Its @@ -25,13 +25,13 @@ columns, where the first column consists of data-time strings of the ISO that may contain spaces. Parent algorithm -~~~~~~~~~~~~~~~~ +################ LoadLog is also a child algorithm of :ref:`_algm-LoadRaw`, i.e. it gets called whenever LoadRaw is executed. Load SNS text log file -~~~~~~~~~~~~~~~~~~~~~~ +###################### If the file is determined to be a SNS text log file it should be of the form diff --git a/Code/Mantid/docs/source/algorithms/LoadMask-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMask-v1.rst index 139d968f74fe..400859c639d5 100644 --- a/Code/Mantid/docs/source/algorithms/LoadMask-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadMask-v1.rst @@ -24,7 +24,7 @@ File Format ----------- XML File Format -^^^^^^^^^^^^^^^ +############### Example 1: @@ -41,7 +41,7 @@ Example 1: | `` ``\ ISIS File Format -^^^^^^^^^^^^^^^^ +################ Example 2: diff --git a/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst index 823bd2ac0edb..7a6d82af9b6b 100644 --- a/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst @@ -13,7 +13,7 @@ The Algorithm is very similar to :ref:`_algm-LoadLog` except that the source of the data is a Muon Nexus file. Parent algorithm -~~~~~~~~~~~~~~~~ +################ LoadMuonLog is also a child algorithm of :ref:`_algm-LoadMuonNexus`, i.e. it gets called whenever diff --git a/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v1.rst index f1d542bead72..cf38f386f1fd 100644 --- a/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v1.rst @@ -27,27 +27,27 @@ loaded. Muon instruments. Time series data -~~~~~~~~~~~~~~~~ +################ The log data in the Nexus file (NX\_LOG sections) will be loaded as TimeSeriesProperty data within the workspace. Time is stored as seconds from the Unix epoch. Errors -~~~~~~ +###### The error for each histogram count is set as the square root of the number of counts. Time bin data -~~~~~~~~~~~~~ +############# The *corrected\_times* field of the Nexus file is used to provide time bin data and the bin edge values are calculated from these bin centre times. Multiperiod data -~~~~~~~~~~~~~~~~ +################ To determine if a file contains data from more than one period the field *switching\_states* is read from the Nexus file. If this value is @@ -56,7 +56,7 @@ the data. In this case the :math:`N_s` spectra in the *histogram\_data* field are split with :math:`N_s/N_p` assigned to each period. Dead times and detector grouping -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +################################ Muon Nexus v1 files might contain dead time and detector grouping informationl. These are loaded as TableWorkspaces of the format accepted @@ -66,7 +66,7 @@ multi-period data workspace groups might be returned, if information in the Nexus files contains this information for each period. ChildAlgorithms used -~~~~~~~~~~~~~~~~~~~~ +#################### The ChildAlgorithms used by LoadMuonNexus are: diff --git a/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v2.rst b/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v2.rst index 078ed70130f7..fdc90996e812 100644 --- a/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v2.rst +++ b/Code/Mantid/docs/source/algorithms/LoadMuonNexus-v2.rst @@ -27,27 +27,27 @@ loaded. Muon instruments. Time series data -~~~~~~~~~~~~~~~~ +################ The log data in the Nexus file (NX\_LOG sections) will be loaded as TimeSeriesProperty data within the workspace. Time is stored as seconds from the Unix epoch. Errors -~~~~~~ +###### The error for each histogram count is set as the square root of the number of counts. Time bin data -~~~~~~~~~~~~~ +############# The *corrected\_times* field of the Nexus file is used to provide time bin data and the bin edge values are calculated from these bin centre times. Multiperiod data -~~~~~~~~~~~~~~~~ +################ To determine if a file contains data from more than one period the field *switching\_states* is read from the Nexus file. If this value is @@ -56,7 +56,7 @@ the data. In this case the :math:`N_s` spectra in the *histogram\_data* field are split with :math:`N_s/N_p` assigned to each period. ChildAlgorithms used -~~~~~~~~~~~~~~~~~~~~ +#################### The ChildAlgorithms used by LoadMuonNexus are: @@ -72,7 +72,7 @@ Previous Versions ----------------- Version 1 -~~~~~~~~~ +######### Version 1 supports the loading version 1.0 of the muon nexus format. This is still in active use, if the current version of LoadMuonNexus diff --git a/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst index d03cb66f9f4d..d5e0d349e2fb 100644 --- a/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst @@ -26,7 +26,7 @@ If the saved data has a reference to an XML file defining instrument geometry this will be read. Time series data -~~~~~~~~~~~~~~~~ +################ The log data in the Nexus file (NX\_LOG sections) is loaded as TimeSeriesProperty data within the workspace. Time is stored as seconds @@ -34,7 +34,7 @@ from the Unix epoch. Only floating point logs are stored and loaded at present. Child algorithms used -~~~~~~~~~~~~~~~~~~~~~ +##################### The Child Algorithms used by LoadMuonNexus are: diff --git a/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst b/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst index 35dd2db394a1..f1f5e06164c2 100644 --- a/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst +++ b/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst @@ -19,7 +19,7 @@ normalisation of any kind). The errors, currently assumed Gaussian, will be set to be the square root of the number of counts in the bin. Optional properties -~~~~~~~~~~~~~~~~~~~ +################### If only a portion of the data in the `RAW `__ file is required, then the optional 'spectrum' properties can be set before @@ -28,7 +28,7 @@ provided are checked and the algorithm will fail if they are found to be outside the limits of the dataset. Multiperiod data -~~~~~~~~~~~~~~~~ +################ If the RAW file contains multiple periods of data this will be detected and the different periods will be output as separate workspaces, which @@ -39,7 +39,7 @@ OutputWorkspace\_period). Each workspace will share the same set for a multiperiod dataset, then they will ignored. Subalgorithms used -~~~~~~~~~~~~~~~~~~ +################## LoadRaw runs the following algorithms as child algorithms to populate aspects of the output `Workspace `__: diff --git a/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst index da017999781a..7e8ba572cf76 100644 --- a/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst @@ -23,7 +23,7 @@ with `MDEventWorkspace `__ produced by Mantid algorithms. Notes on Horace SQW files -~~~~~~~~~~~~~~~~~~~~~~~~~ +######################### Sqw objects comes in two flavours: @@ -45,7 +45,7 @@ as to use private methods of sqw objects. DND-type object can not be currently read or understood by Mantid. Structure of sqw class with remarks on what is currently used and what is ignored -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +################################################################################# String started by: @@ -147,7 +147,7 @@ data.s is normalized by the number of pixels, as is the variance data.e. For those elements where data.npix==0, data.s=0 and data.e=0 General notes about SQW file assumptions -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +######################################## Parts of the code were written with the idea of generalising functionality at a later stage. However, we can now assume that: diff --git a/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst b/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst index edf014eefb6a..d8cbcf8fd679 100644 --- a/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst @@ -27,7 +27,7 @@ Related Algorithms ------------------ RemoveBins -~~~~~~~~~~ +########## :ref:`_algm-RemoveBins` can work in several ways, if the bins are at the edges of the workspace they will be removed, and that will in many diff --git a/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst b/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst index 335f7daa95e5..07dcb8c88703 100644 --- a/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst @@ -18,7 +18,7 @@ Related Algorithms ------------------ MaskBins -~~~~~~~~ +######## :ref:`_algm-MaskBins` masks bins in a workspace. Masked bins should properly be regarded as having been completely removed from the diff --git a/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst index ab4096a56ce7..c05d22988717 100644 --- a/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst @@ -21,7 +21,7 @@ spectrum numbers, detector IDs or workspace indices. The list should be set against the appropriate property. Mask Detectors According To Instrument -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +###################################### If the input MaskedWorkspace is not a SpecialWorkspace2D object, this algorithm will check every detectors in input MaskedWorkspace's @@ -29,7 +29,7 @@ Instrument. If the detector is masked, then the corresponding detector will be masked in Workspace. Mask Detectors According to Masking Workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################################# If the input MaskedWorkspace is a `MaskWorkspace `__ object, i.e., masking workspace, then the algorithm will mask @@ -37,7 +37,7 @@ Workspace's detector according to the histogram data of the SpecialWorkspace2D object Definition of Mask -~~~~~~~~~~~~~~~~~~ +################## - If a pixel is masked, it means that the data from this pixel won't be used. In the masking workspace (i.e., @@ -49,7 +49,7 @@ Definition of Mask is 0. About Input Parameters -~~~~~~~~~~~~~~~~~~~~~~ +###################### :ref:`_algm-MaskDetectors` supports various format of input to mask detectors, including @@ -63,7 +63,7 @@ mask detectors, including extracted from this workspace) Rules -^^^^^ +##### Here are the rules for input information for masking @@ -78,7 +78,7 @@ Here are the rules for input information for masking | ``  will be combined by the ``\ *``plus``*\ `` operation.`` Operations Involved in Masking -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################## There are 2 operations to mask a detector and thus spectrum related @@ -87,7 +87,7 @@ There are 2 operations to mask a detector and thus spectrum related | ``2. Clear the data associated with the spectrum with detectors that are masked;`` Implementation -~~~~~~~~~~~~~~ +############## In the plan, the workflow to mask detectors should be @@ -96,7 +96,7 @@ In the plan, the workflow to mask detectors should be | ``3. Clear data on all spectra, which have at least one detector that is masked.`` Concern -~~~~~~~ +####### - Speed! diff --git a/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst b/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst index ee790963b387..a965b6c8f146 100644 --- a/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst @@ -18,7 +18,7 @@ A detector is considered to be contained it its central location point is contained within the shape. ChildAlgorithms used -~~~~~~~~~~~~~~~~~~~~ +#################### MaskDetectorsInShape runs the following algorithms as child algorithms: diff --git a/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst b/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst index 9297d82cacdb..3cf4e8c098c8 100644 --- a/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst @@ -38,7 +38,7 @@ fail the tests are masked and those that pass them are assigned a single positive value. ChildAlgorithms used -~~~~~~~~~~~~~~~~~~~~ +#################### Uses the :ref:`_algm-SolidAngle`, :ref:`_algm-Integration` and :ref:`_algm-ConvertToDistribution` algorithms. diff --git a/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst b/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst index 0f7c9fb39480..e3f46cbedb10 100644 --- a/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst @@ -15,7 +15,7 @@ output workspace will cover the entire range of all the input workspaces, with the largest bin widths used in regions of overlap. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspaces must contain histogram data with the same number of spectra and matching units and instrument name in order for the @@ -36,10 +36,10 @@ Other than this it is currently left to the user to ensure that the combination of the workspaces is a valid operation. Processing Group Workspaces -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################### Multi-period Group Workspaces -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################# Group workspaces will be merged respecting the periods within each group. For example if you have two multiperiod group workspaces A and B @@ -51,14 +51,14 @@ Therefore, merging is conducted such that A\_1 + B\_1 = C\_1 and A\_2 + B\_2 = C\_2. Group Workspaces that are not multiperiod -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +######################################### If group workspaces are provided that are not multi-period, this algorithm will merge across all nested workspaces, to give a singe output matrix workspace. ChildAlgorithms used -^^^^^^^^^^^^^^^^^^^^ +#################### The :ref:`_algm-Rebin` algorithm is used, if neccessary, to put all the input workspaces onto a common binning. diff --git a/Code/Mantid/docs/source/algorithms/MonteCarloAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/MonteCarloAbsorption-v1.rst index e1ac15078473..f70785bfe414 100644 --- a/Code/Mantid/docs/source/algorithms/MonteCarloAbsorption-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MonteCarloAbsorption-v1.rst @@ -33,7 +33,7 @@ Known limitations scatter point will fail. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must have units of wavelength. The `instrument `__ associated with the workspace must be fully diff --git a/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst b/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst index f758a266720d..2314322fe865 100644 --- a/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst @@ -24,7 +24,7 @@ Specifically: resulting workspace. Workflow -~~~~~~~~ +######## .. figure:: /images/MuonWorkflow.png :alt: MuonWorkflow.png diff --git a/Code/Mantid/docs/source/algorithms/MuscatData-v1.rst b/Code/Mantid/docs/source/algorithms/MuscatData-v1.rst index 294620d9fbe2..b1743f788246 100644 --- a/Code/Mantid/docs/source/algorithms/MuscatData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MuscatData-v1.rst @@ -16,7 +16,7 @@ multiple scattering can be procedure can be found in the `modes manual `__. References -^^^^^^^^^^ +########## #. M W Johnson, AERE Report R7682 (1974) diff --git a/Code/Mantid/docs/source/algorithms/MuscatFunc-v1.rst b/Code/Mantid/docs/source/algorithms/MuscatFunc-v1.rst index d58fbb05a99d..fd0c33089825 100644 --- a/Code/Mantid/docs/source/algorithms/MuscatFunc-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MuscatFunc-v1.rst @@ -17,7 +17,7 @@ the `modes manual `__. References -^^^^^^^^^^ +########## #. M W Johnson, AERE Report R7682 (1974) diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst index 281eed682217..07f02af1d470 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst @@ -27,7 +27,7 @@ property to index into the **proton\_charge\_by\_period** log data array property. EventWorkspaces -~~~~~~~~~~~~~~~ +############### If the input workspace is an `EventWorkspace `__, then the output will be as well. Weighted events are used to scale by the diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst index de5e3e1a559e..a8650d2adf1d 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst @@ -26,7 +26,7 @@ Prerequisites ------------- The Input Workspace -~~~~~~~~~~~~~~~~~~~ +################### #. The input workspace must be a MatrixWorkspace #. The input workspace must have X-units of Wavelength, run @@ -37,10 +37,10 @@ The Input Workspace if it is not already histogrammed. The Instrument Definition File -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################## Background -^^^^^^^^^^ +########## In brief, the components in the IDF file form a tree structure. Detectors and Instruments are both types of component. Detectors are @@ -57,7 +57,7 @@ against the detector, and pick up defaults from the bank, or instrument if they have been specified there. Recommended Working -^^^^^^^^^^^^^^^^^^^ +################### The IDF is intended to be a definitive description of the components in the instrument at any time. This should be the most generic form of the @@ -78,7 +78,7 @@ parameter files over the top of an existing workspace using :ref:`_algm-LoadParameterFile`. Examples -^^^^^^^^ +######## Applying a LinearFunction to the whole instrument, hard-coded with A1=2 and A0=1. Fictional instrument is called basic\_rect. diff --git a/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst index 008cd4d41d2c..556c8ae4b54b 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst @@ -10,7 +10,7 @@ Description ----------- Bin-by-bin mode -~~~~~~~~~~~~~~~ +############### In this, the default scenario, each spectrum in the workspace is normalised on a bin-by-bin basis by the monitor spectrum given. The @@ -33,7 +33,7 @@ is rebinned internally to match each data spectrum prior to doing the normalisation. Normalisation by integrated count mode -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +###################################### This mode is used if one or both of the relevant 'IntegrationRange' optional parameters are set. If either is set to a value outside the @@ -46,12 +46,12 @@ place, meaning that the output values in the output workspace are technically dimensionless. Restrictions on the input workspace -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +################################### The data must be histogram, non-distribution data. Child Algorithms used -~~~~~~~~~~~~~~~~~~~~~ +##################### The :ref:`_algm-ExtractSingleSpectrum` algorithm is used to pull out the monitor spectrum if it's part of the InputWorkspace or diff --git a/Code/Mantid/docs/source/algorithms/PDFFourierTransform-v1.rst b/Code/Mantid/docs/source/algorithms/PDFFourierTransform-v1.rst index b00a31d4eb6b..1c48a83e7d43 100644 --- a/Code/Mantid/docs/source/algorithms/PDFFourierTransform-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PDFFourierTransform-v1.rst @@ -20,7 +20,7 @@ MomentumTransfer and d-spacing. **Note:** All other forms are calculated by transforming :math:`G(r)`. Output Options -^^^^^^^^^^^^^^ +############## G(r) '''' diff --git a/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst b/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst index 5a8b4da13abb..5c50b3ba11e7 100644 --- a/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst @@ -44,7 +44,7 @@ with the following parameters filled in: BackgroundOuterRadius Sample Usage -~~~~~~~~~~~~ +############ .. code:: python diff --git a/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst index 202bcfe09d7c..5540ec0ed592 100644 --- a/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst @@ -47,7 +47,7 @@ output table contain the names of the data sources (files or workspaces). Output workspace format -~~~~~~~~~~~~~~~~~~~~~~~ +####################### The output workspace is a table in which rows correspond to the spectra in the order they (spectra) appear in the Input property. The first diff --git a/Code/Mantid/docs/source/algorithms/Plus-v1.rst b/Code/Mantid/docs/source/algorithms/Plus-v1.rst index ea3399c82612..fbaf5a5a2fbc 100644 --- a/Code/Mantid/docs/source/algorithms/Plus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Plus-v1.rst @@ -14,7 +14,7 @@ Description {{BinaryOperation|verb=added|prep=to|symbol=+}} EventWorkspace note -~~~~~~~~~~~~~~~~~~~ +################### For `EventWorkspaces `__, the event lists at each workspace index are concatenated to create the output event list at the diff --git a/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst b/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst index 83ea1ffdcac6..a00b257fcaa8 100644 --- a/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst @@ -13,7 +13,7 @@ This algorithm sums two `MDHistoWorkspaces `__ or merges two `MDEventWorkspaces `__ together. MDHistoWorkspaces -~~~~~~~~~~~~~~~~~ +################# - **MDHistoWorkspace + MDHistoWorkspace** @@ -25,14 +25,14 @@ MDHistoWorkspaces MDHistoWorkspace. The squares of errors are summed. MDEventWorkspaces -~~~~~~~~~~~~~~~~~ +################# This algorithm operates similary to calling Plus on two `EventWorkspaces `__: it combines the events from the two workspaces together to form one large workspace. Note for file-backed workspaces -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################### The algorithm uses :ref:`_algm-CloneMDWorkspace` to create the output workspace, except when adding in place (e.g. :math:`A = A + B` ). diff --git a/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst index b9c0853dc378..39197f3e490b 100644 --- a/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst @@ -29,7 +29,7 @@ Vanadium spectrum using :ref:`_algm-SmoothData` prior to using it in this algorithm. Valid input workspaces -~~~~~~~~~~~~~~~~~~~~~~ +###################### The input workspaces have to have the following in order to be valid inputs for this algorithm. diff --git a/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst index 310220e2b07a..733477df1700 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst @@ -41,7 +41,7 @@ strictly the same, auto-correlation and peak detection could be done only one for all the data. Data manager -~~~~~~~~~~~~ +############ A MatrixWorkspace is created to store all the information about data-files and the future workspace needed during the analysis. The @@ -64,7 +64,7 @@ stored information are: ``detected peak information are stored `` POLDI setup manager -~~~~~~~~~~~~~~~~~~~ +################### For each acquisition file, the IDF are loaded: @@ -83,10 +83,10 @@ Therefore each POLDI setup are loaded only once and shared between the different data files. Analysis steps -~~~~~~~~~~~~~~ +############## Loading the data -^^^^^^^^^^^^^^^^ +################ Each data-file is loaded on a 2DWorkspace. The associated log and setup information are loaded in dedicated workspace as specified in the @@ -142,7 +142,7 @@ condition. | ``                     PoldiDeadWires      = sample_dead_wires_ws)`` Loading POLDI parameters -^^^^^^^^^^^^^^^^^^^^^^^^ +######################## While loading the data, the different needed setup have been store in a dedicated workspace. @@ -174,7 +174,7 @@ etc...) are extracted and stores in a dedicated workspace. | ``             PoldiIPP       = ipp_ipp_data)`` Pre-analyzing data -^^^^^^^^^^^^^^^^^^ +################## In order to setup the 2D fit to analyze the data, some information need to be extracted from the file, such as an idea of the peaks position. diff --git a/Code/Mantid/docs/source/algorithms/PredictFractionalPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/PredictFractionalPeaks-v1.rst index 2690ec39b4da..218668b39b0f 100644 --- a/Code/Mantid/docs/source/algorithms/PredictFractionalPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PredictFractionalPeaks-v1.rst @@ -22,7 +22,7 @@ been INDEXED by THIS MATRIX when the new peaks are not created from a range of h ,k, and l values Example usage -~~~~~~~~~~~~~ +############# from mantidsimple import \* PeaksWrkSpace=mtd["PeaksQa"] diff --git a/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst index 9cc4b010a6f8..70dc9d6f45c2 100644 --- a/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst @@ -27,7 +27,7 @@ The parameters of WavelengthMin/WavelengthMax also limit the peaks attempted to those that can be detected/produced by your instrument. Using HKLPeaksWorkspace -~~~~~~~~~~~~~~~~~~~~~~~ +####################### If you specify the HKLPeaksWorkspace parameter, then the algorithm will use the list of HKL in that workspace as the starting point of HKLs, diff --git a/Code/Mantid/docs/source/algorithms/ProcessBackground-v1.rst b/Code/Mantid/docs/source/algorithms/ProcessBackground-v1.rst index 3148a929baf1..50e82ce4710e 100644 --- a/Code/Mantid/docs/source/algorithms/ProcessBackground-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ProcessBackground-v1.rst @@ -13,7 +13,7 @@ The algorithm ProcessBackground() provides several functions for user to process background to prepare Le Bail Fit. Simple Remove Peaks -^^^^^^^^^^^^^^^^^^^ +################### This algorithm is designed for refining the background based on the assumption that the all peaks have been fitted reasonably well. Then by @@ -24,7 +24,7 @@ An arbitrary background function can be fitted against this background by standard optimizer. Automatic Background Points Selection -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +##################################### This feature is designed to select many background points with user's simple input. User is required to select only a few background points in @@ -35,7 +35,7 @@ Examples -------- Selecting background -^^^^^^^^^^^^^^^^^^^^ +#################### Here is a good example to select background points from a powder diffraction pattern by calling ProcessBackground() in a self-consistent diff --git a/Code/Mantid/docs/source/algorithms/Q1D-v2.rst b/Code/Mantid/docs/source/algorithms/Q1D-v2.rst index 737da30783f8..885919104dad 100644 --- a/Code/Mantid/docs/source/algorithms/Q1D-v2.rst +++ b/Code/Mantid/docs/source/algorithms/Q1D-v2.rst @@ -10,7 +10,7 @@ Description ----------- Q Unit Conversion -~~~~~~~~~~~~~~~~~ +################# The equation for :math:`Q` as function of wavelength, :math:`\lambda`, and neglecting gravity, is @@ -35,7 +35,7 @@ neutrons are all travelling in horizontal at sample, and that :math:`x=y=0` would be beam centre at :math:`\lambda = 0`). Normalized Intensity -~~~~~~~~~~~~~~~~~~~~ +#################### This `algorithm `__ takes a workspace of number of neutron counts against `wavelength `__ and creates a workspace of cross @@ -92,7 +92,7 @@ quoted in 1/cm note that conversion to a cross section requires scaling by an `instrument `__ dependent absolute units constant. Resolution and Cutoffs -~~~~~~~~~~~~~~~~~~~~~~ +###################### There are two sources of uncertainty in the intensity: the statistical (counting) error and the finite size of the bins, i.e. both time bins @@ -142,7 +142,7 @@ by altering :math:`Q{min}` and the binning scheme.* 467-478 `__. Variations on applying the normalization -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +######################################## It is possible to divide the input workspace by the WavelenghAdj and PixelAdj workspaces prior to calling this algorithm. The results will be @@ -156,7 +156,7 @@ Depending on the input and output bins there could be a significant difference in CPU time required by these two methods. References -~~~~~~~~~~ +########## Calculation of Q is from Seeger, P. A. and Hjelm, R. P. Jr, "Small-Angle Neutron Scattering at Pulsed Spallation Sources" (1991) J. Appl **24** @@ -166,7 +166,7 @@ Previous Versions ----------------- Version 1 -~~~~~~~~~ +######### Before July 2011 the intensity was calculated with an equation like the following: @@ -187,7 +187,7 @@ The error was calculation did not include the errors due the normalization or any corrections. Properties -^^^^^^^^^^ +########## +---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ | Order | Name | Direction | Type | Default | Description | diff --git a/Code/Mantid/docs/source/algorithms/Rebin-v1.rst b/Code/Mantid/docs/source/algorithms/Rebin-v1.rst index 6acb798b2106..77dc49f7717e 100644 --- a/Code/Mantid/docs/source/algorithms/Rebin-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Rebin-v1.rst @@ -27,7 +27,7 @@ bins cannot be less than 25% or more than 125% of the width that was specified. Example Rebin param strings -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################### -0.0001 From min(TOF) to max(TOF) among all events in Logarithmic bins of @@ -40,7 +40,7 @@ Example Rebin param strings From 0 rebin in steps of 100 to 10,000 then steps of 200 to 20,000 For EventWorkspaces -~~~~~~~~~~~~~~~~~~~ +################### If the input is an `EventWorkspace `__ and the "Preserve Events" property is True, the rebinning is performed in place, and only @@ -54,7 +54,7 @@ and all Y data will be computed immediately. All event-specific data is lost at that point. For Data-Point Workspaces -~~~~~~~~~~~~~~~~~~~~~~~~~ +######################### If the input workspace contains data points, rather than histograms, then Rebin will automatically use the @@ -63,7 +63,7 @@ then Rebin will automatically use the the rebinning has taken place. FullBinsOnly option -~~~~~~~~~~~~~~~~~~~ +################### If FullBinsOnly option is enabled, each range will only contain bins of the size equal to the step specified. In other words, the will be no diff --git a/Code/Mantid/docs/source/algorithms/RefinePowderDiffProfileSeq-v1.rst b/Code/Mantid/docs/source/algorithms/RefinePowderDiffProfileSeq-v1.rst index e48da55b5148..c9f8ef402565 100644 --- a/Code/Mantid/docs/source/algorithms/RefinePowderDiffProfileSeq-v1.rst +++ b/Code/Mantid/docs/source/algorithms/RefinePowderDiffProfileSeq-v1.rst @@ -26,7 +26,7 @@ supported by this algorithm | ``* ``\ *``Load``*\ `` : set up a few workspaces used for refining by loading them from a previously created project file. `` Input and output workspaces -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +########################### | ``* InputWorkspace : data workspace containing the diffraction pattern to refine profile parameters with;`` | ``* SeqControlInfoWorkspace : table workspace used to track refinement; Below is the introduction on the fields/columns of this workspace. `` @@ -48,13 +48,13 @@ Input and output workspaces | ``* InputBackgroundParameterWorkspace : table workspace containing the background parameters' value`` Supported peak profiles -^^^^^^^^^^^^^^^^^^^^^^^ +####################### | ``* Neutron Back-to-back exponential convoluted with pseudo-voigt : Fullprof profile 9 and GSAS TOF profile 3;`` | ``* Thermal neutron Back-to-back exponential convoluted with pseudo-voigt: Fullprof profile 10 (a.k.a. Jason Hodges function). `` Supported background types -^^^^^^^^^^^^^^^^^^^^^^^^^^ +########################## | ``* Polynomial`` | ``* Chebyshev`` diff --git a/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst b/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst index cb9b6854a7ce..d2d0ebf9c1d1 100644 --- a/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst +++ b/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst @@ -33,7 +33,7 @@ Refinement Algorithm Two refinement algorithms, DirectFit and MonteCarlo, are provided. DirectFit -^^^^^^^^^ +######### This is a simple one step fitting. If there is one parameter to fit, Levenberg Marquart minimizer is chosen. As its coefficients are strongly @@ -41,7 +41,7 @@ correlated to each other, Simplex minimizer is used if there are more than 1 parameter to fit. MonteCarlo -^^^^^^^^^^ +########## This adopts the concept of Monte Carlo random walk in the parameter space. In each MC step, one parameter will be chosen, and a new value is @@ -52,7 +52,7 @@ Simulated annealing will be tried as soon as it is implemented in Mantid. Constraint -^^^^^^^^^^ +########## How to use algorithm with other algorithms ------------------------------------------ diff --git a/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst index c2383a1b997d..97d30daf44ac 100644 --- a/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst @@ -18,7 +18,7 @@ Historically the work performed by this algorithm was known as the Quick script. Analysis Modes -~~~~~~~~~~~~~~ +############## The default analysis mode is *PointDetectorAnalysis*. Only this mode supports Transmission corrections (see below). For PointAnalysisMode the @@ -34,7 +34,7 @@ according to the input Theta value. Corrections are only enabled when a Theta input value has been provided. Transmission Runs -~~~~~~~~~~~~~~~~~ +################# Transmission correction is a normalization step, which may be applied to *PointDetectorAnalysis* reduction. diff --git a/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst b/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst index dd0c3ba2eeb2..c90f206856b5 100644 --- a/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst +++ b/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst @@ -17,7 +17,7 @@ The treatment of the removed bins is slightly different, depending on where in the spectrum the bins to be removed lie: Bins at either end of spectrum -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################## If the workspaces has common X binning for all spectra, then the :ref:`_algm-CropWorkspace` algorithm will be called as a child @@ -29,7 +29,7 @@ values will be set to zero regardless of the setting of the Interpolation property. Bins in the middle of a spectrum -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################ The Interpolation property is applicable to this situation. If it is set to "Linear" then the bins are set to values calculated from the values @@ -40,7 +40,7 @@ percentage of the bin's width which falls outside XMin or XMax as appropriate. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### - The input workspace must have a unit set - The input workspace must contain histogram data @@ -49,7 +49,7 @@ Related Algorithms ------------------ MaskBins -~~~~~~~~ +######## :ref:`_algm-MaskBins` will set the data in the desired bins to 0 and importantly also marks those bins as masked, so that further algorithms diff --git a/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst index d751e4f1e626..ee95858afde7 100644 --- a/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst @@ -57,7 +57,7 @@ The output of this algorithm is: :math:`OutputWorkspace = \frac{T^'}{T_0}` Error Propagation -~~~~~~~~~~~~~~~~~ +################# The error propagation follows this formula: diff --git a/Code/Mantid/docs/source/algorithms/SNSPowderReduction-v1.rst b/Code/Mantid/docs/source/algorithms/SNSPowderReduction-v1.rst index 8ae03dbdc257..2f8b0b8316b8 100644 --- a/Code/Mantid/docs/source/algorithms/SNSPowderReduction-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SNSPowderReduction-v1.rst @@ -10,7 +10,7 @@ Description ----------- About Filter Wall -^^^^^^^^^^^^^^^^^ +################# Time filter wall is used in \_loadData to load data in a certain range of time. Here is how the filter is used: diff --git a/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst b/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst index 3083783a14d6..a266c32f7bd8 100644 --- a/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst @@ -37,7 +37,7 @@ Details ------- Parameter FFTonlyRealPart -~~~~~~~~~~~~~~~~~~~~~~~~~ +######################### Setting parameter FFTonlyRealPart to true will produce a transform on only the real part of I(Q,t). This is convenient if we know that I(Q,t) diff --git a/Code/Mantid/docs/source/algorithms/SaveANSTOAscii-v1.rst b/Code/Mantid/docs/source/algorithms/SaveANSTOAscii-v1.rst index a32bab199e63..73281b809374 100644 --- a/Code/Mantid/docs/source/algorithms/SaveANSTOAscii-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveANSTOAscii-v1.rst @@ -14,7 +14,7 @@ associated loader. It is based on a python script by Maximilian Skoda, written for the ISIS Reflectometry GUI Limitations -^^^^^^^^^^^ +########### While Files saved with SaveANSTOAscii can be loaded back into mantid using LoadAscii, the resulting workspaces won't be usful as the data diff --git a/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst b/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst index 116465ce46d9..019f87fc7f55 100644 --- a/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst @@ -15,7 +15,7 @@ separated by commas. The resulting file can normally be loaded into a workspace by the :ref:`_algm-LoadAscii` algorithm. Limitations -^^^^^^^^^^^ +########### The algorithm assumes that the workspace has common X values for all spectra (i.e. is not a `ragged workspace `__). Only diff --git a/Code/Mantid/docs/source/algorithms/SaveAscii-v2.rst b/Code/Mantid/docs/source/algorithms/SaveAscii-v2.rst index 40373dd6299a..cb8622909ba6 100644 --- a/Code/Mantid/docs/source/algorithms/SaveAscii-v2.rst +++ b/Code/Mantid/docs/source/algorithms/SaveAscii-v2.rst @@ -15,7 +15,7 @@ separated by commas. The resulting file can normally be loaded into a workspace by the `LoadAscii2 `__ algorithm. Limitations -^^^^^^^^^^^ +########### The algorithm assumes that the workspace has common X values for all spectra (i.e. is not a `ragged workspace `__). Only diff --git a/Code/Mantid/docs/source/algorithms/SaveDetectorsGrouping-v1.rst b/Code/Mantid/docs/source/algorithms/SaveDetectorsGrouping-v1.rst index 08219db1a41e..e132fc9e7d0b 100644 --- a/Code/Mantid/docs/source/algorithms/SaveDetectorsGrouping-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveDetectorsGrouping-v1.rst @@ -16,7 +16,7 @@ XML File Format --------------- Parameters -~~~~~~~~~~ +########## - "instrument": mandatory attribute of node 'detector-grouping'. It must be valid instrument name. diff --git a/Code/Mantid/docs/source/algorithms/SaveFullprofResolution-v1.rst b/Code/Mantid/docs/source/algorithms/SaveFullprofResolution-v1.rst index 2c03f4c03529..2cceba92fd20 100644 --- a/Code/Mantid/docs/source/algorithms/SaveFullprofResolution-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveFullprofResolution-v1.rst @@ -45,13 +45,13 @@ How to use algorithm with other algorithms ------------------------------------------ Le Bail Fit -^^^^^^^^^^^ +########### This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in `Le Bail Fit `__. Save For Multiple-Bank Resolution File -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +###################################### As SaveFullprofResolution can save 1 bank a time, in order to make a multiple-bank .irf file, user should execute this algorithm a few times. diff --git a/Code/Mantid/docs/source/algorithms/SaveGSASInstrumentFile-v1.rst b/Code/Mantid/docs/source/algorithms/SaveGSASInstrumentFile-v1.rst index 83c24af7fdd1..47c067ecc7a2 100644 --- a/Code/Mantid/docs/source/algorithms/SaveGSASInstrumentFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveGSASInstrumentFile-v1.rst @@ -13,7 +13,7 @@ Convert Fullprof's instrument resolution file (.irf) to GSAS's instrument file (.iparm/.prm). Supported peak profiles -^^^^^^^^^^^^^^^^^^^^^^^ +####################### - Time-of-flight back-to-back exponential convoluted with pseudo-voigt (planned) @@ -28,7 +28,7 @@ Supported peak profiles - GSAS: tabulated peak profile. Supported input Fullprof file -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################# There can be several types of Fullprof files as the input file @@ -36,7 +36,7 @@ There can be several types of Fullprof files as the input file - configuration file .pcr (planned) Set up :math:`2\theta` -^^^^^^^^^^^^^^^^^^^^^^ +###################### There are several places in this algorithm that can set the value of :math:`2\theta`. From the highest priority, here is the list how @@ -47,7 +47,7 @@ There are several places in this algorithm that can set the value of | ``3. Hard coded default  ``\ :math:`2\theta`\ `` of a certain instrument.`` Set up :math:`L_1` -^^^^^^^^^^^^^^^^^^ +################## There are 2 places in this algorithm that can set the value of :math:`L_1`. From the highest priority, here is the list how @@ -57,7 +57,7 @@ There are 2 places in this algorithm that can set the value of | ``2. Hard coded default  ``\ :math:`2\theta`\ `` of a certain instrument.`` Calculation of L2 -^^^^^^^^^^^^^^^^^ +################# - If 2Theta (:math:`2\theta`) is given, L2 will be calculated from given 2Theta and L1 by diff --git a/Code/Mantid/docs/source/algorithms/SaveILLCosmosAscii-v1.rst b/Code/Mantid/docs/source/algorithms/SaveILLCosmosAscii-v1.rst index f0cd8339722e..8bbaa7fbe82a 100644 --- a/Code/Mantid/docs/source/algorithms/SaveILLCosmosAscii-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveILLCosmosAscii-v1.rst @@ -14,7 +14,7 @@ associated loader. It is based on a python script by Maximilian Skoda, written for the ISIS Reflectometry GUI Limitations -^^^^^^^^^^^ +########### While Files saved with SaveILLCosmosAscii can be loaded back into mantid using LoadAscii, the resulting workspaces won't be usful as the data diff --git a/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst b/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst index e950749912bf..417016efe1da 100644 --- a/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst @@ -19,13 +19,13 @@ file. This algorithm has previously been renamed from There are two types of mask workspace that can serve as input. 1. `MaskWorkspace `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +#################################### In this case, :ref:`_algm-SaveMask` will read Y values to determine which detectors are masked; 2. A non-\ `MaskWorkspace `__ `MatrixWorkspace `__ containing `Instrument `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +######################################################################################################################### In this case, :ref:`_algm-SaveMask` will scan through all detectors to determine which are masked. diff --git a/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst index 42854e547555..19506adbf830 100644 --- a/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst @@ -13,13 +13,13 @@ Saves the data in a workspace into a file in the NeXus based 'NXSPE' format. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must have units of Momentum Transfer ('DeltaE') and contain histogram data with common binning on all spectra. Child Algorithms used -^^^^^^^^^^^^^^^^^^^^^ +##################### :ref:`_algm-FindDetectorsPar` algorithm is used to calculate detectors parameters from the instrument description. diff --git a/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst index 58289efc7a4a..4f5981f0f7cd 100644 --- a/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst @@ -27,14 +27,14 @@ In the future it may be possible to write other Nexus file types than the one supported by SaveNexusProcessed. Time series data -~~~~~~~~~~~~~~~~ +################ TimeSeriesProperty data within the workspace will be saved as NXlog sections in the Nexus file. Only floating point logs are stored and loaded at present. Child Algorithms used -~~~~~~~~~~~~~~~~~~~~~ +##################### :ref:`_algm-SaveNexusProcessed` diff --git a/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst index ccc8680ac396..87d2db14ed6e 100644 --- a/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst @@ -27,14 +27,14 @@ with an integer starting at 1. If the file already contains n workspaces, the new one will be labelled n+1. Time series data -~~~~~~~~~~~~~~~~ +################ TimeSeriesProperty data within the workspace will be saved as NXlog sections in the Nexus file. Only floating point logs are stored and loaded at present. EventWorkspaces -~~~~~~~~~~~~~~~ +############### This algorithm will save `EventWorkspaces `__ with full event data, unless you uncheck *PreserveEvents*, in which case the diff --git a/Code/Mantid/docs/source/algorithms/SaveReflTBL-v1.rst b/Code/Mantid/docs/source/algorithms/SaveReflTBL-v1.rst index 9fc8ca916485..eb26b75df0bc 100644 --- a/Code/Mantid/docs/source/algorithms/SaveReflTBL-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveReflTBL-v1.rst @@ -25,7 +25,7 @@ becomes A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q Limitations -^^^^^^^^^^^ +########### The Algorithm will fail if any stitch index appears more than 3 times, as the old interface does not support more than 3 runs per row. diff --git a/Code/Mantid/docs/source/algorithms/SaveSPE-v1.rst b/Code/Mantid/docs/source/algorithms/SaveSPE-v1.rst index d55fcdc88cdb..a31b3f008fca 100644 --- a/Code/Mantid/docs/source/algorithms/SaveSPE-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveSPE-v1.rst @@ -18,7 +18,7 @@ get a traditional SPE file, you could choose to have the units in mod Q and then it will save to an SPQ file variant. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must contain histogram data with common binning on all spectra. diff --git a/Code/Mantid/docs/source/algorithms/SaveZODS-v1.rst b/Code/Mantid/docs/source/algorithms/SaveZODS-v1.rst index 2b76528dd9ad..58c441b3c016 100644 --- a/Code/Mantid/docs/source/algorithms/SaveZODS-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveZODS-v1.rst @@ -31,7 +31,7 @@ From http://www.crystal.mat.ethz.ch/research/DiffuseXrayScattering: in computing technologies. Summary of data format -^^^^^^^^^^^^^^^^^^^^^^ +###################### In general it contains collection of grids with intensities and each grid is described by specifying origin, size of grid (in each direction) @@ -42,7 +42,7 @@ Please contact Michal Chodkiewicz (michal.chodkiewicz@gmail.com); Vickie Lynch (vel@ornl.gov) for more details. Description of data fields -^^^^^^^^^^^^^^^^^^^^^^^^^^ +########################## - The CoordinateSystem data object has the attribute "isLocal". diff --git a/Code/Mantid/docs/source/algorithms/SetScalingPSD-v1.rst b/Code/Mantid/docs/source/algorithms/SetScalingPSD-v1.rst index b908755781bd..ffe4351f7966 100644 --- a/Code/Mantid/docs/source/algorithms/SetScalingPSD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SetScalingPSD-v1.rst @@ -59,7 +59,7 @@ algorithm will not be visible in the instrument view in MantidPlot, at the same time all calclations will be performed correctly. Optional properties -~~~~~~~~~~~~~~~~~~~ +################### ScalingOpt - this integer value controls the way in which the scaling is calculated for pixels that have both left and right values for the @@ -68,7 +68,7 @@ to 1 causes the maximum scaling to be used and setting it to 2 uses the maximum scaling plus 5% to be used. ChildAlgorithms used -~~~~~~~~~~~~~~~~~~~~ +#################### None diff --git a/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst b/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst index d05e42fccb4d..a5e62eb58fa9 100644 --- a/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst @@ -22,20 +22,20 @@ Please see :ref:`_algm-BinMD` for a detailed description of the parameters. Axis-Aligned Slice -~~~~~~~~~~~~~~~~~~ +################## Events outside the range of the slice are dropped. The new output MDEventWorkspace's dimensions only extend as far as the limit specified. Non-Axis-Aligned Slice -~~~~~~~~~~~~~~~~~~~~~~ +###################### The coordinates of each event are transformed according to the new basis vectors, and placed in the output MDEventWorkspace. The dimensions of the output workspace are along the basis vectors specified. Splitting Parameters -~~~~~~~~~~~~~~~~~~~~ +#################### The **OutputBins** parameter is interpreted as the "SplitInto" parameter for each dimension. For instance, if you want the output workspace to @@ -46,7 +46,7 @@ in every other dimension - that way, boxes will only be split along the 1D direction. Slicing a MDHistoWorkspace -~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################## It is possible to slice a `MDHistoWorkspace `__. Each MDHistoWorkspace holds a reference to the diff --git a/Code/Mantid/docs/source/algorithms/SmoothNeighbours-v1.rst b/Code/Mantid/docs/source/algorithms/SmoothNeighbours-v1.rst index c6dfcabac850..83e451e82af4 100644 --- a/Code/Mantid/docs/source/algorithms/SmoothNeighbours-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SmoothNeighbours-v1.rst @@ -16,7 +16,7 @@ works on both `EventWorkspaces `__ and `Workspace2D `__'s. It has two main modes of operation. Processing Either Generically or Assuming Rectangular Detectors -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +############################################################### You may either specify properties for the Rectangular Detector Group, or the Non-uniform Detector Group, but not both. If you provide inputs for @@ -24,7 +24,7 @@ the Rectangular Detector group, then the algorithm execution will assume that this is your desired processing route. For All Instruments -~~~~~~~~~~~~~~~~~~~ +################### Going through the input workspace pixel-by-pixel, Mantid finds the nearest-neighbours with the given Radius of each pixel. The spectra are @@ -32,7 +32,7 @@ then summed together, and normalizing to unity (see the weighting section below). For Instruments With Rectangular Detectors -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################################## The algorithm looks through the `Instrument `__ to find all the `RectangularDetectors `__ defined. For each @@ -40,26 +40,26 @@ pixel in each detector, the AdjX\*AdjY neighboring spectra are summed together and saved in the output workspace. WeightedSum parameter -~~~~~~~~~~~~~~~~~~~~~ +##################### A weighting strategy can be applied to control how the weights are calculated. This defaults to a flat weighting strategy. Weights are summed and scaled so that they add up to 1. Flat Weighting -^^^^^^^^^^^^^^ +############## All weights are 1. This is completely position in-senitive. Linear Weighting -^^^^^^^^^^^^^^^^ +################ Weights are calculated according to :math:`w = 1 - r/R`, where w is the weighting factor, r is the distance from the detector and R is the cut-off radius. Parabolic Weighting -^^^^^^^^^^^^^^^^^^^ +################### For rectangular detectors it may be used as follows: The radius must be zero and a AdjX and AdjY parameter must be provided. @@ -69,7 +69,7 @@ For non-rectangular detectors, the cut-off radius is used in the calculation. :math:`w = R - abs(x) + R - abs(y) + 1` Gaussian Weighting -^^^^^^^^^^^^^^^^^^ +################## This weighting is calculated from the Gaussian distribution @@ -84,7 +84,7 @@ Important notes about this algorithm are that: dimensionless and scaled to 1 at the boundaries. For EventWorkspaces -~~~~~~~~~~~~~~~~~~~ +################### Both methods of smoothing will **significantly** increase the memory usage of the workspace. For example, if AdjX=AdjY=1, the algorithm will @@ -92,14 +92,14 @@ sum 9 nearest neighbours in most cases. This increases the memory used by a factor of 9. For Workspace2D's -~~~~~~~~~~~~~~~~~ +################# You can use PreserveEvents = false to avoid the memory issues with an EventWorkspace input. Please note that the algorithm **does not check** that the bin X boundaries match. Neighbour Searching -~~~~~~~~~~~~~~~~~~~ +################### File:NNSearchByRadius.jpg\ \|\ *Fig. 1*. File:NNSearchIrregularGrid.jpg\ \|\ *Fig. 2*. @@ -108,7 +108,7 @@ File:NNSearchLimitByNNs.jpg\ \|\ *Fig. 4* File:NNSearchXY.jpg\ \|\ *Fig. 5* Property Values of Examples -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +########################### | *Fig. 1* : Requesting NumberOfNeighbours=36, Radius=3. Algorithm looks for 36 nearest neighbours with a cut-off of 3 detector widths. @@ -122,7 +122,7 @@ for 8 nearest neighbours with a cut-off of 3 detector widths. neighbours in the specified pattern. How it Works -^^^^^^^^^^^^ +############ The algorithm will fetch neigbours using the intesection of those inside the radius cut-off and those less than the NumberOfNeighbours specified. @@ -152,7 +152,7 @@ number of neighbours independently in x and y using the AdjX and AdjY properties. *Fig. 5* Shows the effect of this type of searching. Ignore Masks -~~~~~~~~~~~~ +############ The algorithm will ignore masked detectors if this flag is set. diff --git a/Code/Mantid/docs/source/algorithms/SplineInterpolation-v1.rst b/Code/Mantid/docs/source/algorithms/SplineInterpolation-v1.rst index c6340ebd9894..542f9f77fee7 100644 --- a/Code/Mantid/docs/source/algorithms/SplineInterpolation-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SplineInterpolation-v1.rst @@ -24,7 +24,7 @@ Setting the DerivOrder property to zero will force the algorithm to calculate no derivatives. For Histogram Workspaces -~~~~~~~~~~~~~~~~~~~~~~~~ +######################## If the input workspace contains histograms, rather than data points, then SplineInterpolation will automatically convert the input to point diff --git a/Code/Mantid/docs/source/algorithms/SplineSmoothing-v1.rst b/Code/Mantid/docs/source/algorithms/SplineSmoothing-v1.rst index 45000dfdc58b..edde86a3a64d 100644 --- a/Code/Mantid/docs/source/algorithms/SplineSmoothing-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SplineSmoothing-v1.rst @@ -19,7 +19,7 @@ Setting the DerivOrder property to zero will force the algorithm to calculate no derivatives. For Histogram Workspaces -~~~~~~~~~~~~~~~~~~~~~~~~ +######################## If the input workspace contains histograms, rather than data points, then SplineInterpolation will automatically convert the input to point diff --git a/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst index 0b7152e03bef..d45a8d9feb48 100644 --- a/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst @@ -20,7 +20,7 @@ For details on the way to specify the data processing steps, see: `LoadLiveData `__. Live Plots -~~~~~~~~~~ +########## Once live data monitoring has started, you can open a plot in MantidPlot. For example, you can right-click a workspace and choose @@ -42,7 +42,7 @@ open a live plot. For example: plotSpectrum('live', [0,1]) Run Transition Behavior -~~~~~~~~~~~~~~~~~~~~~~~ +####################### - When the experimenter starts and stops a run, the Live Data Listener receives this as a signal. @@ -65,7 +65,7 @@ Run Transition Behavior (i.e. before a run begins you will still receive live data). Multiple Live Data Sessions -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +########################### It is possible to have multiple live data sessions running at the same time. Simply call StartLiveData more than once, but make sure to specify diff --git a/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst index 0f7ba5473451..94e0fc20773f 100644 --- a/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst @@ -13,7 +13,7 @@ This algorithm is intended to automatically find all the peaks in a dataset and subtract them, leaving just the residual 'background'. ChildAlgorithms used -^^^^^^^^^^^^^^^^^^^^ +#################### The :ref:`_algm-FindPeaks` algorithm is used to identify the peaks in the data. diff --git a/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst index 7c78fe67e37d..ff9dff28db26 100644 --- a/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst @@ -16,7 +16,7 @@ sub-algorithm of the `RockingCurve `__ algorithm. The algorithm has two modes: Table output -^^^^^^^^^^^^ +############ This option can be used for integer-typed logs and will produce a table with a row for each integer value between the minimum and maximum @@ -40,7 +40,7 @@ value between the minimum and maximum log value. This might take a long time! Single-spectrum option -^^^^^^^^^^^^^^^^^^^^^^ +###################### This option can be used for integer or floating point type logs and requires that the OutputBinning property is specified. It will produce a diff --git a/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst b/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst index fe2af8153910..0ffd3586b0a0 100644 --- a/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst @@ -17,7 +17,7 @@ summed between the H/V\_Min/Max values, if given, and the result is a single spectrum of row or column number against total counts. ChildAlgorithms used -^^^^^^^^^^^^^^^^^^^^ +#################### The :ref:`_algm-Integration` algorithm is used to sum up each spectrum between XMin & XMax. diff --git a/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst b/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst index de0b064e08cb..58e22d55ac1f 100644 --- a/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst @@ -26,7 +26,7 @@ case the same m\_scaling or m\_offset are applied to each dimension; or you can specify a list with one entry for each dimension. Notes -^^^^^ +##### The relationship between the workspace and the original `MDWorkspace `__, for example when the MDHistoWorkspace is @@ -36,7 +36,7 @@ re-bin a transformed `MDHistoWorkspace `__. No units are not modified by this algorithm. Performance Notes -^^^^^^^^^^^^^^^^^ +################# - Performing the operation in-place (input=output) is always faster because the first step of the algorithm if NOT in-place is to clone diff --git a/Code/Mantid/docs/source/algorithms/UnwrapMonitor-v1.rst b/Code/Mantid/docs/source/algorithms/UnwrapMonitor-v1.rst index 94da5808c3f7..dab0c413f02d 100644 --- a/Code/Mantid/docs/source/algorithms/UnwrapMonitor-v1.rst +++ b/Code/Mantid/docs/source/algorithms/UnwrapMonitor-v1.rst @@ -72,7 +72,7 @@ this means in practice is that the edge bins will possibly have a reduced number of counts. Restrictions on the input workspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +################################### The input workspace must contain histogram data where the X unit is time-of-flight and the Y data is raw counts. The @@ -80,7 +80,7 @@ time-of-flight and the Y data is raw counts. The defined because detector, source & sample position are needed. Child algorithms used -^^^^^^^^^^^^^^^^^^^^^ +##################### If the input workspace contains more than a single spectrum, Unwrap makes use of the `rebin `__ algorithm to set the bins on the diff --git a/Code/Mantid/docs/source/algorithms/UpdateInstrumentFromFile-v1.rst b/Code/Mantid/docs/source/algorithms/UpdateInstrumentFromFile-v1.rst index 1ac084a9668b..987d37902810 100644 --- a/Code/Mantid/docs/source/algorithms/UpdateInstrumentFromFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/UpdateInstrumentFromFile-v1.rst @@ -22,7 +22,7 @@ subsequent rotation, hence this means that detectors may not for example face the sample perfectly after this algorithm has been applied. Additional Detector Parameters Using ASCII File -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +############################################### The ASCII format allows a multi-column text file to provide new positions along with additional parameters for each detector. If a text From 02a5c1fc2f2aba49d689b140cead8efefc2fd1bf Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 13:42:33 +0100 Subject: [PATCH 75/86] Disable screenshot generating in doc-test mode. They are not necessary and they slow down the build quite considerably. Refs #9562 --- Code/Mantid/docs/CMakeLists.txt | 1 + Code/Mantid/docs/runsphinx.py.in | 4 ++- .../mantiddoc/directives/algorithm.py | 30 ++++++++++++------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index 7b9dc0f3d82f..97c42b78a719 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -28,6 +28,7 @@ if ( SPHINX_FOUND ) # doctest target set ( BUILDER doctest ) + set ( SCREENSHOTS_DIR "" ) # no screenshots configure_file ( runsphinx.py.in runsphinx_doctest.py @ONLY ) add_custom_target ( ${TARGET_PREFIX}-test COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_doctest.py diff --git a/Code/Mantid/docs/runsphinx.py.in b/Code/Mantid/docs/runsphinx.py.in index 02316f03b62b..6d6c3b6e135d 100644 --- a/Code/Mantid/docs/runsphinx.py.in +++ b/Code/Mantid/docs/runsphinx.py.in @@ -6,7 +6,9 @@ import os import sys # set environment -os.environ["SCREENSHOTS_DIR"] = "@SCREENSHOTS_DIR@" +screenshots_dir = "@SCREENSHOTS_DIR@" +if screenshots_dir != "": + os.environ["SCREENSHOTS_DIR"] = screenshots_dir builder = "@BUILDER@" src_dir = "@CMAKE_CURRENT_SOURCE_DIR@/source" diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index 6bdd47891cfb..d28be977d7ee 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -108,18 +108,23 @@ def _create_screenshot(self): Returns: str: The full path to the created image """ - from mantiddoc.tools.screenshot import algorithm_screenshot + notfoundimage = "/images/ImageNotFound.png" + try: + screenshots_dir = self._screenshot_directory() + except RuntimeError: + return notfoundimage - env = self.state.document.settings.env - screenshots_dir = self._screenshot_directory() + # Generate image + from mantiddoc.tools.screenshot import algorithm_screenshot if not os.path.exists(screenshots_dir): os.makedirs(screenshots_dir) try: imgpath = algorithm_screenshot(self.algorithm_name(), screenshots_dir, version=self.algorithm_version()) except Exception, exc: + env = self.state.document.settings.env env.warn(env.docname, "Unable to generate screenshot for '%s' - %s" % (algorithm_name, str(exc))) - imgpath = os.path.join(screenshots_dir, "ImageNotFound.png") + imgpath = notfoundimage return imgpath @@ -144,13 +149,18 @@ def _insert_screenshot_link(self, img_path): filename = os.path.split(img_path)[1] cfgdir = env.srcdir - screenshots_dir = self._screenshot_directory() - rel_path = os.path.relpath(screenshots_dir, cfgdir) - # This is a href link so is expected to be in unix style - rel_path = rel_path.replace("\\","/") - # stick a "/" as the first character so Sphinx computes relative location from source directory - path = "/" + rel_path + "/" + filename + try: + screenshots_dir = self._screenshot_directory() + rel_path = os.path.relpath(screenshots_dir, cfgdir) + # This is a href link so is expected to be in unix style + rel_path = rel_path.replace("\\","/") + # stick a "/" as the first character so Sphinx computes relative location from source directory + path = "/" + rel_path + "/" + filename + except RuntimeError: + # Use path as it is + path = img_path + caption = "A screenshot of the **" + self.algorithm_name() + "** dialog." self.add_rst(format_str % (path, caption)) From 0c49e013334b8802ce65d2741598cade26aeb8d4 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 13:48:15 +0100 Subject: [PATCH 76/86] Add global doctest setup code. Runs the given code before each test is executed. Refs #9562 --- Code/Mantid/docs/source/conf.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Code/Mantid/docs/source/conf.py b/Code/Mantid/docs/source/conf.py index ea20dcc36f4a..6752f00f7f5f 100644 --- a/Code/Mantid/docs/source/conf.py +++ b/Code/Mantid/docs/source/conf.py @@ -49,6 +49,13 @@ # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' +# -- Options for doctest -------------------------------------------------- + +# Run this before each test is executed +doctest_global_setup = """ +from mantid.simpleapi import * +""" + # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for From 663345b49199fcfb74c272d09b85f5a56d4320ad Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 13:48:31 +0100 Subject: [PATCH 77/86] Add usage examples to Rebin. Refs #9562 --- .../docs/source/algorithms/Rebin-v1.rst | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/Code/Mantid/docs/source/algorithms/Rebin-v1.rst b/Code/Mantid/docs/source/algorithms/Rebin-v1.rst index 77dc49f7717e..d1294f06d15c 100644 --- a/Code/Mantid/docs/source/algorithms/Rebin-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Rebin-v1.rst @@ -80,4 +80,136 @@ following will happen: Hence the actual *Param* string used is "0, 2, 4, 3, 10". +Usage +----- + +**Example - simple rebin of a histogram workspace:** + +.. testcode:: ExHistSimple + + # create histogram workspace + dataX = [0,1,2,3,4,5,6,7,8,9] # or use dataX=range(0,10) + dataY = [1,1,1,1,1,1,1,1,1] # or use dataY=[1]*9 + ws = CreateWorkspace(dataX, dataY) + + # rebin from min to max with size bin = 2 + ws = Rebin(ws, 2) + + print "The rebinned X values are: " + str(ws.readX(0)) + print "The rebinned Y values are: " + str(ws.readY(0)) + +.. testcleanup:: ExHistSimple + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExHistSimple + + The rebinned X values are: [ 0. 2. 4. 6. 8. 9.] + The rebinned Y values are: [ 2. 2. 2. 2. 1.] + +**Example - logarithmic rebinning:** + +.. testcode:: ExHistLog + + # create histogram workspace + dataX = [1,2,3,4,5,6,7,8,9,10] # or use dataX=range(1,11) + dataY = [1,2,3,4,5,6,7,8,9] # or use dataY=range(1,10) + ws = CreateWorkspace(dataX, dataY) + + # rebin from min to max with logarithmic bins of 0.5 + ws = Rebin(ws, -0.5) + + print "The 2nd and 3rd rebinned X values are: " + str(ws.readX(0)[1:3]) + +.. testcleanup:: ExHistLog + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExHistLog + + The 2nd and 3rd rebinned X values are: [ 1.5 2.25] + +**Example - custom two regions rebinning:** + +.. testcode:: ExHistCustom + + # create histogram workspace + dataX = [0,1,2,3,4,5,6,7,8,9] # or use dataX=range(0,10) + dataY = [0,1,2,3,4,5,6,7,8] # or use dataY=range(0,9) + ws = CreateWorkspace(dataX, dataY) + + # rebin from 0 to 3 in steps of 2 and from 3 to 9 in steps of 3 + ws = Rebin(ws, "1,2,3,3,9") + + print "The rebinned X values are: " + str(ws.readX(0)) + +.. testcleanup:: ExHistCustom + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExHistCustom + + The rebinned X values are: [ 1. 3. 6. 9.] + +**Example - use option FullBinsOnly:** + +.. testcode:: ExHistFullBinsOnly + + # create histogram workspace + dataX = [0,1,2,3,4,5,6,7,8,9] # or use dataX=range(0,10) + dataY = [1,1,1,1,1,1,1,1,1] # or use dataY=[1]*9 + ws = CreateWorkspace(dataX, dataY) + + # rebin from min to max with size bin = 2 + ws = Rebin(ws, 2, FullBinsOnly=True) + + print "The rebinned X values are: " + str(ws.readX(0)) + print "The rebinned Y values are: " + str(ws.readY(0)) + +.. testcleanup:: ExHistFullBinsOnly + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExHistFullBinsOnly + + The rebinned X values are: [ 0. 2. 4. 6. 8.] + The rebinned Y values are: [ 2. 2. 2. 2.] + +**Example - use option PreserveEvents:** + +.. testcode:: ExEventRebin + + # create some event workspace + ws = CreateSampleWorkspace(WorkspaceType="Event") + + print "What type is the workspace before 1st rebin: " + str(type(ws)) + # rebin from min to max with size bin = 2 preserving event workspace (default behaviour) + ws = Rebin(ws, 2) + print "What type is the workspace after 1st rebin: " + str(type(ws)) + ws = Rebin(ws, 2, PreserveEvents=False) + print "What type is the workspace after 2nd rebin: " + str(type(ws)) + # note you can also check the type of a workspace using: print isinstance(ws, IEventWorkspace) + +.. testcleanup:: ExEventRebin + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExEventRebin + + What type is the workspace before 1st rebin: + What type is the workspace after 1st rebin: + What type is the workspace after 2nd rebin: + + + .. categories:: From 4296b70623e95451d552bc39a07cec13cdd08eb9 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 13:56:02 +0100 Subject: [PATCH 78/86] Wire up alias directive correctly. Refs #9562 --- Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py index 10dcf75288c5..0fba7b067144 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/__init__.py @@ -7,7 +7,7 @@ 'mantiddoc.directives' to be added to the Sphinx extensions configuration. """ -import algorithm, aliases, categories, properties, summary +import algorithm, alias, categories, properties, summary def setup(app): """ @@ -17,7 +17,7 @@ def setup(app): app: The main Sphinx application object """ algorithm.setup(app) - aliases.setup(app) + alias.setup(app) categories.setup(app) properties.setup(app) summary.setup(app) From 7a8ffdaa122954a50f3681598ebc63105765e396 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 14:36:41 +0100 Subject: [PATCH 79/86] Fix ..code directives to correct ..code-block Refs #9562 --- Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst | 6 +++--- Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst | 2 +- .../docs/source/algorithms/GeneratePythonScript-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst | 2 +- Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst | 2 +- Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst | 2 +- .../docs/source/algorithms/NormaliseByDetector-v1.rst | 6 +++--- .../docs/source/algorithms/PeakIntensityVsRadius-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst | 2 +- Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst index 0d423a5f6600..6b5dc167c713 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst @@ -70,7 +70,7 @@ Mantid for different testing tasks. Convert re-binned MARI 2D workspace to 3D MD workspace for further analysis/merging with data at different temperatures ####################################################################################################################### -.. code:: python +.. code-block:: python Load(Filename='MAR11001.nxspe',OutputWorkspace='MAR11001') @@ -91,7 +91,7 @@ test folder. The same script without any changes would produce similar MD workspace given histogram data obtained from inelastic instruments and stored in nxspe files. -.. code:: python +.. code-block:: python # let's load test event workspace, which has been already preprocessed and available in Mantid Test folder WS_Name='CNCS_7860_event' @@ -147,7 +147,7 @@ will produce 3-dimensional dataset, with temperature axis. The image does not change with temperature, as we have just cloned initial workspace without any changes to the experimental data. -.. code:: python +.. code-block:: python # let's load test event workspace, which has been already preprocessed and availible in Mantid Test folder WS_Name='MAR11001.nxspe' diff --git a/Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst index 2ca96f5f5139..3f57ec51bc6f 100644 --- a/Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreateWorkspace-v1.rst @@ -12,7 +12,7 @@ Description Example of use in Python for create a simple histogram workspace and automatically populating the VerticalAxis with SpectraNumber values. -.. code:: python +.. code-block:: python dataX = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] dataY = [1,2,3,4,5,6,7,8,9,10,11,12] diff --git a/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst b/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst index 37b67d2fd53b..05bda3b61c6c 100644 --- a/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GeneratePythonScript-v1.rst @@ -15,7 +15,7 @@ Python script file or Python variable. Example usage: ############## -.. code:: python +.. code-block:: python # Optional: Store the contents of the workspace to a file to your desktop. GeneratePythonScript("MUSR00022725", "/home/userName/Desktop/MUSR00022725.py") diff --git a/Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst index ecd76106ff22..8500a58197a0 100644 --- a/Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GroupDetectors-v1.rst @@ -75,7 +75,7 @@ is ignored and can be any integer (not necessarily the same integer) In addition the following XML grouping format is also supported -.. code:: xml +.. code-block:: xml diff --git a/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst b/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst index 5a9fb01d8f3c..88f8662b4015 100644 --- a/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst +++ b/Code/Mantid/docs/source/algorithms/GroupDetectors-v2.rst @@ -75,7 +75,7 @@ is ignored and can be any integer (not necessarily the same integer) In addition the following XML grouping format is also supported -.. code:: xml +.. code-block:: xml diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst index 6b3dfe3fb0a7..364b13f859bf 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst @@ -88,7 +88,7 @@ If BackgroundInnerRadius is left blank, then **BackgroundInnerRadius** = Sample Usage ############ -.. code:: python +.. code-block:: python # Load a SCD data set and find the peaks LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst index 6b3dfe3fb0a7..364b13f859bf 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst @@ -88,7 +88,7 @@ If BackgroundInnerRadius is left blank, then **BackgroundInnerRadius** = Sample Usage ############ -.. code:: python +.. code-block:: python # Load a SCD data set and find the peaks LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') diff --git a/Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst index 58a566295219..4acfca00f2ba 100644 --- a/Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadParameterFile-v1.rst @@ -16,7 +16,7 @@ through s in an IDF. Below is an example of how to define a parameter named 'test' to be associated with a component named 'bank\_90degnew' defined in the IDF of the HRPD instrument: -.. code:: xml +.. code-block:: xml diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst index a8650d2adf1d..8dcced47399f 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst @@ -83,7 +83,7 @@ Examples Applying a LinearFunction to the whole instrument, hard-coded with A1=2 and A0=1. Fictional instrument is called basic\_rect. -.. code:: xml +.. code-block:: xml @@ -101,7 +101,7 @@ and A0=1. Fictional instrument is called basic\_rect. Applying the same LinearFunction to two different detectors, with different coefficients is shown below: -.. code:: xml +.. code-block:: xml @@ -132,7 +132,7 @@ provided for each detector. In this way the Algorithm sees a complete definition for the Linear function (both A1 and A0) from two incomplete definitions on different components in the tree. -.. code:: xml +.. code-block:: xml diff --git a/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst b/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst index 5c50b3ba11e7..11c5fce1b3b9 100644 --- a/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst @@ -46,7 +46,7 @@ with the following parameters filled in: Sample Usage ############ -.. code:: python +.. code-block:: python # Load a SCD data set and find the peaks LoadEventNexus(Filename=r'TOPAZ_3131_event.nxs',OutputWorkspace='TOPAZ_3131_nxs') diff --git a/Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst b/Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst index 41fa57e1c8c9..d837dc5fee29 100644 --- a/Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SpatialGrouping-v1.rst @@ -11,7 +11,7 @@ Description This algorithm creates an XML Grouping file of the form: -.. code:: xml +.. code-block:: xml diff --git a/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst index d45a8d9feb48..d805451e4409 100644 --- a/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst @@ -34,7 +34,7 @@ StartLiveData algorithm returns after the first chunk of data has been loaded and processed. This makes it simple to write a script that will open a live plot. For example: -.. code:: python +.. code-block:: python StartLiveData(UpdateEvery='1.0',Instrument='FakeEventDataListener', ProcessingAlgorithm='Rebin',ProcessingProperties='Params=10e3,1000,60e3;PreserveEvents=1', From 1e696d5161d265a655269250c07e5cda879357ba Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 14:38:10 +0100 Subject: [PATCH 80/86] Fix generation of redirects. It no longer tracks algorithms as each build doesn't necessarily go through every file. It just uses the factory to construct redirects for everything. Refs #9562 --- .../mantiddoc/directives/algorithm.py | 32 +++---------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index d28be977d7ee..2a58b343f3ef 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -36,8 +36,6 @@ def run(self): """ Called by Sphinx when the ..algorithm:: directive is encountered """ - self._track_algorithm() - self._insert_reference_link() self._insert_pagetitle() imgpath = self._create_screenshot() @@ -48,26 +46,6 @@ def run(self): self.commit_rst() return [] - def _track_algorithm(self): - """ - Keep a track of the highest versions of algorithms encountered. - The algorithm name and version are retrieved from the document name. - See BaseDirective::set_algorithm_and_version() - """ - env = self.state.document.settings.env - if not hasattr(env, "algorithm"): - env.algorithms = {} - #endif - - name, version = self.algorithm_name(), self.algorithm_version() - algorithms = env.algorithms - if name in algorithms: - prev_version = algorithms[name][1] - if version > prev_version: - algorithms[name][1] = version - else: - algorithms[name] = (name, version) - def _insert_reference_link(self): """ Outputs a reference to the top of the algorithm's rst @@ -208,15 +186,15 @@ def html_collect_pages(app): """ Write out unversioned algorithm pages that redirect to the highest version of the algorithm """ - env = app.builder.env - if not hasattr(env, "algorithms"): - return # nothing to do + from mantid.api import AlgorithmFactory template = REDIRECT_TEMPLATE + all_algs = AlgorithmFactory.getRegisteredAlgorithms(True) - algorithms = env.algorithms - for name, highest_version in algorithms.itervalues(): + for name, versions in all_algs.iteritems(): redirect_pagename = "algorithms/%s" % name + versions.sort() + highest_version = versions[-1] target = "%s-v%d.html" % (name, highest_version) context = {"name" : name, "target" : target} yield (redirect_pagename, context, template) From a8ab59f00cc04685054070cf6e285c53dbca2dba Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 16:09:05 +0100 Subject: [PATCH 81/86] Fix algorithm page references The page reference must be before the page title so that it can be referenced without including the link text. Refs #9562 --- Code/Mantid/docs/runsphinx.py.in | 6 +++-- .../mantiddoc/directives/algorithm.py | 22 ++++++++++--------- .../sphinxext/mantiddoc/directives/base.py | 2 +- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Code/Mantid/docs/runsphinx.py.in b/Code/Mantid/docs/runsphinx.py.in index 6d6c3b6e135d..28f117aede4d 100644 --- a/Code/Mantid/docs/runsphinx.py.in +++ b/Code/Mantid/docs/runsphinx.py.in @@ -12,10 +12,12 @@ if screenshots_dir != "": builder = "@BUILDER@" src_dir = "@CMAKE_CURRENT_SOURCE_DIR@/source" -output_dir = os.path.join("@SPHINX_BUILD_DIR@", builder) +sphinx_build_dir = "@SPHINX_BUILD_DIR@" +output_dir = os.path.join(sphinx_build_dir, builder) +doctree_dir = os.path.join(sphinx_build_dir, "doctrees") if __name__ == "__main__": from sphinx import main - argv = [sys.executable, "-b", builder, src_dir, output_dir] + argv = [sys.executable, "-b", builder, "-d", doctree_dir, src_dir, output_dir] sys.exit(main(argv)) diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py index 2a58b343f3ef..2be0d8c4058e 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/algorithm.py @@ -36,7 +36,6 @@ def run(self): """ Called by Sphinx when the ..algorithm:: directive is encountered """ - self._insert_reference_link() self._insert_pagetitle() imgpath = self._create_screenshot() self._insert_screenshot_link(imgpath) @@ -46,28 +45,31 @@ def run(self): self.commit_rst() return [] - def _insert_reference_link(self): + def _insert_pagetitle(self): """ Outputs a reference to the top of the algorithm's rst of the form ".. _algm-AlgorithmName-vVersion:", so that the page can be referenced using :ref:`algm-AlgorithmName-version`. If this is the highest - version then it also outputs a reference ".. _algm-AlgorithmName: + version then it outputs a reference ".. _algm-AlgorithmName: instead + + It then outputs a title for the page """ from mantid.api import AlgorithmFactory alg_name = self.algorithm_name() version = self.algorithm_version() - self.add_rst(".. _algm-%s-v%d:\n" % (alg_name, version)) + # page reference must come directly before the title if it wants + # to be referenced without defining the link text. Here we put the + # specific version one first so that it always must be referenced + # using the full link text ":ref`LinkText `:" + self.add_rst(".. _algm-%s-v%d:\n\n" % (alg_name, version)) if AlgorithmFactory.highestVersion(alg_name) == version: - self.add_rst(".. _algm-%s:\n" % alg_name) + self.add_rst(".. _algm-%s:\n\n" % alg_name) - def _insert_pagetitle(self): - """ - Outputs a title for the page - """ - title = "%s v%d" % (self.algorithm_name(), self.algorithm_version()) + # title + title = "%s v%d" % (alg_name, version) self.add_rst(self.make_header(title, True)) def _insert_toc(self): diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py index f52f4c635420..cad897687a4f 100644 --- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py +++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/base.py @@ -96,7 +96,7 @@ def make_header(self, name, pagetitle=False): str: ReST formatted header with algorithm_name as content. """ if pagetitle: - line = "\n" + "=" * len(name) + "\n" + line = "\n" + "=" * (len(name) + 1) + "\n" return line + name + line else: line = "\n" + "-" * len(name) + "\n" From e36bbb8e157e6eeed2503dd8afefc46898aa631a Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 16:14:08 +0100 Subject: [PATCH 82/86] Fix internal algorithm links. The first underscore is not included in the reference name. Refs #9562 --- .../algorithms/AbsorptionCorrection-v1.rst | 12 ++++---- .../algorithms/AlignAndFocusPowder-v1.rst | 30 +++++++++---------- .../docs/source/algorithms/AlphaCalc-v1.rst | 2 +- .../source/algorithms/AppendSpectra-v1.rst | 2 +- .../algorithms/CalculatePeaksHKL-v1.rst | 4 +-- .../source/algorithms/CloneMDWorkspace-v1.rst | 4 +-- .../source/algorithms/CompressEvents-v1.rst | 2 +- .../source/algorithms/ConjoinFiles-v1.rst | 2 +- .../algorithms/ConvertAxisByFormula-v1.rst | 4 +-- .../algorithms/ConvertSpectrumAxis-v1.rst | 2 +- .../algorithms/ConvertToDetectorFaceMD-v1.rst | 2 +- .../ConvertToDiffractionMDWorkspace-v1.rst | 12 ++++---- .../ConvertToDiffractionMDWorkspace-v2.rst | 12 ++++---- .../docs/source/algorithms/ConvertToMD-v1.rst | 6 ++-- .../ConvertToMatrixWorkspace-v1.rst | 2 +- .../algorithms/ConvertToReflectometryQ-v1.rst | 8 ++--- .../algorithms/CreateMDHistoWorkspace-v1.rst | 4 +-- .../algorithms/CreatePeaksWorkspace-v1.rst | 2 +- .../CreateSimulationWorkspace-v1.rst | 2 +- .../CreateTransmissionWorkspace-v1.rst | 2 +- .../CreateTransmissionWorkspaceAuto-v1.rst | 4 +-- .../CuboidGaugeVolumeAbsorption-v1.rst | 6 ++-- .../algorithms/DefineGaugeVolume-v1.rst | 4 +-- .../algorithms/DetectorEfficiencyCor-v1.rst | 2 +- .../DetectorEfficiencyVariation-v1.rst | 2 +- .../DgsAbsoluteUnitsReduction-v1.rst | 2 +- .../source/algorithms/ExponentialMD-v1.rst | 2 +- .../algorithms/ExtractFFTSpectrum-v1.rst | 6 ++-- .../source/algorithms/FilterByXValue-v1.rst | 2 +- .../source/algorithms/FindClusterFaces-v1.rst | 2 +- .../algorithms/FindDeadDetectors-v1.rst | 2 +- .../FindDetectorsOutsideLimits-v1.rst | 4 +-- .../docs/source/algorithms/FindPeaks-v1.rst | 6 ++-- .../docs/source/algorithms/FindPeaksMD-v1.rst | 2 +- .../docs/source/algorithms/FitPeak-v1.rst | 2 +- .../algorithms/FitPowderDiffPeaks-v1.rst | 2 +- .../algorithms/GenerateEventsFilter-v1.rst | 14 ++++----- .../algorithms/GetDetOffsetsMultiPeaks-v1.rst | 6 ++-- .../algorithms/GetDetectorOffsets-v1.rst | 6 ++-- .../docs/source/algorithms/GetEiMonDet-v1.rst | 2 +- .../algorithms/HRPDSlabCanAbsorption-v1.rst | 4 +-- .../algorithms/IdentifyNoisyDetectors-v1.rst | 4 +-- .../algorithms/ImportMDEventWorkspace-v1.rst | 6 ++-- .../algorithms/ImportMDHistoWorkspace-v1.rst | 4 +-- .../algorithms/IntegratePeakTimeSlices-v1.rst | 2 +- .../source/algorithms/IntegratePeaksMD-v1.rst | 4 +-- .../source/algorithms/IntegratePeaksMD-v2.rst | 4 +-- .../IntegratePeaksUsingClusters-v1.rst | 8 ++--- .../docs/source/algorithms/Integration-v1.rst | 2 +- .../algorithms/InterpolatingRebin-v1.rst | 4 +-- .../docs/source/algorithms/LoadAscii-v1.rst | 4 +-- .../source/algorithms/LoadDspacemap-v1.rst | 2 +- .../source/algorithms/LoadEventNexus-v1.rst | 4 +-- .../source/algorithms/LoadFullprofFile-v1.rst | 2 +- .../docs/source/algorithms/LoadGSS-v1.rst | 2 +- .../docs/source/algorithms/LoadIsawUB-v1.rst | 2 +- .../source/algorithms/LoadLiveData-v1.rst | 4 +-- .../docs/source/algorithms/LoadLog-v1.rst | 2 +- .../algorithms/LoadLogPropertyTable-v1.rst | 2 +- .../docs/source/algorithms/LoadMD-v1.rst | 2 +- .../source/algorithms/LoadMappingTable-v1.rst | 2 +- .../docs/source/algorithms/LoadMuonLog-v1.rst | 4 +-- .../docs/source/algorithms/LoadNexus-v1.rst | 2 +- .../source/algorithms/LoadNexusLogs-v1.rst | 4 +-- .../algorithms/LoadNexusProcessed-v1.rst | 2 +- .../docs/source/algorithms/LoadRaw-v3.rst | 8 ++--- .../docs/source/algorithms/LogarithmMD-v1.rst | 2 +- .../docs/source/algorithms/MaskBins-v1.rst | 10 +++---- .../algorithms/MaskBinsFromTable-v1.rst | 2 +- .../source/algorithms/MaskDetectors-v1.rst | 2 +- .../algorithms/MaskDetectorsInShape-v1.rst | 4 +-- .../docs/source/algorithms/MaxMin-v1.rst | 4 +-- .../algorithms/MedianDetectorTest-v1.rst | 6 ++-- .../docs/source/algorithms/MergeMD-v1.rst | 2 +- .../source/algorithms/MergeMDFiles-v1.rst | 4 +-- .../docs/source/algorithms/MergeRuns-v1.rst | 2 +- .../source/algorithms/ModeratorTzero-v1.rst | 2 +- .../ModifyDetectorDotDatFile-v1.rst | 2 +- .../source/algorithms/MonitorLiveData-v1.rst | 8 ++--- .../docs/source/algorithms/MuonLoad-v1.rst | 2 +- .../algorithms/NormaliseByCurrent-v1.rst | 2 +- .../algorithms/NormaliseByDetector-v1.rst | 6 ++-- .../algorithms/NormaliseByPeakArea-v1.rst | 2 +- .../algorithms/NormaliseToMonitor-v1.rst | 6 ++-- .../source/algorithms/NormaliseToUnity-v1.rst | 4 +-- .../docs/source/algorithms/OneStepMDEW-v1.rst | 2 +- .../algorithms/PDLoadCharacterizations-v1.rst | 2 +- .../algorithms/PeakIntensityVsRadius-v1.rst | 8 ++--- .../source/algorithms/PeaksInRegion-v1.rst | 2 +- .../source/algorithms/PeaksOnSurface-v1.rst | 2 +- .../algorithms/PlotPeakByLogValue-v1.rst | 4 +-- .../Mantid/docs/source/algorithms/Plus-v1.rst | 2 +- .../docs/source/algorithms/PlusMD-v1.rst | 6 ++-- .../algorithms/PointByPointVCorrection-v1.rst | 2 +- .../source/algorithms/PoldiFitPeaks1D-v1.rst | 4 +-- .../algorithms/PoldiLoadChopperSlits-v1.rst | 2 +- .../source/algorithms/PoldiLoadIPP-v1.rst | 2 +- .../source/algorithms/PoldiLoadLog-v1.rst | 2 +- .../source/algorithms/PoldiLoadSpectra-v1.rst | 2 +- .../algorithms/PoldiPeakDetection-v2.rst | 2 +- .../algorithms/PoldiProjectAddDir-v1.rst | 2 +- .../algorithms/PoldiProjectAddFile-v1.rst | 2 +- .../source/algorithms/PoldiProjectRun-v1.rst | 24 +++++++-------- .../algorithms/PoldiRemoveDeadWires-v1.rst | 2 +- .../docs/source/algorithms/PowerMD-v1.rst | 2 +- .../source/algorithms/PredictPeaks-v1.rst | 6 ++-- Code/Mantid/docs/source/algorithms/Q1D-v2.rst | 2 +- Code/Mantid/docs/source/algorithms/Qxy-v1.rst | 4 +-- .../docs/source/algorithms/Rebin-v1.rst | 4 +-- .../docs/source/algorithms/Rebin2D-v1.rst | 2 +- .../algorithms/RebinByPulseTimes-v1.rst | 4 +-- .../source/algorithms/RebinToWorkspace-v1.rst | 2 +- .../RefinePowderInstrumentParameters-v3.rst | 2 +- .../ReflectometryReductionOne-v1.rst | 4 +-- .../ReflectometryReductionOneAuto-v1.rst | 4 +-- .../docs/source/algorithms/RemoveBins-v1.rst | 4 +-- .../ResizeRectangularDetector-v1.rst | 4 +-- .../source/algorithms/RetrieveRunInfo-v1.rst | 4 +-- .../source/algorithms/RunPythonScript-v1.rst | 2 +- .../algorithms/SANSWideAngleCorrection-v1.rst | 12 ++++---- .../algorithms/SCDCalibratePanels-v1.rst | 2 +- .../docs/source/algorithms/SassenaFFT-v1.rst | 2 +- .../docs/source/algorithms/SaveAscii-v1.rst | 2 +- .../source/algorithms/SaveFocusedXYE-v1.rst | 2 +- .../docs/source/algorithms/SaveIsawUB-v1.rst | 2 +- .../docs/source/algorithms/SaveMD-v1.rst | 2 +- .../docs/source/algorithms/SaveMask-v1.rst | 4 +-- .../docs/source/algorithms/SaveNXSPE-v1.rst | 2 +- .../docs/source/algorithms/SaveNexus-v1.rst | 2 +- .../algorithms/SaveNexusProcessed-v1.rst | 2 +- .../docs/source/algorithms/SavePAR-v1.rst | 2 +- .../docs/source/algorithms/SavePHX-v1.rst | 2 +- .../docs/source/algorithms/Scale-v1.rst | 4 +-- .../algorithms/SetSpecialCoordinates-v1.rst | 4 +-- .../docs/source/algorithms/SliceMD-v1.rst | 6 ++-- .../SpecularReflectionCalculateTheta-v1.rst | 2 +- .../algorithms/SphericalAbsorption-v1.rst | 2 +- .../source/algorithms/StartLiveData-v1.rst | 4 +-- .../docs/source/algorithms/StepScan-v1.rst | 6 ++-- .../docs/source/algorithms/Stitch1D-v3.rst | 2 +- .../source/algorithms/Stitch1DMany-v1.rst | 4 +-- .../docs/source/algorithms/StripPeaks-v1.rst | 2 +- .../algorithms/SumEventsByLogValue-v1.rst | 2 +- .../source/algorithms/SumRowColumn-v1.rst | 2 +- .../docs/source/algorithms/TransformMD-v1.rst | 2 +- .../docs/source/algorithms/UnwrapSNS-v1.rst | 4 +-- .../source/algorithms/WeightedMeanMD-v1.rst | 2 +- .../functions/NeutronBk2BkExpConvPVoigt.rst | 2 +- .../source/functions/ProductLinearExp.rst | 2 +- .../source/functions/ProductQuadraticExp.rst | 2 +- .../ThermalNeutronBk2BkExpConvPVoigt.rst | 2 +- 151 files changed, 287 insertions(+), 287 deletions(-) diff --git a/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst index cb971f0ab59b..fc1ba8e28f89 100644 --- a/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst +++ b/Code/Mantid/docs/source/algorithms/AbsorptionCorrection-v1.rst @@ -35,13 +35,13 @@ This flow chart is given as a way of selecting the most appropriate of the absorption correction algorithms. It also shows the algorithms that must be run first in each case. Note that this does not cover the following absorption correction algorithms: -:ref:`_algm-MonteCarloAbsorption` (correction factors for +:ref:`algm-MonteCarloAbsorption` (correction factors for a generic sample using a Monte Carlo instead of a numerical integration method), -:ref:`_algm-MultipleScatteringCylinderAbsorption` -& :ref:`_algm-AnvredCorrection` (corrections in a spherical +:ref:`algm-MultipleScatteringCylinderAbsorption` +& :ref:`algm-AnvredCorrection` (corrections in a spherical sample, using a method imported from ISAW). Also, HRPD users can use the -:ref:`_algm-HRPDSlabCanAbsorption` to add rudimentary +:ref:`algm-HRPDSlabCanAbsorption` to add rudimentary calculations of the effects of the sample holder. |AbsorptionFlow.png| Assumptions @@ -49,7 +49,7 @@ Assumptions This algorithm assumes that the (parallel) beam illuminates the entire sample **unless** a 'gauge volume' has been defined using the -:ref:`_algm-DefineGaugeVolume` algorithm (or by otherwise +:ref:`algm-DefineGaugeVolume` algorithm (or by otherwise adding a valid XML string `defining a shape `__ to a `Run `__ property called "GaugeVolume"). In this latter case only scattering within this volume @@ -57,7 +57,7 @@ shape `__ to a `Run `__ property called 'see'. The full sample is still used for the neutron paths. (**N.B.** If your gauge volume is of axis-aligned cuboid shape and fully enclosed by the sample then you will get a more accurate result from the -:ref:`_algm-CuboidGaugeVolumeAbsorption` +:ref:`algm-CuboidGaugeVolumeAbsorption` algorithm.) Restrictions on the input workspace diff --git a/Code/Mantid/docs/source/algorithms/AlignAndFocusPowder-v1.rst b/Code/Mantid/docs/source/algorithms/AlignAndFocusPowder-v1.rst index 79541547fe98..506880ab9d7b 100644 --- a/Code/Mantid/docs/source/algorithms/AlignAndFocusPowder-v1.rst +++ b/Code/Mantid/docs/source/algorithms/AlignAndFocusPowder-v1.rst @@ -13,23 +13,23 @@ This is a workflow algorithm that does the bulk of the work for time focusing diffraction data. This is done by executing several sub-algorithms as listed below. -#. :ref:`_algm-RemovePromptPulse` (event workspace only) -#. :ref:`_algm-CompressEvents` (event workspace only) -#. :ref:`_algm-CropWorkspace` -#. :ref:`_algm-MaskDetectors` -#. :ref:`_algm-Rebin` or :ref:`_algm-ResampleX` if not d-space binning -#. :ref:`_algm-AlignDetectors` +#. :ref:`algm-RemovePromptPulse` (event workspace only) +#. :ref:`algm-CompressEvents` (event workspace only) +#. :ref:`algm-CropWorkspace` +#. :ref:`algm-MaskDetectors` +#. :ref:`algm-Rebin` or :ref:`algm-ResampleX` if not d-space binning +#. :ref:`algm-AlignDetectors` #. If LRef, minwl, or DIFCref are specified: - #. :ref:`_algm-ConvertUnits` to time-of-flight - #. :ref:`_algm-UnwrapSNS` - #. :ref:`_algm-RemoveLowResTOF` - #. :ref:`_algm-ConvertUnits` to d-spacing + #. :ref:`algm-ConvertUnits` to time-of-flight + #. :ref:`algm-UnwrapSNS` + #. :ref:`algm-RemoveLowResTOF` + #. :ref:`algm-ConvertUnits` to d-spacing -#. :ref:`_algm-Rebin` if d-space binning -#. :ref:`_algm-DiffractionFocussing` -#. :ref:`_algm-SortEvents` (event workspace only) -#. :ref:`_algm-EditInstrumentGeometry` (if appropriate) -#. :ref:`_algm-ConvertUnits` to time-of-f +#. :ref:`algm-Rebin` if d-space binning +#. :ref:`algm-DiffractionFocussing` +#. :ref:`algm-SortEvents` (event workspace only) +#. :ref:`algm-EditInstrumentGeometry` (if appropriate) +#. :ref:`algm-ConvertUnits` to time-of-f .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AlphaCalc-v1.rst b/Code/Mantid/docs/source/algorithms/AlphaCalc-v1.rst index 59064e463f34..f53230c482b9 100644 --- a/Code/Mantid/docs/source/algorithms/AlphaCalc-v1.rst +++ b/Code/Mantid/docs/source/algorithms/AlphaCalc-v1.rst @@ -14,6 +14,6 @@ to the backward detector group. If Alpha is larger than 1 more counts has been collected in the forward group. This algorithm leave the input workspace unchanged. To group detectors -in a workspace use :ref:`_algm-GroupDetectors`. +in a workspace use :ref:`algm-GroupDetectors`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst b/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst index 66e561428adc..1a375bb215bf 100644 --- a/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst +++ b/Code/Mantid/docs/source/algorithms/AppendSpectra-v1.rst @@ -44,7 +44,7 @@ increasing by 1 for each spectrum. See Also ######## -- :ref:`_algm-ConjoinWorkspaces` for joining parts of the +- :ref:`algm-ConjoinWorkspaces` for joining parts of the same workspace. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CalculatePeaksHKL-v1.rst b/Code/Mantid/docs/source/algorithms/CalculatePeaksHKL-v1.rst index 7b7676e11ecd..3323a39de65a 100644 --- a/Code/Mantid/docs/source/algorithms/CalculatePeaksHKL-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CalculatePeaksHKL-v1.rst @@ -10,13 +10,13 @@ Description ----------- Uses the UB matrix on the sample to calculate the Miller indices for all -peaks in the peaks workspace. Unlike :ref:`_algm-IndexPeaks` this +peaks in the peaks workspace. Unlike :ref:`algm-IndexPeaks` this algorithm does not perform any mandatory optimization. This algorithm does not round the Miller indices to the nearest integer. Alternatives ------------ -:ref:`_algm-IndexPeaks` +:ref:`algm-IndexPeaks` .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CloneMDWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CloneMDWorkspace-v1.rst index de68b47f6c7d..0bdffabd6606 100644 --- a/Code/Mantid/docs/source/algorithms/CloneMDWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CloneMDWorkspace-v1.rst @@ -16,11 +16,11 @@ This algorithm will clones an existing If the InputWorkspace is a file-backed MDEventWorkspace, then the algorithm will copy the original file into a new one with the suffix '\_clone' added to its filename, in the same directory. Before the clone -operation, the file back-end will be updated using :ref:`_algm-SaveMD` +operation, the file back-end will be updated using :ref:`algm-SaveMD` with UpdateFileBackEnd=True. This may delay the operation. If you wish to clone a file-backed MDEventWorkspace to an in-memory -MDEventWorkspace, we recommend that you first call :ref:`_algm-SaveMD` +MDEventWorkspace, we recommend that you first call :ref:`algm-SaveMD` with UpdateFileBackEnd=True (if necessary), followed by a simple LoadMD call to the file in question. diff --git a/Code/Mantid/docs/source/algorithms/CompressEvents-v1.rst b/Code/Mantid/docs/source/algorithms/CompressEvents-v1.rst index f6642775a74d..181f03cac27b 100644 --- a/Code/Mantid/docs/source/algorithms/CompressEvents-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CompressEvents-v1.rst @@ -10,7 +10,7 @@ Description ----------- This algorithm starts by sorting the event lists by TOF; therefore you -may gain speed by calling :ref:`_algm-SortEvents` beforehand. +may gain speed by calling :ref:`algm-SortEvents` beforehand. Starting from the smallest TOF, all events within Tolerance are considered to be identical. Pulse times are ignored. A weighted event without time information is created; its TOF is the average value of the diff --git a/Code/Mantid/docs/source/algorithms/ConjoinFiles-v1.rst b/Code/Mantid/docs/source/algorithms/ConjoinFiles-v1.rst index baa13f1757a3..dbe686083e11 100644 --- a/Code/Mantid/docs/source/algorithms/ConjoinFiles-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConjoinFiles-v1.rst @@ -10,6 +10,6 @@ Description ----------- Conjoin two workspaces, which are file based. Uses -:ref:`_algm-ConjoinWorkspaces` to do the heavy-lifting. +:ref:`algm-ConjoinWorkspaces` to do the heavy-lifting. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertAxisByFormula-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertAxisByFormula-v1.rst index 41d08b2bdf07..1f56b4183690 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertAxisByFormula-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertAxisByFormula-v1.rst @@ -15,14 +15,14 @@ defined math formula. It will NOT adjust or rearrange the data values alterations that will rearrange the order of the axes are not recommended. This only works for MatrixWorkspaces, so will not work on Multi Dimensional Workspaces or Table Workspaces. Like the -:ref:`_algm-ConvertSpectrumAxis` algorithm the result of +:ref:`algm-ConvertSpectrumAxis` algorithm the result of this algorithm will have custom units defined for the axis you have altered, and as such may not work in all other algorithms. The algorithm can operate on the X or Y axis, but cannot alter the values of a spectrum axis (the axis used as the Y axis on newly loaded Raw data). If you wish to alter this axis use he -:ref:`_algm-ConvertSpectrumAxis` algorithm first. +:ref:`algm-ConvertSpectrumAxis` algorithm first. The formula is defined in a simple math syntax, please look at the usage examples to some ideas of what is possible, a full list of the functions diff --git a/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v1.rst index a40cc1906df8..b719fa626020 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertSpectrumAxis-v1.rst @@ -19,7 +19,7 @@ not found (i.e. if the instrument definition is incomplete) will not appear in the output workspace. For units other than :math:`\theta`, the value placed in the axis is -generated by using the :ref:`_algm-ConvertUnits` methods to +generated by using the :ref:`algm-ConvertUnits` methods to translate the values of the first and last bin for the current X-data unit into the target unit, then taking the mid-point of these. diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst index c2fc1d5f1368..91ba445da925 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToDetectorFaceMD-v1.rst @@ -27,7 +27,7 @@ bin. Zero bins are not converted to events (saving memory). Once created, the `MDEventWorkspace `__ can be viewed in the `SliceViewer `__. It can also be rebinned with -different parameters using :ref:`_algm-BinMD`. This allows you to view +different parameters using :ref:`algm-BinMD`. This allows you to view the data in detector-space. For example, you might use this feature to look at your detector's sensitivity as a function of position, as well as a function of TOF. You can also do line plots of the data. See this diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst index cd75eb1b9bd3..1461cffa477e 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst @@ -21,7 +21,7 @@ to HKL of the crystal. If the OutputWorkspace does NOT already exist, a default one is created. In order to define more precisely the parameters of the `MDEventWorkspace `__, use the -:ref:`_algm-CreateMDWorkspace` algorithm first. +:ref:`algm-CreateMDWorkspace` algorithm first. Types of Conversion ################### @@ -30,10 +30,10 @@ Types of Conversion each event is calculated in the experimental lab frame. - **Q (sample frame)**: the goniometer rotation of the sample is taken out, to give Q in the frame of the sample. See - :ref:`_algm-SetGoniometer` to specify the goniometer used in + :ref:`algm-SetGoniometer` to specify the goniometer used in the experiment. -- **HKL**: uses the UB matrix (see :ref:`_algm-SetUB`, - :ref:`_algm-FindUBUsingFFT` and others) to calculate the HKL +- **HKL**: uses the UB matrix (see :ref:`algm-SetUB`, + :ref:`algm-FindUBUsingFFT` and others) to calculate the HKL Miller indices of each event. Lorentz Correction @@ -49,7 +49,7 @@ Where :math:`\theta` is *half* of the neutron scattering angle wavelength in *Angstroms*. This correction is also done by the -:ref:`_algm-AnvredCorrection` algorithm, and will be set to +:ref:`algm-AnvredCorrection` algorithm, and will be set to false if that algorithm has been run on the input workspace. OneEventPerBin option @@ -71,7 +71,7 @@ must be created in physical memory (it cannot yet be cached to disk). One way to limit the memory used is to limit the OutputExtents to a smaller region and only convert part of the space. -Also, the :ref:`_algm-FindPeaksMD` algorithm may not work optimally +Also, the :ref:`algm-FindPeaksMD` algorithm may not work optimally because it depends partly on higher density of events causing more finely split boxes. diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst index cd75eb1b9bd3..1461cffa477e 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst @@ -21,7 +21,7 @@ to HKL of the crystal. If the OutputWorkspace does NOT already exist, a default one is created. In order to define more precisely the parameters of the `MDEventWorkspace `__, use the -:ref:`_algm-CreateMDWorkspace` algorithm first. +:ref:`algm-CreateMDWorkspace` algorithm first. Types of Conversion ################### @@ -30,10 +30,10 @@ Types of Conversion each event is calculated in the experimental lab frame. - **Q (sample frame)**: the goniometer rotation of the sample is taken out, to give Q in the frame of the sample. See - :ref:`_algm-SetGoniometer` to specify the goniometer used in + :ref:`algm-SetGoniometer` to specify the goniometer used in the experiment. -- **HKL**: uses the UB matrix (see :ref:`_algm-SetUB`, - :ref:`_algm-FindUBUsingFFT` and others) to calculate the HKL +- **HKL**: uses the UB matrix (see :ref:`algm-SetUB`, + :ref:`algm-FindUBUsingFFT` and others) to calculate the HKL Miller indices of each event. Lorentz Correction @@ -49,7 +49,7 @@ Where :math:`\theta` is *half* of the neutron scattering angle wavelength in *Angstroms*. This correction is also done by the -:ref:`_algm-AnvredCorrection` algorithm, and will be set to +:ref:`algm-AnvredCorrection` algorithm, and will be set to false if that algorithm has been run on the input workspace. OneEventPerBin option @@ -71,7 +71,7 @@ must be created in physical memory (it cannot yet be cached to disk). One way to limit the memory used is to limit the OutputExtents to a smaller region and only convert part of the space. -Also, the :ref:`_algm-FindPeaksMD` algorithm may not work optimally +Also, the :ref:`algm-FindPeaksMD` algorithm may not work optimally because it depends partly on higher density of events causing more finely split boxes. diff --git a/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst index 6b5dc167c713..f4588a561cf8 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToMD-v1.rst @@ -15,12 +15,12 @@ Used Subalgorithms The algorithm uses `Unit Factory `__ and existing unit conversion procedures from input Workspace Units to the Units, necessary for transformation into correspondent MD Event workspace. It also uses -:ref:`_algm-PreprocessDetectorsToMD` algorithm to help +:ref:`algm-PreprocessDetectorsToMD` algorithm to help with transformation to reciprocal space. If min, max or both lists of values (properties 12 and 13) for the algorithm are not specified, -:ref:`_algm-ConvertToMDMinMaxLocal` is used to estimate +:ref:`algm-ConvertToMDMinMaxLocal` is used to estimate missing min-max values. This algorithm is also used to calculate min-max values if specified min-max values are deemed incorrect (e.g. less values then dimensions or some min values are bigger then max values) @@ -51,7 +51,7 @@ Notes range to obtain MD workspace, which would correspond to an Elastic mode. #. A good guess on the limits can be obtained from the - :ref:`_algm-ConvertToMDMinMaxLocal` algorithm. + :ref:`algm-ConvertToMDMinMaxLocal` algorithm. How to write custom ConvertToMD plugin -------------------------------------- diff --git a/Code/Mantid/docs/source/algorithms/ConvertToMatrixWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToMatrixWorkspace-v1.rst index d8e9d2946595..230fe47e33ac 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToMatrixWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToMatrixWorkspace-v1.rst @@ -9,7 +9,7 @@ Description ----------- -This can also be performed using the :ref:`_algm-Rebin` algorithm and +This can also be performed using the :ref:`algm-Rebin` algorithm and having the "PreserveEvents" parameter set to false. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst index 0fde7b507bfc..c82db8fc1f5b 100644 --- a/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ConvertToReflectometryQ-v1.rst @@ -13,8 +13,8 @@ Prerequisites ############# The workspace spectrum axis should be converted to signed\_theta using -:ref:`_algm-ConvertSpectrumAxis` and the x axis should be -converted to Wavelength using :ref:`_algm-ConvertUnits` before +:ref:`algm-ConvertSpectrumAxis` and the x axis should be +converted to Wavelength using :ref:`algm-ConvertUnits` before running this algorithm. Histogram input workspaces are expected. The algorithm will looks for a specific log value called *stheta*, which @@ -51,8 +51,8 @@ where After Transformation #################### -You will usually want to rebin using :ref:`_algm-BinMD` or -:ref:`_algm-SliceMD` after transformation because the output workspaces +You will usually want to rebin using :ref:`algm-BinMD` or +:ref:`algm-SliceMD` after transformation because the output workspaces are not regularly binned. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CreateMDHistoWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateMDHistoWorkspace-v1.rst index 824910086e9e..d0040fcec45d 100644 --- a/Code/Mantid/docs/source/algorithms/CreateMDHistoWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreateMDHistoWorkspace-v1.rst @@ -31,9 +31,9 @@ Alternatives ------------ A very similar algorithm to this is -:ref:`_algm-ImportMDHistoWorkspace`, which takes it's +:ref:`algm-ImportMDHistoWorkspace`, which takes it's input signal and error values from a text file rather than from arrays. -Another alternative is to use :ref:`_algm-ConvertToMD` which works +Another alternative is to use :ref:`algm-ConvertToMD` which works on MatrixWorkspaces, and allows log values to be included in the dimensionality. diff --git a/Code/Mantid/docs/source/algorithms/CreatePeaksWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreatePeaksWorkspace-v1.rst index f4cd4a7a77d9..1db7511ce9f2 100644 --- a/Code/Mantid/docs/source/algorithms/CreatePeaksWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreatePeaksWorkspace-v1.rst @@ -10,7 +10,7 @@ Description ----------- Create an empty `PeaksWorkspace `__. Use -:ref:`_algm-LoadIsawPeaks` or :ref:`_algm-FindPeaksMD` to +:ref:`algm-LoadIsawPeaks` or :ref:`algm-FindPeaksMD` to create a peaks workspace with peaks. This workspace can serve as a starting point for modifying the diff --git a/Code/Mantid/docs/source/algorithms/CreateSimulationWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateSimulationWorkspace-v1.rst index c78b95659c76..fab1a6e469c0 100644 --- a/Code/Mantid/docs/source/algorithms/CreateSimulationWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreateSimulationWorkspace-v1.rst @@ -11,7 +11,7 @@ Description Creates a blank workspace for a given instrument with the option of pulling in detector tables from a RAW/NeXus data file. The histogram -sizes are given by binning parameters, see :ref:`_algm-Rebin`, rather +sizes are given by binning parameters, see :ref:`algm-Rebin`, rather than explicit data arrays. There is also an option to set the X axis unit. diff --git a/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspace-v1.rst index 0f317f479140..3ff2562f65be 100644 --- a/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspace-v1.rst @@ -11,7 +11,7 @@ Description Creates a transmission run workspace given one or more TOF workspaces and the original run Workspace. If two workspaces are provided, then the -workspaces are stitched together using :ref:`_algm-Stitch1D`. +workspaces are stitched together using :ref:`algm-Stitch1D`. InputWorkspaces must be in TOF. A single output workspace is generated with x-units of Wavlength in angstroms. diff --git a/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspaceAuto-v1.rst b/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspaceAuto-v1.rst index e426227ecff5..0988565e7fb6 100644 --- a/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspaceAuto-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CreateTransmissionWorkspaceAuto-v1.rst @@ -10,12 +10,12 @@ Description ----------- Facade over -:ref:`_algm-CreateTransmissionWorkspace`. Pull +:ref:`algm-CreateTransmissionWorkspace`. Pull numeric parameters out of the instrument parameters where possible. You can override any of these automatically applied defaults by providing your own value for the input. -See :ref:`_algm-CreateTransmissionWorkspace` for +See :ref:`algm-CreateTransmissionWorkspace` for more information on the wrapped algorithm. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst index 9e4b6e55f9c3..455de114992c 100644 --- a/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst +++ b/Code/Mantid/docs/source/algorithms/CuboidGaugeVolumeAbsorption-v1.rst @@ -15,9 +15,9 @@ within a cuboid region of a sample with the dimensions and material properties given. **The gauge volume generated will be an axis-aligned cuboid centred on the sample (centre) position. The sample must fully enclose this cuboid. If this does not meet your needs you can instead -use the general :ref:`_algm-AbsorptionCorrection` +use the general :ref:`algm-AbsorptionCorrection` algorithm in conjunction with -:ref:`_algm-DefineGaugeVolume`.** +:ref:`algm-DefineGaugeVolume`.** Factors are calculated for each spectrum (i.e. detector position) and wavelength point, as defined by the input workspace. The sample is @@ -37,7 +37,7 @@ The input workspace must have units of wavelength. The `instrument `__ associated with the workspace must be fully defined because detector, source & sample position are needed. A sample shape must have been defined using, e.g., -:ref:`_algm-CreateSampleShape` and the gauge volume must be +:ref:`algm-CreateSampleShape` and the gauge volume must be fully within the sample. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DefineGaugeVolume-v1.rst b/Code/Mantid/docs/source/algorithms/DefineGaugeVolume-v1.rst index fe77bff5ccc9..530469e351b2 100644 --- a/Code/Mantid/docs/source/algorithms/DefineGaugeVolume-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DefineGaugeVolume-v1.rst @@ -12,9 +12,9 @@ Description Intended for use on data from engineering beamlines, this algorithm creates a shape object for use as the 'gauge volume' (i.e. the portion of the sample that is visible to the detectors in a given run) of a -larger sample in the :ref:`_algm-AbsorptionCorrection` +larger sample in the :ref:`algm-AbsorptionCorrection` algorithm. The sample shape will also need to be defined using, e.g., -the :ref:`_algm-CreateSampleShape` algorithm. Shapes are +the :ref:`algm-CreateSampleShape` algorithm. Shapes are defined using XML descriptions that can be found `here `__. diff --git a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCor-v1.rst b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCor-v1.rst index 32c6090e03ed..cdc14f02fc2a 100644 --- a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCor-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyCor-v1.rst @@ -17,7 +17,7 @@ and their :sup:`3`\ He partial pressure, wall thickness and radius stored in the input workspace, the first in atmospheres and the last two in metres. That workspace then needs to be converted so that its X-values are in `units `__ of energy transfer, e.g. using -the :ref:`_algm-ConvertUnits` algorithm. +the :ref:`algm-ConvertUnits` algorithm. To estimate the true number of neutrons that entered the detector the counts in each bin are divided by the detector efficiency of that diff --git a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst index 3aae9e9b6665..39982a0ef158 100644 --- a/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DetectorEfficiencyVariation-v1.rst @@ -33,6 +33,6 @@ positive value. Child algorithms used ##################### -Uses the :ref:`_algm-Integration` algorithm to sum the spectra. +Uses the :ref:`algm-Integration` algorithm to sum the spectra. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst b/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst index 987e6527bc73..7f7e8f61aeff 100644 --- a/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst +++ b/Code/Mantid/docs/source/algorithms/DgsAbsoluteUnitsReduction-v1.rst @@ -37,7 +37,7 @@ represents detector diagnostic parameters and they are detailed in the table below. +-----------------------------+----------------------+-------------------------------------------------------+ -| Parameter | IPF Mapping | :ref:`_algm-DetectorDiagnostic` Mapping | +| Parameter | IPF Mapping | :ref:`algm-DetectorDiagnostic` Mapping | +=============================+======================+=======================================================+ | HighCounts | diag\_huge | HighThreshold | +-----------------------------+----------------------+-------------------------------------------------------+ diff --git a/Code/Mantid/docs/source/algorithms/ExponentialMD-v1.rst b/Code/Mantid/docs/source/algorithms/ExponentialMD-v1.rst index afa3421bfc56..ed6216bbc9ad 100644 --- a/Code/Mantid/docs/source/algorithms/ExponentialMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ExponentialMD-v1.rst @@ -18,6 +18,6 @@ The error :math:`da` becomes :math:`df^2 = f^2 * da^2` This algorithm cannot be run on a `MDEventWorkspace `__. Its equivalent on a `MatrixWorkspace `__ is called -:ref:`_algm-Exponential`. +:ref:`algm-Exponential`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ExtractFFTSpectrum-v1.rst b/Code/Mantid/docs/source/algorithms/ExtractFFTSpectrum-v1.rst index 51a293e300c8..1df93c0fbb67 100644 --- a/Code/Mantid/docs/source/algorithms/ExtractFFTSpectrum-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ExtractFFTSpectrum-v1.rst @@ -9,15 +9,15 @@ Description ----------- -This algorithm iterates the :ref:`_algm-FFT` algorithm on each spectrum of +This algorithm iterates the :ref:`algm-FFT` algorithm on each spectrum of InputWorkspace, computing the Fourier Transform and storing the transformed spectrum in OutputWorkspace. If InputImagWorkspace is also passed, then the pair spectrum *i* of InputWorkspace (real) and spectrum *i* of InputImagWorkspace (real) are taken together as spectrum *i* of a -complex workspace, on which :ref:`_algm-FFT` is applied. +complex workspace, on which :ref:`algm-FFT` is applied. The FFTPart parameter specifies which transform is selected from the -output of the :ref:`_algm-FFT` algorithm: +output of the :ref:`algm-FFT` algorithm: For the case of input containing real and imaginary workspaces: diff --git a/Code/Mantid/docs/source/algorithms/FilterByXValue-v1.rst b/Code/Mantid/docs/source/algorithms/FilterByXValue-v1.rst index baa6588fde06..41a176db7d43 100644 --- a/Code/Mantid/docs/source/algorithms/FilterByXValue-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FilterByXValue-v1.rst @@ -15,7 +15,7 @@ depending on which of xmin & xmax are given. This algorithm pays no attention whatsoever to any binning that has been set on the input workspace (though it will be carried over to the output). If you need to affect the bin boundaries as well, or want to remove some -spectra/pixels, consider using :ref:`_algm-CropWorkspace` +spectra/pixels, consider using :ref:`algm-CropWorkspace` instead. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindClusterFaces-v1.rst b/Code/Mantid/docs/source/algorithms/FindClusterFaces-v1.rst index c994a0129353..a658287ab29e 100644 --- a/Code/Mantid/docs/source/algorithms/FindClusterFaces-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FindClusterFaces-v1.rst @@ -13,7 +13,7 @@ Algorithm takes an image workspace (a.k.a `IMDHistoWorkspace `__) and determines the faces of the clusters contained within the image. The image is expected to be a labeled image workspace outputted from -:ref:`_algm-IntegratePeaksUsingClusters`. The +:ref:`algm-IntegratePeaksUsingClusters`. The algorithm generates a `TableWorkspace `__ as output, which contains all the cluster edge faces required to draw the outer edge of all clusters within the workspace. diff --git a/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst index 177d79595ad2..bee6bd721a1c 100644 --- a/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FindDeadDetectors-v1.rst @@ -19,6 +19,6 @@ instrument visualization tools. ChildAlgorithms used #################### -Uses the :ref:`_algm-Integration` algorithm to sum the spectra. +Uses the :ref:`algm-Integration` algorithm to sum the spectra. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst b/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst index cae8dba016e2..92ba0b502b12 100644 --- a/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FindDetectorsOutsideLimits-v1.rst @@ -14,12 +14,12 @@ counting. It reads the input workspace and identifies all histograms with numbers of counts outside the user defined upper and lower limits. Each spectra that fails has its spectra masked on the output workspace. Spectra that pass the test have their data set to a positive value, 1.0. -The output workspace can be fed to :ref:`_algm-MaskDetectors` to +The output workspace can be fed to :ref:`algm-MaskDetectors` to mask the same spectra on another workspace. ChildAlgorithms used #################### -Uses the :ref:`_algm-Integration` algorithm to sum the spectra. +Uses the :ref:`algm-Integration` algorithm to sum the spectra. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst index c547cae179a7..3b87b79f4ae2 100644 --- a/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FindPeaks-v1.rst @@ -25,9 +25,9 @@ backgroundintercept & backgroundslope. Subalgorithms used ################## -FindPeaks uses the :ref:`_algm-SmoothData` algorithm to, well, +FindPeaks uses the :ref:`algm-SmoothData` algorithm to, well, smooth the data - a necessary step to identify peaks in statistically -fluctuating data. The :ref:`_algm-Fit` algorithm is used to fit candidate +fluctuating data. The :ref:`algm-Fit` algorithm is used to fit candidate peaks. Treating weak peaks vs. high background @@ -46,7 +46,7 @@ Criteria To Validate Peaks Found ################################ FindPeaks finds peaks by fitting a Guassian with background to a certain -range in the input histogram. :ref:`_algm-Fit` may not give a correct +range in the input histogram. :ref:`algm-Fit` may not give a correct result even if chi^2 is used as criteria alone. Thus some other criteria are provided as options to validate the result diff --git a/Code/Mantid/docs/source/algorithms/FindPeaksMD-v1.rst b/Code/Mantid/docs/source/algorithms/FindPeaksMD-v1.rst index 6925ec48f11c..f30672b31504 100644 --- a/Code/Mantid/docs/source/algorithms/FindPeaksMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FindPeaksMD-v1.rst @@ -38,7 +38,7 @@ Each peak created is placed in the output replace the old one. This algorithm works on a `MDHistoWorkspace `__ -resulting from the :ref:`_algm-BinMD` algorithm also. It works in the +resulting from the :ref:`algm-BinMD` algorithm also. It works in the same way, except that the center of each bin is used since the centroid is not accessible. It may give better results on `Workspace2D `__'s that were converted to diff --git a/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst b/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst index 40c7d39e1ccb..c28df08668c0 100644 --- a/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FitPeak-v1.rst @@ -36,7 +36,7 @@ Criteria To Validate Peaks Found ################################ FindPeaks finds peaks by fitting a Guassian with background to a certain -range in the input histogram. :ref:`_algm-Fit` may not give a correct +range in the input histogram. :ref:`algm-Fit` may not give a correct result even if chi^2 is used as criteria alone. Thus some other criteria are provided as options to validate the result diff --git a/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst index 6100fcff3fa4..bcfed72e08d0 100644 --- a/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/FitPowderDiffPeaks-v1.rst @@ -91,7 +91,7 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in the wiki page of -:ref:`_algm-LeBailFit`. +:ref:`algm-LeBailFit`. Example of Working With Other Algorithms ######################################## diff --git a/Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst b/Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst index feea2a9ed0e3..0aef297f8496 100644 --- a/Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GenerateEventsFilter-v1.rst @@ -13,20 +13,20 @@ This algorithm is able to generate event splitters according to user's requirement for filtering events. The generated time splitters are stored either in a `SplittersWorkspace `__ or a `MatrixWorkspace `__. Both of them will be used by -algorithm :ref:`_algm-FilterEvents` to filter events from an +algorithm :ref:`algm-FilterEvents` to filter events from an `EventWorkspace `__. This algorithm is designed as a general-purposed event splitter -generator. Combined with :ref:`_algm-FilterEvents`, it will +generator. Combined with :ref:`algm-FilterEvents`, it will replace -- :ref:`_algm-FilterByTime` -- :ref:`_algm-FilterByLogValue` +- :ref:`algm-FilterByTime` +- :ref:`algm-FilterByLogValue` Moreover, the time resolution of these two algorithms is microseconds, i.e., the wall time of an (neutron) event. While the original -:ref:`_algm-FilterByTime` and -:ref:`_algm-FilterByLogValue` are of the resolution of pulse +:ref:`algm-FilterByTime` and +:ref:`algm-FilterByLogValue` are of the resolution of pulse time. It is also enhanced to process the fast frequency sample logs, which can be even faster than chopper frequencies. @@ -124,7 +124,7 @@ GenerateEventFilter tends to be more conservative, and thus the first splitter will start from the first log time. 2. FilterByLogValue only filters events at the resolution of pulse time, -while :ref:`_algm-GenerateEventsFilter` can improve the +while :ref:`algm-GenerateEventsFilter` can improve the resolution to 1 micro second. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst index 85f41e11bbe4..3b500173a95f 100644 --- a/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GetDetOffsetsMultiPeaks-v1.rst @@ -13,7 +13,7 @@ Description ----------- This algorithm requires a workspace that is both in d-spacing, but has -also been preprocessed by the :ref:`_algm-CrossCorrelate` +also been preprocessed by the :ref:`algm-CrossCorrelate` algorithm. In this first step you select one spectrum to be the reference spectrum and all of the other spectrum are cross correlated against it. Each output spectrum then contains a peak whose location @@ -27,8 +27,8 @@ calculated as: This is then written into a `.cal file `__ for every detector that contributes to that spectrum. All of the entries in the cal file are initially set to both be included, but also to all group into a -single group on :ref:`_algm-DiffractionFocussing`. The -:ref:`_algm-CreateCalFileByNames` algorithm can be used to +single group on :ref:`algm-DiffractionFocussing`. The +:ref:`algm-CreateCalFileByNames` algorithm can be used to alter the grouping in the cal file. Fit for peak offset diff --git a/Code/Mantid/docs/source/algorithms/GetDetectorOffsets-v1.rst b/Code/Mantid/docs/source/algorithms/GetDetectorOffsets-v1.rst index c9d4e71ed7f2..33536347d520 100644 --- a/Code/Mantid/docs/source/algorithms/GetDetectorOffsets-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GetDetectorOffsets-v1.rst @@ -10,7 +10,7 @@ Description ----------- This algorithm requires a workspace that is both in d-spacing, but has -also been preprocessed by the :ref:`_algm-CrossCorrelate` +also been preprocessed by the :ref:`algm-CrossCorrelate` algorithm. In this first step you select one spectrum to be the reference spectrum and all of the other spectrum are cross correlated against it. Each output spectrum then contains a peak whose location @@ -26,8 +26,8 @@ calculated as: This is then written into a `.cal file `__ for every detector that contributes to that spectrum. All of the entries in the cal file are initially set to both be included, but also to all group into a -single group on :ref:`_algm-DiffractionFocussing`. The -:ref:`_algm-CreateCalFileByNames` algorithm can be used to +single group on :ref:`algm-DiffractionFocussing`. The +:ref:`algm-CreateCalFileByNames` algorithm can be used to alter the grouping in the cal file. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/GetEiMonDet-v1.rst b/Code/Mantid/docs/source/algorithms/GetEiMonDet-v1.rst index 10a8a79e3a60..1b697418dbad 100644 --- a/Code/Mantid/docs/source/algorithms/GetEiMonDet-v1.rst +++ b/Code/Mantid/docs/source/algorithms/GetEiMonDet-v1.rst @@ -14,6 +14,6 @@ distance from the sample to detectors is dmin, one will select detectors in the range dmin to dmin\*MaximumDistanceFraction. These are grouped together, appended to a copy of the monitor workspace, then fed to GetEi algorithm. The output of this algorithm is identical to that of -:ref:`_algm-GetEi`. +:ref:`algm-GetEi`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst index 3dcb51cca2c0..bd2f1ec81eb7 100644 --- a/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst +++ b/Code/Mantid/docs/source/algorithms/HRPDSlabCanAbsorption-v1.rst @@ -10,7 +10,7 @@ Description ----------- This algorithm is a refinement of the -:ref:`_algm-FlatPlateAbsorption` algorithm for the specific +:ref:`algm-FlatPlateAbsorption` algorithm for the specific case of an HRPD 'slab can' sample holder. It uses the aforementioned generic algorithm to calculate the correction due to the sample itself, using numerical integration. This is done using the standard height x @@ -40,7 +40,7 @@ defined because detector, source & sample position are needed. ChildAlgorithms used #################### -The :ref:`_algm-FlatPlateAbsorption` algorithm is used to +The :ref:`algm-FlatPlateAbsorption` algorithm is used to calculate the correction due to the sample itself. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IdentifyNoisyDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/IdentifyNoisyDetectors-v1.rst index d375513104c7..a30e3d471bab 100644 --- a/Code/Mantid/docs/source/algorithms/IdentifyNoisyDetectors-v1.rst +++ b/Code/Mantid/docs/source/algorithms/IdentifyNoisyDetectors-v1.rst @@ -26,8 +26,8 @@ The process for this algorithm is: This is repeated three times from the second step. -This uses the :ref:`_algm-Integration`, :ref:`_algm-Power` and -:ref:`_algm-Divide` algorithms for the first step. +This uses the :ref:`algm-Integration`, :ref:`algm-Power` and +:ref:`algm-Divide` algorithms for the first step. The lower bound for the integration is currently fixed to 2000. diff --git a/Code/Mantid/docs/source/algorithms/ImportMDEventWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ImportMDEventWorkspace-v1.rst index b0edaddc91b3..d76aeb3034bb 100644 --- a/Code/Mantid/docs/source/algorithms/ImportMDEventWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ImportMDEventWorkspace-v1.rst @@ -53,8 +53,8 @@ Alternatives ------------ Other alternatives to importing/creating MDWorkspaces are -:ref:`_algm-ImportMDHistoWorkspace`, -:ref:`_algm-CreateMDHistoWorkspace` and -:ref:`_algm-CreateMDWorkspace` +:ref:`algm-ImportMDHistoWorkspace`, +:ref:`algm-CreateMDHistoWorkspace` and +:ref:`algm-CreateMDWorkspace` .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst index 13342980d868..34dfbb3ab759 100644 --- a/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ImportMDHistoWorkspace-v1.rst @@ -36,9 +36,9 @@ Alternatives ------------ A very similar algorithm to this is -:ref:`_algm-CreateMDHistoWorkspace`, which takes it's +:ref:`algm-CreateMDHistoWorkspace`, which takes it's input signal and error values from arrays rather than a text file. -Another alternative is to use :ref:`_algm-ConvertToMD` which works +Another alternative is to use :ref:`algm-ConvertToMD` which works on MatrixWorkspaces, and allows log values to be included in the dimensionality. diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeakTimeSlices-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeakTimeSlices-v1.rst index f2f27ba8d280..a18b641125f7 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeakTimeSlices-v1.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeakTimeSlices-v1.rst @@ -42,7 +42,7 @@ This algorithm has been carefully tweaked to give good results for interior peaks only. Peaks close to the edge of the detector may not give good results. -This Algorithm is also used by the :ref:`_algm-PeakIntegration` +This Algorithm is also used by the :ref:`algm-PeakIntegration` algorithm when the Fit tag is selected. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst index 364b13f859bf..2272f6a98d96 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v1.rst @@ -19,9 +19,9 @@ The algorithms takes two input workspaces: - A MDEventWorkspace containing the events in multi-dimensional space. This would be the output of - :ref:`_algm-ConvertToDiffractionMDWorkspace`. + :ref:`algm-ConvertToDiffractionMDWorkspace`. - As well as a PeaksWorkspace containing single-crystal peak locations. - This could be the output of :ref:`_algm-FindPeaksMD` + This could be the output of :ref:`algm-FindPeaksMD` - The OutputWorkspace will contain a copy of the input PeaksWorkspace, with the integrated intensity and error found being filled in. diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst index 364b13f859bf..2272f6a98d96 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksMD-v2.rst @@ -19,9 +19,9 @@ The algorithms takes two input workspaces: - A MDEventWorkspace containing the events in multi-dimensional space. This would be the output of - :ref:`_algm-ConvertToDiffractionMDWorkspace`. + :ref:`algm-ConvertToDiffractionMDWorkspace`. - As well as a PeaksWorkspace containing single-crystal peak locations. - This could be the output of :ref:`_algm-FindPeaksMD` + This could be the output of :ref:`algm-FindPeaksMD` - The OutputWorkspace will contain a copy of the input PeaksWorkspace, with the integrated intensity and error found being filled in. diff --git a/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst b/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst index 6b1c63ed8ff6..f8c04005e694 100644 --- a/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst +++ b/Code/Mantid/docs/source/algorithms/IntegratePeaksUsingClusters-v1.rst @@ -19,8 +19,8 @@ purposes. **The algorithm makes no assmptions about Peak shape or size** and can therfore be used where integration over defined shapes -:ref:`_algm-IntegratePeaksMD` and -:ref:`_algm-IntegrateEllipsoids`, for example, will not +:ref:`algm-IntegratePeaksMD` and +:ref:`algm-IntegrateEllipsoids`, for example, will not work. .. figure:: /images/ClusterImage.png @@ -29,7 +29,7 @@ work. ClusterImage.png *Cluster Label region displayed in the `SliceViewer `__. Peak centre is marked with an X. The green circle illustrates the -integration region used by :ref:`_algm-IntegratePeaksMD`* +integration region used by :ref:`algm-IntegratePeaksMD`* A threshold for the Peak should be defined below which, parts of the image are treated as background. The normalization method in combination @@ -39,7 +39,7 @@ effective bin size do not affect the background filtering. This algorithm uses an imaging technique, and it is therefore important that the MDHistoWorkspace you are using is binned to a sufficient -resolution via :ref:`_algm-BinMD`. You can overlay the intergrated peaks +resolution via :ref:`algm-BinMD`. You can overlay the intergrated peaks workspace in the `Slice Viewer `__ over the generated Cluster Labeled OutputWorkspaceMD to see what the interation diff --git a/Code/Mantid/docs/source/algorithms/Integration-v1.rst b/Code/Mantid/docs/source/algorithms/Integration-v1.rst index e618c65e9715..9917be8ce3b1 100644 --- a/Code/Mantid/docs/source/algorithms/Integration-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Integration-v1.rst @@ -39,7 +39,7 @@ EventWorkspaces If an `EventWorkspace `__ is used as the input, the output will be a `MatrixWorkspace `__. -:ref:`_algm-Rebin` is recommended if you want to keep the workspace as an +:ref:`algm-Rebin` is recommended if you want to keep the workspace as an EventWorkspace. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst b/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst index 0c748d976e97..384db8926c6a 100644 --- a/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst +++ b/Code/Mantid/docs/source/algorithms/InterpolatingRebin-v1.rst @@ -14,7 +14,7 @@ whose bins have large numbers of counts which vary smoothly e.g. monitor spectra. The "params" property defines the new bin boundaries using the same -syntax as in :ref:`_algm-Rebin`. That is, the first number is the first +syntax as in :ref:`algm-Rebin`. That is, the first number is the first bin boundary and the second number is the width of the bins. Bins are created until the third number would be exceeded, the third number is the x-value of the last bin. There can be further pairs of numbers, the @@ -43,7 +43,7 @@ respective input bin data points. Example Rebin param strings ########################### -The same syntax as for :ref:`_algm-Rebin` +The same syntax as for :ref:`algm-Rebin` 0,100,20000 From 0 rebin in constant size bins of 100 up to 20,000 diff --git a/Code/Mantid/docs/source/algorithms/LoadAscii-v1.rst b/Code/Mantid/docs/source/algorithms/LoadAscii-v1.rst index d0f8e1d0eb74..16ed08ba4f12 100644 --- a/Code/Mantid/docs/source/algorithms/LoadAscii-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadAscii-v1.rst @@ -14,7 +14,7 @@ stores it in a `Workspace2D `__ as data points. The data in the file must be organized in columns separated by commas, tabs, spaces, colons or semicolons. Only one separator type can be used throughout the file; use the "Separator" property to tell the algorithm which to use. -The algorithm :ref:`_algm-SaveAscii` is normally able to produce such +The algorithm :ref:`algm-SaveAscii` is normally able to produce such a file. By default the algorithm attempts to guess which lines are header lines @@ -34,7 +34,7 @@ The number of bins is defined by the number of rows. The resulting workspace will have common X binning for all spectra. -This algorithm cannot load a file created by :ref:`_algm-SaveAscii` +This algorithm cannot load a file created by :ref:`algm-SaveAscii` if it has X errors written and several spectra. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadDspacemap-v1.rst b/Code/Mantid/docs/source/algorithms/LoadDspacemap-v1.rst index eadcf8f041b1..0b500ad5c599 100644 --- a/Code/Mantid/docs/source/algorithms/LoadDspacemap-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadDspacemap-v1.rst @@ -13,6 +13,6 @@ Loads a Dspacemap file (POWGEN binary, VULCAN binary or ascii format) into an OffsetsWorkspace. The resulting workspace can then be used with, e.g. -:ref:`_algm-AlignDetectors` to perform calibration. +:ref:`algm-AlignDetectors` to perform calibration. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst index 0fd7e1165ece..5c0612667b39 100644 --- a/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadEventNexus-v1.rst @@ -17,7 +17,7 @@ Since it is an `EventWorkspace `__, it can be rebinned to finer bins with no loss of data. Sample logs, such as motor positions or e.g. temperature vs time, are -also loaded using the :ref:`_algm-LoadNexusLogs` child algorithm. +also loaded using the :ref:`algm-LoadNexusLogs` child algorithm. Optional properties ################### @@ -46,7 +46,7 @@ Veto Pulses ########### Veto pulses can be filtered out in a separate step using -:ref:`_algm-FilterByLogValue`: +:ref:`algm-FilterByLogValue`: ``FilterByLogValue(InputWorkspace="ws", OutputWorkspace="ws", LogName="veto_pulse_time", PulseFilter="1")`` diff --git a/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst b/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst index 9da459786379..d5f90eab56ef 100644 --- a/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadFullprofFile-v1.rst @@ -41,6 +41,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in the wiki page of -:ref:`_algm-LeBailFit`. +:ref:`algm-LeBailFit`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst b/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst index 3c084b27db93..0f857af315c4 100644 --- a/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst @@ -9,7 +9,7 @@ Description ----------- -Loads a GSS file such as that saved by :ref:`_algm-SaveGSS`. +Loads a GSS file such as that saved by :ref:`algm-SaveGSS`. Two types of GSAS files are supported diff --git a/Code/Mantid/docs/source/algorithms/LoadIsawUB-v1.rst b/Code/Mantid/docs/source/algorithms/LoadIsawUB-v1.rst index 24a271eaf923..a5ca9966fca3 100644 --- a/Code/Mantid/docs/source/algorithms/LoadIsawUB-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadIsawUB-v1.rst @@ -12,7 +12,7 @@ Description Loads the UB matrix into a workspace from an ISAW-style UB matrix ASCII file. -You can use the :ref:`_algm-SaveIsawUB` algorithm to save to this +You can use the :ref:`algm-SaveIsawUB` algorithm to save to this format. The matrix in the file is the transpose of the UB Matrix. The UB matrix diff --git a/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst index 8cad6eaa038f..5efae6721b26 100644 --- a/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadLiveData-v1.rst @@ -10,7 +10,7 @@ Description ----------- This algorithm is called on a regular interval by the -:ref:`_algm-MonitorLiveData` algorithm. **It should not be +:ref:`algm-MonitorLiveData` algorithm. **It should not be necessary to call LoadLiveData directly.** .. figure:: /images/LoadLiveData_flow.png @@ -65,7 +65,7 @@ Data Accumulation chunk. - If you select 'Add', the chunks of processed data will be added - using :ref:`_algm-Plus` or :ref:`_algm-PlusMD`. + using :ref:`algm-Plus` or :ref:`algm-PlusMD`. - If you select 'Replace', then the output workspace will always be equal to the latest processed chunk. - If you select 'Append', then the spectra from each chunk will be diff --git a/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst index 575313746ce7..f87485336648 100644 --- a/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadLog-v1.rst @@ -27,7 +27,7 @@ that may contain spaces. Parent algorithm ################ -LoadLog is also a child algorithm of :ref:`_algm-LoadRaw`, i.e. it gets +LoadLog is also a child algorithm of :ref:`algm-LoadRaw`, i.e. it gets called whenever LoadRaw is executed. Load SNS text log file diff --git a/Code/Mantid/docs/source/algorithms/LoadLogPropertyTable-v1.rst b/Code/Mantid/docs/source/algorithms/LoadLogPropertyTable-v1.rst index 345d62ee2c2b..af785f3bceb9 100644 --- a/Code/Mantid/docs/source/algorithms/LoadLogPropertyTable-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadLogPropertyTable-v1.rst @@ -21,7 +21,7 @@ There are special cases for: It should: -#. Load any file type that :ref:`_algm-Load` can handle. +#. Load any file type that :ref:`algm-Load` can handle. #. Not crash with multiperiod data - although values will be from period 1 #. Handle gaps in the file structure (although this can be slow over a diff --git a/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst index 6552d360256f..446bad4ea38f 100644 --- a/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst @@ -10,7 +10,7 @@ Description ----------- This algorithm loads a `MDEventWorkspace `__ that was -previously saved using the :ref:`_algm-SaveMD` algorithm to a .nxs file +previously saved using the :ref:`algm-SaveMD` algorithm to a .nxs file format. If the workspace is too large to fit into memory, You can load the diff --git a/Code/Mantid/docs/source/algorithms/LoadMappingTable-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMappingTable-v1.rst index 7a31b68f6cf5..a7c0b68c7809 100644 --- a/Code/Mantid/docs/source/algorithms/LoadMappingTable-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadMappingTable-v1.rst @@ -16,7 +16,7 @@ from a RAW file. It fills the `workspace `__ does not already point to a full `instrument `__ `geometry `__ (which usually means it must be run after -:ref:`_algm-LoadInstrument`/:ref:`_algm-LoadInstrumentFromRaw`). +:ref:`algm-LoadInstrument`/:ref:`algm-LoadInstrumentFromRaw`). The association is one to many, i.e. a spectrum can have one or many detectors contributing to it. Alternatively the same spectrum can diff --git a/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst index 7a6d82af9b6b..16814ef310ac 100644 --- a/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadMuonLog-v1.rst @@ -9,14 +9,14 @@ Description ----------- -The Algorithm is very similar to :ref:`_algm-LoadLog` except that the +The Algorithm is very similar to :ref:`algm-LoadLog` except that the source of the data is a Muon Nexus file. Parent algorithm ################ LoadMuonLog is also a child algorithm of -:ref:`_algm-LoadMuonNexus`, i.e. it gets called whenever +:ref:`algm-LoadMuonNexus`, i.e. it gets called whenever LoadMuonNexus is executed. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst index 67014ee0a982..e1c313753f78 100644 --- a/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst @@ -14,7 +14,7 @@ identify its type so that it can be read into a workspace. The file name can be an absolute or relative path and should have the extension .nxs or .nx5. Currently only Nexus Muon Version 1 files are recognised, but this will be extended as other types are supported such as -:ref:`_algm-LoadNexusProcessed`. +:ref:`algm-LoadNexusProcessed`. If the file contains data for more than one period, a separate workspace will be generated for each. After the first period the workspace names diff --git a/Code/Mantid/docs/source/algorithms/LoadNexusLogs-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexusLogs-v1.rst index 6b34f9dcb808..15bfe49774a2 100644 --- a/Code/Mantid/docs/source/algorithms/LoadNexusLogs-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadNexusLogs-v1.rst @@ -13,8 +13,8 @@ The LoadNexusLogs algorithm loads the sample logs from the given nexus file. The logs are visible from MantidPlot if you right-click on a workspace and select "Sample Logs...". -If you use :ref:`_algm-LoadEventNexus` or -:ref:`_algm-LoadISISNexus`, calling this algorithm is not +If you use :ref:`algm-LoadEventNexus` or +:ref:`algm-LoadISISNexus`, calling this algorithm is not necessary, since it called as a child algorithm. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst index d5e0d349e2fb..3f1f1c165231 100644 --- a/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadNexusProcessed-v1.rst @@ -10,7 +10,7 @@ Description ----------- The algorithm LoadNexusProcessed will read a Nexus data file created by -:ref:`_algm-SaveNexusProcessed` and place the data into the +:ref:`algm-SaveNexusProcessed` and place the data into the named workspace. The file name can be an absolute or relative path and should have the extension .nxs, .nx5 or .xml. Warning - using XML format can be extremely slow for large data sets and generate very large files. diff --git a/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst b/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst index f1f5e06164c2..2c5dca8e16ad 100644 --- a/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst +++ b/Code/Mantid/docs/source/algorithms/LoadRaw-v3.rst @@ -44,18 +44,18 @@ Subalgorithms used LoadRaw runs the following algorithms as child algorithms to populate aspects of the output `Workspace `__: -- :ref:`_algm-LoadInstrument` - Looks for an instrument +- :ref:`algm-LoadInstrument` - Looks for an instrument definition file named XXX\_Definition.xml, where XXX is the 3 letter instrument prefix on the RAW filename, in the directory specified by the "instrumentDefinition.directory" property given in the config file (or, if not provided, in the relative path ../Instrument/). If the instrument definition file is not found then the - :ref:`_algm-LoadInstrumentFromRaw` algorithm will be + :ref:`algm-LoadInstrumentFromRaw` algorithm will be run instead. -- :ref:`_algm-LoadMappingTable` - To build up the mapping +- :ref:`algm-LoadMappingTable` - To build up the mapping between the spectrum numbers and the Detectors of the attached `Instrument `__. -- :ref:`_algm-LoadLog` - Will look for any log files in the same +- :ref:`algm-LoadLog` - Will look for any log files in the same directory as the RAW file and load their data into the workspace's `Sample `__ object. diff --git a/Code/Mantid/docs/source/algorithms/LogarithmMD-v1.rst b/Code/Mantid/docs/source/algorithms/LogarithmMD-v1.rst index 6ed18bc7304c..12fe0a2ee96b 100644 --- a/Code/Mantid/docs/source/algorithms/LogarithmMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LogarithmMD-v1.rst @@ -18,6 +18,6 @@ The error :math:`da` becomes :math:`df^2 = a^2 / da^2` This algorithm cannot be run on a `MDEventWorkspace `__. Its equivalent on a `MatrixWorkspace `__ is called -:ref:`_algm-Logarithm`. +:ref:`algm-Logarithm`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst b/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst index d8cbcf8fd679..8699c79e06e3 100644 --- a/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaskBins-v1.rst @@ -18,9 +18,9 @@ workspace does not have to have common X values in all spectra). At present, although the zeroing of data will obviously be 'seen' by all downstream algorithms. Only -:ref:`_algm-DiffractionFocussing` (version 2) and -:ref:`_algm-Q1D` have been modified to take account of masking. Several -algorithms (e.g. :ref:`_algm-Rebin`, :ref:`_algm-CropWorkspace`) +:ref:`algm-DiffractionFocussing` (version 2) and +:ref:`algm-Q1D` have been modified to take account of masking. Several +algorithms (e.g. :ref:`algm-Rebin`, :ref:`algm-CropWorkspace`) have been modified to properly propagate the masking. Related Algorithms @@ -29,13 +29,13 @@ Related Algorithms RemoveBins ########## -:ref:`_algm-RemoveBins` can work in several ways, if the bins are at +:ref:`algm-RemoveBins` can work in several ways, if the bins are at the edges of the workspace they will be removed, and that will in many ways act like Masking the bins. If the bins are in the middle of the workspace then the effect depends on the type of interpolation, but importantly these bins will continue to influence future algorithms as opposed to masked bins. For example, with no interpolation -:ref:`_algm-RemoveBins` sets the bin values to 0. This 0 values will +:ref:`algm-RemoveBins` sets the bin values to 0. This 0 values will be included in the summing performed in DiffractionFocussing, pushing down the values in that region. MaskBins is more clever. While if you look at the data, it will appear that it has simply set the values to 0. diff --git a/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst b/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst index 07dcb8c88703..9dc00c0420cf 100644 --- a/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaskBinsFromTable-v1.rst @@ -20,7 +20,7 @@ Related Algorithms MaskBins ######## -:ref:`_algm-MaskBins` masks bins in a workspace. Masked bins should +:ref:`algm-MaskBins` masks bins in a workspace. Masked bins should properly be regarded as having been completely removed from the workspace. Bins falling within the range given (even partially) are masked, i.e. their data and error values are set to zero and the bin is diff --git a/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst b/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst index c05d22988717..8c266a4679d1 100644 --- a/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaskDetectors-v1.rst @@ -51,7 +51,7 @@ Definition of Mask About Input Parameters ###################### -:ref:`_algm-MaskDetectors` supports various format of input to +:ref:`algm-MaskDetectors` supports various format of input to mask detectors, including - Workspace indices diff --git a/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst b/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst index a965b6c8f146..a43f5961cab2 100644 --- a/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaskDetectorsInShape-v1.rst @@ -22,8 +22,8 @@ ChildAlgorithms used MaskDetectorsInShape runs the following algorithms as child algorithms: -- :ref:`_algm-FindDetectorsInShape` - To determine the +- :ref:`algm-FindDetectorsInShape` - To determine the detectors that are contained in the user defined shape. -- :ref:`_algm-MaskDetectors` - To mask the detectors found. +- :ref:`algm-MaskDetectors` - To mask the detectors found. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MaxMin-v1.rst b/Code/Mantid/docs/source/algorithms/MaxMin-v1.rst index 3bdb88daac72..81fc22f97320 100644 --- a/Code/Mantid/docs/source/algorithms/MaxMin-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MaxMin-v1.rst @@ -14,8 +14,8 @@ The algorithm creates a new 2D workspace containing the first maxima This is used in particular for single crystal as a quick way to find strong peaks. By default, the algorithm returns the maxima. -The :ref:`_algm-Max` and :ref:`_algm-Min` algorithms are just calls to the -:ref:`_algm-MaxMin` algorithm, with the ShowMin flag set to true/false +The :ref:`algm-Max` and :ref:`algm-Min` algorithms are just calls to the +:ref:`algm-MaxMin` algorithm, with the ShowMin flag set to true/false respectively. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst b/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst index 3cf4e8c098c8..8774646f65c5 100644 --- a/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MedianDetectorTest-v1.rst @@ -10,7 +10,7 @@ Description ----------- If instrument geometry information is available the -:ref:`_algm-SolidAngle` algorithm is used to calculate the number of +:ref:`algm-SolidAngle` algorithm is used to calculate the number of counts per unit solid angle, otherwise numbers of counts are used without correction. First the median number of counts in all the bins is calculated. Then the ratio of the total number of counts and the median @@ -40,7 +40,7 @@ positive value. ChildAlgorithms used #################### -Uses the :ref:`_algm-SolidAngle`, :ref:`_algm-Integration` and -:ref:`_algm-ConvertToDistribution` algorithms. +Uses the :ref:`algm-SolidAngle`, :ref:`algm-Integration` and +:ref:`algm-ConvertToDistribution` algorithms. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst b/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst index a0969ff52c30..2e2deb70d9e0 100644 --- a/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst @@ -21,7 +21,7 @@ The output workspace is created with these dimensions and the box parameters specified above. Then the events from each input workspace are appended to the output. -See also: :ref:`_algm-MergeMDFiles`, for merging when system +See also: :ref:`algm-MergeMDFiles`, for merging when system memory is too small to keep the entire workspace in memory. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeMDFiles-v1.rst b/Code/Mantid/docs/source/algorithms/MergeMDFiles-v1.rst index 21ffeabe927a..7207f2dde4fd 100644 --- a/Code/Mantid/docs/source/algorithms/MergeMDFiles-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MergeMDFiles-v1.rst @@ -16,7 +16,7 @@ without exceeding available memory. First, you will need to generate a MDEventWorkspaces NXS file for each run with a fixed box structure: -- You can call :ref:`_algm-CreateMDWorkspace` with +- You can call :ref:`algm-CreateMDWorkspace` with MinRecursionDepth = MaxRecursionDepth. - This will make the box structure identical. The number of boxes @@ -33,7 +33,7 @@ algorithm avoids excessive memory use by only keeping the events from ONE box from ALL the files in memory at once to further process and refine it. This is why it requires a common box structure. -See also: :ref:`_algm-MergeMD`, for merging any MDWorkspaces in system +See also: :ref:`algm-MergeMD`, for merging any MDWorkspaces in system memory (faster, but needs more memory). .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst b/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst index e3f46cbedb10..c4f4f2ab7d7b 100644 --- a/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MergeRuns-v1.rst @@ -60,7 +60,7 @@ output matrix workspace. ChildAlgorithms used #################### -The :ref:`_algm-Rebin` algorithm is used, if neccessary, to put all the +The :ref:`algm-Rebin` algorithm is used, if neccessary, to put all the input workspaces onto a common binning. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ModeratorTzero-v1.rst b/Code/Mantid/docs/source/algorithms/ModeratorTzero-v1.rst index 7b986840a812..9872313175d4 100644 --- a/Code/Mantid/docs/source/algorithms/ModeratorTzero-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ModeratorTzero-v1.rst @@ -69,7 +69,7 @@ sufficiently narrow distribution of energies, a linear relationship between t\_0 and the wavelength of the incoming neutron can be established. This relation allows for coding of an algorithm with faster execution times. For indirect instruments that comply with these -conditions, use of :ref:`_algm-ModeratorTzeroLinear` is +conditions, use of :ref:`algm-ModeratorTzeroLinear` is preferred. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ModifyDetectorDotDatFile-v1.rst b/Code/Mantid/docs/source/algorithms/ModifyDetectorDotDatFile-v1.rst index 240dfd4409bf..4335f4a3a5a3 100644 --- a/Code/Mantid/docs/source/algorithms/ModifyDetectorDotDatFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ModifyDetectorDotDatFile-v1.rst @@ -11,7 +11,7 @@ Description Modifies an ISIS detector dot data file, so that the detector positions are as in the given workspace. This algorithm can be used to transfer a -calibration done via the :ref:`_algm-ApplyCalibration` +calibration done via the :ref:`algm-ApplyCalibration` algorithm to an ISIS detector dot dat file by selecting a workspace that has been modified by ApplyCalibration. diff --git a/Code/Mantid/docs/source/algorithms/MonitorLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/MonitorLiveData-v1.rst index b516dab792ba..befcd46f9fe6 100644 --- a/Code/Mantid/docs/source/algorithms/MonitorLiveData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MonitorLiveData-v1.rst @@ -10,13 +10,13 @@ Description ----------- The MonitorLiveData algorithm is started in the background by -:ref:`_algm-StartLiveData` and repeatedly calls -:ref:`_algm-LoadLiveData`. **It should not be necessary to call +:ref:`algm-StartLiveData` and repeatedly calls +:ref:`algm-LoadLiveData`. **It should not be necessary to call MonitorLiveData directly.** -This algorithm simply calls :ref:`_algm-LoadLiveData` at the given +This algorithm simply calls :ref:`algm-LoadLiveData` at the given *UpdateFrequency*. For more details, see -:ref:`_algm-StartLiveData`. +:ref:`algm-StartLiveData`. For details on the way to specify the data processing steps, see: `LoadLiveData `__. diff --git a/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst b/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst index 2314322fe865..3fa577e5b3d1 100644 --- a/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MuonLoad-v1.rst @@ -20,7 +20,7 @@ Specifically: #. Offset, crop and rebin the workspace #. If the loaded data is multi-period - apply the specified operation to specified periods to get a single data set. -#. Use :ref:`_algm-MuonCalculateAsymmetry` to get the +#. Use :ref:`algm-MuonCalculateAsymmetry` to get the resulting workspace. Workflow diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst index 07f02af1d470..85f1e9e07aa5 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseByCurrent-v1.rst @@ -31,7 +31,7 @@ EventWorkspaces If the input workspace is an `EventWorkspace `__, then the output will be as well. Weighted events are used to scale by the -current (see the :ref:`_algm-Divide` algorithm, which is a child +current (see the :ref:`algm-Divide` algorithm, which is a child algorithm being used). .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst index 8dcced47399f..06624e91ed79 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseByDetector-v1.rst @@ -30,10 +30,10 @@ The Input Workspace #. The input workspace must be a MatrixWorkspace #. The input workspace must have X-units of Wavelength, run - :ref:`_algm-ConvertUnits` on your input workspace if it is not + :ref:`algm-ConvertUnits` on your input workspace if it is not already in Wavelength. #. The input workspace must be a histogram workspace run - :ref:`_algm-ConvertToHistogram` on your input workspace + :ref:`algm-ConvertToHistogram` on your input workspace if it is not already histogrammed. The Instrument Definition File @@ -75,7 +75,7 @@ Instrument Parameter Files that take the form Mantid are automatically loaded along with the IDF when a workspace is loaded into Mantid. However, you can apply any number of additional parameter files over the top of an existing workspace using -:ref:`_algm-LoadParameterFile`. +:ref:`algm-LoadParameterFile`. Examples ######## diff --git a/Code/Mantid/docs/source/algorithms/NormaliseByPeakArea-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseByPeakArea-v1.rst index 279a04ff5b78..05ac37f6fd3f 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseByPeakArea-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseByPeakArea-v1.rst @@ -10,7 +10,7 @@ Description ----------- Takes an input TOF spectrum and converts it to Y-space using the -:ref:`_algm-ConvertToYSpace` algorithm. The result is then +:ref:`algm-ConvertToYSpace` algorithm. The result is then fitted using the ComptonPeakProfile function using the given mass to produce an estimate of the peak area. The input data is normalised by this value. diff --git a/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst index 556c8ae4b54b..35559ffa94dc 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseToMonitor-v1.rst @@ -53,13 +53,13 @@ The data must be histogram, non-distribution data. Child Algorithms used ##################### -The :ref:`_algm-ExtractSingleSpectrum` algorithm is used +The :ref:`algm-ExtractSingleSpectrum` algorithm is used to pull out the monitor spectrum if it's part of the InputWorkspace or MonitorWorkspace. For the 'integrated range' option, the -:ref:`_algm-Integration` algorithm is used to integrate the monitor +:ref:`algm-Integration` algorithm is used to integrate the monitor spectrum. -In both cases, the :ref:`_algm-Divide` algorithm is used to perform the +In both cases, the :ref:`algm-Divide` algorithm is used to perform the normalisation. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/NormaliseToUnity-v1.rst b/Code/Mantid/docs/source/algorithms/NormaliseToUnity-v1.rst index 10842e30e07f..caefd5e9b8a0 100644 --- a/Code/Mantid/docs/source/algorithms/NormaliseToUnity-v1.rst +++ b/Code/Mantid/docs/source/algorithms/NormaliseToUnity-v1.rst @@ -9,9 +9,9 @@ Description ----------- -NormaliseToUnity uses :ref:`_algm-Integration` to sum up all the X +NormaliseToUnity uses :ref:`algm-Integration` to sum up all the X bins, then sums up the resulting spectra using -:ref:`_algm-SumSpectra`. Each bin of the input workspace is then +:ref:`algm-SumSpectra`. Each bin of the input workspace is then divided by the total sum, regardless of whether a bin was included in the sum or not. It is thus possible to normalize a workspace so that a range of X bins and spectra sums to 1. In that case the sum of the whole diff --git a/Code/Mantid/docs/source/algorithms/OneStepMDEW-v1.rst b/Code/Mantid/docs/source/algorithms/OneStepMDEW-v1.rst index 915f1e71e2c2..eafaa01b0ce5 100644 --- a/Code/Mantid/docs/source/algorithms/OneStepMDEW-v1.rst +++ b/Code/Mantid/docs/source/algorithms/OneStepMDEW-v1.rst @@ -13,7 +13,7 @@ This algorithm is used in the Paraview event nexus loader to both load an event nexus file and convert it into a `MDEventWorkspace `__ for use in visualization. -The :ref:`_algm-LoadEventNexus` algorithm is called with default +The :ref:`algm-LoadEventNexus` algorithm is called with default parameters to load into an `EventWorkspace `__. After, the diff --git a/Code/Mantid/docs/source/algorithms/PDLoadCharacterizations-v1.rst b/Code/Mantid/docs/source/algorithms/PDLoadCharacterizations-v1.rst index 94e49229201c..3b8850d903c6 100644 --- a/Code/Mantid/docs/source/algorithms/PDLoadCharacterizations-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PDLoadCharacterizations-v1.rst @@ -12,7 +12,7 @@ Description This algorithm loads information into a `TableWorkspace `__ for the characterization information and a collection of output parameters for the focus positions to be used -in :ref:`_algm-EditInstrumentGeometry`. If a section is +in :ref:`algm-EditInstrumentGeometry`. If a section is missing then those parameters will be empty. This includes an empty table (zero rows) if that information is missing. diff --git a/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst b/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst index 11c5fce1b3b9..eee0658b77b1 100644 --- a/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PeakIntensityVsRadius-v1.rst @@ -19,10 +19,10 @@ correct integration radius for each peak. {Integrated peak intensity vs integration radius for 3 SCD peaks} The algorithm requires a `MDWorkspace `__ of SCD data in reciprocal space; generated by e.g. -:ref:`_algm-ConvertToDiffractionMDWorkspace`. +:ref:`algm-ConvertToDiffractionMDWorkspace`. Also, you will need a `PeaksWorkspace `__ as the list of peaks to integrate. This can be generated using -:ref:`_algm-FindPeaksMD`, for example. +:ref:`algm-FindPeaksMD`, for example. The output will be a `Workspace2D `__ with one spectrum per peak, where: @@ -30,10 +30,10 @@ peak, where: - X = peak radius - Y/E = integrated intensity and error for the corresponding radius. - Each peak is labeled with a string with "H K L". Use - :ref:`_algm-IndexPeaks` to automatically find HKL values for + :ref:`algm-IndexPeaks` to automatically find HKL values for peaks. -This algorithm calls :ref:`_algm-IntegratePeaksMD` repeatedly, +This algorithm calls :ref:`algm-IntegratePeaksMD` repeatedly, with the following parameters filled in: - **PeakRadius** = the radius, ranging from RadiusStart to RadiusEnd in diff --git a/Code/Mantid/docs/source/algorithms/PeaksInRegion-v1.rst b/Code/Mantid/docs/source/algorithms/PeaksInRegion-v1.rst index fd3a35c6c096..546592bb1c19 100644 --- a/Code/Mantid/docs/source/algorithms/PeaksInRegion-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PeaksInRegion-v1.rst @@ -10,6 +10,6 @@ Description ----------- Determines which peaks intersect a defined box region in either QLab, -QSample or HKL space. Similar to :ref:`_algm-PeaksOnSurface`. +QSample or HKL space. Similar to :ref:`algm-PeaksOnSurface`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PeaksOnSurface-v1.rst b/Code/Mantid/docs/source/algorithms/PeaksOnSurface-v1.rst index 0db52c292a94..cf3c05d1fb4c 100644 --- a/Code/Mantid/docs/source/algorithms/PeaksOnSurface-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PeaksOnSurface-v1.rst @@ -10,7 +10,7 @@ Description ----------- Determine whether a peak intersects a surface. Similar to -:ref:`_algm-PeaksInRegion`. The vertexes of the surface must be +:ref:`algm-PeaksInRegion`. The vertexes of the surface must be provided. The vertexes must be provided in clockwise ordering starting at the lower left. diff --git a/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst index 5540ec0ed592..8eb609d6617b 100644 --- a/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PlotPeakByLogValue-v1.rst @@ -32,9 +32,9 @@ Input property | `` "test2,v1.1:3.2"`` | `` "test3,v" - fit all spectra in workspace test3`` -Internally PlotPeakByLogValue uses :ref:`_algm-Fit` algorithm to perform +Internally PlotPeakByLogValue uses :ref:`algm-Fit` algorithm to perform fitting and the following properties have the same meaning as in -:ref:`_algm-Fit`: Function, StartX, EndX, Minimizer, CostFunction. Property +:ref:`algm-Fit`: Function, StartX, EndX, Minimizer, CostFunction. Property FitType defines the way of setting initial values. If it is set to "Sequential" every next fit starts with parameters returned by the previous fit. If set to "Individual" each fit starts with the same diff --git a/Code/Mantid/docs/source/algorithms/Plus-v1.rst b/Code/Mantid/docs/source/algorithms/Plus-v1.rst index fbaf5a5a2fbc..67c4915d52cd 100644 --- a/Code/Mantid/docs/source/algorithms/Plus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Plus-v1.rst @@ -23,7 +23,7 @@ event lists might be from different detectors; this is not checked against and the event lists will be concatenated anyway. This may or may not be your desired behavior. If you wish to merge different EventWorkspaces while matching their detectors together, use the -:ref:`_algm-MergeRuns` algorithm. +:ref:`algm-MergeRuns` algorithm. :sup:`\*` This could happen, for example, if the workspace operands have not both been processed in an identical fashion and the detectors have diff --git a/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst b/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst index a00b257fcaa8..1a507830dc28 100644 --- a/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PlusMD-v1.rst @@ -34,9 +34,9 @@ two workspaces together to form one large workspace. Note for file-backed workspaces ############################### -The algorithm uses :ref:`_algm-CloneMDWorkspace` to create the +The algorithm uses :ref:`algm-CloneMDWorkspace` to create the output workspace, except when adding in place (e.g. :math:`A = A + B` ). -See :ref:`_algm-CloneMDWorkspace` for details, but note that a +See :ref:`algm-CloneMDWorkspace` for details, but note that a file-backed `MDEventWorkspace `__ will have its file copied. @@ -47,7 +47,7 @@ copied. and add B into memory (which might be too big!) Also, be aware that events added to a MDEventWorkspace are currently -added **in memory** and are not cached to file until :ref:`_algm-SaveMD` +added **in memory** and are not cached to file until :ref:`algm-SaveMD` or another algorithm requiring it is called. The workspace is marked as 'requiring file update'. diff --git a/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst index 39197f3e490b..f806dfa7a2d8 100644 --- a/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PointByPointVCorrection-v1.rst @@ -25,7 +25,7 @@ before. In order to minimise sudden jumps in the data caused by 0 counts in the corresponding vanadium spectrum it is worth considering smoothing the -Vanadium spectrum using :ref:`_algm-SmoothData` prior to using it in +Vanadium spectrum using :ref:`algm-SmoothData` prior to using it in this algorithm. Valid input workspaces diff --git a/Code/Mantid/docs/source/algorithms/PoldiFitPeaks1D-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiFitPeaks1D-v1.rst index e64550d5c16b..fd6a2ddf1790 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiFitPeaks1D-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiFitPeaks1D-v1.rst @@ -10,8 +10,8 @@ Description ----------- PoldiFitPeaks1D takes a TableWorkspace with peaks (for example from -:ref:`_algm-PoldiPeakSearch`) and a spectrum from -:ref:`_algm-PoldiAutoCorrelation` and tries to fit a +:ref:`algm-PoldiPeakSearch`) and a spectrum from +:ref:`algm-PoldiAutoCorrelation` and tries to fit a Gaussian peak profile to the spectrum for each peak. Usually, the peaks are accompanied by a quadratic background, so this is fitted as well. diff --git a/Code/Mantid/docs/source/algorithms/PoldiLoadChopperSlits-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiLoadChopperSlits-v1.rst index 2de439a3c5fa..e6794421cb8e 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiLoadChopperSlits-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiLoadChopperSlits-v1.rst @@ -14,6 +14,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiLoadIPP-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiLoadIPP-v1.rst index 2de439a3c5fa..e6794421cb8e 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiLoadIPP-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiLoadIPP-v1.rst @@ -14,6 +14,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiLoadLog-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiLoadLog-v1.rst index 2de439a3c5fa..e6794421cb8e 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiLoadLog-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiLoadLog-v1.rst @@ -14,6 +14,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiLoadSpectra-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiLoadSpectra-v1.rst index 2de439a3c5fa..e6794421cb8e 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiLoadSpectra-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiLoadSpectra-v1.rst @@ -14,6 +14,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiPeakDetection-v2.rst b/Code/Mantid/docs/source/algorithms/PoldiPeakDetection-v2.rst index 2de439a3c5fa..e6794421cb8e 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiPeakDetection-v2.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiPeakDetection-v2.rst @@ -14,6 +14,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiProjectAddDir-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiProjectAddDir-v1.rst index 2de439a3c5fa..e6794421cb8e 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiProjectAddDir-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiProjectAddDir-v1.rst @@ -14,6 +14,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiProjectAddFile-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiProjectAddFile-v1.rst index 2de439a3c5fa..e6794421cb8e 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiProjectAddFile-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiProjectAddFile-v1.rst @@ -14,6 +14,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst index 733477df1700..8b3650b86933 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiProjectRun-v1.rst @@ -16,8 +16,8 @@ each sample a bunch of setup information for the different algorithms (such as the data file path, etc...). This tableWorkspace can be built easily using the two algorithms -:ref:`_algm-PoldiProjectAddFile` and -:ref:`_algm-PoldiProjectAddDir`, which will create and/or +:ref:`algm-PoldiProjectAddFile` and +:ref:`algm-PoldiProjectAddDir`, which will create and/or fill properly a targeted tableWorkspace. The needed columns and there content are describe in the following `Data Manager `__ paragraph. @@ -92,7 +92,7 @@ Each data-file is loaded on a 2DWorkspace. The associated log and setup information are loaded in dedicated workspace as specified in the sample-manager TableWorkspace. - :ref:`_algm-LoadSINQFile` + :ref:`algm-LoadSINQFile` The raw data are loaded in a 2DWorkspace, using the generic file-loader for SINQ data, given the instrument name *POLDI* as parameter. @@ -101,7 +101,7 @@ for SINQ data, given the instrument name *POLDI* as parameter. | ``             Filename        = sample_file_path, `` | ``             OutputWorkspace = sample_name)`` - :ref:`_algm-PoldiLoadLog` + :ref:`algm-PoldiLoadLog` The associated *logs* informations are extracted from the *hdf* raw data file, an store in a dedicated MatrixWorkspace. A dictionary file @@ -115,7 +115,7 @@ variable. | ``             Dictionary     = poldi_dictionnary_file_path, `` | ``             PoldiLog       = sample_log_ws)`` - :ref:`_algm-LoadInstrument` + :ref:`algm-LoadInstrument` For each raw data WS, the corresponding IDF is loaded, based on the acquisition starting time. @@ -124,7 +124,7 @@ acquisition starting time. | ``               InstrumentName    = "Poldi", `` | ``               RewriteSpectraMap = True)`` - :ref:`_algm-PoldiRemoveDeadWires` + :ref:`algm-PoldiRemoveDeadWires` Some wires are permanently dead and should not be taken into account. They are listed in the IDF of a given setup (IPP). Some others wires @@ -149,7 +149,7 @@ dedicated workspace. they are now all extracted, using an example sample for each of them. - :ref:`_algm-PoldiLoadChopperSlits` + :ref:`algm-PoldiLoadChopperSlits` The chopper configuration is loaded in a dedicated Workspace, one per *Poldi IPP* setup detected. @@ -157,7 +157,7 @@ The chopper configuration is loaded in a dedicated Workspace, one per | ``PoldiLoadChopperSlits(InputWorkspace    = ex_of_sample_ws, `` | ``                      PoldiChopperSlits = ipp_chopper_slits)`` - :ref:`_algm-PoldiLoadSpectra` + :ref:`algm-PoldiLoadSpectra` The characteristic Poldi spectra (*Intensity=f(wavelength)*) is extracted from each IDF. @@ -165,7 +165,7 @@ extracted from each IDF. | ``PoldiLoadSpectra(InputWorkspace = ex_of_sample_ws, `` | ``                 PoldiSpectra   = ipp_Poldi_spectra)`` - :ref:`_algm-PoldiLoadIPP` + :ref:`algm-PoldiLoadIPP` Local setup information (such as the detector position, chopper offset, etc...) are extracted and stores in a dedicated workspace. @@ -187,7 +187,7 @@ detection process can be based on some previous results to not start from scratch, or given the sample crystal structure/symetries/space group... - :ref:`_algm-PoldiAutoCorrelation` + :ref:`algm-PoldiAutoCorrelation` Almost all the previous loaded workspace are used by this algorithm. From the sample manager workspace, and the Poldi setup workspace, all @@ -206,7 +206,7 @@ on row (0). | ``                     OutputWorkspace   = sample_correlated_ws)`` | ``                 `` - :ref:`_algm-PoldiPeakDetection` + :ref:`algm-PoldiPeakDetection` The previous autocorrelation function is analyzed to detected possible peaks. The found peak are stored in a dedicated workspace, and added to @@ -222,6 +222,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PoldiRemoveDeadWires-v1.rst b/Code/Mantid/docs/source/algorithms/PoldiRemoveDeadWires-v1.rst index 2de439a3c5fa..e6794421cb8e 100644 --- a/Code/Mantid/docs/source/algorithms/PoldiRemoveDeadWires-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PoldiRemoveDeadWires-v1.rst @@ -14,6 +14,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to proceed POLDI data. The introductions can be found in the wiki page of -:ref:`_algm-PoldiProjectRun`. +:ref:`algm-PoldiProjectRun`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PowerMD-v1.rst b/Code/Mantid/docs/source/algorithms/PowerMD-v1.rst index 7cac5e4b553f..d9ce647bd6b5 100644 --- a/Code/Mantid/docs/source/algorithms/PowerMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PowerMD-v1.rst @@ -17,6 +17,6 @@ The error :math:`da` becomes :math:`df^2 = f^2 * b^2 * (da^2 / a^2)` This algorithm cannot be run on a `MDEventWorkspace `__. Its equivalent on a -`MatrixWorkspace `__ is called :ref:`_algm-Power`. +`MatrixWorkspace `__ is called :ref:`algm-Power`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst index 70dc9d6f45c2..2c9ea69422bb 100644 --- a/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/PredictPeaks-v1.rst @@ -15,7 +15,7 @@ peaks (both in detector position/TOF and Q-space) and create an output This algorithm uses the InputWorkspace to determine the instrument in use, as well as the UB Matrix and Unit Cell of the sample used. You can -use the :ref:`_algm-CopySample` algorithm (with CopyLattice=1) to +use the :ref:`algm-CopySample` algorithm (with CopyLattice=1) to copy a UB matrix from a PeaksWorkspace to another workspace. The algorithm operates by calculating the scattering direction (given @@ -35,13 +35,13 @@ instead of doing all HKLs within range of Max/MinDSpacing and WavelengthMin/WavelengthMax. A typical use case for this method is to use -:ref:`_algm-FindPeaksMD` followed by :ref:`_algm-IndexPeaks` to +:ref:`algm-FindPeaksMD` followed by :ref:`algm-IndexPeaks` to find the HKL of each peak. The HKLs found will be floats, so specify RoundHKL=True in PredictPeaks to predict the position at the exact integer HKL. This may help locate the center of peaks. Another way to use this algorithm is to use -:ref:`_algm-CreatePeaksWorkspace` to create a workspace +:ref:`algm-CreatePeaksWorkspace` to create a workspace with the desired number of peaks. Use python or the GUI to enter the desired HKLs. If these are fraction (e.g. magnetic peaks) then make sure RoundHKL=False. diff --git a/Code/Mantid/docs/source/algorithms/Q1D-v2.rst b/Code/Mantid/docs/source/algorithms/Q1D-v2.rst index 885919104dad..ec1f06d85709 100644 --- a/Code/Mantid/docs/source/algorithms/Q1D-v2.rst +++ b/Code/Mantid/docs/source/algorithms/Q1D-v2.rst @@ -198,7 +198,7 @@ Properties +---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ | 3 | OutputWorkspace | Output | MatrixWorkspace | Mandatory | The workspace name under which to store the result histogram. | +---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ -| 4 | OutputBinning | Input | String | Mandatory | The bin parameters to use for the final result (in the format used by the :ref:`_algm-Rebin` algorithm). | +| 4 | OutputBinning | Input | String | Mandatory | The bin parameters to use for the final result (in the format used by the :ref:`algm-Rebin` algorithm). | +---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ | 5 | AccountForGravity | Input | Boolean | False | Whether to correct for the effects of gravity. | +---------+---------------------+-------------+-------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/Code/Mantid/docs/source/algorithms/Qxy-v1.rst b/Code/Mantid/docs/source/algorithms/Qxy-v1.rst index a67aafa2806f..345887424fd0 100644 --- a/Code/Mantid/docs/source/algorithms/Qxy-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Qxy-v1.rst @@ -11,8 +11,8 @@ Description This algorithm rebins a 2D workspace in units of wavelength into 2D Q. The reduction it performs is the same as that executed by the -:ref:`_algm-Q1D` algorithm, expect performed in 2D instead of 1D. Hence, +:ref:`algm-Q1D` algorithm, expect performed in 2D instead of 1D. Hence, for further documentation on how this algorithm works please see -:ref:`_algm-Q1D`. +:ref:`algm-Q1D`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Rebin-v1.rst b/Code/Mantid/docs/source/algorithms/Rebin-v1.rst index d1294f06d15c..48369b7dafce 100644 --- a/Code/Mantid/docs/source/algorithms/Rebin-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Rebin-v1.rst @@ -58,8 +58,8 @@ For Data-Point Workspaces If the input workspace contains data points, rather than histograms, then Rebin will automatically use the -:ref:`_algm-ConvertToHistogram` and -:ref:`_algm-ConvertToPointData` algorithms before and after +:ref:`algm-ConvertToHistogram` and +:ref:`algm-ConvertToPointData` algorithms before and after the rebinning has taken place. FullBinsOnly option diff --git a/Code/Mantid/docs/source/algorithms/Rebin2D-v1.rst b/Code/Mantid/docs/source/algorithms/Rebin2D-v1.rst index 0075776556b1..93e57098d3b9 100644 --- a/Code/Mantid/docs/source/algorithms/Rebin2D-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Rebin2D-v1.rst @@ -21,7 +21,7 @@ Requirements ------------ The algorithms currently requires the second axis on the workspace to be -a numerical axis so :ref:`_algm-ConvertSpectrumAxis` may +a numerical axis so :ref:`algm-ConvertSpectrumAxis` may need to run first. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RebinByPulseTimes-v1.rst b/Code/Mantid/docs/source/algorithms/RebinByPulseTimes-v1.rst index 0e151a850bab..94ca371866f8 100644 --- a/Code/Mantid/docs/source/algorithms/RebinByPulseTimes-v1.rst +++ b/Code/Mantid/docs/source/algorithms/RebinByPulseTimes-v1.rst @@ -10,8 +10,8 @@ Description ----------- Rebins an EventWorkspace according to the pulse times of each event -rather than the time of flight :ref:`_algm-Rebin`. The Params inputs may -be expressed in an identical manner to the :ref:`_algm-Rebin` algorithm. +rather than the time of flight :ref:`algm-Rebin`. The Params inputs may +be expressed in an identical manner to the :ref:`algm-Rebin` algorithm. Users may either provide a single value, which is interpreted as the *step* (in seconds), or three comma separated values *start*, *step*, *end*, where all units are in seconds, and start and end are relative to diff --git a/Code/Mantid/docs/source/algorithms/RebinToWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/RebinToWorkspace-v1.rst index 4214b8d9b7f2..88b0dd6a33e7 100644 --- a/Code/Mantid/docs/source/algorithms/RebinToWorkspace-v1.rst +++ b/Code/Mantid/docs/source/algorithms/RebinToWorkspace-v1.rst @@ -12,6 +12,6 @@ Description Takes an input workspace and alters the binning so that all it's spectra match that of the **first spectrum** of the second workspace. This algorithm simply builds a parameter list that is passed to the -:ref:`_algm-Rebin` algorithm, which actually does the work. +:ref:`algm-Rebin` algorithm, which actually does the work. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst b/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst index d2d0ebf9c1d1..93a31a923e1a 100644 --- a/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst +++ b/Code/Mantid/docs/source/algorithms/RefinePowderInstrumentParameters-v3.rst @@ -59,6 +59,6 @@ How to use algorithm with other algorithms This algorithm is designed to work with other algorithms to do Le Bail fit. The introduction can be found in the wiki page of -:ref:`_algm-LeBailFit`. +:ref:`algm-LeBailFit`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst index 97d30daf44ac..0603477571ed 100644 --- a/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOne-v1.rst @@ -25,9 +25,9 @@ supports Transmission corrections (see below). For PointAnalysisMode the analysis can be roughly reduced to IvsLam = DetectorWS / sum(I0) / TransmissionWS / sum(I0). The normalization by tranmission run(s) is optional. Input workspaces are converted to *Wavelength* first via -:ref:`_algm-ConvertUnits`. +:ref:`algm-ConvertUnits`. -IvsQ is calculated via :ref:`_algm-ConvertUnits` into units of +IvsQ is calculated via :ref:`algm-ConvertUnits` into units of *MomentumTransfer*. Corrections may be applied prior to the transformation to ensure that the detectors are in the correct location according to the input Theta value. Corrections are only enabled when a diff --git a/Code/Mantid/docs/source/algorithms/ReflectometryReductionOneAuto-v1.rst b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOneAuto-v1.rst index 8f61d06d41a4..31fffe58c41f 100644 --- a/Code/Mantid/docs/source/algorithms/ReflectometryReductionOneAuto-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ReflectometryReductionOneAuto-v1.rst @@ -9,12 +9,12 @@ Description ----------- -Facade over :ref:`_algm-ReflectometryReductionOne`. +Facade over :ref:`algm-ReflectometryReductionOne`. Pulls numeric parameters out of the instrument parameters where possible. You can override any of these automatically applied defaults by providing your own value for the input. -See :ref:`_algm-ReflectometryReductionOne` for more +See :ref:`algm-ReflectometryReductionOne` for more information on the wrapped algorithm. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst b/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst index c90f206856b5..c26cc372625b 100644 --- a/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst +++ b/Code/Mantid/docs/source/algorithms/RemoveBins-v1.rst @@ -20,7 +20,7 @@ Bins at either end of spectrum ############################## If the workspaces has common X binning for all spectra, then the -:ref:`_algm-CropWorkspace` algorithm will be called as a child +:ref:`algm-CropWorkspace` algorithm will be called as a child algorithm. This will result in the affected bins (which includes the bin in which the boundary - XMin or XMax - lies) being removed completely, leading to the output workspace having fewer bins than the input one. In @@ -51,7 +51,7 @@ Related Algorithms MaskBins ######## -:ref:`_algm-MaskBins` will set the data in the desired bins to 0 and +:ref:`algm-MaskBins` will set the data in the desired bins to 0 and importantly also marks those bins as masked, so that further algorithms should not include this data in their grouping calculations. This is particularly used for Diffraction Focussing. diff --git a/Code/Mantid/docs/source/algorithms/ResizeRectangularDetector-v1.rst b/Code/Mantid/docs/source/algorithms/ResizeRectangularDetector-v1.rst index bd7753235103..8b734c1959fe 100644 --- a/Code/Mantid/docs/source/algorithms/ResizeRectangularDetector-v1.rst +++ b/Code/Mantid/docs/source/algorithms/ResizeRectangularDetector-v1.rst @@ -30,8 +30,8 @@ individual pixels. This means that algorithms based on solid angle calculations might be off. Ray-tracing (e.g. peak finding) are unaffected. -See also :ref:`_algm-MoveInstrumentComponent` and -:ref:`_algm-RotateInstrumentComponent` for other ways +See also :ref:`algm-MoveInstrumentComponent` and +:ref:`algm-RotateInstrumentComponent` for other ways to move components. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RetrieveRunInfo-v1.rst b/Code/Mantid/docs/source/algorithms/RetrieveRunInfo-v1.rst index 4e79a8296d6e..1e9a2a1e81b1 100644 --- a/Code/Mantid/docs/source/algorithms/RetrieveRunInfo-v1.rst +++ b/Code/Mantid/docs/source/algorithms/RetrieveRunInfo-v1.rst @@ -14,7 +14,7 @@ Strips the log property values of "inst\_abrv", "run\_number", and compiles a TableWorkspace of the result. Uses multiple calls to -:ref:`_algm-CreateLogPropertyTable` create the final +:ref:`algm-CreateLogPropertyTable` create the final result table. .. figure:: /images/ConvertToEnergyInfoTable.png @@ -27,7 +27,7 @@ Limitations Currently, only ISIS instruments with runs that have the *full* list of log properties are supported. -:ref:`_algm-CreateLogPropertyTable` is available to +:ref:`algm-CreateLogPropertyTable` is available to those users who wish to "brew their own" version of this algorithm. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/RunPythonScript-v1.rst b/Code/Mantid/docs/source/algorithms/RunPythonScript-v1.rst index 7b67c3200820..e36026e4bffe 100644 --- a/Code/Mantid/docs/source/algorithms/RunPythonScript-v1.rst +++ b/Code/Mantid/docs/source/algorithms/RunPythonScript-v1.rst @@ -10,7 +10,7 @@ Description ----------- Algorithm that will run a snippet of python code. This is meant to be -used by :ref:`_algm-LoadLiveData` to perform some processing. +used by :ref:`algm-LoadLiveData` to perform some processing. The input & output workspaces can be accessed from the Python code using the variable names 'input' & 'output' respectively. diff --git a/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst b/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst index ee95858afde7..b39a1e68b27e 100644 --- a/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SANSWideAngleCorrection-v1.rst @@ -80,12 +80,12 @@ SANS ISIS Reduction ------------------- The output of SANSWideAngleCorrection is used as WavePixelAdj parameter -at :ref:`_algm-Q1D`. +at :ref:`algm-Q1D`. Wide Angle Correction and the SANS Reduction -------------------------------------------- -The equation for the reduction is (see :ref:`_algm-Q1D`) +The equation for the reduction is (see :ref:`algm-Q1D`) :math:`P_I(Q) = \frac{\sum_{\{i, j, n\} \supset \{I\}} S(i,j,n)}{\sum_{\{i, j, n\} \supset \{I\}}M(n)\eta(n)T(n)\Omega_{i j}F_{i j}}` @@ -102,7 +102,7 @@ Where Corr (Correction factor) in this case will be: Which is the OutputWorkspace of SANSWideAngleCorrection. -This parameter enters inside :ref:`_algm-Q1D` as WavePixelAdj. But, this is +This parameter enters inside :ref:`algm-Q1D` as WavePixelAdj. But, this is all done for you inside the Reduction Script. Comparison with Wide Angle Correction at SNS @@ -111,7 +111,7 @@ Comparison with Wide Angle Correction at SNS The transmission correction applied at SNS is described `here `__, and it is applied through the -:ref:`_algm-ApplyTransmissionCorrection` algorithm. +:ref:`algm-ApplyTransmissionCorrection` algorithm. The correction applied there is an approximation for the same equations described here. The picture above compare their results @@ -121,8 +121,8 @@ described here. The picture above compare their results SNS\_ISIS\_WideAngleCorrections.png Note a difference among them is when they are applied. At SNS, the correction is applied before averaging the counters per bin inside -:ref:`_algm-Q1D` algorithm, while at ISIS, it is used after, inside the -:ref:`_algm-Q1D` algorithm, for the division of the counters per bin +:ref:`algm-Q1D` algorithm, while at ISIS, it is used after, inside the +:ref:`algm-Q1D` algorithm, for the division of the counters per bin normalized by the transmission counters. References diff --git a/Code/Mantid/docs/source/algorithms/SCDCalibratePanels-v1.rst b/Code/Mantid/docs/source/algorithms/SCDCalibratePanels-v1.rst index b7adfb5fede5..0ddba6913fe7 100644 --- a/Code/Mantid/docs/source/algorithms/SCDCalibratePanels-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SCDCalibratePanels-v1.rst @@ -90,7 +90,7 @@ After Calibration After calibration, you can save the workspace to Nexus (or Nexus processed) and get it back by loading in a later Mantid session. You can copy the calibration to another workspace using the same instrument by -means of the :ref:`_algm-CopyInstrumentParameters` +means of the :ref:`algm-CopyInstrumentParameters` algorithm. To do so select the workspace, which you have calibrated as the InputWorkspace and the workspace you want to copy the calibration to, the OutputWorkspace. diff --git a/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst b/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst index a266c32f7bd8..bc10703199e0 100644 --- a/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SassenaFFT-v1.rst @@ -23,7 +23,7 @@ following datasets: *qvectors*, *fq*, *fq0*, *fq2*, and *fqt* The group workspace should contain workspaces **\_fqt.Re** and **\_fqt.Im** containing the real and imaginary parts of the intermediate structure factor, respectively. This algorithm will take both and -perform :ref:`_algm-FFT`, storing the real part of the transform in +perform :ref:`algm-FFT`, storing the real part of the transform in workspace **\_fqw** and placing this workspace under the input group workspace. Assuming the time unit to be one picosecond, the resulting energies will be in units of one **micro-eV**. diff --git a/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst b/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst index 019f87fc7f55..949a64c262ef 100644 --- a/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveAscii-v1.rst @@ -12,7 +12,7 @@ Description The workspace data are stored in the file in columns: the first column contains the X-values, followed by pairs of Y and E values. Columns are separated by commas. The resulting file can normally be loaded into a -workspace by the :ref:`_algm-LoadAscii` algorithm. +workspace by the :ref:`algm-LoadAscii` algorithm. Limitations ########### diff --git a/Code/Mantid/docs/source/algorithms/SaveFocusedXYE-v1.rst b/Code/Mantid/docs/source/algorithms/SaveFocusedXYE-v1.rst index b27cce639697..eeba185e1acc 100644 --- a/Code/Mantid/docs/source/algorithms/SaveFocusedXYE-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveFocusedXYE-v1.rst @@ -22,7 +22,7 @@ Current Issues -------------- Fullprof expects the data to be in TOF, however at present the -:ref:`_algm-DiffractionFocussing` algorithm in Mantid +:ref:`algm-DiffractionFocussing` algorithm in Mantid leaves the data in d-spacing. If the written file is to be loaded into TOPAS, then headers should be diff --git a/Code/Mantid/docs/source/algorithms/SaveIsawUB-v1.rst b/Code/Mantid/docs/source/algorithms/SaveIsawUB-v1.rst index 394a0617cca2..bf1fcd35b6b0 100644 --- a/Code/Mantid/docs/source/algorithms/SaveIsawUB-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveIsawUB-v1.rst @@ -12,7 +12,7 @@ Description This saves a workspace's UB matrix to an ISAW-style UB matrix text file. The resulting file can be loaded again into another workspace by using -the :ref:`_algm-LoadIsawUB` algorithm. +the :ref:`algm-LoadIsawUB` algorithm. The matrix saved is the transpose of the UB Matrix. The UB matrix maps the column vector (h,k,l ) to the column vector (q'x,q'y,q'z). diff --git a/Code/Mantid/docs/source/algorithms/SaveMD-v1.rst b/Code/Mantid/docs/source/algorithms/SaveMD-v1.rst index 4dea0d80e680..5d9f10418ebd 100644 --- a/Code/Mantid/docs/source/algorithms/SaveMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveMD-v1.rst @@ -11,7 +11,7 @@ Description Save a `MDEventWorkspace `__ to a .nxs file. The workspace's current box structure and entire list of events is -preserved. The resulting file can be loaded via :ref:`_algm-LoadMD`. +preserved. The resulting file can be loaded via :ref:`algm-LoadMD`. If you specify MakeFileBacked, then this will turn an in-memory workspace to a file-backed one. Memory will be released as it is written diff --git a/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst b/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst index 417016efe1da..504808a83955 100644 --- a/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveMask-v1.rst @@ -21,13 +21,13 @@ There are two types of mask workspace that can serve as input. 1. `MaskWorkspace `__ #################################### -In this case, :ref:`_algm-SaveMask` will read Y values to determine +In this case, :ref:`algm-SaveMask` will read Y values to determine which detectors are masked; 2. A non-\ `MaskWorkspace `__ `MatrixWorkspace `__ containing `Instrument `__ ######################################################################################################################### -In this case, :ref:`_algm-SaveMask` will scan through all detectors to +In this case, :ref:`algm-SaveMask` will scan through all detectors to determine which are masked. Definition of Mask diff --git a/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst index 19506adbf830..32606d672a24 100644 --- a/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst @@ -21,7 +21,7 @@ contain histogram data with common binning on all spectra. Child Algorithms used ##################### -:ref:`_algm-FindDetectorsPar` algorithm is used to calculate +:ref:`algm-FindDetectorsPar` algorithm is used to calculate detectors parameters from the instrument description. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst index 4f5981f0f7cd..4b2784bba885 100644 --- a/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveNexus-v1.rst @@ -36,6 +36,6 @@ loaded at present. Child Algorithms used ##################### -:ref:`_algm-SaveNexusProcessed` +:ref:`algm-SaveNexusProcessed` .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst index 87d2db14ed6e..7a7cfb6462c8 100644 --- a/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SaveNexusProcessed-v1.rst @@ -11,7 +11,7 @@ Description The algorithm SaveNexusProcessed will write a Nexus data file from the named workspace. This can later be loaded using -:ref:`_algm-LoadNexusProcessed`. +:ref:`algm-LoadNexusProcessed`. The file name can be an absolute or relative path and should have the extension .nxs, .nx5 or .xml. Warning - using XML format can be diff --git a/Code/Mantid/docs/source/algorithms/SavePAR-v1.rst b/Code/Mantid/docs/source/algorithms/SavePAR-v1.rst index 4234acc7cbde..e6ea2d6cc8d5 100644 --- a/Code/Mantid/docs/source/algorithms/SavePAR-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SavePAR-v1.rst @@ -11,7 +11,7 @@ Description Saves the geometry information of the detectors in a workspace into a PAR format ASCII file. The angular positions and linear sizes of the -detectors are calculated using :ref:`_algm-FindDetectorsPar` +detectors are calculated using :ref:`algm-FindDetectorsPar` algorithm. Tobyfit PAR file is an ASCII file consisting of the header and 5 or 6 diff --git a/Code/Mantid/docs/source/algorithms/SavePHX-v1.rst b/Code/Mantid/docs/source/algorithms/SavePHX-v1.rst index deaa706d399f..931491c8fa67 100644 --- a/Code/Mantid/docs/source/algorithms/SavePHX-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SavePHX-v1.rst @@ -11,7 +11,7 @@ Description Saves the geometry information of the detectors in a workspace into a PHX format ASCII file. The angular positions and angular sizes of the -detectors are calculated using :ref:`_algm-FindDetectorsPar` +detectors are calculated using :ref:`algm-FindDetectorsPar` algorithm. Mantid generated PHX file is an ASCII file consisting of the header and diff --git a/Code/Mantid/docs/source/algorithms/Scale-v1.rst b/Code/Mantid/docs/source/algorithms/Scale-v1.rst index c71cd75ffbd7..85fca36b4647 100644 --- a/Code/Mantid/docs/source/algorithms/Scale-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Scale-v1.rst @@ -9,8 +9,8 @@ Description ----------- -Uses the binary operation algorithms :ref:`_algm-Multiply` or -:ref:`_algm-Plus` to scale the input workspace by the amount requested. +Uses the binary operation algorithms :ref:`algm-Multiply` or +:ref:`algm-Plus` to scale the input workspace by the amount requested. This algorithm is provided as a simple, but less powerful, alternative to the python `workspace algebra `__ functionality. diff --git a/Code/Mantid/docs/source/algorithms/SetSpecialCoordinates-v1.rst b/Code/Mantid/docs/source/algorithms/SetSpecialCoordinates-v1.rst index 02f11d7fe9b7..299484880151 100644 --- a/Code/Mantid/docs/source/algorithms/SetSpecialCoordinates-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SetSpecialCoordinates-v1.rst @@ -16,8 +16,8 @@ coordinate system. On the other hand QSample or HKL. There is an inherent link between a PeaksWorkspace and a MDWorkspace in that an MDWorkspace may utilise the same coordinate systems as the PeaksWorkspaces. For example, workspaces created via -:ref:`_algm-ConvertToMD` or -:ref:`_algm-ConvertToDiffractionMDWorkspace` +:ref:`algm-ConvertToMD` or +:ref:`algm-ConvertToDiffractionMDWorkspace` may be generated in a special set of V3D coordinates, which are the same as those for the PeaksWorkspace (QLab, QSample, HKL). Amongst other usages, in order to be able to simultaneously plot MDWorkspaces and diff --git a/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst b/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst index a5e62eb58fa9..d78bc52d43f3 100644 --- a/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SliceMD-v1.rst @@ -13,12 +13,12 @@ Algorithm that can take a slice out of an original `MDEventWorkspace `__ while preserving all the events contained therein. -It uses the same parameters as :ref:`_algm-BinMD` to determine a +It uses the same parameters as :ref:`algm-BinMD` to determine a transformation to make from input->output workspace. The difference is -that :ref:`_algm-BinMD` sums events in a regular grid whereas SliceMD +that :ref:`algm-BinMD` sums events in a regular grid whereas SliceMD moves the events into the output workspace, which boxes itself. -Please see :ref:`_algm-BinMD` for a detailed description of the +Please see :ref:`algm-BinMD` for a detailed description of the parameters. Axis-Aligned Slice diff --git a/Code/Mantid/docs/source/algorithms/SpecularReflectionCalculateTheta-v1.rst b/Code/Mantid/docs/source/algorithms/SpecularReflectionCalculateTheta-v1.rst index aef2ebe5139f..51dcf7e74dd9 100644 --- a/Code/Mantid/docs/source/algorithms/SpecularReflectionCalculateTheta-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SpecularReflectionCalculateTheta-v1.rst @@ -17,6 +17,6 @@ and return a corrected ThetaIn. The calculated theta value in degrees is returned by the algorithm. Also see -:ref:`_algm-SpecularReflectionPositionCorrect` +:ref:`algm-SpecularReflectionPositionCorrect` .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SphericalAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/SphericalAbsorption-v1.rst index 0eec80e12bc3..3ffb71cd1416 100644 --- a/Code/Mantid/docs/source/algorithms/SphericalAbsorption-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SphericalAbsorption-v1.rst @@ -12,6 +12,6 @@ Description Calculates bin-by-bin correction factors for attenuation due to absorption and scattering in a **spherical** sample. Sample data must be divided by these corrections. Algorithm calls -:ref:`_algm-AnvredCorrection`. +:ref:`algm-AnvredCorrection`. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst b/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst index d805451e4409..616ef14412c8 100644 --- a/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst +++ b/Code/Mantid/docs/source/algorithms/StartLiveData-v1.rst @@ -13,8 +13,8 @@ The StartLiveData algorithm launches a background job that monitors and processes live data. The background algorithm started is -:ref:`_algm-MonitorLiveData`, which simply calls -:ref:`_algm-LoadLiveData` at a fixed interval. +:ref:`algm-MonitorLiveData`, which simply calls +:ref:`algm-LoadLiveData` at a fixed interval. For details on the way to specify the data processing steps, see: `LoadLiveData `__. diff --git a/Code/Mantid/docs/source/algorithms/StepScan-v1.rst b/Code/Mantid/docs/source/algorithms/StepScan-v1.rst index 2a1349787b30..0608bdec5b6f 100644 --- a/Code/Mantid/docs/source/algorithms/StepScan-v1.rst +++ b/Code/Mantid/docs/source/algorithms/StepScan-v1.rst @@ -13,12 +13,12 @@ This algorithm is for producing rocking curves from alignment scan runs. It is for use only with ADARA-style SNS datasets as it requires the 'scan\_index' log variable. -The algorithm optionally uses the :ref:`_algm-MaskDetectors` -and/or :ref:`_algm-FilterByXValue` algorithms to restrict the +The algorithm optionally uses the :ref:`algm-MaskDetectors` +and/or :ref:`algm-FilterByXValue` algorithms to restrict the region of data included. **N.B. If these options are used, then this algorithm will modify the input workspace.** -The :ref:`_algm-SumEventsByLogValue` algorithm is then +The :ref:`algm-SumEventsByLogValue` algorithm is then called, with 'scan\_index' as the log to sum against. The row of the resulting table pertaining to scan\_index=0 (which indicates 'not a scan point') is then removed. diff --git a/Code/Mantid/docs/source/algorithms/Stitch1D-v3.rst b/Code/Mantid/docs/source/algorithms/Stitch1D-v3.rst index 2a36386ec956..efad264f107c 100644 --- a/Code/Mantid/docs/source/algorithms/Stitch1D-v3.rst +++ b/Code/Mantid/docs/source/algorithms/Stitch1D-v3.rst @@ -19,7 +19,7 @@ or EndOverlap are not provided, then these are taken to be the region of x-axis intersection. The workspaces must be histogrammed. Use -:ref:`_algm-ConvertToHistogram` on workspaces prior to +:ref:`algm-ConvertToHistogram` on workspaces prior to passing them to this algorithm. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Stitch1DMany-v1.rst b/Code/Mantid/docs/source/algorithms/Stitch1DMany-v1.rst index 8509e724e0df..de8f999c9464 100644 --- a/Code/Mantid/docs/source/algorithms/Stitch1DMany-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Stitch1DMany-v1.rst @@ -11,7 +11,7 @@ Description Stitches single histogram `Matrix Workspaces `__ together outputting a stitched Matrix Workspace. This algorithm is a -wrapper over :ref:`_algm-Stitch1D`. +wrapper over :ref:`algm-Stitch1D`. The algorithm expects pairs of StartOverlaps and EndOverlaps values. The order in which these are provided determines the pairing. There should @@ -20,7 +20,7 @@ N = 1 -(No of workspaces to stitch). StartOverlaps and EndOverlaps are in the same units as the X-axis for the workspace and are optional. The workspaces must be histogrammed. Use -:ref:`_algm-ConvertToHistogram` on workspaces prior to +:ref:`algm-ConvertToHistogram` on workspaces prior to passing them to this algorithm. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst b/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst index 94e0fc20773f..5290e8456b74 100644 --- a/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst +++ b/Code/Mantid/docs/source/algorithms/StripPeaks-v1.rst @@ -15,7 +15,7 @@ dataset and subtract them, leaving just the residual 'background'. ChildAlgorithms used #################### -The :ref:`_algm-FindPeaks` algorithm is used to identify the peaks in +The :ref:`algm-FindPeaks` algorithm is used to identify the peaks in the data. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst b/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst index ff9dff28db26..70c9e5e22a8c 100644 --- a/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SumEventsByLogValue-v1.rst @@ -25,7 +25,7 @@ for which the log had each value. Further columns will be added for: - Monitors, if any - this requires an event workspace with the same name as the input workspace plus a '\_monitors' suffix (this is what - :ref:`_algm-LoadEventNexus` will give). + :ref:`algm-LoadEventNexus` will give). - The total time duration, in seconds, during which the log had each value. - The integrated proton charge during the period(s) for which the log diff --git a/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst b/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst index 0ffd3586b0a0..bf2f03b29e8d 100644 --- a/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst +++ b/Code/Mantid/docs/source/algorithms/SumRowColumn-v1.rst @@ -19,7 +19,7 @@ single spectrum of row or column number against total counts. ChildAlgorithms used #################### -The :ref:`_algm-Integration` algorithm is used to sum up each +The :ref:`algm-Integration` algorithm is used to sum up each spectrum between XMin & XMax. .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst b/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst index 58e22d55ac1f..b791d1c6f4f5 100644 --- a/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/TransformMD-v1.rst @@ -30,7 +30,7 @@ Notes The relationship between the workspace and the original `MDWorkspace `__, for example when the MDHistoWorkspace is -the result of :ref:`_algm-BinMD`, is lost. This means that you cannot +the result of :ref:`algm-BinMD`, is lost. This means that you cannot re-bin a transformed `MDHistoWorkspace `__. No units are not modified by this algorithm. diff --git a/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst b/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst index 5b7acde6316d..0567ce053b4a 100644 --- a/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst +++ b/Code/Mantid/docs/source/algorithms/UnwrapSNS-v1.rst @@ -17,8 +17,8 @@ are marked as circles. detected\|centre\|| | The two neutons on the right of the diagram were actually produced in frame 1 but will be recorded in frame 2 at low time of flight (TOF) and -a straight :ref:`_algm-ConvertUnits` will bin them at high energy -and short wavelength! :ref:`_algm-UnwrapSNS` moves those particles to +a straight :ref:`algm-ConvertUnits` will bin them at high energy +and short wavelength! :ref:`algm-UnwrapSNS` moves those particles to the end of the spectrum by increasing their time of flight by the duration of a frame multiplied by the number (one or more) of frames they were "late" by. diff --git a/Code/Mantid/docs/source/algorithms/WeightedMeanMD-v1.rst b/Code/Mantid/docs/source/algorithms/WeightedMeanMD-v1.rst index 8d5594affd79..bdabae99fa94 100644 --- a/Code/Mantid/docs/source/algorithms/WeightedMeanMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/WeightedMeanMD-v1.rst @@ -10,7 +10,7 @@ Description ----------- Takes two MDHistoWorkspaces and calculates the weighted mean for each -bin. See :ref:`_algm-WeightedMean` for more details on the +bin. See :ref:`algm-WeightedMean` for more details on the algorithm workings. Both inputs must be MDHistoWorkspaces, the algorithm will not run with MDEventWorkspaces. diff --git a/Code/Mantid/docs/source/functions/NeutronBk2BkExpConvPVoigt.rst b/Code/Mantid/docs/source/functions/NeutronBk2BkExpConvPVoigt.rst index 646e29fe1b6e..9ab8c2657c53 100644 --- a/Code/Mantid/docs/source/functions/NeutronBk2BkExpConvPVoigt.rst +++ b/Code/Mantid/docs/source/functions/NeutronBk2BkExpConvPVoigt.rst @@ -10,7 +10,7 @@ Notice ------ 1. This is not an algorithm. However this fit function is a used through -the :ref:`_algm-Fit` algorithm. +the :ref:`algm-Fit` algorithm. 2. It is renamed from ThermalNeutronBk2BkExpConvPV. diff --git a/Code/Mantid/docs/source/functions/ProductLinearExp.rst b/Code/Mantid/docs/source/functions/ProductLinearExp.rst index 55a41464780c..02f25d4bf3ee 100644 --- a/Code/Mantid/docs/source/functions/ProductLinearExp.rst +++ b/Code/Mantid/docs/source/functions/ProductLinearExp.rst @@ -13,6 +13,6 @@ functions. :math:`(\mbox{A0}+\mbox{A1}\times x) \times \mbox{Height}\times \exp(-\frac{x}{\mbox{Lifetime}})` -This function may be used with the :ref:`_algm-Fit` algorithm. However, it +This function may be used with the :ref:`algm-Fit` algorithm. However, it was originally added to Mantid as a named function for the purposes of detector efficiency calibration. diff --git a/Code/Mantid/docs/source/functions/ProductQuadraticExp.rst b/Code/Mantid/docs/source/functions/ProductQuadraticExp.rst index 45255a42f59d..f18fbbce16d7 100644 --- a/Code/Mantid/docs/source/functions/ProductQuadraticExp.rst +++ b/Code/Mantid/docs/source/functions/ProductQuadraticExp.rst @@ -12,7 +12,7 @@ details on the component functions. :math:`(\mbox{A0}+\mbox{A1}\times x+\mbox{A2}\times x^2) \times \mbox{Height}\times \exp(-\frac{x}{\mbox{Lifetime}})` -This function may be used with the :ref:`_algm-Fit` algorithm. However, it +This function may be used with the :ref:`algm-Fit` algorithm. However, it was originally added to Mantid as a named function for the purposes of detector efficiency calibration. Also see `ProductLinearExp `__. diff --git a/Code/Mantid/docs/source/functions/ThermalNeutronBk2BkExpConvPVoigt.rst b/Code/Mantid/docs/source/functions/ThermalNeutronBk2BkExpConvPVoigt.rst index 7f53b3f312b2..acdb332f538b 100644 --- a/Code/Mantid/docs/source/functions/ThermalNeutronBk2BkExpConvPVoigt.rst +++ b/Code/Mantid/docs/source/functions/ThermalNeutronBk2BkExpConvPVoigt.rst @@ -10,7 +10,7 @@ Notice ------ 1. This is not an algorithm. However this fit function is a used through -the :ref:`_algm-Fit` algorithm. +the :ref:`algm-Fit` algorithm. 2. It is renamed from ThermalNeutronBk2BkExpConvPV. From 6e51c8a30af7399c7978bffd8cd6068c0e6bc048 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 17:10:52 +0100 Subject: [PATCH 83/86] Add usage examples to a few doc files. Some data has been shuffled as a result. Refs #9562 --- Code/Mantid/Framework/Kernel/CMakeLists.txt | 16 +- .../algorithms/DiffractionFocussing-v2.rst | 57 + Code/Mantid/docs/source/algorithms/Fit-v1.rst | 57 +- .../Mantid/docs/source/algorithms/Load-v1.rst | 85 + .../source/algorithms/LoadISISNexus-v2.rst | 62 + .../docs/source/algorithms/LoadNexus-v1.rst | 66 + Code/Mantid/docs/source/usagedata-note.txt | 5 + .../UsageData/4detector_cal_example_file.cal | 6 + Test/AutoTestData/UsageData/HRP39180.RAW | Bin 0 -> 1637888 bytes .../{ => UsageData}/HYS_11092_event.nxs | Bin .../AutoTestData/{ => UsageData}/LOQ49886.nxs | Bin .../{ => UsageData}/MUSR00015189.nxs | Bin .../{ => UsageData}/POLREF00004699.nxs | Bin Test/AutoTestData/UsageData/README.md | 3 + .../AutoTestData/{ => UsageData}/focussed.nxs | Bin .../UsageData/hrpd_new_072_01_corr.cal | 2780 +++++++++++++++++ 16 files changed, 3128 insertions(+), 9 deletions(-) create mode 100644 Code/Mantid/docs/source/usagedata-note.txt create mode 100644 Test/AutoTestData/UsageData/4detector_cal_example_file.cal create mode 100644 Test/AutoTestData/UsageData/HRP39180.RAW rename Test/AutoTestData/{ => UsageData}/HYS_11092_event.nxs (100%) rename Test/AutoTestData/{ => UsageData}/LOQ49886.nxs (100%) rename Test/AutoTestData/{ => UsageData}/MUSR00015189.nxs (100%) rename Test/AutoTestData/{ => UsageData}/POLREF00004699.nxs (100%) create mode 100644 Test/AutoTestData/UsageData/README.md rename Test/AutoTestData/{ => UsageData}/focussed.nxs (100%) create mode 100644 Test/AutoTestData/UsageData/hrpd_new_072_01_corr.cal diff --git a/Code/Mantid/Framework/Kernel/CMakeLists.txt b/Code/Mantid/Framework/Kernel/CMakeLists.txt index 6063c3d3ff9b..e60d22d53aab 100644 --- a/Code/Mantid/Framework/Kernel/CMakeLists.txt +++ b/Code/Mantid/Framework/Kernel/CMakeLists.txt @@ -106,7 +106,7 @@ set ( SRC_UNITY_IGNORE_FILES src/Atom.cpp src/FileValidator.cpp src/DirectoryValidator.cpp src/PropertyManager.cpp - src/Unit.cpp + src/Unit.cpp src/System.cpp ) @@ -356,9 +356,9 @@ enable_precompiled_headers ( inc/MantidKernel/PrecompiledHeader.h SRC_FILES ) # Add the target for this directory add_library ( Kernel ${SRC_FILES} ${INC_FILES} ) # Set the name of the generated library -set_target_properties ( Kernel PROPERTIES OUTPUT_NAME MantidKernel +set_target_properties ( Kernel PROPERTIES OUTPUT_NAME MantidKernel COMPILE_DEFINITIONS "IN_MANTID_KERNEL;PSAPI_VERSION=1" ) - + # Add to the 'Framework' group in VS set_property ( TARGET Kernel PROPERTY FOLDER "MantidFramework" ) @@ -375,7 +375,7 @@ add_subdirectory ( test ) ########################################################################### # DON'T try to update the MantidVersion source file if we were not able to -# determine it from git and the file already exists. This makes sure the +# determine it from git and the file already exists. This makes sure the # version number is correct when building off the source tarball if ( NOT NOT_GIT_REPO OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/MantidVersion.cpp ) @@ -388,7 +388,7 @@ endif () # This section deals with creating the ParaViewVersion implementation ########################################################################### configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/src/ParaViewVersion.cpp.in - ${CMAKE_CURRENT_SOURCE_DIR}/src/ParaViewVersion.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ParaViewVersion.cpp ) ########################################################################### @@ -408,7 +408,7 @@ set ( PV_PLUGINS "./pvplugins" ) set ( IGNORE_PARAVIEW "0" ) set ( QTPLUGINS "." ) set ( PYTHONPLUGIN_DIRS "${MANTID_ROOT}/Framework/PythonInterface/plugins" ) -set ( DATADIRS ${MANTID_ROOT}/../../Test/AutoTestData;${MANTID_ROOT}/instrument ) +set ( DATADIRS ${MANTID_ROOT}/../../Test/AutoTestData;${MANTID_ROOT}/../../Test/AutoTestData/UsageData;${MANTID_ROOT}/instrument ) set ( COLORMAPS_FOLDER ${MANTID_ROOT}/Installers/colormaps/ ) SET ( MANTIDPUBLISHER "http://upload.mantidproject.org/scriptrepository/payload/publish_debug" ) @@ -461,7 +461,7 @@ configure_file ( ../Properties/Mantid.properties.template # Then, at build time, copy into appropriate place add_custom_command ( TARGET Kernel POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different + COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/Mantid.properties ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR} ) @@ -528,6 +528,6 @@ endif () configure_file ( ../Properties/Mantid.properties.template ${CMAKE_CURRENT_BINARY_DIR}/Mantid.properties.install ) -install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/Mantid.properties.install +install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/Mantid.properties.install DESTINATION ${BIN_DIR} RENAME Mantid.properties ) diff --git a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst index dfa15b287e05..a765a7ca6ab0 100644 --- a/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst +++ b/Code/Mantid/docs/source/algorithms/DiffractionFocussing-v2.rst @@ -50,6 +50,63 @@ means that you can rebin the resulting spectra to finer bins with no loss of data. In fact, it is unnecessary to bin your incoming data at all; binning can be performed as the very last step. +Usage +----- + +.. include:: ../usagedata-note.txt + +**Example - Diffraction focussing of HRPD data:** + +.. testcode:: ExHRPDFocussing + + # Load HRP dataset + ws = Load("HRP39180.RAW") + + # specify groupping file, here using CalFile format + cal_file = "hrpd_new_072_01_corr.cal" + + # For HRPD data, perform a unit convertion TOF->d-spacing, taking into account detector position offsets + ws = AlignDetectors(InputWorkspace='ws',CalibrationFile=cal_file) + # Focus the data + ws = DiffractionFocussing(InputWorkspace='ws',GroupingFileName=cal_file) + + print("The 51st y-value is: %.3f" % ws.readY(0)[50]) + +.. testcleanup:: ExHRPDFocussing + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExHRPDFocussing + + The 51st y-value is: 900.709 + +**Example - Demonstrating option PreserveEvents:** + +.. testcode:: ExEventFocussing + + # create event workspace with one bank of 4 detectors + ws = CreateSampleWorkspace(WorkspaceType="Event", XUnit="dSpacing", NumBanks=1, BankPixelWidth=2) + + # focus data in 4 spectra to 2 spectra according to .cal file and don't perserve events + ws = DiffractionFocussing(InputWorkspace='ws', GroupingFileName="4detector_cal_example_file.cal" \ + , PreserveEvents=False) + + print "Number of focussed spectra: " + str(ws.getNumberHistograms()) + print "What type is the workspace after focussing: " + str(type(ws)) + +.. testcleanup:: ExEventFocussing + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExEventFocussing + + Number of focussed spectra: 2 + What type is the workspace after focussing: + Previous Versions ----------------- diff --git a/Code/Mantid/docs/source/algorithms/Fit-v1.rst b/Code/Mantid/docs/source/algorithms/Fit-v1.rst index c4fd9e80cc7d..405db213df1b 100644 --- a/Code/Mantid/docs/source/algorithms/Fit-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Fit-v1.rst @@ -129,7 +129,7 @@ In case of a composite function the variable name must refer to both the parameter name and the simple function it belongs to. It is done by writing the variable name in the following format: -``f``\ \ ``.``\ +``f``\ \ ``.``\ The format consists of two parts separated by a period '.'. The first part defines the function by its index in the composite function @@ -268,4 +268,59 @@ Gaussians tied: Gaussian2Fit\_Ties.jpg +Usage +----- + +**Example - Fit a Gaussian to a peak in a spectrum:** + +.. testcode:: ExFitPeak + + # create a workspace with a gaussian peak sitting on top of a linear (here flat) background + ws = CreateSampleWorkspace(Function="User Defined", UserDefinedFunction="name=LinearBackground, \ + A0=0.3;name=Gaussian, PeakCentre=5, Height=10, Sigma=0.7", NumBanks=1, BankPixelWidth=1, XMin=0, XMax=10, BinWidth=0.1) + + # Setup the data to fit: + workspaceIndex = 0 # the spectrum with which WorkspaceIndex to fit + startX = 1 # specify fitting region + endX = 9 # + + # Setup the model, here a Gaussian, to fit to data + tryCentre = '4' # A start guess on peak centre + sigma = '1' # A start guess on peak width + height = '8' # A start guess on peak height + myFunc = 'name=Gaussian, Height='+height+', PeakCentre='+tryCentre+', Sigma='+sigma + # here purposely haven't included a linear background which mean fit will not be spot on + # to include a linear background uncomment the line below + #myFunc = 'name=LinearBackground, A0=0.3;name=Gaussian, Height='+height+', PeakCentre='+tryCentre+', Sigma='+sigma + + # Do the fitting + fitStatus, chiSq, covarianceTable, paramTable, fitWorkspace = Fit(InputWorkspace='ws', \ + WorkspaceIndex=0, StartX = startX, EndX=endX, Output='fit', Function=myFunc) + + print "The fit was: " + fitStatus + print("chi-squared of fit is: %.2f" % chiSq) + print("Fitted Height value is: %.2f" % paramTable.column(1)[0]) + print("Fitted centre value is: %.2f" % paramTable.column(1)[1]) + print("Fitted sigma value is: %.2f" % paramTable.column(1)[2]) + # fitWorkspace contains the data, the calculated and the difference patterns + print "Number of spectra in fitWorkspace is: " + str(fitWorkspace.getNumberHistograms()) + print("The 20th y-value of the calculated pattern: %.4f" % fitWorkspace.readY(1)[19]) + +.. testcleanup:: ExFitPeak + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExFitPeak + + The fit was: success + chi-squared of fit is: 0.14 + Fitted Height value is: 9.79 + Fitted centre value is: 5.05 + Fitted sigma value is: 0.77 + Number of spectra in fitWorkspace is: 3 + The 20th y-value of the calculated pattern: 0.2361 + + .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/Load-v1.rst b/Code/Mantid/docs/source/algorithms/Load-v1.rst index 5f45da409026..d6fe705bb353 100644 --- a/Code/Mantid/docs/source/algorithms/Load-v1.rst +++ b/Code/Mantid/docs/source/algorithms/Load-v1.rst @@ -26,4 +26,89 @@ about these properties until it has been told the filename and found the correct loader. Once this has happened the properties of the specific Load algorithm are redeclared on to that copy of Load. +Usage +----- + +.. include:: ../usagedata-note.txt + +**Example - Load ISIS histogram Nexus file:** +(see `LoadISISNexus `_ for more options) + +.. testcode:: ExLoadISISnexusHist + + # Load ISIS LOQ histogram dataset + ws = Load('LOQ49886.nxs') + + print "The 1st x-value of the first spectrum is: " + str(ws.readX(0)[0]) + +.. testcleanup:: ExLoadISISnexusHist + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExLoadISISnexusHist + + The 1st x-value of the first spectrum is: 5.0 + +**Example - Load SNS/ISIS event Nexus file:** +(see `LoadEventNexus `_ for more options) + +.. testcode:: ExLoadEventNexus + + # Load SNS HYS event dataset + ws = Load('HYS_11092_event.nxs') + + print "The number of histograms (spectra) is: " + str(ws.getNumberHistograms()) + +.. testcleanup:: ExLoadEventNexus + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExLoadEventNexus + + The number of histograms (spectra) is: 20480 + +**Example - Load ISIS Muon file:** +(see `LoadMuonNexus `_ for more options) + +.. testcode:: ExLoadISISMuon + + # Load ISIS multiperiod muon MUSR dataset + ws = Load('MUSR00015189.nxs') + + print "The number of periods (entries) is: " + str(ws[0].getNumberOfEntries()) + +.. testcleanup:: ExLoadISISMuon + + DeleteWorkspace(ws[0]) + +Output: + +.. testoutput:: ExLoadISISMuon + + The number of periods (entries) is: 2 + +**Example - Load Mantid processed Nexus file ISIS:** +(see `LoadNexusProcessed `_ for more options) + +.. testcode:: ExLoadNexusProcessedWithLoad + + # Load Mantid processed GEM data file + ws = Load('focussed.nxs') + + print "The number of histograms (spectra) is: " + str(ws.getNumberHistograms()) + +.. testcleanup:: ExLoadNexusProcessedWithLoad + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExLoadNexusProcessedWithLoad + + The number of histograms (spectra) is: 6 + .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadISISNexus-v2.rst b/Code/Mantid/docs/source/algorithms/LoadISISNexus-v2.rst index 9f4fde83c6fa..c0a2bb50ea14 100644 --- a/Code/Mantid/docs/source/algorithms/LoadISISNexus-v2.rst +++ b/Code/Mantid/docs/source/algorithms/LoadISISNexus-v2.rst @@ -11,4 +11,66 @@ Description Loads a Nexus file created from an ISIS instrument. +Usage +----- + +.. include:: ../usagedata-note.txt + +**Example - Load without any optional arguments:** + +.. testcode:: ExLoadISISnexus + + # Load LOQ histogram dataset + ws = LoadISISNexus('LOQ49886.nxs') + + print "The 1st x-value of the first spectrum is: " + str(ws.readX(0)[0]) + +.. testcleanup:: ExLoadISISnexus + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExLoadISISnexus + + The 1st x-value of the first spectrum is: 5.0 + +**Example - Using SpectrumMin and SpectrumMax:** + +.. testcode:: ExLoadSpectrumMinMax + + # Load from LOQ data file spectrum 2 to 3. + ws = LoadISISNexus('LOQ49886.nxs',SpectrumMin=2,SpectrumMax=3) + + print "The number of histograms (spectra) is: " + str(ws.getNumberHistograms()) + +.. testcleanup:: ExLoadSpectrumMinMax + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExLoadSpectrumMinMax + + The number of histograms (spectra) is: 2 + +**Example - Using EntryNumber:** + +.. testcode:: ExLoadEntryNumber + + # Load first period of multiperiod POLREF data file + ws = LoadISISNexus('POLREF00004699.nxs', EntryNumber=1) + + print "The number of histograms (spectra) is: " + str(ws.getNumberHistograms()) + +.. testcleanup:: ExLoadEntryNumber + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExLoadEntryNumber + + The number of histograms (spectra) is: 246 + .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst index e1c313753f78..f5fd03f275f8 100644 --- a/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst +++ b/Code/Mantid/docs/source/algorithms/LoadNexus-v1.rst @@ -24,4 +24,70 @@ which spectra are loaded into the workspace. If spectrum\_min and spectrum\_max are given, then only that range to data will be loaded. If a spectrum\_list is given than those values will be loaded. +Usage +----- + +.. include:: ../usagedata-note.txt + +**Example - Load ISIS histogram Nexus file:** +(see `LoadISISNexus `_ for more options) + +.. testcode:: ExLoadISISnexus + + # Load LOQ histogram dataset + ws = LoadNexus('LOQ49886.nxs') + + print "The 1st x-value of the first spectrum is: " + str(ws.readX(0)[0]) + +.. testcleanup:: ExLoadISISnexus + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExLoadISISnexus + + The 1st x-value of the first spectrum is: 5.0 + +**Example - Load ISIS Muon file:** +(see `LoadMuonNexus `_ for more options) + +.. testcode:: ExLoadISISMuon + + # Load ISIS multiperiod muon MUSR dataset + ws = LoadNexus('MUSR00015189.nxs') + + print "The number of periods (entries) is: " + str(ws[0].getNumberOfEntries()) + +.. testcleanup:: ExLoadISISMuon + + DeleteWorkspace(ws[0]) + +Output: + +.. testoutput:: ExLoadISISMuon + + The number of periods (entries) is: 2 + +**Example - Load Mantid processed Nexus file ISIS:** +(see `LoadNexusProcessed `_ for more options: + +.. testcode:: ExLoadNexusProcessedWithLoadNexus + + # Load Mantid processed GEM data file + ws = LoadNexus('focussed.nxs') + + print "The number of histograms (spectra) is: " + str(ws.getNumberHistograms()) + +.. testcleanup:: ExLoadNexusProcessedWithLoadNexus + + DeleteWorkspace(ws) + +Output: + +.. testoutput:: ExLoadNexusProcessedWithLoadNexus + + The number of histograms (spectra) is: 6 + + .. categories:: diff --git a/Code/Mantid/docs/source/usagedata-note.txt b/Code/Mantid/docs/source/usagedata-note.txt new file mode 100644 index 000000000000..d133e4ca2d5a --- /dev/null +++ b/Code/Mantid/docs/source/usagedata-note.txt @@ -0,0 +1,5 @@ +.. note:: + + To run these usage example please first download the + `usage data `_, + and add these to your path. In MantidPlot this is done using `Manage User Directories `_. diff --git a/Test/AutoTestData/UsageData/4detector_cal_example_file.cal b/Test/AutoTestData/UsageData/4detector_cal_example_file.cal new file mode 100644 index 000000000000..621129e8e6bd --- /dev/null +++ b/Test/AutoTestData/UsageData/4detector_cal_example_file.cal @@ -0,0 +1,6 @@ +# Ariel detector file, written Sat Nov 24 16:52:56 2007 +# Format: number UDET offset select group + 0 4 0.0000000 1 1 + 1 5 0.0000000 1 1 + 2 6 0.0000000 1 2 + 3 7 0.0000000 1 2 diff --git a/Test/AutoTestData/UsageData/HRP39180.RAW b/Test/AutoTestData/UsageData/HRP39180.RAW new file mode 100644 index 0000000000000000000000000000000000000000..c4550ac2048ad6912913411682f5a856067f7bcd GIT binary patch literal 1637888 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%0Ak6XwRk!ox&qRiKW}aRW9iSE0dNAy6o~`? z+&%Iu2&~;8xhc?&;)0!mtd%p#V(#ID8&F<};^^Um#VM8xA9z%|-2vo8mj57!P)-VF zobi0RdSr&uAP@nt2kR~60f>5k|akm8=TF;){q zD#XOl7f#s&fx?{=Chcs5CywC(T+Di?42Ob!QlhOLXH5c{Bq%>z=ti z!svmeBNp);x%;RED}~&IdHn4G<2xYnCXO?JM{ej~D0+K{v+~Fy-xHH1L}%HI1xfCo zU??Uz7r#B~h~Fc?B$ZT0{zarXjsBxM&rzoff~Pw{(5)w(JbC?a&m!DCcd3}OvD5K}B~^c8 zpx8I)d z+1s5zs?PhCzC7IAef$0SnU;ZTZ|@#>n-FW~EVN(Z`rG#(Usz{!=5_kx>(z_ve!M^F z{^lF<{VQvN|Munf>f-y=Eqe=J@7|tnA5LHX$Iaazw_l!o;kVm_e*gAgAAek)e*DYL zH)4TBWZn_f^7+#p)7hKXKdxEB|NRHQ1M%|u-~Kyu=J#h5V*qmZ&Ec*?Pn70}3DBnT z^MxBT)zgu#Cxkt1nt);$ZwqrVfdPgK_ARwghIts!a)*p|Fsn52FT98Q7O@WjE0 z<07Xj@MFpir$$`WsRrwTs{%G_C=vU-zll2lQ1O;L13g4_1Fhjj z!s8M+iXrSIgGgqXiE6GfBg#18b@Gc?j0s6dh{{x2#d_nsu|wu@^v7h@mIy&j4?X9O z0F%a8c|txW^%5Z|15WniefLN~<|@;oGXirn)$F2$oUe|lTsdH!iD@v257Rg;@g{`h zLna{HTPYeZp4k?cBT6PR!W!1y(!0B9}LIRO`R zDk#Lw6a>M>s$=_i+9eU#W25F;@O3!`l_6mlWj~1q2B7{mB76m);t~GX5>2^b#6W`e zGwg;hpqjt(@0$K$Bduo z1m0BuvjMf(iu*3KHIyKd+?zlPr@fg9xFODO3-Q*v42Rg%>o-+(`2ee%Nc1*jDaBv7 zoeC~-tMhyU0zE)%38IMiO^90J?b>M__Yc`YkBx|zCXU=_Ll74e+^S8&D5;bcxuefO z%HBp#GMu8lA~?9P(MVK~UhH}_9i4UKC1gfM9_}KMV?+RHj6SMB4)G;;JtBdkUmpNt zCj*JV*u#>j0wnTjLx*ddui3$$9W9NUM><$QWynw#Lnc=@xMH;*2fA{HU24#_RXvZc+;~^tRwr*>Uhe?m<_Rye zBQ>5dY7~`9TIi$yBOeWarSQ+y{$H2Ziz4Oa$ z*pL@OHdJ7v5(eRkAYub&qdYfV{1H8W1CBX_er2>l#E~FgzkENDe}CLE{Ij=m6J?_o zL-yp*&%8q*>Kw`#lJUw>qf+thG-`%TX2v$w7B@fuRw6?%x<4WbX@8(Tu}X7+wyA-B zfh$-WnbX-z0yi11a>Cb$ju1qG3Ci5t%^!S)eQ3!*^>nd)6-*3chluPS(Fn+BT62zw zbo{qdDDP=yd`AcZLgykxJXNo*9$R7EY33>oG!AF_$}hEf_m6r)l#rswWC(0vq8H;N zNKJ=gkLeZe>gWKQo}MUks|&iY!-frU>I*L-5ruqjD8bqw#kFrnC;YUW4G>vjh5$Ak z`VU86D5r^-Ju~vift{g-no3Cg>Ixp1g1%RFke{DV3w&DO z(*mCs__V;M1wJkCX@O4*d|Kes0-qN6w7{nYJ}vNRflmv3THrse1z2`Y1Sb9QA$^0U8QZ&)RkH9xUh!l3ZmN~SWyNCxOU#VTG@)D_jp}(^?r}{ zqP?-lf~qT%-hALUkyx8`-4@nR^v;conp{&rp)1bF5oeY}xpDy>DlCOUhMNIM>&+|{ zey`a8#2PJ+39|I*Eg0Crh2>$^)ZMrsAMRbSRNDO&7gphU!+k_Sy+5H)-k{*b-72yN z!UZRN&7+<->{*OuLn!mUoXQE(@YyWZSy@u@Fwae;)A-t$M9?l4N!4FkMA zGBs7-`#3E90^s7VLgJ2YSz~9Hl3Cn_s`YGP<}tYL?p*Qy2hHW3J?=)hKJE|1b9V$) zaH#iqygv$sTQ~f?-}9-`#ijG!9Thu#bz!p563?VC3W z@GBBP6lzigq$O?c7I7O84%|uet}VqV!S(6@5T32R9pUeb*fSVA2a%>6HMp%spY~jdu4nmx5Pxy-~q&22d zf-NGN8pH5hE|z7hl-ne9ib3REfg3g`VHe*Sq;P-}p>Fg;d{JSg544p{jXP%$BHoB+ zZ=Tuih~UfnC&PrhP&w7+4rh(zEgvk)`|*4`8P;OQmJahyk$&}7J*~h{^`-?6jcNz$ z30TF%0p4ux1{UOz`mUQ$wg`lU3vKwGU3%_DL})^fyHszyy%u*O6t2e8cnN;gvd@Xz z{_Rk4qXl~`+=_tJG;Gnzt$M-;R1<-_^w>q{j&g6WU8;UmOJyb54rikF3#j0tg(kws734GNmjxhQd)rkAhy_Jg4TqU8@-4j5)1p` z^d0fyBUCdvkJ{^Hf^gc>p3=o2v7TQPrVx}1p3bq0-QyTdTQiV$v2eK=i7;`Zk(}qN-TX-D= zxtA^rn3LIZ&9*;wCZe3V#62-25mSk|#|BBJr^&M~#HuG5y2vcE~B6dOBsB~2Uw_TF3u)i zP)4}{#ZW{OW`m1;4z@>12q}@(`uj1AaB36ujLU96$1Cvy;29qxu5HUu4F&rxjYa=ETqtfDKMy3N>hM#F#*1pwIWLAI-vn+id)7Hqq) zHennX2?r07w@{Ad0I>lxt)tj>Z4c>5Lw3ju2@hJatQ~za>7I155{+EdLOpA4w6`)` zsoz>RzEN$G$TC_>5;GUzX&QcWM48QdHd(mQ=&?d}T~2Axz}8g8bx`*g?V+jBQrdBi zd5x>AGQ8}+nwbno%+Vfgw{gbfk|P}GxS80R)67wM zLfe{DXWB>+>Y@iaScHJC0nt}!P$ES;Dy_TNoafSindzL6TaAD|yn$Ry0g#c=Is*nM zN)P|rN8wqVNZ9be7qT-IBwQFFs5adUfWAK7F@{Py$5mJ5!bn6Bt&_FLUjMslg~!l7%P_%TlL2;vemaIkIoRGH7D zp%s?KzeZv~yT~`Jgu<}AYM{m9?f!R9|$L?W996TiOa>ZVLx0O z4Fj^e!o?I<(7rr6b$N9f&M&zXlT4I&EgkQxx6~;Yk8m*aL0F!Zr(-l=7}{W`J48Ui z`zL;Q-FK9`q;U0g-@J`o@;ti4K#9%U?rw)P<0F<+m{7TJ!SA?ZT^@?zty)OMvs4V) z&@fye0U#=c+PN#=v zjYL7uR}w8gqkzR4v*48i(uncFI_-=KR1%w>(9#^^nk|UiJy+$S5LOtG9w@ZOfjY_| z63q|W^5O!MvV%tg+b|+X`6CG#%}{sbX={P9o4oZPb-vonUr})THjmgv0m3#D%*{1f zg}vR(i5zn|h9@<&u;5}QyN9pec%=~yilMy|E*S7Ms2K_avVvjY6UQ__U|5vGi{Kl1 zWft1es6q(S7F~Cu&$4mR+{jn%ohIniNweV{1Ve9Ln&z5SgZpok9g@@QZUMy{z!D z`_vBf@4C|=Gr~C3^wKnMibHBUSOVRQh2!xG@q|+g5}+{{{sa`%waaL$W&ElWv;Pf zCl*7wpv59?ONve(6$~|6!gYn+v5f;D7ywJ&kq2RFl4C|g={Ok&F?U4=G8n32ab!dq zglL@QEYS`OPoOdbF06-At`8s!i^PyL{^=rVFvgE9m@q{WjDfL?7N^4;Jy$p&Y$raP z?2dXw_fdrlerg4&Y`3|D^*D?oNqbJ!_ce2zq6C_Llj@X|zY@<(U#M{(-!tDup7 znVf;p_*(b*&4n?DWX28)e0WCrOy-QX>fUY2Egd&LC_qVI1fq5#qw8)uE3W*N4@~QT z#6Hmo;0$2oW-S*$3|3mBv3Pe1%NU9L z42aK@>yFRQ-`N7R*E0O{rZgEEnRjRkCoXC=-YdaKh9>1a4?{z$ueJaP^Aq7s>x38t zNVN4~=Fg@}W?7?_1VQe#v6%x*GnAP0OAJ;k4;cUgCMakF=wD>KBJzO}hStajSw*sO znJGOOTU+o4I0cJ7jfpl&V@KsF zB7u3AXlPqXeoLsbqy0vmGGYOO5lQ}NF&s!T8p5v4+=ZZY6k5`O8M4Wi8`&g}l0@U% zECVR+fF^`MRzFgKJ-hNczgBXFU5p|)mooI6u`pbBPKxXd80dO`mKgEeX!O@cxrC;(VBe+2Yk48yjYbSeuf@won2!)>Je~N}+hRl?OAf%`KRPWm z=Pl{Z;(ggO4~#zgtEEg{3<1K&b#`8POFxD9j6t4WzpzB{##D+v?_VB$58CCWZy5n! zs}i^llu^TXX>iT7@cxy#k8ca{VP=BUNj*;)lREgxPh`A)=fRyir26vA3=s2x zgBf^x3GXH5wayMYj7ee*ZoHg?$H1>&pRRk4^>2Uh>XI9p%Zb)R6EsWkf)knrPwMG8 z=7r}Z*K1x|?Tgu&Ju(Tv1m0D|Rx|@fTBipj`o@rmJMfM* z?jCtP4KEHxMur7nUz`T8+2j668Epl)m{()G@={^me~dkDf1C(^<(UI+vDnv_T@3H2FBoZ|2 zg|zjfOXFFus#B(zjs+-373D`6#84xJp`BZ!HuY8(!KExhy*U>+Xs9`S1T`OZVMfZj zz+gjQsOLjpK!h;xRfY!r4T8C(fIO0S5i~=gg-sbm^Hm~>hUGE}@jW_|y%Lv) zMIEytkNQw(Bqjm{&h*S@i3^IVsG6wu5b6n1SBjLkA)wWB09_OU`h>1lq%aUCe6sUh zBC{%JQ?d1E9SqH?69!|150-g;atH_r;M9~iIOVU}0H(*tcJXd-QYR$D98{9G?I#pE z7bAe3Dq^~f;f1&RY;eFTGI<|IXq@GzS++K$6#4V>ceX$yzZ!_a%?YvUBG)98;)8L7 z!$m@nI@*X!W(1#$ppF9SdI)raYqeg85Z?6Y%s*KUV@Twpn16P1v?LmZEs$nrBQ%Un z`!tcc4?<^53IJIo+oD6PNgyl>8`Ffg5zXwvw4>Zf&I#=Vn&u}nKPlQ5bI=eRXq&#w zGvaXW7?if_V3Ts$ILfrG)@L}-b~C0U1JvP&lBFBQMBuV|!Ed~@Mo||-e~!YA-CdWU z$4eLlP#j4>9PwOrp~FKB#vUB(fPLAsjoZ8P41mZ`AX(*DgVjRE3znIT98Q;TP~E&v z^EPRb{($h!weD17q){TX#iOf}Al7Rcqv8s{F|*FXnOX~8ewj8gh_=)z5LvZcmDPg* zV5uV%PG6-u63HyHgmbC}pd#}V*QO+}02)RDR?#=5{!QPW96CsHNGq6$7ym#+=W0%& zqV3nB#i`ID90JbymWeD0X3V7K(0znTW-$+W=UhT&&rqz7*_3fU(0a#VQXx1GnBd0OlWIz%~C-4SmhllX^AQc865-%xW}z8`(`3@Z0)$hI(s(F8l=4K zyCuoUEP}KYGl6TU74o`A3hsUo=1v9dq1_kAY};L)_G8Yd+;qu)!53Z$$SqWey4As% z5K-T4BRfNXki)^7y&->W_e4by5#1e>_WulbeL0F7ml^BdT=Sk3+O}x~gA>-An`MBS zyC{qb)cf{<_Q({*A8SDyXQceBQS%xX#3A6Hy`uT%?vc$f+>GK~dd}aTePJN)9OBLf zS9d-Tw0ne#94%@iEgBByr~-R^cXq`vP&=)fe8ug7qQ7JmBhq z8#E_W<4v1yybX}oY7()=tg&r_qL}lEV$4P~5^{uuVMz^N1(Z1vC77aGQiu|EwM*(t zhtv{s%#O&nV)4(+MUn7@*`yM)77Pd~QX)~&AZXK!Gbo{obHGdU+rl(V9uLkE)V zdZl^MY3d?<1xoFfEkj`E4Zmjd<(~aZ}kc)B3G19Oq&qQhGVyD78oAh4IY||{A5oyp_(Hh z?6k%9V`nIFhYhu3+f`$mnM6TXaM~T$rqfYGG;gNJUYQ-h1OqX}K`SSncGyGElu-+e z7A$BX){1UhG6{|hv|OqpNI4Rt8KW`&F1t%kMh&{OF#wRrHo;TlpTlKbM@1sSRoAGFnO8&S2QIx&RXXCUjA6>t)4=(9 zMXez8=r0da3ASTsPfzB(fBG1xqaq5~YwEU<0^_}Yc~o~2kiDq1H82)&=#LN80TERc zhK_LY5$No+C+ibJ2*-b4A_oUo5V>$uiw?zF4iMl>3_AQqINllzk{z^aqLdlV9v%u9 zfB`aw#Cgh(4D`w5di;T4X!Fh+*a{db=CKHVB5cyS%IXUKL&^8WqD~HT<#pX^VAUEg z(Q2fEk=RIp5#(efk<6X+2=4Pi9()xeE2!Mz)gxqchgrUN(3a##Ez#O8p-&`2XCXAs zWW|&2{m!lme>lj%9K10MeR0dZZ^;9P5rG33?w|Uc1vYgmg3|Xa)4F$odYCb0xqT%t z@nye3*&OAb?LLgxSc9=QLOkyT^Mju57a<7X=371WK5^vG1h;Xi$C2Ugp?7xEOx&8o z`h_L~h*tM<$IRvQaAE+*R%&&}O|I~J!xc4I-Jpr%M0X}RYvHuiVF7{|O9URiVMxXB z1!GGBAHf2PsvqO4wCA=gGR-4-_y_f7w#NcBuby@h*x4kWvT3p5=mmLzmmjaE=Jx^F zG;xPV5GUe!vTZMn`Fu@YH`z6kcK~o3`?qXTj0sq1>fj@V+aNmgW^UV)3(<`gKFL$gbGoZY_c)0d9 zKcndPwO#DhEI+4J-4JHdIq=?jy{moE&KSx~ld_||E55j=n4je(3Q*(1cg zWJ1Rj1V^k&v#L?rFh4(kR}0WEZOKky>R-)3T$`)xxCoK?D@#)$EDc!@F3eU!0!x&M zW=~;_1OIvn%FJkfH`|~s@XwA)&YoKlnrHU>7T9BO1WpLfqM?^YEIU-tsk8IpW5yTL z{9=Aev?P+2B0!HUXqHP=E@e!oY5yT6y#tw5es=FjCyulS+5XZqhX!C;UmoO}e}iuo zr||_Lon5f~K%g4G!XH$Bzc`@3p0Q$@!K__YXX1Q@-_3BnUM3@Jydb z9rB1_a#Iw0+{#Te*3vrdc~D0tuaI6h)8|9iz_}G@4D*g=IOy$oBtK0@-SKSL8nGLZqcYYq*zrq-1+D z?8T)^DMbJdt6@Y_DqBtHf=o)a-AWT20GkPz%#=^jY!E}S5=UYbCBM3$l@mPiYZ4BO zY@5vqWUJgjBcha`s5BI$3Cts3t~LQF1^KyNq{tl4awljqzX;aJjHmZ%yh%P z!d9*v!>;LCr*&MgO-OP!N7_BWO-E6{XZ0*qFPTP-Q)Pu7msB7?lp*O%S-8*7rv*MO z@M(ch3w&C@p6=5MpBDJEz^4U1E%0f9PYZln;L`%17WlNlVS @?nb4lm9FhV9n5# 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�NH#!VWaW3;HD3H83w*qMIh6UoA`P{Qxx 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

f{x8pwWrNO6zPX=EM{`=rJgD(faJ=nh+ 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ξ}KH~$^*a9I7d2-b5z`r

{LHn9@}Ty-6JD$QjKjNNjSbC5 zu{>x#{>ku7(s@)->U&508Z7<0 zSx;H8^u@7oJ2QCE*N)QKvFJO;xwG10(MKpKWYO1-pLIBgPudyrMy2%3^qdpB>I?Cs z+IPf{etM`QweN_ZjvhZ9SmT|`CmmVG#bsvmer+~IQS_u0X=gm0=iH0o5>|wvZPbbN z;(2`1*=S@`@=q!t?Cjal)AT0S30SCi!$&v#obTLON#duQ$4_Ugt8qS`bYpEPKg6q! z_2byVRp=W`fAPkl2R?e>r>S#iMT(yu9zR`Kzc%HQ9;{L2htO8k{Pf00Z~R=~+*#S; zr?Nnh5?HPZcg<1>>| zGjeiyb8!@n^}|p*3VT3~;G42i_;65QQ?KaAmAa7AWBN+uu0-z25V^j_MWkNI7fUVw zBpQr3L3TmX@ghSp=nd9|ww45g(H@NU;1KOAjJBi>=Aj?n>gE2dqReb(9`W*DXDaC# z8%qEP89vMt7-))UrRbuS^evJ?m!{B4DMp;W@%3Lm zDUDMPwUVsS?9#fCBZXDfX`U7<@~0N$9Q$-S+QTXCIh+4oO>}` z!Uix{Zj^BusTpkljvH_`5gDrs!ONX{F-?jsMBIFmttYFNRA<3tcadWnX_apG-D}8r2JO3X-#uQuTLj zk8QRSU`k&OQ*~iV-)K|m%&C}~>M@l?kYG5UOeGL-YOtv!Eh}=ue4PbvrKX`gjS}>= zHjNUdQNpy4KFBskk~)pBL0nq0KaY`eY;})5nq*p|a5|FuW}A-WbR?&TNah;XkUE{n zLXC9({Ifs*xK^b*Ll?S9&YhS8x-&v_^Nb`?XAps?6{4Gzmpt*9aTDTsCYm$RPIm6a za0&5>;GtMxB$GPR812 z(C^%f;Sz!$!Dc5Jeo|)>`l#kM#F(7pjf6R<%|UgHb1#NV2$2M$)oWVy84 zBDSmQK35l_na-WK38HgDM5h{=q|Q|orF6U|<@+ZT`m zY70@#aqh)%389=|-!qIHQWqN8Mh#arr?4QmFv0>ur^JhNp*z936XHR4QHbtLV*;s* zjNGHTEWi9&$4=+}p|3OzqQ$zXnZAA&^FUcl%@!Z?l{U+|i*Qr{pDrfkR7GEBNmKlJ z$Hsl!M|SCV#xLFeIA1iS|1{i+BsM>DjN&?BSF}1QysHrruBC==#)F6`!X;L;S|=!f zf%mxS;*Z?)dko)=ipDCxINnXa7uE@f(#50TuIStcFLl$!_rYCAzaRdx?OMf-2=(+U8ufx(OIzMX{ zEd9se&tbLm8pC&UAVMk*L`c`dfe5KM5FsUMe{�`Z%lzsZMsEfH%VODSi>wrgj~y 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 diff --git a/Test/AutoTestData/MUSR00015196.nxs b/Test/AutoTestData/MUSR00015196.nxs deleted file mode 100644 index c24a563c643009568a39881e3b48b228055eb3e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1099065 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

+PA;vIzJcJ!F>B)>e1ftaewp2 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 diff --git a/Test/AutoTestData/MUSR00015197.nxs b/Test/AutoTestData/MUSR00015197.nxs deleted file mode 100644 index 0bab6807b634b323fd4fb9e91d4162dba204df32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1099225 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 diff --git a/Test/AutoTestData/MUSR00015198.nxs b/Test/AutoTestData/MUSR00015198.nxs deleted file mode 100644 index 08a539b8e4f98f35f98493a3b31926b237add9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1099089 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

0mz?OHcmi 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 BDO&&l diff --git a/Test/AutoTestData/MUSR00015199.nxs b/Test/AutoTestData/MUSR00015199.nxs deleted file mode 100644 index e18e9b00a6976e3b2f3a467f34747928d30c4ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1099073 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 Qd{QO$>Dxd2@3dL}2gPI;c>n+a diff --git a/Test/AutoTestData/MUSR00015190.nxs b/Test/AutoTestData/UsageData/MUSR00015190.nxs similarity index 100% rename from Test/AutoTestData/MUSR00015190.nxs rename to Test/AutoTestData/UsageData/MUSR00015190.nxs diff --git a/Test/AutoTestData/MUSR00015191.nxs b/Test/AutoTestData/UsageData/MUSR00015191.nxs similarity index 100% rename from Test/AutoTestData/MUSR00015191.nxs rename to Test/AutoTestData/UsageData/MUSR00015191.nxs diff --git a/Test/AutoTestData/MUSR00015192.nxs b/Test/AutoTestData/UsageData/MUSR00015192.nxs similarity index 100% rename from Test/AutoTestData/MUSR00015192.nxs rename to Test/AutoTestData/UsageData/MUSR00015192.nxs diff --git a/Test/AutoTestData/MUSR00015193.nxs b/Test/AutoTestData/UsageData/MUSR00015193.nxs similarity index 100% rename from Test/AutoTestData/MUSR00015193.nxs rename to Test/AutoTestData/UsageData/MUSR00015193.nxs From 4df09e49a5b3209ea6ecb154321142b276543671 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 19:03:33 +0100 Subject: [PATCH 86/86] Use one less MUSR file in Python test. Refs #9562 --- .../plugins/algorithms/LoadLogPropertyTableTest.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/LoadLogPropertyTableTest.py b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/LoadLogPropertyTableTest.py index 17c687890f6f..a5151bb8f118 100644 --- a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/LoadLogPropertyTableTest.py +++ b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/LoadLogPropertyTableTest.py @@ -12,18 +12,18 @@ def test_LoadValidFilesComments(self): outputWorskapceName = "LoadLogPropertyTableTest_Test1" alg_test = run_algorithm("LoadLogPropertyTable", FirstFile = "MUSR00015189.nxs", - LastFile = "MUSR00015194.nxs", LogNames="comment", OutputWorkspace = outputWorskapceName) + LastFile = "MUSR00015193.nxs", LogNames="comment", OutputWorkspace = outputWorskapceName) self.assertTrue(alg_test.isExecuted()) #Verify some values tablews = AnalysisDataService.retrieve(outputWorskapceName) - self.assertEqual(6, tablews.rowCount()) + self.assertEqual(5, tablews.rowCount()) self.assertEqual(2, tablews.columnCount()) self.assertEqual("18.95MHz 100W", tablews.cell(0,1)) self.assertEqual(15189, tablews.cell(0,0)) - self.assertEqual(15194, tablews.cell(5,0)) + self.assertEqual(15193, tablews.cell(4,0)) run_algorithm("DeleteWorkspace", Workspace = outputWorskapceName) @@ -57,17 +57,17 @@ def test_LoadValidFilesBlankLog(self): outputWorskapceName = "LoadLogPropertyTableTest_Test3" alg_test = run_algorithm("LoadLogPropertyTable", FirstFile = "MUSR00015189.nxs", - LastFile = "MUSR00015194.nxs", OutputWorkspace = outputWorskapceName) + LastFile = "MUSR00015193.nxs", OutputWorkspace = outputWorskapceName) self.assertTrue(alg_test.isExecuted()) #Verify some values tablews = AnalysisDataService.retrieve(outputWorskapceName) - self.assertEqual(6, tablews.rowCount()) + self.assertEqual(5, tablews.rowCount()) self.assertEqual(1, tablews.columnCount()) self.assertEqual(15189, tablews.cell(0,0)) - self.assertEqual(15194, tablews.cell(5,0)) + self.assertEqual(15193, tablews.cell(4,0)) run_algorithm("DeleteWorkspace", Workspace = outputWorskapceName)

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 z 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 LFRG*XfBpC0T?aKt literal 0 HcmV?d00001 diff --git a/Test/AutoTestData/HYS_11092_event.nxs b/Test/AutoTestData/UsageData/HYS_11092_event.nxs similarity index 100% rename from Test/AutoTestData/HYS_11092_event.nxs rename to Test/AutoTestData/UsageData/HYS_11092_event.nxs diff --git a/Test/AutoTestData/LOQ49886.nxs b/Test/AutoTestData/UsageData/LOQ49886.nxs similarity index 100% rename from Test/AutoTestData/LOQ49886.nxs rename to Test/AutoTestData/UsageData/LOQ49886.nxs diff --git a/Test/AutoTestData/MUSR00015189.nxs b/Test/AutoTestData/UsageData/MUSR00015189.nxs similarity index 100% rename from Test/AutoTestData/MUSR00015189.nxs rename to Test/AutoTestData/UsageData/MUSR00015189.nxs diff --git a/Test/AutoTestData/POLREF00004699.nxs b/Test/AutoTestData/UsageData/POLREF00004699.nxs similarity index 100% rename from Test/AutoTestData/POLREF00004699.nxs rename to Test/AutoTestData/UsageData/POLREF00004699.nxs diff --git a/Test/AutoTestData/UsageData/README.md b/Test/AutoTestData/UsageData/README.md new file mode 100644 index 000000000000..5561c80bf2a1 --- /dev/null +++ b/Test/AutoTestData/UsageData/README.md @@ -0,0 +1,3 @@ +This directory should contain only the data files required to run the documentation usage tests. + +The files in here are zipped up and supplied to users for download in order that they may run the usage tests on the help pages. **Do not add files here unless absolutely necessary. First check whether an existing file will do the job. ** \ No newline at end of file diff --git a/Test/AutoTestData/focussed.nxs b/Test/AutoTestData/UsageData/focussed.nxs similarity index 100% rename from Test/AutoTestData/focussed.nxs rename to Test/AutoTestData/UsageData/focussed.nxs diff --git a/Test/AutoTestData/UsageData/hrpd_new_072_01_corr.cal b/Test/AutoTestData/UsageData/hrpd_new_072_01_corr.cal new file mode 100644 index 000000000000..9b148037f6a9 --- /dev/null +++ b/Test/AutoTestData/UsageData/hrpd_new_072_01_corr.cal @@ -0,0 +1,2780 @@ +# Ariel detector file, written Sat Nov 24 16:52:56 2007 +# Format: number UDET offset select group + 0 1100 0.0000000 0 1 + 1 1101 0.0000000 0 1 + 2 1102 0.0000000 0 1 + 3 1103 0.0000000 0 1 + 4 1104 0.0000000 0 1 + 5 1105 0.0000000 0 1 + 6 1106 0.0000000 0 1 + 7 1107 0.0000000 0 1 + 8 1108 0.0000000 0 1 + 9 1109 0.0000000 0 1 + 10 1110 0.0000000 0 1 + 11 1111 0.0000000 0 1 + 12 1112 0.0000000 0 1 + 13 1113 0.0000000 0 1 + 14 1114 0.0000000 0 1 + 15 1115 0.0000000 0 1 + 16 1116 0.0000000 0 1 + 17 1117 0.0000000 0 1 + 18 1118 0.0000000 0 1 + 19 1119 0.0000000 0 1 + 20 1120 0.0000000 0 1 + 21 1121 0.0000000 0 1 + 22 1122 0.0000000 0 1 + 23 1123 0.0000000 0 1 + 24 1124 0.0000000 0 1 + 25 1125 0.0000000 0 1 + 26 1126 0.0000000 0 1 + 27 1127 0.0000000 0 1 + 28 1128 0.0000000 0 1 + 29 1129 0.0000000 0 1 + 30 1130 0.0000000 0 1 + 31 1131 0.0000000 0 1 + 32 1132 0.0000000 0 1 + 33 1133 0.0000000 0 1 + 34 1134 0.0000000 0 1 + 35 1135 0.0000000 0 1 + 36 1136 0.0000000 0 1 + 37 1137 0.0000000 0 1 + 38 1138 0.0000000 0 1 + 39 1139 0.0000000 0 1 + 40 1140 0.0000000 0 1 + 41 1141 0.0000000 0 1 + 42 1142 0.0000000 0 1 + 43 1143 0.0000000 0 1 + 44 1144 0.0000000 0 1 + 45 1145 0.0000000 0 1 + 46 1146 0.0000000 0 1 + 47 1147 0.0000000 0 1 + 48 1148 0.0000000 0 1 + 49 1149 0.0000000 0 1 + 50 1150 0.0000000 0 1 + 51 1151 0.0000000 0 1 + 52 1152 0.0000000 0 1 + 53 1153 0.0000000 0 1 + 54 1154 0.0000000 0 1 + 55 1155 0.0000000 0 1 + 56 1156 0.0000000 0 1 + 57 1157 0.0000000 0 1 + 58 1158 0.0000000 0 1 + 59 1159 0.0000000 0 1 + 60 1160 0.0000000 0 1 + 61 1161 0.0000000 0 1 + 62 1162 0.0000000 0 1 + 63 1163 0.0000000 0 1 + 64 1164 0.0000000 0 1 + 65 1165 0.0000000 0 1 + 66 1166 0.0000000 0 1 + 67 1167 0.0000000 0 1 + 68 1168 0.0000000 0 1 + 69 1169 0.0000000 0 1 + 70 1170 0.0000000 0 1 + 71 1171 0.0000000 0 1 + 72 1172 0.0000000 0 1 + 73 1173 0.0000000 0 1 + 74 1174 0.0000000 0 1 + 75 1175 0.0000000 0 1 + 76 1176 0.0000000 0 1 + 77 1177 0.0000000 0 1 + 78 1178 0.0000000 0 1 + 79 1179 0.0000000 0 1 + 80 1180 0.0000000 0 1 + 81 1181 0.0000000 0 1 + 82 1182 0.0000000 0 1 + 83 1183 0.0000000 0 1 + 84 1184 0.0000000 0 1 + 85 1185 0.0000000 0 1 + 86 1186 0.0000000 0 1 + 87 1187 0.0000000 0 1 + 88 1188 0.0000000 0 1 + 89 1189 0.0000000 0 1 + 90 1190 0.0000000 0 1 + 91 1191 0.0000000 0 1 + 92 1192 0.0000000 0 1 + 93 1193 0.0000000 0 1 + 94 1194 0.0000000 0 1 + 95 1195 0.0000000 0 1 + 96 1196 0.0000000 0 1 + 97 1197 0.0000000 0 1 + 98 1198 0.0000000 0 1 + 99 1199 0.0000000 0 1 + 100 1200 0.0000000 0 1 + 101 1201 0.0000000 0 1 + 102 1202 0.0000000 0 1 + 103 1203 0.0000000 0 1 + 104 1204 0.0000000 0 1 + 105 1205 0.0000000 0 1 + 106 1206 0.0000000 0 1 + 107 1207 0.0000000 0 1 + 108 1208 0.0000000 0 1 + 109 1209 0.0000000 0 1 + 110 1210 0.0000000 0 1 + 111 1211 0.0000000 0 1 + 112 1212 0.0000000 0 1 + 113 1213 0.0000000 0 1 + 114 1214 0.0000000 0 1 + 115 1215 0.0000000 0 1 + 116 1216 0.0000000 0 1 + 117 1217 0.0000000 0 1 + 118 1218 0.0000000 0 1 + 119 1219 0.0000000 0 1 + 120 1220 0.0000000 0 1 + 121 1221 0.0000000 0 1 + 122 1222 0.0000000 0 1 + 123 1223 0.0000000 0 1 + 124 1224 0.0000000 0 1 + 125 1225 0.0000000 0 1 + 126 1226 0.0000000 0 1 + 127 1227 0.0000000 0 1 + 128 2100 0.0000000 0 1 + 129 2101 0.0000000 0 1 + 130 2102 0.0000161 1 1 + 131 2103 -0.0000139 1 1 + 132 2104 0.0001156 1 1 + 133 2105 0.0001294 1 1 + 134 2106 0.0002665 1 1 + 135 2107 0.0001922 1 1 + 136 2108 0.0001922 1 1 + 137 2109 0.0003095 1 1 + 138 2110 0.0003095 1 1 + 139 2111 0.0003039 1 1 + 140 2112 0.0003039 1 1 + 141 2113 0.0004182 1 1 + 142 2114 0.0004182 1 1 + 143 2115 0.0004080 1 1 + 144 2116 0.0004080 1 1 + 145 2117 0.0005247 1 1 + 146 2118 0.0005247 1 1 + 147 2119 0.0005014 1 1 + 148 2120 0.0005014 1 1 + 149 2121 0.0006162 1 1 + 150 2122 0.0006162 1 1 + 151 2123 0.0005947 1 1 + 152 2124 0.0005947 1 1 + 153 2125 0.0007070 1 1 + 154 2126 0.0007070 1 1 + 155 2127 0.0006847 1 1 + 156 2128 0.0006847 1 1 + 157 2129 0.0007974 1 1 + 158 2130 0.0007974 1 1 + 159 2131 0.0007927 1 1 + 160 2132 0.0007927 1 1 + 161 2133 0.0009075 1 1 + 162 2134 0.0009075 1 1 + 163 2135 0.0008940 1 1 + 164 2136 0.0008940 1 1 + 165 2137 0.0010187 1 1 + 166 2138 0.0010187 1 1 + 167 2139 0.0010151 1 1 + 168 2140 0.0010151 1 1 + 169 2141 0.0011360 1 1 + 170 2142 0.0011360 1 1 + 171 2143 0.0011349 1 1 + 172 2144 0.0011349 1 1 + 173 2145 0.0012556 1 1 + 174 2146 0.0012556 1 1 + 175 2147 0.0012609 1 1 + 176 2148 0.0012609 1 1 + 177 2149 0.0013878 1 1 + 178 2150 0.0013878 1 1 + 179 2151 0.0013908 1 1 + 180 2152 0.0013908 1 1 + 181 2153 0.0015181 1 1 + 182 2154 0.0015181 1 1 + 183 2155 0.0015310 1 1 + 184 2156 0.0015310 1 1 + 185 2157 0.0016659 1 1 + 186 2158 0.0016659 1 1 + 187 2159 0.0016707 1 1 + 188 2160 0.0016707 1 1 + 189 2161 0.0018101 1 1 + 190 2162 0.0018101 1 1 + 191 2163 0.0018154 1 1 + 192 2164 0.0018154 1 1 + 193 2165 0.0019505 1 1 + 194 2166 0.0019505 1 1 + 195 2167 0.0019682 1 1 + 196 2168 0.0019682 1 1 + 197 2169 0.0021005 1 1 + 198 2170 0.0021005 1 1 + 199 2171 0.0021203 1 1 + 200 2172 0.0021203 1 1 + 201 2173 0.0022603 1 1 + 202 2174 0.0022603 1 1 + 203 2175 0.0022824 1 1 + 204 2176 0.0022824 1 1 + 205 2177 0.0024297 1 1 + 206 2178 0.0024297 1 1 + 207 2179 0.0024609 1 1 + 208 2180 0.0024609 1 1 + 209 2181 0.0026038 1 1 + 210 2182 0.0026038 1 1 + 211 2183 0.0026364 1 1 + 212 2184 0.0026364 1 1 + 213 2185 0.0027874 1 1 + 214 2186 0.0027874 1 1 + 215 2187 0.0028215 1 1 + 216 2188 0.0028215 1 1 + 217 2189 0.0029767 1 1 + 218 2190 0.0029767 1 1 + 219 2191 0.0030203 1 1 + 220 2192 0.0030203 1 1 + 221 2193 0.0031762 1 1 + 222 2194 0.0031762 1 1 + 223 2195 0.0032049 1 1 + 224 2196 0.0032049 1 1 + 225 2197 0.0033555 1 1 + 226 2198 0.0033555 1 1 + 227 2199 0.0034055 1 1 + 228 2200 0.0034055 1 1 + 229 2201 0.0035574 1 1 + 230 2202 0.0035574 1 1 + 231 2203 0.0036128 1 1 + 232 2204 0.0036128 1 1 + 233 2205 0.0037786 1 1 + 234 2206 0.0037786 1 1 + 235 2207 0.0038282 1 1 + 236 2208 0.0038282 1 1 + 237 2209 0.0039876 1 1 + 238 2210 0.0039876 1 1 + 239 2211 0.0040535 1 1 + 240 2212 0.0040535 1 1 + 241 2213 0.0042063 1 1 + 242 2214 0.0042063 1 1 + 243 2215 0.0041808 1 1 + 244 2216 0.0041808 1 1 + 245 2217 0.0000000 0 1 + 246 2218 0.0000000 0 1 + 247 2219 0.0000000 0 1 + 248 2220 0.0000000 0 1 + 249 2221 0.0000000 0 1 + 250 2222 0.0000000 0 1 + 251 2223 0.0000000 0 1 + 252 2224 0.0000000 0 1 + 253 2225 0.0000000 0 1 + 254 2226 0.0000000 0 1 + 255 2227 0.0000000 0 1 + 256 3100 0.0000000 0 1 + 257 3101 0.0000000 0 1 + 258 3102 0.0000161 1 1 + 259 3103 -0.0000139 1 1 + 260 3104 0.0001156 1 1 + 261 3105 0.0001294 1 1 + 262 3106 0.0002665 1 1 + 263 3107 0.0001922 1 1 + 264 3108 0.0001922 1 1 + 265 3109 0.0003095 1 1 + 266 3110 0.0003095 1 1 + 267 3111 0.0003039 1 1 + 268 3112 0.0003039 1 1 + 269 3113 0.0004182 1 1 + 270 3114 0.0004182 1 1 + 271 3115 0.0004080 1 1 + 272 3116 0.0004080 1 1 + 273 3117 0.0005247 1 1 + 274 3118 0.0005247 1 1 + 275 3119 0.0005014 1 1 + 276 3120 0.0005014 1 1 + 277 3121 0.0006162 1 1 + 278 3122 0.0006162 1 1 + 279 3123 0.0005947 1 1 + 280 3124 0.0005947 1 1 + 281 3125 0.0007070 1 1 + 282 3126 0.0007070 1 1 + 283 3127 0.0006847 1 1 + 284 3128 0.0006847 1 1 + 285 3129 0.0007974 1 1 + 286 3130 0.0007974 1 1 + 287 3131 0.0007927 1 1 + 288 3132 0.0007927 1 1 + 289 3133 0.0009075 1 1 + 290 3134 0.0009075 1 1 + 291 3135 0.0008940 1 1 + 292 3136 0.0008940 1 1 + 293 3137 0.0010187 1 1 + 294 3138 0.0010187 1 1 + 295 3139 0.0010151 1 1 + 296 3140 0.0010151 1 1 + 297 3141 0.0011360 1 1 + 298 3142 0.0011360 1 1 + 299 3143 0.0011349 1 1 + 300 3144 0.0011349 1 1 + 301 3145 0.0012556 1 1 + 302 3146 0.0012556 1 1 + 303 3147 0.0012609 1 1 + 304 3148 0.0012609 1 1 + 305 3149 0.0013878 1 1 + 306 3150 0.0013878 1 1 + 307 3151 0.0013908 1 1 + 308 3152 0.0013908 1 1 + 309 3153 0.0015181 1 1 + 310 3154 0.0015181 1 1 + 311 3155 0.0015310 1 1 + 312 3156 0.0015310 1 1 + 313 3157 0.0016659 1 1 + 314 3158 0.0016659 1 1 + 315 3159 0.0016707 1 1 + 316 3160 0.0016707 1 1 + 317 3161 0.0018101 1 1 + 318 3162 0.0018101 1 1 + 319 3163 0.0018154 1 1 + 320 3164 0.0018154 1 1 + 321 3165 0.0019505 1 1 + 322 3166 0.0019505 1 1 + 323 3167 0.0019682 1 1 + 324 3168 0.0019682 1 1 + 325 3169 0.0021005 1 1 + 326 3170 0.0021005 1 1 + 327 3171 0.0021203 1 1 + 328 3172 0.0021203 1 1 + 329 3173 0.0022603 1 1 + 330 3174 0.0022603 1 1 + 331 3175 0.0022824 1 1 + 332 3176 0.0022824 1 1 + 333 3177 0.0024297 1 1 + 334 3178 0.0024297 1 1 + 335 3179 0.0024609 1 1 + 336 3180 0.0024609 1 1 + 337 3181 0.0026038 1 1 + 338 3182 0.0026038 1 1 + 339 3183 0.0026364 1 1 + 340 3184 0.0026364 1 1 + 341 3185 0.0027874 1 1 + 342 3186 0.0027874 1 1 + 343 3187 0.0028215 1 1 + 344 3188 0.0028215 1 1 + 345 3189 0.0029767 1 1 + 346 3190 0.0029767 1 1 + 347 3191 0.0030203 1 1 + 348 3192 0.0030203 1 1 + 349 3193 0.0031762 1 1 + 350 3194 0.0031762 1 1 + 351 3195 0.0032049 1 1 + 352 3196 0.0032049 1 1 + 353 3197 0.0033555 1 1 + 354 3198 0.0033555 1 1 + 355 3199 0.0034055 1 1 + 356 3200 0.0034055 1 1 + 357 3201 0.0035574 1 1 + 358 3202 0.0035574 1 1 + 359 3203 0.0036128 1 1 + 360 3204 0.0036128 1 1 + 361 3205 0.0037786 1 1 + 362 3206 0.0037786 1 1 + 363 3207 0.0038282 1 1 + 364 3208 0.0038282 1 1 + 365 3209 0.0039876 1 1 + 366 3210 0.0039876 1 1 + 367 3211 0.0040535 1 1 + 368 3212 0.0040535 1 1 + 369 3213 0.0042063 1 1 + 370 3214 0.0042063 1 1 + 371 3215 0.0041808 1 1 + 372 3216 0.0041808 1 1 + 373 3217 0.0000000 0 1 + 374 3218 0.0000000 0 1 + 375 3219 0.0000000 0 1 + 376 3220 0.0000000 0 1 + 377 3221 0.0000000 0 1 + 378 3222 0.0000000 0 1 + 379 3223 0.0000000 0 1 + 380 3224 0.0000000 0 1 + 381 3225 0.0000000 0 1 + 382 3226 0.0000000 0 1 + 383 3227 0.0000000 0 1 + 384 4100 0.0000000 0 1 + 385 4101 0.0000000 0 1 + 386 4102 0.0000161 1 1 + 387 4103 -0.0000139 1 1 + 388 4104 0.0001156 1 1 + 389 4105 0.0001294 1 1 + 390 4106 0.0002665 1 1 + 391 4107 0.0001922 1 1 + 392 4108 0.0001922 1 1 + 393 4109 0.0003095 1 1 + 394 4110 0.0003095 1 1 + 395 4111 0.0003039 1 1 + 396 4112 0.0003039 1 1 + 397 4113 0.0004182 1 1 + 398 4114 0.0004182 1 1 + 399 4115 0.0004080 1 1 + 400 4116 0.0004080 1 1 + 401 4117 0.0005247 1 1 + 402 4118 0.0005247 1 1 + 403 4119 0.0005014 1 1 + 404 4120 0.0005014 1 1 + 405 4121 0.0006162 1 1 + 406 4122 0.0006162 1 1 + 407 4123 0.0005947 1 1 + 408 4124 0.0005947 1 1 + 409 4125 0.0007070 1 1 + 410 4126 0.0007070 1 1 + 411 4127 0.0006847 1 1 + 412 4128 0.0006847 1 1 + 413 4129 0.0007974 1 1 + 414 4130 0.0007974 1 1 + 415 4131 0.0007927 1 1 + 416 4132 0.0007927 1 1 + 417 4133 0.0009075 1 1 + 418 4134 0.0009075 1 1 + 419 4135 0.0008940 1 1 + 420 4136 0.0008940 1 1 + 421 4137 0.0010187 1 1 + 422 4138 0.0010187 1 1 + 423 4139 0.0010151 1 1 + 424 4140 0.0010151 1 1 + 425 4141 0.0011360 1 1 + 426 4142 0.0011360 1 1 + 427 4143 0.0011349 1 1 + 428 4144 0.0011349 1 1 + 429 4145 0.0012556 1 1 + 430 4146 0.0012556 1 1 + 431 4147 0.0012609 1 1 + 432 4148 0.0012609 1 1 + 433 4149 0.0013878 1 1 + 434 4150 0.0013878 1 1 + 435 4151 0.0013908 1 1 + 436 4152 0.0013908 1 1 + 437 4153 0.0015181 1 1 + 438 4154 0.0015181 1 1 + 439 4155 0.0015310 1 1 + 440 4156 0.0015310 1 1 + 441 4157 0.0016659 1 1 + 442 4158 0.0016659 1 1 + 443 4159 0.0016707 1 1 + 444 4160 0.0016707 1 1 + 445 4161 0.0018101 1 1 + 446 4162 0.0018101 1 1 + 447 4163 0.0018154 1 1 + 448 4164 0.0018154 1 1 + 449 4165 0.0019505 1 1 + 450 4166 0.0019505 1 1 + 451 4167 0.0019682 1 1 + 452 4168 0.0019682 1 1 + 453 4169 0.0021005 1 1 + 454 4170 0.0021005 1 1 + 455 4171 0.0021203 1 1 + 456 4172 0.0021203 1 1 + 457 4173 0.0022603 1 1 + 458 4174 0.0022603 1 1 + 459 4175 0.0022824 1 1 + 460 4176 0.0022824 1 1 + 461 4177 0.0024297 1 1 + 462 4178 0.0024297 1 1 + 463 4179 0.0024609 1 1 + 464 4180 0.0024609 1 1 + 465 4181 0.0026038 1 1 + 466 4182 0.0026038 1 1 + 467 4183 0.0026364 1 1 + 468 4184 0.0026364 1 1 + 469 4185 0.0027874 1 1 + 470 4186 0.0027874 1 1 + 471 4187 0.0028215 1 1 + 472 4188 0.0028215 1 1 + 473 4189 0.0029767 1 1 + 474 4190 0.0029767 1 1 + 475 4191 0.0030203 1 1 + 476 4192 0.0030203 1 1 + 477 4193 0.0031762 1 1 + 478 4194 0.0031762 1 1 + 479 4195 0.0032049 1 1 + 480 4196 0.0032049 1 1 + 481 4197 0.0033555 1 1 + 482 4198 0.0033555 1 1 + 483 4199 0.0034055 1 1 + 484 4200 0.0034055 1 1 + 485 4201 0.0035574 1 1 + 486 4202 0.0035574 1 1 + 487 4203 0.0036128 1 1 + 488 4204 0.0036128 1 1 + 489 4205 0.0037786 1 1 + 490 4206 0.0037786 1 1 + 491 4207 0.0038282 1 1 + 492 4208 0.0038282 1 1 + 493 4209 0.0039876 1 1 + 494 4210 0.0039876 1 1 + 495 4211 0.0040535 1 1 + 496 4212 0.0040535 1 1 + 497 4213 0.0042063 1 1 + 498 4214 0.0042063 1 1 + 499 4215 0.0041808 1 1 + 500 4216 0.0041808 1 1 + 501 4217 0.0000000 0 1 + 502 4218 0.0000000 0 1 + 503 4219 0.0000000 0 1 + 504 4220 0.0000000 0 1 + 505 4221 0.0000000 0 1 + 506 4222 0.0000000 0 1 + 507 4223 0.0000000 0 1 + 508 4224 0.0000000 0 1 + 509 4225 0.0000000 0 1 + 510 4226 0.0000000 0 1 + 511 4227 0.0000000 0 1 + 512 5100 0.0000000 0 1 + 513 5101 0.0000000 0 1 + 514 5102 0.0000000 0 1 + 515 5103 0.0000000 0 1 + 516 5104 0.0000000 0 1 + 517 5105 0.0000000 0 1 + 518 5106 0.0000000 0 1 + 519 5107 0.0000000 0 1 + 520 5108 0.0000000 0 1 + 521 5109 0.0000000 0 1 + 522 5110 0.0000000 0 1 + 523 5111 0.0000000 0 1 + 524 5112 0.0000000 0 1 + 525 5113 0.0000000 0 1 + 526 5114 0.0000000 0 1 + 527 5115 0.0000000 0 1 + 528 5116 0.0000000 0 1 + 529 5117 0.0000000 0 1 + 530 5118 0.0000000 0 1 + 531 5119 0.0000000 0 1 + 532 5120 0.0000000 0 1 + 533 5121 0.0000000 0 1 + 534 5122 0.0000000 0 1 + 535 5123 0.0000000 0 1 + 536 5124 0.0000000 0 1 + 537 5125 0.0000000 0 1 + 538 5126 0.0000000 0 1 + 539 5127 0.0000000 0 1 + 540 5128 0.0000000 0 1 + 541 5129 0.0000000 0 1 + 542 5130 0.0000000 0 1 + 543 5131 0.0000000 0 1 + 544 5132 0.0000000 0 1 + 545 5133 0.0000000 0 1 + 546 5134 0.0000000 0 1 + 547 5135 0.0000000 0 1 + 548 5136 0.0000000 0 1 + 549 5137 0.0000000 0 1 + 550 5138 0.0000000 0 1 + 551 5139 0.0000000 0 1 + 552 5140 0.0000000 0 1 + 553 5141 0.0000000 0 1 + 554 5142 0.0000000 0 1 + 555 5143 0.0000000 0 1 + 556 5144 0.0000000 0 1 + 557 5145 0.0000000 0 1 + 558 5146 0.0000000 0 1 + 559 5147 0.0000000 0 1 + 560 5148 0.0000000 0 1 + 561 5149 0.0000000 0 1 + 562 5150 0.0000000 0 1 + 563 5151 0.0000000 0 1 + 564 5152 0.0000000 0 1 + 565 5153 0.0000000 0 1 + 566 5154 0.0000000 0 1 + 567 5155 0.0000000 0 1 + 568 5156 0.0000000 0 1 + 569 5157 0.0000000 0 1 + 570 5158 0.0000000 0 1 + 571 5159 0.0000000 0 1 + 572 5160 0.0000000 0 1 + 573 5161 0.0000000 0 1 + 574 5162 0.0000000 0 1 + 575 5163 0.0000000 0 1 + 576 5164 0.0000000 0 1 + 577 5165 0.0000000 0 1 + 578 5166 0.0000000 0 1 + 579 5167 0.0000000 0 1 + 580 5168 0.0000000 0 1 + 581 5169 0.0000000 0 1 + 582 5170 0.0000000 0 1 + 583 5171 0.0000000 0 1 + 584 5172 0.0000000 0 1 + 585 5173 0.0000000 0 1 + 586 5174 0.0000000 0 1 + 587 5175 0.0000000 0 1 + 588 5176 0.0000000 0 1 + 589 5177 0.0000000 0 1 + 590 5178 0.0000000 0 1 + 591 5179 0.0000000 0 1 + 592 5180 0.0000000 0 1 + 593 5181 0.0000000 0 1 + 594 5182 0.0000000 0 1 + 595 5183 0.0000000 0 1 + 596 5184 0.0000000 0 1 + 597 5185 0.0000000 0 1 + 598 5186 0.0000000 0 1 + 599 5187 0.0000000 0 1 + 600 5188 0.0000000 0 1 + 601 5189 0.0000000 0 1 + 602 5190 0.0000000 0 1 + 603 5191 0.0000000 0 1 + 604 5192 0.0000000 0 1 + 605 5193 0.0000000 0 1 + 606 5194 0.0000000 0 1 + 607 5195 0.0000000 0 1 + 608 5196 0.0000000 0 1 + 609 5197 0.0000000 0 1 + 610 5198 0.0000000 0 1 + 611 5199 0.0000000 0 1 + 612 5200 0.0000000 0 1 + 613 5201 0.0000000 0 1 + 614 5202 0.0000000 0 1 + 615 5203 0.0000000 0 1 + 616 5204 0.0000000 0 1 + 617 5205 0.0000000 0 1 + 618 5206 0.0000000 0 1 + 619 5207 0.0000000 0 1 + 620 5208 0.0000000 0 1 + 621 5209 0.0000000 0 1 + 622 5210 0.0000000 0 1 + 623 5211 0.0000000 0 1 + 624 5212 0.0000000 0 1 + 625 5213 0.0000000 0 1 + 626 5214 0.0000000 0 1 + 627 5215 0.0000000 0 1 + 628 5216 0.0000000 0 1 + 629 5217 0.0000000 0 1 + 630 5218 0.0000000 0 1 + 631 5219 0.0000000 0 1 + 632 5220 0.0000000 0 1 + 633 5221 0.0000000 0 1 + 634 5222 0.0000000 0 1 + 635 5223 0.0000000 0 1 + 636 5224 0.0000000 0 1 + 637 5225 0.0000000 0 1 + 638 5226 0.0000000 0 1 + 639 5227 0.0000000 0 1 + 640 6100 0.0000000 0 1 + 641 6101 0.0000000 0 1 + 642 6102 0.0000161 1 1 + 643 6103 -0.0000139 1 1 + 644 6104 0.0001156 1 1 + 645 6105 0.0001294 1 1 + 646 6106 0.0002665 1 1 + 647 6107 0.0001922 1 1 + 648 6108 0.0001922 1 1 + 649 6109 0.0003095 1 1 + 650 6110 0.0003095 1 1 + 651 6111 0.0003039 1 1 + 652 6112 0.0003039 1 1 + 653 6113 0.0004182 1 1 + 654 6114 0.0004182 1 1 + 655 6115 0.0004080 1 1 + 656 6116 0.0004080 1 1 + 657 6117 0.0005247 1 1 + 658 6118 0.0005247 1 1 + 659 6119 0.0005014 1 1 + 660 6120 0.0005014 1 1 + 661 6121 0.0006162 1 1 + 662 6122 0.0006162 1 1 + 663 6123 0.0005947 1 1 + 664 6124 0.0005947 1 1 + 665 6125 0.0007070 1 1 + 666 6126 0.0007070 1 1 + 667 6127 0.0006847 1 1 + 668 6128 0.0006847 1 1 + 669 6129 0.0007974 1 1 + 670 6130 0.0007974 1 1 + 671 6131 0.0007927 1 1 + 672 6132 0.0007927 1 1 + 673 6133 0.0009075 1 1 + 674 6134 0.0009075 1 1 + 675 6135 0.0008940 1 1 + 676 6136 0.0008940 1 1 + 677 6137 0.0010187 1 1 + 678 6138 0.0010187 1 1 + 679 6139 0.0010151 1 1 + 680 6140 0.0010151 1 1 + 681 6141 0.0011360 1 1 + 682 6142 0.0011360 1 1 + 683 6143 0.0011349 1 1 + 684 6144 0.0011349 1 1 + 685 6145 0.0012556 1 1 + 686 6146 0.0012556 1 1 + 687 6147 0.0012609 1 1 + 688 6148 0.0012609 1 1 + 689 6149 0.0013878 1 1 + 690 6150 0.0013878 1 1 + 691 6151 0.0013908 1 1 + 692 6152 0.0013908 1 1 + 693 6153 0.0015181 1 1 + 694 6154 0.0015181 1 1 + 695 6155 0.0015310 1 1 + 696 6156 0.0015310 1 1 + 697 6157 0.0016659 1 1 + 698 6158 0.0016659 1 1 + 699 6159 0.0016707 1 1 + 700 6160 0.0016707 1 1 + 701 6161 0.0018101 1 1 + 702 6162 0.0018101 1 1 + 703 6163 0.0018154 1 1 + 704 6164 0.0018154 1 1 + 705 6165 0.0019505 1 1 + 706 6166 0.0019505 1 1 + 707 6167 0.0019682 1 1 + 708 6168 0.0019682 1 1 + 709 6169 0.0021005 1 1 + 710 6170 0.0021005 1 1 + 711 6171 0.0021203 1 1 + 712 6172 0.0021203 1 1 + 713 6173 0.0022603 1 1 + 714 6174 0.0022603 1 1 + 715 6175 0.0022824 1 1 + 716 6176 0.0022824 1 1 + 717 6177 0.0024297 1 1 + 718 6178 0.0024297 1 1 + 719 6179 0.0024609 1 1 + 720 6180 0.0024609 1 1 + 721 6181 0.0026038 1 1 + 722 6182 0.0026038 1 1 + 723 6183 0.0026364 1 1 + 724 6184 0.0026364 1 1 + 725 6185 0.0027874 1 1 + 726 6186 0.0027874 1 1 + 727 6187 0.0028215 1 1 + 728 6188 0.0028215 1 1 + 729 6189 0.0029767 1 1 + 730 6190 0.0029767 1 1 + 731 6191 0.0030203 1 1 + 732 6192 0.0030203 1 1 + 733 6193 0.0031762 1 1 + 734 6194 0.0031762 1 1 + 735 6195 0.0032049 1 1 + 736 6196 0.0032049 1 1 + 737 6197 0.0033555 1 1 + 738 6198 0.0033555 1 1 + 739 6199 0.0034055 1 1 + 740 6200 0.0034055 1 1 + 741 6201 0.0035574 1 1 + 742 6202 0.0035574 1 1 + 743 6203 0.0036128 1 1 + 744 6204 0.0036128 1 1 + 745 6205 0.0037786 1 1 + 746 6206 0.0037786 1 1 + 747 6207 0.0038282 1 1 + 748 6208 0.0038282 1 1 + 749 6209 0.0039876 1 1 + 750 6210 0.0039876 1 1 + 751 6211 0.0040535 1 1 + 752 6212 0.0040535 1 1 + 753 6213 0.0042063 1 1 + 754 6214 0.0042063 1 1 + 755 6215 0.0041808 1 1 + 756 6216 0.0041808 1 1 + 757 6217 0.0000000 0 1 + 758 6218 0.0000000 0 1 + 759 6219 0.0000000 0 1 + 760 6220 0.0000000 0 1 + 761 6221 0.0000000 0 1 + 762 6222 0.0000000 0 1 + 763 6223 0.0000000 0 1 + 764 6224 0.0000000 0 1 + 765 6225 0.0000000 0 1 + 766 6226 0.0000000 0 1 + 767 6227 0.0000000 0 1 + 768 7100 0.0000000 0 1 + 769 7101 0.0000000 0 1 + 770 7102 0.0000161 1 1 + 771 7103 -0.0000139 1 1 + 772 7104 0.0001156 1 1 + 773 7105 0.0001294 1 1 + 774 7106 0.0002665 1 1 + 775 7107 0.0001922 1 1 + 776 7108 0.0001922 1 1 + 777 7109 0.0003095 1 1 + 778 7110 0.0003095 1 1 + 779 7111 0.0003039 1 1 + 780 7112 0.0003039 1 1 + 781 7113 0.0004182 1 1 + 782 7114 0.0004182 1 1 + 783 7115 0.0004080 1 1 + 784 7116 0.0004080 1 1 + 785 7117 0.0005247 1 1 + 786 7118 0.0005247 1 1 + 787 7119 0.0005014 1 1 + 788 7120 0.0005014 1 1 + 789 7121 0.0006162 1 1 + 790 7122 0.0006162 1 1 + 791 7123 0.0005947 1 1 + 792 7124 0.0005947 1 1 + 793 7125 0.0007070 1 1 + 794 7126 0.0007070 1 1 + 795 7127 0.0006847 1 1 + 796 7128 0.0006847 1 1 + 797 7129 0.0007974 1 1 + 798 7130 0.0007974 1 1 + 799 7131 0.0007927 1 1 + 800 7132 0.0007927 1 1 + 801 7133 0.0009075 1 1 + 802 7134 0.0009075 1 1 + 803 7135 0.0008940 1 1 + 804 7136 0.0008940 1 1 + 805 7137 0.0010187 1 1 + 806 7138 0.0010187 1 1 + 807 7139 0.0010151 1 1 + 808 7140 0.0010151 1 1 + 809 7141 0.0011360 1 1 + 810 7142 0.0011360 1 1 + 811 7143 0.0011349 1 1 + 812 7144 0.0011349 1 1 + 813 7145 0.0012556 1 1 + 814 7146 0.0012556 1 1 + 815 7147 0.0012609 1 1 + 816 7148 0.0012609 1 1 + 817 7149 0.0013878 1 1 + 818 7150 0.0013878 1 1 + 819 7151 0.0013908 1 1 + 820 7152 0.0013908 1 1 + 821 7153 0.0015181 1 1 + 822 7154 0.0015181 1 1 + 823 7155 0.0015310 1 1 + 824 7156 0.0015310 1 1 + 825 7157 0.0016659 1 1 + 826 7158 0.0016659 1 1 + 827 7159 0.0016707 1 1 + 828 7160 0.0016707 1 1 + 829 7161 0.0018101 1 1 + 830 7162 0.0018101 1 1 + 831 7163 0.0018154 1 1 + 832 7164 0.0018154 1 1 + 833 7165 0.0019505 1 1 + 834 7166 0.0019505 1 1 + 835 7167 0.0019682 1 1 + 836 7168 0.0019682 1 1 + 837 7169 0.0021005 1 1 + 838 7170 0.0021005 1 1 + 839 7171 0.0021203 1 1 + 840 7172 0.0021203 1 1 + 841 7173 0.0022603 1 1 + 842 7174 0.0022603 1 1 + 843 7175 0.0022824 1 1 + 844 7176 0.0022824 1 1 + 845 7177 0.0024297 1 1 + 846 7178 0.0024297 1 1 + 847 7179 0.0024609 1 1 + 848 7180 0.0024609 1 1 + 849 7181 0.0026038 1 1 + 850 7182 0.0026038 1 1 + 851 7183 0.0026364 1 1 + 852 7184 0.0026364 1 1 + 853 7185 0.0027874 1 1 + 854 7186 0.0027874 1 1 + 855 7187 0.0028215 1 1 + 856 7188 0.0028215 1 1 + 857 7189 0.0029767 1 1 + 858 7190 0.0029767 1 1 + 859 7191 0.0030203 1 1 + 860 7192 0.0030203 1 1 + 861 7193 0.0031762 1 1 + 862 7194 0.0031762 1 1 + 863 7195 0.0032049 1 1 + 864 7196 0.0032049 1 1 + 865 7197 0.0033555 1 1 + 866 7198 0.0033555 1 1 + 867 7199 0.0034055 1 1 + 868 7200 0.0034055 1 1 + 869 7201 0.0035574 1 1 + 870 7202 0.0035574 1 1 + 871 7203 0.0036128 1 1 + 872 7204 0.0036128 1 1 + 873 7205 0.0037786 1 1 + 874 7206 0.0037786 1 1 + 875 7207 0.0038282 1 1 + 876 7208 0.0038282 1 1 + 877 7209 0.0039876 1 1 + 878 7210 0.0039876 1 1 + 879 7211 0.0040535 1 1 + 880 7212 0.0040535 1 1 + 881 7213 0.0042063 1 1 + 882 7214 0.0042063 1 1 + 883 7215 0.0041808 1 1 + 884 7216 0.0041808 1 1 + 885 7217 0.0000000 0 1 + 886 7218 0.0000000 0 1 + 887 7219 0.0000000 0 1 + 888 7220 0.0000000 0 1 + 889 7221 0.0000000 0 1 + 890 7222 0.0000000 0 1 + 891 7223 0.0000000 0 1 + 892 7224 0.0000000 0 1 + 893 7225 0.0000000 0 1 + 894 7226 0.0000000 0 1 + 895 7227 0.0000000 0 1 + 896 8100 0.0000000 0 1 + 897 8101 0.0000000 0 1 + 898 8102 0.0000161 1 1 + 899 8103 -0.0000139 1 1 + 900 8104 0.0001156 1 1 + 901 8105 0.0001294 1 1 + 902 8106 0.0002665 1 1 + 903 8107 0.0001922 1 1 + 904 8108 0.0001922 1 1 + 905 8109 0.0003095 1 1 + 906 8110 0.0003095 1 1 + 907 8111 0.0003039 1 1 + 908 8112 0.0003039 1 1 + 909 8113 0.0004182 1 1 + 910 8114 0.0004182 1 1 + 911 8115 0.0004080 1 1 + 912 8116 0.0004080 1 1 + 913 8117 0.0005247 1 1 + 914 8118 0.0005247 1 1 + 915 8119 0.0005014 1 1 + 916 8120 0.0005014 1 1 + 917 8121 0.0006162 1 1 + 918 8122 0.0006162 1 1 + 919 8123 0.0005947 1 1 + 920 8124 0.0005947 1 1 + 921 8125 0.0007070 1 1 + 922 8126 0.0007070 1 1 + 923 8127 0.0006847 1 1 + 924 8128 0.0006847 1 1 + 925 8129 0.0007974 1 1 + 926 8130 0.0007974 1 1 + 927 8131 0.0007927 1 1 + 928 8132 0.0007927 1 1 + 929 8133 0.0009075 1 1 + 930 8134 0.0009075 1 1 + 931 8135 0.0008940 1 1 + 932 8136 0.0008940 1 1 + 933 8137 0.0010187 1 1 + 934 8138 0.0010187 1 1 + 935 8139 0.0010151 1 1 + 936 8140 0.0010151 1 1 + 937 8141 0.0011360 1 1 + 938 8142 0.0011360 1 1 + 939 8143 0.0011349 1 1 + 940 8144 0.0011349 1 1 + 941 8145 0.0012556 1 1 + 942 8146 0.0012556 1 1 + 943 8147 0.0012609 1 1 + 944 8148 0.0012609 1 1 + 945 8149 0.0013878 1 1 + 946 8150 0.0013878 1 1 + 947 8151 0.0013908 1 1 + 948 8152 0.0013908 1 1 + 949 8153 0.0015181 1 1 + 950 8154 0.0015181 1 1 + 951 8155 0.0015310 1 1 + 952 8156 0.0015310 1 1 + 953 8157 0.0016659 1 1 + 954 8158 0.0016659 1 1 + 955 8159 0.0016707 1 1 + 956 8160 0.0016707 1 1 + 957 8161 0.0018101 1 1 + 958 8162 0.0018101 1 1 + 959 8163 0.0018154 1 1 + 960 8164 0.0018154 1 1 + 961 8165 0.0019505 1 1 + 962 8166 0.0019505 1 1 + 963 8167 0.0019682 1 1 + 964 8168 0.0019682 1 1 + 965 8169 0.0021005 1 1 + 966 8170 0.0021005 1 1 + 967 8171 0.0021203 1 1 + 968 8172 0.0021203 1 1 + 969 8173 0.0022603 1 1 + 970 8174 0.0022603 1 1 + 971 8175 0.0022824 1 1 + 972 8176 0.0022824 1 1 + 973 8177 0.0024297 1 1 + 974 8178 0.0024297 1 1 + 975 8179 0.0024609 1 1 + 976 8180 0.0024609 1 1 + 977 8181 0.0026038 1 1 + 978 8182 0.0026038 1 1 + 979 8183 0.0026364 1 1 + 980 8184 0.0026364 1 1 + 981 8185 0.0027874 1 1 + 982 8186 0.0027874 1 1 + 983 8187 0.0028215 1 1 + 984 8188 0.0028215 1 1 + 985 8189 0.0029767 1 1 + 986 8190 0.0029767 1 1 + 987 8191 0.0030203 1 1 + 988 8192 0.0030203 1 1 + 989 8193 0.0031762 1 1 + 990 8194 0.0031762 1 1 + 991 8195 0.0032049 1 1 + 992 8196 0.0032049 1 1 + 993 8197 0.0033555 1 1 + 994 8198 0.0033555 1 1 + 995 8199 0.0034055 1 1 + 996 8200 0.0034055 1 1 + 997 8201 0.0035574 1 1 + 998 8202 0.0035574 1 1 + 999 8203 0.0036128 1 1 + 1000 8204 0.0036128 1 1 + 1001 8205 0.0037786 1 1 + 1002 8206 0.0037786 1 1 + 1003 8207 0.0038282 1 1 + 1004 8208 0.0038282 1 1 + 1005 8209 0.0039876 1 1 + 1006 8210 0.0039876 1 1 + 1007 8211 0.0040535 1 1 + 1008 8212 0.0040535 1 1 + 1009 8213 0.0042063 1 1 + 1010 8214 0.0042063 1 1 + 1011 8215 0.0041808 1 1 + 1012 8216 0.0041808 1 1 + 1013 8217 0.0000000 0 1 + 1014 8218 0.0000000 0 1 + 1015 8219 0.0000000 0 1 + 1016 8220 0.0000000 0 1 + 1017 8221 0.0000000 0 1 + 1018 8222 0.0000000 0 1 + 1019 8223 0.0000000 0 1 + 1020 8224 0.0000000 0 1 + 1021 8225 0.0000000 0 1 + 1022 8226 0.0000000 0 1 + 1023 8227 0.0000000 0 1 + 1024 1001 0.0000000 1 0 + 1025 1002 0.0000000 1 0 + 1026 901000 0.0000000 0 2 + 1027 901001 0.0000000 0 2 + 1028 901002 0.0000000 0 2 + 1029 901003 0.0000000 0 2 + 1030 901004 0.0000000 0 2 + 1031 901005 0.0000000 0 2 + 1032 901006 0.0000000 0 2 + 1033 901007 0.0022486 1 2 + 1034 901008 0.0022273 1 2 + 1035 901009 0.0022462 1 2 + 1036 901010 0.0021854 1 2 + 1037 901011 0.0022457 1 2 + 1038 901012 0.0021593 1 2 + 1039 901013 0.0022211 1 2 + 1040 901014 0.0021513 1 2 + 1041 901015 0.0021885 1 2 + 1042 901016 0.0020993 1 2 + 1043 901017 0.0021661 1 2 + 1044 901018 0.0020462 1 2 + 1045 901019 0.0000000 0 2 + 1046 901020 0.0020236 1 2 + 1047 901021 0.0019770 1 2 + 1048 901022 0.0019817 1 2 + 1049 901023 0.0020584 1 2 + 1050 901024 0.0019922 1 2 + 1051 901025 0.0020410 1 2 + 1052 901026 0.0019241 1 2 + 1053 901027 0.0019624 1 2 + 1054 901028 0.0018643 1 2 + 1055 901029 0.0018939 1 2 + 1056 901030 0.0018352 1 2 + 1057 901031 0.0019177 1 2 + 1058 901032 0.0000000 0 2 + 1059 901033 0.0018605 1 2 + 1060 901034 0.0018476 1 2 + 1061 901035 0.0018287 1 2 + 1062 901036 0.0017540 1 2 + 1063 901037 0.0018020 1 2 + 1064 901038 0.0016889 1 2 + 1065 901039 0.0017606 1 2 + 1066 901040 0.0016948 1 2 + 1067 901041 0.0017184 1 2 + 1068 901042 0.0016261 1 2 + 1069 901043 0.0016629 1 2 + 1070 901044 0.0000000 0 2 + 1071 901045 0.0016676 1 2 + 1072 901046 0.0013772 1 2 + 1073 901047 0.0016006 1 2 + 1074 901048 0.0015382 1 2 + 1075 901049 0.0016176 1 2 + 1076 901050 0.0015127 1 2 + 1077 901051 0.0015834 1 2 + 1078 901052 0.0014696 1 2 + 1079 901053 0.0015254 1 2 + 1080 901054 0.0014474 1 2 + 1081 901055 0.0000000 0 2 + 1082 901056 0.0014321 1 2 + 1083 901057 0.0014370 1 2 + 1084 901058 0.0013876 1 2 + 1085 901059 0.0014307 1 2 + 1086 901060 0.0013450 1 2 + 1087 901061 0.0013833 1 2 + 1088 901062 0.0012971 1 2 + 1089 901063 0.0013459 1 2 + 1090 901064 0.0012596 1 2 + 1091 901065 0.0013146 1 2 + 1092 901066 0.0000000 0 2 + 1093 901067 0.0000000 0 2 + 1094 901068 0.0000000 0 2 + 1095 901069 0.0000000 0 2 + 1096 901070 0.0000000 0 2 + 1097 901071 0.0000000 0 2 + 1098 901072 0.0000000 0 2 + 1099 901073 0.0000000 0 2 + 1100 901074 0.0000000 0 2 + 1101 901075 0.0000000 0 2 + 1102 901076 0.0007140 1 2 + 1103 901077 0.0011524 1 2 + 1104 901078 0.0010672 1 2 + 1105 901079 0.0011550 1 2 + 1106 901080 0.0010681 1 2 + 1107 901081 0.0011141 1 2 + 1108 901082 0.0010259 1 2 + 1109 901083 0.0010745 1 2 + 1110 901084 0.0010038 1 2 + 1111 901085 0.0010211 1 2 + 1112 901086 0.0009552 1 2 + 1113 901087 0.0009692 1 2 + 1114 901088 0.0009291 1 2 + 1115 901089 0.0009166 1 2 + 1116 901090 0.0009318 1 2 + 1117 901091 0.0009520 1 2 + 1118 901092 0.0008833 1 2 + 1119 901093 0.0009466 1 2 + 1120 901094 0.0008382 1 2 + 1121 901095 0.0008896 1 2 + 1122 901096 0.0008141 1 2 + 1123 901097 0.0009025 1 2 + 1124 901098 0.0007935 1 2 + 1125 901099 0.0008507 1 2 + 1126 901100 0.0007731 1 2 + 1127 901101 0.0008290 1 2 + 1128 901102 0.0007683 1 2 + 1129 901103 0.0008275 1 2 + 1130 901104 0.0007196 1 2 + 1131 901105 0.0007890 1 2 + 1132 901106 0.0006939 1 2 + 1133 901107 0.0007512 1 2 + 1134 901108 0.0006808 1 2 + 1135 901109 0.0007359 1 2 + 1136 901110 0.0006437 1 2 + 1137 901111 0.0006973 1 2 + 1138 901112 0.0006210 1 2 + 1139 901113 0.0006858 1 2 + 1140 901114 0.0005868 1 2 + 1141 901115 0.0006558 1 2 + 1142 901116 0.0005743 1 2 + 1143 901117 0.0006885 1 2 + 1144 901118 0.0009516 1 2 + 1145 901119 0.0016927 1 2 + 1146 902000 0.0000000 0 2 + 1147 902001 0.0000000 0 2 + 1148 902002 0.0000000 0 2 + 1149 902003 0.0000000 0 2 + 1150 902004 0.0000000 0 2 + 1151 902005 0.0000000 0 2 + 1152 902006 0.0000000 0 2 + 1153 902007 0.0022486 1 2 + 1154 902008 0.0022273 1 2 + 1155 902009 0.0022462 1 2 + 1156 902010 0.0021854 1 2 + 1157 902011 0.0022457 1 2 + 1158 902012 0.0021593 1 2 + 1159 902013 0.0022211 1 2 + 1160 902014 0.0021513 1 2 + 1161 902015 0.0021885 1 2 + 1162 902016 0.0020993 1 2 + 1163 902017 0.0021661 1 2 + 1164 902018 0.0020462 1 2 + 1165 902019 0.0000000 0 2 + 1166 902020 0.0020236 1 2 + 1167 902021 0.0019770 1 2 + 1168 902022 0.0019817 1 2 + 1169 902023 0.0020584 1 2 + 1170 902024 0.0019922 1 2 + 1171 902025 0.0020410 1 2 + 1172 902026 0.0019241 1 2 + 1173 902027 0.0019624 1 2 + 1174 902028 0.0018643 1 2 + 1175 902029 0.0018939 1 2 + 1176 902030 0.0018352 1 2 + 1177 902031 0.0019177 1 2 + 1178 902032 0.0000000 0 2 + 1179 902033 0.0018605 1 2 + 1180 902034 0.0018476 1 2 + 1181 902035 0.0018287 1 2 + 1182 902036 0.0017540 1 2 + 1183 902037 0.0018020 1 2 + 1184 902038 0.0016889 1 2 + 1185 902039 0.0017606 1 2 + 1186 902040 0.0016948 1 2 + 1187 902041 0.0017184 1 2 + 1188 902042 0.0016261 1 2 + 1189 902043 0.0016629 1 2 + 1190 902044 0.0000000 0 2 + 1191 902045 0.0016676 1 2 + 1192 902046 0.0013772 1 2 + 1193 902047 0.0016006 1 2 + 1194 902048 0.0015382 1 2 + 1195 902049 0.0016176 1 2 + 1196 902050 0.0015127 1 2 + 1197 902051 0.0015834 1 2 + 1198 902052 0.0014696 1 2 + 1199 902053 0.0015254 1 2 + 1200 902054 0.0014474 1 2 + 1201 902055 0.0000000 0 2 + 1202 902056 0.0014321 1 2 + 1203 902057 0.0014370 1 2 + 1204 902058 0.0013876 1 2 + 1205 902059 0.0014307 1 2 + 1206 902060 0.0013450 1 2 + 1207 902061 0.0013833 1 2 + 1208 902062 0.0012971 1 2 + 1209 902063 0.0013459 1 2 + 1210 902064 0.0012596 1 2 + 1211 902065 0.0013146 1 2 + 1212 902066 0.0000000 0 2 + 1213 902067 0.0000000 0 2 + 1214 902068 0.0000000 0 2 + 1215 902069 0.0000000 0 2 + 1216 902070 0.0000000 0 2 + 1217 902071 0.0000000 0 2 + 1218 902072 0.0000000 0 2 + 1219 902073 0.0000000 0 2 + 1220 902074 0.0000000 0 2 + 1221 902075 0.0000000 0 2 + 1222 902076 0.0007140 1 2 + 1223 902077 0.0011524 1 2 + 1224 902078 0.0010672 1 2 + 1225 902079 0.0011550 1 2 + 1226 902080 0.0010681 1 2 + 1227 902081 0.0011141 1 2 + 1228 902082 0.0010259 1 2 + 1229 902083 0.0010745 1 2 + 1230 902084 0.0010038 1 2 + 1231 902085 0.0010211 1 2 + 1232 902086 0.0009552 1 2 + 1233 902087 0.0009692 1 2 + 1234 902088 0.0009291 1 2 + 1235 902089 0.0009166 1 2 + 1236 902090 0.0009318 1 2 + 1237 902091 0.0009520 1 2 + 1238 902092 0.0008833 1 2 + 1239 902093 0.0009466 1 2 + 1240 902094 0.0008382 1 2 + 1241 902095 0.0008896 1 2 + 1242 902096 0.0008141 1 2 + 1243 902097 0.0009025 1 2 + 1244 902098 0.0007935 1 2 + 1245 902099 0.0008507 1 2 + 1246 902100 0.0007731 1 2 + 1247 902101 0.0008290 1 2 + 1248 902102 0.0007683 1 2 + 1249 902103 0.0008275 1 2 + 1250 902104 0.0007196 1 2 + 1251 902105 0.0007890 1 2 + 1252 902106 0.0006939 1 2 + 1253 902107 0.0007512 1 2 + 1254 902108 0.0006808 1 2 + 1255 902109 0.0007359 1 2 + 1256 902110 0.0006437 1 2 + 1257 902111 0.0006973 1 2 + 1258 902112 0.0006210 1 2 + 1259 902113 0.0006858 1 2 + 1260 902114 0.0005868 1 2 + 1261 902115 0.0006558 1 2 + 1262 902116 0.0005743 1 2 + 1263 902117 0.0006885 1 2 + 1264 902118 0.0009516 1 2 + 1265 902119 0.0016927 1 2 + 1266 903000 0.0000000 0 2 + 1267 903001 0.0000000 0 2 + 1268 903002 0.0000000 0 2 + 1269 903003 0.0000000 0 2 + 1270 903004 0.0000000 0 2 + 1271 903005 0.0000000 0 2 + 1272 903006 0.0000000 0 2 + 1273 903007 0.0022486 1 2 + 1274 903008 0.0022273 1 2 + 1275 903009 0.0022462 1 2 + 1276 903010 0.0021854 1 2 + 1277 903011 0.0022457 1 2 + 1278 903012 0.0021593 1 2 + 1279 903013 0.0022211 1 2 + 1280 903014 0.0021513 1 2 + 1281 903015 0.0021885 1 2 + 1282 903016 0.0020993 1 2 + 1283 903017 0.0021661 1 2 + 1284 903018 0.0020462 1 2 + 1285 903019 0.0000000 0 2 + 1286 903020 0.0020236 1 2 + 1287 903021 0.0019770 1 2 + 1288 903022 0.0019817 1 2 + 1289 903023 0.0020584 1 2 + 1290 903024 0.0019922 1 2 + 1291 903025 0.0020410 1 2 + 1292 903026 0.0019241 1 2 + 1293 903027 0.0019624 1 2 + 1294 903028 0.0018643 1 2 + 1295 903029 0.0018939 1 2 + 1296 903030 0.0018352 1 2 + 1297 903031 0.0019177 1 2 + 1298 903032 0.0000000 0 2 + 1299 903033 0.0018605 1 2 + 1300 903034 0.0018476 1 2 + 1301 903035 0.0018287 1 2 + 1302 903036 0.0017540 1 2 + 1303 903037 0.0018020 1 2 + 1304 903038 0.0016889 1 2 + 1305 903039 0.0017606 1 2 + 1306 903040 0.0016948 1 2 + 1307 903041 0.0017184 1 2 + 1308 903042 0.0016261 1 2 + 1309 903043 0.0016629 1 2 + 1310 903044 0.0000000 0 2 + 1311 903045 0.0016676 1 2 + 1312 903046 0.0013772 1 2 + 1313 903047 0.0016006 1 2 + 1314 903048 0.0015382 1 2 + 1315 903049 0.0016176 1 2 + 1316 903050 0.0015127 1 2 + 1317 903051 0.0015834 1 2 + 1318 903052 0.0014696 1 2 + 1319 903053 0.0015254 1 2 + 1320 903054 0.0014474 1 2 + 1321 903055 0.0000000 0 2 + 1322 903056 0.0014321 1 2 + 1323 903057 0.0014370 1 2 + 1324 903058 0.0013876 1 2 + 1325 903059 0.0014307 1 2 + 1326 903060 0.0013450 1 2 + 1327 903061 0.0013833 1 2 + 1328 903062 0.0012971 1 2 + 1329 903063 0.0013459 1 2 + 1330 903064 0.0012596 1 2 + 1331 903065 0.0013146 1 2 + 1332 903066 0.0000000 0 2 + 1333 903067 0.0000000 0 2 + 1334 903068 0.0000000 0 2 + 1335 903069 0.0000000 0 2 + 1336 903070 0.0000000 0 2 + 1337 903071 0.0000000 0 2 + 1338 903072 0.0000000 0 2 + 1339 903073 0.0000000 0 2 + 1340 903074 0.0000000 0 2 + 1341 903075 0.0000000 0 2 + 1342 903076 0.0007140 1 2 + 1343 903077 0.0011524 1 2 + 1344 903078 0.0010672 1 2 + 1345 903079 0.0011550 1 2 + 1346 903080 0.0010681 1 2 + 1347 903081 0.0011141 1 2 + 1348 903082 0.0010259 1 2 + 1349 903083 0.0010745 1 2 + 1350 903084 0.0010038 1 2 + 1351 903085 0.0010211 1 2 + 1352 903086 0.0009552 1 2 + 1353 903087 0.0009692 1 2 + 1354 903088 0.0009291 1 2 + 1355 903089 0.0009166 1 2 + 1356 903090 0.0009318 1 2 + 1357 903091 0.0009520 1 2 + 1358 903092 0.0008833 1 2 + 1359 903093 0.0009466 1 2 + 1360 903094 0.0008382 1 2 + 1361 903095 0.0008896 1 2 + 1362 903096 0.0008141 1 2 + 1363 903097 0.0009025 1 2 + 1364 903098 0.0007935 1 2 + 1365 903099 0.0008507 1 2 + 1366 903100 0.0007731 1 2 + 1367 903101 0.0008290 1 2 + 1368 903102 0.0007683 1 2 + 1369 903103 0.0008275 1 2 + 1370 903104 0.0007196 1 2 + 1371 903105 0.0007890 1 2 + 1372 903106 0.0006939 1 2 + 1373 903107 0.0007512 1 2 + 1374 903108 0.0006808 1 2 + 1375 903109 0.0007359 1 2 + 1376 903110 0.0006437 1 2 + 1377 903111 0.0006973 1 2 + 1378 903112 0.0006210 1 2 + 1379 903113 0.0006858 1 2 + 1380 903114 0.0005868 1 2 + 1381 903115 0.0006558 1 2 + 1382 903116 0.0005743 1 2 + 1383 903117 0.0006885 1 2 + 1384 903118 0.0009516 1 2 + 1385 903119 0.0016927 1 2 + 1386 904000 0.0000000 0 2 + 1387 904001 0.0000000 0 2 + 1388 904002 0.0000000 0 2 + 1389 904003 0.0000000 0 2 + 1390 904004 0.0000000 0 2 + 1391 904005 0.0000000 0 2 + 1392 904006 0.0000000 0 2 + 1393 904007 0.0022486 1 2 + 1394 904008 0.0022273 1 2 + 1395 904009 0.0022462 1 2 + 1396 904010 0.0021854 1 2 + 1397 904011 0.0022457 1 2 + 1398 904012 0.0021593 1 2 + 1399 904013 0.0022211 1 2 + 1400 904014 0.0021513 1 2 + 1401 904015 0.0021885 1 2 + 1402 904016 0.0020993 1 2 + 1403 904017 0.0021661 1 2 + 1404 904018 0.0020462 1 2 + 1405 904019 0.0000000 0 2 + 1406 904020 0.0020236 1 2 + 1407 904021 0.0019770 1 2 + 1408 904022 0.0019817 1 2 + 1409 904023 0.0020584 1 2 + 1410 904024 0.0019922 1 2 + 1411 904025 0.0020410 1 2 + 1412 904026 0.0019241 1 2 + 1413 904027 0.0019624 1 2 + 1414 904028 0.0018643 1 2 + 1415 904029 0.0018939 1 2 + 1416 904030 0.0018352 1 2 + 1417 904031 0.0019177 1 2 + 1418 904032 0.0000000 0 2 + 1419 904033 0.0018605 1 2 + 1420 904034 0.0018476 1 2 + 1421 904035 0.0018287 1 2 + 1422 904036 0.0017540 1 2 + 1423 904037 0.0018020 1 2 + 1424 904038 0.0016889 1 2 + 1425 904039 0.0017606 1 2 + 1426 904040 0.0016948 1 2 + 1427 904041 0.0017184 1 2 + 1428 904042 0.0016261 1 2 + 1429 904043 0.0016629 1 2 + 1430 904044 0.0000000 0 2 + 1431 904045 0.0016676 1 2 + 1432 904046 0.0013772 1 2 + 1433 904047 0.0016006 1 2 + 1434 904048 0.0015382 1 2 + 1435 904049 0.0016176 1 2 + 1436 904050 0.0015127 1 2 + 1437 904051 0.0015834 1 2 + 1438 904052 0.0014696 1 2 + 1439 904053 0.0015254 1 2 + 1440 904054 0.0014474 1 2 + 1441 904055 0.0000000 0 2 + 1442 904056 0.0014321 1 2 + 1443 904057 0.0014370 1 2 + 1444 904058 0.0013876 1 2 + 1445 904059 0.0014307 1 2 + 1446 904060 0.0013450 1 2 + 1447 904061 0.0013833 1 2 + 1448 904062 0.0012971 1 2 + 1449 904063 0.0013459 1 2 + 1450 904064 0.0012596 1 2 + 1451 904065 0.0013146 1 2 + 1452 904066 0.0000000 0 2 + 1453 904067 0.0000000 0 2 + 1454 904068 0.0000000 0 2 + 1455 904069 0.0000000 0 2 + 1456 904070 0.0000000 0 2 + 1457 904071 0.0000000 0 2 + 1458 904072 0.0000000 0 2 + 1459 904073 0.0000000 0 2 + 1460 904074 0.0000000 0 2 + 1461 904075 0.0000000 0 2 + 1462 904076 0.0007140 1 2 + 1463 904077 0.0011524 1 2 + 1464 904078 0.0010672 1 2 + 1465 904079 0.0011550 1 2 + 1466 904080 0.0010681 1 2 + 1467 904081 0.0011141 1 2 + 1468 904082 0.0010259 1 2 + 1469 904083 0.0010745 1 2 + 1470 904084 0.0010038 1 2 + 1471 904085 0.0010211 1 2 + 1472 904086 0.0009552 1 2 + 1473 904087 0.0009692 1 2 + 1474 904088 0.0009291 1 2 + 1475 904089 0.0009166 1 2 + 1476 904090 0.0009318 1 2 + 1477 904091 0.0009520 1 2 + 1478 904092 0.0008833 1 2 + 1479 904093 0.0009466 1 2 + 1480 904094 0.0008382 1 2 + 1481 904095 0.0008896 1 2 + 1482 904096 0.0008141 1 2 + 1483 904097 0.0009025 1 2 + 1484 904098 0.0007935 1 2 + 1485 904099 0.0008507 1 2 + 1486 904100 0.0007731 1 2 + 1487 904101 0.0008290 1 2 + 1488 904102 0.0007683 1 2 + 1489 904103 0.0008275 1 2 + 1490 904104 0.0007196 1 2 + 1491 904105 0.0007890 1 2 + 1492 904106 0.0006939 1 2 + 1493 904107 0.0007512 1 2 + 1494 904108 0.0006808 1 2 + 1495 904109 0.0007359 1 2 + 1496 904110 0.0006437 1 2 + 1497 904111 0.0006973 1 2 + 1498 904112 0.0006210 1 2 + 1499 904113 0.0006858 1 2 + 1500 904114 0.0005868 1 2 + 1501 904115 0.0006558 1 2 + 1502 904116 0.0005743 1 2 + 1503 904117 0.0006885 1 2 + 1504 904118 0.0009516 1 2 + 1505 904119 0.0016927 1 2 + 1506 905000 0.0000000 0 2 + 1507 905001 0.0000000 0 2 + 1508 905002 0.0000000 0 2 + 1509 905003 0.0000000 0 2 + 1510 905004 0.0000000 0 2 + 1511 905005 0.0000000 0 2 + 1512 905006 0.0000000 0 2 + 1513 905007 0.0022486 1 2 + 1514 905008 0.0022273 1 2 + 1515 905009 0.0022462 1 2 + 1516 905010 0.0021854 1 2 + 1517 905011 0.0022457 1 2 + 1518 905012 0.0021593 1 2 + 1519 905013 0.0022211 1 2 + 1520 905014 0.0021513 1 2 + 1521 905015 0.0021885 1 2 + 1522 905016 0.0020993 1 2 + 1523 905017 0.0021661 1 2 + 1524 905018 0.0020462 1 2 + 1525 905019 0.0000000 0 2 + 1526 905020 0.0020236 1 2 + 1527 905021 0.0019770 1 2 + 1528 905022 0.0019817 1 2 + 1529 905023 0.0020584 1 2 + 1530 905024 0.0019922 1 2 + 1531 905025 0.0020410 1 2 + 1532 905026 0.0019241 1 2 + 1533 905027 0.0019624 1 2 + 1534 905028 0.0018643 1 2 + 1535 905029 0.0018939 1 2 + 1536 905030 0.0018352 1 2 + 1537 905031 0.0019177 1 2 + 1538 905032 0.0000000 0 2 + 1539 905033 0.0018605 1 2 + 1540 905034 0.0018476 1 2 + 1541 905035 0.0018287 1 2 + 1542 905036 0.0017540 1 2 + 1543 905037 0.0018020 1 2 + 1544 905038 0.0016889 1 2 + 1545 905039 0.0017606 1 2 + 1546 905040 0.0016948 1 2 + 1547 905041 0.0017184 1 2 + 1548 905042 0.0016261 1 2 + 1549 905043 0.0016629 1 2 + 1550 905044 0.0000000 0 2 + 1551 905045 0.0016676 1 2 + 1552 905046 0.0013772 1 2 + 1553 905047 0.0016006 1 2 + 1554 905048 0.0015382 1 2 + 1555 905049 0.0016176 1 2 + 1556 905050 0.0015127 1 2 + 1557 905051 0.0015834 1 2 + 1558 905052 0.0014696 1 2 + 1559 905053 0.0015254 1 2 + 1560 905054 0.0014474 1 2 + 1561 905055 0.0000000 0 2 + 1562 905056 0.0014321 1 2 + 1563 905057 0.0014370 1 2 + 1564 905058 0.0013876 1 2 + 1565 905059 0.0014307 1 2 + 1566 905060 0.0013450 1 2 + 1567 905061 0.0013833 1 2 + 1568 905062 0.0012971 1 2 + 1569 905063 0.0013459 1 2 + 1570 905064 0.0012596 1 2 + 1571 905065 0.0013146 1 2 + 1572 905066 0.0000000 0 2 + 1573 905067 0.0000000 0 2 + 1574 905068 0.0000000 0 2 + 1575 905069 0.0000000 0 2 + 1576 905070 0.0000000 0 2 + 1577 905071 0.0000000 0 2 + 1578 905072 0.0000000 0 2 + 1579 905073 0.0000000 0 2 + 1580 905074 0.0000000 0 2 + 1581 905075 0.0000000 0 2 + 1582 905076 0.0007140 1 2 + 1583 905077 0.0011524 1 2 + 1584 905078 0.0010672 1 2 + 1585 905079 0.0011550 1 2 + 1586 905080 0.0010681 1 2 + 1587 905081 0.0011141 1 2 + 1588 905082 0.0010259 1 2 + 1589 905083 0.0010745 1 2 + 1590 905084 0.0010038 1 2 + 1591 905085 0.0010211 1 2 + 1592 905086 0.0009552 1 2 + 1593 905087 0.0009692 1 2 + 1594 905088 0.0009291 1 2 + 1595 905089 0.0009166 1 2 + 1596 905090 0.0009318 1 2 + 1597 905091 0.0009520 1 2 + 1598 905092 0.0008833 1 2 + 1599 905093 0.0009466 1 2 + 1600 905094 0.0008382 1 2 + 1601 905095 0.0008896 1 2 + 1602 905096 0.0008141 1 2 + 1603 905097 0.0009025 1 2 + 1604 905098 0.0007935 1 2 + 1605 905099 0.0008507 1 2 + 1606 905100 0.0007731 1 2 + 1607 905101 0.0008290 1 2 + 1608 905102 0.0007683 1 2 + 1609 905103 0.0008275 1 2 + 1610 905104 0.0007196 1 2 + 1611 905105 0.0007890 1 2 + 1612 905106 0.0006939 1 2 + 1613 905107 0.0007512 1 2 + 1614 905108 0.0006808 1 2 + 1615 905109 0.0007359 1 2 + 1616 905110 0.0006437 1 2 + 1617 905111 0.0006973 1 2 + 1618 905112 0.0006210 1 2 + 1619 905113 0.0006858 1 2 + 1620 905114 0.0005868 1 2 + 1621 905115 0.0006558 1 2 + 1622 905116 0.0005743 1 2 + 1623 905117 0.0006885 1 2 + 1624 905118 0.0009516 1 2 + 1625 905119 0.0016927 1 2 + 1626 906000 0.0000000 0 2 + 1627 906001 0.0000000 0 2 + 1628 906002 0.0000000 0 2 + 1629 906003 0.0000000 0 2 + 1630 906004 0.0000000 0 2 + 1631 906005 0.0000000 0 2 + 1632 906006 0.0000000 0 2 + 1633 906007 0.0022486 1 2 + 1634 906008 0.0022273 1 2 + 1635 906009 0.0022462 1 2 + 1636 906010 0.0021854 1 2 + 1637 906011 0.0022457 1 2 + 1638 906012 0.0021593 1 2 + 1639 906013 0.0022211 1 2 + 1640 906014 0.0021513 1 2 + 1641 906015 0.0021885 1 2 + 1642 906016 0.0020993 1 2 + 1643 906017 0.0021661 1 2 + 1644 906018 0.0020462 1 2 + 1645 906019 0.0000000 0 2 + 1646 906020 0.0020236 1 2 + 1647 906021 0.0019770 1 2 + 1648 906022 0.0019817 1 2 + 1649 906023 0.0020584 1 2 + 1650 906024 0.0019922 1 2 + 1651 906025 0.0020410 1 2 + 1652 906026 0.0019241 1 2 + 1653 906027 0.0019624 1 2 + 1654 906028 0.0018643 1 2 + 1655 906029 0.0018939 1 2 + 1656 906030 0.0018352 1 2 + 1657 906031 0.0019177 1 2 + 1658 906032 0.0000000 0 2 + 1659 906033 0.0018605 1 2 + 1660 906034 0.0018476 1 2 + 1661 906035 0.0018287 1 2 + 1662 906036 0.0017540 1 2 + 1663 906037 0.0018020 1 2 + 1664 906038 0.0016889 1 2 + 1665 906039 0.0017606 1 2 + 1666 906040 0.0016948 1 2 + 1667 906041 0.0017184 1 2 + 1668 906042 0.0016261 1 2 + 1669 906043 0.0016629 1 2 + 1670 906044 0.0000000 0 2 + 1671 906045 0.0016676 1 2 + 1672 906046 0.0013772 1 2 + 1673 906047 0.0016006 1 2 + 1674 906048 0.0015382 1 2 + 1675 906049 0.0016176 1 2 + 1676 906050 0.0015127 1 2 + 1677 906051 0.0015834 1 2 + 1678 906052 0.0014696 1 2 + 1679 906053 0.0015254 1 2 + 1680 906054 0.0014474 1 2 + 1681 906055 0.0000000 0 2 + 1682 906056 0.0014321 1 2 + 1683 906057 0.0014370 1 2 + 1684 906058 0.0013876 1 2 + 1685 906059 0.0014307 1 2 + 1686 906060 0.0013450 1 2 + 1687 906061 0.0013833 1 2 + 1688 906062 0.0012971 1 2 + 1689 906063 0.0013459 1 2 + 1690 906064 0.0012596 1 2 + 1691 906065 0.0013146 1 2 + 1692 906066 0.0000000 0 2 + 1693 906067 0.0000000 0 2 + 1694 906068 0.0000000 0 2 + 1695 906069 0.0000000 0 2 + 1696 906070 0.0000000 0 2 + 1697 906071 0.0000000 0 2 + 1698 906072 0.0000000 0 2 + 1699 906073 0.0000000 0 2 + 1700 906074 0.0000000 0 2 + 1701 906075 0.0000000 0 2 + 1702 906076 0.0007140 1 2 + 1703 906077 0.0011524 1 2 + 1704 906078 0.0010672 1 2 + 1705 906079 0.0011550 1 2 + 1706 906080 0.0010681 1 2 + 1707 906081 0.0011141 1 2 + 1708 906082 0.0010259 1 2 + 1709 906083 0.0010745 1 2 + 1710 906084 0.0010038 1 2 + 1711 906085 0.0010211 1 2 + 1712 906086 0.0009552 1 2 + 1713 906087 0.0009692 1 2 + 1714 906088 0.0009291 1 2 + 1715 906089 0.0009166 1 2 + 1716 906090 0.0009318 1 2 + 1717 906091 0.0009520 1 2 + 1718 906092 0.0008833 1 2 + 1719 906093 0.0009466 1 2 + 1720 906094 0.0008382 1 2 + 1721 906095 0.0008896 1 2 + 1722 906096 0.0008141 1 2 + 1723 906097 0.0009025 1 2 + 1724 906098 0.0007935 1 2 + 1725 906099 0.0008507 1 2 + 1726 906100 0.0007731 1 2 + 1727 906101 0.0008290 1 2 + 1728 906102 0.0007683 1 2 + 1729 906103 0.0008275 1 2 + 1730 906104 0.0007196 1 2 + 1731 906105 0.0007890 1 2 + 1732 906106 0.0006939 1 2 + 1733 906107 0.0007512 1 2 + 1734 906108 0.0006808 1 2 + 1735 906109 0.0007359 1 2 + 1736 906110 0.0006437 1 2 + 1737 906111 0.0006973 1 2 + 1738 906112 0.0006210 1 2 + 1739 906113 0.0006858 1 2 + 1740 906114 0.0005868 1 2 + 1741 906115 0.0006558 1 2 + 1742 906116 0.0005743 1 2 + 1743 906117 0.0006885 1 2 + 1744 906118 0.0009516 1 2 + 1745 906119 0.0016927 1 2 + 1746 907000 0.0000000 0 2 + 1747 907001 0.0000000 0 2 + 1748 907002 0.0000000 0 2 + 1749 907003 0.0000000 0 2 + 1750 907004 0.0000000 0 2 + 1751 907005 0.0000000 0 2 + 1752 907006 0.0000000 0 2 + 1753 907007 0.0022486 1 2 + 1754 907008 0.0022273 1 2 + 1755 907009 0.0022462 1 2 + 1756 907010 0.0021854 1 2 + 1757 907011 0.0022457 1 2 + 1758 907012 0.0021593 1 2 + 1759 907013 0.0022211 1 2 + 1760 907014 0.0021513 1 2 + 1761 907015 0.0021885 1 2 + 1762 907016 0.0020993 1 2 + 1763 907017 0.0021661 1 2 + 1764 907018 0.0020462 1 2 + 1765 907019 0.0000000 0 2 + 1766 907020 0.0020236 1 2 + 1767 907021 0.0019770 1 2 + 1768 907022 0.0019817 1 2 + 1769 907023 0.0020584 1 2 + 1770 907024 0.0019922 1 2 + 1771 907025 0.0020410 1 2 + 1772 907026 0.0019241 1 2 + 1773 907027 0.0019624 1 2 + 1774 907028 0.0018643 1 2 + 1775 907029 0.0018939 1 2 + 1776 907030 0.0018352 1 2 + 1777 907031 0.0019177 1 2 + 1778 907032 0.0000000 0 2 + 1779 907033 0.0018605 1 2 + 1780 907034 0.0018476 1 2 + 1781 907035 0.0018287 1 2 + 1782 907036 0.0017540 1 2 + 1783 907037 0.0018020 1 2 + 1784 907038 0.0016889 1 2 + 1785 907039 0.0017606 1 2 + 1786 907040 0.0016948 1 2 + 1787 907041 0.0017184 1 2 + 1788 907042 0.0016261 1 2 + 1789 907043 0.0016629 1 2 + 1790 907044 0.0000000 0 2 + 1791 907045 0.0016676 1 2 + 1792 907046 0.0013772 1 2 + 1793 907047 0.0016006 1 2 + 1794 907048 0.0015382 1 2 + 1795 907049 0.0016176 1 2 + 1796 907050 0.0015127 1 2 + 1797 907051 0.0015834 1 2 + 1798 907052 0.0014696 1 2 + 1799 907053 0.0015254 1 2 + 1800 907054 0.0014474 1 2 + 1801 907055 0.0000000 0 2 + 1802 907056 0.0014321 1 2 + 1803 907057 0.0014370 1 2 + 1804 907058 0.0013876 1 2 + 1805 907059 0.0014307 1 2 + 1806 907060 0.0013450 1 2 + 1807 907061 0.0013833 1 2 + 1808 907062 0.0012971 1 2 + 1809 907063 0.0013459 1 2 + 1810 907064 0.0012596 1 2 + 1811 907065 0.0013146 1 2 + 1812 907066 0.0000000 0 2 + 1813 907067 0.0000000 0 2 + 1814 907068 0.0000000 0 2 + 1815 907069 0.0000000 0 2 + 1816 907070 0.0000000 0 2 + 1817 907071 0.0000000 0 2 + 1818 907072 0.0000000 0 2 + 1819 907073 0.0000000 0 2 + 1820 907074 0.0000000 0 2 + 1821 907075 0.0000000 0 2 + 1822 907076 0.0007140 1 2 + 1823 907077 0.0011524 1 2 + 1824 907078 0.0010672 1 2 + 1825 907079 0.0011550 1 2 + 1826 907080 0.0010681 1 2 + 1827 907081 0.0011141 1 2 + 1828 907082 0.0010259 1 2 + 1829 907083 0.0010745 1 2 + 1830 907084 0.0010038 1 2 + 1831 907085 0.0010211 1 2 + 1832 907086 0.0009552 1 2 + 1833 907087 0.0009692 1 2 + 1834 907088 0.0009291 1 2 + 1835 907089 0.0009166 1 2 + 1836 907090 0.0009318 1 2 + 1837 907091 0.0009520 1 2 + 1838 907092 0.0008833 1 2 + 1839 907093 0.0009466 1 2 + 1840 907094 0.0008382 1 2 + 1841 907095 0.0008896 1 2 + 1842 907096 0.0008141 1 2 + 1843 907097 0.0009025 1 2 + 1844 907098 0.0007935 1 2 + 1845 907099 0.0008507 1 2 + 1846 907100 0.0007731 1 2 + 1847 907101 0.0008290 1 2 + 1848 907102 0.0007683 1 2 + 1849 907103 0.0008275 1 2 + 1850 907104 0.0007196 1 2 + 1851 907105 0.0007890 1 2 + 1852 907106 0.0006939 1 2 + 1853 907107 0.0007512 1 2 + 1854 907108 0.0006808 1 2 + 1855 907109 0.0007359 1 2 + 1856 907110 0.0006437 1 2 + 1857 907111 0.0006973 1 2 + 1858 907112 0.0006210 1 2 + 1859 907113 0.0006858 1 2 + 1860 907114 0.0005868 1 2 + 1861 907115 0.0006558 1 2 + 1862 907116 0.0005743 1 2 + 1863 907117 0.0006885 1 2 + 1864 907118 0.0009516 1 2 + 1865 907119 0.0016927 1 2 + 1866 911000 0.0000000 0 2 + 1867 911001 0.0000000 0 2 + 1868 911002 0.0000000 0 2 + 1869 911003 0.0039947 1 2 + 1870 911004 0.0039848 1 2 + 1871 911005 0.0040814 1 2 + 1872 911006 0.0039844 1 2 + 1873 911007 0.0040137 1 2 + 1874 911008 0.0039602 1 2 + 1875 911009 0.0040504 1 2 + 1876 911010 0.0039271 1 2 + 1877 911011 0.0039722 1 2 + 1878 911012 0.0039028 1 2 + 1879 911013 0.0040588 1 2 + 1880 911014 0.0039318 1 2 + 1881 911015 0.0039531 1 2 + 1882 911016 0.0000000 0 2 + 1883 911017 0.0039819 1 2 + 1884 911018 0.0038749 1 2 + 1885 911019 0.0039018 1 2 + 1886 911020 0.0038421 1 2 + 1887 911021 0.0039204 1 2 + 1888 911022 0.0038189 1 2 + 1889 911023 0.0038995 1 2 + 1890 911024 0.0038129 1 2 + 1891 911025 0.0038507 1 2 + 1892 911026 0.0037578 1 2 + 1893 911027 0.0038265 1 2 + 1894 911028 0.0037352 1 2 + 1895 911029 0.0038140 1 2 + 1896 911030 0.0000000 0 2 + 1897 911031 0.0000000 0 2 + 1898 911032 0.0000000 0 2 + 1899 911033 0.0000000 0 2 + 1900 911034 0.0000000 0 2 + 1901 911035 0.0000000 0 2 + 1902 911036 0.0000000 0 2 + 1903 911037 0.0000000 0 2 + 1904 911038 0.0000000 0 2 + 1905 911039 0.0000000 0 2 + 1906 911040 0.0000000 0 2 + 1907 911041 0.0000000 0 2 + 1908 911042 0.0000000 0 2 + 1909 911043 0.0035259 1 2 + 1910 911044 0.0034181 1 2 + 1911 911045 0.0034913 1 2 + 1912 911046 0.0033863 1 2 + 1913 911047 0.0034605 1 2 + 1914 911048 0.0033369 1 2 + 1915 911049 0.0033952 1 2 + 1916 911050 0.0033419 1 2 + 1917 911051 0.0034441 1 2 + 1918 911052 0.0033443 1 2 + 1919 911053 0.0033803 1 2 + 1920 911054 0.0033289 1 2 + 1921 911055 0.0034190 1 2 + 1922 911056 0.0033215 1 2 + 1923 911057 0.0033734 1 2 + 1924 911058 0.0032995 1 2 + 1925 911059 0.0033824 1 2 + 1926 911060 0.0032673 1 2 + 1927 911061 0.0033293 1 2 + 1928 911062 0.0032556 1 2 + 1929 911063 0.0033203 1 2 + 1930 911064 0.0032176 1 2 + 1931 911065 0.0033174 1 2 + 1932 911066 0.0031937 1 2 + 1933 911067 0.0032719 1 2 + 1934 911068 0.0031562 1 2 + 1935 911069 0.0032456 1 2 + 1936 911070 0.0031332 1 2 + 1937 911071 0.0031814 1 2 + 1938 911072 0.0030990 1 2 + 1939 911073 0.0031843 1 2 + 1940 911074 0.0030801 1 2 + 1941 911075 0.0031829 1 2 + 1942 911076 0.0030810 1 2 + 1943 911077 0.0031397 1 2 + 1944 911078 0.0030485 1 2 + 1945 911079 0.0031512 1 2 + 1946 911080 0.0030298 1 2 + 1947 911081 0.0031008 1 2 + 1948 911082 0.0029977 1 2 + 1949 911083 0.0030246 1 2 + 1950 911084 0.0029369 1 2 + 1951 911085 0.0029995 1 2 + 1952 911086 0.0028994 1 2 + 1953 911087 0.0029417 1 2 + 1954 911088 0.0028616 1 2 + 1955 911089 0.0029336 1 2 + 1956 911090 0.0028544 1 2 + 1957 911091 0.0029079 1 2 + 1958 911092 0.0028382 1 2 + 1959 911093 0.0028865 1 2 + 1960 911094 0.0028010 1 2 + 1961 911095 0.0028700 1 2 + 1962 911096 0.0027905 1 2 + 1963 911097 0.0028608 1 2 + 1964 911098 0.0027379 1 2 + 1965 911099 0.0028289 1 2 + 1966 911100 0.0027271 1 2 + 1967 911101 0.0027823 1 2 + 1968 911102 0.0026680 1 2 + 1969 911103 0.0026991 1 2 + 1970 911104 0.0026567 1 2 + 1971 911105 0.0027472 1 2 + 1972 911106 0.0026411 1 2 + 1973 911107 0.0026961 1 2 + 1974 911108 0.0026007 1 2 + 1975 911109 0.0026639 1 2 + 1976 911110 0.0025651 1 2 + 1977 911111 0.0026130 1 2 + 1978 911112 0.0025402 1 2 + 1979 911113 0.0026076 1 2 + 1980 911114 0.0025143 1 2 + 1981 911115 0.0025748 1 2 + 1982 911116 0.0024974 1 2 + 1983 911117 0.0025790 1 2 + 1984 911118 0.0000000 0 2 + 1985 911119 0.0000000 0 2 + 1986 912000 0.0000000 0 2 + 1987 912001 0.0000000 0 2 + 1988 912002 0.0000000 0 2 + 1989 912003 0.0039947 1 2 + 1990 912004 0.0039848 1 2 + 1991 912005 0.0040814 1 2 + 1992 912006 0.0039844 1 2 + 1993 912007 0.0040137 1 2 + 1994 912008 0.0039602 1 2 + 1995 912009 0.0040504 1 2 + 1996 912010 0.0039271 1 2 + 1997 912011 0.0039722 1 2 + 1998 912012 0.0039028 1 2 + 1999 912013 0.0040588 1 2 + 2000 912014 0.0039318 1 2 + 2001 912015 0.0039531 1 2 + 2002 912016 0.0000000 0 2 + 2003 912017 0.0039819 1 2 + 2004 912018 0.0038749 1 2 + 2005 912019 0.0039018 1 2 + 2006 912020 0.0038421 1 2 + 2007 912021 0.0039204 1 2 + 2008 912022 0.0038189 1 2 + 2009 912023 0.0038995 1 2 + 2010 912024 0.0038129 1 2 + 2011 912025 0.0038507 1 2 + 2012 912026 0.0037578 1 2 + 2013 912027 0.0038265 1 2 + 2014 912028 0.0037352 1 2 + 2015 912029 0.0038140 1 2 + 2016 912030 0.0000000 0 2 + 2017 912031 0.0000000 0 2 + 2018 912032 0.0000000 0 2 + 2019 912033 0.0000000 0 2 + 2020 912034 0.0000000 0 2 + 2021 912035 0.0000000 0 2 + 2022 912036 0.0000000 0 2 + 2023 912037 0.0000000 0 2 + 2024 912038 0.0000000 0 2 + 2025 912039 0.0000000 0 2 + 2026 912040 0.0000000 0 2 + 2027 912041 0.0000000 0 2 + 2028 912042 0.0000000 0 2 + 2029 912043 0.0035259 1 2 + 2030 912044 0.0034181 1 2 + 2031 912045 0.0034913 1 2 + 2032 912046 0.0033863 1 2 + 2033 912047 0.0034605 1 2 + 2034 912048 0.0033369 1 2 + 2035 912049 0.0033952 1 2 + 2036 912050 0.0033419 1 2 + 2037 912051 0.0034441 1 2 + 2038 912052 0.0033443 1 2 + 2039 912053 0.0033803 1 2 + 2040 912054 0.0033289 1 2 + 2041 912055 0.0034190 1 2 + 2042 912056 0.0033215 1 2 + 2043 912057 0.0033734 1 2 + 2044 912058 0.0032995 1 2 + 2045 912059 0.0033824 1 2 + 2046 912060 0.0032673 1 2 + 2047 912061 0.0033293 1 2 + 2048 912062 0.0032556 1 2 + 2049 912063 0.0033203 1 2 + 2050 912064 0.0032176 1 2 + 2051 912065 0.0033174 1 2 + 2052 912066 0.0031937 1 2 + 2053 912067 0.0032719 1 2 + 2054 912068 0.0031562 1 2 + 2055 912069 0.0032456 1 2 + 2056 912070 0.0031332 1 2 + 2057 912071 0.0031814 1 2 + 2058 912072 0.0030990 1 2 + 2059 912073 0.0031843 1 2 + 2060 912074 0.0030801 1 2 + 2061 912075 0.0031829 1 2 + 2062 912076 0.0030810 1 2 + 2063 912077 0.0031397 1 2 + 2064 912078 0.0030485 1 2 + 2065 912079 0.0031512 1 2 + 2066 912080 0.0030298 1 2 + 2067 912081 0.0031008 1 2 + 2068 912082 0.0029977 1 2 + 2069 912083 0.0030246 1 2 + 2070 912084 0.0029369 1 2 + 2071 912085 0.0029995 1 2 + 2072 912086 0.0028994 1 2 + 2073 912087 0.0029417 1 2 + 2074 912088 0.0028616 1 2 + 2075 912089 0.0029336 1 2 + 2076 912090 0.0028544 1 2 + 2077 912091 0.0029079 1 2 + 2078 912092 0.0028382 1 2 + 2079 912093 0.0028865 1 2 + 2080 912094 0.0028010 1 2 + 2081 912095 0.0028700 1 2 + 2082 912096 0.0027905 1 2 + 2083 912097 0.0028608 1 2 + 2084 912098 0.0027379 1 2 + 2085 912099 0.0028289 1 2 + 2086 912100 0.0027271 1 2 + 2087 912101 0.0027823 1 2 + 2088 912102 0.0026680 1 2 + 2089 912103 0.0026991 1 2 + 2090 912104 0.0026567 1 2 + 2091 912105 0.0027472 1 2 + 2092 912106 0.0026411 1 2 + 2093 912107 0.0026961 1 2 + 2094 912108 0.0026007 1 2 + 2095 912109 0.0026639 1 2 + 2096 912110 0.0025651 1 2 + 2097 912111 0.0026130 1 2 + 2098 912112 0.0025402 1 2 + 2099 912113 0.0026076 1 2 + 2100 912114 0.0025143 1 2 + 2101 912115 0.0025748 1 2 + 2102 912116 0.0024974 1 2 + 2103 912117 0.0025790 1 2 + 2104 912118 0.0000000 0 2 + 2105 912119 0.0000000 0 2 + 2106 913000 0.0000000 0 2 + 2107 913001 0.0000000 0 2 + 2108 913002 0.0000000 0 2 + 2109 913003 0.0039947 1 2 + 2110 913004 0.0039848 1 2 + 2111 913005 0.0040814 1 2 + 2112 913006 0.0039844 1 2 + 2113 913007 0.0040137 1 2 + 2114 913008 0.0039602 1 2 + 2115 913009 0.0040504 1 2 + 2116 913010 0.0039271 1 2 + 2117 913011 0.0039722 1 2 + 2118 913012 0.0039028 1 2 + 2119 913013 0.0040588 1 2 + 2120 913014 0.0039318 1 2 + 2121 913015 0.0039531 1 2 + 2122 913016 0.0000000 0 2 + 2123 913017 0.0039819 1 2 + 2124 913018 0.0038749 1 2 + 2125 913019 0.0039018 1 2 + 2126 913020 0.0038421 1 2 + 2127 913021 0.0039204 1 2 + 2128 913022 0.0038189 1 2 + 2129 913023 0.0038995 1 2 + 2130 913024 0.0038129 1 2 + 2131 913025 0.0038507 1 2 + 2132 913026 0.0037578 1 2 + 2133 913027 0.0038265 1 2 + 2134 913028 0.0037352 1 2 + 2135 913029 0.0038140 1 2 + 2136 913030 0.0000000 0 2 + 2137 913031 0.0000000 0 2 + 2138 913032 0.0000000 0 2 + 2139 913033 0.0000000 0 2 + 2140 913034 0.0000000 0 2 + 2141 913035 0.0000000 0 2 + 2142 913036 0.0000000 0 2 + 2143 913037 0.0000000 0 2 + 2144 913038 0.0000000 0 2 + 2145 913039 0.0000000 0 2 + 2146 913040 0.0000000 0 2 + 2147 913041 0.0000000 0 2 + 2148 913042 0.0000000 0 2 + 2149 913043 0.0035259 1 2 + 2150 913044 0.0034181 1 2 + 2151 913045 0.0034913 1 2 + 2152 913046 0.0033863 1 2 + 2153 913047 0.0034605 1 2 + 2154 913048 0.0033369 1 2 + 2155 913049 0.0033952 1 2 + 2156 913050 0.0033419 1 2 + 2157 913051 0.0034441 1 2 + 2158 913052 0.0033443 1 2 + 2159 913053 0.0033803 1 2 + 2160 913054 0.0033289 1 2 + 2161 913055 0.0034190 1 2 + 2162 913056 0.0033215 1 2 + 2163 913057 0.0033734 1 2 + 2164 913058 0.0032995 1 2 + 2165 913059 0.0033824 1 2 + 2166 913060 0.0032673 1 2 + 2167 913061 0.0033293 1 2 + 2168 913062 0.0032556 1 2 + 2169 913063 0.0033203 1 2 + 2170 913064 0.0032176 1 2 + 2171 913065 0.0033174 1 2 + 2172 913066 0.0031937 1 2 + 2173 913067 0.0032719 1 2 + 2174 913068 0.0031562 1 2 + 2175 913069 0.0032456 1 2 + 2176 913070 0.0031332 1 2 + 2177 913071 0.0031814 1 2 + 2178 913072 0.0030990 1 2 + 2179 913073 0.0031843 1 2 + 2180 913074 0.0030801 1 2 + 2181 913075 0.0031829 1 2 + 2182 913076 0.0030810 1 2 + 2183 913077 0.0031397 1 2 + 2184 913078 0.0030485 1 2 + 2185 913079 0.0031512 1 2 + 2186 913080 0.0030298 1 2 + 2187 913081 0.0031008 1 2 + 2188 913082 0.0029977 1 2 + 2189 913083 0.0030246 1 2 + 2190 913084 0.0029369 1 2 + 2191 913085 0.0029995 1 2 + 2192 913086 0.0028994 1 2 + 2193 913087 0.0029417 1 2 + 2194 913088 0.0028616 1 2 + 2195 913089 0.0029336 1 2 + 2196 913090 0.0028544 1 2 + 2197 913091 0.0029079 1 2 + 2198 913092 0.0028382 1 2 + 2199 913093 0.0028865 1 2 + 2200 913094 0.0028010 1 2 + 2201 913095 0.0028700 1 2 + 2202 913096 0.0027905 1 2 + 2203 913097 0.0028608 1 2 + 2204 913098 0.0027379 1 2 + 2205 913099 0.0028289 1 2 + 2206 913100 0.0027271 1 2 + 2207 913101 0.0027823 1 2 + 2208 913102 0.0026680 1 2 + 2209 913103 0.0026991 1 2 + 2210 913104 0.0026567 1 2 + 2211 913105 0.0027472 1 2 + 2212 913106 0.0026411 1 2 + 2213 913107 0.0026961 1 2 + 2214 913108 0.0026007 1 2 + 2215 913109 0.0026639 1 2 + 2216 913110 0.0025651 1 2 + 2217 913111 0.0026130 1 2 + 2218 913112 0.0025402 1 2 + 2219 913113 0.0026076 1 2 + 2220 913114 0.0025143 1 2 + 2221 913115 0.0025748 1 2 + 2222 913116 0.0024974 1 2 + 2223 913117 0.0025790 1 2 + 2224 913118 0.0000000 0 2 + 2225 913119 0.0000000 0 2 + 2226 914000 0.0000000 0 2 + 2227 914001 0.0000000 0 2 + 2228 914002 0.0000000 0 2 + 2229 914003 0.0039947 1 2 + 2230 914004 0.0039848 1 2 + 2231 914005 0.0040814 1 2 + 2232 914006 0.0039844 1 2 + 2233 914007 0.0040137 1 2 + 2234 914008 0.0039602 1 2 + 2235 914009 0.0040504 1 2 + 2236 914010 0.0039271 1 2 + 2237 914011 0.0039722 1 2 + 2238 914012 0.0039028 1 2 + 2239 914013 0.0040588 1 2 + 2240 914014 0.0039318 1 2 + 2241 914015 0.0039531 1 2 + 2242 914016 0.0000000 0 2 + 2243 914017 0.0039819 1 2 + 2244 914018 0.0038749 1 2 + 2245 914019 0.0039018 1 2 + 2246 914020 0.0038421 1 2 + 2247 914021 0.0039204 1 2 + 2248 914022 0.0038189 1 2 + 2249 914023 0.0038995 1 2 + 2250 914024 0.0038129 1 2 + 2251 914025 0.0038507 1 2 + 2252 914026 0.0037578 1 2 + 2253 914027 0.0038265 1 2 + 2254 914028 0.0037352 1 2 + 2255 914029 0.0038140 1 2 + 2256 914030 0.0000000 0 2 + 2257 914031 0.0000000 0 2 + 2258 914032 0.0000000 0 2 + 2259 914033 0.0000000 0 2 + 2260 914034 0.0000000 0 2 + 2261 914035 0.0000000 0 2 + 2262 914036 0.0000000 0 2 + 2263 914037 0.0000000 0 2 + 2264 914038 0.0000000 0 2 + 2265 914039 0.0000000 0 2 + 2266 914040 0.0000000 0 2 + 2267 914041 0.0000000 0 2 + 2268 914042 0.0000000 0 2 + 2269 914043 0.0035259 1 2 + 2270 914044 0.0034181 1 2 + 2271 914045 0.0034913 1 2 + 2272 914046 0.0033863 1 2 + 2273 914047 0.0034605 1 2 + 2274 914048 0.0033369 1 2 + 2275 914049 0.0033952 1 2 + 2276 914050 0.0033419 1 2 + 2277 914051 0.0034441 1 2 + 2278 914052 0.0033443 1 2 + 2279 914053 0.0033803 1 2 + 2280 914054 0.0033289 1 2 + 2281 914055 0.0034190 1 2 + 2282 914056 0.0033215 1 2 + 2283 914057 0.0033734 1 2 + 2284 914058 0.0032995 1 2 + 2285 914059 0.0033824 1 2 + 2286 914060 0.0032673 1 2 + 2287 914061 0.0033293 1 2 + 2288 914062 0.0032556 1 2 + 2289 914063 0.0033203 1 2 + 2290 914064 0.0032176 1 2 + 2291 914065 0.0033174 1 2 + 2292 914066 0.0031937 1 2 + 2293 914067 0.0032719 1 2 + 2294 914068 0.0031562 1 2 + 2295 914069 0.0032456 1 2 + 2296 914070 0.0031332 1 2 + 2297 914071 0.0031814 1 2 + 2298 914072 0.0030990 1 2 + 2299 914073 0.0031843 1 2 + 2300 914074 0.0030801 1 2 + 2301 914075 0.0031829 1 2 + 2302 914076 0.0030810 1 2 + 2303 914077 0.0031397 1 2 + 2304 914078 0.0030485 1 2 + 2305 914079 0.0031512 1 2 + 2306 914080 0.0030298 1 2 + 2307 914081 0.0031008 1 2 + 2308 914082 0.0029977 1 2 + 2309 914083 0.0030246 1 2 + 2310 914084 0.0029369 1 2 + 2311 914085 0.0029995 1 2 + 2312 914086 0.0028994 1 2 + 2313 914087 0.0029417 1 2 + 2314 914088 0.0028616 1 2 + 2315 914089 0.0029336 1 2 + 2316 914090 0.0028544 1 2 + 2317 914091 0.0029079 1 2 + 2318 914092 0.0028382 1 2 + 2319 914093 0.0028865 1 2 + 2320 914094 0.0028010 1 2 + 2321 914095 0.0028700 1 2 + 2322 914096 0.0027905 1 2 + 2323 914097 0.0028608 1 2 + 2324 914098 0.0027379 1 2 + 2325 914099 0.0028289 1 2 + 2326 914100 0.0027271 1 2 + 2327 914101 0.0027823 1 2 + 2328 914102 0.0026680 1 2 + 2329 914103 0.0026991 1 2 + 2330 914104 0.0026567 1 2 + 2331 914105 0.0027472 1 2 + 2332 914106 0.0026411 1 2 + 2333 914107 0.0026961 1 2 + 2334 914108 0.0026007 1 2 + 2335 914109 0.0026639 1 2 + 2336 914110 0.0025651 1 2 + 2337 914111 0.0026130 1 2 + 2338 914112 0.0025402 1 2 + 2339 914113 0.0026076 1 2 + 2340 914114 0.0025143 1 2 + 2341 914115 0.0025748 1 2 + 2342 914116 0.0024974 1 2 + 2343 914117 0.0025790 1 2 + 2344 914118 0.0000000 0 2 + 2345 914119 0.0000000 0 2 + 2346 915000 0.0000000 0 2 + 2347 915001 0.0000000 0 2 + 2348 915002 0.0000000 0 2 + 2349 915003 0.0039947 1 2 + 2350 915004 0.0039848 1 2 + 2351 915005 0.0040814 1 2 + 2352 915006 0.0039844 1 2 + 2353 915007 0.0040137 1 2 + 2354 915008 0.0039602 1 2 + 2355 915009 0.0040504 1 2 + 2356 915010 0.0039271 1 2 + 2357 915011 0.0039722 1 2 + 2358 915012 0.0039028 1 2 + 2359 915013 0.0040588 1 2 + 2360 915014 0.0039318 1 2 + 2361 915015 0.0039531 1 2 + 2362 915016 0.0000000 0 2 + 2363 915017 0.0039819 1 2 + 2364 915018 0.0038749 1 2 + 2365 915019 0.0039018 1 2 + 2366 915020 0.0038421 1 2 + 2367 915021 0.0039204 1 2 + 2368 915022 0.0038189 1 2 + 2369 915023 0.0038995 1 2 + 2370 915024 0.0038129 1 2 + 2371 915025 0.0038507 1 2 + 2372 915026 0.0037578 1 2 + 2373 915027 0.0038265 1 2 + 2374 915028 0.0037352 1 2 + 2375 915029 0.0038140 1 2 + 2376 915030 0.0000000 0 2 + 2377 915031 0.0000000 0 2 + 2378 915032 0.0000000 0 2 + 2379 915033 0.0000000 0 2 + 2380 915034 0.0000000 0 2 + 2381 915035 0.0000000 0 2 + 2382 915036 0.0000000 0 2 + 2383 915037 0.0000000 0 2 + 2384 915038 0.0000000 0 2 + 2385 915039 0.0000000 0 2 + 2386 915040 0.0000000 0 2 + 2387 915041 0.0000000 0 2 + 2388 915042 0.0000000 0 2 + 2389 915043 0.0035259 1 2 + 2390 915044 0.0034181 1 2 + 2391 915045 0.0034913 1 2 + 2392 915046 0.0033863 1 2 + 2393 915047 0.0034605 1 2 + 2394 915048 0.0033369 1 2 + 2395 915049 0.0033952 1 2 + 2396 915050 0.0033419 1 2 + 2397 915051 0.0034441 1 2 + 2398 915052 0.0033443 1 2 + 2399 915053 0.0033803 1 2 + 2400 915054 0.0033289 1 2 + 2401 915055 0.0034190 1 2 + 2402 915056 0.0033215 1 2 + 2403 915057 0.0033734 1 2 + 2404 915058 0.0032995 1 2 + 2405 915059 0.0033824 1 2 + 2406 915060 0.0032673 1 2 + 2407 915061 0.0033293 1 2 + 2408 915062 0.0032556 1 2 + 2409 915063 0.0033203 1 2 + 2410 915064 0.0032176 1 2 + 2411 915065 0.0033174 1 2 + 2412 915066 0.0031937 1 2 + 2413 915067 0.0032719 1 2 + 2414 915068 0.0031562 1 2 + 2415 915069 0.0032456 1 2 + 2416 915070 0.0031332 1 2 + 2417 915071 0.0031814 1 2 + 2418 915072 0.0030990 1 2 + 2419 915073 0.0031843 1 2 + 2420 915074 0.0030801 1 2 + 2421 915075 0.0031829 1 2 + 2422 915076 0.0030810 1 2 + 2423 915077 0.0031397 1 2 + 2424 915078 0.0030485 1 2 + 2425 915079 0.0031512 1 2 + 2426 915080 0.0030298 1 2 + 2427 915081 0.0031008 1 2 + 2428 915082 0.0029977 1 2 + 2429 915083 0.0030246 1 2 + 2430 915084 0.0029369 1 2 + 2431 915085 0.0029995 1 2 + 2432 915086 0.0028994 1 2 + 2433 915087 0.0029417 1 2 + 2434 915088 0.0028616 1 2 + 2435 915089 0.0029336 1 2 + 2436 915090 0.0028544 1 2 + 2437 915091 0.0029079 1 2 + 2438 915092 0.0028382 1 2 + 2439 915093 0.0028865 1 2 + 2440 915094 0.0028010 1 2 + 2441 915095 0.0028700 1 2 + 2442 915096 0.0027905 1 2 + 2443 915097 0.0028608 1 2 + 2444 915098 0.0027379 1 2 + 2445 915099 0.0028289 1 2 + 2446 915100 0.0027271 1 2 + 2447 915101 0.0027823 1 2 + 2448 915102 0.0026680 1 2 + 2449 915103 0.0026991 1 2 + 2450 915104 0.0026567 1 2 + 2451 915105 0.0027472 1 2 + 2452 915106 0.0026411 1 2 + 2453 915107 0.0026961 1 2 + 2454 915108 0.0026007 1 2 + 2455 915109 0.0026639 1 2 + 2456 915110 0.0025651 1 2 + 2457 915111 0.0026130 1 2 + 2458 915112 0.0025402 1 2 + 2459 915113 0.0026076 1 2 + 2460 915114 0.0025143 1 2 + 2461 915115 0.0025748 1 2 + 2462 915116 0.0024974 1 2 + 2463 915117 0.0025790 1 2 + 2464 915118 0.0000000 0 2 + 2465 915119 0.0000000 0 2 + 2466 916000 0.0000000 0 2 + 2467 916001 0.0000000 0 2 + 2468 916002 0.0000000 0 2 + 2469 916003 0.0039947 1 2 + 2470 916004 0.0039848 1 2 + 2471 916005 0.0040814 1 2 + 2472 916006 0.0039844 1 2 + 2473 916007 0.0040137 1 2 + 2474 916008 0.0039602 1 2 + 2475 916009 0.0040504 1 2 + 2476 916010 0.0039271 1 2 + 2477 916011 0.0039722 1 2 + 2478 916012 0.0039028 1 2 + 2479 916013 0.0040588 1 2 + 2480 916014 0.0039318 1 2 + 2481 916015 0.0039531 1 2 + 2482 916016 0.0000000 0 2 + 2483 916017 0.0039819 1 2 + 2484 916018 0.0038749 1 2 + 2485 916019 0.0039018 1 2 + 2486 916020 0.0038421 1 2 + 2487 916021 0.0039204 1 2 + 2488 916022 0.0038189 1 2 + 2489 916023 0.0038995 1 2 + 2490 916024 0.0038129 1 2 + 2491 916025 0.0038507 1 2 + 2492 916026 0.0037578 1 2 + 2493 916027 0.0038265 1 2 + 2494 916028 0.0037352 1 2 + 2495 916029 0.0038140 1 2 + 2496 916030 0.0000000 0 2 + 2497 916031 0.0000000 0 2 + 2498 916032 0.0000000 0 2 + 2499 916033 0.0000000 0 2 + 2500 916034 0.0000000 0 2 + 2501 916035 0.0000000 0 2 + 2502 916036 0.0000000 0 2 + 2503 916037 0.0000000 0 2 + 2504 916038 0.0000000 0 2 + 2505 916039 0.0000000 0 2 + 2506 916040 0.0000000 0 2 + 2507 916041 0.0000000 0 2 + 2508 916042 0.0000000 0 2 + 2509 916043 0.0035259 1 2 + 2510 916044 0.0034181 1 2 + 2511 916045 0.0034913 1 2 + 2512 916046 0.0033863 1 2 + 2513 916047 0.0034605 1 2 + 2514 916048 0.0033369 1 2 + 2515 916049 0.0033952 1 2 + 2516 916050 0.0033419 1 2 + 2517 916051 0.0034441 1 2 + 2518 916052 0.0033443 1 2 + 2519 916053 0.0033803 1 2 + 2520 916054 0.0033289 1 2 + 2521 916055 0.0034190 1 2 + 2522 916056 0.0033215 1 2 + 2523 916057 0.0033734 1 2 + 2524 916058 0.0032995 1 2 + 2525 916059 0.0033824 1 2 + 2526 916060 0.0032673 1 2 + 2527 916061 0.0033293 1 2 + 2528 916062 0.0032556 1 2 + 2529 916063 0.0033203 1 2 + 2530 916064 0.0032176 1 2 + 2531 916065 0.0033174 1 2 + 2532 916066 0.0031937 1 2 + 2533 916067 0.0032719 1 2 + 2534 916068 0.0031562 1 2 + 2535 916069 0.0032456 1 2 + 2536 916070 0.0031332 1 2 + 2537 916071 0.0031814 1 2 + 2538 916072 0.0030990 1 2 + 2539 916073 0.0031843 1 2 + 2540 916074 0.0030801 1 2 + 2541 916075 0.0031829 1 2 + 2542 916076 0.0030810 1 2 + 2543 916077 0.0031397 1 2 + 2544 916078 0.0030485 1 2 + 2545 916079 0.0031512 1 2 + 2546 916080 0.0030298 1 2 + 2547 916081 0.0031008 1 2 + 2548 916082 0.0029977 1 2 + 2549 916083 0.0030246 1 2 + 2550 916084 0.0029369 1 2 + 2551 916085 0.0029995 1 2 + 2552 916086 0.0028994 1 2 + 2553 916087 0.0029417 1 2 + 2554 916088 0.0028616 1 2 + 2555 916089 0.0029336 1 2 + 2556 916090 0.0028544 1 2 + 2557 916091 0.0029079 1 2 + 2558 916092 0.0028382 1 2 + 2559 916093 0.0028865 1 2 + 2560 916094 0.0028010 1 2 + 2561 916095 0.0028700 1 2 + 2562 916096 0.0027905 1 2 + 2563 916097 0.0028608 1 2 + 2564 916098 0.0027379 1 2 + 2565 916099 0.0028289 1 2 + 2566 916100 0.0027271 1 2 + 2567 916101 0.0027823 1 2 + 2568 916102 0.0026680 1 2 + 2569 916103 0.0026991 1 2 + 2570 916104 0.0026567 1 2 + 2571 916105 0.0027472 1 2 + 2572 916106 0.0026411 1 2 + 2573 916107 0.0026961 1 2 + 2574 916108 0.0026007 1 2 + 2575 916109 0.0026639 1 2 + 2576 916110 0.0025651 1 2 + 2577 916111 0.0026130 1 2 + 2578 916112 0.0025402 1 2 + 2579 916113 0.0026076 1 2 + 2580 916114 0.0025143 1 2 + 2581 916115 0.0025748 1 2 + 2582 916116 0.0024974 1 2 + 2583 916117 0.0025790 1 2 + 2584 916118 0.0000000 0 2 + 2585 916119 0.0000000 0 2 + 2586 917000 0.0000000 0 2 + 2587 917001 0.0000000 0 2 + 2588 917002 0.0000000 0 2 + 2589 917003 0.0039947 1 2 + 2590 917004 0.0039848 1 2 + 2591 917005 0.0040814 1 2 + 2592 917006 0.0039844 1 2 + 2593 917007 0.0040137 1 2 + 2594 917008 0.0039602 1 2 + 2595 917009 0.0040504 1 2 + 2596 917010 0.0039271 1 2 + 2597 917011 0.0039722 1 2 + 2598 917012 0.0039028 1 2 + 2599 917013 0.0040588 1 2 + 2600 917014 0.0039318 1 2 + 2601 917015 0.0039531 1 2 + 2602 917016 0.0000000 0 2 + 2603 917017 0.0039819 1 2 + 2604 917018 0.0038749 1 2 + 2605 917019 0.0039018 1 2 + 2606 917020 0.0038421 1 2 + 2607 917021 0.0039204 1 2 + 2608 917022 0.0038189 1 2 + 2609 917023 0.0038995 1 2 + 2610 917024 0.0038129 1 2 + 2611 917025 0.0038507 1 2 + 2612 917026 0.0037578 1 2 + 2613 917027 0.0038265 1 2 + 2614 917028 0.0037352 1 2 + 2615 917029 0.0038140 1 2 + 2616 917030 0.0000000 0 2 + 2617 917031 0.0000000 0 2 + 2618 917032 0.0000000 0 2 + 2619 917033 0.0000000 0 2 + 2620 917034 0.0000000 0 2 + 2621 917035 0.0000000 0 2 + 2622 917036 0.0000000 0 2 + 2623 917037 0.0000000 0 2 + 2624 917038 0.0000000 0 2 + 2625 917039 0.0000000 0 2 + 2626 917040 0.0000000 0 2 + 2627 917041 0.0000000 0 2 + 2628 917042 0.0000000 0 2 + 2629 917043 0.0035259 1 2 + 2630 917044 0.0034181 1 2 + 2631 917045 0.0034913 1 2 + 2632 917046 0.0033863 1 2 + 2633 917047 0.0034605 1 2 + 2634 917048 0.0033369 1 2 + 2635 917049 0.0033952 1 2 + 2636 917050 0.0033419 1 2 + 2637 917051 0.0034441 1 2 + 2638 917052 0.0033443 1 2 + 2639 917053 0.0033803 1 2 + 2640 917054 0.0033289 1 2 + 2641 917055 0.0034190 1 2 + 2642 917056 0.0033215 1 2 + 2643 917057 0.0033734 1 2 + 2644 917058 0.0032995 1 2 + 2645 917059 0.0033824 1 2 + 2646 917060 0.0032673 1 2 + 2647 917061 0.0033293 1 2 + 2648 917062 0.0032556 1 2 + 2649 917063 0.0033203 1 2 + 2650 917064 0.0032176 1 2 + 2651 917065 0.0033174 1 2 + 2652 917066 0.0031937 1 2 + 2653 917067 0.0032719 1 2 + 2654 917068 0.0031562 1 2 + 2655 917069 0.0032456 1 2 + 2656 917070 0.0031332 1 2 + 2657 917071 0.0031814 1 2 + 2658 917072 0.0030990 1 2 + 2659 917073 0.0031843 1 2 + 2660 917074 0.0030801 1 2 + 2661 917075 0.0031829 1 2 + 2662 917076 0.0030810 1 2 + 2663 917077 0.0031397 1 2 + 2664 917078 0.0030485 1 2 + 2665 917079 0.0031512 1 2 + 2666 917080 0.0030298 1 2 + 2667 917081 0.0031008 1 2 + 2668 917082 0.0029977 1 2 + 2669 917083 0.0030246 1 2 + 2670 917084 0.0029369 1 2 + 2671 917085 0.0029995 1 2 + 2672 917086 0.0028994 1 2 + 2673 917087 0.0029417 1 2 + 2674 917088 0.0028616 1 2 + 2675 917089 0.0029336 1 2 + 2676 917090 0.0028544 1 2 + 2677 917091 0.0029079 1 2 + 2678 917092 0.0028382 1 2 + 2679 917093 0.0028865 1 2 + 2680 917094 0.0028010 1 2 + 2681 917095 0.0028700 1 2 + 2682 917096 0.0027905 1 2 + 2683 917097 0.0028608 1 2 + 2684 917098 0.0027379 1 2 + 2685 917099 0.0028289 1 2 + 2686 917100 0.0027271 1 2 + 2687 917101 0.0027823 1 2 + 2688 917102 0.0026680 1 2 + 2689 917103 0.0026991 1 2 + 2690 917104 0.0026567 1 2 + 2691 917105 0.0027472 1 2 + 2692 917106 0.0026411 1 2 + 2693 917107 0.0026961 1 2 + 2694 917108 0.0026007 1 2 + 2695 917109 0.0026639 1 2 + 2696 917110 0.0025651 1 2 + 2697 917111 0.0026130 1 2 + 2698 917112 0.0025402 1 2 + 2699 917113 0.0026076 1 2 + 2700 917114 0.0025143 1 2 + 2701 917115 0.0025748 1 2 + 2702 917116 0.0024974 1 2 + 2703 917117 0.0025790 1 2 + 2704 917118 0.0000000 0 2 + 2705 917119 0.0000000 0 2 + 2706 10100 0.0000000 0 3 + 2707 10101 0.0000000 0 3 + 2708 10102 -0.0090601 1 3 + 2709 10103 -0.0056713 1 3 + 2710 10104 0.0000000 0 3 + 2711 10105 -0.0050900 1 3 + 2712 10106 0.0000000 0 3 + 2713 10107 -0.0014836 1 3 + 2714 10200 0.0000000 0 3 + 2715 10201 0.0000000 0 3 + 2716 10202 0.0006628 1 3 + 2717 10203 0.0012634 1 3 + 2718 10204 0.0000000 0 3 + 2719 10205 0.0005052 1 3 + 2720 10206 0.0026750 1 3 + 2721 10207 0.0017685 1 3 + 2722 10300 0.0032539 1 3 + 2723 10301 0.0106415 1 3 + 2724 10302 0.0000000 0 3 + 2725 10303 0.0041239 1 3 + 2726 10304 0.0044355 1 3 + 2727 10305 0.0038747 1 3 + 2728 10306 0.0043783 1 3 + 2729 10307 0.0043520 1 3 + 2730 10400 0.0000000 0 3 + 2731 10401 0.0000000 0 3 + 2732 10402 -0.0090601 1 3 + 2733 10403 -0.0056713 1 3 + 2734 10404 0.0000000 0 3 + 2735 10405 -0.0050900 1 3 + 2736 10406 0.0000000 0 3 + 2737 10407 -0.0014836 1 3 + 2738 10500 0.0000000 0 3 + 2739 10501 0.0000000 0 3 + 2740 10502 0.0006628 1 3 + 2741 10503 0.0012634 1 3 + 2742 10504 0.0000000 0 3 + 2743 10505 0.0005052 1 3 + 2744 10506 0.0026750 1 3 + 2745 10507 0.0017685 1 3 + 2746 10600 0.0032539 1 3 + 2747 10601 0.0106415 1 3 + 2748 10602 0.0000000 0 3 + 2749 10603 0.0041239 1 3 + 2750 10604 0.0044355 1 3 + 2751 10605 0.0038747 1 3 + 2752 10606 0.0043783 1 3 + 2753 10607 0.0043520 1 3 + 2754 10700 0.0000000 0 3 + 2755 10701 0.0000000 0 3 + 2756 10702 -0.0090601 1 3 + 2757 10703 -0.0056713 1 3 + 2758 10704 0.0000000 0 3 + 2759 10705 -0.0050900 1 3 + 2760 10706 0.0000000 0 3 + 2761 10707 -0.0014836 1 3 + 2762 10800 0.0000000 0 3 + 2763 10801 0.0000000 0 3 + 2764 10802 0.0006628 1 3 + 2765 10803 0.0012634 1 3 + 2766 10804 0.0000000 0 3 + 2767 10805 0.0005052 1 3 + 2768 10806 0.0026750 1 3 + 2769 10807 0.0017685 1 3 + 2770 10900 0.0032539 1 3 + 2771 10901 0.0106415 1 3 + 2772 10902 0.0000000 0 3 + 2773 10903 0.0041239 1 3 + 2774 10904 0.0044355 1 3 + 2775 10905 0.0038747 1 3 + 2776 10906 0.0043783 1 3 + 2777 10907 0.0043520 1 3 From f12123ef7a31a5124c09a4374cab122b0a9c2184 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 17:12:08 +0100 Subject: [PATCH 84/86] Add dependencies Framework as dependency on documentation. Refs #9562 --- Code/Mantid/docs/CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Code/Mantid/docs/CMakeLists.txt b/Code/Mantid/docs/CMakeLists.txt index 97c42b78a719..cb3ec895241e 100644 --- a/Code/Mantid/docs/CMakeLists.txt +++ b/Code/Mantid/docs/CMakeLists.txt @@ -10,15 +10,15 @@ if ( SPHINX_FOUND ) # targets set ( TARGET_PREFIX docs) - # runner - default=current build - set ( DOCS_RUNNER_EXE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/MantidPlot CACHE FILEPATH - "MantidPlot executable to use to build the documentation" ) + # runner + set ( DOCS_RUNNER_EXE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/MantidPlot ) # HTML target set ( BUILDER html ) configure_file ( runsphinx.py.in runsphinx_html.py @ONLY ) add_custom_target ( ${TARGET_PREFIX}-html COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_html.py + DEPENDS ${FRAMEWORK_LIBS} COMMENT "Building html documentation" ) # Group within VS and exclude from whole build @@ -32,6 +32,7 @@ if ( SPHINX_FOUND ) configure_file ( runsphinx.py.in runsphinx_doctest.py @ONLY ) add_custom_target ( ${TARGET_PREFIX}-test COMMAND ${DOCS_RUNNER_EXE} -xq runsphinx_doctest.py + DEPENDS ${FRAMEWORK_LIBS} COMMENT "Running documentation tests" ) # Group within VS and exclude from whole build From b728fafdbc08ec5f55fc8d788e1338379b8f3a03 Mon Sep 17 00:00:00 2001 From: Martyn Gigg Date: Tue, 3 Jun 2014 18:46:50 +0100 Subject: [PATCH 85/86] PlotAsymmetryByLogValue will need Muon files in same directory. Also removes some of the MUSR files that are not actually used in the tests anywhere. Refs #9562 --- .../Framework/API/test/FileFinderTest.h | 14 +++++++------- .../test/IO_MuonGroupingTest.h | 2 +- .../test/MuonAnalysisHelperTest.h | 4 ++-- Test/AutoTestData/MUSR00015194.nxs | Bin 1099209 -> 0 bytes Test/AutoTestData/MUSR00015195.nxs | Bin 1099097 -> 0 bytes Test/AutoTestData/MUSR00015196.nxs | Bin 1099065 -> 0 bytes Test/AutoTestData/MUSR00015197.nxs | Bin 1099225 -> 0 bytes Test/AutoTestData/MUSR00015198.nxs | Bin 1099089 -> 0 bytes Test/AutoTestData/MUSR00015199.nxs | Bin 1099073 -> 0 bytes .../{ => UsageData}/MUSR00015190.nxs | Bin .../{ => UsageData}/MUSR00015191.nxs | Bin .../{ => UsageData}/MUSR00015192.nxs | Bin .../{ => UsageData}/MUSR00015193.nxs | Bin 13 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 Test/AutoTestData/MUSR00015194.nxs delete mode 100644 Test/AutoTestData/MUSR00015195.nxs delete mode 100644 Test/AutoTestData/MUSR00015196.nxs delete mode 100644 Test/AutoTestData/MUSR00015197.nxs delete mode 100644 Test/AutoTestData/MUSR00015198.nxs delete mode 100644 Test/AutoTestData/MUSR00015199.nxs rename Test/AutoTestData/{ => UsageData}/MUSR00015190.nxs (100%) rename Test/AutoTestData/{ => UsageData}/MUSR00015191.nxs (100%) rename Test/AutoTestData/{ => UsageData}/MUSR00015192.nxs (100%) rename Test/AutoTestData/{ => UsageData}/MUSR00015193.nxs (100%) diff --git a/Code/Mantid/Framework/API/test/FileFinderTest.h b/Code/Mantid/Framework/API/test/FileFinderTest.h index 9d4d575d5da2..773ca334b630 100644 --- a/Code/Mantid/Framework/API/test/FileFinderTest.h +++ b/Code/Mantid/Framework/API/test/FileFinderTest.h @@ -234,13 +234,13 @@ class FileFinderTest: public CxxTest::TestSuite { ConfigService::Instance().setString("default.facility","ISIS"); std::vector files; - TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15189-n15199"), std::invalid_argument); - TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15189n-15199"), std::invalid_argument); - TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15189-15199n"), std::invalid_argument); - TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15189-151n99"), std::invalid_argument); - TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15n189-151n99"), Exception::NotFoundError); - TS_ASSERT_THROWS_NOTHING(files = FileFinder::Instance().findRuns("MUSR15189-15199")); - TS_ASSERT_EQUALS(files.size(), 11); + TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15189-n15193"), std::invalid_argument); + TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15189n-15193"), std::invalid_argument); + TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15189-15193n"), std::invalid_argument); + TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15189-151n93"), std::invalid_argument); + TS_ASSERT_THROWS(files = FileFinder::Instance().findRuns("MUSR15n189-151n93"), Exception::NotFoundError); + TS_ASSERT_THROWS_NOTHING(files = FileFinder::Instance().findRuns("MUSR15189-15193")); + TS_ASSERT_EQUALS(files.size(), 5); std::vector::iterator it = files.begin(); for (; it != files.end(); ++it) diff --git a/Code/Mantid/MantidQt/CustomInterfaces/test/IO_MuonGroupingTest.h b/Code/Mantid/MantidQt/CustomInterfaces/test/IO_MuonGroupingTest.h index 8ca50664290b..557240b09b5a 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/test/IO_MuonGroupingTest.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/test/IO_MuonGroupingTest.h @@ -128,7 +128,7 @@ class IO_MuonGroupingTest : public CxxTest::TestSuite IAlgorithm_sptr loadAlg = AlgorithmManager::Instance().create("LoadMuonNexus"); loadAlg->setChild(true); // So outptu ws don't end up in the ADS loadAlg->initialize(); - loadAlg->setPropertyValue("Filename", m_testDataDir + "MUSR00015189.nxs"); + loadAlg->setPropertyValue("Filename", "MUSR00015189.nxs"); loadAlg->setPropertyValue("OutputWorkspace", "data"); // Is not used, just for validator loadAlg->execute(); diff --git a/Code/Mantid/MantidQt/CustomInterfaces/test/MuonAnalysisHelperTest.h b/Code/Mantid/MantidQt/CustomInterfaces/test/MuonAnalysisHelperTest.h index 27a49b14004f..e6c36afa0ec8 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/test/MuonAnalysisHelperTest.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/test/MuonAnalysisHelperTest.h @@ -51,13 +51,13 @@ class MuonAnalysisHelperTest : public CxxTest::TestSuite { std::vector list; - for (int i = 15189; i <= 15199; ++i) + for (int i = 15189; i <= 15193; ++i) { list.push_back(createWs("MUSR", i)); } std::string label = getRunLabel(list); - TS_ASSERT_EQUALS(label, "MUSR00015189-99"); + TS_ASSERT_EQUALS(label, "MUSR00015189-93"); } void test_getRunLabel_wsList_wrongOrder() diff --git a/Test/AutoTestData/MUSR00015194.nxs b/Test/AutoTestData/MUSR00015194.nxs deleted file mode 100644 index 83cb5e28995b9605089a625762395d2dc2847fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1099209 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