00001
00002 #include "StjTowerEnergyCorrectionForTracks.h"
00003
00004 #include <iostream>
00005
00006 ClassImp(StjTowerEnergyCorrectionForTracks)
00007
00008 using namespace std;
00009
00010 const int StjTowerEnergyCorrectionForTracks::mNOfBemcTowers;
00011
00012 StjTowerEnergyList StjTowerEnergyCorrectionForTracks::operator()(const StjTowerEnergyList &energyDepositList, const StjTrackList& trackList)
00013 {
00014 return Do(energyDepositList, trackList);
00015 }
00016
00017 StjTowerEnergyList StjTowerEnergyCorrectionForTracks::Do(const StjTowerEnergyList &energyDepositList, const StjTrackList& trackList)
00018 {
00019 for (int i = 1; i <= mNOfBemcTowers; ++i) {
00020 mNtracksOnTower[i] = 0;
00021 }
00022
00023 for(StjTrackList::const_iterator track = trackList.begin(); track != trackList.end(); ++track) {
00024 countTracksOnBemcTower(*track);
00025 }
00026
00027 StjTowerEnergyList ret;
00028
00029 for(StjTowerEnergyList::const_iterator it = energyDepositList.begin(); it != energyDepositList.end(); ++it) {
00030
00031 StjTowerEnergy energyDeposit(*it);
00032
00033 energyDeposit.energy = correctBemcTowerEnergyForTracks_(energyDeposit.energy, energyDeposit.towerId, energyDeposit.towerEta, energyDeposit.towerPhi);
00034
00035 energyDeposit.energy = (energyDeposit.energy <= 0) ? 0 : energyDeposit.energy;
00036
00037 ret.push_back(energyDeposit);
00038 }
00039
00040 return ret;
00041 }
00042
00043 void StjTowerEnergyCorrectionForTracks::countTracksOnBemcTower(const StjTrack& track)
00044 {
00045 if(track.exitDetectorId == 9 && track.exitTowerId != 0 && track.exitTowerId <= mNOfBemcTowers)
00046 mNtracksOnTower[track.exitTowerId]++;
00047 }
00048
00049 double StjTowerEnergyCorrectionForTracks::correctBemcTowerEnergyForTracks_(double energy, int bemcTowerId, float eta, float phi)
00050 {
00051 if(bemcTowerId > mNOfBemcTowers) return energy;
00052
00053 float theta=2.*atan(exp(-eta));
00054
00055
00056 double MipE = 0.261*(1.+0.056*eta*eta)/sin(theta);
00057
00058 return energy - mNtracksOnTower[bemcTowerId]*MipE;
00059 }