Changeset 2846 in Sophya for trunk/SophyaExt/FitsIOServer/fitshdtable.cc
- Timestamp:
- Nov 21, 2005, 9:32:49 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fitshdtable.cc
r2843 r2846 25 25 26 26 int tbltyp = os.GetDef_TableType(); 27 string strcoltag; 28 long strwidth = os.GetDef_StrColWidth(); 29 if (strwidth < 1) strwidth = 16; 30 char buff[32]; 31 if (tbltyp == ASCII_TBL) 32 sprintf(buff, "A%ld",strwidth); 33 else 34 sprintf(buff, "%ldA",strwidth); 35 strcoltag = buff; 36 27 37 vector<string> colnames, tform, tunit; 28 38 for(sa_size_t k=0; k<dobj->NVar(); k++) { 29 colnames.push_back(dobj->GetColumName(k));30 tunit.push_back("");39 bool fgoknm = true; 40 bool fgoktun = true; 31 41 switch ( dobj->GetColumType(k) ) { 32 42 case BaseDataTable::IntegerField : … … 43 53 break; 44 54 case BaseDataTable::DoubleField : 55 case BaseDataTable::DateTimeField : 45 56 if (tbltyp == ASCII_TBL) tform.push_back("D15.8"); 46 57 else tform.push_back("D"); 58 if (dobj->GetColumType(k) == BaseDataTable::DateTimeField ) { 59 tunit.push_back("Days (DateTimeField)"); 60 fgoktun = false; 61 } 62 break; 63 case BaseDataTable::ComplexField : 64 if (tbltyp == ASCII_TBL) { 65 cout << "FitsHandler<BaseDataTable>::Write()/Warning ComplexField not supported for ASCII_TBL " 66 << endl; 67 fgoknm = false; 68 } 69 else tform.push_back("C"); 70 break; 71 case BaseDataTable::DoubleComplexField : 72 if (tbltyp == ASCII_TBL) { 73 cout << "FitsHandler<BaseDataTable>::Write()/Warning DoubleComplexField not supported for ASCII_TBL " 74 << endl; 75 fgoknm = false; 76 } 77 else tform.push_back("M"); 47 78 break; 48 79 case BaseDataTable::StringField : 49 cout << "FitsHandler<BaseDataTable>::Write() / Warning StringField not yet supported " << endl;80 tform.push_back(strcoltag); 50 81 break; 51 82 default: … … 53 84 break; 54 85 } 86 if (fgoknm) { 87 colnames.push_back(dobj->GetColumName(k)); 88 if (fgoktun) tunit.push_back(""); 89 } 55 90 } 56 91 57 92 // On cree la table 58 string extname = "";93 string extname = os.NextExtensionName(); 59 94 os.CreateTable(os.GetDef_TableType(), extname, colnames, tform, tunit); 60 95 … … 67 102 for(sa_size_t k=0; k<dobj->NVar(); k++) { 68 103 sa_size_t sk = dobj->mNames[k].ser; 104 //DBG cout << "DBG-A k= " << k << " nom=" << dobj->mNames[k].nom << " ser=" << sk 105 //DBG << " type=" << dobj->GetColumType(k) << endl; 69 106 switch ( dobj->GetColumType(k) ) { 70 107 case BaseDataTable::IntegerField : … … 84 121 break; 85 122 case BaseDataTable::DoubleField : 123 case BaseDataTable::DateTimeField : 86 124 icol++; 87 125 FitsBlockRW<r_8>::WriteColumnData(os, icol, l+1, 1, 88 126 dt->mDCols[sk].GetCstSegment(iseg), sz); 89 127 break; 90 // case BaseDataTable::StringField : 128 case BaseDataTable::ComplexField : 129 if (tbltyp == BINARY_TBL) { 130 icol++; 131 FitsBlockRW< complex<r_4> >::WriteColumnData(os, icol, l+1, 1, 132 dt->mYCols[sk].GetCstSegment(iseg), sz); 133 } 134 break; 135 case BaseDataTable::DoubleComplexField : 136 if (tbltyp == BINARY_TBL) { 137 icol++; 138 FitsBlockRW< complex<r_8> >::WriteColumnData(os, icol, l+1, 1, 139 dt->mZCols[sk].GetCstSegment(iseg), sz); 140 } 141 break; 142 case BaseDataTable::StringField : 143 icol++; 144 FitsBlockRW<std::string>::WriteColumnData(os, icol, l+1, 1, 145 dt->mSCols[sk].GetCstSegment(iseg), sz); 146 break; 91 147 default: 92 148 break; … … 99 155 MuTyV mtv = dobj->SegmentSize(); 100 156 os.WriteKey("SEGMSIZE",mtv," SOPHYA::DataTable SegmentSize"); 157 mtv = "SOPHYA::DataTable"; 158 os.WriteKey("SOPCLSNM",mtv," Object class name "); 101 159 } 102 160 … … 114 172 if (segsz > 2048) segsz = 2048; 115 173 string key = "SEGMSIZE"; 116 string ssegsz = is.KeyValue(key); 117 if (ssegsz.length() > 0) segsz = atoi(ssegsz.c_str()); 174 bool knex = false; 175 string ssegsz = is.KeyValue(key, knex); 176 if (!knex && (ssegsz.length() > 0)) segsz = atoi(ssegsz.c_str()); 118 177 if (segsz < 16) segsz = 16; 119 178 … … 163 222 colpos.push_back(k+1); 164 223 break; 224 case TCOMPLEX : 225 dt->AddComplexColumn(colnames[k]); 226 colpos.push_back(k+1); 227 break; 228 case TDBLCOMPLEX : 229 dt->AddDoubleComplexColumn(colnames[k]); 230 colpos.push_back(k+1); 231 break; 232 case TSTRING : 233 dt->AddStringColumn(colnames[k]); 234 colpos.push_back(k+1); 235 break; 165 236 default: 166 237 cout << "FitsHandler<BaseDataTable>::Read() NOT handled field type " … … 174 245 while ((dobj->SegmentSize()*dobj->NbSegments()) < dobj->NEntry()) 175 246 dobj->Extend(); 176 // cout << " DBG2 -- dobj->mNSeg = " << dobj->NbSegments() << " SegSize="177 // << dobj->SegmentSize() << " NEntry=" << dobj->NEntry() << endl;247 //DBG cout << " DBG2 -- dobj->mNSeg = " << dobj->NbSegments() << " SegSize=" 248 //DBG << dobj->SegmentSize() << " NEntry=" << dobj->NEntry() << endl; 178 249 179 250 // Lecture des donnees des colonnes … … 201 272 break; 202 273 case BaseDataTable::DoubleField : 274 case BaseDataTable::DateTimeField : 203 275 FitsBlockRW<r_8>::ReadColumnData(is, icol, l+1, 1, 204 276 dt->mDCols[sk].GetSegment(iseg), sz); 205 277 break; 206 // case BaseDataTable::StringField : 278 case BaseDataTable::ComplexField : 279 FitsBlockRW< complex<r_4> >::ReadColumnData(is, icol, l+1, 1, 280 dt->mYCols[sk].GetSegment(iseg), sz); 281 break; 282 case BaseDataTable::DoubleComplexField : 283 FitsBlockRW< complex<r_8> >::ReadColumnData(is, icol, l+1, 1, 284 dt->mZCols[sk].GetSegment(iseg), sz); 285 break; 286 case BaseDataTable::StringField : 287 FitsBlockRW<std::string>::ReadColumnData(is, icol, l+1, 1, 288 dt->mSCols[sk].GetSegment(iseg), sz); 289 break; 207 290 default: 208 291 break; … … 217 300 218 301 219 /* 220 int toto() 221 { 222 DataTable xx; 223 FitsInOutFile fio("dtoto.fits", FitsInOutFile::Fits_Create); 224 FitsHandler<BaseDataTable> fh(xx); 225 // fio << xx; 226 } 227 */ 228 229 302 303
Note:
See TracChangeset
for help on using the changeset viewer.