Changeset 2907 in Sophya for trunk/SophyaExt
- Timestamp:
- Jan 17, 2006, 10:09:29 AM (20 years ago)
- Location:
- trunk/SophyaExt/FitsIOServer
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fitsarrhand.h
r2898 r2907 88 88 if ( dobj == NULL) { 89 89 if (naxis == 1) dobj = new TVector<T>; 90 else if (naxis == 1) dobj = new TMatrix<T>; 90 else if (naxis == 2) { 91 if ( (naxes[0] == 1) || (naxes[1] == 1) ) 92 dobj = new TVector<T>; 93 else dobj = new TMatrix<T>; 94 } 91 95 else dobj = new TArray<T>; 92 96 ownobj = true; -
trunk/SophyaExt/FitsIOServer/fitsfile.cc
r2898 r2907 298 298 { 299 299 InitNull(); 300 hdunum_ = fios.CurrentHDU(); 300 301 } 301 302 … … 1145 1146 { 1146 1147 fits_read_col(fptr_,TFLOAT,ncol+1,NoLine+1,1,1,&fnull,&fdata[ncol],&anynul,&status); 1148 if (status) 1149 { 1150 ResetStatus(status); 1151 break; 1152 } 1153 } 1154 } 1155 1156 /*! 1157 Get the NoLine-th float 'line' from the current BINTABLE extension on FITS file, 1158 */ 1159 void FitsInFile::GetBinTabLine(int NoLine, double* ddata) 1160 { 1161 int status= 0; 1162 int anynul; 1163 double dnull= fnull_; 1164 long nels=1; 1165 int ncol; 1166 for (ncol=0; ncol<nbcols_; ncol++) 1167 { 1168 fits_read_col(fptr_, TDOUBLE, ncol+1,NoLine+1,1,1,&dnull,&ddata[ncol],&anynul,&status); 1147 1169 if (status) 1148 1170 { -
trunk/SophyaExt/FitsIOServer/fitsfile.h
r2897 r2907 285 285 void GetBinTabLine(long NoLine, BnTblLine& ligne) ; 286 286 void GetBinTabLine(int NoLine, float* fdata) ; 287 void GetBinTabLine(int NoLine, double* ddata) ; 287 288 void GetBinTabFCol(r_8* valeurs, int nentries, int NoCol) const; 288 289 void GetBinTabFCol(r_4* valeurs, int nentries, int NoCol) const; -
trunk/SophyaExt/FitsIOServer/fitsntuple.cc
r2898 r2907 104 104 ColName[k][LONNOM] = '\0'; 105 105 } 106 // Reza Dec 2006 : Colonnes du NTuple de type double par defaut 106 107 for (k=0; k<nbcols;k++) 107 108 { 108 109 FitsFile::FitsDataType ss= is.ColTypeFromFits(k); 109 110 string type; 110 if ( ss != FitsFile::FitsDataType_float)111 if ( (ss != FitsFile::FitsDataType_double) && (ss != FitsFile::FitsDataType_float) ) 111 112 { 112 if (ss == FitsFile::FitsDataType_ double) type= string("double");113 if (ss == FitsFile::FitsDataType_int) type= string("integer"); 113 114 else 114 if (ss == FitsFile::FitsDataType_ int) type= string("integer");115 if (ss == FitsFile::FitsDataType_char) type = string("char*"); 115 116 else 116 if (ss == FitsFile::FitsDataType_char) type = string("char*"); 117 else 118 type = string("unknown"); 117 type = string("unknown"); 119 118 cout << " WARNING: the column " << k << " on fits file is not float but : " << type << endl; 120 119 } 121 120 } 121 bool fgdouble = true; 122 if ( is.ColTypeFromFits(0) == FitsFile::FitsDataType_float ) fgdouble = false; 122 123 if(dobj_ == NULL) 123 124 { 124 dobj_= new NTuple(nbcols,ColName );125 dobj_= new NTuple(nbcols,ColName,512,fgdouble); 125 126 ownobj_ = true; 126 127 } … … 128 129 { 129 130 dobj_->Clean(); 130 (*dobj_) = NTuple(nbcols,ColName );131 (*dobj_) = NTuple(nbcols,ColName,512,fgdouble); 131 132 } 132 133 for (k=0; k<nbcols;k++) … … 136 137 delete [] ColName; 137 138 138 float* ligne = new float[nbcols]; 139 // Reza Dec 2006 : Colonnes du NTuple de type double par defaut 140 double* dligne = NULL; 141 float* fligne = NULL; 142 if (fgdouble) dligne = new double[nbcols]; 143 else fligne = new float[nbcols]; 139 144 140 145 int firstln, lastln; … … 150 155 } 151 156 int numLigne; 152 for (numLigne=firstln; numLigne < lastln; numLigne++) 153 { 154 is.GetBinTabLine(numLigne, ligne); 155 dobj_->Fill((r_4*)ligne); 156 } 157 delete [] ligne; 157 if (fgdouble) 158 for (numLigne=firstln; numLigne < lastln; numLigne++) { 159 is.GetBinTabLine(numLigne, dligne); 160 dobj_->Fill((r_8*)dligne); 161 } 162 else 163 for (numLigne=firstln; numLigne < lastln; numLigne++) { 164 is.GetBinTabLine(numLigne, fligne); 165 dobj_->Fill((r_4*)fligne); 166 } 167 168 if (dligne) delete [] dligne; 169 if (fligne) delete [] fligne; 158 170 159 171 dobj_->Info()=is.DVListFromFits(); … … 191 203 } 192 204 193 string type(ncols, 'E'); 194 vector<int> dummy; 195 196 os.makeHeaderBntblOnFits(type,Noms, nentries, ncols, &dvl, extname, dummy); 197 float* column = new float[nentries]; 198 for (k=0; k<ncols;k++) 199 { 200 int j; 201 for(j = 0; j < nentries; j++) column[j]= dobj_->GetVal(j,k); 202 os.PutColToFits(k, nentries, column); 203 } 204 delete [] column; 205 206 } 207 205 // Gestion NTuple en double ou float / Reza Jan 2006 206 if (dobj_->mFgDouble) { // NTuple avec colonnes double 207 string type(ncols, 'D'); 208 vector<int> dummy; 209 210 os.makeHeaderBntblOnFits(type,Noms, nentries, ncols, &dvl, extname, dummy); 211 double* column = new double[nentries]; 212 for (k=0; k<ncols;k++) 213 { 214 int j; 215 for(j = 0; j < nentries; j++) column[j]= dobj_->GetCell(j,k); 216 os.PutColToFits(k, nentries, column); 217 } 218 delete [] column; 219 } 220 else { // NTuple avec colonnes float 221 string type(ncols, 'E'); 222 vector<int> dummy; 223 224 os.makeHeaderBntblOnFits(type,Noms, nentries, ncols, &dvl, extname, dummy); 225 float* column = new float[nentries]; 226 for (k=0; k<ncols;k++) 227 { 228 int j; 229 for(j = 0; j < nentries; j++) column[j]= dobj_->GetVal(j,k); 230 os.PutColToFits(k, nentries, column); 231 } 232 delete [] column; 233 } 234 } 235
Note:
See TracChangeset
for help on using the changeset viewer.