Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Link_AMOS.cc

Go to the documentation of this file.
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 #include "Link_AMOS.hh" 00011 using namespace AMOS; 00012 using namespace std; 00013 00014 00015 00016 00017 //====================================================== Link_t ================ 00018 const NCode_t Link_t::NCODE = M_LINK; 00019 const LinkType_t Link_t::NULL_LINK = 0; 00020 const LinkType_t Link_t::OTHER = 'X'; 00021 const LinkType_t Link_t::MATEPAIR = 'M'; 00022 const LinkType_t Link_t::OVERLAP = 'O'; 00023 const LinkType_t Link_t::PHYSICAL = 'P'; 00024 const LinkType_t Link_t::ALIGNMENT = 'A'; 00025 const LinkType_t Link_t::SYNTENY = 'S'; 00026 const LinkAdjacency_t Link_t::NULL_ADJACENCY = 0; 00027 const LinkAdjacency_t Link_t::NORMAL = 'N'; 00028 const LinkAdjacency_t Link_t::ANTINORMAL = 'A'; 00029 const LinkAdjacency_t Link_t::INNIE = 'I'; 00030 const LinkAdjacency_t Link_t::OUTIE = 'O'; 00031 00032 00033 //----------------------------------------------------- clear ------------------ 00034 void Link_t::clear ( ) 00035 { 00036 Universal_t::clear( ); 00037 nods_m . first = nods_m . second = source_m . first = NULL_ID; 00038 source_m . second = NULL_NCODE; 00039 nodtype_m = NULL_NCODE; 00040 sd_m = size_m = 0; 00041 type_m = NULL_LINK; 00042 } 00043 00044 00045 //----------------------------------------------------- flip ------------------- 00046 void Link_t::flip ( ) 00047 { 00048 LinkAdjacency_t la = getAdjacency( ); 00049 if ( la == NORMAL ) 00050 setAdjacency (ANTINORMAL); 00051 else if ( la == ANTINORMAL ) 00052 setAdjacency (NORMAL); 00053 00054 nods_m = std::make_pair (nods_m . second, nods_m . first); 00055 } 00056 00057 00058 //----------------------------------------------------- getAdjacency ----------- 00059 LinkAdjacency_t Link_t::getAdjacency ( ) const 00060 { 00061 if ( flags_m . nibble & ADJACENCY_BIT ) 00062 { 00063 switch (flags_m . nibble & ADJACENCY_BITS) 00064 { 00065 case NORMAL_BITS : return NORMAL; 00066 case ANTINORMAL_BITS : return ANTINORMAL; 00067 case INNIE_BITS : return INNIE; 00068 case OUTIE_BITS : return OUTIE; 00069 } 00070 } 00071 return NULL_ADJACENCY; 00072 } 00073 00074 00075 //----------------------------------------------------- readMessage ------------ 00076 void Link_t::readMessage (const Message_t & msg) 00077 { 00078 Universal_t::readMessage (msg); 00079 00080 try { 00081 00082 istringstream ss; 00083 00084 if ( msg . exists (F_NODES) ) 00085 { 00086 ss . str (msg . getField (F_NODES)); 00087 ss >> nods_m . first; 00088 ss . ignore( ); 00089 ss >> nods_m . second; 00090 if ( !ss ) 00091 AMOS_THROW_ARGUMENT ("Invalid nodes format"); 00092 ss . clear( ); 00093 } 00094 00095 if ( msg . exists (F_OBJECT) ) 00096 { 00097 string str; 00098 00099 ss . str (msg . getField (F_OBJECT)); 00100 ss >> str; 00101 if ( !ss || str . length( ) != NCODE_SIZE ) 00102 AMOS_THROW_ARGUMENT ("Invalid object type format"); 00103 ss . clear( ); 00104 nodtype_m = Encode (str); 00105 } 00106 00107 if ( msg . exists (F_ADJACENCY) ) 00108 { 00109 ss . str (msg . getField (F_ADJACENCY)); 00110 setAdjacency (ss . get( )); 00111 ss . clear( ); 00112 } 00113 00114 if ( msg . exists (F_SD) ) 00115 { 00116 ss . str (msg . getField (F_SD)); 00117 ss >> sd_m; 00118 if ( !ss ) 00119 AMOS_THROW_ARGUMENT ("Invalid standard deviation format"); 00120 ss . clear( ); 00121 } 00122 00123 if ( msg . exists (F_SIZE) ) 00124 { 00125 ss . str (msg . getField (F_SIZE)); 00126 ss >> size_m; 00127 if ( !ss ) 00128 AMOS_THROW_ARGUMENT ("Invalid size format"); 00129 ss . clear( ); 00130 } 00131 00132 if ( msg . exists (F_TYPE) ) 00133 { 00134 ss . str (msg . getField (F_TYPE)); 00135 setType (ss . get( )); 00136 ss . clear( ); 00137 } 00138 00139 if ( msg . exists (F_SOURCE) ) 00140 { 00141 string str; 00142 00143 ss . str (msg . getField (F_SOURCE)); 00144 ss >> source_m . first; 00145 ss . ignore( ); 00146 ss >> str; 00147 if ( !ss || str . length( ) != NCODE_SIZE ) 00148 AMOS_THROW_ARGUMENT ("Invalid source format"); 00149 ss . clear( ); 00150 source_m . second = Encode (str); 00151 } 00152 } 00153 catch (ArgumentException_t) { 00154 00155 clear( ); 00156 throw; 00157 } 00158 } 00159 00160 00161 //----------------------------------------------------- readRecord ------------- 00162 void Link_t::readRecord (istream & fix, istream & var) 00163 { 00164 Universal_t::readRecord (fix, var); 00165 00166 readLE (fix, &(nods_m . first)); 00167 readLE (fix, &(nods_m . second)); 00168 readLE (fix, &nodtype_m); 00169 readLE (fix, &sd_m); 00170 readLE (fix, &size_m); 00171 readLE (fix, &(source_m . first)); 00172 readLE (fix, &(source_m . second)); 00173 fix . get (type_m); 00174 } 00175 00176 00177 //----------------------------------------------------- setAdjacency ----------- 00178 void Link_t::setAdjacency (LinkAdjacency_t adj) 00179 { 00180 uint8_t bits = flags_m . nibble; 00181 flags_m . nibble &= ~ADJACENCY_BITS; 00182 flags_m . nibble |= ADJACENCY_BIT; 00183 00184 switch (adj) 00185 { 00186 case NORMAL : flags_m . nibble |= NORMAL_BITS; break; 00187 case ANTINORMAL : flags_m . nibble |= ANTINORMAL_BITS; break; 00188 case INNIE : flags_m . nibble |= INNIE_BITS; break; 00189 case OUTIE : flags_m . nibble |= OUTIE_BITS; break; 00190 case NULL_ADJACENCY: 00191 flags_m . nibble &= ~ADJACENCY_BIT; 00192 break; 00193 default: 00194 flags_m . nibble = bits; 00195 AMOS_THROW_ARGUMENT ((string)"Invalid adjacency " + adj); 00196 } 00197 } 00198 00199 00200 //----------------------------------------------------- setType ---------------- 00201 void Link_t::setType (LinkType_t type) 00202 { 00203 switch (type) 00204 { 00205 case NULL_LINK: 00206 case OTHER: 00207 case MATEPAIR: 00208 case OVERLAP: 00209 case PHYSICAL: 00210 case ALIGNMENT: 00211 case SYNTENY: 00212 type_m = type; 00213 break; 00214 default: 00215 AMOS_THROW_ARGUMENT ((string)"Invalid contig link type " + type); 00216 } 00217 type_m = type; 00218 } 00219 00220 00221 //----------------------------------------------------- writeMessage ----------- 00222 void Link_t::writeMessage (Message_t & msg) const 00223 { 00224 Universal_t::writeMessage (msg); 00225 00226 try { 00227 ostringstream ss; 00228 00229 msg . setMessageCode (Link_t::NCODE); 00230 00231 if ( nods_m . first != NULL_ID || nods_m . second != NULL_ID ) 00232 { 00233 ss << nods_m . first << ',' << nods_m . second; 00234 msg . setField (F_NODES, ss . str( )); 00235 ss . str (NULL_STRING); 00236 } 00237 00238 if ( nodtype_m != NULL_NCODE ) 00239 { 00240 msg . setField (F_OBJECT, Decode (nodtype_m)); 00241 ss . str (NULL_STRING); 00242 } 00243 00244 if ( getAdjacency( ) != NULL_ADJACENCY ) 00245 { 00246 ss << getAdjacency( ); 00247 msg . setField (F_ADJACENCY, ss . str( )); 00248 ss . str (NULL_STRING); 00249 } 00250 00251 ss << sd_m; 00252 msg . setField (F_SD, ss . str( )); 00253 ss . str (NULL_STRING); 00254 00255 ss << size_m; 00256 msg . setField (F_SIZE, ss . str( )); 00257 ss . str (NULL_STRING); 00258 00259 if ( type_m != NULL_LINK ) 00260 { 00261 ss << type_m; 00262 msg . setField (F_TYPE, ss . str( )); 00263 ss . str (NULL_STRING); 00264 } 00265 00266 if ( source_m . first != NULL_ID || source_m . second != NULL_NCODE ) 00267 { 00268 ss << source_m . first << ',' << Decode (source_m . second); 00269 msg . setField (F_SOURCE, ss . str( )); 00270 ss . str (NULL_STRING); 00271 } 00272 } 00273 catch (ArgumentException_t) { 00274 00275 msg . clear( ); 00276 throw; 00277 } 00278 } 00279 00280 00281 //----------------------------------------------------- writeRecord ------------ 00282 void Link_t::writeRecord (ostream & fix, ostream & var) const 00283 { 00284 Universal_t::writeRecord (fix, var); 00285 00286 writeLE (fix, &(nods_m . first)); 00287 writeLE (fix, &(nods_m . second)); 00288 writeLE (fix, &nodtype_m); 00289 writeLE (fix, &sd_m); 00290 writeLE (fix, &size_m); 00291 writeLE (fix, &(source_m . first)); 00292 writeLE (fix, &(source_m . second)); 00293 fix . put (type_m); 00294 }

Generated on Tue May 17 15:19:02 2005 for libAMOS by doxygen 1.3.8