/[PAMELA software]/yoda/techmodel/forroutines/tracker/commonyoda/functions.f
ViewVC logotype

Contents of /yoda/techmodel/forroutines/tracker/commonyoda/functions.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5.1 - (show annotations) (download)
Sat Feb 4 12:37:45 2006 UTC (18 years, 10 months ago) by kusanagi
Branch: MAIN
CVS Tags: HEAD
Changes since 5.0: +0 -0 lines
FILE REMOVED
Several new features in this release:
a) all the packets are conform to the Mass Memory Format specifications (http://people.roma2.infn.it/~cpu/Mass_Memory_Format.html)
b) unpacking either using the old files structure OR the new one file unpacking.
c) parametrized root files compression factor
d) deleting of the following packet: TofTest, TrkTest, TrkEvent.
e) the Tracker routines now work without the use of temp files.

The point a) allow Yoda to unpack in the root file all the packets generated by the CPU. According to the MassMemoryFormat; that is three possible data are available:

1) almost explicit structure of the packet (like for Log, Tracker, Mcmd, etc....);
2) dummy data collection structure (InitHeader, InitTrailer, CalibHeader, CalibTrailer);
3) just the data of the packet (almost all Alarm and Init procedures). The class regarding this packets have only one parameters, a TArrayC class, which contain the data-block included in the packet (tat is the data below the packet Header).

The point b) has been implemented as a consequence of an agreement about a more compact structure of the unpacked data. Up to now the structure of each unpacked data consisted of a folder, named after the packet type, and three files: xxx.Header.root, xxx.NamePacket.root, xxx.Registry.root.
Starting from this release YODA, by default will unpack the data in a unique root file. The structure of this file will consist of:
- several TTree(s) named after the packet type;
- into each TTree are foreseen three TBranche(s):
    - 'Header'  (the old xxx.Header.root file)
    - 'NameOfThePacket' (the old xxx.Event.root file or the xxx.Event.DETECTOR.root)
    - 'Registry' (the old xxx.Registry.root file)

Anyway is still possible, but deprecated, to unpack using the old structure, passing to the "yoda" command the optional parameter "-multifile"

The point c) has been implemented because is well know that writing time in a TTree is as much fast as much lower is the compression factor for the root file; anyway for a PAMELA dat file, a compression equal to 0 will generate a root file which will be more than two times the original size. To modify the compression parameter just add the optional parameter "-c [0-9]" to the yoda command line.

1 *************************************************************************
2 *
3 * functions.f
4 *
5 * - !???
6 *
7 * needs:
8 * - !???
9 *
10 * output variables:
11 * - !???
12 *
13 * to be called inside !???
14 *
15 *************************************************************************
16
17
18 function pitch(view) !da' il pitch delle strip di una vista
19
20 real pitch
21 integer view
22
23 include './commontracker.f'
24
25 if(mod(view,2).eq.0) then !X
26 pitch=pitchX
27 else !Y
28 pitch=pitchY
29 endif
30
31 end
32
33
34
35 c------------------------------------------------------------------------
36
37
38
39 function npl(view) !da' il numero del piano a partire dalla vista!???
40
41 integer npl,view
42
43 npl=INT((view-1)/2)+1
44
45 end
46
47
48
49 c------------------------------------------------------------------------
50
51
52
53 function nld(istrip,view)
54 c da' il numero del ladder a partire dalla
55 C strip del piano
56
57 c chiamo ladder 1 quello dove si trova la prima strip
58 c letta X
59 c quindi la prima strip letta Y si trova sul ladder 3
60
61 integer istrip,view,nld
62
63 include './commontracker.f'
64
65 nld=INT((istrip-1)/nstrips_ladder)+1
66
67 c$$$ if(mod(view,2).eq.1) then !Y
68 c$$$ nld=4-nld
69 c$$$ endif
70
71 end
72
73
74
75 c------------------------------------------------------------------------
76
77
78
79
80 function nvk(istrip) !da' il numero del va1 a partire dalla strip del piano!???
81
82 integer istrip,nvk
83
84 include './commontracker.f'
85
86 nvk=INT((istrip-1)/nstrips_va1)+1
87
88 end
89
90
91
92 c------------------------------------------------------------------------
93
94
95
96 function nst(istrip) !da' la strip del va1 a partire dalla strip del piano!???
97
98 integer istrip,nst
99
100 include './commontracker.f'
101
102 nst=INT(mod((istrip-1),nstrips_va1))+1
103
104 end
105
106
107
108 c------------------------------------------------------------------------
109
110
111
112 c$$$ function coordpl(iev,ic,istrip,view,ladder,sen) !reads strip number of the planes
113 c$$$ ! and gives strip coordinate in micrometers, taking into
114 c$$$ ! account plane geometry.
115 c$$$ ! the origin of the coordinate is on the first
116 c$$$ ! strip of the plane
117 c$$$ integer is,istrip,view,ladder
118 c$$$ integer sensor,sen !for test2002: tells if the cluster belongs to the
119 c$$$ ! Si sensor next to the hybrid or to the far one!???
120 c$$$ real coordpl
121 c$$$
122 c$$$
123 c$$$ include './commontracker.f'
124 c$$$
125 c$$$ c NB mettere il 1024 nel commontracker...!???
126 c$$$
127 c$$$
128 c$$$ is=istrip !per evitare che cambi il valore di istrip...!???
129 c$$$
130 c$$$ coordpl=0.
131 c$$$
132 c$$$ if(mod(view,2).eq.0) then !X view
133 c$$$
134 c$$$ if((is.le.3) !X has 1018 strips...
135 c$$$ $ .or.(is.ge.1022.and.is.le.1027)
136 c$$$ $ .or.(is.ge.2046.and.is.le.2051)
137 c$$$ $ .or.(is.ge.3070)) then
138 c$$$ print*,'functions: WARNING: false X strip: strip ',is !servirebbe
139 c$$$ $ ,' view ',view,' ladder ',ladder ! errflag per poter
140 c$$$ $ ,' iev ',iev,' ic ',ic ! errflag per poter
141 c$$$ endif ! segnalare anche l'evento dal main program...!???
142 c$$$
143 c$$$ if(ladder.eq.1) then
144 c$$$ is=is-3 !4 =< istrip =< 1021
145 c$$$ coordpl=(is-1)*pitch(view)
146 c$$$ elseif(ladder.eq.2) then
147 c$$$ is=is-1024-3 !1028 =< istrip =< 2045
148 c$$$ coordpl=(1018-1)*pitch(view)+731.5+610.+731.5
149 c$$$ $ +(is-1)*pitch(view) !takes into account space between ladders (C
150 c$$$ ! fiber rails + dead Si)
151 c$$$ elseif(ladder.eq.3) then
152 c$$$ is=is-2048-3 !2052 =< istrip =< 3069
153 c$$$ coordpl=(1018-1)*pitch(view)+731.5+610.
154 c$$$ $ +731.5+(1018-1)*pitch(view)+731.5+610.
155 c$$$ $ +731.5+(is-1)*pitch(view)
156 c$$$ endif
157 c$$$
158 c$$$ elseif(mod(view,2).eq.1) then !Y view
159 c$$$
160 c$$$ is=mod(is-1,1024)+1
161 c$$$
162 c$$$ c questo non funziona sempre perche' il fascio puo' entrare su uno e uscire da un altro:/ !???
163 c$$$ c questo non funziona sempre :/ !???
164 c$$$ c questo non funziona sempre :/ !???
165 c$$$ c questo non funziona sempre :/ !???
166 c$$$ c questo non funziona sempre :/ !???
167 c$$$
168 c$$$ c if(view.ne.11) then !in 2002 beam test 11th view was flipped...!???
169 c$$$ sensor=sen
170 c$$$ c else
171 c$$$ c if(sen.eq.0) sensor=1
172 c$$$ c if(sen.eq.1) sensor=0
173 c$$$ c endif !ZZZZZZZZZZZZZZz
174 c$$$
175 c$$$
176 c$$$ if(sensor.eq.0) then !sensor=0 --> Si sensor next to hybrid!???
177 c$$$ coordpl=(is-1)*pitch(view)
178 c$$$ elseif(sensor.eq.1) then !sensor=1 --> Si sensor far from hybrid!???
179 c$$$ coordpl=(1024-1)*pitch(view)+985.0+30.
180 c$$$ $ +985.5+(is-1)*pitch(view)
181 c$$$ endif
182 c$$$
183 c$$$ if(view.eq.11) then !in 2002 beam test 11th view was flipped...!???
184 c$$$ coordpl=(is-1)*pitch(view)
185 c$$$ c coordpl=142400.-coordpl!???
186 c$$$ coordpl=0. !???
187 c$$$ c$$$ if(sensor.eq.0) then !sensor=0 --> Si sensor next to hybrid!???
188 c$$$ c$$$ coordpl=(is-1)*pitch(view)
189 c$$$ c$$$ elseif(sensor.eq.1) then !sensor=1 --> Si sensor far from hybrid!???
190 c$$$ c$$$ coordpl=(1024-1)*pitch(view)+985.0+30.
191 c$$$ c$$$ $ +985.5+(is-1)*pitch(view)
192 c$$$ c$$$ endif
193 c$$$ endif
194 c$$$
195 c$$$ endif
196 c$$$
197 c$$$ end
198 c$$$
199 c$$$
200 c$$$
201 c$$$
202 c$$$ c------------------------------------------------------------------------
203 c$$$
204 c$$$
205 c$$$
206 c$$$
207 c$$$ function coord(coordpl,view) !reads strip coordinate in micrometers respect
208 c$$$ ! to the first strip of the plane and gives it
209 c$$$ ! in PAMELA reference frame (the origin is in the
210 c$$$ ! centre of the magnet)
211 c$$$ integer view
212 c$$$
213 c$$$ real coord,coordpl
214 c$$$
215 c$$$
216 c$$$ coord=0.
217 c$$$
218 c$$$
219 c$$$ if(mod(view,2).eq.0) then !X view
220 c$$$
221 c$$$ traslX=(1018-1)*51. + 731.5 + 610. + (53330./2)
222 c$$$ coord=coordpl-traslX
223 c$$$
224 c$$$ elseif(mod(view,2).eq.1) then !Y view
225 c$$$
226 c$$$ traslY=(1024-1)*66.5 + 985. + 15. +
227 c$$$ $ ((288000./2) -
228 c$$$ $ (15000. + 1470. + 55000. + 30. + 70000. + 15.))
229 c$$$
230 c$$$ c traslY=0.!???
231 c$$$
232 c$$$ c if(view.ne.11) then !in 2002 beam test 11th view was flipped...!???
233 c$$$ coord=coordpl-traslY
234 c$$$ c else
235 c$$$ c coord=traslY-coordpl
236 c$$$ c endif!ZZZZZZZZZZZZZz
237 c$$$
238 c$$$ endif
239 c$$$
240 c$$$ end
241 c$$$
242 c$$$
243 c$$$
244 c$$$ c------------------------------------------------------------------------
245
246
247
248
249 function coordsi(istrip,view)
250 c reads strip number and gives
251 c strip coordinate in micrometers.
252 c the origin of the coordinate is on the centre
253 c of the sensor
254 integer is,istrip,view
255
256 real coordsi
257
258
259 include './commontracker.f'
260
261 c NB mettere il 1024 nel commontracker...!???
262
263
264 is=istrip !per evitare che cambi il valore di istrip...!???
265
266 is=mod(is-1,1024)+1
267
268 coordsi=0.
269
270 if(mod(view,2).eq.0) then !X view
271
272 if((is.le.3).or.(is.ge.1022)) then !X has 1018 strips...
273 print*,'functions: WARNING: false X strip: strip ',is !servirebbe
274 c $ ,' view ',view ! errflag per poter
275 endif ! segnalare anche l'evento dal main program...!???
276
277 is=is-3 !4 =< is =< 1021
278
279 edge=edgeX
280 dim=SiDimX
281
282 elseif(mod(view,2).eq.1) then !Y view
283
284 edge=edgeY
285 dim=SiDimY
286
287 if(view.eq.11) then !INVERSIONE!???
288 is=1025-is
289 endif
290
291 endif
292
293 p=pitch(view)
294
295 coord1=(is-1)*p !rispetto alla prima strip del sensore
296 coord1=coord1+edge !rispetto al bordo del sensore
297
298 coordsi=coord1-dim/2 !rispetto al centro del sensore
299
300
301
302 end
303
304
305
306 c------------------------------------------------------------------------
307
308
309
310
311 function coord(coordsi,view,ladder,sen)
312 c reads strip coordinate in
313 c micrometers respect to center of the
314 c sensor and gives it in PAMELA reference frame
315 c (the origin is in the centre of the magnet)
316
317 include './commontracker.f'
318 include './runinfo.f'
319
320 integer view,ladder,sen
321 integer sx,sy,sz
322
323 real coord,coordsi,trasl
324
325 parameter (offset=4365.) !??? ! um
326 c parameter (offset=0.)!???
327
328
329 coord=0.
330
331 sx=ladder
332 sy=sen
333 sz=npl(view)
334
335 call mech_sensor
336
337
338 if(mod(view,2).eq.0) then !X view
339
340 trasl=x_mech_sensor(sz,sx,sy) !in millimetri
341
342 elseif(mod(view,2).eq.1) then !Y view
343
344 trasl=y_mech_sensor(sz,sx,sy) !in millimetri
345
346 if(view.eq.11) then !INVERSIONE!???
347 coordsi=coordsi+offset
348 endif
349
350 endif
351
352
353 coord=coordsi+trasl*1000
354
355
356 end
357
358
359
360 c------------------------------------------------------------------------
361
362
363
364 subroutine mech_sensor
365
366 include './commontracker.f'
367
368 open(20,FILE='../common/mechanical_positions.dat')
369 do ip=1,6
370 do j=1,3
371 read(20,*)(x_mech_sensor(ip,j,k),k=1,2)
372 read(20,*)(y_mech_sensor(ip,j,k),k=1,2)
373 read(20,*)(z_mech_sensor(ip,j,k),k=1,2)
374 enddo
375 enddo
376 close(20)
377
378
379 return
380 end

  ViewVC Help
Powered by ViewVC 1.1.23