CMS 3D CMS Logo

RPCRecHitProducer.cc
Go to the documentation of this file.
1 
6 #include "RPCRecHitProducer.h"
7 
9 
15 
18 
22 
23 #include <string>
24 #include <fstream>
25 
26 using namespace edm;
27 using namespace std;
28 
30  theRPCDigiLabel(consumes<RPCDigiCollection>(config.getParameter<InputTag>("rpcDigiLabel"))),
31  maskSource_(MaskSource::EventSetup), deadSource_(MaskSource::EventSetup)
32 {
33  // Set verbose output
34  produces<RPCRecHitCollection>();
35 
36  // Get the concrete reconstruction algo from the factory
37  const string theAlgoName = config.getParameter<string>("recAlgo");
38  theAlgo.reset(RPCRecHitAlgoFactory::get()->create(theAlgoName,
39  config.getParameter<ParameterSet>("recAlgoConfig")));
40 
41  // Get masked- and dead-strip information
42  theRPCMaskedStripsObj = std::make_unique<RPCMaskedStrips>();
43  theRPCDeadStripsObj = std::make_unique<RPCDeadStrips>();
44 
45  const string maskSource = config.getParameter<std::string>("maskSource");
46  if (maskSource == "File") {
48  edm::FileInPath fp = config.getParameter<edm::FileInPath>("maskvecfile");
49  std::ifstream inputFile(fp.fullPath().c_str(), std::ios::in);
50  if ( !inputFile ) {
51  std::cerr << "Masked Strips File cannot not be opened" << std::endl;
52  exit(1);
53  }
54  while ( inputFile.good() ) {
56  inputFile >> Item.rawId >> Item.strip;
57  if ( inputFile.good() ) MaskVec.push_back(Item);
58  }
59  inputFile.close();
60  }
61 
62  const string deadSource = config.getParameter<std::string>("deadSource");
63  if (deadSource == "File") {
65  edm::FileInPath fp = config.getParameter<edm::FileInPath>("deadvecfile");
66  std::ifstream inputFile(fp.fullPath().c_str(), std::ios::in);
67  if ( !inputFile ) {
68  std::cerr << "Dead Strips File cannot not be opened" << std::endl;
69  exit(1);
70  }
71  while ( inputFile.good() ) {
73  inputFile >> Item.rawId >> Item.strip;
74  if ( inputFile.good() ) DeadVec.push_back(Item);
75  }
76  inputFile.close();
77  }
78 }
79 
80 
82  // Getting the masked-strip information
84  edm::ESHandle<RPCMaskedStrips> readoutMaskedStrips;
85  setup.get<RPCMaskedStripsRcd>().get(readoutMaskedStrips);
86  const RPCMaskedStrips* tmp_obj = readoutMaskedStrips.product();
87  theRPCMaskedStripsObj->MaskVec = tmp_obj->MaskVec;
88  delete tmp_obj;
89  }
90  else if ( maskSource_ == MaskSource::File ) {
91  std::vector<RPCMaskedStrips::MaskItem>::iterator posVec;
92  for ( posVec = MaskVec.begin(); posVec != MaskVec.end(); ++posVec ) {
94  Item.rawId = (*posVec).rawId;
95  Item.strip = (*posVec).strip;
96  theRPCMaskedStripsObj->MaskVec.push_back(Item);
97  }
98  }
99 
100  // Getting the dead-strip information
102  edm::ESHandle<RPCDeadStrips> readoutDeadStrips;
103  setup.get<RPCDeadStripsRcd>().get(readoutDeadStrips);
104  const RPCDeadStrips* tmp_obj = readoutDeadStrips.product();
105  theRPCDeadStripsObj->DeadVec = tmp_obj->DeadVec;
106  delete tmp_obj;
107  }
108  else if ( deadSource_ == MaskSource::File ) {
109  std::vector<RPCDeadStrips::DeadItem>::iterator posVec;
110  for ( posVec = DeadVec.begin(); posVec != DeadVec.end(); ++posVec ) {
112  Item.rawId = (*posVec).rawId;
113  Item.strip = (*posVec).strip;
114  theRPCDeadStripsObj->DeadVec.push_back(Item);
115  }
116  }
117 
118 }
119 
121  // Get the RPC Geometry
122  ESHandle<RPCGeometry> rpcGeom;
123  setup.get<MuonGeometryRecord>().get(rpcGeom);
124 
125  // Get the digis from the event
127  event.getByToken(theRPCDigiLabel,digis);
128 
129  // Pass the EventSetup to the algo
130  theAlgo->setES(setup);
131 
132  // Create the pointer to the collection which will store the rechits
133  auto recHitCollection = std::make_unique<RPCRecHitCollection>();
134 
135  // Iterate through all digi collections ordered by LayerId
136 
137  for ( auto rpcdgIt = digis->begin(); rpcdgIt != digis->end(); ++rpcdgIt ) {
138  // The layerId
139  const RPCDetId& rpcId = (*rpcdgIt).first;
140 
141  // Get the GeomDet from the setup
142  const RPCRoll* roll = rpcGeom->roll(rpcId);
143  if (roll == nullptr){
144  edm::LogError("BadDigiInput")<<"Failed to find RPCRoll for ID "<<rpcId;
145  continue;
146  }
147 
148  // Get the iterators over the digis associated with this LayerId
149  const RPCDigiCollection::Range& range = (*rpcdgIt).second;
150 
151  // Getting the roll mask, that includes dead strips, for the given RPCDet
152  RollMask mask;
153  const int rawId = rpcId.rawId();
154  for ( const auto& tomask : theRPCMaskedStripsObj->MaskVec ) {
155  if ( tomask.rawId == rawId ) {
156  const int bit = tomask.strip;
157  mask.set(bit-1);
158  }
159  }
160 
161  for ( const auto& tomask : theRPCDeadStripsObj->DeadVec ) {
162  if ( tomask.rawId == rawId ) {
163  const int bit = tomask.strip;
164  mask.set(bit-1);
165  }
166  }
167 
168  // Call the reconstruction algorithm
169  OwnVector<RPCRecHit> recHits = theAlgo->reconstruct(*roll, rpcId, range, mask);
170 
171  if(!recHits.empty()) //FIXME: is it really needed?
172  recHitCollection->put(rpcId, recHits.begin(), recHits.end());
173  }
174 
175  event.put(std::move(recHitCollection));
176 
177 }
178 
T getParameter(std::string const &) const
def create(alignables, pedeDump, additionalData, outputFile, config)
std::vector< MaskItem > MaskVec
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:47
std::unique_ptr< RPCRecHitBaseAlgo > theAlgo
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:2
void beginRun(const edm::Run &, const edm::EventSetup &) override
Definition: config.py:1
iterator begin()
Definition: OwnVector.h:244
enum RPCRecHitProducer::MaskSource deadSource_
void produce(edm::Event &event, const edm::EventSetup &setup) override
The method which produces the rechits.
bool empty() const
Definition: OwnVector.h:269
const edm::EDGetTokenT< RPCDigiCollection > theRPCDigiLabel
std::bitset< maskSIZE > RollMask
Definition: RPCRollMask.h:7
std::unique_ptr< RPCMaskedStrips > theRPCMaskedStripsObj
iterator end()
Definition: OwnVector.h:249
std::vector< RPCDeadStrips::DeadItem > DeadVec
RPCRecHitProducer(const edm::ParameterSet &config)
Constructor.
enum RPCRecHitProducer::MaskSource maskSource_
HLT enums.
T get() const
Definition: EventSetup.h:62
std::vector< DeadItem > DeadVec
Definition: RPCDeadStrips.h:28
std::string fullPath() const
Definition: FileInPath.cc:197
std::vector< RPCMaskedStrips::MaskItem > MaskVec
std::pair< const_iterator, const_iterator > Range
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:511
T get(const Candidate &c)
Definition: component.h:55
std::unique_ptr< RPCDeadStrips > theRPCDeadStripsObj
const RPCRoll * roll(RPCDetId id) const
Return a roll given its id.
Definition: RPCGeometry.cc:75
Definition: event.py:1
Definition: Run.h:44