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
MuonCSCSeedFromRecHits Class Reference

#include <MuonCSCSeedFromRecHits.h>

Inheritance diagram for MuonCSCSeedFromRecHits:
MuonSeedFromRecHits

Public Member Functions

ConstMuonRecHitPointer bestEndcapHit (const MuonRecHitContainer &endcapHits) const
 
 MuonCSCSeedFromRecHits ()
 
virtual TrajectorySeed seed () const
 
virtual ~MuonCSCSeedFromRecHits ()
 
- Public Member Functions inherited from MuonSeedFromRecHits
void add (MuonTransientTrackingRecHit::MuonRecHitPointer hit)
 
void clear ()
 
TrajectorySeed createSeed (float ptmean, float sptmean, MuonTransientTrackingRecHit::ConstMuonRecHitPointer last) const
 
MuonTransientTrackingRecHit::ConstMuonRecHitPointer firstRecHit () const
 
 MuonSeedFromRecHits ()
 
unsigned int nrhit () const
 
void setBField (const MagneticField *field)
 
void setPtExtractor (const MuonSeedPtExtractor *extractor)
 
virtual ~MuonSeedFromRecHits ()
 

Private Member Functions

void analyze () const
 
float computeDefaultPt (ConstMuonRecHitPointer muon) const
 
bool createDefaultEndcapSeed (ConstMuonRecHitPointer last, TrajectorySeed &seed) const
 
void makeDefaultSeed (TrajectorySeed &seed) const
 
bool makeSeed (const MuonRecHitContainer &hits1, const MuonRecHitContainer &hits2, TrajectorySeed &seed) const
 
bool makeSeed2 (const MuonRecHitContainer &hits1, const MuonRecHitContainer &hits2, TrajectorySeed &seed) const
 
int segmentQuality (ConstMuonRecHitPointer muon) const
 

Additional Inherited Members

- Protected Types inherited from MuonSeedFromRecHits
typedef
MuonTransientTrackingRecHit::ConstMuonRecHitPointer 
ConstMuonRecHitPointer
 
typedef
MuonTransientTrackingRecHit::MuonRecHitContainer 
MuonRecHitContainer
 
typedef
MuonTransientTrackingRecHit::MuonRecHitPointer 
MuonRecHitPointer
 
- Protected Attributes inherited from MuonSeedFromRecHits
const MagneticFieldtheField
 
const MuonSeedPtExtractorthePtExtractor
 
MuonTransientTrackingRecHit::MuonRecHitContainer theRhits
 

Detailed Description

Definition at line 6 of file MuonCSCSeedFromRecHits.h.

Constructor & Destructor Documentation

MuonCSCSeedFromRecHits::MuonCSCSeedFromRecHits ( )

Definition at line 15 of file MuonCSCSeedFromRecHits.cc.

17 {
18 }
virtual MuonCSCSeedFromRecHits::~MuonCSCSeedFromRecHits ( )
inlinevirtual

Definition at line 11 of file MuonCSCSeedFromRecHits.h.

11 {}

Member Function Documentation

void MuonCSCSeedFromRecHits::analyze ( void  ) const
private

Definition at line 256 of file MuonCSCSeedFromRecHits.cc.

References gather_cfg::cout, SiPixelRawToDigiRegional_cfi::deltaPhi, and MuonSeedFromRecHits::theRhits.

257 {
258  for ( MuonRecHitContainer::const_iterator iter = theRhits.begin(); iter!= theRhits.end(); iter++ ){
259  if ( !(*iter)->isCSC() ) continue;
260  for ( MuonRecHitContainer::const_iterator iter2 = iter + 1; iter2 != theRhits.end(); ++iter2)
261  {
262  if( !(*iter2)->isCSC() ) continue;
263 
264  CSCDetId cscId1((*iter)->geographicalId().rawId());
265  CSCDetId cscId2((*iter2)->geographicalId().rawId());
266  double dphi = deltaPhi((**iter).globalPosition().phi(), (**iter2).globalPosition().phi());
267 
268  int type1 = cscId1.iChamberType();
269  int type2 = cscId2.iChamberType();
270 
271  // say the lower station first
272  if(type1 < type2)
273  {
274  std::cout << "HITPAIRA," << type1 << type2 << "," <<
275  dphi << "," << (**iter).globalPosition().eta() << std::endl;
276  }
277  if(type2 < type1)
278  {
279  std::cout << "HITPAIRB," << type2 << type1 << "," <<
280  -dphi << "," << (**iter2).globalPosition().eta() << std::endl;
281  }
282  if(type1 == type2)
283  {
284  std::cout << "HITPAIRSAMESTATION," << type1 << cscId1.ring() << cscId2.ring()
285  << "," << dphi << "," << (**iter).globalPosition().eta() << std::endl;
286  }
287 
288  }
289  }
290 }
MuonTransientTrackingRecHit::MuonRecHitContainer theRhits
tuple cout
Definition: gather_cfg.py:121
MuonCSCSeedFromRecHits::ConstMuonRecHitPointer MuonCSCSeedFromRecHits::bestEndcapHit ( const MuonRecHitContainer endcapHits) const

Definition at line 175 of file MuonCSCSeedFromRecHits.cc.

References SiPixelRawToDigiRegional_cfi::deltaPhi, M_PI, and segmentQuality().

Referenced by MuonOverlapSeedFromRecHits::bestHit(), makeDefaultSeed(), and makeSeed().

176 {
177  MuonRecHitPointer me1=0, meit=0;
178  float dPhiGloDir = .0; // +v
179  float bestdPhiGloDir = M_PI; // +v
180  int quality1 = 0, quality = 0; // +v I= 5,6-p. / II= 4p. / III= 3p.
181 
182  for ( MuonRecHitContainer::const_iterator iter = endcapHits.begin(); iter!= endcapHits.end(); iter++ ){
183  if ( !(*iter)->isCSC() ) continue;
184 
185  // tmp compar. Glob-Dir for the same tr-segm:
186 
187  meit = *iter;
188 
189  quality = segmentQuality(meit);
190 
191  dPhiGloDir = fabs ( deltaPhi(meit->globalPosition().phi(), meit->globalDirection().phi()) );
192 
193  if(!me1){
194  me1 = meit;
195  quality1 = quality;
196  bestdPhiGloDir = dPhiGloDir;
197  }
198 
199  if(me1) {
200 
201  if ( !me1->isValid() ) {
202  me1 = meit;
203  quality1 = quality;
204  bestdPhiGloDir = dPhiGloDir;
205  }
206 
207  if ( me1->isValid() && quality < quality1 ) {
208  me1 = meit;
209  quality1 = quality;
210  bestdPhiGloDir = dPhiGloDir;
211  }
212 
213  if ( me1->isValid() && bestdPhiGloDir > .03 ) {
214  if ( dPhiGloDir < bestdPhiGloDir - .01 && quality == quality1 ) {
215  me1 = meit;
216  quality1 = quality;
217  bestdPhiGloDir = dPhiGloDir;
218  }
219  }
220  }
221 
222  } // iter
223 
224  return me1;
225 }
int segmentQuality(ConstMuonRecHitPointer muon) const
#define M_PI
Definition: BFit3D.cc:3
float MuonCSCSeedFromRecHits::computeDefaultPt ( ConstMuonRecHitPointer  muon) const
private
bool MuonCSCSeedFromRecHits::createDefaultEndcapSeed ( ConstMuonRecHitPointer  last,
TrajectorySeed seed 
) const
private

Definition at line 246 of file MuonCSCSeedFromRecHits.cc.

References MuonSeedFromRecHits::createSeed(), MuonSeedPtExtractor::pT_extract(), and MuonSeedFromRecHits::thePtExtractor.

Referenced by makeDefaultSeed().

247  {
248  //float momentum = computeDefaultPt(last);
249  std::vector<double> momentum = thePtExtractor->pT_extract(last, last);
250  seed = createSeed(momentum[0],momentum[1],last);
251  return true;
252 }
const MuonSeedPtExtractor * thePtExtractor
TrajectorySeed createSeed(float ptmean, float sptmean, MuonTransientTrackingRecHit::ConstMuonRecHitPointer last) const
virtual std::vector< double > pT_extract(MuonTransientTrackingRecHit::ConstMuonRecHitPointer firstHit, MuonTransientTrackingRecHit::ConstMuonRecHitPointer secondHit) const
void MuonCSCSeedFromRecHits::makeDefaultSeed ( TrajectorySeed seed) const
private

Definition at line 228 of file MuonCSCSeedFromRecHits.cc.

References bestEndcapHit(), createDefaultEndcapSeed(), and MuonSeedFromRecHits::theRhits.

Referenced by seed().

229 {
230  //Search ME1 ...
232  // bool good=false;
233 
234  if(me1 && me1->isValid() )
235  {
236  //revert if a LogTrace or smth is necessary good =
237  createDefaultEndcapSeed(me1, seed);
238  }
239 }
MuonTransientTrackingRecHit::MuonRecHitContainer theRhits
ConstMuonRecHitPointer bestEndcapHit(const MuonRecHitContainer &endcapHits) const
bool createDefaultEndcapSeed(ConstMuonRecHitPointer last, TrajectorySeed &seed) const
bool MuonCSCSeedFromRecHits::makeSeed ( const MuonRecHitContainer hits1,
const MuonRecHitContainer hits2,
TrajectorySeed seed 
) const
private

Definition at line 98 of file MuonCSCSeedFromRecHits.cc.

References bestEndcapHit(), MuonSeedFromRecHits::createSeed(), MuonSeedPtExtractor::pT_extract(), RPCpg::pts, MuonSeedFromRecHits::thePtExtractor, and MuonSeedFromRecHits::theRhits.

Referenced by seed().

100 {
101  for ( MuonRecHitContainer::const_iterator itr1 = hits1.begin(), end1 = hits1.end();
102  itr1 != end1; ++itr1)
103  {
104  CSCDetId cscId1((*itr1)->geographicalId().rawId());
105  //int type1 = CSCChamberSpecs::whatChamberType(cscId1.station(), cscId1.ring());
106 
107  for ( MuonRecHitContainer::const_iterator itr2 = hits2.begin(), end2 = hits2.end();
108  itr2 != end2; ++itr2)
109  {
110 
111  CSCDetId cscId2((*itr2)->geographicalId().rawId());
112  //int type2 = CSCChamberSpecs::whatChamberType(cscId2.station(), cscId2.ring());
113 
114  // take the first pair that comes along. Probably want to rank them later
115  std::vector<double> pts = thePtExtractor->pT_extract(*itr1, *itr2);
116 
117  double pt = pts[0];
118  double sigmapt = pts[1];
119  double minpt = 3.;
120 
121  // if too small, probably an error. Keep trying.
122  if(fabs(pt) > minpt)
123  {
124  double maxpt = 2000.;
125  if(pt > maxpt) {
126  pt = maxpt;
127  sigmapt = maxpt;
128  }
129  if(pt < -maxpt) {
130  pt = -maxpt;
131  sigmapt = maxpt;
132  }
133 
134  // get the position and direction from the higher-quality segment
136  seed = createSeed(pt, sigmapt, bestSeg);
137 
138  //std::cout << "FITTED TIMESPT " << pt << " dphi " << dphi << " eta " << eta << std::endl;
139  return true;
140  }
141 
142  }
143  }
144 
145  // guess it didn't find one
146 //std::cout << "NOTHING FOUND ! " << std::endl;
147  return false;
148 }
MuonTransientTrackingRecHit::MuonRecHitContainer theRhits
const MuonSeedPtExtractor * thePtExtractor
static const double pts[33]
Definition: Constants.h:31
ConstMuonRecHitPointer bestEndcapHit(const MuonRecHitContainer &endcapHits) const
TrajectorySeed createSeed(float ptmean, float sptmean, MuonTransientTrackingRecHit::ConstMuonRecHitPointer last) const
virtual std::vector< double > pT_extract(MuonTransientTrackingRecHit::ConstMuonRecHitPointer firstHit, MuonTransientTrackingRecHit::ConstMuonRecHitPointer secondHit) const
bool MuonCSCSeedFromRecHits::makeSeed2 ( const MuonRecHitContainer hits1,
const MuonRecHitContainer hits2,
TrajectorySeed seed 
) const
private
TrajectorySeed MuonCSCSeedFromRecHits::seed ( ) const
virtual

Definition at line 21 of file MuonCSCSeedFromRecHits.cc.

References CSCDetId, end, makeDefaultSeed(), makeSeed(), query::result, segmentQuality(), relativeConstraints::station, and MuonSeedFromRecHits::theRhits.

Referenced by MuonSeedFinder::seeds().

22 {
24  if(theRhits.size() == 1)
25  {
26  //return createSeed(100., 100., theRhits[0]);
27  makeDefaultSeed(result);
28  return result;
29  }
30  //@@ doesn't handle overlap between ME11 and ME12 correctly
31  // sort by station
32  MuonRecHitContainer station1Hits, station2Hits, station3Hits, station4Hits;
33  for ( MuonRecHitContainer::const_iterator iter = theRhits.begin(), end = theRhits.end();
34  iter != end; ++iter)
35  {
36  int station = CSCDetId((*iter)->geographicalId().rawId()).station();
37  if(station == 1)
38  {
39  station1Hits.push_back(*iter);
40  }
41  else if(station == 2)
42  {
43  station2Hits.push_back(*iter);
44  }
45  else if(station == 3)
46  {
47  station3Hits.push_back(*iter);
48  }
49  else if(station == 4)
50  {
51  station4Hits.push_back(*iter);
52  }
53  }
54 
55  //std::cout << "Station hits " << station1Hits.size() << " "
56  // << station2Hits.size() << " "
57  // << station3Hits.size() << std::endl;
58 
59  // see whether station 2 or station 3 is better
60  MuonRecHitContainer * betterSecondHits = &station2Hits;
61  MuonRecHitContainer * notAsGoodSecondHits = &station3Hits;
62  if(!station2Hits.empty() && !station3Hits.empty())
63  {
64  // swap if station 3 has better quailty
65  if(segmentQuality(station3Hits[0]) < segmentQuality(station2Hits[0]))
66  {
67  betterSecondHits = &station3Hits;
68  notAsGoodSecondHits = &station2Hits;
69  }
70  }
71 
72  // now try to make pairs
73  if(makeSeed(station1Hits, *betterSecondHits, result))
74  {
75  return result;
76  }
77  if(makeSeed(station1Hits, *notAsGoodSecondHits, result))
78  {
79  return result;
80  }
81  if(makeSeed(station2Hits, station3Hits, result))
82  {
83  return result;
84  }
85  if(makeSeed(station1Hits, station4Hits, result))
86  {
87  return result;
88  }
89 
90 
91 
92  // no luck
93  makeDefaultSeed(result);
94  return result;
95 }
MuonTransientTrackingRecHit::MuonRecHitContainer theRhits
tuple result
Definition: query.py:137
int segmentQuality(ConstMuonRecHitPointer muon) const
#define end
Definition: vmac.h:38
void makeDefaultSeed(TrajectorySeed &seed) const
MuonTransientTrackingRecHit::MuonRecHitContainer MuonRecHitContainer
bool makeSeed(const MuonRecHitContainer &hits1, const MuonRecHitContainer &hits2, TrajectorySeed &seed) const
int MuonCSCSeedFromRecHits::segmentQuality ( ConstMuonRecHitPointer  muon) const
private

Definition at line 152 of file MuonCSCSeedFromRecHits.cc.

References CSCDetId, SiPixelRawToDigiRegional_cfi::deltaPhi, and relativeConstraints::ring.

Referenced by bestEndcapHit(), and seed().

153 {
154  int Nchi2 = 0;
155  int quality = 0;
156  int nhits = segment->recHits().size();
157  if ( segment->chi2()/(nhits*2.-4.) > 3. ) Nchi2 = 1;
158  if ( segment->chi2()/(nhits*2.-4.) > 9. ) Nchi2 = 2;
159 
160  if ( nhits > 4 ) quality = 1 + Nchi2;
161  if ( nhits == 4 ) quality = 3 + Nchi2;
162  if ( nhits == 3 ) quality = 5 + Nchi2;
163 
164  float dPhiGloDir = fabs ( deltaPhi(segment->globalPosition().phi(), segment->globalDirection().phi()) );
165 
166  if ( dPhiGloDir > .2 ) ++quality;
167  // add a penalty for being ME1A
168  if(segment->isCSC() && CSCDetId(segment->geographicalId()).ring() == 4) ++quality;
169  return quality;
170 }