Fixed problem with display.C and ITS versions v1 and v3.
authornilsen <nilsen@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 May 2000 19:57:30 +0000 (19:57 +0000)
committernilsen <nilsen@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 May 2000 19:57:30 +0000 (19:57 +0000)
ITS/AliITS.cxx
ITS/AliITS.h
ITS/AliITSv1.cxx
ITS/AliITSv1.h
ITS/AliITSv3.cxx
ITS/AliITSv3.h
ITS/AliITSv5.cxx
ITS/AliITSv5.h

index 2647205..ddedc67 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
+Revision 1.10  2000/01/19 17:16:51  fca
+Introducing a list of lists of hits -- more hits allowed for detector now
+
 Revision 1.9  1999/11/14 14:33:25  fca
 Correct problems with distructors and pointers, thanks to I.Hrivnacova
 
@@ -85,7 +88,185 @@ the AliITS class.
 #include "AliRun.h"
 
 ClassImp(AliITS)
+
+////////////////////////////////////////////////////////////////////////
+//
+//      An overview of the basic philosophy of the ITS code development
+// and analysis is show in the figure below.
+//Begin_Html
+/*
+<img src="picts/ITS/ITS_Analysis_schema.gif">
+</pre>
+<br clear=left>
+<font size=+2 color=red>
+<p>Roberto Barbera is in charge of the ITS Offline code (1999).
+<a href="mailto:roberto.barbera@ct.infn.it">Roberto Barbera</a>.
+</font>
+<pre>
+*/
+//End_Html
+//
+// Version: 0
+// Written by Rene Brun, Federico Carminati, and Roberto Barbera
+//
+// Version: 1
+// Modified and documented by Bjorn S. Nilsen
+// July 11 1999
+//
+// AliITS is the general base class for the ITS. Also see AliDetector for
+// futher information.
+//
+// Data members:
+//
+// AliITSgeom *fITSgeom
+//     All of the geometry information about the active volumes that
+// make up the ITS are described in the AliITSgeom class. This includes
+// the transformation functions between the local and global coordinate
+// systems and the like. See the full description found in the AliITSgeom
+// class. Here in the AliITS class is kept the pointer to the geometry
+// used in the simulations or that thought to be the correct one for the
+// data. Until a more general class is define and a more appropriate
+// place is found to keep this geometry information, it is kept here in
+// AliITS.
+//
+// TObjArray *fITSpoints
+//     This is a pointer to the points, to be used by the tracking algorithms
+// for example, found in the detectors of the ITS. To allow for the most
+// general points structure it is defined to be a pointer to a TObjArray where
+// each array element would be one point found in the ITS detectors. An
+// Addpoints function is defined below. By default an array of 16 TObjects are
+// defined during the initialization of AliITS. This is automatically expanded
+// when necessary by the Addpoints function.
+//
+// Bool_t fEuclidOut
+//     This is a flag used to indicate that an Euclid compatible CAD
+// file will be created upon the creation of the ITS Monte Carlo
+// geometry definition, in the function CreatGeometry. If fEuclidOut is
+// true, then a file called ITSgeometry.euc will be created.
+//
+// Int_t fIdN
+//     This variable contains the number of layers defined in the ITS
+// geometry. It is primarily used as a size indicator for fIdSens and
+// fIdName described below. In general the number of layers, ladders, or
+// detectors should be gotten from the AliITSgeom functions. Upon
+// creating the AliITS object it is set to zero.
+//
+// Int_t *fIdSens
+//     This is a pointer to an array containing the Monte Carlo volume
+// numbers for the different layers of the ITS. These numbers are needed
+// by the StepManager function to determine what layer a hit was on. It
+// is sized and initialized in the Init function and the AliITSv? Init
+// function, called after a call to CreateGeometry. Upon creating the
+// AliITS object it points to zero. This variable is made a pointer
+// in order to keep the maximum flexibility at this level of the code.
+//
+// char **fIdName
+//     This is a pointer to an array of characters containing the names of
+// the different ITS layers as defined in the Monte Carlo geometry data-
+// base. It is sized and filled in the AliITSv? Init function, called
+// after a call to CreatGeometry. Upon creating the AliITS object it
+// points to zero. This variable is make a pointer in order to keep the
+// maximum flexibility at this level of the code.
+//
+// Member Functions:
+//
+// AliITS()
+//     The default constructor of the AliITS class. In addition to
+// creating the AliITS class it zeros the variables fIshunt (a member
+// of AliDetector class), fEuclidOut, and fIdN, and zeros the pointers
+// fITSpoints, fIdSens, and fIdName. The AliDetector default constructor
+// is also called.
+//
+// AliITS(const char *name, const char *title)
+//     The constructor of the AliITS class. In addition to creating the
+// AliITS class, it allocates memory for the TClonesArrays fHits and
+// fDigits, and for the TObjArray fITSpoints. It also zeros the variables
+// fIshunt (a member of AliDetector class), fEuclidOut, and fIdN, and zeros
+// the pointers fIdSens and fIdName. To help in displaying hits via the ROOT
+// macro display.C AliITS also sets the marker color to red. The variables
+// passes with this constructor, const char *name and *title, are used by
+// the constructor of AliDetector class. See AliDetector class for a
+// description of these parameters and its constructor functions.
+//
+// ~AliITS()
+//     The default destructor of the AliITS class. In addition to deleting
+// the AliITS class it deletes the memory pointed to by the fHits, fDigits,
+// fIdSens, fIdName, and fITSpoints.
+//
+// AddHit(Int_t track, Int_t *vol, Float_t *hits)
+//     The function to add information to the AliITShit class. See the
+// AliITShit class for a full description. This function allocates the
+// necessary new space for the hit information and passes the variable
+// track, and the pointers *vol and *hits to the AliITShit constructor
+// function.
+//
+// AddDigit(Int_t *track, Int_t *digits)
+//     The function to add information to the AliITSdigits class. See the
+// AliITSdigits class for a full description. This function allocates the
+// necessary new space for the digits information and passes the pointers
+// *track and *digits to the AliITSdigits constructor function.
+//
+// BuildGeometry()
+//     This function builds a simple ITS geometry used by the ROOT macro
+// display.C. In general the geometry as coded is wrong.
+//
+// CreateGeometry()
+//     This function builds the detailed geometry used by the Geant
+// Monte Carlo. As defined here it is a dummy routine to be replaced
+// by the version coded up in AliITSv? where the specific geometry to
+// be used by the simulation is defined. See the definition of AliITSv5
+// or the other routines for a complete definition.
+//
+// CreateMaterials()
+//     This function defines the default materials used in the Geant
+// Monte Carlo simulations. In general it is automatically replaced by
+// the CreatMaterials routine defined in AliITSv?. Should the function
+// CreateMaterials not exist for the geometry version you are using this
+// one is used. See the definition found in AliITSv5 or the other routine
+// for a complete definition.
+//
+// IsVersion()
+//     Returns the version number of the AliITS class. At present it is
+// version 1.
+//
+// DistancetoPrimitive(Int_t x, Int_t y)
+//     A dummy routine used by the ROOT macro display.C to allow for the
+// use of the mouse (pointing device) in the macro. In general this should
+// never be called. If it is it returns the number 9999 for any value of
+// x and y.
+//
+// Init()
+//     This routine initializes the AliITS class. It is intended to be called
+// from the Init function in AliITSv?. Besides displaying a banner
+// indicating that it has been called it initializes the array fIdSens.
+// Therefore it should be called after a call to CreateGeometry.
+//
+// MakeBranch(Option_t *Opt=" ")
+//     Creates the TTree branch where the class AliITS is kept.
+//
+// SetEUCLID(bool_t euclid=1)
+//     Sets the flag fEuclidOut to true (default) of false (euclid=0).
+// By setting or clearing the fEuclidOut flag you can controls whether
+// or not a euclid formatted output file of the ITS geometry is written.
+// If fEuclidOut is set true then a file called ITSgeometry.euc will be
+// written after the ITS geometry is defined in the Monte Carlo. If
+// fEuclidOut is set false then no file is created.
+//
+// StepManager()
+//     Dummy routine which is replaced by the routine StepManager() defined
+// in AliITSv?. If no such routine exist then this routine returns zero.
+// See AliITSv? for a detailed description of the step manager routines.
+//
+// GetITSgeom()
+//     Returns the value of the pointer fITSgeom. This is used to get
+// access to the ITS geometry stored in the file. See AliITSgeom for a
+// full description of the geometry package.
+//
+// GetITSpoints()
+//     Returns the value of the pointer fITSpoints. This is used to get
+// access to the ITS cluster objects, if filled, stored in the file. See
+// AliITSCluster for a full description of the cluster data.
+////////////////////////////////////////////////////////////////////////
 //_____________________________________________________________________________
 AliITS::AliITS() {
   //
@@ -185,236 +366,6 @@ void AliITS::AddHit(Int_t track, Int_t *vol, Float_t *hits){
   new(lhits[fNhits++]) AliITShit(fIshunt,track,vol,hits);
 }
 //_____________________________________________________________________________
-void AliITS::BuildGeometry(){
-  //
-  // Build ITS TNODE geometry for event display
-  //     This function builds a simple ITS geometry used by the ROOT macro
-  // display.C. In general the geometry as coded is wrong.
-  //
-  TNode *Node, *Top;
-  const int kColorITS=kYellow;
-  //
-  Top=gAlice->GetGeometry()->GetNode("alice");
-
-  new TTUBE("S_layer1","Layer1 of ITS","void",3.9,3.9+0.05475,12.25);
-  Top->cd();
-  Node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
-  Node->SetLineColor(kColorITS);
-  fNodes->Add(Node);
-
-  new TTUBE("S_layer2","Layer2 of ITS","void",7.6,7.6+0.05475,16.3);
-  Top->cd();
-  Node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
-  Node->SetLineColor(kColorITS);
-  fNodes->Add(Node);
-
-  new TTUBE("S_layer3","Layer3 of ITS","void",14,14+0.05288,21.1);
-  Top->cd();
-  Node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
-  Node->SetLineColor(kColorITS);
-  fNodes->Add(Node);
-
-  new TTUBE("S_layer4","Layer4 of ITS","void",24,24+0.05288,29.6);
-  Top->cd();
-  Node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
-  Node->SetLineColor(kColorITS);
-  fNodes->Add(Node);
-
-  new TTUBE("S_layer5","Layer5 of ITS","void",40,40+0.05382,45.1);
-  Top->cd();
-  Node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
-  Node->SetLineColor(kColorITS);
-  fNodes->Add(Node);
-
-  new TTUBE("S_layer6","Layer6 of ITS","void",45,45+0.05382,50.4);
-  Top->cd();
-  Node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
-  Node->SetLineColor(kColorITS);
-  fNodes->Add(Node);
-}
-//_____________________________________________________________________________
-void AliITS::CreateMaterials(){
-  //
-  // Create ITS materials
-  //     This function defines the default materials used in the Geant
-  // Monte Carlo simulations. In general it is automatically replaced by
-  // the CreatMaterials routine defined in AliITSv?. Should the function
-  // CreateMaterials not exist for the geometry version you are using this
-  // one is used. See the definition found in AliITSv5 or the other routine
-  // for a complete definition.
-  //
-  // Water H2O
-  Float_t awat[2]  = { 1.00794,15.9994 };
-  Float_t zwat[2]  = { 1.,8. };
-  Float_t wwat[2]  = { 2.,1. };
-  Float_t denswat  = 1.;
-  // Freon
-  Float_t afre[2]  = { 12.011,18.9984032 };
-  Float_t zfre[2]  = { 6.,9. };
-  Float_t wfre[2]  = { 5.,12. };
-  Float_t densfre  = 1.5;
-  // Ceramics
-  //     94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3 
-  Float_t acer[5]  = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
-  Float_t zcer[5]  = { 13.,8.,14.,25.,     24. };
-  Float_t wcer[5]  = { .49976,1.01233,.01307,      .01782,.00342 };
-  Float_t denscer  = 3.6;
-  //
-  //     60% SiO2 , 40% G10FR4 
-  // PC board
-  Float_t apcb[3]  = { 28.0855,15.9994,17.749 };
-  Float_t zpcb[3]  = { 14.,8.,8.875 };
-  Float_t wpcb[3]  = { .28,.32,.4 };
-  Float_t denspcb  = 1.8;
-  // POLYETHYL
-  Float_t apoly[2] = { 12.01,1. };
-  Float_t zpoly[2] = { 6.,1. };
-  Float_t wpoly[2] = { .33,.67 };
-  // SERVICES
-  Float_t zserv[4] = { 1.,6.,26.,29. };
-  Float_t aserv[4] = { 1.,12.,55.8,63.5 };
-  Float_t wserv[4] = { .014,.086,.42,.48 };
-  
-  Int_t  ISXFLD  = gAlice->Field()->Integ();
-  Float_t SXMGMX = gAlice->Field()->Max();
-  
-  
-  // --- Define the various materials for GEANT --- 
-  
-  //  200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
-  
-  AliMaterial(0, "SPD Si$",      28.0855, 14., 2.33, 9.36, 999);
-  AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999);
-  AliMaterial(2, "SPD Si bus$",  28.0855, 14., 2.33, 9.36, 999);
-  AliMaterial(3, "SPD C$",       12.011,   6., 2.265,18.8, 999);
-  // v. dens 
-  AliMaterial(4, "SPD Air$",    14.61, 7.3, .001205, 30423., 999);
-  AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
-  AliMaterial(6, "SPD Al$",     26.981539, 13., 2.6989, 8.9, 999);
-  AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
-  AliMixture( 8, "SPD Freon$",  afre, zfre, densfre, -2, wfre);
-  // ** 
-  AliMedium(0, "SPD Si$",      0, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(1, "SPD Si chip$", 1, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(2, "SPD Si bus$",  2, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(3, "SPD C$",       3, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(4, "SPD Air$",     4, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(5, "SPD Vacuum$",  5, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
-  AliMedium(6, "SPD Al$",      6, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(7, "SPD Water $",  7, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(8, "SPD Freon$",   8, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  
-  //  225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
-  
-  AliMaterial(25, "SDD Si$",      28.0855, 14., 2.33,  9.36, 999);
-  AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33,  9.36, 999);
-  AliMaterial(27, "SDD Si bus$",  28.0855, 14., 2.33,  9.36, 999);
-  AliMaterial(28, "SDD C$",       12.011,   6., 2.265,18.8,  999);
-  // v. dens 
-  AliMaterial(29, "SDD Air$",     14.61, 7.3, .001205, 30423., 999);
-  AliMaterial(30, "SDD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16,  1e16);
-  AliMaterial(31, "SDD Al$",      26.981539, 13., 2.6989, 8.9, 999);
-  // After a call with ratios by number (negative number of elements), 
-  // the ratio array is changed to the ratio by weight, so all successive 
-  // calls with the same array must specify the number of elements as 
-  // positive 
-  AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
-  // After a call with ratios by number (negative number of elements), 
-  // the ratio array is changed to the ratio by weight, so all successive 
-  // calls with the same array must specify the number of elements as 
-  // positive 
-  AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
-  AliMixture( 34, "SDD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
-  AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999);
-  AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
-  AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999);
-  // ** 
-  // check A and Z 
-  AliMedium(25, "SDD Si$",      25, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(26, "SDD Si chip$", 26, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(27, "SDD Si bus$",  27, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(28, "SDD C$",       28, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(29, "SDD Air$",     29, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(30, "SDD Vacuum$",  30, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
-  AliMedium(31, "SDD Al$",      31, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(32, "SDD Water $",  32, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(33, "SDD Freon$",   33, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(34, "SDD PCB$",     34, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(35, "SDD Copper$",  35, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(36, "SDD Ceramics$",36, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(37, "SDD Kapton$",  37, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  
-  //  250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
-  
-  AliMaterial(50, "SSD Si$",      28.0855, 14., 2.33, 9.36, 999.);
-  AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
-  AliMaterial(52, "SSD Si bus$",  28.0855, 14., 2.33, 9.36, 999.);
-  AliMaterial(53, "SSD C$",       12.011,   6., 2.265,18.8, 999.);
-  // v. dens 
-  AliMaterial(54, "SSD Air$",     14.61, 7.3, .001205, 30423., 999);
-  AliMaterial(55, "SSD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16, 1e16);
-  AliMaterial(56, "SSD Al$",      26.981539, 13., 2.6989, 8.9, 999);
-  // After a call with ratios by number (negative number of elements), 
-  // the ratio array is changed to the ratio by weight, so all successive 
-  // calls with the same array must specify the number of elements as 
-  // positive 
-  AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
-  // After a call with ratios by number (negative number of elements), 
-  // the ratio array is changed to the ratio by weight, so all successive 
-  // calls with the same array must specify the number of elements as 
-  // positive 
-  AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
-  AliMixture(59, "SSD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
-  AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
-  // After a call with ratios by number (negative number of elements), 
-  // the ratio array is changed to the ratio by weight, so all successive 
-  // calls with the same array must specify the number of elements as 
-  // positive 
-  AliMixture( 61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
-  AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
-  // check A and Z 
-  AliMaterial(63, "SDD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
-  // ** 
-  AliMedium(50, "SSD Si$",      50, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(51, "SSD Si chip$", 51, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(52, "SSD Si bus$",  52, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(53, "SSD C$",       53, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(54, "SSD Air$",     54, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(55, "SSD Vacuum$",  55, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
-  AliMedium(56, "SSD Al$",      56, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(57, "SSD Water $",  57, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(58, "SSD Freon$",   58, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(59, "SSD PCB$",     59, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(60, "SSD Copper$",  60, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(61, "SSD Ceramics$",61, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(62, "SSD Kapton$",  62, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(63, "SSD G10FR4$",  63, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  
-  //     275-299 --> General (end-caps, frames, cooling, cables, etc.) 
-  
-  AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
-  // verify density 
-  AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999);
-  AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
-  AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
-  AliMixture( 79, "GEN SERVICES$",  aserv, zserv, 4.68, 4, wserv);
-  AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
-  // After a call with ratios by number (negative number of elements), 
-  // the ratio array is changed to the ratio by weight, so all successive 
-  // calls with the same array must specify the number of elements as 
-  // positive 
-  AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
-  // ** 
-  AliMedium(75,"GEN C$",        75, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(76,"GEN Air$",      76, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(77,"GEN Vacuum$",   77, 0,ISXFLD,SXMGMX, 10., .10, .1, .100,10.00);
-  AliMedium(78,"GEN POLYETHYL$",78, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(79,"GEN SERVICES$", 79, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(80,"GEN Copper$",   80, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-  AliMedium(81,"GEN Water $",   81, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
-}
-
-//_____________________________________________________________________________
 Int_t AliITS::DistancetoPrimitive(Int_t , Int_t ){
   //
   // Distance from mouse to ITS on the screen. Dummy routine
index 201f326..7126758 100644 (file)
 #include "AliITSmodule.h"
 
 class AliITS : public AliDetector {
-////////////////////////////////////////////////////////////////////////
-//
-//      An overview of the basic philosophy of the ITS code development
-// and analysis is show in the figure below.
-//Begin_Html
-/*
-<img src="picts/ITS/ITS_Analysis_schema.gif">
-</pre>
-<br clear=left>
-<font size=+2 color=red>
-<p>Roberto Barbera is in charge of the ITS Offline code (1999).
-<a href="mailto:roberto.barbera@ct.infn.it">Roberto Barbera</a>.
-</font>
-<pre>
-*/
-//End_Html
-//
-// Version: 0
-// Written by Rene Brun, Federico Carminati, and Roberto Barbera
-//
-// Version: 1
-// Modified and documented by Bjorn S. Nilsen
-// July 11 1999
-//
-// AliITS is the general base class for the ITS. Also see AliDetector for
-// futher information.
-//
-// Data members:
-//
-// AliITSgeom *fITSgeom
-//     All of the geometry information about the active volumes that
-// make up the ITS are described in the AliITSgeom class. This includes
-// the transformation functions between the local and global coordinate
-// systems and the like. See the full description found in the AliITSgeom
-// class. Here in the AliITS class is kept the pointer to the geometry
-// used in the simulations or that thought to be the correct one for the
-// data. Until a more general class is define and a more appropriate
-// place is found to keep this geometry information, it is kept here in
-// AliITS.
-//
-// TObjArray *fITSpoints
-//     This is a pointer to the points, to be used by the tracking algorithms
-// for example, found in the detectors of the ITS. To allow for the most
-// general points structure it is defined to be a pointer to a TObjArray where
-// each array element would be one point found in the ITS detectors. An
-// Addpoints function is defined below. By default an array of 16 TObjects are
-// defined during the initialization of AliITS. This is automatically expanded
-// when necessary by the Addpoints function.
-//
-// Bool_t fEuclidOut
-//     This is a flag used to indicate that an Euclid compatible CAD
-// file will be created upon the creation of the ITS Monte Carlo
-// geometry definition, in the function CreatGeometry. If fEuclidOut is
-// true, then a file called ITSgeometry.euc will be created.
-//
-// Int_t fIdN
-//     This variable contains the number of layers defined in the ITS
-// geometry. It is primarily used as a size indicator for fIdSens and
-// fIdName described below. In general the number of layers, ladders, or
-// detectors should be gotten from the AliITSgeom functions. Upon
-// creating the AliITS object it is set to zero.
-//
-// Int_t *fIdSens
-//     This is a pointer to an array containing the Monte Carlo volume
-// numbers for the different layers of the ITS. These numbers are needed
-// by the StepManager function to determine what layer a hit was on. It
-// is sized and initialized in the Init function and the AliITSv? Init
-// function, called after a call to CreateGeometry. Upon creating the
-// AliITS object it points to zero. This variable is made a pointer
-// in order to keep the maximum flexibility at this level of the code.
-//
-// char **fIdName
-//     This is a pointer to an array of characters containing the names of
-// the different ITS layers as defined in the Monte Carlo geometry data-
-// base. It is sized and filled in the AliITSv? Init function, called
-// after a call to CreatGeometry. Upon creating the AliITS object it
-// points to zero. This variable is make a pointer in order to keep the
-// maximum flexibility at this level of the code.
-//
-// Member Functions:
-//
-// AliITS()
-//     The default constructor of the AliITS class. In addition to
-// creating the AliITS class it zeros the variables fIshunt (a member
-// of AliDetector class), fEuclidOut, and fIdN, and zeros the pointers
-// fITSpoints, fIdSens, and fIdName. The AliDetector default constructor
-// is also called.
-//
-// AliITS(const char *name, const char *title)
-//     The constructor of the AliITS class. In addition to creating the
-// AliITS class, it allocates memory for the TClonesArrays fHits and
-// fDigits, and for the TObjArray fITSpoints. It also zeros the variables
-// fIshunt (a member of AliDetector class), fEuclidOut, and fIdN, and zeros
-// the pointers fIdSens and fIdName. To help in displaying hits via the ROOT
-// macro display.C AliITS also sets the marker color to red. The variables
-// passes with this constructor, const char *name and *title, are used by
-// the constructor of AliDetector class. See AliDetector class for a
-// description of these parameters and its constructor functions.
-//
-// ~AliITS()
-//     The default destructor of the AliITS class. In addition to deleting
-// the AliITS class it deletes the memory pointed to by the fHits, fDigits,
-// fIdSens, fIdName, and fITSpoints.
-//
-// AddHit(Int_t track, Int_t *vol, Float_t *hits)
-//     The function to add information to the AliITShit class. See the
-// AliITShit class for a full description. This function allocates the
-// necessary new space for the hit information and passes the variable
-// track, and the pointers *vol and *hits to the AliITShit constructor
-// function.
-//
-// AddDigit(Int_t *track, Int_t *digits)
-//     The function to add information to the AliITSdigits class. See the
-// AliITSdigits class for a full description. This function allocates the
-// necessary new space for the digits information and passes the pointers
-// *track and *digits to the AliITSdigits constructor function.
-//
-// BuildGeometry()
-//     This function builds a simple ITS geometry used by the ROOT macro
-// display.C. In general the geometry as coded is wrong.
-//
-// CreateGeometry()
-//     This function builds the detailed geometry used by the Geant
-// Monte Carlo. As defined here it is a dummy routine to be replaced
-// by the version coded up in AliITSv? where the specific geometry to
-// be used by the simulation is defined. See the definition of AliITSv5
-// or the other routines for a complete definition.
-//
-// CreateMaterials()
-//     This function defines the default materials used in the Geant
-// Monte Carlo simulations. In general it is automatically replaced by
-// the CreatMaterials routine defined in AliITSv?. Should the function
-// CreateMaterials not exist for the geometry version you are using this
-// one is used. See the definition found in AliITSv5 or the other routine
-// for a complete definition.
-//
-// IsVersion()
-//     Returns the version number of the AliITS class. At present it is
-// version 1.
-//
-// DistancetoPrimitive(Int_t x, Int_t y)
-//     A dummy routine used by the ROOT macro display.C to allow for the
-// use of the mouse (pointing device) in the macro. In general this should
-// never be called. If it is it returns the number 9999 for any value of
-// x and y.
-//
-// Init()
-//     This routine initializes the AliITS class. It is intended to be called
-// from the Init function in AliITSv?. Besides displaying a banner
-// indicating that it has been called it initializes the array fIdSens.
-// Therefore it should be called after a call to CreateGeometry.
-//
-// MakeBranch(Option_t *Opt=" ")
-//     Creates the TTree branch where the class AliITS is kept.
-//
-// SetEUCLID(bool_t euclid=1)
-//     Sets the flag fEuclidOut to true (default) of false (euclid=0).
-// By setting or clearing the fEuclidOut flag you can controls whether
-// or not a euclid formatted output file of the ITS geometry is written.
-// If fEuclidOut is set true then a file called ITSgeometry.euc will be
-// written after the ITS geometry is defined in the Monte Carlo. If
-// fEuclidOut is set false then no file is created.
-//
-// StepManager()
-//     Dummy routine which is replaced by the routine StepManager() defined
-// in AliITSv?. If no such routine exist then this routine returns zero.
-// See AliITSv? for a detailed description of the step manager routines.
-//
-// GetITSgeom()
-//     Returns the value of the pointer fITSgeom. This is used to get
-// access to the ITS geometry stored in the file. See AliITSgeom for a
-// full description of the geometry package.
-//
-// GetITSpoints()
-//     Returns the value of the pointer fITSpoints. This is used to get
-// access to the ITS cluster objects, if filled, stored in the file. See
-// AliITSCluster for a full description of the cluster data.
-////////////////////////////////////////////////////////////////////////
+
  protected:
     AliITSgeom  *fITSgeom;    // Pointer to ITS geometry
     TObjArray   *fITSmodules; // Pointer to ITS modules
@@ -216,9 +39,9 @@ class AliITS : public AliDetector {
            virtual Int_t  AddDigit(AliITSdigit *d);
 //         virtual void   AddPoint(); // yet to be defined
 
-           virtual void   BuildGeometry();
+           virtual void   BuildGeometry() {};
            virtual void   CreateGeometry() {};
-           virtual void   CreateMaterials();
+           virtual void   CreateMaterials() {};
 
            virtual TObjArray* GetModules() const {return fITSmodules;}
            virtual TObjArray* GetPoints() const {return fITSpoints;}
index 7bdec32..ebb462e 100644 (file)
 
 /*
 $Log$
+Revision 1.15  2000/03/07 18:50:19  nilsen
+Merged ITS-working with HEAD. Improved some of the documentation and
+compatibility.
+
 Revision 1.14.2.1  2000/03/04 23:45:19  nilsen
 Fixed up the comments/documentation.
 
@@ -62,12 +66,17 @@ Introduction of the Copyright and cvs Log
 #include <TMath.h>
 #include <TRandom.h>
 #include <TVector.h>
+#include <TGeometry.h>
+#include <TNode.h>
+#include <TTUBE.h>
+
+#include "AliMC.h"
+#include "AliConst.h"
+
 #include "AliITShit.h"
 #include "AliITSv1.h"
 #include "AliRun.h"
 
-#include "AliMC.h"
-#include "AliConst.h"
 
 ClassImp(AliITSv1)
  
@@ -106,6 +115,48 @@ AliITSv1::~AliITSv1() {
 ////////////////////////////////////////////////////////////////////////
   delete [] fId1Name;
 }
+//__________________________________________________________________________
+void AliITSv1::BuildGeometry(){
+    TNode *Node, *Top;
+    const int kColorITS=kYellow;
+    //
+    Top = gAlice->GetGeometry()->GetNode("alice");
+
+    new TTUBE("S_layer1","Layer1 of ITS","void",3.9,3.9+0.05475,12.25);
+    Top->cd();
+    Node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
+    Node->SetLineColor(kColorITS);  fNodes->Add(Node);
+
+    new TTUBE("S_layer2","Layer2 of ITS","void",7.6,7.6+0.05475,16.3);
+    Top->cd();
+    Node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
+    Node->SetLineColor(kColorITS);
+    fNodes->Add(Node);
+
+    new TTUBE("S_layer3","Layer3 of ITS","void",14,14+0.05288,21.1);
+    Top->cd();
+    Node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
+    Node->SetLineColor(kColorITS);
+    fNodes->Add(Node);
+
+    new TTUBE("S_layer4","Layer4 of ITS","void",24,24+0.05288,29.6);
+    Top->cd();
+    Node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
+    Node->SetLineColor(kColorITS);  fNodes->Add(Node);
+
+    new TTUBE("S_layer5","Layer5 of ITS","void",40,40+0.05382,45.1);
+    Top->cd();
+    Node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
+    Node->SetLineColor(kColorITS);
+    fNodes->Add(Node);
+
+    new TTUBE("S_layer6","Layer6 of ITS","void",45,45+0.05382,50.4);
+    Top->cd();
+    Node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
+    Node->SetLineColor(kColorITS);
+    fNodes->Add(Node);
+
+}
 //_____________________________________________________________________________
 void AliITSv1::CreateGeometry(){
 ////////////////////////////////////////////////////////////////////////
@@ -490,9 +541,184 @@ void AliITSv1::CreateGeometry(){
 //_____________________________________________________________________________
 void AliITSv1::CreateMaterials(){
 ////////////////////////////////////////////////////////////////////////
-//     Create Materials for ITS as defined in AliITS::CreateMaterials().
-////////////////////////////////////////////////////////////////////////
-  AliITS::CreateMaterials();
+  //
+  // Create ITS materials
+  //     This function defines the default materials used in the Geant
+  // Monte Carlo simulations. In general it is automatically replaced by
+  // the CreatMaterials routine defined in AliITSv?. Should the function
+  // CreateMaterials not exist for the geometry version you are using this
+  // one is used. See the definition found in AliITSv5 or the other routine
+  // for a complete definition.
+  //
+  // Water H2O
+  Float_t awat[2]  = { 1.00794,15.9994 };
+  Float_t zwat[2]  = { 1.,8. };
+  Float_t wwat[2]  = { 2.,1. };
+  Float_t denswat  = 1.;
+  // Freon
+  Float_t afre[2]  = { 12.011,18.9984032 };
+  Float_t zfre[2]  = { 6.,9. };
+  Float_t wfre[2]  = { 5.,12. };
+  Float_t densfre  = 1.5;
+  // Ceramics
+  //     94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3 
+  Float_t acer[5]  = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
+  Float_t zcer[5]  = { 13.,8.,14.,25.,     24. };
+  Float_t wcer[5]  = { .49976,1.01233,.01307,      .01782,.00342 };
+  Float_t denscer  = 3.6;
+  //
+  //     60% SiO2 , 40% G10FR4 
+  // PC board
+  Float_t apcb[3]  = { 28.0855,15.9994,17.749 };
+  Float_t zpcb[3]  = { 14.,8.,8.875 };
+  Float_t wpcb[3]  = { .28,.32,.4 };
+  Float_t denspcb  = 1.8;
+  // POLYETHYL
+  Float_t apoly[2] = { 12.01,1. };
+  Float_t zpoly[2] = { 6.,1. };
+  Float_t wpoly[2] = { .33,.67 };
+  // SERVICES
+  Float_t zserv[4] = { 1.,6.,26.,29. };
+  Float_t aserv[4] = { 1.,12.,55.8,63.5 };
+  Float_t wserv[4] = { .014,.086,.42,.48 };
+  
+  Int_t  ISXFLD  = gAlice->Field()->Integ();
+  Float_t SXMGMX = gAlice->Field()->Max();
+  
+  
+  // --- Define the various materials for GEANT --- 
+  
+  //  200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
+  
+  AliMaterial(0, "SPD Si$",      28.0855, 14., 2.33, 9.36, 999);
+  AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999);
+  AliMaterial(2, "SPD Si bus$",  28.0855, 14., 2.33, 9.36, 999);
+  AliMaterial(3, "SPD C$",       12.011,   6., 2.265,18.8, 999);
+  // v. dens 
+  AliMaterial(4, "SPD Air$",    14.61, 7.3, .001205, 30423., 999);
+  AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
+  AliMaterial(6, "SPD Al$",     26.981539, 13., 2.6989, 8.9, 999);
+  AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
+  AliMixture( 8, "SPD Freon$",  afre, zfre, densfre, -2, wfre);
+  // ** 
+  AliMedium(0, "SPD Si$",      0, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(1, "SPD Si chip$", 1, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(2, "SPD Si bus$",  2, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(3, "SPD C$",       3, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(4, "SPD Air$",     4, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(5, "SPD Vacuum$",  5, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
+  AliMedium(6, "SPD Al$",      6, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(7, "SPD Water $",  7, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(8, "SPD Freon$",   8, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  
+  //  225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
+  
+  AliMaterial(25, "SDD Si$",      28.0855, 14., 2.33,  9.36, 999);
+  AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33,  9.36, 999);
+  AliMaterial(27, "SDD Si bus$",  28.0855, 14., 2.33,  9.36, 999);
+  AliMaterial(28, "SDD C$",       12.011,   6., 2.265,18.8,  999);
+  // v. dens 
+  AliMaterial(29, "SDD Air$",     14.61, 7.3, .001205, 30423., 999);
+  AliMaterial(30, "SDD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16,  1e16);
+  AliMaterial(31, "SDD Al$",      26.981539, 13., 2.6989, 8.9, 999);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
+  AliMixture( 34, "SDD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
+  AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999);
+  AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
+  AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999);
+  // ** 
+  // check A and Z 
+  AliMedium(25, "SDD Si$",      25, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(26, "SDD Si chip$", 26, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(27, "SDD Si bus$",  27, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(28, "SDD C$",       28, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(29, "SDD Air$",     29, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(30, "SDD Vacuum$",  30, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
+  AliMedium(31, "SDD Al$",      31, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(32, "SDD Water $",  32, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(33, "SDD Freon$",   33, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(34, "SDD PCB$",     34, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(35, "SDD Copper$",  35, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(36, "SDD Ceramics$",36, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(37, "SDD Kapton$",  37, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  
+  //  250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
+  
+  AliMaterial(50, "SSD Si$",      28.0855, 14., 2.33, 9.36, 999.);
+  AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
+  AliMaterial(52, "SSD Si bus$",  28.0855, 14., 2.33, 9.36, 999.);
+  AliMaterial(53, "SSD C$",       12.011,   6., 2.265,18.8, 999.);
+  // v. dens 
+  AliMaterial(54, "SSD Air$",     14.61, 7.3, .001205, 30423., 999);
+  AliMaterial(55, "SSD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16, 1e16);
+  AliMaterial(56, "SSD Al$",      26.981539, 13., 2.6989, 8.9, 999);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
+  AliMixture(59, "SSD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
+  AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture( 61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
+  AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
+  // check A and Z 
+  AliMaterial(63, "SDD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
+  // ** 
+  AliMedium(50, "SSD Si$",      50, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(51, "SSD Si chip$", 51, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(52, "SSD Si bus$",  52, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(53, "SSD C$",       53, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(54, "SSD Air$",     54, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(55, "SSD Vacuum$",  55, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
+  AliMedium(56, "SSD Al$",      56, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(57, "SSD Water $",  57, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(58, "SSD Freon$",   58, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(59, "SSD PCB$",     59, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(60, "SSD Copper$",  60, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(61, "SSD Ceramics$",61, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(62, "SSD Kapton$",  62, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(63, "SSD G10FR4$",  63, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  
+  //     275-299 --> General (end-caps, frames, cooling, cables, etc.) 
+  
+  AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
+  // verify density 
+  AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999);
+  AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
+  AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
+  AliMixture( 79, "GEN SERVICES$",  aserv, zserv, 4.68, 4, wserv);
+  AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
+  // ** 
+  AliMedium(75,"GEN C$",        75, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(76,"GEN Air$",      76, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(77,"GEN Vacuum$",   77, 0,ISXFLD,SXMGMX, 10., .10, .1, .100,10.00);
+  AliMedium(78,"GEN POLYETHYL$",78, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(79,"GEN SERVICES$", 79, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(80,"GEN Copper$",   80, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(81,"GEN Water $",   81, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
 }
 //_____________________________________________________________________________
 void AliITSv1::Init(){
index 88e79f8..cdd7bf1 100644 (file)
 /////////////////////////////////////////////////////////
  
 #include "AliITS.h"
-#include "AliITSgeom.h"
  
 class AliITSv1 : public AliITS {
 
-private:
+ private:
     Int_t fId1N; // The number of layers for geometry version 5
     // The name of the layers as defined in the Geant tree.
     char  **fId1Name;
  
-public:
-  AliITSv1();
-  AliITSv1(const char *name, const char *title);
-  virtual       ~AliITSv1() ;
-  virtual void   CreateGeometry();
-  virtual void   CreateMaterials();
-  virtual void   Init(); 
-  virtual Int_t  IsVersion() const {return 1;}
-  virtual void   DrawModule();
-  virtual void   StepManager();
+ public:
+    AliITSv1();
+    AliITSv1(const char *name, const char *title);
+    virtual       ~AliITSv1() ;
+    virtual void   BuildGeometry();   // for event display
+    virtual void   CreateGeometry();  // for Geant simulation
+    virtual void   CreateMaterials(); // for Geant simulation
+    virtual void   Init(); 
+    virtual Int_t  IsVersion() const {return 1;}
+    virtual void   DrawModule();
+    virtual void   StepManager();
   
-   ClassDef(AliITSv1,1)  //Hits manager for set:ITS version 1 cource Geometry
+    ClassDef(AliITSv1,1)  //Hits manager for set:ITS version 1 cource Geometry
 };
  
 #endif
index afe540f..976c6ea 100644 (file)
 
 /*
 $Log$
+Revision 1.13  2000/04/04 14:22:06  nilsen
+Fixed volume error with vomule SFR5. Loop positioning this volume is now from
+<=23 (was <=24). This may not be the final version.
+
 Revision 1.11.4.3  2000/04/04 14:18:03  nilsen
 Fixed volume error with vomule SFR5. Loop positioning this volume is now from
 <=23 (was <=24). This may not be the final version.
@@ -65,12 +69,17 @@ Introduction of the Copyright and cvs Log
 #include <TMath.h>
 #include <TRandom.h>
 #include <TVector.h>
+#include <TGeometry.h>
+#include <TNode.h>
+#include <TTUBE.h>
+
+#include "AliMC.h"
+#include "AliConst.h"
+
 #include "AliITShit.h"
 #include "AliITSv3.h"
 #include "AliRun.h"
 
-#include "AliMC.h"
-#include "AliConst.h"
 
 ClassImp(AliITSv3)
  
@@ -112,7 +121,48 @@ AliITSv3::AliITSv3(const char *name, const char *title) : AliITS(name, title){
     fId3Name[5] = "ITS6";
     fMinorVersionV3=1;
 }
+//__________________________________________________________________________
+void AliITSv3::BuildGeometry(){
+    TNode *Node, *Top;
+    const int kColorITS=kYellow;
+    //
+    Top = gAlice->GetGeometry()->GetNode("alice");
+
+    new TTUBE("S_layer1","Layer1 of ITS","void",3.9,3.9+0.05475,12.25);
+    Top->cd();
+    Node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
+    Node->SetLineColor(kColorITS);  fNodes->Add(Node);
+
+    new TTUBE("S_layer2","Layer2 of ITS","void",7.6,7.6+0.05475,16.3);
+    Top->cd();
+    Node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
+    Node->SetLineColor(kColorITS);
+    fNodes->Add(Node);
+
+    new TTUBE("S_layer3","Layer3 of ITS","void",14,14+0.05288,21.1);
+    Top->cd();
+    Node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
+    Node->SetLineColor(kColorITS);
+    fNodes->Add(Node);
+
+    new TTUBE("S_layer4","Layer4 of ITS","void",24,24+0.05288,29.6);
+    Top->cd();
+    Node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
+    Node->SetLineColor(kColorITS);  fNodes->Add(Node);
+
+    new TTUBE("S_layer5","Layer5 of ITS","void",40,40+0.05382,45.1);
+    Top->cd();
+    Node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
+    Node->SetLineColor(kColorITS);
+    fNodes->Add(Node);
+
+    new TTUBE("S_layer6","Layer6 of ITS","void",45,45+0.05382,50.4);
+    Top->cd();
+    Node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
+    Node->SetLineColor(kColorITS);
+    fNodes->Add(Node);
+
+}
 //_____________________________________________________________________________
 void AliITSv3::CreateGeometry(){
 ////////////////////////////////////////////////////////////////////////
@@ -4644,9 +4694,185 @@ void AliITSv3::CreateGeometry(){
 //_____________________________________________________________________________
 void AliITSv3::CreateMaterials(){
 ////////////////////////////////////////////////////////////////////////
-//     Create Materials for ITS as defined in AliITS::CreateMaterials().
-////////////////////////////////////////////////////////////////////////
-   AliITS::CreateMaterials();
+  //
+  // Create ITS materials
+  //     This function defines the default materials used in the Geant
+  // Monte Carlo simulations. In general it is automatically replaced by
+  // the CreatMaterials routine defined in AliITSv?. Should the function
+  // CreateMaterials not exist for the geometry version you are using this
+  // one is used. See the definition found in AliITSv5 or the other routine
+  // for a complete definition.
+  //
+  // Water H2O
+  Float_t awat[2]  = { 1.00794,15.9994 };
+  Float_t zwat[2]  = { 1.,8. };
+  Float_t wwat[2]  = { 2.,1. };
+  Float_t denswat  = 1.;
+  // Freon
+  Float_t afre[2]  = { 12.011,18.9984032 };
+  Float_t zfre[2]  = { 6.,9. };
+  Float_t wfre[2]  = { 5.,12. };
+  Float_t densfre  = 1.5;
+  // Ceramics
+  //     94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3 
+  Float_t acer[5]  = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
+  Float_t zcer[5]  = { 13.,8.,14.,25.,     24. };
+  Float_t wcer[5]  = { .49976,1.01233,.01307,      .01782,.00342 };
+  Float_t denscer  = 3.6;
+  //
+  //     60% SiO2 , 40% G10FR4 
+  // PC board
+  Float_t apcb[3]  = { 28.0855,15.9994,17.749 };
+  Float_t zpcb[3]  = { 14.,8.,8.875 };
+  Float_t wpcb[3]  = { .28,.32,.4 };
+  Float_t denspcb  = 1.8;
+  // POLYETHYL
+  Float_t apoly[2] = { 12.01,1. };
+  Float_t zpoly[2] = { 6.,1. };
+  Float_t wpoly[2] = { .33,.67 };
+  // SERVICES
+  Float_t zserv[4] = { 1.,6.,26.,29. };
+  Float_t aserv[4] = { 1.,12.,55.8,63.5 };
+  Float_t wserv[4] = { .014,.086,.42,.48 };
+  
+  Int_t  ISXFLD  = gAlice->Field()->Integ();
+  Float_t SXMGMX = gAlice->Field()->Max();
+  
+  
+  // --- Define the various materials for GEANT --- 
+  
+  //  200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
+  
+  AliMaterial(0, "SPD Si$",      28.0855, 14., 2.33, 9.36, 999);
+  AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999);
+  AliMaterial(2, "SPD Si bus$",  28.0855, 14., 2.33, 9.36, 999);
+  AliMaterial(3, "SPD C$",       12.011,   6., 2.265,18.8, 999);
+  // v. dens 
+  AliMaterial(4, "SPD Air$",    14.61, 7.3, .001205, 30423., 999);
+  AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
+  AliMaterial(6, "SPD Al$",     26.981539, 13., 2.6989, 8.9, 999);
+  AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
+  AliMixture( 8, "SPD Freon$",  afre, zfre, densfre, -2, wfre);
+  // ** 
+  AliMedium(0, "SPD Si$",      0, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(1, "SPD Si chip$", 1, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(2, "SPD Si bus$",  2, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(3, "SPD C$",       3, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(4, "SPD Air$",     4, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(5, "SPD Vacuum$",  5, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
+  AliMedium(6, "SPD Al$",      6, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(7, "SPD Water $",  7, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(8, "SPD Freon$",   8, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  
+  //  225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
+  
+  AliMaterial(25, "SDD Si$",      28.0855, 14., 2.33,  9.36, 999);
+  AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33,  9.36, 999);
+  AliMaterial(27, "SDD Si bus$",  28.0855, 14., 2.33,  9.36, 999);
+  AliMaterial(28, "SDD C$",       12.011,   6., 2.265,18.8,  999);
+  // v. dens 
+  AliMaterial(29, "SDD Air$",     14.61, 7.3, .001205, 30423., 999);
+  AliMaterial(30, "SDD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16,  1e16);
+  AliMaterial(31, "SDD Al$",      26.981539, 13., 2.6989, 8.9, 999);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
+  AliMixture( 34, "SDD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
+  AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999);
+  AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
+  AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999);
+  // ** 
+  // check A and Z 
+  AliMedium(25, "SDD Si$",      25, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(26, "SDD Si chip$", 26, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(27, "SDD Si bus$",  27, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(28, "SDD C$",       28, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(29, "SDD Air$",     29, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(30, "SDD Vacuum$",  30, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
+  AliMedium(31, "SDD Al$",      31, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(32, "SDD Water $",  32, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(33, "SDD Freon$",   33, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(34, "SDD PCB$",     34, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(35, "SDD Copper$",  35, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(36, "SDD Ceramics$",36, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(37, "SDD Kapton$",  37, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  
+  //  250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
+  
+  AliMaterial(50, "SSD Si$",      28.0855, 14., 2.33, 9.36, 999.);
+  AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
+  AliMaterial(52, "SSD Si bus$",  28.0855, 14., 2.33, 9.36, 999.);
+  AliMaterial(53, "SSD C$",       12.011,   6., 2.265,18.8, 999.);
+  // v. dens 
+  AliMaterial(54, "SSD Air$",     14.61, 7.3, .001205, 30423., 999);
+  AliMaterial(55, "SSD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16, 1e16);
+  AliMaterial(56, "SSD Al$",      26.981539, 13., 2.6989, 8.9, 999);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
+  AliMixture(59, "SSD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
+  AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture( 61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
+  AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
+  // check A and Z 
+  AliMaterial(63, "SDD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
+  // ** 
+  AliMedium(50, "SSD Si$",      50, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(51, "SSD Si chip$", 51, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(52, "SSD Si bus$",  52, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(53, "SSD C$",       53, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(54, "SSD Air$",     54, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(55, "SSD Vacuum$",  55, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
+  AliMedium(56, "SSD Al$",      56, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(57, "SSD Water $",  57, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(58, "SSD Freon$",   58, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(59, "SSD PCB$",     59, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(60, "SSD Copper$",  60, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(61, "SSD Ceramics$",61, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(62, "SSD Kapton$",  62, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(63, "SSD G10FR4$",  63, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  
+  //     275-299 --> General (end-caps, frames, cooling, cables, etc.) 
+  
+  AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
+  // verify density 
+  AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999);
+  AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
+  AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
+  AliMixture( 79, "GEN SERVICES$",  aserv, zserv, 4.68, 4, wserv);
+  AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
+  // After a call with ratios by number (negative number of elements), 
+  // the ratio array is changed to the ratio by weight, so all successive 
+  // calls with the same array must specify the number of elements as 
+  // positive 
+  AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
+  // ** 
+  AliMedium(75,"GEN C$",        75, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(76,"GEN Air$",      76, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(77,"GEN Vacuum$",   77, 0,ISXFLD,SXMGMX, 10., .10, .1, .100,10.00);
+  AliMedium(78,"GEN POLYETHYL$",78, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(79,"GEN SERVICES$", 79, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(80,"GEN Copper$",   80, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+  AliMedium(81,"GEN Water $",   81, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
+
 }
 //_____________________________________________________________________________
 void AliITSv3::Init(){
index 3664876..7f904f8 100644 (file)
 /////////////////////////////////////////////////////////
  
 #include "AliITS.h"
-#include "AliITSgeom.h"
  
 class AliITSv3 : public AliITS {
 
-private:
+ private:
     Int_t fId3N; // The number of layers for geometry version 5
     // The name of the layers as defined in the Geant tree.
     char  **fId3Name;
 
-protected:
-  Int_t fMinorVersionV3;  //Minor version identifier
+ protected:
+    Int_t fMinorVersionV3;  //Minor version identifier
  
-public:
-   AliITSv3();
-   AliITSv3(const char *name, const char *title);
-   virtual       ~AliITSv3() ;
-   virtual void   CreateGeometry();
-   virtual void   CreateMaterials();
-   virtual void   Init();   
-   virtual Int_t  IsVersion() const {return 3;}
-   virtual void   SetMinorVersion(Int_t version) {fMinorVersionV3=version;}
-   virtual void   StepManager();
+ public:
+    AliITSv3();
+    AliITSv3(const char *name, const char *title);
+    virtual       ~AliITSv3() ;
+    virtual void   BuildGeometry();  // for event display
+    virtual void   CreateGeometry(); // for Geant simulation
+    virtual void   CreateMaterials();// for Geant simulation
+    virtual void   Init();   
+    virtual Int_t  IsVersion() const {return 3;}
+    virtual void   SetMinorVersion(Int_t version) {fMinorVersionV3=version;}
+    virtual void   StepManager();
    
-   ClassDef(AliITSv3,1)  //Hits manager for set:ITS version 3, TP detailed geometry
+    ClassDef(AliITSv3,1)  //Hits manager for set:ITS version 3, TP detailed geometry
 };
  
 #endif
index 38df705..1683fef 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
+Revision 1.16  2000/03/05 00:11:03  nilsen
+Fixed merge error.
+
 Revision 1.15  2000/02/23 16:25:21  fca
 AliVMC and AliGeant3 classes introduced
 ReadEuclid moved from AliRun to AliModule
@@ -61,6 +64,9 @@ Introduction of the Copyright and cvs Log
 #include <stdio.h>
 #include <stdlib.h>
 #include <TMath.h>
+#include <TGeometry.h>
+#include <TNode.h>
+#include <TTUBE.h>
 
 #include "AliRun.h"
 #include "TSystem.h"
@@ -111,7 +117,193 @@ AliITSv5::AliITSv5(const char *name, const char *title) : AliITS(name, title){
 
     fEuclidMaterial = "$ALICE_ROOT/Euclid/ITSgeometry_5.tme";
     fEuclidGeometry = "$ALICE_ROOT/Euclid/ITSgeometry_5.euc";
-} 
+}
+//_____________________________________________________________________________
+void AliITSv5::BuildGeometry(){
+  //
+  // Build ITS TNODE geometry for event display using detailed geometry.
+  // This function builds a simple ITS geometry used by the ROOT macro
+  // ITSdisplay.C.
+
+  TNode *Top;
+  TNode *nd;
+  //const int kColorITS_SPD=kRed;
+  //const int kColorITS_SDD=kGreen;
+  const int kColorITS_SSD=kBlue;
+  //
+  Top=gAlice->GetGeometry()->GetNode("alice");
+  AliITSgeom  *gm = this->GetITSgeom();
+
+  Text_t      name[10];
+  Float_t     xg[3];
+  Float_t     rt[9];
+  Double_t    rtd[9];
+  TBRIK       *box;
+  TRotMatrix  *rm;
+  //TCanvas     *c1 = new TCanvas("c1","ITS");
+
+  for(Int_t lay=1;lay<=2;lay++)
+   for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
+    for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+          try {
+              box  = new TBRIK ("ActiveSPD","Active volume of SPD","SPD SI DET",
+                                   0.64,0.0075,4.19); 
+          } catch (...) {
+             cout << "EXCEPTION in box = new TBRIK" << endl;
+             return;
+         }
+          gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
+          gm->GetRotMatrix(lay,lad,det,rt);
+          //sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
+          for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+          try {
+               rm  = new TRotMatrix(name,name,rtd);
+          } catch (...) {
+               cout << "EXCEPTION in   new TRotMatrix" << endl;
+                return;
+          }
+         Top->cd();
+         //sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det); 
+         try {
+              nd  = new TNode("SPD"," ",box,xg[0],xg[1],xg[2],rm);
+         } catch (...) {
+              cout << "EXCEPTION in new TNode" << endl;
+              return;
+         }
+         nd->SetLineColor(kColorITS_SSD);
+         fNodes->Add(nd);
+    }
+
+  for(Int_t lay=3;lay<=3;lay++)
+   for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
+    for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+          try {
+              box  = new TBRIK ("ActiveSDD","Active volume of SDD","SDD SI DET",
+                                   3.5,0.014,3.763); 
+          } catch (...) {
+             cout << "EXCEPTION in box = new TBRIK" << endl;
+             return;
+         }
+          gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
+          gm->GetRotMatrix(lay,lad,det,rt);
+          //sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
+          for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+          try {
+               rm  = new TRotMatrix(name,name,rtd);
+          } catch (...) {
+               cout << "EXCEPTION in   new TRotMatrix" << endl;
+                return;
+          }
+         Top->cd();
+         //sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det); 
+         try {
+              nd  = new TNode("SDD"," ",box,xg[0],xg[1],xg[2],rm);
+         } catch (...) {
+              cout << "EXCEPTION in new TNode" << endl;
+              return;
+         }
+         nd->SetLineColor(kColorITS_SSD);
+         fNodes->Add(nd);
+    }
+
+  for(Int_t lay=4;lay<=4;lay++)
+   for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
+    for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+          try {
+              box  = new TBRIK ("ActiveSDD","Active volume of SDD","SDD SI DET",
+                                   3.5,0.014,3.763); 
+          } catch (...) {
+             cout << "EXCEPTION in box = new TBRIK" << endl;
+             return;
+         }
+          gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
+          gm->GetRotMatrix(lay,lad,det,rt);
+          //sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
+          for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+          try {
+               rm  = new TRotMatrix(name,name,rtd);
+          } catch (...) {
+               cout << "EXCEPTION in   new TRotMatrix" << endl;
+                return;
+          }
+         Top->cd();
+         //sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det); 
+         try {
+              nd  = new TNode("SDD"," ",box,xg[0],xg[1],xg[2],rm);
+         } catch (...) {
+              cout << "EXCEPTION in new TNode" << endl;
+              return;
+         }
+         nd->SetLineColor(kColorITS_SSD);
+         fNodes->Add(nd);
+    }
+ for(Int_t lay=5;lay<=5;lay++)
+   for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
+    for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+          try {
+              box  = new TBRIK ("ActiveSSD","Active volume of SSD","SSD SI DET",
+                                   3.65,0.015,2.0); 
+          } catch (...) {
+             cout << "EXCEPTION in box = new TBRIK" << endl;
+             return;
+         }
+          gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
+          gm->GetRotMatrix(lay,lad,det,rt);
+          //sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
+          for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+          try {
+               rm  = new TRotMatrix(name,name,rtd);
+          } catch (...) {
+               cout << "EXCEPTION in   new TRotMatrix" << endl;
+                return;
+          }
+         Top->cd();
+         //sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det); 
+         try {
+              nd  = new TNode("SSD"," ",box,xg[0],xg[1],xg[2],rm);
+         } catch (...) {
+              cout << "EXCEPTION in new TNode" << endl;
+              return;
+         }
+         nd->SetLineColor(kColorITS_SSD);
+         fNodes->Add(nd);
+    }
+
+ for(Int_t lay=6;lay<=6;lay++)
+   for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
+    for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+          try {
+              box  = new TBRIK ("ActiveSSD","Active volume of SSD","SSD SI DET",
+                                   3.65,0.015,2.0); 
+          } catch (...) {
+             cout << "EXCEPTION in box = new TBRIK" << endl;
+             return;
+         }
+
+          gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]); 
+          gm->GetRotMatrix(lay,lad,det,rt);
+          //sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
+          for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+          try {
+               rm  = new TRotMatrix(name,name,rtd);
+          } catch (...) {
+               cout << "EXCEPTION in   new TRotMatrix" << endl;
+                return;
+          }
+         Top->cd();
+          //sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det); 
+         try {
+              nd  = new TNode("SSD"," ",box,xg[0],xg[1],xg[2],rm);
+         } catch (...) {
+              cout << "EXCEPTION in new TNode" << endl;
+              return;
+         }
+         nd->SetLineColor(kColorITS_SSD);
+         fNodes->Add(nd);
+    }
+
+
+}
 //_____________________________________________________________________________
 void AliITSv5::CreateMaterials(){
 ////////////////////////////////////////////////////////////////////////
@@ -361,6 +553,8 @@ void AliITSv5::Init(){
     } // end for i
 
     AliITS::Init();
+    fMajorVersion = 5;
+    fMinorVersion = 0;
 } 
 //_____________________________________________________________________________
 void AliITSv5::StepManager(){
index 35370a5..e8d90ec 100644 (file)
@@ -9,28 +9,28 @@
 //     Manager and hits classes for  ITS version 5
 ////////////////////////////////////////////////////////////////////////
 
-#include "TString.h"
+#include <TString.h>
 
 #include "AliITS.h"
-#include "AliITSgeom.h"
 
 class AliITSv5 : public AliITS {
-private:
+ private:
     Int_t fId5N; // The number of layers for geometry version 5
     // The name of the layers as defined in the Geant tree.
     char  **fId5Name;
 
-public:
-                         AliITSv5();
-                        AliITSv5(const char *name, const char *title);
-           virtual       ~AliITSv5() ;
-           virtual void  CreateGeometry();
-           virtual void  CreateMaterials();
-           virtual void  Init();   
-           virtual Int_t IsVersion() const {return 5;}
-           virtual void  StepManager();
+ public:
+    AliITSv5();
+    AliITSv5(const char *name, const char *title);
+    virtual       ~AliITSv5() ;
+    virtual void  BuildGeometry();   // for event display
+    virtual void  CreateGeometry();  // for Geant simulation
+    virtual void  CreateMaterials(); // for Geant simulation
+    virtual void  Init();   
+    virtual Int_t IsVersion() const {return 5;}
+    virtual void  StepManager();
   
-  ClassDef(AliITSv5,1)  //Hits manager for ITS version 5 Official detailed geometry
+    ClassDef(AliITSv5,1)//Hits manager for ITS version 5 Official detailed geometry
 };
  
 #endif