/***************************************************************************** # Copyright (C) 1994-2008 by David Gordon. # All rights reserved. # # This software is part of a beta-test version of the Consed/Autofinish # package. It should not be redistributed or # used for any commercial purpose, including commercially funded # sequencing, without written permission from the author and the # University of Washington. # # This software is provided ``AS IS'' and any express or implied # warranties, including, but not limited to, the implied warranties of # merchantability and fitness for a particular purpose, are disclaimed. # In no event shall the authors or the University of Washington be # liable for any direct, indirect, incidental, special, exemplary, or # consequential damages (including, but not limited to, procurement of # substitute goods or services; loss of use, data, or profits; or # business interruption) however caused and on any theory of liability, # whether in contract, strict liability, or tort (including negligence # or otherwise) arising in any way out of the use of this software, even # if advised of the possibility of such damage. # # Building Consed from source is error prone and not simple which is # why I provide executables. Due to time limitations I cannot # provide any assistance in building Consed. Even if you do not # modify the source, you may introduce errors due to using a # different version of the compiler, a different version of motif, # different versions of other libraries than I used, etc. For this # reason, if you discover Consed bugs, I can only offer help with # those bugs if you first reproduce those bugs with an executable # provided by me--not an executable you have built. # # Modifying Consed is also difficult. Although Consed is modular, # some modules are used by many other modules. Thus making a change # in one place can have unforeseen effects on many other features. # It may takes months for you to notice these other side-effects # which may not seen connected at all. It is not feasable for me to # provide help with modifying Consed sources because of the # potentially huge amount of time involved. # #*****************************************************************************/ #include "createTearTags.h" #include "tag.h" #include "assembly.h" #include "tagTypes.h" #include "contig.h" #include "consed.h" #include "userDefinedTagFieldType.h" #include "userDefinedTagField.h" void createTearTags( Contig* pLeftContig, const int nLeftConsPos, const RWCString& soLeftTagComment, Contig* pRightContig, const int nRightConsPos, const RWCString& soRightTagComment ) { RWCString soTear = "tear"; tag* pLeftTearTag = new tag( NULL, pLeftContig, soTear, nLeftConsPos, nLeftConsPos, false, // bWriteToPhdFileNotAceFile, soLeftTagComment, // soComment soConsed, // consed soEmptyString, // date will be current date false ); // bNoTrans tag* pRightTearTag = new tag( NULL, pRightContig, soTear, nRightConsPos, nRightConsPos, false, // bWriteToPhdFileNotAceFile soRightTagComment, // soComment soConsed, //consed soEmptyString, // date will be current date false ); // bNoTrans Assembly* pAssembly = ConsEd::pGetAssembly(); ++pAssembly->lLastUsedTagID_; pLeftTearTag->lID_ = pAssembly->lLastUsedTagID_; ++pAssembly->lLastUsedTagID_; pRightTearTag->lID_ = pAssembly->lLastUsedTagID_; userDefinedTagType* pTearTagType = (userDefinedTagType*) tagTypes::pGetTagTypes()->pGetTagType( soTear ); assert( pTearTagType ); assert( pTearTagType->bIsAUserDefinedTagType() ); // When I wrote this, the tear tag type had only one user-defined // field, called "other_tear_tag" of field type "pointer". If that // ever changes, this code will need to be changed. assert( pTearTagType->aUserDefinedTagFieldType_.length() == 1 ); assert( (pTearTagType->aUserDefinedTagFieldType_[0])->soFieldName_ == "other_tear_tag" ); assert( pTearTagType->aUserDefinedTagFieldType_[0]->eFieldType_ == userDefinedTagFieldType::ePointer ); assert( pTearTagType->aUserDefinedTagFieldType_[0]->soPointerToWhichTagType_ == "tear" ); pLeftTearTag->pUserDefinedTagType_ = pTearTagType; pRightTearTag->pUserDefinedTagType_ = pTearTagType; pLeftTearTag->pArrayOfUserDefinedTagFields_ = new RWTPtrOrderedVector; pRightTearTag->pArrayOfUserDefinedTagFields_ = new RWTPtrOrderedVector; pLeftTearTag->pArrayOfUserDefinedTagFields_->soName_ = "tag::pArrayOfUserDefinedTagFields"; pRightTearTag->pArrayOfUserDefinedTagFields_->soName_ = "tag::pArrayOfUserDefinedTagFields"; userDefinedPointerTagField* pLeftUserDefinedPointerTagField = new userDefinedPointerTagField(); userDefinedPointerTagField* pRightUserDefinedPointerTagField = new userDefinedPointerTagField(); pLeftUserDefinedPointerTagField->pUserDefinedTagFieldType_ = pTearTagType->aUserDefinedTagFieldType_[0]; pRightUserDefinedPointerTagField->pUserDefinedTagFieldType_ = pTearTagType->aUserDefinedTagFieldType_[0]; pLeftUserDefinedPointerTagField->lID_ = pRightTearTag->lID_; pRightUserDefinedPointerTagField->lID_ = pLeftTearTag->lID_; pLeftUserDefinedPointerTagField->pTag_ = pRightTearTag; pRightUserDefinedPointerTagField->pTag_ = pLeftTearTag; pLeftTearTag->pArrayOfUserDefinedTagFields_->insert( (userDefinedTagField*) pLeftUserDefinedPointerTagField ); pRightTearTag->pArrayOfUserDefinedTagFields_->insert( (userDefinedTagField*) pRightUserDefinedPointerTagField ); pLeftContig->addConsensusTag( pLeftTearTag ); pRightContig->addConsensusTag( pRightTearTag ); }