74 modOn( pSet.getUntrackedParameter<bool>(
"modOn",
true) ),
75 ladOn( pSet.getUntrackedParameter<bool>(
"ladOn",
false) ),
76 layOn( pSet.getUntrackedParameter<bool>(
"layOn",
false) ),
77 phiOn( pSet.getUntrackedParameter<bool>(
"phiOn",
false) ),
78 ringOn( pSet.getUntrackedParameter<bool>(
"ringOn",
false) ),
79 bladeOn( pSet.getUntrackedParameter<bool>(
"bladeOn",
false) ),
80 diskOn( pSet.getUntrackedParameter<bool>(
"diskOn",
false) ),
81 isUpgrade( pSet.getUntrackedParameter<bool>(
"isUpgrade",
false) )
96 LogInfo(
"PixelDQM") <<
"SiPixelHitEfficiencySource constructor" << endl;
105 LogInfo(
"PixelDQM") <<
"SiPixelHitEfficiencySource destructor" << endl;
107 std::map<uint32_t,SiPixelHitEfficiencyModule*>::iterator struct_iter;
109 delete struct_iter->second;
110 struct_iter->second = 0;
116 LogInfo(
"PixelDQM") <<
"SiPixelHitEfficiencySource beginRun()" << endl;
129 if (
debug_)
LogVerbatim(
"PixelDQM") <<
"TrackerGeometry "<< &(*TG) <<
" size is "<< TG->dets().size() << endl;
132 for (TrackerGeometry::DetContainer::const_iterator pxb = TG->detsPXB().begin();
133 pxb!=TG->detsPXB().end(); pxb++) {
134 if (dynamic_cast<PixelGeomDetUnit const *>((*pxb))!=0) {
139 for (TrackerGeometry::DetContainer::const_iterator pxf = TG->detsPXF().begin();
140 pxf!=TG->detsPXF().end(); pxf++) {
141 if (dynamic_cast<PixelGeomDetUnit const *>((*pxf))!=0) {
154 for (std::map<uint32_t, SiPixelHitEfficiencyModule*>::iterator pxd =
theSiPixelStructure.begin();
159 else throw cms::Exception(
"LogicError") <<
"SiPixelHitEfficiencySource Folder Creation Failed! ";
163 else throw cms::Exception(
"LogicError") <<
"SiPixelHitEfficiencySource ladder Folder Creation Failed! ";
167 else throw cms::Exception(
"LogicError") <<
"SiPixelHitEfficiencySource layer Folder Creation Failed! ";
171 else throw cms::Exception(
"LogicError") <<
"SiPixelHitEfficiencySource phi Folder Creation Failed! ";
175 else throw cms::Exception(
"LogicError") <<
"SiPixelHitEfficiencySource Blade Folder Creation Failed! ";
179 else throw cms::Exception(
"LogicError") <<
"SiPixelHitEfficiencySource Disk Folder Creation Failed! ";
183 else throw cms::Exception(
"LogicError") <<
"SiPixelHitEfficiencySource Ring Folder Creation Failed! ";
194 if(!vertexCollectionHandle.
isValid())
return;
199 reco::VertexCollection::const_iterator bestVtx=vertices.end();
200 for(reco::VertexCollection::const_iterator it=vertices.begin(); it!=vertices.end(); ++it){
201 if(!it->isValid())
continue;
204 (
vtxntrk_==
int(it->tracksSize()) && fabs(
vtxZ_)>fabs(it->z()))){
206 vtxD0_=it->position().rho();
214 if(fabs(it->z())<=20. && fabs(it->position().rho())<=2. && it->ndof()>4)
nvtx_++;
224 std::cout <<
"+++ NEW EVENT +++"<< std::endl;
225 std::cout <<
"Map entries \t : " << ttac.
size() << std::endl;
228 std::set<SiPixelCluster> clusterSet;
231 int extrapolateFrom_ = 2;
232 int extrapolateTo_ = 1;
233 float maxlxmatch_=0.2;
234 float maxlymatch_=0.2;
235 bool keepOriginalMissingHit_=
true;
248 if (extrapolateFrom_>=extrapolateTo_) {
257 std::vector<TrajectoryMeasurement> expTrajMeasurements;
264 bool isBpixtrack =
false, isFpixtrack =
false;
265 int nStripHits=0;
int L1hits=0;
int L2hits=0;
int L3hits=0;
int L4hits=0;
int D1hits=0;
int D2hits=0;
int D3hits=0;
266 std::vector<TrajectoryMeasurement> tmeasColl =traj_iterator->measurements();
267 std::vector<TrajectoryMeasurement>::const_iterator tmeasIt;
269 for(tmeasIt = tmeasColl.begin();tmeasIt!=tmeasColl.end();tmeasIt++){
273 uint testSubDetID = (testhit->geographicalId().subdetId());
274 const DetId & hit_detId = testhit->geographicalId();
291 if(hit_layer==1) L1hits++;
292 if(hit_layer==2) L2hits++;
293 if(hit_layer==3) L3hits++;
301 if(hit_disk==1) D1hits++;
302 if(hit_disk==2) D2hits++;
311 bool lastValidL2 =
false;
314 if (testhit->isValid()) {
315 if (tmeasIt == tmeasColl.end()-1) {
320 uint nextSubDetID = (nextRecHit->geographicalId().subdetId());
321 int nextlayer =
PixelBarrelName(nextRecHit->geographicalId()).layerName();
330 std::vector< const BarrelDetLayer*> pxbLayers = measurementTrackerHandle->geometricSearchTracker()->pixelBarrelLayers();
331 const DetLayer* pxb1 = pxbLayers[extrapolateTo_-1];
335 expTrajMeasurements = theLayerMeasurements->
measurements(*pxb1, tsosPXB2, *thePropagator, *estimator);
336 delete theLayerMeasurements;
337 if ( !expTrajMeasurements.empty()) {
338 for(uint
p=0;
p<expTrajMeasurements.size();
p++){
340 auto pxb1Hit = pxb1TM.
recHit();
342 if(pxb1Hit->geographicalId().rawId()==0){
343 expTrajMeasurements.erase(expTrajMeasurements.begin()+
p);
351 TrajectoryStateOnSurface chkPredTrajState=trajStateComb(tmeasIt->forwardPredictedState(), tmeasIt->backwardPredictedState());
358 vector<int > imatches;
361 for (
size_t iexp=0; iexp<expTrajMeasurements.size(); iexp++) {
362 const DetId & exphit_detId = expTrajMeasurements[iexp].recHit()->geographicalId();
365 int dladder =
abs( exphit_ladder - hit_ladder );
366 if (dladder > 10) dladder = 20 - dladder;
367 int dmodule =
abs( exphit_mod - hit_mod);
368 if (dladder != 0 || dmodule != 0) {
376 float dxyz=
sqrt((chkx-x)*(chkx-x)+(chky-y)*(chky-y)+(chkz-z)*(chkz-z));
381 imatches.push_back(
int(imatch));
386 float lxmatch = 9999.0;
387 float lymatch = 9999.0;
388 if(!expTrajMeasurements.empty()){
390 const DetId & matchhit_detId = expTrajMeasurements[imatch].recHit()->geographicalId();
393 int dladder =
abs(matchhit_ladder-hit_ladder);
394 if (dladder > 10) dladder = 20 - dladder;
395 LocalPoint lp = expTrajMeasurements[imatch].updatedState().localPosition();
396 lxmatch=fabs(lp.
x() - chklp.
x());
397 lymatch=fabs(lp.
y() - chklp.
y());
399 if (lxmatch < maxlxmatch_ && lymatch < maxlymatch_) {
402 expTrajMeasurements.erase(expTrajMeasurements.begin()+imatch);
413 if(!expTrajMeasurements.empty()){
414 for (
size_t f=0;
f<expTrajMeasurements.size();
f++) {
417 tmeasColl.push_back(AddHit);
427 if(isBpixtrack || isFpixtrack){
428 if(trackref->pt()<0.6 ||
430 fabs(trackref->dxy(bestVtx->position()))>0.05 ||
431 fabs(trackref->dz(bestVtx->position()))>0.5)
continue;
434 std::cout <<
"isBpixtrack : " << isBpixtrack << std::endl;
435 std::cout <<
"isFpixtrack : " << isFpixtrack << std::endl;
438 for(std::vector<TrajectoryMeasurement>::const_iterator tmeasIt = tmeasColl.begin(); tmeasIt!=tmeasColl.end(); tmeasIt++){
448 const DetId & hit_detId = hit->geographicalId();
450 uint IntSubDetID = (hit_detId.
subdetId());
452 if(IntSubDetID == 0 ){
453 if(debug_)
std::cout <<
"NO IntSubDetID\n";
459 int disk=0;
int layer=0;
int panel=0;
int module=0;
bool isHalfModule=
false;
482 if(fabs(trackref->dxy(bestVtx->position()))>0.01 ||
483 fabs(trackref->dz(bestVtx->position()))>0.1)
continue;
484 if(!(L2hits>0&&L3hits>0) && !(L2hits>0&&D1hits>0) && !(D1hits>0&&D2hits>0))
continue;
486 if(fabs(trackref->dxy(bestVtx->position()))>0.02 ||
487 fabs(trackref->dz(bestVtx->position()))>0.1)
continue;
488 if(!(L1hits>0&&L3hits>0) && !(L1hits>0&&D1hits>0))
continue;
490 if(fabs(trackref->dxy(bestVtx->position()))>0.02 ||
491 fabs(trackref->dz(bestVtx->position()))>0.1)
continue;
492 if(!(L1hits>0&&L2hits>0))
continue;
494 if(fabs(trackref->dxy(bestVtx->position()))>0.05 ||
495 fabs(trackref->dz(bestVtx->position()))>0.5)
continue;
496 if(!(L1hits>0&&D2hits>0) && !(L2hits>0&&D2hits>0))
continue;
498 if(fabs(trackref->dxy(bestVtx->position()))>0.05 ||
499 fabs(trackref->dz(bestVtx->position()))>0.5)
continue;
500 if(!(L1hits>0&&D1hits>0))
continue;
504 if(fabs(trackref->dxy(bestVtx->position()))>0.01 ||
505 fabs(trackref->dz(bestVtx->position()))>0.1)
continue;
506 if(!(L2hits>0&&L3hits>0&&L4hits>0) && !(L2hits>0&&D1hits>0&&D2hits) && !(D1hits>0&&D2hits>0&&D3hits>0))
continue;
508 if(fabs(trackref->dxy(bestVtx->position()))>0.02 ||
509 fabs(trackref->dz(bestVtx->position()))>0.1)
continue;
510 if(!(L1hits>0&&L3hits>0&&L4hits>0) && !(L1hits>0&&L3hits>0&&D1hits>0) && !(L1hits>0&&D1hits>0&&D2hits>0))
continue;
512 if(fabs(trackref->dxy(bestVtx->position()))>0.02 ||
513 fabs(trackref->dz(bestVtx->position()))>0.1)
continue;
514 if(!(L1hits>0&&L2hits>0&&L4hits>0) && !(L1hits>0&&L2hits>0&&D1hits>0))
continue;
516 if(fabs(trackref->dxy(bestVtx->position()))>0.02 ||
517 fabs(trackref->dz(bestVtx->position()))>0.1)
continue;
518 if(!(L1hits>0&&L2hits>0&&L3hits>0))
continue;
520 if(fabs(trackref->dxy(bestVtx->position()))>0.05 ||
521 fabs(trackref->dz(bestVtx->position()))>0.5)
continue;
522 if(!(L1hits>0&&L2hits>0&&D2hits>0) && !(L1hits>0&&D2hits>0&&D3hits>0) && !(L2hits>0&&D2hits>0&&D3hits>0))
continue;
524 if(fabs(trackref->dxy(bestVtx->position()))>0.05 ||
525 fabs(trackref->dz(bestVtx->position()))>0.5)
continue;
526 if(!(L1hits>0&&L2hits>0&&D1hits>0) && !(L1hits>0&&D1hits>0&&D3hits>0) && !(L2hits>0&&D1hits>0&&D3hits>0))
continue;
528 if(fabs(trackref->dxy(bestVtx->position()))>0.05 ||
529 fabs(trackref->dz(bestVtx->position()))>0.5)
continue;
530 if(!(L1hits>0&&D1hits>0&&D2hits>0) && !(L2hits>0&&D1hits>0&&D2hits>0))
continue;
538 if(debug_)
std::cout <<
"the hit is persistent\n";
540 std::map<uint32_t, SiPixelHitEfficiencyModule*>::iterator pxd =
theSiPixelStructure.find((*hit).geographicalId().rawId());
550 if(fabs(lx)>0.55 || fabs(ly)>3.0)
continue;
552 bool passedFiducial=
true;
557 ((module==1 && fabs(ly)<0.7) ||
558 ((module==2 && fabs(ly)<1.1) &&
559 !(disk==-1 && ly>0.8 && lx>0.2) &&
560 !(disk==1 && ly<-0.7 && lx>0.2) &&
561 !(disk==2 && ly<-0.8)) ||
562 ((module==3 && fabs(ly)<1.5) &&
563 !(disk==-2 && lx>0.1 && ly>1.0) &&
564 !(disk==2 && lx>0.1 && ly<-1.0)) ||
565 ((module==4 && fabs(ly)<1.9) &&
566 !(disk==-2 && ly>1.5) &&
567 !(disk==2 && ly<-1.5)))) ||
569 ((module==1 && fabs(ly)<0.7) ||
570 (module==2 && fabs(ly)<1.2 &&
571 !(disk>0 && ly>1.1) &&
572 !(disk<0 && ly<-1.1)) ||
573 (module==3 && fabs(ly)<1.6 &&
574 !(disk>0 && ly>1.5) &&
575 !(disk<0 && ly<-1.5)))))) passedFiducial=
false;
577 ((panel==1 && (module==1 || (module>=3 &&
abs(disk)==1))) ||
578 (panel==2 && ((module==1 &&
abs(disk)==2) ||
579 (module==3 &&
abs(disk)==1))))) passedFiducial=
false;
581 double ly_mod = fabs(ly);
583 float d_rocedge = fabs(fmod(ly_mod,0.81)-0.405);
584 if(d_rocedge<=0.0625) passedFiducial=
false;
586 ((!isHalfModule && fabs(lx)<0.6) ||
587 (isHalfModule && lx>-0.3 && lx<0.2))) ||
590 ((module==1 && fabs(lx)<0.2) ||
592 ((fabs(lx)<0.55 &&
abs(disk)==1) ||
593 (lx>-0.5 && lx<0.2 && disk==-2) ||
594 (lx>-0.5 && lx<0.0 && disk==2))) ||
595 (module==3 && lx>-0.6 && lx<0.5) ||
596 (module==4 && lx>-0.3 && lx<0.15))) ||
598 ((module==1 && fabs(lx)<0.6) ||
600 ((fabs(lx)<0.55 &&
abs(disk)==1) ||
601 (lx>-0.6 && lx<0.5 &&
abs(disk)==2))) ||
602 (module==3 && fabs(lx)<0.5))))))) passedFiducial=
false;
605 fabs(lx)<0.06) passedFiducial=
false;
609 float dx_cl[2];
float dy_cl[2]; dx_cl[0]=dx_cl[1]=dy_cl[0]=dy_cl[1]=-9999.;
620 if(clusterCollectionHandle.
isValid()){
623 float minD[2]; minD[0]=minD[1]=10000.;
624 for( ; itClusterSet!=clusterCollection.
end(); itClusterSet++){
625 DetId detId(itClusterSet->
id());
626 if(detId.rawId()!=hit->geographicalId().rawId())
continue;
630 for( ; itCluster!=itClusterSet->
end(); ++itCluster){
631 LocalPoint lp(itCluster->x(), itCluster->y(), 0.);
633 lp=std::get<0>(params);
634 float D =
sqrt((lp.
x()-lx)*(lp.
x()-lx)+(lp.
y()-ly)*(lp.
y()-ly));
649 for(
size_t i=0;
i<2;
i++){
651 dx_cl[
i]=fabs(dx_cl[
i]-lx);
652 dy_cl[
i]=fabs(dy_cl[
i]-ly);
659 float d_cl[2]; d_cl[0]=d_cl[1]=-9999.;
660 if(dx_cl[0]!=-9999. && dy_cl[0]!=-9999.) d_cl[0]=
sqrt(dx_cl[0]*dx_cl[0]+dy_cl[0]*dy_cl[0]);
661 if(dx_cl[1]!=-9999. && dy_cl[1]!=-9999.) d_cl[1]=
sqrt(dx_cl[1]*dx_cl[1]+dy_cl[1]*dy_cl[1]);
662 if(isHitMissing && (d_cl[0]<0.05 || d_cl[1]<0.05)){ isHitMissing=0; isHitValid=1; }
666 std::cout <<
"Ready to add hit in histogram:\n";
668 std::cout <<
"isHitValid: "<<isHitValid<<std::endl;
669 std::cout <<
"isHitMissing: "<<isHitMissing<<std::endl;
690 if(debug_)
std::cout <<
"no pixeltrack:\n";
int plaquetteName() const
plaquetteId (in pannel)
edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerEventToken_
T getParameter(std::string const &) const
~SiPixelHitEfficiencySource()
virtual const TrackerGeomDet * idToDetUnit(DetId) const
Return the pointer to the GeomDetUnit corresponding to a given DetId.
T getUntrackedParameter(std::string const &, T const &) const
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
virtual void setPropagationDirection(PropagationDirection dir)
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const_iterator end(bool update=false) const
ConstRecHitPointer const & recHit() const
SiPixelHitEfficiencySource(const edm::ParameterSet &)
const LocalTrajectoryParameters & localParameters() const
friend struct const_iterator
const_iterator end() const
last iterator over the map (read only)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
LocalPoint localPosition() const
virtual void analyze(const edm::Event &, const edm::EventSetup &)
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > clusterCollectionToken_
std::map< uint32_t, SiPixelHitEfficiencyModule * > theSiPixelStructure
GlobalPoint globalPosition() const
bool isHalfModule() const
full or half module
std::vector< Vertex > VertexCollection
collection of Vertex objects
unsigned int ladder() const
ladder id
data_type const * const_iterator
key_type key() const
Accessor for product key.
id_type id(size_t cell) const
int plaquetteName() const
plaquetteId (in pannel)
virtual void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
edm::EDGetTokenT< reco::VertexCollection > vertexCollectionToken_
virtual ReturnType getParameters(const SiPixelCluster &cl, const GeomDetUnit &det) const =0
bool isHalfModule() const
full or half module
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
bool setModuleFolder(const uint32_t &rawdetid=0, int type=0, bool isUpgrade=false)
Set folder name for a module or plaquette.
edm::EDGetTokenT< TrajTrackAssociationCollection > tracksrc_
unsigned int module() const
det id
Abs< T >::type abs(const T &t)
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
int diskName() const
disk id
DecomposeProduct< arg, typename Div::arg > D
size_type size() const
map size
T const * product() const
int layerName() const
layer id
T const * product() const
virtual void dqmBeginRun(const edm::Run &r, edm::EventSetup const &iSetup)
int pannelName() const
pannel id
int diskName() const
disk id
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
const_iterator begin() const
first iterator over the map (read only)
volatile std::atomic< bool > shutdown_flag false
std::tuple< LocalPoint, LocalError, SiPixelRecHitQuality::QualWordType > ReturnType
int pannelName() const
pannel id
int layerName() const
layer id
const_iterator begin(bool update=false) const