25 for( UInt_t i = 0; i < 8; i++ )
44 if( std::string(
header_id).substr(0,8) !=
"EBYEDATA" ) {
46 std::cerr <<
"Bad header in block " << nblock << std::endl;
86 if(
word & 0xC000000000000000LL ) {
90 if(
word & 0x00000000C0000000LL ) {
128 for( UInt_t i = 0; i < real_DataLen; i++ ) {
164 std::cerr <<
"WARNING: WRONG TYPE! word 0: " << std::bitset<32>{
word_0};
165 std::cerr <<
", my_type: " << (int)
my_type;
166 std::cerr <<
", in block: " << nblock << std::endl;
183 unsigned int ADCchanIdent = (
word_0 >> 16) & 0x0FFF;
184 my_sfp_id = (ADCchanIdent >> 10) & 0x0003;
194 std::cerr <<
"Bad FEBEX event with SFP = " << (int)
my_sfp_id;
196 std::cerr <<
", ch_id = " << (int)
my_ch_id;
197 std::cerr <<
", data_id = " << (int)
my_data_id << std::endl;
198 std::cerr <<
" word_0 = " << std::hex <<
word_0 << std::dec <<
" = ";
199 std::cerr << std::bitset<32>{
word_0} << std::endl;
200 std::cerr <<
" word_1 = " << std::hex <<
word_1 << std::dec <<
" = ";
201 std::cerr << std::bitset<32>{
word_1} << std::endl;
235 for( UInt_t j = 0; j <
nsamples/4; j++ ){
238 ULong64_t sample_packet =
GetWord(++pos);
240 UInt_t block_test = ( sample_packet >> 32 ) & 0x00000000FFFFFFFF;
248 unsigned char trace_test = 0;
250 if( trace_test == 0 && block_test != 0x5E5E5E5E ){
260 febex_data->AddSample( ( sample_packet >> 32 ) & 0x000000000000FFFF );
261 febex_data->AddSample( ( sample_packet >> 48 ) & 0x000000000000FFFF );
262 febex_data->AddSample( sample_packet & 0x000000000000FFFF );
263 febex_data->AddSample( ( sample_packet >> 16 ) & 0x000000000000FFFF );
424 unsigned long long int time_corr;
446 if( !
first_data[
febex_data->GetSfp()] && ( sfp_check > 1000e9 || sfp_check < -1000e9 ) && nblock > 1 ){
448 std::cerr <<
"Timestamp mash in SFP = " << std::dec << (int)
febex_data->GetSfp();
449 std::cerr <<
", board = " << (int)
febex_data->GetBoard();
450 std::cerr <<
", channel = " << (int)
febex_data->GetChannel();
451 std::cerr <<
":\n\t" << std::hex <<
febex_data->GetTime()/10;
453 std::cerr << std::dec << std::endl;
462 board_check > 240e9 ) {
464 std::cerr <<
"Timestamp jump in SFP = " << std::dec << (int)
febex_data->GetSfp();
465 std::cerr <<
", board = " << (int)
febex_data->GetBoard();
466 std::cerr <<
", channel = " << (int)
febex_data->GetChannel();
467 std::cerr <<
":\n\t" << std::hex <<
febex_data->GetTime()/10;
469 std::cerr << std::dec << std::endl;
482 channel_check < 0 ) {
484 std::cerr <<
"Timestamp warp in SFP = " << std::dec << (int)
febex_data->GetSfp();
485 std::cerr <<
", board = " << (int)
febex_data->GetBoard();
486 std::cerr <<
", channel = " << (int)
febex_data->GetChannel();
487 std::cerr <<
":\n\t" << std::hex <<
febex_data->GetTime()/10;
489 std::cerr << std::dec << std::endl;
508 unsigned int adc_tmp_value;
518 std::cerr <<
" in SFP " << (int)
febex_data->GetSfp() << std::endl;
519 std::cerr <<
", board " << (int)
febex_data->GetBoard() << std::endl;
520 std::cerr <<
", channel " << (int)
febex_data->GetChannel() << std::endl;
521 std::cout <<
"\tDefault to Qshort" << std::endl;
557 std::cout <<
"EBIS period detected = " <<
ebis_period;
558 std::cout <<
" ns" << std::endl;
603 std::shared_ptr<MiniballDataPackets> data_packet =
604 std::make_shared<MiniballDataPackets>(
info_data );
606 data_map.push_back( std::make_pair<unsigned long,double>(
623 std::shared_ptr<MiniballDataPackets> data_packet =
624 std::make_shared<MiniballDataPackets>(
febex_data );
626 data_map.push_back( std::make_pair<unsigned long,double>(
634 bool fillflag =
true;
661 std::cerr <<
"Missing something in FEBEX data and new event occured" << std::endl;
662 std::cerr <<
" Current timestamp = " << std::hex <<
my_tm_stp << std::endl;
663 std::cerr <<
" Previous timestamp = " << std::hex <<
febex_data->GetTime() << std::endl;
664 std::cerr <<
" Qshort = " << std::boolalpha <<
flag_febex_data0 << std::endl;
665 std::cerr <<
" nonsense item = " << std::boolalpha <<
flag_febex_data1 << std::endl;
666 std::cerr <<
" Qint (low) = " << std::boolalpha <<
flag_febex_data2 << std::endl;
667 std::cerr <<
" Qint (high) = " << std::boolalpha <<
flag_febex_data3 << std::endl;
668 std::cerr <<
" trace data = " << std::boolalpha <<
flag_febex_trace << std::endl;
669 std::cerr << std::dec;
679 febex_data->GetChannel() >=
set->GetNumberOfFebexChannels() ) {
681 std::cerr <<
"Bad event ID: SFP = " << (int)
febex_data->GetSfp();
682 std::cerr <<
", board = " << (int)
febex_data->GetBoard();
683 std::cerr <<
", channel = " << (int)
febex_data->GetChannel() << std::endl;
684 std::cerr <<
" word_0 = " << std::hex <<
word_0 << std::dec <<
" = ";
685 std::cerr << std::bitset<32>{
word_0} << std::endl;
686 std::cerr <<
" word_1 = " << std::hex <<
word_1 << std::dec <<
" = ";
687 std::cerr << std::bitset<32>{
word_1} << std::endl;
730 std::cerr <<
"Bad info event with SFP = " << (int)
my_sfp_id;
733 std::cerr <<
", field = " << (int)
my_info_field << std::endl;
734 std::cerr <<
" word_0 = " << std::hex <<
word_0 << std::dec <<
" = ";
735 std::cerr << std::bitset<32>{
word_0} << std::endl;
736 std::cerr <<
" word_1 = " << std::hex <<
word_1 << std::dec <<
" = ";
737 std::cerr << std::bitset<32>{
word_1} << std::endl;
749 if( tmp_tm_stp == 0x0000A5A5 &&
772 if( ( tmp_tm_stp & 0x00000FF0 ) == 0x00000A50 &&
779 std::cout <<
"Corrupt MSB timestamp? 0x" << std::hex;
780 std::cout << tmp_tm_stp << std::endl <<
"\t";
781 std::cout << tmp_full << std::dec << std::endl;
845 std::shared_ptr<MiniballDataPackets> data_packet = std::make_shared<MiniballDataPackets>(
info_data );
850 std::shared_ptr<MiniballDataPackets> data_packet =
851 std::make_shared<MiniballDataPackets>(
info_data );
853 data_map.push_back( std::make_pair<unsigned long,double>(
909 unsigned long start_block,
916 std::ifstream input_file( input_file_name, std::ios::in|std::ios::binary );
917 if( !input_file.is_open() ){
919 std::cout <<
"Cannot open " << input_file_name << std::endl;
925 std::cout <<
"Converting MIDAS file: " << input_file_name;
926 std::cout <<
" from block " << start_block << std::endl;
932 input_file.seekg( 0, input_file.end );
933 unsigned long long int size_end = input_file.tellg();
934 input_file.seekg( 0, input_file.beg );
935 unsigned long long int size_beg = input_file.tellg();
936 unsigned long long int FILE_SIZE = size_end - size_beg;
944 std::cout <<
" *WARNING* " << __PRETTY_FUNCTION__;
945 std::cout <<
"\tMissing data blocks?" << std::endl;
949 sslogs <<
"\t File size = " << FILE_SIZE << std::endl;
953 std::cout <<
sslogs.str() << std::endl;
954 sslogs.str( std::string() );
962 for(
unsigned long nblock = 0; nblock <
BLOCKS_NUM ; nblock++ ){
965 if( nblock % 200 == 0 || nblock+1 ==
BLOCKS_NUM ) {
968 float percent = (float)(nblock+1)*100.0/(float)
BLOCKS_NUM;
973 prog->SetPosition( percent );
974 gSystem->ProcessEvents();
979 std::cout <<
" " << std::setw(8) << std::setprecision(4);
980 std::cout << percent <<
"%\r";
993 if( nblock < start_block || ( (
long)nblock > end_block && end_block > 0 ) )
1008 sslogs <<
"\%" << std::endl;
1013 sslogs <<
"\%" << std::endl;
1018 sslogs <<
"\%" << std::endl;
1023 sslogs <<
"\%" << std::endl;
1025 std::cout <<
sslogs.str() << std::endl;
1026 sslogs.str( std::string() );
float GetEnergy(unsigned int i)
unsigned int NumberOfTriggers()
std::shared_ptr< FebexData > febex_data
unsigned long sync_tm_stp_hsb
unsigned int my_adc_data_int
std::vector< std::vector< TProfile * > > hfebex_hit
std::vector< std::vector< TProfile * > > hfebex_resume
std::vector< std::vector< std::vector< long long int > > > tm_stp_febex_ch
std::vector< std::vector< std::vector< TH1F * > > > hfebex_qint
unsigned long sync_tm_stp_msb
unsigned short my_adc_data_hsb
unsigned char my_board_id
unsigned short my_adc_data
std::vector< std::vector< TProfile * > > hfebex_pause
unsigned long int jump_ctr
std::vector< std::vector< std::vector< TH1F * > > > hfebex_mwd
std::vector< std::vector< unsigned long int > > ctr_febex_sync
unsigned char my_info_code
unsigned long my_tm_stp_lsb
std::shared_ptr< MiniballCalibration > cal
unsigned short my_adc_data_lsb
unsigned long int data_ctr
std::vector< std::vector< std::vector< TH1F * > > > hfebex_cal
unsigned short my_tdiff_data
std::shared_ptr< MiniballSettings > set
std::vector< std::shared_ptr< MiniballDataPackets > > data_vector
std::vector< std::vector< unsigned long int > > ctr_febex_resume
unsigned long long sync_tm_stp
std::shared_ptr< InfoData > info_data
std::vector< std::pair< unsigned long, double > > data_map
std::vector< long long int > tm_stp_read
std::vector< std::vector< long long int > > tm_stp_febex
std::vector< std::vector< unsigned long int > > ctr_febex_pause
std::shared_ptr< TGProgressBar > prog
unsigned long int reject_ctr
std::vector< std::vector< unsigned long int > > ctr_febex_hit
unsigned long my_tm_stp_msb
unsigned long int mash_ctr
unsigned long int warp_ctr
bool EBISWindow(long long int t)
std::vector< bool > first_data
unsigned long my_tm_stp_hsb
unsigned long long my_tm_stp
unsigned int my_info_field
std::vector< std::vector< TProfile * > > hfebex_sync
std::vector< std::vector< std::vector< TH1F * > > > hfebex_qshort
void SetBlockData(char *input_data)
void ProcessFebexData(long nblock)
void ProcessBlockHeader(long nblock)
void FinishFebexData(long nblock)
static const int WORD_SIZE
char block_data[MAIN_SIZE]
static const int DATA_BLOCK_SIZE
void ProcessBlockData(long nblock)
static const int HEADER_SIZE
int ConvertFile(std::string input_file_name, unsigned long start_block=0, long end_block=-1)
UShort_t header_DataEndian
bool ProcessCurrentBlock(long nblock)
ULong64_t GetWord(UInt_t n=0)
int ConvertBlock(char *input_block, long nblock)
void SetBlockHeader(char *input_header)
char block_header[HEADER_SIZE]
int ProcessTraceData(int pos)
static const int MAIN_SIZE
ULong64_t Swap64(ULong64_t datum)
void ProcessInfoData(long nblock)