Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
JEventProcessor_merge_rawevents.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: JEventProcessor_merge_rawevents.cc
4 //
5 
6 #include <math.h>
7 
9 using namespace jana;
10 
11 // Routine used to create our JEventProcessor
12 #include "JANA/JApplication.h"
13 #include "GlueX.h"
14 #include <vector>
15 #include <deque>
16 #include <string>
17 #include <iostream>
18 #include <algorithm>
19 #include <stdio.h>
20 #include <stdlib.h>
21 #include "DAQ/JEventSource_EVIO.h"
22 
23 extern "C"{
24  void InitPlugin(JApplication *app){
25  InitJANAPlugin(app);
26  app->AddProcessor(new JEventProcessor_merge_rawevents());
27  }
28 } // "C"
29 
30 static bool WRITE_RAW_EVENTS = false;
31 
32 //------------------
33 // JEventProcessor_merge_rawevents (Constructor)
34 //------------------
36 {
37  gPARMS->SetDefaultParameter( "MERGERAWEVENTS:WRITE_RAW_EVENTS", WRITE_RAW_EVENTS );
38 }
39 
40 //------------------
41 // ~JEventProcessor_merge_rawevents (Destructor)
42 //------------------
44 {
45 }
46 
47 //------------------
48 // init
49 //------------------
51 {
52  return NOERROR;
53 }
54 
55 //------------------
56 // brun
57 //------------------
58 jerror_t JEventProcessor_merge_rawevents::brun(JEventLoop *loop, int32_t runnumber)
59 {
60  // create a new EVIO writer if it doesn't exist
61  if(dEventWriterEVIO == NULL) {
64  }
65 
66  return NOERROR;
67 }
68 
69 //------------------
70 // evnt
71 //------------------
72 jerror_t JEventProcessor_merge_rawevents::evnt(JEventLoop *loop, uint64_t eventnumber)
73 {
74 
75  if(WRITE_RAW_EVENTS) {
76  // get EVIO information associated with the event
77  JEvent& the_event = loop->GetJEvent();
78  void* the_event_ref = the_event.GetRef();
79  uint32_t* output_buffer = JEventSource_EVIO::GetEVIOBufferFromRef(the_event_ref);
80  uint32_t output_buffer_size = JEventSource_EVIO::GetEVIOBufferSizeFromRef(the_event_ref);
81 
82  cout << "Writing out event " << eventnumber << " buffer size = " << (output_buffer_size/4) << " words" << endl;
83 
84  // write the buffer out
85  // WARNING: this will work for non-entangled events, but hasn't been tested for entagled EVIO events
86  dEventWriterEVIO->Write_EVIOBuffer( loop, output_buffer, output_buffer_size, "merged" );
87  } else {
88  dEventWriterEVIO->Write_EVIOEvent( loop, "merged" );
89  }
90 
91  return NOERROR;
92 }
93 
94 //------------------
95 // erun
96 //------------------
98 {
99  // This is called whenever the run number changes, before it is
100  // changed to give you a chance to clean up before processing
101  // events from the next run number.
102  return NOERROR;
103 }
104 
105 //------------------
106 // Fin
107 //------------------
109 {
110  // Called before program exit after event processing is finished.
111  delete dEventWriterEVIO;
112  return NOERROR;
113 }
114 
115 
jerror_t fini(void)
Called after last event of last event source has been processed.
static bool WRITE_RAW_EVENTS
jerror_t init(void)
Called once at program start.
static uint32_t GetEVIOBufferSizeFromRef(void *ref)
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
void Set_MergeFiles(bool in_flag)
InitPlugin_t InitPlugin
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
bool Write_EVIOBuffer(JEventLoop *locEventLoop, vector< uint32_t > *locOutputBuffer, string locOutputFileNameSubString) const
bool Write_EVIOEvent(JEventLoop *locEventLoop, string locOutputFileNameSubString) const
static uint32_t * GetEVIOBufferFromRef(void *ref)