Changeset 10946
- Timestamp:
- 06/09/11 13:29:21 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/src/Fits.cc
r10933 r10946 265 265 void Fits::Write(Converter* conv) 266 266 { 267 268 fTable->makeThisCurrent(); 269 int status(0); 270 if (fits_insert_rows(fTable->fitsPointer(), fNumRows, 1, &status)) 271 { 272 ostringstream str; 273 str << "Could not insert row in file " << fFileName << ". cfitsio error code: " << status; 274 fMess->Error(str); 275 } 276 fNumRows++; 277 278 //the first standard variable is the current MjD 279 if (fEndMjD == 0) 280 { 281 double doubleValue = *static_cast<double*>(fStandardPointers[0]);// - fRefMjD; 282 WriteSingleHeaderKey("TSTART", doubleValue, "Time of the first received data"); 283 } 284 fEndMjD = * static_cast<double*>(fStandardPointers[0]); 285 286 //first copy the standard variables to the copy buffer 287 int shift = 0; 288 289 for (unsigned int i=0;i<fStandardNumBytes.size();i++) 290 { 291 const char * charSrc = static_cast<char*>(fStandardPointers[i]); 292 reverse_copy(charSrc, charSrc+fStandardNumBytes[i], &fCopyBuffer[shift]); 293 shift+= fStandardNumBytes[i]; 294 } 295 296 //now take care of the DIM data. The Converter is here for that purpose 297 conv->ToFits(static_cast<void*>(&fCopyBuffer[shift]), fDataPointer, fDataNumBytes); 298 299 //data copied to buffer, can write to fits 300 fits_write_tblbytes(fFile->fitsPointer(), fNumRows, 1, fTotalNumBytes, fCopyBuffer, &status); 301 if (status) 302 { 303 char text[30];//max length of cfitsio error strings (from doc) 304 fits_get_errstatus(status, text); 305 ostringstream str; 306 str << "Error while writing FITS row in " << fFileName << ". Message: " << text << " [" << status << "]"; 307 fMess->Error(str); 308 } 309 } 267 //first copy the standard variables to the copy buffer 268 int shift = 0; 269 for (unsigned int i=0;i<fStandardNumBytes.size();i++) 270 { 271 const char *charSrc = reinterpret_cast<char*>(fStandardPointers[i]); 272 reverse_copy(charSrc, charSrc+fStandardNumBytes[i], &fCopyBuffer[shift]); 273 shift += fStandardNumBytes[i]; 274 } 275 276 try 277 { 278 //now take care of the DIM data. The Converter is here for that purpose 279 conv->ToFits(&fCopyBuffer[shift], fDataPointer, fDataNumBytes); 280 } 281 catch (const runtime_error &e) 282 { 283 ostringstream str; 284 str << fFileName << ": " << e.what(); 285 fMess->Error(str); 286 return; 287 } 288 289 fTable->makeThisCurrent(); 290 291 int status(0); 292 if (fits_insert_rows(fTable->fitsPointer(), fNumRows, 1, &status)) 293 { 294 ostringstream str; 295 str << "Inserting row into " << fFileName << " failed (fits_insert_rows, rc=" << status << ")"; 296 fMess->Error(str); 297 // FIXME: What is a proper action here? 298 } 299 300 fNumRows++; 301 302 //the first standard variable is the current MjD 303 if (fEndMjD == 0) 304 { 305 const double doubleValue = *reinterpret_cast<double*>(fStandardPointers[0]); 306 WriteSingleHeaderKey("TSTART", doubleValue, 307 "Time of the first received data"); 308 } 309 fEndMjD = *reinterpret_cast<double*>(fStandardPointers[0]); 310 311 //data copied to buffer, can write to fits 312 fits_write_tblbytes(fFile->fitsPointer(), fNumRows, 1, fTotalNumBytes, fCopyBuffer, &status); 313 if (status) 314 { 315 char text[30];//max length of cfitsio error strings (from doc) 316 fits_get_errstatus(status, text); 317 ostringstream str; 318 str << "Writing FITS row " << fNumRow << " in " << fFileName << ": " << text << " (file_write_tblbytes, rc=" << status << ")"; 319 fMess->Error(str); 320 // FIXME: What is a proper action here? 321 } 322 } 323 310 324 // -------------------------------------------------------------------------- 311 325 //
Note:
See TracChangeset
for help on using the changeset viewer.