5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/DataSvc.h"
7#include "GaudiKernel/SmartDataPtr.h"
25using HepGeom::Point3D;
90 msg(MSG::DEBUG) <<
" InDetSegmentDriftCircleAssValidation execute()" <<
endmsg;
96 return StatusCode::FAILURE;
103 if ( !prdCollection.
isValid() ){
105 return StatusCode::FAILURE;
123 return StatusCode::SUCCESS;
132 if(
m_events<=0)
return StatusCode::SUCCESS;
134 std::cout<<
"|-----------------------------------------------------------------------------------|"
136 std::cout<<
"| TrackSegmentValidation statistics"<<std::endl;
139 double ef[5];
for(
int i=0; i!=5; ++i) ef[i] =
double(
m_efficiency[i])/ne;
141 std::cout<<
"|-----------------------------------------------------------------------------------|"
143 std::cout<<
"| TRT Particles >0.9 >0.75 >0.50 >0.25 <=0.25 |"
145 std::cout<<
"|-----------------------------------------------------------------------------------|"
150 <<std::setw(13)<<std::setprecision(5)<<ef[0]
151 <<std::setw(13)<<std::setprecision(5)<<ef[1]
152 <<std::setw(13)<<std::setprecision(5)<<ef[2]
153 <<std::setw(13)<<std::setprecision(5)<<ef[3]
154 <<std::setw(13)<<std::setprecision(5)<<ef[4]<<
" |"
156 std::cout<<
"|-----------------------------------------------------------------------------------|"
159 return StatusCode::SUCCESS;
166MsgStream& InDet::operator <<
176std::ostream& InDet::operator <<
201 out<<
"|----------------------------------------------------------------"
202 <<
"----------------------------------------------------|"
205 std::string s1;
for(
int i=0; i<n; ++i) s1.append(
" "); s1.append(
"|");
207 std::string s2;
for(
int i=0; i<n; ++i) s2.append(
" "); s2.append(
"|");
209 std::string s3;
for(
int i=0; i<n; ++i) s3.append(
" "); s3.append(
"|");
211 out<<
"| Location of input segmentss | "<<
m_origtrackKey.key() <<s1
218 <<std::setw(14)<<std::setprecision(5)<<
m_pTmin
221 out<<
"| rapidity cut | "
222 <<std::setw(14)<<std::setprecision(5)<<
m_rapcut
225 out<<
"| min Radius | "
226 <<std::setw(14)<<std::setprecision(5)<<
m_rmin
229 out<<
"| max Radius | "
230 <<std::setw(14)<<std::setprecision(5)<<
m_rmax
233 out<<
"| Min. number drift circles for generated segment | "
234 <<std::setw(14)<<std::setprecision(5)<<
m_dccut
237 out<<
"|----------------------------------------------------------------"
238 <<
"----------------------------------------------------|"
250 out<<
"|---------------------------------------------------------------------|"
252 out<<
"| TRT Drift Circles | "
255 out<<
"| Good TRT particles size | "
258 out<<
"| Number good kine segments | "
261 out<<
"|---------------------------------------------------------------------|"
294 InDet::TRT_DriftCircleContainer::const_iterator w = trtcontainer->begin();
295 InDet::TRT_DriftCircleContainer::const_iterator we = trtcontainer->end ();
299 InDet::TRT_DriftCircleCollection::const_iterator c = (*w)->begin();
300 InDet::TRT_DriftCircleCollection::const_iterator ce = (*w)->end ();
306 std::list<int> lk =
kine((*c), prdCollection );
307 if(
int(lk.size())==0)
continue;
308 std::list<int>::iterator ik,ike=lk.end();
309 for(ik=lk.begin();ik!=ike;++ik){
312 bool isThere =
false;
315 if((*ik)==(*ii)) isThere =
true;
339 std::multimap<int,const Trk::PrepRawData*>::iterator dc =
m_kinecircle .begin();
341 if((*ii)==(*dc).first) ndc++;
370 int KINE[200],NKINE[200];
371 for(
int i=0;i<200;++i){
372 KINE[i] =0; NKINE[i] = 0;
377 for(; iseg != isegEnd; ++ iseg) {
390 if(!trtcircle)
continue;
393 if(!RawDataClus)
continue;
395 std::list<PRD_MultiTruthCollection::const_iterator> lk =
kinpart(RawDataClus, prdCollection );
396 if (
int(lk.size())==0)
continue;
397 std::list<PRD_MultiTruthCollection::const_iterator>::iterator ik, ike=lk.end();
400 for(ik=lk.begin(); ik!=ike; ++ik){
402 if (uniqueID<=0)
continue;
405 for(
int n=0; n!=NK; ++n) {
406 if(uniqueID==KINE[n]) {
421 for(
int n=0; n!=NK; ++n) {
427 m_tracks.insert(std::make_pair(KINE[nm],m) );
438 std::multimap<int,int>::iterator t, te =
m_tracks.end();
443 int n = (*im).second;
448 if((*t).first!=k)
break;
449 if((*t).second > m) m = (*t).second;
452 double rd = (double)m/n;
if(rd>0.9) d = 0;
453 else if(rd > 0.75) d=1;
454 else if(rd > 0.50) d=2;
455 else if(rd > 0.25) d=3;
456 else if(rd <= 0.25) d=4;
471 std::list<PRD_MultiTruthCollection::const_iterator>
mc =
findTruth(d,
find, prdCollection );
473 std::list<PRD_MultiTruthCollection::const_iterator>::iterator imc, imce=
mc.end();
474 for(imc=
mc.begin();imc!=imce;++imc){
475 const int uniqueID =
HepMC::uniqueID((*imc)->second);
if(uniqueID<=0)
continue;
478 if(!pa || !pa->production_vertex())
continue;
482 int pdg = pa->pdg_id();
488 double pt = pa->momentum().perp();
493 double t = std::abs(pa->momentum().pz())/pt;
494 if( t >
m_tcut )
continue;
498 Point3D<double> v(pa->production_vertex()->position().x(),
499 pa->production_vertex()->position().y(),
500 pa->production_vertex()->position().z());
501 double r = sqrt(v.x()*v.x()+v.y()*v.y());
504 lk.push_back(uniqueID);
518 std::list<PRD_MultiTruthCollection::const_iterator> lk;
520 std::list<PRD_MultiTruthCollection::const_iterator>
mc =
findTruth(d,
find, prdCollection );
523 std::list<PRD_MultiTruthCollection::const_iterator>::iterator imc, imce=
mc.end();
524 for(imc=
mc.begin();imc!=imce;++imc){
526 const int uniqueID =
HepMC::uniqueID((*imc)->second);
if(uniqueID<=0)
continue;
529 if(!pa || !pa->production_vertex())
continue;
533 int pdg = pa->pdg_id();
539 double pt = pa->momentum().perp();
545 double t = std::abs(pa->momentum().pz())/pt;
546 if( t >
m_tcut )
continue;
550 Point3D<double> v(pa->production_vertex()->position().x(),
551 pa->production_vertex()->position().y(),
552 pa->production_vertex()->position().z());
553 double r = sqrt(v.x()*v.x()+v.y()*v.y());
556 lk.push_back((*imc));
569 std::multimap<int,const Trk::PrepRawData*>::iterator k =
m_kinecircle.find(K);
572 if((*k).first!= K)
return false;
573 if(d->detectorElement()==(*k).second->detectorElement())
return true;
581std::list<PRD_MultiTruthCollection::const_iterator>
585 std::list<PRD_MultiTruthCollection::const_iterator>
mc;
587 auto r = prdCollection->equal_range(d->identify());
588 for(
auto i =
r.first; i !=
r.second && i != prdCollection->end(); ++i){
592 if (
mc.empty()) Q =
false;
#define ATH_CHECK
Evaluate an expression and check for errors.
ATLAS-specific HepMC functions.
Handle class for reading from StoreGate.
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
bool msgLvl(const MSG::Level lvl) const
DataModel_detail::const_iterator< DataVector > const_iterator
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
SG::ReadHandleKey< TRT_DriftCircleContainer > m_circlesTRTKey
SG::ReadHandleKey< Trk::SegmentCollection > m_origtrackKey
std::list< int > kine(const InDet::TRT_DriftCircle *, const PRD_MultiTruthCollection *prdCollection)
std::list< PRD_MultiTruthCollection::const_iterator > kinpart(const InDet::TRT_DriftCircle *, const PRD_MultiTruthCollection *)
std::multimap< int, const Trk::PrepRawData * > m_kinecircle
MsgStream & dumpevent(MsgStream &out) const
bool isTheSameStrawElement(int, const Trk::PrepRawData *)
std::multimap< int, int > m_allParticles
SegmentDriftCircleAssValidation(const std::string &name, ISvcLocator *pSvcLocator)
std::list< int > m_allBarcodes
void tracksComparison(const Trk::SegmentCollection *, const PRD_MultiTruthCollection *)
int QualityTracksSelection()
std::multimap< int, int > m_tracks
MsgStream & dump(MsgStream &out) const
std::list< PRD_MultiTruthCollection::const_iterator > findTruth(const InDet::TRT_DriftCircle *, bool &, const PRD_MultiTruthCollection *)
MsgStream & dumptools(MsgStream &out) const
void efficiencyReconstruction()
SG::ReadHandleKey< PRD_MultiTruthCollection > m_PRDTruthTRTKey
std::list< int > m_particles
void newCirclesEvent(const PRD_MultiTruthCollection *)
Represents 'corrected' measurements from the TRT (for example, corrected for wire sag).
virtual const TRT_DriftCircle * prepRawData() const override final
returns the PrepRawData - is a TRT_DriftCircle in this scope
A PRD is mapped onto all contributing particles.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
Class to handle pseudo-measurements in fitters and on track objects.
const MeasurementBase * measurement(unsigned int) const
returns the Trk::MeasurementBase objects depending on the integer
unsigned int numberOfMeasurementBases() const
Return the number of contained Trk::MeasurementBase (s)
Class for a generic track segment that holdes polymorphic Trk::MeasurementBase objects,...
std::string find(const std::string &s)
return a remapped string
const GenParticle * ConstGenParticlePtr
double charge(const T &p)
bool isNucleus(const T &p)
PDG rule 16 Nuclear codes are given as 10-digit numbers ±10LZZZAAAI.
DataVector< Trk::Segment > SegmentCollection