Vous avez reçu un message "Your GitLab account has been locked ..." ? Pas d'inquiétude : lisez cet article https://docs.gricad-pages.univ-grenoble-alpes.fr/help/unlock/

Commit 158148dc authored by Emmanuel Promayon's avatar Emmanuel Promayon
Browse files

UPDATED CamiTK 4.x API now clean of all deprecated

Fist step: camitk core
parent ae2f00cb
......@@ -173,9 +173,10 @@ void BoxVOI::process ( ImageComponent* comp ) {
// Adapt properties of the new volume
double* inputO = inputImage->GetOrigin();
// value - origin in case of origin of an image is not (0,0,0)
resultImage->SetOrigin (std::min ( x1, x2 )*comp->getVoxelSize().x() + inputO[0],
std::min ( y1, y2 )*comp->getVoxelSize().y() + inputO[1],
std::min ( z1, z2 )*comp->getVoxelSize().z() + inputO[2]);
double* spacing = comp->getImageData()->GetSpacing();
resultImage->SetOrigin (std::min ( x1, x2 )*spacing[0] + inputO[0],
std::min ( y1, y2 )*spacing[1] + inputO[1],
std::min ( z1, z2 )*spacing[2] + inputO[2]);
// adapt extent to the new volume
int* dims = resultImage->GetDimensions();
......
......@@ -182,6 +182,7 @@ void MultiPickingWidget::removePixelFromTable() {
void MultiPickingWidget::removeSeedNumber(int i, int j) {
QVector3D point;
double* spacing = img->getImageData()->GetSpacing();
switch (j) {
case REMOVE_TABLE_INDEX:
pPM->removePixel (i);
......@@ -199,7 +200,7 @@ void MultiPickingWidget::removeSeedNumber(int i, int j) {
break;
case VIEW_TABLE_INDEX:
point = pPM->getPixelIndexList()->at(ui.pointsTableWidget->currentRow());
img->pixelPicked(point.x() * img->getVoxelSize().x(), point.y() * img->getVoxelSize().y(), point.z() * img->getVoxelSize().z(), img->getAxialSlices());//Need here the voxel coordinates (not voxel index, not voxel world coordinates)
img->pixelPicked(point.x() * spacing[0], point.y() * spacing[1], point.z() * spacing[2], img->getAxialSlices());//Need here the voxel coordinates (not voxel index, not voxel world coordinates)
Application::refresh();
break;
default:
......@@ -319,7 +320,8 @@ void MultiPickingWidget::manuallyModified(int i, int j) {
}
else if (ui.indexRadioButton->isChecked()) {
int* imageDims = img->getImageData()->GetDimensions();
QVector3D voxSize = img->getVoxelSize();
double* voxSize = img->getImageData()->GetSpacing();
// Change the pixel index at this row
// 3 possible case, either x, or y or z of one point have been manually changed
// We thus pick this new point
......@@ -330,15 +332,15 @@ void MultiPickingWidget::manuallyModified(int i, int j) {
// Exceptionnally, we do not make this calculation by image picking and use image voxel size
// to mimick a picking from the axial slice.
double x = iPick * voxSize.x();
double y = jPick * voxSize.y();
double z = kPick * voxSize.z();
double x = iPick * voxSize[0];
double y = jPick * voxSize[1];
double z = kPick * voxSize[2];
// check that this point is within image dimensions
if (((x < 0) || (x > imageDims[0]*voxSize.x())) ||
((y < 0) || (y > imageDims[1]*voxSize.y())) ||
((z < 0) || (z > imageDims[2]*voxSize.z()))) {
if (((x < 0) || (x > imageDims[0]*voxSize[0])) ||
((y < 0) || (y > imageDims[1]*voxSize[1])) ||
((z < 0) || (z > imageDims[2]*voxSize[2]))) {
QString msg = "The point (" + QString::number(x) + ", " + QString::number(y) + ", " + QString::number(z) + "), does not belong to the image " + img->getName() + ". Sorry...";
QMessageBox::warning(this, "Impossible Operation", msg);
......@@ -358,7 +360,8 @@ void MultiPickingWidget::manuallyModified(int i, int j) {
}
else { // Image Coordinates
int* imageDims = img->getImageData()->GetDimensions();
QVector3D voxSize = img->getVoxelSize();
double* voxSize = img->getImageData()->GetSpacing();
// Change the pixel index at this row
// 3 possible case, either x, or y or z of one point have been manually changed
// We thus pick this new point
......@@ -369,9 +372,9 @@ void MultiPickingWidget::manuallyModified(int i, int j) {
// check that this point is within image dimensions
if (((x < 0) || (x > imageDims[0]*voxSize.x())) ||
((y < 0) || (y > imageDims[1]*voxSize.y())) ||
((z < 0) || (z > imageDims[2]*voxSize.z()))) {
if (((x < 0) || (x > imageDims[0]*voxSize[0])) ||
((y < 0) || (y > imageDims[1]*voxSize[1])) ||
((z < 0) || (z > imageDims[2]*voxSize[2]))) {
QString msg = "The point (" + QString::number(x) + ", " + QString::number(y) + ", " + QString::number(z) + "), does not belong to the image " + img->getName() + ". Sorry...";
QMessageBox::warning(this, "Impossible Operation", msg);
......
......@@ -89,40 +89,6 @@ void PickedPixelMap::addPixel() {
}
}
////------------------------ convertIndexToCoordinates ------------------------
//QVector3D PickedPixelMap::convertIndexToCoordinates (int i, int j, int k) {
// QVector3D realCoord;
//
// // get the size of voxel and the origin
// QVector3D voxelSize = image->getVoxelSize();
//
// // transform pixel index to 3D image coordinates
// // (index pixel) * size of voxel = real coordinates
// realCoord.setX(i*voxelSize.x());
// realCoord.setY(j*voxelSize.y());
// realCoord.setZ(k*voxelSize.z());
//
// return realCoord;
//}
//
//
//QVector3D PickedPixelMap::convertCoordinatesToIndex(double x, double y, double z) {
// QVector3D index;
//
// // get the size of voxel and the origin
// QVector3D voxelSize = image->getVoxelSize();
//
// // transform 3D image coordinates to index
// // real coords = (index + 0.5) * voxelSize
// // index = (real coords) / voxelSize
// index.setX((int)((x / voxelSize.x())+0.5));
// index.setY((int)((y / voxelSize.y())+0.5));
// index.setZ((int)((z / voxelSize.z())+0.5));
//
// return index;
//
//}
//-------------------- getCoordIndexList -----------------------
QList<QVector3D>* PickedPixelMap::getCoordIndexList() {
return coordIndexList;
......@@ -130,36 +96,14 @@ QList<QVector3D>* PickedPixelMap::getCoordIndexList() {
QList<double>* PickedPixelMap::getPixelValueList() {
return pixelValueList;
//
// QList<QVector3D>* coordList = getPixelIndexList();
//
// QList<double> * values = new QList<double>();
//
// for (int i = 0; i < coordList->size(); i++) {
// // NOTE if this was a colored image, this would be the red value (the last parameter
// // of GetScalarComponentAsDouble is the index of the color component)
// double val = image->getImageData()->GetScalarComponentAsDouble(coordList->value(i).x(),
// coordList->value(i).y(),
// coordList->value(i).z(),
// 0);
// values->insert(i, val);
// }
//
// return values;
}
//----------------------- getCoordIndexList --------------------
QList<QVector3D>* PickedPixelMap::getPixelIndexList() {
return pixelIndexList;
// QList<QVector3D> *coord = new QList<QVector3D>();
//
// for (int i = 0; i<pixelIndexList->size(); i++) {
// // For each point in the list of coordinates, indexes are calculated
// coord->insert(i, convertCoordinatesToIndex(pixelIndexList->value(i).x(), pixelIndexList->value(i).y(), pixelIndexList->value(i).z()));
// }
//
// return coord;
}
//----------------------- getRealWorldList --------------------
QList<QVector3D>* PickedPixelMap::getRealWorldList() {
return realCoordList;
}
......@@ -194,18 +138,6 @@ void PickedPixelMap::modifyPixel (int index) {
}
}
// // get the last picked pixel index
// int i, j, k;
// image->getLastPixelPicked (&i, &j, &k);
//
// double x, y, z;
// image->getLastPointPickedImageCoords(&x, &y, &z);
// QVector3D lastPoint = QVector3D(x, y, z);
//
// // check validity
// if (i != -1 && j != -1 && k != -1 && (index >=0 && index< pixelIndexList->size())) {
// pixelIndexList->replace (index,lastPoint);
// }
}
//------------------ removePixel ----------------------------
......@@ -259,13 +191,7 @@ void PickedPixelMap::savePixelList (QString fileName) {
myFile << pixelValueList->value(idx) << endl;
}
// for (int i = 0; i < pixelIndexList->size(); i++) {
// coord2pix = convertCoordinatesToIndex(pixelIndexList->value(i).x(), pixelIndexList->value(i).y(), pixelIndexList->value(i).z());
// myFile << i << separator;
//
// myFile << coord2pix.x() << separator << coord2pix.y() << separator << coord2pix.z() << separator;
// myFile << (int)pixelIndexList->value(i).x() << separator << (int)pixelIndexList->value(i).y() << separator << (int)pixelIndexList->value(i).z() << endl;
// }
}
// close after
......@@ -338,38 +264,21 @@ ImageComponent* PickedPixelMap::getImage() {
return image;
}
//----------------- resetPixelList -------------------
void PickedPixelMap::resetPixelList() {
pixelIndexList->clear();
coordIndexList->clear();
realCoordList->clear();
pixelValueList->clear();
// // Empty the list if it is not already empty
// if ((pixelIndexList != NULL) && !(pixelIndexList->isEmpty())) {
// pixelIndexList->erase(pixelIndexList->begin(), pixelIndexList->end());
// }
//
// if (pixelIndexList == NULL)
// pixelIndexList = new QList<QVector3D>();
}
//----------------- changePixelIndexList -------------------
void PickedPixelMap::changePixelIndexList(QList<QVector3D>* liste) {
resetPixelList();
// for (int i = 0; i < liste->size(); i++) {
// QVector3D index = convertIndexToCoordinates(liste->at(i).x(),
// liste->at(i).y(),
// liste->at(i).z());
// pixelIndexList->append(index);
// }
//
}
//----------------- changePixelIndexListFromRealCoordinates -------------------
void PickedPixelMap::changePixelIndexListFromRealCoordinates(QList<QVector3D>* listeOfRealCoords) {
resetPixelList();
// for (int i = 0; i < listeOfRealCoords->size(); i++) {
// pixelIndexList->append(listeOfRealCoords->at(i));
// }
}
......@@ -101,37 +101,8 @@ public:
/// Empties the pixel list.
void resetPixelList();
// TODO CAMITK_DEPRECATED. This section list all the methods marked as deprecated. They are to be removed in CamiTK 4.0
/** Deprecated.
/// Change pixel list (copy the one given in parameters)
*/
void changePixelIndexList(QList<QVector3D>* liste);
// TODO CAMITK_DEPRECATED. This section list all the methods marked as deprecated. They are to be removed in CamiTK 4.0
/** Deprecated.
/// Change pixel list from a list of real coordinates
*/
void changePixelIndexListFromRealCoordinates(QList<QVector3D>* listeOfRealCoords);
private:
// No more conversion in this class. Conversions are asked to ImageComponent while picking...
// /** conversion pixel index to coordinates
// * @param i the first index pixel to retrieve x in coordinate
// * @param j the second index pixel to retrieve y in coordinate
// * @param k the third index pixel to retrieve z in coordinate
// */
// QVector3D convertIndexToCoordinates (int i, int j, int k);
//
// /** conversion pixel index to coordinates
// * @param x
// * @param y
// * @param z
// */
// QVector3D convertCoordinatesToIndex (double x, double y, double z);
/// this is a list of pixels (as i,j,k indexes in the 3 directions)
QList<QVector3D>* pixelIndexList;
......
......@@ -69,7 +69,6 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
#obsolete SHOW_DIRECTORIES = NO
SHOW_FILES = YES
SHOW_NAMESPACES = NO
FILE_VERSION_FILTER =
......@@ -142,7 +141,6 @@ HTML_COLORSTYLE_HUE = 0
HTML_COLORSTYLE_SAT = 120
HTML_COLORSTYLE_GAMMA = 100
HTML_TIMESTAMP = NO
#obsolete HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = YES
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
......@@ -169,7 +167,6 @@ ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
#obsolete USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
......
......@@ -285,17 +285,7 @@ macro(camitk_application)
endif()
endforeach()
endif()
# BACKWARD COMPATIBILITY
# NEEDS_TOOLS option
# TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
# check deprecated (and warn)
# TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
if(${APPLICATION_NAME_CMAKE}_NEEDS_TOOL)
message(WARNING "Warning: ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt: camitk_application macro option NEEDS_TOOL is deprecated, please use NEEDS_CEP_LIBRARIES instead..")
set(CEP_LIBRARIES ${CEP_LIBRARIES} ${${APPLICATION_NAME_CMAKE}_NEEDS_TOOL})
endif()
#########################################################################
......
......@@ -387,14 +387,6 @@ macro(camitk_extension)
endforeach()
endif()
# BACKWARD COMPATIBILITY
# NEEDS_TOOLS option
# TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
if(${EXTENSION_NAME_CMAKE}_NEEDS_TOOL)
message(WARNING "Warning: ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt: camitk_extension macro option NEEDS_TOOL is deprecated, please use NEEDS_CEP_LIBRARIES instead..")
set(${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES ${${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES} ${${EXTENSION_NAME_CMAKE}_NEEDS_TOOL})
endif()
#########################################################################
......@@ -958,20 +950,5 @@ macro(camitk_extension)
endmacro()
# Old macro to configure a new action to the framework
# Use camitk_extension macro instead
# TODO CAMITK_DEPRECATED. This macro is marked as deprecated. It is to be removed in CamiTK 4.0
macro(action_extension)
message(WARNING "Deprecated macro action_extension detected : please use camitk_extension(ACTION_EXTENSION ...) instead.")
camitk_extension(ACTION_EXTENSION ${ARGN})
endmacro()
# Old macro to configure a new component to the framework
# Use camitk_extension macro instead
# TODO CAMITK_DEPRECATED. This macro is marked as deprecated. It is to be removed in CamiTK 4.0
macro(component_extension)
message(WARNING "Deprecated macro component_extension detected : please use camitk_extension(COMPONENT_EXTENSION ...) instead.")
camitk_extension(COMPONENT_EXTENSION ${ARGN})
endmacro()
# TODO write a viewer_extension macro in CamiTK
......@@ -670,13 +670,3 @@ macro(camitk_library)
endif()
endmacro()
# Old macro to configure a tool
# Use camitk_library macro instead
# TODO CAMITK_DEPRECATED. This macro is marked as deprecated. It is to be removed in CamiTK 4.0
macro(camitk_tool)
message(WARNING "Warning: ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt: camitk_tool macro is deprecated, please usecamitk_library(...) instead (use the same parameters).")
# string(REPLACE "NEEDS_TOOL" "NEEDS_CEP_LIBRARIES" OBSOLETE_ARGN ${ARGN})
# message(STATUS "**************************************** ${ARGN} ===>>> ${OBSOLETE_ARGN} ")
camitk_library(${OBSOLETE_ARGN})
endmacro()
......@@ -185,10 +185,8 @@ const QString Core::getConfig() {
foreach(ActionExtension * ae, allActions) {
QStringList actionNames;
for (int i = 0; i < ae->getActions().size(); i++) {
actionNames << ae->getActions().at(i)->getName(); // + ": " + a->getDescription();
}
installationDirectory = ExtensionManager::getInstallationString(ExtensionManager::getActionExtensions().key(ae));
installationDirectory = ExtensionManager::getInstallationString(ae->getLocation());
actions << " - " + ae->getName() + " " + installationDirectory + ": " + QString::number(ae->getActions().size()) + " actions (" + actionNames.join(", ") + ")"; //+ ae->getDescription();
extensionCount++;
extensionUnitCount += ae->getActions().size();
......@@ -352,45 +350,4 @@ const bool Core::isDebugBuild() {
}
// ----------------------------------------------------------------
//
// OBSOLETE PUBLIC METHODS
//
// TODO CAMITK_DEPRECATED. This section list all the methods marked as deprecated.
// They are to be removed in CamiTK 4.0
// ----------------------------------------------------------------
// ------------- getComponentDir (static) -----------------
//TODO remove in CamiTK 4.0 CAMITK_DEPRECATED
const QString Core::getComponentDir() {
QDir appDir(getGlobalInstallDir());
appDir.cd("lib/" + QString(Core::shortVersion) + "/components");
return appDir.canonicalPath().toUtf8();
}
// ------------- getActionDir (static) -----------------
//TODO remove in CamiTK 4.0 CAMITK_DEPRECATED
const QString Core::getActionDir() {
QDir appDir(getGlobalInstallDir());
appDir.cd("lib/" + QString(Core::shortVersion) + "/actions");
return appDir.canonicalPath().toUtf8();
}
// ------------- getModuleDir (static) -----------------
//TODO remove in CamiTK 4.0 CAMITK_DEPRECATED
const QString Core::getModuleDir(const QString& subpath) {
QDir appDir(getGlobalInstallDir());
appDir.cd("lib/" + QString(Core::shortVersion) + "/" + subpath);
return appDir.canonicalPath().toUtf8();
}
// ------------- getLibDir (static) -----------------
//TODO remove in CamiTK 4.0 CAMITK_DEPRECATED
const QString Core::getCoreLibDir() {
return getGlobalInstallDir();
}
}
......@@ -133,33 +133,6 @@ public:
static const char* debugPostfix;
///@}
///@cond
// TODO CAMITK_DEPRECATED. This section list all the methods marked as deprecated. They are to be removed in CamiTK 4.0
/** Deprecated.
* get the camitk component extension directory name
* @return a null QString, checkable with isNull(), if no component dir found
*/
static const QString getComponentDir();
/** Deprecated.
* get the camitk action directory name
* @return a null QString, checkable with isNull(), if no action dir found
*/
static const QString getActionDir();
/** Deprecated.
* get the camitk module extension directory name
* @param subpath name of the module type (and subdirectory) to get (this simplifies getting the subdir name on plateform with hasBuildTypeDirectory()
* @return a null QString, checkable with isNull(), if no module dir found
*/
static const QString getModuleDir(const QString& subpath = QString());
/** Deprecated.
* get the camitk core lib directory name (where the camitkcore dll/shared/dynamic lib is)
*/
static const QString getCoreLibDir();
///@endcond
};
}
......
......@@ -279,7 +279,10 @@ QMap< QString, ComponentExtension* >& ExtensionManager::getComponentExtensionM
return componentExtensionMap;
}
// -------------------- getDataDirectoryComponentExtension --------------------
ComponentExtension* ExtensionManager::getDataDirectoryComponentExtension(QString pluginName) {
return getDataDirectoryComponentExtensionMap().value(pluginName);
}
// -------------------- getDataDirectoryComponentExtensionMap --------------------
QMap< QString, ComponentExtension* >& ExtensionManager::getDataDirectoryComponentExtensionMap() {
......@@ -289,7 +292,7 @@ QMap< QString, ComponentExtension* >& ExtensionManager::getDataDirectoryComponen
}
// -------------------- getComponentExtension --------------------
const ComponentExtension* ExtensionManager::getComponentExtension(QString extOrName) {
ComponentExtension* ExtensionManager::getComponentExtension(QString extOrName) {
ComponentExtension* cp = getComponentExtensionMap().value(extOrName);
if (!cp) {
......@@ -312,11 +315,6 @@ const ComponentExtension* ExtensionManager::getComponentExtension(QString extOrN
return cp;
}
// -------------------- getComponentExtensions --------------------
const QMap<QString, ComponentExtension*>& ExtensionManager::getComponentExtensions() {
return getComponentExtensionMap();
}
// -------------------- getComponentExtensionsList --------------------
const QList< ComponentExtension* > ExtensionManager::getComponentExtensionsList() {
QList< ComponentExtension* > sortedList = getComponentExtensionMap().values().toSet().toList(); // to remove duplicates
......@@ -325,11 +323,6 @@ const QList< ComponentExtension* > ExtensionManager::getComponentExtensionsList(
return sortedList;
}
// -------------------- getDataDirectoryComponents --------------------
const QMap<QString, ComponentExtension*>& ExtensionManager::getDataDirectoryComponents() {
return getDataDirectoryComponentExtensionMap();
}
// -------------------- getDataDirectoryComponentsList --------------------
const QList< ComponentExtension* > ExtensionManager::getDataDirectoryComponentsList() {
QList< ComponentExtension* > sortedList = getDataDirectoryComponentExtensionMap().values().toSet().toList(); // to remove duplicates
......@@ -340,12 +333,12 @@ const QList< ComponentExtension* > ExtensionManager::getDataDirectoryComponentsL
// -------------------- getFileExtensions --------------------
QStringList ExtensionManager::getFileExtensions() {
return ExtensionManager::getComponentExtensions().keys();
return ExtensionManager::getComponentExtensionMap().keys();
}
// -------------------- getDataDirectoryExtNames --------------------
QStringList ExtensionManager::getDataDirectoryExtNames() {
return ExtensionManager::getDataDirectoryComponents().keys();
return ExtensionManager::getDataDirectoryComponentExtensionMap().keys();
}
......@@ -356,11 +349,6 @@ QMap<QString, ActionExtension*>& ExtensionManager::getActionExtensionMap() {
return actionExtensionMap;
}
// -------------------- getActionExtensions --------------------
const QMap< QString, ActionExtension* >& ExtensionManager::getActionExtensions() {
return getActionExtensionMap();
}
// -------------------- getActionExtensionsList --------------------
const QList< ActionExtension* > ExtensionManager::getActionExtensionsList() {
QList< ActionExtension* > sortedList = getActionExtensionMap().values().toSet().toList(); // to remove duplicates
......@@ -369,6 +357,11 @@ const QList< ActionExtension* > ExtensionManager::getActionExtensionsList() {
return sortedList;
}
// -------------------- getActionExtension --------------------
ActionExtension* ExtensionManager::getActionExtension(QString file) {
return getActionExtensionMap().value(file);
}
// -------------------- unloadAllActionExtensions --------------------
void ExtensionManager::unloadAllActionExtensions() {
QList<QString> allExtensions = getActionExtensionMap().keys();
......@@ -619,44 +612,6 @@ bool ExtensionManager::actionExtensionLessThan(ActionExtension* left, ActionExte
return left->getName() < right->getName();
}
// ----------------------------------------------------------------
//
// OBSOLETE PUBLIC METHODS
//
// TODO CAMITK_DEPRECATED. This section list all the methods marked as deprecated.
// They are to be removed in CamiTK 4.0
// ----------------------------------------------------------------
// -------------------- loadComponentExtension --------------------
bool ExtensionManager::loadComponentExtension(QString fileName) {
return loadExtension(COMPONENT, fileName);
}
// -------------------- loadActionExtension --------------------
bool ExtensionManager::loadActionExtension(QString fileName) {
return loadExtension(ACTION, fileName);
}
// -------------------- autoloadComponentExtensions --------------------
void ExtensionManager::autoloadComponentExtensions() {
autoload(COMPONENT);
}
// -------------------- autoloadActionExtensions --------------------
void ExtensionManager::autoloadActionExtensions() {
autoload(ACTION);
}
}
......@@ -97,15 +97,15 @@ public:
*/
static bool loadExtension(ExtensionType type, QString file);
/** Returns a three char string that corresponds to the installation directory of a given extension.
*
* It works for all type of extension.
/** Returns a three char string that corresponds to the installation directory of a given shared library.
*