00001
00002
00003
00004
00005
00006
00007 #ifndef DCCTBDATAPARSER_HH
00008 #define DCCTBDATAPARSER_HH
00009
00010 #include <fstream>
00011 #include <iostream>
00012 #include <string>
00013 #include <vector>
00014 #include <map>
00015
00016 #include <stdio.h>
00017
00018 #include "ECALParserException.h"
00019 #include "DCCEventBlock.h"
00020 #include "DCCDataMapper.h"
00021
00022
00023 class DCCTBDataMapper;
00024 class DCCTBEventBlock;
00025
00026
00027 class DCCTBDataParser{
00028
00029 public :
00030
00042 DCCTBDataParser( std::vector<ulong> parserParameters , bool parseInternalData = true, bool debug = true);
00043
00047 void parseFile( std::string fileName, bool singleEvent = false);
00048
00052 void parseBuffer( ulong * buffer, ulong bufferSize, bool singleEvent = false);
00053
00057 DCCTBDataMapper *mapper();
00058
00063 std::pair<ulong,ulong> checkEventLength(ulong * pointerToEvent, ulong bytesToEnd, bool singleEvent = false);
00064
00068 std::vector<ulong> parserParameters();
00069 ulong numbXtalSamples();
00070 ulong numbTriggerSamples();
00071 ulong numbTTs();
00072 ulong numbSRF();
00073 ulong dccId();
00074 ulong srpId();
00075 ulong tcc1Id();
00076 ulong tcc2Id();
00077 ulong tcc3Id();
00078 ulong tcc4Id();
00079
00080
00084 void setParameters( std::vector<ulong> newParameters );
00085
00086
00090 ulong srpBlockSize();
00091 ulong tccBlockSize();
00092
00096 bool debug();
00097
00101 std::vector<DCCTBEventBlock *> & dccEvents();
00102
00106 std::map<std::string,ulong> & errorCounters();
00107
00111 std::vector< std::pair< ulong, std::pair<ulong *, ulong> > > events();
00112
00113
00117 void resetErrorCounters();
00118
00119
00123 std::string getDecString(ulong data);
00124 std::string getHexString(ulong data);
00125 std::string index(ulong position);
00126 std::string getIndexedData( ulong indexed, ulong * pointer);
00127
00131 ulong *getBuffer() { return buffer_;}
00132
00136 ~DCCTBDataParser();
00137
00138 enum DCCDataParserGlobalFields{
00139 EMPTYEVENTSIZE = 32
00140 };
00141
00142 protected :
00143 void computeBlockSizes();
00144
00145 ulong *buffer_;
00146 ulong bufferSize_;
00147
00148 ulong srpBlockSize_;
00149 ulong tccBlockSize_;
00150
00151 ulong processedEvent_;
00152 std::string eventErrors_;
00153 DCCTBDataMapper *mapper_;
00154
00155 std::vector<DCCTBEventBlock *> dccEvents_;
00156
00157
00158 std::vector< std::pair< ulong, std::pair<ulong *, ulong> > > events_;
00159
00160 bool parseInternalData_;
00161 bool debug_;
00162 std::map<std::string,ulong> errors_;
00163 std::vector<ulong> parameters;
00164
00165 enum DCCTBDataParserFields{
00166 EVENTLENGTHMASK = 0xFFFFFF,
00167
00168 BOEBEGIN = 28,
00169 BOEMASK = 0xF,
00170 BOE =0x5,
00171
00172 EOEBEGIN = 28,
00173 EOEMASK = 0xF,
00174 EOE =0xA
00175 };
00176
00177 };
00178
00179 inline DCCTBDataMapper *DCCTBDataParser::mapper() { return mapper_;}
00180
00181 inline std::vector<ulong> DCCTBDataParser::parserParameters() { return parameters; }
00182 inline ulong DCCTBDataParser::numbXtalSamples() { return parameters[0]; }
00183 inline ulong DCCTBDataParser::numbTriggerSamples() { return parameters[1]; }
00184 inline ulong DCCTBDataParser::numbTTs() { return parameters[2]; }
00185 inline ulong DCCTBDataParser::numbSRF() { return parameters[3]; }
00186 inline ulong DCCTBDataParser::dccId() { return parameters[4]; }
00187 inline ulong DCCTBDataParser::srpId() { return parameters[5]; }
00188 inline ulong DCCTBDataParser::tcc1Id() { return parameters[6]; }
00189 inline ulong DCCTBDataParser::tcc2Id() { return parameters[7]; }
00190 inline ulong DCCTBDataParser::tcc3Id() { return parameters[8]; }
00191 inline ulong DCCTBDataParser::tcc4Id() { return parameters[9]; }
00192
00193 inline void DCCTBDataParser::setParameters( std::vector<ulong> newParameters ){ parameters = newParameters; computeBlockSizes();}
00194
00195 inline ulong DCCTBDataParser::srpBlockSize() { return srpBlockSize_; }
00196 inline ulong DCCTBDataParser::tccBlockSize() { return tccBlockSize_; }
00197
00198 inline bool DCCTBDataParser::debug() { return debug_; }
00199 inline std::vector<DCCTBEventBlock *> &DCCTBDataParser::dccEvents() { return dccEvents_; }
00200 inline std::map<std::string,ulong> &DCCTBDataParser::errorCounters() { return errors_; }
00201 inline std::vector< std::pair< ulong, std::pair<ulong *, ulong> > > DCCTBDataParser::events() { return events_; }
00202
00203
00204 #endif
00205