예제 #1
0
 def iteration(self):
     weights_distance = self.distanceLine.text()
     weights_direc = self.directionLine.text()
     Pob = Weights(weights_distance, weights_direc)
     L, Lnames = getL(self.provisionals, self.obs, self.control)
     A = getA(self.provisionals, self.obs, self.control, self.unknowns)
     self.P = Pob.matrix(self.obs, A)
     X = (A.T * self.P * A)**-1 * A.T * self.P * L
     Xdict = Points("Solutions Dictionary")
     j = 0
     for i in self.unknowns:
         Xdict[i] = X[j]
         j += 1
     self.Xdict = Xdict
     self.V, posteriori, covarience_mat, precisi = precisions(
         A, X, self.P, L, self.obs, self.unknowns)
     self.provis = adjustProvisional(Xdict, self.provisionals, self.obs,
                                     self.unknowns)
     k = 0
     for i in range(self.iterations):
         k += 1
         provis = adjustProvisional(Xdict, self.provis, self.obs,
                                    self.unknowns)
         A, Xdict, provis, obs, control, unknowns, L = Iterate(
             provis, self.obs, self.control, self.unknowns, self.P)
         X = ((A.T * self.P * A)**-1) * A.T * self.P * L
         Xdict = Points("Solutions Dictionary")
         j = 0
         for i in unknowns:
             Xdict[i] = X[j]
             j += 1
         V, posteriori, self.covarience_mat, precisi = precisions(
             A, X, self.P, L, self.obs, unknowns)
     self.XOdict = Points("Orientations Dictionary")
     j = 0
     for i in self.unknowns:
         if i[-1] == "o":
             self.XOdict[i] = X[j]
         j += 1
     for i, o in self.XOdict.iteritems():
         print i
         print o
     self.A = A
     self.L = L
     self.posterioriValue = posteriori
     self.V = V
     self.vtpv = float(self.V.T * self.P * self.V)
     self.covarience_mat = covarience_mat
     self.precisi = precisi
예제 #2
0
def LeastSqrRead(inputControl, inputObservations):
    control = Points()
    control.read(inputControl)
    provis = Points()
    np.set_printoptions(precision=12)
    np.set_printoptions(suppress=True)
    np.set_printoptions(linewidth=2000)
    numpy.set_printoptions(threshold=1000)
    print "Reading Obs"
    obs = SurveyData()
    count = obs.read(
        inputObservations
    )  #reads in file into the surveyData dictionary which contains Target object with two variables
    # determine adjustment information
    unknowns2 = set()  # set of text items
    obsList = []
    for i, sta in obs.iteritems():
        for j, k in sta.iteritems():
            if k.type == 'both':
                obsList.append(i + "-" + "direction-" + " " + j)
                obsList.append(i + "-" + "distance-" + " " + j)
            else:
                obsList.append(i + "-" + k.type + " " + j)
    print obsList
    #     knowns = []

    for station_name, station in obs.iteritems():
        unknowns2.add(station_name + '_o')
        for target_name, target in station.iteritems():
            if not control.has_key(target_name):
                unknowns2.add(target_name + '_x')
                unknowns2.add(target_name + '_y')
            pass  #print target_name, target.direction.
    unknowns = []
    for i in unknowns2:
        unknowns.append(i)
    print unknowns
    G = nx.MultiGraph()
    G.add_node(2)
    G.add_node(5)
    G.add_edge(2, 3)
    nx.draw(G)
    # Means all distances between points
    print "===             Calculate Mean Distance Observations           =================="

    #     for sn1,station1 in obs.iteritems():
    #         for sn2,station2 in obs.iteritems():
    #             for tn1,target1 in station1.iteritems():
    #                 for tn2,target2 in station2.iteritems():
    #                     if (not target2.distance==None) and (not target1.distance==None) :
    #                         if tn1==sn2 and tn2==sn1:
    #                             print tn1,sn1,tn2,sn2
    #                             print "distance 1: "+ str(target1.distance) + "\ndistance 2 :" + str(target2.distance)
    #                             temp=target1.distance
    #                             target1.distance = (target1.distance+target2.distance)/2.0
    #                             target2.distance = (temp+target2.distance)/2.0
    #                             print "mean: "+ str(target2.distance)
    print "================================================================================="
    print "===             Calculate Provisional Coordinates           =================="

    #give stations coordinates if they're control points

    for name, obj in control.iteritems():
        if obs.has_key(name):
            obs[name].setPoint(obj)

    for sn1, station1 in obs.iteritems():

        for tn1, target1 in station1.iteritems():
            if not control.has_key(tn1) and not station1[
                    tn1].distance == None and not station1.point == None:
                #                     print "station :"+sn1
                d = station1[tn1].distance
                t = station1[tn1].direction
                x, y, h = station1.point.polar(d, t)
                #                     print "target :" + tn1
                provis.add(tn1, x, y, h, False)
                obs[tn1].setPoint(provis[tn1])
#                     print   str(obs[tn1].point)
#                     print str(tn1) + str(provis[tn1])
    for i, j in provis.iteritems():
        print i
        print j

    print "================================================================================="
    print "======           Truncate Distances              ==========================================================================="
    #     temp=Points()
    #     for i,obj in provis.iteritems():
    #         temp.add(i,obj.x,obj.y,obj.h,False)
    #     for p,obj in temp.iteritems():
    #         provis.replace(p,floor(obj.x),floor(obj.y),floor(obj.h),False)
    #         print provis[p]
    #
    #

    print "======================   TESTING   ====================================================="
    #
    #     provis.add('U1',58961.,49666.4,0.,False)
    #     print provis['U1']
    #     provis.add('U2',59120.6,49687.0,0.,False)
    #     print provis['U2']
    #     provis.add('U3',59295.0,49732.0,0.,False)
    #     print provis['U3']
    #
    #
    #
    #     print Directions(control['SUR09'],'known',provis['U1trunc'],'unknown','y')
    #     print Distances(control['SUR09'],'known',provis['U1trunc'],'unknown','x')
    #     print obs['SUR09'].point.joinS(provis['test'])
    print "================================================================================="
    print "======    Calculate Misclosure L      ==========================================="
    L = numpy.zeros(shape=(count, 1))
    i = 0
    for sn1, station in obs.iteritems():
        for tn1, target in station.iteritems():
            if target.type == "both":
                if control.has_key(tn1):
                    calc = obs[sn1].point.join(control[tn1])
                elif provis.has_key(tn1):
                    calc = obs[sn1].point.join(provis[tn1])
                else:
                    print "error"

                observed = obs[sn1][tn1].direction
                target.setMisclosure(observed - calc)
                L[i][0] = (observed - calc) * 180. * 3600. / pi
                i += 1
                L[i][0] = obs[sn1][tn1].distance - floor(
                    obs[sn1][tn1].distance)
                print L[i][0]
                i += 1
                continue
            else:
                if control.has_key(tn1):
                    calc = obs[sn1].point.join(control[tn1])
                elif provis.has_key(tn1):
                    calc = obs[sn1].point.join(provis[tn1])

                else:
                    print "error"
                observed = obs[sn1][tn1].direction
                target.setMisclosure(observed - calc)
                L[i][0] = (observed - calc) * 180. * 3600. / pi
                i += 1
            print str(sn1) + " " + str(tn1)
            #             print observed
            print('%0.1f' %
                  float64(target.misclosure * 180. / math.pi * 3600.))
    print "==============        A Matrix        ========================================="
    print count

    A = numpy.zeros(shape=(count, len(unknowns)))
    A[0][0] = 3
    i = 0
    j = 0
    doub = False
    print unknowns
    for at, station in obs.iteritems():
        print at
        if control.has_key(at): station.point.setKnown(True)

        for atObserved, observ in station.iteritems():
            print "target : " + atObserved + " " + observ.type
            j = 0
            if observ.type == 'both':
                doub = True
                for at_wrt in unknowns:

                    if at_wrt[-1] == 'o':
                        if at == at_wrt[0:-2]:
                            A[i][j] = -1.
                            print str(i) + " " + str(j) + "  :" + str(A[i][j])
                            j += 1
                            continue
                        else:
                            A[i][j] = 0
                            print str(i) + " " + str(j) + "  :" + str(A[i][j])
                            j += 1
                            continue
                    if not atObserved == at_wrt[0:-2] and not at == at_wrt[
                            0:-2]:
                        #                     print t
                        #                     print at_wrt[0:-2]
                        A[i][j] = 0
                        print str(i) + " " + str(j) + "  :" + str(A[i][j])
                        j += 1
                        continue

                    if control.has_key(atObserved):  #if observing control

                        A[i][j] = equations(station.point, control[atObserved],
                                            at_wrt, 'direction')
                        print str(i) + " " + str(j) + "  :" + str(A[i][j])

                        A[i + 1][j] = equations(station.point,
                                                control[atObserved], at_wrt,
                                                'distance')
                        print str(i) + " " + str(j) + "  :" + str(A[i][j])
                        j += 1

                    else:  #if observing provisional
                        A[i][j] = equations(station.point, provis[atObserved],
                                            at_wrt, 'direction')
                        print str(i) + " " + str(j) + "  :" + str(A[i][j])

                        A[i + 1][j] = equations(station.point,
                                                provis[atObserved], at_wrt,
                                                'distance')
                        print str(i) + " " + str(j) + "  :" + str(A[i][j])
                        j += 1
            else:
                for at_wrt in unknowns:

                    if at_wrt[-1] == 'o':
                        if at == at_wrt[0:-2]:
                            A[i][j] = -1.
                            print str(i) + " " + str(j) + "  :" + str(A[i][j])
                            j += 1
                            continue
                        else:
                            A[i][j] = 0
                            j += 1
                            continue
                    if not atObserved == at_wrt[0:-2] and not at == at_wrt[
                            0:-2]:
                        #                     print t
                        #                     print at_wrt[0:-2]
                        A[i][j] = 0
                        print str(i) + " " + str(j) + "  :" + str(A[i][j])
                        j += 1
                        continue

                    if control.has_key(atObserved):  #if observing control

                        A[i][j] = equations(station.point, control[atObserved],
                                            at_wrt, observ.type)
                        print str(i) + " " + str(j) + "  :" + str(A[i][j])
                        j += 1

                    else:  #if observing provisional
                        A[i][j] = equations(station.point, provis[atObserved],
                                            at_wrt, observ.type)
                        print str(i) + " " + str(j) + "  :" + str(A[i][j])
                        j += 1

            if doub == True:
                i += 2
                print "i: " + str(i)

                doub = False

            else:
                i += 1
                print "i: " + str(i)
    print ""
    print "             U1_y',          'U1_x',      'U3_y',       'U3_x',      'SUR12_o',     'U2_o',       'U2_x',         'U2_y',       'U1_o',       'U3_o',        'SUR09_o' "
    names = []
    for name, ob in obs.iteritems():
        for na, tar in ob.iteritems():
            if tar.type == "both":
                names.append(name + "-" + na + "D")
                names.append(name + "-" + na + "d")
            else:
                names.append(name + "-" + na + "D")

    row_labels = ['SUR09-T013', 'Y', 'N', 'W']
    for row_label, row in zip(names, A):
        print '%s [%s]' % (row_label, '      '.join('%01f' % i for i in row))
#   except:
#                     print "trying"
#                     A[i][j]=equations(station.point,provis[t],at_wrt[-1],types[i])
#
#
#         i+=1
#
    print A
    print "==============        Calculate Least squares       ========================================="

    Pob = Weights()
    Pob.setDirectionWeight(1)
    Pob.setDistanceWeight(1)
    P = Pob.matrix(obs, A)
    A = numpy.asmatrix(A)
    N = (((A.T) * A)**(-1)) * A.T * L
    print "now"
    print A.T * P * L
    for row_label, row in zip(unknowns, N):
        print '%7s [%s]' % (row_label, '      '.join('%07f' % i for i in row))
    j = 0
    #     for name in unknowns:
    #         print name[0:-2] + str(+N[i])
    #
    #         print name + str(ob.y+N[i])
    #         i+=1
    #         print ob.x
    #         print ob.y
    print unknowns
    print provis
    finalX = Points()
    orientations = {}
    for i in unknowns:
        name = i[0:-2]
        variable = i[-1]
        if variable == "o":
            orientations[name] = float64(N[j])
            j += 1
            continue
        x = provis[name].x
        y = provis[name].y
        h = provis[name].h
        if not finalX.has_key(name):
            finalX[name] = Point(0, 0, 0, False, name)
        if variable == "x":
            finalX[name].ChangeVariable(variable, float64(x + N[j]))
            j += 1
            continue
        if variable == "y":
            finalX[name].ChangeVariable(variable, float64(y + N[j]))
            j += 1
            continue
        if variable == "h":
            finalX[name].ChangeVariable(variable, float64(h + N[j]))
            j += 1
            continue

        print finalX[name]

#     T=numpy.matrix([[1,2,3],[3,2,3],[3,2,1],[3,2,1]])
#     S=numpy.matrix([[3,2,3],[3,2,1],[3,2,1],[1,2,3]])
#     M=numpy.matrix([[3,2,3],[3,2,1],[1,2,3],[3,2,1]])
#     print T
#     print T.T*T
#     print S.T*S
#     print M.T*M
#     print A.T*P*L
#     print T*T.T

    for i, j in finalX.iteritems():
        print i + ": "
        print("Y: %.2f" % j.y)
        print("N: %.2f" % j.x)
    print "Orientations :\n"
    for i, ob in orientations.iteritems():

        print str.format("{0}   {1}", i, round(ob, 1))

    V = A * N - L
    for i in range(size(V)):
        print str(obsList[i]) + ": " + str(V[i])
    return finalX, obs, control
예제 #3
0
    def Iterate(self, provis, OBS, control, unknowns):
        count = obsCount(OBS)
        L = self.getL(provis, OBS, control)
        #         print "==============        A Matrix        ========================================="

        A = numpy.zeros(shape=(count, len(unknowns)))
        A[0][0] = 3
        i = 0
        j = 0
        for station_name, station in OBS.iteritems():

            if control.has_key(station_name):
                current_station = control[station_name]
            elif provis.has_key(station_name):
                current_station = provis[station_name]

            for tname, target in station.iteritems():
                tname = tname[0:-2]
                j = 0
                #                 tname=tname[0:-2]
                if target.type == 'direction' or target.type == 'distance':
                    for diff_wrt in unknowns:

                        if diff_wrt[-1] == 'o':
                            if station_name == diff_wrt[0:-2]:
                                A[i][j] = -1.
                                j += 1
                                continue
                            else:
                                A[i][j] = 0
                                j += 1
                                continue
                        if not tname == diff_wrt[
                                0:-2] and not station_name == diff_wrt[0:-2]:
                            A[i][j] = 0
                            j += 1
                            continue

                        if control.has_key(tname):  #if observing control
                            if target.type == "direction":
                                A[i][j] = equations(current_station,
                                                    control[tname], diff_wrt,
                                                    'direction')
                            else:
                                A[i][j] = equations(current_station,
                                                    control[tname], diff_wrt,
                                                    'distance')
                            j += 1
                            continue

                        else:  #if observing provisional
                            if target.type == "direction":
                                A[i][j] = equations(current_station,
                                                    provis[tname], diff_wrt,
                                                    'direction')
                            else:
                                A[i][j] = equations(current_station,
                                                    provis[tname], diff_wrt,
                                                    'distance')
                            j += 1
                            continue
                else:
                    for diff_wrt in unknowns:

                        if diff_wrt[-1] == 'o':
                            if station_name == diff_wrt[0:-2]:
                                A[i][j] = -1.
                                j += 1
                                continue
                            else:
                                A[i][j] = 0
                                j += 1
                                continue
                        if not tname == diff_wrt[
                                0:-2] and not station_name == diff_wrt[0:-2]:
                            A[i][j] = 0
                            j += 1
                            continue

                        if control.has_key(tname):  #if observing control

                            A[i][j] = equations(current_station,
                                                control[tname], diff_wrt,
                                                target.type)
                            j += 1

                        else:  #if observing provisional
                            A[i][j] = equations(current_station, provis[tname],
                                                diff_wrt, target.type)
                            j += 1

                i += 1
        names = []
        for name, ob in OBS.iteritems():
            for na, tar in ob.iteritems():
                if tar.type == "both":
                    names.append(name + "-" + na + "D")
                    names.append(name + "-" + na + "d")
                else:
                    names.append(name + "-" + na + "D")

        row_labels = ['SUR09-T013', 'Y', 'N', 'W']
        #         for row_label, row in zip(names, A):
        #             print '%s [%s]' % (row_label, '      '.join('%01f' % i for i in row))

        #         print "==============        Calculating Least squares       ========================================="

        Pob = Weights()
        Pob.setDirectionWeight(1)
        Pob.setDistanceWeight(1)
        P = Pob.matrix(OBS, A)
        A = numpy.asmatrix(A)
        N = (((A.T) * A)**(-1)) * A.T * L
        provUpdate = self.Provisional(N, provis, unknowns)
        Xtemp = Points("N correction pairs")
        i = 0

        for name in unknowns:
            Xtemp[name] = float64(N[i])
            i += 1

        V = A * N - L
        #         print A.T*V
        posteriori = float((V.T * P * V) / (count - size(unknowns)))
        #         print posteriori
        covarience_mat = posteriori * (A.T * A)**(-1)
        precisions = Points("Precisions of Unknowns")
        i = 0
        for name, value in Xtemp.iteritems():
            precisions[name] = sqrt(float(covarience_mat[i, i]))
            i += 1

#         print precisions
#
#         for i,j in finalX.iteritems():
#             print i + ": "
#             print("Y: %.2f" % j.y)
#             print("N: %.2f" % j.x)
#         print "Orientations :\n"
#         for i,ob in orientations.iteritems():
#
#             print str.format("{0}   {1}", i, round(ob,1))
#

        return A, Xtemp, provUpdate, OBS, control, unknowns, V, P


# if __name__ == '__main__':
#     Leas= LeastSqr()
#     A,Xdict,provis,OBS,control,unknowns,V,P=Leas.Read('control.csv','observations.csv')
예제 #4
0
def Hidden(obsFile, controlFile, saveAs, SitholeExcelFormat, DirectionsW,
           DistanceW, showgraph, iterations, showGlobalCheckForIterations):

    ##_________________________________________________________________________________All functions used for the adjustment F3 in eclipse to 'goto' function

    np.set_printoptions(precision=3)
    np.set_printoptions(linewidth=2000)
    np.set_printoptions(suppress=True)
    numpy.set_printoptions(threshold=1000)
    N, stationsOrder = Observations(obsFile)
    control = controlPoints(N, controlFile)
    #     N,control=Test(0)
    unknowns = getUnknowns(N, control)
    provisionals = getProvisionals(N, control, unknowns)
    obs = getObs(N)
    obs = obsSplit(obs)
    L, Lnames = getL(provisionals, obs, control)
    A = getA(provisionals, obs, control, unknowns)
    Pob = Weights()
    Pob.setDirectionWeight(DirectionsW)
    Pob.setDistanceWeight(DistanceW)
    P = Pob.matrix(obs, A)
    X = (A.T * P * A)**-1 * A.T * P * L
    Xdict = Points("Solutions Dictionary")
    j = 0
    for i in unknowns:
        Xdict[i] = X[j]
        j += 1

    V, posteriori, covarience_mat, precisi = precisions(
        A, X, P, L, obs, unknowns)

    provis = adjustProvisional(Xdict, provisionals, obs, unknowns)

    #________________________________________________________________________________________________________FILE WRITING AND ITERATION

    file = open(saveAs, "w")
    file.write("________CONTROL POINTS________\n\n")
    for i, j in control.iteritems():
        file.write(i + ":\n" + str(j) + "\n")
    file.write("________UNKNOWNS________\n\n")
    file.write(str(unknowns) + '\n\n')
    file.write(
        "_______________________________________ CALCULATIONS _______________________________________ \n\n\n\n"
    )

    k = 0
    print "________Calculating>>>>>>>>>>>>>>>>>>>>>>>....................."
    for i in range(iterations):
        k += 1
        provis = adjustProvisional(Xdict, provis, obs, unknowns)
        A, Xdict, provis, obs, control, unknowns, L = Iterate(
            provis, obs, control, unknowns, P)
        X = ((A.T * P * A)**-1) * A.T * P * L
        Xdict = Points("Solutions Dictionary")
        j = 0
        for i in unknowns:
            Xdict[i] = X[j]
            j += 1
        V, posteriori, covarience_mat, precisi = precisions(
            A, X, P, L, obs, unknowns)

        file.write("________ITERATION: " + str(k) + " ________\n\n")

        if float(round(float((A.T * P * V).T * (A.T * P * V)), 6)) == 0.:
            file.write(
                "____________________________________________________\n\nCalculation check 'A.tPV' successful\n---------------------------------------------\n"
            )
        else:
            file.write(
                "Calculation check 'A.tPV' unsuccessful to 6 dec places\n\n")

    #     V,posteriori,covarience_mat,precisions
        file.write("________'V.TPV'________\n\n")
        file.write(str(V.T * P * V) + '\n\n')
        file.write("________Posteriori________\n\n")
        file.write(str(posteriori) + '\n\n')
        #         file.write("________Covarience Matrix________\n\n")   #    COVARIENCE MATRIX
        #         file.write(str(covarience_mat)+'\n\n')
        file.write("________Precisions of Unknowns ________\n\n")
        for i, j in precisi.iteritems():
            file.write(i + ":\n" + str(round(float(j), 3)) + "\n\n")
        print "__finished " + str(k) + " iterations__"
        if showGlobalCheckForIterations:
            check = globalCheck(provis, control, V, obs, unknowns, Xdict)
            file.write("________Global Check________\n\n")
            for i, j in check.iteritems():
                file.write(i + ":\n" + str(j) + "\n")
        file.write("________________----   END OF ITERATION " + str(k) +
                   "   ----____________\n\n")
        file.write(
            "_______________________________________________________________________\n\n"
        )
#     showGraph(N,provisionals,control)

    file.write("________FINAL COORDINATES________\n\n")
    for i, j in provis.iteritems():
        file.write(i + ":\n" + str(j) + "\n\n")

    file.write(
        "________X Solution Vector, With distances in meters and directions in seconds ________\n\n"
    )
    for i, j in Xdict.iteritems():
        file.write(i + ":\n" + str(round(float(j), 3)) + "\n\n")

    #"observed direction( "+str(target.distance)+") + "+"residual: ("+str(float(V[i]))+")-"+"new calculated direction ("+ str(newD)+") = " + str(round(float(target.distance + V[i] - newD),2))
    check = globalCheck(provis, control, V, obs, unknowns, Xdict)
    print provis
    file.close()

    if showgraph:
        showGraph(N, provis, control)
예제 #5
0
    def Read(self, inputControl, inputObservations):
        control = Points("control points")
        control.read(inputControl)
        #         print control

        provis = Points("provisional points")
        #         print provis
        np.set_printoptions(precision=12)
        np.set_printoptions(suppress=True)
        np.set_printoptions(linewidth=2000)
        numpy.set_printoptions(threshold=1000)
        print "Reading Obs"
        obs = SurveyData()
        count, N, pos = obs.read(
            inputObservations, control
        )  #reads in file into the surveyData dictionary which contains Target object with two variables
        print obs
        edge_weight = {}
        #         for u,v,d in N.edges(data=True):
        #             print u
        #             print v
        #             edge_weight[u][v]=d['direction']

        #         dict([((u,v,),int(d['distance'])) for u,v,d in N.edges(data=True)])
        nx.draw_networkx_nodes(N,
                               pos,
                               node_color='y',
                               node_size=800,
                               alpha=0.8)
        nx.draw_networkx_nodes(N,
                               pos,
                               nodelist=control,
                               node_color='r',
                               node_size=800,
                               alpha=0.8)
        edges = {}
        for v, u, d in N.edges(data=True):
            #             print d
            if d.has_key("distance") and d.has_key('direction'):
                edges[v, u] = 'b'

        nx.draw(N, pos)
        nx.draw_networkx_edges(N,
                               pos,
                               edgelist=edges,
                               width=8,
                               alpha=0.5,
                               edge_color='b')
        plt.show()
        OBS = ObsSplit("Individual Observations 2014 Survey")
        OBS = OBS.read(obs, control)
        #         print OBS
        #         N.add_nodes_from(obs.keys())
        #         for n, p in control.iteritems():
        #             N.node[n]['pos'] = p
        #
        #         nx.draw(N,'pos')
        #         plt.show()

        # determine adjustment information
        unknowns2 = set()  # set of text items
        obsList = []
        for i, sta in obs.iteritems():
            for j, k in sta.iteritems():
                if k.type == 'both':
                    obsList.append(i + "-" + "direction-" + " " + j)
                    obsList.append(i + "-" + "distance-" + " " + j)
                else:
                    obsList.append(i + "-" + k.type + " " + j)
    #     knowns = []

        for station_name, station in obs.iteritems():
            unknowns2.add(station_name + '_o')
            for target_name, target in station.iteritems():
                if not control.has_key(target_name):
                    unknowns2.add(target_name + '_x')
                    unknowns2.add(target_name + '_y')
                pass
        unknowns = []
        #         print obsList
        for i in unknowns2:
            unknowns.append(i)

        # Means all distances between points
#         print "===             Calculate Mean Distance ObsSplit           =================="

#     for sn1,station1 in obs.iteritems():
#         for sn2,station2 in obs.iteritems():
#             for tn1,target1 in station1.iteritems():
#                 for tn2,target2 in station2.iteritems():
#                     if (not target2.distance==None) and (not target1.distance==None) :
#                         if tn1==sn2 and tn2==sn1:
#                             print tn1,sn1,tn2,sn2
#                             print "distance 1: "+ str(target1.distance) + "\ndistance 2 :" + str(target2.distance)
#                             temp=target1.distance
#                             target1.distance = (target1.distance+target2.distance)/2.0
#                             target2.distance = (temp+target2.distance)/2.0
#                             print "mean: "+ str(target2.distance)

        print "================================================================================="

        print "===             Calculate Provisional Coordinates           =================="
        for sta, station in obs.iteritems():
            if control.has_key(sta):
                continue
            else:
                provis.add(sta, station.point.x, station.point.y,
                           station.point.h, False)
#         print provis

#give stations coordinates if they're control points

#         for name,obj in control.iteritems():
#             if obs.has_key(name):
#                 obs[name].setPoint(obj)
#
#
#         for sn1,station1 in obs.iteritems():
#
#                 for tn1,target1 in station1.iteritems():
#                     if not control.has_key(tn1) and not station1[tn1].distance==None and not station1[tn1].direction==None and not station1.point==None:
#                         d= station1[tn1].distance
#                         t= station1[tn1].direction
#                         x,y,h=station1.point.polar(d,t)
#                         provis.add(tn1,x,y,h,False)
#                         obs[tn1].setPoint(provis[tn1])

        print "================================================================================="
        print "======           Truncate Distances              ==========================================================================="
        temp = Points()
        for i, obj in provis.iteritems():
            temp.add(i, obj.x, obj.y, obj.h, False)
        for p, obj in temp.iteritems():
            provis.replace(p, floor(obj.x), floor(obj.y), floor(obj.h), False)
#             print provis[p]

        print "======================   TESTING   ====================================================="
        #
        provis.add('SUR10', 58961., 49666.4, 0., False)
        provis.add('RU4A', 59120.6, 49687.0, 0., False)
        provis.add('SUR11', 59295.0, 49732.0, 0., False)

        print "================================================================================="

        print "======    Calculate Misclosure L      ==========================================="

        L = numpy.zeros(shape=(count, 1))
        Lnames = Points("L vector name pairs")
        i = 0
        for sn1, station in OBS.iteritems():

            for tn1, target in station.iteritems():
                tn1 = tn1[0:-2]
                #                 tn1=tn1[0:-2]
                if target.type == "direction":
                    if control.has_key(tn1):
                        calc = obs[sn1].point.join(control[tn1])
                        temp = obs[sn1].point
                    elif provis.has_key(tn1):
                        calc = obs[sn1].point.join(provis[tn1])
                    else:
                        print "error"
                        calc = 0
                    observed = obs[sn1][tn1].direction
                    target.setMisclosure(observed - calc)
                    L[i][0] = ((observed - calc) * 3600. * 180. / pi)

                    Lnames[sn1 + " to " + tn1 + " direc"] = round(
                        ((observed - calc) * 3600. * 180. / pi), 1)
                    i += 1
                    #
                    continue
                elif target.type == "distance":
                    if control.has_key(tn1):
                        calc = obs[sn1].point.joinS(control[tn1])
                    elif provis.has_key(tn1):
                        calc = obs[sn1].point.joinS(provis[tn1])
                    else:
                        print "error"

                    observed = obs[sn1][tn1].distance
                    target.setMisclosure(observed - calc)
                    L[i][0] = round((observed - calc), 3)
                    Lnames[sn1 + " to " + tn1 + " distance"] = L[i][0]
                    i += 1
#                 print str(sn1) + " " + str(tn1)
#             print observed
#                 print ('%0.1f' % float64(target.misclosure*180./math.pi*3600.))
#         print Lnames
#         print L
        print "==============        A Matrix        ========================================="

        A = numpy.zeros(shape=(count, len(unknowns)))
        A[0][0] = 3
        i = 0
        j = 0
        for station_name, station in OBS.iteritems():

            if control.has_key(station_name):
                current_station = control[station_name]
            elif provis.has_key(station_name):
                current_station = provis[station_name]

            for tname, target in station.iteritems():
                tname = tname[0:-2]
                j = 0
                #                 tname=tname[0:-2]
                if target.type == 'direction' or target.type == 'distance':
                    for diff_wrt in unknowns:

                        if diff_wrt[-1] == 'o' and target.type == 'distance':
                            A[i][j] = 0
                            continue
                        if diff_wrt[-1] == 'o' and target.type == 'direction':
                            if station_name == diff_wrt[0:-2]:
                                A[i][j] = -1.
                                j += 1
                                continue
                            else:
                                A[i][j] = 0
                                j += 1
                                continue
                        if not tname == diff_wrt[
                                0:-2] and not station_name == diff_wrt[0:-2]:
                            A[i][j] = 0
                            j += 1
                            continue

                        if control.has_key(tname):  #if observing control
                            if target.type == "direction":
                                A[i][j] = equations(current_station,
                                                    control[tname], diff_wrt,
                                                    'direction')
                            else:
                                A[i][j] = equations(current_station,
                                                    control[tname], diff_wrt,
                                                    'distance')
                            j += 1
                            continue

                        else:  #if observing provisional
                            if target.type == "direction":
                                A[i][j] = equations(current_station,
                                                    provis[tname], diff_wrt,
                                                    'direction')
                            else:
                                A[i][j] = equations(current_station,
                                                    provis[tname], diff_wrt,
                                                    'distance')
                            j += 1
                            continue
                else:
                    for diff_wrt in unknowns:

                        if diff_wrt[-1] == 'o':
                            if station_name == diff_wrt[0:-2]:
                                A[i][j] = -1.
                                j += 1
                                continue
                            else:
                                A[i][j] = 0
                                j += 1
                                continue
                        if not tname == diff_wrt[
                                0:-2] and not station_name == diff_wrt[0:-2]:
                            A[i][j] = 0
                            j += 1
                            continue

                        if control.has_key(tname):  #if observing control

                            A[i][j] = equations(current_station,
                                                control[tname], diff_wrt,
                                                target.type)
                            j += 1

                        else:  #if observing provisional
                            A[i][j] = equations(current_station, provis[tname],
                                                diff_wrt, target.type)
                            j += 1

                i += 1
#                     print "i: " +str(i)
#print ""
        print "SUR10_o',    'RU4A_y',      'RU4A_x',  'SUR11_x',     'SUR11_y',         'SUR12_o',         'SUR10_y',     'SUR10_x',      'RU4A_o',     'SUR11_o',         'SUR09_o'"
        #         print A
        #         print OBS
        names = []
        for name, ob in obs.iteritems():
            for na, tar in ob.iteritems():
                if tar.type == "both":
                    names.append(name + "-" + na + "D")
                    names.append(name + "-" + na + "d")
                else:
                    names.append(name + "-" + na + "D")

        row_labels = ['SUR09-T013', 'Y', 'N', 'W']
        #         for row_label, row in zip(names, A):
        #print '%s [%s]' % (row_label, '      '.join('%01f' % i for i in row))
        #   except:
        #                     print "trying"
        #                     A[i][j]=equations(station.point,provis[t],diff_wrt[-1],types[i])
        #
        #
        #         i+=1
        #
        #print A
        print "==============        Calculate Least squares       ========================================="

        Pob = Weights()
        Pob.setDirectionWeight(1)
        Pob.setDistanceWeight(1)
        P = Pob.matrix(obs, A)
        A = numpy.asmatrix(A)
        N = (((A.T) * P * A)**(-1)) * (A.T * P * L)
        Xtemp = Points("N correction pairs")
        i = 0

        for name in unknowns:
            Xtemp[name] = float64(N[i])
            i += 1
        finalX = Points("final Coordinates:")
        orientations = {}
        j = 0
        for i in unknowns:
            name = i[0:-2]
            variable = i[-1]
            if variable == "o":
                orientations[name] = float64(N[j])
                j += 1
                continue
            x = provis[name].x
            y = provis[name].y
            h = provis[name].h
            if not finalX.has_key(name):
                finalX[name] = Point(0, 0, 0, False, name)
            if variable == "x":
                finalX[name].ChangeVariable(variable, float64(x + N[j]))
                j += 1
                continue
            if variable == "y":
                finalX[name].ChangeVariable(variable, float64(y + N[j]))
                j += 1
                continue
            if variable == "h":
                finalX[name].ChangeVariable(variable, float64(h + N[j]))
                j += 1
                continue
#         print finalX
        V = A * N - L
        #         print V
        #         print A.T*V
        posteriori = float((V.T * P * V) / (count - size(unknowns)))
        #         print posteriori
        covarience_mat = posteriori * (A.T * A)**(-1)
        precisions = Points("Precisions of Unknowns")
        i = 0
        #         print "awek"
        #         print N
        #         print covarience_mat[1,1]
        for name, value in Xtemp.iteritems():
            #             print value
            #             print N[i]
            precisions[name] = sqrt(float(covarience_mat[i, i]))
            i += 1

#         print precisions
        print "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
        return A, Xtemp, provis, OBS, control, unknowns, V, P