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

Diff of /DarthVader/TrackerLevel2/src/F77/analysissubroutines.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.27 by pam-fi, Fri Aug 17 14:36:05 2007 UTC revision 1.30 by pam-fi, Tue Aug 28 13:25:50 2007 UTC
# Line 215  c$$$      enddo Line 215  c$$$      enddo
215  c      include 'momanhough_init.f'  c      include 'momanhough_init.f'
216                
217        logical FIMAGE            !        logical FIMAGE            !
218          real trackimage(NTRACKSMAX)
219        real*8 AL_GUESS(5)        real*8 AL_GUESS(5)
220    
221  *-------------------------------------------------------------------------------  *-------------------------------------------------------------------------------
# Line 331  c$$$         enddo Line 332  c$$$         enddo
332              iimage=0              iimage=0
333           endif           endif
334           if(icand.eq.0)then           if(icand.eq.0)then
335              if(VERBOSE)then              if(VERBOSE.EQ.1)then
336                 print*,'HAI FATTO UN CASINO!!!!!! icand = ',icand                 print*,'HAI FATTO UN CASINO!!!!!! icand = ',icand
337       $              ,ibest,iimage       $              ,ibest,iimage
338              endif              endif
# Line 360  c         print*,'## guess: ',al Line 361  c         print*,'## guess: ',al
361           jstep=0                !# minimization steps           jstep=0                !# minimization steps
362    
363           iprint=0           iprint=0
364  c         if(DEBUG)iprint=1  c         if(DEBUG.EQ.1)iprint=1
365           if(VERBOSE)iprint=1           if(VERBOSE.EQ.1)iprint=1
366           if(DEBUG)iprint=2           if(DEBUG.EQ.1)iprint=2
367           call mini2(jstep,ifail,iprint)           call mini2(jstep,ifail,iprint)
368           if(ifail.ne.0) then           if(ifail.ne.0) then
369              if(VERBOSE)then              if(VERBOSE.EQ.1)then
370                 print *,                 print *,
371       $              '*** MINIMIZATION FAILURE *** (after refinement) '       $              '*** MINIMIZATION FAILURE *** (after refinement) '
372       $              ,iev       $              ,iev
# Line 380  c$$$               print*,'------------- Line 381  c$$$               print*,'-------------
381  c            chi2=-chi2  c            chi2=-chi2
382           endif           endif
383                    
384           if(DEBUG)then           if(DEBUG.EQ.1)then
385              print*,'----------------------------- improved track coord'              print*,'----------------------------- improved track coord'
386  22222       format(i2,' * ',3f10.4,' --- ',4f10.4,' --- ',2f4.0,2f10.5)  22222       format(i2,' * ',3f10.4,' --- ',4f10.4,' --- ',2f4.0,2f10.5)
387              do ip=1,6              do ip=1,6
# Line 391  c            chi2=-chi2 Line 392  c            chi2=-chi2
392           endif           endif
393    
394  c         rchi2=chi2/dble(ndof)  c         rchi2=chi2/dble(ndof)
395           if(DEBUG)then           if(DEBUG.EQ.1)then
396              print*,' '              print*,' '
397              print*,'****** SELECTED TRACK *************'              print*,'****** SELECTED TRACK *************'
398              print*,'#         R. chi2        RIG'              print*,'#         R. chi2        RIG'
# Line 407  c         rchi2=chi2/dble(ndof) Line 408  c         rchi2=chi2/dble(ndof)
408  *     ------------- search if the track has an IMAGE -------------  *     ------------- search if the track has an IMAGE -------------
409  *     ------------- (also this is stored )           -------------  *     ------------- (also this is stored )           -------------
410           if(FIMAGE)goto 122     !>>> jump! (this is already an image)           if(FIMAGE)goto 122     !>>> jump! (this is already an image)
411  *     now search for track-image, by comparing couples IDs  
412    *     -----------------------------------------------------
413    *     first check if the track is ambiguous
414    *     -----------------------------------------------------
415    *     (modified on august 2007 by ElenaV)
416             is1=0
417             do ip=1,NPLANES
418                if(SENSOR_STORE(ip,icand).ne.0)then
419                   is1=SENSOR_STORE(ip,icand)
420                   if(ip.eq.6)is1=3-is1 !last plane inverted
421                endif
422             enddo
423             if(is1.eq.0)then
424                if(WARNING.EQ.1)print*,'** WARNING ** sensor=0'
425                goto 122            !jump
426             endif
427    c         print*,'is1 ',is1
428             do ip=1,NPLANES
429                is2 = SENSOR_STORE(ip,icand) !sensor
430    c            print*,'is2 ',is2,' ip ',ip
431                if(ip.eq.6.and.is2.ne.0)is2=3-is2 !last plane inverted
432                if(
433         $           (is1.ne.is2.and.is2.ne.0)
434         $           )goto 122      !jump (this track cannot have an image)
435             enddo
436             if(DEBUG.eq.1)print*,' >>> ambiguous track! '
437    *     now search for track-image among track candidates
438    c$$$         do i=1,ntracks
439    c$$$            iimage=i
440    c$$$            do ip=1,nplanes
441    c$$$               if(     CP_STORE(nplanes-ip+1,icand).ne.
442    c$$$     $              -1*CP_STORE(nplanes-ip+1,i).and.
443    c$$$     $              CP_STORE(nplanes-ip+1,i).ne.0.and.
444    c$$$     $              CP_STORE(nplanes-ip+1,icand).ne.0 )iimage=0
445    c$$$               print*,' track ',i,' CP ',CP_STORE(nplanes-ip+1,i)
446    c$$$     $              ,CP_STORE(nplanes-ip+1,icand),iimage
447    c$$$            enddo
448    c$$$            if(  iimage.ne.0.and.
449    c$$$c     $           RCHI2_STORE(i).le.CHI2MAX.and.
450    c$$$c     $           RCHI2_STORE(i).gt.0.and.
451    c$$$     $           .true.)then
452    c$$$               if(DEBUG.EQ.1)print*,'Track candidate ',iimage
453    c$$$     $              ,' >>> TRACK IMAGE >>> of'
454    c$$$     $              ,ibest
455    c$$$               goto 122         !image track found
456    c$$$            endif
457    c$$$         enddo
458    *     ---------------------------------------------------------------
459    *     take the candidate with the greatest number of matching couples
460    *     if more than one satisfies the requirement,
461    *     choose the one with more points and lower chi2
462    *     ---------------------------------------------------------------
463    *     count the number of matching couples
464             ncpmax = 0
465             iimage   = 0           !id of candidate with better matching
466           do i=1,ntracks           do i=1,ntracks
467              iimage=i              ncp=0
468              do ip=1,nplanes              do ip=1,nplanes
469                 if(     CP_STORE(nplanes-ip+1,icand).ne.                 if(CP_STORE(nplanes-ip+1,icand).ne.0)then
470       $              -1*CP_STORE(nplanes-ip+1,i) )iimage=0                    if(
471         $                 CP_STORE(nplanes-ip+1,i).ne.0
472         $                 .and.
473         $                 CP_STORE(nplanes-ip+1,icand).eq.
474         $                 -1*CP_STORE(nplanes-ip+1,i)
475         $                 )then
476                         ncp=ncp+1  !ok
477                      elseif(
478         $                    CP_STORE(nplanes-ip+1,i).ne.0
479         $                    .and.
480         $                    CP_STORE(nplanes-ip+1,icand).ne.
481         $                    -1*CP_STORE(nplanes-ip+1,i)
482         $                    )then
483                         ncp = 0
484                         goto 117   !it is not an image candidate
485                      else
486                        
487                      endif
488                   endif
489    c$$$               print*,' track ',i,' CP ',CP_STORE(nplanes-ip+1,i)
490    c$$$     $              ,CP_STORE(nplanes-ip+1,icand),ncp
491              enddo              enddo
492              if(  iimage.ne.0.and.   117        continue
493  c     $           RCHI2_STORE(i).le.CHI2MAX.and.              trackimage(i)=ncp   !number of matching couples
494  c     $           RCHI2_STORE(i).gt.0.and.              if(ncp>ncpmax)then
495       $           .true.)then                 ncpmax=ncp
496                 if(DEBUG)print*,'Track candidate ',iimage                 iimage=i
      $              ,' >>> TRACK IMAGE >>> of'  
      $              ,ibest  
                goto 122         !image track found  
497              endif              endif
498           enddo           enddo
499    *     check if there are more than one image candidates
500             ngood=0
501             do i=1,ntracks
502                if( ncpmax.ne.0.and.trackimage(i).eq.ncpmax )ngood=ngood+1
503             enddo
504    *     if there are, choose the best one
505             if(ngood.gt.1)then
506    *     -------------------------------------------------------
507    *     order track-candidates according to:
508    *     1st) decreasing n.points
509    *     2nd) increasing chi**2
510    *     -------------------------------------------------------
511                rchi2best=1000000000.
512                ndofbest=0            
513                do i=1,ntracks
514                   if( trackimage(i).eq.ncpmax )then
515                      ndof=0              
516                      do ii=1,nplanes    
517                         ndof=ndof        
518         $                    +int(xgood_store(ii,i))
519         $                    +int(ygood_store(ii,i))
520                      enddo              
521                      if(ndof.gt.ndofbest)then
522                         iimage=i
523                         rchi2best=RCHI2_STORE(i)
524                         ndofbest=ndof    
525                      elseif(ndof.eq.ndofbest)then
526                         if(RCHI2_STORE(i).lt.rchi2best.and.
527         $                    RCHI2_STORE(i).gt.0)then
528                            iimage=i
529                            rchi2best=RCHI2_STORE(i)
530                            ndofbest=ndof  
531                         endif            
532                      endif
533                   endif
534                enddo
535                
536             endif
537    
538             if(DEBUG.EQ.1)print*,'Track candidate ',iimage
539         $        ,' >>> TRACK IMAGE >>> of'
540         $        ,ibest
541    
542   122     continue   122     continue
543    
544    
545  *     --- and store the results --------------------------------  *     --- and store the results --------------------------------
546           ntrk = ntrk + 1                   !counter of found tracks           ntrk = ntrk + 1                   !counter of found tracks
547           if(.not.FIMAGE           if(.not.FIMAGE
# Line 438  c         print*,'++++++++++ iimage,fima Line 554  c         print*,'++++++++++ iimage,fima
554  c     $        ,iimage,fimage,ntrk,image(ntrk)  c     $        ,iimage,fimage,ntrk,image(ntrk)
555    
556           if(ntrk.eq.NTRKMAX)then           if(ntrk.eq.NTRKMAX)then
557              if(verbose)              if(verbose.eq.1)
558       $           print*,       $           print*,
559       $           '** warning ** number of identified '//       $           '** warning ** number of identified '//
560       $           'tracks exceeds vector dimension '       $           'tracks exceeds vector dimension '
# Line 474  cc            good2=.false. Line 590  cc            good2=.false.
590       $        rchi2best.le.CHI2MAX.and.       $        rchi2best.le.CHI2MAX.and.
591  c     $        rchi2best.lt.15..and.  c     $        rchi2best.lt.15..and.
592       $        .true.)then       $        .true.)then
593              if(DEBUG)then              if(DEBUG.EQ.1)then
594                 print*,'***** NEW SEARCH ****'                 print*,'***** NEW SEARCH ****'
595              endif              endif
596              goto 11111          !try new search              goto 11111          !try new search
# Line 690  c$$$         print*,fbad_cog(4,icx) Line 806  c$$$         print*,fbad_cog(4,icx)
806              stripx  = stripx + pfaeta2(icx,angx)                        stripx  = stripx + pfaeta2(icx,angx)          
807              resxPAM = risxeta2(abs(angx))              resxPAM = risxeta2(abs(angx))
808              resxPAM = resxPAM*fbad_cog(2,icx)              resxPAM = resxPAM*fbad_cog(2,icx)
809              if(DEBUG.and.fbad_cog(2,icx).ne.1)  c$$$            if(DEBUG.EQ.1.and.fbad_cog(2,icx).ne.1)
810       $           print*,'BAD icx >>> ',viewx,fbad_cog(2,icx)  c$$$     $           print*,'BAD icx >>> ',viewx,fbad_cog(2,icx)
811    
812           elseif(PFAx.eq.'ETA3')then                                   elseif(PFAx.eq.'ETA3')then                        
813    
# Line 733  c     $           print*,'BAD icx >>> ', Line 849  c     $           print*,'BAD icx >>> ',
849              resxPAM = resxPAM*fbad_cog(0,icx)              resxPAM = resxPAM*fbad_cog(0,icx)
850    
851           else           else
852              if(DEBUG) print*,'*** Non valid p.f.a. (x) --> ',PFAx              if(DEBUG.EQ.1) print*,'*** Non valid p.f.a. (x) --> ',PFAx
853           endif           endif
854    
855    
# Line 743  c     $           print*,'BAD icx >>> ', Line 859  c     $           print*,'BAD icx >>> ',
859           if( nsatstrips(icx).gt.0 )then           if( nsatstrips(icx).gt.0 )then
860              stripx  = stripx + cog(4,icx)                          stripx  = stripx + cog(4,icx)            
861              resxPAM = pitchX*1e-4/sqrt(12.)              resxPAM = pitchX*1e-4/sqrt(12.)
862              cc=cog(4,icx)  cc            cc=cog(4,icx)
863  c$$$            print*,icx,' *** ',cc  c$$$            print*,icx,' *** ',cc
864  c$$$            print*,icx,' *** ',resxPAM  c$$$            print*,icx,' *** ',resxPAM
865           endif           endif
# Line 778  c$$$            print*,icx,' *** ',resxP Line 894  c$$$            print*,icx,' *** ',resxP
894           endif           endif
895    
896           if(icx.ne.0.and.(nply.ne.nplx.or.nldy.ne.nldx))then           if(icx.ne.0.and.(nply.ne.nplx.or.nldy.ne.nldx))then
897              if(DEBUG) then              if(DEBUG.EQ.1) then
898                 print*,'xyz_PAM   ***ERROR*** invalid cluster couple!!! '                 print*,'xyz_PAM   ***ERROR*** invalid cluster couple!!! '
899       $              ,icx,icy       $              ,icx,icy
900              endif              endif
# Line 873  c     $           print*,'BAD icy >>> ', Line 989  c     $           print*,'BAD icy >>> ',
989              resyPAM = resyPAM*fbad_cog(0,icy)              resyPAM = resyPAM*fbad_cog(0,icy)
990    
991           else           else
992              if(DEBUG) print*,'*** Non valid p.f.a. (x) --> ',PFAx              if(DEBUG.EQ.1) print*,'*** Non valid p.f.a. (x) --> ',PFAx
993           endif           endif
994    
995    
# Line 883  c     $           print*,'BAD icy >>> ', Line 999  c     $           print*,'BAD icy >>> ',
999           if( nsatstrips(icy).gt.0 )then           if( nsatstrips(icy).gt.0 )then
1000              stripy  = stripy + cog(4,icy)                          stripy  = stripy + cog(4,icy)            
1001              resyPAM = pitchY*1e-4/sqrt(12.)              resyPAM = pitchY*1e-4/sqrt(12.)
1002              cc=cog(4,icy)  cc            cc=cog(4,icy)
1003  c$$$            print*,icy,' *** ',cc  c$$$            print*,icy,' *** ',cc
1004  c$$$            print*,icy,' *** ',resyPAM  c$$$            print*,icy,' *** ',resyPAM
1005           endif           endif
# Line 903  c     (xi,yi,zi) = mechanical coordinate Line 1019  c     (xi,yi,zi) = mechanical coordinate
1019  c------------------------------------------------------------------------  c------------------------------------------------------------------------
1020           if(((mod(int(stripx+0.5)-1,1024)+1).le.3)           if(((mod(int(stripx+0.5)-1,1024)+1).le.3)
1021       $        .or.((mod(int(stripx+0.5)-1,1024)+1).ge.1022)) then !X has 1018 strips...       $        .or.((mod(int(stripx+0.5)-1,1024)+1).ge.1022)) then !X has 1018 strips...
1022              if(DEBUG) then              if(DEBUG.EQ.1) then
1023                 print*,'xyz_PAM (couple):',                 print*,'xyz_PAM (couple):',
1024       $              ' WARNING: false X strip: strip ',stripx       $              ' WARNING: false X strip: strip ',stripx
1025              endif              endif
# Line 998  c            print*,'X-singlet ',icx,npl Line 1114  c            print*,'X-singlet ',icx,npl
1114  c            if((stripx.le.3).or.(stripx.ge.1022)) then !X has 1018 strips...  c            if((stripx.le.3).or.(stripx.ge.1022)) then !X has 1018 strips...
1115              if(((mod(int(stripx+0.5)-1,1024)+1).le.3)              if(((mod(int(stripx+0.5)-1,1024)+1).le.3)
1116       $           .or.((mod(int(stripx+0.5)-1,1024)+1).ge.1022)) then !X has 1018 strips...       $           .or.((mod(int(stripx+0.5)-1,1024)+1).ge.1022)) then !X has 1018 strips...
1117                 if(DEBUG) then                 if(DEBUG.EQ.1) then
1118                    print*,'xyz_PAM (X-singlet):',                    print*,'xyz_PAM (X-singlet):',
1119       $                 ' WARNING: false X strip: strip ',stripx       $                 ' WARNING: false X strip: strip ',stripx
1120                 endif                 endif
# Line 1023  c            print*,'X-cl ',icx,stripx,' Line 1139  c            print*,'X-cl ',icx,stripx,'
1139  c            print*,yi_A,' <--> ',yi_B  c            print*,yi_A,' <--> ',yi_B
1140    
1141           else           else
1142              if(DEBUG) then              if(DEBUG.EQ.1) then
1143                 print *,'routine xyz_PAM ---> not properly used !!!'                 print *,'routine xyz_PAM ---> not properly used !!!'
1144                 print *,'icx = ',icx                 print *,'icx = ',icx
1145                 print *,'icy = ',icy                 print *,'icy = ',icy
# Line 1092  c--------------------------------------- Line 1208  c---------------------------------------
1208  c         print*,'A-(',xPAM_A,yPAM_A,') B-(',xPAM_B,yPAM_B,')'  c         print*,'A-(',xPAM_A,yPAM_A,') B-(',xPAM_B,yPAM_B,')'
1209    
1210        else        else
1211           if(DEBUG) then           if(DEBUG.EQ.1) then
1212              print *,'routine xyz_PAM ---> not properly used !!!'              print *,'routine xyz_PAM ---> not properly used !!!'
1213              print *,'icx = ',icx              print *,'icx = ',icx
1214              print *,'icy = ',icy              print *,'icy = ',icy
# Line 1137  c$$$      common/FINALPFA/PFA Line 1253  c$$$      common/FINALPFA/PFA
1253  c$$$      PFAx = 'COG4'!PFA  c$$$      PFAx = 'COG4'!PFA
1254  c$$$      PFAy = 'COG4'!PFA  c$$$      PFAy = 'COG4'!PFA
1255    
1256    
1257        if(icx.gt.nclstr1.or.icy.gt.nclstr1)then        if(icx.gt.nclstr1.or.icy.gt.nclstr1)then
1258              print*,'xyzpam: ***WARNING*** clusters ',icx,icy              print*,'xyzpam: ***WARNING*** clusters ',icx,icy
1259       $           ,' does not exists (nclstr1=',nclstr1,')'       $           ,' does not exists (nclstr1=',nclstr1,')'
# Line 1149  c$$$      PFAy = 'COG4'!PFA Line 1266  c$$$      PFAy = 'COG4'!PFA
1266        call idtoc(pfaid,PFAx)        call idtoc(pfaid,PFAx)
1267        call idtoc(pfaid,PFAy)        call idtoc(pfaid,PFAy)
1268    
1269    cc      print*,PFAx,PFAy
1270    
1271  c$$$      call xyz_PAM(icx,icy,sensor,PFAx,PFAy,ax,ay,bfx,bfy)  c$$$      call xyz_PAM(icx,icy,sensor,PFAx,PFAy,ax,ay,bfx,bfy)
1272    
1273  c$$$      print*,icx,icy,sensor,PFAx,PFAy,ax,ay,bfx,bfy  c$$$      print*,icx,icy,sensor,PFAx,PFAy,ax,ay,bfx,bfy
# Line 1277  c         zv(ip) = z_mech_sensor(nplanes Line 1396  c         zv(ip) = z_mech_sensor(nplanes
1396    
1397        endif        endif
1398    
1399        if(DEBUG)then        if(DEBUG.EQ.1)then
1400  c         print*,'----------------------------- track coord'  c         print*,'----------------------------- track coord'
1401  22222    format(i2,' * ',3f10.4,' --- ',4f10.4,' --- ',2f4.0,2f10.5)  22222    format(i2,' * ',3f10.4,' --- ',4f10.4,' --- ',2f4.0,2f10.5)
1402           write(*,22222)ip,zm(ip),xm(ip),ym(ip)           write(*,22222)ip,zm(ip),xm(ip),ym(ip)
# Line 1728  c      include 'level1.f' Line 1847  c      include 'level1.f'
1847        integer iflag        integer iflag
1848    
1849        integer badseed,badclx,badcly        integer badseed,badclx,badcly
1850        
1851          if(DEBUG.EQ.1)print*,'cl_to_couples:'
1852    
1853  *     init variables  *     init variables
1854        ncp_tot=0        ncp_tot=0
# Line 1760  c      include 'level1.f' Line 1881  c      include 'level1.f'
1881           if( ncl_view(iv).gt. nclusterlimit)then           if( ncl_view(iv).gt. nclusterlimit)then
1882  c            mask_view(iv) = 1  c            mask_view(iv) = 1
1883              mask_view(iv) = mask_view(iv) + 2**0              mask_view(iv) = mask_view(iv) + 2**0
1884              if(DEBUG)print*,' * WARNING * cl_to_couple: n.clusters > '              if(DEBUG.EQ.1)
1885       $           ,nclusterlimit,' on view ', iv,' --> masked!'       $        print*,' * WARNING * cl_to_couple: n.clusters > '
1886         $        ,nclusterlimit,' on view ', iv,' --> masked!'
1887           endif           endif
1888        enddo        enddo
1889    
# Line 1899  c                  cut = chcut * sch(npl Line 2021  c                  cut = chcut * sch(npl
2021                 endif                 endif
2022    
2023                 if(ncp_plane(nplx).gt.ncouplemax)then                 if(ncp_plane(nplx).gt.ncouplemax)then
2024                    if(verbose)print*,                    if(verbose.eq.1)print*,
2025       $                 '** warning ** number of identified '//       $                 '** warning ** number of identified '//
2026       $                 'couples on plane ',nplx,       $                 'couples on plane ',nplx,
2027       $                 'exceeds vector dimention '       $                 'exceeds vector dimention '
# Line 1937  c                  mask_view(nviewy(nply Line 2059  c                  mask_view(nviewy(nply
2059        enddo        enddo
2060                
2061                
2062        if(DEBUG)then        if(DEBUG.EQ.1)then
2063           print*,'clusters  ',nclstr1           print*,'clusters  ',nclstr1
2064           print*,'good    ',(cl_good(i),i=1,nclstr1)           print*,'good    ',(cl_good(i),i=1,nclstr1)
2065           print*,'singles ',(cl_single(i),i=1,nclstr1)           print*,'singlets',(cl_single(i),i=1,nclstr1)
2066           print*,'couples per plane: ',(ncp_plane(ip),ip=1,nplanes)           print*,'couples per plane: ',(ncp_plane(ip),ip=1,nplanes)
2067        endif        endif
2068                
# Line 2000  c      double precision xm3,ym3,zm3 Line 2122  c      double precision xm3,ym3,zm3
2122        real xc,zc,radius        real xc,zc,radius
2123  *     -----------------------------  *     -----------------------------
2124    
2125          if(DEBUG.EQ.1)print*,'cp_to_doubtrip:'
2126    
2127  *     --------------------------------------------  *     --------------------------------------------
2128  *     put a limit to the maximum number of couples  *     put a limit to the maximum number of couples
# Line 2037  c     print*,'***',is1,xm1,ym1,zm1 Line 2160  c     print*,'***',is1,xm1,ym1,zm1
2160                 do ip2=(ip1+1),nplanes !loop on planes - COPPIA 2                 do ip2=(ip1+1),nplanes !loop on planes - COPPIA 2
2161                    if(  mask_view(nviewx(ip2)).ne.0 .or.                    if(  mask_view(nviewx(ip2)).ne.0 .or.
2162       $                 mask_view(nviewy(ip2)).ne.0 )goto 20 !skip plane       $                 mask_view(nviewy(ip2)).ne.0 )goto 20 !skip plane
2163                    do is2=1,2    !loop on sensors -ndblt COPPIA 2                    do is2=1,2    !loop on sensors -ndblt COPPIA 2                    
                       
2164                       do icp2=1,ncp_plane(ip2) !loop on COPPIA 2                       do icp2=1,ncp_plane(ip2) !loop on COPPIA 2
2165                          icx2=clx(ip2,icp2)                          icx2=clx(ip2,icp2)
2166                          icy2=cly(ip2,icp2)                          icy2=cly(ip2,icp2)
# Line 2057  c     $                       (icx2,icy2 Line 2179  c     $                       (icx2,icy2
2179  *     (2 couples needed)  *     (2 couples needed)
2180  *     - - - - - - - - - - - - - - - - - - - - - - - - - - - -  *     - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2181                          if(ndblt.eq.ndblt_max)then                          if(ndblt.eq.ndblt_max)then
2182                             if(verbose)print*,                             if(verbose.eq.1)print*,
2183       $                          '** warning ** number of identified '//       $                          '** warning ** number of identified '//
2184       $                          'doublets exceeds vector dimention '       $                          'doublets exceeds vector dimention '
2185       $                          ,'( ',ndblt_max,' )'       $                          ,'( ',ndblt_max,' )'
# Line 2121  c     $                               (i Line 2243  c     $                               (i
2243                                   ym3=yPAM                                   ym3=yPAM
2244                                   zm3=zPAM                                   zm3=zPAM
2245  *     find the circle passing through the three points  *     find the circle passing through the three points
2246    c$$$                                 call tricircle(3,xp,zp,angp,resp,chi
2247    c$$$     $                                ,xc,zc,radius,iflag)
2248                                     iflag = DEBUG
2249                                   call tricircle(3,xp,zp,angp,resp,chi                                   call tricircle(3,xp,zp,angp,resp,chi
2250       $                                ,xc,zc,radius,iflag)       $                                ,xc,zc,radius,iflag)
2251  c     print*,xc,zc,radius  c     print*,xc,zc,radius
# Line 2137  c     $                                 Line 2262  c     $                                
2262  *     (3 couples needed)  *     (3 couples needed)
2263  *     - - - - - - - - - - - - - - - - - - - - - - - - - - - -  *     - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2264                                   if(ntrpt.eq.ntrpt_max)then                                   if(ntrpt.eq.ntrpt_max)then
2265                                      if(verbose)print*,                                      if(verbose.eq.1)print*,
2266       $                     '** warning ** number of identified '//       $                     '** warning ** number of identified '//
2267       $                     'triplets exceeds vector dimention '       $                     'triplets exceeds vector dimention '
2268       $                    ,'( ',ntrpt_max,' )'       $                    ,'( ',ntrpt_max,' )'
# Line 2199  c     print*,alfaxz1(ntrpt),alfaxz2(ntrp Line 2324  c     print*,alfaxz1(ntrpt),alfaxz2(ntrp
2324   10   continue   10   continue
2325        enddo                     !end loop on planes  - COPPIA 1        enddo                     !end loop on planes  - COPPIA 1
2326                
2327        if(DEBUG)then        if(DEBUG.EQ.1)then
2328           print*,'--- doublets ',ndblt           print*,'--- doublets ',ndblt
2329           print*,'--- triplets ',ntrpt           print*,'--- triplets ',ntrpt
2330        endif        endif
# Line 2246  c      include 'momanhough_init.f' Line 2371  c      include 'momanhough_init.f'
2371        integer cp_useds1(ncouplemaxtot) ! sensor 1        integer cp_useds1(ncouplemaxtot) ! sensor 1
2372        integer cp_useds2(ncouplemaxtot) ! sensor 2        integer cp_useds2(ncouplemaxtot) ! sensor 2
2373    
2374          if(DEBUG.EQ.1)print*,'doub_to_YZcloud:'
2375    
2376  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2377  *     classification of DOUBLETS  *     classification of DOUBLETS
# Line 2372  c         if(ncpused.lt.ncpyz_min)goto 2 Line 2498  c         if(ncpused.lt.ncpyz_min)goto 2
2498  *     >>> NEW CLOUD <<<  *     >>> NEW CLOUD <<<
2499    
2500           if(nclouds_yz.ge.ncloyz_max)then           if(nclouds_yz.ge.ncloyz_max)then
2501              if(verbose)print*,              if(verbose.eq.1)print*,
2502       $           '** warning ** number of identified '//       $           '** warning ** number of identified '//
2503       $           'YZ clouds exceeds vector dimention '       $           'YZ clouds exceeds vector dimention '
2504       $           ,'( ',ncloyz_max,' )'       $           ,'( ',ncloyz_max,' )'
# Line 2400  c     ptcloud_yz_nt(nclouds_yz)=npt Line 2526  c     ptcloud_yz_nt(nclouds_yz)=npt
2526  c     print*,'>> ',ipt,db_all(ipt)  c     print*,'>> ',ipt,db_all(ipt)
2527           enddo             enddo  
2528           npt_tot=npt_tot+npt           npt_tot=npt_tot+npt
2529           if(DEBUG)then           if(DEBUG.EQ.1)then
2530              print*,'-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~'              print*,'-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~'
2531              print*,'>>>> cloud ',nclouds_yz,' --- ',npt,' points'              print*,'>>>> cloud ',nclouds_yz,' --- ',npt,' points'
2532              print*,'- alfayz1 ',alfayz1_av(nclouds_yz)              print*,'- alfayz1  ',alfayz1_av(nclouds_yz)
2533              print*,'- alfayz2 ',alfayz2_av(nclouds_yz)              print*,'- alfayz2  ',alfayz2_av(nclouds_yz)
2534              print*,'cp_useds1 ',(cp_useds1(icp),icp=1,ncp_tot)              print*,'cp_useds1  ',(cp_useds1(icp),icp=1,ncp_tot)
2535              print*,'cp_useds2 ',(cp_useds2(icp),icp=1,ncp_tot)              print*,'cp_useds2  ',(cp_useds2(icp),icp=1,ncp_tot)
2536              print*,'hit_plane ',(hit_plane(ip),ip=1,nplanes)              print*,'cpcloud_yz '
2537         $           ,(cpcloud_yz(nclouds_yz,icp),icp=1,ncp_tot)
2538                print*,'hit_plane  ',(hit_plane(ip),ip=1,nplanes)
2539  c$$$            print*,'nt-uple: ptcloud_yz(',nclouds_yz,') = '  c$$$            print*,'nt-uple: ptcloud_yz(',nclouds_yz,') = '
2540  c$$$     $           ,ptcloud_yz(nclouds_yz)  c$$$     $           ,ptcloud_yz(nclouds_yz)
2541  c$$$            print*,'nt-uple: db_cloud(...) = '  c$$$            print*,'nt-uple: db_cloud(...) = '
# Line 2425  c$$$     $           ,(db_cloud(iii),iii Line 2553  c$$$     $           ,(db_cloud(iii),iii
2553          goto 90                          goto 90                
2554        endif                            endif                    
2555                
2556        if(DEBUG)then        if(DEBUG.EQ.1)then
2557           print*,'---------------------- '           print*,'---------------------- '
2558           print*,'Y-Z total clouds ',nclouds_yz           print*,'Y-Z total clouds ',nclouds_yz
2559           print*,' '           print*,' '
# Line 2474  c      include 'momanhough_init.f' Line 2602  c      include 'momanhough_init.f'
2602        integer cp_useds1(ncouplemaxtot) ! sensor 1        integer cp_useds1(ncouplemaxtot) ! sensor 1
2603        integer cp_useds2(ncouplemaxtot) ! sensor 2        integer cp_useds2(ncouplemaxtot) ! sensor 2
2604    
2605          if(DEBUG.EQ.1)print*,'trip_to_XZcloud:'
2606    
2607  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2608  *     classification of TRIPLETS  *     classification of TRIPLETS
2609  *     according to distance in parameter space  *     according to distance in parameter space
# Line 2531  c         tr_temp(1)=itr1 Line 2661  c         tr_temp(1)=itr1
2661       $              +((alfaxz2(itrref)-alfaxz2(itr2))/Dalfaxz2)**2                     $              +((alfaxz2(itrref)-alfaxz2(itr2))/Dalfaxz2)**2              
2662                 distance = sqrt(distance)                 distance = sqrt(distance)
2663                                
2664                 if(distance.lt.cutdistxz)then  *     ------------------------------------------------------------------------
2665    *     FORCE INCLUSION OF TRIPLETS COMPOSED BY SAME COUPLES, IGNORING THE IMAGE
2666    *     ------------------------------------------------------------------------
2667    *     (added in august 2007)
2668                   istrimage=0
2669                   if(
2670         $              abs(cpxz1(itrref)).eq.abs(cpxz1(itr2)).and.
2671         $              abs(cpxz2(itrref)).eq.abs(cpxz2(itr2)).and.
2672         $              abs(cpxz3(itrref)).eq.abs(cpxz3(itr2)).and.
2673         $              .true.)istrimage=1
2674    
2675                   if(distance.lt.cutdistxz.or.istrimage.eq.1)then
2676  c     print*,idb1,idb2,distance,' cloud ',nclouds_yz  c     print*,idb1,idb2,distance,' cloud ',nclouds_yz
2677                    if(cpxz1(itr2).gt.0)cp_useds2(cpxz1(itr2))=1                    if(cpxz1(itr2).gt.0)cp_useds2(cpxz1(itr2))=1
2678                    if(cpxz1(itr2).lt.0)cp_useds1(-cpxz1(itr2))=1                    if(cpxz1(itr2).lt.0)cp_useds1(-cpxz1(itr2))=1
# Line 2595  c         if(ncpused.lt.ncpxz_min)goto 2 Line 2736  c         if(ncpused.lt.ncpxz_min)goto 2
2736  *     ~~~~~~~~~~~~~~~~~  *     ~~~~~~~~~~~~~~~~~
2737  *     >>> NEW CLOUD <<<  *     >>> NEW CLOUD <<<
2738           if(nclouds_xz.ge.ncloxz_max)then           if(nclouds_xz.ge.ncloxz_max)then
2739              if(verbose)print*,              if(verbose.eq.1)print*,
2740       $           '** warning ** number of identified '//       $           '** warning ** number of identified '//
2741       $           'XZ clouds exceeds vector dimention '       $           'XZ clouds exceeds vector dimention '
2742       $           ,'( ',ncloxz_max,' )'       $           ,'( ',ncloxz_max,' )'
# Line 2622  c               mask_view(iv) = 6 Line 2763  c               mask_view(iv) = 6
2763           enddo           enddo
2764           npt_tot=npt_tot+npt           npt_tot=npt_tot+npt
2765                    
2766           if(DEBUG)then           if(DEBUG.EQ.1)then
2767              print*,'-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~'              print*,'-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~'
2768              print*,'>>>> cloud ',nclouds_xz,' --- ',npt,' points'                            print*,'>>>> cloud ',nclouds_xz,' --- ',npt,' points'              
2769              print*,'- alfaxz1 ',alfaxz1_av(nclouds_xz)              print*,'- alfaxz1  ',alfaxz1_av(nclouds_xz)
2770              print*,'- alfaxz2 ',alfaxz2_av(nclouds_xz)              print*,'- alfaxz2  ',alfaxz2_av(nclouds_xz)
2771              print*,'- alfaxz3 ',alfaxz3_av(nclouds_xz)              print*,'- alfaxz3  ',alfaxz3_av(nclouds_xz)
2772              print*,'cp_useds1 ',(cp_useds1(icp),icp=1,ncp_tot)              print*,'cp_useds1  ',(cp_useds1(icp),icp=1,ncp_tot)
2773              print*,'cp_useds2 ',(cp_useds2(icp),icp=1,ncp_tot)              print*,'cp_useds2  ',(cp_useds2(icp),icp=1,ncp_tot)
2774                print*,'cpcloud_xz '
2775         $           ,(cpcloud_xz(nclouds_xz,icp),icp=1,ncp_tot)
2776              print*,'hit_plane ',(hit_plane(ip),ip=1,nplanes)              print*,'hit_plane ',(hit_plane(ip),ip=1,nplanes)
2777  c$$$            print*,'nt-uple: ptcloud_xz(',nclouds_xz,') = '  c$$$            print*,'nt-uple: ptcloud_xz(',nclouds_xz,') = '
2778  c$$$     $           ,ptcloud_xz(nclouds_xz)  c$$$     $           ,ptcloud_xz(nclouds_xz)
# Line 2647  c$$$     $           ,(tr_cloud(iii),iii Line 2790  c$$$     $           ,(tr_cloud(iii),iii
2790           goto 91                           goto 91                
2791         endif                             endif                    
2792                
2793        if(DEBUG)then        if(DEBUG.EQ.1)then
2794           print*,'---------------------- '           print*,'---------------------- '
2795           print*,'X-Z total clouds ',nclouds_xz           print*,'X-Z total clouds ',nclouds_xz
2796           print*,' '           print*,' '
# Line 2699  c$$$     $           ,(tr_cloud(iii),iii Line 2842  c$$$     $           ,(tr_cloud(iii),iii
2842  *     -----------------------------------------------------------  *     -----------------------------------------------------------
2843  *     variables for track fitting  *     variables for track fitting
2844        double precision AL_INI(5)        double precision AL_INI(5)
 c      double precision tath  
2845  *     -----------------------------------------------------------  *     -----------------------------------------------------------
 c      real fitz(nplanes)        !z coordinates of the planes in cm  
2846    
2847          if(DEBUG.EQ.1)print*,'clouds_to_ctrack:'
2848    
2849    
2850        ntracks=0                 !counter of track candidates        ntracks=0                 !counter of track candidates
# Line 2724  c      real fitz(nplanes)        !z coor Line 2866  c      real fitz(nplanes)        !z coor
2866                 enddo                 enddo
2867              enddo              enddo
2868              ncp_ok=0              ncp_ok=0
2869              do icp=1,ncp_tot    !loop on couples              do icp=1,ncp_tot    !loop over couples
2870  *     get info on  *     get info on
2871                 cpintersec(icp)=min(                 cpintersec(icp)=min(
2872       $              cpcloud_yz(iyz,icp),       $              cpcloud_yz(iyz,icp),
# Line 2733  c      real fitz(nplanes)        !z coor Line 2875  c      real fitz(nplanes)        !z coor
2875       $    (cpcloud_yz(iyz,icp).eq.1.and.cpcloud_xz(ixz,icp).eq.2).or.       $    (cpcloud_yz(iyz,icp).eq.1.and.cpcloud_xz(ixz,icp).eq.2).or.
2876       $    (cpcloud_yz(iyz,icp).eq.2.and.cpcloud_xz(ixz,icp).eq.1).or.       $    (cpcloud_yz(iyz,icp).eq.2.and.cpcloud_xz(ixz,icp).eq.1).or.
2877       $              .false.)cpintersec(icp)=0       $              .false.)cpintersec(icp)=0
2878    *     cpintersec is >0 if yz and xz clouds contain the same image of couple icp
2879                 if(cpintersec(icp).ne.0)then                 if(cpintersec(icp).ne.0)then
2880                    ncp_ok=ncp_ok+1                      ncp_ok=ncp_ok+1  
2881                                        
# Line 2765  c      real fitz(nplanes)        !z coor Line 2908  c      real fitz(nplanes)        !z coor
2908                 nplused=nplused+ hit_plane(ip)                 nplused=nplused+ hit_plane(ip)
2909              enddo              enddo
2910                            
 c            if(nplused.lt.nplxz_min)goto 888 !next doublet  
             if(nplused.lt.nplyz_min)goto 888 !next doublet  
             if(ncp_ok.lt.ncpok)goto 888 !next cloud  
2911                            
2912              if(DEBUG)then              if(DEBUG.EQ.1)then
2913                 print*,'Combination ',iyz,ixz                 print*,'Combination ',iyz,ixz
2914       $              ,' db ',ptcloud_yz(iyz)       $              ,' db ',ptcloud_yz(iyz)
2915       $              ,' tr ',ptcloud_xz(ixz)       $              ,' tr ',ptcloud_xz(ixz)
2916       $              ,'  -----> # matching couples ',ncp_ok       $              ,'  -----> # matching couples ',ncp_ok
2917              endif              endif
2918    
2919    c            if(nplused.lt.nplxz_min)goto 888 !next combination
2920                if(nplused.lt.nplyz_min)goto 888 !next combination
2921                if(ncp_ok.lt.ncpok)goto 888 !next combination
2922    
2923  c$$$  print*,'~~~~~~~~~~~~~~~~~~~~~~~~~'  c$$$  print*,'~~~~~~~~~~~~~~~~~~~~~~~~~'
2924  c$$$  print*,'Configurazione cluster XZ'  c$$$  print*,'Configurazione cluster XZ'
2925  c$$$  print*,'1 -- ',(clx(1,i),i=1,ncp_plane(1))  c$$$  print*,'1 -- ',(clx(1,i),i=1,ncp_plane(1))
# Line 2820  c$$$            AL_INI(5) = (1.e2*alfaxz Line 2965  c$$$            AL_INI(5) = (1.e2*alfaxz
2965  c$$$              c$$$            
2966  c$$$            if(AL_INI(5).gt.defmax)goto 888 !next cloud  c$$$            if(AL_INI(5).gt.defmax)goto 888 !next cloud
2967                                                    
2968              if(DEBUG)then              if(DEBUG.EQ.1)then
2969                   print*,'track candidate', ntracks+1
2970                 print*,'1 >>> ',(cp_match(6,i),i=1,ncp_match(6))                 print*,'1 >>> ',(cp_match(6,i),i=1,ncp_match(6))
2971                 print*,'2 >>> ',(cp_match(5,i),i=1,ncp_match(5))                 print*,'2 >>> ',(cp_match(5,i),i=1,ncp_match(5))
2972                 print*,'3 >>> ',(cp_match(4,i),i=1,ncp_match(4))                 print*,'3 >>> ',(cp_match(4,i),i=1,ncp_match(4))
# Line 2853  c$$$            if(AL_INI(5).gt.defmax)g Line 2999  c$$$            if(AL_INI(5).gt.defmax)g
2999                                hit_plane(6)=icp6                                hit_plane(6)=icp6
3000                                if(ncp_match(6).eq.0)hit_plane(6)=0 !-icp6                                if(ncp_match(6).eq.0)hit_plane(6)=0 !-icp6
3001                                                                
3002                                  *                             ---------------------------------------
3003    *                             check if this group of couples has been
3004    *                             already fitted    
3005    *                             ---------------------------------------
3006                                  do ica=1,ntracks
3007                                     isthesame=1
3008                                     do ip=1,NPLANES
3009                                        if(hit_plane(ip).ne.0)then
3010                                           if(  CP_STORE(nplanes-ip+1,ica)
3011         $                                      .ne.
3012         $                                      cp_match(ip,hit_plane(ip)) )
3013         $                                      isthesame=0
3014                                        else
3015                                           if(  CP_STORE(nplanes-ip+1,ica)
3016         $                                      .ne.
3017         $                                      0 )
3018         $                                      isthesame=0
3019                                        endif
3020                                     enddo
3021                                     if(isthesame.eq.1)then
3022                                        if(DEBUG.eq.1)
3023         $                                   print*,'(already fitted)'
3024                                        goto 666 !jump to next combination
3025                                     endif
3026                                  enddo
3027    
3028                                call track_init !init TRACK common                                call track_init !init TRACK common
3029    
3030                                do ip=1,nplanes !loop on planes                                do ip=1,nplanes !loop on planes (bottom to top)
3031                                   if(hit_plane(ip).ne.0)then                                   if(hit_plane(ip).ne.0)then
3032                                      id=cp_match(ip,hit_plane(ip))                                      id=cp_match(ip,hit_plane(ip))
3033                                      is=is_cp(id)                                      is=is_cp(id)
# Line 2900  c$$$                              enddo Line 3071  c$$$                              enddo
3071                                ifail=0 !error flag in chi^2 computation                                ifail=0 !error flag in chi^2 computation
3072                                jstep=0 !number of  minimization steps                                jstep=0 !number of  minimization steps
3073                                iprint=0                                iprint=0
3074  c                              if(DEBUG)iprint=1  c                              if(DEBUG.EQ.1)iprint=1
3075                                if(DEBUG)iprint=2                                if(DEBUG.EQ.1)iprint=2
3076                                call mini2(jstep,ifail,iprint)                                call mini2(jstep,ifail,iprint)
3077                                if(ifail.ne.0) then                                if(ifail.ne.0) then
3078                                   if(DEBUG)then                                   if(DEBUG.EQ.1)then
3079                                      print *,                                      print *,
3080       $                              '*** MINIMIZATION FAILURE *** '       $                              '*** MINIMIZATION FAILURE *** '
3081       $                              //'(clouds_to_ctrack)'       $                              //'(clouds_to_ctrack)'
# Line 2929  c                                 chi2=- Line 3100  c                                 chi2=-
3100  *     --------------------------  *     --------------------------
3101                                if(ntracks.eq.NTRACKSMAX)then                                if(ntracks.eq.NTRACKSMAX)then
3102                                                                    
3103                                   if(verbose)print*,                                   if(verbose.eq.1)print*,
3104       $                 '** warning ** number of candidate tracks '//       $                 '** warning ** number of candidate tracks '//
3105       $                 ' exceeds vector dimension '       $                 ' exceeds vector dimension '
3106       $                ,'( ',NTRACKSMAX,' )'       $                ,'( ',NTRACKSMAX,' )'
# Line 2945  c                                    mas Line 3116  c                                    mas
3116                                                                
3117                                ntracks = ntracks + 1                                ntracks = ntracks + 1
3118                                                                
3119                                do ip=1,nplanes                                do ip=1,nplanes !top to bottom
3120    
3121                                   XV_STORE(ip,ntracks)=sngl(xv(ip))                                   XV_STORE(ip,ntracks)=sngl(xv(ip))
3122                                   YV_STORE(ip,ntracks)=sngl(yv(ip))                                   YV_STORE(ip,ntracks)=sngl(yv(ip))
# Line 2962  c                                    mas Line 3133  c                                    mas
3133                                   AYV_STORE(ip,ntracks)=sngl(ayv(ip))                                   AYV_STORE(ip,ntracks)=sngl(ayv(ip))
3134                                   XGOOD_STORE(ip,ntracks)=sngl(xgood(ip))                                   XGOOD_STORE(ip,ntracks)=sngl(xgood(ip))
3135                                   YGOOD_STORE(ip,ntracks)=sngl(ygood(ip))                                   YGOOD_STORE(ip,ntracks)=sngl(ygood(ip))
3136    *                                NB! hit_plane is defined from bottom to top
3137                                   if(hit_plane(ip).ne.0)then                                   if(hit_plane(ip).ne.0)then
3138                                      CP_STORE(nplanes-ip+1,ntracks)=                                      CP_STORE(nplanes-ip+1,ntracks)=
3139       $                                   cp_match(ip,hit_plane(ip))       $                                   cp_match(ip,hit_plane(ip))
# Line 2977  c                                    mas Line 3149  c                                    mas
3149                                      SENSOR_STORE(nplanes-ip+1,ntracks)=0                                      SENSOR_STORE(nplanes-ip+1,ntracks)=0
3150                                      LADDER_STORE(nplanes-ip+1,ntracks)=0                                      LADDER_STORE(nplanes-ip+1,ntracks)=0
3151                                   endif                                   endif
3152                                   BX_STORE(nplanes-ip+1,ntracks)=0!I dont need it now                                   BX_STORE(ip,ntracks)=0!I dont need it now
3153                                   BY_STORE(nplanes-ip+1,ntracks)=0!I dont need it now                                   BY_STORE(ip,ntracks)=0!I dont need it now
3154                                   CLS_STORE(nplanes-ip+1,ntracks)=0                                   CLS_STORE(ip,ntracks)=0
3155                                   do i=1,5                                   do i=1,5
3156                                      AL_STORE(i,ntracks)=sngl(AL(i))                                      AL_STORE(i,ntracks)=sngl(AL(i))
3157                                   enddo                                   enddo
# Line 3008  c                                    mas Line 3180  c                                    mas
3180           return           return
3181        endif        endif
3182                
3183  c$$$      if(DEBUG)then  c$$$      if(DEBUG.EQ.1)then
3184  c$$$         print*,'****** TRACK CANDIDATES ***********'  c$$$         print*,'****** TRACK CANDIDATES ***********'
3185  c$$$         print*,'#         R. chi2        RIG'  c$$$         print*,'#         R. chi2        RIG'
3186  c$$$         do i=1,ntracks  c$$$         do i=1,ntracks
# Line 3017  c$$$     $           ,1./abs(AL_STORE(5, Line 3189  c$$$     $           ,1./abs(AL_STORE(5,
3189  c$$$         enddo  c$$$         enddo
3190  c$$$         print*,'***********************************'  c$$$         print*,'***********************************'
3191  c$$$      endif  c$$$      endif
3192        if(DEBUG)then        if(DEBUG.EQ.1)then
3193          print*,'****** TRACK CANDIDATES *****************'          print*,'****** TRACK CANDIDATES *****************'
3194          print*,'#         R. chi2        RIG         ndof'          print*,'#         R. chi2        RIG         ndof'
3195          do i=1,ntracks          do i=1,ntracks
# Line 3069  c$$$      endif Line 3241  c$$$      endif
3241        real xyzp(3),bxyz(3)        real xyzp(3),bxyz(3)
3242        equivalence (xp,xyzp(1)),(yp,xyzp(2)),(zp,xyzp(3))        equivalence (xp,xyzp(1)),(yp,xyzp(2)),(zp,xyzp(3))
3243    
3244          if(DEBUG.EQ.1)print*,'refine_track:'
3245  *     =================================================  *     =================================================
3246  *     new estimate of positions using ETA algorithm  *     new estimate of positions using ETA algorithm
3247  *                          and  *                          and
# Line 3150  c     $           AYV_STORE(nplanes-ip+1 Line 3323  c     $           AYV_STORE(nplanes-ip+1
3323              LADDER_STORE(nplanes-ip+1,IBEST)=nldt              LADDER_STORE(nplanes-ip+1,IBEST)=nldt
3324  *     --------------------------------------------------------------  *     --------------------------------------------------------------
3325    
3326              if(DEBUG)then              if(DEBUG.EQ.1)then
3327                 print*,                 print*,
3328       $              '------ Plane ',ip,' intersected on LADDER ',nldt       $              '------ Plane ',ip,' intersected on LADDER ',nldt
3329       $              ,' SENSOR ',ist       $              ,' SENSOR ',ist
# Line 3161  c     $           AYV_STORE(nplanes-ip+1 Line 3334  c     $           AYV_STORE(nplanes-ip+1
3334  *     ===========================================  *     ===========================================
3335  *     STEP 1 >>>>>>>  try to include a new couple  *     STEP 1 >>>>>>>  try to include a new couple
3336  *     ===========================================  *     ===========================================
3337  c            if(DEBUG)print*,'>>>> try to include a new couple'  c            if(DEBUG.EQ.1)print*,'>>>> try to include a new couple'
3338              distmin=1000000.              distmin=1000000.
3339              xmm = 0.              xmm = 0.
3340              ymm = 0.              ymm = 0.
# Line 3193  c     $              cl_used(icy).eq.1.o Line 3366  c     $              cl_used(icy).eq.1.o
3366                 distance = distance_to(XP,YP)                 distance = distance_to(XP,YP)
3367  c               distance = distance / RCHI2_STORE(ibest)!<<< MS !QUIQUI  c               distance = distance / RCHI2_STORE(ibest)!<<< MS !QUIQUI
3368                 id=id_cp(ip,icp,ist)                 id=id_cp(ip,icp,ist)
3369                 if(DEBUG)print*,'( couple ',id                 if(DEBUG.EQ.1)print*,'( couple ',id
3370       $              ,' ) distance ',distance       $              ,' ) distance ',distance
3371                 if(distance.lt.distmin)then                 if(distance.lt.distmin)then
3372                    xmm = xPAM                    xmm = xPAM
# Line 3225  c            if(distmin.le.clinc)then   Line 3398  c            if(distmin.le.clinc)then  
3398                 dedxtrk_y(nplanes-ip+1) = dedxmmy !<<<                 dedxtrk_y(nplanes-ip+1) = dedxmmy !<<<
3399  *              -----------------------------------  *              -----------------------------------
3400                 CP_STORE(nplanes-ip+1,ibest)=idm                       CP_STORE(nplanes-ip+1,ibest)=idm      
3401                 if(DEBUG)print*,'%%%% included couple ',idm                 if(DEBUG.EQ.1)print*,'%%%% included couple ',idm
3402       $              ,' (dist.= ',distmin,', cut ',clinc,' )'       $              ,' (dist.= ',distmin,', cut ',clinc,' )'
3403                 goto 133         !next plane                 goto 133         !next plane
3404              endif              endif
# Line 3233  c            if(distmin.le.clinc)then   Line 3406  c            if(distmin.le.clinc)then  
3406  *     STEP 2 >>>>>>>  try to include a single cluster  *     STEP 2 >>>>>>>  try to include a single cluster
3407  *                     either from a couple or single  *                     either from a couple or single
3408  *     ================================================  *     ================================================
3409  c            if(DEBUG)print*,'>>>> try to include a new cluster'  c            if(DEBUG.EQ.1)print*,'>>>> try to include a new cluster'
3410              distmin=1000000.              distmin=1000000.
3411              xmm_A = 0.          !---------------------------              xmm_A = 0.          !---------------------------
3412              ymm_A = 0.          ! init variables that              ymm_A = 0.          ! init variables that
# Line 3270  c     $              AXV_STORE(nplanes-i Line 3443  c     $              AXV_STORE(nplanes-i
3443       $              )                     $              )              
3444                 distance = distance_to(XP,YP)                 distance = distance_to(XP,YP)
3445  c               distance = distance / RCHI2_STORE(ibest)!<<< MS !QUIQUI  c               distance = distance / RCHI2_STORE(ibest)!<<< MS !QUIQUI
3446                 if(DEBUG)print*,'( cl-X ',icx                 if(DEBUG.EQ.1)print*,'( cl-X ',icx
3447       $              ,' in cp ',id,' ) distance ',distance       $              ,' in cp ',id,' ) distance ',distance
3448                 if(distance.lt.distmin)then                 if(distance.lt.distmin)then
3449                    xmm_A = xPAM_A                    xmm_A = xPAM_A
# Line 3303  c     $              0.,AYV_STORE(nplane Line 3476  c     $              0.,AYV_STORE(nplane
3476       $              )       $              )
3477                 distance = distance_to(XP,YP)                 distance = distance_to(XP,YP)
3478  c               distance = distance / RCHI2_STORE(ibest)!<<< MS !QUIQUI  c               distance = distance / RCHI2_STORE(ibest)!<<< MS !QUIQUI
3479                 if(DEBUG)print*,'( cl-Y ',icy                 if(DEBUG.EQ.1)print*,'( cl-Y ',icy
3480       $              ,' in cp ',id,' ) distance ',distance       $              ,' in cp ',id,' ) distance ',distance
3481                 if(distance.lt.distmin)then                 if(distance.lt.distmin)then
3482                    xmm_A = xPAM_A                    xmm_A = xPAM_A
# Line 3348  c               if(cl_used(icl).eq.1.or. Line 3521  c               if(cl_used(icl).eq.1.or.
3521    
3522                 distance = distance_to(XP,YP)                 distance = distance_to(XP,YP)
3523  c               distance = distance / RCHI2_STORE(ibest)!<<< MS !QUIQUI  c               distance = distance / RCHI2_STORE(ibest)!<<< MS !QUIQUI
3524                 if(DEBUG)print*,'( cl-s ',icl                 if(DEBUG.EQ.1)print*,'( cl-s ',icl
3525       $              ,' ) distance ',distance,'<',distmin,' ?'       $              ,' ) distance ',distance
3526                 if(distance.lt.distmin)then                 if(distance.lt.distmin)then
3527                    if(DEBUG)print*,'YES'  c                  if(DEBUG.EQ.1)print*,'YES'
3528                    xmm_A = xPAM_A                    xmm_A = xPAM_A
3529                    ymm_A = yPAM_A                    ymm_A = yPAM_A
3530                    zmm_A = zPAM_A                    zmm_A = zPAM_A
# Line 3397  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~ Line 3570  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~
3570                    if(mod(VIEW(iclm),2).eq.0)then                    if(mod(VIEW(iclm),2).eq.0)then
3571                       XGOOD(nplanes-ip+1)=1.                       XGOOD(nplanes-ip+1)=1.
3572                       resx(nplanes-ip+1)=rxmm                       resx(nplanes-ip+1)=rxmm
3573                       if(DEBUG)print*,'%%%% included X-cl ',iclm                       if(DEBUG.EQ.1)print*,'%%%% included X-cl ',iclm
3574       $                    ,'( chi^2, ',RCHI2_STORE(ibest)       $                    ,'( chi^2, ',RCHI2_STORE(ibest)
3575       $                    ,', dist.= ',distmin       $                    ,', dist.= ',distmin
3576       $                    ,', cut ',clinc,' )'       $                    ,', cut ',clinc,' )'
3577                    else                    else
3578                       YGOOD(nplanes-ip+1)=1.                       YGOOD(nplanes-ip+1)=1.
3579                       resy(nplanes-ip+1)=rymm                       resy(nplanes-ip+1)=rymm
3580                       if(DEBUG)print*,'%%%% included Y-cl ',iclm                       if(DEBUG.EQ.1)print*,'%%%% included Y-cl ',iclm
3581       $                    ,'( chi^2, ',RCHI2_STORE(ibest)       $                    ,'( chi^2, ',RCHI2_STORE(ibest)
3582       $                    ,', dist.= ', distmin       $                    ,', dist.= ', distmin
3583       $                    ,', cut ',clinc,' )'       $                    ,', cut ',clinc,' )'
# Line 3446  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~ Line 3619  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~
3619        include 'common_momanhough.f'        include 'common_momanhough.f'
3620        include 'level2.f'              include 'level2.f'      
3621    
3622          if(DEBUG.EQ.1)print*,'clean_XYclouds:'
3623    
3624        do ip=1,nplanes           !loop on planes        do ip=1,nplanes           !loop on planes
3625    
3626           id=CP_STORE(nplanes-ip+1,ibest)           id=CP_STORE(nplanes-ip+1,ibest)
# Line 3454  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~ Line 3629  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~
3629              if(id.ne.0)then              if(id.ne.0)then
3630                 iclx=clx(ip,icp_cp(id))                 iclx=clx(ip,icp_cp(id))
3631                 icly=cly(ip,icp_cp(id))                 icly=cly(ip,icp_cp(id))
3632                 cl_used(iclx)=ntrk  !tag used clusters  c$$$               cl_used(iclx)=ntrk  !tag used clusters
3633                 cl_used(icly)=ntrk  !tag used clusters  c$$$               cl_used(icly)=ntrk  !tag used clusters
3634              elseif(icl.ne.0)then              elseif(icl.ne.0)then
3635                 cl_used(icl)=ntrk   !tag used clusters  c$$$               cl_used(icl)=ntrk   !tag used clusters
3636              endif              endif
3637                            
3638  *     -----------------------------  *     -----------------------------
# Line 3476  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~ Line 3651  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~
3651       $              cly(ip,icp).eq.icl       $              cly(ip,icp).eq.icl
3652       $              )then       $              )then
3653                    id=id_cp(ip,icp,1)                    id=id_cp(ip,icp,1)
3654                    if(DEBUG)then                    if(DEBUG.EQ.1)then
3655                       print*,ip,' <<< cp ',id                       print*,ip,' <<< cp ',id
3656       $                    ,' ( cl-x '       $                    ,' ( cl-x '
3657       $                    ,clx(ip,icp)       $                    ,clx(ip,icp)
# Line 3736  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~ Line 3911  c     print*,'~~~~~~~~~~~~~~~~~~~~~~~~~~
3911           zv_nt(ip,ntr)    = sngl(zv(ip))           zv_nt(ip,ntr)    = sngl(zv(ip))
3912           axv_nt(ip,ntr)   = sngl(axv(ip))           axv_nt(ip,ntr)   = sngl(axv(ip))
3913           ayv_nt(ip,ntr)   = sngl(ayv(ip))             ayv_nt(ip,ntr)   = sngl(ayv(ip))  
3914  c     l'avevo dimenticato!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
3915           factor = sqrt(           factor = sqrt(
3916       $        tan( acos(-1.) * sngl(axv(ip)) /180. )**2 +       $        tan( acos(-1.) * sngl(axv(ip)) /180. )**2 +
3917       $        tan( acos(-1.) * sngl(ayv(ip)) /180. )**2 +       $        tan( acos(-1.) * sngl(ayv(ip)) /180. )**2 +
3918       $        1. )       $        1. )
3919  c     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
3920           dedx_x(ip,ntr)   = sngl(dedxtrk_x(ip)/factor)           dedx_x(ip,ntr)   = sngl(dedxtrk_x(ip)/factor)
3921           dedx_y(ip,ntr)   = sngl(dedxtrk_y(ip)/factor)             dedx_y(ip,ntr)   = sngl(dedxtrk_y(ip)/factor)  
3922        
# Line 3771  c         print*,'* ',ip,bfx,bfy,angx,an Line 3946  c         print*,'* ',ip,bfx,bfy,angx,an
3946  c           >>> is a couple  c           >>> is a couple
3947              cltrx(ip,ntr)   = clx(nplanes-ip+1,icp_cp(id))              cltrx(ip,ntr)   = clx(nplanes-ip+1,icp_cp(id))
3948              cltry(ip,ntr)   = cly(nplanes-ip+1,icp_cp(id))              cltry(ip,ntr)   = cly(nplanes-ip+1,icp_cp(id))
3949                
3950                cl_used(cltrx(ip,ntr)) = 1     !tag used clusters          
3951                cl_used(cltry(ip,ntr)) = 1     !tag used clusters          
3952    
3953  c$$$            nnnnx = npfastrips(clx(nplanes-ip+1,icp_cp(id)),PFA,angx)  c$$$            nnnnx = npfastrips(clx(nplanes-ip+1,icp_cp(id)),PFA,angx)
3954  c$$$            nnnny = npfastrips(cly(nplanes-ip+1,icp_cp(id)),PFA,angy)              c$$$            nnnny = npfastrips(cly(nplanes-ip+1,icp_cp(id)),PFA,angy)            
3955  c$$$            xbad(ip,ntr)= nbadstrips(nnnnx,clx(nplanes-ip+1,icp_cp(id)))  c$$$            xbad(ip,ntr)= nbadstrips(nnnnx,clx(nplanes-ip+1,icp_cp(id)))
# Line 3787  c$$$            ybad(ip,ntr)= nbadstrips Line 3965  c$$$            ybad(ip,ntr)= nbadstrips
3965    
3966           elseif(icl.ne.0)then           elseif(icl.ne.0)then
3967    
3968                cl_used(icl) = 1    !tag used clusters          
3969    
3970              if(mod(VIEW(icl),2).eq.0)then              if(mod(VIEW(icl),2).eq.0)then
3971                 cltrx(ip,ntr)=icl                 cltrx(ip,ntr)=icl
3972  c$$$               nnnnn = npfastrips(icl,PFA,angx)  c$$$               nnnnn = npfastrips(icl,PFA,angx)
# Line 3806  c$$$               ybad(ip,ntr) = nbadst Line 3986  c$$$               ybad(ip,ntr) = nbadst
3986    
3987        enddo        enddo
3988    
3989          if(DEBUG.eq.1)then
3990             print*,'> STORING TRACK ',ntr
3991             print*,'clusters: '
3992             do ip=1,6
3993                print*,'> ',ip,' -- ',cltrx(ip,ntr),cltry(ip,ntr)
3994             enddo
3995          endif
3996    
3997  c$$$      print*,(xgood(i),i=1,6)  c$$$      print*,(xgood(i),i=1,6)
3998  c$$$      print*,(ygood(i),i=1,6)  c$$$      print*,(ygood(i),i=1,6)
# Line 3840  c         if( mask_view(iv).ne.0 )good2( Line 4027  c         if( mask_view(iv).ne.0 )good2(
4027           good2(iv) = good2(iv) + mask_view(iv)*2**8           good2(iv) = good2(iv) + mask_view(iv)*2**8
4028        enddo        enddo
4029    
4030          if(DEBUG.eq.1)then
4031             print*,'> STORING SINGLETS '
4032          endif
4033    
4034        do icl=1,nclstr1        do icl=1,nclstr1
4035    
4036             ip=nplanes-npl(VIEW(icl))+1            
4037            
4038           if(cl_used(icl).eq.0)then !cluster not included in any track           if(cl_used(icl).eq.0)then !cluster not included in any track
             ip=nplanes-npl(VIEW(icl))+1              
4039              if(mod(VIEW(icl),2).eq.0)then !=== X views              if(mod(VIEW(icl),2).eq.0)then !=== X views
4040                 nclsx = nclsx + 1                 nclsx = nclsx + 1
4041                 planex(nclsx) = ip                 planex(nclsx) = ip
# Line 3882  c$$$               print*,'ys(2,nclsy)   Line 4075  c$$$               print*,'ys(2,nclsy)  
4075    
4076  ***** LO METTO QUI PERCHE` NON SO DOVE METTERLO  ***** LO METTO QUI PERCHE` NON SO DOVE METTERLO
4077           whichtrack(icl) = cl_used(icl)           whichtrack(icl) = cl_used(icl)
4078    *     --------------------------------------------------
4079    *     per non perdere la testa...
4080    *     whichtrack(icl) e` una variabile del common level1
4081    *     che serve solo per sapere quali cluster sono stati
4082    *     associati ad una traccia, e permettere di salvare
4083    *     solo questi nell'albero di uscita
4084    *     --------------------------------------------------
4085            
4086    
4087    c$$$         print*,' cl ',icl,' --> ',cl_used(icl)
4088    c$$$
4089    c$$$         if( cl_used(icl).ne.0 )then
4090    c$$$            if(
4091    c$$$     $           mod(VIEW(icl),2).eq.0.and.
4092    c$$$     $           cltrx(ip,whichtrack(icl)).ne.icl )
4093    c$$$     $           print*,'**WARNING** cltrx(',ip,',',whichtrack(icl)
4094    c$$$     $           ,')=',cltrx(ip,whichtrack(icl)),'.ne.',icl
4095    c$$$            if(
4096    c$$$     $           mod(VIEW(icl),2).eq.1.and.
4097    c$$$     $           cltry(ip,whichtrack(icl)).ne.icl )
4098    c$$$     $           print*,'**WARNING** cltry(',ip,',',whichtrack(icl)
4099    c$$$     $           ,')=',cltry(ip,whichtrack(icl)),'.ne.',icl
4100    c$$$         endif
4101            
4102    
4103        enddo        enddo
4104        end        end

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.30

  ViewVC Help
Powered by ViewVC 1.1.23