diff --git a/DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigi.h b/DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigi.h
index ca4d9126f5d00..0ec2c2d863195 100644
--- a/DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigi.h
+++ b/DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigi.h
@@ -5,8 +5,8 @@
*
* Digi for Correlated LCT trigger primitives.
*
- * $Date: 2011/02/02 13:27:20 $
- * $Revision: 1.17 $
+ * $Date: 2013/05/21 11:41:36 $
+ * $Revision: 1.17.2.1 $
*
* \author L. Gray, UF
*/
@@ -86,6 +86,16 @@ class CSCCorrelatedLCTDigi
/// set quality code
void setQuality(unsigned int q) {quality=q;}
+ //------- GEM matching extras ---------
+ /// if has any sort of associated GEM pad
+ bool hasGEM() const {return gemDPhi > -9. && gemDPhi < 9.;}
+
+ /// LCT phi - gem pad phi for ME11
+ float getGEMDPhi() const {return gemDPhi;}
+
+ /// set gem pad deltaPhi for ME11
+ void setGEMDPhi(const float dphi) {gemDPhi = dphi;}
+
private:
uint16_t trknmb;
uint16_t valid;
@@ -99,6 +109,7 @@ class CSCCorrelatedLCTDigi
uint16_t bx0;
uint16_t syncErr;
uint16_t cscID;
+ float gemDPhi;
};
std::ostream & operator<<(std::ostream & o, const CSCCorrelatedLCTDigi& digi);
diff --git a/DataFormats/CSCDigi/src/CSCCorrelatedLCTDigi.cc b/DataFormats/CSCDigi/src/CSCCorrelatedLCTDigi.cc
index e45132b4dba1c..077c5fac51daf 100644
--- a/DataFormats/CSCDigi/src/CSCCorrelatedLCTDigi.cc
+++ b/DataFormats/CSCDigi/src/CSCCorrelatedLCTDigi.cc
@@ -2,8 +2,8 @@
*
* Digi for Correlated LCT trigger primitives.
*
- * $Date: 2010/07/07 10:53:22 $
- * $Revision: 1.14 $
+ * $Date: 2013/05/21 11:41:36 $
+ * $Revision: 1.14.2.1 $
*
* \author L.Gray, UF
*/
@@ -32,7 +32,8 @@ CSCCorrelatedLCTDigi::CSCCorrelatedLCTDigi(const int itrknmb, const int ivalid,
mpclink(impclink),
bx0(ibx0),
syncErr(isyncErr),
- cscID(icscID)
+ cscID(icscID),
+ gemDPhi(-99.)
{}
/// Default
@@ -54,6 +55,7 @@ void CSCCorrelatedLCTDigi::clear() {
bx0 = 0;
syncErr = 0;
cscID = 0;
+ gemDPhi = -99.;
}
/// Comparison
@@ -61,7 +63,8 @@ bool CSCCorrelatedLCTDigi::operator==(const CSCCorrelatedLCTDigi &rhs) const {
return ((trknmb == rhs.trknmb) && (quality == rhs.quality) &&
(keywire == rhs.keywire) && (strip == rhs.strip) &&
(pattern == rhs.pattern) && (bend == rhs.bend) &&
- (bx == rhs.bx) && (valid == rhs.valid) && (mpclink == rhs.mpclink) );
+ (bx == rhs.bx) && (valid == rhs.valid) && (mpclink == rhs.mpclink) &&
+ (gemDPhi == rhs.gemDPhi) );
}
/// Debug
@@ -75,7 +78,8 @@ void CSCCorrelatedLCTDigi::print() const {
<< " Pattern = " << getPattern()
<< " Bend = " << ( (getBend() == 0) ? 'L' : 'R' )
<< " BX = " << getBX()
- << " MPC Link = " << getMPCLink() << std::endl;
+ << " MPC Link = " << getMPCLink()
+ << " GEMDphi = " << getGEMDPhi() << std::endl;
}
else {
std::cout << "Not a valid correlated LCT." << std::endl;
@@ -88,9 +92,10 @@ std::ostream & operator<<(std::ostream & o,
<< ": Valid = " << digi.isValid()
<< " Quality = " << digi.getQuality()
<< " MPC Link = " << digi.getMPCLink()
- << " cscID = " << digi.getCSCID() << "\n"
+ << " cscID = " << digi.getCSCID()
+ << " GEMDphi = " << digi.getGEMDPhi() << "\n"
<<" cathode info: Strip = " << digi.getStrip()
- << " Pattern = " << digi.getPattern()
+ << " Pattern = " << digi.getPattern()
<< " Bend = " << ((digi.getBend() == 0) ? 'L' : 'R') << "\n"
<<" anode info: Key wire = " << digi.getKeyWG()
<< " BX = " << digi.getBX()
diff --git a/DataFormats/CSCDigi/src/classes_def.xml b/DataFormats/CSCDigi/src/classes_def.xml
index 2a422a7d3f1d3..0d693e7798c8b 100644
--- a/DataFormats/CSCDigi/src/classes_def.xml
+++ b/DataFormats/CSCDigi/src/classes_def.xml
@@ -11,8 +11,8 @@
-
-
+
+
diff --git a/Geometry/MuonCommonData/data/v4/gemf_r08_v01.xml b/Geometry/MuonCommonData/data/v4/gemf_r08_v01.xml
index 8d4258767a7a8..fd7ac5222e06e 100644
--- a/Geometry/MuonCommonData/data/v4/gemf_r08_v01.xml
+++ b/Geometry/MuonCommonData/data/v4/gemf_r08_v01.xml
@@ -4,14 +4,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/L1Trigger/CSCTriggerPrimitives/BuildFile.xml b/L1Trigger/CSCTriggerPrimitives/BuildFile.xml
index 424977eb96984..ec0fe7c4a5df3 100644
--- a/L1Trigger/CSCTriggerPrimitives/BuildFile.xml
+++ b/L1Trigger/CSCTriggerPrimitives/BuildFile.xml
@@ -6,6 +6,7 @@
+
diff --git a/L1Trigger/CSCTriggerPrimitives/plugins/CSCTriggerPrimitivesProducer.cc b/L1Trigger/CSCTriggerPrimitives/plugins/CSCTriggerPrimitivesProducer.cc
index 519342b139a21..daae2945c4651 100644
--- a/L1Trigger/CSCTriggerPrimitives/plugins/CSCTriggerPrimitivesProducer.cc
+++ b/L1Trigger/CSCTriggerPrimitives/plugins/CSCTriggerPrimitivesProducer.cc
@@ -7,7 +7,7 @@
//
// Author List: S. Valuev, UCLA.
//
-// $Id: CSCTriggerPrimitivesProducer.cc,v 1.16 2012/12/05 21:16:16 khotilov Exp $
+// $Id: CSCTriggerPrimitivesProducer.cc,v 1.16.2.1 2013/05/21 12:02:24 khotilov Exp $
//
// Modifications:
//
@@ -23,6 +23,7 @@
#include "Geometry/Records/interface/MuonGeometryRecord.h"
#include "L1Trigger/CSCCommonTrigger/interface/CSCTriggerGeometry.h"
#include "CondFormats/DataRecord/interface/CSCBadChambersRcd.h"
+#include "Geometry/GEMGeometry/interface/GEMGeometry.h"
#include "DataFormats/CSCDigi/interface/CSCComparatorDigiCollection.h"
#include "DataFormats/CSCDigi/interface/CSCWireDigiCollection.h"
@@ -43,6 +44,7 @@ CSCTriggerPrimitivesProducer::CSCTriggerPrimitivesProducer(const edm::ParameterS
wireDigiProducer_ = conf.getParameter("CSCWireDigiProducer");
compDigiProducer_ = conf.getParameter("CSCComparatorDigiProducer");
+ gemPadProducer_ = conf.getUntrackedParameter("gemPadProducer", edm::InputTag());
checkBadChambers_ = conf.getUntrackedParameter("checkBadChambers", true);
lctBuilder_ = new CSCTriggerPrimitivesBuilder(conf); // pass on the conf
@@ -75,6 +77,11 @@ void CSCTriggerPrimitivesProducer::produce(edm::Event& ev,
edm::ESHandle h;
setup.get().get(h);
CSCTriggerGeometry::setGeometry(h);
+ lctBuilder_->setCSCGeometry(&*h);
+
+ edm::ESHandle h_gem;
+ setup.get().get(h_gem);
+ lctBuilder_->setGEMGeometry(&*h_gem);
}
// Find conditions data for bad chambers.
@@ -102,6 +109,13 @@ void CSCTriggerPrimitivesProducer::produce(edm::Event& ev,
ev.getByLabel(compDigiProducer_.label(), compDigiProducer_.instance(), compDigis);
ev.getByLabel(wireDigiProducer_.label(), wireDigiProducer_.instance(), wireDigis);
+ const GEMCSCPadDigiCollection *gemPads = nullptr;
+ if (!gemPadProducer_.label().empty()) {
+ edm::Handle h_pads;
+ ev.getByLabel(gemPadProducer_, h_pads);
+ gemPads = h_pads.product();
+ }
+
// Create empty collections of ALCTs, CLCTs, and correlated LCTs upstream
// and downstream of MPC.
std::auto_ptr oc_alct(new CSCALCTDigiCollection);
@@ -128,7 +142,7 @@ void CSCTriggerPrimitivesProducer::produce(edm::Event& ev,
if (wireDigis.isValid() && compDigis.isValid()) {
const CSCBadChambers* temp = checkBadChambers_ ? pBadChambers.product() : new CSCBadChambers;
lctBuilder_->build(temp,
- wireDigis.product(), compDigis.product(),
+ wireDigis.product(), compDigis.product(), gemPads,
*oc_alct, *oc_clct, *oc_pretrig, *oc_lct, *oc_sorted_lct);
if (!checkBadChambers_)
delete temp;
diff --git a/L1Trigger/CSCTriggerPrimitives/plugins/CSCTriggerPrimitivesProducer.h b/L1Trigger/CSCTriggerPrimitives/plugins/CSCTriggerPrimitivesProducer.h
index 26dcbee418c77..0cb66975b158b 100644
--- a/L1Trigger/CSCTriggerPrimitives/plugins/CSCTriggerPrimitivesProducer.h
+++ b/L1Trigger/CSCTriggerPrimitives/plugins/CSCTriggerPrimitivesProducer.h
@@ -17,7 +17,7 @@
*
* \author Slava Valuev, UCLA.
*
- * $Id: CSCTriggerPrimitivesProducer.h,v 1.5 2012/12/05 21:16:16 khotilov Exp $
+ * $Id: CSCTriggerPrimitivesProducer.h,v 1.5.2.1 2013/05/21 12:02:24 khotilov Exp $
*
*/
@@ -42,6 +42,7 @@ class CSCTriggerPrimitivesProducer : public edm::EDProducer
int iev; // event number
edm::InputTag compDigiProducer_;
edm::InputTag wireDigiProducer_;
+ edm::InputTag gemPadProducer_;
// swich to force the use of parameters from config file rather then from DB
bool debugParameters_;
// switch to for enabling checking against the list of bad chambers
diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCMotherboardME11.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCMotherboardME11.cc
index 075f42573ee4d..dac9e3284b319 100644
--- a/L1Trigger/CSCTriggerPrimitives/src/CSCMotherboardME11.cc
+++ b/L1Trigger/CSCTriggerPrimitives/src/CSCMotherboardME11.cc
@@ -7,8 +7,8 @@
//
// Author List: Vadim Khotilovich 12 May 2009
//
-// $Date: 2012/12/05 21:14:22 $
-// $Revision: 1.2 $
+// $Date: 2013/05/21 12:02:25 $
+// $Revision: 1.2.2.1 $
//
//-----------------------------------------------------------------------------
@@ -16,8 +16,9 @@
//#include
#include
#include
-
-
+#include
+#include
+#include
// LUT for which ME1/1 wire group can cross which ME1/a halfstrip
// 1st index: WG number
@@ -109,6 +110,20 @@ CSCMotherboardME11::CSCMotherboardME11(unsigned endcap, unsigned station,
pref[m-1] = pref[0] - m/2;
pref[m] = pref[0] + m/2;
}
+
+ /// GEM matching dphi and deta
+ gem_match_delta_phi_odd = tmbParams.getUntrackedParameter("gemMatchDeltaPhiOdd", 0.0055);
+ gem_match_delta_phi_even = tmbParams.getUntrackedParameter("gemMatchDeltaPhiEven", 0.0031);
+ gem_match_delta_eta = tmbParams.getUntrackedParameter("gemMatchDeltaEta", 0.08);
+
+ /// delta BX for GEM pads matching
+ gem_match_delta_bx = tmbParams.getUntrackedParameter("gemMatchDeltaBX", 1);
+
+ /// min eta of LCT for which we require GEM match (we don't throw out LCTs below this min eta)
+ gem_match_min_eta = tmbParams.getUntrackedParameter("gemMatchMinEta", 1.62);
+
+ /// whether to throw out GEM-fiducial LCTs that have no gem match
+ gem_clear_nomatch_lcts = tmbParams.getUntrackedParameter("gemClearNomatchLCTs", true);
}
@@ -162,7 +177,8 @@ void CSCMotherboardME11::setConfigParameters(const CSCDBL1TPParameters* conf)
void CSCMotherboardME11::run(const CSCWireDigiCollection* wiredc,
- const CSCComparatorDigiCollection* compdc)
+ const CSCComparatorDigiCollection* compdc,
+ const GEMCSCPadDigiCollection* gemPads)
{
clear();
@@ -304,6 +320,10 @@ void CSCMotherboardME11::run(const CSCWireDigiCollection* wiredc,
}
} // end of ALCT-centric matching
+ // possibly use some discrimination from GEMs
+ if (gemPads != nullptr) matchGEMPads(gemPads);
+
+
// reduction of nLCTs per each BX
for (int bx = 0; bx < MAX_LCT_BINS; bx++)
{
@@ -652,3 +672,171 @@ void CSCMotherboardME11::correlateLCTs(CSCALCTDigi bestALCT,
return;
}
+void CSCMotherboardME11::matchGEMPads(const GEMCSCPadDigiCollection* gemPads)
+{
+ using namespace std;
+
+ // check if we have any LCTs at all
+ int nlct = 0;
+ for (int bx = 0; bx < MAX_LCT_BINS; bx++)
+ for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
+ for (int i=0;i<2;i++)
+ {
+ CSCCorrelatedLCTDigi& lct = allLCTs1b[bx][mbx][i];
+ if (lct.isValid()) nlct++;
+ }
+ if (nlct == 0) return;
+
+ // retrieve CSCChamber geometry
+ CSCTriggerGeomManager* geo_manager = CSCTriggerGeometry::get();
+ CSCChamber* cscChamber = geo_manager->chamber(theEndcap, theStation, theSector, theSubsector, theTrigChamber);
+
+ auto csc_id = cscChamber->id();
+ int chamber = csc_id.chamber();
+ bool is_odd = chamber & 1;
+
+ cout<<"++++++++ matchGEMPads "<< csc_id <<" +++++++++ "< >
+ // smearing the bx if necessary according to the value of gem_match_delta_bx
+ std::map > > pads;
+ // TODO: "magic" numbers galore!!! FIXME it's only for 6 partitions geometry right now
+ int npads = 0;
+ for (int gem_layer = 1; gem_layer <= 2; ++gem_layer)
+ {
+ for (int gem_roll = 1; gem_roll <= 6; ++gem_roll)
+ {
+ int region = (theEndcap == 1) ? 1: -1;
+ GEMDetId gem_id(region, 1, 1, gem_layer, chamber, gem_roll);
+
+ auto pads_in_det = gemPads->get(gem_id);
+
+ for (auto pad = pads_in_det.first; pad != pads_in_det.second; ++pad)
+ {
+ cout<<" gem pad "<pad()<<" "<bx() + 1<bx(); // central LCT bx is 6 for simulation - FIXME: need a parameter!
+ for (int bx = bx_shifted - gem_match_delta_bx;
+ bx <= bx_shifted + gem_match_delta_bx; ++bx)
+ {
+ pads[bx].push_back(id_pad);
+ }
+ }
+ }
+ }
+ cout<<" nlct "<layer(CSCConstants::KEY_CLCT_LAYER)->geometry();
+ // LCT::getKeyWG() also starts from 0
+ float wire = layer_geo->middleWireOfGroup(lct.getKeyWG() + 1);
+
+ LocalPoint csc_intersect = layer_geo->intersectionOfStripAndWire(fractional_strip, wire);
+ GlobalPoint csc_gp = csc_g->idToDet(key_id)->surface().toGlobal(csc_intersect);
+
+ // is LCT located in the high efficiency GEM eta range?
+ bool gem_fid = ( std::abs(csc_gp.eta()) >= gem_match_min_eta );
+
+ cout<<" lct eta "< zap it
+ {
+ if (gem_clear_nomatch_lcts) lct.clear();
+ cout<<" -- no gem"<second)
+ {
+ GEMDetId gem_id(id_pad.first);
+ LocalPoint gem_lp = gem_g->etaPartition(gem_id)->centreOfPad(id_pad.second->pad());
+ GlobalPoint gem_gp = gem_g->idToDet(gem_id)->surface().toGlobal(gem_lp);
+ float dphi = deltaPhi(csc_gp.phi(), gem_gp.phi());
+ float deta = csc_gp.eta() - gem_gp.eta();
+ cout<<" gem with dphi "<< std::abs(dphi) <<" deta "<< std::abs(deta) <bx();
+ }
+ }
+ if (gem_matched)
+ {
+ cout<<" GOT MATCHED GEM!"<
#include
+#include
+
+class CSCGeometry;
+class GEMGeometry;
+class CSCChamber;
class CSCMotherboardME11 : public CSCMotherboard
{
@@ -35,7 +40,8 @@ class CSCMotherboardME11 : public CSCMotherboard
/** Run function for normal usage. Runs cathode and anode LCT processors,
takes results and correlates into CorrelatedLCT. */
void run(const CSCWireDigiCollection* wiredc,
- const CSCComparatorDigiCollection* compdc);
+ const CSCComparatorDigiCollection* compdc,
+ const GEMCSCPadDigiCollection* gemPads);
/** Returns vectors of found correlated LCTs in ME1a and ME1b, if any. */
std::vector getLCTs1a();
@@ -62,6 +68,10 @@ class CSCMotherboardME11 : public CSCMotherboard
std::vector readoutLCTs1b();
std::vector readoutLCTs(int me1ab);
+ /// set CSC and GEM geometries for the matching needs
+ void setCSCGeometry(const CSCGeometry *g) { csc_g = g; }
+ void setGEMGeometry(const GEMGeometry *g) { gem_g = g; }
+
private:
/** labels for ME1a and ME1B */
@@ -95,6 +105,8 @@ class CSCMotherboardME11 : public CSCMotherboard
CSCCLCTDigi bestCLCT, CSCCLCTDigi secondCLCT,
CSCCorrelatedLCTDigi& lct1, CSCCorrelatedLCTDigi& lct2, int me);
+ void matchGEMPads(const GEMCSCPadDigiCollection* gemPads);
+
std::vector alctV;
std::vector clctV1b;
std::vector clctV1a;
@@ -117,5 +129,24 @@ class CSCMotherboardME11 : public CSCMotherboard
/** maximum lcts per BX in ME11: 2, 3, 4 or 999 */
unsigned int max_me11_lcts;
+
+
+ /// GEM matching dphi and deta
+ double gem_match_delta_phi_odd;
+ double gem_match_delta_phi_even;
+ double gem_match_delta_eta;
+
+ /// delta BX for GEM pads matching
+ int gem_match_delta_bx;
+
+ /// min eta of LCT for which we require GEM match (we don't throw out LCTs below this min eta)
+ double gem_match_min_eta;
+
+ /// whether to throw out GEM-fiducial LCTs that have no gem match
+ bool gem_clear_nomatch_lcts;
+
+ const CSCGeometry* csc_g;
+ const GEMGeometry* gem_g;
+ //CSCChamber* cscChamber;
};
#endif
diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCTriggerPrimitivesBuilder.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCTriggerPrimitivesBuilder.cc
index 47736baa112f7..17977b0510474 100644
--- a/L1Trigger/CSCTriggerPrimitives/src/CSCTriggerPrimitivesBuilder.cc
+++ b/L1Trigger/CSCTriggerPrimitives/src/CSCTriggerPrimitivesBuilder.cc
@@ -8,7 +8,7 @@
//
// Author List: S. Valuev, UCLA.
//
-// $Id: CSCTriggerPrimitivesBuilder.cc,v 1.22 2012/12/05 21:14:23 khotilov Exp $
+// $Id: CSCTriggerPrimitivesBuilder.cc,v 1.22.2.1 2013/05/21 12:02:25 khotilov Exp $
//
// Modifications:
//
@@ -24,6 +24,7 @@
#include
#include
#include
+#include
//------------------
// Static variables
@@ -165,6 +166,7 @@ void CSCTriggerPrimitivesBuilder::setConfigParameters(const CSCDBL1TPParameters*
void CSCTriggerPrimitivesBuilder::build(const CSCBadChambers* badChambers,
const CSCWireDigiCollection* wiredc,
const CSCComparatorDigiCollection* compdc,
+ const GEMCSCPadDigiCollection* gemPads,
CSCALCTDigiCollection& oc_alct,
CSCCLCTDigiCollection& oc_clct,
CSCCLCTPreTriggerCollection & oc_pretrig,
@@ -209,10 +211,13 @@ void CSCTriggerPrimitivesBuilder::build(const CSCBadChambers* badChambers,
if (stat==1 && ring==1 && smartME1aME1b)
{
CSCMotherboardME11* tmb11 = static_cast(tmb);
+
+ tmb11->setCSCGeometry(csc_g);
+ tmb11->setGEMGeometry(gem_g);
//LogTrace("CSCTriggerPrimitivesBuilder")<<"CSCTriggerPrimitivesBuilder::build in E:"<run(wiredc,compdc);
+ tmb11->run(wiredc, compdc, gemPads);
std::vector lctV = tmb11->readoutLCTs1b();
std::vector lctV1a = tmb11->readoutLCTs1a();
diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCTriggerPrimitivesBuilder.h b/L1Trigger/CSCTriggerPrimitives/src/CSCTriggerPrimitivesBuilder.h
index 5eae7d848ffab..e472e26e1d259 100644
--- a/L1Trigger/CSCTriggerPrimitives/src/CSCTriggerPrimitivesBuilder.h
+++ b/L1Trigger/CSCTriggerPrimitives/src/CSCTriggerPrimitivesBuilder.h
@@ -11,7 +11,7 @@
*
* \author Slava Valuev, UCLA.
*
- * $Id: CSCTriggerPrimitivesBuilder.h,v 1.9 2012/12/05 21:14:23 khotilov Exp $
+ * $Id: CSCTriggerPrimitivesBuilder.h,v 1.9.2.1 2013/05/21 12:02:25 khotilov Exp $
*
*/
@@ -22,11 +22,14 @@
#include
#include
#include
+#include
#include
class CSCDBL1TPParameters;
class CSCMotherboard;
class CSCMuonPortCard;
+class CSCGeometry;
+class GEMGeometry;
class CSCTriggerPrimitivesBuilder
{
@@ -43,12 +46,17 @@ class CSCTriggerPrimitivesBuilder
/** Sets configuration parameters obtained via EventSetup mechanism. */
void setConfigParameters(const CSCDBL1TPParameters* conf);
+ /// set CSC and GEM geometries for the matching needs
+ void setCSCGeometry(const CSCGeometry *g) { csc_g = g; }
+ void setGEMGeometry(const GEMGeometry *g) { gem_g = g; }
+
/** Build anode, cathode, and correlated LCTs in each chamber and fill
* them into output collections. Select up to three best correlated LCTs
* in each (sub)sector and put them into an output collection as well. */
void build(const CSCBadChambers* badChambers,
const CSCWireDigiCollection* wiredc,
const CSCComparatorDigiCollection* compdc,
+ const GEMCSCPadDigiCollection* gemPads,
CSCALCTDigiCollection& oc_alct, CSCCLCTDigiCollection& oc_clct,
CSCCLCTPreTriggerCollection & oc_pretrig,
CSCCorrelatedLCTDigiCollection& oc_lct,
@@ -90,6 +98,9 @@ class CSCTriggerPrimitivesBuilder
/** Pointer to MPC processor. */
CSCMuonPortCard* m_muonportcard;
+
+ const CSCGeometry* csc_g;
+ const GEMGeometry* gem_g;
};
#endif
diff --git a/SimG4CMS/Muon/src/MuonGemFrameRotation.cc b/SimG4CMS/Muon/src/MuonGemFrameRotation.cc
index fbe60a5c8b0f9..406417bda5945 100644
--- a/SimG4CMS/Muon/src/MuonGemFrameRotation.cc
+++ b/SimG4CMS/Muon/src/MuonGemFrameRotation.cc
@@ -36,7 +36,8 @@ Local3DPoint MuonGemFrameRotation::transformPoint(const Local3DPoint & point,con
<< " Rotation " << rotated << std::endl;
#endif
if (rotated) {
- return Local3DPoint(-point.x(),point.z(),point.y());
+ // return Local3DPoint(-point.x(),point.z(),point.y());
+ return Local3DPoint(point.x(),point.z(),-point.y());
} else {
return Local3DPoint(point.x(),point.z(),-point.y());
}