void TestTableWeightingSet::TestCalcFloodThreshold()
{
	ComparisonContext cContext;
	{
		CRTF_Table tbl1(&cContext, Detached);
		CRTF_Table tbl2(&cContext, Detached);

		tbl1.SetSize(3,2);
		tbl1.FillMissingTableCellsWithDummys();
		tbl1.m_iRealCellCount = 6;
		tbl2.SetSize(3,2);
		tbl2.FillMissingTableCellsWithDummys();
		tbl2.m_iRealCellCount = 6;
		
		CRtfDocumentChainBuilder host;

		CTableWeightingSet_CRTF_Table tblset(&host, tbl1, tbl2);
		assertTest(tblset.FloodStackThreshold() == 3);
	}

	{
		CRTF_Table tbl1(&cContext, Detached);
		CRTF_Table tbl2(&cContext, Detached);

		tbl1.SetSize(1,1);
		tbl1.FillMissingTableCellsWithDummys();
		tbl1.m_iRealCellCount = 1;
		tbl2.SetSize(1,1);
		tbl2.FillMissingTableCellsWithDummys();
		tbl2.m_iRealCellCount = 1;
		
		CRtfDocumentChainBuilder host;

		CTableWeightingSet_CRTF_Table tblset(&host, tbl1, tbl2);
		assertTest(tblset.FloodStackThreshold() == 2);
	}

	{
		CRTF_Table tbl1(&cContext, Detached);
		CRTF_Table tbl2(&cContext, Detached);

		tbl1.SetSize(5,5);
		tbl1.FillMissingTableCellsWithDummys();
		tbl1.m_iRealCellCount = 25;
		tbl2.SetSize(6,7);
		tbl2.FillMissingTableCellsWithDummys();
		tbl1.m_iRealCellCount = 42;
		
		CRtfDocumentChainBuilder host;

		CTableWeightingSet_CRTF_Table tblset(&host, tbl1, tbl2);
		assertTest(tblset.FloodStackThreshold() == 4);
	}

}
示例#2
0
void CalcER1()
{
	/*
for(int i=0;i<psd.size();i++)
		printf("\n%g ",nearest_epr(psd[i].fl.d));
	return;*/
	
float d0 = 0.01f;
float d1 = 0.5f;
float d_step = 0.04f;
int it_num = int((d1-d0)/d_step);
int opers_left,opers_total;
double start = glfwGetTime ( );

	int psd_num = 3;//psd.size();
	opers_left =opers_total= it_num*psd_num;
	float *Vas=new float[it_num*psd_num];
	float *Ver=new float[it_num*psd_num];
	
	memset(Vas,0,it_num*sizeof(float)*psd_num);
	memset(Ver,0,it_num*sizeof(float)*psd_num);
	float *Vas1=new float[it_num];
	float *Ver1=new float[it_num];
	
	memset(Vas1,0,it_num*sizeof(float));
	memset(Ver1,0,it_num*sizeof(float));
	
	float cur_d;

	for(int psd_id=0;psd_id<psd_num;psd_id++)
	{
		float offset=nearest_geoms(4,psd[psd_id].fl.d);
		cur_d=d0;

		for(int i=0;i<it_num;i++)
		{
			float perS_astr,perS_epr;
			CalcMonteEPR_as(psd[psd_id].fl.d,cur_d+offset,perS_astr,perS_epr);
			

					
			opers_left--;
		

			Vas1[i] = perS_astr;
			Ver1[i] = perS_epr;
			Vas[i+psd_id*it_num] = Vas1[i];
			Ver[i+psd_id*it_num] = Ver1[i];

			cur_d += d_step;
			int sc=((opers_left)*(glfwGetTime ( )-start)/(opers_total-opers_left))/60;
						
			printf("%dpsd	%dit	%d%	%d:%d %g\n",psd_id,opers_left,(opers_left*100)/opers_total,sc/60,sc%60,perS_astr);
				
			
		}

		
	}

				
	//}
//
	Table tbl1(it_num+1,1+3*psd_num);
	tbl1.SetValue("Distance",0,0);
	for(int i=0;i<psd_num;i++)
	{
		tbl1.SetValue("%Vas"+str::ToString(i),0,i+1);
		tbl1.SetValue("%Ver"+str::ToString(i),0,i+1+psd_num);
		tbl1.SetValue("Ver/Vas"+str::ToString(i),0,i+1+psd_num*2);
	}
	
	{
		float cur_d = d0;
		for(int i=0;i<it_num;i++)
		{
			tbl1.SetValue(str::ToString(int((cur_d+0.0001f)*1000))+"nm",i+1,0);
			cur_d += d_step;		
		}
	}
	for(int i=0;i<psd_num;i++)
	for(int j=0;j<it_num;j++)
	{
		tbl1.SetValue(Vas[j+i*it_num],j+1,i+1);
		tbl1.SetValue(Ver[i+i*it_num],j+1,i+1+psd_num);
		if(Vas[i+i*it_num])tbl1.SetValue(Ver[i+i*it_num]/Vas[i+i*it_num],j+1,i+1+psd_num*2);
		
	}
	
	tbl1.StoreToFile("results\\ER_central.txt");
	
	
//
			
		
	delete[]Vas;
	delete[]Ver;
	delete[]Vas1;
	delete[]Ver1;

}
示例#3
0
void CalcER()
{
//*'
Table tbl0(2,54);
tbl0.SetValue("nearest_astr",0,0);
tbl0.SetValue("nearest_epr",1,0);
for(int i=0;i<psd.size();i++)
{
	tbl0.SetValue(nearest_geoms(0,psd[i].fl.d),0,1+i);
	tbl0.SetValue(nearest_geoms(4,psd[i].fl.d),1,1+i);
}
tbl0.StoreToFile("distances.txt");
	return;// */
float d0 = 0.01f;
float d1 = 2.5f;
float d_step = 0.01f;
int it_num = int((d1-d0)/d_step);
int opers_left,opers_total;
double start = glfwGetTime ( );

	int psd_num = psd.size();
	opers_left =opers_total= it_num*psd_num;
	float *Vas=new float[it_num*psd_num];
	float *Ver=new float[it_num*psd_num];
	
	memset(Vas,0,it_num*sizeof(float)*psd_num);
	memset(Ver,0,it_num*sizeof(float)*psd_num);
	float *Vas1=new float[it_num];
	float *Ver1=new float[it_num];
	
	memset(Vas1,0,it_num*sizeof(float));
	memset(Ver1,0,it_num*sizeof(float));
	
	float cur_d;
	Geometry *gg0 = new Geometry(),*gg = new Geometry();
	Geometry*gs = new Geometry();

	for(int psd_id=0;psd_id<psd_num;psd_id++)
	{
		float offset=0;//nearest_epr(psd[psd_id].fl.d);

		cur_d=d0+offset;

		gs->renull();
		AddSphere(gs,d1+d_step+offset,40,40);
		mat34 mt(12,vec3(1).normalized());
		gs->Transform(mt);
		gs->Move(psd[psd_id].fl.d);
		gs->RebuildTrBB();
		gs->RebuildTrBB2();
		gg0->renull();
		for(int as=0;as<2;as++)
		{
			GetSection(gs,&neuron[0][as],gg0,1,0);
			GetSection(&neuron[0][as],gs,gg0,1,0);
		}
		gg0->RebuildTrBB();
		gg0->RebuildTrBB2();
			
		for(int i=0;i<it_num;i++)
		{
			
			gg->renull();
			gs->renull();
			AddSphere(gs,cur_d,40,40);
			mat34 mt(12,vec3(1).normalized());
			gs->Transform(mt);
			gs->Move(psd[psd_id].fl.d);
			gs->RebuildTrBB();
			gs->RebuildTrBB2();

			GetSection(gs,gg0,gg,1,0,0);
			float ss = gg->CalcArea();

			float ss1=0;
			for(int as_id=0;as_id<2;as_id++)
			for(int ii=0;ii<CD_depo[as_id].size();ii++)
			{
				Geometry* g_er = &neuron[4][CD_depo[as_id][ii]];
				if(!g_er->tr.size())continue;
				gg->renull();
				GetSection(gs,g_er,gg,1,0,0);
				ss1 += gg->CalcArea()*g_er->color.y;
				
			}
					
			opers_left--;
		

			Vas1[i] = ss/(4*PI*cur_d*cur_d);
			Ver1[i] = ss1/(4*PI*cur_d*cur_d);
			Vas[i+psd_id*it_num] = Vas1[i];
			Ver[i+psd_id*it_num] = Ver1[i];

			cur_d += d_step;
			int sc=((opers_left)*(glfwGetTime ( )-start)/(opers_total-opers_left))/60;
						
			//printf("%dpsd	%dit	%d%	%d:%d\n",psd_id,opers_left,(opers_left*100)/opers_total,sc/60,sc%60);
			printf("%dpsd	%dit	%g %g\n",psd_id,opers_left,ss,ss1);
				
			
		}

	}

				
	//}
//
	Table tbl1(it_num+1,1+3*psd_num);
	tbl1.SetValue("Distance",0,0);
	for(int i=0;i<psd_num;i++)
	{
		tbl1.SetValue("%Vas"+str::ToString(i),0,i+1);
		tbl1.SetValue("%Ver"+str::ToString(i),0,i+1+psd_num);
		tbl1.SetValue("Ver/Vas"+str::ToString(i),0,i+1+psd_num*2);
	}
	
	{
		float cur_d = d0;
		for(int i=0;i<it_num;i++)
		{
			tbl1.SetValue(str::ToString(int((cur_d+0.0001f)*1000))+"nm",i+1,0);
			cur_d += d_step;		
		}
	}
	for(int i=0;i<psd_num;i++)
	for(int j=0;j<it_num;j++)
	{
		tbl1.SetValue(Vas[j+i*it_num],j+1,i+1);
		tbl1.SetValue(Ver[j+i*it_num],j+1,i+1+psd_num);
		if(Vas[j+i*it_num])tbl1.SetValue(Ver[j+i*it_num]/Vas[j+i*it_num],j+1,i+1+psd_num*2);
		
	}
	
	tbl1.StoreToFile("results\\ER_central.txt");
	
	
//
			
		
	delete gg;
	delete gg0;
	delete gs;
	delete[]Vas;
	delete[]Ver;
	delete[]Vas1;
	delete[]Ver1;

}