CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
CSCSkim Class Reference

#include <RecoLocalMuon/CSCSkim/src/CSCSkim.cc>

Inheritance diagram for CSCSkim:
edm::EDFilter edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

virtual void beginJob ()
 
 CSCSkim (const edm::ParameterSet &pset)
 
virtual void endJob ()
 
virtual bool filter (edm::Event &event, const edm::EventSetup &eventSetup)
 
 ~CSCSkim ()
 
- Public Member Functions inherited from edm::EDFilter
 EDFilter ()
 
virtual ~EDFilter ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Member Functions

int chamberSerial (int kE, int kS, int kR, int kCh)
 
bool doBFieldStudySelection (edm::Handle< reco::TrackCollection > saTracks, edm::Handle< reco::TrackCollection > Tracks, edm::Handle< reco::MuonCollection > gMuons)
 
bool doCertainChamberSelection (edm::Handle< CSCWireDigiCollection > wires, edm::Handle< CSCStripDigiCollection > strips)
 
bool doCSCSkimming (edm::Handle< CSCRecHit2DCollection > cscRecHits, edm::Handle< CSCSegmentCollection > cscSegments)
 
bool doDTOverlap (edm::Handle< CSCSegmentCollection > cscSegments)
 
bool doHaloLike (edm::Handle< CSCSegmentCollection > cscSegments)
 
bool doLongSATrack (edm::Handle< reco::TrackCollection > saTracks)
 
bool doMessyEventSkimming (edm::Handle< CSCRecHit2DCollection > cscRecHits, edm::Handle< CSCSegmentCollection > cscSegments)
 
bool doOverlapSkimming (edm::Handle< CSCSegmentCollection > cscSegments)
 

Private Attributes

edm::InputTag cscRecHitTag
 
edm::InputTag cscSegmentTag
 
bool demandChambersBothSides
 
edm::InputTag GLBMuonTag
 
std::string histogramFileName
 
TH1F * hxnHitChambers
 
TH1F * hxnRecHits
 
TH1F * hxnRecHitsSel
 
TH1F * hxnSegments
 
int iEvent
 
int iRun
 
bool isSimulation
 
bool makeHistograms
 
bool makeHistogramsForMessyEvents
 
TH1F * mevnChambers0
 
TH1F * mevnChambers1
 
TH1F * mevnRecHits0
 
TH1F * mevnRecHits1
 
TH1F * mevnSegments0
 
TH1F * mevnSegments1
 
int minimumHitChambers
 
int minimumSegments
 
int nCSCHitsMin
 
int nEventsAnalyzed
 
int nEventsCertainChamber
 
int nEventsChambersBothSides
 
int nEventsDTOverlap
 
int nEventsForBFieldStudies
 
int nEventsHaloLike
 
int nEventsLongSATrack
 
int nEventsMessy
 
int nEventsOverlappingChambers
 
int nEventsSelected
 
int nLayersWithHitsMinimum
 
int nTrHitsMin
 
int nValidHitsMin
 
std::string outputFileName
 
float pMin
 
float redChiSqMax
 
float rExtMax
 
edm::InputTag SAMuonTag
 
TFile * theHistogramFile
 
edm::InputTag trackTag
 
int typeOfSkim
 
int whichChamber
 
int whichEndcap
 
int whichRing
 
int whichStation
 
TH1F * xxnCSCHits
 
TH1F * xxnTrackerHits
 
TH1F * xxnValidHits
 
TH1F * xxP
 
TH1F * xxredChiSq
 
float zInnerMax
 
float zLengthMin
 
float zLengthTrMin
 

Additional Inherited Members

- Public Types inherited from edm::EDFilter
typedef EDFilter ModuleType
 
typedef WorkerT< EDFilterWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDFilter
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDFilter
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

This simple program selects minimal CSC events for output.

Michael Schmitt, Northwestern University, July 2008

Description: Offline skim module for CSC cosmic ray data

Implementation: <Notes on="" implementation>="">

Definition at line 74 of file CSCSkim.h.

Constructor & Destructor Documentation

CSCSkim::CSCSkim ( const edm::ParameterSet pset)
explicit

Definition at line 53 of file CSCSkim.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), RPCNoise_example::histogramFileName, and dumpDBToFile_GT_ttrig_cfg::outputFileName.

54 {
55 
56  // input tags
57  cscRecHitTag = pset.getParameter<edm::InputTag>("cscRecHitTag");
58  cscSegmentTag = pset.getParameter<edm::InputTag>("cscSegmentTag");
59  SAMuonTag = pset.getParameter<edm::InputTag>("SAMuonTag");
60  GLBMuonTag = pset.getParameter<edm::InputTag>("GLBMuonTag");
61  trackTag = pset.getParameter<edm::InputTag>("trackTag");
62 
63  // Get the various input parameters
64  bool isSimulation = false;
65  isSimulation = pset.getUntrackedParameter<bool>("isSimulation",false);
66  outputFileName = pset.getUntrackedParameter<std::string>("outputFileName","outputSkim.root");
67  histogramFileName = pset.getUntrackedParameter<std::string>("histogramFileName","histos.root");
68  typeOfSkim = pset.getUntrackedParameter<int>("typeOfSkim",1);
69  nLayersWithHitsMinimum = pset.getUntrackedParameter<int>("nLayersWithHitsMinimum",3);
70  minimumHitChambers = pset.getUntrackedParameter<int>("minimumHitChambers",1);
71  minimumSegments = pset.getUntrackedParameter<int>("minimumSegments",3);
72  demandChambersBothSides = pset.getUntrackedParameter<bool>("demandChambersBothSides",false);
73  makeHistograms = pset.getUntrackedParameter<bool>("makeHistograms",false);
74  makeHistogramsForMessyEvents = pset.getUntrackedParameter<bool>("makeHistogramsForMessyEvebts",false);
75  whichEndcap = pset.getUntrackedParameter<int>("whichEndcap",2);
76  whichStation = pset.getUntrackedParameter<int>("whichStation",3);
77  whichRing = pset.getUntrackedParameter<int>("whichRing",2);
78  whichChamber = pset.getUntrackedParameter<int>("whichChamber",24);
79 
80  // for BStudy selection (skim type 9)
81  pMin = pset.getUntrackedParameter<double>("pMin",3.);
82  zLengthMin = pset.getUntrackedParameter<double>("zLengthMin",200.);
83  nCSCHitsMin = pset.getUntrackedParameter<int>("nCSCHitsMin",9);
84  zInnerMax = pset.getUntrackedParameter<double>("zInnerMax",9000.);
85  nTrHitsMin = pset.getUntrackedParameter<int>("nTrHitsMin",8);
86  zLengthTrMin = pset.getUntrackedParameter<double>("zLengthTrMin",180.);
87  rExtMax = pset.getUntrackedParameter<double>("rExtMax",3000.);
88  redChiSqMax = pset.getUntrackedParameter<double>("redChiSqMax",20.);
89  nValidHitsMin = pset.getUntrackedParameter<int>("nValidHitsMin",8);
90 
91  LogInfo("[CSCSkim] Setup")
92  << "\n\t===== CSCSkim =====\n"
93  << "\t\ttype of skim ...............................\t" << typeOfSkim
94  << "\t\tminimum number of layers with hits .........\t" << nLayersWithHitsMinimum
95  << "\n\t\tminimum number of chambers w/ hit layers..\t" << minimumHitChambers
96  << "\n\t\tminimum number of segments ...............\t" << minimumSegments
97  << "\n\t\tdemand chambers on both sides.............\t" << demandChambersBothSides
98  << "\n\t\tmake histograms...........................\t" << makeHistograms
99  << "\n\t\t..for messy events........................\t" << makeHistogramsForMessyEvents
100  << "\n\t===================\n\n";
101 
102 }
float zInnerMax
Definition: CSCSkim.h:168
T getParameter(std::string const &) const
float rExtMax
Definition: CSCSkim.h:171
T getUntrackedParameter(std::string const &, T const &) const
edm::InputTag trackTag
Definition: CSCSkim.h:149
bool makeHistogramsForMessyEvents
Definition: CSCSkim.h:159
int whichEndcap
Definition: CSCSkim.h:160
int nCSCHitsMin
Definition: CSCSkim.h:167
int nLayersWithHitsMinimum
Definition: CSCSkim.h:154
float zLengthMin
Definition: CSCSkim.h:166
edm::InputTag GLBMuonTag
Definition: CSCSkim.h:148
std::string outputFileName
Definition: CSCSkim.h:141
float pMin
Definition: CSCSkim.h:165
int minimumHitChambers
Definition: CSCSkim.h:155
edm::InputTag cscRecHitTag
Definition: CSCSkim.h:145
int typeOfSkim
Definition: CSCSkim.h:153
float zLengthTrMin
Definition: CSCSkim.h:170
int whichChamber
Definition: CSCSkim.h:163
int minimumSegments
Definition: CSCSkim.h:156
std::string histogramFileName
Definition: CSCSkim.h:142
int nValidHitsMin
Definition: CSCSkim.h:173
bool makeHistograms
Definition: CSCSkim.h:158
int nTrHitsMin
Definition: CSCSkim.h:169
bool isSimulation
Definition: CSCSkim.h:152
int whichStation
Definition: CSCSkim.h:161
int whichRing
Definition: CSCSkim.h:162
edm::InputTag SAMuonTag
Definition: CSCSkim.h:147
edm::InputTag cscSegmentTag
Definition: CSCSkim.h:146
bool demandChambersBothSides
Definition: CSCSkim.h:157
float redChiSqMax
Definition: CSCSkim.h:172
CSCSkim::~CSCSkim ( )

Definition at line 107 of file CSCSkim.cc.

108 {
109 }

Member Function Documentation

void CSCSkim::beginJob ( void  )
virtual

Reimplemented from edm::EDFilter.

Definition at line 116 of file CSCSkim.cc.

References RPCNoise_example::histogramFileName, and iEvent.

117 {
118  // set counters to zero
119  nEventsAnalyzed = 0;
120  nEventsSelected = 0;
123  nEventsMessy = 0;
125  nEventsDTOverlap = 0;
126  nEventsHaloLike = 0;
127  nEventsLongSATrack = 0;
129  iRun = 0;
130  iEvent = 0;
131 
133 
134  // Create the root file for the histograms
135  theHistogramFile = new TFile(histogramFileName.c_str(), "RECREATE");
136  theHistogramFile->cd();
137 
138  if (makeHistograms) {
139  // book histograms for the skimming module
140  hxnRecHits = new TH1F("hxnRecHits","n RecHits",61,-0.5,60.5);
141  hxnSegments = new TH1F("hxnSegments","n Segments",11,-0.5,10.5);
142  hxnHitChambers = new TH1F("hxnHitsChambers","n chambers with hits",11,-0.5,10.5);
143  hxnRecHitsSel = new TH1F("hxnRecHitsSel","n RecHits selected",61,-0.5,60.5);
144 
145  xxP = new TH1F("xxP","P global",100,0.,200.);
146  xxnValidHits = new TH1F("xxnValidHits","n valid hits global",61,-0.5,60.5);
147  xxnTrackerHits = new TH1F("xxnTrackerHits","n tracker hits global",61,-0.5,60.5);
148  xxnCSCHits = new TH1F("xxnCSCHits","n CSC hits global",41,-0.5,40.5);
149  xxredChiSq = new TH1F("xxredChiSq","red chisq global",100,0.,100.);
150 
151 
152 
153  }
155  // book histograms for the messy event skimming module
156  mevnRecHits0 = new TH1F("mevnRecHits0","n RecHits",121,-0.5,120.5);
157  mevnChambers0 = new TH1F("mevnChambers0","n chambers with hits",21,-0.5,20.5);
158  mevnSegments0 = new TH1F("mevnSegments0","n Segments",21,-0.5,20.5);
159  mevnRecHits1 = new TH1F("mevnRecHits1","n RecHits",100,0.,300.);
160  mevnChambers1 = new TH1F("mevnChambers1","n chambers with hits",50,0.,50.);
161  mevnSegments1 = new TH1F("mevnSegments1","n Segments",30,0.,30.);
162  }
163 
164  }
165 }
TH1F * hxnRecHitsSel
Definition: CSCSkim.h:180
bool makeHistogramsForMessyEvents
Definition: CSCSkim.h:159
int nEventsForBFieldStudies
Definition: CSCSkim.h:131
int nEventsChambersBothSides
Definition: CSCSkim.h:124
TH1F * mevnRecHits0
Definition: CSCSkim.h:181
TH1F * mevnRecHits1
Definition: CSCSkim.h:184
TH1F * mevnSegments0
Definition: CSCSkim.h:183
TH1F * mevnSegments1
Definition: CSCSkim.h:186
TH1F * hxnRecHits
Definition: CSCSkim.h:177
TH1F * xxnCSCHits
Definition: CSCSkim.h:188
int nEventsDTOverlap
Definition: CSCSkim.h:128
TH1F * xxnTrackerHits
Definition: CSCSkim.h:188
int nEventsOverlappingChambers
Definition: CSCSkim.h:125
int nEventsSelected
Definition: CSCSkim.h:123
TH1F * hxnSegments
Definition: CSCSkim.h:178
std::string histogramFileName
Definition: CSCSkim.h:142
bool makeHistograms
Definition: CSCSkim.h:158
int nEventsLongSATrack
Definition: CSCSkim.h:130
int nEventsAnalyzed
Definition: CSCSkim.h:122
int nEventsCertainChamber
Definition: CSCSkim.h:127
TH1F * mevnChambers1
Definition: CSCSkim.h:185
TFile * theHistogramFile
Definition: CSCSkim.h:138
int nEventsMessy
Definition: CSCSkim.h:126
TH1F * hxnHitChambers
Definition: CSCSkim.h:179
int iEvent
Definition: CSCSkim.h:135
int nEventsHaloLike
Definition: CSCSkim.h:129
int iRun
Definition: CSCSkim.h:134
TH1F * xxnValidHits
Definition: CSCSkim.h:188
TH1F * mevnChambers0
Definition: CSCSkim.h:182
TH1F * xxredChiSq
Definition: CSCSkim.h:188
TH1F * xxP
Definition: CSCSkim.h:188
int CSCSkim::chamberSerial ( int  kE,
int  kS,
int  kR,
int  kCh 
)
private

Definition at line 1276 of file CSCSkim.cc.

1276  {
1277  int kSerial = kChamber;
1278  if (kStation == 1 && kRing == 1) {kSerial = kChamber;}
1279  if (kStation == 1 && kRing == 2) {kSerial = kChamber + 36;}
1280  if (kStation == 1 && kRing == 3) {kSerial = kChamber + 72;}
1281  if (kStation == 1 && kRing == 4) {kSerial = kChamber;}
1282  if (kStation == 2 && kRing == 1) {kSerial = kChamber + 108;}
1283  if (kStation == 2 && kRing == 2) {kSerial = kChamber + 126;}
1284  if (kStation == 3 && kRing == 1) {kSerial = kChamber + 162;}
1285  if (kStation == 3 && kRing == 2) {kSerial = kChamber + 180;}
1286  if (kStation == 4 && kRing == 1) {kSerial = kChamber + 216;}
1287  if (kStation == 4 && kRing == 2) {kSerial = kChamber + 234;} // one day...
1288  if (kEndcap == 2) {kSerial = kSerial + 300;}
1289  return kSerial;
1290 }
bool CSCSkim::doBFieldStudySelection ( edm::Handle< reco::TrackCollection saTracks,
edm::Handle< reco::TrackCollection Tracks,
edm::Handle< reco::MuonCollection gMuons 
)
private

Definition at line 1070 of file CSCSkim.cc.

References abs, MuonSubdetId::CSC, MuonSubdetId::DT, spr::goodTrack(), DetId::Muon, metsig::muon, n, reco::HitPattern::numberOfValidTrackerHits(), mathSSE::sqrt(), and PV3DBase< T, PVType, FrameType >::z().

1070  {
1071 
1072  bool acceptThisEvent = false;
1073 
1074  //-----------------------------------
1075  // examine the stand-alone tracks
1076  //-----------------------------------
1077  int nGoodSAMuons = 0;
1078  for (reco::TrackCollection::const_iterator muon = saMuons->begin(); muon != saMuons->end(); ++ muon ) {
1079  float preco = muon->p();
1080 
1081  math::XYZPoint innerPo = muon->innerPosition();
1082  GlobalPoint iPnt(innerPo.x(), innerPo.y(),innerPo.z());
1083  math::XYZPoint outerPo = muon->outerPosition();
1084  GlobalPoint oPnt(outerPo.x(), outerPo.y(),outerPo.z());
1085  float zLength = abs( iPnt.z() - oPnt.z() );
1086 
1087  math::XYZVector innerMom = muon->innerMomentum();
1088  GlobalVector iP(innerMom.x(), innerMom.y(), innerMom.z() );
1089  math::XYZVector outerMom = muon->outerMomentum();
1090  GlobalVector oP(outerMom.x(), outerMom.y(), outerMom.z() );
1091 
1092  const float zRef = 300.;
1093  float xExt = 10000.;
1094  float yExt = 10000.;
1095  if (abs(oPnt.z()) < abs(iPnt.z())) {
1096  float deltaZ = 0.;
1097  if (oPnt.z() > 0) {
1098  deltaZ = zRef - oPnt.z();
1099  } else {
1100  deltaZ = -zRef - oPnt.z();
1101  }
1102  xExt = oPnt.x() + deltaZ * oP.x() / oP.z();
1103  yExt = oPnt.y() + deltaZ * oP.y() / oP.z();
1104  } else {
1105  float deltaZ = 0.;
1106  if (iPnt.z() > 0) {
1107  deltaZ = zRef - iPnt.z();
1108  } else {
1109  deltaZ = -zRef - iPnt.z();
1110  }
1111  xExt = iPnt.x() + deltaZ * iP.x() / iP.z();
1112  yExt = iPnt.y() + deltaZ * iP.y() / iP.z();
1113  }
1114  float rExt = sqrt( xExt*xExt + yExt*yExt );
1115 
1116  int kHit = 0;
1117  int nDTHits = 0;
1118  int nCSCHits = 0;
1119  for (trackingRecHit_iterator hit = muon->recHitsBegin(); hit != muon->recHitsEnd(); ++hit ) {
1120  ++kHit;
1121  const DetId detId( (*hit)->geographicalId() );
1122  if (detId.det() == DetId::Muon) {
1123  if (detId.subdetId() == MuonSubdetId::DT) {
1124  nDTHits++;
1125  }
1126  else if (detId.subdetId() == MuonSubdetId::CSC) {
1127  nCSCHits++;
1128  }
1129  }
1130  } // end loop over hits
1131 
1132  float zInner = -1.;
1133  float zOuter = 20000.;
1134  if (nCSCHits >= nCSCHitsMin) {
1135  if (abs(iPnt.z()) < abs(iPnt.z())) {
1136  zInner = iPnt.z();
1137  zOuter = oPnt.z();
1138  } else {
1139  zInner = oPnt.z();
1140  zOuter = iPnt.z();
1141  }
1142  }
1143 
1144  bool goodSAMuon = (preco > pMin)
1145  && ( zLength > zLengthMin )
1146  && ( nCSCHits >= nCSCHitsMin )
1147  && ( zInner < zInnerMax )
1148  && ( rExt < rExtMax ) ;
1149 
1150  if (goodSAMuon) {nGoodSAMuons++;}
1151 
1152  } // end loop over stand-alone muon collection
1153 
1154 
1155 
1156 
1157  //-----------------------------------
1158  // examine the tracker tracks
1159  //-----------------------------------
1160  int nGoodTracks = 0;
1161  for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++ track ) {
1162  float preco = track->p();
1163  int n = track->recHitsSize();
1164 
1165  math::XYZPoint innerPo = track->innerPosition();
1166  GlobalPoint iPnt(innerPo.x(), innerPo.y(),innerPo.z());
1167  math::XYZPoint outerPo = track->outerPosition();
1168  GlobalPoint oPnt(outerPo.x(), outerPo.y(),outerPo.z());
1169  float zLength = abs( iPnt.z() - oPnt.z() );
1170 
1171  math::XYZVector innerMom = track->innerMomentum();
1172  GlobalVector iP(innerMom.x(), innerMom.y(), innerMom.z() );
1173  math::XYZVector outerMom = track->outerMomentum();
1174  GlobalVector oP(outerMom.x(), outerMom.y(), outerMom.z() );
1175 
1176  const float zRef = 300.;
1177  float xExt = 10000.;
1178  float yExt = 10000.;
1179  if (abs(oPnt.z()) > abs(iPnt.z())) {
1180  float deltaZ = 0.;
1181  if (oPnt.z() > 0) {
1182  deltaZ = zRef - oPnt.z();
1183  } else {
1184  deltaZ = -zRef - oPnt.z();
1185  }
1186  xExt = oPnt.x() + deltaZ * oP.x() / oP.z();
1187  yExt = oPnt.y() + deltaZ * oP.y() / oP.z();
1188  } else {
1189  float deltaZ = 0.;
1190  if (iPnt.z() > 0) {
1191  deltaZ = zRef - iPnt.z();
1192  } else {
1193  deltaZ = -zRef - iPnt.z();
1194  }
1195  xExt = iPnt.x() + deltaZ * iP.x() / iP.z();
1196  yExt = iPnt.y() + deltaZ * iP.y() / iP.z();
1197  }
1198  float rExt = sqrt( xExt*xExt + yExt*yExt );
1199 
1200  float zInner = -1.;
1201  float zOuter = 20000.;
1202  if (n >= nTrHitsMin) {
1203  if (abs(iPnt.z()) < abs(iPnt.z())) {
1204  zInner = iPnt.z();
1205  zOuter = oPnt.z();
1206  } else {
1207  zInner = oPnt.z();
1208  zOuter = iPnt.z();
1209  }
1210  }
1211 
1212  bool goodTrack = (preco > pMin)
1213  && (n >= nTrHitsMin)
1214  && (zLength > zLengthTrMin)
1215  && ( rExt < rExtMax ) ;
1216 
1217  if (goodTrack) {nGoodTracks++;}
1218 
1219  } // end loop over tracker tracks
1220 
1221 
1222  //-----------------------------------
1223  // examine the global muons
1224  //-----------------------------------
1225  int nGoodGlobalMuons = 0;
1226  for (reco::MuonCollection::const_iterator global = gMuons->begin(); global != gMuons->end(); ++global ) {
1227 
1228  if (global->isGlobalMuon()) {
1229 
1230  float pDef = global->p();
1231  float redChiSq = global->globalTrack()->normalizedChi2();
1232  const reco::HitPattern& hp = (global->globalTrack())->hitPattern();
1233  // int nTotalHits = hp.numberOfHits();
1234  // int nValidHits = hp.numberOfValidHits();
1235  int nTrackerHits = hp.numberOfValidTrackerHits();
1236  // int nPixelHits = hp.numberOfValidPixelHits();
1237  // int nStripHits = hp.numberOfValidStripHits();
1238 
1239  int nDTHits = 0;
1240  int nCSCHits = 0;
1241  for (trackingRecHit_iterator hit = (global->globalTrack())->recHitsBegin(); hit != (global->globalTrack())->recHitsEnd(); ++hit ) {
1242  const DetId detId( (*hit)->geographicalId() );
1243  if (detId.det() == DetId::Muon) {
1244  if (detId.subdetId() == MuonSubdetId::DT) {
1245  nDTHits++;
1246  }
1247  else if (detId.subdetId() == MuonSubdetId::CSC) {
1248  nCSCHits++;
1249  }
1250  }
1251  } // end loop over hits
1252 
1253  bool goodGlobalMuon = (pDef > pMin)
1254  && ( nTrackerHits >= nValidHitsMin )
1255  && ( nCSCHits >= nCSCHitsMin )
1256  && ( redChiSq < redChiSqMax );
1257 
1258  if (goodGlobalMuon) {nGoodGlobalMuons++;}
1259 
1260  } // this is a global muon
1261  } // end loop over stand-alone muon collection
1262 
1263  //-----------------------------------
1264  // do we accept this event?
1265  //-----------------------------------
1266 
1267  acceptThisEvent = ( (nGoodSAMuons > 0) && (nGoodTracks > 0) ) || (nGoodGlobalMuons > 0) ;
1268 
1269  return acceptThisEvent;
1270 }
float zInnerMax
Definition: CSCSkim.h:168
float rExtMax
Definition: CSCSkim.h:171
int nCSCHitsMin
Definition: CSCSkim.h:167
float zLengthMin
Definition: CSCSkim.h:166
#define abs(x)
Definition: mlp_lapack.h:159
float pMin
Definition: CSCSkim.h:165
int numberOfValidTrackerHits() const
Definition: HitPattern.cc:333
static const int CSC
Definition: MuonSubdetId.h:15
float zLengthTrMin
Definition: CSCSkim.h:170
bool goodTrack(const reco::Track *pTrack, math::XYZPoint leadPV, trackSelectionParameters parameters, bool debug=false)
T sqrt(T t)
Definition: SSEVec.h:28
T z() const
Definition: PV3DBase.h:58
int nValidHitsMin
Definition: CSCSkim.h:173
int nTrHitsMin
Definition: CSCSkim.h:169
Definition: DetId.h:20
tuple tracks
Definition: testEve_cfg.py:39
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
static const int DT
Definition: MuonSubdetId.h:14
float redChiSqMax
Definition: CSCSkim.h:172
bool CSCSkim::doCertainChamberSelection ( edm::Handle< CSCWireDigiCollection wires,
edm::Handle< CSCStripDigiCollection strips 
)
private

Definition at line 695 of file CSCSkim.cc.

References CSCDetId, and CSCDetId::endcap().

696  {
697 
698  // Loop through the wire DIGIs, looking for a match
699  bool certainChamberIsPresentInWires = false;
700  for (CSCWireDigiCollection::DigiRangeIterator jw=wires->begin(); jw!=wires->end(); jw++) {
701  CSCDetId id = (CSCDetId)(*jw).first;
702  int kEndcap = id.endcap();
703  int kRing = id.ring();
704  int kStation = id.station();
705  int kChamber = id.chamber();
706  if ( (kEndcap == whichEndcap) &&
707  (kStation == whichStation) &&
708  (kRing == whichRing) &&
709  (kChamber == whichChamber) )
710  {certainChamberIsPresentInWires = true;}
711  } // end wire loop
712 
713 
714  // Loop through the strip DIGIs, looking for a match
715  bool certainChamberIsPresentInStrips = false;
716  for (CSCStripDigiCollection::DigiRangeIterator js=strips->begin(); js!=strips->end(); js++) {
717  CSCDetId id = (CSCDetId)(*js).first;
718  int kEndcap = id.endcap();
719  int kRing = id.ring();
720  int kStation = id.station();
721  int kChamber = id.chamber();
722  if ( (kEndcap == whichEndcap) &&
723  (kStation == whichStation) &&
724  (kRing == whichRing) &&
725  (kChamber == whichChamber) )
726  {certainChamberIsPresentInStrips = true;}
727  }
728 
729  bool certainChamberIsPresent = certainChamberIsPresentInWires || certainChamberIsPresentInStrips;
730 
731  return certainChamberIsPresent;
732 }
int whichEndcap
Definition: CSCSkim.h:160
int endcap() const
Definition: CSCDetId.h:95
int whichChamber
Definition: CSCSkim.h:163
int whichStation
Definition: CSCSkim.h:161
int whichRing
Definition: CSCSkim.h:162
bool CSCSkim::doCSCSkimming ( edm::Handle< CSCRecHit2DCollection cscRecHits,
edm::Handle< CSCSegmentCollection cscSegments 
)
private

Definition at line 354 of file CSCSkim.cc.

References CSCDetId::chamber(), CSCDetId, CSCDetId::endcap(), i, j, kLayer(), CSCDetId::layer(), LogDebug, funct::pow(), CSCDetId::ring(), and CSCDetId::station().

354  {
355 
356  // how many RecHits in the collection?
357  int nRecHits = cscRecHits->size();
358 
359  // zero the recHit counter
360  int cntRecHit[600];
361  for (int i = 0; i < 600; i++) {
362  cntRecHit[i] = 0;
363  }
364 
365  // ---------------------
366  // Loop over rechits
367  // ---------------------
368 
370  for (recIt = cscRecHits->begin(); recIt != cscRecHits->end(); recIt++) {
371 
372  // which chamber is it?
373  CSCDetId idrec = (CSCDetId)(*recIt).cscDetId();
374  int kEndcap = idrec.endcap();
375  int kRing = idrec.ring();
376  int kStation = idrec.station();
377  int kChamber = idrec.chamber();
378  int kLayer = idrec.layer();
379 
380  // compute chamber serial number
381  int kSerial = chamberSerial( kEndcap, kStation, kRing, kChamber ) ;
382 
383  // increment recHit counter
384  // (each layer is represented by a different power of 10)
385  int kDigit = (int) pow((float)10.,(float)(kLayer-1));
386  cntRecHit[kSerial] += kDigit;
387 
388  } //end rechit loop
389 
390 
391  // ------------------------------------------------------
392  // Are there chambers with the minimum number of hits?
393  // ------------------------------------------------------
394 
395  int nChambersWithMinimalHits = 0;
396  int nChambersWithMinimalHitsPOS = 0;
397  int nChambersWithMinimalHitsNEG = 0;
398  if (nRecHits > 0) {
399  for (int i = 0; i < 600; i++) {
400  if (cntRecHit[i] > 0) {
401  int nLayersWithHits = 0;
402  float dummy = (float) cntRecHit[i];
403  for (int j = 5; j > -1; j--) {
404  float digit = dummy / pow( (float)10., (float)j );
405  int kCount = (int) digit;
406  if (kCount > 0) nLayersWithHits++;
407  dummy = dummy - ( (float) kCount) * pow( (float)10., (float)j );
408  }
409  if (nLayersWithHits > nLayersWithHitsMinimum) {
410  if (i < 300) {nChambersWithMinimalHitsPOS++;}
411  else {nChambersWithMinimalHitsNEG++;}
412  }
413  }
414  }
415  nChambersWithMinimalHits = nChambersWithMinimalHitsPOS + nChambersWithMinimalHitsNEG;
416  }
417 
418  // how many Segments?
419  int nSegments = cscSegments->size();
420 
421  // ----------------------
422  // fill histograms
423  // ----------------------
424 
425  if (makeHistograms) {
426  hxnRecHits->Fill(nRecHits);
427  if (nRecHits > 0) {
428  hxnSegments->Fill(nSegments);
429  hxnHitChambers->Fill(nChambersWithMinimalHits);
430  }
431  if (nChambersWithMinimalHits > 0) {
432  hxnRecHitsSel->Fill(nRecHits);
433  }
434  }
435 
436  // ----------------------
437  // set the filter flag
438  // ----------------------
439  bool basicEvent = ( nChambersWithMinimalHits >= minimumHitChambers ) && ( nSegments >= minimumSegments );
440 
441  bool chambersOnBothSides = ((nChambersWithMinimalHitsPOS >= minimumHitChambers) && (nChambersWithMinimalHitsNEG >= minimumHitChambers));
442 
443  if (chambersOnBothSides) {nEventsChambersBothSides++;}
444 
445  bool selectEvent = false;
446  if (typeOfSkim == 1) {selectEvent = basicEvent;}
447  if (typeOfSkim == 2) {selectEvent = chambersOnBothSides;}
448 
449 
450  // debug
451  LogDebug("[CSCSkim]") << "----- nRecHits = " << nRecHits
452  << "\tnChambersWithMinimalHits = " << nChambersWithMinimalHits
453  << "\tnSegments = " << nSegments
454  << "\tselect? " << selectEvent << std::endl;
455 
456  /*
457  if ((nChambersWithMinimalHitsPOS >= minimumHitChambers) && (nChambersWithMinimalHitsNEG >= minimumHitChambers)) {
458  std::cout << "\n==========================================================================\n"
459  << "\tinteresting event - chambers hit on both sides\n"
460  << "\t " << nEventsAnalyzed
461  << "\trun " << iRun << "\tevent " << iEvent << std::endl;
462  std::cout << "----- nRecHits = " << nRecHits
463  << "\tnChambersWithMinimalHits = " << nChambersWithMinimalHits
464  << "\tnSegments = " << nSegments
465  << "\tselect? " << selectEvent << std::endl;
466  for (int i = 0; i < 600; i++) {
467  if (cntRecHit[i] > 0) {
468  cout << "\t\t" << i << "\tcntRecHit= " << cntRecHit[i] << std::endl;
469  }
470  }
471  std::cout << "==========================================================================\n\n" ;
472  }
473  */
474 
475  return selectEvent;
476 }
#define LogDebug(id)
TH1F * hxnRecHitsSel
Definition: CSCSkim.h:180
int chamber() const
Definition: CSCDetId.h:70
int i
Definition: DBlmapReader.cc:9
int nLayersWithHitsMinimum
Definition: CSCSkim.h:154
int nEventsChambersBothSides
Definition: CSCSkim.h:124
TH1F * hxnRecHits
Definition: CSCSkim.h:177
int minimumHitChambers
Definition: CSCSkim.h:155
int layer() const
Definition: CSCDetId.h:63
int endcap() const
Definition: CSCDetId.h:95
int typeOfSkim
Definition: CSCSkim.h:153
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:46
int minimumSegments
Definition: CSCSkim.h:156
TH1F * hxnSegments
Definition: CSCSkim.h:178
int j
Definition: DBlmapReader.cc:9
bool makeHistograms
Definition: CSCSkim.h:158
static const std::string kLayer("layer")
int ring() const
Definition: CSCDetId.h:77
TH1F * hxnHitChambers
Definition: CSCSkim.h:179
int station() const
Definition: CSCDetId.h:88
int chamberSerial(int kE, int kS, int kR, int kCh)
Definition: CSCSkim.cc:1276
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
bool CSCSkim::doDTOverlap ( edm::Handle< CSCSegmentCollection cscSegments)
private

Definition at line 741 of file CSCSkim.cc.

References CSCDetId, CSCDetId::endcap(), and i.

741  {
742  const float chisqMax = 100.;
743  const int nhitsMin = 5;
744  const int maxNSegments = 3;
745 
746  // initialize
747  bool DTOverlapCandidate = false;
748  int cntMEP13[36];
749  int cntMEN13[36];
750  int cntMEP22[36];
751  int cntMEN22[36];
752  int cntMEP32[36];
753  int cntMEN32[36];
754  for (int i=0; i<36; ++i) {
755  cntMEP13[i] = 0;
756  cntMEN13[i] = 0;
757  cntMEP22[i] = 0;
758  cntMEN22[i] = 0;
759  cntMEP32[i] = 0;
760  cntMEN32[i] = 0;
761  }
762 
763  // -----------------------
764  // loop over segments
765  // -----------------------
766 
767  int nSegments = cscSegments->size();
768  if (nSegments < 2) return DTOverlapCandidate;
769 
770  for(CSCSegmentCollection::const_iterator it=cscSegments->begin(); it != cscSegments->end(); it++) {
771  // which chamber?
772  CSCDetId id = (CSCDetId)(*it).cscDetId();
773  int kEndcap = id.endcap();
774  int kStation = id.station();
775  int kRing = id.ring();
776  int kChamber = id.chamber();
777  // segment information
778  float chisq = (*it).chi2();
779  int nhits = (*it).nRecHits();
780  bool goodSegment = (chisq < chisqMax) && (nhits >= nhitsMin) ;
781  if (goodSegment) {
782  if ( (kStation == 1) && (kRing == 3) ) {
783  if (kEndcap == 1) {cntMEP13[kChamber-1]++;}
784  if (kEndcap == 2) {cntMEN13[kChamber-1]++;}
785  }
786  if ( (kStation == 2) && (kRing == 2) ) {
787  if (kEndcap == 1) {cntMEP22[kChamber-1]++;}
788  if (kEndcap == 2) {cntMEN22[kChamber-1]++;}
789  }
790  if ( (kStation == 3) && (kRing == 2) ) {
791  if (kEndcap == 1) {cntMEP32[kChamber-1]++;}
792  if (kEndcap == 2) {cntMEN32[kChamber-1]++;}
793  }
794  } // this is a good segment
795  } // end loop over segments
796 
797  // ---------------------------------------------
798  // veto messy events
799  // ---------------------------------------------
800  bool tooManySegments = false;
801  for (int i=0; i<36; ++i) {
802  if ( (cntMEP13[i] > maxNSegments) ||
803  (cntMEN13[i] > maxNSegments) ||
804  (cntMEP22[i] > maxNSegments) ||
805  (cntMEN22[i] > maxNSegments) ||
806  (cntMEP32[i] > maxNSegments) ||
807  (cntMEN32[i] > maxNSegments) ) tooManySegments = true;
808  }
809  if (tooManySegments) {
810  return DTOverlapCandidate;
811  }
812 
813  // ---------------------------------------------
814  // check for relevant matchup of segments
815  // ---------------------------------------------
816  bool matchup = false;
817  for (int i=0; i<36; ++i) {
818  if ( (cntMEP13[i] > 0) && (cntMEP22[i]+cntMEP32[i] > 0) ) {matchup = true;}
819  if ( (cntMEN13[i] > 0) && (cntMEN22[i]+cntMEN32[i] > 0) ) {matchup = true;}
820  }
821  /*
822  if (matchup) {
823  std::cout << "\tYYY looks like a good event. Select!\n";
824  std::cout << "-- pos endcap --\n"
825  << "ME1/3: ";
826  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEP13[k];}
827  std::cout << "\nME2/2: ";
828  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEP22[k];}
829  std::cout << "\nME3/2: ";
830  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEP32[k];}
831  std::cout << std::endl;
832  }
833  */
834 
835  // set the selection flag
836  DTOverlapCandidate = matchup;
837  return DTOverlapCandidate;
838 }
int i
Definition: DBlmapReader.cc:9
int endcap() const
Definition: CSCDetId.h:95
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:46
bool CSCSkim::doHaloLike ( edm::Handle< CSCSegmentCollection cscSegments)
private

Definition at line 849 of file CSCSkim.cc.

References CSCDetId, CSCDetId::endcap(), and i.

849  {
850  const float chisqMax = 100.;
851  const int nhitsMin = 5; // on a segment
852  const int maxNSegments = 3; // in a chamber
853 
854  // initialize
855  bool HaloLike = false;
856  int cntMEP11[36];
857  int cntMEN11[36];
858  int cntMEP12[36];
859  int cntMEN12[36];
860  int cntMEP21[36];
861  int cntMEN21[36];
862  int cntMEP31[36];
863  int cntMEN31[36];
864  int cntMEP41[36];
865  int cntMEN41[36];
866  for (int i=0; i<36; ++i) {
867  cntMEP11[i] = 0;
868  cntMEN11[i] = 0;
869  cntMEP12[i] = 0;
870  cntMEN12[i] = 0;
871  cntMEP21[i] = 0;
872  cntMEN21[i] = 0;
873  cntMEP31[i] = 0;
874  cntMEN31[i] = 0;
875  cntMEP41[i] = 0;
876  cntMEN41[i] = 0;
877  }
878 
879  // -----------------------
880  // loop over segments
881  // -----------------------
882  int nSegments = cscSegments->size();
883  if (nSegments < 4) return HaloLike;
884 
885  for(CSCSegmentCollection::const_iterator it=cscSegments->begin(); it != cscSegments->end(); it++) {
886  // which chamber?
887  CSCDetId id = (CSCDetId)(*it).cscDetId();
888  int kEndcap = id.endcap();
889  int kStation = id.station();
890  int kRing = id.ring();
891  int kChamber = id.chamber();
892  // segment information
893  float chisq = (*it).chi2();
894  int nhits = (*it).nRecHits();
895  bool goodSegment = (chisq < chisqMax) && (nhits >= nhitsMin) ;
896  if (goodSegment) {
897  if ( (kStation == 1) && (kRing == 1) ) {
898  if (kEndcap == 1) {cntMEP11[kChamber-1]++;}
899  if (kEndcap == 2) {cntMEN11[kChamber-1]++;}
900  }
901  if ( (kStation == 1) && (kRing == 2) ) {
902  if (kEndcap == 1) {cntMEP12[kChamber-1]++;}
903  if (kEndcap == 2) {cntMEN12[kChamber-1]++;}
904  }
905  if ( (kStation == 2) && (kRing == 1) ) {
906  if (kEndcap == 1) {cntMEP21[kChamber-1]++;}
907  if (kEndcap == 2) {cntMEN21[kChamber-1]++;}
908  }
909  if ( (kStation == 3) && (kRing == 1) ) {
910  if (kEndcap == 1) {cntMEP31[kChamber-1]++;}
911  if (kEndcap == 2) {cntMEN31[kChamber-1]++;}
912  }
913  if ( (kStation == 4) && (kRing == 1) ) {
914  if (kEndcap == 1) {cntMEP41[kChamber-1]++;}
915  if (kEndcap == 2) {cntMEN41[kChamber-1]++;}
916  }
917  } // this is a good segment
918  } // end loop over segments
919 
920  // ---------------------------------------------
921  // veto messy events
922  // ---------------------------------------------
923  bool tooManySegments = false;
924  for (int i=0; i<36; ++i) {
925  if ( (cntMEP11[i] > 3*maxNSegments) ||
926  (cntMEN11[i] > 3*maxNSegments) ||
927  (cntMEP12[i] > maxNSegments) ||
928  (cntMEN12[i] > maxNSegments) ||
929  (cntMEP21[i] > maxNSegments) ||
930  (cntMEN21[i] > maxNSegments) ||
931  (cntMEP31[i] > maxNSegments) ||
932  (cntMEN31[i] > maxNSegments) ||
933  (cntMEP41[i] > maxNSegments) ||
934  (cntMEN41[i] > maxNSegments) ) tooManySegments = true;
935  }
936  if (tooManySegments) {
937  return HaloLike;
938  }
939 
940  // ---------------------------------------------
941  // check for relevant matchup of segments
942  // ---------------------------------------------
943  bool matchup = false;
944  for (int i=0; i<36; ++i) {
945  if ( (cntMEP11[i]+cntMEP12[i] > 0) &&
946  (cntMEP21[i] > 0) &&
947  (cntMEP31[i] > 0) &&
948  (cntMEP41[i] > 0) ) {matchup = true;}
949  if ( (cntMEN11[i]+cntMEN12[i] > 0) &&
950  (cntMEN21[i] > 0) &&
951  (cntMEN31[i] > 0) &&
952  (cntMEN41[i] > 0) ) {matchup = true;}
953  }
954  /*
955  if (matchup) {
956  std::cout << "\tYYY looks like a good event. Select!\n";
957  std::cout << "-- pos endcap --\n"
958  << "ME1/1: ";
959  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEP11[k];}
960  std::cout << "\nME1/2: ";
961  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEP12[k];}
962  std::cout << "\nME2/1: ";
963  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEP21[k];}
964  std::cout << "\nME3/1: ";
965  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEP31[k];}
966  std::cout << "\nME4/1: ";
967  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEP41[k];}
968  std::cout << std::endl;
969  std::cout << "-- neg endcap --\n"
970  << "ME1/1: ";
971  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEN11[k];}
972  std::cout << "\nME1/2: ";
973  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEN12[k];}
974  std::cout << "\nME2/1: ";
975  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEN21[k];}
976  std::cout << "\nME3/1: ";
977  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEN31[k];}
978  std::cout << "\nME4/1: ";
979  for (int k=0; k<36; ++k) {std::cout << " " << setw(3) << cntMEN41[k];}
980  std::cout << std::endl;
981  std::cout << "\tn Analyzed = " << nEventsAnalyzed << "\tn Halo-like = " << nEventsHaloLike << std::endl;
982  }
983  */
984 
985  // set the selection flag
986  HaloLike = matchup;
987  return HaloLike;
988 }
int i
Definition: DBlmapReader.cc:9
int endcap() const
Definition: CSCDetId.h:95
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:46
bool CSCSkim::doLongSATrack ( edm::Handle< reco::TrackCollection saTracks)
private

Definition at line 994 of file CSCSkim.cc.

References MuonSubdetId::CSC, MuonSubdetId::DT, min, DetId::Muon, metsig::muon, benchmark_cfg::select, and PV3DBase< T, PVType, FrameType >::z().

994  {
995 
996  const float zDistanceMax = 2500.;
997  const float zDistanceMin = 700.;
998  const int nCSCHitsMin = 25;
999  const int nCSCHitsMax = 50;
1000  const float zInnerMax = 80000.;
1001 
1002  const int nNiceMuonsMin = 1;
1003 
1004  //
1005  // Loop through the track collection and test each one
1006  //
1007 
1008  int nNiceMuons = 0;
1009 
1010  for(reco::TrackCollection::const_iterator muon = saMuons->begin(); muon != saMuons->end(); ++ muon ) {
1011 
1012  // basic information
1013  math::XYZVector innerMo = muon->innerMomentum();
1014  GlobalVector im(innerMo.x(),innerMo.y(),innerMo.z());
1015  math::XYZPoint innerPo = muon->innerPosition();
1016  GlobalPoint ip(innerPo.x(), innerPo.y(),innerPo.z());
1017  math::XYZPoint outerPo = muon->outerPosition();
1018  GlobalPoint op(outerPo.x(), outerPo.y(),outerPo.z());
1019  float zInner = ip.z();
1020  float zOuter = op.z();
1021  float zDistance = fabs(zOuter-zInner);
1022 
1023 
1024 
1025  // loop over hits
1026  int nDTHits = 0;
1027  int nCSCHits = 0;
1028  for (trackingRecHit_iterator hit = muon->recHitsBegin(); hit != muon->recHitsEnd(); ++hit ) {
1029  const DetId detId( (*hit)->geographicalId() );
1030  if (detId.det() == DetId::Muon) {
1031  if (detId.subdetId() == MuonSubdetId::DT) {
1032  //DTChamberId dtId(detId.rawId());
1033  //int chamberId = dtId.sector();
1034  nDTHits++;
1035  }
1036  else if (detId.subdetId() == MuonSubdetId::CSC) {
1037  //CSCDetId cscId(detId.rawId());
1038  //int chamberId = cscId.chamber();
1039  nCSCHits++;
1040  }
1041  }
1042  }
1043 
1044  // is this a nice muon?
1045  if ( (zDistance < zDistanceMax) && (zDistance > zDistanceMin)
1046  && (nCSCHits > nCSCHitsMin) && (nCSCHits < nCSCHitsMax)
1047  && (min ( fabs(zInner), fabs(zOuter) ) < zInnerMax)
1048  && (fabs(innerMo.z()) > 0.000000001) ) {
1049  nNiceMuons++;
1050  }
1051  }
1052 
1053  bool select = (nNiceMuons >= nNiceMuonsMin);
1054 
1055  return select;
1056 }
float zInnerMax
Definition: CSCSkim.h:168
int nCSCHitsMin
Definition: CSCSkim.h:167
#define min(a, b)
Definition: mlp_lapack.h:161
static const int CSC
Definition: MuonSubdetId.h:15
T z() const
Definition: PV3DBase.h:58
Definition: DetId.h:20
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
static const int DT
Definition: MuonSubdetId.h:14
bool CSCSkim::doMessyEventSkimming ( edm::Handle< CSCRecHit2DCollection cscRecHits,
edm::Handle< CSCSegmentCollection cscSegments 
)
private

Definition at line 564 of file CSCSkim.cc.

References CSCDetId::chamber(), CSCDetId, CSCDetId::endcap(), i, j, kLayer(), CSCDetId::layer(), LogDebug, funct::pow(), CSCDetId::ring(), and CSCDetId::station().

564  {
565 
566  // how many RecHits in the collection?
567  int nRecHits = cscRecHits->size();
568 
569  // zero the recHit counter
570  int cntRecHit[600];
571  for (int i = 0; i < 600; i++) {
572  cntRecHit[i] = 0;
573  }
574 
575  // ---------------------
576  // Loop over rechits
577  // ---------------------
578 
580  for (recIt = cscRecHits->begin(); recIt != cscRecHits->end(); recIt++) {
581 
582  // which chamber is it?
583  CSCDetId idrec = (CSCDetId)(*recIt).cscDetId();
584  int kEndcap = idrec.endcap();
585  int kRing = idrec.ring();
586  int kStation = idrec.station();
587  int kChamber = idrec.chamber();
588  int kLayer = idrec.layer();
589 
590  // compute chamber serial number
591  int kSerial = chamberSerial( kEndcap, kStation, kRing, kChamber ) ;
592 
593  // increment recHit counter
594  // (each layer is represented by a different power of 10)
595  int kDigit = (int) pow((float)10.,(float)(kLayer-1));
596  cntRecHit[kSerial] += kDigit;
597 
598  } //end rechit loop
599 
600 
601  // ------------------------------------------------------
602  // Are there chambers with the minimum number of hits?
603  // ------------------------------------------------------
604 
605  int nChambersWithMinimalHits = 0;
606  int nChambersWithMinimalHitsPOS = 0;
607  int nChambersWithMinimalHitsNEG = 0;
608  if (nRecHits > 0) {
609  for (int i = 0; i < 600; i++) {
610  if (cntRecHit[i] > 0) {
611  int nLayersWithHits = 0;
612  float dummy = (float) cntRecHit[i];
613  for (int j = 5; j > -1; j--) {
614  float digit = dummy / pow( (float)10., (float)j );
615  int kCount = (int) digit;
616  if (kCount > 0) nLayersWithHits++;
617  dummy = dummy - ( (float) kCount) * pow( (float)10., (float)j );
618  }
619  if (nLayersWithHits > nLayersWithHitsMinimum) {
620  if (i < 300) {nChambersWithMinimalHitsPOS++;}
621  else {nChambersWithMinimalHitsNEG++;}
622  }
623  }
624  }
625  nChambersWithMinimalHits = nChambersWithMinimalHitsPOS + nChambersWithMinimalHitsNEG;
626  }
627 
628  // how many Segments?
629  int nSegments = cscSegments->size();
630 
631  // ----------------------
632  // fill histograms
633  // ----------------------
634 
636  if (nRecHits > 8) {
637  mevnRecHits0->Fill(nRecHits);
638  mevnChambers0->Fill(nChambersWithMinimalHits);
639  mevnSegments0->Fill(nSegments);
640  }
641  if (nRecHits > 54) {
642  double dummy = (double) nRecHits;
643  if (dummy > 299.9) dummy = 299.9;
644  mevnRecHits1->Fill(dummy);
645  dummy = (double) nChambersWithMinimalHits;
646  if (dummy > 49.9) dummy = 49.9;
647  mevnChambers1->Fill(dummy);
648  dummy = (double) nSegments;
649  if (dummy > 29.9) dummy = 29.9;
650  mevnSegments1->Fill(dummy);
651  }
652  }
653 
654  // ----------------------
655  // set the filter flag
656  // ----------------------
657 
658  bool selectEvent = false;
659  if ( (nRecHits > 54) && (nChambersWithMinimalHits > 5) ) {selectEvent = true;}
660 
661  // debug
662  LogDebug("[CSCSkim]") << "----- nRecHits = " << nRecHits
663  << "\tnChambersWithMinimalHits = " << nChambersWithMinimalHits
664  << "\tnSegments = " << nSegments
665  << "\tselect? " << selectEvent << std::endl;
666 
667  /*
668  if (selectEvent) {
669  std::cout << "\n==========================================================================\n"
670  << "\tmessy event!\n"
671  << "\t " << nEventsAnalyzed
672  << "\trun " << iRun << "\tevent " << iEvent << std::endl;
673  std::cout << "----- nRecHits = " << nRecHits
674  << "\tnChambersWithMinimalHits = " << nChambersWithMinimalHits
675  << "\tnSegments = " << nSegments
676  << "\tselect? " << selectEvent << std::endl;
677  for (int i = 0; i < 600; i++) {
678  if (cntRecHit[i] > 0) {
679  cout << "\t\t" << i << "\tcntRecHit= " << cntRecHit[i] << std::endl;
680  }
681  }
682  std::cout << "==========================================================================\n\n" ;
683  }
684  */
685 
686  return selectEvent;
687 }
#define LogDebug(id)
int chamber() const
Definition: CSCDetId.h:70
int i
Definition: DBlmapReader.cc:9
bool makeHistogramsForMessyEvents
Definition: CSCSkim.h:159
int nLayersWithHitsMinimum
Definition: CSCSkim.h:154
TH1F * mevnRecHits0
Definition: CSCSkim.h:181
TH1F * mevnRecHits1
Definition: CSCSkim.h:184
TH1F * mevnSegments0
Definition: CSCSkim.h:183
TH1F * mevnSegments1
Definition: CSCSkim.h:186
int layer() const
Definition: CSCDetId.h:63
int endcap() const
Definition: CSCDetId.h:95
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:46
int j
Definition: DBlmapReader.cc:9
static const std::string kLayer("layer")
int ring() const
Definition: CSCDetId.h:77
TH1F * mevnChambers1
Definition: CSCSkim.h:185
int station() const
Definition: CSCDetId.h:88
int chamberSerial(int kE, int kS, int kR, int kCh)
Definition: CSCSkim.cc:1276
TH1F * mevnChambers0
Definition: CSCSkim.h:182
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
bool CSCSkim::doOverlapSkimming ( edm::Handle< CSCSegmentCollection cscSegments)
private

Definition at line 482 of file CSCSkim.cc.

References CSCDetId, CSCDetId::endcap(), and i.

482  {
483 
484  const int nhitsMinimum = 4;
485  const float chisqMaximum = 100.;
486  const int nAllMaximum = 3;
487 
488  // how many Segments?
489  // int nSegments = cscSegments->size();
490 
491  // zero arrays
492  int nAll[600];
493  int nGood[600];
494  for (int i=0; i<600; i++) {
495  nAll[i] = 0;
496  nGood[i] = 0;
497  }
498 
499  // -----------------------
500  // loop over segments
501  // -----------------------
502  for(CSCSegmentCollection::const_iterator it=cscSegments->begin(); it != cscSegments->end(); it++) {
503 
504  // which chamber?
505  CSCDetId id = (CSCDetId)(*it).cscDetId();
506  int kEndcap = id.endcap();
507  int kStation = id.station();
508  int kRing = id.ring();
509  int kChamber = id.chamber();
510  int kSerial = chamberSerial( kEndcap, kStation, kRing, kChamber);
511 
512  // segment information
513  float chisq = (*it).chi2();
514  int nhits = (*it).nRecHits();
515 
516  // is this a good segment?
517  bool goodSegment = (nhits >= nhitsMinimum) && (chisq < chisqMaximum) ;
518 
519  /*
520  LocalPoint localPos = (*it).localPosition();
521  float segX = localPos.x();
522  float segY = localPos.y();
523  std::cout << "E/S/R/Ch: " << kEndcap << "/" << kStation << "/" << kRing << "/" << kChamber
524  << "\tnhits/chisq: " << nhits << "/" << chisq
525  << "\tX/Y: " << segX << "/" << segY
526  << "\tgood? " << goodSegment << std::endl;
527  */
528 
529  // count
530  nAll[kSerial-1]++;
531  if (goodSegment) nGood[kSerial]++;
532 
533  } // end loop over segments
534 
535  //----------------------
536  // select the event
537  //----------------------
538 
539  // does any chamber have too many segments?
540  bool messyChamber = false;
541  for (int i = 0; i < 600; i++) {
542  if (nAll[i] > nAllMaximum) messyChamber = true;
543  }
544 
545  // are there consecutive chambers with good segments
546  // (This is a little sloppy but is probably fine for skimming...)
547  bool consecutiveChambers = false;
548  for (int i = 0; i < 599; i++) {
549  if ( (nGood[i]>0) && (nGood[i+1]>0) ) consecutiveChambers = true;
550  }
551 
552  bool selectThisEvent = !messyChamber && consecutiveChambers;
553 
554  return selectThisEvent;
555 
556 }
int i
Definition: DBlmapReader.cc:9
int endcap() const
Definition: CSCDetId.h:95
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:46
int chamberSerial(int kE, int kS, int kR, int kCh)
Definition: CSCSkim.cc:1276
void CSCSkim::endJob ( void  )
virtual

Reimplemented from edm::EDFilter.

Definition at line 171 of file CSCSkim.cc.

References LogDebug.

171  {
172 
173  // Write out results
174 
175  float fraction = 0.;
176  if (nEventsAnalyzed > 0) {fraction = (float)nEventsSelected / (float)nEventsAnalyzed;}
177 
178  LogInfo("[CSCSkim] Summary")
179  << "\n\n\t====== CSCSkim ==========================================================\n"
180  << "\t\ttype of skim ...............................\t" << typeOfSkim << "\n"
181  << "\t\tevents analyzed ..............\t" << nEventsAnalyzed << "\n"
182  << "\t\tevents selected ..............\t" << nEventsSelected << "\tfraction= " << fraction << std::endl
183  << "\t\tevents chambers both sides ...\t" << nEventsChambersBothSides << "\n"
184  << "\t\tevents w/ overlaps .......... \t" << nEventsOverlappingChambers << "\n"
185  << "\t\tevents lots of hit chambers . \t" << nEventsMessy << "\n"
186  << "\t\tevents from certain chamber . \t" << nEventsCertainChamber << "\n"
187  << "\t\tevents in DT-CSC overlap .... \t" << nEventsDTOverlap << "\n"
188  << "\t\tevents halo-like ............ \t" << nEventsHaloLike << "\n"
189  << "\t\tevents w/ long SA track ..... \t" << nEventsLongSATrack << "\n"
190  << "\t\tevents good for BField ..... \t" << nEventsForBFieldStudies << "\n"
191  << "\t=========================================================================\n\n";
192 
194  // Write the histos to file
195  LogDebug("[CSCSkim]") << "======= write out my histograms ====\n" ;
196  theHistogramFile->cd();
197  if (makeHistograms) {
198  hxnRecHits->Write();
199  hxnSegments->Write();
200  hxnHitChambers->Write();
201  hxnRecHitsSel->Write();
202  }
204  mevnRecHits0->Write();
205  mevnChambers0->Write();
206  mevnSegments0->Write();
207  mevnRecHits1->Write();
208  mevnChambers1->Write();
209  mevnSegments1->Write();
210  }
211  theHistogramFile->Close();
212  }
213 }
#define LogDebug(id)
TH1F * hxnRecHitsSel
Definition: CSCSkim.h:180
bool makeHistogramsForMessyEvents
Definition: CSCSkim.h:159
int nEventsForBFieldStudies
Definition: CSCSkim.h:131
int nEventsChambersBothSides
Definition: CSCSkim.h:124
TH1F * mevnRecHits0
Definition: CSCSkim.h:181
TH1F * mevnRecHits1
Definition: CSCSkim.h:184
TH1F * mevnSegments0
Definition: CSCSkim.h:183
TH1F * mevnSegments1
Definition: CSCSkim.h:186
TH1F * hxnRecHits
Definition: CSCSkim.h:177
int nEventsDTOverlap
Definition: CSCSkim.h:128
int nEventsOverlappingChambers
Definition: CSCSkim.h:125
int typeOfSkim
Definition: CSCSkim.h:153
int nEventsSelected
Definition: CSCSkim.h:123
TH1F * hxnSegments
Definition: CSCSkim.h:178
bool makeHistograms
Definition: CSCSkim.h:158
int nEventsLongSATrack
Definition: CSCSkim.h:130
int nEventsAnalyzed
Definition: CSCSkim.h:122
int nEventsCertainChamber
Definition: CSCSkim.h:127
TH1F * mevnChambers1
Definition: CSCSkim.h:185
TFile * theHistogramFile
Definition: CSCSkim.h:138
int nEventsMessy
Definition: CSCSkim.h:126
TH1F * hxnHitChambers
Definition: CSCSkim.h:179
int nEventsHaloLike
Definition: CSCSkim.h:129
TH1F * mevnChambers0
Definition: CSCSkim.h:182
bool CSCSkim::filter ( edm::Event event,
const edm::EventSetup eventSetup 
)
virtual

Implements edm::EDFilter.

Definition at line 219 of file CSCSkim.cc.

References cscSegments_cfi::cscSegments, edm::EventSetup::get(), iEvent, LogDebug, RecoTauPiZeroBuilderPlugins_cfi::strips, and testEve_cfg::tracks.

Referenced by python.Vispa.Plugins.Browser.BrowserTabController.BrowserTabController::filter(), python.Vispa.Plugins.Browser.BrowserTabController.BrowserTabController::find(), python.Vispa.Plugins.Browser.BrowserTabController.BrowserTabController::setDataAccessor(), and python.Vispa.Plugins.Browser.BrowserTabController.BrowserTabController::switchCenterView().

220 {
221  // increment counter
222  nEventsAnalyzed++;
223 
224  iRun = event.id().run();
225  iEvent = event.id().event();
226 
227  LogDebug("[CSCSkim] EventInfo") << "Run: " << iRun << "\tEvent: " << iEvent << "\tn Analyzed: " << nEventsAnalyzed;
228 
229  // Get the CSC Geometry :
230  ESHandle<CSCGeometry> cscGeom;
231  eventSetup.get<MuonGeometryRecord>().get(cscGeom);
232 
233  // Get the DIGI collections
236 
237  if (isSimulation){
238  event.getByLabel("simMuonCSCDigis","MuonCSCWireDigi",wires);
239  event.getByLabel("simMuonCSCDigis","MuonCSCStripDigi",strips);
240  }
241  else {
242  event.getByLabel("muonCSCDigis","MuonCSCWireDigi",wires);
243  event.getByLabel("muonCSCDigis","MuonCSCStripDigi",strips);
244  }
245 
246  // Get the RecHits collection :
248  event.getByLabel(cscRecHitTag,cscRecHits);
249 
250  // get CSC segment collection
252  event.getByLabel(cscSegmentTag, cscSegments);
253 
254  // get the cosmic muons collection
256  if (typeOfSkim == 8) {
257  event.getByLabel(SAMuonTag,saMuons);
258  }
259 
260  // get the stand-alone muons collection
263  if (typeOfSkim == 9) {
264  event.getByLabel(SAMuonTag,saMuons);
265  event.getByLabel(trackTag,tracks);
266  event.getByLabel(GLBMuonTag,gMuons);
267  }
268 
269 
270  //======================================
271  // evaluate the skimming routines
272  //======================================
273 
274 
275  // basic skimming
276  bool basicEvent = false;
277  if (typeOfSkim == 1 || typeOfSkim == 2) {
278  basicEvent = doCSCSkimming(cscRecHits,cscSegments);
279  }
280 
281  // overlapping chamber skim
282  bool goodOverlapEvent = false;
283  if (typeOfSkim == 3) {
284  goodOverlapEvent = doOverlapSkimming(cscSegments);
285  if (goodOverlapEvent) {nEventsOverlappingChambers++;}
286  }
287 
288  // messy events skim
289  bool messyEvent = false;
290  if (typeOfSkim == 4) {
291  messyEvent = doMessyEventSkimming(cscRecHits,cscSegments);
292  if (messyEvent) {nEventsMessy++;}
293  }
294 
295  // select events with DIGIs in a certain chamber
296  bool hasChamber = false;
297  if (typeOfSkim == 5) {
298  hasChamber = doCertainChamberSelection(wires,strips);
299  if (hasChamber) {nEventsCertainChamber++;}
300  }
301 
302  // select events in the DT-CSC overlap region
303  bool DTOverlapCandidate = false;
304  if (typeOfSkim == 6) {
305  DTOverlapCandidate = doDTOverlap(cscSegments);
306  if (DTOverlapCandidate) {nEventsDTOverlap++;}
307  }
308 
309  // select halo-like events
310  bool HaloLike = false;
311  if (typeOfSkim == 7) {
312  HaloLike = doHaloLike(cscSegments);
313  if (HaloLike) {nEventsHaloLike++;}
314  }
315 
316  // select long cosmic tracks
317  bool LongSATrack = false;
318  if (typeOfSkim == 8) {
319  LongSATrack = doLongSATrack(saMuons);
320  if (LongSATrack) {nEventsLongSATrack++;}
321  }
322 
323  // select events suitable for a B-field study. They have tracks in the tracker.
324  bool GoodForBFieldStudy = false;
325  if (typeOfSkim == 9) {
326  GoodForBFieldStudy = doBFieldStudySelection(saMuons,tracks,gMuons);
327  if (GoodForBFieldStudy) {nEventsForBFieldStudies++;}
328  }
329 
330 
331  // set filter flag
332  bool selectThisEvent = false;
333  if (typeOfSkim == 1 || typeOfSkim == 2) {selectThisEvent = basicEvent;}
334  if (typeOfSkim == 3) {selectThisEvent = goodOverlapEvent;}
335  if (typeOfSkim == 4) {selectThisEvent = messyEvent;}
336  if (typeOfSkim == 5) {selectThisEvent = hasChamber;}
337  if (typeOfSkim == 6) {selectThisEvent = DTOverlapCandidate;}
338  if (typeOfSkim == 7) {selectThisEvent = HaloLike;}
339  if (typeOfSkim == 8) {selectThisEvent = LongSATrack;}
340  if (typeOfSkim == 9) {selectThisEvent = GoodForBFieldStudy;}
341 
342  if (selectThisEvent) {nEventsSelected++;}
343 
344  return selectThisEvent;
345 }
#define LogDebug(id)
edm::InputTag trackTag
Definition: CSCSkim.h:149
int nEventsForBFieldStudies
Definition: CSCSkim.h:131
edm::InputTag GLBMuonTag
Definition: CSCSkim.h:148
bool doLongSATrack(edm::Handle< reco::TrackCollection > saTracks)
Definition: CSCSkim.cc:994
bool doOverlapSkimming(edm::Handle< CSCSegmentCollection > cscSegments)
Definition: CSCSkim.cc:482
int nEventsDTOverlap
Definition: CSCSkim.h:128
bool doDTOverlap(edm::Handle< CSCSegmentCollection > cscSegments)
Definition: CSCSkim.cc:741
edm::InputTag cscRecHitTag
Definition: CSCSkim.h:145
int nEventsOverlappingChambers
Definition: CSCSkim.h:125
int typeOfSkim
Definition: CSCSkim.h:153
int nEventsSelected
Definition: CSCSkim.h:123
int nEventsLongSATrack
Definition: CSCSkim.h:130
bool doCSCSkimming(edm::Handle< CSCRecHit2DCollection > cscRecHits, edm::Handle< CSCSegmentCollection > cscSegments)
Definition: CSCSkim.cc:354
bool doCertainChamberSelection(edm::Handle< CSCWireDigiCollection > wires, edm::Handle< CSCStripDigiCollection > strips)
Definition: CSCSkim.cc:695
bool doBFieldStudySelection(edm::Handle< reco::TrackCollection > saTracks, edm::Handle< reco::TrackCollection > Tracks, edm::Handle< reco::MuonCollection > gMuons)
Definition: CSCSkim.cc:1070
int nEventsAnalyzed
Definition: CSCSkim.h:122
bool isSimulation
Definition: CSCSkim.h:152
int nEventsCertainChamber
Definition: CSCSkim.h:127
tuple tracks
Definition: testEve_cfg.py:39
const T & get() const
Definition: EventSetup.h:55
bool doMessyEventSkimming(edm::Handle< CSCRecHit2DCollection > cscRecHits, edm::Handle< CSCSegmentCollection > cscSegments)
Definition: CSCSkim.cc:564
int nEventsMessy
Definition: CSCSkim.h:126
edm::InputTag SAMuonTag
Definition: CSCSkim.h:147
int iEvent
Definition: CSCSkim.h:135
int nEventsHaloLike
Definition: CSCSkim.h:129
edm::InputTag cscSegmentTag
Definition: CSCSkim.h:146
int iRun
Definition: CSCSkim.h:134
bool doHaloLike(edm::Handle< CSCSegmentCollection > cscSegments)
Definition: CSCSkim.cc:849

Member Data Documentation

edm::InputTag CSCSkim::cscRecHitTag
private

Definition at line 145 of file CSCSkim.h.

edm::InputTag CSCSkim::cscSegmentTag
private

Definition at line 146 of file CSCSkim.h.

bool CSCSkim::demandChambersBothSides
private

Definition at line 157 of file CSCSkim.h.

edm::InputTag CSCSkim::GLBMuonTag
private

Definition at line 148 of file CSCSkim.h.

std::string CSCSkim::histogramFileName
private

Definition at line 142 of file CSCSkim.h.

TH1F* CSCSkim::hxnHitChambers
private

Definition at line 179 of file CSCSkim.h.

TH1F* CSCSkim::hxnRecHits
private

Definition at line 177 of file CSCSkim.h.

TH1F* CSCSkim::hxnRecHitsSel
private

Definition at line 180 of file CSCSkim.h.

TH1F* CSCSkim::hxnSegments
private

Definition at line 178 of file CSCSkim.h.

int CSCSkim::iEvent
private

Definition at line 135 of file CSCSkim.h.

int CSCSkim::iRun
private

Definition at line 134 of file CSCSkim.h.

bool CSCSkim::isSimulation
private

Definition at line 152 of file CSCSkim.h.

bool CSCSkim::makeHistograms
private

Definition at line 158 of file CSCSkim.h.

bool CSCSkim::makeHistogramsForMessyEvents
private

Definition at line 159 of file CSCSkim.h.

TH1F* CSCSkim::mevnChambers0
private

Definition at line 182 of file CSCSkim.h.

TH1F* CSCSkim::mevnChambers1
private

Definition at line 185 of file CSCSkim.h.

TH1F* CSCSkim::mevnRecHits0
private

Definition at line 181 of file CSCSkim.h.

TH1F* CSCSkim::mevnRecHits1
private

Definition at line 184 of file CSCSkim.h.

TH1F* CSCSkim::mevnSegments0
private

Definition at line 183 of file CSCSkim.h.

TH1F* CSCSkim::mevnSegments1
private

Definition at line 186 of file CSCSkim.h.

int CSCSkim::minimumHitChambers
private

Definition at line 155 of file CSCSkim.h.

int CSCSkim::minimumSegments
private

Definition at line 156 of file CSCSkim.h.

int CSCSkim::nCSCHitsMin
private

Definition at line 167 of file CSCSkim.h.

int CSCSkim::nEventsAnalyzed
private

Definition at line 122 of file CSCSkim.h.

int CSCSkim::nEventsCertainChamber
private

Definition at line 127 of file CSCSkim.h.

int CSCSkim::nEventsChambersBothSides
private

Definition at line 124 of file CSCSkim.h.

int CSCSkim::nEventsDTOverlap
private

Definition at line 128 of file CSCSkim.h.

int CSCSkim::nEventsForBFieldStudies
private

Definition at line 131 of file CSCSkim.h.

int CSCSkim::nEventsHaloLike
private

Definition at line 129 of file CSCSkim.h.

int CSCSkim::nEventsLongSATrack
private

Definition at line 130 of file CSCSkim.h.

int CSCSkim::nEventsMessy
private

Definition at line 126 of file CSCSkim.h.

int CSCSkim::nEventsOverlappingChambers
private

Definition at line 125 of file CSCSkim.h.

int CSCSkim::nEventsSelected
private

Definition at line 123 of file CSCSkim.h.

int CSCSkim::nLayersWithHitsMinimum
private

Definition at line 154 of file CSCSkim.h.

int CSCSkim::nTrHitsMin
private

Definition at line 169 of file CSCSkim.h.

int CSCSkim::nValidHitsMin
private

Definition at line 173 of file CSCSkim.h.

std::string CSCSkim::outputFileName
private

Definition at line 141 of file CSCSkim.h.

float CSCSkim::pMin
private

Definition at line 165 of file CSCSkim.h.

float CSCSkim::redChiSqMax
private

Definition at line 172 of file CSCSkim.h.

float CSCSkim::rExtMax
private

Definition at line 171 of file CSCSkim.h.

edm::InputTag CSCSkim::SAMuonTag
private

Definition at line 147 of file CSCSkim.h.

TFile* CSCSkim::theHistogramFile
private

Definition at line 138 of file CSCSkim.h.

edm::InputTag CSCSkim::trackTag
private

Definition at line 149 of file CSCSkim.h.

int CSCSkim::typeOfSkim
private

Definition at line 153 of file CSCSkim.h.

int CSCSkim::whichChamber
private

Definition at line 163 of file CSCSkim.h.

int CSCSkim::whichEndcap
private

Definition at line 160 of file CSCSkim.h.

int CSCSkim::whichRing
private

Definition at line 162 of file CSCSkim.h.

int CSCSkim::whichStation
private

Definition at line 161 of file CSCSkim.h.

TH1F * CSCSkim::xxnCSCHits
private

Definition at line 188 of file CSCSkim.h.

TH1F * CSCSkim::xxnTrackerHits
private

Definition at line 188 of file CSCSkim.h.

TH1F * CSCSkim::xxnValidHits
private

Definition at line 188 of file CSCSkim.h.

TH1F* CSCSkim::xxP
private

Definition at line 188 of file CSCSkim.h.

TH1F * CSCSkim::xxredChiSq
private

Definition at line 188 of file CSCSkim.h.

float CSCSkim::zInnerMax
private

Definition at line 168 of file CSCSkim.h.

float CSCSkim::zLengthMin
private

Definition at line 166 of file CSCSkim.h.

float CSCSkim::zLengthTrMin
private

Definition at line 170 of file CSCSkim.h.