Ignore:
Timestamp:
03/28/19 18:40:40 (5 years ago)
Author:
tbretz
Message:
This implements changes which are required for follow-up observations. Note that up to date these are untested and will be rolled out and debugged in La Palam in the next days.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/gcn.cc

    r19429 r19452  
    11#include <functional>
     2#include <boost/algorithm/string/join.hpp>
    23
    34#include "Dim.h"
     
    1617
    1718#include "HeadersGCN.h"
     19#include "HeadersToO.h"
    1820
    1921#include <QtXml/QDomDocument>
     
    4446    Time fLastKeepAlive;
    4547
    46     GCN::PaketType_t GetType(const QDomElement &what)
     48    QString GetParamValue(const QDomElement &what, const string &name)
    4749    {
    4850        const QDomNodeList param = what.elementsByTagName("Param");
     
    5052        {
    5153            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)+".");
    6373        return { -1, "", "" };
    6474    }
    65 
    6675
    6776    int ProcessXml(const QDomElement &root)
     
    117126                return -1;
    118127
     128            const GCN::PaketType_t ptype = GetType(what);
     129
    119130            const QDomElement date   = who.firstChildElement("Date");
    120131            const QDomElement author = who.firstChildElement("Author");
     
    135146            const QDomElement errad  = pos2d.firstChildElement("Error2Radius");
    136147
    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, ", "));
    141183                return -1;
    142 
    143             const GCN::PaketType_t ptype = GetType(what);
     184            }
    144185
    145186            //  59/31: Konus LC / IPN raw         [observation]
     
    195236            const string unit = pos2d.attribute("unit").toStdString();
    196237
    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();
    200242
    201243            const string n1 = name1.text().toStdString();
     
    212254            Out() << "  " << setw(5) << "ERR"  << "= " << err << unit << '\n';
    213255
    214             if (n1=="RA" && n2=="Dec" && unit=="deg")
     256            const bool has_coordinates = n1=="RA" && n2=="Dec" && unit=="deg";
     257
     258            if (has_coordinates)
    215259            {
     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/*
    216273                const double jd = Time().JD();
    217274
     
    244301                    Out() << '\n';
    245302                }
     303*/
    246304            }
    247305
Note: See TracChangeset for help on using the changeset viewer.