4 #include "AliITSdcsSSD.h"
5 #include "AliITSCalibrationSSD.h"
6 #include "AliITSresponseSSD.h"
7 #include "AliITSsegmentationSSD.h"
8 ///////////////////////////////////////////////////////////////////////////
10 // Class AliITSdcsSSD //
11 // describes Detector Control System parameters for one SSD module. //
13 // This class stores parametrers such as gain, threshold //
14 // capacitive coupling. //
16 // Class takes care of invalid strip menagement during //
17 // simulation and runtime //
20 // created at: Warsaw University of Technology //
21 // ver. 1.0 WARSAW, 23.12.1999 //
23 ///////////////////////////////////////////////////////////////////////////
25 ClassImp(AliITSdcsSSD)
27 // Constructor and Destructor
28 //______________________________________________________________________
29 AliITSdcsSSD::AliITSdcsSSD(){
30 // Default Constructor
35 //______________________________________________________________________
36 AliITSdcsSSD::AliITSdcsSSD(AliITSsegmentation *seg, AliITSCalibration *resp){
37 // Standard constructor
39 fNstrips =(Float_t) (((AliITSsegmentationSSD*)seg)->Npx());
41 fInvalidP = new TArrayS();
42 fInvalidN = new TArrayS();
44 Int_t npar=((AliITSCalibrationSSD*)resp)->NDetParam();
46 Warning("AliITSdcsSSD","I need 6 parameters ");
50 Double_t *detpar= new Double_t[npar];
51 resp->GetDetParam(detpar);
53 fNInvalid = detpar[0];
56 fCouplingPR = detpar[2];
57 fCouplingPL = detpar[3];
58 fCouplingNR = detpar[4];
59 fCouplingNL = detpar[5];
61 char opt[30],dummy[20];
62 ((AliITSCalibrationSSD*)resp)->GetParamOptions(opt,dummy);
63 if (strstr(opt,"SetInvalid")) SetInvalidMC(fNInvalid,fISigma);
67 //______________________________________________________________________
68 AliITSdcsSSD::~AliITSdcsSSD() {
74 //______________________________________________________________________
75 AliITSdcsSSD::AliITSdcsSSD(const AliITSdcsSSD &source) : TObject(source){
78 if(&source == this) return;
80 this->fCouplingPR = source.fCouplingPR;
81 this->fCouplingPL = source.fCouplingPL;
82 this->fCouplingNR = source.fCouplingNR;
83 this->fCouplingNL = source.fCouplingNL;
84 this->fNstrips = source.fNstrips;
85 this->fNInvalid = source.fNInvalid;
86 this->fISigma = source.fISigma;
87 this->fInvalidP = source.fInvalidP;
88 this->fInvalidN = source.fInvalidN;
92 //_________________________________________________________________________
93 AliITSdcsSSD& AliITSdcsSSD::operator=(const AliITSdcsSSD &source) {
94 // Assignment operator
96 if(&source == this) return *this;
98 this->fCouplingPR = source.fCouplingPR;
99 this->fCouplingPL = source.fCouplingPL;
100 this->fCouplingNR = source.fCouplingNR;
101 this->fCouplingNL = source.fCouplingNL;
102 this->fNstrips = source.fNstrips;
103 this->fNInvalid = source.fNInvalid;
104 this->fISigma = source.fISigma;
105 this->fInvalidP = source.fInvalidP;
106 this->fInvalidN = source.fInvalidN;
110 //_____________________________________________________________________
112 // Methods for creating invalid strips
113 //_____________________________________________________________________
114 void AliITSdcsSSD::SetInvalidMC(Float_t mean, Float_t sigma) {
117 SetInvalidParam(mean, sigma);
120 //______________________________________________________________________
121 void AliITSdcsSSD::SetInvalidMC() {
128 pside = (Int_t)gRandom->Gaus(fNInvalid, fISigma);
129 nside = (Int_t)gRandom->Gaus(fNInvalid, fISigma);
131 fInvalidP->Set(pside);
132 fInvalidN->Set(nside);
134 for(i=0 ;i<pside; i++) {
135 strip = (Int_t)(gRandom->Rndm() * fNstrips);
136 fInvalidP->AddAt(strip, i);
139 for(i=0 ;i<nside; i++) {
140 strip = (Int_t)(gRandom->Rndm() * fNstrips);
141 fInvalidN->AddAt(strip, i);
144 //______________________________________________________________________
145 void AliITSdcsSSD::SetInvalidParam(Float_t mean, Float_t sigma) {
151 fNInvalid = (fNInvalid<0)? 0 : fNInvalid;
152 fNInvalid = (fNInvalid>fNstrips)? fNstrips: fNInvalid;
154 fISigma = (fISigma < 0)? 0 : fISigma;
155 fISigma = (fISigma > fNstrips/10) ? fNstrips/10 : fISigma;
157 //______________________________________________________________________
158 void AliITSdcsSSD::GetInvalidParam(Float_t &mean, Float_t &sigma) const {
164 //_____________________________________________________________________
166 // Methods for accessing to invalid strips
167 //_____________________________________________________________________
168 Bool_t AliITSdcsSSD::IsValidP(Int_t strip) {
170 Int_t nElem = fInvalidP->GetSize();
172 for(Int_t i = 0; i<nElem; i++) if(fInvalidP->At(i) == strip) return kFALSE;
175 //______________________________________________________________________
176 Bool_t AliITSdcsSSD::IsValidN(Int_t strip) {
178 Int_t nElem = fInvalidN->GetSize();
180 for(Int_t i = 0; i<nElem; i++) if(fInvalidN->At(i) == strip) return kFALSE;
183 //______________________________________________________________________
184 TArrayS* AliITSdcsSSD::GetInvalidP() {
189 //______________________________________________________________________
190 TArrayS* AliITSdcsSSD::GetInvalidN() {
195 //______________________________________________________________________
196 Int_t AliITSdcsSSD::GetNInvalidP(){
197 // get numeber of invalid P
199 return fInvalidP->GetSize();
201 //______________________________________________________________________
202 Int_t AliITSdcsSSD::GetNInvalidN() {
203 // get number of invalid N
205 return fInvalidN->GetSize();
207 //_____________________________________________________________________