source: Sophya/trunk/SophyaPI/ProgPI/fitsbtadapter.cc@ 2322

Last change on this file since 2322 was 2322, checked in by cmv, 23 years ago
  • passage xxstream.h en xxstream
  • compile avec gcc_3.2, gcc_2.96 et cxx En 3.2 le seek from ::end semble marcher (voir Eval/COS/pbseekios.cc)

rz+cmv 11/2/2003

File size: 4.1 KB
Line 
1/* Interface Fits BINARY/ASCII Table cmv 21/05/2001 */
2#include "machdefs.h"
3#include <stdlib.h>
4#include <stdio.h>
5#include <typeinfo>
6#include <iostream>
7#include <string.h>
8#include <string>
9
10#include "nobjmgr.h"
11#include "servnobjm.h"
12#include "nomgadapter.h"
13#include "pistdimgapp.h"
14#include "fbtntintf.h"
15
16////////////////////////////////////////////////////////////
17class NOMAdapter_FitsBT : public NObjMgrAdapter {
18public:
19 NOMAdapter_FitsBT(FitsBTNtuIntf* o = NULL);
20 virtual ~NOMAdapter_FitsBT();
21
22 virtual NObjMgrAdapter* Clone(AnyDataObj* o);
23 virtual string GetDataObjType();
24 virtual AnyDataObj* CloneDataObj(bool share=false);
25 virtual void SavePPF(POutPersist& s, string const & nom);
26 virtual void Print(ostream& os);
27 virtual NTupleInterface* GetNTupleInterface(bool& adel);
28
29protected:
30 FitsBTNtuIntf* mFBT;
31};
32
33////////////////////////////////////////////////////////////
34NOMAdapter_FitsBT::NOMAdapter_FitsBT(FitsBTNtuIntf* o)
35 : NObjMgrAdapter(o)
36{
37mFBT = o;
38}
39
40NOMAdapter_FitsBT::~NOMAdapter_FitsBT()
41{
42}
43
44NObjMgrAdapter* NOMAdapter_FitsBT::Clone(AnyDataObj* o)
45{
46FitsBTNtuIntf* g = dynamic_cast<FitsBTNtuIntf *>(o);
47if(g) return ( new NOMAdapter_FitsBT(g) );
48return ( new NObjMgrAdapter(o) );
49}
50
51string NOMAdapter_FitsBT::GetDataObjType()
52{
53return( "FitsBTNtuIntf " );
54}
55
56AnyDataObj* NOMAdapter_FitsBT::CloneDataObj(bool /*share*/)
57{
58return( new FitsBTNtuIntf(*mFBT) );
59}
60
61void NOMAdapter_FitsBT::SavePPF(POutPersist& pos, string const & nom)
62{
63cout<<"NOMAdapter_FitsBT::SavePPF: not implemented"<<endl;
64}
65
66void NOMAdapter_FitsBT::Print(ostream& os)
67{
68mFBT->Print(os,99);
69}
70
71NTupleInterface* NOMAdapter_FitsBT::GetNTupleInterface(bool& adel)
72{
73adel = false;
74return(mFBT);
75}
76
77////////////////////////////////////////////////////////////
78////////////////////////////////////////////////////////////
79/////////////////////////////////////////////////////////////
80///////////////////////////////////////////////////////////
81extern "C" {
82void fitsbtadapter_init();
83void fitsbtadapter_end();
84}
85
86class fitsbtadapterExecutor : public CmdExecutor {
87public:
88 fitsbtadapterExecutor();
89 virtual ~fitsbtadapterExecutor();
90 virtual int Execute(string& keyw, vector<string>& args, string& toks);
91};
92
93///////////////////////////////////////////////////////////
94fitsbtadapterExecutor::fitsbtadapterExecutor()
95{
96NamedObjMgr omg;
97PIACmd * mpiac = omg.GetImgApp()->CmdInterpreter();
98
99// On enregistre l'adaptateur
100Services2NObjMgr* serv = omg.GetServiceObj();
101serv->RegisterClass(new FitsBTNtuIntf, new NOMAdapter_FitsBT);
102
103// On enregistre la commande
104string hgrp = "FileIO";
105string kw = "fitsadapt";
106string usage = "fitsadapt: NTuple adaptor for Binary and ASCII Fits table\n" ;
107usage += "Usage: fitsadapt fitsfile [nomobj hdu buflen[,bufsens,lp]]";
108usage += "\n fitsfile : Fits file name";
109usage += "\n nomobj : Object name (needed if file name misleading as C++ variable)";
110usage += "\n hdu : Fits HDU (if <=0 take first binary/ascii table)";
111usage += "\n buflen[,bufsens,lp] : buffer length (sens) for fits reading (default is 100,1,0)";
112mpiac->RegisterCommand(kw, usage, this, hgrp);
113}
114
115fitsbtadapterExecutor::~fitsbtadapterExecutor()
116{
117}
118
119int fitsbtadapterExecutor::Execute(string& kw, vector<string>& tokens, string&)
120{
121NamedObjMgr omg;
122if(kw == "fitsadapt") {
123 if(tokens.size()<1)
124 {cout<<"Usage: fitsadapt fitsfile [nomobj hdu buflen[,bufsens]]"<<endl;
125 return(0);}
126 int ihdu=0;
127 int_4 buflen=100, bufsens=1, lp=0;
128 string fname = tokens[0];
129 string nom_obj ="";
130 if(tokens.size()>1) nom_obj = tokens[1];
131 if(tokens.size()>2) sscanf(tokens[2].c_str(),"%d",&ihdu);
132 if(tokens.size()>3) sscanf(tokens[3].c_str(),"%d,%d,%d",&buflen,&bufsens,&lp);
133 FitsBTNtuIntf* fbt = new FitsBTNtuIntf(fname,ihdu,buflen,bufsens,lp);
134
135 if(nom_obj=="" || nom_obj=="!") nom_obj = omg.GetServiceObj()->FileName2Name(fname);
136 omg.AddObj(fbt,nom_obj);
137 }
138 return(0);
139}
140
141///////////////////////////////////////////////////////////
142static fitsbtadapterExecutor * piafbtex = NULL;
143
144void fitsbtadapter_init()
145{
146if(piafbtex) delete piafbtex;
147piafbtex = new fitsbtadapterExecutor;
148}
149
150void fitsbtadapter_end()
151{
152if(piafbtex) delete piafbtex;
153piafbtex = NULL;
154}
Note: See TracBrowser for help on using the repository browser.