50 #include <wx/msgdlg.h>
58 wxMessageBox(
wxT(
"No features are selected"),
wxT(
"Error"), wxOK | wxICON_ERROR,
NULL);
64 const CObject* ptr = it->object.GetPointer();
85 bool modified =
false;
87 if (!cds_hasid || !mrna_hasid) {
99 new_feat->
Assign(*orig_feat);
101 new_feat->
SetId().SetLocal().SetId(top_id);
103 if (orig_feat == mrna ) {
105 }
else if (orig_feat == cds) {
109 cmd->AddCommand(*chg_feat);
119 cmd->AddCommand(*chg_mrna);
121 cmd->AddCommand(*chg_cds);
124 }
else if (cds_hasid && mrna_hasid) {
135 bool modified =
false;
142 cmd->AddCommand(*chg_mrna);
151 cmd->AddCommand(*chg_cds);
173 cmd->AddCommand(*chg_mrna);
183 cmd->AddCommand(*chg_cds);
196 if (xref->IsSetId() && xref->GetId().IsLocal()) {
207 bool assigned =
false;
216 new_feat->
Assign(*feat_it->GetOriginalSeq_feat());
218 new_feat->
SetId().SetLocal().SetId(top_id);
221 cmd->AddCommand(*chg_feat);
240 (cds_it->GetLocation(),
249 if (linked_mRNAs.
find(mrna) != linked_mRNAs.
end()) {
255 linked_mRNAs.
insert(mrna);
259 if (!linked_mRNAs.
empty()) {
263 if (assigned || !linked_mRNAs.
empty()) {
264 cmdProcessor->
Execute(link_cmd);
282 if (mrna_it->IsSetProduct()) {
284 mrna_products.emplace(idh, mrna_it->GetOriginalSeq_feat());
289 if (cds_it->IsSetProduct()) {
291 cds_products.emplace(idh, cds_it->GetOriginalSeq_feat());
295 if (mrna_products.
empty() || cds_products.
empty()) {
300 for (
auto& mrna_it : mrna_products) {
301 if (linked_feats.
find(mrna_it.second) != linked_feats.
end()) {
311 vector<CSeq_id_Handle> prot_ids = prot_it->
GetId();
312 for (
auto&& id_it : prot_ids) {
313 auto found_cds_it = cds_products.
find(id_it);
314 if (found_cds_it != cds_products.
end()) {
315 if (linked_feats.
find(found_cds_it->second) != linked_feats.
end()) {
319 linked_feats.
insert(mrna_it.second);
320 linked_feats.
insert(found_cds_it->second);
328 if (!linked_feats.
empty()) {
332 if (assigned || !linked_feats.
empty()) {
333 cmdProcessor->
Execute(link_cmd);
373 if (linked_mRNAs.
find(mrna) != linked_mRNAs.
end()) {
378 linked_mRNAs.
insert(mrna);
384 if (!linked_mRNAs.
empty()) {
388 if (assigned || !linked_mRNAs.
empty()) {
389 cmdProcessor->
Execute(link_cmd);
396 if ((*xref_it)->IsSetId() && (*xref_it)->GetId().IsLocal()) {
430 for (; pair_it; ++pair_it) {
457 best_fit = feat_pair;
460 best_diff = (best_fit_length > feat_length) ? (best_fit_length - feat_length) : (feat_length - best_fit_length);
465 TSeqPos current_diff = (candidate_length > feat_length) ? (candidate_length - feat_length) : (feat_length - candidate_length);
466 if (current_diff < best_diff) {
467 best_fit = feat_pair;
468 best_diff = current_diff;
477 linked_feats.
insert(feat);
478 linked_feats.
insert(best_fit);
482 if (!linked_feats.
empty()) {
486 if (assigned || !linked_feats.
empty()) {
487 cmdProcessor->
Execute(link_cmd);
508 if ((*xref_it)->IsSetId() && (*xref_it)->GetId().IsLocal() && (*xref_it)->GetId().GetLocal().IsId()) {
523 bool has_xref =
false;
526 if ((*it)->IsSetId() && (*it)->GetId().IsLocal() && (*it)->GetId().GetLocal().IsId()) {
527 const CFeat_id& pair_feat_id = (*it)->GetId();
544 cmdProcessor->
Execute(link_cmd);
552 msg.assign(
"No features are selected");
553 }
else if (cds && !mrna) {
554 msg.assign(
"No mRNA is selected");
555 }
else if (!cds && mrna) {
556 msg.assign(
"No CDS is selected");
570 xref->SetId().Assign(to_feat.
GetId());
571 from_feat.
SetXref().push_back(xref);
583 && (*it)->GetId().IsLocal()
584 && feat_id.
Equals((*it)->GetId()))
593 vector<CConstRef<CObject> > objs;
596 wxOK | wxICON_INFORMATION);
600 size_t count_feat = 0;
602 const CObject* sel_obj = it->object.GetPointer();
609 if (count_feat > 1) {
611 wxOK | wxICON_INFORMATION);
619 wxOK | wxICON_INFORMATION);
625 if (!is_cds && !is_mrna) {
627 wxOK | wxICON_INFORMATION);
636 if ((*it)->IsSetId() && (*it)->GetId().IsLocal() && (*it)->GetId().GetLocal().IsId()) {
648 wxOK | wxICON_INFORMATION);
653 objs.push_back(
objects[0].
object);
User-defined methods of the data storage class.
User-defined methods of the data storage class.
void AddCommand(IEditCommand &command)
static const string & s_GetProteinName(const objects::CSeq_feat_Handle &fh)
static TId s_FindHighestFeatureId(const objects::CSeq_entry_Handle &entry)
implements special composite command, which does not call to its internal commands when run the very ...
string GetRnaProductName(void) const
ESubtype GetSubtype(void) const
namespace ncbi::objects::
CSeq_feat_Handle GetFeatureWithId(CSeqFeatData::E_Choice type, TFeatureIdInt id) const
bool AssignFeatureIds(CRef< CMacroCmdComposite > cmd)
bool x_ReplaceExistingFeatIdXrefs(objects::CSeq_feat &from_feat, const objects::CSeq_feat &to_feat)
void LinkByOverlap(ICommandProccessor *cmdProcessor)
void CompleteHalfFormedXrefPairs(ICommandProccessor *cmdProcessor)
static void s_CreateXRefLink(objects::CSeq_feat &from_feat, const objects::CSeq_feat &to_feat)
static bool s_IsDirectXrefBetween(const objects::CSeq_feat &from_feat, const objects::CSeq_feat &to_feat)
bool ReplaceExistingXrefs(const objects::CSeq_feat &mrna, const objects::CSeq_feat &cds, CRef< CCmdComposite > cmd)
void LinkSelectedFeatures(TConstScopedObjects &objects, ICommandProccessor *cmdProcessor)
void LinkByLabelAndLocation(ICommandProccessor *cmdProcessor)
objects::CSeq_entry_Handle m_TopSeqEntry
bool SetReciprocalXrefs(const objects::CSeq_feat &mrna, const objects::CSeq_feat &cds, CRef< CCmdComposite > cmd)
void LinkByLabel(ICommandProccessor *cmdProcessor)
void LinkByProduct(ICommandProccessor *cmdProcessor)
vector< CConstRef< CObject > > GetReferencedmRNA_CDS(TConstScopedObjects &objects)
returns the pair of cross-referenced mRNA and CDS features, when one of them is selected
bool x_OkForLinking(CConstRef< objects::CSeq_feat > mrna, CConstRef< objects::CSeq_feat > cds)
Undo/Redo interface for editing operations.
virtual void Execute(IEditCommand *command, wxWindow *window=0)=0
const_iterator end() const
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
const_iterator find(const key_type &key) const
const_iterator end() const
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
vector< SConstScopedObject > TConstScopedObjects
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
virtual bool Equals(const CSerialObject &object, ESerialRecursionMode how=eRecursive) const
Check if both objects contain the same values.
TRange GetTotalRange(void) const
CMappedFeat GetBestOverlappingFeat(const CMappedFeat &feat, CSeqFeatData::ESubtype need_subtype, sequence::EOverlapType overlap_type, CFeatTree *feat_tree=0, const SAnnotSelector *base_sel=0)
sequence::ECompare Compare(const CSeq_loc &loc1, const CSeq_loc &loc2, CScope *scope)
Returns the sequence::ECompare containment relationship between CSeq_locs.
@ fCompareOverlapping
Check if seq-locs are overlapping.
@ eOverlap_CheckIntRev
1st is a subset of 2nd with matching boundaries
@ eContains
First CSeq_loc contains second.
@ eSame
CSeq_locs contain each other.
CBioseq_Handle GetBioseqHandle(const CSeq_id &id)
Get bioseq handle by seq-id.
CSeq_feat_Handle GetSeq_featHandle(const CSeq_feat &feat, EMissing action=eMissing_Default)
const CFeat_id & GetId(void) const
const CSeq_feat::TXref & GetXref(void) const
const CTSE_Handle & GetTSE_Handle(void) const
Get CTSE_Handle of containing TSE.
TClass GetClass(void) const
CBioseq_set_Handle GetParentBioseq_set(void) const
Return a handle for the parent Bioseq-set, or null handle.
virtual CConstRef< CSeq_feat > GetSeq_feat(void) const
bool IsSetXref(void) const
bool IsSetClass(void) const
CConstRef< CSeq_feat > GetOriginalSeq_feat(void) const
const TId & GetId(void) const
SAnnotSelector & IncludeFeatSubtype(TFeatSubtype subtype)
Include feature subtype in the search.
TObjectType * GetPointer(void) const THROWS_NONE
Get pointer,.
bool IsNull(void) const THROWS_NONE
Check if pointer is null – same effect as Empty().
TObjectType * GetPointer(void) THROWS_NONE
Get pointer,.
void Reset(void)
Reset reference object.
void Reset(void)
Reset reference object.
bool NotEmpty(void) const THROWS_NONE
Check if CRef is not empty – pointing to an object and has a non-null value.
position_type GetLength(void) const
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static bool IsBlank(const CTempString str, SIZE_TYPE pos=0)
Check if a string is blank (has no text).
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static const char label[]
TXref & SetXref(void)
Assign a value to Xref data member.
bool IsSetData(void) const
the specific data Check if a value has been assigned to Data data member.
bool IsCdregion(void) const
Check if variant Cdregion is selected.
const TId & GetId(void) const
Get the Id member data.
const TLocal & GetLocal(void) const
Get the variant data.
bool IsSetXref(void) const
cite other relevant features Check if a value has been assigned to Xref data member.
const TLocation & GetLocation(void) const
Get the Location member data.
bool IsLocal(void) const
Check if variant Local is selected.
const TData & GetData(void) const
Get the Data member data.
void SetId(TId &value)
Assign a value to Id data member.
bool IsSetId(void) const
Check if a value has been assigned to Id data member.
const TXref & GetXref(void) const
Get the Xref member data.
vector< CRef< CSeqFeatXref > > TXref
const TRna & GetRna(void) const
Get the variant data.
bool IsSetProduct(void) const
product of process Check if a value has been assigned to Product data member.
@ eClass_nuc_prot
nuc acid and coded proteins
static string s_GetFeatureLabel(const CSeq_feat_Handle &fh)
static bool s_DoesFeatureHasXRef(const CSeq_feat &feat)
Utility macros and typedefs for exploring NCBI objects from seqfeat.asn.
#define EDIT_EACH_XREF_ON_SEQFEAT(Itr, Var)
#define FOR_EACH_SEQFEATXREF_ON_SEQFEAT(Itr, Var)
FOR_EACH_SEQFEATXREF_ON_SEQFEAT EDIT_EACH_SEQFEATXREF_ON_SEQFEAT.
wxString ToWxString(const string &s)