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

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

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

revision 1.1.1.1 by mocchiut, Fri May 19 13:15:56 2006 UTC revision 1.6 by mocchiut, Fri Jan 17 12:56:52 2014 UTC
# Line 51  c     integer nloops            !number Line 51  c     integer nloops            !number
51        integer ifail             !=-1 if singular matrix error, =0 if not singular        integer ifail             !=-1 if singular matrix error, =0 if not singular
52        integer jfail             !=0 if determinant can be evaluated, =-1 if determinat is probably too small, =+1 if too large        integer jfail             !=0 if determinant can be evaluated, =-1 if determinat is probably too small, =+1 if too large
53    
54        parameter (big=1.e4)      !just a number greater than C(npoints,3)        parameter (ibig=10000)      !just a number greater than C(npoints,3) !EM GCC4.7
55        double precision xxc(big),zzc(big),rrr(big) !centres and radii to be averaged        double precision xxc(ibig),zzc(ibig),rrr(ibig) !centres and radii to be averaged
56    
57        double precision tmp1,tmp2,tmp(npoints)    !temp variables        double precision tmp1,tmp2,tmp(npoints)    !temp variables
58    
59          logical DEBUG
60    
61        real pigr                 !3.1415...        real pigr                 !3.1415...
62        pigr=ACOS(-1.)        pigr=ACOS(-1.)
63    
64          
65          DEBUG = .false.
66          if(eflag.eq.1)DEBUG = .true.
67    
68        eflag = 0        eflag = 0
69    
70    
# Line 135  c--------------------------------------- Line 141  c---------------------------------------
141              jfail=0              jfail=0
142              call DFACT(3,a,3,ir,ifail,deta,jfail)              call DFACT(3,a,3,ir,ifail,deta,jfail)
143              if(ifail.eq.-1) then              if(ifail.eq.-1) then
144                print*,'tricircle: ERROR: singular matrix A:'                if(DEBUG)then
145                do i=1,3                   print*,'tricircle: ERROR: singular matrix A:'
146                  print*,(a(i,j),j=1,3)                   do i=1,3
147                enddo                      print*,(a(i,j),j=1,3)
148                     enddo
149                  endif
150                eflag=1                eflag=1
151              endif              endif
152              if(jfail.eq.-1) then              if(jfail.eq.-1) then
153                print*                if(DEBUG)then
154       $             ,'tricircle: ERROR: matrix A: determinant too small?'                   print*
155                do i=1,3       $           ,'tricircle: ERROR: matrix A: determinant too small?'
156                  print*,(d(i,j),j=1,3)                   do i=1,3
157                enddo                      print*,(d(i,j),j=1,3)
158                     enddo
159                  endif
160                eflag=1                eflag=1
161              elseif(jfail.eq.1) then              elseif(jfail.eq.1) then
162                print*                if(DEBUG)then
163                     print*
164       $             ,'tricircle: ERROR: matrix A: determinant too large?'       $             ,'tricircle: ERROR: matrix A: determinant too large?'
165                do i=1,3                   do i=1,3
166                  print*,(d(i,j),j=1,3)                      print*,(d(i,j),j=1,3)
167                enddo                   enddo
168                  endif
169                eflag=1                eflag=1
170              endif              endif
171                            
# Line 161  c--------------------------------------- Line 173  c---------------------------------------
173              jfail=0              jfail=0
174              call DFACT(3,d,3,ir,ifail,detd,jfail)              call DFACT(3,d,3,ir,ifail,detd,jfail)
175              if(ifail.eq.-1) then              if(ifail.eq.-1) then
176                print*,'tricircle: ERROR: singular matrix D:'                if(DEBUG)then
177                do i=1,3                   print*,'tricircle: ERROR: singular matrix D:'
178                  print*,(d(i,j),j=1,3)                   do i=1,3
179                enddo                      print*,(d(i,j),j=1,3)
180                eflag=1                   enddo
181              endif                endif
182              if(jfail.eq.-1) then                eflag=1
183                print*             endif
184       $             ,'tricircle: ERROR: matrix D: determinant too small?'             if(jfail.eq.-1) then
185                do i=1,3                if(DEBUG)then
186                  print*,(d(i,j),j=1,3)                   print*
187                enddo       $      ,'tricircle: ERROR: matrix D: determinant too small?'
188                     do i=1,3
189                        print*,(d(i,j),j=1,3)
190                     enddo
191                  endif
192                eflag=1                eflag=1
193              elseif(jfail.eq.1) then              elseif(jfail.eq.1) then
194                  if(DEBUG)then
195                print*                print*
196       $             ,'tricircle: ERROR: matrix D: determinant too large?'       $             ,'tricircle: ERROR: matrix D: determinant too large?'
197                do i=1,3                do i=1,3
198                  print*,(d(i,j),j=1,3)                  print*,(d(i,j),j=1,3)
199                enddo                enddo
200                  endif
201                eflag=1                eflag=1
202              endif              endif
203    
# Line 187  c--------------------------------------- Line 205  c---------------------------------------
205              jfail=0              jfail=0
206              call DFACT(3,e,3,ir,ifail,dete,jfail)              call DFACT(3,e,3,ir,ifail,dete,jfail)
207              if(ifail.eq.-1) then              if(ifail.eq.-1) then
208                  if(DEBUG)then
209                print*,'tricircle: ERROR: singular matrix E:'                print*,'tricircle: ERROR: singular matrix E:'
210                do i=1,3                do i=1,3
211                  print*,(e(i,j),j=1,3)                  print*,(e(i,j),j=1,3)
212                enddo                enddo
213                  endif
214                eflag=1                eflag=1
215              endif             endif
216              if(jfail.eq.-1) then              if(jfail.eq.-1) then
217                  if(DEBUG)then
218                print*                print*
219       $             ,'tricircle: ERROR: matrix E: determinant too small?'       $             ,'tricircle: ERROR: matrix E: determinant too small?'
220                do i=1,3                do i=1,3
221                  print*,(e(i,j),j=1,3)                  print*,(e(i,j),j=1,3)
222                enddo                enddo
223                  endif
224                eflag=1                eflag=1
225              elseif(jfail.eq.1) then              elseif(jfail.eq.1) then
226                  if(DEBUG)then
227                print*                print*
228       $             ,'tricircle: ERROR: matrix E: determinant too large?'       $             ,'tricircle: ERROR: matrix E: determinant too large?'
229                do i=1,3                do i=1,3
230                  print*,(e(i,j),j=1,3)                  print*,(e(i,j),j=1,3)
231                enddo                enddo
232                  endif
233                eflag=1                eflag=1
234              endif              endif
235    
# Line 214  c--------------------------------------- Line 238  c---------------------------------------
238              call DFACT(3,f,3,ir,ifail,detf,jfail)              call DFACT(3,f,3,ir,ifail,detf,jfail)
239  c     ifail=-1            !???  c     ifail=-1            !???
240              if(ifail.eq.-1) then              if(ifail.eq.-1) then
241                  if(DEBUG)then
242                print*,'tricircle: ERROR: singular matrix F:'                print*,'tricircle: ERROR: singular matrix F:'
243                do i=1,3                do i=1,3
244                  print*,(f(i,j),j=1,3)                  print*,(f(i,j),j=1,3)
245                enddo                enddo
246                  endif
247                eflag=1                eflag=1
248              endif              endif
249              if(jfail.eq.-1) then              if(jfail.eq.-1) then
250                  if(DEBUG)then
251                print*                print*
252       $             ,'tricircle: ERROR: matrix F: determinant too small?'       $             ,'tricircle: ERROR: matrix F: determinant too small?'
253                do i=1,3                do i=1,3
254                  print*,(f(i,j),j=1,3)                  print*,(f(i,j),j=1,3)
255                enddo                enddo
256                  endif
257                eflag=1                eflag=1
258              elseif(jfail.eq.1) then              elseif(jfail.eq.1) then
259                  if(DEBUG)then
260                print*                print*
261       $             ,'tricircle: ERROR: matrix F: determinant too large?'       $             ,'tricircle: ERROR: matrix F: determinant too large?'
262                do i=1,3                do i=1,3
263                  print*,(f(i,j),j=1,3)                  print*,(f(i,j),j=1,3)
264                enddo                enddo
265                  endif
266                eflag=1                eflag=1
267              endif              endif
268    
# Line 266  c--------------------------------------- Line 296  c---------------------------------------
296        zc=0.        zc=0.
297        radius=0.        radius=0.
298        do i=1,k        do i=1,k
299          xc=xc+xxc(i)          xc=xc+REAL(xxc(i)) !EM GCC4.7
300          zc=zc+zzc(i)          zc=zc+REAL(zzc(i)) !EM GCC4.7
301          radius=radius+rrr(i)          radius=radius+REAL(rrr(i)) !EM GCC4.7
302        enddo        enddo
303        xc=xc/k * scale           !back to micrometers        xc=xc/k * scale           !back to micrometers
304        zc=zc/k * scale        zc=zc/k * scale
# Line 305  c     print*,xc,zc,radius !??? Line 335  c     print*,xc,zc,radius !???
335          else          else
336            tmp(i)=-tmp1            tmp(i)=-tmp1
337          endif          endif
338          residual(i)=tmp2 - tmp(i)          residual(i)=REAL(tmp2 - tmp(i)) !EM GCC4.7
339          chi=chi + residual(i)**2.          chi=chi + residual(i)**2.
340  c     print*,dep(i)                 !???  c     print*,dep(i)                 !???
341  c     print*,indep(i)              !???  c     print*,indep(i)              !???
# Line 317  c     it computes the angle between the Line 347  c     it computes the angle between the
347  c     independent variable axis  c     independent variable axis
348  c------------------------------------------------------------------------  c------------------------------------------------------------------------
349        do i=1,npoints        do i=1,npoints
350          angle(i)=(zc-indep(i)) / tmp(i)          angle(i)=REAL((zc-indep(i)) / tmp(i)) !EM GCC4.7
351          angle(i)=ATAN(angle(i)) !-pi/2 <= angle <= pi/2          angle(i)=ATAN(angle(i)) !-pi/2 <= angle <= pi/2
352          angle(i)=angle(i)/pigr*180.          angle(i)=angle(i)/pigr*180.
353        enddo        enddo

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.23