Developer Documentation¶
These pages contain the developer documentation for mantid. They are aimed at those who are modifying the source code of the project. For user documentation please see here.
Guides¶
- Developer Accounts
Details of the accounts required for developers.
- Getting Started
Describes the process of obtaining and building the mantid code base.
- Packaging
Describes the process building the user packages.
- Architecture
Describes the architecture of the mantid libraries and applications.
- Standards
Details of coding and documentation standards for the project. Includes specifics regarding algorithms.
- Manual Testing
Details of manual and acceptance/smoke testing.
- Doxygen Setup
Configure a doxygen build locally.
- New Starter C++
Exercises for learning C++.
- New Starter Python
Exercises for learning Python.
Development Process¶
- Development and Release Cycle
An overview of the development cycle.
- Communication
Details various methods of communication used within the team.
- Mantid Issue Tracking
Describes how issues are tracked over the project.
- User Support
Procedures for User Problems to be tested and passed to the Development Team.
- Mantid Git Workflow
Details the workflow used development with git and GitHub.
- The Automated Build Process
Details the interaction of pull requests with the Jenkins CI builds.
- Jenkins Configuration
Describes the setup of Jenkins system and how to add a new slave.
- Release Checklist
How to perform a full release of Mantid.
- Patch Release Checklist
How to perform a patch release of Mantid.
- Technical Steering Committee
Overview of the role of the technical steering committee.
- Design Document Guidelines
When and how to write a good design document.
Tools¶
- Tools Overview
Describes
class_maker
,valgrind
and related tools.- Profiling Overview
There are a few different ways to profile Mantid code.
- Mantid Timers
Describes different ways of timing Mantid C++ code.
- Flowchart Creation
Describes how to create a flow chart with dot.
- Visual Studio Build Impact
Provides a script to reduce the impact of Visual Studio on machine performance.
- PyCharm
Describes how to set up the PyCharm interpreter, and debug python code (Windows/Linux only).
- CLion
Describes how to set up CLion to build and debug using a Ninja generator (Windows/Linux only).
- VSCode
Guide to using VSCode for C++ with Mantid.
- Eclipse on Ubuntu
Guide to setting up Eclipse on Ubuntu
- Windows Subsystem for Linux (WSL2)
Guide for setting up Ubuntu 18.04 and Centos7 as subsystems on Windows (WSL2).
- Obtaining a Benchmark for Mantid Fitting
Guide for setting up an environment to perform a benchmark of Mantid fitting minimizers.
- Conda Package Manager
Guide on how to use the Conda package manager in Mantid, including tips and a
pip
policy.
Testing¶
- Running the Unit Tests
Details on how to run the suite of unit tests.
- Debugging Unit Tests
Details on how to debug the suite of unit tests.
- Unit Test Good Practice
Guidance on writing good unit tests.
- Reviewing a Pull Request
What to do when reviewing an individual contribution to mantid.
- Gatekeeping a Pull Request
Things to consider when merging a pull request to the main production branch.
- Writing Performance Tests
A walk through of how to write a performance test.
- System Tests
Guidance on working with the system tests.
- Data Files for Testing
How to work with test data files in the mantid repository.
- Testing Utilities
Helper utlities used for testing.
- Running Sanitizers
How to run the various sanitizers locally.
GUI Development¶
- MVP Design
Gives some guidelines to consider when developing a new graphical user interface.
- MVP Tutorial
A hands-on tutorial on how to implement a user GUI using the Model-View-Presenter (MVP) pattern.
- Qt Designer for Python
Describes how to use the Qt designer to produce GUI views.
- Mockups with Balsamiq Wireframes
An introduction to mockups with Balsamiq Wireframes.
- Mantid Icon Table
The currently used Icons in Mantid and what they are used for.
- ISIS Reflectometry Interface
An example of a complex C++ interface that uses MVP.
Workbench¶
The workbench is the new PyQt-based GUI that will be the primary interface for interacting with the mantid framework. The plotting is provided by matplotlib. It has replaced MantidPlot.
- Workbench Documentation
The Index of the workbench specific files.
Component Overviews¶
- Batch Widget Manual
- EnumeratedString
- What is EnumeratedStringProperty?
- How to use the EnumeratedStringProperty
- Example Use of EnumeratedString
- Event Workspace Development
- Handling XML
- Index Property
- Adding a new fitting function to IDA
- IndirectDataAnalysis File Structure
- Fit Tab structure
- QENS Fit class structure
- Inelastic Data Processor Class Structure
- Instrument Viewer Widget
- ISIS Reflectometry Interface
- ISIS SANS Reduction Back-end
- Load Algorithm Hook
- Logging
- Matplotlib in C++
- Multithreading in Mantid
- Python vs C++ Algorithms
- Sample Logs
- Script Repository
- Plotting (Elemental Analysis)
- Writing An Algorithm
- Writing a Custom ConvertToMD Transformation
- ISIS Energy Transfer Tab