Introduction of the Copyright and cvs Log
[u/mrichter/AliRoot.git] / ITS / AliITS.h
CommitLineData
fe4da5cc 1#ifndef ITS_H
2#define ITS_H
58005f18 3////////////////////////////////////////////////////////////////////////
4// Manager and hits classes for set: ITS //
5////////////////////////////////////////////////////////////////////////
fe4da5cc 6
58005f18 7#include "TObjArray.h"
fe4da5cc 8#include "AliDetector.h"
58005f18 9#include "AliITSgeom.h"
10#include "AliITSdigit.h"
11#include "AliITSmodule.h"
fe4da5cc 12
13class AliITS : public AliDetector {
58005f18 14////////////////////////////////////////////////////////////////////////
15//
16// An overview of the basic philosophy of the ITS code development
17// and analysis is show in the figure below.
18//Begin_Html
19/*
a92b2b7d 20<img src="picts/ITS/ITS_Analysis_schema.gif">
58005f18 21</pre>
22<br clear=left>
23<font size=+2 color=red>
24<p>Roberto Barbera is in charge of the ITS Offline code (1999).
25<a href="mailto:roberto.barbera@ct.infn.it">Roberto Barbera</a>.
26</font>
27<pre>
28*/
29//End_Html
30//
31// Version: 0
32// Written by Rene Brun, Federico Carminati, and Roberto Barbera
33//
34// Version: 1
35// Modified and documented by Bjorn S. Nilsen
36// July 11 1999
37//
38// AliITS is the general base class for the ITS. Also see AliDetector for
39// futher information.
40//
41// Data members:
42//
43// AliITSgeom *fITSgeom
44// All of the geometry information about the active volumes that
45// make up the ITS are described in the AliITSgeom class. This includes
46// the transformation functions between the local and global coordinate
47// systems and the like. See the full description found in the AliITSgeom
48// class. Here in the AliITS class is kept the pointer to the geometry
49// used in the simulations or that thought to be the correct one for the
50// data. Until a more general class is define and a more appropriate
51// place is found to keep this geometry information, it is kept here in
52// AliITS.
53//
54// TObjArray *fITSpoints
55// This is a pointer to the points, to be used by the tracking algorithms
56// for example, found in the detectors of the ITS. To allow for the most
57// general points structure it is defined to be a pointer to a TObjArray where
58// each array element would be one point found in the ITS detectors. An
59// Addpoints function is defined below. By default an array of 16 TObjects are
60// defined during the initialization of AliITS. This is automatically expanded
61// when necessary by the Addpoints function.
62//
63// Bool_t fEuclidOut
64// This is a flag used to indicate that an Euclid compatible CAD
65// file will be created upon the creation of the ITS Monte Carlo
66// geometry definition, in the function CreatGeometry. If fEuclidOut is
67// true, then a file called ITSgeometry.euc will be created.
68//
69// Int_t fIdN
70// This variable contains the number of layers defined in the ITS
71// geometry. It is primarily used as a size indicator for fIdSens and
72// fIdName described below. In general the number of layers, ladders, or
73// detectors should be gotten from the AliITSgeom functions. Upon
74// creating the AliITS object it is set to zero.
75//
76// Int_t *fIdSens
77// This is a pointer to an array containing the Monte Carlo volume
78// numbers for the different layers of the ITS. These numbers are needed
79// by the StepManager function to determine what layer a hit was on. It
80// is sized and initialized in the Init function and the AliITSv? Init
81// function, called after a call to CreateGeometry. Upon creating the
82// AliITS object it points to zero. This variable is made a pointer
83// in order to keep the maximum flexibility at this level of the code.
84//
85// char **fIdName
86// This is a pointer to an array of characters containing the names of
87// the different ITS layers as defined in the Monte Carlo geometry data-
88// base. It is sized and filled in the AliITSv? Init function, called
89// after a call to CreatGeometry. Upon creating the AliITS object it
90// points to zero. This variable is make a pointer in order to keep the
91// maximum flexibility at this level of the code.
92//
93// Member Functions:
94//
95// AliITS()
96// The default constructor of the AliITS class. In addition to
97// creating the AliITS class it zeros the variables fIshunt (a member
98// of AliDetector class), fEuclidOut, and fIdN, and zeros the pointers
99// fITSpoints, fIdSens, and fIdName. The AliDetector default constructor
100// is also called.
101//
102// AliITS(const char *name, const char *title)
103// The constructor of the AliITS class. In addition to creating the
104// AliITS class, it allocates memory for the TClonesArrays fHits and
105// fDigits, and for the TObjArray fITSpoints. It also zeros the variables
106// fIshunt (a member of AliDetector class), fEuclidOut, and fIdN, and zeros
107// the pointers fIdSens and fIdName. To help in displaying hits via the ROOT
108// macro display.C AliITS also sets the marker color to red. The variables
109// passes with this constructor, const char *name and *title, are used by
110// the constructor of AliDetector class. See AliDetector class for a
111// description of these parameters and its constructor functions.
112//
113// ~AliITS()
114// The default destructor of the AliITS class. In addition to deleting
115// the AliITS class it deletes the memory pointed to by the fHits, fDigits,
116// fIdSens, fIdName, and fITSpoints.
117//
118// AddHit(Int_t track, Int_t *vol, Float_t *hits)
119// The function to add information to the AliITShit class. See the
120// AliITShit class for a full description. This function allocates the
121// necessary new space for the hit information and passes the variable
122// track, and the pointers *vol and *hits to the AliITShit constructor
123// function.
124//
125// AddDigit(Int_t *track, Int_t *digits)
126// The function to add information to the AliITSdigits class. See the
127// AliITSdigits class for a full description. This function allocates the
128// necessary new space for the digits information and passes the pointers
129// *track and *digits to the AliITSdigits constructor function.
130//
131// BuildGeometry()
132// This function builds a simple ITS geometry used by the ROOT macro
133// display.C. In general the geometry as coded is wrong.
134//
135// CreateGeometry()
136// This function builds the detailed geometry used by the Geant
137// Monte Carlo. As defined here it is a dummy routine to be replaced
138// by the version coded up in AliITSv? where the specific geometry to
139// be used by the simulation is defined. See the definition of AliITSv5
140// or the other routines for a complete definition.
141//
142// CreateMaterials()
143// This function defines the default materials used in the Geant
144// Monte Carlo simulations. In general it is automatically replaced by
145// the CreatMaterials routine defined in AliITSv?. Should the function
146// CreateMaterials not exist for the geometry version you are using this
147// one is used. See the definition found in AliITSv5 or the other routine
148// for a complete definition.
149//
150// IsVersion()
151// Returns the version number of the AliITS class. At present it is
152// version 1.
153//
154// DistancetoPrimitive(Int_t x, Int_t y)
155// A dummy routine used by the ROOT macro display.C to allow for the
156// use of the mouse (pointing device) in the macro. In general this should
157// never be called. If it is it returns the number 9999 for any value of
158// x and y.
159//
160// Init()
161// This routine initializes the AliITS class. It is intended to be called
162// from the Init function in AliITSv?. Besides displaying a banner
163// indicating that it has been called it initializes the array fIdSens.
164// Therefore it should be called after a call to CreateGeometry.
165//
166// MakeBranch(Option_t *Opt=" ")
167// Creates the TTree branch where the class AliITS is kept.
168//
169// SetEUCLID(bool_t euclid=1)
170// Sets the flag fEuclidOut to true (default) of false (euclid=0).
171// By setting or clearing the fEuclidOut flag you can controls whether
172// or not a euclid formatted output file of the ITS geometry is written.
173// If fEuclidOut is set true then a file called ITSgeometry.euc will be
174// written after the ITS geometry is defined in the Monte Carlo. If
175// fEuclidOut is set false then no file is created.
176//
177// StepManager()
178// Dummy routine which is replaced by the routine StepManager() defined
179// in AliITSv?. If no such routine exist then this routine returns zero.
180// See AliITSv? for a detailed description of the step manager routines.
181//
182// GetITSgeom()
183// Returns the value of the pointer fITSgeom. This is used to get
184// access to the ITS geometry stored in the file. See AliITSgeom for a
185// full description of the geometry package.
186//
187// GetITSpoints()
188// Returns the value of the pointer fITSpoints. This is used to get
189// access to the ITS cluster objects, if filled, stored in the file. See
190// AliITSCluster for a full description of the cluster data.
191////////////////////////////////////////////////////////////////////////
192 protected:
193 AliITSgeom *fITSgeom; // Pointer to ITS geometry
194 TObjArray *fITSmodules; // Pointer to ITS modules
195 // Defined here since it doesn't have a place in AliDetector like fDigit
196 TObjArray *fITSpoints; // Pointer to ITS points
fe4da5cc 197
58005f18 198 Bool_t fEuclidOut; // Flag to write out geometry in euclid format
199 Int_t fIdN; // the number of layers
200 Int_t *fIdSens; char **fIdName; //layer identifier
201 // Geometry and Stepmanager version numbers used.
202 Int_t fMajorVersion,fMinorVersion;
203
204 public:
205 AliITS();
206 AliITS(const char *name, const char *title);
207 virtual ~AliITS();
208
209 virtual void AddHit(Int_t, Int_t*, Float_t*);
210 virtual void AddDigit(Int_t*, Int_t*);
211 virtual Int_t AddDigit(AliITSdigit *d);
212// virtual void AddPoint(); // yet to be defined
213
214 virtual void BuildGeometry();
215 virtual void CreateGeometry() {};
216 virtual void CreateMaterials();
217
218 inline virtual TObjArray* GetModules() {return fITSmodules;}
219 inline virtual TObjArray* GetPoints(){return fITSpoints;}
220
221 inline void GetGeometryVersion(Int_t &a,Int_t &b)
222 {a = fMajorVersion;b=fMinorVersion;return;}
223 inline virtual Int_t IsVersion() {return 1;}
224 Int_t DistancetoPrimitive(Int_t px, Int_t py);
225 virtual void Init();
226 virtual void MakeBranch(Option_t *opt=" ");
227 inline virtual void SetEUCLID(Bool_t euclid=1){fEuclidOut = euclid;}
228 virtual void StepManager()=0;
229 //
230 // ITS geometry functions
231 inline virtual AliITSgeom *GetITSgeom(){return fITSgeom;}
232 inline virtual TObjArray *GetITSpoints(){return fITSpoints;}
233
234 ClassDef(AliITS,1)
fe4da5cc 235};
fe4da5cc 236#endif