17 std::vector<unsigned char> Vo_CHAR;
21 if (p!=
indexes.end() && p->detid==DetId)
24 size_t sd = Vo_CHAR.end() - Vo_CHAR.begin();
26 detregistry.
detid = DetId;
38 if (p==
indexes.end()|| p->detid!=DetId)
41 __builtin_prefetch((&
v_noises.front())+p->ibegin);
42 __builtin_prefetch((&
v_noises.front())+p->ibegin+96);
43 __builtin_prefetch((&
v_noises.front())+p->iend-96);
52 __builtin_prefetch((&
v_noises.front())+
p->ibegin);
53 __builtin_prefetch((&
v_noises.front())+
p->ibegin+96);
54 __builtin_prefetch((&
v_noises.front())+
p->iend-96);
63 DetIds_.reserve(
indexes.size());
65 DetIds_.push_back(
p->detid);
71 if (9*strip>=(range.second-range.first)*8){
73 <<
"[SiStripNoises::getNoise] looking for SiStripNoises for a strip out of range: strip " << strip;
81 v.push_back((static_cast<int16_t> (noise_*10.0 + 0.5) & 0x01FF)) ;
86 static const uint16_t BITS_PER_STRIP = 9;
87 const size_t VoSize = (size_t)((Vi.size() * BITS_PER_STRIP)/8+.999);
89 for(
size_t i = 0;
i<VoSize; ++
i)
92 for(
unsigned int stripIndex =0; stripIndex<Vi.size(); ++stripIndex){
93 unsigned char*
data = &Vo[VoSize-1];
94 uint32_t lowBit = stripIndex * BITS_PER_STRIP;
95 uint8_t firstByteBit = (lowBit & 0x7);
96 uint8_t firstByteNBits = 8 - firstByteBit;
97 uint8_t firstByteMask = 0xffu << firstByteBit;
98 uint8_t secondByteNbits = (BITS_PER_STRIP - firstByteNBits);
99 uint8_t secondByteMask = ~(0xffu << secondByteNbits);
101 *(data-lowBit/8) = (*(data-lowBit/8) & ~(firstByteMask)) | ((Vi[stripIndex] & 0xffu) <<firstByteBit);
102 *(data-lowBit/8-1) = (*(data-lowBit/8-1) & ~(secondByteMask)) | ((Vi[stripIndex] >> firstByteNBits) & secondByteMask);
132 size_t mysize = ((range.second-range.first) << 3) / 9;
133 size_t size = noises.size();
135 <<
"[SiStripNoises::allNoises] Requested noise for " << noises.size() <<
" strips, I have it only for " << mysize <<
" strips\n";
136 size_t size8 = size & (~0x7), carry = size & 0x7;
137 const uint8_t *ptr = (&*range.second) - 1;
138 std::vector<float>::iterator
out = noises.begin(), end8 = noises.begin() + size8;
142 *out =
static_cast<float> (
get9bits(ptr, 0) / 10.0f ); ++
out;
143 *out =
static_cast<float> (
get9bits(ptr, 1) / 10.0f ); ++
out;
144 *out =
static_cast<float> (
get9bits(ptr, 2) / 10.0f ); ++
out;
145 *out =
static_cast<float> (
get9bits(ptr, 3) / 10.0f ); ++
out;
146 *out =
static_cast<float> (
get9bits(ptr, 4) / 10.0f ); ++
out;
147 *out =
static_cast<float> (
get9bits(ptr, 5) / 10.0f ); ++
out;
148 *out =
static_cast<float> (
get9bits(ptr, 6) / 10.0f ); ++
out;
149 *out =
static_cast<float> (
get9bits(ptr, 7) / 10.0f ); ++
out;
152 for (
size_t rem = 0; rem < carry; ++rem ) {
153 *out =
static_cast<float> (
get9bits(ptr, rem) / 10.0f ); ++
out;
199 std::vector<float> vstripnoise;
201 ss <<
"detid" << std::setw(15) <<
"strip" << std::setw(10) <<
"noise" << std::endl;
205 for(;rit!=erit;++rit){
206 Nstrips = (rit->iend-rit->ibegin)*8/9;
207 vstripnoise.resize(Nstrips);
211 if( detId != oldDetId ) {
216 for(
size_t i=0;
i<Nstrips;++
i){
217 if(
i != 0 ) ss <<
" ";
218 ss << std::setw(15) <<
i << std::setw(10) << vstripnoise[
i] << std::endl;
227 std::stringstream tempss;
231 std::vector<float> vstripnoise;
233 for(;rit!=erit;++rit){
234 Nstrips = (rit->iend-rit->ibegin)*8/9;
235 vstripnoise.resize(Nstrips);
237 tempss <<
"\ndetid: " << rit->detid <<
" \t ";
238 mean=0; rms=0; min=10000; max=0;
240 DetId detId(rit->detid);
242 for(
size_t i=0;
i<Nstrips;++
i){
243 mean+=vstripnoise[
i];
244 rms+=vstripnoise[
i]*vstripnoise[
i];
245 if(vstripnoise[
i]<min) min=vstripnoise[
i];
246 if(vstripnoise[
i]>max) max=vstripnoise[
i];
248 summary.
add(detId, vstripnoise[
i]);
251 rms=
sqrt(rms/Nstrips-mean*mean);
254 tempss <<
"Nstrips " << Nstrips <<
" \t; mean " << mean <<
" \t; rms " << rms <<
" \t; min " << min <<
" \t; max " << max <<
"\t " ;
256 ss << std::endl <<
"Summary:" << std::endl;
263 std::vector<ratioData>
result;
270 for(;iter!=iterE;++iter){
273 aData.
detid=iter->detid;
279 size_t strip=0, stripE= (range.second-range.first)*8/9;
280 for (;strip<stripE;++strip){
281 if(d_range.first==d_range.second){
286 aData.
values.push_back(value);
288 result.push_back(aData);
295 for(;iter!=iterE;++iter){
300 if(range.first==range.second){
301 aData.
detid=iter->detid;
303 size_t strip=0, stripE= (d_range.second-d_range.first)*8/9;
304 for (;strip<stripE;++strip){
306 aData.
values.push_back(value);
308 result.push_back(aData);
static uint16_t get9bits(const uint8_t *&ptr, int8_t skip)
PixelRecoRange< float > Range
std::vector< float > values
std::vector< uint16_t > InputVector
std::vector< ratioData > operator/(const SiStripNoises &d)
static void encode(const InputVector &Vi, std::vector< unsigned char > &Vo_CHAR)
static std::string const input
static float getNoiseFast(const uint16_t &strip, const Range &range)
static float getNoise(uint16_t strip, const Range &range)
Registry::const_iterator RegistryIterator
void print(std::stringstream &ss, const bool mean=true) const
bool put(const uint32_t &detID, const InputVector &input)
RegistryIterator getRegistryVectorEnd() const
void getDetIds(std::vector< uint32_t > &DetIds_) const
RegistryIterator getRegistryVectorBegin() const
Range getRangeByPos(unsigned short pos) const
const Range getRange(const uint32_t detID) const
void printDebug(std::stringstream &ss) const
void printSummary(std::stringstream &ss) const
std::pair< ContainerIterator, ContainerIterator > Range
void allNoises(std::vector< float > &noises, const Range &range) const
ContainerIterator getDataVectorBegin() const
void add(const DetId &detid, const float &value)
Used to compute the mean value of the value variable divided by subdetector, layer and mono/stereo...
tuple size
Write out results.
void setData(float noise_, InputVector &vped)