13 vector<const JObject *> objects_to_save_null;
34 vector<const Df250TriggerTime*> f250tts;
35 vector<const Df250PulseData*> f250pulses;
36 vector<const Df250PulseIntegral*> f250pis;
37 vector<const Df250WindowRawData*> f250wrds;
38 vector<const Df125TriggerTime*> f125tts;
39 vector<const Df125PulseIntegral*> f125pis;
40 vector<const Df125CDCPulse*> f125cdcpulses;
41 vector<const Df125FDCPulse*> f125fdcpulses;
42 vector<const Df125WindowRawData*> f125wrds;
43 vector<const Df125Config*> f125configs;
44 vector<const DDIRCTriggerTime*> dirctts;
45 vector<const DDIRCTDCHit*> dirctdchits;
46 vector<const DCAEN1290TDCHit*> caen1290hits;
47 vector<const DCAEN1290TDCConfig*> caen1290configs;
48 vector<const DF1TDCHit*> F1hits;
49 vector<const DF1TDCTriggerTime*> F1tts;
50 vector<const DF1TDCConfig*> F1configs;
51 vector<const DEPICSvalue*> epicsValues;
52 vector<const DCODAEventInfo*> coda_events;
53 vector<const DCODAROCInfo*> coda_rocinfos;
54 vector<const DL1Info*> l1_info;
55 vector<const Df250Scaler*> f250scalers;
58 if(objects_to_save.size()==0) {
61 loop->Get(f250pulses);
66 loop->Get(f125cdcpulses);
67 loop->Get(f125fdcpulses);
69 loop->Get(f125configs);
70 loop->Get(dirctdchits);
72 loop->Get(caen1290hits);
73 loop->Get(caen1290configs);
77 loop->Get(epicsValues);
78 loop->Get(coda_events);
79 loop->Get(coda_rocinfos);
81 loop->Get(f250scalers);
84 loop->Get(epicsValues);
86 loop->Get(f250scalers);
87 loop->Get(coda_events);
88 loop->Get(coda_rocinfos);
89 loop->Get(f125configs);
91 loop->Get(caen1290configs);
100 for(vector<const JObject *>::iterator obj_itr = objects_to_save.begin();
101 obj_itr != objects_to_save.end(); obj_itr++) {
102 const JObject *obj_ptr = *obj_itr;
105 if(
auto *llobj_ptr = dynamic_cast<const Df250TriggerTime *>(obj_ptr)) {
106 f250tts.push_back(llobj_ptr);
107 }
else if(
auto *llobj_ptr = dynamic_cast<const Df250PulseData *>(obj_ptr)) {
108 f250pulses.push_back(llobj_ptr);
109 }
else if(
auto *llobj_ptr = dynamic_cast<const Df250PulseIntegral *>(obj_ptr)) {
110 f250pis.push_back(llobj_ptr);
111 }
else if(
auto *llobj_ptr = dynamic_cast<const Df250WindowRawData *>(obj_ptr)) {
112 f250wrds.push_back(llobj_ptr);
113 }
else if(
auto *llobj_ptr = dynamic_cast<const Df125TriggerTime *>(obj_ptr)) {
114 f125tts.push_back(llobj_ptr);
115 }
else if(
auto *llobj_ptr = dynamic_cast<const Df125PulseIntegral *>(obj_ptr)) {
116 f125pis.push_back(llobj_ptr);
117 }
else if(
auto *llobj_ptr = dynamic_cast<const Df125CDCPulse *>(obj_ptr)) {
118 f125cdcpulses.push_back(llobj_ptr);
119 }
else if(
auto *llobj_ptr = dynamic_cast<const Df125FDCPulse *>(obj_ptr)) {
120 f125fdcpulses.push_back(llobj_ptr);
121 }
else if(
auto *llobj_ptr = dynamic_cast<const Df125WindowRawData *>(obj_ptr)) {
122 f125wrds.push_back(llobj_ptr);
123 }
else if(
auto *llobj_ptr = dynamic_cast<const DDIRCTDCHit *>(obj_ptr)) {
124 dirctdchits.push_back(llobj_ptr);
125 }
else if(
auto *llobj_ptr = dynamic_cast<const DDIRCTriggerTime *>(obj_ptr)) {
126 dirctts.push_back(llobj_ptr);
127 }
else if(
auto *llobj_ptr = dynamic_cast<const DCAEN1290TDCHit *>(obj_ptr)) {
128 caen1290hits.push_back(llobj_ptr);
129 }
else if(
auto *llobj_ptr = dynamic_cast<const DF1TDCHit *>(obj_ptr)) {
130 F1hits.push_back(llobj_ptr);
131 }
else if(
auto *llobj_ptr = dynamic_cast<const DF1TDCTriggerTime *>(obj_ptr)) {
132 F1tts.push_back(llobj_ptr);
135 vector<const Df250TriggerTime*> obj_f250tts;
136 vector<const Df250PulseData*> obj_f250pulses;
137 vector<const Df250PulseIntegral*> obj_f250pis;
138 vector<const Df250WindowRawData*> obj_f250wrds;
139 vector<const Df125TriggerTime*> obj_f125tts;
140 vector<const Df125PulseIntegral*> obj_f125pis;
141 vector<const Df125CDCPulse*> obj_f125cdcpulses;
142 vector<const Df125FDCPulse*> obj_f125fdcpulses;
143 vector<const Df125WindowRawData*> obj_f125wrds;
144 vector<const DDIRCTDCHit*> obj_dirctdchits;
145 vector<const DDIRCTriggerTime*> obj_dirctts;
146 vector<const DCAEN1290TDCHit*> obj_caen1290hits;
147 vector<const DF1TDCHit*> obj_F1hits;
148 vector<const DF1TDCTriggerTime*> obj_F1tts;
150 obj_ptr->Get(obj_f250tts);
151 obj_ptr->Get(obj_f250pulses);
152 obj_ptr->Get(obj_f250pis);
153 obj_ptr->Get(obj_f250wrds);
154 obj_ptr->Get(obj_f125tts);
155 obj_ptr->Get(obj_f125pis);
156 obj_ptr->Get(obj_f125cdcpulses);
157 obj_ptr->Get(obj_f125fdcpulses);
158 obj_ptr->Get(obj_f125wrds);
159 obj_ptr->Get(obj_dirctdchits);
160 obj_ptr->Get(obj_dirctts);
161 obj_ptr->Get(obj_caen1290hits);
162 obj_ptr->Get(obj_F1hits);
163 obj_ptr->Get(obj_F1tts);
165 f250tts.insert(f250tts.end(), obj_f250tts.begin(), obj_f250tts.end());
166 f250pulses.insert(f250pulses.end(), obj_f250pulses.begin(), obj_f250pulses.end());
167 f250pis.insert(f250pis.end(), obj_f250pis.begin(), obj_f250pis.end());
168 f250wrds.insert(f250wrds.end(), obj_f250wrds.begin(), obj_f250wrds.end());
169 f125tts.insert(f125tts.end(), obj_f125tts.begin(), obj_f125tts.end());
170 f125pis.insert(f125pis.end(), obj_f125pis.begin(), obj_f125pis.end());
171 f125cdcpulses.insert(f125cdcpulses.end(), obj_f125cdcpulses.begin(), obj_f125cdcpulses.end());
172 f125fdcpulses.insert(f125fdcpulses.end(), obj_f125fdcpulses.begin(), obj_f125fdcpulses.end());
173 f125wrds.insert(f125wrds.end(), obj_f125wrds.begin(), obj_f125wrds.end());
174 dirctts.insert(dirctts.end(), obj_dirctts.begin(), obj_dirctts.end());
175 dirctdchits.insert(dirctdchits.end(), obj_dirctdchits.begin(), obj_dirctdchits.end());
176 caen1290hits.insert(caen1290hits.end(), obj_caen1290hits.begin(), obj_caen1290hits.end());
177 F1hits.insert(F1hits.end(), obj_F1hits.begin(), obj_F1hits.end());
178 F1tts.insert(F1tts.end(), obj_F1tts.begin(), obj_F1tts.end());
188 JFactory_base *fac = loop->GetFactory(
"DL3Trigger");
190 int nobjs = fac->GetNrows(
false,
true);
192 loop->GetSingle(l3trigger,
"",
false);
199 if( !epicsValues.empty() ){
206 set<uint32_t> rocids;
208 for(uint32_t i=0; i<f250pulses.size(); i++) rocids.insert( f250pulses[i]->rocid );
209 for(uint32_t i=0; i<f250pis.size(); i++) rocids.insert( f250pis[i]->rocid );
210 for(uint32_t i=0; i<f250wrds.size(); i++) rocids.insert( f250wrds[i]->rocid );
211 for(uint32_t i=0; i<f125pis.size(); i++) rocids.insert( f125pis[i]->rocid );
212 for(uint32_t i=0; i<f125cdcpulses.size();i++) rocids.insert( f125cdcpulses[i]->rocid);
213 for(uint32_t i=0; i<f125fdcpulses.size();i++) rocids.insert( f125fdcpulses[i]->rocid);
214 for(uint32_t i=0; i<f125wrds.size(); i++) rocids.insert( f125wrds[i]->rocid );
215 for(uint32_t i=0; i<dirctdchits.size(); i++) rocids.insert( dirctdchits[i]->rocid );
216 for(uint32_t i=0; i<caen1290hits.size(); i++) rocids.insert( caen1290hits[i]->rocid );
217 for(uint32_t i=0; i<F1hits.size(); i++) rocids.insert( F1hits[i]->rocid );
221 vector<const DCODAROCInfo*> my_coda_rocinfos;
222 for(uint32_t i=0; i<coda_rocinfos.size(); i++){
224 if(rocids.find(coda_rocinfos[i]->rocid)!=rocids.end()){
225 my_coda_rocinfos.push_back(rocinfo);
230 coda_rocinfos = my_coda_rocinfos;
233 unsigned int Nevents = loop->GetNevents();
238 buff.push_back(0xFF701001);
250 WriteF1Data(buff, F1hits, F1tts, F1configs, Nevents);
255 if(f250pis.size() > 0)
256 Writef250Data(buff, f250pis, f250tts, f250wrds, f250scalers, Nevents);
257 if(f250pulses.size() > 0)
258 Writef250Data(buff, f250pulses, f250tts, f250wrds, f250scalers, Nevents);
261 Writef125Data(buff, f125pis, f125cdcpulses, f125fdcpulses, f125tts, f125wrds, f125configs, Nevents);
267 if(l1_info.size() > 0) {
272 for(vector<const JObject *>::iterator obj_itr = objects_to_save.begin();
273 obj_itr != objects_to_save.end(); obj_itr++) {
274 const JObject *obj_ptr = *obj_itr;
277 if(
auto *vertex_ptr = dynamic_cast<const DVertex *>(obj_ptr)) {
280 if(
auto *vertex_ptr = dynamic_cast<const DEventRFBunch *>(obj_ptr)) {
286 if(!buff.empty()) buff[0] = buff.size()-1;
295 vector<const DCODAROCInfo*> &coda_rocinfos,
296 vector<const DCODAEventInfo*> &coda_events)
const
299 uint32_t built_trigger_bank_len_idx = buff.size();
301 buff.push_back(0xFF232000 + coda_rocinfos.size());
305 uint32_t run_number = loop->GetJEvent().GetRunNumber();
306 uint32_t run_type = 1;
307 uint64_t event_number = loop->GetJEvent().GetEventNumber();
308 uint64_t avg_timestamp = time(NULL);
309 if(!coda_events.empty()){
310 run_number = coda_events[0]->run_number;
311 run_type = coda_events[0]->run_type;
312 event_number = coda_events[0]->event_number;
313 avg_timestamp = coda_events[0]->avg_timestamp;
316 buff.push_back(0xD30A0006);
317 buff.push_back(event_number & 0xFFFFFFFF);
318 buff.push_back(event_number>>32);
319 buff.push_back(avg_timestamp & 0xFFFFFFFF);
320 buff.push_back(avg_timestamp>>32);
321 buff.push_back(run_type);
322 buff.push_back(run_number);
325 uint16_t event_type = 1;
326 if(!coda_events.empty()){
327 event_type = coda_events[0]->event_type;
329 buff.push_back(0xD3850001);
330 buff.push_back((uint32_t)event_type);
334 for(uint32_t i=0; i<coda_rocinfos.size(); i++){
338 uint32_t len = 2 + rocinfo->
misc.size();
339 buff.push_back( (rocinfo->
rocid<<24) + 0x00010000 + len);
340 buff.push_back(rocinfo->
timestamp & 0xFFFFFFFF);
342 if(!rocinfo->
misc.empty()){
343 buff.insert(buff.end(), rocinfo->
misc.begin(), rocinfo->
misc.end());
348 buff[built_trigger_bank_len_idx] = buff.size() - built_trigger_bank_len_idx - 1;
355 vector<const DCAEN1290TDCHit*> &caen1290hits,
356 vector<const DCAEN1290TDCConfig*> &caen1290configs,
361 map<uint32_t, map<uint32_t, vector<const DCAEN1290TDCHit*> > > modules;
362 map<uint32_t, set<const DCAEN1290TDCConfig*> > configs;
363 for(uint32_t i=0; i<caen1290hits.size(); i++){
366 modules[hit->
rocid][hit->
slot].push_back(hit);
371 for(uint32_t i=0; i<caen1290configs.size(); i++){
373 configs[config->
rocid].insert(config);
377 map<uint32_t, map<uint32_t, vector<const DCAEN1290TDCHit*> > >::iterator it;
378 for(it=modules.begin(); it!=modules.end(); it++){
379 uint32_t rocid = it->first;
382 uint32_t data_bank_idx = buff.size();
384 buff.push_back( (rocid<<16) + 0x1001 );
387 set<const DCAEN1290TDCConfig*> &confs = configs[rocid];
390 uint32_t config_bank_idx = buff.size();
392 buff.push_back( 0x00550101 );
394 set<const DCAEN1290TDCConfig*>::iterator it_conf;
395 for(it_conf=confs.begin(); it_conf!=confs.end(); it_conf++){
398 uint32_t header_idx = buff.size();
404 buff[header_idx] = (Nvals<<24) + conf->
slot_mask;
408 buff[config_bank_idx] = buff.size() - config_bank_idx - 1;
412 uint32_t data_block_bank_idx = buff.size();
414 buff.push_back( 0x00140101 );
417 map<uint32_t, vector<const DCAEN1290TDCHit*> >::iterator it2;
418 for(it2=it->second.begin(); it2!=it->second.end(); it2++){
419 uint32_t slot = it2->first;
422 uint32_t global_header_idx = buff.size();
423 buff.push_back( 0x40000100 + (0x01<<5) + slot );
426 vector<const DCAEN1290TDCHit*> &hits = it2->second;
427 uint32_t last_id = 0x0;
428 for(uint32_t i=0; i<hits.size(); i++){
435 buff.push_back( 0x08000000 +
id );
440 buff.push_back( (hit->
edge<<26) + (hit->
channel<<21) + (hit->
time&0x1fffff) );
444 uint32_t Nwords_in_block = buff.size()-global_header_idx+1;
445 buff.push_back( 0x80000000 + (Nwords_in_block<<5) + (slot) );
449 buff[data_block_bank_idx] = buff.size() - data_block_bank_idx - 1;
452 buff[data_bank_idx] = buff.size() - data_bank_idx - 1;
460 vector<const DF1TDCHit*> &F1hits,
461 vector<const DF1TDCTriggerTime*> &F1tts,
462 vector<const DF1TDCConfig*> &F1configs,
467 map<uint32_t, map<uint32_t, vector<const DF1TDCHit*> > > modules;
468 map<uint32_t, map<uint32_t, MODULE_TYPE> > mod_types;
469 for(uint32_t i=0; i<F1hits.size(); i++){
472 modules[hit->
rocid][hit->
slot].push_back(hit);
478 map<uint32_t, set<const DF1TDCConfig*> > configs;
479 for(uint32_t i=0; i<F1configs.size(); i++){
481 configs[config->
rocid].insert(config);
485 map<uint32_t, map<uint32_t, vector<const DF1TDCHit*> > >::iterator it;
486 for(it=modules.begin(); it!=modules.end(); it++){
487 uint32_t rocid = it->first;
490 uint32_t data_bank_idx = buff.size();
492 buff.push_back( (rocid<<16) + 0x1001 );
495 set<const DF1TDCConfig*> &confs = configs[rocid];
498 uint32_t config_bank_idx = buff.size();
500 buff.push_back( 0x00550101 );
502 set<const DF1TDCConfig*>::iterator it_conf;
503 for(it_conf=confs.begin(); it_conf!=confs.end(); it_conf++){
506 uint32_t header_idx = buff.size();
516 buff[header_idx] = (Nvals<<24) + conf->
slot_mask;
520 buff[config_bank_idx] = buff.size() - config_bank_idx - 1;
533 uint32_t data_block_bank_idx = buff.size();
535 buff.push_back( 0x001A0101 );
538 map<uint32_t, vector<const DF1TDCHit*> >::iterator it2;
539 for(it2=it->second.begin(); it2!=it->second.end(); it2++){
540 uint32_t slot = it2->first;
545 for(uint32_t i=0; i<F1tts.size(); i++){
546 if( (F1tts[i]->rocid==rocid) && (F1tts[i]->slot==slot) ){
553 uint32_t itrigger = (tt==NULL) ? (Nevents&0x3FFFFF):tt->DDAQAddress::itrigger;
554 uint64_t trig_time = (tt==NULL) ? time(NULL):tt->
time;
557 uint32_t block_header_idx = buff.size();
558 buff.push_back( 0x80000101 + (modtype<<18) + (slot<<22) );
559 buff.push_back( 0x90000000 + (slot<<22) + itrigger);
562 buff.push_back(0x98000000 + ((trig_time>>0 )&0x00FFFFFF));
563 buff.push_back(0x00000000 + ((trig_time>>24)&0x00FFFFFF));
566 vector<const DF1TDCHit*> &hits = it2->second;
567 for(uint32_t i=0; i<hits.size(); i++){
586 uint32_t data_word = hits[i]->data_word;
587 uint32_t chip_header = 0xC0000000;
588 chip_header += (data_word&0x07000000);
589 chip_header += (hits[i]->trig_time<<7)&0x01FF;
590 chip_header += (data_word>>16)&0x3F;
591 buff.push_back( chip_header );
594 buff.push_back( data_word );
598 uint32_t Nwords_in_block = buff.size()-block_header_idx+1;
599 buff.push_back( 0x88000000 + (slot<<22) + Nwords_in_block );
603 buff[data_block_bank_idx] = buff.size() - data_block_bank_idx - 1;
606 buff[data_bank_idx] = buff.size() - data_bank_idx - 1;
615 vector<const Df250PulseIntegral*> &f250pis,
616 vector<const Df250TriggerTime*> &f250tts,
617 vector<const Df250WindowRawData*> &f250wrds, vector<const Df250Scaler*> &f250scalers,
622 map<uint32_t, map<uint32_t, vector<const Df250PulseIntegral*> > > modules;
623 map<uint32_t, set<const Df250Config*> > configs;
624 for(uint32_t i=0; i<f250pis.size(); i++){
627 modules[pi->
rocid][pi->
slot].push_back(pi);
630 pi->GetSingle(config);
631 if(config) configs[pi->
rocid].insert(config);
641 for(uint32_t i=0; i<f250wrds.size(); i++) modules[f250wrds[i]->rocid][f250wrds[i]->slot];
644 map<uint32_t, map<uint32_t, vector<const Df250PulseIntegral*> > >::iterator it;
645 for(it=modules.begin(); it!=modules.end(); it++){
646 uint32_t rocid = it->first;
649 uint32_t data_bank_idx = buff.size();
651 buff.push_back( (rocid<<16) + 0x1001 );
654 set<const Df250Config*> &confs = configs[rocid];
657 uint32_t config_bank_idx = buff.size();
659 buff.push_back( 0x00550101 );
661 set<const Df250Config*>::iterator it_conf;
662 for(it_conf=confs.begin(); it_conf!=confs.end(); it_conf++){
665 uint32_t header_idx = buff.size();
673 buff[header_idx] = (Nvals<<24) + conf->
slot_mask;
677 buff[config_bank_idx] = buff.size() - config_bank_idx - 1;
691 uint32_t data_block_bank_idx = buff.size();
693 buff.push_back(0x00060101);
696 map<uint32_t, vector<const Df250PulseIntegral*> >::iterator it2;
697 for(it2=it->second.begin(); it2!=it->second.end(); it2++){
698 uint32_t slot = it2->first;
702 for(uint32_t i=0; i<f250tts.size(); i++){
703 if( (f250tts[i]->rocid==rocid) && (f250tts[i]->slot==slot) ){
712 uint32_t itrigger = (tt==NULL) ? (Nevents&0x3FFFFF):tt->
itrigger;
713 uint64_t trig_time = (tt==NULL) ? time(NULL):tt->
time;
716 uint32_t block_header_idx = buff.size();
717 buff.push_back( 0x80040101 + (slot<<22) );
718 buff.push_back( 0x90000000 + (slot<<22) + itrigger);
721 buff.push_back(0x98000000 + ((trig_time>>0 )&0x00FFFFFF));
722 buff.push_back(0x00000000 + ((trig_time>>24)&0x00FFFFFF));
725 vector<const Df250PulseIntegral*> &pis = it2->second;
726 for(uint32_t i=0; i<pis.size(); i++){
753 for(uint32_t i=0; i<f250wrds.size(); i++){
755 if(wrd->
rocid!=rocid || wrd->
slot!=slot)
continue;
761 buff.push_back(0xA0000000 + (wrd->
channel<<23) + (wrd->
samples.size()) );
762 for(uint32_t j=0; j<(wrd->
samples.size()+1)/2; j++){
764 uint32_t idx2 = idx1 + 1;
765 uint32_t sample_1 = wrd->
samples[idx1];
766 uint32_t sample_2 = idx2<wrd->
samples.size() ? wrd->
samples[idx2]:0;
767 uint32_t invalid1 = 0;
768 uint32_t invalid2 = idx2>=wrd->
samples.size();
769 buff.push_back( (invalid1<<29) + (sample_1<<16) + (invalid2<<13) + (sample_2<<0) );
775 uint32_t Nwords_in_block = buff.size()-block_header_idx+1;
776 buff.push_back( 0x88000000 + (slot<<22) + Nwords_in_block );
780 buff[data_block_bank_idx] = buff.size() - data_block_bank_idx - 1;
784 if(f250scalers.size() > 0) {
786 for(
unsigned int ii = 0; ii < f250scalers.size(); ii++){
790 unsigned int sc_crate = scaler->
crate;
792 if(sc_crate == rocid){
794 uint32_t scaler_block_bank_idx = buff.size();
796 buff.push_back(0xEE100101);
799 buff.push_back(scaler->
nsync);
801 buff.push_back(scaler->
version);
804 for(
unsigned int sc_ch = 0; sc_ch < scaler->
fa250_sc.size(); sc_ch++)
805 buff.push_back(scaler->
fa250_sc[sc_ch]);
809 buff[scaler_block_bank_idx] = buff.size() - scaler_block_bank_idx - 1;
817 buff[data_bank_idx] = buff.size() - data_bank_idx - 1;
825 if(f250scalers.size() > 0) {
827 vector <unsigned int> scaler_index;
829 for(
unsigned int ii = 0; ii < f250scalers.size(); ii++){
832 unsigned int sc_crate = scaler->
crate;
837 for(uint32_t jj = 0; jj < f250pis.size(); jj++){
840 if(pi->
rocid == sc_crate){
849 scaler_index.push_back(ii);
854 for(
unsigned int ii = 0; ii < scaler_index.size(); ii++){
856 const Df250Scaler *scaler = f250scalers[scaler_index[ii]];
860 uint32_t data_bank_idx = buff.size();
862 buff.push_back( (scaler->
crate<<16) + 0x1001 );
865 uint32_t scaler_block_bank_idx = buff.size();
867 buff.push_back(0xEE100101);
870 buff.push_back(scaler->
nsync);
872 buff.push_back(scaler->
version);
875 for(
unsigned int sc_ch = 0; sc_ch < scaler->
fa250_sc.size(); sc_ch++)
876 buff.push_back(scaler->
fa250_sc[sc_ch]);
880 buff[scaler_block_bank_idx] = buff.size() - scaler_block_bank_idx - 1;
884 buff[data_bank_idx] = buff.size() - data_bank_idx - 1;
904 vector<const Df250PulseData*> &f250pulses,
905 vector<const Df250TriggerTime*> &f250tts,
906 vector<const Df250WindowRawData*> &f250wrds, vector<const Df250Scaler*> &f250scalers,
912 map<uint32_t, map<uint32_t, vector<const Df250PulseData*> > > modules;
913 map<uint32_t, set<const Df250Config*> > configs;
914 for(uint32_t i=0; i<f250pulses.size(); i++){
917 modules[pulse->
rocid][pulse->
slot].push_back(pulse);
920 pulse->GetSingle(config);
921 if(config) configs[pulse->
rocid].insert(config);
929 for(uint32_t i=0; i<f250wrds.size(); i++) modules[f250wrds[i]->rocid][f250wrds[i]->slot];
932 map<uint32_t, map<uint32_t, vector<const Df250PulseData*> > >::iterator it;
933 for(it=modules.begin(); it!=modules.end(); it++){
934 uint32_t rocid = it->first;
938 uint32_t data_bank_idx = buff.size();
940 buff.push_back( (rocid<<16) + 0x1001 );
944 set<const Df250Config*> &confs = configs[rocid];
947 uint32_t config_bank_idx = buff.size();
949 buff.push_back( 0x00550101 );
951 set<const Df250Config*>::iterator it_conf;
952 for(it_conf=confs.begin(); it_conf!=confs.end(); it_conf++){
955 uint32_t header_idx = buff.size();
963 buff[header_idx] = (Nvals<<24) + conf->
slot_mask;
967 buff[config_bank_idx] = buff.size() - config_bank_idx - 1;
981 uint32_t data_block_bank_idx = buff.size();
983 buff.push_back(0x00060101);
986 map<uint32_t, vector<const Df250PulseData*> >::iterator it2;
987 for(it2=it->second.begin(); it2!=it->second.end(); it2++){
988 uint32_t slot = it2->first;
992 for(uint32_t i=0; i<f250tts.size(); i++){
993 if( (f250tts[i]->rocid==rocid) && (f250tts[i]->slot==slot) ){
1002 uint32_t itrigger = (tt==NULL) ? (Nevents&0x3FFFFF):tt->
itrigger;
1003 uint64_t trig_time = (tt==NULL) ? time(NULL):tt->
time;
1006 uint32_t block_header_idx = buff.size();
1007 buff.push_back( 0x80040101 + (slot<<22) );
1008 buff.push_back( 0x90000000 + (slot<<22) + itrigger);
1011 buff.push_back(0x98000000 + ((trig_time>>0 )&0x00FFFFFF));
1012 buff.push_back(0x00000000 + ((trig_time>>24)&0x00FFFFFF));
1015 vector<const Df250PulseData*> &pulses = it2->second;
1016 for(uint32_t i=0; i<pulses.size(); i++){
1023 buff.push_back(0xC8000000 + (0x01<<19) + (pulse->
channel<<15)
1040 for(uint32_t i=0; i<f250wrds.size(); i++){
1042 if(wrd->
rocid!=rocid || wrd->
slot!=slot)
continue;
1048 buff.push_back(0xA0000000 + (wrd->
channel<<23) + (wrd->
samples.size()) );
1049 for(uint32_t j=0; j<(wrd->
samples.size()+1)/2; j++){
1050 uint32_t idx1 = 2*j;
1051 uint32_t idx2 = idx1 + 1;
1052 uint32_t sample_1 = wrd->
samples[idx1];
1053 uint32_t sample_2 = idx2<wrd->
samples.size() ? wrd->
samples[idx2]:0;
1054 uint32_t invalid1 = 0;
1055 uint32_t invalid2 = idx2>=wrd->
samples.size();
1056 buff.push_back( (invalid1<<29) + (sample_1<<16) + (invalid2<<13) + (sample_2<<0) );
1062 uint32_t Nwords_in_block = buff.size()-block_header_idx+1;
1063 buff.push_back( 0x88000000 + (slot<<22) + Nwords_in_block );
1067 buff[data_block_bank_idx] = buff.size() - data_block_bank_idx - 1;
1071 if(f250scalers.size() > 0) {
1073 for(
unsigned int ii = 0; ii < f250scalers.size(); ii++){
1077 unsigned int sc_crate = scaler->
crate;
1079 if(sc_crate == rocid){
1082 uint32_t scaler_block_bank_idx = buff.size();
1084 buff.push_back(0xEE100101);
1087 buff.push_back(scaler->
nsync);
1089 buff.push_back(scaler->
version);
1092 for(
unsigned int sc_ch = 0; sc_ch < scaler->
fa250_sc.size(); sc_ch++)
1093 buff.push_back(scaler->
fa250_sc[sc_ch]);
1097 buff[scaler_block_bank_idx] = buff.size() - scaler_block_bank_idx - 1;
1104 buff[data_bank_idx] = buff.size() - data_bank_idx - 1;
1111 if(f250scalers.size() > 0) {
1113 vector <unsigned int> scaler_index;
1115 for(
unsigned int ii = 0; ii < f250scalers.size(); ii++){
1118 unsigned int sc_crate = scaler->
crate;
1121 int crate_found = 0;
1123 for(uint32_t jj = 0; jj < f250pulses.size(); jj++){
1126 if(pulse->
rocid == sc_crate){
1133 if(crate_found == 0){
1134 scaler_index.push_back(ii);
1140 for(
unsigned int ii = 0; ii < scaler_index.size(); ii++){
1142 const Df250Scaler *scaler = f250scalers[scaler_index[ii]];
1146 uint32_t data_bank_idx = buff.size();
1148 buff.push_back( (scaler->
crate<<16) + 0x1001 );
1151 uint32_t scaler_block_bank_idx = buff.size();
1153 buff.push_back(0xEE100101);
1156 buff.push_back(scaler->
nsync);
1158 buff.push_back(scaler->
version);
1161 for(
unsigned int sc_ch = 0; sc_ch < scaler->
fa250_sc.size(); sc_ch++)
1162 buff.push_back(scaler->
fa250_sc[sc_ch]);
1166 buff[scaler_block_bank_idx] = buff.size() - scaler_block_bank_idx - 1;
1170 buff[data_bank_idx] = buff.size() - data_bank_idx - 1;
1184 vector<const Df125PulseIntegral*> &f125pis,
1185 vector<const Df125CDCPulse*> &f125cdcpulses,
1186 vector<const Df125FDCPulse*> &f125fdcpulses,
1187 vector<const Df125TriggerTime*> &f125tts,
1188 vector<const Df125WindowRawData*> &f125wrds,
1189 vector<const Df125Config*> &f125configs,
1194 map<uint32_t, set<uint32_t> > modules;
1195 map<uint32_t, map<uint32_t, vector<const Df125PulseIntegral*> > > pi_hits;
1196 map<uint32_t, map<uint32_t, vector<const Df125CDCPulse* > > > cdc_hits;
1197 map<uint32_t, map<uint32_t, vector<const Df125FDCPulse* > > > fdc_hits;
1198 map<uint32_t, map<uint32_t, vector<const Df125WindowRawData*> > > wrd_hits;
1199 for(uint32_t i=0; i<f125pis.size(); i++){
1203 pi_hits[hit->
rocid][hit->
slot].push_back( hit );
1206 for(uint32_t i=0; i<f125cdcpulses.size(); i++){
1210 cdc_hits[hit->
rocid][hit->
slot].push_back( hit );
1213 for(uint32_t i=0; i<f125fdcpulses.size(); i++){
1217 fdc_hits[hit->
rocid][hit->
slot].push_back( hit );
1220 for(uint32_t i=0; i<f125wrds.size(); i++){
1224 wrd_hits[hit->
rocid][hit->
slot].push_back( hit );
1229 map<uint32_t, set<const Df125Config*> > configs;
1230 for(uint32_t i=0; i<f125configs.size(); i++){
1232 configs[config->
rocid].insert(config);
1236 map<uint32_t, set<uint32_t> >::iterator it;
1237 for(it=modules.begin(); it!=modules.end(); it++){
1238 uint32_t rocid = it->first;
1241 uint32_t data_bank_idx = buff.size();
1243 buff.push_back( (rocid<<16) + 0x1001 );
1246 set<const Df125Config*> &confs = configs[rocid];
1249 uint32_t config_bank_idx = buff.size();
1251 buff.push_back( 0x00550101 );
1253 set<const Df125Config*>::iterator it_conf;
1254 for(it_conf=confs.begin(); it_conf!=confs.end(); it_conf++){
1257 uint32_t header_idx = buff.size();
1267 if(conf->
PL != 0xFFFF) {buff.push_back( (
kPARAM125_PL <<16) + conf->
PL ); Nvals++;}
1268 if(conf->
NW != 0xFFFF) {buff.push_back( (
kPARAM125_NW <<16) + conf->
NW ); Nvals++;}
1270 if(conf->
P1 != 0xFFFF) {buff.push_back( (
kPARAM125_P1 <<16) + conf->
P1 ); Nvals++;}
1271 if(conf->
P2 != 0xFFFF) {buff.push_back( (
kPARAM125_P2 <<16) + conf->
P2 ); Nvals++;}
1272 if(conf->
PG != 0xFFFF) {buff.push_back( (
kPARAM125_PG <<16) + conf->
PG ); Nvals++;}
1273 if(conf->
IE != 0xFFFF) {buff.push_back( (
kPARAM125_IE <<16) + conf->
IE ); Nvals++;}
1274 if(conf->
H != 0xFFFF) {buff.push_back( (
kPARAM125_H <<16) + conf->
H ); Nvals++;}
1275 if(conf->
TH != 0xFFFF) {buff.push_back( (
kPARAM125_TH <<16) + conf->
TH ); Nvals++;}
1276 if(conf->
TL != 0xFFFF) {buff.push_back( (
kPARAM125_TL <<16) + conf->
TL ); Nvals++;}
1281 buff[header_idx] = (Nvals<<24) + conf->
slot_mask;
1285 buff[config_bank_idx] = buff.size() - config_bank_idx - 1;
1298 uint32_t data_block_bank_idx = buff.size();
1300 buff.push_back(0x00100101);
1303 set<uint32_t>::iterator it2;
1304 for(it2=it->second.begin(); it2!=it->second.end(); it2++){
1305 uint32_t slot = *it2;
1309 for(uint32_t i=0; i<f125tts.size(); i++){
1310 if( (f125tts[i]->rocid==rocid) && (f125tts[i]->slot==slot) ){
1319 uint32_t itrigger = (tt==NULL) ? (Nevents&0x3FFFFF):tt->DDAQAddress::itrigger;
1320 uint64_t trig_time = (tt==NULL) ? time(NULL):tt->
time;
1323 uint32_t block_header_idx = buff.size();
1324 buff.push_back( 0x80080101 + (slot<<22) );
1325 buff.push_back( 0x90000000 + itrigger);
1328 buff.push_back(0x98000000 + ((trig_time>>0 )&0x00FFFFFF));
1329 buff.push_back(0x00000000 + ((trig_time>>24)&0x00FFFFFF));
1332 vector<const Df125PulseIntegral*> &pis = pi_hits[rocid][slot];
1333 for(uint32_t i=0; i<pis.size(); i++){
1342 buff.push_back(0xB8000000 + (pi->
channel<<20) + (pi->
integral&0x7FFFF) );
1357 vector<const Df125CDCPulse*> &cdcpulses = cdc_hits[rocid][slot];
1358 for(uint32_t i=0; i<cdcpulses.size(); i++){
1362 buff.push_back( pulse->
word1 );
1363 buff.push_back( pulse->
word2 );
1368 vector<const Df125FDCPulse*> &fdcpulses = fdc_hits[rocid][slot];
1369 for(uint32_t i=0; i<fdcpulses.size(); i++){
1373 buff.push_back( pulse->
word1 );
1374 buff.push_back( pulse->
word2 );
1382 vector<const Df125WindowRawData*> &wrds = wrd_hits[rocid][slot];
1383 for(uint32_t i=0; i<wrds.size(); i++){
1391 for(uint32_t j=0; j<(wrd->
samples.size()+1)/2; j++){
1392 uint32_t idx1 = 2*j;
1393 uint32_t idx2 = idx1 + 1;
1394 uint32_t sample_1 = wrd->
samples[idx1];
1395 uint32_t sample_2 = idx2<wrd->
samples.size() ? wrd->
samples[idx2]:0;
1396 uint32_t invalid1 = 0;
1397 uint32_t invalid2 = idx2>=wrd->
samples.size();
1398 buff.push_back( (invalid1<<29) + (sample_1<<16) + (invalid2<<13) + (sample_2<<0) );
1404 uint32_t Nwords_in_block = buff.size()-block_header_idx+1;
1405 buff.push_back( 0x88000000 + (slot<<22) + Nwords_in_block );
1409 buff[data_block_bank_idx] = buff.size() - data_block_bank_idx - 1;
1412 buff[data_bank_idx] = buff.size() - data_bank_idx - 1;
1421 vector<const DDIRCTDCHit*> &dirctdchits,
1422 vector<const DDIRCTriggerTime*> &dirctts,
1427 map<uint32_t, map<uint32_t, map<uint32_t, vector<const DDIRCTDCHit*> > > > modules;
1429 for(uint32_t i=0; i<dirctdchits.size(); i++){
1432 modules[tdchit->
rocid][tdchit->
slot][tdchit->
dev_id].push_back(tdchit);
1443 for(
auto const &it : modules ) {
1444 uint32_t rocid = it.first;
1447 uint32_t data_bank_idx = buff.size();
1449 buff.push_back( (rocid<<16) + 0x1001 );
1461 uint32_t data_block_bank_idx = buff.size();
1463 buff.push_back(0x00280101);
1468 for(
auto const &it2 : it.second ) {
1469 uint32_t slot = it2.first;
1473 for(uint32_t i=0; i<dirctts.size(); i++){
1474 if( (dirctts[i]->rocid==rocid) && (dirctts[i]->slot==slot) ){
1483 uint32_t itrigger = (tt==NULL) ? (Nevents&0x3FFFFF):tt->
itrigger;
1484 uint64_t trig_time = (tt==NULL) ? time(NULL):tt->
time;
1487 uint32_t block_header_idx = buff.size();
1488 buff.push_back( 0x80280101 + (slot<<22) );
1489 buff.push_back( 0x90000000 + (slot<<22) + itrigger);
1492 buff.push_back(0x98000000 + ((trig_time>>0 )&0x00FFFFFF));
1493 buff.push_back(0x00000000 + ((trig_time>>24)&0x00FFFFFF));
1496 for(
auto const &it3 : it2.second ) {
1497 uint32_t device_id = it3.first;
1501 buff.push_back(0xB8000000 + (device_id<<22) + (it3.second[0]->ievent_cnt));
1506 for(
auto const tdchit : it3.second ) {
1510 buff.push_back(0xC0000000 + (tdchit->edge<<26) + (tdchit->channel_fpga<<16) + (tdchit->time));
1515 uint32_t Nwords_in_block = buff.size()-block_header_idx+1;
1516 buff.push_back( 0x88000000 + (slot<<22) + Nwords_in_block );
1520 buff[data_block_bank_idx] = buff.size() - data_block_bank_idx - 1;
1523 buff[data_bank_idx] = buff.size() - data_bank_idx - 1;
1533 vector<const DEPICSvalue*> epicsValues)
const
1550 if(epicsValues.size() == 0)
return;
1553 uint32_t epics_bank_idx = buff.size();
1555 buff.push_back( (0x60<<16) + (0xD<<8) + (0x1<<0) );
1558 buff.push_back( (0x61<<24) + (0x1<<16) + (1<<0) );
1559 buff.push_back( (uint32_t)epicsValues[0]->timestamp );
1562 for(uint32_t i=0; i<epicsValues.size(); i++){
1565 uint32_t Nbytes = str.size()+1;
1566 uint32_t Nwords = (Nbytes+3)/4;
1567 uint32_t Npad = (Nwords*4) - Nbytes;
1569 buff.push_back( (0x62<<24) + (Npad<<22) + (0x7<<16) + (Nwords<<0) );
1572 uint32_t buff_str_idx = buff.size();
1573 buff.resize( buff_str_idx + Nwords );
1575 unsigned char *ichar = (
unsigned char*)&buff[buff_str_idx];
1576 for(
unsigned int j=0; j<Nbytes; j++) ichar[j] = str[j];
1580 buff[epics_bank_idx] = buff.size() - epics_bank_idx - 1;
1587 uint64_t event_status,
1596 uint32_t eventtag_bank_idx = buff.size();
1598 uint64_t L3_status = 0;
1599 uint32_t L3_decision = 0;
1600 uint32_t L3_algorithm = 0;
1602 L3_status = l3trigger->
status;
1610 switch(L3_decision){
1620 buff.push_back( 0x0F561001 );
1622 buff.push_back( 0x00560101 );
1625 buff.push_back( (event_status>> 0)&0xFFFFFFFF );
1626 buff.push_back( (event_status>>32)&0xFFFFFFFF );
1629 buff.push_back( (L3_status>> 0)&0xFFFFFFFF );
1630 buff.push_back( (L3_status>>32)&0xFFFFFFFF );
1633 buff.push_back( L3_decision );
1636 buff.push_back( L3_algorithm );
1639 buff[eventtag_bank_idx] = buff.size() - eventtag_bank_idx - 1;
1640 buff[eventtag_bank_idx+2] = buff[eventtag_bank_idx] - 2;
1647 template<
typename T,
typename M,
typename F>
1667 uint32_t rocid = p.first;
1668 uint32_t crate_idx = buff.size();
1670 buff.push_back( (0x71<<16) + (0x0C<<8) + (rocid<<0) );
1672 for(
auto c : p.second){
1673 uint32_t slot =
c->slot;
1674 uint32_t modtype = modFunc(
c);
1675 uint32_t tag = (slot<<5) + (modtype);
1676 uint32_t Nwords =
sizeof(T)/
sizeof(uint32_t);
1677 buff.push_back( (tag<<20) + (0x01<<16) + (Nwords));
1678 uint32_t *d = (uint32_t*)&
c->rocid;
1679 for(uint32_t j=0; j<Nwords; j++) buff.push_back(*d++);
1682 buff[crate_idx] = buff.size() - crate_idx - 1;
1694 vector<const Df250BORConfig*> vDf250BORConfig;
1695 vector<const Df125BORConfig*> vDf125BORConfig;
1696 vector<const DF1TDCBORConfig*> vDF1TDCBORConfig;
1697 vector<const DCAEN1290TDCBORConfig*> vDCAEN1290TDCBORConfig;
1699 loop->Get(vDf250BORConfig);
1700 loop->Get(vDf125BORConfig);
1701 loop->Get(vDF1TDCBORConfig);
1702 loop->Get(vDCAEN1290TDCBORConfig);
1704 uint32_t Nconfig_objs = vDf250BORConfig.size() + vDf125BORConfig.size() + vDF1TDCBORConfig.size() + vDCAEN1290TDCBORConfig.size();
1705 if(Nconfig_objs == 0)
return;
1708 map<uint32_t, decltype(vDf250BORConfig)> mDf250BORConfig;
1709 map<uint32_t, decltype(vDf125BORConfig)> mDf125BORConfig;
1710 map<uint32_t, decltype(vDF1TDCBORConfig)> mDF1TDCBORConfig;
1711 map<uint32_t, decltype(vDCAEN1290TDCBORConfig)> mDCAEN1290TDCBORConfig;
1712 for(
auto c : vDf250BORConfig) mDf250BORConfig[
c->rocid].push_back(
c);
1713 for(
auto c : vDf125BORConfig) mDf125BORConfig[
c->rocid].push_back(
c);
1714 for(
auto c : vDF1TDCBORConfig) mDF1TDCBORConfig[
c->rocid].push_back(
c);
1715 for(
auto c : vDCAEN1290TDCBORConfig) mDCAEN1290TDCBORConfig[
c->rocid].push_back(
c);
1718 uint32_t bor_bank_idx = buff.size();
1720 buff.push_back( (0x70<<16) + (0x0E<<8) + (0x1<<0) );
1726 WriteBORSingle<F1TDCconfig>(buff, mDF1TDCBORConfig, [](
const DF1TDCBORConfig *
c){
return c->nchips==8 ? 0x3:0x4;});
1730 buff[bor_bank_idx] = buff.size() - bor_bank_idx - 1;
1745 uint32_t data_bank_len_idx = buff.size();
1747 buff.push_back(0x00011001);
1750 uint32_t trigger_bank_len_idx = buff.size();
1752 buff.push_back(0xEE020100);
1755 buff.push_back(l1info->
nsync);
1763 for(uint32_t i=0; i<l1info->
gtp_sc.size(); i++)
1764 buff.push_back(l1info->
gtp_sc[i]);
1767 for(uint32_t i=0; i<l1info->
fp_sc.size(); i++)
1768 buff.push_back(l1info->
fp_sc[i]);
1771 for(uint32_t i=0; i<l1info->
gtp_rate.size(); i++)
1772 buff.push_back(l1info->
gtp_rate[i]);
1775 for(uint32_t i=0; i<l1info->
fp_rate.size(); i++)
1776 buff.push_back(l1info->
fp_rate[i]);
1779 buff[trigger_bank_len_idx] = buff.size() - trigger_bank_len_idx - 1;
1780 buff[data_bank_len_idx] = buff.size() - data_bank_len_idx - 1;
1790 uint32_t data_bank_len_idx = buff.size();
1792 buff.push_back(0x00011001);
1796 uint32_t vertex_bank_len_idx = buff.size();
1798 buff.push_back(0x1D010100);
1806 uint64_t vertex_x_out, vertex_y_out, vertex_z_out, vertex_t_out;
1811 memcpy(&vertex_x_out, &vertex_x,
sizeof(
double));
1812 buff.push_back( (vertex_x_out>> 0)&0xFFFFFFFF );
1813 buff.push_back( (vertex_x_out>>32)&0xFFFFFFFF );
1814 memcpy(&vertex_y_out, &vertex_y,
sizeof(
double));
1815 buff.push_back( (vertex_y_out>> 0)&0xFFFFFFFF );
1816 buff.push_back( (vertex_y_out>>32)&0xFFFFFFFF );
1817 memcpy(&vertex_z_out, &vertex_z,
sizeof(
double));
1818 buff.push_back( (vertex_z_out>> 0)&0xFFFFFFFF );
1819 buff.push_back( (vertex_z_out>>32)&0xFFFFFFFF );
1820 memcpy(&vertex_t_out, &vertex_t,
sizeof(
double));
1821 buff.push_back( (vertex_t_out>> 0)&0xFFFFFFFF );
1822 buff.push_back( (vertex_t_out>>32)&0xFFFFFFFF );
1826 uint64_t vertex_chi_sq_out;
1828 memcpy(&vertex_chi_sq_out, &vertex_chi_sq,
sizeof(
double));
1829 buff.push_back( (vertex_chi_sq_out>>32)&0xFFFFFFFF );
1830 buff.push_back( (vertex_chi_sq_out>> 0)&0xFFFFFFFF );
1833 buff[vertex_bank_len_idx] = buff.size() - vertex_bank_len_idx - 1;
1834 buff[data_bank_len_idx] = buff.size() - data_bank_len_idx - 1;
1845 uint32_t data_bank_len_idx = buff.size();
1847 buff.push_back(0x00011001);
1851 uint32_t rftime_bank_len_idx = buff.size();
1853 buff.push_back(0x1D020100);
1861 uint64_t time_out, time_var_out;
1862 double time = rftime->
dTime;
1866 memcpy(&time_out, &time,
sizeof(
double));
1867 buff.push_back( (time_out>> 0)&0xFFFFFFFF );
1868 buff.push_back( (time_out>>32)&0xFFFFFFFF );
1869 memcpy(&time_var_out, &time_var,
sizeof(
double));
1870 buff.push_back( (time_var_out>> 0)&0xFFFFFFFF );
1871 buff.push_back( (time_var_out>>32)&0xFFFFFFFF );
1874 buff[rftime_bank_len_idx] = buff.size() - rftime_bank_len_idx - 1;
1875 buff[data_bank_len_idx] = buff.size() - data_bank_len_idx - 1;
void Writef250Data(vector< uint32_t > &buff, vector< const Df250PulseData * > &f250pulses, vector< const Df250TriggerTime * > &f250tts, vector< const Df250WindowRawData * > &f250wrds, vector< const Df250Scaler * > &f250scalers, unsigned int Nevents) const
set< uint32_t > rocs_to_write_out
void WriteDVertexData(JEventLoop *loop, vector< uint32_t > &buff, const DVertex *vertex) const
void WriteDEventRFBunchData(JEventLoop *loop, vector< uint32_t > &buff, const DEventRFBunch *rftime) const
uint32_t pulse_number
from Pulse Pedestal Data word
bool emulated
true if made from Window Raw Data
uint32_t pulse_peak
from Pulse Pedestal Data word
vector< uint32_t > fa250_sc
bool emulated
true if made from Window Raw Data
uint32_t quality_factor
from Pulse Integral Data word
uint32_t pulse_number
from Pulse Time Data word
vector< uint16_t > samples
void WriteEventTagData(vector< uint32_t > &buff, uint64_t event_status, const DL3Trigger *l3trigger) const
uint32_t pulse_peak
from Pulse Pedestal Data word
uint32_t word2
second word
void WriteDircData(vector< uint32_t > &buff, vector< const DDIRCTDCHit * > &dirctdchits, vector< const DDIRCTriggerTime * > &dirctts, unsigned int Nevents) const
bool emulated
true if made from Window Raw Data
void WriteTSSyncData(JEventLoop *loop, vector< uint32_t > &buff, const DL1Info *l1info) const
bool emulated
true if made from Window Raw Data
bool emulated
true if made from Window Raw Data
uint32_t pulse_number
from Pulse Time Data word
uint32_t time
from Pulse Time Data word
vector< uint16_t > samples
uint32_t pulse_number
from Pulse Pedestal Data word
uint32_t quality_factor
from Pulse Time Data word
uint32_t nsamples_over_threshold
bool emulated
true if made from Window Raw Data
uint32_t pulse_number
from Pulse Integral Data word
uint32_t pedestal
from Pulse Pedestal Data word
DLorentzVector dSpacetimeVertex
bool emulated
true if emulated values are copied to the main input
void WriteBORData(JEventLoop *loop, vector< uint32_t > &buff) const
uint32_t time
from Pulse Time Data word
bool emulated
true if made from Window Raw Data
uint32_t integral
from Pulse Integral Data word
void WriteBuiltTriggerBank(vector< uint32_t > &buff, JEventLoop *loop, vector< const DCODAROCInfo * > &coda_rocinfos, vector< const DCODAEventInfo * > &coda_events) const
vector< uint32_t > gtp_sc
uint32_t integral
from Pulse Integral Data word
DetectorSystem_t dTimeSource
void WriteEventToBuffer(JEventLoop *loop, vector< uint32_t > &buff, vector< const JObject * > objects_to_save) const
L3_decision_t L3_decision
uint32_t pedestal
from Pulse Pedestal Data word
void WriteF1Data(vector< uint32_t > &buff, vector< const DF1TDCHit * > &F1hits, vector< const DF1TDCTriggerTime * > &F1tts, vector< const DF1TDCConfig * > &F1configs, unsigned int Nevents) const
unsigned int dNumParticleVotes
vector< uint32_t > fp_rate
uint32_t word2
second word
bool emulated
true if emulated values are copied to the main input
void Writef125Data(vector< uint32_t > &buff, vector< const Df125PulseIntegral * > &f125pis, vector< const Df125CDCPulse * > &f125cdcpulses, vector< const Df125FDCPulse * > &f125fdcpulses, vector< const Df125TriggerTime * > &f125tts, vector< const Df125WindowRawData * > &f125wrds, vector< const Df125Config * > &f125configs, unsigned int Nevents) const
void WriteBORSingle(vector< uint32_t > &buff, M m, F &&modFunc) const
vector< uint32_t > gtp_rate
void WriteCAEN1290Data(vector< uint32_t > &buff, vector< const DCAEN1290TDCHit * > &caen1290hits, vector< const DCAEN1290TDCConfig * > &caen1290configs, unsigned int Nevents) const
void WriteEPICSData(vector< uint32_t > &buff, vector< const DEPICSvalue * > epicsValues) const
A DEPICSvalue object holds information for a single EPICS value read from the data stream...