32(
const std::string& t,
const std::string& n,
const IInterface* p)
35 declareInterface<ITRT_TrackSegmentsMaker>(
this);
52 StatusCode
sc = AlgTool::initialize();
66 return StatusCode::FAILURE;
77 return StatusCode::FAILURE;
101 StatusCode
sc = AlgTool::finalize();
return sc;
108std::unique_ptr<InDet::ITRT_TrackSegmentsMaker::IEventData>
112 const float pi2 = 2.*
M_PI;
119 if(not trtcontainer.
isValid()) {
120 std::stringstream
msg;
121 msg << name() <<
" Missing TRT_DriftCircleContainer " <<
m_trtname.key();
122 throw std::runtime_error(
msg.str());
129 if (!prd_to_track_map.
isValid()) {
132 prd_to_track_map_cptr = prd_to_track_map.
cptr();
136 std::unique_ptr<TRT_TrackSegmentsMaker_ATLxk::EventData>
137 event_data = std::make_unique<TRT_TrackSegmentsMaker_ATLxk::EventData>(trtcontainer.
cptr(), condData.
m_cirsize);
143 InDet::TRT_DriftCircleContainer::const_iterator
144 w = trtcontainer->begin(),we = trtcontainer->end();
159 int b; be < 0 ? b = be+2 : b = be+1;
161 unsigned int sb = condData.
m_begin[b][l];
162 unsigned int se = condData.
m_end [b][l];
163 unsigned int ad = 1000*b+l;
167 InDet::TRT_DriftCircleCollection::const_iterator
168 c = (*w)->begin(), ce = (*w)->end();
171 if(prd_to_track_map_cptr && prd_to_track_map_cptr->
isUsed(*(*c)))
continue;
176 int ns =
m_trtid->straw((*c)->identify());
178 float Fs = std::atan2(
sc.y(),
sc.x());
if(Fs<0.) Fs+=pi2;
179 event_data->m_circles[n].set((*c),Fs,ad);
183 for(
unsigned int s=sb; s<=se; ++s)
fillHistogramm (Fs,s,*event_data);
188 event_data->m_clusters = n;
189 return std::unique_ptr<InDet::ITRT_TrackSegmentsMaker::IEventData>(event_data.release());
196std::unique_ptr<InDet::ITRT_TrackSegmentsMaker::IEventData>
198(
const EventContext& ctx,
const std::vector<IdentifierHash>& vTRT)
const
200 const float pi2 = 2.*
M_PI;
207 if(not trtcontainer.
isValid()) {
215 if (!prd_to_track_map.
isValid()) {
218 prd_to_track_map_cptr = prd_to_track_map.
cptr();
221 std::unique_ptr<TRT_TrackSegmentsMaker_ATLxk::EventData>
222 event_data = std::make_unique<TRT_TrackSegmentsMaker_ATLxk::EventData>(trtcontainer.
cptr(), condData.
m_cirsize);
231 std::vector<IdentifierHash>::const_iterator d=vTRT.begin(),de=vTRT.end();
235 const auto *w = trtcontainer->indexFindPtr((*d));
244 int b; be < 0 ? b = be+2 : b = be+1;
246 unsigned int sb = condData.
m_begin[b][l];
247 unsigned int se = condData.
m_end [b][l];
248 unsigned int ad = 1000*b+l;
250 InDet::TRT_DriftCircleCollection::const_iterator
251 c = w->begin(), ce = w->end();
255 if(prd_to_track_map_cptr && prd_to_track_map_cptr->
isUsed(*(*c)))
continue;
260 int ns =
m_trtid->straw((*c)->identify());
262 float Fs = std::atan2(
sc.y(),
sc.x());
if(Fs<0.) Fs+=pi2;
263 event_data->m_circles[n].set((*c),Fs,ad);
267 for(
unsigned int s=sb; s<=se; ++s)
fillHistogramm (Fs,s,*event_data);
272 event_data->m_clusters = n;
274 return std::unique_ptr<InDet::ITRT_TrackSegmentsMaker::IEventData>( event_data.release() );
313 for(
unsigned int n=0; n!=
mc; ++n) {
317 unsigned int sb = condData.
m_begin[b][l];
318 unsigned int se = condData.
m_end [b][l];
322 unsigned char max = 0;
323 unsigned int maxbin = 0;
325 for(
unsigned int s=sb; s<=se; ++s) {
334 std::multimap<unsigned int,unsigned int>::iterator
337 unsigned int nbins = 0 ;
338 unsigned int fbin = 99999999;
339 for(bc = event_data.
m_bincluster.begin(); bc!=bce; ++bc) {
341 if((*bc).first==fbin) ++nbins;
343 if(fbin!=99999999 && nbins>=5) event_data.
m_sizebin.insert(std::make_pair(nbins,fbin));
344 fbin=(*bc).first; nbins = 1;
347 if(fbin!=99999999 && nbins>=5) event_data.
m_sizebin.insert(std::make_pair(nbins,fbin));
355 if (!prd_to_track_map.
isValid()) {
358 prd_to_track_map_cptr = prd_to_track_map.
cptr();
408 std::string fieldmode[9] ={
"NoField" ,
"ConstantField",
"SolenoidalField",
409 "ToroidalField" ,
"Grid3DField" ,
"RealisticField" ,
410 "UndefinedField",
"AthenaField" ,
"?????" };
413 if(mode<0 || mode>8 ) mode = 8;
415 int n = 62-fieldmode[mode].size();
416 std::string s3;
for(
int i=0; i<n; ++i) s3.append(
" "); s3.append(
"|");
419 std::string s4;
for(
int i=0; i<n; ++i) s4.append(
" "); s4.append(
"|");
422 std::string s7;
for(
int i=0; i<n; ++i) s7.append(
" "); s7.append(
"|");
425 out<<
"|----------------------------------------------------------------------"
426 <<
"-------------------|"
428 out<<
"| Tool tracks extension | "<<
m_extensionTool.type()<<s7<<std::endl;
429 out<<
"| Magnetic field mode | "<<fieldmode[mode] <<s3<<std::endl;
430 out<<
"| TRT container | "<<
m_trtname.key().size() <<s4<<std::endl;
431 out<<
"| Min. number straws | "
434 out<<
"| Number neg. bar. layers | "
437 out<<
"| Number pos. bar. layers | "
440 out<<
"| Number neg. end. layers | "
443 out<<
"| Number pos. end. layers | "
446 out<<
"| Number neg. bar. straws | "
449 out<<
"| Number pos. bar. straws | "
452 out<<
"| Number neg. end. straws | "
455 out<<
"| Number pos. end. straws | "
458 out<<
"| Number azimut. channels | "
461 out<<
"| Number moment. channels | "
464 out<<
"| Number histog. channels | "
467 out<<
"| Number cluster links | "
470 out<<
"| Use PRD-to-track assoc.?| "
473 out<<
"| Remove noise ? | "
476 out<<
"|----------------------------------------------------------------------"
477 <<
"-------------------|"
491 out<<
"|----------------------------------------------------------------------"
492 <<
"-------------------|"
494 out<<
"| Number drift circles | "
497 out<<
"| Number local calls | "
498 <<std::setw(12)<<event_data.
m_nlocal
500 out<<
"| Number found segments | "
503 out<<
"| Number save segments | "
506 out<<
"|----------------------------------------------------------------------"
507 <<
"-------------------|"
529 event_data.
m_U.
H4[i ]=0;
531 event_data.
m_U.
H4[i+1]=0;
532 event_data.
m_U.
H4[i+2]=0;
533 event_data.
m_U.
H4[i+3]=0;
534 event_data.
m_U.
H4[i+4]=0;
535 event_data.
m_U.
H4[i+5]=0;
536 event_data.
m_U.
H4[i+6]=0;
537 event_data.
m_U.
H4[i+7]=0;
538 event_data.
m_U.
H4[i+8]=0;
539 event_data.
m_U.
H4[i+9]=0;
581 if(event_data.
m_U.
H[k+i] >
max)
max = event_data.
m_U.
H[maxbin = k+i];
599 std::multimap<const InDet::TRT_DriftCircle*,Trk::TrackSegment*>::const_iterator
602 std::multimap<unsigned int,unsigned int>::iterator
607 for(bc=bcb; bc!=bce; ++bc) {
609 if((*bc).first!=
bin)
break;
614 unsigned int b =
bin-ndzdr*
m_Ts;
615 unsigned int m = b/
m_nPhi;
622 for(bc=bcb; bc!=bce; ++bc) {
624 unsigned int n = (*bc).second;
628 unsigned int s = condData.
m_begin[b][l];
629 unsigned int se = condData.
m_end [b][l];
631 for(; s<= se; ++s) {
if(condData.
m_ndzdr[s]==ndzdr)
break;}
636 Fo =
F; first =
true;
640 if (df >
pi) df-=pi2;
641 else if(df <-
pi) df+=pi2;
645 fm = Fo+fm/float(nfree);
647 if (fm >
pi) fm = fmod(fm+
pi,pi2)-
pi;
648 else if(fm <-
pi) fm = fmod(fm-
pi,pi2)+
pi;
652 double pin = 1./(pT*std::sqrt((1.+condData.
m_dzdr[ndzdr]*condData.
m_dzdr[ndzdr])));
655 auto Tp = PS.createUniqueTrackParameters(
656 0., 0., fm, std::atan2(1., condData.
m_dzdr[ndzdr]), pin, std::nullopt);
668 if(std::sin(T) < 0.9*
m_pTmin*std::abs(iP)) {
delete seg;
return;}
682 std::vector<const Trk::MeasurementBase*>::const_iterator
685 if(prd_to_track_map) {
689 int nu = 0, ntot = 0;
690 for(++s; s!=se; ++s) {
708 if (Xi2 > 6) quality-=9;
709 else if(Xi2 > 5.) quality-=7;
710 else if(Xi2 > 3.) quality-=5;
711 else if(Xi2 > 2.) quality-=3;
712 else if(Xi2 > 1.) quality-=1;
721 for(++s; s!=se; ++s) {
736 std::multimap<int,Trk::TrackSegment*>::reverse_iterator
743 std::vector<const Trk::MeasurementBase*>::const_iterator
744 s =(*qs).second->containedMeasurements().begin(),
745 se =(*qs).second->containedMeasurements().end ();
747 for(++s; s!=se; ++s) {
754 if(nfree >= 7) event_data.
m_segments.push_back((*qs).second);
755 else delete (*qs).second;
769 unsigned int maxb =
bin ;
#define ATH_CHECK
Evaluate an expression and check for errors.
std::vector< Identifier > ID
Handle class for reading from StoreGate.
static const Attributes_t empty
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
std::array< std::vector< std::vector< Used_t > >, 3 > TRT_DetElemUsedMap
const float & phi() const
const TRT_DriftCircle * circle() const
unsigned int buffer() const
unsigned int layer() const
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
std::unique_ptr< InDet::ITRT_TrackExtensionTool::IEventData > m_extEventData
std::list< Trk::TrackSegment * >::iterator m_segiterator
std::multimap< unsigned int, unsigned int > m_bincluster
unsigned char H[227500 *4]
std::multimap< unsigned int, unsigned int > m_sizebin
TRT_DriftCircleLinkN_xk * m_circles
std::list< Trk::TrackSegment * > m_segments
std::multimap< int,Trk::TrackSegment * > m_qualitySegment
std::multimap< const InDet::TRT_DriftCircle *, Trk::TrackSegment * > m_clusterSegment
union InDet::TRT_TrackSegmentsMaker_ATLxk::EventData::@317121305332267356337266061057375304276022267376 m_U
std::multimap< unsignedint, unsignedint >::reverse_iterator m_sizebin_iterator
IntegerProperty m_clustersCut
MsgStream & dumpConditions(MsgStream &out) const
void findLocaly(const EventContext &ctx, unsigned int, const Trk::PRDtoTrackMap *prd_to_track_map, TRT_TrackSegmentsMaker_ATLxk::EventData &event_data, InDet::TRT_DetElementLink_xk::TRT_DetElemUsedMap &used) const
const TRT_TrackSegmentsToolCondData_xk * getConditionsData() const
void eraseHistogramm(TRT_TrackSegmentsMaker_ATLxk::EventData &event_data) const
ToolHandle< ITRT_TrackExtensionTool > m_extensionTool
FloatProperty m_sharedfrac
virtual MsgStream & dump(MsgStream &out) const override
SG::ReadCondHandleKey< InDet::TRT_TrackSegmentsToolCondData_xk > m_condDataKey
SG::ReadHandleKey< InDet::TRT_DriftCircleContainer > m_trtname
void fillHistogramm(float, int, TRT_TrackSegmentsMaker_ATLxk::EventData &event_data) const
virtual Trk::TrackSegment * next(InDet::ITRT_TrackSegmentsMaker::IEventData &event_data) const override
void analyseHistogramm(unsigned char &, unsigned int &, float, int, TRT_TrackSegmentsMaker_ATLxk::EventData &event_data) const
virtual std::unique_ptr< InDet::ITRT_TrackSegmentsMaker::IEventData > newRegion(const EventContext &ctx, const std::vector< IdentifierHash > &) const override
BooleanProperty m_removeNoise
virtual StatusCode finalize() override
StringProperty m_fieldmode
unsigned int localMaximum(unsigned int, TRT_TrackSegmentsMaker_ATLxk::EventData &event_data) const
static MsgStream & dumpEvent(MsgStream &out, InDet::ITRT_TrackSegmentsMaker::IEventData &event_data)
TRT_TrackSegmentsMaker_ATLxk(const std::string &, const std::string &, const IInterface *)
virtual std::unique_ptr< InDet::ITRT_TrackSegmentsMaker::IEventData > newEvent(const EventContext &ctx) const override
Trk::MagneticFieldProperties m_fieldprop
virtual StatusCode initialize() override
virtual ~TRT_TrackSegmentsMaker_ATLxk()
void endEvent(InDet::ITRT_TrackSegmentsMaker::IEventData &event_data) const override
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
static void segmentsPreparation(TRT_TrackSegmentsMaker_ATLxk::EventData &event_data)
virtual void find(const EventContext &ctx, InDet::ITRT_TrackSegmentsMaker::IEventData &event_data, InDet::TRT_DetElementLink_xk::TRT_DetElemUsedMap &used) const override
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
static EventData & getPrivateEventData(InDet::ITRT_TrackSegmentsMaker::IEventData &virt_event_data)
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
double chiSquared() const
returns the of the overall track fit
double get(ParamDefs par) const
Retrieve specified parameter (const version).
magnetic field properties to steer the behavior of the extrapolation
This class is the pure abstract base class for all fittable tracking measurements.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
virtual const Amg::Vector3D & globalPosition() const =0
Interface method to get the global Position.
bool isUsed(const PrepRawData &prd) const
does this PRD belong to at least one track?
Class describing the Line to which the Perigee refers to.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
const FitQuality * fitQuality() const
return the FitQuality object, returns NULL if no FitQuality is defined
const std::vector< const Trk::MeasurementBase * > & containedMeasurements() const
returns the vector of Trk::MeasurementBase objects
unsigned int numberOfMeasurementBases() const
Return the number of contained Trk::MeasurementBase (s)
Class for a generic track segment that holdes polymorphic Trk::MeasurementBase objects,...
holding In fact this class is here in order to allow STL container for all features This class is sho...
Eigen::Matrix< double, 3, 1 > Vector3D
@ FastField
call the fast field access method of the FieldSvc
@ NoField
Field is set to 0., 0., 0.,.
@ FullField
Field is set to be realistic, but within a given Volume.