1 |
************************************************************************* |
2 |
* |
3 |
* Subroutine cncomp.f |
4 |
* |
5 |
* iterates common noise computation subroutine (./cnoise.f) and cluster |
6 |
* cutting subroutine (./cutcn.f) till no more clusters are found |
7 |
* |
8 |
************************************************************************* |
9 |
|
10 |
subroutine cncomp(i,j) !(view, VA1) |
11 |
|
12 |
include '../common/commontracker.f' |
13 |
include '../common/common_reduction.f' |
14 |
include '../common/calib.f' |
15 |
|
16 |
integer errflag !error flag to mark no signal free VA1 |
17 |
|
18 |
integer clstr_old(nstrips_va1) !flag storage vector |
19 |
|
20 |
real signal(nstrips_va1) !"signal" (=adc-ped) value storage vector |
21 |
|
22 |
real smean, ssigma !"signal" mean and sigma |
23 |
real cut !"strange" strip exclusion cut |
24 |
|
25 |
integer newclstr !flag to warn about new found clusters to be |
26 |
! excluded from common noise computation |
27 |
|
28 |
|
29 |
c call HBOOK1(20000+100*i+j,' ',30,0.,30.,0.) !??? |
30 |
|
31 |
c------------------------------------------------------------------------ |
32 |
c |
33 |
c variables initialization |
34 |
c |
35 |
c------------------------------------------------------------------------ |
36 |
do k=1,nstrips_va1 !loops on strips |
37 |
clstr(i,j,k)=1 !initializes signal affected strips flag |
38 |
clstr_old(k)=1 !initializes signal affected strips storage |
39 |
strange(i,j,k)=1 !initializes unusually high or low signal |
40 |
enddo ! affected strips flag |
41 |
|
42 |
newclstr=1 !flag to warn about new found signal |
43 |
! affected strips |
44 |
|
45 |
|
46 |
|
47 |
c------------------------------------------------------------------------ |
48 |
c |
49 |
c high or low signal affected strips exclusion: computes "signal" (=adc-ped) |
50 |
c mean value and sigma, and cuts from common noise computation strips |
51 |
c whose ABS(signal) exceeds scut*sigma |
52 |
c |
53 |
c------------------------------------------------------------------------ |
54 |
countme=0 !??? |
55 |
666 continue !??? |
56 |
|
57 |
smean=0. !initialization |
58 |
ssigma=0. |
59 |
nstr=0 |
60 |
|
61 |
do k=1,nstrips_va1 |
62 |
nstr=nstr+strange(i,j,k) !uses only |
63 |
if(mod(i,2).eq.1) then !odd strip ---> Y view |
64 |
signal(k)= - (DBLE(adc(i,j,k))-pedestal(i,j,k)) !negative signal |
65 |
else !even strip ---> X view |
66 |
signal(k)= DBLE(adc(i,j,k))-pedestal(i,j,k) !positive signal |
67 |
endif |
68 |
|
69 |
smean=smean+signal(k)*strange(i,j,k) |
70 |
ssigma=ssigma+(signal(k)**2)*strange(i,j,k) |
71 |
|
72 |
c call HFILL(10000+100*i+j,signal(k),0.,1.) !??? |
73 |
enddo |
74 |
|
75 |
smean=smean/nstr !strips value distribution mean |
76 |
|
77 |
ssigma=SQRT((ssigma/nstr)-smean**2) !strips value distribution sigma |
78 |
|
79 |
cut=scut*ssigma !exclusion cut |
80 |
|
81 |
do k=1,nstrips_va1 |
82 |
c call HFILL(20000+100*i+j,ABS(signal(k)-smean)/ssigma,0.,1.) !??? |
83 |
if(ABS(signal(k)-smean).gt.cut) then |
84 |
c print*,i,j,k,signal(k),abs(signal(k)),cut,strange(i,j,k) !??? |
85 |
strange(i,j,k)=0 !marks strips exceeding cut |
86 |
endif |
87 |
enddo ! in order not to use them in CN computation |
88 |
|
89 |
|
90 |
countme=countme+1 !??? |
91 |
if (countme.le.3) goto 666 !??? |
92 |
|
93 |
|
94 |
c------------------------------------------------------------------------ |
95 |
c |
96 |
c common noise computation |
97 |
c |
98 |
c------------------------------------------------------------------------ |
99 |
do while(newclstr.eq.1) !loops on this VA1 till no new signal |
100 |
! affected strips are found |
101 |
|
102 |
newclstr=0 !to exit from loop if no new cluster is |
103 |
! found |
104 |
|
105 |
errflag=0 |
106 |
|
107 |
call cnoise(i,j,errflag) !(view, VA1, error flag) computes common |
108 |
! noise |
109 |
|
110 |
c print*,cn(i,j) !??? |
111 |
|
112 |
if(errflag.eq.1) goto 10 !goes to next VA1: this one has no signal |
113 |
! free strips... |
114 |
|
115 |
call cutcn(i,j) !(view, VA1) excludes clusters from |
116 |
! common noise calculation |
117 |
|
118 |
ncs=0 !initializes number of strips not excluded by cncut |
119 |
|
120 |
do k=1,nstrips_va1 !loops on strips |
121 |
if(clstr(i,j,k).ne.clstr_old(k)) then !checks if there are |
122 |
! new found clusters, and if so sets |
123 |
newclstr=1 ! newclstr flag = 1 |
124 |
|
125 |
clstr_old(k)=clstr(i,j,k) !stores cluster flags in |
126 |
endif ! clstr_old variable |
127 |
|
128 |
iok=strange(i,j,k)*bad(i,j,k)*clstr(i,j,k) |
129 |
|
130 |
ncs=ncs+iok !counts number of good strips for cn computation |
131 |
|
132 |
enddo |
133 |
|
134 |
enddo !ends do while loop when there are no new |
135 |
! clusters |
136 |
|
137 |
c call HFILL(666,FLOAT(ncs),0.,1.) !??? |
138 |
|
139 |
|
140 |
c$$$ if(ncs.lt.20) then !warns if too many strips have been excluded from CN |
141 |
c$$$ ! computation |
142 |
c$$$ print*,'cncomp: WARNING, LESS THAN 20 STRIPS PASSED CN CUT' |
143 |
c$$$ $ //' ON VA1 ',j,', VIEW ',i !NB questo errore e' "un po'" in conflitto |
144 |
c$$$ ! con quello che setta errflag (vedi cnoise.f)... |
145 |
c$$$ |
146 |
c$$$ endif |
147 |
|
148 |
10 continue |
149 |
|
150 |
return |
151 |
end |