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 60 of file Molecule.C.

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

ResidueLookupElem::~ResidueLookupElem void   )  [inline]
 

Definition at line 61 of file Molecule.C.

00061 { delete next; }


Member Function Documentation

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

Definition at line 79 of file Molecule.C.

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

Referenced by Molecule::read_parm().

00080                                                {
00081     ResidueLookupElem *rval = this;
00082     if ( firstResid == -1 ) {  // nothing added yet
00083       strcpy(mySegid,segid);
00084       firstResid = resid;
00085       lastResid = resid;
00086       atomIndex.add(aid);
00087       atomIndex.add(aid+1);
00088     } else if ( ! strcasecmp(mySegid,segid) ) {  // same segid
00089       if ( resid == lastResid ) {  // same resid
00090         atomIndex[lastResid - firstResid + 1] = aid + 1;
00091       } else if ( resid < lastResid ) {  // error
00092         // We can work around this by creating a new segment.
00093         iout << iWARN << "Residue " << resid <<
00094           " out of order in segment " << segid <<
00095           ", lookup for additional residues in this segment disabled.\n" << endi;
00096         rval = next = new ResidueLookupElem;
00097         next->append(segid,resid,aid);
00098       } else {  // new resid
00099         for ( ; lastResid < resid; ++lastResid ) atomIndex.add(aid);
00100         atomIndex[lastResid - firstResid + 1] = aid + 1;
00101       }
00102     } else {  // new segid
00103       rval = next = new ResidueLookupElem;
00104       next->append(segid,resid,aid);
00105     }
00106     return rval;
00107 }

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

Definition at line 66 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().

00067                                                                   {
00068     const ResidueLookupElem *elem = this;
00069     int rval = -1;  // error
00070     while ( elem && strcasecmp(elem->mySegid,segid) ) elem = elem->next;
00071     if ( elem && (resid >= elem->firstResid) && (resid <= elem->lastResid) ) {
00072       *begin = elem->atomIndex[resid - elem->firstResid];
00073       *end = elem->atomIndex[resid - elem->firstResid + 1];
00074       rval = 0;  // no error
00075     }
00076     return rval;
00077 }


Member Data Documentation

ResizeArray<int> ResidueLookupElem::atomIndex
 

Definition at line 58 of file Molecule.C.

Referenced by append(), and lookup().

int ResidueLookupElem::firstResid
 

Definition at line 56 of file Molecule.C.

Referenced by append(), and lookup().

int ResidueLookupElem::lastResid
 

Definition at line 57 of file Molecule.C.

Referenced by append(), and lookup().

char ResidueLookupElem::mySegid[11]
 

Definition at line 54 of file Molecule.C.

Referenced by append(), and lookup().

ResidueLookupElem* ResidueLookupElem::next
 

Definition at line 55 of file Molecule.C.

Referenced by append(), and lookup().


The documentation for this class was generated from the following file:
Generated on Tue Oct 7 04:08:18 2008 for NAMD by  doxygen 1.3.9.1