45 Commits

Author SHA1 Message Date
AndreaRigoni
54997fe0ac fix mismatch Origin - Position 2025-09-25 17:34:23 +02:00
AndreaRigoni
fc909da400 fix export to Vti 2025-09-23 18:21:11 +02:00
b0240dc807 Merge pull request #1 from OpenCMT/andrea-dev
Andrea dev
2025-09-18 13:12:12 +02:00
AndreaRigoni
591cc9d8bc add version 0.6 - make external build possible 2025-09-05 18:04:54 +02:00
AndreaRigoni
2e401f6fc5 add posibility to compile in build directory 2025-09-04 16:12:38 +02:00
AndreaRigoni
91abd56587 fix Root needs for C++17 2025-09-04 16:11:57 +02:00
AndreaRigoni
01ff8a0a0d update 2025-09-02 13:01:55 +02:00
AndreaRigoni
b86e27a9c4 add VTK save early 2025-09-02 12:42:46 +02:00
Paolo Andreetto
820730bc84 New root dicts 2023-09-01 14:14:06 +02:00
Paolo Andreetto
06c363ab8c Workaround for CentOS7 2023-04-04 16:31:30 +02:00
Paolo Andreetto
b7c775ee35 Error handling 2023-02-22 11:20:56 +01:00
Paolo Andreetto
7bc4932d09 Missing component for VTK 2023-02-20 16:10:10 +01:00
Paolo Andreetto
8832f47e75 Fixed build for VTK on alma9 2023-02-20 16:08:30 +01:00
Paolo Andreetto
043a44150c New writer class for the skin detector 2023-02-17 14:35:31 +01:00
Paolo Andreetto
fce2a39393 Changed version 2023-01-17 10:36:34 +01:00
Paolo Andreetto
d223a3a308 Restored classes for Castor 2023-01-17 10:36:05 +01:00
Paolo Andreetto
843a2d69cf Removed structures for Castor and muBlast 2020-09-29 15:23:08 +02:00
Paolo Andreetto
a60a21bfe4 Massive reorganization of CMake files 2020-06-29 14:44:26 +02:00
Paolo Andreetto
9d899928b8 Bug fixed for MacOD: removed macro 2020-04-28 13:34:07 +02:00
Paolo Andreetto
c9d3eac038 Moved class from mutom-g4-castor 2020-03-16 15:38:11 +01:00
Paolo Andreetto
27dab10434 Changed rpm structure 2020-03-13 15:23:18 +01:00
Paolo Andreetto
8666283a8a Restored Root lib 2020-03-12 11:41:22 +01:00
Paolo Andreetto
89d333632c Fixed header files 2019-12-19 13:56:09 +00:00
Paolo Andreetto
3236b9e599 New classes for new algorithm 2019-12-19 13:52:32 +00:00
Paolo Andreetto
192529aa78 New classes for absorption 2019-12-19 10:47:28 +01:00
Paolo Andreetto
884f5ca084 Changes for jenkins 2019-12-19 10:29:55 +01:00
Paolo Andreetto
6b43046fb6 Removed Pimpl in Vtk 2019-08-07 10:08:13 +00:00
Paolo Andreetto
621084fbfc Removed dependencies from Core lib 2019-08-07 09:10:36 +00:00
Paolo Andreetto
38c61a4e9b Removed uLib::Vector 2019-07-31 09:16:53 +00:00
Paolo Andreetto
52d574e317 Fixed unit tests 2019-07-15 08:28:09 +00:00
Paolo Andreetto
8fe8311483 Cmake property for rpm release number 2019-06-05 13:33:06 +00:00
Paolo Andreetto
d6448ea42f Re-inserted detector header files 2019-06-05 11:56:19 +00:00
Paolo Andreetto
51ef9d05f0 Fixed dependency in header file 2019-06-04 11:49:15 +00:00
Paolo Andreetto
701d89d030 Removed dependency from ltk 2019-06-04 08:52:05 +00:00
Paolo Andreetto
841091a591 Removed ltk and Detectors from build 2019-06-03 12:15:03 +00:00
Paolo Andreetto
d02a095028 Removed macros.h and pimpl 2019-05-10 13:22:00 +00:00
Paolo Andreetto
c00e4a6382 Fixes for doxygen and unit tests 2019-05-10 09:08:26 +00:00
Paolo Andreetto
f8cb48d051 No static link in lib 2019-03-26 15:36:34 +01:00
Paolo Andreetto
9fa51cdc3b Target for doxygen 2019-01-23 14:02:13 +01:00
Paolo Andreetto
19865a7c8c Label for jenkins wn 2019-01-21 14:27:35 +01:00
Paolo Andreetto
8d8cc285a5 New workaround for packages 2019-01-21 11:50:27 +01:00
Paolo Andreetto
e8b99dd0d5 CMake module for rpms 2018-12-11 14:19:23 +01:00
Paolo Andreetto
a8672e8620 Skeleton for jenkins file 2018-12-10 14:04:14 +01:00
b02399cb21 Update README.md 2018-04-19 18:02:24 +02:00
Sara Vanini
e49eb6a484 Create README.md
DOI added
2018-04-19 13:53:17 +02:00
93 changed files with 2447 additions and 1478 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
CMakeFiles/
build/

View File

@@ -15,16 +15,16 @@ set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "build path for
mark_as_advanced(EXECUTABLE_OUTPUT_PATH)
## Install directories ##
set(PACKAGE_INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables")
set(PACKAGE_INSTALL_LIB_DIR lib/${PACKAGE_NAME} CACHE PATH "Installation directory for libraries")
set(PACKAGE_INSTALL_INC_DIR include/${PACKAGE_NAME} CACHE PATH "Installation directory for headers")
set(PACKAGE_INSTALL_DATA_DIR share/${PACKAGE_NAME} CACHE PATH "Installation directory for data files")
set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables")
set(INSTALL_LIB_DIR lib/${PACKAGE_NAME} CACHE PATH "Installation directory for libraries")
set(INSTALL_INC_DIR include/${PACKAGE_NAME} CACHE PATH "Installation directory for headers")
set(INSTALL_DATA_DIR share/${PACKAGE_NAME} CACHE PATH "Installation directory for data files")
if(WIN32 AND NOT CYGWIN)
set(DEF_INSTALL_CMAKE_DIR CMake)
else()
set(DEF_INSTALL_CMAKE_DIR lib/cmake/${PACKAGE_NAME})
endif()
set(PACKAGE_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")
set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")
# Make relative paths absolute (needed later on)
foreach(p LIB BIN INC DATA CMAKE)
@@ -58,7 +58,7 @@ endif()
set(CMAKE_CXX_WARNING_OPTION "" CACHE STRING "Warning level -WAll to verbose all warnings")
set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE STRING "Verbose compile output switch")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x ${CMAKE_CXX_WARNING_OPTION}")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x ${CMAKE_CXX_WARNING_OPTION}")

View File

@@ -16,12 +16,6 @@ set(BOOST_PP_VARIADICS ON)
message(STATUS "PROJECT NAME = ${PROJECT_NAME}")
message(STATUS "PACKAGE VERSION = ${PACKAGE_VERSION}")
message(STATUS "PACKAGE NAME = ${PACKAGE_NAME}")
execute_process(COMMAND "svnversion"
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE SVN_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE )
message(STATUS "SVN REVISION = ${SVN_REVISION}")
CHECK_INCLUDE_FILES(inittypes.h HAVE_INITTYPES_H)
CHECK_INCLUDE_FILES(stdbool.h HAVE_STDBOOL_H)

View File

@@ -13,7 +13,7 @@ set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.45.0 COMPONENTS serialization signals program_options REQUIRED)
find_package(Boost 1.45.0 COMPONENTS program_options REQUIRED)
if(Boost_FOUND)
set(HAVE_BOOST true)
endif(Boost_FOUND)
@@ -75,36 +75,36 @@ endif(ULIB_USE_VTK)
## GEANT ##
option(ULIB_USE_GEANT4 "Activate use of GEANT Integration" ON)
message(STATUS "## GEANT 4 ##")
#include(FindGEANT4) # disabled using system finder
find_package(Geant4)
set(GEANT4_FOUND Geant4_DIR)
if(GEANT4_FOUND AND ULIB_USE_GEANT4)
message(STATUS "Looking for Geant4... - Geant4 found in ${Geant4_DIR}")
set(HAVE_GEANT4 true)
include_directories(${Geant4_INCLUDE_DIRS}) # Add -I type paths
add_definitions(${Geant4_DEFINITIONS}) # Add -D type defs
debug_package(Geant4)
endif(GEANT4_FOUND AND ULIB_USE_GEANT4)
#option(ULIB_USE_GEANT4 "Activate use of GEANT Integration" ON)
#message(STATUS "## GEANT 4 ##")
##include(FindGEANT4) # disabled using system finder
#find_package(Geant4)
#set(GEANT4_FOUND Geant4_DIR)
#if(GEANT4_FOUND AND ULIB_USE_GEANT4)
# message(STATUS "Looking for Geant4... - Geant4 found in ${Geant4_DIR}")
# set(HAVE_GEANT4 true)
# include_directories(${Geant4_INCLUDE_DIRS}) # Add -I type paths
# add_definitions(${Geant4_DEFINITIONS}) # Add -D type defs
# debug_package(Geant4)
#endif(GEANT4_FOUND AND ULIB_USE_GEANT4)
## QT4 ##
option(ULIB_USE_QT4 "Activate use of Qt Framework" ON)
if(ULIB_USE_QT4)
message(STATUS "## QT4 ##")
find_package(Qt4)
# include_directories(${Qt4_INCLUDE_DIRS})
# debug(Qt4_INCLUDE_DIRS)
endif(ULIB_USE_QT4)
#option(ULIB_USE_QT4 "Activate use of Qt Framework" ON)
#if(ULIB_USE_QT4)
# message(STATUS "## QT4 ##")
# find_package(Qt4)
## include_directories(${Qt4_INCLUDE_DIRS})
## debug(Qt4_INCLUDE_DIRS)
#endif(ULIB_USE_QT4)
## QT5 ##
option(ULIB_USE_QT5 "Activate use of Qt Framework" ON)
if(ULIB_USE_QT5)
message(STATUS "## QT5 ##")
find_package(Qt5Widgets)
# include_directories(${Qt5_INCLUDE_DIRS})
# debug(Qt5_INCLUDE_DIRS)
endif(ULIB_USE_QT5)
#option(ULIB_USE_QT5 "Activate use of Qt Framework" ON)
#if(ULIB_USE_QT5)
# message(STATUS "## QT5 ##")
# find_package(Qt5Widgets)
## include_directories(${Qt5_INCLUDE_DIRS})
## debug(Qt5_INCLUDE_DIRS)
#endif(ULIB_USE_QT5)
## READLINE ##
message(STATUS "## READLINE ##")

View File

@@ -0,0 +1,97 @@
find_package(Doxygen)
set(doxydirlist "")
foreach(modname ${ULIB_SELECTED_MODULES})
set(doxydirlist "${CMAKE_CURRENT_SOURCE_DIR}/src/${modname} ${doxydirlist}")
endforeach(modname)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg
"PROJECT_NAME=${CMAKE_PROJECT_NAME}-${PACKAGE_VERSION}\n"
"OUTPUT_DIRECTORY=${CMAKE_CURRENT_BINARY_DIR}\n"
"CREATE_SUBDIRS=NO\n"
"OUTPUT_LANGUAGE=English\n"
"BRIEF_MEMBER_DESC=YES\n"
"REPEAT_BRIEF=YES\n"
"ALWAYS_DETAILED_SEC=NO\n"
"INLINE_INHERITED_MEMB=NO\n"
"STRIP_FROM_INC_PATH=${CMAKE_CURRENT_SOURCE_DIR}/src\n"
"FULL_PATH_NAMES=YES\n"
"STRIP_FROM_PATH=${CMAKE_CURRENT_SOURCE_DIR}/src\n"
"SHORT_NAMES=NO\n"
"MULTILINE_CPP_IS_BRIEF=NO\n"
"INHERIT_DOCS=YES\n"
"DISTRIBUTE_GROUP_DOC=NO\n"
"OPTIMIZE_OUTPUT_FOR_C=YES\n"
"SUBGROUPING=YES\n"
"EXTRACT_ALL=YES\n"
"EXTRACT_PRIVATE=NO\n"
"EXTRACT_STATIC=NO\n"
"EXTRACT_LOCAL_CLASSES=YES\n"
"EXTRACT_LOCAL_METHODS=NO\n"
"HIDE_UNDOC_MEMBERS=NO\n"
"HIDE_UNDOC_CLASSES=NO\n"
"HIDE_FRIEND_COMPOUNDS=NO\n"
"HIDE_IN_BODY_DOCS=NO\n"
"INTERNAL_DOCS=NO\n"
"CASE_SENSE_NAMES=NO\n"
"HIDE_SCOPE_NAMES=NO\n"
"SHOW_INCLUDE_FILES=YES\n"
"INLINE_INFO=YES\n"
"SORT_MEMBER_DOCS=YES\n"
"SORT_BRIEF_DOCS=NO\n"
"SORT_BY_SCOPE_NAME=NO\n"
"GENERATE_TODOLIST=YES\n"
"GENERATE_TESTLIST=YES\n"
"GENERATE_BUGLIST=YES\n"
"GENERATE_DEPRECATEDLIST=YES\n"
"MAX_INITIALIZER_LINES=30\n"
"SHOW_USED_FILES=YES\n"
"QUIET=YES\n"
"WARNINGS=NO\n"
"WARN_IF_UNDOCUMENTED=YES\n"
"WARN_IF_DOC_ERROR=YES\n"
"WARN_FORMAT=\"$file:$line: $text\"\n"
"INPUT=${doxydirlist}\n"
"FILE_PATTERNS=*.h *.hpp\n"
"ENABLE_PREPROCESSING=YES\n"
"MACRO_EXPANSION=YES\n"
"RECURSIVE=YES\n"
"EXCLUDE_SYMLINKS=NO\n"
"FILTER_SOURCE_FILES=NO\n"
"SOURCE_BROWSER=NO\n"
"INLINE_SOURCES=NO\n"
"STRIP_CODE_COMMENTS=YES\n"
"REFERENCED_BY_RELATION=YES\n"
"REFERENCES_RELATION=YES\n"
"VERBATIM_HEADERS=YES\n"
"ALPHABETICAL_INDEX=YES\n"
"COLS_IN_ALPHA_INDEX=5\n"
"GENERATE_HTML=YES\n"
"HTML_OUTPUT=html\n"
"HTML_FILE_EXTENSION=.html\n"
"GENERATE_HTMLHELP=NO\n"
"BINARY_TOC=NO\n"
"TOC_EXPAND=NO\n"
"DISABLE_INDEX=NO\n"
"ENUM_VALUES_PER_LINE=4\n"
"GENERATE_TREEVIEW=YES\n"
"TREEVIEW_WIDTH=250\n"
"GENERATE_LATEX=NO\n"
"GENERATE_RTF=NO\n"
"GENERATE_MAN=NO\n"
"GENERATE_XML=NO\n"
"GENERATE_AUTOGEN_DEF=NO\n"
"GENERATE_PERLMOD=NO\n")
option(NODOXYGEN "Disable the creation of the API documentation")
if(NODOXYGEN OR (NOT DOXYGEN_FOUND))
message("Doxygen is disabled or not installed")
else(NODOXYGEN OR (NOT DOXYGEN_FOUND))
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
COMMAND doxygen ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg)
add_custom_target(doxygen ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/index.html)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
DESTINATION share/doc/${PACKAGE_NAME})
endif(NODOXYGEN OR (NOT DOXYGEN_FOUND))

View File

@@ -28,26 +28,28 @@ macro(uLib_add_shared_library name)
set(ULIB_SHARED_LIBRARIES ${shared} PARENT_SCOPE)
source_group("${project_name}\\${name}" FILES ${SOURCES})
set_target_properties(${mname} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION}
INTERFACE_LINK_LIBRARIES "${LIBRARIES}"
LINK_INTERFACE_LIBRARIES "${LIBRARIES}" ## <- ok for cmake from 2.12 ?
IMPORTED_LINK_INTERFACE_LIBRARIES "${LIBRARIES}" ## <- breaks cmake after 2.11 ?
# PUBLIC_HEADER ""
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION}
# INTERFACE_LINK_LIBRARIES "${LIBRARIES}"
# LINK_INTERFACE_LIBRARIES "${LIBRARIES}" ## <- ok for cmake from 2.12 ?
# IMPORTED_LINK_INTERFACE_LIBRARIES "${LIBRARIES}" ## <- breaks cmake after 2.11 ?
# PUBLIC_HEADER ""
)
debug(LIBRARIES)
target_link_libraries(${mname} ${LIBRARIES})
install(TARGETS ${mname}
EXPORT "${PROJECT_NAME}Targets"
RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin
LIBRARY DESTINATION ${PACKAGE_INSTALL_LIB_DIR} COMPONENT lib
# PUBLIC_HEADER DESTINATION ${PACKAGE_INSTALL_INC_DIR} COMPONENT dev
RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib
# PUBLIC_HEADER DESTINATION ${INSTALL_INC_DIR} COMPONENT dev
)
endif(SOURCES)
if(HEADERS)
foreach(header ${HEADERS})
install(FILES ${header} DESTINATION ${PACKAGE_INSTALL_INC_DIR}/${name})
install(FILES ${header} DESTINATION ${INSTALL_INC_DIR}/${name})
endforeach(header)
endif(HEADERS)
@@ -68,7 +70,7 @@ macro(uLib_add_target name)
install(TARGETS ${name}
EXPORT "${PROJECT_NAME}Targets"
RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin
RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
)
ENDMACRO(uLib_add_target)
@@ -79,25 +81,17 @@ ENDMACRO(uLib_add_target)
# TESTS and LIBRARIES must be defined
macro(uLib_add_tests name)
foreach(tn ${TESTS})
add_executable(${tn} EXCLUDE_FROM_ALL ${tn}.cpp)
add_test(${tn} ${tn})
foreach(tn ${TESTS})
add_executable(${tn} EXCLUDE_FROM_ALL ${tn}.cpp)
add_test(NAME ${tn} COMMAND ${tn})
# adds dependencies to all selected modules in uLib
# foreach(module ${ULIB_SELECTED_MODULES})
# add_dependencies(${tn} ${project_name}${module})
# endforeach(module)
target_link_libraries(${tn} ${LIBRARIES})
# adds libraries dependencies
foreach(library ${LIBRARIES})
target_link_libraries(${tn} ${library})
endforeach(library)
endforeach(tn)
endforeach(tn)
# custom target to compile all tests
add_custom_target(all-${name}-tests)
add_dependencies(all-${name}-tests ${TESTS})
# custom target to compile all tests
add_custom_target(all-${name}-tests)
add_dependencies(all-${name}-tests ${TESTS})
endmacro(uLib_add_tests name)

View File

@@ -3,12 +3,7 @@
##### CMAKE LISTS ##############################################################
################################################################################
cmake_minimum_required (VERSION 2.6)
execute_process(COMMAND "clear")
message("//////////////////////////////////////////////////////////////////////")
message("/////////////////// CMAKE PJOJECT CONFIGURATION //////////////////////")
message("//////////////////////////////////////////////////////////////////////")
cmake_minimum_required (VERSION 3.26)
## -------------------------------------------------------------------------- ##
@@ -16,7 +11,7 @@ project(uLib)
# The version number.
set(PROJECT_VERSION_MAJOR 0)
set(PROJECT_VERSION_MINOR 2)
set(PROJECT_VERSION_MINOR 6)
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
set(PROJECT_SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
@@ -31,207 +26,243 @@ set(PACKAGE_AUTHOR "Andrea Rigoni Garola <andrea.rigoni@pd.infn.it>")
set(ULIB_CMAKE_DIR "${PROJECT_SOURCE_DIR}/CMake")
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
message(STATUS "Module path: ${CMAKE_MODULE_PATH}")
include(uLibMacros)
include(uLibDebugMacro)
include(uLibTargetMacros)
include(uLibGenerateRMake)
message(STATUS "Project name = ${PROJECT_NAME}")
message(STATUS "Package name = ${PACKAGE_NAME}")
message(STATUS "Package version = ${PACKAGE_VERSION}")
message(STATUS "Module path = ${CMAKE_MODULE_PATH}")
## GLOBALS ------------------------------------------------------------------ ##
include(uLibCommon)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ") ## Add flags here ##
# -- move to GnuInstallDirs
# ref: https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
include(GNUInstallDirs)
set(INSTALL_INC_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${PACKAGE_NAME}
CACHE PATH "Location of header files (.../include)" )
set(INSTALL_ETC_DIR ${CMAKE_INSTALL_SYSCONFDIR}/${PACKAGE_NAME}
CACHE PATH "Location of configuration files (.../etc)" )
set(INSTALL_BIN_DIR ${CMAKE_INSTALL_BINDIR}/${PACKAGE_NAME}
CACHE PATH "Location of executable files (.../bin)" )
set(INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR}
CACHE PATH "Location of library files (.../lib)" )
set(INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PACKAGE_NAME}
CACHE PATH "Location of cmake files (.../lib/cmake)" )
set(INSTALL_DATA_DIR ${CMAKE_INSTALL_DATADIR}/${PACKAGE_NAME}
CACHE PATH "Location of data files (.../share)" )
set(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
# this is used to be exported in build target
# ( to compile against build directory instead of install )
set(ULIB_SOURCE_DIR ${PROJECT_SOURCE_DIR})
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'Release' as none was specified.")
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-as-needed")
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
set(CMAKE_CXX_WARNING_OPTION ""
CACHE STRING "Warning level -WAll to verbose all warnings")
set(CMAKE_VERBOSE_MAKEFILE FALSE
CACHE STRING "Verbose compile output switch")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_WARNING_OPTION}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -UULIB_SERIALIZATION_ON")
# CTEST framework
enable_testing()
## FIND PACKAGES ------------------------------------------------------------ ##
include(uLibFindDependencies)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.45.0 COMPONENTS program_options REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
find_package(Eigen3 CONFIG REQUIRED)
include(${EIGEN3_USE_FILE})
find_package(ROOT CONFIG REQUIRED)
include(${ROOT_USE_FILE})
find_package(VTK REQUIRED)
# include(${VTK_USE_FILE})
option(CENTOS_SUPPORT "VTK definitions for CentOS" OFF)
if(CENTOS_SUPPORT)
find_package(VTK CONFIG REQUIRED)
include(${VTK_USE_FILE})
else()
find_package(VTK REQUIRED
COMPONENTS CommonColor
CommonCore
FiltersCore
FiltersModeling
FiltersSources
IOLegacy
IOXML
IOXMLParser
ImagingCore
InteractionStyle
InteractionWidgets
RenderingAnnotation
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
RenderingVolumeOpenGL2)
endif()
set(CMAKE_REQUIRED_INCLUDES CMAKE_REQUIRED_INCLUDES math.h)
set(CMAKE_REQUIRED_LIBRARIES CMAKE_REQUIRED_LIBRARIES m)
## CONFIG ------------------------------------------------------------------- ##
include(uLibConfigHeader)
set(BOOST_PP_VARIADICS ON)
include(CheckIncludeFiles)
include(CheckFunctionExists)
include(CheckSymbolExists)
CHECK_INCLUDE_FILES(inittypes.h HAVE_INITTYPES_H)
CHECK_INCLUDE_FILES(stdbool.h HAVE_STDBOOL_H)
CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
CHECK_INCLUDE_FILES(stdlib.h HAVE_STDLIB_H)
CHECK_INCLUDE_FILES(dlfcn.h HAVE_DLFCN_H)
CHECK_INCLUDE_FILES(malloc.h HAVE_MALLOC_H)
CHECK_FUNCTION_EXISTS(malloc HAVE_MALLOC)
CHECK_INCLUDE_FILES(memory.h HAVE_MEMORY_H)
CHECK_INCLUDE_FILES(math.h HAVE_MATH_H)
CHECK_FUNCTION_EXISTS(fsetround HAVE_FSETROUND)
CHECK_FUNCTION_EXISTS(floor HAVE_FLOOR)
CHECK_FUNCTION_EXISTS(pow HAVE_POW)
CHECK_FUNCTION_EXISTS(sqrt HAVE_SQRT)
CHECK_FUNCTION_EXISTS(strdup HAVE_STRDUP)
CHECK_FUNCTION_EXISTS(strstr HAVE_STRSTR)
CHECK_INCLUDE_FILES(strings.h HAVE_STRINGS_H)
CHECK_INCLUDE_FILES(string.h HAVE_STRING_H)
CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
CHECK_INCLUDE_FILES(assert.h HAVE_ASSERT_H)
configure_file("${PROJECT_SOURCE_DIR}/CMakeConfig.in.h"
"${PROJECT_BINARY_DIR}/config.h")
install(FILES "${PROJECT_BINARY_DIR}/config.h"
DESTINATION ${INSTALL_INC_DIR})
## ADD LIBRARIES SUBDIRECTORIES --------------------------------------------- ##
## select modules ##
set(ULIB_SELECTED_MODULES
ltk
Core
Math
Detectors
Root
)
include_directories(${PROJECT_BINARY_DIR})
include_directories(${SRC_DIR})
## uLib_add_shared_library puts names there
set(ULIB_SHARED_LIBRARIES)
## select modules ##
set(ULIB_SELECTED_MODULES)
if(ULIB_USE_VTK)
LIST(APPEND ULIB_SELECTED_MODULES Vtk)
endif(ULIB_USE_VTK)
include_directories(${SRC_DIR}/Core)
add_subdirectory(${SRC_DIR}/Core)
## this gets ulib modules into a variable ##
function(uLib_modules result)
set(out)
foreach(module ${ULIB_SELECTED_MODULES})
list(APPEND out ${PACKAGE_LIBPREFIX}${module})
endforeach(module)
set(${result} "${out}" PARENT_SCOPE)
endfunction()
include_directories(${SRC_DIR}/Math)
add_subdirectory(${SRC_DIR}/Math)
include_directories(${SRC_DIR}/Detectors)
add_subdirectory(${SRC_DIR}/Detectors)
## ENTERING MODULES SUBDIRECTORIES ##
message("/////////// SELECTED MODULES //////////////")
foreach(module ${ULIB_SELECTED_MODULES})
message(STATUS "adding module: ${module}")
set( uLib-module ${module})
include_directories(${SRC_DIR}/${module})
add_subdirectory(${SRC_DIR}/${module})
endforeach(module)
include_directories(${SRC_DIR}/Root)
add_subdirectory(${SRC_DIR}/Root)
## SINGLE LIBRARY LINKING ## (work in progress ... )
option(ULIB_SINGLELIBRARY "Link everything to a single library" OFF)
if(ULIB_SINGLELIBRARY)
# set(modgrp)
# foreach(module ${ULIB_SELECTED_MODULES})
# set(grpn srcgrp_${module})
# list(APPEND modgrp ${grpn})
# endforeach(module)
# add_library(${project_name} SHARED ${srcgrp_Core})
endif(ULIB_SINGLELIBRARY)
include_directories(${SRC_DIR}/Vtk)
add_subdirectory(${SRC_DIR}/Vtk)
#add_subdirectory("${SRC_DIR}/utils/make_recipe")
## Documentation and packages
#include(uLibGenerateDoc)
## UTILITIES ##
add_subdirectory("${SRC_DIR}/utils/make_recipe")
## PKG CONFIG compatible file ----------------------------------------------- ##
set(PKGCONFIG_FILE_ENABLE OFF CACHE BOOL "enable pkg-config file")
if(PKGCONFIG_FILE_ENABLE)
message("/////////// PKG-CONFIG DISTILLER //////////////")
set(PKGCONFIG_FILE_DESTDIR "/lib/pkgconfig/" CACHE PATH "destination path for pkg-config file")
set(PKGCONFIG_LIBS)
message(STATUS "[cflags] ${CMAKE_C_FLAGS}")
message(STATUS "[cxxflags] ${CMAKE_CXX_FLAGS}")
foreach(module ${ULIB_SHARED_LIBRARIES})
set(PKGCONFIG_LIBS "${PKGCONFIG_LIBS} ${CMAKE_LINK_LIBRARY_FLAG}${module}")
endforeach(module)
message(STATUS "[libs] ${PKGCONFIG_LIBS}")
set(PKGCONFIG_FLAGS)
#add_custom_target(Dummy)
# add the executable
uLib_add_target(Dummy test.cpp)
target_link_libraries(Dummy ${PACKAGE_LIBPREFIX}Core)
target_link_libraries(Dummy ${Boost_SERIALIZATION_LIBRARY})
target_link_libraries(Dummy ${Boost_SIGNALS_LIBRARY})
target_link_libraries(Dummy ${Boost_PROGRAM_OPTIONS_LIBRARY})
target_link_libraries(Dummy ${Geant4_LIBRARIES})
target_link_libraries(Dummy ${ROOT_LIBRARIES})
target_link_libraries(Dummy ${VTK_LIBRARIES})
get_gcc_compile_flags(Dummy, gcc_flags_list)
foreach(item ${gcc_flags_list})
message(STATUS "[gcc cflags] ${item}")
set(PKGCONFIG_FLAGS "${PKGCONFIG_FLAGS} ${item}")
endforeach(item)
message(STATUS "[includes] ${PKGCONFIG_FLAGS}")
get_gcc_link_flags(Dummy, gcc_flags_list)
foreach(item ${gcc_flags_list})
message(STATUS "[gcc libs] ${item}")
endforeach(item)
configure_file(
"${PROJECT_SOURCE_DIR}/CMakePkgConfig.pc.in"
"${PROJECT_BINARY_DIR}/libmutom-${PACKAGE_VERSION}.pc"
)
INSTALL_FILES(${PKGCONFIG_FILE_DESTDIR} FILES ${PROJECT_BINARY_DIR}/libmutom-${PACKAGE_VERSION}.pc)
message("///////////////////////////////////////////")
endif(PKGCONFIG_FILE_ENABLE)
#add_subdirectory("${SRC_DIR}/utils/make_recipe")
## INSTALLS AND EXPORTS ----------------------------------------------------- ##
#export(PACKAGE uLib)
export(PACKAGE ULIB)
export(TARGETS ${ULIB_SHARED_LIBRARIES} ${ULIB_EXPORTED_TARGETS}
FILE "${PROJECT_BINARY_DIR}/uLibTargets.cmake" )
#export(TARGETS ${ULIB_EXPORTED_TARGETS}
# FILE "${PROJECT_BINARY_DIR}/uLibExeTargets.cmake" )
#export(PACKAGE ULIB)
#export(TARGETS ${ULIB_SHARED_LIBRARIES} ${ULIB_EXPORTED_TARGETS}
# FILE "${PROJECT_BINARY_DIR}/uLibTargets.cmake" )
# Create the FooBarConfig.cmake and FooBarConfigVersion files
file(RELATIVE_PATH REL_INCLUDE_DIR "${PACKAGE_INSTALL_CMAKE_DIR}"
"${PACKAGE_INSTALL_INC_DIR}")
# file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}"
# "${INSTALL_INC_DIR}")
# ... for the build tree
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src" "${PROJECT_BINARY_DIR}")
configure_file(uLibConfig.cmake.in
"${PROJECT_BINARY_DIR}/uLibConfig.cmake" @ONLY)
#set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src" "${PROJECT_BINARY_DIR}")
#configure_file(uLibConfig.cmake.in
# "${PROJECT_BINARY_DIR}/uLibConfig.cmake" @ONLY)
# ... for the install tree
set(CONF_INCLUDE_DIRS "\${ULIB_CMAKE_DIR}/${REL_INCLUDE_DIR}")
configure_file(uLibConfig.cmake.in
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/uLibConfig.cmake" @ONLY)
# [ removed for the configure_config_file ]
# configure_file(uLibConfig.cmake.in
# "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/uLibConfig.cmake"
# @ONLY)
# ... for both
configure_file(uLibConfigVersion.cmake.in
"${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake" @ONLY)
"${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake" @ONLY)
# Install the FooBarConfig.cmake and FooBarConfigVersion.cmake
install(FILES
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/uLibConfig.cmake"
"${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake"
DESTINATION "${PACKAGE_INSTALL_CMAKE_DIR}" COMPONENT dev)
# from CMake 3.x configure file shall be created using a dedicated function
# see: https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html
#
include(CMakePackageConfigHelpers)
configure_package_config_file(uLibConfig.cmake.in
"${PROJECT_BINARY_DIR}/uLibConfig.cmake"
INSTALL_DESTINATION ${INSTALL_CMAKE_DIR}
PATH_VARS
INSTALL_LIB_DIR
INSTALL_INC_DIR
INSTALL_BIN_DIR
INSTALL_CMAKE_DIR
INSTALL_ETC_DIR
INSTALL_DATA_DIR
ULIB_SOURCE_DIR
ULIB_SHARED_LIBRARIES
# NO_SET_AND_CHECK_MACRO
# NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
install(FILES "${PROJECT_BINARY_DIR}/uLibConfig.cmake"
"${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}"
COMPONENT dev)
# this is a special target file for the build tree
# it is used also to identify if we are using a build direcory
# to link a project against uLib. see: uLibConfig.cmake ( IF )
export (TARGETS ${ULIB_SHARED_LIBRARIES}
FILE "${PROJECT_BINARY_DIR}/uLibTargets-build.cmake"
# NAMESPACE "uLib::"
)
# Install the export set for use with the install-tree
install(EXPORT "${PROJECT_NAME}Targets" DESTINATION
"${PACKAGE_INSTALL_CMAKE_DIR}" COMPONENT dev)
install(FILES ${PROJECT_SOURCE_DIR}/ulib.h DESTINATION ${PACKAGE_INSTALL_INC_DIR})
## dummy main executable ---------------------------------------------------- ##
message("Sara's debug....")
message(${ROOT_LIBRARIES})
# add the executable
add_executable(Coretest test.cpp)
target_link_libraries(Coretest ${PACKAGE_LIBPREFIX}Core)
#target_link_libraries(Coretest ${Boost_SERIALIZATION_LIBRARY})
#target_link_libraries(Coretest ${Boost_SIGNALS_LIBRARY})
#target_link_libraries(Coretest ${Boost_PROGRAM_OPTIONS_LIBRARY})
#target_link_libraries(Coretest ${Geant4_LIBRARIES})
target_link_libraries(Coretest ${ROOT_LIBRARIES})
target_link_libraries(Coretest ${VTK_LIBRARIES})
#message( "---------------------------------------------------------------------" )
#execute_process(COMMAND
# "ls"
## "cmake --find-package -DNAME=uLib -DLANGUAGE=C -DCOMPILER_ID=GNU -DMODE=COMPILE"
# )
#message( "---------------------------------------------------------------------" )
## -------------------------------------------------------------------------- ##
# TODO clean also subdirectories
add_custom_target(clean-cmake-files
COMMAND ${CMAKE_COMMAND} -P ${ULIB_CMAKE_DIR}/clean-all.cmake
)
install(EXPORT "uLibTargets"
FILE "uLibTargets.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}"
COMPONENT dev)

35
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,35 @@
pipeline {
agent {
docker {
image 'infnpd/cmt-environment:1.1-centos7'
args '-u 0:0'
label 'DOCKER'
}
}
environment {
NEXUS_PD_CREDS = credentials('jenkins-nexus-pd-creds')
NEXUS_PD_URL = 'https://cld-smact-02.pd.infn.it/artifacts/repository/muotom/devel/centos7/x86_64/'
}
stages {
stage('Build') {
steps {
sh "mkdir build && cd build && cmake -DNODOXYGEN=ON .. && make rpm"
}
}
stage('Deploy') {
steps {
sh "find . -name '*.x86_64.rpm' curl -v -k --user '${NEXUS_PD_CREDS_USR}:${NEXUS_PD_CREDS_PSW}' --upload-file '{}' ${NEXUS_PD_URL} ';'"
}
}
}
}

9
README.md Normal file
View File

@@ -0,0 +1,9 @@
# uLib
[![DOI](https://zenodo.org/badge/36926725.svg)](https://zenodo.org/badge/latestdoi/36926725)
base toolkit library
CMT Cosmic Muon Tomography reconstruction, analysis and imaging software
Developed by University of Padova and INFN Sezione di Padova Italy

View File

@@ -1,46 +1,27 @@
set(HEADERS
Archives.h
Array.h
Collection.h
Debug.h
Export.h
Function.h
Macros.h
Mpl.h
Object.h
ObjectProps.h
Options.h
Serializable.h
Signal.h
Singleton.h
SmartPointer.h
StaticInterface.h
StringReader.h
Types.h
Uuid.h
Vector.h
CommaInitializer.h
Timer.h
)
set(HEADERS Options.h
StaticInterface.h)
set(SOURCES Options.cpp)
set(LIBRARIES ${Boost_PROGRAM_OPTIONS_LIBRARY})
set(libname ${PACKAGE_LIBPREFIX}Core)
set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE)
set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Core PARENT_SCOPE)
add_library(${libname} SHARED ${SOURCES})
set_target_properties(${libname} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION})
target_link_libraries(${libname} ${LIBRARIES})
install(TARGETS ${libname}
EXPORT "${PROJECT_NAME}Targets"
RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib)
install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Core)
SET(SOURCES
Archives.cpp
Object.cpp
Options.cpp
Serializable.cpp
Signal.cpp
Uuid.cpp
)
set(LIBRARIES
${Boost_SERIALIZATION_LIBRARY}
${Boost_SIGNALS_LIBRARY}
${Boost_PROGRAM_OPTIONS_LIBRARY}
${ROOT_LIBRARIES}
${PACKAGE_LIBPREFIX}Core
${PACKAGE_LIBPREFIX}Math
)
uLib_add_shared_library(${uLib-module})
add_subdirectory(testing)

View File

@@ -29,12 +29,11 @@
#define U_CORE_DEBUG_H
#include "ltk/ltkdebug.h"
#include <vector>
#include "Macros.h"
#include "Types.h"
#include "Mpl.h"
#include "Vector.h"
#include "SmartPointer.h"
#include <boost/any.hpp>
#include <TObject.h>
@@ -128,8 +127,8 @@ public:
}
private:
Vector<DItem> m_v;
Vector<Adapter> m_a;
std::vector<DItem> m_v;
std::vector<Adapter> m_a;
};

View File

@@ -31,6 +31,9 @@
#include <boost/program_options.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
//class boost::program_options::error_with_option_name;
//template<> boost::program_options::typed_value<int> boost::program_options::value<int>();
@@ -74,6 +77,23 @@ void Options::parse_config_file(const char *fname)
}
}
void Options::save_config_file(const char *fname) {
std::ofstream os;
os.open(fname);
using boost::property_tree::ptree;
ptree root;
std::cout << m_configuration << "\n";
std::cout << m_global << "\n";
write_ini( std::cout, root );
}
bool Options::count(const char *str) const
{
return (m_vm.count(str));

View File

@@ -160,6 +160,8 @@ public:
void parse_config_file(const char *fname);
void save_config_file(const char *fname);
template <typename T>
static inline boost::program_options::typed_value<T>* value(T *v, T dvalue) {
boost::program_options::typed_value<T> *r = boost::program_options::value<T>(v);

View File

@@ -31,7 +31,6 @@
#include <istream>
#include <algorithm>
#include "Core/Vector.h"
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
@@ -62,7 +61,7 @@ struct StringReader {
while( IsEscape(c = m_is.get()) );
if (c == str[pos] ) pos++;
else pos = 0;
}
}
}
static inline bool IsEscape(char c){

View File

@@ -33,7 +33,7 @@
#include <boost/preprocessor.hpp>
#include <ltk/ltktypes.h>
//#include <ltk/ltktypes.h>
#include "Core/Macros.h"
#include "Core/Mpl.h"
@@ -69,7 +69,7 @@ struct TypeIntrospection {
typedef boost::mpl::bool_<value> type;
// };
};
*/
*/
/** IsA Introspectable Object Implementation Template */
template <class T>
@@ -161,12 +161,21 @@ struct TypeIntrospection {
#define CONSTEXPR BOOST_CONSTEXPR
typedef ltk::Real_t Real_t;
typedef ltk::Id_t Id_t;
//typedef ltk::Size_t Size_t;
typedef ltk::Pointer_t Pointer_t;
//typedef ltk::Real_t Real_t;
#ifndef LTK_DOUBLE_PRECISION
typedef float Real_t;
#else
typedef double Real_t;
#endif
//typedef ltk::Id_t Id_t;
typedef id_t Id_t;
////typedef ltk::Size_t Size_t;
//typedef ltk::Pointer_t Pointer_t;
typedef void * Pointer_t;
typedef bool Bool_t; //Boolean (0=false, 1=true) (bool)
//--- bit manipulation ---------------------------------------------------------
#ifndef BIT
#define BIT(n) (1ULL << (n))

View File

@@ -29,6 +29,7 @@
#define U_CORE_UUID_H
#include <iostream>
#include <vector>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/name_generator.hpp>
@@ -36,7 +37,6 @@
#include <boost/uuid/uuid_io.hpp>
#include "Core/Mpl.h"
#include "Core/Vector.h"
#include "Core/Object.h"
@@ -127,7 +127,7 @@ public:
private:
IDGen_t gen;
Vector<RegisterEntry> m_registry;
std::vector<RegisterEntry> m_registry;
};

View File

@@ -31,7 +31,6 @@
#include "Core/Object.h"
#include "Core/Archives.h"
#include "ParticlePhysics/MuonTomography/MuonScatter.h"
#include "testing-prototype.h"
@@ -189,48 +188,12 @@ int testing_hrt_class() {
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// MUON SCATTER EXAMPLE //
int testing_mu()
{
std::stringstream ss;
MuonScatter mu;
mu.SetMomentumIn(555);
mu.SetMomentumOut(2368);
{
std::ofstream file("test.txt");
file << mu;
}
mu.SetMomentumIn(0);
mu.SetMomentumOut(0);
{
std::ifstream file("test.txt");
file >> mu;
}
std::cout << mu << "\n";
}
int main() {
BEGIN_TESTING(Serialize Test);
TEST1( test_V3f() );
TEST1( testing_xml_class() );
// testing_hrt_class(); ///// << ERRORE in HRT with properties
TEST1( testing_mu() );
END_TESTING;
}

View File

@@ -1,38 +1,7 @@
# HEADERS
set(HEADERS
DetectorChamber.h
ExperimentFitEvent.h
GeantEvent.h
HitMC.h
MuonScatter.h
MuonEvent.h
MuonError.h
ChamberHitEvent.h
Hit.h
LinearFit.h
Solid.h
Matter.h
Scene.h
)
set(HEADERS MuonScatter.h MuonError.h MuonEvent.h)
set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Detectors PARENT_SCOPE)
# SOURCES
set(SOURCES
Solid.cpp
Scene.cpp
)
set(LIBRARIES
${Boost_SERIALIZATION_LIBRARY}
${Boost_SIGNALS_LIBRARY}
${Boost_PROGRAM_OPTIONS_LIBRARY}
${Eigen_LIBRARY}
${Geant4_LIBRARIES}
${ROOT_LIBRARIES}
${PACKAGE_LIBPREFIX}Core
${PACKAGE_LIBPREFIX}Math
${PACKAGE_LIBPREFIX}Detectors
)
uLib_add_shared_library(${uLib-module})
add_subdirectory(testing)
install(FILES ${HEADERS}
DESTINATION ${INSTALL_INC_DIR}/Detectors)

View File

@@ -28,7 +28,6 @@
#ifndef U_HITMC_H
#define U_HITMC_H
#include "Core/Macros.h"
#include "Math/Dense.h"
#include "Hit.h"
@@ -43,10 +42,10 @@ public:
DeltaRay
};
uLibConstRefMacro(Position,HPoint3f)
uLibGetMacro(Type, enum Type)
inline const HPoint3f & Position() const { return this->m_Position; }
inline enum Type GetType() const { return this->m_Type; }
private:
protected:
HPoint3f m_Position;
enum Type m_Type;
};
@@ -54,8 +53,8 @@ private:
class HitMC : public HitMCData {
public:
uLibRefMacro(Position,HPoint3f)
uLibSetMacro(Type, enum Type)
inline HPoint3f & Position() { return this->m_Position; }
inline void SetType(enum Type name) { this->m_Type = name; }
};

View File

@@ -28,7 +28,6 @@
#ifndef U_LINEARFIT_H
#define U_LINEARFIT_H
#include "Core/Macros.h"
#include "Math/Dense.h"
#include "ChamberDetector.h"
@@ -37,32 +36,31 @@ namespace uLib {
class LinearFitData {
public:
uLibConstRefMacro(Position,Vector2f)
uLibConstRefMacro(Slope,Vector2f)
uLibConstRefMacro(PositionError,Vector2f)
uLibConstRefMacro(SlopeError,Vector2f)
uLibGetMacro(HitsNumber,int)
uLibGetMacro(Idv,ChamberDetector::ID)
inline const Vector2f & Position() const { return this->m_Position; }
inline const Vector2f & Slope() const { return this->m_Slope; }
inline const Vector2f & PositionError() const { return this->m_PositionError; }
inline const Vector2f & SlopeError() const { return this->m_SlopeError; }
inline int GetHitsNumber() const { return this->m_HitsNumber; }
inline ChamberDetector::ID GetIdv() const { return this->m_Idv; }
private:
friend class LinearFit;
Vector2f m_Position;
Vector2f m_Slope;
Vector2f m_PositionError;
Vector2f m_SlopeError;
int m_HitsNumber;
protected:
Vector2f m_Position;
Vector2f m_Slope;
Vector2f m_PositionError;
Vector2f m_SlopeError;
int m_HitsNumber;
DetectorChamber::ID m_Idv;
};
class LinearFit : public LinearFitData {
public:
uLibRefMacro(Position,Vector2f)
uLibRefMacro(Slope,Vector2f)
uLibRefMacro(PositionError,Vector2f)
uLibRefMacro(SlopeError,Vector2f)
uLibSetMacro(HitsNumber,int)
uLibSetMacro(Idv,ChamberDetector::ID)
inline Vector2f & Position() { return this->m_Position; }
inline Vector2f & Slope() { return this->m_Slope; }
inline Vector2f & PositionError() { return this->m_PositionError; }
inline Vector2f & SlopeError() { return this->m_SlopeError; }
inline void SetHitsNumber(int name) { this->m_HitsNumber = name; }
inline void SetIdv(ChamberDetector::ID name) { this->m_Idv = name; }
};

View File

@@ -28,18 +28,16 @@
#ifndef U_MUONERROR_H
#define U_MUONERROR_H
#include "Core/Macros.h"
#include "Math/Dense.h"
namespace uLib {
class MuonErrorData {
friend class MuonError;
public:
uLibConstRefMacro(Theta,Scalarf)
uLibConstRefMacro(Phi,Scalarf)
private:
inline const Scalarf & Theta() const { return this->m_Theta; }
inline const Scalarf & Phi() const { return this->m_Phi; }
protected:
Scalarf m_Theta;
Scalarf m_Phi;
};
@@ -47,8 +45,8 @@ private:
class MuonError : public MuonErrorData {
public:
uLibRefMacro(Theta,Scalarf)
uLibRefMacro(Phi,Scalarf)
inline Scalarf & Theta() { return this->m_Theta; }
inline Scalarf & Phi() { return this->m_Phi; }
};

View File

@@ -28,20 +28,18 @@
#ifndef U_MUONEVENT_H
#define U_MUONEVENT_H
#include "Core/Macros.h"
#include "Math/Dense.h"
namespace uLib {
class MuonEventData {
friend class MuonEvent;
public:
uLibConstRefMacro(LineIn,HLine3f)
uLibConstRefMacro(LineOut,HLine3f)
uLibGetMacro(Momentum,Scalarf)
inline const HLine3f & LineIn() const { return this->m_LineIn; }
inline const HLine3f & LineOut() const { return this->m_LineOut; }
inline Scalarf GetMomentum() const { return this->m_Momentum; }
private:
protected:
HLine3f m_LineIn;
HLine3f m_LineOut;
Scalarf m_Momentum;
@@ -50,9 +48,9 @@ private:
class MuonEvent : public MuonEventData {
public:
uLibRefMacro(LineIn,HLine3f)
uLibRefMacro(LineOut,HLine3f)
uLibRefMacro(Momentum,Scalarf)
inline HLine3f & LineIn() { return this->m_LineIn; }
inline HLine3f & LineOut() { return this->m_LineOut; }
inline Scalarf & Momentum() { return this->m_Momentum; }
};

View File

@@ -29,7 +29,6 @@
#ifndef U_MUONSCATTER_H
#define U_MUONSCATTER_H
#include "Core/Macros.h"
#include "Math/Dense.h"
namespace uLib {
@@ -37,20 +36,21 @@ namespace uLib {
class MuonScatter {
public:
uLibConstRefMacro(LineIn,HLine3f)
uLibConstRefMacro(ErrorIn,HError3f)
uLibConstRefMacro(LineOut,HLine3f)
uLibConstRefMacro(ErrorOut,HError3f)
inline const HLine3f & LineIn() const { return this->m_LineIn; }
inline const HError3f & ErrorIn() const { return this->m_ErrorIn; }
inline const HLine3f & LineOut() const { return this->m_LineOut; }
inline const HError3f & ErrorOut() const { return this->m_ErrorOut; }
uLibRefMacro(LineIn,HLine3f)
uLibRefMacro(ErrorIn,HError3f)
uLibRefMacro(LineOut,HLine3f)
uLibRefMacro(ErrorOut,HError3f)
uLibSetMacro(Momentum,Scalarf)
uLibSetMacro(MomentumPrime,Scalarf)
inline HLine3f & LineIn() { return this->m_LineIn; }
inline HError3f & ErrorIn() { return this->m_ErrorIn; }
inline HLine3f & LineOut() { return this->m_LineOut; }
inline HError3f & ErrorOut() { return this->m_ErrorOut; }
uLibGetMacro(Momentum,Scalarf)
uLibGetMacro(MomentumPrime,Scalarf)
inline void SetMomentum(Scalarf name) { this->m_Momentum = name; }
inline void SetMomentumPrime(Scalarf name) { this->m_MomentumPrime = name; }
inline Scalarf GetMomentum() const { return this->m_Momentum; }
inline Scalarf GetMomentumPrime() const { return this->m_MomentumPrime; }
protected:
HLine3f m_LineIn;

View File

@@ -28,7 +28,8 @@
#ifndef U_DATABINNING_H
#define U_DATABINNING_H
#include "Core/Vector.h"
#include <vector>
#include "Dense.h"
@@ -69,7 +70,7 @@ public:
void AddPass() { m_Means.push_back( Tmean(0,0) ); }
private:
Vector< Tmean > m_Means;
std::vector< Tmean > m_Means;
};

View File

@@ -27,15 +27,16 @@
#ifndef U_MATH_BITCODE_H
#define U_MATH_BITCODE_H
#include <iostream>
#include <boost/static_assert.hpp>
#include <boost/type_traits.hpp>
//#include <Core/CommaInitializer.h>
#include <Math/Dense.h>
#include <Core/Mpl.h>
#include <boost/mpl/vector_c.hpp>
#include <boost/mpl/set_c.hpp>
#include <Math/Dense.h>
namespace uLib {
@@ -237,9 +238,9 @@ public:
// std::cout << boost::mpl::at_c< BitSet,1 >::type::value << "\n";
}
int Get(unsigned short field) const {
return boost::mpl::at_c< BitSet, field >::type::value;
}
// int Get(unsigned short field) const {
// return boost::mpl::at_c< BitSet, field >::type::value;
// }
};

View File

@@ -1,50 +1,60 @@
# HEADERS
set(HEADERS
ContainerBox.h
Dense.h
Geometry.h
Transform.h
StructuredData.h
StructuredGrid.h
VoxImage.h
VoxRaytracer.h
Utils.h
VoxImageFilter.h
VoxImageFilter.hpp
VoxImageFilterLinear.hpp
VoxImageFilterMedian.hpp
VoxImageFilterABTrim.hpp
VoxImageFilterBilateral.hpp
VoxImageFilterThreshold.hpp
VoxImageFilter2ndStat.hpp
VoxImageFilterCustom.hpp
Accumulator.h
TriangleMesh.h
BitCode.h
)
set(HEADERS ContainerBox.h
Dense.h
Geometry.h
Transform.h
StructuredData.h
StructuredGrid.h
VoxImage.h
VoxRaytracer.h
Utils.h
VoxImageFilter.h
VoxImageFilter.hpp
VoxImageFilterLinear.hpp
VoxImageFilterMedian.hpp
VoxImageFilterABTrim.hpp
VoxImageFilterBilateral.hpp
VoxImageFilterThreshold.hpp
VoxImageFilter2ndStat.hpp
VoxImageFilterCustom.hpp
Accumulator.h
TriangleMesh.h
BitCode.h
Structured2DGrid.h
Structured4DGrid.h)
set(SOURCES VoxRaytracer.cpp
StructuredData.cpp
StructuredGrid.cpp
VoxImage.cpp
TriangleMesh.cpp
Dense.cpp
Structured2DGrid.cpp
Structured4DGrid.cpp)
set(LIBRARIES ${Eigen_LIBRARY}
${ROOT_LIBRARIES}
${VTK_LIBRARIES})
set(libname ${PACKAGE_LIBPREFIX}Math)
set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE)
set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Math PARENT_SCOPE)
add_library(${libname} SHARED ${SOURCES})
set_target_properties(${libname} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION})
target_link_libraries(${libname} ${LIBRARIES})
# SOURCES
set(SOURCES
VoxRaytracer.cpp
StructuredData.cpp
StructuredGrid.cpp
VoxImage.cpp
TriangleMesh.cpp
Dense.cpp
)
install(TARGETS ${libname}
EXPORT "${PROJECT_NAME}Targets"
RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib)
set(LIBRARIES
${Boost_SERIALIZATION_LIBRARY}
${Boost_SIGNALS_LIBRARY}
${Boost_PROGRAM_OPTIONS_LIBRARY}
${Eigen_LIBRARY}
${ROOT_LIBRARIES}
${PACKAGE_LIBPREFIX}Core
${PACKAGE_LIBPREFIX}Math
)
install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Math)
# TESTING
# include(uLibTargetMacros)
# add_subdirectory(testing)
uLib_add_shared_library(${uLib-module})
add_subdirectory(testing)

View File

@@ -27,8 +27,8 @@
#include "Dense.h"
#include "Core/Archives.h"
#ifdef ULIB_SERIALIZATION_ON
ULIB_SERIALIZE(uLib::HPoint3f) {
ar & boost::serialization::make_nvp(NULL,boost::serialization::base_object<uLib::HPoint3f::BaseClass,uLib::HPoint3f>(ob));
}
@@ -48,5 +48,5 @@ ULIB_SERIALIZE(uLib::HError3f) {
ar
& "HLine -> ( poserr: " & AR(position_error) & "; direrr: " & AR(direction_error) & ") ";
}
#endif // ULIB_SERIALIZATION_ON

View File

@@ -26,25 +26,25 @@
/*
/*
* <one line to give the program's name and a brief idea of what it does.>
* Copyright (C) 2012 Andrea Rigoni Garola <andrea@pcimg05>
*
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* License, or (at your option) any later version.
*
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*
*
*/
@@ -54,9 +54,6 @@
#include <stdlib.h>
#include <Eigen/Dense>
#include "Core/Types.h"
#include "Core/Serializable.h"
//// BOOST SERIALIZATION ///////////////////////////////////////////////////////
@@ -109,6 +106,7 @@ std::ostream & operator << (std::ostream &os, const Eigen::Matrix<T,size,1> &vec
namespace uLib {
typedef id_t Id_t;
typedef int Scalari;
typedef unsigned int Scalarui;
@@ -141,7 +139,6 @@ typedef Eigen::Vector4f Vector4f;
////////////////////////////////////////////////////////////////////////////////
// Vector String interaction ///////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
@@ -199,7 +196,7 @@ public:
_HPoint3f<p>(Vector3f &in) : BaseClass(in.homogeneous()) { this->operator()(3) = p; }
void operator delete(void* _p, size_t _s) {}
// This constructor allows to construct MyVectorType from Eigen expressions
template<typename OtherDerived>
inline _HPoint3f<p>(const Eigen::MatrixBase<OtherDerived>& other)
@@ -264,6 +261,9 @@ operator<< (std::ostream& stream, const HError3f &err) {
////////////////////////////////////////////////////////////////////////////////
// SERIALIZTION //
#ifdef ULIB_SERIALIZATION_ON
#include "Core/Serializable.h"
ULIB_SERIALIZABLE(uLib::HPoint3f)
ULIB_SERIALIZABLE(uLib::HVector3f)
@@ -272,7 +272,7 @@ ULIB_SERIALIZABLE(uLib::HVector3f)
ULIB_SERIALIZABLE(uLib::HLine3f)
ULIB_SERIALIZABLE(uLib::HError3f)
#endif // ULIB_SERIALIZATION_ON

View File

@@ -28,7 +28,6 @@
#ifndef U_GEOMETRY_H
#define U_GEOMETRY_H
#include "Core/Object.h"
#include "Math/Dense.h"
#include "Math/Transform.h"

View File

@@ -32,11 +32,11 @@
namespace uLib {
class Quote : public Vector2f {
class Quote : public Vector2f
{
public:
uLibRefMacro(Offset,Scalarf);
inline Scalarf& Offset() { return this->m_Offset; }
private:
Scalarf m_Offset;

View File

@@ -0,0 +1,130 @@
/*//////////////////////////////////////////////////////////////////////////////
// CMT Cosmic Muon Tomography project //////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Copyright (c) 2014, Universita' degli Studi di Padova, INFN sez. di Padova
All rights reserved
Authors: Sara Vanini < sara.vanini@pd.infn.it >
------------------------------------------------------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3.0 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library.
//////////////////////////////////////////////////////////////////////////////*/
#include "Structured2DGrid.h"
using namespace uLib;
//_____________________________________________________________
Structured2DGrid::Structured2DGrid()
{
// reset uni-dim space
m_Dims = Vector2i(0,0);
m_Origin = Vector2f(0.,0.);
m_Increments = Vector2i(0,0);
m_binW = Vector2f(1.,1.);
m_debug = true;
}
//_____________________________________________________________
void Structured2DGrid::SetDims(const Vector2i &size)
{
this->m_Dims = size;
// set increments
this->m_Increments[0] = 1;
this->m_Increments[1] = m_Dims[0];
}
//_____________________________________________________________
void Structured2DGrid::SetPhysicalSpace(const Vector2f &origin, const Vector2f &spacing)
{
m_Origin = origin;
m_binW = spacing;
m_uni2phys_T = Translation<float,2>(m_Origin) * Scaling(m_binW);
m_phys2uni_T = m_uni2phys_T.matrix().inverse();
return;
}
//_____________________________________________________________
bool Structured2DGrid::IsInsideBounds(const Vector2f &pt) const
{
Vector2i pLoc = this->PhysicsToUnitSpace(pt);
return this->IsInsideGrid(pLoc);
}
//_____________________________________________________________
Vector2i Structured2DGrid::UnMap(int index) const
{
Vector2i v( 0,0 );
Vector2i iv = m_Increments;
int id = 0;
for(int k=0; k<2; ++k) {
int inc = iv.maxCoeff(&id);
v(id) = index / inc;
index -= v(id) * inc;
iv(id) = 0;
}
return v;
}
//_____________________________________________________________
bool Structured2DGrid::IsInsideGrid(const Vector2i &v) const
{
int vok = 1;
vok *= (v(0) >= 0 && v(0) < m_Dims[0]);
vok *= (v(1) >= 0 && v(1) < m_Dims[1]);
return vok;
}
//_____________________________________________________________
Vector2i Structured2DGrid::PhysicsToUnitSpace(const Vector2f &pt) const
{
Vector2i out;
Vector2f pLoc = m_phys2uni_T * pt;
out << (int)floor(pLoc(0)),
(int)floor(pLoc(1));
return out;
}
//_____________________________________________________________
Vector2f Structured2DGrid::UnitToPhysicsSpace(const Vector2i &ind) const
{
Vector2f p;
p = m_uni2phys_T * ind.cast<float>();
return p;
}
//_____________________________________________________________
void Structured2DGrid::PrintSelf(std::ostream &o)
{
o << "uLib Structured Data 2D: \n"
<< "dim = " << this->GetDims().transpose() << "\n"
<< "spacing = " << this->GetSpacing().transpose() << "\n";
}

View File

@@ -0,0 +1,74 @@
/*//////////////////////////////////////////////////////////////////////////////
// CMT Cosmic Muon Tomography project //////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Copyright (c) 2014, Universita' degli Studi di Padova, INFN sez. di Padova
All rights reserved
Authors: Sara Vanini < sara.vanini@pd.infn.it >
------------------------------------------------------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3.0 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library.
//////////////////////////////////////////////////////////////////////////////*/
#ifndef Structured2DGrid_H
#define Structured2DGrid_H
#include "Math/Dense.h"
#include <Eigen/Dense>
#include <Eigen/Geometry>
using namespace Eigen;
namespace uLib {
class Structured2DGrid {
public:
Structured2DGrid();
/// unit-space
void SetDims(const Vector2i &size);
inline Vector2i GetDims() {return m_Dims; }
bool IsInsideGrid(const Vector2i &v) const;
inline int Map(Vector2i index) const { return (m_Increments.transpose() * index);}
Vector2i UnMap(int index) const;
/// physics-space
void SetPhysicalSpace(const Vector2f &origin, const Vector2f &spacing);
inline Vector2f GetSpacing() const { return m_binW; }
inline Vector2f GetOrigin() const { return m_Origin; }
bool IsInsideBounds(const Vector2f &pt) const;
/// operations
Vector2i PhysicsToUnitSpace(const Vector2f &pt) const;
Vector2f UnitToPhysicsSpace(const Vector2i &ind) const;
void PrintSelf(std::ostream &o);
void SetDebug(bool debug){ m_debug = debug; };
private:
Vector2i m_Dims;
Vector2i m_Increments;
Vector2f m_binW;
Vector2f m_Origin;
bool m_debug;
Transform<float, 2, Eigen::Affine> m_uni2phys_T;
Transform<float, 2, Eigen::Affine> m_phys2uni_T;
};
}
#endif // Structured2DGrid_H

View File

@@ -0,0 +1,136 @@
/*//////////////////////////////////////////////////////////////////////////////
// CMT Cosmic Muon Tomography project //////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Copyright (c) 2014, Universita' degli Studi di Padova, INFN sez. di Padova
All rights reserved
Authors: Andrea Rigoni Garola < andrea.rigoni@pd.infn.it >
------------------------------------------------------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3.0 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library.
//////////////////////////////////////////////////////////////////////////////*/
#include "Structured4DGrid.h"
using namespace uLib;
//_____________________________________________________________
Structured4DGrid::Structured4DGrid()
{
// reset uni-dim space
m_Dims = Vector4i(0,0,0,0);
m_Origin = Vector4f(0.,0.,0.,0.);
m_Increments = Vector4i(0,0,0,0);
m_binW = Vector4f(1.,1.,1.,1.);
m_debug = true;
}
//_____________________________________________________________
void Structured4DGrid::SetDims(const Vector4i &size)
{
this->m_Dims = size;
// set increments
this->m_Increments[0] = 1;
this->m_Increments[1] = m_Dims[0];
this->m_Increments[2] = m_Dims[0] * m_Dims[1];
this->m_Increments[3] = m_Dims[0] * m_Dims[1] * m_Dims[2];
}
//_____________________________________________________________
void Structured4DGrid::SetPhysicalSpace(const Vector4f &origin, const Vector4f &spacing)
{
m_Origin = origin;
m_binW = spacing;
m_uni2phys_T = Translation<float,4>(m_Origin) * Scaling(m_binW);
m_phys2uni_T = m_uni2phys_T.matrix().inverse();
return;
}
//_____________________________________________________________
bool Structured4DGrid::IsInsideBounds(const Vector4f &pt) const
{
Vector4i pLoc = this->PhysicsToUnitSpace(pt);
return this->IsInsideGrid(pLoc);
}
//_____________________________________________________________
Vector4i Structured4DGrid::UnMap(int index) const
{
Vector4i v( 0,0,0, 0 );
Vector4i iv = m_Increments;
int id = 0;
for(int k=0; k<4; ++k) {
int inc = iv.maxCoeff(&id);
v(id) = index / inc;
index -= v(id) * inc;
iv(id) = 0;
}
return v;
}
//_____________________________________________________________
bool Structured4DGrid::IsInsideGrid(const Vector4i &v) const
{
int vok = 1;
vok *= (v(0) >= 0 && v(0) < m_Dims[0]);
vok *= (v(1) >= 0 && v(1) < m_Dims[1]);
vok *= (v(2) >= 0 && v(2) < m_Dims[2]);
vok *= (v(3) >= 0 && v(3) < m_Dims[3]);
return vok;
}
//_____________________________________________________________
Vector4i Structured4DGrid::PhysicsToUnitSpace(const Vector4f &pt) const
{
Vector4i out;
Vector4f pLoc = m_phys2uni_T * pt;
out << (int)floor(pLoc(0)),
(int)floor(pLoc(1)),
(int)floor(pLoc(2)),
(int)floor(pLoc(3));
return out;
}
//_____________________________________________________________
Vector4f Structured4DGrid::UnitToPhysicsSpace(const Vector4i &ind) const
{
Vector4f p;
p = m_uni2phys_T * ind.cast<float>();
return p;
}
//_____________________________________________________________
void Structured4DGrid::PrintSelf(std::ostream &o)
{
o << "uLib Structured Data 4D: \n"
<< "dim = " << this->GetDims().transpose() << "\n"
<< "spacing = " << this->GetSpacing().transpose() << "\n";
}

View File

@@ -0,0 +1,74 @@
/*//////////////////////////////////////////////////////////////////////////////
// CMT Cosmic Muon Tomography project //////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Copyright (c) 2014, Universita' degli Studi di Padova, INFN sez. di Padova
All rights reserved
Authors: Andrea Rigoni Garola < andrea.rigoni@pd.infn.it >
------------------------------------------------------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3.0 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library.
//////////////////////////////////////////////////////////////////////////////*/
#ifndef Structured4DGrid_H
#define Structured4DGrid_H
#include "Math/Dense.h"
#include <Eigen/Dense>
#include <Eigen/Geometry>
using namespace Eigen;
namespace uLib {
class Structured4DGrid {
public:
Structured4DGrid();
/// unit-space
void SetDims(const Vector4i &size);
inline Vector4i GetDims() {return m_Dims; }
bool IsInsideGrid(const Vector4i &v) const;
inline int Map(Vector4i index) const { return (m_Increments.transpose() * index);}
Vector4i UnMap(int index) const;
/// physics-space
void SetPhysicalSpace(const Vector4f &origin, const Vector4f &spacing);
inline Vector4f GetSpacing() const { return m_binW; }
inline Vector4f GetOrigin() const { return m_Origin; }
bool IsInsideBounds(const Vector4f &pt) const;
/// operations
Vector4i PhysicsToUnitSpace(const Vector4f &pt) const;
Vector4f UnitToPhysicsSpace(const Vector4i &ind) const;
void PrintSelf(std::ostream &o);
void SetDebug(bool debug){ m_debug = debug; };
private:
Vector4i m_Dims;
Vector4i m_Increments;
Vector4f m_binW;
Vector4f m_Origin;
bool m_debug;
Transform<float, 4, Eigen::Affine> m_uni2phys_T;
Transform<float, 4, Eigen::Affine> m_phys2uni_T;
};
}
#endif // Structured4DGrid_H

View File

@@ -28,15 +28,12 @@
#ifndef STRUCTUREDDATA_H
#define STRUCTUREDDATA_H
#include "Core/Macros.h"
#include "Core/Object.h"
#include "Math/Dense.h"
namespace uLib {
class StructuredData : public Object {
class StructuredData {
public:
typedef Object BaseClass;
enum _Order
{
CustomOrder = 0,
@@ -53,22 +50,23 @@ public:
StructuredData(const Vector3i &size);
StructuredData(const StructuredData &copy) :
BaseClass(copy),
m_DataOrder(copy.m_DataOrder),
m_Dims(copy.m_Dims),
m_Increments(copy.m_Increments)
{}
uLibGetMacro(Dims,Vector3i)
inline Vector3i GetDims() const { return this->m_Dims; }
void SetDims(const Vector3i &size);
uLibGetSetMacro(Increments,Vector3i)
inline Vector3i GetIncrements() const { return this->m_Increments; }
inline void SetIncrements(Vector3i name) { this->m_Increments = name; }
void SetDataOrder(Order order = YXZ);
uLibGetMacro(DataOrder,Order)
inline Order GetDataOrder() const { return this->m_DataOrder; }
bool IsInsideGrid(const Vector3i &v) const;

View File

@@ -28,7 +28,6 @@
#ifndef U_MATH_STRUCTUREDGRID_H
#define U_MATH_STRUCTUREDGRID_H
#include "Core/Object.h"
#include "Math/ContainerBox.h"
#include "Math/StructuredData.h"

View File

@@ -25,31 +25,30 @@
/*
/*
* Copyright (C) 2012 Andrea Rigoni Garola <andrea.rigoni@pd.infn.it>
*
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* License, or (at your option) any later version.
*
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*
*
*/
#ifndef U_TRANSFORM_H
#define U_TRANSFORM_H
#include <Core/Macros.h>
#include <Eigen/Geometry>
@@ -80,7 +79,10 @@ public:
{}
Eigen::Affine3f& GetTransform() { return m_T; }
uLibGetSetMacro(Parent,AffineTransform *)
inline AffineTransform *GetParent() const { return this->m_Parent; }
inline void SetParent(AffineTransform *name) { this->m_Parent = name; }
inline void SetMatrix (Matrix4f &mat) { m_T.matrix() = mat; }
inline Matrix4f& GetMatrix () { return m_T.matrix(); }
@@ -108,6 +110,17 @@ public:
inline void Rotate(const Matrix3f &m) { this->m_T.rotate(m); }
inline void Rotate(const float angle, Vector3f axis)
{
axis.normalize(); // prehaps not necessary ( see eigens )
Eigen::AngleAxisf ax(angle,axis);
this->m_T.rotate(Eigen::Quaternion<float>(ax));
}
inline void Rotate(const Vector3f euler_axis) {
float angle = euler_axis.norm();
Rotate(angle,euler_axis);
}
inline void PreRotate(const Matrix3f &m) { this->m_T.prerotate(m); }

View File

@@ -28,14 +28,14 @@
#ifndef TRIANGLEMESH_H
#define TRIANGLEMESH_H
#include "Core/Object.h"
#include "Core/Vector.h"
#include <vector>
#include "Math/Dense.h"
namespace uLib {
class TriangleMesh : public Object {
class TriangleMesh
{
public:
void PrintSelf(std::ostream &o);
@@ -44,12 +44,12 @@ public:
void AddTriangle(const Id_t *id);
void AddTriangle(const Vector3i &id);
uLibRefMacro(Points,Vector<Vector3f>)
uLibRefMacro(Triangles,Vector<Vector3i>)
inline std::vector<Vector3f> & Points() { return this->m_Points; }
inline std::vector<Vector3i> & Triangles() { return this->m_Triangles; }
private:
Vector<Vector3f> m_Points;
Vector<Vector3i> m_Triangles;
std::vector<Vector3f> m_Points;
std::vector<Vector3i> m_Triangles;
};

View File

@@ -30,6 +30,13 @@
#include "VoxImage.h"
#include <vtkSmartPointer.h>
#include <vtkImageData.h>
#include <vtkXMLImageDataReader.h>
#include <vtkXMLImageDataWriter.h>
#include <vtkStringArray.h>
#include <vtkInformation.h>
#include <vtkInformationStringKey.h>
namespace uLib {
@@ -83,7 +90,103 @@ void Abstract::VoxImage::ExportToVtk (const char *file, bool density_type)
printf("%s vtk file saved\n",file);
}
int Abstract::VoxImage::ImportFromVtk(const char *file)
void Abstract::VoxImage::ExportToVti (const char *file, bool density_type, bool compressed)
{
Abstract::VoxImage *voxels = this;
vtkSmartPointer<vtkImageData> image = vtkSmartPointer<vtkImageData>::New();
image->SetDimensions(voxels->GetDims()(0), voxels->GetDims()(1), voxels->GetDims()(2));
image->SetSpacing(voxels->GetSpacing()(0), voxels->GetSpacing()(1), voxels->GetSpacing()(2));
image->SetOrigin(voxels->GetPosition()(0), voxels->GetPosition()(1), voxels->GetPosition()(2));
image->AllocateScalars(VTK_FLOAT, 1);
float norm;
if (density_type) {
norm = 1;
} else norm = 1.E6;
int nx = voxels->GetDims()(0);
int ny = voxels->GetDims()(1);
int nz = voxels->GetDims()(2);
size_t npoints = nx*ny*nz;
float *scalar = static_cast<float*>(image->GetScalarPointer());
StructuredData unwrap(*voxels);
unwrap.SetDataOrder(StructuredData::XYZ); // move to XYZ order (VTK)
for (size_t i = 0; i < npoints; i++) {
Vector3i idx = unwrap.UnMap(i);
scalar[i] = static_cast<float>(voxels->GetValue(idx) * norm);
}
// Create a custom string key
static vtkInformationStringKey* ConfigNote =
vtkInformationStringKey::MakeKey("cmt.config", "Config");
// Attach metadata
vtkInformation *info = image->GetInformation();
info->Set(ConfigNote,
"This image was generated with uLib\n"
"-----------------------------------\n"
"Author: Andrea Rigoni\n"
"Version: 0.1\n"
"Date: 2025\n"
);
// std::cout << info->Get(ConfigNote) << std::endl;
vtkSmartPointer<vtkXMLImageDataWriter> writer = vtkSmartPointer<vtkXMLImageDataWriter>::New();
writer->SetFileName(file);
writer->SetInputData(image);
if(compressed) {
writer->SetDataModeToBinary();
writer->SetCompressorTypeToZLib();
}
writer->Write();
}
int Abstract::VoxImage::ImportFromVti(const char *file, bool density_type) {
vtkSmartPointer<vtkXMLImageDataReader> reader = vtkSmartPointer<vtkXMLImageDataReader>::New();
reader->SetFileName(file);
reader->Update();
vtkImageData *image = reader->GetOutput();
if(!image) return false;
Abstract::VoxImage *voxels = this;
int nx = image->GetDimensions()[0];
int ny = image->GetDimensions()[1];
int nz = image->GetDimensions()[2];
voxels->SetDims(Vector3i(nx,ny,nz));
voxels->SetSpacing(Vector3f(image->GetSpacing()[0],image->GetSpacing()[1],image->GetSpacing()[2]));
voxels->SetPosition(Vector3f(image->GetOrigin()[0],image->GetOrigin()[1],image->GetOrigin()[2]));
float norm;
if (density_type) {
norm = 1;
} else norm = 1.E6;
size_t npoints = nx*ny*nz;
float *scalar = static_cast<float*>(image->GetScalarPointer());
StructuredData wrap(*voxels);
wrap.SetDataOrder(StructuredData::XYZ);
for (size_t i = 0; i < npoints; i++) {
Vector3i idx = wrap.UnMap(i);
voxels->SetValue(idx, scalar[i] / norm);
}
return true;
}
int Abstract::VoxImage::ImportFromVtk(const char *file, bool density_type)
{
FILE * vtk_file = fopen(file, "r");
if (!vtk_file) return false;
@@ -115,14 +218,18 @@ int Abstract::VoxImage::ImportFromVtk(const char *file)
this->SetSpacing(Vector3f(sx,sy,sz));
this->SetPosition(Vector3f(ox,oy,oz));
float norm;
if (density_type) {
norm = 1;
} else norm = 1.E6;
for (int k = 0; k < dz; ++k) {
for (int j = 0; j < dy; ++j) {
for (int i = 0; i < dx; ++i) {
Vector3i idx(i, j, k);
float tmp_val;
fscanf(vtk_file, "%f", &tmp_val);
//this->SetValue(idx,fabs(tmp_val)*1E-6);
this->SetValue(idx,tmp_val*1E-6);
this->SetValue(idx,tmp_val / norm);
}
}
}

View File

@@ -28,13 +28,13 @@
#ifndef U_MATH_VOXIMAGE_H
#define U_MATH_VOXIMAGE_H
#include "Core/Vector.h"
#include "Core/StaticInterface.h"
#include "Math/Dense.h"
#include "Math/StructuredGrid.h"
#include <iostream>
#include <stdlib.h>
#include <vector>
namespace uLib {
@@ -56,8 +56,18 @@ public:
virtual void SetDims(const Vector3i &size) = 0;
void ExportToVtk(const char *file, bool density_type = 0);
// use this function to export to VTK binary format
void ExportToVti (const char *file, bool density_type = 0, bool compressed = 0);
// this function has been deprecated in favor of ExportToVti
// but it is kept for backward compatibility and because it
// does not depend on vtk library
void ExportToVtkXml(const char *file, bool density_type = 0);
int ImportFromVtk(const char *file);
int ImportFromVtk(const char *file, bool density_type = 0);
int ImportFromVti(const char *file, bool density_type = 0);
protected:
@@ -104,8 +114,8 @@ public:
this->m_Data = copy.m_Data;
}
uLibRefMacro(Data,Vector<T>)
inline const Vector<T>& ConstData() const { return m_Data; }
inline std::vector<T> & Data() { return this->m_Data; }
inline const std::vector<T>& ConstData() const { return m_Data; }
inline const T& At(int i) const { return m_Data.at(i); }
inline const T& At(const Vector3i &id) const { return m_Data.at(Map(id)); }
@@ -130,7 +140,7 @@ public:
inline void SetDims(const Vector3i &size) {
this->m_Data.resize(size.prod());
BaseClass::BaseClass::SetDims(size); // FIX horrible coding style !
}
}
inline VoxImage<T> clipImage(const Vector3i begin, const Vector3i end) const;
inline VoxImage<T> clipImage(const HPoint3f begin, const HPoint3f end) const;
@@ -213,7 +223,7 @@ public:
}
private:
Vector<T> m_Data;
std::vector<T> m_Data;
};

View File

@@ -29,7 +29,6 @@
#define VOXIMAGEFILTER_H
#include "Core/StaticInterface.h"
#include "Core/Object.h"
#include "Math/Dense.h"
#include "Math/VoxImage.h"
@@ -64,15 +63,15 @@ protected:
template < typename VoxelT, typename AlgorithmT >
class VoxImageFilter : public Abstract::VoxImageFilter, public Object
{
class VoxImageFilter : public Abstract::VoxImageFilter
{
public:
VoxImageFilter(const Vector3i &size);
void Run();
void SetKernelNumericXZY(const Vector<float> &numeric);
void SetKernelNumericXZY(const std::vector<float> &numeric);
void SetKernelSpherical(float (*shape)(float));
@@ -84,9 +83,9 @@ public:
template < class ShapeT >
void SetKernelWeightFunction( ShapeT shape );
uLibGetMacro(KernelData,Kernel<VoxelT>)
inline Kernel<VoxelT> GetKernelData() const { return this->m_KernelData; }
uLibGetMacro(Image,VoxImage<VoxelT> *)
inline VoxImage<VoxelT>* GetImage() const { return this->m_Image; }
void SetImage(Abstract::VoxImage *image);

View File

@@ -48,14 +48,14 @@ public:
inline T& operator[](const int &id) { return m_Data[id]; }
inline int GetCenterData() const;
uLibRefMacro(Data,Vector<T>)
inline std::vector<T> & Data() { return this->m_Data; }
inline const Vector<T>& ConstData() const { return this->m_Data; }
inline const std::vector<T>& ConstData() const { return this->m_Data; }
void PrintSelf(std::ostream &o) const;
private:
Vector<T> m_Data;
std::vector<T> m_Data;
};
template < typename T >
@@ -163,7 +163,7 @@ float VoxImageFilter<_TPLT_>::Distance2(const Vector3i &v)
_TPL_
void VoxImageFilter<_TPLT_>::SetKernelNumericXZY(const Vector<float> &numeric)
void VoxImageFilter<_TPLT_>::SetKernelNumericXZY(const std::vector<float> &numeric)
{
// set data order //
StructuredData::Order order = m_KernelData.GetDataOrder();
@@ -268,8 +268,8 @@ void VoxImageFilter<_TPLT_>::SetImage(Abstract::VoxImage *image)
_TPL_
float VoxImageFilter<_TPLT_>::Convolve(const VoxImage<VoxelT> &buffer, int index)
{
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = m_KernelData.ConstData();
int vox_size = vbuf.size();
int ker_size = vker.size();
int pos;

View File

@@ -50,8 +50,8 @@ public:
float Evaluate(const VoxImage<VoxelT> &buffer, int index)
{
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = this->m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = this->m_KernelData.ConstData();
int vox_size = vbuf.size();
int ker_size = vker.size();
int pos;

View File

@@ -59,13 +59,13 @@ public:
float Evaluate(const VoxImage<VoxelT> &buffer, int index)
{
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = this->m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = this->m_KernelData.ConstData();
int vox_size = vbuf.size();
int ker_size = vker.size();
int pos;
Vector<VoxelT> mfh(ker_size);
std::vector<VoxelT> mfh(ker_size);
for (int i = 0; i < ker_size; ++i)
mfh[i].Count = i; //index key for ordering function
for (int ik = 0; ik < ker_size; ik++) {
@@ -126,13 +126,13 @@ public:
float Evaluate(const VoxImage<VoxelT> &buffer, int index)
{
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = this->m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = this->m_KernelData.ConstData();
int vox_size = vbuf.size();
int ker_size = vker.size();
int pos;
Vector<VoxelT> mfh(ker_size);
std::vector<VoxelT> mfh(ker_size);
for (int i = 0; i < ker_size; ++i)
mfh[i].Count = i; //index key for ordering function
for (int ik = 0; ik < ker_size; ik++) {

View File

@@ -50,8 +50,8 @@ public:
float Evaluate(const VoxImage<VoxelT> &buffer, int index)
{
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = this->m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = this->m_KernelData.ConstData();
int vox_size = vbuf.size();
int ker_size = vker.size();
int pos;
@@ -101,15 +101,15 @@ public:
float Evaluate(const VoxImage<VoxelT> &buffer, int index)
{
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = this->m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = this->m_KernelData.ConstData();
int img_size = vbuf.size();
int ker_size = vker.size();
int pos;
Vector<FPair> mfh(ker_size);
std::vector<FPair> mfh(ker_size);
for (int i = 0; i < ker_size; ++i)
mfh[i].first = vker[i].Value; // kernel value in first
for (int ik = 0; ik < ker_size; ik++) {

View File

@@ -32,6 +32,8 @@
#include "Math/VoxImage.h"
#include "VoxImageFilter.h"
#define likely(expr) __builtin_expect(!!(expr), 1)
////////////////////////////////////////////////////////////////////////////////
///// VOXIMAGE FILTER CUSTOM /////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
@@ -43,7 +45,7 @@ class VoxFilterAlgorithmCustom :
public VoxImageFilter<VoxelT, VoxFilterAlgorithmCustom<VoxelT> > {
typedef float (* FunctionPt)(const Vector<Scalarf> &);
typedef float (* FunctionPt)(const std::vector<Scalarf> &);
public:
typedef VoxImageFilter<VoxelT, VoxFilterAlgorithmCustom<VoxelT> > BaseClass;
VoxFilterAlgorithmCustom(const Vector3i &size) :
@@ -53,14 +55,14 @@ public:
float Evaluate(const VoxImage<VoxelT> &buffer, int index)
{
if(likely(m_CustomEvaluate)) {
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = this->m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = this->m_KernelData.ConstData();
int vox_size = vbuf.size();
int ker_size = vker.size();
int pos;
float ker_sum = 0;
Vector<Scalarf> mfh(ker_size);
std::vector<Scalarf> mfh(ker_size);
for (int ik = 0; ik < ker_size; ik++) {
pos = index + vker[ik].Count - vker[this->m_KernelData.GetCenterData()].Count;
pos = (pos + vox_size) % vox_size;
@@ -76,7 +78,7 @@ public:
}
uLibSetMacro(CustomEvaluate,FunctionPt)
inline void SetCustomEvaluate(FunctionPt funPt) { this->m_CustomEvaluate = funPt; }
private:
FunctionPt m_CustomEvaluate;

View File

@@ -48,8 +48,8 @@ public:
float Evaluate(const VoxImage<VoxelT> &buffer, int index)
{
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = this->m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = this->m_KernelData.ConstData();
int vox_size = vbuf.size();
int ker_size = vker.size();
int pos;

View File

@@ -47,13 +47,13 @@ public:
float Evaluate(const VoxImage<VoxelT> &buffer, int index)
{
const Vector<VoxelT> &vbuf = buffer.ConstData();
const Vector<VoxelT> &vker = this->m_KernelData.ConstData();
const std::vector<VoxelT> &vbuf = buffer.ConstData();
const std::vector<VoxelT> &vker = this->m_KernelData.ConstData();
int vox_size = vbuf.size();
int ker_size = vker.size();
int pos;
Vector<float> mfh(ker_size);
std::vector<float> mfh(ker_size);
for (int ik = 0; ik < ker_size; ik++) {
pos = index + vker[ik].Count - vker[this->m_KernelData.GetCenterData()].Count;
pos = (pos + vox_size) % vox_size;

View File

@@ -26,7 +26,6 @@
#include "Core/Vector.h"
#include "Dense.h"
#include "VoxImage.h"
#include "VoxImageFilterUser.h"

View File

@@ -24,11 +24,13 @@
//////////////////////////////////////////////////////////////////////////////*/
#include <iostream>
#include "VoxRaytracer.h"
#include "Utils.h"
#define unlikely(expr) __builtin_expect(!!(expr), 0)
inline float fast_sign(float f) { return 1 - 2 * (f < 0); }
namespace uLib {
@@ -80,7 +82,7 @@ void VoxRaytracer::RayData::AppendRay(const VoxRaytracer::RayData &in)
void VoxRaytracer::RayData::PrintSelf(std::ostream &o)
{
o << "Ray: total lenght " << m_TotalLength << "\n";
Vector<Element>::Iterator it;
std::vector<Element>::iterator it;
for(it = m_Data.begin(); it < m_Data.end(); ++it)
o << "[ " << (*it).vox_id << ", " << (*it).L << "] \n";
}
@@ -164,7 +166,7 @@ const
// scale << (m_Image->GetWorldMatrix() * Vector4f(1,0,0,0)).norm(),
// (m_Image->GetWorldMatrix() * Vector4f(0,1,0,0)).norm(),
// (m_Image->GetWorldMatrix() * Vector4f(0,0,1,0)).norm();
Vector3f offset;
for(int i=0;i<3;++i) offset(i) = (s(i)>=0) - (pt1(i)-floor(pt1(i))) ;
offset = offset.cwiseProduct(L).cwiseAbs();
@@ -172,29 +174,29 @@ const
//---- Check if the ray only crosses one voxel
Vector3i vid = m_Image->Find(in);
if(vid == m_Image->Find(out)){
if(vid == m_Image->Find(out)){
ray.AddElement(m_Image->Map(vid),s.norm());
return ray;
}
//---- Otherwise, loop until ray is finished
int id; float d;
int id; float d;
while(l>0){
d = offset.minCoeff(&id);
if(m_Image->IsInsideGrid(vid)){
ray.AddElement(m_Image->Map(vid), d * m_scale(id) );
}
// nan check //
// if(unlikely(!isFinite(d * scale(id)))) {
// std:: cout << "NAN in raytracer\n";
// exit(1);
// }
vid(id) += (int)fast_sign(s(id));
l -= d;
offset.array() -= d;
offset(id) = fmin(L(id),l);

View File

@@ -29,8 +29,8 @@
#define VOXRAYTRACER_H
#include <math.h>
#include <vector>
#include "Core/Vector.h"
#include "Math/StructuredGrid.h"
namespace uLib {
@@ -51,14 +51,15 @@ public:
void AppendRay ( const RayData &in);
uLibConstRefMacro(Data,Vector<Element>)
uLibConstRefMacro(TotalLength,Scalarf)
inline const std::vector<Element>& Data() const { return this->m_Data; }
inline const Scalarf& TotalLength() const { return this->m_TotalLength; }
void PrintSelf(std::ostream &o);
private:
Vector<Element> m_Data;
Scalarf m_TotalLength;
std::vector<Element> m_Data;
Scalarf m_TotalLength;
};
@@ -78,11 +79,11 @@ public:
RayData TraceLine(const HLine3f &line) const;
uLibGetMacro(Image,StructuredGrid *)
inline StructuredGrid* GetImage() const { return this->m_Image; }
private:
StructuredGrid *m_Image;
Vector3f m_scale;
Vector3f m_scale;
};
}

View File

@@ -44,14 +44,16 @@ int test_ABTrim() {
acc.SetABTrim(1,1);
Vector<float> v;
v << 1,5,5,5,300;
std::vector<float> v;
for(float tmpf : {1,5,5,5,300}) v.push_back(tmpf);
//v << 1,5,5,5,300;
for(Vector<float>::Iterator itr=v.begin(); itr<v.end(); itr++)
for(std::vector<float>::iterator itr=v.begin(); itr<v.end(); itr++)
acc += *itr;
std::cout << "Accumulating Trim(1,1) vector: "
<< v << " ... out = " << acc() << "\n";
// TODO missing operator <<
//std::cout << "Accumulating Trim(1,1) vector: "
// << v << " ... out = " << acc() << "\n";
return( acc() == 15.0 );
@@ -62,7 +64,7 @@ int test_Mean() {
Accumulator_Mean<float> mean;
TRandom rnd;
const int c = 10000000;
Vector<float> v;
std::vector<float> v;
v.reserve(c);
for(int i=0;i<c;++i) v.push_back( rnd.Gaus(2000,5) );

View File

@@ -14,5 +14,9 @@ set(TESTS
BitCodeTest
)
set(LIBRARIES
${PACKAGE_LIBPREFIX}Core
${PACKAGE_LIBPREFIX}Math
)
uLib_add_tests(${uLib-module})
uLib_add_tests(Math)

View File

@@ -63,7 +63,7 @@ private:
};
static float MaxInVector(const Vector<float> &v)
static float MaxInVector(const std::vector<float> &v)
{
float max = 0;
for(int i=0; i<v.size(); ++i)
@@ -93,7 +93,7 @@ int main()
VoxImage<TestVoxel> filtered = image;
Vector<float> values;
std::vector<float> values;
for(int i=0; i < filter.GetKernelData().GetDims().prod(); ++i) {
values.push_back(1.);
std::cout << values[i] << " ";
@@ -128,7 +128,7 @@ int main()
VoxFilterAlgorithmCustom<TestVoxel> filter(Vector3i(3,3,4));
Vector<float> values;
std::vector<float> values;
for(int i=0; i < filter.GetKernelData().GetDims().prod(); ++i) {
values.push_back(static_cast<float>(1));
}

View File

@@ -92,6 +92,20 @@ int main() {
imgR.ExportToVtk("./read_and_saved.vtk");
}
{
VoxImage<TestVoxel> img(Vector3i(4,4,4));
img.InitVoxels({0,0});
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
for (int k=0; k<4; k++) {
img[Vector3i(i,j,k)] = {i+j+k,0};
}
}
}
img.ExportToVti("./vti_saved.vti",0,1);
// img.ImportFromVtkXml("./test_vox_image.vti");
}
{
VoxImage<TestVoxel> img1(Vector3i(5,5,5));

View File

@@ -94,7 +94,7 @@ int main()
TEST1( pt == HPoint3f(-3,-3,-3) );
Raytracer::RayData rdata = ray.TraceBetweenPoints(HPoint3f(-3,-3,-3), HPoint3f(3,3,3));
foreach (const Raytracer::RayData::Element &el, rdata.Data())
for(const Raytracer::RayData::Element &el : rdata.Data())
{
std::cout << " " << el.vox_id << " , " << el.L << "\n";
}

View File

@@ -1,49 +1,65 @@
set(HEADERS
TestTObject.h
RootMathDense.h
RootMuonScatter.h
RootHitRaw.h
muBlastHit.h
muBlastMCTrack.h
muCastorMCTrack.h
muCastorHit.h
)
set(HEADERS RootMathDense.h
RootMuonScatter.h
RootHitRaw.h
muCastorMCTrack.h
muCastorHit.h
muCastorInfo.h
muCastorSkinHit.h
muCastorPrimaryVertex.h
muCastorMuDetDIGI.h
SkinDetectorWriter.h)
set(DICTIONARY_HEADERS
TestTObject.h
RootMathDense.h
RootMuonScatter.h
RootHitRaw.h
muBlastHit.h
muBlastMCTrack.h
muCastorMCTrack.h
muCastorHit.h
)
set(SOURCES ${HEADERS} RootMuonScatter.cpp
muCastorMCTrack.cpp
muCastorHit.cpp
muCastorInfo.cpp
muCastorSkinHit.cpp
muCastorPrimaryVertex.cpp
muCastorMuDetDIGI.cpp
SkinDetectorWriter.cpp)
SET(SOURCES
TestTObject.cpp
RootMuonScatter.cpp
muBlastHit.cpp
muBlastMCTrack.cpp
muCastorMCTrack.cpp
muCastorHit.cpp
)
set(DICTIONARY_HEADERS muCastorMCTrack.h
muCastorHit.h
muCastorInfo.h
muCastorSkinHit.h
muCastorPrimaryVertex.h
muCastorMuDetDIGI.h
SkinDetectorWriter.h)
set(LIBRARIES
# ${Boost_SERIALIZATION_LIBRARY}
# ${Boost_SIGNALS_LIBRARY}
# ${Boost_PROGRAM_OPTIONS_LIBRARY}
${ROOT_LIBRARIES}
${PACKAGE_LIBPREFIX}Core
${PACKAGE_LIBPREFIX}Math
)
set(LIBRARIES ${ROOT_LIBRARIES}
${PACKAGE_LIBPREFIX}Math)
include(FindROOTv6)
root_generate_dictionary(uLibRootDict ${DICTIONARY_HEADERS} LINKDEF Linkdef.h)
set_source_files_properties(uLibRootDict.cxx PROPERTIES GENERATED TRUE)
set_source_files_properties(uLibRootDict.h PROPERTIES GENERATED TRUE)
list(APPEND SOURCES uLibRootDict.cxx)
set(rDictName ${PACKAGE_LIBPREFIX}RootDict)
root_generate_dictionary(${rDictName} ${DICTIONARY_HEADERS}
LINKDEF Linkdef.h)
set_source_files_properties(${rDictName}.cxx
PROPERTIES GENERATED TRUE)
set_source_files_properties(${rDictName}.h
PROPERTIES GENERATED TRUE)
list(APPEND SOURCES ${rDictName}.cxx)
# TODO use a custom target linked to root_generate_dictionary
set(R_ARTIFACTS ${CMAKE_CURRENT_BINARY_DIR}/lib${rDictName}_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/lib${rDictName}.rootmap)
install(FILES ${R_ARTIFACTS}
DESTINATION ${INSTALL_LIB_DIR})
set(libname ${PACKAGE_LIBPREFIX}Root)
set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE)
set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Root PARENT_SCOPE)
add_library(${libname} SHARED ${SOURCES})
set_target_properties(${libname} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION}
CXX_STANDARD 17)
target_link_libraries(${libname} ${LIBRARIES})
install(TARGETS ${libname}
EXPORT "${PROJECT_NAME}Targets"
RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib)
install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Root)
uLib_add_shared_library(${uLib-module})
add_subdirectory(testing)

View File

@@ -74,10 +74,13 @@ using namespace ROOT::Mutom;
#pragma link C++ function HitRaw::Tdc() const;
#pragma link C++ function HitRaw::Ch() const;
#pragma link C++ class muBlastMCTrack+;
#pragma link C++ class muBlastHit+;
#pragma link C++ class muCastorMCTrack+;
#pragma link C++ class muCastorHit+;
#pragma link C++ class muCastorInfo+;
#pragma link C++ class muCastorSkinHit+;
#pragma link C++ class muCastorPrimaryVertex+;
#pragma link C++ class muCastorMuDetDIGI+;
#pragma link C++ class SkinDetectorWriter+;
#endif // __CINT__

View File

@@ -0,0 +1,47 @@
#include "SkinDetectorWriter.h"
#include "muCastorSkinHit.h"
#include "TVector3.h"
SkinDetectorWriter::SkinDetectorWriter(string filename) :
t_file(nullptr),
t_tree(nullptr),
t_buffer(nullptr),
i_status(0)
{
t_file = new TFile(filename.c_str(), "RECREATE");
t_tree = new TTree("muCastorMC", "muCastorMC");
t_buffer = new TClonesArray("muCastorSkinHit");
t_tree->Branch("CastorSkinHits", "TClonesArray", t_buffer, 32000, 99);
if (t_file->IsZombie()) i_status = 1;
}
SkinDetectorWriter::~SkinDetectorWriter()
{}
void SkinDetectorWriter::add(int detID, float p_x, float p_y, float p_z,
float m_x, float m_y, float m_z)
{
TClonesArray& ref = *t_buffer;
int size = ref.GetEntriesFast();
muCastorSkinHit* new_hit = new(ref[size]) muCastorSkinHit();
new_hit->SetDetID(detID);
new_hit->SetPdgCode(13);
new_hit->SetMotherID(-1);
new_hit->SetPos (TVector3(p_x, p_y, p_z));
new_hit->SetMom (TVector3(m_x, m_y, m_z));
}
void SkinDetectorWriter::write()
{
if (t_tree->Fill() < 0) i_status = 2;
t_buffer->Delete(); // or t_buffer->Clear() ??
}
void SkinDetectorWriter::close()
{
if (t_tree->Write() == 0) i_status = 3;
t_file->Close();
}

View File

@@ -0,0 +1,32 @@
#ifndef SkinDetectorWriter_h
#define SkinDetectorWriter_h
#include <string>
#include "TFile.h"
#include "TTree.h"
#include "TClonesArray.h"
using std::string;
class SkinDetectorWriter
{
public:
SkinDetectorWriter(string filename);
virtual ~SkinDetectorWriter();
void add(int detID, float p_x, float p_y, float p_z, float m_x, float m_y, float m_z);
int status() { return i_status; }
void write();
void close();
private:
TFile* t_file;
TTree* t_tree;
TClonesArray* t_buffer;
int i_status;
};
#endif //SkinDetectorWriter_h

View File

@@ -9,6 +9,7 @@
// Martin Subieta martin.subieta@ing.unibs.it
//########################################
#include <iostream>
#include <vector>
#include "TObject.h"
#include "TParticle.h"

44
src/Root/muCastorInfo.cpp Normal file
View File

@@ -0,0 +1,44 @@
//------------------------------------------------
// The Virtual Monte Carlo examples
// Copyright (C) 2007, 2008 Ivana Hrivnacova
// All rights reserved.
//
// For the licensing terms see geant4_vmc/LICENSE.
// Contact: vmc@pcroot.cern.ch
//-------------------------------------------------
/// \file muCastorInfo.cxx
/// \brief Implementation of the muCastorInfo class
///
/// \author G. Bonomi, A. Donzella - INFN
#include <iostream>
#include "muCastorInfo.h"
/// \cond CLASSIMP
ClassImp(muCastorInfo)
/// \endcond
using namespace std;
//_____________________________________________________________________________
muCastorInfo::muCastorInfo()
: fMuGen(-1)
{
/// Default constructor
}
//_____________________________________________________________________________
muCastorInfo::~muCastorInfo()
{
/// Destructor
}
//_____________________________________________________________________________
void muCastorInfo::Print(const Option_t* /*opt*/) const
{
/// Printing
cout << " Generated muons: " << fMuGen
<< endl;
}

44
src/Root/muCastorInfo.h Normal file
View File

@@ -0,0 +1,44 @@
#ifndef muCastor_RUN_H
#define muCastor_RUN_H
//------------------------------------------------
// The Virtual Monte Carlo examples
// Copyright (C) 2007, 2008 Ivana Hrivnacova
// All rights reserved.
//
// For the licensing terms see geant4_vmc/LICENSE.
// Contact: vmc@pcroot.cern.ch
//-------------------------------------------------
/// \file muCastorInfo.h
/// \brief Definition of the muCastorInfo class
///
/// \authors G. Bonomi, A. Donzella - INFN
#include <TObject.h>
#include <TVector3.h>
class muCastorInfo : public TObject
{
public:
muCastorInfo();
virtual ~muCastorInfo();
// methods
virtual void Print(const Option_t* option = "") const;
void SetMuGen (Int_t muGen) { fMuGen = muGen; };
void SetMuTrk (Int_t muTrk) { fMuTrk = muTrk; };
Int_t GetMuGen() { return fMuGen; };
private:
Int_t fMuGen; // Generated muons
Int_t fMuTrk; // Tracked muons
ClassDef(muCastorInfo,1) //muCastorInfo
};
#endif //muCastor_RUN_H

View File

@@ -6,11 +6,9 @@
// Martin Subieta martin.subieta@ing.unibs.it
//******************************************************************************************
#include <iostream>
#include "Detectors/MuonScatter.h"
#include <Root/muCastorMCTrack.h>
#include <TClonesArray.h>
#include <iostream>
using namespace std;
@@ -32,8 +30,6 @@ uLib::MuonScatter &operator << (uLib::MuonScatter &mu, const muCastorMCTrack &bs
return mu;
}
//namespace ROOT {
//namespace Mutom {
// ----- Default constructor -------------------------------------------
muCastorMCTrack::muCastorMCTrack()
{
@@ -223,5 +219,3 @@ void muCastorMCTrack::Reset()
fPntE = 0;
}
//} // Mutom
//} // ROOT

View File

@@ -9,20 +9,14 @@
// Martin Subieta martin.subieta@ing.unibs.it
//########################################
#include <iostream>
#include "vector"
#include "TObject.h"
#include "TParticle.h"
#include "Detectors/MuonScatter.h"
class TClonesArray;
namespace uLib {
class MuonScatter;
}
//namespace ROOT {
//namespace Mutom {
class muCastorMCTrack : public TObject
{
@@ -89,8 +83,6 @@ public:
ClassDef(muCastorMCTrack,1);
};
//} // Mutom
//} // ROOT
uLib::MuonScatter &operator << (uLib::MuonScatter &mu, const muCastorMCTrack &bsmu);
#endif //muCastor_MCTRACK_H

View File

@@ -0,0 +1,41 @@
/// \file muCastorMuDetDIGI.cxx
/// \brief Implementation of the muCastorMuDetDIGI class
// This class build the DIGI for the scintillator detectors
/// \author G. Bonomi, M. Subieta - INFN
#include <iostream>
#include "muCastorMuDetDIGI.h"
/// \cond CLASSIMP
ClassImp(muCastorMuDetDIGI)
/// \endcond
using namespace std;
//_____________________________________________________________________________
muCastorMuDetDIGI::muCastorMuDetDIGI() :
fDetID(-1),
fLayID(-1),
fTubID(-1),
fDistMC(0.),
fDriftMC(0.),
fDist(0.),
fDrift(0.),
fEnergy(0.)
{}
//_____________________________________________________________________________
muCastorMuDetDIGI::~muCastorMuDetDIGI()
{}
//_____________________________________________________________________________
void muCastorMuDetDIGI::Print(const Option_t* /*opt*/) const
{
cout << " DetID: " << fDetID
<< " LayID: " << fLayID
<< " TubID: " << fTubID
<< " energy deposit (keV): " << fEnergy
<< endl;
}

View File

@@ -0,0 +1,75 @@
#ifndef muCastor_MuDetDIGI_H
#define muCastor_MuDetDIGI_H
/// \file muCastorMuDetDIGI.h
/// \brief Definition of the muCastorMuDetDIGI class
///
/// \authors G. Bonomi, M. Subieta - INFN
#include <TObject.h>
class muCastorMuDetDIGI : public TObject
{
public:
muCastorMuDetDIGI();
virtual ~muCastorMuDetDIGI();
// -------> PUBLIC FUNCTIONS
virtual void Print(const Option_t* option = "") const;
// -------> SET METHODS
/// Set Det ID (Detector module)
void SetDetID(Int_t id) { fDetID = id; };
/// Set Layer ID (Layer [0,5])
void SetLayID(Int_t id) { fLayID = id; };
/// Set Tube ID (Tube inside each layer)
void SetTubID(Int_t id) { fTubID = id; };
void SetDistMC (Double_t v) { fDistMC = v; };
void SetDriftMC (Double_t v) { fDriftMC= v; };
void SetDist (Double_t v) { fDist = v; };
void SetDrift (Double_t v) { fDrift = v; };
// Set energy
void SetEnergy(Double_t e) { fEnergy = e; };
// -------> GET METHODS
/// \return The Module number
Int_t GetDetID() { return fDetID; };
/// \return The Layer number
Int_t GetLayID() { return fLayID; };
/// \return The Tube number
Int_t GetTubID() { return fTubID; };
Double_t GetDistMC() { return fDistMC; };
Double_t GetDriftMC() { return fDriftMC; };
Double_t GetDist() { return fDist; };
Double_t GetDrift() { return fDrift; };
/// \return Get energy
Double_t GetEnergy() { return fEnergy; };
// -------> PRIVATE VARIABLES
private:
Int_t fDetID; // Detector module ID
Int_t fLayID; // Detector layer ID
Int_t fTubID; // Layer tube ID
Double_t fDistMC; // Minimum distance of particle tracks to the wire
Double_t fDriftMC; // Minimum drift time to the wire
Double_t fDist; // Minimum distance of particle tracks to the wire (with smearing)
Double_t fDrift; // Minimum drift time to the wire (with smearing)
Double_t fEnergy; // Energy released in the element
ClassDef(muCastorMuDetDIGI,1) //muCastorMuDetDIGI
};
#endif //muCastorMuDetDIGI_H

View File

@@ -0,0 +1,47 @@
#include <iostream>
#include <limits>
#include "muCastorPrimaryVertex.h"
/// \cond CLASSIMP
ClassImp(muCastorPrimaryVertex)
/// \endcond
using namespace std;
//_____________________________________________________________________________
muCastorPrimaryVertex::muCastorPrimaryVertex() {
/// Default constructor
Reset();
}
//_____________________________________________________________________________
muCastorPrimaryVertex::~muCastorPrimaryVertex()
{
/// Destructor
}
//_____________________________________________________________________________
void muCastorPrimaryVertex::Reset()
{
fPdgCode = 0;
fVx = std::numeric_limits<double>::quiet_NaN();
fVy = std::numeric_limits<double>::quiet_NaN();
fVz = std::numeric_limits<double>::quiet_NaN();
fPx = std::numeric_limits<double>::quiet_NaN();
fPy = std::numeric_limits<double>::quiet_NaN();
fPz = std::numeric_limits<double>::quiet_NaN();
fE = std::numeric_limits<double>::quiet_NaN();
}
//_____________________________________________________________________________
void muCastorPrimaryVertex::Print(const Option_t* /*opt*/) const
{
/// Printing
cout << " Primary particle PDG Code " << fPdgCode << endl;
cout << " Vertex: (" << fVx << ", " << fVy << ", " << fVz << ") cm" << endl;
cout << " Mom: (" << fPx << ", " << fPy << ", " << fPz << ") MeV/c" << endl;
}

View File

@@ -0,0 +1,53 @@
#ifndef muCastor_PVTX_H
#define muCastor_PVTX_H
/// \brief Definition of the muCastorPrimaryVertex class
///
/// \authors G. Bonomi (04/02/2020)
#include <TObject.h>
class muCastorPrimaryVertex : public TObject
{
public:
muCastorPrimaryVertex();
virtual ~muCastorPrimaryVertex();
// -------> PUBLIC FUNCTIONS
virtual void Print(const Option_t* option = "") const;
// -------> SET METHODS
void SetPdgCode(Int_t code) { fPdgCode = code; };
void SetVx(Double_t Vx) { fVx = Vx; };
void SetVy(Double_t Vy) { fVy = Vy; };
void SetVz(Double_t Vz) { fVz = Vz; };
void SetPx(Double_t Px) { fPx = Px; };
void SetPy(Double_t Py) { fPy = Py; };
void SetPz(Double_t Pz) { fPz = Pz; };
void SetE(Double_t E) { fE = E; };
void Reset();
private:
// -------> PRIVATE VARIABLES
Int_t fPdgCode; // PDG code of the particle
Double_t fVx; // x of production vertex
Double_t fVy; // y of production vertex
Double_t fVz; // z of production vertex
Double_t fPx; // x component of momentum
Double_t fPy; // y component of momentum
Double_t fPz; // z component of momentum
Double_t fE; // Energy
ClassDef(muCastorPrimaryVertex,1) //muCastorPrimaryVertex
};
#endif //muCastor_PVTX_H

View File

@@ -0,0 +1,43 @@
//----------------------------------------------------------
// Class : CastorSkinHit
// Date: October 2020
// Author: Germano Bonomi germano.bonomi@unibs.it
//----------------------------------------------------------
#include <iostream>
#include "muCastorSkinHit.h"
/// \cond CLASSIMP
ClassImp(muCastorSkinHit)
/// \endcond
using namespace std;
//_____________________________________________________________________________
muCastorSkinHit::muCastorSkinHit() :
fDetID(-1),
fPdgCode(-1),
fMotherID(-1),
fMomX(0.),
fMomY(0.),
fMomZ(0.),
fPosX(0.),
fPosY(0.),
fPosZ(0.)
{}
//_____________________________________________________________________________
muCastorSkinHit::~muCastorSkinHit()
{}
//_____________________________________________________________________________
void muCastorSkinHit::Print(const Option_t* /*opt*/) const
{
cout << " detID: " << fDetID
<< " position (cm): ("
<< fPosX << ", " << fPosY << ", " << fPosZ << ")"
<< " momentum (MeV/c): ("
<< fMomX << ", " << fMomY << ", " << fMomZ << ")"
<< endl;
}

View File

@@ -0,0 +1,52 @@
//----------------------------------------------------------
// Class : CastorSkinHit
// Date: October 2020
// Author: Germano Bonomi germano.bonomi@unibs.it
//----------------------------------------------------------
#ifndef muCastor_SKINHIT_H
#define muCastor_SKINHIT_H
#include <TObject.h>
#include <TVector3.h>
class muCastorSkinHit : public TObject
{
public:
muCastorSkinHit();
virtual ~muCastorSkinHit();
// methods
virtual void Print(const Option_t* option = "") const;
// set methods
void SetDetID(Int_t id) { fDetID = id; };
void SetPdgCode(Int_t pdg) { fPdgCode = pdg; };
void SetMotherID(Int_t mid) { fMotherID = mid; };
void SetMom(TVector3 xyz) { fMomX = xyz.X(); fMomY = xyz.Y(); fMomZ = xyz.Z(); };
void SetPos(TVector3 xyz) { fPosX = xyz.X(); fPosY = xyz.Y(); fPosZ = xyz.Z(); };
Int_t GetDetID() { return fDetID; }
Int_t GetPdgCode() { return fPdgCode; }
Int_t GetMotherID() { return fMotherID; }
TVector3 GetMom() { return TVector3(fMomX, fMomY, fMomZ); }
TVector3 GetPos() { return TVector3(fPosX, fPosY, fPosZ); }
private:
Int_t fDetID; // Detector module ID
Int_t fPdgCode; // Particle PDG Code
Int_t fMotherID; // Particle mother ID (-1 = primary, 0 = secondary, etc..)
Double_t fMomX; // Track momentum when releasing the hit (X)
Double_t fMomY; // Track momentum when releasing the hit (Y)
Double_t fMomZ; // Track momentum when releasing the hit (Z)
Double_t fPosX; // Hit coordinates (at the entrance of the detector) (X)
Double_t fPosY; // Hit coordinates (at the entrance of the detector) (Y)
Double_t fPosZ; // Hit coordinates (at the entrance of the detector) (Z)
ClassDef(muCastorSkinHit,1) //muCastorSkinHit
};
#endif //muCastort_SKINHIT_H

View File

@@ -1,39 +1,38 @@
set(HEADERS
uLibVtkInterface.h
uLibVtkViewer.h
vtkContainerBox.h
vtkMuonScatter.h
vtkStructuredGrid.h
vtkVoxRaytracerRepresentation.h
vtkVoxImage.h
# vtkHLineRepresentation.h
# vtkTriangleMesh.h
)
set(HEADERS uLibVtkInterface.h
uLibVtkViewer.h
vtkContainerBox.h
vtkMuonScatter.h
vtkStructuredGrid.h
vtkVoxRaytracerRepresentation.h
vtkVoxImage.h)
SET(SOURCES
uLibVtkInterface.cxx
uLibVtkViewer.cpp
vtkContainerBox.cpp
vtkMuonScatter.cxx
vtkStructuredGrid.cpp
vtkVoxRaytracerRepresentation.cpp
vtkVoxImage.cpp
)
set(SOURCES uLibVtkInterface.cxx
uLibVtkViewer.cpp
vtkContainerBox.cpp
vtkMuonScatter.cxx
vtkStructuredGrid.cpp
vtkVoxRaytracerRepresentation.cpp
vtkVoxImage.cpp)
set(LIBRARIES
${Boost_SERIALIZATION_LIBRARY}
${Boost_SIGNALS_LIBRARY}
${Boost_PROGRAM_OPTIONS_LIBRARY}
${Eigen_LIBRARY}
${ROOT_LIBRARIES}
${Geant4_LIBRARIES}
${VTK_LIBRARIES}
${PACKAGE_LIBPREFIX}Core
${PACKAGE_LIBPREFIX}Math
${PACKAGE_LIBPREFIX}Detectors
${PACKAGE_LIBPREFIX}Vtk
)
set(LIBRARIES ${Eigen_LIBRARY}
${ROOT_LIBRARIES}
${VTK_LIBRARIES}
${PACKAGE_LIBPREFIX}Math)
uLib_add_shared_library(${uLib-module})
set(libname ${PACKAGE_LIBPREFIX}Vtk)
set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE)
set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Vtk PARENT_SCOPE)
add_library(${libname} SHARED ${SOURCES})
set_target_properties(${libname} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION})
target_link_libraries(${libname} ${LIBRARIES})
install(TARGETS ${libname}
EXPORT "${PROJECT_NAME}Targets"
RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib)
install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Vtk)
add_subdirectory(testing)

View File

@@ -9,5 +9,10 @@ set( TESTS
# vtkTriangleMeshTest
)
set(LIBRARIES
${PACKAGE_LIBPREFIX}Core
${PACKAGE_LIBPREFIX}Vtk
)
include(${VTK_USE_FILE})
uLib_add_tests(${uLib-module})

View File

@@ -33,9 +33,6 @@
#include <ostream>
#include <iomanip>
#include <Core/Vector.h>
#include <Core/Object.h>
// vtk classes forward declaration //
@@ -49,22 +46,8 @@ class vtkRendererCollection;
namespace uLib {
namespace Vtk {
//template <class T>
//class Tie {
//public:
// typedef T Content;
//};
class Puppet : public Object
class Puppet
{
uLibTypeMacro(Puppet, Object)
public:
Puppet();
~Puppet();
@@ -109,7 +92,7 @@ public:
virtual void SaveToFile(const char *vtk_file);
virtual void SaveToXMLFile(const char *vtp_file);
virtual void SaveToXMLFile(const char *vtp_file);
protected:
virtual ~Polydata() {}

View File

@@ -31,15 +31,11 @@
#endif
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRendererCollection.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCornerAnnotation.h>
#include <vtkTextProperty.h>
#include <vtkAxesActor.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkCamera.h>
#include "uLibVtkViewer.h"
@@ -47,141 +43,114 @@
namespace uLib {
namespace Vtk {
template <>
class Tie<Viewer> {
public:
void DoAction() {
std::cout << " VIEWER TIE !!! \n";
}
};
//// PIMPL /////////////////////////////////////////////////////////////////////
class ViewerPimpl {
public:
ViewerPimpl() :
m_RenderWindow(vtkRenderWindow::New()),
m_Renderer(vtkRenderer::New()),
m_Annotation(vtkCornerAnnotation::New()),
m_Marker(vtkOrientationMarkerWidget::New())
{
this->InstallPipe();
}
~ViewerPimpl() {
this->UninstallPipe();
m_Annotation->Delete();
m_Marker->Delete();
m_Renderer->Delete();
m_RenderWindow->Delete();
}
// members //
vtkRenderer *m_Renderer;
vtkRenderWindow *m_RenderWindow;
vtkCornerAnnotation *m_Annotation;
vtkOrientationMarkerWidget *m_Marker;
private:
void InstallPipe()
{
m_RenderWindow->AddRenderer(m_Renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(m_RenderWindow);
// annotation //
m_Annotation->GetTextProperty()->SetColor(1,1,1);
m_Annotation->GetTextProperty()->SetFontFamilyToArial();
m_Annotation->GetTextProperty()->SetOpacity(0.5);
m_Annotation->SetMaximumFontSize(10);
m_Annotation->SetText(0,"uLib VTK Viewer - OpenCMT all right reserved.");
m_Renderer->AddViewProp(m_Annotation);
// orientation marker //
vtkSmartPointer<vtkAxesActor> axes =
vtkSmartPointer<vtkAxesActor>::New();
m_Marker->SetInteractor(renderWindowInteractor);
m_Marker->SetOrientationMarker(axes);
m_Marker->SetViewport(0.0,0.0,0.2,0.2);
m_Marker->SetEnabled(true);
m_Marker->InteractiveOff();
// Must be rendered here in Vtk-6.0 or seg-fault //
m_RenderWindow->Render();
}
void UninstallPipe() {
m_Renderer->RemoveAllViewProps();
m_Renderer->Clear();
}
};
////////////////////////////////////////////////////////////////////////////////
///// VTK VIEWER //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Viewer::Viewer() : d(new ViewerPimpl) {}
Viewer::Viewer() :
m_RenderWindow(vtkRenderWindow::New()),
m_Renderer(vtkRenderer::New()),
m_Annotation(vtkCornerAnnotation::New()),
m_Marker(vtkOrientationMarkerWidget::New())
{
InstallPipe();
}
Viewer::~Viewer() { delete d; }
Viewer::~Viewer()
{
UninstallPipe();
m_Annotation->Delete();
m_Marker->Delete();
m_Renderer->Delete();
m_RenderWindow->Delete();
}
void Viewer::InstallPipe()
{
m_RenderWindow->AddRenderer(m_Renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(m_RenderWindow);
// annotation //
m_Annotation->GetTextProperty()->SetColor(1,1,1);
m_Annotation->GetTextProperty()->SetFontFamilyToArial();
m_Annotation->GetTextProperty()->SetOpacity(0.5);
m_Annotation->SetMaximumFontSize(10);
m_Annotation->SetText(0,"uLib VTK Viewer - OpenCMT all right reserved.");
m_Renderer->AddViewProp(m_Annotation);
// orientation marker //
vtkSmartPointer<vtkAxesActor> axes =
vtkSmartPointer<vtkAxesActor>::New();
m_Marker->SetInteractor(renderWindowInteractor);
m_Marker->SetOrientationMarker(axes);
m_Marker->SetViewport(0.0,0.0,0.2,0.2);
m_Marker->SetEnabled(true);
m_Marker->InteractiveOff();
// Must be rendered here in Vtk-6.0 or seg-fault //
m_RenderWindow->Render();
}
void Viewer::UninstallPipe()
{
m_Renderer->RemoveAllViewProps();
m_Renderer->Clear();
}
void Viewer::addProp(vtkProp *prop)
{
d->m_Renderer->AddActor(prop);
d->m_Renderer->Render();
m_Renderer->AddActor(prop);
m_Renderer->Render();
}
void Viewer::RemoveProp(vtkProp *prop)
{
d->m_Renderer->RemoveViewProp(prop);
d->m_Renderer->Render();
m_Renderer->RemoveViewProp(prop);
m_Renderer->Render();
}
void Viewer::AddPuppet(Puppet &prop)
{
prop.ConnectRenderer(d->m_Renderer);
d->m_Renderer->Render();
prop.ConnectRenderer(m_Renderer);
m_Renderer->Render();
}
void Viewer::RemovePuppet(Puppet &prop)
{
prop.DisconnectRenderer(d->m_Renderer);
d->m_Renderer->Render();
prop.DisconnectRenderer(m_Renderer);
m_Renderer->Render();
}
void Viewer::Start()
{
d->m_RenderWindow->GetInteractor()->Start();
m_RenderWindow->GetInteractor()->Start();
}
vtkCornerAnnotation *Viewer::GetAnnotation()
{
return d->m_Annotation;
return m_Annotation;
}
vtkRenderer *Viewer::GetRenderer()
{
return d->m_Renderer;
return m_Renderer;
}
vtkRenderWindowInteractor *Viewer::GetInteractor()
{
return d->m_RenderWindow->GetInteractor();
return m_RenderWindow->GetInteractor();
}
void Viewer::Reset()
{
d->m_Renderer->ResetCameraClippingRange();
d->m_Renderer->ResetCamera();
d->m_Renderer->Render();
m_Renderer->ResetCameraClippingRange();
m_Renderer->ResetCamera();
m_Renderer->Render();
}

View File

@@ -28,8 +28,13 @@
#ifndef ULIBVTKVIEWER_H
#define ULIBVTKVIEWER_H
#include <iostream>
#include "uLibVtkInterface.h"
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkCornerAnnotation.h>
#include <vtkOrientationMarkerWidget.h>
class vtkProp;
class vtk3DWidget;
@@ -78,10 +83,22 @@ public:
void RemoveProp(vtkProp *prop);
private:
class ViewerPimpl *d;
void InstallPipe();
void UninstallPipe();
vtkRenderer *m_Renderer;
vtkRenderWindow *m_RenderWindow;
vtkCornerAnnotation *m_Annotation;
vtkOrientationMarkerWidget *m_Marker;
};
template <> class Tie<Viewer>;
template <>
class Tie<Viewer> {
public:
void DoAction() {
std::cout << " VIEWER TIE !!! \n";
}
};
} // vtk

View File

@@ -46,57 +46,32 @@ namespace uLib {
namespace Vtk {
// PIMPL -------------------------------------------------------------------- //
class vtkContainerBoxPimpl {
public:
vtkContainerBoxPimpl() :
m_Cube(vtkActor::New()),
m_Axes(vtkActor::New()),
m_Pivot(vtkActor::New()),
m_Content(NULL)
{}
~vtkContainerBoxPimpl()
{
m_Cube->Delete();
m_Axes->Delete();
m_Pivot->Delete();
}
// MEMBERS //
vtkActor *m_Cube;
vtkActor *m_Axes;
vtkActor *m_Pivot;
vtkContainerBox::Content *m_Content;
};
// -------------------------------------------------------------------------- //
vtkContainerBox::vtkContainerBox(vtkContainerBox::Content &content) :
d( new vtkContainerBoxPimpl)
m_Cube(vtkActor::New()),
m_Axes(vtkActor::New()),
m_Pivot(vtkActor::New()),
m_Content(&content)
{
d->m_Content = &content;
this->InstallPipe();
}
vtkContainerBox::~vtkContainerBox()
{
delete d;
m_Cube->Delete();
m_Axes->Delete();
m_Pivot->Delete();
}
vtkPolyData *vtkContainerBox::GetPolyData() const
{
// TODO
return NULL;
}
void vtkContainerBox::InstallPipe()
{
if(!d->m_Content) return;
Content *c = d->m_Content;
if(!m_Content) return;
Content *c = m_Content;
// CUBE
vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New();
@@ -113,9 +88,9 @@ void vtkContainerBox::InstallPipe()
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(cube->GetOutputPort());
mapper->Update();
d->m_Cube->SetMapper(mapper);
d->m_Cube->GetProperty()->SetRepresentationToWireframe();
d->m_Cube->GetProperty()->SetAmbient(0.7);
m_Cube->SetMapper(mapper);
m_Cube->GetProperty()->SetRepresentationToWireframe();
m_Cube->GetProperty()->SetAmbient(0.7);
// AXES //
vtkSmartPointer<vtkAxes> axes = vtkSmartPointer<vtkAxes>::New();
@@ -123,12 +98,12 @@ void vtkContainerBox::InstallPipe()
mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(axes->GetOutputPort());
mapper->Update();
d->m_Axes->SetMapper(mapper);
m_Axes->SetMapper(mapper);
Vector3f s = c->GetSize();
// d->m_Axes->SetScale(s(0),s(1),s(2));
d->m_Axes->GetProperty()->SetLineWidth(3);
d->m_Axes->GetProperty()->SetAmbient(0.4);
d->m_Axes->GetProperty()->SetSpecular(0);
// m_Axes->SetScale(s(0),s(1),s(2));
m_Axes->GetProperty()->SetLineWidth(3);
m_Axes->GetProperty()->SetAmbient(0.4);
m_Axes->GetProperty()->SetSpecular(0);
// PIVOT //
axes = vtkSmartPointer<vtkAxes>::New();
@@ -136,16 +111,16 @@ void vtkContainerBox::InstallPipe()
mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(axes->GetOutputPort());
mapper->Update();
d->m_Pivot->SetMapper(mapper);
m_Pivot->SetMapper(mapper);
s = c->GetScale();
// d->m_Pivot->SetScale(s(0),s(1),s(2));
d->m_Pivot->GetProperty()->SetLineWidth(3);
d->m_Pivot->GetProperty()->SetAmbient(0.4);
d->m_Pivot->GetProperty()->SetSpecular(0);
// m_Pivot->SetScale(s(0),s(1),s(2));
m_Pivot->GetProperty()->SetLineWidth(3);
m_Pivot->GetProperty()->SetAmbient(0.4);
m_Pivot->GetProperty()->SetSpecular(0);
this->SetProp(d->m_Cube);
this->SetProp(d->m_Axes);
this->SetProp(d->m_Pivot);
this->SetProp(m_Cube);
this->SetProp(m_Axes);
this->SetProp(m_Pivot);
}

View File

@@ -47,8 +47,10 @@ public:
private:
void InstallPipe();
friend class vtkContainerBoxPimpl;
class vtkContainerBoxPimpl *d;
vtkActor *m_Cube;
vtkActor *m_Axes;
vtkActor *m_Pivot;
vtkContainerBox::Content *m_Content;
};
} // vtk

View File

@@ -30,7 +30,6 @@
#include "Core/Macros.h"
#include "Math/Dense.h"
#include "uLibVtkInterface.h"
@@ -66,8 +65,6 @@ protected:
private:
void InstallPipe();
friend class vtkMuonContainerScatteringPimpl;
class vtkMuonContainerScatteringPimpl *d;
};

View File

@@ -29,22 +29,6 @@
#include "config.h"
#endif
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkAppendPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkLineSource.h>
#include <vtkActor.h>
#include <vtk3DWidget.h>
#include <vtkBoxWidget.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCommand.h>
#include <vtkTransform.h>
#include "vtkMuonEvent.h"
#include "Math/Dense.h"
@@ -72,105 +56,77 @@ private:
};
//// PIMPL /////////////////////////////////////////////////////////////////////
class vtkMuonEventPimpl {
typedef vtkWidgetCallback Callback;
public:
vtkMuonEventPimpl() :
m_Prop(vtkActor::New()),
m_PolyData(NULL),
m_Appender(vtkAppendPolyData::New()),
content(NULL)
{}
~vtkMuonEventPimpl()
{
m_Prop->Delete();
}
// members //
vtkMuonEvent::Content *content;
vtkPolyData *m_PolyData;
vtkActor *m_Prop;
vtkAppendPolyData *m_Appender;
vtkBoxWidget *m_WidgetIN, *m_WidgetOUT;
HPoint3f m_Poca;
};
////////////////////////////////////////////////////////////////////////////////
///// VTK MUON EVENT /////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
vtkMuonEvent::vtkMuonEvent(MuonEventData &content) :
d(new vtkMuonEventPimpl)
m_Prop(vtkActor::New()),
m_PolyData(NULL),
m_Appender(vtkAppendPolyData::New()),
content(&content)
{
d->content = &content;
InstallPipe();
InstallPipe();
}
vtkMuonEvent::vtkMuonEvent(const MuonEventData &content) :
d(new vtkMuonEventPimpl)
m_Prop(vtkActor::New()),
m_PolyData(NULL),
m_Appender(vtkAppendPolyData::New()),
content(const_cast<MuonEventData *>(&content))
{
d->content = const_cast<MuonEventData *>(&content);
InstallPipe();
InstallPipe();
}
vtkMuonEvent::~vtkMuonEvent()
{
if (d->m_Prop) d->m_Prop->Delete();
if (m_Prop) m_Prop->Delete();
}
vtkMuonEvent::Content &vtkMuonEvent::GetContent()
{
return *d->content;
return *content;
}
void vtkMuonEvent::PrintSelf(std::ostream &o) const
{
o << "..:: MuonEvent ::..\n" \
"\t[in] Origin > " << d->content->LineIn().origin.transpose() << "\n" <<
"\t[in] Direction > " << d->content->LineIn().direction.transpose() << "\n" <<
"\t[out] Origin > " << d->content->LineOut().origin.transpose() << "\n" <<
"\t[out] Direction > " << d->content->LineOut().direction.transpose()<< "\n" <<
"\tMomentum > " << d->content->GetMomentum() << "\n" <<
"\t[in] Origin > " << content->LineIn().origin.transpose() << "\n" <<
"\t[in] Direction > " << content->LineIn().direction.transpose() << "\n" <<
"\t[out] Origin > " << content->LineOut().origin.transpose() << "\n" <<
"\t[out] Direction > " << content->LineOut().direction.transpose()<< "\n" <<
"\tMomentum > " << content->GetMomentum() << "\n" <<
"...................\n";
}
vtkProp *vtkMuonEvent::GetProp()
{
return d->m_Prop;
return m_Prop;
}
void vtkMuonEvent::InstallPipe()
{
vtkAppendPolyData *appender = d->m_Appender;
vtkAppendPolyData *appender = m_Appender;
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
if(d->content) {
if(content) {
vtkSmartPointer<vtkLineSource> line_in = vtkSmartPointer<vtkLineSource>::New();
vtkSmartPointer<vtkLineSource> line_out = vtkSmartPointer<vtkLineSource>::New();
float distance = (d->content->LineIn().origin - d->content->LineOut().origin).norm() / 10;
float distance = (content->LineIn().origin - content->LineOut().origin).norm() / 10;
HPoint3f pt;
pt = d->content->LineIn().origin;
HPoint3f pt;
pt = content->LineIn().origin;
line_in->SetPoint1(pt(0),pt(1),pt(2));
pt= d->content->LineIn().origin + d->content->LineIn().direction * distance;
pt= content->LineIn().origin + content->LineIn().direction * distance;
line_in->SetPoint2(pt(0),pt(1),pt(2));
pt = d->content->LineOut().origin;
pt = content->LineOut().origin;
line_out->SetPoint1(pt(0),pt(1),pt(2));
pt = d->content->LineOut().origin + d->content->LineOut().direction * distance;
pt = content->LineOut().origin + content->LineOut().direction * distance;
line_out->SetPoint2(pt(0),pt(1),pt(2));
appender->AddInputConnection(line_in->GetOutputPort());
@@ -180,31 +136,31 @@ void vtkMuonEvent::InstallPipe()
appender->Update();
mapper->SetInputConnection(appender->GetOutputPort());
mapper->Update();
d->m_Prop->SetMapper(mapper);
m_Prop->SetMapper(mapper);
}
vtkPolyData *vtkMuonEvent::GetPolyData() const
{
return d->m_Appender->GetOutput();
return m_Appender->GetOutput();
}
void vtkMuonEvent::AddPocaPoint(HPoint3f poca)
{
d->m_Poca = poca;
m_Poca = poca;
vtkSmartPointer<vtkSphereSource> sphere =
vtkSmartPointer<vtkSphereSource>::New();
float size = (d->content->LineIn().origin - d->content->LineOut().origin).head(3).norm();
float size = (content->LineIn().origin - content->LineOut().origin).head(3).norm();
size /= 100;
sphere->SetRadius(size);
sphere->SetCenter(poca(0),poca(1),poca(2));
sphere->Update();
d->m_Appender->AddInputConnection(sphere->GetOutputPort());
d->m_Appender->Update();
m_Appender->AddInputConnection(sphere->GetOutputPort());
m_Appender->Update();
}
HPoint3f vtkMuonEvent::GetPocaPoint()
{
return d->m_Poca;
return m_Poca;
}

View File

@@ -28,7 +28,21 @@
#ifndef VTKMUONEVENT_H
#define VTKMUONEVENT_H
#include "Core/Macros.h"
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkAppendPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkLineSource.h>
#include <vtkActor.h>
#include <vtk3DWidget.h>
#include <vtkBoxWidget.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCommand.h>
#include <vtkTransform.h>
#include "Math/Dense.h"
#include "uLibVtkInterface.h"
@@ -64,8 +78,14 @@ public:
private:
void InstallPipe();
friend class vtkMuonEventPimpl;
class vtkMuonEventPimpl *d;
vtkMuonEvent::Content *content;
vtkPolyData *m_PolyData;
vtkActor *m_Prop;
vtkAppendPolyData *m_Appender;
vtkBoxWidget *m_WidgetIN;
vtkBoxWidget *m_WidgetOUT;
HPoint3f m_Poca;
};

View File

@@ -30,23 +30,6 @@
#include "config.h"
#endif
#include <vtkConfigure.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkAppendPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkLineSource.h>
#include <vtkActor.h>
#include <vtk3DWidget.h>
#include <vtkBoxWidget.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCommand.h>
#include <vtkTransform.h>
#include "vtkMuonScatter.h"
#include "Math/Dense.h"
@@ -78,36 +61,6 @@ namespace Vtk {
//}
//// PIMPL /////////////////////////////////////////////////////////////////////
class vtkMuonScatterPimpl {
public:
vtkMuonScatterPimpl() :
m_Content(NULL),
m_LineIn(vtkLineSource::New()),
m_LineOut(vtkLineSource::New()),
m_PolyData(vtkPolyData::New()),
m_SpherePoca(NULL)
{}
~vtkMuonScatterPimpl()
{
m_LineIn->Delete();
m_LineOut->Delete();
if(m_SpherePoca) m_SpherePoca->Delete();
}
// members //
vtkMuonScatter::Content *m_Content;
vtkLineSource *m_LineIn, *m_LineOut;
vtkSphereSource *m_SpherePoca;
vtkPolyData *m_PolyData;
};
////////////////////////////////////////////////////////////////////////////////
///// VTK MUON Scatter /////////////////////////////////////////////////////////
@@ -115,63 +68,69 @@ public:
vtkMuonScatter::vtkMuonScatter(MuonScatter &content) :
d(new vtkMuonScatterPimpl)
m_Content(&content),
m_LineIn(vtkLineSource::New()),
m_LineOut(vtkLineSource::New()),
m_PolyData(vtkPolyData::New()),
m_SpherePoca(NULL)
{
d->m_Content = &content;
InstallPipe();
InstallPipe();
}
vtkMuonScatter::vtkMuonScatter(const MuonScatter &content) :
d(new vtkMuonScatterPimpl)
m_Content(const_cast<MuonScatter *>(&content)),
m_LineIn(vtkLineSource::New()),
m_LineOut(vtkLineSource::New()),
m_PolyData(vtkPolyData::New()),
m_SpherePoca(NULL)
{
d->m_Content = const_cast<MuonScatter *>(&content);
InstallPipe();
InstallPipe();
}
vtkMuonScatter::~vtkMuonScatter()
{
delete d;
m_LineIn->Delete();
m_LineOut->Delete();
if(m_SpherePoca) m_SpherePoca->Delete();
}
vtkMuonScatter::Content &vtkMuonScatter::GetContent()
{
return *d->m_Content;
return *m_Content;
}
void vtkMuonScatter::PrintSelf(std::ostream &o) const
{
// o << d->content;
}
{}
void vtkMuonScatter::InstallPipe()
{
if(d->m_Content) {
vtkLineSource *line_in = d->m_LineIn;
vtkLineSource *line_out = d->m_LineOut;
if(m_Content) {
vtkLineSource *line_in = m_LineIn;
vtkLineSource *line_out = m_LineOut;
float distance = (d->m_Content->LineIn().origin - d->m_Content->LineOut().origin).norm() / 10;
float distance = (m_Content->LineIn().origin - m_Content->LineOut().origin).norm() / 10;
HPoint3f pt;
pt = d->m_Content->LineIn().origin;
pt = m_Content->LineIn().origin;
line_in->SetPoint1(pt(0),pt(1),pt(2));
pt= d->m_Content->LineIn().origin + d->m_Content->LineIn().direction * distance;
pt= m_Content->LineIn().origin + m_Content->LineIn().direction * distance;
line_in->SetPoint2(pt(0),pt(1),pt(2));
pt = d->m_Content->LineOut().origin;
pt = m_Content->LineOut().origin;
line_out->SetPoint1(pt(0),pt(1),pt(2));
pt = d->m_Content->LineOut().origin + d->m_Content->LineOut().direction * distance;
pt = m_Content->LineOut().origin + m_Content->LineOut().direction * distance;
line_out->SetPoint2(pt(0),pt(1),pt(2));
}
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(d->m_LineIn->GetOutputPort());
mapper->SetInputConnection(m_LineIn->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
this->SetProp(actor);
mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(d->m_LineOut->GetOutputPort());
mapper->SetInputConnection(m_LineOut->GetOutputPort());
actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
this->SetProp(actor);
@@ -180,32 +139,26 @@ void vtkMuonScatter::InstallPipe()
vtkPolyData *vtkMuonScatter::GetPolyData() const
{
vtkSmartPointer<vtkAppendPolyData> append = vtkSmartPointer<vtkAppendPolyData>::New();
//# if VTK_MAJOR_VERSION <= 5
append->AddInputConnection(d->m_LineIn->GetOutputPort());
append->AddInputConnection(d->m_LineOut->GetOutputPort());
if(d->m_SpherePoca) append->AddInputConnection(d->m_SpherePoca->GetOutputPort());
//# else
// append->AddInputData(d->m_LineIn->GetOutput());
// append->AddInputData(d->m_LineOut->GetOutput());
// if(d->m_SpherePoca) append->AddInputData(d->m_SpherePoca->GetOutput());
//# endif
append->AddInputConnection(m_LineIn->GetOutputPort());
append->AddInputConnection(m_LineOut->GetOutputPort());
if(m_SpherePoca) append->AddInputConnection(m_SpherePoca->GetOutputPort());
append->Update();
d->m_PolyData->DeepCopy(append->GetOutput());
return d->m_PolyData;
m_PolyData->DeepCopy(append->GetOutput());
return m_PolyData;
}
void vtkMuonScatter::AddPocaPoint(HPoint3f poca)
{
vtkSphereSource *sphere = vtkSphereSource::New();
float size = (d->m_Content->LineIn().origin - d->m_Content->LineOut().origin).head(3).norm();
float size = (m_Content->LineIn().origin - m_Content->LineOut().origin).head(3).norm();
size /= 100;
sphere->SetRadius(size);
sphere->SetCenter(poca(0),poca(1),poca(2));
sphere->Update();
d->m_SpherePoca = sphere;
m_SpherePoca = sphere;
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(d->m_SpherePoca->GetOutputPort());
mapper->SetInputConnection(m_SpherePoca->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
this->SetProp(actor);
@@ -214,8 +167,8 @@ void vtkMuonScatter::AddPocaPoint(HPoint3f poca)
HPoint3f vtkMuonScatter::GetPocaPoint()
{
double center[3];
if(d->m_SpherePoca) {
d->m_SpherePoca->GetCenter(center);
if(m_SpherePoca) {
m_SpherePoca->GetCenter(center);
return HPoint3f(center[0],center[1],center[2]);
}
else {

View File

@@ -28,7 +28,22 @@
#ifndef VTKMUONSCATTER_H
#define VTKMUONSCATTER_H
#include "Core/Macros.h"
#include <vtkConfigure.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkAppendPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkLineSource.h>
#include <vtkActor.h>
#include <vtk3DWidget.h>
#include <vtkBoxWidget.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCommand.h>
#include <vtkTransform.h>
#include "Math/Dense.h"
#include "uLibVtkInterface.h"
@@ -66,8 +81,11 @@ protected:
private:
void InstallPipe();
friend class vtkMuonScatterPimpl;
class vtkMuonScatterPimpl *d;
vtkMuonScatter::Content *m_Content;
vtkLineSource *m_LineIn;
vtkLineSource *m_LineOut;
vtkSphereSource *m_SpherePoca;
vtkPolyData *m_PolyData;
};
} // vtk

View File

@@ -29,82 +29,12 @@
#include "config.h"
#endif
#include <vtkLineSource.h>
#include <vtkBoundingBox.h>
#include <vtkCubeSource.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkTransform.h>
#include <vtkTransformPolyDataFilter.h>
#include <vtkBoxWidget.h>
#include <vtkCommand.h>
#include "Math/StructuredGrid.h"
#include "Vtk/vtkStructuredGrid.h"
namespace uLib {
namespace Vtk {
////////////////////////////////////////////////////////////////////////////////
////// PIMPL //////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class vtkStructuredGridPimpl {
// ---- WIDGET CBK ------------------------------------------------------ //
class vtkWidgetCallback : public vtkCommand
{
public:
static vtkWidgetCallback *New() { return new vtkWidgetCallback; }
void SetParent(uLib::Vtk::vtkStructuredGrid *parent) { this->parent = parent; }
virtual void Execute(vtkObject *caller, unsigned long, void*)
{
vtkSmartPointer<vtkTransform> t =
vtkSmartPointer<vtkTransform>::New();
vtkBoxWidget *widget = reinterpret_cast<vtkBoxWidget*>(caller);
widget->GetTransform(t);
parent->SetTransform(t);
//std::cout << "event\n";
}
private:
uLib::Vtk::vtkStructuredGrid *parent;
};
// ---------------------------------------------------------------------- //
public:
vtkStructuredGridPimpl(vtkStructuredGrid *parent, StructuredGrid &content) :
p(parent),
m_Content(&content),
m_Actor(vtkActor::New()),
m_Widget(vtkBoxWidget::New()),
m_Transform(vtkTransform::New())
{
vtkSmartPointer<vtkWidgetCallback> callback =
vtkSmartPointer<vtkWidgetCallback>::New();
callback->SetParent(p);
m_Widget->AddObserver(vtkCommand::InteractionEvent, callback);
}
~vtkStructuredGridPimpl()
{
m_Actor->Delete();
m_Widget->Delete();
m_Transform->Delete();
}
// members //
vtkActor *m_Actor;
vtkBoxWidget *m_Widget;
StructuredGrid *m_Content;
vtkTransform *m_Transform;
private:
vtkStructuredGrid *p;
};
////////////////////////////////////////////////////////////////////////////////
////// VTK STRUCTURED GRID /////////////////////////////////////////////////////
@@ -113,14 +43,24 @@ private:
vtkStructuredGrid::vtkStructuredGrid(Content &content) :
d(new vtkStructuredGridPimpl(this,content))
m_Content(&content),
m_Actor(vtkActor::New()),
m_Widget(vtkBoxWidget::New()),
m_Transform(vtkTransform::New())
{
vtkSmartPointer<vtkWidgetCallback> callback =
vtkSmartPointer<vtkWidgetCallback>::New();
callback->SetGrid(this);
m_Widget->AddObserver(vtkCommand::InteractionEvent, callback);
this->InstallPipe();
}
vtkStructuredGrid::~vtkStructuredGrid()
{
delete d;
m_Actor->Delete();
m_Widget->Delete();
m_Transform->Delete();
}
@@ -131,26 +71,26 @@ void vtkStructuredGrid::SetTransform(vtkTransform *t)
for(int i=0; i<4; ++i)
for(int j=0; j<4; ++j)
mat(i,j) = vmat->GetElement(i,j);
d->m_Content->SetMatrix(mat);
m_Content->SetMatrix(mat);
vtkSmartPointer<vtkMatrix4x4> vmat2 = vtkSmartPointer<vtkMatrix4x4>::New();
mat = d->m_Content->GetWorldMatrix();
mat = m_Content->GetWorldMatrix();
for(int i=0; i<4; ++i)
for(int j=0; j<4; ++j)
vmat2->SetElement(i,j,mat(i,j));
d->m_Transform->SetMatrix(vmat2);
d->m_Transform->Update();
m_Transform->SetMatrix(vmat2);
m_Transform->Update();
this->Update();
}
vtkBoxWidget *vtkStructuredGrid::GetWidget()
{
return d->m_Widget;
return m_Widget;
}
void vtkStructuredGrid::Update()
{
d->m_Actor->GetMapper()->Update();
m_Actor->GetMapper()->Update();
}
void vtkStructuredGrid::InstallPipe()
@@ -161,15 +101,15 @@ void vtkStructuredGrid::InstallPipe()
vtkSmartPointer<vtkTransformPolyDataFilter>::New();
vtkSmartPointer<vtkMatrix4x4> vmat = vtkSmartPointer<vtkMatrix4x4>::New();
Matrix4f mat = d->m_Content->GetWorldMatrix();
Matrix4f mat = m_Content->GetWorldMatrix();
for(int i=0; i<4; ++i)
for(int j=0; j<4; ++j)
vmat->SetElement(i,j,mat(i,j));
d->m_Transform->SetMatrix(vmat);
filter->SetTransform(d->m_Transform);
m_Transform->SetMatrix(vmat);
filter->SetTransform(m_Transform);
filter->SetInputConnection(cube->GetOutputPort());
Vector3i dims = d->m_Content->GetDims();
Vector3i dims = m_Content->GetDims();
cube->SetBounds(0,dims(0),0,dims(1),0,dims(2));
cube->Update();
filter->Update();
@@ -178,16 +118,16 @@ void vtkStructuredGrid::InstallPipe()
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(filter->GetOutputPort());
d->m_Actor->SetMapper(mapper);
d->m_Actor->GetProperty()->SetRepresentationToSurface();
d->m_Actor->GetProperty()->SetEdgeVisibility(true);
d->m_Actor->GetProperty()->SetOpacity(0.4);
d->m_Actor->GetProperty()->SetAmbient(0.7);
m_Actor->SetMapper(mapper);
m_Actor->GetProperty()->SetRepresentationToSurface();
m_Actor->GetProperty()->SetEdgeVisibility(true);
m_Actor->GetProperty()->SetOpacity(0.4);
m_Actor->GetProperty()->SetAmbient(0.7);
// set content transform to actor //
this->Update();
d->m_Widget->SetProp3D(d->m_Actor);
m_Widget->SetProp3D(m_Actor);
this->SetProp(d->m_Actor);
this->SetProp(m_Actor);
}

View File

@@ -28,7 +28,19 @@
#ifndef U_VTKSTRUCTUREDGRID_H
#define U_VTKSTRUCTUREDGRID_H
#include "Core/Macros.h"
#include <vtkLineSource.h>
#include <vtkBoundingBox.h>
#include <vtkCubeSource.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkTransform.h>
#include <vtkTransformPolyDataFilter.h>
#include <vtkBoxWidget.h>
#include <vtkCommand.h>
#include "Math/Dense.h"
#include "uLibVtkInterface.h"
@@ -55,8 +67,28 @@ public:
private:
void InstallPipe();
friend class vtkStructuredGridPimpl;
class vtkStructuredGridPimpl *d;
class vtkWidgetCallback : public vtkCommand
{
public:
static vtkWidgetCallback *New() { return new vtkWidgetCallback; }
void SetGrid(uLib::Vtk::vtkStructuredGrid *grid) { this->grid = grid; }
virtual void Execute(vtkObject *caller, unsigned long, void*)
{
vtkSmartPointer<vtkTransform> t = vtkSmartPointer<vtkTransform>::New();
vtkBoxWidget *widget = reinterpret_cast<vtkBoxWidget*>(caller);
widget->GetTransform(t);
grid->SetTransform(t);
}
private:
uLib::Vtk::vtkStructuredGrid *grid;
};
vtkActor *m_Actor;
vtkBoxWidget *m_Widget;
StructuredGrid *m_Content;
vtkTransform *m_Transform;
};

View File

@@ -48,36 +48,7 @@
namespace uLib {
class vtkTriangleMeshPimpl {
public:
vtkTriangleMeshPimpl(vtkTriangleMesh::Content &content) :
m_content(content),
m_Poly(vtkPolyData::New()),
m_Actor(vtkActor::New())
{
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(m_Poly->GetProducerPort());
m_Actor->SetMapper(mapper);
}
~vtkTriangleMeshPimpl() {
m_Poly->Delete();
m_Actor->Delete();
}
void vtk2uLib_update();
void uLib2vtk_update();
// members //
TriangleMesh &m_content;
vtkPolyData *m_Poly;
vtkActor *m_Actor;
};
void vtkTriangleMeshPimpl::vtk2uLib_update()
void vtkTriangleMesh::vtk2uLib_update()
{
// Assumes that Polys are Triangles !!! //
vtkIdType number_of_points = m_Poly->GetNumberOfPoints();
@@ -92,7 +63,7 @@ void vtkTriangleMeshPimpl::vtk2uLib_update()
m_content.Points().resize(number_of_points);
m_content.Points().resize(number_of_points);
for (int i=0; i<number_of_points; ++i)
{
double *point = m_Poly->GetPoint(i);
@@ -116,7 +87,7 @@ void vtkTriangleMeshPimpl::vtk2uLib_update()
m_Actor->GetMapper()->Update();
}
void vtkTriangleMeshPimpl::uLib2vtk_update()
void vtkTriangleMesh::uLib2vtk_update()
{
vtkIdType number_of_points = m_content.Points().size();
vtkIdType number_of_triangles = m_content.Triangles().size();
@@ -161,12 +132,20 @@ void vtkTriangleMeshPimpl::uLib2vtk_update()
vtkTriangleMesh::vtkTriangleMesh(vtkTriangleMesh::Content &content) :
d(new vtkTriangleMeshPimpl(content))
{}
m_content(content),
m_Poly(vtkPolyData::New()),
m_Actor(vtkActor::New())
{
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(m_Poly->GetProducerPort());
m_Actor->SetMapper(mapper);
}
vtkTriangleMesh::~vtkTriangleMesh()
{
delete d;
m_Poly->Delete();
m_Actor->Delete();
}
void vtkTriangleMesh::ReadFromFile(const char *filename)
@@ -175,8 +154,8 @@ void vtkTriangleMesh::ReadFromFile(const char *filename)
vtkSmartPointer<vtkPolyDataReader>::New();
reader->SetFileName(filename);
reader->Update();
d->m_Poly->DeepCopy(reader->GetOutput());
d->vtk2uLib_update();
m_Poly->DeepCopy(reader->GetOutput());
vtk2uLib_update();
}
void vtkTriangleMesh::ReadFromXMLFile(const char *filename)
@@ -185,8 +164,8 @@ void vtkTriangleMesh::ReadFromXMLFile(const char *filename)
vtkSmartPointer<vtkXMLPolyDataReader>::New();
reader->SetFileName(filename);
reader->Update();
d->m_Poly->DeepCopy(reader->GetOutput());
d->vtk2uLib_update();
m_Poly->DeepCopy(reader->GetOutput());
vtk2uLib_update();
}
void vtkTriangleMesh::ReadFromObjFile(const char *filename)
@@ -195,8 +174,8 @@ void vtkTriangleMesh::ReadFromObjFile(const char *filename)
vtkSmartPointer<vtkOBJReader>::New();
reader->SetFileName(filename);
reader->Update();
d->m_Poly->DeepCopy(reader->GetOutput());
d->vtk2uLib_update();
m_Poly->DeepCopy(reader->GetOutput());
vtk2uLib_update();
}
void vtkTriangleMesh::ReadFromStlFile(const char *filename)
@@ -205,23 +184,23 @@ void vtkTriangleMesh::ReadFromStlFile(const char *filename)
vtkSmartPointer<vtkSTLReader>::New();
reader->SetFileName(filename);
reader->Update();
d->m_Poly->DeepCopy(reader->GetOutput());
d->vtk2uLib_update();
m_Poly->DeepCopy(reader->GetOutput());
vtk2uLib_update();
}
vtkProp *vtkTriangleMesh::GetProp()
{
return d->m_Actor;
return m_Actor;
}
vtkPolyData *vtkTriangleMesh::GetPolyData() const
{
return d->m_Poly;
return m_Poly;
}
void vtkTriangleMesh::Update()
{
d->uLib2vtk_update();
uLib2vtk_update();
}
}

View File

@@ -58,8 +58,12 @@ public:
void Update();
private:
friend class vtkTriangleMeshPimpl;
class vtkTriangleMeshPimpl *d;
void vtk2uLib_update();
void uLib2vtk_update();
TriangleMesh &m_content;
vtkPolyData *m_Poly;
vtkActor *m_Actor;
};

View File

@@ -31,16 +31,12 @@
#include <vtkSmartPointer.h>
#include <vtkVolume.h>
#include <vtkImageData.h>
#include <vtkImageImport.h>
#include <vtkImageExport.h>
#include <vtkFloatArray.h>
#include <vtkPointData.h>
#include <vtkXMLImageDataReader.h>
#include <vtkXMLImageDataWriter.h>
#include <vtkGenericDataObjectReader.h>
#include <vtkImageShiftScale.h>
@@ -51,7 +47,6 @@
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkCubeSource.h>
#include <vtkPolyDataMapper.h>
@@ -63,53 +58,8 @@
namespace uLib {
namespace Vtk {
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// PIMPL
class vtkVoxImagePimpl {
public:
vtkVoxImagePimpl(vtkVoxImage::Content &content) :
m_Content(content),
m_Actor(vtkVolume::New()),
m_Image(vtkImageData::New()),
m_Outline(vtkCubeSource::New()),
m_Reader(NULL),
m_Writer(NULL)
{}
~vtkVoxImagePimpl()
{
m_Image->Delete();
m_Actor->Delete();
m_Outline->Delete();
}
void GetContent();
void SetContent();
// members //
vtkVolume *m_Actor;
vtkImageData *m_Image;
vtkCubeSource *m_Outline;
// io //
vtkXMLImageDataReader *m_Reader;
vtkXMLImageDataWriter *m_Writer;
// content //
vtkVoxImage::Content &m_Content;
// visual //
float m_Window;
float m_Level;
};
void vtkVoxImagePimpl::GetContent()
void vtkVoxImage::GetContent()
{
// ULIB -> VTK //
const int *dims = static_cast<const int *>(m_Content.GetDims().data());
@@ -139,7 +89,7 @@ void vtkVoxImagePimpl::GetContent()
// m_Image->Update();
}
void vtkVoxImagePimpl::SetContent()
void vtkVoxImage::SetContent()
{
// VTK -> ULIB //
int *ext = m_Image->GetExtent();
@@ -181,22 +131,29 @@ void vtkVoxImagePimpl::SetContent()
// VTK VOXIMAGE
vtkVoxImage::vtkVoxImage(Content &content) :
d(new vtkVoxImagePimpl(content))
{
init_properties();
d->GetContent();
m_Content(content),
m_Actor(vtkVolume::New()),
m_Image(vtkImageData::New()),
m_Outline(vtkCubeSource::New()),
m_Reader(NULL),
m_Writer(NULL),
writer_factor(1.E6)
{
GetContent();
InstallPipe();
}
vtkVoxImage::~vtkVoxImage()
{
delete d;
m_Image->Delete();
m_Actor->Delete();
m_Outline->Delete();
}
vtkImageData *vtkVoxImage::GetImageData()
{
d->GetContent();
return d->m_Image;
GetContent();
return m_Image;
}
void vtkVoxImage::SaveToXMLFile(const char *fname)
@@ -204,16 +161,16 @@ void vtkVoxImage::SaveToXMLFile(const char *fname)
vtkSmartPointer<vtkXMLImageDataWriter> writer =
vtkSmartPointer<vtkXMLImageDataWriter>::New();
writer->SetFileName(fname);
d->GetContent();
GetContent();
vtkSmartPointer<vtkImageShiftScale> vtkscale =
vtkSmartPointer<vtkImageShiftScale>::New();
# if VTK_MAJOR_VERSION <= 5
vtkscale->SetInputConnection(d->m_Image->GetProducerPort());
vtkscale->SetInputConnection(m_Image->GetProducerPort());
# else
vtkscale->SetInputData(d->m_Image);
vtkscale->SetInputData(m_Image);
# endif
vtkscale->SetScale(p().writer_factor);
vtkscale->SetScale(writer_factor);
vtkscale->Update();
writer->SetInputConnection(vtkscale->GetOutputPort());
writer->Update();
@@ -225,22 +182,22 @@ void vtkVoxImage::ReadFromVKTFile(const char *fname)
vtkSmartPointer<vtkGenericDataObjectReader> reader =
vtkSmartPointer<vtkGenericDataObjectReader>::New();
reader->SetFileName(fname);
reader->Update();
reader->Update();
if(reader->IsFileStructuredPoints())
{
vtkSmartPointer<vtkImageShiftScale> vtkscale =
vtkSmartPointer<vtkImageShiftScale>::New();
vtkscale->SetInputConnection(reader->GetOutputPort());
vtkscale->SetScale(1/p().writer_factor);
vtkscale->SetScale(1/writer_factor);
vtkscale->Update();
d->m_Image->DeepCopy(vtkscale->GetOutput()); // FIX! (pipe connection)
d->SetContent();
m_Image->DeepCopy(vtkscale->GetOutput()); // FIX! (pipe connection)
SetContent();
}
else {
std::cerr << "Error: file does not contain structured points\n";
}
d->m_Actor->Update();
m_Actor->Update();
}
void vtkVoxImage::ReadFromXMLFile(const char *fname)
@@ -252,25 +209,25 @@ void vtkVoxImage::ReadFromXMLFile(const char *fname)
vtkSmartPointer<vtkImageShiftScale> vtkscale =
vtkSmartPointer<vtkImageShiftScale>::New();
vtkscale->SetInputConnection(reader->GetOutputPort());
vtkscale->SetScale(1/p().writer_factor);
vtkscale->SetScale(1/writer_factor);
vtkscale->Update();
d->m_Image->DeepCopy(vtkscale->GetOutput());
d->SetContent();
m_Image->DeepCopy(vtkscale->GetOutput());
SetContent();
}
void vtkVoxImage::setShadingPreset(int blendType)
{
vtkSmartVolumeMapper *mapper =
(vtkSmartVolumeMapper *)d->m_Actor->GetMapper();
vtkVolumeProperty *property = d->m_Actor->GetProperty();
(vtkSmartVolumeMapper *)m_Actor->GetMapper();
vtkVolumeProperty *property = m_Actor->GetProperty();
static vtkColorTransferFunction *colorFun = vtkColorTransferFunction::New();
static vtkPiecewiseFunction *opacityFun = vtkPiecewiseFunction::New();
float window = 40 / $$.writer_factor;
float level = 20 / $$.writer_factor;
float window = 40 / writer_factor;
float level = 20 / writer_factor;
property->SetColor(colorFun);
property->SetScalarOpacity(opacityFun);
@@ -346,9 +303,9 @@ void vtkVoxImage::setShadingPreset(int blendType)
}
void vtkVoxImage::Update() {
d->m_Actor->Update();
d->m_Outline->SetBounds(d->m_Image->GetBounds());
d->m_Outline->Update();
m_Actor->Update();
m_Outline->SetBounds(m_Image->GetBounds());
m_Outline->Update();
}
void vtkVoxImage::InstallPipe()
@@ -356,26 +313,26 @@ void vtkVoxImage::InstallPipe()
vtkSmartPointer<vtkSmartVolumeMapper> mapper =
vtkSmartPointer<vtkSmartVolumeMapper>::New();
# if VTK_MAJOR_VERSION <= 5
mapper->SetInputConnection(d->m_Image->GetProducerPort());
mapper->SetInputConnection(m_Image->GetProducerPort());
# else
mapper->SetInputData(d->m_Image);
mapper->SetInputData(m_Image);
# endif
mapper->Update();
d->m_Actor->SetMapper(mapper);
m_Actor->SetMapper(mapper);
this->setShadingPreset(0);
mapper->Update();
d->m_Outline->SetBounds(d->m_Image->GetBounds());
m_Outline->SetBounds(m_Image->GetBounds());
vtkSmartPointer<vtkPolyDataMapper> mmapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mmapper->SetInputConnection(d->m_Outline->GetOutputPort());
mmapper->SetInputConnection(m_Outline->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mmapper);
actor->GetProperty()->SetRepresentationToWireframe();
actor->GetProperty()->SetAmbient(0.7);
// this->SetProp(actor);
this->SetProp(d->m_Actor);
this->SetProp(m_Actor);
}

View File

@@ -28,7 +28,12 @@
#ifndef U_VTKVOXIMAGE_H
#define U_VTKVOXIMAGE_H
#include <Core/Object.h>
#include "vtk/vtkVolume.h"
#include "vtk/vtkImageData.h"
#include "vtk/vtkXMLImageDataReader.h"
#include "vtk/vtkXMLImageDataWriter.h"
#include "vtk/vtkCubeSource.h"
#include <Math/VoxImage.h>
#include "uLibVtkInterface.h"
@@ -39,14 +44,8 @@ class vtkImageData;
namespace uLib {
namespace Vtk {
class vtkVoxImage : public Puppet {
uLibTypeMacro(vtkVoxImage,Puppet)
public:
properties()
{
float writer_factor;
};
class vtkVoxImage : public Puppet
{
public:
typedef Abstract::VoxImage Content;
@@ -54,6 +53,10 @@ public:
~vtkVoxImage();
void GetContent();
void SetContent();
vtkImageData * GetImageData();
void SaveToXMLFile(const char *fname);
@@ -67,20 +70,24 @@ public:
void Update();
protected:
void InstallPipe();
void InstallPipe();
float writer_factor;
private:
class vtkVoxImagePimpl *d;
vtkVolume *m_Actor;
vtkImageData *m_Image;
vtkCubeSource *m_Outline;
vtkXMLImageDataReader *m_Reader;
vtkXMLImageDataWriter *m_Writer;
vtkVoxImage::Content &m_Content;
float m_Window;
float m_Level;
};
inline void vtkVoxImage::init_properties()
{
$_init();
$$.writer_factor = 1.E6;
}
} // vtk
} // uLib

View File

@@ -29,25 +29,6 @@
#include "config.h"
#endif
#include <vtkLine.h>
#include <vtkCellArray.h>
#include <vtkLineSource.h>
#include <vtkSphereSource.h>
#include <vtkBoundingBox.h>
#include <vtkCubeSource.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkAppendPolyData.h>
#include <vtkActor.h>
#include <vtkAssembly.h>
#include <vtkProp3DCollection.h>
#include <vtkProperty.h>
#include <vtkPolyData.h>
#include <vtkTransform.h>
#include <vtkTransformPolyDataFilter.h>
#include "vtkVoxRaytracerRepresentation.h"
@@ -60,59 +41,6 @@
namespace uLib {
namespace Vtk {
///// PIMPL ////////////////////////////////////////////////////////////////////
class vtkVoxRaytracerRepresentationPimpl {
public:
vtkVoxRaytracerRepresentationPimpl(VoxRaytracer &content) :
m_Content(&content),
m_Assembly(vtkAssembly::New()),
m_Sphere1(vtkSphereSource::New()),
m_Sphere2(vtkSphereSource::New()),
m_Line1(vtkLineSource::New()),
m_Line2(vtkLineSource::New()),
m_Line3(vtkLineSource::New()),
m_RayLine(vtkAppendPolyData::New()),
m_RayLineActor(vtkActor::New()),
m_RayRepresentation(vtkAppendPolyData::New()),
m_RayRepresentationActor(vtkActor::New()),
m_Transform(vtkTransform::New())
{
default_radius = content.GetImage()->GetSpacing()(0)/4;
m_Sphere1->SetRadius(default_radius);
m_Sphere2->SetRadius(default_radius);
m_SelectedElement = m_RayLine;
}
~vtkVoxRaytracerRepresentationPimpl()
{
m_Assembly->Delete();
m_RayLine->Delete();
m_RayLineActor->Delete();
m_RayRepresentationActor->Delete();
m_Transform->Delete();
}
// members //
VoxRaytracer *m_Content;
Scalarf default_radius;
vtkAssembly *m_Assembly;
vtkAppendPolyData *m_RayLine;
vtkActor *m_RayLineActor;
vtkActor *m_RayRepresentationActor;
vtkSmartPointer<vtkTransform> m_Transform;
VoxRaytracer::RayData m_Ray;
vtkSmartPointer<vtkSphereSource> m_Sphere1,m_Sphere2;
vtkSmartPointer<vtkLineSource> m_Line1, m_Line2, m_Line3;
vtkSmartPointer<vtkAppendPolyData> m_RayRepresentation;
vtkAppendPolyData *m_SelectedElement;
};
////////////////////////////////////////////////////////////////////////////////
////// VOX RAYTRACER REPRESENTATION ///////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
@@ -120,44 +48,64 @@ public:
vtkVoxRaytracerRepresentation::vtkVoxRaytracerRepresentation(Content &content) :
d(new vtkVoxRaytracerRepresentationPimpl(content))
m_Content(&content),
m_Assembly(vtkAssembly::New()),
m_Sphere1(vtkSphereSource::New()),
m_Sphere2(vtkSphereSource::New()),
m_Line1(vtkLineSource::New()),
m_Line2(vtkLineSource::New()),
m_Line3(vtkLineSource::New()),
m_RayLine(vtkAppendPolyData::New()),
m_RayLineActor(vtkActor::New()),
m_RayRepresentation(vtkAppendPolyData::New()),
m_RayRepresentationActor(vtkActor::New()),
m_Transform(vtkTransform::New())
{
default_radius = content.GetImage()->GetSpacing()(0)/4;
m_Sphere1->SetRadius(default_radius);
m_Sphere2->SetRadius(default_radius);
m_SelectedElement = m_RayLine;
InstallPipe();
}
vtkVoxRaytracerRepresentation::~vtkVoxRaytracerRepresentation()
{
delete d;
m_Assembly->Delete();
m_RayLine->Delete();
m_RayLineActor->Delete();
m_RayRepresentationActor->Delete();
m_Transform->Delete();
}
VoxRaytracer *vtkVoxRaytracerRepresentation::GetRaytracerAlgorithm()
{
return d->m_Content;
return m_Content;
}
vtkProp *vtkVoxRaytracerRepresentation::GetProp()
{
return d->m_Assembly;
return m_Assembly;
}
vtkPolyData *vtkVoxRaytracerRepresentation::GetPolyData() const
{
std::cout << "get Raytracer polydata\n";
d->m_SelectedElement->Update();
return d->m_SelectedElement->GetOutput();
m_SelectedElement->Update();
return m_SelectedElement->GetOutput();
}
void vtkVoxRaytracerRepresentation::SetRepresentationElements(vtkVoxRaytracerRepresentation::RepresentationElements el)
{
switch(el) {
case Vtk::vtkVoxRaytracerRepresentation::RayElements:
d->m_SelectedElement = d->m_RayLine;
m_SelectedElement = m_RayLine;
break;
case Vtk::vtkVoxRaytracerRepresentation::VoxelsElements:
d->m_SelectedElement = d->m_RayRepresentation;
m_SelectedElement = m_RayRepresentation;
break;
default:
d->m_SelectedElement = d->m_RayLine;
m_SelectedElement = m_RayLine;
break;
}
}
@@ -167,22 +115,22 @@ void vtkVoxRaytracerRepresentation::SetMuon(MuonScatter &muon)
{
HPoint3f pt1,pt2,src;
src = muon.LineIn().origin;
d->m_Content->GetEntryPoint(muon.LineIn(),pt1);
d->m_Sphere1->SetCenter(pt1(0),pt1(1),pt1(2));
d->m_Line1->SetPoint1(src(0),src(1),src(2));
d->m_Line1->SetPoint2(pt1(0),pt1(1),pt1(2));
m_Content->GetEntryPoint(muon.LineIn(),pt1);
m_Sphere1->SetCenter(pt1(0),pt1(1),pt1(2));
m_Line1->SetPoint1(src(0),src(1),src(2));
m_Line1->SetPoint2(pt1(0),pt1(1),pt1(2));
HLine3f line_out = muon.LineOut();
src = line_out.origin;
float *direction = line_out.direction.data();
for(int i=0;i<3;++i) direction[i] *= -1;
d->m_Content->GetEntryPoint(line_out,pt2);
d->m_Sphere2->SetCenter(pt2(0),pt2(1),pt2(2));
d->m_Line2->SetPoint1(src(0),src(1),src(2));
d->m_Line2->SetPoint2(pt2(0),pt2(1),pt2(2));
m_Content->GetEntryPoint(line_out,pt2);
m_Sphere2->SetCenter(pt2(0),pt2(1),pt2(2));
m_Line2->SetPoint1(src(0),src(1),src(2));
m_Line2->SetPoint2(pt2(0),pt2(1),pt2(2));
d->m_Line3->SetPoint1(pt1(0),pt1(1),pt1(2));
d->m_Line3->SetPoint2(pt2(0),pt2(1),pt2(2));
m_Line3->SetPoint1(pt1(0),pt1(1),pt1(2));
m_Line3->SetPoint2(pt2(0),pt2(1),pt2(2));
// Create a vtkPoints object and store the points in it
vtkSmartPointer<vtkPoints> points =
@@ -210,25 +158,22 @@ void vtkVoxRaytracerRepresentation::SetMuon(MuonScatter &muon)
// Add the lines to the dataset
linesPolyData->SetLines(lines);
d->m_RayLine->RemoveAllInputs();
m_RayLine->RemoveAllInputs();
# if VTK_MAJOR_VERSION <= 5
d->m_RayLine->AddInputConnection(linesPolyData->GetProducerPort());
# else
d->m_RayLine->AddInputData(linesPolyData);
m_RayLine->AddInputConnection(linesPolyData->GetProducerPort());
# endif
d->m_RayLine->AddInputConnection(d->m_Line1->GetOutputPort());
d->m_RayLine->AddInputConnection(d->m_Sphere1->GetOutputPort());
d->m_RayLine->AddInputConnection(d->m_Line2->GetOutputPort());
d->m_RayLine->AddInputConnection(d->m_Sphere2->GetOutputPort());
// d->m_RayLine->AddInputConnection(d->m_Line3->GetOutputPort());
m_RayLine->AddInputConnection(m_Line1->GetOutputPort());
m_RayLine->AddInputConnection(m_Sphere1->GetOutputPort());
m_RayLine->AddInputConnection(m_Line2->GetOutputPort());
m_RayLine->AddInputConnection(m_Sphere2->GetOutputPort());
vtkSmartPointer<vtkMatrix4x4> vmat = vtkSmartPointer<vtkMatrix4x4>::New();
Matrix4f mat = d->m_Content->GetImage()->GetWorldMatrix();
Matrix4f mat = m_Content->GetImage()->GetWorldMatrix();
for(int i=0; i<4; ++i)
for(int j=0; j<4; ++j)
vmat->SetElement(i,j,mat(i,j));
d->m_Transform->SetMatrix(vmat);
m_Transform->SetMatrix(vmat);
this->SetRay(pt1,pt2);
}
@@ -237,22 +182,22 @@ void vtkVoxRaytracerRepresentation::SetMuon(MuonScatter &muon, HPoint3f poca)
{
HPoint3f pt1,pt2,src;
src = muon.LineIn().origin;
d->m_Content->GetEntryPoint(muon.LineIn(),pt1);
d->m_Sphere1->SetCenter(pt1(0),pt1(1),pt1(2));
d->m_Line1->SetPoint1(src(0),src(1),src(2));
d->m_Line1->SetPoint2(pt1(0),pt1(1),pt1(2));
m_Content->GetEntryPoint(muon.LineIn(),pt1);
m_Sphere1->SetCenter(pt1(0),pt1(1),pt1(2));
m_Line1->SetPoint1(src(0),src(1),src(2));
m_Line1->SetPoint2(pt1(0),pt1(1),pt1(2));
HLine3f line_out = muon.LineOut();
src = line_out.origin;
float *direction = line_out.direction.data();
for(int i=0;i<3;++i) direction[i] *= -1;
d->m_Content->GetEntryPoint(line_out,pt2);
d->m_Sphere2->SetCenter(pt2(0),pt2(1),pt2(2));
d->m_Line2->SetPoint1(src(0),src(1),src(2));
d->m_Line2->SetPoint2(pt2(0),pt2(1),pt2(2));
m_Content->GetEntryPoint(line_out,pt2);
m_Sphere2->SetCenter(pt2(0),pt2(1),pt2(2));
m_Line2->SetPoint1(src(0),src(1),src(2));
m_Line2->SetPoint2(pt2(0),pt2(1),pt2(2));
d->m_Line3->SetPoint1(pt1(0),pt1(1),pt1(2));
d->m_Line3->SetPoint2(pt2(0),pt2(1),pt2(2));
m_Line3->SetPoint1(pt1(0),pt1(1),pt1(2));
m_Line3->SetPoint2(pt2(0),pt2(1),pt2(2));
// Create a vtkPoints object and store the points in it
vtkSmartPointer<vtkPoints> points =
@@ -284,34 +229,31 @@ void vtkVoxRaytracerRepresentation::SetMuon(MuonScatter &muon, HPoint3f poca)
// Add the lines to the dataset
linesPolyData->SetLines(lines);
d->m_RayLine->RemoveAllInputs();
m_RayLine->RemoveAllInputs();
# if VTK_MAJOR_VERSION <= 5
d->m_RayLine->AddInputConnection(linesPolyData->GetProducerPort());
# else
d->m_RayLine->AddInputData(linesPolyData);
m_RayLine->AddInputConnection(linesPolyData->GetProducerPort());
# endif
d->m_RayLine->AddInputConnection(d->m_Line1->GetOutputPort());
d->m_RayLine->AddInputConnection(d->m_Sphere1->GetOutputPort());
d->m_RayLine->AddInputConnection(d->m_Line2->GetOutputPort());
d->m_RayLine->AddInputConnection(d->m_Sphere2->GetOutputPort());
// d->m_RayLine->AddInputConnection(d->m_Line3->GetOutputPort());
m_RayLine->AddInputConnection(m_Line1->GetOutputPort());
m_RayLine->AddInputConnection(m_Sphere1->GetOutputPort());
m_RayLine->AddInputConnection(m_Line2->GetOutputPort());
m_RayLine->AddInputConnection(m_Sphere2->GetOutputPort());
vtkSmartPointer<vtkSphereSource> poca_sphere =
vtkSmartPointer<vtkSphereSource>::New();
poca_sphere->SetRadius(d->default_radius);
poca_sphere->SetRadius(default_radius);
poca_sphere->SetCenter(poca(0),poca(1),poca(2));
d->m_RayLine->AddInputConnection(poca_sphere->GetOutputPort());
m_RayLine->AddInputConnection(poca_sphere->GetOutputPort());
vtkSmartPointer<vtkMatrix4x4> vmat = vtkSmartPointer<vtkMatrix4x4>::New();
Matrix4f mat = d->m_Content->GetImage()->GetWorldMatrix();
Matrix4f mat = m_Content->GetImage()->GetWorldMatrix();
for(int i=0; i<4; ++i)
for(int j=0; j<4; ++j)
vmat->SetElement(i,j,mat(i,j));
d->m_Transform->SetMatrix(vmat);
m_Transform->SetMatrix(vmat);
if(d->m_Content->GetImage()->IsInsideBounds(poca))
if(m_Content->GetImage()->IsInsideBounds(poca))
this->SetRay(pt1,poca,pt2);
else
this->SetRay(pt1,pt2);
@@ -328,38 +270,36 @@ void vtkVoxRaytracerRepresentation::SetMuon(vtkMuonScatter &muon)
VoxRaytracer::RayData vtkVoxRaytracerRepresentation::GetRay()
{
return d->m_Ray;
return m_Ray;
}
void vtkVoxRaytracerRepresentation::SetRay(HPoint3f in, HPoint3f out)
{
d->m_Ray = d->m_Content->TraceBetweenPoints(in,out);
this->SetRay(&d->m_Ray);
m_Ray = m_Content->TraceBetweenPoints(in,out);
this->SetRay(&m_Ray);
}
void vtkVoxRaytracerRepresentation::SetRay(HPoint3f in, HPoint3f mid, HPoint3f out)
{
d->m_Ray = d->m_Content->TraceBetweenPoints(in,mid);
d->m_Ray.AppendRay( d->m_Content->TraceBetweenPoints(mid,out) );
this->SetRay(&d->m_Ray);
m_Ray = m_Content->TraceBetweenPoints(in,mid);
m_Ray.AppendRay( m_Content->TraceBetweenPoints(mid,out) );
this->SetRay(&m_Ray);
}
void vtkVoxRaytracerRepresentation::SetRay(VoxRaytracer::RayData *ray)
{
vtkAppendPolyData *appender = d->m_RayRepresentation;
vtkAppendPolyData *appender = m_RayRepresentation;
appender->RemoveAllInputs();
for(int i=0; i<ray->Data().size(); ++i) {
int id = ray->Data().at(i).vox_id;
Vector3i idv = d->m_Content->GetImage()->UnMap(id);
Vector3i idv = m_Content->GetImage()->UnMap(id);
vtkSmartPointer<vtkCubeSource> cube =
vtkSmartPointer<vtkCubeSource>::New();
cube->SetBounds(idv(0),idv(0)+1,idv(1),idv(1)+1,idv(2),idv(2)+1);
cube->Update();
# if VTK_MAJOR_VERSION <= 5
appender->AddInput(cube->GetOutput());
# else
appender->AddInputData(cube->GetOutput());
# endif
appender->Update();
}
@@ -368,12 +308,12 @@ void vtkVoxRaytracerRepresentation::SetRay(VoxRaytracer::RayData *ray)
void vtkVoxRaytracerRepresentation::SetVoxelsColor(Vector4f rgba)
{
this->SetColor(d->m_RayRepresentationActor,rgba);
this->SetColor(m_RayRepresentationActor,rgba);
}
void vtkVoxRaytracerRepresentation::SetRayColor(Vector4f rgba)
{
this->SetColor(d->m_RayLineActor,rgba);
this->SetColor(m_RayLineActor,rgba);
}
void vtkVoxRaytracerRepresentation::SetColor(vtkActor *actor, Vector4f rgba)
@@ -395,10 +335,10 @@ void vtkVoxRaytracerRepresentation::InstallPipe()
vtkSmartPointer<vtkAppendPolyData> append =
vtkSmartPointer<vtkAppendPolyData>::New();
append->AddInputConnection(d->m_Sphere1->GetOutputPort());
append->AddInputConnection(d->m_Sphere2->GetOutputPort());
append->AddInputConnection(d->m_Line1->GetOutputPort());
append->AddInputConnection(d->m_Line2->GetOutputPort());
append->AddInputConnection(m_Sphere1->GetOutputPort());
append->AddInputConnection(m_Sphere2->GetOutputPort());
append->AddInputConnection(m_Line1->GetOutputPort());
append->AddInputConnection(m_Line2->GetOutputPort());
append->Update();
vtkSmartPointer<vtkPolyDataMapper> mapper =
@@ -413,34 +353,24 @@ void vtkVoxRaytracerRepresentation::InstallPipe()
this->SetProp(actor);
mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(d->m_RayLine->GetOutputPort());
mapper->SetInputConnection(m_RayLine->GetOutputPort());
mapper->Update();
d->m_RayLineActor->SetMapper(mapper);
d->m_RayLineActor->GetProperty()->SetColor(1,0,0);
this->SetProp(d->m_RayLineActor);
// mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
// mapper->SetInputConnection(d->m_Line3->GetOutputPort());
// mapper->Update();
// actor = vtkSmartPointer<vtkActor>::New();
// actor->SetMapper(mapper);
// actor->GetProperty()->SetColor(1,0,0);
// d->m_Assembly->AddPart(actor);
m_RayLineActor->SetMapper(mapper);
m_RayLineActor->GetProperty()->SetColor(1,0,0);
this->SetProp(m_RayLineActor);
vtkSmartPointer<vtkTransformPolyDataFilter> polyfilter =
vtkSmartPointer<vtkTransformPolyDataFilter>::New();
polyfilter->SetInputConnection(d->m_RayRepresentation->GetOutputPort());
polyfilter->SetTransform(d->m_Transform);
polyfilter->SetInputConnection(m_RayRepresentation->GetOutputPort());
polyfilter->SetTransform(m_Transform);
mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(polyfilter->GetOutputPort());
mapper->Update();
vtkActor *vra = d->m_RayRepresentationActor;
vtkActor *vra = m_RayRepresentationActor;
vra->SetMapper(mapper);
vra->GetProperty()->SetOpacity(0.2);
vra->GetProperty()->SetEdgeVisibility(true);

View File

@@ -28,8 +28,24 @@
#ifndef U_VTKVOXRAYTRACERREPRESENTATION_H
#define U_VTKVOXRAYTRACERREPRESENTATION_H
#include <vtkLine.h>
#include <vtkCellArray.h>
#include <vtkLineSource.h>
#include <vtkSphereSource.h>
#include <vtkBoundingBox.h>
#include <vtkCubeSource.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkAppendPolyData.h>
#include <vtkActor.h>
#include <vtkAssembly.h>
#include <vtkProp3DCollection.h>
#include <vtkProperty.h>
#include <vtkPolyData.h>
#include <vtkTransform.h>
#include <vtkTransformPolyDataFilter.h>
#include "Core/Macros.h"
#include "Math/Dense.h"
#include "uLibVtkInterface.h"
@@ -89,8 +105,23 @@ private:
void SetColor(vtkActor *actor, Vector4f rgba);
friend class vtkVoxRaytracerRepresentationPimpl;
class vtkVoxRaytracerRepresentationPimpl *d;
VoxRaytracer *m_Content;
Scalarf default_radius;
vtkAssembly *m_Assembly;
vtkAppendPolyData *m_RayLine;
vtkActor *m_RayLineActor;
vtkActor *m_RayRepresentationActor;
vtkSmartPointer<vtkTransform> m_Transform;
VoxRaytracer::RayData m_Ray;
vtkSmartPointer<vtkSphereSource> m_Sphere1;
vtkSmartPointer<vtkSphereSource> m_Sphere2;
vtkSmartPointer<vtkLineSource> m_Line1;
vtkSmartPointer<vtkLineSource> m_Line2;
vtkSmartPointer<vtkLineSource> m_Line3;
vtkSmartPointer<vtkAppendPolyData> m_RayRepresentation;
vtkAppendPolyData *m_SelectedElement;
};

View File

@@ -1,35 +0,0 @@
/*//////////////////////////////////////////////////////////////////////////////
// CMT Cosmic Muon Tomography project //////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Copyright (c) 2014, Universita' degli Studi di Padova, INFN sez. di Padova
All rights reserved
Authors: Andrea Rigoni Garola < andrea.rigoni@pd.infn.it >
------------------------------------------------------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3.0 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library.
//////////////////////////////////////////////////////////////////////////////*/
#include "Object.h"
int main()
{
return 0;
}

View File

@@ -1,19 +1,92 @@
# - Config file for the FooBar package
# - Config file for the ULib package
# It defines the following variables
# FOOBAR_INCLUDE_DIRS - include directories for FooBar
# FOOBAR_LIBRARIES - libraries to link against
# FOOBAR_EXECUTABLE - the bar executable
# ULIB_INCLUDE_DIRS - include directories for ULib
# ULIB_LIBRARIES - libraries to link against
# ULIB_EXECUTABLE - the bar executable
set(ULIB_VERSION @PROJECT_VERSION@)
@PACKAGE_INIT@
# Defines the include directories for the header files
# PACKAGE_INCLUDE_INSTALL_DIR is replaced by configure_package_config_file
# with the correct path for the installation.
set(ULIB_INCLUDE_DIRS "${PACKAGE_INCLUDE_INSTALL_DIR}")
# Compute paths
get_filename_component(ULIB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
set(ULIB_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
# Our library dependencies (contains definitions for IMPORTED targets)
# if(NOT TARGET foo AND NOT FooBar_BINARY_DIR)
include("${ULIB_CMAKE_DIR}/uLibTargets.cmake")
# endif()
# Search for the directory of exported build targets
set(uLib_BUILD_TARGETS_FILE
"${ULIB_CMAKE_DIR}/uLibTargets-build.cmake"
)
# Search for the directory of installed targets
set(uLib_INSTALL_TARGETS_FILE
"${ULIB_CMAKE_DIR}/uLibTargets.cmake"
)
# We use a logic based on the presence of the build target file
# to determine if we are in a local build.
if(EXISTS "${uLib_BUILD_TARGETS_FILE}")
message(STATUS " ++ Using uLib build targets")
include("${uLib_BUILD_TARGETS_FILE}")
set_and_check(ULIB_INCLUDE_DIRS "@ULIB_SOURCE_DIR@/src")
set_and_check(ULIB_LIBRARY_DIRS "${ULIB_CMAKE_DIR}")
set(ULIB_BUILD_DIR ${ULIB_CMAKE_DIR})
# Target that builds uLib inside its build directory
add_custom_target(uLib_dependency_target
COMMAND echo " --------------------------------- "
COMMAND echo " - Building uLib as a dependency - "
COMMAND echo " --------------------------------- "
COMMAND echo ""
COMMAND ${CMAKE_COMMAND} --build ${ULIB_BUILD_DIR}
COMMAND echo ""
WORKING_DIRECTORY ${ULIB_BUILD_DIR}
)
add_library(uLib_dependency INTERFACE)
add_dependencies(uLib_dependency uLib_dependency_target)
link_libraries(uLib_dependency)
else()
message(STATUS " ++ Using uLib installed targets")
include("${uLib_INSTALL_TARGETS_FILE}")
set_and_check(ULIB_INCLUDE_DIRS "@PACKAGE_INSTALL_INC_DIR@")
set(ULIB_SYSCONFIG_DIR "@PACKAGE_INSTALL_ETC_DIR@")
set_and_check(ULIB_CMAKE_DIR "@PACKAGE_INSTALL_CMAKE_DIR@")
set_and_check(ULIB_LIBRARY_DIRS "@PACKAGE_INSTALL_LIB_DIR@")
endif()
# --- Add required packages from uLib ---
# TODO: this should be selected if components are active
#
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.45.0 COMPONENTS program_options filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
link_libraries(${Boost_LIBRARIES})
find_package(Eigen3 CONFIG REQUIRED)
include(${EIGEN3_USE_FILE})
find_package(ROOT CONFIG REQUIRED)
include(${ROOT_USE_FILE})
find_package(VTK REQUIRED)
# include(${VTK_USE_FILE})
link_directories("${ULIB_LIBRARY_DIRS}")
set(ULIB_LIBRARIES "@ULIB_SHARED_LIBRARIES@")
check_required_components(uLib)
# Set the variable to indicate that the package has been found.
set(uLib_FOUND TRUE)
# These are IMPORTED targets created by FooBarTargets.cmake
# set(FOOBAR_LIBRARIES foo)
# set(FOOBAR_EXECUTABLE bar)
set(ULIB_LIBRARIES @ULIB_SHARED_LIBRARIES@)