CMS 3D CMS Logo

HLTEcalPhiSymFilter.cc
Go to the documentation of this file.
1 #include "HLTEcalPhiSymFilter.h"
14 
15 
17  barrelDigisToken_( consumes<EBDigiCollection>( config.getParameter<edm::InputTag> ("barrelDigiCollection") ) ),
18  endcapDigisToken_( consumes<EEDigiCollection>( config.getParameter<edm::InputTag> ("endcapDigiCollection") ) ),
19  barrelUncalibHitsToken_( consumes<EcalUncalibratedRecHitCollection>( config.getParameter<edm::InputTag> ("barrelUncalibHitCollection") ) ),
20  endcapUncalibHitsToken_( consumes<EcalUncalibratedRecHitCollection>( config.getParameter<edm::InputTag> ("endcapUncalibHitCollection") ) ),
21  barrelHitsToken_( consumes<EBRecHitCollection>( config.getParameter<edm::InputTag> ("barrelHitCollection") ) ),
22  endcapHitsToken_( consumes<EERecHitCollection>( config.getParameter<edm::InputTag> ("endcapHitCollection") ) ),
23  phiSymBarrelDigis_( config.getParameter<std::string> ("phiSymBarrelDigiCollection") ),
24  phiSymEndcapDigis_( config.getParameter<std::string> ("phiSymEndcapDigiCollection") ),
25  ampCut_barlP_( config.getParameter<std::vector<double> > ("ampCut_barrelP") ),
26  ampCut_barlM_( config.getParameter<std::vector<double> > ("ampCut_barrelM") ),
27  ampCut_endcP_( config.getParameter<std::vector<double> > ("ampCut_endcapP") ),
28  ampCut_endcM_( config.getParameter<std::vector<double> > ("ampCut_endcapM") ),
29  statusThreshold_( config.getParameter<uint32_t> ("statusThreshold") ),
30  useRecoFlag_( config.getParameter<bool>("useRecoFlag") )
31 {
32  //register your products
33  produces<EBDigiCollection>(phiSymBarrelDigis_);
34  produces<EEDigiCollection>(phiSymEndcapDigis_);
35 }
36 
37 
39 
40 void
43  desc.add<edm::InputTag>("barrelDigiCollection",edm::InputTag("ecalDigis","ebDigis"));
44  desc.add<edm::InputTag>("endcapDigiCollection",edm::InputTag("ecalDigis","eeDigis"));
45  desc.add<edm::InputTag>("barrelUncalibHitCollection",edm::InputTag("ecalUncalibHit","EcalUncalibRecHitsEB"));
46  desc.add<edm::InputTag>("endcapUncalibHitCollection",edm::InputTag("ecalUncalibHit","EcalUncalibRecHitsEE"));
47  desc.add<edm::InputTag>("barrelHitCollection",edm::InputTag("ecalRecHit","EcalRecHitsEB"));
48  desc.add<edm::InputTag>("endcapHitCollection",edm::InputTag("ecalRecHit","EcalRecHitsEE"));
49  desc.add<unsigned int>("statusThreshold",3);
50  desc.add<bool>("useRecoFlag",false);
51  desc.add<std::vector<double> >("ampCut_barrelP",{8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,
52  8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,
53  8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.});
54  desc.add<std::vector<double> >("ampCut_barrelM",{8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,
55  8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,
56  8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.});
57  desc.add<std::vector<double> >("ampCut_endcapP",{12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,
58  12.,12.,12.,12.,12.});
59  desc.add<std::vector<double> >("ampCut_endcapM",{12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,12.,
60  12.,12.,12.,12.,12.});
61  desc.add<std::string>("phiSymBarrelDigiCollection","phiSymEcalDigisEB");
62  desc.add<std::string>("phiSymEndcapDigiCollection","phiSymEcalDigisEE");
63  descriptions.add("hltEcalPhiSymFilter",desc);
64 }
65 
66 
67 // ------------ method called to produce the data ------------
68 bool
70 {
71  using namespace edm;
72  using namespace std;
73 
74  //Get ChannelStatus from DB
76  if (! useRecoFlag_) setup.get<EcalChannelStatusRcd>().get(csHandle);
77  const EcalChannelStatus& channelStatus = *csHandle;
78 
79  //Get iRing-geometry
81  setup.get<CaloGeometryRecord>().get(geoHandle);
83  EcalRingCalibrationTools CalibRing;
84 
85  static const short N_RING_BARREL = EcalRingCalibrationTools::N_RING_BARREL;
86  static const short N_RING_ENDCAP = EcalRingCalibrationTools::N_RING_ENDCAP;
87 
88  Handle<EBDigiCollection> barrelDigisHandle;
89  Handle<EEDigiCollection> endcapDigisHandle;
90  Handle<EcalUncalibratedRecHitCollection> barrelUncalibRecHitsHandle;
91  Handle<EcalUncalibratedRecHitCollection> endcapUncalibRecHitsHandle;
92  Handle<EBRecHitCollection> barrelRecHitsHandle;
93  Handle<EERecHitCollection> endcapRecHitsHandle;
94 
95  event.getByToken(barrelDigisToken_,barrelDigisHandle);
96  event.getByToken(endcapDigisToken_,endcapDigisHandle);
97  event.getByToken(barrelUncalibHitsToken_,barrelUncalibRecHitsHandle);
98  event.getByToken(endcapUncalibHitsToken_,endcapUncalibRecHitsHandle);
99  event.getByToken(barrelHitsToken_,barrelRecHitsHandle);
100  event.getByToken(endcapHitsToken_,endcapRecHitsHandle);
101 
102  //Create empty output collections
103  std::unique_ptr< EBDigiCollection > phiSymEBDigiCollection( new EBDigiCollection );
104  std::unique_ptr< EEDigiCollection > phiSymEEDigiCollection( new EEDigiCollection );
105 
106  const EBDigiCollection* EBDigis = barrelDigisHandle.product();
107  const EEDigiCollection* EEDigis = endcapDigisHandle.product();
108  const EBRecHitCollection* EBRechits = barrelRecHitsHandle.product();
109  const EERecHitCollection* EERechits = endcapRecHitsHandle.product();
110 
111  //Select interesting EcalDigis (barrel)
113  for (itunb=barrelUncalibRecHitsHandle->begin(); itunb!=barrelUncalibRecHitsHandle->end(); itunb++) {
114  EcalUncalibratedRecHit hit = (*itunb);
115  EBDetId hitDetId = hit.id();
116  uint16_t statusCode = 0;
117  if (useRecoFlag_) statusCode=(*EBRechits->find(hit.id())).recoFlag();
118  else statusCode = channelStatus[itunb->id().rawId()].getStatusCode();
119  int iRing = CalibRing.getRingIndex(hitDetId);
120  float ampCut = 0.;
121  if(hitDetId.ieta()<0) ampCut = ampCut_barlM_[iRing];
122  else if(hitDetId.ieta()>0) ampCut = ampCut_barlP_[iRing-N_RING_BARREL/2];
123  float amplitude = hit.amplitude();
124  if( statusCode <=statusThreshold_ && amplitude > ampCut){
125  phiSymEBDigiCollection->push_back((*EBDigis->find(hit.id())).id(),(*EBDigis->find(hit.id())).begin());
126  }
127  }
128 
129  //Select interesting EcalDigis (endcaps)
131  for (itune=endcapUncalibRecHitsHandle->begin(); itune!=endcapUncalibRecHitsHandle->end(); itune++) {
132  EcalUncalibratedRecHit hit = (*itune);
133  EEDetId hitDetId = hit.id();
134  uint16_t statusCode = 0;
135  if (useRecoFlag_) statusCode=(*EERechits->find(hit.id())).recoFlag();
136  else statusCode = channelStatus[itune->id().rawId()].getStatusCode();
137  int iRing = CalibRing.getRingIndex(hitDetId);
138  float ampCut = 0.;
139  if(hitDetId.zside()<0) ampCut = ampCut_endcM_[iRing-N_RING_BARREL];
140  else if(hitDetId.zside()>0) ampCut = ampCut_endcP_[iRing-N_RING_BARREL-N_RING_ENDCAP/2];
141  float amplitude = hit.amplitude();
142  if( statusCode <=statusThreshold_ && amplitude > ampCut){
143  phiSymEEDigiCollection->push_back((*EEDigis->find(hit.id())).id(),(*EEDigis->find(hit.id())).begin());
144  }
145  }
146 
147  if ((phiSymEBDigiCollection->empty() ) && (phiSymEEDigiCollection->empty()))
148  return false;
149 
150  //Put selected information in the event
151  event.put(std::move(phiSymEBDigiCollection), phiSymBarrelDigis_);
152  event.put(std::move(phiSymEEDigiCollection), phiSymEndcapDigis_);
153 
154  return true;
155 }
156 
157 // declare this class as a framework plugin
const edm::EDGetTokenT< EEDigiCollection > endcapDigisToken_
const std::string phiSymEndcapDigis_
bool filter(edm::StreamID, edm::Event &event, const edm::EventSetup &setup) const final
static void setCaloGeometry(const CaloGeometry *geometry)
const edm::EDGetTokenT< EERecHitCollection > endcapHitsToken_
const bool useRecoFlag_
use recoflag instead of DB for bad channels
std::vector< T >::const_iterator const_iterator
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:2
const std::vector< double > ampCut_endcM_
const std::string phiSymBarrelDigis_
Definition: config.py:1
const_iterator find(id_type i) const
static constexpr short N_RING_ENDCAP
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const edm::EDGetTokenT< EcalUncalibratedRecHitCollection > endcapUncalibHitsToken_
const std::vector< double > ampCut_barlM_
int zside() const
Definition: EEDetId.h:71
const edm::EDGetTokenT< EBDigiCollection > barrelDigisToken_
int ieta() const
get the crystal ieta
Definition: EBDetId.h:49
const std::vector< double > ampCut_endcP_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
const_iterator end() const
static constexpr short N_RING_BARREL
HLTEcalPhiSymFilter(const edm::ParameterSet &)
T const * product() const
Definition: Handle.h:74
void add(std::string const &label, ParameterSetDescription const &psetDescription)
~HLTEcalPhiSymFilter() override
const edm::EDGetTokenT< EcalUncalibratedRecHitCollection > barrelUncalibHitsToken_
iterator find(key_type k)
HLT enums.
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
T get() const
Definition: EventSetup.h:71
const edm::EDGetTokenT< EBRecHitCollection > barrelHitsToken_
T const * product() const
Definition: ESHandle.h:86
const std::vector< double > ampCut_barlP_
def move(src, dest)
Definition: eostools.py:511
const_iterator begin() const
Definition: event.py:1