Changeset 3069 in Sophya for trunk/SophyaExt
- Timestamp:
- Sep 8, 2006, 4:30:31 PM (19 years ago)
- Location:
- trunk/SophyaExt/FitsIOServer
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fitshdtable.cc
r2963 r3069 188 188 189 189 // Determination de la taille de segment 190 sa_size_t segsz = is.GetNbRows() / 16; // Taille de segment par defaut190 sa_size_t segsz = is.GetNbRows() / 64; // Taille de segment par defaut 191 191 if (segsz > 2048) segsz = 2048; 192 192 string key = "SEGMSIZE"; 193 193 bool knex = false; 194 194 string ssegsz = is.KeyValue(key, knex); 195 if (!knex && (ssegsz.length() > 0)) segsz = atoi(ssegsz.c_str()); 195 bool fgsss = false; 196 if (!knex && (ssegsz.length() > 0)) { segsz = atoi(ssegsz.c_str()); fgsss = true; } 196 197 if (segsz < 16) segsz = 16; 197 198 … … 205 206 206 207 if (dobj == NULL) { // On cree la table si besoin 208 /* 209 Reza, Sep06 : On ne cree pas automatiquement un SwFitsDataTable - 210 En effet, on ne peut garantir que l'objet FitsInOutFile is reste 211 valide pendant toute la duree de vie de l'objet SwFitsDataTable 212 207 213 string key = "SOPCLSNM"; 208 214 string clsnm = is.KeyValue(key); 209 if ( (clsnm == "SOPHYA::SwFitsDataTable") || (nbrows*colnames.size() < 10000000) )215 if ( (clsnm == "SOPHYA::SwFitsDataTable") || (nbrows*colnames.size() < 10000000) ) 210 216 dobj = new DataTable(segsz); 211 else dobj = new SwFitsDataTable(is, segsz, false); 217 else { 218 dobj = new SwFitsDataTable(segsz); 219 // dobj = new SwFitsDataTable(is, segsz, false); 220 // Reza, Sep2006: Ce constructeur de SwFitsDataTable lit l'entete 221 // et initialise donc l'objet SwFitsDataTable -> return 222 // return; 223 } 224 */ 225 dobj = new DataTable(segsz); 212 226 } 213 227 else { 214 228 dobj->Clear(); // On efface la table sinon 215 dobj->mSegSz = segsz;229 if (fgsss) dobj->mSegSz = segsz; 216 230 } 217 231 … … 221 235 222 236 vector<int_8> swpos; 237 segsz = dobj->mSegSz; 238 int_8 swp = 1; 239 while (swp < nbrows) { 240 swpos.push_back(swp); swp += segsz; 241 } 223 242 // Initialize the fits swap stream for SwFitsDataTable if necessary 224 243 if (swfdt) { 225 if ( swfdt->FitsSwapFile().FitsPtr() != is.FitsPtr() ) 244 if ( swfdt->FitsSwapFile().FitsPtr() != is.FitsPtr() ) { 245 // swfdt->FitsSwapFile().Close(); 246 // swfdt->FitsSwapFile().Open(is.FileName().c_str(), FitsInOutFile::Fits_RO); 247 // swfdt->FitsSwapFile().MoveAbsToHDU(is.CurrentHDU()); 226 248 swfdt->FitsSwapFile().ShareFitsPtr(is); 227 int_8 swp = 1;228 229 while (swp < nbrows) {230 swpos.push_back(swp); swp += segsz;231 249 } 232 250 } … … 303 321 304 322 // On ne doit pas lire les donnees de la table pour un SwFitsDataTable 305 if (swfdt) return; 323 if (swfdt) { 324 swfdt->mNSeg = swpos.size(); 325 return; 326 } 306 327 307 328 while ((dobj->SegmentSize()*dobj->NbSegments()) < dobj->NEntry()) -
trunk/SophyaExt/FitsIOServer/fitsinoutfile.cc
r3047 r3069 203 203 void FitsInOutFile::Close() 204 204 { 205 if (ownfptr == false) return;206 205 if (fptr_ == NULL) return; 206 if (ownfptr == false) { 207 fptr_ = NULL; return; 208 } 207 209 int status = 0; 208 210 if (mode_ == Fits_Create) { -
trunk/SophyaExt/FitsIOServer/fitsswapper.h
r2896 r3069 11 11 #include "fitsinoutfile.h" 12 12 #include "fitsblkrw.h" 13 14 #include "basedtable.h" 13 15 14 16 /*! … … 25 27 public: 26 28 FITSDataSwapper() 27 : fcol(0) , rowos(1) 29 : fcol(0) , rowos(1) , dtp(NULL) 28 30 { 29 31 } 30 FITSDataSwapper(FitsInOutFile & ios, int col )31 : fios(ios) , fcol(col), rowos(1) 32 FITSDataSwapper(FitsInOutFile & ios, int col, BaseDataTable* dt=NULL) 33 : fios(ios) , fcol(col), rowos(1) , dtp(dt) 32 34 { 33 35 } 34 36 35 37 inline FitsInOutFile & InOutStream() { return fios; } 38 36 39 void SetInOutStream(FitsInOutFile & ios, int col) 37 40 { … … 53 56 fcol = a.fcol; 54 57 rowos = a.rowos; 58 dtp = a.dtp; 55 59 } 56 60 … … 60 64 long row = rowos; 61 65 if (osw) row = oswp; 66 if (dtp != NULL) 67 if ((row+sz-1) > dtp->NRows() ) sz = dtp->NRows()-row+1; 62 68 FitsBlockRW<T>::WriteColumnData(fios, fcol, row, 1, d, sz); 63 69 if (!osw) rowos += sz; … … 67 73 virtual void ReadFromSwap(int_8 idx, int_8 swp, T* d, size_t sz) 68 74 { 75 long nrows = fios.GetNbRows(); 76 size_t szi = sz; 77 if ((swp+sz-1) > nrows) sz = nrows-swp+1; 69 78 FitsBlockRW<T>::ReadColumnData(fios, fcol, swp, 1, d, sz); 79 if (sz < szi) { 80 T zz = d[sz-1]; 81 for(size_t k=sz; k<szi; k++) d[k] = zz; 82 } 70 83 } 71 84 72 85 virtual DataSwapperInterface<T>* Clone() 73 86 { 74 FITSDataSwapper<T> * rsw = new FITSDataSwapper<T>(fios, fcol) ; 87 FITSDataSwapper<T> * rsw = new FITSDataSwapper<T>(fios, fcol, dtp) ; 88 rsw->rowos = rowos; 89 rsw->dtp = dtp; 75 90 return rsw; 76 91 } … … 80 95 int fcol; 81 96 long rowos; 97 BaseDataTable* dtp; 82 98 }; 83 99 -
trunk/SophyaExt/FitsIOServer/swfitsdtable.cc
r3032 r3069 70 70 mFgCreate = false; 71 71 } 72 /*! Constructor with the specification of the output swap stream - 73 and optional specification of block (or segment) size 72 /*! 73 \brief Construcor with specification of the \b FitsInOutFile swap stream. 74 if fgcreate == true, creates an empty table (the fits file should then be 75 opened for writing). 76 if fgcreate == false , the table is initialized (read in) from the current HDU. 74 77 */ 75 78 SwFitsDataTable::SwFitsDataTable(FitsInOutFile & os, sa_size_t segsz, bool fgcreate) … … 82 85 } 83 86 } 87 88 /*! 89 \brief Construcor with specification of the FITS file name. 90 if fgcreate == false , the FITS file is opened and the table is 91 initialized (read in) from HDU \b hdunum 92 */ 93 SwFitsDataTable::SwFitsDataTable(string fitsname, int hdunum, sa_size_t segsz) 94 : BaseDataTable(segsz) , 95 mSwF(fitsname, FitsInOutFile::Fits_RO) 96 { 97 // Lecture de la table 98 FitsHandler<BaseDataTable> fio(*this); 99 mSwF.MoveAbsToHDU(hdunum); 100 fio.Read(mSwF); 101 } 102 84 103 //! copy constructor - shares the data 85 104 SwFitsDataTable::SwFitsDataTable(SwFitsDataTable const & a) … … 158 177 void SwFitsDataTable::SwapOutAll() const 159 178 { 179 if (NRows() < 1) return; 160 180 // Et on vide les buffers de swap 161 181 for (size_t kk=0; kk<mNames.size(); kk++) { … … 185 205 break; 186 206 default: 187 throw ForbiddenError("SwFitsDataTable::S hare() : unknown column type ");207 throw ForbiddenError("SwFitsDataTable::SwapOutAll() : unknown column type "); 188 208 break; 189 209 } … … 261 281 { 262 282 ser = mICols.size(); 263 FITSDataSwapper<int_4> ISwapper(mSwF, colidx );283 FITSDataSwapper<int_4> ISwapper(mSwF, colidx, this); 264 284 if (swpos) 265 285 mICols.push_back(SwSegDataBlock<int_4>(ISwapper, *swpos, mSegSz)); … … 275 295 { 276 296 ser = mLCols.size(); 277 FITSDataSwapper<int_8> LSwapper(mSwF, colidx );297 FITSDataSwapper<int_8> LSwapper(mSwF, colidx, this); 278 298 if (swpos) 279 299 mLCols.push_back(SwSegDataBlock<int_8>(LSwapper, *swpos, mSegSz)); … … 289 309 { 290 310 ser = mFCols.size(); 291 FITSDataSwapper<r_4> FSwapper(mSwF, colidx );311 FITSDataSwapper<r_4> FSwapper(mSwF, colidx, this); 292 312 if (swpos) 293 313 mFCols.push_back(SwSegDataBlock<r_4>(FSwapper, *swpos, mSegSz)); … … 304 324 { 305 325 ser = mDCols.size(); 306 FITSDataSwapper<r_8> DSwapper(mSwF, colidx );326 FITSDataSwapper<r_8> DSwapper(mSwF, colidx, this); 307 327 if (swpos) 308 328 mDCols.push_back(SwSegDataBlock<r_8>(DSwapper, *swpos, mSegSz)); … … 318 338 { 319 339 ser = mYCols.size(); 320 FITSDataSwapper< complex<r_4> > YSwapper(mSwF, colidx );340 FITSDataSwapper< complex<r_4> > YSwapper(mSwF, colidx, this); 321 341 if (swpos) 322 342 mYCols.push_back(SwSegDataBlock< complex<r_4> >(YSwapper, *swpos, mSegSz)); … … 332 352 { 333 353 ser = mZCols.size(); 334 FITSDataSwapper< complex<r_8> > ZSwapper(mSwF, colidx );354 FITSDataSwapper< complex<r_8> > ZSwapper(mSwF, colidx, this); 335 355 if (swpos) 336 356 mZCols.push_back(SwSegDataBlock< complex<r_8> >(ZSwapper, *swpos, mSegSz)); … … 346 366 { 347 367 ser = mSCols.size(); 348 FITSDataSwapper< string > SSwapper(mSwF, colidx );368 FITSDataSwapper< string > SSwapper(mSwF, colidx, this); 349 369 if (swpos) 350 370 mSCols.push_back(SwSegDataBlock< string >(SSwapper, *swpos, mSegSz)); -
trunk/SophyaExt/FitsIOServer/swfitsdtable.h
r3032 r3069 11 11 #include "fitsswapper.h" 12 12 13 #include "fitshandler.h" 13 14 14 15 namespace SOPHYA { … … 19 20 SwFitsDataTable(sa_size_t segsz=512); 20 21 SwFitsDataTable(FitsInOutFile & os, sa_size_t segsz=512, bool fgcreate=true); 22 SwFitsDataTable(string fitsname, int hdunum=2, sa_size_t segsz=512); 21 23 SwFitsDataTable(SwFitsDataTable const& a); 22 24 … … 71 73 bool mFgCreate; // true -> creation de table, false -> lecture 72 74 }; 75 73 76 74 77 } // namespace SOPHYA
Note:
See TracChangeset
for help on using the changeset viewer.