Changeset 19452 for trunk/FACT++/src
- Timestamp:
- 03/28/19 18:40:40 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/src/gcn.cc
r19429 r19452 1 1 #include <functional> 2 #include <boost/algorithm/string/join.hpp> 2 3 3 4 #include "Dim.h" … … 16 17 17 18 #include "HeadersGCN.h" 19 #include "HeadersToO.h" 18 20 19 21 #include <QtXml/QDomDocument> … … 44 46 Time fLastKeepAlive; 45 47 46 GCN::PaketType_t GetType(const QDomElement &what)48 QString GetParamValue(const QDomElement &what, const string &name) 47 49 { 48 50 const QDomNodeList param = what.elementsByTagName("Param"); … … 50 52 { 51 53 const QDomElement elem = param.at(i).toElement(); 52 if (elem.attribute("name").toStdString()!="Packet_Type") 53 continue; 54 55 const uint16_t val = elem.attribute("value").toUInt(); 56 const auto it = fTypes.find(val); 57 if (it!=fTypes.end()) 58 return it->second; 59 60 Warn("Unknown paket type "+to_string(val)+"."); 61 } 62 54 if (elem.attribute("name").toStdString()==name) 55 return elem.attribute("value"); 56 } 57 58 return ""; 59 } 60 61 GCN::PaketType_t GetType(const QDomElement &what) 62 { 63 const auto value = GetParamValue(what, "Packet_Type"); 64 if (value.isEmpty()) 65 return { -1, "", "" }; 66 67 const uint16_t val = value.toUInt(); 68 const auto it = fTypes.find(val); 69 if (it!=fTypes.end()) 70 return it->second; 71 72 Warn("Unknown paket type "+to_string(val)+"."); 63 73 return { -1, "", "" }; 64 74 } 65 66 75 67 76 int ProcessXml(const QDomElement &root) … … 117 126 return -1; 118 127 128 const GCN::PaketType_t ptype = GetType(what); 129 119 130 const QDomElement date = who.firstChildElement("Date"); 120 131 const QDomElement author = who.firstChildElement("Author"); … … 135 146 const QDomElement errad = pos2d.firstChildElement("Error2Radius"); 136 147 137 if (date.isNull() || author.isNull() || sname.isNull() || //desc.isNull() || 138 obsdat.isNull() || obsloc.isNull() || coord.isNull() || time.isNull() || 139 pos2d.isNull() || name1.isNull() || name2.isNull() || val2.isNull() || 140 c1.isNull() || c2.isNull() || errad.isNull()) 148 const bool is_gw = ptype.type==150 || ptype.type==151 || ptype.type==153; 149 150 vector<string> missing; 151 if (date.isNull()) 152 missing.emplace_back("Date"); 153 if (author.isNull()) 154 missing.emplace_back("Author"); 155 if (sname.isNull() && !is_gw) 156 missing.emplace_back("shortName"); 157 if (obsdat.isNull()) 158 missing.emplace_back("ObsDataLocation"); 159 if (obsloc.isNull()) 160 missing.emplace_back("ObservationLocation"); 161 if (coord.isNull()) 162 missing.emplace_back("AstroCoords"); 163 if (time.isNull()) 164 missing.emplace_back("Time/TimeInstant/ISOTime"); 165 if (pos2d.isNull() && !is_gw) 166 missing.emplace_back("Position2D"); 167 if (name1.isNull() && !is_gw) 168 missing.emplace_back("Name1"); 169 if (name1.isNull() && !is_gw) 170 missing.emplace_back("Name2"); 171 if (val2.isNull() && !is_gw) 172 missing.emplace_back("Value2"); 173 if (c1.isNull() && !is_gw) 174 missing.emplace_back("C1"); 175 if (c2.isNull() && !is_gw) 176 missing.emplace_back("C2"); 177 if (errad.isNull() && !is_gw) 178 missing.emplace_back("Error2Radius"); 179 180 if (!missing.empty()) 181 { 182 Warn("Missing elements: "+boost::algorithm::join(missing, ", ")); 141 183 return -1; 142 143 const GCN::PaketType_t ptype = GetType(what); 184 } 144 185 145 186 // 59/31: Konus LC / IPN raw [observation] … … 195 236 const string unit = pos2d.attribute("unit").toStdString(); 196 237 197 const double ra = c1.text().toDouble(); 198 const double dec = c2.text().toDouble(); 199 const double err = errad.text().toDouble(); 238 const uint32_t trig = GetParamValue(what, "TrigID").toUInt(); 239 const double ra = c1.text().toDouble(); 240 const double dec = c2.text().toDouble(); 241 const double err = errad.text().toDouble(); 200 242 201 243 const string n1 = name1.text().toStdString(); … … 212 254 Out() << " " << setw(5) << "ERR" << "= " << err << unit << '\n'; 213 255 214 if (n1=="RA" && n2=="Dec" && unit=="deg") 256 const bool has_coordinates = n1=="RA" && n2=="Dec" && unit=="deg"; 257 258 if (has_coordinates) 215 259 { 260 const ToO::DataGRB data = 261 { 262 .type = ptype.type, 263 .trigid = trig, 264 .ra = ra, 265 .dec = dec, 266 .err = err, 267 }; 268 269 Info("Sending ToO #"+to_string(trig)+" ["+role+"]"); 270 Dim::SendCommandNB("TARGET_OF_OPPORTUNITY/SCHEDULE_GCN", data); 271 272 /* 216 273 const double jd = Time().JD(); 217 274 … … 244 301 Out() << '\n'; 245 302 } 303 */ 246 304 } 247 305
Note:
See TracChangeset
for help on using the changeset viewer.