Ignore:
Timestamp:
Jan 16, 2006, 11:35:04 AM (20 years ago)
Author:
ansari
Message:

Ajout commandes read/write/scan fits (nouveau fits) dans fitsbtadapter.cc - Reza 16/01/2005

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/ProgPI/fitsbtadapter.cc

    r2615 r2902  
    11/* Interface Fits BINARY/ASCII Table     cmv 21/05/2001 */
     2/*    Ajout commandes generique lecture/ecriture FITS   */
     3/*                           Reza , Jan 2006            */
     4
     5
    26#include "sopnamsp.h"
    37#include "machdefs.h"
     
    1519#include "fbtntintf.h"
    1620
     21#include "fitsmanager.h"
     22#include "fitshandler.h"
     23#include "fiosinit.h"
     24
    1725////////////////////////////////////////////////////////////
    1826class NOMAdapter_FitsBT : public NObjMgrAdapter {
     
    95103fitsbtadapterExecutor::fitsbtadapterExecutor()
    96104{
     105FitsIOServerInit();  // On s'assure de l'initialisation du module FitsIOServer
     106
    97107NamedObjMgr omg;
    98108PIACmd * mpiac = omg.GetImgApp()->CmdInterpreter();
     
    111121usage += "\n hdu : Fits HDU (if <=0 take first binary/ascii table)";
    112122usage += "\n buflen[,bufsens,lp] : buffer length (sens) for fits reading (default is 100,1,0)";
     123usage += "\n See also  scanfits writefits readfits ";
    113124mpiac->RegisterCommand(kw, usage, this, hgrp);
     125
     126kw = "scanfits";
     127usage = "scanfits: scan fits files and print information on each HDU\n" ;
     128usage += "Usage: scanfits FileName [slev=0 ... 3]\n";
     129usage += "slev=1,3: header keywords , slev=2,3: try to read each HDU";
     130mpiac->RegisterCommand(kw, usage, this, hgrp);
     131
     132kw = "writefits";
     133usage = "writefits: Write objects to a fits file \n" ;
     134usage += "Usage: writefits nameobj/pattern FileName \n";
     135usage += "(use FitsManager) .... ";
     136usage += "See also  scanfits readfits fitsadapt ";
     137mpiac->RegisterCommand(kw, usage, this, hgrp);
     138
     139kw = "readfits";
     140usage = "readfits: Read all HDU's of a fits file \n" ;
     141usage += "Usage: readfits nameobj/pattern FileName \n";
     142usage += "(use FitsManager) .... ";
     143usage += "See also  scanfits writefits fitsadapt ";
     144mpiac->RegisterCommand(kw, usage, this, hgrp);
    114145}
    115146
     
    137168    omg.AddObj(fbt,nom_obj);
    138169 }
     170else if (kw == "scanfits") {
     171  if(tokens.size() < 1)  {
     172    cout<<"Usage: scanfits FileName [slev] "<<endl;
     173    return 1;
     174  }
     175  int slev = 0;
     176  if(tokens.size() > 1)  slev = atoi(tokens[1].c_str());
     177  FitsManager::ScanFile(tokens[0], slev);
     178  return 0;
     179}
     180else if (kw == "writefits") {
     181  if(tokens.size() < 2)  {
     182    cout<<"Usage: writefits nameobj/pattern FileName "<<endl;
     183    return 1;
     184  }
     185  vector<string> noms;
     186  omg.GetObjList(tokens[0], noms);
     187  if (noms.size() < 1) {
     188    cout<<"writefits/Error: no object with this name "<<endl;
     189    return 2;
     190  }
     191  cout << "writefits: Opening/Creating fits file " << tokens[1] << endl;
     192  FitsInOutFile fos(tokens[1], FitsInOutFile::Fits_Create);
     193  for(int kk=0; kk<noms.size(); kk++) {
     194    AnyDataObj* co = omg.GetObj(noms[kk]);
     195    if (co == NULL) continue;
     196    fos.SetNextExtensionName(noms[kk]);
     197    try {
     198      FitsManager::Write(fos, *co);
     199      cout << "writefits: Object " << noms[kk] << " written to HDU No " << fos.CurrentHDU() << endl; 
     200    }
     201    catch (NotFoundExc & exc) {
     202      cout << "writefits/Error writing object " << noms[kk] << " -> " << exc.Msg() << endl;
     203    }
     204  }
     205  return 0;
     206}
     207else if (kw == "readfits") {
     208  if(tokens.size() < 1)  {
     209    cout<<"Usage: readfits FileName "<<endl;
     210    return 1;
     211  }
     212  cout << "readfits: Opening  fits file " << tokens[0] << endl;
     213  FitsInOutFile fis(tokens[0], FitsInOutFile::Fits_RO);
     214  string bnom = omg.GetServiceObj()->FileName2Name(tokens[0]);
     215  string nom = bnom;
     216  char bun[16];
     217  int kon = 0;
     218  for(int k=0; k<fis.NbHDUs(); k++) {
     219    try {
     220      FitsHandlerInterface* fhi = FitsManager::Read(fis);
     221      AnyDataObj* obj = fhi->DataObj();
     222      if (obj) {
     223       kon++;
     224       if (kon > 1)  {
     225         sprintf(bun, "%d", kon);
     226         nom = bnom + bun;
     227       }
     228       omg.AddObj(obj, nom, false);
     229       cout << "readfits: " << (string)typeid(*obj).name()
     230            << "  read From HDU " << k+1 << " ->" << nom << endl;
     231      }
     232      else delete fhi;
     233      //Reza, Jan 2006: Sinon, le fhi ne sera jamais supprime, tant pis
     234      // Il ne prend pas beaucoup de place, une fois que son objet est delete
     235    }
     236    catch (NotFoundExc & exc) {
     237      cout << "readfits/Error - HDU=" << k+1 << " : " << exc.Msg() << endl;
     238    }
     239    fis.MoveToNextHDU();
     240  }
     241  return 0; 
     242}
    139243 return(0);
    140244}
Note: See TracChangeset for help on using the changeset viewer.