00001
00002
00003 #include "StjTrgSoftGetAdcEt.h"
00004
00005 #include "StjTrgBEMCJetPatchTowerIdMap.h"
00006
00007 #include "StjTowerEnergyCutBemcStatus.h"
00008 #include "StjTowerEnergyCutEnergy.h"
00009 #include "StjTowerEnergyCutEt.h"
00010 #include "StjTowerEnergyCutAdc.h"
00011 #include "StjTowerEnergyCutTowerId.h"
00012
00013 #include "StjTrg.h"
00014
00015 #include <TVector3.h>
00016 #include <TMath.h>
00017
00018 #include <iostream>
00019
00020 ClassImp(StjTrgSoftGetAdcEt)
00021
00022 using namespace std;
00023
00024 StjTrgSoftGetAdcEt::StjTrgSoftGetAdcEt(StjBEMC* bemc, StjTrgBEMCJetPatchTowerIdMap* bemcJpTowerMap)
00025 : _bemc(bemc), _bemcJpTowerMap(bemcJpTowerMap), _trg(0)
00026 , _runNumber(-1), _eventId(-1)
00027 {
00028 _cut.addCut( new StjTowerEnergyCutEnergy(0.0) );
00029 _cut.addCut( new StjTowerEnergyCutBemcStatus(1) );
00030 _cut.addCut( new StjTowerEnergyCutAdc(0, 2.0) );
00031 _cut.addCut( new StjTowerEnergyCutEt(0.2) );
00032 }
00033
00034 bool StjTrgSoftGetAdcEt::isNewEvent()
00035 {
00036 if(_runNumber != _trg->runNumber()) return true;
00037 if(_eventId != _trg->eventId()) return true;
00038 return false;
00039 }
00040
00041 void StjTrgSoftGetAdcEt::read()
00042 {
00043 _towerAdc.clear();
00044 _towerEnergy.clear();
00045 _towerEt.clear();
00046
00047 _jetPatchAdc.clear();
00048 _jetPatchEnergy.clear();
00049 _jetPatchEt.clear();
00050
00051 vector<int> towers = _trg->towers();
00052 vector<int> jetPatches = _trg->jetPatches();
00053
00054 StjTowerEnergyList energyList = _bemc->getEnergyList();
00055 energyList = _cut(energyList);
00056
00057 for(vector<int>::const_iterator tower = towers.begin(); tower != towers.end(); ++tower) {
00058 bool found = false;
00059 for(StjTowerEnergyList::const_iterator it = energyList.begin(); it != energyList.end(); ++it) {
00060 if((*it).towerId == (*tower)) {
00061 _towerAdc.push_back((*it).adc);
00062 _towerEnergy.push_back((*it).energy);
00063 TVector3 vec3;
00064 vec3.SetPtEtaPhi((*it).towerR, (*it).towerEta, (*it).towerPhi);
00065 _towerEt.push_back(((*it).energy)*TMath::Sin(vec3.Theta()));
00066 found = true;
00067 break;
00068 }
00069 }
00070 if(!found) {
00071 _towerAdc.push_back(0);
00072 _towerEnergy.push_back(0);
00073 _towerEt.push_back(0);
00074 }
00075 }
00076
00077 for(vector<int>::const_iterator jp = jetPatches.begin(); jp != jetPatches.end(); ++jp) {
00078 unsigned int adc = 0;
00079 double energy = 0;
00080 double et = 0;
00081 for(StjTowerEnergyList::const_iterator it = energyList.begin(); it != energyList.end(); ++it) {
00082 if(*jp == _bemcJpTowerMap->getJetPatchIdForTower((*it).towerId)) {
00083 adc += (*it).adc;
00084 energy += (*it).energy;
00085 TVector3 vec3;
00086 vec3.SetPtEtaPhi((*it).towerR, (*it).towerEta, (*it).towerPhi);
00087 et += ((*it).energy)*TMath::Sin(vec3.Theta());
00088 }
00089 }
00090 _jetPatchAdc.push_back(adc);
00091 _jetPatchEnergy.push_back(energy);
00092 _jetPatchEt.push_back(et);
00093 }
00094
00095
00096 }
00097
00098 vector<unsigned int> StjTrgSoftGetAdcEt::towerAdc()
00099 {
00100 if(isNewEvent()) read();
00101 return _towerAdc;
00102 }
00103
00104 vector<double> StjTrgSoftGetAdcEt::towerEnergy()
00105 {
00106 if(isNewEvent()) read();
00107 return _towerEnergy;
00108 }
00109
00110 vector<double> StjTrgSoftGetAdcEt::towerEt()
00111 {
00112 if(isNewEvent()) read();
00113 return _towerEt;
00114 }
00115
00116 vector<unsigned int> StjTrgSoftGetAdcEt::jetPatchAdc()
00117 {
00118 if(isNewEvent()) read();
00119 return _jetPatchAdc;
00120 }
00121
00122 vector<double> StjTrgSoftGetAdcEt::jetPatchEnergy()
00123 {
00124 if(isNewEvent()) read();
00125 return _jetPatchEnergy;
00126 }
00127
00128 vector<double> StjTrgSoftGetAdcEt::jetPatchEt()
00129 {
00130 if(isNewEvent()) read();
00131 return _jetPatchEt;
00132 }