Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HDEVIOWriter.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: HDEVIOWriter.h
4 //
5 
6 #ifndef _HDEVIOWriter_
7 #define _HDEVIOWriter_
8 
9 #include <pthread.h>
10 
11 #include <string>
12 #include <vector>
13 using namespace std;
14 
15 
16 #include <deque>
17 using namespace std;
18 
19 
20 #ifdef HAVE_ET
21 //#include <evioETChannel.hxx>
22 #include <et.h>
23 #endif // HAVE_ET
24 
25 #include <JANA/jerror.h>
26 
27 // C-style wrapper
28 void* HDEVIOOutputThread(void *l3out);
29 
31  public:
32 
36  kETSink
37  };
38 
39  HDEVIOWriter(string sink_name);
40  virtual ~HDEVIOWriter();
41 
42  void* HDEVIOOutputThread(void);
43  vector<uint32_t>* GetBufferFromPool(void);
44  void ReturnBufferToPool(vector<uint32_t> *buff);
45  void AddBufferToOutput(vector<uint32_t> *buff);
46  void FlushOutput(uint32_t Nwords, deque< vector<uint32_t>* > &my_output_deque);
47  void Quit(void);
48 
49  protected:
50 
51  void ConnectToET(string sink_name);
52 
53 
54  bool quit;
55 
56  // Manage list of buffers for output
57  uint32_t MAX_OUTPUT_QUEUE_SIZE; // in number of buffers (=events)
58  uint32_t MAX_OUTPUT_BUFFER_SIZE; // in 32bit words in the EVIO block
59  uint32_t MAX_HOLD_TIME; // in seconds
62 
63  deque< vector<uint32_t>* > output_deque;
64  pthread_mutex_t output_deque_mutex;
65 
66  // Single event buffer pool. Used by JEventProcessor_L3proc
67  pthread_mutex_t buff_pool_mutex;
68  vector< vector<uint32_t>* > buff_pool;
69 
70  // Output buffer for EVIO block
71  vector<uint32_t> output_block;
72 
73  ofstream *evioout;
74  ofstream *ofs_debug_output;
78 
79 #ifdef HAVE_ET
80  et_sys_id sys_id;
81  et_att_id att_id;
82 #endif
83 };
84 
85 #endif // _HDEVIOWriter_
86 
void * HDEVIOOutputThread(void *evioout)
uint32_t MAX_HOLD_TIME
Definition: HDEVIOWriter.h:59
pthread_mutex_t output_deque_mutex
Definition: HDEVIOWriter.h:64
uint32_t MAX_OUTPUT_BUFFER_SIZE
Definition: HDEVIOWriter.h:58
vector< uint32_t > output_block
Definition: HDEVIOWriter.h:71
pthread_mutex_t buff_pool_mutex
Definition: HDEVIOWriter.h:67
ofstream * evioout
Definition: HDEVIOWriter.h:73
EVIOSinkType sink_type
Definition: HDEVIOWriter.h:75
uint32_t blocks_written_to_output
Definition: HDEVIOWriter.h:77
uint32_t NEVENTS_PER_BLOCK
Definition: HDEVIOWriter.h:60
bool DEBUG_FILES
Definition: HDEVIOWriter.h:61
uint32_t events_written_to_output
Definition: HDEVIOWriter.h:76
uint32_t MAX_OUTPUT_QUEUE_SIZE
Definition: HDEVIOWriter.h:57
ofstream * ofs_debug_output
Definition: HDEVIOWriter.h:74
deque< vector< uint32_t > * > output_deque
Definition: HDEVIOWriter.h:63
vector< vector< uint32_t > * > buff_pool
Definition: HDEVIOWriter.h:68