00001
00002
00003
00004
00005
00006 #ifndef StJetSkimEvent_HH
00007 #define StJetSkimEvent_HH
00008
00009 #include "TObject.h"
00010 #include "TClonesArray.h"
00011 #include "TArrayI.h"
00012 #include "TObjString.h"
00013 #include "TRef.h"
00014 #include "TLorentzVector.h"
00015
00016 class StPythiaEvent;
00017
00018 #include <map>
00019
00020 using namespace std;
00021
00022 class StJetSkimTrigHeader : public TObject
00023 {
00024 public:
00025 StJetSkimTrigHeader();
00026 StJetSkimTrigHeader(const StJetSkimTrigHeader & other);
00027 virtual ~StJetSkimTrigHeader();
00028 StJetSkimTrigHeader& operator=(const StJetSkimTrigHeader & rhs);
00029
00030 void Clear(const char *option="");
00031
00032 Int_t runId;
00033 Int_t trigId;
00034
00035 Float_t prescale;
00036
00037 Int_t eastBarrelTowerThreshold;
00038 Int_t eastBarrelTriggerPatchThreshold;
00039 Int_t eastBarrelJetPatchThreshold;
00040
00041 Int_t westBarrelTowerThreshold;
00042 Int_t westBarrelTriggerPatchThreshold;
00043 Int_t westBarrelJetPatchThreshold;
00044
00045 Int_t endcapTowerThreshold;
00046 Int_t endcapTriggerPatchThreshold;
00047 Int_t endcapJetPatchThreshold;
00048
00049 Int_t totalEnergyThreshold;
00050
00051 private:
00052 void init();
00053
00054 ClassDef(StJetSkimTrigHeader,1);
00055 };
00056
00057 class StJetSkimTrig : public TObject
00058 {
00059 public:
00060 StJetSkimTrig();
00061 StJetSkimTrig(const StJetSkimTrig& other);
00062 virtual ~StJetSkimTrig();
00063 StJetSkimTrig& operator=(const StJetSkimTrig& rhs);
00064
00065 void clear();
00066 void Clear(const char *option="");
00067
00068 int trigId() const;
00069 bool didFire() const;
00070 int shouldFire() const;
00071 int shouldFireBBC() const;
00072 int shouldFireBemc() const;
00073 int shouldFireEemc() const;
00074 int shouldFireL2() const;
00075
00076
00077 map<int,int>& towersAboveThreshold(int detector) const;
00078 map<int,int>& triggerPatchesAboveThreshold(int detector) const;
00079 map<int,int>& jetPatchesAboveThreshold(int detector) const;
00080
00081 int totalEnergy() const;
00082
00083 const int* L2ResultEmulated() const;
00084
00085
00086 void setTrigId(int aTrigId);
00087 void setDidFire(bool aFire);
00088 void setShouldFire(int aFire);
00089 void setShouldFireBBC(int aFireBBC);
00090 void setShouldFireBemc(int aFireBemc);
00091 void setShouldFireEemc(int aFireEemc);
00092 void setShouldFireL2(int aFireL2);
00093
00094
00095 void addTowerAboveThreshold(int detector, int aID, int aADC);
00096 void addTriggerPatchAboveThreshold(int detector, int aID, int aADC);
00097 void addJetPatchAboveThreshold(int detector, int aID, int aADC);
00098
00099 void setTotalEnergy(int aEnergy);
00100
00101 void setL2ResultEmulated(const int* rhs);
00102
00103 private:
00104 void init();
00105
00106 Int_t mTrigId;
00107 Int_t mDidFire;
00108 Int_t mShouldFire;
00109 Int_t mShouldFireBBC;
00110 Int_t mShouldFireBemc;
00111 Int_t mShouldFireEemc;
00112 Int_t mShouldFireL2;
00113
00114 map<int,int> mTowers;
00115 map<int,int> mTriggerPatches;
00116 map<int,int> mJetPatches;
00117
00118 Int_t mTotalEnergy;
00119
00120 int mL2ResultEmulated[64];
00121
00122 ClassDef(StJetSkimTrig,5);
00123 };
00124
00125 inline int StJetSkimTrig::trigId() const {return mTrigId;}
00126 inline bool StJetSkimTrig::didFire() const {return mDidFire > 0;}
00127 inline int StJetSkimTrig::shouldFire() const {return mShouldFire;}
00128 inline int StJetSkimTrig::shouldFireBBC() const {return mShouldFireBBC;}
00129 inline int StJetSkimTrig::shouldFireBemc() const {return mShouldFireBemc;}
00130 inline int StJetSkimTrig::shouldFireEemc() const {return mShouldFireEemc;}
00131 inline int StJetSkimTrig::shouldFireL2() const {return mShouldFireL2;}
00132 inline int StJetSkimTrig::totalEnergy() const {return mTotalEnergy;}
00133 inline const int* StJetSkimTrig::L2ResultEmulated() const {return mL2ResultEmulated;}
00134
00135 inline void StJetSkimTrig::setTrigId(int aTrigId) {mTrigId = aTrigId;}
00136 inline void StJetSkimTrig::setDidFire(bool aFire) {mDidFire = aFire;}
00137 inline void StJetSkimTrig::setShouldFire(int aFire) {mShouldFire = aFire;}
00138 inline void StJetSkimTrig::setShouldFireBBC(int aFireBBC) {mShouldFireBBC = aFireBBC;}
00139 inline void StJetSkimTrig::setShouldFireBemc(int aFireBemc) {mShouldFireBemc = aFireBemc;}
00140 inline void StJetSkimTrig::setShouldFireEemc(int aFireEemc) {mShouldFireEemc = aFireEemc;}
00141 inline void StJetSkimTrig::setShouldFireL2(int aFireL2) {mShouldFireL2 = aFireL2;}
00142 inline void StJetSkimTrig::setTotalEnergy(int aEnergy) {mTotalEnergy = aEnergy;}
00143
00144 class StJetSkimVert : public TObject {
00145
00146 public:
00147 StJetSkimVert();
00148 virtual ~StJetSkimVert() {};
00149
00150
00151 void clear();
00152 void Clear(const char *option="");
00153 bool operator==(const StJetSkimVert &rhs) const;
00154
00155
00156 void setPosition(float* x);
00157 void setError(float* y);
00158
00159 void setVertexFinderId(int i) {mVertexFinderId = i;}
00160 void setRanking(Float_t i) { mRanking = i;}
00161 void setNTracksUsed(UShort_t i) {mNTracksUsed = i;}
00162 void setNBTOFMatch(UShort_t i) { mNBTOFMatch = i;}
00163 void setNCTBMatch(UShort_t i) { mNCTBMatch = i;}
00164 void setNBEMCMatch(UShort_t i) { mNBEMCMatch = i;}
00165 void setNEEMCMatch(UShort_t i) { mNEEMCMatch = i;}
00166 void setNCrossingCentralMembrane(UShort_t i) { mNCrossCentralMembrane = i;}
00167 void setSumTrackPt(Float_t i) { mSumTrackPt = i;}
00168 void setMeanDip(Float_t i) { mMeanDip = i;}
00169 void setChiSquared(Float_t i) { mChiSquared = i;}
00170
00171
00172 void setRefMultNeg( UShort_t i) { mRefMultNeg = i;}
00173 void setRefMultPos(UShort_t i) { mRefMultPos = i;}
00174 void setRefMultFtpcWest(UShort_t i) { mRefMultFtpcWest = i;}
00175 void setRefMultFtpcEast( UShort_t i) { mRefMultFtpcEast = i;}
00176
00177
00178 const float* position() const { return mPosition;}
00179 const float* posError() const { return mPosError;}
00180 int vertexFinderId() const { return mVertexFinderId;}
00181 Float_t ranking() const { return mRanking;}
00182 UShort_t nTracksUsed() const { return mNTracksUsed;}
00183 UShort_t nBTOFMatch() const { return mNBTOFMatch;}
00184 UShort_t nCTBMatch() const { return mNCTBMatch;}
00185 UShort_t nBEMCMatch() const { return mNBEMCMatch;}
00186 UShort_t nEEMCMatch() const { return mNEEMCMatch;}
00187 UShort_t nCrossCentralMembrane() const {return mNCrossCentralMembrane;}
00188 Float_t sumTrackPt() const { return mSumTrackPt; }
00189 Float_t meanDip() const { return mMeanDip; }
00190 Float_t chiSquared() const { return mChiSquared; }
00191
00192 UShort_t refMultPos() const { return mRefMultPos; }
00193 UShort_t refMultNeg() const { return mRefMultNeg; }
00194 UShort_t refMult() const { return refMultPos() + refMultNeg(); }
00195 UShort_t refMultFtpcEast() const { return mRefMultFtpcEast; }
00196 UShort_t refMultFtpcWest() const { return mRefMultFtpcWest; }
00197 UShort_t refMultFtpc() const { return refMultFtpcEast() + refMultFtpcWest(); }
00198
00199 private:
00200
00201 float mPosition[3];
00202 float mPosError[3];
00203
00204 int mVertexFinderId;
00205 Float_t mRanking;
00206 UShort_t mNTracksUsed;
00207 UShort_t mNBTOFMatch;
00208 UShort_t mNCTBMatch;
00209 UShort_t mNBEMCMatch;
00210 UShort_t mNEEMCMatch;
00211 UShort_t mNCrossCentralMembrane;
00212 Float_t mSumTrackPt;
00213 Float_t mMeanDip;
00214 Float_t mChiSquared;
00215
00216
00217 UShort_t mRefMultNeg;
00218 UShort_t mRefMultPos;
00219 UShort_t mRefMultFtpcWest;
00220 UShort_t mRefMultFtpcEast;
00221
00222 ClassDef(StJetSkimVert,2);
00223 };
00224
00225 class StJetSkimEvent : public TObject {
00226 public:
00227 StJetSkimEvent();
00228 StJetSkimEvent(const StJetSkimEvent &other);
00229 virtual ~StJetSkimEvent();
00230 StJetSkimEvent& operator=(const StJetSkimEvent &rhs);
00231
00232
00233 void clear();
00234 void Clear(const char *option="");
00235
00236
00237 void setTrig(const StJetSkimTrig& );
00238 void setVert(const StJetSkimVert& );
00239
00240 void setTrigHeaderArray(TClonesArray* array) {mTrigHeaderArrayRef = array;}
00241 void setTrigHeaderArray(TRef arrayRef) {mTrigHeaderArrayRef = arrayRef;}
00242
00243
00244 void setBestVert(const StJetSkimVert & v);
00245 void setBestVert(int clonesArrayIndex);
00246
00247 void setFill(float i) {mFill = i;}
00248 void setRunId(int i) {mRunId = i;}
00249 void setEventId(int i) {mEventId = i;}
00250 void setMudstFileName(const TObjString& i) {mMudstFileName = i;}
00251
00252 void setBx7(int i) {mbx7 = i;}
00253 void setBx48(int i) {mbx48 = i;}
00254 void setSpinBits(int i) {mSpinBits = i;}
00255
00256 void setEbbc(int i) {mEbbc = i;}
00257 void setWbbc(int i) {mWbbc = i;}
00258 void setBbcTimeBin(int i) {mBbcTimeBin = i;}
00259
00260 void setZdcWestRate(float x) { mZdcWestRate = x; }
00261 void setZdcEastRate(float x) { mZdcEastRate = x; }
00262 void setZdcCoincidenceRate(float x) { mZdcCoincidenceRate = x; }
00263
00264 void setBbcWestRate(float x) { mBbcWestRate = x; }
00265 void setBbcEastRate(float x) { mBbcEastRate = x; }
00266 void setBbcCoincidenceRate(float x) { mBbcCoincidenceRate = x; }
00267
00268 void setIsValid(int i) {mIsValid = i;}
00269 void setIsPolLong(int i) {mIsPolLong = i;}
00270 void setIsPolTrans(int i) {mIsPolTrans = i;}
00271 void setIsMaskedUsingBx48(int i) {mIsMaskedUsingBx48 = i;}
00272 void setOffsetBx48minusBX7(int i) {mOffsetBx48minusBX7 = i;}
00273 void setSpin4UsingBx48(int i) {mSpin4usingBx48 = i;}
00274 void setL2Result(const int* rhs);
00275 void setMcEvent(const StPythiaEvent *ptr) {mMcEvent = ptr;}
00276
00277
00278 float fill() const {return mFill;}
00279 int runId() const {return mRunId;}
00280 int eventId() const {return mEventId;}
00281 TObjString mudstFileName() const {return mMudstFileName;}
00282
00283 int bx7() const {return mbx7;}
00284 int bx48() const {return mbx48;}
00285 int spinBits() const {return mSpinBits;}
00286
00287 int eBbc() const {return mEbbc;}
00288 int wBbc() const {return mWbbc;}
00289 int bbcTimeBin() const {return mBbcTimeBin;}
00290
00291 float zdcWestRate() const { return mZdcWestRate; }
00292 float zdcEastRate() const { return mZdcEastRate; }
00293 float zdcCoincidenceRate() const { return mZdcCoincidenceRate; }
00294 float bbcWestRate() const { return mBbcWestRate; }
00295 float bbcEastRate() const { return mBbcEastRate; }
00296 float bbcCoincidenceRate() const { return mBbcCoincidenceRate; }
00297
00298 int isValid() const {return mIsValid;}
00299 int isPolLong() const {return mIsPolLong;}
00300 int isPolTrans() const {return mIsPolTrans;}
00301 int isMaskedUsingBx48() const {return mIsMaskedUsingBx48;}
00302 int offsetBx48minusBX7() const {return mOffsetBx48minusBX7;}
00303 int spin4usingBx48() const {return mSpin4usingBx48;}
00304
00305 const TClonesArray* triggers() const {return mTriggers;}
00306 TClonesArray* triggers() {return mTriggers;}
00307 StJetSkimTrig* trigger(int trigId);
00308
00309 TClonesArray* trigHeaders() {return (TClonesArray*)mTrigHeaderArrayRef.GetObject();}
00310 StJetSkimTrigHeader* trigHeader(int trigId);
00311
00312 const TClonesArray* vertices() const {return mVertices;}
00313 StJetSkimVert* bestVert() const;
00314
00315 const int* L2Result() const { return mL2Result; }
00316
00317 const StPythiaEvent* mcEvent() const {return mMcEvent;}
00318
00319
00320 int barrelJetPatchTh(int i) const;
00321 int endcapJetPatchTh(int i) const;
00322 int overlapJetPatchTh(int i) const;
00323
00324 int barrelHighTowerTh(int i) const;
00325 int endcapHighTowerTh(int i) const;
00326
00327 int barrelJetPatchAdc(int jp) const;
00328 int endcapJetPatchAdc(int jp) const;
00329 int overlapJetPatchAdc(int jp) const;
00330
00331 map<int,int> barrelJetPatchesAboveTh(int i) const;
00332 map<int,int> endcapJetPatchesAboveTh(int i) const;
00333 map<int,int> overlapJetPatchesAboveTh(int i) const;
00334
00335 int emcLayer2() const;
00336
00337
00338
00339 int BHT() const;
00340 int EHT() const;
00341 int JP1() const;
00342 int JP2() const;
00343 int BJP1() const;
00344 int BJP2() const;
00345 int EJP1() const;
00346 int EJP2() const;
00347 int AJP() const;
00348 int BAJP() const;
00349 int EAJP() const;
00350 int JP0() const;
00351
00352 int BHT0() const;
00353 int BHT1() const;
00354 int BHT2() const;
00355 int BHT3() const;
00356
00357 int EHT0() const;
00358 int EHT1() const;
00359
00360
00361 void setBarrelJetPatchTh(int i, int value);
00362 void setEndcapJetPatchTh(int i, int value);
00363 void setOverlapJetPatchTh(int i, int value);
00364
00365 void setBarrelHighTowerTh(int i, int value);
00366 void setEndcapHighTowerTh(int i, int value);
00367
00368 void setBarrelJetPatchAdc(int jp, int adc);
00369 void setEndcapJetPatchAdc(int jp, int adc);
00370 void setOverlapJetPatchAdc(int jp, int adc);
00371
00372 void setEmcLayer2(int value);
00373
00374 private:
00375
00376 int btest(int x, int pos) const { return x >> pos & 1; }
00377
00378
00379 int getbits(int x, int pos, int n) const { return x >> pos & ~(~0 << n); }
00380
00381
00382 void setbits(int& x, int pos, int value) const { x |= value << pos; }
00383
00384 float mFill;
00385 int mRunId;
00386 int mEventId;
00387 TObjString mMudstFileName;
00388 float mZdcWestRate;
00389 float mZdcEastRate;
00390 float mZdcCoincidenceRate;
00391 float mBbcWestRate;
00392 float mBbcEastRate;
00393 float mBbcCoincidenceRate;
00394
00395 TClonesArray* mTriggers;
00396 TRef mTrigHeaderArrayRef;
00397
00398 TClonesArray* mVertices;
00399 StJetSkimVert* mBestVert;
00400 TRef mBestVertRef;
00401
00402 const StPythiaEvent* mMcEvent;
00403
00404
00405 int mbx7;
00406 int mbx48;
00407 int mSpinBits;
00408
00409
00410 int mEbbc;
00411 int mWbbc;
00412 int mBbcTimeBin;
00413
00414
00415 int mIsValid;
00416 int mIsPolLong;
00417 int mIsPolTrans;
00418 int mIsMaskedUsingBx48;
00419 int mOffsetBx48minusBX7;
00420 int mSpin4usingBx48;
00421
00424 int mL2Result[64];
00425
00426 int mBarrelJetPatchTh[3];
00427 int mEndcapJetPatchTh[3];
00428 int mOverlapJetPatchTh[3];
00429
00430 int mBarrelHighTowerTh[4];
00431 int mEndcapHighTowerTh[2];
00432
00433 int mBarrelJetPatchAdc[18];
00434 int mEndcapJetPatchAdc[6];
00435 int mOverlapJetPatchAdc[6];
00436
00437 int mEmcLayer2;
00438
00439 ClassDef(StJetSkimEvent,5);
00440 };
00441
00442
00443 inline int StJetSkimEvent::barrelJetPatchTh(int i) const { return mBarrelJetPatchTh[i]; }
00444 inline int StJetSkimEvent::endcapJetPatchTh(int i) const { return mEndcapJetPatchTh[i]; }
00445 inline int StJetSkimEvent::overlapJetPatchTh(int i) const { return mOverlapJetPatchTh[i]; }
00446
00447 inline int StJetSkimEvent::barrelHighTowerTh(int i) const { return mBarrelHighTowerTh[i]; }
00448 inline int StJetSkimEvent::endcapHighTowerTh(int i) const { return mEndcapHighTowerTh[i]; }
00449
00450 inline int StJetSkimEvent::barrelJetPatchAdc(int jp) const { return mBarrelJetPatchAdc[jp]; }
00451 inline int StJetSkimEvent::endcapJetPatchAdc(int jp) const { return mEndcapJetPatchAdc[jp]; }
00452 inline int StJetSkimEvent::overlapJetPatchAdc(int jp) const { return mOverlapJetPatchAdc[jp]; }
00453
00454 inline int StJetSkimEvent::emcLayer2() const { return mEmcLayer2; }
00455
00456 inline int StJetSkimEvent::BHT() const { return getbits(mEmcLayer2,0,4); }
00457 inline int StJetSkimEvent::EHT() const { return getbits(mEmcLayer2,4,2); }
00458 inline int StJetSkimEvent::JP1() const { return btest(mEmcLayer2,6); }
00459 inline int StJetSkimEvent::JP2() const { return btest(mEmcLayer2,7); }
00460 inline int StJetSkimEvent::BJP1() const { return btest(mEmcLayer2,8); }
00461 inline int StJetSkimEvent::BJP2() const { return btest(mEmcLayer2,9); }
00462 inline int StJetSkimEvent::EJP1() const { return btest(mEmcLayer2,10); }
00463 inline int StJetSkimEvent::EJP2() const { return btest(mEmcLayer2,11); }
00464 inline int StJetSkimEvent::AJP() const { return btest(mEmcLayer2,12); }
00465 inline int StJetSkimEvent::BAJP() const { return btest(mEmcLayer2,13); }
00466 inline int StJetSkimEvent::EAJP() const { return btest(mEmcLayer2,14); }
00467 inline int StJetSkimEvent::JP0() const { return btest(mEmcLayer2,15); }
00468
00469 inline int StJetSkimEvent::BHT0() const { return btest(mEmcLayer2,0); }
00470 inline int StJetSkimEvent::BHT1() const { return btest(mEmcLayer2,1); }
00471 inline int StJetSkimEvent::BHT2() const { return btest(mEmcLayer2,2); }
00472 inline int StJetSkimEvent::BHT3() const { return btest(mEmcLayer2,3); }
00473
00474 inline int StJetSkimEvent::EHT0() const { return btest(mEmcLayer2,4); }
00475 inline int StJetSkimEvent::EHT1() const { return btest(mEmcLayer2,5); }
00476
00477
00478 inline void StJetSkimEvent::setBarrelJetPatchTh(int i, int value) { mBarrelJetPatchTh[i] = value; }
00479 inline void StJetSkimEvent::setEndcapJetPatchTh(int i, int value) { mEndcapJetPatchTh[i] = value; }
00480 inline void StJetSkimEvent::setOverlapJetPatchTh(int i, int value) { mOverlapJetPatchTh[i] = value; }
00481
00482 inline void StJetSkimEvent::setBarrelHighTowerTh(int i, int value) { mBarrelHighTowerTh[i] = value; }
00483 inline void StJetSkimEvent::setEndcapHighTowerTh(int i, int value) { mEndcapHighTowerTh[i] = value; }
00484
00485 inline void StJetSkimEvent::setBarrelJetPatchAdc(int jp, int adc) { mBarrelJetPatchAdc[jp] = adc; }
00486 inline void StJetSkimEvent::setEndcapJetPatchAdc(int jp, int adc) { mEndcapJetPatchAdc[jp] = adc; }
00487 inline void StJetSkimEvent::setOverlapJetPatchAdc(int jp, int adc) { mOverlapJetPatchAdc[jp] = adc; }
00488
00489 inline void StJetSkimEvent::setEmcLayer2(int value) { mEmcLayer2 = value; }
00490
00491 #endif