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)
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)