Bug fixed in the StepManager to account for the difference in the geometry tree for...
[u/mrichter/AliRoot.git] / ITS / AliITSgeomSDD.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.10  2001/02/09 00:00:57  nilsen
19 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
20 bugs in iostream based streamers used to read and write .det files. Fixed
21 some detector sizes. Fixed bugs in some default-special constructors.
22
23 Revision 1.9  2001/02/03 00:00:30  nilsen
24 New version of AliITSgeom and related files. Now uses automatic streamers,
25 set up for new formatted .det file which includes detector information.
26 Additional smaller modifications are still to come.
27
28 Revision 1.8  2000/10/02 16:32:35  barbera
29 Forward declaration added
30
31 Revision 1.2.4.8  2000/10/02 15:52:05  barbera
32 Forward declaration added
33
34 Revision 1.7  2000/07/10 16:07:18  fca
35 Release version of ITS code
36
37 Revision 1.2.4.2  2000/03/04 23:55:35  nilsen
38 Fixed up comments/documentation.
39
40 Revision 1.2.4.1  2000/01/12 19:03:32  nilsen
41 This is the version of the files after the merging done in December 1999.
42 See the ReadMe110100.txt file for details
43
44 Revision 1.2  1999/09/29 09:24:20  fca
45 Introduction of the Copyright and cvs Log
46
47 */
48 #include <iostream.h>
49 #include <iomanip.h>
50 #include <stdlib.h>
51 #include <TShape.h>
52 #include <TBRIK.h>
53
54 #include "AliITSgeomSDD.h"
55
56 ClassImp(AliITSgeomSDD)
57 AliITSgeomSDD::AliITSgeomSDD(){
58 ////////////////////////////////////////////////////////////////////////
59 //    default constructor
60 ////////////////////////////////////////////////////////////////////////
61 //    const Float_t kDx = 3.500;//cm. (Geant 3.12 units) Orthonormal to y and z
62 //    const Float_t kDy = 0.014;//cm. (Geant 3.12 units) Radialy from the Beam
63 //    const Float_t kDz = 3.763;//cm. (Geant 3.12 units) Allong the Beam Pipe
64
65 //    cout << "AliITSgeomSDD default creator called: start" << endl;
66     fPeriod        = 0.0;
67     fDvelocity     = 0.0;
68     fNAnodesL      = 0;
69     fNAnodesR      = 0;
70     fAnodeXL       = 0.0;
71     fAnodeXR       = 0.0;
72     fAnodeLowEdgeL = 0;
73     fAnodeLowEdgeR = 0;
74     fShapeSDD      = 0;
75 //    cout << "AliITSgeomSDD default creator called: end" << endl;
76 }
77 //________________________________________________________________________
78 AliITSgeomSDD::AliITSgeomSDD(const Float_t *box,Float_t per,Float_t vel,
79                              Float_t axL,Float_t axR,
80                              Int_t nAL,Float_t *leL,
81                              Int_t nAR,Float_t *leR){
82 ////////////////////////////////////////////////////////////////////////
83 //    Standard constructor
84 ////////////////////////////////////////////////////////////////////////
85     fPeriod        = 0.0;
86     fDvelocity     = 0.0;
87     fNAnodesL      = 0;
88     fNAnodesR      = 0;
89     fAnodeXL       = 0.0;
90     fAnodeXR       = 0.0;
91     fAnodeLowEdgeL = 0;
92     fAnodeLowEdgeR = 0;
93     fShapeSDD      = 0;
94     ResetSDD(box,per,vel,axL,axR,nAL,leL,nAR,leR);
95 }
96 //________________________________________________________________________
97 void AliITSgeomSDD::ResetSDD(const Float_t *box,Float_t per,Float_t vel,
98                              Float_t axL,Float_t axR,
99                              Int_t nAL,Float_t *leL,
100                              Int_t nAR,Float_t *leR){
101 ////////////////////////////////////////////////////////////////////////
102 //    Standard Filler
103 ////////////////////////////////////////////////////////////////////////
104     Int_t i;
105
106     fPeriod        = per;
107     fDvelocity     = vel;
108     fNAnodesL      = nAL;
109     fNAnodesR      = nAR;
110     fAnodeXL       = axL;
111     fAnodeXR       = axR;
112 //    if(fAnodeLowEdgeL!=0) delete fAnodeLowEdgeL;
113     fAnodeLowEdgeL = new Float_t[fNAnodesL];
114 //    if(fAnodeLowEdgeR!=0) delete fAnodeLowEdgeR;
115     fAnodeLowEdgeR = new Float_t[fNAnodesR];
116     for(i=0;i<fNAnodesL;i++) fAnodeLowEdgeL[i] = leL[i];
117     for(i=0;i<fNAnodesR;i++) fAnodeLowEdgeR[i] = leR[i];
118     fShapeSDD = new TBRIK("ActiveSDD","Active volume of SDD","SDD SI DET",
119                                box[0],box[1],box[2]);
120 }
121 //________________________________________________________________________
122 AliITSgeomSDD::~AliITSgeomSDD(){
123 // Destructor
124
125     if(fShapeSDD!=0) delete fShapeSDD;
126     if(fAnodeLowEdgeL!=0) delete fAnodeLowEdgeL;
127     if(fAnodeLowEdgeR!=0) delete fAnodeLowEdgeR;
128     fShapeSDD  = 0;
129     fPeriod    = 0.0;
130     fDvelocity = 0.0;
131     fAnodeXL   = 0.0;
132     fAnodeXR   = 0.0;
133     fNAnodesL  = 0;
134     fNAnodesR  = 0;
135     fAnodeLowEdgeL = 0;
136     fAnodeLowEdgeR = 0;
137 }
138 //________________________________________________________________________
139 AliITSgeomSDD::AliITSgeomSDD(AliITSgeomSDD &source){
140     // Copy constructor
141     Int_t i;
142
143     if(this==&source) return;
144     this->fShapeSDD  = new TBRIK(*(source.fShapeSDD));
145     this->fPeriod    = source.fPeriod;
146     this->fDvelocity = source.fDvelocity;
147     this->fNAnodesL  = source.fNAnodesL;
148     this->fNAnodesR  = source.fNAnodesR;
149     this->fAnodeXL  = source.fAnodeXL;
150     this->fAnodeXR  = source.fAnodeXR;
151     if(fAnodeLowEdgeL!=0) delete fAnodeLowEdgeL;
152     this->fAnodeLowEdgeL = new Float_t[fNAnodesL];
153     if(fAnodeLowEdgeR!=0) delete fAnodeLowEdgeR;
154     this->fAnodeLowEdgeR = new Float_t[fNAnodesR];
155     for(i=0;i<fNAnodesL;i++)this->fAnodeLowEdgeL[i] = source.fAnodeLowEdgeL[i];
156     for(i=0;i<fNAnodesR;i++)this->fAnodeLowEdgeR[i] = source.fAnodeLowEdgeR[i];
157     return;
158 }
159 //________________________________________________________________________
160 AliITSgeomSDD& AliITSgeomSDD::operator=(AliITSgeomSDD &source){
161     // = operator
162     Int_t i;
163
164     if(this==&source) return *this;
165     this->fShapeSDD  = new TBRIK(*(source.fShapeSDD));
166     this->fPeriod    = source.fPeriod;
167     this->fDvelocity = source.fDvelocity;
168     this->fNAnodesL  = source.fNAnodesL;
169     this->fNAnodesR  = source.fNAnodesR;
170     this->fNAnodesR  = source.fNAnodesR;
171     this->fAnodeXL  = source.fAnodeXL;
172     this->fAnodeXR  = source.fAnodeXR;
173     if(fAnodeLowEdgeL!=0) delete fAnodeLowEdgeL;
174     this->fAnodeLowEdgeL = new Float_t[fNAnodesL];
175     if(fAnodeLowEdgeR!=0) delete fAnodeLowEdgeR;
176     this->fAnodeLowEdgeR = new Float_t[fNAnodesR];
177     for(i=0;i<fNAnodesL;i++)this->fAnodeLowEdgeL[i] = source.fAnodeLowEdgeL[i];
178     for(i=0;i<fNAnodesR;i++)this->fAnodeLowEdgeR[i] = source.fAnodeLowEdgeR[i];
179     return *this;
180 }
181 //______________________________________________________________________
182 void AliITSgeomSDD::Local2Det(Float_t xl,Float_t zl,Int_t &a,Int_t &t,Int_t &s){
183 // Give the local detector coordinate it returns the anode number, time
184 // bucket, and detector side.
185     Int_t i;
186
187     if(xl>0) {
188         if(zl<fAnodeLowEdgeR[0]) i=-1;
189         else for(i=0;i<fNAnodesR;i++) if(zl<fAnodeLowEdgeR[i]) break;
190         a = i;
191         s = 1;
192     } else if(xl<0){
193         if(zl<fAnodeLowEdgeL[0]) i=-1;
194         else for(i=0;i<fNAnodesL;i++) if(zl<fAnodeLowEdgeL[i]) break;
195         a = i;
196         s = 0;
197     } else { // x==0.
198         if(zl<fAnodeLowEdgeR[0]) i=-1;
199         else for(i=0;i<fNAnodesR;i++) if(zl<fAnodeLowEdgeR[i]) break;
200         a = i;
201         if(zl<fAnodeLowEdgeL[0]) i=-1;
202         else for(i=0;i<fNAnodesL;i++) if(zl<fAnodeLowEdgeL[i]) break;
203         s = -i;
204     } // end if
205     t = (Int_t)TMath::Abs((GetAnodeX(a,s)-xl)/fDvelocity/fPeriod);
206     return;
207 }
208 //______________________________________________________________________
209 void AliITSgeomSDD::Det2Local(Int_t a,Int_t t,Int_t s,Float_t &xl,Float_t &zl){
210 // Give the anode number, time bucket, and detector side, it returns the
211 // local detector coordinate.
212
213     zl = 0.5*GetAnodeZ(a,s);
214     if(s==0){
215         xl = GetAnodeX(a,s)+(t+0.5)*fPeriod*fDvelocity;
216     } else { // s==1
217         xl = GetAnodeX(a,s)-(t+0.5)*fPeriod*fDvelocity;
218     } // end if s==0;
219     return;
220 }
221 //______________________________________________________________________
222 void AliITSgeomSDD::Print(ostream *os) const {
223 ////////////////////////////////////////////////////////////////////////
224 // Standard output format for this class.
225 ////////////////////////////////////////////////////////////////////////
226     Int_t i;
227     Int_t fmt;
228
229     fmt = os->setf(ios::scientific);  // set scientific floating point output
230     *os << "TBRIK" << " ";
231     *os << setprecision(16) << GetDx() << " ";
232     *os << setprecision(16) << GetDy() << " ";
233     *os << setprecision(16) << GetDz() << " ";
234     *os << setprecision(16) << fPeriod << " ";
235     *os << setprecision(16) << fDvelocity << " ";
236     *os << fNAnodesL << " ";
237     *os << fNAnodesR << " ";
238     *os << fAnodeXL << " ";
239     *os << fAnodeXR << " ";
240     for(i=0;i<fNAnodesL;i++) *os <<setprecision(16)<<fAnodeLowEdgeL[i]<< " ";
241     for(i=0;i<fNAnodesR;i++) *os <<setprecision(16)<<fAnodeLowEdgeR[i]<< " ";
242     *os << endl;
243     os->flags(fmt); // reset back to old formating.
244     return;
245 }
246 //______________________________________________________________________
247 void AliITSgeomSDD::Read(istream *is){
248 ////////////////////////////////////////////////////////////////////////
249 // Standard input format for this class.
250 ////////////////////////////////////////////////////////////////////////
251     Int_t i;
252     Float_t dx,dy,dz;
253     char shp[20];
254
255     *is >> shp;
256     *is >> dx >> dy >> dz;
257     if(fShapeSDD!=0) delete fShapeSDD;
258     fShapeSDD = new TBRIK("ActiveSDD","Active volume of SDD","SDD SI DET",
259                             dx,dy,dz);
260     *is >> fPeriod >> fDvelocity >> fNAnodesL >> fNAnodesR;
261     *is >> fAnodeXL >> fAnodeXR;
262     if(fAnodeLowEdgeL!=0) delete fAnodeLowEdgeL;
263     this->fAnodeLowEdgeL = new Float_t[fNAnodesL];
264     if(fAnodeLowEdgeR!=0) delete fAnodeLowEdgeR;
265     this->fAnodeLowEdgeR = new Float_t[fNAnodesR];
266     for(i=0;i<fNAnodesL;i++) *is >> fAnodeLowEdgeL[i];
267     for(i=0;i<fNAnodesR;i++) *is >> fAnodeLowEdgeR[i];
268     return;
269 }
270 //----------------------------------------------------------------------
271 ostream &operator<<(ostream &os,AliITSgeomSDD &p){
272 ////////////////////////////////////////////////////////////////////////
273 // Standard output streaming function.
274 ////////////////////////////////////////////////////////////////////////
275
276     p.Print(&os);
277     return os;
278 }
279 //----------------------------------------------------------------------
280 istream &operator>>(istream &is,AliITSgeomSDD &r){
281 ////////////////////////////////////////////////////////////////////////
282 // Standard input streaming function.
283 ////////////////////////////////////////////////////////////////////////
284
285     r.Read(&is);
286     return is;
287 }
288 //======================================================================
289 /*
290 $Log$
291 Revision 1.10  2001/02/09 00:00:57  nilsen
292 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
293 bugs in iostream based streamers used to read and write .det files. Fixed
294 some detector sizes. Fixed bugs in some default-special constructors.
295
296 Revision 1.9  2001/02/03 00:00:30  nilsen
297 New version of AliITSgeom and related files. Now uses automatic streamers,
298 set up for new formatted .det file which includes detector information.
299 Additional smaller modifications are still to come.
300
301 */
302 //#include <iostream.h>
303 //#include <TBRIK.h>
304
305 //#include "AliITSgeomSDD256.h"
306
307 ClassImp(AliITSgeomSDD256)
308
309 AliITSgeomSDD256::AliITSgeomSDD256() : AliITSgeomSDD(){
310     // Default Constructor
311 }
312 //----------------------------------------------------------------------
313 AliITSgeomSDD256::AliITSgeomSDD256(Int_t npar,Float_t *par) : AliITSgeomSDD(){
314 ////////////////////////////////////////////////////////////////////////
315 //    constructor
316 /*
317 Pads for probe cards in ALICE-D2       /05.03.2000/
318 (X,Y) coordinates are quoted in microns and referred to the centers of 
319 bonding pads. (0, 0) corrispond to the center of the detector.
320 Convention: 
321 left is for negative X, right is for positive X;
322 DOWN half is for negative Y, UP half is for positive Y.
323
324 Detector size: X= 87588 micrometers; Y= 72500 micrometers. 
325 Detector corners:
326   LEFT UP: (-43794, 36250)
327 RIGHT UP:  (43794, 36250)
328  LEFT DOWN: (-43794, -36250)
329 RIGHT DOWN:  (43794, -36250)
330
331         Drift cathodes (n-side)
332
333 cathode #0 (Ubias) 
334 (-1477, 0), pad size (150, 60)
335    (875, 0), pad size (150, 60)
336 (-36570, 0), pad size (200, 70)
337 (-37570, 0), pad size (200, 70)
338 (36570, 0), pad size (200, 70)
339 (37570, 0), pad size (200, 70)
340
341 cathode #1 DOWN half 
342 (-1477, -120), pad size (150, 60)
343    (875, -120), pad size (150, 60)
344 (-36570, -120), pad size (200, 70)
345 (-37570, -120), pad size (200, 70)
346 (36570, -120), pad size (200, 70)
347 (37570, -120), pad size (200, 70)
348
349 cathode #2 DOWN half 
350 (-1477, -240), pad size (150, 60)
351    (875, -240), pad size (150, 60)
352 (-36570, -240), pad size (200, 70)
353 (-37570, -240), pad size (200, 70)
354 (36570, -240), pad size (200, 70)
355 (37570, -240), pad size (200, 70)
356
357 cathode #3 DOWN half 
358 (-1477, -360), pad size (150, 60)
359    (875, -360), pad size (150, 60)
360 (-36570, -360), pad size (200, 70)
361 (-37570, -360), pad size (200, 70)
362 (36570, -360), pad size (200, 70)
363 (37570, -360), pad size (200, 70)
364 .....................................
365 ......................................
366 ......................................
367 cathode #30 DOWN half
368 (-1477, -3600), pad size (150, 60)
369    (875, -3600), pad size (150, 60)
370 (-36570, -3600), pad size (200, 70)
371 (-37570, -3600), pad size (200, 70)
372 (36570, -3600), pad size (200, 70)
373 (37570, -3600), pad size (200, 70)
374 ...................................
375 cathode #60 DOWN half
376 (-1477, -7200), pad size (150, 60)
377    (875, -7200), pad size (150, 60)
378 (-36570, -7200), pad size (200, 70)
379 (-37570, -7200), pad size (200, 70)
380 (36570, -7200), pad size (200, 70)
381 (37570, -7200), pad size (200, 70)
382 ....................................
383 cathode #90 DOWN half
384 (-1477, -10800), pad size (150, 60)
385    (875, -10800), pad size (150, 60)
386 (-36570, -10800), pad size (200, 70)
387 (-37570, -10800), pad size (200, 70)
388 (36570, -10800), pad size (200, 70)
389 (37570, -10800), pad size (200, 70)
390 ....................................
391 cathode #120 DOWN half
392 (-1477, -14400), pad size (150, 60)
393    (875, -14400), pad size (150, 60)
394 (-36570, -14400), pad size (200, 70)
395 (-37570, -14400), pad size (200, 70)
396 (36570, -14400), pad size (200, 70)
397 (37570, -14400), pad size (200, 70)
398 ....................................
399 cathode #150 DOWN half
400 (-1477, -18000), pad size (150, 60)
401    (875, -18000), pad size (150, 60)
402 (-36570, -18000), pad size (200, 70)
403 (-37570, -18000), pad size (200, 70)
404 (36570, -18000), pad size (200, 70)
405 (37570, -18000), pad size (200, 70)
406 ....................................
407 cathode #180 DOWN half
408 (-1477, -21600), pad size (150, 60)
409    (875, -21600), pad size (150, 60)
410 (-36570, -21600), pad size (200, 70)
411 (-37570, -21600), pad size (200, 70)
412 (36570, -21600), pad size (200, 70)
413 (37570, -21600), pad size (200, 70)
414 ....................................
415 cathode #210 DOWN half
416 (-1477, -25200), pad size (150, 60)
417    (875, -25200), pad size (150, 60)
418 (-36570, -25200), pad size (200, 70)
419 (-37570, -25200), pad size (200, 70)
420 (36570, -25200), pad size (200, 70)
421 (37570, -25200), pad size (200, 70)
422 ....................................
423 cathode #240 DOWN half
424 (-1477, -28800), pad size (150, 60)
425    (875, -28800), pad size (150, 60)
426 (-36570, -28800), pad size (200, 70)
427 (-37570, -28800), pad size (200, 70)
428 (36570, -28800), pad size (200, 70)
429 (37570, -28800), pad size (200, 70)
430 ....................................
431 cathode #270 DOWN half
432 (-1477, -32400), pad size (150, 60)
433    (875, -32400), pad size (150, 60)
434 (-36570, -32400), pad size (200, 70)
435 (-37570, -32400), pad size (200, 70)
436 (36570, -32400), pad size (200, 70)
437 (37570, -32400), pad size (200, 70)
438 ....................................
439 cathode #290 DOWN half
440 (-1477, -34800), pad size (150, 60)
441    (875, -34800), pad size (150, 60)
442 (-36570, -34800), pad size (200, 70)
443 (-37570, -34800), pad size (200, 70)
444 (36570, -34800), pad size (200, 70)
445 (37570, -34800), pad size (200, 70)
446 ___________________________________________________
447 cathode #1 UP half 
448 (-1477, 120), pad size (150, 60)
449    (875, 120), pad size (150, 60)
450 (-36570, 120), pad size (200, 70)
451 (-37570, 120), pad size (200, 70)
452 (36570, 120), pad size (200, 70)
453 (37570, 120), pad size (200, 70)
454
455 cathode #2 UP half 
456 (-1477, 240), pad size (150, 60)
457    (875, 240), pad size (150, 60)
458 (-36570, 240), pad size (200, 70)
459 (-37570, 240), pad size (200, 70)
460 (36570, 240), pad size (200, 70)
461 (37570, 240), pad size (200, 70)
462
463 cathode #3 UP half 
464 (-1477, 360), pad size (150, 60)
465    (875, 360), pad size (150, 60)
466 (-36570, 360), pad size (200, 70)
467 (-37570, 360), pad size (200, 70)
468 (36570, 360), pad size (200, 70)
469 (37570, 360), pad size (200, 70)
470 .....................................
471 ......................................
472 ......................................
473 cathode #30 UP half
474 (-1477, 3600), pad size (150, 60)
475    (875, 3600), pad size (150, 60)
476 (-36570, 3600), pad size (200, 70)
477 (-37570, 3600), pad size (200, 70)
478 (36570, 3600), pad size (200, 70)
479 (37570, 3600), pad size (200, 70)
480 ......................................
481 cathode #60 UP half
482 (-1477, 7200), pad size (150, 60)
483    (875, 7200), pad size (150, 60)
484 (-36570, 7200), pad size (200, 70)
485 (-37570, 7200), pad size (200, 70)
486 (36570, 7200), pad size (200, 70)
487 (37570, 7200), pad size (200, 70)
488 ......................................
489 cathode #90 UP half
490 (-1477, 10800), pad size (150, 60)
491    (875, 10800), pad size (150, 60)
492 (-36570, 10800), pad size (200, 70)
493 (-37570, 10800), pad size (200, 70)
494 (36570, 10800), pad size (200, 70)
495 (37570, 10800), pad size (200, 70)
496 ......................................
497 cathode #120 UP half
498 (-1477, 14400), pad size (150, 60)
499    (875, 14400), pad size (150, 60)
500 (-36570, 14400), pad size (200, 70)
501 (-37570, 14400), pad size (200, 70)
502 (36570, 14400), pad size (200, 70)
503 (37570, 14400), pad size (200, 70)
504 ......................................
505 cathode #150 UP half
506 (-1477, 18000), pad size (150, 60)
507    (875, 18000), pad size (150, 60)
508 (-36570, 18000), pad size (200, 70)
509 (-37570, 18000), pad size (200, 70)
510 (36570, 18000), pad size (200, 70)
511 (37570, 18000), pad size (200, 70)
512 ......................................
513 cathode #180 UP half
514 (-1477, 21600), pad size (150, 60)
515    (875, 21600), pad size (150, 60)
516 (-36570, 21600), pad size (200, 70)
517 (-37570, 21600), pad size (200, 70)
518 (36570, 21600), pad size (200, 70)
519 (37570, 21600), pad size (200, 70)
520 ......................................
521 cathode #210 UP half
522 (-1477, 25200), pad size (150, 60)
523    (875, 25200), pad size (150, 60)
524 (-36570, 25200), pad size (200, 70)
525 (-37570, 25200), pad size (200, 70)
526 (36570, 25200), pad size (200, 70)
527 (37570, 25200), pad size (200, 70)
528 ......................................
529 cathode #240 UP half
530 (-1477, 28800), pad size (150, 60)
531    (875, 28800), pad size (150, 60)
532 (-36570, 28800), pad size (200, 70)
533 (-37570, 28800), pad size (200, 70)
534 (36570, 28800), pad size (200, 70)
535 (37570, 28800), pad size (200, 70)
536 ......................................
537 cathode #270 UP half
538 (-1477, 32400), pad size (150, 60)
539    (875, 32400), pad size (150, 60)
540 (-36570, 32400), pad size (200, 70)
541 (-37570, 32400), pad size (200, 70)
542 (36570, 32400), pad size (200, 70)
543 (37570, 32400), pad size (200, 70)
544 ......................................
545 cathode #290 UP half
546 (-1477, 34800), pad size (150, 60)
547    (875, 34800), pad size (150, 60)
548 (-36570, 34800), pad size (200, 70)
549 (-37570, 34800), pad size (200, 70)
550 (36570, 34800), pad size (200, 70)
551 (37570, 34800), pad size (200, 70)
552         Injectors (n-side)
553
554 Central line injectors (DOWN half)
555 (-1237, -660), pad size (150, 65)
556 (1115, -660), pad size (150, 65)
557 (37890, -660), pad size (100, 74)
558
559 Middle line injectors (DOWN half)
560 (-1237, -17460), pad size (150, 80)
561 (1115, -17460), pad size (150, 80)
562 (37890, -17460), pad size (100, 74)
563
564 Bottom line injectors (DOWN half)
565 (-1237, -34020), pad size (150, 80)
566 (1115, -34020), pad size (150, 80)
567 (37890, -34020), pad size (100, 74)
568 ___________________________________________
569 Central line injectors (UP half)
570 (-1237, 660), pad size (150, 65)
571 (1115, 660), pad size (150, 65)
572 (37890, 660), pad size (100, 74)
573
574 Middle line injectors (UP half)
575 (-1237, 17460), pad size (150, 80)
576 (1115, 17460), pad size (150, 80)
577 (37890, 17460), pad size (100, 74)
578
579 Bottom line injectors (UP half)
580 (-1237, 34020), pad size (150, 80)
581 (1115, 34020), pad size (150, 80)
582 (37890, 34020), pad size (100, 74)
583
584 Drift cathodes and injectors of p-side have the bonding pads with the same 
585 coordinates as for the n-side (when looking through the masks)
586
587         Cathodes of the collection zone (n-side)
588
589 cathode #291 (-40 V) DOWN half
590 (-38220, -35055), pad size (120, 160)
591 (38190, -34992), pad size (120, 145)
592
593 GRID cathode (-15 V) DOWN half
594 (-37988, -35085), pad size (144, 210)
595   (37988, -35085), pad size (144, 210)
596
597 cathode #292 (-30 V) DOWN half
598 (-38245, -35290), pad size (100, 170)
599 (38210, -35242), pad size (150, 215)
600
601 cathode #293 (-15 V) DOWN half
602 (-38055, -35460), pad size (690, 70)
603 (36488, -35460), pad size (3805, 70)
604
605 n+ bulk contact (GND) DOWN half
606 (-38300, -36050), pad size (1000, 395)
607 (38300, -36050), pad size (1000, 395)
608
609 bonding pad of the last integrated resistor DOWN half
610 /it has to be connected to the GND/
611 (-38190, -35620) pad size (160, 110)
612 ________________________________________________ 
613 cathode #291 (-40 V) UP half
614 (-38220, 35055), pad size (120, 160)
615 (38190, 34992), pad size (120, 145)
616
617 GRID cathode (-15 V) UP half
618 (-37988, 35085), pad size (144, 210)
619   (37988, 35085), pad size (144, 210)
620
621 cathode #292 (-30 V) UP half
622 (-38245, 35290), pad size (100, 170)
623 (38210, 35242), pad size (150, 215)
624
625 cathode #293 (-15 V) UP half
626 (-38055, 35460), pad size (690, 70)
627 (36488, 35460), pad size (3805, 70)
628
629 n+ bulk contact (GND) UP half
630 (-38300, 36050), pad size (1000, 395)
631 (38300, 36050), pad size (1000, 395)
632
633 bonding pad of the last integrated resistor UP half
634 /it has to be connected to the GND/
635 (-38190, 35620) pad size (160, 110)
636
637 Cathodes of the collection zone (p-side)
638
639 cathode #291 (-40 V) DOWN half
640 (-38215, -35055), pad size (120, 160)
641 (38190, -34992), pad size (120, 145)
642
643 cathode W1 (-60 V) DOWN half
644 (-38000, -35110), pad size (140, 240)
645  (38000, -35110), pad size (140, 240)
646
647 cathode W2 (-80 V) DOWN half
648 ( 0, -35090), pad size (75600, 110)
649
650 cathode #292 (-40 V) DOWN half
651 (-38220, -35290), pad size (150, 170)
652 (38210, -35242), pad size (150, 215)
653
654 p+ bulk contact (GND) DOWN half
655 (-38300, -36050), pad size (1000, 395)
656 (38300, -36050), pad size (1000, 395)
657
658 It is necessary to connect cathode #291 to cathode #292 in order to
659 close the integrated divider to p+ bulk contact (GND).
660
661 _______________________________________________
662 cathode #291 (-40 V) UP half
663 (-38215, 35055), pad size (120, 160)
664 (38190, 34992), pad size (120, 145)
665
666 cathode W1 (-60 V) UP half
667 (-38000, 35110), pad size (140, 240)
668  (38000, 35110), pad size (140, 240)
669
670 cathode W2 (-80 V) UP half
671 ( 0, 35090), pad size (75600, 110)
672
673 cathode #292 (-40 V) UP half
674 (-38220, 35290), pad size (150, 170)
675 (38210, 35242), pad size (150, 215)
676
677 p+ bulk contact (GND) UP half
678 (-38300, 36050), pad size (1000, 395)
679 (38300, 36050), pad size (1000, 395)
680
681 It is necessary to connect cathode #291 to cathode #292 in order to
682 close the integrated divider to p+ bulk contact (GND).
683
684         Anodes (n-side)
685 There are 256 anodes to be bonded to the inputs of front-end electronics. In 
686 addition there are 2 anodes (one at the left edge and one at the right edge 
687 of the anode array) that have to be bonded to the ground. I call these 2 
688 anodes #L and #R. The pitch of all anodes is 294 micrometers.
689
690                 DOWN half anodes
691 #L             (-37779, -35085), pad size (184, 140)
692 #1             (-37485, -35085), pad size (184, 140)
693 .........................................
694 .........................................
695 #256.............(37485, -35085), pad size (184, 140)
696 #R              (37779, -35085), pad size (184, 140)
697 _____________________________________________
698                 UP half anodes
699 #L             (-37779, 35085), pad size (184, 140)
700 #1             (-37485, 35085), pad size (184, 140)
701 .........................................
702 .........................................
703 #256.............(37485, 35085), pad size (184, 140)
704 #R              (37779, 35085), pad size (184, 140)
705 */
706 ////////////////////////////////////////////////////////////////////////
707     const Float_t kDxyz[]   = {3.6250,0.01499,4.3794};//cm. (Geant 3.12 units)
708                                       // Size of sensitive region of detector
709     const Float_t kPeriod   = 25.0E-09; // 40 MHz sampling frequence
710     const Float_t kVelocity = 5.46875E+03; // cm/s drift velocity
711     const Float_t kAnodeXL  = -3.5085; // cm location in x of anodes left side
712     const Float_t kAnodeXR  =  3.5085; // cm location in x of anodes right side
713     const Int_t   kNAnodes  = 256;  // nuber of anodes connected
714     const Float_t kAnodePitch = 0.0294; // cm
715     const Float_t kAnodesZ  = -3.7485; // cm Starting location of anodes in z
716     Float_t AnodeLowEdges[kNAnodes+1];
717     Int_t i;
718
719 //    cout << "AliITSgeomSDD256 default creator called: start" << end;
720     AnodeLowEdges[0] = kAnodesZ;
721     for(i=0;i<kNAnodes;i++) AnodeLowEdges[i+1] = kAnodePitch+AnodeLowEdges[i];
722     AliITSgeomSDD::ResetSDD(par,kPeriod,kVelocity,kAnodeXL,kAnodeXR,
723                             kNAnodes+1,AnodeLowEdges,
724                             kNAnodes+1,AnodeLowEdges);
725 //    cout << "AliITSgeomSDD256 default creator called: end" << endl;
726 }
727 //________________________________________________________________________
728 ostream &operator<<(ostream &os,AliITSgeomSDD256 &p){
729 ////////////////////////////////////////////////////////////////////////
730 // Standard output streaming function.
731 ////////////////////////////////////////////////////////////////////////
732
733     p.Print(&os);
734     return os;
735 }
736 //----------------------------------------------------------------------
737 istream &operator>>(istream &is,AliITSgeomSDD256 &r){
738 ////////////////////////////////////////////////////////////////////////
739 // Standard input streaming function.
740 ////////////////////////////////////////////////////////////////////////
741
742     r.Read(&is);
743     return is;
744 }
745 //======================================================================
746 /*
747 $Log$
748 Revision 1.10  2001/02/09 00:00:57  nilsen
749 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
750 bugs in iostream based streamers used to read and write .det files. Fixed
751 some detector sizes. Fixed bugs in some default-special constructors.
752
753 Revision 1.9  2001/02/03 00:00:30  nilsen
754 New version of AliITSgeom and related files. Now uses automatic streamers,
755 set up for new formatted .det file which includes detector information.
756 Additional smaller modifications are still to come.
757
758 */
759 //#include <iostream.h>
760 //#include <TBRIK.h>
761
762 //#include "AliITSgeomSDD300.h"
763
764 ClassImp(AliITSgeomSDD300)
765
766 AliITSgeomSDD300::AliITSgeomSDD300() : AliITSgeomSDD(){
767 ////////////////////////////////////////////////////////////////////////
768 //    default constructor
769 ////////////////////////////////////////////////////////////////////////
770     const Float_t kDxyz[] = {3.500,0.014,3.763};//cm.
771     const Float_t kPeriod = 25.0E-09; // 40 MHz
772     const Float_t kVelocity = 5.46875E+3; // cm/s
773     const Int_t kNAnodes = 300; // number of anodes
774     const Float_t kAnodeXL = -3.500; // cm
775     const Float_t kAnodeXR = +3.500; // cm
776     const Float_t kAnodesZ = -3.75; // cm
777     Float_t AnodeLowEdges[kNAnodes+1];
778     const Float_t kanode = 0.0250;// cm anode separation.
779     Int_t i;
780
781 //    cout << "AliITSgeomSDD300 default creator called: start" << endl;
782     AnodeLowEdges[0] = kAnodesZ;
783     for(i=0;i<kNAnodes;i++) AnodeLowEdges[i+1] = kanode+AnodeLowEdges[i];
784     AliITSgeomSDD::ResetSDD(kDxyz,kPeriod,kVelocity,kAnodeXL,kAnodeXR,
785                             kNAnodes+1,AnodeLowEdges,
786                             kNAnodes+1,AnodeLowEdges);
787 //    cout << "AliITSgeomSDD300 default creator called: end" << endl;
788 }
789 //________________________________________________________________________
790 ostream &operator<<(ostream &os,AliITSgeomSDD300 &p){
791 ////////////////////////////////////////////////////////////////////////
792 // Standard output streaming function.
793 ////////////////////////////////////////////////////////////////////////
794
795     p.Print(&os);
796     return os;
797 }
798 //----------------------------------------------------------------------
799 istream &operator>>(istream &is,AliITSgeomSDD300 &r){
800 ////////////////////////////////////////////////////////////////////////
801 // Standard input streaming function.
802 ////////////////////////////////////////////////////////////////////////
803
804     r.Read(&is);
805     return is;
806 }
807 //----------------------------------------------------------------------