CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripProcessedRawDigiProducer.cc
Go to the documentation of this file.
2 
7 
10 
14 
15 #include <functional>
16 
18  : inputTags(conf.getParameter<std::vector<edm::InputTag> >("DigiProducersList")),
19  subtractorPed(SiStripRawProcessingFactory::create_SubtractorPed(conf)),
20  subtractorCMN(SiStripRawProcessingFactory::create_SubtractorCMN(conf)){
21 
22  produces< edm::DetSetVector<SiStripProcessedRawDigi> >("");
23 }
24 
27 
28  std::auto_ptr< edm::DetSetVector<SiStripProcessedRawDigi> > output(new edm::DetSetVector<SiStripProcessedRawDigi>());
31 
32  es.get<SiStripGainRcd>().get(gainHandle);
33  subtractorPed->init(es);
34  subtractorCMN->init(es);
35 
36  std::string label = findInput(inputRawdigis, e);
37  if( "VirginRaw" == label ) vr_process(*inputRawdigis, *output);
38  else if( "ProcessedRaw" == label ) pr_process(*inputRawdigis, *output);
39  else if( "ZeroSuppressed" == findInput(inputDigis,e) ) zs_process(*inputDigis, *output);
40  else
41  edm::LogError("Input Not Found");
42 
43  e.put(output);
44 }
45 
46 template<class T>
47 inline
50 
51  for( std::vector<edm::InputTag>::const_iterator
52  inputTag = inputTags.begin(); inputTag != inputTags.end(); ++inputTag ) {
53 
54  e.getByLabel(*inputTag, handle);
55  if( handle.isValid() && !handle->empty() ) {
56  edm::LogInfo("Input") << *inputTag;
57  return inputTag->instance();
58  }
59  }
60  return "Input Not Found";
61 }
62 
63 
66  std::vector<float> digis;
67  for(edm::DetSetVector<SiStripDigi>::const_iterator detset = input.begin(); detset != input.end(); detset++ ) {
68  digis.clear();
69  for(edm::DetSet<SiStripDigi>::const_iterator digi = detset->begin(); digi != detset->end(); digi++) {
70  digis.resize( digi->strip(), 0);
71  digis.push_back( digi->adc() );
72  }
73  common_process( detset->id, digis, output);
74  }
75 }
76 
79  for(edm::DetSetVector<SiStripRawDigi>::const_iterator detset=input.begin(); detset!=input.end(); detset++) {
80  std::vector<float> digis;
81  transform(detset->begin(), detset->end(), back_inserter(digis), boost::bind(&SiStripRawDigi::adc , _1));
82  subtractorCMN->subtract(detset->id, 0, digis);
83  common_process( detset->id, digis, output);
84  }
85 }
86 
89  for(edm::DetSetVector<SiStripRawDigi>::const_iterator detset=input.begin(); detset!=input.end(); detset++) {
90  std::vector<int16_t> int_digis(detset->size());
91  subtractorPed->subtract(*detset,int_digis);
92  std::vector<float> digis(int_digis.begin(), int_digis.end());
93  subtractorCMN->subtract(detset->id, 0, digis);
94  common_process( detset->id, digis, output);
95  }
96 }
97 
99 common_process(const uint32_t detId, std::vector<float> & digis, edm::DetSetVector<SiStripProcessedRawDigi>& output) {
100 
101  //Apply Gains
102  SiStripApvGain::Range detGainRange = gainHandle->getRange(detId);
103  for(std::vector<float>::iterator it=digis.begin(); it<digis.end(); it++)
104  (*it)/= (gainHandle->getStripGain(it-digis.begin(), detGainRange));
105 
106  //Insert as DetSet
108  copy(digis.begin(), digis.end(), back_inserter(ds.data) );
109  output.insert(ds);
110 }
const uint16_t & adc() const
std::auto_ptr< SiStripPedestalsSubtractor > subtractorPed
void pr_process(const edm::DetSetVector< SiStripRawDigi > &, edm::DetSetVector< SiStripProcessedRawDigi > &)
SiStripProcessedRawDigiProducer(edm::ParameterSet const &)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:85
tuple handle
Definition: patZpeak.py:22
std::pair< ContainerIterator, ContainerIterator > Range
void common_process(const uint32_t, std::vector< float > &, edm::DetSetVector< SiStripProcessedRawDigi > &)
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:356
std::string findInput(edm::Handle< T > &handle, const edm::Event &e)
void produce(edm::Event &e, const edm::EventSetup &es)
tuple conf
Definition: dbtoconf.py:185
std::auto_ptr< SiStripCommonModeNoiseSubtractor > subtractorCMN
const T & get() const
Definition: EventSetup.h:55
void zs_process(const edm::DetSetVector< SiStripDigi > &, edm::DetSetVector< SiStripProcessedRawDigi > &)
void insert(detset const &s)
Insert the given DetSet.
Definition: DetSetVector.h:234
collection_type data
Definition: DetSet.h:79
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:341
collection_type::const_iterator const_iterator
Definition: DetSet.h:34
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:106
void vr_process(const edm::DetSetVector< SiStripRawDigi > &, edm::DetSetVector< SiStripProcessedRawDigi > &)