8 for(
unsigned int i = 0; i <
ndata; i++ ){
59 std::cerr <<
"Unrecognised VME module ID (" << std::dec;
63 std::cerr << std::dec << std::endl;
83 while( i < mbs_sevt->GetNumberOfData() ){
90 if( mod >=
set->GetNumberOfAdcModules() )
91 mod =
set->GetMesytecAdcModuleNumber( mod );
98 std::cerr << __PRETTY_FUNCTION__ <<
": Error, output ";
99 std::cerr <<
"format (highest bit) should be zero (header = ";
100 std::cerr << std::hex << header << std::dec <<
")" << std::endl;
110 if( wc <= 0 || wc > (
int)
set->GetNumberOfMesytecAdcChannels() + 2 ) {
112 std::cout << __PRETTY_FUNCTION__ <<
": read event nr. ";
113 std::cout <<
my_event_id <<
": wrong Word Count: ";
114 std::cout << wc <<
" -> skip TOTAL subevent" << std::endl;
121 std::vector<unsigned short> ch_vec;
122 std::vector<unsigned short> qshort_vec;
123 long long Timestamp = 0;
124 bool clipped =
false;
125 for(
unsigned short ch = 0; ch < wc - 1; ch++ ) {
133 std::cerr <<
"Error, found end of event data (" << test <<
") after " << ch+1;
134 std::cerr <<
" words but should have a word count of " << wc << std::endl;
142 std::cerr <<
"Error, found weird data (" << test <<
") after ";
143 std::cerr << ch+1 <<
" words with word count of " << wc << std::endl;
160 ch_vec.push_back( chanNo );
164 qshort_vec.push_back( Qshort );
169 else clipped =
false;
174 unsigned int trailer = ((
unsigned int)
mbs_sevt->
GetData(i++) << 16) & 0xffff0000;
180 std::cout << __PRETTY_FUNCTION__ <<
": read event nr. " <<
my_event_id;
182 std::cout <<
" -> skip TOTAL subevent" << std::endl;
189 Timestamp +=
set->GetDgfTimestampDelay();
190 Timestamp *=
set->GetMesytecAdcTimestampUnits();
193 for(
unsigned item = 0; item < qshort_vec.size(); item++ ){
203 float energy =
cal->AdcEnergy( mod, ch_vec[item], qshort_vec[item] );
204 bool thresh =
cal->AdcThreshold( mod, ch_vec[item] );
207 long long time_corr = Timestamp;
208 time_corr +=
cal->AdcTime( mod, ch_vec[item] );
212 adc_data->SetQshort( qshort_vec[item] );
214 adc_data->SetChannel( (
char)ch_vec[item] );
221 std::shared_ptr<MiniballDataPackets> data_packet =
222 std::make_shared<MiniballDataPackets>(
adc_data );
224 data_map.push_back( std::make_pair<unsigned long,double>(
229 hadc_qshort[mod][ch_vec[item]]->Fill( qshort_vec[item] );
230 hadc_cal[mod][ch_vec[item]]->Fill( energy );
256 std::cerr << __PRETTY_FUNCTION__;
257 std::cerr <<
": Error - got data from VME module id ";
259 std::cerr <<
", which is defined as a pattern unit but has the";
260 std::cerr <<
" wrong data format: " << std::hex;
270 while( i < mbs_sevt->GetNumberOfData() ) {
276 std::cout << __PRETTY_FUNCTION__ <<
": read event nr. ";
279 std::cout <<
": wrong Header word of type 0x" << std::hex;
280 std::cout << header <<
" -> skip subevent" << std::dec << std::endl;
287 if( mod < 0 )
return;
293 for(
unsigned short j = 0; j < wc-2; j++ ) {
317 std::cerr << __PRETTY_FUNCTION__;
318 std::cerr <<
": Error - got data from VME module id ";
320 std::cerr <<
", which is defined as a scaler unit but has the";
321 std::cerr <<
" wrong data format: " << std::hex;
330 std::cerr << __PRETTY_FUNCTION__;
331 std::cerr <<
": Error - expecting even number of words in MbsSubEvent but there are ";
360 std::cerr << __PRETTY_FUNCTION__;
361 std::cerr <<
": Error - got data from VME module id ";
363 std::cerr <<
", which looks like a DGF scaler module but it isn't";
364 std::cerr <<
" defined as such in settings file" << std::endl;
371 while( i < mbs_sevt->GetNumberOfData() ){
380 std::cerr <<
"Internal dgf scalers: data out of phase - 0x";
383 std::cerr <<
")" << std::dec << std::endl;
394 if( clu < 0 || mod < 0 )
return;
396 std::cerr <<
"Word count negative: " << wc << std::endl;
400 std::cerr <<
"Not enough data left in sub event for new DGF scaler: ";
406 std::cerr <<
"Not enough data left in sub event for new DGF scaler: ";
444 for(
unsigned int j = 0; j <
set->GetNumberOfDgfChannels(); j++ ){
480 std::cerr << __PRETTY_FUNCTION__;
481 std::cerr <<
": Error - got data from VME module id ";
483 std::cerr <<
", which looks like a DGF module but it isn't";
484 std::cerr <<
" defined as such in settings file" << std::endl;
499 unsigned short start = i;
501 unsigned short end = start + length;
507 std::cout << __PRETTY_FUNCTION__ <<
": XIA wrong buffer length: ";
509 std::cout <<
", Start: " << start;
510 std::cout <<
", End: " << end << std::endl;
519 unsigned short RunTimeA, RunTimeB, RunTimeC;
520 unsigned int BufferTime;
521 unsigned long long RunTime;
530 std::cout << __PRETTY_FUNCTION__ <<
": read out event ";
531 std::cout <<
my_event_id <<
": wrong buffer format: ";
532 std::cout << format <<
" !!!" << std::endl;
545 RunTime = ( (
unsigned long long)RunTimeA << 32) & 0xffff000000000000;
546 BufferTime = ( (
unsigned int)RunTimeB << 16) & 0xffff0000;
547 BufferTime |= ( (
unsigned int)RunTimeC ) & 0x0000ffff;
548 RunTime |= ( BufferTime & 0xffffffff);
560 mod =
set->GetDgfModuleNumber( mod );
576 long long EventTime = (( (
long long)EventTimeHigh ) << 16) & 0xffff0000;
577 EventTime |= (
long long)EventTimeLow & 0x0000ffff;
580 if( EventTime <= BufferTime ) RunTimeA++;
581 EventTime |= (( (
long long)RunTimeA ) << 32) & 0xffff00000000;
588 if( !( HitPattern & 0xf ) && !
set->IsTimestampModule(mod) ) {
590 std::cout << __PRETTY_FUNCTION__ <<
": XIA hitpattern error: hitpattern = ";
591 std::cout << HitPattern << mod <<
": module: " << mod;
592 std::cout <<
", i: " << i <<
", end: " << end;
594 std::cout << std::endl;
605 for(
unsigned int ch = 0; ch <
set->GetNumberOfDgfChannels(); ch++ ) {
608 unsigned int ChannelMask = 1 << ch;
609 if( ( HitPattern & ChannelMask ) != 0 ) {
617 unsigned short ChannelLength;
626 unsigned long long LongFastTriggerTime = FastTriggerTime;
627 if( FastTriggerTime > EventTimeLow )
628 LongFastTriggerTime += 65536ll*EventTimeHigh + 65536ll*65536ll*RunTimeA;
630 LongFastTriggerTime += 65536ll*EventTimeHigh + 65536ll + 65536ll*65536ll*RunTimeA;
633 float energy =
cal->DgfEnergy( mod, ch, Qshort );
634 bool thresh =
cal->DgfThreshold( mod, ch );
637 std::vector<unsigned short> UserValues;
638 std::vector<unsigned short> trace;
642 for(
unsigned char j = 0; j < 6; j++ )
646 unsigned int TraceLength = (int)ChannelLength -
CHANHEADLEN;
647 for(
unsigned char j = 0; j < TraceLength; j++ )
669 long long time_corr = LongFastTriggerTime *
set->GetDgfTimestampUnits();
670 time_corr +=
cal->DgfTime( mod, ch );
673 if(
set->IsTimestampModule( mod ) ) {
677 if( mod ==
set->GetEBISDgf() && ch ==
set->GetEBISChannel() )
678 mycode =
set->GetEBISCode();
679 else if( mod ==
set->GetT1Dgf() && ch ==
set->GetT1Channel() )
680 mycode =
set->GetT1Code();
681 else if( mod ==
set->GetSCDgf() && ch ==
set->GetSCChannel() )
682 mycode =
set->GetSCCode();
695 std::shared_ptr<MiniballDataPackets> data_packet =
696 std::make_shared<MiniballDataPackets>(
info_data );
698 data_map.push_back( std::make_pair<unsigned long,double>(
710 dgf_data->SetRunTime( RunTime *
set->GetDgfTimestampUnits() );
711 dgf_data->SetEventTime( EventTime *
set->GetDgfTimestampUnits() );
712 dgf_data->SetFastTriggerTime( FastTriggerTime *
set->GetDgfTimestampUnits() );
713 dgf_data->SetLongFastTriggerTime( time_corr );
714 dgf_data->SetHitPattern( HitPattern );
720 dgf_data->SetUserValues( UserValues );
725 std::shared_ptr<MiniballDataPackets> data_packet =
726 std::make_shared<MiniballDataPackets>(
dgf_data );
728 data_map.push_back( std::make_pair<unsigned long,double>(
744 if( length & 1 ) i++;
755 unsigned long start_subevt,
762 std::ifstream input_file( input_file_name, std::ios::in|std::ios::binary );
763 if( !input_file.is_open() ){
765 std::cout <<
"Cannot open " << input_file_name << std::endl;
774 input_file.seekg( 0, input_file.end );
775 unsigned long long size_end = input_file.tellg();
776 input_file.seekg( 0, input_file.beg );
777 unsigned long long size_beg = input_file.tellg();
778 unsigned long long FILE_SIZE = size_end - size_beg;
781 unsigned long BLOCKS_NUM = FILE_SIZE /
set->GetBlockSize();
783 std::cout <<
"Opening file: " << input_file_name << std::endl;
784 sslogs <<
"File size = " << (double)FILE_SIZE/1024./1024.;
785 sslogs <<
" MB" << std::endl;
786 std::cout <<
sslogs.str() << std::endl;
787 sslogs.str( std::string() );
798 unsigned long mbsevt = 0, nblock = 0;
799 for( mbsevt = 0; ; mbsevt++ ){
803 if( nblock % 200 == 0 || nblock+1 == BLOCKS_NUM ) {
806 float percent = (float)(nblock+1)*100.0/(float)BLOCKS_NUM;
811 prog->SetPosition( percent );
812 gSystem->ProcessEvents();
817 std::cout <<
" " << std::setw(8) << std::setprecision(4);
818 std::cout << percent <<
"%\r";
825 if( mbs.
IsEof() )
break;
833 std::cout <<
"Bad event ID in data" << std::endl;
837 if( mbsevt < start_subevt || ( (
long)mbsevt > end_subevt && end_subevt > 0 ) )
855 std::cout << std::endl;
#define MBS_STYPE_VME_SIS_3
#define COMP3_LM_BUFFORMAT
#define MESYTEC_MADC_WORD_COUNT
#define MESYTEC_MADC_OUTPUT_FORMAT
#define MESYTEC_MADC_VALUE
#define DGF_SCALER_INDEX_CH_OFFSET
#define STD_FLM_BUFFORMAT
#define MBS_STYPE_CAMAC_DGF_3
#define MESYTEC_MADC_EXTENDED_TIMESTAMP_SHIFT
#define MBS_STYPE_TIME_STAMP
#define DGF_SCALER_INDEX_NEVENTS
#define COMP_FLM_BUFFORMAT
#define MESYTEC_MADC_END_OF_EVENT
#define DGF_SCALER_MIN_SIZE
#define MBS_STYPE_VME_MADC_2
#define MESYTEC_MADC_OUT_OF_RANGE
#define DGF_SCALER_END_OF_BUFFER
#define MESYTEC_MADC_TIMESTAMP
#define MBS_STYPE_CAMAC_WO_ID_1
#define MESYTEC_MADC_CHANNEL_NUMBER
#define MESYTEC_MADC_EXTENDED_TIMESTAMP
#define DGF_SCALER_INDEX_REALTIME
#define MBS_STYPE_VME_MADC_3
#define COMP_LM_BUFFORMAT
#define DGF_SCALER_INDEX_CH_SIZE
#define DGF_SCALER_INDEX_GSLTTIME
#define DGF_SCALER_INDEX_RUNTIME
#define MESYTEC_MADC_MODULE_ID
#define DGF_SCALER_MAGIC_WORD
#define MBS_STYPE_VME_MADC_1
void SetGSLTTime(long long time)
void SetModule(unsigned short id)
void SetRealTime(long long time)
void SetFastPeak(unsigned short i, unsigned int fp)
void SetClusterID(unsigned short id)
void SetLiveTime(unsigned short i, long long time)
void SetRunTime(long long time)
const MBSSubEvent * GetSubEvent(unsigned int i) const
unsigned int GetNumberOfSubEvents() const
ULong_t GetEventID() const
short GetData(unsigned int i) const
unsigned int GetDataLength() const
unsigned long GetSubEventID() const
unsigned short GetModuleID() const
unsigned int GetSubEventType() const
unsigned int GetNumberOfData() const
std::string GetSubEventDescription() const
const MBSEvent * GetNextMedEvent()
void OpenMedFile(std::string _filename)
void SetBufferSize(unsigned int size)
std::vector< std::vector< TH1F * > > hdgf_cal
std::shared_ptr< MiniballCalibration > cal
std::shared_ptr< DgfData > dgf_data
std::shared_ptr< MiniballSettings > set
std::vector< std::shared_ptr< MiniballDataPackets > > data_vector
std::vector< std::vector< TH1F * > > hadc_cal
std::shared_ptr< InfoData > info_data
std::vector< std::pair< unsigned long, double > > data_map
std::vector< std::vector< TH1F * > > hdgf_qshort
std::shared_ptr< AdcData > adc_data
std::shared_ptr< TGProgressBar > prog
std::vector< std::vector< TH1F * > > hadc_qshort
unsigned long long my_good_tm_stp
unsigned long long my_event_id
std::shared_ptr< MBSInfoPackets > mbsinfo_packet
const MBSSubEvent * mbs_sevt
void ProcessPatternUnitData()
void ProcessCaenAdcData()
void ProcessMesytecAdcData()
int ConvertFile(std::string input_file_name, unsigned long start_block=0, long end_block=-1)
void ProcessEvent(unsigned long nblock)