1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //////////////////////////////////////////////////////////////////////////////
20 // Inner Traking System version 11 //
21 // This class contains the base procedures for the Inner Tracking System //
23 // Authors: R. Barbera //
27 // NOTE: THIS IS THE SYMMETRIC PPR geometry of the ITS. //
28 // THIS WILL NOT WORK //
29 // with the geometry or module classes or any analysis classes. You are //
30 // strongly encouraged to uses AliITSv5. //
32 //////////////////////////////////////////////////////////////////////////////
33 // See AliITSv11::StepManager().
34 // General C/C++ includes
37 // General Root includes
38 #include <Riostream.h>
41 #include <TFile.h> // only required for Tracking function?
42 #include <TObjArray.h>
43 #include <TClonesArray.h>
44 #include <TLorentzVector.h>
45 #include <TObjString.h>
46 // Root Geometry includes
47 #include <TGeoManager.h>
48 #include <TGeoVolume.h>
51 #include <TGeoTube.h> // contaings TGeoTubeSeg
53 #include <TGeoCompositeShape.h>
54 #include <TGeoMatrix.h>
56 #include <TGeoMaterial.h>
57 #include <TGeoMedium.h>
58 #include "AliITSv11GeometrySupport.h"
59 // General AliRoot includes
63 // ITS specific includes
64 #include "AliITShit.h"
65 #include "AliITSgeom.h"
66 #include "AliITSgeomSPD.h"
67 #include "AliITSgeomSDD.h"
68 #include "AliITSgeomSSD.h"
69 #include "AliITSDetType.h"
70 #include "AliITSresponseSPD.h"
71 #include "AliITSresponseSDD.h"
72 #include "AliITSresponseSSD.h"
73 #include "AliITSsegmentationSPD.h"
74 #include "AliITSsegmentationSDD.h"
75 #include "AliITSsegmentationSSD.h"
76 #include "AliITSsimulationSPD.h"
77 #include "AliITSsimulationSDD.h"
78 #include "AliITSsimulationSSD.h"
79 #include "AliITSClusterFinderSPD.h"
80 #include "AliITSClusterFinderSDD.h"
81 #include "AliITSClusterFinderSSD.h"
82 #include "AliITSBaseGeometry.h"
83 #include "AliITSv11.h"
84 #include "AliITSv11GeometrySupport.h"
89 Some temparary #define's used untill ROOT has addoppted the proper
90 Getter in it's classes.
91 These Below are for TGeoPcon functions.
94 //______________________________________________________________________
95 AliITSv11::AliITSv11() : AliITS() {
96 // Standard default constructor for the ITS version 11.
102 // A default constructed AliITSv11 class.
108 //______________________________________________________________________
109 AliITSv11::AliITSv11(const char *title) : AliITS("ITS", title){
110 // Standard constructor for the ITS version 11.
112 // const char *title The title of for this geometry.
116 // A Standard constructed AliITSv11 class.
122 //______________________________________________________________________
123 AliITSv11::~AliITSv11() {
124 // Standard destructor for the ITS version 11.
132 // if(fITSV!=0) delete fITSV;
133 // if(fcS!=0) delete fcS;
134 // if(fcD!=0) delete fcD;
136 //______________________________________________________________________
137 AliITSv11::AliITSv11(const AliITSv11 &source) : AliITS(source){
138 // Copy Constructor for ITS version 11.
140 // AliITSv11 &source class to be copied from.
146 if(&source == this) return;
147 Error("Copy Constructor","Not allowed to copy AliITSv11");
150 //______________________________________________________________________
151 AliITSv11& AliITSv11::operator=(const AliITSv11 &source){
152 // Assignment operator for the ITS version 11.
154 // AliITSv11 &source class to be copied from.
160 if(&source == this) return *this;
161 Error("= operator","Not allowed to copy AliITSv11");
164 //______________________________________________________________________
165 void AliITSv11::BuildGeometry(){
166 // This routine defines and Creates the geometry for version 11 of
167 // the ITS for use in the simulation display routines. This is a
168 // very simplified geometry for speed of viewing.
175 TVector3 t(0.0,0.0,0.0);
177 //if(fITSV==0) fITSV = new AliITSGeometryITSV(this,"ALIC");
178 //if(fcS==0) fcS = new AliITSGeometrySSDCone(this,t,"TSV",1);
180 //fcS->BuildDisplayGeometry();
182 //______________________________________________________________________
183 void AliITSv11::CreateGeometry(){
184 // This routine defines and Creates the geometry for version 11 of
185 // the ITS. The geometry is used by the particle trasport routines,
186 // and therefore, is very detailed.
193 TVector3 t(0.0,0.0,0.0);
195 TGeoManager *mgr = gGeoManager;
196 TGeoVolume *ALIC = mgr->GetTopVolume();
198 TGeoPcon *itsv = new TGeoPcon("ITS Top Volume, Daughter of ALIC",
200 // DefineSection(section number, Z, Rmin, Rmax).
201 itsv->DefineSection(0,-300.0*kcm,0.01*kcm,50.0*kcm);
202 itsv->DefineSection(1,+300.0*kcm,0.01*kcm,50.0*kcm);
203 TGeoVolume *ITSV = new TGeoVolume("ITSV",itsv,0);
204 //mgr->AddVolume(ITSV);
205 ITSV->SetVisibility(kFALSE);
206 ALIC->AddNode(ITSV,1,0);
208 AliITSv11GeometrySupport *sup = new AliITSv11GeometrySupport(GetDebug());
209 //sup->SPDCone(ITSV);
210 //sup->SDDCone(ITSV);
212 //sup->ServicesCableSupport(ITSV);
214 //______________________________________________________________________
215 void AliITSv11::CreateMaterials(){
216 // Create ITS materials
217 // This function defines the default materials used in the Geant
218 // Monte Carlo simulations for the geometries AliITSv11.
219 // In general it is automatically replaced by
227 //TGeoMaterial *C = new TGeoMaterial("ITSCarbon",12.0,6.0,2.265);
228 TGeoMaterial *Al = new TGeoMaterial("ITSAluminum",26.981539,13.0,2.07);
229 TGeoMixture *Cfiber = new TGeoMixture("ITSCarbonFiber",6,1.930);
230 TGeoMixture *Rohacell = new TGeoMixture("ITSRohacell",6,1.930);
231 TGeoMixture *Staselite = new TGeoMixture("ITSStaselite4411w",6,1.930);
232 TGeoMixture *Air = new TGeoMixture("ITSAir",6,1.205*1.E-3);
233 TGeoMixture *Stainless = new TGeoMixture("ITSStainless",6,1.930);
235 Double_t SPDcone[20];
236 SPDcone[0] = 1.0; // imat
237 SPDcone[1] = 0.0; // isvol
238 SPDcone[2] = gAlice->Field()->Integ(); // ifield
239 SPDcone[3] = gAlice->Field()->Max(); // fieldm
240 SPDcone[4] = 1.0; // tmaxfd [degrees]
241 SPDcone[5] = 1.0; // stemax [cm]
242 SPDcone[6] = 0.5; // deemax [fraction]
243 SPDcone[7] = 1.0E-3; // epsil [cm]
244 SPDcone[8] = 0.0; // stmin [cm]
245 new TGeoMedium("ITSspdCarbonFiber",1,Cfiber,SPDcone);
247 new TGeoMedium("ITSspdStaselite4411w",2,Staselite,SPDcone);
249 new TGeoMedium("ITSspdRohacell50A",3,Rohacell,SPDcone);
251 new TGeoMedium("ITSspdStainlesSteal",4,Stainless,SPDcone);
253 new TGeoMedium("ITSspdAir",5,Air,SPDcone);
255 new TGeoMedium("ITSspdAl",6,Al,SPDcone);
257 Double_t SSDcone[20];
258 SSDcone[0] = 1.0; // imat
259 SSDcone[1] = 0.0; // isvol
260 SSDcone[2] = gAlice->Field()->Integ(); // ifield
261 SSDcone[3] = gAlice->Field()->Max(); // fieldm
262 SSDcone[4] = 1.0; // tmaxfd [degrees]
263 SSDcone[5] = 1.0; // stemax [cm]
264 SSDcone[6] = 0.5; // deemax [fraction]
265 SSDcone[7] = 1.0E-3; // epsil [cm]
266 SSDcone[8] = 0.0; // stmin [cm]
267 new TGeoMedium("ITSssdCarbonFiber",1,Cfiber,SSDcone);
269 new TGeoMedium("ITSssdStaselite4411w",2,Staselite,SSDcone);
271 new TGeoMedium("ITSssdRohacell50A",3,Rohacell,SSDcone);
273 new TGeoMedium("ITSssdStainlesSteal",4,Stainless,SSDcone);
275 new TGeoMedium("ITSssdAir",5,Air,SSDcone);
277 new TGeoMedium("ITSssdAl",6,Al,SSDcone);
279 //______________________________________________________________________
280 void AliITSv11::InitAliITSgeom(){
281 // Based on the geometry tree defined in Geant 3.21, this
282 // routine initilizes the Class AliITSgeom from the Geant 3.21 ITS
283 // geometry sturture.
291 //______________________________________________________________________
292 void AliITSv11::Init(){
293 // Initialise the ITS after it has been created.
301 //______________________________________________________________________
302 void AliITSv11::SetDefaults(){
303 // Sets the default segmentation, response, digit and raw cluster
304 // classes to be used. These defaults can be overwritten in the
305 // macros that do these later steps. Defaults are give hear for the
314 //______________________________________________________________________
315 void AliITSv11::DrawModule(){
316 // Draw a standard set of shaded view of the ITS version 11.
324 //______________________________________________________________________
325 void AliITSv11::StepManager(){
326 // Called for every step in the ITS, then calles the AliITShit class
327 // creator with the information to be recoreded about that hit.
328 // The value of the macro ALIITSPRINTGEOM if set to 1 will allow the
329 // printing of information to a file which can be used to create a .det
330 // file read in by the routine CreateGeometry(). If set to 0 or any other
331 // value except 1, the default behavior, then no such file is created nor
332 // is the extra variables and the like used in the printing allocated.