source: Sophya/trunk/SophyaExt/FitsIOServer/fitsbntbllineRW.cc@ 1359

Last change on this file since 1359 was 1359, checked in by lemeur, 25 years ago

extension bntblLineRW aux long et byte

File size: 4.5 KB
RevLine 
[1209]1#include "pexceptions.h"
2#include "fitsbntbllineRW.h"
3#include "utils.h"
4///////////////////////////////////////////////////////////
5//
6//
7///////////////////////////////////////////////////////////
8
9
10#define LONNOM 31
11
12
13FITS_BntblLineReader::FITS_BntblLineReader()
14{
15 InitNull();
16}
17
[1219]18FITS_BntblLineReader::FITS_BntblLineReader(char inputfile[],int hdunum)
19
[1209]20{
21 InitNull();
22 inFits_ = new FitsInFile (inputfile);
[1300]23 inFits_->ReadHeader(hdunum);
[1209]24
25 // if (!fn->IsFitsTable())
26 if (!inFits_->IsFitsTable())
27 {
28 throw PException("FITS_BntblLineReader: the fits file seems not to be a bintable nor ASCII table");
29 }
30
31 //
32 int nbcols, nbentries;
33 // nbcols = fn->NbColsFromFits();
34 nbcols = inFits_->NbColsFromFits();
35 nbentries = 0;
36 int k;
37 // for (k=0; k<nbcols; k++) nbentries=max( nbentries, fn->NentriesFromFits(k) );
38 for (k=0; k<nbcols; k++) nbentries=max( nbentries, inFits_->NentriesFromFits(k) );
39
40 //
41 // pour mettre les colonnes dans l'ordre double, float, int, char :
42 // tableau de correspondance
43 // DfitsCol(j)= numero dans le fichier fits de la jeme variable double du
44 // xntuple;
45 // FfitsCol(j)= numero dans le fichier fits de la jeme variable float du
46 // xntuple;
47 // etc.
48 vector<int> DfitsCol;
49 vector<int> FfitsCol;
50 vector<int> IfitsCol;
51 vector<int> SfitsCol;
[1359]52 vector<int> LfitsCol;
53 vector<int> BfitsCol;
[1209]54 for (k=0; k<nbcols;k++)
55 {
[1300]56 FitsFile::FitsDataType ss= inFits_->ColTypeFromFits(k);
[1359]57
[1300]58 if (ss == FitsFile::FitsDataType_double) DfitsCol.push_back(k);
59 else if (ss == FitsFile::FitsDataType_float) FfitsCol.push_back(k);
60 else if (ss == FitsFile::FitsDataType_int) IfitsCol.push_back(k);
[1359]61 else if (ss == FitsFile::FitsDataType_long) LfitsCol.push_back(k);
62 else if (ss == FitsFile::FitsDataType_byte) BfitsCol.push_back(k);
[1300]63 else if (ss == FitsFile::FitsDataType_char) SfitsCol.push_back(k);
[1209]64 else {
[1351]65 cout << " FITS_XNTuple: colonne fits " << k << " type= " << (int) ss << endl;
[1209]66 throw IOExc("type de champ inconnu");
67 }
68 }
69 vector<string> ColN(nbcols);
70 int compt=0;
71 for (k=0; k<DfitsCol.size(); k++)
72 {
73 ColN[compt++] = inFits_->ColNameFromFits(DfitsCol[k]);
74 }
75 for (k=0; k<FfitsCol.size(); k++)
76 {
77 ColN[compt++] = inFits_->ColNameFromFits(FfitsCol[k]);
78 }
79 for (k=0; k<IfitsCol.size(); k++)
80 {
81 ColN[compt++] = inFits_->ColNameFromFits(IfitsCol[k]);
82 }
[1359]83 for (k=0; k<LfitsCol.size(); k++)
84 {
85 ColN[compt++] = inFits_->ColNameFromFits(LfitsCol[k]);
86 }
87 for (k=0; k<BfitsCol.size(); k++)
88 {
89 ColN[compt++] = inFits_->ColNameFromFits(BfitsCol[k]);
90 }
[1209]91 for (k=0; k<SfitsCol.size(); k++)
92 {
93 ColN[compt++] = inFits_->ColNameFromFits(SfitsCol[k]);
94 }
95
[1359]96 ligne_.setFormat(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), LfitsCol.size(), BfitsCol.size(),SfitsCol.size(), ColN);
[1209]97}
98
99
100FITS_BntblLineReader::~FITS_BntblLineReader()
101{
102 if (inFits_ != NULL) delete inFits_;
103}
104
105BnTblLine& FITS_BntblLineReader::ReadNextLine()
106{
107 inFits_->GetBinTabLine(nextLineToBeRead_++, ligne_);
108 return ligne_;
109}
110
111
112
113
[1359]114FITS_BntblLineWriter::FITS_BntblLineWriter(char inputfile[],int dc, int fc,int ic, int lc, int bc, int cc, vector<string> names,DVList* ptr_dvl, FitsFile::WriteMode wrm)
[1209]115{
116 int k;
[1359]117 int nbcols = dc+fc+ic+cc+lc+bc;
[1209]118 if (nbcols != names.size())
119 {
120 cout << " WARNING: BnTblLineWriter:: length of vector of column names not equal to total number of columns" << endl;
121 }
122 InitNull();
123 outFits_ = new FitsOutFile (inputfile, wrm);
124 string types;
125 vector<int> StringSizes(cc);
126 for (k=0; k<dc;k++)
127 {
128 types+='D';
129 }
130 for (k=0; k<fc;k++)
131 {
132 types+='E';
133 }
134 for (k=0; k<ic;k++)
135 {
136 types+='I';
137 }
[1359]138 for (k=0; k<lc;k++)
139 {
140 types+='J';
141 }
142 for (k=0; k<bc;k++)
143 {
144 types+='B';
145 }
[1209]146 for (k=0; k<cc;k++)
147 {
148 types+='A';
[1359]149 StringSizes[k] = names[dc+fc+ic+lc+bc+k].length();
[1209]150 }
151 string extname("Lines_on_Binary_tbl");
[1219]152
[1221]153 outFits_->makeHeaderBntblOnFits(types, names, 1, nbcols, ptr_dvl, extname,StringSizes);
[1359]154 ligne_.setFormat(dc, fc, ic,lc,bc,cc, names);
[1209]155
156}
157
158FITS_BntblLineWriter::~FITS_BntblLineWriter()
159{
[1219]160 if (dvl_ != NULL) delete dvl_;
[1209]161 if (outFits_ != NULL) delete outFits_;
162}
163
164void FITS_BntblLineWriter::WriteNextLine( BnTblLine& WorkLine)
165{
166 if (! ligne_.sameFormat(WorkLine) )
167 {
168 throw PException(" FITS_BntblLineWriter:: line to be written does not match the header");
169 }
170 outFits_->PutBinTabLine(nextLineToBeWritten_++, WorkLine);
171
172}
Note: See TracBrowser for help on using the repository browser.