21 m_minXYdist2Z( 0.03 ),
31 declareProperty(
"MinimalRadiusFromBeam",
m_minXYbeam ) ;
32 declareProperty(
"UseBroadenModes",
m_broaden );
48 const std::vector<Trk::PositionAndWeight> & VectorOfPoints)
const
58 const std::vector<Trk::PositionAndWeight> & VectorOfPoints,
59 std::unique_ptr<IMode3dInfo>&
info)
const
62 auto myinfo_p = std::make_unique<Mode3dFromFsmw1dInfo>();
64 info = std::move (myinfo_p);
65 return getMode (myinfo, vx, vy, VectorOfPoints);
73 const std::vector<Amg::Vector3D> & VectorOfPoints)
const
77 std::vector<Amg::Vector3D>::const_iterator
begin = VectorOfPoints.begin();
78 std::vector<Amg::Vector3D>::const_iterator
end = VectorOfPoints.end();
80 std::vector<double> allx;
81 std::vector<double> ally;
82 std::vector<double> allz;
84 for (std::vector<Amg::Vector3D>::const_iterator
i =
begin;
i!=
end; ++
i) {
85 allx.push_back((*i).x());
86 ally.push_back((*i).y());
87 allz.push_back((*i).z());
103 const std::vector<Amg::Vector3D> & VectorOfPoints,
104 std::unique_ptr<IMode3dInfo>& )
const
106 return getMode (vx, vy, VectorOfPoints);
114 const std::vector<Trk::PositionAndWeight> & VectorOfPoints)
const
120 std::vector<Trk::PositionAndWeight>::const_iterator
begin = VectorOfPoints.begin();
121 std::vector<Trk::PositionAndWeight>::const_iterator
end = VectorOfPoints.end();
125 if ( VectorOfPoints.empty() )
return tmpseed ;
126 if ( VectorOfPoints.size() == 1 )
130 std::vector< Amg::Vector3D > tmpphi;
131 std::vector< Amg::Vector3D > tmpradi;
132 std::vector< Amg::Vector3D > tmpz;
136 std::vector<Trk::PositionAndWeight> vectorOfPoints ;
138 for (std::vector<PositionAndWeight>::const_iterator
i =
begin;
i!=
end; ++
i) {
139 double wght =
i->second ;
140 double px =
i->first.x() ;
if (
px == 0 )
px += 0.000001 ;
141 double py =
i->first.y() ;
142 double phi = atan2 (
py,
px ) ;
146 tmpphi.emplace_back(
phi, wght, 1.0*
idx ) ;
147 tmpradi.emplace_back(
r, wght, 1.0*
idx ) ;
148 tmpz.emplace_back(
i->first.z(), wght, 1.0*
idx ) ;
150 info.pushPoint (
phi,
r,
i->first.z(), wght);
151 vectorOfPoints.push_back( *
i ) ;
161 std::vector< std::pair< std::pair <double, std::pair<int,int> >,
double > > allphi;
162 std::vector< std::pair< std::pair <double, std::pair<int,int> >,
double > > allradi;
163 std::vector< std::pair< std::pair <double, std::pair<int,int> >,
double > > allz;
166 for (
unsigned i = 0 ;
i < tmpphi.size() ;
i++ )
168 std::pair<int,int> xidphi( (
int)( tmpphi[
i].
z()),
idx ) ;
169 std::pair<int,int> xidradi( (
int)( tmpradi[
i].
z() ),
idx ) ;
170 std::pair<int,int> xidz( (
int)( tmpz[
i].
z() ),
idx ) ;
172 std::pair <double, std::pair<int,int> >
phi( tmpphi[
i].
x(), xidphi ) ;
173 std::pair <double, std::pair<int,int> > radi( tmpradi[
i].
x(), xidradi ) ;
174 std::pair <double, std::pair<int,int> > zz( tmpz[
i].
x(), xidz ) ;
176 std::pair< std::pair <double, std::pair<int,int> >,
double > wghtphi(
phi, tmpphi[
i].
y() ) ;
177 allphi.push_back( wghtphi ) ;
178 std::pair< std::pair <double, std::pair<int,int> >,
double > wghtradi( radi, tmpradi[
i].
y() ) ;
179 allradi.push_back( wghtradi ) ;
180 std::pair< std::pair <double, std::pair<int,int> >,
double > wghtz( zz, tmpz[
i].
y() ) ;
181 allz.push_back( wghtz ) ;
190 bool phibroader = false ;
206 bool radiusbroader = false ;
210 ATH_MSG_DEBUG(
" One more searching for a mode in radius !" );
212 radiusbroader = true ;
219 ATH_MSG_DEBUG(
" " << radisz <<
" modes found along radius " );
237 double tmpsdX = 0., tmpsdY = 0., tmpsdXY = 0. ;
243 if ( olphiradi.empty() )
245 if ( phisz > 1 && radisz > 1 )
251 ATH_MSG_DEBUG(
" One more searching for a mode in phi or/and radius !" );
255 ATH_MSG_DEBUG(
" " <<
" more modes found : " << phisz <<
" "<< radisz );
258 if ( olphiradi.empty() )
261 if ( phibroader && radiusbroader )
266 if ( olphiZ.empty() && olradiZ.empty() )
268 else if ( !olphiZ.empty() && olradiZ.empty() )
270 else if ( olphiZ.empty() && !olradiZ.empty() )
275 if ( ol_phi_radi_Z.empty() )
282 tmpsdX = tmpseed.x() - vx ;
283 tmpsdY = tmpseed.y() - vy ;
284 tmpsdXY = sqrt( tmpsdX*tmpsdX + tmpsdY*tmpsdY ) ;
294 ATH_MSG_DEBUG(
" One more searching for WIDER mode in phi or/and radius !" );
301 if ( ! radiusbroader )
309 if ( olphiradi.empty() )
314 if ( olphiZ.empty() && olradiZ.empty() )
316 else if ( !olphiZ.empty() && olradiZ.empty() )
318 else if ( olphiZ.empty() && !olradiZ.empty() )
323 if ( ol_phi_radi_Z.empty() )
330 tmpsdX = tmpseed.x() - vx ;
331 tmpsdY = tmpseed.y() - vy ;
332 tmpsdXY = sqrt( tmpsdX*tmpsdX + tmpsdY*tmpsdY ) ;
342 ATH_MSG_DEBUG(
" " << olphiradi.size() <<
" modes found with phi-radius correlated " );
345 if ( ol_phi_radi_Z.empty() )
349 ATH_MSG_DEBUG(
" One more searching for a mode in Z after CheckCorrelation !" );
353 if ( ol_phi_radi_Z.empty() )
358 if ( ol_phi_radi_Z.empty() )
362 tmpsdX = tmpseed.x() - vx ;
363 tmpsdY = tmpseed.y() - vy ;
364 tmpsdXY = sqrt( tmpsdX*tmpsdX + tmpsdY*tmpsdY ) ;
378 <<
" modes found with phi-radius-Z fully correlated " );
384 tmpsdX = tmpseed.x() - vx ;
385 tmpsdY = tmpseed.y() - vy ;
386 tmpsdXY = sqrt( tmpsdX*tmpsdX + tmpsdY*tmpsdY ) ;
396 const std::vector< IndexedWeighted > & position,
397 int expectMax )
const
401 int tot = position.size() ;
402 ATH_MSG_DEBUG(
" total IndexedWeighted positions : " << tot );
404 unsigned int M = idxs->size() ;
409 ATH_MSG_WARNING(
" No necessary to search so many ( > 3 ) modes, skip " );
413 std::vector< std::vector< IndexedWeighted > > position_OR ;
420 for (
unsigned int splt = 0 ; splt < M + 1 ; splt ++ )
423 const std::vector< std::pair< int, int> >& idxplt =
424 ( splt == M ? (*idxs)[splt-1] : (*idxs)[splt] ) ;
426 int sz = idxplt.size() - 1 ;
428 std::vector<IndexedWeighted>::const_iterator origin = position.begin() ;
429 std::vector<IndexedWeighted>::const_iterator
begin = origin ;
430 std::vector<IndexedWeighted>::const_iterator
end = position.end() ;
434 offset = idxplt[0].second - 1 ;
438 }
else if ( splt == M )
446 const std::vector< std::pair< int, int> >& idxprevious = (*idxs)[splt-1] ;
447 offset = idxprevious.back().second ;
451 offset = idxplt[0].second ;
452 if ( offset < 2 || offset >= tot - 2 ) continue ;
459 ATH_MSG_DEBUG(
" new searching domain is defined in splitted region " << splt );
460 position_OR.emplace_back(
begin,
end ) ;
463 position_OR.push_back( position ) ;
465 for (
unsigned int splt = 0 ; splt < position_OR.size() ; splt ++ )
467 ATH_MSG_DEBUG(
" In split " << splt <<
" after overlap removal " );
468 const std::vector< IndexedWeighted >& spltposi = position_OR[splt] ;
469 int spltgot = 0, lastgot = 0 ;
472 std::vector< std::pair< int,int> > idx_tmp =
getFsmw1dMode( spltposi, expectMax ) ;
473 if ( !idx_tmp.empty() )
475 idxs->push_back( idx_tmp ) ;
479 if ( spltgot == lastgot ) break ;
481 if ( lastgot > 0 ) break ;
482 }
while ( spltgot < expectMax ) ;
494 const std::vector<Trk::PositionAndWeight>& vectorOfPoints,
504 for (
unsigned int i = 0 ;
i <
aa.size() ;
i++ )
507 std::vector<std::pair< int, int> >
ax =
aa[
i] ;
511 std::vector<int > axidx ;
512 for (
unsigned int ia = 0 ; ia <
ax.size() ; ia ++ )
514 axidx.push_back(
ax[ia].
first ) ;
518 std::vector< std::pair<int,int> >
supp ;
519 std::vector< std::pair< int, int> >
bx ;
520 for (
unsigned int j = 0 ; j < bb.size() ; j++ )
527 for (
unsigned int k = 0 ;
k <
bx.size() ;
k ++ )
531 if (
it != axidx.end() )
542 for (
unsigned int k = 0 ;
k <
bx.size() ;
k ++ )
546 if (
it == axidx.end() )
559 corre.push_back(
supp ) ;
564 #ifdef Mode3dFromFsmw1d_DEBUG
565 if ( corre.size() == 0 )
return corre ;
567 if ( !corre.empty() )
return corre ;
570 ATH_MSG_DEBUG(
" Korrelation failed by indices match, now try 3D distance ... " );
572 double mindistcut = 999999999.9 , mindist = 999999999.9 ;
577 double aX = 0., aY = 0., aZ = 0. ;
578 std::vector<int > axidx ;
581 int idxA = ia.first ;
582 axidx.push_back( idxA ) ;
584 std::vector<Trk::PositionAndWeight>::const_iterator Aposi = vectorOfPoints.begin() + idxA ;
586 ATH_MSG_DEBUG(
" Mode idx accepted with full phi-radius correlation : " << idxA );
588 double wght = Aposi->second ;
589 aX += Aposi->first.x()*wght ;
590 aY += Aposi->first.y()*wght ;
591 aZ += Aposi->first.z()*wght ;
603 std::vector< std::pair<int,int> >
supp ;
604 double bX = 0., bY = 0., bZ = 0., Bwght = 0. ;
605 for (
const auto&
bx : bb)
607 for (
const auto &
ib :
bx)
609 int idxB =
ib.first ;
610 std::vector<Trk::PositionAndWeight>::const_iterator Bposi = vectorOfPoints.begin() + idxB ;
612 double wght = Bposi->second ;
614 bX = Bposi->first.x()*wght ;
615 bY = Bposi->first.y()*wght ;
616 bZ = Bposi->first.z()*wght ;
631 double dist = ( bX*bX + bY*bY + bZ*bZ )/( Awght + Bwght ) ;
633 if ( dist < mindist )
636 mindistcut = sqrt( dist*( Awght + Bwght ) ) ;
638 ATH_MSG_DEBUG(
" Distance between modes for Korrelation : " << mindistcut );
642 #ifdef Mode3dFromFsmw1d_DEBUG
643 info.setCorre (zin, mindistcut);
649 for (
const auto &
m :
bx)
652 if (
it == axidx.end() )
supp.emplace_back(
m.first,
m.second ) ;
655 corre.push_back(
supp ) ;
664 std::vector< std::pair< int, int > >
666 int minModeDiff)
const
670 std::vector< std::pair< int, int > >
idx(0) ;
673 std::vector<IndexedWeighted>::const_iterator origin = posidxwght.begin();
674 std::vector<IndexedWeighted>::const_iterator
begin= origin ;
675 std::vector<IndexedWeighted>::const_iterator
end=posidxwght.end();
677 double overallweight(0.);
678 std::vector<IndexedWeighted>::const_iterator best_begin=
begin;
679 std::vector<IndexedWeighted>::const_iterator best_end=
end;
681 double last_value(1e100);
683 bool isthelast=
false;
685 if ( posidxwght.size() == 1 )
687 std::vector<IndexedWeighted>::const_iterator mid = posidxwght.begin();
688 idx.emplace_back( mid->first.second.first, mid->first.second.second ) ;
692 while ( ! isthelast )
699 if (
step < minModeDiff ) break ;
701 std::vector<IndexedWeighted>::const_iterator j_end=
begin+
step-1;
702 for (std::vector<IndexedWeighted>::const_iterator j=
begin;j!=j_end;++j)
703 overallweight+=j->second;
712 std::vector<IndexedWeighted>::const_iterator i_last =
begin+
step;
713 for (std::vector<IndexedWeighted>::const_iterator
i=
begin;
i!=(
end-
step);++
i, ++i_last)
718 overallweight+= i_last->second;
720 double new_value = ( ( (
i+
step)->
first ).first - (
i->first ).
first )/overallweight;
722 <<
step + 1 <<
" at best "<< best_end - best_begin );
724 if ( new_value < last_value )
726 last_value= new_value ;
731 overallweight -=
i->second;
743 if ( best_end - best_begin <= minModeDiff )
753 std::vector<IndexedWeighted>::const_iterator mid = posidxwght.begin();
756 if (
m_broaden && ( best_end - best_begin ) <= 2 && best_begin != mid )
758 mid = best_begin - 1 ;
759 idx.emplace_back( mid->first.second.first, mid->first.second.second ) ;
760 ATH_MSG_DEBUG(
" found 1d mode " << ( mid->first ).first <<
" "
761 << ( mid->first ).second.first <<
" "<< mid->first.second.second );
765 for ( mid = best_begin ; mid != best_end ; ++mid )
768 idx.emplace_back( mid->first.second.first, mid->first.second.second ) ;
769 ATH_MSG_DEBUG(
" found 1d mode " << ( mid->first ).first <<
" "
770 << ( mid->first ).second.first <<
" "<< mid->first.second.second );
774 if (
m_broaden && ( best_end - best_begin ) <= 2 )
776 mid = posidxwght.end();
777 if ( best_end != mid )
780 idx.emplace_back( mid->first.second.first, mid->first.second.second ) ;
781 ATH_MSG_DEBUG(
" found 1d mode " << ( mid->first ).first <<
" "
782 << ( mid->first ).second.first <<
" "<< mid->first.second.second );
793 const std::vector<Trk::PositionAndWeight>& vectorOfPoints,
795 const double vy)
const
800 unsigned int sizeVP = vectorOfPoints.size() ;
804 vectorOfPoints.begin()->first.y(),
805 vectorOfPoints.begin()->first.z() ) ;
807 std::vector<Trk::PositionAndWeight> VP = vectorOfPoints ;
812 std::vector<Trk::PositionAndWeight>::const_iterator pwitr = VP.begin() ;
814 for ( ; pwitr != VP.end() ; ++pwitr, ++
offset)
816 double X = ( pwitr->first ).
x() - vx ;
817 double Y = ( pwitr->first ).
y() - vy ;
818 double XY = sqrt(
X*
X +
Y*
Y ) ;
825 pwitr = VP.begin() +
offset ;
827 for (
unsigned int mpw = 0 ; mpw < vectorOfPoints.size() ; mpw ++ )
830 if ( (
tmp.first ).x() == ( pwitr->first ).x()
831 && (
tmp.first ).y() == ( pwitr->first ).y()
832 && (
tmp.first ).z() == ( pwitr->first ).z()
835 info.pushIndex ( mpw ) ;
840 double wght = pwitr->second ;
841 double inv_wght = 1. / wght ;
842 double seedX = ( pwitr->first ).
x() ;
843 double seedY = ( pwitr->first ).
y() ;
844 double seedZ = ( pwitr->first ).
z() ;
847 for (std::vector<PositionAndWeight>::const_iterator
i = pwitr + 1 ;
i!=VP.end(); ++
i )
849 double sdX = (
i->first ).
x() ;
850 double sdY = (
i->first ).
y() ;
851 double sdZ = (
i->first ).
z() ;
857 double dist = sqrt( sdX*sdX + sdY*sdY + sdZ*sdZ ) ;
865 seedX = seedX*wght + sdX*wt ;
866 seedY = seedY*wght + sdY*wt ;
867 seedZ = seedZ*wght + sdZ*wt ;
886 const std::vector<Trk::PositionAndWeight>& vectorOfPoints,
889 double seedX = 0., seedY = 0., seedZ = 0. ;
890 double maxWght = -99.9 ;
891 for (
const auto& modes : phiradiZol)
893 double totwght = 0. ;
894 double seedX0 = 0., seedY0 = 0., seedZ0 = 0. ;
895 for (
const auto &
mode : modes)
899 ATH_MSG_DEBUG(
" Mode idx accepted with full phi-radius-Z correlation : " <<
idx );
901 std::vector<Trk::PositionAndWeight>::const_iterator posi = vectorOfPoints.begin() +
idx ;
902 double wght = posi->second ;
903 seedX0 += posi->first.x()*wght ;
904 seedY0 += posi->first.y()*wght ;
905 seedZ0 += posi->first.z()*wght ;
910 if ( totwght > maxWght )
913 seedX = seedX0/totwght ;
914 seedY = seedY0/totwght ;
915 seedZ = seedZ0/totwght ;
917 info.pushIndices (modes);
928 const std::vector<Trk::PositionAndWeight>& vectorOfPoints,
932 double mindistcut = 999999999.9 , mindist = 999999999.9 ;
933 double seedX = 0., seedY = 0., seedZ = 0. ;
935 for (
const auto& xymodes : phiradi)
938 double xyX = 0., xyY = 0., xyZ = 0. ;
939 for (
const auto & xymode : xymodes)
941 int idxXY = xymode.first ;
942 std::vector<Trk::PositionAndWeight>::const_iterator posi = vectorOfPoints.begin() + idxXY ;
944 ATH_MSG_DEBUG(
" Mode idx accepted with full phi-radius correlation : " << idxXY );
946 double wght = posi->second ;
947 xyX += posi->first.x()*wght ;
948 xyY += posi->first.y()*wght ;
949 xyZ += posi->first.z()*wght ;
961 double zX = 0., zY = 0., zZ = 0., zwght = 0. ;
962 for (
const auto& zmodes : Z)
964 for (
const auto & zmode : zmodes)
966 int idxZ = zmode.first ;
967 std::vector<Trk::PositionAndWeight>::const_iterator zposi = vectorOfPoints.begin() + idxZ ;
969 double wghtZ = zposi->second ;
971 zX = zposi->first.x()*wghtZ ;
972 zY = zposi->first.y()*wghtZ ;
973 zZ = zposi->first.z()*wghtZ ;
989 double dist = ( zX*zX + zY*zY + zZ*zZ )/( xywght + zwght ) ;
991 if ( dist < mindist )
994 mindistcut = sqrt( dist*( xywght + zwght ) ) ;
998 double totwght = xywght + zwght ;
1002 seedX = ( xyX*xywght + zX*zwght )/totwght ;
1003 seedY = ( xyY*xywght + zY*zwght )/totwght ;
1004 seedZ = ( xyZ*xywght + zZ*zwght )/totwght ;
1006 info.pushIndices (xymodes);
1007 info.pushIndices (zmodes);
1018 const std::vector<Trk::PositionAndWeight>& vectorOfPoints,
1023 double mindistcut = 999999999.9 , mindist = 999999999.9 ;
1024 double seedX = 0., seedY = 0., seedZ = 0. ;
1026 for (
const auto& pmodes :
phi)
1029 double pX = 0., pY = 0., pZ = 0. ;
1031 for (
const auto & pmode : pmodes)
1033 int idxp = pmode.first ;
1034 std::vector<Trk::PositionAndWeight>::const_iterator pposi = vectorOfPoints.begin() + idxp ;
1035 double xw = pposi->second ;
1036 pX += pposi->first.x()*xw ;
1037 pY += pposi->first.y()*xw ;
1038 pZ += pposi->first.z()*xw ;
1050 for (
const auto& rmodes : radi)
1053 double rX = 0., rY = 0., rZ = 0. ;
1055 for (
const auto & rmode : rmodes)
1057 int idxr = rmode.first ;
1058 std::vector<Trk::PositionAndWeight>::const_iterator rposi = vectorOfPoints.begin() + idxr ;
1059 double xw = rposi->second ;
1060 rX += rposi->first.x()*xw ;
1061 rY += rposi->first.y()*xw ;
1062 rZ += rposi->first.z()*xw ;
1074 double Dxy = ( ( pX - rX )*( pX - rX ) + ( pY - rY )*( pY - rY )
1075 + ( pZ - rZ )*( pZ - rZ ) )/( pwght + rwght ) ;
1077 for (
const auto& zmodes : Z)
1080 double zX = 0., zY = 0., zZ = 0. ;
1082 for (
const auto & zmode : zmodes)
1084 int idxz = zmode.first ;
1085 std::vector<Trk::PositionAndWeight>::const_iterator zposi = vectorOfPoints.begin() + idxz ;
1086 double xw = zposi->second ;
1087 zX += zposi->first.x()*xw ;
1088 zY += zposi->first.y()*xw ;
1089 zZ += zposi->first.z()*xw ;
1101 double distpz = ( pX - zX )*( pX - zX ) + ( pY - zY )*( pY - zY )
1102 + ( pZ - zZ )*( pZ - zZ ) ;
1103 double distrz = ( rX - zX )*( rX - zX ) + ( rY - zY )*( rY - zY )
1104 + ( rZ - zZ )*( rZ - zZ ) ;
1105 double dist = distpz/( pwght + zwght ) + distrz/( rwght + zwght ) + Dxy ;
1108 if ( dist < mindist )
1112 mindistcut = 0.3333*( sqrt( distpz ) + sqrt( distrz ) + sqrt( Dxy*( pwght + rwght ) ) ) ;
1116 double totwght = pwght + rwght + zwght ;
1117 seedX = ( pX*pwght + rX*rwght + zX*zwght )/totwght ;
1118 seedY = ( pY*pwght + rY*rwght + zY*zwght )/totwght ;
1119 seedX = ( pZ*pwght + rZ*rwght + zZ*zwght )/totwght ;
1121 info.pushIndices (pmodes);
1122 info.pushIndices (rmodes);
1123 info.pushIndices (zmodes);
1136 ( std::vector<float> &
phi,
1137 std::vector<float> & radi,
1138 std::vector<float> &
z,
1139 std::vector<float> & wght )
const
1141 std::vector<int> allidx ;
1144 for (
const std::pair<int, int >&
p :
tmp) {
1145 allidx.push_back(
p.first ) ;
1150 for (
const std::pair<int, int >&
p :
tmp) {
1151 if (
std::find( allidx.begin(), allidx.end(),
p.first ) == allidx.end()) {
1152 allidx.push_back(
p.first ) ;
1158 for (
const std::pair<int, int >&
p :
tmp) {
1159 if (
std::find( allidx.begin(), allidx.end(),
p.first ) == allidx.end()) {
1160 allidx.push_back(
p.first ) ;
1165 unsigned int min = allidx.size() ;
1171 for (
int idx : allidx) {
1182 const std::vector<int>&
1185 return m_UsedCrossingPointsIndices;
1191 (
double &cXY,
double &cZ )
const
1200 (std::vector<const Trk::TrackParameters*>& perigees ,
1201 const std::vector<const Trk::TrackParameters*> & perigeeList)
const
1204 std::vector<int> trklist(0) ;
1206 for (
int ndx : m_UsedCrossingPointsIndices) {
1207 std::pair<int,int> trk = m_trkidx.at( ndx ) ;
1209 if (
std::find( trklist.begin(), trklist.end(), trk.first ) == trklist.end() )
1210 trklist.push_back( trk.first ) ;
1211 if (
std::find( trklist.begin(), trklist.end(), trk.second ) == trklist.end() )
1212 trklist.push_back( trk.second ) ;
1215 std::sort( trklist.begin(), trklist.end() ) ;
1217 for (
int t : trklist)
1219 perigees.push_back( perigeeList[
t] ) ;
1222 return perigees.size() ;
1229 m_UsedCrossingPointsIndices.push_back(
idx ) ;
1235 (std::vector< std::pair <int, int> >&& trkidx)
1237 m_trkidx = std::move (trkidx);
1243 (
const std::vector< std::pair<int,int> >& modes)
1245 for (
const std::pair<int,int>&
p : modes) {
1246 m_UsedCrossingPointsIndices.push_back(
p.first ) ;
1253 (
float phi,
float r,
float z,
float w)
1255 m_phi_stk.push_back (
phi);
1256 m_radi_stk.push_back (
r);
1257 m_z_stk.push_back (
z);
1258 m_wght_stk.push_back (
w);