@@ -133,7 +133,7 @@ class sbndaq::SBNDXARAPUCADecoder : public art::EDProducer {
133133 bool fverbose; /* *< If `true` it increases verbosity of console output for detailed processing steps. */
134134
135135 // Class methods.
136- void decode_fragment (uint64_t timestamp, uint64_t & nominal_frag_timestamp, int32_t & nominal_TTT, std::vector<size_t > & fragment_indices, const artdaq::Fragment& fragment, std::vector <raw::OpDetWaveform>& prod_wvfms, std::vector<std::vector<uint16_t >>& wvfms);
136+ void decode_fragment (uint64_t timestamp, uint64_t & nominal_frag_timestamp, int32_t & nominal_TTT, std::vector<size_t > & fragment_indices, const artdaq::Fragment& fragment, std::vector <raw::OpDetWaveform>& prod_wvfms, std::vector<std::vector<uint16_t >>& wvfms, bool last_one );
137137
138138 bool get_ptb_hlt_timestamp (art::Event& e, uint64_t corr_raw_timestamp, uint64_t & timestamp, uint16_t & hlt_code);
139139 bool get_spec_tdc_etrig_timestamp (art::Event& e, uint64_t corr_raw_timestamp, uint64_t & timestamp);
@@ -310,6 +310,7 @@ void sbndaq::SBNDXARAPUCADecoder::produce(art::Event& e)
310310 std::cout << " wvfms_size: " << wvfms.size () << std::endl;
311311 int32_t nominal_TTT = TTT_DEFAULT;
312312 uint64_t nominal_frag_timestamp = TTT_DEFAULT;
313+ bool last_one = false ;
313314
314315 if (fverbose | fdebug_fragments_handle) std::cout << " \n > SBNDXARAPUCADecoder::produce: searching for V1740 fragments..." << std::endl;
315316
@@ -347,7 +348,8 @@ void sbndaq::SBNDXARAPUCADecoder::produce(art::Event& e)
347348
348349 for (size_t f = 0 ; f < num_caen_fragments; f++) {
349350 const artdaq::Fragment fragment = *container_fragment[f].get ();
350- decode_fragment (timestamp, nominal_frag_timestamp, nominal_TTT, fragment_indices, fragment, *prod_wvfms, wvfms);
351+ last_one = f == (num_caen_fragments - 1 );
352+ decode_fragment (timestamp, nominal_frag_timestamp, nominal_TTT, fragment_indices, fragment, *prod_wvfms, wvfms, last_one);
351353 } // End CAEN V1740 fragments loop.
352354 }
353355 } // End Container fragments loop.
@@ -359,7 +361,8 @@ void sbndaq::SBNDXARAPUCADecoder::produce(art::Event& e)
359361 // It searches for all CAEN V1740 fragments.
360362 for (size_t f = 0 ; f < frag_handle_size; f++) {
361363 const artdaq::Fragment fragment = fragment_handle->at (f);
362- decode_fragment (timestamp, nominal_frag_timestamp, nominal_TTT, fragment_indices, fragment, *prod_wvfms, wvfms);
364+ last_one = f == (frag_handle_size - 1 );
365+ decode_fragment (timestamp, nominal_frag_timestamp, nominal_TTT, fragment_indices, fragment, *prod_wvfms, wvfms, last_one);
363366 } // End CAEN V1740 fragments loop.
364367 }
365368 } // End extracting CAEN V1740 fragments.
@@ -606,9 +609,7 @@ bool sbndaq::SBNDXARAPUCADecoder::get_ptb_hlt_timestamp(art::Event& e, uint64_t
606609 *
607610 */
608611
609- void sbndaq::SBNDXARAPUCADecoder::decode_fragment (uint64_t timestamp, uint64_t & nominal_frag_timestamp, int32_t & nominal_TTT, std::vector<size_t > & fragment_indices, const artdaq::Fragment& fragment, std::vector <raw::OpDetWaveform>& prod_wvfms, std::vector<std::vector<uint16_t >>& wvfms) {
610- std::cout << " decode_wvfms_size: " << wvfms.size () << std::endl;
611-
612+ void sbndaq::SBNDXARAPUCADecoder::decode_fragment (uint64_t timestamp, uint64_t & nominal_frag_timestamp, int32_t & nominal_TTT, std::vector<size_t > & fragment_indices, const artdaq::Fragment& fragment, std::vector <raw::OpDetWaveform>& prod_wvfms, std::vector<std::vector<uint16_t >>& wvfms, bool last_one) {
612613 auto fragment_id = fragment.fragmentID () - ffragment_id_offset;
613614 auto it = std::find (fboard_id_list.begin (), fboard_id_list.end (), fragment_id);
614615 size_t board_idx;
@@ -678,8 +679,6 @@ void sbndaq::SBNDXARAPUCADecoder::decode_fragment(uint64_t timestamp, uint64_t&
678679 std::cout << " \t Number of samples per group (this fragment): " << num_samples_per_group << std::endl;
679680 }
680681
681- // std::vector <std::vector <uint16_t> > wvfms(num_channels, std::vector<uint16_t>(num_samples_per_wvfm, 0));
682-
683682 // =============== Extracts timing information for this fragment =============== //
684683
685684 uint64_t frag_timestamp = fragment.timestamp (); // ns.
@@ -694,13 +693,7 @@ void sbndaq::SBNDXARAPUCADecoder::decode_fragment(uint64_t timestamp, uint64_t&
694693 // // =============== Start decoding the waveforms =============== //
695694 std::vector <std::vector <uint16_t > > fragment_wvfms (num_channels, std::vector<uint16_t >(num_samples_per_wvfm, 0 ));
696695 decode_waveforms (fragment, fragment_wvfms, header_size, num_channels, num_samples_per_wvfm, num_words_per_wvfms, num_samples_per_group);
697- //
698- // // =============== Shifts timing to the selected timing reference frame =============== //
699- //
700- // shift_time(fragment, TTT_ticks, TTT_end_ns, timestamp, num_samples_per_wvfm, ini_wvfm_timestamp, end_wvfm_timestamp);
701- // dump_waveforms(prod_wvfms, wvfms, fragment_indices, board_idx, num_channels, ini_wvfm_timestamp, end_wvfm_timestamp);
702- // combine_waveforms(wvfms, fragment_wvfms, num_channels);
703-
696+
704697 is_nominal_length = (num_nominal_samples_per_wvfm == num_samples_per_wvfm);
705698 is_first = (fragment_indices[board_idx] == 0 );
706699
@@ -721,8 +714,15 @@ void sbndaq::SBNDXARAPUCADecoder::decode_fragment(uint64_t timestamp, uint64_t&
721714 std::cout << " EXTENDED fragment " << std::endl;
722715 combine_waveforms (wvfms, fragment_wvfms, num_channels);
723716 }
724-
717+
725718 fragment_indices[board_idx]++;
719+
720+ if (last_one) {
721+ std::cout << " LAST fragment " << std::endl;
722+ shift_time (TTT_ticks, nominal_TTT, nominal_frag_timestamp, timestamp, num_nominal_samples_per_wvfm, ini_wvfm_timestamp, end_wvfm_timestamp);
723+ dump_waveforms (prod_wvfms, wvfms, fragment_indices, board_idx, num_channels, ini_wvfm_timestamp, end_wvfm_timestamp);
724+ }
725+
726726 }
727727}
728728
0 commit comments