mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 08:10:02 +02:00
103 lines
2.1 KiB
C++
103 lines
2.1 KiB
C++
#ifndef POSTPROCESSING_H
|
|
#define POSTPROCESSING_H
|
|
|
|
|
|
#include "detectorData.h"
|
|
#include "slsDetectorBase.h"
|
|
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <iomanip>
|
|
#include <cstring>
|
|
#include <string>
|
|
#include <sstream>
|
|
#include <queue>
|
|
#include <math.h>
|
|
#include <semaphore.h>
|
|
|
|
|
|
|
|
/**
|
|
@short methods for data postprocessing
|
|
(including thread for writing data files and plotting in parallel with the acquisition)
|
|
*/
|
|
|
|
class postProcessing: public virtual slsDetectorBase {
|
|
|
|
public:
|
|
postProcessing();
|
|
virtual ~postProcessing();
|
|
|
|
|
|
/**
|
|
set/get if the data processing and file writing should be done by a separate threads
|
|
\param b 0 sequencial data acquisition and file writing, 1 separate thread, -1 get
|
|
\returns thread flag
|
|
*/
|
|
|
|
int setThreadedProcessing(int b=-1) {if (b>=0) *threadedProcessing=b; return *threadedProcessing;};
|
|
|
|
/** processes the data
|
|
\returns nothing
|
|
*/
|
|
void *processData();
|
|
|
|
int checkJoinThread();
|
|
void setJoinThread(int v);
|
|
|
|
|
|
void registerDataCallback(int( *userCallback)(detectorData*, int, int, void*), void *pArg) { \
|
|
dataReady = userCallback; \
|
|
pCallbackArg = pArg; \
|
|
if (setReceiverOnline() == slsDetectorDefs::ONLINE_FLAG) { \
|
|
enableDataStreamingToClient(1); \
|
|
enableDataStreamingFromReceiver(1);}}; \
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/**
|
|
start data processing thread
|
|
*/
|
|
void startThread();
|
|
|
|
/** mutex to synchronize main and data processing threads */
|
|
pthread_mutex_t mp;
|
|
|
|
/** mutex to synchronizedata processing and plotting threads */
|
|
pthread_mutex_t mg;
|
|
|
|
/** mutex to synchronize slsdetector threads */
|
|
pthread_mutex_t ms;
|
|
|
|
int *threadedProcessing;
|
|
|
|
/** sets when the acquisition is finished */
|
|
int jointhread;
|
|
|
|
/** set when detector finishes acquiring */
|
|
int acquiringDone;
|
|
|
|
|
|
/** the data processing thread */
|
|
|
|
pthread_t dataProcessingThread;
|
|
|
|
double *fdata;
|
|
detectorData *thisData;
|
|
|
|
int (*dataReady)(detectorData*,int, int, void*);
|
|
void *pCallbackArg;
|
|
|
|
|
|
private:
|
|
int kbhit(void);
|
|
|
|
|
|
};
|
|
|
|
|
|
#endif
|