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