27 (
const std::string& 
t, 
const std::string& 
n, 
const IInterface* 
p)
 
   91   double f[3], gP[3] ={10.,10.,0.};
 
   98   if (fieldCondObj == 
nullptr) {
 
  102   fieldCondObj->getInitializedCache (fieldCache);
 
  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()) {
 
  127           if (r < 43. || r>=
m_r_rmax) 
continue;
 
  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) {
 
  192   fieldCondObj->getInitializedCache (fieldCache);
 
  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;
 
  292     data.i_seede = 
data.l_seeds.begin();
 
  320   data.izvertex = not lv.empty();
 
  323   if (lv.begin()!=lv.end()) 
mode = 3;
 
  328     data.i_seede = 
data.l_seeds.begin();
 
  333     data.endlist = true            ;
 
  363   if (lv.begin()!=lv.end()) 
mode = 6;
 
  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()));
 
  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;
 
  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);
 
  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)                    ;
 
  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);
 
  800       if ((*r)->spacepoint->clusterList().second == 0 && 
z>=3 && 
z<=7) { 
 
  801     z<=4 ? z=0 : z>=6 ? 
z=2 : 
z=1;
 
  810     data.rfzv_Sorted[
n].push_back(*
r);
 
  827   for (
int i=0; 
i<
data.nr; ++
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;
 
  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;
 
  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};
 
  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();
 
 1012  int NB, 
int NT, 
int& nseed)
 const 
 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();
 
 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   ;
 
 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])                          ;
 
 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();
 
 1184  int NB, 
int NT, 
int& nseed)
 const 
 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   ;
 
 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])                          ;
 
 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();
 
 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));
 
 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;
 
 1414   for (
const float& 
v: 
data.l_vertex) {
 
 1415     float dZ = std::abs(
v-Zv);
 
 1416     if (dZ<dZmin) dZmin=dZ;
 
 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));
 
 1485   if (
data.i_seede!=
data.l_seeds.end()) {
 
 1491     s->setZVertex(
static_cast<double>(
z));
 
 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,