15 #ifdef USE_ROOT_OUTPUT 22 #define FILTER_CLOCK 8E-3 // Filter clock (in us) 23 #define ADC_CLOCK 4E-3 // ADC clock (in us) 24 #define READ_SIZE 1280 // Size of each module in the .set file. 26 #ifdef USE_ROOT_OUTPUT 27 bool parameter::write(TFile *f_,
const std::string &dir_){
28 if(!f_ || !f_->IsOpen() ||
values.empty()){
return false; }
31 std::stringstream stream;
33 TNamed named(
name.c_str(), stream.str().c_str());
37 unsigned int count = 0;
38 for(std::vector<unsigned int>::iterator iter =
values.begin(); iter !=
values.end(); iter++){
39 std::stringstream stream;
42 std::stringstream chName;
43 chName <<
name <<
"[";
46 chName << count <<
"]";
48 TNamed named(chName.str().c_str(), stream.str().c_str());
59 if(
values.empty()){
return ""; }
61 std::stringstream stream;
63 stream <<
name <<
"\t" <<
values.front() <<
"\n";
66 unsigned int count = 0;
67 for(std::vector<unsigned int>::iterator iter =
values.begin(); iter !=
values.end(); iter++){
68 stream <<
name <<
"[";
71 stream << count <<
"]" <<
"\t" << (*iter) <<
"\n";
86 for(std::vector<parameter>::iterator iter = params.begin(); iter != params.end(); iter++){
87 if(iter->getOffset() == offset_){
return &(*iter); }
98 bool readVarFile(std::vector<parameter> ¶ms,
const char *var_filename_){
99 std::ifstream input(var_filename_);
110 input >> hexstr >>
name;
111 if(input.eof()){
break; }
113 if(hexstr.find(
"0x") != std::string::npos)
114 hexstr = hexstr.substr(hexstr.find(
"0x")+2);
116 std::stringstream stream;
117 stream << std::hex << hexstr;
120 params.push_back(
parameter(name, value));
136 int readSetFile(std::vector<parameter> ¶ms,
const char *set_filename_,
const size_t &offset_,
const size_t &len_=
READ_SIZE){
137 if(params.empty()){
return -1; }
139 std::ifstream input(set_filename_);
144 input.seekg(offset_*4);
150 unsigned int firstValue = params.front().getOffset();
155 for(
size_t i = 0; i < len_; i++){
156 input.read((
char*)&word, 4);
157 if(input.eof()){
break; }
162 current_param = param;
166 current_param->
values.push_back(word);
175 #ifdef USE_ROOT_OUTPUT 187 std::cout <<
" SYNTAX: " << prog_name_ <<
" <varFile> <setFile> <startMod> <stopMod> [output]\n";
190 int main(
int argc,
char *argv[]){
191 if(argc > 1 && (strcmp(argv[1],
"-h") == 0 || strcmp(argv[1],
"--help") == 0)){
196 std::cout <<
" Invalid number of arguments to " << argv[0] <<
". Expected 4, received " << argc-1 <<
".\n";
201 int start_mod = atoi(argv[3]);
202 int stop_mod = atoi(argv[4]);
204 std::cout <<
" ERROR! Invalid start module specification (" << start_mod <<
").\n";
207 else if(stop_mod < -1){
208 std::cout <<
" ERROR! Invalid stop module specification (" << stop_mod <<
").\n";
213 std::string varFilename = std::string(argv[1]);
214 std::string setFilename = std::string(argv[2]);
217 std::string outFilename;
218 if(argc > 5){ outFilename = std::string(argv[5]); }
220 #ifdef USE_ROOT_OUTPUT 221 outFilename =
"params.root";
223 outFilename =
"params.dat";
228 #ifdef USE_ROOT_OUTPUT 229 TFile *f =
new TFile(outFilename.c_str(),
"RECREATE");
231 std::cout <<
" ERROR! Failed to open output root file '" << outFilename <<
"'!\n";
234 TNamed named1(
"varFile", varFilename.c_str());
235 TNamed named2(
"setFile", setFilename.c_str());
239 std::ofstream f(outFilename.c_str());
241 std::cout <<
" ERROR! Failed to open output file '" << outFilename <<
"'!\n";
244 f <<
"varFile = " << varFilename <<
"\n";
245 f <<
"setFile = " << setFilename <<
"\n";
249 std::vector<parameter> params;
251 std::cout <<
" Successfully read " << params.size() <<
" entries from .var file.\n";
254 std::cout <<
" ERROR! Failed to read dsp .var file '" << varFilename <<
"'!\n";
261 for(
int i = start_mod; i <= stop_mod; i++){
262 for(std::vector<parameter>::iterator iter = params.begin(); iter != params.end(); iter++){
263 iter->values.clear();
268 std::cout <<
" Successfully read " << readEntries <<
" words from .set file for module " << i <<
".\n";
270 else if(readEntries == 0){
271 std::cout <<
" ERROR! Read zero entries from .set file for module " << i <<
"!\n";
275 std::cout <<
" ERROR! Failed to read from .set file '" << setFilename <<
"'!\n";
280 std::stringstream stream;
286 #ifdef USE_ROOT_OUTPUT 287 f->mkdir(stream.str().c_str());
289 f <<
"###############################################################################\n";
290 f <<
"## " << stream.str() <<
" ##\n";
291 f <<
"###############################################################################\n";
295 for(std::vector<parameter>::iterator iter = params.begin(); iter != params.end(); iter++){
296 #ifdef USE_ROOT_OUTPUT 297 if(iter->values.size() > 1){
298 std::string dirname = stream.str()+
"/"+iter->getName();
299 f->mkdir(dirname.c_str());
300 f->cd(dirname.c_str());
302 else{ f->cd(stream.str().c_str()); }
311 std::cout <<
" Done! Wrote output file '" << outFilename <<
"'.\n";
void closeFile(std::ofstream &f_)
std::vector< unsigned int > values
bool readVarFile(std::vector< parameter > ¶ms, const char *var_filename_)
int readSetFile(std::vector< parameter > ¶ms, const char *set_filename_, const size_t &offset_, const size_t &len_=READ_SIZE)
void help(char *prog_name_)
parameter * findParameter(std::vector< parameter > ¶ms, const unsigned int &offset_)
int main(int argc, char *argv[])
A program to convert a pixie16 binary .set file into a root file.