/[PAMELA software]/DarthVader/TrackerLevel2/src/F77/functionspfa.f
ViewVC logotype

Contents of /DarthVader/TrackerLevel2/src/F77/functionspfa.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (show annotations) (download)
Fri Feb 16 14:56:02 2007 UTC (17 years, 11 months ago) by pam-fi
Branch: MAIN
Changes since 1.7: +14 -9 lines
Magnetic field, improoved de/dx, reprocessing tools

1 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
2 * this file contains all subroutines and functions
3 * that are needed for position finding algorithms
4 *
5 *
6 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
7
8
9 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
10 real function pfaeta(ic,angle)
11 *--------------------------------------------------------------
12 * this function returns the position (in strip units)
13 * it calls:
14 * - pfaeta2(ic,angle)
15 * - pfaeta3(ic,angle)
16 * - pfaeta4(ic,angle)
17 * according to the angle
18 *--------------------------------------------------------------
19 include 'commontracker.f'
20 c include 'calib.f'
21 include 'level1.f'
22
23 pfaeta = 0
24
25 if(mod(int(VIEW(ic)),2).eq.1)then !Y-view
26
27 pfaeta = pfaeta2(ic,angle)
28
29 else !X-view
30
31 if(abs(angle).le.10.)then
32 pfaeta = pfaeta2(ic,angle)
33 elseif(abs(angle).gt.10..and.abs(angle).le.15.)then
34 pfaeta = pfaeta3(ic,angle)
35 elseif(abs(angle).gt.15.)then
36 pfaeta = pfaeta4(ic,angle)
37 endif
38
39 endif
40
41 c print*,'pfaeta ',pfaeta, angle
42
43 100 return
44 end
45
46 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
47 real function ris_eta(ic,angle)
48 *--------------------------------------------------------------
49 * this function returns the average spatial resolution
50 * (in cm) for the ETA algorithm (function pfaeta(ic,angle))
51 * it calls:
52 * - risx_eta2(angle)
53 * - risy_eta2(angle)
54 * - risx_eta3(angle)
55 * - risx_eta4(angle)
56 * according to the angle
57 *--------------------------------------------------------------
58 include 'commontracker.f'
59 c include 'calib.f'
60 include 'level1.f'
61
62 c$$$ logical DEBUG
63 c$$$ common/dbg/DEBUG
64
65 ris_eta = 0
66
67 if(mod(int(VIEW(ic)),2).eq.1)then !Y-view
68
69 ris_eta = risy_eta2(angle)
70 if(abs(angle).gt.21.)ris_eta = risy_eta2(21.)
71
72 else !X-view
73
74 if(abs(angle).le.10.)then
75 ris_eta = risx_eta2(angle)
76 elseif(abs(angle).gt.10..and.abs(angle).le.15.)then
77 ris_eta = risx_eta3(angle)
78 elseif(abs(angle).gt.15..and.abs(angle).le.21.)then
79 ris_eta = risx_eta4(angle)
80 elseif(abs(angle).gt.21.)then
81 ris_eta = risx_eta4(21.)
82 endif
83
84 endif
85
86 c$$$ if(DEBUG)print*,'ris (ic ',ic,' ang',angle,')'
87 c$$$ $ ,' -->',ris_eta
88
89
90 100 return
91 end
92
93 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
94 real function fbad_eta(ic,angle)
95 *-------------------------------------------------------
96 * this function returns a factor that takes into
97 * account deterioration of the spatial resolution
98 * in the case BAD strips are included in the cluster.
99 * This factor should multiply the nominal spatial
100 * resolution.
101 * It calls the function FBAD_COG(NCOG,IC),
102 * accordingto the angle
103 *-------------------------------------------------------
104
105 include 'commontracker.f'
106 include 'level1.f'
107 * include 'calib.f'
108 fbad_eta = 0
109
110 if(mod(int(VIEW(ic)),2).eq.1)then !Y-view
111
112 fbad_eta = fbad_cog(2,ic)
113
114 else !X-view
115
116 if(abs(angle).le.10.)then
117 fbad_eta = fbad_cog(2,ic)
118 elseif(abs(angle).gt.10..and.abs(angle).le.15.)then
119 fbad_eta = fbad_cog(3,ic)
120 elseif(abs(angle).gt.15.)then
121 fbad_eta = fbad_cog(4,ic)
122 endif
123
124 endif
125
126 return
127 end
128
129 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
130 c*****************************************************
131 cccccc 02/02/2006 modified by Elena Vannuccini --> (1)
132 c*****************************************************
133 c real function pfaeta2(cog2,view,lad,angle)
134 real function pfaeta2(ic,angle) !(1)
135 *--------------------------------------------------------------
136 * this function returns
137 *
138 * - the position (in strip units)
139 * corrected according to the ETA2 Position Finding Algorithm.
140 * The function performs an interpolation of FETA2%ETA2
141 *
142 * - if the angle is out of range, the calibration parameters
143 * of the lowest or higher bin are used
144 *
145 *--------------------------------------------------------------
146 include 'commontracker.f'
147 include 'calib.f'
148 include 'level1.f'
149
150 real cog2,angle
151 integer iview,lad
152
153 c logical DEBUG
154 c common/dbg/DEBUG
155
156 c print*,'## pfaeta2 ',ic,angle
157 iview = VIEW(ic) !(1)
158 lad = nld(MAXS(ic),VIEW(ic)) !(1)
159 cog2 = cog(2,ic) !(1)
160 pfaeta2=cog2
161
162 * find angular bin
163 * (in futuro possiamo pensare di interpolare anche sull'angolo)
164 do iang=1,nangbin
165 c print*,'~~~~~~~~~~~~ ',iang,angL(iang),angR(iang),angle
166 if(angL(iang).lt.angle.and.angR(iang).ge.angle)then
167 iangle=iang
168 goto 98
169 endif
170 enddo
171 if(DEBUG)
172 $ print*,'pfaeta2 *** warning *** angle out of range: ',angle
173 if(angle.lt.angL(1))iang=1
174 if(angle.gt.angR(nangbin))iang=nangbin
175 98 continue !jump here if ok
176
177
178 c$$$* find extremes of interpolation
179 c$$$ iflag=0
180 c$$$* --------------------------------
181 c$$$ if(cog2.lt.eta2(1,iang).or.cog2.gt.eta2(netaval,iang))then
182 c$$$c print*,'pfaeta2 *** warning *** argument out of range: ',cog2
183 c$$$* goto 100
184 c$$$* ----------------------------------------------
185 c$$$* non salto piu`, ma scalo di 1 o -1
186 c$$$* nel caso si tratti di un cluster
187 c$$$* in cui la strip con il segnale massimo non coincide
188 c$$$* con la strip con il rapposto s/n massimo!!!
189 c$$$* ----------------------------------------------
190 c$$$ if(cog2.lt.eta2(1,iang))then !temp
191 c$$$ cog2=cog2+1. !temp
192 c$$$ iflag=1 !temp
193 c$$$ else !temp
194 c$$$ cog2=cog2-1. !temp
195 c$$$ iflag=-1 !temp
196 c$$$ endif !temp
197 c$$$c print*,'shifted >>> ',cog2
198 c$$$ endif
199
200 iadd=0
201 10 continue
202 if(cog2.lt.eta2(1,iang))then
203 cog2 = cog2 + 1
204 iadd = iadd + 1
205 goto 10
206 endif
207 20 continue
208 if(cog2.gt.eta2(netaval,iang))then
209 cog2 = cog2 - 1
210 iadd = iadd - 1
211 goto 20
212 endif
213
214 * --------------------------------
215 c print*,'*****',i,view,lad,iang,'------> cog2 ',cog2
216 do i=2,netaval
217 if(eta2(i,iang).gt.cog2)then
218
219 x1 = eta2(i-1,iang)
220 x2 = eta2(i,iang)
221 y1 = feta2(i-1,iview,lad,iang)
222 y2 = feta2(i,iview,lad,iang)
223
224 c print*,'*****',i,view,lad,iang
225 c print*,'-----',x1,x2,y1,y2
226 goto 99
227 endif
228 enddo
229 99 continue
230
231
232 AA=(y2-y1)/(x2-x1)
233 BB=y1-AA*x1
234
235 pfaeta2 = AA*cog2+BB
236 pfaeta2 = pfaeta2 - iadd
237
238 c$$$ if(iflag.eq.1)then
239 c$$$ pfaeta2=pfaeta2-1. !temp
240 c$$$ cog2=cog2-1. !temp
241 c$$$ endif
242 c$$$ if(iflag.eq.-1)then
243 c$$$ pfaeta2=pfaeta2+1. !temp
244 c$$$ cog2=cog2+1. !temp
245 c$$$ endif
246
247 if(DEBUG)print*,'ETA2 (ic ',ic,' ang',angle,')'
248 $ ,cog2-iadd,' -->',pfaeta2
249
250
251 100 return
252 end
253
254 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
255 c*****************************************************
256 cccccc 02/02/2006 modified by Elena Vannuccini --> (1)
257 c*****************************************************
258 c real function pfaeta3(cog3,view,lad,angle)
259 real function pfaeta3(ic,angle) !(1)
260 *--------------------------------------------------------------
261 * this function returns
262 *
263 * - the position (in strip units)
264 * corrected according to the ETA3 Position Finding Algorithm.
265 * The function performs an interpolation of FETA3%ETA3
266 *
267 * - if the angle is out of range, the calibration parameters
268 * of the lowest or higher bin are used
269 *
270 *--------------------------------------------------------------
271 include 'commontracker.f'
272 include 'calib.f'
273 include 'level1.f'
274
275 real cog3,angle
276 integer iview,lad
277
278 c logical DEBUG
279 c common/dbg/DEBUG
280
281 c print*,'## pfaeta3 ',ic,angle
282
283 iview = VIEW(ic) !(1)
284 lad = nld(MAXS(ic),VIEW(ic)) !(1)
285 cog3 = cog(3,ic) !(1)
286 pfaeta3=cog3
287
288 * find angular bin
289 * (in futuro possiamo pensare di interpolare anche sull'angolo)
290 do iang=1,nangbin
291 c print*,'~~~~~~~~~~~~ ',iang,angL(iang),angR(iang),angle
292 if(angL(iang).lt.angle.and.angR(iang).ge.angle)then
293 iangle=iang
294 goto 98
295 endif
296 enddo
297 if(DEBUG)
298 $ print*,'pfaeta3 *** warning *** angle out of range: ',angle
299 if(angle.lt.angL(1))iang=1
300 if(angle.gt.angR(nangbin))iang=nangbin
301 98 continue !jump here if ok
302
303
304 c$$$* find extremes of interpolation
305 c$$$ iflag=0
306 c$$$* --------------------------------
307 c$$$ if(cog3.lt.eta3(1,iang).or.cog3.gt.eta3(netaval,iang))then
308 c$$$* ----------------------------------------------
309 c$$$* non salto piu`, ma scalo di 1 o -1
310 c$$$* nel caso si tratti di un cluster
311 c$$$* in cui la strip con il segnale massimo non coincide
312 c$$$* con la strip con il rapposto s/n massimo!!!
313 c$$$* ----------------------------------------------
314 c$$$ if(cog2.lt.eta2(1,iang))then !temp
315 c$$$ cog2=cog2+1. !temp
316 c$$$ iflag=1 !temp
317 c$$$ else !temp
318 c$$$ cog2=cog2-1. !temp
319 c$$$ iflag=-1 !temp
320 c$$$ endif !temp
321 c$$$c print*,'shifted >>> ',cog2
322 c$$$ endif
323
324
325 iadd=0
326 10 continue
327 if(cog3.lt.eta3(1,iang))then
328 cog3 = cog3 + 1
329 iadd = iadd + 1
330 goto 10
331 endif
332 20 continue
333 if(cog3.gt.eta3(netaval,iang))then
334 cog3 = cog3 - 1
335 iadd = iadd - 1
336 goto 20
337 endif
338
339 * --------------------------------
340 c print*,'*****',i,view,lad,iang,'------> cog2 ',cog2
341 do i=2,netaval
342 if(eta3(i,iang).gt.cog3)then
343
344 x1 = eta3(i-1,iang)
345 x2 = eta3(i,iang)
346 y1 = feta3(i-1,iview,lad,iang)
347 y2 = feta3(i,iview,lad,iang)
348
349 c print*,'*****',i,view,lad,iang
350 c print*,'-----',x1,x2,y1,y2
351 goto 99
352 endif
353 enddo
354 99 continue
355
356
357 AA=(y2-y1)/(x2-x1)
358 BB=y1-AA*x1
359
360 pfaeta3 = AA*cog3+BB
361 pfaeta3 = pfaeta3 - iadd
362
363 c$$$ if(iflag.eq.1)then
364 c$$$ pfaeta2=pfaeta2-1. !temp
365 c$$$ cog2=cog2-1. !temp
366 c$$$ endif
367 c$$$ if(iflag.eq.-1)then
368 c$$$ pfaeta2=pfaeta2+1. !temp
369 c$$$ cog2=cog2+1. !temp
370 c$$$ endif
371
372 if(DEBUG)print*,'ETA3 (ic ',ic,' ang',angle,')'
373 $ ,cog3-iadd,' -->',pfaeta3
374
375 100 return
376 end
377
378 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
379 c*****************************************************
380 cccccc 02/02/2006 modified by Elena Vannuccini --> (1)
381 c*****************************************************
382 c real function pfaeta4(cog4,view,lad,angle)
383 real function pfaeta4(ic,angle) !(1)
384 *--------------------------------------------------------------
385 * this function returns
386 *
387 * - the position (in strip units)
388 * corrected according to the ETA4 Position Finding Algorithm.
389 * The function performs an interpolation of FETA3%ETA3
390 *
391 * - if the angle is out of range, the calibration parameters
392 * of the lowest or higher bin are used
393 *
394 *--------------------------------------------------------------
395 include 'commontracker.f'
396 include 'calib.f'
397 include 'level1.f'
398
399 real cog4,angle
400 integer iview,lad
401
402 c logical DEBUG
403 c common/dbg/DEBUG
404
405 c print*,'## pfaeta4 ',ic,angle
406
407 iview = VIEW(ic) !(1)
408 lad = nld(MAXS(ic),VIEW(ic)) !(1)
409 cog4=cog(4,ic) !(1)
410 pfaeta4=cog4
411
412 * find angular bin
413 * (in futuro possiamo pensare di interpolare anche sull'angolo)
414 do iang=1,nangbin
415 c print*,'~~~~~~~~~~~~ ',iang,angL(iang),angR(iang),angle
416 if(angL(iang).lt.angle.and.angR(iang).ge.angle)then
417 iangle=iang
418 goto 98
419 endif
420 enddo
421 if(DEBUG)
422 $ print*,'pfaeta4 *** warning *** angle out of range: ',angle
423 if(angle.lt.angL(1))iang=1
424 if(angle.gt.angR(nangbin))iang=nangbin
425 98 continue !jump here if ok
426
427
428 c$$$* find extremes of interpolation
429 c$$$ iflag=0
430 c$$$* --------------------------------
431 c$$$ if(cog3.lt.eta3(1,iang).or.cog3.gt.eta3(netaval,iang))then
432 c$$$* ----------------------------------------------
433 c$$$* non salto piu`, ma scalo di 1 o -1
434 c$$$* nel caso si tratti di un cluster
435 c$$$* in cui la strip con il segnale massimo non coincide
436 c$$$* con la strip con il rapposto s/n massimo!!!
437 c$$$* ----------------------------------------------
438 c$$$ if(cog2.lt.eta2(1,iang))then !temp
439 c$$$ cog2=cog2+1. !temp
440 c$$$ iflag=1 !temp
441 c$$$ else !temp
442 c$$$ cog2=cog2-1. !temp
443 c$$$ iflag=-1 !temp
444 c$$$ endif !temp
445 c$$$c print*,'shifted >>> ',cog2
446 c$$$ endif
447
448
449 iadd=0
450 10 continue
451 if(cog4.lt.eta4(1,iang))then
452 cog4 = cog4 + 1
453 iadd = iadd + 1
454 goto 10
455 endif
456 20 continue
457 if(cog4.gt.eta4(netaval,iang))then
458 cog4 = cog4 - 1
459 iadd = iadd - 1
460 goto 20
461 endif
462
463 * --------------------------------
464 c print*,'*****',i,view,lad,iang,'------> cog2 ',cog2
465 do i=2,netaval
466 if(eta4(i,iang).gt.cog4)then
467
468 x1 = eta4(i-1,iang)
469 x2 = eta4(i,iang)
470 y1 = feta4(i-1,iview,lad,iang)
471 y2 = feta4(i,iview,lad,iang)
472
473 c print*,'*****',i,view,lad,iang
474 c print*,'-----',x1,x2,y1,y2
475 goto 99
476 endif
477 enddo
478 99 continue
479
480
481 AA=(y2-y1)/(x2-x1)
482 BB=y1-AA*x1
483
484 pfaeta4 = AA*cog4+BB
485 pfaeta4 = pfaeta4 - iadd
486
487 c$$$ if(iflag.eq.1)then
488 c$$$ pfaeta2=pfaeta2-1. !temp
489 c$$$ cog2=cog2-1. !temp
490 c$$$ endif
491 c$$$ if(iflag.eq.-1)then
492 c$$$ pfaeta2=pfaeta2+1. !temp
493 c$$$ cog2=cog2+1. !temp
494 c$$$ endif
495
496 if(DEBUG)print*,'ETA4 (ic ',ic,' ang',angle,')'
497 $ ,cog4-iadd,' -->',pfaeta4
498
499 100 return
500 end
501
502
503
504 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
505 real function cog0(ncog,ic)
506 *-------------------------------------------------
507 * this function returns
508 *
509 * - the Center-Of-Gravity of the cluster IC
510 * evaluated using NCOG strips,
511 * calculated relative to MAXS(IC)
512 *
513 * - zero in case that not enough strips
514 * have a positive signal
515 *
516 * NOTE:
517 * This is the old definition, used by Straulino.
518 * The new routine, according to Landi,
519 * is COG(NCOG,IC)
520 *-------------------------------------------------
521
522
523 include 'commontracker.f'
524 include 'level1.f'
525
526 * --> signal of the central strip
527 sc = CLSIGNAL(INDMAX(ic)) !center
528
529 * signal of adjacent strips
530 * --> left
531 sl1 = 0 !left 1
532 if(
533 $ (INDMAX(ic)-1).ge.INDSTART(ic)
534 $ )
535 $ sl1 = max(0.,CLSIGNAL(INDMAX(ic)-1))
536
537 sl2 = 0 !left 2
538 if(
539 $ (INDMAX(ic)-2).ge.INDSTART(ic)
540 $ )
541 $ sl2 = max(0.,CLSIGNAL(INDMAX(ic)-2))
542
543 * --> right
544 sr1 = 0 !right 1
545 if(
546 $ (ic.ne.NCLSTR1.and.(INDMAX(ic)+1).lt.INDSTART(ic+1))
547 $ .or.
548 $ (ic.eq.NCLSTR1.and.(INDMAX(ic)+1).le.TOTCLLENGTH)
549 $ )
550 $ sr1 = max(0.,CLSIGNAL(INDMAX(ic)+1))
551
552 sr2 = 0 !right 2
553 if(
554 $ (ic.ne.NCLSTR1.and.(INDMAX(ic)+2).lt.INDSTART(ic+1))
555 $ .or.
556 $ (ic.eq.NCLSTR1.and.(INDMAX(ic)+2).le.TOTCLLENGTH)
557 $ )
558 $ sr2 = max(0.,CLSIGNAL(INDMAX(ic)+2))
559
560 ************************************************************
561 * COG computation
562 ************************************************************
563
564 c print*,sl2,sl1,sc,sr1,sr2
565
566 COG = 0.
567
568 if(sl1.gt.sr1.and.sl1.gt.0.)then
569
570 if(ncog.eq.2.and.sl1.ne.0)then
571 COG = -sl1/(sl1+sc)
572 elseif(ncog.eq.3.and.sl1.ne.0.and.sr1.ne.0)then
573 COG = (sr1-sl1)/(sl1+sc+sr1)
574 elseif(ncog.eq.4.and.sl1.ne.0.and.sr1.ne.0.and.sl2.ne.0)then
575 COG = (sr1-sl1-2*sl2)/(sl2+sl1+sc+sr1)
576 else
577 COG = 0.
578 endif
579
580 elseif(sl1.le.sr1.and.sr1.gt.0.)then
581
582 if(ncog.eq.2.and.sr1.ne.0)then
583 COG = sr1/(sc+sr1)
584 elseif(ncog.eq.3.and.sr1.ne.0.and.sl1.ne.0)then
585 COG = (sr1-sl1)/(sl1+sc+sr1)
586 elseif(ncog.eq.4.and.sr1.ne.0.and.sl1.ne.0.and.sr2.ne.0)then
587 COG = (2*sr2+sr1-sl1)/(sl2+sl1+sc+sr1)
588 else
589 COG = 0.
590 endif
591
592 endif
593
594 COG0 = COG
595
596 c print *,ncog,ic,cog,'/////////////'
597
598 return
599 end
600
601 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
602 real function cog(ncog,ic)
603 *-------------------------------------------------
604 * this function returns
605 *
606 * - if NCOG=0, the Center-Of-Gravity of the
607 * cluster IC, relative to MAXS(IC), according to
608 * the cluster multiplicity
609 *
610 * - if NCOG>0, the Center-Of-Gravity of the cluster IC
611 * evaluated using NCOG strips, even if they have a
612 * negative signal (according to Landi)
613 *
614 *-------------------------------------------------
615
616
617 include 'commontracker.f'
618 include 'calib.f'
619 include 'level1.f'
620
621 c logical DEBUG
622 c common/dbg/DEBUG
623
624
625 if (ncog.gt.0) then
626 * ===========================
627 * ETA2 ETA3 ETA4 computation
628 * ===========================
629
630 * --> signal of the central strip
631 sc = CLSIGNAL(INDMAX(ic)) !center
632 * signal of adjacent strips
633 sl1 = 0 !left 1
634 if(
635 $ (INDMAX(ic)-1).ge.INDSTART(ic)
636 $ )
637 $ sl1 = CLSIGNAL(INDMAX(ic)-1)
638
639 sl2 = 0 !left 2
640 if(
641 $ (INDMAX(ic)-2).ge.INDSTART(ic)
642 $ )
643 $ sl2 = CLSIGNAL(INDMAX(ic)-2)
644
645 sr1 = 0 !right 1
646 if(
647 $ (ic.ne.NCLSTR1.and.(INDMAX(ic)+1).lt.INDSTART(ic+1))
648 $ .or.
649 $ (ic.eq.NCLSTR1.and.(INDMAX(ic)+1).le.TOTCLLENGTH)
650 $ )
651 $ sr1 = CLSIGNAL(INDMAX(ic)+1)
652
653 sr2 = 0 !right 2
654 if(
655 $ (ic.ne.NCLSTR1.and.(INDMAX(ic)+2).lt.INDSTART(ic+1))
656 $ .or.
657 $ (ic.eq.NCLSTR1.and.(INDMAX(ic)+2).le.TOTCLLENGTH)
658 $ )
659 $ sr2 = CLSIGNAL(INDMAX(ic)+2)
660
661 COG = 0.
662
663 c print*,'## ',sl2,sl1,sc,sr1,sr2
664
665 if(ncog.eq.1)then
666 COG = 0.
667 elseif(ncog.eq.2)then
668 if(sl1.gt.sr1)then
669 if((sl1+sc).ne.0)COG = -sl1/(sl1+sc)
670 elseif(sl1.le.sr1)then
671 if((sc+sr1).ne.0)COG = sr1/(sc+sr1)
672 endif
673 elseif(ncog.eq.3)then
674 if((sl1+sc+sr1).ne.0)COG = (sr1-sl1)/(sl1+sc+sr1)
675 elseif(ncog.eq.4)then
676 if(sl2.gt.sr2)then
677 if((sl2+sl1+sc+sr1).ne.0)
678 $ COG = (sr1-sl1-2*sl2)/(sl2+sl1+sc+sr1)
679 elseif(sl2.le.sr2)then
680 if((sl2+sl1+sc+sr1).ne.0)
681 $ COG = (2*sr2+sr1-sl1)/(sl2+sl1+sc+sr1)
682 endif
683 else
684 print*,'function COG(NCOG,IC) ==> WARNING!! NCOG=',NCOG
685 $ ,' not implemented'
686 COG = 0.
687 endif
688
689 c print*,'NCOG ',ncog,ic,' @@@ ',sl1,sc,sr1,' @@@ ',cog
690
691 elseif(ncog.eq.0)then
692 * =========================
693 * COG computation
694 * =========================
695
696 iv=VIEW(ic)
697 if(mod(iv,2).eq.1)incut=incuty
698 if(mod(iv,2).eq.0)incut=incutx
699
700 istart = INDSTART(IC)
701 istop = TOTCLLENGTH
702 if(ic.lt.NCLSTR1)istop=INDSTART(IC+1)-1
703 COG = 0
704 mu = 0
705 do i = istart,istop
706 ipos = i-INDMAX(ic)
707 cut = incut*CLSIGMA(i)
708 if(CLSIGNAL(i).ge.cut)then
709 COG = COG + ipos*CLSIGNAL(i)
710 mu = mu + 1
711 endif
712 enddo
713 if(SGNL(ic).le.0)then
714 print*,'cog(0,ic) --> ic, dedx ',ic,SGNL(ic)
715 print*,(CLSIGNAL(i)/CLSIGMA(i),i=istart,istop)
716 print*,(CLSIGNAL(i),i=istart,istop)
717 print*,'cog(0,ic) --> NOT EVALUATED '
718 else
719 COG=COG/SGNL(ic)
720 endif
721
722 else
723
724 COG=0
725 print*,'function COG(NCOG,IC) ==> WARNING!! NCOG=',NCOG
726 print*,' (NCOG must be >= 0)'
727
728
729 endif
730
731 c print *,'## cog ',ncog,ic,cog,'/////////////'
732
733 return
734 end
735
736 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
737 real function fbad_cog(ncog,ic)
738 *-------------------------------------------------------
739 * this function returns a factor that takes into
740 * account deterioration of the spatial resolution
741 * in the case BAD strips are included in the cluster.
742 * This factor should multiply the nominal spatial
743 * resolution.
744 *
745 *-------------------------------------------------------
746
747 include 'commontracker.f'
748 include 'level1.f'
749 include 'calib.f'
750
751 if(mod(int(VIEW(ic)),2).eq.1)then !Y-view
752 f = 4.
753 si = 8.4
754 incut=incuty
755 else !X-view
756 f = 6.
757 si = 3.9
758 incut=incutx
759 endif
760
761 fbad_cog = 1.
762
763 if (ncog.gt.0) then
764
765 * --> signal of the central strip
766 sc = CLSIGNAL(INDMAX(ic)) !center
767 fsc = 1
768 c if(BAD(VIEW(ic),nvk(MAXS(ic)),nst(MAXS(ic)) ).eq.0)fsc=f
769 if( CLBAD(INDMAX(ic)).eq.0 )fsc=f
770 * --> signal of adjacent strips
771 sl1 = 0 !left 1
772 fsl1 = 1 !left 1
773 if(
774 $ (INDMAX(ic)-1).ge.INDSTART(ic)
775 $ )then
776 sl1 = CLSIGNAL(INDMAX(ic)-1)
777 c if(BAD(VIEW(ic),nvk(MAXS(ic)-1),nst(MAXS(ic)-1)).eq.0)fsl1=f
778 if( CLBAD(INDMAX(ic)-1).eq.0)fsl1=f
779 c else
780 c fsl1 = 0
781 endif
782
783 sl2 = 0 !left 2
784 fsl2 = 1 !left 2
785 if(
786 $ (INDMAX(ic)-2).ge.INDSTART(ic)
787 $ )then
788 sl2 = CLSIGNAL(INDMAX(ic)-2)
789 c if(BAD(VIEW(ic),nvk(MAXS(ic)-2),nst(MAXS(ic)-2)).eq.0)fsl2=f
790 if(CLBAD(INDMAX(ic)-2).eq.0)fsl2=f
791 c else
792 c fsl2 = 0
793 endif
794 sr1 = 0 !right 1
795 fsr1 = 1 !right 1
796 if(
797 $ (ic.ne.NCLSTR1.and.(INDMAX(ic)+1).lt.INDSTART(ic+1))
798 $ .or.
799 $ (ic.eq.NCLSTR1.and.(INDMAX(ic)+1).le.TOTCLLENGTH)
800 $ )then
801 sr1 = CLSIGNAL(INDMAX(ic)+1)
802 c if(BAD(VIEW(ic),nvk(MAXS(ic)+1),nst(MAXS(ic)+1)).eq.0)fsr1=f
803 if(CLBAD(INDMAX(ic)+1).eq.0)fsr1=f
804 c else
805 c fsr1 = 0
806 endif
807 sr2 = 0 !right 2
808 fsr2 = 1 !right 2
809 if(
810 $ (ic.ne.NCLSTR1.and.(INDMAX(ic)+2).lt.INDSTART(ic+1))
811 $ .or.
812 $ (ic.eq.NCLSTR1.and.(INDMAX(ic)+2).le.TOTCLLENGTH)
813 $ )then
814 sr2 = CLSIGNAL(INDMAX(ic)+2)
815 c if(BAD(VIEW(ic),nvk(MAXS(ic)+2),nst(MAXS(ic)+2)).eq.0)fsr2=f
816 if(CLBAD(INDMAX(ic)+2).eq.0)fsr2=f
817 c else
818 c fsr2 = 0
819 endif
820
821
822
823 ************************************************************
824 * COG computation
825 ************************************************************
826
827 c print*,sl2,sl1,sc,sr1,sr2
828
829 COG = 0.
830
831 if(ncog.eq.2)then
832 if(sl1.gt.sr1)then
833 COG = -sl1/(sl1+sc)
834 fbad_cog = (fsl1*(-1-COG)**2+fsc*(-COG)**2)
835 fbad_cog = fbad_cog / ((-1-COG)**2+(-COG)**2)
836 elseif(sl1.le.sr1)then
837 COG = sr1/(sc+sr1)
838 fbad_cog = (fsc*(-COG)**2+fsr1*(1-COG)**2)
839 fbad_cog = fbad_cog / ((-COG)**2+(1-COG)**2)
840 endif
841 elseif(ncog.eq.3)then
842 COG = (sr1-sl1)/(sl1+sc+sr1)
843 fbad_cog =
844 $ (fsl1*(-1-COG)**2+fsc*(-COG)**2+fsr1*(1-COG)**2)
845 fbad_cog =
846 $ fbad_cog / ((-1-COG)**2+(-COG)**2+(1-COG)**2)
847 elseif(ncog.eq.4)then
848 if(sl2.gt.sr2)then
849 COG = (sr1-sl1-2*sl2)/(sl2+sl1+sc+sr1)
850 fbad_cog =
851 $ (fsl2*(-2-COG)**2+fsl1*(-1-COG)**2
852 $ +fsc*(-COG)**2+fsr1*(1-COG)**2)
853 fbad_cog =
854 $ fbad_cog / ((-2-COG)**2+(-1-COG)**2
855 $ +(-COG)**2+(1-COG)**2)
856 elseif(sl2.le.sr2)then
857 COG = (2*sr2+sr1-sl1)/(sl2+sl1+sc+sr1)
858 fbad_cog =
859 $ (fsl1*(-1-COG)**2
860 $ +fsc*(-COG)**2+fsr1*(1-COG)**2+fsr2*(2-COG)**2)
861 fbad_cog =
862 $ fbad_cog / ((-1-COG)**2
863 $ +(-COG)**2+(1-COG)**2+(2-COG)**2)
864 endif
865 else
866 print*,'function FBAD_COG(NCOG,IC) ==> WARNING!! NCOG=',NCOG
867 print*,' (NCOG must be <= 4)'
868 COG = 0.
869 endif
870
871 elseif(ncog.eq.0)then
872
873
874 iv=VIEW(ic)
875 istart=INDSTART(IC)
876 istop=TOTCLLENGTH
877 if(ic.lt.NCLSTR1)istop=INDSTART(IC+1)-1
878 COG=0.
879 SNU=0.
880 SDE=0.
881 do i=istart,istop
882 ipos=i-INDMAX(ic)
883 il=nvk(MAXS(ic)+ipos)
884 is=nst(MAXS(ic)+ipos)
885 cut=incut*SIGMA(iv,il,is)
886 if(CLSIGNAL(i).gt.cut)then
887 COG = COG + ipos*CLSIGNAL(i)
888 endif
889 enddo
890 COG=COG/SGNL(ic)
891 do i=istart,istop
892 ipos=i-INDMAX(ic)
893 il=nvk(MAXS(ic)+ipos)
894 is=nst(MAXS(ic)+ipos)
895 cut=incut*SIGMA(iv,il,is)
896 if(CLSIGNAL(i).gt.cut)then
897 fs=1
898 if(BAD(iv,il,is).eq.0)fs=f
899 SNU = SNU + fs*(ipos-COG)**2
900 SDE = SDE + (ipos-COG)**2
901 endif
902 enddo
903 if(SDE.ne.0)FBAD_COG=SNU/SDE
904
905 else
906
907 FBAD_COG=0
908 print*,'function FBAD_COG(NCOG,IC) ==> WARNING!! NCOG=',NCOG
909 print*,' (NCOG must be >= 0)'
910
911
912 endif
913
914
915 fbad_cog = sqrt(fbad_cog)
916
917 return
918 end
919
920
921 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
922 real function fbad_cog0(ncog,ic)
923 *-------------------------------------------------------
924 * this function returns a factor that takes into
925 * account deterioration of the spatial resolution
926 * in the case BAD strips are included in the cluster.
927 * This factor should multiply the nominal spatial
928 * resolution.
929 *
930 * NB!!!
931 * (this is the old version. It consider only the two
932 * strips with the greatest signal. The new one is
933 * fbad_cog(ncog,ic) )
934 *
935 *-------------------------------------------------------
936
937 include 'commontracker.f'
938 include 'level1.f'
939 include 'calib.f'
940
941 * --> signal of the central strip
942 sc = CLSIGNAL(INDMAX(ic)) !center
943
944 * signal of adjacent strips
945 * --> left
946 sl1 = 0 !left 1
947 if(
948 $ (INDMAX(ic)-1).ge.INDSTART(ic)
949 $ )
950 $ sl1 = max(0.,CLSIGNAL(INDMAX(ic)-1))
951
952 sl2 = 0 !left 2
953 if(
954 $ (INDMAX(ic)-2).ge.INDSTART(ic)
955 $ )
956 $ sl2 = max(0.,CLSIGNAL(INDMAX(ic)-2))
957
958 * --> right
959 sr1 = 0 !right 1
960 if(
961 $ (ic.ne.NCLSTR1.and.(INDMAX(ic)+1).lt.INDSTART(ic+1))
962 $ .or.
963 $ (ic.eq.NCLSTR1.and.(INDMAX(ic)+1).le.TOTCLLENGTH)
964 $ )
965 $ sr1 = max(0.,CLSIGNAL(INDMAX(ic)+1))
966
967 sr2 = 0 !right 2
968 if(
969 $ (ic.ne.NCLSTR1.and.(INDMAX(ic)+2).lt.INDSTART(ic+1))
970 $ .or.
971 $ (ic.eq.NCLSTR1.and.(INDMAX(ic)+2).le.TOTCLLENGTH)
972 $ )
973 $ sr2 = max(0.,CLSIGNAL(INDMAX(ic)+2))
974
975
976 if(mod(int(VIEW(ic)),2).eq.1)then !Y-view
977 f = 4.
978 si = 8.4
979 else !X-view
980 f = 6.
981 si = 3.9
982 endif
983
984 fbad_cog = 1.
985 f0 = 1
986 f1 = 1
987 f2 = 1
988 f3 = 1
989 if(sl1.gt.sr1.and.sl1.gt.0.)then
990
991 if(BAD(VIEW(ic),nvk(MAXS(ic)),nst(MAXS(ic)) ).eq.0)f0=f
992 if(BAD(VIEW(ic),nvk(MAXS(ic)),nst(MAXS(ic)-1)).eq.0)f1=f
993 c if(BAD(VIEW(ic),nvk(MAXS(ic)),nst(MAXS(ic)+1)).eq.0)f3=f
994
995 if(ncog.eq.2.and.sl1.ne.0)then
996 fbad_cog = (f1**2*sc**2/sl1**2+f0**2)/(sc**2/sl1**2+1.)
997 elseif(ncog.eq.3.and.sl1.ne.0.and.sr1.ne.0)then
998 fbad_cog = 1.
999 elseif(ncog.eq.4.and.sl1.ne.0.and.sr1.ne.0.and.sl2.ne.0)then
1000 fbad_cog = 1.
1001 else
1002 fbad_cog = 1.
1003 endif
1004
1005 elseif(sl1.le.sr1.and.sr1.gt.0.)then
1006
1007
1008 if(BAD(VIEW(ic),nvk(MAXS(ic)),nst(MAXS(ic)) ).eq.0)f0=f
1009 if(BAD(VIEW(ic),nvk(MAXS(ic)),nst(MAXS(ic)+1)).eq.0)f1=f
1010 c if(BAD(VIEW(ic),nvk(MAXS(ic)),nst(MAXS(ic)-1)).eq.0)f3=f
1011
1012 if(ncog.eq.2.and.sr1.ne.0)then
1013 fbad_cog = (f1**2*sc**2/sr1**2+f0**2)/(sc**2/sr1**2+1.)
1014 elseif(ncog.eq.3.and.sr1.ne.0.and.sl1.ne.0)then
1015 fbad_cog = 1.
1016 elseif(ncog.eq.4.and.sr1.ne.0.and.sl1.ne.0.and.sr2.ne.0)then
1017 fbad_cog = 1.
1018 else
1019 fbad_cog = 1.
1020 endif
1021
1022 endif
1023
1024 fbad_cog0 = sqrt(fbad_cog)
1025
1026 return
1027 end
1028
1029
1030
1031
1032 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
1033
1034 FUNCTION risx_eta2(x)
1035
1036 DOUBLE PRECISION V( 1)
1037 INTEGER NPAR, NDIM, IMQFUN, I, J
1038 DOUBLE PRECISION HQDJ, VV, VCONST
1039 DOUBLE PRECISION SIGVMI( 1), SIGVT( 1)
1040 DOUBLE PRECISION SIGV( 18, 1)
1041 DOUBLE PRECISION SIGDEL( 18)
1042 DOUBLE PRECISION SIGA( 18)
1043 DATA NPAR, NDIM, IMQFUN / 18, 1, 1/
1044 DATA VCONST / 0.000000000000 /
1045 DATA SIGVMI / -20.50000000000 /
1046 DATA SIGVT / 41.00000000000 /
1047 DATA SIGV / 0.6097560748458E-01
1048 +, 0.1097560971975
1049 +, 0.1341463327408
1050 +, 0.1829268187284
1051 +, 0.2317073047161
1052 +, 0.4268292486668
1053 +, 0.4756097495556
1054 +, 0.4999999701977
1055 +, 0.5243902206421
1056 +, 0.5731707215309
1057 +, 0.7682926654816
1058 +, 0.8170731663704
1059 +, 0.8658536076546
1060 +, 0.8902438879013
1061 +, 0.9390243291855
1062 +, 0.000000000000
1063 +, 1.000000000000
1064 +, 0.3658536374569
1065 +/
1066 DATA SIGDEL / 0.4878048598766E-01
1067 +, 0.4878048598766E-01
1068 +, 0.4878048598766E-01
1069 +, 0.4878048598766E-01
1070 +, 0.4878048598766E-01
1071 +, 0.4878048598766E-01
1072 +, 0.4878048598766E-01
1073 +, 0.4878048598766E-01
1074 +, 0.4878048598766E-01
1075 +, 0.4878048598766E-01
1076 +, 0.4878048598766E-01
1077 +, 0.4878048598766E-01
1078 +, 0.4878048598766E-01
1079 +, 0.4878048598766E-01
1080 +, 0.4878048598766E-01
1081 +, 0.1999999994950E-05
1082 +, 0.1999999994950E-05
1083 +, 0.9756097197533E-01
1084 +/
1085 DATA SIGA / 51.65899502118
1086 +, -150.4733247841
1087 +, 143.0468613786
1088 +, -16.56096738997
1089 +, 5.149319798083
1090 +, 21.57149712673
1091 +, -39.46652322782
1092 +, 47.13181632948
1093 +, -32.93197883680
1094 +, 16.38645317092
1095 +, 1.453688482992
1096 +, -10.00547244421
1097 +, 131.3517670587
1098 +, -140.6351538257
1099 +, 49.05515749582
1100 +, -23.00028974788
1101 +, -22.58470403729
1102 +, -3.824682486418
1103 +/
1104
1105 V(1)= abs(x)
1106
1107 HQUADF = 0.
1108 DO 20 J = 1, NPAR
1109 HQDJ = 0.
1110 DO 10 I = 1, NDIM
1111 VV = (V (I) - SIGVMI (I)) / SIGVT (I)
1112 HQDJ = HQDJ + (VV - SIGV (J, I)) ** 2
1113 10 CONTINUE
1114 HQDJ = HQDJ + SIGDEL (J) ** 2
1115 HQDJ = SQRT (HQDJ)
1116 HQUADF = HQUADF + SIGA (J) * HQDJ
1117 20 CONTINUE
1118 IF (IMQFUN .EQ. 2) HQUADF = VCONST * EXP (HQUADF)
1119
1120 risx_eta2=HQUADF* 1e-4
1121
1122 END
1123
1124 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
1125 FUNCTION risx_eta3(x)
1126 DOUBLE PRECISION V( 1)
1127 INTEGER NPAR, NDIM, IMQFUN, I, J
1128 DOUBLE PRECISION HQDJ, VV, VCONST
1129 DOUBLE PRECISION SIGVMI( 1), SIGVT( 1)
1130 DOUBLE PRECISION SIGV( 18, 1)
1131 DOUBLE PRECISION SIGDEL( 18)
1132 DOUBLE PRECISION SIGA( 18)
1133 DATA NPAR, NDIM, IMQFUN / 18, 1, 1/
1134 DATA VCONST / 0.000000000000 /
1135 DATA SIGVMI / -20.50000000000 /
1136 DATA SIGVT / 41.00000000000 /
1137 DATA SIGV / 0.6097560748458E-01
1138 +, 0.1097560971975
1139 +, 0.1341463327408
1140 +, 0.1829268187284
1141 +, 0.2317073047161
1142 +, 0.4756097495556
1143 +, 0.4999999701977
1144 +, 0.5243902206421
1145 +, 0.7682926654816
1146 +, 0.8170731663704
1147 +, 0.8658536076546
1148 +, 0.8902438879013
1149 +, 0.9390243291855
1150 +, 0.000000000000
1151 +, 1.000000000000
1152 +, 0.3658536374569
1153 +, 0.4146341383457
1154 +, 0.6097560524940
1155 +/
1156 DATA SIGDEL / 0.4878048598766E-01
1157 +, 0.4878048598766E-01
1158 +, 0.4878048598766E-01
1159 +, 0.4878048598766E-01
1160 +, 0.4878048598766E-01
1161 +, 0.4878048598766E-01
1162 +, 0.4878048598766E-01
1163 +, 0.4878048598766E-01
1164 +, 0.4878048598766E-01
1165 +, 0.4878048598766E-01
1166 +, 0.4878048598766E-01
1167 +, 0.4878048598766E-01
1168 +, 0.4878048598766E-01
1169 +, 0.1999999994950E-05
1170 +, 0.1999999994950E-05
1171 +, 0.9756097197533E-01
1172 +, 0.9756097197533E-01
1173 +, 0.9756097197533E-01
1174 +/
1175 DATA SIGA / 55.18284054458
1176 +, -160.3358431242
1177 +, 144.6939185763
1178 +, -20.45200854118
1179 +, 5.223570087108
1180 +,-0.4171476953945
1181 +, -27.67911907462
1182 +, 17.70327157495
1183 +, -1.867165491707
1184 +, -8.884458169181
1185 +, 124.3526608791
1186 +, -143.3309398345
1187 +, 50.80345027122
1188 +, -16.44454904415
1189 +, -15.73785568450
1190 +, -22.71810502561
1191 +, 36.86170101430
1192 +, 2.437918198452
1193 +/
1194
1195 V(1) = abs(x)
1196 HQUADF = 0.
1197 DO 20 J = 1, NPAR
1198 HQDJ = 0.
1199 DO 10 I = 1, NDIM
1200 VV = (V (I) - SIGVMI (I)) / SIGVT (I)
1201 HQDJ = HQDJ + (VV - SIGV (J, I)) ** 2
1202 10 CONTINUE
1203 HQDJ = HQDJ + SIGDEL (J) ** 2
1204 HQDJ = SQRT (HQDJ)
1205 HQUADF = HQUADF + SIGA (J) * HQDJ
1206 20 CONTINUE
1207 IF (IMQFUN .EQ. 2) HQUADF = VCONST * EXP (HQUADF)
1208
1209 risx_eta3 = HQUADF* 1e-4
1210
1211 END
1212 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
1213 FUNCTION risx_eta4(x)
1214 DOUBLE PRECISION V( 1)
1215 INTEGER NPAR, NDIM, IMQFUN, I, J
1216 DOUBLE PRECISION HQDJ, VV, VCONST
1217 DOUBLE PRECISION SIGVMI( 1), SIGVT( 1)
1218 DOUBLE PRECISION SIGV( 18, 1)
1219 DOUBLE PRECISION SIGDEL( 18)
1220 DOUBLE PRECISION SIGA( 18)
1221 DATA NPAR, NDIM, IMQFUN / 18, 1, 1/
1222 DATA VCONST / 0.000000000000 /
1223 DATA SIGVMI / -20.50000000000 /
1224 DATA SIGVT / 41.00000000000 /
1225 DATA SIGV / 0.3658536449075E-01
1226 +, 0.6097560748458E-01
1227 +, 0.1097560971975
1228 +, 0.1341463327408
1229 +, 0.4756097495556
1230 +, 0.5243902206421
1231 +, 0.8658536076546
1232 +, 0.8902438879013
1233 +, 0.9390243291855
1234 +, 0.9634146094322
1235 +, 0.000000000000
1236 +, 1.000000000000
1237 +, 0.3658536374569
1238 +, 0.4146341383457
1239 +, 0.6097560524940
1240 +, 0.6585365533829
1241 +, 0.7560975551605
1242 +, 0.2439024299383
1243 +/
1244 DATA SIGDEL / 0.4878048598766E-01
1245 +, 0.4878048598766E-01
1246 +, 0.4878048598766E-01
1247 +, 0.4878048598766E-01
1248 +, 0.4878048598766E-01
1249 +, 0.4878048598766E-01
1250 +, 0.4878048598766E-01
1251 +, 0.4878048598766E-01
1252 +, 0.4878048598766E-01
1253 +, 0.4878048598766E-01
1254 +, 0.1999999994950E-05
1255 +, 0.1999999994950E-05
1256 +, 0.9756097197533E-01
1257 +, 0.9756097197533E-01
1258 +, 0.9756097197533E-01
1259 +, 0.9756097197533E-01
1260 +, 0.9756097197533E-01
1261 +, 0.1951219439507
1262 +/
1263 DATA SIGA / -43.61551887895
1264 +, 57.88466995373
1265 +, -92.04113299504
1266 +, 74.08166649890
1267 +, -9.768686062558
1268 +, -4.304496875334
1269 +, 72.62237333937
1270 +, -91.21920840618
1271 +, 56.75519978630
1272 +, -43.21115751243
1273 +, 12.79984505413
1274 +, 12.10074868595
1275 +, -6.238587250860
1276 +, 23.43447356326
1277 +, 17.98221401495
1278 +, -7.980332610975
1279 +, -3.426733307051
1280 +, -8.683439558751
1281 +/
1282
1283 V(1)=abs(x)
1284
1285 HQUADF = 0.
1286 DO 20 J = 1, NPAR
1287 HQDJ = 0.
1288 DO 10 I = 1, NDIM
1289 VV = (V (I) - SIGVMI (I)) / SIGVT (I)
1290 HQDJ = HQDJ + (VV - SIGV (J, I)) ** 2
1291 10 CONTINUE
1292 HQDJ = HQDJ + SIGDEL (J) ** 2
1293 HQDJ = SQRT (HQDJ)
1294 HQUADF = HQUADF + SIGA (J) * HQDJ
1295 20 CONTINUE
1296 IF (IMQFUN .EQ. 2) HQUADF = VCONST * EXP (HQUADF)
1297
1298 risx_eta4=HQUADF* 1e-4
1299
1300 END
1301 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
1302 FUNCTION risy_eta2(x)
1303 DOUBLE PRECISION V( 1)
1304 INTEGER NPAR, NDIM, IMQFUN, I, J
1305 DOUBLE PRECISION HQDJ, VV, VCONST
1306 DOUBLE PRECISION SIGVMI( 1), SIGVT( 1)
1307 DOUBLE PRECISION SIGV( 12, 1)
1308 DOUBLE PRECISION SIGDEL( 12)
1309 DOUBLE PRECISION SIGA( 12)
1310 DATA NPAR, NDIM, IMQFUN / 12, 1, 1/
1311 DATA VCONST / 0.000000000000 /
1312 DATA SIGVMI / -20.50000000000 /
1313 DATA SIGVT / 41.00000000000 /
1314 DATA SIGV / 0.1585365831852
1315 +, 0.4024389982224
1316 +, 0.4756097495556
1317 +, 0.5243902206421
1318 +, 0.5975609421730
1319 +, 0.8414633870125
1320 +, 0.000000000000
1321 +, 1.000000000000
1322 +, 0.2682926654816
1323 +, 0.3170731663704
1324 +, 0.7073170542717
1325 +, 0.7560975551605
1326 +/
1327 DATA SIGDEL / 0.4878048598766E-01
1328 +, 0.4878048598766E-01
1329 +, 0.4878048598766E-01
1330 +, 0.4878048598766E-01
1331 +, 0.4878048598766E-01
1332 +, 0.4878048598766E-01
1333 +, 0.1999999994950E-05
1334 +, 0.1999999994950E-05
1335 +, 0.9756097197533E-01
1336 +, 0.9756097197533E-01
1337 +, 0.9756097197533E-01
1338 +, 0.9756097197533E-01
1339 +/
1340 DATA SIGA / 14.57433603529
1341 +, -15.93532436156
1342 +, -13.24628335221
1343 +, -14.31193855410
1344 +, -12.67339684488
1345 +, 18.19876051780
1346 +, -5.270493486725
1347 +, -5.107670990828
1348 +, -9.553262933901
1349 +, 43.34150727448
1350 +, 55.91366786432
1351 +, -29.38037318563
1352 +/
1353
1354 v(1)= abs(x)
1355
1356 HQUADF = 0.
1357 DO 20 J = 1, NPAR
1358 HQDJ = 0.
1359 DO 10 I = 1, NDIM
1360 VV = (V (I) - SIGVMI (I)) / SIGVT (I)
1361 HQDJ = HQDJ + (VV - SIGV (J, I)) ** 2
1362 10 CONTINUE
1363 HQDJ = HQDJ + SIGDEL (J) ** 2
1364 HQDJ = SQRT (HQDJ)
1365 HQUADF = HQUADF + SIGA (J) * HQDJ
1366 20 CONTINUE
1367 IF (IMQFUN .EQ. 2) HQUADF = VCONST * EXP (HQUADF)
1368
1369 risy_eta2=HQUADF* 1e-4
1370
1371 END
1372 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
1373
1374 FUNCTION risy_cog(x)
1375 DOUBLE PRECISION V( 1)
1376 INTEGER NPAR, NDIM, IMQFUN, I, J
1377 DOUBLE PRECISION HQDJ, VV, VCONST
1378 DOUBLE PRECISION SIGVMI( 1), SIGVT( 1)
1379 DOUBLE PRECISION SIGV( 10, 1)
1380 DOUBLE PRECISION SIGDEL( 10)
1381 DOUBLE PRECISION SIGA( 10)
1382 DATA NPAR, NDIM, IMQFUN / 10, 1, 1/
1383 DATA VCONST / 0.000000000000 /
1384 DATA SIGVMI / -20.50000000000 /
1385 DATA SIGVT / 41.00000000000 /
1386 DATA SIGV / 0.1585365831852
1387 +, 0.8414633870125
1388 +, 0.000000000000
1389 +, 1.000000000000
1390 +, 0.4634146094322
1391 +, 0.5121951103210
1392 +, 0.5609756112099
1393 +, 0.6585365533829
1394 +, 0.7073170542717
1395 +, 0.3414633870125
1396 +/
1397 DATA SIGDEL / 0.4878048598766E-01
1398 +, 0.4878048598766E-01
1399 +, 0.1999999994950E-05
1400 +, 0.1999999994950E-05
1401 +, 0.9756097197533E-01
1402 +, 0.9756097197533E-01
1403 +, 0.9756097197533E-01
1404 +, 0.9756097197533E-01
1405 +, 0.9756097197533E-01
1406 +, 0.1951219439507
1407 +/
1408 DATA SIGA / 23.73833445988
1409 +, 24.10182100013
1410 +, 1.865894323190
1411 +, 1.706006262931
1412 +, -1.075607857202
1413 +, -22.11489493403
1414 +, 1.663100707801
1415 +, 4.089852595440
1416 +, -4.314993873697
1417 +, -2.174479487744
1418 +/
1419
1420 V(1)=abs(x)
1421
1422 HQUADF = 0.
1423 DO 20 J = 1, NPAR
1424 HQDJ = 0.
1425 DO 10 I = 1, NDIM
1426 VV = (V (I) - SIGVMI (I)) / SIGVT (I)
1427 HQDJ = HQDJ + (VV - SIGV (J, I)) ** 2
1428 10 CONTINUE
1429 HQDJ = HQDJ + SIGDEL (J) ** 2
1430 HQDJ = SQRT (HQDJ)
1431 HQUADF = HQUADF + SIGA (J) * HQDJ
1432 20 CONTINUE
1433 IF (IMQFUN .EQ. 2) HQUADF = VCONST * EXP (HQUADF)
1434
1435 risy_cog=HQUADF* 1e-4
1436
1437 END
1438 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***
1439 FUNCTION risx_cog(x)
1440 DOUBLE PRECISION V( 1)
1441 INTEGER NPAR, NDIM, IMQFUN, I, J
1442 DOUBLE PRECISION HQDJ, VV, VCONST
1443 DOUBLE PRECISION SIGVMI( 1), SIGVT( 1)
1444 DOUBLE PRECISION SIGV( 15, 1)
1445 DOUBLE PRECISION SIGDEL( 15)
1446 DOUBLE PRECISION SIGA( 15)
1447 DATA NPAR, NDIM, IMQFUN / 15, 1, 1/
1448 DATA VCONST / 0.000000000000 /
1449 DATA SIGVMI / -20.50000000000 /
1450 DATA SIGVT / 41.00000000000 /
1451 DATA SIGV / 0.6097560748458E-01
1452 +, 0.8536584675312E-01
1453 +, 0.1341463327408
1454 +, 0.2317073047161
1455 +, 0.2804878056049
1456 +, 0.3780487775803
1457 +, 0.6219512224197
1458 +, 0.7195121645927
1459 +, 0.7682926654816
1460 +, 0.8658536076546
1461 +, 0.9146341085434
1462 +, 0.9390243291855
1463 +, 0.000000000000
1464 +, 1.000000000000
1465 +, 0.5121951103210
1466 +/
1467 DATA SIGDEL / 0.4878048598766E-01
1468 +, 0.4878048598766E-01
1469 +, 0.4878048598766E-01
1470 +, 0.4878048598766E-01
1471 +, 0.4878048598766E-01
1472 +, 0.4878048598766E-01
1473 +, 0.4878048598766E-01
1474 +, 0.4878048598766E-01
1475 +, 0.4878048598766E-01
1476 +, 0.4878048598766E-01
1477 +, 0.4878048598766E-01
1478 +, 0.4878048598766E-01
1479 +, 0.1999999994950E-05
1480 +, 0.1999999994950E-05
1481 +, 0.9756097197533E-01
1482 +/
1483 DATA SIGA / 31.95672945139
1484 +, -34.23286209245
1485 +, -6.298459168211
1486 +, 10.98847700545
1487 +,-0.3052213535054
1488 +, 13.10517991464
1489 +, 15.60290821679
1490 +, -1.956118448507
1491 +, 12.41453816720
1492 +, -7.354056408553
1493 +, -32.32512668778
1494 +, 30.61116178966
1495 +, 1.418505329236
1496 +, 1.583492573619
1497 +, -18.48799977042
1498 +/
1499
1500 V(1)=abs(x)
1501
1502 HQUADF = 0.
1503 DO 20 J = 1, NPAR
1504 HQDJ = 0.
1505 DO 10 I = 1, NDIM
1506 VV = (V (I) - SIGVMI (I)) / SIGVT (I)
1507 HQDJ = HQDJ + (VV - SIGV (J, I)) ** 2
1508 10 CONTINUE
1509 HQDJ = HQDJ + SIGDEL (J) ** 2
1510 HQDJ = SQRT (HQDJ)
1511 HQUADF = HQUADF + SIGA (J) * HQDJ
1512 20 CONTINUE
1513 IF (IMQFUN .EQ. 2) HQUADF = VCONST * EXP (HQUADF)
1514
1515 risx_cog = HQUADF * 1e-4
1516
1517 END
1518 *** * * * *** * * * *** * * * *** * * * *** * * * *** * * * ***

  ViewVC Help
Powered by ViewVC 1.1.23