]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITShit.cxx
changes to be compliant with Eff C++ rules
[u/mrichter/AliRoot.git] / ITS / AliITShit.cxx
CommitLineData
4c039060 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
88cb7938 16/* $Id$ */
4c039060 17
4ae5bbc4 18#include <Riostream.h>
58005f18 19
33da2552 20#include<TLorentzVector.h>
58005f18 21
b2340bbf 22#include "AliRun.h"
58005f18 23#include "AliITS.h"
4fc5ed2d 24#include "AliITSgeom.h"
58005f18 25#include "AliITShit.h"
5d12ce38 26#include "AliMC.h"
58005f18 27
28
29ClassImp(AliITShit)
30////////////////////////////////////////////////////////////////////////
31// Version: 0
32// Written by Rene Brun, Federico Carminati, and Roberto Barbera
33//
34// Version: 1
35// Modified and documented by Bjorn S. Nilsen
36// July 11 1999
37//
38// AliITShit is the hit class for the ITS. Hits are the information
39// that comes from a Monte Carlo at each step as a particle mass through
40// sensitive detector elements as particles are transported through a
41// detector.
42//
43//Begin_Html
44/*
a92b2b7d 45<img src="picts/ITS/AliITShit_Class_Diagram.gif">
58005f18 46</pre>
47<br clear=left>
48<font size=+2 color=red>
49<p>This show the relasionships between the ITS hit class and the rest of Aliroot.
50</font>
51<pre>
52*/
53//End_Html
b2340bbf 54////////////////////////////////////////////////////////////////////////
55// Inline Member functions:
56//
57// AliITShit()
58// The default creator of the AliITShit class.
59//
60// ~AliITShit()
61// The default destructor of the AliITShit class.
62//
63// int GetTrack()
64// See AliHit for a full description. Returns the track number fTrack
65// for this hit.
66//
67// SetTrack(int track)
68// See AliHit for a full description. Sets the track number fTrack
69// for this hit.
70//
71// Int_t GetTrackStatus()
72// Returns the value of the track status flag fStatus. This flag
73// indicates the track status at the time of creating this hit. It is
74// made up of the following 8 status bits from highest order to lowest
75// order bits
76// 0 : IsTrackAlive(): IsTrackStop():IsTrackDisappeared():
77// IsTrackOut():IsTrackExiting():IsTrackEntering():IsTrackInside() .
78// See AliMC for a description of these functions. If the function is
79// true then the bit is set to one, otherwise it is zero.
80//
81// Bool_t StatusInside()
82// Returns kTRUE if the particle producing this hit is still inside
83// the present volume. Returns kFalse if this particle will be in another
84// volume. {bit IsTrackInside is set or not}
85//
86// Bool_t StatusEntering()
87// Returns kTRUE if the particle producing this hit is has just enterd
88// the present volume. Returns kFalse otherwise. {bit IsTrackEntering is
89// set or not}
90//
91// Bool_t StatusExiting()
92// Returns kTRUE if the particle producing this hit is will exit
93// the present volume. Returns kFalse otherwise. {bit IsTrackExiting is set
94// or not}
95//
96// Bool_t StatusOut()
97// Returns kTRUE if the particle producing this hit is goint exit the
98// simulation. Returns kFalse otherwise. {bit IsTrackOut is set or not}
99//
100// Bool_t StatusDisappeared()
101// Returns kTRUE if the particle producing this hit is going to "disappear"
102// for example it has interacted producing some other particles. Returns
103// kFalse otherwise. {bit IsTrackOut is set or not}
104//
105// Bool_t StatusStop()
106// Returns kTRUE if the particle producing this hit is has dropped below
107// its energy cut off producing some other particles. Returns kFalse otherwise.
108// {bit IsTrackOut is set or not}
109//
110// Bool_t StatuAlives()
111// Returns kTRUE if the particle producing this hit is going to continue
112// to be transported. Returns kFalse otherwise. {bit IsTrackOut is set or not}
113//
114// Int_t GetLayer()
115// Returns the layer number, fLayer, for this hit.
116//
117// Int_t GetLadder()
118// Returns the ladder number, fLadder, for this hit.
119//
120// Int_t GetDetector()
121// Returns the detector number, fDet, for this hit.
122//
123// GetDetectorID(Int_t &layer, Int_t &ladder, Int_t &detector)
124// Returns the layer, ladder, and detector numbers, fLayer fLadder fDet,
125// in one call.
126//
127// Float_t GetIonization()
128// Returns the energy lost, fDestep, by the particle creating this hit,
129// in the units defined by the Monte Carlo.
130//
131// GetPositionG(Float_t &x, Float_t &y, Float_t &z)
132// Returns the global position, fX fY fZ, of this hit, in the units
133// define by the Monte Carlo.
134//
135// GetPositionG(Double_t &x, Double_t &y, Double_t &z)
136// Returns the global position, fX fY fZ, of this hit, in the units
137// define by the Monte Carlo.
138//
139// GetPositionG(Float_t &x, Float_t &y, Float_t &z, Float_t &tof)
140// Returns the global position and time of flight, fX fY fZ fTof, of
141// this hit, in the units define by the Monte Carlo.
142//
143// GetPositionG(Double_t &x,Double_t &y,Double_t &z,Double_t &tof)
144// Returns the global position and time of flight, fX fY fZ fTof, of
145// this hit, in the units define by the Monte Carlo.
146//
147// GetPositionL(Double_t &x,Double_t &y,Double_t &z)
148// Returns the local position, fX fY fZ, of this hit in the coordiante
149// of this module, in the units define by the Monte Carlo.
150//
151// GetPositionG(Double_t &x,Double_t &y,Double_t &z,Double_t &tof)
152// Returns the local position and time of flight, fX fY fZ fTof, of
153// this hit in the coordinates of this module, in the units define by the
154// Monte Carlo.
155//
156// Float_t GetXG()
157// Returns the global x position in the units defined by the Monte Carlo.
158//
159// Float_t GetYG()
160// Returns the global y position in the units defined by the Monte Carlo.
161//
162// Float_t GetYG()
163// Returns the global z position in the units defined by the Monte Carlo.
164//
165// Float_t GetTOF()
166// Returns the time of flight, fTof, of this hit, in the units defined
167// by the Monte Carlo.
168//
169// GetMomentumG(Float_t &px, Float_t &py, Float_t &pz)
170// Returns the global momentum, fPx fPy fPz, of the particle that made
171// this hit, in the units define by the Monte Carlo.
172//
173// GetMomentumG(Double_t &px,Double_t &py,Double_t &pz)
174// Returns the global momentum, fPx fPy fPz, of the particle that made
175// this hit, in the units define by the Monte Carlo.
176//
177// GetMomentumL(Double_t &px,Double_t &py,Double_t &pz)
178// Returns the momentum, fPx fPy fPz in coordinate appropreate for this
179// specific module, in the units define by the Monte Carlo.
180//
181// Float_t GetPXG()
182// Returns the global X momentum in the units defined by the Monte Carlo.
183//
184// Float_t GetPYG()
185// Returns the global Y momentum in the units defined by the Monte Carlo.
186//
187// Float_t GetPZG()
188// Returns the global Z momentum in the units defined by the Monte Carlo.
189//
190////////////////////////////////////////////////////////////////////////
58005f18 191//_____________________________________________________________________________
7537d03c 192AliITShit::AliITShit():AliHit(),
193fStatus(0),
194fLayer(0),
195fLadder(0),
196fDet(0),
197fPx(0.0),
198fPy(0.0),
199fPz(0.0),
200fDestep(0.0),
201fTof(0.0),
202fStatus0(0),
203fx0(0.0),
204fy0(0.0),
205fz0(0.0),
206ft0(0.0){
7e3ded1b 207 // Default Constructor
208 // Zero data member just to be safe.
209 // Intputs:
210 // none.
211 // Outputs:
212 // none.
213 // Return:
214 // A default created AliITShit class.
215
7e3ded1b 216}
217AliITShit::AliITShit(Int_t shunt,Int_t track,Int_t *vol,Float_t edep,
218 Float_t tof,TLorentzVector &x,TLorentzVector &x0,
7537d03c 219 TLorentzVector &p) : AliHit(shunt, track),
220fStatus(vol[3]),
221fLayer(vol[0]),
222fLadder(vol[2]),
223fDet(vol[1]),
224fPx(p.Px()),
225fPy(p.Py()),
226fPz(p.Pz()),
227fDestep(edep),
228fTof(tof),
229fStatus0(vol[4]),
230fx0(x0.X()),
231fy0(x0.Y()),
232fz0(x0.Z()),
233ft0(x0.T()){
7e3ded1b 234////////////////////////////////////////////////////////////////////////
235// Create ITS hit
236// The creator of the AliITShit class. The variables shunt and
237// track are passed to the creator of the AliHit class. See the AliHit
238// class for a full description. In the units of the Monte Carlo
239////////////////////////////////////////////////////////////////////////
240 // Intputs:
241 // Int_t shunt See AliHit
242 // Int_t track Track number, see AliHit
243 // Int_t *vol Array of integer hit data,
244 // vol[0] Layer where the hit is, 1-6 typicaly
245 // vol[1] Ladder where the hit is.
246 // vol[2] Detector number where the hit is
247 // vol[3] Set of status bits
248 // vol[4] Set of status bits at start
249 // Outputs:
250 // none.
251 // Return:
252 // A default created AliITShit class.
253
7537d03c 254
255
7e3ded1b 256 fX = x.X(); // Track X global position
257 fY = x.Y(); // Track Y global position
258 fZ = x.Z(); // Track Z global position
7e3ded1b 259}
260//______________________________________________________________________
58005f18 261AliITShit::AliITShit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits):
7537d03c 262 AliHit(shunt, track),
263fStatus(vol[3]),
264fLayer(vol[0]),
265fLadder(vol[2]),
266fDet(vol[1]),
267fPx(hits[3]),
268fPy(hits[4]),
269fPz(hits[5]),
270fDestep(hits[6]),
271fTof(hits[7]),
272fStatus0(0),
273fx0(0.0),
274fy0(0.0),
275fz0(0.0),
276ft0(0.0){
b2340bbf 277////////////////////////////////////////////////////////////////////////
278// Create ITS hit
279// The creator of the AliITShit class. The variables shunt and
280// track are passed to the creator of the AliHit class. See the AliHit
281// class for a full description. the integer array *vol contains, in order,
282// fLayer = vol[0], fDet = vol[1], fLadder = vol[2], fStatus = vol[3].
283// The array *hits contains, in order, fX = hits[0], fY = hits[1],
284// fZ = hits[2], fPx = hits[3], fPy = hits[4], fPz = hits[5],
285// fDestep = hits[6], and fTof = hits[7]. In the units of the Monte Carlo
286////////////////////////////////////////////////////////////////////////
7e3ded1b 287 // Intputs:
288 // Int_t shunt See AliHit
289 // Int_t track Track number, see AliHit
290 // Int_t *vol Array of integer hit data,
291 // vol[0] Layer where the hit is, 1-6 typicaly
292 // vol[1] Ladder where the hit is.
293 // vol[2] Detector number where the hit is
294 // vol[3] Set of status bits
295 // Float_t *hits Array of hit information
296 // hits[0] X global position of this hit
297 // hits[1] Y global position of this hit
298 // hits[2] Z global position of this hit
299 // hits[3] Px global position of this hit
300 // hits[4] Py global position of this hit
301 // hits[5] Pz global position of this hit
302 // hits[6] Energy deposited by this step
303 // hits[7] Time of flight of this particle at this step
304 // Outputs:
305 // none.
306 // Return:
307 // A standard created AliITShit class.
7e3ded1b 308 fX = hits[0]; // Track X global position
309 fY = hits[1]; // Track Y global position
310 fZ = hits[2]; // Track Z global position
58005f18 311}
b2340bbf 312//______________________________________________________________________
58005f18 313void AliITShit::GetPositionL(Float_t &x,Float_t &y,Float_t &z){
b2340bbf 314////////////////////////////////////////////////////////////////////////
315// Returns the position of this hit in the local coordinates of this
316// module, and in the units of the Monte Carlo.
317////////////////////////////////////////////////////////////////////////
58005f18 318 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
319 Float_t g[3],l[3];
320
321 g[0] = fX;
322 g[1] = fY;
323 g[2] = fZ;
4fc5ed2d 324 if(gm) {
325 gm->GtoL(fLayer,fLadder,fDet,g,l);
326 x = l[0];
327 y = l[1];
328 z = l[2];
329 } else {
330 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
331 // AliITSv7 - SDD case
332 x=fX;
d2ace6e6 333 y=fY;
334 z=fZ;
4fc5ed2d 335 }
58005f18 336 return;
337}
b2340bbf 338//______________________________________________________________________
58005f18 339void AliITShit::GetPositionL(Float_t &x,Float_t &y,Float_t &z,Float_t &tof){
b2340bbf 340////////////////////////////////////////////////////////////////////////
341// Returns the position and time of flight of this hit in the local
342// coordinates of this module, and in the units of the Monte Carlo.
343////////////////////////////////////////////////////////////////////////
58005f18 344 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
345 Float_t g[3],l[3];
346
347 g[0] = fX;
348 g[1] = fY;
349 g[2] = fZ;
4fc5ed2d 350 if(gm) {
351 gm->GtoL(fLayer,fLadder,fDet,g,l);
352 x = l[0];
353 y = l[1];
354 z = l[2];
355 } else {
356 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
357 // AliITSv7 - SDD case
358 x=fX;
d2ace6e6 359 y=fY;
360 z=fZ;
4fc5ed2d 361 }
58005f18 362 tof = fTof;
363 return;
364}
b2340bbf 365//______________________________________________________________________
d2ace6e6 366void AliITShit::GetPositionL0(Double_t &x,Double_t &y,Double_t &z,
367 Double_t &tof){
368////////////////////////////////////////////////////////////////////////
369// Returns the initial position and time of flight of this hit in the local
370// coordinates of this module, and in the units of the Monte Carlo.
371////////////////////////////////////////////////////////////////////////
372 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
373 Float_t g[3],l[3];
374
375 g[0] = fx0;
376 g[1] = fy0;
377 g[2] = fz0;
378 if(gm) {
379 gm->GtoL(fLayer,fLadder,fDet,g,l);
380 x = l[0];
381 y = l[1];
382 z = l[2];
383 } else {
384 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
385 // AliITSv7 - SDD case
386 x=fx0;
387 y=fy0;
388 z=fz0;
389 }
390 tof = ft0;
391 return;
392}
393//______________________________________________________________________
58005f18 394Float_t AliITShit::GetXL(){
b2340bbf 395////////////////////////////////////////////////////////////////////////
396// Returns the x position of this hit in the local coordinates of this
397// module, and in the units of the Monte Carlo.
398////////////////////////////////////////////////////////////////////////
58005f18 399 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
400 Float_t g[3],l[3];
401
402 g[0] = fX;
403 g[1] = fY;
404 g[2] = fZ;
4fc5ed2d 405 if(gm) {
406 gm->GtoL(fLayer,fLadder,fDet,g,l);
407 return l[0];
408 } else {
409 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
410 return fX;
411 }
58005f18 412}
b2340bbf 413//______________________________________________________________________
58005f18 414Float_t AliITShit::GetYL(){
b2340bbf 415////////////////////////////////////////////////////////////////////////
416// Returns the y position of this hit in the local coordinates of this
417// module, and in the units of the Monte Carlo.
418////////////////////////////////////////////////////////////////////////
58005f18 419 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
420 Float_t g[3],l[3];
421
422 g[0] = fX;
423 g[1] = fY;
424 g[2] = fZ;
4fc5ed2d 425 if (gm) {
426 gm->GtoL(fLayer,fLadder,fDet,g,l);
427 return l[1];
428 } else {
429 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
430 return fZ;
431 }
58005f18 432}
b2340bbf 433//______________________________________________________________________
58005f18 434Float_t AliITShit::GetZL(){
b2340bbf 435////////////////////////////////////////////////////////////////////////
436// Returns the z position of this hit in the local coordinates of this
437// module, and in the units of the Monte Carlo.
438////////////////////////////////////////////////////////////////////////
58005f18 439 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
440 Float_t g[3],l[3];
441
442 g[0] = fX;
443 g[1] = fY;
444 g[2] = fZ;
4fc5ed2d 445 if(gm) {
446 gm->GtoL(fLayer,fLadder,fDet,g,l);
447 return l[2];
448 } else {
449 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
450 return fY;
451 }
58005f18 452}
b2340bbf 453//______________________________________________________________________
58005f18 454void AliITShit::GetMomentumL(Float_t &px,Float_t &py,Float_t &pz){
b2340bbf 455////////////////////////////////////////////////////////////////////////
456// Returns the momentum of this hit in the local coordinates of this
457// module, and in the units of the Monte Carlo.
458////////////////////////////////////////////////////////////////////////
58005f18 459 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
460 Float_t g[3],l[3];
461
462 g[0] = fPx;
463 g[1] = fPy;
464 g[2] = fPz;
4fc5ed2d 465 if (gm) {
466 gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
467 px = l[0];
468 py = l[1];
469 pz = l[2];
470 } else {
471 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
472 px=fPx;
473 py=fPy;
474 pz=fPz;
475 }
58005f18 476 return;
477}
b2340bbf 478//______________________________________________________________________
479Float_t AliITShit::GetPXL(){
480////////////////////////////////////////////////////////////////////////
481// Returns the X momentum of this hit in the local coordinates of this
482// module, and in the units of the Monte Carlo.
483////////////////////////////////////////////////////////////////////////
484 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
485 Float_t g[3],l[3];
486
487 g[0] = fPx;
488 g[1] = fPy;
489 g[2] = fPz;
4fc5ed2d 490 if (gm) {
491 gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
492 return l[0];
493 } else {
494 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
495 return fPx;
496 }
b2340bbf 497}
498//______________________________________________________________________
499Float_t AliITShit::GetPYL(){
500////////////////////////////////////////////////////////////////////////
501// Returns the Y momentum of this hit in the local coordinates of this
502// module, and in the units of the Monte Carlo.
503////////////////////////////////////////////////////////////////////////
504 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
505 Float_t g[3],l[3];
506
507 g[0] = fPx;
508 g[1] = fPy;
509 g[2] = fPz;
4fc5ed2d 510 if (gm) {
511 gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
512 return l[1];
513 } else {
514 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
515 return fPy;
516 }
517
b2340bbf 518}
519//______________________________________________________________________
520Float_t AliITShit::GetPZL(){
521////////////////////////////////////////////////////////////////////////
522// Returns the Z momentum of this hit in the local coordinates of this
523// module, and in the units of the Monte Carlo.
524////////////////////////////////////////////////////////////////////////
525 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
526 Float_t g[3],l[3];
527
528 g[0] = fPx;
529 g[1] = fPy;
530 g[2] = fPz;
4fc5ed2d 531 if (gm) {
532 gm->GtoLMomentum(fLayer,fLadder,fDet,g,l);
533 return l[2];
534 } else {
535 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
536 return fPz;
537 }
538
b2340bbf 539}
540//___________________________________________________________________________;
541Int_t AliITShit::GetModule(){
542////////////////////////////////////////////////////////////////////////
543// Returns the module index number of the module where this hit was in.
544////////////////////////////////////////////////////////////////////////
545 AliITSgeom *gm = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom();
546
4fc5ed2d 547 if (gm) return gm->GetModuleIndex(fLayer,fLadder,fDet);
548 else {
549 Error("AliITShit","NULL pointer to the geometry! return smth else",gm);
550 return 0;
551 }
b2340bbf 552}
553//______________________________________________________________________
33da2552 554TParticle * AliITShit::GetParticle() const {
b2340bbf 555////////////////////////////////////////////////////////////////////////
556// Returns the pointer to the TParticle for the particle that created
557// this hit. From the TParticle all kinds of information about this
558// particle can be found. See the TParticle class.
559////////////////////////////////////////////////////////////////////////
5d12ce38 560 return gAlice->GetMCApp()->Particle(GetTrack());
3dbb2c95 561}
562//----------------------------------------------------------------------
33da2552 563void AliITShit::Print(ostream *os) const {
3dbb2c95 564////////////////////////////////////////////////////////////////////////
565// Standard output format for this class.
566////////////////////////////////////////////////////////////////////////
567#if defined __GNUC__
568#if __GNUC__ > 2
569 ios::fmtflags fmt;
570#else
571 Int_t fmt;
572#endif
94831058 573#else
9f69211c 574#if defined __ICC || defined __ECC || defined __xlC__
94831058 575 ios::fmtflags fmt;
3dbb2c95 576#else
577 Int_t fmt;
94831058 578#endif
3dbb2c95 579#endif
580
581 fmt = os->setf(ios::scientific); // set scientific floating point output
e11d9a3a 582 *os << fTrack << " " << fX << " " << fY << " " << fZ << " ";
3dbb2c95 583 fmt = os->setf(ios::hex); // set hex for fStatus only.
584 *os << fStatus << " ";
585 fmt = os->setf(ios::dec); // every thing else decimel.
586 *os << fLayer << " " << fLadder << " " << fDet << " ";;
587 *os << fPx << " " << fPy << " " << fPz << " ";
588 *os << fDestep << " " << fTof;
000d397e 589 *os << " " << fx0 << " " << fy0 << " " << fz0;
590// *os << " " << endl;
3dbb2c95 591 os->flags(fmt); // reset back to old formating.
592 return;
593}
594//----------------------------------------------------------------------
33da2552 595void AliITShit::Read(istream *is) {
3dbb2c95 596////////////////////////////////////////////////////////////////////////
597// Standard input format for this class.
598////////////////////////////////////////////////////////////////////////
599
e11d9a3a 600
601 *is >> fTrack >> fX >> fY >> fZ;
3dbb2c95 602 *is >> fStatus >> fLayer >> fLadder >> fDet >> fPx >> fPy >> fPz >>
603 fDestep >> fTof;
7e3ded1b 604 *is >> fx0 >> fy0 >> fz0;
3dbb2c95 605 return;
606}
607//----------------------------------------------------------------------
608ostream &operator<<(ostream &os,AliITShit &p){
609////////////////////////////////////////////////////////////////////////
610// Standard output streaming function.
611////////////////////////////////////////////////////////////////////////
612
613 p.Print(&os);
614 return os;
615}
616//----------------------------------------------------------------------
617istream &operator>>(istream &is,AliITShit &r){
618////////////////////////////////////////////////////////////////////////
619// Standard input streaming function.
620////////////////////////////////////////////////////////////////////////
621
622 r.Read(&is);
623 return is;
b2340bbf 624}
3dbb2c95 625//----------------------------------------------------------------------