#include <EmcCCount.h>
|
00030 { 00031 m_EmcTCFinder = EmcTCFinder::get_Emc(); 00032 ISvcLocator* svcLocator = Gaudi::svcLocator(); 00033 StatusCode sc = svcLocator->service("BesGlobalTrigSvc", m_tmpSvc); 00034 m_pIBGT = dynamic_cast<BesGlobalTrigSvc* >(m_tmpSvc); 00035 }
|
|
00037 { 00038 }
|
|
|
|
|
|
|
|
00171 { 00172 //double L1TC_THRESH = m_pIBGT->getL1TC_THRESH(); 00173 /*for(int i = 0; ; i++) { 00174 double theshold = RandGauss::shoot(m_pIBGT->getL1TC_THRESH(),3.3); 00175 if(theshold < m_pIBGT->getL1TC_THRESH()) { 00176 L1TC_THRESH = theshold; 00177 break; 00178 } 00179 }*/ 00180 00181 //double energy0,energy1,energy2,energy3,energy4,energy5,energy6,energy7,energy8; 00182 int clus0,clus1,clus3,clus4,clus8; 00183 /* if(partId==1) 00184 { 00185 // Cluster Finder Logic 00186 // Phi---> 00187 // |---|----|----| 00188 // | 5 | 1 | 6 | 00189 // |---|----|----| 00190 // | 2 | 0 | 3 | 00191 // |---|----|----| ^ 00192 // | 7 | 4 | 8 | | 00193 // |---|----|----| Theta 00194 energy0 = m_EmcTCFinder->getBTCEnergy(TCThetaNb,TCPhiNb); 00195 if(energy0>L1TC_THRESH) 00196 { 00197 //trigger cell index from 0, not 1, so TrigConf::TCTHETANO_B - 1 or TrigConf::TCPHINO_B - 1 needed 00198 if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)) energy1 = m_EmcTCFinder->getBTCEnergy(TCThetaNb+1,TCPhiNb); 00199 else energy1 = 0.0; 00200 00201 if(TCPhiNb!=0) energy2 = m_EmcTCFinder->getBTCEnergy(TCThetaNb,TCPhiNb-1); 00202 else energy2 = m_EmcTCFinder->getBTCEnergy(TCThetaNb,TrigConf::TCPHINO_B-1); 00203 00204 if(TCPhiNb!=(TrigConf::TCPHINO_B-1)) energy3 = m_EmcTCFinder->getBTCEnergy(TCThetaNb,TCPhiNb+1); 00205 else energy3 = m_EmcTCFinder->getBTCEnergy(TCThetaNb,0); 00206 00207 if(TCThetaNb!=0) energy4 = m_EmcTCFinder->getBTCEnergy(TCThetaNb-1,TCPhiNb); 00208 else energy4 = 0.0; 00209 00210 if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)&&TCPhiNb!=0) energy5 = m_EmcTCFinder->getBTCEnergy(TCThetaNb+1,TCPhiNb-1); 00211 if(TCThetaNb==(TrigConf::TCTHETANO_B-1)) energy5 = 0.0; 00212 if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)&&TCPhiNb==0) energy5 = m_EmcTCFinder->getBTCEnergy(TCThetaNb+1,TrigConf::TCPHINO_B-1); 00213 00214 if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)&&TCPhiNb!=(TrigConf::TCPHINO_B-1)) energy6 = m_EmcTCFinder->getBTCEnergy(TCThetaNb+1,TCPhiNb+1); 00215 if(TCThetaNb==(TrigConf::TCTHETANO_B-1)) energy6 = 0.0; 00216 if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)&&TCPhiNb==(TrigConf::TCPHINO_B-1)) energy6 = m_EmcTCFinder->getBTCEnergy(TCThetaNb+1,0); 00217 00218 if(TCThetaNb!=0&&TCPhiNb!=0) energy7 = m_EmcTCFinder->getBTCEnergy(TCThetaNb-1,TCPhiNb-1); 00219 if(TCThetaNb==0) energy7=0; 00220 if(TCThetaNb!=0&&TCPhiNb==0) energy7 = m_EmcTCFinder->getBTCEnergy(TCThetaNb-1,TrigConf::TCPHINO_B-1); 00221 00222 if(TCThetaNb!=0&&TCPhiNb!=(TrigConf::TCPHINO_B-1)) energy8 = m_EmcTCFinder->getBTCEnergy(TCThetaNb-1,TCPhiNb+1); 00223 if(TCThetaNb==0) energy8 = 0.0; 00224 if(TCThetaNb!=0&&TCPhiNb==(TrigConf::TCPHINO_B-1)) energy8 = m_EmcTCFinder->getBTCEnergy(TCThetaNb-1,0); 00225 00226 if((energy3>=L1TC_THRESH)||(energy1>=L1TC_THRESH)||((energy4>=L1TC_THRESH)&&(energy8>=L1TC_THRESH))) 00227 { 00228 return false; 00229 } 00230 else return true; 00231 } 00232 else return false; 00233 }*/ 00234 if(partId==1) 00235 { 00236 // Cluster Finder Logic 00237 // <---Theta 00238 // |---|----|----| 00239 // | 5 | 1 | 6 | 00240 // |---|----|----| 00241 // | 2 | 0 | 3 | Phi 00242 // |---|----|----| | 00243 // | 7 | 4 | 8 | | 00244 // |---|----|----| ^ 00245 clus0 = m_EmcTCFinder->getBTC(TCThetaNb,TCPhiNb); 00246 if(clus0 > 0) 00247 { 00248 //trigger cell index from 0, not 1, so TrigConf::TCTHETANO_B - 1 or TrigConf::TCPHINO_B - 1 needed 00249 if(TCPhiNb != 0) clus1 = m_EmcTCFinder->getBTC(TCThetaNb,TCPhiNb - 1); 00250 else clus1 = m_EmcTCFinder->getBTC(TCThetaNb,TrigConf::TCPHINO_B-1); 00251 00252 // if(TCPhiNb!=0) clus2 = m_EmcTCFinder->getBTC(TCThetaNb,TCPhiNb-1); 00253 // else clus2 = m_EmcTCFinder->getBTC(TCThetaNb,TrigConf::TCPHINO_B-1); 00254 00255 if(TCThetaNb!=0) clus3 = m_EmcTCFinder->getBTC(TCThetaNb - 1,TCPhiNb); 00256 else clus3 = 0; 00257 00258 if(TCPhiNb!=(TrigConf::TCPHINO_B-1)) clus4 = m_EmcTCFinder->getBTC(TCThetaNb,TCPhiNb+1); 00259 else clus4 = m_EmcTCFinder->getBTC(TCThetaNb,0); 00260 00261 // if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)&&TCPhiNb!=0) clus5 = m_EmcTCFinder->getBTC(TCThetaNb+1,TCPhiNb-1); 00262 // if(TCThetaNb==(TrigConf::TCTHETANO_B-1)) clus5 = 0; 00263 // if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)&&TCPhiNb==0) clus5 = m_EmcTCFinder->getBTC(TCThetaNb+1,TrigConf::TCPHINO_B-1); 00264 00265 // if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)&&TCPhiNb!=(TrigConf::TCPHINO_B-1)) clus6 = m_EmcTCFinder->getBTC(TCThetaNb+1,TCPhiNb+1); 00266 // if(TCThetaNb==(TrigConf::TCTHETANO_B-1)) clus6 = 0; 00267 // if(TCThetaNb!=(TrigConf::TCTHETANO_B-1)&&TCPhiNb==(TrigConf::TCPHINO_B-1)) clus6 = m_EmcTCFinder->getBTC(TCThetaNb+1,0); 00268 00269 // if(TCThetaNb!=0&&TCPhiNb!=0) clus7 = m_EmcTCFinder->getBTC(TCThetaNb-1,TCPhiNb-1); 00270 // if(TCThetaNb==0) clus7 = 0; 00271 // if(TCThetaNb!=0&&TCPhiNb==0) clus7 = m_EmcTCFinder->getBTC(TCThetaNb-1,TrigConf::TCPHINO_B-1); 00272 00273 if(TCThetaNb!=0&&TCPhiNb!=(TrigConf::TCPHINO_B-1)) clus8 = m_EmcTCFinder->getBTC(TCThetaNb-1,TCPhiNb+1); 00274 if(TCThetaNb==0) clus8 = 1; 00275 if(TCThetaNb!=0&&TCPhiNb==(TrigConf::TCPHINO_B-1)) clus8 = m_EmcTCFinder->getBTC(TCThetaNb-1,0); 00276 00277 //if((clus3 > 0)||(clus1 > 0)||((clus4 > 0)&&(clus8 > 0))) 00278 if(!((clus3 > 0)||(clus1 > 0)) && !((clus4 > 0)&&(clus8 > 0))) 00279 { 00280 return true; 00281 } 00282 else return false; 00283 } 00284 else return false; 00285 } 00286 //------------------------------------------------------------------------------------ 00287 /* Cluster Finder Logic (1) 00288 <---phi 00289 |---| 00290 | 1 | 00291 |---|---| /|\ 00292 | 0 | 2 | | 00293 |---|---| theta 00294 if(partId==0) 00295 { 00296 if(TCThetaNb==0) 00297 { 00298 energy0 = m_EmcTCFinder->GetEETCEnergy(TCThetaNb,TCPhiNb); 00299 energy1 = m_EmcTCFinder->GetEETCEnergy(TCThetaNb+1,TCPhiNb); 00300 if(TCPhiNb!=0) energy2 =m_EmcTCFinder->GetEETCEnergy(TCThetaNb,TCPhiNb-1); 00301 else energy2 = m_EmcTCFinder->GetEETCEnergy(TCThetaNb,TrigConf::TCPHINO_E-1); 00302 if((energy0>=L1TC_THRESH)&&(energy1<L1TC_THRESH)&&(energy2<L1TC_THRESH)) return true; 00303 else return false; 00304 } 00305 if(TCThetaNb==(TrigConf::TCTHETANO_E-1)) 00306 { 00307 energy0 = m_EmcTCFinder->GetEETCEnergy(TCThetaNb,TCPhiNb); 00308 if(TCPhiNb!=0) energy1 = m_EmcTCFinder->GetEETCEnergy(TCThetaNb,TCPhiNb-1); 00309 else energy1 = m_EmcTCFinder->GetEETCEnergy(TCThetaNb,TrigConf::TCPHINO_E-1); 00310 if((energy0>=L1TC_THRESH)&&(energy1<L1TC_THRESH)) return true; 00311 else return false; 00312 } 00313 } 00314 if(partId==2) 00315 { 00316 if(TCThetaNb==0) 00317 { 00318 energy0 = m_EmcTCFinder->GetWETCEnergy(TCThetaNb,TCPhiNb); 00319 energy1 = m_EmcTCFinder->GetWETCEnergy(TCThetaNb+1,TCPhiNb); 00320 if(TCPhiNb!=0) energy2 = m_EmcTCFinder->GetWETCEnergy(TCThetaNb,TCPhiNb-1); 00321 else energy2 = m_EmcTCFinder->GetWETCEnergy(TCThetaNb,TrigConf::TCPHINO_E-1); 00322 if((energy0>=L1TC_THRESH)&&(energy1<L1TC_THRESH)&&(energy2<L1TC_THRESH)) return true; 00323 else return false; 00324 } 00325 if(TCThetaNb==(TrigConf::TCTHETANO_E-1)) 00326 { 00327 energy0 = m_EmcTCFinder->GetWETCEnergy(TCThetaNb,TCPhiNb); 00328 if(TCPhiNb!=0) energy1 = m_EmcTCFinder->GetWETCEnergy(TCThetaNb,TCPhiNb-1); 00329 else energy1 = m_EmcTCFinder->GetWETCEnergy(TCThetaNb,TrigConf::TCPHINO_E-1); 00330 if((energy0>=L1TC_THRESH)&&(energy1<L1TC_THRESH)) return true; 00331 else return false; 00332 } 00333 } 00334 */ 00335 //------------------------------------------------------------------------------------ 00336 /*Cluster Finder Logic (1) 00337 <---phi 00338 00339 |---|---| /|\ 00340 | 0 | 1 | | 00341 |---|---| theta 00342 //if(partId==0) 00343 //{ 00344 // energy0 = m_EmcTCFinder->getEETCEnergy(TCThetaNb,TCPhiNb); 00345 // if(TCPhiNb!=0) { 00346 // energy1 = m_EmcTCFinder->getEETCEnergy(TCThetaNb,TCPhiNb-1); 00347 // } 00348 // else { 00349 // energy1 = m_EmcTCFinder->getEETCEnergy(TCThetaNb,(TrigConf::TCPHINO_E-1)); 00350 // } 00351 // if((energy0>=L1TC_THRESH)&&(energy1<L1TC_THRESH)) return true; 00352 // else return false; 00353 //} 00354 00355 if(partId==0) 00356 { 00357 clus0 = m_EmcTCFinder->getEETC(TCThetaNb,TCPhiNb); 00358 if(TCPhiNb!=0) { 00359 clus1 = m_EmcTCFinder->getEETC(TCThetaNb,TCPhiNb-1); 00360 } 00361 else { 00362 clus1 = m_EmcTCFinder->getEETC(TCThetaNb,(TrigConf::TCPHINO_E-1)); 00363 } 00364 if((clus0 > 0)&&(clus1 == 0)) return true; 00365 else return false; 00366 } 00367 00368 //if(partId==2) 00369 //{ 00370 // energy0 = m_EmcTCFinder->getWETCEnergy(TCThetaNb,TCPhiNb); 00371 // if(TCPhiNb!=0) { 00372 // energy1 = m_EmcTCFinder->getWETCEnergy(TCThetaNb,TCPhiNb-1); 00373 // } 00374 // else { 00375 // energy1 = m_EmcTCFinder->getWETCEnergy(TCThetaNb,(TrigConf::TCPHINO_E-1)); 00376 // } 00377 // if((energy0>=L1TC_THRESH)&&(energy1<L1TC_THRESH)) return true; 00378 // else return false; 00379 //} 00380 00381 if(partId==2) 00382 { 00383 clus0 = m_EmcTCFinder->getWETC(TCThetaNb,TCPhiNb); 00384 if(TCPhiNb!=0) { 00385 clus1 = m_EmcTCFinder->getWETC(TCThetaNb,TCPhiNb-1); 00386 } 00387 else { 00388 clus1 = m_EmcTCFinder->getWETC(TCThetaNb,(TrigConf::TCPHINO_E-1)); 00389 } 00390 if((clus0 > 0)&&(clus1 == 0)) return true; 00391 else return false; 00392 } 00393 */ 00394 00395 /*Cluster Finder Logic (2) 00396 <---phi 00397 00398 |---|---| /|\ 00399 | 0 | 1 | | 00400 |---|---| theta 00401 */ 00402 if(partId==0) 00403 { 00404 int etc1,etc2,etc3,etc4; 00405 etc1 = m_EmcTCFinder->getEETC(TCThetaNb,TCPhiNb*2); 00406 etc2 = m_EmcTCFinder->getEETC(TCThetaNb,TCPhiNb*2+1); 00407 if(etc1 > 0 || etc2 > 0) clus0 = 1; 00408 else clus0 = 0; 00409 00410 if(TCPhiNb!=0) { 00411 etc3 = m_EmcTCFinder->getEETC(TCThetaNb,(TCPhiNb-1)*2); 00412 etc4 = m_EmcTCFinder->getEETC(TCThetaNb,(TCPhiNb-1)*2+1); 00413 if(etc3 > 0 || etc4 > 0) clus1 = 1; 00414 else clus1 = 0; 00415 } 00416 else { 00417 etc3 = m_EmcTCFinder->getEETC(TCThetaNb,(TrigConf::TCPHINO_E/2-1)*2); 00418 etc4 = m_EmcTCFinder->getEETC(TCThetaNb,(TrigConf::TCPHINO_E/2-1)*2+1); 00419 if(etc3 > 0 || etc4 > 0) clus1 = 1; 00420 else clus1 = 0; 00421 } 00422 00423 if((clus0 > 0)&&(clus1 == 0)) return true; 00424 else return false; 00425 } 00426 00427 /*Cluster Finder Logic (2) 00428 <---phi 00429 00430 |---|---| /|\ 00431 | 1 | 0 | | 00432 |---|---| theta 00433 */ 00434 if(partId==2) 00435 { 00436 int etc1,etc2,etc3,etc4; 00437 etc1 = m_EmcTCFinder->getWETC(TCThetaNb,TCPhiNb*2); 00438 etc2 = m_EmcTCFinder->getWETC(TCThetaNb,TCPhiNb*2+1); 00439 if(etc1 > 0 || etc2 > 0) clus0 = 1; 00440 else clus0 = 0; 00441 00442 if(TCPhiNb!= (TrigConf::TCPHINO_E/2-1)) { 00443 etc3 = m_EmcTCFinder->getWETC(TCThetaNb,(TCPhiNb+1)*2); 00444 etc4 = m_EmcTCFinder->getWETC(TCThetaNb,(TCPhiNb+1)*2+1); 00445 if(etc3 > 0 || etc4 > 0) clus1 = 1; 00446 else clus1 = 0; 00447 } 00448 else { 00449 etc3 = m_EmcTCFinder->getWETC(TCThetaNb,0); 00450 etc4 = m_EmcTCFinder->getWETC(TCThetaNb,1); 00451 if(etc3 > 0 || etc4 > 0) clus1 = 1; 00452 else clus1 = 0; 00453 } 00454 00455 if((clus0 > 0)&&(clus1 == 0)) return true; 00456 else return false; 00457 } 00458 00459 return false; 00460 }
|
|
00021 { return BClusterId[i][j]; }
|
|
00021 { return BClusterId[i][j]; }
|
|
00018 { return BClusterPhi[i]; }
|
|
00018 { return BClusterPhi[i]; }
|
|
|
|
Find cluster position in barral 00040 { 00041 //reset values 00042 EClus_Z = false; 00043 WClus_Z = false; 00044 //barrel 00045 for(int j=0;j<TrigConf::TCPHINO_B;j++) 00046 { 00047 BClusterPhi[j] = 0; 00048 for(int i=0;i<TrigConf::TCTHETANO_B;i++) 00049 { 00050 BClusterId[i][j] = 0; 00051 } 00052 } 00053 //endcaps 00054 for(int j =0;j<TrigConf::TCPHINO_E/2;j++) 00055 { 00056 if(j < TrigConf::TCPHINO_E/2) { 00057 WEClusterPhi[j] = 0; 00058 EEClusterPhi[j] = 0; 00059 } 00060 for(int i =0;i<TrigConf::TCTHETANO_E;i++) 00061 { 00062 EEClusterId[i][j] = 0; 00063 WEClusterId[i][j] = 0; 00064 } 00065 } 00066 00067 std::vector<double> emcClusE; 00068 emcClusE.clear(); 00069 00070 for(int i=0;i<TrigConf::TCTHETANO_B;i++) 00071 for(int j=0;j<TrigConf::TCPHINO_B;j++) 00072 { 00074 if(findCluster(1,i,j)) 00075 { 00076 BClusterId[i][j] = 1; 00077 //check cluster z balance for charge track 00078 int block_phi = int (j/5); 00079 if(((block_phi%2 == 0) && i > 5) || ((block_phi%2 == 1) && i > 4)) WClus_Z = true; 00080 else EClus_Z = true; 00081 emcClusE.push_back(m_EmcTCFinder->getBTCEnergy(i,j)); 00082 } 00083 } 00084 //Find cluster position in endcap 00085 for(int i =0;i<TrigConf::TCTHETANO_E;i++) 00086 for(int j =0;j<TrigConf::TCPHINO_E/2;j++) 00087 { 00088 if(findCluster(0,i,j)) { EEClusterId[i][j] = 1; EClus_Z = true; emcClusE.push_back(m_EmcTCFinder->getEETCEnergy(i,j)); } 00089 if(findCluster(2,i,j)) { WEClusterId[i][j] = 1; WClus_Z = true; emcClusE.push_back(m_EmcTCFinder->getWETCEnergy(i,j)); } 00090 } 00091 //Find phi position of cluster in barrel 00092 for(int j = 0;j<TrigConf::TCPHINO_B;j++) 00093 for(int i =0;i<TrigConf::TCTHETANO_B;i++) 00094 { 00095 if(BClusterId[i][j]==1) 00096 { 00097 BClusterPhi[j] = 1; 00098 break; 00099 } 00100 } 00101 //Find phi position of cluster in west endcap 00102 for(int j =0;j<TrigConf::TCPHINO_E/2;j++) 00103 for(int i =0;i<TrigConf::TCTHETANO_E;i++) 00104 { 00105 if(WEClusterId[i][j] == 1) 00106 { 00107 WEClusterPhi[j] = 1; 00108 } 00109 } 00110 //Find phi position of cluster in east endcap 00111 for(int j =0;j<TrigConf::TCPHINO_E/2;j++) 00112 for(int i =0;i<TrigConf::TCTHETANO_E;i++) 00113 { 00114 if(EEClusterId[i][j] == 1) 00115 { 00116 EEClusterPhi[j] = 1; 00117 } 00118 } 00119 // for(int i=0;i<TrigConf::TCPHINO_E/2;i++) cout<<"ClusterId output "<<EEClusterPhi[i]<<" "<<WEClusterPhi[i]<<endl; 00120 00121 //set number of cluster in barrel and endcaps for service 00122 int nbCluster = 0, neeCluster = 0, nweCluster = 0; 00123 00124 map<int,vector<complex<int> >, greater<int> > mClusId; 00125 std::vector<complex<int> > vClusIdBR; 00126 std::vector<complex<int> > vClusIdEE; 00127 std::vector<complex<int> > vClusIdWE; 00128 typedef pair<int, vector<complex<int> > > vpair; 00129 vClusIdBR.clear(); 00130 vClusIdEE.clear(); 00131 vClusIdWE.clear(); 00132 mClusId.clear(); 00133 00134 for(int i=0;i<TrigConf::TCTHETANO_B;i++) 00135 for(int j=0;j<TrigConf::TCPHINO_B;j++) 00136 { 00137 int BClusId = BClusterId[i][j]; 00138 if(BClusId == 1) { 00139 nbCluster++; 00140 complex<int> clusId(i,j); 00141 vClusIdBR.push_back(clusId); 00142 } 00143 } 00144 for(int i=0; i<TrigConf::TCTHETANO_E; i++) 00145 for(int j=0; j<TrigConf::TCPHINO_E/2; j++) 00146 { 00147 if(EEClusterPhi[j]) { 00148 neeCluster++; 00149 complex<int> clusId(i,j); 00150 vClusIdEE.push_back(clusId); 00151 } 00152 if(WEClusterPhi[j]) { 00153 nweCluster++; 00154 complex<int> clusId(i,j); 00155 vClusIdWE.push_back(clusId); 00156 } 00157 } 00158 00159 mClusId.insert(vpair(1,vClusIdBR)); 00160 mClusId.insert(vpair(0,vClusIdEE)); 00161 mClusId.insert(vpair(2,vClusIdWE)); 00162 00163 m_pIBGT->setEmcNbCluster(nbCluster); 00164 m_pIBGT->setEmcNweCluster(nweCluster); 00165 m_pIBGT->setEmcNeeCluster(neeCluster); 00166 m_pIBGT->setEmcClusId(mClusId); 00167 m_pIBGT->setEmcClusE(emcClusE); 00168 }
|
|
00024 { return EClus_Z; }
|
|
00024 { return EClus_Z; }
|
|
00022 { return EEClusterId[i][j]; }
|
|
00022 { return EEClusterId[i][j]; }
|
|
00020 { return EEClusterPhi[i]; }
|
|
00020 { return EEClusterPhi[i]; }
|
|
00025 { return WClus_Z; }
|
|
00025 { return WClus_Z; }
|
|
00023 { return WEClusterId[i][j]; }
|
|
00023 { return WEClusterId[i][j]; }
|
|
00019 { return WEClusterPhi[i]; }
|
|
00019 { return WEClusterPhi[i]; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|