31 {
32
33 EClus_Z = false;
34 WClus_Z = false;
35
36 for ( int j = 0; j < TrigConf::TCPHINO_B; j++ )
37 {
38 BClusterPhi[j] = 0;
39 for ( int i = 0; i < TrigConf::TCTHETANO_B; i++ ) { BClusterId[i][j] = 0; }
40 }
41
42 for ( int j = 0; j < TrigConf::TCPHINO_E / 2; j++ )
43 {
44 if ( j < TrigConf::TCPHINO_E / 2 )
45 {
46 WEClusterPhi[j] = 0;
47 EEClusterPhi[j] = 0;
48 }
49 for ( int i = 0; i < TrigConf::TCTHETANO_E; i++ )
50 {
51 EEClusterId[i][j] = 0;
52 WEClusterId[i][j] = 0;
53 }
54 }
55
56 std::vector<double> emcClusE;
57 emcClusE.clear();
58
59 for ( int i = 0; i < TrigConf::TCTHETANO_B; i++ )
60 for ( int j = 0; j < TrigConf::TCPHINO_B; j++ )
61 {
62
64 {
65 BClusterId[i][j] = 1;
66
67 int block_phi = int( j / 5 );
68 if ( ( ( block_phi % 2 == 0 ) && i > 5 ) || ( ( block_phi % 2 == 1 ) && i > 4 ) )
69 WClus_Z = true;
70 else EClus_Z = true;
71 emcClusE.push_back( m_EmcTCFinder->getBTCEnergy( i, j ) );
72 }
73 }
74
75 for ( int i = 0; i < TrigConf::TCTHETANO_E; i++ )
76 for ( int j = 0; j < TrigConf::TCPHINO_E / 2; j++ )
77 {
79 {
80 EEClusterId[i][j] = 1;
81 EClus_Z = true;
82 emcClusE.push_back( m_EmcTCFinder->getEETCEnergy( i, j ) );
83 }
85 {
86 WEClusterId[i][j] = 1;
87 WClus_Z = true;
88 emcClusE.push_back( m_EmcTCFinder->getWETCEnergy( i, j ) );
89 }
90 }
91
92 for ( int j = 0; j < TrigConf::TCPHINO_B; j++ )
93 for ( int i = 0; i < TrigConf::TCTHETANO_B; i++ )
94 {
95 if ( BClusterId[i][j] == 1 )
96 {
97 BClusterPhi[j] = 1;
98 break;
99 }
100 }
101
102 for ( int j = 0; j < TrigConf::TCPHINO_E / 2; j++ )
103 for ( int i = 0; i < TrigConf::TCTHETANO_E; i++ )
104 {
105 if ( WEClusterId[i][j] == 1 ) { WEClusterPhi[j] = 1; }
106 }
107
108 for ( int j = 0; j < TrigConf::TCPHINO_E / 2; j++ )
109 for ( int i = 0; i < TrigConf::TCTHETANO_E; i++ )
110 {
111 if ( EEClusterId[i][j] == 1 ) { EEClusterPhi[j] = 1; }
112 }
113
114
115
116
117 int nbCluster = 0, neeCluster = 0, nweCluster = 0;
118
119 map<int, vector<complex<int>>, greater<int>> mClusId;
120 std::vector<complex<int>> vClusIdBR;
121 std::vector<complex<int>> vClusIdEE;
122 std::vector<complex<int>> vClusIdWE;
123 typedef pair<int, vector<complex<int>>> vpair;
124 vClusIdBR.clear();
125 vClusIdEE.clear();
126 vClusIdWE.clear();
127 mClusId.clear();
128
129 for ( int i = 0; i < TrigConf::TCTHETANO_B; i++ )
130 for ( int j = 0; j < TrigConf::TCPHINO_B; j++ )
131 {
132 int BClusId = BClusterId[i][j];
133 if ( BClusId == 1 )
134 {
135 nbCluster++;
136 complex<int> clusId( i, j );
137 vClusIdBR.push_back( clusId );
138 }
139 }
140 for ( int i = 0; i < TrigConf::TCTHETANO_E; i++ )
141 for ( int j = 0; j < TrigConf::TCPHINO_E / 2; j++ )
142 {
143 if ( EEClusterPhi[j] )
144 {
145 neeCluster++;
146 complex<int> clusId( i, j );
147 vClusIdEE.push_back( clusId );
148 }
149 if ( WEClusterPhi[j] )
150 {
151 nweCluster++;
152 complex<int> clusId( i, j );
153 vClusIdWE.push_back( clusId );
154 }
155 }
156
157 mClusId.insert( vpair( 1, vClusIdBR ) );
158 mClusId.insert( vpair( 0, vClusIdEE ) );
159 mClusId.insert( vpair( 2, vClusIdWE ) );
160
161 ISvcLocator* svcLocator = Gaudi::svcLocator();
162 StatusCode sc = svcLocator->service( "BesGlobalTrigSvc", m_tmpSvc );
163 m_pIBGT = dynamic_cast<BesGlobalTrigSvc*>( m_tmpSvc );
164
165 m_pIBGT->setEmcNbCluster( nbCluster );
166 m_pIBGT->setEmcNweCluster( nweCluster );
167 m_pIBGT->setEmcNeeCluster( neeCluster );
168 m_pIBGT->setEmcClusId( mClusId );
169 m_pIBGT->setEmcClusE( emcClusE );
170}
bool findCluster(int partId, int TCThetaNb, int TCPhiNb)