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

Last change on this file since 1353 was 1351, checked in by yvon, 25 years ago

les enums dans les flots cout sont castes en (int)

dominique

File size: 4.0 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;
52 for (k=0; k<nbcols;k++)
53 {
[1300]54 FitsFile::FitsDataType ss= inFits_->ColTypeFromFits(k);
55 if (ss == FitsFile::FitsDataType_double) DfitsCol.push_back(k);
56 else if (ss == FitsFile::FitsDataType_float) FfitsCol.push_back(k);
57 else if (ss == FitsFile::FitsDataType_int) IfitsCol.push_back(k);
58 else if (ss == FitsFile::FitsDataType_char) SfitsCol.push_back(k);
[1209]59 else {
[1351]60 cout << " FITS_XNTuple: colonne fits " << k << " type= " << (int) ss << endl;
[1209]61 throw IOExc("type de champ inconnu");
62 }
63 }
64 vector<string> ColN(nbcols);
65 int compt=0;
66 for (k=0; k<DfitsCol.size(); k++)
67 {
68 ColN[compt++] = inFits_->ColNameFromFits(DfitsCol[k]);
69 }
70 for (k=0; k<FfitsCol.size(); k++)
71 {
72 ColN[compt++] = inFits_->ColNameFromFits(FfitsCol[k]);
73 }
74 for (k=0; k<IfitsCol.size(); k++)
75 {
76 ColN[compt++] = inFits_->ColNameFromFits(IfitsCol[k]);
77 }
78 for (k=0; k<SfitsCol.size(); k++)
79 {
80 ColN[compt++] = inFits_->ColNameFromFits(SfitsCol[k]);
81 }
82
83 ligne_.setFormat(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), SfitsCol.size(), ColN);
84}
85
86
87FITS_BntblLineReader::~FITS_BntblLineReader()
88{
89 if (inFits_ != NULL) delete inFits_;
90}
91
92BnTblLine& FITS_BntblLineReader::ReadNextLine()
93{
94 inFits_->GetBinTabLine(nextLineToBeRead_++, ligne_);
95 return ligne_;
96}
97
98
99
100
[1231]101FITS_BntblLineWriter::FITS_BntblLineWriter(char inputfile[],int dc, int fc,int ic, int cc, vector<string> names,DVList* ptr_dvl, FitsFile::WriteMode wrm)
[1209]102{
103 int k;
104 int nbcols = dc+fc+ic+cc;
105 if (nbcols != names.size())
106 {
107 cout << " WARNING: BnTblLineWriter:: length of vector of column names not equal to total number of columns" << endl;
108 }
109 InitNull();
110 outFits_ = new FitsOutFile (inputfile, wrm);
111 string types;
112 vector<int> StringSizes(cc);
113 for (k=0; k<dc;k++)
114 {
115 types+='D';
116 }
117 for (k=0; k<fc;k++)
118 {
119 types+='E';
120 }
121 for (k=0; k<ic;k++)
122 {
123 types+='I';
124 }
125 for (k=0; k<cc;k++)
126 {
127 types+='A';
128 StringSizes[k] = names[dc+fc+ic+k].length();
129 }
130 string extname("Lines_on_Binary_tbl");
[1219]131
[1221]132 outFits_->makeHeaderBntblOnFits(types, names, 1, nbcols, ptr_dvl, extname,StringSizes);
[1209]133 ligne_.setFormat(dc, fc, ic, cc, names);
134
135}
136
137FITS_BntblLineWriter::~FITS_BntblLineWriter()
138{
[1219]139 if (dvl_ != NULL) delete dvl_;
[1209]140 if (outFits_ != NULL) delete outFits_;
141}
142
143void FITS_BntblLineWriter::WriteNextLine( BnTblLine& WorkLine)
144{
145 if (! ligne_.sameFormat(WorkLine) )
146 {
147 throw PException(" FITS_BntblLineWriter:: line to be written does not match the header");
148 }
149 outFits_->PutBinTabLine(nextLineToBeWritten_++, WorkLine);
150
151}
Note: See TracBrowser for help on using the repository browser.