Exemplo n.º 1
0
void DoOverSampleSplitSubRegion(OptionsCls &options, char *dirName)
{
	// look through a directory, and crop each file into its four base experiments
	char destPath[4][2048];
	DIR *d = opendir(options.expPath);
	struct dirent *entry;
	int osC[4] = {8,4,2,1};
	int osS[4] = {1,2,4,8};


	for(int i=0;i<4;i++)
		sprintf(destPath[i],"%s_%d/%s",options.destPath,osC[i],dirName);

	if(d)
	{
	    while ((entry = readdir(d)) != NULL)
	    {
	    	if ((entry->d_type != DT_DIR) && ((entry->d_name[0] == 'a') || entry->d_name[0] == 'b' || entry->d_name[0] == 'p'))
	    	{
	    		for(int i=0;i<4;i++)
	    		{
					// crop this file into its four sub-sampling files
					options.oneFile = entry->d_name;
					options.destPath = destPath[i];
					options.OverSample_combine=osC[i];
					options.OverSample_skip=osS[i];
					options.skipCopy=1;
					DoCrop(options);
	    		}
	    	}
	    }
	    closedir(d);
	}
}
Exemplo n.º 2
0
void subWorker(int os, int skip, char *tmpExpPath, char *tmpDestPath)
{
	OptionsCls LocalOptions;

	memcpy(&LocalOptions,&options,sizeof(LocalOptions));

	LocalOptions.expPath=tmpExpPath;
	LocalOptions.destPath=tmpDestPath;
	LocalOptions.OverSample_combine = os;
	LocalOptions.OverSample_skip = skip;
	DoCrop(LocalOptions);
}
Exemplo n.º 3
0
int main ( int argc, char *argv[] )
{

	InitOptionsCls(options);

//  int dont_retry = 0;
  if ( argc == 1 ) {
    usage ( options.cropx, options.cropy, options.cropw, options.croph );
  }
  int argcc = 1;
  while ( argcc < argc ) {
    switch ( argv[argcc][1] ) {
    case 'a':
    	options.doAscii = 1;
      break;

    case 'x':
      argcc++;
      options.cropx = atoi ( argv[argcc] );
      break;

    case 'y':
      argcc++;
      options.cropy = atoi ( argv[argcc] );
      break;

    case 'w':
      argcc++;
      options.cropw = atoi ( argv[argcc] );
      break;

    case 'h':
      argcc++;
      // don't segfault if called with -h (user expects help)
      if ( argcc >= argc ) {
        usage ( options.cropx, options.cropy, options.cropw, options.croph );
      }
      options.croph = atoi ( argv[argcc] );
      break;

    case 's':
      argcc++;
      options.expPath = argv[argcc];
      break;

    case 'f':
      argcc++;
      options.oneFile = argv[argcc];
      break;

    case 'z':
    	options.dont_retry = 1;
      break;

    case 'p':
    	options.pfc=1;
    	options.cropx=0;
    	options.cropy=0;
    	options.cropw=0;
    	options.croph=0;
    	break;

    case 'c':
    	options.vfc=1;
    	options.cropx=0;
    	options.cropy=0;
    	options.cropw=0;
    	options.croph=0;
      break;


    case 'b':
    	options.OverSamplingSplit=1;
    	options.cropx=0;
    	options.cropy=0;
    	options.cropw=0;
    	options.croph=0;
      break;

    case 'n':
    	options.vfc=0;
      break;

    case 'v':
      fprintf ( stdout, "%s", IonVersion::GetFullVersion ( "Crop" ).c_str() );
      exit ( 0 );
      break;
    case 'H':
      usage ( options.cropx, options.cropy, options.cropw, options.croph );
      break;
    case 'd':
      argcc++;
      options.destPath = argv[argcc];
      break;
    case 'r':
    	options.regBasedAcq=1;
      break;
    case 'l':
    	options.TimeBasedAcq=1;
      break;
    case 't':
      argcc++;
      options.separatorIn = argv[argcc];
      break;
    case 'e':
      argcc++;
      options.t0In = argv[argcc];
      options.useSeparatorT0File = false;
      break;
    case 'q':
      argcc++;
      strncpy(ImageTransformer::PCATest , argv[argcc], sizeof(ImageTransformer::PCATest)-1);
      break;
    case 'u':
      argcc++;
      options.PCAOpts=argv[argcc];
      break;
    case 'g':
      argcc++;
      options.excludeMaskFile = argv[argcc];
      options.excludeMask = 1;
      break;
    case 'i':
      argcc++;
      options.OverSample_combine = atoi(argv[argcc]);
      argcc++;
      options.OverSample_skip = atoi(argv[argcc]);
      break;

    case 'j':
    	argcc++;
    	numThreads = atoi(argv[argcc]);
    	break;

    case 'C':
    	options.doColumnCorrection=1;
    	if(argv[argcc+1][0] != '-'){
			argcc++;
			if(argc <= argcc  || (argv[argcc][0] != '0' && argv[argcc][0] != '1')){
				printf("Bad option on column noise correction\n");
				exit(-1);
			}

			options.cncType = atoi(argv[argcc]);
    	}
    	break;

    case 'D':
    	options.doColumnCorrectionTn=1;
    	break;

    case 'E':
    	options.T0Test=1;
    	break;

    case 'F':
        argcc++;
       options.cmpFile = argv[argcc];
    	break;

    case 'G':
    	options.subtractAverage=1;
    	break;

    case 'I':
    	if(argv[argcc+1][0] != '-'){
			argcc++;
			options.chipType = argv[argcc];
    	}
    	break;

    case 'J':
        options.applyRowCorrection = 1;
    	break;

    case 'K':
        options.applyColCorrection = 1;
    	break;

    case 'L':
    	if(argv[argcc+1][0] != '-'){
			argcc++;
			sscanf(argv[argcc],"%f",&options.applyXtalkCorrection1);
    	}
    	else
    		options.applyXtalkCorrection1 = 0.2;
    	break;

    case 'M':
    	if(argv[argcc+1][0] != '-'){
			argcc++;
			sscanf(argv[argcc],"%f",&options.applyXtalkCorrection2);
    	}
    	else
    		options.applyXtalkCorrection2 = 0.2;
    	break;

    default:

      fprintf ( stdout, "unknown option %s\n",argv[argcc] );
      argcc++;
      break;
    }
    argcc++;
  }


  if(options.OverSamplingSplit)
  {
	  // crop an entire directory many times
	  DoOverSampleSplit(options);
  }
  else
  {
	  DoCrop(options);
  }
}
Exemplo n.º 4
0
void CCropDialog::on_pushButtonCrop_clicked()
{
	/* *************************
	m_pCropThread = new CCropThread(this);
	m_pCropThread->start();
	**************************** */

	QString strTemplateFilename(tr("%1/%2")
								.arg(ui.lineEditSourceFolder->text())
								.arg(sTEMPLATE_IMAGE_FILENAME));
	if(QFile::exists(strTemplateFilename) != true)
	{
		QMessageBox::critical(this, tr("Missing the template image file"), 
							tr("%1 is necessary to crop the image stacks.")
							.arg(sTEMPLATE_IMAGE_FILENAME));
		return;
	}
	
	// make sub folders for cropped data
	QString strZoomOutFolder, strColumnFolder;
	QDir Dir;
	
	m_bStartCropping = true;
	ui.pushButtonCrop->setEnabled(false);
	ui.pushButtonPauseResume->setEnabled(true);
	ui.listWidgetOutput->clear();
	m_bProcessFinished = true;
	m_bPause = false;
	
	////////////////////////////////
	// ZO_1 is not a part of ZoomOutLevel, but needs to be made.
	for(quint32 i = 0, nZoomOutLevel = 1; 
		i < m_TissueBlock.m_nNumZoomLevel+1; i++, nZoomOutLevel *= 2)
	{
		strZoomOutFolder = ui.lineEditDestFolder->text() 
							+ "/" 
							+ QString(sZOOM_OUT_DIR_PREFIX"%1")
								.arg(nZoomOutLevel); 
		Dir.mkdir(strZoomOutFolder);
		PrintToOutput(strZoomOutFolder + " folder created.");

		for(quint32 j = 0; j < m_TissueBlock.m_nNumCol; j++)
		{
			strColumnFolder = strZoomOutFolder + "/" + QString("%1").arg(j);
			Dir.mkdir(strColumnFolder);
			PrintToOutput("\t" + strColumnFolder + " folder created.");
		}
	}

	// open list for source image files
	qint32 nOffset = (m_TissueBlock.m_nStartCol > m_TissueBlock.m_nEndCol) ?
					-1 : 1;
	//QString strSrcFile;
	QString strLine;
	quint32 nSrcStartCol = m_TissueBlock.m_nStartCol;
	
	/////////////////////
	// specify a task that processes only one column
	quint32 nColsToCrop = m_TissueBlock.m_nNumCol;
	quint32 iCol = 0;
	
	//if(m_nSrcCropCol != -1) // an image stack number is specified
	if(ui.comboBoxColumn->currentText() != "All")
	{
		int nSrcCropCol = ui.comboBoxColumn->currentText().toInt();
		iCol = qAbs((int)nSrcStartCol - nSrcCropCol);//(int)m_nSrcCropCol);
		nColsToCrop = iCol+1; // only one column
		nSrcStartCol = nSrcCropCol;//m_nSrcCropCol;
	}

	//for( i = 0; i < m_TissueBlock.m_nNumCol; i++, nSrcStartCol+=nOffset)
	for(; iCol < nColsToCrop; iCol++, nSrcStartCol+=nOffset)
	{
#if 0
		//////////////////////////////////////////////////////////////////////
		// src image crop area
		QString strCropFile(tr("%1/%2_crop_point.txt")
								.arg(ui.lineEditSourceFolder->text()) 
								.arg(nSrcStartCol));

		QFile fileCrop(strCropFile);
		if(!(fileCrop.open(QFile::ReadOnly | QFile::Text)))
		{
			PrintToOutput(tr("No %1 exists.").arg(strCropFile));
			continue; // ignore no folder exists
			//QMessageBox::critical(this, tr("File open error"), 
			//							tr("No %1 exists.").arg(strCropFile));
			//return;
		}
		QTextStream txtstrmCrop(&fileCrop);
		while(!txtstrmCrop.atEnd())
		{
			strLine = txtstrmCrop.readLine();
			if(strLine.isNull())
				break;
			m_TissueBlock.m_vCropStartX.append(strLine.toInt());
		};

		//////////////////////////////////////////////////////////////////////
		// src image crop area index
		QString strChunkPosFile(tr("%1/%2_chunk_pos.txt")
									.arg(ui.lineEditSourceFolder->text())
									.arg(nSrcStartCol));

		QFile fileChunkPos(strChunkPosFile);
		if(!fileChunkPos.open(QFile::ReadOnly | QFile::Text))
		{
			PrintToOutput(tr("No %1 exists.").arg(strChunkPosFile));
			continue; // ignore no folder exists
			//QMessageBox::critical(this, tr("File open error"), 
			//							tr("No %1 exists.").arg(strChunkPosFile));
			//return;
		}
		QTextStream txtstrmChunkPos(&fileChunkPos);
		while(!txtstrmChunkPos.atEnd())
		{
			strLine = txtstrmChunkPos.readLine();
			if(strLine.isNull())
				break;
			m_TissueBlock.m_vChunkPos.append(strLine.toDouble());
		}
#endif		

		QString strSubFolder(tr("%1/%2")
									.arg(ui.lineEditSourceFolder->text())
									.arg(nSrcStartCol));
		QDir dirDataFolder(strSubFolder);
	    
		QStringList slstFilters;
	    slstFilters << QString(tr("*%1").arg(m_Settings.m_strDestFileFormat));
	    dirDataFolder.setNameFilters(slstFilters);
		QStringList slstEntry = dirDataFolder.entryList();
		
		PrintToOutput(tr("Files: %1").arg(slstEntry.count()));
		
		if(slstEntry.count() > 0)
			ui.progressBarImage->setRange(0, slstEntry.count()-1);

		QString strDestImage, strOptions, strSrcImage, strArgs;
		//QStrinList strlstLine;
		qreal rZ;
		quint32 nImage;//, nStartImage;//, nIndexChunk = 0;
		//bool bFirst = true;
		
		//while(!txtstrmSrc.atEnd())
		for(int iImage = 0; iImage < slstEntry.count(); iImage++)
		{
			//QStringList slstImageFile = slstEntry.at(nImage).split(".");
			QString strImageFile = slstEntry.at(iImage);

			// src image filename
			//strLine = txtstrmSrc.readLine();
			//if(strLine.isNull())
			//	break;
			
			// get z coordinate value
			int nPosZ = strImageFile.indexOf('z', 0);//strLine.indexOf('z', 0);
			if(nPosZ == -1)
			{
				QMessageBox::critical(this, tr("Invalid src image filename"), 
									tr("%1 is an invalid src image filename.")
									.arg(strImageFile)); //.arg(strLine));
				m_bStartCropping = false;
				ui.pushButtonCrop->setEnabled(true);
				ui.pushButtonPauseResume->setEnabled(false);
				return;
			}
			rZ = strImageFile.mid(nPosZ+1, 6).toDouble();//strLine.mid(nPosZ+1, 6).toDouble();

			nImage = qRound((rZ - m_TissueBlock.m_rMinStartZ)\
							/m_TissueBlock.m_rThickness);
			//if(bFirst)
			//{
			//	bFirst = false;
			//	nStartImage = nImage;
			//}
#if 0			
			//if((nImage - nStartImage) == m_TissueBlock.m_vChunkPos[nIndexChunk])
			if(rZ == m_TissueBlock.m_vChunkPos[nIndexChunk])
				nIndexChunk++;
#endif
			// make src filename
			strSrcImage = QString(tr("%1/%2/%3")
									.arg(ui.lineEditSourceFolder->text())
									.arg(nSrcStartCol)
									.arg(strImageFile));//.arg(strLine));
			// make dest filename
			QString strZoomOutDir = m_Settings.m_strZoomOutDirPrefix + "1";
			//strDestImage = QString(tr("%1/%2/%3/%4%5")
			//							.arg(ui.lineEditDestFolder->text()) 
			//							.arg(strZoomOutDir)
			//							.arg(i)
			//							.arg(nImage)
			//							.arg(m_Settings.m_strDestFileFormat));
			strDestImage.sprintf("%s/%s/%d/%05d%s", 
										ui.lineEditDestFolder->text().toStdString().c_str(),
										strZoomOutDir.toStdString().c_str(),
										iCol, // jrkwon: %05d
										nImage,
										m_Settings.m_strDestFileFormat.toStdString().c_str());
#if 0			
			strOptions = QString(tr("%1x%2+%3+%4")
							.arg(m_TissueBlock.m_nWidth)
							.arg(m_TissueBlock.m_nLength)
							.arg(m_TissueBlock.m_vCropStartX[nIndexChunk])
							.arg(0));
			strArgs = QString(tr("%1 -crop %2 %3")
							.arg(strSrcImage)
							.arg(strOptions)
							.arg(strDestImage));
			PrintToOutput(strArgs);

			QStringList strlstArgs;
			strlstArgs << strSrcImage << tr("-crop") << strOptions << strDestImage;

			QString strImageMagickConvert;
			strImageMagickConvert = QString(tr("%1%2%3%4")
										 .arg(m_Settings.m_strProjectDir)
										 .arg(m_Settings.m_strToolkit)
										 .arg(m_Settings.m_strImageMagick)
										 .arg("/convert"));
#endif
			ui.progressBarColumn->setValue(iCol);
			ui.progressBarImage->setValue(iImage);
#if 0
			while(m_bProcessFinished == false || m_bPause)
			{
				QCoreApplication::processEvents();				
			}
			m_Process.start(strImageMagickConvert, strlstArgs);
			m_bProcessFinished = false;
			//PrintToOutput(strImageMagickConvert);

			QCoreApplication::processEvents();
#endif			
			// see if there already is a dest file, and do this only no dest file exists
			if(QFile::exists(strDestImage) == false)
			{
				quint32 nStartX;
				if(GetCropX(strSrcImage, nStartX))
				{
					//DoCrop(m_TissueBlock.m_vCropStartX[nIndexChunk], 0, 
					DoCrop(nStartX, 0, 
							m_TissueBlock.m_nWidth, m_TissueBlock.m_nLength,
							strSrcImage, strDestImage);
					QString strMsg(tr("CropX: %1, Src: %2, Dest: %3")
									.arg(nStartX).arg(strSrcImage).arg(strDestImage));
					PrintToOutput(strMsg);
				}
			}
			
			if(m_bStartCropping != true)
			{
				ui.pushButtonCrop->setEnabled(true);
				ui.pushButtonPauseResume->setEnabled(false);
				ui.progressBarColumn->setValue(0);
				ui.progressBarImage->setValue(0);
				return;
			}
		}
	}
	ui.pushButtonCrop->setEnabled(true);
	ui.pushButtonPauseResume->setEnabled(false);
}