LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar_content::LArGeometryHelper Class Reference

LArGeometryHelper class. More...

#include "LArGeometryHelper.h"

Public Types

typedef std::set< unsigned int > UIntSet
 

Static Public Member Functions

static float MergeTwoPositions (const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const float position1, const float position2)
 Merge two views (U,V) to give a third view (Z). More...
 
static pandora::CartesianVector MergeTwoDirections (const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const pandora::CartesianVector &direction1, const pandora::CartesianVector &direction2)
 Merge two views (U,V) to give a third view (Z). More...
 
static void MergeTwoPositions (const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, pandora::CartesianVector &position3, float &chiSquared)
 Merge 2D positions from two views to give 2D position in third view. More...
 
static void MergeTwoPositions (const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, pandora::CartesianVector &outputU, pandora::CartesianVector &outputV, pandora::CartesianVector &outputW, float &chiSquared)
 Merge 2D positions from two views to give 2D position in third view. More...
 
static void MergeThreePositions (const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const pandora::HitType view3, const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, const pandora::CartesianVector &position3, pandora::CartesianVector &outputU, pandora::CartesianVector &outputV, pandora::CartesianVector &outputW, float &chiSquared)
 Merge 2D positions from three views to give unified 2D positions for each view. More...
 
static void MergeThreePositions (const pandora::Pandora &pandora, const pandora::CartesianVector &positionU, const pandora::CartesianVector &positionV, const pandora::CartesianVector &positionW, pandora::CartesianVector &outputU, pandora::CartesianVector &outputV, pandora::CartesianVector &outputW, float &chiSquared)
 Merge 2D positions from three views to give unified 2D positions for each view. More...
 
static void MergeTwoPositions3D (const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, pandora::CartesianVector &position3D, float &chiSquared)
 Merge 2D positions from two views to give unified 3D position. More...
 
static void MergeThreePositions3D (const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const pandora::HitType view3, const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, const pandora::CartesianVector &position3, pandora::CartesianVector &position3D, float &chiSquared)
 Merge 2D positions from three views to give unified 3D position. More...
 
static pandora::CartesianVector ProjectPosition (const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view)
 Project 3D position into a given 2D view. More...
 
static pandora::CartesianVector ProjectDirection (const pandora::Pandora &pandora, const pandora::CartesianVector &direction3D, const pandora::HitType view)
 Project 3D direction into a given 2D view. More...
 
static float GetWireZPitch (const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
 Return the wire pitch. More...
 
static float GetWirePitch (const pandora::Pandora &pandora, const pandora::HitType view, const float maxWirePitchDiscrepancy=0.01)
 Return the wire pitch. More...
 
static float GetWirePitchRatio (const pandora::Pandora &pandora, const pandora::HitType view)
 Return the ratio of the wire pitch of the specified view to the minimum wire pitch for the detector. More...
 
static pandora::CartesianVector GetWireAxis (const pandora::Pandora &pandora, const pandora::HitType view)
 Return the wire axis (vector perpendicular to the wire direction and drift direction) More...
 
static bool IsInGap (const pandora::Pandora &pandora, const pandora::CartesianVector &testPoint2D, const pandora::HitType hitType, const float gapTolerance=0.f)
 Whether a 2D test point lies in a registered gap with the associated hit type. More...
 
static bool IsInGap3D (const pandora::Pandora &pandora, const pandora::CartesianVector &testPoint3D, const pandora::HitType hitType, const float gapTolerance=0.f)
 Whether a 3D test point lies in a registered gap with the associated hit type. More...
 
static bool IsXSamplingPointInGap (const pandora::Pandora &pandora, const float xSample, const TwoDSlidingFitResult &slidingFitResult, const float gapTolerance=0.f)
 Whether there is a gap in a cluster (described via its sliding fit result) at a specified x sampling position. More...
 
static float CalculateGapDeltaZ (const pandora::Pandora &pandora, const float minZ, const float maxZ, const pandora::HitType hitType)
 Calculate the total distance within a given 2D region that is composed of detector gaps. More...
 
static float GetSigmaUVW (const pandora::Pandora &pandora, const float maxSigmaDiscrepancy=0.01)
 Find the sigmaUVW value for the detector geometry. More...
 
static void GetCommonDaughterVolumes (const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2, UIntSet &intersect)
 Return the set of common daughter volumes between two 2D clusters. More...
 

Detailed Description

LArGeometryHelper class.

Definition at line 33 of file LArGeometryHelper.h.

Member Typedef Documentation

typedef std::set<unsigned int> lar_content::LArGeometryHelper::UIntSet

Definition at line 36 of file LArGeometryHelper.h.

Member Function Documentation

float lar_content::LArGeometryHelper::CalculateGapDeltaZ ( const pandora::Pandora &  pandora,
const float  minZ,
const float  maxZ,
const pandora::HitType  hitType 
)
static

Calculate the total distance within a given 2D region that is composed of detector gaps.

Parameters
pandorathe associated pandora instance
minZthe start position in Z
maxZthe end position in Z
hitTypethe hit type

Definition at line 530 of file LArGeometryHelper.cc.

References f.

Referenced by lar_content::TwoDLinearFitFeatureTool::CalculateVariablesSlidingLinearFit(), lar_content::ThreeDLinearFitFeatureTool::CalculateVariablesSlidingLinearFit(), and lar_content::CrossGapsExtensionAlgorithm::IsAcrossGap().

531 {
532  if (maxZ - minZ < std::numeric_limits<float>::epsilon())
533  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
534 
535  float gapDeltaZ(0.f);
536 
537  for (const DetectorGap *const pDetectorGap : pandora.GetGeometry()->GetDetectorGapList())
538  {
539  const LineGap *const pLineGap = dynamic_cast<const LineGap *>(pDetectorGap);
540 
541  if (!pLineGap)
542  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
543 
544  const LineGapType lineGapType(pLineGap->GetLineGapType());
545 
546  if (!(((TPC_VIEW_U == hitType) && (TPC_WIRE_GAP_VIEW_U == lineGapType)) || ((TPC_VIEW_V == hitType) && (TPC_WIRE_GAP_VIEW_V == lineGapType)) ||
547  ((TPC_VIEW_W == hitType) && (TPC_WIRE_GAP_VIEW_W == lineGapType))))
548  {
549  continue;
550  }
551 
552  if ((pLineGap->GetLineStartZ() > maxZ) || (pLineGap->GetLineEndZ() < minZ))
553  continue;
554 
555  const float gapMinZ(std::max(minZ, pLineGap->GetLineStartZ()));
556  const float gapMaxZ(std::min(maxZ, pLineGap->GetLineEndZ()));
557 
558  if ((gapMaxZ - gapMinZ) > std::numeric_limits<float>::epsilon())
559  gapDeltaZ += (gapMaxZ - gapMinZ);
560  }
561 
562  return gapDeltaZ;
563 }
TFile f
Definition: plotHisto.C:6
void lar_content::LArGeometryHelper::GetCommonDaughterVolumes ( const pandora::Cluster *const  pCluster1,
const pandora::Cluster *const  pCluster2,
UIntSet intersect 
)
static

Return the set of common daughter volumes between two 2D clusters.

Parameters
intersectthe set of shared daughter volumes
pCluster1the first cluster
pCluster2the second cluster

Definition at line 457 of file LArGeometryHelper.cc.

Referenced by lar_content::CosmicRayTrackRecoveryAlgorithm::MatchClusters(), and lar_content::TwoViewTransverseTracksAlgorithm::TwoViewTransverseTracksAlgorithm().

458 {
459  UIntSet daughterVolumeIds1, daughterVolumeIds2;
460 
461  LArClusterHelper::GetDaughterVolumeIDs(pCluster1, daughterVolumeIds1);
462  LArClusterHelper::GetDaughterVolumeIDs(pCluster2, daughterVolumeIds2);
463 
464  std::set_intersection(daughterVolumeIds1.begin(), daughterVolumeIds1.end(), daughterVolumeIds2.begin(), daughterVolumeIds2.end(),
465  std::inserter(intersect, intersect.begin()));
466 }
static void GetDaughterVolumeIDs(const pandora::Cluster *const pCluster, UIntSet &daughterVolumeIds)
Get the set of the daughter volumes that contains the cluster.
std::set< unsigned int > UIntSet
float lar_content::LArGeometryHelper::GetSigmaUVW ( const pandora::Pandora &  pandora,
const float  maxSigmaDiscrepancy = 0.01 
)
static

Find the sigmaUVW value for the detector geometry.

Parameters
pandorathe associated pandora instance
maxSigmaDiscrepancymaximum allowed discrepancy between lar tpc sigmaUVW values

Definition at line 567 of file LArGeometryHelper.cc.

Referenced by lar_content::ThreeDHitCreationAlgorithm::GetChi2WrtFit(), lar_content::ThreeDHitCreationAlgorithm::GetHitMovementChi2(), lar_content::ThreeDHitCreationAlgorithm::RefineHitPositions(), and lar_content::HitCreationBaseTool::~HitCreationBaseTool().

568 {
569  const LArTPCMap &larTPCMap(pandora.GetGeometry()->GetLArTPCMap());
570 
571  if (larTPCMap.empty())
572  {
573  std::cout << "LArGeometryHelper::GetSigmaUVW - LArTPC description not registered with Pandora as required " << std::endl;
574  throw StatusCodeException(STATUS_CODE_NOT_INITIALIZED);
575  }
576 
577  const LArTPC *const pFirstLArTPC(larTPCMap.begin()->second);
578  const float sigmaUVW(pFirstLArTPC->GetSigmaUVW());
579 
580  for (const LArTPCMap::value_type &mapEntry : larTPCMap)
581  {
582  const LArTPC *const pLArTPC(mapEntry.second);
583 
584  if (std::fabs(sigmaUVW - pLArTPC->GetSigmaUVW()) > maxSigmaDiscrepancy)
585  {
586  std::cout << "LArGeometryHelper::GetSigmaUVW - Plugin does not support provided LArTPC configurations " << std::endl;
587  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
588  }
589  }
590 
591  return sigmaUVW;
592 }
CartesianVector lar_content::LArGeometryHelper::GetWireAxis ( const pandora::Pandora &  pandora,
const pandora::HitType  view 
)
static

Return the wire axis (vector perpendicular to the wire direction and drift direction)

Parameters
pandorathe associated pandora instance
viewthe 2D projection

Definition at line 432 of file LArGeometryHelper.cc.

References f.

433 {
434  if (view == TPC_VIEW_U)
435  {
436  return CartesianVector(0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoU(1.f, 0.f),
437  pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoU(0.f, 1.f));
438  }
439 
440  else if (view == TPC_VIEW_V)
441  {
442  return CartesianVector(0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoV(1.f, 0.f),
443  pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoV(0.f, 1.f));
444  }
445 
446  else if (view == TPC_VIEW_W)
447  {
448  return CartesianVector(0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoW(1.f, 0.f),
449  pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoW(0.f, 1.f));
450  }
451 
452  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
453 }
TFile f
Definition: plotHisto.C:6
float lar_content::LArGeometryHelper::GetWirePitch ( const pandora::Pandora &  pandora,
const pandora::HitType  view,
const float  maxWirePitchDiscrepancy = 0.01 
)
static

Return the wire pitch.

Parameters
pandorathe associated pandora instance
viewthe 2D projection
maxWirePitchDiscrepancymaximum allowed discrepancy between lar tpc wire pitch values

Definition at line 376 of file LArGeometryHelper.cc.

Referenced by lar_content::NViewTrackMatchingAlgorithm< T >::AddToSlidingFitCache(), lar_content::ThreeViewShowersAlgorithm::AddToSlidingFitCache(), lar_content::DeltaRayMatchingAlgorithm::AreClustersMatched(), lar_content::ProtoShowerMatchingTool::AreDirectionsConsistent(), lar_content::CosmicRayVertexBuildingAlgorithm::BuildPointingClusterMap(), lar_content::NeutrinoDaughterVerticesAlgorithm::BuildPointingClusterMap(), lar_content::ShowerStartFinderTool::BuildShowerRegion(), lar_content::TrackHitsBaseTool::BuildSlidingFitMap(), lar_content::CosmicRaySplittingAlgorithm::BuildSlidingFitResultMap(), lar_content::TwoDSlidingFitMultiSplitAlgorithm::BuildSlidingFitResultMap(), lar_content::CosmicRayTrackRecoveryAlgorithm::BuildSlidingFitResultMap(), lar_content::VertexBasedPfoRecoveryAlgorithm::BuildSlidingFitResultMap(), lar_content::TwoDSlidingFitSplittingAndSwitchingAlgorithm::BuildSlidingFitResultMap(), lar_content::TwoDSlidingFitSplittingAndSplicingAlgorithm::BuildSlidingFitResultMap(), lar_content::TwoDSlidingFitConsolidationAlgorithm::BuildSlidingLinearFits(), lar_content::ParticleRecoveryAlgorithm::CalculateEffectiveSpan(), lar_content::ShowerStartFinderTool::CharacteriseShowerTopology(), lar_content::ConeClusterMopUpAlgorithm::ClusterMopUp(), lar_content::BoundedClusterMopUpAlgorithm::ClusterMopUp(), lar_content::CutPfoCharacterisationAlgorithm::CutPfoCharacterisationAlgorithm(), lar_content::ShowerSpineFinderTool::FindShowerSpine(), lar_content::ConnectionRegionFeatureTool::Get2DKink(), lar_content::SlidingConePfoMopUpAlgorithm::GetClusterMergeMap(), lar_content::SlidingConeClusterMopUpAlgorithm::GetClusterMergeMap(), lar_content::EventSlicingTool::GetClusterSliceList(), lar_content::NeutrinoHierarchyAlgorithm::GetInitialPfoInfoMap(), lar_content::NViewDeltaRayMatchingAlgorithm< T >::GetNearbyMuonPfos(), lar_content::ThreeViewTrackFragmentsAlgorithm::GetProjectedPositions(), lar_content::NViewDeltaRayMatchingAlgorithm< T >::GetProjectedPositions(), lar_content::ElectronInitialRegionRefinementAlgorithm::GetShowerVertex(), lar_content::MissingTrackSegmentTool::GetSlidingFitResultMap(), lar_content::ShowerRegionFeatureTool::GetViewShowerRegionVariables(), lar_content::TrackRefinementBaseAlgorithm::InitialiseContainers(), lar_content::DeltaRayRemovalTool::IsContaminated(), lar_content::CosmicRayRemovalTool::IsContaminated(), lar_content::TwoViewCosmicRayRemovalTool::IsContaminated(), lar_content::ThreeDHitCreationAlgorithm::IterativeTreatment(), lar_content::CrossGapsAssociationAlgorithm::PopulateClusterAssociationMap(), lar_content::ShowerStartFinderTool::Run(), and lar_content::TwoDSlidingFitSplittingAlgorithm::TwoDSlidingFitSplittingAlgorithm().

377 {
378  if (view != TPC_VIEW_U && view != TPC_VIEW_V && view != TPC_VIEW_W && view != TPC_3D)
379  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
380 
381  if (view == TPC_3D)
382  {
383  const float pitchU{LArGeometryHelper::GetWirePitch(pandora, TPC_VIEW_U, maxWirePitchDiscrepancy)};
384  const float pitchV{LArGeometryHelper::GetWirePitch(pandora, TPC_VIEW_V, maxWirePitchDiscrepancy)};
385  const float pitchW{LArGeometryHelper::GetWirePitch(pandora, TPC_VIEW_W, maxWirePitchDiscrepancy)};
386  return std::max({pitchU, pitchV, pitchW});
387  }
388 
389  const LArTPCMap &larTPCMap(pandora.GetGeometry()->GetLArTPCMap());
390 
391  if (larTPCMap.empty())
392  {
393  std::cout << "LArGeometryHelper::GetWirePitch - LArTPC description not registered with Pandora as required " << std::endl;
394  throw StatusCodeException(STATUS_CODE_NOT_INITIALIZED);
395  }
396 
397  const LArTPC *const pFirstLArTPC(larTPCMap.begin()->second);
398  const float wirePitch(view == TPC_VIEW_U ? pFirstLArTPC->GetWirePitchU()
399  : (view == TPC_VIEW_V ? pFirstLArTPC->GetWirePitchV() : pFirstLArTPC->GetWirePitchW()));
400 
401  for (const LArTPCMap::value_type &mapEntry : larTPCMap)
402  {
403  const LArTPC *const pLArTPC(mapEntry.second);
404  const float alternateWirePitch(
405  view == TPC_VIEW_U ? pLArTPC->GetWirePitchU() : (view == TPC_VIEW_V ? pLArTPC->GetWirePitchV() : pLArTPC->GetWirePitchW()));
406 
407  if (std::fabs(wirePitch - alternateWirePitch) > maxWirePitchDiscrepancy)
408  {
409  std::cout << "LArGeometryHelper::GetWirePitch - LArTPC configuration not supported" << std::endl;
410  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
411  }
412  }
413 
414  return wirePitch;
415 }
static float GetWirePitch(const pandora::Pandora &pandora, const pandora::HitType view, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
float lar_content::LArGeometryHelper::GetWirePitchRatio ( const pandora::Pandora &  pandora,
const pandora::HitType  view 
)
static

Return the ratio of the wire pitch of the specified view to the minimum wire pitch for the detector.

Parameters
pandorathe associated pandora instance
viewthe 2D projection
Returns
The ratio of the specified view's wire pitch to the minimum wire pitch

Definition at line 419 of file LArGeometryHelper.cc.

Referenced by lar_content::TrackClusterCreationAlgorithm::AddFilteredCaloHits(), lar_content::TrackClusterCreationAlgorithm::CreatePrimaryAssociation(), lar_content::TrackClusterCreationAlgorithm::CreateSecondaryAssociation(), lar_content::TransverseAssociationAlgorithm::FillTransverseClusterList(), lar_content::TrackClusterCreationAlgorithm::FilterCaloHits(), lar_content::IsolatedClusterMopUpAlgorithm::GetCaloHitToClusterMap(), lar_content::TransverseExtensionAlgorithm::GetListOfCleanClusters(), lar_content::CrossGapsAssociationAlgorithm::IsAssociated(), lar_content::CrossGapsExtensionAlgorithm::IsAssociated(), lar_content::LongitudinalAssociationAlgorithm::IsExtremalCluster(), lar_content::CrossGapsAssociationAlgorithm::IsNearCluster(), lar_content::TransverseAssociationAlgorithm::IsTransverseAssociated(), and lar_content::TrackConsolidationAlgorithm::TrackConsolidationAlgorithm().

420 {
421  const float pitchU{LArGeometryHelper::GetWirePitch(pandora, TPC_VIEW_U)};
422  const float pitchV{LArGeometryHelper::GetWirePitch(pandora, TPC_VIEW_V)};
423  const float pitchW{LArGeometryHelper::GetWirePitch(pandora, TPC_VIEW_W)};
424  const float pitchMin{std::min({pitchU, pitchV, pitchW})};
425  const float pitchView{LArGeometryHelper::GetWirePitch(pandora, view)};
426 
427  return pitchView / pitchMin;
428 }
static float GetWirePitch(const pandora::Pandora &pandora, const pandora::HitType view, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
float lar_content::LArGeometryHelper::GetWireZPitch ( const pandora::Pandora &  pandora,
const float  maxWirePitchDiscrepancy = 0.01 
)
inlinestatic
bool lar_content::LArGeometryHelper::IsInGap ( const pandora::Pandora &  pandora,
const pandora::CartesianVector &  testPoint2D,
const pandora::HitType  hitType,
const float  gapTolerance = 0.f 
)
static

Whether a 2D test point lies in a registered gap with the associated hit type.

Parameters
pandorathe associated pandora instance
testPointthe test point
hitTypethe hit type
gapTolerancethe gap tolerance
Returns
boolean

Definition at line 470 of file LArGeometryHelper.cc.

Referenced by lar_content::CrossGapsExtensionAlgorithm::BuildPointingClusterList(), lar_content::TracksCrossingGapsTool::CheckXPositionInGap(), lar_content::StitchingCosmicRayMergingTool::CreatePfoMatches(), and lar_content::CrossGapsAssociationAlgorithm::IsAssociated().

471 {
472  // ATTN: input test point MUST be a 2D position vector
473  for (const DetectorGap *const pDetectorGap : pandora.GetGeometry()->GetDetectorGapList())
474  {
475  if (pDetectorGap->IsInGap(testPoint2D, hitType, gapTolerance))
476  return true;
477  }
478 
479  return false;
480 }
bool lar_content::LArGeometryHelper::IsInGap3D ( const pandora::Pandora &  pandora,
const pandora::CartesianVector &  testPoint3D,
const pandora::HitType  hitType,
const float  gapTolerance = 0.f 
)
static

Whether a 3D test point lies in a registered gap with the associated hit type.

Parameters
pandorathe associated pandora instance
testPointthe test point
hitTypethe hit type
gapTolerancethe gap tolerance
Returns
boolean

Definition at line 484 of file LArGeometryHelper.cc.

Referenced by lar_content::VertexSelectionBaseAlgorithm::IsVertexInGap().

485 {
486  const CartesianVector testPoint2D(LArGeometryHelper::ProjectPosition(pandora, testPoint3D, hitType));
487  return LArGeometryHelper::IsInGap(pandora, testPoint2D, hitType, gapTolerance);
488 }
static pandora::CartesianVector ProjectPosition(const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view)
Project 3D position into a given 2D view.
static bool IsInGap(const pandora::Pandora &pandora, const pandora::CartesianVector &testPoint2D, const pandora::HitType hitType, const float gapTolerance=0.f)
Whether a 2D test point lies in a registered gap with the associated hit type.
bool lar_content::LArGeometryHelper::IsXSamplingPointInGap ( const pandora::Pandora &  pandora,
const float  xSample,
const TwoDSlidingFitResult slidingFitResult,
const float  gapTolerance = 0.f 
)
static

Whether there is a gap in a cluster (described via its sliding fit result) at a specified x sampling position.

Parameters
pandorathe associated pandora instance
xSamplethe x sampling position
slidingFitResultthe sliding fit result for a cluster
gapTolerancethe gap tolerance
Returns
boolean

Definition at line 492 of file LArGeometryHelper.cc.

References f, lar_content::TwoDSlidingFitResult::GetCluster(), lar_content::TwoDSlidingFitResult::GetGlobalFitPositionAtX(), lar_content::TwoDSlidingFitResult::GetGlobalMaxLayerDirection(), lar_content::TwoDSlidingFitResult::GetGlobalMaxLayerPosition(), lar_content::TwoDSlidingFitResult::GetGlobalMinLayerDirection(), and lar_content::TwoDSlidingFitResult::GetGlobalMinLayerPosition().

Referenced by lar_content::ParticleRecoveryAlgorithm::CalculateEffectiveSpan(), and lar_content::TracksCrossingGapsTool::CheckXPositionInGap().

493 {
494  const HitType hitType(LArClusterHelper::GetClusterHitType(slidingFitResult.GetCluster()));
495  const CartesianVector minLayerPosition(slidingFitResult.GetGlobalMinLayerPosition());
496  const CartesianVector maxLayerPosition(slidingFitResult.GetGlobalMaxLayerPosition());
497 
498  const bool minLayerIsAtLowX(minLayerPosition.GetX() < maxLayerPosition.GetX());
499  const CartesianVector &lowXCoordinate(minLayerIsAtLowX ? minLayerPosition : maxLayerPosition);
500  const CartesianVector &highXCoordinate(minLayerIsAtLowX ? maxLayerPosition : minLayerPosition);
501 
502  if ((xSample > lowXCoordinate.GetX()) && (xSample < highXCoordinate.GetX()))
503  {
504  CartesianVector slidingFitPosition(0.f, 0.f, 0.f);
505 
506  if (STATUS_CODE_SUCCESS == slidingFitResult.GetGlobalFitPositionAtX(xSample, slidingFitPosition))
507  return (LArGeometryHelper::IsInGap(pandora, slidingFitPosition, hitType, gapTolerance));
508  }
509 
510  const CartesianVector lowXDirection(
511  minLayerIsAtLowX ? slidingFitResult.GetGlobalMinLayerDirection() : slidingFitResult.GetGlobalMaxLayerDirection());
512  const CartesianVector highXDirection(
513  minLayerIsAtLowX ? slidingFitResult.GetGlobalMaxLayerDirection() : slidingFitResult.GetGlobalMinLayerDirection());
514 
515  const bool sampleIsNearerToLowX(std::fabs(xSample - lowXCoordinate.GetX()) < std::fabs(xSample - highXCoordinate.GetX()));
516  const CartesianVector &startPosition(sampleIsNearerToLowX ? lowXCoordinate : highXCoordinate);
517  const CartesianVector &startDirection(sampleIsNearerToLowX ? lowXDirection : highXDirection);
518 
519  if (std::fabs(startDirection.GetX()) < std::numeric_limits<float>::epsilon())
520  throw StatusCodeException(STATUS_CODE_NOT_FOUND);
521 
522  const float pathLength((xSample - startPosition.GetX()) / startDirection.GetX());
523  const CartesianVector samplingPoint(startPosition + startDirection * pathLength);
524 
525  return (LArGeometryHelper::IsInGap(pandora, samplingPoint, hitType, gapTolerance));
526 }
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
static bool IsInGap(const pandora::Pandora &pandora, const pandora::CartesianVector &testPoint2D, const pandora::HitType hitType, const float gapTolerance=0.f)
Whether a 2D test point lies in a registered gap with the associated hit type.
TFile f
Definition: plotHisto.C:6
HitType
Definition: HitType.h:12
static void lar_content::LArGeometryHelper::MergeThreePositions ( const pandora::Pandora &  pandora,
const pandora::HitType  view1,
const pandora::HitType  view2,
const pandora::HitType  view3,
const pandora::CartesianVector &  position1,
const pandora::CartesianVector &  position2,
const pandora::CartesianVector &  position3,
pandora::CartesianVector &  outputU,
pandora::CartesianVector &  outputV,
pandora::CartesianVector &  outputW,
float &  chiSquared 
)
static

Merge 2D positions from three views to give unified 2D positions for each view.

Parameters
pandorathe associated pandora instance
view1the first view
view2the second view
view3the third view
position1the position in the first view
position2the position in the second view
position3the position in the third view
positionUoutput position in the U view
positionVoutput position in the V view
positionWoutput position in the W view
chi-squared

Referenced by lar_content::ThreeViewLongitudinalTracksAlgorithm::ThreeViewLongitudinalTracksAlgorithm().

static void lar_content::LArGeometryHelper::MergeThreePositions ( const pandora::Pandora &  pandora,
const pandora::CartesianVector &  positionU,
const pandora::CartesianVector &  positionV,
const pandora::CartesianVector &  positionW,
pandora::CartesianVector &  outputU,
pandora::CartesianVector &  outputV,
pandora::CartesianVector &  outputW,
float &  chiSquared 
)
static

Merge 2D positions from three views to give unified 2D positions for each view.

Parameters
pandorathe associated pandora instance
positionUinput position in the U view
positionVinput position in the V view
positionWinput position in the W view
positionUoutput position in the U view
positionVoutput position in the V view
positionWoutput position in the W view
chi-squared
void lar_content::LArGeometryHelper::MergeThreePositions3D ( const pandora::Pandora &  pandora,
const pandora::HitType  view1,
const pandora::HitType  view2,
const pandora::HitType  view3,
const pandora::CartesianVector &  position1,
const pandora::CartesianVector &  position2,
const pandora::CartesianVector &  position3,
pandora::CartesianVector &  position3D,
float &  chiSquared 
)
static

Merge 2D positions from three views to give unified 3D position.

Parameters
pandorathe associated pandora instance
view1the first view
view2the second view
view3the third view
position1the position in the first view
position2the position in the second view
position3the position in the third view
position3Doutput position in 3D
chi-squared

Definition at line 311 of file LArGeometryHelper.cc.

References f.

Referenced by lar_content::UndershootTracksTool::IsThreeDKink(), lar_content::OvershootTracksTool::IsThreeDKink(), lar_content::VertexBasedPfoRecoveryAlgorithm::MatchTwoViews(), and lar_content::VertexRefinementAlgorithm::RefineVertices().

313 {
314  CartesianVector positionU(0.f, 0.f, 0.f), positionV(0.f, 0.f, 0.f), positionW(0.f, 0.f, 0.f);
315  LArGeometryHelper::MergeThreePositions(pandora, view1, view2, view3, position1, position2, position3, positionU, positionV, positionW, chiSquared);
316 
317  position3D.SetValues(positionW.GetX(), pandora.GetPlugins()->GetLArTransformationPlugin()->UVtoY(positionU.GetZ(), positionV.GetZ()),
318  pandora.GetPlugins()->GetLArTransformationPlugin()->UVtoZ(positionU.GetZ(), positionV.GetZ()));
319 }
TFile f
Definition: plotHisto.C:6
static void MergeThreePositions(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const pandora::HitType view3, const pandora::CartesianVector &position1, const pandora::CartesianVector &position2, const pandora::CartesianVector &position3, pandora::CartesianVector &outputU, pandora::CartesianVector &outputV, pandora::CartesianVector &outputW, float &chiSquared)
Merge 2D positions from three views to give unified 2D positions for each view.
CartesianVector lar_content::LArGeometryHelper::MergeTwoDirections ( const pandora::Pandora &  pandora,
const pandora::HitType  view1,
const pandora::HitType  view2,
const pandora::CartesianVector &  direction1,
const pandora::CartesianVector &  direction2 
)
static

Merge two views (U,V) to give a third view (Z).

Parameters
pandorathe associated pandora instance
view1the first view
view2the second view
direction1the direction in the first view
direction2the direction in the second view

Definition at line 71 of file LArGeometryHelper.cc.

References f, Z1, and Z2.

Referenced by lar_content::ProtoShowerMatchingTool::AreDirectionsConsistent().

73 {
74  // x components must be consistent
75  if (direction1.GetX() * direction2.GetX() < 0.f)
76  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
77 
78  // scale x components to a common value
79  const float s1((std::fabs(direction1.GetX()) > std::numeric_limits<float>::epsilon()) ? 100.f * std::fabs(direction2.GetX()) : 1.f);
80  const float s2((std::fabs(direction2.GetX()) > std::numeric_limits<float>::epsilon()) ? 100.f * std::fabs(direction1.GetX()) : 1.f);
81 
82  float pX(s1 * direction1.GetX()), pU(0.f), pV(0.f), pW(0.f);
83  HitType newView(HIT_CUSTOM);
84 
85  if ((view1 == TPC_VIEW_U) && (view2 == TPC_VIEW_V))
86  {
87  pU = s1 * direction1.GetZ();
88  pV = s2 * direction2.GetZ();
89  newView = TPC_VIEW_W;
90  }
91 
92  if ((view1 == TPC_VIEW_V) && (view2 == TPC_VIEW_U))
93  {
94  pV = s1 * direction1.GetZ();
95  pU = s2 * direction2.GetZ();
96  newView = TPC_VIEW_W;
97  }
98 
99  if ((view1 == TPC_VIEW_W) && (view2 == TPC_VIEW_U))
100  {
101  pW = s1 * direction1.GetZ();
102  pU = s2 * direction2.GetZ();
103  newView = TPC_VIEW_V;
104  }
105 
106  if ((view1 == TPC_VIEW_U) && (view2 == TPC_VIEW_W))
107  {
108  pU = s1 * direction1.GetZ();
109  pW = s2 * direction2.GetZ();
110  newView = TPC_VIEW_V;
111  }
112 
113  if ((view1 == TPC_VIEW_V) && (view2 == TPC_VIEW_W))
114  {
115  pV = s1 * direction1.GetZ();
116  pW = s2 * direction2.GetZ();
117  newView = TPC_VIEW_U;
118  }
119 
120  if ((view1 == TPC_VIEW_W) && (view2 == TPC_VIEW_V))
121  {
122  pW = s1 * direction1.GetZ();
123  pV = s2 * direction2.GetZ();
124  newView = TPC_VIEW_U;
125  }
126 
127  if (newView == TPC_VIEW_W)
128  return CartesianVector(pX, 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->UVtoW(pU, pV)).GetUnitVector();
129 
130  if (newView == TPC_VIEW_U)
131  return CartesianVector(pX, 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->VWtoU(pV, pW)).GetUnitVector();
132 
133  if (newView == TPC_VIEW_V)
134  return CartesianVector(pX, 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->WUtoV(pW, pU)).GetUnitVector();
135 
136  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
137 }
TFile f
Definition: plotHisto.C:6
HitType
Definition: HitType.h:12
static void lar_content::LArGeometryHelper::MergeTwoPositions ( const pandora::Pandora &  pandora,
const pandora::HitType  view1,
const pandora::HitType  view2,
const pandora::CartesianVector &  position1,
const pandora::CartesianVector &  position2,
pandora::CartesianVector &  position3,
float &  chiSquared 
)
static

Merge 2D positions from two views to give 2D position in third view.

Parameters
pandorathe associated pandora instance
view1the first view
view2the second view
position1the position in the first view
position2the position in the second view
position3output position in the third view
chi-squared
static void lar_content::LArGeometryHelper::MergeTwoPositions ( const pandora::Pandora &  pandora,
const pandora::HitType  view1,
const pandora::HitType  view2,
const pandora::CartesianVector &  position1,
const pandora::CartesianVector &  position2,
pandora::CartesianVector &  outputU,
pandora::CartesianVector &  outputV,
pandora::CartesianVector &  outputW,
float &  chiSquared 
)
static

Merge 2D positions from two views to give 2D position in third view.

Parameters
view1the first view
view2the second view
position1the position in the first view
position2the position in the second view
positionUoutput position in the U view
positionVoutput position in the V view
positionWoutput position in the W view
chi-squared
void lar_content::LArGeometryHelper::MergeTwoPositions3D ( const pandora::Pandora &  pandora,
const pandora::HitType  view1,
const pandora::HitType  view2,
const pandora::CartesianVector &  position1,
const pandora::CartesianVector &  position2,
pandora::CartesianVector &  position3D,
float &  chiSquared 
)
static

Merge 2D positions from two views to give unified 3D position.

Parameters
pandorathe associated pandora instance
view1the first view
view2the second view
position1the position in the first view
position2the position in the second view
position3Doutput position in 3D
chi-squared

Definition at line 299 of file LArGeometryHelper.cc.

References f.

Referenced by lar_content::CandidateVertexCreationAlgorithm::CreateCrossingVertices(), lar_content::CandidateVertexCreationAlgorithm::CreateEndpointVertex(), lar_content::ThreeViewTrackFragmentsAlgorithm::GetProjectedPositions(), lar_content::TwoViewThreeDKinkTool::IsThreeDKink(), lar_content::VertexBasedPfoRecoveryAlgorithm::MatchTwoViews(), lar_content::VertexRefinementAlgorithm::RefineVertices(), lar_content::ThreeViewLongitudinalTracksAlgorithm::ThreeViewLongitudinalTracksAlgorithm(), lar_content::LongitudinalTrackHitsBaseTool::UpdateBestPosition(), and lar_content::HitCreationBaseTool::~HitCreationBaseTool().

301 {
302  CartesianVector positionU(0.f, 0.f, 0.f), positionV(0.f, 0.f, 0.f), positionW(0.f, 0.f, 0.f);
303  LArGeometryHelper::MergeTwoPositions(pandora, view1, view2, position1, position2, positionU, positionV, positionW, chiSquared);
304 
305  position3D.SetValues(positionW.GetX(), pandora.GetPlugins()->GetLArTransformationPlugin()->UVtoY(positionU.GetZ(), positionV.GetZ()),
306  pandora.GetPlugins()->GetLArTransformationPlugin()->UVtoZ(positionU.GetZ(), positionV.GetZ()));
307 }
TFile f
Definition: plotHisto.C:6
static float MergeTwoPositions(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const float position1, const float position2)
Merge two views (U,V) to give a third view (Z).
CartesianVector lar_content::LArGeometryHelper::ProjectDirection ( const pandora::Pandora &  pandora,
const pandora::CartesianVector &  direction3D,
const pandora::HitType  view 
)
static

Project 3D direction into a given 2D view.

Parameters
pandorathe associated pandora instance
direction3Dthe direction in 3D
viewthe 2D projection

Definition at line 348 of file LArGeometryHelper.cc.

349 {
350  if (view == TPC_VIEW_U)
351  {
352  return CartesianVector(
353  direction3D.GetX(), 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoU(direction3D.GetY(), direction3D.GetZ()))
354  .GetUnitVector();
355  }
356 
357  else if (view == TPC_VIEW_V)
358  {
359  return CartesianVector(
360  direction3D.GetX(), 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoV(direction3D.GetY(), direction3D.GetZ()))
361  .GetUnitVector();
362  }
363 
364  else if (view == TPC_VIEW_W)
365  {
366  return CartesianVector(
367  direction3D.GetX(), 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoW(direction3D.GetY(), direction3D.GetZ()))
368  .GetUnitVector();
369  }
370 
371  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
372 }
CartesianVector lar_content::LArGeometryHelper::ProjectPosition ( const pandora::Pandora &  pandora,
const pandora::CartesianVector &  position3D,
const pandora::HitType  view 
)
static

Project 3D position into a given 2D view.

Parameters
pandorathe associated pandora instance
position3Dthe position in 3D
viewthe 2D projection

Definition at line 323 of file LArGeometryHelper.cc.

Referenced by lar_content::ElectronInitialRegionRefinementAlgorithm::BuildViewPathways(), lar_content::ElectronInitialRegionRefinementAlgorithm::BuildViewProtoShowers(), lar_content::SplitShowersTool::CheckClusterVertexRelations(), lar_content::ConeClusterMopUpAlgorithm::ClusterMopUp(), lar_content::NearbyClusterMopUpAlgorithm::ClusterMopUp(), lar_content::RPhiFeatureTool::FillKernelEstimate(), lar_content::VertexSplittingAlgorithm::FindBestSplitPosition(), lar_content::ShowerGrowingAlgorithm::GetAllVertexSeedCandidates(), lar_content::VertexBasedPfoMopUpAlgorithm::GetClusterAssociation(), lar_content::SlidingConeClusterMopUpAlgorithm::GetClusterMergeMap(), lar_content::ShowerGrowingAlgorithm::GetFigureOfMerit(), lar_content::ThreeDHitCreationAlgorithm::GetHitMovementChi2(), lar_content::VertexBasedPfoMopUpAlgorithm::GetInputPfos(), lar_content::EventSlicingTool::GetKDTreeEntries3D(), lar_content::ConnectionRegionFeatureTool::GetLargest2DKinkFromView(), lar_content::ThreeViewTrackFragmentsAlgorithm::GetProjectedPositions(), lar_content::TrainedVertexSelectionAlgorithm::GetSharedFeatures(), lar_content::ElectronInitialRegionRefinementAlgorithm::GetShowerVertex(), lar_content::LongitudinalTrackHitsBaseTool::GetVertexAndEndPositions(), lar_content::CutClusterCharacterisationAlgorithm::GetVertexDistance(), lar_content::AmbiguousRegionFeatureTool::GetViewAmbiguousHitVariables(), lar_content::InitialRegionFeatureTool::GetViewInitialRegionVariables(), lar_content::ShowerRegionFeatureTool::GetViewShowerRegionVariables(), lar_content::ElectronInitialRegionRefinementAlgorithm::IsSpineCoincident(), lar_content::VertexSelectionBaseAlgorithm::IsVertexOnHit(), lar_content::VertexBasedPfoRecoveryAlgorithm::MatchTwoViews(), lar_content::ThreeDChargeFeatureTool::OrderCaloHitsByDistanceToVertex(), lar_content::ElectronInitialRegionRefinementAlgorithm::RefineHitsToAdd(), lar_content::ElectronInitialRegionRefinementAlgorithm::RefineShowerVertex(), lar_content::VertexRefinementAlgorithm::RefineVertices(), lar_content::ShowerSpineFinderTool::Run(), lar_content::PeakDirectionFinderTool::Run(), lar_content::EnergyKickFeatureTool::Run(), lar_content::AsymmetryFeatureBaseTool::Run(), lar_content::VertexBasedPfoRecoveryAlgorithm::SelectVertexClusters(), lar_content::ThreeViewLongitudinalTracksAlgorithm::ThreeViewLongitudinalTracksAlgorithm(), and lar_content::VertexSelectionBaseAlgorithm::VertexHitEnergy().

324 {
325  if (view == TPC_VIEW_U)
326  {
327  return CartesianVector(
328  position3D.GetX(), 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoU(position3D.GetY(), position3D.GetZ()));
329  }
330 
331  else if (view == TPC_VIEW_V)
332  {
333  return CartesianVector(
334  position3D.GetX(), 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoV(position3D.GetY(), position3D.GetZ()));
335  }
336 
337  else if (view == TPC_VIEW_W)
338  {
339  return CartesianVector(
340  position3D.GetX(), 0.f, pandora.GetPlugins()->GetLArTransformationPlugin()->YZtoW(position3D.GetY(), position3D.GetZ()));
341  }
342 
343  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
344 }

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