#include "machdefs.h" #include #include #include #include #include #include #include #include "piacmd.h" #include "nobjmgr.h" #include "pistdimgapp.h" #include "servnobjm.h" #include "tvector.h" #include "pidrawer.h" #include "nomgadapter.h" #include "skymap.h" #include "sphericaltransformserver.h" extern "C" { void skymapmodule_init(); void skymapmodule_end(); } class skymapmoduleExecutor : public CmdExecutor { public: skymapmoduleExecutor(); virtual ~skymapmoduleExecutor(); virtual int Execute(string& keyw, vector& args, string& toks); void Map2Double(vector& tokens); void MapMult(vector& tokens); void Map2Cl(vector& tokens); void CrMapMask(vector& tokens); void CrMaskFrMap(vector& tokens); void MaskMap(vector& tokens); void MapProj(vector& tokens); void MapOper(vector& tokens); }; /* --Methode-- */ skymapmoduleExecutor::skymapmoduleExecutor() { PIACmd * mpiac; NamedObjMgr omg; mpiac = omg.GetImgApp()->CmdInterpreter(); string hgrp = "SkyMapCmd"; string kw = "map2double"; string usage = "Convert a float map to a double map"; usage += "\n Usage: map2double map"; mpiac->RegisterCommand(kw, usage, this, hgrp); kw = "mapmult"; usage = "Multiply a map by a constant"; usage += "\n Usage: mapmult map cste"; mpiac->RegisterCommand(kw, usage, this, hgrp); kw = "map2cl"; usage = "SkyMap to Cl"; usage += "\n Usage: map2cl map(double) clvec [lmax] [niter]"; mpiac->RegisterCommand(kw, usage, this, hgrp); kw = "crmapmask"; usage = "Create a map mask (nside) between latitudes lat1 lat2"; usage += "\n Usage: crmapmask mapmsk nside lat1 lat2 [valmsk=0] [valnomsk=1]"; usage += "\n mask pixels between [lat1,lat2] ([-90,90] in degrees)"; usage += "\n valmsk=value to be written into masked pixels"; usage += "\n valnomsk=value to be written into unmasked pixels"; mpiac->RegisterCommand(kw, usage, this, hgrp); kw = "crmaskfrmap"; usage = "Create a map mask (nside) relative to an other map pixels values"; usage += "\n Usage: crmaskfrmap mapmsk nside map(double) v1 v2 [valmsk=0] [valnomsk=1]"; usage += "\n mask if v1RegisterCommand(kw, usage, this, hgrp); kw = "maskmap"; usage = "Mask a map with a mask map"; usage += "\n Usage: maskmap map msk"; usage += "\n operation is map(i) *= msk(theta,phi)"; mpiac->RegisterCommand(kw, usage, this, hgrp); kw = "maproj"; usage = "Project a map into an other one"; usage += "\n Usage: maproj map mapproj [nside]"; usage += "\n Create mapproj(nside) and project map into mapproj"; usage += "\n (use \"maproj map mapproj\" to make a copy)"; mpiac->RegisterCommand(kw, usage, this, hgrp); kw = "mapop"; usage = "operation on a map"; usage += "\n Usage: mapop map op1 map1 [op2 map2] [op2 map3] [...]"; usage += "\n Do \"map op1= map1\", \"map op2=map2\", ..."; usage += "\n where op = +,-,*,/"; mpiac->RegisterCommand(kw, usage, this, hgrp); } /* --Methode-- */ skymapmoduleExecutor::~skymapmoduleExecutor() { } /* --Methode-- */ int skymapmoduleExecutor::Execute(string& kw, vector& tokens, string& toks) { if(kw == "map2double") { if(tokens.size()<1) { cout<<"Usage: map2double map"<& tokens) { NamedObjMgr omg; AnyDataObj* obj=omg.GetObj(tokens[0]); if(obj==NULL) { cout<<"Error: Pas d'objet de nom "<* map = dynamic_cast*>(obj); if(map==NULL) { cout<<"Error: "<"<SizeIndex(); SphereHEALPix* map8 = new SphereHEALPix(nside); cout<<"Map2Double: converting to double "<NbPixels();i++) (*map8)(i) = (r_8) (*map)(i); omg.AddObj(map8,tokens[0]); } /* --Methode-- */ void skymapmoduleExecutor::MapMult(vector& tokens) { NamedObjMgr omg; AnyDataObj* obj=omg.GetObj(tokens[0]); if(obj==NULL) { cout<<"Error: Pas d'objet de nom "<* map = dynamic_cast*>(obj); if(map==NULL) { cout<<"Error: "<"<NbPixels();i++) (*map)(i) *= v; } /* --Methode-- */ void skymapmoduleExecutor::Map2Cl(vector& tokens) { NamedObjMgr omg; int_4 lmax=0, niter=3; if(tokens.size()>2) lmax = atoi(tokens[2].c_str()); if(tokens.size()>3) niter = atoi(tokens[3].c_str()); if(niter<=0) niter = 3; AnyDataObj* obj=omg.GetObj(tokens[0]); if(obj==NULL) { cout<<"Error: Pas d'objet de nom "<* map = dynamic_cast*>(obj); if(map==NULL) { cout<<"Error: "<"< ylmserver; int_4 nside = map->SizeIndex(); if(lmax<=0) lmax = 3*nside-1; cout<<"Map2Cl: "< "<* map = new SphereHEALPix(nside); double lat1=-1.e30, lat2=1.e30; if(tokens.size()>2) lat1=atof(tokens[2].c_str()); if(tokens.size()>3) lat2=atof(tokens[3].c_str()); double valmsk=0., unvalmsk=1.; if(tokens.size()>4) valmsk=atof(tokens[4].c_str()); if(tokens.size()>5) unvalmsk=atof(tokens[5].c_str()); cout<<"CrMapMask "<* map = dynamic_cast*>(obj); if(map==NULL) { cout<<"Error: "<"<* msk = new SphereHEALPix(nside); double v1=-1.e50, v2=1.e50; if(tokens.size()>3) v1 = atof(tokens[3].c_str()); if(tokens.size()>4) v2 = atof(tokens[4].c_str()); double valmsk=0., unvalmsk=1.; if(tokens.size()>5) valmsk=atof(tokens[5].c_str()); if(tokens.size()>6) unvalmsk=atof(tokens[6].c_str()); cout<<"CrMaskFrMap "<* map = dynamic_cast*>(obj); if(map==NULL) { cout<<"Error: "<"<* msk = dynamic_cast*>(objm); if(msk==NULL) { cout<<"Error: "<"<NbPixels();i++) { double theta,phi; map->PixThetaPhi(i,theta,phi); int_4 ip = msk->PixIndexSph(theta,phi); if(ip<0 || ip>=msk->NbPixels()) continue; (*map)(i) *= (*msk)(ip); } } /* --Methode-- */ void skymapmoduleExecutor::MapProj(vector& tokens) { NamedObjMgr omg; AnyDataObj* obj=omg.GetObj(tokens[0]); if(obj==NULL) { cout<<"Error: Pas d'objet de nom "<* map = dynamic_cast*>(obj); if(map==NULL) { cout<<"Error: "<"<SizeIndex(); int_4 nside = nsidemap; if(tokens.size()>2) nside = atoi(tokens[2].c_str()); if(nside<=1) return; int_4 n=nside; bool ok=true; while(n>1) {if(n%2!=0) {ok=false; break;} else n/=2;} if(!ok) {cout<<"MapProj: Bad nside "<* mapproj = new SphereHEALPix(nside); if(nsidemap==nside) { // tailles egales for(int_4 i=0;iNbPixels();i++) (*mapproj)(i) = (*map)(i); } else if(nsidemapmap for(int_4 i=0;iNbPixels();i++) { double theta,phi; mapproj->PixThetaPhi(i,theta,phi); int_4 ip = map->PixIndexSph(theta,phi); if(ip<0 || ip>=map->NbPixels()) continue; (*mapproj)(i) = (*map)(ip); } } else { // mapproj nproj(nside); nproj = 0; *mapproj = 0.; for(int_4 i=0;iNbPixels();i++) { double theta,phi; map->PixThetaPhi(i,theta,phi); int_4 ip = mapproj->PixIndexSph(theta,phi); if(ip<0 || ip>=mapproj->NbPixels()) continue; (*mapproj)(ip) += (*map)(i); nproj(ip)++; } for(int_4 i=0;iNbPixels();i++) (*mapproj)(i) /= (r_8) nproj(i); } omg.AddObj(mapproj,tokens[1]); } /* --Methode-- */ void skymapmoduleExecutor::MapOper(vector& tokens) { NamedObjMgr omg; AnyDataObj* obj=omg.GetObj(tokens[0]); if(obj==NULL) { cout<<"Error: Pas d'objet de nom "<* map = dynamic_cast*>(obj); if(map==NULL) { cout<<"Error: "<"<* map1 = dynamic_cast*>(obj1); if(map1==NULL) {cout<<"Error: "<"<