Main Page | Modules | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

TMBMuon.cpp

Go to the documentation of this file.
00001 
00003 //                                                                      //
00004 //      TMBTree Muon class                                              //
00005 //                                                                      //
00007 
00008 #include "tmb_tree/TMBMuon.hpp"
00009 #include "TError.h"
00010 #include "TMath.h"
00011 #include "tmb_tree/TMBTrack.hpp"
00012 
00013 namespace {
00014   Double_t MuonMass = 0.1057;
00015 }
00016 
00017 ClassImp(TMBMuon)
00018 
00019 //_____________________________________________________________________________
00020 TMBMuon::TMBMuon()
00021     :  TMBLorentzVector(0,0,0,MuonMass, kPtEtaPhiM),
00022        _best(kCentralCorr)
00023 {
00024 }
00025 
00026 TMBMuon::TMBMuon(Double_t pT, Double_t eta, Double_t phi, Type best,
00027                  const TMBMuonType& local,   const TMBMuonType& localcorr,
00028                  const TMBMuonType& central, const TMBMuonType& centralcorr,
00029                  const TMBMuonType& global,  const TMBMuonType& smearedMC)
00030     : TMBLorentzVector(pT,eta,phi,MuonMass,kPtEtaPhiM),
00031       _local(local),
00032       _localcorr(localcorr),
00033       _central(central),
00034       _centralcorr(centralcorr),
00035       _global(global),
00036       _smearedMC(smearedMC),
00037       _best(best)
00038 {
00039 }
00040 
00041 void TMBMuon::SetLocalInfo(Int_t nhit, Int_t ndeck, Int_t region, Int_t octant,
00042                 Float_t chisqloc, Float_t sctimeA, Float_t sctimeB, Float_t sctimeC,
00043                 Float_t xA, Float_t yA, Float_t zA, Float_t bdl) 
00044 {
00045   _nhit     = nhit;
00046   _ndeck    = ndeck;
00047   _region   = region;
00048   _octant   = octant;
00049   _chisqloc = chisqloc;
00050   _sctimeA  = sctimeA;
00051   _sctimeB  = sctimeB;
00052   _sctimeC  = sctimeC;
00053   _xA       = xA;
00054   _yA       = yA;
00055   _zA       = zA;
00056   _bdl      = bdl;
00057 }
00058 
00059 void TMBMuon::SetMatchingInfo(Int_t nseg, Int_t ndof,
00060                 Float_t deltaPhi, Float_t deltaEta, Float_t deltaDrift,
00061                 Float_t chisq, Float_t zAtPca, Float_t impPar, Float_t impParSig,
00062                 Float_t err_zAtPca, Float_t err_impPar, Float_t dca, Float_t deteta,
00063                 TRef chptr, TRef vtxref)
00064 {
00065   _nseg       = nseg;
00066   _ndof       = ndof;
00067   _deltaPhi   = deltaPhi;
00068   _deltaEta   = deltaEta;
00069   _deltaDrift = deltaDrift;
00070   _chisq      = chisq;
00071   _zAtPca     = zAtPca;
00072   _impPar     = impPar;
00073   _impParSig  = impParSig;
00074   _err_zAtPca = err_zAtPca;
00075   _err_impPar = err_impPar;
00076   _dca        = dca;
00077   _deteta     = deteta;
00078   _chptr      = chptr;
00079   _vtxref     = vtxref;
00080 }
00081  
00082 void TMBMuon::SetMTCInfo(Int_t nmtc, Int_t calnLayer, Float_t etrack_best,
00083                 Float_t caleSig, Float_t calEta, Float_t calPhi, Float_t eloss)
00084 {
00085   _nmtc        = nmtc;
00086   _calnLayer   = calnLayer;
00087   _etrack_best = etrack_best;
00088   _caleSig     = caleSig;
00089   _calEta      = calEta;
00090   _calPhi      = calPhi;
00091   _eloss       = eloss;
00092 }
00093 
00094 void TMBMuon::SetIsolationInfo(Int_t nTrk5, Float_t EInCone1, Float_t EInCone15, Float_t EInCone2,
00095                 Float_t EInCone4, Float_t EInCone6,
00096                 Float_t drJet5, Float_t etTrkCone5, Float_t etHalo)
00097 {
00098   _nTrk5      = nTrk5;
00099   _EInCone1   = EInCone1;
00100   _EInCone15  = EInCone15;
00101   _EInCone2   = EInCone2;
00102   _EInCone4   = EInCone4;
00103   _EInCone6   = EInCone6;
00104   _drJet5     = drJet5;
00105   _etTrkCone5 = etTrkCone5;
00106   _etHalo     = etHalo;
00107 }
00108  
00109 void TMBMuon::SetFlags(Int_t isLoose, Int_t isMedium, Int_t isTight,
00110                 Int_t hasLocal, Int_t hasCentral, Int_t hasCal,
00111                 Int_t isMuonEventOK, Int_t isCosmic, Int_t isCosmicT)
00112 {
00113   _isLoose       = isLoose;
00114   _isMedium      = isMedium;
00115   _isTight       = isTight;
00116   _hasLocal      = hasLocal;
00117   _hasCentral    = hasCentral;
00118   _hasCal        = hasCal;
00119   _isMuonEventOK = isMuonEventOK;
00120   _isCosmic      = isCosmic;
00121   _isCosmicT     = isCosmicT;
00122 }
00123 
00124 void TMBMuon::SetExpectedHits(Int_t expWhitsA, Int_t expWhitsBC, 
00125                               Int_t expShitsA, Int_t expShitsBC)
00126 {
00127   _expWhitsA      = expWhitsA;
00128   _expWhitsBC     = expWhitsBC;
00129   _expShitsA      = expShitsA;
00130   _expShitsBC     = expShitsBC;
00131 }
00132 
00133 void TMBMuon::SetMCsmearingRand(Float_t rand)
00134 {
00135   _rand = rand;
00136 }
00137 
00138 void TMBMuon::CorrectPt(double dca)
00139 {
00140   //If muo does not have track do not try to correct
00141   if(!_hasCentral) return;
00142   const TMBTrack* trk = GetChargedTrack();
00143   if(trk) {
00144     double err_rqpt = trk->trerrs(4, 0);
00145     double err_rr = trk->trerrs(0, 0);
00146     float qopt = trk->qpt();
00147     qopt -= dca * err_rqpt / err_rr;
00148     double pTcorr = 1 / qopt;
00149     int q = 1;
00150     if(pTcorr<0) {
00151       pTcorr *= -1;
00152       q = -1;
00153     }
00154     double scale = pTcorr / trk->Pt();
00155     double corrpx = scale * trk->Px();
00156     double corrpy = scale * trk->Py();
00157     double corrpz = scale * trk->Pz();
00158     double corrE = scale * trk->E();
00159     
00160     //change TMBMuon 4-vector
00161     SetPxPyPzE(corrpx,corrpy,corrpz,corrE);
00162     //change _centralcorr 4-vector & charge
00163     TMBMuonType new_centralcorr(pTcorr,Eta(),Phi(),err_pT(),err_eta(),err_phi(),q);
00164     _centralcorr = new_centralcorr;
00165     //Set best muon info to CentralCorr
00166     _best = TMBMuon::kCentralCorr; 
00167   }
00168 
00169 }
00170 
00171 Int_t TMBMuon::charge() const
00172 {
00173   switch(_best) {
00174     case kLocalCorr: return _localcorr.charge();
00175     case kCentralCorr: return _centralcorr.charge();
00176     case kSmearedMC: return _smearedMC.charge();
00177     default: Error("TMBMuon::charge","bad best muon type");
00178   }
00179   return 0;
00180 }
00181 
00182 Double_t TMBMuon::tlm() const
00183 {
00184   switch(_best) {
00185     case kLocalCorr: return _localcorr.tlm();
00186     case kCentralCorr: return _centralcorr.tlm();
00187     case kSmearedMC: return _smearedMC.tlm();
00188     default: Error("TMBMuon::tlm","bad best muon type");
00189   }
00190   return 0;
00191 }
00192 
00193 Double_t TMBMuon::err_phi() const
00194 {
00195   switch(_best) {
00196     case kLocalCorr: return _localcorr.err_phi();
00197     case kCentralCorr: return _centralcorr.err_phi();
00198     case kSmearedMC: return _smearedMC.err_phi();
00199     default: Error("TMBMuon::err_phi","bad best muon type");
00200   }
00201   return 0;
00202 }
00203 
00204 Double_t TMBMuon::err_eta() const
00205 {
00206   switch(_best) {
00207     case kLocalCorr: return _localcorr.err_eta();
00208     case kCentralCorr: return _centralcorr.err_eta();
00209     case kSmearedMC: return _smearedMC.err_eta();
00210     default: Error("TMBMuon::err_eta","bad best muon type");
00211   }
00212   return 0;
00213 }
00214 
00215 Double_t TMBMuon::err_pT() const
00216 {
00217   switch(_best) {
00218     case kLocalCorr: return _localcorr.err_pT();
00219     case kCentralCorr: return _centralcorr.err_pT();
00220     case kSmearedMC: return _smearedMC.err_pT();
00221     default: Error("TMBMuon::err_pT","bad best muon type");
00222   }
00223   return 0;
00224 }
00225 
00226 Int_t TMBMuon::wireHitsA() const
00227 {
00228   return (_nhit % 10);
00229 }
00230 
00231 Int_t TMBMuon::wireHitsB() const
00232 {
00233   return (_nhit / 10)%10;
00234 }
00235 
00236 Int_t TMBMuon::wireHitsC() const
00237 {
00238   return (_nhit / 100)%10;
00239 }
00240 
00241 Int_t TMBMuon::wireHitsBC() const
00242 {
00243   return (wireHitsB() + wireHitsC());
00244 }
00245 
00246 int TMBMuon::scintHitsA() const {
00247   return (_nhit / 1000)%10;
00248 }
00249 
00250 int TMBMuon::scintHitsBC() const {
00251   return scintHitsB() + scintHitsC();
00252 }
00253 
00254 int TMBMuon::scintHitsB() const {
00255   return (_nhit/10000)%10;
00256 }
00257 
00258 int TMBMuon::scintHitsC() const {
00259   return (_nhit/100000)%10;
00260 }
00261 
00262 Double_t TMBMuon::GetEtaDetector(Double_t eta, Double_t z, Double_t rdet) const
00263 {
00264   float z0 = z + rdet*sinh(eta);
00265   float temp = z0/rdet + sqrt(z0*z0/rdet/rdet + 1.);
00266   return (temp>0?log(temp):eta);
00267 }
00268 
00269 Double_t TMBMuon::chisqProb() const
00270 {
00271   return TMath::Prob(_chisq,_ndof);
00272 }
00273 
00274 //______________________________________________________________________________

Generated on Tue Mar 28 10:13:05 2006 for CAF by doxygen 1.3.4