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
- Dynamic dialog properties
- Writing a Custom ConvertToMD Transformation
- ISIS Energy Transfer Tab