60 LogVerbatim(
"DTDQM|DTMonitorModule|DTChamberEfficiency")
61 <<
"DTChamberEfficiency: constructor called";
68 theTracksToken_ = consumes<reco::TrackCollection>(theTracksLabel_);
70 theMaxChi2 =
static_cast<unsigned int>(pSet.
getParameter<
double>(
"theMaxChi2"));
72 theMinNrec =
static_cast<int>(pSet.
getParameter<
double>(
"theMinNrec"));
84 theNavigationType = pSet.
getParameter<
string>(
"NavigationType");
92 LogTrace(
"DTDQM|DTMonitorModule|DTChamberEfficiency")
93 <<
"DTChamberEfficiency: destructor called";
97 delete theMeasurementExtractor;
115 LogTrace(
"DTDQM|DTMonitorModule|DTChamberEfficiency")
116 <<
"DTChamberEfficiency: booking histos";
123 vector<MonitorElement *>
histos;
125 stringstream wheel_str; wheel_str <<
wheel;
127 histos.push_back(ibooker.
book2D(
"hCountSectVsChamb_All_W"+ wheel_str.str(),
128 "Countings for wheel " + wheel_str.str(),14,1.,15.,4,1.,5.));
130 histos.push_back(ibooker.
book2D(
"hCountSectVsChamb_Qual_W"+ wheel_str.str(),
131 "Countings for wheel " + wheel_str.str(),14,1.,15.,4,1.,5.));
134 histos.push_back(ibooker.
book2D(
"hExtrapSectVsChamb_W"+ wheel_str.str(),
135 "Extrapolations for wheel " + wheel_str.str(),14,1.,15.,4,1.,5.));
137 histosPerW.push_back(histos);
147 LogTrace(
"DTDQM|DTMonitorModule|DTChamberEfficiency") <<
148 "--- [DTChamberEfficiency] Event analysed #Run: " <<
149 event.id().run() <<
" #Event: " <<
event.id().event() << endl;
151 theService->update(eventSetup);
152 theMeasurementExtractor->setEvent(event);
156 event.getByToken(theTracksToken_, tracks);
161 for(reco::TrackCollection::const_iterator
track = tracks->begin();
track!=tracks->end(); ++
track) {
166 if(recHitsize < theMinNrec)
continue;
170 LogTrace(
"DTDQM|DTMonitorModule|DTChamberEfficiency") <<
"--- New track" << endl;
171 set<DTChamberId> chAlrUsed;
173 rHit != trans_track.recHitsEnd(); ++rHit) {
174 DetId rHitid = (*rHit)->geographicalId();
177 if(chAlrUsed.find(wId) != chAlrUsed.end())
continue;
178 chAlrUsed.insert(wId);
179 LogTrace(
"DTDQM|DTMonitorModule|DTChamberEfficiency") <<
" " << wId << endl;
184 DetId id = trans_track.track().innerDetId();
185 const DetLayer *initialLayer = theService->detLayerGeometry()->idToLayer(
id);
191 vector<const DetLayer*> layer_list = compatibleLayers(*theService->muonNavigationSchool(), initialLayer,*init_fs_free,
alongMomentum);
192 vector<const DetLayer*> layer_list_2 = compatibleLayers(*theService->muonNavigationSchool(), initialLayer,*init_fs_free,
oppositeToMomentum);
194 layer_list.insert(layer_list.end(),layer_list_2.begin(),layer_list_2.end());
196 set<DTChamberId> alreadyCheckedCh;
199 for(
int i=0;
i< (
int)layer_list.size();
i++) {
206 vector<DetWithState> dss = layer_list.at(
i)->compatibleDets(tsos, *
propagator(), *theEstimator);
208 if(dss.empty())
continue;
212 const DetId idDetLay = detWithState.first->geographicalId();
215 if(!chamberSelection(idDetLay,trans_track))
continue;
220 if(alreadyCheckedCh.find(DTid) != alreadyCheckedCh.end())
continue;
221 alreadyCheckedCh.insert(DTid);
224 MeasurementContainer detMeasurements_initial = theMeasurementExtractor->measurements(layer_list.at(
i),
227 *theEstimator,
event);
228 LogTrace(
"DTDQM|DTMonitorModule|DTChamberEfficiency") <<
" chamber: " << DTid
229 <<
" has: " << detMeasurements_initial.size() <<
" comp. meas." << endl;
237 vector<MonitorElement *>
histos = histosPerW[DTid.
wheel()+2];
239 if (!detMeasurements_initial.empty()) histos[0]->
Fill(DTid.
sector(),DTid.
station(),1.);
247 LogInfo(
"DTDQM|DTMonitorModule|DTChamberEfficiency") <<
"[DTChamberEfficiency] Collection: " << theTracksLabel_
248 <<
" is not valid!" << endl;
259 if(trans_track.
recHit(0)->geographicalId() == idDetLay ||
260 trans_track.
recHit(1)->geographicalId() == idDetLay)
return false;
270 for(MeasurementContainer::const_iterator mescont_Itr = seg_list.begin();
271 mescont_Itr != seg_list.end(); ++mescont_Itr){
278 for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator recList_Itr = recHit_list.begin();
279 recList_Itr != recHit_list.end(); ++recList_Itr){
281 nhit_seg += (
int)(*recList_Itr)->transientHits().size();
286 if(tmpId.
station() < 4 && nhit_seg >= 12) result.push_back(*mescont_Itr);
287 if(tmpId.
station() == 4 && nhit_seg >= 8) result.push_back(*mescont_Itr);
297 vector<const DetLayer*> detLayers;
299 if(theNavigationType ==
"Standard"){
305 detLayers.insert(detLayers.begin(),initialLayer);
308 else if (theNavigationType ==
"Direct"){
314 LogError(
"DTDQM|DTMonitorModule|DTChamberEfficiency") <<
"No Properly Navigation Selected!!"<<endl;
320 return theService->propagator(
"SteppingHelixPropagatorAny");
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
MeasurementContainer segQualityCut(const MeasurementContainer &seg_list) const
DTChamberEfficiency(const edm::ParameterSet &pset)
constexpr uint32_t rawId() const
get the raw id
def setup(process, global_tag, zero_tesla=False)
size_t recHitsSize() const
number of RecHits
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override
~DTChamberEfficiency() override
std::vector< const DetLayer * > compatibleLayers(const FreeTrajectoryState &fts, PropagationDirection timeDirection) const
const SurfaceType & surface() const
bool chamberSelection(const DetId &idDetLay, reco::TransientTrack &trans_track) const
edm::ESHandle< Propagator > propagator() const
void setCurrentFolder(std::string const &fullpath)
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
FreeTrajectoryState const * freeState(bool withErrors=true) const
std::vector< const DetLayer * > compatibleLayers(const DetLayer &detLayer, Args &&...args) const
Returns all layers compatible.
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
TrackingRecHitRef recHit(size_t i) const
get n-th recHit
std::vector< const DetLayer * > compatibleLayers(const NavigationSchool &navigationSchool, const DetLayer *initialLayer, const FreeTrajectoryState &fts, PropagationDirection propDir)
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
std::vector< ConstRecHitPointer > ConstRecHitContainer
MonitorElement * book2D(Args &&...args)
std::vector< TrajectoryMeasurement > MeasurementContainer
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
int station() const
Return the station number.
int wheel() const
Return the wheel number.
constexpr Detector det() const
get the detector field from this detid