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; }
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; }
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; }