]>
Commit | Line | Data |
---|---|---|
b0f5e3fc | 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 | ||
16 | #include <TMath.h> | |
17 | ||
18 | #include "AliITSsegmentationSSD.h" | |
19 | #include "AliITSgeom.h" | |
20 | ||
21 | ||
22 | ClassImp(AliITSsegmentationSSD) | |
23 | AliITSsegmentationSSD::AliITSsegmentationSSD(){ | |
24 | // default constructor | |
25 | fGeom=0; | |
26 | fCorr=0; | |
27 | SetDetSize(); | |
e8189707 | 28 | SetPadSize(); |
29 | SetNPads(); | |
b0f5e3fc | 30 | SetAngles(); |
31 | } | |
32 | //------------------------------ | |
33 | AliITSsegmentationSSD::AliITSsegmentationSSD(AliITSgeom *geom){ | |
34 | // constuctor | |
35 | fGeom=geom; | |
36 | fCorr=0; | |
37 | SetDetSize(); | |
e8189707 | 38 | SetPadSize(); |
39 | SetNPads(); | |
b0f5e3fc | 40 | SetAngles(); |
41 | //Init(); | |
42 | } | |
43 | //____________________________________________________________________________ | |
44 | AliITSsegmentationSSD& AliITSsegmentationSSD::operator=(AliITSsegmentationSSD &source){ | |
45 | // Operator = | |
46 | if(this==&source) return *this; | |
47 | this->fNstrips = source.fNstrips; | |
48 | this->fStereoP = source.fStereoP; | |
49 | this->fStereoN = source.fStereoN; | |
50 | this->fPitch = source.fPitch; | |
51 | this->fDz = source.fDz; | |
52 | this->fDx = source.fDx; | |
53 | this->fDy = source.fDy; | |
54 | this->fGeom = source.fGeom; // copy only the pointer | |
55 | this->fCorr = new TF1(*(source.fCorr)); // make a proper copy | |
56 | return *this; | |
57 | ||
58 | } | |
59 | //____________________________________________________________________________ | |
60 | AliITSsegmentationSSD::AliITSsegmentationSSD(AliITSsegmentationSSD &source){ | |
61 | // copy constructor | |
62 | *this = source; | |
63 | } | |
64 | //------------------------------ | |
65 | void AliITSsegmentationSSD::Init(){ | |
66 | // standard initalizer | |
67 | ||
68 | AliITSgeomSSD *gssd = (AliITSgeomSSD *) (fGeom->GetShape(5,1,1)); | |
69 | const Float_t kconv=10000.; | |
70 | fDx = 2.*kconv*gssd->GetDx(); | |
71 | fDz = 2.*kconv*gssd->GetDz(); | |
72 | fDy = 2.*kconv*gssd->GetDy(); | |
e8189707 | 73 | SetPadSize(); |
74 | SetNPads(); | |
b0f5e3fc | 75 | SetAngles(); |
76 | ||
77 | } | |
78 | //------------------------------------------------------- | |
e8189707 | 79 | void AliITSsegmentationSSD::GetPadIxz(Float_t x,Float_t z,Int_t &iP,Int_t &iN) |
b0f5e3fc | 80 | { |
81 | // returns P and N sided strip numbers for a given location. | |
82 | ||
83 | // expects x, z in microns | |
84 | ||
85 | Float_t tanP=TMath::Tan(fStereoP); | |
86 | Float_t tanN=TMath::Tan(fStereoN); | |
87 | ||
88 | Float_t x1=x,z1=z; | |
89 | x1 += fDx/2; | |
90 | z1 += fDz/2; | |
91 | ||
92 | Float_t ldX = x1 - z1*tanP; // distance from left-down edge | |
93 | iP = (Int_t)(ldX/fPitch); | |
94 | iP = (iP<0)? -1: iP; | |
95 | iP = (iP>fNstrips)? -1: iP; | |
96 | ||
97 | ||
98 | ldX = x1 - tanN*(fDz - z1); | |
99 | iN = (Int_t)(ldX/fPitch); | |
100 | iN = (iN<0)? -1: iN; | |
101 | iN = (iN>fNstrips)? -1: iN; | |
102 | ||
103 | } | |
104 | //------------------------------------------------------- | |
e8189707 | 105 | void AliITSsegmentationSSD::GetPadCxz(Int_t iP,Int_t iN,Float_t &x,Float_t &z) |
b0f5e3fc | 106 | { |
107 | // actually this is the GetCrossing(Float_t &,Float_t &) | |
108 | ||
109 | // returns x, z in microns ! | |
110 | ||
111 | Float_t flag=2*fDx; | |
112 | ||
113 | Float_t tanP=TMath::Tan(fStereoP); | |
114 | Float_t tanN=TMath::Tan(fStereoN); | |
115 | ||
116 | Float_t dx = 0.1; | |
117 | x = iP*fPitch; | |
118 | z = iN*fPitch; | |
119 | ||
120 | if(tanP + tanN == 0) {x=z=flag; return ;} | |
121 | ||
122 | z = (z - x + tanN * fDz) / (tanP + tanN); | |
123 | x = x + tanP * z; | |
124 | ||
125 | x -= fDx/2; | |
126 | z -= fDz/2; | |
127 | ||
128 | if ( ( z < -(fDz/2+dx) ) || ( z > (fDz/2+dx) ) ) {x=z=flag; return ;} | |
129 | if ( ( x < -(fDx/2+dx) ) || ( x > (fDx/2+dx) ) ) {x=z=flag; return ;} | |
130 | ||
131 | return; | |
132 | } |