Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
JEventProcessor_trigger_skims.cc
Go to the documentation of this file.
1 //
2 // JEventProcessor_trigger_skims.cc
3 //
4 // JANA event processor plugin to skim various trigger types to EVIO files
5 //
6 // Author: Sean Dobbs
7 // Adapted from Ahmed Foda, 13-May-2016 copied from Paul Mattione's 2trackskim
8 
10 #include "TRIGGER/DL1Trigger.h"
11 #include "BCAL/DBCALHit.h"
12 #include "DAQ/DL1Info.h"
13 
14 // for initializing plugins
15 extern "C" {
16  void InitPlugin(JApplication *app)
17  {
18  InitJANAPlugin(app);
19  app->AddProcessor(new JEventProcessor_trigger_skims(), true);
20  }
21 } // "extern C"
22 
23 
24 // variables to control which triggers get read out
25 static bool write_out_bcal_led = true;
26 static bool write_out_fcal_led = true;
27 static bool write_out_ccal_led = true;
28 static bool write_out_dirc_led = true;
29 static bool write_out_random = true;
30 static bool write_out_sync = true;
31 
32 
33 //-------------------------------
34 // init
35 //-------------------------------
37 {
38  int bcal_led_writeout_toggle = 1;
39  int fcal_led_writeout_toggle = 1;
40  int ccal_led_writeout_toggle = 1;
41  int dirc_led_writeout_toggle = 1;
42  int random_writeout_toggle = 1;
43  int sync_writeout_toggle = 1;
44 
45  gPARMS->SetDefaultParameter("TRIGSKIM:WRITEBCALLED", bcal_led_writeout_toggle, "Write out BCAL LED events");
46  gPARMS->SetDefaultParameter("TRIGSKIM:WRITEFCALLED", fcal_led_writeout_toggle, "Write out FCAL LED events");
47  gPARMS->SetDefaultParameter("TRIGSKIM:WRITECCALLED", fcal_led_writeout_toggle, "Write out CCAL LED events");
48  gPARMS->SetDefaultParameter("TRIGSKIM:WRITEDIRCLED", fcal_led_writeout_toggle, "Write out DIRC LED events");
49  gPARMS->SetDefaultParameter("TRIGSKIM:WRITERANDOM", random_writeout_toggle, "Write out random pulser events");
50  gPARMS->SetDefaultParameter("TRIGSKIM:WRITESYNC", sync_writeout_toggle, "Write out TS sync events");
51 
52  if(bcal_led_writeout_toggle == 0)
53  write_out_bcal_led = false;
54  if(fcal_led_writeout_toggle == 0)
55  write_out_fcal_led = false;
56  if(ccal_led_writeout_toggle == 0)
57  write_out_ccal_led = false;
58  if(dirc_led_writeout_toggle == 0)
59  write_out_dirc_led = false;
60  if(random_writeout_toggle == 0)
61  write_out_random = false;
62  if(sync_writeout_toggle == 0)
63  write_out_sync = false;
64 
65  return NOERROR;
66 }
67 
68 //-------------------------------
69 // brun
70 //-------------------------------
71 jerror_t JEventProcessor_trigger_skims::brun(JEventLoop *locEventLoop, int32_t runnumber)
72 {
73  return NOERROR;
74 }
75 
76 //-------------------------------
77 // evnt
78 //-------------------------------
79 jerror_t JEventProcessor_trigger_skims::evnt(JEventLoop *locEventLoop, uint64_t eventnumber)
80 {
81  // Get EVIO writer
82  const DEventWriterEVIO* locEventWriterEVIO = NULL;
83  locEventLoop->GetSingle(locEventWriterEVIO);
84 
85  // Save BOR events
86  if(locEventLoop->GetJEvent().GetStatusBit(kSTATUS_BOR_EVENT)) {
87  locEventWriterEVIO->Write_EVIOEvent( locEventLoop, "BCAL-LED" );
88  locEventWriterEVIO->Write_EVIOEvent( locEventLoop, "CCAL-LED" );
89  locEventWriterEVIO->Write_EVIOEvent( locEventLoop, "FCAL-LED" );
90  locEventWriterEVIO->Write_EVIOEvent( locEventLoop, "DIRC-LED" );
91  locEventWriterEVIO->Write_EVIOEvent( locEventLoop, "random" );
92  locEventWriterEVIO->Write_EVIOEvent( locEventLoop, "sync" );
93  return NOERROR;
94  }
95 
96  // Save EPICS events
97  vector<const DEPICSvalue*> locEPICSValues;
98  locEventLoop->Get(locEPICSValues);
99  if(!locEPICSValues.empty()) {
100  if (write_out_bcal_led)
101  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "BCAL-LED");
102  if (write_out_ccal_led)
103  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "CCAL-LED");
104  if (write_out_fcal_led)
105  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "FCAL-LED");
106  if (write_out_dirc_led)
107  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "DIRC-LED");
108  if (write_out_random)
109  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "random");
110  return NOERROR;
111  }
112 
113  //bool is_cosmic_trigger = false;
114  bool is_BCAL_LED_US_trigger = false;
115  bool is_BCAL_LED_DS_trigger = false;
116  bool is_CCAL_LED_trigger = false;
117  bool is_FCAL_LED_trigger = false;
118  bool is_DIRC_LED_trigger = false;
119  bool is_random_trigger = false;
120  bool is_sync_event = false;
121 
122  const DL1Trigger *trig = NULL;
123  try {
124  locEventLoop->GetSingle(trig);
125  } catch (...) {}
126 
127  // parse the triggers we want to save
128  if (trig) {
129  //printf("%5i %5i | %5i %5i %5i | %i\n",
130  // trig->trig_mask,trig->trig_mask & 0x1,
131  // trig->fp_trig_mask, trig->fp_trig_mask & 0x100,trig->fp_trig_mask & 0x200,
132  // trig->trig_mask && trig->fp_trig_mask);
133 
134  /* -- commented out to remove warning
135  if (trig->trig_mask & 0x1) {
136  // Cosmic trigger fired
137  is_cosmic_trigger = true;
138  }
139  */
140 
141  // Select triggers based on front panel inputs
142  // Trigger bits start counting from 0
143  if (trig->fp_trig_mask & 0x100) { // Trigger front-panel bit 8
144  // Upstream BCAL LED trigger fired
145  is_BCAL_LED_US_trigger = true;
146  }
147  if (trig->fp_trig_mask & 0x200) { // Trigger front-panel bit 9
148  // Downstream BCAL LED trigger fired
149  is_BCAL_LED_DS_trigger = true;
150  }
151  if (trig->fp_trig_mask & 0x800) { // Trigger front-panel bit 11
152  // Periodic pulser trigger fired
153  is_random_trigger = true;
154  }
155  if (trig->fp_trig_mask & 0x004) { // Trigger front-panel bit 2
156  // FCAL LED trigger fired
157  is_FCAL_LED_trigger = true;
158  }
159  if (trig->fp_trig_mask & 0x010) { // Trigger front-panel bit 5
160  // CCAL LED trigger fired
161  is_CCAL_LED_trigger = true;
162  }
163  if (trig->fp_trig_mask & 0x020) { // Trigger front-panel bit 6
164  // CCAL LED trigger fired
165  is_CCAL_LED_trigger = true;
166  }
167  if (trig->fp_trig_mask & 0x4000 ) { // Trigger front-panel bit 15
168  // DIRC LED trigger fired
169  is_DIRC_LED_trigger = true;
170  }
171  }
172 
173  // Do some backup calculations for runs in which the BCAL LED trigger did not latch correctly
174  vector<const DBCALHit *> bcal_hits;
175  locEventLoop->Get(bcal_hits);
176  double total_bcal_energy = 0.;
177  if(write_out_bcal_led) {
178  for(unsigned int i=0; i<bcal_hits.size(); i++) {
179  total_bcal_energy += bcal_hits[i]->E;
180  }
181  }
182 
183  // if there's a DL1Info object, this extra L1 info means that it's a "sync event"
184  vector<const DL1Info*> l1_info;
185  locEventLoop->Get(l1_info);
186  if(l1_info.size() == 1) {
187  is_sync_event = true;
188  }
189 
190  // Save events to skim file
191 
192  // Save BCAL trigger if:
193  // 1. Trigger front-panel bits 8 or 9
194  // 2. Total energy in BCAL > 12 GeV (diabled to avoid GTP events leaking into BCAL LED skims)
195  // 3. Number of hits in BCAL > 1200 (raised to 1200 to avoid GTP events leaking into BCAL LED skims)
196  bool save_BCAL_LED_event = is_BCAL_LED_US_trigger || is_BCAL_LED_DS_trigger
197  || (bcal_hits.size() >= 1200);// || (total_bcal_energy > 12.); Diabling energy trigger
198  if ( write_out_bcal_led && save_BCAL_LED_event ) {
199  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "BCAL-LED");
200  }
201  if ( write_out_ccal_led && is_CCAL_LED_trigger ) {
202  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "CCAL-LED");
203  }
204  if ( write_out_fcal_led && is_FCAL_LED_trigger ) {
205  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "FCAL-LED");
206  }
207  if ( write_out_dirc_led && is_DIRC_LED_trigger ) {
208  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "DIRC-LED");
209  }
210  if ( write_out_random && is_random_trigger ) {
211  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "random");
212  }
213  if ( write_out_sync && is_sync_event ) {
214  locEventWriterEVIO->Write_EVIOEvent(locEventLoop, "sync");
215  }
216 
217  return NOERROR;
218 }
219 
220 //-------------------------------
221 // erun
222 //-------------------------------
224 {
225  return NOERROR;
226 }
227 
228 //-------------------------------
229 // fini
230 //-------------------------------
232 {
233  return NOERROR;
234 }
235 
static bool write_out_bcal_led
uint32_t fp_trig_mask
Definition: DL1Trigger.h:19
jerror_t brun(JEventLoop *loop, int32_t runnumber)
Called everytime a new run number is detected.
trig[33-1]
InitPlugin_t InitPlugin
static bool write_out_sync
static bool write_out_ccal_led
jerror_t init(void)
Called once at program start.
static bool write_out_dirc_led
bool Write_EVIOEvent(JEventLoop *locEventLoop, string locOutputFileNameSubString) const
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t fini(void)
Called after last event of last event source has been processed.
static bool write_out_random
jerror_t evnt(JEventLoop *loop, uint64_t eventnumber)
Called every event.
static bool write_out_fcal_led