\chapter{Introduction}

\section{Scope of this manual}

The User's Guide for Toolkit Developers provides detailed information about 
the design of Geant4 classes as well as the information required to extend 
the current functionality of the Geant4 toolkit.  This manual is designed
to:  

\begin{itemize}
  \item provide a repository of information for those who want to 
        understand or refer to the detailed design of the toolkit, and
 
  \item provide details and procedures for extending the functionality
        of the toolkit so that experienced users may contribute code 
        which is consistent with the overall design of Geant4.
\end{itemize}

This manual is intended for developers and experienced users of Geant4.  
It is assumed that the reader is already familiar with functionality of 
the Geant4 toolkit as explained in the ``User's Guide For Application 
Developers", and also has a working knowledge of programming using C++. 
A knowledge of object-oriented analysis and design will also be useful
in understanding this manual.  It is also useful to consult the 
``Software Reference Manual'' which provides a list of Geant4 classes
and their major methods. 

Detailed discussions of the physics included in Geant4 are provided in
the ``Physics Reference Manual''.


\section{How to use this manual}

{\bf Part I}: to understand the goal of the software design of Geant4, it 
is useful to begin by reading the User Requirements Document referred to 
in the next section. \\

{\bf Part II}, ``Design and Function of the Geant4 Categories'' provides 
detailed information about the design of each class category and the classes 
in it.  Before considering an extension of one of the toolkit categories, a 
detailed understanding of that category is required. \\

{\bf Part III}, ``Extending Toolkit Functionality'' explains in some detail 
how to extend the functionality of Geant4.  Most of the class categories
are covered and some, which are especially useful to most users, are
covered in greater detail. \\

It is not necessary to understand the entire manual before adding
a new functionality.  To add a new physics process, for example, only the
following items must be read and understood: 

\begin{itemize}
  \item the design principle described in the ``Physics processes'' 
        chapter of Part II
  \item techniques explained in the ``Physics processes'' chapter 
        of Part III.
\end{itemize}


\section{User Requirements Document}

At the beginning of Geant4 development, a set of user requirements was 
collected in order to inform the object-oriented analysis and design of
the toolkit.  The User Requirements Document follows the PSS-05 software 
engineering standards and is available at
\begin{verbatim}
   http://cern.ch/geant4/OOAandD/URD.pdf .
\end{verbatim}
This document provides a general description of the main capabilities and 
constraints of the toolkit.  It also defines three types of users 
characterized by their level of interaction with the system.  Specific 
requirements are also listed and classified.

\section{Status of this chapter}

24.06.05 - re-organized and re-written by D.H. Wright \\
