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 Revision 1.13 2001/10/12 22:07:20 nilsen
19 A patch for C++ io manipulation functions so that they will work both
20 with GNU gcc 2.96 and GNU gcc 3.01 compilers. Needs to be tested with
23 Revision 1.12 2001/08/24 21:06:37 nilsen
24 Added more documentation, fixed up some coding violations, and some
27 Revision 1.11 2001/05/16 08:17:49 hristov
28 Bug fixed in the StepManager to account for the difference in the geometry
29 tree for the ITS pixels. This fixes both the funny distribution of pixel
30 coordinates and the missing hits/digits/points in many sectors of the ITS
31 pixel barrel. Also included is a patch to properly get and use the detector
32 dimensions through out the ITS code. (B.Nilsen)
34 Revision 1.10 2001/04/26 22:44:34 nilsen
37 Revision 1.9 2001/02/09 00:00:57 nilsen
38 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
39 bugs in iostream based streamers used to read and write .det files. Fixed
40 some detector sizes. Fixed bugs in some default-special constructors.
42 Revision 1.8 2001/02/03 00:00:30 nilsen
43 New version of AliITSgeom and related files. Now uses automatic streamers,
44 set up for new formatted .det file which includes detector information.
45 Additional smaller modifications are still to come.
49 ////////////////////////////////////////////////////////////////////////
50 // This class is for the Silicon Pixel Detector, SPD, specific geometry.
51 // It is being replaced by AliITSsegmentationSPD class. This file also
52 // constains classes derived from AliITSgeomSPD which do nothing but
53 // initilize this one with predefined values.
54 ////////////////////////////////////////////////////////////////////////
61 #include "AliITSgeomSPD.h"
63 ClassImp(AliITSgeomSPD)
65 AliITSgeomSPD::AliITSgeomSPD(){
66 // Default Constructor. Set everthing to null.
74 //______________________________________________________________________
75 AliITSgeomSPD::AliITSgeomSPD(Float_t dy,Int_t nx,Float_t *bx,
76 Int_t nz,Float_t *bz){
77 // Standard Constructor. Set everthing to null.
84 ReSetBins(dy,nx,bx,nz,bz);
87 //______________________________________________________________________
88 void AliITSgeomSPD::ReSetBins(Float_t dy,Int_t nx,Float_t *bx,
89 Int_t nz,Float_t *bz){
90 // delets the contents of this and replaces it with the given values.
92 Float_t dx = 0.0, dz = 0.0;
94 // Compute size in x and z (based on bins).
95 for(i=0;i<nx;i++) dx += bx[i];
96 for(i=0;i<nz;i++) dz += bz[i];
100 delete fShapeSPD; // delete existing shape
101 if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX; // delete existing
102 if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ; // delete existing
108 fLowBinEdgeX[0] = -dx;
109 fLowBinEdgeZ[0] = -dz;
110 for(i=0;i<nx;i++) fLowBinEdgeX[i+1] = fLowBinEdgeX[i] + bx[i];
111 for(i=0;i<nz;i++) fLowBinEdgeZ[i+1] = fLowBinEdgeZ[i] + bz[i];
112 SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,dy,dz);
115 //______________________________________________________________________
116 AliITSgeomSPD::AliITSgeomSPD(AliITSgeomSPD &source){
119 *this = source; // just use the = operator for now.
122 //______________________________________________________________________
123 AliITSgeomSPD& AliITSgeomSPD::operator=(AliITSgeomSPD &source){
127 if(&source == this) return *this;
128 this->fShapeSPD = new TBRIK(*(source.fShapeSPD));
129 if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX;
130 if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ;
131 this->fNbinx = source.fNbinx;
132 this->fNbinz = source.fNbinz;
133 this->InitLowBinEdgeX();
134 this->InitLowBinEdgeZ();
135 for(i=0;i<fNbinx;i++) this->fLowBinEdgeX[i] = source.fLowBinEdgeX[i];
136 for(i=0;i<fNbinz;i++) this->fLowBinEdgeZ[i] = source.fLowBinEdgeZ[i];
139 //______________________________________________________________________
140 AliITSgeomSPD::~AliITSgeomSPD(){
144 if(this->fLowBinEdgeX) delete[] this->fLowBinEdgeX;
145 if(this->fLowBinEdgeZ) delete[] this->fLowBinEdgeZ;
152 //______________________________________________________________________
153 void AliITSgeomSPD::LToDet(Float_t xl,Float_t zl,Int_t &row,Int_t &col){
154 // Returns the row and column pixel numbers for a given local coordinate
155 // system. If they are outside then it will return -1 or fNbinx/z.
158 if(xl<fLowBinEdgeX[0]) row = -1;
160 for(i=0;i<fNbinx;i++) if(xl<=fLowBinEdgeX[i]) break;
163 if(zl<fLowBinEdgeX[0]) col = -1;
165 for(i=0;i<fNbinz;i++) if(zl<=fLowBinEdgeZ[i]) break;
170 //______________________________________________________________________
171 void AliITSgeomSPD::DetToL(Int_t row,Int_t col,Float_t &xl,Float_t &zl){
172 // returns the pixel center local coordinate system location for a given
173 // row and column number. It the row or column number is outside of the
174 // defined range then it will return the nearest detector edge.
176 if(row>=0||row<fNbinx-1) xl = 0.5*(fLowBinEdgeX[row]+fLowBinEdgeX[row+1]);
177 else if(row<0) xl = fLowBinEdgeX[0];else xl = fLowBinEdgeX[fNbinx-1];
178 if(col>=0||col<fNbinz-1) zl = 0.5*(fLowBinEdgeZ[col]+fLowBinEdgeZ[col+1]);
179 else if(col<0) zl = fLowBinEdgeZ[0];else zl = fLowBinEdgeZ[fNbinz-1];
182 //______________________________________________________________________
183 void AliITSgeomSPD::Print(ostream *os) const {
184 // Standard output format for this class
196 fmt = os->setf(ios::scientific); // set scientific floating point output
197 *os << "TBRIK" << " ";
198 *os << setprecision(16) << GetDx() << " ";
199 *os << setprecision(16) << GetDy() << " ";
200 *os << setprecision(16) << GetDz() << " ";
201 *os << fNbinx-1 << " " << fNbinz-1 << " ";
202 for(i=0;i<fNbinx;i++) *os << setprecision(16) << fLowBinEdgeX[i] << " ";
203 for(i=0;i<fNbinz;i++) *os << setprecision(16) << fLowBinEdgeZ[i] << " ";
208 //______________________________________________________________________
209 void AliITSgeomSPD::Read(istream *is){
210 // Standard input format for this class
215 for(i=0;i<20;i++) shape[i]='\0';
217 if(strcmp(shape,"TBRIK")) Warning("::Read","Shape not a TBRIK");
218 *is >> dx >> dy >> dz;
219 if(fShapeSPD!=0) delete fShapeSPD;
220 SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,dy,dz);
226 for(i=0;i<fNbinx;i++) *is >> fLowBinEdgeX[i];
227 for(i=0;i<fNbinz;i++) *is >> fLowBinEdgeZ[i];
230 //----------------------------------------------------------------------
231 ostream &operator<<(ostream &os,AliITSgeomSPD &p){
232 ////////////////////////////////////////////////////////////////////////
233 // Standard output streaming function.
234 ////////////////////////////////////////////////////////////////////////
239 //----------------------------------------------------------------------
240 istream &operator>>(istream &is,AliITSgeomSPD &r){
241 ////////////////////////////////////////////////////////////////////////
242 // Standard input streaming function.
243 ////////////////////////////////////////////////////////////////////////
248 //=====================================================================
252 Revision 1.13 2001/10/12 22:07:20 nilsen
253 A patch for C++ io manipulation functions so that they will work both
254 with GNU gcc 2.96 and GNU gcc 3.01 compilers. Needs to be tested with
257 Revision 1.12 2001/08/24 21:06:37 nilsen
258 Added more documentation, fixed up some coding violations, and some
259 forward declorations.
261 Revision 1.11 2001/05/16 08:17:49 hristov
262 Bug fixed in the StepManager to account for the difference in the geometry tree for the ITS pixels. This fixes both the funny distribution of pixel coordinates and the missing hits/digits/points in many sectors of the ITS pixel barrel. Also included is a patch to properly get and use the detector dimensions through out the ITS code. (B.Nilsen)
264 Revision 1.10 2001/04/26 22:44:34 nilsen
267 Revision 1.9 2001/02/09 00:00:57 nilsen
268 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
269 bugs in iostream based streamers used to read and write .det files. Fixed
270 some detector sizes. Fixed bugs in some default-special constructors.
272 Revision 1.8 2001/02/03 00:00:30 nilsen
273 New version of AliITSgeom and related files. Now uses automatic streamers,
274 set up for new formatted .det file which includes detector information.
275 Additional smaller modifications are still to come.
277 Revision 1.7 2000/10/02 16:32:35 barbera
278 Forward declaration added
280 Revision 1.1.2.8 2000/10/02 15:52:05 barbera
281 Forward declaration added
283 Revision 1.6 2000/07/10 16:07:18 fca
284 Release version of ITS code
286 Revision 1.4 2000/06/10 20:34:37 nilsen
287 Fixed compilation warning with HP unix.
289 Revision 1.3 2000/06/10 10:43:04 nilsen
290 Fixed bug in copy and operator =.
294 //#include "AliITSgeomSPD300.h"
296 ClassImp(AliITSgeomSPD300)
298 AliITSgeomSPD300::AliITSgeomSPD300() : AliITSgeomSPD(){
299 ////////////////////////////////////////////////////////////////////////
300 // default constructor, for ITS TDR geometry. This only consists of
301 // a default constructor to construct the defalut TDR SPD detector geometry
302 // 256 X 279 300 by 50 micron pixels.
303 ////////////////////////////////////////////////////////////////////////
304 const Float_t kdx=0.6400,kdy=0.0075,kdz=4.1900; // cm; Standard pixel detector
305 // size is 2dx wide, 2dz long,
306 // and 2dy thick. Geant 3.12
308 const Float_t kbinx0 = 0.0050; // cm; Standard pixel size in x direction.
309 const Int_t knbinx = 256; // number of pixels along x direction.
310 const Float_t kbinz0 = 0.0300; // cm; Standard pixel size in z direction.
311 const Float_t kbinz1 = 0.0350; // cm; Edge pixel size in z direction.
312 const Int_t knbinz = 279; // number of pixels along z direction.
314 Float_t dx=0.0,dz=0.0;
316 // cout << "AliITSgeomSPD300 default creator called: start" << endl;
318 SetNbinX(knbinx); // default number of bins in x.
319 SetNbinZ(knbinz); // default number of bins in z.
321 for(i=0;i<knbinx;i++) dx += kbinx0; // Compute size x.
323 for(i=0;i<knbinz;i++) dz += kbinz0; // Compute size z.
324 dz += 2.0*(kbinz1-kbinz0);
328 SetLowBinEdgeX(0,-dx); // Starting position X
329 for(i=0;i<knbinx;i++) SetLowBinEdgeX(i+1,GetBinLowEdgeX(i)+kbinx0);
330 SetLowBinEdgeZ(0,-dz); // Starting position z
331 SetLowBinEdgeZ(1,GetBinLowEdgeZ(0)+kbinz1);
332 for(i=1;i<knbinz;i++) SetLowBinEdgeZ(i+1,GetBinLowEdgeZ(i)+kbinz0);
333 SetLowBinEdgeZ(knbinz,GetBinLowEdgeZ(knbinz-1)+kbinz1);
335 if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4)
336 Warning("Default Creator","Detector size may not be write.");
337 SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,kdy,dz);
338 // cout << "AliITSgeomSPD300 default creator called: end" << endl;
340 //----------------------------------------------------------------------
341 ostream &operator<<(ostream &os,AliITSgeomSPD300 &p){
342 ////////////////////////////////////////////////////////////////////////
343 // Standard output streaming function.
344 ////////////////////////////////////////////////////////////////////////
349 //----------------------------------------------------------------------
350 istream &operator>>(istream &is,AliITSgeomSPD300 &r){
351 ////////////////////////////////////////////////////////////////////////
352 // Standard input streaming function.
353 ////////////////////////////////////////////////////////////////////////
358 //=====================================================================
361 Revision 1.13 2001/10/12 22:07:20 nilsen
362 A patch for C++ io manipulation functions so that they will work both
363 with GNU gcc 2.96 and GNU gcc 3.01 compilers. Needs to be tested with
366 Revision 1.12 2001/08/24 21:06:37 nilsen
367 Added more documentation, fixed up some coding violations, and some
368 forward declorations.
370 Revision 1.11 2001/05/16 08:17:49 hristov
371 Bug fixed in the StepManager to account for the difference in the geometry tree for the ITS pixels. This fixes both the funny distribution of pixel coordinates and the missing hits/digits/points in many sectors of the ITS pixel barrel. Also included is a patch to properly get and use the detector dimensions through out the ITS code. (B.Nilsen)
373 Revision 1.10 2001/04/26 22:44:34 nilsen
376 Revision 1.9 2001/02/09 00:00:57 nilsen
377 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
378 bugs in iostream based streamers used to read and write .det files. Fixed
379 some detector sizes. Fixed bugs in some default-special constructors.
381 Revision 1.8 2001/02/03 00:00:30 nilsen
382 New version of AliITSgeom and related files. Now uses automatic streamers,
383 set up for new formatted .det file which includes detector information.
384 Additional smaller modifications are still to come.
386 Revision 1.7 2000/10/02 16:32:35 barbera
387 Forward declaration added
389 Revision 1.1.2.8 2000/10/02 15:52:05 barbera
390 Forward declaration added
392 Revision 1.6 2000/07/10 16:07:18 fca
393 Release version of ITS code
395 Revision 1.4 2000/06/10 20:34:22 nilsen
396 Fixed compilation warning with HP unix.
398 Revision 1.3 2000/06/10 10:42:49 nilsen
399 Fixed bug in copy and operator =.
404 //#include "AliITSgeomSPD425Short.h"
406 ClassImp(AliITSgeomSPD425Short)
408 AliITSgeomSPD425Short::AliITSgeomSPD425Short() : AliITSgeomSPD(){
409 ////////////////////////////////////////////////////////////////////////
410 // default constructor, for ITS post TDR geometry. This only consists of
411 // a default constructor to construct the defalut post TDR SPD detector
412 // geometry 256 X 197 425 by 50 micron pixels with interleaved 625 by 50
413 // micron pixels (large detector).
414 ////////////////////////////////////////////////////////////////////////
416 //----------------------------------------------------------------------
417 AliITSgeomSPD425Short::AliITSgeomSPD425Short(Int_t npar,Float_t *par) :
419 ////////////////////////////////////////////////////////////////////////
420 // Standard constructor, for ITS post TDR geometry. This only consists of
421 // a default constructor to construct the defalut post TDR SPD detector
422 // geometry 256 X 197 425 by 50 micron pixels with interleaved 625 by 50
423 // micron pixels (large detector).
424 ////////////////////////////////////////////////////////////////////////
426 const Float_t kdx=0.6400/*,kdy=0.015*/,kdz=3.480; // cm; Standard pixel
427 // detector size is 2dx
428 // wide, 2dz long, and
429 // 2dy thick. Geant 3.12
431 const Float_t kbinx0 = 0.0050; // cm; Standard pixel size in x direction.
432 const Int_t knbinx = 256; // number of pixels along x direction.
433 const Float_t kbinz0 = 0.0425; // cm; Standard pixel size in z direction.
434 const Float_t kbinz1 = 0.0625; // cm; Special pixel size in z direction.
435 const Int_t knbinz = 160; // number of pixels along z direction.
437 Float_t dx,dz,*binSizeX,*binSizeZ;
439 SetNbinX(knbinx); // default number of bins in x.
440 SetNbinZ(knbinz); // default number of bins in z.
442 binSizeX = new Float_t[knbinx]; // array of bin sizes along x.
443 for(i=0;i<knbinx;i++) binSizeX[i] = kbinx0; // default x bin size.
444 binSizeZ = new Float_t[knbinz]; // array of bin sizes along z.
445 for(i=0;i<knbinz;i++) binSizeZ[i] = kbinz0; // default z bin size.
446 binSizeZ[ 31] = kbinz1;
447 binSizeZ[ 32] = kbinz1;
449 binSizeZ[ 63] = kbinz1;
450 binSizeZ[ 64] = kbinz1;
452 binSizeZ[ 95] = kbinz1;
453 binSizeZ[ 96] = kbinz1;
455 binSizeZ[127] = kbinz1;
456 binSizeZ[128] = kbinz1;
458 // correct detector size for bin size.
460 for(i=0;i<knbinx;i++) dx += binSizeX[i];
463 for(i=0;i<knbinz;i++) dz += binSizeZ[i];
466 SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",
467 par[0],par[1],par[2]);
468 if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4)
469 Warning("Default Creator","Detector size may not be write.");
471 InitLowBinEdgeX(); // array of bin sizes along x.
472 InitLowBinEdgeZ(); // array of bin sizes along x.
473 SetLowBinEdgeX(0,-dx);
474 SetLowBinEdgeZ(0,-dz);
475 for(i=0;i<knbinx;i++) SetLowBinEdgeX(i+1,GetBinLowEdgeX(i)+binSizeX[i]);
476 for(i=0;i<knbinz;i++) SetLowBinEdgeZ(i+1,GetBinLowEdgeZ(i)+binSizeZ[i]);
478 //----------------------------------------------------------------------
479 ostream &operator<<(ostream &os,AliITSgeomSPD425Short &p){
480 ////////////////////////////////////////////////////////////////////////
481 // Standard output streaming function.
482 ////////////////////////////////////////////////////////////////////////
487 //----------------------------------------------------------------------
488 istream &operator>>(istream &is,AliITSgeomSPD425Short &r){
489 ////////////////////////////////////////////////////////////////////////
490 // Standard input streaming function.
491 ////////////////////////////////////////////////////////////////////////
496 //======================================================================
500 Revision 1.13 2001/10/12 22:07:20 nilsen
501 A patch for C++ io manipulation functions so that they will work both
502 with GNU gcc 2.96 and GNU gcc 3.01 compilers. Needs to be tested with
505 Revision 1.12 2001/08/24 21:06:37 nilsen
506 Added more documentation, fixed up some coding violations, and some
507 forward declorations.
509 Revision 1.11 2001/05/16 08:17:49 hristov
510 Bug fixed in the StepManager to account for the difference in the geometry tree for the ITS pixels. This fixes both the funny distribution of pixel coordinates and the missing hits/digits/points in many sectors of the ITS pixel barrel. Also included is a patch to properly get and use the detector dimensions through out the ITS code. (B.Nilsen)
512 Revision 1.10 2001/04/26 22:44:34 nilsen
515 Revision 1.9 2001/02/09 00:00:57 nilsen
516 Fixed compatibility problem with HP unix {ios::fmtflags -> Int_t}. Fixed
517 bugs in iostream based streamers used to read and write .det files. Fixed
518 some detector sizes. Fixed bugs in some default-special constructors.
520 Revision 1.8 2001/02/03 00:00:30 nilsen
521 New version of AliITSgeom and related files. Now uses automatic streamers,
522 set up for new formatted .det file which includes detector information.
523 Additional smaller modifications are still to come.
525 Revision 1.7 2000/10/02 16:32:35 barbera
526 Forward declaration added
528 Revision 1.1.2.8 2000/10/02 15:52:05 barbera
529 Forward declaration added
531 Revision 1.6 2000/07/10 16:07:18 fca
532 Release version of ITS code
534 Revision 1.4 2000/06/10 20:34:22 nilsen
535 Fixed compilation warning with HP unix.
537 Revision 1.3 2000/06/10 10:42:49 nilsen
538 Fixed bug in copy and operator =.
543 //#include "AliITSgeomSPD425Long.h"
545 ClassImp(AliITSgeomSPD425Long)
547 AliITSgeomSPD425Long::AliITSgeomSPD425Long(){
548 ////////////////////////////////////////////////////////////////////////
549 // default constructor, for ITS post TDR geometry. This only consists of
550 // a default constructor to construct the defalut post TDR SPD detector
551 // geometry 256 X 197 425 by 50 micron pixels with interleaved 625 by 50
552 // micron pixels (large detector).
553 ////////////////////////////////////////////////////////////////////////
555 const Float_t kdx=0.6400,kdy=0.0075,kdz=4.2650; // cm; Standard pixel
556 // detector size is 2dx
557 // wide, 2dz long, and
558 // 2dy thick. Geant 3.12
560 const Float_t kbinx0 = 0.0050; // cm; Standard pixel size in x direction.
561 const Int_t knbinx = 256; // number of pixels along x direction.
562 const Float_t kbinz0 = 0.0425; // cm; Standard pixel size in z direction.
563 const Float_t kbinz1 = 0.0625; // cm; Special pixel size in z direction.
564 const Int_t knbinz = 192; // number of pixels along z direction.
566 Float_t dx,dz,*binSizeX,*binSizeZ;
568 SetNbinX(knbinx); // default number of bins in x.
569 SetNbinZ(knbinz); // default number of bins in z.
571 binSizeX = new Float_t[knbinx]; // array of bin sizes along x.
572 for(i=0;i<knbinx;i++) binSizeX[i] = kbinx0; // default x bin size.
573 binSizeZ = new Float_t[knbinz]; // array of bin sizes along z.
574 for(i=0;i<knbinz;i++) binSizeZ[i] = kbinz0; // default z bin size.
575 binSizeZ[ 31] = kbinz1;
576 binSizeZ[ 32] = kbinz1;
578 binSizeZ[ 63] = kbinz1;
579 binSizeZ[ 64] = kbinz1;
581 binSizeZ[ 95] = kbinz1;
582 binSizeZ[ 96] = kbinz1;
584 binSizeZ[127] = kbinz1;
585 binSizeZ[128] = kbinz1;
587 binSizeZ[159] = kbinz1;
588 binSizeZ[160] = kbinz1;
590 // correct detector size for bin size.
592 for(i=0;i<knbinx;i++) dx += binSizeX[i];
595 for(i=0;i<knbinz;i++) dz += binSizeZ[i];
598 SetShape("ActiveSPD","Active volume of SPD","SPD SI DET",dx,kdy,dz);
599 if(TMath::Abs(dx-kdx)>1.0E-4 || TMath::Abs(dz-kdz)>1.0E-4)
600 Warning("Default Creator","Detector size may not be write.");
602 InitLowBinEdgeX(); // array of bin sizes along x.
603 InitLowBinEdgeZ(); // array of bin sizes along x.
604 SetLowBinEdgeX(0,-dx);
605 SetLowBinEdgeZ(0,-dz);
606 for(i=0;i<knbinx;i++) SetLowBinEdgeX(i+1,GetBinLowEdgeX(i)+binSizeX[i]);
607 for(i=0;i<knbinz;i++) SetLowBinEdgeZ(i+1,GetBinLowEdgeZ(i)+binSizeZ[i]);
609 //----------------------------------------------------------------------
610 ostream &operator<<(ostream &os,AliITSgeomSPD425Long &p){
611 ////////////////////////////////////////////////////////////////////////
612 // Standard output streaming function.
613 ////////////////////////////////////////////////////////////////////////
618 //----------------------------------------------------------------------
619 istream &operator>>(istream &is,AliITSgeomSPD425Long &r){
620 ////////////////////////////////////////////////////////////////////////
621 // Standard input streaming function.
622 ////////////////////////////////////////////////////////////////////////
627 //======================================================================