27(
const std::string& t,
const std::string& n,
const IInterface* p)
38 StatusCode
sc = AlgTool::initialize();
75 return AlgTool::finalize();
91 double f[3], gP[3] ={10.,10.,0.};
98 if (fieldCondObj ==
nullptr) {
107 data.K = 2./(300.*f[2]);
109 data.K = 2./(300.* 5. );
112 data.i_spforseed =
data.l_spforseed.begin();
122 if (spacepointsPixel.
isValid()) {
129 int ir =
static_cast<int>(sps->
radius()*irstep);
130 if (
ir>irmax)
ir = irmax;
131 data.r_Sorted[
ir].push_back(sps);
145 if (spacepointsSCT.
isValid()) {
152 int ir =
static_cast<int>(sps->
radius()*irstep);
153 if (
ir>irmax)
ir = irmax;
154 data.r_Sorted[
ir].push_back(sps);
171 const std::vector<IdentifierHash>& vPixel,
const std::vector<IdentifierHash>& vSCT)
const
175 data.trigger =
false;
181 double f[3], gP[3] ={10.,10.,0.};
188 if (fieldCondObj ==
nullptr) {
197 data.K = 2./(300.*f[2]);
199 data.K = 2./(300.* 5.);
202 data.i_spforseed =
data.l_spforseed.begin();
209 if (
m_pixel && !vPixel.empty()) {
212 if (spacepointsPixel.
isValid()) {
217 const auto *w = spacepointsPixel->indexFindPtr(l);
218 if (w==
nullptr)
continue;
223 int ir =
static_cast<int>(sps->
radius()*irstep);
224 if (
ir>irmax)
ir = irmax;
225 data.r_Sorted[
ir].push_back(sps);
236 if (
m_sct && !vSCT.empty()) {
239 if (spacepointsSCT.
isValid()) {
244 const auto *w = spacepointsSCT->indexFindPtr(l);
245 if (w==
nullptr)
continue;
250 int ir =
static_cast<int>(sps->
radius()*irstep);
251 if (
ir>irmax)
ir = irmax;
252 data.r_Sorted[
ir].push_back(sps);
269 const std::vector<IdentifierHash>& vPixel,
const std::vector<IdentifierHash>& vSCT,
284 data.izvertex = not lv.empty();
287 if (lv.begin()!=lv.end()) mode = 1;
290 if (newv || !
data.state ||
data.nspoint!=2 ||
data.mode!=mode ||
data.nlist) {
292 data.i_seede =
data.l_seeds.begin();
320 data.izvertex = not lv.empty();
323 if (lv.begin()!=lv.end()) mode = 3;
326 if (newv || !
data.state ||
data.nspoint!=3 ||
data.mode!=mode ||
data.nlist) {
328 data.i_seede =
data.l_seeds.begin();
333 data.endlist = true ;
363 if (lv.begin()!=lv.end()) mode = 6;
366 if (newv || !
data.state ||
data.nspoint!=4 ||
data.mode!=mode ||
data.nlist) {
367 data.i_seede =
data.l_seeds.begin();
372 data.endlist = true ;
405 std::string s2;
for (
int i=0; i<n; ++i) s2.append(
" "); s2.append(
"|");
407 std::string s3;
for (
int i=0; i<n; ++i) s3.append(
" "); s3.append(
"|");
409 std::string s4;
for (
int i=0; i<n; ++i) s4.append(
" "); s4.append(
"|");
411 std::string s5;
for (
int i=0; i<n; ++i) s5.append(
" "); s5.append(
"|");
414 out<<
"|---------------------------------------------------------------------|"
428 <<std::setw(12)<<
m_sct
433 out<<
"| maxSizeSP | "
436 out<<
"| pTmin (mev) | "
437 <<std::setw(12)<<std::setprecision(5)<<
m_ptmin
440 <<std::setw(12)<<std::setprecision(5)<<
m_etamax
442 out<<
"| max radius SP | "
443 <<std::setw(12)<<std::setprecision(5)<<
m_r_rmax
445 out<<
"| radius step | "
446 <<std::setw(12)<<std::setprecision(5)<<
m_r_rstep
448 out<<
"| min Z-vertex position | "
449 <<std::setw(12)<<std::setprecision(5)<<
m_zmin
451 out<<
"| max Z-vertex position | "
452 <<std::setw(12)<<std::setprecision(5)<<
m_zmax
454 out<<
"| min radius first SP(2) | "
455 <<std::setw(12)<<std::setprecision(5)<<
m_r1minv
457 out<<
"| min radius second SP(2) | "
458 <<std::setw(12)<<std::setprecision(5)<<
m_r2minv
460 out<<
"| max radius first SP(2) | "
461 <<std::setw(12)<<std::setprecision(5)<<
m_r1maxv
463 out<<
"| max radius second SP(2) | "
464 <<std::setw(12)<<std::setprecision(5)<<
m_r2maxv
466 out<<
"| min space points dR | "
467 <<std::setw(12)<<std::setprecision(5)<<
m_drmin
469 out<<
"| max space points dR | "
470 <<std::setw(12)<<std::setprecision(5)<<
m_drmax
472 out<<
"| max dZ impact | "
473 <<std::setw(12)<<std::setprecision(5)<<
m_dzver
475 out<<
"| max dZ/dR impact | "
476 <<std::setw(12)<<std::setprecision(5)<<
m_dzdrver
478 out<<
"| max impact | "
479 <<std::setw(12)<<std::setprecision(5)<<
m_diver
481 out<<
"| max impact pps | "
482 <<std::setw(12)<<std::setprecision(5)<<
m_diverpps
484 out<<
"| max impact sss | "
485 <<std::setw(12)<<std::setprecision(5)<<
m_diversss
487 out<<
"|---------------------------------------------------------------------|"
489 out<<
"| Beam X center | "
490 <<std::setw(12)<<std::setprecision(5)<<
data.xbeam[0]
492 out<<
"| Beam Y center | "
493 <<std::setw(12)<<std::setprecision(5)<<
data.ybeam[0]
495 out<<
"| Beam Z center | "
496 <<std::setw(12)<<std::setprecision(5)<<
data.zbeam[0]
498 out<<
"| Beam X-axis direction | "
499 <<std::setw(12)<<std::setprecision(5)<<
data.xbeam[1]
500 <<std::setw(12)<<std::setprecision(5)<<
data.xbeam[2]
501 <<std::setw(12)<<std::setprecision(5)<<
data.xbeam[3]
503 out<<
"| Beam Y-axis direction | "
504 <<std::setw(12)<<std::setprecision(5)<<
data.ybeam[1]
505 <<std::setw(12)<<std::setprecision(5)<<
data.ybeam[2]
506 <<std::setw(12)<<std::setprecision(5)<<
data.ybeam[3]
508 out<<
"| Beam Z-axis direction | "
509 <<std::setw(12)<<std::setprecision(5)<<
data.zbeam[1]
510 <<std::setw(12)<<std::setprecision(5)<<
data.zbeam[2]
511 <<std::setw(12)<<std::setprecision(5)<<
data.zbeam[3]
513 out<<
"|---------------------------------------------------------------------|"
524 out<<
"|---------------------------------------------------------------------|"
527 <<std::setw(12)<<
data.ns
529 out<<
"| data.nsaz | "
530 <<std::setw(12)<<
data.nsaz
532 out<<
"| data.nsazv | "
533 <<std::setw(12)<<
data.nsazv
536 <<std::setw(12)<<
data.l_seeds.size()
538 out<<
"|---------------------------------------------------------------------|"
549 if (
data.endlist)
return;
551 data.i_seede =
data.l_seeds.begin();
566 unsigned int s1 =
data.l_vertex.size();
567 unsigned int s2 = lV.size();
569 if (s1==0 && s2==0)
return false;
571 data.l_vertex.clear();
574 data.l_vertex.insert(
static_cast<float>(v.position().z()));
600 constexpr float pi2 = 2.*
M_PI;
602 const float sFmax =
static_cast<float>(NFmax)/pi2;
603 const float sFmin = 100./60.;
607 else if (
m_sF < sFmin)
m_sF = sFmin;
614 const float sFvmax =
static_cast<float>(NFtmax)/pi2;
622 for (
int f=0; f<=
m_fNmax; ++f) {
686 int fb = f-1;
if (fb<0 ) fb=
m_fvNmax;
687 int ft = f+1;
if (ft>
m_fvNmax) ft=0;
723 double tx = std::tan(beamSpotHandle->beamTilt(0));
724 double ty = std::tan(beamSpotHandle->beamTilt(1));
726 double ph = atan2(ty,tx);
727 double th = acos(1./sqrt(1.+tx*tx+ty*ty));
728 double sint = sin(th);
729 double cost = cos(th);
730 double sinp = sin(ph);
731 double cosp = cos(ph);
733 data.xbeam[0] =
static_cast<float>(cb.x()) ;
734 data.xbeam[1] =
static_cast<float>(
cost*cosp*cosp+sinp*sinp);
735 data.xbeam[2] =
static_cast<float>(
cost*sinp*cosp-sinp*cosp);
736 data.xbeam[3] =-
static_cast<float>(sint*cosp );
738 data.ybeam[0] =
static_cast<float>(cb.y()) ;
739 data.ybeam[1] =
static_cast<float>(
cost*cosp*sinp-sinp*cosp);
740 data.ybeam[2] =
static_cast<float>(
cost*sinp*sinp+cosp*cosp);
741 data.ybeam[3] =-
static_cast<float>(sint*sinp );
743 data.zbeam[0] =
static_cast<float>(cb.z()) ;
744 data.zbeam[1] =
static_cast<float>(sint*cosp) ;
745 data.zbeam[2] =
static_cast<float>(sint*sinp) ;
746 data.zbeam[3] =
static_cast<float>(
cost) ;
756 r[0] =
static_cast<float>(
sp->globalPosition().
x())-
data.xbeam[0];
757 r[1] =
static_cast<float>(
sp->globalPosition().
y())-
data.ybeam[0];
758 r[2] =
static_cast<float>(
sp->globalPosition().
z())-
data.zbeam[0];
767 constexpr float pi2 = 2.*
M_PI;
768 std::vector<InDet::SiSpacePointForSeed*>::iterator
r;
771 if (!
data.r_map[i])
continue;
772 r =
data.r_Sorted[i].begin();
774 while (
r!=
data.r_Sorted[i].end()) {
778 float F = (*r)->phi();
781 int f =
static_cast<int>(
F*
m_sF);
791 Z< 250.?
z=5:Z< 450.?
z=6:Z< 925.?
z=7:Z< 1400.?
z=8:Z< 2500.?
z=9:
z=10;
793 Z>-250.?
z=5:Z>-450.?
z=4:Z>-925.?
z=3:Z>-1400.?
z=2:Z>-2500.?
z=1:
z= 0;
797 data.rfz_Sorted[n].push_back(*
r);
798 if (!
data.rfz_map[n]++)
data.rfz_index[
data.nrfz++] = n;
800 if ((*r)->spacepoint->clusterList().second == 0 &&
z>=3 &&
z<=7) {
805 f =
static_cast<int>(
F*
m_sFv);
810 data.rfzv_Sorted[n].push_back(*
r);
811 if (!
data.rfzv_map[n]++)
data.rfzv_index[
data.nrfzv++] = n;
813 r =
data.r_Sorted[i].erase(
r);
827 for (
int i=0; i<
data.nr; ++i) {
828 int n =
data.r_index[i];
830 data.r_Sorted[n].clear();
833 for (
int i=0; i<
data.nrfz; ++i) {
834 int n =
data.rfz_index[i];
836 data.rfz_Sorted[n].clear();
839 for (
int i=0; i<
data.nrfzv; ++i) {
840 int n =
data.rfzv_index[i];
841 data.rfzv_map[n] = 0;
842 data.rfzv_Sorted[n].clear();
859 if (
data.nsazv<2)
return;
861 std::vector<InDet::SiSpacePointForSeed*>::iterator r0,r0e,
r,
re;
874 if (!
data.rfzv_map[
a])
continue;
875 r0 =
data.rfzv_Sorted[
a].begin();
876 r0e =
data.rfzv_Sorted[
a].end ();
885 for (; r0!=r0e; ++r0) {
886 float X = (*r0)->x();
887 float Y = (*r0)->y();
888 float R = (*r0)->radius();
891 float Z = (*r0)->z();
898 for (
int i=0; i<NB; ++i) {
900 if (!
data.rfzv_map[an])
continue;
902 r =
data.rfzv_Sorted[an].begin();
903 re =
data.rfzv_Sorted[an].end ();
906 float Rb =(*r)->radius();
912 float dZ = Z-(*r)->z();
914 if (Tz<m_dzdrmin || Tz>
m_dzdrmax)
continue;
923 float dx =(*r)->x()-X;
924 float dy =(*r)->y()-Y;
925 float x = dx*ax+dy*ay ;
926 float y =-dx*ay+dy*ax ;
927 float xy =
x*
x+
y*
y ;
if (xy == 0.)
continue;
931 float UR = Ut*R+1. ;
if (UR == 0.)
continue;
934 if (std::abs(B*
data.K) >
m_ipt*std::sqrt(1.f+
A*
A))
continue;
936 newSeed(
data, (*r)->spacepoint, (*r0)->spacepoint,Zo);
957 if (
data.nsaz<3)
return;
959 const int ZI[
SizeZ] = {5,6,7,8,9,10,4,3,2,1,0};
960 std::vector<InDet::SiSpacePointForSeed*>::iterator rt[9],rte[9],rb[9],rbe[9];
973 if (!
data.rfz_map[
a])
continue;
977 if (!
data.rfz_map[an])
continue;
978 rb [NB] =
data.rfz_Sorted[an].begin();
979 rbe[NB++] =
data.rfz_Sorted[an].end();
983 if (!
data.rfz_map[an])
continue;
984 rt [NT] =
data.rfz_Sorted[an].begin();
985 rte[NT++] =
data.rfz_Sorted[an].end();
1008 std::vector<InDet::SiSpacePointForSeed*>::iterator* rb ,
1009 std::vector<InDet::SiSpacePointForSeed*>::iterator* rbe,
1010 std::vector<InDet::SiSpacePointForSeed*>::iterator* rt ,
1011 std::vector<InDet::SiSpacePointForSeed*>::iterator* rte,
1012 int NB,
int NT,
int& nseed)
const
1014 std::vector<InDet::SiSpacePointForSeed*>::iterator r0=rb[0],
r;
1015 if (!
data.endlist) {r0 =
data.rMin;
data.endlist =
true;}
1019 for (; r0!=rbe[0]; ++r0) {
1021 data.mapOneSeeds.erase(
data.mapOneSeeds.begin(),
data.mapOneSeeds.end());
1023 float R = (*r0)->radius();
1029 float X = (*r0)->x() ;
1030 float Y = (*r0)->y() ;
1031 float Z = (*r0)->z() ;
1036 for (
int i=0; i<NB; ++i) {
1037 for (
r=rb[i];
r!=rbe[i]; ++
r) {
1038 float Rb =(*r)->radius();
1040 if (dR >
m_drmax) {rb[i]=
r;
continue;}
1042 if ((*r)->sur()==sur0)
continue;
1044 float Tz = (Z-(*r)->z())/dR;
1046 if (Tz < m_dzdrmin || Tz >
m_dzdrmax)
continue;
1062 for (
int i=0; i<NT; ++i) {
1063 for (
r=rt[i];
r!=rte[i]; ++
r) {
1064 float Rt =(*r)->radius();
1071 if ( (*r)->sur()==sur0)
continue;
1073 float Tz = ((*r)->z()-Z)/dR;
1075 if (Tz < m_dzdrmin || Tz >
m_dzdrmax)
continue;
1087 if (!(Nt-Nb))
continue;
1089 float covr0 = (*r0)->covr();
1090 float covz0 = (*r0)->covz();
1095 for (
int i=0; i<Nt; ++i) {
1098 float dx =
sp->x()-X ;
1099 float dy =
sp->y()-Y ;
1100 float dz =
sp->z()-Z ;
1101 float x = dx*ax+dy*ay ;
1102 float y =-dx*ay+dy*ax ;
1103 float r2 = 1.f/(
x*
x+
y*
y);
1104 float dr = std::sqrt(r2) ;
1106 if (i < Nb) tz = -tz;
1109 data.Zo[i] = Z-R*tz ;
1113 data.Er[i] = (covz0+
sp->covz()+tz*tz*(covr0+
sp->covr()))*r2;
1121 float ipt2K = ipt2/K2 ;
1122 float ipt2C = ipt2*COF ;
1123 float COFK = COF*K2 ;
1128 for (
int b=0; b<Nb; ++b) {
1131 float Zob =
data.Zo[b] ;
1132 float Tzb =
data.Tz[b] ;
1133 float Rb2r =
data.R [b]*covr0;
1134 float Rb2z =
data.R [b]*covz0;
1135 float Erb =
data.Er[b] ;
1136 float Vb =
data.V [b] ;
1137 float Ub =
data.U [b] ;
1138 float Tzb2 = (1.f+Tzb*Tzb) ;
1139 float CSA = Tzb2*COFK ;
1140 float ICSA = Tzb2*ipt2C ;
1142 float Iz = (dZ*dZ)/Tzb2 ;
1144 for (
int t=Nb; t<Nt; ++t) {
1145 float Ts = .5f*(Tzb+
data.Tz[t]) ;
1146 float dt = Tzb-
data.Tz[t] ;
1147 float dT = dt*dt-Erb-
data.Er[t]-
data.R[t]*(Ts*Ts*Rb2r+Rb2z);
1148 if ( dT > ICSA)
continue;
1149 float dU =
data.U[t]-Ub;
if (dU == 0.) continue ;
1150 float A = (
data.V[t]-Vb)/dU ;
1151 float S2 = 1.f+
A*
A ;
1154 if (B2 > ipt2K*
S2 || dT*
S2 > B2*CSA)
continue;
1155 float Im = std::abs((
A-B*R)*R) ;
1157 if ( Im > imc )
continue;
1162 nseed +=
data.mapOneSeeds.size();
1180 std::vector<InDet::SiSpacePointForSeed*>::iterator* rb ,
1181 std::vector<InDet::SiSpacePointForSeed*>::iterator* rbe,
1182 std::vector<InDet::SiSpacePointForSeed*>::iterator* rt ,
1183 std::vector<InDet::SiSpacePointForSeed*>::iterator* rte,
1184 int NB,
int NT,
int& nseed)
const
1186 std::vector<InDet::SiSpacePointForSeed*>::iterator r0=rb[0],
r;
1187 if (!
data.endlist) {
1189 data.endlist =
true;
1194 for (; r0!=rbe[0]; ++r0) {
1196 data.mapOneSeeds.erase(
data.mapOneSeeds.begin(),
data.mapOneSeeds.end());
1198 float R = (*r0)->radius();
1205 float X = (*r0)->x() ;
1206 float Y = (*r0)->y() ;
1207 float Z = (*r0)->z() ;
1212 for (
int i=0; i<NB; ++i) {
1213 for (
r=rb[i];
r!=rbe[i]; ++
r) {
1214 float Rb =(*r)->radius();
1221 if ((*r)->sur()==sur0)
continue;
1222 if ( !
pix && !(*r)->spacepoint->clusterList().second)
continue;
1223 float Tz = (Z-(*r)->z())/dR;
1224 if (Tz < m_dzdrmin || Tz >
m_dzdrmax)
continue;
1240 for (
int i=0; i<NT; ++i) {
1241 for (
r=rt[i];
r!=rte[i]; ++
r) {
1242 float Rt =(*r)->radius();
1249 if ((*r)->sur()==sur0)
continue;
1250 float Tz = ((*r)->z()-Z)/dR;
1251 if (Tz < m_dzdrmin || Tz >
m_dzdrmax)
continue;
1263 if (!(Nt-Nb))
continue;
1265 float covr0 = (*r0)->covr();
1266 float covz0 = (*r0)->covz();
1271 for (
int i=0; i<Nt; ++i) {
1274 float dx =
sp->x()-X ;
1275 float dy =
sp->y()-Y ;
1276 float dz =
sp->z()-Z ;
1277 float x = dx*ax+dy*ay ;
1278 float y =-dx*ay+dy*ax ;
1279 float r2 = 1.f/(
x*
x+
y*
y);
1280 float dr = std::sqrt(r2) ;
1282 if (i < Nb) tz = -tz;
1285 data.Zo[i] = Z-R*tz ;
1289 data.Er[i] = (covz0+
sp->covz()+tz*tz*(covr0+
sp->covr()))*r2;
1298 float ipt2K = ipt2/K2 ;
1299 float ipt2C = ipt2*COF ;
1300 float COFK = COF*K2 ;
1306 for (
int b=0; b<Nb; ++b) {
1309 float Zob =
data.Zo[b] ;
1310 float Tzb =
data.Tz[b] ;
1311 float Rb2r =
data.R [b]*covr0;
1312 float Rb2z =
data.R [b]*covz0;
1313 float Erb =
data.Er[b] ;
1314 float Vb =
data.V [b] ;
1315 float Ub =
data.U [b] ;
1316 float Tzb2 = (1.f+Tzb*Tzb) ;
1317 float CSA = Tzb2*COFK ;
1318 float ICSA = Tzb2*ipt2C ;
1320 for (
int t=Nb; t<Nt; ++t) {
1321 float Ts = .5f*(Tzb+
data.Tz[t]) ;
1322 float dt = Tzb-
data.Tz[t] ;
1323 float dT = dt*dt-Erb-
data.Er[t]-
data.R[t]*(Ts*Ts*Rb2r+Rb2z);
1324 if ( dT > ICSA)
continue;
1325 float dU =
data.U[t]-Ub;
1326 if (dU == 0.)
continue;
1327 float A = (
data.V[t]-Vb)/dU ;
1328 float S2 = 1.f+
A*
A ;
1331 if (B2 > ipt2K*
S2 || dT*
S2 > B2*CSA)
continue;
1332 float Im = std::abs((
A-B*R)*R) ;
1335 if ( Im > imc )
continue;
1336 if (
data.SP[t]->spacepoint->clusterList().second && Im > imcs)
continue;
1343 nseed +=
data.mapOneSeeds.size();
1365 data.OneSeeds[
data.nOneSeeds].erase();
1366 data.OneSeeds[
data.nOneSeeds].add(p1);
1367 data.OneSeeds[
data.nOneSeeds].add(p2);
1368 data.OneSeeds[
data.nOneSeeds].add(p3);
1369 data.OneSeeds[
data.nOneSeeds].setZVertex(
static_cast<double>(
z));
1370 data.mapOneSeeds.insert(std::make_pair(q, &(
data.OneSeeds[
data.nOneSeeds])));
1373 std::multimap<float,InDet::SiSpacePointsSeed*>::reverse_iterator
1374 l =
data.mapOneSeeds.rbegin();
1375 if ((*l).first <= q)
return;
1382 s->setZVertex(
static_cast<double>(
z));
1383 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator
1384 i =
data.mapOneSeeds.insert(std::make_pair(q,s));
1386 for (++i; i!=
data.mapOneSeeds.end(); ++i) {
1387 if ((*i).second==s) {
1388 data.mapOneSeeds.erase(i);
1402 if (
data.i_seed==
data.i_seede)
return nullptr;
1404 return &(*
data.i_seed++);
1410 if (Zv < m_zmin || Zv >
m_zmax)
return false;
1411 if (!
data.izvertex)
return true;
1413 float dZmin = std::numeric_limits<float>::max();
1414 for (
const float& v:
data.l_vertex) {
1415 float dZ = std::abs(v-Zv);
1416 if (dZ<dZmin) dZmin=dZ;
1423 float dZm = std::numeric_limits<float>::max();
1424 for (
const float& v:
data.l_vertex) {
1425 float dZ = std::abs(v-Z);
1426 if (dZ<dZm) dZm = dZ;
1443 if (
data.i_spforseed!=
data.l_spforseed.end()) {
1444 sps = &(*
data.i_spforseed++);
1447 data.l_spforseed.emplace_back(
sp,
r);
1448 sps = &(
data.l_spforseed.back());
1449 data.i_spforseed =
data.l_spforseed.end();
1464 if (
data.i_seede!=
data.l_seeds.end()) {
1469 s->setZVertex(
static_cast<double>(
z));
1471 data.l_seeds.emplace_back(p1, p2,
z);
1485 if (
data.i_seede!=
data.l_seeds.end()) {
1491 s->setZVertex(
static_cast<double>(
z));
1493 data.l_seeds.emplace_back(p1, p2, p3,
z);
1504 std::multimap<float, InDet::SiSpacePointsSeed*>::iterator
1505 l =
data.mapOneSeeds.begin(),
1506 le =
data.mapOneSeeds.end ();
1507 for (; l!=le; ++l) {
1508 if (
data.i_seede!=
data.l_seeds.end()) {
1512 data.l_seeds.emplace_back(*(*l).second);
1519 data.initialize(EventData::ToolType::HeavyIon,
const boost::regex re(r_e)
#define ATH_CHECK
Evaluate an expression and check for errors.
char data[hepevt_bytes_allocation_ATLAS]
struct TBPatternUnitContext S2
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
Describes the API of the Region of Ineterest geometry.
This is a "hash" representation of an Identifier.
void set(const Trk::SpacePoint *, std::span< float const, 3 >)
virtual void writeNtuple(const SiSpacePointsSeed *seed, const Trk::Track *track, int seedType, long eventNumber) const override
BooleanProperty m_useOverlap
virtual MsgStream & dump(EventData &data, MsgStream &out) const override
void initializeEventData(EventData &data) const
UnsignedIntegerProperty m_maxNumberVertices
virtual void newRegion(const EventContext &ctx, EventData &data, const std::vector< IdentifierHash > &vPixel, const std::vector< IdentifierHash > &vSCT) const override
virtual StatusCode finalize() override
void newOneSeed(EventData &data, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const float &, const float &) const
void fillLists(EventData &data) const
int m_rfzv_i[SizeRFZV][SizeIV]
static MsgStream & dumpEvent(EventData &data, MsgStream &out)
virtual StatusCode initialize() override
virtual bool getWriteNtupleBoolProperty() const override
bool newVertices(EventData &data, const std::list< Trk::Vertex > &) const
bool isZCompatible(EventData &data, float &, float &, float &) const
static void convertToBeamFrameWork(EventData &data, const Trk::SpacePoint *const &, float *)
void buildBeamFrameWork(const EventContext &ctx, EventData &data) const
IntegerProperty m_maxsize
virtual void newEvent(const EventContext &ctx, EventData &data, int iteration) const override
SG::ReadHandleKey< SpacePointOverlapCollection > m_spacepointsOverlap
void production2Sp(EventData &data) const
virtual const SiSpacePointsSeed * next(const EventContext &ctx, EventData &data) const override
IntegerProperty m_maxsizeSP
static void erase(EventData &data)
void production3Sp(EventData &data) const
virtual void find2Sp(EventData &data, const std::list< Trk::Vertex > &lv) const override
with two space points with or without vertex constraint
int m_rfz_ib[SizeRFZ][SizeI]
static void fillSeeds(EventData &data)
void findNext(EventData &data) const
static void newSeed(EventData &data, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const float &)
static float dZVertexMin(EventData &data, float &)
MsgStream & dumpConditions(EventData &data, MsgStream &out) const
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
int m_rfz_it[SizeRFZ][SizeI]
SG::ReadHandleKey< SpacePointContainer > m_spacepointsSCT
virtual void findVSp(const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override
SG::ReadHandleKey< SpacePointContainer > m_spacepointsPixel
void production3SpNoVertex(EventData &data, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, int, int, int &) const
IntegerProperty m_maxOneSize
SiSpacePointsSeedMaker_HeavyIon()=delete
static SiSpacePointForSeed * newSpacePoint(EventData &data, const Trk::SpacePoint *const &)
FloatProperty m_fieldScale
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
virtual void find3Sp(const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override
with three space points with or without vertex constraint
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
bool solenoidOn() const
status of the magnets
void getFieldZR(const double *ATH_RESTRICT xyz, double *ATH_RESTRICT bxyz, double *ATH_RESTRICT deriv=nullptr)
get B field valaue on the z-r plane at given position works only inside the solenoid.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
Abstract Base Class for tracking surfaces.
This class is a simplest representation of a vertex candidate.
int ir
counter of the current depth
int cost(std::vector< std::string > &files, node &n, const std::string &directory="", bool deleteref=false, bool relocate=false)
Eigen::Matrix< double, 3, 1 > Vector3D
hold the test vectors and ease the comparison