diff --git a/AUTHORS b/AUTHORS index 613140c0..94cee900 100644 --- a/AUTHORS +++ b/AUTHORS @@ -8,8 +8,9 @@ Andreas Suter Project leader and main developer Bastian M. Wojek - msr2data, initial testing, full initial documentation, BMWlibs - + msr2data; initial testing; full initial documentation; BMWlibs; + unified building process on Linux, MacOSX and Windows (Cygwin) + through autotools #--------------------------------------------------------------------- # this is the end ... diff --git a/src/external/TFitPofB-lib/classes/TTrimSPDataHandler.cpp b/src/external/TFitPofB-lib/classes/TTrimSPDataHandler.cpp index d3aabc44..637ebcab 100644 --- a/src/external/TFitPofB-lib/classes/TTrimSPDataHandler.cpp +++ b/src/external/TFitPofB-lib/classes/TTrimSPDataHandler.cpp @@ -198,6 +198,20 @@ vector TTrimSPData::OrigDataNZ(double e) const { } +double TTrimSPData::DataDZ(double e) const { + + fEnergyIter = find(fEnergy.begin(), fEnergy.end(), e); + + if(fEnergyIter != fEnergy.end()) { + unsigned int i(fEnergyIter - fEnergy.begin()); + return fDZ[i]; + } + // default + cout << "TTrimSPData::DataDZ: No implantation profile available for the specified energy... The resolution will be zero!" << endl; + return 0.0; + +} + //--------------------- // Method returning fraction of muons implanted in the specified layer for a given energy[keV] // Parameters: Energy[keV], LayerNumber[1], Interfaces[nm] diff --git a/src/external/TFitPofB-lib/include/TTrimSPDataHandler.h b/src/external/TFitPofB-lib/include/TTrimSPDataHandler.h index 477526d9..e09682b5 100644 --- a/src/external/TFitPofB-lib/include/TTrimSPDataHandler.h +++ b/src/external/TFitPofB-lib/include/TTrimSPDataHandler.h @@ -59,6 +59,7 @@ public: vector DataZ(double) const; vector DataNZ(double) const; vector OrigDataNZ(double) const; + double DataDZ(double) const; void UseHighResolution(double); void WeightLayers(double, const vector&, const vector&) const; double LayerFraction(double, unsigned int, const vector&) const; diff --git a/src/external/libCalcMeanFieldsLEM/TCalcMeanFieldsLEM.cpp b/src/external/libCalcMeanFieldsLEM/TCalcMeanFieldsLEM.cpp index 46b2df54..c49ae500 100644 --- a/src/external/libCalcMeanFieldsLEM/TCalcMeanFieldsLEM.cpp +++ b/src/external/libCalcMeanFieldsLEM/TCalcMeanFieldsLEM.cpp @@ -68,9 +68,7 @@ TMeanFieldsForScHalfSpace::TMeanFieldsForScHalfSpace() { string rge_path(startupHandler->GetDataPath()); map energy_vec(startupHandler->GetEnergies()); - TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); - fImpProfile = x; - x = 0; + fImpProfile = new TTrimSPData(rge_path, energy_vec, startupHandler->GetDebug()); // clean up if (saxParser) { @@ -101,10 +99,10 @@ double TMeanFieldsForScHalfSpace::operator()(double E, const vector &par if (energyIter != energies.end()) { // implantation profile found - no interpolation needed return CalcMeanB(E, BofZ); } else { - if (E < *energies.begin()) - return CalcMeanB(*energies.begin(), BofZ); - if (E > *(energies.end()-1)) - return CalcMeanB(*(energies.end()-1), BofZ); + if (E < energies.front()) + return CalcMeanB(energies.front(), BofZ); + if (E > energies.back()) + return CalcMeanB(energies.back(), BofZ); energyIter = find_if(energies.begin(), energies.end(), bind2nd( greater(), E)); // cout << *(energyIter - 1) << " " << *(energyIter) << endl; @@ -127,13 +125,14 @@ double TMeanFieldsForScHalfSpace::CalcMeanB (double E, const TLondon1D_HS& BofZ) vector z(fImpProfile->DataZ(E)); vector nz(fImpProfile->DataNZ(E)); + double dz(fImpProfile->DataDZ(E)); // calculate mean field double meanB(0.); for (unsigned int i(0); iGetDataPath()); map energy_vec(startupHandler->GetEnergies()); - TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); - fImpProfile = x; - x = 0; + fImpProfile = new TTrimSPData(rge_path, energy_vec, startupHandler->GetDebug()); // clean up if (saxParser) { @@ -202,10 +199,10 @@ double TMeanFieldsForScSingleLayer::operator()(double E, const vector &p if (energyIter != energies.end()) { // implantation profile found - no interpolation needed return CalcMeanB(E, interfaces, weights, BofZ); } else { - if (E < *energies.begin()) - return CalcMeanB(*energies.begin(), interfaces, weights, BofZ); - if (E > *(energies.end()-1)) - return CalcMeanB(*(energies.end()-1), interfaces, weights, BofZ); + if (E < energies.front()) + return CalcMeanB(energies.front(), interfaces, weights, BofZ); + if (E > energies.back()) + return CalcMeanB(energies.back(), interfaces, weights, BofZ); energyIter = find_if(energies.begin(), energies.end(), bind2nd( greater(), E)); // cout << *(energyIter - 1) << " " << *(energyIter) << endl; @@ -227,13 +224,14 @@ double TMeanFieldsForScSingleLayer::CalcMeanB (double E, const vector& i vector z(fImpProfile->DataZ(E)); vector nz(fImpProfile->DataNZ(E)); + double dz(fImpProfile->DataDZ(E)); // calculate mean field double meanB(0.); for (unsigned int i(0); iGetDataPath()); map energy_vec(startupHandler->GetEnergies()); - TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); - fImpProfile = x; - x = 0; + fImpProfile = new TTrimSPData(rge_path, energy_vec, startupHandler->GetDebug()); // clean up if (saxParser) { @@ -306,10 +302,10 @@ double TMeanFieldsForScBilayer::operator()(double E, const vector &par_v if (energyIter != energies.end()) { // implantation profile found - no interpolation needed return CalcMeanB(E, interfaces, weights, BofZ); } else { - if (E < *energies.begin()) - return CalcMeanB(*energies.begin(), interfaces, weights, BofZ); - if (E > *(energies.end()-1)) - return CalcMeanB(*(energies.end()-1), interfaces, weights, BofZ); + if (E < energies.front()) + return CalcMeanB(energies.front(), interfaces, weights, BofZ); + if (E > energies.back()) + return CalcMeanB(energies.back(), interfaces, weights, BofZ); energyIter = find_if(energies.begin(), energies.end(), bind2nd( greater(), E)); // cout << *(energyIter - 1) << " " << *(energyIter) << endl; @@ -331,13 +327,14 @@ double TMeanFieldsForScBilayer::CalcMeanB (double E, const vector& inter vector z(fImpProfile->DataZ(E)); vector nz(fImpProfile->DataNZ(E)); + double dz(fImpProfile->DataDZ(E)); // calculate mean field double meanB(0.); for (unsigned int i(0); iGetDataPath()); map energy_vec(startupHandler->GetEnergies()); - TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); - fImpProfile = x; - x = 0; + fImpProfile = new TTrimSPData(rge_path, energy_vec, startupHandler->GetDebug()); // clean up if (saxParser) { @@ -412,10 +407,10 @@ double TMeanFieldsForScTrilayer::operator()(double E, const vector &par_ if (energyIter != energies.end()) { // implantation profile found - no interpolation needed return CalcMeanB(E, interfaces, weights, BofZ); } else { - if (E < *energies.begin()) - return CalcMeanB(*energies.begin(), interfaces, weights, BofZ); - if (E > *(energies.end()-1)) - return CalcMeanB(*(energies.end()-1), interfaces, weights, BofZ); + if (E < energies.front()) + return CalcMeanB(energies.front(), interfaces, weights, BofZ); + if (E > energies.back()) + return CalcMeanB(energies.back(), interfaces, weights, BofZ); energyIter = find_if(energies.begin(), energies.end(), bind2nd( greater(), E)); // cout << *(energyIter - 1) << " " << *(energyIter) << endl; @@ -437,13 +432,14 @@ double TMeanFieldsForScTrilayer::CalcMeanB (double E, const vector& inte vector z(fImpProfile->DataZ(E)); vector nz(fImpProfile->DataNZ(E)); + double dz(fImpProfile->DataDZ(E)); // calculate mean field double meanB(0.); for (unsigned int i(0); iGetDataPath()); map energy_vec(startupHandler->GetEnergies()); - TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); - fImpProfile = x; - x = 0; + fImpProfile = new TTrimSPData(rge_path, energy_vec, startupHandler->GetDebug()); // clean up if (saxParser) { @@ -518,10 +512,10 @@ double TMeanFieldsForScTrilayerWithInsulator::operator()(double E, const vector< if (energyIter != energies.end()) { // implantation profile found - no interpolation needed return CalcMeanB(E, interfaces, weights, BofZ); } else { - if (E < *energies.begin()) - return CalcMeanB(*energies.begin(), interfaces, weights, BofZ); - if (E > *(energies.end()-1)) - return CalcMeanB(*(energies.end()-1), interfaces, weights, BofZ); + if (E < energies.front()) + return CalcMeanB(energies.front(), interfaces, weights, BofZ); + if (E > energies.back()) + return CalcMeanB(energies.back(), interfaces, weights, BofZ); energyIter = find_if(energies.begin(), energies.end(), bind2nd( greater(), E)); // cout << *(energyIter - 1) << " " << *(energyIter) << endl; @@ -544,13 +538,14 @@ double TMeanFieldsForScTrilayerWithInsulator::CalcMeanB vector z(fImpProfile->DataZ(E)); vector nz(fImpProfile->DataNZ(E)); + double dz(fImpProfile->DataDZ(E)); // calculate mean field double meanB(0.); for (unsigned int i(0); i