bool NeighborClustCount(Neighbor** vNeighbors,vector<int>& vClustIDs,vector<ClusterInfo>& vPrct,int iNNToFind,int iClusts) { int iSz = vClustIDs.size(); if(vPrct.size()!=iClusts+1) return false; int i; vector<int> vCounts(iClusts+1); for(i=1;i<=iClusts;i++) vCounts[i]=count(vClustIDs.begin(),vClustIDs.end(),i); vector< vector<prob_t> > vprct(iClusts+1); for(i=1;i<=iClusts;i++) vprct[i]=vector<prob_t>(vCounts[i],0.0); vector<int> vIndex(iClusts+1,0); for(i=0;i<iSz;i++) { int j, iCount = 0, iClust = vClustIDs[i]; if(!iClust)continue;//skip background vectors int idx = vIndex[iClust]++; for(j=0;j<iNNToFind;j++) { if(vClustIDs[vNeighbors[i][j].m_id]==iClust) vprct[iClust][idx]+=1.0f; } vprct[iClust][idx] /= iNNToFind; } for(i=1;i<=iClusts;i++) vPrct[i].m_fPrctKNNInClust=Avg(vprct[i]); return true; }
void CNProbeSetArray::setupGCCorrectionBins(int iGCBinCount) { AffxMultiDimensionalArray<float> vGcContent(getProcessCount()); int iIndex = 0; for (int iRowIndex = 0; (iRowIndex < getCount()); iRowIndex++) { CNProbeSet* p = getAt(iRowIndex); if (!p->isProcess() || !( p->processAsCN() || p->processAsSNP() )) { continue; } float fGcContent = p->getGCContent(); vGcContent.set(iIndex, fGcContent); iIndex++; } AffxMultiDimensionalArray<float> v(iGCBinCount); AffxMultiDimensionalArray<int> vCounts(iGCBinCount); float fPercentile = 0; for (int iBinIndex = 0; (iBinIndex < iGCBinCount); iBinIndex++) { fPercentile = vGcContent.percentile((1.0 / (double)iGCBinCount) * (iBinIndex + 1)); v.set(iBinIndex, fPercentile); } v.set((iGCBinCount - 1), 1); for (int iRowIndex = 0; (iRowIndex < getCount()); iRowIndex++) { CNProbeSet* pobjProbeSet = getAt(iRowIndex); if (!pobjProbeSet->isProcess() || !( pobjProbeSet->processAsCN() || pobjProbeSet->processAsSNP() )) { continue; } float fGcContent = pobjProbeSet->getGCContent(); for (int iBinIndex = 0; (iBinIndex < iGCBinCount); iBinIndex++) { if (fGcContent <= v.get(iBinIndex)) { if (iBinIndex == 0) { pobjProbeSet->setGCBinIndex(iBinIndex); vCounts.increment(iBinIndex); break; } else if (fGcContent > v.get(iBinIndex - 1)) { pobjProbeSet->setGCBinIndex(iBinIndex); vCounts.increment(iBinIndex); break; } } } if (pobjProbeSet->getGCBinIndex() == -1) { Verbose::out(1, pobjProbeSet->getProbeSetName() + " has no gc-bin assignment. " + ::getDouble(fGcContent, 6)); } } /* Verbose::out(1, "*"); AffxString str; for (int iBinIndex = 0; (iBinIndex < iGCBinCount); iBinIndex++) { if (iBinIndex == 0) { Verbose::out(1, str + "GC Correction Bin " + ::getInt(iBinIndex + 1) + "\t= 0 \t<= n <= " + ::getDouble(v.get(iBinIndex), 6) + "\tMarkerCount = " + ::getInt(vCounts.get(iBinIndex))); } else if (iBinIndex == (iGCBinCount - 1)) { Verbose::out(1, str + "GC Correction Bin " + ::getInt(iBinIndex + 1) + "\t= " + ::getDouble(v.get(iBinIndex - 1), 6) + "\t< n <= 1 \tMarkerCount = " + ::getInt(vCounts.get(iBinIndex))); } else { Verbose::out(1, str + "GC Correction Bin " + ::getInt(iBinIndex + 1) + "\t= " + ::getDouble(v.get(iBinIndex - 1), 6) + "\t< n <= " + ::getDouble(v.get(iBinIndex), 6) + "\tMarkerCount = " + ::getInt(vCounts.get(iBinIndex))); } } Verbose::out(1, "*"); */ }