Small bug fixes to TPC files
[u/mrichter/AliRoot.git] / ITS / AliITS.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15
16 /*
17 $Log$
18 Revision 1.9  1999/11/14 14:33:25  fca
19 Correct problems with distructors and pointers, thanks to I.Hrivnacova
20
21 Revision 1.8  1999/09/29 09:24:19  fca
22 Introduction of the Copyright and cvs Log
23
24 */
25
26 ///////////////////////////////////////////////////////////////////////////////
27 //
28 //      An overview of the basic philosophy of the ITS code development
29 // and analysis is show in the figure below.
30 //Begin_Html
31 /*
32 <img src="picts/ITS/ITS_Analysis_schema.gif">
33 </pre>
34 <br clear=left>
35 <font size=+2 color=red>
36 <p>Roberto Barbera is in charge of the ITS Offline code (1999).
37 <a href="mailto:roberto.barbera@ct.infn.it">Roberto Barbera</a>.
38 </font>
39 <pre>
40 */
41 //End_Html
42 //
43 //  AliITS. Inner Traking System base class.
44 //  This class contains the base procedures for the Inner Tracking System
45 //
46 //Begin_Html
47 /*
48 <img src="picts/ITS/AliITS_Class_Diagram.gif">
49 </pre>
50 <br clear=left>
51 <font size=+2 color=red>
52 <p>This show the class diagram of the different elements that are part of
53 the AliITS class.
54 </font>
55 <pre>
56 */
57 //End_Html
58 //
59 // Version: 0
60 // Written by Rene Brun, Federico Carminati, and Roberto Barbera
61 //
62 // Version: 1
63 // Modified and documented by Bjorn S. Nilsen
64 // July 11 1999
65 //
66 // AliITS is the general base class for the ITS. Also see AliDetector for
67 // futher information.
68 //
69 ///////////////////////////////////////////////////////////////////////////////
70  
71 #include <TMath.h>
72 #include <TRandom.h>
73 #include <TVector.h>
74 #include <TGeometry.h>
75 #include <TNode.h>
76 #include <TTUBE.h>
77
78 #include "AliITSmodule.h"
79 #include "AliDetector.h"
80 #include "AliITS.h"
81 #include "TClonesArray.h"
82 #include "TObjArray.h"
83 #include "AliITShit.h"
84 #include "AliITSdigit.h"
85 #include "AliRun.h"
86
87 ClassImp(AliITS)
88  
89 //_____________________________________________________________________________
90 AliITS::AliITS() {
91   //
92   // Default initialiser for ITS
93   //     The default constructor of the AliITS class. In addition to
94   // creating the AliITS class it zeros the variables fIshunt (a member
95   // of AliDetector class), fEuclidOut, and fIdN, and zeros the pointers
96   // fITSpoints, fIdSens, and fIdName.
97   //
98   fITSpoints  = 0;
99   fIshunt     = 0;
100   fEuclidOut  = 0;
101   fIdN        = 0;
102   fIdName     = 0;
103   fIdSens     = 0;
104   fITSmodules = 0;
105
106 }
107 //_____________________________________________________________________________
108 AliITS::AliITS(const char *name, const char *title):AliDetector(name,title){
109   //
110   // Default initialiser for ITS
111   //     The constructor of the AliITS class. In addition to creating the
112   // AliITS class, it allocates memory for the TClonesArrays fHits and
113   // fDigits, and for the TObjArray fITSpoints. It also zeros the variables
114   // fIshunt (a member of AliDetector class), fEuclidOut, and fIdN, and zeros
115   // the pointers fIdSens and fIdName. To help in displaying hits via the ROOT
116   // macro display.C AliITS also sets the marker color to red. The variables
117   // passes with this constructor, const char *name and *title, are used by
118   // the constructor of AliDetector class. See AliDetector class for a
119   // description of these parameters and its constructor functions.
120   //
121
122   fHits       = new TClonesArray("AliITShit", 1560);
123   gAlice->AddHitList(fHits);
124   fDigits     = new TClonesArray("AliITSdigit",1000);
125   fITSpoints  = new TObjArray();
126   fITSmodules = 0; //new AliITSmodules();
127
128   fIshunt     = 0;
129   fEuclidOut  = 0;
130   fIdN        = 0;
131   fIdName     = 0;
132   fIdSens     = 0;
133
134   SetMarkerColor(kRed);
135
136 }
137
138 //_____________________________________________________________________________
139 AliITS::~AliITS(){
140   //
141   // Default distructor for ITS
142   //     The default destructor of the AliITS class. In addition to deleting
143   // the AliITS class it deletes the memory pointed to by the fHits, fDigits,
144   // fIdSens, fIdName, and fITSpoints.
145   //
146   delete fHits;
147   delete fDigits;
148   if(fIdName!=0) delete[] fIdName;
149   if(fIdSens!=0) delete[] fIdSens;
150   delete fITSmodules;
151   if(fITSpoints!=0) delete fITSpoints;
152 }
153
154 //_____________________________________________________________________________
155 void AliITS::AddDigit(Int_t *tracks, Int_t *digits){
156   //
157   // Add an ITS Digit
158   //     The function to add information to the AliITSdigits class. See the
159   // AliITSdigits class for a full description. This function allocates the
160   // necessary new space for the digits information and passes the pointers
161   // *track and *digits to the AliITSdigits constructor function.
162   //
163   TClonesArray &ldigits = *fDigits;
164   new(ldigits[fNdigits++]) AliITSdigit(tracks,digits);
165 }
166
167 Int_t AliITS::AddDigit(AliITSdigit* d) {
168
169    fDigits->Add(d);
170    fNdigits = fDigits->GetEntriesFast();
171    return fNdigits;
172 }
173
174 //_____________________________________________________________________________
175 void AliITS::AddHit(Int_t track, Int_t *vol, Float_t *hits){
176   //
177   // Add an ITS hit
178   //     The function to add information to the AliITShit class. See the
179   // AliITShit class for a full description. This function allocates the
180   // necessary new space for the hit information and passes the variable
181   // track, and the pointers *vol and *hits to the AliITShit constructor
182   // function.
183   //
184   TClonesArray &lhits = *fHits;
185   new(lhits[fNhits++]) AliITShit(fIshunt,track,vol,hits);
186 }
187 //_____________________________________________________________________________
188 void AliITS::BuildGeometry(){
189   //
190   // Build ITS TNODE geometry for event display
191   //     This function builds a simple ITS geometry used by the ROOT macro
192   // display.C. In general the geometry as coded is wrong.
193   //
194   TNode *Node, *Top;
195   const int kColorITS=kYellow;
196   //
197   Top=gAlice->GetGeometry()->GetNode("alice");
198
199   new TTUBE("S_layer1","Layer1 of ITS","void",3.9,3.9+0.05475,12.25);
200   Top->cd();
201   Node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
202   Node->SetLineColor(kColorITS);
203   fNodes->Add(Node);
204
205   new TTUBE("S_layer2","Layer2 of ITS","void",7.6,7.6+0.05475,16.3);
206   Top->cd();
207   Node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
208   Node->SetLineColor(kColorITS);
209   fNodes->Add(Node);
210
211   new TTUBE("S_layer3","Layer3 of ITS","void",14,14+0.05288,21.1);
212   Top->cd();
213   Node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
214   Node->SetLineColor(kColorITS);
215   fNodes->Add(Node);
216
217   new TTUBE("S_layer4","Layer4 of ITS","void",24,24+0.05288,29.6);
218   Top->cd();
219   Node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
220   Node->SetLineColor(kColorITS);
221   fNodes->Add(Node);
222
223   new TTUBE("S_layer5","Layer5 of ITS","void",40,40+0.05382,45.1);
224   Top->cd();
225   Node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
226   Node->SetLineColor(kColorITS);
227   fNodes->Add(Node);
228
229   new TTUBE("S_layer6","Layer6 of ITS","void",45,45+0.05382,50.4);
230   Top->cd();
231   Node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
232   Node->SetLineColor(kColorITS);
233   fNodes->Add(Node);
234 }
235 //_____________________________________________________________________________
236 void AliITS::CreateMaterials(){
237   //
238   // Create ITS materials
239   //     This function defines the default materials used in the Geant
240   // Monte Carlo simulations. In general it is automatically replaced by
241   // the CreatMaterials routine defined in AliITSv?. Should the function
242   // CreateMaterials not exist for the geometry version you are using this
243   // one is used. See the definition found in AliITSv5 or the other routine
244   // for a complete definition.
245   //
246   // Water H2O
247   Float_t awat[2]  = { 1.00794,15.9994 };
248   Float_t zwat[2]  = { 1.,8. };
249   Float_t wwat[2]  = { 2.,1. };
250   Float_t denswat  = 1.;
251   // Freon
252   Float_t afre[2]  = { 12.011,18.9984032 };
253   Float_t zfre[2]  = { 6.,9. };
254   Float_t wfre[2]  = { 5.,12. };
255   Float_t densfre  = 1.5;
256   // Ceramics
257   //     94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3 
258   Float_t acer[5]  = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
259   Float_t zcer[5]  = { 13.,8.,14.,25.,      24. };
260   Float_t wcer[5]  = { .49976,1.01233,.01307,       .01782,.00342 };
261   Float_t denscer  = 3.6;
262   //
263   //     60% SiO2 , 40% G10FR4 
264   // PC board
265   Float_t apcb[3]  = { 28.0855,15.9994,17.749 };
266   Float_t zpcb[3]  = { 14.,8.,8.875 };
267   Float_t wpcb[3]  = { .28,.32,.4 };
268   Float_t denspcb  = 1.8;
269   // POLYETHYL
270   Float_t apoly[2] = { 12.01,1. };
271   Float_t zpoly[2] = { 6.,1. };
272   Float_t wpoly[2] = { .33,.67 };
273   // SERVICES
274   Float_t zserv[4] = { 1.,6.,26.,29. };
275   Float_t aserv[4] = { 1.,12.,55.8,63.5 };
276   Float_t wserv[4] = { .014,.086,.42,.48 };
277   
278   Int_t  ISXFLD  = gAlice->Field()->Integ();
279   Float_t SXMGMX = gAlice->Field()->Max();
280   
281   
282   // --- Define the various materials for GEANT --- 
283   
284   //  200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
285   
286   AliMaterial(0, "SPD Si$",      28.0855, 14., 2.33, 9.36, 999);
287   AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999);
288   AliMaterial(2, "SPD Si bus$",  28.0855, 14., 2.33, 9.36, 999);
289   AliMaterial(3, "SPD C$",       12.011,   6., 2.265,18.8, 999);
290   // v. dens 
291   AliMaterial(4, "SPD Air$",    14.61, 7.3, .001205, 30423., 999);
292   AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
293   AliMaterial(6, "SPD Al$",     26.981539, 13., 2.6989, 8.9, 999);
294   AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
295   AliMixture( 8, "SPD Freon$",  afre, zfre, densfre, -2, wfre);
296   // ** 
297   AliMedium(0, "SPD Si$",      0, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
298   AliMedium(1, "SPD Si chip$", 1, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
299   AliMedium(2, "SPD Si bus$",  2, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
300   AliMedium(3, "SPD C$",       3, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
301   AliMedium(4, "SPD Air$",     4, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
302   AliMedium(5, "SPD Vacuum$",  5, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
303   AliMedium(6, "SPD Al$",      6, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
304   AliMedium(7, "SPD Water $",  7, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
305   AliMedium(8, "SPD Freon$",   8, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
306   
307   //  225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
308   
309   AliMaterial(25, "SDD Si$",      28.0855, 14., 2.33,  9.36, 999);
310   AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33,  9.36, 999);
311   AliMaterial(27, "SDD Si bus$",  28.0855, 14., 2.33,  9.36, 999);
312   AliMaterial(28, "SDD C$",       12.011,   6., 2.265,18.8,  999);
313   // v. dens 
314   AliMaterial(29, "SDD Air$",     14.61, 7.3, .001205, 30423., 999);
315   AliMaterial(30, "SDD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16,  1e16);
316   AliMaterial(31, "SDD Al$",      26.981539, 13., 2.6989, 8.9, 999);
317   // After a call with ratios by number (negative number of elements), 
318   // the ratio array is changed to the ratio by weight, so all successive 
319   // calls with the same array must specify the number of elements as 
320   // positive 
321   AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
322   // After a call with ratios by number (negative number of elements), 
323   // the ratio array is changed to the ratio by weight, so all successive 
324   // calls with the same array must specify the number of elements as 
325   // positive 
326   AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
327   AliMixture( 34, "SDD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
328   AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999);
329   AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
330   AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999);
331   // ** 
332   // check A and Z 
333   AliMedium(25, "SDD Si$",      25, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
334   AliMedium(26, "SDD Si chip$", 26, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
335   AliMedium(27, "SDD Si bus$",  27, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
336   AliMedium(28, "SDD C$",       28, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
337   AliMedium(29, "SDD Air$",     29, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
338   AliMedium(30, "SDD Vacuum$",  30, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
339   AliMedium(31, "SDD Al$",      31, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
340   AliMedium(32, "SDD Water $",  32, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
341   AliMedium(33, "SDD Freon$",   33, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
342   AliMedium(34, "SDD PCB$",     34, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
343   AliMedium(35, "SDD Copper$",  35, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
344   AliMedium(36, "SDD Ceramics$",36, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
345   AliMedium(37, "SDD Kapton$",  37, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
346   
347   //  250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
348   
349   AliMaterial(50, "SSD Si$",      28.0855, 14., 2.33, 9.36, 999.);
350   AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
351   AliMaterial(52, "SSD Si bus$",  28.0855, 14., 2.33, 9.36, 999.);
352   AliMaterial(53, "SSD C$",       12.011,   6., 2.265,18.8, 999.);
353   // v. dens 
354   AliMaterial(54, "SSD Air$",     14.61, 7.3, .001205, 30423., 999);
355   AliMaterial(55, "SSD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16, 1e16);
356   AliMaterial(56, "SSD Al$",      26.981539, 13., 2.6989, 8.9, 999);
357   // After a call with ratios by number (negative number of elements), 
358   // the ratio array is changed to the ratio by weight, so all successive 
359   // calls with the same array must specify the number of elements as 
360   // positive 
361   AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
362   // After a call with ratios by number (negative number of elements), 
363   // the ratio array is changed to the ratio by weight, so all successive 
364   // calls with the same array must specify the number of elements as 
365   // positive 
366   AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
367   AliMixture(59, "SSD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
368   AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
369   // After a call with ratios by number (negative number of elements), 
370   // the ratio array is changed to the ratio by weight, so all successive 
371   // calls with the same array must specify the number of elements as 
372   // positive 
373   AliMixture( 61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
374   AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
375   // check A and Z 
376   AliMaterial(63, "SDD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
377   // ** 
378   AliMedium(50, "SSD Si$",      50, 1,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
379   AliMedium(51, "SSD Si chip$", 51, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
380   AliMedium(52, "SSD Si bus$",  52, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
381   AliMedium(53, "SSD C$",       53, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
382   AliMedium(54, "SSD Air$",     54, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
383   AliMedium(55, "SSD Vacuum$",  55, 0,ISXFLD,SXMGMX, 10.,1.00, .1, .100,10.00);
384   AliMedium(56, "SSD Al$",      56, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
385   AliMedium(57, "SSD Water $",  57, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
386   AliMedium(58, "SSD Freon$",   58, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
387   AliMedium(59, "SSD PCB$",     59, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
388   AliMedium(60, "SSD Copper$",  60, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
389   AliMedium(61, "SSD Ceramics$",61, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
390   AliMedium(62, "SSD Kapton$",  62, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
391   AliMedium(63, "SSD G10FR4$",  63, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
392   
393   //     275-299 --> General (end-caps, frames, cooling, cables, etc.) 
394   
395   AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
396   // verify density 
397   AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999);
398   AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
399   AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
400   AliMixture( 79, "GEN SERVICES$",  aserv, zserv, 4.68, 4, wserv);
401   AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
402   // After a call with ratios by number (negative number of elements), 
403   // the ratio array is changed to the ratio by weight, so all successive 
404   // calls with the same array must specify the number of elements as 
405   // positive 
406   AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
407   // ** 
408   AliMedium(75,"GEN C$",        75, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
409   AliMedium(76,"GEN Air$",      76, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
410   AliMedium(77,"GEN Vacuum$",   77, 0,ISXFLD,SXMGMX, 10., .10, .1, .100,10.00);
411   AliMedium(78,"GEN POLYETHYL$",78, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
412   AliMedium(79,"GEN SERVICES$", 79, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
413   AliMedium(80,"GEN Copper$",   80, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
414   AliMedium(81,"GEN Water $",   81, 0,ISXFLD,SXMGMX, 10., .01, .1, .003, .003);
415 }
416
417 //_____________________________________________________________________________
418 Int_t AliITS::DistancetoPrimitive(Int_t , Int_t ){
419   //
420   // Distance from mouse to ITS on the screen. Dummy routine
421   //     A dummy routine used by the ROOT macro display.C to allow for the
422   // use of the mouse (pointing device) in the macro. In general this should
423   // never be called. If it is it returns the number 9999 for any value of
424   // x and y.
425   //
426   return 9999;
427 }
428
429 //_____________________________________________________________________________
430 void AliITS::Init(){
431   //
432   // Initialise ITS after it has been built
433   //     This routine initializes the AliITS class. It is intended to be called
434   // from the Init function in AliITSv?. Besides displaying a banner
435   // indicating that it has been called it initializes the array fIdSens.
436   // Therefore it should be called after a call to CreateGeometry.
437   //
438   Int_t i;
439   //
440   printf("\n");
441   for(i=0;i<35;i++) printf("*");
442   printf(" ITS_INIT ");
443   for(i=0;i<35;i++) printf("*");
444   printf("\n");
445   //
446   //
447   for(i=0;i<fIdN;i++) fIdSens[i] = gMC->VolId(fIdName[i]);
448   //
449   for(i=0;i<80;i++) printf("*");
450   printf("\n");
451 }
452
453 //_____________________________________________________________________________
454 void AliITS::MakeBranch(Option_t* option){
455   //
456   // Create Tree branches for the ITS.
457   // Creates the TTree branch where the class AliITS is kept.
458   //
459   Int_t buffersize = 4000;
460   char branchname[10];
461   sprintf(branchname,"%s",GetName());
462
463   AliDetector::MakeBranch(option);
464
465   char *D = strstr(option,"D");
466
467   if (fDigits   && gAlice->TreeD() && D) {
468     gAlice->TreeD()->Branch(branchname,&fDigits, buffersize);
469     printf("Making Branch %s for digits\n",branchname);
470   } // end if
471 }
472
473 //____________________________________________________________________________
474 void AliITS::Streamer(TBuffer &R__b){
475    // Stream an object of class AliITS.
476     Int_t i,j,l;
477
478    if (R__b.IsReading()) {
479       Version_t R__v = R__b.ReadVersion(); 
480       if (R__v == 1) {
481           AliDetector::Streamer(R__b);
482           R__b >> fITSgeom;
483 //        R__b >> fITSmodules; //We do not write out modules so don't read them
484           R__b >> fITSpoints;
485           R__b >> fEuclidOut;
486           R__b >> fIdN;
487           if(fIdSens!=0) delete[] fIdSens;
488           if(fIdName!=0) delete[] fIdName;
489           fIdSens = new Int_t[fIdN];
490           fIdName = new char*[fIdN];
491           for(i=0;i<fIdN;i++) R__b >> fIdSens[i];
492           for(i=0;i<fIdN;i++){
493               R__b >> l;
494               fIdName[i] = new char[l+1]; // add room for null character.
495               for(j=0;j<l;j++) R__b >> fIdName[i][j];
496               fIdName[i][l] = '\0'; // Null terminate this string.
497           } // end for i
498           R__b >> fMajorVersion;
499           R__b >> fMinorVersion;
500       } // end if (R__v)
501    } else {
502       R__b.WriteVersion(AliITS::IsA());
503       AliDetector::Streamer(R__b);
504       R__b << fITSgeom;
505 //    R__b << fITSmodules; //We don't want to write out the modules class.
506       R__b << fITSpoints;
507       R__b << fEuclidOut;
508       R__b << fIdN;
509       for(i=0;i<fIdN;i++) R__b <<fIdSens[i];
510       for(i=0;i<fIdN;i++){
511           l = strlen(fIdName[i]);
512           R__b << l;
513           for(j=0;j<l;j++) R__b << fIdName[i][j];
514       } // end for i
515       R__b << fMajorVersion;
516       R__b << fMinorVersion;
517    }
518 }