20 #include <JANA/JApplication.h>
21 #include <JANA/JFactory.h>
41 last_control_event_t = 0.0;
42 last_physics_event_t = 0.0;
59 gPARMS->SetParameter(
"EVIO:LINK",
false);
60 gPARMS->SetParameter(
"EVIO:LINK_BORCONFIG",
false);
61 gPARMS->SetParameter(
"EVIO:PARSE_F250",
false);
62 gPARMS->SetParameter(
"EVIO:PARSE_F125",
false);
63 gPARMS->SetParameter(
"EVIO:PARSE_F1TDC",
false);
64 gPARMS->SetParameter(
"EVIO:PARSE_CAEN1290TDC",
false);
65 gPARMS->SetParameter(
"EVIO:PARSE_CONFIG",
false);
66 gPARMS->SetParameter(
"EVIO:PARSE_BOR",
false);
67 gPARMS->SetParameter(
"EVIO:PARSE_EPICS",
false);
68 gPARMS->SetParameter(
"EVIO:PARSE_EVENTTAG",
false);
70 gPARMS->SetParameter(
"EVIO:APPLY_TRANSLATION_TABLE",
false);
71 gPARMS->SetParameter(
"EVIO:F250_EMULATION_MODE", 0);
72 gPARMS->SetParameter(
"EVIO:F125_EMULATION_MODE", 0);
74 tree =
new TTree(
"T",
"Sync Events Tree");
75 tree->Branch(
"run_number", &synevt.run_number,
"run_number/i" );
76 tree->Branch(
"run_type", &synevt.run_type,
"run_type/i" );
77 tree->Branch(
"event_number", &synevt.event_number,
"event_number/l" );
78 tree->Branch(
"event_type", &synevt.event_type,
"event_type/s" );
79 tree->Branch(
"avg_timestamp", &synevt.avg_timestamp,
"avg_timestamp/l" );
81 tree->Branch(
"nsync", &synevt.nsync,
"nsync/i" );
82 tree->Branch(
"trig_number", &synevt.trig_number,
"trig_number/i" );
83 tree->Branch(
"live_time", &synevt.live_time,
"live_time/i" );
84 tree->Branch(
"busy_time", &synevt.nsync,
"busy_time/i" );
85 tree->Branch(
"live_inst", &synevt.live_inst,
"live_inst/i" );
86 tree->Branch(
"unix_time", &synevt.unix_time,
"unix_time/i" );
88 tree->Branch(
"gtp_sc", &synevt.gtp_sc,
"gtp_sc[32]/i" );
89 tree->Branch(
"fp_sc", &synevt.fp_sc,
"fp_sc[16]/i" );
90 tree->Branch(
"gtp_rate", &synevt.gtp_rate,
"gtp_rate[32]/i" );
91 tree->Branch(
"fp_rate", &synevt.fp_rate,
"fp_rate[16]/i" );
110 vector<const DCODAControlEvent*> controlevents;
111 loop->Get(controlevents);
112 if(!controlevents.empty()){
113 last_control_event_t = (double) controlevents[0]->
unix_time;
114 last_physics_event_t = 0.0;
117 vector<const DCODAEventInfo*> codainfos;
118 loop->Get(codainfos);
119 if(codainfos.empty())
return NOERROR;
122 if( (last_control_event_t!=0.0) && (last_physics_event_t==0.0) ){
123 last_physics_event_t = (double)codainfo->
avg_timestamp / 250.0E6;
126 vector<const DL1Info*> l1infos;
128 if(l1infos.empty())
return NOERROR;
130 japp->RootFillLock(
this);
132 for(
auto l1info : l1infos){
134 time_t t = l1info->unix_time;
135 cout <<
"sync event at " << ctime(&t);
138 synevt.run_type = codainfo->
run_type;
143 synevt.nsync = l1info->nsync;
144 synevt.trig_number = l1info->trig_number;
145 synevt.live_time = l1info->live_time;
146 synevt.busy_time = l1info->busy_time;
147 synevt.live_inst = l1info->live_inst;
148 synevt.unix_time = l1info->unix_time;
149 for(
int i=0; i<32; i++){
150 synevt.gtp_sc[i] = l1info->gtp_sc[i];
151 synevt.gtp_rate[i] = l1info->gtp_rate[i];
153 synevt.fp_sc[i] = l1info->fp_sc[i];
154 synevt.fp_rate[i] = l1info->fp_rate[i];
161 double x = (double)synevt.avg_timestamp / 250.0E6;
162 double y = (
double)synevt.unix_time - 13.0E8;
170 japp->RootFillUnLock(
this);
189 double m = (sum_n*sum_xy - sum_x*sum_y)/(sum_n*sum_x2 - sum_x*sum_x);
190 double b = (sum_y*sum_x2 - sum_x*sum_xy)/(sum_n*sum_x2 - sum_x*sum_x);
194 double one_over_m = 250.0E6/m;
198 cout << endl <<
"No sync events found! Conversion values will be taken from control+physics events." << endl;
200 one_over_m = 250.0E6;
201 b = last_control_event_t - last_physics_event_t;
204 typedef std::numeric_limits< double > dbl;
205 cout.precision(dbl::max_digits10);
207 cout << endl <<
"timestamp to unix time conversion: tics_per_sec=" << one_over_m <<
" unix_start_time=" << b << endl << endl;
~JEventProcessor_syncskim()
jerror_t fini(void)
Called after last event of last event source has been processed.
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
jerror_t init(void)
Called once at program start.
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
JEventProcessor_syncskim()