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