static void Main(string[] args) { var parameters = new string[, ] { { "[pdb_or_atoms_file]", "input structure for sequence" }, { "[fasta_file]", "input sequence for structure" }, { "[[output_file]]", "optional output file" }, }; var maxParamLength = parameters.Cast <string>().Where((a, i) => i % 2 == 0).Max(a => a.Length); var exeFilename = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName); if (args.Length < 1) { Console.WriteLine(exeFilename + @" is a program to calculate offset between the sequence and structure."); Console.WriteLine(); Console.WriteLine(@"Usage:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" " + String.Join(" ", parameters.Cast <string>().Where((a, i) => i % 2 == 0)), maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Example:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" ""c:\pdb_db\atoms\atoms1a12.pdb"" ""c:\pdb_db\fasta\atoms1a12.fasta""", maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Arguments:"); for (var i = 0; i < parameters.GetLength(0); i++) { Console.WriteLine(@" " + parameters[i, 0].PadLeft(maxParamLength, ' ') + " " + ProteinBioClass.WrapConsoleText(parameters[i, 1], maxParamLength + 2, 1, false)); } Console.WriteLine(); return; } // load arguments var p = 0; var atomsFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; atomsFilename = atomsFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + atomsFilename); p++; var inputFastaFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; inputFastaFilename = inputFastaFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + inputFastaFilename); p++; var outputDataFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; outputDataFilename = outputDataFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + outputDataFilename); Console.WriteLine(); var struct_seq = ProteinBioinformaticsSharedLibrary.ProteinBioClass.StructureFileToAaSequence(atomsFilename, null, false); //foreach (var s in struct_seq) //Console.WriteLine(s); //var fasta = File.ReadAllLines(inputFastaFilename); //foreach (var line in fasta) //{ // if (string.IsNullOrWhiteSpace(line))continue; // if (line[0] == '>') // { // if (line.Contains()) // } //} /// not finished! }
static void Main(string[] args) { var parameters = new string[, ] { { "[pdb_file]", "PDB ~v3.3 Protein Data Bank format file [*.pdb, *.ent]" }, { "[interface-interface_file]", "interface-interface file" }, { "[[chain_ids]]", "molecule chains to output [* for all]" }, { "[[output_file]]", "optional output file. use ? for chain id. when ommitted, output to console" }, }; var maxParamLength = parameters.Cast <string>().Where((a, i) => i % 2 == 0).Max(a => a.Length); var exeFilename = Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); if (args.Length == 0) { Console.WriteLine(exeFilename + @" is a program to extract ATOM records from a PDB file."); Console.WriteLine(); Console.WriteLine(@"Usage:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" " + String.Join(" ", parameters.Cast <string>().Where((a, i) => i % 2 == 0)), maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Example:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" ""c:\pdb_db\pdb1a12.pdb"" 8.0 ""c:\pdb_atoms\atoms1a12.pdb""", maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Arguments:"); for (var i = 0; i < parameters.GetLength(0); i++) { Console.WriteLine(@" " + parameters[i, 0].PadLeft(maxParamLength, ' ') + " " + ProteinBioClass.WrapConsoleText(parameters[i, 1], maxParamLength + 2, 1, false)); } Console.WriteLine(); return; } // load and echo arguments var p = 0; var pdbFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; pdbFilename = pdbFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + pdbFilename); p++; var interfaceInterfaceFile = args.Length > p && args[p].Length > 0 ? args[p].ToUpperInvariant() : ""; interfaceInterfaceFile = interfaceInterfaceFile.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + interfaceInterfaceFile); p++; var chainIds = args.Length > p && args[p].Length > 0 ? args[p] : ""; Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + chainIds); p++; var outputFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; outputFilename = outputFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + outputFilename); Console.WriteLine(); if (!File.Exists(pdbFilename)) { Console.WriteLine("; File not found: " + pdbFilename); return; } if (!File.Exists(interfaceInterfaceFile)) { Console.WriteLine("; File not found: " + interfaceInterfaceFile); return; } if (string.IsNullOrWhiteSpace(pdbFilename)) { return; } if (chainIds.Contains('*')) { chainIds = null; } var chainIdWhiteList = !string.IsNullOrEmpty(chainIds) ? chainIds.ToUpperInvariant().Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries) : null; var interfaceData = ComplexInterfaces.ComplexInterfaces.InterfaceInterfaceData.Load(interfaceInterfaceFile); var terminatedChains = new List <string>(); var pdbfilenameShort = Path.GetFileNameWithoutExtension(pdbFilename); var pdbId = pdbfilenameShort.Substring(pdbfilenameShort.Length - 4).ToUpperInvariant(); var lines = File.ReadAllLines(pdbFilename); var result = new List <Tuple <string, string> >(); var interfaceDataChains = interfaceData.Select(a => a.ReceptorChainId).Distinct().ToList(); var interfaceDataStart = interfaceDataChains.Select(a => interfaceData.Where(b => b.ReceptorChainId == a).Min(b => b.ReceptorInterfaceResSeqStart)).ToList(); var interfaceDataEnd = interfaceDataChains.Select(a => interfaceData.Where(b => b.ReceptorChainId == a).Max(b => b.ReceptorInterfaceResSeqEnd)).ToList(); foreach (var line in lines) { if (line.Length < 22) { continue; } if (line.Substring(0, 4).ToUpperInvariant() == "TER ") { var chainId = ("" + line[21]).ToUpperInvariant(); terminatedChains.Add(chainId); } if (line.Substring(0, 5).ToUpperInvariant() == "ATOM ") { var chainId = ("" + line[21]).ToUpperInvariant(); if (terminatedChains.Contains(chainId)) { continue; } if (chainIdWhiteList != null && chainIdWhiteList.Length > 0 && !chainIdWhiteList.Contains(chainId)) { continue; } if (!interfaceDataChains.Contains(chainId[0])) { continue; } //if (caTraceOnlyBool && (line[13] != 'C' || line[14] != 'A')) continue; var interfaceDataChainIndex = interfaceDataChains.IndexOf(chainId[0]); var resSeq = int.Parse(line.Substring(22, 4).Trim()); if (resSeq >= interfaceDataStart[interfaceDataChainIndex] && resSeq <= interfaceDataEnd[interfaceDataChainIndex]) { result.Add(new Tuple <string, string>(chainId, line)); } } } if (!string.IsNullOrWhiteSpace(outputFilename)) { Directory.CreateDirectory(Path.GetDirectoryName(outputFilename.Replace("?", ""))); if (!outputFilename.Contains("?")) { File.WriteAllLines(outputFilename, result.Select(a => a.Item2).ToList()); } else { var chains = result.Select(a => a.Item1).Distinct().ToList(); foreach (var chain in chains) { var outputFilename2 = outputFilename.Replace("?", ""); outputFilename2 = Path.GetDirectoryName(outputFilename2) + @"\" + Path.GetFileNameWithoutExtension(outputFilename2) + chain + Path.GetExtension(outputFilename2); File.WriteAllLines(outputFilename2, result.Where(a => a.Item1 == chain).Select(a => a.Item2).ToList()); } } } else { foreach (var line in result) { Console.WriteLine(line); } Console.WriteLine(); } }
public static void Main(string[] args) { var parameters = new string[, ] { { "[pdb_or_atoms_file]", "standard crystal pdb file or output from the ComplexAtoms program" }, { "[[pad_missing]]", "Y or N (default: Y)" }, { "[[output_fasta_file]]", "optional output fasta file. when ommitted, output to console" }, { "[[append_or_overwrite]]", "optional (A) append or (O) overwrite (default: overwrite)" }, }; var maxParamLength = parameters.Cast <string>().Where((a, i) => i % 2 == 0).Max(a => a.Length); var exeFilename = Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); if (args.Length < 1) { Console.WriteLine(exeFilename + @" is a program to extract the protein amino acid fasta sequence from protein structure pdb file."); Console.WriteLine(); Console.WriteLine(@"Usage:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" " + String.Join(" ", parameters.Cast <string>().Where((a, i) => i % 2 == 0)), maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Example:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" ""c:\pdb_db\atoms\atoms1a12.pdb"" ""c:\pdb_db\fasta_from_pdb\atoms1a12.pdb.fasta""", maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Arguments:"); for (var i = 0; i < parameters.GetLength(0); i++) { Console.WriteLine(@" " + parameters[i, 0].PadLeft(maxParamLength, ' ') + " " + ProteinBioClass.WrapConsoleText(parameters[i, 1], maxParamLength + 2, 1, false)); } Console.WriteLine(); return; } // load arguments var p = 0; var atomsFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; atomsFilename = atomsFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + atomsFilename); p++; var padMissing = args.Length > p && args[p].Length > 0 ? args[p] : "Y"; padMissing = padMissing.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + padMissing); if (padMissing != "Y" && padMissing != "N") { padMissing = "Y"; } var padMissingBool = padMissing == "Y"; p++; var outputFastaFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; outputFastaFilename = outputFastaFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + outputFastaFilename); p++; var appendOrOverwrite = args.Length > p && args[p].Length > 0 ? args[p] : ""; appendOrOverwrite = appendOrOverwrite.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + appendOrOverwrite); if (!(string.IsNullOrWhiteSpace(appendOrOverwrite) || appendOrOverwrite == "O" || appendOrOverwrite == "A")) { return; } Console.WriteLine(); var sequenceList = Sequence.LoadStructureFile(atomsFilename, null, padMissingBool);// ProteinBioClass.StructureFileToAaFastaSequence(atomsFilename, null, padMissingBool); var output = Sequence.GetAsFasta(sequenceList); if (string.IsNullOrWhiteSpace(outputFastaFilename)) { Console.WriteLine(); Console.WriteLine(output); Console.WriteLine(); } else { Directory.CreateDirectory(Path.GetDirectoryName(outputFastaFilename)); if (appendOrOverwrite == "A" && File.Exists(outputFastaFilename)) { var data = File.ReadAllText(outputFastaFilename); if (!data.EndsWith(Environment.NewLine)) { data = data + Environment.NewLine; } output = data + output; } File.WriteAllText(outputFastaFilename, output); } }
static void Main(string[] args) { //var s1 = // @"XXXXXXXXXXXXXXXXXXXXKKVKVSHRSHSTEPGLVLTLGQGDVGQLGLGENVMERKKPALVSIPEDVVQAEAGGMHTVCLSKSGQVYSFGCNDEGALGRDTSVEGSEMVPGKVELQEKVVQVSAGDSHTAALTDDGRVFLWGSFRDNNGVIGLLEPMKKSMVPVQVQLDVPVVKVASGNDHLVMLTADGDLYTLGCGEQGQLGRVPELFANRGGRQGLERLLVPKCVMLKSRGSRGHVRFQDAFCGAYFTFAISHEGHVYGFGLSNYHQLGTPGTESCFIPQNLTSFKNSTKSWVGFSGGQHHTVCMDSEGKAYSLGRAEYGRLGLGEGAEEKSIPTLISRLPAVSSVACGASVGYAVTKDGRVFAWGMGTNYQLGTGQDEDAWSPVEMMGKQLENRVVLSVSSGGQHTVLLVKDKEQS"; //var s2 = @"RRSPPADAIPKSKKVKVSHRSHSTEPGLVLTLGQGDVGQLGLGENVMERKKPALVSIPEDVVQAEAGGMHTVCLSKSGQVYSFGCNDEGALGRDTSVEGSEMVPGKVELQEKVVQVSAGDSHTAALTDDGRVFLWGSFRDNNGVIGLLEPMKKSMVPVQVQLDVPVVKVASGNDHLVMLTADGDLYTLGCGEQGQLGRVPELFANRGGRQGLERLLVPKCVMLKSRGSRGHVRFQDAFCGAYFTFAISHEGHVYGFGLSNYHQLGTPGTESCFIPQNLTSFKNSTKSWVGFSGGQHHTVCMDSEGKAYSLGRAEYGRLGLGEGAEEKSIPTLISRLPAVSSVACGASVGYAVTKDGRVFAWGMGTNYQLGTGQDEDAWSPVEMMGKQLENRVVLSVSSGGQHTVLLVKDKEQS"; //var x = SimpleAlignmentOffset(s1,s2); //Console.WriteLine(); //Console.WriteLine(x.Item1); //Console.WriteLine(x.Item2); //Console.WriteLine(); //Console.ReadLine(); //return; // MutateSequence example.fasta start end mutation original (will find closest to start/end in case of sequence/structure index misalignment) var parameters = new string[, ] { { "[input_fasta_file]", "fasta file with sequence to mutate" }, { "[chain_ids]", "chain ids to mutate" }, { "[start_positions]", "mutation start position (one based)" }, { "[end_positions]", "mutation end position (one based)" }, { "[offsets]", "offsets (for where pdb index doesn't match fasta sequence index) (one based)" }, { "[mutation_sequence]", "new amino acids to overwrite with" }, { "[[output_fasta_file]]", "optional output fasta file. when ommitted, output to console" }, }; var maxParamLength = parameters.Cast <string>().Where((a, i) => i % 2 == 0).Max(a => a.Length); var exeFilename = Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); if (args.Length < 5) { Console.WriteLine(exeFilename + @" is a program to mutate (substitute) a subsequence of a protein amino acid sequence within a fasta file."); Console.WriteLine(); Console.WriteLine(@"Usage:"); Console.WriteLine( ProteinBioClass.WrapConsoleText( exeFilename + @" " + String.Join(" ", parameters.Cast <string>().Where((a, i) => i % 2 == 0)), maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Example:"); Console.WriteLine( ProteinBioClass.WrapConsoleText( exeFilename + @" ""c:\pdb_db\fasta\fasta_pdb1a12.pdb.fasta"" A,B,C 10,76,100 15,77,102 GBVBGA,AA,GHG ""c:\pdb_db\fasta_mutated\mutated_pdb1a12.pdb.fasta""", maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Arguments:"); for (var i = 0; i < parameters.GetLength(0); i++) { Console.WriteLine(@" " + parameters[i, 0].PadLeft(maxParamLength, ' ') + " " + ProteinBioClass.WrapConsoleText(parameters[i, 1], maxParamLength + 2, 1, false)); } Console.WriteLine(); return; } var p = 0; var input_fasta_file = args.Length > p && args[p].Length > 0 ? args[p] : ""; input_fasta_file = input_fasta_file.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + input_fasta_file); p++; var chain_ids = args.Length > p && args[p].Length > 0 ? args[p] : ""; chain_ids = chain_ids.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + chain_ids); var chain_ids_split = chain_ids.ToUpperInvariant().Split(','); p++; var start_position = args.Length > p && args[p].Length > 0 ? args[p] : ""; start_position = start_position.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + start_position); var start_position_split = start_position.Split(',').Select(int.Parse).ToArray(); p++; var end_position = args.Length > p && args[p].Length > 0 ? args[p] : ""; end_position = end_position.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + end_position); var end_position_split = end_position.Split(',').Select(int.Parse).ToArray(); p++; var offset_position = args.Length > p && args[p].Length > 0 ? args[p] : ""; offset_position = offset_position.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + offset_position); var offset_position_split = offset_position.Split(',').Select(int.Parse).ToArray(); p++; var mutation_sequence = args.Length > p && args[p].Length > 0 ? args[p] : ""; mutation_sequence = mutation_sequence.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + mutation_sequence); var mutation_sequence_split = mutation_sequence.Split(','); p++; var output_fasta_file = args.Length > p && args[p].Length > 0 ? args[p] : ""; output_fasta_file = output_fasta_file.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + output_fasta_file); Console.WriteLine(); MutateFastaSequenceSave(input_fasta_file, chain_ids_split, start_position_split, end_position_split, offset_position_split, mutation_sequence_split, output_fasta_file); }
static void Main(string[] args) { const int atom_chain = 21; const int atom_chain_len = 1; const int atom_icode = 26; const int atom_icode_len = 1; const int atom_type = 14; const int atom_type_len = 3; const int atom_resseq = 22; const int atom_resseq_len = 4; var parameters = new string[, ] { { "[pdb_file]", "PDB ~v3.3 Protein Data Bank format file [*.pdb, *.ent]" }, { "[[subset]]", "-, mc, sc, ca" }, { "[[chain_ids]]", "molecule chains to output [2 formats: - for all, ABC, or A,1,50,B,2,40,C,5,200]" }, { "[[output_file]]", "optional output file. use ? for chain id. when ommitted, output to console" }, }; var maxParamLength = parameters.Cast <string>().Where((a, i) => i % 2 == 0).Max(a => a.Length); var exeFilename = Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); if (args.Length == 0) { Console.WriteLine(exeFilename + @" is a program to extract ATOM records from a PDB file."); Console.WriteLine(); Console.WriteLine(@"Usage:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" " + String.Join(" ", parameters.Cast <string>().Where((a, i) => i % 2 == 0)), maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Example:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" ""c:\pdb_db\pdb1a12.pdb"" 8.0 ""c:\pdb_atoms\atoms1a12.pdb""", maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Arguments:"); for (var i = 0; i < parameters.GetLength(0); i++) { Console.WriteLine(@" " + parameters[i, 0].PadLeft(maxParamLength, ' ') + " " + ProteinBioClass.WrapConsoleText(parameters[i, 1], maxParamLength + 2, 1, false)); } Console.WriteLine(); return; } // load and echo arguments var p = 0; var pdbFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; pdbFilename = pdbFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + pdbFilename); p++; var subset = args.Length > p && args[p].Length > 0 ? args[p].ToUpperInvariant() : ""; Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + subset); p++; var chainIds = args.Length > p && args[p].Length > 0 ? args[p] : ""; Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + chainIds); p++; var outputFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; outputFilename = outputFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + outputFilename); Console.WriteLine(); if (string.IsNullOrWhiteSpace(pdbFilename)) { return; } if (!File.Exists(pdbFilename)) { return; } if (chainIds.Contains('-')) { chainIds = null; } var chainStartEnd = new List <Tuple <char, int, int> >(); var chainIdsSplit = chainIds?.Split(',').ToList(); char[] chainIdWhiteList; if (chainIdsSplit?.Count > 1) { if (chainIdsSplit.Count % 3 != 0) { return; } for (var i = 0; i < chainIdsSplit.Count; i += 3) { var id = chainIdsSplit[i + 0][0]; var start = chainIdsSplit[i + 1]; if (string.IsNullOrWhiteSpace(start)) { start = "-1"; } var end = chainIdsSplit[i + 2]; if (string.IsNullOrWhiteSpace(end)) { end = "-1"; } chainStartEnd.Add(new Tuple <char, int, int>(id, int.Parse(start), int.Parse(end))); } chainIdWhiteList = chainStartEnd.Select(a => a.Item1).Distinct().ToArray(); } else { chainIdWhiteList = chainIds?.Where(char.IsLetter).Distinct().ToArray();//!string.IsNullOrEmpty(chainIds) ? chainIds.ToUpperInvariant().Split(new char[] { ' ', ',' },StringSplitOptions.RemoveEmptyEntries) : null; } var terminatedChains = new List <char>(); var pdbfilenameShort = Path.GetFileNameWithoutExtension(pdbFilename); var pdbId = pdbfilenameShort.Substring(pdbfilenameShort.Length - 4).ToUpperInvariant(); var lines = File.ReadAllLines(pdbFilename); var result = new List <Tuple <char, string> >(); string[] ca = new string[] { "CA" }; string[] bb = new[] { "N", "CA", "C", "O" }; foreach (var line in lines) { if (line.Length < 22) { continue; } if (line.Substring(0, 4).ToUpperInvariant() == "TER ") { var chainId = line[21];//).ToUpperInvariant(); terminatedChains.Add(chainId); } if (line.Substring(0, 5).ToUpperInvariant() == "ATOM ") { var chainId = line[21];//).ToUpperInvariant(); if (terminatedChains.Contains(chainId)) { continue; } if (chainIdWhiteList != null && chainIdWhiteList.Length > 0 && !chainIdWhiteList.Contains(chainId)) { continue; } //if (subset == "ca" || subset == "sc") && (line[13] != 'C' || line[14] != 'A')) continue; var add = false; var atom_type_s = line.Substring(13, 3).Trim(); if (atom_type_s[0] != 'C' && atom_type_s[0] != 'N' && atom_type_s[0] != 'O') { continue; } // check chainIdsSplit var resId = int.Parse(line.Substring(atom_resseq, atom_resseq_len)); var chainStartEndItem = chainStartEnd.FirstOrDefault(a => a.Item1 == chainId); if (chainStartEndItem != null) { if (!((chainStartEndItem.Item2 == -1 || resId >= chainStartEndItem.Item2) && (chainStartEndItem.Item3 == -1 || resId <= chainStartEndItem.Item3))) { continue; } } if (subset == "-") { add = true; } else if (subset == "CA" && ca.Contains(atom_type_s)) { add = true; } else if (subset == "MC" && bb.Contains(atom_type_s)) { add = true; } else if (subset == "SC" && !bb.Contains(atom_type_s)) { add = true; } if (add) { result.Add(new Tuple <char, string>(chainId, line)); } } } if (!string.IsNullOrWhiteSpace(outputFilename)) { var outputFilename2 = outputFilename.Replace("?", ""); Directory.CreateDirectory(Path.GetDirectoryName(outputFilename2)); if (!outputFilename.Contains("?")) { File.WriteAllLines(outputFilename, result.Select(a => a.Item2).ToList()); } else if (outputFilename.Contains("??")) { var chains = new string(result.Select(a => a.Item1).Where(char.IsLetter).Distinct().OrderBy(a => a).ToArray()); outputFilename2 = Path.GetDirectoryName(outputFilename2) + @"\" + Path.GetFileNameWithoutExtension(outputFilename2) + chains + Path.GetExtension(outputFilename2); File.WriteAllLines(outputFilename2, result.Select(a => a.Item2).ToList()); } else if (outputFilename.Contains("?")) { var chains = result.Select(a => a.Item1).Distinct().ToList(); foreach (var chain in chains) { outputFilename2 = outputFilename.Replace("?", ""); outputFilename2 = Path.GetDirectoryName(outputFilename2) + @"\" + Path.GetFileNameWithoutExtension(outputFilename2) + chain + Path.GetExtension(outputFilename2); File.WriteAllLines(outputFilename2, result.Where(a => a.Item1 == chain).Select(a => a.Item2).ToList()); } } } else { foreach (var line in result) { Console.WriteLine(line); } Console.WriteLine(); } }
static void Main(string[] args) { var parameters = new string[, ] { { "[pdb_or_atoms_file]", "output from the ComplexAtoms program" }, { "[max_distance]", "maximum allowed contact distance in angstroms [i.e. 5.0 or 8.0]" }, { "[[output_file]]", "optional output file. when ommitted, output to console" }, { "[[overwrite]]", "overwrite if output file exists" } }; var maxParamLength = parameters.Cast <string>().Where((a, i) => i % 2 == 0).Max(a => a.Length); var exeFilename = Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); if (args.Length == 0) { Console.WriteLine(exeFilename + @" is a program to list atomic contacts for a PDB file ATOM records."); Console.WriteLine(); Console.WriteLine(@"Usage:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" " + String.Join(" ", parameters.Cast <string>().Where((a, i) => i % 2 == 0)), maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Example:"); Console.WriteLine(ProteinBioClass.WrapConsoleText(exeFilename + @" ""c:\pdb_db\pdb1a12.pdb"" 8.0 ""c:\pdb_atoms\atoms1a12.pdb""", maxParamLength + 2, 1)); Console.WriteLine(); Console.WriteLine(@"Arguments:"); for (var i = 0; i < parameters.GetLength(0); i++) { Console.WriteLine(@" " + parameters[i, 0].PadLeft(maxParamLength, ' ') + " " + ProteinBioClass.WrapConsoleText(parameters[i, 1], maxParamLength + 2, 1, false)); } Console.WriteLine(); //return; } // load arguments var p = 0; var atomsFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; atomsFilename = atomsFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + atomsFilename); p++; var maxDistance = args.Length > p && args[p].Length > 0 ? Decimal.Parse(args[p]) : 0.0m; Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + maxDistance); p++; var outputFilename = args.Length > p && args[p].Length > 0 ? args[p] : ""; outputFilename = outputFilename.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + outputFilename); p++; var overwrite = args.Length > p && args[p].Length > 0 ? args[p] : ""; overwrite = overwrite.Replace("\"", ""); Console.WriteLine("; " + parameters[p, 0].PadLeft(maxParamLength, ' ') + " = " + overwrite); if (!string.IsNullOrWhiteSpace(overwrite) && overwrite.ToUpperInvariant() != "Y" && File.Exists(outputFilename)) { Console.Write("; File exists, skipping."); return; } Console.WriteLine(); if (!File.Exists(atomsFilename)) { return; } var interactions = ProteinBioClass.FindInteractions(CancellationToken.None, maxDistance, atomsFilename, new Dictionary <string, List <char> >()); if (!string.IsNullOrWhiteSpace(outputFilename)) { ProteinBioClass.AtomPair.SaveAtomPairList(outputFilename, interactions); } else { //Console.WriteLine("; Atom pairs with contacts: " + interactions.Count); foreach (var a in interactions.Select(a => a.ToString()).ToList()) { Console.WriteLine(a); } } }