Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

ResidueLookupElem Class Reference

List of all members.

Public Member Functions

 ResidueLookupElem (void)
 ~ResidueLookupElem (void)
int lookup (const char *segid, int resid, int *begin, int *end) const
ResidueLookupElemappend (const char *segid, int resid, int aid)

Public Attributes

char mySegid [11]
ResidueLookupElemnext
int firstResid
int lastResid
ResizeArray< int > atomIndex

Constructor & Destructor Documentation

ResidueLookupElem::ResidueLookupElem void   )  [inline]
 

Definition at line 67 of file Molecule.C.

00067 { next = 0; firstResid = -1; lastResid = -1; }

ResidueLookupElem::~ResidueLookupElem void   )  [inline]
 

Definition at line 68 of file Molecule.C.

00068 { delete next; }


Member Function Documentation

ResidueLookupElem * ResidueLookupElem::append const char *  segid,
int  resid,
int  aid
 

Definition at line 93 of file Molecule.C.

References ResizeArray< Elem >::add(), atomIndex, firstResid, iout, iWARN(), lastResid, mySegid, and next.

00094                                                {
00095     ResidueLookupElem *rval = this;
00096     if ( firstResid == -1 ) {  // nothing added yet
00097       strcpy(mySegid,segid);
00098       firstResid = resid;
00099       lastResid = resid;
00100       atomIndex.add(aid);
00101       atomIndex.add(aid+1);
00102     } else if ( ! strcasecmp(mySegid,segid) ) {  // same segid
00103       if ( resid == lastResid ) {  // same resid
00104         atomIndex[lastResid - firstResid + 1] = aid + 1;
00105       } else if ( resid < lastResid ) {  // error
00106         // We can work around this by creating a new segment.
00107         iout << iWARN << "Residue " << resid <<
00108           " out of order in segment " << segid <<
00109           ", lookup for additional residues in this segment disabled.\n" << endi;
00110         rval = next = new ResidueLookupElem;
00111         next->append(segid,resid,aid);
00112       } else {  // new resid
00113         for ( ; lastResid < resid; ++lastResid ) atomIndex.add(aid);
00114         atomIndex[lastResid - firstResid + 1] = aid + 1;
00115       }
00116     } else {  // new segid
00117       rval = next = new ResidueLookupElem;
00118       next->append(segid,resid,aid);
00119     }
00120     return rval;
00121 }

int ResidueLookupElem::lookup const char *  segid,
int  resid,
int *  begin,
int *  end
const
 

Definition at line 80 of file Molecule.C.

References atomIndex, firstResid, lastResid, mySegid, and next.

Referenced by Molecule::get_atom_from_index_in_residue(), Molecule::get_atom_from_name(), and Molecule::get_residue_size().

00081                                                                   {
00082     const ResidueLookupElem *elem = this;
00083     int rval = -1;  // error
00084     while ( elem && strcasecmp(elem->mySegid,segid) ) elem = elem->next;
00085     if ( elem && (resid >= elem->firstResid) && (resid <= elem->lastResid) ) {
00086       *begin = elem->atomIndex[resid - elem->firstResid];
00087       *end = elem->atomIndex[resid - elem->firstResid + 1];
00088       rval = 0;  // no error
00089     }
00090     return rval;
00091 }


Member Data Documentation

ResizeArray<int> ResidueLookupElem::atomIndex
 

Definition at line 65 of file Molecule.C.

Referenced by append(), and lookup().

int ResidueLookupElem::firstResid
 

Definition at line 63 of file Molecule.C.

Referenced by append(), and lookup().

int ResidueLookupElem::lastResid
 

Definition at line 64 of file Molecule.C.

Referenced by append(), and lookup().

char ResidueLookupElem::mySegid[11]
 

Definition at line 61 of file Molecule.C.

Referenced by append(), and lookup().

ResidueLookupElem* ResidueLookupElem::next
 

Definition at line 62 of file Molecule.C.

Referenced by append(), and lookup().


The documentation for this class was generated from the following file:
Generated on Tue Nov 24 04:07:51 2009 for NAMD by  doxygen 1.3.9.1