38 std::pair<typename T::DetSet::const_iterator, typename T::DetSet::const_iterator>
40 typedef std::pair<typename T::DetSet::const_iterator, typename T::DetSet::const_iterator> return_type;
41 typename T::const_iterator
match = detset.find(
id);
42 if (match == detset.end())
return return_type();
43 typename T::DetSet hits = *
match;
44 return return_type(hits.begin(), hits.end());
78 switchNumrphi = ParametersNumrphi.getParameter<
bool>(
"switchon");
108 switchAdcrphi = ParametersAdcrphi.getParameter<
bool>(
"switchon");
111 switchPosxrphi = ParametersPosxrphi.getParameter<
bool>(
"switchon");
117 switchResrphi = ParametersResrphi.getParameter<
bool>(
"switchon");
126 switchChi2rphi = ParametersChi2rphi.getParameter<
bool>(
"switchon");
193 edm::LogInfo(
"SiStripRecHitsValid") <<
"SiStripRecHitsValid::beginRun: "
194 <<
" Creating MEs for new Cabling ";
221 int numrechitrphi =0;
222 int numrechitstereo =0;
223 int numrechitmatched=0;
226 std::map<std::string, std::vector<int> > totnumrechitrphi;
227 std::map<std::string, std::vector<int> > totnumrechitstereo;
228 std::map<std::string, std::vector<int> > totnumrechitmatched;
229 totnumrechitrphi.clear();
230 totnumrechitstereo.clear();
231 totnumrechitmatched.clear();
232 int totrechitrphi =0;
233 int totrechitstereo =0;
234 int totrechitmatched =0;
242 std::vector<DetId> IDs;
243 IDs.reserve(rechitsrphi->size() + rechitsmatched->size() + rechitsstereo->size());
249 for(std::vector<DetId>::const_iterator it = IDs.begin(); it != IDs.end(); ++it ){
250 uint32_t myid=((*it).rawId());
259 std::pair<SiStripRecHit2DCollection::DetSet::const_iterator,SiStripRecHit2DCollection::DetSet::const_iterator> rechitrphiRange =
helper::getRange(*rechitsrphi, detid);
264 numrechitrphi = rechitrphiRangeIteratorEnd - rechitrphiRangeIteratorBegin;
266 if(numrechitrphi > 0 ){
267 totrechitrphi+=numrechitrphi;
268 for(iterrphi=rechitrphiRangeIteratorBegin; iterrphi!=rechitrphiRangeIteratorEnd;++iterrphi){
282 std::pair<SiStripRecHit2DCollection::DetSet::const_iterator,SiStripRecHit2DCollection::DetSet::const_iterator> rechitstereoRange =
helper::getRange(*rechitsstereo, detid);
286 numrechitstereo = rechitstereoRangeIteratorEnd - rechitstereoRangeIteratorBegin;
287 if(numrechitstereo > 0){
288 totrechitstereo+=numrechitstereo;
289 for(iterstereo=rechitstereoRangeIteratorBegin; iterstereo!=rechitstereoRangeIteratorEnd;++iterstereo){
303 std::pair<SiStripMatchedRecHit2DCollection::DetSet::const_iterator,SiStripMatchedRecHit2DCollection::DetSet::const_iterator> rechitmatchedRange =
helper::getRange(*rechitsmatched, detid);
307 numrechitmatched = rechitmatchedRangeIteratorEnd - rechitmatchedRangeIteratorBegin;
308 if(numrechitmatched > 0){
309 totrechitmatched +=numrechitmatched;
311 for(itermatched=rechitmatchedRangeIteratorBegin; itermatched!=rechitmatchedRangeIteratorEnd;++itermatched){
322 std::map<std::string, LayerMEs>::iterator iLayerME =
LayerMEsMap.find(label);
323 std::map<std::string, StereoAndMatchedMEs>::iterator iStereoAndMatchedME =
StereoAndMatchedMEsMap.find(label);
326 std::pair<std::string,int32_t> det_lay_pair = fold_organ.
GetSubDetAndLayer(myid,tTopo,
true);
328 if(numrechitrphi>0 || numrechitstereo>0 || numrechitmatched){
330 totnumrechitrphi[det_lay_pair.first].push_back(numrechitrphi);
331 totnumrechitstereo[det_lay_pair.first].push_back(numrechitstereo);
332 totnumrechitmatched[det_lay_pair.first].push_back(numrechitmatched);
334 for (std::vector<RecHitProperties>::iterator irh=
rechitrphi.begin(); irh!=
rechitrphi.end(); ++irh) {
336 fillME(iLayerME->second.meWclusrphi,(*irh).clusiz);
337 fillME(iLayerME->second.meAdcrphi,(*irh).cluchg);
338 fillME(iLayerME->second.mePosxrphi,(*irh).x);
339 fillME(iLayerME->second.meResolxrphi,(*irh).resolxx);
340 fillME(iLayerME->second.meNsimHitrphi,(*irh).NsimHit);
341 if ((*irh).NsimHit > 0) {
342 std::map<std::string, SubDetMEs>::iterator iSubDetME =
SubDetMEsMap.find(det_lay_pair.first);
343 fillME(iSubDetME->second.meBunchrphi, (*irh).bunch);
344 if ((*irh).bunch == 0)
fillME(iSubDetME->second.meEventrphi, (*irh).event);
346 if ( (*irh).resx != -999999. || (*irh).pullMF != -999999. || (*irh).chi2 != -999999. ){
347 fillME(iLayerME->second.meResrphi,(*irh).resx);
348 fillME(iLayerME->second.mePullLFrphi,(*irh).resx/
sqrt((*irh).resolxx));
349 fillME(iLayerME->second.mePullMFrphi,(*irh).pullMF);
350 fillME(iLayerME->second.meChi2rphi,(*irh).chi2);
358 fillME(iStereoAndMatchedME->second.meWclusStereo,(*irh).clusiz);
359 fillME(iStereoAndMatchedME->second.meAdcStereo,(*irh).cluchg);
360 fillME(iStereoAndMatchedME->second.mePosxStereo,(*irh).x);
361 fillME(iStereoAndMatchedME->second.meResolxStereo,
sqrt((*irh).resolxx));
362 fillME(iStereoAndMatchedME->second.meNsimHitStereo,(*irh).NsimHit);
363 if ((*irh).NsimHit > 0) {
364 std::map<std::string, SubDetMEs>::iterator iSubDetME =
SubDetMEsMap.find(det_lay_pair.first);
365 fillME(iSubDetME->second.meBunchStereo, (*irh).bunch);
366 if ((*irh).bunch == 0)
fillME(iSubDetME->second.meEventStereo, (*irh).event);
368 if ( (*irh).resx != -999999. || (*irh).pullMF != -999999. || (*irh).chi2 != -999999. ){
369 fillME(iStereoAndMatchedME->second.meResStereo,(*irh).resx);
370 fillME(iStereoAndMatchedME->second.mePullLFStereo,(*irh).resx/
sqrt((*irh).resolxx));
371 fillME(iStereoAndMatchedME->second.mePullMFStereo,(*irh).pullMF);
372 fillME(iStereoAndMatchedME->second.meChi2Stereo,(*irh).chi2);
379 fillME(iStereoAndMatchedME->second.mePosxMatched,(*irh).x);
380 fillME(iStereoAndMatchedME->second.mePosyMatched,(*irh).y);
381 fillME(iStereoAndMatchedME->second.meResolxMatched,
sqrt((*irh).resolxx));
382 fillME(iStereoAndMatchedME->second.meResolyMatched,
sqrt((*irh).resolyy));
383 fillME(iStereoAndMatchedME->second.meNsimHitMatched,(*irh).NsimHit);
384 if ((*irh).NsimHit > 0) {
385 std::map<std::string, SubDetMEs>::iterator iSubDetME =
SubDetMEsMap.find(det_lay_pair.first);
386 fillME(iSubDetME->second.meBunchMatched, (*irh).bunch);
387 if ((*irh).bunch == 0)
fillME(iSubDetME->second.meEventMatched, (*irh).event);
389 if ( (*irh).resx != -999999. || (*irh).resy != -999999. || (*irh).chi2 != -999999. ){
390 fillME(iStereoAndMatchedME->second.meResxMatched,(*irh).resx);
391 fillME(iStereoAndMatchedME->second.meResyMatched,(*irh).resy);
392 fillME(iStereoAndMatchedME->second.meChi2Matched,(*irh).chi2);
403 for (std::vector<std::string>::iterator iSubdet =
SubDetList_.begin(); iSubdet !=
SubDetList_.end(); iSubdet++){
404 std::map<std::string, SubDetMEs>::iterator iSubDetME =
SubDetMEsMap.find((*iSubdet));
405 fillME(iSubDetME->second.meNumrphi,std::accumulate(totnumrechitrphi[(*iSubdet)].rbegin(), totnumrechitrphi[(*iSubdet)].rend(), 0));
406 fillME(iSubDetME->second.meNumStereo,std::accumulate(totnumrechitstereo[(*iSubdet)].rbegin(), totnumrechitstereo[(*iSubdet)].rend(), 0));
407 fillME(iSubDetME->second.meNumMatched,std::accumulate(totnumrechitmatched[(*iSubdet)].rbegin(), totnumrechitmatched[(*iSubdet)].rend(), 0));
426 LocalPoint localHit = plane.toLocal(globalpos);
433 double scale = -localHit.
z() / dir.
z();
445 return std::pair<LocalPoint,LocalVector>( projectedPos, localStripDir);
464 clusiz = clust->amplitudes().size();
465 const auto & amplitudes=clust->amplitudes();
466 for(
size_t ia=0; ia<amplitudes.size();ia++){
467 totcharge+=amplitudes[ia];
483 double mindist = 999999;
484 double dist = 999999;
490 dist = fabs(
rechitpro.
x - (*m).localPosition().x());
504 rhparameters[0] = position.
x();
505 rhparameters[1] = position.
y();
511 R[0][0] = error.
xx();
512 R[0][1] = error.
xy();
513 R[1][1] = error.
yy();
516 double est = R.similarity(r);
551 double mindist = 999999;
552 double dist = 999999;
553 double distx = 999999;
554 double disty = 999999;
556 std::pair<LocalPoint,LocalVector> closestPair;
561 std::pair<LocalPoint,LocalVector> hitPair;
566 if (hitDetId.stereo()) {
569 distx = fabs(
rechitpro.
x - hitPair.first.x());
570 disty = fabs(
rechitpro.
y - hitPair.first.y());
571 dist =
sqrt(distx*distx+disty*disty);
576 closestPair = hitPair;
591 rhparameters[0] = position.
x();
592 rhparameters[1] = position.
y();
595 shparameters[0] = sh.
x();
596 shparameters[1] = sh.
y();
599 R[0][0] = error.
xx();
600 R[0][1] = error.
xy();
601 R[1][1] = error.
yy();
604 double est = R.similarity(r);
629 std::vector<uint32_t> activeDets;
645 edm::LogInfo(
"SiStripTkRecHits|SiStripRecHitsValid")<<
"nr. of activeDets: "<<activeDets.size();
646 for(std::vector<uint32_t>::iterator detid_iterator = activeDets.begin(); detid_iterator!=activeDets.end(); detid_iterator++){
647 uint32_t
detid = (*detid_iterator);
650 activeDets.erase(detid_iterator);
655 std::pair<std::string,int32_t> det_layer_pair = folder_organizer.
GetSubDetAndLayer(detid,tTopo,
true);
660 std::map<std::string, LayerMEs>::iterator iLayerME =
LayerMEsMap.find(label);
665 int32_t lnumber = det_layer_pair.second;
666 std::vector<uint32_t> layerDetIds;
667 if (det_layer_pair.first ==
"TIB") {
669 }
else if (det_layer_pair.first ==
"TOB") {
671 }
else if (det_layer_pair.first ==
"TID" && lnumber > 0) {
673 }
else if (det_layer_pair.first ==
"TID" && lnumber < 0) {
675 }
else if (det_layer_pair.first ==
"TEC" && lnumber > 0) {
677 }
else if (det_layer_pair.first ==
"TEC" && lnumber < 0) {
683 folder_organizer.
setLayerFolder(detid,tTopo,det_layer_pair.second,
true);
697 std::map<std::string, StereoAndMatchedMEs>::iterator iStereoAndMatchedME =
StereoAndMatchedMEsMap.find(label);
701 bool isStereo =
false;
703 int32_t stereolnumber = det_layer_pair.second;
704 std::vector<uint32_t> stereoandmatchedDetIds;
705 if ( (det_layer_pair.first ==
"TIB") && (
TIBDetId(detid).
stereo()== 1) ) {
706 substructure.
getTIBDetectors(activeDets,stereoandmatchedDetIds,stereolnumber,0,0,0);
708 }
else if ( (det_layer_pair.first ==
"TOB") && (
TOBDetId(detid).stereo()== 1) ) {
709 substructure.
getTOBDetectors(activeDets,stereoandmatchedDetIds,stereolnumber,0,0);
711 }
else if ( (det_layer_pair.first ==
"TID") && (stereolnumber > 0) && (
TIDDetId(detid).stereo()== 1) ) {
712 substructure.
getTIDDetectors(activeDets,stereoandmatchedDetIds,2,0,
abs(stereolnumber),1);
714 }
else if ( (det_layer_pair.first ==
"TID") && (stereolnumber < 0) && (
TIDDetId(detid).stereo()== 1) ) {
715 substructure.
getTIDDetectors(activeDets,stereoandmatchedDetIds,1,0,
abs(stereolnumber),1);
717 }
else if ( (det_layer_pair.first ==
"TEC") && (stereolnumber > 0) && (
TECDetId(detid).stereo()== 1) ) {
718 substructure.
getTECDetectors(activeDets,stereoandmatchedDetIds,2,0,0,0,
abs(stereolnumber),1);
720 }
else if ( (det_layer_pair.first ==
"TEC") && (stereolnumber < 0) && (
TECDetId(detid).stereo()== 1) ) {
721 substructure.
getTECDetectors(activeDets,stereoandmatchedDetIds,1,0,0,0,
abs(stereolnumber),1);
728 folder_organizer.
setLayerFolder(detid,tTopo,det_layer_pair.second,
true);
782 layerMEs.
meWclusrphi =
bookME1D(ibooker,
"TH1Wclusrphi", hidmanager.
createHistoLayer(
"Wclus_rphi",
"layer",label,
"").c_str() ,
"Cluster Width - Number of strips that belong to the RecHit cluster");
855 stereoandmatchedMEs.
meWclusStereo =
bookME1D(ibooker,
"TH1WclusStereo", hidmanager.
createHistoLayer(
"Wclus_stereo",
"layer",label,
"").c_str() ,
"Cluster Width - Number of strips that belong to the RecHit cluster");
866 stereoandmatchedMEs.
mePosxStereo->
setAxisTitle((
"x RecHit coord. (local frame) in stereo modules in " + label).c_str());
871 stereoandmatchedMEs.
meResolxStereo->
setAxisTitle((
"resol(x) RecHit coord. (local frame) in stereo modules in " + label).c_str());
875 stereoandmatchedMEs.
meResStereo =
bookME1D(ibooker,
"TH1ResStereo", hidmanager.
createHistoLayer(
"Res_stereo",
"layer",label,
"").c_str() ,
"Residuals of the hit x coordinate");
886 stereoandmatchedMEs.
mePullMFStereo->
setAxisTitle((
"Pull distribution (measurement frame) in stereo modules in " + label).c_str());
959 HistoName =
"TH1Numrphi__" +
label;
960 subdetMEs.
meNumrphi =
bookME1D(ibooker,
"TH1Numrphi",HistoName.c_str(),
"Num of RecHits");
965 HistoName =
"TH1Bunchrphi__" +
label;
966 subdetMEs.
meBunchrphi =
bookME1D(ibooker,
"TH1Bunchrphi",HistoName.c_str(),
"Bunch Crossing");
971 HistoName =
"TH1Eventrphi__" +
label;
972 subdetMEs.
meEventrphi =
bookME1D(ibooker,
"TH1Eventrphi",HistoName.c_str(),
"Event (in-time bunch)");
977 HistoName =
"TH1NumStereo__" +
label;
978 subdetMEs.
meNumStereo =
bookME1D(ibooker,
"TH1NumStereo",HistoName.c_str(),
"Num of RecHits in stereo modules");
983 HistoName =
"TH1BunchStereo__" +
label;
989 HistoName =
"TH1EventStereo__" +
label;
990 subdetMEs.
meEventStereo =
bookME1D(ibooker,
"TH1EventStereo",HistoName.c_str(),
"Event (in-time bunch)");
995 HistoName =
"TH1NumMatched__" +
label;
996 subdetMEs.
meNumMatched =
bookME1D(ibooker,
"TH1NumMatched",HistoName.c_str(),
"Num of matched RecHits" );
1001 HistoName =
"TH1BunchMatched__" +
label;
1007 HistoName =
"TH1EventMatched__" +
label;
1008 subdetMEs.
meEventMatched =
bookME1D(ibooker,
"TH1EventMatched",HistoName.c_str(),
"Event (in-time bunch)");
1018 return ibooker.
book1D(HistoName,HistoTitle,
RecHitProperties rechitpro
MonitorElement * meAdcStereo
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
T getParameter(std::string const &) const
EventNumber_t event() const
MonitorElement * meEventMatched
std::vector< std::string > SubDetList_
virtual const TrackerGeomDet * idToDetUnit(DetId) const
Return the pointer to the GeomDetUnit corresponding to a given DetId.
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
MonitorElement * meEventStereo
void rechitanalysis_matched(SiStripMatchedRecHit2D const rechit, const GluedGeomDet *gluedDet, TrackerHitAssociator &associate)
edm::ParameterSet Parameters
void createStereoAndMatchedMEs(DQMStore::IBooker &ibooker, std::string label)
int event() const
get the contents of the subdetector field (should be protected?)
void setSiStripFolderName(std::string name)
MonitorElement * meNumMatched
virtual float stripAngle(float strip) const =0
std::map< std::string, std::vector< uint32_t > > LayerDetMap
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void createSubDetMEs(DQMStore::IBooker &ibooker, std::string label)
#define DEFINE_FWK_MODULE(type)
std::vector< PSimHit > matched
MonitorElement * meNumTotStereo
std::map< std::string, SubDetMEs > SubDetMEsMap
void rechitanalysis(SiStripRecHit2D const rechit, const StripTopology &topol, TrackerHitAssociator &associate)
Sin< T >::type sin(const T &t)
MonitorElement * mePullLFStereo
std::map< std::string, StereoAndMatchedMEs > StereoAndMatchedMEsMap
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, const TrackerTopology *tTopo, bool ring_flag=0)
std::vector< RecHitProperties > rechitstereo
MonitorElement * meNsimHitrphi
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
MonitorElement * mePullLFrphi
const Plane & surface() const
The nominal surface of the GeomDet.
MonitorElement * meResolxMatched
MonitorElement * mePullMFStereo
virtual float strip(const LocalPoint &) const =0
edm::EDGetTokenT< SiStripRecHit2DCollection > stereoRecHitsToken_
MonitorElement * mePosxStereo
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
virtual LocalError localPositionError() const
MonitorElement * meChi2Stereo
std::vector< RecHitProperties > rechitmatched
MonitorElement * meResxMatched
MonitorElement * meResolxrphi
virtual MeasurementError measurementError(const LocalPoint &, const LocalError &) const =0
MonitorElement * meBunchStereo
void getTOBDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tobDetRawIds, uint32_t layer=0, uint32_t bkw_frw=0, uint32_t rod=0) const
Local3DPoint localPosition() const
MonitorElement * meBunchrphi
int bunchCrossing() const
get the detector field from this detid
MonitorElement * meWclusrphi
Cos< T >::type cos(const T &t)
std::string topFolderName_
MonitorElement * book1D(Args &&...args)
Abs< T >::type abs(const T &t)
virtual const Topology & topology() const override
Returns a reference to the strip proxy topology.
MonitorElement * mePosyMatched
ClusterRef cluster() const
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
void createMEs(DQMStore::IBooker &ibooker, const edm::EventSetup &es)
EncodedEventId eventId() const
edm::EDGetTokenT< SiStripRecHit2DCollection > rphiRecHitsToken_
MonitorElement * meNsimHitStereo
std::string getSubdetid(uint32_t id, const TrackerTopology *tTopo, bool flag_ring)
MonitorElement * meChi2rphi
MonitorElement * mePosxMatched
std::pair< typename T::DetSet::const_iterator, typename T::DetSet::const_iterator > getRange(const T &detset, const DetId &id)
bool switchNsimHitMatched
MonitorElement * meNumTotMatched
MonitorElement * bookME1D(DQMStore::IBooker &ibooker, const char *ParameterSetLabel, const char *HistoName, const char *HistoTitle)
LocalVector localDirection() const
Obsolete. Same as momentumAtEntry().unit(), for backward compatibility.
SiStripRecHitsValid(const edm::ParameterSet &conf)
Detector identifier class for the strip tracker.
std::map< std::string, LayerMEs > LayerMEsMap
edm::ESHandle< SiStripDetCabling > SiStripDetCabling_
CLHEP::HepVector AlgebraicVector
void setLayerFolder(uint32_t rawdetid, const TrackerTopology *tTopo, int32_t layer=0, bool ring_flag=0)
MonitorElement * meChi2Matched
void setCurrentFolder(const std::string &fullpath)
std::map< std::string, std::vector< uint32_t > > StereoAndMatchedDetMap
T const * product() const
MonitorElement * meBunchMatched
MonitorElement * meAdcrphi
MonitorElement * meWclusStereo
MonitorElement * meResyMatched
std::pair< LocalPoint, LocalVector > projectHit(const PSimHit &hit, const StripGeomDetUnit *stripDet, const BoundPlane &plane)
MonitorElement * meResolyMatched
std::pair< std::string, std::string > getSubDetFolderAndTag(const uint32_t &detid, const TrackerTopology *tTopo)
MonitorElement * meResolxStereo
MonitorElement * meResStereo
void getTECDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tecDetRawIds, uint32_t side=0, uint32_t wheel=0, uint32_t petal_bkw_frw=0, uint32_t petal=0, uint32_t ring=0, uint32_t ster=0) const
void createTotalMEs(DQMStore::IBooker &ibooker)
edm::EDGetTokenT< SiStripMatchedRecHit2DCollection > matchedRecHitsToken_
static int position[264][3]
void beginJob(const edm::EventSetup &es)
void getTIBDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tibDetRawIds, uint32_t layer=0, uint32_t bkw_frw=0, uint32_t int_ext=0, uint32_t string=0) const
CLHEP::HepSymMatrix AlgebraicSymMatrix
void createLayerMEs(DQMStore::IBooker &ibooker, std::string label)
void fillME(MonitorElement *ME, float value1)
std::vector< PSimHit > associateHit(const TrackingRecHit &thit) const
MonitorElement * meNumStereo
MonitorElement * meNsimHitMatched
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
void getTIDDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tidDetRawIds, uint32_t side=0, uint32_t wheel=0, uint32_t ring=0, uint32_t ster=0) const
MonitorElement * meEventrphi
DetId geographicalId() const
unsigned long long m_cacheID_
std::string createHistoLayer(std::string description, std::string id_type, std::string path, std::string flag)
MonitorElement * mePosxrphi
MonitorElement * meResrphi
virtual LocalPoint localPosition() const
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
DetId operator()(const X &x)
MonitorElement * mePullMFrphi
MonitorElement * meNumrphi
const GeomDetUnit * stereoDet() const
MonitorElement * meNumTotrphi
virtual const TrackerGeomDet * idToDet(DetId) const
void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &es)
std::vector< RecHitProperties > rechitrphi