def test_parameterization(): parameterization = create_parameterization() h1 = TH1F( 'h1' , 'pull;pull;Entries' , 500, -10, 10 ) hb = TH1F( 'hb' , ';N;Entries' , 500, 0, 8e3 ) h2 = TH2F( 'h2' , ';N;#DeltaN' , 500, -5, 5, 200, 0, 3e-3 ) hr = TH2F( 'hr' , ';r (mm);#DeltaN' , 200, 0, 215, 500, -5, 5 ) hz = TH2F( 'hz' , ';z (mm);#DeltaN' , 400, -200, 200, 500, -5, 5 ) hrz = TH3F( 'hrz', ';z (mm);r (mm);#DeltaN', 400, -200, 200, 200, 0, 215 , 500, -5, 5 ) for dat in data: x, y, z = xyz_map[dat[0]] if not ( -210. < z < 210 ): continue r = x**2 + y**2 if r > 47306.0: continue r **= 0.5 n_test_array = parameterization( x, y, z ) n_real_array = dat[1:] for pmt,(x0,y0) in pmt_map.items(): n_test = n_test_array[pmt] n_real = n_real_array[pmt] if not n_real: continue diff = n_real - n_test diff /= n_real**0.5 * 1e-3 # d = ( (x-x0)**2 + (y-y0)**2 )**0.5 d = n_real h1 .Fill( diff ) if abs(diff) > 4: hb .Fill( d*1e6 ) # h2. Fill( diff, d ) hr .Fill( r, diff ) hz .Fill( z, diff ) hrz.Fill( z, r, diff ) return h1,hb,h2,hr,hz,hrz c = TCanvas() c.Divide(2,2) c.cd(1); h1 .Draw() # c.cd(2); h2 .Draw() c.cd(2); hb .Draw() # c.cd(2); hr .Draw() c.cd(3); hz .Draw() c.cd(4); hrz.Draw() c.Modified() c.Update() raw_input()
def create_parameterization( nsectors = 9, zmin = -200., zmax = 200., draw = False, dump = False ): z = zmin finner = [] fouter = [] zs = [] while z <= zmax: zs.append(z) fi, fo = rrel_parameters( z, nsectors ) finner.append(fi) fouter.append(fo) z += 10. # finner/fouter are both lists like [ [ f(r) for s in sectors ] for z in zs ] parinner = [] for fi in zip(*finner): # by doing zip what we get is fi = [f(r) for z in zs] for each sector innerevol = ParamEvolution( fi, 3, zs ) if draw: plotinnerparam = Plot( innerevol, 2, 2, **{ str(i) : 'AP' for i in range(3) } ) pars = [] for graph in innerevol: graph.Fit('pol4','' if draw else 'Q0') fit = graph.GetFunction('pol4') pars.append( [ fit.GetParameter(i) for i in range(5) ] ) if draw: raw_input() # pars is [ [ p_z for npar_z ] for nr in npar_r ] parinner.append( pars ) #raw_input() print 'out' parouter = [] for fo in zip(*fouter): outerevol = ParamEvolution( fo, 3, zs ) if draw: plotouterparam = Plot( outerevol, 2, 2, **{ str(i) : 'AP' for i in range(3) } ) pars = [] for graph in outerevol: graph.Fit('pol4', '' if draw else 'Q0') fit = graph.GetFunction('pol4') pars.append( [ fit.GetParameter(i) for i in range(5) ] ) if draw: raw_input() parouter.append( pars ) #raw_input() # parinner/parouter are both lists like [ [ [ p_z for npar_z ] for nr in npar_r ] for s in sectors ] pmt_phi = [ atan3(y,x) for id,(x,y) in sorted( pmt_map.items() ) ] phisector = pi/nsectors for p,a in enumerate(parinner): for q,b in enumerate(a): print p,q,b def parameterization( x, y, z ): out = [] for pmt in range(12): x0, y0 = pmt_map[pmt] rrel = ( (x-x0)**2 + (y-y0)**2 )**0.5 prel = abs( NegativeAngle( PositiveAngle( atan3( y-y0, x-x0 ) - pmt_phi[pmt] ) ) ) pbin = int(prel//phisector) par = parinner if pmt<3 else parouter par = par[pbin] out.append( sum( sum( par[i][j]*z**j for j in range(5) ) * rrel**i for i in range(3) ) ) return out if not dump: return parameterization ''' f = open( 'parameters.txt', 'w' ) f.write( '#PMT phisector rparameter zpar0 zpar1 zpar2 zpar3 zpar4' + '\n' ) p = len(parinner) for pmt in sorted(pmt_map): parset = parinner if pmt < 3 else parouter for phi in range(p): for i in range(3): f.write( ' '.join( map( str, [pmt,phi,i]+parset[phi][i] ) ) + '\n' ) f.close() ''' f = open( 'parameters.txt', 'w' ) f.write( 'phisector rparameter zpar0 zpar1 zpar2 zpar3 zpar4' + '\n' ) p = len(parinner) for parset in [parinner,parouter]: for phi in range(p): for i in range(3): f.write( ', '.join( map( str, parset[phi][i] ) ) + '\n' ) f.close()