/[PAMELA software]/DarthVader/CalorimeterLevel2/src/CaloLevel1.cpp
ViewVC logotype

Annotation of /DarthVader/CalorimeterLevel2/src/CaloLevel1.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Wed Nov 22 08:31:10 2006 UTC (18 years ago) by mocchiut
Branch: MAIN
Calorimeter major upgrade, Level1 branch + CaloStrip class

1 mocchiut 1.1 /**
2     * \file src/CaloLevel1.cpp
3     * \author Emiliano Mocchiutti
4     *
5     **/
6     #include <TObject.h>
7     #include <CaloLevel1.h>
8    
9     //
10     ClassImp(CaloStrip);
11     ClassImp(CaloLevel1);
12    
13     /**
14     * CaloStrip default constructor
15     **/
16     CaloStrip::CaloStrip() {
17     c1 = 0;
18     this->Clear();
19     };
20    
21     /**
22     * CaloStrip default constructor
23     **/
24     CaloStrip::CaloStrip(CaloLevel1 *calo) {
25     c1 = calo->GetCaloLevel1();
26     this->Clear();
27     };
28    
29     /**
30     * Clear variables
31     **/
32     void CaloStrip::Clear() {
33     fE = 0.;
34     fX = 0.;
35     fY = 0.;
36     fZ = 0.;
37     fView = 0;
38     fPlane = 0;
39     fStrip = 0;
40     };
41    
42     /**
43     * Given a strip returns its position in the PAMELA reference system
44     **/
45     void CaloStrip::Set(Int_t view, Int_t plane, Int_t strip) {
46     //
47     this->Clear();
48     //
49     if ( view < 0 || view > 1 ){
50     printf(" ERROR: 0 =< view =< 1 \n");
51     return;
52     };
53     if ( plane < 0 || plane > 21 ){
54     printf(" ERROR: 0 =< plane =< 21 \n");
55     return;
56     };
57     if ( strip < 0 || strip > 95 ){
58     printf(" ERROR: 0 =< strip =< 95 \n");
59     return;
60     };
61     //
62     Float_t lShift = 0.;
63     Float_t lPos = 0.;
64     extern struct shift shift_;
65     //
66     // Find MIPs for that strip
67     //
68     if ( c1 ) fE = c1->GetEstrip(view, plane, strip);
69     //
70     fView = view + 1;
71     fPlane = plane + 1;
72     fStrip = strip + 1;
73     if ( fPlane%2 ){
74     lShift = -0.5;
75     } else {
76     lShift = 0.5;
77     };
78     //
79     shift_.shift = lShift;
80     //
81     Float_t zplane[22];
82     zplane[0] = 0.;
83     Int_t ii = 0;
84     for ( Int_t i = 2; i < 23; i++){
85     ii = i-1;
86     if ( i%2 ){
87     zplane[ii] = zplane[ii-1] - 10.09;
88     } else {
89     zplane[ii] = zplane[ii-1] - 8.09;
90     };
91     };
92     //
93     millim_(&fStrip,&lPos);
94     //
95     if ( fView == 1 ){
96     //
97     // X view
98     //
99     fX = (lPos - CTX)/10.;
100     fY = 0.;
101     fZ = (zplane[fPlane-1] - 5.81 + CTZ)/10.;
102     } else {
103     //
104     // Y view
105     //
106     fX = 0;
107     fY = (lPos - CTY)/10.;
108     fZ = (zplane[fPlane-1] + CTZ)/10.;
109     };
110     //
111     };
112    
113     /**
114     * Given a point in the space (PAMELA ref system) returns the closest strip
115     **/
116     void CaloStrip::Set(Float_t X, Float_t Y, Float_t Z) {
117     //
118     // Float_t lShift = 0.;
119     // Float_t lPos = 0.;
120     // extern struct shift shift;
121     // //
122     // fView = view++;
123     // fPlane = plane++;
124     // fStrip = strip++;
125     // if ( fPlane%2 ){
126     // lShift = -0.5;
127     // } else {
128     // lShift = 0.5;
129     // };
130     // //
131     // shift.shift = lShift;
132     // //
133     // Float_t zplane[22];
134     // zplane[0] = 0.;
135     // Int_t ii = 0;
136     // for ( Int_t i = 2; i < 23; i++){
137     // ii = i-1;
138     // if ( i%2 ){
139     // zplane[ii] = zplane[ii-1] - 10.09 + CTZ;
140     // } else {
141     // zplane[ii] = zplane[ii-1] - 8.09 + CTZ;
142     // };
143     // };
144     // //
145     // millim_(&fStrip,&lPos);
146     // //
147     // if ( fView == 1 ){
148     // //
149     // // X view
150     // //
151     // fX = lPos;
152     // fY = 0.;
153     // fZ = zplane[fPlane-1] - 5.81;
154     // } else {
155     // //
156     // // Y view
157     // //
158     // fX = 0.;
159     // fY = lPos;
160     // fZ = zplane[fPlane-1];
161     // };
162     //
163     };
164     // DISTY = PIANO(I)
165     // YY(I) = DISTY * TG(2) + CY
166     // BAR(M,I) = YY(I)
167     // CBAR(M,I) = (-YALIG + YY(I))/10.
168     // C
169     // ENDIF
170     // CALL LASTRISCIA(BAR(M,I),IBAR(M,I))
171     // CIBAR(M,I) = IBAR(M,I)
172     // ENDDO
173     // ENDIF
174     // C
175     // ENDDO
176    
177    
178    
179     /**
180     * CaloLevel1 constructor
181     **/
182     CaloLevel1::CaloLevel1() {
183     //
184     estrip = TArrayI(0,NULL);
185     //
186     this->Clear();
187     //
188     };
189    
190     /**
191     * Clear the CaloLevel1 object
192     **/
193     void CaloLevel1::Clear() {
194     //
195     istrip = 0;
196     estrip.Reset();
197     //
198     };
199    
200     /**
201     * Returns the detected energy for the given strip once loaded the event
202     **/
203     Float_t CaloLevel1::GetEstrip(Int_t sview, Int_t splane, Int_t sstrip){
204     Int_t view = -1;
205     Int_t plane = -1;
206     Int_t strip = -1;
207     Float_t mip = 0.;
208     //
209     if ( istrip == 0 ) return(0.);
210     //
211     for (Int_t i = 0; i<istrip; i++ ){
212     //
213     mip = DecodeEstrip(i,view,plane,strip);
214     //
215     if ( view == sview && splane == plane && sstrip == strip ) return(mip);
216     //
217     // entry are ordered by strip, plane and view number. Go out if you pass the input strip
218     //
219     if ( view == sview && plane == splane && strip > sstrip ) return(0.);
220     if ( view == sview && plane > splane ) return(0.);
221     if ( view > sview ) return(0.);
222     //
223     };
224     return(0.);
225     };
226    
227     /**
228     * Given estrip entry returns energy plus view, plane and strip numbers
229     **/
230     Float_t CaloLevel1::DecodeEstrip(Int_t entry, Int_t &view, Int_t &plane, Int_t &strip){
231     //
232     if ( entry>istrip ) return(0.);
233     //
234     // printf(" num lim %f \n",std::numeric_limits<Float_t>::max());
235     // printf(" estrip.At(%i) = %i \n",entry,estrip.At(entry));
236     //
237     Int_t eval = 0;
238     if ( estrip.At(entry) > 0. ){
239     view = 0;
240     eval = estrip.At(entry);
241     } else {
242     view = 1;
243     eval = -estrip.At(entry);
244     };
245     //
246     Int_t fbi = 0;
247     fbi = (Int_t)truncf((Float_t)(eval/1000000000));
248     //
249     Int_t plom = 0;
250     plom = (Int_t)truncf((Float_t)((eval-fbi*1000000000)/10000000));
251     //
252     Float_t tim = 100000.;
253     plane = plom;
254     if ( fbi == 1 ) tim = 10000.;
255     if ( plom > 21 ){
256     plane = plom - 22;
257     if ( fbi == 1 ){
258     tim = 1000.;
259     } else {
260     tim = 100.;
261     };
262     };
263     if ( plom > 43 ){
264     plane = plom - 44;
265     tim = 10.;
266     };
267     if ( plom > 65 ){
268     plane = plom - 66;
269     tim = 1.;
270     };
271     //
272     strip = (Int_t)truncf((Float_t)((eval - fbi*1000000000 -plom*10000000)/100000));
273     //
274     Float_t mip = ((Float_t)(eval - fbi*1000000000 -plom*10000000 -strip*100000))/tim;
275     //
276     if ( mip > 0. && mip < 99999. ) return(mip);
277     //
278     printf(" WARNING: problems decoding value %i at entry %i \n",estrip.At(entry),entry);
279     //
280     view = -1;
281     plane = -1;
282     strip = -1;
283     return(0.);
284     }
285    

  ViewVC Help
Powered by ViewVC 1.1.23