Esempio n. 1
0
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, "*");
  */
}