ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/DataTree/interface/Muon.h
Revision: 1.27
Committed: Tue Mar 3 18:02:16 2009 UTC (16 years, 2 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_008pre2, Mit_008pre1
Changes since 1.26: +13 -1 lines
Log Message:
Added explicit muon algo flags

File Contents

# User Rev Content
1 loizides 1.1 //--------------------------------------------------------------------------------------------------
2 bendavid 1.27 // $Id: Muon.h,v 1.26 2009/02/26 17:06:24 bendavid Exp $
3 loizides 1.1 //
4     // Muon
5 loizides 1.23 //
6 pharris 1.22 // Classified into 3 Types
7 loizides 1.23 // Standalone : Muon fit from hits in the muon chambers
8     // Tracker : Tracker matched track to muon chambers with segments
9     // Global : Combined track and muon chambers fit
10 loizides 1.1 //
11 loizides 1.23 // In the muon class all three muon classes exist and can be determined by checking
12     // whether a fit track exists for such a Muon (eg HasTrackerTrk() == kTRUE). When
13     // BestTrk function is called the global fit is returned, if that does not
14     // exist the tracker fit is returned upon that failure the standalone muon
15     // is subsequently returned. To consult more see:
16 pharris 1.22 // http://cmsdoc.cern.ch/cms/Physics/muon/MPOG/Notes/MuonReco.pdf
17     //
18     // Quality Varaibles for Selection
19     // Isolation : decomposed to IsoRNNXXXXX
20     // NN = 03,05 to denote R =0.3,0.5 in Isolation Cone
21 loizides 1.23 // XXXXX = SumPt - Sum of Pt of Tracks in Cone (using all Pt Tracks)
22     // XXXXX = EmEt - Sum of Et of Em component of Calo Towers (Veto=0.08)
23     // XXXXX = HadEt - Sum of Et of Had component of Calo Towers (Veto=0.1)
24     // XXXXX = HoEt - Sum of Pt of Ho component of Calo Towers (Veto=0.1)
25     // XXXXX = NTrk - Number of Tracks within Cone (using all Pt Tracks)
26     // XXXXX = NJet - Sum of Jets inside Cone
27     //
28 pharris 1.22 // Muon Quality Variables
29     // Extracted from the Muon Tracking Associator
30 loizides 1.23 // For more se https://twiki.cern.ch/twiki/bin/view/CMS/TrackAssociator
31 pharris 1.22 // Energy Variables : Energy within (5x5 Ecal Crystal/Hcal/Ho) along Track
32 loizides 1.23 // using calo towers
33     // S9 Energy Variables : Energy using reconstructed hits calo towers default
34 pharris 1.22 // Segment Variables :
35     // Segment variables are stored in array of 8:
36 loizides 1.23 // 0-3: Correspond to segments in 4 DT chambers in->outward(3 has no Y res)
37     // 4-7: Correspond to segments in 4 CSC chambers in->out
38 pharris 1.22 // If value undetermined 999999 is returned.
39     // Variables:
40 loizides 1.23 // DX,DY,PullX,PullY: Uncertainties/Pulls of propagated track
41     // with respect to local muon segment
42     // TrackDist,TrackDistErr: Summed Dist/Err (in X,Y) of segment with respect
43     // to propagated track
44     // NSegments : Number of segments in muon using Segment+Track Arbitration
45     // NChambers : Number of muon chambers traversed in propagated track
46     // LastHit : Returns farest (from center) station with a recorded segment
47     // LastStation : Returns farest station using Segment+Track Arbitration
48     //
49 pharris 1.22 // Muon Id Methods: Please see Muon Id Note(as of now unpublished):
50     // https://www.cmsaf.mit.edu/twiki/pub/CmsHep/HepWAnalysis/MuonID-ingo.pdf
51 loizides 1.23 // TMOneStation : Returns bool whether muon passes "Tracker Muon One StationId"
52     // -Matching criteria for one of all segments matched to muon
53     // TMLastStation : Returns bool whether muon passes "LastStation Id" criteria
54     // -Matching criteria for last most segment
55 loizides 1.1 //
56 loizides 1.16 // Authors: J.Bendavid, C.Loizides, C.Paus, P.Harris
57 loizides 1.1 //--------------------------------------------------------------------------------------------------
58 loizides 1.6
59 loizides 1.16 #ifndef MITANA_DATATREE_MUON_H
60     #define MITANA_DATATREE_MUON_H
61 loizides 1.8
62 loizides 1.16 #include "MitAna/DataTree/interface/Track.h"
63 bendavid 1.11 #include "MitAna/DataTree/interface/ChargedParticle.h"
64 pharris 1.15
65     namespace mithep {
66     class Muon : public ChargedParticle {
67 loizides 1.1 public:
68 loizides 1.20 Muon();
69 loizides 1.18
70     enum EClassType {
71     kNone, //no track assigned
72     kGlobal, //"Global"
73     kTrackerOnly, //"TrackerOnly"
74     kSta, //"Standalone"
75     kAny //any "best" of the above
76     };
77 bendavid 1.2
78 loizides 1.23 const Track *BestTrk() const;
79 loizides 1.25 const Track *GlobalTrk() const { return fGlobalTrkRef.Obj(); }
80     const Track *StandaloneTrk() const { return fStaTrkRef.Obj(); }
81     const Track *TrackerTrk() const { return fTrkTrkRef.Obj(); }
82     const Track *Trk() const { return BestTrk(); }
83     Double_t EmEnergy() const { return fEmEnergy; }
84     Double_t EmS9Energy() const { return fEmS9Energy; }
85 loizides 1.20 Double_t GetDX(Int_t iStation) const;
86     Double_t GetDY(Int_t iStation) const;
87     Double_t GetPullX(Int_t iStation) const;
88     Double_t GetPullY(Int_t iStation) const;
89     Double_t GetTrackDist(Int_t iStation) const;
90     Double_t GetTrackDistErr(Int_t iStation) const;
91     Int_t GetNSegments(Int_t iStation) const;
92     Bool_t Has(EClassType type) const;
93 loizides 1.23 Bool_t HasTrk() const;
94 loizides 1.25 Bool_t HasGlobalTrk() const { return fGlobalTrkRef.IsValid(); }
95     Bool_t HasStandaloneTrk() const { return fStaTrkRef.IsValid(); }
96     Bool_t HasTrackerTrk() const { return fTrkTrkRef.IsValid(); }
97 loizides 1.23 Double_t HadEnergy() const { return fHadEnergy; }
98     Double_t HadS9Energy() const { return fHadS9Energy; }
99     Double_t HoEnergy() const { return fHoEnergy; }
100     Double_t HoS9Energy() const { return fHoS9Energy; }
101 loizides 1.20 EClassType Is() const;
102 bendavid 1.27 Bool_t IsGlobalMuon() const { return fIsGlobalMuon; }
103     Bool_t IsTrackerMuon() const { return fIsTrackerMuon; }
104     Bool_t IsStandaloneMuon() const { return fIsStandaloneMuon; }
105     Bool_t IsCaloMuon() const { return fIsCaloMuon; }
106 loizides 1.23 Double_t IsoR03SumPt() const { return fIsoR03SumPt; }
107     Double_t IsoR03EmEt() const { return fIsoR03EmEt; }
108     Double_t IsoR03HadEt() const { return fIsoR03HadEt; }
109     Double_t IsoR03HoEt() const { return fIsoR03HoEt; }
110     Int_t IsoR03NTracks() const { return fIsoR03NTracks; }
111     Int_t IsoR03NJets() const { return fIsoR03NJets; }
112     Double_t IsoR05SumPt() const { return fIsoR05SumPt; }
113     Double_t IsoR05EmEt() const { return fIsoR05EmEt; }
114     Double_t IsoR05HadEt() const { return fIsoR05HadEt; }
115     Double_t IsoR05HoEt() const { return fIsoR05HoEt; }
116     Int_t IsoR05NTracks() const { return fIsoR05NTracks; }
117     Int_t IsoR05NJets() const { return fIsoR05NJets; }
118     Int_t NChambers() const { return fNTraversedChambers; }
119     Int_t NSegments() const { return fStationMask.NBitsSet(); }
120 loizides 1.20 Int_t LastHit() const;
121 loizides 1.18 Int_t LastStation(Double_t iMaxD, Double_t iMaxP) const;
122     Int_t LastStation(Int_t iMax=8) const;
123 loizides 1.25 EObjType ObjType() const { return kMuon; }
124 loizides 1.18 Bool_t PromptTight(EClassType type) const;
125 loizides 1.23 Bool_t StationBit(Int_t bit) const { return fStationMask.TestBit(bit); }
126 loizides 1.18 Bool_t TMLastStation(Double_t iDYMin = 3., Double_t iPYMin = 3.,
127     Double_t iDXMin = 3., Double_t iPXMin = 3.,Int_t iN = 2) const;
128     Bool_t TMOneStation(Double_t iDYMin = 3., Double_t iPYMin = 3.,
129     Double_t iDXMin = 3., Double_t iPXMin = 3.,Int_t iN = 1) const;
130 bendavid 1.26 void SetGlobalTrk(const Track *t) { fGlobalTrkRef = t; ClearMom(); ClearCharge(); }
131     void SetStandaloneTrk(const Track *t) { fStaTrkRef = t; ClearMom(); ClearCharge(); }
132     void SetTrackerTrk(const Track *t) { fTrkTrkRef = t; ClearMom(); ClearCharge(); }
133 loizides 1.23 void SetDX(Int_t iStation, Double_t iDX);
134     void SetDY(Int_t iStation, Double_t iDY);
135 loizides 1.25 void SetEmEnergy(Double_t EmEnergy) { fEmEnergy = EmEnergy; }
136     void SetEmS9Energy(Double_t EmS9Energy) { fEmS9Energy = EmS9Energy; }
137     void SetHadEnergy(Double_t HadEnergy) { fHadEnergy = HadEnergy; }
138     void SetHadS9Energy(Double_t HadS9Energy) { fHadS9Energy = HadS9Energy; }
139     void SetHoEnergy(Double_t HoEnergy) { fHoEnergy = HoEnergy; }
140     void SetHoS9Energy(Double_t HoS9Energy) { fHoS9Energy = HoS9Energy; }
141 bendavid 1.27 void SetIsGlobalMuon(Bool_t b) { fIsGlobalMuon = b; }
142     void SetIsTrackerMuon(Bool_t b) { fIsTrackerMuon = b; }
143     void SetIsStandaloneMuon(Bool_t b) { fIsStandaloneMuon = b; }
144     void SetIsCaloMuon(Bool_t b) { fIsCaloMuon = b; }
145 loizides 1.25 void SetIsoR03SumPt(Double_t isoR03SumPt) { fIsoR03SumPt = isoR03SumPt; }
146     void SetIsoR03EmEt(Double_t isoR03EmEt) { fIsoR03EmEt = isoR03EmEt; }
147     void SetIsoR03HadEt(Double_t isoR03HadEt) { fIsoR03HadEt = isoR03HadEt; }
148     void SetIsoR03HoEt(Double_t isoR03HoEt) { fIsoR03HoEt = isoR03HoEt; }
149     void SetIsoR03NTracks(Int_t isoR03NTracks) { fIsoR03NTracks = isoR03NTracks; }
150     void SetIsoR03NJets(Int_t isoR03NJets) { fIsoR03NJets = isoR03NJets; }
151     void SetIsoR05SumPt(Double_t isoR05SumPt) { fIsoR05SumPt = isoR05SumPt; }
152     void SetIsoR05EmEt(Double_t isoR05EmEt) { fIsoR05EmEt = isoR05EmEt; }
153     void SetIsoR05HadEt(Double_t isoR05HadEt) { fIsoR05HadEt = isoR05HadEt; }
154     void SetIsoR05HoEt(Double_t isoR05HoEt) { fIsoR05HoEt = isoR05HoEt; }
155     void SetIsoR05NTracks(Int_t isoR05NTracks) { fIsoR05NTracks = isoR05NTracks; }
156     void SetIsoR05NJets(Int_t isoR05NJets) { fIsoR05NJets = isoR05NJets; }
157     void SetNChambers(Int_t iNTraCh) { fNTraversedChambers = iNTraCh; }
158 loizides 1.23 void SetNSegments(Int_t iStation, Int_t NSegments);
159 loizides 1.16 void SetPullX(Int_t iStation, Double_t iPullX);
160     void SetPullY(Int_t iStation, Double_t iPullY);
161 loizides 1.25 void SetStationMask(UInt_t iStMask) { fStationMask.SetBits(iStMask); }
162 loizides 1.16 void SetTrackDist(Int_t iStation, Double_t iDist);
163     void SetTrackDistErr(Int_t iStation, Double_t iDistErr);
164 pharris 1.15
165 loizides 1.8 protected:
166 loizides 1.25 Double_t GetMass() const { return 105.658369e-3; }
167    
168     Ref<Track> fGlobalTrkRef; //global combined track reference
169     Ref<Track> fStaTrkRef; //standalone muon track reference
170     Ref<Track> fTrkTrkRef; //tracker track reference
171 loizides 1.16 Double32_t fIsoR03SumPt; //isolation size R=0.3 sum pt
172     Double32_t fIsoR03EmEt; //isolation size R=0.3 em trans energy
173     Double32_t fIsoR03HadEt; //isolation size R=0.3 had trans energy
174     Double32_t fIsoR03HoEt; //isolation size R=0.3 ho trans energy
175     Int_t fIsoR03NTracks; //isolation size R=0.3 number of tracks
176     Int_t fIsoR03NJets; //isolation size R=0.3 number of jets
177     Double32_t fIsoR05SumPt; //isolation size R=0.5 sum pt
178     Double32_t fIsoR05EmEt; //isolation size R=0.5 em trans energy
179     Double32_t fIsoR05HadEt; //isolation size R=0.5 had trans energy
180     Double32_t fIsoR05HoEt; //isolation size R=0.5 ho trans energy
181     Int_t fIsoR05NTracks; //isolation size R=0.5 number of tracks
182     Int_t fIsoR05NJets; //isolation size R=0.5 number of jets
183 loizides 1.18 Double32_t fEmEnergy; //energy deposit in ecal
184     Double32_t fHadEnergy; //energy deposit in hcal
185     Double32_t fHoEnergy; //energy deposit in outer hcal
186 loizides 1.23 Double32_t fEmS9Energy; //energy deposit in 3x3 ecal
187     Double32_t fHadS9Energy; //energy deposit in 3x3 hcal
188     Double32_t fHoS9Energy; //energy deposit in 3x3 outer hcal
189 loizides 1.16 Int_t fNTraversedChambers; //number of tranversed chambers
190 loizides 1.18 BitMask8 fStationMask; //bitmap of station with tracks, 0-3 DT, 4-7 CSCs
191 loizides 1.16 Double32_t fDX[8]; //uncertainty in x in given muon chamber
192     Double32_t fDY[8]; //uncertainty in y in given muon chamber
193     Double32_t fPullX[8]; //pull in x in given muon chamber
194     Double32_t fPullY[8]; //pull in y in given muon chamber
195 loizides 1.18 Double32_t fTrackDist[8]; //dist. to track in trans. plane in given muon chamber
196     Double32_t fTrackDistErr[8]; //error of dist. to track in trans. plane in chamber
197     Int_t fNSegments[8]; //number of segments in given muon chamber
198 bendavid 1.27 Bool_t fIsGlobalMuon; //GlobalMuon algo flag
199     Bool_t fIsTrackerMuon; //TrackerMuon algo flag
200     Bool_t fIsStandaloneMuon; //Standalone muon algo flag
201     Bool_t fIsCaloMuon; //CaloMuon algo flag
202 loizides 1.16
203 loizides 1.7 ClassDef(Muon, 1) // Muon class
204 loizides 1.1 };
205 loizides 1.4 }
206 loizides 1.8
207 loizides 1.9 //--------------------------------------------------------------------------------------------------
208 loizides 1.10 inline const mithep::Track *mithep::Muon::BestTrk() const
209     {
210     // Return "best" track.
211    
212 loizides 1.23 if (HasGlobalTrk())
213 loizides 1.10 return GlobalTrk();
214 loizides 1.23 else if (HasTrackerTrk())
215 bendavid 1.17 return TrackerTrk();
216 loizides 1.23 else if (HasStandaloneTrk())
217 loizides 1.10 return StandaloneTrk();
218    
219 loizides 1.20 Error("BestTrk", "No track reference found, returning NULL pointer.");
220 loizides 1.10 return 0;
221     }
222    
223     //--------------------------------------------------------------------------------------------------
224 loizides 1.16 inline Double_t mithep::Muon::GetDX(Int_t iStation) const
225     {
226     // Return uncertainty in x in given chamber.
227    
228     assert(iStation >= 0 && iStation < 8);
229     return fDX[iStation];
230     }
231    
232     //--------------------------------------------------------------------------------------------------
233     inline Double_t mithep::Muon::GetDY(Int_t iStation) const
234     {
235     // Return uncertainty in y in given chamber.
236    
237     assert(iStation >= 0 && iStation < 8);
238     return fDY[iStation];
239     }
240    
241     //--------------------------------------------------------------------------------------------------
242     inline Double_t mithep::Muon::GetPullX(Int_t iStation) const
243     {
244     // Return pull in x in given chamber.
245    
246     assert(iStation >= 0 && iStation < 8);
247     return fPullX[iStation];
248     }
249    
250     //--------------------------------------------------------------------------------------------------
251     inline Double_t mithep::Muon::GetPullY(Int_t iStation) const
252     {
253     // Return pull in y in given chamber.
254    
255     assert(iStation >= 0 && iStation < 8);
256     return fPullY[iStation];
257     }
258    
259     //--------------------------------------------------------------------------------------------------
260     inline Double_t mithep::Muon::GetTrackDist(Int_t iStation) const
261     {
262     // Return track distance in given chamber.
263    
264     assert(iStation >= 0 && iStation < 8);
265     return fTrackDist[iStation];
266     }
267    
268     //--------------------------------------------------------------------------------------------------
269     inline Double_t mithep::Muon::GetTrackDistErr(Int_t iStation) const
270     {
271     // Return error of track distance in given chamber.
272    
273     assert(iStation >= 0 && iStation < 8);
274     return fTrackDistErr[iStation];
275     }
276    
277     //--------------------------------------------------------------------------------------------------
278     inline Int_t mithep::Muon::GetNSegments(Int_t iStation) const
279     {
280     // Return number of segments in chamber.
281    
282     assert(iStation >= 0 && iStation < 8);
283     return fNSegments[iStation];
284     }
285    
286     //--------------------------------------------------------------------------------------------------
287 loizides 1.18 inline Bool_t mithep::Muon::Has(EClassType type) const
288     {
289     // Return true if the muon has a track of given class.
290    
291     switch (type) {
292     case kAny:
293 loizides 1.23 if (HasTrk())
294 loizides 1.18 return kTRUE;
295     break;
296     case kGlobal:
297 loizides 1.23 if (HasGlobalTrk())
298 loizides 1.18 return kTRUE;
299     break;
300     case kTrackerOnly:
301 loizides 1.23 if (HasTrackerTrk())
302 loizides 1.18 return kTRUE;
303     break;
304     case kSta:
305 loizides 1.23 if (HasStandaloneTrk())
306 loizides 1.18 return kTRUE;
307     break;
308     case kNone:
309 loizides 1.23 if (!HasTrk())
310 loizides 1.18 return kTRUE;
311     break;
312     default:
313     break;
314     }
315    
316     return kFALSE;
317     }
318    
319     //--------------------------------------------------------------------------------------------------
320 loizides 1.23 inline Bool_t mithep::Muon::HasTrk() const
321     {
322     // Return true if the muon has assigned any kind of track.
323    
324     return (HasGlobalTrk() || HasTrackerTrk() || HasStandaloneTrk());
325     }
326    
327     //--------------------------------------------------------------------------------------------------
328 loizides 1.18 inline mithep::Muon::EClassType mithep::Muon::Is() const
329     {
330     // Return the "best" classification of the muon according to the assigned tracks.
331    
332 loizides 1.23 if (HasGlobalTrk())
333 loizides 1.18 return kGlobal;
334 loizides 1.23 else if (HasTrackerTrk())
335 loizides 1.18 return kTrackerOnly;
336 loizides 1.23 else if (HasStandaloneTrk())
337 loizides 1.18 return kSta;
338    
339     return kNone;
340     }
341    
342     //--------------------------------------------------------------------------------------------------
343     inline Int_t mithep::Muon::LastHit() const
344     {
345     // Return the last hit, or -1 if no one found.
346    
347     Int_t lId = -1;
348     for (Int_t i0 = 0; i0 < 8; ++i0) {
349     if (GetDX(i0) < 99999 || GetDY(i0) < 99999)
350     lId = i0;
351     }
352     return lId;
353     }
354    
355     //--------------------------------------------------------------------------------------------------
356     inline Int_t mithep::Muon::LastStation(Int_t iMax) const
357     {
358     // Return the last station, or -1 of no one found.
359    
360     Int_t lId = -1;
361     if(TMath::Abs(iMax) > 8)
362     iMax = 8;
363     for (Int_t i0 = 0; i0 < iMax; ++i0) {
364     if (StationBit(i0) && ((lId % 4) < (i0 % 4)))
365     lId = i0;
366     }
367     return lId;
368     }
369    
370     //--------------------------------------------------------------------------------------------------
371     inline Int_t mithep::Muon::LastStation(Double_t iMaxD, Double_t iMaxP) const
372     {
373     // Return the last station for given deviation and relative error, or -1 if no one found.
374    
375     Int_t lId = -1;
376     for (Int_t i0 = 0; i0 < 8; ++i0) {
377     if ((lId % 4) > (i0 % 4))
378     continue;
379     if (GetTrackDist(i0) < iMaxD &&
380     GetTrackDist(i0)/GetTrackDistErr(i0) < iMaxP)
381     lId = i0;
382     }
383     return lId;
384     }
385    
386     //--------------------------------------------------------------------------------------------------
387     inline Bool_t mithep::Muon::PromptTight(EClassType type) const
388     {
389     // Return whether track for given class matches tight quality criteria.
390    
391     const mithep::Track *lTrack = 0;
392     switch (type) {
393     case kAny:
394     lTrack = BestTrk();
395     break;
396     case kGlobal:
397     lTrack = GlobalTrk();
398     break;
399     case kTrackerOnly:
400     lTrack = TrackerTrk();
401     break;
402     case kSta:
403     lTrack = StandaloneTrk();
404     break;
405     default:
406     break;
407     }
408    
409     if (lTrack == 0)
410     return kFALSE;
411     if (lTrack->NHits() < 11)
412     return kFALSE;
413     if (lTrack->Chi2()/lTrack->Ndof() > 10.)
414     return kFALSE;
415     if (lTrack->D0() > 0.2)
416     return kFALSE;
417     if ((LastHit() % 4) == 0)
418     return kFALSE;
419     return kTRUE;
420     }
421    
422     //--------------------------------------------------------------------------------------------------
423     inline Bool_t mithep::Muon::TMOneStation(Double_t iDYMin, Double_t iPYMin,
424     Double_t iDXMin, Double_t iPXMin, Int_t iN) const
425     {
426     // Check if the muon is matched to at least one station (chamber).
427    
428     if (NSegments() < iN)
429     return kFALSE; //second last one
430    
431     Bool_t pGoodX = kFALSE;
432 ceballos 1.19 Bool_t pBadY = kFALSE;
433 loizides 1.18 for (Int_t i0 = 0; i0 < 8; ++i0) {
434     if ((TMath::Abs(GetDX(i0)) < iDXMin ||
435     TMath::Abs(GetPullX(i0)) < iPXMin))
436     pGoodX = kTRUE;
437     if (pGoodX &&
438     (TMath::Abs(GetDY(i0)) < iDYMin ||
439     TMath::Abs(GetPullY(i0)) < iPYMin))
440     return kTRUE;
441     if (TMath::Abs(GetDY(i0)) < 999999)
442     pBadY = kTRUE;
443     if (i0 == 3 && pGoodX && !pBadY)
444     return kTRUE;
445     }
446     return kFALSE;
447     }
448    
449     //--------------------------------------------------------------------------------------------------
450     inline Bool_t mithep::Muon::TMLastStation(Double_t iDYMin, Double_t iPYMin,
451     Double_t iDXMin, Double_t iPXMin, Int_t iN) const
452     {
453     // Check if the muon is matched to its last station (chamber).
454    
455     if (NSegments() < iN)
456     return kFALSE; //second last one
457    
458     Int_t lLast = LastStation(-3.,-3.); // last required station
459     if (lLast < 0)
460     return kFALSE;
461     if (GetDX(lLast) > 9999.)
462     return kFALSE;
463     lLast = LastStation(); //no requirements
464     if (lLast < 0)
465     return kFALSE;
466     if (!(TMath::Abs(GetDX(lLast)) < iDXMin ||
467     TMath::Abs(GetPullX(lLast)) < iPXMin))
468     return kFALSE;
469     if (lLast == 3)
470     lLast = LastStation(3);
471     if (lLast < 0)
472     return kFALSE;
473     if (!(TMath::Abs(GetDY(lLast)) < iDYMin ||
474     TMath::Abs(GetPullY(lLast)) < iPYMin))
475     return kFALSE;
476     return kTRUE;
477     }
478    
479     //--------------------------------------------------------------------------------------------------
480 loizides 1.16 inline void mithep::Muon::SetDX(Int_t iStation, Double_t iDX)
481     {
482     // Return uncertainty in x in given chamber.
483    
484     assert(iStation >= 0 && iStation < 8);
485     fDX[iStation] = iDX;
486     }
487    
488     //--------------------------------------------------------------------------------------------------
489     inline void mithep::Muon::SetDY(Int_t iStation, Double_t iDY)
490     {
491     // Return uncertainty in y in given chamber.
492    
493     assert(iStation >= 0 && iStation < 8);
494     fDY[iStation] = iDY;
495     }
496    
497     //--------------------------------------------------------------------------------------------------
498     inline void mithep::Muon::SetPullX(Int_t iStation, Double_t iPullX)
499     {
500     // Set pull in x in given chamber.
501    
502     assert(iStation >= 0 && iStation < 8);
503     fPullX[iStation] = iPullX;
504     }
505    
506     //--------------------------------------------------------------------------------------------------
507     inline void mithep::Muon::SetPullY(Int_t iStation, Double_t iPullY)
508     {
509     // Set pull in y in given chamber.
510    
511     assert(iStation >= 0 && iStation < 8);
512     fPullY[iStation] = iPullY;
513     }
514    
515     //--------------------------------------------------------------------------------------------------
516     inline void mithep::Muon::SetTrackDist(Int_t iStation, Double_t iDist)
517 loizides 1.23
518 loizides 1.16 {
519     // Set track distance in given chamber.
520    
521     assert(iStation >= 0 && iStation < 8);
522     fTrackDist[iStation] = iDist;
523     }
524    
525     //--------------------------------------------------------------------------------------------------
526     inline void mithep::Muon::SetTrackDistErr(Int_t iStation, Double_t iDistErr)
527     {
528     // Set error of track distance in given chamber.
529 pharris 1.15
530 loizides 1.16 assert(iStation >= 0 && iStation < 8);
531     fTrackDistErr[iStation] = iDistErr;
532     }
533 pharris 1.15
534 loizides 1.16 //--------------------------------------------------------------------------------------------------
535     inline void mithep::Muon::SetNSegments(Int_t iStation, Int_t NSegments)
536     {
537     // Set number of segments in chamber.
538 pharris 1.15
539 loizides 1.16 assert(iStation >= 0 && iStation < 8);
540     fNSegments[iStation] = NSegments;
541     }
542     #endif
543 loizides 1.18
544    
545    
546    
547