From a7838ddff0151a7ad6e974d4fe695d0e248fe422 Mon Sep 17 00:00:00 2001 From: Mingrui Zhao <mingrui.zhao@mail.labz0.org> Date: Thu, 17 Sep 2020 21:40:10 +0800 Subject: [PATCH] Correct data type --- Utilities/DataHelper/DataHelper/Navigation.h | 4 +- .../DataHelper/DataHelper/TrackExtended.h | 7 +- .../DataHelper/DataHelper/TrackHitPair.h | 38 +++ .../DataHelper/TrackerHitExtended.h | 8 +- Utilities/DataHelper/src/Navigation.cpp | 8 +- Utilities/DataHelper/src/TrackExtended.cc | 4 +- Utilities/DataHelper/src/TrackHitPair.cc | 34 ++ .../DataHelper/src/TrackerHitExtended.cc | 8 +- .../KalDet/cmake/MacroCheckPackageLibs.cmake | 164 +++++++++ .../cmake/MacroCheckPackageVersion.cmake | 108 ++++++ Utilities/KalDet/cmake/MacroRootDict.cmake | 145 ++++++++ Utilities/KalDet/cmake/MyFindROOT.cmake | 316 ++++++++++++++++++ Utilities/KalDet/kaldet/EXVKalDetector.h | 4 +- Utilities/KalDet/kaldet/ILDConeMeasLayer.h | 2 +- Utilities/KalDet/kaldet/ILDCylinderHit.h | 2 +- .../KalDet/kaldet/ILDCylinderMeasLayer.h | 2 +- Utilities/KalDet/kaldet/ILDDiscMeasLayer.h | 2 +- .../kaldet/ILDParallelPlanarStripMeasLayer.h | 2 +- Utilities/KalDet/kaldet/ILDPlanarHit.h | 2 +- Utilities/KalDet/kaldet/ILDPlanarMeasLayer.h | 2 +- Utilities/KalDet/kaldet/ILDPlanarStripHit.h | 2 +- .../KalDet/kaldet/ILDPolygonBarrelMeasLayer.h | 2 +- .../KalDet/kaldet/ILDRotatedTrapMeaslayer.h | 2 +- .../KalDet/kaldet/ILDSegmentedDiscMeasLayer.h | 2 +- .../kaldet/ILDSegmentedDiscStripMeasLayer.h | 2 +- Utilities/KalDet/kaldet/ILDVMeasLayer.h | 3 +- Utilities/KalDet/kaldet/ILDVTrackHit.h | 6 +- Utilities/KalDet/src/gen/EXEventGen.cxx | 4 +- .../KalDet/src/ild/common/ILDConeMeasLayer.h | 2 +- .../KalDet/src/ild/common/ILDCylinderHit.h | 2 +- .../src/ild/common/ILDCylinderMeasLayer.cc | 18 +- .../src/ild/common/ILDCylinderMeasLayer.h | 2 +- .../KalDet/src/ild/common/ILDDiscMeasLayer.cc | 24 +- .../KalDet/src/ild/common/ILDDiscMeasLayer.h | 2 +- .../common/ILDParallelPlanarStripMeasLayer.cc | 20 +- .../common/ILDParallelPlanarStripMeasLayer.h | 2 +- .../KalDet/src/ild/common/ILDPlanarHit.h | 2 +- .../src/ild/common/ILDPlanarMeasLayer.cc | 24 +- .../src/ild/common/ILDPlanarMeasLayer.h | 2 +- .../KalDet/src/ild/common/ILDPlanarStripHit.h | 2 +- .../ild/common/ILDPolygonBarrelMeasLayer.cc | 4 +- .../ild/common/ILDPolygonBarrelMeasLayer.h | 2 +- .../src/ild/common/ILDRotatedTrapMeaslayer.cc | 10 +- .../src/ild/common/ILDRotatedTrapMeaslayer.h | 2 +- .../ild/common/ILDSegmentedDiscMeasLayer.cc | 126 +++---- .../ild/common/ILDSegmentedDiscMeasLayer.h | 2 +- .../common/ILDSegmentedDiscStripMeasLayer.cc | 136 ++++---- .../common/ILDSegmentedDiscStripMeasLayer.h | 2 +- .../KalDet/src/ild/common/ILDVMeasLayer.h | 3 +- .../KalDet/src/ild/common/ILDVTrackHit.h | 6 +- .../lctpc/gearTPC/GearTPCCylinderMeasLayer.h | 2 +- .../KalTest/cmake/MacroCheckPackageLibs.cmake | 164 +++++++++ .../cmake/MacroCheckPackageVersion.cmake | 108 ++++++ Utilities/KalTest/cmake/MacroRootDict.cmake | 145 ++++++++ Utilities/KalTest/cmake/MyFindROOT.cmake | 316 ++++++++++++++++++ Utilities/KiTrack/Tools/KiTrackMarlinTools.h | 2 +- Utilities/KiTrack/src/Tools/FTDHelixFitter.cc | 2 +- Utilities/KiTrack/src/Tools/Fitter.cc | 94 +++--- .../KiTrack/src/Tools/KiTrackMarlinTools.cc | 16 +- .../KiTrack/src/Tools/VXDHelixFitter.cc.bak | 12 +- Utilities/KiTrack/src/Tools/VXDHelixFitter.h | 4 +- 61 files changed, 1850 insertions(+), 295 deletions(-) create mode 100755 Utilities/DataHelper/DataHelper/TrackHitPair.h create mode 100755 Utilities/DataHelper/src/TrackHitPair.cc create mode 100644 Utilities/KalDet/cmake/MacroCheckPackageLibs.cmake create mode 100644 Utilities/KalDet/cmake/MacroCheckPackageVersion.cmake create mode 100644 Utilities/KalDet/cmake/MacroRootDict.cmake create mode 100644 Utilities/KalDet/cmake/MyFindROOT.cmake create mode 100644 Utilities/KalTest/cmake/MacroCheckPackageLibs.cmake create mode 100644 Utilities/KalTest/cmake/MacroCheckPackageVersion.cmake create mode 100644 Utilities/KalTest/cmake/MacroRootDict.cmake create mode 100644 Utilities/KalTest/cmake/MyFindROOT.cmake diff --git a/Utilities/DataHelper/DataHelper/Navigation.h b/Utilities/DataHelper/DataHelper/Navigation.h index 238dd30e..a4870ba9 100644 --- a/Utilities/DataHelper/DataHelper/Navigation.h +++ b/Utilities/DataHelper/DataHelper/Navigation.h @@ -19,7 +19,7 @@ class Navigation{ void AddTrackerHitCollection(const edm4hep::TrackerHitCollection* col){m_hitColVec.push_back(col);}; void AddTrackerAssociationCollection(const edm4hep::MCRecoTrackerAssociationCollection* col){m_assColVec.push_back(col);}; - edm4hep::TrackerHit* GetTrackerHit(const edm4hep::ObjectID& id, bool delete_by_caller=true); + edm4hep::ConstTrackerHit GetTrackerHit(const edm4hep::ObjectID& id, bool delete_by_caller=true); std::vector<edm4hep::ConstSimTrackerHit> GetRelatedTrackerHit(const edm4hep::ObjectID& id); std::vector<edm4hep::ConstSimTrackerHit> GetRelatedTrackerHit(const edm4hep::TrackerHit& hit); @@ -29,6 +29,6 @@ class Navigation{ //DataHandle<edm4hep::MCRecoTrackerAssociationCollection> _inHitAssColHdl{"FTDStripTrackerHitsAssociation", Gaudi::DataHandle::Reader, this}; std::vector<const edm4hep::TrackerHitCollection*> m_hitColVec; std::vector<const edm4hep::MCRecoTrackerAssociationCollection*> m_assColVec; - std::map<int, edm4hep::TrackerHit*> m_trkHits; + std::map<int, edm4hep::ConstTrackerHit> m_trkHits; }; #endif diff --git a/Utilities/DataHelper/DataHelper/TrackExtended.h b/Utilities/DataHelper/DataHelper/TrackExtended.h index 61ff5923..687db47d 100644 --- a/Utilities/DataHelper/DataHelper/TrackExtended.h +++ b/Utilities/DataHelper/DataHelper/TrackExtended.h @@ -4,6 +4,7 @@ //#include "lcio.h" //#include "EVENT/LCIO.h" #include "edm4hep/Track.h" +#include "edm4hep/TrackConst.h" #include <vector> //#include "ClusterExtended.h" //#include "TrackerHitExtended.h" @@ -32,10 +33,10 @@ class TrackExtended { TrackExtended( ); TrackExtended( TrackerHitExtended * trackerhit ); - TrackExtended( edm4hep::Track * track ); + TrackExtended( edm4hep::ConstTrack track ); ~TrackExtended(); - edm4hep::Track * getTrack(); + edm4hep::ConstTrack getTrack(); const float * getSeedDirection(); const float * getSeedPosition(); ClusterExtendedVec & getClusterVec(); @@ -95,7 +96,7 @@ class TrackExtended { ClusterExtended *_superCluster; ClusterExtendedVec _clusterVec; GroupTracks * _group; - edm4hep::Track * _track; + edm4hep::ConstTrack _track; float _seedDirection[3]; float _seedPosition[3]; TrackerHitExtendedVec _trackerHitVector; diff --git a/Utilities/DataHelper/DataHelper/TrackHitPair.h b/Utilities/DataHelper/DataHelper/TrackHitPair.h new file mode 100755 index 00000000..f9e8b794 --- /dev/null +++ b/Utilities/DataHelper/DataHelper/TrackHitPair.h @@ -0,0 +1,38 @@ +#ifndef TRACKHITPAIR_H +#define TRACKHITPAIR_H 1 + +#include "TrackExtended.h" +#include "TrackerHitExtended.h" +#include <vector> + +class TrackHitPair; + +typedef std::vector<TrackHitPair*> TrackHitPairVec; +/** + * Class implementing association of TrackExtended and TrackerHitExtended objects. <br> + * @author A. Raspereza (MPI-Munich)<br> + */ + +class TrackHitPair { + + public: + + TrackHitPair(TrackExtended * trkExt, TrackerHitExtended * hitExt, float distance); + ~TrackHitPair(); + void setTrackExtended(TrackExtended * trkExt); + void setTrackerHitExtended(TrackerHitExtended * hitExt); + void setDistance(float distance); + TrackExtended * getTrackExtended(); + TrackerHitExtended * getTrackerHitExtended(); + float getDistance(); + + + private: + TrackExtended * _trackExtended; + TrackerHitExtended * _trackerHitExtended; + float _distance; + + +}; + +#endif diff --git a/Utilities/DataHelper/DataHelper/TrackerHitExtended.h b/Utilities/DataHelper/DataHelper/TrackerHitExtended.h index d625679e..1962d59e 100644 --- a/Utilities/DataHelper/DataHelper/TrackerHitExtended.h +++ b/Utilities/DataHelper/DataHelper/TrackerHitExtended.h @@ -24,14 +24,14 @@ class TrackerHitExtended { public: - TrackerHitExtended(const edm4hep::TrackerHit& trackerhit); + TrackerHitExtended(const edm4hep::ConstTrackerHit trackerhit); ~TrackerHitExtended(); void setTrackExtended(TrackExtended * trackAR); void addTrackExtended(TrackExtended * trackAR); void setTrackerHitTo(TrackerHitExtended * hitTo); void setTrackerHitFrom(TrackerHitExtended * hitFrom); void setGenericDistance(float genericDistance); - //void setTrackerHit(edm4hep::TrackerHit* hit); + //void setTrackerHit(edm4hep::ConstTrackerHit hit); void setYresTo(float yresTo); void setYresFrom(float yresFrom); void setDirVec(float * dirVec); @@ -42,7 +42,7 @@ class TrackerHitExtended { void setDet(int idet); void setUsedInFit(bool usedInFit); - edm4hep::TrackerHit* getTrackerHit(); + edm4hep::ConstTrackerHit getTrackerHit(); TrackExtended * getTrackExtended(); TrackExtendedVec & getTrackExtendedVec(); TrackerHitExtended * getTrackerHitFrom(); @@ -59,7 +59,7 @@ class TrackerHitExtended { private: - edm4hep::TrackerHit _trackerHit; + edm4hep::ConstTrackerHit _trackerHit; TrackExtended * _trackAR; TrackerHitExtended * _hitTo; TrackerHitExtended * _hitFrom; diff --git a/Utilities/DataHelper/src/Navigation.cpp b/Utilities/DataHelper/src/Navigation.cpp index 4c220906..f31eadbd 100644 --- a/Utilities/DataHelper/src/Navigation.cpp +++ b/Utilities/DataHelper/src/Navigation.cpp @@ -19,13 +19,13 @@ Navigation::~Navigation(){ void Navigation::Initialize(){ m_hitColVec.clear(); m_assColVec.clear(); - for(std::map<int, edm4hep::TrackerHit*>::iterator it=m_trkHits.begin();it!=m_trkHits.end();it++){ - delete it->second; + for(std::map<int, edm4hep::ConstTrackerHit>::iterator it=m_trkHits.begin();it!=m_trkHits.end();it++){ + // delete it->second; } m_trkHits.clear(); } -edm4hep::TrackerHit* Navigation::GetTrackerHit(const edm4hep::ObjectID& obj_id, bool delete_by_caller){ +edm4hep::ConstTrackerHit Navigation::GetTrackerHit(const edm4hep::ObjectID& obj_id, bool delete_by_caller){ int id = obj_id.collectionID * 10000000 + obj_id.index; if(!delete_by_caller){ if(m_trkHits.find(id)!=m_trkHits.end()) return m_trkHits[id]; @@ -47,7 +47,7 @@ edm4hep::TrackerHit* Navigation::GetTrackerHit(const edm4hep::ObjectID& obj_id, edm4hep::ObjectID this_id = hit.getObjectID(); if(this_id.collectionID!=obj_id.collectionID)break; else if(this_id.index==obj_id.index){ - edm4hep::TrackerHit* hit_copy = new edm4hep::TrackerHit(hit); + edm4hep::ConstTrackerHit hit_copy = edm4hep::ConstTrackerHit(hit); if(!delete_by_caller) m_trkHits[id] = hit_copy; return hit_copy;//&(m_trkHits[id]); } diff --git a/Utilities/DataHelper/src/TrackExtended.cc b/Utilities/DataHelper/src/TrackExtended.cc index bd5444d7..2c2d1412 100644 --- a/Utilities/DataHelper/src/TrackExtended.cc +++ b/Utilities/DataHelper/src/TrackExtended.cc @@ -11,7 +11,7 @@ TrackExtended::TrackExtended( ) { _group = NULL; } -TrackExtended::TrackExtended( Track * track) { +TrackExtended::TrackExtended(ConstTrack track) { _track = track; _superCluster = NULL; _trackerHitVector.clear(); @@ -32,7 +32,7 @@ TrackExtended::TrackExtended( TrackerHitExtended * trackerhit) { TrackExtended::~TrackExtended() {} -Track * TrackExtended::getTrack() { +ConstTrack TrackExtended::getTrack() { return _track; } diff --git a/Utilities/DataHelper/src/TrackHitPair.cc b/Utilities/DataHelper/src/TrackHitPair.cc new file mode 100755 index 00000000..c9017241 --- /dev/null +++ b/Utilities/DataHelper/src/TrackHitPair.cc @@ -0,0 +1,34 @@ +#include "DataHelper/TrackHitPair.h" + +TrackHitPair::TrackHitPair(TrackExtended * trkExt, TrackerHitExtended * hitExt, float distance) { + _trackExtended = trkExt; + _trackerHitExtended = hitExt; + _distance = distance; +} +TrackHitPair::~TrackHitPair() { + +} + +void TrackHitPair::setTrackExtended(TrackExtended * trkExt) { + _trackExtended = trkExt; +} + +void TrackHitPair::setTrackerHitExtended(TrackerHitExtended * hitExt) { + _trackerHitExtended = hitExt; +} + +void TrackHitPair::setDistance(float distance) { + _distance = distance; +} + +TrackExtended * TrackHitPair::getTrackExtended() { + return _trackExtended; +} + +TrackerHitExtended * TrackHitPair::getTrackerHitExtended() { + return _trackerHitExtended; +} + +float TrackHitPair::getDistance() { + return _distance; +} diff --git a/Utilities/DataHelper/src/TrackerHitExtended.cc b/Utilities/DataHelper/src/TrackerHitExtended.cc index d2169bf3..394ab2cf 100644 --- a/Utilities/DataHelper/src/TrackerHitExtended.cc +++ b/Utilities/DataHelper/src/TrackerHitExtended.cc @@ -1,7 +1,7 @@ #include "DataHelper/TrackExtended.h" #include "DataHelper/TrackerHitExtended.h" -TrackerHitExtended::TrackerHitExtended(const edm4hep::TrackerHit& trackerhit): +TrackerHitExtended::TrackerHitExtended(const edm4hep::ConstTrackerHit trackerhit): _trackerHit(trackerhit){ _trackAR = NULL; _trackVecAR.clear(); @@ -41,7 +41,7 @@ void TrackerHitExtended::setGenericDistance(float genericDistance) { _genericDistance = genericDistance; } -//void TrackerHitExtended::setTrackerHit(edm4hep::TrackerHit * hit) { +//void TrackerHitExtended::setTrackerHit(edm4hep::ConstTrackerHit hit) { // _trackerHit = hit; //} @@ -67,8 +67,8 @@ void TrackerHitExtended::setDet(int idet) { _idet = idet; } -edm4hep::TrackerHit * TrackerHitExtended::getTrackerHit() { - return &_trackerHit; +edm4hep::ConstTrackerHit TrackerHitExtended::getTrackerHit() { + return _trackerHit; } TrackExtended * TrackerHitExtended::getTrackExtended() { diff --git a/Utilities/KalDet/cmake/MacroCheckPackageLibs.cmake b/Utilities/KalDet/cmake/MacroCheckPackageLibs.cmake new file mode 100644 index 00000000..c4451b3e --- /dev/null +++ b/Utilities/KalDet/cmake/MacroCheckPackageLibs.cmake @@ -0,0 +1,164 @@ +############################################################################## +# macro for checkin package libraries in ${PKG_ROOT}/lib +# +# +# macro usage: +# CHECK_PACKAGE_LIBS( PACKAGE_NAME stdlib1 stdlib2 ... stdlibn ) +# only standard libraries should be passed as arguments to the macro +# component libraries are set by cmake in PKG_FIND_COMPONENTS (when +# calling FIND_PACKAGE with COMPONENTS argument) or through the +# variable PKG_USE_COMPONENTS +# +# +# required variables: +# PKG_ROOT : path to PKG root directory +# +# +# returns following variables: +# PKG_LIBRARY_DIRS : list of paths to be used with LINK_DIRECTORIES +# PGK_LIBRARIES : list of STANDARD libraries (NOT including COMPONENTS) +# PKG_COMPONENT_LIBRARIES : list of COMPONENT libraries +# PKG_${COMPONENT}_FOUND : set to TRUE or FALSE for each library +# PKG_${COMPONENT}_LIBRARY : path to each individual library +# +# +# PKG_LIBRARIES and PKG_LIBRARY_DIRS will be empty if any of the standard +# libraries is missing +# +# @author Jan Engels, Desy +############################################################################## + + +SET( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE ) + +MACRO( CHECK_PACKAGE_LIBS _pkgname ) + + SET( _std_lib_missing FALSE ) + SET( _ext_lib_missing FALSE ) + + SET( _std_libnames ${ARGN} ) + SET( _ext_libnames ${${_pkgname}_FIND_COMPONENTS} ${${_pkgname}_USE_COMPONENTS} ) + + IF( _ext_libnames ) + SEPARATE_ARGUMENTS( _ext_libnames ) + LIST( REMOVE_DUPLICATES _ext_libnames ) + ENDIF() + + IF( NOT ${_pkgname}_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ${_pkgname}_LIBRARIES: ${_std_libnames}" ) + IF( _ext_libnames ) + MESSAGE( STATUS "Check for ${_pkgname}_COMPONENT_LIBRARIES: ${_ext_libnames}" ) + ENDIF() + ENDIF() + + SET( ${_pkgname}_LIBRARY_DIRS ) + MARK_AS_ADVANCED( ${_pkgname}_LIBRARY_DIRS ) + + SET( ${_pkgname}_LIBRARIES ) + MARK_AS_ADVANCED( ${_pkgname}_LIBRARIES ) + + SET( ${_pkgname}_COMPONENT_LIBRARIES ) + MARK_AS_ADVANCED( ${_pkgname}_COMPONENT_LIBRARIES ) + + SET( ${_pkgname}_COMPONENT_VARIABLES ) + MARK_AS_ADVANCED( ${_pkgname}_COMPONENT_VARIABLES ) + + FOREACH( _libname ${_std_libnames} ${_ext_libnames} ) + + # flag to check if it is a standard or a component library + LIST( FIND _std_libnames "${_libname}" _aux ) + IF( ${_aux} LESS 0 ) + SET( _is_std_lib FALSE ) + ELSE() + SET( _is_std_lib TRUE ) + ENDIF() + + # libname in upper case + STRING( TOUPPER ${_libname} _ulibname ) + + SET( ${_pkgname}_${_ulibname}_LIBRARY ${_pkgname}_${_ulibname}_LIBRARY-NOTFOUND ) + MARK_AS_ADVANCED( ${_pkgname}_${_ulibname}_LIBRARY ) + + # WARNING: using PATH_SUFFIXES may cause problems when using variable CMAKE_FIND_ROOT_PATH + # this problem does not occur if expanding PATHS + # look in FindMySQL.cmake for more info + #FIND_LIBRARY( ${_pkgname}_${_ulibname}_LIBRARY NAMES ${_libname} PATHS + # ${${_pkgname}_ROOT} ${${_pkgname}_DIR} ${${_pkgname}_LIB_SEARCH_PATH} + # PATH_SUFFIXES lib64 lib + # NO_DEFAULT_PATH + #) + + FIND_LIBRARY( ${_pkgname}_${_ulibname}_LIBRARY NAMES ${_libname} PATHS + ${${_pkgname}_ROOT}/lib64 ${${_pkgname}_ROOT}/lib + ${${_pkgname}_DIR}/lib64 ${${_pkgname}_DIR}/lib + ${${_pkgname}_LIB_SEARCH_PATH} ${${_pkgname}_LIB_SEARCH_PATH}/lib64 ${${_pkgname}_LIB_SEARCH_PATH}/lib + NO_DEFAULT_PATH + ) + + IF( NOT ${_pkgname}_DIR ) + FIND_LIBRARY( ${_pkgname}_${_ulibname}_LIBRARY NAMES ${_libname} ) + ENDIF() + + IF( ${_pkgname}_FIND_REQUIRED ) + LIST( APPEND ${_pkgname}_COMPONENT_VARIABLES ${_pkgname}_${_ulibname}_LIBRARY ) + ENDIF() + + IF( ${_pkgname}_${_ulibname}_LIBRARY ) # if library found + + SET( ${_pkgname}_${_ulibname}_FOUND TRUE ) + + # split libraries in PKG_LIBRARIES and PKG_COMPONENT_LIBRARIES + IF( _is_std_lib ) + LIST( APPEND ${_pkgname}_LIBRARIES ${${_pkgname}_${_ulibname}_LIBRARY} ) + ELSE() + LIST( APPEND ${_pkgname}_COMPONENT_LIBRARIES ${${_pkgname}_${_ulibname}_LIBRARY} ) + ENDIF() + + GET_FILENAME_COMPONENT( _aux ${${_pkgname}_${_ulibname}_LIBRARY} PATH ) + LIST( APPEND ${_pkgname}_LIBRARY_DIRS ${_aux} ) + + IF( NOT ${_pkgname}_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ${_pkgname}_${_ulibname}_LIBRARY: ${${_pkgname}_${_ulibname}_LIBRARY} -- ok" ) + ENDIF() + + ELSE() # library not found + + SET( ${_pkgname}_${_ulibname}_FOUND FALSE ) + + IF( _is_std_lib ) + SET( _std_lib_missing TRUE ) + ELSE() + SET( _ext_lib_missing TRUE ) + ENDIF() + + IF( NOT ${_pkgname}_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ${_pkgname}_${_ulibname}_LIBRARY: ${_libname} -- failed" ) + ENDIF() + + ENDIF() + + ENDFOREACH() + + # clear PKG_LIBRARIES if standard library is missing + IF( _std_lib_missing ) + SET( ${_pkgname}_LIBRARIES ) + ENDIF() + + # clear PKG_COMPONENT_LIBRARIES if a component library is missing and + # FIND_PACKAGE called with REQUIRED argument + IF( _ext_lib_missing AND ${_pkgname}_FIND_REQUIRED ) + SET( ${_pkgname}_COMPONENT_LIBRARIES ) + ENDIF() + + # remove duplicate paths in PKG_LIBRARY_DIRS + IF( ${_pkgname}_LIBRARY_DIRS ) + LIST( REMOVE_DUPLICATES ${_pkgname}_LIBRARY_DIRS ) + ENDIF() + + # debug + #MESSAGE( STATUS "${_pkgname}_LIBRARIES: ${${_pkgname}_LIBRARIES}" ) + #MESSAGE( STATUS "${_pkgname}_COMPONENT_LIBRARIES: ${${_pkgname}_COMPONENT_LIBRARIES}" ) + #MESSAGE( STATUS "${_pkgname}_LIBRARY_DIRS: ${${_pkgname}_LIBRARY_DIRS}" ) + +ENDMACRO( CHECK_PACKAGE_LIBS _pkgname ) + diff --git a/Utilities/KalDet/cmake/MacroCheckPackageVersion.cmake b/Utilities/KalDet/cmake/MacroCheckPackageVersion.cmake new file mode 100644 index 00000000..e3ec75d9 --- /dev/null +++ b/Utilities/KalDet/cmake/MacroCheckPackageVersion.cmake @@ -0,0 +1,108 @@ +############################################################################## +# macro for checking a package version +# +# this macro should be called from your PKGVersion.cmake or from a +# FindPKG.cmake module with the following arguments: +# _pkgname : The package name +# _iversion : The installed version of the package +# +# +# the following conventions are used: +# +# if FIND_PACKAGE is called with EXACT argument than the version has to +# match EXACTLY, i.e.: +# 1.5 == 1.5 +# 1.5 == 1.5.0 +# 1.5 == 1.5.0.0 +# 1.5.2 == 1.5.2.0 +# 1.5.2.1 == 1.5.2.1 +# 1.5.2 != 1.5.2.1 +# 1.5 != 1.5.0.1 +# +# +# otherwise a MINIMUM_REQUIRED version is checked for, i.e. the same +# behavior as with the cmake variable CMAKE_MINIMUM_REQUIRED, e.g.: +# searching: 1.2 --> installed: 1.5.2.2 --> compatible +# searching: 1.5 --> installed: 1.5.2.2 --> compatible +# searching: 1.5.2.1 --> installed: 1.5.2.2 --> compatible +# searching: 1.5.2.3 --> installed: 1.5.2.2 --> unsuitable +# searching: 1.7 --> installed: 1.5.2.2 --> unsuitable +# +# +# following variables are returned (internally to cmake): +# PACKAGE_VERSION_EXACT : set to TRUE if exact version was found +# PACKAGE_VERSION_COMPATIBLE : set to TRUE if version is compatible +# PACKAGE_VERSION_UNSUITABLE : set to TRUE if version found is unsuitable +# +# +# @author Jan Engels, Desy IT +############################################################################## + +# these variables are evaluated internally by the cmake command FIND_PACKAGE to mark this +# package as suitable or not depending on the required version +SET( PACKAGE_VERSION_EXACT FALSE ) +SET( PACKAGE_VERSION_COMPATIBLE TRUE ) +SET( PACKAGE_VERSION_UNSUITABLE FALSE ) + + +# cmake internal variable PACKAGE_FIND_NAME is not defined on FindPKG.cmake +# modules, therefore it is passed as an argument to the macro +# _iversion is the installed version of the package +# _sversion is the version searched by the user with FIND_PACKAGE +#MACRO( CHECK_PACKAGE_VERSION _pkgname _iversion ) +MACRO( CHECK_PACKAGE_VERSION _pkgname ) # left with one argument only for backwards compatibility + + IF( NOT "${ARGV1}" STREQUAL "" ) + SET( _iversion ${ARGV1} ) + ELSE() + SET( _iversion ${${_pkgname}_VERSION_MAJOR}.${${_pkgname}_VERSION_MINOR}.${${_pkgname}_VERSION_PATCH}.${${_pkgname}_VERSION_TWEAK} ) + ENDIF() + + #SET( _sversion_major ${${_pkgname}_FIND_VERSION_MAJOR} ) + #SET( _sversion_minor ${${_pkgname}_FIND_VERSION_MINOR} ) + + SET( _sversion ${${_pkgname}_FIND_VERSION} ) + + IF( NOT ${_pkgname}_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ${_pkgname} (${_iversion})" ) + ENDIF() + + # only do work if FIND_PACKAGE called with a version argument + IF( _sversion ) + + #IF( NOT ${_pkgname}_FIND_QUIETLY ) + # MESSAGE( STATUS "Check for ${_pkgname}: looking for version ${_sversion}" ) + #ENDIF() + + IF( ${_iversion} VERSION_EQUAL ${_sversion} ) # if version matches EXACTLY + #IF( NOT ${_pkgname}_FIND_QUIETLY ) + # MESSAGE( STATUS "Check for ${_pkgname}: exact version found: ${_iversion}" ) + #ENDIF() + SET( PACKAGE_VERSION_EXACT TRUE ) + ELSE() # if version does not match EXACTLY, check if it is compatible/suitable + + # installed version must be greater or equal than version searched by the user, i.e. + # like with the CMAKE_MINIMUM_REQUIRED commando + # if user asks for version 1.2.5 then any version >= 1.2.5 is suitable/compatible + IF( NOT ${_sversion} VERSION_LESS ${_iversion} ) + SET( PACKAGE_VERSION_UNSUITABLE TRUE ) + ENDIF() + # ------------------------------------------------------------------------------------- + + IF( ${_pkgname}_FIND_VERSION_EXACT ) # if exact version was required search must fail!! + #IF( NOT ${_pkgname}_FIND_QUIETLY ) + # MESSAGE( "Check for ${_pkgname}: could not find exact version" ) + #ENDIF() + SET( PACKAGE_VERSION_UNSUITABLE TRUE ) + ENDIF() + + ENDIF() + + IF( PACKAGE_VERSION_UNSUITABLE ) + SET( PACKAGE_VERSION_COMPATIBLE FALSE ) + ENDIF() + + ENDIF( _sversion ) + +ENDMACRO( CHECK_PACKAGE_VERSION ) + diff --git a/Utilities/KalDet/cmake/MacroRootDict.cmake b/Utilities/KalDet/cmake/MacroRootDict.cmake new file mode 100644 index 00000000..eb1059ed --- /dev/null +++ b/Utilities/KalDet/cmake/MacroRootDict.cmake @@ -0,0 +1,145 @@ +IF(APPLE) + SET( LD_LIBRARY_PATH_VAR DYLD_LIBRARY_PATH ) +ELSE() + SET( LD_LIBRARY_PATH_VAR LD_LIBRARY_PATH ) +ENDIF() +SET( LD_LIBRARY_PATH_CONTENTS $ENV{${LD_LIBRARY_PATH_VAR}} ) +#MESSAGE( STATUS "LD_LIBRARY_PATH_CONTENTS: ${LD_LIBRARY_PATH_CONTENTS}" ) +#MESSAGE( STATUS "ROOT_CINT_EXECUTABLE: ${ROOT_CINT_EXECUTABLE}" ) + +SET( ROOT_CINT_WRAPPER ${LD_LIBRARY_PATH_VAR}=${ROOT_LIBRARY_DIR}:${LD_LIBRARY_PATH_CONTENTS} ${ROOT_CINT_EXECUTABLE} ) + +IF( NOT DEFINED ROOT_DICT_OUTPUT_DIR ) + SET( ROOT_DICT_OUTPUT_DIR "${PROJECT_BINARY_DIR}/rootdict" ) +ENDIF() + +# clean generated header files with 'make clean' +SET_DIRECTORY_PROPERTIES( PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ROOT_DICT_OUTPUT_DIR}" ) + +IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ROOT_DICT_OUTPUT_DIR: ${PROJECT_BINARY_DIR}/rootdict" ) + MESSAGE( STATUS "Check for ROOT_DICT_CINT_DEFINITIONS: ${ROOT_DICT_CINT_DEFINITIONS}" ) +ENDIF() + + +# ============================================================================ +# helper macro to prepare input headers for GEN_ROOT_DICT_SOURCES +# sorts LinkDef.h to be the last header (required by rootcint) +# +# arguments: +# input_dir - directory to search for headers matching *.h +# +# returns: +# ROOT_DICT_INPUT_HEADERS - all header files found in input_dir with +# LinkDef.h as the last header (if found) +# +# ---------------------------------------------------------------------------- +MACRO( PREPARE_ROOT_DICT_HEADERS _input_dir ) + + FILE( GLOB ROOT_DICT_INPUT_HEADERS "${_input_dir}/*.h" ) + FILE( GLOB _linkdef_hdr "${_input_dir}/LinkDef.h" ) + + #LIST( FIND ROOT_DICT_INPUT_HEADERS ${_linkdef_hdr} _aux ) + #IF( ${_aux} EQUAL 0 OR ${_aux} GREATER 0 ) + # LIST( REMOVE_ITEM ROOT_DICT_INPUT_HEADERS "${_linkdef_hdr}" ) + # LIST( APPEND ROOT_DICT_INPUT_HEADERS "${_linkdef_hdr}" ) + #ENDIF() + + IF( _linkdef_hdr ) + LIST( REMOVE_ITEM ROOT_DICT_INPUT_HEADERS "${_linkdef_hdr}" ) + LIST( APPEND ROOT_DICT_INPUT_HEADERS "${_linkdef_hdr}") + ENDIF() + + #MESSAGE( STATUS "ROOT_DICT_INPUT_HEADERS: ${ROOT_DICT_INPUT_HEADERS}" ) + +ENDMACRO( PREPARE_ROOT_DICT_HEADERS ) + + + +# ============================================================================ +# helper macro to generate Linkdef.h files for rootcint +# +# arguments: +# namespace - prefix used for creating header <namespace>_Linkdef.h +# ARGN - list of sources to be used for generating Linkdef.h +# +# returns: +# ROOT_DICT_INPUT_HEADERS - all header files + <namespace>_LinkDef.h in the +# correct order to be used by macro GEN_ROOT_DICT_SOURCES +# +# ---------------------------------------------------------------------------- +MACRO( GEN_ROOT_DICT_LINKDEF_HEADER _namespace ) + + SET( _input_headers ${ARGN} ) + SET( _linkdef_header "${ROOT_DICT_OUTPUT_DIR}/${_namespace}_Linkdef.h" ) + + FOREACH( _header ${_input_headers} ) + SET( ${_namespace}_file_contents "${${_namespace}_file_contents}\\#pragma link C++ defined_in \\\"${_header}\\\"\\;\\\\n" ) + ENDFOREACH() + + ADD_CUSTOM_COMMAND( + OUTPUT ${_linkdef_header} + COMMAND mkdir -p ${ROOT_DICT_OUTPUT_DIR} + COMMAND printf "${${_namespace}_file_contents}" > ${_linkdef_header} + DEPENDS ${_input_headers} + COMMENT "generating: ${_linkdef_header}" + ) + + SET( ROOT_DICT_INPUT_HEADERS ${_input_headers} ${_linkdef_header} ) + +ENDMACRO() + + +# ============================================================================ +# macro for generating root dict sources with rootcint +# +# arguments: +# dict_src_filename - filename of the dictionary source (to be generated) +# +# requires following variables: +# ROOT_DICT_INPUT_HEADERS - list of headers needed to generate dict source +# * if LinkDef.h is in the list it must be at the end !! +# ROOT_DICT_INCLUDE_DIRS - list of include dirs to pass to rootcint -I.. +# ROOT_DICT_CINT_DEFINITIONS - extra definitions to pass to rootcint +# ROOT_DICT_OUTPUT_DIR - where dictionary source should be generated +# +# returns: +# ROOT_DICT_OUTPUT_SOURCES - list containing generated source and other +# previously generated sources + +# ---------------------------------------------------------------------------- +MACRO( GEN_ROOT_DICT_SOURCE _dict_src_filename ) + + # TODO check for ROOT_CINT_EXECUTABLE + + # need to prefix all include dirs with -I + set( _dict_includes ) + FOREACH( _inc ${ROOT_DICT_INCLUDE_DIRS} ) + SET( _dict_includes "${_dict_includes}\t-I${_inc}") #fg: the \t fixes a wired string expansion + #SET( _dict_includes ${_dict_includes} -I${_inc} ) + ENDFOREACH() + + STRING( REPLACE "/" "_" _dict_src_filename_nosc ${_dict_src_filename} ) + SET( _dict_src_file ${ROOT_DICT_OUTPUT_DIR}/${_dict_src_filename_nosc} ) + STRING( REGEX REPLACE "^(.*)\\.(.*)$" "\\1.h" _dict_hdr_file "${_dict_src_file}" ) + #message("fucd debug: ${_dict_src_file} ${ROOT_DICT_CINT_DEFINITIONS} ${_dict_includes} ${ROOT_DICT_INPUT_HEADERS}") + ADD_CUSTOM_COMMAND( + OUTPUT ${_dict_src_file} ${_dict_hdr_file} + COMMAND mkdir -p ${ROOT_DICT_OUTPUT_DIR} + COMMAND ${ROOT_CINT_WRAPPER} -f "${_dict_src_file}" -c ${ROOT_DICT_CINT_DEFINITIONS} ${_dict_includes} ${ROOT_DICT_INPUT_HEADERS} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + DEPENDS ${ROOT_DICT_INPUT_HEADERS} + COMMENT "generating: ${_dict_src_file} ${_dict_hdr_file}" + ) + LIST( APPEND ROOT_DICT_OUTPUT_SOURCES ${_dict_src_file} ) + +ENDMACRO() + +# for backwards compatibility +MACRO( GEN_ROOT_DICT_SOURCES _dict_src_filename ) + #MESSAGE( "USING DEPRECATED GEN_ROOT_DICT_SOURCES. PLEASE USE GEN_ROOT_DICT_SOURCE instead." ) + SET( ROOT_DICT_OUTPUT_SOURCES ) + GEN_ROOT_DICT_SOURCE( ${_dict_src_filename} ) +ENDMACRO() +# ============================================================================ + diff --git a/Utilities/KalDet/cmake/MyFindROOT.cmake b/Utilities/KalDet/cmake/MyFindROOT.cmake new file mode 100644 index 00000000..567ce159 --- /dev/null +++ b/Utilities/KalDet/cmake/MyFindROOT.cmake @@ -0,0 +1,316 @@ +############################################################################### +# cmake module for finding ROOT +# +# requires: +# MacroCheckPackageLibs.cmake for checking package libraries +# +# Following cmake variables are returned by this module: +# +# ROOT_FOUND : set to TRUE if ROOT found +# If FIND_PACKAGE is called with REQUIRED and COMPONENTS arguments +# ROOT_FOUND is only set to TRUE if ALL components are found. +# If REQUIRED is NOT set components may or may not be available +# +# ROOT_LIBRARIES : list of ROOT libraries (NOT including COMPONENTS) +# ROOT_INCLUDE_DIRS : list of paths to be used with INCLUDE_DIRECTORIES +# ROOT_LIBRARY_DIRS : list of paths to be used with LINK_DIRECTORIES +# ROOT_COMPONENT_LIBRARIES : list of ROOT component libraries +# ROOT_${COMPONENT}_FOUND : set to TRUE or FALSE for each library +# ROOT_${COMPONENT}_LIBRARY : path to individual libraries +# +# +# Please note that by convention components should be entered exactly as +# the library names, i.e. the component name equivalent to the library +# $ROOTSYS/lib/libMathMore.so should be called MathMore and NOT: +# mathmore or Mathmore or MATHMORE +# +# However to follow the usual cmake convention it is agreed that the +# ROOT_${COMPONENT}_FOUND and ROOT_${COMPONENT}_LIBRARY variables are ALL +# uppercase, i.e. the MathMore component returns: ROOT_MATHMORE_FOUND and +# ROOT_MATHMORE_LIBRARY NOT ROOT_MathMore_FOUND or ROOT_MathMore_LIBRARY +# +# +# The additional ROOT components should be defined as follows: +# FIND_PACKAGE( ROOT COMPONENTS MathMore Gdml Geom ...) +# +# If components are required use: +# FIND_PACKAGE( ROOT REQUIRED COMPONENTS MathMore Gdml Geom ...) +# +# If only root is required and components are NOT required use: +# FIND_PACKAGE( ROOT REQUIRED ) +# FIND_PACKAGE( ROOT COMPONENTS MathMore Gdml Geom ... QUIET ) +# then you need to check for ROOT_MATHMORE_FOUND, ROOT_GDML_FOUND, etc. +# +# The variable ROOT_USE_COMPONENTS can also be used before calling +# FIND_PACKAGE, i.e.: +# SET( ROOT_USE_COMPONENTS MathMore Gdml Geom ) +# FIND_PACKAGE( ROOT REQUIRED ) # all ROOT_USE_COMPONENTS must also be found +# FIND_PACKAGE( ROOT ) # check for ROOT_FOUND, ROOT_MATHMORE_FOUND, etc. +# +# @author Jan Engels, DESY +############################################################################### + +# ============================================== +# === ROOT_CONFIG_EXECUTABLE === +# ============================================== + +SET( ROOT_CONFIG_EXECUTABLE ROOT_CONFIG_EXECUTABLE-NOTFOUND ) +MARK_AS_ADVANCED( ROOT_CONFIG_EXECUTABLE ) +# FIND_PROGRAM: Once one of the calls succeeds the result variable will be set and stored in the cache so that no call will search again. +FIND_PROGRAM( ROOT_CONFIG_EXECUTABLE root-config PATHS ${ROOT_DIR}/bin NO_DEFAULT_PATH ) +FIND_PROGRAM( ROOT_CONFIG_EXECUTABLE root-config PATHS $ENV{ROOTSYS}/bin NO_DEFAULT_PATH) +FIND_PROGRAM( ROOT_CONFIG_EXECUTABLE root-config PATHS ENV PATH ) +FIND_PROGRAM( ROOT_CONFIG_EXECUTABLE root-config ) + +IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ROOT_CONFIG_EXECUTABLE: ${ROOT_CONFIG_EXECUTABLE}" ) +ENDIF() + +IF( ROOT_CONFIG_EXECUTABLE ) + + + # ============================================== + # === ROOT_VERSION === + # ============================================== + + INCLUDE( MacroCheckPackageVersion ) + + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --version + OUTPUT_VARIABLE _version + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( _exit_code EQUAL 0 ) + + # set required variables for MacroCheckPackageVersion + STRING(REGEX REPLACE "^([0-9]+).*" "\\1" ROOT_VERSION_MAJOR "${_version}") + STRING(REGEX REPLACE "^[0-9]+.([0-9]+).*" "\\1" ROOT_VERSION_MINOR "${_version}") + STRING(REGEX REPLACE "^[0-9]+.[0-9]+.([0-9]+).*" "\\1" ROOT_VERSION_PATCH "${_version}") + + SET( ROOT_VERSION "${ROOT_VERSION_MAJOR}.${ROOT_VERSION_MINOR}.${ROOT_VERSION_PATCH}" ) + ENDIF() + + CHECK_PACKAGE_VERSION( ROOT ${ROOT_VERSION} ) + + + + # ============================================== + # === ROOT_PREFIX === + # ============================================== + + # get root prefix from root-config output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --prefix + OUTPUT_VARIABLE ROOT_PREFIX + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( NOT _exit_code EQUAL 0 ) + # clear variable if root-config exits with error + # it might contain garbage + SET( ROOT_PREFIX ) + ENDIF() + + # PKG_ROOT variables are a cmake standard + # since this package is also called ROOT the variable name + # becomes ROOT_ROOT ... + SET( ROOT_ROOT ${ROOT_PREFIX} ) + + + + # ============================================== + # === ROOT_BIN_DIR === + # ============================================== + + # get bindir from root-config output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --bindir + OUTPUT_VARIABLE ROOT_BIN_DIR + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( NOT _exit_code EQUAL 0 ) + # clear variable if root-config exits with error + # it might contain garbage + SET( ROOT_BIN_DIR ) + ENDIF() + + + + # ============================================== + # === ROOT_EXECUTABLE === + # ============================================== + + + SET( ROOT_EXECUTABLE ROOT_EXECUTABLE-NOTFOUND ) + MARK_AS_ADVANCED( ROOT_EXECUTABLE ) + FIND_PROGRAM( ROOT_EXECUTABLE root PATHS ${ROOT_BIN_DIR} NO_DEFAULT_PATH ) + + IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ROOT_EXECUTABLE: ${ROOT_EXECUTABLE}" ) + ENDIF() + + + + + # ============================================== + # === ROOT_CINT_EXECUTABLE === + # ============================================== + + + # find rootcint + SET( ROOT_CINT_EXECUTABLE ROOT_CINT_EXECUTABLE-NOTFOUND ) + MARK_AS_ADVANCED( ROOT_CINT_EXECUTABLE ) + FIND_PROGRAM( ROOT_CINT_EXECUTABLE rootcint PATHS ${ROOT_BIN_DIR} NO_DEFAULT_PATH ) + + IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ROOT_CINT_EXECUTABLE: ${ROOT_CINT_EXECUTABLE}" ) + ENDIF() + + + + # ============================================== + # === ROOT_INCLUDE_DIR === + # ============================================== + + # get include dir from root-config output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --incdir + OUTPUT_VARIABLE _inc_dir + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( NOT _exit_code EQUAL 0 ) + # clear variable if root-config exits with error + # it might contain garbage + SET( _inc_dir ) + ENDIF() + + + SET( ROOT_INCLUDE_DIRS ROOT_INCLUDE_DIRS-NOTFOUND ) + MARK_AS_ADVANCED( ROOT_INCLUDE_DIRS ) + + FIND_PATH( ROOT_INCLUDE_DIRS + NAMES TH1.h + PATHS ${ROOT_DIR}/include ${_inc_dir} + NO_DEFAULT_PATH + ) + + + + # ============================================== + # === ROOT_LIBRARIES === + # ============================================== + + # get library dir from root-config output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --libdir + OUTPUT_VARIABLE ROOT_LIBRARY_DIR + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( NOT _exit_code EQUAL 0 ) + # clear variable if root-config exits with error + # it might contain garbage + SET( ROOT_LIBRARY_DIR ) + ENDIF() + + + + # ========== standard root libraries ================= + + # standard root libraries (without components) + SET( _root_libnames ) + + # get standard root libraries from 'root-config --libs' output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --noauxlibs --libs + OUTPUT_VARIABLE _aux + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( _exit_code EQUAL 0 ) + + # create a list out of the output + SEPARATE_ARGUMENTS( _aux ) + + # remove first item -L compiler flag + LIST( REMOVE_AT _aux 0 ) + + FOREACH( _lib ${_aux} ) + + # extract libnames from -l compiler flags + STRING( REGEX REPLACE "^-.(.*)$" "\\1" _libname "${_lib}") + + # fix for some root-config versions which export -lz even if using --noauxlibs + IF( NOT _libname STREQUAL "z" ) + + # append all library names into a list + LIST( APPEND _root_libnames ${_libname} ) + + ENDIF() + + ENDFOREACH() + + ENDIF() + + + + # ========== additional root components ================= + + #LIST( APPEND ROOT_FIND_COMPONENTS Minuit2 ) # DEPRECATED !!! + + + # ---------- libraries -------------------------------------------------------- + INCLUDE( MacroCheckPackageLibs ) + + SET( ROOT_LIB_SEARCH_PATH ${ROOT_LIBRARY_DIR} ) + + # only standard libraries should be passed as arguments to CHECK_PACKAGE_LIBS + # additional components are set by cmake in variable PKG_FIND_COMPONENTS + # first argument should be the package name + CHECK_PACKAGE_LIBS( ROOT ${_root_libnames} ) + + + + + # ====== DL LIBRARY ================================================== + # workaround for cmake bug in 64 bit: + # see: http://public.kitware.com/mantis/view.php?id=10813 + IF( CMAKE_SIZEOF_VOID_P EQUAL 8 ) + FIND_LIBRARY( DL_LIB NAMES ${CMAKE_DL_LIBS} dl PATHS /usr/lib64 /lib64 NO_DEFAULT_PATH ) + ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 ) + + FIND_LIBRARY( DL_LIB NAMES ${CMAKE_DL_LIBS} dl ) + MARK_AS_ADVANCED( DL_LIB ) + + IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for libdl.so: ${DL_LIB}" ) + ENDIF() + +ENDIF( ROOT_CONFIG_EXECUTABLE ) + +# Threads library +#FIND_PACKAGE( Threads REQUIRED) + + +# ---------- final checking --------------------------------------------------- +INCLUDE( FindPackageHandleStandardArgs ) +# set ROOT_FOUND to TRUE if all listed variables are TRUE and not empty +# ROOT_COMPONENT_VARIABLES will be set if FIND_PACKAGE is called with REQUIRED argument +FIND_PACKAGE_HANDLE_STANDARD_ARGS( ROOT DEFAULT_MSG ROOT_INCLUDE_DIRS ROOT_LIBRARIES ${ROOT_COMPONENT_VARIABLES} PACKAGE_VERSION_COMPATIBLE DL_LIB ) + +IF( ROOT_FOUND ) + LIST( APPEND ROOT_LIBRARIES ${DL_LIB} ) + # FIXME DEPRECATED + SET( ROOT_DEFINITIONS "-DUSEROOT -DUSE_ROOT -DMARLIN_USE_ROOT" ) + MARK_AS_ADVANCED( ROOT_DEFINITIONS ) + + # file including MACROS for generating root dictionary sources + GET_FILENAME_COMPONENT( _aux ${CMAKE_CURRENT_LIST_FILE} PATH ) + SET( ROOT_DICT_MACROS_FILE ${_aux}/MacroRootDict.cmake ) + +ENDIF( ROOT_FOUND ) + +# ---------- cmake bug -------------------------------------------------------- +# ROOT_FIND_REQUIRED is not reset between FIND_PACKAGE calls, i.e. the following +# code fails when geartgeo component not available: (fixed in cmake 2.8) +# FIND_PACKAGE( ROOT REQUIRED ) +# FIND_PACKAGE( ROOT COMPONENTS geartgeo QUIET ) +SET( ROOT_FIND_REQUIRED ) + diff --git a/Utilities/KalDet/kaldet/EXVKalDetector.h b/Utilities/KalDet/kaldet/EXVKalDetector.h index bb1e09cb..16e1d926 100644 --- a/Utilities/KalDet/kaldet/EXVKalDetector.h +++ b/Utilities/KalDet/kaldet/EXVKalDetector.h @@ -34,8 +34,8 @@ class TNode; * * \deprecated EXVKalDetector */ -class EXVKalDetector : public TVKalDetector, public TAttDrawable { - //class EXVKalDetector : public TVKalDetector { +// class EXVKalDetector : public TVKalDetector, public TAttDrawable { +class EXVKalDetector : public TVKalDetector { public: EXVKalDetector(Double_t bField, Int_t m = 100); virtual ~EXVKalDetector(); diff --git a/Utilities/KalDet/kaldet/ILDConeMeasLayer.h b/Utilities/KalDet/kaldet/ILDConeMeasLayer.h index 00e9fb06..ba2138e0 100644 --- a/Utilities/KalDet/kaldet/ILDConeMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDConeMeasLayer.h @@ -60,7 +60,7 @@ public: Bool_t IsOnSurface(const TVector3 &xx) const; /** Convert LCIO Tracker Hit to an ILDCylinderHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { /* streamlog_out( ERROR ) << "Don't use this, it's not implemented!"; */ return NULL; diff --git a/Utilities/KalDet/kaldet/ILDCylinderHit.h b/Utilities/KalDet/kaldet/ILDCylinderHit.h index 9dbe5b73..ca694e6e 100644 --- a/Utilities/KalDet/kaldet/ILDCylinderHit.h +++ b/Utilities/KalDet/kaldet/ILDCylinderHit.h @@ -17,7 +17,7 @@ public: /** Constructor Taking R and Rphi coordinates and associated measurement layer, with bfield */ ILDCylinderHit(const TVMeasLayer &ms, Double_t *x, Double_t *dx, - Double_t bfield, edm4hep::TrackerHit* trkhit ) + Double_t bfield, edm4hep::ConstTrackerHit trkhit ) : ILDVTrackHit(ms, x, dx, bfield, 2, trkhit) { /* no op */ } diff --git a/Utilities/KalDet/kaldet/ILDCylinderMeasLayer.h b/Utilities/KalDet/kaldet/ILDCylinderMeasLayer.h index 04740cc8..fd408f08 100644 --- a/Utilities/KalDet/kaldet/ILDCylinderMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDCylinderMeasLayer.h @@ -71,7 +71,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDCylinderHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** Get the intersection and the CellID, needed for multilayers */ virtual int getIntersectionAndCellID(const TVTrack &hel, diff --git a/Utilities/KalDet/kaldet/ILDDiscMeasLayer.h b/Utilities/KalDet/kaldet/ILDDiscMeasLayer.h index fe3ff826..a4e2f387 100644 --- a/Utilities/KalDet/kaldet/ILDDiscMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDDiscMeasLayer.h @@ -70,7 +70,7 @@ public: /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** Check if global point is on surface */ inline virtual Bool_t IsOnSurface (const TVector3 &xx) const; diff --git a/Utilities/KalDet/kaldet/ILDParallelPlanarStripMeasLayer.h b/Utilities/KalDet/kaldet/ILDParallelPlanarStripMeasLayer.h index c717f4c1..8ecf1e0c 100644 --- a/Utilities/KalDet/kaldet/ILDParallelPlanarStripMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDParallelPlanarStripMeasLayer.h @@ -50,7 +50,7 @@ public: void CalcDhDa(const TVTrackHit &vht, const TVector3 &xxv, const TKalMatrix &dxphiada, TKalMatrix &H) const; - ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const; + ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const; private: diff --git a/Utilities/KalDet/kaldet/ILDPlanarHit.h b/Utilities/KalDet/kaldet/ILDPlanarHit.h index e54f0cf7..a3cb42c0 100644 --- a/Utilities/KalDet/kaldet/ILDPlanarHit.h +++ b/Utilities/KalDet/kaldet/ILDPlanarHit.h @@ -21,7 +21,7 @@ public: Double_t *x, Double_t *dx, Double_t bfield, - edm4hep::TrackerHit* trkhit) + edm4hep::ConstTrackerHit trkhit) : ILDVTrackHit(ms, x, dx, bfield, ILDPlanarHit_DIM,trkhit) { /* no op */ } diff --git a/Utilities/KalDet/kaldet/ILDPlanarMeasLayer.h b/Utilities/KalDet/kaldet/ILDPlanarMeasLayer.h index 500f2a23..45f93877 100644 --- a/Utilities/KalDet/kaldet/ILDPlanarMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDPlanarMeasLayer.h @@ -63,7 +63,7 @@ public: const TKalMatrix &dxphiada, TKalMatrix &H) const; - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; virtual Bool_t IsOnSurface (const TVector3 &xx) const; diff --git a/Utilities/KalDet/kaldet/ILDPlanarStripHit.h b/Utilities/KalDet/kaldet/ILDPlanarStripHit.h index 1103eeda..30d56864 100644 --- a/Utilities/KalDet/kaldet/ILDPlanarStripHit.h +++ b/Utilities/KalDet/kaldet/ILDPlanarStripHit.h @@ -22,7 +22,7 @@ public: Double_t *x, Double_t *dx, Double_t bfield, - edm4hep::TrackerHit* trkhit) + edm4hep::ConstTrackerHit trkhit) : ILDVTrackHit(ms, x, dx, bfield, ILDPlanarStripHit_DIM,trkhit) { /* no op */ } diff --git a/Utilities/KalDet/kaldet/ILDPolygonBarrelMeasLayer.h b/Utilities/KalDet/kaldet/ILDPolygonBarrelMeasLayer.h index 684bb876..16fa5320 100644 --- a/Utilities/KalDet/kaldet/ILDPolygonBarrelMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDPolygonBarrelMeasLayer.h @@ -70,7 +70,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** overloaded version of CalcXingPointWith using closed solution*/ virtual Int_t CalcXingPointWith(const TVTrack &hel, diff --git a/Utilities/KalDet/kaldet/ILDRotatedTrapMeaslayer.h b/Utilities/KalDet/kaldet/ILDRotatedTrapMeaslayer.h index 8cb7e4e0..dce3303b 100644 --- a/Utilities/KalDet/kaldet/ILDRotatedTrapMeaslayer.h +++ b/Utilities/KalDet/kaldet/ILDRotatedTrapMeaslayer.h @@ -57,7 +57,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** Check if global point is on surface */ inline virtual Bool_t IsOnSurface (const TVector3 &xx) const; diff --git a/Utilities/KalDet/kaldet/ILDSegmentedDiscMeasLayer.h b/Utilities/KalDet/kaldet/ILDSegmentedDiscMeasLayer.h index 61335702..6afdc9f8 100644 --- a/Utilities/KalDet/kaldet/ILDSegmentedDiscMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDSegmentedDiscMeasLayer.h @@ -77,7 +77,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** overloaded version of CalcXingPointWith using closed solution*/ virtual Int_t CalcXingPointWith(const TVTrack &hel, diff --git a/Utilities/KalDet/kaldet/ILDSegmentedDiscStripMeasLayer.h b/Utilities/KalDet/kaldet/ILDSegmentedDiscStripMeasLayer.h index 8bdab668..34a3b203 100644 --- a/Utilities/KalDet/kaldet/ILDSegmentedDiscStripMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDSegmentedDiscStripMeasLayer.h @@ -67,7 +67,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; private: diff --git a/Utilities/KalDet/kaldet/ILDVMeasLayer.h b/Utilities/KalDet/kaldet/ILDVMeasLayer.h index 3d213b3a..498c5608 100644 --- a/Utilities/KalDet/kaldet/ILDVMeasLayer.h +++ b/Utilities/KalDet/kaldet/ILDVMeasLayer.h @@ -13,6 +13,7 @@ #include "kaltest/TAttDrawable.h" #include "kaltest/KalTrackDim.h" #include "TString.h" +#include "edm4hep/TrackerHitConst.h" #include <vector> @@ -43,7 +44,7 @@ public: inline Double_t GetBz() const { return _Bz; } /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const = 0 ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const = 0 ; /** Check whether the measurement layer represents a series of detector elements */ bool isMultilayer() const { return _isMultiLayer; } diff --git a/Utilities/KalDet/kaldet/ILDVTrackHit.h b/Utilities/KalDet/kaldet/ILDVTrackHit.h index d47be083..89aa42f2 100644 --- a/Utilities/KalDet/kaldet/ILDVTrackHit.h +++ b/Utilities/KalDet/kaldet/ILDVTrackHit.h @@ -19,15 +19,15 @@ public: /** Constructor Taking coordinates and associated measurement layer, with bfield and number of measurement dimentions*/ ILDVTrackHit(const TVMeasLayer &ms, Double_t *x, Double_t *dx, - Double_t bfield , Int_t dim, edm4hep::TrackerHit* trkhit) + Double_t bfield , Int_t dim, edm4hep::ConstTrackerHit trkhit) : TVTrackHit(ms, x, dx, bfield, dim), _trkhit(trkhit) { /* no op */ } - edm4hep::TrackerHit* getLCIOTrackerHit() const { return _trkhit; } + edm4hep::ConstTrackerHit getLCIOTrackerHit() const { return _trkhit; } private: - edm4hep::TrackerHit* _trkhit; + edm4hep::ConstTrackerHit _trkhit; }; #endif diff --git a/Utilities/KalDet/src/gen/EXEventGen.cxx b/Utilities/KalDet/src/gen/EXEventGen.cxx index c10325c4..fa509413 100644 --- a/Utilities/KalDet/src/gen/EXEventGen.cxx +++ b/Utilities/KalDet/src/gen/EXEventGen.cxx @@ -1,8 +1,8 @@ #include "EXEventGen.h" //#include "EXVKalDetector.h" //#include <EXVMeasLayer.h> -#include "EXTPCKalDetector.h" -#include <EXTPCMeasLayer.h> +#include "kaldet/EXTPCKalDetector.h" +#include <kaldet/EXTPCMeasLayer.h> #include <kaltest/TPlane.h> #include <TRandom.h> #include <TMath.h> diff --git a/Utilities/KalDet/src/ild/common/ILDConeMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDConeMeasLayer.h index 00e9fb06..ba2138e0 100644 --- a/Utilities/KalDet/src/ild/common/ILDConeMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDConeMeasLayer.h @@ -60,7 +60,7 @@ public: Bool_t IsOnSurface(const TVector3 &xx) const; /** Convert LCIO Tracker Hit to an ILDCylinderHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { /* streamlog_out( ERROR ) << "Don't use this, it's not implemented!"; */ return NULL; diff --git a/Utilities/KalDet/src/ild/common/ILDCylinderHit.h b/Utilities/KalDet/src/ild/common/ILDCylinderHit.h index 9dbe5b73..ca694e6e 100644 --- a/Utilities/KalDet/src/ild/common/ILDCylinderHit.h +++ b/Utilities/KalDet/src/ild/common/ILDCylinderHit.h @@ -17,7 +17,7 @@ public: /** Constructor Taking R and Rphi coordinates and associated measurement layer, with bfield */ ILDCylinderHit(const TVMeasLayer &ms, Double_t *x, Double_t *dx, - Double_t bfield, edm4hep::TrackerHit* trkhit ) + Double_t bfield, edm4hep::ConstTrackerHit trkhit ) : ILDVTrackHit(ms, x, dx, bfield, 2, trkhit) { /* no op */ } diff --git a/Utilities/KalDet/src/ild/common/ILDCylinderMeasLayer.cc b/Utilities/KalDet/src/ild/common/ILDCylinderMeasLayer.cc index 72cb1119..fc41a5e1 100644 --- a/Utilities/KalDet/src/ild/common/ILDCylinderMeasLayer.cc +++ b/Utilities/KalDet/src/ild/common/ILDCylinderMeasLayer.cc @@ -2,6 +2,8 @@ * * @author S.Aplin DESY */ + + #include "kaltest/TKalTrack.h" #include "ILDCylinderMeasLayer.h" @@ -108,13 +110,13 @@ void ILDCylinderMeasLayer::CalcDhDa(const TVTrackHit &vht, // tracker hit not us /** Convert LCIO Tracker Hit to an ILDCylinderHit */ -ILDVTrackHit* ILDCylinderMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { - if ( ! trkhit) { +ILDVTrackHit* ILDCylinderMeasLayer::ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { + if ( ! trkhit.isAvailable() ) { // streamlog_out(ERROR) << "ILDCylinderMeasLayer::ConvertLCIOTrkHit trkhit pointer is NULL" << std::endl; return NULL; } - const edm4hep::Vector3d& pos = trkhit->getPosition(); + const edm4hep::Vector3d& pos = trkhit.getPosition(); const TVector3 hit(pos.x, pos.y, pos.z) ; //SJA:FIXME: this assumes that the cylinder is centred at 0,0 @@ -129,16 +131,16 @@ ILDVTrackHit* ILDCylinderMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhi //EVENT::TrackerHitZCylinder* cylinder_hit = dynamic_cast<EVENT::TrackerHitZCylinder*>( trkhit ) ; - if(trkhit->getType()==16){ + if(trkhit.getType()==16){ //if(cylinder_hit){ // convert errors - dx[0] = trkhit->getCovMatrix(0); - dx[1] = trkhit->getCovMatrix(1); + dx[0] = trkhit.getCovMatrix(0); + dx[1] = trkhit.getCovMatrix(1); } else { // convert errors - dx[0] = sqrt(trkhit->getCovMatrix(0) + trkhit->getCovMatrix(2)) ; - dx[1] = sqrt(trkhit->getCovMatrix(5)); + dx[0] = sqrt(trkhit.getCovMatrix(0) + trkhit.getCovMatrix(2)) ; + dx[1] = sqrt(trkhit.getCovMatrix(5)); } diff --git a/Utilities/KalDet/src/ild/common/ILDCylinderMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDCylinderMeasLayer.h index 04740cc8..fd408f08 100644 --- a/Utilities/KalDet/src/ild/common/ILDCylinderMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDCylinderMeasLayer.h @@ -71,7 +71,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDCylinderHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** Get the intersection and the CellID, needed for multilayers */ virtual int getIntersectionAndCellID(const TVTrack &hel, diff --git a/Utilities/KalDet/src/ild/common/ILDDiscMeasLayer.cc b/Utilities/KalDet/src/ild/common/ILDDiscMeasLayer.cc index d8d476fc..d0c0dad4 100644 --- a/Utilities/KalDet/src/ild/common/ILDDiscMeasLayer.cc +++ b/Utilities/KalDet/src/ild/common/ILDDiscMeasLayer.cc @@ -207,19 +207,19 @@ Bool_t ILDDiscMeasLayer::IsOnSurface(const TVector3 &xx) const } -ILDVTrackHit* ILDDiscMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { +ILDVTrackHit* ILDDiscMeasLayer::ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { //edm4hep::TrackerHitPlane* plane_hit = dynamic_cast<EVENT::TrackerHitPlane*>( trkhit ) ; //edm4hep::TrackerHitPlane* plane_hit = trkhit; - if((trkhit->getType()&8)!=8) return NULL; + if(trkhit.getType()!=8) return NULL; - //edm4hep::TrackerHit* plane_hit = trkhit; + //edm4hep::ConstTrackerHit plane_hit = trkhit; //if( plane_hit == NULL ) return NULL; // SJA:FIXME: should be replaced with an exception - //gear::Vector3D U(1.0,plane_hit->getU()[1],plane_hit->getU()[0],gear::Vector3D::spherical); - //gear::Vector3D V(1.0,plane_hit->getV()[1],plane_hit->getV()[0],gear::Vector3D::spherical); - gear::Vector3D U(1.0,trkhit->getCovMatrix(1),trkhit->getCovMatrix(0),gear::Vector3D::spherical); - gear::Vector3D V(1.0,trkhit->getCovMatrix(5),trkhit->getCovMatrix(4),gear::Vector3D::spherical); + //gear::Vector3D U(1.0,plane_hit.getU()[1],plane_hit.getU()[0],gear::Vector3D::spherical); + //gear::Vector3D V(1.0,plane_hit.getV()[1],plane_hit.getV()[0],gear::Vector3D::spherical); + gear::Vector3D U(1.0,trkhit.getCovMatrix(1),trkhit.getCovMatrix(0),gear::Vector3D::spherical); + gear::Vector3D V(1.0,trkhit.getCovMatrix(5),trkhit.getCovMatrix(4),gear::Vector3D::spherical); gear::Vector3D X(1.0,0.0,0.0); gear::Vector3D Y(0.0,1.0,0.0); @@ -236,7 +236,7 @@ ILDVTrackHit* ILDDiscMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) c exit(1); } - const edm4hep::Vector3d& pos=trkhit->getPosition(); + const edm4hep::Vector3d& pos=trkhit.getPosition(); const TVector3 hit(pos.x, pos.y, pos.z); // convert to layer coordinates @@ -248,10 +248,10 @@ ILDVTrackHit* ILDDiscMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) c x[0] = h(0, 0); x[1] = h(1, 0); - //dx[0] = plane_hit->getdU() ; - //dx[1] = plane_hit->getdV() ; - dx[0] = trkhit->getCovMatrix(2); - dx[1] = trkhit->getCovMatrix(5); + //dx[0] = plane_hit.getdU() ; + //dx[1] = plane_hit.getdV() ; + dx[0] = trkhit.getCovMatrix(2); + dx[1] = trkhit.getCovMatrix(5); bool hit_on_surface = IsOnSurface(hit); diff --git a/Utilities/KalDet/src/ild/common/ILDDiscMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDDiscMeasLayer.h index fe3ff826..a4e2f387 100644 --- a/Utilities/KalDet/src/ild/common/ILDDiscMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDDiscMeasLayer.h @@ -70,7 +70,7 @@ public: /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** Check if global point is on surface */ inline virtual Bool_t IsOnSurface (const TVector3 &xx) const; diff --git a/Utilities/KalDet/src/ild/common/ILDParallelPlanarStripMeasLayer.cc b/Utilities/KalDet/src/ild/common/ILDParallelPlanarStripMeasLayer.cc index b7064d81..f2959c96 100644 --- a/Utilities/KalDet/src/ild/common/ILDParallelPlanarStripMeasLayer.cc +++ b/Utilities/KalDet/src/ild/common/ILDParallelPlanarStripMeasLayer.cc @@ -162,11 +162,11 @@ void ILDParallelPlanarStripMeasLayer::CalcDhDa(const TVTrackHit &vht, } -ILDVTrackHit* ILDParallelPlanarStripMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { +ILDVTrackHit* ILDParallelPlanarStripMeasLayer::ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { //EVENT::TrackerHitPlane* plane_hit = dynamic_cast<EVENT::TrackerHitPlane*>( trkhit ) ; - //if( plane_hit == NULL ) { - if((trkhit->getType()&8)!=8) { + if((trkhit.getType()&8)!=8) { + //if( plane_hit == NULL ) { std::cout << "ILDParallelPlanarStripMeasLayer::ConvertLCIOTrkHit dynamic_cast to ILDPlanarStripHit failed " << std::endl; throw std::logic_error("Invalid invoke ILDParallelPlanarStripMeasLayer by TrackerHit trkhit"); } @@ -174,8 +174,8 @@ ILDVTrackHit* ILDParallelPlanarStripMeasLayer::ConvertLCIOTrkHit(edm4hep::Tracke // remember here the "position" of the hit in fact defines the origin of the plane it defines so u and v are per definition 0. // this is still the case for a 1-dimentional measurement, and is then used to calculate the u coordinate according to the origin of the actual measurement plane. - //const TVector3 hit( plane_hit->getPosition()[0], plane_hit->getPosition()[1], plane_hit->getPosition()[2]) ; - const edm4hep::Vector3d& pos=trkhit->getPosition(); + //const TVector3 hit( plane_hit.getPosition()[0], plane_hit.getPosition()[1], plane_hit.getPosition()[2]) ; + const edm4hep::Vector3d& pos=trkhit.getPosition(); const TVector3 hit(pos.x, pos.y, pos.z); // convert to layer coordinates @@ -188,15 +188,15 @@ ILDVTrackHit* ILDParallelPlanarStripMeasLayer::ConvertLCIOTrkHit(edm4hep::Tracke x[0] = h(0, 0); if(ILDPlanarStripHit_DIM == 2) x[1] = h(1, 0); - //dx[0] = plane_hit->getdU() ; - //if(ILDPlanarStripHit_DIM == 2) dx[1] = plane_hit->getdV() ; - dx[0] = trkhit->getCovMatrix(2); - if(ILDPlanarStripHit_DIM == 2) dx[1] = trkhit->getCovMatrix(5); + //dx[0] = plane_hit.getdU() ; + //if(ILDPlanarStripHit_DIM == 2) dx[1] = plane_hit.getdV() ; + dx[0] = trkhit.getCovMatrix(2); + if(ILDPlanarStripHit_DIM == 2) dx[1] = trkhit.getCovMatrix(5); bool hit_on_surface = IsOnSurface(hit); /* std::cout << "ILDParallelPlanarStripMeasLayer::ConvertLCIOTrkHit ILDPlanarStripHit created" - << " for CellID " << trkhit->getCellID() + << " for CellID " << trkhit.getCellID() << " Layer R = " << this->GetXc().Perp() << " Layer phi = " << this->GetXc().Phi() << " Layer z0 = " << this->GetXc().Z() diff --git a/Utilities/KalDet/src/ild/common/ILDParallelPlanarStripMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDParallelPlanarStripMeasLayer.h index c717f4c1..8ecf1e0c 100644 --- a/Utilities/KalDet/src/ild/common/ILDParallelPlanarStripMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDParallelPlanarStripMeasLayer.h @@ -50,7 +50,7 @@ public: void CalcDhDa(const TVTrackHit &vht, const TVector3 &xxv, const TKalMatrix &dxphiada, TKalMatrix &H) const; - ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const; + ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const; private: diff --git a/Utilities/KalDet/src/ild/common/ILDPlanarHit.h b/Utilities/KalDet/src/ild/common/ILDPlanarHit.h index e54f0cf7..a3cb42c0 100644 --- a/Utilities/KalDet/src/ild/common/ILDPlanarHit.h +++ b/Utilities/KalDet/src/ild/common/ILDPlanarHit.h @@ -21,7 +21,7 @@ public: Double_t *x, Double_t *dx, Double_t bfield, - edm4hep::TrackerHit* trkhit) + edm4hep::ConstTrackerHit trkhit) : ILDVTrackHit(ms, x, dx, bfield, ILDPlanarHit_DIM,trkhit) { /* no op */ } diff --git a/Utilities/KalDet/src/ild/common/ILDPlanarMeasLayer.cc b/Utilities/KalDet/src/ild/common/ILDPlanarMeasLayer.cc index ad196d2e..d0b30b96 100644 --- a/Utilities/KalDet/src/ild/common/ILDPlanarMeasLayer.cc +++ b/Utilities/KalDet/src/ild/common/ILDPlanarMeasLayer.cc @@ -244,19 +244,19 @@ Bool_t ILDPlanarMeasLayer::IsOnSurface(const TVector3 &xx) const } -ILDVTrackHit* ILDPlanarMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { - //std::cout << "ILDPlanarMeasLayer::ConvertLCIOTrkHit " << trkhit << " type=" << trkhit->getType() << std::endl; +ILDVTrackHit* ILDPlanarMeasLayer::ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { + //std::cout << "ILDPlanarMeasLayer::ConvertLCIOTrkHit " << trkhit << " type=" << trkhit.getType() << std::endl; //EVENT::TrackerHitPlane* plane_hit = dynamic_cast<EVENT::TrackerHitPlane*>( trkhit ) ; - if((trkhit->getType()&8)!=8){ - std::cout << "ILDPlanarMeasLayer::ConvertLCIOTrkHit Warning: type is not 8, but " << (trkhit->getType()&8) << std::endl; + if((trkhit.getType()&8)!=8){ + std::cout << "ILDPlanarMeasLayer::ConvertLCIOTrkHit Warning: type is not 8, but " << (trkhit.getType()&8) << std::endl; return NULL; } //if( plane_hit == NULL ) return NULL; // SJA:FIXME: should be replaced with an exception - //gear::Vector3D U(1.0,plane_hit->getU()[1],plane_hit->getU()[0],gear::Vector3D::spherical); - //gear::Vector3D V(1.0,plane_hit->getV()[1],plane_hit->getV()[0],gear::Vector3D::spherical); - gear::Vector3D U(1.0,trkhit->getCovMatrix(1),trkhit->getCovMatrix(0),gear::Vector3D::spherical); - gear::Vector3D V(1.0,trkhit->getCovMatrix(4),trkhit->getCovMatrix(3),gear::Vector3D::spherical); + //gear::Vector3D U(1.0,plane_hit.getU()[1],plane_hit.getU()[0],gear::Vector3D::spherical); + //gear::Vector3D V(1.0,plane_hit.getV()[1],plane_hit.getV()[0],gear::Vector3D::spherical); + gear::Vector3D U(1.0,trkhit.getCovMatrix(1),trkhit.getCovMatrix(0),gear::Vector3D::spherical); + gear::Vector3D V(1.0,trkhit.getCovMatrix(4),trkhit.getCovMatrix(3),gear::Vector3D::spherical); gear::Vector3D Z(0.0,0.0,1.0); const float eps = 1.0e-07; @@ -272,7 +272,7 @@ ILDVTrackHit* ILDPlanarMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) } // remember here the "position" of the hit in fact defines the origin of the plane it defines so u and v are per definition 0. - const edm4hep::Vector3d& pos=trkhit->getPosition(); + const edm4hep::Vector3d& pos=trkhit.getPosition(); const TVector3 hit(pos.x, pos.y, pos.z) ; // convert to layer coordinates @@ -284,13 +284,13 @@ ILDVTrackHit* ILDPlanarMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) x[0] = h(0, 0); x[1] = h(1, 0); - dx[0] = trkhit->getCovMatrix(2); - dx[1] = trkhit->getCovMatrix(5); + dx[0] = trkhit.getCovMatrix(2); + dx[1] = trkhit.getCovMatrix(5); bool hit_on_surface = IsOnSurface(hit); /* std::cout << "ILDPlanarMeasLayer::ConvertLCIOTrkHit ILDPlanarHit created" - << " for CellID " << trkhit->getCellID() + << " for CellID " << trkhit.getCellID() << " Layer R = " << this->GetXc().Perp() << " Layer phi = " << this->GetXc().Phi() << " Layer z0 = " << this->GetXc().Z() diff --git a/Utilities/KalDet/src/ild/common/ILDPlanarMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDPlanarMeasLayer.h index 500f2a23..45f93877 100644 --- a/Utilities/KalDet/src/ild/common/ILDPlanarMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDPlanarMeasLayer.h @@ -63,7 +63,7 @@ public: const TKalMatrix &dxphiada, TKalMatrix &H) const; - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; virtual Bool_t IsOnSurface (const TVector3 &xx) const; diff --git a/Utilities/KalDet/src/ild/common/ILDPlanarStripHit.h b/Utilities/KalDet/src/ild/common/ILDPlanarStripHit.h index 1103eeda..30d56864 100644 --- a/Utilities/KalDet/src/ild/common/ILDPlanarStripHit.h +++ b/Utilities/KalDet/src/ild/common/ILDPlanarStripHit.h @@ -22,7 +22,7 @@ public: Double_t *x, Double_t *dx, Double_t bfield, - edm4hep::TrackerHit* trkhit) + edm4hep::ConstTrackerHit trkhit) : ILDVTrackHit(ms, x, dx, bfield, ILDPlanarStripHit_DIM,trkhit) { /* no op */ } diff --git a/Utilities/KalDet/src/ild/common/ILDPolygonBarrelMeasLayer.cc b/Utilities/KalDet/src/ild/common/ILDPolygonBarrelMeasLayer.cc index c1348fd0..aeef051c 100644 --- a/Utilities/KalDet/src/ild/common/ILDPolygonBarrelMeasLayer.cc +++ b/Utilities/KalDet/src/ild/common/ILDPolygonBarrelMeasLayer.cc @@ -136,9 +136,9 @@ Bool_t ILDPolygonBarrelMeasLayer::IsOnSurface(const TVector3 &xx) const } -ILDVTrackHit* ILDPolygonBarrelMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { +ILDVTrackHit* ILDPolygonBarrelMeasLayer::ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { - std::cout << "ILDPolygonBarrelMeasLayer::ConvertLCIOTrkHit Not implemented: exit(1) called from " << __FILE__ << " line " << __LINE__ << std::endl; + // streamlog_out(ERROR) << "ILDPolygonBarrelMeasLayer::ConvertLCIOTrkHit Not implemented: exit(1) called from " << __FILE__ << " line " << __LINE__ << std::endl; exit(1); } diff --git a/Utilities/KalDet/src/ild/common/ILDPolygonBarrelMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDPolygonBarrelMeasLayer.h index 684bb876..16fa5320 100644 --- a/Utilities/KalDet/src/ild/common/ILDPolygonBarrelMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDPolygonBarrelMeasLayer.h @@ -70,7 +70,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** overloaded version of CalcXingPointWith using closed solution*/ virtual Int_t CalcXingPointWith(const TVTrack &hel, diff --git a/Utilities/KalDet/src/ild/common/ILDRotatedTrapMeaslayer.cc b/Utilities/KalDet/src/ild/common/ILDRotatedTrapMeaslayer.cc index c9f855e0..38b3b56f 100644 --- a/Utilities/KalDet/src/ild/common/ILDRotatedTrapMeaslayer.cc +++ b/Utilities/KalDet/src/ild/common/ILDRotatedTrapMeaslayer.cc @@ -155,12 +155,12 @@ Bool_t ILDRotatedTrapMeaslayer::IsOnSurface(const TVector3 &xx) const } -ILDVTrackHit* ILDRotatedTrapMeaslayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { +ILDVTrackHit* ILDRotatedTrapMeaslayer::ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { //EVENT::TrackerHitPlane* plane_hit = dynamic_cast<EVENT::TrackerHitPlane*>( trkhit ) ; - if(trkhit->getType()!=8) return NULL; + if(trkhit.getType()!=8) return NULL; //if( plane_hit == NULL ) return NULL; // SJA:FIXME: should be replaced with an exception - const edm4hep::Vector3d& pos=trkhit->getPosition(); + const edm4hep::Vector3d& pos=trkhit.getPosition(); const TVector3 hit(pos.x, pos.y, pos.z); // convert to layer coordinates @@ -172,8 +172,8 @@ ILDVTrackHit* ILDRotatedTrapMeaslayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* tr x[0] = h(0, 0); x[1] = h(1, 0); - dx[0] = trkhit->getCovMatrix(2); - dx[1] = trkhit->getCovMatrix(5); + dx[0] = trkhit.getCovMatrix(2); + dx[1] = trkhit.getCovMatrix(5); bool hit_on_surface = IsOnSurface(hit); diff --git a/Utilities/KalDet/src/ild/common/ILDRotatedTrapMeaslayer.h b/Utilities/KalDet/src/ild/common/ILDRotatedTrapMeaslayer.h index 8cb7e4e0..dce3303b 100644 --- a/Utilities/KalDet/src/ild/common/ILDRotatedTrapMeaslayer.h +++ b/Utilities/KalDet/src/ild/common/ILDRotatedTrapMeaslayer.h @@ -57,7 +57,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** Check if global point is on surface */ inline virtual Bool_t IsOnSurface (const TVector3 &xx) const; diff --git a/Utilities/KalDet/src/ild/common/ILDSegmentedDiscMeasLayer.cc b/Utilities/KalDet/src/ild/common/ILDSegmentedDiscMeasLayer.cc index 87cac85c..9fca07c1 100644 --- a/Utilities/KalDet/src/ild/common/ILDSegmentedDiscMeasLayer.cc +++ b/Utilities/KalDet/src/ild/common/ILDSegmentedDiscMeasLayer.cc @@ -124,13 +124,14 @@ TKalMatrix ILDSegmentedDiscMeasLayer::XvToMv(const TVector3 &xv) const // // // mv(1,0) = xv.Y() ; - /* - std::cout << "\t ILDSegmentedDiscMeasLayer::XvToMv: " - << " x = " << xv.X() - << " y = " << xv.Y() - << " z = " << xv.Z() - << std::endl; - */ + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscMeasLayer::XvToMv: " + // << " x = " << xv.X() + // << " y = " << xv.Y() + // << " z = " << xv.Z() + // << std::endl; + + // coordinate matrix to return TKalMatrix mv(ILDPlanarHit_DIM,1); @@ -165,23 +166,24 @@ TKalMatrix ILDSegmentedDiscMeasLayer::XvToMv(const TVector3 &xv) const double v = ( cos_theta * delta_y * cos_phi - cos_theta * delta_x * sin_phi) ; mv(1,0) = v ; - /* - std::cout << "\t ILDSegmentedDiscMeasLayer::XvToMv: phi_sensor = " << phi_sensor << " phi = " << phi << " sign_z = " << sign_z<< std::endl; - std::cout << "\t ILDSegmentedDiscMeasLayer::XvToMv: " - << " mv(0,0) = " << mv(0,0) - << " mv(1,0) = " << mv(1,0) - << std::endl; - */ + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscMeasLayer::XvToMv: phi_sensor = " << phi_sensor << " phi = " << phi << " sign_z = " << sign_z<< std::endl; + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscMeasLayer::XvToMv: " + // << " mv(0,0) = " << mv(0,0) + // << " mv(1,0) = " << mv(1,0) + // << std::endl; + return mv; } -TVector3 ILDSegmentedDiscMeasLayer::HitToXv(const TVTrackHit &vht) const { +TVector3 ILDSegmentedDiscMeasLayer::HitToXv(const TVTrackHit &vht) const +{ - //std::cout << "\t ILDSegmentedDiscMeasLayer::HitToXv: " - // << " vht(0,0) = " << vht(0,0) << " vht(1,0) = " << vht(1,0) << std::endl; + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscMeasLayer::HitToXv: " + // << " vht(0,0) = " << vht(0,0) << " vht(1,0) = " << vht(1,0) << std::endl; const ILDPlanarHit &mv = dynamic_cast<const ILDPlanarHit &>(vht); @@ -191,8 +193,8 @@ TVector3 ILDSegmentedDiscMeasLayer::HitToXv(const TVTrackHit &vht) const { // double z = this->GetXc().Z() ; UTIL::BitField64 encoder( lcio::ILDCellID0::encoder_string ) ; - edm4hep::TrackerHit* hit = mv.getLCIOTrackerHit(); - encoder.setValue(hit->getCellID()); + edm4hep::ConstTrackerHit hit = mv.getLCIOTrackerHit(); + encoder.setValue(hit.getCellID()); int segmentIndex = encoder[lcio::ILDCellID0::module] / 2 ; @@ -223,13 +225,13 @@ TVector3 ILDSegmentedDiscMeasLayer::HitToXv(const TVTrackHit &vht) const { double y = delta_y + sensor_y0; double z = sensor_z0 ; - /* - std::cout << "\t ILDSegmentedDiscMeasLayer::HitToXv: " - << " x = " << x - << " y = " << y - << " z = " << z - << std::endl; - */ + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscMeasLayer::HitToXv: " + // << " x = " << x + // << " y = " << y + // << " z = " << z + // << std::endl; + return TVector3(x,y,z); } @@ -282,20 +284,21 @@ void ILDSegmentedDiscMeasLayer::CalcDhDa(const TVTrackHit &vht, Int_t hdim = TMath::Max(5,sdim-1); // Set H = (@h/@a) = (@d/@a, @z/@a)^t - + + double dudx = cos_phi; double dudy = sin_phi; double dvdx = -cos_theta * sin_phi; double dvdy = cos_theta * cos_phi; - /* - std::cout << "\t ILDSegmentedDiscMeasLayer::CalcDhDa: " - << " dudx = " << dudx - << " dudy = " << dudy - << " dvdx = " << dvdx - << " dvdy = " << dvdy - << std::endl; - */ + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscMeasLayer::CalcDhDa: " + // << " dudx = " << dudx + // << " dudy = " << dudy + // << " dvdx = " << dvdx + // << " dvdy = " << dvdy + // << std::endl; + for (Int_t i=0; i<hdim; i++) { H(0,i) = dudx * dxphiada(0,i) + dudy * dxphiada(1,i) ; @@ -308,6 +311,18 @@ void ILDSegmentedDiscMeasLayer::CalcDhDa(const TVTrackHit &vht, H(1,sdim-1) = 0.; } + + + + + + + + + + + + } @@ -480,19 +495,16 @@ Bool_t ILDSegmentedDiscMeasLayer::IsOnSurface(const TVector3 &xx) const } -ILDVTrackHit* ILDSegmentedDiscMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { +ILDVTrackHit* ILDSegmentedDiscMeasLayer::ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { //EVENT::TrackerHitPlane* plane_hit = dynamic_cast<EVENT::TrackerHitPlane*>( trkhit ) ; + if(trkhit.getType()!=8) { //if( plane_hit == NULL ) { // streamlog_out(ERROR) << "ILDSegmentedDiscMeasLayer::ConvertLCIOTrkHit dynamic_cast to TrackerHitPlane failed " << std::endl; - //return NULL; // SJA:FIXME: should be replaced with an exception - //} - if((trkhit->getType()&8)!=8) { - std::cout << "ILDSegmentedDiscMeasLayer::ConvertLCIOTrkHit dynamic_cast to ILDPlanarHit failed " << std::endl; - throw std::logic_error("Invalid invoke ILDSegmentedDiscMeasLayer by TrackerHit trkhit"); + return NULL; // SJA:FIXME: should be replaced with an exception } // remember here the "position" of the hit in fact defines the origin of the plane it defines so u and v are per definition 0. - const edm4hep::Vector3d& pos=trkhit->getPosition(); + const edm4hep::Vector3d& pos=trkhit.getPosition(); const TVector3 hit(pos.x, pos.y, pos.z) ; // convert to layer coordinates @@ -506,23 +518,23 @@ ILDVTrackHit* ILDSegmentedDiscMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* x[0] = h(0, 0); x[1] = h(1, 0); - dx[0] = trkhit->getCovMatrix(2); - dx[1] = trkhit->getCovMatrix(5); + dx[0] = trkhit.getCovMatrix(2); + dx[1] = trkhit.getCovMatrix(5); bool hit_on_surface = IsOnSurface(hit); - /* - std::cout << "ILDSegmentedDiscMeasLayer::ConvertLCIOTrkHit: ILDPlanarHit created" - << " for CellID " << trkhit->getCellID() - << " u = " << x[0] - << " v = " << x[1] - << " du = " << dx[0] - << " dv = " << dx[1] - << " x = " << pos.x - << " y = " << pos.y - << " z = " << pos.z - << " onSurface = " << hit_on_surface - << std::endl ; - */ + + // streamlog_out(DEBUG1) << "ILDSegmentedDiscMeasLayer::ConvertLCIOTrkHit: ILDPlanarHit created" + // << " for CellID " << trkhit.getCellID() + // << " u = " << x[0] + // << " v = " << x[1] + // << " du = " << dx[0] + // << " dv = " << dx[1] + // << " x = " << pos.x + // << " y = " << pos.y + // << " z = " << pos.z + // << " onSurface = " << hit_on_surface + // << std::endl ; + ILDPlanarHit hh( *this , x, dx, this->GetBz(),trkhit); this->HitToXv(hh); diff --git a/Utilities/KalDet/src/ild/common/ILDSegmentedDiscMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDSegmentedDiscMeasLayer.h index 61335702..6afdc9f8 100644 --- a/Utilities/KalDet/src/ild/common/ILDSegmentedDiscMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDSegmentedDiscMeasLayer.h @@ -77,7 +77,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; /** overloaded version of CalcXingPointWith using closed solution*/ virtual Int_t CalcXingPointWith(const TVTrack &hel, diff --git a/Utilities/KalDet/src/ild/common/ILDSegmentedDiscStripMeasLayer.cc b/Utilities/KalDet/src/ild/common/ILDSegmentedDiscStripMeasLayer.cc index 590032d2..e547982b 100644 --- a/Utilities/KalDet/src/ild/common/ILDSegmentedDiscStripMeasLayer.cc +++ b/Utilities/KalDet/src/ild/common/ILDSegmentedDiscStripMeasLayer.cc @@ -27,13 +27,13 @@ TKalMatrix ILDSegmentedDiscStripMeasLayer::XvToMv(const TVector3 &xv) const { // Calculate measurement vector (hit coordinates) from global coordinates: - /* - std::cout << "\t ILDSegmentedDiscStripMeasLayer::XvToMv: " - << " x = " << xv.X() - << " y = " << xv.Y() - << " z = " << xv.Z() - << std::endl; - */ + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscStripMeasLayer::XvToMv: " + // << " x = " << xv.X() + // << " y = " << xv.Y() + // << " z = " << xv.Z() + // << std::endl; + // let's start with the sensor whose axis of symmetry is // aligned with the y-axis and whose sensitive face is facing towards the IP. // For a zero strip angle then: @@ -87,34 +87,36 @@ TKalMatrix ILDSegmentedDiscStripMeasLayer::XvToMv(const TVector3 &xv) const mv(1,0) = v ; } - /* - std::cout << "\t ILDSegmentedDiscStripMeasLayer::XvToMv: phi_sensor = " << phi_sensor << " phi = " << phi << " stripAngle = " << _stripAngle << " sign_z = " << sign_z<< std::endl; - std::cout << "\t ILDSegmentedDiscStripMeasLayer::XvToMv: " - << " mv(0,0) = " << mv(0,0) ; - if (ILDPlanarStripHit_DIM == 2) { - std::cout << " mv(1,0) = " << mv(1,0); - } - std::cout << std::endl; - */ + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscStripMeasLayer::XvToMv: phi_sensor = " << phi_sensor << " phi = " << phi << " stripAngle = " << _stripAngle << " sign_z = " << sign_z<< std::endl; + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscStripMeasLayer::XvToMv: " + // << " mv(0,0) = " << mv(0,0) ; + // if (ILDPlanarStripHit_DIM == 2) { + // streamlog_out(DEBUG0) << " mv(1,0) = " << mv(1,0); + // } + // streamlog_out(DEBUG0) << std::endl; + return mv; } -TVector3 ILDSegmentedDiscStripMeasLayer::HitToXv(const TVTrackHit &vht) const { - /* - std::cout << "\t ILDSegmentedDiscStripMeasLayer::HitToXv: " - << " vht(0,0) = " << vht(0,0); - if (ILDPlanarStripHit_DIM == 2) { - std::cout << " vht(1,0) = " << vht(1,0); - } - std::cout << std::endl; - */ +TVector3 ILDSegmentedDiscStripMeasLayer::HitToXv(const TVTrackHit &vht) const +{ + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscStripMeasLayer::HitToXv: " + // << " vht(0,0) = " << vht(0,0); + // if (ILDPlanarStripHit_DIM == 2) { + // streamlog_out(DEBUG0) << " vht(1,0) = " << vht(1,0); + // } + // streamlog_out(DEBUG0) << std::endl; + + const ILDPlanarStripHit &mv = dynamic_cast<const ILDPlanarStripHit &>(vht); UTIL::BitField64 encoder( lcio::ILDCellID0::encoder_string ) ; - edm4hep::TrackerHit* hit = mv.getLCIOTrackerHit(); - encoder.setValue(hit->getCellID()); + edm4hep::ConstTrackerHit hit = mv.getLCIOTrackerHit(); + encoder.setValue(hit.getCellID()); int segmentIndex = encoder[lcio::ILDCellID0::module] / 2 ; @@ -124,7 +126,7 @@ TVector3 ILDSegmentedDiscStripMeasLayer::HitToXv(const TVTrackHit &vht) const { double sensor_y0 = XC.Y(); double sensor_z0 = XC.Z(); - ////std::cout << "\t ILDSegmentedDiscStripMeasLayer::HitToXv: segmentIndex = " << segmentIndex << " x0 = " << sensor_x0 << " y0 = " << sensor_y0 << " z0 = " << sensor_z0 << " segment Phi = " << XC.Phi() << std::endl; +// streamlog_out(DEBUG0) << "\t ILDSegmentedDiscStripMeasLayer::HitToXv: segmentIndex = " << segmentIndex << " x0 = " << sensor_x0 << " y0 = " << sensor_y0 << " z0 = " << sensor_z0 << " segment Phi = " << XC.Phi() << std::endl; // here we are assuming that there is no offset of the centre of the sensor in the x-y plane. // SJA:FIXME: We need to get the segment we are in to get phi @@ -159,13 +161,14 @@ TVector3 ILDSegmentedDiscStripMeasLayer::HitToXv(const TVTrackHit &vht) const { double y = delta_y + sensor_y0; double z = sensor_z0 ; - /* - std::cout << "\t ILDSegmentedDiscStripMeasLayer::HitToXv: " - << " x = " << x - << " y = " << y - << " z = " << z - << std::endl; - */ + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscStripMeasLayer::HitToXv: " + // << " x = " << x + // << " y = " << y + // << " z = " << z + // << std::endl; + + return TVector3(x,y,z); } @@ -210,14 +213,14 @@ void ILDSegmentedDiscStripMeasLayer::CalcDhDa(const TVTrackHit &vht, double dvdx = -cos_theta * sin_phi; double dvdy = cos_theta * cos_phi; - /* - std::cout << "\t ILDSegmentedDiscStripMeasLayer::CalcDhDa: " - << " dudx = " << dudx - << " dudy = " << dudy - << " dvdx = " << dvdx - << " dvdy = " << dvdy - << std::endl; - */ + + // streamlog_out(DEBUG0) << "\t ILDSegmentedDiscStripMeasLayer::CalcDhDa: " + // << " dudx = " << dudx + // << " dudy = " << dudy + // << " dvdx = " << dvdx + // << " dvdy = " << dvdy + // << std::endl; + for (Int_t i=0; i<hdim; i++) { H(0,i) = dudx * dxphiada(0,i) + dudy * dxphiada(1,i) ; @@ -239,21 +242,18 @@ void ILDSegmentedDiscStripMeasLayer::CalcDhDa(const TVTrackHit &vht, -ILDVTrackHit* ILDSegmentedDiscStripMeasLayer::ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const { +ILDVTrackHit* ILDSegmentedDiscStripMeasLayer::ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const { //EVENT::TrackerHitPlane* plane_hit = dynamic_cast<EVENT::TrackerHitPlane*>( trkhit ) ; + if(trkhit.getType()!=8){ //if( plane_hit == NULL ) { // streamlog_out(ERROR) << "ILDSegmentedDiscStripMeasLayer::ConvertLCIOTrkHit dynamic_cast to TrackerHitPlane failed " << std::endl; - //return NULL; // SJA:FIXME: should be replaced with an exception - //} - if((trkhit->getType()&8)!=8) { - std::cout << "ILDSegmentedDiscStripMeasLayer::ConvertLCIOTrkHit dynamic_cast to ILDPlanarStripHit failed " << std::endl; - throw std::logic_error("Invalid invoke ILDSegmentedDiscStripMeasLayer by TrackerHit trkhit"); + return NULL; // SJA:FIXME: should be replaced with an exception } // remember here the "position" of the hit in fact defines the origin of the plane it defines so u and v are per definition 0. // this is still the case for a 1-dimentional measurement, and is then used to calculate the u coordinate according to the origin of the actual measurement plane. - const edm4hep::Vector3d& pos=trkhit->getPosition(); + const edm4hep::Vector3d& pos=trkhit.getPosition(); const TVector3 hit(pos[0], pos[1], pos[2]) ; // convert to layer coordinates @@ -267,26 +267,26 @@ ILDVTrackHit* ILDSegmentedDiscStripMeasLayer::ConvertLCIOTrkHit(edm4hep::Tracker x[0] = h(0, 0); if(ILDPlanarStripHit_DIM == 2) x[1] = h(1, 0); - dx[0] = trkhit->getCovMatrix(2); - if(ILDPlanarStripHit_DIM == 2) dx[1] = trkhit->getCovMatrix(5); + dx[0] = trkhit.getCovMatrix(2); + if(ILDPlanarStripHit_DIM == 2) dx[1] = trkhit.getCovMatrix(5); bool hit_on_surface = IsOnSurface(hit); - /* - std::cout << "ILDSegmentedDiscStripMeasLayer::ConvertLCIOTrkHit ILDPlanarStripHit created" - << " for CellID " << trkhit->getCellID() - << " Disc Z = " << this->GetXc().Z() - << " u = " << x[0] - << " du = " << dx[0]; - - if(ILDPlanarStripHit_DIM == 2) std::cout << " v = " << x[1] << " dv = " << dx[1]; - - std::cout << " x = " << hit.x() - << " y = " << hit.y() - << " z = " << hit.z() - << " r = " << hit.Perp() - << " onSurface = " << hit_on_surface - << std::endl ; - */ + + // streamlog_out(DEBUG1) << "ILDSegmentedDiscStripMeasLayer::ConvertLCIOTrkHit ILDPlanarStripHit created" + // << " for CellID " << trkhit.getCellID() + // << " Disc Z = " << this->GetXc().Z() + // << " u = " << x[0] + // << " du = " << dx[0]; + + // if(ILDPlanarStripHit_DIM == 2) streamlog_out(DEBUG1) << " v = " << x[1] << " dv = " << dx[1]; + + // streamlog_out(DEBUG1) << " x = " << hit.x() + // << " y = " << hit.y() + // << " z = " << hit.z() + // << " r = " << hit.Perp() + // << " onSurface = " << hit_on_surface + // << std::endl ; + ILDPlanarStripHit hh( *this , x, dx, this->GetBz(),trkhit); this->HitToXv(hh); diff --git a/Utilities/KalDet/src/ild/common/ILDSegmentedDiscStripMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDSegmentedDiscStripMeasLayer.h index 8bdab668..34a3b203 100644 --- a/Utilities/KalDet/src/ild/common/ILDSegmentedDiscStripMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDSegmentedDiscStripMeasLayer.h @@ -67,7 +67,7 @@ public: TKalMatrix &H) const; /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const ; private: diff --git a/Utilities/KalDet/src/ild/common/ILDVMeasLayer.h b/Utilities/KalDet/src/ild/common/ILDVMeasLayer.h index 3d213b3a..498c5608 100644 --- a/Utilities/KalDet/src/ild/common/ILDVMeasLayer.h +++ b/Utilities/KalDet/src/ild/common/ILDVMeasLayer.h @@ -13,6 +13,7 @@ #include "kaltest/TAttDrawable.h" #include "kaltest/KalTrackDim.h" #include "TString.h" +#include "edm4hep/TrackerHitConst.h" #include <vector> @@ -43,7 +44,7 @@ public: inline Double_t GetBz() const { return _Bz; } /** Convert LCIO Tracker Hit to an ILDPLanarTrackHit */ - virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::TrackerHit* trkhit) const = 0 ; + virtual ILDVTrackHit* ConvertLCIOTrkHit(edm4hep::ConstTrackerHit trkhit) const = 0 ; /** Check whether the measurement layer represents a series of detector elements */ bool isMultilayer() const { return _isMultiLayer; } diff --git a/Utilities/KalDet/src/ild/common/ILDVTrackHit.h b/Utilities/KalDet/src/ild/common/ILDVTrackHit.h index d47be083..89aa42f2 100644 --- a/Utilities/KalDet/src/ild/common/ILDVTrackHit.h +++ b/Utilities/KalDet/src/ild/common/ILDVTrackHit.h @@ -19,15 +19,15 @@ public: /** Constructor Taking coordinates and associated measurement layer, with bfield and number of measurement dimentions*/ ILDVTrackHit(const TVMeasLayer &ms, Double_t *x, Double_t *dx, - Double_t bfield , Int_t dim, edm4hep::TrackerHit* trkhit) + Double_t bfield , Int_t dim, edm4hep::ConstTrackerHit trkhit) : TVTrackHit(ms, x, dx, bfield, dim), _trkhit(trkhit) { /* no op */ } - edm4hep::TrackerHit* getLCIOTrackerHit() const { return _trkhit; } + edm4hep::ConstTrackerHit getLCIOTrackerHit() const { return _trkhit; } private: - edm4hep::TrackerHit* _trkhit; + edm4hep::ConstTrackerHit _trkhit; }; #endif diff --git a/Utilities/KalDet/src/lctpc/gearTPC/GearTPCCylinderMeasLayer.h b/Utilities/KalDet/src/lctpc/gearTPC/GearTPCCylinderMeasLayer.h index 14e60fdf..e20af5be 100644 --- a/Utilities/KalDet/src/lctpc/gearTPC/GearTPCCylinderMeasLayer.h +++ b/Utilities/KalDet/src/lctpc/gearTPC/GearTPCCylinderMeasLayer.h @@ -3,7 +3,7 @@ #include <TVector3.h> #include <kaltest/TKalMatrix.h> #include <kaltest/TCylinder.h> -#include <EXTPCMeasLayer.h> +#include <kaldet/EXTPCMeasLayer.h> //#include <KalTrackDim.h> #include <TMath.h> diff --git a/Utilities/KalTest/cmake/MacroCheckPackageLibs.cmake b/Utilities/KalTest/cmake/MacroCheckPackageLibs.cmake new file mode 100644 index 00000000..c4451b3e --- /dev/null +++ b/Utilities/KalTest/cmake/MacroCheckPackageLibs.cmake @@ -0,0 +1,164 @@ +############################################################################## +# macro for checkin package libraries in ${PKG_ROOT}/lib +# +# +# macro usage: +# CHECK_PACKAGE_LIBS( PACKAGE_NAME stdlib1 stdlib2 ... stdlibn ) +# only standard libraries should be passed as arguments to the macro +# component libraries are set by cmake in PKG_FIND_COMPONENTS (when +# calling FIND_PACKAGE with COMPONENTS argument) or through the +# variable PKG_USE_COMPONENTS +# +# +# required variables: +# PKG_ROOT : path to PKG root directory +# +# +# returns following variables: +# PKG_LIBRARY_DIRS : list of paths to be used with LINK_DIRECTORIES +# PGK_LIBRARIES : list of STANDARD libraries (NOT including COMPONENTS) +# PKG_COMPONENT_LIBRARIES : list of COMPONENT libraries +# PKG_${COMPONENT}_FOUND : set to TRUE or FALSE for each library +# PKG_${COMPONENT}_LIBRARY : path to each individual library +# +# +# PKG_LIBRARIES and PKG_LIBRARY_DIRS will be empty if any of the standard +# libraries is missing +# +# @author Jan Engels, Desy +############################################################################## + + +SET( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE ) + +MACRO( CHECK_PACKAGE_LIBS _pkgname ) + + SET( _std_lib_missing FALSE ) + SET( _ext_lib_missing FALSE ) + + SET( _std_libnames ${ARGN} ) + SET( _ext_libnames ${${_pkgname}_FIND_COMPONENTS} ${${_pkgname}_USE_COMPONENTS} ) + + IF( _ext_libnames ) + SEPARATE_ARGUMENTS( _ext_libnames ) + LIST( REMOVE_DUPLICATES _ext_libnames ) + ENDIF() + + IF( NOT ${_pkgname}_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ${_pkgname}_LIBRARIES: ${_std_libnames}" ) + IF( _ext_libnames ) + MESSAGE( STATUS "Check for ${_pkgname}_COMPONENT_LIBRARIES: ${_ext_libnames}" ) + ENDIF() + ENDIF() + + SET( ${_pkgname}_LIBRARY_DIRS ) + MARK_AS_ADVANCED( ${_pkgname}_LIBRARY_DIRS ) + + SET( ${_pkgname}_LIBRARIES ) + MARK_AS_ADVANCED( ${_pkgname}_LIBRARIES ) + + SET( ${_pkgname}_COMPONENT_LIBRARIES ) + MARK_AS_ADVANCED( ${_pkgname}_COMPONENT_LIBRARIES ) + + SET( ${_pkgname}_COMPONENT_VARIABLES ) + MARK_AS_ADVANCED( ${_pkgname}_COMPONENT_VARIABLES ) + + FOREACH( _libname ${_std_libnames} ${_ext_libnames} ) + + # flag to check if it is a standard or a component library + LIST( FIND _std_libnames "${_libname}" _aux ) + IF( ${_aux} LESS 0 ) + SET( _is_std_lib FALSE ) + ELSE() + SET( _is_std_lib TRUE ) + ENDIF() + + # libname in upper case + STRING( TOUPPER ${_libname} _ulibname ) + + SET( ${_pkgname}_${_ulibname}_LIBRARY ${_pkgname}_${_ulibname}_LIBRARY-NOTFOUND ) + MARK_AS_ADVANCED( ${_pkgname}_${_ulibname}_LIBRARY ) + + # WARNING: using PATH_SUFFIXES may cause problems when using variable CMAKE_FIND_ROOT_PATH + # this problem does not occur if expanding PATHS + # look in FindMySQL.cmake for more info + #FIND_LIBRARY( ${_pkgname}_${_ulibname}_LIBRARY NAMES ${_libname} PATHS + # ${${_pkgname}_ROOT} ${${_pkgname}_DIR} ${${_pkgname}_LIB_SEARCH_PATH} + # PATH_SUFFIXES lib64 lib + # NO_DEFAULT_PATH + #) + + FIND_LIBRARY( ${_pkgname}_${_ulibname}_LIBRARY NAMES ${_libname} PATHS + ${${_pkgname}_ROOT}/lib64 ${${_pkgname}_ROOT}/lib + ${${_pkgname}_DIR}/lib64 ${${_pkgname}_DIR}/lib + ${${_pkgname}_LIB_SEARCH_PATH} ${${_pkgname}_LIB_SEARCH_PATH}/lib64 ${${_pkgname}_LIB_SEARCH_PATH}/lib + NO_DEFAULT_PATH + ) + + IF( NOT ${_pkgname}_DIR ) + FIND_LIBRARY( ${_pkgname}_${_ulibname}_LIBRARY NAMES ${_libname} ) + ENDIF() + + IF( ${_pkgname}_FIND_REQUIRED ) + LIST( APPEND ${_pkgname}_COMPONENT_VARIABLES ${_pkgname}_${_ulibname}_LIBRARY ) + ENDIF() + + IF( ${_pkgname}_${_ulibname}_LIBRARY ) # if library found + + SET( ${_pkgname}_${_ulibname}_FOUND TRUE ) + + # split libraries in PKG_LIBRARIES and PKG_COMPONENT_LIBRARIES + IF( _is_std_lib ) + LIST( APPEND ${_pkgname}_LIBRARIES ${${_pkgname}_${_ulibname}_LIBRARY} ) + ELSE() + LIST( APPEND ${_pkgname}_COMPONENT_LIBRARIES ${${_pkgname}_${_ulibname}_LIBRARY} ) + ENDIF() + + GET_FILENAME_COMPONENT( _aux ${${_pkgname}_${_ulibname}_LIBRARY} PATH ) + LIST( APPEND ${_pkgname}_LIBRARY_DIRS ${_aux} ) + + IF( NOT ${_pkgname}_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ${_pkgname}_${_ulibname}_LIBRARY: ${${_pkgname}_${_ulibname}_LIBRARY} -- ok" ) + ENDIF() + + ELSE() # library not found + + SET( ${_pkgname}_${_ulibname}_FOUND FALSE ) + + IF( _is_std_lib ) + SET( _std_lib_missing TRUE ) + ELSE() + SET( _ext_lib_missing TRUE ) + ENDIF() + + IF( NOT ${_pkgname}_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ${_pkgname}_${_ulibname}_LIBRARY: ${_libname} -- failed" ) + ENDIF() + + ENDIF() + + ENDFOREACH() + + # clear PKG_LIBRARIES if standard library is missing + IF( _std_lib_missing ) + SET( ${_pkgname}_LIBRARIES ) + ENDIF() + + # clear PKG_COMPONENT_LIBRARIES if a component library is missing and + # FIND_PACKAGE called with REQUIRED argument + IF( _ext_lib_missing AND ${_pkgname}_FIND_REQUIRED ) + SET( ${_pkgname}_COMPONENT_LIBRARIES ) + ENDIF() + + # remove duplicate paths in PKG_LIBRARY_DIRS + IF( ${_pkgname}_LIBRARY_DIRS ) + LIST( REMOVE_DUPLICATES ${_pkgname}_LIBRARY_DIRS ) + ENDIF() + + # debug + #MESSAGE( STATUS "${_pkgname}_LIBRARIES: ${${_pkgname}_LIBRARIES}" ) + #MESSAGE( STATUS "${_pkgname}_COMPONENT_LIBRARIES: ${${_pkgname}_COMPONENT_LIBRARIES}" ) + #MESSAGE( STATUS "${_pkgname}_LIBRARY_DIRS: ${${_pkgname}_LIBRARY_DIRS}" ) + +ENDMACRO( CHECK_PACKAGE_LIBS _pkgname ) + diff --git a/Utilities/KalTest/cmake/MacroCheckPackageVersion.cmake b/Utilities/KalTest/cmake/MacroCheckPackageVersion.cmake new file mode 100644 index 00000000..e3ec75d9 --- /dev/null +++ b/Utilities/KalTest/cmake/MacroCheckPackageVersion.cmake @@ -0,0 +1,108 @@ +############################################################################## +# macro for checking a package version +# +# this macro should be called from your PKGVersion.cmake or from a +# FindPKG.cmake module with the following arguments: +# _pkgname : The package name +# _iversion : The installed version of the package +# +# +# the following conventions are used: +# +# if FIND_PACKAGE is called with EXACT argument than the version has to +# match EXACTLY, i.e.: +# 1.5 == 1.5 +# 1.5 == 1.5.0 +# 1.5 == 1.5.0.0 +# 1.5.2 == 1.5.2.0 +# 1.5.2.1 == 1.5.2.1 +# 1.5.2 != 1.5.2.1 +# 1.5 != 1.5.0.1 +# +# +# otherwise a MINIMUM_REQUIRED version is checked for, i.e. the same +# behavior as with the cmake variable CMAKE_MINIMUM_REQUIRED, e.g.: +# searching: 1.2 --> installed: 1.5.2.2 --> compatible +# searching: 1.5 --> installed: 1.5.2.2 --> compatible +# searching: 1.5.2.1 --> installed: 1.5.2.2 --> compatible +# searching: 1.5.2.3 --> installed: 1.5.2.2 --> unsuitable +# searching: 1.7 --> installed: 1.5.2.2 --> unsuitable +# +# +# following variables are returned (internally to cmake): +# PACKAGE_VERSION_EXACT : set to TRUE if exact version was found +# PACKAGE_VERSION_COMPATIBLE : set to TRUE if version is compatible +# PACKAGE_VERSION_UNSUITABLE : set to TRUE if version found is unsuitable +# +# +# @author Jan Engels, Desy IT +############################################################################## + +# these variables are evaluated internally by the cmake command FIND_PACKAGE to mark this +# package as suitable or not depending on the required version +SET( PACKAGE_VERSION_EXACT FALSE ) +SET( PACKAGE_VERSION_COMPATIBLE TRUE ) +SET( PACKAGE_VERSION_UNSUITABLE FALSE ) + + +# cmake internal variable PACKAGE_FIND_NAME is not defined on FindPKG.cmake +# modules, therefore it is passed as an argument to the macro +# _iversion is the installed version of the package +# _sversion is the version searched by the user with FIND_PACKAGE +#MACRO( CHECK_PACKAGE_VERSION _pkgname _iversion ) +MACRO( CHECK_PACKAGE_VERSION _pkgname ) # left with one argument only for backwards compatibility + + IF( NOT "${ARGV1}" STREQUAL "" ) + SET( _iversion ${ARGV1} ) + ELSE() + SET( _iversion ${${_pkgname}_VERSION_MAJOR}.${${_pkgname}_VERSION_MINOR}.${${_pkgname}_VERSION_PATCH}.${${_pkgname}_VERSION_TWEAK} ) + ENDIF() + + #SET( _sversion_major ${${_pkgname}_FIND_VERSION_MAJOR} ) + #SET( _sversion_minor ${${_pkgname}_FIND_VERSION_MINOR} ) + + SET( _sversion ${${_pkgname}_FIND_VERSION} ) + + IF( NOT ${_pkgname}_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ${_pkgname} (${_iversion})" ) + ENDIF() + + # only do work if FIND_PACKAGE called with a version argument + IF( _sversion ) + + #IF( NOT ${_pkgname}_FIND_QUIETLY ) + # MESSAGE( STATUS "Check for ${_pkgname}: looking for version ${_sversion}" ) + #ENDIF() + + IF( ${_iversion} VERSION_EQUAL ${_sversion} ) # if version matches EXACTLY + #IF( NOT ${_pkgname}_FIND_QUIETLY ) + # MESSAGE( STATUS "Check for ${_pkgname}: exact version found: ${_iversion}" ) + #ENDIF() + SET( PACKAGE_VERSION_EXACT TRUE ) + ELSE() # if version does not match EXACTLY, check if it is compatible/suitable + + # installed version must be greater or equal than version searched by the user, i.e. + # like with the CMAKE_MINIMUM_REQUIRED commando + # if user asks for version 1.2.5 then any version >= 1.2.5 is suitable/compatible + IF( NOT ${_sversion} VERSION_LESS ${_iversion} ) + SET( PACKAGE_VERSION_UNSUITABLE TRUE ) + ENDIF() + # ------------------------------------------------------------------------------------- + + IF( ${_pkgname}_FIND_VERSION_EXACT ) # if exact version was required search must fail!! + #IF( NOT ${_pkgname}_FIND_QUIETLY ) + # MESSAGE( "Check for ${_pkgname}: could not find exact version" ) + #ENDIF() + SET( PACKAGE_VERSION_UNSUITABLE TRUE ) + ENDIF() + + ENDIF() + + IF( PACKAGE_VERSION_UNSUITABLE ) + SET( PACKAGE_VERSION_COMPATIBLE FALSE ) + ENDIF() + + ENDIF( _sversion ) + +ENDMACRO( CHECK_PACKAGE_VERSION ) + diff --git a/Utilities/KalTest/cmake/MacroRootDict.cmake b/Utilities/KalTest/cmake/MacroRootDict.cmake new file mode 100644 index 00000000..ed7747fd --- /dev/null +++ b/Utilities/KalTest/cmake/MacroRootDict.cmake @@ -0,0 +1,145 @@ +IF(APPLE) + SET( LD_LIBRARY_PATH_VAR DYLD_LIBRARY_PATH ) +ELSE() + SET( LD_LIBRARY_PATH_VAR LD_LIBRARY_PATH ) +ENDIF() +SET( LD_LIBRARY_PATH_CONTENTS $ENV{${LD_LIBRARY_PATH_VAR}} ) +#MESSAGE( STATUS "LD_LIBRARY_PATH_CONTENTS: ${LD_LIBRARY_PATH_CONTENTS}" ) +#MESSAGE( STATUS "ROOT_CINT_EXECUTABLE: ${ROOT_CINT_EXECUTABLE}" ) + +SET( ROOT_CINT_WRAPPER ${LD_LIBRARY_PATH_VAR}=${ROOT_LIBRARY_DIR}:${LD_LIBRARY_PATH_CONTENTS} ${ROOT_CINT_EXECUTABLE} ) + +IF( NOT DEFINED ROOT_DICT_OUTPUT_DIR ) + SET( ROOT_DICT_OUTPUT_DIR "${PROJECT_BINARY_DIR}/rootdict" ) +ENDIF() + +# clean generated header files with 'make clean' +SET_DIRECTORY_PROPERTIES( PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ROOT_DICT_OUTPUT_DIR}" ) + +IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ROOT_DICT_OUTPUT_DIR: ${PROJECT_BINARY_DIR}/rootdict" ) + MESSAGE( STATUS "Check for ROOT_DICT_CINT_DEFINITIONS: ${ROOT_DICT_CINT_DEFINITIONS}" ) +ENDIF() + + +# ============================================================================ +# helper macro to prepare input headers for GEN_ROOT_DICT_SOURCES +# sorts LinkDef.h to be the last header (required by rootcint) +# +# arguments: +# input_dir - directory to search for headers matching *.h +# +# returns: +# ROOT_DICT_INPUT_HEADERS - all header files found in input_dir with +# LinkDef.h as the last header (if found) +# +# ---------------------------------------------------------------------------- +MACRO( PREPARE_ROOT_DICT_HEADERS _input_dir ) + + FILE( GLOB ROOT_DICT_INPUT_HEADERS "${_input_dir}/*.h" ) + FILE( GLOB _linkdef_hdr "${_input_dir}/LinkDef.h" ) + + #LIST( FIND ROOT_DICT_INPUT_HEADERS ${_linkdef_hdr} _aux ) + #IF( ${_aux} EQUAL 0 OR ${_aux} GREATER 0 ) + # LIST( REMOVE_ITEM ROOT_DICT_INPUT_HEADERS "${_linkdef_hdr}" ) + # LIST( APPEND ROOT_DICT_INPUT_HEADERS "${_linkdef_hdr}" ) + #ENDIF() + + IF( _linkdef_hdr ) + LIST( REMOVE_ITEM ROOT_DICT_INPUT_HEADERS "${_linkdef_hdr}" ) + LIST( APPEND ROOT_DICT_INPUT_HEADERS "${_linkdef_hdr}") + ENDIF() + + #MESSAGE( STATUS "ROOT_DICT_INPUT_HEADERS: ${ROOT_DICT_INPUT_HEADERS}" ) + +ENDMACRO( PREPARE_ROOT_DICT_HEADERS ) + + + +# ============================================================================ +# helper macro to generate Linkdef.h files for rootcint +# +# arguments: +# namespace - prefix used for creating header <namespace>_Linkdef.h +# ARGN - list of sources to be used for generating Linkdef.h +# +# returns: +# ROOT_DICT_INPUT_HEADERS - all header files + <namespace>_LinkDef.h in the +# correct order to be used by macro GEN_ROOT_DICT_SOURCES +# +# ---------------------------------------------------------------------------- +MACRO( GEN_ROOT_DICT_LINKDEF_HEADER _namespace ) + + SET( _input_headers ${ARGN} ) + SET( _linkdef_header "${ROOT_DICT_OUTPUT_DIR}/${_namespace}_Linkdef.h" ) + + FOREACH( _header ${_input_headers} ) + SET( ${_namespace}_file_contents "${${_namespace}_file_contents}\\#pragma link C++ defined_in \\\"${_header}\\\"\\;\\\\n" ) + ENDFOREACH() + + ADD_CUSTOM_COMMAND( + OUTPUT ${_linkdef_header} + COMMAND mkdir -p ${ROOT_DICT_OUTPUT_DIR} + COMMAND printf "${${_namespace}_file_contents}" > ${_linkdef_header} + DEPENDS ${_input_headers} + COMMENT "generating: ${_linkdef_header}" + ) + + SET( ROOT_DICT_INPUT_HEADERS ${_input_headers} ${_linkdef_header} ) + +ENDMACRO() + + +# ============================================================================ +# macro for generating root dict sources with rootcint +# +# arguments: +# dict_src_filename - filename of the dictionary source (to be generated) +# +# requires following variables: +# ROOT_DICT_INPUT_HEADERS - list of headers needed to generate dict source +# * if LinkDef.h is in the list it must be at the end !! +# ROOT_DICT_INCLUDE_DIRS - list of include dirs to pass to rootcint -I.. +# ROOT_DICT_CINT_DEFINITIONS - extra definitions to pass to rootcint +# ROOT_DICT_OUTPUT_DIR - where dictionary source should be generated +# +# returns: +# ROOT_DICT_OUTPUT_SOURCES - list containing generated source and other +# previously generated sources + +# ---------------------------------------------------------------------------- +MACRO( GEN_ROOT_DICT_SOURCE _dict_src_filename ) + + # TODO check for ROOT_CINT_EXECUTABLE + + # need to prefix all include dirs with -I + set( _dict_includes ) + FOREACH( _inc ${ROOT_DICT_INCLUDE_DIRS} ) + SET( _dict_includes "${_dict_includes}\t-I${_inc}") #fg: the \t fixes a wired string expansion + #SET( _dict_includes ${_dict_includes} -I${_inc} ) + ENDFOREACH() + + STRING( REPLACE "/" "_" _dict_src_filename_nosc ${_dict_src_filename} ) + SET( _dict_src_file ${ROOT_DICT_OUTPUT_DIR}/${_dict_src_filename_nosc} ) + STRING( REGEX REPLACE "^(.*)\\.(.*)$" "\\1.h" _dict_hdr_file "${_dict_src_file}" ) + #message("${ROOT_DICT_INPUT_HEADERS}") + ADD_CUSTOM_COMMAND( + OUTPUT ${_dict_src_file} ${_dict_hdr_file} + COMMAND mkdir -p ${ROOT_DICT_OUTPUT_DIR} + COMMAND ${ROOT_CINT_WRAPPER} -f "${_dict_src_file}" -c ${ROOT_DICT_CINT_DEFINITIONS} ${_dict_includes} ${ROOT_DICT_INPUT_HEADERS} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + DEPENDS ${ROOT_DICT_INPUT_HEADERS} + COMMENT "generating: ${_dict_src_file} ${_dict_hdr_file}" + ) + LIST( APPEND ROOT_DICT_OUTPUT_SOURCES ${_dict_src_file} ) + +ENDMACRO() + +# for backwards compatibility +MACRO( GEN_ROOT_DICT_SOURCES _dict_src_filename ) + #MESSAGE( "USING DEPRECATED GEN_ROOT_DICT_SOURCES. PLEASE USE GEN_ROOT_DICT_SOURCE instead." ) + SET( ROOT_DICT_OUTPUT_SOURCES ) + GEN_ROOT_DICT_SOURCE( ${_dict_src_filename} ) +ENDMACRO() +# ============================================================================ + diff --git a/Utilities/KalTest/cmake/MyFindROOT.cmake b/Utilities/KalTest/cmake/MyFindROOT.cmake new file mode 100644 index 00000000..567ce159 --- /dev/null +++ b/Utilities/KalTest/cmake/MyFindROOT.cmake @@ -0,0 +1,316 @@ +############################################################################### +# cmake module for finding ROOT +# +# requires: +# MacroCheckPackageLibs.cmake for checking package libraries +# +# Following cmake variables are returned by this module: +# +# ROOT_FOUND : set to TRUE if ROOT found +# If FIND_PACKAGE is called with REQUIRED and COMPONENTS arguments +# ROOT_FOUND is only set to TRUE if ALL components are found. +# If REQUIRED is NOT set components may or may not be available +# +# ROOT_LIBRARIES : list of ROOT libraries (NOT including COMPONENTS) +# ROOT_INCLUDE_DIRS : list of paths to be used with INCLUDE_DIRECTORIES +# ROOT_LIBRARY_DIRS : list of paths to be used with LINK_DIRECTORIES +# ROOT_COMPONENT_LIBRARIES : list of ROOT component libraries +# ROOT_${COMPONENT}_FOUND : set to TRUE or FALSE for each library +# ROOT_${COMPONENT}_LIBRARY : path to individual libraries +# +# +# Please note that by convention components should be entered exactly as +# the library names, i.e. the component name equivalent to the library +# $ROOTSYS/lib/libMathMore.so should be called MathMore and NOT: +# mathmore or Mathmore or MATHMORE +# +# However to follow the usual cmake convention it is agreed that the +# ROOT_${COMPONENT}_FOUND and ROOT_${COMPONENT}_LIBRARY variables are ALL +# uppercase, i.e. the MathMore component returns: ROOT_MATHMORE_FOUND and +# ROOT_MATHMORE_LIBRARY NOT ROOT_MathMore_FOUND or ROOT_MathMore_LIBRARY +# +# +# The additional ROOT components should be defined as follows: +# FIND_PACKAGE( ROOT COMPONENTS MathMore Gdml Geom ...) +# +# If components are required use: +# FIND_PACKAGE( ROOT REQUIRED COMPONENTS MathMore Gdml Geom ...) +# +# If only root is required and components are NOT required use: +# FIND_PACKAGE( ROOT REQUIRED ) +# FIND_PACKAGE( ROOT COMPONENTS MathMore Gdml Geom ... QUIET ) +# then you need to check for ROOT_MATHMORE_FOUND, ROOT_GDML_FOUND, etc. +# +# The variable ROOT_USE_COMPONENTS can also be used before calling +# FIND_PACKAGE, i.e.: +# SET( ROOT_USE_COMPONENTS MathMore Gdml Geom ) +# FIND_PACKAGE( ROOT REQUIRED ) # all ROOT_USE_COMPONENTS must also be found +# FIND_PACKAGE( ROOT ) # check for ROOT_FOUND, ROOT_MATHMORE_FOUND, etc. +# +# @author Jan Engels, DESY +############################################################################### + +# ============================================== +# === ROOT_CONFIG_EXECUTABLE === +# ============================================== + +SET( ROOT_CONFIG_EXECUTABLE ROOT_CONFIG_EXECUTABLE-NOTFOUND ) +MARK_AS_ADVANCED( ROOT_CONFIG_EXECUTABLE ) +# FIND_PROGRAM: Once one of the calls succeeds the result variable will be set and stored in the cache so that no call will search again. +FIND_PROGRAM( ROOT_CONFIG_EXECUTABLE root-config PATHS ${ROOT_DIR}/bin NO_DEFAULT_PATH ) +FIND_PROGRAM( ROOT_CONFIG_EXECUTABLE root-config PATHS $ENV{ROOTSYS}/bin NO_DEFAULT_PATH) +FIND_PROGRAM( ROOT_CONFIG_EXECUTABLE root-config PATHS ENV PATH ) +FIND_PROGRAM( ROOT_CONFIG_EXECUTABLE root-config ) + +IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ROOT_CONFIG_EXECUTABLE: ${ROOT_CONFIG_EXECUTABLE}" ) +ENDIF() + +IF( ROOT_CONFIG_EXECUTABLE ) + + + # ============================================== + # === ROOT_VERSION === + # ============================================== + + INCLUDE( MacroCheckPackageVersion ) + + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --version + OUTPUT_VARIABLE _version + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( _exit_code EQUAL 0 ) + + # set required variables for MacroCheckPackageVersion + STRING(REGEX REPLACE "^([0-9]+).*" "\\1" ROOT_VERSION_MAJOR "${_version}") + STRING(REGEX REPLACE "^[0-9]+.([0-9]+).*" "\\1" ROOT_VERSION_MINOR "${_version}") + STRING(REGEX REPLACE "^[0-9]+.[0-9]+.([0-9]+).*" "\\1" ROOT_VERSION_PATCH "${_version}") + + SET( ROOT_VERSION "${ROOT_VERSION_MAJOR}.${ROOT_VERSION_MINOR}.${ROOT_VERSION_PATCH}" ) + ENDIF() + + CHECK_PACKAGE_VERSION( ROOT ${ROOT_VERSION} ) + + + + # ============================================== + # === ROOT_PREFIX === + # ============================================== + + # get root prefix from root-config output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --prefix + OUTPUT_VARIABLE ROOT_PREFIX + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( NOT _exit_code EQUAL 0 ) + # clear variable if root-config exits with error + # it might contain garbage + SET( ROOT_PREFIX ) + ENDIF() + + # PKG_ROOT variables are a cmake standard + # since this package is also called ROOT the variable name + # becomes ROOT_ROOT ... + SET( ROOT_ROOT ${ROOT_PREFIX} ) + + + + # ============================================== + # === ROOT_BIN_DIR === + # ============================================== + + # get bindir from root-config output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --bindir + OUTPUT_VARIABLE ROOT_BIN_DIR + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( NOT _exit_code EQUAL 0 ) + # clear variable if root-config exits with error + # it might contain garbage + SET( ROOT_BIN_DIR ) + ENDIF() + + + + # ============================================== + # === ROOT_EXECUTABLE === + # ============================================== + + + SET( ROOT_EXECUTABLE ROOT_EXECUTABLE-NOTFOUND ) + MARK_AS_ADVANCED( ROOT_EXECUTABLE ) + FIND_PROGRAM( ROOT_EXECUTABLE root PATHS ${ROOT_BIN_DIR} NO_DEFAULT_PATH ) + + IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ROOT_EXECUTABLE: ${ROOT_EXECUTABLE}" ) + ENDIF() + + + + + # ============================================== + # === ROOT_CINT_EXECUTABLE === + # ============================================== + + + # find rootcint + SET( ROOT_CINT_EXECUTABLE ROOT_CINT_EXECUTABLE-NOTFOUND ) + MARK_AS_ADVANCED( ROOT_CINT_EXECUTABLE ) + FIND_PROGRAM( ROOT_CINT_EXECUTABLE rootcint PATHS ${ROOT_BIN_DIR} NO_DEFAULT_PATH ) + + IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for ROOT_CINT_EXECUTABLE: ${ROOT_CINT_EXECUTABLE}" ) + ENDIF() + + + + # ============================================== + # === ROOT_INCLUDE_DIR === + # ============================================== + + # get include dir from root-config output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --incdir + OUTPUT_VARIABLE _inc_dir + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( NOT _exit_code EQUAL 0 ) + # clear variable if root-config exits with error + # it might contain garbage + SET( _inc_dir ) + ENDIF() + + + SET( ROOT_INCLUDE_DIRS ROOT_INCLUDE_DIRS-NOTFOUND ) + MARK_AS_ADVANCED( ROOT_INCLUDE_DIRS ) + + FIND_PATH( ROOT_INCLUDE_DIRS + NAMES TH1.h + PATHS ${ROOT_DIR}/include ${_inc_dir} + NO_DEFAULT_PATH + ) + + + + # ============================================== + # === ROOT_LIBRARIES === + # ============================================== + + # get library dir from root-config output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --libdir + OUTPUT_VARIABLE ROOT_LIBRARY_DIR + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( NOT _exit_code EQUAL 0 ) + # clear variable if root-config exits with error + # it might contain garbage + SET( ROOT_LIBRARY_DIR ) + ENDIF() + + + + # ========== standard root libraries ================= + + # standard root libraries (without components) + SET( _root_libnames ) + + # get standard root libraries from 'root-config --libs' output + EXECUTE_PROCESS( COMMAND "${ROOT_CONFIG_EXECUTABLE}" --noauxlibs --libs + OUTPUT_VARIABLE _aux + RESULT_VARIABLE _exit_code + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF( _exit_code EQUAL 0 ) + + # create a list out of the output + SEPARATE_ARGUMENTS( _aux ) + + # remove first item -L compiler flag + LIST( REMOVE_AT _aux 0 ) + + FOREACH( _lib ${_aux} ) + + # extract libnames from -l compiler flags + STRING( REGEX REPLACE "^-.(.*)$" "\\1" _libname "${_lib}") + + # fix for some root-config versions which export -lz even if using --noauxlibs + IF( NOT _libname STREQUAL "z" ) + + # append all library names into a list + LIST( APPEND _root_libnames ${_libname} ) + + ENDIF() + + ENDFOREACH() + + ENDIF() + + + + # ========== additional root components ================= + + #LIST( APPEND ROOT_FIND_COMPONENTS Minuit2 ) # DEPRECATED !!! + + + # ---------- libraries -------------------------------------------------------- + INCLUDE( MacroCheckPackageLibs ) + + SET( ROOT_LIB_SEARCH_PATH ${ROOT_LIBRARY_DIR} ) + + # only standard libraries should be passed as arguments to CHECK_PACKAGE_LIBS + # additional components are set by cmake in variable PKG_FIND_COMPONENTS + # first argument should be the package name + CHECK_PACKAGE_LIBS( ROOT ${_root_libnames} ) + + + + + # ====== DL LIBRARY ================================================== + # workaround for cmake bug in 64 bit: + # see: http://public.kitware.com/mantis/view.php?id=10813 + IF( CMAKE_SIZEOF_VOID_P EQUAL 8 ) + FIND_LIBRARY( DL_LIB NAMES ${CMAKE_DL_LIBS} dl PATHS /usr/lib64 /lib64 NO_DEFAULT_PATH ) + ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 ) + + FIND_LIBRARY( DL_LIB NAMES ${CMAKE_DL_LIBS} dl ) + MARK_AS_ADVANCED( DL_LIB ) + + IF( NOT ROOT_FIND_QUIETLY ) + MESSAGE( STATUS "Check for libdl.so: ${DL_LIB}" ) + ENDIF() + +ENDIF( ROOT_CONFIG_EXECUTABLE ) + +# Threads library +#FIND_PACKAGE( Threads REQUIRED) + + +# ---------- final checking --------------------------------------------------- +INCLUDE( FindPackageHandleStandardArgs ) +# set ROOT_FOUND to TRUE if all listed variables are TRUE and not empty +# ROOT_COMPONENT_VARIABLES will be set if FIND_PACKAGE is called with REQUIRED argument +FIND_PACKAGE_HANDLE_STANDARD_ARGS( ROOT DEFAULT_MSG ROOT_INCLUDE_DIRS ROOT_LIBRARIES ${ROOT_COMPONENT_VARIABLES} PACKAGE_VERSION_COMPATIBLE DL_LIB ) + +IF( ROOT_FOUND ) + LIST( APPEND ROOT_LIBRARIES ${DL_LIB} ) + # FIXME DEPRECATED + SET( ROOT_DEFINITIONS "-DUSEROOT -DUSE_ROOT -DMARLIN_USE_ROOT" ) + MARK_AS_ADVANCED( ROOT_DEFINITIONS ) + + # file including MACROS for generating root dictionary sources + GET_FILENAME_COMPONENT( _aux ${CMAKE_CURRENT_LIST_FILE} PATH ) + SET( ROOT_DICT_MACROS_FILE ${_aux}/MacroRootDict.cmake ) + +ENDIF( ROOT_FOUND ) + +# ---------- cmake bug -------------------------------------------------------- +# ROOT_FIND_REQUIRED is not reset between FIND_PACKAGE calls, i.e. the following +# code fails when geartgeo component not available: (fixed in cmake 2.8) +# FIND_PACKAGE( ROOT REQUIRED ) +# FIND_PACKAGE( ROOT COMPONENTS geartgeo QUIET ) +SET( ROOT_FIND_REQUIRED ) + diff --git a/Utilities/KiTrack/Tools/KiTrackMarlinTools.h b/Utilities/KiTrack/Tools/KiTrackMarlinTools.h index f4b58292..c137684e 100644 --- a/Utilities/KiTrack/Tools/KiTrackMarlinTools.h +++ b/Utilities/KiTrack/Tools/KiTrackMarlinTools.h @@ -79,7 +79,7 @@ FTDHitSimple* createVirtualIPHit( int side , const SectorSystemFTD* sectorSystem VXDHitSimple* createVirtualIPHit( const SectorSystemVXD* sectorSystemVXD ); -std::string getPositionInfo( edm4hep::ConstTrackerHit* hit ); +std::string getPositionInfo( edm4hep::ConstTrackerHit hit ); std::string getPositionInfo( IHit* hit ); diff --git a/Utilities/KiTrack/src/Tools/FTDHelixFitter.cc b/Utilities/KiTrack/src/Tools/FTDHelixFitter.cc index 2f0492a0..219770d3 100644 --- a/Utilities/KiTrack/src/Tools/FTDHelixFitter.cc +++ b/Utilities/KiTrack/src/Tools/FTDHelixFitter.cc @@ -24,7 +24,7 @@ FTDHelixFitter::FTDHelixFitter( edm4hep::Track* track ){ //int nHits = track->trackerHits_size(); std::copy(track->trackerHits_begin(), track->trackerHits_end(), std::back_inserter(_trackerHits)); //for(int i=0;i<nHits;i++){ - // edm4hep::ConstTrackerHit* hit = &track->getTrackerHits(i); + // edm4hep::ConstTrackerHit hit = &track->getTrackerHits(i); // _trackerHits.push_back(hit); //} fit(); diff --git a/Utilities/KiTrack/src/Tools/Fitter.cc b/Utilities/KiTrack/src/Tools/Fitter.cc index 13ae3aab..512c4a22 100644 --- a/Utilities/KiTrack/src/Tools/Fitter.cc +++ b/Utilities/KiTrack/src/Tools/Fitter.cc @@ -33,13 +33,13 @@ void Fitter::init_BField(){ } -bool compare_TrackerHit_z( edm4hep::TrackerHit* a, edm4hep::TrackerHit* b ){ - return ( fabs(a->getPosition()[2]) < fabs( b->getPosition()[2]) ); //compare their z values +bool compare_TrackerHit_z( edm4hep::ConstTrackerHit a, edm4hep::ConstTrackerHit b ){ + return ( fabs(a.getPosition()[2]) < fabs( b.getPosition()[2]) ); //compare their z values } -bool compare_TrackerHit_R( edm4hep::TrackerHit* a, edm4hep::TrackerHit* b ){ - double Rad_a2 = (a->getPosition()[0]*a->getPosition()[0]) + (a->getPosition()[1]*a->getPosition()[1]) ; - double Rad_b2 = (b->getPosition()[0]*b->getPosition()[0]) + (b->getPosition()[1]*b->getPosition()[1]) ; +bool compare_TrackerHit_R( edm4hep::ConstTrackerHit a, edm4hep::ConstTrackerHit b ){ + double Rad_a2 = (a.getPosition()[0]*a.getPosition()[0]) + (a.getPosition()[1]*a.getPosition()[1]) ; + double Rad_b2 = (b.getPosition()[0]*b.getPosition()[0]) + (b.getPosition()[1]*b.getPosition()[1]) ; return ( Rad_a2 < Rad_b2 ); //compare their radii } @@ -84,21 +84,21 @@ void Fitter::fitVXD(){ unsigned number_of_added_hits = 0; unsigned ndof_added = 0; - std::vector< edm4hep::TrackerHit* > added_hits; - std::vector< edm4hep::TrackerHit* > added_hits_2D; + std::vector< edm4hep::ConstTrackerHit > added_hits; + std::vector< edm4hep::ConstTrackerHit > added_hits_2D; for( it = _trackerHits.begin() ; it != _trackerHits.end() ; ++it ) { - edm4hep::TrackerHit* trkHit = Navigation::Instance()->GetTrackerHit((*it).getObjectID()); + edm4hep::ConstTrackerHit trkHit = Navigation::Instance()->GetTrackerHit((*it).getObjectID()); bool isSuccessful = false; - if( UTIL::BitSet32( trkHit->getType() )[ UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ] ){ //it is a composite spacepoint + if( UTIL::BitSet32( trkHit.getType() )[ UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ] ){ //it is a composite spacepoint //Split it up and hits to the MarlinTrk - std::vector< edm4hep::TrackerHit* > rawHits; - //const LCObjectVec rawObjects = trkHit->getRawHits(); - //for( unsigned k=0; k<rawObjects.size(); k++ ) rawHits.push_back( dynamic_cast< TrackerHit* >( rawObjects[k] ) ); - int nRawHit = trkHit->rawHits_size(); + std::vector< edm4hep::ConstTrackerHit > rawHits; + //const LCObjectVec rawObjects = trkHit.getRawHits(); + //for( unsigned k=0; k<rawObjects.size(); k++ ) rawHits.push_back( dynamic_cast< ConstTrackerHit >( rawObjects[k] ) ); + int nRawHit = trkHit.rawHits_size(); for( unsigned k=0; k< nRawHit; k++ ){ - edm4hep::TrackerHit* rawHit = Navigation::Instance()->GetTrackerHit(trkHit->getRawHits(k)); + edm4hep::ConstTrackerHit rawHit = Navigation::Instance()->GetTrackerHit(trkHit.getRawHits(k)); rawHits.push_back(rawHit); } std::sort( rawHits.begin(), rawHits.end(), compare_TrackerHit_R ); @@ -142,7 +142,7 @@ void Fitter::fitVXD(){ for (unsigned ihit=0; ihit <added_hits.size(); ++ihit) { // check if this a space point or 2D hit - if(UTIL::BitSet32( added_hits[ihit]->getType() )[ UTIL::ILDTrkHitTypeBit::ONE_DIMENSIONAL ] == false ){ + if(UTIL::BitSet32( added_hits[ihit].getType() )[ UTIL::ILDTrkHitTypeBit::ONE_DIMENSIONAL ] == false ){ // then add to the list added_hits_2D.push_back(added_hits[ihit]); @@ -151,9 +151,9 @@ void Fitter::fitVXD(){ // initialise with space-points not strips // make a helix from 3 hits to get a trackstate - const edm4hep::Vector3d x1 = added_hits_2D[0]->getPosition(); - const edm4hep::Vector3d x2 = added_hits_2D[ added_hits_2D.size()/2 ]->getPosition(); - const edm4hep::Vector3d x3 = added_hits_2D.back()->getPosition(); + const edm4hep::Vector3d x1 = added_hits_2D[0].getPosition(); + const edm4hep::Vector3d x2 = added_hits_2D[ added_hits_2D.size()/2 ].getPosition(); + const edm4hep::Vector3d x3 = added_hits_2D.back().getPosition(); init_BField(); HelixTrack helixTrack( x1, x2, x3, _bField, HelixTrack::forwards ); @@ -223,7 +223,7 @@ void Fitter::fitVXD(){ // fitting finished get hits in the fit for safety checks: - std::vector<std::pair<edm4hep::TrackerHit*, double> > hits_in_fit; + std::vector<std::pair<edm4hep::ConstTrackerHit, double> > hits_in_fit; // remember the hits are ordered in the order in which they were fitted // here we are fitting inwards so the first is the last and vice verse @@ -240,14 +240,14 @@ void Fitter::fitVXD(){ throw FitterException( s.str() ); } - edm4hep::TrackerHit* first_hit_in_fit = hits_in_fit.back().first; - if (!first_hit_in_fit) { + edm4hep::ConstTrackerHit first_hit_in_fit = hits_in_fit.back().first; + if (! first_hit_in_fit.isAvailable()) { throw FitterException( std::string("Fitter::fit(): TrackerHit pointer to first hit == NULL ") ) ; } - edm4hep::TrackerHit* last_hit_in_fit = hits_in_fit.front().first; - if (!last_hit_in_fit) { + edm4hep::ConstTrackerHit last_hit_in_fit = hits_in_fit.front().first; + if (!last_hit_in_fit.isAvailable()) { throw FitterException( std::string("Fitter::fit(): TrackerHit pointer to last hit == NULL ") ) ; } @@ -275,21 +275,21 @@ void Fitter::fit(){ unsigned number_of_added_hits = 0; unsigned ndof_added = 0; - std::vector<edm4hep::TrackerHit*> added_hits; + std::vector<edm4hep::ConstTrackerHit> added_hits; for( it = _trackerHits.begin() ; it != _trackerHits.end() ; ++it ) { - edm4hep::TrackerHit* trkHit = Navigation::Instance()->GetTrackerHit((*it).getObjectID()); + edm4hep::ConstTrackerHit trkHit = Navigation::Instance()->GetTrackerHit((*it).getObjectID()); bool isSuccessful = false; - //std::cout << "Hit " << trkHit->id() << " " << trkHit->getPosition() << std::endl; - if( UTIL::BitSet32( trkHit->getType() )[ UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ] ){ //it is a composite spacepoint + //std::cout << "Hit " << trkHit->id() << " " << trkHit.getPosition() << std::endl; + if( UTIL::BitSet32( trkHit.getType() )[ UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ] ){ //it is a composite spacepoint //Split it up and hits to the MarlinTrk - std::vector<edm4hep::TrackerHit*> rawHits; - //const LCObjectVec rawObjects = trkHit->getRawHits(); - //for( unsigned k=0; k<rawObjects.size(); k++ ) rawHits.push_back( dynamic_cast< TrackerHit* >( rawObjects[k] ) ); - int nRawHit = trkHit->rawHits_size(); + std::vector<edm4hep::ConstTrackerHit> rawHits; + //const LCObjectVec rawObjects = trkHit.getRawHits(); + //for( unsigned k=0; k<rawObjects.size(); k++ ) rawHits.push_back( dynamic_cast< ConstTrackerHit >( rawObjects[k] ) ); + int nRawHit = trkHit.rawHits_size(); for( unsigned k=0; k< nRawHit; k++ ){ - edm4hep::TrackerHit* rawHit = Navigation::Instance()->GetTrackerHit(trkHit->getRawHits(k)); - //std::cout << "Raw Hit " << rawHit->id() << " " << rawHit->getPosition() << std::endl; + edm4hep::ConstTrackerHit rawHit = Navigation::Instance()->GetTrackerHit(trkHit.getRawHits(k)); + //std::cout << "Raw Hit " << rawHit->id() << " " << rawHit.getPosition() << std::endl; rawHits.push_back(rawHit); } std::sort( rawHits.begin(), rawHits.end(), compare_TrackerHit_z ); @@ -334,9 +334,9 @@ void Fitter::fit(){ // initialise with space-points not strips // make a helix from 3 hits to get a trackstate - const edm4hep::Vector3d x1 = added_hits[0]->getPosition(); - const edm4hep::Vector3d x2 = added_hits[ added_hits.size()/2 ]->getPosition(); - const edm4hep::Vector3d x3 = added_hits.back()->getPosition(); + const edm4hep::Vector3d x1 = added_hits[0].getPosition(); + const edm4hep::Vector3d x2 = added_hits[ added_hits.size()/2 ].getPosition(); + const edm4hep::Vector3d x3 = added_hits.back().getPosition(); init_BField(); HelixTrack helixTrack( x1, x2, x3, _bField, HelixTrack::forwards ); @@ -396,7 +396,7 @@ void Fitter::fit(){ // fitting finished get hits in the fit for safety checks: - std::vector<std::pair<edm4hep::TrackerHit*, double> > hits_in_fit; + std::vector<std::pair<edm4hep::ConstTrackerHit, double> > hits_in_fit; // remember the hits are ordered in the order in which they were fitted // here we are fitting inwards so the first is the last and vice verse @@ -410,13 +410,13 @@ void Fitter::fit(){ throw FitterException( s.str() ); } - edm4hep::TrackerHit* first_hit_in_fit = hits_in_fit.back().first; - if (!first_hit_in_fit) { + edm4hep::ConstTrackerHit first_hit_in_fit = hits_in_fit.back().first; + if (!first_hit_in_fit.isAvailable()) { throw FitterException( std::string("Fitter::fit(): TrackerHit pointer to first hit == NULL ") ) ; } - edm4hep::TrackerHit* last_hit_in_fit = hits_in_fit.front().first; - if (!last_hit_in_fit) { + edm4hep::ConstTrackerHit last_hit_in_fit = hits_in_fit.front().first; + if (!last_hit_in_fit.isAvailable()) { throw FitterException( std::string("Fitter::fit(): TrackerHit pointer to last hit == NULL ") ) ; } @@ -478,13 +478,13 @@ const TrackStatePlus* Fitter::getTrackStatePlus( int trackStateLocation ){ } } case 2/*lcio::TrackState::AtFirstHit*/:{ - std::vector<std::pair<edm4hep::TrackerHit*, double> > hits_in_fit; + std::vector<std::pair<edm4hep::ConstTrackerHit, double> > hits_in_fit; // remember the hits are ordered in the order in which they were fitted // here we are fitting inwards so the first is the last and vice verse _marlinTrk->getHitsInFit(hits_in_fit); - edm4hep::TrackerHit* first_hit_in_fit = hits_in_fit.back().first; + edm4hep::ConstTrackerHit first_hit_in_fit = hits_in_fit.back().first; return_code = _marlinTrk->getTrackState(first_hit_in_fit, *trackState, chi2, ndf ) ; @@ -506,10 +506,10 @@ const TrackStatePlus* Fitter::getTrackStatePlus( int trackStateLocation ){ } } case 3/*lcio::TrackState::AtLastHit*/:{ - std::vector<std::pair<edm4hep::TrackerHit*, double> > hits_in_fit; + std::vector<std::pair<edm4hep::ConstTrackerHit, double> > hits_in_fit; _marlinTrk->getHitsInFit(hits_in_fit); - edm4hep::TrackerHit* last_hit_in_fit = hits_in_fit.front().first; + edm4hep::ConstTrackerHit last_hit_in_fit = hits_in_fit.front().first; return_code = _marlinTrk->getTrackState(last_hit_in_fit, *trackState, chi2, ndf ) ; @@ -531,10 +531,10 @@ const TrackStatePlus* Fitter::getTrackStatePlus( int trackStateLocation ){ break; } case 4/*lcio::TrackState::AtCalorimeter*/:{ - std::vector<std::pair<edm4hep::TrackerHit*, double> > hits_in_fit; + std::vector<std::pair<edm4hep::ConstTrackerHit, double> > hits_in_fit; _marlinTrk->getHitsInFit(hits_in_fit); - edm4hep::TrackerHit* last_hit_in_fit = hits_in_fit.front().first; + edm4hep::ConstTrackerHit last_hit_in_fit = hits_in_fit.front().first; UTIL::BitField64 encoder( UTIL::ILDCellID0::encoder_string ) ; encoder.reset() ; // reset to 0 diff --git a/Utilities/KiTrack/src/Tools/KiTrackMarlinTools.cc b/Utilities/KiTrack/src/Tools/KiTrackMarlinTools.cc index 7bb007c9..235f724d 100644 --- a/Utilities/KiTrack/src/Tools/KiTrackMarlinTools.cc +++ b/Utilities/KiTrack/src/Tools/KiTrackMarlinTools.cc @@ -150,8 +150,8 @@ void KiTrackMarlin::saveToRoot( std::string rootFileName, std::string treeName , } -//bool KiTrackMarlin::compare_TrackerHit_z( edm4hep::ConstTrackerHit* a, edm4hep::ConstTrackerHit* b ){ -// return ( fabs(a->getPosition()[2]) < fabs( b->getPosition()[2]) ); //compare their z values +//bool KiTrackMarlin::compare_TrackerHit_z( edm4hep::ConstTrackerHit a, edm4hep::ConstTrackerHit b ){ +// return ( fabs(a.getPosition()[2]) < fabs( b.getPosition()[2]) ); //compare their z values //} bool KiTrackMarlin::compare_TrackerHit_z( edm4hep::ConstTrackerHit& a, edm4hep::ConstTrackerHit& b ){ @@ -197,13 +197,13 @@ VXDHitSimple* KiTrackMarlin::createVirtualIPHit( const SectorSystemVXD* sectorSy } -std::string KiTrackMarlin::getPositionInfo( edm4hep::ConstTrackerHit* hit ){ +std::string KiTrackMarlin::getPositionInfo( edm4hep::ConstTrackerHit hit ){ std::stringstream info; - double x = hit->getPosition()[0]; - double y = hit->getPosition()[1]; - double z = hit->getPosition()[2]; + double x = hit.getPosition()[0]; + double y = hit.getPosition()[1]; + double z = hit.getPosition()[2]; info << "(" << x << "," << y << "," << z << ")"; @@ -245,11 +245,11 @@ std::string KiTrackMarlin::getTrackHitInfo( ITrack* track){ std::string KiTrackMarlin::getTrackHitInfo( edm4hep::Track* track){ std::stringstream info; - //std::vector< edm4hep::TrackerHit* > hits; + //std::vector< edm4hep::ConstTrackerHit > hits; unsigned int nHits = track->trackerHits_size(); for(unsigned i=0; i<nHits; i++){ edm4hep::ConstTrackerHit hit = track->getTrackerHits(i); - info << getPositionInfo(&hit); + info << getPositionInfo(hit); } //for( unsigned i=0; i < hits.size(); i++ ){ diff --git a/Utilities/KiTrack/src/Tools/VXDHelixFitter.cc.bak b/Utilities/KiTrack/src/Tools/VXDHelixFitter.cc.bak index 515a8029..3da4ca1b 100644 --- a/Utilities/KiTrack/src/Tools/VXDHelixFitter.cc.bak +++ b/Utilities/KiTrack/src/Tools/VXDHelixFitter.cc.bak @@ -13,7 +13,7 @@ #include "Tools/KiTrackMarlinTools.h" -VXDHelixFitter::VXDHelixFitter( std::vector< TrackerHit* > trackerHits ){ +VXDHelixFitter::VXDHelixFitter( std::vector< ConstTrackerHit > trackerHits ){ _trackerHits = trackerHits; @@ -31,7 +31,7 @@ VXDHelixFitter::VXDHelixFitter( Track* track ){ void VXDHelixFitter::fit(){ - std::vector< TrackerHit* > trackerHits2D ; + std::vector< ConstTrackerHit > trackerHits2D ; for (unsigned ihit=0; ihit <_trackerHits.size(); ++ihit) { @@ -76,11 +76,11 @@ void VXDHelixFitter::fit(){ for( int i=0; i<nHits; i++ ){ - TrackerHit* hit = trackerHits2D[i]; + ConstTrackerHit hit = trackerHits2D[i]; - xh[i] = hit->getPosition()[0]; - yh[i] = hit->getPosition()[1]; - zh[i] = float(hit->getPosition()[2]); + xh[i] = hit.getPosition()[0]; + yh[i] = hit.getPosition()[1]; + zh[i] = float(hit.getPosition()[2]); //wrh[i] = double(1.0/(hit->getResolutionRPhi()*hit->getResolutionRPhi())); //wzh[i] = 1.0/(hit->getResolutionZ()*hit->getResolutionZ()); diff --git a/Utilities/KiTrack/src/Tools/VXDHelixFitter.h b/Utilities/KiTrack/src/Tools/VXDHelixFitter.h index cf066262..d0c84383 100644 --- a/Utilities/KiTrack/src/Tools/VXDHelixFitter.h +++ b/Utilities/KiTrack/src/Tools/VXDHelixFitter.h @@ -47,7 +47,7 @@ class VXDHelixFitter{ public: VXDHelixFitter( edm4hep::Track* track ) ; - VXDHelixFitter( std::vector < edm4hep::TrackerHit* > trackerHits ) ; + VXDHelixFitter( std::vector < edm4hep::ConstTrackerHit > trackerHits ) ; double getChi2(){ return _chi2; } @@ -74,7 +74,7 @@ private: float _d0; float _z0; - std::vector< edm4hep::TrackerHit* > _trackerHits; + std::vector< edm4hep::ConstTrackerHit > _trackerHits; }; -- GitLab