********************************************** SUBROUTINE REFDIGI1 ********************************************* implicit none C. * * C. * Routine called at the end of each event for writing * C. * reference tracks (i.e. nref(1)=1) * C. * * cSEQ,DRPARS,GUREF,GEOM. c c local variables c #include "gurefp.inc" #include "guref.inc" integer maxh parameter(maxh=200) real hits1(15,maxh),hits2(15,maxh),hits3(15,maxh),hits4(15,maxh) real hits(15,maxh,4),xysum(8),xysum2(8) real xydel(8),xydela(8),xydelb(8),xydelmin real hitsxy(8,maxh),xysuma(8),xysum2a(8),xysumb(8),xysum2b(8) real dc,ds,dxy,sum0,sum00,dh,dl,diff,diff0,diffl,d1,d2,d3 real xylog(15),dxylog(15),accpos,fdelsig,diffm integer nlog(15),numvs(4) integer itral1(maxh),itral2(maxh),itral3(maxh),itral4(maxh) integer secv(4,maxh) integer isec1(4,maxh),isec2(4,maxh),isec3(4,maxh),isec4(4,maxh) integer nhits(8),nhits1,nhits2,nhits3,nhits4,ihit,j1,j2,l1 integer nxy(8),ilxy(8),k,i,i1,i2,jl,jll,nxymax,nxymin integer ilxymax,idum,imaxh integer*2 isub,ixydel(8) logical lpos equivalence (hits1(1,1),hits(1,1,1)),(hits2(1,1),hits(1,1,2)) equivalence (hits3(1,1),hits(1,1,3)),(hits4(1,1),hits(1,1,4)) data numvs/6,1,1,1/ ************************************************************************* imaxh=maxh nxymax=30 nxymin=5 ilxymax=12 xydelmin=0.0010 accpos=0.0050 isub=32000 fdelsig=.43 do j1=1,imaxh do j2=1,15 hits1(j2,j1)=0. hits2(j2,j1)=0. hits3(j2,j1)=0. hits4(j2,j1)=0. end do itral1(j1)=0 itral2(j1)=0 itral3(j1)=0 itral4(j1)=0 end do nhits1=0 nhits2=0 nhits3=0 nhits4=0 do j1=1,4 xysum(j1)=0. xysum(j1+4)=0. xysum2(j1)=0. xysum2(j1+4)=0. xysuma(j1)=9990. xysuma(j1+4)=9990. xysum2a(j1)=0. xysum2a(j1+4)=0. xydela(j1)=0. xydela(j1+4)=0. nxy(j1)=0 nxy(j1+4)=0 ilxy(j1)=0 ilxy(j1+4)=0 end do call gfhits('DRIF','D1C4',4,15,imaxh,0,numvs, 1 itral1,isec1,hits1,nhits1) call gfhits('DRIF','D2C4',4,15,imaxh,0,numvs, 1 itral2,isec2,hits2,nhits2) call gfhits('DRIF','D3C4',4,15,imaxh,0,numvs, 1 itral3,isec3,hits3,nhits3) call gfhits('DRIF','D4C4',4,15,imaxh,0,numvs, 1 itral4,isec4,hits4,nhits4) nhits(1)=nhits1 nhits(2)=nhits1 nhits(3)=nhits2 nhits(4)=nhits2 nhits(5)=nhits3 nhits(6)=nhits3 nhits(7)=nhits4 nhits(8)=nhits4 C change with geant3.15: sector number now in hits(15) do i=1,imaxh secv(1,i)=hits1(15,i) secv(2,i)=hits2(15,i) secv(3,i)=hits3(15,i) secv(4,i)=hits4(15,i) end do do ihit=1,nhits1 hitsxy(1,ihit)=hits1(7,ihit) hitsxy(2,ihit)=hits1(8,ihit) end do do ihit=1,nhits2 hitsxy(3,ihit)=hits2(7,ihit) hitsxy(4,ihit)=hits2(8,ihit) end do do ihit=1,nhits3 hitsxy(5,ihit)=hits3(7,ihit) hitsxy(6,ihit)=hits3(8,ihit) end do do ihit=1,nhits4 hitsxy(7,ihit)=hits4(7,ihit) hitsxy(8,ihit)=hits4(8,ihit) end do *************************************************************************** do jl=1,8 jll=int(0.5*(1.1+float(jl))) lpos=.false. dl=-300. dh=300. 111 continue sum00=sum0 sum0=xysuma(jl) xysuma(jl)=0. xysum2a(jl)=0. xydela(jl)=0. nxy(jl)=0 if(ilxy(jl).eq.0)then do l1=1,14 xylog(l1)=0. dxylog(l1)=0. nlog(l1)=0 end do end if ilxy(jl)=ilxy(jl)+1 do ihit=1,nhits(jl) dxy=hitsxy(jl,ihit) if(dxy.gt.dl.and.dxy.lt.dh.and.secv(jll,ihit).eq.6)then xysuma(jl)=xysuma(jl)+dxy xysum2a(jl)=xysum2a(jl)+dxy*dxy nxy(jl)=nxy(jl)+1 end if end do if(nxy(jl).ne.0)then xysuma(jl)=xysuma(jl)/float(nxy(jl)) xysum2a(jl)=xysum2a(jl)/float(nxy(jl)) xydela(jl)=fdelsig*sqrt(abs(xysum2a(jl)-xysuma(jl)*xysuma(jl))) xylog(ilxy(jl))=xysuma(jl) dxylog(ilxy(jl))=xydela(jl) end if nlog(ilxy(jl))=nxy(jl) c write(6,501)jl,ilxy(jl),nxy(jl),xysuma(jl),xydela(jl) c 501 format(' digi1 hit ',i4,' loop ',i4,' nhits ',i4,2x,2f8.3) c next line to make it work when no physics processes on xydela(jl)=max(xydela(jl),xydelmin) dh=xysuma(jl)+5.*xydela(jl) dl=xysuma(jl)-5.*xydela(jl) diffl=0.1*xydela(jl) diffl=max(diffl,accpos) diff0=abs(xysuma(jl)-sum00) diff=abs(xysuma(jl)-sum0) if(ilxy(jl).lt.3)go to 111 if(diff.lt.diffl.or.diff0.lt.diffl)lpos=.true. if(.not.lpos.and. 1 ilxy(jl).lt.ilxymax.and.nxy(jl).gt.nxymax)go to 111 diffm=max(5.*xydela(jl),0.0200) if(.not.lpos.and.nxy(jl).le.nxymax.and.diff.gt.diffm) 1 xysuma(jl)=9700. if(.not.lpos.and.ilxy(jl).eq.ilxymax.and.diff.gt.diffm) 1 xysuma(jl)=9800. if(.not.lpos.and.nxy(jl).lt.nxymin)xysuma(jl)=9900. d1=xysuma(jl) if(d1.gt.9500.or.d1.eq.0.)then if(nxy(jl).gt.nxymin)then write(6,310)jl,nhits(jl),nxy(jl),ilxy(jl),d1 310 format(' Adet',i3,' nhits',i3,' nxy',i3,' ilxy',i3,' pos',f8.2) write(6,311)dl,dh,diff,diffl,diffm 311 format(' dl',f10.4,' dh',f10.4,' diff',f10.4, 1 ' diffl',f10.4,' diffm',f10.4) write(6,312)(iref(i1),i1=1,5) 312 format(' iref',5i4) write(6,313)(xylog(i1),i1=1,7) 313 format(' xylog ',7f10.4) write(6,314)(xylog(i1),i1=8,14) 314 format(' xylog ',7f10.4) write(6,315)(dxylog(i1),i1=1,7) 315 format(' dxylog ',7f10.4) write(6,316)(dxylog(i1),i1=8,14) 316 format(' dxylog ',7f10.4) write(6,317)(nlog(i1),i1=1,7) 317 format(' nlog ',7i5) write(6,318)(nlog(i1),i1=8,14) 318 format(' nlog ',7i5) write(6,319) 319 format(' ') end if end if end do ************************************************************************ x1pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xysuma(1) y1pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xysuma(2) x2pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xysuma(3) y2pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xysuma(4) x3pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xysuma(5) y3pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xysuma(6) x4pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xysuma(7) y4pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xysuma(8) sx1pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xydela(1) sy1pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xydela(2) sx2pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xydela(3) sy2pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xydela(4) sx3pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xydela(5) sy3pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xydela(6) sx4pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xydela(7) sy4pos(iref(1),iref(2),iref(3),iref(4),iref(5))=xydela(8) c idum=sx1pos(iref(1),iref(2),iref(3),iref(4),iref(5)) c idum=500*idum+15*nxy(1)+ilxy(1)-isub c sx1pos(iref(1),iref(2),iref(3),iref(4),iref(5))=idum c idum=sy1pos(iref(1),iref(2),iref(3),iref(4),iref(5)) c idum=500*idum+15*nxy(2)+ilxy(2)-isub c sy1pos(iref(1),iref(2),iref(3),iref(4),iref(5))=idum c idum=sx2pos(iref(1),iref(2),iref(3),iref(4),iref(5)) c idum=500*idum+15*nxy(3)+ilxy(3)-isub c sx2pos(iref(1),iref(2),iref(3),iref(4),iref(5))=idum c idum=sy2pos(iref(1),iref(2),iref(3),iref(4),iref(5)) c idum=500*idum+15*nxy(4)+ilxy(4)-isub c sy2pos(iref(1),iref(2),iref(3),iref(4),iref(5))=idum c idum=sx3pos(iref(1),iref(2),iref(3),iref(4),iref(5)) c idum=500*idum+15*nxy(5)+ilxy(5)-isub c sx3pos(iref(1),iref(2),iref(3),iref(4),iref(5))=idum c idum=sy3pos(iref(1),iref(2),iref(3),iref(4),iref(5)) c idum=500*idum+15*nxy(6)+ilxy(6)-isub c sy3pos(iref(1),iref(2),iref(3),iref(4),iref(5))=idum c idum=sx4pos(iref(1),iref(2),iref(3),iref(4),iref(5)) c idum=500*idum+15*nxy(7)+ilxy(7)-isub c sx4pos(iref(1),iref(2),iref(3),iref(4),iref(5))=idum c idum=sy4pos(iref(1),iref(2),iref(3),iref(4),iref(5)) c idum=500*idum+15*nxy(8)+ilxy(8)-isub c sy4pos(iref(1),iref(2),iref(3),iref(4),iref(5))=idum c sx1pos(iref(1),iref(2),iref(3),iref(4),iref(5))=int(xydel(1)) c 1 -isub c sy1pos(iref(1),iref(2),iref(3),iref(4),iref(5))=int(xydel(2)) c 1 -isub c sx2pos(iref(1),iref(2),iref(3),iref(4),iref(5))=int(xydel(3)) c 1 -isub c sy2pos(iref(1),iref(2),iref(3),iref(4),iref(5))=int(xydel(4)) c 1 -isub c sx3pos(iref(1),iref(2),iref(3),iref(4),iref(5))=int(xydel(5)) c 1 -isub c sy3pos(iref(1),iref(2),iref(3),iref(4),iref(5))=int(xydel(6)) c 1 -isub c sx4pos(iref(1),iref(2),iref(3),iref(4),iref(5))=int(xydel(7)) c 1 -isub c sy4pos(iref(1),iref(2),iref(3),iref(4),iref(5))=int(xydel(8)) c 1 -isub return end