00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #include "tmb_tree/TMBTRefs.hpp"
00012
00013 ClassImp(TMBTRefs)
00014
00015 TMBTRefs::TMBTRefs(TRefArray* ems, TRefArray* muons, TRefArray* taus, TRefArray* jets,
00016 TRefArray* mcparts)
00017 {
00018 _ems.Clear();
00019 if (ems) {
00020 for (Int_t i=0; i<ems->GetLast()+1; i++) {
00021 _ems.Add( ems->At(i) );
00022 }
00023 }
00024
00025 _muons.Clear();
00026 if (muons) {
00027 for (Int_t i=0; i<muons->GetLast()+1; i++) {
00028 _muons.Add( muons->At(i) );
00029 }
00030 }
00031
00032 _taus.Clear();
00033 if (taus) {
00034 for (Int_t i=0; i<taus->GetLast()+1; i++) {
00035 _taus.Add( taus->At(i) );
00036 }
00037 }
00038
00039 _jets.Clear();
00040 if (jets) {
00041 for (Int_t i=0; i<jets->GetLast()+1; i++) {
00042 _jets.Add( jets->At(i) );
00043 }
00044 }
00045
00046 _mcparts.Clear();
00047 if (mcparts) {
00048 for (Int_t i=0; i<mcparts->GetLast()+1; i++) {
00049 _mcparts.Add( mcparts->At(i) );
00050 }
00051 }
00052 }
00053
00054 const TMBMCpart* TMBTRefs::mcmatch(const TMBEMCluster* emcl) const{
00055 int nparts=NMCparts();
00056 const TMBMCpart* mcpart=0;
00057 if(nparts==0) return mcpart;
00058 int nems=NEmcls();
00059 if(nems==0) return mcpart;
00060
00061 for(int ip=0; ip<nparts; ++ip){
00062 mcpart=getTMBMCpart(ip);
00063 for(int iem=0; iem<nems && abs(mcpart->pdgid())==11 ; ++iem){
00064 if(emcl==getEmcl(iem)) return mcpart;
00065 }
00066 }
00067 mcpart=0;
00068 return mcpart;
00069 }
00070
00071 const TMBMCpart* TMBTRefs::mcmatch(const TMBMuon* muon) const{
00072
00073 int nparts=NMCparts();
00074 const TMBMCpart* mcpart=0;
00075 if(nparts==0) return mcpart;
00076 int nmuons=NMuons();
00077 if(nmuons==0) return mcpart;
00078
00079 for(int ip=0; ip<nparts; ++ip){
00080 mcpart=getTMBMCpart(ip);
00081 for(int imu=0; imu<nmuons && abs(mcpart->pdgid())==13 ; ++imu){
00082 if(muon==getMuon(imu)) return mcpart;
00083 }
00084 }
00085 mcpart=0;
00086 return mcpart;
00087 }
00088
00089 const TMBMCpart* TMBTRefs::mcmatch(const TMBTau* tau) const{
00090 int nparts=NMCparts();
00091 const TMBMCpart* mcpart=0;
00092 if(nparts==0) return mcpart;
00093 int ntaus=NTaus();
00094 if(ntaus==0) return mcpart;
00095
00096 for(int ip=0; ip<nparts; ++ip){
00097 mcpart=getTMBMCpart(ip);
00098 for(int itau=0; itau<ntaus && abs(mcpart->pdgid())==15 ; ++itau){
00099 if(tau==getTau(itau)) return mcpart;
00100 }
00101 }
00102 mcpart=0;
00103 return mcpart;
00104 }
00105
00106 bool TMBTRefs::isInThis(TObject* objptr) const{
00107
00108 int n=NEmcls();
00109 for(int i=0; i<n; ++i){
00110 if(objptr == _ems.At(i)) return true;
00111 }
00112
00113 n=NMuons();
00114 for(int i=0; i<n; ++i){
00115 if(objptr == _muons.At(i)) return true;
00116 }
00117
00118 n=NTaus();
00119 for(int i=0; i<n; ++i){
00120 if(objptr == _taus.At(i)) return true;
00121 }
00122
00123 n=NJets();
00124 for(int i=0; i<n; ++i){
00125 if(objptr == _jets.At(i)) return true;
00126 }
00127
00128 n=NMuons();
00129 for(int i=0; i<n; ++i){
00130 if(objptr == _muons.At(i)) return true;
00131 }
00132
00133 n=NMCparts();
00134 for(int i=0; i<n; ++i){
00135 if(objptr == _mcparts.At(i)) return true;
00136 }
00137 return false;
00138 }
00139