def main(self): self.define_parser() args = self.parser.parse_args() self.validate(args) print("Making orientation heatmap from star file...") md = MetaData(args.i) particles = self.get_particles(md) new_particles = [] new_particles.extend(self.removePrefOrient(particles, args.sd)) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, new_particles) mdOut.write(args.o) print("File %s was created..." % args.o) print("Finished. Have fun!")
def main(self): self.define_parser() args = self.parser.parse_args() self.validate(args) md = MetaData(args.i) print("Reading in input star file.....") micrographs = self.get_micrographs(md) print( "Total %s micrographs in input star file. \nRenaming to micXXX convention." % str(len(micrographs))) self.renameMicrographs(micrographs, args.mic_dir) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, micrographs) 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("Performing rotation of particles from star file...") md = MetaData(args.i) new_particles = [] particles = self.get_particles(md) new_particles.extend( self.rotateParticles(particles, rotValue, tiltValue, psiValue, xValue, yValue, zValue, md.version)) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, new_particles) 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/micrographs from star file...") md = MetaData(args.i) if md.version == "3.1": ilabels = md.getLabels("data_particles") else: ilabels = md.getLabels("data_") if ("rlnDefocusU" not in ilabels) or ("rlnDefocusV" not in ilabels): self.error( "No labels rlnDefocusU or rlnDefocusV found in Input file.") if ("rlnFinalResolution" not in ilabels) and (args.res > 0): print( "No label rlnFinalResolution found in input file. Switching off resolution filtering..." ) args.res = 0 mdOut = MetaData() new_particles = [] particles = self.get_particles(md) new_particles.extend( self.selParticles( particles, args.astg, args.res, )) if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, new_particles) 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() compValue, selValue, rangeHi, rangeLo, rangeSel = self.validate(args) if args.sellb == "None": print("Performing math on all particles from star file...") else: if rangeSel: print( "Performing math on particles where %s is in range <%s, %s>." % (args.sellb, rangeLo, rangeHi)) else: print("Performing math on particles where %s is %s %s." % (args.sellb, args.selop, selValue)) md = MetaData(args.i) if md.version == "3.1": ilabels = md.getLabels("data_particles") else: ilabels = md.getLabels("data_") if args.lb not in ilabels: self.error("No label " + args.lb + " found in Input file.") new_particles = [] particles = self.get_particles(md) new_particles.extend( self.mathParticles(particles, args.lb, args.op, compValue, args.selop, args.sellb, selValue, rangeHi, rangeLo, rangeSel)) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, new_particles) 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) md = MetaData(args.i) md.addLabels("data_particles", "rlnBeamTiltClass") print("Reading in input star file.....") particles = self.get_particles(md) print( "Total %s particles in input star file. \nAdding rlnBeamTiltClass." % str(len(particles))) self.addBeamTiltClass(particles) mdOut = MetaData() mdOut.addDataTable("data_") mdOut.addLabels("data_", md.getLabels("data_")) mdOut.addData("data_", particles) 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("Binning correct input star file. Using binning factor %s." % str(args.bin_factor)) md = MetaData(args.i) new_particles = [] particles = self.get_particles(md) if (hasattr(particles[0], 'rlnOriginX')) and (hasattr(particles[0], 'rlnOriginY')): correctOrigin = True else: print("Note: rlnOriginX or rlnOriginY not found in input star file. Not correcting for particle shift.") correctOrigin = False if hasattr(particles[0], 'rlnDetectorPixelSize'): correctApix = True else: print("Note: rlnDetectorPixelSize not found in input star file. Not correcting for pixel size.") correctApix = False new_particles.extend( self.binParticles(particles, args.bin_factor, correctOrigin, correctApix, args.suf_orig, args.suf_new)) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, new_particles) 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) md = MetaData(args.i) if md.version == "3.1": iLabels = md.getLabels("data_optics") else: self.error("Relion 3.1 star file is needed as input.") if "rlnEvenZernike" not in iLabels: self.error( "Zernike 4th order polynomials are not present in the STAR file. Please do a 4th order aberration CTF refinement first." ) # create output header print("| Optics group | Apparent Cs [mm] | realApix [A] |") print("|------------------------------------------------|") apixSum = 0.0 csSum = 0.0 opticsGroupNr = 0 for optic_group in md.data_optics: z40 = float(optic_group.rlnEvenZernike.split(",")[6]) csTrue = optic_group.rlnSphericalAberration nomPixSize = optic_group.rlnImagePixelSize # note wavelength is for relativistically corrected accelerating voltage (i.e. 388.06 kV, 239.14 kV and 109.78 kV) if optic_group.rlnVoltage == 300: waveLength = 0.019687 elif optic_group.rlnVoltage == 200: waveLength = 0.025079 elif optic_group.rlnVoltage == 100: waveLength = 0.037014 else: self.error( "Only 100, 200 and 300 kV acceleration voltages are supported." ) csApparent = csTrue + (12 * z40 * 1e-7) / (pi * waveLength**3) realPixSize = nomPixSize * (csTrue / csApparent)**0.25 print("| %2d | %0.2f | %0.3f |" % (optic_group.rlnOpticsGroup, csApparent, realPixSize)) opticsGroupNr += 1 apixSum += realPixSize csSum += csApparent # Show average values print("|------------------------------------------------|") print("| Average | %0.2f | %0.3f |" % (csSum / opticsGroupNr, apixSum / opticsGroupNr)) print("|------------------------------------------------|")
def main(self): self.define_parser() args = self.parser.parse_args() self.validate(args) md = MetaData(args.i) if args.lb == "ALL": if md.version == "3.1": iLabels = md.getLabels("data_particles") else: iLabels = md.getLabels("data_") else: iLabels = args.lb.split(" ") particles = self.get_particles(md) self.statsOnParticles(particles, iLabels)
def main(self): self.define_parser() args = self.parser.parse_args() self.validate(args) print("Modifying star file to be compatible with helix refinement.") md = MetaData(args.i) if md.version == "3.1": ilabels = md.getLabels("data_particles") else: ilabels = md.getLabels("data_") if 'rlnAnglePsiFlipRatio' not in ilabels: md.addLabels(['rlnAnglePsiFlipRatio']) if 'rlnHelicalTubeID' not in ilabels: md.addLabels(['rlnHelicalTubeID']) if 'rlnHelicalTrackLength' not in ilabels: md.addLabels(['rlnHelicalTrackLength']) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) particles = self.get_particles(md) self.helixParticles(particles) mdOut.addData(particleTableName, particles) 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) md = MetaData(args.i) # create output star file mdOut = MetaData() mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addDataTable("data_particles") mdOut.addLabels("data_particles", md.getLabels("data_particles")) print("Reading in input star file.....") particles = self.get_particles(md) print( "Total %s particles in input star file. \nAdding rlnOpticsGroup." % str(len(particles))) new_particles, opticsGroupsNames = self.addOpticGroupsToParticles( particles, args.word_count) # create new optics groups opticGroup = md.data_optics[0] opticsGroups = [] for opticGroupNr, opticGroupName in enumerate(opticsGroupsNames): newOpticGroup = deepcopy(opticGroup) newOpticGroup.rlnOpticsGroup = opticGroupNr + 1 newOpticGroup.rlnOpticsGroupName = "opticsGroup_" + str( opticGroupName) opticsGroups.append(newOpticGroup) mdOut.addData("data_optics", opticsGroups) mdOut.addData("data_particles", new_particles) 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() compValue, rangeHi, rangeLo, rangeSel, prctl_l, prctl_h = self.validate( args) if rangeSel: print( "Selecting particles particles where %s is in range <%s, %s>." % (args.lb, rangeLo, rangeHi)) elif args.prctl_l == "-1" and args.prctl_h == "-1": print("Selecting particles particles where %s is %s %s." % (args.lb, args.op, compValue)) md = MetaData(args.i) new_particles = [] particles = self.get_particles(md) new_particles.extend( self.selParticles(particles, args.lb, args.op, compValue, rangeHi, rangeLo, rangeSel, prctl_l, prctl_h)) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, new_particles) 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) md = MetaData(args.i) new_particles = [] print("Reading in input star file.....") particles = self.get_particles(md) print( "Total %s particles in input star file. \nSelecting random particles from their symmetry copies." % str(len(particles))) new_particles.extend(self.randParticles(particles)) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, new_particles) 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...") md = MetaData(args.i) new_particles = [] particles = self.get_particles(md) new_particles.extend( self.selParticles(particles, args.rot_min, args.rot_max, args.tilt_min, args.tilt_max, args.psi_min, args.psi_max)) mdOut = MetaData() if md.version == "3.1": mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addData("data_optics", getattr(md, "data_optics")) particleTableName = "data_particles" else: particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels(particleTableName)) mdOut.addData(particleTableName, new_particles) 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) md = MetaData(args.i) if md.version != "3.1": self.error("Input file '%s' is not RELION 3.1 format." % args.i) new_particles = [] print("Reading in input star file.....") particles = self.get_particles(md) optic_groups = self.get_optic_groups(md) print("Total %s particles in input star file." % str(len(particles))) print("Total %s optic groups found in input star file." % str(len(optic_groups))) new_particles.extend(self.rel30format(particles, optic_groups)) mdOut = MetaData() particleTableName = "data_" mdOut.addDataTable(particleTableName) mdOut.addLabels(particleTableName, md.getLabels("data_particles")) mdOut.addLabels(particleTableName, [ 'rlnVoltage', 'rlnSphericalAberration', 'rlnAmplitudeContrast', 'rlnMagnification', 'rlnDetectorPixelSize', 'rlnOriginX', 'rlnOriginY', 'rlnBeamTiltClass' ]) mdOut.removeLabels( "data_", ['rlnOpticsGroup', 'rlnOriginXAngst', 'rlnOriginYAngst']) mdOut.addData(particleTableName, new_particles) mdOut.write(args.o) print("New star file %s in RELION 3.0 format 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) 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)
"No particle star input file given. Please, define one by --istar") sys.exit(2) # read in particle star file md = MetaData(args.istar) particles = [] for particle in md: particles.append(particle) # create output star file mdOut = MetaData() mdOut.version = "3.1" mdOut.addDataTable("data_optics") mdOut.addLabels("data_optics", md.getLabels("data_optics")) mdOut.addDataTable("data_particles") mdOut.addLabels("data_particles", md.getLabels("data_particles")) # create optics groups opticGroup = md.data_optics[0] opticsGroups = [] for opticGroupNr in range(max(pred_y)): newOpticGroup = deepcopy(opticGroup) newOpticGroup.rlnOpticsGroup = opticGroupNr + 1 newOpticGroup.rlnOpticsGroupName = "opticsGroup" + str(opticGroupNr + 1) opticsGroups.append(newOpticGroup) mdOut.addData("data_optics", opticsGroups)