Skip to content

Commit

Permalink
Updated code adding GEM hits in STA reconstruction
Browse files Browse the repository at this point in the history
  • Loading branch information
archiesharma committed Jul 8, 2015
1 parent 8996bd2 commit ca6b012
Show file tree
Hide file tree
Showing 45 changed files with 917 additions and 66 deletions.
Expand Up @@ -11,6 +11,7 @@
theMinNrec = cms.double(20.),
dt4DSegments = cms.InputTag("dt4DSegments"),
theRPCRecHits = cms.InputTag("dummy"),
thegemRecHits = cms.InputTag("dummy"),
cscSegments = cms.InputTag("dummy"),
RPCLayers = cms.bool(False),
NavigationType = cms.string("Direct")
Expand Down
1 change: 1 addition & 0 deletions DQM/DTMonitorModule/python/dtChamberEfficiency_cfi.py
Expand Up @@ -11,6 +11,7 @@
theMinNrec = cms.double(20.),
dt4DSegments = cms.InputTag("dt4DSegments"),
theRPCRecHits = cms.InputTag("dummy"),
thegemRecHits = cms.InputTag("dummy"),
cscSegments = cms.InputTag("dummy"),
RPCLayers = cms.bool(False),
NavigationType = cms.string("Standard")
Expand Down
3 changes: 2 additions & 1 deletion DQM/DTMonitorModule/src/DTChamberEfficiency.cc
Expand Up @@ -79,7 +79,8 @@ DTChamberEfficiency::DTChamberEfficiency(const ParameterSet& pSet)
edm::ConsumesCollector iC = consumesCollector();

theMeasurementExtractor = new MuonDetLayerMeasurements(thedt4DSegments,thecscSegments,
labelRPCRecHits,iC,true,false,false);
labelRPCRecHits,labelGEMHits,iC,true,false,false,false);


theNavigationType = pSet.getParameter<string>("NavigationType");

Expand Down
1 change: 1 addition & 0 deletions DQM/DTMonitorModule/src/DTChamberEfficiency.h
Expand Up @@ -94,6 +94,7 @@ void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const
edm::InputTag labelRPCRecHits;
edm::InputTag thedt4DSegments;
edm::InputTag thecscSegments;
edm::InputTag labelGEMHits;

double theMaxChi2;
double theNSigma;
Expand Down
68 changes: 67 additions & 1 deletion DataFormats/TrackReco/interface/HitPattern.h
Expand Up @@ -33,6 +33,7 @@
// | mu = 0 | DT = 1 | 4*(stat-1)+superlayer | | hit type = 0-3 |
// | mu = 0 | CSC = 2 | 4*(stat-1)+(ring-1) | | hit type = 0-3 |
// | mu = 0 | RPC = 3 | 4*(stat-1)+2*layer+region | | hit type = 0-3 |
// | mu = 0 | GEM = 4 | 2*(stat-1)+2*(layer-1) | | hit type = 0-3 |
// +--------+---------------+---------------------------+-----------------+----------------+
//
// hit type, see DataFormats/TrackingRecHit/interface/TrackingRecHit.h
Expand Down Expand Up @@ -182,6 +183,7 @@ class HitPattern
static bool muonDTHitFilter(uint16_t pattern);
static bool muonCSCHitFilter(uint16_t pattern);
static bool muonRPCHitFilter(uint16_t pattern);
static bool muonGEMHitFilter(uint16_t pattern);

static uint32_t getHitType(uint16_t pattern);

Expand All @@ -207,6 +209,12 @@ class HitPattern
/// RPC region: 0 = barrel, 1 = endcap. Only valid for muon RPC patterns, of course.
static uint16_t getRPCregion(uint16_t pattern);

/// GEM station: 1,2. Only valid for muon GEM patterns, of course.
static uint16_t getGEMStation(uint16_t pattern);

/// GEM layer: 1,2. Only valid for muon GEM patterns, of course.
static uint16_t getGEMLayer(uint16_t pattern);

HitPattern();

~HitPattern();
Expand Down Expand Up @@ -279,15 +287,18 @@ class HitPattern
int numberOfValidMuonDTHits() const; // not-null, valid, muon DT
int numberOfValidMuonCSCHits() const; // not-null, valid, muon CSC
int numberOfValidMuonRPCHits() const; // not-null, valid, muon RPC
int numberOfValidMuonGEMHits() const; // not-null, valid, muon GEM
int numberOfLostMuonHits() const; // not-null, not valid, muon
int numberOfLostMuonDTHits() const; // not-null, not valid, muon DT
int numberOfLostMuonCSCHits() const; // not-null, not valid, muon CSC
int numberOfLostMuonRPCHits() const; // not-null, not valid, muon RPC
int numberOfLostMuonGEMHits() const; // not-null, not valid, muon GEM
int numberOfBadHits() const; // not-null, bad (only used in Muon Ch.)
int numberOfBadMuonHits() const; // not-null, bad, muon
int numberOfBadMuonDTHits() const; // not-null, bad, muon DT
int numberOfBadMuonCSCHits() const; // not-null, bad, muon CSC
int numberOfBadMuonRPCHits() const; // not-null, bad, muon RPC
int numberOfBadMuonGEMHits() const; // not-null, bad, muon GEM

int numberOfInactiveHits() const; // not-null, inactive
int numberOfInactiveTrackerHits() const; // not-null, inactive, tracker
Expand Down Expand Up @@ -346,7 +357,7 @@ class HitPattern
int stripTOBLayersNull() const; // case NULL_RETURN: strip TOB
int stripTECLayersNull() const; // case NULL_RETURN: strip TEC

/// subdet = 0(all), 1(DT), 2(CSC), 3(RPC); hitType=-1(all), 0=valid, 3=bad
/// subdet = 0(all), 1(DT), 2(CSC), 3(RPC) 4(GEM); hitType=-1(all), 0=valid, 3=bad
int muonStations(int subdet, int hitType) const ;

int muonStationsWithValidHits() const;
Expand All @@ -365,6 +376,10 @@ class HitPattern
int rpcStationsWithBadHits() const;
int rpcStationsWithAnyHits() const;

int gemStationsWithValidHits() const ;
int gemStationsWithBadHits() const ;
int gemStationsWithAnyHits() const ;

/// hitType=-1(all), 0=valid, 3=bad; 0 = no stations at all
int innermostMuonStationWithHits(int hitType) const;
int innermostMuonStationWithValidHits() const;
Expand Down Expand Up @@ -618,6 +633,16 @@ inline bool HitPattern::muonRPCHitFilter(uint16_t pattern)
return (substructure == (uint32_t) MuonSubdetId::RPC);
}

inline bool HitPattern::muonGEMHitFilter(uint16_t pattern)
{
if unlikely(!muonHitFilter(pattern)) {
return false;
}

uint32_t substructure = getSubStructure(pattern);
return (substructure == (uint32_t) MuonSubdetId::GEM);
}

inline bool HitPattern::trackerHitFilter(uint16_t pattern)
{
return pattern > minTrackerWord;
Expand Down Expand Up @@ -715,6 +740,17 @@ inline uint16_t HitPattern::getRPCregion(uint16_t pattern)
return getSubSubStructure(pattern) & 1;
}

////////////////////////////// GEM
inline uint16_t HitPattern::getGEMStation(uint16_t pattern)
{
uint16_t sss = getSubSubStructure(pattern), stat = sss >> 1;
return stat + 1;
}
inline uint16_t HitPattern::getGEMLayer(uint16_t pattern)
{
return (getSubSubStructure(pattern) & 1) + 1;
}

inline bool HitPattern::validHitFilter(uint16_t pattern)
{
return getHitType(pattern) == HitPattern::VALID;
Expand Down Expand Up @@ -821,6 +857,11 @@ inline int HitPattern::numberOfValidMuonRPCHits() const
return countTypedHits(TRACK_HITS, validHitFilter, muonRPCHitFilter);
}

inline int HitPattern::numberOfValidMuonGEMHits() const
{
return countTypedHits(TRACK_HITS, validHitFilter, muonGEMHitFilter);
}

inline int HitPattern::numberOfLostHits(HitCategory category) const
{
return countHits(category, missingHitFilter);
Expand Down Expand Up @@ -891,6 +932,11 @@ inline int HitPattern::numberOfLostMuonRPCHits() const
return countTypedHits(TRACK_HITS, missingHitFilter, muonRPCHitFilter);
}

inline int HitPattern::numberOfLostMuonGEMHits() const
{
return countTypedHits(TRACK_HITS, missingHitFilter, muonGEMHitFilter);
}

inline int HitPattern::numberOfBadHits() const
{
return countHits(TRACK_HITS, badHitFilter);
Expand All @@ -916,6 +962,11 @@ inline int HitPattern::numberOfBadMuonRPCHits() const
return countTypedHits(TRACK_HITS, inactiveHitFilter, muonRPCHitFilter);
}

inline int HitPattern::numberOfBadMuonGEMHits() const
{
return countTypedHits(TRACK_HITS, inactiveHitFilter, muonGEMHitFilter);
}

inline int HitPattern::numberOfInactiveHits() const
{
return countHits(TRACK_HITS, inactiveHitFilter);
Expand Down Expand Up @@ -1062,6 +1113,21 @@ inline int HitPattern::rpcStationsWithAnyHits() const
return muonStations(3, -1);
}

inline int HitPattern::gemStationsWithValidHits() const
{
return muonStations(4, 0);
}

inline int HitPattern::gemStationsWithBadHits() const
{
return muonStations(4, 3);
}

inline int HitPattern::gemStationsWithAnyHits() const
{
return muonStations(4,-1);
}

inline int HitPattern::innermostMuonStationWithValidHits() const
{
return innermostMuonStationWithHits(0);
Expand Down
13 changes: 12 additions & 1 deletion DataFormats/TrackReco/src/HitPattern.cc
Expand Up @@ -9,6 +9,7 @@
#include "DataFormats/MuonDetId/interface/DTLayerId.h"
#include "DataFormats/MuonDetId/interface/CSCDetId.h"
#include "DataFormats/MuonDetId/interface/RPCDetId.h"
#include "DataFormats/MuonDetId/interface/GEMDetId.h"

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

Expand Down Expand Up @@ -114,6 +115,13 @@ namespace {
layer |= abs(rpcid.region());
}
break;
case MuonSubdetId::GEM:
{
GEMDetId gemid(id.rawId());
layer = ((gemid.station()-1)<<2);
layer |= abs(gemid.layer()-1);
}
break;
}
}
return layer;
Expand Down Expand Up @@ -150,7 +158,7 @@ uint16_t HitPattern::encode(uint16_t det, uint16_t subdet, uint16_t layer, uint1
// adding tracker/muon detector bit
pattern |= (det & SubDetectorMask) << SubDetectorOffset;

// adding substructure (PXB, PXF, TIB, TID, TOB, TEC, or DT, CSC, RPC) bits
// adding substructure (PXB, PXF, TIB, TID, TOB, TEC, or DT, CSC, RPC,GEM) bits
pattern |= (subdet & SubstrMask) << SubstrOffset;

// adding layer/disk/wheel bits
Expand Down Expand Up @@ -839,6 +847,9 @@ void HitPattern::printHitPattern(HitCategory category, int position, std::ostrea
} else if (muonRPCHitFilter(pattern)) {
stream << "\trpc " << (getRPCregion(pattern) ? "endcaps" : "barrel")
<< ", layer " << getRPCLayer(pattern);
} else if (muonGEMHitFilter(pattern)) {
stream << "\tgem " << (getGEMLayer(pattern) ? "layer1" : "layer2")
<< ", station " << getGEMStation(pattern);
} else {
stream << "(UNKNOWN Muon SubStructure!) \tsubsubstructure "
<< getSubStructure(pattern);
Expand Down
Expand Up @@ -49,6 +49,7 @@ CosmicMuonTrajectoryBuilder::CosmicMuonTrajectoryBuilder(const edm::ParameterSet
bool enableCSCMeasurement = par.getParameter<bool>("EnableCSCMeasurement");
bool enableRPCMeasurement = par.getParameter<bool>("EnableRPCMeasurement");


// if(enableDTMeasurement)
InputTag DTRecSegmentLabel = par.getParameter<InputTag>("DTRecSegmentLabel");

Expand All @@ -57,13 +58,17 @@ CosmicMuonTrajectoryBuilder::CosmicMuonTrajectoryBuilder(const edm::ParameterSet

// if(enableRPCMeasurement)
InputTag RPCRecSegmentLabel = par.getParameter<InputTag>("RPCRecSegmentLabel");


theLayerMeasurements= new MuonDetLayerMeasurements(DTRecSegmentLabel,
CSCRecSegmentLabel,
RPCRecSegmentLabel,
edm::InputTag(),
iC,
enableDTMeasurement,
enableCSCMeasurement,
enableRPCMeasurement);
enableRPCMeasurement,
false);

ParameterSet muonUpdatorPSet = par.getParameter<ParameterSet>("MuonTrajectoryUpdatorParameters");

Expand Down
60 changes: 56 additions & 4 deletions RecoMuon/DetLayers/interface/MuonDetLayerGeometry.h
Expand Up @@ -6,6 +6,8 @@
* Provide access to the DetLayers of muon detectors.
*
* \author N. Amapane - CERN
*
* \modified by R. Radogna & C. Calabria & A. Sharma
*/

#include "DataFormats/DetId/interface/DetId.h"
Expand Down Expand Up @@ -38,6 +40,20 @@ class MuonDetLayerGeometry : public DetLayerGeometry{
/// return the backward (-Z) CSC DetLayers, inside-out
const std::vector<const DetLayer*>& backwardCSCLayers() const;

/////////////////////////////// GEMs

/// return the GEM DetLayers (endcap), -Z to +Z
const std::vector<const DetLayer*>& allGEMLayers() const;

/// return the forward (+Z) GEM DetLayers, inside-out
const std::vector<const DetLayer*>& forwardGEMLayers() const;

/// return the backward (-Z) GEM DetLayers, inside-out
const std::vector<const DetLayer*>& backwardGEMLayers() const;

//////////////////////////////


/// return all RPC DetLayers, order: backward, barrel, forward
const std::vector<const DetLayer*>& allRPCLayers() const;

Expand All @@ -53,20 +69,34 @@ class MuonDetLayerGeometry : public DetLayerGeometry{
/// return the backward (-Z) RPC DetLayers, inside-out
const std::vector<const DetLayer*>& backwardRPCLayers() const;

/// return all layers (DT+CSC+RPC), order: backward, barrel, forward
/// return all layers (DT+CSC+RPC+GEM), order: backward, barrel, forward
const std::vector<const DetLayer*>& allLayers() const;

/// return all barrel DetLayers (DT+RPC), inside-out
const std::vector<const DetLayer*>& allBarrelLayers() const;

/// return all endcap DetLayers (CSC+RPC), -Z to +Z
/// return all endcap DetLayers (CSC+RPC+GEM), -Z to +Z
const std::vector<const DetLayer*>& allEndcapLayers() const;

/// return all forward (+Z) layers (CSC+RPC), inside-out
/// return all forward (+Z) layers (CSC+RPC+GEM), inside-out
const std::vector<const DetLayer*>& allForwardLayers() const;

/// return all backward (-Z) layers (CSC+RPC), inside-out
/// return all backward (-Z) layers (CSC+RPC+GEM), inside-out
const std::vector<const DetLayer*>& allBackwardLayers() const;

/////////////////////////////// GEMs

/// return all endcap DetLayers (CSC+GEM), -Z to +Z
const std::vector<const DetLayer*>& allEndcapCscGemLayers() const;

/// return all endcap DetLayers (CSC+GEM), -Z to +Z
const std::vector<const DetLayer*>& allCscGemForwardLayers() const;

/// return all endcap DetLayers (CSC+GEM), -Z to +Z
const std::vector<const DetLayer*>& allCscGemBackwardLayers() const;

//////////////////////////////


/// return the DetLayer which correspond to a certain DetId
virtual const DetLayer* idToLayer(const DetId& detId) const override;
Expand All @@ -85,6 +115,14 @@ class MuonDetLayerGeometry : public DetLayerGeometry{
/// All three vectors are ASSUMED to be sorted inside-out
void addRPCLayers(const std::vector<DetLayer*>& barrelRPCLayers, const std::pair<std::vector<DetLayer*>, std::vector<DetLayer*> >& endcapRPCLayers);

/////////////////////////////// GEMs

/// Add GEM layers
/// gemlayers.first=forward (+Z), gemlayers.second=backward (-Z)
/// both vectors are ASSUMED to be sorted inside-out
void addGEMLayers(const std::pair<std::vector<DetLayer*>, std::vector<DetLayer*> >& gemlayers);

//////////////////////////////

DetId makeDetLayerId(const DetLayer* detLayer) const;

Expand All @@ -93,6 +131,14 @@ class MuonDetLayerGeometry : public DetLayerGeometry{
std::vector<const DetLayer*> cscLayers_fw;
std::vector<const DetLayer*> cscLayers_bk;
std::vector<const DetLayer*> cscLayers_all;

/////////////////////////////// GEMs

std::vector<const DetLayer*> gemLayers_fw;
std::vector<const DetLayer*> gemLayers_bk;
std::vector<const DetLayer*> gemLayers_all;


std::vector<const DetLayer*> rpcLayers_all;
std::vector<const DetLayer*> rpcLayers_endcap;
std::vector<const DetLayer*> rpcLayers_fw;
Expand All @@ -105,6 +151,12 @@ class MuonDetLayerGeometry : public DetLayerGeometry{
std::vector<const DetLayer*> allBarrel;
std::vector<const DetLayer*> allDetLayers;

////////////////////////////// GEMs

std::vector<const DetLayer*> allEndcapCscGem;
std::vector<const DetLayer*> allCscGemForward;
std::vector<const DetLayer*> allCscGemBackward;

std::map<DetId,const DetLayer*> detLayersMap;
};
#endif
Expand Down
1 change: 1 addition & 0 deletions RecoMuon/DetLayers/plugins/BuildFile.xml
Expand Up @@ -5,6 +5,7 @@
<use name="Geometry/CSCGeometry"/>
<use name="Geometry/DTGeometry"/>
<use name="Geometry/RPCGeometry"/>
<use name="Geometry/GEMGeometry"/>
<use name="Geometry/Records"/>
<use name="RecoMuon/DetLayers"/>
<use name="RecoMuon/Records"/>
Expand Down

0 comments on commit ca6b012

Please sign in to comment.