Exemplo n.º 1
0
	int Compute( int _ymin, int _ymax ) const
	{
		int d = sizeof(unsigned short) * m_width;
		if ( !m_pSrc || !m_pDst || m_srcStride < d || m_dstStride < d )
			return 0;
		if ( _ymin < 0 )
			_ymin = 0;
		if ( _ymax > m_height )
			_ymax = m_height;
		int _xmax = m_width;
		d = m_R;
		int ymin = _ymin + d;
		int ymax = _ymax - d;
		int xmin = d+1;
		int xmax = _xmax - d;

		unsigned short * p;
		int x,y;
		std::vector< unsigned short > vec( (2*m_R+1)*(2*m_R+1) );
		Histogram histogram( m_N );
		int _where = 0;
		for (y =_ymin;y<_ymax;++y)
		{
			p = TCV_GET_LINE_PTR( unsigned short, m_pDst, m_dstStride, y );
			if ( y>=ymin && y<ymax )
			{
				for (x=0;x<d;++x)
					*(p+x) = compute_boundscheck( x, y, vec );
				
				FillHistogram( d, y, histogram );
				*(p+d) = histogram.getmedian();
				for (x=xmin;x<xmax;++x)
				{
					UpdateHistogram( x, y, histogram );
					*(p+x) = histogram.getmedian();
				}
				for (x=xmax;x<_xmax;++x)
					*(p+x) = compute_boundscheck( x, y, vec );
			}
			else
			{
				for (x=0;x<_xmax;++x)
					*(p+x) = compute_boundscheck( x, y, vec );
			}
		}
		
		return 1;
	}
Exemplo n.º 2
0
int SIMMCAnalysisThread::Analyze() {
  // Read SIMDAQ
  double* ADC1;
  int* Ch1;
  qint64* ts1;
  int nADC1;

  QPair<int, double*> pADC1 = ReadData<double>("SIMDAQ1","ADCOutput");
  nADC1 = pADC1.first;
  ADC1 = pADC1.second;
  QPair<int, int*> pCH1 = ReadData<int>("SIMDAQ1","CHAN");
  Ch1 = pCH1.second;
  QPair<int, qint64*> pTS1 = ReadData<qint64>("SIMDAQ1","TS");
  ts1 = pTS1.second;

  // Loop over channels
  for (int channel=0; channel<n_channels_; channel++) {
    // Loop over all events and pull out those from this channel
    QList<double> ADCs_from_channel;
    for (int j=0; j<nADC1; j++) {
      if (Ch1[j]==channel) {
        ADCs_from_channel.append(ADC1[j]);
      }
    }
    // Add array of ADCs from this channel to the channel's histogram
    QString histname = "ADC Channel "+QString::number(channel);
    if (GetHistogram(histname) and ADCs_from_channel.size()>0) {
      UpdateHistogram(histname, &(ADCs_from_channel[0]),ADCs_from_channel.size());
    }
  }

  QList<double> ADCs_channel1;
  QList<double> ADCs_channel2;
  for (int i1 = 0; i1 < nADC1; ++i1) {
    for (int i2 = 0; i2 < nADC1; ++i2) {
      if (Ch1[i1] == 0 && Ch1[i2] == 1) {
        ADCs_channel1.append(ADC1[i1]);
        ADCs_channel2.append(ADC1[i2]);
      }
    }
  }
  if (ADCs_channel1.size()>0) {
    UpdateHistogram("ADC Channel 0 by Channel 1",
                    &(ADCs_channel1[0]), &(ADCs_channel2[0]),ADCs_channel1.size());
  }

  // Read SIMDAQ2
  double* ADC2;
  int* Ch2;
  qint64* ts2;
  int nADC2;

  QPair<int, double*> pADC2 = ReadData<double>("SIMDAQ2","ADCOutput");
  nADC2 = pADC2.first;
  ADC2 = pADC2.second;
  QPair<int, int*> pCH2 = ReadData<int>("SIMDAQ2","CHAN");
  Ch2 = pCH2.second;
  QPair<int, qint64*> pTS2 = ReadData<qint64>("SIMDAQ2","TS");
  ts2 = pTS2.second;

  // Loop over channels
  for (int channel=0; channel<n_channels_; channel++) {
    // Loop over all events and pull out those from this channel
    QList<double> ADCs_from_channel;
    for (int j=0; j<nADC2; j++) {
      if (Ch2[j]==channel) {
        ADCs_from_channel.append(ADC2[j]);
      }
    }
    // Add array of ADCs from this channel to the channel's histogram
    QString histname = "ADC Channel "+QString::number(channel);
    if (GetHistogram(histname) and ADCs_from_channel.size()>0) {
      UpdateHistogram(histname, &(ADCs_from_channel[0]),ADCs_from_channel.size());
    }
  }

  ADCs_channel1.clear();
  ADCs_channel2.clear();
  for (int i1 = 0; i1 < nADC2; ++i1) {
    for (int i2 = 0; i2 < nADC2; ++i2) {
      if (Ch2[i1] == 0 && Ch2[i2] == 1) {
        ADCs_channel1.append(ADC2[i1]);
        ADCs_channel2.append(ADC2[i2]);
      }
    }
  }
  if (ADCs_channel1.size()>0) {
    UpdateHistogram("ADC Channel 0 by Channel 1",
                    &(ADCs_channel1[0]), &(ADCs_channel2[0]),ADCs_channel1.size());
  }

  return 0;
}
Exemplo n.º 3
0
int SIMMCAnalysisThread::Analyze() {
  // Read SIMDAQ
  double* ADC1;
  int* Ch1;
  qint64* ts1;
  int nADC1;

  QPair<int, double*> pADC1 = ReadData<double>("SIMDAQ1","ADCOutput");
  nADC1 = pADC1.first;
  ADC1 = pADC1.second;
  QPair<int, int*> pCH1 = ReadData<int>("SIMDAQ1","CHAN");
  Ch1 = pCH1.second;
  QPair<int, qint64*> pTS1 = ReadData<qint64>("SIMDAQ1","TS");
  ts1 = pTS1.second;

  // these should all be the same
  for (int i = 0; i < nADC1; ++i) {
    QString histname = "ADC Channel "+QString::number(Ch1[i]);
    if (GetHistogram(histname)) {
      UpdateHistogram(histname, &(ADC1[i]),1);
    } else {
      std::cerr << "SIMMCAnalysisThread::Analyze: ADC1 channel out of range!  ch="
		<< Ch1[i] << std::endl;
    }
  }

  for (int i1 = 0; i1 < nADC1; ++i1) {
    for (int i2 = 0; i2 < nADC1; ++i2) {
      if (Ch1[i1] == 0 && Ch1[i2] == 1) {
	UpdateHistogram("ADC Channel 0 by Channel 1",&(ADC1[i1]),&(ADC1[i2]),1);
      }
    }
  }

  // Read SIMDAQ2
  double* ADC2;
  int* Ch2;
  qint64* ts2;
  int nADC2;

  QPair<int, double*> pADC2 = ReadData<double>("SIMDAQ2","ADCOutput");
  nADC2 = pADC2.first;
  ADC2 = pADC2.second;
  QPair<int, int*> pCH2 = ReadData<int>("SIMDAQ2","CHAN");
  Ch2 = pCH2.second;
  QPair<int, qint64*> pTS2 = ReadData<qint64>("SIMDAQ2","TS");
  ts2 = pTS2.second;

  for (int i = 0; i < nADC2; ++i) {
    QString histname = "ADC Channel "+QString::number(Ch2[i]);
    if (GetHistogram(histname)) {
      UpdateHistogram(histname, &(ADC2[i]), 1);
    } else {
      std::cerr << "SIMMCAnalysisThread::Analyze: ADC2 channel out of range!  ch=" 
                << Ch2[i] << std::endl;
    }
  }
  for (int i1 = 0; i1 < nADC2; ++i1) {
    for (int i2 = 0; i2 < nADC2; ++i2) {
      if (Ch2[i1] == 0 && Ch2[i2] == 1) {
	UpdateHistogram("ADC Channel 0 by Channel 1", 
                        &(ADC2[i1]), &(ADC2[i2]),1);
      }
    }
  }

  return 0;
}