20 using namespace commonmode;
54 Detector::frame_t::const_iterator
pixel,
55 Detector::frame_t::const_iterator
offset,
56 Detector::frame_t::const_iterator
noise,
57 CommonData::mask_t::const_iterator
mask,
67 if((offsetcorrectedPixel - initialLevel) < (multiplier * *noise))
69 pixels.push_back(offsetcorrectedPixel);
82 Detector::frame_t::const_iterator
offset(_commondata->offsetMap.begin()+idx);
83 Detector::frame_t::const_iterator
noise(_commondata->noiseMap.begin()+idx);
84 CommonData::mask_t::const_iterator
mask(_commondata->mask.begin()+idx);
86 size_t accumulatedValues(0);
92 pixel_wo_offset = *pixel - *
offset;
93 if((pixel_wo_offset) < (_multiplier * *noise))
96 commlvl += ((pixel_wo_offset - commlvl) / accumulatedValues);
102 return (_minNbrPixels < accumulatedValues ? commlvl : 0.);
109 _minNbrPixels = s.
value(
"MinNbrPixels",8).toUInt();
119 _commondata->offsetMap.begin()+idx,
120 _commondata->noiseMap.begin()+idx,
121 _commondata->mask.begin()+idx,
122 _multiplier, 0., pixels);
123 const int nbrElementsOfInterest
124 (pixels.size() - _nbrMinimumElementsToRemove - _nbrMaximumElementsToRemove);
125 const bool shouldCalcCommonMode (_minNbrPixels < nbrElementsOfInterest);
126 if (shouldCalcCommonMode)
128 sort(pixels.begin(),pixels.end());
129 pixels_t::iterator begin(pixels.begin());
130 pixels_t::iterator end(pixels.end());
131 advance(begin,_nbrMinimumElementsToRemove);
132 advance(end,-1*(_nbrMaximumElementsToRemove));
133 commonmodelevel = accumulate(begin,end,0) /
static_cast<Detector::pixel_t>(distance(begin,end));
137 commonmodelevel = 0.;
139 return commonmodelevel;
146 _nbrMaximumElementsToRemove = s.
value(
"NbrMaxDisregardedValues",5).toUInt();
147 _nbrMinimumElementsToRemove = s.
value(
"NbrMinDisregardedValues",0).toUInt();
148 _minNbrPixels = s.
value(
"MinNbrPixels",8).toUInt();
157 _commondata->offsetMap.begin()+idx,
158 _commondata->noiseMap.begin()+idx,
159 _commondata->mask.begin()+idx,
160 _multiplier, 0., pixels);
161 const int nbrElementsOfInterest
162 (pixels.size() - _nbrDisregardedMinimumElements - _nbrDisregardedMaximumElements);
163 const bool shouldCalcCommonMode (_minNbrPixels < nbrElementsOfInterest);
164 if (shouldCalcCommonMode)
166 size_t median = 0.5*nbrElementsOfInterest + _nbrDisregardedMinimumElements;
167 nth_element(pixels.begin(),pixels.begin()+median,pixels.end());
168 commonmodelevel = pixels[median];
172 commonmodelevel = 0.;
174 return commonmodelevel;
181 _nbrDisregardedMaximumElements = s.
value(
"NbrMaxDisregardedValues",5).toUInt();
182 _nbrDisregardedMinimumElements = s.
value(
"NbrMinDisregardedValues",0).toUInt();
183 _minNbrPixels = s.
value(
"MinNbrPixels",8).toUInt();
void createPixelList(size_t nbrPixels, Detector::frame_t::const_iterator pixel, Detector::frame_t::const_iterator offset, Detector::frame_t::const_iterator noise, CommonData::mask_t::const_iterator mask, float multiplier, Detector::pixel_t initialLevel, pixels_t &pixels)
build up the list of pixels that contribute to the common mode calculation
Detector::pixel_t operator()(Detector::frame_t::const_iterator pixel, size_t idx) const
the operation
void loadSettings(CASSSettings &s)
load the settings of this calculator
void loadSettings(CASSSettings &s)
load the settings of this calculator
float pixel_t
define a pixel of the pixel detector
std::vector< Detector::pixel_t > pixels_t
Detector::pixel_t operator()(Detector::frame_t::const_iterator pixel, size_t idx) const
the operation
value(const QString &key, const QVariant &defaultValue=QVariant()
noise and mask[Processor]
contains the common data for one advanced pixeldetector
file contains specialized class that do the settings for cass
contains all available common mode calculators.
int16_t pixel
define a pixel
beginGroup(const QString &prefix)
set up how to create the noise