00001
00014 #ifndef STAR_StDijetFilter
00015 #define STAR_StDijetFilter
00016
00017 #include <vector>
00018 #include <string>
00019 #include "StMCFilter.h"
00020
00021 class StGenParticleMaster;
00022 class StGenParticle;
00023
00024 class JetFourVec
00025 {
00026
00027 private:
00028 float px;
00029 float py;
00030 float pz;
00031 float en;
00032 int code;
00033
00034 public:
00035 JetFourVec();
00036 JetFourVec(JetFourVec*);
00037 JetFourVec(StGenParticle*);
00038 ~JetFourVec(){}
00039
00040 JetFourVec operator +(JetFourVec);
00041 bool operator ==(JetFourVec);
00042
00043 void setCode(int x){code = x;};
00044 void setPx(float x){px = x;}
00045 void setPy(float x){py = x;}
00046 void setPz(float x){pz = x;}
00047 void setEn(float x){en = x;}
00048 void setPxPyPzEn(float,float,float,float);
00049 void setPtEtaPhiM(float,float,float,float);
00050 void setPtEtaPhiE(float,float,float,float);
00051
00052 int getCode(){return code;}
00053 float getPx(){return px;}
00054 float getPy(){return py;}
00055 float getPz(){return pz;}
00056 float getEn(){return en;}
00057
00058 float Pt();
00059 float Eta();
00060 float Phi();
00061 float Theta();
00062 float M();
00063 float P();
00064 };
00065
00066
00067 class StDijetFilter : public StMCFilter
00068 {
00069 private:
00070
00071 float mRBTOW;
00072 float mRcone;
00073 float mSeed;
00074 float mAssoc;
00075 float mSplitfraction;
00076 bool mAddmidpoints;
00077 bool mStablemidpoints;
00078 bool mSplitmerge;
00079 float mParticleEtaRange;
00080 float mJetEtaHigh;
00081 float mJetEtaLow;
00082 float mDPhi;
00083 float mDEta;
00084 float mPtLow;
00085 float mPtHigh;
00086 float mMinJetPt;
00087
00088 float mRecohadron;
00089 float mRecolepton;
00090 int *nEvents;
00091 double mVertex[3];
00092
00093 float dR(StGenParticle*,StGenParticle*) const;
00094 float dR(StGenParticle*,JetFourVec*) const;
00095 float dR(JetFourVec*,StGenParticle*) const;
00096 float dR(JetFourVec*,JetFourVec*) const;
00097
00098 JetFourVec* combineTracks(std::vector<JetFourVec*>) const;
00099 JetFourVec* recoJet(std::vector<JetFourVec*>, double*) const;
00100 std::vector<JetFourVec*> EtOrderedList(std::vector<JetFourVec*>) const;
00101 std::vector< std::vector<JetFourVec*> > EtOrderedList(std::vector< std::vector<JetFourVec*> >) const;
00102 std::vector< std::vector<JetFourVec*> > RemoveDuplicates(std::vector< std::vector<JetFourVec*> >) const;
00103
00104 float overlapEnergy(std::vector<JetFourVec*>,std::vector<JetFourVec*>) const;
00105 std::vector< std::vector<JetFourVec*> > doSplitMerge(std::vector< std::vector<JetFourVec*> >) const;
00106
00107 std::vector<JetFourVec*> merge(std::vector<JetFourVec*>,std::vector<JetFourVec*>) const;
00108 void split(std::vector<JetFourVec*> &v1,std::vector<JetFourVec*> &v2) const;
00109
00110 std::vector<JetFourVec*> addMidPoints(std::vector<JetFourVec*>) const;
00111
00112 void readConfig();
00113
00114 public:
00115 StDijetFilter();
00116 virtual ~StDijetFilter();
00117
00118 int RejectEG(const StGenParticleMaster &ptl) const;
00119
00120 int RejectGT(const StGenParticleMaster &ptl) const;
00121
00122 int RejectGE(const StGenParticleMaster &ptl) const;
00123
00124 void parseConfig(std::string, float);
00125 };
00126
00127 #endif