Exemple #1
0
        public static TwoAxisRealignment Create(string symmetry, string axisId1, string axisId2)
        {
            SymmetryBuilder    builder = SymmetryBuilderFactory.CreateFromSymmetryName(symmetry);
            TwoAxisRealignment result  = Create(builder, axisId1, axisId2);

            return(result);
        }
Exemple #2
0
        new public static IEnumerable <string> GetUsageOptions()
        {
            IEnumerable <string> options = FusionFlags.GetUsageOptions();

            List <string> additionalOptions = new List <string>();
            List <string> symmetries        = SymmetryBuilderFactory.GetKnownSymmetryNames().Where(sym => !sym.StartsWith("C")).ToList();

            // architecture options
            additionalOptions.Add(GetFormattedOptionString("-arch <architecture>", "desired symmetry architecture, options are:"));
            additionalOptions.Add(GetFormattedOptionString("", symmetries.Aggregate((a, b) => a + ", " + b)));

            // axis1 options
            additionalOptions.Add(GetFormattedOptionString("-axis1 <axis>", "first axis name corresponding to selected architecture"));
            foreach (string symmetry in symmetries)
            {
                additionalOptions.Add(GetFormattedOptionString("", String.Format("\t{0} available in architecture {1}", GetAxesOptionsString(symmetry), symmetry)));
            }

            // axis2 options
            additionalOptions.Add(GetFormattedOptionString("-axis2 <axis>", "first axis name corresponding to selected architecture"));
            foreach (string symmetry in symmetries)
            {
                additionalOptions.Add(GetFormattedOptionString("", String.Format("\t{0} available in architecture {1}", GetAxesOptionsString(symmetry), symmetry)));
            }

            // oligomer selection
            additionalOptions.Add(GetFormattedOptionString("-regex_oligomer1 <regex>", "oligomer1 pdb search pattern"));
            additionalOptions.Add(GetFormattedOptionString("-regex_oligomer2 <regex>", "oligomer2 pdb search pattern"));

            return(options.Concat(additionalOptions));
        }
Exemple #3
0
 static string GetAxesOptionsString(string symmetry)
 {
     string[] units = SymmetryBuilderFactory.GetSymmetryUnitIds(symmetry);
     if (units.Length == 1)
     {
         return(units[0]);
     }
     return(units.Aggregate((a, b) => a + ", " + b));
 }
Exemple #4
0
        public static TwoAxisRealignment Create(string symmetry, int multiplicity1, int multiplicity2)
        {
            SymmetryBuilder    builder = SymmetryBuilderFactory.CreateFromSymmetryName(symmetry);
            string             axis1   = builder.GetUnits().First(axis => builder.GetMultiplicity(axis) == multiplicity1);
            string             axis2   = builder.GetUnits().First(axis => builder.GetMultiplicity(axis) == multiplicity2 && axis != axis1);
            TwoAxisRealignment result  = Create(symmetry, axis1, axis2);

            return(result);
        }
Exemple #5
0
        public SymdefPattern(SymmetryBuilder builder, string pattern, T item = null)
        {
            _symmetry = SymmetryBuilderFactory.Clone(builder);
            _symmetry.EnabledUnits = new string[] { pattern };

            OnCoordinateSystemsInitialized();

            if (item != null)
            {
                base.Add(item);
            }
        }
Exemple #6
0
        public SymdefPattern(string symmetry, string pattern, T item = null)
        {
            _symmetry = SymmetryBuilderFactory.CreateFromSymmetryName(symmetry);
            _symmetry.EnabledUnits = new string[] { pattern };

            OnCoordinateSystemsInitialized();

            if (item != null)
            {
                base.Add(item);
            }
        }
Exemple #7
0
        static void StartJobsAngleCXRCX(CxrcxFusionFlags options)
        {
            SymmetryBuilder symmetry = SymmetryBuilderFactory.CreateFromSymmetryName(options.Architecture);

            List <string>        filesOligomer1 = GetPdbFiles(Directory.GetCurrentDirectory(), options.OligomerRegex1).ToList();
            List <string>        filesOligomer2 = GetPdbFiles(Directory.GetCurrentDirectory(), options.OligomerRegex2).ToList();
            List <string>        filesRepeat    = GetPdbFiles(Directory.GetCurrentDirectory(), options.RepeatRegex).ToList();
            ThreadSafeJobCounter sharedCounter  = new ThreadSafeJobCounter();

            sharedCounter.Total = filesOligomer1.Count * filesOligomer2.Count * filesRepeat.Count;

            Console.WriteLine("Using the following spacer repeat proteins:");
            filesRepeat.ForEach(file => Console.WriteLine(file));

            Console.WriteLine("\nUsing the following files for h**o-oligomer 1:");
            filesOligomer1.ForEach(file => Console.WriteLine(file));

            Console.WriteLine("\nUsing the following files for h**o-oligomer 2:");
            filesOligomer2.ForEach(file => Console.WriteLine(file));

            float angleDegrees = (float)VectorMath.GetAngleDegrees(symmetry.GetPrincipalCoordinateSystem(options.UnitId1).UnitX, Vector3.Zero, symmetry.GetPrincipalCoordinateSystem(options.UnitId2).UnitX);

            Console.WriteLine("Angle for {0}:{1}:{2} calculated to: {3:F4}", options.Architecture, options.UnitId1, options.UnitId2, angleDegrees);

            // Parse oligomer 1 and offset it to positive Z
            foreach (string fileOligomer1 in filesOligomer1)
            {
                string pdbCodeOligomer1 = PdbQuick.CodeFromFilePath(fileOligomer1);
                IChain peptide1         = PdbQuick.ChainFromFileOrCode(fileOligomer1);

                if (peptide1 == null)
                {
                    Console.WriteLine("Pdb parsing failed for {0}", fileOligomer1);
                    continue;
                }

                peptide1.Translate(new Vector3(0, 0, 20 - Rmsd.GetBackboneCentroid(peptide1).Z));

                // Parse oligomer 2 and offset it to positive Z
                foreach (string fileOligomer2 in filesOligomer2)
                {
                    string pdbCodeOligomer2 = PdbQuick.CodeFromFilePath(fileOligomer2);
                    IChain peptide2         = PdbQuick.ChainFromFileOrCode(fileOligomer2);

                    if (peptide2 == null)
                    {
                        Console.WriteLine("Pdb parsing failed for {0}", fileOligomer2);
                        continue;
                    }

                    peptide2.Translate(new Vector3(0, 0, 20 - Rmsd.GetBackboneCentroid(peptide2).Z));

                    // Parse the repeat and offset it to positive Z
                    foreach (string fileRepeat in filesRepeat)
                    {
                        IChain repeat        = PdbQuick.ChainFromFileOrCode(fileRepeat);
                        string pdbCodeRepeat = PdbQuick.CodeFromFilePath(fileRepeat);

                        if (repeat == null)
                        {
                            Console.WriteLine("Pdb parsing failed for {0}", repeat);
                            continue;
                        }

                        repeat.Translate(new Vector3(0, 0, 20 - Rmsd.GetBackboneCentroid(repeat).Z));

                        JobStartParamsCXRCX startParams = new JobStartParamsCXRCX();
                        // things taken directly from user options
                        startParams.OutputPrefix = options.Architecture + "-" + options.UnitId1 + "-" + options.UnitId2;
                        startParams.UnitId1      = options.UnitId1;
                        startParams.UnitId2      = options.UnitId2;
                        startParams.ChainCount1  = options.Oligomerization1;
                        startParams.ChainCount2  = options.Oligomerization2;
                        startParams.TopX         = options.TopX;
                        // everything else:
                        startParams.Symmetry       = SymmetryBuilderFactory.CreateFromSymmetryName(options.Architecture);
                        startParams.PdbCodeBundle1 = pdbCodeOligomer1;
                        startParams.PdbCodeBundle2 = pdbCodeOligomer2;
                        startParams.PdbCodeRepeat  = pdbCodeRepeat;
                        startParams.Cx1            = peptide1;
                        startParams.Cx2            = peptide2;
                        startParams.Repeat         = repeat;
                        startParams.AngleDegrees   = angleDegrees;
                        startParams.Counter        = sharedCounter; // Shared counter across queued jobs
                        Debug.Assert(startParams.Validate(), "JobStartParamsCXRCX validation failure");

                        // Wait for free threads
                        _threadCountSemaphore.WaitOne();
                        sharedCounter.IncrementQueued();

                        // Start the job
                        Thread thread = new Thread(new ParameterizedThreadStart(RunJobAngleCXRCX));
                        thread.Start(startParams);
                        Console.WriteLine("Queuing triplet [Bundle {0}]:[Repeat {1}]:[Bundle {2}], {3:F2} degrees, {4:F2} % ({5}/{6})", pdbCodeOligomer1, pdbCodeRepeat, pdbCodeOligomer2, angleDegrees, startParams.Counter.PercentQueued, startParams.Counter.Queued, startParams.Counter.Total);
                    }
                }
            }
        }
Exemple #8
0
        public override bool ParseArgs(string[] args)
        {
            if (args.FirstOrDefault() != InstanceBaseFlag)
            {
                return(false);
            }

            if (!base.ParseArgs(args))
            {
                return(false);
            }

            for (int i = 0; i < args.Length; i++)
            {
                if (args[i] == "-arch")
                {
                    Architecture = args[i + 1];
                    if (!SymmetryBuilderFactory.GetKnownSymmetryNames().Contains(Architecture))
                    {
                        Console.WriteLine("Unknown '-arch' value - allowed values are:");
                        Console.Write(SymmetryBuilderFactory.GetKnownSymmetryNames().Aggregate("", (a, b) => a + "\n\t" + b));
                        Console.WriteLine();
                        return(false);
                    }
                    i++;
                    continue;
                }

                if (args[i] == "-regex_oligomer1")
                {
                    OligomerRegex1 = args[i + 1];
                    i++;
                    continue;
                }

                if (args[i] == "-regex_oligomer2")
                {
                    OligomerRegex2 = args[i + 1];
                    i++;
                    continue;
                }
                if (args[i] == "-axis1")
                {
                    UnitId1 = args[i + 1];
                    i++;
                    continue;
                }
                if (args[i] == "-axis2")
                {
                    UnitId2 = args[i + 1];
                    i++;
                    continue;
                }
            }

            if (Architecture == null || !SymmetryBuilderFactory.GetKnownSymmetryNames().Contains(Architecture))
            {
                Console.WriteLine("Mandatory '-arch' flag missing or invalid - allowed values are:");
                Console.Write(SymmetryBuilderFactory.GetKnownSymmetryNames().Aggregate("", (a, b) => a + "\n\t" + b));
                Console.WriteLine();
                return(false);
            }
            if (UnitId1 == null || !SymmetryBuilderFactory.GetSymmetryUnitIds(Architecture).Contains(UnitId1))
            {
                Console.WriteLine("Mandatory '-axis1' flag is missing or invalid - allowed values are:");
                Console.Write(SymmetryBuilderFactory.GetSymmetryUnitIds(Architecture).Aggregate("", (a, b) => a + "\n\t" + b));
                return(false);
            }
            if (UnitId2 == null || !SymmetryBuilderFactory.GetSymmetryUnitIds(Architecture).Contains(UnitId2))
            {
                Console.WriteLine("Mandatory '-axis1' flag is missing or invalid - allowed values are:");
                Console.Write(SymmetryBuilderFactory.GetSymmetryUnitIds(Architecture).Aggregate("", (a, b) => a + "\n\t" + b));
                return(false);
            }
            return(true);
        }
Exemple #9
0
        static void Main(string[] args)
        {
            string[] skip = new string[]
            {
                // questionable C2 scaffolds, IMO - don't use them
                "ZC",
                "4pwwfrxC2",
                "bex2C2G2",
                "Di13",

                // questionable C3 scaffolds IMO or lacking free termini - don't use them
                "2L6HC3",
                "C3-1BH",
                "EXTN8",
                "1na0C3int2-xtal",
                "C3V"
            };

            foreach (string symmetry in new string[] { "T" })
            {
                string basedir = Directory.GetCurrentDirectory();
                foreach (string fileNameOligomer1 in Directory.EnumerateFiles(Path.Combine(basedir, @"Database\Scaffolds\Denovo\C3")))
                {
                    if (skip.Any(str => fileNameOligomer1.Contains(str)))
                    {
                        continue;
                    }

                    IStructure oligomer1 = PdbQuick.AssemblyFromFileOrCode(fileNameOligomer1);
                    foreach (string fileNameOligomer2 in Directory.EnumerateFiles(Path.Combine(basedir, @"Database\Scaffolds\Denovo\C2")))
                    {
                        if (skip.Any(str => fileNameOligomer2.Contains(str)))
                        {
                            continue;
                        }

                        IStructure oligomer2 = PdbQuick.AssemblyFromFileOrCode(fileNameOligomer2);
                        foreach (string fileNameStrut in Directory.EnumerateFiles(Path.Combine(basedir, @"Database\Scaffolds\Denovo\repeats\saxs_and_crystal")))
                        {
                            IStructure strut = PdbQuick.AssemblyFromFileOrCode(fileNameStrut);

                            string basenameC3    = (new FileInfo(fileNameOligomer1)).Name;
                            string basenameC2    = (new FileInfo(fileNameOligomer2)).Name;
                            string basenameStrut = (new FileInfo(fileNameStrut)).Name;
                            string outputBase    = String.Format("{0}32_{1}_{2}_{3}", symmetry, basenameC3, basenameStrut, basenameC2).Replace(".pdb", "");

                            Console.WriteLine("Trying {0} + {1} + {2}", basenameC3, basenameC2, basenameStrut);

                            SymmetryBuilder builder = SymmetryBuilderFactory.CreateFromSymmetryName(symmetry);
                            List <Model>    models  = SymmetricFusionGenerator.CnSnCn(oligomer1, oligomer2, new IStructure[] { strut },
                                                                                      new int[] { 0 }, new int[] { 0 }, new int[][] { new int[] { 0 } }, builder, "C3X", "C2", 5, 5, 5, 20);

                            for (int i = 0; i < models.Count; i++)
                            {
                                Model  model      = models[i];
                                string outputName = outputBase + "_" + i;
                                PdbQuick.Save(outputName + ".pdb", model.Structure);
                                foreach (KeyValuePair <string, Selection> kvp in model.Selections)
                                {
                                    string    selectionName = kvp.Key;
                                    Selection selection     = kvp.Value;

                                    if (model.AsymmetricUnit != null)
                                    {
                                        Resfile resfile = new Resfile();
                                        resfile.SetDesignOperation(model.AsymmetricUnit, selection, ResfileDesignOperation.NOTAA, new char[] { 'W', 'M', 'P', 'C' });

                                        if (resfile.DesignOperationsCount > 0)
                                        {
                                            string[] lines       = resfile.GetFileText();
                                            string   resfileName = String.Format("{0}_{1}_asu.resfile", outputName, selectionName);
                                            File.WriteAllLines(resfileName, lines);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }