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