]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSdcsSSD.cxx
Coding convention rules obeyed
[u/mrichter/AliRoot.git] / ITS / AliITSdcsSSD.cxx
1 #include <TRandom.h>
2 #include <TArrayS.h>
3
4 #include "AliITSdcsSSD.h"
5 #include "AliITSresponseSSD.h"
6 #include "AliITSsegmentationSSD.h"
7
8 ClassImp(AliITSdcsSSD)
9
10
11 //_____________________________________________________________________
12 //
13 // Constructor and Destructor
14 //_____________________________________________________________________
15
16
17 AliITSdcsSSD::AliITSdcsSSD(AliITSsegmentation *seg, AliITSresponse *resp) 
18 {
19   // constructor
20
21     fRandom = new TRandom();
22
23     fNstrips = seg->Npx();
24     
25     fInvalidP = new TArrayS();
26     fInvalidN = new TArrayS();
27
28     Int_t npar=resp->NDetParam();
29     if (npar < 6) {
30        Warning("AliITSdcsSSD","I need 6 parameters ");
31        npar=6;
32     }
33
34     Float_t *detpar= new Float_t[npar];
35     resp->GetDetParam(detpar);
36
37     fNInvalid = detpar[0];
38     fISigma = detpar[1];
39
40     fCouplingPR = detpar[2];
41     fCouplingPL = detpar[3];
42     fCouplingNR = detpar[4];
43     fCouplingNL = detpar[5]; 
44
45
46     char opt[30],dummy[20];
47     resp->ParamOptions(opt,dummy);
48     if (strstr(opt,"SetInvalid")) SetInvalidMC(fNInvalid,fISigma);
49
50     delete [] detpar;
51 }
52
53 //_____________________________________________________________________
54
55
56 AliITSdcsSSD::~AliITSdcsSSD() {
57   // destructor
58     delete fInvalidP;
59     delete fInvalidN;
60 }
61
62 //__________________________________________________________________________
63 AliITSdcsSSD::AliITSdcsSSD(const AliITSdcsSSD &source){
64   //     Copy Constructor 
65   if(&source == this) return;
66   this->fCouplingPR = source.fCouplingPR;
67   this->fCouplingPL = source.fCouplingPL;
68   this->fCouplingNR = source.fCouplingNR;
69   this->fCouplingNL = source.fCouplingNL;
70   this->fNstrips = source.fNstrips;
71   this->fNInvalid = source.fNInvalid;
72   this->fISigma = source.fISigma;
73   this->fInvalidP = source.fInvalidP;
74   this->fInvalidN = source.fInvalidN;
75   this->fRandom = source.fRandom;
76   return;
77 }
78
79 //_________________________________________________________________________
80 AliITSdcsSSD& 
81   AliITSdcsSSD::operator=(const AliITSdcsSSD &source) {
82   //    Assignment operator
83   if(&source == this) return *this;
84   this->fCouplingPR = source.fCouplingPR;
85   this->fCouplingPL = source.fCouplingPL;
86   this->fCouplingNR = source.fCouplingNR;
87   this->fCouplingNL = source.fCouplingNL;
88   this->fNstrips = source.fNstrips;
89   this->fNInvalid = source.fNInvalid;
90   this->fISigma = source.fISigma;
91   this->fInvalidP = source.fInvalidP;
92   this->fInvalidN = source.fInvalidN;
93   this->fRandom = source.fRandom;
94   return *this;
95 }
96
97 //_____________________________________________________________________
98 //
99 //  Methods for creating invalid strips
100 //_____________________________________________________________________
101 //
102
103
104 void AliITSdcsSSD::SetInvalidMC(Float_t mean, Float_t sigma) {
105   // set invalid MC
106     SetInvalidParam(mean, sigma);
107     SetInvalidMC();
108 }
109
110 //_____________________________________________________________________
111
112 void AliITSdcsSSD::SetInvalidMC() {
113   // set invalid MC
114     Int_t pside;
115     Int_t nside;
116     Int_t i;
117     Int_t strip;
118
119     pside = (Int_t)fRandom->Gaus(fNInvalid, fISigma);
120     nside = (Int_t)fRandom->Gaus(fNInvalid, fISigma);
121     
122     fInvalidP->Set(pside);
123     fInvalidN->Set(nside);
124      
125     for(i=0 ;i<pside; i++) {
126        strip = (Int_t)(fRandom->Rndm() * fNstrips);
127        fInvalidP->AddAt(strip, i); 
128     }
129     
130     for(i=0 ;i<nside; i++) {
131        strip = (Int_t)(fRandom->Rndm() * fNstrips);
132        fInvalidN->AddAt(strip, i); 
133     }  
134 }
135
136 //_____________________________________________________________________
137
138
139 void AliITSdcsSSD::SetInvalidParam(Float_t mean, Float_t sigma) {
140   // set invalid param
141     fNInvalid = mean;
142     fISigma = sigma;
143
144     fNInvalid = (fNInvalid<0)? 0 : fNInvalid;
145     fNInvalid = (fNInvalid>fNstrips)? fNstrips: fNInvalid;
146     
147     fISigma = (fISigma < 0)? 0 : fISigma;
148     fISigma = (fISigma > fNstrips/10) ? fNstrips/10 : fISigma;
149 }
150
151
152 //_____________________________________________________________________
153
154
155 void AliITSdcsSSD::GetInvalidParam(Float_t &mean, Float_t &sigma) {
156   // get invalid param
157     mean = fNInvalid;
158     sigma = fISigma;
159
160 }
161
162
163 //_____________________________________________________________________
164 //
165 //  Methods for accessing to invalid strips
166 //_____________________________________________________________________
167 //
168
169
170 Bool_t AliITSdcsSSD::IsValidP(Int_t strip) {
171   // isvalidP
172     Int_t nElem = fInvalidP->GetSize();
173     //printf("IsValidP: nElem %d\n",nElem);
174     for(Int_t i = 0; i<nElem; i++)
175        if(fInvalidP->At(i) == strip) return kFALSE;
176     return kTRUE;
177 }
178
179 //_____________________________________________________________________
180
181 Bool_t AliITSdcsSSD::IsValidN(Int_t strip) {
182   // is valid N
183     Int_t nElem = fInvalidN->GetSize();
184     //printf("IsValidN: nElem %d\n",nElem);
185     for(Int_t i = 0; i<nElem; i++)
186        if(fInvalidN->At(i) == strip) return kFALSE;
187     return kTRUE;
188 }
189
190 //_____________________________________________________________________
191
192
193 TArrayS* AliITSdcsSSD::GetInvalidP() {
194   // get invalid P
195     return fInvalidP;
196 }
197
198 TArrayS* AliITSdcsSSD::GetInvalidN() {
199   // get invalid N
200     return fInvalidN;
201 }
202
203 Int_t AliITSdcsSSD::GetNInvalidP(){
204   // get numeber of invalid P    
205     return fInvalidP->GetSize();
206 }
207
208 Int_t AliITSdcsSSD::GetNInvalidN() {
209   // // get number of invalid N
210     return fInvalidN->GetSize();
211 }
212
213 //_____________________________________________________________________
214
215
216
217
218
219
220