ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/ShallowTools/plugins/ShallowDigisProducer.cc
Revision: 1.1
Committed: Sat Jun 6 14:23:09 2009 UTC (15 years, 11 months ago) by bbetchar
Content type: text/plain
Branch: MAIN
CVS Tags: V03-00-02, V03-00-01, V03-00-00
Log Message:
Move directories around

File Contents

# User Rev Content
1 bbetchar 1.1 #include "UserCode/ShallowTools/interface/ShallowDigisProducer.h"
2    
3     #include "DataFormats/Common/interface/DetSetVector.h"
4     #include "DataFormats/Common/interface/DetSetVectorNew.h"
5     #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
6     #include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h"
7     #include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
8     #include "boost/foreach.hpp"
9    
10     ShallowDigisProducer::ShallowDigisProducer(const edm::ParameterSet& conf)
11     : inputTags(conf.getParameter<std::vector<edm::InputTag> >("DigiProducersList"))
12     {
13     produces<std::vector<unsigned> >("id");
14     produces<std::vector<unsigned> >("subdet");
15     produces<std::vector<unsigned> >("strip");
16     produces<std::vector<unsigned> >("adc");
17     produces<std::vector<float> >("noise");
18     }
19    
20     void ShallowDigisProducer::
21     insert(products& p, edm::Event& e) {
22     e.put(p.id, "id");
23     e.put(p.subdet, "subdet");
24     e.put(p.strip, "strip");
25     e.put(p.adc, "adc");
26     e.put(p.noise, "noise");
27     }
28    
29     template<class T>
30     inline
31     void ShallowDigisProducer::
32     recordDigis(const T& digiCollection, products& p) {
33     BOOST_FOREACH(const typename T::value_type set, digiCollection) {
34     SiStripNoises::Range detNoiseRange = noiseHandle->getRange(set.detId());
35     BOOST_FOREACH(const SiStripDigi digi, set) {
36     p.id->push_back(set.detId());
37     p.subdet->push_back((set.detId()>>25)&0x7);
38     p.strip->push_back(digi.strip());
39     p.adc->push_back(digi.adc());
40     p.noise->push_back(noiseHandle->getNoise( digi.strip(), detNoiseRange));
41     }
42     }
43     }
44    
45     void ShallowDigisProducer::
46     produce(edm::Event& e, const edm::EventSetup& es) {
47     products p;
48     edm::Handle< edm::DetSetVector<SiStripDigi> > inputOld;
49     edm::Handle< edmNew::DetSetVector<SiStripDigi> > inputNew;
50     es.get<SiStripNoisesRcd>().get(noiseHandle);
51     if( findInput(inputOld, e) ) recordDigis(*inputOld, p); else
52     if( findInput(inputNew, e) ) recordDigis(*inputNew, p); else
53     edm::LogWarning("Input Not Found");
54     insert(p,e);
55     }
56    
57     template<class T>
58     inline
59     bool ShallowDigisProducer::
60     findInput(edm::Handle<T>& handle, const edm::Event& e) {
61     BOOST_FOREACH( const edm::InputTag inputTag, inputTags) {
62     e.getByLabel(inputTag, handle);
63     if( handle.isValid() && !handle->empty() ) {
64     LogDebug("Input") << inputTag;
65     return true;
66     }
67     }
68     return false;
69     }