Skip to content

Commit

Permalink
Make MuonDetLayerGeometry only give const access to DetLayers
Browse files Browse the repository at this point in the history
Changed the interface to MuonDetLayerGeometry to only give const
access to the data it holds. This is needed to enforce thread-safety.
All clients were updated to adapt to the new interface.

This change is part of the GeometricSearchTracker change since
MuonNavigationSchool assumes both geometry providing classes have
compatible interfaces.
  • Loading branch information
Dr15Jones committed May 2, 2014
1 parent c56bdff commit 1c61c6d
Show file tree
Hide file tree
Showing 11 changed files with 160 additions and 164 deletions.
60 changes: 30 additions & 30 deletions RecoMuon/DetLayers/interface/MuonDetLayerGeometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,49 +27,49 @@ class MuonDetLayerGeometry : public DetLayerGeometry{
virtual ~MuonDetLayerGeometry();

/// return the DT DetLayers (barrel), inside-out
const std::vector<DetLayer*>& allDTLayers() const;
const std::vector<const DetLayer*>& allDTLayers() const;

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

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

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

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

/// return the barrel RPC DetLayers, inside-out
const std::vector<DetLayer*>& barrelRPCLayers() const;
const std::vector<const DetLayer*>& barrelRPCLayers() const;

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

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

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

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

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

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

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

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

/// return the DetLayer which correspond to a certain DetId
virtual const DetLayer* idToLayer(const DetId& detId) const;
virtual const DetLayer* idToLayer(const DetId& detId) const override;

private:
/// Add CSC layers
Expand All @@ -90,22 +90,22 @@ class MuonDetLayerGeometry : public DetLayerGeometry{

void sortLayers();

std::vector<DetLayer*> cscLayers_fw;
std::vector<DetLayer*> cscLayers_bk;
std::vector<DetLayer*> cscLayers_all;
std::vector<DetLayer*> rpcLayers_all;
std::vector<DetLayer*> rpcLayers_endcap;
std::vector<DetLayer*> rpcLayers_fw;
std::vector<DetLayer*> rpcLayers_bk;
std::vector<DetLayer*> rpcLayers_barrel;
std::vector<DetLayer*> dtLayers;
std::vector<DetLayer*> allForward;
std::vector<DetLayer*> allBackward;
std::vector<DetLayer*> allEndcap;
std::vector<DetLayer*> allBarrel;
std::vector<DetLayer*> allDetLayers;
std::vector<const DetLayer*> cscLayers_fw;
std::vector<const DetLayer*> cscLayers_bk;
std::vector<const DetLayer*> cscLayers_all;
std::vector<const DetLayer*> rpcLayers_all;
std::vector<const DetLayer*> rpcLayers_endcap;
std::vector<const DetLayer*> rpcLayers_fw;
std::vector<const DetLayer*> rpcLayers_bk;
std::vector<const DetLayer*> rpcLayers_barrel;
std::vector<const DetLayer*> dtLayers;
std::vector<const DetLayer*> allForward;
std::vector<const DetLayer*> allBackward;
std::vector<const DetLayer*> allEndcap;
std::vector<const DetLayer*> allBarrel;
std::vector<const DetLayer*> allDetLayers;

std::map<DetId,DetLayer*> detLayersMap;
std::map<DetId,const DetLayer*> detLayersMap;
};
#endif

128 changes: 62 additions & 66 deletions RecoMuon/DetLayers/src/MuonDetLayerGeometry.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,81 +22,77 @@ using namespace geomsort;
MuonDetLayerGeometry::MuonDetLayerGeometry() {}

MuonDetLayerGeometry::~MuonDetLayerGeometry(){
for(vector<DetLayer*>::const_iterator it = allDetLayers.begin(); it != allDetLayers.end(); ++it)
for(vector<const DetLayer*>::const_iterator it = allDetLayers.begin(); it != allDetLayers.end(); ++it)
{
delete *it;
}
}

void MuonDetLayerGeometry::addCSCLayers(const pair<vector<DetLayer*>, vector<DetLayer*> >& csclayers) {

vector<DetLayer*>::const_iterator it;
for(it=csclayers.first.begin(); it!=csclayers.first.end(); it++) {
cscLayers_fw.push_back(*it);
// cscLayers_all.push_back(*it);
allForward.push_back(*it);
// allEndcap.push_back(*it);
// allDetLayers.push_back(*it);
for(auto const it : csclayers.first) {
cscLayers_fw.push_back(it);
// cscLayers_all.push_back(it);
allForward.push_back(it);
// allEndcap.push_back(it);
// allDetLayers.push_back(it);

detLayersMap[ makeDetLayerId(*it) ] = *it;
detLayersMap[ makeDetLayerId(it) ] = it;
}
for(it=csclayers.second.begin(); it!=csclayers.second.end(); it++) {
cscLayers_bk.push_back(*it);
// cscLayers_all.push_back(*it);
allBackward.push_back(*it);
// allEndcap.push_back(*it);
// allDetLayers.push_back(*it);

for(auto const it: csclayers.second) {
cscLayers_bk.push_back(it);
// cscLayers_all.push_back(it);
allBackward.push_back(it);
// allEndcap.push_back(it);
// allDetLayers.push_back(it);

detLayersMap[ makeDetLayerId(*it) ] = *it;
detLayersMap[ makeDetLayerId(it) ] = it;
}
}

void MuonDetLayerGeometry::addRPCLayers(const vector<DetLayer*>& barrelLayers, const pair<vector<DetLayer*>, vector<DetLayer*> >& endcapLayers) {

vector<DetLayer*>::const_iterator it;

for (it=barrelLayers.begin();it!=barrelLayers.end();it++){
rpcLayers_barrel.push_back(*it);
// rpcLayers_all.push_back(*it);
allBarrel.push_back(*it);
// allDetLayers.push_back(*it);
for(auto const it: barrelLayers) {
rpcLayers_barrel.push_back(it);
// rpcLayers_all.push_back(it);
allBarrel.push_back(it);
// allDetLayers.push_back(it);

detLayersMap[ makeDetLayerId(*it) ] = *it;
detLayersMap[ makeDetLayerId(it) ] = it;
}
for (it=endcapLayers.first.begin(); it!=endcapLayers.first.end(); it++){
rpcLayers_fw.push_back(*it);
// rpcLayers_all.push_back(*it);
// rpcLayers_endcap.push_back(*it);
allForward.push_back(*it);
// allEndcap.push_back(*it);
// allDetLayers.push_back(*it);

detLayersMap[ makeDetLayerId(*it) ] = *it;
for(auto const it: endcapLayers.first) {
rpcLayers_fw.push_back(it);
// rpcLayers_all.push_back(it);
// rpcLayers_endcap.push_back(it);
allForward.push_back(it);
// allEndcap.push_back(it);
// allDetLayers.push_back(it);

detLayersMap[ makeDetLayerId(it) ] = it;
}
for (it=endcapLayers.second.begin(); it!=endcapLayers.second.end(); it++){
rpcLayers_bk.push_back(*it);
// rpcLayers_all.push_back(*it);
// rpcLayers_endcap.push_back(*it);
allBackward.push_back(*it);
// allEndcap.push_back(*it);
// allDetLayers.push_back(*it);

detLayersMap[ makeDetLayerId(*it) ] = *it;

for(auto const it: endcapLayers.second) {
rpcLayers_bk.push_back(it);
// rpcLayers_all.push_back(it);
// rpcLayers_endcap.push_back(it);
allBackward.push_back(it);
// allEndcap.push_back(it);
// allDetLayers.push_back(it);

detLayersMap[ makeDetLayerId(it) ] = it;
}

}

void MuonDetLayerGeometry::addDTLayers(const vector<DetLayer*>& dtlayers) {

vector<DetLayer*>::const_iterator it;
for(it=dtlayers.begin(); it!=dtlayers.end(); it++) {
dtLayers.push_back(*it);
allBarrel.push_back(*it);
// allDetLayers.push_back(*it);
for(auto const it : dtlayers) {
dtLayers.push_back(it);
allBarrel.push_back(it);
// allDetLayers.push_back(it);

detLayersMap[ makeDetLayerId(*it) ] = *it;
detLayersMap[ makeDetLayerId(it) ] = it;
}
}

Expand Down Expand Up @@ -131,83 +127,83 @@ DetId MuonDetLayerGeometry::makeDetLayerId(const DetLayer* detLayer) const{
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::allDTLayers() const {
return dtLayers;
}

const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::allCSCLayers() const {
return cscLayers_all;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::forwardCSCLayers() const {
return cscLayers_fw;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::backwardCSCLayers() const {
return cscLayers_bk;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::allRPCLayers() const {
return rpcLayers_all;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::barrelRPCLayers() const {
return rpcLayers_barrel;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::endcapRPCLayers() const {
return rpcLayers_endcap;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::forwardRPCLayers() const {
return rpcLayers_fw;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::backwardRPCLayers() const {
return rpcLayers_bk;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::allLayers() const {
return allDetLayers;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::allBarrelLayers() const {
return allBarrel;
}

const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::allEndcapLayers() const {
return allEndcap;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::allForwardLayers() const {
return allForward;
}


const vector<DetLayer*>&
const vector<const DetLayer*>&
MuonDetLayerGeometry::allBackwardLayers() const {
return allBackward;
}
Expand Down Expand Up @@ -242,7 +238,7 @@ const DetLayer* MuonDetLayerGeometry::idToLayer(const DetId &detId) const{

else throw cms::Exception("InvalidSubdetId")<< detId.subdetId();

std::map<DetId,DetLayer*>::const_iterator layer = detLayersMap.find(id);
std::map<DetId,const DetLayer*>::const_iterator layer = detLayersMap.find(id);
if (layer == detLayersMap.end()) return 0;
return layer->second;
}
Expand Down Expand Up @@ -312,7 +308,7 @@ void MuonDetLayerGeometry::sortLayers() {
// number layers
int sq=0;
for (auto l : allDetLayers)
(*l).setSeqNum(sq++);
(*const_cast<DetLayer*>(l)).setSeqNum(sq++);


}

0 comments on commit 1c61c6d

Please sign in to comment.