Go to the documentation of this file.00001
00002
00003
00004
00005
00006 #include <cassert>
00007 #include <string>
00008 #include <numeric>
00009 #include <algorithm>
00010 #include <cmath>
00011
00012 #include <stdair/basic/BasConst_Inventory.hpp>
00013 #include <stdair/bom/BomManager.hpp>
00014 #include <stdair/bom/SegmentCabin.hpp>
00015 #include <stdair/service/Logger.hpp>
00016
00017 #include <rmol/basic/BasConst_General.hpp>
00018 #include <rmol/bom/Utilities.hpp>
00019 #include <rmol/bom/GuillotineBlockHelper.hpp>
00020
00021 namespace RMOL {
00022
00023 void Utilities::
00024 computeDistributionParameters (const UnconstrainedDemandVector_T& iVector,
00025 double& ioMean, double& ioStdDev) {
00026 ioMean = 0.0; ioStdDev = 0.0;
00027 unsigned int lNbOfSamples = iVector.size();
00028 assert (lNbOfSamples > 1);
00029
00030
00031 for (UnconstrainedDemandVector_T::const_iterator itSample = iVector.begin();
00032 itSample != iVector.end(); ++itSample) {
00033
00034 ioMean += *itSample;
00035 }
00036 ioMean /= lNbOfSamples;
00037
00038
00039 for (UnconstrainedDemandVector_T::const_iterator itSample = iVector.begin();
00040 itSample != iVector.end(); ++itSample) {
00041 const double& lSample = *itSample;
00042 ioStdDev += ((lSample - ioMean) * (lSample - ioMean));
00043 }
00044 ioStdDev /= (lNbOfSamples - 1);
00045 ioStdDev = sqrt (ioStdDev);
00046
00047
00048 if (ioStdDev == 0) {
00049 ioStdDev = 0.1;
00050 }
00051 }
00052
00053
00054 stdair::DCPList_T Utilities::
00055 buildRemainingDCPList (const stdair::DTD_T& iDTD) {
00056 stdair::DCPList_T oDCPList;
00057
00058 const stdair::DCPList_T lWholeDCPList = stdair::DEFAULT_DCP_LIST;
00059 stdair::DCPList_T::const_iterator itDCP = lWholeDCPList.begin();
00060 while (itDCP != lWholeDCPList.end()) {
00061 const stdair::DCP_T& lDCP = *itDCP;
00062 if (iDTD >= lDCP) {
00063 break;
00064 }
00065 ++itDCP;
00066 }
00067 assert (itDCP != lWholeDCPList.end());
00068
00069 oDCPList.push_back (iDTD);
00070 ++itDCP;
00071 for (; itDCP != lWholeDCPList.end(); ++itDCP) {
00072 oDCPList.push_back (*itDCP);
00073 }
00074
00075 return oDCPList;
00076 }
00077
00078
00079 stdair::DCPList_T Utilities::
00080 buildRemainingDCPList2 (const stdair::DTD_T& iDTD) {
00081 stdair::DCPList_T oDCPList;
00082
00083 const stdair::DCPList_T lWholeDCPList = RMOL::DEFAULT_DCP_LIST;
00084 stdair::DCPList_T::const_iterator itDCP = lWholeDCPList.begin();
00085 while (itDCP != lWholeDCPList.end()) {
00086 const stdair::DCP_T& lDCP = *itDCP;
00087 if (iDTD >= lDCP) {
00088 break;
00089 }
00090 ++itDCP;
00091 }
00092 assert (itDCP != lWholeDCPList.end());
00093
00094 oDCPList.push_back (iDTD);
00095 ++itDCP;
00096 for (; itDCP != lWholeDCPList.end(); ++itDCP) {
00097 oDCPList.push_back (*itDCP);
00098 }
00099
00100 return oDCPList;
00101 }
00102
00103
00104 stdair::NbOfSegments_T Utilities::
00105 getNbOfDepartedSimilarSegments (const stdair::SegmentCabin& iSegmentCabin,
00106 const stdair::Date_T& iEventDate) {
00107 stdair::DTD_T lDTD = 0;
00108
00109 const stdair::GuillotineBlock& lGuillotineBlock =
00110 iSegmentCabin.getGuillotineBlock();
00111 return GuillotineBlockHelper::
00112 getNbOfSegmentAlreadyPassedThisDTD (lGuillotineBlock, lDTD, iEventDate);
00113 }
00114
00115 }