From cdb91ea6b5bf0bbfcfaf5d27f063f711265e516e Mon Sep 17 00:00:00 2001 From: Elena.Budnik <ebudnik@irap.omp.eu> Date: Mon, 18 Dec 2017 17:55:09 +0100 Subject: [PATCH] redmine #5568 --- php/src/cdfinfo.c | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------- php/src/cdfsamplingfromdata.c | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------- php/src/cdfstartstopfromdata.c | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------- 3 files changed, 357 insertions(+), 321 deletions(-) diff --git a/php/src/cdfinfo.c b/php/src/cdfinfo.c index 63a7f56..d0a5c0f 100644 --- a/php/src/cdfinfo.c +++ b/php/src/cdfinfo.c @@ -15,42 +15,42 @@ void cdf_status_handler (CDFstatus, char *); char * cdf_str_datatype (long); -typedef struct cdfvar { /* CDF variable structure */ - char name[CDF_VAR_NAME_LEN+1]; - long datatype; - long numElements; /* string length for CDF_CHAR, 1 otherwise */ - long dimensionality; /* variable dimensionality */ - long dimSizes[CDF_MAX_DIMS]; /* variable dimension sizes */ - long recVariance; /* record variance */ - long numRecs; /* # of records this variable contains */ +typedef struct cdfvar { /* CDF variable structure */ + char name[CDF_VAR_NAME_LEN+1]; + long datatype; + long numElements; /* string length for CDF_CHAR, 1 otherwise */ + long dimensionality; /* variable dimensionality */ + long dimSizes[CDF_MAX_DIMS]; /* variable dimension sizes */ + long recVariance; /* record variance */ + long numRecs; /* # of records this variable contains */ } CDFvar; int main(int argc, char *argv[]) { + + CDFvar var; + CDFid id; /* CDF file ID */ + CDFstatus status; /* CDF status code */ + + long nZvars, nAttrs, attrId, attrScope, varId; + char attrName[CDF_ATTR_NAME_LEN+1]; + char fileName[MAX_FILE_NAME_LEN]; + char msg[100]; + int dummy, i; - CDFvar var; - CDFid id; /* CDF file ID */ - CDFstatus status; /* CDF status code */ - - long nZvars, nAttrs, attrId, attrScope, varId; - char attrName[CDF_ATTR_NAME_LEN+1]; - char fileName[MAX_FILE_NAME_LEN]; - char msg[100]; - int dummy, i; - - if (argc <= 1) - exit(0); /* CDF input file name not specified */ - else - strcpy(fileName, argv[argc-1]); /* Get the input file name */ + if (argc <= 1) + exit(0); /* CDF input file name not specified */ + else + strcpy(fileName, argv[argc-1]); /* Get the input file name */ status = CDFlib (OPEN_, CDF_, fileName, &id, NULL_); - if (status != CDF_OK) { - strcpy(msg, "OPEN_, CDF_, "); - strcat(msg, fileName); - cdf_status_handler (status, msg); - } + if (status != CDF_OK) { + strcpy(msg, "OPEN_, CDF_, "); + strcat(msg, fileName); + cdf_status_handler (status, msg); + } /*--------------------------------------------------------------------------- * This routine retrievs the following information: @@ -64,124 +64,119 @@ int main(int argc, char *argv[]) * more. Treat all CDF variables as zVariables. *--------------------------------------------------------------------------*/ - status = CDFlib (SELECT_, CDF_zMODE_, zMODEon2, - GET_, CDF_NUMATTRS_, &nAttrs, - CDF_NUMzVARS_, &nZvars, - NULL_); - if (status != CDF_OK) cdf_status_handler(status, "GET_, CDF_FILEINFO_"); + status = CDFlib (SELECT_, CDF_zMODE_, zMODEon2, + GET_, CDF_NUMATTRS_, &nAttrs, + CDF_NUMzVARS_, &nZvars, + NULL_); + if (status != CDF_OK) cdf_status_handler(status, "GET_, CDF_FILEINFO_"); - // printf(" nAttrs %d Zvars %d\n",nAttrs, nZvars); + // printf(" nAttrs %d Zvars %d\n",nAttrs, nZvars); -// printf ("Attributes:\n"); + // printf ("Attributes:\n"); - for (attrId = 0; attrId < nAttrs; attrId++) { - status = CDFlib (SELECT_, ATTR_, attrId, - GET_, ATTR_NAME_, attrName, ATTR_SCOPE_, &attrScope, - NULL_); - if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_"); - - + for (attrId = 0; attrId < nAttrs; attrId++) { + status = CDFlib (SELECT_, ATTR_, attrId, + GET_, ATTR_NAME_, attrName, ATTR_SCOPE_, &attrScope, + NULL_); + if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_"); // printf("Attr %d %s %d\n", attrId, attrName, attrScope); - } + } - // printf ("Variables:\n"); - for (varId=0; varId < nZvars; varId++) { - status = CDFlib (SELECT_,zVAR_, varId, - GET_, zVAR_NAME_, var.name, - zVAR_DATATYPE_, &var.datatype, - zVAR_NUMELEMS_, &var.numElements, - zVAR_NUMDIMS_, &var.dimensionality, - zVAR_DIMSIZES_, var.dimSizes, - zVAR_NUMRECS_, &var.numRecs, - zVAR_RECVARY_, &var.recVariance, - NULL_); - if (status != CDF_OK) cdf_status_handler (status, "GET_, zVARS_"); - - // printf("Varr %d %s %s %d\n", varId, var.name, cdf_str_datatype(var.datatype), var.numRecs); - if (var.recVariance != 0 && var.numRecs > 1 && var.datatype != CDF_EPOCH && var.datatype != CDF_EPOCH16) printf("%s \n", var.name); - } - - /* Close the CDF file */ - status = CDFlib (CLOSE_, CDF_, NULL_); + // printf ("Variables:\n"); + for (varId=0; varId < nZvars; varId++) { + status = CDFlib (SELECT_,zVAR_, varId, + GET_, zVAR_NAME_, var.name, + zVAR_DATATYPE_, &var.datatype, + zVAR_NUMELEMS_, &var.numElements, + zVAR_NUMDIMS_, &var.dimensionality, + zVAR_DIMSIZES_, var.dimSizes, + zVAR_NUMRECS_, &var.numRecs, + zVAR_RECVARY_, &var.recVariance, + NULL_); + if (status != CDF_OK) cdf_status_handler (status, "GET_, zVARS_"); + // printf("Varr %d %s %s %d\n", varId, var.name, cdf_str_datatype(var.datatype), var.numRecs); + if (var.recVariance != 0 && var.numRecs > 1 && var.datatype != CDF_EPOCH && var.datatype != CDF_EPOCH16 && var.datatype != CDF_TIME_TT2000) printf("%s \n", var.name); + } + /* Close the CDF file */ + status = CDFlib (CLOSE_, CDF_, NULL_); } - - - void cdf_status_handler (CDFstatus status, char *source) { - char message[CDF_STATUSTEXT_LEN+1]; - - CDFerror (status, message); /* Get the appropriate message */ - - if (status < CDF_WARN) { - printf ("An error has occurred, halting...\n"); - printf ("%s\n", message); - printf ("** Error source: %s\n", source); - exit (status); - } - else if (status < CDF_OK) { - printf ("Warning, function may not have compeleted as expected...\n"); - printf ("%s\n", message); - } - else if (status > CDF_OK) { - printf ("Function compeleted successfully, but be advised that...\n"); - printf ("%s\n", message); - } - - + char message[CDF_STATUSTEXT_LEN+1]; + + CDFerror (status, message); /* Get the appropriate message */ + + if (status < CDF_WARN) { + printf ("An error has occurred, halting...\n"); + printf ("%s\n", message); + printf ("** Error source: %s\n", source); + exit (status); + } + else if (status < CDF_OK) { + printf ("Warning, function may not have compeleted as expected...\n"); + printf ("%s\n", message); + } + else if (status > CDF_OK) { + printf ("Function compeleted successfully, but be advised that...\n"); + printf ("%s\n", message); + } } + /*-------------------------------------------------------------------------- * This routine returns the string representation of the given CDF * datatype. *--------------------------------------------------------------------------*/ char * cdf_str_datatype (long type) { - switch (type) { - case CDF_BYTE: - return "CDF_BYTE"; + switch (type) { + case CDF_BYTE: + return "CDF_BYTE"; - case CDF_INT1: - return "CDF_INT1"; + case CDF_INT1: + return "CDF_INT1"; - case CDF_CHAR: - return "CDF_CHAR"; + case CDF_CHAR: + return "CDF_CHAR"; - case CDF_INT2: - return "CDF_INT2"; + case CDF_INT2: + return "CDF_INT2"; - case CDF_UCHAR: - return "CDF_UCHAR"; + case CDF_UCHAR: + return "CDF_UCHAR"; - case CDF_UINT1: - return "CDF_UINT1"; + case CDF_UINT1: + return "CDF_UINT1"; - case CDF_INT4: - return "CDF_INT4"; + case CDF_INT4: + return "CDF_INT4"; - case CDF_UINT2: - return "CDF_UINT2"; + case CDF_UINT2: + return "CDF_UINT2"; - case CDF_FLOAT: - return "CDF_FLOAT"; + case CDF_FLOAT: + return "CDF_FLOAT"; - case CDF_REAL4: - return "CDF_REAL4"; + case CDF_REAL4: + return "CDF_REAL4"; - case CDF_DOUBLE: - return "CDF_DOUBLE"; + case CDF_DOUBLE: + return "CDF_DOUBLE"; - case CDF_REAL8: - return "CDF_REAL8"; + case CDF_REAL8: + return "CDF_REAL8"; - case CDF_UINT4: - return "CDF_UINT4"; + case CDF_UINT4: + return "CDF_UINT4"; - case CDF_EPOCH: - return "CDF_EPOCH"; + case CDF_EPOCH: + return "CDF_EPOCH"; - case CDF_EPOCH16: - return "CDF_EPOCH16"; - } + case CDF_EPOCH16: + return "CDF_EPOCH16"; + + case CDF_TIME_TT2000: + return "CDF_TIME_TT2000"; + } } diff --git a/php/src/cdfsamplingfromdata.c b/php/src/cdfsamplingfromdata.c index 02c54b2..e804d6d 100644 --- a/php/src/cdfsamplingfromdata.c +++ b/php/src/cdfsamplingfromdata.c @@ -16,153 +16,177 @@ /************************************* Global variables and structures **************************************/ -long CDFDims, // Number of dimensions in a CDF file - CDFVars, // Number of variables in a CDF file - CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file - CDFencoding, // Data encoding - CDFmajority, // Variable majority - CDFmaxRec, // max Record number - CDFAttrs; // number of CDF Attributes - // CDFdatatype; +long CDFDims, // Number of dimensions in a CDF file + CDFVars, // Number of variables in a CDF file + CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file + CDFencoding, // Data encoding + CDFmajority, // Variable majority + CDFmaxRec, // max Record number + CDFAttrs; // number of CDF Attributes +// CDFdatatype; struct cdfvar { // CDF variable structure - char name[CDF_VAR_NAME_LEN+1]; - long num; //variable number - long datatype; - long numElem; // variable dimensionality - long recVariance; // variable rec Variance - long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes + char name[CDF_VAR_NAME_LEN+1]; + long num; //variable number + long datatype; + long numElem; // variable dimensionality + long recVariance; // variable rec Variance + long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes } cdfVar; - - /*-------------------------------------------------------------------------- * Handles a CDF error. *--------------------------------------------------------------------------*/ void cdf_handle_error(CDFstatus status) { + char message[CDF_STATUSTEXT_LEN+1]; - char message[CDF_STATUSTEXT_LEN+1]; - - CDFerror (status, message); /* Get the appropriate message */ - fprintf (stderr, "%s\n", message); - exit(1); + CDFerror (status, message); /* Get the appropriate message */ + fprintf (stderr, "%s\n", message); + exit(1); } void find_min(int* delta, int nRecs, int minFalse, int* minVal) { - int i, n, min; - - n = 1; - i = 0; - while (abs(delta[i]) <= minFalse) i++; - if (i < nRecs) { - min = abs(delta[i]); - // printf(" first MIN %d \n", min); - for (i = 1; i < nRecs; i++) { -// printf(" delta %d \n", delta[i]); - if (delta[i] == min) n++; - if (delta[i] < min && delta[i] > minFalse) { - min = delta[i]; - n = 1; - } - } - } else { min = -10; - n = nRecs; - } - minVal[0] = min; - minVal[1] = n; - printf(" MIN %d %d\n", min, n); + int i, n, min; + + n = 1; + i = 0; + while (abs(delta[i]) <= minFalse) i++; + if (i < nRecs) { + min = abs(delta[i]); + // printf(" first MIN %d \n", min); + for (i = 1; i < nRecs; i++) { + // printf(" delta %d \n", delta[i]); + if (delta[i] == min) n++; + if (delta[i] < min && delta[i] > minFalse) { + min = delta[i]; + n = 1; + } + } + } else { + min = -10; + n = nRecs; + } + + minVal[0] = min; + minVal[1] = n; + printf(" MIN %d %d\n", min, n); } int main(int argc, char *argv[]) { - - long RecStart = 0, RecCount, RecInt = 1; - long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1}; - long varN = -1; - long datatype = 0, attrN, maxEntry; - CDFstatus cstatus; // CDF status code - CDFid id; - double *value; - int *delta; - int i, minFalse = 0, numEnough; - int min[2] = {0, 0}; - char attrValue[300]; - float Sampling; - double epoch16[2]; - long year, month, day, hour, minute, sec, msec, mksec, nsec, psec; + long RecStart = 0, RecCount, RecInt = 1; + long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1}; + long varN = -1; + long datatype = 0, attrN, maxEntry; + CDFstatus cstatus; // CDF status code + CDFid id; + double *value; + int *delta; + int i, minFalse = 0, numEnough; + int min[2] = {0, 0}; + char attrValue[300]; + float Sampling; + double epoch16[2], dbl_value, dbl_value_; + long year, month, day, hour, minute, sec, msec, mksec, nsec, psec; + long long *int_value; /*********************** Open CDF file *****************************/ - if ((cstatus = CDFopen(fileName, &id)) != CDF_OK) - cdf_handle_error(cstatus); + if ((cstatus = CDFopen(fileName, &id)) != CDF_OK) + cdf_handle_error(cstatus); /*********** treat all vars as zVars with eliminated false dimensionality and get Nrecs **********/ - if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); - while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16){ - varN++; - if ((cstatus = CDFlib(SELECT_, zVAR_, varN, - GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); - - // if (datatype == CDF_EPOCH16) break; - } - fprintf(stdout,"DATATYPE %d %d\n", varN, datatype); - if ((cstatus = CDFlib(SELECT_, zVAR_, varN, - GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); + if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + + while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16 && datatype != CDF_TIME_TT2000){ + varN++; + if ((cstatus = CDFlib(SELECT_, zVAR_, varN, + GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + // if (datatype == CDF_EPOCH16) break; + } + fprintf(stdout,"DATATYPE %d %d\n", varN, datatype); + if ((cstatus = CDFlib(SELECT_, zVAR_, varN, + GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + + fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1); + if (CDFmaxRec < 10) { + fprintf(stdout," %d\n", badFile); + exit (0); + } + + if ( datatype == CDF_TIME_TT2000 ) { + int_value = (long long *) malloc (sizeof(long long) * (CDFmaxRec+1)); + /******************* Get Epoch *************************/ + if ((cstatus = CDFlib (SELECT_, + zVAR_, varN, + zVAR_RECNUMBER_, RecStart, + zVAR_RECCOUNT_, CDFmaxRec+1, + zVAR_RECINTERVAL_, RecInt, + zVAR_DIMINDICES_, indices, + zVAR_DIMCOUNTS_, counts, + zVAR_DIMINTERVALS_, intervals, + GET_, zVAR_HYPERDATA_, int_value, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + } + else { + value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1)); + /******************* Get Epoch *************************/ + if ((cstatus = CDFlib (SELECT_, + zVAR_, varN, + zVAR_RECNUMBER_, RecStart, + zVAR_RECCOUNT_, CDFmaxRec+1, + zVAR_RECINTERVAL_, RecInt, + zVAR_DIMINDICES_, indices, + zVAR_DIMCOUNTS_, counts, + zVAR_DIMINTERVALS_, intervals, + GET_, zVAR_HYPERDATA_, value, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + } + - fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1); - if (CDFmaxRec < 10) { - fprintf(stdout," %d\n", badFile); - exit (0); - } - value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1)); - -/******************* Get Epoch *************************/ - if ((cstatus = CDFlib (SELECT_, - zVAR_, varN, - zVAR_RECNUMBER_, RecStart, - zVAR_RECCOUNT_, CDFmaxRec+1, - zVAR_RECINTERVAL_, RecInt, - zVAR_DIMINDICES_, indices, - zVAR_DIMCOUNTS_, counts, - zVAR_DIMINTERVALS_, intervals, - GET_, zVAR_HYPERDATA_, value, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); - delta = (int *)malloc(sizeof(int)* CDFmaxRec); - for (i = 1; i < CDFmaxRec+1; i++) - { - if (datatype == CDF_EPOCH16) { - epoch16[0] = value[2*(i-1)]; - epoch16[1] = value[2*(i-1)+1]; - EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); - value[i-1] = computeEPOCH(year, month, day, hour, minute, sec, msec); - epoch16[0] = value[2*i]; - epoch16[1] = value[2*i+1]; - EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); - value[i] = computeEPOCH(year, month, day, hour, minute, sec, msec); - } - delta[i-1] = (int)(value[i] - value[i-1] + 50)/100; - } - // fprintf(stdout,"value %f\n", value[11]-value[10]); - free(value); - // fprintf(stdout,"delta %d\n", delta[0]); - numEnough = CDFmaxRec/10; - while (min[1] < numEnough) { - fprintf(stdout,"minFalse %d\n", minFalse); - find_min(delta, CDFmaxRec, minFalse, min); - minFalse = min[0]; - } + delta = (int *)malloc(sizeof(int)* CDFmaxRec); + for (i = 1; i < CDFmaxRec+1; i++) + { + if (datatype == CDF_TIME_TT2000) { + dbl_value_ = CDF_TT2000_to_UTC_EPOCH(int_value[i-1]); + dbl_value = CDF_TT2000_to_UTC_EPOCH(int_value[i]); + delta[i-1] = (int)(dbl_value - dbl_value_ + 50)/100; + } + else { + if (datatype == CDF_EPOCH16) { + epoch16[0] = value[2*(i-1)]; + epoch16[1] = value[2*(i-1)+1]; + EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); + value[i-1] = computeEPOCH(year, month, day, hour, minute, sec, msec); + epoch16[0] = value[2*i]; + epoch16[1] = value[2*i+1]; + EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); + value[i] = computeEPOCH(year, month, day, hour, minute, sec, msec); + } + delta[i-1] = (int)(value[i] - value[i-1] + 50)/100; + } + } + // fprintf(stdout,"value %f\n", value[11]-value[10]); + if (datatype == CDF_TIME_TT2000) free(int_value); + else free(value); + // fprintf(stdout,"delta %d\n", delta[0]); + numEnough = CDFmaxRec/10; + while (min[1] < numEnough) { + fprintf(stdout,"minFalse %d\n", minFalse); + find_min(delta, CDFmaxRec, minFalse, min); + minFalse = min[0]; + } - free(delta); - if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); + free(delta); + if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); - // fprintf(stdout,"%d %f\n",min[1], (float)min[0]/100.0); - fprintf(stdout,"%f\n",(float)min[0]/10.0); - + // fprintf(stdout,"%d %f\n",min[1], (float)min[0]/100.0); + fprintf(stdout,"%f\n",(float)min[0]/10.0); } diff --git a/php/src/cdfstartstopfromdata.c b/php/src/cdfstartstopfromdata.c index 1859927..eba6093 100644 --- a/php/src/cdfstartstopfromdata.c +++ b/php/src/cdfstartstopfromdata.c @@ -16,21 +16,21 @@ Global variables and structures **************************************/ long CDFDims, // Number of dimensions in a CDF file - CDFVars, // Number of variables in a CDF file - CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file - CDFencoding, // Data encoding - CDFmajority, // Variable majority - CDFmaxRec, // max Record number - CDFAttrs; // number of CDF Attributes - // CDFdatatype; + CDFVars, // Number of variables in a CDF file + CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file + CDFencoding, // Data encoding + CDFmajority, // Variable majority + CDFmaxRec, // max Record number + CDFAttrs; // number of CDF Attributes +// CDFdatatype; struct cdfvar { // CDF variable structure - char name[CDF_VAR_NAME_LEN+1]; - long num; //variable number - long datatype; - long numElem; // variable dimensionality - long recVariance; // variable rec Variance - long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes + char name[CDF_VAR_NAME_LEN+1]; + long num; //variable number + long datatype; + long numElem; // variable dimensionality + long recVariance; // variable rec Variance + long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes } cdfVar; @@ -40,88 +40,105 @@ struct cdfvar { // CDF variable structure *--------------------------------------------------------------------------*/ void cdf_handle_error(CDFstatus status) { + char message[CDF_STATUSTEXT_LEN+1]; - char message[CDF_STATUSTEXT_LEN+1]; - - CDFerror (status, message); /* Get the appropriate message */ - fprintf (stderr, "%s\n", message); - exit(1); + CDFerror (status, message); /* Get the appropriate message */ + fprintf (stderr, "%s\n", message); + exit(1); } - - int main(int argc, char *argv[]) { - char fileName[MAX_FILE_NAME_LEN]; - long RecStart = 0, RecCount, RecInt = 1; - long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1}; - long varN = -1; - long datatype = 0; - CDFstatus cstatus; // CDF status code - CDFid id; - double *value; - int i; - double epoch16[2]; - long year, month, day, hour, min, sec, msec, mksec, nsec, psec; - - if (argc <= 1) - exit(0); /* CDF input file name not specified */ - else - strcpy(fileName, argv[argc-1]); /* Get the input file name */ + char fileName[MAX_FILE_NAME_LEN]; + long RecStart = 0, RecCount, RecInt = 1; + long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1}; + long varN = -1; + long datatype = 0; + CDFstatus cstatus; // CDF status code + CDFid id; + double *value; + int i; + double epoch16[2], dbl_value, dbl_value_; + long year, month, day, hour, min, sec, msec, mksec, nsec, psec; + long long *int_value; + + if (argc <= 1) + exit(0); /* CDF input file name not specified */ + else + strcpy(fileName, argv[argc-1]); /* Get the input file name */ /*********************** Open CDF file *****************************/ - if ((cstatus = CDFopen(fileName, &id)) != CDF_OK) - cdf_handle_error(cstatus); + if ((cstatus = CDFopen(fileName, &id)) != CDF_OK) + cdf_handle_error(cstatus); /*********** treat all vars as zVars with eliminated false dimensionality and get Nrecs **********/ - if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); - while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16){ - varN++; - if ((cstatus = CDFlib(SELECT_, zVAR_, varN, - GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); - - // if (datatype == CDF_EPOCH16) break; - } + if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + + while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16 && datatype != CDF_TIME_TT2000) { + varN++; + if ((cstatus = CDFlib(SELECT_, zVAR_, varN, + GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + } - if ((cstatus = CDFlib(SELECT_, zVAR_, varN, - GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); - - // fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1); - if (CDFmaxRec < 1) exit (0); - - value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1)); + if ((cstatus = CDFlib(SELECT_, zVAR_, varN, + GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); -/******************* Get Epoch *************************/ - if ((cstatus = CDFlib (SELECT_, - zVAR_, varN, - zVAR_RECNUMBER_, RecStart, - zVAR_RECCOUNT_, CDFmaxRec+1, - zVAR_RECINTERVAL_, RecInt, - zVAR_DIMINDICES_, indices, - zVAR_DIMCOUNTS_, counts, - zVAR_DIMINTERVALS_, intervals, - GET_, zVAR_HYPERDATA_, value, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); - - if (datatype == CDF_EPOCH16) { - epoch16[0] = value[0]; - epoch16[1] = value[1]; - EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &min, &sec, &msec, &mksec, &nsec, &psec); - value[0] = computeEPOCH(year, month, day, hour, min, sec, msec); - epoch16[0] = value[CDFmaxRec*2]; - epoch16[1] = value[CDFmaxRec*2+1]; - EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &min, &sec, &msec, &mksec, &nsec, &psec); - value[CDFmaxRec] = computeEPOCH(year, month, day, hour, min, sec, msec); - } - printf("%f %f\n", value[0]/1000.0-TIMESHIFT, value[CDFmaxRec]/1000.0-TIMESHIFT); + // fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1); + if (CDFmaxRec < 1) exit (0); + + if ( datatype == CDF_TIME_TT2000 ) { + int_value = (long long *) malloc (sizeof(long long) * (CDFmaxRec+1)); + /******************* Get Epoch *************************/ + if ((cstatus = CDFlib (SELECT_, + zVAR_, varN, + zVAR_RECNUMBER_, RecStart, + zVAR_RECCOUNT_, CDFmaxRec+1, + zVAR_RECINTERVAL_, RecInt, + zVAR_DIMINDICES_, indices, + zVAR_DIMCOUNTS_, counts, + zVAR_DIMINTERVALS_, intervals, + GET_, zVAR_HYPERDATA_, int_value, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + + dbl_value_ = CDF_TT2000_to_UTC_EPOCH(int_value[0]); + dbl_value = CDF_TT2000_to_UTC_EPOCH(int_value[CDFmaxRec]); + printf("%f %f\n", dbl_value_/1000.0-TIMESHIFT,dbl_value/1000.0-TIMESHIFT); + free(int_value); + } + else { + value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1)); + /******************* Get Epoch *************************/ + if ((cstatus = CDFlib (SELECT_, + zVAR_, varN, + zVAR_RECNUMBER_, RecStart, + zVAR_RECCOUNT_, CDFmaxRec+1, + zVAR_RECINTERVAL_, RecInt, + zVAR_DIMINDICES_, indices, + zVAR_DIMCOUNTS_, counts, + zVAR_DIMINTERVALS_, intervals, + GET_, zVAR_HYPERDATA_, value, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); + + if (datatype == CDF_EPOCH16) { + epoch16[0] = value[0]; + epoch16[1] = value[1]; + EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &min, &sec, &msec, &mksec, &nsec, &psec); + value[0] = computeEPOCH(year, month, day, hour, min, sec, msec); + epoch16[0] = value[CDFmaxRec*2]; + epoch16[1] = value[CDFmaxRec*2+1]; + EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &min, &sec, &msec, &mksec, &nsec, &psec); + value[CDFmaxRec] = computeEPOCH(year, month, day, hour, min, sec, msec); + } + + printf("%f %f\n", value[0]/1000.0-TIMESHIFT, value[CDFmaxRec]/1000.0-TIMESHIFT); + free(value); + } - if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK) - cdf_handle_error (cstatus); - - free(value); + if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK) + cdf_handle_error (cstatus); } -- libgit2 0.21.2