15 : inputTags(conf.getParameter<std::vector<edm::InputTag> >(
"RawDigiProducersList")),
17 storeCM(conf.getParameter<bool>(
"storeCM")),
18 doAPVRestore(conf.getParameter<bool>(
"doAPVRestore")),
19 mergeCollections(conf.getParameter<bool>(
"mergeCollections"))
45 produces< edm::DetSetVector<SiStripDigi> > (inputTag->instance());
47 produces< edm::DetSetVector<SiStripRawDigi> > (inputTag->instance());
51 produces< edm::DetSetVector<SiStripProcessedRawDigi> > (
"BADAPVBASELINE");
54 produces< edm::DetSetVector<SiStripDigi> > (
"BADAPVBASELINEPOINTS");
57 produces< edm::DetSetVector<SiStripProcessedRawDigi> > (
"APVCM");
83 std::vector<edm::DetSet<SiStripDigi> > output_base;
84 std::vector<edm::DetSet<SiStripRawDigi> > output_base_raw;
87 processRaw(*inputTag, *input, output_base, output_base_raw );
90 e.
put( output, inputTag->instance() );
95 e.
put(outputraw, inputTag->instance() );
104 e.
put(outputbaseline,
"BADAPVBASELINE" );
109 e.
put(outputbaselinepoints,
"BADAPVBASELINEPOINTS" );
114 e.
put( outputAPVCM,
"APVCM");
128 std::vector<edm::DetSet<SiStripDigi> > outputdigi;
129 std::vector<edm::DetSet<SiStripRawDigi> > outputraw;
131 if (inputraw->size())
132 processRaw(*inputTag, *inputraw, outputdigi, outputraw );
135 for ( std::vector<
edm::DetSet<SiStripDigi> >::const_iterator itinputdigi = inputdigi->begin(); itinputdigi !=inputdigi->end(); ++itinputdigi) {
136 outputdigi.push_back(*itinputdigi);
140 e.
put( output, inputTag->instance() );
166 outputraw.reserve(10000);
168 rawDigis = input.
begin(); rawDigis != input.
end(); ++rawDigis) {
172 int16_t nAPVflagged = 0;
174 if (
"ProcessedRaw" == inputTag.
instance()) {
175 std::vector<int16_t> processedRawDigis, processedRawDigisCopy ;
176 transform(rawDigis->begin(), rawDigis->end(), back_inserter(processedRawDigis), boost::bind(&
SiStripRawDigi::adc , _1));
178 processedRawDigisCopy.assign(processedRawDigis.begin(), processedRawDigis.end());
180 algorithms->subtractorCMN->subtract( rawDigis->id, processedRawDigis);
182 nAPVflagged =
algorithms->restorer->inspect( rawDigis->id, processedRawDigisCopy,
algorithms->subtractorCMN->getAPVsCM() );
183 algorithms->restorer->restore( processedRawDigis );
185 algorithms->suppressor->suppress( processedRawDigis, suppressedDigis );
187 const std::vector< std::pair<short,float> >& vmedians=
algorithms->subtractorCMN->getAPVsCM();
190 std::map< uint16_t, std::vector < int16_t> >& baselinemap =
algorithms->restorer->GetBaselineMap();
197 }
else if (
"VirginRaw" == inputTag.
instance()) {
198 std::vector<int16_t> processedRawDigis(rawDigis->size()), processedRawDigisCopy;
199 algorithms->subtractorPed->subtract( *rawDigis, processedRawDigis);
201 processedRawDigisCopy.assign(processedRawDigis.begin(), processedRawDigis.end());
203 algorithms->subtractorCMN->subtract( rawDigis->id, processedRawDigis);
205 nAPVflagged =
algorithms->restorer->inspect( rawDigis->id, processedRawDigisCopy,
algorithms->subtractorCMN->getAPVsCM() );
206 algorithms->restorer->restore( processedRawDigis );
208 algorithms->suppressor->suppress( processedRawDigis, suppressedDigis );
210 const std::vector< std::pair<short,float> >& vmedians =
algorithms->subtractorCMN->getAPVsCM();
213 std::map< uint16_t, std::vector < int16_t> >& baselinemap =
algorithms->restorer->GetBaselineMap();
224 << inputTag.
instance() <<
" unknown. SiStripZeroZuppression can only process types \"VirginRaw\" and \"ProcessedRaw\" ";
227 output.push_back(suppressedDigis);
230 outputraw.push_back(*rawDigis);
241 std::map< uint16_t, std::vector < int16_t> >::iterator itBaselineMap;
243 for(
size_t i=0;
i<vmedians.size();++
i){
244 uint16_t APVn = vmedians[
i].first;
245 float median = vmedians[
i].second;
246 itBaselineMap = baselinemap.find(APVn);
247 if(itBaselineMap==baselinemap.end()){
255 if(baselineDetSet.
size())
288 for(
size_t i=0;
i<vmedians.size();++
i){
289 if(vmedians[
i].
first>apvNb){
290 for(
int i=0;
i<vmedians[
i].first-apvNb;++
i){
const uint16_t & adc() const
std::vector< edm::InputTag > inputTags
T getParameter(std::string const &) const
virtual void produce(edm::Event &, const edm::EventSetup &)
void push_back(const T &t)
void CollectionMergedZeroSuppression(edm::Event &)
A signed Digi for the silicon strip detector, containing only adc information, and suitable for stori...
bool produceCalculatedBaseline
std::vector< edm::DetSet< SiStripDigi > > output_baseline_points
void StandardZeroSuppression(edm::Event &)
bool produceBaselinePoints
void storeBaselinePoints(uint32_t id, std::vector< std::map< uint16_t, int16_t > > &BasPointVec)
U second(std::pair< T, U > const &p)
std::auto_ptr< SiStripRawProcessingAlgorithms > algorithms
void storeCMN(uint32_t, const std::vector< std::pair< short, float > > &)
std::vector< edm::DetSet< SiStripProcessedRawDigi > > output_apvcm
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
void storeBaseline(uint32_t, const std::vector< std::pair< short, float > > &, std::map< uint16_t, std::vector< int16_t > > &)
std::vector< edm::DetSet< SiStripProcessedRawDigi > > output_baseline
void processRaw(const edm::InputTag &, const edm::DetSetVector< SiStripRawDigi > &, std::vector< edm::DetSet< SiStripDigi > > &, std::vector< edm::DetSet< SiStripRawDigi > > &)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
iterator end()
Return the off-the-end iterator.
SiStripZeroSuppression(const edm::ParameterSet &)
iterator begin()
Return an iterator to the first DetSet.
collection_type::const_iterator const_iterator
std::vector< edm::InputTag >::const_iterator tag_iterator_t