32 std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> >*
prd2handles =
nullptr;
34 std::map< const Trk::Track*, const SoMaterial* >
tracks2mat;
67 const unsigned n(v.size());
68 for (
unsigned i(0); i<n;++i) {
88 m_d->prd2handles = prd2handles;
101 messageVerbose(
"visibleTracksChanged start (old ntracks = "+QString::number(
m_d->tracks2mat.size())
102 +
", new ntracks = "+QString::number(tracks.size())+
")");
104 if (tracks.empty()) {
107 std::map< const Trk::Track*, const SoMaterial* >::iterator it, itE =
m_d->tracks2mat.end();
108 for (it=
m_d->tracks2mat.begin();it!=itE;++it) {
109 m_d->removeTrackFromPRDs(it->first,
false);
110 m_d->removeTrackFromPRDs(it->first,
true);
112 m_d->tracks2mat.clear();
117 if (
m_d->tracks2mat.empty()) {
121 std::vector< std::pair<const Trk::Track*, const SoMaterial*> >
::const_iterator it(tracks.begin()), itE(tracks.end());
122 for (;it!=itE;++it) {
123 m_d->tracks2mat.insert(*it);
124 m_d->addTrackToPRDs(it->first,
false );
125 m_d->addTrackToPRDs(it->first,
true );
132 messageVerbose(
"normal case - neither old, nor new, track lists are empty");
136 std::set<const Trk::Track*> newtracksset;
137 std::vector< std::pair<const Trk::Track*, const SoMaterial*> >
::const_iterator it(tracks.begin()), itE(tracks.end());
139 newtracksset.insert(it->first);
140 std::set<const Trk::Track*>::const_iterator newtrackssetEnd(newtracksset.end());
143 std::map< const Trk::Track*, const SoMaterial* >::iterator it2, it2E =
m_d->tracks2mat.end();
144 for (it2=
m_d->tracks2mat.begin();it2!=it2E;) {
145 if (newtracksset.find(it2->first)==newtrackssetEnd) {
146 m_d->removeTrackFromPRDs(it2->first,
false);
147 m_d->removeTrackFromPRDs(it2->first,
true);
148 m_d->tracks2mat.erase(it2++);
158 it2E=
m_d->tracks2mat.end();
159 for (it=tracks.begin();it!=itE;++it) {
160 it2 =
m_d->tracks2mat.find(it->first);
162 m_d->tracks2mat[it->first] = it->second;
163 m_d->addTrackToPRDs(it->first,
false );
164 m_d->addTrackToPRDs(it->first,
true );
167 if (it->second!=it2->second) {
168 m_d->tracks2mat[it->first] = it->second;
169 m_d->updateMaterialOfPRDs(it->first,
false );
170 m_d->updateMaterialOfPRDs(it->first,
true );
182 messageVerbose(
"visibleSegmentsChanged start (old nsegments = "+QString::number(
m_d->segments2mat.size())
183 +
", new nsegments = "+QString::number(segments.size())+
")");
185 if (segments.empty()) {
188 std::map< const Trk::Segment*, const SoMaterial* >::iterator it, itE =
m_d->segments2mat.end();
189 for (it=
m_d->segments2mat.begin();it!=itE;++it) {
190 m_d->removeSegmentFromPRDs(it->first);
192 m_d->segments2mat.clear();
197 if (
m_d->segments2mat.empty()) {
201 std::vector< std::pair<const Trk::Segment*, const SoMaterial*> >
::const_iterator it(segments.begin()), itE(segments.end());
202 for (;it!=itE;++it) {
203 m_d->segments2mat.insert(*it);
204 m_d->addSegmentToPRDs(it->first );
211 messageVerbose(
"normal case - neither old, nor new, segment lists are empty");
215 std::set<const Trk::Segment*> newsegmentsset;
216 std::vector< std::pair<const Trk::Segment*, const SoMaterial*> >
::const_iterator it(segments.begin()), itE(segments.end());
218 newsegmentsset.insert(it->first);
219 std::set<const Trk::Segment*>::const_iterator newsegmentssetEnd(newsegmentsset.end());
222 std::map< const Trk::Segment*, const SoMaterial* >::iterator it2, it2E =
m_d->segments2mat.end();
223 for (it2=
m_d->segments2mat.begin();it2!=it2E;) {
224 if (newsegmentsset.find(it2->first)==newsegmentssetEnd) {
225 m_d->removeSegmentFromPRDs(it2->first);
226 m_d->segments2mat.erase(it2++);
236 it2E=
m_d->segments2mat.end();
237 for (it=segments.begin();it!=itE;++it) {
238 it2 =
m_d->segments2mat.find(it->first);
240 m_d->segments2mat[it->first] = it->second;
241 m_d->addSegmentToPRDs(it->first);
244 if (it->second!=it2->second) {
245 m_d->segments2mat[it->first] = it->second;
246 m_d->updateMaterialOfPRDs(it->first);
259 theclass->message(
"ERROR: Received null segment pointer!");
262 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo;
264 std::vector<const Trk::MeasurementBase*>::const_iterator
267 for (;it!=itE;++it) {
269 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
270 for (;itPrd!=itEnd;++itPrd){
276 std::vector<const Trk::Track*>(),
277 std::vector< const Trk::Segment* >(1,seg))));
280 itInfo->second.segments.push_back(seg);
283 if (itHandle!=itHandleEnd) {
284 QList<PRDHandleBase*> handles = itHandle->second;
286 if (handle->collHandle()->colourBySegments())
287 handle->updateMaterial();
301 theclass->message(
"ERROR: Received null segment pointer!");
304 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo;
306 std::vector<const Trk::MeasurementBase*>::const_iterator
309 for (;it!=itE;++it) {
311 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
312 for (;itPrd!=itEnd;++itPrd){
318 if (itHandle!=itHandleEnd) {
319 QList<PRDHandleBase*> handles = itHandle->second;
321 if (handle->collHandle()->colourBySegments())
322 handle->updateMaterial();
338 theclass->message(
"ERROR: Received null segment pointer!");
342 std::vector<const Trk::MeasurementBase*>::const_iterator
345 for (;it!=itE;++it) {
347 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
348 for (;itPrd!=itEnd;++itPrd){
351 if (itHandle!=itHandleEnd) {
352 QList<PRDHandleBase*> handles = itHandle->second;
354 if (handle->collHandle()->colourByTracks())
355 handle->updateMaterial();
370 theclass->message(
"ERROR: Received null track pointer!");
373 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo;
379 for (;it!=itE;++it) {
381 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
382 for (;itPrd!=itEnd;++itPrd){
388 TracksAndSegments((outliers?std::vector<const Trk::Track*>():std::vector<const Trk::Track*>(1,trk)),
389 (outliers?std::vector<const Trk::Track*>(1,trk):std::vector<const Trk::Track*>()),
390 std::vector< const Trk::Segment* >())));
393 itInfo->second.tracks_outliers.push_back(trk);
395 itInfo->second.tracks.push_back(trk);
398 if (itHandle!=itHandleEnd) {
399 QList<PRDHandleBase*> handles = itHandle->second;
401 if (handle->collHandle()->colourByTracks())
402 handle->updateMaterial();
417 theclass->message(
"ERROR: Received null track pointer!");
420 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo;
426 for (;it!=itE;++it) {
428 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
429 for (;itPrd!=itEnd;++itPrd){
435 if (itHandle!=itHandleEnd) {
436 QList<PRDHandleBase*> handles = itHandle->second;
438 if (handle->collHandle()->colourByTracks())
439 handle->updateMaterial();
455 theclass->message(
"ERROR: Received null track pointer!");
463 for (;it!=itE;++it) {
465 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
466 for (;itPrd!=itEnd;++itPrd){
469 if (itHandle!=itHandleEnd) {
470 QList<PRDHandleBase*> handles = itHandle->second;
472 if (handle->collHandle()->colourByTracks())
473 handle->updateMaterial();
485 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo =
m_d->prdsOnTracksAndSegments.find(prd);
486 return itInfo ==
m_d->prdsOnTracksAndSegments.end() ? 0 : &(itInfo->second);
493 std::vector<const Trk::PrepRawData *>prds;
514 const std::vector<const Trk::Track*>& to,
515 const std::vector< const Trk::Segment* >& s )
523 std::map< const Trk::Track*, const SoMaterial* >::const_iterator it =
m_d->tracks2mat.find(t);
524 return it ==
m_d->tracks2mat.end() ? 0 :
const_cast<SoMaterial *
>(it->second);
530 std::map< const Trk::Segment*, const SoMaterial* >::const_iterator it =
m_d->segments2mat.find(s);
531 return it ==
m_d->segments2mat.end() ? 0 :
const_cast<SoMaterial *
>(it->second);
An STL vector of pointers that by default owns its pointed-to elements.
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
std::string getString() const
Provide a string form of the identifier - hexadecimal.
void removeSegmentFromPRDs(const Trk::Segment *)
static std::vector< const Trk::PrepRawData * > measurementToPRDs(const Trk::MeasurementBase *)
void addSegmentToPRDs(const Trk::Segment *)
std::map< const Trk::PrepRawData *, TracksAndSegments > prdsOnTracksAndSegments
std::map< const Trk::Track *, const SoMaterial * > tracks2mat
std::map< const Trk::Segment *, const SoMaterial * > segments2mat
void addTrackToPRDs(const Trk::Track *, bool outliers)
PRDTrackSegmentHelper * theclass
void removeEntryFromVector(std::vector< T * > &v, T *t)
void updateMaterialOfPRDs(const Trk::Track *, bool outliers)
std::map< const Trk::PrepRawData *, QList< PRDHandleBase * > > * prd2handles
void removeTrackFromPRDs(const Trk::Track *, bool outliers)
std::vector< const Trk::Segment * > segments
TracksAndSegments(const std::vector< const Trk::Track * > &, const std::vector< const Trk::Track * > &, const std::vector< const Trk::Segment * > &)
std::vector< const Trk::Track * > tracks_outliers
std::vector< const Trk::Track * > tracks
SoMaterial * trackMaterial(const Trk::Track *) const
const TracksAndSegments * tracksAndSegments(const Trk::PrepRawData *)
void visibleSegmentsChanged(const std::vector< std::pair< const Trk::Segment *, const SoMaterial * > > &)
void visibleTracksChanged(const std::vector< std::pair< const Trk::Track *, const SoMaterial * > > &)
virtual ~PRDTrackSegmentHelper()
PRDTrackSegmentHelper(std::map< const Trk::PrepRawData *, QList< PRDHandleBase * > > *prd2handle, IVP1System *sys=0, QObject *parent=0)
SoMaterial * segmentMaterial(const Trk::Segment *) const
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
virtual unsigned int numberOfContainedROTs() const =0
Number of RIO_OnTracks to be contained by this CompetingRIOsOnTrack.
virtual const RIO_OnTrack & rioOnTrack(unsigned int) const =0
returns the RIO_OnTrack (also known as ROT) objects depending on the integer.
This class is the pure abstract base class for all fittable tracking measurements.
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.
Identifier identify() const
return the identifier -extends MeasurementBase
Base class for all TrackSegment implementations, extends the common MeasurementBase.
const std::vector< const Trk::MeasurementBase * > & containedMeasurements() const
returns the vector of Trk::MeasurementBase objects
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
const DataVector< const MeasurementBase > * outliersOnTrack() const
return a pointer to a vector of MeasurementBase, which represent outliers (i.e.
VP1HelperClassBase(IVP1System *sys=0, QString helpername="")
void messageVerbose(const QString &) const