/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/TrigEvent/TrigEvent-00-01-02/src/TrigMdc.cxx

Go to the documentation of this file.
00001 #include <iostream>
00002 #include <fstream>
00003 #include "TrigEvent/TrigMdc.h"
00004 #include <stdlib.h>
00005 using namespace std;
00006 
00007 TrigMdc::TrigMdc(const char* name) :  m_name(name){
00008   // hit
00009   m_mdchit_one     = new int*[24];
00010   for (int i = 0; i < 24; i++) m_mdchit_one[i] = new int[256];
00011   m_mdchit_sone     = new int*[24];
00012   for (int i = 0; i < 24; i++) m_mdchit_sone[i] = new int[256];
00013   m_mdchit_pre = new int*[24];
00014   for(int i=0; i<24; i++) m_mdchit_pre[i] = new int[256];
00015   m_mdchit_aft = new int*[24];
00016   for(int i=0; i<24; i++) m_mdchit_aft[i] = new int[256];
00017   m_mdchit_win = new uint32_t*[24];
00018   for(int i=0; i<24; i++) m_mdchit_win[i] = new uint32_t[256];
00019   // tsf
00020   m_mdctsf_one = new int*[6];
00021   for (int i=0; i<6; i++) m_mdctsf_one[i] = new int[256];
00022   m_mdctsf_sone = new int*[6];
00023   for (int i=0; i<6; i++) m_mdctsf_sone[i] = new int[256];
00024   m_mdctsf_pre = new int*[6];
00025   for(int i=0; i<6; i++) m_mdctsf_pre[i] = new int[256];
00026   m_mdctsf_aft = new int*[6];
00027   for(int i=0; i<6; i++) m_mdctsf_aft[i] = new int[256];
00028   m_mdctsf_win = new uint32_t*[6];
00029   for(int i=0; i<6; i++) m_mdctsf_win[i] = new uint32_t[256];
00030   // ltrk
00031   m_mdcltrk_one  = new int[128];
00032   m_mdcltrk_sone = new int[128];
00033   m_mdcltrk_pre  = new int[128];
00034   m_mdcltrk_aft  = new int[128];
00035   m_mdcltrk_win  = new uint32_t[128];
00036   // strk
00037   m_mdcstrk_one  = new int[128];
00038   m_mdcstrk_sone = new int[128];
00039   m_mdcstrk_pre  = new int[128];
00040   m_mdcstrk_aft  = new int[128];
00041   m_mdcstrk_win  = new uint32_t[128];
00042   // ltrk in ltrk counter
00043   m_mdcltrkc_one = new int[132];
00044   m_mdcltrkc_sone= new int[132];
00045   // strk in strk counter
00046   m_mdcstrkc_one   = new int[132];
00047   m_mdcstrkc_sone  = new int[132];
00048   // trigger condition
00049   m_mdcTrigCondi = new int[10];
00050 
00051   filename = getenv("TRIGEVENTROOT");
00052   filename += "/dat/trig_mdc.txt";
00053   ifstream inputfile;
00054   inputfile.open(filename.c_str());
00055   string data[6];
00056   std::vector<uint32_t> vtmp;
00057   uint32_t mark = 226;
00058   for(uint32_t i = 0; i < 6; i++) inputfile >> data[i];
00059   for(uint32_t j = 0; j < 4680; j++) {
00060     for(uint32_t k = 0; k < 6; k++) inputfile >> data[k];
00061     if((uint32_t (atoi(data[0].c_str())) != mark) || j == 4679) {
00062       if(j == 4679) {
00063         for(int m = 1; m < 6; m++) vtmp.push_back(atoi(data[m].c_str()));
00064       }
00065       typedef pair<uint32_t, vector<uint32_t> > vpair;
00066       m_datamap.insert(vpair(mark,vtmp));
00067       mark = atoi(data[0].c_str());
00068       vtmp.clear();
00069     }
00070     if((uint32_t (atoi(data[0].c_str())) == mark) && j != 4679) {
00071       for(int l = 1; l < 6; l++) vtmp.push_back(atoi(data[l].c_str()));
00072     }
00073   }
00074 }
00075 
00076 TrigMdc::~TrigMdc() {
00077   delete  m_mdchit_one;
00078   delete  m_mdctsf_one;
00079   delete  m_mdchit_sone;
00080   delete  m_mdctsf_sone;
00081 
00082   delete m_mdchit_pre;
00083   //  delete m_mdchit_aft;
00084 
00085   delete m_mdcltrk_one;
00086   delete m_mdcstrk_one;
00087   delete m_mdcltrkc_one;
00088   delete m_mdcstrkc_one;
00089 
00090   delete m_mdcltrk_sone;
00091   delete m_mdcstrk_sone;
00092   delete m_mdcltrkc_sone;
00093   delete m_mdcstrkc_sone;
00094 
00095   delete m_mdcTrigCondi;
00096 }
00097 
00098 void TrigMdc::initialize(){
00099   //initialize
00100   for(int i = 0; i < 24; i++)
00101     for(int j = 0; j < 256; j++)
00102       {
00103         m_mdchit_one[i][j] = 0;
00104         m_mdchit_sone[i][j] = 0;
00105         m_mdchit_pre[i][j] = 0;
00106         m_mdchit_aft[i][j] = 0;
00107         m_mdchit_win[i][j] = 0;
00108         if(i < 6) {
00109           m_mdctsf_one[i][j] = 0;
00110           m_mdctsf_sone[i][j] = 0;
00111           m_mdctsf_pre[i][j] = 0;
00112           m_mdctsf_aft[i][j] = 0;
00113           m_mdctsf_win[i][j] = 0;
00114         }
00115       }  
00116   for(int k = 0; k < 132; k++)
00117     {
00118       if(k < 10) m_mdcTrigCondi[k] = 0;
00119       m_mdcltrkc_one[k] = 0;
00120       m_mdcstrkc_one[k] = 0;
00121       m_mdcltrkc_sone[k] = 0;
00122       m_mdcstrkc_sone[k] = 0;
00123       if(k < 128) { 
00124         m_mdcltrk_one[k] = 0; 
00125         m_mdcltrk_sone[k] = 0;
00126         m_mdcltrk_pre[k] = 0;
00127         m_mdcltrk_aft[k] = 0;
00128         m_mdcltrk_win[k] = 0;
00129 
00130         m_mdcstrk_one[k] = 0; 
00131         m_mdcstrk_sone[k] = 0;
00132         m_mdcstrk_pre[k] = 0;
00133         m_mdcstrk_aft[k] = 0;
00134         m_mdcstrk_win[k] = 0;
00135 
00136       }
00137     }
00138 }
00139 
00140 void TrigMdc::setMdcTrigData( uint32_t boardId, uint32_t window, uint32_t datasize, const uint32_t* data){
00141   if(datasize%window != 0) cerr<<"ERROR: The data size is not completed in time windows"<<endl;
00142   uint32_t periods = datasize/window;
00143   std::map<uint32_t, std::vector<uint32_t> >::iterator iter=m_datamap.begin();
00144   for(; iter != m_datamap.end(); iter++){
00145     if(iter->first != boardId) continue;
00146     std::vector<uint32_t>::iterator iter1 = iter->second.begin();
00147     for(; iter1 != iter->second.end(); iter1+=5){
00148       uint32_t byteId = *(iter1+0) -1;
00149       uint32_t bitId = *(iter1+1);
00150       int layerId = *(iter1+2) -1;
00151       int wireId  = *(iter1+3) -1;
00152       uint32_t data_type = *(iter1+4);
00153       int seriesOne = -100;
00154       bool firstSOne = true; // this is a flag of first continue "1" signals
00155       bool flag_firstone(true), flag_lastone(true); // whether to book up or down
00156       for(uint32_t i=0; i<window; i++){
00157         if(layerId < 0 || wireId < 0) continue;
00158         if((iter->first) >= 226 && (iter->first) <= 233){ // TKF1-8 information
00159           if(data_type == 1){ // hit
00160             if((data[byteId + i*periods] >> bitId) & 1){
00161               if(layerId >= 36 && layerId <= 39 ){
00162                 if(flag_firstone && (i-seriesOne!=1) && (i!=0)){ m_mdchit_pre[layerId-16][wireId] = i+1; flag_firstone = false;}
00163                 if( ((i-seriesOne)!=1) && (m_mdchit_aft[layerId-16][wireId]!=0) ) flag_lastone = false;
00164                 if( (flag_firstone==false) && ((i-seriesOne)==1) && flag_lastone) m_mdchit_aft[layerId-16][wireId]=i+1;
00165                 if(((i-seriesOne)==1) && firstSOne) m_mdchit_sone[layerId-16][wireId] += 1;
00166                 if(m_mdchit_sone[layerId-16][wireId] != 0 && (i-seriesOne) != 1) firstSOne = false;
00167                 seriesOne = i;
00168                 m_mdchit_one[layerId-16][wireId] += 1; 
00169                 m_mdchit_win[layerId-16][wireId] += 1<<i;
00170               }
00171               else {
00172                 if(flag_firstone && (i-seriesOne!=1) && (i!=0)){ m_mdchit_pre[layerId][wireId] = i+1; flag_firstone = false;}
00173                 if( ((i-seriesOne)!=1) && (m_mdchit_aft[layerId][wireId]!=0) ) flag_lastone = false;
00174                 if( (flag_firstone==false) && ((i-seriesOne)==1) && flag_lastone) m_mdchit_aft[layerId][wireId]=i+1;
00175                 if(((i-seriesOne) == 1) && firstSOne) m_mdchit_sone[layerId][wireId] += 1;
00176                 if(m_mdchit_sone[layerId][wireId] != 0 && (i-seriesOne) != 1) firstSOne = false;
00177                 seriesOne = i;
00178                 m_mdchit_one[layerId][wireId] += 1;
00179                 m_mdchit_win[layerId][wireId] += 1<<i;
00180               }
00181             }
00182           }
00183           if(data_type == 0) { // TSF
00184             if((data[byteId + i*periods] >> bitId) & 1) {
00185               if(layerId == 10) {
00186                 if(flag_firstone && (i-seriesOne!=1) && (i!=0)){ m_mdctsf_pre[2][wireId] = i+1; flag_firstone = false;}
00187                 if( ((i-seriesOne)!=1) && (m_mdctsf_aft[2][wireId]!=0) ) flag_lastone = false;
00188                 if( (flag_firstone==false) && ((i-seriesOne)==1) && flag_lastone) m_mdctsf_aft[2][wireId]=i+1;
00189                 
00190                 if((i-seriesOne) == 1 && firstSOne) m_mdctsf_sone[2][wireId] += 1;
00191                 if(m_mdctsf_sone[2][wireId] != 0 && (i-seriesOne) != 1) firstSOne = false;
00192                 seriesOne = i;
00193                 m_mdctsf_one[2][wireId] += 1;
00194                 m_mdctsf_win[2][wireId] += 1<<i;
00195               }
00196               if(layerId == 14) {
00197                 if(flag_firstone && (i-seriesOne!=1) && (i!=0)){ m_mdctsf_pre[3][wireId] = i+1; flag_firstone = false;}
00198                 if( ((i-seriesOne)!=1) && (m_mdctsf_aft[3][wireId]!=0) ) flag_lastone = false;
00199                 if( (flag_firstone==false) && ((i-seriesOne)==1) && flag_lastone) m_mdctsf_aft[3][wireId]=i+1;
00200                 
00201                 if((i-seriesOne) == 1 && firstSOne) m_mdctsf_sone[3][wireId] += 1;
00202                 if(m_mdctsf_sone[3][wireId] != 0 && (i-seriesOne) != 1) firstSOne = false;
00203                 seriesOne = i;
00204                 m_mdctsf_one[3][wireId] += 1;
00205                 m_mdctsf_win[3][wireId] += 1<<i;
00206               }
00207               if(layerId == 17) {
00208                 if(flag_firstone && (i-seriesOne!=1) && (i!=0)){ m_mdctsf_pre[4][wireId] = i+1; flag_firstone = false;}
00209                 if( ((i-seriesOne)!=1) && (m_mdctsf_aft[4][wireId]!=0) ) flag_lastone = false;
00210                 if( (flag_firstone==false) && ((i-seriesOne)==1) && flag_lastone) m_mdctsf_aft[4][wireId]=i+1;
00211                 
00212                 if((i-seriesOne) == 1 && firstSOne) m_mdctsf_sone[4][wireId] += 1;
00213                 if(m_mdctsf_sone[4][wireId] != 0 && (i-seriesOne) != 1) firstSOne = false;
00214                 seriesOne = i;
00215                 m_mdctsf_one[4][wireId] += 1;
00216                 m_mdctsf_win[4][wireId] += 1<<i;
00217               }
00218               if(layerId == 37) {
00219                 if(flag_firstone && (i-seriesOne!=1) && (i!=0)){ m_mdctsf_pre[5][wireId] = i+1; flag_firstone = false;}
00220                 if( ((i-seriesOne)!=1) && (m_mdctsf_aft[5][wireId]!=0) ) flag_lastone = false;
00221                 if( (flag_firstone==false) && ((i-seriesOne)==1) && flag_lastone) m_mdctsf_aft[5][wireId]=i+1;
00222                 
00223                 if((i-seriesOne) == 1 && firstSOne) m_mdctsf_sone[5][wireId] += 1;
00224                 if(m_mdctsf_sone[5][wireId] != 0 && (i-seriesOne) != 1) firstSOne = false;
00225                 seriesOne = i;
00226                 m_mdctsf_one[5][wireId] += 1;
00227                 m_mdctsf_win[5][wireId] += 1<<i;
00228               }
00229             }
00230           }
00231           if(data_type == 2) { // LTK
00232             if((data[byteId + i*periods] >> bitId) & 1) {
00233                 if(flag_firstone && (i-seriesOne!=1) && (i!=0)){ m_mdcltrk_pre[wireId] = i+1; flag_firstone = false;}
00234                 if( ((i-seriesOne)!=1) && (m_mdcltrk_aft[wireId]!=0) ) flag_lastone = false;
00235                 if( (flag_firstone==false) && ((i-seriesOne)==1) && flag_lastone) m_mdcltrk_aft[wireId]=i+1;
00236                 
00237                 if((i-seriesOne) == 1 && firstSOne) m_mdcltrk_sone[wireId] += 1;
00238                 if(m_mdcltrk_sone[wireId] != 0 && (i-seriesOne) != 1) firstSOne = false;
00239                 seriesOne = i;
00240                 m_mdcltrk_one[wireId] += 1;
00241                 m_mdcltrk_win[wireId] += 1<<i;
00242             }
00243           }
00244           if(data_type == 3) { // STK
00245             if((data[byteId + i*periods] >> bitId) & 1) {
00246                 if(flag_firstone && (i-seriesOne!=1) && (i!=0)){ m_mdcstrk_pre[wireId] = i+1; flag_firstone = false;}
00247                 if( ((i-seriesOne)!=1) && (m_mdcstrk_aft[wireId]!=0) ) flag_lastone = false;
00248                 if( (flag_firstone==false) && ((i-seriesOne)==1) && flag_lastone) m_mdcstrk_aft[wireId]=i+1;
00249                 
00250                 if((i-seriesOne) == 1 && firstSOne) m_mdcstrk_sone[wireId] += 1;
00251                 if(m_mdcstrk_sone[wireId] != 0 && (i-seriesOne) != 1) firstSOne = false;
00252                 seriesOne = i;
00253                 m_mdcstrk_one[wireId] += 1;
00254                 m_mdcstrk_win[wireId] += 1<<i;
00255             }
00256           }
00257         } // end of TKF1-8
00258 
00259         if((iter->first) == 234) { // ITKF information
00260           if(data_type == 0) {
00261             if((data[byteId + i*periods] >> bitId) & 1) {
00262               if(layerId == 2) {
00263                 if((i - seriesOne) == 1 && firstSOne) m_mdctsf_sone[0][wireId] += 1;
00264                 if(m_mdctsf_sone[0][wireId] != 0 && (i - seriesOne) != 1) firstSOne = false;
00265                 seriesOne = i;
00266                 m_mdctsf_one[0][wireId] += 1;
00267               }
00268               if(layerId == 6) {
00269                 if((i - seriesOne) == 1 && firstSOne) m_mdctsf_sone[1][wireId] += 1;
00270                 if(m_mdctsf_sone[1][wireId] != 0 && (i - seriesOne) != 1) firstSOne = false;
00271                 seriesOne = i;
00272                 m_mdctsf_one[1][wireId] += 1;
00273               }
00274             }
00275           }
00276           if(data_type == 1) { 
00277             if((data[byteId + i*periods] >> bitId) & 1) {
00278               if((i - seriesOne) == 1 && firstSOne) m_mdchit_sone[layerId][wireId] += 1;
00279               if(m_mdchit_sone[layerId][wireId] != 0 && (i - seriesOne) != 1) firstSOne = false;
00280               seriesOne = i;
00281               m_mdchit_one[layerId][wireId] += 1;
00282             }
00283           }
00284           if(data_type == 4) {
00285             if((data[byteId + i*periods] >> bitId) & 1) {
00286               m_mdcTrigCondi[wireId] = 1;
00287             }
00288           }
00289         } // end of ITKF 
00290 
00291         if((iter->first) == 235 || (iter->first) == 236) { // LTKC or STKC information
00292           if(data_type == 2) {
00293             if((data[byteId + i*periods] >> bitId) & 1) {
00294               if((i - seriesOne) == 1 && firstSOne) m_mdcltrkc_sone[wireId] += 1;
00295               if(m_mdcltrkc_sone[wireId] != 0 && (i - seriesOne) != 1) firstSOne = false;
00296               seriesOne = i;
00297               m_mdcltrkc_one[wireId] += 1;
00298               if(wireId >= 128) m_mdcTrigCondi[wireId - 126] = 1;
00299             }
00300           }
00301           if(data_type == 3) {
00302             if((data[byteId + i*periods] >> bitId) & 1) {
00303               if((i - seriesOne) == 1 && firstSOne) m_mdcstrkc_sone[wireId] += 1;
00304               if(m_mdcstrkc_sone[wireId] != 0 && (i - seriesOne) != 1) firstSOne = false;
00305               seriesOne = i;
00306               m_mdcstrkc_one[wireId] += 1;
00307               if(wireId >= 128) m_mdcTrigCondi[wireId - 122] = 1; 
00308             }
00309           }
00310         } //end of LTKC or STKC  
00311     
00312       } // loop in windows
00313      
00314     }
00315   }
00316 }
00317 
00318 void TrigMdc::print() {
00319   cout<<"The number of board is "<<m_datamap.size()<<endl;
00320   std::map<uint32_t, std::vector<uint32_t> >::iterator iter = m_datamap.begin();
00321   if(iter->first == 0xe2)
00322     cout<<"The data size of E2 board is "<<iter->second.size()<<endl;
00323 
00324   for(int i = 0; i < 24; i++)
00325     for(int j = 0; j < 256; j++)
00326       {
00327         m_mdchit_one[i][j] = 0;
00328         m_mdchit_sone[i][j] = 0;
00329         cout<<"MDC hits: "<<i<<" "<<j<<" "<<m_mdchit_one[i][j]<<endl;
00330         cout<<"MDC hits: "<<i<<" "<<j<<" "<<m_mdchit_sone[i][j]<<endl;
00331         if(i < 6) {
00332           m_mdctsf_one[i][j] = 0;
00333           m_mdctsf_sone[i][j] = 0;
00334           cout<<"MDC tsf: "<<i<<" "<<j<<" "<<m_mdctsf_one[i][j]<<endl;
00335           cout<<"MDC tsf: "<<i<<" "<<j<<" "<<m_mdctsf_sone[i][j]<<endl;
00336         }
00337       }
00338   for(int k = 0; k < 132; k++)
00339     {
00340       m_mdcltrkc_one[k] = 0;
00341       m_mdcstrkc_one[k] = 0;
00342       m_mdcltrkc_sone[k] = 0;
00343       m_mdcstrkc_sone[k] = 0;
00344       cout<<"MDC ltrkc: "<<k<<" "<<m_mdcltrkc_one[k]<<endl;
00345       cout<<"MDC strkc: "<<k<<" "<<m_mdcstrkc_one[k]<<endl;
00346       cout<<"MDC ltrkc: "<<k<<" "<<m_mdcltrkc_sone[k]<<endl;
00347       cout<<"MDC strkc: "<<k<<" "<<m_mdcstrkc_sone[k]<<endl;
00348       if(k < 128) {
00349         m_mdcltrk_one[k] = 0;
00350         m_mdcstrk_one[k] = 0;
00351         m_mdcltrk_sone[k] = 0;
00352         m_mdcstrk_sone[k] = 0;
00353         cout<<"MDC ltrk: "<<k<<" "<<m_mdcltrk_one[k]<<endl;
00354         cout<<"MDC strk: "<<k<<" "<<m_mdcstrk_one[k]<<endl;
00355         cout<<"MDC ltrk: "<<k<<" "<<m_mdcltrk_sone[k]<<endl;
00356         cout<<"MDC strk: "<<k<<" "<<m_mdcstrk_sone[k]<<endl;
00357       }
00358     }
00359 }

Generated on Tue Nov 29 23:11:43 2016 for BOSS_7.0.2 by  doxygen 1.4.7