1#include "MdcHoughFinder/HoughPeak.h"
28 for(
int i =0;i<_houghPeakHitList.size();i++){
30 _houghPeakHitList[i]=NULL;
32 _houghPeakHitList.clear();
36 if(
this == &other )
return *
this;
37 _height=other._height;
40 _thetaBin=other._thetaBin;
41 _rhoBin=other._rhoBin;
42 _isCandiTrack=other._isCandiTrack;
43 _peakNum=other._peakNum;
44 _charge=other._charge;
45 if(_houghPeakHitList.size() != 0 ){
46 for(
int i =0;i<_houghPeakHitList.size();i++){
47 _houghPeakHitList[i]=NULL;
49 _houghPeakHitList.clear();
51 _houghPeakHitList = other._houghPeakHitList;
61 if(_houghPeakHitList.size() != 0 ){
62 for(
int i =0;i<_houghPeakHitList.size();i++){
63 _houghPeakHitList[i]=NULL;
65 _houghPeakHitList.clear();
67 _height=other._height;
70 _thetaBin=other._thetaBin;
71 _rhoBin=other._rhoBin;
72 _houghPeakHitList = other._houghPeakHitList;
73 _isCandiTrack=other._isCandiTrack;
74 _peakNum=other._peakNum;
75 _charge=other._charge;
82HoughPeak::HoughPeak(
int itheta ,
int irho,
double theta,
double rho,vector< const HoughHit* >** mapHitList,
bool isCandiTrack,
int peakNum){
87 _houghPeakHitList = mapHitList[itheta][irho];
88 _isCandiTrack =isCandiTrack;
97HoughPeak::HoughPeak(
int height,
int itheta ,
int irho,
double theta,
double rho,
bool isCandiTrack,
int peakNum,
int charge){
104 _isCandiTrack =isCandiTrack;
111 int size=_houghPeakHitList.size();
112 int n0,
n1,
n2,n3,n4,n5,n6;
113 n0=
n1=
n2=n3=n4=n5=n6=0;
114 for(
int i=0;i<size;i++){
115 int cir= _houghPeakHitList[i]->getCirList();
116 int style= _houghPeakHitList[i]->getStyle();
119 if( style == 1 )
n1++;
120 if( style == 2 )
n2++;
121 if(_houghPeakHitList[i]->getDetectorType()==
MDC){
122 int index = _houghPeakHitList[i]->digi()->getTrackIndex();
123 if( index < 0 ) n3++;
124 if( index >=0 && cir<=1 && style==0 ) n4++;
125 if( index <0 || cir>1 ) n5++;
126 if( index >=0 && cir==0 && style==0 ) n6++;
129 if( select == 0 )
return n0;
130 if( select == 1 )
return n1;
131 if( select == 2 )
return n2;
132 if( select == 3 )
return n3;
133 if( select == 4 )
return n4;
134 if( select == 5 )
return n5;
135 if( select == 6 )
return n6;
138 int size=_houghPeakHitList.size();
139 int n0,
n1,
n2,n3,n4,n5,n6;
140 n0=
n1=
n2=n3=n4=n5=n6=0;
141 for(
int i=0;i<size;i++){
142 int cir= _houghPeakHitList[i]->getCirList();
143 int type = _houghPeakHitList[i]->getSlayerType();
144 int style= _houghPeakHitList[i]->getStyle();
146 if( type==0 && style == 1 )
n1++;
147 if( type==0 && style == 2 )
n2++;
148 if(_houghPeakHitList[i]->getDetectorType()==
MDC){
149 int index = _houghPeakHitList[i]->digi()->getTrackIndex();
150 if( type==0 && index < 0 ) n3++;
151 if( type==0 && index >=0 && cir<=1 && style==0) n4++;
152 if( type==0 && (index <0 || cir>1) ) n5++;
153 if( type==0 && index >=0 && cir==0 && style==0) n6++;
156 if( select == 0 )
return n0;
157 if( select == 1 )
return n1;
158 if( select == 2 )
return n2;
159 if( select == 3 )
return n3;
160 if( select == 4 )
return n4;
161 if( select == 5 )
return n5;
162 if( select == 6 )
return n6;
165 int size=_houghPeakHitList.size();
166 int n0,
n1,
n2,n3,n4,n5,n6;
167 n0=
n1=
n2=n3=n4=n5=n6=0;
168 for(
int i=0;i<size;i++){
169 int cir= _houghPeakHitList[i]->getCirList();
170 int type = _houghPeakHitList[i]->getSlayerType();
171 int style= _houghPeakHitList[i]->getStyle();
173 if( type!=0 && style == 1 )
n1++;
174 if( type!=0 && style == 2 )
n2++;
175 if(_houghPeakHitList[i]->getDetectorType()==
MDC){
176 int index = _houghPeakHitList[i]->digi()->getTrackIndex();
177 if( type!=0 && index < 0 ) n3++;
178 if( type!=0 && index >=0 && cir<=1 && style==0) n4++;
179 if( type!=0 && (index <0 || cir>1) ) n5++;
180 if( type!=0 && index >=0 && cir==0 && style==0) n6++;
183 if( select == 0 )
return n0;
184 if( select == 1 )
return n1;
185 if( select == 2 )
return n2;
186 if( select == 3 )
return n3;
187 if( select == 4 )
return n4;
188 if( select == 5 )
return n5;
189 if( select == 6 )
return n6;
194 if(
m_debug>0)cout<<endl<<
"in "<<__FILE__<<
" collectHits:"<<endl;
203 double cirr_track = fabs(1./(_rho));
204 double cirx_track = (1./_rho)*
cos(_theta);
205 double ciry_track = (1./_rho)*
sin(_theta);
206 double pt = fabs( (1./_rho)/333.567 );
207 if(
m_debug>0)cout<<
"peakNum:"<<_peakNum<<
" peak height:"<<_height<<
" rho,theta:"<<_rho<<
","<<_theta<<
" circle center(x,y):("<<cirx_track<<
","<<ciry_track<<
")"<<endl;
209 std::vector<HoughHit>::iterator
iter= hitlist.
getList().begin();
218 double cirx_hit = hit->
getMidX();
219 double ciry_hit = hit->
getMidY();
221 if( _charge == 1 && (cirx_track*ciry_hit - ciry_track*cirx_hit>=0) )
continue;
222 if( _charge ==-1 && (cirx_track*ciry_hit - ciry_track*cirx_hit<=0) )
continue;
225 double l1l2 = sqrt( (cirx_hit-cirx_track)*(cirx_hit-cirx_track)+(ciry_hit-ciry_track)*(ciry_hit-ciry_track) );
226 if( l1l2>cirr_track ) deltaD = l1l2-cirr_track-cirr_hit;
227 if( l1l2<=cirr_track ) deltaD = l1l2-cirr_track+cirr_hit;
232 double dphi = phih_cluster - phi_cross;
238 deltaD = r_cgem*dphi;
250 theta_temp=
M_PI-atan2(ciry_hit-ciry_track,cirx_hit-cirx_track)+atan2(ciry_track,cirx_track);
251 if(theta_temp>2*
M_PI){
252 theta_temp=theta_temp-2*
M_PI;
255 theta_temp=theta_temp+2*
M_PI;
260 l_temp=cirr_track*theta_temp;
263 theta_temp=2*
M_PI-theta_temp;
264 l_temp=cirr_track*(theta_temp);
266 if(
m_debug>0)cout<<
"hit: ("<<layer<<
","<<wire<<
") "<<
" pt: "<<pt<<
" deltaD: "<<deltaD<<
" ,l: "<<l_temp<<endl;
287 if( pt<0.06 && fabs(deltaD)<0.1&& l_temp<=35 ) _houghPeakHitList.push_back(hit);
288 if( 0.06<pt&&pt<0.07 && fabs(deltaD)<0.1 && l_temp<=35 ) _houghPeakHitList.push_back(hit);
289 if( 0.07<pt&&pt<0.08 && fabs(deltaD)<0.1 && l_temp<=43 ) _houghPeakHitList.push_back(hit);
290 if( 0.08<pt&&pt<0.09 && fabs(deltaD)<0.1 && l_temp<=43 ) _houghPeakHitList.push_back(hit);
291 if( 0.09<pt&&pt<0.10 && fabs(deltaD)<0.1 && l_temp<=41 ) _houghPeakHitList.push_back(hit);
292 if( 0.10<pt&&pt<0.11 && fabs(deltaD)<0.1 && l_temp<=41 ) _houghPeakHitList.push_back(hit);
293 if( 0.11<pt&&pt<0.12 && fabs(deltaD)<0.1 && l_temp<=41 ) _houghPeakHitList.push_back(hit);
295 if( pt<0.06 && fabs(deltaD)<0.1&& l_temp>35&&l_temp<45 ) _houghPeakHitList.push_back(hit);
296 if( 0.06<pt&&pt<0.07 && fabs(deltaD)<0.1 && l_temp>35&& l_temp<=45) _houghPeakHitList.push_back(hit);
297 if( 0.07<pt&&pt<0.08 && fabs(deltaD)<0.1 && l_temp>43&& l_temp<=50) _houghPeakHitList.push_back(hit);
298 if( 0.08<pt&&pt<0.09 && fabs(deltaD)<0.1 && l_temp>43&& l_temp<=50) _houghPeakHitList.push_back(hit);
307 return _houghPeakHitList.size();
315 if(charge==0)
return 9999;
316 while(phi_center<0) phi_center += 2*
M_PI;
317 while(phi_center>2*
M_PI) phi_center -= 2*
M_PI;
318 if(r_center<r_cylinder/2)
return -9999;
319 double dphi = acos( r_cylinder/(2*r_center) );
320 if(charge<0) phi = phi_center + dphi;
321 else phi = phi_center - dphi;
322 while(phi<0) phi += 2*
M_PI;
329 double phi_center = atan2(y_center,x_center);
330 double r_center = sqrt(x_center*x_center+y_center*y_center);
331 if(charge==0)
return 9999;
332 while(phi_center<0) phi_center += 2*
M_PI;
333 while(phi_center>2*
M_PI) phi_center -= 2*
M_PI;
334 if(r_center<r_cylinder/2)
return -9999;
335 double dphi = acos( r_cylinder/(2*r_center) );
336 if(charge<0) phi = phi_center + dphi;
337 else phi = phi_center - dphi;
338 while(phi<0) phi += 2*
M_PI;
351 cout<<
"peak "<<_peakNum
352 <<
" (theta,rho): "<<
"("<<_theta<<
", "<<_rho<<
"),"
353 <<
" height = "<<_height
355 <<
", isCandiTrack:"<<_isCandiTrack
361 int size=_houghPeakHitList.size();
362 if( size ==0 ) return ;
363 cout<<
"Print hitlist in HoughPeak " <<endl;
364 cout<<
"at center ("<<_theta<<
" ,"<<_rho<<
"): "<<size<<endl;
365 for(
int i=0;i<size;i++){
366 int layer= _houghPeakHitList[i]->getLayerId();
367 int wire = _houghPeakHitList[i]->getWireId();
368 std::cout<<_houghPeakHitList[i]->getHitId()<<
" ("<<layer<<
","<<wire<<
"), type "<<_houghPeakHitList[i]->getSlayerType()<<std::endl;
double sin(const BesAngle a)
double cos(const BesAngle a)
double getMiddleROfGapD() const
CgemGeoLayer * getCgemLayer(int i) const
const std::vector< HoughHit > & getList() const
int getSlayerType() const
double getDriftDist() const
CgemGeomSvc * getCgemGeomSvc() const
detectorType getDetectorType() const
const RecCgemCluster * getCluster() const
int getHitNumS(int) const
double intersect_cylinder(double r_cylinder, double r_center, double phi_center, int charge)
static vector< double > m_cut_deltaD
HoughPeak & operator=(const HoughPeak &other)
int getHitNumA(int) const
int collectHits(HoughHitList &)
double getrecphi(void) const