00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013
00014 #ifndef INDETPROJHELPER_H
00015 #define INDETPROJHELPER_H
00016
00017 #include "VP1Base/VP1HelperClassBase.h"
00018 #include "VP1Utils/InDetProjFlags.h"
00019 #include "CLHEP/Geometry/Point3D.h"
00020 #include <vector>
00021 #include <set>
00022
00023 class InDetProjHelper : public VP1HelperClassBase {
00024 public:
00025
00026
00027 static InDetProjHelper * createPixelHelper(IVP1System* sys = 0);
00028 static InDetProjHelper * createSCTHelper(IVP1System* sys = 0);
00029 static InDetProjHelper * createTRTHelper(IVP1System* sys = 0);
00030
00031
00032 virtual ~InDetProjHelper();
00033
00034 InDetProjFlags::InDetProjPartsFlags setParts(InDetProjFlags::InDetProjPartsFlags);
00035 InDetProjFlags::InDetProjPartsFlags parts() const;
00036
00037
00038 void clipPath( const std::vector<HepPoint3D>& path, std::set<std::vector<HepPoint3D> >& resulting_subpaths ) const;
00039 void clipPath( const std::vector<HepPoint3D>& path,
00040 std::set<std::vector<HepPoint3D> >& resulting_subpaths_barrelA,
00041 std::set<std::vector<HepPoint3D> >& resulting_subpaths_barrelC,
00042 std::set<std::vector<HepPoint3D> >& resulting_subpaths_endcapA,
00043 std::set<std::vector<HepPoint3D> >& resulting_subpaths_endcapC ) const;
00044
00045
00046 void projectPath( const std::vector<HepPoint3D>& path, std::set<std::vector<HepPoint3D> >& resulting_projections ) const;
00047 void projectPath( const std::vector<HepPoint3D>& path,
00048 std::set<std::vector<HepPoint3D> >& resulting_projections_barrelA,
00049 std::set<std::vector<HepPoint3D> >& resulting_projections_barrelC,
00050 std::set<std::vector<HepPoint3D> >& resulting_projections_endcapA,
00051 std::set<std::vector<HepPoint3D> >& resulting_projections_endcapC ) const;
00052
00053
00054 enum PartsFlag { NoParts = 0x00, BarrelA = 0x01, BarrelC = 0x02, EndCapA = 0x04, EndCapC = 0x08 };
00055 Q_DECLARE_FLAGS(PartsFlags, PartsFlag)
00056 PartsFlags touchedParts( const std::vector<HepPoint3D>& path ) const;
00057
00058
00059
00060 static void transformECPointToZPlane_specialZtoR(HepPoint3D& p,
00061 const double& planeZ,
00062 const double& planeRBegin,
00063 const double& endcapZBegin,
00064 const double& squeezeFactor );
00065
00066 private:
00067
00068 InDetProjHelper( const double& surfacethickness,
00069 const double& data_disttosurface_epsilon,
00070 const double& barrel_inner_radius,
00071 const double& barrel_outer_radius,
00072 const double& barrel_posneg_z,
00073 const double& endcap_surface_z,
00074 const double& endcap_surface_length,
00075 const double& endcap_inner_radius,
00076 const double& endcap_outer_radius,
00077 const double& endcap_zasr_innerradius,
00078 const double& endcap_zasr_endcapz_begin,
00079 const double& endcap_zasr_squeezefact,
00080 IVP1System* sys );
00081
00082
00083
00084 class Imp;
00085 Imp * d;
00086
00087 };
00088
00089 Q_DECLARE_OPERATORS_FOR_FLAGS(InDetProjHelper::PartsFlags)
00090
00091 #endif