1 SUBROUTINE CPVREC(DzCPV,DyCPV,DxCPV,Nhit,Xin,Pin,Nout,Xout)
2 C-----------------------------------------------------------------------
3 C Reconstruction routing for the CPV detector
5 C Author: Serguei Sadovski, IHEP, Protvino
6 C Created: 25 December 1998
7 C Last modified: 17 September 1999
8 C-----------------------------------------------------------------------
10 C CPV Frame: Z coordinate - along beam direction
11 C ========== Y coordinate - transverse beam direction in the CPV plane
12 C X coordinate - transverse CPV plane, positive direction - along
13 C particles going from the interaction point
14 C (0,0) in the center of the CPV plane
18 C DzCPV - half width (cm) of CPV plane along beam
19 C DyCPV - half width (cm) of CPV plane transverse beam
20 C DxCPV - half width (cm) of CPV
21 C Nhit - number of particles in the front of CPV
23 C Xin(1,i) - Z coordinate (cm) of i-hit in CPV frame (0,0 in the CPV Center)
24 C Xin(2,i) - Y coordinate (cm) of i-hit in CPV frame (0,0 in the CPV Center)
27 C Pin(2,i) - Py for particle i
31 C Output Parameters - reconstructed coordinates of particles in the CPV:
33 C Nout - number of the reconstructed hits (<5000) in CPV plane,
34 C if (Nout.le.0) - error output: reconstruction fails ...
36 C Xout(1,j) - Z coordinate (cm) of j-hit in CPV frame (0,0 in the CPV Center)
37 C Xout(2,j) - Y coordinate (cm) of j-hit in CPV frame (0,0 in the CPV Center)
38 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
39 DIMENSION Xin(2,Nhit),Pin(4,Nhit),Xout(2,5000) ! Inp/Out
41 COMMON/GAMMA/ NGAM,EGAM(5000),XGAM(5000),YGAM(5000),CHGAM(5000)! From Rec
42 COMMON/CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelY
44 REAL *4 EGM,ZGM,YGM, ZYEgm(3,5)
46 INTEGER*2 ICPV(104,176) ! CPV 104x176
47 DATA NcelZ,NcelY,CelZ,CelY/104,176, 2.26, 1.13 / ! in cm
48 DATA NgamZ,NgamY,Chit,Cnoise/5,9 , 1000., 30. /
49 DATA CelWr,RhoWr,IDELT,IDELA/ 0.5 , .01, 90, 90 / ! 09.01.99
50 DATA Detr / 0.1 / ! Relative energy fluctuation in Track for 100 e-
55 C!- - - - C O N S T A N T S - - -
62 CALL VZERO(ICPV,NcelZ*NcelY/2)
66 Pp = SQRT( Pin(1,Ihit)**2 + Pin(2,Ihit)**2 + Pin(3,Ihit)**2 )
68 If (Abs(Pin(3,Ihit))/Pp.lt.0.0000001) go to 1000 ! Tracks paralell CPV
70 CorX= 2.*DxCPV/Pin(3,Ihit)
71 Dzx = Pin(1,Ihit)*CorX ! Incline tracks
72 Dyx = Pin(2,Ihit)*CorX
73 C ! Charge of inline tracks
75 Pin(4,Ihit) = Pin(4,Ihit)*(1.+Detr*R1)*
76 + SQRT(Dzx**2 + Dyx**2 + 4.*DxCPV**2)/(2.*DxCPV)
78 c call hfill(113,Dzx, 0., 1.)
79 c call hfill(114,Dyx, 0., 1.)
81 Zhit1 = Xin(1,Ihit)+DzCPV
82 Yhit1 = Xin(2,Ihit)+DyCPV ! Initial Y coordinate
84 Zhit2 = Zhit1+Dzx ! final Y coordinate
87 Iwht1 = Yhit1/CelWr ! Wire (Y) coordinate "in"
88 Iwht2 = Yhit2/CelWr ! Wire (Y) coordinate "out"
90 If(Iwht1.eq.Iwht2) then ! Incline 1 wire hit
92 ZYEgm(1,1) =(Zhit1+Zhit2-Dzx*.57735)/2.
93 ZYEgm(2,1) =(Iwht1+0.5)*CelWr !
94 ZYEgm(3,1) = Pin(4,Ihit)/2.
96 ZYEgm(1,2) =(Zhit1+Zhit2+Dzx*.57735)/2.
97 ZYEgm(2,2) =(Iwht1+0.5)*CelWr !
98 ZYEgm(3,2) = Pin(4,Ihit)/2.
102 C --------------------------
103 IF(Iwht1-1.ne.Iwht2 .and.
104 + Iwht1+1.ne.Iwht2) THEN
106 Iwht3 =(Iwht1+Iwht2)/2
108 Ywht1 =(Iwht1+0.5)*CelWr ! Wire 1
109 Ywht2 =(Iwht2+0.5)*CelWr ! Wire 2
110 Ywht3 =(Iwht3+0.5)*CelWr ! Wire 3
111 Ywr13 =(Ywht1+Ywht3)/2. ! Center 13
112 Ywr23 =(Ywht2+Ywht3)/2. ! Center 23
116 Egm1 = ABS(DyW1)/(ABS(DyW1)+ABS(DyW2) + CelWr)
117 Egm2 = ABS(DyW2)/(ABS(DyW1)+ABS(DyW2) + CelWr)
118 Egm3 = CelWr /(ABS(DyW1)+ABS(DyW2) + CelWr)
120 ZYEgm(1,1) =(Dzx*(Ywr13-Ywht1)/Dyx + Zhit1 + Zhit1)/2.
122 ZYEgm(3,1) = EGM*Egm1
124 ZYEgm(1,2) =(Dzx*(Ywr23-Ywht1)/Dyx + Zhit1 + Zhit2)/2.
126 ZYEgm(3,2) = EGM*Egm2
128 ZYEgm(1,3) = Dzx*(Ywht3-Ywht1)/Dyx + Zhit1
130 ZYEgm(3,3) = EGM*Egm3
136 Ywht1 =(Iwht1+0.5)*CelWr ! Wire 1
137 Ywht2 =(Iwht2+0.5)*CelWr ! Wire 2
138 Ywr12 =(Ywht1+Ywht2)/2.
142 Egm1 = ABS(DyW1)/(ABS(DyW1)+ABS(DyW2))
143 Egm2 = ABS(DyW2)/(ABS(DyW1)+ABS(DyW2))
146 ZYEgm(1,1) =(Zhit1+Zhit2-Dzx*Egm1)/2.
148 ZYEgm(3,1) = EGM*Egm1
150 ZYEgm(1,2) =(Zhit1+Zhit2+Dzx*Egm2)/2.
152 ZYEgm(3,2) = EGM*Egm2
154 c CALL HFILL(110, Egm1,0.,1.)
155 c CALL HFILL(110, Egm2,0.,1.)
157 C ! Finite size of ionisation region
158 10 DO 113 Iter=1,Niter
159 Zhit = ZYEgm(1,Iter) !
160 Yhit = ZYEgm(2,Iter) ! Wire coordinate
163 IF ( Zhit.LE.0. .OR. Yhit.LE.0. ) GO TO 1000
169 IF ( Izg.GE.NcelZ.OR.Iyg.GE.NcelY ) GO TO 1000
179 IF (KZG.LE.0.OR.KZG.GT.NcelZ) GO TO 112
185 IF (KYG.LE.0.OR.KYG.GT.NcelY) GO TO 111
190 AGM = Chit*AEG + R1*Cnoise
191 IF ( AGM.LE.0.) GO TO 111
193 ICPV(KZG,KYG) = ICPV(KZG,KYG) + AGM
196 C- type *, ' KZG,KYG,AGM=',KZG,KYG,AGM
198 IF (KZG.LE.NZMN) NZMN = KZG
199 IF (KZG.GE.NZMX) NZMX = KZG
200 IF (KYG.LE.NYMN) NYMN = KYG
201 IF (KYG.GE.NYMX) NYMX = KYG
208 c CALL HF1( 2,ECPV,1.)
209 c CALL HF1(31,ECPV,1.)
211 CALL COMPRS(NZMN,NcelZ,NYMN,NcelY,ICPV,NWGAMS)
217 Xout(1,Ig) = XGAM(Ig) + 0.5*CelZ - DzCPV ! T
218 Xout(2,Ig) = YGAM(Ig) + 0.5*CelY - DyCPV ! P
224 C=======================================================================
225 SUBROUTINE COMPRS(NXMN,NXMX,NYMN,NYMX,IA,NWGAMS)
226 COMMON/EVENT/ IBH(5),IPHD,IPSC,IPGS,IPGM,IPTG,I11,I12,IBUF(30035)
227 COMMON/CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelY
228 INTEGER*2 IPH,IA(NXMX,NYMX)
229 DATA IPGM,Mdim,IBUF(3) / 35, 30035, 0 /
236 IF (IPH.LT.IDELT) GO TO 10
237 c CALL HFILL(9,FLOAT(IPH),0.,1.)
240 IF(IPGMS.ge.Mdim) GO TO 10
253 C=======================================================================
254 SUBROUTINE RECONS(NWGAMS)
255 COMMON/EVENT/ IHDR(12),IBUF(30035)
256 EQUIVALENCE(IHDR(3),NREC),(IHDR(5),NMT),(IHDR(6),IPHOD),(IHDR(7),
257 ,IPSC),(IHDR(8),IPGS),(IHDR(9),IPGM),(IHDR(10),IPTG),(IBUF(3),NEV)
258 COMMON/GAMMA/ NGAM,EGAM(5000),XGAM(5000),YGAM(5000),CHGAM(5000)
259 COMMON/CLUSTER/ NCL,LENCL(5000)
260 COMMON/WORK/ IWRK(40000)
261 DATA NWMIN,NWMAX/2,30000/,MINPK,MINECL/10,15/,ECUT/25./
265 c CALL HFILL(1, FLOAT(NWGAMS), 0.,1.) !..my..!
266 c CALL HFILL(101,FLOAT(NWGAMS/2),0.,1.)
268 IF(NWGAMS.LT.NWMIN.OR.NWGAMS.GT.NWMAX) RETURN
271 IPEND=IPGAMS+NWGAMS-2
272 DO 1 I=IPGAMS,IPEND,2
274 c CALL HFILL( 7,ETOT,0.,1.)
275 c CALL HFILL(32,ETOT,0.,1.)
276 IF(ETOT.LT.ECUT) RETURN
278 CALL CLUST(NWGAMS,IBUF(IPGAMS))
279 c CALL HFILL(3,FLOAT(NCL),0.,1.) !..my..!
288 c CALL HFILL(4,FLOAT(LENCL(ICL)),0.,1.) !..my..!
291 5 IECL=IECL+IBUF(IPCL+2*I-2)
292 IF (IECL.GE.MINECL) ETOTCL=ETOTCL+IECL
294 c IF (iecl.GE.900) THEN
295 c CALL hf1 (104,float(lencl(icl)),1.)
298 IPCL=IPCL+LENCL(ICL)*2
300 c CALL HFILL( 5,ETOTCL,0.,1.) !..my..!
301 c CALL HFILL(33,ETOTCL,0.,1.) !..my..!
302 IF(ETOTCL.LT.ECUT) RETURN
308 25 IECL=IECL+IBUF(IPCL+2*I-2)
309 IF(IECL.LT.MINECL) GO TO 30
310 CALL GAMS(IBUF(IPCL),LENCL(ICL),IWRK(1),MINPK)
311 29 IF(NGAM.GE.4999) GO TO 50
312 30 IPCL=IPCL+LENCL(ICL)*2
316 c CALL HFILL(6,FLOAT(NGAM),0.,1.) !..my..!
319 C=======================================================================
320 SUBROUTINE KILLG(SCALMS)
321 COMMON /GAMMA / NGAM,EGAM(5000),XGAM(5000),YGAM(5000),CHGAM(5000)
322 COMMON /CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelYC
323 cc DATA SQDCUT / 3.50/, EFMCUT / 5./, THR0 /500./ ! N_c = 1500
324 DATA SQDCUT / 4.50/, EFMCUT / 5./, THR0 /600./ ! N-c = 800
329 IF(EGAM(IG).LT.THR0) GO TO 1
336 c CALL HF1(35,EGAM(NGM),1.)
339 c CALL HF1(37,FLOAT(NGM),1.)
342 2 IF(NGAM.LT.2) RETURN
347 SQDIST = (XGAM(IG1)-XGAM(IG2))**2 + (YGAM(IG1)-YGAM(IG2))**2
348 c IF (iloop .EQ. 1) THEN
349 c CALL HF1(36, SQDIST, 1.)
351 IF (SQDIST .LT. SQDMIN) THEN
359 IF (SQDMIN .GT. SQDCUT) RETURN
361 IF (egam(ig1m) .GT. egam(ig2m)) THEN
362 XGAM(IG1M) = XGAM(IG1M)
363 YGAM(IG1M) = YGAM(IG1M)
364 CHGAM(IG1M) = CHGAM(IG1M)
365 EGAM(IG1M) = EGAM(IG1M)
367 XGAM(IG1M) = XGAM(IG2M)
368 YGAM(IG1M) = YGAM(IG2M)
369 CHGAM(IG1M) = CHGAM(IG2M)
370 EGAM(IG1M) = EGAM(IG2M)
372 c DE = EGAM(IG1M)/(EGAM(IG1M)+EGAM(IG2M))
373 c XGAM(IG1M) = XGAM(IG1M)*DE + XGAM(IG2M)*(1.-DE)
374 c YGAM(IG1M) = YGAM(IG1M)*DE + YGAM(IG2M)*(1.-DE)
375 c CHGAM(IG1M) = CHGAM(IG1M) + CHGAM(IG2M)
376 c EGAM(IG1M) = EGAM(IG1M) + EGAM(IG2M)
378 c CALL hf1 (38, egam(ig1m), 1.)
380 IF(IG2M.GT.NGAM) GO TO 2
382 XGAM(IG) = XGAM(IG+1)
383 YGAM(IG) = YGAM(IG+1)
384 EGAM(IG) = EGAM(IG+1)
385 CHGAM(IG)=CHGAM(IG+1)
390 *=======================================================================
391 SUBROUTINE ORDER(N,IAR)
395 IF(IAR(K).GE.IAR(K-2)) GO TO 4
401 IF(IAR(I-2).LE.IA) GO TO 3
412 C=======================================================================
413 SUBROUTINE CLUST(NW,IA)
415 COMMON/CLUSTER/ NCL,LENCL(5000)
416 COMMON/CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelY
417 COMMON/WORK/ IWORK(40000)
424 CALL ORDER(NW,IA(1,1))
434 IF(IAK.EQ.IAK/NcelY*NcelY) GO TO 20
435 IF(IAK.GT.IAK1+1) GO TO 20
441 KB = K-1 - IEND + IBEG
442 IF(NCL.GE.MxCL) RETURN
445 LENCL(NCL)=IEND-IBEG+1
446 IF(NCL.EQ.1.AND.K.GT.NW2) RETURN
455 IF(IBEG-IA(2,LAST).GT.NcelY.AND.K.GT.NW2) RETURN
456 IF(IBEG-IA(2,LAST).GT.NcelY) THEN
464 IF(IEND-ICUR.LT.NcelY) GO TO 50
465 IF(IBEG-ICUR.GT.NcelY) GO TO 60
466 IF(ICL.EQ.NCL-1) GO TO 40
467 IF(LENG.GT.768) GO TO 60
468 CALL UCOPY(IA(1,LAST+1-LENG),IWORK(1),LENG*2)
469 CALL UCOPY(IA(1,LAST+1),IA(1,LAST+1-LENG),(KB-1-LAST)*2)
470 CALL UCOPY(IWORK(1),IA(1,KB-LENG),LENG*2)
472 30 LENCL(J)=LENCL(J+1)
485 C=======================================================================
486 SUBROUTINE GAMS(IGAMS,NADC,IWRK,MINPK)
488 COMMON/GAMMA/ NGAM,EGAM(5000),XGAM(5000),YGAM(5000),CHGAM(5000)
489 COMMON/CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelY
490 DIMENSION IPNPK(50),EPK(50),XPK(50),YPK(50),IGMPK(2,50)
491 DIMENSION IGAMS(2,NADC),IWRK(NADC,50)
492 DATA MxPK / 50/,CHISQ1/30./,CHISQ2/3./
496 CALL ORDER(NADC*2,IGAMS(1,1))
504 IF(IAC.LT.MINPK) GO TO 50
507 IYC=IXYC-IXYC/NcelY*NcelY
508 IF(NADC.LT.2) GO TO 40
509 IF(IC.EQ.NADC) GO TO 20
512 IF(IXY-IXYC.GT.NcelY+1) GO TO 20
513 IF(IABS(IXY-IXY/NcelY*NcelY-IYC).GT.1) GO TO 10
514 IF(IGAMS(1,IN).GE.IAC) GO TO 50
516 20 IF(IC.LT.2) GO TO 40
520 IF(IXYC-IXY.GT.NcelY+1) GO TO 40
521 IF(IABS(IXY-IXY/NcelY*NcelY-IYC).GT.1) GO TO 30
522 IF(IGAMS(1,IN).GT.IAC) GO TO 50
526 C!!- IF(NPK.EQ. 10.OR.NPK.GE.NcelY*NcelY/NADC-3) GO TO 60
527 IF(NPK.EQ.MxPK.OR.NPK.GE.NcelZ*NcelY/NADC-3) GO TO 60
533 C GAMMA SEARCH FOR ONE PEAK
535 101 IF(NPK.GT.1) GO TO 102
536 IF(NGAM.GE.4999) RETURN
539 CALL GAM (NADC,IGAMS(1,1),CHISQ,EGAM(NGAM),XGAM(NGAM),YGAM(NGAM),
540 , EGAM(NGAM+1),XGAM(NGAM+1),YGAM(NGAM+1))
542 IF(EGAM(NGAM+1).EQ.0..OR.NGAM.EQ.4999) GO TO 500
547 C GAMMA SEARCH FOR SEVERAL PEAKS
548 C FIRST STEP AND STEP 1-BIS.
550 102 IF(NGAM.GE.4999) RETURN
558 IF(IBIS.NE.1) E=E*FLOAT(IWRK(IC,IPK))/IWRK(IC,NPK+1)
561 IYPK=IXYPK-IXPK*NcelY
565 IF(IC.GE.NADC) GO TO 120
568 IF(IXY-IXYPK.GT.NcelY+1) GO TO 120
571 IF(IABS(IY-IYPK).GT.1) GO TO 110
573 IF(IBIS.NE.1) E=E*FLOAT(IWRK(IN,IPK))/IWRK(IN,NPK+1)
575 XPK(IPK)=XPK(IPK)+E*IX
576 YPK(IPK)=YPK(IPK)+E*IY
578 120 IF(IC.LT.2) GO TO 140
582 IF(IXYPK-IXY.GT.NcelY+1) GO TO 140
585 IF(IABS(IY-IYPK).GT.1) GO TO 130
587 IF(IBIS.NE.1) E=E*FLOAT(IWRK(IN,IPK))/IWRK(IN,NPK+1)
589 XPK(IPK)=XPK(IPK)+E*IX
590 YPK(IPK)=YPK(IPK)+E*IY
593 XPK(IPK)=XY(XPK(IPK)/EPK(IPK))
594 YPK(IPK)=XY(YPK(IPK)/EPK(IPK))
602 IF(DX*DX+DY*DY.LT.8.) IWK = AMP(EPK(IPK),DX,DY)+.5
604 IWRK(I,NPK+3)=IWRK(I,NPK+3)+IWK
610 165 IWRK(I,NPK+1)=IWK
616 IF(IWRK(I,NPK+3).LE.0) GO TO 190
617 IE=IGAMS(1,I)*FLOAT(IWRK(I,IPK))/IWRK(I,NPK+3)+.5
618 IF(IE.LE.IDELTA) GO TO 190
620 IWRK(2*LENG-1,NPK+1)=IE
621 IWRK(2*LENG,NPK+1)=IGAMS(2,I)
623 IF(NGAM.GE.4999) GO TO 500
624 IF(LENG.EQ.0) GO TO 200
627 CALL GAM (LENG,IWRK(1,NPK+1),CHISQ,EGAM(NGAM),XGAM(NGAM),
628 , YGAM(NGAM),EGAM(NGAM+1),XGAM(NGAM+1),YGAM(NGAM+1))
632 IF(EGAM(NGAM+1).EQ.0..OR.NGAM.EQ.4999) GO TO 200
645 DO 220 IG=IGMPK(1,IPK),IGMPK(2,IPK)
647 DX=IXY/NcelY-XGAM(IG)
648 DY=IXY-IXY/NcelY*NcelY-YGAM(IG)
649 IF(DX*DX+DY*DY.GT.8.) GO TO 220
650 IWK = AMP(EGAM(IG),DX,DY)+.5
651 IWRK(I,IPK) =IWRK(I,IPK) +IWK
652 IWRK(I,NPK+3)=IWRK(I,NPK+3)+IWK
660 IF(IWRK(I,NPK+3).LE.0) GO TO 290
661 IE=IGAMS(1,I)*FLOAT(IWRK(I,IPK))/IWRK(I,NPK+3)+.5
662 IF(IE.LE.IDELTA) GO TO 290
664 IWRK(2*LENG-1,NPK+1)=IE
665 IWRK(2*LENG,NPK+1)=IGAMS(2,I)
667 IF(NGAM.GE.4999) GO TO 500
668 IF(LENG.EQ.0) GO TO 300
671 CALL GAM (LENG,IWRK(1,NPK+1),CHISQ,EGAM(NGAM),XGAM(NGAM),
672 , YGAM(NGAM),EGAM(NGAM+1),XGAM(NGAM+1),YGAM(NGAM+1))
674 IF(EGAM(NGAM+1).EQ.0..OR.NGAM.EQ.4999) GO TO 300
678 500 DO 600 IG=NGAM0+1,NGAM
679 XGAM(IG)= XGAM(IG)*CelZ
680 600 YGAM(IG)= YGAM(IG)*CelY
683 C=======================================================================
684 SUBROUTINE GAM(NADC,IADC,CHISQ,E1,X1,Y1,E2,X2,Y2)
685 C 28 OCT.1981. ONE GAMMA FIT PROGRAM.
686 CORRECTED 28 MAR.1983.
687 DIMENSION IADC(2,NADC)
688 DATA STPMIN/.005/,CONST/1.5/,ST0/.00005/,CHMIN/1./
689 COMMON/CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelY
692 C 1 FORMAT(' *** GAM ***')
727 DY = YC - (IXY-IXY/NcelY*NcelY)
728 CALL AG(E1,DX,DY,A,GX,GY)
729 D = CONST * A * (1.-A/E1)
734 CHISQC=CHISQC+DA**2/D
736 DD = DD*(2.-DD*CONST*(1.-2.*A/E1))
740 GRC = SQRT(GRXC**2+GRYC**2)
741 IF(GRC.LT.1.E-10) GRC=1.E-10
744 IF(CHISQC.GT.CHISQ) GO TO 20
745 COSI=(GRX*GRXC+GRY*GRYC)/GR/GRC
746 ST = ST*SC/(1.4-COSI)
753 IF(CHISQ.LT.CHSTOP) GO TO 101
755 IF(STEP.LT.STPMIN) GO TO 101
756 IF(STEP.GT.1.) ST = 1./GR
761 IF(CHISQ.GT.CSQCUT) CALL TWOGAM(NADC,IADC,CHISQ,E1,X1,Y1,E2,X2,Y2)
764 C=======================================================================
765 SUBROUTINE TWOGAM(NADC,IADC,CHISQ,E1,X1,Y1,E2,X2,Y2)
766 C 28 OCT.1981. TWO GAMMA FIT PROGRAM.
768 COMMON/CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelY
769 DIMENSION IADC(2,NADC)
770 DATA STPMIN/.005/,CONST/1.5/,DELCH/6./,EMIN/20./,ST0/.00005/
774 C 7 FORMAT(1X,'*** TWOGAM ***')
779 C START POINT CHOOSING.
808 SQR=SQRT(4.*EXY**2+(EXX-EYY)**2)
811 IF(SQR.GT.1.E-10) COS2FI=(EXX-EYY)/SQR
812 COSFI=SQRT((1.+COS2FI)/2.)
813 SINFI=SQRT((1.-COS2FI)/2.)
814 IF(EXY.LT.0.) SINFI=-SINFI
827 IF(EU3.LT.0.) SIGN=-1.
828 R=1.+C+SIGN*SQRT(2.*C+C**2)
829 IF(ABS(R-1.).GT..1) U=EU3/EUU*(R+1.)/(R-1.)
830 IF(ABS(R-1.).LE..1) U=SQRT(SQR/E/R)*(1.+R)
840 C START OF ITERATIONS.
863 CALL AG(E1C,DX1,DY1,A1,GX1,GY1)
866 CALL AG(E2C,DX2,DY2,A2,GX2,GY2)
869 D = CONST * A * (1.-A/E)
873 CHISQC=CHISQC+DA**2/D
875 DD = DD*(2.-DD*CONST*(1.-2.*A/E))
876 GRX1C = GRX1C + GX1*DD
877 GRY1C = GRY1C + GY1*DD
878 GRX2C = GRX2C + GX2*DD
879 GRY2C = GRY2C + GY2*DD
880 GREC = GREC + (A1/E1C-A2/E2C)*E*DD
882 GRC=SQRT(GRX1C**2+GRY1C**2+GRX2C**2+GRY2C**2+GREC**2)
883 IF(GRC.LT.1.E-10) GRC=1.E-10
886 IF(CHISQC.GT.CH) GO TO 20
887 COSI=(GRX1*GRX1C+GRY1*GRY1C+GRX2*GRX2C+GRY2*GRY2C+GRE*GREC)/GR/GRC
888 ST = ST*SC/(1.4-COSI)
896 IF(CH.LT.CHSTOP) GO TO 101
904 IF(STEP.LT.STPMIN) GO TO 101
908 IF(E1C.GT.EMIN.AND.E2C.GT.EMIN) GO TO 25
911 25 X1C = XX1 - ST*GRX1
916 101 IF(CH.GE.CHISQ*(NADC-2)-DELCH) RETURN
926 C=======================================================================
928 C MADE FROM 25 GEV ELECTRON CALIBRATION WITHOUT HODOSCOPE. RUN APR.1981.
932 XY=X*(.22466+XI2*(3.74014+XI2*(-25.88467+
933 + XI2*(166.90556-XI2*294.35077))))+I+.5
937 C=======================================================================
938 SUBROUTINE AG(Ei,Xi,Yi,Ai,GXi,GYi)
939 REAL*4 Ei,Xi,Yi,Ai,GXi,GYi !...Interface...!
940 REAL*8 E ,X ,Y ,A ,GX ,GY !..Calculation..!
941 * ..........................................................
942 * ...It uses Lednev's Amplitude calculation function.Fcml..
943 * ...To Calculate an Ammplitude (A) and Garadient (GX,GY)...
944 * ...i use REAL*4 for inteface purpose only ................
945 * ...calculations in REAL*8.................................
946 * ...................typed by Sadovsky.A.S..................
949 COMMON/CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelY
954 X=Xi*CelZ !....REAL*4....!
955 Y=Yi*CelY !.....to.......!
956 E=Ei !..............!
957 A=Ai !....REAL*8....!
958 GX=GXi !..Convertion..!
959 GY=GYi !..............!
961 A = Fcml(x+dx,y+dy) - Fcml(x+dx,y-dy) -
962 + Fcml(x-dx,y+dy) + Fcml(x-dx,y-dy)
965 GX= GradX(x+dx,y+dy) - GradX(x+dx,y-dy) -
966 + GradX(x-dx,y+dy) + GradX(x-dx,y-dy)
969 GY= GradY(x+dx,y+dy) - GradY(x+dx,y-dy) -
970 + GradY(x-dx,y+dy) + GradY(x-dx,y-dy)
975 C=======================================================================
977 C *..Cumuliative function calculation in REAL*8..*
981 DATA A,b / 1.0, 1.082 /
982 C- !...Cumuliative function calculation.......!
984 C ! Kumulyativnaya funkciya ne pravil'naya, !
985 C no poluchaemoe pri etom enrgovydelenie
986 C v yachejke PRAVIL'NOE !!!
988 Fff = A*DATAN(x*y/(b*DSQRT(b*b+x*x+y*y)))
989 Fcml = Fff/6.2831853071796D0
992 C=======================================================================
994 C *..Cumuliative function Gradient_X in REAL*8..*
997 REAL*8 a,b,skv,s,Gradient
998 DATA a,b / 1.0, 1.082 /
1000 skv = b*b + x*x + y*y
1001 Gradient = a*y*(1.-x*x/skv)*b*DSQRT(skv)/(b*b*skv +x*x*y*y)
1002 GradX = Gradient/6.2831853071796d0
1005 C=======================================================================
1007 C *..Cumuliative function Gradient_Y in REAL*8..*
1009 C- COMMON/CONSTS/ BEAM,ANOR,ANORT,DELTA,CELL,DSST,NCNX,NCNY,STCO
1011 REAL*8 a,b,skv,s,Gradient
1012 DATA a,b / 1.0, 1.082 /
1014 skv = b*b + x*x + y*y
1015 Gradient = a*x*(1.-y*y/skv)*b*DSQRT(skv)/(b*b*skv +x*x*y*y)
1016 GradY = Gradient/6.2831853071796d0
1019 C=======================================================================
1020 FUNCTION AMP(Ei,Xi,Yi)
1022 C *..Amplitude calculation in REAL*4 using cumuliative function..*
1023 C *........to calculate amplitude only in gams cell..............*
1025 COMMON/CONSTA/ NcelZ,NcelY,IDELT,IDELA,CelZ,CelY
1026 REAL*4 AMP,Ei,Xi,Yi,Fcm
1027 REAL*8 Fcml,E,X ,Y, Dx,Dy,D
1036 A = Fcml(x+dx,y+dy) - Fcml(x+dx,y-dy) -
1037 + Fcml(x-dx,y+dy) + Fcml(x-dx,y-dy)
1042 C=======================================================================
1043 SUBROUTINE VARDEL(NWGAMS)
1044 COMMON/DELTA/ IDLT(40000)
1045 COMMON/CLUSTER/ NCL,LENCL(5000)
1046 COMMON/EVENT/ IHDR(12),IBUF(30035)
1047 EQUIVALENCE(IHDR(3),NREC),(IHDR(5),NMT),(IHDR(6),IPHOD),(IHDR(7),
1048 ,IPSC),(IHDR(8),IPGS),(IHDR(9),IPGM),(IHDR(10),IPTG),(IBUF(3),NEV)
1049 DATA MINDLT/2/,NTRIG/1000/,LENMAX/6/
1051 IF(NWGAMS.LE.2.OR.NCL.LT.1) RETURN
1053 IF(ITRIG.LE.NTRIG) GO TO 20
1056 IF(IDLT(I).GT.MINDLT) IDLT(I)=IDLT(I)-1
1060 IF(LENCL(ICL).NE.1) GO TO 30
1062 IDLT(ICNT)=IDLT(ICNT)+1
1064 30 IF(LENCL(ICL).GT.LENMAX) GO TO 50
1065 IPEND=IPCL+LENCL(ICL)*2-2
1066 DO 40 I=IPCL,IPEND,2
1068 IF(IDLT(ICNT).GT.MINDLT) IDLT(ICNT)=IDLT(ICNT)-1
1070 50 IPCL=IPCL+LENCL(ICL)*2
1073 C=======================================================================