52 sigmaResAngle = pset.
getParameter<
double>(
"sigmaResAngle");
55 theFile =
new TFile(rootFileName.c_str(),
"RECREATE");
59 h2DHitSuperPhi =
new HRes2DHit (
"SuperPhi");
60 h2DHitEff_SuperPhi =
new HEff2DHit (
"SuperPhi");
71 h2DHitSuperPhi->Write();
73 h2DHitEff_SuperPhi->ComputeEfficiency();
74 h2DHitEff_SuperPhi->Write();
89 event.getByLabel(simHitLabel,
"MuonDTHits", simHits);
92 map<DTChamberId, PSimHitContainer > simHitsPerCh;
93 for(PSimHitContainer::const_iterator simHit = simHits->begin();
94 simHit != simHits->end(); simHit++){
96 DTChamberId chamberId = (((
DTWireId(simHit->detUnitId())).layerId()).superlayerId()).chamberId();
98 simHitsPerCh[chamberId].push_back(*simHit);
103 event.getByLabel(segment4DLabel, segment4Ds);
107 for (chamberId = segment4Ds->id_begin();
108 chamberId != segment4Ds->id_end();
118 int nMuSimHit = muSimHitPerWire.size();
119 if(nMuSimHit == 0 || nMuSimHit == 1) {
120 if(
debug && nMuSimHit == 1)
121 cout <<
"[DTSegment2DSLPhiQuality] Only " << nMuSimHit <<
" mu SimHit in this chamber, skipping!" << endl;
125 cout <<
"=== Chamber " << (*chamberId) <<
" has " << nMuSimHit <<
" SimHits" << endl;
132 (*chamberId),&(*dtGeom));
134 LocalVector simSegmLocalDir = dirAndPosSimSegm.first;
135 LocalPoint simSegmLocalPos = dirAndPosSimSegm.second;
136 const DTChamber* chamber = dtGeom->chamber(*chamberId);
141 float posSimSeg = simSegmLocalPos.
x();
143 float etaSimSeg = simSegmGlobalPos.
eta();
144 float phiSimSeg = simSegmGlobalPos.
phi();
147 cout<<
" Simulated segment: local direction "<<simSegmLocalDir<<endl
148 <<
" local position "<<simSegmLocalPos<<endl
149 <<
" angle "<<angleSimSeg<<endl;
153 bool recHitFound =
false;
155 int nsegm = distance(range.first, range.second);
157 cout <<
" Chamber: " << *chamberId <<
" has " << nsegm
158 <<
" 4D segments" << endl;
167 bool bestRecHitFound =
false;
168 double deltaAlpha = 99999;
172 segment4D!=range.second;
175 if((*segment4D).dimension() != 4) {
176 if(
debug)
cout <<
"[DTSegment2DSLPhiQuality]***Error: This is not 4D segment!!!" << endl;
182 if((*phiSegment2D).dimension() != 2) {
183 if(
debug)
cout <<
"[DTSegment2DQuality]***Error: This is not 2D segment!!!" << endl;
188 LocalVector recSegDirection = (*phiSegment2D).localDirection();
192 cout <<
" RecSegment direction: " << recSegDirection << endl
193 <<
" position : " << (*phiSegment2D).localPosition() << endl
194 <<
" alpha : " << recSegAlpha << endl;
196 if(fabs(recSegAlpha - angleSimSeg) < deltaAlpha) {
197 deltaAlpha = fabs(recSegAlpha - angleSimSeg);
198 bestRecHit = &(*phiSegment2D);
199 bestRecHitFound =
true;
203 if(bestRecHitFound) {
212 if(fabs(angleBestRHit - angleSimSeg) < 5*sigmaResAngle &&
213 fabs(bestRecHitLocalPos.
x() - posSimSeg) < 5*sigmaResPos) {
218 h2DHitSuperPhi->Fill(angleSimSeg,
221 bestRecHitLocalPos.
x(),
224 sqrt(bestRecHitLocalPosErr.
xx()),
225 sqrt(bestRecHitLocalDirErr.
xx())
231 h2DHitEff_SuperPhi->Fill(etaSimSeg,
T getParameter(std::string const &) const
virtual LocalError localPositionError() const
local position error in SL frame
DTSegment2DSLPhiQuality(const edm::ParameterSet &pset)
Constructor.
T getUntrackedParameter(std::string const &, T const &) const
std::pair< const_iterator, const_iterator > range
iterator range
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup)
Perform the real analysis.
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.
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) ...
C::const_iterator const_iterator
constant access iterator type
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)
Find the angles from a segment 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...
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)
virtual ~DTSegment2DSLPhiQuality()
Destructor.