19 #include "atomprobe/primitives/ion.h" 46 Ion::Ion(
const std::string &strName) {
48 std::vector<std::pair<std::string,size_t> > ionFragments;
49 ionStr2ionFragments(strName, ionFragments);
50 setIonFragments(ionFragments);
54 Ion::Ion(
const std::string &strName,
const unsigned int chargeState) {
55 std::vector<std::pair<std::string,size_t> > ionFragments;
56 ionStr2ionFragments(strName, ionFragments);
57 setIonFragments(ionFragments);
58 setChargeState(chargeState);
63 bool Ion::ionStr2ionFragments(
const std::string &name,
64 std::vector<pair<string,size_t> > &fragments)
80 if(!isalnum(name[0]) ||
81 isdigit(name[0]) || islower(name[0]))
87 for(
size_t ui=1;ui<name.size();ui++)
89 if(!isalnum(name[ui]))
104 if(isupper(name[ui]))
111 s=name.substr(lastMarker,ui-lastMarker);
112 fragments.push_back(make_pair(s,1));
120 if(isdigit(name[ui]))
123 if(isalpha(name[ui]))
127 std::string s,sDigit;
128 s=name.substr(lastMarker,digitMarker-lastMarker);
130 sDigit=name.substr(digitMarker,ui-digitMarker);
135 fragments.push_back(make_pair(s,multiplicity));
149 s=name.substr(lastMarker,name.size()-lastMarker);
150 fragments.push_back(make_pair(s,1));
154 std::string s,sDigit;
155 s=name.substr(lastMarker,digitMarker-lastMarker);
156 sDigit=name.substr(digitMarker,name.size()-digitMarker);
161 fragments.push_back(make_pair(s,multiplicity));
166 vector<bool> toKill(fragments.size(),
false);
167 for(
size_t ui=0;ui<fragments.size();ui++)
170 if(fragments[ui].first.empty())
173 for(
size_t uj=ui+1;uj<fragments.size();uj++)
176 if(fragments[uj].first.empty())
180 if(fragments[uj].first == fragments[ui].first)
182 fragments[ui].second+=fragments[uj].second;
183 fragments[uj].first=
"";
197 bool Ion::ionFragments2ionStr(
const std::vector<pair<string,size_t> > &fragments,
200 for (
auto frag:fragments){
201 if ((frag).second == 1) {
202 name += (frag).first;
205 name += (frag).first + std::to_string((frag).second);
void vectorMultiErase(std::vector< T > &vec, const std::vector< bool > &wantKill)
Remove elements from the vector, without preserving order.
bool stream_cast(T1 &result, const T2 &obj)
Template function to cast and object to another by the stringstream.