Skip to content

Commit

Permalink
Merge pull request #12955 from aysent/muon-alignment-updates
Browse files Browse the repository at this point in the history
  • Loading branch information
cmsbuild committed Feb 2, 2016
2 parents 5cd42ff + 7d388ef commit 7364fd3
Show file tree
Hide file tree
Showing 41 changed files with 3,093 additions and 2,157 deletions.
Expand Up @@ -583,6 +583,8 @@ bool AlignmentParameterSelector::outsideDetIdRanges(const Alignable *alignable)
const DetId detId(alignable->id());
const int subdetId = detId.subdetId();

if (alignableTracker()) {

const TrackerTopology* tTopo = alignableTracker()->trackerTopology();

if (!theDetIds.empty() &&
Expand Down Expand Up @@ -663,7 +665,7 @@ bool AlignmentParameterSelector::outsideDetIdRanges(const Alignable *alignable)
if (!theTECDetIdRanges.theSideRanges.empty() &&
!this->insideRanges<int>(tTopo->tecSide(detId), theTECDetIdRanges.theSideRanges)) return true;
}
}
}

return false;
Expand Down
Expand Up @@ -56,6 +56,9 @@
#include "CondFormats/AlignmentRecord/interface/CSCAlignmentErrorExtendedRcd.h"
#include "CondFormats/AlignmentRecord/interface/GlobalPositionRcd.h"
#include "CondFormats/Alignment/interface/DetectorGlobalPosition.h"

#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"

//
// class decleration
//
Expand Down
Expand Up @@ -24,6 +24,12 @@
#include "TH1F.h"
#include "TH2F.h"

#include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
#include "TrackingTools/GeomPropagators/interface/Propagator.h"
#include "TrackingTools/TrackAssociator/interface/DetIdAssociator.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
#include "MagneticField/Engine/interface/MagneticField.h"


class AlignmentMonitorMuonSystemMap1D: public AlignmentMonitorBase
{
Expand Down Expand Up @@ -260,6 +266,15 @@ void AlignmentMonitorMuonSystemMap1D::event(const edm::Event &iEvent, const edm:
edm::Handle<reco::BeamSpot> beamSpot;
iEvent.getByLabel(m_beamSpotTag, beamSpot);

edm::ESHandle<DetIdAssociator> muonDetIdAssociator_;
iSetup.get<DetIdAssociatorRecord>().get("MuonDetIdAssociator", muonDetIdAssociator_);

edm::ESHandle<Propagator> prop;
iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny",prop);

edm::ESHandle<MagneticField> magneticField;
iSetup.get<IdealMagneticFieldRecord>().get(magneticField);

if (m_muonCollectionTag.label().empty()) // use trajectories
{
for (ConstTrajTrackPairCollection::const_iterator trajtrack = trajtracks.begin(); trajtrack != trajtracks.end(); ++trajtrack)
Expand All @@ -275,7 +290,7 @@ void AlignmentMonitorMuonSystemMap1D::event(const edm::Event &iEvent, const edm:
{
m_counter_trackdxy++;

MuonResidualsFromTrack muonResidualsFromTrack(globalGeometry, traj, track, pNavigator(), 1000.);
MuonResidualsFromTrack muonResidualsFromTrack(iSetup, magneticField, globalGeometry, muonDetIdAssociator_, prop, traj, track, pNavigator(), 1000.);
processMuonResidualsFromTrack(muonResidualsFromTrack, iEvent);
}
} // end if track has acceptable momentum
Expand Down Expand Up @@ -337,7 +352,7 @@ void AlignmentMonitorMuonSystemMap1D::processMuonResidualsFromTrack(MuonResidual

m_counter_dt++;

if (id.station() < 4 && dt13 != NULL && dt13->numHits() >= m_minDT13Hits && dt2 != NULL && dt2->numHits() >= m_minDT2Hits)
if (id.station() < 4 && dt13 != NULL && dt13->numHits() >= m_minDT13Hits && dt2 != NULL && dt2->numHits() >= m_minDT2Hits && (dt2->chi2() / double(dt2->ndof())) < 2.0)
{
m_counter_13numhits++;

Expand Down
Expand Up @@ -24,6 +24,12 @@
#include "TH2F.h"
#include "TH1F.h"

#include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
#include "TrackingTools/GeomPropagators/interface/Propagator.h"
#include "TrackingTools/TrackAssociator/interface/DetIdAssociator.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
#include "MagneticField/Engine/interface/MagneticField.h"


class AlignmentMonitorMuonVsCurvature: public AlignmentMonitorBase
{
Expand Down Expand Up @@ -191,6 +197,15 @@ void AlignmentMonitorMuonVsCurvature::event(const edm::Event &iEvent, const edm:
edm::Handle<reco::BeamSpot> beamSpot;
iEvent.getByLabel(m_beamSpotTag, beamSpot);

edm::ESHandle<DetIdAssociator> muonDetIdAssociator_;
iSetup.get<DetIdAssociatorRecord>().get("MuonDetIdAssociator", muonDetIdAssociator_);

edm::ESHandle<Propagator> prop;
iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny",prop);

edm::ESHandle<MagneticField> magneticField;
iSetup.get<IdealMagneticFieldRecord>().get(magneticField);

if (m_muonCollectionTag.label().empty()) // use trajectories
{
for (ConstTrajTrackPairCollection::const_iterator trajtrack = trajtracks.begin(); trajtrack != trajtracks.end(); ++trajtrack)
Expand All @@ -200,7 +215,7 @@ void AlignmentMonitorMuonVsCurvature::event(const edm::Event &iEvent, const edm:

if (track->pt() > m_minTrackPt && track->p() > m_minTrackP && fabs(track->dxy(beamSpot->position())) < m_maxDxy )
{
MuonResidualsFromTrack muonResidualsFromTrack(globalGeometry, traj, track, pNavigator(), 1000.);
MuonResidualsFromTrack muonResidualsFromTrack(iSetup, magneticField, globalGeometry, muonDetIdAssociator_, prop, traj, track, pNavigator(), 1000.);
processMuonResidualsFromTrack(muonResidualsFromTrack, traj );
} // end if track pT is within range
} // end loop over tracks
Expand Down
Expand Up @@ -24,6 +24,12 @@

#include <sstream>

#include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
#include "TrackingTools/GeomPropagators/interface/Propagator.h"
#include "TrackingTools/TrackAssociator/interface/DetIdAssociator.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
#include "MagneticField/Engine/interface/MagneticField.h"


class AlignmentMonitorSegmentDifferences: public AlignmentMonitorBase
{
Expand Down Expand Up @@ -343,6 +349,16 @@ void AlignmentMonitorSegmentDifferences::event(const edm::Event &iEvent, const e
edm::Handle<reco::BeamSpot> beamSpot;
iEvent.getByLabel(m_beamSpotTag, beamSpot);

edm::ESHandle<DetIdAssociator> muonDetIdAssociator_;
iSetup.get<DetIdAssociatorRecord>().get("MuonDetIdAssociator", muonDetIdAssociator_);


edm::ESHandle<Propagator> prop;
iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny",prop);

edm::ESHandle<MagneticField> magneticField;
iSetup.get<IdealMagneticFieldRecord>().get(magneticField);

if (m_muonCollectionTag.label().empty()) // use trajectories
{
for (ConstTrajTrackPairCollection::const_iterator trajtrack = trajtracks.begin(); trajtrack != trajtracks.end(); ++trajtrack)
Expand All @@ -352,7 +368,7 @@ void AlignmentMonitorSegmentDifferences::event(const edm::Event &iEvent, const e

if (track->pt() > m_minTrackPt && track->p() > m_minTrackP && fabs(track->dxy(beamSpot->position())) < m_maxDxy )
{
MuonResidualsFromTrack muonResidualsFromTrack(globalGeometry, traj, track, pNavigator(), 1000.);
MuonResidualsFromTrack muonResidualsFromTrack(iSetup, magneticField, globalGeometry,muonDetIdAssociator_, prop, traj, track, pNavigator(), 1000.);
processMuonResidualsFromTrack(muonResidualsFromTrack);
}
} // end loop over tracks
Expand Down Expand Up @@ -478,7 +494,7 @@ void AlignmentMonitorSegmentDifferences::processMuonResidualsFromTrack(MuonResid
} // end if DT13

// z-direction
if (dt2 != NULL && dt2->numHits() >= m_minDT2Hits)
if (dt2 != NULL && dt2->numHits() >= m_minDT2Hits && (dt2->chi2() / double(dt2->ndof())) < 2.0)
{
DTChamberId thisid(chamberId->rawId());
for (std::vector<DetId>::const_iterator otherId = chamberIds.begin(); otherId != chamberIds.end(); ++otherId)
Expand Down
2 changes: 1 addition & 1 deletion Alignment/MuonAlignment/python/convertSQLitetoXML_cfg.py
Expand Up @@ -4,7 +4,7 @@
process.source = cms.Source("EmptySource")
process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1))

process.load("Geometry.CMSCommonData.cmsIdealGeometryXML_cfi")
process.load("Configuration.StandardSequences.GeometryIdeal_cff")
process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi")

process.load("CondCore.DBCommon.CondDBSetup_cfi")
Expand Down
2 changes: 1 addition & 1 deletion Alignment/MuonAlignment/python/convertXMLtoSQLite_cfg.py
Expand Up @@ -5,7 +5,7 @@
process.source = cms.Source("EmptySource")
process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1))

process.load("Geometry.CMSCommonData.cmsIdealGeometryXML_cfi")
process.load("Configuration.StandardSequences.GeometryIdeal_cff")
process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi")

process.MuonGeometryDBConverter = cms.EDAnalyzer("MuonGeometryDBConverter",
Expand Down
2 changes: 1 addition & 1 deletion Alignment/MuonAlignment/python/download_sqlite_cfg.py
Expand Up @@ -8,7 +8,7 @@
process.source = cms.Source("EmptySource")
process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1))

process.load("Geometry.CMSCommonData.cmsIdealGeometryXML_cfi")
process.load("Configuration.StandardSequences.GeometryIdeal_cff")
process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi")
process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
process.GlobalTag.globaltag = globalTag
Expand Down
Expand Up @@ -355,7 +355,7 @@ def random6dof():
process.source = cms.Source("EmptySource")
process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1))
process.load("Geometry.CMSCommonData.cmsIdealGeometryXML_cfi")
process.load("Configuration.StandardSequences.GeometryDB_cff")
process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi")
process.MuonGeometryDBConverter = cms.EDAnalyzer("MuonGeometryDBConverter",
Expand Down
2 changes: 2 additions & 0 deletions Alignment/MuonAlignment/src/MuonAlignmentInputMethod.cc
Expand Up @@ -21,6 +21,8 @@
#include "Geometry/DTGeometryBuilder/src/DTGeometryBuilderFromDDD.h"
#include "Geometry/CSCGeometryBuilder/src/CSCGeometryBuilderFromDDD.h"

#include "FWCore/MessageLogger/interface/MessageLogger.h"

//
// constants, enums and typedefs
//
Expand Down
4 changes: 4 additions & 0 deletions Alignment/MuonAlignmentAlgorithms/BuildFile.xml
Expand Up @@ -10,10 +10,14 @@
<use name="TrackingTools/TrackFitters"/>
<use name="Alignment/CommonAlignment"/>
<use name="RecoMuon/TransientTrackingRecHit"/>
<use name="TrackingTools/TransientTrack"/>
<use name="MagneticField/Records"/>
<use name="clhep"/>
<use name="root"/>
<use name="rootcore"/>
<use name="rootminuit"/>
<use name="TrackingTools/TrackAssociator"/>
<use name="TrackingTools/Records"/>
<export>
<lib name="1"/>
</export>
Expand Up @@ -9,16 +9,17 @@
*/

#include "Alignment/MuonAlignmentAlgorithms/interface/MuonHitsChamberResidual.h"
#include "TrackingTools/GeomPropagators/interface/Propagator.h"

class MuonCSCChamberResidual: public MuonHitsChamberResidual
{
public:
MuonCSCChamberResidual(edm::ESHandle<GlobalTrackingGeometry> globalGeometry, AlignableNavigator *navigator,
DetId chamberId, const AlignableDetOrUnitPtr& chamberAlignable);
DetId chamberId, AlignableDetOrUnitPtr chamberAlignable);

// for CSC, the residual is chamber local x, projected by the strip measurement direction
// for CSC, the resslope is dresx/dz, or tan(phi_y)
virtual void addResidual(const TrajectoryStateOnSurface *tsos, const TransientTrackingRecHit *hit);
virtual void addResidual(edm::ESHandle<Propagator> prop, const TrajectoryStateOnSurface *tsos, const TrackingRecHit *hit,double, double);

// dummy method
virtual void setSegmentResidual(const reco::MuonChamberMatch *, const reco::MuonSegmentMatch *) {}
Expand Down
13 changes: 11 additions & 2 deletions Alignment/MuonAlignmentAlgorithms/interface/MuonChamberResidual.h
Expand Up @@ -21,6 +21,8 @@
#include "DataFormats/MuonReco/interface/Muon.h"
#include "DataFormats/MuonReco/interface/MuonFwd.h"

#include "TrackingTools/GeomPropagators/interface/Propagator.h"

class MuonChamberResidual
{
public:
Expand All @@ -32,12 +34,12 @@ class MuonChamberResidual
};

MuonChamberResidual(edm::ESHandle<GlobalTrackingGeometry> globalGeometry, AlignableNavigator *navigator,
DetId chamberId, const AlignableDetOrUnitPtr& chamberAlignable);
DetId chamberId, AlignableDetOrUnitPtr chamberAlignable);

virtual ~MuonChamberResidual() {}

// has to be implemented for rechit based residuals
virtual void addResidual(const TrajectoryStateOnSurface *, const TransientTrackingRecHit *) = 0;
virtual void addResidual(edm::ESHandle<Propagator> prop, const TrajectoryStateOnSurface *, const TrackingRecHit *, double, double) = 0;

// has to be implemented for track muon segment residuals
virtual void setSegmentResidual(const reco::MuonChamberMatch *, const reco::MuonSegmentMatch *) = 0;
Expand Down Expand Up @@ -65,11 +67,15 @@ class MuonChamberResidual
double trackx() const { return m_trackx; }
double tracky() const { return m_tracky; }

double ChambW() const { return m_ChambW; }
double Chambl() const { return m_Chambl; }

double segdxdz() const { return m_segdxdz; }
double segdydz() const { return m_segdydz; }
double segx() const { return m_segx; }
double segy() const { return m_segy; }


align::GlobalPoint global_trackpos();
align::GlobalPoint global_stubpos();
double global_residual() const;
Expand Down Expand Up @@ -111,6 +117,9 @@ class MuonChamberResidual
double m_segdydz;
double m_segx;
double m_segy;
double m_ChambW;
double m_Chambl;


};

Expand Down
Expand Up @@ -9,16 +9,18 @@
*/

#include "Alignment/MuonAlignmentAlgorithms/interface/MuonHitsChamberResidual.h"
#include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
#include "TrackingTools/GeomPropagators/interface/Propagator.h"

class MuonDT13ChamberResidual: public MuonHitsChamberResidual
{
public:
MuonDT13ChamberResidual(edm::ESHandle<GlobalTrackingGeometry> globalGeometry, AlignableNavigator *navigator,
DetId chamberId, const AlignableDetOrUnitPtr& chamberAlignable);
DetId chamberId, AlignableDetOrUnitPtr chamberAlignable);

// for DT13, the residual is chamber local x
// for DT13, the resslope is dresx/dz, or tan(phi_y)
virtual void addResidual(const TrajectoryStateOnSurface *tsos, const TransientTrackingRecHit *hit);
virtual void addResidual(edm::ESHandle<Propagator> prop, const TrajectoryStateOnSurface *tsos, const TrackingRecHit *hit,double, double);

// dummy method
virtual void setSegmentResidual(const reco::MuonChamberMatch *, const reco::MuonSegmentMatch *) {}
Expand Down
Expand Up @@ -14,11 +14,11 @@ class MuonDT2ChamberResidual: public MuonHitsChamberResidual
{
public:
MuonDT2ChamberResidual(edm::ESHandle<GlobalTrackingGeometry> globalGeometry, AlignableNavigator *navigator,
DetId chamberId, const AlignableDetOrUnitPtr& chamberAlignable);
DetId chamberId, AlignableDetOrUnitPtr chamberAlignable);

// for DT2, the residual is chamber local y
// for DT2, the resslope is dresy/dz, or tan(phi_x)
virtual void addResidual(const TrajectoryStateOnSurface *tsos, const TransientTrackingRecHit *hit);
virtual void addResidual(edm::ESHandle<Propagator> prop, const TrajectoryStateOnSurface *tsos, const TrackingRecHit *hit, double, double);

// dummy method
virtual void setSegmentResidual(const reco::MuonChamberMatch *, const reco::MuonSegmentMatch *) {}
Expand Down
Expand Up @@ -30,6 +30,8 @@ class MuonHitsChamberResidual : public MuonChamberResidual

protected:

double m_chamber_width;
double m_chamber_length;
double m_residual_1;
double m_residual_x;
double m_residual_y;
Expand Down
Expand Up @@ -43,6 +43,11 @@ class MuonResiduals5DOFFitter: public MuonResidualsFitter
kPz,
kPt,
kCharge,
kStation,
kWheel,
kSector,
kChambW,
kChambl,
kNData
};

Expand Down
Expand Up @@ -51,6 +51,11 @@ class MuonResiduals6DOFFitter: public MuonResidualsFitter
kPz,
kPt,
kCharge,
kStation,
kWheel,
kSector,
kChambW,
kChambl,
kNData
};

Expand Down

0 comments on commit 7364fd3

Please sign in to comment.