Ignore:
Timestamp:
Aug 25, 2000, 5:52:48 PM (25 years ago)
Author:
ansari
Message:

normalisation des DVList

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaExt/FitsIOServer/fitsfile.cc

    r1136 r1143  
    4040FitsFile::~FitsFile()
    4141{
    42   cout << " destructeur FitsFile " << endl;
    4342  int status = 0;
    4443  if( fptr_ != NULL)
     
    106105void FitsInFile::InitNull()
    107106{
    108   cout << " init FitsInFile " << endl;
    109107  bitpix_ = 0;
    110108  naxis_ = 0;
     
    215213  fits_read_key(fileptr,TINT,"NAXIS",&naxis,NULL,&status);
    216214  if( status ) printerror( status );
    217   //  cout << " dimension lue " << naxis << endl;
    218215  // read the NAXISn keywords to get image size
    219216  long* naxes = new long[naxis] ;
     
    232229
    233230
    234 //void FitsInFile::ReadFInit(char flnm[],int hdunum)
    235231void FitsInFile::ReadFInit(int hdunum)
    236232{
    237   // InitNull();
     233  InitNull();
    238234  // int status = 0;
    239235 
     
    275271}
    276272
     273DVList  FitsInFile::DVListFromPrimaryHeader() const
     274   {
     275     int status;
     276     DVList dvl;
     277     KeywordsIntoDVList(fptr_, dvl, 1);
     278     int hdutype = 0;
     279     if (hdunum_ > 0) fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
     280     return dvl;
     281   }
    277282
    278283
     
    281286  int status = 0;
    282287  int hdutype;
     288  InitNull();
    283289  fits_movrel_hdu(fptr_, 1,&hdutype,&status);
    284290  if( status ) printerror( status," lecture du header suivant" );
     
    484490void FitsInFile::GetBinTabFCol(int* valeurs,int nentries, int NoCol) const
    485491    {
    486       cout <<" entree GetBinTabFCol " << endl;
    487492      int status= 0;
    488493      int DTYPE;
     
    735740  char card[FLEN_CARD]; 
    736741  char *comkey = "COMMENT";
     742  char comment[FLEN_COMMENT];
    737743
    738744  // shift with the number of mandatory keywords
    739   int num= 8;
    740 
     745  //  int num= 8;
     746    int num= 0;
     747    // primary header
     748    if (hdunum == 1)
     749      {
     750        // read NAXIS
     751        int naxis=0;
     752        fits_read_key(fileptr,TINT,"NAXIS",&naxis,NULL,&status);
     753        // number of mandatory keywords
     754        num = naxis+3;
     755      }
     756    // extensions
     757    else
     758      {
     759        if (hdutype == IMAGE_HDU)
     760          {
     761            // read NAXIS
     762            int naxis=0;
     763            fits_read_key(fileptr,TINT,"NAXIS",&naxis,NULL,&status);
     764            // number of mandatory keywords
     765            num = naxis+5;
     766          }
     767        else
     768          if(hdutype == ASCII_TBL || hdutype == BINARY_TBL)
     769            {
     770              // number of mandatory keywords
     771              num = 8;
     772            }
     773      }
    741774  int j;
    742775  for(j = num+1; j <= nkeys; j++)
     
    760793            {
    761794            case 'C':
    762               dvl[keyname]= strval;       
     795              fits_read_key(fileptr,TSTRING,keyname,strval,comment,&status);
     796              dvl[keyname]= strval;
     797              dvl.SetComment(keyname, comment);
    763798              break;
    764799            case 'I':
    765800              int ival;
    766               fits_read_key(fileptr,TINT,keyname,&ival,NULL,&status);
     801              fits_read_key(fileptr,TINT,keyname,&ival,comment,&status);
    767802                dvl[keyname]= (int_4) ival;             // Portage mac DY
     803                dvl.SetComment(keyname, comment);
    768804              break;
    769805            case 'L':
    770806              int ilog;
    771               if(strncmp(strval,"T",1) == 0) ilog= 1;
    772               else ilog= 0;
     807              fits_read_key(fileptr,TLOGICAL,keyname,&ilog,comment,&status);
    773808              dvl[keyname]= (int_4) ilog;
     809              dvl.SetComment(keyname, comment);
    774810              break;
    775811            case 'F':
    776812              double dval;
    777               fits_read_key(fileptr,TDOUBLE,keyname,&dval,NULL,&status);
     813              fits_read_key(fileptr,TDOUBLE,keyname,&dval,comment,&status);
    778814              dvl[keyname]= dval;
     815              dvl.SetComment(keyname, comment);
    779816              break;
    780817            }
     
    817854
    818855
    819 void FitsOutFile::makeHeaderImageOnFits(char type, int nbdim, int* naxisn)
     856void FitsOutFile::makeHeaderImageOnFits(char type, int nbdim, int* naxisn,  DVList &dvl)
    820857{
    821858  int status = 0;
     
    824861  if (hdunum_ == 1)
    825862    {
    826       if (imageOnPrimary_ == false) fits_create_img(fptr_,FLOAT_IMG,0,naxes,&status);
     863      if (imageOnPrimary_ == false)
     864        {
     865          fits_create_img(fptr_,FLOAT_IMG,0,naxes,&status);
     866          writeSignatureOnFits();       }
    827867      else  hdunum_--;
    828868    }
     
    844884
    845885  hdunum_++;
     886
     887  // write supplementary keywords
     888  //  dvl.Print();
     889  addKeywordsOfDVList(dvl);
     890
    846891  delete [] naxes;
    847892  if( status ) printerror( status, "erreur creation HDU IMAGE"  );
     
    854899  fits_write_img(fptr_,TDOUBLE,1,npix,map,&status);
    855900  if( status ) printerror( status, "erreur ecriture putImageToFits" );
    856   writeSignatureOnFits();
     901  //  writeSignatureOnFits();
    857902}
    858903
     
    863908  fits_write_img(fptr_,TFLOAT,1,npix, map,&status);
    864909  if( status ) printerror( status, "erreur ecriture putImageToFits" );
    865   writeSignatureOnFits();
     910  //  writeSignatureOnFits();
    866911
    867912}
     
    873918  fits_write_img(fptr_,TINT,1,npix,map,&status);
    874919  if( status ) printerror( status, "erreur ecriture putImageToFits" );
    875   writeSignatureOnFits();
     920  //  writeSignatureOnFits();
    876921}
    877922
     
    954999  //
    9551000  // write supplementary keywords
    956   //
    957   // get names and values from the join DVList object
    958   //  dvl.Print();
    959   fits_write_comment(fptr_,"--------------------------------------", &status);
    960   DVList::ValList::const_iterator it;
    961   for(it = dvl.Begin(); it != dvl.End(); it++)
    962     {
    963       char keytype= (*it).second.elval.typ;
    964       char keyname[10];
    965       strncpy(keyname,(*it).first.substr(0,64).c_str(),10);
    966       char comment[FLEN_COMMENT];
    967       switch (keytype)
    968         {
    969         case 'I' :
    970           {
    971             int ival=(*it).second.elval.iv;
    972             strncpy(comment,(*it).second.elcomm.c_str(),FLEN_COMMENT );
    973             fits_write_key(fptr_,TINT,keyname,&ival,comment,&status);
    974             break;
    975           }
    976         case 'D' :
    977           {
    978             double dval=(*it).second.elval.dv;
    979             strncpy(comment,(*it).second.elcomm.c_str(),FLEN_COMMENT );
    980             fits_write_key(fptr_,TDOUBLE,keyname,&dval,comment,&status);
    981             break;
    982           }
    983         case 'S' :
    984           {
    985             char strval[128];
    986             strncpy(strval,(*it).second.elval.strv->c_str(),127);
    987             strncpy(comment,(*it).second.elcomm.c_str(),FLEN_COMMENT );
    988             fits_write_key(fptr_,TSTRING,keyname,&strval,comment,&status);
    989             break;
    990           }
    991         }
    992   if( status )  printerror( status,"fitsfile: probleme ecriture mot-cle du dvlist" );
    993     }
    994   fits_write_comment(fptr_,"--------------------------------------", &status);
     1001  addKeywordsOfDVList(dvl);
    9951002
    9961003}
     
    10971104}
    10981105
     1106void  FitsOutFile::DVListIntoPrimaryHeader(DVList& dvl) const
     1107{
     1108  int status = 0;
     1109  int hdutype;
     1110  fits_movabs_hdu(fptr_,1,&hdutype,&status);
     1111  addKeywordsOfDVList(dvl);
     1112  fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
     1113}
     1114
    10991115
    11001116void FitsOutFile::writeSignatureOnFits() const
     
    11101126  fits_write_key(fptr_, TSTRING, keyname, &strval, comment, &status);
    11111127  if( status ) printerror( status );
    1112 
     1128  fits_write_date(fptr_, &status);
    11131129  fits_write_comment(fptr_,"..............................................", &status);
    11141130  fits_write_comment(fptr_, " SOPHYA package - FITSIOSever ", &status);
     
    11201136
    11211137
    1122 
    1123 
    1124 
     1138void FitsOutFile::addKeywordsOfDVList(DVList& dvl) const
     1139{
     1140  int status = 0;
     1141  fits_write_comment(fptr_,"---------- keywords from SOPHYA ---------", &status);
     1142  if (hdunum_ == 1) writeSignatureOnFits();
     1143  DVList::ValList::const_iterator it;
     1144  for(it = dvl.Begin(); it != dvl.End(); it++)
     1145    {
     1146      char keytype= (*it).second.elval.typ;
     1147      char keyname[10];
     1148      strncpy(keyname,(*it).first.substr(0,64).c_str(),10);
     1149      char comment[FLEN_COMMENT];
     1150      char strval[FLEN_VALUE]= "";
     1151      char *comkey = "COMMENT";
     1152      fits_read_keyword(fptr_, keyname, strval, NULL, &status);
     1153      if (status != 0 || strncmp(keyname,comkey,LEN_KEYWORD-1) == 0 )
     1154        {
     1155          status = 0;
     1156          switch (keytype)
     1157            {
     1158            case 'I' :
     1159              {
     1160                int ival=(*it).second.elval.iv;
     1161                strncpy(comment,(*it).second.elcomm.c_str(),FLEN_COMMENT );
     1162                fits_write_key(fptr_,TINT,keyname,&ival,comment,&status);
     1163                break;
     1164              }
     1165            case 'D' :
     1166              {
     1167                double dval=(*it).second.elval.dv;
     1168                strncpy(comment,(*it).second.elcomm.c_str(),FLEN_COMMENT );
     1169                fits_write_key(fptr_,TDOUBLE,keyname,&dval,comment,&status);
     1170                break;
     1171              }
     1172            case 'S' :
     1173              {
     1174                char strval[128];
     1175                strncpy(strval,(*it).second.elval.strv->c_str(),127);
     1176                strncpy(comment,(*it).second.elcomm.c_str(),FLEN_COMMENT );
     1177                fits_write_key(fptr_,TSTRING,keyname,&strval,comment,&status);
     1178                break;
     1179              }
     1180            }
     1181        }
     1182  if( status )  printerror( status,"fitsfile: probleme ecriture mot-cle du dvlist" );
     1183    }
     1184  fits_write_comment(fptr_,"--------------------------------------", &status);
     1185}
     1186
     1187
     1188
Note: See TracChangeset for help on using the changeset viewer.