////////////////////////////////////////////////////////////////////// // DataFloat.h: interface for the CDataFloat class. // ----------------------------------------------- // // REVISIONS: // 6-22-10 AJO Add bool GetTimeAtValue(float fValue, float *pTvalue) #pragma once #include "FilePath.h" // Added by ClassView for def of CFilePath #include "ChannelDefinition.h" // for def of CHANNEL #include "DDASTestDefinition.h" // for def of FILEINFOBLOCK #include // CArray definitions #ifndef TESTPATHSIZE #define TESTPATHSIZE 128 #endif enum FileTypes {UNKNOWN, FLOATPOINT, PROCESSED}; // File types //File Definitions #define FILEERROR -1 // Error in file I/O // File Types and Version #define FLOATDATANAME "DDAS FlPt" // Floating Point Data File type #define FLOATDATARAW "DDAS fpRAW" // Float Raw data #define FLOATDATAVER "Ver 500" // Floating Point Data File version // Standard Messages #define CantOpenMsg "Could not open file " #define NonExistMsg "Non-existent file " typedef struct tagTESTINFO { unsigned long Size; // Block Size (including Size) unsigned long DeviceID; // DAQ device ID long ChannelNo; // Channel number (1-32) long SampleRate; // Samples per second long TotalSamples; // Total samples in data record long PreEventSamples; // Samples before event short ChanNumInSys; // Channel Number (1-128) in system (many devices) short NumPreCalPts; // Number of preCal points included with data short NumPostCalPts; // Number of preCal points included with data char TestCreation[TESTPATHSIZE]; // Test path and date char TimeAxisTitle[32]; // Time axis title byte SpareBytes[2]; // 2 bytes of spare (for 4 byte alignment) } TESTINFO; typedef struct tagFILEHEADER { FILEINFOBLOCK FileInfo; TESTINFO TestInfo; CHANNEL Channel; //---------------the following must add up to 32 bytes ----------------- byte SpareBytes[32]; // 32 bytes of spare } FILEHEADER; /* DATA PEAK STRUCTURE TYPE DEFINITION */ typedef struct tagDATAPEAK { float Min; short Xmin; float Max; short Xmax; } DATAPEAK; typedef DATAPEAK *PDATAPEAK; // Pointer to data peak structure typedef DATAPEAK *LPDP; // Pointer to data peak // types of peak value calculations enum PeakTypes {PEAKS_MINMAX, PEAKS_3MSCONTIN, PEAKS_3MSCUMUL}; typedef struct tagDATAHIST // Histogram (number of occurrences) of data values { float fVal; // Data value int nOccurrences; // Number of occurrences in data set // float fX; // First x value of occurrence // int nX; // First x index of occurrence } DATAHIST; class CDataFloat { public: CDataFloat(unsigned int nSize); CDataFloat(); virtual ~CDataFloat(); class CPeakList { public: CPeakList() { }; virtual ~CPeakList() {}; void RemoveAll() { m_lstDHist.RemoveAll(); } void AddDataPoint(DATAHIST* pDHist); void Get3msMin(int nPtPer3ms, DATAHIST* pDHist); void Get3msMax(int nPtPer3ms, DATAHIST* pDHist); private: CList m_lstDHist; // int m_nMaxXIndex; // float m_fMaxXVal; }; int GetChannelNumberInBox(); bool VerifyAndCoerceAxis(bool bNegativeSign, const char* szAxis, BOOL bVerbose); void SetEngrgUnits(char *szNewEngrgUnits); void SetChannelName(char* szNewChannelName); int CalcSampIn3mSecInt(); int ConvertTimeToIndex(float fTime); float ConvertIndexToTime(int nIndex); const CString GetFileName(); int AppendArrayFloat(CArray* srcArray); CArray* GetDataArray(); bool GetTimeAtValue(float fValue, float *pTvalue); bool GetDataPeaks(int nPkType, int nVerbose, float* pTStart, float* pTEnd, float* pTMin, float* pDMin, float* pTMax, float* pDMax); bool GetDataPeaks(int nPkType, int nVerbose, float* pTMin, float* pDMin, float* pTMax, float* pDMax); bool GetDataPeaks(int nPkType, int nVerbose, int *pXMin, float *pTMin, float *pDMin, int *pXMax, float *pTMax, float *pDMax); int GetChannelNumber(); float GetStartTime(bool bmSec); float GetStartTimeData(bool bmSec); float GetStopTime(bool bmSec); float GetStopTimeData(bool bmSec); const char* GetFileExt(); const char* GetFileTitle(); long GetSampleRate(); const char* GetFilePathAndName(); int SetFilePathAndName(char* szNewFileSpec); int ClearAll(long NewNumberElements); TESTINFO* GetTestInfo(); FILEINFOBLOCK* GetFileInfo(); CHANNEL* GetChannel(); float GetFilterClass(); int GetEventOffset(); // char* GetDataSetName(); CString GetDataSetName(CString &csName); FILEHEADER* CDataFloat::GetFileHeader(); bool WriteToFile(const char *lpFilename, bool bPrint); bool ReadFromFile(const char *lpFilename); float* GetDataBuffer(); bool SetSize(long lNumberElements); long GetSize(); bool GetDataNext(float* fData); bool StoreDataNext(float fData); bool SetIndexToStart(); void operator=(const CDataFloat &src); // File Extensions #define RawExt ".raw" // Unprocessed Data File Extension #define FlPtExt ".fpd" // Floating Point Data File Extension enum FPDVerbosity {FPD_SILENT, // Amount of messages printed FPD_ERRORS, FPD_STATUS, FPD_RESULTS, FPD_VERBOSE}; protected: void Peak3mS(float *pfDataBlock, PDATAPEAK p3msPeak); CFilePath FilePathAndName; FILEHEADER FileHeader; CArray FloatData; // Floating point Data array float * pfBfr; // working pointer to buffer at FloatData };