5 #include "GaudiKernel/MsgStream.h"
6 #include "GaudiKernel/DataSvc.h"
7 #include "GaudiKernel/SmartDataPtr.h"
8 #include "GaudiKernel/IPartPropSvc.h"
24 using HepGeom::Point3D;
33 m_particleDataTable (nullptr),
72 IPartPropSvc* partPropSvc =
nullptr;
73 sc = service(
"PartPropSvc", partPropSvc,
true);
76 return StatusCode::FAILURE;
84 return StatusCode::FAILURE;
111 if( !origColTracks.
isValid() ){
113 return StatusCode::FAILURE;
120 if ( !prdCollection.
isValid() ){
122 return StatusCode::FAILURE;
140 return StatusCode::SUCCESS;
149 if(
m_events<=0)
return StatusCode::SUCCESS;
151 std::cout<<
"|-----------------------------------------------------------------------------------|"
153 std::cout<<
"| TrackSegmentValidation statistics"<<std::endl;
158 std::cout<<
"|-----------------------------------------------------------------------------------|"
160 std::cout<<
"| TRT Particles >0.9 >0.75 >0.50 >0.25 <=0.25 |"
162 std::cout<<
"|-----------------------------------------------------------------------------------|"
167 <<std::setw(13)<<std::setprecision(5)<<
ef[0]
168 <<std::setw(13)<<std::setprecision(5)<<
ef[1]
169 <<std::setw(13)<<std::setprecision(5)<<
ef[2]
170 <<std::setw(13)<<std::setprecision(5)<<
ef[3]
171 <<std::setw(13)<<std::setprecision(5)<<
ef[4]<<
" |"
173 std::cout<<
"|-----------------------------------------------------------------------------------|"
176 return StatusCode::SUCCESS;
183 MsgStream& InDet::operator <<
193 std::ostream& InDet::operator <<
218 out<<
"|----------------------------------------------------------------"
219 <<
"----------------------------------------------------|"
222 std::string s1;
for(
int i=0;
i<
n; ++
i) s1.append(
" "); s1.append(
"|");
224 std::string
s2;
for(
int i=0;
i<
n; ++
i)
s2.append(
" ");
s2.append(
"|");
226 std::string
s3;
for(
int i=0;
i<
n; ++
i)
s3.append(
" ");
s3.append(
"|");
235 <<std::setw(14)<<std::setprecision(5)<<
m_pTmin
238 out<<
"| rapidity cut | "
239 <<std::setw(14)<<std::setprecision(5)<<
m_rapcut
242 out<<
"| min Radius | "
243 <<std::setw(14)<<std::setprecision(5)<<
m_rmin
246 out<<
"| max Radius | "
247 <<std::setw(14)<<std::setprecision(5)<<
m_rmax
250 out<<
"| Min. number drift circles for generated segment | "
251 <<std::setw(14)<<std::setprecision(5)<<
m_dccut
254 out<<
"|----------------------------------------------------------------"
255 <<
"----------------------------------------------------|"
267 out<<
"|---------------------------------------------------------------------|"
269 out<<
"| TRT Drift Circles | "
272 out<<
"| Good TRT particles size | "
275 out<<
"| Number good kine segments | "
278 out<<
"|---------------------------------------------------------------------|"
311 InDet::TRT_DriftCircleContainer::const_iterator
w = trtcontainer->begin();
312 InDet::TRT_DriftCircleContainer::const_iterator we = trtcontainer->end ();
316 InDet::TRT_DriftCircleCollection::const_iterator
c = (*w)->begin();
317 InDet::TRT_DriftCircleCollection::const_iterator ce = (*w)->end ();
323 std::list<int> lk =
kine((*
c), prdCollection );
324 if(
int(lk.size())==0)
continue;
326 for(ik=lk.begin();ik!=ike;++ik){
329 bool isThere =
false;
332 if((*ik)==(*ii)) isThere =
true;
358 if((*ii)==(*dc).first) ndc++;
387 int KINE[200],NKINE[200];
388 for(
int i=0;
i<200;++
i){
389 KINE[
i] =0; NKINE[
i] = 0;
394 for(; iseg != isegEnd; ++ iseg) {
407 if(!trtcircle)
continue;
410 if(!RawDataClus)
continue;
412 std::list<PRD_MultiTruthCollection::const_iterator> lk =
kinpart(RawDataClus, prdCollection );
413 if (
int(lk.size())==0)
continue;
417 for(ik=lk.begin(); ik!=ike; ++ik){
418 int k = (*ik)->second.barcode();
422 for(
int n=0;
n!=NK; ++
n) {
438 for(
int n=0;
n!=NK; ++
n) {
460 int n = (*im).second;
465 if((*t).first!=
k)
break;
466 if((*t).second >
m)
m = (*t).second;
469 double rd = (
double)
m/
n;
if(rd>0.9)
d = 0;
470 else if(rd > 0.75)
d=1;
471 else if(rd > 0.50)
d=2;
472 else if(rd > 0.25)
d=3;
473 else if(rd <= 0.25)
d=4;
488 std::list<PRD_MultiTruthCollection::const_iterator>
mc =
findTruth(
d,
find, prdCollection );
491 for(imc=
mc.begin();imc!=imce;++imc){
492 int k = (*imc)->second.barcode();
if(
k<=0)
continue;
495 if(!pa || !pa->production_vertex())
continue;
499 int pdg = pa->pdg_id();
501 if(!pd || std::abs(pd->charge()) < .5)
continue;
505 double pt = pa->momentum().perp();
510 double t = std::abs(pa->momentum().pz())/
pt;
515 Point3D<double>
v(pa->production_vertex()->position().x(),
516 pa->production_vertex()->position().y(),
517 pa->production_vertex()->position().z());
518 double r = sqrt(
v.x()*
v.x()+
v.y()*
v.y());
519 if( r < m_rmin || r >
m_rmax)
continue;
535 std::list<PRD_MultiTruthCollection::const_iterator> lk;
537 std::list<PRD_MultiTruthCollection::const_iterator>
mc =
findTruth(
d,
find, prdCollection );
541 for(imc=
mc.begin();imc!=imce;++imc){
543 int k = (*imc)->second.barcode();
if(
k<=0)
continue;
546 if(!pa || !pa->production_vertex())
continue;
550 int pdg = pa->pdg_id();
552 if(!pd || std::abs(pd->charge()) < .5)
continue;
556 double pt = pa->momentum().perp();
562 double t = std::abs(pa->momentum().pz())/
pt;
567 Point3D<double>
v(pa->production_vertex()->position().x(),
568 pa->production_vertex()->position().y(),
569 pa->production_vertex()->position().z());
570 double r = sqrt(
v.x()*
v.x()+
v.y()*
v.y());
571 if( r < m_rmin || r >
m_rmax)
continue;
573 lk.push_back((*imc));
589 if((*k).first!= K)
return false;
590 if(
d->detectorElement()==(*k).second->detectorElement())
return true;
598 std::list<PRD_MultiTruthCollection::const_iterator>
602 std::list<PRD_MultiTruthCollection::const_iterator>
mc;
604 auto r = prdCollection->equal_range(
d->identify());
605 for(
auto i =
r.first;
i !=
r.second &&
i != prdCollection->end(); ++
i){
609 if (
mc.empty()) Q =
false;