28 (
const std::string&
t,
const std::string&
n,
const IInterface*
p)
55 return StatusCode::FAILURE;
63 return StatusCode::FAILURE;
72 return StatusCode::FAILURE;
84 return StatusCode::FAILURE;
97 return StatusCode::FAILURE;
112 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_HeavyIon" ) {
115 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_LowMomentum") {
117 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_BeamGas" ) {
119 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_ForwardTracks" ) {
121 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_LargeD0" ) {
123 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_ITkConversionTracks") {
140 return StatusCode::FAILURE;
144 ATH_MSG_DEBUG(
"No. of cut values smaller than eta bins. Extending size..." );
149 if (
pt < 20.)
pt = 20.;
171 std::fill(m_usedSeedsEta.begin(), m_usedSeedsEta.end(),
173 std::fill(m_seedsWithTracksEta.begin(), m_seedsWithTracksEta.end(),
179 return StatusCode::SUCCESS;
189 out <<
"::finalize() -- statistics:" <<std::endl;
202 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|"
204 out<<
"| Kind of seed | PPP | PPS | PSS | SSS | ALL |"
206 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|"
208 out<<
"| Input seeds | "
209 <<std::setw(12)<<m_totalInputSeeds[0]<<
" | "
210 <<std::setw(12)<<m_totalInputSeeds[1]<<
" | "
211 <<std::setw(12)<<m_totalInputSeeds[2]<<
" | "
212 <<std::setw(12)<<m_totalInputSeeds[3]<<
" | "
213 <<std::setw(12)<<(m_totalInputSeeds[0]+m_totalInputSeeds[1]+m_totalInputSeeds[2]+m_totalInputSeeds[3])
216 out<<
"| No track parameters | "
217 <<std::setw(12)<<m_totalNoTrackPar[0]<<
" | "
218 <<std::setw(12)<<m_totalNoTrackPar[1]<<
" | "
219 <<std::setw(12)<<m_totalNoTrackPar[2]<<
" | "
220 <<std::setw(12)<<m_totalNoTrackPar[3]<<
" | "
221 <<std::setw(12)<<(m_totalNoTrackPar[0]+m_totalNoTrackPar[1]+ m_totalNoTrackPar[2]+m_totalNoTrackPar[3])
224 out<<
"| Used seeds | "
225 <<std::setw(12)<<m_totalUsedSeeds[0]<<
" | "
226 <<std::setw(12)<<m_totalUsedSeeds[1]<<
" | "
227 <<std::setw(12)<<m_totalUsedSeeds[2]<<
" | "
228 <<std::setw(12)<<m_totalUsedSeeds[3]<<
" | "
229 <<std::setw(12)<<(m_totalUsedSeeds[0]+m_totalUsedSeeds[1]+ m_totalUsedSeeds[2]+m_totalUsedSeeds[3])
232 out<<
"| Used seeds brem | "
233 <<std::setw(12)<<m_totalBremSeeds[0]<<
" | "
234 <<std::setw(12)<<m_totalBremSeeds[1]<<
" | "
235 <<std::setw(12)<<m_totalBremSeeds[2]<<
" | "
236 <<std::setw(12)<<m_totalBremSeeds[3]<<
" | "
237 <<std::setw(12)<<(m_totalBremSeeds[0]+m_totalBremSeeds[1]+m_totalBremSeeds[2]+m_totalBremSeeds[3])
240 double tdetsize = 0.;
243 tdetsize+= m_deSize[
i];
244 goodseed+= m_totalUsedSeeds[
i];
245 if(m_totalUsedSeeds[
i] > 0.) m_deSize[
i]= m_deSize[
i]/m_totalUsedSeeds[
i];
247 if(goodseed > 0) tdetsize/=
double(goodseed);
249 out<<
"| Det elements in road | "
250 <<std::setw(12)<<std::setprecision(4)<<m_deSize[0]<<
" | "
251 <<std::setw(12)<<std::setprecision(5)<<m_deSize[1]<<
" | "
252 <<std::setw(12)<<std::setprecision(5)<<m_deSize[2]<<
" | "
253 <<std::setw(12)<<std::setprecision(5)<<m_deSize[3]<<
" | "
254 <<std::setw(12)<<std::setprecision(5)<<tdetsize
258 out<<
"| Two clusters on DE | "
259 <<std::setw(12)<<m_twoClusters[0]<<
" | "
260 <<std::setw(12)<<m_twoClusters[1]<<
" | "
261 <<std::setw(12)<<m_twoClusters[2]<<
" | "
262 <<std::setw(12)<<m_twoClusters[3]<<
" | "
263 <<std::setw(12)<<(m_twoClusters[0]+m_twoClusters[1]+m_twoClusters[2]+m_twoClusters[3])
266 out<<
"| Wrong DE road | "
267 <<std::setw(12)<<m_wrongRoad[0]<<
" | "
268 <<std::setw(12)<<m_wrongRoad[1]<<
" | "
269 <<std::setw(12)<<m_wrongRoad[2]<<
" | "
270 <<std::setw(12)<<m_wrongRoad[3]<<
" | "
271 <<std::setw(12)<<(m_wrongRoad[0]+m_wrongRoad[1]+m_wrongRoad[2]+m_wrongRoad[3])
274 out<<
"| Wrong initialization | "
275 <<std::setw(12)<<m_wrongInit[0]<<
" | "
276 <<std::setw(12)<<m_wrongInit[1]<<
" | "
277 <<std::setw(12)<<m_wrongInit[2]<<
" | "
278 <<std::setw(12)<<m_wrongInit[3]<<
" | "
279 <<std::setw(12)<<(m_wrongInit[0]+m_wrongInit[1]+m_wrongInit[2]+m_wrongInit[3])
282 out<<
"| Can not find track | "
283 <<std::setw(12)<<m_noTrack[0]<<
" | "
284 <<std::setw(12)<<m_noTrack[1]<<
" | "
285 <<std::setw(12)<<m_noTrack[2]<<
" | "
286 <<std::setw(12)<<m_noTrack[3]<<
" | "
287 <<std::setw(12)<<(m_noTrack[0]+m_noTrack[1]+m_noTrack[2]+m_noTrack[3])
290 out<<
"| It is not new track | "
291 <<std::setw(12)<<m_notNewTrack[0]<<
" | "
292 <<std::setw(12)<<m_notNewTrack[1]<<
" | "
293 <<std::setw(12)<<m_notNewTrack[2]<<
" | "
294 <<std::setw(12)<<m_notNewTrack[3]<<
" | "
295 <<std::setw(12)<<(m_notNewTrack[0]+m_notNewTrack[1]+m_notNewTrack[2]+m_notNewTrack[3])
298 out<<
"| Attempts brem model | "
299 <<std::setw(12)<<m_bremAttempt[0]<<
" | "
300 <<std::setw(12)<<m_bremAttempt[1]<<
" | "
301 <<std::setw(12)<<m_bremAttempt[2]<<
" | "
302 <<std::setw(12)<<m_bremAttempt[3]<<
" | "
303 <<std::setw(12)<<(m_bremAttempt[0]+m_bremAttempt[1]+m_bremAttempt[2]+m_bremAttempt[3])
306 out<<
"| Output tracks | "
307 <<std::setw(12)<<m_outputTracks[0]<<
" | "
308 <<std::setw(12)<<m_outputTracks[1]<<
" | "
309 <<std::setw(12)<<m_outputTracks[2]<<
" | "
310 <<std::setw(12)<<m_outputTracks[3]<<
" | "
311 <<std::setw(12)<<(m_outputTracks[0]+m_outputTracks[1]+m_outputTracks[2]+m_outputTracks[3])
314 out<<
"| Output extra tracks | "
315 <<std::setw(12)<<m_extraTracks[0]<<
" | "
316 <<std::setw(12)<<m_extraTracks[1]<<
" | "
317 <<std::setw(12)<<m_extraTracks[2]<<
" | "
318 <<std::setw(12)<<m_extraTracks[3]<<
" | "
319 <<std::setw(12)<<(m_extraTracks[0]+m_extraTracks[1]+m_extraTracks[2]+m_extraTracks[3])
322 out<<
"| Output tracks brem | "
323 <<std::setw(12)<<m_bremTracks[0]<<
" | "
324 <<std::setw(12)<<m_bremTracks[1]<<
" | "
325 <<std::setw(12)<<m_bremTracks[2]<<
" | "
326 <<std::setw(12)<<m_bremTracks[3]<<
" | "
327 <<std::setw(12)<<(m_bremTracks[0]+m_bremTracks[1]+m_bremTracks[2]+m_bremTracks[3])
330 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
332 out<<
"| Seeds with track | "
333 <<std::setw(12)<<m_seedsWithTrack[0]<<
" | "
334 <<std::setw(12)<<m_seedsWithTrack[1]<<
" | "
335 <<std::setw(12)<<m_seedsWithTrack[2]<<
" | "
336 <<std::setw(12)<<m_seedsWithTrack[3]<<
" | "
337 <<std::setw(12)<<(m_seedsWithTrack[0]+m_seedsWithTrack[1]+m_seedsWithTrack[2]+m_seedsWithTrack[3])
338 <<
" | Number seeds |"<<std::endl;
339 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
342 std::vector<std::pair<int,std::string>> rapidityTablePrint;
344 rapidityTablePrint.emplace_back(0,std::string(
"| Track/Used 0.0-0.5 | "));
345 rapidityTablePrint.emplace_back(1,std::string(
"| 0.5-1.0 | "));
346 rapidityTablePrint.emplace_back(2,std::string(
"| 1.0-1.5 | "));
347 rapidityTablePrint.emplace_back(3,std::string(
"| 1.5-2.0 | "));
348 rapidityTablePrint.emplace_back(4,std::string(
"| 2.0-2.5 | "));
349 rapidityTablePrint.emplace_back(5,std::string(
"| 2.5-3.0 | "));
350 rapidityTablePrint.emplace_back(6,std::string(
"| 3.0-3.5 | "));
351 rapidityTablePrint.emplace_back(7,std::string(
"| 3.5-4.0 | "));
356 std::array<double,SiCombinatorialTrackFinderData_xk::kNSeedTypes+1>
pu{};
359 double totalUsedSeedsEta = 0.;
363 if(m_usedSeedsEta[j][
i]!=0.)
pu[j]=m_seedsWithTracksEta[j][
i]/m_usedSeedsEta[j][
i];
364 totalUsedSeedsEta += m_usedSeedsEta[j][
i];
368 if(totalUsedSeedsEta!=0.) {
378 out<<rapidityTablePrint.at(
i).second;
379 out << std::setw(12) << std::setprecision(4) <<
pu[0] <<
" | "
380 << std::setw(12) << std::setprecision(4) <<
pu[1] <<
" | "
381 << std::setw(12) << std::setprecision(4) <<
pu[2] <<
" | "
382 << std::setw(12) << std::setprecision(4) <<
pu[3] <<
" | "
383 << std::setw(12) << std::setprecision(4) <<
pu[4] <<
" | "
385 <<
static_cast<int>(m_seedsWithTracksEta[0][
i]) +
386 static_cast<int>(m_seedsWithTracksEta[1][
i]) +
387 static_cast<int>(m_seedsWithTracksEta[2][
i]) +
388 static_cast<int>(m_seedsWithTracksEta[3][
i])
389 <<
" |" << std::endl;
392 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
414 std::string
s4;
for (
int i=0;
i<
n; ++
i)
s4.append(
" ");
s4.append(
"|");
416 std::string fieldmode[9] ={
"NoField" ,
"ConstantField",
"SolenoidalField",
417 "ToroidalField" ,
"Grid3DField" ,
"RealisticField" ,
418 "UndefinedField",
"AthenaField" ,
"?????" };
427 fieldCondObj->getInitializedCache(fieldCache);
433 if (mode<0 || mode>8 )
mode = 8;
435 n = 62-fieldmode[
mode].size();
436 std::string
s3;
for (
int i=0;
i<
n; ++
i)
s3.append(
" ");
s3.append(
"|");
439 std::string s6;
for (
int i=0;
i<
n; ++
i) s6.append(
" "); s6.append(
"|");
441 out<<
"|----------------------------------------------------------------------"
442 <<
"-------------------|"
444 out<<
"| Tool for road builder | "<<
m_roadmaker .type() <<s6<<std::endl;
446 out<<
"| Use association tool ? | "
449 out<<
"| Magnetic field mode | "<<fieldmode[
mode] <<
s3<<std::endl;
452 out<<
"| Min pT of track (MeV) | "<<std::setw(12)<<std::setprecision(5)<<
m_pTmin
454 out<<
"| Max Xi2 for cluster | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2max
456 out<<
"| Max Xi2 for outlayer | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2maxNoAdd
458 out<<
"| Max Xi2 for link | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2maxlink
460 out<<
"| Min number of clusters | "<<std::setw(12)<<
m_nclusmin
468 out<<
"|----------------------------------------------------------------------"
469 <<
"-------------------|"
481 out<<
"|---------------------------------------------------------------------|"
483 out<<
"| Number input seeds | "<<std::setw(12)<<
data.inputseeds()
485 out<<
"| Number good seeds | "<<std::setw(12)<<
data.goodseeds()
487 out<<
"| Number output tracks | "<<std::setw(12)<<
data.findtracks()
489 out<<
"|---------------------------------------------------------------------|"
502 data.xybeam()[0] = 0.;
503 data.xybeam()[1] = 0.;
506 if (beamSpotHandle.isValid()) {
507 data.xybeam()[0] = beamSpotHandle->beamPos()[0];
508 data.xybeam()[1] = beamSpotHandle->beamPos()[1];
528 data.inputseeds() = 0;
529 data.goodseeds() = 0;
530 data.findtracks() = 0;
540 data.setCaloClusterROIEM(*calo_rois);
549 data.setCaloClusterROIHad(*calo_rois);
563 bool simpleTrack =
true;
577 data.inputseeds() = 0;
578 data.goodseeds() = 0;
579 data.findtracks() = 0;
582 data.summaryStatAll()[
i][
k] = 0.;
588 data.summaryStatUsedInTrack()[
i][
k][
r] = 0.;
608 data.clusterTrack().clear();
618 for(
int r = 0;
r != 8; ++
r) {
639 m_deSize[K] = m_deSize[K] +
data.summaryStatAll()[
kDESize][K];
668 std::list<Trk::Track*> tracks;
670 if (!
data.pix() && !
data.sct())
return tracks;
673 bool isGoodSeed{
true};
687 if (fieldCondObj ==
nullptr) {
691 fieldCondObj->getInitializedCache (fieldCache);
694 std::unique_ptr<Trk::TrackParameters> Tp =
nullptr;
697 m_seedtrack->executeSiSPSeedSegments(
data.conversionData(), Tp.get(), isGoodSeed, Sp);
719 std::vector<const InDetDD::SiDetectorElement*> DE;
730 if(road_length == 0) {
740 if (
static_cast<int>(DE.size()) <
m_nclusmin) {
749 std::vector<Amg::Vector3D> Gp;
759 if(newTrack !=
nullptr) tracks.push_back(newTrack);
766 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), *Tp, Sp, Gp, DE,
data.clusterTrack(),
false,ctx);
772 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), *Tp, Sp, Gp, DE,
data.clusterTrack(),
true,ctx);
778 std::array<bool,SiCombinatorialTrackFinderData_xk::kNCombStats>
inf{0,0,0,0,0,0};
780 for (
size_t p =0;
p<
inf.size(); ++
p){
788 while (
t!=tracks.end()) {
799 data.findtracks() += tracks.size();
801 if(!tracks.empty()) {
820 std::list<Trk::Track*> tracks;
821 if (!
data.pix() && !
data.sct())
return tracks;
830 if (fieldCondObj ==
nullptr) {
834 fieldCondObj->getInitializedCache (fieldCache);
838 std::vector<const InDetDD::SiDetectorElement*> DE;
844 if (
static_cast<int>(DE.size()) <
m_nclusmin)
return tracks;
848 std::vector<const Trk::SpacePoint*> Sp;
853 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), Tp, Sp, Gp, DE,
data.clusterTrack(),
false,ctx);
855 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), Tp, Sp, Gp, DE,
data.clusterTrack(),
true,ctx);
862 while (
t!=tracks.end()) {
871 data.findtracks() += tracks.size();
883 const std::vector<const Trk::SpacePoint*>& theSeed,
884 const EventContext& ctx)
const
887 if (theSeed.size() < 3)
return nullptr;
889 std::vector<const Trk::SpacePoint*> SP;
893 unsigned int middleIdx = theSeed.size() == 3 ? 1 : theSeed.size()/2;
894 SP = {theSeed[0], theSeed[middleIdx], theSeed.back()};
898 SP = {theSeed[theSeed.size() - 3], theSeed[theSeed.size() - 2], theSeed.back()};
902 unsigned int middleIdx = theSeed.size() == 3 ? 0 : theSeed.size()/2;
903 unsigned int quarterIdx = theSeed.size() == 3 ? 1 : 3*theSeed.size()/4;
904 SP = {theSeed[middleIdx], theSeed[quarterIdx], theSeed.back()};
908 SP = {theSeed[0], theSeed[theSeed.size() - 2], theSeed.back()};
912 SP = {theSeed[0], theSeed[1], theSeed[2]};
918 if (!
cl)
return nullptr;
922 if (!pla)
return nullptr;
933 double x1 =
p1[0]-x0;
934 double y1 =
p1[1]-y0;
935 double x2 =
p2[0]-x0;
936 double y2 =
p2[1]-y0;
937 double z2 =
p2[2]-
z0;
949 double u2 = (
a*
x2+
b*
y2)*r2 ;
954 double A =
v2/(u2-u1) ;
955 double B = 2.*(
v2-
A*u2) ;
956 double C = B/sqrt(1.+
A*
A) ;
957 double T = z2*sqrt(r2)/(1.+.04*C*C*
rn);
959 T = std::abs(C) > 1.e-6 ? (z2*C)/asin(C*sqrt(
rn)) : z2/sqrt(
rn);
965 double Ax[3] = {Tp(0,0),Tp(1,0),Tp(2,0)};
967 double Ay[3] = {Tp(0,1),Tp(1,1),Tp(2,1)};
969 double D [3] = {Tp(0,3),Tp(1,3),Tp(2,3)};
971 double d[3] = {x0-D[0],y0-D[1],
z0-D[2]};
973 data.par()[0] =
d[0]*Ax[0]+
d[1]*Ax[1]+
d[2]*Ax[2];
974 data.par()[1] =
d[0]*Ay[0]+
d[1]*Ay[1]+
d[2]*Ay[2];
985 double H[3],gP[3] ={x0,y0,
z0};
990 if (fabs(
H[2])>.0001) {
994 data.par()[3] = atan2(1.,T) ;
996 data.par()[5] = -C/(300.*
H[2]) ;
1002 data.par()[3] = atan2(1.,T) ;
1010 data.par()[3] = atan2(1.,T) ;
1014 double pTm =
pTmin(SP[0]->eta());
1018 if(std::abs(
data.par()[5])*pTm > 1)
return nullptr;
1020 else if(std::abs(
data.par()[5])*
m_pTmin > 1.1)
return nullptr;
1023 data.par()[4] =
data.par()[5]/sqrt(1.+T*T);
1024 data.par()[6] = x0 ;
1025 data.par()[7] = y0 ;
1061 else trackquality.
setIntCut(
"UseAssociationTool",0);
1063 else trackquality.
setIntCut(
"CosmicTrack" ,0);
1064 if (simpleTrack) trackquality.
setIntCut(
"SimpleTrack" ,1);
1065 else trackquality.
setIntCut(
"SimpleTrack" ,0);
1067 else trackquality.
setIntCut(
"doMultiTracksProd" ,0);
1078 return trackquality;
1086 std::vector<const InDetDD::SiDetectorElement*>& DE)
1089 while (
d!=DE.end()) {
1090 if ((*d)->isPixel()) {
1095 }
else if (!
data.sct()) {
1114 std::multiset<const Trk::Track*> trackseed;
1115 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator iter_clusterOnTrack,iter_clusterOnTrackEnd =
data.clusterTrack().end();
1126 for (iter_clusterOnTrack =
data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1127 if ((*iter_clusterOnTrack).first!=prd)
break;
1129 trackseed.insert((*iter_clusterOnTrack).second);
1134 prd = spacePoint->clusterList().second;
1138 for (iter_clusterOnTrack =
data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1139 if ((*iter_clusterOnTrack).first!=prd)
break;
1140 trackseed.insert((*iter_clusterOnTrack).second);
1148 if(trackseed.size() <
n)
return true;
1159 size_t clustersOnCurrent = 1;
1163 if(
track != currentTrack) {
1164 currentTrack =
track;
1165 clustersOnCurrent = 1;
1170 if(++clustersOnCurrent ==
n)
return false;
1173 return clustersOnCurrent!=
n;
1184 if(Sp.size()!=3)
return 0;
1186 std::vector<const Trk::SpacePoint*>::const_iterator
s=Sp.begin(),
se=Sp.end();
1189 for(;
s!=
se; ++
s) {
if((*s)->clusterList().second) ++
n;}
1195 if(Sp.size() < 2)
return 0;
1197 Amg::Vector3D delta_sp = Sp[0]->globalPosition() - Sp[1]->globalPosition();
1198 float eta = 2*std::abs(delta_sp.eta());
1214 for (;
m!=me; ++
m) {
1216 if (prd)
data.clusterTrack().insert(std::make_pair(prd, Tr));
1227 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator
1228 ti,
t[100],te =
data.clusterTrack().end();
1236 for (;
m!=me; ++
m) {
1241 t [
n] =
data.clusterTrack().find(prd[
n]);
1242 if (
t[
n]==te)
return true;
1247 if (!
n)
return true;
1250 for (
int i=0;
i!=
n; ++
i) {
1252 for (ti=
t[
i]; ti!=te; ++ti) {
1253 if ( (*ti).first != prd[
i] )
break;
1254 int ncl = (*ti).second->measurementsOnTrack()->size();
1255 if (ncl > nclmax) nclmax = ncl;
1257 if (nclt > nclmax)
return true;
1268 double*
p0,
double*
p1,
double*
p2)
const
1272 p0[0] = s0.globalPosition().x();
1273 p0[1] = s0.globalPosition().y();
1274 p0[2] = s0.globalPosition().z();
1276 p1[0] = s1.globalPosition().x();
1277 p1[1] = s1.globalPosition().y();
1278 p1[2] = s1.globalPosition().z();
1280 p2[0] =
s2.globalPosition().x();
1281 p2[1] =
s2.globalPosition().y();
1282 p2[2] =
s2.globalPosition().z();
1285 if (!s0.clusterList().second && !s1.clusterList().second && !
s2.clusterList().second)
return true;
1288 double dir0[3],dir1[3],dir2[3];
1320 std::pair<Amg::Vector3D,Amg::Vector3D>
e0
1323 localPos =
c1->localPosition();
1324 std::pair<Amg::Vector3D,Amg::Vector3D>
e1
1329 double a0[3] = {
e0.second.x()-
e0.first.x(),
e0.second.y()-
e0.first.y(),
e0.second.z()-
e0.first.z()};
1330 double a1[3] = {
e1.second.x()-
e1.first.x(),
e1.second.y()-
e1.first.y(),
e1.second.z()-
e1.first.z()};
1332 double dr[3] = {
e1.first .x()-
e0.first.x(),
e1.first .y()-
e0.first.y(),
e1.first .z()-
e0.first.z()};
1339 double u[3] = {a1[1]*
dir[2]-a1[2]*
dir[1],a1[2]*
dir[0]-a1[0]*
dir[2],a1[0]*
dir[1]-a1[1]*
dir[0]};
1351 double du =
a0[0]*
u[0]+
a0[1]*
u[1]+
a0[2]*
u[2];
1354 if (du==0. )
return false;
1362 double s0 = (
dr[0]*
u[0]+
dr[1]*
u[1]+
dr[2]*
u[2])/du;
1367 double s1 = (
dr[0]*
v[0]+
dr[1]*
v[1]+
dr[2]*
v[2])/du;
1373 if (s0 < -d0 || s0 > 1.+
d0 || s1 < -d0 || s1 > 1.+
d0)
return false;
1377 p[0] =
e0.first.x()+s0*
a0[0];
1378 p[1] =
e0.first.y()+s0*
a0[1];
1379 p[2] =
e0.first.z()+s0*
a0[2];
1390 if (!
data.caloClusterROIEM())
return false;
1393 double F =
data.par()[2] ;
1396 double Z =
data.par()[8] ;
1406 if (!
data.caloClusterROIHad())
return false;
1408 double F =
data.par()[2] ;
1411 double Z =
data.par()[8] ;
1424 (
const double*
p0,
const double*
p1,
const double*
p2,
double*
d0,
double*
d1,
double*
d2)
1427 double x01 =
p1[0]-
p0[0] ;
1428 double y01 =
p1[1]-
p0[1] ;
1429 double x02 =
p2[0]-
p0[0] ;
1430 double y02 =
p2[1]-
p0[1] ;
1437 double d01 = x01*x01+y01*y01 ;
1438 double x1 = sqrt(d01) ;
1439 double u01 = 1./
x1 ;
1440 double a = x01*u01 ;
1441 double b = y01*u01 ;
1443 double x2 =
a*x02+
b*y02 ;
1445 double y2 =
a*y02-
b*x02 ;
1450 double u02 =
x2/d02 ;
1451 double v02 =
y2/d02 ;
1456 double A0 = v02 /(u02-u01) ;
1457 double B0 = 2.*(v02-A0*u02) ;
1465 double C2 = (1.-B0*
y2) ;
1466 double S2 = (A0+B0*
x2) ;
1468 double T = (
p2[2]-
p0[2])/sqrt(d02);
1469 double sinTheta = 1./sqrt(1.+T*T) ;
1470 double cosTheta = sinTheta*T ;
1471 double sinThetaCosAlpha = sinTheta / sqrt(1.+A0*A0) ;
1472 double Sa = sinThetaCosAlpha*
a ;
1473 double Sb = sinThetaCosAlpha*
b ;
1489 d2[0] = Sa*C2-Sb*
S2;
1499 double aeta = std::abs(eta);