Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()