double CPCAGrid::CalcScatTrimmed (double dCos, double dSin, double dScat, double dScatOrth) { if (dScatOrth <= m_dZeroTol || dScat <= m_dZeroTol) return dScat ; const double *pYOpt = m_pdCurLC, *pCurY = m_pdCurY ; double dCurProjOrth ; double *pProj = m_pdProj ; while (pYOpt < m_pdCurLCEnd) { dCurProjOrth = *pYOpt * dSin - *pCurY * dCos ; if (sm_sqr (dCurProjOrth) / dScatOrth <= 3.841459) { *pProj = *pYOpt * dCos + *pCurY * dSin ; ++pProj ; } ++pYOpt ; ++pCurY ; } // return (dSS / n - (sm_sqr (dS / n))) * n / (n - 1.0) * 1.3178; // correction factor 1.3178 for 95% quantile in sqr maha distance (6) return ApplyMethod (SVecD (m_pdProj, pProj - m_pdProj)) ; }
void CPCAGrid::ApplyMethod (const SCMatD &m, SVecD &v) { v.Reshape (m.ncol ()) ; int i ; for (i = m.ncol () - 1; i != (int) -1; i--) v(i) = ApplyMethod (m.GetColRef (i)) ; }
double CPCAGrid::ApplyMethodMean (const SCMatD &m) { double dSd = 0 ; int i ; for (i = m.ncol () - 1; i != (int) -1; i--) dSd += sm_sqr(ApplyMethod (m.GetColRef (i))) ; return sqrt (dSd / m.ncol ()) ; }
// projects the (2d) scores cbind (m_pdCurLC, m_pdCurY) onto the direction c(dCos, dSin) and computes a scale estimate of the projected data double CPCAGrid::CalcProjScat (const double dCos, const double dSin) { const double *pYOpt = m_pdCurLC, *pCurY = m_pdCurY ; double *pProj = m_pdProj ; while (pYOpt < m_pdCurLCEnd) // projecting the data { *pProj = *pYOpt * dCos + *pCurY * dSin ; ++pProj ; ++pYOpt ; ++pCurY ; } return ApplyMethod (m_vProj) ; // computing the scale estimate }
int CPCAGrid::Calc () { if (m_dwK > m_dwP) return 1 ; // k > p /* if ((m_nSplitCircle & 1) == 0) // //if (m_dwSplitCircle & 1) // only allow even values for splitcircle ++ m_nSplitCircle ;*/ if (m_dwkIni) sme_matmult_R (m_mX, m_mL.GetColRef (m_dwkIni, m_dwP), !TempY ()) ; else { TempY ().Copy (m_mX) ; SetDiag_sq (!m_mL) ; //m_mL.setdiag () ; // this MUST now happen in the calling R routine! // this has been changed when introducing the m_dwkIni argument // why not here? } for (m_dwCurK = m_dwkIni; m_dwCurK < m_dwK; m_dwCurK++) // for each PC which to be computed { m_dwPSub = m_dwP - m_dwCurK ; // dimensionality of the subspace OnCalcPC () ; if (m_dwPSub == 1) // only 1 dimension left -> return this direction { m_vSDev (m_dwCurK) = ApplyMethod (TempY ().GetColRef (0)) ; continue ; // break ; } m_vScl.Reshape (m_dwPSub) ; m_vOrd.Reshape (m_dwPSub) ; ApplyMethod (TempY (), m_vScl) ; // 2do: m_vScl can be a temporary vector meal_sort_order_rev (m_vScl, m_vOrd, m_vScl.size ()) ; // gets the order (m_vOrd) of the dimensions regarding to their variance (m_vScl) in decreasing order m_dwCurP = m_vOrd(0) ; // index of the coloumn of x with biggest scatter m_vAfinBest.Reshape (m_dwPSub) ; m_vAfin.Reshape (m_dwPSub) ; m_vAfin.Reset (0) ; m_vAfin (m_dwCurP) = 1 ; CopyCol (*m_vYOpt, TempY (), m_dwCurP) ; // loads the loading with max scatter as the initial solution t_size i, j ; double dCurSplit ; double dScatBest = 0 ; double dObjBest = 0 ; for (i = 0; i <= m_dwMaxIter; i++) // the outer iteration, which subsequently decreases the gridsize ( = dCurSplit) { //double dScat, dObj, dSumAbsDelta = 0 ; // 2do: check if it's better to use * 0.5 each time? dCurSplit = pow (0.5, (double) i) ; // the current gridSize for (j = 0; j < m_dwPSub; j++) // for each loading in the current solution { m_dwCurP = m_vOrd (j) ; // m_dwCurP = the j-th largest coponent // the m_dwCurP-st loading in tje current solution is now altered in order to increase the objective function m_vCurY = TempY ().GetColRef (m_dwCurP) ; // 2do: move this 2 rows down. m_pdCurY = m_vCurY ; const double dL = m_vAfin (m_dwCurP) ; // current loading if (fabs (dL) == 1) continue ; RemoveLoading (/*i*/) ; m_dNL = dL ; GridPlane (dCurSplit) ; // increasing the objective function by trying several directions on a grid AddLoading (m_dNL, m_dNCL) ; // add the found loading tho the current solution //double dNL = dL, dNCL ; //GridPlane (dNL, dNCL, dScat, dObj, dCurSplit) ; //AddLoading (dNL, dNCL) ; //dSumAbsDelta += fabs (dL - dNL) ; } EO<SOP::a_divide>::VSc (*m_vAfin, norm2 (m_vAfin)) ; // 2do: check norm of m_vAfin. should be 1 anyway!, if not it's sufficient to perform this normalization after this for loop, only with the m_vAfinBest - vector! if (!i || dObjBest <= m_dBestObj) // checking whether we've found a better solution -> if true store it. { dObjBest = m_dBestObj ; m_vAfinBest.Copy_NC (m_vAfin) ; dScatBest = m_dCurScat ; } //meal_printf ("delta: %.22f ->", dSumAbsDelta) ; /* if (dSumAbsDelta <= m_dZeroTol) // no changes of any loading -> quit // doesn't make sense as we're operating on a raster //if (dCurSplit<= m_dZeroTol) // no changes of any loading -> quit { //meal_printf ("stop iteration\n") ; if (m_dwTrace >= 3) meal_printf ("Calculation of PC %d stopped after %d loops\r\n", m_dwCurK + 1, i + 1) ; break ; } //meal_printf ("continue iteration\n") ; */ } m_vSDev (m_dwCurK) = dScatBest ; // 2do: use ptrs instead of vector access! m_vObj(m_dwCurK) = dObjBest ; BackTransform () ; } return 0 ; }
//--------------------------------------------------------------------------- int MediaInfo_Internal::ListFormats() { delete Info; Info=NULL; // Multiple #if defined(MEDIAINFO_CDXA_YES) delete Info; Info=new File_Cdxa(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_DVDIF_YES) delete Info; Info=new File_DvDif(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_DVDV_YES) delete Info; Info=new File_Dvdv(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_FLV_YES) delete Info; Info=new File_Flv(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MK_YES) delete Info; Info=new File_Mk(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MPEG4_YES) delete Info; Info=new File_Mpeg4(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MPEGPS_YES) delete Info; Info=new File_MpegPs(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MPEGTS_YES) delete Info; Info=new File_MpegTs(); if (ApplyMethod()>0) return 1; delete Info; Info=new File_MpegTs(); ((File_MpegTs*)Info)->BDAV_Size=4; if (ApplyMethod()>0) return 1; delete Info; Info=new File_MpegTs(); ((File_MpegTs*)Info)->TSP_Size=16; if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MXF_YES) delete Info; Info=new File_Mxf(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_NUT_YES) delete Info; Info=new File_Nut(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_OGG_YES) delete Info; Info=new File_Ogg(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_RIFF_YES) delete Info; Info=new File_Riff(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_RM_YES) delete Info; Info=new File_Rm(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_SKM_YES) delete Info; Info=new File_Skm(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_SWF_YES) delete Info; Info=new File_Swf(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_WM_YES) delete Info; Info=new File_Wm(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_DPG_YES) delete Info; Info=new File_Dpg(); if (ApplyMethod()>0) return 1; #endif // Video #if defined(MEDIAINFO_AVC_YES) delete Info; Info=new File_Avc(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_DIRAC_YES) delete Info; Info=new File_Dirac(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_FLIC_YES) delete Info; Info=new File_Flic(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MPEG4V_YES) delete Info; Info=new File_Mpeg4v(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MPEGV_YES) delete Info; Info=new File_Mpegv(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_VC1_YES) delete Info; Info=new File_Vc1(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_AVSV_YES) delete Info; Info=new File_AvsV(); if (ApplyMethod()>0) return 1; #endif // Audio #if defined(MEDIAINFO_AC3_YES) delete Info; Info=new File_Ac3(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_ADIF_YES) delete Info; Info=new File_Adif(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_ADTS_YES) delete Info; Info=new File_Adts(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_AMR_YES) delete Info; Info=new File_Amr(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_AMV_YES) delete Info; Info=new File_Amv(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_APE_YES) delete Info; Info=new File_Ape(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_AU_YES) delete Info; Info=new File_Au(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_DTS_YES) delete Info; Info=new File_Dts(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_FLAC_YES) delete Info; Info=new File_Flac(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MIDI_YES) delete Info; Info=new File_Midi(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MPC_YES) delete Info; Info=new File_Mpc(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MPCSV8_YES) delete Info; Info=new File_MpcSv8(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MPEGA_YES) delete Info; Info=new File_Mpega(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_PCM_YES) //delete Info; Info=new File_Pcm(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_TTA_YES) delete Info; Info=new File_Tta(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_TWINVQ_YES) delete Info; Info=new File_TwinVQ(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_WVPK_YES) delete Info; Info=new File_Wvpk(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_XM_YES) delete Info; Info=new File_ExtendedModule(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MOD_YES) delete Info; Info=new File_Module(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_S3M_YES) delete Info; Info=new File_ScreamTracker3(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_IT_YES) delete Info; Info=new File_ImpulseTracker(); if (ApplyMethod()>0) return 1; #endif // Text #if defined(MEDIAINFO_OTHERTEXT_YES) delete Info; Info=new File_OtherText(); if (ApplyMethod()>0) return 1; #endif // Image #if defined(MEDIAINFO_BMP_YES) delete Info; Info=new File_Bmp(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_GIF_YES) delete Info; Info=new File_Gif(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_ICO_YES) delete Info; Info=new File_Ico(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_JPEG_YES) delete Info; Info=new File_Jpeg(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_PNG_YES) delete Info; Info=new File_Png(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_RLE_YES) //delete Info; Info=new File_Rle(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_TIFF_YES) delete Info; Info=new File_Tiff(); if (ApplyMethod()>0) return 1; #endif // Archive #if defined(MEDIAINFO_ACE_YES) delete Info; Info=new File_Ace(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_7Z_YES) delete Info; Info=new File_7z(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_BZIP2_YES) delete Info; Info=new File_Bzip2(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_ELF_YES) delete Info; Info=new File_Elf(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_GZIP_YES) delete Info; Info=new File_Gzip(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_MZ_YES) delete Info; Info=new File_Mz(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_RAR_YES) delete Info; Info=new File_Rar(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_TAR_YES) delete Info; Info=new File_Tar(); if (ApplyMethod()>0) return 1; #endif #if defined(MEDIAINFO_ZIP_YES) delete Info; Info=new File_Zip(); if (ApplyMethod()>0) return 1; #endif // Other #if !defined(MEDIAINFO_OTHER_NO) if (InternalMethod==1 || InternalMethod==2) { delete Info; Info=new File_Other(); if (ApplyMethod()>0) return 1; } #endif #if !defined(MEDIAINFO_UNKNOWN_NO) if (InternalMethod==1) { delete Info; Info=new File_Unknown(); if (ApplyMethod()>0) return 1; } #endif return 0; }