Exemplo n.º 1
0
    def test_findConflictsBetweenProposals(self):

        s = self.proposal.session_set.all()[0]
        src0 = self.proposal.source_set.all()[0]
        tpcode = self.proposal.pcode

        # create a new proposal w/ sessions and sources
        newP = createProposal() 
        newS = self.createSession(newP)
        newS.receivers.add(Receiver.objects.get(abbreviation = 'Q'))
        newS.receivers.add(Receiver.objects.get(abbreviation = '800'))
        newS.save()
        src1 = self.createSrc(newP) 
        src2 = self.createSrc(newP) 
                      
        # Look for conflicts - there should be none 
        sc = SourceConflicts()
        sc.findConflictsBetweenProposals(self.proposal, newP)
        self.assertEqual(1, len(sc.conflicts.keys()))
        self.assertEqual(tpcode, sc.conflicts[tpcode]['proposal'].pcode)
        self.assertEqual('Rcvr4_6', sc.conflicts[tpcode]['lowestRx'].name)
        self.assertAlmostEqual(0.0014544410433286077
                             , sc.conflicts[tpcode]['searchRadius']
                             , 6)
        self.assertEqual(0, len(sc.conflicts[tpcode]['conflicts']))                             
        # now make a conflict
        src1.target_name = src0.target_name
        src1.ra = src0.ra 
        src1.dec = src0.dec 
        src1.save()

        # make sure we detect it
        sc.conflicts = {}
        sc.distances = {}
        sc.findConflictsBetweenProposals(self.proposal, newP)
        self.assertEqual(1, len(sc.conflicts[tpcode]['conflicts'])) 
        # check out the only conflict
        cf = sc.conflicts[tpcode]['conflicts'][0]
        self.assertEqual(src0.id, cf['targetSrc'].id)
        self.assertEqual(src1.id, cf['searchedSrc'].id)
        self.assertEqual('GBT10A-009', cf['searchedProp'].pcode)
        self.assertEqual(0, cf['level'])
        self.assertAlmostEqual(0.00000, cf['distance'], 5)

        # make another conflict - a little more subtle
        src2.target_name = src0.target_name + "!"
        src2.ra = src0.ra + (src0.ra*0.0002)
        src2.dec = src0.dec - (src0.dec*0.0002)
        src2.save()

        # make sure we detect both 
        sc.conflicts = {}
        sc.distances = {}
        sc.findConflictsBetweenProposals(self.proposal, newP)
        # check out the new conflict
        self.assertEqual(2, len(sc.conflicts[tpcode]['conflicts'])) 
        cf = sc.conflicts[tpcode]['conflicts'][1]
        self.assertEqual(src0.id, cf['targetSrc'].id)
        self.assertEqual(src2.id, cf['searchedSrc'].id)
        self.assertEqual('GBT10A-009', cf['searchedProp'].pcode)
        self.assertEqual(0, cf['level'])
        self.assertAlmostEqual(0.0009417, cf['distance'], 5)