00001
00002
00003
00004
00005
00006
00007
00009
00010 #include "tmb_tree/TMBTau.hpp"
00011 #include "tmb_tree/TMBTrack.hpp"
00012
00013 ClassImp(TMBTau);
00014
00015
00016
00017 TMBTau::TMBTau(Float_t px, Float_t py, Float_t pz, Float_t E,
00018 TRefArray* cpsptr, TRefArray* fpsptr,
00019 TRefArray* tracks, TRef& vtxref,
00020 Float_t rms, Float_t profile, Float_t emf,
00021 Float_t icdf, Float_t chf, Float_t hot,
00022 Int_t flag,
00023 Int_t* iq, Float_t* fq,
00024 Float_t et_7, Float_t et_3,
00025 Float_t EM12_Et, Float_t EM12_Et_core,
00026 Float_t EM3_Et, Float_t EM3_Et_core,
00027 Float_t EM4_Et, Float_t EM4_Et_core,
00028 Int_t typ): _nnout(-1.0), _nnelec(-1.0)
00029 {
00030 Set(px, py, pz, E,
00031 cpsptr, fpsptr, tracks, vtxref,
00032 rms, profile, emf, icdf, chf, hot,
00033 flag,
00034 iq, fq, et_7, et_3,
00035 EM12_Et, EM12_Et_core,
00036 EM3_Et, EM3_Et_core, EM4_Et,
00037 EM4_Et_core, typ);
00038 }
00039 void TMBTau::Set(Float_t px, Float_t py, Float_t pz, Float_t E,
00040 TRefArray* cpsptr, TRefArray* fpsptr,
00041 TRefArray* tracks, TRef& vtxref,
00042 Float_t rms, Float_t profile, Float_t emf,
00043 Float_t icdf, Float_t chf, Float_t hot,
00044 Int_t flag,
00045 Int_t* iq, Float_t *fq,
00046 Float_t et_7, Float_t et_3,
00047 Float_t EM12_Et, Float_t EM12_Et_core,
00048 Float_t EM3_Et, Float_t EM3_Et_core, Float_t EM4_Et,
00049 Float_t EM4_Et_core, Int_t typ)
00050
00051 {
00052 SetPxPyPzE(px, py, pz,E);
00053
00054 _vtxref = vtxref;
00055 _rms = rms;
00056 _profile = profile;
00057 _emf = emf;
00058 _icdf = icdf;
00059 _chf = chf;
00060 _hot = hot;
00061 _flag = flag;
00062
00063 _nnout=0.;
00064 _nclus=iq[2];
00065
00066 _ett1=fq[0];
00067 _ett2=fq[1];
00068 _ett3=fq[2];
00069 _mtrk=fq[3];
00070 _ettr=fq[4];
00071 _empt=fq[5];
00072 _emm=fq[6];
00073 _emeta=fq[7];
00074 _emphi=fq[8];
00075 _tzDCA=fq[9];
00076 _teta=fq[10];
00077 _tphi=fq[11];
00078 _tphiPS=fq[12]+fq[11];
00079 _tphiEM3=fq[13]+fq[11];
00080 _emcl_eta1=fq[14];
00081 _emcl_eta2=fq[15];
00082 _emcl_phi1=fq[16];
00083 _emcl_phi2=fq[17];
00084 _emcl_et1=fq[18];
00085 _emcl_et2=fq[19];
00086
00087 _pseta=fq[24];
00088 _psphi=fq[25];
00089 _e1e2=fq[26];
00090 _dalpha=fq[27];
00091
00092 _emcl_f12=fq[31];
00093 _emcl_f3=fq[32];
00094 _emcl_f4=fq[33];
00095
00096 _et_7 = et_7;
00097 _et_3 = et_3;
00098 _EM12_Et = EM12_Et;
00099 _EM12_Et_core = EM12_Et_core;
00100 _EM3_Et = EM3_Et;
00101 _EM3_Et_core = EM3_Et_core;
00102 _EM4_Et = EM4_Et;
00103 _EM4_Et_core = EM4_Et_core;
00104 _typ = typ;
00105
00106
00107 _tracks.Clear();
00108 if (tracks) {
00109 for (int i=0; i<tracks->GetLast()+1; i++) {
00110 _tracks.Add( tracks->At(i) );
00111 }
00112 }
00113
00114 _cpsptr.Clear();
00115 if (cpsptr) {
00116 for (int i=0; i<cpsptr->GetLast()+1; i++) {
00117 _cpsptr.Add( cpsptr->At(i) );
00118 }
00119 }
00120
00121 _fpsptr.Clear();
00122 if (fpsptr) {
00123 for (int i=0; i<fpsptr->GetLast()+1; i++) {
00124 _fpsptr.Add( fpsptr->At(i) );
00125 }
00126 }
00127
00128 }
00129
00130 Float_t TMBTau::charge()const{
00131 int ntrks=ntrk();
00132 float q=0;
00133 for(int i=0; i<ntrks; ++i){
00134 q+=GetChargedTrack(i)->charge();
00135 }
00136 return q;
00137 }
00138
00139
00140
00141 Float_t TMBTau::etad() const {
00142 float z=vz();
00143 if(fabs(z)<100.) return det_eta(z,Pz(),ET());
00144 return 10.0;
00145 }
00146
00147
00148 Float_t TMBTau::vz() const {
00149 float z=1000.;
00150 const TMBTrack* trk=GetChargedTrack(0);
00151 if(trk) z=trk->z();
00152
00153 return z;
00154 }
00155
00156 Float_t TMBTau::det_eta(float z, float pz, float pT) const {
00157 float dz=120.*pz/pT+z;
00158 if(fabs(dz)<150.0){
00159 float l=sqrt(14400.0+dz*dz);
00160 return 0.5*log((l+dz) / (l-dz));
00161 }else{
00162 int sign=give_sign(pz);
00163 dz=sign*150.0;
00164 float r=(dz-z)*pT/pz;
00165 float l=sqrt(r*r+22500);
00166 return 0.5*log((l+dz)/(l-dz));
00167 }
00168 }
00169
00170
00171