alignment_manager.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:11k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: alignment_manager.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:30:25  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.49
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: alignment_manager.hpp,v 1000.1 2004/04/12 17:30:25 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Authors:  Paul Thiessen
  35. *
  36. * File Description:
  37. *      Classes to manipulate alignments
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_ALIGNMENT_MANAGER__HPP
  42. #define CN3D_ALIGNMENT_MANAGER__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <objects/cdd/Cdd.hpp>
  45. #include <objects/cdd/Update_align.hpp>
  46. #include <list>
  47. #include <vector>
  48. #include <map>
  49. #include "vector_math.hpp"
  50. #include "show_hide_callback.hpp"
  51. #include "style_manager.hpp"
  52. BEGIN_SCOPE(Cn3D)
  53. class Sequence;
  54. class SequenceSet;
  55. class AlignmentSet;
  56. class MasterSlaveAlignment;
  57. class SequenceViewer;
  58. class Messenger;
  59. class BlockMultipleAlignment;
  60. class Threader;
  61. class ThreaderOptions;
  62. class UpdateViewer;
  63. class BLASTer;
  64. class StructureSet;
  65. class MoleculeIdentifier;
  66. class BlockAligner;
  67. class AlignmentManager : public ShowHideCallbackObject
  68. {
  69. public:
  70.     AlignmentManager(const SequenceSet *sSet, const AlignmentSet *aSet);
  71.     typedef std::list< ncbi::CRef< ncbi::objects::CUpdate_align > > UpdateAlignList;
  72.     AlignmentManager(const SequenceSet *sSet, const AlignmentSet *aSet, const UpdateAlignList& updates);
  73.     ~AlignmentManager(void);
  74.     Threader *threader; // made public so viewers have access to it
  75.     BLASTer *blaster;
  76.     BlockAligner *blockAligner;
  77.     void ReplaceUpdatesInASN(ncbi::objects::CCdd::TPending& newUpdates) const;
  78.     // creates the current multiple alignment from the given pairwise alignments (which are
  79.     // assumed to be members of the AlignmentSet).
  80.     typedef std::list < const MasterSlaveAlignment * > PairwiseAlignmentList;
  81.     BlockMultipleAlignment *
  82.         CreateMultipleFromPairwiseWithIBM(const PairwiseAlignmentList& alignments);
  83.     // change the underlying pairwise alignments to match the given multiple and row order
  84.     void SavePairwiseFromMultiple(const BlockMultipleAlignment *multiple,
  85.         const std::vector < int >& rowOrder);
  86.     // recomputes structure alignments for all slave structures in the current
  87.     // sequence alignment
  88.     void RealignAllSlaveStructures(void) const;
  89.     // stuff relating to show/hide of alignment rows (slaves)
  90.     void GetAlignmentSetSlaveSequences(std::vector < const Sequence * > *sequences) const;
  91.     void GetAlignmentSetSlaveVisibilities(std::vector < bool > *visibilities) const;
  92.     void ShowHideCallbackFunction(const std::vector < bool >& itemsEnabled);
  93.     void NewMultipleWithRows(const std::vector < bool >& visibilities);
  94.     // find out if a residue is aligned - only works for non-repeated sequences!
  95.     bool IsAligned(const Sequence *sequence, int seqIndex) const;
  96.     // find out if a Sequence is part of the current alignment
  97.     bool IsInAlignment(const Sequence *sequence) const;
  98.     // get a color for an aligned residue that's dependent on the entire alignment
  99.     // (e.g., for coloring by sequence conservation)
  100.     const Vector * GetAlignmentColor(const Sequence *sequence,
  101.         int seqIndex, StyleSettings::eColorScheme colorScheme) const;
  102.     // sequence alignment algorithm functions
  103.     void RealignSlaveSequences(BlockMultipleAlignment *multiple, const std::vector < int >& slavesToRealign);
  104.     void ThreadUpdate(const ThreaderOptions& options, BlockMultipleAlignment *single);
  105.     void ThreadAllUpdates(const ThreaderOptions& options);
  106.     void BlockAlignAllUpdates(void );
  107.     void BlockAlignUpdate(BlockMultipleAlignment *single);
  108.     // merge functions
  109.     typedef std::map < BlockMultipleAlignment *, bool > UpdateMap;
  110.     void MergeUpdates(const UpdateMap& updates, bool mergeToNeighbor);
  111.     // calculates row scores using the threader
  112.     void CalculateRowScoresWithThreader(double weightPSSM);
  113.     // get the working alignment
  114.     const BlockMultipleAlignment * GetCurrentMultipleAlignment(void) const;
  115.     // get a list of chain sequences when we're viewing a single structure
  116.     bool GetStructureProteins(std::vector < const Sequence * > *chains) const;
  117.     // get a list of (slave) sequences present in the updates
  118.     int NUpdates(void) const;
  119.     void GetUpdateSequences(std::list < const Sequence * > *updateSequences) const;
  120.     // remove sequence from both multiple alignment and updates
  121.     void PurgeSequence(const MoleculeIdentifier *identifier);
  122.     // show sequence/alignment/update viewer
  123.     void ShowSequenceViewer(void) const;
  124.     void ShowUpdateWindow(void) const;
  125. private:
  126.     void Init(void);
  127.     void NewAlignments(const SequenceSet *sSet, const AlignmentSet *aSet);
  128.     const SequenceSet *sequenceSet;
  129.     const AlignmentSet *alignmentSet;
  130.     mutable std::vector < bool > slavesVisible;
  131.     // viewer for the current alignment - will own the current alignment (if any)
  132.     SequenceViewer *sequenceViewer;
  133.     // viewer for updates (grab-bag of pairwise alignments)
  134.     UpdateViewer *updateViewer;
  135.     // for change-type comparison
  136.     BlockMultipleAlignment *originalMultiple;
  137.     std::vector < int > originalRowOrder;
  138. };
  139. END_SCOPE(Cn3D)
  140. #endif // CN3D_ALIGNMENT_MANAGER__HPP
  141. /*
  142. * ---------------------------------------------------------------------------
  143. * $Log: alignment_manager.hpp,v $
  144. * Revision 1000.1  2004/04/12 17:30:25  gouriano
  145. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.49
  146. *
  147. * Revision 1.49  2004/02/19 17:04:40  thiessen
  148. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  149. *
  150. * Revision 1.48  2003/10/13 13:23:31  thiessen
  151. * add -i option to show import window
  152. *
  153. * Revision 1.47  2003/07/17 16:52:34  thiessen
  154. * add FileSaved message with edit typing
  155. *
  156. * Revision 1.46  2003/02/03 19:20:00  thiessen
  157. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  158. *
  159. * Revision 1.45  2003/01/29 01:41:05  thiessen
  160. * add merge neighbor instead of merge near highlight
  161. *
  162. * Revision 1.44  2003/01/28 21:07:56  thiessen
  163. * add block fit coloring algorithm; tweak row dragging; fix style bug
  164. *
  165. * Revision 1.43  2002/11/06 00:18:10  thiessen
  166. * fixes for new CRef/const rules in objects
  167. *
  168. * Revision 1.42  2002/09/16 21:24:58  thiessen
  169. * add block freezing to block aligner
  170. *
  171. * Revision 1.41  2002/07/26 15:28:44  thiessen
  172. * add Alejandro's block alignment algorithm
  173. *
  174. * Revision 1.40  2002/03/07 19:16:04  thiessen
  175. * don't auto-show sequence windows
  176. *
  177. * Revision 1.39  2002/02/19 14:59:38  thiessen
  178. * add CDD reject and purge sequence
  179. *
  180. * Revision 1.38  2001/11/30 14:02:05  thiessen
  181. * progress on sequence imports to single structures
  182. *
  183. * Revision 1.37  2001/11/27 16:26:06  thiessen
  184. * major update to data management system
  185. *
  186. * Revision 1.36  2001/09/27 15:36:47  thiessen
  187. * decouple sequence import and BLAST
  188. *
  189. * Revision 1.35  2001/05/31 18:46:25  thiessen
  190. * add preliminary style dialog; remove LIST_TYPE; add thread single and delete all; misc tweaks
  191. *
  192. * Revision 1.34  2001/05/02 13:46:14  thiessen
  193. * major revision of stuff relating to saving of updates; allow stored null-alignments
  194. *
  195. * Revision 1.33  2001/04/19 12:58:25  thiessen
  196. * allow merge and delete of individual updates
  197. *
  198. * Revision 1.32  2001/04/17 20:15:23  thiessen
  199. * load 'pending' Cdd alignments into update window
  200. *
  201. * Revision 1.31  2001/04/05 22:54:50  thiessen
  202. * change bg color handling ; show geometry violations
  203. *
  204. * Revision 1.30  2001/04/04 00:27:21  thiessen
  205. * major update - add merging, threader GUI controls
  206. *
  207. * Revision 1.29  2001/03/30 03:07:08  thiessen
  208. * add threader score calculation & sorting
  209. *
  210. * Revision 1.28  2001/03/09 15:48:42  thiessen
  211. * major changes to add initial update viewer
  212. *
  213. * Revision 1.27  2001/03/02 15:33:43  thiessen
  214. * minor fixes to save & show/hide dialogs, wx string headers
  215. *
  216. * Revision 1.26  2001/02/08 23:01:13  thiessen
  217. * hook up C-toolkit stuff for threading; working PSSM calculation
  218. *
  219. * Revision 1.25  2000/12/29 19:23:49  thiessen
  220. * save row order
  221. *
  222. * Revision 1.24  2000/12/15 15:52:07  thiessen
  223. * show/hide system installed
  224. *
  225. * Revision 1.23  2000/11/30 15:49:06  thiessen
  226. * add show/hide rows; unpack sec. struc. and domain features
  227. *
  228. * Revision 1.22  2000/11/17 19:47:37  thiessen
  229. * working show/hide alignment row
  230. *
  231. * Revision 1.21  2000/11/13 18:05:57  thiessen
  232. * working structure re-superpositioning
  233. *
  234. * Revision 1.20  2000/11/11 21:12:06  thiessen
  235. * create Seq-annot from BlockMultipleAlignment
  236. *
  237. * Revision 1.19  2000/11/03 01:12:17  thiessen
  238. * fix memory problem with alignment cloning
  239. *
  240. * Revision 1.18  2000/11/02 16:48:22  thiessen
  241. * working editor undo; dynamic slave transforms
  242. *
  243. * Revision 1.17  2000/10/17 14:34:18  thiessen
  244. * added row shift - editor basically complete
  245. *
  246. * Revision 1.16  2000/10/16 20:02:17  thiessen
  247. * working block creation
  248. *
  249. * Revision 1.15  2000/10/12 19:20:37  thiessen
  250. * working block deletion
  251. *
  252. * Revision 1.14  2000/10/12 16:22:37  thiessen
  253. * working block split
  254. *
  255. * Revision 1.13  2000/10/12 02:14:32  thiessen
  256. * working block boundary editing
  257. *
  258. * Revision 1.12  2000/10/05 18:34:35  thiessen
  259. * first working editing operation
  260. *
  261. * Revision 1.11  2000/10/04 17:40:44  thiessen
  262. * rearrange STL #includes
  263. *
  264. * Revision 1.10  2000/10/02 23:25:06  thiessen
  265. * working sequence identifier window in sequence viewer
  266. *
  267. * Revision 1.9  2000/09/20 22:22:02  thiessen
  268. * working conservation coloring; split and center unaligned justification
  269. *
  270. * Revision 1.8  2000/09/15 19:24:33  thiessen
  271. * allow repeated structures w/o different local id
  272. *
  273. * Revision 1.7  2000/09/11 22:57:55  thiessen
  274. * working highlighting
  275. *
  276. * Revision 1.6  2000/09/11 14:06:02  thiessen
  277. * working alignment coloring
  278. *
  279. * Revision 1.5  2000/09/11 01:45:52  thiessen
  280. * working messenger for sequence<->structure window communication
  281. *
  282. * Revision 1.4  2000/09/08 20:16:10  thiessen
  283. * working dynamic alignment views
  284. *
  285. * Revision 1.3  2000/08/30 23:45:36  thiessen
  286. * working alignment display
  287. *
  288. * Revision 1.2  2000/08/30 19:49:02  thiessen
  289. * working sequence window
  290. *
  291. * Revision 1.1  2000/08/29 04:34:14  thiessen
  292. * working alignment manager, IBM
  293. *
  294. */