00001
00002
00003 #include "StjDijetListTriggerBHT.h"
00004
00005 #include <StjTrg.h>
00006
00007 #include <vector>
00008
00009 ClassImp(StjDijetListTriggerBHT)
00010
00011 using namespace std;
00012
00013 StjDijetList StjDijetListTriggerBHT::processOneItem(const StjDijetList::value_type& item)
00014 {
00015 StjDijetList retList;
00016
00017 if( ! _trg->passed() ) return retList;
00018
00019 double maxEt3 = getMaxEtForBEMCTowersThatPassedBHT(item.jet3);
00020 double maxEt4 = getMaxEtForBEMCTowersThatPassedBHT(item.jet4);
00021
00022 if(maxEt3 == 0 && maxEt4 == 0) return retList;
00023
00024 StjDijet dijet(item);
00025
00026 if(maxEt3 >= maxEt4)
00027 {
00028 dijet.jetSameSide = item.jet3;
00029 dijet.jetAwaySide = item.jet4;
00030 dijet.neuRtSameSide = item.jet3.neuRt;
00031 dijet.neuRtAwaySide = item.jet4.neuRt;
00032 }
00033 else
00034 {
00035 dijet.jetSameSide = item.jet4;
00036 dijet.jetAwaySide = item.jet3;
00037 dijet.neuRtSameSide = item.jet4.neuRt;
00038 dijet.neuRtAwaySide = item.jet3.neuRt;
00039 }
00040
00041 retList.push_back(dijet);
00042
00043 return retList;
00044 }
00045
00046 double StjDijetListTriggerBHT::getMaxEtForBEMCTowersThatPassedBHT(const StjJet& jet)
00047 {
00048 double ret = 0;
00049 for(StjFourVecList::const_iterator it = jet.fourVecList.begin(); it != jet.fourVecList.end(); ++it)
00050 {
00051 double towerEt = getTowerEtIfFiredBHT(*it);
00052 if(towerEt > ret) ret = towerEt;
00053 }
00054 return ret;
00055 }
00056
00057 double StjDijetListTriggerBHT::getTowerEtIfFiredBHT(const StjFourVec& p4)
00058 {
00059 if(p4.type != 2) return 0;
00060 if(p4.detectorId != 9) return 0;
00061 vector<int> towers = _trg->towers();
00062 vector<double> towerEt = _trg->towerEt();
00063 for(size_t i = 0; i != towers.size(); ++i)
00064 {
00065 if(p4.towerId == towers[i]) return towerEt[i];
00066 }
00067 return 0;
00068 }
00069