File indexing completed on 2024-04-06 12:30:51
0001 #include <iostream>
0002 #include <fstream>
0003 #include <sstream>
0004 #include <string>
0005 #include <vector>
0006 #include <map>
0007 #include <bitset>
0008
0009 int main(int argc, char** argv){
0010 std::bitset<4> a;
0011 a=1;
0012 std::cout <<a<<std::endl;
0013 a<<=1;
0014 std::cout <<a<<std::endl;
0015 a<<=2;
0016 a|=1;
0017 std::cout <<a<<std::endl;
0018
0019 if(argc != 2) return -1;
0020 std::string filename=argv[1];
0021 std::ifstream inpf(filename.c_str());
0022 std::string buf;
0023 std::vector<std::string> lbname;
0024 bool lb=false;
0025 bool bx=true;
0026 int ilb=0;
0027 std::map<int, std::map<std::string,std::bitset<96> > > event;
0028 std::map<std::string, std::bitset<96> > lbdump;
0029 int ibx = -1;
0030 do{
0031 buf.clear();
0032 inpf >>buf;
0033 if (buf=="lb"){
0034 lb=true;
0035 } else if (lb){
0036 lb = false;
0037 lbname.push_back(buf);
0038 } else if (!buf.empty()){
0039 if (bx) {
0040 bx = false;
0041 ilb=0;
0042 std::stringstream os;
0043 os<<buf;
0044 os>>ibx;
0045 std::cout <<" bx = "<<ibx<<" |"<<buf<<"|"<<std::endl;
0046 lbdump.clear();
0047 }else{
0048 ilb++;
0049 if (ilb==lbname.size())
0050 bx = true;
0051 unsigned long icont1,icont2,icont3,icont4;
0052 {
0053 std::stringstream os;
0054 os<<buf.substr(0,6);
0055 os>>std::hex>>icont1;
0056 }
0057 {
0058 std::stringstream os;
0059 os<<buf.substr(6,6);
0060 os>>std::hex>>icont2;
0061 }
0062 {
0063 std::stringstream os;
0064 os<<buf.substr(12,6);
0065 os>>std::hex>>icont3;
0066 }
0067 {
0068 std::stringstream os;
0069 os<<buf.substr(18,6);
0070 os>>std::hex>>icont4;
0071 }
0072
0073 std::bitset<96> cont(icont1);
0074 cont <<=24;
0075 cont |= icont2;
0076 cont <<=24;
0077 cont |= icont3;
0078 cont <<=24;
0079 cont |= icont4;
0080
0081 if (cont.count()>0){
0082 lbdump[lbname[ilb-1]]=cont;
0083 std::cout <<cont.count()<<" Content of "
0084 <<lbname[ilb-1]<<" = "<<buf<<std::endl;
0085 std::cout <<"Content of "<<lbname[ilb-1]<<" = "
0086 <<buf.substr(0,6)<<" "<<buf.substr(6,6)
0087 <<" "<<buf.substr(12,6)<<" "<<buf.substr(18,6)<<std::endl;
0088 std::cout <<"Content of "<<lbname[ilb-1]<<" = "<<std::hex
0089 <<icont1<<" "<<icont2<<" "<<icont3<<" "<<icont4
0090 <<std::dec<<std::endl;
0091 std::cout <<"Content of "<<lbname[ilb-1]<<" = "<<cont<<std::endl;
0092 }
0093 if (bx){
0094 if (lbdump.size()>0){
0095 std::cout <<"good bx "<<ibx<<std::endl;
0096 event[ibx]=lbdump;
0097 }
0098 }
0099 }
0100 }
0101 }while(inpf.good() && !buf.empty());
0102
0103
0104 std::cout <<"done!"<<std::endl;
0105
0106 for (std::map<int, std::map<std::string, std::bitset<96> > >::iterator ix=
0107 event.begin(); ix!=event.end();ix++){
0108
0109 std::cout <<"Bunch Crossing "<<ix->first<<std::endl;
0110 for (std::map<std::string, std::bitset<96> >::iterator ib=
0111 ix->second.begin(); ib != ix->second.end(); ib++){
0112 if (ib->second.count()>0){
0113 std::cout <<"Board "<<ib->first<<std::endl;
0114 for (int i=0;i<96;i++){
0115 if (ib->second[i]>0){
0116 std::cout <<"channel = "<<i<<std::endl;
0117 }
0118 }
0119 }
0120 }
0121
0122 }
0123
0124
0125
0126
0127 }