00001
00002
00003
00004
00005
00006
00007
00008 #include "StMaker.h"
00009
00010
00011 #include "StTriggerUtilities/Bemc/StBemcTriggerSimu.h"
00012 #include "StTriggerUtilities/Eemc/StEemcTriggerSimu.h"
00013 #include "StTriggerUtilities/StDSMUtilities/StDSM2009Utilities.hh"
00014 #include "StEmcTriggerSimu.h"
00015
00016 ClassImp(StEmcTriggerSimu);
00017
00018 StEmcTriggerSimu::StEmcTriggerSimu()
00019 : mBemc(0)
00020 , mEemc(0)
00021 , mEM201(new DSMLayer_EM201_2009)
00022 , mLD301(new DSMLayer_LD301_2009)
00023 , mTcu(new TCU)
00024 {
00025 }
00026
00027 StEmcTriggerSimu::~StEmcTriggerSimu()
00028 {
00029 delete mEM201; mEM201 = 0;
00030 delete mLD301; mLD301 = 0;
00031 delete mTcu; mTcu = 0;
00032 }
00033
00034 void StEmcTriggerSimu::setBemc(StBemcTriggerSimu* bemc)
00035 {
00036 mBemc = bemc;
00037 }
00038
00039 void StEmcTriggerSimu::setEemc(StEemcTriggerSimu* eemc)
00040 {
00041 mEemc = eemc;
00042 }
00043
00044 void StEmcTriggerSimu::InitRun(int runNumber)
00045 {
00046
00047 StMaker* chain = StMaker::GetChain();
00048 assert(chain);
00049 mDBTime = chain->GetDBTime();
00050 mYear = mDBTime.GetYear();
00051 }
00052
00053 void StEmcTriggerSimu::Make()
00054 {
00055 if (mYear >= 2009) {
00056 if (mBemc) mBemc->get2009_DSMLayer1_Result()->write(*mEM201);
00057 if (mEemc) mEemc->get2009_DSMLayer1_Result()->write(*mEM201);
00058
00059 TString EM201String = "EM201: ";
00060 for (int ch = 0; ch < 8; ++ch) EM201String += Form("%04x ",(*mEM201)[0].channels[ch]);
00061 LOG_DEBUG << EM201String << endm;
00062
00063 mEM201->run();
00064 mEM201->write(*mLD301);
00065
00066 LOG_DEBUG << Form("EM201 OUTPUT: BHT=%d EHT=%d JP1=%d JP2=%d BJP1=%d BJP2=%d EJP1=%d EJP2=%d AJP=%d BAJP=%d EAJP=%d",
00067 BHT(),EHT(),JP1(),JP2(),BJP1(),BJP2(),EJP1(),EJP2(),AJP(),BAJP(),EAJP()) << endm;
00068
00069 TString LD301String = "LD301: ";
00070 for (int ch = 0; ch < 8; ++ch) LD301String += Form("%04x ",(*mLD301)[0].channels[ch]);
00071 LOG_DEBUG << LD301String << endm;
00072
00073 mLD301->run();
00074 mTcu->setInput((*mLD301)[0].output);
00075
00076 LOG_DEBUG << Form("TCU: %04x",mTcu->input() & 0xffff) << endm;
00077 }
00078 }
00079
00080 bool StEmcTriggerSimu::isTrigger(int trigId)
00081 {
00082 return mTcu->isTrigger(trigId);
00083 }
00084
00085 set<int> StEmcTriggerSimu::triggerIds() const
00086 {
00087 return mTcu->triggerIds();
00088 }
00089
00090 StTriggerSimuDecision StEmcTriggerSimu::triggerDecision(int trigId)
00091 {
00092 return isTrigger(trigId) ? kYes : kNo;
00093 }
00094
00095 void StEmcTriggerSimu::defineTrigger(const TriggerDefinition& trigdef)
00096 {
00097 mTcu->defineTrigger(trigdef);
00098 }
00099
00100 void StEmcTriggerSimu::defineTrigger(int triggerIndex, const char* name, int triggerId, int onbits, int offbits, int onbits1, int onbits2, int onbits3, int offbits1, int offbits2, int offbits3)
00101 {
00102 TriggerDefinition triggerDefinition;
00103 triggerDefinition.triggerIndex = triggerIndex;
00104 strcpy(triggerDefinition.name,name);
00105 triggerDefinition.triggerId = triggerId;
00106 triggerDefinition.onbits = onbits;
00107 triggerDefinition.offbits = offbits;
00108 triggerDefinition.onbits1 = onbits1;
00109 triggerDefinition.onbits2 = onbits2;
00110 triggerDefinition.onbits3 = onbits3;
00111 triggerDefinition.offbits1 = offbits1;
00112 triggerDefinition.offbits2 = offbits2;
00113 triggerDefinition.offbits3 = offbits3;
00114 defineTrigger(triggerDefinition);
00115 }
00116
00117 int StEmcTriggerSimu::EM201output() const { return (*mEM201)[0].output; }
00118
00119 int StEmcTriggerSimu::overlapJetPatchTh(int i) const { return mEM201->getRegister(i); }
00120
00121 void StEmcTriggerSimu::getOverlapJetPatchAdc(int i, int& jp, int& adc) const
00122 {
00123 int jp_partial = (*mEM201)[0].channels[6+i] >> 12 & 0x3;
00124 jp = (1-i)*3+jp_partial-1;
00125 adc = (*mEM201)[0].info[i];
00126 }