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