source: Sophya/trunk/SophyaProg/Tests/tstcolread.cc@ 4029

Last change on this file since 4029 was 4029, checked in by cmv, 14 years ago

suppression lecture Bufferisee de FitsABTColRd (inutile: cfitsio gere bufferisation en interne et complication code), cmv 22/10/2011

File size: 4.2 KB
Line 
1// Test des classes FitsBTColRead
2#include "sopnamsp.h"
3#include "machdefs.h"
4#include <typeinfo>
5#include <stdio.h>
6#include <stdlib.h>
7#include <iostream>
8// #include <values.h>
9#include <string.h>
10#include <string>
11#include <unistd.h>
12#include "sophyainit.h"
13#include "pexceptions.h"
14#include "fabtcolread.h"
15#include "fabtwriter.h"
16
17#define NO_VECTOR
18#define USE_EXCEPT
19
20int main(int narg,char *arg[])
21{
22 SophyaInit();
23 const char *colname = "";
24 int colnum = -1;
25 int ihdu = 0;
26 long lpmod=1;
27 double vs1,vs2; bool vsearch=false;
28 char c;
29 while((c = getopt(narg,arg,"hH:i:c:m:v:")) != -1) {
30 switch (c) {
31 case 'H' :
32 sscanf(optarg,"%d",&ihdu);
33 break;
34 case 'i' :
35 sscanf(optarg,"%d",&colnum);
36 break;
37 case 'c' :
38 colname = optarg;
39 break;
40 case 'm' :
41 sscanf(optarg,"%ld",&lpmod);
42 if(lpmod<=0) lpmod = 1;
43 break;
44 case 'v' :
45 sscanf(optarg,"%lf,%lf",&vs1,&vs2);
46 vsearch=true;
47 break;
48 case 'h' :
49 default :
50 cout<<"cmvcolread -b buflen -s sens -H hdu -m print_modulo"
51 <<" -i colnum -c colname -v vsearch1,vsearch2"
52 <<" fitsread fitswrite"<<endl;
53 return -1;
54 }
55 }
56 if(optind>=narg) {
57 cout<<"Donnez un nom de fichier fits"<<endl;
58 return -1;
59 }
60 char * fitsname = arg[optind];
61 char * fitswrit = NULL;
62 if(optind+1<narg) fitswrit = arg[optind+1];
63
64 FitsABTColRead* fbt=NULL;
65 FitsABTWriter* fbtw=NULL;
66 if(fitswrit)
67 fbtw = new FitsABTWriter(fitswrit,BINARY_TBL,3);
68
69#ifdef USE_EXCEPT
70try {
71#endif
72
73 if(strlen(colname)>0)
74 fbt = new FitsABTColRead(fitsname,colname,ihdu,3);
75 else
76 fbt = new FitsABTColRead(fitsname,colnum,ihdu,3);
77 fbt->SetDebug(3);
78 fbt->Print(3);
79 cout<<"ReadFirstRow : "<<fbt->ReadFirstRow()<<endl;
80 cout<<"ReadLastRow : "<<fbt->ReadLastRow()<<endl;
81
82 if(fbtw) {
83 fbtw->SetExtName("MON_EXTENSION");
84 fbtw->AddCol("xshort",NULL,"unitS",TSHORT);
85 fbtw->AddCol("xlong",NULL,"unitL",TLONG);
86 fbtw->AddCol("xfloat",NULL,"unitF",TFLOAT);
87 fbtw->AddCol("xdouble",NULL,"unitD",TDOUBLE);
88 fbtw->AddCol("xshort2",NULL,"unitS",TSHORT);
89 fbtw->SetDebug(3);
90 }
91
92 if(vsearch) {
93 LONGLONG mid = fbt->GetNbLine()/2;
94 cout<<"Search vs1="<<vs1<<" vs2="<<vs2<<endl;
95 cout<<"FirstRow: "<<fbt->FirstRow(vs1,vs2,-1)<<endl;
96 cout<<"LastRow : "<<fbt->LastRow(vs1,vs2,-1)<<endl;
97 cout<<"FirstRow from middle: "<<fbt->FirstRow(vs1,vs2,mid)<<endl;
98 cout<<"LastRow from middle: "<<fbt->LastRow(vs1,vs2,mid)<<endl;
99 }
100
101#ifdef NO_VECTOR
102 cout<<"Writting element by elements"<<endl;
103 for(LONGLONG i=0;i<fbt->GetNbLine();i++) {
104 double x = fbt->Read(i);
105 if(i%lpmod==0) cout<<i<<": "<<x<<endl;
106 if(fbtw) {
107 fbtw->Write(0,i,x); // Si overflow la conversion est faite par cfitsio
108 fbtw->Write(1,i,x);
109 fbtw->Write(2,i,x);
110 fbtw->Write(3,i,x);
111 fbtw->Write(4,i,(short)x); // Si overflow la conversion est faite par le system
112 }
113 }
114#else
115 cout<<"Writting with vectors"<<endl;
116 TVector<double> data;
117 TVector<float> dataf;
118 TVector<int_4> datal;
119 LONGLONG istep = fbt->GetNbLine()/10; if(istep>1000) istep=1000;
120 for(LONGLONG i=0;i<fbt->GetNbLine();i+=istep) {
121 LONGLONG i2=i+istep-1; if(i2>=fbt->GetNbLine()) i2=fbt->GetNbLine()-1;
122 LONGLONG n = fbt->Read(i,i2,data);
123 fbt->Read(i,i2,dataf);
124 fbt->Read(i,i2,datal);
125 cout<<i<<" n="<<n<<" ("<<data.Size()<<")"
126 <<" d="<<data(0)<<","<<data(n-1)
127 <<" f="<<dataf(0)<<","<<dataf(n-1)
128 <<" l="<<datal(0)<<","<<datal(n-1)
129 <<endl;
130 if(fbtw) {
131 fbtw->Write(1,i,datal);
132 fbtw->Write(2,i,dataf);
133 fbtw->Write(3,i,data);
134 }
135 }
136#endif
137
138 fbt->Print(3);
139
140 //FitsABTColRead fbt2(*fbt);
141 //fbt2.SetDebug(3);
142 //fbt2.Print(3);
143 //cout<<"Read(0): "<<fbt2.Read(0)<<endl;
144 //cout<<"Read(n-1): "<<fbt2.Read(fbt2.GetNbLine()-1)<<endl;
145 //fbt2.Print(3);
146
147 if(fbt) delete fbt;
148 if(fbtw) {
149 cout<<"Number of Overflows when writing: "<<fbtw->GetNOverFlow()<<endl;
150 delete fbtw;
151 }
152
153#ifdef USE_EXCEPT
154} catch (PThrowable & exc) {
155 cout<<"Exception : "<<(string)typeid(exc).name()
156 <<" - Msg= "<<exc.Msg()<<endl;
157 if(fbt) delete fbt;
158 if(fbtw) delete fbtw;
159 return -2;
160
161} catch (...) {
162 cout<<" some other exception was caught !"<<endl;
163 if(fbt) delete fbt;
164 if(fbtw) delete fbtw;
165 return -2;
166}
167#endif
168
169 return 0;
170}
Note: See TracBrowser for help on using the repository browser.