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