120 this->axisErrToleranceDefault =
true;
150 this->
task = taskToPerform;
231 this->axisErrToleranceDefault =
true;
246 switch ( this->
task )
249 std::cerr << std::endl <<
"=====================" << std::endl <<
"!! ProSHADE ERROR !!" << std::endl <<
"=====================" << std::endl << std::flush;
250 std::cerr <<
"Error Code : " <<
"E000014" << std::endl << std::flush;
251 std::cerr <<
"ProSHADE version : " << __PROSHADE_VERSION__ << std::endl << std::flush;
252 std::cerr <<
"File : " <<
"ProSHADE.cpp" << std::endl << std::flush;
253 std::cerr <<
"Line : " << 97 << std::endl << std::flush;
254 std::cerr <<
"Function : " <<
"ProSHADE_settings (Task) constructor" << std::endl << std::flush;
255 std::cerr <<
"Message : " <<
"No task has been specified for task specific constructor." << std::endl << std::flush;
256 std::cerr <<
"Further information : " <<
"This ProSHADE_settings class constructor is intended to\n : set the internal variables to default value given a\n : particular taks. By supplying this task as NA, this beats\n : the purpose of the constructor. Please use the\n : non-argumental constructor if task is not yet known." << std::endl << std::endl << std::flush;
258 exit ( EXIT_FAILURE );
977 this->axisErrToleranceDefault = behav;
1080 proshade_double* hlpAxis =
new proshade_double [6];
1084 hlpAxis[0] = sym[0];
1085 hlpAxis[1] = sym[1];
1086 hlpAxis[2] = sym[2];
1087 hlpAxis[3] = sym[3];
1088 hlpAxis[4] = sym[4];
1089 hlpAxis[5] = sym[5];
1185 std::stringstream hlpSS;
1186 hlpSS <<
"The bandwidth was determined as: " << this->
maxBandwidth;
1195 std::stringstream hlpSS;
1196 hlpSS <<
"The bandwidth was determined as: " << this->
maxBandwidth;
1215 if (
static_cast<proshade_unsign
> ( std::ceil ( ( 360.0 / uncertainty ) / 2 ) ) % 2 == 0 )
1217 this->
maxBandwidth =
static_cast<proshade_unsign
> ( std::ceil ( ( 360.0 / uncertainty ) / 2.0 ) );
1221 this->
maxBandwidth =
static_cast<proshade_unsign
> ( std::ceil ( ( 360.0 / uncertainty ) / 2.0 ) ) + 1;
1225 std::stringstream hlpSS;
1226 hlpSS <<
"The bandwidth was determined from uncertainty " << uncertainty <<
" degrees as: " << this->
maxBandwidth;
1248 std::stringstream hlpSS;
1249 hlpSS <<
"The sphere distances were determined as " << this->
maxSphereDists <<
" Angstroms.";
1258 std::stringstream hlpSS;
1259 hlpSS <<
"The sphere distances were determined as " << this->
maxSphereDists <<
" Angstroms.";
1280 std::stringstream hlpSS;
1281 hlpSS <<
"The integration order was determined as " << this->
integOrder;
1290 std::stringstream hlpSS;
1291 hlpSS <<
"The integration order was determined as " << this->
integOrder;
1331 proshade_unsign maxDim = std::max ( theoXDim, std::max ( theoYDim, theoZDim ) );
1332 proshade_unsign minDim = std::min ( theoXDim, std::min ( theoYDim, theoZDim ) );
1333 proshade_unsign midDim = 0;
1334 if ( ( xDim < maxDim ) && ( xDim > minDim ) ) { midDim = theoXDim; }
1335 else if ( ( yDim < maxDim ) && ( yDim > minDim ) ) { midDim = theoYDim; }
1336 else { midDim = theoZDim; }
1338 proshade_unsign circ = ( maxDim ) + ( midDim );
1345 proshade_single maxDiag = std::sqrt ( std::pow (
static_cast<proshade_single
> ( maxDim ) * ( this->
requestedResolution / 2.0 ), 2.0 ) +
1346 std::pow (
static_cast<proshade_single
> ( midDim ) * ( this->
requestedResolution / 2.0 ), 2.0 ) );
1375 this->noStructures =
static_cast<proshade_unsign
> ( settings->
inputFiles.size() );
1376 this->verbose =
static_cast<proshade_signed
> ( settings->
verbose );
1382 switch ( settings->
task )
1385 throw ProSHADE_exception (
"No task has been specified.",
"E000001", __FILE__, __LINE__, __func__,
"ProSHADE requires to be told which particular functiona-\n : lity (task) is requested from it. In order to do so, the\n : command line arguments specifying task need to be used\n : (if used from command line), or the ProSHADE_settings\n : object needs to have the member variable \'Task\' set to\n : one of the following values: Distances, Symmetry,\n : OverlayMap or MapManip." );
1390 this->setSymmetryResults ( settings );
1410 std::cerr << std::endl <<
"=====================" << std::endl <<
"!! ProSHADE ERROR !!" << std::endl <<
"=====================" << std::endl << std::flush;
1411 std::cerr <<
"Error Code : " << err.get_errc() << std::endl << std::flush;
1412 std::cerr <<
"ProSHADE version : " << __PROSHADE_VERSION__ << std::endl << std::flush;
1413 std::cerr <<
"File : " << err.get_file() << std::endl << std::flush;
1414 std::cerr <<
"Line : " << err.get_line() << std::endl << std::flush;
1415 std::cerr <<
"Function : " << err.get_func() << std::endl << std::flush;
1416 std::cerr <<
"Message : " << err.what() << std::endl << std::flush;
1417 std::cerr <<
"Further information : " << err.get_info() << std::endl << std::endl << std::flush;
1421 exit ( EXIT_FAILURE );
1427 std::cerr << std::endl <<
"=====================" << std::endl <<
"!! ProSHADE ERROR !!" << std::endl <<
"=====================" << std::endl << std::flush;
1430 #if __cplusplus >= 201103L
1431 std::exception_ptr exc = std::current_exception();
1436 std::rethrow_exception ( exc );
1439 catch (
const std::exception& e )
1441 std::cerr <<
"Caught unknown exception with following information: " << e.what() << std::endl << std::flush;
1444 std::cerr <<
"Unknown error with no further explanation available. Please contact the author for help." << std::endl << std::flush;
1446 std::cerr <<
"Terminating..." << std::endl << std::endl << std::flush;
1450 exit ( EXIT_FAILURE );
1467 if ( this->originalBounds.size() > 0 ) {
for ( proshade_unsign iter = 0; iter < static_cast<proshade_unsign> ( this->originalBounds.size() ); iter++ ) {
delete[] this->originalBounds.at(iter); } }
1468 if ( this->reboxedBounds.size() > 0 ) {
for ( proshade_unsign iter = 0; iter < static_cast<proshade_unsign> ( this->reboxedBounds.size() ); iter++ ) {
delete[] this->reboxedBounds.at(iter); } }
1469 if ( this->manipulatedMaps.size() > 0 ) {
for ( proshade_unsign iter = 0; iter < static_cast<proshade_unsign> ( this->manipulatedMaps.size() ); iter++ ) {
delete[] this->manipulatedMaps.at(iter); } }
1472 this->enLevs.clear ( );
1473 this->trSigm.clear ( );
1474 this->rotFun.clear ( );
1477 if ( this->RecomSymAxes.size() > 0 )
1479 for ( proshade_unsign iter = 0; iter < static_cast<proshade_unsign> ( this->RecomSymAxes.size() ); iter++ )
1481 delete[] this->RecomSymAxes.at(iter);
1483 this->RecomSymAxes.clear ( );
1497 return ( this->symRecommType );
1507 return ( this->symRecommFold );
1516 void ProSHADE_run::setRecommendedSymmetry ( std::string val )
1519 this->symRecommType = val;
1533 void ProSHADE_run::setRecommendedFold ( proshade_unsign val )
1536 this->symRecommFold = val;
1550 void ProSHADE_run::setRecommendedAxis ( proshade_double* sym )
1589 const struct option_port longopts[] =
1591 {
"version", no_argument, NULL,
'v' },
1592 {
"help", no_argument, NULL,
'h' },
1593 {
"verbose", required_argument, NULL,
'!' },
1594 {
"distances", no_argument, NULL,
'D' },
1595 {
"mapManip", no_argument, NULL,
'M' },
1596 {
"symmetry", no_argument, NULL,
'S' },
1597 {
"overlay", no_argument, NULL,
'O' },
1598 {
"file", required_argument, NULL,
'f' },
1599 {
"forceSpgP1", no_argument, NULL,
'u' },
1600 {
"removeWaters", no_argument, NULL,
'w' },
1601 {
"firstModel", no_argument, NULL,
'x' },
1602 {
"resolution", required_argument, NULL,
'r' },
1603 {
"bandwidth", required_argument, NULL,
'b' },
1604 {
"sphereDists", required_argument, NULL,
's' },
1605 {
"extraSpace", required_argument, NULL,
'e' },
1606 {
"integOrder", required_argument, NULL,
'i' },
1607 {
"taylorCap", required_argument, NULL,
't' },
1608 {
"invertMap", no_argument, NULL,
'@' },
1609 {
"normalise", no_argument, NULL,
'#' },
1610 {
"mask", no_argument, NULL,
'$' },
1611 {
"saveMask", no_argument, NULL,
'%' },
1612 {
"maskFile", required_argument, NULL,
'^' },
1613 {
"maskBlurring", required_argument, NULL,
'&' },
1614 {
"maskThreshold", required_argument, NULL,
'*' },
1615 {
"mapReboxing", no_argument, NULL,
'R' },
1616 {
"boundsSpace", required_argument, NULL,
'(' },
1617 {
"boundsThreshold", required_argument, NULL,
')' },
1618 {
"sameBoundaries", no_argument, NULL,
'-' },
1619 {
"reBoxedFilename", required_argument, NULL,
'g' },
1620 {
"pdbTempFact", required_argument, NULL,
'd' },
1621 {
"center", no_argument, NULL,
'c' },
1622 {
"changeMapResol", no_argument, NULL,
'j' },
1623 {
"changeMapTriLin", no_argument, NULL,
'a' },
1624 {
"noPhase", no_argument, NULL,
'p' },
1625 {
"progressive", no_argument, NULL,
'k' },
1626 {
"noEnL", no_argument, NULL,
'l' },
1627 {
"noTrS", no_argument, NULL,
'm' },
1628 {
"noFRF", no_argument, NULL,
'n' },
1629 {
"EnLWeight", required_argument, NULL,
'_' },
1630 {
"peakNeigh", required_argument, NULL,
'=' },
1631 {
"peakThres", required_argument, NULL,
'+' },
1632 {
"missAxThres", required_argument, NULL,
'[' },
1633 {
"sameAxComp", required_argument, NULL,
']' },
1634 {
"axisComBeh", no_argument, NULL,
'q' },
1635 {
"bicubSearch", no_argument, NULL,
'A' },
1636 {
"maxSymPrime", required_argument, NULL,
'B' },
1637 {
"minPeakHeight", required_argument, NULL,
'o' },
1638 {
"reqSym", required_argument, NULL,
'{' },
1639 {
"overlayFile", required_argument, NULL,
'}' },
1640 {
"overlayJSONFile", required_argument, NULL,
'y' },
1641 {
"angUncertain", required_argument, NULL,
';' },
1642 {
"usePeaksInRotFun",no_argument, NULL,
'z' },
1643 { NULL, 0, NULL, 0 }
1647 const char*
const shortopts =
"AaB:b:cd:De:f:g:hi:jklmMno:Opqr:Rs:St:uvwxy:z!:@#$%^:&:*:(:):-_:=:+:[:]:{:}:;:";
1653 int opt = getopt_long_port ( argc, argv, shortopts, longopts, NULL );
1668 exit ( EXIT_SUCCESS );
1675 exit ( EXIT_SUCCESS );
1681 this->
setVerbosity (
static_cast<proshade_single
> ( atoi ( optarg ) ) );
1688 this->
task = Distances;
1695 this->
task = MapManip;
1702 this->
task = Symmetry;
1716 this->
task = OverlayMap;
1751 this->
setResolution (
static_cast<proshade_single
> ( atof ( optarg ) ) );
1758 this->
setBandwidth (
static_cast<proshade_unsign
> ( atoi ( optarg ) ) );
1765 this->
setExtraSpace (
static_cast<proshade_single
> ( atof ( optarg ) ) );
1836 this->
setMaskIQR (
static_cast<proshade_single
> ( atof ( optarg ) ) );
1851 this->
setBoundsSpace (
static_cast<proshade_single
> ( atof ( optarg ) ) );
1879 this->
setPDBBFactor (
static_cast<proshade_single
> ( atof ( optarg ) ) );
1998 this->
minSymPeak =
static_cast<proshade_double
> ( atof ( optarg ) );
2005 std::string input =
static_cast<std::string
> ( optarg );
2007 if ( input.at(0) ==
'C' )
2011 std::string numHlp ( input.begin()+1, input.end() );
2012 if ( numHlp.length() > 0 ) { this->
setRequestedFold ( atoi ( numHlp.c_str() ) ); }
2013 else { std::cerr <<
"!!! ProSHADE ERROR !!! The input argument requests search for Cyclic/Dihedral symmetry, but does not specify the requested fold." << std::endl; exit ( EXIT_FAILURE ); }
2017 if ( input.at(0) ==
'D' )
2021 std::string numHlp ( input.begin()+1, input.end() );
2022 if ( numHlp.length() > 0 ) { this->
setRequestedFold ( atoi ( numHlp.c_str() ) ); }
2023 else { std::cerr <<
"!!! ProSHADE ERROR !!! The input argument requests search for Cyclic/Dihedral symmetry, but does not specify the requested fold." << std::endl; exit ( EXIT_FAILURE ); }
2027 if ( input.at(0) ==
'T' )
2033 if ( input.at(0) ==
'O' )
2039 if ( input.at(0) ==
'I' )
2045 std::cerr <<
"!!! ProSHADE ERROR !!! Failed to parse the requested symmetry type. Allowed types are C, D, T, O and I, with C and D requiring to be followed by a number specifying the fold." << std::endl; exit ( EXIT_FAILURE );
2089 std::cout <<
"!!! ProSHADE ERROR !!! Unrecognised short option -" <<
static_cast<char> ( optopt ) <<
" . Please use -h for help on the command line options." << std::endl;
2093 std::cout <<
"!!! ProSHADE ERROR !!! Unrecognised long option " << argv[
static_cast<int> (optind)-1] <<
" . Please use -h for help on the command line options." << std::endl;
2097 exit ( EXIT_SUCCESS );
2104 exit ( EXIT_SUCCESS );
2121 std::stringstream strstr;
2122 strstr.str(std::string());
2123 if ( this->
task == NA ) { strstr <<
"NA"; }
2124 if ( this->
task == Distances ) { strstr <<
"DISTANCES COMPUTATION"; }
2125 if ( this->
task == MapManip ) { strstr <<
"MAP MANIPULATION"; }
2126 if ( this->
task == Symmetry ) { strstr <<
"SYMMETRY DETECTION"; }
2127 if ( this->
task == OverlayMap ) { strstr <<
"MAP OVERLAY"; }
2128 printf (
"Task to perform : %37s\n", strstr.str().c_str() );
2130 for ( proshade_unsign iter = 0; iter < static_cast<proshade_unsign> ( this->
inputFiles.size() ); iter++ )
2132 strstr.str(std::string());
2134 printf (
"File(s) to process : %37s\n", strstr.str().c_str() );
2137 strstr.str(std::string());
2139 printf (
"Verbosity : %37s\n", strstr.str().c_str() );
2141 strstr.str(std::string());
2143 printf (
"Resolution (comp) : %37s\n", strstr.str().c_str() );
2145 strstr.str(std::string());
2147 printf (
"Bandwidth : %37s\n", strstr.str().c_str() );
2149 strstr.str(std::string());
2151 printf (
"Sphere distances : %37s\n", strstr.str().c_str() );
2153 strstr.str(std::string());
2155 printf (
"Extra space : %37s\n", strstr.str().c_str() );
2157 strstr.str(std::string());
2158 if ( this->
forceP1 ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2159 printf (
"Force P1 spacegroup : %37s\n", strstr.str().c_str() );
2161 strstr.str(std::string());
2162 if ( this->
removeWaters ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2163 printf (
"Waters removed : %37s\n", strstr.str().c_str() );
2165 strstr.str(std::string());
2166 if ( this->
firstModelOnly ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2167 printf (
"Only 1st model : %37s\n", strstr.str().c_str() );
2169 strstr.str(std::string());
2171 printf (
"Integration order : %37s\n", strstr.str().c_str() );
2173 strstr.str(std::string());
2175 printf (
"Taylor series cap : %37s\n", strstr.str().c_str() );
2177 strstr.str(std::string());
2179 printf (
"PDB B-factor const : %37s\n", strstr.str().c_str() );
2181 strstr.str(std::string());
2182 if ( this->
reBoxMap ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2183 printf (
"Map re-boxing : %37s\n", strstr.str().c_str() );
2185 strstr.str(std::string());
2186 if ( this->
invertMap ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2187 printf (
"Map inversion : %37s\n", strstr.str().c_str() );
2189 strstr.str(std::string());
2190 if ( this->
normaliseMap ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2191 printf (
"Map normalisation : %37s\n", strstr.str().c_str() );
2193 strstr.str(std::string());
2194 if ( this->
maskMap ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2195 printf (
"Map masking : %37s\n", strstr.str().c_str() );
2197 strstr.str(std::string());
2198 if ( this->
saveMask ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2199 printf (
"Saving mask : %37s\n", strstr.str().c_str() );
2201 strstr.str(std::string());
2203 printf (
"Map mask filename : %37s\n", strstr.str().c_str() );
2205 strstr.str(std::string());
2207 printf (
"Map blurring : %37s\n", strstr.str().c_str() );
2209 strstr.str(std::string());
2211 printf (
"Masking threshold : %37s\n", strstr.str().c_str() );
2213 strstr.str(std::string());
2215 printf (
"Bounds extra space : %37s\n", strstr.str().c_str() );
2217 strstr.str(std::string());
2219 printf (
"Bounds similarity : %37s\n", strstr.str().c_str() );
2221 strstr.str(std::string());
2222 if ( this->
useSameBounds ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2223 printf (
"Same boundaries : %37s\n", strstr.str().c_str() );
2225 strstr.str(std::string());
2227 printf (
"Re-boxed filename : %37s\n", strstr.str().c_str() );
2229 strstr.str(std::string());
2230 if ( this->
moveToCOM ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2231 printf (
"Map COM centering : %37s\n", strstr.str().c_str() );
2233 strstr.str(std::string());
2235 printf (
"Change map resol : %37s\n", strstr.str().c_str() );
2237 strstr.str(std::string());
2239 printf (
"Change map tri-lin : %37s\n", strstr.str().c_str() );
2241 strstr.str(std::string());
2242 if ( this->
usePhase ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2243 printf (
"Use phase info : %37s\n", strstr.str().c_str() );
2245 strstr.str(std::string());
2247 printf (
"Progressive spheres : %37s\n", strstr.str().c_str() );
2249 strstr.str(std::string());
2251 printf (
"Energy lvl desc : %37s\n", strstr.str().c_str() );
2253 strstr.str(std::string());
2255 printf (
"Energy lvl weight : %37s\n", strstr.str().c_str() );
2257 strstr.str(std::string());
2259 printf (
"Tr sigma desc : %37s\n", strstr.str().c_str() );
2261 strstr.str(std::string());
2263 printf (
"Full RF desc : %37s\n", strstr.str().c_str() );
2265 strstr.str(std::string());
2267 printf (
"Neightbours to peak : %37s\n", strstr.str().c_str() );
2269 strstr.str(std::string());
2271 printf (
"Peak IQR threshold : %37s\n", strstr.str().c_str() );
2273 strstr.str(std::string());
2275 printf (
"Missing ax. thres : %37s\n", strstr.str().c_str() );
2277 strstr.str(std::string());
2279 printf (
"Min. sym. peak size : %37s\n", strstr.str().c_str() );
2281 strstr.str(std::string());
2283 printf (
"Same ax. threshold : %37s\n", strstr.str().c_str() );
2285 strstr.str(std::string());
2286 if ( this->axisErrToleranceDefault ) { strstr <<
"TRUE"; }
else { strstr <<
"FALSE"; }
2287 printf (
"Same ax. thre. decr.: %37s\n", strstr.str().c_str() );
2289 strstr.str(std::string());
2291 printf (
"Requested symm. : %37s\n", strstr.str().c_str() );
2293 strstr.str(std::string());
2295 printf (
"Overlay file : %37s\n", strstr.str().c_str() );
2297 strstr.str(std::string());
2299 printf (
"JSON overlay file : %37s\n", strstr.str().c_str() );
2313 return ( this->enLevs );
2323 return ( this->trSigm );
2333 return ( this->rotFun );
2343 return ( this->noStructures );
2353 return ( this->verbose );
2363 return (
static_cast<proshade_unsign
> ( this->RecomSymAxes.size() ) );
2373 return (
static_cast<proshade_unsign
> ( this->RecomSymAxes.size() ) );
2384 if (
static_cast<proshade_unsign
> ( this->RecomSymAxes.size() ) <= axisNo )
2387 return ( std::vector< std::string > ( ) );
2391 std::vector< std::string > ret;
2394 std::stringstream ssHlp;
2395 ssHlp << this->RecomSymAxes.at(axisNo)[0];
2399 ssHlp << this->RecomSymAxes.at(axisNo)[1];
2403 ssHlp << this->RecomSymAxes.at(axisNo)[2];
2407 ssHlp << this->RecomSymAxes.at(axisNo)[3];
2411 ssHlp << this->RecomSymAxes.at(axisNo)[4];
2415 ssHlp << this->RecomSymAxes.at(axisNo)[5];
2431 return ( this->allCSymAxes );
2442 if ( noStructures <= strNo )
2445 return ( std::vector< proshade_signed > ( ) );
2449 std::vector< proshade_signed > ret;
2470 if ( noStructures <= strNo )
2473 return ( std::vector< proshade_signed > ( ) );
2477 std::vector< proshade_signed > ret;
2500 return ( this->manipulatedMaps.at(strNo)[mapIndex] );
2521 for ( proshade_unsign iter = 0; iter < static_cast<proshade_unsign> ( len ); iter++)
2523 reboxMap[iter] =
static_cast<double> ( run->
getMapValue ( strNo, iter ) );
2538 if ( this->eulerAngles.size() != 3 )
2540 ProSHADE_internal_messages::printWarningMessage ( this->verbose,
"!!! ProSHADE WARNING !!! Requested rotation/translation values for Overlay functionality without having successfully computed it. Please check the correct task was used and no other warnings/errors were obtained.",
"WO00042" );
2541 return ( std::vector< proshade_double > ( ) );
2545 return ( this->eulerAngles );
2556 if ( this->eulerAngles.size() != 3 )
2558 ProSHADE_internal_messages::printWarningMessage ( this->verbose,
"!!! ProSHADE WARNING !!! Requested rotation/translation values for Overlay functionality without having successfully computed it. Please check the correct task was used and no other warnings/errors were obtained.",
"WO00042" );
2559 return ( std::vector< proshade_double > ( ) );
2563 proshade_double* rotMat =
new proshade_double[9];
2568 std::vector< proshade_double > ret;
2586 if ( this->coordRotationCentre.size() != 3 )
2588 ProSHADE_internal_messages::printWarningMessage ( this->verbose,
"!!! ProSHADE WARNING !!! Requested rotation/translation values for Overlay functionality without having successfully computed it. Please check the correct task was used and no other warnings/errors were obtained.",
"WO00042" );
2589 return ( std::vector< proshade_double > ( ) );
2593 std::vector < proshade_double > ret;
2610 if ( this->overlayTranslation.size() != 3 )
2612 ProSHADE_internal_messages::printWarningMessage ( this->verbose,
"!!! ProSHADE WARNING !!! Requested rotation/translation values for Overlay functionality without having successfully computed it. Please check the correct task was used and no other warnings/errors were obtained.",
"WO00042" );
2613 return ( std::vector< proshade_double > ( ) );
2617 return ( this->overlayTranslation );