/***********************************************************************//** * @brief Save event list into FITS file * * @param[in] obs Pointer to CTA observation. * @param[in] infile Input file name. * @param[in] outfile Output file name. * * Saves an event list into a FITS file and copy all others extensions from * the input file to the output file. ***************************************************************************/ void ctselect::save_event_list(const GCTAObservation* obs, const std::string& infile, const std::string& outfile) const { // Save only if observation is valid if (obs != NULL) { // Save observation into FITS file obs->save(outfile, clobber()); // Copy all extensions other than EVENTS and GTI from the input to // the output event list. The EVENTS and GTI extensions are written // by the save method, all others that may eventually be present // have to be copied by hand. GFits infits(infile); GFits outfits(outfile); for (int extno = 1; extno < infits.size(); ++extno) { GFitsHDU* hdu = infits.hdu(extno); if (hdu->extname() != "EVENTS" && hdu->extname() != "GTI") { outfits.append(*hdu); } } // Close input file infits.close(); // Save file to disk and close it (we need both operations) outfits.save(true); outfits.close(); } // endif: observation was valid // Return return; }
/***********************************************************************//** * @brief Publish FITS HDU * * @param[in] hdu FITS HDU * * Publishes a FITS HDU. ***************************************************************************/ void GVOClient::publish(const GFitsHDU& hdu) { // Signal that client should be disconnected after sending the image // to Hub bool disconnected = !is_connected(); // Make sure that the client is connected to a Hub if (disconnected) { connect(); } // Save FITS HDU into a temporary file std::string samp_share = std::tmpnam(NULL); GFits fits; fits.append(hdu); fits.saveto(samp_share, true); // Get FITS extension name std::string extname = hdu.extname(); if (extname.empty()) { extname = "FITS Image"; } // Compose notification to be passed to the Hub std::string hub_command = ""; hub_command.append("<?xml version=\"1.0\"?>\n"); hub_command.append("<methodCall>\n"); hub_command.append(" <methodName>samp.hub.notifyAll</methodName>\n"); hub_command.append(" <params>\n"); hub_command.append(" <param><value>image.load.fits</value></param>\n"); hub_command.append(" <param><value>"+m_secret+"</value></param>\n"); hub_command.append(" <param><value><struct>\n"); hub_command.append(" <member><name>samp.params</name><value><struct>\n"); hub_command.append(" <member><name>name</name><value>"+extname+"</value></member>\n"); hub_command.append(" <member><name>url</name><value>file://localhost"+samp_share+"</value></member>\n"); hub_command.append(" <member><name>image-id</name><value>Gammalib Data</value></member>\n"); hub_command.append(" </struct></value></member>\n"); hub_command.append(" <member><name>samp.mtype</name><value>image.load.fits</value></member>\n"); hub_command.append(" </struct></value></param>\n"); hub_command.append(" </params>\n"); hub_command.append("</methodCall>\n"); // Send notification execute(hub_command); // Disconnect client from Hub if (disconnected) { disconnect(); } // Return return; }