68 const int maxCell[43] = { 40, 44, 48, 56, 64, 72, 80, 80, 76, 76, 88,
69 88, 100, 100, 112, 112, 128, 128, 140, 140, 160, 160,
70 160, 160, 176, 176, 176, 176, 208, 208, 208, 208, 240,
71 240, 240, 240, 256, 256, 256, 256, 288, 288, 288 };
72 vector<HoughHit> vec_HoughHit[43];
73 vector<HoughHit>::const_iterator
iter = _houghHitList.begin();
74 for (
int order = 0;
iter != _houghHitList.end();
iter++, order++ )
76 int layer = ( *iter ).getLayerId();
78 vec_HoughHit[layer].push_back( *
iter );
80 vector<HoughHit> vec_HoughHit_del;
82 for (
int i = 0; i < 43; i++ )
85 if ( i < 8 )
continue;
86 vector<int> vec_seeds;
87 std::sort( vec_HoughHit[i].begin(), vec_HoughHit[i].end(),
small_layer );
88 if ( vec_HoughHit[i].size() <= 4 )
continue;
92 for (
unsigned int j = 0; j < vec_HoughHit[i].size() - 4; j++ )
94 vector<int>::iterator iter_hit =
95 find( vec_seeds.begin(), vec_seeds.end(), vec_HoughHit[i][j].getWireId() );
96 if ( iter_hit != vec_seeds.end() )
continue;
97 int wire_last = vec_HoughHit[i][j].getWireId();
101 if ( wire_last == 0 )
104 for (
unsigned int k = vec_HoughHit[i].size() - j - 1; k > 0; k-- )
106 wire = vec_HoughHit[i][j + k].getWireId();
107 int charge = vec_HoughHit[i][j + k].getCharge();
108 int driftTime = vec_HoughHit[i][j + k].driftTime();
112 if ( ( wire - maxCell[i] + 1 ) != wire_last ||
113 ( charge > 0 && driftTime > 0 && driftTime < 800 ) )
116 wire_last = wire - maxCell[i];
121 vec_seeds.push_back( wire + 4 - maxCell[i] );
122 vec_seeds.push_back( wire + 3 );
123 vec_seeds.push_back( wire + 2 );
124 vec_seeds.push_back( wire + 1 );
125 vec_seeds.push_back( wire );
127 if ( seeds > 5 ) vec_seeds.push_back( wire );
131 for (
unsigned int k = 1; k < vec_HoughHit[i].size() - j; k++ )
133 vector<int>::iterator iter_hit0 =
134 find( vec_seeds.begin(), vec_seeds.end(), vec_HoughHit[i][j].getWireId() );
135 if ( iter_hit0 != vec_seeds.end() )
continue;
136 wire = vec_HoughHit[i][j + k].getWireId();
137 int charge = vec_HoughHit[i][j + k].getCharge();
138 int driftTime = vec_HoughHit[i][j + k].driftTime();
141 if ( wire <= maxCell[i] )
144 if ( ( wire - 1 ) != wire_last ||
145 ( charge > 0 && driftTime > 0 && driftTime < 800 ) )
153 vec_seeds.push_back( wire - 4 );
154 vec_seeds.push_back( wire - 3 );
155 vec_seeds.push_back( wire - 2 );
156 vec_seeds.push_back( wire - 1 );
157 vec_seeds.push_back( wire );
159 if ( seeds > 5 ) vec_seeds.push_back( wire );
166 for (
unsigned int k = 1; k < vec_HoughHit[i].size() - j; k++ )
168 wire = vec_HoughHit[i][j + k].getWireId();
169 int charge = vec_HoughHit[i][j + k].getCharge();
170 int driftTime = vec_HoughHit[i][j + k].driftTime();
175 if ( wire <= maxCell[i] )
178 if ( ( wire - 1 ) != wire_last ||
179 ( charge > 0 && driftTime > 0 && driftTime < 800 ) )
187 vec_seeds.push_back( wire - 4 );
188 vec_seeds.push_back( wire - 3 );
189 vec_seeds.push_back( wire - 2 );
190 vec_seeds.push_back( wire - 1 );
191 vec_seeds.push_back( wire );
193 if ( seeds > 5 ) vec_seeds.push_back( wire );
198 for (
unsigned int ihit = 0; ihit < vec_seeds.size(); ihit++ )
201 for (
unsigned int jhit = 0; jhit < vec_HoughHit[i].size(); jhit++ )
203 if ( vec_HoughHit[i][jhit].getWireId() == vec_seeds[ihit] )
204 vec_HoughHit_del.push_back( vec_HoughHit[i][jhit] );
208 for (
unsigned int ihit = 0; ihit < vec_HoughHit_del.size(); ihit++ )
213 remove( vec_HoughHit_del[ihit] );
232 const MdcMcHit* truthHitPtr[43][288];
233 for (
int i = 0; i < 43; i++ )
235 for (
int j = 0; j < 288; j++ ) { truthHitPtr[i][j] = NULL; }
237 IDataProviderSvc* eventSvc = NULL;
238 Gaudi::svcLocator()->service(
"EventDataSvc", eventSvc );
239 SmartDataPtr<MdcMcHitCol> mdcMcHitCol( eventSvc,
"/Event/MC/MdcMcHitCol" );
242 MdcMcHitCol::iterator iter_mchit = mdcMcHitCol->begin();
243 for ( ; iter_mchit != mdcMcHitCol->end(); iter_mchit++ )
245 const Identifier id = ( *iter_mchit )->identify();
248 const MdcMcHit* mcHit = ( *iter_mchit );
249 truthHitPtr[l][
w] = mcHit;
254 std::cout << __FILE__ <<
" Could not get MdcMcHitCol " << std::endl;
259 int nHitTruthAdd = 0;
260 for ( std::vector<HoughHit>::iterator
iter = _houghHitList.begin();
261 iter != _houghHitList.end();
iter++ )
263 int l = ( *iter ).getLayerId();
264 int w = ( *iter ).getWireId();
265 int mcTkId = ( *iter ).digi()->getTrackIndex();
266 if ( mcTkId >= 1000 ) mcTkId -= 1000;
267 if ( mcTkId >= 0 && NULL != truthHitPtr[l][
w] )
269 ( *iter ).setTruthInfo( truthHitPtr[l][
w] );
271 if ( mcTkPars.find( mcTkId ) != mcTkPars.end() )
273 ( *iter ).setStyle( 0 );
311 ( *iter ).setStyle( 1 );
317 ( *iter ).setStyle( 2 );
319 if ( mcTkId < 0 ) ( *iter ).setStyle( -999 );
333 if ( _houghHitList.size() != 0 ) _houghHitList[0].setCirList( 0 );
334 for (
unsigned int id = 1;
id < _houghHitList.size();
id++ )
340 if ( ( ( _houghHitList[
id].getLayerId() < _houghHitList[
id - 1].getLayerId() ) ) &&
341 ( cirlist == 0 || cirlist == 2 ) )
343 if ( _houghHitList[
id].getLayerId() > _houghHitList[
id - 1].getLayerId() &&
344 ( cirlist == 1 || cirlist == 3 ) )
346 if ( cirlist > 3 ) cirlist = 999;
347 _houghHitList[id].setCirList( cirlist );
349 int label_out_circle = 999;
353 for (
unsigned int id = 0;
id < _houghHitList.size();
id++ )
355 if ( _houghHitList[
id].getStyle() == -999 )
continue;
356 if ( _houghHitList[
id].getLayerId() > max_layer )
357 max_layer = _houghHitList[id].getLayerId();
359 for (
unsigned int id = 1;
id < _houghHitList.size();
id++ )
361 if ( ( _houghHitList[
id - 1].getLayerId() == _houghHitList[
id].getLayerId() ) &&
362 ( _houghHitList[
id].getLayerId() == _houghHitList[
id + 1].getLayerId() ) &&
363 ( _houghHitList[
id + 1].getLayerId() == _houghHitList[
id + 2].getLayerId() ) &&
364 ( _houghHitList[
id + 2].getLayerId() == _houghHitList[
id + 3].getLayerId() ) &&
365 _houghHitList[
id].getLayerId() == max_layer )
366 label_out_circle = _houghHitList[
id - 1].getLayerId();
368 for (
int unsigned id = 0;
id < _houghHitList.size();
id++ )
370 if ( _houghHitList[
id].getLayerId() == label_out_circle ) label_num++;
371 if ( label_num == 1 ) label_fist = id;
373 for (
int id = 0;
id < label_num / 2;
id++ )
375 if ( label_num % 2 == 0 ) _houghHitList[label_fist + label_num / 2 + id].setCirList( 1 );
376 if ( label_num % 2 == 1 )
377 _houghHitList[label_fist + label_num / 2 +
id + 1].setCirList( 1 );