9 #ifndef _JEventSource_EVIO_
10 #define _JEventSource_EVIO_
24 #include <JANA/jerror.h>
25 #include <JANA/JEventSource.h>
26 #include <JANA/JEvent.h>
27 #include <JANA/JFactory.h>
28 #include <JANA/JStreamLog.h>
35 #include <evioUtil.hxx>
39 typedef pair<int,int>
tagNum;
181 virtual const char*
className(
void){
return static_className();}
184 jerror_t GetEvent(jana::JEvent &event);
185 void FreeEvent(jana::JEvent &event);
186 jerror_t GetObjects(jana::JEvent &event, jana::JFactory_base *factory);
190 inline double GetTime(
void);
191 void ReadOptionalModuleTypeTranslation(
void);
192 uint32_t* GetPoolBuffer(
void);
193 virtual jerror_t ReadEVIOEvent(uint32_t* &buf);
194 inline void GetEVIOBuffer(jana::JEvent &jevent, uint32_t* &buff, uint32_t &
size)
const;
205 inline evioDOMTree* GetEVIODOMTree(jana::JEvent &jevent)
const;
210 void ConnectToET(
const char* source_name);
319 ObjList():run_number(0),own_objects(true),eviobuff_parsed(false)
320 ,eviobuff(NULL),eviobuff_size(0),DOMTree(NULL)
321 ,time_evio_read(0),time_dom_tree(0),time_evio_parse(0){}
374 void CopyBOR(JEventLoop *loop, map<
string, vector<JObject*> > &hit_objs_by_type);
375 void AddSourceObjectsToCallStack(JEventLoop *loop,
string className);
376 void AddEmulatedObjectsToCallStack(JEventLoop *loop,
string caller,
string callee);
377 void EmulateDf250Firmware(JEvent &event, vector<JObject*> &wrd_objs, vector<JObject*> &pt_objs, vector<JObject*> &pp_objs, vector<JObject*> &pi_objs);
378 void EmulateDf125Firmware(JEvent &event, vector<JObject*> &wrd_objs, vector<JObject*> &cp_objs, vector<JObject*> &fp_objs);
380 jerror_t ParseEvents(
ObjList *objs_ptr);
381 int32_t FindRunNumber(uint32_t *iptr);
382 int32_t EpicQuestForRunNumber(
void);
384 void FindEventType(uint32_t *iptr, JEvent &event);
385 MODULE_TYPE GuessModuleType(
const uint32_t *istart,
const uint32_t *iend);
386 bool IsF250ADC(
const uint32_t *istart,
const uint32_t *iend);
387 bool IsF1TDC(
const uint32_t *istart,
const uint32_t *iend);
389 void DumpBinary(
const uint32_t *iptr,
const uint32_t *iend=NULL, uint32_t MaxWords=0,
const uint32_t *imark=NULL);
391 void MergeObjLists(list<ObjList*> &events1, list<ObjList*> &events2);
394 int32_t GetRunNumber(evioDOMTree *evt);
395 void ParseEVIOEvent(evioDOMTree *evt, list<ObjList*> &full_events);
396 void ParseBuiltTriggerBank(evioDOMNodeP trigbank, list<ObjList*> &tmp_events);
397 void ParseBORevent(evioDOMNodeP bankPtr);
398 void ParseEPICSevent(evioDOMNodeP bankPtr, list<ObjList*> &events);
400 void ParseModuleConfiguration(int32_t rocid,
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
401 void ParseEventTag(
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
402 void ParseJLabModuleData(int32_t rocid,
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
403 void Parsef250Bank(int32_t rocid,
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
404 void Parsef125Bank(int32_t rocid,
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
405 void ParseF1TDCBank(int32_t rocid,
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
406 uint32_t F1TDC_channel(uint32_t chip, uint32_t chan_on_chip,
int modtype);
407 void ParseTSBank(int32_t rocid,
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
408 void ParseTIBank(int32_t rocid,
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
409 void ParseCAEN1190(int32_t rocid,
const uint32_t* &iptr,
const uint32_t *iend, list<ObjList*> &events);
413 void MakeDf250WindowRawData(ObjList *objs, uint32_t rocid, uint32_t slot, uint32_t itrigger,
const uint32_t* &iptr);
414 void MakeDf250PulseRawData(ObjList *objs, uint32_t rocid, uint32_t slot, uint32_t itrigger,
const uint32_t* &iptr);
415 void MakeDf125WindowRawData(ObjList *objs, uint32_t rocid, uint32_t slot, uint32_t itrigger,
const uint32_t* &iptr);
416 void MakeDf125PulseRawData(ObjList *objs, uint32_t rocid, uint32_t slot, uint32_t itrigger,
const uint32_t* &iptr);
419 void ParseTSSync(evioDOMNodeP bankPtr, list<ObjList*> &events);
420 void ParseDVertexBank(evioDOMNodeP bankPtr, list<ObjList*> &events);
422 void ParseFA250Scalers(evioDOMNodeP bankPtr, list<ObjList*> &events, uint32_t rocid);
423 void ParseFA250AsyncPedestals(evioDOMNodeP bankPtr, list<ObjList*> &events, uint32_t rocid);
454 struct timezone tzone;
455 gettimeofday(&tval, &tzone);
456 double t = (double)tval.tv_sec+(
double)tval.tv_usec/1.0E6;
475 if(jevent.GetJEventSource() !=
this){
476 jerr<<
" ERROR: Attempting to get EVIO buffer for event not produced by this source!!"<<endl;
482 if(!objs_ptr)
return;
494 evioDOMTree* JEventSource_EVIO::GetEVIODOMTree(jana::JEvent &jevent)
const
502 if(jevent.GetJEventSource() !=
this){
503 jerr<<
" ERROR: Attempting to get EVIO buffer for event not produced by this source!!"<<endl;
508 const ObjList *objs_ptr = (ObjList*)jevent.GetRef();
509 if(!objs_ptr)
return NULL;
511 return objs_ptr->DOMTree;
582 T *t =
dynamic_cast<T*
>(obj);
583 if(t!= NULL) v.push_back(t);
589 template<
class T,
class U>
599 for(
unsigned int j=0; j<a.size(); j++){
600 for(
unsigned int k=0; k<b.size(); k++){
601 if(a[j]->pulse_number != b[k]->pulse_number)
continue;
603 a[j]->AddAssociatedObject(b[k]);
604 b[k]->AddAssociatedObject(a[j]);
613 template<
class T,
class U>
622 for(
unsigned int j=0; j<a.size(); j++){
623 for(
unsigned int k=0; k<b.size(); k++){
625 a[j]->AddAssociatedObject(b[k]);
626 b[k]->AddAssociatedObject(a[j]);
635 template<
class T,
class U>
647 for(
unsigned int j=0; j<a.size(); j++){
648 for(
unsigned int k=0; k<b.size(); k++){
649 if(a[j]->rocid != b[k]->rocid)
continue;
650 if(a[j]->slot != b[k]->slot)
continue;
652 b[k]->AddAssociatedObject(a[j]);
660 template<
class T,
class U>
672 for(
unsigned int j=0; j<a.size(); j++){
674 for(
unsigned int k=0; k<b.size(); k++){
676 if(t->rocid != u->rocid)
continue;
677 if(t->slot != u->slot)
continue;
679 u->AddAssociatedObject(t);
687 template<
class T,
class U>
699 for(
unsigned int j=0; j<a.size(); j++){
700 for(
unsigned int k=0; k<b.size(); k++){
701 if(a[j]->rocid != b[k]->rocid)
continue;
703 b[k]->AddAssociatedObject(a[j]);
711 template<
class T,
class U>
725 for(uint32_t i=0; i<a.size(); i++){
726 b.push_back((U*)a[i]);
732 #endif // _JEventSourceGenerator_DAQ_
string MODTYPE_MAP_FILENAME
set< uint32_t > GetROCIDParseList(uint32_t rocid)
uint32_t F125_FDC_WS
FA125 emulation FDC hit window start.
uint32_t F125_CDC_H
FA125 emulation CDC hit threshold.
EVIOSourceType source_type
EmulationModeType F125_EMULATION_MODE
F125 emulation mode.
uint32_t F125_NSA_CDC
Number of samples to integrate after thershold crossing during emulation rocid 24-28 only! ...
map< tagNum, MODULE_TYPE > module_type
map< MODULE_TYPE, MODULE_TYPE > modtype_translate
EmulationModeType F250_EMULATION_MODE
F250 emulation mode.
pthread_mutex_t current_event_count_mutex
void GetEVIOBuffer(jana::JEvent &jevent, uint32_t *&buff, uint32_t &size) const
uint32_t F250_EMULATION_MIN_SWING
Minimum difference between max and min samples to do emulation.
void LinkAssociationsWithPulseNumber(vector< T * > &a, vector< U * > &b)
bool ENABLE_DISENTANGLING
pthread_rwlock_t BOR_lock
EVIOSourceType GetEVIOSourceType(void)
void LinkAssociationsROCIDOnly(vector< T * > &a, vector< U * > &b)
uint32_t USER_RUN_NUMBER
Run number supplied by user.
vector< JObject * > BORobjs
uint32_t F250_THRESHOLD
Threshold to use for firmware emulation.
void AddROCIDtoParseList(uint32_t rocid)
uint32_t F125_FDC_NP
FA125 emulation FDC initial pedestal samples.
pthread_mutex_t evio_buffer_pool_mutex
static const char * static_className(void)
bool no_more_events_in_source
uint32_t F125_CDC_NP
FA125 emulation CDC initial pedestal samples.
static double GetEVIOReadTimeFromRef(void *ref)
uint32_t F125_NSB
Number of samples to integrate before threshold crossing during emulation.
int ET_DEBUG_WORDS_TO_DUMP
uint32_t F125_SPARSIFICATION_THRESHOLD
Sparsification thresh. applied to non-ped-subtracted integral during emulation.
vector< DDAQConfig * > config_objs
uint32_t F125_THRESHOLD
Threshold to use for firmware emulation.
bool quit_on_next_ET_timeout
uint32_t F125_EMULATION_MIN_SWING
Minimum difference between max and min samples to do emulation.
static uint32_t GetEVIOBufferSizeFromRef(void *ref)
vector< JObject * > misc_objs
uint32_t current_event_count
uint32_t F125_FDC_TL
FA125 emulation FDC low timing threshold.
uint32_t F125_NSA
Number of samples to integrate after threshold crossing during emulation.
void LinkAssociations(vector< T * > &a, vector< U * > &b)
uint32_t F125_CDC_TL
FA125 emulation CDC low timing threshold.
void LinkAssociationsModuleOnly(vector< T * > &a, vector< U * > &b)
uint32_t F125PULSE_NUMBER_FILTER
Discard DF125PulseXXX objects with pulse number equal or greater than this.
static double GetDomTreeCreationTimeFromRef(void *ref)
void LinkAssociationsModuleOnlyWithCast(vector< JObject * > &a, vector< JObject * > &b)
static double GetEVIOParseTimeFromRef(void *ref)
uint32_t F125_FDC_IE
FA125 emulation FDC number of integrated samples (unless WE is reached)
int32_t filename_run_number
uint32_t F250_NSPED
Number of samples to integrate for pedestal during emulation.
pthread_mutex_t stored_events_mutex
uint32_t F125_CDC_WS
FA125 emulation CDC hit window start.
uint64_t FindEventNumber(evioDOMTree *evt, uint64_t &block_size)
uint32_t F125_NSPED
Number of samples to integrate for pedestal during emulation.
set< string > event_source_data_types
uint32_t F250_SPARSIFICATION_THRESHOLD
Sparsification thresh. applied to non-ped-subtracted integral during emulation.
vector< DDAQAddress * > hit_objs
uint32_t F125_CDC_PG
FA125 emulation CDC gap between pedestal and hit threshold crossing.
uint32_t F125_FDC_NP2
FA125 emulation FDC local pedestal samples.
uint32_t F125_CDC_WE
FA125 emulation CDC hit window end.
uint32_t F125_FDC_WE
FA125 emulation FDC hit window end.
uint32_t F125_FDC_PG
FA125 emulation FDC gap between pedestal and hit threshold crossing.
uint32_t F125_FDC_H
FA125 emulation FDC hit threshold.
bool AUTODETECT_MODULE_TYPES
virtual const char * className(void)
deque< uint32_t * > evio_buffer_pool
This class holds the Crate, Slot, Channel address for a digitized value from the DAQ system...
uint32_t F125_CDC_NP2
FA125 emulation CDC local pedestal samples.
uint32_t F250_NSA
Number of samples to integrate after threshold crossing during emulation.
uint32_t F250_NSB
Number of samples to integrate before threshold crossing during emulation.
uint32_t F250PULSE_NUMBER_FILTER
Discard DF250PulseXXX objects with pulse number equal or greater than this.
uint32_t F125_CDC_IE
FA125 emulation CDC number of integrated samples (unless WE is reached)
vector< vector< DDAQAddress * > > hit_objs
queue< ObjList * > stored_events
uint32_t F125_NSB_CDC
Number of samples to integrate before thershold crossing during emulation rocid 24-28 only! ...
bool ET_STATION_CREATE_BLOCKING
set< uint32_t > ROCIDS_TO_PARSE
static uint32_t * GetEVIOBufferFromRef(void *ref)
uint32_t F125_FDC_TH
FA125 emulation FDC high timing threshold.
The JEventSource_EVIO class implements a JEventSource capable of reading in EVIO data from raw data f...
uint32_t F125_TIME_UPSAMPLE
Use the CMU upsampling algorithm when emulating f125 pulse times.
uint32_t F125_CDC_TH
FA125 emulation CDC high timing threshold.
void AddIfAppropriate(DDAQAddress *obj, vector< T * > &v)
void CopyContainerElementsWithCast(vector< T * > &a, vector< U * > &b)