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. 
- Using Local Mantid Build in Other Projects with Pixi
- How to set up a pixi environment to use a local Mantid build instead of conda packages in other projects. 
- 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,- valgrindand 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 - pippolicy.
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. 
- Unittest Monitor
- Monitor failing and flakey unittests from the Jenkins nightly pipelines. 
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