61 #define THIS_FILE "citation.cpp"
83 return &(
pub_->GetEquiv());
101 if (pub->IsGen() && pub->GetGen().IsSetSerial_number()) {
102 cit_num_ = pub->GetGen().GetSerial_number();
118 else if (
pub_->IsEquiv()) {
119 for (
const auto& cur_pub :
pub_->GetEquiv().Get()) {
120 if (cur_pub->IsGen() && cur_pub->GetGen().IsSetSerial_number()) {
121 cit_num_ = cur_pub->GetGen().GetSerial_number();
131 for (
const auto& descr : descrs) {
132 if (descr->IsPub()) {
137 pubs.push_back(pub_info);
144 for (
const auto& annot : annots) {
145 if (! annot->IsSetData() || ! annot->GetData().IsFtable())
149 for (
const auto& feat : annot->GetData().GetFtable()) {
150 if (feat->IsSetData()) {
152 if (feat->IsSetLocation())
153 id = feat->GetLocation().GetId();
164 if (feat->GetData().IsPub()) {
165 pub_info.
SetPubEquiv(&feat->GetData().GetPub().GetPub());
166 pubs.push_back(pub_info);
167 }
else if (feat->GetData().IsImp() && feat->IsSetCit()) {
168 const CPub_set& pub_set = feat->GetCit();
170 for (
const auto& pub : pub_set.
GetPub()) {
172 pubs.push_back(pub_info);
195 const CPub* pub =
nullptr;
199 for (
const auto& cur_pub : pub_equiv->
Get()) {
200 if (cur_pub->IsMuid() || cur_pub->IsPmid()) {
201 if (new_pub.
Empty()) {
203 new_pub->
Assign(*cur_pub);
206 new_pub_equiv->
Set().push_back(new_pub);
209 new_pub->
Assign(*cur_pub);
210 new_pub_equiv->
Set().push_back(new_pub);
215 pubs.push_back(new_pub);
222 if (! equiv_pubs.empty())
223 pub = *equiv_pubs.begin();
228 pubs.push_back(new_pub);
232 if (pub && pub->
IsGen()) {
236 if (equiv_pubs.size() > 1) {
237 TPubList::const_iterator cur_pub = equiv_pubs.begin();
247 pubs.push_back(new_pub);
255 pubs.push_back(new_pub);
261 pubs.push_back(new_pub);
266 for (
auto& annot : annots) {
267 if (! annot->IsSetData() || ! annot->GetData().IsFtable())
270 for (
auto& feat : annot->SetData().SetFtable()) {
271 if (feat->IsSetQual()) {
275 for (TQualVector::iterator qual = quals.begin(); qual != quals.end();) {
276 if ((*qual)->IsSetQual() && (*qual)->GetQual() ==
"citation") {
278 qual = quals.erase(qual);
282 if (pub.GetSerial() == ser_num) {
283 if (bioseq && pub.GetBioseq() && bioseq != pub.GetBioseq())
300 if (! cit_pubs.empty())
301 feat->SetCit().SetPub().swap(cit_pubs);
309 std::vector<CPubInfo> pubs;
311 for (
const auto& entry : seq_entries) {
313 if (bio_set->IsSetDescr())
316 if (bio_set->IsSetAnnot())
321 if (bioseq->IsSetDescr())
324 if (bioseq->IsSetAnnot())
329 for (
auto& entry : seq_entries) {
331 if (bio_set->IsSetAnnot())
332 ProcessCit(pubs, bio_set->SetAnnot(),
nullptr);
336 if (bioseq->IsSetAnnot())
337 ProcessCit(pubs, bioseq->SetAnnot(), &(*bioseq));
void ProcessCitations(TEntryList &seq_entries)
static void FindCitInDescr(std::vector< CPubInfo > &pubs, const TSeqdescList &descrs, const CBioseq *bioseq)
void SetMinimumPub(const CPubInfo &pub_info, TPubList &pubs)
static void ProcessCit(const std::vector< CPubInfo > &pubs, CBioseq::TAnnot &annots, const CBioseq *bioseq)
static void FindCitInFeats(std::vector< CPubInfo > &pubs, const CBioseq::TAnnot &annots)
static int GetCitSerialFromQual(const CGb_qual &qual)
@Gb_qual.hpp User-defined methods of the data storage class.
const objects::CBioseq * bioseq_
const objects::CPub_equiv * GetPubEquiv() const
const objects::CPub * GetPub() const
const objects::CPub_equiv * pub_equiv_
void SetPubEquiv(const objects::CPub_equiv *pub_equiv)
void SetBioseq(const objects::CBioseq *bioseq)
void SetPub(const objects::CPub *pub)
const objects::CPub * pub_
bool GetLabel(string *label, ELabelType type=eContent, TLabelFlags flags=0, ELabelVersion version=eLabel_DefaultVersion) const
Concatenate a label for this pub to label.
Template class for iteration on objects of class C (non-medifiable version)
Template class for iteration on objects of class C.
@ fLabel_Unique
Append a unique tag [V1].
#define ERR_QUALIFIER_NoRefForCiteQual
list< CRef< objects::CSeq_entry > > TEntryList
std::list< CRef< objects::CPub > > TPubList
std::list< CRef< objects::CSeqdesc > > TSeqdescList
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
CBeginInfo Begin(C &obj)
Get starting point of object hierarchy.
CBioseq_Handle GetBioseqHandle(const CSeq_id &id)
Get bioseq handle by seq-id.
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.
bool Empty(void) const THROWS_NONE
Check if CRef is empty – not pointing to any object, which means having a null value.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static const char label[]
bool IsSetSerial_number(void) const
for GenBank style references Check if a value has been assigned to Serial_number data member.
void SetCit(const TCit &value)
Assign a value to Cit data member.
bool IsPmid(void) const
Check if variant Pmid is selected.
Tdata & Set(void)
Assign a value to data member.
const TPub & GetPub(void) const
Get the variant data.
const Tdata & Get(void) const
Get the member data.
TEquiv & SetEquiv(void)
Select the variant.
TGen & SetGen(void)
Select the variant.
const TGen & GetGen(void) const
Get the variant data.
bool IsMuid(void) const
Check if variant Muid is selected.
bool IsGen(void) const
Check if variant Gen is selected.
const TVal & GetVal(void) const
Get the Val member data.
list< CRef< CSeq_annot > > TAnnot
std::vector< CRef< objects::CGb_qual > > TQualVector