Example #1
0
void MdiEditor::clear()
{
	for (int i=0;i<layer_num;i++)
	{
		DeleteThread(i);
		thread_flag[i]=0;

		switch(i)
		{
		case 0:
			disconnect(show_layer[i],SIGNAL(triggered()),this,SLOT(Layer0()));
			break;
		case 1:
			connect(show_layer[i],SIGNAL(triggered()),this,SLOT(Layer1()));
			break;
		case 2:
			connect(show_layer[i],SIGNAL(triggered()),this,SLOT(Layer2()));
			break;
		case 3:
			connect(show_layer[i],SIGNAL(triggered()),this,SLOT(Layer3()));
			break;
		case 4:
			connect(show_layer[i],SIGNAL(triggered()),this,SLOT(Layer4()));
			break;
		}

		layer_view->removeAction(show_layer[i]);
		show_layer[i]->deleteLater();
		show_layer[i]=NULL;

	}

	for(int i=0;i<MAX_LAYER;i++)
	{

		parameters[i].ui_points.clear();
		parameters[i].ActIndex=-1;
		parameters[i].w_ssim=1.0f;
		parameters[i].ssim_clamp=0.0f;
		parameters[i].w_tps=0.001f;
		parameters[i].w_ui=100.0f;
		parameters[i].max_iter=2000;
		parameters[i].max_iter_drop_factor=2;
		parameters[i].eps=0.01f;
		parameters[i].start_res=8;
		parameters[i].bcond=BCOND_NONE;
		parameters[i].verbose=true;
	}
	pyramids->levels.clear();

	imageEditorL->_image_loaded=false;
	imageEditorR->_image_loaded=false;
	imageEditorM->_image_loaded=false;
	imageEditorM->_flag_error=false;
	imageEditorA->_loaded=false;
	imageEditorA->_colorfrom=1;
	ctrbar->_status=-1;

	layer_num=0;
	layer_index=0;
	mod=0;

}
Example #2
0
 bool MdiEditor::ReadXmlFile(QString filename)
 {
  	QDomDocument doc("settings");
  	QFile file(filename);

  	if(file.open(QIODevice::ReadOnly))
  	{
  		doc.setContent(&file);
  		QDomElement root = doc.documentElement();
  		QDomElement child1=root.firstChildElement();

   		while(!child1.isNull())
   		{
  			if (child1.tagName()=="images")
  			{
  				QString ImagePathName = pro_path+child1.attribute("image1");
  				image1=cv::imread(ImagePathName.toLatin1().data());
				parameters->fname0=(const char *)ImagePathName.toLocal8Bit();

  				ImagePathName = pro_path+child1.attribute("image2");
  				image2=cv::imread(ImagePathName.toLatin1().data());
				parameters->fname1=(const char *)ImagePathName.toLocal8Bit();
  			}
 			else if (child1.tagName()=="layers")
 			{
 				layer_num=child1.attribute("num").toInt();
 				layer_index=0;
 				QDomElement child2=child1.firstChildElement();

				for(int i=0;i<layer_num;i++)
					parameters[i].fname0=parameters[0].fname0,parameters[i].fname1=parameters[0].fname1;
 				while (!child2.isNull())
 				{
 					int index=child2.tagName().remove("l").toInt();
 					QString item;
					item.sprintf("&layer %d",index);
					show_layer[index]=new QAction(item.toLatin1().data(), this);
					layer_view->addAction(show_layer[index]);
					show_layer[index]->setCheckable(true);
					switch(index)
					{
					case 0:
						connect(show_layer[index],SIGNAL(triggered()),this,SLOT(Layer0()));
						break;
					case 1:
						connect(show_layer[index],SIGNAL(triggered()),this,SLOT(Layer1()));
						break;
					case 2:
						connect(show_layer[index],SIGNAL(triggered()),this,SLOT(Layer2()));
						break;
					case 3:
						connect(show_layer[index],SIGNAL(triggered()),this,SLOT(Layer3()));
						break;
					case 4:
						connect(show_layer[index],SIGNAL(triggered()),this,SLOT(Layer4()));
						break;
					}

 					QDomElement child3=child2.firstChildElement();
 					while(!child3.isNull())
 					{
 						if(child3.tagName()=="masks")
 						{
 							QString ImagePathName = pro_path+child3.attribute("mask1");
 							parameters[index].mask1=cv::imread(ImagePathName.toLatin1().data());

 							ImagePathName = pro_path+child3.attribute("mask2");
 							parameters[index].mask2=cv::imread(ImagePathName.toLatin1().data());
 						}
 						else if (child3.tagName()=="parameters")
 						{
 							QDomElement elem=child3.firstChildElement();
 							while(!elem.isNull())
 							{
 								if(elem.tagName()=="weight")
 								{
 									parameters[index].w_ssim=elem.attribute("ssim").toFloat();
 									parameters[index].w_tps=elem.attribute("tps").toFloat();
 									parameters[index].w_ui=elem.attribute("ui").toFloat();
 									parameters[index].ssim_clamp=1.0-elem.attribute("ssimclamp").toFloat();
 								}
 								else if(elem.tagName()=="points")
 								{
									QString points=elem.attribute("image1");
									QStringList list1=points.split(" ");
									points=elem.attribute("image2");
									QStringList list2=points.split(" ");
									for (int i=0;i<list1.count()-1;i+=2)
									{
										ConstraintPoint elem;
										elem.lp.x=list1[i].toFloat();
										elem.lp.y=list1[i+1].toFloat();
										elem.rp.x=list2[i].toFloat();
										elem.rp.y=list2[i+1].toFloat();
										parameters[index].ui_points.push_back(elem);
									}
								}
 								else if(elem.tagName()=="boundary")
								{
									int cond=elem.attribute("lock").toInt();
									switch(cond)
									{
									case 0:
										parameters[index].bcond=BCOND_NONE;
										break;
									case 1:
										parameters[index].bcond=BCOND_CORNER;
										break;
									case 2:
										parameters[index].bcond=BCOND_BORDER;
										break;
									}
								}


 								else if(elem.tagName()=="debug")
 								{
 									parameters[index].max_iter=elem.attribute("iternum").toInt();
 									parameters[index].max_iter_drop_factor=elem.attribute("dropfactor").toFloat();
 									parameters[index].eps=elem.attribute("eps").toFloat();
 									parameters[index].start_res=elem.attribute("startres").toInt();
 								}

 								elem=elem.nextSiblingElement();
 							}
 					}
 					child3=child3.nextSiblingElement();
 				}

  				child2=child2.nextSiblingElement();
  			}

  		}

   		child1=child1.nextSiblingElement();
 	}
  		file.close();
  		return true;
  }
 	return false;
 }
Example #3
0
Pairing * PairGeneratorSector::run(HitCollection & hits, const GeometrySupplement & geomSupplement,
				uint nThreads, const TripletConfigurations & layerTriplets, const Grid & grid)
		{

	std::vector<uint> oracleOffset;
	uint totalMaxPairs = 0;

	uint nLayerTriplets = layerTriplets.size();
	for(uint e = 0; e < grid.config.nEvents; ++e){
		for(uint p = 0; p < nLayerTriplets; ++p){

			TripletConfiguration layerPair(layerTriplets, p);

			LayerGrid layer1(grid, layerPair.layer1(),e);
			LayerGrid layer2(grid, layerPair.layer2(),e);

			uint nMaxPairs = layer1.size()*layer2.size();
			nMaxPairs = 32 * std::ceil(nMaxPairs / 32.0); //round to next multiple of 32

			oracleOffset.push_back(totalMaxPairs);
			totalMaxPairs += nMaxPairs;
		}
	}

	LOG << "Initializing oracle offsets for pair gen...";
	clever::vector<uint, 1> m_oracleOffset(oracleOffset, ctx);
	LOG << "done[" << m_oracleOffset.get_count()  << "]" << std::endl;

	LOG << "Initializing oracle for pair gen...";
	clever::vector<uint, 1> m_oracle(0, std::ceil(totalMaxPairs / 32.0), ctx);
	LOG << "done[" << m_oracle.get_count()  << "]" << std::endl;

	LOG << "Initializing prefix sum for pair gen...";
	clever::vector<uint, 1> m_prefixSum(0, grid.config.nEvents*nLayerTriplets*nThreads+1, ctx);
	LOG << "done[" << m_prefixSum.get_count()  << "]" << std::endl;

	//ctx.select_profile_event(KERNEL_COMPUTE_EVT());

	LOG << "Running pair gen kernel...";
	cl_event evt = pairCount.run(
			//configuration
			layerTriplets.transfer.buffer(Layer1()), layerTriplets.transfer.buffer(Layer2()), grid.config.nLayers,
			grid.transfer.buffer(Boundary()),
			grid.config.MIN_Z, grid.config.sectorSizeZ(),	grid.config.nSectorsZ,
			grid.config.MIN_PHI, grid.config.sectorSizePhi(), grid.config.nSectorsPhi,
			layerTriplets.transfer.buffer(pairSpreadZ()), layerTriplets.transfer.buffer(pairSpreadPhi()),
			// hit input
			hits.transfer.buffer(GlobalX()), hits.transfer.buffer(GlobalY()), hits.transfer.buffer(GlobalZ()),
			// intermeditate data: oracle for hit pairs, prefix sum for found pairs
			m_oracle.get_mem(), m_oracleOffset.get_mem(), m_prefixSum.get_mem(),
			//local
			local_param(sizeof(cl_uint), (grid.config.nSectorsZ+1)*(grid.config.nSectorsPhi+1)),
			//thread config
			range(nThreads, nLayerTriplets, grid.config.nEvents),
			range(nThreads, 1,1));
	PairGeneratorSector::events.push_back(evt);
	LOG << "done" << std::endl;

	if(PROLIX){
		PLOG << "Fetching prefix sum for pair gen...";
		std::vector<uint> vPrefixSum(m_prefixSum.get_count());
		transfer::download(m_prefixSum,vPrefixSum,ctx);
		PLOG << "done" << std::endl;

		PLOG << "Prefix sum: ";
		for(auto i : vPrefixSum){
			PLOG << i << " ; ";
		}
		PLOG << std::endl;
	}


	if(PROLIX){
		PLOG << "Fetching oracle for pair gen...";
		std::vector<uint> oracle(m_oracle.get_count());
		transfer::download(m_oracle,oracle,ctx);
		PLOG << "done" << std::endl;

		PLOG << "Oracle: ";
		for(auto i : oracle){
			PLOG << i << " ; ";
		}
		PLOG << std::endl;
	}

	//Calculate prefix sum
	PrefixSum prefixSum(ctx);
	evt = prefixSum.run(m_prefixSum.get_mem(), m_prefixSum.get_count(), nThreads, PairGeneratorSector::events);
	uint nFoundPairs;
	transfer::downloadScalar(m_prefixSum, nFoundPairs, ctx, true, m_prefixSum.get_count()-1, 1, &evt);

	if(PROLIX){
		PLOG << "Fetching prefix sum for pair gen...";
		std::vector<uint> vPrefixSum(m_prefixSum.get_count());
		transfer::download(m_prefixSum,vPrefixSum,ctx);
		PLOG << "done" << std::endl;

		PLOG << "Prefix sum: ";
		for(auto i : vPrefixSum){
			PLOG << i << " ; ";
		}
		PLOG << std::endl;
	}

	LOG << "Initializing pairs...";
	Pairing * hitPairs = new Pairing(ctx, nFoundPairs, grid.config.nEvents, layerTriplets.size());
	LOG << "done[" << hitPairs->pairing.get_count()  << "]" << std::endl;


	LOG << "Running pair gen store kernel...";
	evt = pairStore.run(
			//configuration
			layerTriplets.transfer.buffer(Layer1()), layerTriplets.transfer.buffer(Layer2()), grid.config.nLayers,
			//grid
			grid.transfer.buffer(Boundary()), grid.config.nSectorsZ, grid.config.nSectorsPhi,
			// input for oracle and prefix sum
			m_oracle.get_mem(), m_oracleOffset.get_mem(), m_prefixSum.get_mem(),
			// output of pairs
			hitPairs->pairing.get_mem(), hitPairs->pairingOffsets.get_mem(),
			//thread config
			range(nThreads, nLayerTriplets, grid.config.nEvents),
			range(nThreads, 1,1));
	PairGeneratorSector::events.push_back(evt);
	LOG << "done" << std::endl;

	if(PROLIX){
		PLOG << "Fetching pairs...";
		std::vector<uint2> pairs = hitPairs->getPairings();
		PLOG <<"done[" << pairs.size() << "]" << std::endl;

		PLOG << "Pairs:" << std::endl;
		for(uint i = 0; i < nFoundPairs; ++i){
			PLOG << "[" << i << "] "  << pairs[i].x << "-" << pairs[i].y << std::endl;
		}

		PLOG << "Fetching pair offets...";
		std::vector<uint> pairOffsets = hitPairs->getPairingOffsets();
		PLOG <<"done[" << pairOffsets.size() << "]" << std::endl;

		PLOG << "Pair Offsets:" << std::endl;
		for(uint i = 0; i < pairOffsets.size(); ++i){
			PLOG << "[" << i << "] "  << pairOffsets[i] << std::endl;
		}
	}

	return hitPairs;
}