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

TMBJet.cpp

Go to the documentation of this file.
00001 #include "tmb_tree/TMBJet.hpp"
00002 #include <iostream>
00003 #include "TRandom.h"//for btag check
00004 #include "TTree.h"
00005 #include "TBranch.h"
00006 
00007 ClassImp(TMBJet);
00008 
00009 TMBJet::TMBJet()
00010 {
00011 }
00012 
00013 TMBJet::TMBJet      (Float_t E, Float_t pT,   Float_t phi,  Float_t eta)
00014 {
00015     Set0   (E, pT, phi, eta);
00016 }
00017 
00018 TMBJet::~TMBJet()
00019 {
00020 }
00021 
00022 void TMBJet::Set0    (Float_t E, Float_t pT,   Float_t phi,  Float_t eta)
00023 {
00024 
00025     SetPtEtaPhiE(pT, eta, phi, E);
00026 
00027     //  alwyas initialize corrections to 0 
00028     _jes_C=0.0;
00029     _jesMU_C=0.0;
00030     _jes_dC_stat=0.0;
00031     _jesMU_dC_stat=0.0;
00032     _jes_dC_stat_up=0.0;
00033     _jesMU_dC_stat_up=0.0;
00034     _jes_dC_stat_down=0.0;
00035     _jesMU_dC_stat_down=0.0;
00036     _jes_dC_sys=0.0;
00037     _jesMU_dC_sys=0.0;
00038     _jes_dC_sys_up=0.0;
00039     _jesMU_dC_sys_up=0.0;
00040     _jes_dC_sys_down=0.0;
00041     _jesMU_dC_sys_down=0.0;
00042     _jes_metC=0.0;
00043     _jesMU_metC=0.0;
00044     _jes_metdC_stat=0.0;
00045     _jesMU_metdC_stat=0.0;
00046     _jes_metdC_sys=0.0;
00047     _jesMU_metdC_sys=0.0;
00048     _smear_coeff = 1.0;
00049     _smear_coeffMU = 1.0;
00050     _isGood = 1;
00051     _isL1Conf = 0;
00052     _isBad = 0;
00053     _isNoise = 0;
00054     _isEM = 0;
00055     _hasMU = 0;
00056     _isSmeared = 0;
00057     _isSmearedMU = 0;
00058     _actas = 0;
00059 
00060     ClearAllBTags();
00061 }
00062 
00063 void TMBJet::ActAsUnCorrected() const
00064 {
00065   if (_actas==kUnCorrected) return;
00066   const_cast<TMBJet&>(*this).SetPtEtaPhiE(_uncorrected.Pt(), _uncorrected.Eta(), _uncorrected.Phi(), _uncorrected.E());
00067   _actas = kUnCorrected;
00068   return;
00069 }
00070 
00071 void TMBJet::ActAsJESCorrected() const
00072 {
00073   if (_actas==kJESCorrected) return;
00074   const_cast<TMBJet&>(*this).SetPEtaPhiE(_uncorrected.P()*_jes_C, _uncorrected.Eta(), _uncorrected.Phi(), _uncorrected.E()*_jes_C);
00075   _actas = kJESCorrected;
00076   return;
00077 }
00078 
00079 void TMBJet::ActAsJESCorrectedShiftedPlus() const
00080 {
00081   if (_actas==kJESCorrectedShiftedPlus) return;
00082   const_cast<TMBJet&>(*this).SetPEtaPhiE(_uncorrected.P()*(_jes_C+sqrt(_jes_dC_sys_up*_jes_dC_sys_up+_jes_dC_stat_up*_jes_dC_stat_up)),
00083                  _uncorrected.Eta(), _uncorrected.Phi(), 
00084                  _uncorrected.E()*(_jes_C+sqrt(_jes_dC_sys_up*_jes_dC_sys_up+_jes_dC_stat_up*_jes_dC_stat_up)));
00085   _actas = kJESCorrectedShiftedPlus;
00086   return;
00087 }
00088 
00089 void TMBJet::ActAsJESCorrectedShiftedMinus() const
00090 {
00091   if (_actas==kJESCorrectedShiftedMinus) return;
00092   const_cast<TMBJet&>(*this).SetPEtaPhiE(_uncorrected.P()*(_jes_C-sqrt(_jes_dC_sys_down*_jes_dC_sys_down+_jes_dC_stat_down*_jes_dC_stat_down)), 
00093                 _uncorrected.Eta(), _uncorrected.Phi(), 
00094                 _uncorrected.E()*(_jes_C-sqrt(_jes_dC_sys_down*_jes_dC_sys_down+_jes_dC_stat_down*_jes_dC_stat_down)));
00095   _actas = kJESCorrectedShiftedMinus;
00096   return;
00097 }
00098 
00099 void TMBJet::ActAsJESMUCorrected() const
00100 {
00101   if (_actas==kJESMUCorrected) return;
00102   const_cast<TMBJet&>(*this).SetPEtaPhiE(_uncorrected.P()*_jesMU_C, _uncorrected.Eta(), _uncorrected.Phi(), _uncorrected.E()*_jesMU_C);
00103   _actas = kJESMUCorrected;
00104   return;
00105 }
00106 
00107 void TMBJet::ActAsJESMUCorrectedShiftedPlus() const
00108 {
00109   if (_actas==kJESMUCorrectedShiftedPlus) return;
00110   const_cast<TMBJet&>(*this).SetPEtaPhiE(_uncorrected.P()*(_jesMU_C+sqrt(_jesMU_dC_sys_up*_jesMU_dC_sys_up+_jesMU_dC_stat_up*_jesMU_dC_stat_up)),
00111                                          _uncorrected.Eta(), _uncorrected.Phi(), 
00112                                          _uncorrected.E()*(_jesMU_C+sqrt(_jesMU_dC_sys_up*_jesMU_dC_sys_up+_jesMU_dC_stat_up*_jesMU_dC_stat_up)));
00113   _actas = kJESMUCorrectedShiftedPlus;
00114   return;
00115 }
00116 
00117 void TMBJet::ActAsJESMUCorrectedShiftedMinus() const
00118 {
00119   if (_actas==kJESMUCorrectedShiftedMinus) return;
00120   const_cast<TMBJet&>(*this).SetPEtaPhiE(_uncorrected.P()*(_jesMU_C-sqrt(_jesMU_dC_sys_down*_jesMU_dC_sys_down+_jesMU_dC_stat_down*_jesMU_dC_stat_down)), 
00121                                          _uncorrected.Eta(), _uncorrected.Phi(), 
00122                                          _uncorrected.E()*(_jesMU_C-sqrt(_jesMU_dC_sys_down*_jesMU_dC_sys_down+_jesMU_dC_stat_down*_jesMU_dC_stat_down)));
00123   _actas = kJESMUCorrectedShiftedMinus;
00124   return;
00125 }
00126 
00127 void TMBJet::ActAsSmeared() const
00128 {
00129   if (_actas==kSmeared) return;
00130   const_cast<TMBJet&>(*this).SetPEtaPhiE(_uncorrected.P()*_smear_coeff, _uncorrected.Eta(), _uncorrected.Phi(), _uncorrected.E()*_smear_coeff);
00131   _actas = kSmeared;
00132   return;
00133 }
00134 
00135 void TMBJet::ActAsSmearedMU() const
00136 {
00137   if (_actas==kSmearedMU) return;
00138   const_cast<TMBJet&>(*this).SetPEtaPhiE(_uncorrected.P()*_smear_coeffMU, _uncorrected.Eta(), _uncorrected.Phi(), _uncorrected.E()*_smear_coeffMU);
00139   _actas = kSmearedMU;
00140   return;
00141 }
00142 
00143 void TMBJet::Set1    (Float_t q, Float_t dphi, Float_t deta, 
00144                       Float_t emf,  Float_t em1f, Float_t em2f, Float_t em3f,
00145                       Float_t ccmg, Float_t icdf, Float_t ecmg, Float_t icrf,
00146                       Float_t fh1f, Float_t fh2f, Float_t fh3f, Float_t chf,
00147                       Float_t emcc, Float_t hadcc,Float_t emec, Float_t hadec,
00148                       Float_t hot,  Float_t mxET,
00149                       Float_t cpsE, Float_t etaW, Float_t phiW, 
00150                       Float_t sET,  Float_t vPT,  Float_t iPT,  Float_t seedET,
00151                       Float_t pxCH, Float_t pyCH, Float_t pzCH)
00152 {
00153     _q     = q;
00154     _dphi  = dphi; 
00155     _deta  = deta; 
00156     _emf   = emf; 
00157     _em1f  = em1f; 
00158     _em2f  = em2f; 
00159     _em3f  = em3f;
00160     _ccmg  = ccmg;
00161     _icdf  = icdf; 
00162     _ecmg  = ecmg;
00163     _icrf  = icrf; 
00164     _fh1f  = fh1f; 
00165     _fh2f  = fh2f; 
00166     _fh3f  = fh3f; 
00167     _emcc  = emcc;
00168     _hadcc = hadcc;
00169     _emec  = emec;
00170     _hadec = hadec;
00171     _chf   = chf; 
00172     _hot   = hot; 
00173     _mxET  = mxET; 
00174     _cpsE  = cpsE; 
00175     _etaW  = etaW; 
00176     _phiW  = phiW; 
00177     _sET   = sET; 
00178     _vPT   = vPT; 
00179     _iPT   = iPT; 
00180     _seedET= seedET; 
00181     _pxCH = pxCH;
00182     _pyCH = pyCH;
00183     _pzCH = pzCH;
00184 }
00185 
00186 
00187 void TMBJet::Set2    (Int_t ntrk, Int_t nps,  Int_t Nitems, 
00188                       Int_t n90,  Int_t split_merge_word, 
00189                       const char *algoname, const TRefArray *tracks, TRef vtxref)
00190 {
00191     _ntrk  = ntrk; 
00192     _nps   = nps; 
00193     _Nitems= Nitems; 
00194     _n90   = n90;
00195     _split_merge_word =  split_merge_word;
00196     _algoname = algoname;              
00197     _vtxref   = vtxref;
00198 
00199     _tracks.Clear();
00200     if (tracks) {
00201         for (Int_t i=0; i<tracks->GetLast()+1; i++) {
00202             _tracks.Add( tracks->At(i) );
00203         }
00204     }
00205 }
00206 
00207 void TMBJet::SetJetShapes(const std::vector<std::pair<Char_t, UChar_t> >& jetTowers, 
00208                           const std::vector<Float_t>& jetShapes)
00209 {
00210   _jetTowers=jetTowers;
00211   _jetShapes=jetShapes;
00212 }
00213 
00214 void TMBJet::SetL1(Float_t l1set, Float_t l1pt, Float_t l1em)
00215 {
00216     _l1set = l1set;
00217     _l1pt  = l1pt;
00218     _l1em  = l1em;
00219 }
00220 
00221 void TMBJet::SetCorr (Float_t jes_C, Float_t jes_dC_stat, Float_t jes_dC_sys,
00222                       Float_t jes_metC, Float_t jes_metdC_stat, Float_t jes_metdC_sys)
00223 {
00224     _jes_C=jes_C;
00225     _jes_dC_stat=jes_dC_stat;
00226     _jes_dC_sys=jes_dC_sys;
00227     _jes_metC=jes_metC;
00228     _jes_metdC_stat=jes_metdC_stat;
00229     _jes_metdC_sys=jes_metdC_sys;
00230 
00231  
00232     switch(_actas) {
00233     case kJESCorrected:
00234         _actas = kUnCorrected;
00235         ActAsJESCorrected();
00236         break;
00237     case kJESCorrectedShiftedPlus:
00238         _actas = kUnCorrected;
00239         ActAsJESCorrectedShiftedPlus();
00240         break;
00241     case kJESCorrectedShiftedMinus:
00242         _actas = kUnCorrected;
00243         ActAsJESCorrectedShiftedMinus();
00244         break;
00245     default:
00246         break;
00247     }    
00248 }
00249 
00250 void TMBJet::SetCorr (Float_t jes_C, Float_t jes_dC_stat_up, Float_t jes_dC_sys_up, Float_t jes_dC_stat_down, Float_t jes_dC_sys_down,
00251                       Float_t jes_metC, Float_t jes_metdC_stat, Float_t jes_metdC_sys)
00252 {
00253     _jes_C=jes_C;
00254     _jes_dC_stat_down=jes_dC_stat_down;
00255     _jes_dC_sys_down=jes_dC_sys_down;
00256     _jes_dC_stat_up=jes_dC_stat_up;
00257     _jes_dC_sys_up=jes_dC_sys_up;
00258     _jes_dC_stat = _jes_dC_stat_up >= _jes_dC_stat_down ? _jes_dC_stat_up : _jes_dC_stat_down ;
00259     _jes_dC_sys  = _jes_dC_sys_up >= _jes_dC_sys_down ? _jes_dC_sys_up : _jes_dC_sys_down ;
00260     _jes_metC=jes_metC;
00261     _jes_metdC_stat=jes_metdC_stat;
00262     _jes_metdC_sys=jes_metdC_sys;
00263  
00264     switch(_actas) {
00265     case kJESCorrected:
00266         _actas = kUnCorrected;
00267         ActAsJESCorrected();
00268         break;
00269     case kJESCorrectedShiftedPlus:
00270         _actas = kUnCorrected;
00271         ActAsJESCorrectedShiftedPlus();
00272         break;
00273     case kJESCorrectedShiftedMinus:
00274         _actas = kUnCorrected;
00275         ActAsJESCorrectedShiftedMinus();
00276         break;
00277     default:
00278         break;
00279     }
00280 
00281 }
00282 
00283 void TMBJet::SetCorrMU(Float_t jes_C, Float_t jes_dC_stat, Float_t jes_dC_sys,
00284                       Float_t jes_metC, Float_t jes_metdC_stat, Float_t jes_metdC_sys)
00285 {
00286     _jesMU_C=jes_C;
00287     _jesMU_dC_stat=jes_dC_stat;
00288     _jesMU_dC_sys=jes_dC_sys;
00289     _jesMU_metC=jes_metC;
00290     _jesMU_metdC_stat=jes_metdC_stat;
00291     _jesMU_metdC_sys=jes_metdC_sys;
00292 
00293 
00294     switch(_actas) {
00295     case kJESMUCorrected:
00296         _actas = kUnCorrected;
00297         ActAsJESMUCorrected();
00298         break;
00299     case kJESMUCorrectedShiftedPlus:
00300         _actas = kUnCorrected;
00301         ActAsJESMUCorrectedShiftedPlus();
00302         break;
00303     case kJESMUCorrectedShiftedMinus:
00304         _actas = kUnCorrected;
00305         ActAsJESMUCorrectedShiftedMinus();
00306         break;
00307     default:
00308         break;
00309     }   
00310 }
00311 
00312 void TMBJet::SetCorrMU(Float_t jes_C, Float_t jes_dC_stat_up, Float_t jes_dC_sys_up, Float_t jes_dC_stat_down, Float_t jes_dC_sys_down,
00313                       Float_t jes_metC, Float_t jes_metdC_stat, Float_t jes_metdC_sys)
00314 {
00315     _jesMU_C=jes_C;
00316     _jesMU_dC_stat_up=jes_dC_stat_up;
00317     _jesMU_dC_sys_up=jes_dC_sys_up;
00318     _jesMU_dC_stat_down=jes_dC_stat_down;
00319     _jesMU_dC_sys_down=jes_dC_sys_down;
00320     _jesMU_dC_stat = _jesMU_dC_stat_up >= _jesMU_dC_stat_down ? _jesMU_dC_stat_up : _jesMU_dC_stat_down ;
00321     _jesMU_dC_sys  = _jesMU_dC_sys_up >= _jesMU_dC_sys_down ? _jesMU_dC_sys_up : _jesMU_dC_sys_down ;
00322     _jesMU_metC=jes_metC;
00323     _jesMU_metdC_stat=jes_metdC_stat;
00324     _jesMU_metdC_sys=jes_metdC_sys;
00325 
00326 
00327     switch(_actas) {
00328     case kJESMUCorrected:
00329         _actas = kUnCorrected;
00330         ActAsJESMUCorrected();
00331         break;
00332     case kJESMUCorrectedShiftedPlus:
00333         _actas = kUnCorrected;
00334         ActAsJESMUCorrectedShiftedPlus();
00335         break;
00336     case kJESMUCorrectedShiftedMinus:
00337         _actas = kUnCorrected;
00338         ActAsJESMUCorrectedShiftedMinus();
00339         break;
00340     default:
00341         break;
00342     }
00343 }
00344 
00345 void TMBJet::SetFlag(Int_t isGood, Int_t isL1Conf, Int_t isBad, Int_t isNoise, Int_t isEM, Int_t hasMU, Int_t isSmeared, Int_t isSmearedMU)
00346 {
00347   _isGood      = isGood;
00348   _isL1Conf    = isL1Conf;
00349   _isBad       = isBad;
00350   _isNoise     = isNoise;
00351   _isEM        = isEM;
00352   _hasMU       = hasMU;
00353   _isSmeared   = isSmeared;
00354   _isSmearedMU = isSmearedMU;
00355 
00356 }
00357                                                                                                                            
00358 void TMBJet::SetUnCorr(Float_t p, Float_t eta, Float_t phi, Float_t E)
00359 {
00360   TMBLorentzVector temp(p,eta,phi,E,kPEtaPhiE);
00361   _uncorrected = temp;
00362 }
00363 
00364 void TMBJet::SetSmearCoeff(Float_t coeff, Float_t coeffMU)
00365 {
00366     _smear_coeff = coeff;
00367     _smear_coeffMU = coeffMU;
00368 
00369     switch(_actas) {
00370     case kSmeared:
00371         _actas = kUnCorrected;
00372         ActAsSmeared();
00373         break;
00374     case kSmearedMU:
00375         _actas = kUnCorrected;
00376         ActAsSmearedMU();
00377         break;
00378     default:
00379         break;
00380     }
00381 }
00382 
00383 void TMBJet::SetJetID(Float_t cpf0, Float_t cpf, Int_t ntrkMultiplicity0,
00384                       Int_t ntrkMultiplicity, TRef cpfvtxref)
00385 {
00386     _cpf0 = cpf0;
00387     _cpf  = cpf;
00388     _ntrkMultiplicity0 = ntrkMultiplicity0;
00389     _ntrkMultiplicity  = ntrkMultiplicity;
00390     _cpfvtxref = cpfvtxref;
00391 }
00392 
00393 namespace {
00394 
00395     //Read the BTag branch being refered to
00396     bool ReadBTagBranch(const TString& algo, const TString& bname){
00397         TTree *tree = (TTree*)gROOT->FindObject("TMBTree");
00398         if (tree){
00399             Long64_t current = tree->GetReadEntry();
00400             //std::cout<<"entry="<<current<<std::endl;
00401             TBranch *b =tree->GetBranch("BTag_corr"+algo+"_"+bname);
00402             if (current>=0 && b) {
00403                 Long64_t other_current = b->GetReadEntry();
00404                 //std::cout<<"other entry="<<other_current<<std::endl;
00405                 if (other_current!=current) {
00406                     //std::cout<<"reading entry "<<current<<" from branch "<<"BTag_corrJCCB_"+i->first<<std::endl;
00407                     b->GetEntry(current);
00408                 }
00409             }
00410             return true;
00411         }
00412         return false;
00413     }
00414 }
00415 
00419 // Return a pointer the TMBBTag object associated with this jet 
00420 // for a particular tag type ("SVT", etc.) and cut ("LOOSE", etc.). 
00421 // Note, you may have to do a dynamic_cast to access the subclass info, as for TMBBTagSVT objects, 
00422 // for instance:
00423 //    TMBBTagSVT* tag = dynamic_cast<TMBBTagSVT*> GetBTag("NN","MEDIUM");
00424 // Also, you should check that the pointer returned is not NULL! 
00425 // It will be if no tag info for that type of tag is associated with the jet.
00426 const TMBBTag* TMBJet::GetBTag(const TString &type, const TString &cut) const {
00427     TString typecut(type+"_"+cut);
00428     return GetBTag(typecut);
00429 }
00430 
00431 const TMBBTag* TMBJet::GetBTag(const TString &typecut) const {
00432 
00433     if (_isEM || _isBad) return 0;//b-tagging is not done for these jets! 
00434     //(They're not even converted into d0root format by CAFReadEvent!)
00435 
00436     //first get the btag check integer
00437     int check = -1;
00438     std::map< TString, int >::const_iterator c = _btagdictcheck.find(typecut);
00439     if (_btagdictcheck.end()!=c) {
00440         check = c->second;
00441     }
00442 
00443     std::map< TString, TRef >::const_iterator i = _btagdict.find(typecut);
00444     if (_btagdict.end()!=i && i->second.IsValid()) {
00445     
00446         //First make sure we read the BTag branch being referenced
00447         ReadBTagBranch(_algoname, i->first);
00448     
00449         const TMBBTag* tag = (const TMBBTag*)(i->second.GetObject());
00450         if (!tag) std::cout<<"WARNING! In GetBTag(), GetObject returned 0"<<std::endl;
00451         else if (tag->GetId()!=check){
00452             std::cout<<"WARNING! ID check failed in GetBTag!"<<std::endl;
00453         }
00454         return tag;
00455     }
00456     else {
00457         return 0;
00458     }
00459 }
00460 
00467 const TMBBTag* TMBJet::GetBTag(const char *type, const char *cut) const
00468 {
00469     return GetBTag (TString (type), TString (cut));
00470 }
00471 
00472 //Get the first BTag object available 
00473 //(useful when you don't care about the algorithm itself, like for taggability or mc_flavor...
00474 const TMBBTag* TMBJet::GetFirstBTag() const 
00475 {  
00476     std::map< TString, TRef >::const_iterator i = _btagdict.begin();
00477     if (_btagdict.end()!=i) return GetBTag(i->first);
00478     else return 0;
00479 }
00480 
00481 //Print the list of associated, valid BTags in the map
00482 bool TMBJet::btag_print() const 
00483 {
00484     std::cout<<"btags for this jet:";
00485     if (_isEM) std::cout<<" isEM ";
00486     if (_isBad) std::cout<<" isBad ";
00487     bool ret=true;
00488     std::map< TString, TRef >::const_iterator i = _btagdict.begin();
00489     while (_btagdict.end()!=i) {
00490 
00491         //First make sure we read the BTag branch being referenced
00492         ReadBTagBranch(_algoname, i->first);
00493     
00494         std::cout<<" "<<i->first;
00495         if (!i->second.IsValid()) {std::cout<<"-invalid! "; ret=false;}
00496 
00497         const TMBBTag* tag = (const TMBBTag*)(i->second.GetObject());
00498         if (!tag) {std::cout<<" <-tag==0!"; ret=false;}
00499         else {
00500       
00501             //check btag int
00502             std::cout<<" "<<tag->GetId()<<"="<<btagdictcheck(i->first);
00503             if (tag->GetId()!=btagdictcheck(i->first)) {std::cout<<" <-mismatch!"; ret=false;}      
00504       
00505             //check jet ref
00506             const TMBJet* jet = tag->GetJet();
00507             if (!jet) std::cout<<" bad jet ref";
00508             else {
00509         
00510                 //do the Pt's match?
00511                 std::cout<<" "<<jet->Pt()<<"="<<this->Pt();
00512                 if (jet->Pt()!=this->Pt()) {std::cout<<" <-mismatch!"; ret=false;}
00513         
00514                 //check btag int
00515                 std::cout<<" "<<tag->GetId()<<"="<<jet->btagdictcheck(i->first);
00516                 if (tag->GetId()!=jet->btagdictcheck(i->first)) {std::cout<<" <-mismatch!"; ret=false;}
00517         
00518             }
00519       
00520         }
00521         ++i;
00522     }
00523     std::cout<<std::endl;
00524     return ret;
00525 }
00526 
00534 void TMBJet::AddBTag(const TString &type, const TString &cut, TMBBTag* btag)
00535 {
00536     TString typecut(type+"_"+cut);
00537 
00538     //This is a check.... generate a random integer, and store it in both the btag and the map of the jet.
00539     //Later you can check that they still match!
00540     int r = gRandom->Integer(1000000000);
00541     btag->SetId(r);
00542     _btagdictcheck[typecut] = r;
00543 
00544     //This is the real map entry
00545     _btagdict[typecut] = btag;
00546 }
00547 
00551 void TMBJet::ClearAllBTags()
00552 {
00553     _btagdict.clear();
00554     _btagdictcheck.clear();
00555 }
00556 
00562 void TMBJet::ClearBTag (const TString &type, const TString &cut)
00563 {
00564     std::map<TString, TRef>::iterator itr = _btagdict.find(type+"_"+cut);
00565     if (itr != _btagdict.end()) {
00566         _btagdict.erase(itr);
00567         //std::cout<<"Erasing tag for "<<type<<" _ "<<cut<<" - size = "<<_btagdict.size()<<std::endl;
00568     }
00569     std::map<TString, int>::iterator itr2 = _btagdictcheck.find(type+"_"+cut);
00570     if (itr2 != _btagdictcheck.end()) {
00571         _btagdictcheck.erase(itr2);
00572         //std::cout<<"Erasing check tag for "<<type<<" _ "<<cut<<" - size = "<<_btagdictcheck.size()<<std::endl;
00573     }
00574 }
00575 
00576 int TMBJet::btagdictcheck(const char* t) const 
00577 {
00578     if (_btagdictcheck.size()==0) return -2;
00579     TString s(t);
00580 
00581     std::map< TString, int >::const_iterator i = _btagdictcheck.find(s);
00582     if (i!=_btagdictcheck.end()) return i->second;
00583   
00584     //now look for a close match... something ending in the TString key, like the algo name
00585     for (i=_btagdictcheck.begin(); i!=_btagdictcheck.end(); ++i){
00586         if (s.EndsWith(i->first)) return i->second;
00587     }
00588   
00589     //ok, nothing's close
00590     return -1;
00591 }
00592 
00593 int TMBJet::taggable() const 
00594 { 
00595     const TMBBTag* svt = GetFirstBTag();
00596     if (svt) return svt->is_taggable();
00597     else return -1;
00598 }
00599 
00600 int TMBJet::mc_flavor() const 
00601 { 
00602     const TMBBTag* svt = GetFirstBTag();
00603     if (svt) return svt->mc_flavor();
00604     else return -1;
00605 }
00606 

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