Пример #1
0
        public static bool Run(string[] args)
        {
            switch (args.FirstOrDefault())
            {
            case CxrcxFusionFlags.BaseFlag:
            {
                CxrcxFusionFlags options = new CxrcxFusionFlags();
                if (options.ParseArgs(args))
                {
                    StartJobsAngleCXRCX(options);
                }
                else
                {
                    return(false);
                }
            }
            break;

            case CxcxFusionFlags.BaseFlag:
            {
                CxcxFusionFlags options = new CxcxFusionFlags();
                if (options.ParseArgs(args))
                {
                    StartJobsAngleCXCX(options);
                }
                else
                {
                    return(false);
                }
            }
            break;

            case AsymmetricFusionFlags.BaseFlag:
            {
                AsymmetricFusionFlags options = new AsymmetricFusionFlags();
                if (options.ParseArgs(args))
                {
                    StartJobsAsymmetricPair(options);
                }
                else
                {
                    return(false);
                }
            }
            break;

            default: return(false);
            }
            return(true);
        }
Пример #2
0
        static void Main(string[] args)
        {
            try
            {
                bool okArgs = false;
                //okArgs |= (new CyclizeAssemblyFlags()).ParseArgs(args);
                //okArgs |= (new AsymmetricFusionFlags()).ParseArgs(args);
                okArgs |= (new CxrcxFusionFlags()).ParseArgs(args);


                if (!okArgs)
                {
                    throw new ArgumentException();
                }
            }
            catch
            {
                Console.WriteLine();
                Console.WriteLine("Options:");
                //Console.WriteLine(AsymmetricFusionFlags.BaseFlag + AsymmetricFusionFlags.GetUsageOptions().Aggregate("\t", (a, b) => a + "\n\t" + b));
                //Console.WriteLine();
                Console.WriteLine(CxrcxFusionFlags.BaseFlag + CxrcxFusionFlags.GetUsageOptions().Aggregate("\t", (a, b) => a + "\n\t" + b));
                //Console.WriteLine();
                //Console.WriteLine("-splice_cyclize" + CyclizeAssemblyFlags.GetUsageOptions().Aggregate("\t", (a, b) => a + "\n\t" + b));
                return;
            }

            try
            {
                FusionJobRunner.Run(args);
            }
            catch (Exception e)
            {
                Console.Write(e.StackTrace);
            }
        }
Пример #3
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);
                    }
                }
            }
        }