ATLAS Offline Software
Loading...
Searching...
No Matches
PRDTrackSegmentHelper::Imp Class Reference
Collaboration diagram for PRDTrackSegmentHelper::Imp:

Public Member Functions

void addTrackToPRDs (const Trk::Track *, bool outliers)
void removeTrackFromPRDs (const Trk::Track *, bool outliers)
void updateMaterialOfPRDs (const Trk::Track *, bool outliers)
void addSegmentToPRDs (const Trk::Segment *)
void removeSegmentFromPRDs (const Trk::Segment *)
void updateMaterialOfPRDs (const Trk::Segment *)
template<class T>
void removeEntryFromVector (std::vector< T * > &v, T *t)

Static Public Member Functions

static std::vector< const Trk::PrepRawData * > measurementToPRDs (const Trk::MeasurementBase *)

Public Attributes

PRDTrackSegmentHelpertheclass = nullptr
std::map< const Trk::PrepRawData *, QList< PRDHandleBase * > > * prd2handles = nullptr
std::map< const Trk::Track *, const SoMaterial * > tracks2mat
std::map< const Trk::Segment *, const SoMaterial * > segments2mat
std::map< const Trk::PrepRawData *, TracksAndSegmentsprdsOnTracksAndSegments

Detailed Description

Definition at line 29 of file PRDTrackSegmentHelper.cxx.

Member Function Documentation

◆ addSegmentToPRDs()

void PRDTrackSegmentHelper::Imp::addSegmentToPRDs ( const Trk::Segment * seg)

Definition at line 254 of file PRDTrackSegmentHelper.cxx.

255{
256 // if (verbose())
257 // theclass->messageVerbose("addSegmentToPRDs start");
258 if (!seg) {
259 theclass->message("ERROR: Received null segment pointer!");
260 return;
261 }
262 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo;
263 std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> >::const_iterator itHandle, itHandleEnd(prd2handles->end());
264 std::vector<const Trk::MeasurementBase*>::const_iterator
265 it (seg->containedMeasurements().begin()), itE(seg->containedMeasurements().end());
266 const Trk::PrepRawData * prd;
267 for (;it!=itE;++it) {
268 std::vector<const Trk::PrepRawData*> prds = Imp::measurementToPRDs(*it); // need to handle compound measurements too.
269 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
270 for (;itPrd!=itEnd;++itPrd){
271 prd = *itPrd;
272 itInfo = prdsOnTracksAndSegments.find(prd);
273 if (itInfo==prdsOnTracksAndSegments.end()) {
274 prdsOnTracksAndSegments.insert(std::pair<const Trk::PrepRawData*,TracksAndSegments>(prd,
275 TracksAndSegments(std::vector<const Trk::Track*>(),
276 std::vector<const Trk::Track*>(),
277 std::vector< const Trk::Segment* >(1,seg))));
278
279 } else {
280 itInfo->second.segments.push_back(seg);
281 }
282 itHandle = prd2handles->find(prd);
283 if (itHandle!=itHandleEnd) {
284 QList<PRDHandleBase*> handles = itHandle->second;
285 for (PRDHandleBase*handle : handles)
286 if (handle->collHandle()->colourBySegments())
287 handle->updateMaterial();
288 }
289
290 }
291 }
292 // theclass->messageVerbose("addSegmentToPRDs end");
293}
static std::vector< const Trk::PrepRawData * > measurementToPRDs(const Trk::MeasurementBase *)
std::map< const Trk::PrepRawData *, TracksAndSegments > prdsOnTracksAndSegments
PRDTrackSegmentHelper * theclass
std::map< const Trk::PrepRawData *, QList< PRDHandleBase * > > * prd2handles
const std::vector< const Trk::MeasurementBase * > & containedMeasurements() const
returns the vector of Trk::MeasurementBase objects

◆ addTrackToPRDs()

void PRDTrackSegmentHelper::Imp::addTrackToPRDs ( const Trk::Track * trk,
bool outliers )

Definition at line 365 of file PRDTrackSegmentHelper.cxx.

366{
367 // if (verbose())
368 // theclass->messageVerbose("addTrackToPRDs start");
369 if (!trk) {
370 theclass->message("ERROR: Received null track pointer!");
371 return;
372 }
373 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo;
374 std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> >::const_iterator itHandle, itHandleEnd(prd2handles->end());
376 it ( outliers ? trk->outliersOnTrack()->begin() : trk->measurementsOnTrack()->begin() ),
377 itE( outliers ? trk->outliersOnTrack()->end() : trk->measurementsOnTrack()->end() );
378 const Trk::PrepRawData * prd;
379 for (;it!=itE;++it) {
380 std::vector<const Trk::PrepRawData*> prds = Imp::measurementToPRDs(*it); // need to handle compound measurements too.
381 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
382 for (;itPrd!=itEnd;++itPrd){
383 prd = *itPrd;
384 if (prd) {
385 itInfo = prdsOnTracksAndSegments.find(prd);
386 if (itInfo==prdsOnTracksAndSegments.end()) {
387 prdsOnTracksAndSegments.insert(std::pair<const Trk::PrepRawData*,TracksAndSegments>(prd,
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* >())));
391 } else {
392 if (outliers)
393 itInfo->second.tracks_outliers.push_back(trk);
394 else
395 itInfo->second.tracks.push_back(trk);
396 }
397 itHandle = prd2handles->find(prd);
398 if (itHandle!=itHandleEnd) {
399 QList<PRDHandleBase*> handles = itHandle->second;
400 for (PRDHandleBase*handle : handles)
401 if (handle->collHandle()->colourByTracks())
402 handle->updateMaterial();
403 }
404 }
405 }
406 }
407 // if (verbose())
408 // theclass->messageVerbose("addTrackToPRDs end");
409}
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Definition DataVector.h:838
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.

◆ measurementToPRDs()

std::vector< const Trk::PrepRawData * > PRDTrackSegmentHelper::Imp::measurementToPRDs ( const Trk::MeasurementBase * measbase)
inlinestatic

Definition at line 491 of file PRDTrackSegmentHelper.cxx.

492{
493 std::vector<const Trk::PrepRawData *>prds;
494 const Trk::RIO_OnTrack * rio = dynamic_cast<const Trk::RIO_OnTrack *>(measbase);
495 if (rio) prds.push_back( rio->prepRawData() );
496 const Trk::CompetingRIOsOnTrack * crot = dynamic_cast<const Trk::CompetingRIOsOnTrack *>(measbase);
497 if (crot) {
498
499 // for (unsigned int i=0; i< crot->numberOfContainedROTs (); ++i) prds.push_back( crot->rioOnTrack(i) ? crot->rioOnTrack(i)->prepRawData() : 0 );
500 for (unsigned int i=0; i< crot->numberOfContainedROTs (); ++i) {
501 if (crot->rioOnTrack(i).identify().getString() != "") { // FIXME: search for a better way to see if the rioOnTrack is present
502 prds.push_back(crot->rioOnTrack(i).prepRawData());
503 }
504 else {
505 prds.push_back(0);
506 }
507 }
508 }
509 return prds;
510}
std::string getString() const
Provide a string form of the identifier - hexadecimal.
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.
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

◆ removeEntryFromVector()

template<class T>
void PRDTrackSegmentHelper::Imp::removeEntryFromVector ( std::vector< T * > & v,
T * t )

Definition at line 65 of file PRDTrackSegmentHelper.cxx.

66{
67 const unsigned n(v.size());
68 for (unsigned i(0); i<n;++i) {
69 if (v[i]==t) {
70 if (i==n-1) {
71 v.resize(n-1);
72 return;
73 } else {
74 v[i]=v[n-1];
75 v.resize(n-1);
76 return;
77 }
78 }
79 }
80}

◆ removeSegmentFromPRDs()

void PRDTrackSegmentHelper::Imp::removeSegmentFromPRDs ( const Trk::Segment * seg)

Definition at line 296 of file PRDTrackSegmentHelper.cxx.

297{
298 // if (verbose())
299 // theclass->messageVerbose("removeSegmentFromPRDs start");
300 if (!seg) {
301 theclass->message("ERROR: Received null segment pointer!");
302 return;
303 }
304 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo;
305 std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> >::const_iterator itHandle, itHandleEnd(prd2handles->end());
306 std::vector<const Trk::MeasurementBase*>::const_iterator
307 it (seg->containedMeasurements().begin()), itE(seg->containedMeasurements().end());
308 const Trk::PrepRawData * prd;
309 for (;it!=itE;++it) {
310 std::vector<const Trk::PrepRawData*> prds = Imp::measurementToPRDs(*it); // need to handle compound measurements too.
311 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
312 for (;itPrd!=itEnd;++itPrd){
313 prd = *itPrd;
314 itInfo = prdsOnTracksAndSegments.find(prd);
315 if (itInfo!=prdsOnTracksAndSegments.end()) {
316 removeEntryFromVector(itInfo->second.segments,seg);
317 itHandle = prd2handles->find(prd);
318 if (itHandle!=itHandleEnd) {
319 QList<PRDHandleBase*> handles = itHandle->second;
320 for (PRDHandleBase*handle : handles)
321 if (handle->collHandle()->colourBySegments())
322 handle->updateMaterial();
323 }
324 }
325 }
326 }
327
328 // if (verbose())
329 // theclass->messageVerbose("removeSegmentToPRDs end");
330}
void removeEntryFromVector(std::vector< T * > &v, T *t)

◆ removeTrackFromPRDs()

void PRDTrackSegmentHelper::Imp::removeTrackFromPRDs ( const Trk::Track * trk,
bool outliers )

Definition at line 412 of file PRDTrackSegmentHelper.cxx.

413{
414 // if (verbose())
415 // theclass->messageVerbose("removeTrackFromPRDs start");
416 if (!trk) {
417 theclass->message("ERROR: Received null track pointer!");
418 return;
419 }
420 std::map< const Trk::PrepRawData*,TracksAndSegments >::iterator itInfo;
421 std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> >::const_iterator itHandle, itHandleEnd(prd2handles->end());
423 it ( outliers ? trk->outliersOnTrack()->begin() : trk->measurementsOnTrack()->begin() ),
424 itE( outliers ? trk->outliersOnTrack()->end() : trk->measurementsOnTrack()->end() );
425 const Trk::PrepRawData * prd;
426 for (;it!=itE;++it) {
427 std::vector<const Trk::PrepRawData*> prds = Imp::measurementToPRDs(*it); // need to handle compound measurements too.
428 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
429 for (;itPrd!=itEnd;++itPrd){
430 prd = *itPrd;
431 itInfo = prdsOnTracksAndSegments.find(prd);
432 if (itInfo!=prdsOnTracksAndSegments.end()) {
433 removeEntryFromVector((outliers?itInfo->second.tracks_outliers:itInfo->second.tracks),trk);
434 itHandle = prd2handles->find(prd);
435 if (itHandle!=itHandleEnd) {
436 QList<PRDHandleBase*> handles = itHandle->second;
437 for (PRDHandleBase*handle : handles)
438 if (handle->collHandle()->colourByTracks())
439 handle->updateMaterial();
440 }
441 }
442 }
443 }
444
445 // if (verbose())
446 // theclass->messageVerbose("removeTrackToPRDs end");
447}

◆ updateMaterialOfPRDs() [1/2]

void PRDTrackSegmentHelper::Imp::updateMaterialOfPRDs ( const Trk::Segment * seg)

Definition at line 333 of file PRDTrackSegmentHelper.cxx.

334{
335 // if (verbose())
336 // theclass->messageVerbose("updateMaterialOfPRDs(segment) start");
337 if (!seg) {
338 theclass->message("ERROR: Received null segment pointer!");
339 return;
340 }
341 std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> >::const_iterator itHandle, itHandleEnd(prd2handles->end());
342 std::vector<const Trk::MeasurementBase*>::const_iterator
343 it (seg->containedMeasurements().begin()), itE(seg->containedMeasurements().end());
344 const Trk::PrepRawData * prd;
345 for (;it!=itE;++it) {
346 std::vector<const Trk::PrepRawData*> prds = Imp::measurementToPRDs(*it); // need to handle compound measurements too.
347 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
348 for (;itPrd!=itEnd;++itPrd){
349 prd = *itPrd;
350 itHandle = prd2handles->find(prd);
351 if (itHandle!=itHandleEnd) {
352 QList<PRDHandleBase*> handles = itHandle->second;
353 for (PRDHandleBase*handle : handles)
354 if (handle->collHandle()->colourByTracks())
355 handle->updateMaterial();
356 }
357 }
358 }
359
360 // if (verbose())
361 // theclass->messageVerbose("updateMaterialOfPRDs(segment) end");
362}

◆ updateMaterialOfPRDs() [2/2]

void PRDTrackSegmentHelper::Imp::updateMaterialOfPRDs ( const Trk::Track * trk,
bool outliers )

Definition at line 450 of file PRDTrackSegmentHelper.cxx.

451{
452 // if (verbose())
453 // theclass->messageVerbose("updateMaterialOfPRDs(track) start");
454 if (!trk) {
455 theclass->message("ERROR: Received null track pointer!");
456 return;
457 }
458 std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> >::const_iterator itHandle, itHandleEnd(prd2handles->end());
460 it ( outliers ? trk->outliersOnTrack()->begin() : trk->measurementsOnTrack()->begin() ),
461 itE( outliers ? trk->outliersOnTrack()->end() : trk->measurementsOnTrack()->end() );
462 const Trk::PrepRawData * prd;
463 for (;it!=itE;++it) {
464 std::vector<const Trk::PrepRawData*> prds = Imp::measurementToPRDs(*it); // need to handle compound measurements too.
465 std::vector<const Trk::PrepRawData*>::const_iterator itPrd = prds.begin(), itEnd=prds.end();
466 for (;itPrd!=itEnd;++itPrd){
467 prd = *itPrd;
468 itHandle = prd2handles->find(prd);
469 if (itHandle!=itHandleEnd) {
470 QList<PRDHandleBase*> handles = itHandle->second;
471 for (PRDHandleBase*handle : handles)
472 if (handle->collHandle()->colourByTracks())
473 handle->updateMaterial();
474 }
475 }
476 }
477
478 // if (verbose())
479 // theclass->messageVerbose("updateMaterialOfPRDs(track) end");
480}

Member Data Documentation

◆ prd2handles

std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> >* PRDTrackSegmentHelper::Imp::prd2handles = nullptr

Definition at line 32 of file PRDTrackSegmentHelper.cxx.

◆ prdsOnTracksAndSegments

std::map< const Trk::PrepRawData*,TracksAndSegments > PRDTrackSegmentHelper::Imp::prdsOnTracksAndSegments

Definition at line 59 of file PRDTrackSegmentHelper.cxx.

◆ segments2mat

std::map< const Trk::Segment*, const SoMaterial* > PRDTrackSegmentHelper::Imp::segments2mat

Definition at line 35 of file PRDTrackSegmentHelper.cxx.

◆ theclass

PRDTrackSegmentHelper* PRDTrackSegmentHelper::Imp::theclass = nullptr

Definition at line 31 of file PRDTrackSegmentHelper.cxx.

◆ tracks2mat

std::map< const Trk::Track*, const SoMaterial* > PRDTrackSegmentHelper::Imp::tracks2mat

Definition at line 34 of file PRDTrackSegmentHelper.cxx.


The documentation for this class was generated from the following file: