#include #include #include #include #include #include #include #include #include #include namespace duchamp { VOTableCatalogueWriter::VOTableCatalogueWriter(): CatalogueWriter() { this->itsTableName=""; this->itsTableDescription=""; } VOTableCatalogueWriter::VOTableCatalogueWriter(std::string name): CatalogueWriter(name) { this->itsTableName=""; this->itsTableDescription=""; } VOTableCatalogueWriter::VOTableCatalogueWriter(const VOTableCatalogueWriter& other) { this->operator=(other); } VOTableCatalogueWriter& VOTableCatalogueWriter::operator= (const VOTableCatalogueWriter& other) { if(this==&other) return *this; ((CatalogueWriter &) *this) = other; this->itsOpenFlag=false; this->itsTableName=other.itsTableName; this->itsTableDescription=other.itsTableDescription; return *this; } bool VOTableCatalogueWriter::openCatalogue(std::ios_base::openmode mode) { if(this->itsName == ""){ DUCHAMPERROR("VOTableCatalogueWriter","No catalogue name provided"); this->itsOpenFlag = false; } else { this->itsFileStream.open(this->itsName.c_str(),mode); this->itsOpenFlag = !this->itsFileStream.fail(); } if(!this->itsOpenFlag) DUCHAMPERROR("VOTableCatalogueWriter","Could not open file \""<itsName<<"\""); return this->itsOpenFlag; } void VOTableCatalogueWriter::writeHeader() { if(this->itsOpenFlag){ this->itsFileStream<<"\n"; this->itsFileStream<<"itsFileStream<<" xsi:noNamespaceSchemaLocation=\"http://www.ivoa.net/xml/VOTable/VOTable/v1.1\">\n"; std::string ID,equinox,system; if(std::string(this->itsHead->WCS().lngtyp)=="RA") { //J2000 or B1950 if(this->itsHead->WCS().equinox==2000.){ ID=equinox= "J2000"; system="eq_FK5"; } else{ ID=equinox="B1950"; system="eq_FK4"; } this->itsFileStream <<" \n"; } else{ ID=system="galactic"; this->itsFileStream <<" \n"; } this->itsFileStream<<" \n"; this->itsFileStream<<" itsTableName<<"\">\n"; this->itsFileStream<<" "<itsTableDescription<<"\n"; } } void VOTableCatalogueWriter::writeParameters() { if(this->itsOpenFlag){ std::vector paramList = this->itsParam->getVOParams(); for(std::vector::iterator param=paramList.begin();paramitsFileStream << " "; param->printParam(this->itsFileStream); } } } void VOTableCatalogueWriter::writeStats() { if(this->itsOpenFlag){ VOParam threshParam("thresholdActual","","float",this->itsStats->getThreshold(),0,this->itsHead->getFluxUnits()); this->itsFileStream << " "; threshParam.printParam(this->itsFileStream); if(!this->itsParam->getFlagUserThreshold()){ VOParam middleParam("noiseMeanActual","","float",this->itsStats->getMiddle(),0,this->itsHead->getFluxUnits()); this->itsFileStream << " "; middleParam.printParam(this->itsFileStream); VOParam spreadParam("noiseSpreadActual","","float",this->itsStats->getSpread(),0,this->itsHead->getFluxUnits()); this->itsFileStream << " "; spreadParam.printParam(this->itsFileStream); } } } void VOTableCatalogueWriter::writeTableHeader() { std::map posUCDmap; posUCDmap.insert(std::pair("ra","pos.eq.ra")); posUCDmap.insert(std::pair("dec","pos.eq.dec")); posUCDmap.insert(std::pair("glon","pos.galactic.lng")); posUCDmap.insert(std::pair("glat","pos.galactic.lat")); Catalogues::Column raCol=this->itsColumnSpecification->at(Catalogues::RAJD); std::string lngUCDbase = posUCDmap[makelower(raCol.getName())]; Catalogues::Column decCol=this->itsColumnSpecification->at(Catalogues::DECJD); std::string latUCDbase = posUCDmap[makelower(decCol.getName())]; std::map specUCDmap; specUCDmap.insert(std::pair("VELO","phys.veloc;spect.dopplerVeloc")); specUCDmap.insert(std::pair("VOPT","phys.veloc;spect.dopplerVeloc.opt")); specUCDmap.insert(std::pair("VRAD","phys.veloc;spect.dopplerVeloc.rad")); specUCDmap.insert(std::pair("FREQ","em.freq")); specUCDmap.insert(std::pair("ENER","em.energy")); specUCDmap.insert(std::pair("WAVN","em.wavenumber")); specUCDmap.insert(std::pair("WAVE","em.wl")); specUCDmap.insert(std::pair("AWAV","em.wl")); specUCDmap.insert(std::pair("ZOPT","src.redshift")); specUCDmap.insert(std::pair("BETA","src.redshift; spect.dopplerVeloc")); std::string specUCDbase = specUCDmap[this->itsColumnSpecification->at(Catalogues::VEL).getName()]; std::vector::iterator col; for(col=this->itsColumnSpecification->begin();colitsColumnSpecification->end();col++){ if(col->doCol(Catalogues::VOTABLE,this->itsHead->isSpecOK())){ VOField field(*col); if(col->type()=="RAJD") field.setUCD(lngUCDbase+";meta.main"); if(col->type()=="WRA") field.setUCD("phys.angSize;"+lngUCDbase); if(col->type()=="DECJD") field.setUCD(latUCDbase+";meta.main"); if(col->type()=="WDEC") field.setUCD("phys.angSize;"+latUCDbase); if(col->type()=="VEL") field.setUCD(specUCDbase+";meta.main"); if(col->type()=="W20") field.setUCD("spect.line.width;"+specUCDbase); if(col->type()=="W50") field.setUCD("spect.line.width;"+specUCDbase); if(col->type()=="WVEL") field.setUCD("spect.line.width;"+specUCDbase); this->itsFileStream << " "; field.printField(this->itsFileStream); } } this->itsFileStream<<" \n" <<" \n"; } void VOTableCatalogueWriter::writeEntries() { this->itsFileStream.setf(std::ios::fixed); for(std::vector::iterator obj=this->itsObjectList->begin();objitsObjectList->end();obj++) this->writeEntry(&*obj); } void VOTableCatalogueWriter::writeEntry(Detection *object) { this->itsFileStream<<" \n"; this->itsFileStream<<" "; std::vector::iterator col; for(col=this->itsColumnSpecification->begin();colitsColumnSpecification->end();col++){ if(col->doCol(Catalogues::VOTABLE,this->itsHead->isSpecOK())){ this->itsFileStream<<""; } } this->itsFileStream<<"\n"; this->itsFileStream<<" \n"; } void VOTableCatalogueWriter::writeFooter() { this->itsFileStream<<" \n"; this->itsFileStream<<" \n"; this->itsFileStream<<"
"; object->printTableEntry(this->itsFileStream, *col); this->itsFileStream<<"
\n"; this->itsFileStream<<"
\n"; this->itsFileStream<<"
\n"; resetiosflags(std::ios::fixed); } bool VOTableCatalogueWriter::closeCatalogue() { this->itsFileStream.close(); return !this->itsFileStream.fail(); } }