faea5353ba3262ee1c9a24edbd28c5ab0f322ab7
[u/mrichter/AliRoot.git] / ITS / AliITSdigit.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 /* $Id$ */
16
17 ////////////////////////////////////////////////
18 //  Digits classes for all ITS detectors      //
19 ////////////////////////////////////////////////
20 #include "AliITSdigit.h"
21
22 //______________________________________________________________________
23 ClassImp(AliITSdigit)
24 AliITSdigit::AliITSdigit(const Int_t *digits) {
25   // Creates a real data digit object
26
27   fCoord1       = digits[0];
28   fCoord2       = digits[1];
29   fSignal       = digits[2];
30 }
31 //______________________________________________________________________
32 void AliITSdigit::Print(ostream *os){
33     //Standard output format for this class
34
35     *os << fCoord1 <<","<< fCoord2 <<","<< fSignal;
36 }
37 //______________________________________________________________________
38 void AliITSdigit::Read(istream *os){
39     //Standard input for this class
40
41     *os >> fCoord1 >> fCoord2 >> fSignal;
42 }
43 //______________________________________________________________________
44 ostream &operator<<(ostream &os,AliITSdigit &source){
45     // Standard output streaming function.
46
47     source.Print(&os);
48     return os;
49 }
50 //______________________________________________________________________
51 istream &operator>>(istream &os,AliITSdigit &source){
52     // Standard output streaming function.
53
54     source.Read(&os);
55     return os;
56 }
57 //______________________________________________________________________
58 ClassImp(AliITSdigitSPD)
59 AliITSdigitSPD::AliITSdigitSPD():AliITSdigit(){
60     // default constructor, zero coordinates and set array
61     // elements to clearly unphysical values. A value of 0 may
62     // be a valide track of hit number.
63
64     fTracks[0] = fTracks[1] = fTracks[2] = -3;
65     fHits[0] = fHits[1] = fHits[2] = -1;
66 }
67 //______________________________________________________________________
68 AliITSdigitSPD::AliITSdigitSPD(const Int_t *digits){
69     // Creates a SPD digit object
70
71     fTracks[0] = fTracks[1] = fTracks[2] = -3;
72     fHits[0] = fHits[1] = fHits[2] = -1;
73     fCoord1       = digits[0];
74     fCoord2       = digits[1];
75     fSignal       = 1;
76     fSignalSPD    = digits[2];
77 }
78 //______________________________________________________________________
79 AliITSdigitSPD::AliITSdigitSPD(const Int_t *digits,const Int_t *tracks,
80                                const Int_t *hits){
81     // Creates a simulated SPD digit object
82
83     for(Int_t i=0; i<3; i++) {
84         fTracks[i] = tracks[i];
85         fHits[i]   = hits[i];
86     } // end for i
87     fCoord1       = digits[0];
88     fCoord2       = digits[1];
89     fSignal       = 1;
90     fSignalSPD    = digits[2];
91 }
92 //______________________________________________________________________
93 void AliITSdigitSPD::Print(ostream *os){
94     //Standard output format for this class
95
96     AliITSdigit::Print(os);
97     *os <<","<< fTracks[0] <<","<< fTracks[1] <<","<< fTracks[2];
98     *os <<","<< fHits[0] <<","<< fHits[1] <<","<< fHits[2];
99     *os << "," << fSignalSPD;
100 }
101 //______________________________________________________________________
102 void AliITSdigitSPD::Read(istream *os){
103     //Standard input for this class
104
105     AliITSdigit::Read(os);
106     *os >> fTracks[0] >> fTracks[1] >> fTracks[2];
107     *os >> fHits[0] >> fHits[1] >> fHits[2] >> fSignalSPD;
108 }
109 //______________________________________________________________________
110 ostream &operator<<(ostream &os,AliITSdigitSPD &source){
111     // Standard output streaming function.
112
113     source.Print(&os);
114     return os;
115 }
116 //______________________________________________________________________
117 istream &operator>>(istream &os,AliITSdigitSPD &source){
118     // Standard output streaming function.
119
120     source.Read(&os);
121     return os;
122 }
123 //______________________________________________________________________
124 ClassImp(AliITSdigitSDD)
125 AliITSdigitSDD::AliITSdigitSDD():AliITSdigit(){
126     // default constructor, zero coordinates and set array
127     // elements to clearly unphysical values. A value of 0 may
128     // be a valide track of hit number.
129
130     fTracks[0] = fTracks[1] = fTracks[2] = -3;
131     fHits[0] = fHits[1] = fHits[2] = -1;
132     fPhysics = 0;
133     fTcharges[0] = fTcharges[1] = fTcharges[2] = 0;
134 }
135 //________________________________________________________________________
136 AliITSdigitSDD::AliITSdigitSDD(Float_t phys,const Int_t *digits):
137     AliITSdigit(digits){
138     // Creates a simulated SDD digit object to be updated
139
140     fPhysics = phys;
141 }
142 //_____________________________________________________________________________
143 AliITSdigitSDD::AliITSdigitSDD(Float_t phys,const Int_t *digits,
144                                const Int_t *tracks,const Int_t *hits,
145                                const Float_t *charges):
146     AliITSdigit(digits){
147     // Creates a simulated SDD digit object
148
149     fPhysics = phys;
150     for(Int_t i=0; i<3; i++) {
151         fTcharges[i] = charges[i];
152         fTracks[i]   = tracks[i];
153         fHits[i]     = hits[i];
154     } // end for i
155 }
156 //______________________________________________________________________
157 void AliITSdigitSDD::Print(ostream *os){
158     //Standard output format for this class
159
160     AliITSdigit::Print(os);
161     *os <<","<< fPhysics;
162     *os <<","<< fTcharges[0] <<","<< fTcharges[1] <<","<< fTcharges[2];
163     *os <<","<< fTracks[0] <<","<< fTracks[1] <<","<< fTracks[2];
164     *os <<","<< fHits[0] <<","<< fHits[1] <<","<< fHits[2];
165 }
166 //______________________________________________________________________
167 void AliITSdigitSDD::Read(istream *os){
168     //Standard input for this class
169
170     AliITSdigit::Read(os);
171     *os >>fPhysics;
172     *os >> fTcharges[0] >> fTcharges[1] >> fTcharges[2];
173     *os >> fTracks[0] >> fTracks[1] >> fTracks[2];
174     *os >> fHits[0] >> fHits[1] >> fHits[2];
175 }
176 //______________________________________________________________________
177 ostream &operator<<(ostream &os,AliITSdigitSDD &source){
178     // Standard output streaming function.
179
180     source.Print(&os);
181     return os;
182 }
183 //______________________________________________________________________
184 istream &operator>>(istream &os,AliITSdigitSDD &source){
185     // Standard output streaming function.
186
187     source.Read(&os);
188     return os;
189 }
190 //______________________________________________________________________
191 ClassImp(AliITSTransientDigit)
192 AliITSTransientDigit::AliITSTransientDigit(Float_t phys,const Int_t *digits): 
193     AliITSdigitSDD(phys,digits) {
194     // Creates a digit object in a list of digits to be updated
195
196     fTrackList   = new TObjArray;  
197 }
198 //__________________________________________________________________________
199 AliITSTransientDigit::AliITSTransientDigit(const AliITSTransientDigit &source){
200     // Copy Constructor 
201     if(&source == this) return;
202     this->fTrackList = source.fTrackList;
203     return;
204 }
205 //_________________________________________________________________________
206 AliITSTransientDigit& AliITSTransientDigit::operator=(
207     const AliITSTransientDigit &source) {
208     // Assignment operator
209     if(&source == this) return *this;
210     this->fTrackList = source.fTrackList;
211     return *this;
212 }
213 //______________________________________________________________________
214 void AliITSTransientDigit::Print(ostream *os){
215     //Standard output format for this class
216
217     AliITSdigitSDD::Print(os);
218 }
219 //______________________________________________________________________
220 void AliITSTransientDigit::Read(istream *os){
221     //Standard input for this class
222
223     AliITSdigitSDD::Read(os);
224 }
225 //______________________________________________________________________
226 ostream &operator<<(ostream &os,AliITSTransientDigit &source){
227     // Standard output streaming function.
228
229     source.Print(&os);
230     return os;
231 }
232 //______________________________________________________________________
233 istream &operator>>(istream &os,AliITSTransientDigit &source){
234     // Standard output streaming function.
235
236     source.Read(&os);
237     return os;
238 }
239 //______________________________________________________________________
240 ClassImp(AliITSdigitSSD)
241 AliITSdigitSSD::AliITSdigitSSD():AliITSdigit(){
242     // default constructor
243
244     fTracks[0] = fTracks[1] = fTracks[2] = -3;
245     fHits[0] = fHits[1] = fHits[2] = -1;
246 }
247 //__________________________________________________________________________
248 AliITSdigitSSD::AliITSdigitSSD(const Int_t *digits):AliITSdigit(digits){
249     // Creates a real SSD digit object
250 }
251 //_____________________________________________________________________________
252 AliITSdigitSSD::AliITSdigitSSD(const Int_t *digits,const Int_t *tracks,
253                                const Int_t *hits):AliITSdigit(digits){
254     // Creates a simulated SSD digit object
255
256     for(Int_t i=0; i<3; i++) {
257         fTracks[i] = tracks[i];
258         fHits[i]   = hits[i];
259     } // end for i
260 }
261 //______________________________________________________________________
262 void AliITSdigitSSD::Print(ostream *os){
263     //Standard output format for this class
264
265     AliITSdigit::Print(os);
266     *os <<","<< fTracks[0] <<","<< fTracks[1] <<","<< fTracks[2];
267     *os <<","<< fHits[0] <<","<< fHits[1] <<","<< fHits[2];
268 }
269 //______________________________________________________________________
270 void AliITSdigitSSD::Read(istream *os){
271     //Standard input for this class
272
273     AliITSdigit::Read(os);
274     *os >> fTracks[0] >> fTracks[1] >> fTracks[2];
275     *os >> fHits[0] >> fHits[1] >> fHits[2];
276 }
277 //______________________________________________________________________
278 ostream &operator<<(ostream &os,AliITSdigitSSD &source){
279     // Standard output streaming function.
280
281     source.Print(&os);
282     return os;
283 }
284 //______________________________________________________________________
285 istream &operator>>(istream &os,AliITSdigitSSD &source){
286     // Standard output streaming function.
287
288     source.Read(&os);
289     return os;
290 }