Changeset 1047 in Sophya for trunk/SophyaExt/FitsIOServer/fitsxntuple.cc
- Timestamp:
- Jun 15, 2000, 12:22:23 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fitsxntuple.cc
r972 r1047 13 13 { 14 14 dobj_ = new XNTuple; 15 dcolumn_ = NULL; 16 fcolumn_ = NULL; 17 icolumn_ = NULL; 18 ccolumn_ = NULL; 19 ownobj=true; 15 InitNull(); 16 ownobj_ = true; 20 17 } 21 18 … … 23 20 { 24 21 dobj_ = new XNTuple; 25 dcolumn_ = NULL; 26 fcolumn_ = NULL; 27 icolumn_ = NULL; 28 ccolumn_ = NULL; 29 ownobj=true; 22 InitNull(); 23 ownobj_ = true; 30 24 31 25 ReadF(inputfile,hdunum); … … 36 30 { 37 31 dobj_ = new XNTuple(obj); 38 dcolumn_ = NULL; 39 fcolumn_ = NULL; 40 icolumn_ = NULL; 41 ccolumn_ = NULL; 42 ownobj=true; 32 InitNull(); 33 ownobj_ = true; 34 } 35 FITS_XNTuple::FITS_XNTuple(XNTuple* obj) 36 { 37 dobj_ = obj; 38 InitNull(); 39 ownobj_ = false; 43 40 } 44 41 FITS_XNTuple::~FITS_XNTuple() 42 { 43 Clean(); 44 } 45 46 void FITS_XNTuple::Clean() 45 47 { 46 48 if (dcolumn_ != NULL) delete [] dcolumn_; … … 58 60 cout << "FITS_XNTuple, destructeur: bizarre, ccolumn non vide, sans objet?" << endl;; } 59 61 } 60 if (ownobj && dobj_ != NULL) delete dobj_; 61 } 62 if (ownobj_ && dobj_ != NULL) delete dobj_; 63 } 64 65 void FITS_XNTuple::Read(char inputfile[],int hdunum) 66 { 67 ReadF(inputfile,hdunum); 68 } 69 70 void FITS_XNTuple::ReadLines(char inputfile[],int firstLine, int numberOfLines,int hdunum) 71 { 72 fistLineToBeRead_ = firstLine; 73 numberOfLinesToBeRead_ = numberOfLines; 74 ReadF(inputfile,hdunum); 75 // return dobj_; 76 } 77 78 62 79 void FITS_XNTuple::Write(char outputfile[], bool OldFile) 63 80 { … … 65 82 } 66 83 67 void FITS_XNTuple::ReadFromFits( FitsFile& fn)84 void FITS_XNTuple::ReadFromFits() 68 85 { 69 if (!fn.IsFitsTable()) 86 // if (!fn.IsFitsTable()) 87 if (!IsFitsTable()) 70 88 { 71 89 throw PException("ReadFromFits: the fits file seems not to be a bintable nor ASCII table"); 72 90 } 73 91 int nbcols, nbentries; 74 nbcols = fn.NbColsFromFits(); 92 // nbcols = fn.NbColsFromFits(); 93 nbcols = NbColsFromFits(); 75 94 nbentries = 0; 76 95 int k; 77 for (k=0; k<nbcols; k++) nbentries=max( nbentries, fn.NentriesFromFits(k) ); 96 // for (k=0; k<nbcols; k++) nbentries=max( nbentries, fn.NentriesFromFits(k) ); 97 for (k=0; k<nbcols; k++) nbentries=max( nbentries, NentriesFromFits(k) ); 78 98 79 99 // … … 91 111 for (k=0; k<nbcols;k++) 92 112 { 93 char ss= fn.ColTypeFromFits(k); 113 // char ss= fn.ColTypeFromFits(k); 114 char ss= ColTypeFromFits(k); 94 115 if (ss == 'D') DfitsCol.push_back(k); 95 116 else if (ss == 'E') FfitsCol.push_back(k); … … 106 127 { 107 128 ColName[compt] = new char[LONNOM+1]; 108 strncpy(ColName[compt], fn.ColNameFromFits(DfitsCol[k]).c_str(), LONNOM); 129 // strncpy(ColName[compt], fn.ColNameFromFits(DfitsCol[k]).c_str(), LONNOM); 130 strncpy(ColName[compt], ColNameFromFits(DfitsCol[k]).c_str(), LONNOM); 109 131 ColName[compt++][ LONNOM] = '\0'; 110 132 } … … 112 134 { 113 135 ColName[compt] = new char[LONNOM+1]; 114 strncpy(ColName[compt], fn.ColNameFromFits(FfitsCol[k]).c_str(), LONNOM); 136 // strncpy(ColName[compt], fn.ColNameFromFits(FfitsCol[k]).c_str(), LONNOM); 137 strncpy(ColName[compt], ColNameFromFits(FfitsCol[k]).c_str(), LONNOM); 115 138 ColName[compt++][ LONNOM] = '\0'; 116 139 } … … 118 141 { 119 142 ColName[compt] = new char[LONNOM+1]; 120 strncpy(ColName[compt], fn.ColNameFromFits(IfitsCol[k]).c_str(), LONNOM); 143 // strncpy(ColName[compt], fn.ColNameFromFits(IfitsCol[k]).c_str(), LONNOM); 144 strncpy(ColName[compt], ColNameFromFits(IfitsCol[k]).c_str(), LONNOM); 121 145 ColName[compt++][ LONNOM] = '\0'; 122 146 } … … 124 148 { 125 149 ColName[compt] = new char[LONNOM+1]; 126 strncpy(ColName[compt], fn.ColNameFromFits(SfitsCol[k]).c_str(), LONNOM); 150 // strncpy(ColName[compt], fn.ColNameFromFits(SfitsCol[k]).c_str(), LONNOM); 151 strncpy(ColName[compt], ColNameFromFits(SfitsCol[k]).c_str(), LONNOM); 127 152 ColName[compt++][LONNOM] = '\0'; 128 153 } 129 130 154 131 155 if(dobj_ == NULL) 132 156 { 133 157 dobj_= new XNTuple(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), SfitsCol.size(),ColName); 134 ownobj = true;158 ownobj_ = true; 135 159 } 136 160 else 137 161 { 138 dobj_->clean(); 162 if (ownobj_) 163 { 139 164 (*dobj_)= XNTuple(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), SfitsCol.size(),ColName); 140 } 165 } 166 else 167 { 168 if (DfitsCol.size() != dobj_->NDVar() || FfitsCol.size() != dobj_->NFVar() || IfitsCol.size() != dobj_->NIVar() || SfitsCol.size() != dobj_->NSVar()) 169 170 throw SzMismatchError("FITS_XNTuple : structure incorrecte du ntuple"); 171 } 172 } 173 141 174 for (k=0; k<nbcols;k++) 142 175 { … … 145 178 delete [] ColName; 146 179 147 // j'initialise le NTuple a zero, pour le dimensionner 148 // (SetXVal suppose que le ntuple est deja dimensionne) 149 r_8* dligne; 150 r_4* fligne; 151 int_4* iligne; 152 char** cligne; 153 if (DfitsCol.size()>0) 154 { 155 if (dcolumn_ != NULL) delete [] dcolumn_; 156 dcolumn_ = new double[nbentries]; 157 dligne = new r_8[DfitsCol.size()]; 158 for (k=0; k<DfitsCol.size(); k++) dligne[k]=0.; 159 } 180 r_8* dligne; 181 r_4* fligne; 182 int_4* iligne; 183 char** cligne; 184 185 if (DfitsCol.size()>0) dligne = new r_8[DfitsCol.size()]; 160 186 else dligne=NULL; 161 if (FfitsCol.size()>0) 162 { 163 if (fcolumn_ != NULL) delete [] fcolumn_; 164 fcolumn_ = new float[nbentries]; 165 fligne = new r_4[FfitsCol.size()]; 166 for (k=0; k<FfitsCol.size(); k++) fligne[k]=0.; 167 } 187 if (FfitsCol.size()>0) fligne = new r_4[FfitsCol.size()]; 168 188 else fligne=NULL; 169 if (IfitsCol.size()>0) 170 { 171 if (icolumn_ != NULL) delete [] icolumn_; 172 icolumn_ = new int[nbentries]; 173 iligne = new int_4[IfitsCol.size()]; 174 for (k=0; k<IfitsCol.size(); k++) iligne[k]=0; 175 } 189 if (IfitsCol.size()>0) iligne = new int_4[IfitsCol.size()]; 176 190 else iligne=NULL; 177 191 if (SfitsCol.size()>0) 178 192 { 179 if (ccolumn_ != NULL) 180 { 181 for (k=0; k<dobj_->NEntry(); k++) delete [] ccolumn_[k]; 182 delete [] ccolumn_; 183 ccolumn_ = NULL; 184 } 185 ccolumn_ = new char*[nbentries]; 193 cligne = new char*[SfitsCol.size()]; 186 194 int taille_des_chaines=0; 187 for (k=0; k< SfitsCol.size(); k++) taille_des_chaines = max( taille_des_chaines, fn.ColStringLengthFromFits(SfitsCol[k]) ); 188 for (k=0; k<nbentries;k++) ccolumn_[k]= new char[taille_des_chaines+1]; 189 cligne = new char*[SfitsCol.size()]; 190 for (k=0; k<SfitsCol.size(); k++) cligne[k]=" "; 195 // for (k=0; k< SfitsCol.size(); k++) taille_des_chaines = max( taille_des_chaines, fn.ColStringLengthFromFits(SfitsCol[k]) ); 196 for (k=0; k< SfitsCol.size(); k++) taille_des_chaines = max( taille_des_chaines, ColStringLengthFromFits(SfitsCol[k]) ); 197 for (k=0; k<SfitsCol.size(); k++) cligne[k]=new char[taille_des_chaines+1]; 191 198 } 192 199 else cligne=NULL; 193 194 for (k=0; k<nbentries;k++) dobj_->Fill(dligne, fligne, iligne, cligne); 195 delete [] dligne; 196 delete [] fligne; 197 delete [] iligne; 198 for (k=0; k< SfitsCol.size(); k++) delete [] cligne[k]; 199 delete [] cligne; 200 201 compt=0; 202 for (k=0; k<DfitsCol.size(); k++) 203 { 204 fn.GetBinTabFCol(dcolumn_, nbentries, DfitsCol[k]); 205 for (int nent=0; nent<nbentries; nent++) dobj_->SetDVal(nent,compt, dcolumn_[nent]); 206 compt++; 207 } 208 209 for (k=0; k<FfitsCol.size(); k++) 210 { 211 fn.GetBinTabFCol(fcolumn_,nbentries, FfitsCol[k]); 212 for (int nent=0; nent<nbentries; nent++) dobj_->SetFVal(nent,compt, fcolumn_[nent]); 213 compt++; 214 } 215 216 for (k=0; k<IfitsCol.size(); k++) 217 { 218 fn.GetBinTabFCol(icolumn_,nbentries, IfitsCol[k]); 219 for (int nent=0; nent<nbentries; nent++) dobj_->SetIVal(nent,compt, icolumn_[nent]); 220 compt++; 221 } 222 223 for (k=0; k<SfitsCol.size(); k++) 224 { 225 fn.GetBinTabFCol(ccolumn_,nbentries, SfitsCol[k]); 226 for (int nent=0; nent<nbentries; nent++) dobj_->SetSVal(nent,compt, ccolumn_[nent]); 227 compt++; 228 } 229 dobj_->Info()=fn.DVListFromFits(); 230 231 } 232 void FITS_XNTuple::WriteToFits(FitsFile& fn) 200 int firstln, lastln; 201 if (numberOfLinesToBeRead_ > 0) 202 { 203 firstln = fistLineToBeRead_; 204 lastln = firstln + numberOfLinesToBeRead_; 205 } 206 else 207 { 208 firstln = 0; 209 lastln = nbentries; 210 } 211 int numLigne; 212 for (numLigne=firstln; numLigne < lastln; numLigne++) 213 { 214 // fn.GetBinTabLine(numLigne, dligne, fligne, iligne, cligne ); 215 GetBinTabLine(numLigne, dligne, fligne, iligne, cligne ); 216 dobj_->Fill(dligne, fligne, iligne, cligne); 217 } 218 delete [] dligne; 219 delete [] fligne; 220 delete [] iligne; 221 for (k=0; k< SfitsCol.size(); k++) delete [] cligne[k]; 222 delete [] cligne; 223 // dobj_->Info()=fn.DVListFromFits(); 224 dobj_->Info()=DVListFromFits(); 225 226 } 227 void FITS_XNTuple::WriteToFits() 233 228 { 234 229 if(dobj_ == NULL) … … 276 271 for (k=0; k< StringSizes.size(); k++) StringSizes[k]=dobj_->mStrSz; 277 272 // la librairie fitsio ecrit colonne par colonne 278 fn.makeHeaderBntblOnFits(types, Noms, nrows, ncols, dvl, extname,StringSizes); 273 // fn.makeHeaderBntblOnFits(types, Noms, nrows, ncols, dvl, extname,StringSizes); 274 makeHeaderBntblOnFits(types, Noms, nrows, ncols, dvl, extname,StringSizes); 279 275 for (k=0; k< ncols; k++) 280 276 {
Note:
See TracChangeset
for help on using the changeset viewer.