| 5 |
**/ |
**/ |
| 6 |
#include <TObject.h> |
#include <TObject.h> |
| 7 |
#include <CaloLevel2.h> |
#include <CaloLevel2.h> |
| 8 |
|
|
| 9 |
|
// |
| 10 |
ClassImp(CaloTrkVar); |
ClassImp(CaloTrkVar); |
| 11 |
ClassImp(CaloLevel2); |
ClassImp(CaloLevel2); |
| 12 |
|
|
| 14 |
* CaloTrkVar constructor |
* CaloTrkVar constructor |
| 15 |
**/ |
**/ |
| 16 |
CaloTrkVar::CaloTrkVar() { |
CaloTrkVar::CaloTrkVar() { |
| 17 |
|
this->Clear(); |
| 18 |
|
}; |
| 19 |
|
|
| 20 |
|
/** |
| 21 |
|
* Clear variables |
| 22 |
|
**/ |
| 23 |
|
void CaloTrkVar::Clear() { |
| 24 |
trkseqno = 0; |
trkseqno = 0; |
| 25 |
noint = 0; |
noint = 0; |
| 26 |
ncore = 0; |
ncore = 0; |
| 45 |
qlow = 0.; |
qlow = 0.; |
| 46 |
nlow = 0; |
nlow = 0; |
| 47 |
dX0l = 0.; |
dX0l = 0.; |
| 48 |
for (Int_t i = 0; i<2 ; i++){ |
memset(tbar, 0, 2*22*sizeof(Float_t)); |
| 49 |
for ( Int_t j = 0; j<22; j++){ |
memset(tibar, 0, 2*22*sizeof(Int_t)); |
|
tibar[j][i] = 0; |
|
|
tbar[j][i] = 0.; |
|
|
}; |
|
|
}; |
|
| 50 |
} |
} |
| 51 |
|
|
| 52 |
/** |
/** |
| 88 |
// |
// |
| 89 |
CaloTrk = new TClonesArray("CaloTrkVar",1); |
CaloTrk = new TClonesArray("CaloTrkVar",1); |
| 90 |
// |
// |
| 91 |
nstrip = 0; |
this->Clear(); |
| 92 |
qtot = 0.; |
// |
|
impx = 0.; |
|
|
impy = 0.; |
|
|
tanx = 0.; |
|
|
tany = 0.; |
|
|
qmax = 0.; |
|
|
nx22 = 0; |
|
|
qx22 = 0.; |
|
|
elen = 0.; |
|
|
selen = 0.; |
|
|
for (Int_t i = 0; i<4 ; i++){ |
|
|
qq[i] = 0.; |
|
|
perr[i] = 0; |
|
|
swerr[i] = 0; |
|
|
crc[i] = 0; |
|
|
if ( i < 2 ){ |
|
|
planemax[i] = 0; |
|
|
varcfit[i] = 0.; |
|
|
npcfit[i] = 0; |
|
|
for ( Int_t j = 0; j<22; j++){ |
|
|
cibar[j][i] = 0; |
|
|
cbar[j][i] = 0.; |
|
|
}; |
|
|
}; |
|
|
}; |
|
|
good = 0; |
|
|
selftrigger = 0; |
|
|
estrip = TArrayF(0,NULL); |
|
| 93 |
}; |
}; |
| 94 |
|
|
| 95 |
|
/** |
| 96 |
|
* Clear the CaloLevel2 object |
| 97 |
|
**/ |
| 98 |
void CaloLevel2::Clear() { |
void CaloLevel2::Clear() { |
| 99 |
// |
// |
| 100 |
CaloTrk->Clear(); |
CaloTrk->Clear(); |
| 110 |
qx22 = 0.; |
qx22 = 0.; |
| 111 |
elen = 0.; |
elen = 0.; |
| 112 |
selen = 0.; |
selen = 0.; |
| 113 |
for (Int_t i = 0; i<4 ; i++){ |
memset(perr, 0, 4*sizeof(Int_t)); |
| 114 |
qq[i] = 0.; |
memset(swerr, 0, 4*sizeof(Int_t)); |
| 115 |
perr[i] = 0; |
memset(crc, 0, 4*sizeof(Int_t)); |
| 116 |
swerr[i] = 0; |
memset(qq, 0, 4*sizeof(Int_t)); |
| 117 |
crc[i] = 0; |
memset(varcfit, 0, 2*sizeof(Float_t)); |
| 118 |
if ( i < 2 ){ |
memset(npcfit, 0, 2*sizeof(Int_t)); |
| 119 |
planemax[i] = 0; |
memset(planemax, 0, 2*sizeof(Int_t)); |
| 120 |
varcfit[i] = 0.; |
memset(cibar, 0, 2*22*sizeof(Int_t)); |
| 121 |
npcfit[i] = 0; |
memset(cbar, 0, 2*22*sizeof(Float_t)); |
|
for ( Int_t j = 0; j<22; j++){ |
|
|
cibar[j][i] = 0; |
|
|
cbar[j][i] = 0.; |
|
|
}; |
|
|
}; |
|
|
}; |
|
| 122 |
good = 0; |
good = 0; |
| 123 |
selftrigger = 0; |
selftrigger = 0; |
| 124 |
// estrip = TArrayF(0,NULL); |
// |
|
estrip.Reset(); |
|
| 125 |
}; |
}; |
| 126 |
|
|
| 127 |
|
|
| 183 |
l2->qmean[i] = ((CaloTrkVar *)CaloTrk->At(i))->qmean; |
l2->qmean[i] = ((CaloTrkVar *)CaloTrk->At(i))->qmean; |
| 184 |
l2->qlow[i] = ((CaloTrkVar *)CaloTrk->At(i))->qlow; |
l2->qlow[i] = ((CaloTrkVar *)CaloTrk->At(i))->qlow; |
| 185 |
l2->dX0l[i] = ((CaloTrkVar *)CaloTrk->At(i))->dX0l; |
l2->dX0l[i] = ((CaloTrkVar *)CaloTrk->At(i))->dX0l; |
| 186 |
|
for (Int_t j=0; j<2; j++){ |
| 187 |
|
for (Int_t k=0; k<22; k++){ |
| 188 |
|
l2->tbar[i][k][j] = ((CaloTrkVar *)CaloTrk->At(i))->tbar[k][j]; |
| 189 |
|
}; |
| 190 |
|
}; |
| 191 |
} |
} |
| 192 |
|
|
| 193 |
} |
} |
| 194 |
|
|
| 195 |
/** |
/** |
| 196 |
* Gives the detected energy for the given strip once loaded the event |
* Should return the energy in GeV if the particle would be an electron |
| 197 |
**/ |
* using a parametrization taken from Monte Carlo simulation |
|
Float_t CaloLevel2::GetEstrip(Int_t view, Int_t plane, Int_t strip){ |
|
|
Int_t splane = 0; |
|
|
Int_t sstrip = 0; |
|
|
// |
|
|
if ( nstrip == 0 ) return(0.); |
|
|
// |
|
|
for (Int_t i = 0; i<nstrip; i++ ){ |
|
|
if ( view == 0 ){ |
|
|
if ( estrip.At(i) > 0. ){ |
|
|
splane = (Int_t)trunc(estrip.At(i)/1000000.); |
|
|
sstrip = (Int_t)trunc((estrip.At(i)-((Float_t)splane*1000000.))/10000.); |
|
|
if ( splane == plane && sstrip == strip ) return(estrip.At(i)-(Float_t)splane*1000000.-(Float_t)sstrip*10000.); |
|
|
}; |
|
|
} else { |
|
|
if ( estrip.At(i) < 0. ){ |
|
|
splane = (Int_t)trunc(-estrip.At(i)/1000000.); |
|
|
sstrip = (Int_t)trunc((-estrip.At(i)-((Float_t)splane*1000000.))/10000.); |
|
|
if ( splane == plane && sstrip == strip ) return(-estrip.At(i)-(Float_t)splane*1000000.-(Float_t)sstrip*10000.); |
|
|
}; |
|
|
}; |
|
|
}; |
|
|
return(0.); |
|
|
}; |
|
|
|
|
|
/** |
|
|
* Given estrip entry returns energy and strip |
|
| 198 |
**/ |
**/ |
|
Float_t CaloLevel2::DecodeEstrip(Int_t entry, Int_t &view, Int_t &plane, Int_t &strip){ |
|
|
if ( entry>nstrip ) return(0.); |
|
|
// |
|
|
if ( estrip.At(entry) > 0. ){ |
|
|
view = 0; |
|
|
plane = (Int_t)trunc(estrip.At(entry)/1000000.); |
|
|
strip = (Int_t)trunc((estrip.At(entry)-((Float_t)plane*1000000.))/10000.); |
|
|
return(estrip.At(entry)-(Float_t)plane*1000000.-(Float_t)strip*10000.); |
|
|
}; |
|
|
if ( estrip.At(entry) < 0. ){ |
|
|
view = 1; |
|
|
plane = (Int_t)trunc(-estrip.At(entry)/1000000.); |
|
|
strip = (Int_t)trunc((-estrip.At(entry)-((Float_t)plane*1000000.))/10000.); |
|
|
return(-estrip.At(entry)-(Float_t)plane*1000000.-(Float_t)strip*10000.); |
|
|
}; |
|
|
// |
|
|
printf(" WARNING: problems decoding value %f at entry %i \n",estrip.At(entry),entry); |
|
|
// |
|
|
view = -1; |
|
|
plane = -1; |
|
|
strip = -1; |
|
|
return(0.); |
|
|
} |
|
|
|
|
| 199 |
void CaloLevel2::GetElectronEnergy(Float_t &energy, Float_t &sigma){ |
void CaloLevel2::GetElectronEnergy(Float_t &energy, Float_t &sigma){ |
| 200 |
if ( nstrip == 0 ) return; |
if ( nstrip == 0 ) return; |
| 201 |
energy = qtot * 40.82 * 0.000106; |
energy = qtot * 40.82 * 0.000106; |