Пример #1
0
    def main(self):
        self.define_parser()
        args = self.parser.parse_args()
        self.validate(args)

        print("Selecting particles from star file...")

        md1 = MetaData(args.i1)
        md2 = MetaData(args.i2)

        if md1.version == "3.1":
            i1labels = md1.getLabels("data_particles")
            i2labels = md2.getLabels("data_particles")
        else:
            i1labels = md1.getLabels("data_")
            i2labels = md2.getLabels("data_")

        if args.col_lb in i1labels:
            self.error("Column %s is already in Input1 star file. Please remove it first..." % args.col_lb)
        if args.col_lb not in i2labels:
            self.error("Column %s is not present in Input2 star file." % args.col_lb)
        if args.comp_lb not in i1labels:
            self.error("Column %s is not present in Input1 star file." % args.comp_lb)
        if args.comp_lb not in i2labels:
            self.error("Column %s is not present in Input2 star file." % args.comp_lb)

        if LABELS[args.col_lb] == float:
            # add label with default values 0.0
            print("Adding label %s to Input1 data with default value 0.0." % args.col_lb)
            dic = {args.col_lb: 0.0}
        if LABELS[args.col_lb] == int:
            # add label with default values 0
            print("Adding label %s to Input1 data with default value 0." % args.col_lb)
            dic = {args.col_lb: 0}
        if LABELS[args.col_lb] == str:
            # add label with default values "dummy"
            print("Adding label %s to Input1 data with default value \"dummy\"" % args.col_lb)
            dic = {args.col_lb: "dummy"}

        if md1.version == "3.1":
            md1.setLabels("data_particles", **dic)
        else:
            md1.setLabels("data_", **dic)

        particles1 = self.get_particles(md1)
        particles2 = self.get_particles(md2)

        print(
            "Assigning values for Input1 label %s where the %s of Input2 matches Input1" % (args.col_lb, args.comp_lb))

        mdOut = MetaData()

        if md1.version == "3.1":
            mdOut.version = "3.1"
            mdOut.addDataTable("data_optics")
            mdOut.addLabels("data_optics", md1.getLabels("data_optics"))
            mdOut.addData("data_optics", getattr(md1, "data_optics"))
            particleTableName = "data_particles"
        else:
            particleTableName = "data_"

        mdOut.addDataTable(particleTableName)
        mdOut.addLabels(particleTableName, md1.getLabels(particleTableName))
        mdOut.addData(particleTableName, self.assign_column(particles1, particles2, args.col_lb, args.comp_lb))

        print("%s particles were processed..." % str((len(particles1) + len(particles2))))

        mdOut.write(args.o)

        print("New star file %s created. Have fun!" % args.o)
Пример #2
0
    def main(self):
        self.define_parser()
        args = self.parser.parse_args()
        self.validate(args)

        print("Selecting particles from star file...")

        md1 = MetaData(args.i1)
        md2 = MetaData(args.i2)
        # UNION
        if args.op == "union":
            # check if both stars contains same labels
            if md1.version == "3.1":
                i1labels = md1.getLabels("data_particles")
                i2labels = md2.getLabels("data_particles")
            else:
                i1labels = md1.getLabels("data_")
                i2labels = md2.getLabels("data_")
            if len(i1labels) != len(i2labels):
                if len(i1labels) > len(i2labels):
                    print("WARNING: Input2 does not contain all the labels of Input1.")
                    missingLabels = [Labels for Labels in i1labels if Labels not in i2labels]
                    for label in missingLabels:
                        if LABELS[label] == float:
                            # add label with default values 0.0
                            print("Adding label %s to Input2 data with default value 0.0." % label)
                            dic = {label: 0.0}
                            md2.setLabels("data_particles", **dic)
                        if LABELS[label] == int:
                            # add label with default values 0
                            print("Adding label %s to Input2 data with default value 0." % label)
                            dic = {label: 0}
                            md2.setLabels("data_particles", **dic)
                        if LABELS[label] == str:
                            # add label with default values "dummy"
                            print("Adding label %s to Input2 data with default value \"dummy\"" % label)
                            dic = {label: "dummy"}
                            md2.setLabels("data_particles", **dic)
                if len(i1labels) < len(i2labels):
                    print("WARNING: Input1 does not contain all the labels of Input2.")
                    missingLabels = [Labels for Labels in i2labels if Labels not in i1labels]
                    for label in missingLabels:
                        if LABELS[label] == float:
                            # add label with default values 0.0
                            print("Adding label %s to Input1 data with default value 0.0." % label)
                            dic = {label: 0.0}
                            md1.setLabels("data_particles", **dic)
                        if LABELS[label] == int:
                            # add label with default values 0
                            print("Adding label %s to Input1 data with default value 0." % label)
                            dic = {label: 0}
                            md1.setLabels("data_particles", **dic)
                        if LABELS[label] == str:
                            # add label with default values "dummy"
                            print("Adding label %s to Input1 data with default value \"dummy\"" % label)
                            dic = {label: "dummy"}
                            md1.setLabels("data_particles", **dic)

            mdOut = MetaData()

            if md1.version == "3.1":
                mdOut.version = "3.1"
                mdOut.addDataTable("data_optics")
                mdOut.addLabels("data_optics", md1.getLabels("data_optics"))
                mdOut.addData("data_optics", getattr(md1, "data_optics"))
                particleTableName = "data_particles"
            else:
                particleTableName = "data_"

            mdOut.addDataTable(particleTableName)
            mdOut.addLabels(particleTableName, md1.getLabels(particleTableName))
            particles1 = self.get_particles(md1)
            particles2 = self.get_particles(md2)
            mdOut.addData(particleTableName, particles1)
            mdOut.addData(particleTableName, particles2)
            print("%s particles were selected..." % str((len(particles1) + len(particles2))))
        # INTERSECT
        if args.op == "intersect":
            # create intersect unique values
            if md1.version == "3.1":
                i1labels = md1.getLabels("data_particles")
                i2labels = md2.getLabels("data_particles")
            else:
                i1labels = md1.getLabels("data_")
                i2labels = md2.getLabels("data_")
            if (args.lb not in i1labels) or (args.lb not in i2labels):
                self.error("No label %s found in Input1 or Input2 file." % args.lb)

            particles1 = self.get_particles(md1)
            particles2 = self.get_particles(md2)
            intersectParticles = []
            selectedValues = []

            while len(particles2) > 0:
                selectedParticle = particles2.pop(0)
                if getattr(selectedParticle, args.lb) not in selectedValues:
                    selectedValues.append(getattr(selectedParticle, args.lb))

            for particle in particles1:
                if getattr(particle, args.lb) in selectedValues:
                    intersectParticles.append(particle)
            mdOut = MetaData()

            if md1.version == "3.1":
                mdOut.version = "3.1"
                mdOut.addDataTable("data_optics")
                mdOut.addLabels("data_optics", md1.getLabels("data_optics"))
                mdOut.addData("data_optics", getattr(md1, "data_optics"))
                particleTableName = "data_particles"
            else:
                particleTableName = "data_"

            mdOut.addDataTable(particleTableName)
            mdOut.addLabels(particleTableName, md1.getLabels(particleTableName))
            mdOut.addData(particleTableName, intersectParticles)

            print("%s particles were selected..." % str(len(intersectParticles)))
        # EXCEPT
        if args.op == "except":
            # create unique values for except
            if md1.version == "3.1":
                i1labels = md1.getLabels("data_particles")
                i2labels = md2.getLabels("data_particles")
            else:
                i1labels = md1.getLabels("data_")
                i2labels = md2.getLabels("data_")
            if (args.lb not in i1labels) or (args.lb not in i2labels):
                self.error("No label %s found in Input1 or Input2 file." % args.lb)

            particles1 = self.get_particles(md1)
            particles2 = self.get_particles(md2)
            exceptParticles = []
            selectedValues = []

            while len(particles2) > 0:
                selectedParticle = particles2.pop(0)
                if getattr(selectedParticle, args.lb) not in selectedValues:
                    selectedValues.append(getattr(selectedParticle, args.lb))

            for particle in particles1:
                if getattr(particle, args.lb) not in selectedValues:
                    exceptParticles.append(particle)
            mdOut = MetaData()

            if md1.version == "3.1":
                mdOut.version = "3.1"
                mdOut.addDataTable("data_optics")
                mdOut.addLabels("data_optics", md1.getLabels("data_optics"))
                mdOut.addData("data_optics", getattr(md1, "data_optics"))
                particleTableName = "data_particles"
            else:
                particleTableName = "data_"

            mdOut.addDataTable(particleTableName)
            mdOut.addLabels(particleTableName, md1.getLabels(particleTableName))
            mdOut.addData(particleTableName, exceptParticles)

            print("%s particles were selected..." % str(len(exceptParticles)))

        mdOut.write(args.o)

        print("New star file %s created. Have fun!" % args.o)