51 sigmaResAngle = pset.
getParameter<
double>(
"sigmaResAngle");
54 cout <<
"[DTSegment2DQuality] Constructor called " << endl;
86 cout <<
"[DTSegment2DQuality] hitsos created " << endl;
104 h2DHitEff_RPhi->ComputeEfficiency();
105 h2DHitEff_RZ->ComputeEfficiency();
106 h2DHitEff_RZ_W0->ComputeEfficiency();
107 h2DHitEff_RZ_W1->ComputeEfficiency();
108 h2DHitEff_RZ_W2->ComputeEfficiency();
130 event.getByToken(simHitToken_, simHits);
133 map<DTSuperLayerId, PSimHitContainer > simHitsPerSl;
134 for(PSimHitContainer::const_iterator simHit = simHits->begin();
135 simHit != simHits->end(); simHit++){
139 simHitsPerSl[slId].push_back(*simHit);
144 event.getByToken(segment2DToken_, segment2Ds);
147 if(
debug)
cout <<
"[DTSegment2DQuality]**Warning: no 2DSegments with label: " << segment2DLabel
148 <<
" in this event, skipping!" << endl;
153 DTRecSegment2DCollection::id_iterator slId;
154 for (slId = segment2Ds->id_begin();
155 slId != segment2Ds->id_end();
165 int nMuSimHit = muSimHitPerWire.size();
166 if(nMuSimHit == 0 || nMuSimHit == 1) {
167 if(
debug && nMuSimHit == 1)
168 cout <<
"[DTSegment2DQuality] Only " << nMuSimHit <<
" mu SimHit in this SL, skipping!" << endl;
172 cout <<
"=== SL " << (*slId) <<
" has " << nMuSimHit <<
" SimHits" << endl;
177 if(inAndOutSimHit.first ==inAndOutSimHit.second ) {
178 cout <<
"[DTHitQualityUtils]***Warning: outermost and innermost SimHit are the same!" << endl;
186 LocalVector simSegmLocalDir = dirAndPosSimSegm.first;
187 LocalPoint simSegmLocalPos = dirAndPosSimSegm.second;
189 cout<<
" Simulated segment: local direction "<<simSegmLocalDir<<endl
190 <<
" local position "<<simSegmLocalPos<<endl;
191 const DTSuperLayer* superLayer = dtGeom->superLayer(*slId);
196 float posSimSeg = simSegmLocalPos.
x();
198 float etaSimSeg = simSegmGlobalPos.
eta();
199 float phiSimSeg = simSegmGlobalPos.
phi();
204 bool recHitFound =
false;
206 int nsegm = distance(range.first, range.second);
208 cout <<
" Sl: " << *slId <<
" has " << nsegm
209 <<
" 2D segments" << endl;
218 bool bestRecHitFound =
false;
219 double deltaAlpha = 99999;
223 segment2D!=range.second;
226 if((*segment2D).dimension() != 2) {
227 if(
debug)
cout <<
"[DTSegment2DQuality]***Error: This is not 2D segment!!!" << endl;
231 LocalVector recSegDirection = (*segment2D).localDirection();
232 LocalPoint recSegPosition = (*segment2D).localPosition();
236 cout <<
" RecSegment direction: " << recSegDirection << endl
237 <<
" position : " << recSegPosition << endl
238 <<
" alpha : " << recSegAlpha << endl;
240 if(fabs(recSegAlpha - angleSimSeg) < deltaAlpha) {
241 deltaAlpha = fabs(recSegAlpha - angleSimSeg);
242 bestRecHit = &(*segment2D);
243 bestRecHitFound =
true;
247 if(bestRecHitFound) {
257 if(fabs(angleBestRHit - angleSimSeg) < 5*sigmaResAngle &&
258 fabs(bestRecHitLocalPos.
x() - posSimSeg) < 5*sigmaResPos) {
264 if((*slId).superlayer() == 1 || (*slId).superlayer() == 3) {
266 }
else if((*slId).superlayer() == 2) {
267 h2DHitRZ->
Fill(angleSimSeg,
270 bestRecHitLocalPos.
x(),
273 sqrt(bestRecHitLocalPosErr.
xx()),
274 sqrt(bestRecHitLocalDirErr.
xx())
276 if(
abs((*slId).wheel()) == 0)
278 else if(
abs((*slId).wheel()) == 1)
280 else if(
abs((*slId).wheel()) == 2)
283 hRes->
Fill(angleSimSeg,
286 bestRecHitLocalPos.
x(),
289 sqrt(bestRecHitLocalPosErr.
xx()),
290 sqrt(bestRecHitLocalDirErr.
xx())
297 if((*slId).superlayer() == 1 || (*slId).superlayer() == 3) {
298 hEff = h2DHitEff_RPhi;
299 }
else if((*slId).superlayer() == 2) {
300 h2DHitEff_RZ->
Fill(etaSimSeg, phiSimSeg, posSimSeg, angleSimSeg, recHitFound);
301 if(
abs((*slId).wheel()) == 0)
302 hEff = h2DHitEff_RZ_W0;
303 else if(
abs((*slId).wheel()) == 1)
304 hEff = h2DHitEff_RZ_W1;
305 else if(
abs((*slId).wheel()) == 2)
306 hEff = h2DHitEff_RZ_W2;
308 hEff->
Fill(etaSimSeg, phiSimSeg, posSimSeg, angleSimSeg, recHitFound);
T getParameter(std::string const &) const
virtual LocalError localPositionError() const
local position error in SL frame
T getUntrackedParameter(std::string const &, T const &) const
virtual ~DTSegment2DQuality()
Destructor.
std::pair< const_iterator, const_iterator > range
iterator range
virtual void beginRun(const edm::Run &iRun, const edm::EventSetup &setup)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Geom::Phi< T > phi() const
virtual LocalError localDirectionError() const
the local direction error (xx,xy,yy) in SL frame: only xx is not 0.
DTSegment2DQuality(const edm::ParameterSet &pset)
Constructor.
static std::map< DTWireId, const PSimHit * > mapMuSimHitsPerWire(const std::map< DTWireId, edm::PSimHitContainer > &simHitWireMap)
Create a map between the Mu SimHits and corresponding MuBarWireId ;.
static std::pair< const PSimHit *, const PSimHit * > findMuSimSegment(const std::map< DTWireId, const PSimHit * > &mapWireAndMuSimHit)
Find Innermost and outermost SimHit from Mu in a SL (they identify a simulated segment) ...
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup)
Perform the real analysis.
void Fill(float angleSimSegment, float angleRecSegment, float posSimSegment, float posRecSegment, float etaSimSegment, float phiSimSegment, float sigmaPos, float sigmaAngle)
Abs< T >::type abs(const T &t)
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
static std::pair< double, double > findSegmentAlphaAndBeta(const LocalVector &direction)
virtual LocalPoint localPosition() const
local position in SL frame
static std::pair< LocalVector, LocalPoint > findMuSimSegmentDirAndPos(const std::pair< const PSimHit *, const PSimHit * > &inAndOutSimHit, const DetId detId, const DTGeometry *muonGeom)
Find direction and position of a segment (in local RF) from outer and inner mu SimHit in the RF of ob...
void Fill(float etaSimSegm, float phiSimSegm, float posSimSegm, float angleSimSegm, bool fillRecHit)
virtual LocalVector localDirection() const
the local direction in SL frame
std::vector< PSimHit > PSimHitContainer
static std::map< DTWireId, edm::PSimHitContainer > mapSimHitsPerWire(const edm::PSimHitContainer &simhits)
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")