Skip to content
Snippets Groups Projects
Commit e53ebff8 authored by Whitney Armstrong's avatar Whitney Armstrong
Browse files

Merge branch 'master' of https://github.com/whit2333/hcana into update

parents f5dfd245 da9848aa
No related branches found
No related tags found
No related merge requests found
......@@ -60,3 +60,4 @@ examples/cache
# Working directories
work
build*
build/
......@@ -23,6 +23,80 @@ Instructions for downloading hcana can be found in the
Compiling
---------
CMake is the preferred build tool. See below for builds with scons/make which
are slightly different.
### Compiling with CMAKE
CMake build will do a **proper** build and install.
Here we are using the install prefix `$HOME/my_exp_soft` which is like the
standard `/usr/local`. To use it make sure you your environment is setup (e.g.,
towards the end of your `.bashrc`):
```
export PATH=$HOME/my_exp_soft/bin:$PATH
export LD_LIBRARY_PATH=$HOME/my_exp_soft/lib:$HOME/my_exp_soft/lib64:$LD_LIBRARY_PATH
```
(ノಠ益ಠ)ノ彡┻━┻ **Do not install into the source directories**.
(ノ^_^)ノ┻━┻ ┬─┬ ノ( ^_^ノ)
First you should build evio followed by podd. Here are all the steps:
#### Build EVIO with cmake
```
git clone https://github.com/whit2333/hallac_evio.git
cd hallac_evio
mkdir build && cd build
cmake ../. -DCMAKE_INSTALL_PREFIX=$HOME/my_exp_soft
make -j4 install
```
#### Build analyzer (PODD)
```
git clone https://github.com/whit2333/analyzer.git
cd analyzer
mkdir build && cd build
cmake ../. -DCMAKE_INSTALL_PREFIX=$HOME/my_exp_soft
make -j4 install
```
#### Build hcana
```
git clone https://github.com/whit2333/hcana.git
cd hcana
mkdir build && cd build
cmake ../. -DCMAKE_INSTALL_PREFIX=$HOME/my_exp_soft
make -j4 install
```
All done. Now you can run `hcana` and you're off to analyze.
#### Loading the libraries into ROOT
```
// .rootlogon.C
{
gSystem->AddIncludePath(" -Iinclude/podd" );
gSystem->AddIncludePath(" -Iinclude/hcana");
gSystem->AddIncludePath(" -Iinclude/evio" );
gInterpreter->AddIncludePath("include/podd" );
gInterpreter->AddIncludePath("include/hcana");
gInterpreter->AddIncludePath("include/evio" );
gSystem->Load("libevioxx.so");
gSystem->Load("libHallA.so");
gSystem->Load("libdc.so");
gSystem->Load("libHallC.so");
}
```
![libHallC in ROOT](/docs/libHallC_in_root.png)
### Other builds
hcana may be compiled with either make or scons. Switching between these
two build systems make require some cleanup of dependency files, binary files
and other autogenerated files.
......
@PACKAGE_INIT@
include("@PACKAGE_TARGETS_INSTALL_PATH@")
check_required_components(HCANA)
find_package(PODD REQUIRED)
message(STATUS "Found HCANA")
#get_filename_component(HCANA_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
#include(CMakeFindDependencyMacro)
#
#list(APPEND CMAKE_MODULE_PATH ${HCANA_CMAKE_DIR})
#
## NOTE Had to use find_package because find_dependency does not support COMPONENTS or MODULE until 3.8.0
#
##find_dependency(Boost 1.55 REQUIRED COMPONENTS regex)
##find_dependency(RapidJSON 1.0 REQUIRED MODULE)
##find_package(Boost 1.55 REQUIRED COMPONENTS regex)
##find_package(RapidJSON 1.0 REQUIRED MODULE)
#list(REMOVE_AT CMAKE_MODULE_PATH -1)
#
#if(NOT TARGET HCANA::PODD)
# include("${HCANA_CMAKE_DIR}/PODDTargets.cmake")
#endif()
#
#set(HCANA_LIBRARIES PODD::PODD)
cmake_minimum_required(VERSION 2.8)
# Return the date (yyyy-mm-dd)
macro(DATE RESULT)
if(WIN32)
execute_process(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE "(..)/(..)/(....).*" "\\3-\\2-\\1" ${RESULT} ${${RESULT}})
elseif(UNIX)
execute_process(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT})
else()
message(SEND_ERROR "Unable to detect date")
set(${RESULT} UNKNOWN)
endif()
endmacro()
# Return the time (hh:mm:ss)
macro(TIME RESULT)
if(WIN32)
execute_process(COMMAND "cmd" " /C echo %TIME%" OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE "(..:..:..),(..)" "\\1" ${RESULT} ${${RESULT}})
elseif(UNIX)
execute_process(COMMAND "date" "+%H:%M:%S" OUTPUT_VARIABLE ${RESULT})
else()
message(SEND_ERROR "Unable to detect time")
set(${RESULT} UNKNOWN)
endif()
endmacro()
execute_process(COMMAND "date" "+%b:%d:%Y"
OUTPUT_VARIABLE HCANA_BUILD_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "date" "+%a %b %d %H:%M:%S %Z %Y"
OUTPUT_VARIABLE HCANA_BUILD_DATETIME
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "echo $(uname -s)-$(uname -r)-$(uname -m)"
OUTPUT_VARIABLE HCANA_PLATFORM
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "uname" "-n"
OUTPUT_VARIABLE HCANA_NODE
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "pwd"
OUTPUT_VARIABLE HCANA_BUILD_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "whoami"
OUTPUT_VARIABLE HCANA_BUILD_USER
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "echo $(git rev-parse HEAD 2>/dev/null | cut -c1-7)"
OUTPUT_VARIABLE HCANA_GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "echo $(${CMAKE_CXX_COMPILER} --version 2>/dev/null | head -1)"
OUTPUT_VARIABLE HCANA_CXX_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "echo $(root-config --version)"
OUTPUT_VARIABLE HCANA_ROOT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "printf '%02d%02d%02d' ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_PATCH}"
OUTPUT_VARIABLE HCANA_VERCODE
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Finds liblz4.
#
# This module defines:
# LZ4_FOUND
# LZ4_INCLUDE_DIR
# LZ4_LIBRARY
#
find_path(LZ4_INCLUDE_DIR NAMES lz4.h)
find_library(LZ4_LIBRARY NAMES lz4)
# We require LZ4_compress_default() which was added in v1.7.0
if (LZ4_LIBRARY)
include(CheckCSourceRuns)
set(CMAKE_REQUIRED_INCLUDES ${LZ4_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${LZ4_LIBRARY})
check_c_source_runs("
#include <lz4.h>
int main() {
int good = (LZ4_VERSION_MAJOR > 1) ||
((LZ4_VERSION_MAJOR == 1) && (LZ4_VERSION_MINOR >= 7));
return !good;
}" LZ4_GOOD_VERSION)
set(CMAKE_REQUIRED_INCLUDES)
set(CMAKE_REQUIRED_LIBRARIES)
endif()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
LZ4 DEFAULT_MSG
LZ4_LIBRARY LZ4_INCLUDE_DIR LZ4_GOOD_VERSION)
if (NOT LZ4_FOUND)
message(STATUS "Using third-party bundled LZ4")
else()
message(STATUS "Found LZ4: ${LZ4_LIBRARY}")
endif (NOT LZ4_FOUND)
mark_as_advanced(LZ4_INCLUDE_DIR LZ4_LIBRARY)
## OSX/homebrew version of root6 installs its cmake macros in a non-standard
## location. This might be an issue on other systems as well.
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} $ENV{ROOTSYS}/etc/root/cmake)
endif()
## Get rid of rpath warning on OSX
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_MACOSX_RPATH 1)
endif()
## Override root's ROOT_GENERATE_DICTIONARY macro to be less error-prone. This
## is done by only allowing for explicitly speficied header locations/include
## directories, instead of using the full search path for this module.
function(ROOT_GENERATE_DICTIONARY dictionary)
CMAKE_PARSE_ARGUMENTS(ARG "" "" "INCLUDEDIRS;LINKDEF;OPTIONS" "" ${ARGN})
## Get all include directories
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
set(dirs ${dirs} ${ARG_INCLUDEDIRS})
set(extra_includes "")
foreach(dir ${dirs})
set(extra_includes ${extra_includes} "-I${dir}")
endforeach()
## find and call ROOTCLING
find_program(ROOTCLING rootcling)
add_custom_command(
OUTPUT ${dictionary}.cxx ${dictionary}_rdict.pcm
COMMAND ${ROOTCLING} -f ${dictionary}.cxx -s ${dictionary}.pcm
${ARG_OPTIONS} ${extra_includes} ${ARG_UNPARSED_ARGUMENTS} ${ARG_LINKDEF}
DEPENDS ${includes} ${linkdefs})
endfunction()
docs/libHallC_in_root.png

135 KiB

cmake_minimum_required(VERSION 3.1)
#message(STATUS "Subproject: PODD...")
# Download and unpack gflags at configure time
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/PODD.CMakeLists.txt
${CMAKE_BINARY_DIR}/PODD-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
if(result)
message(FATAL_ERROR "CMake step for PODD failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
if(result)
message(FATAL_ERROR "Download step for exteranl PODD build failed: ${result}")
endif()
add_subdirectory(
${CMAKE_BINARY_DIR}/hallac_PODD-src
${CMAKE_BINARY_DIR}/hallac_PODD-build)
#execute_process(COMMAND "rm -r *"
# RESULT_VARIABLE result
# WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
message(STATUS "Subproject: PODD...DONE")
cmake_minimum_required(VERSION 3.5)
# simplify variable expansion
#cmake_policy(SET CMP0053 NEW)
#cmake_policy(SET CMP0010 NEW)
project(PODD-download NONE)
include(ExternalProject)
ExternalProject_Add(PODD_project
GIT_REPOSITORY https://github.com/whit2333/analyzer.git
GIT_TAG origin/master
SOURCE_DIR "${CMAKE_BINARY_DIR}/hallac_PODD-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/hallac_PODD-build"
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=@CMAKE_INSTALL_PREFIX@" "-DCMAKE_PREFIX_PATH=@CMAKE_INSTALL_PREFIX@"
BUILD_COMMAND ${CMAKE_COMMAND} --build . -- -j4
USES_TERMINAL_BUILD ON
TEST_COMMAND ""
LOG_DOWNLOAD ON
)
ExternalProject_Add_StepTargets(PODD_project install)
#ifndef HCANA_COMPILEDATA_H
#define HCANA_COMPILEDATA_H
#define HC_INCLUDEPATH "@CMAKE_INSTALL_PREFIX@/include"
#define HC_VERSION "@PROJECT_VERSION@"
#define HC_DATE "@HCANA_BUILD_DATE@"
#define HC_DATETIME "@HCANA_BUILD_DATETIME@"
#define HC_PLATFORM "@HCANA_PLATFORM@"
#define HC_BUILDNODE "@HCANA_NODE@"
#define HC_BUILDDIR "@HCANA_BUILD_DIR@"
#define HC_BUILDUSER "@HCANA_BUILD_USER@"
#define HC_GITVERS "@HCANA_GIT_VERSION@"
#define HC_CXXVERS "@HCANA_CXX_VERSION@"
#define HC_ROOTVERS "@HCANA_ROOT_VERSION@"
#define HCANA_VERSION_CODE @HCANA_VERCODE@
#define HCANA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
#endif
// Example:
//#ifndef ANALYZER_COMPILEDATA_H
//#define ANALYZER_COMPILEDATA_H
//
//#define HA_INCLUDEPATH "/mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA/src /mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA/hana_decode"
//#define HA_VERSION "1.6.0"
//#define HA_DATE "Jun 26 2018"
//#define HA_DATETIME "Tue Jun 26 2018"
//#define HA_PLATFORM "Linux-4.13.0-45-generic-x86_64-with-Ubuntu-17.10-artful"
//#define HA_BUILDNODE "wpad"
//#define HA_BUILDDIR "/mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA"
//#define HA_BUILDUSER "whit"
//#define HA_GITVERS "5b48832"
//#define HA_CXXVERS "c++ (GCC) 8.1.0"
//#define HA_ROOTVERS "6.15/01"
//#define ANALYZER_VERSION_CODE 67072
//#define ANALYZER_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
//
//#endif
// Preamble to HallC_LinkDef.h file
#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ global gHcParms;
#pragma link C++ global gHcDetectorMap;
#pragma link C++ class Decoder::Scaler9001+;
#pragma link C++ class Decoder::Scaler9250+;
#pragma link C++ class THcAerogel+;
#pragma link C++ class THcAerogelHit+;
#pragma link C++ class THcAnalyzer+;
#pragma link C++ class THcBCMCurrent+;
#pragma link C++ class THcCherenkov+;
#pragma link C++ class THcCherenkovHit+;
#pragma link C++ class THcCoinTime+;
#pragma link C++ class THcConfigEvtHandler+;
#pragma link C++ class THcDC+;
#pragma link C++ class THcDCHit+;
#pragma link C++ class THcDCLookupTTDConv+;
#pragma link C++ class THcDCTimeToDistConv+;
#pragma link C++ class THcDCTrack+;
#pragma link C++ class THcDCWire+;
#pragma link C++ class THcDetectorMap+;
#pragma link C++ class THcDriftChamber+;
#pragma link C++ class THcDriftChamberPlane+;
#pragma link C++ class THcDummySpectrometer+;
#pragma link C++ class THcExtTarCor+;
#pragma link C++ class THcFormula+;
#pragma link C++ class THcHallCSpectrometer+;
#pragma link C++ class THcHitList+;
#pragma link C++ class THcHodoEff+;
#pragma link C++ class THcHodoHit+;
#pragma link C++ class THcHodoscope+;
#pragma link C++ class THcInterface+;
#pragma link C++ class THcParmList+;
#pragma link C++ class THcPeriodicReport+;
#pragma link C++ class THcPrimaryKine+;
#pragma link C++ class THcRaster+;
#pragma link C++ class THcRasteredBeam+;
#pragma link C++ class THcRasterRawHit+;
#pragma link C++ class THcRawAdcHit+;
#pragma link C++ class THcRawDCHit+;
#pragma link C++ class THcRawHit+;
#pragma link C++ class THcRawHodoHit+;
#pragma link C++ class THcRawShowerHit+;
#pragma link C++ class THcRawTdcHit+;
#pragma link C++ class THcReactionPoint+;
#pragma link C++ class THcRun+;
#pragma link C++ class THcRunParameters+;
#pragma link C++ class THcScalerEvtHandler+;
#pragma link C++ class THcScintillatorPlane+;
#pragma link C++ class THcSecondaryKine+;
#pragma link C++ class THcShowerArray+;
#pragma link C++ class THcShower+;
#pragma link C++ class THcShowerHit+;
#pragma link C++ class THcShowerPlane+;
#pragma link C++ class THcSignalHit+;
#pragma link C++ class THcSpacePoint+;
#pragma link C++ class THcTimeSyncEvtHandler+;
#pragma link C++ class THcTrigApp+;
#pragma link C++ class THcTrigDet+;
#pragma link C++ class THcTrigRawHit+;
#pragma link C++ class Decoder::TIBlobModule+;
// Postamble for HallC_Linkdef.h file
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment