7#include "GaudiKernel/MsgStream.h"
8#include "GaudiKernel/DataSvc.h"
9#include "GaudiKernel/SmartDataPtr.h"
27using HepGeom::Point3D;
92 msg(MSG::DEBUG) <<
" InDetSegmentDriftCircleAssValidation execute()" <<
endmsg;
98 return StatusCode::FAILURE;
105 if ( !prdCollection.
isValid() ){
107 return StatusCode::FAILURE;
125 return StatusCode::SUCCESS;
134 if(
m_events<=0)
return StatusCode::SUCCESS;
136 std::cout<<
"|-----------------------------------------------------------------------------------|"
138 std::cout<<
"| TrackSegmentValidation statistics"<<std::endl;
141 double ef[5];
for(
int i=0; i!=5; ++i) ef[i] =
double(
m_efficiency[i])/ne;
143 std::cout<<
"|-----------------------------------------------------------------------------------|"
145 std::cout<<
"| TRT Particles >0.9 >0.75 >0.50 >0.25 <=0.25 |"
147 std::cout<<
"|-----------------------------------------------------------------------------------|"
152 <<std::setw(13)<<std::setprecision(5)<<ef[0]
153 <<std::setw(13)<<std::setprecision(5)<<ef[1]
154 <<std::setw(13)<<std::setprecision(5)<<ef[2]
155 <<std::setw(13)<<std::setprecision(5)<<ef[3]
156 <<std::setw(13)<<std::setprecision(5)<<ef[4]<<
" |"
158 std::cout<<
"|-----------------------------------------------------------------------------------|"
161 return StatusCode::SUCCESS;
168MsgStream& InDet::operator <<
178std::ostream& InDet::operator <<
203 out<<
"|----------------------------------------------------------------"
204 <<
"----------------------------------------------------|"
207 std::string s1;
for(
int i=0; i<n; ++i) s1.append(
" "); s1.append(
"|");
209 std::string s2;
for(
int i=0; i<n; ++i) s2.append(
" "); s2.append(
"|");
211 std::string s3;
for(
int i=0; i<n; ++i) s3.append(
" "); s3.append(
"|");
213 out<<
"| Location of input segmentss | "<<
m_origtrackKey.key() <<s1
220 <<std::setw(14)<<std::setprecision(5)<<
m_pTmin
223 out<<
"| rapidity cut | "
224 <<std::setw(14)<<std::setprecision(5)<<
m_rapcut
227 out<<
"| min Radius | "
228 <<std::setw(14)<<std::setprecision(5)<<
m_rmin
231 out<<
"| max Radius | "
232 <<std::setw(14)<<std::setprecision(5)<<
m_rmax
235 out<<
"| Min. number drift circles for generated segment | "
236 <<std::setw(14)<<std::setprecision(5)<<
m_dccut
239 out<<
"|----------------------------------------------------------------"
240 <<
"----------------------------------------------------|"
252 out<<
"|---------------------------------------------------------------------|"
254 out<<
"| TRT Drift Circles | "
257 out<<
"| Good TRT particles size | "
260 out<<
"| Number good kine segments | "
263 out<<
"|---------------------------------------------------------------------|"
296 InDet::TRT_DriftCircleContainer::const_iterator w = trtcontainer->begin();
297 InDet::TRT_DriftCircleContainer::const_iterator we = trtcontainer->end ();
301 InDet::TRT_DriftCircleCollection::const_iterator c = (*w)->begin();
302 InDet::TRT_DriftCircleCollection::const_iterator ce = (*w)->end ();
308 std::list<int> lk =
kine((*c), prdCollection );
309 if(
int(lk.size())==0)
continue;
310 std::list<int>::iterator ik,ike=lk.end();
311 for(ik=lk.begin();ik!=ike;++ik){
314 bool isThere =
false;
317 if((*ik)==(*ii)) isThere =
true;
341 std::multimap<int,const Trk::PrepRawData*>::iterator dc =
m_kinecircle .begin();
343 if((*ii)==(*dc).first) ndc++;
372 int KINE[200],NKINE[200];
373 for(
int i=0;i<200;++i){
374 KINE[i] =0; NKINE[i] = 0;
379 for(; iseg != isegEnd; ++ iseg) {
392 if(!trtcircle)
continue;
395 if(!RawDataClus)
continue;
397 std::list<PRD_MultiTruthCollection::const_iterator> lk =
kinpart(RawDataClus, prdCollection );
398 if (
int(lk.size())==0)
continue;
399 std::list<PRD_MultiTruthCollection::const_iterator>::iterator ik, ike=lk.end();
402 for(ik=lk.begin(); ik!=ike; ++ik){
404 if (uniqueID<=0)
continue;
407 for(
int n=0; n!=NK; ++n) {
408 if(uniqueID==KINE[n]) {
423 for(
int n=0; n!=NK; ++n) {
429 m_tracks.insert(std::make_pair(KINE[nm],m) );
440 std::multimap<int,int>::iterator t, te =
m_tracks.end();
446 int n = (*im).second;
451 if((*t).first!=k)
break;
452 if((*t).second > m) m = (*t).second;
455 double rd = (double)m/n;
if(rd>0.9) d = 0;
456 else if(rd > 0.75) d=1;
457 else if(rd > 0.50) d=2;
458 else if(rd > 0.25) d=3;
459 else if(rd <= 0.25) d=4;
474 std::list<PRD_MultiTruthCollection::const_iterator>
mc =
findTruth(d,
find, prdCollection );
476 std::list<PRD_MultiTruthCollection::const_iterator>::iterator imc, imce=
mc.end();
477 for(imc=
mc.begin();imc!=imce;++imc){
478 const int uniqueID =
HepMC::uniqueID((*imc)->second);
if(uniqueID<=0)
continue;
481 if(!pa || !pa->production_vertex())
continue;
485 int pdg = pa->pdg_id();
491 double pt = pa->momentum().perp();
496 double t = std::abs(pa->momentum().pz())/pt;
497 if( t >
m_tcut )
continue;
501 Point3D<double> v(pa->production_vertex()->position().x(),
502 pa->production_vertex()->position().y(),
503 pa->production_vertex()->position().z());
504 double r = sqrt(v.x()*v.x()+v.y()*v.y());
507 lk.push_back(uniqueID);
521 std::list<PRD_MultiTruthCollection::const_iterator> lk;
523 std::list<PRD_MultiTruthCollection::const_iterator>
mc =
findTruth(d,
find, prdCollection );
526 std::list<PRD_MultiTruthCollection::const_iterator>::iterator imc, imce=
mc.end();
527 for(imc=
mc.begin();imc!=imce;++imc){
529 const int uniqueID =
HepMC::uniqueID((*imc)->second);
if(uniqueID<=0)
continue;
532 if(!pa || !pa->production_vertex())
continue;
536 int pdg = pa->pdg_id();
542 double pt = pa->momentum().perp();
548 double t = std::abs(pa->momentum().pz())/pt;
549 if( t >
m_tcut )
continue;
553 Point3D<double> v(pa->production_vertex()->position().x(),
554 pa->production_vertex()->position().y(),
555 pa->production_vertex()->position().z());
556 double r = sqrt(v.x()*v.x()+v.y()*v.y());
559 lk.push_back((*imc));
572 std::multimap<int,const Trk::PrepRawData*>::iterator k =
m_kinecircle.find(K);
575 if((*k).first!= K)
return false;
576 if(d->detectorElement()==(*k).second->detectorElement())
return true;
584std::list<PRD_MultiTruthCollection::const_iterator>
588 std::list<PRD_MultiTruthCollection::const_iterator>
mc;
590 auto r = prdCollection->equal_range(d->identify());
591 for(
auto i =
r.first; i !=
r.second && i != prdCollection->end(); ++i){
595 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.
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 *)
StatusCode execute(const EventContext &ctx)
Execute method.
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
HepMC3::ConstGenParticlePtr 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