Mass++ mzML IO Plugin v2.7.5
 All Classes Namespaces Files Functions Variables Enumerations
AccessionManager.cpp
1 /*
2  * @file AccessionManager.cpp
3  * @brief implements of AccessionManager class
4  *
5  * @author S.Tanaka
6  * @date 2009.04.14
7  *
8  * Copyright(C) 2006-2014 Eisai Co., Ltd. All rights reserved.
9  */
10 
11 
12 #include "stdafx.h"
13 #include "AccessionManager.h"
14 #include "Accession.h"
15 
16 #include <fstream>
17 
18 using namespace kome::io::mzml;
19 
20 
21 #include <crtdbg.h>
22 #ifdef _DEBUG
23  #define new new( _NORMAL_BLOCK, __FILE__, __LINE__ )
24  #define malloc( s ) _malloc_dbg( s, _NORMAL_BLOCK, __FILE__, __LINE__ )
25 #endif // _DEBUG
26 
27 
28 
29 // constructor
31  // obo file path
32  kome::core::ResourceBundle& rb = kome::core::ResourceBundle::getInstance();
33  std::string path = rb.searchResource( "psi-ms", NULL, "obo" );
34 
35  readOboFile( path.c_str() );
36 }
37 
38 // destructor
41 }
42 
43 // clear accessions
45  for( unsigned int i = 0; i < m_accessions.size(); i++ ) {
46  delete m_accessions[ i ];
47  }
48 
49  m_accessions.clear();
50 }
51 
52 // get the number of accessions
54  return m_accessions.size();
55 }
56 
57 // get accession
58 Accession* AccessionManager::getAccession( const unsigned int idx ) {
59  if( idx >= m_accessions.size() ) {
60  return NULL;
61  }
62  return m_accessions[ idx ];
63 }
64 
65 // get accession
67  // string object
68  std::string idStr = NVL( id, "" );
69 
70  // search
71  Accession* acc = NULL;
72  for( unsigned int i = 0; i < m_accessions.size() && acc == NULL; i++ ) {
73  Accession* tmp = m_accessions[ i ];
74  if( idStr.compare( tmp->getId() ) == 0 ) {
75  acc = tmp;
76  }
77  }
78 
79  return acc;
80 }
81 
82 // read obo file
83 void AccessionManager::readOboFile( const char* path ) {
84  // open
85  std::fstream fs;
86  fs.open( path, std::ios::in );
87  if( fs.fail() ) {
88  return;
89  }
90 
91  // read
92  char line[ 0x1000 ];
93  Accession* acc = NULL;
94  std::map< std::string, Accession* > accMap;
95  std::map< Accession*, std::string > parentMap;
96 
97  while( !fs.eof() ) {
98  fs.getline( line, 0x1000 );
99  line[ 0x1000 - 1 ] = '\0';
100 
101  char* colon = strstr( line, ":" );
102  if( colon != NULL ) {
103  // title
104  std::string title( line, colon );
105  title = trimstring( title.c_str() );
106 
107  // value
108  char* v = colon + 1;
109  while( *v == ' ' || *v == '\n' || *v == '\t' || *v == '\r' ) {
110  v = v + 1;
111  }
112  std::string value = trimstring( v );
113 
114  // set accession
115  if( title.compare( "id" ) == 0 ) { // ID
116  acc = new Accession( value.c_str() );
117  m_accessions.push_back( acc );
118  accMap[ value ] = acc;
119  }
120  else if( title.compare( "name" ) == 0 ) { // name
121  if( acc != NULL ) {
122  acc->setName( value.c_str() );
123  }
124  }
125  else if( title.compare( "is_a" ) == 0 ) { // parent
126  unsigned int pos = value.find( "!" );
127  if( pos != (unsigned int)value.npos ) {
128  value = value.substr( 0, pos );
129  value = trimstring( value.c_str() );
130 
131  parentMap[ acc ] = value;
132  }
133  }
134  }
135  }
136 
137  // close
138  fs.close();
139 
140  // set parents
141  for( unsigned int i = 0; i < m_accessions.size(); i++ ) {
142  acc = m_accessions[ i ];
143  if( parentMap.find( acc ) != parentMap.end() ) {
144  std::string parentName = parentMap[ acc ];
145  if( accMap.find( parentName ) != accMap.end() ) {
146  Accession* parent = accMap[ parentName ];
147  acc->setParent( parent );
148  }
149  }
150  }
151 }
152 
153 // get accession manager object
155  static AccessionManager mgr;
156  return mgr;
157 }
void setParent(Accession *parent)
sets parent accession
Definition: Accession.cpp:62
static AccessionManager & getInstance()
gets accession manager object (This is the only object.)
void clearAccessions()
clears accessions
const char * getId()
gets accession ID
Definition: Accession.cpp:47
virtual ~AccessionManager()
destructor
common header file
interfaces of Accession class
Accession * getAccession(const unsigned int idx)
gets accession
accession object management class
void readOboFile(const char *path)
reads obo file
accession information class
Definition: Accession.h:24
void setName(const char *name)
Definition: Accession.cpp:52
std::vector< Accession * > m_accessions
unsigned int getNumberOfAccessions()
gets the number of accessions