#include <BesTMTrig.h>
Public Member Functions | |
BesTMTrig () | |
BesTMTrig () | |
void | dump () |
void | dump () |
void | startTMTrig () |
void | startTMTrig () |
~BesTMTrig () | |
~BesTMTrig () | |
Private Attributes | |
BesGlobalTrigSvc * | m_pIBGT |
BesGlobalTrigSvc * | m_pIBGT |
std::vector< std::vector< int > > | m_tm_barrel |
std::vector< std::vector< int > > | m_tm_barrel |
std::vector< std::vector< int > > | m_tm_ecap |
std::vector< std::vector< int > > | m_tm_ecap |
std::vector< std::vector< int > > | m_tm_wcap |
std::vector< std::vector< int > > | m_tm_wcap |
|
00024 { 00025 ISvcLocator* svcLocator = Gaudi::svcLocator(); 00026 IBesGlobalTrigSvc* tmpSvc; 00027 StatusCode sc = svcLocator->service("BesGlobalTrigSvc", tmpSvc); 00028 m_pIBGT = dynamic_cast<BesGlobalTrigSvc* >(tmpSvc); 00029 char line[255]; 00030 std::string filename = std::string(getenv( "TRIGGERROOT" )); 00031 filename += std::string("/data/tm/TM_BARREL.pat"); 00032 std::ifstream infile( filename.c_str() ); 00033 if(infile) { 00034 while(infile) { 00035 infile.getline(line,255); 00036 if(line[0] == '#') continue; 00037 std::string mdcId, tofId_l, tofId_h, emcId_l, emcId_h; 00038 char* token = strtok( line, " " ); 00039 if ( token ) { mdcId = token; token = strtok( NULL, " " );} else continue; 00040 if ( token ) { tofId_l = token; token = strtok( NULL, " " );} else continue; 00041 if ( token ) { tofId_h = token; token = strtok( NULL, " " );} else continue; 00042 if ( token ) { emcId_l = token; token = strtok( NULL, " " );} else continue; 00043 if ( token ) { emcId_h = token; token = strtok( NULL, " " );} else continue; 00044 if ( token != NULL ) continue; 00045 //Convert to int 00046 //int i_mdcId = atoi( mdcId.c_str() ); 00047 int i_tofId_l = atoi( tofId_l.c_str() ); 00048 int i_tofId_h = atoi( tofId_h.c_str() ); 00049 int i_emcId_l = atoi( emcId_l.c_str() ); 00050 int i_emcId_h = atoi( emcId_h.c_str() ); 00051 //std::cout << "MdcId TofId_L TofId_H EmcId_L EmcId_H: " << i_mdcId << ", " << i_tofId_l <<", " << i_tofId_h << ", " << i_emcId_l << ", " << i_emcId_h << std::endl; 00052 std::vector<int> tof_tmp; 00053 std::vector<int> emc_tmp; 00054 //for tof 00055 if(i_tofId_l > i_tofId_h) { 00056 for(int i = i_tofId_l; i <= (i_tofId_h + 88); i++) { 00057 if(i >= 88) tof_tmp.push_back(i - 88); 00058 else tof_tmp.push_back(i); 00059 } 00060 } 00061 else { 00062 for(int i = i_tofId_l; i <= i_tofId_h; i++) { 00063 tof_tmp.push_back(i); 00064 } 00065 } 00066 //for emc 00067 if(i_emcId_l > i_emcId_h) { 00068 for(int i = i_emcId_l; i <= (i_emcId_h + 30); i++) { 00069 if(i >= 30) emc_tmp.push_back(i - 30); 00070 else emc_tmp.push_back(i); 00071 } 00072 } 00073 else { 00074 for(int i = i_emcId_l; i <= i_emcId_h; i++) { 00075 emc_tmp.push_back(i); 00076 } 00077 } 00078 m_tm_barrel.push_back(tof_tmp); 00079 m_tm_barrel.push_back(emc_tmp); 00080 } 00081 } 00082 else { 00083 std::cout << "Can not open file: " << filename << " in BesTMTrig. " << std::endl; 00084 } 00085 //read track match east endcap 00086 filename = std::string(getenv( "TRIGGERROOT" )); 00087 filename += std::string("/data/tm/TM_EAST_ENDCAP.pat"); 00088 std::ifstream infile1( filename.c_str() ); 00089 if(infile1) { 00090 while(infile1) { 00091 infile1.getline(line,255); 00092 if(line[0] == '#') continue; 00093 std::string mdcId, tofId_l, tofId_h, emcId_l, emcId_h; 00094 char* token = strtok( line, " " ); 00095 if ( token ) { mdcId = token; token = strtok( NULL, " " );} else continue; 00096 if ( token ) { tofId_l = token; token = strtok( NULL, " " );} else continue; 00097 if ( token ) { tofId_h = token; token = strtok( NULL, " " );} else continue; 00098 if ( token ) { emcId_l = token; token = strtok( NULL, " " );} else continue; 00099 if ( token ) { emcId_h = token; token = strtok( NULL, " " );} else continue; 00100 if ( token != NULL ) continue; 00101 //Convert to int 00102 //int i_mdcId = atoi( mdcId.c_str() ); 00103 int i_tofId_l = atoi( tofId_l.c_str() ); 00104 int i_tofId_h = atoi( tofId_h.c_str() ); 00105 int i_emcId_l = atoi( emcId_l.c_str() ); 00106 int i_emcId_h = atoi( emcId_h.c_str() ); 00107 //std::cout << "MdcId TofId_L TofId_H EmcId_L EmcId_H: " << i_mdcId << ", " << i_tofId_l <<", " << i_tofId_h << ", " << i_emcId_l << ", " << i_emcId_h << std::endl; 00108 std::vector<int> tof_tmp; 00109 std::vector<int> emc_tmp; 00110 //for tof 00111 if(i_tofId_l > i_tofId_h) { 00112 for(int i = i_tofId_l; i <= (i_tofId_h + 24); i++) { 00113 if(i >= 24) tof_tmp.push_back(i - 24); 00114 else tof_tmp.push_back(i); 00115 } 00116 } 00117 else { 00118 for(int i = i_tofId_l; i <= i_tofId_h; i++) { 00119 tof_tmp.push_back(i); 00120 } 00121 } 00122 //for emc 00123 if(i_emcId_l > i_emcId_h) { 00124 for(int i = i_emcId_l; i <= (i_emcId_h + 16); i++) { 00125 if(i >= 16) emc_tmp.push_back(i - 16); 00126 else emc_tmp.push_back(i); 00127 } 00128 } 00129 else { 00130 for(int i = i_emcId_l; i <= i_emcId_h; i++) { 00131 emc_tmp.push_back(i); 00132 } 00133 } 00134 m_tm_ecap.push_back(tof_tmp); 00135 m_tm_ecap.push_back(emc_tmp); 00136 } 00137 } 00138 else { 00139 std::cout << "Can not open file: " << filename << " in BesTMTrig. " << std::endl; 00140 } 00141 00142 //read track match west endcap 00143 filename = std::string(getenv( "TRIGGERROOT" )); 00144 filename += std::string("/data/tm/TM_WEST_ENDCAP.pat"); 00145 std::ifstream infile2( filename.c_str() ); 00146 if(infile2) { 00147 while(infile2) { 00148 infile2.getline(line,255); 00149 if(line[0] == '#') continue; 00150 std::string mdcId, tofId_l, tofId_h, emcId_l, emcId_h; 00151 char* token = strtok( line, " " ); 00152 if ( token ) { mdcId = token; token = strtok( NULL, " " );} else continue; 00153 if ( token ) { tofId_l = token; token = strtok( NULL, " " );} else continue; 00154 if ( token ) { tofId_h = token; token = strtok( NULL, " " );} else continue; 00155 if ( token ) { emcId_l = token; token = strtok( NULL, " " );} else continue; 00156 if ( token ) { emcId_h = token; token = strtok( NULL, " " );} else continue; 00157 if ( token != NULL ) continue; 00158 //Convert to int 00159 //int i_mdcId = atoi( mdcId.c_str() ); 00160 int i_tofId_l = atoi( tofId_l.c_str() ); 00161 int i_tofId_h = atoi( tofId_h.c_str() ); 00162 int i_emcId_l = atoi( emcId_l.c_str() ); 00163 int i_emcId_h = atoi( emcId_h.c_str() ); 00164 //std::cout << "MdcId TofId_L TofId_H EmcId_L EmcId_H: " << i_mdcId << ", " << i_tofId_l <<", " << i_tofId_h << ", " << i_emcId_l << ", " << i_emcId_h << std::endl; 00165 std::vector<int> tof_tmp; 00166 std::vector<int> emc_tmp; 00167 //for tof 00168 if(i_tofId_l > i_tofId_h) { 00169 for(int i = i_tofId_l; i <= (i_tofId_h + 24); i++) { 00170 if(i >= 24) tof_tmp.push_back(i - 24); 00171 else tof_tmp.push_back(i); 00172 } 00173 } 00174 else { 00175 for(int i = i_tofId_l; i <= i_tofId_h; i++) { 00176 tof_tmp.push_back(i); 00177 } 00178 } 00179 //for emc 00180 if(i_emcId_l > i_emcId_h) { 00181 for(int i = i_emcId_l; i <= (i_emcId_h + 16); i++) { 00182 if(i >= 16) emc_tmp.push_back(i - 16); 00183 else emc_tmp.push_back(i); 00184 } 00185 } 00186 else { 00187 for(int i = i_emcId_l; i <= i_emcId_h; i++) { 00188 emc_tmp.push_back(i); 00189 } 00190 } 00191 m_tm_wcap.push_back(tof_tmp); 00192 m_tm_wcap.push_back(emc_tmp); 00193 } 00194 } 00195 else { 00196 std::cout << "Can not open file: " << filename << " in BesTMTrig. " << std::endl; 00197 } 00198 infile.close(); 00199 infile1.close(); 00200 infile2.close(); 00201 //dump(); 00202 }
|
|
00204 { 00205 }
|
|
|
|
|
|
|
|
00207 { 00208 std::cout << "The size of barrel vector: " << m_tm_barrel.size() << std::endl; 00209 std::cout << "The size of east endcap vector: " << m_tm_ecap.size() << std::endl; 00210 std::cout << "The size of west endcap vector: " << m_tm_wcap.size() << std::endl; 00211 std::cout << "--------------------------- BARREL -----------------------------" << std::endl; 00212 for(unsigned int i = 0; i < m_tm_barrel.size(); i+=2) { 00213 std::cout << "MdcId is " << i/2 << " TofId size " << m_tm_barrel[i].size() << 00214 " Id " << m_tm_barrel[i][0] << " " << m_tm_barrel[i][m_tm_barrel[i].size() - 1] << std::endl; 00215 std::cout << "MdcId is " << i/2 << " EmcId size " << m_tm_barrel[i+1].size() << 00216 " Id " << m_tm_barrel[i+1][0] << " " << m_tm_barrel[i+1][m_tm_barrel[i+1].size() - 1] << std::endl; 00217 } 00218 std::cout << "--------------------------- EAST ENDCAP -----------------------------" << std::endl; 00219 for(unsigned int i = 0; i < m_tm_ecap.size(); i+=2) { 00220 std::cout << "MdcId is " << i/2 << " TofId size " << m_tm_ecap[i].size() << 00221 " Id " << m_tm_ecap[i][0] << " " << m_tm_ecap[i][m_tm_ecap[i].size() - 1] << std::endl; 00222 std::cout << "MdcId is " << i/2 << " EmcId size " << m_tm_ecap[i+1].size() << 00223 " Id " << m_tm_ecap[i+1][0] << " " << m_tm_ecap[i+1][m_tm_ecap[i+1].size() - 1] << std::endl; 00224 } 00225 std::cout << "--------------------------- WEST ENDCAP -----------------------------" << std::endl; 00226 for(unsigned int i = 0; i < m_tm_wcap.size(); i+=2) { 00227 std::cout << "MdcId is " << i/2 << " TofId size " << m_tm_wcap[i].size() << 00228 " Id " << m_tm_wcap[i][0] << " " << m_tm_wcap[i][m_tm_wcap[i].size() - 1] << std::endl; 00229 std::cout << "MdcId is " << i/2 << " EmcId size " << m_tm_wcap[i+1].size() << 00230 " Id " << m_tm_wcap[i+1][0] << " " << m_tm_wcap[i+1][m_tm_wcap[i+1].size() - 1] << std::endl; 00231 } 00232 }
|
|
|
|
00234 { 00235 //find mdc track id used in track match 00236 std::vector<int> tm_mdcstrkId; 00237 std::vector<int> tm_mdcltrkId; 00238 std::vector<int> mdcstrkId = m_pIBGT->getMdcStrkId(); 00239 std::vector<int> mdcltrkId = m_pIBGT->getMdcLtrkId(); 00240 for(unsigned int i = 0; i < mdcstrkId.size(); i++) 00241 { 00242 int trackId = int (mdcstrkId[i]/2); 00243 if(find(tm_mdcstrkId.begin(),tm_mdcstrkId.end(),trackId) == tm_mdcstrkId.end()) tm_mdcstrkId.push_back(trackId); 00244 } 00245 for(unsigned int i = 0; i < mdcltrkId.size(); i++) 00246 { 00247 int trackId = int (mdcltrkId[i]/2); 00248 if(find(tm_mdcltrkId.begin(),tm_mdcltrkId.end(),trackId) == tm_mdcltrkId.end()) tm_mdcltrkId.push_back(trackId); 00249 } 00250 //find tof track id used in track match 00251 std::map<int,std::vector<int>,greater<int> > tofHit; 00252 std::vector<int> tm_btofhitId; 00253 std::vector<int> tm_etofhitId; 00254 std::vector<int> tm_wtofhitId; 00255 tofHit = m_pIBGT->getTofHitPos(); 00256 for(std::map<int,std::vector<int>,greater<int> >::iterator iter = tofHit.begin(); iter != tofHit.end(); iter++) { 00257 if(iter->first == 0) { 00258 for(unsigned int i = 0; i < iter->second.size(); i++){ 00259 tm_etofhitId.push_back(iter->second[i]); 00260 } 00261 } 00262 if(iter->first == 1) { 00263 for(unsigned int i = 0; i < iter->second.size(); i++){ 00264 tm_btofhitId.push_back(iter->second[i]); 00265 } 00266 } 00267 if(iter->first == 2) { 00268 for(unsigned int i = 0; i < iter->second.size(); i++){ 00269 tm_wtofhitId.push_back(iter->second[i]); 00270 } 00271 } 00272 } 00273 //find emc track id used in track match 00274 std::map<int,std::vector<complex<int> >, greater<int> > emcHit; 00275 std::vector<int> tm_bemcClusId; 00276 std::vector<int> tm_eemcClusId; 00277 std::vector<int> tm_wemcClusId; 00278 emcHit = m_pIBGT->getEmcClusId(); 00279 for(std::map<int,std::vector<complex<int> >, greater<int> >::iterator iter = emcHit.begin(); iter != emcHit.end(); iter++) { 00280 if(iter->first == 1) { 00281 for(unsigned int i = 0; i < iter->second.size(); i++) 00282 { 00283 // cout<<"barrel theta is "<<(iter->second[i]).real()<<" phi is "<<(iter->second[i]).imag()<<endl; 00284 int crystalId = iter->second[i].imag(); 00285 if(find(tm_bemcClusId.begin(),tm_bemcClusId.end(),crystalId) == tm_bemcClusId.end()) tm_bemcClusId.push_back(crystalId); 00286 } 00287 } 00288 if(iter->first == 0) { 00289 for(unsigned int i = 0; i < iter->second.size(); i++) 00290 { 00291 // cout<<"east theta is "<<(iter->second[i]).real()<<" phi is "<<(iter->second[i]).imag()<<endl; 00292 int crystalId = int ((iter->second[i].imag())/2); 00293 if(find(tm_eemcClusId.begin(),tm_eemcClusId.end(),crystalId) == tm_eemcClusId.end()) tm_eemcClusId.push_back(crystalId); 00294 } 00295 } 00296 if(iter->first == 2) { 00297 for(unsigned int i = 0; i < iter->second.size(); i++) 00298 { 00299 //cout<<"west theta is "<<(iter->second[i]).real()<<" phi is "<<(iter->second[i]).imag()<<endl; 00300 int crystalId = int ((iter->second[i].imag())/2); 00301 if(find(tm_wemcClusId.begin(),tm_wemcClusId.end(),crystalId) == tm_wemcClusId.end()) tm_wemcClusId.push_back(crystalId); 00302 } 00303 } 00304 } 00305 //start track match 00306 int BTOF_MATCH[64]; 00307 int ETOF_MATCH[64]; 00308 int WTOF_MATCH[64]; 00309 int BEMC_MATCH[64]; 00310 int EEMC_MATCH[64]; 00311 int WEMC_MATCH[64]; 00312 int BTOF_EMC_MATCH[64]; 00313 int ETOF_EMC_MATCH[64]; 00314 int WTOF_EMC_MATCH[64]; 00315 for(int i = 0; i < 64; i++) { 00316 BTOF_MATCH[i] = 0; 00317 ETOF_MATCH[i] = 0; 00318 WTOF_MATCH[i] = 0; 00319 BEMC_MATCH[i] = 0; 00320 EEMC_MATCH[i] = 0; 00321 WEMC_MATCH[i] = 0; 00322 BTOF_EMC_MATCH[i] = 0; 00323 ETOF_EMC_MATCH[i] = 0; 00324 WTOF_EMC_MATCH[i] = 0; 00325 } 00326 for(unsigned int i = 0; i < tm_mdcltrkId.size(); i++) { 00327 int cellId = tm_mdcltrkId[i]; 00328 for(unsigned int j = 0; j < (m_tm_barrel[2*cellId]).size(); j++) { 00329 if(find(tm_btofhitId.begin(),tm_btofhitId.end(),m_tm_barrel[2*cellId][j]) != tm_btofhitId.end()) { BTOF_MATCH[cellId] = 1; break; } 00330 } 00331 for(unsigned int j = 0; j < (m_tm_barrel[2*cellId+1]).size(); j++) { 00332 if(find(tm_bemcClusId.begin(),tm_bemcClusId.end(),m_tm_barrel[2*cellId+1][j]) != tm_bemcClusId.end()) { BEMC_MATCH[cellId] = 1; break; } 00333 } 00334 } 00335 for(unsigned int i = 0; i < tm_mdcstrkId.size(); i++) { 00336 int cellId = tm_mdcstrkId[i]; 00337 for(unsigned int j = 0; j < (m_tm_ecap[2*cellId]).size(); j++) { 00338 if(find(tm_etofhitId.begin(),tm_etofhitId.end(),m_tm_ecap[2*cellId][j]) != tm_etofhitId.end()) { ETOF_MATCH[cellId] = 1; break; } 00339 } 00340 for(unsigned int j = 0; j < (m_tm_ecap[2*cellId+1]).size(); j++) { 00341 if(find(tm_eemcClusId.begin(),tm_eemcClusId.end(),m_tm_ecap[2*cellId+1][j]) != tm_eemcClusId.end()) { EEMC_MATCH[cellId] = 1; break; } 00342 } 00343 for(unsigned int j = 0; j < (m_tm_wcap[2*cellId]).size(); j++) { 00344 if(find(tm_wtofhitId.begin(),tm_wtofhitId.end(),m_tm_wcap[2*cellId][j]) != tm_wtofhitId.end()) { WTOF_MATCH[cellId] = 1; break; } 00345 } 00346 for(unsigned int j = 0; j < (m_tm_wcap[2*cellId+1]).size(); j++) { 00347 if(find(tm_wemcClusId.begin(),tm_wemcClusId.end(),m_tm_wcap[2*cellId+1][j]) != tm_wemcClusId.end()) { WEMC_MATCH[cellId] = 1; break; } 00348 } 00349 } 00350 //count track number 00351 int NATrk = 0; 00352 int NBTrk = 0; 00353 int NCTrk = 0; 00354 for(int i = 0; i < 64; i++) { 00355 if(BTOF_MATCH[i] == 1) NATrk++; 00356 if((BTOF_MATCH[i] == 1) && (BEMC_MATCH[i] == 1)) { BTOF_EMC_MATCH[i] = 1; NBTrk++; } 00357 if((ETOF_MATCH[i] == 1) && (EEMC_MATCH[i] == 1)) ETOF_EMC_MATCH[i] = 1; 00358 if((WTOF_MATCH[i] == 1) && (WEMC_MATCH[i] == 1)) WTOF_EMC_MATCH[i] = 1; 00359 if(m_pIBGT->getEndCapMode() == 0) { 00360 if(ETOF_MATCH[i] == 1) NCTrk++; 00361 if(WTOF_MATCH[i] == 1) NCTrk++; 00362 } 00363 else { 00364 if(ETOF_EMC_MATCH[i] == 1) NCTrk++; 00365 if(WTOF_EMC_MATCH[i] == 1) NCTrk++; 00366 } 00367 } 00368 //set trigger conditions 00369 bool NATrk1 = false; 00370 bool NATrk2 = false; 00371 bool ATrk_BB = false; 00372 bool NBTrk1 = false; 00373 bool NBTrk2 = false; 00374 bool BTrk_BB = false; 00375 bool NCTrk1 = false; 00376 bool NCTrk2 = false; 00377 bool CTrk_BB = false; 00378 00379 if(NATrk >= 1) NATrk1 = true; 00380 if(NATrk >= 2) NATrk2 = true; 00381 if(NBTrk >= 1) NBTrk1 = true; 00382 if(NBTrk >= 2) NBTrk2 = true; 00383 if(NCTrk >= 1) NCTrk1 = true; 00384 if(NCTrk >= 2) NCTrk2 = true; 00385 00386 for(int i = 0; i < 64; i++) { 00387 if(BTOF_MATCH[i] == 1) { 00388 for(int j=0; j < 7; j++) 00389 { 00390 int id; 00391 if((i+j+29) > 63) 00392 { 00393 id = i+j+29-64; 00394 } 00395 else 00396 { 00397 id = i+j+29; 00398 } 00399 if(BTOF_MATCH[id] == 1) ATrk_BB = true; 00400 } 00401 } 00402 if(BTOF_EMC_MATCH[i] == 1) { 00403 for(int j=0; j < 7; j++) 00404 { 00405 int id; 00406 if((i+j+29) > 63) 00407 { 00408 id = i+j+29-64; 00409 } 00410 else 00411 { 00412 id = i+j+29; 00413 } 00414 if(BTOF_EMC_MATCH[id] == 1) BTrk_BB = true; 00415 } 00416 } 00417 if(m_pIBGT->getEndCapMode() == 0) { 00418 if((ETOF_MATCH[i] == 1) || (WTOF_MATCH[i] == 1)) { 00419 for(int j=0; j < 7; j++) 00420 { 00421 int id; 00422 if((i+j+29) > 63) 00423 { 00424 id = i+j+29-64; 00425 } 00426 else 00427 { 00428 id = i+j+29; 00429 } 00430 if((ETOF_MATCH[id] == 1) || (WTOF_MATCH[id] == 1)) CTrk_BB = true; 00431 } 00432 } 00433 } 00434 else { 00435 if((ETOF_EMC_MATCH[i] == 1) || (WTOF_EMC_MATCH[i] == 1)) { 00436 for(int j=0; j < 7; j++) 00437 { 00438 int id; 00439 if((i+j+29) > 63) 00440 { 00441 id = i+j+29-64; 00442 } 00443 else 00444 { 00445 id = i+j+29; 00446 } 00447 if((ETOF_EMC_MATCH[id] == 1) || (WTOF_EMC_MATCH[id] == 1)) CTrk_BB = true; 00448 } 00449 } 00450 } 00451 } 00452 00453 m_pIBGT->setTMNATrk1(NATrk1); 00454 m_pIBGT->setTMNATrk2(NATrk2); 00455 m_pIBGT->setTMATrkBB(ATrk_BB); 00456 m_pIBGT->setTMNBTrk1(NBTrk1); 00457 m_pIBGT->setTMNBTrk2(NBTrk2); 00458 m_pIBGT->setTMBTrkBB(BTrk_BB); 00459 m_pIBGT->setTMNCTrk1(NCTrk1); 00460 m_pIBGT->setTMNCTrk2(NCTrk2); 00461 m_pIBGT->setTMCTrkBB(CTrk_BB); 00462 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|