File indexing completed on 2024-04-14 03:40:14
0001 /* 0002 SPDX-FileCopyrightText: 2005-2008 Carsten Niehaus <cniehaus@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "isotopeparser.h" 0007 0008 #include "chemicaldataobject.h" 0009 #include "isotope.h" 0010 0011 #include "kalzium_libscience_debug.h" 0012 0013 #include <KUnitConversion/Converter> 0014 0015 class IsotopeParser::Private 0016 { 0017 public: 0018 Private() 0019 : currentUnit(KUnitConversion::NoUnit) 0020 , currentErrorValue(QVariant()) 0021 , currentElementSymbol(QString()) 0022 , currentIsotope(nullptr) 0023 , inIsotope(false) 0024 , inElement(false) 0025 , inAtomicNumber(false) 0026 , inExactMass(false) 0027 , inSpin(false) 0028 , inMagMoment(false) 0029 , inHalfLife(false) 0030 , inAlphaDecay(false) 0031 , inAlphaDecayLikeliness(false) 0032 , inProtonDecay(false) 0033 , inProtonDecayLikeliness(false) 0034 , inTwoProtonDecay(false) 0035 , inTwoProtonDecayLikeliness(false) 0036 , inNeutronDecay(false) 0037 , inNeutronDecayLikeliness(false) 0038 , inTwoNeutronDecay(false) 0039 , inTwoNeutronDecayLikeliness(false) 0040 , inECDecay(false) 0041 , inECDecayLikeliness(false) 0042 , inTwoECDecay(false) 0043 , inTwoECDecayLikeliness(false) 0044 , inBetaminusDecay(false) 0045 , inBetaminusDecayLikeliness(false) 0046 , inBetaminusFissionDecay(false) 0047 , inBetaminusFissionDecayLikeliness(false) 0048 , inTwoBetaminusDecay(false) 0049 , inTwoBetaminusDecayLikeliness(false) 0050 , inBetaplusDecay(false) 0051 , inBetaplusDecayLikeliness(false) 0052 , inTwoBetaplusDecay(false) 0053 , inTwoBetaplusDecayLikeliness(false) 0054 , inBetaminusNeutronDecay(false) 0055 , inBetaminusNeutronDecayLikeliness(false) 0056 , inBetaminusTwoNeutronDecay(false) 0057 , inBetaminusTwoNeutronDecayLikeliness(false) 0058 , inBetaminusThreeNeutronDecay(false) 0059 , inBetaminusThreeNeutronDecayLikeliness(false) 0060 , inBetaminusFourNeutronDecay(false) 0061 , inBetaminusFourNeutronDecayLikeliness(false) 0062 , inBetaminusAlphaNeutronDecay(false) 0063 , inBetaminusAlphaNeutronDecayLikeliness(false) 0064 , inBetaminusAlphaDecay(false) 0065 , inBetaminusAlphaDecayLikeliness(false) 0066 , inBetaminusTwoAlphaDecay(false) 0067 , inBetaminusTwoAlphaDecayLikeliness(false) 0068 , inBetaminusThreeAlphaDecay(false) 0069 , inBetaminusThreeAlphaDecayLikeliness(false) 0070 , inBetaplusProtonDecay(false) 0071 , inBetaplusProtonDecayLikeliness(false) 0072 , inBetaplusTwoProtonDecay(false) 0073 , inBetaplusTwoProtonDecayLikeliness(false) 0074 , inBetaplusAlphaDecay(false) 0075 , inBetaplusAlphaDecayLikeliness(false) 0076 , inBetaplusTwoAlphaDecay(false) 0077 , inBetaplusTwoAlphaDecayLikeliness(false) 0078 , inBetaplusThreeAlphaDecay(false) 0079 , inBetaplusThreeAlphaDecayLikeliness(false) 0080 , inAlphaBetaminusDecay(false) 0081 , inAlphaBetaminusDecayLikeliness(false) 0082 , inProtonAlphaDecay(false) 0083 , inProtonAlphaDecayLikeliness(false) 0084 , inECProtonDecay(false) 0085 , inECProtonDecayLikeliness(false) 0086 , inECTwoProtonDecay(false) 0087 , inECTwoProtonDecayLikeliness(false) 0088 , inECThreeProtonDecay(false) 0089 , inECThreeProtonDecayLikeliness(false) 0090 , inECAlphaDecay(false) 0091 , inECAlphaDecayLikeliness(false) 0092 , inECAlphaProtonDecay(false) 0093 , inECAlphaProtonDecayLikeliness(false) 0094 , inSpontFissionDecay(false) 0095 , inSpontFissionDecayLikeliness(false) 0096 , inAbundance(false) 0097 { 0098 } 0099 0100 ~Private() 0101 { 0102 delete currentIsotope; 0103 // qDeleteAll(isotopes); 0104 } 0105 0106 ChemicalDataObject currentDataObject; 0107 int currentUnit; 0108 QVariant currentErrorValue; 0109 QString currentElementSymbol; 0110 Isotope *currentIsotope; 0111 0112 QList<Isotope *> isotopes; 0113 0114 bool inIsotope; 0115 bool inElement; 0116 bool inAtomicNumber; 0117 bool inExactMass; 0118 bool inSpin; 0119 bool inMagMoment; 0120 bool inHalfLife; 0121 bool inAlphaDecay; 0122 bool inAlphaDecayLikeliness; 0123 bool inProtonDecay; 0124 bool inProtonDecayLikeliness; 0125 bool inTwoProtonDecay; 0126 bool inTwoProtonDecayLikeliness; 0127 bool inNeutronDecay; 0128 bool inNeutronDecayLikeliness; 0129 bool inTwoNeutronDecay; 0130 bool inTwoNeutronDecayLikeliness; 0131 bool inECDecay; 0132 bool inECDecayLikeliness; 0133 bool inTwoECDecay; 0134 bool inTwoECDecayLikeliness; 0135 bool inBetaminusDecay; 0136 bool inBetaminusDecayLikeliness; 0137 bool inBetaminusFissionDecay; 0138 bool inBetaminusFissionDecayLikeliness; 0139 bool inTwoBetaminusDecay; 0140 bool inTwoBetaminusDecayLikeliness; 0141 bool inBetaplusDecay; 0142 bool inBetaplusDecayLikeliness; 0143 bool inTwoBetaplusDecay; 0144 bool inTwoBetaplusDecayLikeliness; 0145 bool inBetaminusNeutronDecay; 0146 bool inBetaminusNeutronDecayLikeliness; 0147 bool inBetaminusTwoNeutronDecay; 0148 bool inBetaminusTwoNeutronDecayLikeliness; 0149 bool inBetaminusThreeNeutronDecay; 0150 bool inBetaminusThreeNeutronDecayLikeliness; 0151 bool inBetaminusFourNeutronDecay; 0152 bool inBetaminusFourNeutronDecayLikeliness; 0153 bool inBetaminusAlphaNeutronDecay; 0154 bool inBetaminusAlphaNeutronDecayLikeliness; 0155 bool inBetaminusAlphaDecay; 0156 bool inBetaminusAlphaDecayLikeliness; 0157 bool inBetaminusTwoAlphaDecay; 0158 bool inBetaminusTwoAlphaDecayLikeliness; 0159 bool inBetaminusThreeAlphaDecay; 0160 bool inBetaminusThreeAlphaDecayLikeliness; 0161 bool inBetaplusProtonDecay; 0162 bool inBetaplusProtonDecayLikeliness; 0163 bool inBetaplusTwoProtonDecay; 0164 bool inBetaplusTwoProtonDecayLikeliness; 0165 bool inBetaplusAlphaDecay; 0166 bool inBetaplusAlphaDecayLikeliness; 0167 bool inBetaplusTwoAlphaDecay; 0168 bool inBetaplusTwoAlphaDecayLikeliness; 0169 bool inBetaplusThreeAlphaDecay; 0170 bool inBetaplusThreeAlphaDecayLikeliness; 0171 bool inAlphaBetaminusDecay; 0172 bool inAlphaBetaminusDecayLikeliness; 0173 bool inProtonAlphaDecay; 0174 bool inProtonAlphaDecayLikeliness; 0175 bool inECProtonDecay; 0176 bool inECProtonDecayLikeliness; 0177 bool inECTwoProtonDecay; 0178 bool inECTwoProtonDecayLikeliness; 0179 bool inECThreeProtonDecay; 0180 bool inECThreeProtonDecayLikeliness; 0181 bool inECAlphaDecay; 0182 bool inECAlphaDecayLikeliness; 0183 bool inECAlphaProtonDecay; 0184 bool inECAlphaProtonDecayLikeliness; 0185 bool inSpontFissionDecay; 0186 bool inSpontFissionDecayLikeliness; 0187 bool inAbundance; 0188 }; 0189 0190 IsotopeParser::IsotopeParser() 0191 : QXmlDefaultHandler() 0192 , d(new Private) 0193 { 0194 } 0195 0196 IsotopeParser::~IsotopeParser() 0197 { 0198 delete d; 0199 } 0200 0201 bool IsotopeParser::startElement(const QString &, const QString &localName, const QString &, const QXmlAttributes &attrs) 0202 { 0203 if (localName == QLatin1String("isotopeList")) { 0204 d->inElement = true; 0205 0206 // now save the symbol of the current element 0207 for (int i = 0; i < attrs.length(); ++i) { 0208 if (attrs.localName(i) == QLatin1String("id")) { 0209 d->currentElementSymbol = attrs.value(i); 0210 } 0211 } 0212 } else if (d->inElement && localName == QLatin1String("isotope")) { 0213 d->currentIsotope = new Isotope(); 0214 d->currentIsotope->addData(ChemicalDataObject(QVariant(d->currentElementSymbol), ChemicalDataObject::symbol)); 0215 d->inIsotope = true; 0216 for (int i = 0; i < attrs.length(); ++i) { 0217 if (attrs.localName(i) == QLatin1String("number")) { 0218 d->currentIsotope->setNucleons(attrs.value(i).toInt()); 0219 } 0220 } 0221 } else if (d->inIsotope && localName == QLatin1String("scalar")) { 0222 for (int i = 0; i < attrs.length(); ++i) { 0223 if (attrs.localName(i) == QLatin1String("errorValue")) { 0224 d->currentErrorValue = QVariant(attrs.value(i)); 0225 continue; 0226 } 0227 0228 if (attrs.value(i) == QLatin1String("bo:atomicNumber")) { 0229 d->inAtomicNumber = true; 0230 } else if (attrs.value(i) == QLatin1String("bo:exactMass")) { 0231 d->inExactMass = true; 0232 } else if (attrs.value(i) == QLatin1String("bo:halfLife")) { 0233 for (int i = 0; i < attrs.length(); ++i) { 0234 if (attrs.localName(i) == QLatin1String("units")) { 0235 if (attrs.value(i) == QLatin1String("siUnits:s")) { 0236 d->currentUnit = KUnitConversion::Second; 0237 } else if (attrs.value(i) == QLatin1String("units:y")) { 0238 d->currentUnit = KUnitConversion::Year; 0239 } else { 0240 d->currentUnit = KUnitConversion::NoUnit; 0241 } 0242 } 0243 } 0244 0245 d->currentDataObject.setUnit(d->currentUnit); 0246 d->inHalfLife = true; 0247 } else if (attrs.value(i) == QLatin1String("bo:alphaDecay")) { 0248 d->inAlphaDecay = true; 0249 } else if (attrs.value(i) == QLatin1String("bo:alphaDecayLikeliness")) { 0250 d->inAlphaDecayLikeliness = true; 0251 } else if (attrs.value(i) == QLatin1String("bo:protonDecay")) { 0252 d->inProtonDecay = true; 0253 } else if (attrs.value(i) == QLatin1String("bo:protonDecayLikeliness")) { 0254 d->inProtonDecayLikeliness = true; 0255 } else if (attrs.value(i) == QLatin1String("bo:2protonDecay")) { 0256 d->inTwoProtonDecay = true; 0257 } else if (attrs.value(i) == QLatin1String("bo:2protonDecayLikeliness")) { 0258 d->inTwoProtonDecayLikeliness = true; 0259 } else if (attrs.value(i) == QLatin1String("bo:neutronDecay")) { 0260 d->inNeutronDecay = true; 0261 } else if (attrs.value(i) == QLatin1String("bo:neutronDecayLikeliness")) { 0262 d->inNeutronDecayLikeliness = true; 0263 } else if (attrs.value(i) == QLatin1String("bo:2neutronDecay")) { 0264 d->inTwoNeutronDecay = true; 0265 } else if (attrs.value(i) == QLatin1String("bo:2neutronDecayLikeliness")) { 0266 d->inTwoNeutronDecayLikeliness = true; 0267 } else if (attrs.value(i) == QLatin1String("bo:ecDecay")) { 0268 d->inECDecay = true; 0269 } else if (attrs.value(i) == QLatin1String("bo:ecDecayLikeliness")) { 0270 d->inECDecayLikeliness = true; 0271 } else if (attrs.value(i) == QLatin1String("bo:2ecDecay")) { 0272 d->inTwoECDecay = true; 0273 } else if (attrs.value(i) == QLatin1String("bo:2ecDecayLikeliness")) { 0274 d->inTwoECDecayLikeliness = true; 0275 } else if (attrs.value(i) == QLatin1String("bo:betaminusDecay")) { 0276 d->inBetaminusDecay = true; 0277 } else if (attrs.value(i) == QLatin1String("bo:betaminusDecayLikeliness")) { 0278 d->inBetaminusDecayLikeliness = true; 0279 } else if (attrs.value(i) == QLatin1String("bo:betaminusfissionDecay")) { 0280 d->inBetaminusFissionDecay = true; 0281 } else if (attrs.value(i) == QLatin1String("bo:betaminusfissionDecayLikeliness")) { 0282 d->inBetaminusFissionDecayLikeliness = true; 0283 } else if (attrs.value(i) == QLatin1String("bo:2betaminusDecay")) { 0284 d->inTwoBetaminusDecay = true; 0285 } else if (attrs.value(i) == QLatin1String("bo:2betaminusDecayLikeliness")) { 0286 d->inTwoBetaminusDecayLikeliness = true; 0287 } else if (attrs.value(i) == QLatin1String("bo:betaplusDecay")) { 0288 d->inBetaplusDecay = true; 0289 } else if (attrs.value(i) == QLatin1String("bo:betaplusDecayLikeliness")) { 0290 d->inBetaplusDecayLikeliness = true; 0291 } else if (attrs.value(i) == QLatin1String("bo:2betaplusDecay")) { 0292 d->inTwoBetaplusDecay = true; 0293 } else if (attrs.value(i) == QLatin1String("bo:2betaplusDecayLikeliness")) { 0294 d->inTwoBetaplusDecayLikeliness = true; 0295 } else if (attrs.value(i) == QLatin1String("bo:betaminusneutronDecay")) { 0296 d->inBetaminusNeutronDecay = true; 0297 } else if (attrs.value(i) == QLatin1String("bo:betaminusneutronDecayLikeliness")) { 0298 d->inBetaminusNeutronDecayLikeliness = true; 0299 } else if (attrs.value(i) == QLatin1String("bo:betaminus2neutronDecay")) { 0300 d->inBetaminusTwoNeutronDecay = true; 0301 } else if (attrs.value(i) == QLatin1String("bo:betaminus2neutronDecayLikeliness")) { 0302 d->inBetaminusTwoNeutronDecayLikeliness = true; 0303 } else if (attrs.value(i) == QLatin1String("bo:betaminus3neutronDecay")) { 0304 d->inBetaminusThreeNeutronDecay = true; 0305 } else if (attrs.value(i) == QLatin1String("bo:betaminus3neutronDecayLikeliness")) { 0306 d->inBetaminusThreeNeutronDecayLikeliness = true; 0307 } else if (attrs.value(i) == QLatin1String("bo:betaminus4neutronDecay")) { 0308 d->inBetaminusFourNeutronDecay = true; 0309 } else if (attrs.value(i) == QLatin1String("bo:betaminus4neutronDecayLikeliness")) { 0310 d->inBetaminusFourNeutronDecayLikeliness = true; 0311 } else if (attrs.value(i) == QLatin1String("bo:betaminusalphaneutronDecay")) { 0312 d->inBetaminusAlphaNeutronDecay = true; 0313 } else if (attrs.value(i) == QLatin1String("bo:betaminusalphaneutronDecayLikeliness")) { 0314 d->inBetaminusAlphaNeutronDecayLikeliness = true; 0315 } else if (attrs.value(i) == QLatin1String("bo:betaminusalphaDecay")) { 0316 d->inBetaminusAlphaDecay = true; 0317 } else if (attrs.value(i) == QLatin1String("bo:betaminusalphaDecayLikeliness")) { 0318 d->inBetaminusAlphaDecayLikeliness = true; 0319 } else if (attrs.value(i) == QLatin1String("bo:betaminus2alphaDecay")) { 0320 d->inBetaminusTwoAlphaDecay = true; 0321 } else if (attrs.value(i) == QLatin1String("bo:betaminus2alphaDecayLikeliness")) { 0322 d->inBetaminusTwoAlphaDecayLikeliness = true; 0323 } else if (attrs.value(i) == QLatin1String("bo:betaminus3alphaDecay")) { 0324 d->inBetaminusThreeAlphaDecay = true; 0325 } else if (attrs.value(i) == QLatin1String("bo:betaminus3alphaDecayLikeliness")) { 0326 d->inBetaminusThreeAlphaDecayLikeliness = true; 0327 } else if (attrs.value(i) == QLatin1String("bo:betaplusprotonDecay")) { 0328 d->inBetaplusProtonDecay = true; 0329 } else if (attrs.value(i) == QLatin1String("bo:betaplusprotonDecayLikeliness")) { 0330 d->inBetaplusProtonDecayLikeliness = true; 0331 } else if (attrs.value(i) == QLatin1String("bo:betaplus2protonDecay")) { 0332 d->inBetaplusTwoProtonDecay = true; 0333 } else if (attrs.value(i) == QLatin1String("bo:betaplus2protonDecayLikeliness")) { 0334 d->inBetaplusTwoProtonDecayLikeliness = true; 0335 } else if (attrs.value(i) == QLatin1String("bo:betaplusalphaDecay")) { 0336 d->inBetaplusAlphaDecay = true; 0337 } else if (attrs.value(i) == QLatin1String("bo:betaplusalphaDecayLikeliness")) { 0338 d->inBetaplusAlphaDecayLikeliness = true; 0339 } else if (attrs.value(i) == QLatin1String("bo:betaplus2alphaDecay")) { 0340 d->inBetaplusTwoAlphaDecay = true; 0341 } else if (attrs.value(i) == QLatin1String("bo:betaplus2alphaDecayLikeliness")) { 0342 d->inBetaplusTwoAlphaDecayLikeliness = true; 0343 } else if (attrs.value(i) == QLatin1String("bo:betaplus3alphaDecay")) { 0344 d->inBetaplusThreeAlphaDecay = true; 0345 } else if (attrs.value(i) == QLatin1String("bo:betaplus3alphaDecayLikeliness")) { 0346 d->inBetaplusThreeAlphaDecayLikeliness = true; 0347 } else if (attrs.value(i) == QLatin1String("bo:alphabetaminusDecay")) { 0348 d->inAlphaBetaminusDecay = true; 0349 } else if (attrs.value(i) == QLatin1String("bo:alphabetaminusDecayLikeliness")) { 0350 d->inAlphaBetaminusDecayLikeliness = true; 0351 } else if (attrs.value(i) == QLatin1String("bo:protonalphaDecay")) { 0352 d->inProtonAlphaDecay = true; 0353 } else if (attrs.value(i) == QLatin1String("bo:protonalphaDecayLikeliness")) { 0354 d->inProtonAlphaDecayLikeliness = true; 0355 } else if (attrs.value(i) == QLatin1String("bo:ecprotonDecay")) { 0356 d->inECProtonDecay = true; 0357 } else if (attrs.value(i) == QLatin1String("bo:ecprotonDecayLikeliness")) { 0358 d->inECProtonDecayLikeliness = true; 0359 } else if (attrs.value(i) == QLatin1String("bo:ec2protonDecay")) { 0360 d->inECTwoProtonDecay = true; 0361 } else if (attrs.value(i) == QLatin1String("bo:ec2protonDecayLikeliness")) { 0362 d->inECTwoProtonDecayLikeliness = true; 0363 } else if (attrs.value(i) == QLatin1String("bo:ec3protonDecay")) { 0364 d->inECThreeProtonDecay = true; 0365 } else if (attrs.value(i) == QLatin1String("bo:ec3protonDecayLikeliness")) { 0366 d->inECThreeProtonDecayLikeliness = true; 0367 } else if (attrs.value(i) == QLatin1String("bo:ecalphaDecay")) { 0368 d->inECAlphaDecay = true; 0369 } else if (attrs.value(i) == QLatin1String("bo:ecalphaDecayLikeliness")) { 0370 d->inECAlphaDecayLikeliness = true; 0371 } else if (attrs.value(i) == QLatin1String("bo:ecalphaprotonDecay")) { 0372 d->inECAlphaProtonDecay = true; 0373 } else if (attrs.value(i) == QLatin1String("bo:ecalphaprotonDecayLikeliness")) { 0374 d->inECAlphaProtonDecayLikeliness = true; 0375 } else if (attrs.value(i) == QLatin1String("bo:spontfissionDecay")) { 0376 d->inSpontFissionDecay = true; 0377 } else if (attrs.value(i) == QLatin1String("bo:spontfissionDecayLikeliness")) { 0378 d->inSpontFissionDecayLikeliness = true; 0379 } else if (attrs.value(i) == QLatin1String("bo:spin")) { 0380 d->inSpin = true; 0381 } else if (attrs.value(i) == QLatin1String("bo:magneticMoment")) { 0382 d->inMagMoment = true; 0383 } else if (attrs.value(i) == QLatin1String("bo:relativeAbundance")) { 0384 d->inAbundance = true; 0385 } 0386 } 0387 } 0388 return true; 0389 } 0390 0391 bool IsotopeParser::endElement(const QString &, const QString &localName, const QString &) 0392 { 0393 if (localName == QLatin1String("isotope")) { 0394 d->isotopes.append(d->currentIsotope); 0395 0396 d->currentIsotope = nullptr; 0397 d->inIsotope = false; 0398 } else if (localName == QLatin1String("isotopeList")) { // a new list of isotopes start... 0399 d->inElement = false; 0400 } 0401 0402 return true; 0403 } 0404 0405 bool IsotopeParser::characters(const QString &ch) 0406 { 0407 ChemicalDataObject::BlueObelisk type; 0408 QVariant value; 0409 0410 if (d->inExactMass) { 0411 value = ch.toDouble(); 0412 type = ChemicalDataObject::exactMass; 0413 d->inExactMass = false; 0414 } else if (d->inAtomicNumber) { 0415 value = ch.toInt(); 0416 type = ChemicalDataObject::atomicNumber; 0417 d->inAtomicNumber = false; 0418 } else if (d->inSpin) { 0419 value = ch; 0420 type = ChemicalDataObject::spin; 0421 d->inSpin = false; 0422 } else if (d->inMagMoment) { 0423 value = ch; 0424 type = ChemicalDataObject::magneticMoment; 0425 d->inMagMoment = false; 0426 } else if (d->inHalfLife) { 0427 value = ch.toDouble(); 0428 type = ChemicalDataObject::halfLife; 0429 d->inHalfLife = false; 0430 } else if (d->inAlphaDecay) { 0431 value = ch.toDouble(); 0432 type = ChemicalDataObject::alphaDecay; 0433 d->inAlphaDecay = false; 0434 } else if (d->inAlphaDecayLikeliness) { 0435 value = ch.toDouble(); 0436 type = ChemicalDataObject::alphaDecayLikeliness; 0437 d->inAlphaDecayLikeliness = false; 0438 } else if (d->inProtonDecay) { 0439 value = ch.toDouble(); 0440 type = ChemicalDataObject::protonDecay; 0441 d->inProtonDecay = false; 0442 } else if (d->inProtonDecayLikeliness) { 0443 value = ch.toDouble(); 0444 type = ChemicalDataObject::protonDecayLikeliness; 0445 d->inProtonDecayLikeliness = false; 0446 } else if (d->inTwoProtonDecay) { 0447 value = ch.toDouble(); 0448 type = ChemicalDataObject::twoprotonDecay; 0449 d->inTwoProtonDecay = false; 0450 } else if (d->inTwoProtonDecayLikeliness) { 0451 value = ch.toDouble(); 0452 type = ChemicalDataObject::twoprotonDecayLikeliness; 0453 d->inTwoProtonDecayLikeliness = false; 0454 } else if (d->inNeutronDecay) { 0455 value = ch.toDouble(); 0456 type = ChemicalDataObject::neutronDecay; 0457 d->inNeutronDecay = false; 0458 } else if (d->inNeutronDecayLikeliness) { 0459 value = ch.toDouble(); 0460 type = ChemicalDataObject::neutronDecayLikeliness; 0461 d->inNeutronDecayLikeliness = false; 0462 } else if (d->inTwoNeutronDecay) { 0463 value = ch.toDouble(); 0464 type = ChemicalDataObject::twoneutronDecay; 0465 d->inTwoNeutronDecay = false; 0466 } else if (d->inTwoNeutronDecayLikeliness) { 0467 value = ch.toDouble(); 0468 type = ChemicalDataObject::twoneutronDecayLikeliness; 0469 d->inTwoNeutronDecayLikeliness = false; 0470 } else if (d->inECDecay) { 0471 value = ch.toDouble(); 0472 type = ChemicalDataObject::ecDecay; 0473 d->inECDecay = false; 0474 } else if (d->inECDecayLikeliness) { 0475 value = ch.toDouble(); 0476 type = ChemicalDataObject::ecDecayLikeliness; 0477 d->inECDecayLikeliness = false; 0478 } else if (d->inTwoECDecay) { 0479 value = ch.toDouble(); 0480 type = ChemicalDataObject::twoecDecay; 0481 d->inTwoECDecay = false; 0482 } else if (d->inTwoECDecayLikeliness) { 0483 value = ch.toDouble(); 0484 type = ChemicalDataObject::twoecDecayLikeliness; 0485 d->inTwoECDecayLikeliness = false; 0486 } else if (d->inBetaminusDecay) { 0487 value = ch.toDouble(); 0488 type = ChemicalDataObject::betaminusDecay; 0489 d->inBetaminusDecay = false; 0490 } else if (d->inBetaminusDecayLikeliness) { 0491 value = ch.toDouble(); 0492 type = ChemicalDataObject::betaminusDecayLikeliness; 0493 d->inBetaminusDecayLikeliness = false; 0494 } else if (d->inBetaminusFissionDecay) { 0495 value = ch.toDouble(); 0496 type = ChemicalDataObject::betaminusfissionDecay; 0497 d->inBetaminusFissionDecay = false; 0498 } else if (d->inBetaminusFissionDecayLikeliness) { 0499 value = ch.toDouble(); 0500 type = ChemicalDataObject::betaminusfissionDecayLikeliness; 0501 d->inBetaminusFissionDecayLikeliness = false; 0502 } else if (d->inTwoBetaminusDecay) { 0503 value = ch.toDouble(); 0504 type = ChemicalDataObject::twobetaminusDecay; 0505 d->inTwoBetaminusDecay = false; 0506 } else if (d->inTwoBetaminusDecayLikeliness) { 0507 value = ch.toDouble(); 0508 type = ChemicalDataObject::twobetaminusDecayLikeliness; 0509 d->inTwoBetaminusDecayLikeliness = false; 0510 } else if (d->inBetaplusDecay) { 0511 value = ch.toDouble(); 0512 type = ChemicalDataObject::betaplusDecay; 0513 d->inBetaplusDecay = false; 0514 } else if (d->inBetaplusDecayLikeliness) { 0515 value = ch.toDouble(); 0516 type = ChemicalDataObject::betaplusDecayLikeliness; 0517 d->inBetaplusDecayLikeliness = false; 0518 } else if (d->inTwoBetaplusDecay) { 0519 value = ch.toDouble(); 0520 type = ChemicalDataObject::twobetaplusDecay; 0521 d->inTwoBetaplusDecay = false; 0522 } else if (d->inTwoBetaplusDecayLikeliness) { 0523 value = ch.toDouble(); 0524 type = ChemicalDataObject::twobetaplusDecayLikeliness; 0525 d->inTwoBetaplusDecayLikeliness = false; 0526 } else if (d->inBetaminusNeutronDecay) { 0527 value = ch.toDouble(); 0528 type = ChemicalDataObject::betaminusneutronDecay; 0529 d->inBetaminusNeutronDecay = false; 0530 } else if (d->inBetaminusNeutronDecayLikeliness) { 0531 value = ch.toDouble(); 0532 type = ChemicalDataObject::betaminusneutronDecayLikeliness; 0533 d->inBetaminusNeutronDecayLikeliness = false; 0534 } else if (d->inBetaminusTwoNeutronDecay) { 0535 value = ch.toDouble(); 0536 type = ChemicalDataObject::betaminustwoneutronDecay; 0537 d->inBetaminusTwoNeutronDecay = false; 0538 } else if (d->inBetaminusTwoNeutronDecayLikeliness) { 0539 value = ch.toDouble(); 0540 type = ChemicalDataObject::betaminustwoneutronDecayLikeliness; 0541 d->inBetaminusTwoNeutronDecayLikeliness = false; 0542 } else if (d->inBetaminusThreeNeutronDecay) { 0543 value = ch.toDouble(); 0544 type = ChemicalDataObject::betaminusthreeneutronDecay; 0545 d->inBetaminusThreeNeutronDecay = false; 0546 } else if (d->inBetaminusThreeNeutronDecayLikeliness) { 0547 value = ch.toDouble(); 0548 type = ChemicalDataObject::betaminusthreeneutronDecayLikeliness; 0549 d->inBetaminusThreeNeutronDecayLikeliness = false; 0550 } else if (d->inBetaminusFourNeutronDecay) { 0551 value = ch.toDouble(); 0552 type = ChemicalDataObject::betaminusfourneutronDecay; 0553 d->inBetaminusFourNeutronDecay = false; 0554 } else if (d->inBetaminusFourNeutronDecayLikeliness) { 0555 value = ch.toDouble(); 0556 type = ChemicalDataObject::betaminusfourneutronDecayLikeliness; 0557 d->inBetaminusFourNeutronDecayLikeliness = false; 0558 } else if (d->inBetaminusAlphaNeutronDecay) { 0559 value = ch.toDouble(); 0560 type = ChemicalDataObject::betaminusalphaneutronDecay; 0561 d->inBetaminusAlphaNeutronDecay = false; 0562 } else if (d->inBetaminusAlphaNeutronDecayLikeliness) { 0563 value = ch.toDouble(); 0564 type = ChemicalDataObject::betaminusalphaneutronDecayLikeliness; 0565 d->inBetaminusAlphaNeutronDecayLikeliness = false; 0566 } else if (d->inBetaminusAlphaDecay) { 0567 value = ch.toDouble(); 0568 type = ChemicalDataObject::betaminusalphaDecay; 0569 d->inBetaminusAlphaDecay = false; 0570 } else if (d->inBetaminusAlphaDecayLikeliness) { 0571 value = ch.toDouble(); 0572 type = ChemicalDataObject::betaminusalphaDecayLikeliness; 0573 d->inBetaminusAlphaDecayLikeliness = false; 0574 } else if (d->inBetaminusTwoAlphaDecay) { 0575 value = ch.toDouble(); 0576 type = ChemicalDataObject::betaminustwoalphaDecay; 0577 d->inBetaminusTwoAlphaDecay = false; 0578 } else if (d->inBetaminusTwoAlphaDecayLikeliness) { 0579 value = ch.toDouble(); 0580 type = ChemicalDataObject::betaminustwoalphaDecayLikeliness; 0581 d->inBetaminusTwoAlphaDecayLikeliness = false; 0582 } else if (d->inBetaminusThreeAlphaDecay) { 0583 value = ch.toDouble(); 0584 type = ChemicalDataObject::betaminusthreealphaDecay; 0585 d->inBetaminusThreeAlphaDecay = false; 0586 } else if (d->inBetaminusThreeAlphaDecayLikeliness) { 0587 value = ch.toDouble(); 0588 type = ChemicalDataObject::betaminusthreealphaDecayLikeliness; 0589 d->inBetaminusThreeAlphaDecayLikeliness = false; 0590 } else if (d->inBetaplusProtonDecay) { 0591 value = ch.toDouble(); 0592 type = ChemicalDataObject::betaplusprotonDecay; 0593 d->inBetaplusProtonDecay = false; 0594 } else if (d->inBetaplusProtonDecayLikeliness) { 0595 value = ch.toDouble(); 0596 type = ChemicalDataObject::betaplusprotonDecayLikeliness; 0597 d->inBetaplusProtonDecayLikeliness = false; 0598 } else if (d->inBetaplusTwoProtonDecay) { 0599 value = ch.toDouble(); 0600 type = ChemicalDataObject::betaplustwoprotonDecay; 0601 d->inBetaplusTwoProtonDecay = false; 0602 } else if (d->inBetaplusTwoProtonDecayLikeliness) { 0603 value = ch.toDouble(); 0604 type = ChemicalDataObject::betaplustwoprotonDecayLikeliness; 0605 d->inBetaplusTwoProtonDecayLikeliness = false; 0606 } else if (d->inBetaplusAlphaDecay) { 0607 value = ch.toDouble(); 0608 type = ChemicalDataObject::betaplusalphaDecay; 0609 d->inBetaplusAlphaDecay = false; 0610 } else if (d->inBetaplusAlphaDecayLikeliness) { 0611 value = ch.toDouble(); 0612 type = ChemicalDataObject::betaplusalphaDecayLikeliness; 0613 d->inBetaplusAlphaDecayLikeliness = false; 0614 } else if (d->inBetaplusTwoAlphaDecay) { 0615 value = ch.toDouble(); 0616 type = ChemicalDataObject::betaplustwoalphaDecay; 0617 d->inBetaplusTwoAlphaDecay = false; 0618 } else if (d->inBetaplusTwoAlphaDecayLikeliness) { 0619 value = ch.toDouble(); 0620 type = ChemicalDataObject::betaplustwoalphaDecayLikeliness; 0621 d->inBetaplusTwoAlphaDecayLikeliness = false; 0622 } else if (d->inBetaplusThreeAlphaDecay) { 0623 value = ch.toDouble(); 0624 type = ChemicalDataObject::betaplusthreealphaDecay; 0625 d->inBetaplusThreeAlphaDecay = false; 0626 } else if (d->inBetaplusThreeAlphaDecayLikeliness) { 0627 value = ch.toDouble(); 0628 type = ChemicalDataObject::betaplusthreealphaDecayLikeliness; 0629 d->inBetaplusThreeAlphaDecayLikeliness = false; 0630 } else if (d->inAlphaBetaminusDecay) { 0631 value = ch.toDouble(); 0632 type = ChemicalDataObject::alphabetaminusDecay; 0633 d->inAlphaBetaminusDecay = false; 0634 } else if (d->inAlphaBetaminusDecayLikeliness) { 0635 value = ch.toDouble(); 0636 type = ChemicalDataObject::alphabetaminusDecayLikeliness; 0637 d->inAlphaBetaminusDecayLikeliness = false; 0638 } else if (d->inProtonAlphaDecay) { 0639 value = ch.toDouble(); 0640 type = ChemicalDataObject::protonalphaDecay; 0641 d->inProtonAlphaDecay = false; 0642 } else if (d->inProtonAlphaDecayLikeliness) { 0643 value = ch.toDouble(); 0644 type = ChemicalDataObject::protonalphaDecayLikeliness; 0645 d->inProtonAlphaDecayLikeliness = false; 0646 } else if (d->inECProtonDecay) { 0647 value = ch.toDouble(); 0648 type = ChemicalDataObject::ecprotonDecay; 0649 d->inECProtonDecay = false; 0650 } else if (d->inECProtonDecayLikeliness) { 0651 value = ch.toDouble(); 0652 type = ChemicalDataObject::ecprotonDecayLikeliness; 0653 d->inECProtonDecayLikeliness = false; 0654 } else if (d->inECTwoProtonDecay) { 0655 value = ch.toDouble(); 0656 type = ChemicalDataObject::ectwoprotonDecay; 0657 d->inECTwoProtonDecay = false; 0658 } else if (d->inECTwoProtonDecayLikeliness) { 0659 value = ch.toDouble(); 0660 type = ChemicalDataObject::ectwoprotonDecayLikeliness; 0661 d->inECTwoProtonDecayLikeliness = false; 0662 } else if (d->inECThreeProtonDecay) { 0663 value = ch.toDouble(); 0664 type = ChemicalDataObject::ecthreeprotonDecay; 0665 d->inECThreeProtonDecay = false; 0666 } else if (d->inECThreeProtonDecayLikeliness) { 0667 value = ch.toDouble(); 0668 type = ChemicalDataObject::ecthreeprotonDecayLikeliness; 0669 d->inECThreeProtonDecayLikeliness = false; 0670 } else if (d->inECAlphaDecay) { 0671 value = ch.toDouble(); 0672 type = ChemicalDataObject::ecalphaDecay; 0673 d->inECAlphaDecay = false; 0674 } else if (d->inECAlphaDecayLikeliness) { 0675 value = ch.toDouble(); 0676 type = ChemicalDataObject::ecalphaDecayLikeliness; 0677 d->inECAlphaDecayLikeliness = false; 0678 } else if (d->inECAlphaProtonDecay) { 0679 value = ch.toDouble(); 0680 type = ChemicalDataObject::ecalphaprotonDecay; 0681 d->inECAlphaProtonDecay = false; 0682 } else if (d->inECAlphaProtonDecayLikeliness) { 0683 value = ch.toDouble(); 0684 type = ChemicalDataObject::ecalphaprotonDecayLikeliness; 0685 d->inECAlphaProtonDecayLikeliness = false; 0686 } else if (d->inSpontFissionDecay) { 0687 value = ch.toDouble(); 0688 type = ChemicalDataObject::spontfissionDecay; 0689 d->inSpontFissionDecay = false; 0690 } else if (d->inSpontFissionDecayLikeliness) { 0691 value = ch.toDouble(); 0692 type = ChemicalDataObject::spontfissionDecayLikeliness; 0693 d->inSpontFissionDecayLikeliness = false; 0694 } else if (d->inAbundance) { 0695 value = ch; 0696 type = ChemicalDataObject::relativeAbundance; 0697 d->inAbundance = false; 0698 } else { // it is a non known value. Do not create a wrong object but return 0699 return true; 0700 } 0701 0702 if (type == ChemicalDataObject::exactMass) { 0703 d->currentDataObject.setErrorValue(d->currentErrorValue); 0704 } 0705 0706 d->currentDataObject.setData(value); 0707 d->currentDataObject.setType(type); 0708 0709 if (d->currentIsotope) { 0710 d->currentIsotope->addData(d->currentDataObject); 0711 } 0712 0713 return true; 0714 } 0715 0716 QList<Isotope *> IsotopeParser::getIsotopes() const 0717 { 0718 return d->isotopes; 0719 }