Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Member Functions | Public Attributes | Static Public Attributes | Protected Attributes | Private Attributes | List of all members
KM3NETDAQ::JDataWriter Class Reference

Runcontrol client to write data to disk. More...

Inheritance diagram for KM3NETDAQ::JDataWriter:
KM3NETDAQ::JDAQClient

Classes

struct  JRunDB
 Map run number to trigger parameters. More...
 
struct  JValue_t
 Auxiliary data structure for I/O of trigger parameters. More...
 

Public Member Functions

 JDataWriter (const std::string &name, const std::string &server, const std::string &hostname, JLogger *logger, const int level, const std::string &path)
 Constructor. More...
 
virtual void actionInit (int length, const char *buffer)
 
virtual void actionConfigure (int length, const char *buffer)
 
virtual void actionReset (int length, const char *buffer)
 
virtual void actionQuit (int length, const char *buffer)
 
virtual void actionStart (int length, const char *buffer)
 
virtual void actionStop (int length, const char *buffer)
 
virtual void setSelect (JFileDescriptorMask &mask) const
 Set the file descriptor mask for the select call. More...
 
virtual void actionSelect (const JFileDescriptorMask &mask)
 Action method following last select call. More...
 
virtual void actionRunning ()
 This method is repeatedly called when this client machine is in state Running and the clock interval time is non-zero. More...
 
void typeout ()
 Report status of data writing. More...
 
virtual bool enter (const JArgs &args)
 Enter the state machine. More...
 
virtual bool enter ()
 Enter the state machine. More...
 
virtual bool exit ()
 Exit the state machine. More...
 
const std::string & getFullName () const
 Get full name of this run control client. More...
 
const JNET::JTaggetUniqueTag () const
 Get unique tag of this run control client. More...
 
int getEventNumber () const
 Get last event number. More...
 
bool isRunning () const
 Check if this client is in runnig state. More...
 
void replaceEvent (const JNET::JTag &oldTag, const JNET::JTag &newTag, JDAQEvent_t &event)
 Replace tag of given event in event table. More...
 
JDAQEvent_tfindEvent (const JNET::JTag &tag, const std::string &event_name)
 Find event in event table. More...
 
template<class T >
void addParameter (const char option, T &parameter)
 Add parameter to parser used in method enter(). More...
 
template<class T >
void addParameter (const char option, T &parameter, const T &value)
 Add parameter to parser used in method enter(). More...
 
long long int getClockDelay () const
 Get total delay time. More...
 
const std::string & getHostname () const
 Get hostname. More...
 
long long int getClockInterval () const
 Get interval time. More...
 
void setClockInterval (const long long int interval_us)
 Set interval time. More...
 
void resetClock ()
 Reset clock. More...
 
void setSelect ()
 Set the file descriptor mask for the select call. More...
 
virtual void actionInput (int length, const char *buffer)
 This method is called at ev_input. More...
 
virtual bool filter (const std::string &tag, int length, const char *buffer)
 Filter message. More...
 
void run ()
 Run as run control client following command messages via JNET::JControlHost. More...
 
void run (const int port)
 Run for ever. More...
 
void run (std::istream &in)
 Run client with commands from input stream (e.g for debugging). More...
 

Public Attributes

JMeta meta
 meta data More...
 

Static Public Attributes

static const int MAXIMUM_FILE_NUMBER = 100
 maximum file number for overwrite protection. More...
 
static const int TIMEOUT_S = 1
 time out of update [s] More...
 

Protected Attributes

JSharedPointer< JControlHostserver
 message server More...
 
JMessageLogger logger
 message logger More...
 

Private Attributes

JLANG::JSharedPointer
< JControlHost
datawriter
 
std::string path
 
JEEP::JTimer timer
 
Long64_t numberOfEvents
 
long long int numberOfBytes
 
JMessageScheduler logErrorRun
 
JMessageScheduler logErrorFile
 
JMessageScheduler logErrorTag
 
JMessageScheduler logErrorState
 
std::string hostname
 host name of data server More...
 
JTreeWriter_t writer
 TTree writer. More...
 
std::vector< char > buffer
 internal buffer for incoming data More...
 
JRunDB run_db
 

Detailed Description

Runcontrol client to write data to disk.

In state running, this application will write ROOT formatted data from the data filters to disk.

Definition at line 59 of file JDataWriter.cc.

Constructor & Destructor Documentation

KM3NETDAQ::JDataWriter::JDataWriter ( const std::string &  name,
const std::string &  server,
const std::string &  hostname,
JLogger logger,
const int  level,
const std::string &  path 
)
inline

Constructor.

Parameters
namename of client
servername of command message server
hostnamename of data server
loggerpointer to logger
leveldebug level
pathdefault path

Definition at line 73 of file JDataWriter.cc.

78  :
79  JDAQClient(name, server, logger, level),
80  datawriter(),
81  path (path),
83  {
84  replaceEvent(RC_CMD, RC_DWRITER, ev_configure);
85 
86  JControlHost::Throw(true);
87 
88  // map ControlHost tag to TTree writer.
89 
91  }
JDAQClient(const std::string &name)
Constructor.
Definition: JDAQClient.hh:97
std::string hostname
host name of data server
Definition: JDataWriter.cc:393
JTreeWriter_t writer
TTree writer.
Definition: JDataWriter.cc:394
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
Type list.
Definition: JTypeList.hh:22
static const JNET::JTag RC_DWRITER
Definition: JDAQTags.hh:48
void insert()
Insert (list of) data type(s).
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
void replaceEvent(const JNET::JTag &oldTag, const JNET::JTag &newTag, JDAQEvent_t &event)
Replace tag of given event in event table.
Definition: JDAQClient.hh:294
static const JNET::JTag RC_CMD
Definition: JDAQTags.hh:44
JLANG::JSharedPointer< JControlHost > datawriter
Definition: JDataWriter.cc:381
static void Throw(const bool option)
Enable/disable throw option.
Definition: JThrow.hh:37

Member Function Documentation

virtual void KM3NETDAQ::JDataWriter::actionInit ( int  length,
const char *  buffer 
)
inlinevirtual

Definition at line 94 of file JDataWriter.cc.

95  {
96  using namespace std;
97  using namespace JPP;
98 
99  // start server
100 
101  try {
102 
103  datawriter.reset(new JControlHost(hostname));
104 
105  JSubscriptionList buffer;
106 
107  for (JTreeWriter_t::iterator i = writer.begin(); i != writer.end(); ++i) {
108  buffer.add(JSubscriptionAll(i->first));
109  }
110 
111  buffer.add(JSubscriptionAll(IO_TRIGGER_PARAMETERS));
112 
113  datawriter->Subscribe(buffer);
114  datawriter->SendMeAlways();
115 
116  JNoticeStream(logger) << "Established connection to " << hostname;
117  }
118  catch(const JControlHostException& exception) {
119  JErrorStream(logger) << exception;
120  }
121  }
std::vector< char > buffer
internal buffer for incoming data
Definition: JDataWriter.cc:395
std::string hostname
host name of data server
Definition: JDataWriter.cc:393
static const JNET::JTag IO_TRIGGER_PARAMETERS
Definition: JDAQTags.hh:66
JTreeWriter_t writer
TTree writer.
Definition: JDataWriter.cc:394
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
JLANG::JSharedPointer< JControlHost > datawriter
Definition: JDataWriter.cc:381
virtual void KM3NETDAQ::JDataWriter::actionConfigure ( int  length,
const char *  buffer 
)
inlinevirtual

Definition at line 124 of file JDataWriter.cc.

125  {
126  using namespace std;
127 
128  long long int logger_s = 5;
129  long long int update_s = 10;
130 
131  JProperties properties(JEquationParameters("=", ";", "", ""));
132 
133  properties["path"] = path;
134  properties["update_s"] = update_s;
135  properties["logger_s"] = logger_s;
136 
137  properties.read(string(buffer, length));
138 
139  if (path == "") path = "./";
140  if (update_s <= 0) update_s = 1;
141  if (logger_s <= 0) logger_s = 1;
142 
143  setClockInterval(update_s * 1000000LL);
144 
145  JDebugStream(logger) << "Path <" << path << ">";
146  JDebugStream(logger) << "Update period [s] " << update_s;
147 
148  logErrorRun = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
149  logErrorFile = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
150  logErrorTag = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
151  logErrorState = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
152 
153  numberOfEvents = 0;
154  numberOfBytes = 0;
155  }
std::vector< char > buffer
internal buffer for incoming data
Definition: JDataWriter.cc:395
JMessageScheduler logErrorState
Definition: JDataWriter.cc:391
Utility class to parse parameter values.
Definition: JProperties.hh:484
void setClockInterval(const long long int interval_us)
Set interval time.
Definition: JDAQClient.hh:385
Simple data structure to support I/O of equations (see class JLANG::JEquation).
long long int numberOfBytes
Definition: JDataWriter.cc:386
JMessageScheduler logErrorRun
Definition: JDataWriter.cc:388
JMessageScheduler logErrorFile
Definition: JDataWriter.cc:389
JMessageScheduler logErrorTag
Definition: JDataWriter.cc:390
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
virtual void KM3NETDAQ::JDataWriter::actionReset ( int  length,
const char *  buffer 
)
inlinevirtual

Definition at line 158 of file JDataWriter.cc.

159  {
160  datawriter.reset();
161  }
JLANG::JSharedPointer< JControlHost > datawriter
Definition: JDataWriter.cc:381
virtual void KM3NETDAQ::JDataWriter::actionQuit ( int  length,
const char *  buffer 
)
inlinevirtual

Definition at line 164 of file JDataWriter.cc.

165  {}
virtual void KM3NETDAQ::JDataWriter::actionStart ( int  length,
const char *  buffer 
)
inlinevirtual

Definition at line 168 of file JDataWriter.cc.

169  {
170  using namespace std;
171  using namespace JPP;
172 
173  JNoticeStream(logger) << string(buffer, length);
174 
175  ostringstream os;
176 
177  for (int i = 0; !writer.is_open() && i != MAXIMUM_FILE_NUMBER; ++i) {
178 
179  os.str("");
180 
181  os << path << '/'
182  << "KM3NeT"
183  << "_" << setw(8) << setfill('0') << getDetectorID()
184  << "_" << setw(8) << setfill('0') << getRunNumber();
185 
186  if (i != 0) {
187  os << "_" << i;
188  }
189 
190  os << ".root";
191 
192  try {
193  writer.open(os.str().c_str());
194  }
195  catch(JException& exception) {
196  JErrorStream(logger) << exception;
197  }
198  }
199 
200  if (writer.is_open())
201  JNoticeStream(logger) << "Output file " << os.str();
202  else
203  JErrorStream (logger) << "File not opened " << os.str();
204 
205  numberOfEvents = 0;
206  numberOfBytes = 0;
207 
209 
210  timer.reset();
211 
212  logErrorRun .reset();
213  logErrorFile .reset();
214  logErrorTag .reset();
216 
217  run_db.reset(getRunNumber());
218  }
std::vector< char > buffer
internal buffer for incoming data
Definition: JDataWriter.cc:395
static const int MAXIMUM_FILE_NUMBER
maximum file number for overwrite protection.
Definition: JDataWriter.cc:377
void reset(const int run)
Remove all entries before given run.
Definition: JDataWriter.cc:427
JMessageScheduler logErrorState
Definition: JDataWriter.cc:391
JTreeWriter_t writer
TTree writer.
Definition: JDataWriter.cc:394
long long int numberOfBytes
Definition: JDataWriter.cc:386
void reset()
Reset timer.
Definition: JTimer.hh:76
JMessageScheduler logErrorRun
Definition: JDataWriter.cc:388
TFile * getFile() const
Get file.
Definition: JRootFile.hh:65
JMessageScheduler logErrorFile
Definition: JDataWriter.cc:389
virtual void open(const char *file_name)
Open file.
JMessageScheduler logErrorTag
Definition: JDataWriter.cc:390
JMeta meta
meta data
Definition: JDataWriter.cc:375
virtual bool is_open() const
Check is file is open.
Definition: JRootFile.hh:76
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
bool putObject(TDirectory *dir, const T &object)
Write object to ROOT directory.
virtual void KM3NETDAQ::JDataWriter::actionStop ( int  length,
const char *  buffer 
)
inlinevirtual

Definition at line 221 of file JDataWriter.cc.

222  {
223  typeout();
224 
225  if (timer.usec_wall > 0) {
226  JNoticeStream(logger) << "I/O " << (int) (numberOfBytes / timer.usec_wall) << " MB/s";
227  }
228 
229  if (!run_db.is_written(getRunNumber())) {
230  JErrorStream(logger) << "No trigger parameters written for run " << getRunNumber();
231  }
232 
233  writer.close();
234 
235  // Release resources.
236 
238 
239  this->buffer.swap(null);
240  }
std::vector< char > buffer
internal buffer for incoming data
Definition: JDataWriter.cc:395
virtual void close()
Close file.
JTreeWriter_t writer
TTree writer.
Definition: JDataWriter.cc:394
bool is_written(const int run) const
Check if trigger parameters have been written for given run.
Definition: JDataWriter.cc:440
long long int numberOfBytes
Definition: JDataWriter.cc:386
void typeout()
Report status of data writing.
Definition: JDataWriter.cc:365
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
static JNullStream null
Null I/O stream.
Definition: JNullStream.hh:51
unsigned long long usec_wall
Definition: JTimer.hh:224
virtual void KM3NETDAQ::JDataWriter::setSelect ( JFileDescriptorMask mask) const
inlinevirtual

Set the file descriptor mask for the select call.

This implementation does nothing but may be redefined by the derived class.

Parameters
maskfile descriptor mask

Reimplemented from KM3NETDAQ::JDAQClient.

Definition at line 243 of file JDataWriter.cc.

244  {
245  if (datawriter.is_valid()) {
246  mask.set(*datawriter);
247  }
248  }
JLANG::JSharedPointer< JControlHost > datawriter
Definition: JDataWriter.cc:381
virtual void KM3NETDAQ::JDataWriter::actionSelect ( const JFileDescriptorMask mask)
inlinevirtual

Action method following last select call.

This implementation does nothing but may be redefined by the derived class.

Parameters
maskfile descriptor mask

Reimplemented from KM3NETDAQ::JDAQClient.

Definition at line 251 of file JDataWriter.cc.

252  {
253  using namespace std;
254  using namespace JPP;
255 
256  if (datawriter.is_valid() && mask.has(*datawriter)) {
257 
258  try {
259 
260  JPrefix prefix;
261 
262  datawriter->WaitHead(prefix);
263 
264  timer.start();
265 
266  buffer.resize(prefix.getSize());
267 
268  datawriter->GetFullData(buffer.data(), buffer.size());
269 
270 
271  if (prefix.getTag() == IO_TRIGGER_PARAMETERS) {
272 
273  const string __str__(buffer.data(), buffer.size());
274 
275  istringstream in(__str__);
276 
277  if (!run_db.read(in)) {
278 
279  JErrorStream(logger) << "Fatal error reading trigger parameters " << __str__;
280 
281  ev_error();
282  }
283  }
284 
285 
286  if (isRunning()) {
287 
288  // Write trigger parameters for current run if not yet done
289 
290  run_db.write(getRunNumber(), writer.getFile());
291 
292  JTreeWriter_t::iterator i = writer.find(prefix.toString());
293 
294  if (i != writer.end()) {
295 
296  TFile* out = i->second->GetCurrentFile();
297 
298  if (out != NULL && out->IsOpen()) {
299 
300  JDAQPreamble preamble;
301  JDAQHeader header;
302 
303  JByteArrayReader in(buffer.data(), buffer.size());
304 
305  in >> preamble >> header;
306 
307  in.seekg(0); // rewind
308 
309  if (header.getRunNumber() == getRunNumber()) {
310 
311  const Int_t nb = i->second->copy(in);
312 
313  if (nb < (int) buffer.size() || in.tellg() != (int) buffer.size()) {
314  JWarningStream(logger) << "Inconsistency at copy of "
315  << prefix.toString() << ' '
316  << buffer.size() << ' '
317  << in.tellg() << ' '
318  << nb;
319  }
320 
321  if (prefix.getTag() == IO_EVENT)
322  numberOfEvents += 1;
323  numberOfBytes += buffer.size();
324 
325  if (prefix.getTag() == IO_EVENT && numberOfEvents == 1) {
326  typeout();
327  }
328 
329  } else {
330  JErrorStream(logErrorRun) << "Inconsistent run number "
331  << header.getRunNumber()
332  << " != "
333  << getRunNumber();
334  }
335  } else {
336  JErrorStream(logErrorFile) << "Output file not open";
337  }
338  } else {
339  if (prefix.getTag() != IO_TRIGGER_PARAMETERS) {
340  JErrorStream(logErrorTag) << "Unknown tag <" << prefix.toString() << ">, no data written";
341  }
342  }
343  } else {
344  JErrorStream(logErrorState) << "Not in running state <" << prefix.toString() << ">, no data written";
345  }
346 
347  timer.stop();
348  }
349  catch(const JControlHostException& exception) {
350  JErrorStream(logger) << exception;
351  }
352  }
353  }
std::vector< char > buffer
internal buffer for incoming data
Definition: JDataWriter.cc:395
JMessageScheduler logErrorState
Definition: JDataWriter.cc:391
static const JNET::JTag IO_TRIGGER_PARAMETERS
Definition: JDAQTags.hh:66
JTreeWriter_t writer
TTree writer.
Definition: JDataWriter.cc:394
void stop()
Stop timer.
Definition: JTimer.hh:113
long long int numberOfBytes
Definition: JDataWriter.cc:386
JMessageScheduler logErrorRun
Definition: JDataWriter.cc:388
TFile * getFile() const
Get file.
Definition: JRootFile.hh:65
JMessageScheduler logErrorFile
Definition: JDataWriter.cc:389
JMessageScheduler logErrorTag
Definition: JDataWriter.cc:390
bool isRunning() const
Check if this client is in runnig state.
Definition: JDAQClient.hh:281
void write(const int run, TFile *file)
Write trigger parameters for given run if not yet done.
Definition: JDataWriter.cc:484
void typeout()
Report status of data writing.
Definition: JDataWriter.cc:365
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
static const JNET::JTag IO_EVENT
Definition: JDAQTags.hh:64
JLANG::JSharedPointer< JControlHost > datawriter
Definition: JDataWriter.cc:381
void start()
Start timer.
Definition: JTimer.hh:89
bool read(std::istream &in)
Read trigger parameters.
Definition: JDataWriter.cc:453
virtual void KM3NETDAQ::JDataWriter::actionRunning ( )
inlinevirtual

This method is repeatedly called when this client machine is in state Running and the clock interval time is non-zero.

This implementation does nothing but may be redefined by the derived class. Care has to be taken so that the time needed to execute this method should be less than the specified clock interval time (see method setClockInterval()).

Reimplemented from KM3NETDAQ::JDAQClient.

Definition at line 356 of file JDataWriter.cc.

357  {
358  typeout();
359  }
void typeout()
Report status of data writing.
Definition: JDataWriter.cc:365
void KM3NETDAQ::JDataWriter::typeout ( )
inline

Report status of data writing.

Definition at line 365 of file JDataWriter.cc.

366  {
367  std::ostringstream message;
368 
370 
371  logger.typeout(RC_LOG, message.str());
372  logger.status(message.str());
373  }
void status(const JMessage_t &message)
long long int numberOfBytes
Definition: JDataWriter.cc:386
static const JNET::JTag RC_LOG
Definition: JDAQTags.hh:49
char getTokenDelimeter()
Get the token delimeter for command messages.
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
virtual void typeout(const std::string &tag, const std::string &message)
Report message.
const std::string & getFullName() const
Get full name of this run control client.
Definition: JDAQClient.hh:248
virtual bool KM3NETDAQ::JDAQClient::enter ( const JArgs args)
inlinevirtualinherited

Enter the state machine.

This overloaded method enter reproduces the constructor. All necessary input is parsed from the list of arguments. In case of an error, the state machine is not entered.

Parameters
argsarray of command line arguments

Definition at line 143 of file JDAQClient.hh.

144  {
145  using namespace std;
146 
147  string server;
148  string logger;
149  int level;
150  bool use_cout;
151 
152  try {
153 
154  parser['H'] = make_field(server) = "localhost";
155  parser['M'] = make_field(logger) = "localhost";
156  parser['d'] = make_field(level) = 0;
157  parser['c'] = make_field(use_cout);
158 
159  if (parser.read(args) != 0) {
160  return false;
161  }
162  }
163  catch(const exception &error) {
164  cerr << error.what() << endl;
165  return false;
166  }
167 
168  try {
169 
170  JLogger* out = NULL;
171 
172  if (use_cout)
173  out = new JStreamLogger(cout);
174  else
175  out = new JControlHostLogger(logger);
176 
177  this->logger = JMessageLogger(out, getName(), level);
178 
179  this->server.reset(new JControlHost(server));
180 
181  return enter();
182  }
183  catch(const JControlHostException& error) {
184  cerr << error << endl;
185  return false;
186  }
187  }
JParser parser
parser method enter()
Definition: JDAQClient.hh:834
ControlHost class.
Message logging based on std::ostream.
Interface for logging messages.
Definition: JLogger.hh:22
Message logging based on ControlHost.
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1836
virtual bool enter()
Enter the state machine.
Definition: JDAQClient.hh:195
Exception for ControlHost.
Definition: JException.hh:432
int read(const int argc, const char *const argv[])
Parse the program&#39;s command line options.
Definition: JParser.hh:1673
const char * getName()
Get ROOT name of given data type.
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
virtual bool KM3NETDAQ::JDAQClient::enter ( )
inlinevirtualinherited

Enter the state machine.

This method activates the subscription to JNET::JControlHost messages. In case of an error, the state machine is not entered.

Reimplemented in KM3NETDAQ::JDAQDriver.

Definition at line 195 of file JDAQClient.hh.

196  {
197  using namespace std;
198 
199  if (server.is_valid() && logger.is_valid()) {
200 
201  try {
202 
203  server->Subscribe(getSubscription(eventTable));
204  server->SendMeAlways();
205  server->MyId(getFullName());
206 
207  return CHSM::machine::enter();
208  }
209  catch(const JControlHostException& error) {
210  JErrorStream(logger) << error;
211  }
212 
213  } else {
214  cerr << "Message server or logger not properly initialised." << endl;
215  }
216 
217  return false;
218  }
JNET::JSubscriptionList getSubscription(const JEventTable &event_table)
Convert event table to ControlHost subscription.
Definition: JEventTable.hh:125
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
Exception for ControlHost.
Definition: JException.hh:432
bool is_valid() const
Check validity of logger object.
JEventTable eventTable
event table
Definition: JDAQClient.hh:828
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
const std::string & getFullName() const
Get full name of this run control client.
Definition: JDAQClient.hh:248
virtual bool KM3NETDAQ::JDAQClient::exit ( )
inlinevirtualinherited

Exit the state machine.

This method releases the various resources.

Definition at line 225 of file JDAQClient.hh.

226  {
227  try {
228  if (server.is_valid()) server.reset(NULL);
229  }
230  catch(const JControlHostException& error) {
231  }
232 
233  try {
234  if (logger.is_valid()) logger.reset(NULL);
235  }
236  catch(const JControlHostException& error) {
237  }
238 
239  return CHSM::machine::exit();
240  }
void reset(JLogger *__logger=NULL)
Reset logger.
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
Exception for ControlHost.
Definition: JException.hh:432
bool is_valid() const
Check validity of logger object.
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
const std::string& KM3NETDAQ::JDAQClient::getFullName ( ) const
inlineinherited

Get full name of this run control client.

Returns
full name

Definition at line 248 of file JDAQClient.hh.

249  {
250  return full_name;
251  }
std::string full_name
Definition: JDAQClient.hh:830
const JNET::JTag& KM3NETDAQ::JDAQClient::getUniqueTag ( ) const
inlineinherited

Get unique tag of this run control client.

Returns
unique tag

Definition at line 259 of file JDAQClient.hh.

260  {
261  return unique_tag;
262  }
int KM3NETDAQ::JDAQClient::getEventNumber ( ) const
inlineinherited

Get last event number.

Returns
event number

Definition at line 270 of file JDAQClient.hh.

271  {
272  return event_number;
273  }
int event_number
number of last event
Definition: JDAQClient.hh:835
bool KM3NETDAQ::JDAQClient::isRunning ( ) const
inlineinherited

Check if this client is in runnig state.

Returns
true if running; else false

Definition at line 281 of file JDAQClient.hh.

282  {
283  return Main.RunControl.Operational.Running.active();
284  }
void KM3NETDAQ::JDAQClient::replaceEvent ( const JNET::JTag oldTag,
const JNET::JTag newTag,
JDAQEvent_t event 
)
inlineinherited

Replace tag of given event in event table.

Parameters
oldTagold tag
newTagnew tag
eventevent

Definition at line 294 of file JDAQClient.hh.

297  {
298  eventTable.replace(oldTag, newTag, event);
299  }
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
JEventTable eventTable
event table
Definition: JDAQClient.hh:828
void replace(const JNET::JTag &oldTag, const JNET::JTag &newTag, JDAQEvent_t &event)
Replace entry in table.
Definition: JEventTable.hh:93
JDAQEvent_t* KM3NETDAQ::JDAQClient::findEvent ( const JNET::JTag tag,
const std::string &  event_name 
)
inlineinherited

Find event in event table.

Parameters
tagtag
event_nameevent name
Returns
pointer to event or NULL

Definition at line 309 of file JDAQClient.hh.

310  {
311  JEventTable::const_iterator i = eventTable.find(tag, event_name);
312 
313  if (i != eventTable.end())
314  return i->second;
315  else
316  return NULL;
317  }
const_iterator find(const JNET::JTag &tag, const std::string &event_name) const
Find entry.
Definition: JEventTable.hh:112
JEventTable eventTable
event table
Definition: JDAQClient.hh:828
template<class T >
void KM3NETDAQ::JDAQClient::addParameter ( const char  option,
T &  parameter 
)
inlineinherited

Add parameter to parser used in method enter().

Parameters
optionoption
parameterparameter

Definition at line 327 of file JDAQClient.hh.

328  {
329  parser[option] = make_field(parameter);
330  }
JParser parser
parser method enter()
Definition: JDAQClient.hh:834
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1836
template<class T >
void KM3NETDAQ::JDAQClient::addParameter ( const char  option,
T &  parameter,
const T &  value 
)
inlineinherited

Add parameter to parser used in method enter().

Parameters
optionoption
parameterparameter
valuedefault value

Definition at line 341 of file JDAQClient.hh.

342  {
343  parser[option] = make_field(parameter) = value;
344  }
JParser parser
parser method enter()
Definition: JDAQClient.hh:834
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1836
long long int KM3NETDAQ::JDAQClient::getClockDelay ( ) const
inlineinherited

Get total delay time.

Returns
delay time [us]

Definition at line 352 of file JDAQClient.hh.

353  {
354  return clock.getDelay();
355  }
long long int getDelay() const
Get total delay time.
Definition: JTimekeeper.hh:78
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
const std::string& KM3NETDAQ::JDAQClient::getHostname ( ) const
inlineinherited

Get hostname.

Returns
host name

Definition at line 363 of file JDAQClient.hh.

364  {
365  return hostname;
366  }
std::string hostname
Definition: JDAQClient.hh:829
long long int KM3NETDAQ::JDAQClient::getClockInterval ( ) const
inlineinherited

Get interval time.

Returns
interval time [us]

Definition at line 374 of file JDAQClient.hh.

375  {
376  return clock.getInterval();
377  }
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
long long int getInterval() const
Get interval time.
Definition: JTimekeeper.hh:67
void KM3NETDAQ::JDAQClient::setClockInterval ( const long long int  interval_us)
inlineinherited

Set interval time.

Parameters
interval_usinterval time [us]

Definition at line 385 of file JDAQClient.hh.

386  {
387  clock.setInterval(interval_us);
388  }
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
void setInterval(const long long int interval_us)
Set interval time.
Definition: JTimekeeper.hh:89
void KM3NETDAQ::JDAQClient::resetClock ( )
inlineinherited

Reset clock.

Definition at line 394 of file JDAQClient.hh.

395  {
396  clock.reset();
397  }
void reset(const long long int t0)
Reset time.
Definition: JTimekeeper.hh:100
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
void KM3NETDAQ::JDAQClient::setSelect ( )
inlineinherited

Set the file descriptor mask for the select call.

Definition at line 403 of file JDAQClient.hh.

404  {
405  select.reset();
406 
408 
410  }
JSelectReader select
select call
Definition: JDAQClient.hh:833
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
JFileDescriptorMask & getReaderMask()
Get reader mask.
void setReaderMask(const JAbstractFile &file)
Set reader mask.
void reset()
Reset.
void setSelect()
Set the file descriptor mask for the select call.
Definition: JDAQClient.hh:403
virtual void KM3NETDAQ::JDAQClient::actionInput ( int  length,
const char *  buffer 
)
inlinevirtualinherited

This method is called at ev_input.

Parameters
lengthlength of data
bufferpointer to data

Reimplemented in AcousticDataFilter.

Definition at line 450 of file JDAQClient.hh.

451  {
452  using namespace std;
453 
454  JProperties properties(JEquationParameters("=", ";", "", ""), 1);
455 
456  int level = this->logger.getLevel();
457 
458  properties["debug"] = level;
459 
460  properties.read(string(buffer, length));
461 
462  this->logger.setLevel(level);
463  }
Utility class to parse parameter values.
Definition: JProperties.hh:484
Simple data structure to support I/O of equations (see class JLANG::JEquation).
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
void setLevel(const int __level)
Set debug level.
JLevel_t getLevel()
Get debug level.
virtual bool KM3NETDAQ::JDAQClient::filter ( const std::string &  tag,
int  length,
const char *  buffer 
)
inlinevirtualinherited

Filter message.

The filter method can be overloaded so that a specific action is made before the corresponding message is processed by the state machine. The message is ignored if true is returned, else it is normally processed.

Parameters
tagtag
lengthnumber of characters
buffermessage
Returns
skip message or not

Definition at line 477 of file JDAQClient.hh.

478  {
479  return false;
480  }
void KM3NETDAQ::JDAQClient::run ( )
inlineinherited

Run as run control client following command messages via JNET::JControlHost.

This method can be called once the state machine is entered. It returns when the state machine is exited. If the clock interval is non-zero, the method actionRunning() is repeatedly called when this client machine is in state Running. The file descriptor mask can be set to interrupt the timeout of the select call and clock method wait() in this calling sequence (see methods setSelect() and actionSelect()).

Definition at line 493 of file JDAQClient.hh.

494  {
495  using namespace std;
496 
497  while (active()) {
498 
499  try {
500 
501  setSelect();
502 
503  if (select(JTimeval(TIMEOUT_S,0)) > 0) {
504 
505  if (select.hasReaderMask(*server)) {
506  update();
507  }
508 
510 
511  } else {
512 
513  continue;
514  }
515 
516 
517  if (isRunning() && clock.getInterval() != 0LL) {
518 
519  long long int numberOfCalls = 0;
520 
521  clock.reset();
522 
523  do {
524 
525  ++numberOfCalls;
526 
527  setSelect();
528 
529  if (clock.wait(select.getReaderMask())) {
530 
531  if (select.hasReaderMask(*server)) {
532  update();
533  }
534 
536 
537  } else {
538 
539  try {
540  actionRunning();
541  }
542  catch(const exception& error) {
543  logger.error(error.what());
544  }
545  }
546 
547  } while (isRunning());
548 
549  if (numberOfCalls != 0) {
550  JNoticeStream(logger) << "Delay per call " << clock.getDelay() / numberOfCalls / 1000 << " ms";
551  }
552  }
553  }
554  catch(const exception& error) {
555  JErrorStream(logger) << "method run(): " << error.what();
556  }
557  }
558  }
long long int getDelay() const
Get total delay time.
Definition: JTimekeeper.hh:78
JSelectReader select
select call
Definition: JDAQClient.hh:833
void reset(const long long int t0)
Reset time.
Definition: JTimekeeper.hh:100
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
JFileDescriptorMask & getReaderMask()
Get reader mask.
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
void wait() const
Wait until the number of time intervals has elapsed since the last call to the reset method...
Definition: JTimekeeper.hh:145
Auxiliary class for time values.
Definition: JTimeval.hh:26
virtual void actionRunning()
This method is repeatedly called when this client machine is in state Running and the clock interval ...
Definition: JDAQClient.hh:440
bool isRunning() const
Check if this client is in runnig state.
Definition: JDAQClient.hh:281
void update()
Update state machine.
Definition: JDAQClient.hh:643
long long int getInterval() const
Get interval time.
Definition: JTimekeeper.hh:67
static const int TIMEOUT_S
time out of update [s]
Definition: JDAQClient.hh:631
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
void error(const JMessage_t &message)
void setSelect()
Set the file descriptor mask for the select call.
Definition: JDAQClient.hh:403
virtual void actionSelect(const JFileDescriptorMask &mask)
Action method following last select call.
Definition: JDAQClient.hh:429
bool hasReaderMask(const JAbstractFile &file) const
Has reader file.
void KM3NETDAQ::JDAQClient::run ( const int  port)
inlineinherited

Run for ever.

This method can be used when the run control client is started before the run control (e.g. at boot time of the host processor). This method should be called before the state machine is entered. It launches a server which accepts a JNET::JControlHost connection from a designated application e.g. the JDAQClientStarter.cc program. The state machine is entered using the available data in the JNET::JControlHost message. After the state machine is exited, it accepts a new a JNET::JControlHost connection.

Parameters
portport number

Definition at line 573 of file JDAQClient.hh.

574  {
576 
577  for ( ; ; ) {
578 
579  JControlHost* ps = server.AcceptClient();
580 
581  ps->Connected();
582 
583  JNET::JPrefix prefix;
584 
585  ps->WaitHead(prefix);
586 
587  const int length = prefix.getSize();
588 
589  char* buffer = new char[length];
590 
591  ps->GetFullData(buffer, length);
592  ps->PutFullData(prefix.toString(), buffer, length);
593 
594  delete ps;
595 
596  enter(JArgs(std::string(buffer, length)));
597 
598  delete [] buffer;
599 
600  run();
601 
602  exit();
603  }
604  }
ControlHost prefix.
Definition: JPrefix.hh:31
ControlHost class.
int Connected()
Send version.
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
void run()
Run as run control client following command messages via JNET::JControlHost.
Definition: JDAQClient.hh:493
int getSize() const
Get size.
Definition: JPrefix.hh:63
virtual bool enter()
Enter the state machine.
Definition: JDAQClient.hh:195
virtual bool exit()
Exit the state machine.
Definition: JDAQClient.hh:225
int WaitHead(JPrefix &prefix)
Wait for header.
std::string toString() const
Convert tag to string.
Definition: JTag.hh:167
int GetFullData(void *buffer, int length)
Receive data.
Light-weight wrapper class around server socket.
int PutFullData(const JTag &tag, const void *buffer, const int length)
Send data.
void KM3NETDAQ::JDAQClient::run ( std::istream &  in)
inlineinherited

Run client with commands from input stream (e.g for debugging).

Example input format:

<tag> <event name>[#data];
<tag> <event name>[#data];
Parameters
ininput stream

Definition at line 618 of file JDAQClient.hh.

619  {
620  using std::string;
621 
622  string tag;
623  string buffer;
624 
625  while (in >> tag && getline(in, buffer, ';')) {
626  update(tag, buffer.length(), buffer.data());
627  }
628  }
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Definition: JString.hh:468
void update()
Update state machine.
Definition: JDAQClient.hh:643

Member Data Documentation

JMeta KM3NETDAQ::JDataWriter::meta

meta data

Definition at line 375 of file JDataWriter.cc.

const int KM3NETDAQ::JDataWriter::MAXIMUM_FILE_NUMBER = 100
static

maximum file number for overwrite protection.

Definition at line 377 of file JDataWriter.cc.

JLANG::JSharedPointer<JControlHost> KM3NETDAQ::JDataWriter::datawriter
private

Definition at line 381 of file JDataWriter.cc.

std::string KM3NETDAQ::JDataWriter::path
private

Definition at line 382 of file JDataWriter.cc.

JEEP::JTimer KM3NETDAQ::JDataWriter::timer
private

Definition at line 384 of file JDataWriter.cc.

Long64_t KM3NETDAQ::JDataWriter::numberOfEvents
private

Definition at line 385 of file JDataWriter.cc.

long long int KM3NETDAQ::JDataWriter::numberOfBytes
private

Definition at line 386 of file JDataWriter.cc.

JMessageScheduler KM3NETDAQ::JDataWriter::logErrorRun
private

Definition at line 388 of file JDataWriter.cc.

JMessageScheduler KM3NETDAQ::JDataWriter::logErrorFile
private

Definition at line 389 of file JDataWriter.cc.

JMessageScheduler KM3NETDAQ::JDataWriter::logErrorTag
private

Definition at line 390 of file JDataWriter.cc.

JMessageScheduler KM3NETDAQ::JDataWriter::logErrorState
private

Definition at line 391 of file JDataWriter.cc.

std::string KM3NETDAQ::JDataWriter::hostname
private

host name of data server

Definition at line 393 of file JDataWriter.cc.

JTreeWriter_t KM3NETDAQ::JDataWriter::writer
private

TTree writer.

Definition at line 394 of file JDataWriter.cc.

std::vector<char> KM3NETDAQ::JDataWriter::buffer
private

internal buffer for incoming data

Definition at line 395 of file JDataWriter.cc.

JRunDB KM3NETDAQ::JDataWriter::run_db
private

Definition at line 500 of file JDataWriter.cc.

const int KM3NETDAQ::JDAQClient::TIMEOUT_S = 1
staticinherited

time out of update [s]

Definition at line 631 of file JDAQClient.hh.

JSharedPointer<JControlHost> KM3NETDAQ::JDAQClient::server
protectedinherited

message server

Definition at line 635 of file JDAQClient.hh.

JMessageLogger KM3NETDAQ::JDAQClient::logger
protectedinherited

message logger

Definition at line 636 of file JDAQClient.hh.


The documentation for this class was generated from the following file: