Bug fixed in the StepManager to account for the difference in the geometry tree for...
[u/mrichter/AliRoot.git] / ITS / AliITSgeomSPD.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/04/26 22:44:34  nilsen
19 Bug fix.
20
21 Revision 1.9  2001/02/09 00:00:57  nilsen
22 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
23 bugs in iostream based streamers used to read and write .det files. Fixed
24 some detector sizes. Fixed bugs in some default-special constructors.
25
26 Revision 1.8  2001/02/03 00:00:30  nilsen
27 New version of AliITSgeom and related files. Now uses automatic streamers,
28 set up for new formatted .det file which includes detector information.
29 Additional smaller modifications are still to come.
30
31 */
32
33 #include <iostream.h>
34 #include <iomanip.h>
35 #include <TShape.h>
36 #include <TMath.h>
37
38 #include "AliITSgeomSPD.h"
39
40 ClassImp(AliITSgeomSPD)
41
42 AliITSgeomSPD::AliITSgeomSPD(){
43 // Default Constructor. Set everthing to null.
44
45     fShapeSPD    = 0;
46     fNbinx       = 0;
47     fNbinz       = 0;
48     fLowBinEdgeX = 0;
49     fLowBinEdgeZ = 0;
50 }
51 //______________________________________________________________________
52 AliITSgeomSPD::AliITSgeomSPD(Float_t dy,Int_t nx,Float_t *bx,
53                              Int_t nz,Float_t *bz){
54 // Standard Constructor. Set everthing to null.
55
56     fShapeSPD    = 0;
57     fNbinx       = 0;
58     fNbinz       = 0;
59     fLowBinEdgeX = 0;
60     fLowBinEdgeZ = 0;
61     ReSetBins(dy,nx,bx,nz,bz);
62     return;
63 }
64 //______________________________________________________________________
65 void AliITSgeomSPD::ReSetBins(Float_t dy,Int_t nx,Float_t *bx,
66                               Int_t nz,Float_t *bz){
67 // delets the contents of this and replaces it with the given values.
68     Int_t i;
69     Float_t dx = 0.0, dz = 0.0;
70
71     // Compute size in x and z (based on bins).
72     for(i=0;i<nx;i++) dx += bx[i];
73     for(i=0;i<nz;i++) dz += bz[i];
74     dx *= 0.5;
75     dz *= 0.5;
76
77     delete fShapeSPD; // delete existing shape
78     if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX; // delete existing
79     if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ; // delete existing
80
81     SetNbinX(nx);
82     SetNbinZ(nz);
83     InitLowBinEdgeX();
84     InitLowBinEdgeZ();
85     fLowBinEdgeX[0] = -dx;
86     fLowBinEdgeZ[0] = -dz;
87     for(i=0;i<nx;i++) fLowBinEdgeX[i+1] = fLowBinEdgeX[i] + bx[i];
88     for(i=0;i<nz;i++) fLowBinEdgeZ[i+1] = fLowBinEdgeZ[i] + bz[i];
89     SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,dy,dz);
90     return;
91 }
92 //______________________________________________________________________
93 AliITSgeomSPD::AliITSgeomSPD(AliITSgeomSPD &source){
94     // Copy constructor
95
96     *this = source; // just use the = operator for now.
97     return;
98 }
99 //______________________________________________________________________
100 AliITSgeomSPD& AliITSgeomSPD::operator=(AliITSgeomSPD &source){
101     // = operator
102     Int_t i;
103
104     if(&source == this) return *this;
105     this->fShapeSPD = new TBRIK(*(source.fShapeSPD));
106     if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX;
107     if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ;
108     this->fNbinx = source.fNbinx;
109     this->fNbinz = source.fNbinz;
110     this->InitLowBinEdgeX();
111     this->InitLowBinEdgeZ();
112     for(i=0;i<fNbinx;i++) this->fLowBinEdgeX[i] = source.fLowBinEdgeX[i];
113     for(i=0;i<fNbinz;i++) this->fLowBinEdgeZ[i] = source.fLowBinEdgeZ[i];
114     return *this;
115 }
116 //______________________________________________________________________
117 AliITSgeomSPD::~AliITSgeomSPD(){
118 // Destructor
119
120     delete fShapeSPD;
121     if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX;
122     if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ;
123     fShapeSPD    = 0;
124     fNbinx       = 0;
125     fNbinz       = 0;
126     fLowBinEdgeX = 0;
127     fLowBinEdgeZ = 0;
128 }
129 //______________________________________________________________________
130 void AliITSgeomSPD::LToDet(Float_t xl,Float_t zl,Int_t &row,Int_t &col){
131 // Returns the row and column pixel numbers for a given local coordinate
132 // system. If they are outside then it will return -1 or fNbinx/z.
133     Int_t i;
134
135     if(xl<fLowBinEdgeX[0]) row = -1;
136     else{
137         for(i=0;i<fNbinx;i++) if(xl<=fLowBinEdgeX[i]) break;
138         row = i;
139     } //end if too low.
140     if(zl<fLowBinEdgeX[0]) col = -1;
141     else{
142         for(i=0;i<fNbinz;i++) if(zl<=fLowBinEdgeZ[i]) break;
143         col = i;
144     } //end if too low.
145     return;
146 }
147 //______________________________________________________________________
148 void AliITSgeomSPD::DetToL(Int_t row,Int_t col,Float_t &xl,Float_t &zl){
149 // returns the pixel center local coordinate system location for a given
150 // row and column number. It the row or column number is outside of the 
151 // defined range then it will return the nearest detector edge.
152
153     if(row>=0||row<fNbinx-1) xl = 0.5*(fLowBinEdgeX[row]+fLowBinEdgeX[row+1]);
154     else if(row<0) xl = fLowBinEdgeX[0];else xl = fLowBinEdgeX[fNbinx-1];
155     if(col>=0||col<fNbinz-1) zl = 0.5*(fLowBinEdgeZ[col]+fLowBinEdgeZ[col+1]);
156     else if(col<0) zl = fLowBinEdgeZ[0];else zl = fLowBinEdgeZ[fNbinz-1];
157     return;
158 }
159 //______________________________________________________________________
160 void AliITSgeomSPD::Print(ostream *os) const {
161 // Standard output format for this class
162     Int_t i;
163     Int_t fmt;
164
165     fmt = os->setf(ios::scientific); // set scientific floating point output
166     *os << "TBRIK" << " ";
167     *os << setprecision(16) << GetDx() << " ";
168     *os << setprecision(16) << GetDy() << " ";
169     *os << setprecision(16) << GetDz() << " ";
170     *os << fNbinx-1 << " " << fNbinz-1 << " ";
171     for(i=0;i<fNbinx;i++) *os << setprecision(16) << fLowBinEdgeX[i] << " ";
172     for(i=0;i<fNbinz;i++) *os << setprecision(16) << fLowBinEdgeZ[i] << " ";
173     *os << endl;
174     os->flags(fmt);
175     return;
176 }
177 //______________________________________________________________________
178 void AliITSgeomSPD::Read(istream *is){
179 // Standard input format for this class
180     Int_t i,j;
181     Float_t dx,dy,dz;
182     char shape[20];
183
184     for(i=0;i<20;i++) shape[i]='\0';
185     *is >> shape;
186     if(strcmp(shape,"TBRIK")) Warning("::Read","Shape not a TBRIK");
187     *is >> dx >> dy >> dz;
188     if(fShapeSPD!=0) delete fShapeSPD;
189     SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,dy,dz);
190     *is >> i >> j;
191     SetNbinX(i);
192     SetNbinZ(j);
193     InitLowBinEdgeX();
194     InitLowBinEdgeZ();
195     for(i=0;i<fNbinx;i++) *is >> fLowBinEdgeX[i];
196     for(i=0;i<fNbinz;i++) *is >> fLowBinEdgeZ[i];
197     return;
198 }
199 //----------------------------------------------------------------------
200 ostream &operator<<(ostream &os,AliITSgeomSPD &p){
201 ////////////////////////////////////////////////////////////////////////
202 // Standard output streaming function.
203 ////////////////////////////////////////////////////////////////////////
204
205     p.Print(&os);
206     return os;
207 }
208 //----------------------------------------------------------------------
209 istream &operator>>(istream &is,AliITSgeomSPD &r){
210 ////////////////////////////////////////////////////////////////////////
211 // Standard input streaming function.
212 ////////////////////////////////////////////////////////////////////////
213
214     r.Read(&is);
215     return is;
216 }
217 //=====================================================================
218
219 /*
220 $Log$
221 Revision 1.10  2001/04/26 22:44:34  nilsen
222 Bug fix.
223
224 Revision 1.9  2001/02/09 00:00:57  nilsen
225 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
226 bugs in iostream based streamers used to read and write .det files. Fixed
227 some detector sizes. Fixed bugs in some default-special constructors.
228
229 Revision 1.8  2001/02/03 00:00:30  nilsen
230 New version of AliITSgeom and related files. Now uses automatic streamers,
231 set up for new formatted .det file which includes detector information.
232 Additional smaller modifications are still to come.
233
234 Revision 1.7  2000/10/02 16:32:35  barbera
235 Forward declaration added
236
237 Revision 1.1.2.8  2000/10/02 15:52:05  barbera
238 Forward declaration added
239
240 Revision 1.6  2000/07/10 16:07:18  fca
241 Release version of ITS code
242
243 Revision 1.4  2000/06/10 20:34:37  nilsen
244 Fixed compilation warning with HP unix.
245
246 Revision 1.3  2000/06/10 10:43:04  nilsen
247 Fixed bug in copy and operator =.
248
249 */
250
251 //#include "AliITSgeomSPD300.h"
252
253 ClassImp(AliITSgeomSPD300)
254
255 AliITSgeomSPD300::AliITSgeomSPD300() : AliITSgeomSPD(){
256 ////////////////////////////////////////////////////////////////////////
257 //    default constructor, for ITS TDR geometry. This only consists of
258 // a default constructor to construct the defalut TDR SPD detector geometry
259 // 256 X 279 300 by 50 micron pixels.
260 ////////////////////////////////////////////////////////////////////////
261 const Float_t kdx=0.6400,kdy=0.0075,kdz=4.1900; // cm; Standard pixel detector
262                                                 // size is 2dx wide, 2dz long,
263                                                 // and 2dy thick. Geant 3.12
264                                                 // units.
265 const Float_t kbinx0 = 0.0050; // cm; Standard pixel size in x direction.
266 const Int_t   knbinx = 256;    // number of pixels along x direction.
267 const Float_t kbinz0 = 0.0300; // cm; Standard pixel size in z direction.
268 const Float_t kbinz1 = 0.0350; // cm; Edge pixel size in z direction.
269 const Int_t   knbinz = 279;    // number of pixels along z direction.
270     Int_t i;
271     Float_t dx=0.0,dz=0.0;
272
273 //    cout << "AliITSgeomSPD300 default creator called: start" << endl;
274
275     SetNbinX(knbinx); // default number of bins in x.
276     SetNbinZ(knbinz); // default number of bins in z.
277
278     for(i=0;i<knbinx;i++) dx += kbinx0; // Compute size x.
279     dx *= 0.5;
280     for(i=0;i<knbinz;i++) dz += kbinz0; // Compute size z.
281     dz += 2.0*(kbinz1-kbinz0);
282     dz *= 0.5;
283     InitLowBinEdgeX();
284     InitLowBinEdgeZ();
285     SetLowBinEdgeX(0,-dx); // Starting position X
286     for(i=0;i<knbinx;i++) SetLowBinEdgeX(i+1,GetBinLowEdgeX(i)+kbinx0);
287     SetLowBinEdgeZ(0,-dz); // Starting position z
288     SetLowBinEdgeZ(1,GetBinLowEdgeZ(0)+kbinz1);
289     for(i=1;i<knbinz;i++) SetLowBinEdgeZ(i+1,GetBinLowEdgeZ(i)+kbinz0);
290     SetLowBinEdgeZ(knbinz,GetBinLowEdgeZ(knbinz-1)+kbinz1);
291
292     if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4) 
293         Warning("Default Creator","Detector size may not be write.");
294     SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,kdy,dz);
295 //    cout << "AliITSgeomSPD300 default creator called: end" << endl;
296 }
297 //----------------------------------------------------------------------
298 ostream &operator<<(ostream &os,AliITSgeomSPD300 &p){
299 ////////////////////////////////////////////////////////////////////////
300 // Standard output streaming function.
301 ////////////////////////////////////////////////////////////////////////
302
303     p.Print(&os);
304     return os;
305 }
306 //----------------------------------------------------------------------
307 istream &operator>>(istream &is,AliITSgeomSPD300 &r){
308 ////////////////////////////////////////////////////////////////////////
309 // Standard input streaming function.
310 ////////////////////////////////////////////////////////////////////////
311
312     r.Read(&is);
313     return is;
314 }
315 //=====================================================================
316 /*
317 $Log$
318 Revision 1.10  2001/04/26 22:44:34  nilsen
319 Bug fix.
320
321 Revision 1.9  2001/02/09 00:00:57  nilsen
322 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
323 bugs in iostream based streamers used to read and write .det files. Fixed
324 some detector sizes. Fixed bugs in some default-special constructors.
325
326 Revision 1.8  2001/02/03 00:00:30  nilsen
327 New version of AliITSgeom and related files. Now uses automatic streamers,
328 set up for new formatted .det file which includes detector information.
329 Additional smaller modifications are still to come.
330
331 Revision 1.7  2000/10/02 16:32:35  barbera
332 Forward declaration added
333
334 Revision 1.1.2.8  2000/10/02 15:52:05  barbera
335 Forward declaration added
336
337 Revision 1.6  2000/07/10 16:07:18  fca
338 Release version of ITS code
339
340 Revision 1.4  2000/06/10 20:34:22  nilsen
341 Fixed compilation warning with HP unix.
342
343 Revision 1.3  2000/06/10 10:42:49  nilsen
344 Fixed bug in copy and operator =.
345
346
347 */
348
349 //#include "AliITSgeomSPD425Short.h"
350
351 ClassImp(AliITSgeomSPD425Short)
352
353 AliITSgeomSPD425Short::AliITSgeomSPD425Short() : AliITSgeomSPD(){
354 ////////////////////////////////////////////////////////////////////////
355 //    default constructor, for ITS post TDR geometry. This only consists of
356 // a default constructor to construct the defalut post TDR SPD detector 
357 // geometry 256 X 197 425 by 50 micron pixels with interleaved 625 by 50
358 // micron pixels (large detector).
359 ////////////////////////////////////////////////////////////////////////
360 }
361 //----------------------------------------------------------------------
362 AliITSgeomSPD425Short::AliITSgeomSPD425Short(Int_t npar,Float_t *par) :
363                                                               AliITSgeomSPD(){
364 ////////////////////////////////////////////////////////////////////////
365 //    Standard constructor, for ITS post TDR geometry. This only consists of
366 // a default constructor to construct the defalut post TDR SPD detector 
367 // geometry 256 X 197 425 by 50 micron pixels with interleaved 625 by 50
368 // micron pixels (large detector).
369 ////////////////////////////////////////////////////////////////////////
370
371     const Float_t kdx=0.6400,kdy=0.015,kdz=3.480;   // cm; Standard pixel
372                                                     // detector size is 2dx
373                                                     //  wide, 2dz long, and
374                                                     //  2dy thick. Geant 3.12
375                                                     // units.
376     const Float_t kbinx0 = 0.0050; // cm; Standard pixel size in x direction.
377     const Int_t   knbinx = 256;    // number of pixels along x direction.
378     const Float_t kbinz0 = 0.0425; // cm; Standard pixel size in z direction.
379     const Float_t kbinz1 = 0.0625; // cm; Special pixel size in z direction.
380     const Int_t   knbinz = 160;    // number of pixels along z direction.
381     Int_t i;
382     Float_t dx,dz,*binSizeX,*binSizeZ;
383
384     SetNbinX(knbinx); // default number of bins in x.
385     SetNbinZ(knbinz); // default number of bins in z.
386
387     binSizeX = new Float_t[knbinx]; // array of bin sizes along x.
388     for(i=0;i<knbinx;i++) binSizeX[i] = kbinx0; // default x bin size.
389     binSizeZ = new Float_t[knbinz]; // array of bin sizes along z.
390     for(i=0;i<knbinz;i++) binSizeZ[i] = kbinz0; // default z bin size.
391     binSizeZ[ 31] = kbinz1;
392     binSizeZ[ 32] = kbinz1;
393
394     binSizeZ[ 63] = kbinz1;
395     binSizeZ[ 64] = kbinz1;
396
397     binSizeZ[ 95] = kbinz1;
398     binSizeZ[ 96] = kbinz1;
399
400     binSizeZ[127] = kbinz1;
401     binSizeZ[128] = kbinz1;
402
403     // correct detector size for bin size.
404     dx = 0.0;
405     for(i=0;i<knbinx;i++) dx += binSizeX[i];
406     dx *= 0.5;
407     dz = 0.0;
408     for(i=0;i<knbinz;i++) dz += binSizeZ[i];
409     dz *= 0.5;
410
411     SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",
412              par[0],par[1],par[2]);
413     if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4) 
414         Warning("Default Creator","Detector size may not be write.");
415
416     InitLowBinEdgeX(); // array of bin sizes along x.
417     InitLowBinEdgeZ(); // array of bin sizes along x.
418     SetLowBinEdgeX(0,-dx);
419     SetLowBinEdgeZ(0,-dz);
420     for(i=0;i<knbinx;i++) SetLowBinEdgeX(i+1,GetBinLowEdgeX(i)+binSizeX[i]);
421     for(i=0;i<knbinz;i++) SetLowBinEdgeZ(i+1,GetBinLowEdgeZ(i)+binSizeZ[i]);
422 }
423 //----------------------------------------------------------------------
424 ostream &operator<<(ostream &os,AliITSgeomSPD425Short &p){
425 ////////////////////////////////////////////////////////////////////////
426 // Standard output streaming function.
427 ////////////////////////////////////////////////////////////////////////
428
429     p.Print(&os);
430     return os;
431 }
432 //----------------------------------------------------------------------
433 istream &operator>>(istream &is,AliITSgeomSPD425Short &r){
434 ////////////////////////////////////////////////////////////////////////
435 // Standard input streaming function.
436 ////////////////////////////////////////////////////////////////////////
437
438     r.Read(&is);
439     return is;
440 }
441 //======================================================================
442
443 /*
444 $Log$
445 Revision 1.10  2001/04/26 22:44:34  nilsen
446 Bug fix.
447
448 Revision 1.9  2001/02/09 00:00:57  nilsen
449 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
450 bugs in iostream based streamers used to read and write .det files. Fixed
451 some detector sizes. Fixed bugs in some default-special constructors.
452
453 Revision 1.8  2001/02/03 00:00:30  nilsen
454 New version of AliITSgeom and related files. Now uses automatic streamers,
455 set up for new formatted .det file which includes detector information.
456 Additional smaller modifications are still to come.
457
458 Revision 1.7  2000/10/02 16:32:35  barbera
459 Forward declaration added
460
461 Revision 1.1.2.8  2000/10/02 15:52:05  barbera
462 Forward declaration added
463
464 Revision 1.6  2000/07/10 16:07:18  fca
465 Release version of ITS code
466
467 Revision 1.4  2000/06/10 20:34:22  nilsen
468 Fixed compilation warning with HP unix.
469
470 Revision 1.3  2000/06/10 10:42:49  nilsen
471 Fixed bug in copy and operator =.
472
473
474 */
475
476 //#include "AliITSgeomSPD425Long.h"
477
478 ClassImp(AliITSgeomSPD425Long)
479
480 AliITSgeomSPD425Long::AliITSgeomSPD425Long(){
481 ////////////////////////////////////////////////////////////////////////
482 //    default constructor, for ITS post TDR geometry. This only consists of
483 // a default constructor to construct the defalut post TDR SPD detector 
484 // geometry 256 X 197 425 by 50 micron pixels with interleaved 625 by 50
485 // micron pixels (large detector).
486 ////////////////////////////////////////////////////////////////////////
487
488     const Float_t kdx=0.6400,kdy=0.0075,kdz=4.2650; // cm; Standard pixel
489                                                     // detector size is 2dx
490                                                     //  wide, 2dz long, and
491                                                     //  2dy thick. Geant 3.12
492                                                     // units.
493     const Float_t kbinx0 = 0.0050; // cm; Standard pixel size in x direction.
494     const Int_t   knbinx = 256;    // number of pixels along x direction.
495     const Float_t kbinz0 = 0.0425; // cm; Standard pixel size in z direction.
496     const Float_t kbinz1 = 0.0625; // cm; Special pixel size in z direction.
497     const Int_t   knbinz = 192;    // number of pixels along z direction.
498     Int_t i;
499     Float_t dx,dz,*binSizeX,*binSizeZ;
500
501     SetNbinX(knbinx); // default number of bins in x.
502     SetNbinZ(knbinz); // default number of bins in z.
503
504     binSizeX = new Float_t[knbinx]; // array of bin sizes along x.
505     for(i=0;i<knbinx;i++) binSizeX[i] = kbinx0; // default x bin size.
506     binSizeZ = new Float_t[knbinz]; // array of bin sizes along z.
507     for(i=0;i<knbinz;i++) binSizeZ[i] = kbinz0; // default z bin size.
508     binSizeZ[ 31] = kbinz1;
509     binSizeZ[ 32] = kbinz1;
510
511     binSizeZ[ 63] = kbinz1;
512     binSizeZ[ 64] = kbinz1;
513
514     binSizeZ[ 95] = kbinz1;
515     binSizeZ[ 96] = kbinz1;
516
517     binSizeZ[127] = kbinz1;
518     binSizeZ[128] = kbinz1;
519
520     binSizeZ[159] = kbinz1;
521     binSizeZ[160] = kbinz1;
522
523     // correct detector size for bin size.
524     dx = 0.0;
525     for(i=0;i<knbinx;i++) dx += binSizeX[i];
526     dx *= 0.5;
527     dz = 0.0;
528     for(i=0;i<knbinz;i++) dz += binSizeZ[i];
529     dz *= 0.5;
530
531     SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,kdy,dz);
532     if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4) 
533         Warning("Default Creator","Detector size may not be write.");
534
535     InitLowBinEdgeX(); // array of bin sizes along x.
536     InitLowBinEdgeZ(); // array of bin sizes along x.
537     SetLowBinEdgeX(0,-dx);
538     SetLowBinEdgeZ(0,-dz);
539     for(i=0;i<knbinx;i++) SetLowBinEdgeX(i+1,GetBinLowEdgeX(i)+binSizeX[i]);
540     for(i=0;i<knbinz;i++) SetLowBinEdgeZ(i+1,GetBinLowEdgeZ(i)+binSizeZ[i]);
541 }
542 //----------------------------------------------------------------------
543 ostream &operator<<(ostream &os,AliITSgeomSPD425Long &p){
544 ////////////////////////////////////////////////////////////////////////
545 // Standard output streaming function.
546 ////////////////////////////////////////////////////////////////////////
547
548     p.Print(&os);
549     return os;
550 }
551 //----------------------------------------------------------------------
552 istream &operator>>(istream &is,AliITSgeomSPD425Long &r){
553 ////////////////////////////////////////////////////////////////////////
554 // Standard input streaming function.
555 ////////////////////////////////////////////////////////////////////////
556
557     r.Read(&is);
558     return is;
559 }
560 //======================================================================