8 p0n = p0 + p1*dt + p2*dt*dt + p3*dt*dt*dt
9 p1n = p1 + 2*p2*dt + 3*p3*dt*dt
12 return p0n,p1n,p2n,p3n
20 p = (3*a*c-b*b)/(3*a*a)
21 q = (2*b*b*b-9*a*b*c+27*a*a*d)/(27*a*a*a)
24 discriminant = 4*p*p*p+27*q*q
26 v = math.sqrt(q*q/4 + p*p*p/27 )
27 if (-q/2 + v) >0
and (-q/2-v) > 0 :
28 r =
pow(-q/2 + v,0.3333333)+
pow(-q/2-v,0.3333333)+offset
29 if discriminant < 0
and p < 0:
30 cphi = (3.0/2.0)*(q/p)*math.sqrt(-3/p)
32 z1 = 2*math.sqrt(-p/3)*math.cos(phi/3) + offset
33 z2 = 2*math.sqrt(-p/3)*math.cos((phi+2*pi)/3) + offset
34 z3 = 2*math.sqrt(-p/3)*math.cos((phi+4*pi)/3) + offset
35 if abs(z1-18)<abs(z2-18)
and abs(z1-18)<abs(z3-18):
37 elif abs(z2-18)<abs(z3-18):
50 if sys.argv[1]==
"t0shift":
56 olddbs=
open(sys.argv[3]).readlines()
57 newdbs=
open(sys.argv[3]).readlines()
59 olddbs=
open(sys.argv[1]).readlines()
60 newdbs=
open(sys.argv[2]).readlines()
63 olddicts=
open(sys.argv[3]).readlines()
64 keeprt=sys.argv[4].
find(
"keeprt")>=0
65 keept0=sys.argv[4].
find(
"keept0")>=0
66 shiftrt=sys.argv[4].
find(
"shiftrt")>=0
67 shiftt0=sys.argv[4].
find(
"shiftt0")>=0
69 print (
"cfilter called with 4 arguments. Option keeprt")
71 print (
"cfilter called with 4 arguments. Option keept0")
73 print (
"cfilter called with 4 arguments. Option shiftrt")
75 print (
"cfilter called with 4 arguments. Option shiftt0")
77 print (
"cfilter WARNING: No oldt0s given. The two first arguments must be calibout.txt calibout.txt.")
78 keeprt=sys.argv[3].
find(
"keeprt")>=0
79 keept0=sys.argv[3].
find(
"keept0")>=0
80 shiftrt=sys.argv[3].
find(
"shiftrt")>=0
81 shiftt0=sys.argv[3].
find(
"shiftt0")>=0
89 if not olddb.find(
'#')==0:
90 if len(olddb.split(
":")[-1].
split())>10:
91 olderrors.append(olddb.strip())
92 elif len(olddb.split(
":")[-1].
split())>4:
93 oldrts.append(olddb.strip())
95 oldt0s.append(olddb.strip())
101 if not newdb.find(
'#')==0:
102 if len(newdb.split(
":")[-1].
split())>10:
103 newerrors.append(newdb.strip())
104 elif len(newdb.split(
":")[-1].
split())>4:
105 newrts.append(newdb.strip())
107 newt0s.append(newdb.strip())
111 if keeprt: rts=oldrts
112 if keept0: t0s=oldt0s
126 rtdbkey=
"%s %s %s %s %s"%(rtkeytokens[0],rtkeytokens[1],rtkeytokens[2],rtkeytokens[3],rtkeytokens[4])
127 rtdictkey=
"_%s_%s_%s_%s_%s"%(rtkeytokens[0],rtkeytokens[1],rtkeytokens[2],rtkeytokens[3],rtkeytokens[4])
136 poly_orig = [p3, p2, p1, p0 - rtfix[0]]
137 r_orig =
p3root(p3, p2, p1, p0 - rtfix[0])
138 shiftval = ( r_orig - rtfix[1] )
141 poly_new = [p3n, p2n, p1n, p0n]
145 p0nn, p1nn, p2nn, p3nn =
tshift_poly(shiftvaln, p0n, p1n, p2n, p3n)
146 poly_newnew = [p3nn, p2nn, p1nn, p0nn]
152 print (
"%16s ... original polynomial: r=%.1f mm @ %f ns, shifting %f ns in t, new polynomial: r(%.1f ns) = %f mm, dt0 = %f" % (
158 p3nn*rtfix[1]*rtfix[1]*rtfix[1] + p2nn*rtfix[1]*rtfix[1] + p1nn*rtfix[1] + p0nn,
161 print (
"original polynomial: ",p0,p1,p2,p3)
162 print (
"new polynomial: ",p0nn,p1nn,p2nn,p3nn)
165 rtconsts[rtdbkey].
append(p0nn)
166 rtconsts[rtdbkey].
append(p1nn)
167 rtconsts[rtdbkey].
append(p2nn)
168 rtconsts[rtdbkey].
append(p3nn)
169 rtshifts[rtkeytokens[0]]=shiftvaln
171 rtconsts[rtdbkey].
append(p0)
172 rtconsts[rtdbkey].
append(p1)
173 rtconsts[rtdbkey].
append(p2)
174 rtconsts[rtdbkey].
append(p3)
175 rtshifts[rtkeytokens[0]]=p0
180 t0dbkey=
"%s %s %s %s %s"%(t0keytokens[0],t0keytokens[1],t0keytokens[2],t0keytokens[3],t0keytokens[4])
188 for part
in rtconsts:
189 dbrtouts.append(
"%s : 0 %e %e %e %e"%(part,rtconsts[part][0],rtconsts[part][1],rtconsts[part][2],rtconsts[part][3]))
193 for straw
in t0consts:
195 if shiftt0
and rtshifts.has_key(straw.split()[0]):
196 dbt0outs.append(
"%s : %f %f"%(straw,t0consts[straw][0]+rtshifts[straw.split()[0]],t0consts[straw][1]))
199 dbt0outs.append(
"%s : %f %f"%(straw,t0consts[straw][0],t0consts[straw][1]))
201 dbt0outs.append(
"%s : %f %f"%(straw,t0consts[straw][0]+Dt0,t0consts[straw][1]))
209 if len (newerrors)==0:
210 dbfile.write(
"# Fileformat=1\n")
211 dbfile.write(
"# RtRelation\n")
212 for dbrtout
in dbrtouts:
213 dbfile.write(dbrtout +
'\n')
214 dbfile.write(
"# StrawT0\n")
215 for dbt0out
in dbt0outs:
216 dbfile.write(dbt0out +
'\n')
217 dbfile.write(
"#GLOBALOFFSET 0.0000\n")
218 elif len (newerrors)>1:
219 dbfile.write(
"# Fileformat=2\n")
220 dbfile.write(
"# RtRelation\n")
221 for dbrtout
in dbrtouts:
222 dbfile.write(dbrtout +
'\n')
223 dbfile.write(
"# errors\n")
224 for errorout
in newerrors:
225 dbfile.write(errorout +
'\n')
226 dbfile.write(
"# StrawT0\n")
227 for dbt0out
in dbt0outs:
228 dbfile.write(dbt0out +
'\n')
229 dbfile.write(
"#GLOBALOFFSET 0.0000\n")
235 for olddict
in olddicts:
236 t0dicts[olddict.split()[0]]=
float(olddict.split()[1])
239 for straw
in t0dicts:
240 keytokens=straw.split(
'_')
241 if keytokens[1]==
"all": detector=
'-3'
242 else: detector=keytokens[1].strip()
243 if shiftt0
and rtshifts.has_key(detector):
244 dictouts.append(
'%s %f'%(straw,t0dicts[straw]+rtshifts[detector]))
247 dictouts.append(
'%s %f'%(straw,t0dicts[straw]))
251 dictfile=
open(
"dictconst.txt",
"w")
252 for dictout
in dictouts:
253 dictfile.write(dictout +
'\n')