ATLAS Offline Software
Loading...
Searching...
No Matches
InDetProjHelper.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Header file for class InDetProjHelper //
9// //
10// Description: Helper class for calculating projections //
11// of data to inner detector surfaces. //
12// //
13// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
14// Initial version: February 2008 //
15// //
17
18#ifndef INDETPROJHELPER_H
19#define INDETPROJHELPER_H
20
23
26
27
28#include <vector>
29#include <set>
30
31
32
33
35public:
36
37 //Use one of the following to create an appropriate helper:
41 //(non-zero system pointers to let error messages appear in gui)
42
43 virtual ~InDetProjHelper();
44
45 InDetProjFlags::InDetProjPartsFlags setParts(InDetProjFlags::InDetProjPartsFlags);//returns old value
46 InDetProjFlags::InDetProjPartsFlags parts() const;
47
48 //Clip path to volumes of the enabled detector parts, as given by the parts flag.
49 void clipPath( const std::vector<Amg::Vector3D >& path, Amg::SetVectorVector3D& resulting_subpaths ) const;
50
51 void clipPath( const std::vector<Amg::Vector3D >& path,
52 Amg::SetVectorVector3D& resulting_subpaths_barrelA,
53 Amg::SetVectorVector3D& resulting_subpaths_barrelC,
54 Amg::SetVectorVector3D& resulting_subpaths_endcapA,
55 Amg::SetVectorVector3D& resulting_subpaths_endcapC ) const;
56
57 //Clip path as above, and then project the resulting subpaths to surfaces as given by the current parts flag.
58 void projectPath( const std::vector<Amg::Vector3D >& path, Amg::SetVectorVector3D& resulting_projections ) const;
59 void projectPath( const std::vector<Amg::Vector3D >& path,
60 Amg::SetVectorVector3D& resulting_projections_barrelA,
61 Amg::SetVectorVector3D& resulting_projections_barrelC,
62 Amg::SetVectorVector3D& resulting_projections_endcapA,
63 Amg::SetVectorVector3D& resulting_projections_endcapC ) const;
64
65 //To figure out which parts a given track crosses (this does NOT depend on the current InDetProjPartsFlags setting).
66 enum PartsFlag { NoParts = 0x00, BarrelA = 0x01, BarrelC = 0x02, EndCapA = 0x04, EndCapC = 0x08 };
67 Q_DECLARE_FLAGS(PartsFlags, PartsFlag)
68 PartsFlags touchedParts( const std::vector<Amg::Vector3D >& path ) const;
69
70 //Fixme: Projection of points? Projection of driftcircle (get normal and point? Or just get transform?)
71
73 const double& planeZ,
74 const double& planeRBegin,
75 const double& endcapZBegin,
76 const double& squeezeFactor );
77
78private:
79
80 InDetProjHelper( double surfacethickness,
81 double data_disttosurface_epsilon,
82 double barrel_inner_radius,
83 double barrel_outer_radius,
84 double barrel_posneg_z,
85 double endcap_surface_z,
86 double endcap_surface_length,
87 double endcap_inner_radius,
88 double endcap_outer_radius,
89 double endcap_zasr_innerradius,
90 double endcap_zasr_endcapz_begin,
91 double endcap_zasr_squeezefact,
92 IVP1System* sys );
93
94
95
96 class Imp;
98
99};
100
101Q_DECLARE_OPERATORS_FOR_FLAGS(InDetProjHelper::PartsFlags)
102
103#endif
static InDetProjHelper * createTRTHelper(IVP1System *sys=0)
static InDetProjHelper * createPixelHelper(IVP1System *sys=0)
static void transformECPointToZPlane_specialZtoR(Amg::Vector3D &p, const double &planeZ, const double &planeRBegin, const double &endcapZBegin, const double &squeezeFactor)
InDetProjFlags::InDetProjPartsFlags setParts(InDetProjFlags::InDetProjPartsFlags)
InDetProjFlags::InDetProjPartsFlags parts() const
static InDetProjHelper * createSCTHelper(IVP1System *sys=0)
PartsFlags touchedParts(const std::vector< Amg::Vector3D > &path) const
InDetProjHelper(double surfacethickness, double data_disttosurface_epsilon, double barrel_inner_radius, double barrel_outer_radius, double barrel_posneg_z, double endcap_surface_z, double endcap_surface_length, double endcap_inner_radius, double endcap_outer_radius, double endcap_zasr_innerradius, double endcap_zasr_endcapz_begin, double endcap_zasr_squeezefact, IVP1System *sys)
void clipPath(const std::vector< Amg::Vector3D > &path, Amg::SetVectorVector3D &resulting_subpaths) const
void projectPath(const std::vector< Amg::Vector3D > &path, Amg::SetVectorVector3D &resulting_projections) const
VP1HelperClassBase(IVP1System *sys=0, QString helpername="")
std::set< std::vector< Amg::Vector3D >, VectorVector3DComparer > SetVectorVector3D
Eigen::Matrix< double, 3, 1 > Vector3D