make PRgeHandler to a shared libs. Adopted Nonlocal and PMagProximity accordingly.

This commit is contained in:
suter_a 2021-04-01 14:26:26 +02:00
parent 113996aa4e
commit 72c085a0a8
9 changed files with 58 additions and 294 deletions

View File

@ -1,4 +1,4 @@
#--- build the PMusr and PUserFcnBase libs ------------------------------------ #--- build the PMusr, PUserFcnBase, and PRgeHandler libs ----------------------
#--- generate necessary dictionaries ------------------------------------------ #--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
@ -53,6 +53,18 @@ root_generate_dictionary(
-I${FFTW3_INCLUDE_DIR} -I${MUSRFIT_INC} -I${FFTW3_INCLUDE_DIR} -I${MUSRFIT_INC}
MODULE PUserFcnBase MODULE PUserFcnBase
) )
root_generate_dictionary(
PRgeHandlerDict
PRgeHandler.h
OPTIONS
-I${NONLOCAL_INC}
-I${MUSRFIT_INC}
-I${CMAKE_CURRENT_SOURCE_DIR}
-inlineInputHeader
LINKDEF ${MUSRFIT_INC}/PRgeHandlerLinkDef.h
MODULE PRgeHandler
)
#--- create pkg-config info --------------------------------------------------- #--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}") set(prefix "${CMAKE_INSTALL_PREFIX}")
@ -64,6 +76,8 @@ set(MUSR_LIBRARY_NAME "PMusr")
configure_file("PMusr.pc.in" "PMusr.pc" @ONLY) configure_file("PMusr.pc.in" "PMusr.pc" @ONLY)
set(USERFCN_LIBRARY_NAME "PUserFcnBase") set(USERFCN_LIBRARY_NAME "PUserFcnBase")
configure_file("PUserFcnBase.pc.in" "PUserFcnBase.pc" @ONLY) configure_file("PUserFcnBase.pc.in" "PUserFcnBase.pc" @ONLY)
set(PRGEHANDLER_LIBRARY_NAME "PRgeHandler")
configure_file("PRgeHandler.pc.in" "PRgeHandler.pc" @ONLY)
#--- lib creation ------------------------------------------------------------- #--- lib creation -------------------------------------------------------------
add_library(PMusr SHARED add_library(PMusr SHARED
@ -117,6 +131,11 @@ add_library(PUserFcnBase SHARED
PUserFcnBaseDict.cxx PUserFcnBaseDict.cxx
) )
add_library(PRgeHandler SHARED
PRgeHandler.cpp
PRgeHandlerDict.cxx
)
#--- set target properties, e.g. version -------------------------------------- #--- set target properties, e.g. version --------------------------------------
set_target_properties(PMusr set_target_properties(PMusr
PROPERTIES PROPERTIES
@ -126,11 +145,20 @@ set_target_properties(PUserFcnBase
PROPERTIES PROPERTIES
VERSION ${MUSR_VERSION} VERSION ${MUSR_VERSION}
) )
set_target_properties(PRgeHandler
PROPERTIES
VERSION ${MUSR_VERSION}
)
#--- make sure that the include directory is found ---------------------------- #--- make sure that the include directory is found ----------------------------
target_include_directories( target_include_directories(
PUserFcnBase BEFORE PRIVATE $<BUILD_INTERFACE:${MUSRFIT_INC}> PUserFcnBase BEFORE PRIVATE $<BUILD_INTERFACE:${MUSRFIT_INC}>
) )
target_include_directories(
PRgeHandler BEFORE PRIVATE $<BUILD_INTERFACE:${MUSRFIT_INC}>
)
#--- add OpenMP compile options if needed ------------------------------------- #--- add OpenMP compile options if needed -------------------------------------
if (OpenMP_FOUND) if (OpenMP_FOUND)
target_compile_options(PMusr PUBLIC ${OpenMP_CXX_FLAGS}) target_compile_options(PMusr PUBLIC ${OpenMP_CXX_FLAGS})
@ -157,11 +185,15 @@ if (OpenMP_FOUND)
endif (OpenMP_FOUND) endif (OpenMP_FOUND)
target_link_libraries(PUserFcnBase ${ROOT_LIBRARIES}) target_link_libraries(PUserFcnBase ${ROOT_LIBRARIES})
target_link_libraries(PRgeHandler ${ROOT_LIBRARIES})
target_link_libraries(PMusr ${DependOnLibs}) target_link_libraries(PMusr ${DependOnLibs})
#--- install PUserFcnBase solib ----------------------------------------------- #--- install PUserFcnBase solib -----------------------------------------------
install(TARGETS PUserFcnBase DESTINATION lib) install(TARGETS PUserFcnBase DESTINATION lib)
#--- install PRgeHandler solib -----------------------------------------------
install(TARGETS PRgeHandler DESTINATION lib)
#--- install PMusr solib ------------------------------------------------------ #--- install PMusr solib ------------------------------------------------------
install(TARGETS PMusr DESTINATION lib) install(TARGETS PMusr DESTINATION lib)
@ -173,6 +205,8 @@ install(
${CMAKE_CURRENT_BINARY_DIR}/libPMusrCanvas.rootmap ${CMAKE_CURRENT_BINARY_DIR}/libPMusrCanvas.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0_rdict.pcm ${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0.rootmap ${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPRgeHandler_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPRgeHandler.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandler_rdict.pcm ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandler_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandler.rootmap ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandler.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPUserFcnBase_rdict.pcm ${CMAKE_CURRENT_BINARY_DIR}/libPUserFcnBase_rdict.pcm
@ -195,6 +229,7 @@ install(
${MUSRFIT_INC}/PMusr.h ${MUSRFIT_INC}/PMusr.h
${MUSRFIT_INC}/PMusrT0.h ${MUSRFIT_INC}/PMusrT0.h
${MUSRFIT_INC}/PPrepFourier.h ${MUSRFIT_INC}/PPrepFourier.h
${MUSRFIT_INC}/PRgeHandler.h
${MUSRFIT_INC}/PRunAsymmetry.h ${MUSRFIT_INC}/PRunAsymmetry.h
${MUSRFIT_INC}/PRunAsymmetryBNMR.h ${MUSRFIT_INC}/PRunAsymmetryBNMR.h
${MUSRFIT_INC}/PRunAsymmetryRRF.h ${MUSRFIT_INC}/PRunAsymmetryRRF.h
@ -214,6 +249,7 @@ install(
#--- install pkg-config info -------------------------------------------------- #--- install pkg-config info --------------------------------------------------
install( install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/PUserFcnBase.pc FILES ${CMAKE_CURRENT_BINARY_DIR}/PUserFcnBase.pc
${CMAKE_CURRENT_BINARY_DIR}/PRgeHandler.pc
${CMAKE_CURRENT_BINARY_DIR}/PMusr.pc ${CMAKE_CURRENT_BINARY_DIR}/PMusr.pc
DESTINATION lib/pkgconfig DESTINATION lib/pkgconfig
) )

View File

@ -0,0 +1,10 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: PRgeHandler
Description: C++ shared library providing the support for handling of TrimSP rge-files
Version: @MUSR_VERSION@
Libs: -L${libdir} -l@PRGEHANDLER_LIBRARY_NAME@
Cflags: -I${includedir}

View File

@ -38,7 +38,6 @@ configure_file("PMagProximityFitter.pc.in" "PMagProximityFitter.pc" @ONLY)
add_library(PMagProximityFitter SHARED add_library(PMagProximityFitter SHARED
PMagProximityFitter.cpp PMagProximityFitter.cpp
PMagProximityFitterDict.cxx PMagProximityFitterDict.cxx
PMPRgeHandler.cpp
PMPStartupHandler.cpp PMPStartupHandler.cpp
PMPStartupHandlerDict.cxx PMPStartupHandlerDict.cxx
) )
@ -57,7 +56,7 @@ set_target_properties(PMagProximityFitter
) )
#--- add library dependencies ------------------------------------------------- #--- add library dependencies -------------------------------------------------
target_link_libraries(PMagProximityFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) target_link_libraries(PMagProximityFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PRgeHandler PUserFcnBase)
#--- install PMagProximityFitter solib ---------------------------------------- #--- install PMagProximityFitter solib ----------------------------------------
install(TARGETS PMagProximityFitter DESTINATION lib) install(TARGETS PMagProximityFitter DESTINATION lib)
@ -76,7 +75,6 @@ install(
FILES FILES
PMagProximity.h PMagProximity.h
PMagProximityFitter.h PMagProximityFitter.h
PMPRgeHandler.h
PMPStartupHandler.h PMPStartupHandler.h
DESTINATION DESTINATION
include include

View File

@ -1,212 +0,0 @@
/***************************************************************************
PMPRgeHandler.cpp
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
***************************************************************************/
/***************************************************************************
* Copyright (C) 2011-2021 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program 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 General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include <cassert>
#include <iostream>
#include <fstream>
#include "PMPRgeHandler.h"
//--------------------------------------------------------------------------
// Constructor
//--------------------------------------------------------------------------
/**
*
*/
PMPRgeHandler::PMPRgeHandler(const PStringVector &rgeDataPathList, const PDoubleVector &rgeDataEnergyList)
{
fIsValid = false;
fIsValid = LoadRgeData(rgeDataPathList, rgeDataEnergyList);
}
//--------------------------------------------------------------------------
// Destructor
//--------------------------------------------------------------------------
/**
*
*/
PMPRgeHandler::~PMPRgeHandler()
{
fRgeDataList.clear();
}
//--------------------------------------------------------------------------
// GetRgeEnergyIndex
//--------------------------------------------------------------------------
/**
*
* \param energy in (keV)
*/
Int_t PMPRgeHandler::GetRgeEnergyIndex(const Double_t energy)
{
Int_t idx = -1;
for (UInt_t i=0; i<fRgeDataList.size(); i++) {
if (energy == fRgeDataList[i].energy) {
idx = i;
break;
}
}
return idx;
}
//--------------------------------------------------------------------------
// GetRgeValue
//--------------------------------------------------------------------------
/**
*
* \param energy in (keV)
* \param dist in (nm)
*/
Double_t PMPRgeHandler::GetRgeValue(const Int_t index, const Double_t dist)
{
Double_t rgeVal = 0.0;
UInt_t distIdx = static_cast<UInt_t>(dist/(fRgeDataList[index].stoppingDistance[1]-fRgeDataList[index].stoppingDistance[0]));
if (distIdx >= fRgeDataList[index].stoppingDistance.size()) {
rgeVal = 0.0;
} else {
rgeVal = fRgeDataList[index].stoppingAmplitude[distIdx] +
(fRgeDataList[index].stoppingAmplitude[distIdx+1] - fRgeDataList[index].stoppingAmplitude[distIdx]) *
(dist-fRgeDataList[index].stoppingDistance[distIdx])/(fRgeDataList[index].stoppingDistance[distIdx+1]-fRgeDataList[index].stoppingDistance[distIdx]);
}
return rgeVal;
}
//--------------------------------------------------------------------------
// GetRgeValue
//--------------------------------------------------------------------------
/**
*
* \param energy in (keV)
* \param dist in (nm)
*/
Double_t PMPRgeHandler::GetRgeValue(const Double_t energy, const Double_t dist)
{
// check if energy is present in rge data list
Int_t idx = -1;
for (UInt_t i=0; i<fRgeDataList.size(); i++) {
if (energy == fRgeDataList[i].energy) {
idx = i;
break;
}
}
// energy not found
if (idx == -1)
return -1.0;
return GetRgeValue(idx, dist);
}
//--------------------------------------------------------------------------
// LoadRgeData
//--------------------------------------------------------------------------
/**
*
*/
Bool_t PMPRgeHandler::LoadRgeData(const PStringVector &rgeDataPathList, const PDoubleVector &rgeDataEnergyList)
{
std::ifstream fin;
PMPRgeData data;
Int_t idx=0;
TString dataName, tstr;
char line[512];
int result;
double dist, val;
for (UInt_t i=0; i<rgeDataPathList.size(); i++) {
// open rge-file for reading
fin.open(rgeDataPathList[i].Data(), std::iostream::in);
if (!fin.is_open()) {
std::cout << std::endl << "PMPRgeHandler::LoadRgeData **ERROR**";
std::cout << std::endl << " Could not open file " << rgeDataPathList[i].Data();
std::cout << std::endl;
return false;
}
// keep energy (in keV)
data.energy = rgeDataEnergyList[i]/1000.0;
// read msr-file
idx = 0;
while (!fin.eof()) {
// read a line
fin.getline(line, sizeof(line));
idx++;
// ignore first line
if (idx <= 1)
continue;
// ignore empty lines
tstr = line;
if (tstr.IsWhitespace())
continue;
// get values
result = sscanf(line, "%lf %lf", &dist, &val);
// check if data are valid
if (result != 2) {
fin.close();
return false;
}
// feed fRgeDataList
data.stoppingDistance.push_back(dist/10.0); // keep distancies in (nm)
data.stoppingAmplitude.push_back(val);
}
// normalize stopping distribution
Double_t norm = 0.0;
for (UInt_t j=0; j<data.stoppingAmplitude.size(); j++)
norm += data.stoppingAmplitude[j];
norm *= (data.stoppingDistance[1] - data.stoppingDistance[0]);
for (UInt_t j=0; j<data.stoppingAmplitude.size(); j++)
data.stoppingAmplitude[j] /= norm;
// keep data
fRgeDataList.push_back(data);
// clean up
data.stoppingAmplitude.clear();
data.stoppingDistance.clear();
fin.close();
}
return true;
}

View File

@ -1,53 +0,0 @@
/***************************************************************************
PMPRgeHandler.h
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
***************************************************************************/
/***************************************************************************
* Copyright (C) 2011-2021 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program 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 General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef _PMPRGEHANDLER_H_
#define _PMPRGEHANDLER_H_
#include "PMagProximity.h"
class PMPRgeHandler
{
public:
PMPRgeHandler(const PStringVector &rgeDataPathList, const PDoubleVector &rgeDataEnergyList);
virtual ~PMPRgeHandler();
virtual Bool_t IsValid() { return fIsValid; }
virtual Int_t GetRgeEnergyIndex(const Double_t energy);
virtual Double_t GetRgeValue(const Double_t energy, const Double_t dist);
virtual Double_t GetRgeValue(const Int_t index, const Double_t dist);
private:
Bool_t fIsValid;
PMPRgeDataList fRgeDataList;
virtual Bool_t LoadRgeData(const PStringVector &rgeDataPathList, const PDoubleVector &rgeDataEnergyList);
};
#endif // _PMPRGEHANDLER_H_

View File

@ -89,7 +89,7 @@ PMagProximityFitterGlobal::PMagProximityFitterGlobal()
} }
// load all the TRIM.SP rge-files // load all the TRIM.SP rge-files
fRgeHandler = new PMPRgeHandler(fStartupHandler->GetTrimSpDataPathList(), fStartupHandler->GetTrimSpDataVectorList()); fRgeHandler = new PRgeHandler();
if (!fRgeHandler->IsValid()) { if (!fRgeHandler->IsValid()) {
std::cout << std::endl << ">> PMagProximityFitterGlobal::PMagProximityFitterGlobal **PANIC ERROR**"; std::cout << std::endl << ">> PMagProximityFitterGlobal::PMagProximityFitterGlobal **PANIC ERROR**";
std::cout << std::endl << ">> rge data handler too unhappy. Will terminate unfriendly, sorry."; std::cout << std::endl << ">> rge data handler too unhappy. Will terminate unfriendly, sorry.";

View File

@ -32,7 +32,7 @@
#include "PUserFcnBase.h" #include "PUserFcnBase.h"
#include "PMPStartupHandler.h" #include "PMPStartupHandler.h"
#include "PMPRgeHandler.h" #include "PRgeHandler.h"
class PMagProximityFitterGlobal class PMagProximityFitterGlobal
{ {
@ -42,15 +42,15 @@ class PMagProximityFitterGlobal
Bool_t IsValid() { return fValid; } Bool_t IsValid() { return fValid; }
virtual void CalculateField(const std::vector<Double_t> &param) const; virtual void CalculateField(const std::vector<Double_t> &param) const;
virtual Int_t GetEnergyIndex(const Double_t energy) { return fRgeHandler->GetRgeEnergyIndex(energy); } virtual Int_t GetEnergyIndex(const Double_t energy) { return fRgeHandler->GetEnergyIndex(energy); }
virtual Double_t GetMuonStoppingDensity(const Int_t energyIndex, const Double_t z) const { return fRgeHandler->GetRgeValue(energyIndex, z); } virtual Double_t GetMuonStoppingDensity(const Int_t energyIndex, const Double_t z) const { return fRgeHandler->Get_n(energyIndex, z); }
virtual Double_t GetMagneticField(const Double_t z) const; virtual Double_t GetMagneticField(const Double_t z) const;
private: private:
Bool_t fValid; Bool_t fValid;
PMPStartupHandler *fStartupHandler; PMPStartupHandler *fStartupHandler;
PMPRgeHandler *fRgeHandler; PRgeHandler *fRgeHandler;
mutable std::vector<Double_t> fPreviousParam; mutable std::vector<Double_t> fPreviousParam;

View File

@ -3,13 +3,14 @@
<comment> <comment>
contains meta file infromation of the needed trim.sp files. contains meta file infromation of the needed trim.sp files.
</comment> </comment>
<trim_sp_part> <trim_sp>
<data_path>/mnt/home/nemu/analysis/2010/EuS-Co/trimsp2/EuS-Co_E</data_path> <data_path>/afs/psi.ch/project/nemu/analysis/2010/EuS-Co/trimsp2</data_path>
<rge_fln_pre>EuS-Co_E</rge_fln_pre>
<energy_list> <energy_list>
<energy>5030</energy> <energy>5030</energy>
<energy>6330</energy> <energy>6330</energy>
<energy>7530</energy> <energy>7530</energy>
<energy>8730</energy> <energy>8730</energy>
</energy_list> </energy_list>
</trim_sp_part> </trim_sp>
</mag_proximity> </mag_proximity>

View File

@ -2,7 +2,6 @@
#--- generate necessary dictionaries ------------------------------------------ #--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
set(MUSRFIT_CLASSES ${CMAKE_SOURCE_DIR}/src/classes)
set(NONLOCAL_INC ${CMAKE_SOURCE_DIR}/src/external/Nonlocal) set(NONLOCAL_INC ${CMAKE_SOURCE_DIR}/src/external/Nonlocal)
# ROOT requires that the dictonary header files are found at configuration time. # ROOT requires that the dictonary header files are found at configuration time.
# Hence, target_include_directories cannot be used here because, targets are # Hence, target_include_directories cannot be used here because, targets are
@ -31,17 +30,6 @@ root_generate_dictionary(
LINKDEF PNL_StartupHandlerLinkDef.h LINKDEF PNL_StartupHandlerLinkDef.h
MODULE PNL_StartupHandler MODULE PNL_StartupHandler
) )
root_generate_dictionary(
PRgeHandlerDict
PRgeHandler.h
OPTIONS
-I${NONLOCAL_INC}
-I${MUSRFIT_INC}
-I${CMAKE_CURRENT_SOURCE_DIR}
-inlineInputHeader
LINKDEF ${MUSRFIT_INC}/PRgeHandlerLinkDef.h
MODULE PRgeHandler
)
#--- create pkg-config info --------------------------------------------------- #--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}") set(prefix "${CMAKE_INSTALL_PREFIX}")
@ -56,8 +44,6 @@ configure_file("PNL_PippardFitter.pc.in" "PNL_PippardFitter.pc" @ONLY)
add_library(PNL_PippardFitter SHARED add_library(PNL_PippardFitter SHARED
PNL_PippardFitter.cpp PNL_PippardFitter.cpp
PNL_PippardFitterDict.cxx PNL_PippardFitterDict.cxx
${MUSRFIT_CLASSES}/PRgeHandler.cpp
PRgeHandlerDict.cxx
PNL_StartupHandler.cpp PNL_StartupHandler.cpp
PNL_StartupHandlerDict.cxx PNL_StartupHandlerDict.cxx
) )
@ -76,7 +62,7 @@ set_target_properties(PNL_PippardFitter
) )
#--- add library dependencies ------------------------------------------------- #--- add library dependencies -------------------------------------------------
target_link_libraries(PNL_PippardFitter ${Boost_LIBRARIES} ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) target_link_libraries(PNL_PippardFitter ${Boost_LIBRARIES} ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PRgeHandler PUserFcnBase)
#--- install PNL_PippardFitter solib ------------------------------------------ #--- install PNL_PippardFitter solib ------------------------------------------
install(TARGETS PNL_PippardFitter DESTINATION lib) install(TARGETS PNL_PippardFitter DESTINATION lib)
@ -86,8 +72,6 @@ install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libPNL_PippardFitter_rdict.pcm FILES ${CMAKE_CURRENT_BINARY_DIR}/libPNL_PippardFitter_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPNL_PippardFitter.rootmap ${CMAKE_CURRENT_BINARY_DIR}/libPNL_PippardFitter.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPNL_StartupHandler_rdict.pcm ${CMAKE_CURRENT_BINARY_DIR}/libPNL_StartupHandler_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPRgeHandler.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPRgeHandler_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPNL_StartupHandler.rootmap ${CMAKE_CURRENT_BINARY_DIR}/libPNL_StartupHandler.rootmap
DESTINATION lib DESTINATION lib
) )