00001
00002 #include "StBET4pMaker.h"
00003 #include "StBET4pMakerImp.h"
00004 #include "StBET4pMakerImpBuilder.h"
00005 #include "StMuDSTMaker/COMMON/StMuTypes.hh"
00006
00007 #include "StjeTrackListToStMuTrackFourVecList.h"
00008 #include "StjeTowerEnergyListToStMuTrackFourVecList.h"
00009
00010 #include "StjeBemcEnergySumCalculator.h"
00011 #include "StjeBemcEnergySumCalculatorBuilder.h"
00012
00013 #include "StEmcADCtoEMaker/StEmcADCtoEMaker.h"
00014 #include "StjTowerEnergyCorrectionForTracksMip.h"
00015
00016 #include <iostream>
00017
00018 using namespace std;
00019
00020 ClassImp(StBET4pMaker)
00021
00022 StBET4pMaker::StBET4pMaker(const char* name, StMuDstMaker* uDstMaker, bool doTowerSwapFix, StjAbstractTowerEnergyCorrectionForTracks* correctTowerEnergyForTracks)
00023 : StFourPMaker(name)
00024 , _entryMaker(0)
00025 , _uDstMaker(uDstMaker), _doTowerSwapFix(doTowerSwapFix)
00026 , _correctTowerEnergyForTracks(correctTowerEnergyForTracks ? correctTowerEnergyForTracks : new StjTowerEnergyCorrectionForTracksMip)
00027 , _useTPC(true), _useBEMC(true), _useEEMC(false)
00028 , _use2003Cuts(false), _use2005Cuts(false), _use2006Cuts(false), _use2009Cuts(false)
00029 , _useBEMCEnergySum(true)
00030 , _useRandomSelector(false)
00031 , _useBEMCEnergyVariation(false), _bemcEnergyVariationRatio(0.05)
00032 , _imp(0)
00033 , _bemcEnergySumCalculator(0)
00034 , _track2four(*(new StjeTrackListToStMuTrackFourVecList))
00035 , _energy2four(*(new StjeTowerEnergyListToStMuTrackFourVecList))
00036 , _randomSelectorProb(1.0), _randomSelectorAt(false)
00037 , _randomSelectorSeed(0)
00038 { }
00039
00040 Int_t StBET4pMaker::Init()
00041 {
00042 StBET4pMakerImpBuilder impBuilder;
00043 _imp = impBuilder.build(_useTPC, _useBEMC, _useEEMC, _use2003Cuts, _use2005Cuts, _use2006Cuts, _use2009Cuts, _useBEMCEnergyVariation, _bemcEnergyVariationRatio, _useRandomSelector, _uDstMaker, _doTowerSwapFix, _correctTowerEnergyForTracks, _randomSelectorProb, _randomSelectorAt, _randomSelectorSeed);
00044 _imp->Init();
00045
00046 StjeBemcEnergySumCalculatorBuilder bemcEnergySumCalculatorBuilder;
00047 _bemcEnergySumCalculator = bemcEnergySumCalculatorBuilder.build(_useBEMCEnergySum && _useBEMC, _use2003Cuts, _use2005Cuts, _uDstMaker, _doTowerSwapFix);
00048 _bemcEnergySumCalculator->Init();
00049
00050 return StMaker::Init();
00051 }
00052
00053
00054 void StBET4pMaker::Clear(Option_t* opt)
00055 {
00056 for (size_t i = 0; i < _vertexNodes.size(); ++i) {
00057 VertexNode& node = _vertexNodes[i];
00058 node.vertex = 0;
00059 for (size_t j = 0; j < node.tracks.size(); ++j) {
00060 delete node.tracks[j];
00061 node.tracks[j] = 0;
00062 }
00063 node.tracks.clear();
00064 }
00065
00066 _vertexNodes.clear();
00067
00068 _bemcEnergySumCalculator->Clear();
00069
00070 return StMaker::Clear(opt);
00071 }
00072
00073 Int_t StBET4pMaker::Make()
00074 {
00075 if(isBemcCorrupted()) return kStOk;
00076
00077 _bemcEnergySumCalculator->Make();
00078
00079 if (_bemcEnergySumCalculator->sumEmcEt() > 500.) return kStOk;
00080
00081
00082 int currentVertexIndex = StMuDst::currentVertexIndex();
00083
00084
00085 for (unsigned int vertexIndex = 0; vertexIndex < StMuDst::numberOfPrimaryVertices(); ++vertexIndex) {
00086 StMuDst::setVertexIndex(vertexIndex);
00087 StMuPrimaryVertex* vertex = StMuDst::primaryVertex(vertexIndex);
00088 if (vertex->ranking() > 0) {
00089 _vertexNodes.push_back(VertexNode());
00090 VertexNode& node = _vertexNodes.back();
00091 node.vertex = vertex;
00092
00093 pair<StjTrackList,StjTowerEnergyList> trackAndEnergyList = _imp->getTrackAndEnergyList();
00094
00095 FourList tpc4pList = _track2four(trackAndEnergyList.first);
00096 node.tracks.insert(node.tracks.end(),tpc4pList.begin(),tpc4pList.end());
00097
00098 FourList energy4pList = _energy2four(trackAndEnergyList.second);
00099 node.tracks.insert(node.tracks.end(),energy4pList.begin(),energy4pList.end());
00100 }
00101 }
00102
00103
00104 if (StMuDst::currentVertexIndex() != currentVertexIndex) StMuDst::setVertexIndex(currentVertexIndex);
00105
00106 return kStOk;
00107 }
00108
00109 bool StBET4pMaker::isBemcCorrupted() const
00110 {
00111 if(StEmcADCtoEMaker* adc2e = dynamic_cast<StEmcADCtoEMaker*>(const_cast<StBET4pMaker*>(this)->GetMaker("Eread")))
00112 return adc2e->isCorrupted();
00113
00114 return false;
00115 }
00116
00117 int StBET4pMaker::nDylanPoints() const
00118 {
00119 return _bemcEnergySumCalculator->nDylanPoints();
00120 }
00121
00122 double StBET4pMaker::sumEmcEt() const
00123 {
00124 return _bemcEnergySumCalculator->sumEmcEt();
00125 }