New ITS code for new structure and simulations.
[u/mrichter/AliRoot.git] / ITS / AliITSetfSDD.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
16 /*
17 $Log$
18 Revision 1.1.2.2  2000/06/12 18:09:36  barbera
19 fixed posible compilation errors on HP unix
20
21 Revision 1.1.2.1  2000/01/12 20:21:30  nilsen
22 missed AliITSetfSDD files ealier
23
24 $Name$
25 $Author$
26 $Id$
27 */
28
29 #include <iostream.h>
30 #include <TMath.h>
31 #include "AliITSetfSDD.h"
32
33 ////////////////////////////////////////////////////////////////////////
34 // Version: 0
35 // Written by Piergiorgio Cerello
36 // November 23 1999
37 //
38 // AliITSmapSDD is the map of SDDs.
39 //
40 //Begin_Html
41 /*
42 <img src="picts/ITS/AliITShit_Class_Diagram.gif">
43 </pre>
44 <br clear=left>
45 <font size=+2 color=red>
46 <p>This show the relasionships between the ITS hit class and the rest of Aliroot.
47 </font>
48 <pre>
49 */
50 //End_Htm
51 //extern Int_t power(Int_t b, Int_t e);
52
53 //_____________________________________________________________________________
54 ClassImp(AliITSetfSDD)
55
56 Int_t ppower(Int_t b, Int_t e) {
57   Int_t power = 1,i;
58   for(i=0; i<e; i++) power *= b;
59   return power;
60 }
61
62 AliITSetfSDD::AliITSetfSDD(Double_t timeclock)
63 {
64   // sampling time in ns
65   fSamplingTime = 1000./timeclock;
66   fT0 = 0.;
67   fDf = ppower(10,9)/(fMaxNofSamples*fSamplingTime);
68   fA0 = 9000.;
69
70   Int_t i,j,k;
71   for(i=0; i<fMaxNofPoles; i++) {
72     fZero_M[i] = 0.;
73     fZero_R[i] = 0.;
74     fZero_I[i] = 0.;
75     fPole_M[i] = 0.;
76     fPole_R[i] = 0.;
77     fPole_I[i] = 0.;
78   }
79   fPole_M[0] = 1.;
80   fPole_R[0] = -2100000.;
81   fPole_I[0] = fPole_R[0];
82   fPole_M[1] = 1.;
83   fPole_R[1] = -2100000.;
84   fPole_I[1] = -fPole_R[1];
85
86    // Compute Transfer Function
87
88   Double_t PI = acos(-1.);
89   for(i=0; i<=fMaxNofSamples/2; i++) {
90     Double_t frequency = fDf*i;
91     Double_t VM = fA0;
92     Double_t VA = 0.;
93     for(k=0; k<fMaxNofPoles; k++) {
94       if(fZero_M[k]) {
95         Double_t VZR = -fZero_R[k];
96         Double_t VZI = frequency - fZero_I[k];
97         Double_t VZM = TMath::Sqrt(VZR*VZR+VZI*VZI);
98         Double_t VZA = TMath::ATan2(VZI,VZR);
99         //      cout << "VZM: " << VZM << ", VZA: " << VZA << endl;
100         //      cout << "VZR: " << VZR << ", VZI: " << VZI << endl;
101         for(j=1; j<= (Int_t) fZero_M[k]; j++) {
102           VM *= VZM;
103           VA += VZA;
104           if(VA >= PI) VA -= (2.*PI);
105           if(VA <= -PI) VA += (2.*PI);
106           //cout << "VM: " << VM << ", VA: " << VA << endl;
107         }
108       }
109
110       if(fPole_M[k]) {
111         Double_t VPR = -fPole_R[k];
112         Double_t VPI = frequency - fPole_I[k];
113         Double_t VPM = TMath::Sqrt(VPR*VPR+VPI*VPI);
114         Double_t VPA = TMath::ATan2(VPI,VPR);
115         //cout << "VPM: " << VPM << ", VPA: " << VPA << endl;
116         //cout << "VPR: " << VPR << ", VPI: " << VPI << endl;
117         for(j=1; j<= (Int_t) fPole_M[k]; j++) {
118           VM /= VPM;
119           VA -= VPA;
120           if(VA >= PI) VA -= (2.*PI);
121           if(VA <= -PI) VA += (2.*PI);
122           //cout << "VM: " << VM << ", VA: " << VA << endl;
123         }
124       }
125       Double_t VR = VM*cos(VA);
126       Double_t VI = VM*sin(VA);
127       //cout << "VM: " << VM << ", VA: " << VA << endl;
128       //cout << "VR: " << VR << ", VI: " << VI << endl;
129       fTf_R[i] = VR*ppower(10,9);
130       fTf_I[i] = VI*ppower(10,9);
131       //cout << "fTf_R[" << i << "] = " << fTf_R[i] << endl;
132       //cout << "fTf_I[" << i << "] = " << fTf_I[i] << endl;
133       if(i) {
134         fTf_R[fMaxNofSamples-i] = fTf_R[i];
135         fTf_I[fMaxNofSamples-i] = -fTf_I[i];
136       }
137     }
138   }
139   
140   // Compute Fourier Weights
141
142   for(i=0; i<=fMaxNofSamples/2; i++) {
143     fW_R[i] = cos(-2.*PI*i/fMaxNofSamples);
144     fW_I[i] = sin(-2.*PI*i/fMaxNofSamples);
145     if(i) {
146       fW_R[fMaxNofSamples-i] = fW_R[i];
147       fW_I[fMaxNofSamples-i] = -fW_I[i];
148     }
149   }
150
151 }
152
153 void AliITSetfSDD::Print()
154 {
155   Int_t i;
156   cout << "Sampling Time " << fSamplingTime << endl;
157   cout << "Number of Time Samples " << fMaxNofSamples << endl;
158   cout << "fT0 " << fT0 << endl;
159   cout << "fDf " << fDf << endl;
160   cout << "fA0 " << fA0 << endl;
161
162   cout << "Zero's and Pole's" << endl;
163   cout << "fZero_M " << endl;
164   for(i=0; i<fMaxNofPoles; i++) cout << fZero_M[i] << endl;
165   cout << "fZero_R " << endl;
166   for(i=0; i<fMaxNofPoles; i++) cout << fZero_R[i] << endl;
167   cout << "fZero_I " << endl;
168   for(i=0; i<fMaxNofPoles; i++) cout << fZero_I[i] << endl;
169   cout << "fPole_M " << endl;
170   for(i=0; i<fMaxNofPoles; i++) cout << fPole_M[i] << endl;
171   cout << "fPole_R " << endl;
172   for(i=0; i<fMaxNofPoles; i++) cout << fPole_R[i] << endl;
173   cout << "fPole_I " << endl;
174   for(i=0; i<fMaxNofPoles; i++) cout << fPole_I[i] << endl;
175
176   cout << "Transfer function" << endl;
177   cout << "Real Part" << endl;
178   for(i=0; i<fMaxNofSamples; i++) cout << fTf_R[i] << endl;
179   cout << "Imaginary Part " << endl;
180   for(i=0; i<fMaxNofSamples; i++) cout << fTf_I[i] << endl;
181
182   cout << "Fourier Weights" << endl;
183   cout << "Real Part" << endl;
184   for(i=0; i<fMaxNofSamples; i++) cout << fW_R[i] << endl;
185   cout << "Imaginary Part " << endl;
186   for(i=0; i<fMaxNofSamples; i++) cout << fW_I[i] << endl;
187 }
188
189
190
191
192
193
194
195